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

标签 c# asp.net .net-3.5 localization resource-files

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

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

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

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

我能想到的只有两种方法是

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

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

最佳答案

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

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

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

关于c# - 在运行时更改资源的提取位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2999422/

相关文章:

c# - 从 ASP.NET Core Web API 中的 Controller 访问用户身份

c# - Foreach 遍历所有 listView 项目

asp.net - 在没有 IIS 和 VS 2017 的情况下使用 Kestrel

asp.net - 如何使用配置设置在服务器启动时自动启动 WCF Windows 服务

linq-to-sql - DataContext 何时会打开与数据库的连接?

C#:你能检测出当前执行上下文是否在 `lock (this)` 内吗?

c# - 工作时间计算 - 如何将小数转换为 "hh:mm"?

c# - 使用 github 操作进行部署时更改 appsettings 中的变量

c# - 从回复邮件中删除之前的部分

.net-3.5 - .NET 安装项目期间的 COM 组件注册