如何在xaml和resx中使用GNU gettext

时间:2013-09-03 00:13:13

标签: c# wpf xaml internationalization gettext

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

in * .xaml

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

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

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

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

如何在xaml中使用GNU gettext?

2 个答案:

答案 0 :(得分:2)

在类似的情况下(它是Silverlight),我成功使用了白话: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和从.resx转换,因此您最终只需要翻译一个文件(.po)。

  

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

答案 1 :(得分:0)

很抱歉收到您的答复,很抱歉(没有其他人可以这样做),但是我为WPF中的GNU gettext做了一个小小的改动:https://www.nuget.org/packages/NGettext.Wpf/1.0.17-alpha

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

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

是的,它伴随着国际化。 msgids是从.cs和.xaml文件中按应有的方式提取的。

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