.NET-轻松进行本地化。 (N)gettext + poedit



创建一个新项目,我必须对WinForms使用* .resx,对Unity使用I2Localization,或者对本地化应用程序使用其他解决方案。 所有这些解决方案都是相似的,因为您必须拿出一个本地化密钥,将其插入代码和字典中。 最初,一切都很好,但是随着时间的流逝,此过程开始变得烦人。 但是,查看代码中的键,并不总是很清楚这是什么意思。

关于需要将本地化添加到根本不存在的大型项目的情况,我什至不说这有多难。

我不知道为什么,但是事实证明,像gnu / gettext这样的现成解决方案已经存在很长时间了。 当问他们的朋友和同事(使用.NET的人)时,大多数人甚至没有听说过。 因此,我决定与这个方便的工具分享。

原理很简单。 您用英语用行写代码,运行实用程序,该实用程序扫描源代码并为您提供翻译功能。 无需发明任何钥匙。 英文文本是关键。

让我们开始吧


1)通过Nu-get安装NGettext软件包:
PM>安装包NGettext

NGettext是.NET的跨平台GNU / Gettext实现。

2)向您的项目中添加一个额外的文件,以简化语法:
https://github.com/neris/NGettext/blob/master/doc/examples/T.cs

我们还将一个目录添加到项目中,以存储翻译:
MyProj \ Loc \ ru-RU \ LC_Messages

就我而言,我们得到以下图片:



3)将路径添加到T.cs文件:

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

简化了。 例如,仅俄语。 (可以从程序集本身读取字典)

4)我们使用本地化编写代码。 而不是“ text”,我们写T ._(“ text”)

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

5)现在我们需要翻译整个文本。 下载PoEdit 。 创建翻译文件:
文件->创建-> LC_MESSAGES文件夹-> Test.po



指定源所在的文件夹。 他们的程序将扫描:



还必须指定poEdit将搜索翻译的关键字:



添加我们需要的翻译并保存。



将翻译文件添加到项目中。 使它们始终复制:
(可以将它们嵌入到程序集本身中)



做完了 我们推出:



准备就绪。 其余的很简单。 编写代码-编辑翻译


您还可以找到用于本地化接口的现成库:

WPF
有关使用NGettext的其他信息
GNU / Gettext信息

Source: https://habr.com/ru/post/zh-CN432786/


All Articles