Guia de Localização (i18n)

June 20, 2026 · View on GitHub

Roadmap de idiomas do PawnPro. O projeto tem duas camadas de tradução independentes — elas compartilham a mesma lista-alvo de idiomas, mas evoluem separadamente, então um idioma pode já existir num lado e ainda não no outro.

CamadaOnde ficam as traduçõesFormato
Enginepawnpro-engine/src/messages/langs/<code>.rsTabela match por MsgKey (Rust)
Extensão — manifestopawnpro/package.nls.<code>.json (raiz, exigência do editor)NLS por chave (%id% no package.json)
Extensão — runtimepawnpro/l10n/bundle.l10n.<code>.jsonAPI nativa vscode.l10n (chave = texto-fonte)

A extensão tem duas sub-camadas: o manifesto (nomes de comandos e descrições de settings, que o editor lê do package.json antes da extensão rodar — por isso os package.nls.* têm de ficar na raiz) e o runtime (as mensagens em tempo de execução, em l10n/, fora da raiz). O idioma-fonte do runtime é PT-BR: sem bundle, as mensagens aparecem em português.

Legenda de status: ✅ completo · 🟡 esqueleto/placeholder (compila, mas texto ainda no idioma-fonte) · ⬜ ausente. Na coluna Extensão, a ordem é manifesto/runtime.

A meta de cobertura é de pelo menos 50 idiomas. A ordem da tabela prioriza a relevância histórica do idioma na comunidade SA-MP / open.mp.

Status

A coluna Extensão mostra manifesto/runtime.

#IdiomaCódigoEngineExtensão
1Inglêsen🟡 / 🟡
2Português (BR)pt-BR✅ / ✅
3Espanholes🟡🟡 / 🟡
4Russoru🟡🟡 / 🟡
5Romenoro🟡🟡 / 🟡
6Alemãode⬜ / ⬜
7Francêsfr⬜ / ⬜
8Italianoit⬜ / ⬜
9Polonêspl⬜ / ⬜
10Turcotr⬜ / ⬜
11Holandêsnl⬜ / ⬜
12Ucranianouk⬜ / ⬜
13Chinês (Simpl.)zh-CN⬜ / ⬜
14Chinês (Trad.)zh-TW⬜ / ⬜
15Indonésioid⬜ / ⬜
16Árabear⬜ / ⬜
17Português (PT)pt-PT⬜ / ⬜
18Húngarohu⬜ / ⬜
19Tchecocs⬜ / ⬜
20Sérviosr⬜ / ⬜
21Búlgarobg⬜ / ⬜
22Gregoel⬜ / ⬜
23Suecosv⬜ / ⬜
24Lituanolt⬜ / ⬜
25Croatahr⬜ / ⬜
26Eslovacosk⬜ / ⬜
27Hebraicohe⬜ / ⬜
28Tailandêsth⬜ / ⬜
29Vietnamitavi⬜ / ⬜
30Persafa⬜ / ⬜
31Japonêsja⬜ / ⬜
32Coreanoko⬜ / ⬜
33Finlandêsfi⬜ / ⬜
34Dinamarquêsda⬜ / ⬜
35Norueguêsnb⬜ / ⬜
36Hindihi⬜ / ⬜
37Bengalibn⬜ / ⬜
38Filipinofil⬜ / ⬜
39Malaioms⬜ / ⬜
40Letãolv⬜ / ⬜
41Estonianoet⬜ / ⬜
42Eslovenosl⬜ / ⬜
43Bielorrussobe⬜ / ⬜
44Macedôniomk⬜ / ⬜
45Albanêssq⬜ / ⬜
46Bósniobs⬜ / ⬜
47Catalãoca⬜ / ⬜
48Azerbaijanoaz⬜ / ⬜
49Cazaquekk⬜ / ⬜
50Georgianoka⬜ / ⬜

Como adicionar um idioma

Engine (pawnpro-engine)

  1. Copie src/messages/langs/en.rs para src/messages/langs/<code>.rs.
  2. Registre o módulo em src/messages/langs/mod.rs (pub mod <code>;).
  3. Em src/messages/mod.rs: adicione a variante ao enum Locale, o ramo no Locale::from_str (casado pelo prefixo da tag) e o ramo em msg().
  4. Traduza cada MsgKey::… => "…", mantendo os marcadores {} e {n} na mesma posição lógica.
  5. cargo test && cargo clippy --all-targets -- -W clippy::pedantic -D warnings.

A engine aceita qualquer tag começando com o prefixo do idioma (ex.: ru-RU resolve para ru); tags desconhecidas caem em inglês.

Extensão (pawnpro)

São duas sub-camadas independentes — traduza ambas para cobertura total.

Manifesto (comandos e settings do package.json):

  1. Copie package.nls.en.json para package.nls.<code>.json e traduza os valores. Estes arquivos têm de ficar na raiz (o editor os lê antes da extensão rodar).

Runtime (mensagens em tempo de execução, via vscode.l10n):

  1. Copie l10n/bundle.l10n.json para l10n/bundle.l10n.<code>.json e traduza os valores (a chave é o texto-fonte PT-BR e não deve mudar). Mantenha os marcadores {0}, {1} intactos.
  2. Strings novas no código (src/editor/nls.ts) usam l10n.t('texto', ...args); regenere o bundle-base com npx @vscode/l10n-dev export --outDir ./l10n ./src.
  3. Empacote e verifique a UI no idioma do editor (env.language).

Convenção de código de idioma

Use a tag BCP-47 mais curta que identifique o idioma (es, ru, de), e só acrescente a região quando ela for significativa (pt-BR vs pt-PT, zh-CN vs zh-TW). Mantenha o mesmo código nas duas camadas.