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

Слияние файлов перевода (.ts) с существующими файлами .ts с использованием QT Utilities (lconvert)

Вот моя проблема: у нас есть файлы .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 новых.

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Я попробовал слияние с использованием lconvert с вашим решением, чтобы объединить переведенные строки: более старые и новые. Он корректно передается и отображается правильно.

Ответ 3

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

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

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

доказательная ссылка: Описание класса QTranslator