Что должно делать приложение, разработанное в системе Linux, такой как Ubuntu, чтобы автоматически определять язык системы? Существуют приложения, такие как Liferea, которые автоматически меняют свой язык в соответствии с языком системы, не изменяя никаких предпочтений самой программы: Должно ли это быть поведением по умолчанию для всех программ?
Должна ли в программе быть опция, позволяющая пользователю, тем не менее, выбирать язык?
Все эти переводы идут вместе с самой программой? Что если пользователь установил системный язык, недоступный в переводах программы?
Является ли это Ubuntu или большинством Linux-дистрибутивов?
Я знаю, что разработка приложений с Быстро и Панель запуска поддерживает Переводы, чтобы сделать это. Я не эксперт, так проверьте эти ссылки в дополнение к моему ответу:
http://www.gnu.org/software/gettext/
https://help.launchpad.net/Translations
Мое приложение импортирует gettext модуль, который затем позволяет мне отмечать строки, которые будут отображены пользователю в программе. Когда моя программа отправлена Панели запуска через Быстро, Панель запуска установлена до автоматически сканирования через исходный код, и генерируйте специальные шаблонные файлы перевода для отмеченных строк. Добрые пользователи Панели запуска (или разработчик), может затем использовать шаблон для генерации переводов для каждой строки и языка, который они хотели бы. Эти файлы перевода могут затем быть sync'd к Вашему исходному ответвлению и объединенный перед выпуском. На времени выполнения gettext модуль затем заменяет отмеченные строки соответствующим переводом на основе Вашей системной локали.
Подводя итоги, вот список процесса:
Вот заголовок моей программы, куда я импортирую gettext через локаль (обратите внимание, что Быстро добавляет все это для меня! локаль и bindtextdomain добавляются, потому что он помещается в /opt/extras.ubuntu.com, я думаю):
import locale
from locale import gettext as _
locale.bindtextdomain('drawers', '/opt/extras.ubuntu.com/drawers/share/locale')
locale.textdomain('drawers')
Теперь я просто отмечаю текст, который будет переведен с _("text to be translated")
всюду по моей программе.
В будущем, даже если они связаны между собой, я бы предложил открыть отдельные вопросы для каждого. В любом случае я постараюсь ответить на них:
Что должно делать приложение, разработанное в системе Linux, такой как Ubuntu, чтобы автоматически определять язык системы?
blockquote >Вам просто нужно инициализировать
gettext
в вашем приложении. Gettext - это стандартная технология интернационализации и локализации Ubuntu и подавляющее большинство других дистрибутивов на основе Linux (если мы рассмотрим Android как дистрибутив, то это будет единственное исключение).В самом простом случае с использованием Python
import gettext from gettext import gettext as _ locale.bindtextdomain('yourapp', '/usr/share/locale') locale.textdomain('yourapp')
Примечания:
- В Python для поддержки установки
/opt
вам потребуется использовать библиотекуlocale
вместоgettext
(для большинства практических целей они эквивалентны)- Существуют привязки gettext практически для любого языка программирования, не только для Python.
Должно ли это быть поведение по умолчанию для всех программ?
blockquote>Да.
Должна ли в программе быть опция, позволяющая пользователю выбирать язык?
blockquote>Нет. Если вы хотите иметь такую возможность, вы сами по себе и должны будете реализовать ее самостоятельно. Соглашение состоит в том, что для каждого пользователя существует только один язык, и вы изменяете его только в одном месте, затрагивая все приложения в системе.
Все эти переводы идут вместе с самой программой?
blockquote>Да, они поставляются вместе с приложением в виде двоичных
.mo
файлов, по одному на каждый переведенный язык. [ 1119]Что, если пользователь установил системный язык, недоступный в переводах программы?
blockquote>Тогда по умолчанию для gettext используется английский как запасной вариант.
Это Ubuntu или большинство Linux-дистрибутивов?
blockquote>Это стандартное поведение для дистрибутивов Linux.