Объедините файлы перевода (.ts) с существующими файлами .ts, используя QT Utilities (lconvert) - PullRequest
19 голосов
/ 15 декабря 2011

Вот моя проблема: у нас есть файлы .ts для девяти разных языков для нашего продукта.Мы добавили около 100 новых строк, которые необходимо перевести, но некоторые предназначены для нашего следующего выпуска, а некоторые - для выпуска после этого.У нас возникли проблемы с тем, что переводчики пропускают строки или переводят строки заранее.Мы хотим иметь возможность отправлять им меньший файл .ts, содержащий только те строки, которые мы хотим перевести сейчас, а затем объединить этот файл .ts с большим файлом .ts, содержащим остаток перевода.

Наши переводчикинеобходимо использовать QT Linguist (ранее мы позволяли им редактировать необработанный XML с менее чем звездными результатами).

Одним из решений было бы использование контекстов, но наша команда разработчиков не очень заинтересована в этой идее.Другой способ - объединить файлы .ts вручную, но это похоже на рецепт ошибок вырезания и вставки.

Существует ли метод с lupdate и файлом проекта для добавления или объединения вторичных файлов .ts?Я прочитал форумы в QT-land без ответа, но переключатели в lupdate намекают на возможность указывать на другие файлы перевода.В частности, параметр -pro, который говорит:

    -pro <filename>
       Name of a .pro file. Useful for files with .pro file syntax but
       different file suffix. Projects are recursed into and merged.

Пример 1: у нас есть немецкий файл .ts, мы хотим добавить 20 строк из отдельного немецкого файла перевода так, чтобы основной файл перевода содержал все строки, включая20 новых.

Пример 2: у нас есть немецкий файл .ts, мы хотим добавить 20 строк из отдельного немецкого файла перевода так, чтобы вторичный файл перевода был объединен с первичным во время lupdate, чтобыРезультирующий файл .qm содержит все строки, включая 20 новых.

Кто-нибудь делал одно из этих (и любой из них будет работать), и можете ли вы дать мне некоторое представление?

Ответы [ 3 ]

36 голосов
/ 16 декабря 2011

Ответ не использует lupdate, он находится в другой утилите под названием lconvert.Довольно просто создать вторичный файл, который содержит только интересующие вас строки (и удалить те же самые строки из первичного файла), а затем выполнить:

lconvert -i primary.ts secondary.ts -o complete.ts

Это будетвозьмите все строки из двух входных файлов и поместите их вместе в выходной файл.Используя этот метод, я смог создать файл с нулевой разницей (кроме отметки времени) исходного файла, из которого я разделил бы два основных и дополнительных файла.

Этот вопрос не получил многовнимание, но, возможно, у кого-то возникнет такая же проблема, и это поможет.

2 голосов
/ 09 ноября 2012

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

Проблема заключалась в отправке новых / обновленных строк только переводчикам.

Я передал более старые строки в разрешенном состоянии, добавив новую строку, используя Lupdate, проверил, используя OxygenXML Editor с XPath "/ TS / context / message [not (translation / @ type)]]", чтобы удалить более старые строки, и очистил это от бесполезных заготовок и возвратов каретки.

Я попытался выполнить слияние с помощью lconvert с вашим решением, чтобы объединить переведенные строки: старые и новые. Проходят правильно, lrelease и отображаются правильно.

0 голосов
/ 19 декабря 2014

Использование нескольких переводов

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

Этот механизм позволяет определенному переводу быть "выбранным" или иметь приоритет над другими;просто удалите переводчик из приложения, передав его в функцию QApplication :: removeTranslator (), и переустановите его с помощью QApplication :: installTranslator ().Затем это будет первый перевод для поиска соответствующих строк.

ссылка для подтверждения: Ссылка на класс QTranslator

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...