.NET - localização sem dor. (N) gettext + poedit



Ao criar um novo projeto, tive que usar * .resx para WinForms, I2Localization for Unity ou outras soluções para localizar aplicativos. Todas essas soluções são semelhantes, pois você precisa criar uma chave de localização, inseri-la no código e no dicionário. No começo, está tudo bem, mas com o tempo, esse processo começa a incomodar. No entanto, olhando para a chave no código, nem sempre é claro do que se trata.

Sobre a situação em que você precisa adicionar a localização a um projeto grande, onde ele não existia, nem vou dizer o quão difícil é.

Não sei por que, mas acontece que há muito tempo uma solução pronta como o gnu / gettext. Ao perguntar a seus amigos e colegas (aqueles que trabalham com o .NET), a maioria nem sequer ouviu falar disso. Por isso, decidi compartilhar com esta ferramenta conveniente.

O princípio é simples. Você escreve código com linhas em inglês, executa um utilitário que verifica a fonte e fornece a capacidade de traduzir. Nenhuma chave precisa ser inventada. O texto em inglês é a chave.

Vamos começar


1) Instale o pacote NGettext via Nu-get:
PM> Pacote de Instalação NGettext

NGettext é uma implementação de plataforma cruzada GNU / Gettext para .NET.

2) Adicione um arquivo adicional ao seu projeto que simplifique um pouco a sintaxe:
https://github.com/neris/NGettext/blob/master/doc/examples/T.cs

Também adicionamos um diretório ao projeto onde as traduções serão armazenadas:
MyProj \ Loc \ ru-RU \ LC_Messages

No meu caso, temos a seguinte imagem:



3) Adicione os caminhos ao arquivo T.cs:

static T() { var localesDir = Path.Combine(Directory.GetCurrentDirectory(), "Loc"); _Catalog = new Catalog("Test", localesDir, new CultureInfo("ru-RU")); } 

Simplificado. Por exemplo, apenas russo. (É possível ler dicionários da própria montagem)

4) Nós escrevemos nosso código usando localização. Em vez de "texto", escrevemos T ._ ("texto")

 namespace TestCode { static class Program { public static void Main(string[] args) { Console.WriteLine(T._("Hello, World!")); Console.WriteLine(T._("Cat")); Console.ReadKey(); } } } 

5) Agora precisamos traduzir todo o texto. Faça o download do PoEdit . Crie um arquivo de tradução:
Arquivo -> Criar -> Pasta LC_MESSAGES -> Test.po



Especifique a pasta em que nossas fontes estão localizadas. O programa deles verificará:



Também é necessário especificar a palavra-chave que o poEdit procurará pela tradução:



Adicione a tradução que precisamos e salve.



Adicione arquivos de tradução ao projeto. Faça-os copiar sempre:
(É possível incorporá-los na própria montagem)



Feito. Lançamos:



A instalação está pronta. O resto é simples. Escreva o código - edite a tradução


Você também pode encontrar bibliotecas prontas para localização de interfaces:

WPF
Informações adicionais sobre o uso do NGettext
Informações GNU / Gettext

Source: https://habr.com/ru/post/pt432786/


All Articles