代码之家  ›  专栏  ›  技术社区  ›  Brandon

在运行时更改资源的提取位置?

  •  5
  • Brandon  · 技术社区  · 16 年前

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

    现在我正在本地化这个网站,我很想知道最好的方式去做一些小的措辞改变。

    假设我有一个名为 Resources.resx 它有300个资源。它有一个名为 Continue

    现在,不管出于什么原因,一个客户希望它说“下一个”和“Apr–s”,而其他客户希望保持不变。接受这样的请求最好的方法是什么(这只是一个简单的例子)。

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

    还有什么我可以试试的吗?有没有什么方法可以改变它,使应用程序始终以 ClientResources.resx

    2 回复  |  直到 16 年前
        1
  •  1
  •   apoorv020    16 年前

    您可以使用以下模板:

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

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

        2
  •  0
  •   Scott P    16 年前

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

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

    这可能是一个不太黑客(仍然是黑客!)解决方案您可以在同一区域性中创建另一个资源文件,如比利时法语。比利时法语资源文件实质上继承自法语资源文件。这将允许您只更改少数文本资源。然后,在应用程序中,将当前区域性更改为“fr BE”而不是“fr”。客户可能永远不会知道。