Salta el contingut

Sistema i18n

Fitxers

Fitxer Descripció
i18n-es.html Diccionari castellà (~710 línies, ~400+ claus)
i18n-ca.html Diccionari català (estructura idèntica a i18n-es.html)
i18n-core.html Motor: window.t(), applyI18n(), validació de paritat

Estructura de claus

Les claus de primer nivell actuals:

header, sections, booking, recursos, tramos, toast, incidencias,
adminConfig, admin, myReservations, common, modalReservation,
recurring, adminToast, confirm, adminModal, saveBar, registro

Cada clau pot tenir sub-objectes anidats:

// i18n-es.html
window.I18N_ES = {
  booking: {
    confirm: "Confirmar reserva",
    cancel:  "Cancel·lar"
  }
}
// i18n-ca.html — mateixa estructura, diferent text
window.I18N_CA = {
  booking: {
    confirm: "Confirmar reserva",
    cancel:  "Cancel·la"
  }
}

Afegir una traducció nova

Regla: sempre afegir la clau als dos fitxers alhora.

  1. Obre i18n-es.html i i18n-ca.html
  2. Afegeix la nova clau a la secció corresponent en els dos fitxers
  3. Usa la clau al HTML o JS
<!-- HTML -->
<button data-i18n="booking.confirm"></button>
// JS
const msg = window.t('booking.confirm');
showToast(window.t('toast.reservaOk'));

Validació de paritat

i18n-core.html executa checkI18nParity() en carregar la pàgina. Si ES i CA tenen claus divergents, apareix un avís per consola:

[i18n] Claus presents a ES però no a CA: ["nova.clau"]

Comprova la consola del navegador després de qualsevol canvi als diccionaris.


Resolució de llengua

  1. window.APP_LANG (injectat per GAS des de Config sheet)
  2. navigator.language
  3. ca (default)

Substitució de paràmetres

// Diccionari
{ reserva: { confirmada: "Reserva de {recurs} confirmada" } }

// Ús
window.t('reserva.confirmada', { recurs: 'ESPAI-1' })
// → "Reserva de ESPAI-1 confirmada"