Idiomas: a linguagem fala o seu
Mensagens em português, inglês e espanhol — e um catálogo de fora entra sem tocar no núcleo. O que não está traduzido sai em inglês, de propósito.
O erro que você lê é metade da linguagem. DF_IDIOMA escolhe em qual língua ele sai, e a lista não é fechada: um catálogo é um arquivo, e uma pasta apontada por DF_IDIOMA_CAMINHO entra no registro como os de dentro.
Os três que vêm de fábrica#
$ DF_IDIOMA=pt dataforge run pedido.df
erro[DF0602]: A chave "b" não está neste vault.
= nota: o vault tem 1 chave(s): "a"
= dica: use valor ?? padrao para um padrão, ou confira antes com vault.has(chave)
$ DF_IDIOMA=en dataforge run pedido.df
error[DF0602]: Key "b" is not in this vault.
= note: the vault has 1 key: "a"
= hint: use valor ?? padrao for a fallback, or check first with vault.has(chave)
$ DF_IDIOMA=es dataforge run pedido.df
error[DF0602]: La clave "b" no está en este vault.
= nota: el vault tiene 1 clave(s): "a"
= pista: use valor ?? predeterminado para un valor por defecto, o compruebe antes con vault.has(clave)O padrão é pt, e DF_IDIOMA=en volta ao texto como ele nasce. O locale do sistema é lido inteiro: es_AR.UTF-8 vale es.
O que a tradução NÃO toca#
monitor:
v := {"a": 1}
out v["b"]
handle Error as e:
// Isto vale em qualquer idioma: a mensagem do objeto nasce em
// ingles e fica em ingles. O que muda de lingua e o RELATORIO.
assert "not in this vault" in e.message
out "peguei"O que falta sai em inglês#
Ninguém traduz 530 mensagens numa tacada. Um catálogo incompleto que levantasse, ou que devolvesse a chave crua, seria pior que o inglês: um erro é sempre mais útil legível em inglês do que ilegível na língua certa.
$ dataforge idioma
em vigor: pt (DF_IDIOMA=—)
es 53 inteiras, 62 pedacos 100%
pt 53 inteiras, 62 pedacos 100%
en ingles — o texto como ele nasce, sem catalogoA cobertura é medida comparando os padrões, e não traduzindo texto: medir traduzindo o molde português daria 0% para todo idioma que não é o português, porque os padrões casam o texto em inglês. Foi o primeiro jeito que a ferramenta fez, e ela anunciou um catálogo completo como vazio.
Contribuir um idioma#
Um arquivo .py que expõe INTEIRAS e PEDACOS. O nome dele é o código do idioma.
# ~/meus-idiomas/fr.py
INTEIRAS = (
(r"'(?P<n>.+)' is not defined\.", "'{n}' n'est pas défini."),
(r"Division by zero\.", "Division par zéro."),
)
PEDACOS = (
(r"Did you mean '(?P<n>[^']+)'\?", "Vouliez-vous dire '{n}' ?"),
)$ DF_IDIOMA_CAMINHO=~/meus-idiomas DF_IDIOMA=fr dataforge run x.df
error[DF0401]: 'x' n'est pas défini.| Decisão | Porque |
|---|---|
| os padrões vêm do catálogo em português | um regex copiado à mão casaria quase, e 'quase' aqui é uma mensagem que sai em inglês sem ninguém entender por quê |
| os grupos são nomeados | numerados, inverter dois campos numa tradução passaria calado |
| um catálogo quebrado é ignorado | um erro de sintaxe num arquivo de tradução não pode impedir um programa de rodar — a tradução é conforto, e o inglês é o piso |
| a pasta de fora vence a de dentro | é o que permite corrigir uma tradução sem reinstalar nada |
não há en.py | seria uma cópia identidade de 115 entradas, que divergiria na primeira mensagem nova |
A moldura também é idioma#
As quatro palavras que mais aparecem — erro, aviso, nota, dica — eram literais em português dentro do desenhador. DF_IDIOMA=en produzia:
erro[DF0602]: Key "b" is not in this vault.Um rótulo em português em cima de uma mensagem em inglês, na primeira linha do relatório. A camada traduzia 530 mensagens e esquecia as quatro palavras que aparecem em todas elas. Elas moram fora dos catálogos, porque não são mensagens: são a forma do relatório — e um idioma que não declara a sua cai no inglês, não no português, para não produzir um meio-português.
O que isto não é#
- Não traduz as palavras da linguagem.
given,cycleeactionsão as mesmas em qualquer idioma — um programa escrito em espanhol não compilaria na máquina de quem escreve em português, e o código deixaria de ser portátil. - Não traduz a documentação. Ela é escrita em pt-BR, e a tradução dela é outro trabalho.
- Não há `Arcane.Idioma`. Quem embute o DataForge e quer o texto traduzido chama
dataforge.idioma.traduzirdo lado do Python.