¡Hola a todos! Hoy quiero compartir con ustedes mi experiencia de cómo implementé un sistema de traducción de recursos en SQL.
A menudo, cuando construimos aplicaciones o sitios web, necesitamos mostrar contenido en diferentes idiomas. Es decir, necesitamos traducir ciertos recursos, como textos de botones, títulos, descripciones, etc. Esto puede ser un desafío en términos de implementación, pero con la ayuda de SQL, podemos lograrlo de manera efectiva.
Para empezar, necesitamos definir la estructura de nuestra base de datos. En mi caso, implementé dos tablas: una tabla de recursos (resources
) y una tabla de traducciones (translations
). La tabla de recursos almacena la información del recurso, como el identificador único (uid
) y el texto en el idioma original (original_text
). La tabla de traducciones almacena la información de la traducción, como el identificador único (uid
), el texto traducido (translated_text
) y el idioma en el que se realizó la traducción (language
).
CREATE TABLE resources (
uid INT PRIMARY KEY,
original_text VARCHAR(255)
);
CREATE TABLE translations (
uid INT,
translated_text VARCHAR(255),
language VARCHAR(10),
PRIMARY KEY(uid, language),
FOREIGN KEY(uid) REFERENCES resources(uid)
);
Ahora, para obtener una traducción de un recurso, podemos simplemente unir las tablas de recursos y traducciones utilizando el identificador único y el idioma deseado:
SELECT resources.uid, translations.translated_text
FROM resources
JOIN translations ON resources.uid = translations.uid
WHERE translations.language = 'es_ES'
En este ejemplo, estamos obteniendo la traducción del recurso con el identificador único uid
y el idioma es_ES
. La consulta unirá la tabla de recursos con la tabla de traducciones y seleccionará la fila correspondiente con el uid
y el idioma especificados.
Si queremos obtener el recurso original cuando no hay una traducción disponible en el idioma deseado, podemos usar una unión externa izquierda (LEFT JOIN
) en lugar de una unión interna (JOIN
):
SELECT resources.uid, COALESCE(translations.translated_text, resources.original_text) AS text
FROM resources
LEFT JOIN translations ON resources.uid = translations.uid AND translations.language = 'fr_FR'
En este ejemplo, estamos obteniendo la traducción del recurso con el identificador único uid
y el idioma fr_FR
. La consulta utilizará una unión externa izquierda para incluir todas las filas de la tabla de recursos, incluso si no hay una fila correspondiente en la tabla de traducciones. Luego, utilizamos la función COALESCE
para elegir el texto traducido si está disponible, y si no, seleccionar el texto original.
Otro forma
En caso de no disponer de un campo con el texto original, sino que cada entrada en la tabla translate sean los recursos traduciodos
#translate table: uid, title, lang
SELECT routes.uid, routes.sku, COALESCE(t1.title, t2.title) AS title, COALESCE(t1.lang, t2.lang) AS lang
FROM routes
LEFT JOIN translations AS t1 ON routes.uid = t1.uid AND t1.lang = 'en_EN'
LEFT JOIN translations AS t2 ON routes.uid = t2.uid AND t2.lang = 'es_ES';