Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: -QT- от Сентябрь 21, 2007, 14:14



Название: Qt 4.3.1 и QTranslator (фичи или баги)
Отправлено: -QT- от Сентябрь 21, 2007, 14:14
В ядре программы:
Код:
    foreach (QString fileName, entryList)
    {
        QPluginLoader loader(fileName);
        QObject *plugin = loader.instance();
        if (plugin)
        {
            QMyInterfaces *iModule = qobject_cast<QMyInterfaces *>(plugin);
            if (iModule)
            {
                // инициализация локализации модуля
                qApp->installTranslator( iModule->pluginTranslator(translationLanguage) );
                //qDebug() << "checked:" << translationLanguage ;
В плагине:
Код:
QTranslator *QMyMainPlugin::pluginTranslator(QString locale)
{
    QTranslator *translator = new QTranslator(this);
    QString translationFile = ":/language/translations/"+locale+".qm";
    translator->load(translationFile);
    return translator;

}

До версии 4.3.1 работало - тоесть переводило интерфейс.
Сейчас не ругается но и не переводит. Может кто сталкивался. СОС


Название: Re: Qt 4.3.1 и QTranslator (фичи или баги)
Отправлено: ритт от Сентябрь 21, 2007, 15:29
почему не работает не могу сказать - попробовал, вроде, переводит (4.3.1, вин32)
а зачем кутранслятор возвращать? не проще ли строку? или вообще предефайнить (по имени плагина, например)?

свою реализацию перевода из плагинов уже описывал: http://prog.org.ru/forum/index.php/topic,6045.msg26798.html#msg26798 (http://prog.org.ru/forum/index.php/topic,6045.msg26798.html#msg26798)


Название: Re: Qt 4.3.1 и QTranslator (фичи или баги)
Отправлено: Вячеслав от Сентябрь 21, 2007, 20:05
я в плагине QCoreApplication::instance () ->installTranslator(xxxxxxxxxxxxx) дергал ;)


Название: Re: Qt 4.3.1 и QTranslator (фичи или баги)
Отправлено: -QT- от Сентябрь 21, 2007, 20:35
Да хочу чтобы в каждом отдельном плагине был набор собственных переводов и транслятор для этого
плагина уничтожался вместе с ним.  ???


Название: Re: Qt 4.3.1 и QTranslator (фичи или баги)
Отправлено: -QT- от Сентябрь 21, 2007, 22:01
я в плагине QCoreApplication::instance () ->installTranslator(xxxxxxxxxxxxx) дергал ;)

кусочек кода - если не трудно.
Я вроде бы тоже так делаю но эффекта НЕТ.


Название: Re: Qt 4.3.1 и QTranslator (фичи или баги)
Отправлено: Вячеслав от Сентябрь 21, 2007, 22:27
я в плагине QCoreApplication::instance () ->installTranslator(xxxxxxxxxxxxx) дергал ;)

кусочек кода - если не трудно.
Я вроде бы тоже так делаю но эффекта НЕТ.
Код:
			QCoreApplication* app=QCoreApplication::instance();
  Q_INIT_RESOURCE(Styles);

QString locale = QLocale::system().name();
translator=new QTranslator;

if (translator->load(QString("df_iStyles_") + locale))
app->installTranslator(translator);
Это из архива ... То что работает - в понедельик на работе гляну


Название: Re: Qt 4.3.1 и QTranslator (фичи или баги)
Отправлено: -QT- от Сентябрь 24, 2007, 09:11
Цитировать
Код:
			QCoreApplication* app=QCoreApplication::instance();
  Q_INIT_RESOURCE(Styles);

QString locale = QLocale::system().name();
translator=new QTranslator;

if (translator->load(QString("df_iStyles_") + locale))
app->installTranslator(translator);
Это из архива ... То что работает - в понедельик на работе гляну
Попробовал загружать транслятор внутри модуля - результат тотже.
Наверное что то изменилось в трансляторе или в реализации подключения плагинов.
Это только в 4,3,1 - потому как в 4,2,3 все работает правильно.


Название: Re: Qt 4.3.1 и QTranslator (фичи или баги)
Отправлено: Вячеслав от Сентябрь 24, 2007, 09:50
Завтра доползу до пересборки клиентской части - проверю ....


Название: Re: Qt 4.3.1 и QTranslator (фичи или баги)
Отправлено: -QT- от Сентябрь 26, 2007, 11:29
Таки это была фича  ;D
в ресурсах стояли одинаковые пути то есть -
при загрузке главного модуля(ядра) программы
Код:
translator->load(":/language/translations/"+locale+".qm");
в методе загрузки транслятора было тоже самое (тоесть совпадала структура каталогов и файлов ресурсов в двух проектах)
Код:
translator->load(":/language/translations/"+locale+".qm");
после изменения в плагине на
Код:
translator->load(":/translations/translations/"+locale+".qm");
и использовании в исходниках не QObject::tr("demo text"), а просто tr("demo text"); все заработало.
По какой причине это изменилось, я не знаю - если кто знает объясните пожалуста.