Ir para o conteúdo

Guia de Localização (i18n)

Roadmap de idiomas do PawnPro. As traduções ficam em camadas independentes — elas compartilham a mesma lista-alvo de idiomas, mas evoluem separadamente, então um idioma pode já existir numa e ainda não noutra.

Camada Onde ficam as traduções Formato
Engine pawnpro-core/crates/engine/src/messages/langs/<code>.rs Tabela match por MsgKey (Rust)
Depurador pawnpro-core/crates/debugger/protocol/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.

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 Depurador 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-core/crates/engine)

Caminhos relativos a crates/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_tag (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 -p pawnpro-engine && cargo clippy -p pawnpro-engine --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.

Depurador (pawnpro-core/crates/debugger/protocol)

Mesma estrutura da engine, em crates/debugger/protocol/src/messages/: copie langs/en.rs, registre em langs/mod.rs, adicione a variante a Locale, o ramo em Locale::from_tag e em msg(). As mensagens aparecem no console de depuração e são usadas tanto pelo adaptador quanto pelo plugin do servidor.

cargo test -p pawnpro-dbg-protocol

Engine e depurador recebem o idioma da mesma chave de configuração, locale.

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 entram em src/editor/nls.ts como t('texto em PT', ...args). O mesmo texto vira chave em todos os l10n/bundle.l10n*.json — o bundle-base também, com o próprio texto como valor. A verificação de chaves órfãs e faltantes está em Fluxos do servidor e do depurador.
  3. Empacote e verifique. A UI segue duas fontes de idioma independentes: as páginas WebView (Configurações, Ajuda, O que há de novo) usam a config ui.locale — traduzidas a partir de l10n/ por createWebviewMsg (webviewNls.ts), que reusa o createMsg do nls.ts, já que o vscode.l10n não permite trocar o idioma da extensão em runtime; o restante (notificações, menus, status bar) segue o idioma do editor (env.language) via o vscode.l10n nativo. Teste ambos os caminhos.

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.