翻译自定义jQuery验证消息

时间:2016-09-22 04:39:27

标签: jquery localization jquery-validate translation

关于jQuery验证我有一个问题plugin

我使用本地化来更改要以西班牙语显示的错误消息的默认语言,但我找不到任何有关要翻译的自定义消息的信息。有线索吗?

例如

我已经包含了西班牙语的翻译文件,这是我的代码:

$('.signup-form').validate({
    lang : 'es',
    rules:{
        tandc : {required : true}
    },
    messages:{
        tandc : {required : "You have to accept terms and conditions to proceed further"}
    }
})

“需要此字段”等默认消息以西班牙语出现,现在我想将上述消息翻译成西班牙语,但我找不到在何处以及如何定义翻译文本。

3 个答案:

答案 0 :(得分:14)

插件没有“翻译”任何东西。翻译是手动完成的,然后您将这些新消息放入a localization file,以覆盖默认值。

.validate() option还有<{strong> in this plugin名为lang {/ 3}}。

使用本地化文件只是意味着在包含插件后将文件包含在某个地方......

<script type="text/javascript" src="...path-to/jquery.validation/1.15.0/jquery.validate.js" />
<script type="text/javascript" src="...path-to/jquery-validation/localization/messages_es.js" />

然后所有默认消息都将使用西班牙语。

  

“需要此字段”等默认消息以西班牙语出现,现在我想将上述消息翻译成西班牙语,但我找不到在何处以及如何定义翻译文本。

包括西班牙语本地化文件只是告诉插件替换西班牙语本地化文件定义的默认消息。

您的messages对象会覆盖这些默认消息,因此如果您希望西班牙语消息仅覆盖单个输入字段的required规则,那么您需要编写该消息一个用西班牙语。 没有内置的动态翻译可以动态解释您的消息。

rules:{
    tandc : {
        required : true
    }
},
messages:{
    tandc : {
        required : "Tienes que aceptar los términos y condiciones de seguir avanzando"
    }
}

这是所用信息的优先级:

  1. 使用messages内的.validate()对象或类似方法,按规则或整个字段为单个字段声明的任何文字。

  2. 如果第1项中没有定义:$.extend( $.validator.messages, {...})定义的覆盖插件默认消息。这就是本地化文件的工作方式。

  3. 如果第2项中没有定义:插件定义的默认消息(英文)。

  4. 现在,如果您需要 动态 ,请在messages初始化表单上的插件后更改.validate()对象定义的任何消息,你必须使用.rules('add')方法来覆盖它。

    $('[name="foo"]').rules('add', {
        messages: {
            required: "yo! I'm required."
        }
    });
    

    DEMO:jsfiddle.net/3fLkf47u/

答案 1 :(得分:0)

所以我做了一个简单的脚本,根据接受的答案翻译验证消息

function translateValidationMessages(currentLang) {
  message = {
    en: {
      required: "Required.",
      remote: "Please fix this field.",
      email: "Wrong email.",
      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.",
      maxlength: $.validator.format("Please enter no more than {0} characters."),
      minlength: $.validator.format("Please enter at least {0} characters."),
      rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
      range: $.validator.format("Please enter a value between {0} and {1}."),
      max: $.validator.format("Please enter a value less than or equal to {0}."),
      min: $.validator.format("Please enter a value greater than or equal to {0}.")
    },
    et: {
      required: "See väli peab olema täidetud.",
      maxlength: $.validator.format("Palun sisestage vähem kui {0} tähemärki."),
      minlength: $.validator.format("Palun sisestage vähemalt {0} tähemärki."),
      rangelength: $.validator.format("Palun sisestage väärtus vahemikus {0} kuni {1} tähemärki."),
      email: "Palun sisestage korrektne e-maili aadress.",
      url: "Palun sisestage korrektne URL.",
      date: "Palun sisestage korrektne kuupäev.",
      dateISO: "Palun sisestage korrektne kuupäev (YYYY-MM-DD).",
      number: "Palun sisestage korrektne number.",
      digits: "Palun sisestage ainult numbreid.",
      equalTo: "Palun sisestage sama väärtus uuesti.",
      range: $.validator.format("Palun sisestage väärtus vahemikus {0} kuni {1}."),
      max: $.validator.format("Palun sisestage väärtus, mis on väiksem või võrdne arvuga {0}."),
      min: $.validator.format("Palun sisestage väärtus, mis on suurem või võrdne arvuga {0}."),
      creditcard: "Palun sisestage korrektne krediitkaardi number."
    }
  };
    console.log("Translating validation messages to: "+currentLang);

  if (currentLang == "et") {
    $.extend($.validator.messages, message.et);
  } else {
    $.extend($.validator.messages, message.en);
  }

例如,当更改语言下拉菜单时,可以调用此函数

 $("#lang").change(function() {
        translateValidationMessages(this.value)
        console.log("Setting language to " + this.value);
      });

希望这对某人有帮助

答案 2 :(得分:0)

您可以使用名为abValidate的jQuery库,该库可以提供本地化的验证错误消息。

示例:

$(document).ready(function () {
    $(".ab-form").abValidate({
        color: "#556b2f",
        backgroundColor: "white",
        debug: true
    });
});
<html>
   <head>
      <link rel="stylesheet" href="https://aslamanver.github.io/abvalidate/abValidate.css">
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <script src="https://aslamanver.github.io/abvalidate/abValidate.min.js"></script>
   </head>
   <body>
      <form class="ab-form" action="#">
         <div class="form-group">
            <input type="text" ab-validation="required|Hey dude you missed that,min:5| No no you want to type more"
               name="name" class="ab-validation-i" />
            <div class="error"></div>
         </div>
         <br>
         <div class="form-group">
            <input type="submit" name="submit" value="Submit">
         </div>
      </form>
   </body>
</html>

使用abValidate库初始化for之后,您只想用HTML编写以下内容。

<input type="text" name="name" ab-validation="required|Hey dude you missed that,min:5| No no you want to type more" class="ab-validation-i" />

abValidate -Github链接:
https://github.com/aslamanver/abvalidate

参考:
https://medium.com/@aslamanver/localized-custom-validation-messages-jquery-2892e021648f