איך למדתי 12 שפות - בלילה אחד

משתמשים בחדשות העדכניות ביותר מלימוד מכונה ובמטמון אחסון חכם

דרך ארוכה לשפות

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

התוכנית

הכל מתחיל ומסתיים במנוע התרגום לשימוש. הודות לשימוש באובונטו כאחד מהנהגים היומיים שלי, גיליתי פעם בחנות האפליקציות אפליקציה קטנה ונחמדה בשם "Argos translate", שהיא מנוע תרגום בקוד פתוח הבנוי על דגמי ה- ML האחרונים הדומים לאלה שמפעילים את DeepL . אם אינך מכיר את DeepL, זהו מתרגם נהדר לשימוש בחינם באתר האינטרנט שלהם.

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

לכן הגשתי שירות אחר, Cloud Translations מ- GCP המציע 500,000 תווים בחינם לחודש ואז גובה קצת כסף על כל 1,000,000.

הכל קשור למטמון

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

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

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

איש אחד, 12+ שפות

השפות הנתמכות (כרגע) הן:

  • "en": אנגלית
  • "דה": גרמנית
  • "fr": צרפתית
  • "es": ספרדית
  • "eo": אספרנטו
  • "אל": יווני
  • "כן": יפנית
  • "ru": רוסית
  • "היי": הינדית
  • "הוא": עברית
  • "tr": טורקי
  • "af": אפריקאית
  • "ar": ערבית
  • "ko": קוריאני

כדי לבדוק את הגרסאות השונות, פשוט מקם את קוד השפה אחרי כתובת ה- URL הבסיסית. לדוגמא: "https://flaming.codes/fr". וזה הכל!

לסיכום היישום שלי, ההתקנה נראית כך:

  • כל עמוד נבנה באופן סטטי לפחות כל 4 שעות, אך רק לפי דרישה; פירוש הדבר שעבודת תרגום חדשה נעשית לכל היותר כל 4 שעות עבור אתר נתון
  • התרגומים עצמם נטענים לראשונה מפיירסטור; רק אם אין דבר זמין, המיתרים מתורגמים + מאוחסנים במטמון ב- Firestore

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

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

  • Tom