3

我在一个 WPF 项目中。我想使用 GNU gettext 库。但是他们已经将 *.xaml 和 *.resx 用于 i18n。

在 *.xaml 中

Text="{cmn:Locale ResourceName=MessageSymbol}"

*.xaml 中使用消息符号。并且符号在每个语言环境 *.resx 中定义(例如 Resources.en-US.resx)

但这种方式并不像我想的那样有效。我们应该手动处理许多 *.resx。并且翻译人员无法理解 *.resx 格式。然后没有Visual Studio。在 GNU gettext 中,所有的过程都是自动的。这就是我想使用 GNU gettext 的原因。

我不能放弃使用 *.xaml 进行布局设计。

如何在 xaml 中使用 GNU gettext?

4

2 回答 2

3

在类似的情况下(它是 Silverlight),我成功使用了 Vernacular:https ://github.com/rdio/vernacular

它不是 GNU gettext本身,而是使用相同的文件格式和工作方式。这意味着您的翻译人员可以使用他们的工具输入和输出.po文件。

举一些例子,下面是它的外观C#

Console.WriteLine (Catalog.GetString ("Hello, World");

有很多覆盖:对于复数、性别和其他翻译评论:https ://github.com/rdio/vernacular/blob/master/Vernacular.Catalog/Vernacular/Catalog.cs

在 xaml 中,它看起来像这样:

<TextBlock i18n:Catalog.Message="Hello, World!" />

Catalog.Message在这种情况下是附加的 DependencyProperty,因此它适用于很多控件(所有 ContentControl 加上更多)

用于从程序集中提取翻译的工具(与 gettext 不同,后者在源代码上进行提取)并且 xaml 输出 .po。同样的工具也可以在 .resx 之间进行转换,因此您最终只需要翻译一个文件 (.po)。

注意:我不时为这个项目做出贡献,所以我的观点可能有偏见。

于 2013-09-03T07:44:16.093 回答
3

我很抱歉回复晚了(而且没有其他人可以这样做),但我为 WPF 中的 GNU gettext 做了一个 nuget:https://www.nuget.org/packages/NGettext.Wpf/1.0。 17-阿尔法

<TextBlock Text="{wpf:Gettext Translate this}" />

文档可能是一个更好的起点(我试图让这个简单,它是 Readme.md):https ://github.com/robert-j-engdahl/ngettext-wpf

是的,它伴随着国际化;msgids 是从 .cs 和 .xaml 文件中提取的。

如果有人想尝试这个但遇到任何问题,我很乐意提供帮助(在 github 上打开问题或对此答案发表评论)。

于 2018-08-31T10:32:05.280 回答