Russian Qt Forum
Ноябрь 23, 2024, 02:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QT4.2.1 Проблемы с локализацией  (Прочитано 6798 раз)
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 ?
Записан
SABROG
Гость
« Ответ #1 : Апрель 02, 2007, 12:21 »

Так ?

Код:

QLocale::system().name().left(2)
Записан
aliks-os
Гость
« Ответ #2 : Апрель 02, 2007, 12:30 »

Попробую. Я думал что есть более красивый способ выдергивать краткое название языка без страны.
В любом случае спасибо Улыбающийся
Записан
Вудруф
Гость
« Ответ #3 : Апрель 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;
 }
Записан
noosooth
Гость
« Ответ #4 : Апрель 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".
По крайне мере под виндой это так.
В линуксе разве по другому?
Сдается мне что и в нем должно работать.
Записан
aliks-os
Гость
« Ответ #5 : Апрель 03, 2007, 08:36 »

Теоритически так, во всяком случае не срабатывает
Записан
SABROG
Гость
« Ответ #6 : Апрель 03, 2007, 08:42 »

А что именно не работает ? Твои файлы локализации или общие ? Я например определяю по контекстному меню QLineEdit, если слова "Копировать", "Вставить" на русском, значит пашет.
Записан
noosooth
Гость
« Ответ #7 : Апрель 03, 2007, 11:56 »

Цитата: "aliks-os"
Теоретически так, во всяком случае не срабатывает

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

что возвращает? Может просто не в том каталоге смотрит?
Записан
aliks-os
Гость
« Ответ #8 : Апрель 04, 2007, 11:49 »

этот код возвращает ru_RU,
каталог верный
Записан
noosooth
Гость
« Ответ #9 : Апрель 04, 2007, 13:23 »

Цитата: "aliks-os"
этот код возвращает ru_RU,
каталог верный

Я спросил что возвращает ф-ция:
Код:
 bool QTranslator::load (...)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 20.