Ir para o conteúdo

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)

  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.