translate field names for visibility dropdown
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
8512be0282
commit
1675d66b67
2 changed files with 59 additions and 2 deletions
|
|
@ -152,9 +152,25 @@ defmodule MvWeb.Components.FieldVisibilityDropdownComponent do
|
|||
defp field_to_string(field) when is_atom(field), do: Atom.to_string(field)
|
||||
defp field_to_string(field) when is_binary(field), do: field
|
||||
|
||||
defp format_field_label(field) do
|
||||
defp format_field_label(field) when is_atom(field) do
|
||||
MvWeb.Translations.MemberFields.label(field)
|
||||
end
|
||||
|
||||
defp format_field_label(field) when is_binary(field) do
|
||||
case safe_to_existing_atom(field) do
|
||||
{:ok, atom} -> MvWeb.Translations.MemberFields.label(atom)
|
||||
:error -> fallback_label(field)
|
||||
end
|
||||
end
|
||||
|
||||
defp safe_to_existing_atom(string) do
|
||||
{:ok, String.to_existing_atom(string)}
|
||||
rescue
|
||||
ArgumentError -> :error
|
||||
end
|
||||
|
||||
defp fallback_label(field) do
|
||||
field
|
||||
|> field_to_string()
|
||||
|> String.replace("_", " ")
|
||||
|> String.split()
|
||||
|> Enum.map_join(" ", &String.capitalize/1)
|
||||
|
|
|
|||
41
lib/mv_web/translations/member_fields.ex
Normal file
41
lib/mv_web/translations/member_fields.ex
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
defmodule MvWeb.Translations.MemberFields do
|
||||
@moduledoc """
|
||||
Helper module to dynamically translate member field names.
|
||||
|
||||
## Features
|
||||
- Translates technical field names (atoms) to human-friendly localized text
|
||||
- Used primarily in the field visibility dropdown component
|
||||
|
||||
## Example
|
||||
|
||||
iex> MvWeb.Translations.MemberFields.label(:first_name)
|
||||
"Vorname" # when locale is "de"
|
||||
|
||||
iex> MvWeb.Translations.MemberFields.label(:first_name)
|
||||
"First Name" # when locale is "en"
|
||||
"""
|
||||
use Gettext, backend: MvWeb.Gettext
|
||||
|
||||
@spec label(atom()) :: String.t()
|
||||
def label(:first_name), do: gettext("First Name")
|
||||
def label(:last_name), do: gettext("Last Name")
|
||||
def label(:email), do: gettext("Email")
|
||||
def label(:paid), do: gettext("Paid")
|
||||
def label(:phone_number), do: gettext("Phone")
|
||||
def label(:join_date), do: gettext("Join Date")
|
||||
def label(:exit_date), do: gettext("Exit Date")
|
||||
def label(:notes), do: gettext("Notes")
|
||||
def label(:city), do: gettext("City")
|
||||
def label(:street), do: gettext("Street")
|
||||
def label(:house_number), do: gettext("House Number")
|
||||
def label(:postal_code), do: gettext("Postal Code")
|
||||
|
||||
# Fallback for unknown fields
|
||||
def label(field) do
|
||||
field
|
||||
|> to_string()
|
||||
|> String.replace("_", " ")
|
||||
|> String.split()
|
||||
|> Enum.map_join(" ", &String.capitalize/1)
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue