2015-11-26 5 views
1

Я пытаюсь использовать Qttr() функция для перевода.Как использовать перевод в Qt?

В .pro файл у меня есть:

TRANSLATIONS += languages/myapp_en.ts \ 
       languages/myapp_es.ts 

и main.cpp:

QTranslator translator; 
translator.load("myapp_es"); //espanol 
app.installTranslator(&translator); 

lupdate Я бегу и файлы myapp_en.ts, myapp_es.ts генерируются.

отредактировать файл myapp_es.ts, например:

<context> 
    <name>Example</name> 
    <message> 
     <location filename="../example.cpp" line="24"/> 
     <source>Good night</source> 
     <translation>Buenas noches</translation> <!-- THIS IS MY EDIT --> 
    </message> 
</context> 

Тогда я бегу lrelease так файлы myapp_en.qm, myapp_es.qm генерируются.

Затем я использую tr() в коде следующим образом:

button->setText(tr("Good night")); 

внутри конструктору Q_OBJECT класса.

Но текст по-прежнему отображается на английском языке («Спокойной ночи»), а не на испанском языке.

Что я делаю неправильно?

Edit:

Putting the *.qm files in the correct directory решить эту проблему. Просто нужно убедиться, что он находится в каталоге Release, а не в Debug.

+0

Вы проверили возвращаемое значение translator.load? – crazyjul

+0

ОК проверил его только сейчас. Это 'false' –

+0

https: //wiki.qt.io/How_to_create_a_multi_language_application –

ответ

1

Вам необходимо включить расширение .qm и правильный путь при вызове translator.load:

QTranslator translator; 
translator.load("languages/myapp_es.qm"); //espanol 
app.installTranslator(&translator); 
+0

Не работает. 'translator.load()' все еще возвращает false, а слова не переводятся. –

+0

Я думаю, вам также нужно добавить 'языки /' в ваш случай, обновил мой ответ –

+0

Все еще не работает после добавления 'languages ​​/'. Файлы существуют следующим образом: 'workspace> * .cpp, * .h> languages> * .ts, * .qm'. Я не могу понять, где находится исполняемый файл, но –

1

после установки переводчика вы должны вызвать ретранслировать УИ сгенерированного класса, если применяются или вызвать тр снова

0

С другой ответы Я вижу, что теперь вы получаете true для загрузки, поэтому он находит файл перевода. Что это может быть то, что вы устанавливаете перевод после того, как система уже инициализирован интерфейс, так что вы можете сделать одну из двух вещей:

  1. УСТАНАВЛИВАЕТ переводчик, прежде чем создать свой пользовательский интерфейс, для меня это бы:

    translator.load(someTranslation) 
    a.installTranslator(&translator) 
    MainWindow w; 
    
  2. Установите переводчик после создания пользовательского интерфейса, который, если вы предоставляете поддержку нескольких языков, скорее всего, где вы хотите. Qt предоставляет функцию retranslateUi(), которая при вызове будет обновлять пользовательский интерфейс. Здесь есть вопрос, который показывает это более подробно: How to translate language in Qt on the fly. Для обработки события изменения языка требуется немного больше кода, но он позволяет динамически обновлять язык.
+0

Это именно то, что я делаю (1). Я попробую «2», спасибо –

Смежные вопросы