Skip to content

Commit

Permalink
Merge pull request #895 from iaesaudi/iaesaudi-RTL-Arabic
Browse files Browse the repository at this point in the history
RTL layout Support + Arabic Translation
  • Loading branch information
posabsolute committed Oct 10, 2015
2 parents 648918d + 5bce28d commit 86d2e31
Show file tree
Hide file tree
Showing 2 changed files with 247 additions and 11 deletions.
45 changes: 34 additions & 11 deletions js/jquery.validationEngine.js
Original file line number Diff line number Diff line change
Expand Up @@ -1696,13 +1696,26 @@
}

var pos = methods._calculatePosition(field, prompt, options);
prompt.css({
'position': positionType === 'inline' ? 'relative' : 'absolute',
"top": pos.callerTopPosition,
"left": pos.callerleftPosition,
"marginTop": pos.marginTopSize,
"opacity": 0
}).data("callerField", field);
// Support RTL layouts by @yasser_lotfy ( Yasser Lotfy )
if ($('body').hasClass('rtl')) {
prompt.css({
'position': positionType === 'inline' ? 'relative' : 'absolute',
"top": pos.callerTopPosition,
"left": "initial",
"right": pos.callerleftPosition,
"marginTop": pos.marginTopSize,
"opacity": 0
}).data("callerField", field);
} else {
prompt.css({
'position': positionType === 'inline' ? 'relative' : 'absolute',
"top": pos.callerTopPosition,
"left": pos.callerleftPosition,
"right": "initial",
"marginTop": pos.marginTopSize,
"opacity": 0
}).data("callerField", field);
}


