Я интернационализация приложения Python, с двумя целями:Каков наилучший способ интернационализации приложения Python с несколькими доменами i18n?
загрузкой приложения классов из нескольких пакетов, каждый со своим собственным доменом i18n. Поэтому модули в пакете A используют домен A, модули в пакете B используют домен B и т. Д.
Локаль может быть изменен во время работы приложения.
gettext
модуля Python делает интернационализацию приложение одноязычную однодоменности очень легко; вы просто устанавливаете локаль, а затем вызываете gettext.install()
, который находит нужное Translation
и устанавливает его метод ugettext
в глобальном пространстве имен как _
. Но, очевидно, глобальное значение работает только для одного домена, и поскольку оно загружает один Translation
, оно работает только для этой локали.
Я мог вместо этого загрузить Translation
в верхней части каждого модуля и связать его метод угеттекста как _
. Тогда каждый модуль будет использовать _
для своего собственного домена. Но это все еще ломается, когда изменяется локаль, потому что _
предназначен для неправильной локали.
Итак, я могу загрузить правильный ugettext
в верхней части каждой функции, но это кажется ужасно громоздким. Альтернативой было бы по-прежнему делать это для каждого модуля, но вместо привязки ugettext
я бы заменил свою собственную функцию, которая проверит текущий язык, получит его Translation
и пересылает ему строку. У кого-нибудь есть более чистое решение?