我在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?
在类似的情况下(它是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)。
注意:我不时为这个项目做贡献,所以我的观点可能有偏见。
对于迟到的回复我很抱歉(没有其他人可以做到这一点),但我在WPF中为GNU gettext做了一个nuget: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上公开问题或对此答案发表评论)。