如何在.net(C#/ ASP.Net)开发中使用xliff或po l10n文件格式

时间:2011-12-09 19:14:07

标签: c# localization po

我一直在研究 xliff po i18n文件格式,看起来它们被广泛使用和支持。有很多免费工具可以管理 xliff / po 文件中的翻译。

然而,到目前为止,我找不到如何在 .net(C#/ ASP.Net)项目中使用xliff或po文件的良好解决方案。我期待某种xliff/po => resx转换器,但到目前为止还没有找到它。

但与此同时,许多工具都支持将 xliff / po 文件转换为java .properties 格式。

如果您有通过 xliff或.Net项目中的po文件实施l10n的经验 - 请提供建议并分享有关其工作原理的最佳实践。

PS:我更喜欢使用xliff格式,因为我发现它更清晰,功能更多,但po也是一种选择。

5 个答案:

答案 0 :(得分:10)

您还可以i18n packageDaniel Crenna考虑​​available from nuGet。它使用PO文件作为本地化文本的默认存储。

答案 1 :(得分:7)

PO和XLIFF文件的工作方式通常不同:

  • PO文件是资源文件,它们被编译成二进制格式,然后使用gettext()库进行访问。有时PO被用作XLIFF之类的提取格式,但这不是它的最初目的。

  • XLIFF是通过将资源文件(例如resx)解压缩到XLIFF中创建的提取文件,然后合并回原始格式。

因此,对于XLIFF,您应该寻找使用resx -> xliff -> resx而不是xlif -> resx的工具。

提取/合并XLIFF文件的工具通常称为过滤器。有很多商业翻译工具可以接受XLIFF,还有一些也可以创建XLIFF(Swordfish,Trados Studio等)。

还有一些开源工具可以提取/合并XLIFF:File2XLIFF4j(但我不认为它支持resx)。

来自Okapi项目的Rainbow确实支持resx。 " old" .net版本(Rainbow 5:SourceForge上的Okapi)有一个专用于resx文件的过滤器,可以很好地处理它们;即使是二进制数据。它可能会遇到第三方控件的问题(有关详细信息,请参阅http://okapi.sourceforge.net/Release/Filters/Help/netres.htm。)

新的java版本(Rainbow 6:http://code.google.com/p/okapi/)通过其XML过滤器支持resx,并且可以使用简单的resx工作,但如果你有二进制数据,那么这些条目中的文本将不会被提取。

-YS

答案 2 :(得分:4)

在.resx文件开始失控之后,我使用PO来管理.Net项目。我使用它“作为XLIFF的提取格式”(参见Yves comment。我们现有的.resx文件被导出/合并为每种语言一个.po文件,然后成为我们的权威语言文件,从中自动生成所有resx文件。

我所使用的项目不是ASP,所以我不知道mcw0933提到的软件包,但Mono的resgen.exe实现有一些简单的po< => resx转换能力。但是,为了保留现有注释并自动将原始文本添加为​​额外注释,我将单声道的转换工具扩展到我使用的基本上重写的位置。

I put the extended .po <=> .resx converter on github

至于选择.po来管理C#项目的翻译,.po简单而友好但是使用它的方式与gettext中的原始用法略有不同有一些不便之处,我没有有经验说它是否比xliff更好,但是能够管理翻译和自动化任务比处理resx文件要好得多,就像我们过去一样。

使用PO与其意图略有不同的轻微不便:

  • 因为gettext使用msgid作为存储原始未翻译字符串的字段加倍,所以我不得不将原始翻译字符串resgenEx存档到附加注释中,而不是为此目的设计的字段。
  • 有些工具假设msgid将包含原始的英文翻译(而不仅仅是ID字符串),这可能意味着该工具的自动错误检查选项不是很有用,或者它可能意味着某些东西会让你选择一个不同的工具等。但大多数工具都没有假设。
  • 某些.po工具,例如\ n而不是\ r \ n

我最初编写resgenEx的项目有两个.resx文件和一个.isl文件用于每种支持的语言,但很快我就需要管理.Net项目的所有翻译,其中包含多个resx文件。代码。当发生这种情况时,我将决定是否应该继续使用.po或者是否应该使用xliff或其他东西。如果我继续使用.po,那么我将清理resgenEx并可能需要添加更多功能,例如能够自动为msgids添加程序集名称和类名前缀。

答案 3 :(得分:0)

您也可以尝试PhraseApp。 PhraseApp是一个翻译管理平台,支持多种格式。这样您就可以以任何格式上传它,并以最适合您的情况的格式再次导出,如XLIFF,po或resx。这样您就不需要决定单一翻译格式了。您可以随时轻松切换到其他格式。 PS:完全披露我为PhraseApp团队工作。

答案 4 :(得分:0)

签出xliff-tasks。该工具从xliff生成resx,从xliff生成附属程序集。

相关问题