איך לתרגם קבצי PO מבלי לשבור את האפליקציה שלך
TABLE OF CONTENTS
קבצי PO נראים כמו קבצי טקסט פשוטים עד שתרגום שגוי של %s, צורת ריבוי חסרה או עריכה של msgid שוברת את האפליקציה שלך. השתמש בתהליך עבודה זה כדי לתרגם את המחרוזות המיועדות למשתמשים, תוך שמירה על מבנה gettext ללא שינוי.
אל תדביק את כל הקובץ במתרגם טקסט רגיל. קובץ PO הוא קרוב לקוד מקור: המילים ניתנות לתרגום, אך מבנה הקובץ, משתני המקום, הערות ומדדי הריבוי חייבים להישאר ללא שינוי.
שיטה 1: השתמש במתרגם קבצי PO
בחר בשיטה זו כאשר אתה רוצה טיוטה ראשונה מהירה ובטוחה, ואינך רוצה לערוך ידנית את זוגות msgid / msgstr.
-
גבה את קובץ ה-
.poהמקורי. שמור עותק נקי במאגר שלך לפני שליחת הקובץ למתרגם. אם הקובץ המתורגם נשבר, תצטרך גרסה תקינה להשוואה. -
פתח מתרגם המכיר קבצי PO. השתמש בכלי שנבנה עבור קבצי gettext, כגון OpenL PO Translator, כלי תרגום בתשלום לפי שימוש. כלי כזה אמור לתרגם את המחרוזות היעד תוך שמירה על מחרוזות המקור, הערות, משתני המקום ומבנה הקובץ. אם אתה עדיין בוחר כלים, השווה אפשרויות במדריך שלנו המדריך למתרגמי PO הטובים ביותר.
-
העלה את קובץ ה-
.po. השתמש בקובץ השפה שמכיל ערכיmsgidו-msgstr. אם יש לך רק תבנית.pot, צור קודם קובץ.poבשפת היעד ואז העלה אותו. -
בחר את שפת המקור והיעד. התאם את שפת המקור לטקסט שב-
msgid, ולא לשפת ממשק הניהול שלך. לדוגמה, אם הקובץ מכיל מחרוזותmsgidבאנגלית ואתה צריך תרגום לספרדית, בחר אנגלית לספרדית. -
הורד את הקובץ המתורגם. שמור אותו לפי מוסכמת שמות הלוקאל שהמסגרת שלך מצפה לה. תוספים של WordPress משתמשים לרוב בתבנית שם-תחום פלוס לוקאל, בעוד Django בדרך כלל שומר קבצים תחת
locale/<language>/LC_MESSAGES/. -
בדוק תחילה את המחרוזות המסוכנות. חפש בקובץ המתורגם את הסימנים
%,{,},<,>,msgid_plural,msgctxt, ואת#, fuzzy. אלו הם הערכים שסביר להניח שישפיעו על התנהגות האפליקציה בזמן ריצה. -
בדוק את הקובץ המתורגם באפליקציה שלך. טען את השפה באופן מקומי ועבור בין המסכים שמשתמשים במחרוזות המתורגמות. קובץ PO אינו נחשב גמור כאשר הוא מתורגם; הוא גמור כאשר האפליקציה עדיין מוצגת בצורה תקינה.
שיטה 2: תרגום קבצי PO ב-Poedit
בחר בשיטה זו כאשר דרוש לך בדיקה אנושית, תאימות ל-WordPress, או תהליך עבודה מדויק לפי ערך.
-
פתח את הקובץ ב-Poedit. Poedit הוא עורך תרגום ייעודי לפורמטים של PO ולוקליזציה נוספים; העורך הבסיסי חינמי, עם תכונות Pro בתשלום עבור תהליכים מורכבים יותר. עבור WordPress, המדריך הרשמי של Polyglots מסביר ש-Poedit יכול ליצור קבצי
.poו-.moמתוך קובץ POT ותומך בצורות רבים וב-UTF-8. -
עדכן מהתבנית POT אם המקור השתנה. אם המפתחים שינו את הטקסט באפליקציה, עדכן את קובץ ה-
.poמה-.potהאחרון לפני התרגום. כך מחרוזות חדשות, מוסרות ומסומנות כ-fuzzy יהיו גלויות במקום לשלוח טקסט ממשק מיושן בשקט. -
תרגם רק את השדה
msgstr. ה-msgidהוא המחרוזת המקורית שהאפליקציה שלך משתמשת בה כדי למצוא את התרגום. בתהליכי gettext רגילים, המתרגמים צריכים לערוך אתmsgstr, לא אתmsgid. -
שמור על המשתנים בדיוק כפי שהם. אל תתרגם או תשנה רווחים במשתנים כמו
%s,%d,%1$s,{name},%(count)s,:name, או תגי HTML. אם סדר המילים חייב להשתנות, העבר את המשתנה כיחידה אחת. -
טפל בצורות רבים כתרגומים נפרדים. ערך רבים יכול להכיל
msgid,msgid_plural, ומספר ערכים שלmsgstr[n]. מלא כל משבצת רבים הנדרשת לשפת היעד במקום להעתיק את אותה משפט לכל מקום. -
שמור וקומפל את קובץ ה-
.moאם האפליקציה שלך דורשת זאת. יש סטאקים שמבצעים קריאה ישירה לקבצי.poבמהלך הפיתוח, אך WordPress ורוב מערכות gettext משתמשות בקבצי.moמקומפלים בזמן הריצה. Poedit יכול לקמפל קובץ.moבעת השמירה; Django יכולה לקמפל הודעות באמצעותdjango-admin compilemessages. -
פתור אזהרות לפני העלאה. ב-Poedit, סמלי אזהרה מצביעים לרוב על משתנים שבורים, משתנים חסרים או אי התאמה בצורות הרבים. תקן אותם לפני ייבוא התרגום ל-WordPress, Django, Drupal או לענף השחרור שלך.
שיטה 3: שימוש בפלטפורמת לוקליזציה
בחר באפשרות זו כאשר מספר מתרגמים, עורכים או מנהלי שחרור צריכים לעבוד על אותם קבצי PO.
-
ייבא את קובץ ה-PO לפלטפורמה התומכת ב-gettext. Weblate ופלטפורמות לוקליזציה דומות תומכות בתהליכי עבודה עם קבצי PO. פלטפורמות לוקליזציה צוותיות הן לרוב מוצרים בתשלום, אם כי ל-Weblate יש גם אפשרות קוד פתוח לאירוח עצמי. הטיפול שלהן בהערות, כותרות, מחרוזות “fuzzy” ומשתנים שונה, לכן בדוק את הגדרות הפורמט לפני העלאת קבצים לסביבת ייצור.
-
הפעל בדיקות משתנים ותגים. הפעל כללי QA עבור משתנים בסגנון printf, משתנים בשם, תגי HTML/XML וצורות רבים. בדיקות אלו מזהות טעויות שספלקצ’ק רגיל לא יכול לזהות.
-
השאר הערות מפתחים גלויות. הערות PO יכולות לשאת הקשר כמו הפניות למקור, הערות מפתחים שנמשכו, דגלים ומחרוזות מקור קודמות. מתרגמים זקוקים להערות אלו כאשר תווית UI קצרה כמו “Open” יכולה להיות פועל, תואר או פקודת תפריט.
-
השתמש בזיכרון תרגום עם ביקורת. זיכרון תרגום מועיל למחרוזות UI חוזרות, אך הוא עלול להעתיק תרגום ישן להקשר חדש. בדוק מחרוזות חוזרות כאשר
msgctxt, הפניות למקור או ממשק המשתמש הסובב השתנו. -
ייצא קבצי 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 | לבדוק קודם | #, fuzzy | Fuzzy מציין שהתרגום עשוי להיות לא עדכני או לא מאושר. |
#. הערות מפתחים | בדרך כלל לא | #. 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 מתורגם
- הרץ בדיקת gettext אם התקנת את gettext.
msgfmt --check --check-format -o /tmp/messages.mo path/to/messages.po
הפקודה הזו בודקת תחביר, כותרות ומחרוזות פורמט, ואז יוצרת קטלוג מקומפל זמני אם הקובץ תקין.
- קמפל את הקובץ בדרך שהמסגרת שלך מצפה לה.
django-admin compilemessages
בפרויקטים של Django, הפקודה compilemessages מקמפלת קבצי .po שנוצרו על ידי makemessages לקבצי .mo עבור תמיכה ב-gettext.
- חפש תרגומים ריקים.
grep -n 'msgstr ""' path/to/messages.po
שדות msgstr ריקים עשויים להיות מכוונים עבור ערכים שלא תורגמו, אך הם לא צריכים להפתיע אותך בזמן שחרור.
- חפש מחרוזות fuzzy.
grep -n '#, fuzzy' path/to/messages.po
מחרוזות fuzzy צריכות להיבדק על ידי אדם לפני שחרור. כברירת מחדל, msgfmt לא משתמש בתרגומים fuzzy אלא אם אתה מקמפל עם --use-fuzzy, כך שערך fuzzy יכול להתנהג כמו מחרוזת שלא תורגמה בקטלוג הסופי.
- בדוק את ממשק המשתמש האמיתי. פתח את המסכים שמכילים טפסים, ספירות ברבים, הודעות שגיאה, תפריטי חשבון וזרימות תשלום. בדיקת PO מזהה בעיות בקובץ; רק בדיקות UI מזהות ניסוח מסורבל, גלישת טקסט וחוסר הקשר.
איזו שיטה כדאי להשתמש?
| מצב | שיטה מומלצת | למה |
|---|---|---|
| אתה צריך טיוטה ראשונה מהירה עבור קובץ PO אחד | מתרגם קובצי PO | הדרך המהירה ביותר עם שמירה על מבנה |
| אתה מתחזק תוסף או ערכת עיצוב ל-WordPress | Poedit | תהליך עבודה מוכר ל-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.
מקורות
- GNU gettext manual: PO Files — הסבר רשמי של gettext על פורמט קובץ PO.
- GNU gettext manual: PO File Entries — מקור למידע על
msgid,msgstr, הערות, דגלים ומבנה הערך. - GNU gettext manual: Entries with Plural Forms — מקור למבנה ערכים עם צורות ריבוי.
- GNU gettext manual: msgfmt Invocation — מקור למידע על
msgfmt --checkואימות מחרוזות פורמט. - OpenL PO Translator — עמוד מוצר של OpenL לתרגום קבצי
.poתוך שמירה על מצייני מקום ומשתנים. - Poedit — האתר הרשמי של Poedit לעורך תרגום PO והגרסה המקצועית.
- WordPress Polyglots Handbook: Poedit — מדריך WordPress לשימוש ב-Poedit, קבצי POT, קבצי PO, הידור MO ואזהרות על מצייני מקום.
- Django documentation: Translation — תהליך העבודה של Django עם קבצי הודעות ותרגום.
- Django documentation: compilemessages — מדריך פקודות Django להידור קבצי
.poלקבצי.mo. - Drupal documentation: PO and POT files — הסבר של Drupal על קבצי
.po,.pot, הקשר, צורות ריבוי, הערות ומשתנים. - Weblate documentation: GNU gettext PO — מידע של פלטפורמת לוקליזציה על כותרות PO, מחרוזות מקור קודמות, מחרוזות מיושנות וקבצי MO שנוצרים.