Usage¶
Step 1: Create translations¶
There are two types of translations supported by default.
One option is .mo files generated by the gettext toolset.
The other option is a collections.abc.Mapping object like this:
translations = {
"greeting": {
"ja": "おはよう",
"en": "morning",
},
"app title": {
"ja": "初めてのKivyプログラム",
"en": "My First Kivy App",
},
}
Step 2: Create a TranslatorFactory¶
Create a “translator factory” from the translations you created in Step 1.
from kivy_garden.i18n.localizer import (
GettextBasedTranslatorFactory,
MappingBasedTranslatorFactory,
)
# gettext
factory = GettextBasedTranslatorFactory(domain, localedir)
# mapping
factory = MappingBasedTranslatorFactory(translations)
(domain and localedir are passed to gettext.translation()).
Step 3: Create a Localizer¶
Create a Localizer instance from the “translator factory” you created in Step 2.
from kivy_garden.i18n.localizer import Localizer
localizer = Localizer(factory)
Done¶
That’s it. You can now ask it “What’s the translation of this message?” or “Which font is suitable for your current language?”:
l = localizer
l.lang = "en" # set the "current language" to "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) # => <a pre-installed Japanese font>
print(l._("greeting")) # => おはよう
print(l._("app title")) # => 初めてのKivyプログラム
In addition, since the Localizer is a kivy.event.EventDispatcher,
and both Localizer.font_name and Localizer._ are Kivy properties,
you can leverage Kivy’s auto-binding feature:
# This makes the localizer accessible in the kv namespace without any
# import statements.
localizer.install(name="l")
# in .kv files
Label:
font_name: l.font_name
text: l._("greeting")
When localizer.lang changes, localizer._ and localizer.font_name will also change,
which causes the l.font_name and l._("greeting") above to be re-evaluated.
Great! You now have a label that dynamically updates its text and font_name whenever localizer.lang changes.