自動建議

在 4.13 版的變更: 在 Weblate 4.13 之前,這些服務是在 設定 中設定的。

內建了對幾種機器翻譯和翻譯記憶服務的支援。管理員可以為整站開啟每項服務(在 管理介面 中的 Automatic suggestions),也可以在專案設定中為特定專案開啟:

../_images/project-machinery.webp

備註

它們受到其使用條款的約束,所以確保您被允許以您想要的方式使用它們。第三方服務可從 Weblate 接收來源字串、翻譯、和相關的情境。

該服務從 元件設定 設定的原始檔進行翻譯,請參考 來源語言

可透過 Weblate 的 REST API 設定每個專案的自動建議。

也參考

自動建議

機器翻譯與翻譯記憶服務的優先順序

Weblate 翻譯記憶 的相符結果若為 100%,其優先順序高於機器翻譯服務。如果翻譯記憶中有 100% 相符結果,就不會執行機器翻譯。如果有多筆 100% 相符結果,系統會使用資料庫傳回的第一筆結果。

每個機器翻譯服務都有一個預定義的可以產生的最高分。系統按照它們的最高分確定使用安裝的翻譯服務的順序。如果字串譯文的分低於機器翻譯服務的最高分,那麼將請求該服務產生翻譯。如果譯文得分超過目前得分,那麼系統將接受該譯文。

機器翻譯的來源字串。

在 5.11 版被加入.

可以設定所有第三方服務的來源字串來源。這可以用來微調服務獲得最好結果。有以下選項可用:

自動選擇

自動選擇最佳來源語言。

這是預設行為。

元件來源語言

使用元件來源語言。

此為 5.11 版本前的行為。

專案或元件中定義的第二語言

使用專案 第二語言 或元件 第二語言

退回到自動選擇來源語言,如果未設定第二語言。

LLM 翻譯情境

有額外內容可用時,以 LLM 為基礎的自動建議服務會接收每個待翻譯字串的相關內容。這包括字串情境或單語鍵、額外說明、已設定的第二語言翻譯、複數資訊、未通過的品質檢查,以及預留位置內容。相符的詞彙表項目會連同其說明和選取的旗標一併傳送,以便區分重複的詞彙表詞彙。

您可以在 特定語言的操作指南 中,使用將語言代碼對應至文字的 JSON 物件,新增目標語言專用的說明。語言代碼必須存在於 Weblate 中,且會進行完全比對;不會忽略空白字元。每項說明最多可包含 1000 個字元。Weblate 會先尋找完全相符的目標語言代碼,再退回使用基礎語言代碼。

新增的中繼資料只用於引導產生建議;傳回的翻譯仍必須保留來源的預留位置和標記。Weblate 也會向 LLM 服務傳送一小段先前的對話,示範預期的 JSON 回應格式。來源語言和目標語言的組合有可用範例時,對話會使用隨附的已翻譯範例,否則會使用與語言無關的格式範例。也可以附加相同目標語言的既有翻譯作為其他範例。

Alibaba

在 5.3 版被加入.

服務編號:

alibaba

分數上限:

80

設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

key

存取金鑰 ID

secret

存取金鑰秘密

region

區域 ID

Alibaba Translate 是用於翻譯文字的神經機器翻譯服務,支援最多 214 個語言配對。

Anthropic

在 5.16 版被加入.

服務編號:

anthropic

分數上限:

90

進階功能:
設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

base_url

Anthropic API URL

Anthropic API 基本 URL。留空以使用預設 URL。

model

Anthropic 模型

可用的選擇:

claude-haiku-4-5 -- Claude Haiku 4.5

claude-sonnet-5 -- Claude Sonnet 5

claude-opus-4-8 -- Claude Opus 4.8

claude-fable-5 -- Claude Fable 5

custom -- 自訂模型

persona

翻譯者角色描述

描述翻譯者的角色描述,提高翻譯的準確性,例如:「您是名松鼠飼養員。」

style

翻譯者風格

描述翻譯風格,如:「翻譯得口語化。」

language_instructions

特定語言說明

將現有目標語言代碼對應至額外說明的 JSON 物件,每個說明最多 1000 個字元。

key

API 金鑰

custom_model

自訂模型名稱

只有在模型設定為「自訂模型」時才需要

max_tokens

最大詞元數

回應中可產生的詞元數上限。

使用 Anthropic 的 Claude 模型執行翻譯。

Anthropic API 可存取 Claude 模型家族,這些模型以強大的推理及語言能力著稱。您需要 Anthropic 的 API 金鑰才能使用此服務。

