diff --git a/.iex.exs b/.iex.exs index 61bd50e..8e0e195 100644 --- a/.iex.exs +++ b/.iex.exs @@ -1,6 +1,8 @@ alias Localizator.Parser alias Localizator.Parser.{Base, JSON} +alias Localizator.Locale +alias Localizator.Direction alias Localizator.Translator -alias Localizator.Translator.{Yandex, Direction} +alias Localizator.Translator.{Yandex} alias Localizator.Translitor alias Localizator.Translitor.{UK, BE, RU} diff --git a/lib/direction/direction.ex b/lib/direction/direction.ex new file mode 100644 index 0000000..bd5f225 --- /dev/null +++ b/lib/direction/direction.ex @@ -0,0 +1,32 @@ +defmodule Localizator.Direction do + alias Localizator.Commons + alias Localizator.Locale + + defstruct [:from, :to] + + @typedoc """ + Locale + """ + @type locale :: String.t() | Atom.t() + @type from :: locale + @type from_may_be_nil :: from | nil + @type to :: locale + @type direction :: {from, to} | to | %{from: from, to: to} | %{to: to} + @type direction_struct :: %{to: to, from: from_may_be_nil} + + @spec get(direction) :: direction_struct + def get(direction) do + direction_map = + case direction do + [from: from, to: to] -> %{to: Locale.normalize(to), from: Locale.normalize(from)} + [from, to] -> %{to: Locale.normalize(to), from: Locale.normalize(from)} + {from, to} -> %{to: Locale.normalize(to), from: Locale.normalize(from)} + %{from: from, to: to} -> %{to: Locale.normalize(to), from: Locale.normalize(from)} + %{to: to} -> %{to: Locale.normalize(to), from: nil} + [to: to] -> %{to: Locale.normalize(to), from: nil} + to -> %{to: Locale.normalize(to), from: nil} + end + + Commons.struct_from_map(direction_map, as: %__MODULE__{}) + end +end diff --git a/lib/locale/locale.ex b/lib/locale/locale.ex new file mode 100644 index 0000000..5d6aa59 --- /dev/null +++ b/lib/locale/locale.ex @@ -0,0 +1,14 @@ +defmodule Localizator.Locale do + @typedoc """ + Locale + """ + @type locale :: String.t() | Atom.t() + + @typedoc """ + Normalized Locale + """ + @type normalized_locale :: String.t() + + @spec normalize(locale) :: normalized_locale + def normalize(locale), do: "#{locale}" +end diff --git a/lib/translator/direction/direction.ex b/lib/translator/direction/direction.ex deleted file mode 100644 index efbaccd..0000000 --- a/lib/translator/direction/direction.ex +++ /dev/null @@ -1,31 +0,0 @@ -defmodule Localizator.Translator.Direction do - alias Localizator.Commons - - defstruct [:from, :to] - - @typedoc """ - Locale - """ - @type locale :: String.t() | Atom.t() - @type from :: locale - @type from_may_be_nil :: from | nil - @type to :: locale - @type direction :: {from, to} | to | %{from: from, to: to} | %{to: to} - @type direction_struct :: %{to: to, from: from_may_be_nil} - - @spec get(direction) :: direction_struct - def get(direction) do - direction_map = - case direction do - [from: from, to: to] -> %{to: "#{to}", from: "#{from}"} - [from, to] -> %{to: "#{to}", from: "#{from}"} - {from, to} -> %{to: "#{to}", from: "#{from}"} - %{from: from, to: to} -> %{to: "#{to}", from: "#{from}"} - %{to: to} -> %{to: "#{to}", from: nil} - [to: to] -> %{to: "#{to}", from: nil} - to -> %{to: "#{to}", from: nil} - end - - Commons.struct_from_map(direction_map, as: %__MODULE__{}) - end -end diff --git a/lib/translator/translator.ex b/lib/translator/translator.ex index fc73964..fa31f09 100644 --- a/lib/translator/translator.ex +++ b/lib/translator/translator.ex @@ -1,5 +1,5 @@ defmodule Localizator.Translator do - alias Localizator.Translator.Direction + alias Localizator.Direction @typedoc """ Locale diff --git a/lib/translitor/base.ex b/lib/translitor/base.ex index 29fdb5f..dbd0c04 100644 --- a/lib/translitor/base.ex +++ b/lib/translitor/base.ex @@ -23,6 +23,6 @@ defmodule Localizator.Translitor.Base do """ @type message :: String.t() - @callback convert(text) :: {:ok, translited} | {:error, message} + @callback convert(text) :: {:ok, translited} | {:incompletely, translited} | {:error, message} @callback locale() :: {:ok, locale} end