in dev, allow dev FE
[akkoma] / lib / pleroma / web / admin_api / controllers / config_controller.ex
index a718d7b8d7a1f32f1d502e3bc0f72c9fcd5d1be0..831ba3b6f0498239c85be5cca2639e74a9dc9e3e 100644 (file)
@@ -22,10 +22,58 @@ defmodule Pleroma.Web.AdminAPI.ConfigController do
 
   defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.ConfigOperation
 
+  defp translate_descriptions(descriptions, path \\ []) do
+    Enum.map(descriptions, fn desc -> translate_item(desc, path) end)
+  end
+
+  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, path) do
+    if item[key] do
+      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, path) do
+    item
+    |> maybe_put_translated(:label, path)
+    |> maybe_put_translated(:description, path)
+    |> translate_children(path)
+  end
+
+  defp translate_children(%{children: children} = item, path) when is_list(children) do
+    item
+    |> Map.put(
+      :children,
+      translate_descriptions(children, path ++ [Pleroma.Docs.Translator.Compiler.key_for(item)])
+    )
+  end
+
+  defp translate_children(item, _path) do
+    item
+  end
+
   def descriptions(conn, _params) do
     descriptions = Enum.filter(Pleroma.Docs.JSON.compiled_descriptions(), &whitelisted_config?/1)
 
-    json(conn, descriptions)
+    json(conn, translate_descriptions(descriptions))
   end
 
   def show(conn, %{only_db: true}) do