Packages

I18n and L10n Project Fluent implimentation for Elixir.

Current section

Files

Jump to
libfluent lib fluent assembly.ex
Raw

lib/fluent/assembly.ex

defmodule Fluent.Assembly do
@moduledoc """
Module
"""
@type t :: atom()
@doc """
Doc for using macro
opts:
* otp_app: "libfluen"
* priv: "priv/fluent"
* default_locale: "en-US"
"""
defmacro __using__(opts) do
quote location: :keep do
@otp_app Keyword.fetch!(unquote(opts), :otp_app)
@priv Keyword.get(unquote(opts), :priv, "fluent")
@default_locale Keyword.get(unquote(opts), :default_locale, "en")
@silent_errors Keyword.get(unquote(opts), :silent_errors, false)
@spec __config__(atom()) :: any()
def __config__(:otp_app), do: @otp_app
def __config__(:sys), do: Application.get_env(@otp_app, __MODULE__, [])
def __config__(:priv), do: Keyword.get(__config__(:sys), :priv, nil) || @priv
def __config__(:default_locale), do: Keyword.get(__config__(:sys), :default_locale, nil) || @default_locale
def __config__(:silent_errors), do: Keyword.get(__config__(:sys), :silent_errors, nil) || @silent_errors
@spec __store__() :: Fluent.Store.t()
def __store__ do
Fluent.Store.get_store(__MODULE__)
end
def ftl(message, args \\ []) do
locale = Fluent.get_locale(__MODULE__)
case Fluent.Store.format_pattern(__store__(), locale, message, args) do
{:ok, message} -> message
_ -> case __config__(:silent_errors) do
true -> message
false -> raise(
Fluent.MessageNotFound,
msg: message,
locale: locale,
assembly: __MODULE__
)
end
end
end
end
end
end