Russian Qt Forum
Ноябрь 23, 2024, 02:33
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Интернационализация, локализация
>
Перевод
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Перевод (Прочитано 6726 раз)
Вудруф
Гость
Перевод
«
:
Декабрь 08, 2005, 09:05 »
Я полистал форум и всё равно не понял, как динамически изменить язык.
Сделал следующим образом:
//Find language files
QDir dir (QCoreApplication::applicationDirPath() + "/../translations");
QStringList fileNames = dir.entryList (QStringList ("app_*.qm"), QDir::Files, QDir::Name);
//Creating acts
defaultLanguageAct = new QAction ("English", languageGroup);
defaultLanguageAct -> setCheckable (true);
connect (defaultLanguageAct, SIGNAL (triggered()), SLOT (setDefaultlanguage()));
defaultLanguageAct -> setWhatsThis (tr ("Set english language"));
for (int i = 0; i < fileNames.size(); ++i)
{
QTranslator translator;
translator.load (dir.absoluteFilePath (fileNames
));
QAction *current = new QAction (translator.translate ("Language", "English"), languageGroup);
current -> setCheckable (true);
current -> setWhatsThis (translator.translate ("Language", "Set english language"));
languageActs.push_back (current);
qmFileForAction.insert (std::pair <QAction*, QString> (current, translator.translate ("Language", "en")));
}
//Connecting language acts
for (unsigned int i = 0; i < languageActs.size(); ++i)
connect (languageActs
, SIGNAL (triggered()), SLOT (languageChanged()));
Далее при смене языка:
QCoreApplication::instance() -> removeTranslator (applicationTranslator);
applicationTranslator -> load (QCoreApplication::applicationDirPath() + "/../translations/lang_" + qmFileForAction[languageGroup -> checkedAction()]);
QCoreApplication::instance() -> installTranslator (applicationTranslator);
Нажимаю на Русский, файл app_ru.qt загружается, а интерфейс не меняется!
Что делать?
Записан
Вудруф
Гость
Перевод
«
Ответ #1 :
Декабрь 08, 2005, 09:07 »
И ещё вопрос: Как загрузить файл qt_ru.qm и где он вообще находится?
Записан
joktar
Гость
Перевод
«
Ответ #2 :
Декабрь 08, 2005, 14:26 »
После загрузке файла нужно вызывать retranslateUi()
qt_ru.qm генерится lupdate/lrelease
Записан
L.Marvell
Гость
Перевод
«
Ответ #3 :
Декабрь 08, 2005, 14:41 »
А зачем такие сложности с путями при загрузке файлов? Если просто делать translator->load(filename), то прога попытается найти файл перевода в своей директории. Если же переводы находятся в дир-я проги/translations, тогда translator->load(filename, "translations").
По поводу того, что перевод не срабатывает. А интерфейс разрабатывался в дизайнере? Если да, тогда после загрузки транслятора еще нужно сделать ui->retranslateUi()
Записан
Вудруф
Гость
Перевод
«
Ответ #4 :
Декабрь 09, 2005, 13:33 »
Ошибка найдена... Файлы назывались "app_*.qm", а загружать пытался "lang_.qm"
Что вверху и видно
Под qt_ru.qm подразумевался файл с переводами самой Qt... Где его найти?
добавлено спустя 21 минуту:
И всё равно это проблему не решило..
QCoreApplication::instance() -> installTranslator (applicationTranslator);
После выполнения этой строки ничего не переводится, хотя
applicationTranslator -> translate ("Language", "English") возвращает "Русский", т.е. он был загружен... Ничего не понимаю.
Дизайн делался руками, поэтому видимо функция retranslateUi не нужна...
Записан
L.Marvell
Гость
Перевод
«
Ответ #5 :
Декабрь 09, 2005, 18:45 »
Нужно писать свою функцию аля retranslateStrings(). Сейчас в точности не вспомню всю кухню, если интересует, завтра напишу более детально.
Записан
Dendy
Гость
Перевод
«
Ответ #6 :
Декабрь 09, 2005, 19:09 »
Установка транслятора имеет єффект только если она делается
перед
получением данньlх из транстятора. Фактически заменяется хеш для переводимьlх строк. Визуальньlе и все остальньlе елементьl управления для повьlшения скорости работьl хранят в себе результат, полученньlй из хеша, а не сам ключ. Поєтому после заменьl транслятора необходимо переполучить заново все данньlе из нового хеша. Для UI-форм єто делается с помощью
retranslateUi( QWidget * )
, для всех остальньlх случаев (например, создание форм руцями в коде) нужно реализовьlвать механизмьl заменьl строк/картинок самому.
Записан
Вудруф
Гость
Перевод
«
Ответ #7 :
Декабрь 10, 2005, 19:20 »
Да это всё понятно. Всё равно не работало...
А проблема нашлась в следующем:
Не работает:
namespace myNamespace
{
class MainWindow : public QMainWindow
{
Q_OBJECT
Работает:
class MainWindow : public QMainWindow
{
Q_OBJECT
Весьма странно, вам не кажется?
добавлено спустя 4 минуты:
Да, кстати, про перевод самой Qt кто-нибудь ответить может?
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...