Gettext basic usage

Hi all,

I am trying to use Gettext to enable English US, French Canada and Spanish Spain in my Phoenix web app. I had never used Gettext before but based on the documentation and a couple of blogs I believe this is what I had to do:

1 Add this line to my config.exs:
config :myApp, MyAppWeb.Gettext, locales: ~w(en_US fr_CA es_ES).

2 Then I had to run:

mix gettext.extract

3 I was expecting to see:

priv/gettext
└─ en_US
| └─ LC_MESSAGES
| └─ errors.po
└─ default.pot
└─ errors.pot
└─ fr_CA
| └─ LC_MESSAGES
| └─ errors.po
└─ default.pot
└─ errors.pot
└─ es_ES
| └─ LC_MESSAGES
| └─ errors.po
└─ default.pot
└─ errors.pot

However all I get is:

└─ en
| └─ LC_MESSAGES
| └─ errors.po
└─ default.pot
└─ errors.pot

I found this post where they suggest to run this:

mix gettext.extract mix gettext.merge priv/gettext mix gettext.merge priv/gettext --locale LOCALE_CODE

So I did (is this correct?):

mix gettext.extract mix gettext.merge priv/gettext mix gettext.merge priv/gettext --locale en_US
mix gettext.extract mix gettext.merge priv/gettext mix gettext.merge priv/gettext --locale fr_CA
mix gettext.extract mix gettext.merge priv/gettext mix gettext.merge priv/gettext --locale es_ES

But while it does not fail, I do not see any new file/folder being created under the priv folder. Am I supposed to add them up manually? I do not mind doing it but I want to make sure I do not break any integrity while doing it.

The main question would be: what I am doing, is that the correct way to start using Gettext? If not, can you please put me in the right track?

As always, thanks very much for any feedback!

1 Like

Check the workflow as described on Gettext github readme.

You would need to run the command with the specific locale flag once. Afterwards, just running mix gettext.extract --merge will extract and merge all the locale.

2 Likes

Thank you @sfusato for the reply. It is very much appreciated. So, at the end I had to make a couple of changes:

1 In config.exs:

config :myApp, MyAppWeb.Gettext, locales: ~w(en fr es)

Not sure why but it seems that ll_CC format may cause issues. For what I understood in gettext doc that was the suggested format. But I could not make it work, so I just made my life simpler using only the language code without the country.

2 Then the command that did it for me was:

mix gettext.merge priv/gettext --locale fr
mix gettext.merge priv/gettext --locale es

3 After that a simple (as mentioned by @sfusato mix gettext.extract --merge updates any change in the pages.

I am leaving it here in case it helps to anyone else in the future.

Thanks

1 Like

From where did you got the config setting?

config :myApp, MyAppWeb.Gettext, locales: ~w(en fr es)

I’m asking because I’m not seeing it in the documentation. Perhaps that’s what created your issues?

For a Phoenix project, you don’t need to add any configuration as it comes pre-configured in myapp_web/gettext.ex

From here