PDA

View Full Version : حرفه ای: چگونگي فارسي کردن اتوماتيک صفحه کليد ؟



behvir
شنبه 30 آبان 1388, 16:32 عصر
با سلام
چطوري مي تونم در يک صفحه وب که از کنترلهاي ASP.NET در اون استفاده کرده ام بطور خودکار بعضي از TextBox ها رو مجبور کنم در هنگام گرفتن فوکوس تايپ فارسي داشته باشند. مثل سايت سازمان سنجش . کاربر مجبور به تغيير زبان صفحه کليد بصورت دستي نباشه.

در ضمن من کد زير رو دارم ولي نمي دونم در کدوم رويداد يا Event بايد اون رو قرار بدم.


System.Globalization.CultureInfo myCulture = new System.Globalization.CultureInfo("fa-IR");
InputLanguage.CurrentInputLanguage = mylanguage.FromCulture(myculture);

Alireza_Salehi
شنبه 30 آبان 1388, 22:07 عصر
javascript راه حل شماست....

این اسکریپت رو به صفحاتت لینک کن (فایلش رو ضمیمه کردم):

/* isiri2901.js - Standard Persian keyboard driver for JavaScript
*
* Copyright (C) 2000 Roozbeh Pournader
* Copyright (C) 2003, 2005 Behdad Esfahbod
* Copyright (C) 2005, 2006 Pooya Karimian
* Copyright (C) 2005 Behnam Esfahbod
* Copyright (C) 2005 Artyom Lukanin
*
* ChangeLog:
* Mar 05, 2005 Pooya Karimian, FireFox/Mozilla support added.
* Mar 20, 2005 Behdad Esfahbod, random fixes in Firefox support.
* Apr 14, 2005 Behnam Esfahbod, U+0654, U+0670, U+00F7 added.
* Apr 21, 2005 Behdad Esfahbod, Minimal Opera 8.0 support added.
* Alt+Ctrl+anything now is known to switch language.
* Sep 06, 2005 Artyom Lukanin, FireFox 1.0.6 support added.
* Sep 09, 2005 Behdad Esfahbod, Added fallback support back in,
* removed Opera code that doesn't was not worth it.
* Sep 09, 2005 Behdad Esfahbod, Make toggleDir() with no object
* passed changing language, actually work.
* Sep 09, 2005 Added U+FDFC RIAL SIGN!
* Sep 09, 2005 Assigned U+0653 to shift+X.
* Dec 02, 2005 Pooya Karimian, Fixing vertical & horizontal scrolling
* Apr 13, 2006 Pooya Karimian, initKeyEvent is back in Firefox 1.5.0.2 (FF Bug#303713)
*
* Licensed under GNU GPL.
*/

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,
0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
0x0038, 0x0039, 0x003A, 0x06A9, 0x003E, 0x003D, 0x003C, 0x061F,
0x066C, 0x064E, 0x0625, 0x0698, 0x0650, 0x064D, 0x0651, 0x06C0,
0x0622, 0x005D, 0x002D, 0x00BB, 0x00AB, 0x0621, 0x0623, 0x005B,
0x005C, 0x064B, 0x064B, 0x064F, 0x060C, 0x066B, 0x0624, 0x064C,
0x064A, 0x061B, 0x0629, 0x062C, 0x067E, 0x0686, 0x00D7, 0x0640,
0x200D, 0x0634, 0x0630, 0x0632, 0x06CC, 0x062B, 0x0628, 0x0644,
0x0627, 0x0647, 0x062A, 0x0646, 0x0645, 0x0626, 0x062F, 0x062E,
0x062D, 0x0636, 0x0642, 0x0633, 0x0641, 0x0639, 0x0631, 0x0635,
0x0637, 0x063A, 0x0638, 0x007D, 0x007C, 0x007B, 0x067E
];

// 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 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 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();

}


function numbersonly(e) {
var unicode = e.charCode ? e.charCode : e.keyCode
if (unicode < 8 || unicode > 9) {
if (unicode < 48 || unicode > 57) //if not a number
return false
}
}
function isNumberKey(evt) {
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
}


