🚀
Aurora Framework
  • ¿Que es AURORA?
  • Primeros pasos
    • Instalación
    • Crear tu primera aplicación
    • Configura tu base de datos
    • Crear tu primer modulo
    • Crear un pipeline de despliegue
  • Fundamentos
    • API Yaml definition
    • QueryStatement
    • CQRS
    • Transacciones
    • ValueObjects
    • Estructura de proyecto
    • Multi-idioma
  • Packages
    • Environments information
    • Common
      • Instalación en back
      • Instalación en front
    • OAuth & IAM
      • Instalación en back
      • Instalación en front
    • Settings
    • Auditing
      • Instalación en back
      • Instalación en front
    • Queue Manager
      • Instalación en back
      • Instalación en front
      • Gestionar Jobs
    • MS Entra ID
      • Instalación en back
      • Instalación en front
    • Storage account
      • Instalación en back
      • Instalación en front
    • Azure Storage Account
      • Instalación en back
  • Ejemplos
    • Aplicación de libros
      • Instalación del back
      • Entidad Author
      • Entidad Book
Con tecnología de GitBook
En esta página
  • Configuración en el back
  • Propiedades especiales
  • availableLangs
  • aggregateI18nProperties
  • bookId
  • langId
  • uniqueBookIdLangId
  1. Fundamentos

Multi-idioma

Estructuras de datos con soporte a varios idiomas

AnteriorEstructura de proyectoSiguienteEnvironments information

Última actualización hace 1 año

Recomendamos previamente la instalación de paquete para el soporte multi-idioma

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.

  • APP_SEARCH_KEY_LANG: Establecerá el formato y el índices por el que buscará los idiomas, hay tres formatos disponibles:

    • id

    • (formato por defecto)

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

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.

Este campo relaciona un registro multi-idioma con el idioma que corresponde, normalmente antes implementar multi-idioma en nuestro desarrollo, deberemos instalar el paquete para disponer de la tabla de idiomas.

Common
iso6392
iso6393
ietf
Common