Qt переводит строки из не исходных файлов - PullRequest
9 голосов
/ 04 февраля 2011

У меня есть проект Qt, который использует файлы XML.Эти XML-файлы содержат читабельный текст, и этот текст должен быть переведен с использованием инструментов Qt (lupdate, lrelease, QtLinguist).

Вопрос в том, возможно ли создавать записи в файле .ts с помощьюдублировать строки из файлов XML в файле исходного кода с помощью макроса QT_TR_NOOP () и друзей?Или вообще, как вы переводите строки в не исходных файлах для проектов Qt?

Ответы [ 2 ]

6 голосов
/ 04 февраля 2011

У нас была та же проблема: XML-файлы, содержащие удобочитаемые строки.

Наше решение состояло в том, чтобы обеспечить удобство извлечения удобочитаемых строк в файлах XML (мы поместили их в атрибут LABEL), и мы разработали небольшой инструмент, который будет анализировать файлы XML, извлекать строки, генерировать контекст (извлекая данные из файла XML), а затем генерируя файл заголовка CPP, содержащий список QT_TR_NOOP().

Этот файл был добавлен в наш файл проекта (.pro), который использовался lupdate.

Это решение было хорошо для нас, но мы должны были быть очень осторожны в двух вещах:

  • запускать этот инструмент каждый раз, когда изменяется содержимое файла XML.
  • убедитесь, что файлы XML имеют кодировку UTF-8.
3 голосов
/ 04 февраля 2011

Вы можете перевести все, что вы хотите во время выполнения, используя tr (), если у файла .qm есть соответствующий перевод / контекст. Не должно иметь никакого значения, извлекал ли lupdate его или нет.

Я не знаю, как сделать lupdate для извлечения строк из произвольного XML, но это не значит, что вы не можете использовать linguist.

  1. .ts файлы также являются XML; должно быть легко создать XSLT, который преобразует ваш XML в файл .ts. Если вы хотите нацелиться на что-то стандартное, а не только на Qt, lupdate (и лингвист) может также обрабатывать XLIFF файлы.
  2. вы можете иметь несколько файлов .ts (просто вызовите QTranslator :: load более одного раза при настройке)

Если вы действительно хотите поместить все это в один файл для переводчика, попросите XSLT скопировать сгенерированный lupdate файл в свой вывод.

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

...