איך לתרגם קבצי PO מבלי לשבור את האפליקציה שלך

OpenL Team 7/3/2026
איך לתרגם קבצי PO מבלי לשבור את האפליקציה שלך

TABLE OF CONTENTS

קבצי PO נראים כמו קבצי טקסט פשוטים עד שתרגום שגוי של %s, צורת ריבוי חסרה או עריכה של msgid שוברת את האפליקציה שלך. השתמש בתהליך עבודה זה כדי לתרגם את המחרוזות המיועדות למשתמשים, תוך שמירה על מבנה gettext ללא שינוי.

אל תדביק את כל הקובץ במתרגם טקסט רגיל. קובץ PO הוא קרוב לקוד מקור: המילים ניתנות לתרגום, אך מבנה הקובץ, משתני המקום, הערות ומדדי הריבוי חייבים להישאר ללא שינוי.

שיטה 1: השתמש במתרגם קבצי PO

בחר בשיטה זו כאשר אתה רוצה טיוטה ראשונה מהירה ובטוחה, ואינך רוצה לערוך ידנית את זוגות msgid / msgstr.

  1. גבה את קובץ ה-.po המקורי. שמור עותק נקי במאגר שלך לפני שליחת הקובץ למתרגם. אם הקובץ המתורגם נשבר, תצטרך גרסה תקינה להשוואה.

  2. פתח מתרגם המכיר קבצי PO. השתמש בכלי שנבנה עבור קבצי gettext, כגון OpenL PO Translator, כלי תרגום בתשלום לפי שימוש. כלי כזה אמור לתרגם את המחרוזות היעד תוך שמירה על מחרוזות המקור, הערות, משתני המקום ומבנה הקובץ. אם אתה עדיין בוחר כלים, השווה אפשרויות במדריך שלנו המדריך למתרגמי PO הטובים ביותר.

  3. העלה את קובץ ה-.po. השתמש בקובץ השפה שמכיל ערכי msgid ו-msgstr. אם יש לך רק תבנית .pot, צור קודם קובץ .po בשפת היעד ואז העלה אותו.

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

  5. הורד את הקובץ המתורגם. שמור אותו לפי מוסכמת שמות הלוקאל שהמסגרת שלך מצפה לה. תוספים של WordPress משתמשים לרוב בתבנית שם-תחום פלוס לוקאל, בעוד Django בדרך כלל שומר קבצים תחת locale/<language>/LC_MESSAGES/.

  6. בדוק תחילה את המחרוזות המסוכנות. חפש בקובץ המתורגם את הסימנים %, {, }, <, >, msgid_plural, msgctxt, ואת #, fuzzy. אלו הם הערכים שסביר להניח שישפיעו על התנהגות האפליקציה בזמן ריצה.

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

שיטה 2: תרגום קבצי PO ב-Poedit

בחר בשיטה זו כאשר דרוש לך בדיקה אנושית, תאימות ל-WordPress, או תהליך עבודה מדויק לפי ערך.

  1. פתח את הקובץ ב-Poedit. Poedit הוא עורך תרגום ייעודי לפורמטים של PO ולוקליזציה נוספים; העורך הבסיסי חינמי, עם תכונות Pro בתשלום עבור תהליכים מורכבים יותר. עבור WordPress, המדריך הרשמי של Polyglots מסביר ש-Poedit יכול ליצור קבצי .po ו-.mo מתוך קובץ POT ותומך בצורות רבים וב-UTF-8.

  2. עדכן מהתבנית POT אם המקור השתנה. אם המפתחים שינו את הטקסט באפליקציה, עדכן את קובץ ה-.po מה-.pot האחרון לפני התרגום. כך מחרוזות חדשות, מוסרות ומסומנות כ-fuzzy יהיו גלויות במקום לשלוח טקסט ממשק מיושן בשקט.

  3. תרגם רק את השדה msgstr. ה-msgid הוא המחרוזת המקורית שהאפליקציה שלך משתמשת בה כדי למצוא את התרגום. בתהליכי gettext רגילים, המתרגמים צריכים לערוך את msgstr, לא את msgid.

  4. שמור על המשתנים בדיוק כפי שהם. אל תתרגם או תשנה רווחים במשתנים כמו %s, %d, %1$s, {name}, %(count)s, :name, או תגי HTML. אם סדר המילים חייב להשתנות, העבר את המשתנה כיחידה אחת.

  5. טפל בצורות רבים כתרגומים נפרדים. ערך רבים יכול להכיל msgid, msgid_plural, ומספר ערכים של msgstr[n]. מלא כל משבצת רבים הנדרשת לשפת היעד במקום להעתיק את אותה משפט לכל מקום.

  6. שמור וקומפל את קובץ ה-.mo אם האפליקציה שלך דורשת זאת. יש סטאקים שמבצעים קריאה ישירה לקבצי .po במהלך הפיתוח, אך WordPress ורוב מערכות gettext משתמשות בקבצי .mo מקומפלים בזמן הריצה. Poedit יכול לקמפל קובץ .mo בעת השמירה; Django יכולה לקמפל הודעות באמצעות django-admin compilemessages.

  7. פתור אזהרות לפני העלאה. ב-Poedit, סמלי אזהרה מצביעים לרוב על משתנים שבורים, משתנים חסרים או אי התאמה בצורות הרבים. תקן אותם לפני ייבוא התרגום ל-WordPress, Django, Drupal או לענף השחרור שלך.

