iOS (Swift)
O pacote Swift translate-projects-ios traduz o String Catalog do seu app (Localizable.xcstrings) para cada idioma que você configurar. As traduções são gravadas no mesmo catálogo, então Text("..."), String(localized:) e o Xcode continuam funcionando como sempre. Ele pode ser usado como plugin do Xcode ou pelo terminal, e não tem dependências.
Requisitos
- Xcode 15 ou superior (Swift 5.9 ou superior).
- Um app com String Catalog (
Localizable.xcstrings). - Um projeto e um API token do Translate Projects. Veja Primeiros passos.
1. Adicione o pacote
No Xcode: File → Add Package Dependencies e cole a URL do repositório:
https://github.com/translate-projects/translate-projects-ios

Quando o Xcode perguntar a qual target adicionar o produto, deixe None: o pacote não vai dentro do seu app, ele só fornece o comando para traduzir.

2. Configura
Crie translate-projects.json junto ao seu .xcodeproj (ou Package.swift):
{
"sourceLang": "es",
"targetLangs": ["en", "pt-BR", "fr"],
"file": "MyApp/Localizable.xcstrings",
"tokenFile": ".translate-projects-token"
}
| Opção | Obrigatório | Descrição |
|---|---|---|
sourceLang | Sim | Idioma base do catálogo. Deve ser o idioma padrão do projeto. |
targetLangs | Sim | Idiomas de destino, com os códigos da API (en, pt-BR, zh-Hans). |
file | Não | Caminho do catálogo. Se o projeto tiver um único .xcstrings, ele é encontrado automaticamente. |
tokenFile | Não | Arquivo com o API token (somente o token ou uma linha TRANSLATE_PROJECTS_API_KEY=...). Sem ele, usa-se a variável de ambiente TRANSLATE_PROJECTS_API_KEY. |
Adicione o arquivo de token ao .gitignore: nunca o envie para o repositório.
3. Traduzir
No Xcode: clique com o botão direito no projeto no navegador → TranslateProjects. Na primeira vez, o Xcode pede permissão para gravar no projeto e se conectar à rede.
Pelo terminal ou no CI:
git clone https://github.com/translate-projects/translate-projects-ios
swift run -c release --package-path translate-projects-ios translate-projects-ios --directory .
Se o seu projeto for um pacote Swift:
swift package --allow-writing-to-package-directory --allow-network-connections all translate
Todas as opções também existem como flags: --source es --langs en,pt-BR --file ... --token-file .... Com --force, todos os idiomas são traduzidos novamente.
Arquivos que são gerados
MyApp/
├── Localizable.xcstrings ← As traduções são adicionadas aqui
└── Localizable.translate-projects.json ← cache, faça commit dela
Faça commit dos dois arquivos. Compilar o app nunca chama a API: apenas o comando de traduzir.
O que é respeitado
- Os placeholders (
%@,%lld,%1$@,%.2f,%#@nombre@): se uma tradução perder ou alterar algum deles, ela não é gravada e o app exibe o texto original. - Os plurais, as variações por dispositivo e as substituições. Cada idioma recebe suas próprias categorias de plural (
pt-BR: one, many, other). - Os textos marcados como "Don't translate" e os obsoletos não são enviados. Os comentários são mantidos.
- Textos sem letras (
"","$9.300","%@") não são enviados. - As edições manuais: se você alterar uma tradução no Xcode, ela será mantida nas próximas execuções até que o texto original mude.
--forceas sobrescreve.
Cache
Uma segunda execução sem textos novos faz duas requisições e não traduz nada. Se alguém corrigir uma tradução no painel do Translate Projects, a próxima execução a baixa sem --force; suas edições manuais no arquivo continuam tendo prioridade. Se alguns textos mudarem, somente esses são enviados e somente os idiomas desatualizados são traduzidos. Mais detalhes em Cache e erros.
Erros comuns
- Falta o token (
MISSING_API_KEY: set TRANSLATE_PROJECTS_API_KEY): AdicionetokenFileemtranslate-projects.jsonou exporte a variável. - Vários catálogos (
Several .xcstrings files): indica qual traduzir comfileou--file. sourceLanguagediferente:sourceLangdeve corresponder ao idioma base do catálogo e ao idioma padrão do projeto.- Textos sem tradução (
strings without translation, run again to resume): revisa se o projeto tem o modelo e a chave de IA configurados e execute novamente: só são solicitados os que estão faltando.
🚀 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! ☕