API v1

Internacionalização (i18n)

Os dois apps suportam Português (pt-BR) como idioma fonte e Espanhol (es) como tradução. O iOS já migrou para o String Catalog moderno; o Android está com a maior parte traduzida e segue em andamento.

iOS · chaves
250
iOS · ES
~98%
Android · PT-BR
1028
Android · ES
~91%

Status por plataforma

PlataformaMecanismoIdiomasStatus
iOSLocalizable.xcstrings (String Catalog)pt-BR (fonte) · esFeito — 250 chaves, es ≈ 98% (244/250)
Androidres/values*/strings.xmlpt-BR (default) · esEm andamento — es ≈ 91% (935/1028) + literais a migrar

Arquivos

iOS:
  AppMonisatIos/Localizable.xcstrings      ← String Catalog (pt-BR fonte + es)
  AppMonisatIos/Base.lproj/                ← storyboards/XIBs base
  project.pbxproj: knownRegions = (en, Base, pt-BR, es); developmentRegion = pt-BR

Android:
  res/values/strings.xml        ← pt-BR (default) — 1028 strings + 24 plurals
  res/values-es/strings.xml     ← es — 935 strings + 24 plurals (em andamento)
iOS — String Catalog: o projeto deixou os antigos Localizable.strings (um por .lproj) e usa um único Localizable.xcstrings (JSON, Xcode 15+). O Xcode extrai automaticamente as chaves de String(localized:) / NSLocalizedString e marca cada tradução como new / needs review / translated. As chaves sem tradução em es caem no texto fonte pt-BR.

Como referenciar strings

PlataformaNo códigoEm layout / UI declarativa
iOSString(localized: "chave") / NSLocalizedString("chave", comment:)Storyboards/XIBs no Base.lproj, traduzidos via catálogo
AndroidgetString(R.string.chave)android:text="@string/chave" — nunca literal

Formatação posicional (importante)

Em ES a ordem das palavras muda; argumentos posicionais evitam que os valores troquem de lugar na tradução.

<!-- Android ❌ Problemático -->
<string name="msg">Rota %s excede %s km</string>

<!-- Android ✓ Correto -->
<string name="msg">Rota %1$s excede %2$.1f km</string>
// iOS ✓ — placeholders posicionais no catálogo
String(format: String(localized: "Rota %1$@ excede %2$.1f km"), placa, km)
Regra: toda string com mais de um argumento usa índices posicionais (%1$s/%2$s no Android, %1$@/%2$@ no iOS). Nunca %s %s simples — em ES pode inverter a ordem.

Pendências Android (em andamento)

  • Completar values-es/strings.xml — faltam ~93 strings vs o PT-BR (1028).
  • Migrar literais hardcoded em layouts (android:text="...") para @string/*. Textos de preview devem usar tools:text, não android:text.
  • Garantir formatação posicional em todas as mensagens com múltiplos argumentos.