Current section
Files
Jump to
Current section
Files
lib/alternate.ex
defmodule Alternate do
@http_methods [
:get, :post, :put, :patch, :delete, :options, :connect, :trace, :head
]
@locales Application.get_env(:alternate, :locales, %{})
@locale_assign_key Application.get_env(:alternate, :locale_assign_key, :alternate_locale)
defp do_localize({verb, meta, [ path, plug, plug_opts, options ]}) do
Enum.map(@locales, fn({locale, config}) ->
path = quote do
translated_path = unquote(options)
|> Keyword.get(:translations, %{})
|> Map.get(unquote(locale), unquote(path))
case unquote(config.path_prefix) do
"" -> ""
prefix -> "/#{prefix}"
end <> translated_path
end
options = quote do
assigns_with_locale = Map.new([{ unquote(@locale_assign_key), unquote(locale) }])
assigns = Keyword.get(unquote(options), :assigns, %{})
|> Map.merge(assigns_with_locale)
Keyword.put(unquote(options), :assigns, assigns)
end
{ verb, meta, [ path, plug, [ action: plug_opts, locale: locale ], options ]}
end)
end
defmacro localize({verb, meta, [ path, plug, plug_opts ]}) when verb in @http_methods do
do_localize({verb, meta, [ path, plug, plug_opts, [] ]})
end
defmacro localize({verb, meta, [ path, plug, plug_opts, options ]}) when verb in @http_methods do
do_localize({verb, meta, [ path, plug, plug_opts, options ]})
end
end