Translating Gramps/he

From Gramps
Jump to: navigation, search

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

תסדיר קובץ Gettext

כותרת

msginit הוא כלי שירות של GNU, שקורא ספריית /po, ומייצר כותרת לתבנית קובץ gettext:

gramps.pot.

"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2004-12-30 10:52-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <[email protected]>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
  • Project-Id-Version: שם וגרסת החבילה. יש להשלימו אם הוא עדיין לא אוכלס על ידי xgettext.
  • Report-Msgid-Bugs-To : כבר מאוכלס על ידי xgettext. מכיל כתובת דוא"ל או כתובת אתר שבה ניתן לדווח על תקלים במחרוזות המקור (שלא נועדו לתרגום):
    • מחרוזות שאינן משפטים שלמים, נא לעיין בהנחיות המתחזק – הכנת מחרוזות.
    • מחרוזות בהן נעשה שימוש במונחים לא ברורים או שדורשות הקשר נוסף כדי להבינן.
    • מחרוזות המניחות הנחות לא תקניות לגבי סימון תאריך, שעה או כסף.
    • בעיות צורת רבים (ריבוי).
    • איות שגוי באנגלית.
    • תסדיר שגוי.
  • POT-Creation-Date: אוכלס על ידי xgettext.
  • PO-Revision-Date: יש למלא זאת. יאוכלס על ידי עורך קובץ ה־PO בעת שמירת הקובץ.
  • Last-Translator: שם וכתובת הדוא"ל של המתרגם (ללא מרכאות כפולות).
  • Language-Team:שם השפה באנגלית וכתובת הדוא"ל או כתובת אתר עמוד הבית של צוות השפה בו אתם משתתפים.

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

msgid / msgstr / comment / fuzzy

#: gramps.py:10
#, fuzzy
msgid "File not found"
msgstr "קובץ לא נמצא"
  • המלל שמופיע בעקבות התו # משמש להערה בגוף הקוד.
    • ההפניה לקובץ ומספר השורה בו אחרי התו #:
    • הערת קוד או המחרוזת הראשית (msgid) אחרי #.
    • הערת תרגום (של המתרגם) (msgstr) אחרי #

זוהי אפשרות חלופית שנועדה לסייע למתרגם אבל אינה נדרשת לביצוע התרגום.

  • ניתן להוסיף #, fuzzy כאשר המחרוזת אינה עדכנית. כלומר, היה שינוי כלשהו (מחרוזת נוספה, הוסרה או שונתה) ו־xgettext 'ניחש' את התרגום שצריך היה להיות. סביר להניח שהניחוש הזה לא לגמרי מוצלח, אבל לרוב הוא די קרוב.

מחרוזות fuzzy לא ישמשו בתרגום, במקום זאת יעשה שימוש במחרוזת האנגלית (msgid) כברירת מחדל! לכן נדרש לתקן ולאמת את הערכים הלו בעורך התרגום.

  • msgid היא המחרוזת נוכחת בקוד של גרמפס
  • msgstr היא המחרוזת המתורגמת לשפה הרצויה

עצות למתרגמים

כיצד להתחיל

  1. להקפיד לשמור תמיד את התרגומים בקידוד UTF-8 (הזהרו משימוש ב־NotePad) ללא BOM
  2. לא לכתוב־על המחרוזות שבאנגלית, התרגום צריך להיות מתחת למחרוזת המקורית
  3. לשים לב לתווים מיוחדים. הם חייבים להיות באותו מספר וסוג כמו המחרוזת המקורית.
  4. נא לוודא איות ודקדוק בתרגום.
  5. להימנע מתרגם "חופשי מדי". התרגום צריך להיות תואם ככל האפשר למקור.
  6. לא לתרגם מילה במילה, תרגום מילולי עשוי לפגום בשתף השפה ולפגום בהבנת המשתמש את עצם הפעולה או הנושא.
  7. נא להקפיד על עקביות התרגום ולהקפיד על שימוש עקבי במילה או ביטוי מסוים שתורגם ולהיצמד אליהם לאורך כל התרגום.
  8. רצוי לנסות את התרגום לפני שליחתו למיזם להפצה כללית

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

  1. השגת קובץ gramps.pot שכולל את המחרוזות אותן יש לתרגום
  2. יצירת קובץ xx.po מקובץ ה־pot.
  3. תרגום המחרוזות שבתבנית לשפה הרצויה
  4. בדיקת הקובץ המתורגם
  5. העלאת הקובץ המתורגם למאגר Gramps Git.

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

