Hi!
I’m happy to share my first Elixir library. But first some …
Background
As an Elixir company from a country with 4 official languages (
), trust me when I say: we are using Gettext a lot in our Phoenix projects.
I really love the features of Gettext, but it always bothered me that it adds a lot of noise in the code, especially when using domains/contexts, interpolations or pluralization (besides, I still can’t remember which Gettext macro to use when using domains and/or contexts
).
That’s why until now, we always added a ~t sigil to all our (phoenix) projects that simply delegates to gettext. We also had an m modifier that is using the current module name (eg. live view/component) as context.
Over the last few days, I extracted this (and more!) as a library called …
gettext_sigils
It provides a new sigil ~t (which felt oddly familiar) for using Gettext translations with less boilerplate and better readability:
# before
gettext("Hello, %{name}", name: user.name)
# after
~t"Hello, #{user.name}"
When using GettextSigils (eg. in your MyAppWeb.html_helpers/0 for Phoenix projects), you can also provide how modifiers are mapped do domains and/or contexts:
# replace this
use Gettext, backend: MyApp.Gettext
# with this
use GettextSigils,
backend: MyApp.Gettext
sigils: [
modifiers: [
m: [context: inspect(__MODULE__)],
e: [domain: "errors"]
]
]
# then use it instead of gettext
~t"This is a global message"
~t"This is scoped to the current module/view/component"m
~t"This is a scoped error message"em
If this sounds interesting, there are a few other features, all described in the README.
As this is a very new project, contributions, bug reports and feedback in general are very welcome. I’m currently working on adding pluralization (which is a bit tricky when all you have is a sigil) where I would love some feedback (PR).
Thanks! Danke! Merci! Grazie! Grazia! ![]()






















