Pass in msgctxt for config translation strings

This commit is contained in:
Tusooa Zhu 2022-07-14 17:41:33 -04:00
commit 1d7e8d6e01
No known key found for this signature in database
GPG key ID: 7B467EDE43A08224
4 changed files with 5799 additions and 4242 deletions

View file

@ -17,9 +17,15 @@ defmodule Pleroma.Docs.Translator.Compiler do
unquote do
Enum.map(
strings,
fn string ->
fn {path, type, string} ->
ctxt = msgctxt_for(path, type)
quote do
Pleroma.Web.Gettext.dgettext_noop("config_descriptions", unquote(string))
Pleroma.Web.Gettext.dpgettext_noop(
"config_descriptions",
unquote(ctxt),
unquote(string)
)
end
end
)
@ -36,7 +42,8 @@ defmodule Pleroma.Docs.Translator.Compiler do
def extract_strings(descriptions) do
descriptions
|> Enum.reduce([], &process_item/2)
|> Enum.reduce(%{strings: [], path: []}, &process_item/2)
|> Map.get(:strings)
end
defp process_item(entity, acc) do
@ -48,28 +55,65 @@ defmodule Pleroma.Docs.Translator.Compiler do
process_children(entity, current_level)
end
defp process_desc(acc, %{description: desc}) do
[desc | acc]
defp process_desc(acc, %{description: desc} = item) do
%{
strings: [{acc.path ++ [key_for(item)], "description", desc} | acc.strings],
path: acc.path
}
end
defp process_desc(acc, _) do
acc
end
defp process_label(acc, %{label: label}) do
[label | acc]
defp process_label(acc, %{label: label} = item) do
%{
strings: [{acc.path ++ [key_for(item)], "label", label} | acc.strings],
path: acc.path
}
end
defp process_label(acc, _) do
acc
end
defp process_children(%{children: children}, acc) do
defp process_children(%{children: children} = item, acc) do
current_level = Map.put(acc, :path, acc.path ++ [key_for(item)])
children
|> Enum.reduce(acc, &process_item/2)
|> Enum.reduce(current_level, &process_item/2)
|> Map.put(:path, acc.path)
end
defp process_children(_, acc) do
acc
end
def msgctxt_for(path, type) do
"config #{type} at #{Enum.join(path, " > ")}"
end
defp convert_group({_, group}) do
group
end
defp convert_group(group) do
group
end
def key_for(%{group: group, key: key}) do
"#{convert_group(group)}-#{key}"
end
def key_for(%{group: group}) do
convert_group(group)
end
def key_for(%{key: key}) do
key
end
def key_for(_) do
nil
end
end

View file

@ -22,35 +22,51 @@ defmodule Pleroma.Web.AdminAPI.ConfigController do
defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.ConfigOperation
defp translate_descriptions(descriptions) do
Enum.map(descriptions, &translate_item/1)
defp translate_descriptions(descriptions, path \\ []) do
Enum.map(descriptions, fn desc -> translate_item(desc, path) end)
end
defp translate_string(str) do
Gettext.dgettext(Pleroma.Web.Gettext, "config_descriptions", str)
defp translate_string(str, path, type) do
Gettext.dpgettext(
Pleroma.Web.Gettext,
"config_descriptions",
Pleroma.Docs.Translator.Compiler.msgctxt_for(path, type),
str
)
end
defp maybe_put_translated(item, key) do
defp maybe_put_translated(item, key, path) do
if item[key] do
Map.put(item, key, translate_string(item[key]))
Map.put(
item,
key,
translate_string(
item[key],
path ++ [Pleroma.Docs.Translator.Compiler.key_for(item)],
to_string(key)
)
)
else
item
end
end
defp translate_item(item) do
defp translate_item(item, path) do
item
|> maybe_put_translated(:label)
|> maybe_put_translated(:description)
|> translate_children()
|> maybe_put_translated(:label, path)
|> maybe_put_translated(:description, path)
|> translate_children(path)
end
defp translate_children(%{children: children} = item) when is_list(children) do
defp translate_children(%{children: children} = item, path) when is_list(children) do
item
|> Map.put(:children, translate_descriptions(children))
|> Map.put(
:children,
translate_descriptions(children, path ++ [Pleroma.Docs.Translator.Compiler.key_for(item)])
)
end
defp translate_children(item) do
defp translate_children(item, _path) do
item
end