קובץ gramps.pot

תרגום מסרים

לתרגום מסרים (מחרוזות) לשפה הרצויה, יש לפעול בהתאם למתואר בנקודות הבאות:

  • העתקת קובץ gramps.pot לקובץ בשם lang.po, בהתאם לשפה שאליה מעונינים לתרגם, לדוגמה (fr.po לצרפתית, ru.po לרוסית, he.po לעברית, וכן הלאה)

כל אחד מהכלים הבאים מיועד לתרגם מסרים ויכול בהחלט לסייע בעבודת התרגום: (מקצת מהכלים שלהלן אף יבצעו את פעולת המרת קובץ pot. לקובץ po. ולמעשה תיתר את פעולת ההעתקה)

-GTtranslator (גנום, וינדוס),
-KBabel (KDE), Lokalize Lokalize (KDE, וינדוס),
-Emacs po-mode, Virtaal (GNU/לינוקס, מק, וינדוס),
-poedit ( GNU/לינוקס, OSX, וינדוס),

או כל כלי דומה המיועד לתרגום קבצי .po. לחילופין אפשר להשתמש גם בכל עורך מלל לתרגום מסרים. שימוש בעורך מסוף לדוגמה vim, הגדרה נכונה של אפשרות "langmap" יזרזו משמעותית את עבודת התרגום.

  • למרות שגרמפס משתמשת בערכת קידוד UNICODE (UTF-8) עבור ערכת התווים שלה, ניתן להשתמש בערכת תווים מקומית לתרגום. חשוב רק לודא שערכת התווים שבה נעשה שימוש תצויין בשורת Content-Type בקובץ ה־.po. גרמפס תטפל בהמרה ל־UNICODE.
  • תווים במחרוזת האנגלית המקורית שאינם ASCII , חייבים להשמר על ידי העתקתם, ככול שרלוונטי.

תוים מיוחדים

gettexe מקבל ומשתמש בעיצוב מחרוזות בסגנון C כדי ליצור מחרוזות חדשות ומעוצבות. המפעיל (אופרטור) "%" משמש לעיצוב קבוצה של משתנים הכלולים ב־"tuple" (רשימה בגודל קבוע), יחד עם מחרוזת תסדיר, המכילה מלל רגיל ועם "מפרטי משתנים", סמלים מיוחדים כמו "%s" ו־"%d".
%s משמש כמציין מיקום עבור ערכי מחרוזת אותה מעונינים להחדיר למחרוזת מעוצבת.
%d משמש כמציין מיקום עבור ערכים מספריים או עשרוניים.

הקשר

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

כהקשר מיוחד, ניתן למצוא את ההפניה למדריך בצורה הבאה:

'manual|Editing_Dates'

את המחרוזות הללו יש לתרגם רק אם מדריך ויקי למשתמש זמין בשפה הרצויה, לדוגמה, התרגום להולנדית אמור להראות כך:

 'Datums_aanpassen'

ניתן לראות שקידומת ההקשר הושמטה מהתרגום באופן תקין.

המחרוזת הזו מפנה למקטע, Editing_Dates Datums_aanpassen.

בדיקת קובץ ה־.po

Gnome-important.png
לשינוי סביבה

עבור Gramps 4.0, 52 ו־master, נא לעיין בסביבה חדשה.

הפעלת הפקודה:
make
במחיצת po תכשל ותחזיר הודעת שגיאה אם נמצאו ליקויים בקובץ ה־po שתורגם. את השגיאות הללו נדרש לתקן. הבדיקה לא תציף כמובן שגיאות תחביר ,כתיב ודיקדוק בשפה עצמה, שגיאות מסוג זה הן באחריות המתאגם לנפות.

לפעמים יהיה קושי בהבנת השגיאת שהבדיקה מציפה, הרצת הבדיקה הבאה, שעשויה לספק פלט עם מלל רב יותר.

check_po

הפעלת הפקודה הבאה במחיצת ה־.po:

./check_po --skip-fuzzy lang.po

או

python check_po --skip-fuzzy lang.po > lang

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

File:               nl.po
Template total:     3816
PO total:           3671
Fuzzy:              125
Untranslated:       12
%s mismatches:      0
%d mismatches:      2
%() name mismatches:9
%() missing s/d:    0
Runaway context:    0
XML special chars:  0
Last character:     15
Shortcut in msgstr: 16
PO Coverage:        99.67%
Template Coverage:  95.89%
Localized at:       97% (previous gramps.pot)

