.NET: localización sin dolor. (N) gettext + poedit



Al crear un nuevo proyecto, tuve que usar * .resx para WinForms o I2Localization para Unity u otras soluciones para localizar aplicaciones. Todas estas soluciones son similares en el sentido de que debe encontrar una clave de localización, insertarla en el código y en el diccionario. Al principio, todo está bien, pero con el tiempo, este proceso comienza a molestar. Sin embargo, al mirar la clave en el código, no siempre está claro de qué se trata.

Acerca de la situación en la que necesita agregar localización a un proyecto grande donde no existía en absoluto, ni siquiera diré lo difícil que es.

No sé por qué, pero resulta que una solución preparada como gnu / gettext ha existido durante mucho tiempo. Al preguntar a sus amigos y colegas (aquellos que trabajan con .NET), la mayoría ni siquiera ha oído hablar de esto. Por lo tanto, decidí compartir con esta herramienta conveniente.

El principio es simple. Escribe código con líneas en inglés, ejecuta una utilidad que escanea la fuente y le brinda la capacidad de traducir. No es necesario inventar llaves. El texto en inglés es la clave.

Empecemos


1) Instale el paquete NGettext a través de Nu-get:
PM> Install-Package NGettext

NGettext es una implementación multiplataforma de GNU / Gettext para .NET.

2) Agregue un archivo adicional a su proyecto que simplifique un poco la sintaxis:
https://github.com/neris/NGettext/blob/master/doc/examples/T.cs

También agregamos un directorio al proyecto donde se almacenarán las traducciones:
MyProj \ Loc \ ru-RU \ LC_Messages

En mi caso, esta imagen resulta:



3) Agregue las rutas al archivo T.cs:

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

Simplificado Por ejemplo, solo ruso. (Es posible leer diccionarios del propio ensamblaje)

4) Escribimos nuestro código usando la localización. En lugar de "texto", escribimos 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) Ahora necesitamos traducir todo nuestro texto. Descargar PoEdit . Crea un archivo de traducción:
Archivo -> Crear -> carpeta LC_MESSAGES -> Test.po



Especifique la carpeta en la que se encuentran nuestras fuentes. Su programa escaneará:



También es necesario especificar la palabra clave que poEdit buscará para la traducción:



Agregue la traducción que necesitamos y guarde.



Agregar archivos de traducción al proyecto. Hazlos copiar siempre:
(Es posible incrustarlos en el propio ensamblaje)



Listo Lanzamos:



La configuración está lista. El resto es simple. Escribe el código - edita la traducción


También puede encontrar bibliotecas preparadas para localizar interfaces:

WPF
Información adicional sobre el uso de NGettext
Información de GNU / Gettext

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


All Articles