У меня есть пара приложений, написанных на PyQt4, где я использовал стандартную библиотеку Python gettext для интернационализации и локализации GUI. Это хорошо работает для меня. Но я выбрал 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 () по сравнению с gettext:
- Я не нашел в документации Qt, как там поддерживается выделение в единственном / множественном числе.
- Шаблон перевода Qt4 TS находится в формате XML, и поэтому его сложнее редактировать без специального редактора (QT Linguist), и, похоже, других сторонних решений или веб-сервисов не существует. Поэтому переводчикам необходимо изучить новый инструмент (если они уже знакомы с инструментами ПО).
Но все вышеперечисленные пункты недостаточно критичны, чтобы ясно сказать, что любой инструмент лучше другого. И я не хочу начинать огненную войну из-за того, что лучше, потому что это очень субъективно. Я просто хочу знать, что мне не хватает, как плюсы и минусы QObject.tr () против gettext.