Multi-idioma
Estructuras de datos con soporte a varios idiomas
En Aurora disponemos de ficheros de traducción estáticos para facilitar la traducción de los interfaces de usuarios o mensajes de error.
Otra casuística que abordamos en esta sección es la capacidad de Aurora de plantear estructuras de datos de contemplen traducciones.
Si cogemos como ejemplo una entidad de Libro, podemos requerir de campos que sean traducibles, nombre, descripción, etc. Para estos casos Aurora propone una forma rápida y sencilla de crear y gestionar estos datos multi-idioma.
Configuración en el back
Debemos asegurarnos que nuestro fichero de variables de entorno .env tenga congigurado correctamente los siguientes valores:
APP_FALLBACK_LANG: Variable que determinará el idioma por defecto de nuestro sistema y por lo tanto el idioma principal, desde el que partirán el resto de traducciones.
Una vez establecidos los valores, cuando generamos nuestras entidades debemos indicar en el fichero Yaml en aquellas propiedades que serán multi-idioma, si vamos a un ejemplo se vería de esta manera.
version: 0.0.1
boundedContextName: library
moduleName: book
moduleNames: books
aggregateName: LibraryBook
hasOAuth: true
hasTenant: false
hasAuditing: true
aggregateProperties:
- name: id
type: id
primaryKey: true
length: 36
nullable: false
- name: price
type: decimal
decimals:
- 6
- 2
nullable: true
- name: availableLangs
type: json
nullable: true
- name: createdAt
type: timestamp
nullable: true
- name: updatedAt
type: timestamp
nullable: true
- name: deletedAt
type: timestamp
nullable: true
aggregateI18nProperties:
- name: id
type: id
primaryKey: true
length: 36
nullable: false
- name: bookId
type: id
length: 36
nullable: false
relationship:
type: many-to-one
aggregate: LibraryBook
modulePath: library/book
key: id
field: book
index: unique
indexName: uniqueBookIdLangId
- name: langId
type: id
length: 36
nullable: false
relationship:
type: many-to-one
aggregate: CommonLang
modulePath: common/lang
key: id
field: lang
avoidConstraint: true
index: unique
indexName: uniqueBookIdLangId
- name: title
type: varchar
nullable: false
- name: description
type: text
nullable: false
- name: createdAt
type: timestamp
nullable: true
- name: updatedAt
type: timestamp
nullable: true
- name: deletedAt
type: timestamp
nullable: true
additionalApis: []
Propiedades especiales
Dentro de nuestro yaml, tendremos que tener especial atención en las siguientes propiedades.
availableLangs
Esta propiedad es obligatoria, si tenemos una entidad multi idioma, debe de estar dentro del array aggregateProperties con estas características:
- name: availableLangs
type: json
nullable: true
aggregateI18nProperties
Es el valor que contendrá todas las propiedades que necesitas de múltiples traducciones. Estas propiedades generarán una tabla que contendrá las traducciones de la entidad, por lo que requiere sus propios campos id, createdAt, updatedAt y deletedAt, como si de una entidad independiente se tratara.
bookId
Este campo relaciona los campos con traducciones con los campos que no los tienes, el nombre de esta campo variará en función del nombre de la entidad principal.
langId
Este campo relaciona un registro multi-idioma con el idioma que corresponde, normalmente antes implementar multi-idioma en nuestro desarrollo, deberemos instalar el paquete Common para disponer de la tabla de idiomas.
uniqueBookIdLangId
uniqueBookIdLangId define un índice único compuesto, entre el bookId y langId, realizando una clave única evitando crear una traducción del mismo id y del mismo idioma.
Es importante que este nombre sea único, ya que de lo contrario la construcción del schema de la base de datos puede generar un error.
Última actualización