gettext.extract not extracting strings

I’m likely missing something here. When I run:

mix gettext.extract

it just generates a file with a few default strings from core components like “Actions” and “Attempting to reconnect”.

I created a Backend as per the Github page like such:

ct@mt:~/path/to/file$ cat lib/myapp/gettext.exdefmodule MyApp.Gettext douse Gettext.Backend, otp_app: :my_append 

And just for testing:

defmodule MyAppWeb.EscortLive.Index do use MyAppWeb, :live_view use Gettext, backend: MyApp.Gettext @impl true def mount(_params, _session, socket) do gettext("A simple test") #... end 

But that string doesn’t get picked up. Also tried in other files with no result.

Try adding the flag —mergeso the lines will appear in the translation files.

The problem seems to be that it only reads files from lib/myapp_web/components, while my files reside under lib/myapp_web/live. Is there a way to change that? Or is that intentional?

Phoenix comes with a Gettext backend generated by default. This one is also included in every view you created.

If you don’t have this line you need to include Gettext everywhere yourself.

If you do have that line but with another backend than you manually add in the view modules, I think you have a conflict.

1 Like

Thanks, finally working! The backend I created did apparently created some conflict. Just one more question. It doesn’t seem to extract from heex files, only from ex files. I tried adding the use directive in the heex file, but that didn’t seem to work. What do I need to do?

In your Live View files you have something like use ExampleWeb, :live_view

This calls the live_view function in ExampleWeb which should include a call to html_helpers which should include use Gettext, backend: ExampleWeb.Gettext.

Notice that the Gettext usage is also part of controller

You say you added the use directive yourself in the Live Views. That should not be necessary as that is exactly what use ExampleWeb, :live_view does (if correct, see above)

1 Like

Are you sure those heex files are captured by some embed_templates call? Template files by themselves are not read by anything.

Ok, everything solved. I forgot to include the gettext call in <%= %>. Thanks everyone for their help!