feat(pptx,ui): retentative mauvaise ecriture pour PowerPoint + lien liste RTL interface
- PowerPoint beneficie du garde-fou de retentative (arabe livre pour du persan etc.), comme Word, Excel et PDF - l'interface : la liste des locales RTL renvoie desormais explicitement a la reference serveur (core/languages.py) pour eviter tout oubli lors d'un futur ajout de langue d'affichage
This commit is contained in:
@@ -44,6 +44,11 @@ const VALID_LOCALES: ReadonlyArray<Locale> = [
|
||||
];
|
||||
|
||||
const DEFAULT_LOCALE: Locale = "en";
|
||||
// Locales d'affichage écrites de droite à gauche. Doit couvrir toutes les
|
||||
// locales RTL de VALID_LOCALES — la référence côté serveur est
|
||||
// RTL_LANGUAGES dans core/languages.py (ar, he, fa, ur, ku, ps, ug, sd,
|
||||
// yi, dv, ckb) : toute nouvelle locale RTL ajoutée à VALID_LOCALES doit
|
||||
// figurer ici, sinon l'interface restera affichée de gauche à droite.
|
||||
const RTL_LOCALES: ReadonlyArray<Locale> = ["ar", "fa"];
|
||||
|
||||
type TranslationParams = Record<string, string | number>;
|
||||
|
||||
@@ -619,6 +619,24 @@ class PowerPointTranslator:
|
||||
)
|
||||
miss_pos += 1
|
||||
|
||||
# Wrong-script guard: re-ask once (with a reinforced instruction)
|
||||
# for translations delivered in the wrong alphabet — e.g. Arabic
|
||||
# delivered for a Persian target.
|
||||
from translators.segments import retry_wrong_script
|
||||
|
||||
def _retry_translate(retry_texts, hint):
|
||||
if self._provider is not None:
|
||||
return self._translate_with_provider(
|
||||
retry_texts, target_language, source_language, extra_prompt=hint
|
||||
)
|
||||
return self._translate_with_legacy(
|
||||
retry_texts, target_language, source_language
|
||||
)
|
||||
|
||||
translated, _script_fixed = retry_wrong_script(
|
||||
texts, translated, target_language, _retry_translate
|
||||
)
|
||||
|
||||
recorder = getattr(self, "_segment_recorder", None)
|
||||
if recorder is not None:
|
||||
recorder.record_pairs(zip(texts, translated))
|
||||
@@ -632,7 +650,8 @@ class PowerPointTranslator:
|
||||
return dict(self._translation_stats)
|
||||
|
||||
def _translate_with_provider(
|
||||
self, texts: List[str], target_language: str, source_language: str
|
||||
self, texts: List[str], target_language: str, source_language: str,
|
||||
extra_prompt: Optional[str] = None,
|
||||
) -> List[str]:
|
||||
"""Translate using the TranslationProvider.translate_batch() interface."""
|
||||
from services.providers.base import TranslationProvider as NewTranslationProvider
|
||||
@@ -650,6 +669,10 @@ class PowerPointTranslator:
|
||||
if is_new_style:
|
||||
from services.providers.schemas import TranslationRequest
|
||||
custom_prompt = getattr(self, "_custom_prompt", None)
|
||||
if extra_prompt:
|
||||
custom_prompt = (
|
||||
f"{custom_prompt}\n\n{extra_prompt}" if custom_prompt else extra_prompt
|
||||
)
|
||||
metadata = {"custom_prompt": custom_prompt} if custom_prompt else None
|
||||
|
||||
requests = [
|
||||
|
||||
Reference in New Issue
Block a user