Поиск:

Ответ в темуСоздание новой темы Создание опроса
> локализация 
:(
    Опции темы
gordmiand
Дата 17.3.2013, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



Есть достаточно большая программа — модулей (классов) 20...
делаю ее локализацию:
1.    в progect.pro прописываю TRANSLATIONS = rus.ts
2.    даю команду lupdate progect.pro — создается rus.ts
3.    программой Qt Linguist открываю rus.ts и перевожу в нем все строки (nazvanie 1, nazvanie 2,...)
4.    компилирую rus.qm
5.    в MainClass программы:
Код

QTranslator translate;
translate.load("rus.qm");
qApp->installTranslator(&translate);

label1->setText(tr("nazvanie 1"));
label2->setText(tr("nazvanie 2"));
…


А можно ли каким-то образом автоматически применить загруженный «переводчик» (translate) ко всем строкам, а не вызывать еще раз соответствующие setText-ы?

Все работает верно, вопросы в дальнейшем развитии программы:
1.    если в каком-то модуле появляется новая строка, требующая перевода, как мне ее добавить в уже существующий ts-файл — ТОЛЬКО РУКАМИ дописать в него секцию вида
    <message>
        <source>text</source>
        <translation>перевод</translation>
    </message>
2.    если к программе добавляется новый модуль допустим с парой десятков новых строк — тут как быть? Не создавать же заново ts-файл для всего проекта, так как тогда придется ВСЕ строки ЗАНОВО переводить... 

Это сообщение отредактировал(а) gordmiand - 17.3.2013, 21:23
PM MAIL   Вверх
math64
Дата 18.3.2013, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Запускаешь lupdate заново - новые строки появляются автоматически, старые больше не нужные помечаются как устаревшие.
Если новые с тем же текстом, что и старые - подбирается перевод, иначе перевода нет.
Далее запускаешь Лингвиста.

Если формы создаются дизайнером - у них будет создан метод для переименования метод и т.д. Для форм создаваемых вручную, такой метод нужно создавать самому.
PM   Вверх
Jeka178RUS
Дата 18.3.2013, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 3.9.2012

Репутация: нет
Всего: нет



Цитата(gordmiand @ 17.3.2013,  21:23)
А можно ли каким-то образом автоматически применить загруженный «переводчик» (translate) ко всем строкам, а не вызывать еще раз соответствующие setText-ы?

Не совсем понял что значит еще раз?

Если лабел из формы он должен будет сам перевестись, если лабел создан руками то просто убедись что параметр был пропущен через tr
Код

QLabel lbl = new QLabel(tr("Some text"));


Повторно вызывать setText никогда не требовалось
PM MAIL   Вверх
Amp
Дата 18.3.2013, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 7
Всего: 17



Цитата(Jeka178RUS @  18.3.2013,  11:02 Найти цитируемый пост)
Не совсем понял что значит еще раз?

ТС хочет, чтобы перевод применился ко всем виджетам без перезапуска приложения и с минимумом телодвижений с его стороны.

Это сообщение отредактировал(а) Amp - 18.3.2013, 11:10
PM MAIL   Вверх
bsa
Дата 18.3.2013, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Amp, ты ошибаешься.
PM   Вверх
gordmiand
Дата 18.3.2013, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



вопрос в том можно ли после вызова installTranslator не вызывать еще раз setText-ы для строк, которые нужно перевести...почему перевод после выполнения installTranslator автоматически не применяется к строкам?
кстати похоже вместо tr надо использовать translate - тогда в ts-файле (и в лингвисте) эти строки будут корректно отображены (если исходная строка русскоязычная), иначе - абракадабра...или руками в ts- файл дописывать utf-8="true" для каждой <message>-секции, что не есть хорошо... или как-то можно, используя tr, корректно отобразить строки в ts-файле?  

Это сообщение отредактировал(а) gordmiand - 18.3.2013, 20:02
PM MAIL   Вверх
math64
Дата 19.3.2013, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Нужно использовать trUtf8() если для исходников используется кодировка utf8.
Виджеты сами по себе, ничего про то что нужно переводить не знают. setText() ничего не переоводит - он устанавливает текст, переведённый translate()/tr()/trUtf8().
Cтрока может быть задана отдельно от вызова tr():
Код

char * str[] = { QT_TR_NOOP("string1"), QT_TR_NOOP("string2") };
label->setText(tr(str[i]));

Например, если у тебя в одной метке текст на английском, а на соседней перевод на русский, при вызове installTranslator ничего переводить не нужно.
Если используется дизайнер, создаются setupUi() и retranslateUi(). Но нужно позаботиться, чтобы после installTranslator() было вызвано retranslateUi() - этого в автомате не произойдёт.
Если форма создаётся вручную, retranslateUi() нужно создавать самостоятельно или после вызова installTranslator() закрыть форму и открыть заново.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0436 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.