
创建一个新项目,我必须对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信息