PDA

View Full Version : تغییر زبان با جاوااسکریپت



newsoft
دوشنبه 25 مرداد 1389, 08:54 صبح
من چند تا تکس باکس دارم می خوام کاربر بدون تغییر دادن زبان سیستم زبان تکس باکس ها تغییر کنه خیلی از جاها دیدم


کسی می دونه کدش چیه و
چیجوری استفاده می شه؟؟

newsoft
سه شنبه 02 شهریور 1389, 09:14 صبح
با کمک استاد فتح اللهی پیدا کردم http://www.persiadevelopers.com/articles/input-farsi.aspx


شايد تا به حال سايت های فارسی مختلفی از قبيل سازمان سنجش، دانشگاه پيام نور و... را ديده باشيد که در هنگام ورود اطلاعات در تکست باکس های نام و نام خانوادگي و نام پدر بدون اينکه زبان کيبرد را تغيير دهيم مي توان به صورت فارسي در آن نوشت. در اين مقاله می خواهيم اين روش را توضيح دهيم.
برای اين منظور ويژوال استوديو ۲۰۰۵را باز نموده يک پروژه از نوع Web Site ساخته و در صفحه Default آن دو کنترل تکست باکس (Input (Text)) از برگه Html استاندارد و يک کنترل Button از برگه Standard بر روی فرم بياندازيد.خاصيت هاي id و name را نيز در کنترل تکست باکس ها حتماً مقداردهي کنيد.
سپس در Enterprise Manager در پايگاه داده Pubs يا هر پايگاه داده دلخواه يک جدول به نام Moshakhasat با ستونهای Name و Family از نوع nvarchar با طول ۱۲ و ۲۰ بسازيد.
سپس بر روی کنترل Button کليک کنيد تا برای رويداد کليک آن کد زير را بنويسيم. همچنين رشته اتصال به بانک را در فايل Web.Config قرار مي دهيم.
Sub btn_Click(sender as system.Object, e as system.EventArgs) Handles btn.click
Dim conPubs as SqlConnection = New SqlConnection()
conPubs.ConnectionString =
ConfigurationManager.ConnectionStrings("connectionStringPubs").ConnectionString
Dim cmdInsert as SqlCommand =
New SqlCommand("Insert Into Moshakhasat values(@Name,@Family)", conPubs)
cmdInsert.Parameters.Add(New SqlParameter(("@Name",TxtName.value))
cmdInsert.Parameters.Add(New SqlParameter("@Family",TxtFamily.value))
conPubs.Open()
cmdInsert.ExecuteNonQuery()
conPubs.Close()
End Sub

کد فوق مربوط به اضافه کردن دو فيلد فوق به جدول مشخصات است.
حال برای ورود اطلاعات به صورت فارسی بدون تغيير زبان سيستم از کد جاوا اسکريت زير استفاده می کنيم:
// 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, // ":"
//0x0643, // "ك"
0x06A9, // "ک"
0x003E, // "<"
0x003D, // "="
0x003C, // ">"
0x061F, // "?"
0x066C, // "،"
0x0624, // "ؤ"
0x200C, // " "
0x0698, // "ژ"
0x0649, // "ی"
0x064D, // " "
0x0625, // " "
0x0623, // "ًٌٍإ"
0x0622, // " "
0x0651, // " "
0x0629, // "ًٌة"
0x00BB, // "«"
0x00AB, // "»"
0x0621, // "ء"
0x004E, // "N"
0x005D, // "["
0x005B, // "]"
0x0652, // " "
0x064B, // " "
0x0626, // "ئ"
0x064F, // " "
0x064E, // " "
0x0056, // "V"
0x064C, // " "
0x0058, // "X"
0x0650, // " "
0x0643, // "ك"
0x062C, // "ج"
0x005C, // "\"
0x0686, // "چ"
0x00D7, // "x"
0x0640, // "-"
0x200D, // " "
0x0634, // "ش"
0x0630, // "ذ"
0x0632, // "ز"
0x06CC, // "ی"
// 0x064A = ي
0x062B, // "ث"
0x0628, // "ب"
0x0644, // "ل"
0x0627, // "ا"
0x0647, // "ه"
0x062A, // "ت"
0x0646, // "ن"
0x0645, // "م"
//0x067E, // "پ"
0x0626, // "ئ"
0x062F, // "د"
0x062E, // "خ"
0x062D, // "ح"
0x0636, // "ض"
0x0642, // "ق"
0x0633, // "س"
0x0641, // "ف"
0x0639, // "ع"
0x0631, // "ر"
0x0635, // "ص"
0x0637, // "ط"
0x063A, // "غ"
0x0638, // "ظ"
0x007D, // "{"
0x007C, // "|"
0x007B, // "}"
0x007E // "~"
];


