如何在xaml和resx中使用GNU gettext

本文关键字:GNU gettext resx xaml | 更新日期: 2023-09-27 18:29:54

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

在*xaml 中

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

消息符号在*.xaml中使用。符号在每个区域设置*.resx(例如Resources.en-US.resx)中定义

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

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

如何在xaml中使用GNU gettext?

如何在xaml和resx中使用GNU gettext

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

它本身不是GNUgettext,而是使用相同的文件格式和工作方式。这意味着您的翻译人员可以使用他们的工具输入和输出.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相反,gettext是在源代码上提取的)和xaml输出的.po。同一工具还可以转换到.resx和从.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

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

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