Manuales de desarrollo de YeboYebo
En cada proyecto podemos decidir qué idiomas estarán disponibles. Indicaremos esto en la clave languages del fichero project.js
export default {
path: 'projects/mi-proyecto',
dependencies: [
core,
login,
...
],
languages: {
es: { nativeName: 'Español' },
ca: { nativeName: 'Català' },
en: { nativeName: 'English' }
},
...
}
Si en nuestro proyecto hemos establecido una clave languages con más de un lenguaje asociado, en el componente Header por defecto aparecerá un control de selección de idioma.
TO DO: Componentizar el selector para poder sobrecargar el estilo y ponerlo en otra posición.
Para cada extensión, incluiremos los ficheros de traducciones en el fichero index.js de la carpeta static/translations de cada extensión. Su estructura es la siguiente:
import ca from './translations.ca.json'
import es from './translations.es.json'
// resto de idiomas
const t = {
es,
ca,
// ...resto de idiomas
}
export { t as translations }
Y en la carpeta static/translations crearemos un fichero translations.xx.json por idioma, donde xx es el código del idioma:
{
"translation": {
"itemCatalogo": {
"medidas": "MESURES (MAX )",
"comprar": "Afegir"
},
"description": {
"part1": "Edita <1>src/App.js</1> y guarda para recargar.",
"part2": "Aprende React"
}
}
}
Una vez creada la carpeta translations, debemos incluirla en el index.ts de la extensión.
import { translations } from './static/translations'
//...
export default {
//...
translations
}
import { useTranslation, Trans } from 'react-i18next';
function Componente({ ..props }) {
const { t } = useTranslation()
return (
<Typography variant='h7'>{t('itemCatalogo.medidas', { maxMedida: 10 })}</Typography>
<Trans i18nKey='description.part1'>
Edit <code>src/App.js</code> and save to reload.
</Trans>
)
}
Más información sobre el componente Trans aquí.
import { util } from 'quimera'
const t = util.translate
Esta función es la misma que la que obtenemos con useTranslation.
Las etiquetas de estos campos se traducen automáticamente si en el fichero de traducciones hay una clave schemas.[schema].[campo].
export default (parent) => ({
...parent,
catalogo:
Schema('to_articulos', 'codplanta')
.fields({
descripcion: Field.Text('descripcion', '[valor si no hay traducción]'),
// ...
}),
// ...
})
{
"translation": {
"schemas": {
"catalogo": {
"descripcion": "Description"
}
}
}
}
Reproduciremos la estructura del menú en cada fichero de taducciones en la clave appmenu, usando las claves title e items para el nombre de grupo y sus opciones.
Definición del menú (appmenu.js):
export default parent => ({
...parent,
catalogo: {
title: 'Catálogo!', // Valor en caso de que no haya traducción
items: {
tienda: {
title: 'Tienda!', // Valor en caso de que no haya traducción
icons: ['shopping_cart', null],
color: 'primary',
variant: 'main',
url: '/catalogo'
},
},
},
})
Fichero de traducciones (translations.es.json):
"translation": {
"appmenu": {
"catalogo": {
"title": "Catálogo",
"items": {
"tienda": "Tienda"
}
}
},
// ...
}
Tanto en el esquema como en las definiciones externas de las opciones, sustituiremos la clave value por la traduccion correspondiente.
Esquemas
export default (parent) => ({
...parent,
catalogo:
Schema('to_articulos', 'codplanta')
.fields({
// ...
exposicionSolar: Field.Options('vb_exposicionsolar').options([
{ key: 1, value: 'schemas.catalogo.exposicionSolar_sol' },
{ key: 2, value: 'schemas.catalogo.exposicionSolar_solsombra' },
{ key: 3, value: 'schemas.catalogo.exposicionSolar_sombra' }
]),
}),
// ...
})
{
"translation": {
"schemas": {
"catalogo": {
"exposicionSolar": "Exposición solar",
"exposicionSolar_sol": "SOL",
"exposicionSolar_solsombra": "SOL/SOMBRA",
"exposicionSolar_sombra": "SOMBRA"
}
}
}
}
El componente incluirá la traducción automática de los textos que reciba como propiedades.
function FiltroDisponibles({ id, label, ...props }) {
// ...
return (
<Field.CheckBox
// ...
label={util.translate(label)}
{...props}
/>
)
}
Para los textos fijos de los componentes (etiquetas de botones, etc.),el componente usará util.translate y colocaremos sus traducciones en la carpeta libs/comps/static/translations.