i18n
הוא חבילה שמנסה לפשט את העבודה ופיתוח של יישומי בנאי & nbsp;. זה עטיפה דקה סביב כלים קיימים, בgettext ובבל בפרט.
שימוש Basic
# Demo.py
#
ממתורגמן יבוא i18n.translator
supported_languages = ['it_IT', 'fr_FR', 'de_DE']
# להפעיל תרגומים איטלקים
TR = מתורגמן ('/ נתיב / ל/ שורש', supported_languages, 'it_IT')
TR ההדפסה ._ ("שלום עולם!")
שם / נתיב / ל/ root / הוא בספריית השורש של הפרויקט שלך. כאשר מופעים, כיתת מתורגמן יוצרת באופן אוטומטי ספרייה בשם / נתיב / ל/ root / שפות שבי התרגומים מאוחסנים.
הודעות מחלץ
לפני שאני עושה את התרגום בפועל, אתה צריך לחלץ את ההודעות מקבצי המקור שלך, על ידי הפעלת הפקודה extract על מודול i18n, שהוא מעטפת סביב תמצית pybabel ועדכון pybabel:
& Nbsp; פיתון -m i18n --root = / נתיב / ל/ root --languages = it_IT, fr_FR, de_DE תמצית
תמצית נראית לכל ההודעות עטופות בתוך קוראת ל_ (), gettext () או ngettext () ומייצר שפות / template.pot קובץ בשם. זה file` פו gettext סטנדרטי המכילה את כל ההודעות שנמצאו ביישום.
יתר על כן, לחלץ () גם יוצר קובץ קטלוג הודעה לכל אחת מהשפות הנתמכות לפי שפות / CODE $ / LC_MESSAGES / messages.po, שבו קוד $ הוא אחת מהשפות המופיעות בsupported_languages (it_IT, fr_FR וde_DE בדוגמא לעיל ).
קבצי הקטלוג הם כעת מוכנים למתורגם באמצעות אחד מהכלים הקיימים הרבים, למשל QT בלשן או Poedit. לתפקוד התקין של היישום, כל השפות / ההיררכיה צריכה להישמר. אנו ממליצים לעקוב אחר קבצי messages.po השונים במערכת בקרת גרסאות יחד עם קבצים האחרים השייכים ליישום.
הודעות עדכון
במהלך הפיתוח של היישום, אתה בוודאי להוסיף הודעות חדשות לתרגום. הפקודה לחלץ באופן אוטומטי לטפל במקרה זה: אם הוא מוצא קבצים קיימים קטלוג, התוכן שלהם (כולל תרגומים הקיימים) ממוזגת עם ההודעות שחולצו חדש.
קטלוגים ליקוט
זה הכרחי כדי לקמפל את קבצי הקטלוג לפני השימוש בהם עם gettext. כברירת מחדל, אובייקט מתורגמן שלנו באופן אוטומטי הידור כל הקטלוגים מצאו בשפות /, הפקת הקבצים המתאימים .mo. האוסף נעשה רק כאשר קובץ הקטלוג שונתה. משמעות הדבר היא כי ברוב המקרים אתה לא צריך לדאוג האוסף של הקטלוגים.
אם אתה מעדיף לקבל שליטה רבה יותר על שלב זה, אתה יכול לעבור autocompile = False לבנאי של מתורגמן ולעבד אותם באופן ידני משורת הפקודה:
& Nbsp; פיתון -m i18n --root = / נתיב / ל/ root --languages = it_IT, fr_FR, de_DE לקמפל
אחסון תרגומים במסד נתונים
בחלק מהיישומים הוא שימושי כדי לאפשר למשתמש להגדיר תרגומים חדשים ו / או לעקוף את אלה ברירת מחדל. i18n תומך מקרה זה שימוש בכיתת DBTranslator, שהוא סדרה של מתורגמן. כאשר תרגום, DBTranslator נראה ראשון באתר: אם ההודעה לא נמצאה, זה צירים להתנהגות gettext הסטנדרטי.
DBTranslator מבוסס על sqlalchemy. הבנאי שלה לוקח פרמטר מנוע נוסף:
מDBTranslator יבוא i18n.dbtranslator
מcreate_engine יבוא sqlalchemy
מנוע = create_engine ('SQLite: ///db.sqlite')
שורש = '/ נתיב / ל/ שורש'
שפות = ['it_IT', 'fr_FR']
DEST_LANGUAGE = 'it_IT'
TR = DBTranslator (שורש, שפות, DEST_LANGUAGE, מנוע = מנוע)
TR ההדפסה ._ ("שלום עולם")
DBTranslator יוצר באופן אוטומטי translation_entries השולחן בDB. ואז, זה תלוי ביישום לספק ממשק משתמש לתפעל את השולחן. לבדיקה, אתה יכול להשתמש בשיטת add_translation () כדי להכניס תרגום חדש בDB:
tr.add_translation ("it_IT", "hello world", "Ciao mondo")
TR ההדפסה ._ ("hello world") # הדפסים "Ciao mondo"
כיצד להשתמש במתורגמן גלובלי
לפי תכנון, i18n מנסה להימנע מכל מדינה בעולם לחלוטין. זה אומר שאתה יכול מופעים רב מתורגמן וDBTranslator כמו שאתה רוצה, כל אחד מהם מתייחס לספרייה ו / או מסד נתונים שונים. זה שימושי במיוחד לבדיקה.
עם זאת, בפועל מרבית הפרויקטים שירצו להשתמש במתורגמן גלובלי שיודע על ההודעות של כל הרכיבים בפרויקט. יישום ההדגמה מראה דרך לעשות את זה במודול translate.py:
py יבוא
ממתורגמן יבוא i18n.translator
# להגדיר את השורש של הפרויקט לספרייה המכיל קובץ זה
שורש = py.path.local (__ __ קובץ). Dirpath ()
שפות = ['it_IT', 'fr_FR', 'de_DE']
TR = מתורגמן (שורש, שפות, 'it_IT')
_ = Tr._
ngettext = tr.ngettext
אם __name__ == '__main__':
& Nbsp; tr.cmdline (sys.argv)
בדרך זו, את שאר היישום יכול פשוט לייבא ולהשתמש _ () וngettext () מtranslate.py. או, בהעדפה שלך, יבוא ישיר tr tr האובייקט והשימוש ._ () וtr.ngettext () כדי לתרגם את המסרים.
שתי השורות האחרונות של הקוד מאפשרת דרך נוחה לקרוא תמצית ולקמפל משורת הפקודה מבלי לציין dir השורש והשפות הנתמכות באופן ידני. רק להפעיל:
& Nbsp; # תמצית translate.py פיתון ... או לקמפל
דרישות :
- Python
תגובות לא נמצא