使用 persona 和 style 欄位進一步微調翻譯。這些將被用於 Claude 的提示並允許您變更翻譯的風格。

服務自動使用 詞彙表,見 自動建議中的詞彙表

Apertium APy

服務編號:

apertium-apy

分數上限:

88

設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

url

API URL

開源原件機器翻譯平台提供一組有限語言的翻譯。

使用 Apertium的建議方式是執行您自己的 Apertium-APy 伺服器。

Amazon Translate

服務編號:

aws

分數上限:

88

進階功能:
設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

key

存取金鑰 ID

secret

API 金鑰

region

區網域稱

formality

正式程度

可用的選擇:

空值 -- 預設值

FORMAL -- 正式

INFORMAL -- 非正式

brevity

簡潔度

支援時,優先採用較短的譯文。

可用的選擇:

空值 -- 預設值

ON -- 已啟用

profanity

不雅用語

遮蔽譯文中的不雅用語。

可用的選擇:

空值 -- 預設值

MASK -- 遮蔽不雅用語

Amazon Translate 是神經機器翻譯服務,用於將英語與廣泛支援的語言進行互譯。此服務需要 TranslateFullAccess 受管政策。

服務自動使用 詞彙表,見 自動建議中的詞彙表

Azure OpenAI

在 5.8 版被加入.

服務編號:

azure-openai

分數上限:

90

進階功能:
設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

base_url

API URL

model

LLM 模型

persona

翻譯者角色描述

描述翻譯者的角色描述,提高翻譯的準確性,例如:「您是名松鼠飼養員。」

style

翻譯者風格

描述翻譯風格,如:「翻譯得口語化。」

language_instructions

特定語言說明

將現有目標語言代碼對應至額外說明的 JSON 物件,每個說明最多 1000 個字元。

key

API 金鑰

azure_endpoint

Azure OpenAI 端點 URL

執行個體的端點 URL,如:https://my-instance.openai.azure.com

deployment

Azure OpenAI 部署

模型的唯一部署名稱。

使用託管在 Azure 上的 OpenAI 執行翻譯。

也參考

OpenAI

Baidu

服務編號:

baidu

分數上限:

90

設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

key

用戶端 ID

secret

用戶端秘密金鑰 (secret)

由百度提供的機器翻譯服務。

這項服務使用 API,並且您需要從百度獲得 ID 和 API 金鑰來使用它。

CyrTranslit

在 5.7 版被加入.

服務編號:

cyrtranslit

分數上限:

100

設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

使用 Cyrtranslit 函式庫的機器翻譯服務。

此服務可為同時使用西里爾及拉丁書寫系統的語言,在兩種書寫系統間轉換文字。

DeepL

服務編號:

deepl

分數上限:

91

進階功能:
設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

url

API URL

key

API 金鑰

formality

正式程度

如果語言沒有特別指定是否為書面語,則使用指定的正式程度

context

翻譯情境

描述翻譯情境,提升翻譯準確性。

next_gen

使用下一代模型

偏好使用下一代大語言模型,而非經典機器翻譯模型。

DeepL 是付費服務,可為少數語言提供品質良好的機器翻譯。您需要購買 DeepL API 訂閱方案。

搭配 DeepL 服務使用的 API URL。請設定不含 API 版本的基礎端點;Weblate 會為每個要求選取適當的 DeepL API 版本。

在 2026.7 版的變更: 不再支援 DeepL API v1。

https://api.deepl.com/ (Weblate 預設值)

用於付費計劃的 API 用量,訂閱是基於用量的。

https://api-free.deepl.com/

用於免費計劃的 API 用量,訂閱是基於用量的。

Weblate 支援 DeepL 正式程度功能,它將根據語言選擇相符的變體(例如,有 de@formalde@informal)。

可指定翻譯情境來改進翻譯品質(選用)。要閱讀這方面的更多資訊,請存取 DeepL 翻譯情境的文件

服務自動使用 詞彙表,見 自動建議中的詞彙表

Glosbe

服務編號:

glosbe

分數上限:

90

設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

幾乎每一種活語言的免費字典與翻譯服務。

此 API 可免費使用,但翻譯的使用受所用資料來源之授權條款約束。為防止濫用,服務會限制單一 IP 在特定時段內可發出的呼叫次數。

也參考

Glosbe 網站

Google Cloud Translation Basic

服務編號:

google-translate

分數上限:

90

設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

key

API 金鑰

Google 雲服務提供的機器翻譯服務。

這項服務使用了 Google Translation API v2,您需要得到 API 金鑰,並在 Google API 控制檯開啟記費。

Google Cloud Translation Advanced

服務編號:

google-translate-api-v3

分數上限:

90

進階功能:
設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

credentials

Google 翻譯服務帳號資訊

輸入服務帳號的 JSON 金鑰。

project

Google 翻譯專案

輸入您 Google Cloud 專案的數字或字母 ID。

location

Google Translate 位置

選擇您用在 Google Cloud 專案,或者是位置最靠近您的 Google Cloud Translation 區域。

bucket_name

Google Storage Bucket 名稱

請輸入用來儲存詞彙表檔案的 Google Cloud Storage bucket 名稱。

Google 雲服務提供的機器翻譯服務。

這項服務使用 Google 翻譯 API v3,您需要 JSON 格式的憑證來存取它。

要使用此服務,您需要先經歷下列步驟:

  1. 選擇或建立 Cloud Platform 專案.

  2. 啟用專案計費.

  3. 啟用雲端翻譯。

  4. 設定身分驗證。

您也可以建立儲存桶來設定 詞彙表 要使用的服務(非必須):

  1. 建立 Google 雲端儲存桶.

  2. 設定儲存桶位置為 "us-central1".

  3. 授予服務帳號 'Storage Admin' 權限.

IBM Watson Language Translator

在 5.13.1 版被移除: 廠商自 2024 年 12 月 10 日起停止提供本服務。

LibreTranslate

在 4.7.1 版被加入.

服務編號:

libretranslate

分數上限:

89

設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

url

API URL

key

API 金鑰

LibreTranslate 是一項自由開源的機器翻譯服務。公共執行個體需要 API 金鑰,但 LibreTranslate 可以自託管,並且有幾個映像可以免費使用 API。

https://libretranslate.com/ (官方公開服務)

需要一個API金鑰才能在該網站之外使用。

LTEngine

在 5.17.1 版被加入.

服務編號:

ltengine

分數上限:

89

設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

url

API URL

key

API 金鑰

LTEngine 提供本機的 LibreTranslate 相容 API,由大型語言模型提供支援。對許多 Weblate 安裝環境而言,Ollama 之類的原生 LLM 服務可能更適合,因為 Weblate 可將翻譯情境直接傳送給模型。只有在您特別想使用 LTEngine 的本機翻譯引擎,或未來 LTEngine 的翻譯改進時,才使用 LTEngine。

Azure AI Translator

服務編號:

microsoft-translator

分數上限:

90

進階功能:
設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

key

API 金鑰

base_url

應用程式基礎 URL

可用的選擇:

api.cognitive.microsofttranslator.com -- 全球(不分區)

api-apc.cognitive.microsofttranslator.com -- 亞太

api-eur.cognitive.microsofttranslator.com -- 歐洲

api-nam.cognitive.microsofttranslator.com -- 北美

api.translator.azure.cn -- 中國

api.cognitive.microsofttranslator.us -- Azure 美國政府雲端服務

endpoint_url

身分驗證服務 URL

可以使用下方的區域欄位指定區域性或多服務。

可用的選擇:

api.cognitive.microsoft.com -- 全球

api.cognitive.azure.cn -- 中國

api.cognitive.microsoft.us -- Azure 美國政府雲端服務

region

身分驗證服務區域

category

類別

指定自訂的系統分類 ID(而非通用 ID)來使用。

這是由 Microsoft 透過 Azure portal 提供的機器翻譯服務,屬於 Cognitive Services 之一。

Weblate 實施了 Translator API V3.

此服務透過 dynamic dictionary 自動使用 詞彙表,見 自動建議中的詞彙表

Translator Text API V2

您用於Translator API V2 的金鑰可以用於 API 3。

Translator Text API V3

您必須在 Azure 入口網站註冊,並使用在該處取得的金鑰。使用新的 Azure 金鑰時,還必須將 region 設為服務所在區域。

您也可以指定自訂類別來使用 custom translator.

提示

對於 Azure 中國,請使用您的 Azure Portal 的端點。

Mistral

在 2026.7 版被加入.

服務編號:

mistral

分數上限:

90

進階功能:
設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

base_url

Mistral API 基底 URL

Mistral API 的基底 URL (若與 Mistral 預設 URL 不同)

model

Mistral 模型

可用的選擇:

auto -- 自動選擇

ministral-3b-latest -- Ministral 3 3B

ministral-8b-latest -- Ministral 3 8B

mistral-small-latest -- Mistral Small 4

ministral-14b-latest -- Ministral 3 14B

