【问题标题】:How to use xliff or po l10n file formats in .net (C#/ASP.Net) development如何在 .net (C#/ASP.Net) 开发中使用 xliff 或 po l10n 文件格式
【发布时间】:2012-01-17 01:01:05
【问题描述】:

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

但是,到目前为止,我还没有找到一个很好的解决方案来说明如何在 .net (C#/ASP.Net) 项目中使用 xliff 或 po 文件。我希望有某种xliff/po => resx 转换器,但到目前为止还没有找到。

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

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

PS:我更喜欢使用 xliff 格式,因为我发现它更简洁,功能范围更广,但 po 也是一种选择。

【问题讨论】:

  • 有什么理由不能直接使用资源文件?
  • 我们希望在我们公司构建的不同项目(即 C# 和 Java 项目)之间使用单一格式进行翻译,并共享它们以最大程度地减少不同项目单独翻译的重复和额外成本。

标签: c# localization po


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    我做的项目不是ASP所以我不知道mcw0933提到的包,但是Mono的resgen.exe实现有一些简单的po resx转换能力。不过为了保留现有的cmets,自动将原文添加为额外的cmets,我将mono的转换工具扩展至我使用的那个基本被重写的地步。

    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】:

      您也可以考虑i18n package by Daniel Crennaavailable from nuGet。它使用 PO 文件作为本地化文本的默认存储。

      【讨论】:

        【解决方案4】:

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

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

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

        所以对于 XLIFF,您应该寻找一种工具来执行 resx -&gt; xliff -&gt; resx 而不是 xlif -&gt; resx

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

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

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

        新的 java 版本(Rainbow 6:http://code.google.com/p/okapi/)通过其 XML 过滤器支持 resx,并且可以与简单的 resx 一起正常工作,但如果其中包含二进制数据,则不会提取这些条目中的文本。

        -是的

        【讨论】:

        • 很好的答案!感谢您向我澄清这一点。我将进一步挖掘以找出将 .net 和 java 项目组合的 l10n 工作量降至最低的最佳方法。
        猜你喜欢
        • 1970-01-01
        • 2023-03-03
        • 2013-04-14
        • 2011-05-01
        • 1970-01-01
        • 2011-06-08
        • 1970-01-01
        • 1970-01-01
        • 2014-06-25
        相关资源
        最近更新 更多