1 defmodule Pleroma.Akkoma.Translators.DeepL do
2 @behaviour Pleroma.Akkoma.Translator
8 defp base_url(:free) do
9 "https://api-free.deepl.com/v2/"
12 defp base_url(:pro) do
13 "https://api.deepl.com/v2/"
17 Config.get([:deepl, :api_key])
21 Config.get([:deepl, :tier])
24 @impl Pleroma.Akkoma.Translator
25 def translate(string, to_language) do
26 with {:ok, %{status: 200} = response} <- do_request(api_key(), tier(), string, to_language),
27 {:ok, body} <- Jason.decode(response.body) do
28 %{"translations" => [%{"text" => translated, "detected_source_language" => detected}]} =
31 {:ok, detected, translated}
33 {:ok, %{status: status} = response} ->
34 Logger.warning("DeepL: Request rejected: #{inspect(response)}")
35 {:error, "DeepL request failed (code #{status})"}
42 defp do_request(api_key, tier, string, to_language) do
44 base_url(tier) <> "translate",
48 target_lang: to_language
53 {"authorization", "DeepL-Auth-Key #{api_key}"},
54 {"content-type", "application/x-www-form-urlencoded"}