מתוך הפלט ניתן להבין שישנן 3,816 מחרוזות לתרגום בקובץ ה־ .potאך בקובץ ה־ .poרק 3,671 מחרוזות, כלומר קובץ ה־ .po מכסה 96% בקרוב.
קימות עדיין 12 מחרוזות שלא תורגמו וכ־120 מחרוזות "לא ברורות" (fuzzy).
ב־15 מחרוזות אין התאמה ב'תו האחרון' .אי התאמה בערכים ב־9 חרוזות מסוג %() וב־2 מחרוזות מסוג "טופל" %d (ערכים מספריים)

אם ההודעה previous gramps.potמוחזרת, המשמעות היא שלא נעשה שימוש בגרסת קובץ ה־gramps.potהאחרון, למידע נוסף נא לעיין בסעיף עדכון התרגום. תוכנת גרמפס תתעלם ממחרוזות מסוג fuzzy ומחרוזות שלא תורגמו, ותשתמש במחרוזות ראשיות בשפה האנגלית.

-------- %d mismatches --------------

2 מחרוזות שמכילות מספרים או מספרים עשוריים אינן תואמות למקור.

-------- last character not identical ---------
msg nr: 98, lineno: 602
msgid "Could not make database directory: "
msgstr "Kon geen gegevensbestandsmap aanmaken"

זהו מידע בעל ערך רב, כי ניתן בקלות יחסית להבחין בבעיות, גם אם לא מבינים את השפה המתורגמת! די ברור שהתו האחרון אמור להיות ":"

סטטיסטיקה

הפעלת הפקודה הבאה במחיצת ה־.po:

msgfmt --statistics lang.po

או

msgfmt.exe --statistics lang.po

כאשר lang הוא קוד השפה המתורגמת. במקרה זה לא אמורה להתקבל הודעת שגיאה. בעיקרון הפקודה מחזירה מידע בלבד בתסדיר מרוכז: 3533 הודעות מתורגמות, 125 תרגומים לא בררים, 12 הודעות לא תורגמו.

GNU `gettext' כלי עזר

כלי עזר של GNU `gettext' מספקים מגוון תוכניות עצמאיות שנועדו לאפשר טפלול קבוצות מחרוזות מתורגמות או כאלו שטרם תורגמו בדרכים שונות:

 msgattrib - התאמה וטפלול תכונות בקטלוג המסרים
 msgcat - שילוב מספר קטלוגים של המסרים
 msgcmp - השוואה בין קטלוג המסרים והתבנית
 msgcomm - התאמה בין שני קטלוגים של מסרים
 msgconv - המרת ערכת תווים לקטלוג מסרים
 msgen - ייצירת קטלוג מסרים באנגלית
 msgexec - עיבוד התרגום של קטלוג המסרים
 msgfilter - עריכת תרגום של קטלוג המסרים
 msgfmt - הידור קטלוג המסרים לתסדיר בינארי (.po->.mo)
 msggrep - התאמת דפוסים בקטלוג המסרים
 msginit - אתחול קטלוג המסרים
 msgmerge - מיזוג קטלוג המסרים ותבנית
 msgunfmt - ביטול הידור קטלוג המסרים מתסדיר בינארי
 msguniq - איחוד תרגומים כפולים בקטלוג המסרים

לבדיקת תחביר (כותרת, תסדיר, תחום):

msgfmt -c nl.po
msgfmt.exe -c nl.po

לבדיקת מאיצי מקלדת (קו תחתון):

msgfmt --check-accelerators=_ nl.po
msgfmt.exe --check-accelerators=_ nl.po

Gettext lint

Gettext lint הם אוסף של כלים לבדיקת תקפות, עקביות ואיות של PO. מספר תסריטי פייתון לא נתמכים עוד בגרסה האחרונה של expat.

Pology (KDE)

Pology היא ספריית פייתון ואוסף כלי שורת פקודה לעיבוד מעמיק של קבצי PO, תסדיר קובץ התרגום של תוכנת התרגום GNU Gettext. היכולות של Pology נעות בין פעולות דיוק על מסרי PO בודדים, לפעולות חוצת קבצים על מקבץ גדול של קבצי PO. Pology משמשת את צוותי התרגום KDE לבדיקת תחביר.