שיטה 3: שימוש בפלטפורמת לוקליזציה

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

  1. ייבא את קובץ ה-PO לפלטפורמה התומכת ב-gettext. Weblate ופלטפורמות לוקליזציה דומות תומכות בתהליכי עבודה עם קבצי PO. פלטפורמות לוקליזציה צוותיות הן לרוב מוצרים בתשלום, אם כי ל-Weblate יש גם אפשרות קוד פתוח לאירוח עצמי. הטיפול שלהן בהערות, כותרות, מחרוזות “fuzzy” ומשתנים שונה, לכן בדוק את הגדרות הפורמט לפני העלאת קבצים לסביבת ייצור.

  2. הפעל בדיקות משתנים ותגים. הפעל כללי QA עבור משתנים בסגנון printf, משתנים בשם, תגי HTML/XML וצורות רבים. בדיקות אלו מזהות טעויות שספלקצ’ק רגיל לא יכול לזהות.

  3. השאר הערות מפתחים גלויות. הערות PO יכולות לשאת הקשר כמו הפניות למקור, הערות מפתחים שנמשכו, דגלים ומחרוזות מקור קודמות. מתרגמים זקוקים להערות אלו כאשר תווית UI קצרה כמו “Open” יכולה להיות פועל, תואר או פקודת תפריט.

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

  5. ייצא קבצי PO והרץ בדיקות מקומיות. אל תסמוך על הייצוא בעיניים עצומות. החזר את הקובץ המתורגם לאפליקציה, קמפל אם צריך, ובדוק את המסכים לפני מיזוג.

כללי קבצי PO שאסור לעבור עליהם

פריט POלתרגם?דוגמה בטוחהלמה זה חשוב
msgidלאmsgid "Save changes"האפליקציה משתמשת במחרוזת המקור הזו כמפתח חיפוש ברבים מתהליכי gettext.
msgstrכןmsgstr "Guardar cambios"זהו הטקסט בשפת היעד שהמשתמשים רואים.
msgctxtלאmsgctxt "button"הקשר עוזר להבחין בין מחרוזות מקור זהות.
%s, %d, %1$sלאHello, %s -> Hola, %sקוד הריצה מחליף את המשתנים האלו בערכים חיים.
{name}, %(count)s, :nameלאWelcome, {name}שמות המשתנים חייבים להישאר תואמים לקוד האפליקציה.
תגיות HTMLבדרך כלל לא<strong>Warning</strong>יש לתרגם את הטקסט, לא את תחביר התגית.
msgid_pluralלאmsgid_plural "%d files"צורת הרבים במקור שייכת לנתיב הקוד המקורי.
msgstr[0], msgstr[1]כן, בזהירותmsgstr[0] "%d file"לכל שפת יעד יש כללי ריבוי משלה.
#, fuzzyלבדוק קודם#, fuzzyFuzzy מציין שהתרגום עשוי להיות לא עדכני או לא מאושר.
#. הערות מפתחיםבדרך כלל לא#. Button labelהערות אלו עוזרות למתרגמים להבין את ההקשר.

דוגמה מהירה: תרגום PO בטוח לעומת שבור

הנה ערך gettext רגיל:

#. %s is the user's display name.
#, c-format
msgid "Welcome back, %s"
msgstr ""

תרגום ספרדי תקין משאיר את %s ללא שינוי:

#. %s is the user's display name.
#, c-format
msgid "Welcome back, %s"
msgstr "Bienvenido de nuevo, %s"

תרגום שבור משנה את המשתנה:

msgid "Welcome back, %s"
msgstr "Bienvenido de nuevo, % s"

הרווח הקטן הזה יכול להיות משמעותי. הכלי של GNU msgfmt --check-format נועד לאתר חוסר התאמות בתחביר משתנים כמו % שגוי, וגם Poedit מזהיר מפני בעיות נפוצות עם משתנים. לרשימה רחבה יותר של מחרוזות שאסור לגעת בהן, השתמשו במדריך שלנו ל-מה לא לתרגם.

