ExI18n

hex.pm versionBuild StatusCoverage StatusInline docs

ExI18n is key-based internationalization library for Elixir.

Table of Contents

Installation

Add exi18n to your list of dependencies and to applications in mix.exs:

# mix.exs
def deps do
[
{:exi18n, "~> 0.9.0"},
]
end
def application do
[applications: [
:exi18n,
]]
end

Configuration

Add configuration to your config/config.exs:

# config.exs
config :exi18n,
default_locale: "en",
locales: ~w(en),
fallback: false,
loader: :yml,
loader_options: %{path: "priv/locales"},
var_prefix: "%{",
var_suffix: "}"

Configuration parameters

OptionDescriptionDefault
default_localeDefault locale in your application."en"
localesSupported locales.["en"]
fallbackFallback to default locale if translation empty.false
loaderTranslation loader. Supported types: :yml, :http, MyApp.Loader.:yml
loader_optionsTranslation loader options.%{}
var_prefixPrefix for values in translations."%{"
var_suffixSuffix for values in translations."}"

Loaders

YAML

This loader will use yaml files from path to load translations.

Module

ExI18n.Loader.YAML

Dependencies

# mix.exs
def deps do
[
{:exi18n, "~> 0.9.0"},
{:yaml_elixir, "~> 2.0"},
]
end
def application do
[applications: [
:exi18n,
:yaml_elixir,
]]
end

Configuration

OptionRequiredDescription
pathYesPath to locale files.
# config.exs
config :exi18n,
loader: :yml,
loader_options: %{
path: "priv/locales" # or {MyHelper, :path, ["priv/locales"]}
}

Custom

Module

MyApp.Loader

Make sure that your custom loader has load/2 function that accepts locale and options as parameters and returns Map with translations.

Example:

defmodule MyApp.Loader do
def load(locale, _options) do
%{
"en" => %{...},
"de" => %{...}
}[locale]
end
end

Dependencies

# mix.exs
def deps do
[
{:exi18n, "~> 0.9.0"},
]
end
def application do
[applications: [
:exi18n,
]]
end

Configuration

# config.exs
config :exi18n,
loader: MyApp.Loader,
loader_options: %{my_config: "value"}

Documentation

https://hexdocs.pm/exi18n