ערכת כלי תרגום

ערכת כלי תרגום הם אוסף כלים שימושיים להמקמה, כולל כלי בדיקה, אימות, מיזוג וחלוץ הודעות מקובצי המקמה.

שמירה כקובץ .mo

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

  • בתוכנת poedit, ניתן להגדיר להדר תמיד קובץ .mo בעת שמירת שינויים, מתפריט קובץ -> ביצוע הידור ל־m0..." או מתפריט "עריכה -> העדפות ובלשונית כללי במקטע "עריכה" לסמן את ביצוע 'הידור ל־mo באופן אוטומטי בעת השמירה. תיבת דו־שיח תחזיר הודעת אזהרה אם קיימות שגיאת תחביר בקובץ ה־.po.
  • Lokalize, GTranslator מספקות גם הן בדיקת תחביר בעת השמירה. אם אירעה שגיאה ניתן לנווט להודעות המכילות שגיאות ןלטפל בהן.

נא להפעיל תכונה זו כדי למנוע שגיאות בתהליך ההידור.

תסדור (הידור) .po file

שליחת קובצי התרגום

בגמר עבודת התרגום ולאחר בדיקה, מגיע השלב בו צריך 'לדחוף' את התוצרים (קובצי ה־po.) לאתר הפיתוח והתחזוקה של המייזם ב־GitHub . הפעולה הזאת מחייבת הרשאה לדחיפת קבצים, אותה ניתן לקבל יחסית בקלות לאחר יצירת חשבון Git ופניה למנהלן גרמפס באחד מערוצי התקשורת.

התצורה שלהלן מפשטת את פעולת הדחיפה של ענץ, חזרה לשרת הפתוח:

$ git config --global push.default upstream

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

לקריאה נוספת:
אתר גרמפס ב־GitHub https://github.com/gramps-project/gramps
מבוא קצר ל־Git מדריך GIT למתרגמים

עדכון התרגום

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

בהנחה שעץ מקורות הקוד של גרמפס סועפו או הועתקו למחשב מקומי כפי שהוסבר במבוא קצר ל־Git, להלן מספר פעולות לביצוע על מנת לעדכן את התרגום:

  • עדכון מקור הקוד מ־Git. ניתן לעשות זאת מתך מסוף ובאמצעות הפקודה
git pull --rebase

ממחיצת השורש Gramps. פעולה זו תוריד קובץ gramps.pot עדכני.

  • קובץ התרגום הקודם (שמצריך עדכון) ישמש כבסיס מחרוזות שלא השתנו:
msgmerge lang.po gramps.pot -o newlang.po

או

msgmerge --no-wrap lang.po gramps.pot - o newlang.po

כאשר lang הוא קוד השפה הרצויה. האפשרות --no-wrap תמנע שינויים עקב גלישת מלל אוטומטית, ניתן להשתמש במשתנה זו אם קובץ ה־po הקודם נבנה כך. משתנה --no-wrap תספק הבדלי Git קריאים יותר.

  • בדיקת מסרים לא בררים ( fuzzy) ־וכמובן תרגם המסרים שמצריכים תרגום, תיקון טעיות ושגיאות כפי שדובר ברישא ב-newlang.po. לאחר בדיקה ווידוא שהכל תקין, יש לשנת את שם הקובץ newlang.po ל־lang.po ולדחוף אותו ל־Git כפי שנעשה עם הקובץ המקורי.
  • אם הפקודה msgmerge אינה זמינה במערכת, יש להתקין את החבילה gettext. עבור windows.
  • עדכון תרגום ותרגום לאחור, לדוגמה, כדי למזג תרגומי מאסטר של ענף לענף מוקדם יותר, את הפעולות הללו יש לבצע בענף הקודם (בהנחה שקובץ gramps.pot מעודכן):
msgmerge -C lang.po master-lang.po gramps.pot -o newlang.po
. לאחר מכן יש לפתור את סוגיית המסרים הלא ברורים כרגיל.

יש גם את make target שעושה את הפעולות הבאות:

  • יצירת תבנית gramps.pot חדשה מקובצי קוד המקור
  cd po
  ./genpot.sh or python update_po.py -p see differences between tools.
  • Updates each po file in the source tree

It may be an overkill for you, but if you feel like using it, you can run:

  cd po
  python update_po -m all

