Guia de Localização (i18n)
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.
| Camada | Onde ficam as traduções | Formato |
|---|---|---|
| Engine | pawnpro-engine/src/messages/langs/<code>.rs |
Tabela match por MsgKey (Rust) |
| Extensão — manifesto | pawnpro/package.nls.<code>.json (raiz, exigência do editor) |
NLS por chave (%id% no package.json) |
| Extensão — runtime | pawnpro/l10n/bundle.l10n.<code>.json |
API 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.
| # | Idioma | Código | Engine | Extensão |
|---|---|---|---|---|
| 1 | Inglês | en |
✅ | 🟡 / 🟡 |
| 2 | Português (BR) | pt-BR |
✅ | ✅ / ✅ |
| 3 | Espanhol | es |
🟡 | 🟡 / 🟡 |
| 4 | Russo | ru |
🟡 | 🟡 / 🟡 |
| 5 | Romeno | ro |
🟡 | 🟡 / 🟡 |
| 6 | Alemão | de |
⬜ | ⬜ / ⬜ |
| 7 | Francês | fr |
⬜ | ⬜ / ⬜ |
| 8 | Italiano | it |
⬜ | ⬜ / ⬜ |
| 9 | Polonês | pl |
⬜ | ⬜ / ⬜ |
| 10 | Turco | tr |
⬜ | ⬜ / ⬜ |
| 11 | Holandês | nl |
⬜ | ⬜ / ⬜ |
| 12 | Ucraniano | uk |
⬜ | ⬜ / ⬜ |
| 13 | Chinês (Simpl.) | zh-CN |
⬜ | ⬜ / ⬜ |
| 14 | Chinês (Trad.) | zh-TW |
⬜ | ⬜ / ⬜ |
| 15 | Indonésio | id |
⬜ | ⬜ / ⬜ |
| 16 | Árabe | ar |
⬜ | ⬜ / ⬜ |
| 17 | Português (PT) | pt-PT |
⬜ | ⬜ / ⬜ |
| 18 | Húngaro | hu |
⬜ | ⬜ / ⬜ |
| 19 | Tcheco | cs |
⬜ | ⬜ / ⬜ |
| 20 | Sérvio | sr |
⬜ | ⬜ / ⬜ |
| 21 | Búlgaro | bg |
⬜ | ⬜ / ⬜ |
| 22 | Grego | el |
⬜ | ⬜ / ⬜ |
| 23 | Sueco | sv |
⬜ | ⬜ / ⬜ |
| 24 | Lituano | lt |
⬜ | ⬜ / ⬜ |
| 25 | Croata | hr |
⬜ | ⬜ / ⬜ |
| 26 | Eslovaco | sk |
⬜ | ⬜ / ⬜ |
| 27 | Hebraico | he |
⬜ | ⬜ / ⬜ |
| 28 | Tailandês | th |
⬜ | ⬜ / ⬜ |
| 29 | Vietnamita | vi |
⬜ | ⬜ / ⬜ |
| 30 | Persa | fa |
⬜ | ⬜ / ⬜ |
| 31 | Japonês | ja |
⬜ | ⬜ / ⬜ |
| 32 | Coreano | ko |
⬜ | ⬜ / ⬜ |
| 33 | Finlandês | fi |
⬜ | ⬜ / ⬜ |
| 34 | Dinamarquês | da |
⬜ | ⬜ / ⬜ |
| 35 | Norueguês | nb |
⬜ | ⬜ / ⬜ |
| 36 | Hindi | hi |
⬜ | ⬜ / ⬜ |
| 37 | Bengali | bn |
⬜ | ⬜ / ⬜ |
| 38 | Filipino | fil |
⬜ | ⬜ / ⬜ |
| 39 | Malaio | ms |
⬜ | ⬜ / ⬜ |
| 40 | Letão | lv |
⬜ | ⬜ / ⬜ |
| 41 | Estoniano | et |
⬜ | ⬜ / ⬜ |
| 42 | Esloveno | sl |
⬜ | ⬜ / ⬜ |
| 43 | Bielorrusso | be |
⬜ | ⬜ / ⬜ |
| 44 | Macedônio | mk |
⬜ | ⬜ / ⬜ |
| 45 | Albanês | sq |
⬜ | ⬜ / ⬜ |
| 46 | Bósnio | bs |
⬜ | ⬜ / ⬜ |
| 47 | Catalão | ca |
⬜ | ⬜ / ⬜ |
| 48 | Azerbaijano | az |
⬜ | ⬜ / ⬜ |
| 49 | Cazaque | kk |
⬜ | ⬜ / ⬜ |
| 50 | Georgiano | ka |
⬜ | ⬜ / ⬜ |
Como adicionar um idioma
Engine (pawnpro-engine)
- Copie
src/messages/langs/en.rsparasrc/messages/langs/<code>.rs. - Registre o módulo em
src/messages/langs/mod.rs(pub mod <code>;). - Em
src/messages/mod.rs: adicione a variante ao enumLocale, o ramo noLocale::from_str(casado pelo prefixo da tag) e o ramo emmsg(). - Traduza cada
MsgKey::… => "…", mantendo os marcadores{}e{n}na mesma posição lógica. 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-RUresolve pararu); 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):
- Copie
package.nls.en.jsonparapackage.nls.<code>.jsone 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):
- Copie
l10n/bundle.l10n.jsonparal10n/bundle.l10n.<code>.jsone traduza os valores (a chave é o texto-fonte PT-BR e não deve mudar). Mantenha os marcadores{0},{1}intactos. - Strings novas no código (
src/editor/nls.ts) usaml10n.t('texto', ...args); regenere o bundle-base comnpx @vscode/l10n-dev export --outDir ./l10n ./src. - 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.