Сделать приложение автоматически определять язык системы

  1. Что должно делать приложение, разработанное в системе Linux, такой как Ubuntu, чтобы автоматически определять язык системы? Существуют приложения, такие как Liferea, которые автоматически меняют свой язык в соответствии с языком системы, не изменяя никаких предпочтений самой программы: enter image description here Должно ли это быть поведением по умолчанию для всех программ?

  2. Должна ли в программе быть опция, позволяющая пользователю, тем не менее, выбирать язык?

  3. Все эти переводы идут вместе с самой программой? Что если пользователь установил системный язык, недоступный в переводах программы?

  4. Является ли это Ubuntu или большинством Linux-дистрибутивов?

2
задан 7 October 2012 в 13:01

2 ответа

Я знаю, что разработка приложений с Быстро и Панель запуска поддерживает Переводы, чтобы сделать это. Я не эксперт, так проверьте эти ссылки в дополнение к моему ответу:

http://www.gnu.org/software/gettext/

https://help.launchpad.net/Translations

Мое приложение импортирует gettext модуль, который затем позволяет мне отмечать строки, которые будут отображены пользователю в программе. Когда моя программа отправлена Панели запуска через Быстро, Панель запуска установлена до автоматически сканирования через исходный код, и генерируйте специальные шаблонные файлы перевода для отмеченных строк. Добрые пользователи Панели запуска (или разработчик), может затем использовать шаблон для генерации переводов для каждой строки и языка, который они хотели бы. Эти файлы перевода могут затем быть sync'd к Вашему исходному ответвлению и объединенный перед выпуском. На времени выполнения gettext модуль затем заменяет отмеченные строки соответствующим переводом на основе Вашей системной локали.

Подводя итоги, вот список процесса:

  • импортируйте gettext в свою программу
  • Строки Mark, которые должны быть переведены
  • Переводы установки в Панели запуска
  • Переведите шаблоны и синхронизацию к источнику

Вот заголовок моей программы, куда я импортирую 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") всюду по моей программе.

2
ответ дан 7 October 2012 в 13:01

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

Что должно делать приложение, разработанное в системе Linux, такой как Ubuntu, чтобы автоматически определять язык системы?

Вам просто нужно инициализировать 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.

Должно ли это быть поведение по умолчанию для всех программ?

Да.

Должна ли в программе быть опция, позволяющая пользователю выбирать язык?

Нет. Если вы хотите иметь такую ​​возможность, вы сами по себе и должны будете реализовать ее самостоятельно. Соглашение состоит в том, что для каждого пользователя существует только один язык, и вы изменяете его только в одном месте, затрагивая все приложения в системе.

Все эти переводы идут вместе с самой программой?

Да, они поставляются вместе с приложением в виде двоичных .mo файлов, по одному на каждый переведенный язык. [ 1119]

Что, если пользователь установил системный язык, недоступный в переводах программы?

Тогда по умолчанию для gettext используется английский как запасной вариант.

Это Ubuntu или большинство Linux-дистрибутивов?

Это стандартное поведение для дистрибутивов Linux.

0
ответ дан 7 October 2012 в 13:01

Другие вопросы по тегам:

Похожие вопросы: