Usage 🇯🇵

1: 翻訳データを用意する

初期状態では二種類の形式の翻訳データが使えます。 一つは gettext で作った .mo ファイルで、もう一つは以下のような collections.abc.Mapping です。

翻訳表 = {
    "greeting": {
        "ja": "おはよう",
        "en": "morning",
    },
    "app title": {
        "ja": "初めてのKivyプログラム",
        "en": "My First Kivy App",
    },
}

2: TranslatorFactory を作る

翻訳データから TranslatorFactory を作ります。

from kivy_garden.i18n.localizer import (
    GettextBasedTranslatorFactory,
    MappingBasedTranslatorFactory,
)

# gettextの場合
factory = GettextBasedTranslatorFactory(domain, localedir)

# mappingの場合
factory = MappingBasedTranslatorFactory(翻訳表)

(domainlocaledirgettext.translation() に渡されます)。

3: Localizer を作る

TranslatorFactory から Localizer を作ります。

from kivy_garden.i18n.localizer import Localizer

localizer = Localizer(factory)

完了

これで準備完了です。 後はこの localizer に対して「このメッセージの訳は何ですか?」や「現在の言語に適したフォントは何ですか?」と尋ねるだけです。

l = localizer
l.lang = "en"  # "現在の言語" を "en" に設定
print(l.font_name)  # => Roboto
print(l._("greeting"))  # => morning
print(l._("app title"))  # => My First Kivy App

l.lang = "ja"
print(l.font_name)  # => <インストール済みの日本語フォントの名前>
print(l._("greeting"))  # => おはよう
print(l._("app title"))  # => 初めてのKivyプログラム

また Localizerkivy.event.EventDispatcher の派生クラスであり Localizer.font_nameLocalizer._ はKivyのプロパティであるためKivyの自動バインディング機能も利用できます。

# Kv言語のコードからimport文無しで"l"という名前でlocalizerへ触れるようにする。
localizer.install(name="l")
# in .kv files
Label:
    font_name: l.font_name
    text: l._("greeting")

localizer.lang (現在の言語)が変わると localizer._localizer.font_name の値も自動で変わるため、 それが上記コード内の式 l.font_namel._("greeting") の再評価を引き起こします。 これで現在の言語が変わるたびに文字列とフォントが自動で切り替わるラベルができました。