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