Linga (لینگا)؛ برنامهای برای پیشگیری و درمان تایپ اشتباه به زبان دوم کیبورد
با ochepyatka دیگر نگران تایپ اشتباه انگلیسی به جای فارسی (و برعکس) نباشید!
یکی از بزرگترین مشکلات کاربرانی که دو زبان روی سیستم خود دارند، مثل ما فارسی زبانها که هم فارسی داریم و هم انگلیسی، این است که دائم باید بین دو زبان سوئیچ کنند!
این وسط، گاهی اوقات شما حواستان نیست و در حالی که مثلاً قصد داشتهاید فارسی بنویسید، زبان شما روی انگلیسی تنظیم شده بوده است!! پس احتمالاً شاهد چنین حروفی هستید:
fsl hggi hgvplk hgvpdl
مطمئنم به این مشکل برخوردهاید، اینطور نیست؟
آیا میتوانید جمله بالا را بخوانید؟
من قصد داشتهام بنویسم: « بسم الله الرحمن الرحیم » اما کیبورد در حالت انگلیسی بوده و آن حروف را میبینید!
طبیعتاً باید هر چه نوشتهاید را پاک کنید و دوباره تایپ کنید.
این مشکل برای امثال بنده که دائماً در حال تایپ هستیم، خیلی خیلی اعصاب خردکن است!!
به همین دلیل امروز فرصتی دست داد که بنشینم و برای رفع این مشکل یک برنامه برای خودم بنویسم. اسمش را گذاشتم:
MagicFa
مجیکفا کاربری سادهای دارد:
- اگر متنی را اشتباه تایپ کردید، آن را انتخاب و کپی کنید.
- کلیدهای CTRL+SHIFt+C را بزنید.
- حالا Paste کنید. همین!
روش کار برنامه:
وقتی متنی که اشتباه تایپ شده است را کپی میکنید، واد حافظه clipboard میشود. وقتی مجیکفا را اجرا میکنید، حافظه clipboard را میخواند، حروف را یکی یکی اصلاح میکند و متن تصحیح شده را جایگزین متن قبلی در clipboard شما میکند. حالا میتوانید متن تصحیح شده را به جای متن اشتباه، Paste کنید.
- مجیکفا هم از فارسی درهم به انگلیسی و هم از انگلیسی درهم به فارسی برگردان میکند.
قبل از دانلود، به نکات زیر توجه نمایید:
- مجیکفا نیازی به نصب ندارد.
- مجیکفا محیط کاربری ندارد. یعنی منتظر نباشید پنجره خاصی باز شود. فقط یک لحظه باز میشود، متن را اصلاح میکند و سریعاً بسته میشود.
- مجیکفا در حافظه مقیم نمیشود که بخواهد مزاحم کار شما شود. هر وقت اشتباه تایپی داشتید، یک لحظه اجرا میشود و سریعاً و به طور کامل بسته میشود.
- این برنامه بر اساس dot NET Framework نسخه 2 نوشته شده است. پس باید حتماً روی سیستم شما این فریمورک باشد تا برنامه اجرا شود. (معمولاً روی سیستم افراد حرفهایتر موجود است. اما به هر حال، اگر دانلود کردید و دیدید کار نمیکند، میتوانید این فریمورک را از اینجا دانلود و نصب کنید. در کل فریمورک مایکروسافت برای خیلی از برنامهها نیاز است. سعی کنید همیشه آخرین نسخه آن را روی سیستم نصب کنید. آخرین نسخه تا این لحظه، نسخه 4 است.)
- بهتر است برای برنامه کلید میانبر دلخواه خود را تعریف کنید تا بتوانید در همه جای ویندوز با فشردن (مثلاً) کلیدهای Ctrl+Shift+C مجیکفا را فعال کنید. اگر نمیدانید چطور برای یک فایل یا برنامه کلید میانبر تعریف کنید، به این آموزش مراجعه نمایید. اما برای حرفهایترها خیلی سریع توضیح میدهم:
مجیکفا را دانلود کنید و در جایی از هارد خود قرار دهید. یک Shortcut از آن روی دسکتاپ بگیرید. روی Shortcut کلیک راست کنید و Properties را انتخاب کنید. در تب Shortcut در بخش Shortcut key کلیدهای میانبر مورد نظر خود را فشار دهید تا ثبت شود. مثلاً Ctrl و Shift و C را همزمان فشار دهید. از این به بعد با فشردن آن کلیدها در هر کجای ویندوز، مجیکفا اجرا میشود.
- پس در حالت کلی و بعد از تعریف کلید میانبر، نحوه استفاده از برنامه به این صورت خواهد بود:
-- متن اشتباه را انتخاب کنید. (فراموش نکنید که کلیدهای Shift+Home یک خط متن را انتخاب میکند)
-- برای کپی کردن متن، کلیدهای Ctrl+C را فشار دهید.
-- حالا باید مجیکفا را اجرا کنید. پس کلیدهای Ctrl+Shift+C را فشار دهید.
-- حالا متن، اصلاح شده و آماده Paste کردن است. پس برای Paste کردن، کلیدهای Ctrl+V را بزنید.
به طور خیلی خلاصه:
1- Shift+Home
2- Ctrl+C
3- Ctrl+Shift+C
4- Ctrl+V
دانلود مجیکفا:
برای دانلود این فایل 40 کیلوبایتی که در عرض چند ثانیه دانلود خواهد شد، روی لینک زیر کلیک کنید:
http://yourl.ir/magicfa
توجه: مشخص است که این برنامه الگوریتم بسیار سادهای دارد. اما به هر حال، من کدهای مربوط به پروژه را به زبان C# .NET در ادامه متن خواهم گذاشت تا اگر خواستید به زبان دیگری تبدیل کنید و یا آنرا تکمیلتر و منتشر کنید، بتوانید.
توجه: برای دانلود سورس مجیکفا به زبان C# و همینطور مشاهده توضیحاتی در مورد الگوریتم ما به آدرس زیر مراجعه کنید:
http://yourl.ir/magicfa_source
موفق باشید؛
حمید رضا نیرومند
کدهای برنامه:
در ویژوال استودیو یک پروژه سی شارپ از نوع Windows Form ایجاد کنید و کدهای زیر را در فایل Program.cs کپی کنید:
using System.Collections.Generic;
using System.Windows.Forms;
namespace WindowsFormsApplication4
{
static class Program
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main()
{
string str = Clipboard.GetText();
string str_new = "";
char[] alphabet = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'w', 'x', 'y', 'z', ' ' };
for (int i = 0; i < str.Length; i++)
{
str.Replace("ریال", "ق");
switch (Convert.ToChar(str.Substring(i, 1)))
{
//Common Characters
case ' ':
str_new = str_new + Convert.ToString(' ');
break;
case ':':
str_new = str_new + Convert.ToString(':');
break;
case '"':
str_new = str_new + Convert.ToString('"');
break;
case '?':
str_new = str_new + Convert.ToString('؟');
break;
case '؟':
str_new = str_new + Convert.ToString('?');
break;
//Farsi to English
case 'ض':
str_new = str_new + Convert.ToString('q');
break;
case 'ص':
str_new = str_new + Convert.ToString('w');
break;
case 'ث':
str_new = str_new + Convert.ToString('e');
break;
case 'ق':
str_new = str_new + Convert.ToString('r');
break;
case 'ف':
str_new = str_new + Convert.ToString('t');
break;
case 'غ':
str_new = str_new + Convert.ToString('y');
break;
case 'ع':
str_new = str_new + Convert.ToString('u');
break;
case 'ه':
str_new = str_new + Convert.ToString('i');
break;
case 'خ':
str_new = str_new + Convert.ToString('o');
break;
case 'ح':
str_new = str_new + Convert.ToString('p');
break;
case 'ج':
str_new = str_new + Convert.ToString('[');
break;
case 'چ':
str_new = str_new + Convert.ToString(']');
break;
case 'ش':
str_new = str_new + Convert.ToString('a');
break;
case 'س':
str_new = str_new + Convert.ToString('s');
break;
case 'ی':
str_new = str_new + Convert.ToString('d');
break;
case 'ب':
str_new = str_new + Convert.ToString('f');
break;
case 'ل':
str_new = str_new + Convert.ToString('g');
break;
case 'ا':
str_new = str_new + Convert.ToString('h');
break;
case 'ت':
str_new = str_new + Convert.ToString('j');
break;
case 'ن':
str_new = str_new + Convert.ToString('k');
break;
case 'م':
str_new = str_new + Convert.ToString('l');
break;
case 'ک':
str_new = str_new + Convert.ToString(';');
break;
case 'گ':
str_new = str_new + Convert.ToString(''');
break;
case 'ظ':
str_new = str_new + Convert.ToString('z');
break;
case 'ط':
str_new = str_new + Convert.ToString('x');
break;
case 'ز':
str_new = str_new + Convert.ToString('c');
break;
case 'ر':
str_new = str_new + Convert.ToString('v');
break;
case 'ذ':
str_new = str_new + Convert.ToString('b');
break;
case 'د':
str_new = str_new + Convert.ToString('n');
break;
case 'ئ':
str_new = str_new + Convert.ToString('m');
break;
case 'و':
str_new = str_new + Convert.ToString(',');
break;
case '.':
str_new = str_new + Convert.ToString('.');
break;
case 'ً':
str_new = str_new + Convert.ToString('Q');
break;
case 'ٌ':
str_new = str_new + Convert.ToString('W');
break;
case 'ٍ':
str_new = str_new + Convert.ToString('E');
break;
case '،':
str_new = str_new + Convert.ToString('T');
break;
case '؛':
str_new = str_new + Convert.ToString('Y');
break;
case '٫':
str_new = str_new + Convert.ToString('U');
break;
case 'ة':
str_new = str_new + Convert.ToString('I');
break;
case ']':
int t1 = 0;
foreach (char c in alphabet)
{
if (i + 1 < str.Length)
{
if (c == Convert.ToChar(str.Substring(i + 1, 1)))
{
t1 = 1;
break;
}
}
}
if (t1 == 1)
str_new = str_new + Convert.ToString('چ');
else
str_new = str_new + Convert.ToString('O');
break;
case '[':
int t2 = 0;
foreach (char c in alphabet)
{
if (i + 1 < str.Length)
{
if (c == Convert.ToChar(str.Substring(i + 1, 1)))
{
t2 = 1;
break;
}
}
}
if (t2 == 1)
str_new = str_new + Convert.ToString('ج');
else
str_new = str_new + Convert.ToString('P');
break;
case '}':
str_new = str_new + Convert.ToString('{');
break;
case '{':
str_new = str_new + Convert.ToString('}');
break;
case 'َ':
str_new = str_new + Convert.ToString('A');
break;
case 'ُ':
str_new = str_new + Convert.ToString('S');
break;
case 'ِ':
str_new = str_new + Convert.ToString('D');
break;
case 'ّ':
str_new = str_new + Convert.ToString('F');
break;
case 'ۀ':
str_new = str_new + Convert.ToString('G');
break;
case 'آ':
str_new = str_new + Convert.ToString('H');
break;
case 'ـ':
str_new = str_new + Convert.ToString('J');
break;
case '»':
str_new = str_new + Convert.ToString('K');
break;
case '«':
str_new = str_new + Convert.ToString('L');
break;
case 'ؤ':
str_new = str_new + Convert.ToString('Z');
break;
case '':
str_new = str_new + Convert.ToString('X');
break;
case 'ي':
str_new = str_new + Convert.ToString('V');
break;
case 'إ':
str_new = str_new + Convert.ToString('B');
break;
case 'أ':
str_new = str_new + Convert.ToString('N');
break;
case 'ء':
str_new = str_new + Convert.ToString('M');
break;
case '>':
str_new = str_new + Convert.ToString('<');
break;
case '<':
str_new = str_new + Convert.ToString('>');
break;
case 'پ':
str_new = str_new + Convert.ToString('`');
break;
case 'ژ':
str_new = str_new + Convert.ToString('');
break;
//English to Farsi
case 'q':
str_new = str_new + Convert.ToString('ض');
break;
case 'w':
str_new = str_new + Convert.ToString('ص');
break;
case 'e':
str_new = str_new + Convert.ToString('ث');
break;
case 'r':
str_new = str_new + Convert.ToString('ق');
break;
case 't':
str_new = str_new + Convert.ToString('ف');
break;
case 'y':
str_new = str_new + Convert.ToString('غ');
break;
case 'u':
str_new = str_new + Convert.ToString('ع');
break;
case 'i':
str_new = str_new + Convert.ToString('ه');
break;
case 'o':
str_new = str_new + Convert.ToString('خ');
break;
case 'p':
str_new = str_new + Convert.ToString('ح');
break;
case 'a':
str_new = str_new + Convert.ToString('ش');
break;
case 's':
str_new = str_new + Convert.ToString('س');
break;
case 'd':
str_new = str_new + Convert.ToString('ی');
break;
case 'f':
str_new = str_new + Convert.ToString('ب');
break;
case 'g':
str_new = str_new + Convert.ToString('ل');
break;
case 'h':
str_new = str_new + Convert.ToString('ا');
break;
case 'j':
str_new = str_new + Convert.ToString('ت');
break;
case 'k':
str_new = str_new + Convert.ToString('ن');
break;
case 'l':
str_new = str_new + Convert.ToString('م');
break;
case ';':
str_new = str_new + Convert.ToString('ک');
break;
case ''':
str_new = str_new + Convert.ToString('گ');
break;
case 'z':
str_new = str_new + Convert.ToString('ظ');
break;
case 'x':
str_new = str_new + Convert.ToString('ط');
break;
case 'c':
str_new = str_new + Convert.ToString('ز');
break;
case 'v':
str_new = str_new + Convert.ToString('ر');
break;
case 'b':
str_new = str_new + Convert.ToString('ذ');
break;
case 'n':
str_new = str_new + Convert.ToString('د');
break;
case 'm':
str_new = str_new + Convert.ToString('ئ');
break;
case ',':
str_new = str_new + Convert.ToString('و');
break;
case 'Q':
str_new = str_new + Convert.ToString('ً');
break;
case 'W':
str_new = str_new + Convert.ToString('ٌ');
break;
case 'E':
str_new = str_new + Convert.ToString('ٍ');
break;
case 'R':
str_new = str_new + "ريال";
break;
case 'T':
str_new = str_new + Convert.ToString('،');
break;
case 'Y':
str_new = str_new + Convert.ToString('؛');
break;
case 'A':
str_new = str_new + Convert.ToString('َ');
break;
case 'S':
str_new = str_new + Convert.ToString('ُ');
break;
case 'D':
str_new = str_new + Convert.ToString('ِ');
break;
case 'M':
str_new = str_new + Convert.ToString('ء');
break;
case 'F':
str_new = str_new + Convert.ToString('ّ');
break;
case 'H':
str_new = str_new + Convert.ToString('آ');
break;
case 'J':
str_new = str_new + Convert.ToString('ـ');
break;
case 'K':
str_new = str_new + Convert.ToString('»');
break;
case 'L':
str_new = str_new + Convert.ToString('«');
break;
case 'Z':
str_new = str_new + Convert.ToString('ؤ');
break;
case 'C':
str_new = str_new + Convert.ToString('ژ');
break;
case '':
str_new = str_new + Convert.ToString('ژ');
break;
case 'B':
str_new = str_new + Convert.ToString('إ');
break;
case 'N':
str_new = str_new + Convert.ToString('أ');
break;
case '`':
str_new = str_new + Convert.ToString('پ');
break;
default:
str_new = str_new + Convert.ToChar(str.Substring(i, 1));
break;
}
}
Clipboard.SetText(str_new);
}
}
}