如何在xaml和resx中使用GNU gettext

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在xaml和resx中使用GNU gettext相关的知识,希望对你有一定的参考价值。

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

以上是关于如何在xaml和resx中使用GNU gettext的主要内容,如果未能解决你的问题,请参考以下文章

WPF 中.XAML文件如何读取资源文件?

Xamarin+Prism开发详解二:Xaml文件如何简单绑定Resources资源文件内容

WPF 访问 Resources.resx 资源文件

如何创建 resx 文件

Xamarin XAML x:嵌套类中对属性的静态引用

如何在单个 EXE 中嵌入多语言 *.resx(或 *.resources)文件?