• בלוג
  • בואו נלמד את המחשב שפה חדשה

בואו נלמד את המחשב שפה חדשה

08/10/2019

אחד הדברים החשובים כשלומדים שפה (טבעית) חדשה הוא להקיף את עצמך באותה שפה מכמה שיותר כיוונים. הכיוון שלנו חשוב כמתכנתים הוא כמובן שורת הפקודה או ה Shell, ומסתבר שבמערכת יוניקס אפשר בקלות לבקש מה Shell לדבר בכל שפה שתרצו.

הפקודה הראשונה שחשוב להכיר היא locale. מפעילים אותה עם -a כדי לקבל רשימה של כל השפות שהמערכת שלכם מכירה:

$ locale -a
C
C.UTF-8
en_US.utf8
POSIX

בשביל ללמד את המחשב שפה חדשה נצטרך להוסיף את קבצי ה Locale שמתאימים לשפה זו. הקובץ /etc/locale.gen כולל רשימה של קבצי locale שאפשר להתקין. רוב השמות שם יהיו בהערה ואתם יכולים פשוט להוציא מהערה את השפה שאתם רוצים להוסיף למערכת, או להוסיף שורה חדשה בסוף הקובץ. אני לומד צרפתית אז אוציא אותה מהערה:

fr_FR.UTF-8 UTF-8

אחרי זה מפעילים את הפקודה locale-gen כדי להתקין את קבצי השפה החדשים:

$ locale-gen
Generating locales (this might take a while)...
  fr_FR.UTF-8... done
  en_US.UTF-8... done
Generation complete.

ונשמח לגלות שהשפה הותקנה באמצעות קריאה נוספת ל locale:

$ locale -a
C
C.UTF-8
en_US.utf8
fr_FR.utf8
POSIX

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

כמשתמש רגיל הפקודה locale מציגה את המידע לגבי השפה הנוכחית שלנו:

$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

בשביל לשנות שפה כל מה שצריך הוא להגדיר משתני סביבה בשם LANG ו LC_CTYPE. אני רוצה שהשינוי יהיה קבוע לכן אכניס את שתי השורות הבאות לקובץ ה ~/.profile שלי:

export LANG=fr_FR.utf-8
export LC_CTYPE=fr_FR.utf-8

ו... voilà המחשב מתחיל לדבר צרפתית:

$ date
lundi 7 octobre 2019, 14:38:29 (UTC+0000)