diff --git a/docs/docs/configuration/cheatsheet.md b/docs/docs/configuration/cheatsheet.md index a29db208c..90041d3d6 100644 --- a/docs/docs/configuration/cheatsheet.md +++ b/docs/docs/configuration/cheatsheet.md @@ -1159,3 +1159,28 @@ Each job has these settings: * `:max_running` - max concurrently runnings jobs * `:max_waiting` - max waiting jobs + +### Translation Settings + +Settings to automatically translate statuses for end users. Currently supported +translation services are DeepL and LibreTranslate. + +Translations are available at `/api/v1/statuses/:id/translations/:language`, where +`language` is the target language code (e.g `en`) + +### `:translator` + +- `:enabled` - enables translation +- `:module` - Sets module to be used + - Either `Pleroma.Akkoma.Translators.DeepL` or `Pleroma.Akkoma.Translators.LibreTranslate` + +### `:deepl` + +- `:api_key` - API key for DeepL +- `:tier` - API tier + - either `:free` or `:pro` + +### `:libre_translate` + +- `:url` - URL of LibreTranslate instance +- `:api_key` - API key for LibreTranslate \ No newline at end of file diff --git a/lib/pleroma/akkoma/translators/deepl.ex b/lib/pleroma/akkoma/translators/deepl.ex index b782e7cd6..0a4a7fe10 100644 --- a/lib/pleroma/akkoma/translators/deepl.ex +++ b/lib/pleroma/akkoma/translators/deepl.ex @@ -30,9 +30,9 @@ defmodule Pleroma.Akkoma.Translators.DeepL do {:ok, detected, translated} else - {:ok, %{status: 403} = response} -> - Logger.warning("DeepL: Request rejected, please check your API key: #{inspect(response)}") - {:error, "DeepL request failed"} + {:ok, %{status: status} = response} -> + Logger.warning("DeepL: Request rejected: #{inspect(response)}") + {:error, "DeepL request failed (code #{status})"} {:error, reason} -> {:error, reason} diff --git a/lib/pleroma/akkoma/translators/libre_translate.ex b/lib/pleroma/akkoma/translators/libre_translate.ex index 86ce0036b..615d04192 100644 --- a/lib/pleroma/akkoma/translators/libre_translate.ex +++ b/lib/pleroma/akkoma/translators/libre_translate.ex @@ -21,9 +21,9 @@ defmodule Pleroma.Akkoma.Translators.LibreTranslate do {:ok, detected, translated} else - {:ok, %{status: 403} = response} -> - Logger.warning("DeepL: Request rejected, please check your API key: #{inspect(response)}") - {:error, "libre_translate: request failed"} + {:ok, %{status: status} = response} -> + Logger.warning("libre_translate: request failed, #{inspect(response)}") + {:error, "libre_translate: request failed (code #{status})"} {:error, reason} -> {:error, reason} diff --git a/test/pleroma/translators/deepl_test.exs b/test/pleroma/translators/deepl_test.exs index 3e1f1e175..286d21d3e 100644 --- a/test/pleroma/translators/deepl_test.exs +++ b/test/pleroma/translators/deepl_test.exs @@ -69,7 +69,7 @@ defmodule Pleroma.Akkoma.Translators.DeepLTest do } end) - assert {:error, "DeepL request failed"} = DeepL.translate("ギュギュ握りつぶしちゃうぞ", "en") + assert {:error, "DeepL request failed (code 403)"} = DeepL.translate("ギュギュ握りつぶしちゃうぞ", "en") end end end diff --git a/test/pleroma/translators/libre_translate_text.exs b/test/pleroma/translators/libre_translate_test.exs similarity index 77% rename from test/pleroma/translators/libre_translate_text.exs rename to test/pleroma/translators/libre_translate_test.exs index 798b45113..9ed2c5323 100644 --- a/test/pleroma/translators/libre_translate_text.exs +++ b/test/pleroma/translators/libre_translate_test.exs @@ -66,8 +66,26 @@ defmodule Pleroma.Akkoma.Translators.LibreTranslateTest do } end) - assert {:error, "libre_translate: request failed"} = + assert {:error, "libre_translate: request failed (code 403)"} = LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", "en") end + + test "should gracefully handle an unsupported language" do + clear_config([:libre_translate, :api_key], "") + + Tesla.Mock.mock(fn + %{method: :post, url: "http://libre.translate/translate"} -> + %Tesla.Env{ + status: 400, + body: + Jason.encode!(%{ + error: "zoop is not supported" + }) + } + end) + + assert {:error, "libre_translate: request failed (code 400)"} = + LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", "zoop") + end end end