【问题标题】:Is it possible to localize the appSettings information in web.config file?是否可以在 web.config 文件中本地化 appSettings 信息?
【发布时间】:2011-02-04 19:58:24
【问题描述】:

我有这样的想法:

<appSettings>
 <add key="ConfigName" value="configuration" culture="1033" />
 <add key="ConfigName" value="konfiguracja" culture="1045" />
</appSettings>

但是the add element只有两个属性——keyvalue,所以我猜它不被支持。

接下来我想到的是:

<appSettings>
 <add key="ConfigName-1033" value="configuration" />
 <add key="ConfigName-1045" value="konfiguracja" />
</appSettings>

谁能提出更好的解决方案?


更新 - 我实施的解决方案:

将此信息移动到资源文件 (Oded's answer) 的不利之处在于,它无法再在开发人员和测试人员的机器上轻松修改。

但是,这就是我所做的 - 我将设置保留在 web.config 文件中(它们无法本地化,但可以修改它们而无需重新编译代码)将它们添加到资源文件(它们可以本地化;它们仅用于生产环境,其中web.config 设置设置为空字符串)。

【问题讨论】:

    标签: .net asp.net configuration localization


    【解决方案1】:

    您不应将本地化数据存储在 config 文件中。

    使用附属程序集和资源文件进行本地化。

    如果您只有少量物品,则将物品存放在config 中可能没问题,但经验表明物品数量会增加,直到最终成为维护噩梦。

    有关详细信息,请参阅this 指南(在 ASP.NET 2.0 中揭秘的全球化和本地化)。

    【讨论】:

    • @klausbyskov:我做到了,因为这个答案没有回答这个问题(当然,@Oded 没有冒犯)。虽然这里提供的信息很准确,但反应迟钝;问题是如何本地化 appSettings,而不是“存储本地化数据的最佳方式是什么”。
    • 我也想知道。这是唯一正确的答案。此外,从未向用户公开的内容也不应该被本地化。 “ConnectionString”应该始终是“ConnectionString”。我最讨厌的一件事是开发人员本地化代码。代码应该是英文,句号。
    • @Ben Collins - 当经验告诉你程序员同事试图做的事情完全错误时,你有责任向他们指出。 SO 也是关于相互教育关于最佳实践的最佳实践,而不是坚持不良/不正确的实践。
    • @mare:我不想在这里本地化代码 - 我简化了示例,所以它并不明显,但我需要本地化的设置存储了一个 URL。它存储在web.config 文件中,因为它在测试和生产环境中有所不同。
    • @Oded - 虽然我并不真的不同意,但有时有理由做通常看起来“完全错误”的事情。在回答 SO 问题时,我会尽可能地慈善。 @Marek 想要以这种方式做事可能有很多原因(尽管他在之前的评论中解释过)。
    【解决方案2】:

    如果它真的只有几个设置,你上面的建议会很有效。我不认为 ASP.NET 对本地化配置设置有任何固有的支持。

    【讨论】:

      【解决方案3】:

      为什么没有 appsettings.culture 文件并将其复制到您的应用程序文件夹中。根据应用程序的文化,您可以使用正确的本地化应用程序设置文件覆盖 appconfig。

      【讨论】:

      • 我可以自动访问这个文件吗,即为 appSettings 设置当前文化,然后使用WebConfigurationManager.AppSettings
      • 我认为您可以使用 WebConfigurationManager.OpenWebConfiguration(configPath) 来做到这一点。
      【解决方案4】:

      将此添加到 web.config 的 configSections 部分:

      <section name="ConfigNames" type="System.Configuration.NameValueSectionHandler" />
      

      将此添加到您的网络配置中 &lt;system.web&gt;...&lt;/system.web&gt; 部分之外:

      <ConfigNames>
        <add key="configuration" value="1033"/>
        <add key="konfiguracja" value="1045"/>
      </ConfigNames>
      

      然后你可以像这样访问你的设置:

      var configNames = (NameValueCollection)ConfigurationManager.GetSection("emailLists");
      //and get at them however you like:
      var culture = configNames["konfiguracja"];
      

      【讨论】:

      • 这在语义上(逻辑上)是错误的。如果有的话,应该这样做:。您不本地化键 (??),您本地化值 - 这是正确的模式,您也可以在 web.config 之外看到它,就像在资源文件中一样。
      • 我不知道他想要什么——我认为这个数字就是价值。我举了一个可行的例子。与其在您的 appSettings 中保留一百万行,不如将不同的设置分开 - 如果您不想这样做也没关系,这只是一个建议,但这确实有效,所以不可能是“错误的”
      • configurationkonfiguracja 是 2 种不同文化(1033 和 1045)的 ConfigName 设置值。跨度>
      • 酷。那么在这种情况下,您需要 。您可以使用 configNames["1033"] 访问一个值。无论如何,我使用的方法仍然有效 - 我更喜欢以这种方式在逻辑上将相似配置的批次分开,而不是将它们与其他所有设置放在同一个地方
      猜你喜欢
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 2016-01-26
      • 1970-01-01
      相关资源
      最近更新 更多