12

如何根据用户的浏览器自动设置 ui 的文化?我发现的只是Globalize.culture("pt-BR");但它设置pt-BR为默认值,我不想默认设置它!如果用户是 pt-BR,我只想设置它!我怎样才能做到这一点?还有验证器方法,我如何为特定的文化设置它们?

4

2 回答 2

20

在 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 部分(最小值和最大值的自定义方法)

$.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

于 2012-11-25T12:25:40.847 回答
1

您需要从网页(或母版页)写出脚本:

<script type="text/javascript">
    Globalize.culture("<% = CultureInfo.CurrentCulture.ToString() %>");
</script>

而已。请注意,我使用CurrentCulture的是CurrentUICulture,因为这是您应该用于格式化的内容。如果您需要翻译(我不会这样做,因为这会损害本地化),您将需要您的原始CurrentUICulture.

于 2012-11-25T20:00:40.897 回答