summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTusooa Zhu <tusooa@kazv.moe>2022-07-14 17:41:33 -0400
committerTusooa Zhu <tusooa@kazv.moe>2022-07-14 17:41:33 -0400
commit1d7e8d6e013bb39e6ca61bd595a22490412db084 (patch)
tree82c735a452239a06ce569bd051e27899b793d8cf /lib
parent074a94e90d44a7c173606c277270eea1327ea42a (diff)
downloadpleroma-1d7e8d6e013bb39e6ca61bd595a22490412db084.tar.gz
pleroma-1d7e8d6e013bb39e6ca61bd595a22490412db084.zip
Pass in msgctxt for config translation strings
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/docs/translator/compiler.ex62
-rw-r--r--lib/pleroma/web/admin_api/controllers/config_controller.ex42
2 files changed, 82 insertions, 22 deletions
diff --git a/lib/pleroma/docs/translator/compiler.ex b/lib/pleroma/docs/translator/compiler.ex
index 21c02b50b..5d27d9fa2 100644
--- a/lib/pleroma/docs/translator/compiler.ex
+++ b/lib/pleroma/docs/translator/compiler.ex
@@ -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
diff --git a/lib/pleroma/web/admin_api/controllers/config_controller.ex b/lib/pleroma/web/admin_api/controllers/config_controller.ex
index f6fbbc910..a03318c0e 100644
--- a/lib/pleroma/web/admin_api/controllers/config_controller.ex
+++ b/lib/pleroma/web/admin_api/controllers/config_controller.ex
@@ -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