Skip to content

Commit 86d2e31

Browse files
committed
Merge pull request #895 from iaesaudi/iaesaudi-RTL-Arabic
RTL layout Support + Arabic Translation
2 parents 648918d + 5bce28d commit 86d2e31

File tree

2 files changed

+247
-11
lines changed

2 files changed

+247
-11
lines changed

js/jquery.validationEngine.js

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1696,13 +1696,26 @@
16961696
}
16971697

16981698
var pos = methods._calculatePosition(field, prompt, options);
1699-
prompt.css({
1700-
'position': positionType === 'inline' ? 'relative' : 'absolute',
1701-
"top": pos.callerTopPosition,
1702-
"left": pos.callerleftPosition,
1703-
"marginTop": pos.marginTopSize,
1704-
"opacity": 0
1705-
}).data("callerField", field);
1699+
// Support RTL layouts by @yasser_lotfy ( Yasser Lotfy )
1700+
if ($('body').hasClass('rtl')) {
1701+
prompt.css({
1702+
'position': positionType === 'inline' ? 'relative' : 'absolute',
1703+
"top": pos.callerTopPosition,
1704+
"left": "initial",
1705+
"right": pos.callerleftPosition,
1706+
"marginTop": pos.marginTopSize,
1707+
"opacity": 0
1708+
}).data("callerField", field);
1709+
} else {
1710+
prompt.css({
1711+
'position': positionType === 'inline' ? 'relative' : 'absolute',
1712+
"top": pos.callerTopPosition,
1713+
"left": pos.callerleftPosition,
1714+
"right": "initial",
1715+
"marginTop": pos.marginTopSize,
1716+
"opacity": 0
1717+
}).data("callerField", field);
1718+
}
17061719

17071720

17081721
if (options.autoHidePrompt) {
@@ -1748,10 +1761,20 @@
17481761
prompt.find(".formErrorContent").html(promptText);
17491762

17501763
var pos = methods._calculatePosition(field, prompt, options);
1751-
var css = {"top": pos.callerTopPosition,
1752-
"left": pos.callerleftPosition,
1753-
"marginTop": pos.marginTopSize,
1754-
"opacity": 0.87};
1764+
// Support RTL layouts by @yasser_lotfy ( Yasser Lotfy )
1765+
if ($('body').hasClass('rtl')) {
1766+
var css = {"top": pos.callerTopPosition,
1767+
"left": "initial",
1768+
"right": pos.callerleftPosition,
1769+
"marginTop": pos.marginTopSize,
1770+
"opacity": 0.87};
1771+
} else {
1772+
var css = {"top": pos.callerTopPosition,
1773+
"left": pos.callerleftPosition,
1774+
"right": "initial",
1775+
"marginTop": pos.marginTopSize,
1776+
"opacity": 0.87};
1777+
}
17551778

17561779
prompt.css({
17571780
"opacity": 0,
Lines changed: 213 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,213 @@
1+
/*****************************************************************
2+
* Arabic language file for jquery.validationEngine.js (ver2.6.x)
3+
*
4+
* Transrator: @yasser_lotfy ( Yasser Lotfy )
5+
* http://be.net/YasserLotfy
6+
* Licenced under the MIT Licence
7+
*******************************************************************/
8+
(function($){
9+
$.fn.validationEngineLanguage = function(){
10+
};
11+
$.validationEngineLanguage = {
12+
newLang: function(){
13+
$.validationEngineLanguage.allRules = {
14+
"required": { // Add your regex rules here, you can take telephone as an example
15+
"regex": "none",
16+
"alertText": "* هذا الحقل مطلوب",
17+
"alertTextCheckboxMultiple": "* برجاء إختيار إحدى الخيارات",
18+
"alertTextCheckboxe": "* هذا المربع الإختياري مطلوب",
19+
"alertTextDateRange": "* كلا حقلين نطاق التاريخ مطلوبة"
20+
},
21+
"requiredInFunction": {
22+
"func": function(field, rules, i, options){
23+
return (field.val() == "test") ? true : false;
24+
},
25+
"alertText": "* الحقل يجب أن يساوى test"
26+
},
27+
"dateRange": {
28+
"regex": "none",
29+
"alertText": "* غير صالح ",
30+
"alertText2": "نطاق التاريخ"
31+
},
32+
"dateTimeRange": {
33+
"regex": "none",
34+
"alertText": "* غير صالح ",
35+
"alertText2": "نطاق التاريخ والوقت"
36+
},
37+
"minSize": {
38+
"regex": "none",
39+
"alertText": "* على الأقل ",
40+
"alertText2": " حروف مطلوبة"
41+
},
42+
"maxSize": {
43+
"regex": "none",
44+
"alertText": "* على الأكثر ",
45+
"alertText2": " حروف مسموحة"
46+
},
47+
"groupRequired": {
48+
"regex": "none",
49+
"alertText": "* يجب عليك ملئ إحدى الحقول التالية",
50+
"alertTextCheckboxMultiple": "* برجاء إختيار إحدى الخيارات",
51+
"alertTextCheckboxe": "* هذا المربع الإختياري مطلوب"
52+
},
53+
"min": {
54+
"regex": "none",
55+
"alertText": "* الحد الأدنى للقيمة هو "
56+
},
57+
"max": {
58+
"regex": "none",
59+
"alertText": "* الحد الأقصى للقيمة هو "
60+
},
61+
"past": {
62+
"regex": "none",
63+
"alertText": "* التاريخ قبل "
64+
},
65+
"future": {
66+
"regex": "none",
67+
"alertText": "* التاريخ بعد "
68+
},
69+
"maxCheckbox": {
70+
"regex": "none",
71+
"alertText": "* على الأكثر ",
72+
"alertText2": " خيارات مسموحة"
73+
},
74+
"minCheckbox": {
75+
"regex": "none",
76+
"alertText": "* برجاء إختيار ",
77+
"alertText2": " خيارات"
78+
},
79+
"equals": {
80+
"regex": "none",
81+
"alertText": "* الحقول غير متساوية"
82+
},
83+
"creditCard": {
84+
"regex": "none",
85+
"alertText": "* رقم بطاقة الإتمان غير صالح"
86+
},
87+
"phone": {
88+
// credit: jquery.h5validate.js / orefalo
89+
"regex": /^([\+][0-9]{1,3}([ \.\-])?)?([\(][0-9]{1,6}[\)])?([0-9 \.\-]{1,32})(([A-Za-z \:]{1,11})?[0-9]{1,4}?)$/,
90+
"alertText": "* رقم الهاتف غير صالح"
91+
},
92+
"email": {
93+
// 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 )
94+
"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,}))$/,
95+
"alertText": "* عنوان بريد إلكتروني غير صالح"
96+
},
97+
"fullname": {
98+
"regex":/^([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]*)+[ ]([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]+)+$/,
99+
"alertText":"* يجب أن يكون الإسم الأول والأخير"
100+
},
101+
"zip": {
102+
"regex":/^\d{5}$|^\d{5}-\d{4}$/,
103+
"alertText":"* صيغة الرمز البريدي غير صالحة"
104+
},
105+
"integer": {
106+
"regex": /^[\-\+]?\d+$/,
107+
"alertText": "* هذا ليس عدد صحيح صالح"
108+
},
109+
"number": {
110+
// Number, including positive, negative, and floating decimal. credit: orefalo
111+
"regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/,
112+
"alertText": "* عدد عشري غير صالح"
113+
},
114+
"date": {
115+
// Check if date is valid by leap year
116+
"func": function (field) {
117+
var pattern = new RegExp(/^(\d{4})[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/);
118+
var match = pattern.exec(field.val());
119+
if (match == null)
120+
return false;
121+
122+
var year = match[1];
123+
var month = match[2]*1;
124+
var day = match[3]*1;
125+
var date = new Date(year, month - 1, day); // because months starts from 0.
126+
127+
return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day);
128+
},
129+
"alertText": "* تاريخ غير صالح، يجب أن يكون في هيئة YYYY-MM-DD"
130+
},
131+
"ipv4": {
132+
"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]))$/,
133+
"alertText": "* عنوان IP غير صالح"
134+
},
135+
"url": {
136+
"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,
137+
"alertText": "* عنوان إلكتروني غير صالح"
138+
},
139+
"onlyNumberSp": {
140+
"regex": /^[0-9\ ]+$/,
141+
"alertText": "* أرقام فقط"
142+
},
143+
"onlyLetterSp": {
144+
"regex": /^[a-zA-Z\ \']+$/,
145+
"alertText": "* حروف فقط"
146+
},
147+
"onlyLetterAccentSp": {
148+
"regex": /^[a-z\u00C0-\u017F\ ]+$/i,
149+
"alertText": "* حروف فقط (مسموح بالنبرات)"
150+
},
151+
"onlyLetterNumber": {
152+
"regex": /^[0-9a-zA-Z]+$/,
153+
"alertText": "* غير مسموح بحروف خاصة"
154+
},
155+
// --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings
156+
"ajaxUserCall": {
157+
"url": "ajaxValidateFieldUser",
158+
// you may want to pass extra data on the ajax call
159+
"extraData": "name=eric",
160+
"alertText": "* هذا المستخدم بالفعل موجود",
161+
"alertTextLoad": "* جاري التحقق، برجاء الإنتظار"
162+
},
163+
"ajaxUserCallPhp": {
164+
"url": "phpajax/ajaxValidateFieldUser.php",
165+
// you may want to pass extra data on the ajax call
166+
"extraData": "name=eric",
167+
// if you provide an "alertTextOk", it will show as a green prompt when the field validates
168+
"alertTextOk": "* إسم المستخدم هذا متاح",
169+
"alertText": "* هذا المستخدم بالفعل موجود",
170+
"alertTextLoad": "* جاري التحقق، برجاء الإنتظار"
171+
},
172+
"ajaxNameCall": {
173+
// remote json service location
174+
"url": "ajaxValidateFieldName",
175+
// error
176+
"alertText": "* هذا الإسم موجود بالفعل",
177+
// if you provide an "alertTextOk", it will show as a green prompt when the field validates
178+
"alertTextOk": "* هذا الإسم متاح",
179+
// speaks by itself
180+
"alertTextLoad": "* جاري التحقق، برجاء الإنتظار"
181+
},
182+
"ajaxNameCallPhp": {
183+
// remote json service location
184+
"url": "phpajax/ajaxValidateFieldName.php",
185+
// error
186+
"alertText": "* هذا الإسم موجود بالفعل",
187+
// speaks by itself
188+
"alertTextLoad": "* جاري التحقق، برجاء الإنتظار"
189+
},
190+
"validate2fields": {
191+
"alertText": "* برجاء إدخال HELLO"
192+
},
193+
//tls warning:homegrown not fielded
194+
"dateFormat":{
195+
"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]))$/,
196+
"alertText": "* تاريخ غير صالح"
197+
},
198+
//tls warning:homegrown not fielded
199+
"dateTimeFormat": {
200+
"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})$/,
201+
"alertText": "* التاريخ أو هيئة التاريخ غير صالحة",
202+
"alertText2": "الهيئة المتوقعة: ",
203+
"alertText3": "mm/dd/yyyy hh:mm:ss AM|PM أو ",
204+
"alertText4": "yyyy-mm-dd hh:mm:ss AM|PM"
205+
}
206+
};
207+
208+
}
209+
};
210+
211+
$.validationEngineLanguage.newLang();
212+
213+
})(jQuery);

0 commit comments

Comments
 (0)