Como saber quais arquivos csv de tradução são usados ​​no arquivo phtml atual

8

Existe um método para saber quais arquivos CSV de tradução são usados ​​no arquivo de modelo phtml atual?

Bizboss
fonte

Respostas:

3

Suponho que você queira dizer traduções $this->__('...')onde nenhum ajudante explícito é usado. Então depende do escopo do módulo do bloco

Isso depende de vários fatores:

  1. A classe de bloco que está sendo usada para renderizar o modelo. Você deve poder determiná-lo a partir dos arquivos XML de layout, mas alguns blocos são criados de forma programática; nesse caso, você terá que pesquisar no código. Se você tiver sorte, a classe de bloco está documentada no próprio modelo, assim:

    /** @var $this Mage_Catalog_Block_Product_List */

    ou assim:

    /** @see Mage_Catalog_Block_Product_List */

    O escopo é o módulo ao qual essa classe pertence (como Mage_Catalog). Mas tenha cuidado com as reescritas de classe. Se a classe de bloco foi reescrita por uma extensão, o escopo muda para essa extensão.

  2. Se a propriedade module_namefoi configurada (por exemplo, via XML de layout), isso tem precedência.
  3. Finalmente, se o bloco substitui o getModuleName()método, o escopo retornado desse método é usado.

Já estamos lá?

Agora que você conhece o escopo, pode procurar o arquivo CSV de acordo, que é o definido neste módulo config.xml. Também pode ser mais de um, mas a convenção geralmente seguida é ter um arquivo por módulo no formulário Module_Name.csv.

  1. Se esse arquivo contiver a sequência a ser traduzida, você a encontrou, exceto se houver uma translate.csvno seu tema, que substitua a tradução para esse escopo exato (como "Module_Name::Foo","Foo":).

  2. Se não estiver nos dois, procure a tradução sem o prefixo do escopo do módulo translate.csv(se existir).

  3. Se não estiver lá, procure em todos os outros arquivos CSV do módulo. O do módulo que é carregado primeiro, vence (ou seja, os módulos principais primeiro e, depois, em ordem alfabética, respeitando as dependências). Observe que esse fallback é usado apenas quando não estiver no modo de desenvolvedor.


Se você quiser ter certeza de que arquivos vem uma tradução específica da página, recomendo a extensão gratuita TranslationHints ( AVISO LEGAL: eu escrevi)

Obtenha aqui: https://github.com/schmengler/TranslationHints

Captura de tela: Dicas de tradução

Fabian Schmengler
fonte
2

A menos que você faça um teste de unidade, você geralmente não se importa com qual tradução csv está sendo usada, porque todas elas são mescladas antes do Magento começar a tradução de qualquer coisa.

No entanto, se você ainda deseja descobrir, primeiro use os arquivos xml de layout para descobrir qual classe de bloco está sendo usada. Se você encontrar a classe de bloco, ela usará o config.xml desse módulo. Se nenhuma classe de bloco for especificada nos layouts, talvez você precise procurar nas classes e controladores de bloco pai.

O principal a saber é que os modelos usam a função de conversão __ da classe de bloco associada e a classe de bloco usa a função __ da classe auxiliar do módulo Data.php.

Jay El-Kaake
fonte
11
"Normalmente, você realmente não se importa com qual tradução csv está sendo usada, porque todas elas são mescladas antes do Magento começar a tradução de qualquer coisa." - A menos que o teste de unidade para um pacote de tradução existente. Meus módulos geralmente falham se faltarem inglês, espanhol ou francês antes de torná-lo a equipe de controle de qualidade.
22416 Luke A. Leber
1

Parece que você deseja se manter organizado ao adicionar suas traduções. Com tantos arquivos CSV para tradução, por que escolher um arquivo aleatório, por que não adicioná-lo ao arquivo CSV correto?

Aqui está um exemplo no qual eu estava trabalhando: Suponha que você esteja editando a página da conta do cliente e alterou o Catálogo de endereços para Meus endereços . Agora não há nenhuma tradução em francês exibida para Meus endereços .

A maneira de encontrar o arquivo CSV correto é procurar uma tradução existente na mesma parte do site. O item Meus Pedidos / Comandos Mes está na mesma parte do site, para que eu possa executar uma pesquisa:

$ cd magento/app/
$ find . -iname '*.csv' | xargs grep -in --color 'Mes Commandes'
./locale/fr_FR/Mage_Sales.csv:73:"Back to My Orders","Retour à mes commandes"
./locale/fr_FR/Mage_Sales.csv:308:"My Orders","Mes commandes"
./locale/fr_FR/Mage_Sales.csv:309:"My Orders - Details","Mes commandes - Détails"
./locale/fr_FR/Mage_Oscommerce.csv:7:"Back to My Orders","Retour à mes commande "
./locale/fr_FR/Mage_Oscommerce.csv:51:"My Previous Orders","Mes commandes précédentes"
./locale/fr_FR/Mage_Customer.csv:215:"My Orders","Mes commandes"

Portanto, analisando isso com um pouco de suposição, o melhor arquivo a ser modificado é locale / fr_FR / Mage_Sales.csv. Após fazer as alterações, não se esqueça de atualizar as Traduções em Sistema> Gerenciamento de cache !

Além: observe as opções que não diferenciam maiúsculas de minúsculas; -inamepara finde -ipara grep. Isso reduz o esforço necessário para a caça. A --coloropção não reflete aqui, mas a saída será muito mais legível em comparação com o que você vê aqui.

Anthony
fonte
0

O método de tradução __ () usado nos modelos está no arquivo /app/code/core/Mage/Core/Block/Abstract.php e leva o nome do módulo para encontrar a tradução correta. Ele cria uma matriz no seguinte formato para ser usado para tradução:

array(1) {
    [0]=> object(Mage_Core_Model_Translate_Expr)#161 (2) {
        ["_text":protected]=> string(18) "Orders and Returns"
        ["_module":protected]=> string(10) "Mage_Sales"
    }
}

Se você deseja ver qual nome de módulo seu modelo está usando, é possível chamar uma função:

 $this->getModuleName();

Deve haver um arquivo de traduções que corresponda a essa sequência. Por exemplo, para mim, na página de exibição de categoria, essa função retornará * Mage_Catalog * e, a partir disso, posso encontrar o arquivo de tradução Mage_Catalog.csv

David Manners
fonte
Qual linha deste grande arquivo Abstract.php?
Vicky Dev