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

Layout XML do Magento 2: remover bloco de módulo de terceiro

Um módulo de terceiro plantou um banner no topo da loja e você não quer desinstalar nada: tire o bloco…

1 hora atrás

Restaurar dump do Magento 2 em outro servidor: trocar a base_url no SQL

Importou o banco de produção e o site pula para o domínio antigo? Rode o UPDATE em core_config_data, limpe o…

23 horas atrás

Criar exceção customizada em PHP: quando estender Exception compensa

Seu catch trata pedido inexistente e banco fora do ar do mesmo jeito. Veja como criar exceção customizada em PHP…

2 dias atrás

DataProvider Magento 2: form do admin abre com campos vazios ao editar

O form do admin salva mas abre em branco na edição: veja o getData() indexado pelo id da entidade e…

3 dias atrás

register_post_meta com show_in_rest: campo personalizado no /wp-json

O meta está no banco mas some do /wp-json/wp/v2/posts. Veja o register_post_meta certo, com single, type, schema de array e…

3 dias atrás

IntlDateFormatter: data por extenso em pt-BR sem array de meses

Escreva 31 de agosto de 2026 em PHP 8.3 sem aquele array com os doze meses, usando IntlDateFormatter com pattern…

4 dias atrás