Packages
gettext
0.6.1
1.0.2
1.0.1
retired
1.0.0
0.26.2
0.26.1
0.26.0
retired
0.25.0
0.24.0
0.23.1
0.23.0
0.22.3
0.22.2
0.22.1
0.22.0
0.21.0
0.20.0
0.19.1
0.19.0
0.18.2
0.18.1
0.18.0
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.1
0.16.0
0.15.0
0.14.1
0.14.0
0.13.1
0.13.0
0.12.2
0.12.1
0.12.0
0.11.0
0.10.0
0.9.0
0.8.0
0.7.0
0.6.1
0.6.0
0.5.0
Internationalization and localization through gettext
Current section
Files
Jump to
Current section
Files
lib/gettext/extractor_agent.ex
defmodule Gettext.ExtractorAgent do
@moduledoc false
@name __MODULE__
# :translations is a map where keys are Gettext backends and values
# are maps. In these maps, keys are domains and values are maps of
# translation_id => translation.
# :backends is just a list of backends that call `use Gettext`.
@initial_state %{
translations: %{},
backends: [],
}
def start_link do
Agent.start_link(fn -> @initial_state end, name: @name)
end
def alive? do
!!Process.whereis(@name)
end
def add_translation(backend, domain, translation) do
key = Gettext.PO.Translations.key(translation)
Agent.cast @name, fn(state) ->
# Initialize the given backend to an empty map if it wasn't there.
state = update_in state.translations, &Map.put_new(&1, backend, %{})
update_in state, [:translations, backend, domain], fn(translations) ->
Map.update(translations || %{}, key, translation, &merge_translations(&1, translation))
end
end
end
def add_backend(backend) do
Agent.cast @name, fn(state) ->
update_in state.backends, &[backend|&1]
end
end
def stop do
Agent.stop @name
end
def get_translations do
Agent.get @name, &(&1.translations)
end
def get_backends do
Agent.get @name, &(&1.backends)
end
defp merge_translations(t1, t2) do
update_in t1.references, &(&1 ++ t2.references)
end
end