localizator/lib/translitor/translitor.ex
2020-06-07 17:00:56 +03:00

48 lines
921 B
Elixir

defmodule Localizator.Translitor do
@typedoc """
Locale
"""
@type locale :: String.t()
@type to :: locale
@typedoc """
Translitor service
"""
@type translitor :: Atom.t()
@typedoc """
Transliters list
"""
@type translitors :: [translitor]
@typedoc """
Translition resource
"""
@type resource :: String.t() | Map.t() | List.t()
@type source :: resource
@type result :: resource
@typedoc """
Error Message
"""
@type message :: String.t()
@spec list() :: translitors
def list(), do: Application.get_env(:localizator, :translitors)
defp translitors() do
list()
|> Enum.map(fn translitor -> {translitor.locale(), translitor} end)
|> Map.new()
end
@spec convert(source, locale) :: {:ok, result} | {:error, message}
def convert(source, locale) do
translitor =
translitors()
|> Map.get(locale)
translitor.convert(source)
end
end