gt-react@10.18.0
Vue d’ensemble
Cette version ajoute la prise en charge des valeurs de contexte dérivables. Comme avec notre système de dérivation pour le contenu, vous pouvez désormais ajouter un appel à derive à une propriété de contexte. Cela génère une entrée de traduction distincte pour chaque valeur de contexte.
Motivation
Nous avons commis au départ une erreur dans notre système de contexte. Le système de dérivation repose sur un mappage un à un entre le contenu d’une entrée source et une traduction : une source produit une traduction. Cela fonctionne bien avec notre système de traduction existant. Il est conçu pour prendre une source en entrée et produire une seule traduction. Autrement dit, si vous créez n entrées source, vous obtenez n entrées de traduction. Cependant, nous n’avions pas tenu compte d’un fait simple : à partir du seul contenu d’une entrée source, plusieurs traductions peuvent être nécessaires.
Comprendre le problème
Imaginons que nous disposions de l’ensemble des entrées source. Cet ensemble représente toutes les entrées source que nous avons extraites d’un appel de traduction. Nous disposons ensuite d’un ensemble idéal d’entrées de traduction. Cet ensemble représente l’ensemble idéal de toutes les traductions nécessaires pour traduire toutes les entrées source.
On peut décomposer cela en trois cas : un à un, de plusieurs vers un et de un à plusieurs. Il est important de comprendre qu’il n’y a pas toujours de mappage un à un entre les ensembles source et les ensembles de traduction.
Cas 1 : mappage un à un
Pour chaque entrée source, il existe un mappage vers une entrée de traduction unique.
| Entrées source | Entrées de traduction |
|---|---|
| The boy is beautiful. | El niño es hermoso. |
| The girl is beautiful. | La niña es hermosa. |
Cas 2 : mappage de plusieurs vers un
Pour chaque entrée source, on peut définir un mappage vers une entrée de traduction, et la taille de l’ensemble source est supérieure à celle de l’ensemble de traduction. Par exemple, on peut passer de l’anglais au mandarin, car l’anglais suit des règles de pluralisation, contrairement au mandarin. Cela signifie qu’en mandarin, plusieurs entrées source peuvent être représentées par une seule entrée de traduction.
| Entrées source | Entrées de traduction |
|---|---|
| J’ai chat. | 我有只猫。 |
| J’ai chats. |
Cas 3 : mappage de un à plusieurs
Pour chaque entrée source, nous pouvons effectuer un mappage vers une ou plusieurs entrées de traduction. Par exemple, l’espagnol marque l’accord au masculin et au féminin, contrairement à l’anglais. Nous pouvons donc nous retrouver avec deux entrées de traduction pour une même entrée source.
| Entrées source | Entrées de traduction |
|---|---|
| I am tired | Estoy cansado |
| Estoy cansada |
C’est le cas que nous n’avions pas pris en compte dans l’implémentation initiale. Nous avions supposé qu’il y aurait toujours un mappage un à un entre les entrées source et les entrées de traduction.
Solution
Ce problème peut être résolu en combinant notre système de contexte avec notre système de dérivation. L’utilisateur peut choisir une valeur de contexte à l’exécution pour lever l’ambiguïté entre plusieurs entrées de traduction.
condition
? gt("I am tired", { $context: "inflect as masculine" })
: gt("I am tired", { $context: "inflect as feminine" })Nous pouvons ensuite combiner cela avec une invocation de derive pour intégrer une logique d’exécution afin de résoudre la bonne entrée de traduction.
gt("I am tired", { $context: derive(
condition ? "inflect as masculine" : "inflect as feminine"
)})Cela génère désormais deux entrées de traduction :
"I am tired" -> "Estoy cansado"
"I am tired" -> "Estoy cansada"Cela (1) couvre tous les cas de traduction nécessaires et (2) permet à l’utilisateur de lever l’ambiguïté entre les deux entrées de traduction à l’exécution.
En résumé
La dérivation basée sur le contexte comble une lacune fondamentale de notre modèle de traduction : l’incapacité à représenter des mappages de un à plusieurs entre les entrées source et les entrées de traduction.