بعد به این صورت ازش استفاده کن:

<asp:TextBox ID="TextBox1" runat="server" onkeydown="return PersianKeyDown(event);"
onkeypress="return PersianKeyPress(event);"></asp:TextBox>البته با رعایت کپی رایت....

Alireza Orumand
یک شنبه 01 آذر 1388, 13:14 عصر
سلام
یه کنترل سفارشی به کمک اسکریپتی که دوستمون گذاشته بودن ایجاد کردم که استفاده از کد بالا رو بسیار ساده میکنه. فقط کافیه کلاس زیر رو build کنید و یه refrence به پروژه بدید و از این به بعد میتونید از toolbox گزینه persianTextbox رو انتخاب کنید.
کامنت ها رو حذف کردم برای پایین اومدن حجم کد ولی کپی رایت رو رعایت کردم. امیدوارم دیگر دوستان هم کپی رایت رو رعایت کنن.
کلاس رو با سورس گذاشتم که بتویند تغییرات انجام بدید.
موفق باشید.

Saber_Fatholahi
یک شنبه 01 آذر 1388, 13:40 عصر
دوست عزیز صفحه کلید مجازی هم راه دیگشه
موفق باشی

looti2010
جمعه 11 تیر 1389, 19:31 عصر
سلام دوستان..
من از این نوع تکست بوکس استفاده میکنم که پایین کودش رو میذارم.
چجوری میشه فارسیش کرد یعنی برای همه مرورگر ها (IE, FireFox, Google Chrome,...) فارسی بشه فقط؟
کود رو کجا بذارم و چجوری لینکش کنم... اگه میشه راهنمایی کنید.. ممنون :لبخندساده:


<textarea name="postText" id="postText" cols="38" rows="10" class="textForm postingForm" tabindex="2">{$postText}</textarea>

rozegar21
سه شنبه 19 مرداد 1389, 19:10 عصر
دوست عزیز صفحه کلید مجازی هم راه دیگشه
موفق باشی
میتونید توضیح بدید هرچندکه ازتاریخش گذشته

persiansoft_amin
چهارشنبه 20 مرداد 1389, 11:03 صبح
مگه کنترل asp:textbox رویداد onkeydown و onkeypress داره ؟؟؟؟
برا من اجرا نمی شه به این خط warning می ده!!!! چرا؟؟؟:گریه::گریه::گریه:


onkeydown="return PersianKeyDown(event);"
onkeypress="return PersianKeyPress(event);

liliyan87
چهارشنبه 20 مرداد 1389, 11:53 صبح
مگه کنترل asp:textbox رویداد onkeydown و onkeypress داره ؟؟؟؟
برا من اجرا نمی شه به این خط warning می ده!!!! چرا؟؟؟:گریه::گریه::گریه:


onkeydown="return PersianKeyDown(event);"
onkeypress="return PersianKeyPress(event);




خودت به همین صورت تو سورس اضافه کن اجرا میشه

asp2.net
پنج شنبه 21 مرداد 1389, 20:22 عصر
سلام
یه کنترل سفارشی به کمک اسکریپتی که دوستمون گذاشته بودن ایجاد کردم که استفاده از کد بالا رو بسیار ساده میکنه. فقط کافیه کلاس زیر رو build کنید و یه refrence به پروژه بدید و از این به بعد میتونید از toolbox گزینه persianTextbox رو انتخاب کنید.
کامنت ها رو حذف کردم برای پایین اومدن حجم کد ولی کپی رایت رو رعایت کردم. امیدوارم دیگر دوستان هم کپی رایت رو رعایت کنن.
کلاس رو با سورس گذاشتم که بتویند تغییرات انجام بدید.
موفق باشید.

با سلام ميبخشيدمن كد را گرفتم خيلي روي بعضي از كدها اشكال داشت نتونستم Build كنم اگه ميشه Build شده اونا بزاريد.