Inteligência Artificial

Traduzir o pt_BR.csv do Magento 2 em lote sem perder a coluna de origem

Rodei o bin/magento i18n:collect-phrases -o var/i18n/pt_BR.csv -m app/code/Roger e vieram duas mil linhas esperando tradução. A regra é uma só: a coluna 1 é a chave e não pode mudar nem um espaço. Mexeu nela, o Magento devolve o inglês na tela.

Por isso eu não abro esse arquivo em planilha. O Excel troca o separador, come aspas e estraga o %1 dos placeholders. Ler com fgetcsv, mexer só na coluna 2 e gravar num arquivo novo, nunca por cima do original.

O script que preserva a coluna de origem

<?php
function grava($out, array $lote): void {
    // sua rotina de tradução, 50 frases por chamada
    $traduzidas = traduzir(array_column($lote, 1));
    foreach ($lote as $i => $linha) {
        $linha[1] = $traduzidas[$i];        // só a coluna 2 muda
        fputcsv($out, $linha, ',', '"', '');
    }
}

$in  = fopen('var/i18n/pt_BR.csv', 'r');
$out = fopen('var/i18n/pt_BR.novo.csv', 'w');
$lote = [];

while (($linha = fgetcsv($in, null, ',', '"', '')) !== false) {
    if (count($linha) < 2) { continue; }
    $lote[] = $linha;
    if (count($lote) === 50) { grava($out, $lote); $lote = []; }
}
if ($lote) { grava($out, $lote); }
fclose($in); fclose($out);

Repare que eu jogo a $linha inteira no fputcsv, não um array novo de dois campos. Com o -m o collect-phrases escreve terceira e quarta coluna com o tipo e o nome do módulo, e remontar a linha na mão faz elas sumirem. O %1 tem que continuar na tradução, na mesma ordem, senão o Magento lança exceção de argumento faltando.

O quinto argumento vazio não é enfeite

Aquele '' no fim do fgetcsv e do fputcsv desliga o caractere de escape. O padrão do PHP é a barra invertida, que não existe no CSV de verdade, e uma frase terminada em barra sai com as aspas desalinhadas. No PHP 8.4 omitir esse argumento já gera deprecated, então passe sempre.

cp var/i18n/pt_BR.novo.csv app/design/frontend/Roger/tema/i18n/pt_BR.csv
bin/magento cache:clean translate
bin/magento setup:static-content:deploy pt_BR -f

CSV dentro do tema o Magento lê direto. Como language pack em app/i18n/Roger/pt_br/, o diretório ainda precisa de composer.json, registration.php e language.xml, senão ele nem abre o arquivo. Frase que continuar em inglês: compare a chave byte a byte com o texto dentro do __() no template, quase sempre é espaço duplo sobrando.

Post Recentes

Comando CLI Magento 2: criar a classe e registrar no di.xml

A classe do comando existe e o bin/magento list ignora ela. Falta o registro no di.xml: aqui vai a classe…

11 horas atrás

Variação não está disponível no WooCommerce: limpar transients e lookup

Produto variável respondendo "Desculpe, este produto não está disponível" mesmo com a variação ativa: limpe os transients do WooCommerce e…

1 dia atrás

WordPress preso no modo de manutenção: apagar o arquivo .maintenance

O site responde 503 com "Momentaneamente indisponível para manutenção programada" depois de um update interrompido. Apague o .maintenance e feche…

2 dias atrás

Preço a partir de no WooCommerce: esconder o intervalo do produto variável

Troque o intervalo R$ 49,00 – R$ 129,00 do produto variável por A partir de R$ 49,00 com o filtro…

3 dias atrás

Massaction Magento 2: ação em massa na grid da sua UI listing

Grid do admin sem checkbox e com o botão Ações vazio? Falta o selectionsColumn e o nó massaction no listing.xml,…

3 dias atrás

Template part não aparece: parts/header.html e o theme.json do tema de blocos

Criou parts/header.html e o Editor de Site não lista a parte? Declare templateParts no theme.json e apague a versão salva…

4 dias atrás