Magento2 traduzindo texto do modelo Javascript (KO)

24

Estou tentando adicionar uma tradução para o texto <!-- ko i18n: 'Store credit available' --><!-- /ko -->presente vendor/magento/module-customer-balance/view/frontend/web/template/payment/customer-balance.html, mas se eu tentar alterar o texto no meu i18n/en_US.csv, ainda não está funcionando.

Limpei o cache e usei a implantação de conteúdo estático.

Existe uma maneira diferente de adicionar traduções para modelos de KO?

Atish Goswami
fonte

Respostas:

39

Então, finalmente consegui descobrir o problema.

Parece que a tradução do modelo JS é lida a partir da js-translation.jsonqual é gerada durante a setup:static-content:deployexecução. Para preencher os dados nesse arquivo, um novo pacote de idiomas deve ser criado para o projeto.

Então, em vez de adicionar o CSV no nível do tema, como app/design/<area>/<vendor>/<theme-name>/i18n/xx_XX.csvprecisamos adicioná-lo ao pacote de idiomas.

Para criar um novo pacote de idiomas primeiro project document root, precisaremos criar os seguintes diretórios:

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

Importante : USAR APENAS NOMES DIRECTÓRIOS NOMES Os nomes de pasta com camelcas não funcionarão

Em seguida, altere o diretório para as pastas recém-criadas:

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

Agora você pode criar um composer.jsonarquivo (opcional) com o seguinte conteúdo:

{                                                     
    "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"                        
        ]                                             
    }                                                 
}                                                     

Em seguida, crie um language.xmlarquivo com o seguinte conteúdo:

<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>

Depois de registration.phpconter o seguinte conteúdo, é necessário:

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

Agora podemos criar um CSV para nossa tradução. Se você já tem um dentro da pasta do tema, algo como app/design/<area>/<vendor>/<theme-name>/i18n/xx_XX.csvvocê pode movê-lo paraapp/i18n/<project-name>/<xx_xx>/xx_XX.csv

Agora, a partir do project document rootprecisamos executar estes comandos:

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

Precisamos excluir o js-translation.jsonque já foi criado antes de executar osetup:static-content:deploy

Agora, executamos a implantação de conteúdo estático:

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

Feito isso, limpamos o cache:

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

Podemos verificar se os arquivos de tradução para o modelo JS foram gerados localizando toda a js-translation.jsonpasta pub / static.

find pub/static -name js-translation.json

Isso fornecerá a lista de todos os arquivos de conversão gerados para modelos JS.

Referência:

  1. Magento DevDocs
  2. Problema relacionado ao Github
Atish Goswami
fonte
No meu projeto, os js-translation.jsonarquivos são criados corretamente a partir da implantação de conteúdo estático, mesmo que os arquivos .csv sejam inseridos app/design/frontend/vendor/theme-name/i18n/xx_XX.csv. O único cuidado é excluir tudo js-translation.jsonantes de executar a implantação do conteúdo estático.
precisa saber é o seguinte
Em qual versão do magento você está?
Atish Goswami
Vender / Tema, para isso, o que deve ser <project-name> conforme o código acima?
Kaushal Suthar
11
Esta é realmente a única maneira de fazer isso? Quero dizer, até a documentação ( devdocs.magento.com/guides/v2.1/frontend-dev-guide/translations/… ) afirma que devemos poder colocar os arquivos de tradução design/<vender>/<theme>/i18n/xx_XX.csv.
precisa saber é o seguinte
11
Magento 2 tem um monte de bugs relacionados a isso, para nós a melhor maneira tem sido a de criar manualmente um script que cria a js-translation.jsonconfiguração do servidor web arquivo e fazer essa entrega-lo sobre os tipos certos de pedidos
cjohansson
1

Como descrevi na edição do Github ( https://github.com/magento/magento2/issues/7525#issuecomment-316690100 ), há outra solução (mais fácil) para esse problema.

Você só precisa implantar todos os idiomas separadamente.

Então, ao invés de usar:

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

usar

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

Provavelmente, isso é causado pelo fato de o static-content:deployúnico compilar os arquivos uma vez e depois copiá-los para outros idiomas.

FaHu
fonte