Laravel
O pacote neiderruiz/translate-projects-laravel extrai os textos de __(), trans() e @lang() para lang/<idioma base>.json, os traduz e grava lang/en.json, lang/pt_BR.json, etc., que o Laravel usa diretamente.
Requisitos
- PHP 8.1 ou superior e Laravel 10, 11, 12 ou 13.
- Um projeto e um API token do Translate Projects. Veja Primeiros passos.
1. Instale o pacote
composer require neiderruiz/translate-projects-laravel
php artisan vendor:publish --tag=translate-config # Opcional
2. Configure o .env
TRANSLATE_PROJECTS_API_KEY=tu_token
APP_LOCALE=es
TRANSLATE_PROJECTS_TARGET_LANGUAGES=en,pt-BR,fr
Chave em config/translate-projects.php | Variável de ambiente | Padrão |
|---|---|---|
api_key | TRANSLATE_PROJECTS_API_KEY | — |
api_url | TRANSLATE_PROJECTS_API_URL | https://api.translateprojects.dev |
default_locale | TRANSLATE_PROJECTS_DEFAULT_LOCALE ou APP_LOCALE | en |
target_languages | TRANSLATE_PROJECTS_TARGET_LANGUAGES (separados por vírgulas) | es,fr,de,it |
scan_paths | — | app, resources, routes |
default_locale deve corresponder ao idioma padrão do projeto no Translate Projects. Os códigos podem ser escritos como pt-BR, pt_BR ou pt-br: o pacote usa pt-BR com a API e pt_BR no nome do arquivo, como o Laravel espera. Se você usar php artisan config:cache, execute php artisan config:clear depois de alterar o .env.
3. Marque seus textos
Route::get('/', fn () => __('Bienvenido a mi aplicación'));
<h1>{{ __('Hola mundo') }}</h1>
<p>{{ __('Bienvenido, :name', ['name' => $user->name]) }}</p>
<p>@lang('Este texto también se traduce')</p>
4. Extraia e traduza
php artisan translate:scan # Extraia os textos para lang/es.json
php artisan translate # Traduza para todos os idiomas de destino
php artisan translate pt-BR # Apenas um idioma
php artisan translate --force # Traduza mesmo sem alterações
translate:scanprocura__('...'),trans('...'),trans_choice('...')e@lang('...')com um texto literal. Adiciona os textos novos alang/<idioma base>.jsone mantém os que já existiam. Ignora as chaves de grupo (comoauth.failed) e as de pacotes (pacote::arquivo.chave).translateenvia os textos somente se mudaram, aguarda o backend e gravalang/<idioma>.json. Mantém as entradas que já existiam nesse arquivo, por exemplo traduções feitas manualmente.
Arquivos que são gerados
lang/
├── es.json ← idioma base (gerado pelo translate:scan)
├── en.json
├── pt_BR.json
├── fr.json
└── .translate-projects.json ← cache
Cache e --force
Em lang/.translate-projects.json fica registrada a versão de cada idioma: uma segunda execução sem alterações faz uma única requisição e não traduz nada. Use --force para traduzir novamente mesmo sem alterações. Mais detalhes em Cache e erros.
Erros comuns
O comando nunca deixa um arquivo pela metade nem o apaga.
- Falta
TRANSLATE_PROJECTS_API_KEY: falha sem fazer requisições. Se você usarconfig:cache, executeconfig:clear. Não foi encontrado ou não é válido lang/es.json: você ainda não extraiu os textos: executephp artisan translate:scan.O idioma de origem não é o padrãoouO idioma de destino não está ativo no seu projeto: verifique o idioma padrão do projeto ou ative esse idioma no painel.- Token inválido ou erro 4xx: mostra o código e a mensagem da API e não altera os arquivos.
- Erro 429, 5xx ou de rede: tenta novamente 3 vezes; se continuar falhando, mantém esse idioma como estava e segue com os demais.
- Falta a key de IA (
MISSING_API_KEY): grava o que chegou, avisa quantos textos faltam e os tenta novamente na próxima execução. - Placeholders: se a IA alterar um
:placeholder, essa tradução é descartada e o Laravel mostra o texto original.
Limitações
- Somente os arquivos JSON são traduzidos (textos usados como chave). Os arquivos de grupo
lang/<idioma>/*.phpnão são enviados. - Chaves dinâmicas como
__($variable)não são detectadas.
🚀 Automatize suas traduções de graça
Translate Projects é gratuito. Você cria seu projeto, conecta a chave do seu provedor de IA e paga apenas a ele pelo que gastar.
- Sem planos nem cartão de crédito: Todos os recursos estão disponíveis desde o primeiro dia.
- Use sua própria IA: Claude, OpenAI, DeepSeek ou Gemini. Sua chave é armazenada criptografada.
- Rede de traduções compartilhada: Se um texto já foi traduzido, você o recebe instantaneamente sem gastar sua chave.
- Painel de administração: Revise e edite todas as suas traduções em um único lugar.
Estamos aqui para ajudar você
Se você tiver alguma dúvida, precisar de ajuda ou quiser contribuir, não hesite em entrar em contato comigo. Estou à sua disposição para apoiá-lo no que precisar.
- Site: neiderruiz.com
- GitHub: @neiderruiz
- Twitter: @neiderruiz
- YouTube: Neider Ruiz
Apoie o Projeto
Se este projeto foi útil para você, convido você a me pagar um café. Seu apoio me ajuda a continuar melhorando e criando conteúdo de valor. Obrigado por estar aqui! ☕