在ASP.NET MVC项目中,NeutralResourcesLanguageAttribute和uiCulture有什么区别?

7

我创建了一个asp.net MVC4网站项目,该项目需要提供多种语言支持。

我想设置该网站项目的默认语言。经过一些研究,似乎可以在两个地方设置默认语言。

AssemblyInfo中的NeutralResourcesLanguageAttribute

[assembly: NeutralResourcesLanguageAttribute("en")]

来自msdn:通知资源管理器应用程序的默认文化。此类不能被继承。

在 web.config 中的全球化 uiCulture

  <system.web>
    <globalization uiCulture="en"/>

来自msdn:指定处理基于区域设置的资源搜索的默认区域性。有关有效的区域性字符串,请参阅System.Globalization.CultureInfo Class。

现在我的问题是:

在web项目中设置默认语言的正确方式是什么(NeutralResourcesLanguageAttribute或全球化uiCulture)?

4个回答

2

示例资源文件

  • Stuff.resx(包含英文,是默认的资源文件)
  • Stuff.de.resx(包含德语)
  • Stuff.fr.resx(包含法语)

现在在web.config中使用

<globalization 
    enableClientBasedCulture="true" 
    uiCulture="auto:en" 
    culture="auto:en" />

这个 ("auto") 选项将让浏览器设置决定(德国浏览器获取德语资源等)。

然而,在上面的例子中,如果一个瑞典浏览器访问,则会默认使用 en,因为没有 se (瑞典语)资源文件并且将使用回退的英文 ("auto: en ") uiCulture。

所以... 然后:

[assembly: NeutralResourcesLanguageAttribute("en")]

现在让应用程序知道英语请求直接转到默认的default.resx,而不需要先查找其他的en resx。

同时,如果一个英语浏览器正在请求,它应该直接转到默认的资源文件,而不是尝试其他内容。因此,在这里也要使用NeutralResourcesLanguageAttribute设置。应用程序知道直接转到默认的resx。


经过更多的测试,这似乎是最好的答案。NeutralResourcesLanguageAttribute 是关于程序集探测的,而 web.config uiCulture 只设置默认语言。 - Manuel
我有一个后续问题:应该在哪个程序集中指定?执行程序集还是包含资源文件的程序集? - sondergard

0
根据this文章,Asp.Net Web 应用程序的重要设置在 web.config 的 "globalization" 元素中。该文章建议将文化和 uiCulture 都设置为最佳实践。例如:
<globalization uiCulture="es" culture="es-MX" />

0

NeutralResourcesLanguageAttribute 是让应用程序资源管理器知道您的应用程序的默认区域性和资源位置的一种方法。该属性可用于任何类型的 .NET 应用程序:桌面、Web、Win8、WCF 等。

globalization 属性是另一种让您的 Web 应用程序知道应用程序默认区域性的方式。

请注意,它们的主要区别在于 globalization 属性仅适用于 Web 应用程序,并且不允许您指定资源的不同位置。

建议:对于 Web 项目,我会使用配置属性。


0

NeutralResourcesLanguage属性通知ResourceManager用于显示中性文化资源的语言,当在与中性资源语言相同的文化中查找资源时,ResourceManager会自动使用位于主程序集中的资源,而不是搜索具有当前线程用户界面文化的卫星程序集。NeutralResourcesLanguage属性可提高首次加载资源的查找性能并减少工作集。

来自 http://technet.microsoft.com/en-us/subscriptions/bb385967.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接