mirror of
https://git.pleroma.social/pleroma/pleroma.git
synced 2026-02-15 17:16:57 +00:00
Merge branch 'translation-provider-mozhi' into 'develop'
Support Mozhi as translation provider See merge request pleroma/pleroma!4376
This commit is contained in:
commit
9548c31ef9
3 changed files with 125 additions and 1 deletions
1
changelog.d/translation-provider-mozhi.add
Normal file
1
changelog.d/translation-provider-mozhi.add
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Support Mozhi translation provider
|
||||||
|
|
@ -3558,7 +3558,8 @@ config :pleroma, :config_description, [
|
||||||
type: :module,
|
type: :module,
|
||||||
suggestions: [
|
suggestions: [
|
||||||
Pleroma.Language.Translation.Deepl,
|
Pleroma.Language.Translation.Deepl,
|
||||||
Pleroma.Language.Translation.Libretranslate
|
Pleroma.Language.Translation.Libretranslate,
|
||||||
|
Pleroma.Language.Translation.Mozhi
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
|
|
@ -3588,6 +3589,19 @@ config :pleroma, :config_description, [
|
||||||
label: "LibreTranslate API Key",
|
label: "LibreTranslate API Key",
|
||||||
type: :string,
|
type: :string,
|
||||||
suggestions: ["YOUR_API_KEY"]
|
suggestions: ["YOUR_API_KEY"]
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
group: {:subgroup, Pleroma.Language.Translation.Mozhi},
|
||||||
|
key: :base_url,
|
||||||
|
label: "Mozhi instance URL",
|
||||||
|
type: :string
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
group: {:subgroup, Pleroma.Language.Translation.Mozhi},
|
||||||
|
key: :engine,
|
||||||
|
label: "Engine used for Mozhi",
|
||||||
|
type: :string,
|
||||||
|
suggestions: ["libretranslate"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
109
lib/pleroma/language/translation/mozhi.ex
Normal file
109
lib/pleroma/language/translation/mozhi.ex
Normal file
|
|
@ -0,0 +1,109 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Language.Translation.Mozhi do
|
||||||
|
import Pleroma.Web.Utils.Guards, only: [not_empty_string: 1]
|
||||||
|
|
||||||
|
alias Pleroma.Language.Translation.Provider
|
||||||
|
|
||||||
|
use Provider
|
||||||
|
|
||||||
|
@behaviour Provider
|
||||||
|
|
||||||
|
@name "Mozhi"
|
||||||
|
|
||||||
|
@impl Provider
|
||||||
|
def configured?, do: not_empty_string(base_url()) and not_empty_string(engine())
|
||||||
|
|
||||||
|
@impl Provider
|
||||||
|
def translate(content, source_language, target_language) do
|
||||||
|
endpoint =
|
||||||
|
base_url()
|
||||||
|
|> URI.merge("/api/translate")
|
||||||
|
|> URI.to_string()
|
||||||
|
|
||||||
|
case Pleroma.HTTP.get(
|
||||||
|
endpoint <>
|
||||||
|
"?" <>
|
||||||
|
URI.encode_query(%{
|
||||||
|
engine: engine(),
|
||||||
|
text: content,
|
||||||
|
from: source_language,
|
||||||
|
to: target_language
|
||||||
|
}),
|
||||||
|
[{"Accept", "application/json"}]
|
||||||
|
) do
|
||||||
|
{:ok, %{status: 200} = res} ->
|
||||||
|
%{
|
||||||
|
"translated-text" => content,
|
||||||
|
"source_language" => source_language
|
||||||
|
} = Jason.decode!(res.body)
|
||||||
|
|
||||||
|
{:ok,
|
||||||
|
%{
|
||||||
|
content: content,
|
||||||
|
detected_source_language: source_language,
|
||||||
|
provider: @name
|
||||||
|
}}
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
{:error, :internal_server_error}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@impl Provider
|
||||||
|
def supported_languages(type) when type in [:source, :target] do
|
||||||
|
path =
|
||||||
|
case type do
|
||||||
|
:source -> "/api/source_languages"
|
||||||
|
:target -> "/api/target_languages"
|
||||||
|
end
|
||||||
|
|
||||||
|
endpoint =
|
||||||
|
base_url()
|
||||||
|
|> URI.merge(path)
|
||||||
|
|> URI.to_string()
|
||||||
|
|
||||||
|
case Pleroma.HTTP.get(
|
||||||
|
endpoint <>
|
||||||
|
"?" <>
|
||||||
|
URI.encode_query(%{
|
||||||
|
engine: engine()
|
||||||
|
}),
|
||||||
|
[{"Accept", "application/json"}]
|
||||||
|
) do
|
||||||
|
{:ok, %{status: 200} = res} ->
|
||||||
|
languages =
|
||||||
|
Jason.decode!(res.body)
|
||||||
|
|> Enum.map(fn %{"Id" => language} -> language end)
|
||||||
|
|
||||||
|
{:ok, languages}
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
{:error, :internal_server_error}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@impl Provider
|
||||||
|
def languages_matrix do
|
||||||
|
with {:ok, source_languages} <- supported_languages(:source),
|
||||||
|
{:ok, target_languages} <- supported_languages(:target) do
|
||||||
|
{:ok,
|
||||||
|
Map.new(source_languages, fn language -> {language, target_languages -- [language]} end)}
|
||||||
|
else
|
||||||
|
{:error, error} -> {:error, error}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@impl Provider
|
||||||
|
def name, do: @name
|
||||||
|
|
||||||
|
defp base_url do
|
||||||
|
Pleroma.Config.get([__MODULE__, :base_url])
|
||||||
|
end
|
||||||
|
|
||||||
|
defp engine do
|
||||||
|
Pleroma.Config.get([__MODULE__, :engine])
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
Add table
Add a link
Reference in a new issue