如何根据用户的浏览器自动设置ui的文化?
我发现的所有内容都是Globalize.culture("pt-BR");
但它将pt-BR
设置为默认值,我不希望默认设置此项!如果用户是pt-BR,我只想设置这个!
我怎样才能做到这一点?验证方法,如何为特定文化设置它们?
答案 0 :(得分:19)
在ASP.NET MVC中,web.config
是正确的位置。有一个快速摘要,第一个片段显示,怎么可能是例如强迫pt-BR
文化
<globalization
enableClientBasedCulture="false"
uiCulture="pt-BR"
culture="pt-BR" />
如果应用程序已准备好接受来自客户端(浏览器)的文化,则设置应为
<globalization
enableClientBasedCulture="true"
uiCulture="auto"
culture="auto" />
以上设置将在客户端浏览器中选择语言(例如,在我的情况下为cs-CZ
)。如果未定义,则将使用系统设置。
最后的代码段显示了如何允许客户端设置和发送预期的文化,但如果没有预先选择语言,请使用其他一些默认值覆盖系统设置 pt-BR 强>
<globalization
enableClientBasedCulture="true"
uiCulture="auto:pt-BR"
culture="auto:pt-BR" />
扩展:jQuery
validator
的文化设置和数字输入
注意:我绝对不是jQuery
和全球化技术方面的专家。这是我如何调整validator
以正确处理任何数字输入
razor查看部件(X()
是new HtmlString()
)的快捷方式:
var defaultThousandSeprator = "@X(culture.NumberFormat.NumberGroupSeparator)";
var defaultDecimalSeprator = "@X(culture.NumberFormat.NumberDecimalSeparator)";
jQuery部分(min和max的自定义方法)
$.validator.addMethod("min", function (value, element, param)
{
var num = value.replace(RegExp(" ", "g"), "") // remove spaces
.replace(RegExp('\\' + defaultThousandSeprator, "g"), "") // thousand separator
.replace(RegExp("\\" + defaultDecimalSeprator, "g"), "."); // fix decimals
return this.optional(element) || num >= param;
});
$.validator.addMethod("max", function (value, element, param)
{
var num = value.replace(RegExp(" ", "g"), "") // remove spaces
.replace(RegExp('\\' + defaultThousandSeprator, "g"), "") // thousands
.replace(RegExp("\\" + defaultDecimalSeprator, "g"), "."); // decimals
return this.optional(element) || num <= param;
});
然后jQuery.validator正确评估 cs-CZ 的输入值:10 000,00
以及 en-US :10,000.00
。< / p>
答案 1 :(得分:1)
您需要从网页(或母版页)中写出脚本:
<script type="text/javascript">
Globalize.culture("<% = CultureInfo.CurrentCulture.ToString() %>");
</script>
就是这样。请注意,我使用的是CurrentCulture
而不是CurrentUICulture
,因为这是您应该用于格式化的内容。如果您需要翻译(我不会这样做,因为它会损害本地化),您将需要原始的CurrentUICulture
。