C# 如何在xaml和resx中使用GNU gettext

C# 如何在xaml和resx中使用GNU gettext,c#,wpf,xaml,internationalization,gettext,C#,Wpf,Xaml,Internationalization,Gettext,我在一个WPF项目中。我想使用GNU gettext库。但他们已经在i18n中使用了*.xaml和*.resx 在*.xaml中 Text="{cmn:Locale ResourceName=MessageSymbol}" 在*.xaml中使用消息符号。符号在每个区域设置*.resx中定义(例如Resources.en US.resx) 但这种方式并不像我想的那样有效。我们应该手动处理许多*.resx。翻译人员无法理解*.resx格式。那就不用Visual Studio了。 在GNU gett

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

在*.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),我成功地使用了白话:

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

为了给您提供一些示例,下面是它在
C#
中的外观:

Console.WriteLine(Catalog.GetString(“你好,世界”);
有很多覆盖:对于复数、性别和其他翻译人员注释:

在xaml中,它如下所示:

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

Catalog.Message在本例中是一个附加的DependencyProperty,因此它适用于许多控件(所有ContentControl加上一些其他控件)

用于从程序集(与gettext相反,在gettext中,提取是在源代码上完成的)和xaml输出a.po中提取翻译的工具。同一工具还可以转换到.resx和从.resx转换,因此最终只需要一个文件(.po)进行翻译

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


很抱歉我的回复太晚(而且没有其他人愿意这么做),但我在WPF中为GNU gettext做了一个小动作:


文档可能是一个更好的开始(我正试图让它变得简单,它是Readme.md):

是的,它伴随着国际化而来;msgid是按原样从.cs和.xaml文件中提取的


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

此工具是否只扫描程序集?试图让它看到Razor视图。@Stephan我认为您应该披露您参与此项目的情况