[libcalamares] Move translation-related functions to Retranslator.h

main
Adriaan de Groot 6 years ago
parent ac095d9ed0
commit 66c4445077

@ -30,6 +30,7 @@
#include "utils/CalamaresUtilsSystem.h"
#include "utils/Dirs.h"
#include "utils/Logger.h"
#include "utils/Retranslator.h"
#include "JobQueue.h"
#include "Branding.h"
#include "Settings.h"

@ -24,116 +24,8 @@
#include "CalamaresUtils.h"
#include "CalamaresConfig.h"
#include "Logger.h"
#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QLocale>
#include <QStandardPaths>
#include <QTranslator>
#include <iostream>
using std::cerr;
namespace CalamaresUtils
{
static QTranslator* s_brandingTranslator = nullptr;
static QTranslator* s_translator = nullptr;
static QString s_translatorLocaleName;
void
installTranslator( const QLocale& locale,
const QString& brandingTranslationsPrefix,
QObject* parent )
{
QString localeName = locale.name();
localeName.replace( "-", "_" );
if ( localeName == "C" )
localeName = "en";
// Special case of sr@latin
//
// See top-level CMakeLists.txt about special cases for translation loading.
if ( locale.language() == QLocale::Language::Serbian && locale.script() == QLocale::Script::LatinScript )
localeName = QStringLiteral( "sr@latin" );
cDebug() << "Looking for translations for" << localeName;
QTranslator* translator = nullptr;
// Branding translations
if ( !brandingTranslationsPrefix.isEmpty() )
{
QString brandingTranslationsDirPath( brandingTranslationsPrefix );
brandingTranslationsDirPath.truncate( brandingTranslationsPrefix.lastIndexOf(
QDir::separator() ) );
QDir brandingTranslationsDir( brandingTranslationsDirPath );
if ( brandingTranslationsDir.exists() )
{
QString filenameBase( brandingTranslationsPrefix );
filenameBase.remove( 0, brandingTranslationsPrefix.lastIndexOf(
QDir::separator() ) + 1 );
translator = new QTranslator( parent );
if ( translator->load( locale,
filenameBase,
"_",
brandingTranslationsDir.absolutePath() ) )
{
cDebug() << Logger::SubEntry << "Branding using locale:" << localeName;
}
else
{
cDebug() << Logger::SubEntry << "Branding using default, system locale not found:" << localeName;
translator->load( brandingTranslationsPrefix + "en" );
}
if ( s_brandingTranslator )
{
QCoreApplication::removeTranslator( s_brandingTranslator );
delete s_brandingTranslator;
}
QCoreApplication::installTranslator( translator );
s_brandingTranslator = translator;
}
}
// Calamares translations
translator = new QTranslator( parent );
if ( translator->load( QString( ":/lang/calamares_" ) + localeName ) )
{
cDebug() << Logger::SubEntry << "Calamares using locale:" << localeName;
}
else
{
cDebug() << Logger::SubEntry << "Calamares using default, system locale not found:" << localeName;
translator->load( QString( ":/lang/calamares_en" ) );
}
if ( s_translator )
{
QCoreApplication::removeTranslator( s_translator );
delete s_translator;
}
QCoreApplication::installTranslator( translator );
s_translator = translator;
s_translatorLocaleName = localeName;
}
QString
translatorLocaleName()
{
return s_translatorLocaleName;
}
QString
removeDiacritics( const QString& string )
{

@ -37,18 +37,6 @@ class QObject;
*/
namespace CalamaresUtils
{
/**
* @brief installTranslator changes the application language.
* @param locale the new locale.
* @param brandingTranslationsPrefix the branding path prefix, from Calamares::Branding.
* @param parent the parent QObject.
*/
DLLEXPORT void installTranslator( const QLocale& locale,
const QString& brandingTranslationsPrefix,
QObject* parent );
DLLEXPORT QString translatorLocaleName();
/**
* @brief removeDiacritics replaces letters with diacritics and ligatures with
* alternative forms and digraphs.

@ -18,11 +18,107 @@
#include "Retranslator.h"
#include "Logger.h"
#include <QCoreApplication>
#include <QDir>
#include <QEvent>
#include <QTranslator>
namespace CalamaresUtils {
static QTranslator* s_brandingTranslator = nullptr;
static QTranslator* s_translator = nullptr;
static QString s_translatorLocaleName;
void
installTranslator( const QLocale& locale,
const QString& brandingTranslationsPrefix,
QObject* parent )
{
QString localeName = locale.name();
localeName.replace( "-", "_" );
if ( localeName == "C" )
localeName = "en";
// Special case of sr@latin
//
// See top-level CMakeLists.txt about special cases for translation loading.
if ( locale.language() == QLocale::Language::Serbian && locale.script() == QLocale::Script::LatinScript )
localeName = QStringLiteral( "sr@latin" );
cDebug() << "Looking for translations for" << localeName;
QTranslator* translator = nullptr;
// Branding translations
if ( !brandingTranslationsPrefix.isEmpty() )
{
QString brandingTranslationsDirPath( brandingTranslationsPrefix );
brandingTranslationsDirPath.truncate( brandingTranslationsPrefix.lastIndexOf(
QDir::separator() ) );
QDir brandingTranslationsDir( brandingTranslationsDirPath );
if ( brandingTranslationsDir.exists() )
{
QString filenameBase( brandingTranslationsPrefix );
filenameBase.remove( 0, brandingTranslationsPrefix.lastIndexOf(
QDir::separator() ) + 1 );
translator = new QTranslator( parent );
if ( translator->load( locale,
filenameBase,
"_",
brandingTranslationsDir.absolutePath() ) )
{
cDebug() << Logger::SubEntry << "Branding using locale:" << localeName;
}
else
{
cDebug() << Logger::SubEntry << "Branding using default, system locale not found:" << localeName;
translator->load( brandingTranslationsPrefix + "en" );
}
if ( s_brandingTranslator )
{
QCoreApplication::removeTranslator( s_brandingTranslator );
delete s_brandingTranslator;
}
QCoreApplication::installTranslator( translator );
s_brandingTranslator = translator;
}
}
// Calamares translations
translator = new QTranslator( parent );
if ( translator->load( QString( ":/lang/calamares_" ) + localeName ) )
{
cDebug() << Logger::SubEntry << "Calamares using locale:" << localeName;
}
else
{
cDebug() << Logger::SubEntry << "Calamares using default, system locale not found:" << localeName;
translator->load( QString( ":/lang/calamares_en" ) );
}
if ( s_translator )
{
QCoreApplication::removeTranslator( s_translator );
delete s_translator;
}
QCoreApplication::installTranslator( translator );
s_translator = translator;
s_translatorLocaleName = localeName;
}
QString
translatorLocaleName()
{
return s_translatorLocaleName;
}
void
Retranslator::attachRetranslator( QObject* parent,

@ -19,15 +19,30 @@
#ifndef UTILS_RETRANSLATOR_H
#define UTILS_RETRANSLATOR_H
#include "DllMacro.h"
#include <QList>
#include <QObject>
#include <QString>
#include <functional>
class QEvent;
class QLocale;
namespace CalamaresUtils
{
/**
* @brief installTranslator changes the application language.
* @param locale the new locale.
* @param brandingTranslationsPrefix the branding path prefix, from Calamares::Branding.
* @param parent the parent QObject.
*/
DLLEXPORT void installTranslator( const QLocale& locale,
const QString& brandingTranslationsPrefix,
QObject* parent );
DLLEXPORT QString translatorLocaleName();
class Retranslator : public QObject
{

Loading…
Cancel
Save