in the po directory. This assumes that you have already successfully configured the source. Note, this command ignores --no-wrap option, so not practical for Git diffs.

Gnome-important.png
Environment change

For Gramps 4.0, 52 and master, see new environment.

בדיקת העדכונים שבוצעו

You can test your update easily with the above mentioned check_po file. If you downloaded this file, just do:

python check_po --skip-fuzzy newlang.po

If everything is ok, the output will be something like this:

File:               newlang.po
Template total:     3075
PO total:           3075
Fuzzy:              0
Untranslated:       0
%s mismatches:      0
%d mismatches:      0
%() name mismatches:0
%() missing s/d:    0
Runaway context:    0
XML special chars:  0
Last character:     0
Shortcut in msgstr: 0
PO Coverage:        100.00%
Template Coverage:  100.00%

התקנת התרגום

Gnome-important.png
החלפת סביבה

לגרסת גרמפס 4.0, 52 ו־master, נא לעיין בסביבה חדשה.

כדי להשתמש בתרגום החדש באופן מיידי, ובכול חלקי המערכת, ניתן להתקין רק את תוכנה של ספריית ה־po, לשם כך נדרש לבנות את המקור תחילה בדרך הבאה:

./autogen.sh
make
cd po
make --prefix=/usr install     #כמשתמש על (שורש)!

רצף הפעולות הללו אמורת להתקין את התרגומים ל־/usr/share/locale/{lang}/LC_MESSAGES/gramps.mo, כאשר {lang} היא השפה הרצויה. ניתן כמובן להעתיק את הקבצים באופן ידני למחיצה הזאת, חשוב רק לוודא ששם הקובץ יקרא gramps.mo.

כמו כן, נא לודא שההתקנה נעשיתן רק מתוך ספריית ה־po, אחרת תותקן גרסת הפיתוח של גרמפס, שאינה נתמכת ומיועדת למטרות לבדיקות בלבד!

הרצת גרסת ענף master עם התרגום הטרי

נתוני i18n נמצאים לעתים קרובות במחיצה ../share/locale עם קידומת ברירת המחדל.

כך שניתן להשתמש ברצף הפקודות:

python setup.py build
sudo python setup.py install --root=/     #!כמשתמש על

פעולה זו תתקין את קבצי ה־.mo במחיצה ../share/locale/xx/LC_MESSAGES, בהתאם לקידומת ברירת המחדל. (xx היא קידומת קוד השפה הרצויה)
או

python setup.py build
python setup.py install --root=/home/שם משתמש/gramps
                        --prefix="/home/שם משתמש/gramps4" 
                        --enable-packager-mode     #כמשתמש רגיל

פעולה זו תתקין את גרמפס ואת התרגומים במחיצת /home/... (מחיצת הבית) של המשתמש.

$GRAMPSI18N (המקמה)

