У меня есть несколько приложений, написанных на PyQt4, где я использовал стандартную библиотеку Python gettext для интернационализации и локализации графического интерфейса. У меня это работает хорошо. Но я выбрал gettext только потому, что у меня уже были знания и опыт использования gettext, а также нулевой опыт работы с подходом Qt4 tr ().
Теперь я хотел бы лучше сравнить оба подхода и понять, чего мне не хватает, используя gettext вместо QObject.tr, и есть ли серьезная причина, по которой мне не следует использовать gettext для приложений Qt4 / PyQt4?
Насколько я понимаю, преимущества использования gettext:
- GNU gettext является зрелым и де-факто стандартным в мире GNU / Linux.
- Существует достаточно специальных редакторов для файлов PO, чтобы упростить работу переводчиков, хотя текстовая природа шаблонов PO делает это не совсем необходимым.
- Доступны даже веб-сервисы, которые можно использовать для совместных переводов.
- gettext - это стандартная библиотека Python, поэтому мне не нужно устанавливать ничего особенного, чтобы использовать ее во время выполнения.
- Он имеет очень хорошую поддержку выбора форм единственного / множественного числа через ngettext ().
В чем я вижу преимущества QObject.tr ():
- Это родная технология для Qt4 / PyQt4, поэтому, возможно, она будет работать лучше / быстрее (хотя у меня нет данных для подтверждения).
- Сообщения для перевода могут содержать дополнительную контекстную информацию, которая поможет переводчикам выбрать лучшие варианты омонимических слов, например Английское слово «Письмо» может переводиться как «Персонаж», «Почта» или даже как «Размер бумаги» в зависимости от фактического контекста.
Что я считаю недостатками QObject.tr () vs gettext:
- Я не нашел в документации Qt, как там поддерживается выбор единственного / множественного числа.
- Шаблон перевода Qt4 TS находится в формате XML, поэтому его сложнее редактировать без специального редактора (QT Linguist), и кажется, что нет других сторонних решений или веб-сервисов. Поэтому переводчикам потребуется изучить новый инструмент (если они уже знакомы с инструментами PO).
Но все вышеперечисленное недостаточно критично, чтобы однозначно сказать, что какой-либо инструмент лучше другого. И я не хочу начинать войну о том, что лучше, потому что это очень субъективно. Я просто хочу знать, что мне не хватает в качестве плюсов и минусов QObject.tr () vs gettext.