2

我有框架支持本地化的 ASP.NET MVC (4) 项目。如果我将浏览器设置更改为另一种语言,框架会自动选择正确的资源文件。

但是,因为我使用的是 knockoutjs,所以我在这些视图中回退到 jQuery 验证。不幸的是,那里没有自动支持本地化。

我的问题是 - 自定义和本地化 jQuery 验证消息的最佳实践和方法是什么,以便它们与所有 MVC 资源一起自动选择?

jQuery 验证消息的行为方式与给定资源和消息 ID 的数据注释消息类似。

尤其 -

  1. 如何让 jQuery从资源中获取我想要的消息,而不是默认的“此字段是必需的”,因此它将打印类似“请输入电子邮件”和

  2. 如果我更改浏览器语言,如何让 jQuery自动以另一种语言打印相同的自定义消息?

先感谢您。

4

2 回答 2

7

1)如何让 jQuery 从资源中获取我想要的消息,而不是默认的“此字段是必需的”,因此它将打印“请输入电子邮件”之类的内容。

随时调用以下内容来覆盖消息。下面的字符串可以用变量替换。

jQuery.extend(jQuery.validator.messages, {
    required: "This field is required.",
    remote: "Please fix this field.",
    email: "Please enter a valid email address.",
    url: "Please enter a valid URL.",
    date: "Please enter a valid date.",
    dateISO: "Please enter a valid date (ISO).",
    number: "Please enter a valid number.",
    digits: "Please enter only digits.",
    creditcard: "Please enter a valid credit card number.",
    equalTo: "Please enter the same value again.",
    accept: "Please enter a value with a valid extension.",
    maxlength: jQuery.validator.format("Please enter no more than {0} characters."),
    minlength: jQuery.validator.format("Please enter at least {0} characters."),
    rangelength: jQuery.validator.format("Please enter a value between {0} and {1} characters long."),
    range: jQuery.validator.format("Please enter a value between {0} and {1}."),
    max: jQuery.validator.format("Please enter a value less than or equal to {0}."),
    min: jQuery.validator.format("Please enter a value greater than or equal to {0}.")
});

否则,您可以在.validate().

$(document).ready(function () {

    $('#myform').validate({ // initialize the plugin
        rules: {
            field1: {
                required: true,
                minlength: 5
            }
        },
        messages: {
            field1: {
                required: "custom message for field 1 required",
                minlength: "custom message: {0} chars required"
            }
        }
    });

});

演示:http: //jsfiddle.net/XV3ZR/

要在插件首次初始化动态更改任何消息需要使用方法覆盖。rules('add')

$('#field1').rules('add', {
    messages: {
        required: "field 1 required",
        minlength: "{0} chars required"
    }
});

演示 2:http: //jsfiddle.net/PJGgE/1/

2)如果我更改浏览器语言,如何让 jQuery 自动以另一种语言打印相同的自定义消息?

我不确定您所说的“更改浏览器语言”是什么意思,但同样,上面#1 中的方法是唯一的方法,AFAIK。这些只是字符串,您必须手动或通过外部方法翻译它们。

于 2013-03-10T19:26:40.107 回答
0

我认为您可以在服务器上将本地化的客户端脚本文件提供给客户端的浏览器设置(类似于 i18n)

于 2013-03-10T19:27:42.193 回答