איך לכתוב הביתה מחו"ל בעברית

אחותי נמצאת עכשיו בטיול בחו"ל. היא כותבת לנו לפעמים מיילים ומשתפת אותנו בחוויות מהטיול. זה נחמד מאוד חוץ מהעובדה שקשה לקרוא את המיילים כי הם כתובים בעיבריש, כלומר, עברית באותיות לטיניות. הסיבה היא כמובן שלא מותקן במחשבים בחו"ל keyboard layout (פריסת מקשים) בעברית ולכן לא ניתן לכתוב בעברית.

ישנם הרבה אתרים שמציגים ציור של מקלדת שניתן ללחוץ עם העכבר על המקשים שלה וכך לכתוב בעברית בכל מקום. אני לא אוהב את הפיתרון הזה כי מאוד לא נוח לכתוב עם העכבר, במיוחד כשרוצים לספר על חוויות ולא לכתוב רק משפט אחד או שניים. ישבתי עם אחי כדי לספק פיתרון טוב יותר ויצא משהו נחמד.

חשבתי, כאשר לוחצים על מקש במקלדת וכותבים אות, האם ניתן להתעלם מהאות שהתקבלה ולקבל במקומה מזהה של המקש שנלחץ ללא קשר לפריסת המקשים הנוכחית? את התשובה סיפק לי האתר הנחמד הזה: http://asquare.net/javascript/tests/KeyCode.html
ניתן לראות שם שכאשר כותבים 'a' האירוע onKeyPress של Javascript נשלח עם המספר 97 שהוא המספר הסידורי של האות 'a' וכאשר כותבים 'ש' המספר שנשלח הוא 1513. שתי האותיות באותו מקש אך המספרים שונים. לעומת זאת, אם מסתכלים על האירועים onKeyDown ו- onKeyUp רואים שבכתיבת שתי האותיות מקבלים את אותו מספר – 65.

האפשרות לקבל מספר זהה עבור אותו מקש ללא קשר לאות הנכתבת בעקבות לחיצתו היא המפתח להמרה בין פריסות מקלדת שונות. בעזרתו המקצועית האדיבה של אחי החלטתי לעקוב אחרי לחיצות מקשים בתיבת טקסט בעמוד HTML ולהחליף את האותיות לפני שהן נכתבות בעמוד. השתמשנו ב-jQuery.

שלב ראשון היה למצוא איך ניתן למנוע מאותיות מסוימות להכתב לתיבת הטקסט. לשם כך הוספתי האזנה לאירוע onKeyDown ובדקתי מה נלחץ. אם זה 'a' או 'ש', נתעלם מהלחיצה על ידי החזרת false. אם זו כל אות אחרת ניתן לה לעבור ללא שינוי על ידי החזרת true. לתיבת הטקסט שבתוכה כותבים קראתי "daf" וכך זה נראה:

$(document).ready(function() {
    $("#daf").keydown(function(e) {
        switch (e.which)
        {
            case 65:
                return false;
                break;
            default:
                return true;
        }
    });
});

שלב הבא היה לכתוב תמיד 'ש' כאשר נלחץ המקש בעל המספר 65. אבל צריך לכתוב את האות במקום שבו נמצא הסמן באותו רגע. לא רציתי להתעסק עם זה אז פשוט העתקתי פונקציה מ- StackOverflow שמקבלת את תיבת הטקסט ומחרוזת וכותבת אותה במקום בו נמצא הסמן.

$(document).ready(function() {
    $("#daf").keydown(function(e) {
        switch (e.which)
        {
            case 65:
                insertAtCaret("daf", "ש");
                return false;
                break;
            default:
                return true;
        }
    });
});

לשמחתי הרבה זה עבד. עכשיו נהפוך את התנאי לכללי יותר ונפעל על כל מקש שמשמש בכתיבה בעברית. הכנסתי את כל מספרי המקשים ואת האותיות המתאימות להם בעברית לשני מערכים בשם hebrew ו-english ועבור כל מספר כתבתי את האות המתאימה בתיבת הטקסט. כדי לאפשר כתיבת נקודתיים והעתקה והדבקה לא מתבצעת שום החלפה אם shift או ctrl לחוצים. הנה קטע הקוד הסופי:

$(document).ready(function() {
    $("#daf").keydown(function(e) {
        if(english.indexOf(e.which) != -1 && !e.shiftKey && !e.ctrlKey)
        {
            insertAtCaret("daf", hebrew[english.indexOf(e.which)]);
            return false;
        }
        else
        {
            return true;
        }
    });
});

והנה העמוד במלואו: http://www.kfr.co.il/pages/vkb.html
ניתן לכתוב בו גם כשהמקלדת מכוונת לאנגלית ומה שיכתב יהיה בעברית. אם אני הייתי בחו"ל זה היה שימושי בעבורי אז אני מקווה שזה יהיה שימושי לאחרים. חיסרון בולט אחד הוא שחייבים לזכור היכן נמצאות האותיות בעברית במקלדת כי הן לא תהיינה כתובות על מקלדות בחו"ל אבל אני חושב שזה בכל מקרה עדיף מלכתוב בקליקים.

קטגוריות: כללי, תכנות
תגיות: , , , , , , ,
פורסם בתאריך 15th אוגוסט 2011 ע"י SoleSoul