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";
|
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"];
|
const RTL_LOCALES: ReadonlyArray<Locale> = ["ar", "fa"];
|
||||||
|
|
||||||
type TranslationParams = Record<string, string | number>;
|
type TranslationParams = Record<string, string | number>;
|
||||||
|
|||||||
@@ -619,6 +619,24 @@ class PowerPointTranslator:
|
|||||||
)
|
)
|
||||||
miss_pos += 1
|
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)
|
recorder = getattr(self, "_segment_recorder", None)
|
||||||
if recorder is not None:
|
if recorder is not None:
|
||||||
recorder.record_pairs(zip(texts, translated))
|
recorder.record_pairs(zip(texts, translated))
|
||||||
@@ -632,7 +650,8 @@ class PowerPointTranslator:
|
|||||||
return dict(self._translation_stats)
|
return dict(self._translation_stats)
|
||||||
|
|
||||||
def _translate_with_provider(
|
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]:
|
) -> List[str]:
|
||||||
"""Translate using the TranslationProvider.translate_batch() interface."""
|
"""Translate using the TranslationProvider.translate_batch() interface."""
|
||||||
from services.providers.base import TranslationProvider as NewTranslationProvider
|
from services.providers.base import TranslationProvider as NewTranslationProvider
|
||||||
@@ -650,6 +669,10 @@ class PowerPointTranslator:
|
|||||||
if is_new_style:
|
if is_new_style:
|
||||||
from services.providers.schemas import TranslationRequest
|
from services.providers.schemas import TranslationRequest
|
||||||
custom_prompt = getattr(self, "_custom_prompt", None)
|
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
|
metadata = {"custom_prompt": custom_prompt} if custom_prompt else None
|
||||||
|
|
||||||
requests = [
|
requests = [
|
||||||
|
|||||||
Reference in New Issue
Block a user