Languages management for PhoenixKit - complete language configuration in a single module.
Languages is core and always on; it is not a toggleable feature module (it
has no card on the Modules page and is not in PhoenixKit.ModuleRegistry). What an
admin switches on or off, at Admin → Settings → Languages, is multi-language
support for the site: enabled?/0. Off, the site serves its configured fallback locale only
(enabled_locale_codes/0), get_languages/0 and get_enabled_languages/0 are
empty, and no menu or switcher offers a language. On, the configured languages are
routed and offered. The languages permission key is a core section key, so the
settings page stays reachable while the switch is off.
It handles language configuration, settings, and language data through JSON settings.
Language Structure
Each language has the following structure:
code: Language code (e.g., "en-US", "es-ES", "fr-FR")name: Full language name (e.g., "English (United States)", "Spanish (Spain)", "French (France)")is_default: Boolean indicating if this is the default languageis_enabled: Boolean indicating if this language is active
Core Functions
Languages Management
Language Management
Usage Examples
# Check if languages are enabled
if PhoenixKit.Modules.Languages.enabled?() do
# Languages are active
end
# Enable languages (creates default English language)
{:ok, config} = PhoenixKit.Modules.Languages.enable_system()
# Add a new language
{:ok, config} = PhoenixKit.Modules.Languages.add_language("es")
# Get all languages
languages = PhoenixKit.Modules.Languages.get_languages()
# => [%Language{code: "en-US", name: "English (United States)", is_default: true, is_enabled: true}, ...]
# Get only enabled languages (most common use case)
enabled_languages = PhoenixKit.Modules.Languages.get_enabled_languages()
# => [%Language{code: "en-US", name: "English (United States)", ...}, ...]
# Get a specific language by code
spanish = PhoenixKit.Modules.Languages.get_language("es-ES")
# => %{code: "es-ES", name: "Spanish (Spain)", is_enabled: true}
# Get just the language codes
codes = PhoenixKit.Modules.Languages.get_enabled_language_codes()
# => ["en-US", "es-ES", "fr-FR"]
# Check if a language is valid and enabled
if PhoenixKit.Modules.Languages.language_enabled?("es-ES") do
# Use Spanish language
end
Languages are stored in the languages_config setting as JSON.
The array order determines the display order:
{
"languages": [
{
"code": "en-US",
"name": "English (United States)",
"is_default": true,
"is_enabled": true
},
{
"code": "es-ES",
"name": "Spanish (Spain)",
"is_default": false,
"is_enabled": true
}
]
}