Translating Gramps/he

From Gramps
Revision as of 10:36, 20 April 2024 by Avma (talk | contribs) (צורת רבים: format)
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) שמירת התוצרים במחיצות המתאימות ולייצר בקשת 'משיכה' מהמאגר שסועף למאגר הראשי, פעולה שתמזג את התוצרים לתוך המאגר הראשי לאחר סדרת בדיקות תקינות אוטומטיות.

לקריאה נוספת:
אתר גרמפס בגיטהאב 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

או

python update_po.py -p

לקריא נוספת השוואה בין הכלים השונים.

  • הפקודה הבאה תעדכן כל אחד מקובצי ה־po בעץ קוד המקור

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

  cd po
  python update_po -m all

יש להריצה ממחיצת po. בהנחה שקוד המקור נמשך או סועף בהצלחה. לתשומת לב, פקודה זו מתעלמת מהמשתנה --no-wrap, כך שהיא לא ממש מעשית להצפת הבדלי Git.

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

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

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

את העדכון ניתן לבדוק בקלות באמצאות הקובץ check po להריץ את הפקודה שהוזכר לעיל. בהנחה שהקובץ הזה נמשך כל שנדרש זה:

python check_po --skip-fuzzy newlang.po

אם הכל תקין, פלט הפקודה יראה בערך כך:

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 בגרמפס הוא לא אדם שמצטיין בבריאות מעולה כתוצאה מפעילות גופנית נמרצת, או פעיל בתנועת הצופים, המונח הזה בגרמפס בא להגדיר רשומה מסויימת ממצג [[Gramps_5.2_Wiki_Manual_-_Categories/he#סוג־אב_אנשים|סוג־אב אנשים]] שהיא מוקד ההתייחסות למטרות מצג, עריכה ושינוי. אין מילון בעולם שידע לתרגם את המונח הזה באופן שיקלע למשמשעות שניתנה לו במסגרת מייזם גרמפס.

מילון מונחי גרמפס הוא משאב טוב להבנת ההקשר והמשמעות של מונחים כאלה. לכן כאשר מתרגמים את מילון המונחים ומסדר את המונחים המתורגמים לפי סדר אלפביתי, חשוב להשאיר גם 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)

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

משתני תסדיר שורה

לא צריך לתרגם משתני תסדירי שורה כמו %s ו־%d סדר התווים במשתנים אמור להשמר כפי שמופיע במסר המקורי ולא להשתנות. לדוגמה:

אנגלית:

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

תרגום לא תקין לעברית (שימו לב כיצד השתנה סדר התווים):

   אלמנות ממושכת: %s אלמנות במשך %d שנים.

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

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

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

תרגום (לדוגמה לעברית:

  הטבלה טרום לידה: %(byear)d
           הנולד %(male_name)s, הוטבל ב־%(bapyear)d.

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

לפעמים אותם תוי %(something)s ממוקמים במלל ללא רווחים, כמו בדוגמה מטה:

אנגלית:

   This person was baptised%(endnotes)s.

תרגום לעברית:

   אדם זה הוטבל%(endnotes)s.

תרגום תוכן

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

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

book|Title
person|Title

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

כותר
תואר

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

סוגיות מגדר

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

  • מגדר דקדוקי: מתייחס למגדר שמוקצה לשמות עצם. ישנן שפות שמתנהגות כך ואילו אחרות לא. שתי בעיות עיקריות מתעוררות בעת תרגום בין שתי מערכות שפות כאלה, כאשר שפת המקור משתמשת בתוית או כינוי מסויים למגדר, אך בשפת היעד אין כאלה. יש מקרים שבהם השימוש המגדרי ב"You" עשוי להיות דקדוקי בלבד, אך קיימים מקרים שבהם חשוב שה"You" יתייחס לזכר או או נקבה בהתחשב בהקשר המלל. בלאנגלית לדוגמה אין מילה מסויימת למגדר בניגוד לעברית שמבחינה בין 'את' ל'אתה', דבר שמשאיר למתרגם להתמודד עם הסוגיה.
    במקרה ההפוך, כאשר שפת המקור אין בתוית או כינוי מסויים למגדר, אך בשפת היעד יש כאלה. באנגלית אפשר בפשטות לאמור 'Full Moon' או 'Big Ball', במספר ספות כמו צרפתי או ספרדית מקדימים את המילה ב: "el", "le" או או "la" ובזאת נפתרת בעיית התרגום לספרדית. אבל כאשר שפת המקור אינה מציינת את המגדר באופן מפורש או מרומז מתעוררת בעיה שעלולה לשנות את ההקשר בשפת היעד. העלילה מסתבכת עוד יותר כשמתרגמים לעברית כאשר כל 'עצם' למעשה הוא תלוי מגדר, 'כדור' הוא זכר ואילו 'חמה' היא נקבה. לדוגמה ל־"I eat"; אין מגדר שקשור לכינוי "I" לעומת זאת בשפות רבות, ובפרט בעברית, לא רק שהכינוי חייב להיות מסויים למגדר, אלא שצורת הפועל של "eat" חייב להיות מקושר גם על סמך מגדר (אני אוכל, אני אוכלת).
  • מגדר סמנטי: מתייחס לשמות העצם של זכר ונקבה, כפי שהם מובחנים באופן ביולוגי. לכאורה זה נראה מובן מאליו, אך גם כאן מתעוררות בעיות. באנגלית לדוגמה, חתול מכונה רק "he" או "she" אם המגדר ידוע, אחרת, החתול מכונה "it". פתרון כזה לא קיים בשפות רבות. הדרך של העברית לטפל בסוגיה היא בבסיס שם העצם, 'חתול' ו'חתולה'.
  • מגדר חברתי: מתייחס למגדר הביולוגי שמניח על סמך השימוש בשם עצם והחברה שבה נעשה בו השימוש. ההבחנה בין מגדר ותפקיד היתה ברורה יותר לפני חמישה או שישה עשורים אך לא עוד. לדוגמה, המילה האנגלית "secretary" רמזה פעם שהתפקיד ממולא בידי גבר, או 'nurse' שהוא כמובן תפקיד אישה. המצב היום שונה מאוד, גם בעברית לא עלה על הדעת ש'אח' ישמש בתפקיד א'אחות רחמניה'. בחברות מסויימות, לדוגמה למילה "טבח" או "עוזרת" תהיה חלוקה מגדרית ייחודית תלוית תרבות. די ברור שלתפקידים חברתיים – מגדריים רבים שורשים עמוקים, היסטוריים ותרבותיים, ולרוב סטריאוטיפיים מאוד באופיים.

לכללי תטיפול בסוגיה נא לעיין גם בעמוד המלצות לטיפול בסוגיית המגדר

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

אם קיימת מחרוזת במנשק המשתמש הגרפי Glade GUI (כלומר, בקובץ המקור glade.) שדורש מילת הקשר לצרכי התרגום, לא ניתן לתרגם אותה באופן סטטי. במקרה זה, נדרשת הוספת קוד זמן־ריצה לאתחול הדו־שיח המתאים כדי לעקוף את מחרוזת התווית במלל שהתקבל בקריאה ל־sgettext. להלן סדר הפעולות בהן יש לנקוט:

  • יש לודא שליישומון המסויים קיים מזהה משמעותי בקובץ ה־glade. (בניגוד למזהה סתמי שנוצר באופן אוטומטי). לשנות את המזהה במידת הצורך ולודא שאין קוד קיים ששתמש במזהה היישומון הישן! לדוגמה,: שינוי המזהה:
<object class="GtkLabel" id="label3">
למזהה
<object class="GtkLabel" id="place_name_label">
  • הוספת מילת הקשר למחרוזת הניתנת לתרגום בקובץ ה־glade. בדרך זו, כאשר מסתכלים על תוכן קובץ POT או קובץ PO שנגזר ממנו, ניתן לראות הפניה למקום הזה, יחד עם המקום בפועל בקבצי py. אשר גם הם בעלי אותה מחרוזת הקשר. לדוגמה, שינוי המזהה:
<property name="label" translatable="yes">Name:</property>
למזהה
<property name="label" translatable="yes">place|Name:</property>
  • באתחול הדו־שיח המתאים, נדרש להוסיף קוד להגדרת המחרוזת לתרגום נכון בזמן ריצה, לדוגמה:
באפן כללי בקובץ:
PLACE_NAME = _('place|Name:')
בשיטת MergePlace.__init__:
       for widget_name in ('name_btn1', 'name_btn2'):
           self.get_widget(widget_name).set_label(PLACE_NAME)
השיטה המדויקת להתחברות לבקר Gtk תשתנה בהתבסס על רכיב מנשק המשתמש הגרפי המושפע בפועל. לדוגמה, ל־GtkButton השיטה היא set_label, ואילו ל־GtkLabel היר תהיה set_text.
  • לבסוף, חילול קובץ ה־POT מחדש, תרגום מחרוזות ה־PO החדשות שנוספו ובדיקת תוצרי עבודת התרגום.

צורת רבים

הדרישה לתמיכה בצורת רבים עלתה בעבר וטופלה בצורה הבאה:

ראשית, על המתרגם לבדוק ולודא שהמחוזת "Plural-Forms:\n",
זמינה בכותרת קובץ ה.po
(טבלת ערכי המידע לםי קודי מדינה)


  1. msgid מכילה את מחרוזת צורת היחיד באנגלית
  2. msgid_plural מכילה את מחרוזת צורת הרבים באנגלית
  3. msgstr[0] מכילה את הגרסה המתורגמת לצורת היחיד (עבור 1 ולפעמים 0, שמוגדר בכותרת)
  4. msgstr[1] מכילה את גרסת צורת הרבים (עבור 1 + 1 = 2 )
  5. msgstr[2] מכילה את צורת הרבים (עבור 2 + 1 = 3)
  • בשפות בהן נהוגה שיטת צורה אחת, ללא אבחנה בין יחיד לרבים, (יחיד=רבים, צורות רבים: nplurals=1; רבים=0), כמו סינית, הונגרית או טורקית:
msgid "%d second"
msgid_plural "%d seconds"
msgstr [0] "%d 秒"
  • בשפות בהן נהוגה צורת רבים אחת (Plural-Forms: nplurals=2; plural=n != 1;), כמו אנגלית:
msgid "%d hour"
msgid_plural "%d hours"
msgstr [0] "%d hour"
msgstr [1] "%d hours"
  • בשפות בהן נהוגות יותר מצורת רבים אחת, כמו צ'כית:
msgid "%d second"
msgid_plural "%d seconds"
msgstr [0] "%d sekunda"
msgstr [1] "%d sekundy"
msgstr [2] "%d sekund"

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

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.

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

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

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