Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: aliks-os от Апрель 02, 2007, 12:12



Название: QT4.2.1 Проблемы с локализацией
Отправлено: aliks-os от Апрель 02, 2007, 12:12
Использую QT4.2.1 и SuSE 10.2

Для загрузки файла перевода использую следующий код

    QString locale = QLocale::system().name();

    QTranslator translator;
    translator.load(QString("qwe_") + locale);
    app.installTranslator(&translator);

Однако локализация не работает. Начинаю проверять, что при
выполнении возвращает мне переменная locale...Она принимает
значение ru_RU. Как мне добиться чтобы она принимала значение
только ru ?


Название: QT4.2.1 Проблемы с локализацией
Отправлено: SABROG от Апрель 02, 2007, 12:21
Так ?

Код:

QLocale::system().name().left(2)


Название: QT4.2.1 Проблемы с локализацией
Отправлено: aliks-os от Апрель 02, 2007, 12:30
Попробую. Я думал что есть более красивый способ выдергивать краткое название языка без страны.
В любом случае спасибо :)


Название: QT4.2.1 Проблемы с локализацией
Отправлено: Вудруф от Апрель 02, 2007, 13:15
Как вариант, искать ВСЕ файлы перевода и "выдирать" из них язык.
См. examples/I18N
Код:

     QStringList qmFiles = findQmFiles();
     for (int i = 0; i < qmFiles.size(); ++i) {
         QCheckBox *checkBox = new QCheckBox(languageName(qmFiles[i]));
         qmFileForCheckBoxMap.insert(checkBox, qmFiles[i]);
         connect(checkBox, SIGNAL(toggled(bool)), this, SLOT(checkBoxToggled()));
         groupBoxLayout->addWidget(checkBox, i / 2, i % 2);
     }

Код:

QStringList LanguageChooser::findQmFiles()
 {
     QDir dir(":/translations");
     QStringList fileNames = dir.entryList(QStringList("*.qm"), QDir::Files,
                                           QDir::Name);
     QMutableStringListIterator i(fileNames);
     while (i.hasNext()) {
         i.next();
         i.setValue(dir.filePath(i.value()));
     }
     return fileNames;
 }


Название: QT4.2.1 Проблемы с локализацией
Отправлено: noosooth от Апрель 02, 2007, 16:36
Вообще-то QTranslator::load("trans.xx_XX");  проверяет наличие
"trans_xx_XX.qm" и ежели не находит, то пытается подгрузить
"trans_xx.qm".

Так что
Код:
QString locale = QLocale::system().name(); 
QTranslator translator;
translator.load("trans_") + locale);
app.installTranslator(&translator);

должна автоматом подгрузить trans_ru.qm, даже если  locale равна "ru_RU".
По крайне мере под виндой это так.
В линуксе разве по другому?
Сдается мне что и в нем должно работать.


Название: QT4.2.1 Проблемы с локализацией
Отправлено: aliks-os от Апрель 03, 2007, 08:36
Теоритически так, во всяком случае не срабатывает


Название: QT4.2.1 Проблемы с локализацией
Отправлено: SABROG от Апрель 03, 2007, 08:42
А что именно не работает ? Твои файлы локализации или общие ? Я например определяю по контекстному меню QLineEdit, если слова "Копировать", "Вставить" на русском, значит пашет.


Название: QT4.2.1 Проблемы с локализацией
Отправлено: noosooth от Апрель 03, 2007, 11:56
Цитата: "aliks-os"
Теоретически так, во всяком случае не срабатывает

Кстати,
Код:
translator.load(QString("qwe_") + locale); 

что возвращает? Может просто не в том каталоге смотрит?


Название: QT4.2.1 Проблемы с локализацией
Отправлено: aliks-os от Апрель 04, 2007, 11:49
этот код возвращает ru_RU,
каталог верный


Название: QT4.2.1 Проблемы с локализацией
Отправлено: noosooth от Апрель 04, 2007, 13:23
Цитата: "aliks-os"
этот код возвращает ru_RU,
каталог верный

Я спросил что возвращает ф-ция:
Код:
 bool QTranslator::load (...)