C#资源:显示资源字符串名称而不是本地化值

时间:2016-06-20 16:59:36

标签: c# asp.net-mvc localization internationalization resx

使用资源进行国际化的大型项目(遵循本指南:ASP.NET MVC 2 Localization complete guide,使用数据属性之类的东西等),我们遇到了翻译资源文件的需要。在项目的开始中,我选择了拥有大量小资源文件的方法 - 对于每个视图,视图模型,控制器......所以我最终拥有数百个资源。在翻译期间(由我们的合作伙伴使用ResXManager tool完成翻译时,我们遇到了识别字符串上下文的问题(显示的位置,以便在显示时找出正确的翻译形式)。

因此我被要求进行不显示本地化值的应用程序变异,而是键(或字符串名称)。例如。资源TBL_NAME中的字符串在视图中的某个位置使用@ResX.TBL_NAME并将其翻译成英文“Name”,我想在此特殊变体中将其显示为“TBL_NAME”,因此译者可能会看到context - 使用此字符串的确切位置。 最好的是,如果这不是特殊的应用程序构建,而是应用程序的另一种“语言”,那么他可以在英语和这种“非本地化”语言之间切换。

我正在寻找一些简单的想法。到目前为止,我一直在考虑这些方法:

  1. 覆盖ResourceManager.GetString - 无法使用,因为我们使用生成的Designer类来大规模访问字符串,到目前为止我还没有找到更改创建的ResourceManager的方法(see this answer )。我错过了什么吗?
  2. 为某些未使用的语言创建资源,其中包含string name/translated valueTBL_NAME/TBL_NAME - 可行,但由于我们拥有数百个资源,因此非常耗费精力。此外,添加新资源将要求我们记住,我们还需要添加这个未使用的语言资源将完全相同的字符串名称。在向应用程序添加单个字符串时,您还需要做两次工作。
  3. 目前,在我看来,使用资源和当前的方法是不可能解决这个问题的,所以我决定在这里问这个问题(我知道这是讨论而不是问题),希望有人会给我一些关于解决这个问题的其他方法的暗示。

1 个答案:

答案 0 :(得分:1)

我首选的选择是为译员提供一个环境,让他们可以看到他们正在翻译的内容。 Rigi需要一些设置(基本上你需要添加额外的UI语言),但是一旦完成,翻译人员可以在实时网站中工作 - 或者在测试实例中工作,这就是我们所做的。

他们也可以在屏幕截图中工作,这在翻译人员必须访问管理员或其他角色特定页面时很方便,但您不想给他们提供各种用户权限。这些屏幕截图可以作为自动UI测试的一部分或在手动UI测试期间生成。

我担心我无法谈论解决方案的成本,但我们的翻译人员对此非常满意。我不确定这是否是您正在寻找的,因为您要求一个简单的解决方案,但它肯定解决了为翻译人员提供他们完成工作所需的上下文的问题 - 比显示资源ID更好。