Packages

phoenix_kit

1.7.80
1.7.207 1.7.206 1.7.205 1.7.204 1.7.203 1.7.202 1.7.201 1.7.200 1.7.199 1.7.198 1.7.197 1.7.196 1.7.194 1.7.193 1.7.192 1.7.191 1.7.190 1.7.189 1.7.187 1.7.186 1.7.185 1.7.184 1.7.183 1.7.182 1.7.181 1.7.180 1.7.179 1.7.178 1.7.177 1.7.176 1.7.175 1.7.174 1.7.173 1.7.172 1.7.171 1.7.170 1.7.169 1.7.168 1.7.167 1.7.166 1.7.165 1.7.164 1.7.162 1.7.161 1.7.160 1.7.159 1.7.157 1.7.156 1.7.155 1.7.154 1.7.153 1.7.152 1.7.151 1.7.150 1.7.149 1.7.146 1.7.145 1.7.144 1.7.143 1.7.138 1.7.133 1.7.132 1.7.131 1.7.130 1.7.128 1.7.126 1.7.125 1.7.121 1.7.120 1.7.119 1.7.118 1.7.117 1.7.116 1.7.115 1.7.114 1.7.113 1.7.112 1.7.111 1.7.110 1.7.109 1.7.108 1.7.107 1.7.106 1.7.105 1.7.104 1.7.103 1.7.102 1.7.101 1.7.100 1.7.99 1.7.98 1.7.97 1.7.96 1.7.95 1.7.94 1.7.93 1.7.92 1.7.91 1.7.90 1.7.89 1.7.88 1.7.87 1.7.86 1.7.85 1.7.84 1.7.83 1.7.82 1.7.81 1.7.80 1.7.79 1.7.78 1.7.77 1.7.76 1.7.75 1.7.74 1.7.71 1.7.70 1.7.69 1.7.66 1.7.65 1.7.64 1.7.63 1.7.62 1.7.61 1.7.59 1.7.58 1.7.57 1.7.56 1.7.55 1.7.54 1.7.53 1.7.52 1.7.51 1.7.49 1.7.44 1.7.43 1.7.42 1.7.41 1.7.39 1.7.38 1.7.37 1.7.36 1.7.34 1.7.33 1.7.31 1.7.30 1.7.29 1.7.28 1.7.27 1.7.26 1.7.25 1.7.24 1.7.23 1.7.22 1.7.21 1.7.20 1.7.19 1.7.18 1.7.17 1.7.16 1.7.15 1.7.14 1.7.13 1.7.12 1.7.11 1.7.10 1.7.9 1.7.8 1.7.7 1.7.6 1.7.5 1.7.4 1.7.3 1.7.2 1.7.1 1.7.0 1.6.20 1.6.19 1.6.18 1.6.17 1.6.16 1.6.15 1.6.14 1.6.13 1.6.12 1.6.11 1.6.10 1.6.9 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.10 1.2.9 1.2.8 1.2.7 1.2.5 1.2.4 1.2.2 1.2.1 1.2.0 1.1.0 1.0.0

A foundation for building Elixir Phoenix apps โ€” SaaS, social networks, ERP systems, marketplaces, and more

Current section

Files

Jump to
phoenix_kit lib modules languages language.ex
Raw

lib/modules/languages/language.ex

defmodule PhoenixKit.Modules.Languages.Language do
@moduledoc """
Struct representing a language in PhoenixKit.
Provides a consistent data type for all language-related operations,
replacing the previous mix of string-keyed and atom-keyed maps.
## Fields
- `code` - Language code (e.g., "en-US", "es-ES")
- `name` - Full language name (e.g., "English (United States)")
- `native` - Native name (e.g., "English (US)")
- `flag` - Flag emoji (e.g., "๐Ÿ‡บ๐Ÿ‡ธ")
- `is_default` - Whether this is the default language
- `is_enabled` - Whether this language is active
- `position` - Sort position for ordering
- `countries` - List of country names where this language is spoken
## Usage
# All Languages module public functions return Language structs:
lang = Languages.get_default_language()
lang.code #=> "en-US"
lang.name #=> "English (United States)"
"""
@enforce_keys [:code, :name]
defstruct [
:code,
:name,
:native,
:flag,
:position,
is_default: false,
is_enabled: true,
countries: []
]
@type t :: %__MODULE__{
code: String.t(),
name: String.t(),
native: String.t() | nil,
flag: String.t() | nil,
position: integer() | nil,
is_default: boolean(),
is_enabled: boolean(),
countries: [String.t()]
}
@doc """
Converts a string-keyed JSONB map to a Language struct.
Used when reading language data from database JSON settings.
## Examples
iex> alias PhoenixKit.Modules.Languages.Language
iex> result = Language.from_json_map(%{"code" => "en-US", "name" => "English (United States)", "native" => "English (US)", "flag" => "๐Ÿ‡บ๐Ÿ‡ธ", "is_default" => true, "position" => 0})
iex> result.code == "en-US" and result.name == "English (United States)" and result.is_default == true
true
"""
@spec from_json_map(map()) :: t()
def from_json_map(map) when is_map(map) do
%__MODULE__{
code: map["code"],
name: map["name"],
native: map["native"],
flag: map["flag"],
is_default: Map.get(map, "is_default", false),
is_enabled: Map.get(map, "is_enabled", true),
position: map["position"],
countries: Map.get(map, "countries", [])
}
end
@doc """
Converts an atom-keyed map (e.g., from BeamLabCountries) to a Language struct.
## Examples
iex> alias PhoenixKit.Modules.Languages.Language
iex> result = Language.from_available_map(%{code: "en-US", name: "English (United States)", native: "English (US)", flag: "๐Ÿ‡บ๐Ÿ‡ธ"})
iex> result.code == "en-US" and result.native == "English (US)"
true
"""
@spec from_available_map(map()) :: t()
def from_available_map(map) when is_map(map) do
%__MODULE__{
code: map[:code],
name: map[:name],
native: map[:native],
flag: map[:flag],
is_default: Map.get(map, :is_default, false),
is_enabled: Map.get(map, :is_enabled, true),
position: map[:position],
countries: Map.get(map, :countries, [])
}
end
@doc """
Converts a Language struct to a string-keyed map for JSONB storage.
Only includes the fields that are stored in the database JSON config.
## Examples
iex> alias PhoenixKit.Modules.Languages.Language
iex> lang = struct(Language, %{code: "en-US", name: "English (United States)", native: "English", flag: "๐Ÿ‡บ๐Ÿ‡ธ", is_default: true, is_enabled: true, position: 0, countries: []})
iex> result = Language.to_json_map(lang)
iex> is_map(result) and result["code"] == "en-US" and map_size(result) > 0
true
"""
@spec to_json_map(t()) :: map()
def to_json_map(%__MODULE__{} = lang) do
map = %{
"code" => lang.code,
"name" => lang.name,
"is_default" => lang.is_default,
"is_enabled" => lang.is_enabled
}
if lang.position do
Map.put(map, "position", lang.position)
else
map
end
end
end