Nos últimos anos, Rust ganhou popularidade à medida que as empresas buscam cada vez mais promover seus produtos e serviços no cenário mundial. De acordo com a “ Pesquisa de desenvolvedores 2020 do Stack Overflow,” impressionantes 86 por cento dos entrevistados que usaram o Rust planejam usá-lo novamente, tornando o Rust a linguagem de programação mais amada de 2020.
A internacionalização (i18n) é uma consideração importante para empresas que planejam lançar seus aplicativos e software para um público global. Neste tutorial de internacionalização do Rust, examinaremos oito dos engradados mais populares do Rust i18n e avaliaremos cada um quanto à estabilidade e prontidão para a produção.
Neste guia, veremos oito dos mais populares engradados de internacionalização do Rust e avaliaremos cada um quanto à estabilidade e prontidão para a produção.
Abordaremos o seguinte:
- O que é internacionalização?
- Rust internacionalização: termos-chave
- Por que usar a internacionalização com o Rust?
- Sistemas comuns de localização
- Comparando ferramentas de internacionalização para Rust
O que é internacionalização?
Internacionalização é o processo de desenvolvimento de conteúdo e aplicativos que se adaptam aos usuários de qualquer região, idioma ou cultura. Em outras palavras, internacionalização é o processo de tornar um aplicativo acessível globalmente, fornecendo conteúdo apropriado para cada região.
A internacionalização é às vezes abreviada como i18n porque há 18 letras entre o “I” inicial e o “N” final.
Rust internacionalização: termos-chave
Antes de prosseguirmos com nosso tutorial de internacionalização Rust, vamos definir alguns termos-chave:
- Internacionalização (i18n) significa projetar programas de computador ou aplicativos da web que podem ser adaptados a vários idiomas e regiões
- Localização é o processo de adaptação de aplicativos da web internacionalizados, adicionando componentes específicos de local para uma determinada região ou idioma. Ele usa a flexibilidade e a capacidade oferecidas pela internacionalização
- Tradução é o processo de substituição de strings de um idioma para outro
Por que usar a internacionalização com Rust?
Na era dos sites estáticos, a localização é feita copiando toda a estrutura do site em vários locais. As alterações são feitas em cada estrutura diretamente pelo tradutor, pois cada página é traduzida separadamente. As ferramentas de internacionalização simplificam esse processo tedioso, demorado e sujeito a erros.
Entre os recursos mais enriquecedores do Rust está a localidade do idioma, que facilita a tradução de um aplicativo para vários idiomas.
Sistemas comuns de localização
Em geral, existem três sistemas de localização comuns:
Vamos examinar cada um com mais detalhes.
gettext
g ettext é um sistema de localização que separa os arquivos de tradução da linguagem de programação e fornece suporte para strings de formas plurais de qualquer número. A Sun Microsystems implementou a primeira versão do gettext em 1993. Em 1995, o projeto GNU lançou uma implementação de software livre. Desde então, gettext foi usado por muitas linguagens de programação, incluindo Rust.
Veja como usar gettext:
- Use
gettext (), _ ()
para aceitar strings de tradução no código-fonte - Gere o arquivo.pot (modelo de objeto portátil) usando
xgettext
ou outro software para ajudar a rastrear a string traduzida e a linha na qualgettext ()/_ ()
foi usado - Gere um arquivo.po (objeto portátil) para cada idioma/local usando software como PoEdit, Emacs, etc. para adicionar traduções apropriadas a cada texto de origem
- Compilar para o arquivo.mo (objeto de máquina) quando a tradução for concluída para fácil distribuição
Projeto Fluente
Fluent é um sistema de tradução que se concentra na produção de traduções que parecem naturais, fornecendo suporte para expressões gramaticais como gênero, plurais, conjugações , etc.
O Fluent usa uma expressão de um formato de arquivo chamado FTL (abreviação de Fluent Translation List) para processar traduções. Um arquivo FTL representa um idioma que contém funções, atributos, variáveis, seletores, termos, etc. Cada local deve ter seu próprio arquivo FTL criado em diretórios de localidade diferentes com suas próprias traduções seguindo o mesmo padrão de sintaxe.
# en-US # Variável simples text-layout=Rastreie sua produtividade testando seu código no local # Atributos form-layout= .button=Salvar e executar .font-seletion=Tamanho da fonte #es # Variável simples text-layout=Acelere su productividad probando su código en el lugar # Atributos form-layout= .button=Guardar e ejecutar .font-seletion=Tamaño de fuente
Formato de mensagem ICU
Componentes internacionais para Unicode (ICU ) é um esquema de codificação padrão que fornece serviços unicode completos, como data manipulações, pacotes de recursos para acessar informações localizadas, conversão de conjunto de caracteres, etc. Ele fornece tradução convencional sobre a expectativa de dados na mensagem de origem.
ICU depende de vários formatos de dados, incluindo XML, JSON, YAML e arquivos de propriedades para formatação de mensagens e usa uma sintaxe de mensagem que contém vários padrões, incluindo variáveis, seleção, pluralização, data, hora etc.
{ "text":"Basta escrever o texto sem quaisquer variáveis" } # Representando números {nome_variável, número, estilo}. { "montante":"Seu total é {total, número,:: moeda/EUR}" } { "created_at":"A tarefa foi postada em {postedAt, date, medium} às {postedAt, time, short}" } # Versão espanhola { "created_at":"La tarea fue publicada en {publicadoAt, data, meio} a {publicadoAt, hora, short}" }
Comparando ferramentas de internacionalização para Rust
Vamos examinar oito das APIs de internacionalização mais populares do Rust e comparar sua prontidão para produção, estabilidade e a experiência geral do desenvolvedor.
Fluente
Fluente foi projetado para melhorar o processo de tradução em plataformas. Ele permite que operações de sintaxe, analisadores e estruturas de localização principais usem uma estrutura de baixo nível para formatar e armazenar mensagens em um único local.
O Fluent também fornece uma API que oferece suporte a ajudantes amigáveis ao usuário, vinculação de estrutura, fallback de erro, negociação de linguagem entre as linguagens solicitadas pelo usuário, recursos e entrada/saída para processamento de recursos selecionados.
- Pronto para produção: Sim
- Estável: Sim
Fluent LangNeg
Fluent LangNeg é baseado em fluent-langneg
, uma implementação de biblioteca JavaScript associada a Projeto Fluent , anteriormente chamado de fluent-locale
. Ele usa unic-langid
e unic-locale
para recuperar e operar em identificadores de local. Fluent LangNeg também oferece opção de negociação entre listas de localidades diferentes.
- Pronto para produção: Sim
- Estável: Sim
gettext
Rust gettext é baseado em GNU gettext , que é compatível e modelado para um grande número de linguagens, como php-gettext , gettext-go , js-gettext e muito mais. Ele armazena os dados traduzidos em um arquivo.mo, que é separado dos arquivos de idioma porque não impõe a estrutura de diretório para armazenamento.
No momento em que este artigo foi escrito, esta caixa ainda está em estágio de desenvolvimento.
- Pronto para produção: Não
- Estável: Sim
gettext-rs
gettext-rs
usa o GNU Gettext Ligação de FFI para Rust para construir a execução de script com base em variáveis de ambiente. Atualmente, ele oferece suporte apenas para Linux e Windows.
- Pronto para produção: Não
- Estável: Sim
r_i18n
r_i18n
é uma ferramenta que traduz string acessando um par de valores-chave relacionado de uma string do Arquivo JSON criado para cada idioma em um diretório de configuração.
- Pronto para produção: Sim
- Estável: Sim
JSON Get Text
json-gettext
extrai strings de um arquivo JSON local para obter o catálogo de um usuário. A localização funciona criando diferentes locais JSON em um diretório que deve ser acessado pelo Rust.
json-gettext fornece suporte para R estrutura da web ocket e lânguido único.
- Pronto para produção: Sim
- Estável: Sim
i18n_codegen
i18n codegen está intimamente relacionado a ri18n , que gera novos trechos de código com base no par de valor-chave especificado em cada localidade JSON. A chave no arquivo JSON se torna um método que pode ser acessado por meio de implementação. Este procedimento foi desenvolvido para ajudá-lo a evitar bugs comuns, como interpolações ausentes, erros de digitação de chaves i18n etc.
- Pronto para produção: Sim
- Estável: Sim
Foguete I18N
rocket_i18n8
foi projetado para traduzir a localidade com base na solicitação do usuário em rocket ou frameworks actix web via macro i18n. Rocket I18N foi construído para suportar apenas modelos compilados, como o r fofo e A skama mecanismos de modelo.
- Pronto para produção: Sim
- Estável: Sim
Conclusão
Com essas APIs de internacionalização, você pode estender seus negócios para outros grupos demográficos regionais, o que pode ajudar a aumentar o envolvimento geral do usuário com seu aplicativo Rust.
A melhor ferramenta de internacionalização para atender às suas necessidades dependerá do seu caso de uso específico e do que você espera realizar com o seu aplicativo. Algumas das APIs mencionadas acima estão mais prontas para produção e estáveis do que outras, portanto, certifique-se de fazer sua lição de casa antes de se comprometer com uma solução.
A postagem Rust internacionalização, localização e tradução apareceu primeiro em LogRocket Blog .