Estoy planeando un lanzamiento en los EE. UU. para mi sitio británico, la mayoría de los textos son iguales, pero ciertas ortografías y fechas están un poco mal. (color vs color, cancelado vs cancelado, disculparse vs disculparse)
Empecé a usar la biblioteca i18n-next para reaccionar, pero tengo mensajes de backend que se muestran al usuario. Lo que me gustaría hacer es envolver las cadenas en t()
y hacer que esas pocas palabras coincidan y se reemplacen. ¿Es i18n capaz de hacer eso o debería hacer una función de utilidad simple para eso?
Idealmente, podría hacerlo en i18n porque quiero probarlo en el futuro para cuando nos expandamos a otros mercados.
Agregando una respuesta aquí mientras hice algunas pruebas.
Creo una const que contiene dos palabras:
const string = 'foo bar';
usando esto, creo una matriz a partir de ella y mapeo a través de cada palabra como esta:
{ string.split(' ').map((word) => ( t(`common:${word}`) )) }
(En cuanto a la parte común: cadena, esa es solo la configuración en el proyecto existente en el que lo probé, estamos usando diferentes archivos para diferentes componentes/rutas/etc.)
Tengo dos archivos de idioma separados:
Uno para sv-SE que no contiene claves con "foo" o "bar".
Una segunda para en-US que contiene una de las palabras como clave con traducción
{ "foo": "raro", }
Y si configuro mi idioma en sv-SE, todavía veo "foobar" como mi salida (no me preocupé de agregar espacios después de cada palabra).
Y si cambio a en-US obtengo la cadena "weirdbar" en su lugar.
Eso debería ponerte en marcha (con suerte)
Entonces, el principio funciona, pero asumiré que necesitará administrar un montón de casos extremos. O tal vez encontrar una mejor manera de hacerlo.