if (options.autoHidePrompt) {
Expand Down Expand Up @@ -1748,10 +1761,20 @@
prompt.find(".formErrorContent").html(promptText);

var pos = methods._calculatePosition(field, prompt, options);
var css = {"top": pos.callerTopPosition,
"left": pos.callerleftPosition,
"marginTop": pos.marginTopSize,
"opacity": 0.87};
// Support RTL layouts by @yasser_lotfy ( Yasser Lotfy )
if ($('body').hasClass('rtl')) {
var css = {"top": pos.callerTopPosition,
"left": "initial",
"right": pos.callerleftPosition,
"marginTop": pos.marginTopSize,
"opacity": 0.87};
} else {
var css = {"top": pos.callerTopPosition,
"left": pos.callerleftPosition,
"right": "initial",
"marginTop": pos.marginTopSize,
"opacity": 0.87};
}

prompt.css({
"opacity": 0,
Expand Down
213 changes: 213 additions & 0 deletions js/languages/jquery.validationEngine-ar.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
/*****************************************************************
* Arabic language file for jquery.validationEngine.js (ver2.6.x)
*
* Transrator: @yasser_lotfy ( Yasser Lotfy )
* http://be.net/YasserLotfy
* Licenced under the MIT Licence
*******************************************************************/
(function($){
$.fn.validationEngineLanguage = function(){
};
$.validationEngineLanguage = {
newLang: function(){
$.validationEngineLanguage.allRules = {
"required": { // Add your regex rules here, you can take telephone as an example
"regex": "none",
"alertText": "* هذا الحقل مطلوب",
"alertTextCheckboxMultiple": "* برجاء إختيار إحدى الخيارات",
"alertTextCheckboxe": "* هذا المربع الإختياري مطلوب",
"alertTextDateRange": "* كلا حقلين نطاق التاريخ مطلوبة"
},
"requiredInFunction": {
"func": function(field, rules, i, options){
return (field.val() == "test") ? true : false;
},
"alertText": "* الحقل يجب أن يساوى test"
},
"dateRange": {
"regex": "none",
"alertText": "* غير صالح ",
"alertText2": "نطاق التاريخ"
},
"dateTimeRange": {
"regex": "none",
"alertText": "* غير صالح ",
"alertText2": "نطاق التاريخ والوقت"
},
"minSize": {
"regex": "none",
"alertText": "* على الأقل ",
"alertText2": " حروف مطلوبة"
},
"maxSize": {
"regex": "none",
"alertText": "* على الأكثر ",
"alertText2": " حروف مسموحة"
},
"groupRequired": {
"regex": "none",
"alertText": "* يجب عليك ملئ إحدى الحقول التالية",
"alertTextCheckboxMultiple": "* برجاء إختيار إحدى الخيارات",
"alertTextCheckboxe": "* هذا المربع الإختياري مطلوب"
},
"min": {
"regex": "none",
"alertText": "* الحد الأدنى للقيمة هو "
},
"max": {
"regex": "none",
"alertText": "* الحد الأقصى للقيمة هو "
},
"past": {
"regex": "none",
"alertText": "* التاريخ قبل "
},
"future": {
"regex": "none",
"alertText": "* التاريخ بعد "
},
"maxCheckbox": {
"regex": "none",
"alertText": "* على الأكثر ",
"alertText2": " خيارات مسموحة"
},
"minCheckbox": {
"regex": "none",
"alertText": "* برجاء إختيار ",
"alertText2": " خيارات"
},
"equals": {
"regex": "none",
"alertText": "* الحقول غير متساوية"
},
"creditCard": {
"regex": "none",
"alertText": "* رقم بطاقة الإتمان غير صالح"
},
"phone": {
// credit: jquery.h5validate.js / orefalo
"regex": /^([\+][0-9]{1,3}([ \.\-])?)?([\(][0-9]{1,6}[\)])?([0-9 \.\-]{1,32})(([A-Za-z \:]{1,11})?[0-9]{1,4}?)$/,
"alertText": "* رقم الهاتف غير صالح"
},
"email": {
// HTML5 compatible email regex ( http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html# e-mail-state-%28type=email%29 )
"regex": /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
"alertText": "* عنوان بريد إلكتروني غير صالح"
},
"fullname": {
"regex":/^([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]*)+[ ]([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]+)+$/,
"alertText":"* يجب أن يكون الإسم الأول والأخير"
},
"zip": {
"regex":/^\d{5}$|^\d{5}-\d{4}$/,
"alertText":"* صيغة الرمز البريدي غير صالحة"
},
"integer": {
"regex": /^[\-\+]?\d+$/,
"alertText": "* هذا ليس عدد صحيح صالح"
},
"number": {
// Number, including positive, negative, and floating decimal. credit: orefalo
"regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/,
"alertText": "* عدد عشري غير صالح"
},
"date": {
// Check if date is valid by leap year
"func": function (field) {
var pattern = new RegExp(/^(\d{4})[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/);
var match = pattern.exec(field.val());
if (match == null)
return false;

var year = match[1];
var month = match[2]*1;
var day = match[3]*1;
var date = new Date(year, month - 1, day); // because months starts from 0.

return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day);
},
"alertText": "* تاريخ غير صالح، يجب أن يكون في هيئة YYYY-MM-DD"
},
"ipv4": {
"regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/,
"alertText": "* عنوان IP غير صالح"
},
"url": {
"regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i,
"alertText": "* عنوان إلكتروني غير صالح"
},
"onlyNumberSp": {
"regex": /^[0-9\ ]+$/,
"alertText": "* أرقام فقط"
},
"onlyLetterSp": {
"regex": /^[a-zA-Z\ \']+$/,
"alertText": "* حروف فقط"
},
"onlyLetterAccentSp": {
"regex": /^[a-z\u00C0-\u017F\ ]+$/i,
"alertText": "* حروف فقط (مسموح بالنبرات)"
},
"onlyLetterNumber": {
"regex": /^[0-9a-zA-Z]+$/,
"alertText": "* غير مسموح بحروف خاصة"
},
// --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings
"ajaxUserCall": {
"url": "ajaxValidateFieldUser",
// you may want to pass extra data on the ajax call
"extraData": "name=eric",
"alertText": "* هذا المستخدم بالفعل موجود",
"alertTextLoad": "* جاري التحقق، برجاء الإنتظار"
},
"ajaxUserCallPhp": {
"url": "phpajax/ajaxValidateFieldUser.php",
// you may want to pass extra data on the ajax call
"extraData": "name=eric",
// if you provide an "alertTextOk", it will show as a green prompt when the field validates
"alertTextOk": "* إسم المستخدم هذا متاح",
"alertText": "* هذا المستخدم بالفعل موجود",
"alertTextLoad": "* جاري التحقق، برجاء الإنتظار"
},
"ajaxNameCall": {
// remote json service location
"url": "ajaxValidateFieldName",
// error
"alertText": "* هذا الإسم موجود بالفعل",
// if you provide an "alertTextOk", it will show as a green prompt when the field validates
"alertTextOk": "* هذا الإسم متاح",
// speaks by itself
"alertTextLoad": "* جاري التحقق، برجاء الإنتظار"
},
"ajaxNameCallPhp": {
// remote json service location
"url": "phpajax/ajaxValidateFieldName.php",
// error
"alertText": "* هذا الإسم موجود بالفعل",
// speaks by itself
"alertTextLoad": "* جاري التحقق، برجاء الإنتظار"
},
"validate2fields": {
"alertText": "* برجاء إدخال HELLO"
},
//tls warning:homegrown not fielded
"dateFormat":{
"regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/,
"alertText": "* تاريخ غير صالح"
},
//tls warning:homegrown not fielded
"dateTimeFormat": {
"regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/,
"alertText": "* التاريخ أو هيئة التاريخ غير صالحة",
"alertText2": "الهيئة المتوقعة: ",
"alertText3": "mm/dd/yyyy hh:mm:ss AM|PM أو ",
"alertText4": "yyyy-mm-dd hh:mm:ss AM|PM"
}
};

}
};

$.validationEngineLanguage.newLang();

})(jQuery);

1 comment on commit 86d2e31

@iaesaudi
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I missed to include the new request, check it here please #900.

Please sign in to comment.