Cómo implementar un sistema de traducción de recursos en SQL


¡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';
Anuncio publicitario

Publicado por Codelaby

Mobile DevDesigner

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: