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

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

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

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

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

2 ответа

Решение

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

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

https://help.launchpad.net/Translations

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

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

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

Вот заголовок моей программы, куда я импортирую gettext через локаль (обратите внимание, что Quickly добавляет все это для меня! Локаль и 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, для автоматического определения языка системы?

Вам просто нужно инициализировать 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 файлы, по одному на каждый язык переведены.

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

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

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

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

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