איך לבדוק קובץ PO מתורגם

  1. הרץ בדיקת gettext אם התקנת את gettext.
msgfmt --check --check-format -o /tmp/messages.mo path/to/messages.po

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

  1. קמפל את הקובץ בדרך שהמסגרת שלך מצפה לה.
django-admin compilemessages

בפרויקטים של Django, הפקודה compilemessages מקמפלת קבצי .po שנוצרו על ידי makemessages לקבצי .mo עבור תמיכה ב-gettext.

  1. חפש תרגומים ריקים.
grep -n 'msgstr ""' path/to/messages.po

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

  1. חפש מחרוזות fuzzy.
grep -n '#, fuzzy' path/to/messages.po

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

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

איזו שיטה כדאי להשתמש?

מצבשיטה מומלצתלמה
אתה צריך טיוטה ראשונה מהירה עבור קובץ PO אחדמתרגם קובצי POהדרך המהירה ביותר עם שמירה על מבנה
אתה מתחזק תוסף או ערכת עיצוב ל-WordPressPoeditתהליך עבודה מוכר ל-WordPress עם קומפילציה ל-.mo
אתה מתחזק אפליקציית Djangoמתרגם PO או Poedit, ואז compilemessagesהתרגום יכול להיות מהיר, אך עדיין נדרשת קומפילציה של המסגרת
יש לך הרבה שפות ומבקריםפלטפורמת לוקליזציההקצאה טובה יותר, היסטוריה, בקרת QA וביקורת
אתה מתרגם מחרוזות שמיועדות למפתחיםביקורת אנושית אחרי תרגום מכונהלמונחי קוד, משתנים והקשר יש חשיבות רבה יותר
אתה מבצע לוקליזציה גם לקבצי JSON או i18n של צד לקוחהשתמש בתהליך עבודה מותאם לפורמטכללי PO לא תמיד מתאימים ל-JSON, YAML או הודעות ICU

אם הפרויקט שלך משלב קבצי gettext PO עם קבצי JSON של לוקליזציה, תרגם כל פורמט עם כלי שמבין את המבנה שלו. קבצי PO מבוססים על msgid ו-msgstr; לוקליזציה ב-JSON מבוססת על מפתחות וערכים. לתהליך עבודה כזה, ראה את המדריך שלנו ל-מתרגמי JSON הטובים ביותר ב-2026.

שאלות נפוצות

האם אפשר לתרגם קבצי PO עם Google Translate?

אפשר להעתיק ערכי msgstr בודדים למתרגם כללי, אבל העלאה או הדבקה של כל קובץ ה-PO למתרגם טקסט רגיל היא מסוכנת. מתרגמים כלליים עלולים לשנות את ה-msgid, הערות, בריחת גרשיים, אינדקסים של רבים או משתנים. במקום זאת, השתמש במתרגם שמבין PO, Poedit או פלטפורמת לוקליזציה.

מה ההבדל בין .po, .pot ו-.mo?

.pot הוא תבנית שמופקת מהקוד המקורי. בדרך כלל היא מכילה מחרוזות מקוריות אך ללא תרגומים שלמים. .po הוא קובץ התרגום העריך לשפה יעד אחת. .mo הוא קטלוג בינארי מקומפל שרבות מהאפליקציות שמבוססות על gettext טוענות בזמן ריצה.

האם צריך לתרגם את msgid?

לא, לא בתהליך העבודה הרגיל. יש לתרגם את msgstr. המדריך של GNU gettext מתאר את msgid כמחרוזת המקור הלא מתורגמת ואת msgstr כתרגום; מחרוזות msgid מופקות ומנוהלות על ידי כלי gettext.

איך בודקים אם קובץ PO תקין?

הרץ msgfmt --check --check-format אם gettext מותקן, פתח את הקובץ ב-Poedit, או השתמש בבדיקות QA של פלטפורמת הלוקליזציה שלך. לאחר מכן קומפייל ותבדוק את הקובץ בתוך האפליקציה. אימות הוא הכרחי, אך אינו מחליף בדיקות ממשק משתמש.

מה קורה אם אני פוגע במשתנה?

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

האם OpenL יכול לתרגם קבצי PO?

כן. OpenL PO Translator נבנה עבור קבצי gettext .po ומצהיר שהוא שומר על משתנים ומחזיקי מקום ללא שינוי בזמן תרגום ליותר מ-100 שפות. הוא משתמש בתהליך תרגום מסמכים בתשלום לפי שימוש, אז כדאי להשתמש בו לטיוטה ראשונה מהירה כאשר חשוב לשמור על מבנה ה-PO יותר מאשר לעשות הכל ידנית. אם יש לך רק תבנית .pot, צור קובץ .po בשפת היעד לפני השימוש ב-OpenL.

מקורות