我在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?
答案 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上打开问题或对此答案发表评论)。