mistral-large-latest -- Mistral Large 3

mistral-medium-latest -- Mistral Medium 3.5

custom -- 自訂模型

persona

翻譯者角色描述

描述翻譯者的角色描述,提高翻譯的準確性,例如:「您是名松鼠飼養員。」

style

翻譯者風格

描述翻譯風格,如:「翻譯得口語化。」

language_instructions

特定語言說明

將現有目標語言代碼對應至額外說明的 JSON 物件,每個說明最多 1000 個字元。

key

API 金鑰

custom_model

自訂模型名稱

只有在模型設定為「自訂模型」時才需要

ModernMT

在 4.2 版被加入.

服務編號:

modernmt

分數上限:

90

進階功能:
設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

url

API URL

key

API 金鑰

context_vector

情境向量

「記憶 ID:權重」的逗號分隔清單。範例:1234:0.123,4567:0.456

服務自動使用 詞彙表,見 自動建議中的詞彙表

也參考

ModernMT API

MyMemory

服務編號:

mymemory

分數上限:

100

設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

email

聯絡電子郵件

username

使用者名稱

key

API 金鑰

使用機器翻譯的巨量翻譯記憶。

自由匿名使用,目前限制為 100 個請求/天,或者在 email 中提供電子郵件聯絡地址時限制為 1000 個請求/天。您還可以向他們請求更多。

也參考

MyMemory 網站

Netease Sight

服務編號:

netease-sight

分數上限:

90

設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

key

用戶端 ID

secret

用戶端秘密金鑰 (secret)

網易提供的機器翻譯服務。

這項服務使用 API,兵器額您需要從網易得到金鑰和密碼。

Ollama

在 5.15 版被加入.

服務編號:

ollama

分數上限:

90

進階功能:
設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

base_url

API URL

Ollama API 的基礎 URL,預設值為 localhost,連線埠 11434。

model

Ollama 模型

在 Ollama 模型目錄中描述的模型名稱。

persona

翻譯者角色描述

描述翻譯者的角色描述,提高翻譯的準確性,例如:「您是名松鼠飼養員。」

style

翻譯者風格

描述翻譯風格,如:「翻譯得口語化。」

language_instructions

特定語言說明

將現有目標語言代碼對應至額外說明的 JSON 物件,每個說明最多 1000 個字元。

Ollama 模型執行翻譯。

Ollama API 可使用本機安裝的開放原始碼模型進行翻譯,也可透過 Ollama 服務遠端存取模型。請注意,設定模型之前,應先完成 Ollama installed 中的安裝步驟,並下載要使用的模型。

使用 persona 和 style 欄位進一步微調翻譯。這些將被用於 Ollama 的提示並允許您變更翻譯的風格。

服務自動使用 詞彙表,見 自動建議中的詞彙表

也參考

OpenAI

在 5.3 版被加入.

服務編號:

openai

分數上限:

90

進階功能:
設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

base_url

OpenAI API 基礎 URL

OpenAI API 的基底 URL (若與 OpenAI 預設 URL 不同)

model

OpenAI 模型

可用的選擇:

auto -- 自動選擇

gpt-5-nano -- GPT-5 nano

gpt-5.4-nano -- GPT-5.4 nano

gpt-5-mini -- GPT-5 mini

gpt-5.4-mini -- GPT-5.4 mini

gpt-5.6-luna -- GPT-5.6 Luna

gpt-5 -- GPT-5

gpt-5.4 -- GPT-5.4

gpt-5.6-terra -- GPT-5.6 Terra

gpt-5.5 -- GPT-5.5

gpt-5.6 -- GPT-5.6 Sol

custom -- 自訂模型

persona

翻譯者角色描述

描述翻譯者的角色描述,提高翻譯的準確性,例如:「您是名松鼠飼養員。」

style

翻譯者風格

描述翻譯風格,如:「翻譯得口語化。」

language_instructions

特定語言說明

將現有目標語言代碼對應至額外說明的 JSON 物件,每個說明最多 1000 個字元。

key

API 金鑰

custom_model

自訂模型名稱

只有在模型設定為「自訂模型」時才需要

使用 OpenAI 執行翻譯。

OpenAI API 由多元模型集驅動,這些模型的能力和定價各不相同。自動選擇會選擇最佳可用模型,但您或許想要選擇相符您需求的特定模型。

使用 persona 和 style 欄位進一步微調翻譯。這些將被用於 OpenAI 的 prompt 並允許您變更翻譯的風格。

服務自動使用 詞彙表,見 自動建議中的詞彙表

