איך לכתוב הביתה מחו"ל בעברית
אחותי נמצאת עכשיו בטיול בחו"ל. היא כותבת לנו לפעמים מיילים ומשתפת אותנו בחוויות מהטיול. זה נחמד מאוד חוץ מהעובדה שקשה לקרוא את המיילים כי הם כתובים בעיבריש, כלומר, עברית באותיות לטיניות. הסיבה היא כמובן שלא מותקן במחשבים בחו"ל 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
ניתן לכתוב בו גם כשהמקלדת מכוונת לאנגלית ומה שיכתב יהיה בעברית. אם אני הייתי בחו"ל זה היה שימושי בעבורי אז אני מקווה שזה יהיה שימושי לאחרים. חיסרון בולט אחד הוא שחייבים לזכור היכן נמצאות האותיות בעברית במקלדת כי הן לא תהיינה כתובות על מקלדות בחו"ל אבל אני חושב שזה בכל מקרה עדיף מלכתוב בקליקים.
תגיות: html, javascript, jquery, keyboard layout, אנגלית, מקלדת, עברית, פריסת מקשים
פורסם בתאריך 15th אוגוסט 2011 ע"י SoleSoul
15 תגובות
Excellent!
תודה!
מגניב ביותר!!!
אפשר להשתמש בזה באתרים, למשל בשדה אימייל לשים את זה כי אין אימייל בעברית…
לפני מספר שנים המרתי תוכנה שכתבתי באקסס, למערכת WEB.
אחת הבעיות הקשות הייתה הזנת טפסים, לאחר שהרגלתי כבר את העובדים שבשדות שיש בהם רק עברית, המקלדת אוטומטית בעברית, ובשדות שהם רק אנגלית, המקלדת אנגלית.
ופתאום צריך להפסיק באמצע הזנת הטופס להחלפת שפה.
אז בניתי פתרון כמו זה
והוא הוחל על שדות מסויימים וכפה על המקלדת את השפה
אצלינו כל המקלדות היו זהות אז עשיתי זאת בעזרת מערכים של אותיות [כולל למקרה של CAPS-LOCK]
רעיון מעולה
רעיון אחד אחרון לשיפור
תוסיף צילום של מקלדת אנגלית-עברית למקרה שנתקעים עם אות אחת שלא זוכרים את המיקום שלה
יש בעיה חבר'ה.
שני חברים ניסו להשתמש בעמוד הזה. אחד מגרוזיה ואחד מאיטליה ולשניהם זה כתב באנגלית. אני לא מצליח לחשוב על דרך לדבג את זה. הסיבה היחידה שאני יכול לחשוב עליה היא שמקלדות שונות עשויות לשלוח קוד שונה עבור מקשי האותיות. אני כמובן לא בטוח.
אם למישהו יש רעיון איך לבדוק או איך לתקן את זה אשמח לשמוע.
אני חושב שהבנתי מה היתה הבעיה.
במקומות ציבוריים הרבה פעמים ה-javascript חסום. כאשר זה כך, העמוד פשוט כותב כל מה שמכניסים אליו בלי לתרגם. זה לא בטוח אבל יכול להיות שזאת הסיבה.
למה קיפחת את האות W ? 🙂
לטיפולך.
שלום סהר.
הייתה לי איזושהי בעיה עם האותיות q ו-w. מכיון שיש במקלדת פעמיים גרש וסלאש זה גרם לשינוי לא מכוון של הקלט. ניסיתי לשחזר את הבעיה והכל עבד כמו שצריך אז שיניתי את הקוד כך שגם האותיות האלה יעבדו. תודה על ההערה.
תודה רבה 🙂
חבל שאתה לא מפרסם את הדבר המצויין הזה כאפליקציה
זה מאוד שימושי !
תודה 🙂
אפליקציה למה? לא לפלאפונים, נכון? בפלאפונים בכל מקרה יש מקלדת על המסך והסיכוי שמישהו יצטרך לכתוב בפלאפון של מישהו אחר מחוץ לארץ לא גדול. זה מיועד לבתי מלון וכאלה.
יש גם את הבעיה שכתבתי באחת התגובות למעלה. למרות שהקמתי מכונה וירטואלית עם XP בלי עברית לא הצלחתי להגיע למצב שזה לא עובד ולכן אני לא יודע מה הבעיה ואיך לפתור אותה.
הבנתי , ניסית לשאול אותם מה הפלט שנשלח מהמקלדות שלהם(עם השיטה שאתה בדקת) כדי לאמת את הציטוט הבא :
"הסיבה היחידה שאני יכול לחשוב עליה היא שמקלדות שונות עשויות לשלוח קוד שונה עבור מקשי האותיות."?
שניהם סיפרו לי על זה אחרי שהם חזרו :/
אין קשר רציף עם החבר'ה בחו"ל.
להבדל בין קידאון לפרס התוודעתי לפני כבר שנה וחצי, כשכתבתי מדמה טרמינל (יציאות של עמינדב).
במקרה אחר, לקוח רצה שאני אמנע מאינפוט להכתב בעברית. כפיתי על המקלדת באינפוט להיות בקיפרס, ואז עשיתי tolowercase. לא חף מבאגים, אבל ללקוח הזה הגיעו באגים כאלו 🙂