gt-react@10.18.0
Descripción general
Este lanzamiento agrega compatibilidad con valores de contexto derivables. Al igual que con nuestro sistema de derivación para el contenido, ahora también puedes aplicar una derivación a una propiedad de contexto. Esto generará una entrada de traducción independiente para cada contexto distinto.
Motivación
Cometimos un error inicial en nuestro sistema de contextos. El sistema de derivación usa un mapeo uno a uno entre el contenido de una entrada de origen y una traducción: una entrada de origen genera una traducción. Esto funciona bien con nuestro sistema de traducción actual. Está diseñado para tomar una fuente como entrada y devolver una sola traducción. Esto significa que, si crearas n entradas de origen, tendrías n entradas de traducción. Sin embargo, no tuvimos en cuenta un hecho simple: con solo el contenido de una entrada de origen, puede haber varias traducciones necesarias.
Entender el problema
Imagina que tenemos el conjunto de entradas de origen. Este conjunto representa todas las entradas de origen que hemos extraído de una invocación de traducción. Luego tenemos un conjunto ideal de entradas de traducción. Este conjunto representa el conjunto ideal de todas las traducciones que serían necesarias para traducir todas las entradas de origen.
Podemos dividir esto en tres casos: one-to-one, many-to-one y one-to-many. Es importante tener en cuenta que no siempre hay un mapeo uno a uno entre los conjuntos de origen y de traducción.
Caso 1: Mapeo uno a uno
Para cada entrada de origen, podemos asignarla a una única entrada de traducción.
| Entradas de origen | Entradas de traducción |
|---|---|
| The boy is beautiful. | El niño es hermoso. |
| The girl is beautiful. | La niña es hermosa. |
Caso 2: Mapeo de muchos a uno
Para cada entrada de origen, podemos asignarla a una entrada de traducción, y el tamaño del conjunto de origen es mayor que el del conjunto de traducción. Por ejemplo, podemos pasar del inglés al mandarín, ya que el inglés sigue reglas de pluralización, mientras que el mandarín no. Esto significa que, en mandarín, podemos representar varias entradas de origen con una sola entrada de traducción.
| Entradas de origen | Entradas de traducción |
|---|---|
| I have cat. | 我有只猫。 |
| I have cats. |
Caso 3: Mapeo de uno a varios
Para cada entrada de origen, podemos mapearla a una o varias entradas de traducción. Por ejemplo, el español respeta la concordancia de género masculino y femenino, mientras que el inglés no. Por eso, podemos acabar con dos entradas de traducción para una misma entrada de origen.
| Entradas de origen | Entradas de traducción |
|---|---|
| I am tired | Estoy cansado |
| Estoy cansada |
Este es el caso que no contemplamos en la implementación inicial. Habíamos asumido que siempre habría un mapeo uno a uno entre las entradas de origen y las traducciones.
Solución
Este problema puede resolverse aprovechando nuestro sistema de contexto junto con el sistema de derivación. El usuario puede elegir un valor de contexto en tiempo de ejecución para desambiguar entre dos o más entradas de traducción.
condition
? gt("I am tired", { $context: "inflect as masculine" })
: gt("I am tired", { $context: "inflect as feminine" })Luego, podemos combinar esto con una invocación de derivación para incorporar lógica en tiempo de ejecución que resuelva la entrada de traducción correcta.
gt("I am tired", { $context: derive(
condition ? "inflect as masculine" : "inflect as feminine"
)})Ahora se generarán dos entradas de traducción:
"I am tired" -> "Estoy cansado"
"I am tired" -> "Estoy cansada"Esto (1) cubre todos los casos de traducción necesarios y (2) permite al usuario distinguir entre las dos entradas de traducción en tiempo de ejecución.
En resumen
La derivación basada en el contexto aborda una carencia fundamental de nuestro modelo de traducción: la imposibilidad de representar asignaciones one-to-many entre las entradas de origen y las de traducción.