שימוש בסיסי ב gettext

מטרת המדריך

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

למי מיועד המדריך

המדריך מיועד לתלמידים המתחילים את הלימוד התאורטי של שפת C או C++, ומעוניינים להרחיב את הידע שלהם לגבי אפשרויות הבינאום במערכת GNU/Linux.

על איזו מערכת נבנה המדריך

המדריך נבנה על מערכת Debian GNU/Linux אך כל מערכת לינוקס תתאים. הוראות ההתקנה המדוייקות ספציפיות למערכת מבוססת Debian GNU/Linux, אך ינתנו הסברים כלליים גם עבור מערכות אחרות.

לפני תחילת העבודה

עברו על המדריכים לכתיבת תכנית בשפת C ו C++ ובדקו שאתם שולטים בכתיבה, הידור והרצה של תכניות C ו C++ פשוטות:

מערכת gettext

מערכת gettext בנויה מספריית עזר המכילה פונקציות לשימוש בתוך התכנית וממספר תכנות העוזרות להכין את קבצי התרגום.

כתיבת התכנית

נכתוב תכנית פשוטה, כמו שכתבנו במדריכים הקודמים, ונוסיף תמיכה בתרגום. לתכנית נקרא test.cpp בתוך התכנית הרגילה נוסיף קוד שיאפשר תרגום. את הקוד שמאפשר תרגום הקפנו כך שיהודר רק אם קיים מקרו בשם USE_GETTEXT. במהלך ההידור נוסיף את המקרו הזה.

 
/* this is for cout */
#include <iostream>
 
using namespace std;
 
#ifdef USE_GETTEXT
    /* this is for gettext and locale functions*/
#   include <libintl.h>
#   include <locale.h>
 
    /* usefull defines */
#   define PACKAGE_NAME "gettext_test1"
#   define GETTEXT_DIR "//usr//local//share//locale"
#   define CHARSET "UTF-8"
 
    /* convention of using gettext */
#   define _(String) gettext (String)
#else
    /* if we do not use gettext just return the string */
#   define _(String) (String)
#endif
 
int
main (int argc, char* argv[])
{
#ifdef USE_GETTEXT
   /* init the gettext system */
   textdomain (PACKAGE_NAME);
   bindtextdomain (PACKAGE_NAME, GETTEXT_DIR);
   bind_textdomain_codeset(PACKAGE_NAME, CHARSET);
 
   /* init locale */
   setlocale (LC_MESSAGES, "");
   setlocale (LC_CTYPE, "");
   setlocale (LC_COLLATE, "");
#endif
 
   /* print out an internationalized text */
   cout << _("Hello world") << endl;
 
   return 0;
}

הידור התכנית

כדי להשתמש בקוד שמאפשר תירגום בעזרת ספריית gettext נוסיף את המקרו USE_GETTEXT בעזרת הדגל D

  g++ -DUSE_GETTEXT test.cpp -o test

יצירת קובץ תרגום

כעת אנו יכולים לייצר קובץ תרגום ריק ע”י תכנית שרות של מערכת gettext. תכנית השרות xgettext עוברת על קובצי הקוד שלנו ומייצרת קובץ תרגום ריק בשם messages.po

  xgettext -k_ --c++ test.cpp

תרגום

לאחר שהכנו את קובץ התרגום הריק messages.po , נפתח אותו בעורך תקסט, ונוסיף את התרגום לעברית.

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-08-09 21:33+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: test.cpp:39
msgid "Hello world"
msgstr "שלום עולם"

התקנת קובץ התרגום במערכת

לאחר ששמרנו את קובץ התרגום החדש, ניתן להדר אותו לקובץ תרגום בו המערכת יכולה להשתמש. נהדר את קובץ התרגום ע”י תוכנית שרות נוספת של מערכת ה gettext בשם msgfmt

  msgfmt messages.po

לאחר ההידור נקבל קובץ חדש של התרגום שלנו במצבו המהודר messages.mo. את הקובץ הזה צריך להתקין במערכת במקום בו התכנית שלנו תחפש. המקום הנכון לשמור את הקובץ מתקבל ממדריך הבסיס שהגדרנו בתכנית /usr/local/share/locale השפה he והשם בו קראנו לפרויקט בקוד.

  cp messages.mo /usr/local/share/locale/he/LC_MESSAGES/gettext_test1.mo

הרצה

כעת ניתן להריץ את התכנית ב locale של המערכת

  ./test

או ב locale עברי

   LANG=he_IL.utf8 ./test

איך להמשיך

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

מדריכי תכנות

מדריכי תכנות - אוסף מדריכי התכנות בפנגווין.

מדריכים/שימוש_בסיסי_ב_gettext.txt · שונה לאחרונה ב: 2008/06/19 18:34 (עריכה חיצונית)
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0