[libcalamares] Move translation-related functions to Retranslator.h
This commit is contained in:
parent
ac095d9ed0
commit
66c4445077
@ -30,6 +30,7 @@
|
|||||||
#include "utils/CalamaresUtilsSystem.h"
|
#include "utils/CalamaresUtilsSystem.h"
|
||||||
#include "utils/Dirs.h"
|
#include "utils/Dirs.h"
|
||||||
#include "utils/Logger.h"
|
#include "utils/Logger.h"
|
||||||
|
#include "utils/Retranslator.h"
|
||||||
#include "JobQueue.h"
|
#include "JobQueue.h"
|
||||||
#include "Branding.h"
|
#include "Branding.h"
|
||||||
#include "Settings.h"
|
#include "Settings.h"
|
||||||
|
@ -24,116 +24,8 @@
|
|||||||
|
|
||||||
#include "CalamaresUtils.h"
|
#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
|
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
|
QString
|
||||||
removeDiacritics( const QString& string )
|
removeDiacritics( const QString& string )
|
||||||
{
|
{
|
||||||
|
@ -37,18 +37,6 @@ class QObject;
|
|||||||
*/
|
*/
|
||||||
namespace CalamaresUtils
|
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
|
* @brief removeDiacritics replaces letters with diacritics and ligatures with
|
||||||
* alternative forms and digraphs.
|
* alternative forms and digraphs.
|
||||||
|
@ -18,11 +18,107 @@
|
|||||||
|
|
||||||
#include "Retranslator.h"
|
#include "Retranslator.h"
|
||||||
|
|
||||||
|
#include "Logger.h"
|
||||||
|
|
||||||
|
#include <QCoreApplication>
|
||||||
|
#include <QDir>
|
||||||
#include <QEvent>
|
#include <QEvent>
|
||||||
|
#include <QTranslator>
|
||||||
|
|
||||||
|
|
||||||
namespace CalamaresUtils {
|
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
|
void
|
||||||
Retranslator::attachRetranslator( QObject* parent,
|
Retranslator::attachRetranslator( QObject* parent,
|
||||||
|
@ -19,15 +19,30 @@
|
|||||||
#ifndef UTILS_RETRANSLATOR_H
|
#ifndef UTILS_RETRANSLATOR_H
|
||||||
#define UTILS_RETRANSLATOR_H
|
#define UTILS_RETRANSLATOR_H
|
||||||
|
|
||||||
|
#include "DllMacro.h"
|
||||||
|
|
||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
class QEvent;
|
class QEvent;
|
||||||
|
class QLocale;
|
||||||
|
|
||||||
namespace CalamaresUtils
|
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
|
class Retranslator : public QObject
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user