Packages

phoenix_kit

1.3.2
1.7.208 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 phoenix_kit_web live modules languages.ex
Raw

lib/phoenix_kit_web/live/modules/languages.ex

defmodule PhoenixKitWeb.Live.Modules.Languages do
@moduledoc """
Languages module settings LiveView for PhoenixKit admin panel.
Provides interface for managing available languages and localization settings.
"""
use PhoenixKitWeb, :live_view
alias PhoenixKit.Module.Languages
alias PhoenixKit.Settings
alias PhoenixKit.Utils.Routes
def mount(params, session, socket) do
# Handle locale
locale = params["locale"] || socket.assigns[:current_locale] || "en"
Gettext.put_locale(PhoenixKitWeb.Gettext, locale)
Process.put(:phoenix_kit_current_locale, locale)
# Get current path for navigation
current_path = get_current_path(socket, session)
# Get project title from settings
project_title = Settings.get_setting("project_title", "PhoenixKit")
# Load languages configuration
ml_config = Languages.get_config()
socket =
socket
|> assign(:current_path, current_path)
|> assign(:current_locale, locale)
|> assign(:page_title, "Languages")
|> assign(:project_title, project_title)
|> assign(:ml_enabled, ml_config.enabled)
|> assign(:languages, ml_config.languages)
|> assign(:language_count, ml_config.language_count)
|> assign(:enabled_count, ml_config.enabled_count)
|> assign(:default_language, ml_config.default_language)
|> assign(
:available_languages_for_selection,
Languages.get_available_languages_for_selection()
)
{:ok, socket}
end
def handle_event("toggle_languages", _params, socket) do
# Toggle languages
new_enabled = !socket.assigns.ml_enabled
result =
if new_enabled do
Languages.enable_system()
else
Languages.disable_system()
end
case result do
{:ok, _} ->
# Reload configuration to get fresh data
ml_config = Languages.get_config()
socket =
socket
|> assign(:ml_enabled, new_enabled)
|> assign(:languages, ml_config.languages)
|> assign(:language_count, ml_config.language_count)
|> assign(:enabled_count, ml_config.enabled_count)
|> assign(:default_language, ml_config.default_language)
|> put_flash(
:info,
if(new_enabled,
do: "Languages enabled with default English",
else: "Languages disabled"
)
)
{:noreply, socket}
{:error, _changeset} ->
socket = put_flash(socket, :error, "Failed to update languages")
{:noreply, socket}
end
end
def handle_event("toggle_language", %{"code" => code}, socket) do
# Find the language to toggle
language = Enum.find(socket.assigns.languages, &(&1["code"] == code))
if language do
# Toggle the language enabled state
new_enabled = !language["is_enabled"]
result =
if new_enabled do
Languages.enable_language(code)
else
Languages.disable_language(code)
end
case result do
{:ok, _config} ->
# Reload configuration
ml_config = Languages.get_config()
socket =
socket
|> assign(:languages, ml_config.languages)
|> assign(:enabled_count, ml_config.enabled_count)
|> put_flash(
:info,
"Language #{language["name"]} #{if new_enabled, do: "enabled", else: "disabled"}"
)
{:noreply, socket}
{:error, reason} when is_binary(reason) ->
socket = put_flash(socket, :error, reason)
{:noreply, socket}
{:error, _changeset} ->
socket = put_flash(socket, :error, "Failed to update language")
{:noreply, socket}
end
else
socket = put_flash(socket, :error, "Language not found")
{:noreply, socket}
end
end
def handle_event("set_default", %{"code" => code}, socket) do
case Languages.set_default_language(code) do
{:ok, _config} ->
# Reload configuration
ml_config = Languages.get_config()
language = Enum.find(ml_config.languages, &(&1["code"] == code))
socket =
socket
|> assign(:languages, ml_config.languages)
|> assign(:default_language, ml_config.default_language)
|> put_flash(:info, "#{language["name"]} set as default language")
{:noreply, socket}
{:error, reason} when is_binary(reason) ->
socket = put_flash(socket, :error, reason)
{:noreply, socket}
{:error, _changeset} ->
socket = put_flash(socket, :error, "Failed to set default language")
{:noreply, socket}
end
end
def handle_event("add_language", %{"language_code" => language_code}, socket) do
case Languages.add_language(language_code) do
{:ok, _config} ->
# Reload configuration
ml_config = Languages.get_config()
# Get language name for flash message
predefined_lang = Languages.get_predefined_language(language_code)
language_name = (predefined_lang && predefined_lang.name) || language_code
socket =
socket
|> assign(:languages, ml_config.languages)
|> assign(:language_count, ml_config.language_count)
|> assign(:enabled_count, ml_config.enabled_count)
|> assign(
:available_languages_for_selection,
Languages.get_available_languages_for_selection()
)
|> put_flash(:info, "Language #{language_name} added successfully")
{:noreply, socket}
{:error, reason} when is_binary(reason) ->
socket = put_flash(socket, :error, reason)
{:noreply, socket}
{:error, _changeset} ->
socket = put_flash(socket, :error, "Failed to add language")
{:noreply, socket}
end
end
def handle_event("remove_language", %{"code" => code}, socket) do
language = Enum.find(socket.assigns.languages, &(&1["code"] == code))
if language do
case Languages.remove_language(code) do
{:ok, _config} ->
# Reload configuration
ml_config = Languages.get_config()
socket =
socket
|> assign(:languages, ml_config.languages)
|> assign(:language_count, ml_config.language_count)
|> assign(:enabled_count, ml_config.enabled_count)
|> assign(:default_language, ml_config.default_language)
|> assign(
:available_languages_for_selection,
Languages.get_available_languages_for_selection()
)
|> put_flash(:info, "Language #{language["name"]} removed successfully")
{:noreply, socket}
{:error, reason} when is_binary(reason) ->
socket = put_flash(socket, :error, reason)
{:noreply, socket}
{:error, _changeset} ->
socket = put_flash(socket, :error, "Failed to remove language")
{:noreply, socket}
end
else
socket = put_flash(socket, :error, "Language not found")
{:noreply, socket}
end
end
def handle_event("move_up", %{"code" => code}, socket) do
language = Enum.find(socket.assigns.languages, &(&1["code"] == code))
if language do
case Languages.move_language_up(code) do
{:ok, _config} ->
# Reload configuration to get updated positions
ml_config = Languages.get_config()
socket =
socket
|> assign(:languages, ml_config.languages)
|> put_flash(:info, "#{language["name"]} moved up")
{:noreply, socket}
{:error, reason} when is_binary(reason) ->
socket = put_flash(socket, :error, reason)
{:noreply, socket}
{:error, _changeset} ->
socket = put_flash(socket, :error, "Failed to move language")
{:noreply, socket}
end
else
socket = put_flash(socket, :error, "Language not found")
{:noreply, socket}
end
end
def handle_event("move_down", %{"code" => code}, socket) do
language = Enum.find(socket.assigns.languages, &(&1["code"] == code))
if language do
case Languages.move_language_down(code) do
{:ok, _config} ->
# Reload configuration to get updated positions
ml_config = Languages.get_config()
socket =
socket
|> assign(:languages, ml_config.languages)
|> put_flash(:info, "#{language["name"]} moved down")
{:noreply, socket}
{:error, reason} when is_binary(reason) ->
socket = put_flash(socket, :error, reason)
{:noreply, socket}
{:error, _changeset} ->
socket = put_flash(socket, :error, "Failed to move language")
{:noreply, socket}
end
else
socket = put_flash(socket, :error, "Language not found")
{:noreply, socket}
end
end
defp get_current_path(_socket, _session) do
# For LanguagesLive, return the settings path
Routes.path("/admin/settings/languages")
end
end