Chime ships English and a template of its words. Your app translates them as it translates its own, with its own Gettext: Chime ships no languages to keep up to date.
Setup
Give Chime your backend:
{Chime, ..., gettext: MyAppWeb.Gettext}Copy Chime's template beside yours, and make each language's file from it:
cp deps/chime/priv/gettext/chime.pot priv/gettext/
mix gettext.merge priv/gettext
priv/gettext/<locale>/LC_MESSAGES/chime.po is then there for each of
your languages, to translate with the tools you use for the rest. A word
not translated stays English.
After an upgrade of Chime, copy the template again and merge: the new words come, your translations stay.
What is translated
- The bell, the feed and the preferences (
Chime.Components). - "Ana and Rui", "Ana and 4 others" (
Chime.actors/1). - The digest's email, and the page to unsubscribe.
- The labels and descriptions of your
:categories: add them to yourchime.pofiles asmsgids of their own, and they are looked up there.
The log (Chime.explain/1) is for you, and stays English.
Whose language
- The feed, the bell, the preferences and the JSON API speak the
locale of the request or the LiveView, as your app's plugs and
on_mounthooks set it. - What a job sends (each email and channel of a delivery, the
digests) speaks the person's own: the
:localeof theirChime.Recipient. Chime runs it inGettext.with_locale/3, so your notifier's owngettextcalls inemail/3speak it too:
use Gettext, backend: MyAppWeb.Gettext
def email(data, _recipient, notification) do
Swoosh.Email.new(subject: gettext("%{who} commented on %{story}", who: Chime.actors(notification), story: data["story"]))
end- The page to unsubscribe speaks the person's, from the link.