Idiomas
Cómo funciona el panel en inglés y árabe, dónde está cada texto y qué cambiar para añadir un idioma.
Para el paquete Front + Back
Los idiomas incluidos
| Idioma | Dirección | Dirección del texto | Fuente |
|---|---|---|---|
| Inglés, el idioma por defecto | /en | De izquierda a derecha | La fuente del sistema |
| Árabe | /ar | De derecha a izquierda | IBM Plex Sans Arabic |
Cada etiqueta, botón, encabezado de tabla, leyenda de gráfico, mensaje de formulario y título de página existe en los dos idiomas, y también la interfaz del asistente de IA.
Cómo se elige el idioma
- El idioma es la primera parte de cada dirección:
/en/dashboard/users/all,/ar/dashboard/users/all. - Una dirección sin idioma, como
/, se envía a su página en el último idioma usado, o en inglés la primera vez, y/en sí al panel.src/proxy.tshace esto y recuerda el idioma en una cookie. - El menú de idioma del encabezado, una bandera con su código, cambia el idioma y te mantiene en la misma página.
- El panel envía el idioma con cada petición, así que los mensajes de la API, como un error de inicio de sesión, vuelven en el mismo idioma.
De derecha a izquierda
En /ar, un pequeño script en src/app/layout.tsx define lang="ar" y dir="rtl" en la página antes de dibujarla, así que todo el diseño se refleja desde el primer fotograma: la barra lateral pasa a la derecha, y las tarjetas, tablas y menús se leen de derecha a izquierda.
Los componentes usan clases lógicas de Tailwind que siguen la dirección, como ms-2, pe-4, start-0 y text-start. Cuando añadas código, usa estas en lugar de ml-*, pr-*, left-* o text-left, o la página en árabe se verá mal.
Dónde están los textos
En la carpeta del panel, los textos se dividen por áreas bajo messages/, cada carpeta con un en.json y un ar.json:
| Carpeta | Qué contiene |
|---|---|
messages/layouts/ | La barra lateral, el encabezado, el pie de página y el aviso de datos de ejemplo, que se cargan en todas las páginas |
messages/auth/ | La página de inicio de sesión |
messages/common/ | Palabras y mensajes compartidos |
messages/metadata/ | El título de la pestaña del navegador de cada página |
messages/dashboard/ | Los textos compartidos del panel, con una carpeta por pantalla: overview, users, projects, ui-component y settings con sus propias profile, security, appsettings, adminmanagement y adminroles |
messages/ai-assistant/ | El asistente de IA, su diálogo de claves y las tarjetas que dibuja |
Los mensajes de la API
La API responde en el idioma de la cabecera Accept-Language de la petición, inglés o árabe, y en inglés para cualquier otro. Sus textos están en back-end/src/i18n/translations/en/ y ar/, un archivo por módulo. Los países, los permisos y los ajustes de la aplicación llevan los dos idiomas en la base de datos.
Cambia un texto
- Cambia el valor en el archivo en inglés y el correspondiente en el archivo en árabe. Mantén las mismas claves en ambos.
- Si falta una clave en un archivo, la página de ese idioma muestra su nombre en lugar del texto.
- Las palabras entre llaves, como
{count}, las rellena la aplicación. Déjalas tal cual.
Las etiquetas en árabe del propio panel
Cuando escribas sobre el panel en árabe, usa las etiquetas que muestra:
| Inglés | Árabe |
|---|---|
Sign In | تسجيل الدخول |
Overview | نظرة عامة |
AI Assistant | المساعد الذكي |
Users | المستخدمين |
Projects | المشاريع |
Admin Management | إدارة المسؤولين |
Admin Roles | أدوار المسؤولين |
Settings | الإعدادات |
UI Component | مكونات واجهة المستخدم |
Logout | تسجيل الخروج |
Añade un idioma
Añade su código a las tres listas de idiomas
Añade el código del idioma a
localesensrc/config/i18n.ts, ensrc/proxy.tsy ensrc/app/[locale]/layout.tsx. Para el francés:src/config/i18n.tsexport const locales = ['en', 'ar', 'fr'] as constAñade sus archivos de mensajes
En cada carpeta bajo
messages/que tenga unen.json, cópialo con el nuevo código y traduce los valores. Conserva cada clave y cada palabra entre llaves.Añádelo al menú de idioma
Añádelo a
languagesensrc/components/LanguageSwitcher.tsx, con su código y una bandera decountry-flag-icons, como{ code: "fr", country: "FR" as const, Flag: FR }conFRañadido a la importación de banderas.Define su dirección, si la necesita
Solo el árabe se trata como de derecha a izquierda. Para otro idioma de derecha a izquierda, añade su código a
RTL_LOCALESensrc/app/layout.tsxy amplía las comprobacioneslocale === "ar", empezando porsrc/hooks/locale/useDirection.ts.
Reinicia yarn dev, o construye de nuevo, y el nuevo idioma responde en su propia dirección. La API sigue respondiéndole en inglés hasta que añadas sus propias traducciones en back-end/src/i18n/, donde supportedLocales en i18n.service.ts lista los idiomas que carga.