var lang = 1; // 1: Farsi, 0: English
function changeLang() {
if (lang == 0) {
lang = 1;
return true;
}
else {
lang = 0;
return true;
}
}

function FKeyDown (txtFrm){
var key = window.event.keyCode;
if (key == 145){
if (lang == 0) {
lang = 1;
return true;
}
else {
lang = 0;
return true;
}
}
}

function FKeyPress(txtFrm) {
var key = window.event.keyCode;

if (key == 13) { window.event.keyCode = 13; return true; }
if (lang == 1) { // If Farsi
if (key == 0x0020 && window.event.shiftKey) // Shift-space -> ZWNJ
window.event.keyCode = 0x200C;
else
window.event.keyCode = farsikey[key - 0x0020];
if (farsikey[key - 0x0020] == 92) {
window.event.keyCode = 0x0698;
}
if (farsikey[key - 0x0020] == 8205) {
window.event.keyCode = 0x067E;
}
}
return true;
}

برای اين منظور در پروژه فوق (Add New Item(Ctrl+shift+A و سپس در Templates فايل Jscript File را انتخاب کرده و نام آن را به KeyFarsi تغيير دهيد و کد فوق را در آن کپی کنيد و سپس آن را ذخيره کنيد. حال در تکست باکس های TxtName و TxtFamily رويدادهای ;"('')onkeypress="FKeyPress('');" onkeydown="FKeyDown را در آن قرار می دهيم. در تکست باکس های فوق حتماً خاصيت "runat="server و در تکست باکس نام "id="TxtName و "name="TxtName را در هر کنترل قرار دهيد. و در تکست باکس فاميلي نيز اين کار انجام دهيد.
همچنين در Page-Load صفحه کد زير را جهت اجرا شدن کد جاوا اسکريپت قرار دهيد:
Dim script As String = "./KeyFarsi.js"
Page.ClientScript.RegisterClientScriptInclude(Me.G etType, "MyKey", script)

توجه :در تگ Input حتماً بايد تگ پايانی </Input> را قرار دهيد در غير اينصورت کامپايلر خطای قرار ندادن تگ پايانی را اعلام می کند.
مزايا: اصلی ترين مزيت اين روش وارد شدن اطلاعات به صورت فارسی به ديتابيس و چند زبانی نشدن داده های ورودی به بانک اطلاعاتی است. استفاده از اين روش در پايگاه داده Access که با ورود اطلاعات به صورت فارسی مشکل دارد نيز مفيد می باشد.
برای نمايش حروف فارسی در صفحه وب لازم است كه از charset=windows-1256 يا utf-8 استفاده نماييد.
فونت صفحه را نيز يكی از دو فونت Times New Roman و يا Tahoma انتخاب نماييد. اين دو فونت فونتهای استاندارد ويندوز بوده و برای ديده شدن متون فارسی نيازی به نصب فونت جديد روی سيستم کاربر نخواهد بود.
نظرات خود را حتماً بيان کنيد.
با تشکر

assimar42
سه شنبه 23 فروردین 1390, 11:35 صبح
با تشکر
من این کار وانجام دادم ولی نشد لطفا راهنمایی کنید