5

我有一个面向多个客户的网站。有时,客户会坚持进行细微的更改。由于我无法控制的原因,无论请求多么轻微,我都必须遵守。通常这不是问题,我只需创建用户控件或页面的客户端特定版本,并在构建期间覆盖默认版本或进行配置设置来处理它。

现在我正在本地化网站,我很好奇进行细微措辞更改的最佳方式。

假设我有一个名为的资源文件Resources.resx,其中包含 300 个资源。它有一个名为Continue. 英文值为“Continue”,法文值为“Continuez”。

现在,无论出于何种原因,一位客户希望它说“Next”和“Après”,而其他客户则希望保持不变。满足此类请求的最佳方式是什么?(这只是一个简单的例子)。

我能想到的唯一两种方法是

  • 创建另一个特定于客户端的 Resources.resx,并在构建时替换 .dll。由于我将完全替换 dll,因此新的资源文件必须包含所有 300 个字符串。明显的问题是我现在有 2 个资源文件,每个文件都有 300 个字符串要维护。
  • 创建自定义用户控件/页面并将其更改为使用自定义资源文件。例如,SignIn.ascx 将在构建期间被替换,它会从而ClientName.resx不是从Resources.resx.

还有什么我可以尝试的吗?有什么方法可以更改它,以便应用程序ClientResources.resx在实际查看指定的资源文件之前始终在文件中查找覆盖的值?

4

2 回答 2

1

您也许可以使用以下模板:

#if ClientName1 
Continue="Next";
#elif ClientName2
    Continue="Apres";
#else 
Continue="Continue" 
#endif

这允许您在同一文件中指定所有可能的值(以及同一区域中的同一变量),并且您可以在构建期间从命令行轻松定义符号“ClientName1”。

于 2010-06-08T17:20:12.630 回答
0

我不想这么说,但最简单的方法可能是在安装时使用自定义操作修改应用程序资源文件。

使用 ResXResourceWriter / ResXResourceReader 打开目标区域性的现有资源文件并遍历要更改的标签。这显然只有在对特定客户进行一些小的更改时才有意义。这还假定资源文件未嵌入程序集中。

为 Windows Installer 创建自定义操作非常容易,只要您在安装完成后可以运行它们即可。

另一种方法是将默认的 ComponentResourceManager 替换为您自己的版本,该版本可以选择性地更改标签的值。这也可能很快变得丑陋。

我能想到的最后一个技巧是将所有默认翻译放在基础资源文件中。自定义资源文件只需要更改它感兴趣的标签。任何留空的标签都将获得原始值。我不确定这有多现实,因为默认文化可能是英语......

编辑:这可能是一个不那么骇人听闻的(仍然是骇客!)解决方案。您可以在同一文化中创建另一个资源文件,例如比利时法语。比利时法语资源文件实质上继承自法语资源文件。这将允许您仅更改少数文本资源。然后,在您的应用程序中,将当前文化更改为“fr-BE”而不是“fr”。客户可能永远不会知道。

于 2010-06-08T17:52:35.750 回答