Packages
BeamLabCountries is a collection of all sorts of useful information for every country in the [ISO 3166](https://wikipedia.org/wiki/ISO_3166) standard. It includes country data, subdivisions (states/provinces), international organizations, language information, and country name translations.
Current section
Files
Jump to
Current section
Files
lib/languages.ex
defmodule BeamLabCountries.Languages do
@moduledoc """
Module for looking up language names from ISO 639-1 codes.
## Examples
iex> BeamLabCountries.Languages.get_name("en")
"English"
iex> BeamLabCountries.Languages.get_name("pl")
"Polish"
iex> BeamLabCountries.Languages.get_name("invalid")
nil
"""
@languages_path Path.join([:code.priv_dir(:beamlab_countries), "data", "languages.json"])
@external_resource @languages_path
@languages @languages_path
|> File.read!()
|> JSON.decode!()
|> Map.new(fn {code, data} -> {code, data} end)
@doc """
Returns the English name for a language code.
## Examples
iex> BeamLabCountries.Languages.get_name("en")
"English"
iex> BeamLabCountries.Languages.get_name("de")
"German"
iex> BeamLabCountries.Languages.get_name("ja")
"Japanese"
"""
def get_name(code) when is_binary(code) do
case Map.get(@languages, String.downcase(code)) do
nil -> nil
data -> data["name"]
end
end
@doc """
Returns the native name for a language code.
## Examples
iex> BeamLabCountries.Languages.get_native_name("en")
"English"
iex> BeamLabCountries.Languages.get_native_name("de")
"Deutsch"
iex> BeamLabCountries.Languages.get_native_name("ja")
"日本語"
"""
def get_native_name(code) when is_binary(code) do
case Map.get(@languages, String.downcase(code)) do
nil -> nil
data -> data["nativeName"]
end
end
@doc """
Returns full language info for a language code.
## Examples
iex> BeamLabCountries.Languages.get("en")
%{name: "English", native_name: "English", family: "Indo-European", code: "en"}
"""
def get(code) when is_binary(code) do
case Map.get(@languages, String.downcase(code)) do
nil ->
nil
data ->
%{
code: data["639-1"],
name: data["name"],
native_name: data["nativeName"],
family: data["family"]
}
end
end
@doc """
Returns all language codes.
## Examples
iex> "en" in BeamLabCountries.Languages.all_codes()
true
"""
def all_codes do
Map.keys(@languages)
end
@doc """
Returns the count of supported languages.
## Examples
iex> BeamLabCountries.Languages.count()
184
"""
def count do
map_size(@languages)
end
@doc """
Checks if a language code is valid.
## Examples
iex> BeamLabCountries.Languages.valid?("en")
true
iex> BeamLabCountries.Languages.valid?("invalid")
false
"""
def valid?(code) when is_binary(code) do
Map.has_key?(@languages, String.downcase(code))
end
end