Подтвердить что ты не робот

Различные языки в разных частях приложения

У меня многоязычное приложение Qt, где у меня есть следующая проблема

  • Основная часть пользовательского интерфейса должна быть переведена в соответствии с языком языковой системы
  • Приложение также может печатать различные формы. Язык этих форм должен быть независимо выбран с языка пользовательского интерфейса (формы будут переданы людям, которые часто не говорят на местном языке).
  • Если возможно, было бы неплохо иметь ту же возможность, что и предыдущая точка, для диалога в приложении.

Каким образом я могу достичь этого? Все примеры, которые я нашел, касаются перевода всего приложения, но в моем случае мне нужны два независимых перевода (хотя возможно, на один и тот же язык).

Нужно ли мне реплицировать механизмы возврата QApplication::translate самостоятельно и напрямую использовать QTranslator::translate, или есть более удобный способ?

4b9b3361

Ответ 1

Предположим, вам нужен один перевод для всего приложения, а другой - для диалога. Вам нужно создать два файла qm: один, который содержит переводы всего, кроме этого диалогового окна, и один, который содержит переводы только для этого диалога. Теперь вы можете загружать/выгружать эти qm файлы отдельно.

Я думаю, вы знаете, как динамически менять перевод.

Обновление от комментария:

Чтобы создать отдельные qm файлы, вы можете поместить все основные источники в один каталог и все источники диалога в другой и вызвать lupdate -no-obsolete -recursive ../src/Form -ts Form_ru.ts, где ../src/Form - это каталог диалогов. Или даже звоните lupdate -no-obsolete ../src/Form.ui ../src/Form.cpp ../src/Form.h -ts Form_ru.ts в файлы.

Результат script будет примерно таким:

lupdate -no-obsolete -recursive ../test.pro -ts test_ru.ts
lupdate -no-obsolete ../Form.ui ../Form.cpp ../Form.h -ts Form_ru.ts

Ответ 2

Поскольку класс QTranslator имеет виртуальную функцию для перевода. Вы можете наследовать от QTranslator и перегружать функцию перевода, чтобы возвращать языковую строку для каждой желаемой локали, в зависимости от флага, установленного в унаследованном классе.

Затем вы устанавливаете флаг в локаль, который хотите использовать непосредственно перед созданием страницы для печати, а затем установите ее после этого.

Ответ 3

Я не уверен, что это вариант, но вы можете разделить ваше приложение на два:

  • одно приложение просто распечатает формы
  • другое приложение - это графический интерфейс с элементами управления

Таким образом, просто установить язык самостоятельно и перевести оба приложения.