Magento2: como substituir traduções no pacote de idiomas?

9

Eu instalei o pacote de idiomas app/i18n/magento2translations/language_nl_nl/com o arquivo nl_NL.csv . Funciona perfeitamente.
Além disso, adicionei um arquivo de tema personalizado app/design/frontend/COMPANY/PROJECT/i18n/nl_NL.csvcom minhas traduções personalizadas, mas ele não está funcionando (modo: desenvolvedor, conteúdo estático e caches foram limpos).
Quando movo as traduções personalizadas para as traduções personalizadas nl_NL.csv do pacote de idiomas, funciona bem.
Eu acho que o pacote de idiomas tem mais prioridade como um tema personalizado que o i18n traduz .
Como substituir traduz no pacote de idiomas da maneira correta?

goral
fonte
Tente mudar o modo para o padrão ou produção e verifique novamente.
Self Diagnostics
tente rm -rf pub/static/*, rm -rf var/cache/*da pasta raiz m2.
belfort1
Eu escrevi na pergunta (modo: desenvolvedor, conteúdo estático e caches foram limpos) + o armazenamento local é traduzido em json. Também foi limpo. Sem efeito.
goral

Respostas:

11


[ATUALIZAÇÃO] Desde que a ordem de carregamento da tradução do Magento 2.2 é a seguinte:

  1. Carregando as traduções do módulo.
  2. Carregar informações do pacote de tradução.
  3. Carregue o arquivo de tradução do tema.
  4. Carregar tradução do banco de dados. (Tradução interna)

Isso basicamente significa que o pacote de tradução substituirá a tradução de temas. Uma solução tão rápida e fácil seria superada usando a tradução Inline, o que também foi possível no M1. Mas agora temos o M2, que tem ainda mais flexibilidade a bordo e existe uma maneira de estender os pacotes de tradução existentes com os personalizados. Tudo que você precisa fazer é criar outro pacote de tradução. Então, crie um módulo

Projeto \ Localidade

crie um registration.php para ele com o seguinte conteúdo:

\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::LANGUAGE,
'project_nl_nl',
__DIR__
);

É assim que definimos esse módulo como um pacote de tradução. Última etapa, crie um meta-arquivo language.xml com o seguinte conteúdo:

<language ...>
  <code>nl_NL</code>
  <vendor>project</vendor>
  <package>nl_nl</package>
  <sort_order>10</sort_order>
  <use vendor="language" package="nl_nl" />
</language>

Dessa forma, você especifica o pacote de tradução pai que deseja estender. E também especifique a ordem, caso você já tenha herança de pacote de tradução no projeto. Aqui está um link no exemplo do próprio magento .

Mais uma coisa. Verifique se o seu <vendor> . '_' . <code>(do idioma.xml ) corresponderá ao nome do módulo de registration.php. project_nl_nlno meu exemplo

Sergey
fonte
Parece ótimo - mas onde exatamente eu substituo a tradução? Ainda outro nl_NL.csvdentro desse módulo?
Fritzmg 15/08/19
1
@fritzmg sim, formato de arquivo tranlsation / nome é exatamente o mesmo
Sergey
1
thx, pensava assim. No entanto, ainda não consigo fazê-lo funcionar, embora eu tenha aberto uma pergunta separada para isso: magento.stackexchange.com/questions/238459/…
fritzmg 15/18
1
Apenas para outros leitores, essa resposta não é mais válida. Há muito tempo, o Magento mudou esse comportamento: github.com/magento/magento2/blob/2.3-develop/lib/internal/… O pedido atual é: 1) Tradução do módulo (app / code / [Vendor_Name] / i18n) 2) Tradução do pacote de idiomas (app / i18n) 3) Tradução do tema (app / design / [theme] / i18n) 4) Tradução do banco de dados (em linha)
Manuel García Solipa
@ ManuelGarcíaSolipa sim, você está certo, eles mudaram no 2.2. Atualizado o post
Sergey
4

Eu tive o mesmo problema e encontrei a solução. \ Magento \ Framework \ Translate primeiro carrega traduções de temas e depois carrega traduções de pacotes. Você deve criar um plug-in para esta classe no método loadData e corrigir a ordem de carregamento.

Daniel Sloof
fonte
Boa ideia. Como você criou um plugin? Só consegui criar uma preferência porque todos os outros métodos necessários estavam protegidos. Eu estaria interessado em uma solução semelhante a plug-in.
simonthesorcerer
2

Não sei se é porque agora é 2019 ou se a resposta de Sergey teve um erro desde o início, mas a ordem de carregamento real no fornecedor de arquivos / magento / framework / Translate.php é esta:

$this->_loadModuleTranslation();
$this->_loadPackTranslation();
$this->_loadThemeTranslation();
$this->_loadDbTranslation();

O que é carregado mais tarde substitui as traduções anteriores.

Portanto, mesmo que a resposta de Daniel Sloof funcione, você pode simplesmente adicionar sua tradução ao tema e ela terá maior prioridade do que um pacote de idiomas.

TheKitMurkit
fonte
1

Se o conteúdo estático estiver limpo, o cache e a conversão no tema de armazenamento local CSV funcionam, mas não por algumas palavras. Portanto, o pacote lang substituído pelo tema personalizado é traduzido, mas não para todas as frases.

goral
fonte
0

O Magento está carregando informações de tradução na seguinte ordem

Carregando as traduções do módulo. Carregar arquivo de tradução do tema Carregar informações do pacote de tradução. Carregar db de tradução. (Tradução interna)

Tenho tradução diferente no pacote de_de no módulo, tema e outro pacote (vendor / {name} / language-de_de). Vi que a tradução sempre partiu do tema. Limpar pub / static e cache (com cache no Chrome). Quais são as prioridades de conversão de carga real?

Flamboyant
fonte