למעשה אפילו לא צריך להתקין את הקבצים כדי לבדוק אותם. אפשרות זאת שימושית למדי כי ניתן להפעיל את גרמפס מבלי להזדקק להרשאות משתמש־על. צריך זכור שכשמשתמשים בענף מאסטר (master), התהליך בגרמפס i18n מתבצע בערך כך:

  • כשמקלידים את פקודת python build בשורש עץ המקור (/home/user/Gramps לדוגמה) כל קבצי ה־po/*.po מהודרים לקובצי build/mo/{lang}/*.mo.
  • לאחר מכן עם הקלדת הפקודה python install בתוך מחיצת ה־po, קבצי ה־.mo האלה מועתקים ל־{prefix}/share/locale/{lang}/LC_MESSAGES כקבצי gramps.mo.

אבל ניתן לשנות את המקום שבו תוכנת גרמפס מחפשת כברירת מחדל את הקבצים האלה על ידי שינוי משתנה הסביבה $GRAMSI18N. לכן, לחילופין ניתן להגדיר את הסביבה ולהימנע משלב התקנת python setup באופן הבא: (התחביר בשימוש ב־csh או tcsh יהיה מעת שונה)

 [user@localhost /home/user/Gramps]$ mkdir -p po/en_GB/LC_MESSAGES
 [user@localhost /home/user/Gramps]$ cp po/en_GB.gmo po/en_GB/LC_MESSAGES/gramps.mo
 [user@localhost /home/user/Gramps]$ cd gramps
 [user@localhost /home/user/Gramps/src]$ GRAMPSI18N=$PWD/../po LANG=en_GB.UTF-8 python gramps.py
gramps.sh

במשגר גרמפס (מועתק מ־{prefix}/bin/gramps) ניתן להגדיר סביבת עבודה בדרך הבאה:

export GRAMPSDIR=/[הנתיב לתקיית גרמפס]
export GRAMPSI18N=/[הנתיב למחיצת locale gramps]

כאשר משתנה הסביבה $GRAMPSDIR הוא הנתיב לתקיית גרמפס ומשתנה הסביבה $GRAMPSI18N הוא הנתיב למחיצת locale gramps.

בדיקה מהירה

לבדיקה מקומית מהירה, ללא הצורך בהידור כל קובצי התרגומים, אשר פשוט לשמור את קובץ ה־.po כקובץ .mo, או להשתמש בכלי השירות של gettext msgfmt בתוך תיקיית / po (תאור מפורט ב כלי עזר):

msgfmt -o gramps.mo your_lang.po
msgfmt.exe -o gramps.mo your_lang.po

פעולה זו תיצור קובץ gramps.mo, גרסה מהודרת של קובץ ה־.po. צריך לשמור להעתיק/לשמור אותו בנתיב התרגום (כפי שתואר מעלה).

צרופי־מילים, אימרות ופתגמים, לא קל לתרגם

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

מונחי גרמפס

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

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

לדוגמה: ה־Active Person בגרמפס הוא לא אדם שמצטיין בבריאות מעולה כתוצאה מפעילות גופנית נמרצת, או פעיל בתנועת הצופים, המונח הזה בגרמפס בא להגדיר רשומה מסויימת ממצג [סוג־אב אנשים] שהיא מוקד ההתייחסות למטרות מצג, עריכה ושינוי. אין מילון בעולם שידע לתרגם את המונח הזה באופן שיקלע למשמשעות שניתנה לו במסגרת מייזם גרמפס.

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

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

LDS מונוחי

כנסיית ישו המשיח של קדושי אחרית הימים (מכונים גם מורמונים) שומרת הרבה נתונים גנאלוגיים. בארצות הברית, הם כנראה הארגון הלא ממשלתי עם הרישומים המפורטים ביותר שניתן למצוא. חקר־יוחסין מאוד חשוב לכנסייה המורמונית. הם גם אלו שיצרו את הגדרת תסדיר GEDCOM.אחד מאתרי חקר יוחסין המפורסמים ביותר – FamilySearch – שיך גם הוא לכנסיה.

לכנסיית LDS טרמינולוגיה מסויימת מאוד שעשויה לייצור קושי נוסף בתרגום מעבר לקושי שקיים כפי שהודגם מעלה. קיימות שתי גישות לטיפול במידע.

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

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

להלן מספר ביטויי LDS ייחודיים:

  1. LDS Ordinance names:
    • Sealed to Parents
    • Sealed to Spouse
    • LDS Baptism
    • Endowment
  2. LDS Status names for Ordinances:
    • Child
    • Cleared
    • Completed
    • Infant
    • Pre-1970
    • Qualified
    • Stillborn
    • Submitted
    • Uncleared
    • BIC (לידה במנזר)
    • DNS (לא לשגר)
    • Canceled
    • DNS/CAN (Do Not Submit/Previous sealing cancelled)

סוגיות מתקדמות

Format line parameters

Format line parameters such as %s and %d should not be translated. The order of these parameters should not be changed. Examples:

English:

   Long widowhood: %s was a widow %d years.

Translation (using Backward English as an example :-):

   Gnol doohwodiw: %s saw a wodiw %d sraey.

Named format line parameters such as %(something)s and %(something)d also should not be translated. Feel free to change the order of named parameters to correctly phrase the message in your language. Also, use hints provided by the names. Examples:

English:

   Baptized before birth: %(male_name)s
           born %(byear)d, baptized %(bapyear)d.

Translation into Backward English:

   Dezitpab erofeb htrib: %(byear)d
           nrob %(male_name)s, dezitpab %(bapyear)d.

In the above example, the verb "born" should be in masculine form (if verbs in your language have gender, that is), since the person born is apparently a male.

Sometimes those %(something)s are positioned in a text without spaces, like in the example below:

English:

   This person was baptised%(endnotes)s.

Translation into Backward English:

   Siht nosrep saw desitpab%(endnotes)s.

תרגום תוכן

In some cases, two different concepts can be expressed by the same word in English and yet require different translations. For example, the title of the book and the nobility title of the person are expressed by the same Title word. However, in other languages different words are needed to describe the book title and the person's title.

To mitigate such problems, a context can be added to the translation string. A context-enabled string has a vertical line separating the context from the string:

book|Title
person|Title

The correct translation should not include either the context or the separator. The context is to give the translator idea of what the string means. However, both the context and the separator must not be in the translated string, so in backward english the above is translated into

Eltitkoob
Eltitnosrep

If you are a Gramps translator and need a developer to help you add a context to the Gramps source files, please ask for it on the gramps-devel list.

תרגום תוכן בתויות ממשק המשתמש

If there is a string in the Glade GUI (i.e., in a .glade source file) that requires the translation context, it's impossible to have it translated statically. In this case, one needs to add runtime code to the corresponding dialog initialization to override the label string with the text obtained with an sgettext call. I.e.,

  • Verify the relevant widget has a meaningful id in the .glade file (as opposed to a silly autogenerated one). Modify the id if needed and make sure no existing code used the old widget id! e.g., change
<object class="GtkLabel" id="label3">
into
<object class="GtkLabel" id="place_name_label">
  • Add a context to the translatable string in the .glade file. This way, when you look at the POT file or a PO file derived from it, you see a reference to this place, along with the actual place in the .py file(s) which also has the same context string. e.g., change
<property name="label" translatable="yes">Name:</property>
into
<property name="label" translatable="yes">place|Name:</property>
  • In the corresponding dialog initialization, add code to set the string to the correct translation during runtime, e.g.,:
globally in the file:
PLACE_NAME = _('place|Name:')
in the MergePlace.__init__ method:
       for widget_name in ('name_btn1', 'name_btn2'):
           self.get_widget(widget_name).set_label(PLACE_NAME)
The exact method to call on the Gtk control will be different based on the actual GUI element affected. e.g., a GtkButton has a set_label method, whereas a GtkLabel has a set_text.
  • Regenerate the POT, translate the new PO strings, and test your work.

צורת רבים

There was requests for plural forms support.

First, translators need to check if information is available on .po header :"Plural-Forms:\n". (See samples)

  1. msgid contains the singular string in english
  2. msgid_plural contains the plural string in english
  3. msgstr[0] contains the singular translated version (for 1 and sometimes 0, set on header)
  4. msgstr[1] contains the plural version (for 1 + 1 = 2 )
  5. msgstr[2] contains the plural form (for 2 + 1 = 3)
  • For language with one form (singular=plural, Plural-Forms: nplurals=1; plural=0), like Chinese, Hungarian or Turkish:
msgid "%d second"
msgid_plural "%d seconds"
msgstr [0] "%d 秒"
  • For language with one plural form (Plural-Forms: nplurals=2; plural=n != 1;), like english:
msgid "%d hour"
msgid_plural "%d hours"
msgstr [0] "%d hour"
msgstr [1] "%d hours"
  • For language with more plural forms (like Czech):
msgid "%d second"
msgid_plural "%d seconds"
msgstr [0] "%d sekunda"
msgstr [1] "%d sekundy"
msgstr [2] "%d sekund"

As a final check, please do ensure that the following command does not throw any errors:

msgfmt -c filename.po

Translating mnemonics keys(Keyboard Shortcut keys)

Mnemonics are accelerator keys (also known as Keyboard Shortcut keys) you find in labels, accessible by pressing the ALT key together with the mnemonic. You see then in the translated text with a low line, e.g., '_Help' is shown as 'Help' with an underline under the H, and can be put to focus/selected by pressing ALT+h.

It is nice if mnemonics on a screen are unique, but it is not required. If you use twice the same mnemonic, the user must press repeatedly the accelerator to switch between the different entries. However, note the following rule:

  • "If duplication of access keys in a window is unavoidable, you should still refrain from duplicating the access keys for any of these buttons that appear in the same window: OK, Cancel, Close, Apply or Help."

So you should check in your language what the mnemonic key is for those buttons, and avoid using the same in translated text

Gnome-important.png
Warning

Some fonts family will not properly display mnemonics on "g", "j", "p", "q" or "y" as these print the letter over the line under it making it very hard to distinguish the small line. Please avoid to use mnemonics key bindings on these letters. Also try to avoid i and l, as people have difficulty distinguishing between those.

Capital letters are no problem though, underlining e.g., G will work just fine as the letter does not write over the line.

תרגום יחסי קרבה

Translating relationships is not done within the .po files, except for occasional father and mother strings here and there in the interfaces and reports. Complete translation of all relationships for the language/culture is done inside a relationship calculator plugin.

In short, the need for a plugin comes from the impossibility to translate "first cousin twice removed" in languages such as, e.g., German or Russian. See the Relationship Calculator page for details on why and how to create such a plugin.

תרגום תאריכים

Handling date translation is not entirely done within the .po files. Complete handling of date translation for each language/culture is done inside a dedicated date handler module.

The need for a separate module comes from the requirements to handle culture-specific parsing and displaying of dates. For example, the month and day order is different between most European countries and the US. Also, each language has its own set of acceptable modifier and qualifiers for the date: things like "from X to Y" or "between X and Y" may have different word order. Same with "around", "calculated", "estimated". Add to this calendar names, and you have a compelling need for a dedicated module. See the Date Handler page for details on why and how to create such a module.

תרגום עמודי man

Gnome-important.png
Environment change

For gramps 4.0, 52 and master, see new environment.

You can also translated the man pages into your own language.

For the development version (master branch) you can find the required starting files under the directory data/man. You will find the files

  • Makefile.am
  • gramps.1.in

First off all you must make a directory for your language under data/man.

cd data/man

and do

mkdir xx

where xx is your languagecode (fr for French, sv for Swedish, etc.) You should use Git. See the introduction to Git.

Next step is to copy the Makefile.am and gramps.1.in from data/man to your new directory. Translate all relevant strings in the data/man/xx/gramps.1.in file. Change the file data/man/xx/Makefile.am:

  • add the line mandir = @mandir@/xx
  • change the line && CONFIG_FILES=data/man/xx/$@ $(SHELL)

Next step: change the file data/man/Makefile:

  • add xx to the line SUBDIRS = fr nl sv

The final step is to alter the file Configure.in :

  • add data/man/xx/Makefile to the line AC_CONFIG_FILES([

All changes must be committed and pushed to the server:

git commit -am "Add man page for xx"
git push

You should see no errors when you run the

./configure
make
scripts.

Gnome-important.png
Install

This last step must be done only in the data/man/xx directory. If not, your normal gramps installation will be overwritten. And this step must be done as superuser(su)

sudo make install

This will put the gramps.1.gz file into /usr/local/share/man/xx/man1 directory. You could also use a prefix. Then you do:

sudo make --prefix=/usr/share install

To see the result of your work, do:

man -L xx gramps

תרגום מדריך הויקי

על מנת לשפעל את קישורי העזרה בעת לחיצה על לחצן F1 בתוכנת גרמפס, נדרש קיומו או עריכתו של המשתנה MANUALS באופן שיכיל את מקומי קוד השפה הרצויה בקובץ:

display.py בגרמפס 4 או גרסאות מאוחרות יותר

או

GrampsDisplay.py לגרסת 3 או מוקדמות יותר


בסביבות שורה 41 בקובץ, ניתן למצוא את המקטע שנראך כך:

#list of manuals on wiki, map locale code to wiki extension, add language codes
#completely, or first part, so pt_BR if Brazilian portugeze wiki manual, and
#nl for Dutch (nl_BE, nl_NL language code)

MANUALS = {
   'nl' : '/nl',
   'fr':  '/fr',
}

ערכים אלה ממפים קוד השפה לתוסף בויקי, כך לדוגמה, כדי להוסיף עברית, נדרש לשנות אתהמקטע ולהוסיף שורה:

MANUALS = {
   'nl' : '/nl',
   'fr':  '/fr',
   'he':  '/he',
}
  • כל ערך 'manual|...' בקובץ gramps.pot מתייחס למקטע מסומים במדריך, לכן יש להקפיד להשתמש בכותרות טובות לסעיפים כדי שזה לא ישתנה יותר מדי לאורך הזמן.

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

  • ניתן לערוך ישירות את עמודי הויקי במרשתת או לחלופין באמצעות כלים כמו txt2po או po4a. כך גם קובץ gettext הקודם של המדריך וזיכרון תרגום עשויים לעזור בשדרוג קובצי gettext מיושנים שיצאו משימוש. לדוגמה,, מאחסן ערכים קיימים מ־/usr/share/locale.

עמודים יעודיים לשפות

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

תרגום מתקעים ותוספים