tugayac

tugayac

Trouble Adding Gettext Support to Elixir Library

Hey folks :waving_hand:,

I’m one of the maintainers of the Lotus Web library and we had a request to add i18n support for the library. The requester was nice enough to help with a PR here, but I’m having issues getting it to work locally.

If anyone has experience adding Gettext support to libraries, I could use some help understanding the following (posting here because I don’t believe this is a Phoenix-related issue):

  1. Why would Gettext not pick up the correct translations, even though the locale seems to be set correctly in the LiveView process? (see PR comment for details)
  2. Are we adding Gettext support to Lotus Web in the right way, with the goal of allowing users of the library to provide their own translations?
  3. Is there a recommended way of adding Gettext to Elixir libraries? (I couldn’t find any suggestions in the Gettext docs).

Here’s a diff of what I’m trying (also included in the PR discussion) in another Elixir app that uses this branch:

diff --git a/config/config.exs b/config/config.exs
index 5062c76e..32e717e0 100644
--- a/config/config.exs
+++ b/config/config.exs
+config :lotus_web, Lotus.Web.Gettext,
+  priv: "priv/lotus_gettext",
+  locales: ~w(en tr),
+  default_locale: "tr"
+
 import_config "#{config_env()}.exs"
diff --git a/lib/accomplish_web/router.ex b/lib/accomplish_web/router.ex
index 951b8e80..defb9e4c 100644
--- a/lib/accomplish_web/router.ex
+++ b/lib/accomplish_web/router.ex
@@ -48,7 +48,7 @@ defmodule AccomplishWeb.Router do
   scope "/admin", AccomplishWeb.Admin do
     pipe_through :admin
 
-    lotus_dashboard("/lotus")
+    lotus_dashboard("/lotus", on_mount: [{AccomplishWeb.LocaleHook, :default}])
   end
diff --git a/mix.exs b/mix.exs
index ffd13aab..e1e36812 100644
--- a/mix.exs
+++ b/mix.exs
@@ -87,7 +87,7 @@ defmodule Accomplish.MixProject do
-      {:lotus_web, "~> 0.6.2"},
+      {:lotus_web, path: "../lotus_web_branch"},

Here’s the Gettext directory structure in my app:


For reference, default_domain in the PR (for the Lotus Web library) is set to lotus, hence lotus.po.

Marked As Solved

derek-zhou

derek-zhou

Each of the libraries from the dependency is a OTP application with it’s own priv dir, and priv/gettext dir. So, I am not sure if you can achieve e your goal of “allowing users of the library to provide their own translations”. Translations are supposed to be faithful; so can you just accept the translation upstream?

Last Post!

tugayac

tugayac

@LostKobrakai I was referring to using the Gettext functions instead of macros when I said “dynamic translation features of Gettext” (i.e. this section of the Gettext docs), in which case the compile order shouldn’t matter (because translations should be fetched at runtime, but maybe I misunderstand how Gettext works?).

With Gettext macros, yes what you said makes sense :+1:

Given the context I’d probably agree with the suggestion to keep the translations as part of the package though. I can see users wanting to have the UI localized, but less so the ask for customizing the localizations beyond what would be useful to all users.

Yep, we decided to go that direction :slightly_smiling_face:

Where Next?

Popular in Questions Top

nobody
Hi! In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
sergio_101
I am VERY much an elixir newbie. I have taken one elixir course and one phoenix course on Udemy. During that course, I saw the instructor...
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
siddhant3030
Hi, I have to write a raw query for one of my project. But till now I have used ecto queries and don’t have much experience writing raw ...
New

Other popular topics Top

KronicDeth
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine) This is a plugin that adds support for Elixir to JetBrains IntelliJ...
289 36654 110
New
JakeBecker
TL;DR: I’ve just released an implementation of Microsoft’s IDE-independent Language Server Protocol for Elixir. It adds language support ...
1144 54921 245
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
jason.o
In the code below, if the create action is not set to accept “extra_key” as an input, it errors out with a message shown above. Is there ...
New

We're in Beta

About us Mission Statement