1

我知道本地化 .NET 应用程序的问题在这里问了很多次。

但我怀疑使用 Resources 和 3-d 方资源编辑工具对大型 .NET 应用程序进行本地化的方法的有效性。

我正在考虑使用以下方法之一:

  1. 为所有解决方案表单设置 Localizable=True,并使用 3-d 方资源编辑器,例如:Zeta Resource Editor,来编辑和管理资源。缺点:

    • 我们的解决方案有大约 100 个表单,对于 30 种额外的语言,将有 30*100 = 3000 个新的 resx 文件!
    • 与翻译人员互动的很多努力:每次产品更新后,我需要向他们发送纯文本的 excel 文件,并在每次语言更改后手动更新项目资源。
    • 语言文件的一部分(大部分?)总是过时的,因为翻译人员可能会在产品发布后完成他们的工作,我们不能在不重新编译项目的情况下包含他们的更改。
  2. 使用基于自定义字典的类(如 GNU GetText),它将加载带有翻译的老式 ini 文件。缺点:需要做额外的工作,比如编写一个帮助工具来为翻译人员编辑ini文件。优点:新语言版本可能会在产品发布后作为单独的 ini 文件发布。

不幸的是,我无法比较这两种方式的性能。

哪种方法更好?请分享您的经验!

4

3 回答 3

2

您确实应该坚持使用标准的 .NET 本地化系统 ( ResourceManager)。

解决您遇到的问题的一种方法(管理将各种语言的大量 .resx 文件导入到您的解决方案中,处理翻译交付的延迟)是在您的解决方案,但保持启用本地化。因此,从现在开始,您将仅使用英语资源构建您的解决方案,但仍具有加载附属程序集(如果存在)的能力。

然后,您可以建立一个不同的项目(称为本地化项目),其唯一目的是管理将您的英语资源翻译成各种语言。您必须定期将英语 resx 文件从您的主要解决方案同步到您的本地化项目(但这允许您以可控的方式进行同步,这将有助于与翻译人员打交道)。您收到的翻译将被检入该项目的源代码控制系统。

然后,您需要编写一些东西来从您的本地化项目构建您的附属程序集,并将它们放入您的纯英语版本中,从而为您提供具有所有本地化的构建。可以使用Resgen.exe(创建 .resources 文件)和Al.exe(创建 dll 文件)从 resx 文件构建附属程序集。

于 2012-05-10T15:19:07.637 回答
1

We use a large excel file with keys in the first column, and one column per language. A little script in the excel document spits out the necessary resx files (one per language), these resx files are then checked into the source tree.

Only the translation assembly will have satellite assemblies, and handles the translations for the entire application. So all other assemblies (UI etc.) will have no satellite assemblies.

In forms we use the keys as texts (for labels, buttons, captions) and recursively translate the forms when shown. For non-control texts we just use a single static class to fetch the translated text given a resource key with code.

This "single file" translation database works very well, and using excel is convenient since your translators probably will already have it installed and are familiar with it.

于 2012-05-10T15:25:56.760 回答
0

好吧,我当然不想在这里跑题,但是根据任何合理的定义,没有一个脚本可以完成需要完成的工作是简单或微不足道的。涉及的问题太广泛了。即使是最琐碎的脚本的编写成本也将远远超过购买成熟的翻译应用程序的成本。而且该应用程序几乎肯定会比脚本做的更多(甚至仅指基本功能)。

于 2012-05-11T21:33:05.350 回答