Magento2 traduce el texto de la plantilla Javascript (KO)

24

Estoy tratando de agregar una traducción para el texto <!-- ko i18n: 'Store credit available' --><!-- /ko -->presente vendor/magento/module-customer-balance/view/frontend/web/template/payment/customer-balance.html, pero si trato de cambiar el texto en mi i18n/en_US.csv, todavía no funciona.

He vaciado el caché y he usado la implementación de contenido estático.

¿Hay una manera diferente de agregar traducciones para plantillas KO?

Atish Goswami
fuente

Respuestas:

39

Así que finalmente pude resolver el problema.

Parece que la traducción de la plantilla JS se lee a partir de la js-translation.jsoncual se genera durante la setup:static-content:deployejecución. Para llenar datos en este archivo , se debe crear un nuevo paquete de idioma para el proyecto.

Entonces, en lugar de agregar el CSV en el nivel de tema como app/design/<area>/<vendor>/<theme-name>/i18n/xx_XX.csvnecesitamos agregarlo en el paquete de idioma.

Para crear un nuevo paquete de idioma primero project document root, necesitaremos crear los siguientes directorios:

mkdir -p app/i18n/<project-name>/<xx_xx>

Importante : UTILICE NOMBRES DE DIRECTORIO en minúsculas SOLO los nombres de carpetas camcelcasados ​​no funcionarán

Luego cambie el directorio a las carpetas recién creadas:

cd app/i18n/<project-name>/<xx_xx>

Ahora puede crear un composer.jsonarchivo (opcional) con el siguiente contenido:

{                                                     
    "name": "<project-name>/<xx_xx>",                             
    "description": "<sample description>", //Ex:English (United States) language
    "version": "<version-number>", //100.0.1                             
    "license": [                                      
        "OSL-3.0",                                    
        "AFL-3.0"                                     
    ],                                                
    "require": {                                      
        "magento/framework": "100.0.*"                
    },                                                
    "type": "magento2-language",                      
    "autoload": {                                     
        "files": [                                    
            "registration.php"                        
        ]                                             
    }                                                 
}                                                     

A continuación, creemos que necesitamos un language.xmlarchivo con los siguientes contenidos:

<language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/Language/package.xsd">
    <code>xx_XX</code> <!-- example: <code>en_US</code> -->
    <vendor><project-name></vendor>
    <package><xx_xx></package> <!-- example: <package>en_us</package> -->
</language>

Después de que registration.phpcontiene el siguiente contenido es necesario:

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::LANGUAGE,
    '<project-name>_<xx_xx>',
    __DIR__
);

Ahora podemos crear nuestro CSV de traducción. Si ya tiene uno dentro de la carpeta de temas app/design/<area>/<vendor>/<theme-name>/i18n/xx_XX.csv, puede moverlo aapp/i18n/<project-name>/<xx_xx>/xx_XX.csv

Ahora desde el project document roottenemos que ejecutar estos comandos:

find pub/static -name js-translation.json -exec rm -rf {} \;

Necesitamos eliminar el js-translation.jsonque ya se ha creado antes de ejecutar elsetup:static-content:deploy

Ahora ejecutamos implementación de contenido estático:

php bin/magento setup:static-content:deploy <xx_XX>

Una vez hecho esto, borramos el caché:

php bin/magento cache:clean
php bin/magento cache:flush

Podemos verificar si los archivos de traducción para la plantilla JS se han generado al encontrar todo el js-translation.jsoninterior de la carpeta pub / static.

find pub/static -name js-translation.json

Esto proporcionará la lista de todos los archivos de traducción generados para las plantillas JS.

Referencia:

  1. Magento DevDocs
  2. Problema relacionado de Github
Atish Goswami
fuente
En mi proyecto, los js-translation.jsonarchivos se crean correctamente a partir de la implementación de contenido estático, incluso si se insertan archivos .csv app/design/frontend/vendor/theme-name/i18n/xx_XX.csv. El único cuidado es eliminar todo js-translation.jsonantes de ejecutar la implementación de contenido estático.
LucScu
¿En qué versión de magento estás?
Atish Goswami
Vender / Theme, entonces, ¿de qué debe ser <project-name> según su código anterior?
Kaushal Suthar
1
¿Es esta realmente la única forma de hacer esto? Quiero decir, incluso la documentación ( devdocs.magento.com/guides/v2.1/frontend-dev-guide/translations/… ) establece que deberíamos poder poner archivos de traducción design/<vender>/<theme>/i18n/xx_XX.csv.
Giel Berkers
1
Magento 2 tiene muchos errores relacionados con esto, para nosotros la mejor manera ha sido crear manualmente un script que cree el js-translation.jsonarchivo y realizar la configuración del servidor web que lo entrega en el tipo correcto de solicitudes
cjohansson
1

Como describí en el problema de Github ( https://github.com/magento/magento2/issues/7525#issuecomment-316690100 ) hay otra solución (más fácil) para ese problema.

Solo necesita asegurarse de implementar cada idioma por separado.

Entonces, en lugar de usar:

php bin/magento setup:static-content:deploy en_US de_DE it_IT fr_FR es_ES

utilizar

php bin/magento setup:static-content:deploy en_US
php bin/magento setup:static-content:deploy de_DE
php bin/magento setup:static-content:deploy it_IT
php bin/magento setup:static-content:deploy fr_FR
php bin/magento setup:static-content:deploy es_ES

Esto probablemente se deba al hecho de que static-content:deploysolo compila los archivos una vez y luego los copia a otros idiomas.

FaHu
fuente