У меня есть пара приложений, написанных в PyQt4, где я использовал стандартную библиотеку gettext для Python для интернационализации и локализации графического интерфейса. Это работает хорошо для меня. Но я выбрал gettext только потому, что у меня уже были знания и опыт использования gettext и нулевой опыт с использованием подхода Qt4 tr().Плюсы и минусы использования gettext вместо QObject.tr() для локализации приложения PyQt4?
Теперь я хотел бы лучше сравнить оба подхода и понять, что мне не хватает, используя 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.
Я бы добавить, что 'Tr («Вы выбрали% п товар (ов)»,, item.count()) 'выглядит так, как будто это может работать, но оно очень плохо документировано в системе Qt и действительно не объясняет, как поместить вещи, если вы действительно хотите две (или более) разные строки, а не только суффикс:' tr (" % n item {is | s are} теперь в выборе. ",, item.count())' – SlySven