Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

## Unreleased

* Call `c:Gettext.Plural.init/1` once per PO file at compile time instead of twice.
* Reduce the compile time of backends that use the default interpolation module by storing translations without interpolation in a literal map instead of generating one function clause each.
* Add experimental `mix gettext.generate` task: messages are persisted as module attributes during normal compilation (for backends with `automatic_extraction: true` in the application environment, for example `config :gettext, MyApp.Gettext, automatic_extraction: true` in `config/dev.exs`) and read back from the compiled BEAM files, so extraction no longer needs to force-recompile the project.

Expand Down
16 changes: 7 additions & 9 deletions lib/gettext/compiler.ex
Original file line number Diff line number Diff line change
Expand Up @@ -498,8 +498,9 @@ defmodule Gettext.Compiler do

plural_forms_fun = :"#{locale}_#{domain}_plural"

plural_forms = compile_plural_forms(locale, messages_struct, plural_mod, plural_forms_fun)
nplurals = nplurals(locale, messages_struct, plural_mod)
plural_info = Plural.plural_info(locale, messages_struct, plural_mod)
plural_forms = compile_plural_forms(plural_info, plural_mod, plural_forms_fun)
nplurals = nplurals(plural_info, plural_mod)

singular_fun = :"#{locale}_#{domain}_lgettext"
plural_fun = :"#{locale}_#{domain}_lngettext"
Expand Down Expand Up @@ -608,17 +609,14 @@ defmodule Gettext.Compiler do
end
end

defp nplurals(locale, messages_struct, plural_mod) do
plural_mod.nplurals(Plural.plural_info(locale, messages_struct, plural_mod))
defp nplurals(plural_info, plural_mod) do
plural_mod.nplurals(plural_info)
end

defp compile_plural_forms(locale, messages_struct, plural_mod, plural_fun) do
defp compile_plural_forms(plural_info, plural_mod, plural_fun) do
quote do
defp unquote(plural_fun)(n) do
unquote(plural_mod).plural(
unquote(Macro.escape(Plural.plural_info(locale, messages_struct, plural_mod))),
n
)
unquote(plural_mod).plural(unquote(Macro.escape(plural_info)), n)
end
end
end
Expand Down
Loading