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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [решено] Частичный перевод  (Прочитано 7006 раз)
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« : Апрель 29, 2010, 18:10 »

Решил попробовать linguist, всё перевёл, qm-файл получил и подключил его:
Код
C++ (Qt)
QTranslator translator;
translator.load("langs/lang_ru");
app.installTranslator(&translator);
 
Перевелось частично, в основном диалоговые окна.
Splashscreen, tabs и многое другое не перевелось.
ui_mainwindow.h не использую, гуй писался с нуля руками, все tr() в коде с ключами для перевода стоят на своих местах это 100% (перепроверил неск. раз). В чём может быть причина?
« Последнее редактирование: Апрель 29, 2010, 20:56 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #1 : Апрель 29, 2010, 18:48 »

Заметил, что перевелось только то, что создавалось динамически - т.е. после запуска приложения. Весь текст, который в инициализации у классов не переводится.
« Последнее редактирование: Апрель 29, 2010, 18:55 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #2 : Апрель 29, 2010, 19:12 »

Ответа не знаю, но скажу что недавно у меня такое приключилось: изначально программа была вся на русском (с tr() все), а потом решил на англ сделать, но изменил все в исходниках(т.к. русский не нужен), потом запускаю в Linux, открываю FileDialog, там возникает ошибка (не хватает Xine вроде) и в этот момент некоторые пункты меню (о чудо) и несколько кнопок сами переводятся на русский...до сих пор удивлен..
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Kolobok
Гость
« Ответ #3 : Апрель 29, 2010, 19:18 »

Главное окно создаешь до подключения транслятора?
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #4 : Апрель 29, 2010, 19:21 »

Главное окно создаешь до подключения транслятора?
нет, после:
Код
C++ (Qt)
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QApplication::setStyle("cleanlooks");
QApplication::setWindowIcon(QIcon(QPixmap(":/images/webcruiser.png")));
QTextCodec *tc = QTextCodec::codecForName("utf-8");
QTextCodec::setCodecForTr(tc);
QTextCodec::setCodecForCStrings(tc);
QTextCodec::setCodecForLocale(tc);
 
QTranslator translator;
translator.load("langs/lang_ru");
app.installTranslator(&translator);
 
MainForm mainForm;
 
return app.exec();
}
 
Если до, то не будет переводится даже то, что переводится на данный момент.
« Последнее редактирование: Апрель 29, 2010, 19:23 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #5 : Апрель 29, 2010, 19:42 »

каким образом реализовывать метод retranslateUi()?
Записан

kubuntu/Win7/x64/NetBeans
Kolobok
Гость
« Ответ #6 : Апрель 29, 2010, 19:47 »

каким образом реализовывать метод retranslateUi()?

Определить метод retranslateUi().
В реализацию запихать все tr().
В event() ловить QEvent::LanguageChange.
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #7 : Апрель 29, 2010, 19:53 »

каким образом реализовывать метод retranslateUi()?

Определить метод retranslateUi().
В реализацию запихать все tr().
В event() ловить QEvent::LanguageChange.
А можно по-подробнее пожалст?
В реализацию запихать все tr(). - как именно, может есть пример?
В event() ловить QEvent::LanguageChange - мне это не надо, язык только русский. Делаю для того, чтобы не было русского текста в коде.
Где потом вызывать retranslateUi(), перед или после создания гуя?
Записан

kubuntu/Win7/x64/NetBeans
Kolobok
Гость
« Ответ #8 : Апрель 29, 2010, 20:20 »

Хороший стиль - писать программу готовой к смене языков, даже если предполагается использовать только один.

Цитировать
В реализацию запихать все tr(). - как именно, может есть пример?
Код:
void MyWiget::retranslateUi()
{
  label1->setText( tr( "My label" ) );
  ...
}

Цитировать
Где потом вызывать retranslateUi(), перед или после создания гуя?

В event() при получении QEvent::LanguageChange.

Цитировать
мне это не надо, язык только русский. Делаю для того, чтобы не было русского текста в коде.

Тогда тебе ничего этого не надо. Убери русский язык из кода, переведи лингвистом и всё. QTextCodec тоже убери.
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #9 : Апрель 29, 2010, 20:24 »

Тогда тебе ничего этого не надо. Убери русский язык из кода, переведи лингвистом и всё. QTextCodec тоже убери.
Так перевёл же, не цепляется перевод никак! Частично только переводит - весь тот текст, который не был назначен при инициализации.
Записан

kubuntu/Win7/x64/NetBeans
Kolobok
Гость
« Ответ #10 : Апрель 29, 2010, 20:39 »

Код:

int main(int argc, char *argv[])
{
 QApplication app(argc, argv);
 
 QTranslator translator;
 translator.load("langs/lang_ru");
 app.installTranslator(&translator);

 QLabel *label = new QLabel( tr( "My label" ) );
 label->show();
 
 MainForm mainForm;
 
 return app.exec();
}

Обнови перевод. Перекомпилируй полностью. Что в QLabel?

translator.load("langs/lang_ru") что возвращает?
« Последнее редактирование: Апрель 29, 2010, 20:45 от Kolobok » Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #11 : Апрель 29, 2010, 20:56 »

Разобрался (не без помощи sendevent).
main():
Код
C++ (Qt)
int main(int argc, char *argv[])
{
...
QTranslator qtTranslator;
qtTranslator.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
app.installTranslator(&qtTranslator);
 
QTranslator translator;
translator.load("langs/lang_ru");
app.installTranslator(&translator);
 
MainForm mainForm;
 
return app.exec();
}
 

Мой gui-класс:
Код
C++ (Qt)
void Gui::changeEvent(QEvent* event)
{
if (event->type() == QEvent::LanguageChange)
 this->retranslateUi();
QWidget::changeEvent(event);
}
 
void Gui::retranslateUi()
{
this->startButton.setText(QApplication::translate("Gui", "START"));  //и так все виджеты
}
 
 
Записан

kubuntu/Win7/x64/NetBeans
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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