在 5.7 版的變更: 新增支援自訂模型和基礎 URL。

SAP Translation Hub

服務編號:

sap-translation-hub

分數上限:

100

設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

url

API URL

key

API 金鑰

username

SAP 使用者名稱

password

SAP 密碼

enable_mt

啟用機器翻譯

domain

翻譯領域

翻譯領域的 ID,例如 BC。若未指定領域,這個方法會在所有可用領域中搜尋翻譯。

SAP 提供的機器翻譯服務。

您必須有 SAP 帳號(並已在 SAP Cloud Platform 啟用 SAP Translation Hub),才能使用此服務。

除了術語資料庫,您還可以設定是否使用機器翻譯服務。

備註

要存取 Sandbox API,您需要設定 urlkey.

為了存取正式環境的 API,您需要設定 url, usernamepassword

Systran

服務編號:

systran

分數上限:

90

設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

key

API 金鑰

Systran 提供的機器翻譯服務。

這項服務使用 API,您需要從 <https://translate.systran.net/en/account> 取得 API 金鑰。

tmserver

服務編號:

tmserver

分數上限:

100

設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

url

API URL

使用 tmserver 協議您可以執行自己的翻譯記憶伺服器。

  • 原始的 tmserver 和 translate-toolkit 捆綁在一起。

  • amaGama 伺服器是增強版 tmserver。

備註

目前似乎沒有針對這個的受維護的伺服器。

Weblate

服務編號:

weblate

分數上限:

100

設定:

此服務無設定。

Weblate 機器翻譯服務可根據 Weblate 目前現有字串中的完全相符結果提供翻譯;這些字串必須處於 已翻譯已核准唯讀 狀態

Weblate 翻譯記憶

服務編號:

weblate-translation-memory

分數上限:

100

設定:

此服務無設定。

使用 翻譯記憶 作為機器翻譯服務。任何過去翻譯過的字串(或上傳到翻譯記憶)都可以用這種方式翻譯。此建議源可用於模糊相符。

備註

重新建立 翻譯記憶 會降低此機器翻譯服務的能力。

Yandex

服務編號:

yandex

分數上限:

90

設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

key

API 金鑰

Yandex 提供的機器翻譯服務。

這項服務使用翻譯 API,您需要從 Yandex 得到 API 金鑰。

Yandex v2

在 5.1 版被加入.

服務編號:

yandex-v2

分數上限:

90

設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

key

API 金鑰

Yandex 提供的機器翻譯服務。

這項服務使用翻譯 API,您需要從 Yandex Cloud 得到 API 金鑰。

Youdao Zhiyun

服務編號:

youdao-zhiyun

分數上限:

90

設定:

source_language

來源語言選擇

可用的選擇:

auto -- 自動選擇

source -- 元件來源語言

secondary -- 專案或元件中定義的次要語言

key

用戶端 ID

secret

用戶端秘密金鑰 (secret)

有道提供的機器翻譯服務。

這項服務使用 API,您需要從有道獲得 ID 和 API 金鑰。

自訂機器翻譯

您也可以使用幾行 Python 程式碼來實作自己的機器翻譯服務。將程式碼放在 Weblate 可以匯入的模組中 (請參閱 建立 Python 模組自訂程式碼) 並新增完整限定類別名稱至 WEBLATE_MACHINERY

"""
Machine translation example.

This example uses fictional http://example.com/ service to translate the
strings.
"""

from __future__ import annotations

from typing import TYPE_CHECKING

from weblate.machinery.base import MACHINERY_DEFAULT_THRESHOLD, MachineTranslation

if TYPE_CHECKING:
    from weblate.auth.models import User
    from weblate.machinery.base import DownloadTranslations
    from weblate.trans.models import Unit


class SampleTranslation(MachineTranslation):
    """Sample machine translation interface."""

    name = "Sample"

    def download_languages(self):
        """Return list of languages your machine translation supports."""
        response = self.request("get", "http://example.com/languages")
        return response.json()["languages"]

    def download_translations(
        self,
        source_language,
        target_language,
        text: str,
        unit: Unit | None,
        user: User | None,
        threshold: int = MACHINERY_DEFAULT_THRESHOLD,
    ) -> DownloadTranslations:
        """Return tuple with translations."""
        response = self.request(
            "get",
            "http://example.com/translate",
            params={
                "source_language": source_language,
                "target_language": target_language,
                "text": text,
            },
        )

        for translation in response.json()["translations"]:
            yield {
                "text": translation,
                "quality": 100,
                "service": self.name,
                "source": text,
            }