Coverage for app/venv/lib/python3.14/site-packages/weblate/machinery/systran.py: 37%
23 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 07:15 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 07:15 +0000
1# Copyright © Michal Čihař <michal@weblate.org>
2#
3# SPDX-License-Identifier: GPL-3.0-or-later
5from .base import MachineTranslation, MachineTranslationError
6from .forms import KeyMachineryForm
9class SystranTranslation(MachineTranslation):
10 """Systran machine translation support."""
12 name = "Systran"
13 max_score = 90
14 settings_form = KeyMachineryForm
16 def check_failure(self, response) -> None:
17 if "error" not in response:
18 return
19 raise MachineTranslationError(response["error"]["message"])
21 def download_languages(self):
22 """Download list of supported languages from a service."""
23 response = self.request(
24 "get",
25 "https://api-translate.systran.net/translation/supportedLanguages",
26 params={"key": self.settings["key"]},
27 )
28 payload = response.json()
29 self.check_failure(payload)
30 return [(item["source"], item["target"]) for item in payload["languagePairs"]]
32 def is_supported(self, source_language, target_language):
33 """Check whether given language combination is supported."""
34 return (source_language, target_language) in self.supported_languages
36 def download_translations(
37 self,
38 source_language,
39 target_language,
40 text: str,
41 unit,
42 user,
43 threshold: int = 75,
44 ):
45 """Download list of possible translations from a service."""
46 response = self.request(
47 "post",
48 "https://api-translate.systran.net/translation/text/translate",
49 params={
50 "key": self.settings["key"],
51 "source": source_language,
52 "target": target_language,
53 "input": text,
54 },
55 )
56 payload = response.json()
58 self.check_failure(payload)
60 for translation in payload["outputs"]:
61 yield {
62 "text": translation["output"],
63 "quality": self.max_score,
64 "service": self.name,
65 "source": text,
66 }