我们正在维护一个我们已经销售给几个不同客户的网络产品。我们以原生和英语支持该网站。作为维护的一部分,我们已经开始更新到.NET 3.5,在此期间,我们希望能够更好地支持产品中的差异化布局/本地化。
我们试图不在代码中包含任何客户逻辑。例如,我们试图避免这样的代码:
if (config.Customer = customer1)
SetupPageForCustomer1();
else
SetupPageForCustomer2();
相反,我们尝试将所有客户差异化放在配置文件中,以便我们可以拥有更清晰的代码:
SetupPageForCustomer(customer1)
void SetupPageForCustomer(Customer c)
{
PageConfig pc = LoadPageConfig("config/" + c.Dir + "ThisPage.aspx.config");
SetupPage(pc);
}
我们通过让需要区分的页面为每个在page_load上加载动态的客户提供用户控制来处理布局差异。目前正在使用资源文件处理本地化,这些文件非常有用。由于我们支持两种语言,因此每页都附带两个资源文件。但是,如果我们需要为客户区分这些页面上的文本,我们最终会得到(语言数量 * 客户数量)资源文件,这些文件似乎是很多维护工作。
您对此问题有何看法?处理这类事情的最佳方法是什么?
答案 0 :(得分:1)
也许您可以将本地化拆分为两个文件。一个文件用于目标语言中的常规内容,然后是该语言中客户的文件。因此,假设您要进行德语翻译,您将拥有一个适用于所有德国客户的通用文件和一个适用于每个德国客户的文件。这仍然是文件的扩散,但意味着每个文件都会变得更小,更具体。
答案 1 :(得分:0)
这有点像黑客,但如果你真的需要不同客户的不同文本,它可能是更干净的方法之一:
从.NET 2.0开始,您可以创建新的文化。 (参见How to: Create Custom Cultures。)我建议从配置文件中创建一个新的“文化”,继承自代表所用语言的文化。一旦有了新的文化,就可以只为特定于该客户的字符串创建一个资源文件,如果没有给出覆盖,则将其恢复为默认值。
修改:此外,这篇文章描述了如何将文化用于客户特定的语言使用:.NET Internationalization: Using Custom Cultures
答案 2 :(得分:0)
我无法判断你的LoadPageConfig是如何工作的。
一些想法: