PDA

View Full Version : فارس کردن تکست باکس



NIMA_1981
سه شنبه 25 مرداد 1390, 12:19 عصر
سلام دوستان

من تو سایت کلی گشتم جند تا کد پیدا کردم که تکست باکس رو فارسی کنه اما هیچ کدومش کار نیمی کنه میشه راهنمایی کنید که جطور میشه یک تکست باکس داشت که فقط فارسی بنویسه بدون نیاز به تغییر زبان از روی سیستم

NIMA_1981
سه شنبه 25 مرداد 1390, 12:42 عصر
من از این کد هم استفاده کردم اما نمیشه


// JavaScript Document
var lang = 1; // 1: Farsi, 0: English
// Farsi keyboard map based on ISIRI-2901
var farsikey = [
0x0020, 0x0021, 0x061B, 0x066B, 0x00A4, 0x066A, 0x060C, 0x06AF,
0x0029, 0x0028, 0x002A, 0x002B, 0x0648, 0x002D, 0x002E, 0x002F,
0x06F0, 0x06F1, 0x06F2, 0x06F3, 0x06F4, 0x06F5, 0x06F6, 0x06F7,
0x06F8, 0x06F9, 0x003A, 0x06A9, 0x003E, 0x003D, 0x003C, 0x061F,
0x066C, 0x0624, 0x200C, 0x0698, 0x064A, 0x064D, 0x0625, 0x0623,
0x0622, 0x0651, 0x0629, 0x00BB, 0x00AB, 0x0621, 0x004E, 0x005D,
0x005B, 0x0652, 0x064B, 0x0626, 0x064F, 0x064E, 0x0056, 0x064C,
0x0058, 0x0650, 0x0643, 0x062C, 0x005C, 0x0686, 0x00D7, 0x0640,
0x200D, 0x0634, 0x0630, 0x0632, 0x064A, 0x062B, 0x0628, 0x0644,
0x0627, 0x0647, 0x062A, 0x0646, 0x0645, 0x067E, 0x062F, 0x062E,
0x062D, 0x0636, 0x0642, 0x0633, 0x0641, 0x0639, 0x0631, 0x0635,
0x0637, 0x063A, 0x0638, 0x007D, 0x007C, 0x007B, 0x007E
];
// on Alt+Shift, switch language
function FKeyDown(){
if (window.event.shiftKey && window.event.altKey) {
if (lang == 0) {
lang = 1;
window.defaultStatus = "Farsi Mode";
}
else {
lang = 0;
window.defaultStatus = "English Mode";
}
return false;
}
return true;
}
// change the Farsi
function FKeyPress(){
var key = window.event.keyCode;
// Avoid processing if control or higher than ASCII (i.e., in Arabic Windows)
if (key < 0x0020 || key >= 0x00FF) return;
if (lang == 1) { //If Farsi
if (key == 0x0020 && window.event.shiftKey) // Shift-space -> ZWNJ
window.event.keyCode = 0x200C;
else {
if (key==96) {
window.event.keyCode = farsikey[109 - 0x0020];
}
else {
if (key==92) {
window.event.keyCode = farsikey[67 - 0x0020];
}
else {
window.event.keyCode = farsikey[key - 0x0020];
}
}
}
}
return true;
}

amin1softco
سه شنبه 25 مرداد 1390, 15:26 عصر
این کد شما برای مرورگر اینترنت اکسپلورر بدون مشکل اجرا می شه ولی خوب روی موزیلا باید event.which رو از کاربر دریافت کنید:


<script type ="text/javascript">

var lang = 1; // 1: Farsi, 0: English
// Farsi keyboard map based on ISIRI-2901
var farsikey = [
0x0020, 0x0021, 0x061B, 0x066B, 0x00A4, 0x066A, 0x060C, 0x06AF,
0x0029, 0x0028, 0x002A, 0x002B, 0x0648, 0x002D, 0x002E, 0x002F,
0x06F0, 0x06F1, 0x06F2, 0x06F3, 0x06F4, 0x06F5, 0x06F6, 0x06F7,
0x06F8, 0x06F9, 0x003A, 0x06A9, 0x003E, 0x003D, 0x003C, 0x061F,
0x066C, 0x0624, 0x200C, 0x0698, 0x064A, 0x064D, 0x0625, 0x0623,
0x0622, 0x0651, 0x0629, 0x00BB, 0x00AB, 0x0621, 0x004E, 0x005D,
0x005B, 0x0652, 0x064B, 0x0626, 0x064F, 0x064E, 0x0056, 0x064C,
0x0058, 0x0650, 0x0643, 0x062C, 0x005C, 0x0686, 0x00D7, 0x0640,
0x200D, 0x0634, 0x0630, 0x0632, 0x064A, 0x062B, 0x0628, 0x0644,
0x0627, 0x0647, 0x062A, 0x0646, 0x0645, 0x067E, 0x062F, 0x062E,
0x062D, 0x0636, 0x0642, 0x0633, 0x0641, 0x0639, 0x0631, 0x0635,
0x0637, 0x063A, 0x0638, 0x007D, 0x007C, 0x007B, 0x007E
];
// on Alt+Shift, switch language
function FKeyDown(){
if (window.event.shiftKey && window.event.altKey) {
if (lang == 0) {
lang = 1;
window.defaultStatus = "Farsi Mode";
}
else {
lang = 0;
window.defaultStatus = "English Mode";
}
return false;
}
return true;
}
// change the Farsi
function FKeyPress(){
var key;
if(window.event.keyCode){
key = window.event.keyCode;
}else if(window.event.which){
key = window.event.which;
}

// Avoid processing if control or higher than ASCII (i.e., in Arabic Windows)

if (key < 0x0020 || key >= 0x00FF) return;
if (lang == 1) { //If Farsi
if (key == 0x0020 && window.event.shiftKey) // Shift-space -> ZWNJ
window.event.keyCode = 0x200C;
else {
if (key==96) {
window.event.keyCode = farsikey[109 - 0x0020];
}
else {
if (key==92) {
window.event.keyCode = farsikey[67 - 0x0020];
}
else {
window.event.keyCode = farsikey[key - 0x0020];
}
}
}
}
return true;
}

</script>

.
.

<input onkeypress="FKeyPress();" onkeydown="FKeyDown();" name="name" size="35" maxlength="50" type="text" >

NIMA_1981
سه شنبه 25 مرداد 1390, 15:39 عصر
دوست عزیز برای من توی مرورگر اینترنت اکسپلورر کار نمیکنه

NIMA_1981
سه شنبه 25 مرداد 1390, 15:42 عصر
مرسی فهمیدم با اکسپلورر 9 مشکل داره

amin1softco
سه شنبه 25 مرداد 1390, 15:44 عصر
این کد بالایی رو اصلاح کردم رو فایرفاکس برام کار داد البته اینجا رو هم ببین
http://www.quirksmode.org/js/keys.html

NIMA_1981
سه شنبه 25 مرداد 1390, 15:47 عصر
میشه کد اصلاح شده را بدید برای من دوباره کار نمی کنه

amin1softco
سه شنبه 25 مرداد 1390, 18:16 عصر
var isiri2901_lang = 1; // 1: Persian, 0: English
var isiri2901_nativelang = 0; // 1: Persian, 0: English

// Persian keyboard map based on ISIRI-2901

var isirikey = [
0x0020, 0x0021, 0x061B, 0x066B, 0xFDFC, 0x066A, 0x060C, 0x06AF,
0x0029, 0x0028, 0x002A, 0x002B, 0x0648, 0x002D, 0x002E, 0x002F,
0x06F0, 0x06F1, 0x06F2, 0x06F3, 0x06F4, 0x06F5, 0x06F6, 0x06F7,
0x06F8, 0x06F9, 0x003A, 0x06A9, 0x003E, 0x003D, 0x003C, 0x061F,
0x066C, 0x0624, 0x200C, 0x0698, 0x064A, 0x064D, 0x0625, 0x0623,
0x0622, 0x0651, 0x0629, 0x00BB, 0x00AB, 0x0621, 0x0654, 0x005D,
0x005B, 0x0652, 0x064B, 0x0626, 0x064F, 0x064E, 0x0670, 0x064C,
0x0653, 0x0650, 0x0643, 0x062C, 0x005C, 0x0686, 0x00D7, 0x0640,
0x200D, 0x0634, 0x0630, 0x0632, 0x06CC, 0x062B, 0x0628, 0x0644,
0x0627, 0x0647, 0x062A, 0x0646, 0x0645, 0x067E, 0x062F, 0x062E,
0x062D, 0x0636, 0x0642, 0x0633, 0x0641, 0x0639, 0x0631, 0x0635,
0x0637, 0x063A, 0x0638, 0x007D, 0x007C, 0x007B, 0x007E
];

// on Alt+Ctrl+anything, switch language
function PersianKeyDown(e)
{
if (window.event)
e = window.event;
if (e.ctrlKey && e.altKey) {
if (isiri2901_lang == 0)
setPersian();
else
setEnglish();
try {
e.preventDefault();
} catch (err) {
}
return false;
}
return true;
}

var pk_test_ev;

function PersianKeyPress(e)
{
var key;
var obj;


if (window.event) {
e = window.event;
obj = e.srcElement;
key = e.keyCode;
} else {
obj = e.target;
key = e.charCode;
}

if (e.bubbles==false)
return true;

// This cannot be used anymore, in FF 1.5.0.2, as a new event will call keypress again.
// Change to English, if user is using an OS non-English keyboard
if (key >= 0x00FF) {
isiri2901_nativelang = 1;
setPersian();
} else
if (isiri2901_nativelang == 1) {
isiri2901_nativelang = 0;
setEnglish();
}


// Avoid processing if control or higher than ASCII
// Or ctrl or alt is pressed.
if (key < 0x0020 || key >= 0x007F || e.ctrlKey || e.altKey || e.metaKey)
return true;

if (isiri2901_lang == 1) { //If Persian

// rewrite key
var newkey;
if (key == 0x0020 && e.shiftKey) // Shift-space -> ZWNJ
newkey = 0x200C;
else
newkey = isirikey[key - 0x0020];

if (newkey == key)
return true;


try {
// Gecko
var new_event=document.createEvent("KeyEvents");
new_event.initKeyEvent("keypress", false, true, document.defaultView, false, false, false, false, 0, newkey);
obj.dispatchEvent(new_event);
e.preventDefault();
} catch (err) {
try {
// Windows
e.keyCode = newkey;
} catch (err) {
try {
// Gecko after banning fake key emission (FF 1.0.6 to FF 1.5.0.1)
// Try inserting at cursor position
pnhMozStringInsert(obj, String.fromCharCode(newkey));
e.preventDefault();
} catch (err) {
// Everything else, simply add to the end of buffer
obj.value += String.fromCharCode(newkey);
e.preventDefault();
}}}
}
return true;
}


function setPersian (obj, quiet)
{
isiri2901_lang = 1;
if (obj) {
obj.style.textAlign = "right";
obj.style.direction = "rtl";
obj.focus();
}
if (!quiet)
window.defaultStatus = "Persian Keyboard (Press Ctrl+Alt+Space to change to English)";
}


function setEnglish (obj, quiet)
{
isiri2901_lang = 0;
if (obj) {
obj.style.textAlign = "left";
obj.style.direction = "ltr";
obj.focus();
}
if (!quiet)
window.defaultStatus = "English Keyboard (Press Ctrl+Alt+Space to change to Persian)";
}


function toggleDir (obj, quiet) {
var isrtl = 0;
if (obj)
isrtl = obj.style.direction != 'ltr';
else
isrtl = isiri2901_lang;
if (isrtl)
setEnglish(obj, quiet);
else
setPersian(obj, quiet);
}

// Inserts a string at cursor
function pnhMozStringInsert(elt, newtext) {
var posStart = elt.selectionStart;
var posEnd = elt.selectionEnd;
var scrollTop = elt.scrollTop;
var scrollLeft = elt.scrollLeft;

elt.value = elt.value.slice(0,posStart)+newtext+elt.value.slic e(posEnd);
var newpos = posStart+newtext.length;
elt.selectionStart = newpos;
elt.selectionEnd = newpos;
elt.scrollTop = scrollTop;
elt.scrollLeft = scrollLeft;
elt.focus();

}

منبع : http://pooyak.com/p/persianjavascript/

NIMA_1981
سه شنبه 25 مرداد 1390, 18:26 عصر
مرسی فقط با اکسپلورر 9 مشکل داره

amin1softco
چهارشنبه 26 مرداد 1390, 00:33 صبح
<script type ="text/javascript">

var key,newkey;
var lang = 1; // 1: Farsi, 0: English

// Farsi keyboard map based on ISIRI-2901
var farsikey = [
0x0020, 0x0021, 0x061B, 0x066B, 0x00A4, 0x066A, 0x060C, 0x06AF,
0x0029, 0x0028, 0x002A, 0x002B, 0x0648, 0x002D, 0x002E, 0x002F,
0x06F0, 0x06F1, 0x06F2, 0x06F3, 0x06F4, 0x06F5, 0x06F6, 0x06F7,
0x06F8, 0x06F9, 0x003A, 0x06A9, 0x003E, 0x003D, 0x003C, 0x061F,
0x066C, 0x0624, 0x200C, 0x0698, 0x064A, 0x064D, 0x0625, 0x0623,
0x0622, 0x0651, 0x0629, 0x00BB, 0x00AB, 0x0621, 0x004E, 0x005D,
0x005B, 0x0652, 0x064B, 0x0626, 0x064F, 0x064E, 0x0056, 0x064C,
0x0058, 0x0650, 0x0643, 0x062C, 0x005C, 0x0686, 0x00D7, 0x0640,
0x200D, 0x0634, 0x0630, 0x0632, 0x064A, 0x062B, 0x0628, 0x0644,
0x0627, 0x0647, 0x062A, 0x0646, 0x0645, 0x067E, 0x062F, 0x062E,
0x062D, 0x0636, 0x0642, 0x0633, 0x0641, 0x0639, 0x0631, 0x0635,
0x0637, 0x063A, 0x0638, 0x007D, 0x007C, 0x007B, 0x007E
];
nn=(document.layers)?true:false; ie=(document.all)?true:false;
function keypress(e) {
dc=document.activeElement;
/*var gtt= dc.getAttribute("onkeypress");
if (gtt != 'return false;'){
dc.setAttribute("onkeypress",'return false;');
}*/
var evt=(e)?e:(window.event)?window.event:null;
if(evt){ key=(evt.charCode)?evt.charCode: ((evt.keyCode)?evt.keyCode:((evt.which)?evt.which: 0));

if(key==46 || key==8){
var St = new String(dc.value);
dc.value=St.substring(0,St.length-1);
return;
}
if (key < 0x0020 || key >= 0x00FF ) return;
if (key==45) return;
if (lang == 1) { //If Farsi
if (key == 0x0020 && evt.shiftKey) // Shift-space -> ZWNJ
newkey = 0x200C;
else {
if (key==96) {
newkey = farsikey[109 - 0x0020];
}
else {
if (key==92) {
newkey = farsikey[67 - 0x0020];
}
else {

newkey = farsikey[key - 0x0020];
}
}
}
dc.value+=String.fromCharCode(newkey);
}

}
}
document.onkeypress=keypress;
if(nn) document.captureEvents(Event.KEYPRESS);
</script>

این نسخه آپدیت شد مشکل اسپیس فایرفاکس بر طرف شد.....
روی ie9و ie8 و FF5 و opera 10.6 کار میده
مشکلات : امکان تایپ انگلیسی وجود نداره روی همه آبجکت ها اعمال می شه:افسرده:
باید در تگ مورد نظر از خاصیت زیر استفاده بشه چون یکی در میون انگلیسی تایپ می کنه


onkeypress="return false;"

NIMA_1981
چهارشنبه 26 مرداد 1390, 01:34 صبح
این کد باز با ie 9 مشکل داره من تست کردم

amin1softco
چهارشنبه 26 مرداد 1390, 09:45 صبح
والا طبق عکس ضمیمه روی ie9 final من که خوب کار میده :متفکر: روی fireFox 5 هم کار میده فقط یکمی اسکریپتش ناقصه و اگه صفحه کلید فارسی باشه توی ie9 چیزی تایپ نمی کنه و لی در فایرفاکس بازم تایپ می کنه:متفکر: اسپیس مشکل داره و..........

amin1softco
چهارشنبه 26 مرداد 1390, 14:23 عصر
اینم آخرین نسخه روی بیشتر مرور گرا از جمله ie8 , ie9 , opera10.6,firefox5 هم تست شده امکان تغییر زبان به انگلیسی رو هم داره .....

<script type ="text/javascript">
var key,newkey,dc;
var lang = 1; // 1: Farsi, 0: English

// Farsi keyboard map based on ISIRI-2901
var farsikey = [
0x0020, 0x0021, 0x061B, 0x066B, 0x00A4, 0x066A, 0x060C, 0x06AF,
0x0029, 0x0028, 0x002A, 0x002B, 0x0648, 0x002D, 0x002E, 0x002F,
0x06F0, 0x06F1, 0x06F2, 0x06F3, 0x06F4, 0x06F5, 0x06F6, 0x06F7,
0x06F8, 0x06F9, 0x003A, 0x06A9, 0x003E, 0x003D, 0x003C, 0x061F,
0x066C, 0x0624, 0x200C, 0x0698, 0x064A, 0x064D, 0x0625, 0x0623,
0x0622, 0x0651, 0x0629, 0x00BB, 0x00AB, 0x0621, 0x004E, 0x005D,
0x005B, 0x0652, 0x064B, 0x0626, 0x064F, 0x064E, 0x0056, 0x064C,
0x0058, 0x0650, 0x0643, 0x062C, 0x005C, 0x0686, 0x00D7, 0x0640,
0x200D, 0x0634, 0x0630, 0x0632, 0x064A, 0x062B, 0x0628, 0x0644,
0x0627, 0x0647, 0x062A, 0x0646, 0x0645, 0x067E, 0x062F, 0x062E,
0x062D, 0x0636, 0x0642, 0x0633, 0x0641, 0x0639, 0x0631, 0x0635,
0x0637, 0x063A, 0x0638, 0x007D, 0x007C, 0x007B, 0x007E
];
nn=(document.layers)?true:false; ie=(document.all)?true:false;
function change(){
lang= (lang==1)?0:1;
}
function keypress(e) {
//dc=document.activeElement; use this for all object in page not recommanded
/*var gtt= dc.getAttribute("onkeypress");
if (gtt != 'return false;'){
dc.setAttribute("onkeypress",'return false;');
}ie problem */
var evt=(e)?e:(window.event)?window.event:null;
if(evt){ key=(evt.charCode)?evt.charCode: ((evt.keyCode)?evt.keyCode:((evt.which)?evt.which: 0));
if (key ==119 && evt.shiftKey) // shift + F8
change();


if (lang == 1) { //If Farsi
if(key==46 || key==8){
var St = new String(dc.value);
dc.value=St.substring(0,St.length-1);
return;
}
if (key < 0x0020 || key >= 0x00FF ) return;
if (key==45) return;

if (key == 0x0020 && evt.shiftKey) // Shift-space -> ZWNJ
newkey = 0x200C;
else {
if (key==96) {
newkey = farsikey[109 - 0x0020];
}
else {
if (key==92) {
newkey = farsikey[67 - 0x0020];
}
else {

newkey = farsikey[key - 0x0020];
}
}
}
dc.value+=String.fromCharCode(newkey);
}

}
}
document.onkeypress=keypress;
if(nn) document.captureEvents(Event.KEYPRESS);
function fkp(IdTag){
dc=document.getElementById(IdTag);
return (lang == 1)?false:true;}
</script>

برای استفاده باید برای تگ مورد نظر یک آی دی بسازید و اونو به شکل زیر استفاده کنید
id="thisTag" onkeypress="return fkp('thisTag');"


<input id="thisTag" onkeypress="return fkp('thisTag');" size="35" maxlength="50" type="text" value="">

فایل ضمیمه رو ببنید روی فایرفاکس با کلید های ترکیبی شیفت+اف8 shift+F8 زبانش عوض می شه :لبخند: