תיעוד

בדיקת הגלובליזציה

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

ה- גלובליזציה בדיקת בקרת האיכות שומרת על תכנית מקומית ובינלאומית מוכנה לשימוש. היא פועלת על בדיקות משימות ועל בקשות משיכה, וקוראת רק את מה שהשינוי נגע בו:

  1. קטלוגים. המחרוזות שהשינוי הוסיף או שינה, בכל השפות.
  2. קוד. השורות שהשינוי מוסיף, עבור טקסט ועיצוב המניחים יסוד על שפה אחת או תרבות אחת.
  3. דפים. כאשר התכנית קובעת כיצד להפעיל את האפליקציה, הדפים שלה נ renderים עם תרגום צולל.

המאסטר מפעיל את הבדיקה כברירת מחדל לאחר ש־pull request שלו מתמזג. ההגדרות שלו נמצאות ב־ בקרת איכות → גלובליזציה; במתחם העבודה של הגדרות מציג אם הוא פעיל.

מה חוסם כברירת מחדל

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

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

קודי קטלוג

קודמשמעותחוסם כברירת מחדל
missingהמחרוזת אין לה תרגוםכן
invalid_syntaxהתרגום אינו ניתן לפרישה, למשל ICU שבור, או מציג שגיאת מודל: משפט חתוך, סימן פיסוק שנשאר אחריו, מרכאות לא סגורות או מילה כפולהכן
placeholder_mismatchתוויות כתובות או מונחים מוגנים שונים מהמקור, למשל שם מוצר שנכתב פעמייםכן
plural_categoriesצורת רבים שהשפה זקוקה לה חסרהכן
staleהמקור השתנה לאחר שהמחרוזת תורגמהלא
obsoleteהמקור כבר אינו מכיל את המחרוזת, או את הדף שבו היא הופיעהלא

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

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

קודי קוד

קודמה הוא מוצאחוסם כברירת מחדל
hardcoded_textטקסט שאדם קורא ונכתב לתוך הקוד במקום לקטלוג: טקסט JSX ותבנית, תכונות נראות כגון placeholder, title, alt ו־ aria-label, הודעות ואזהרותכן
concatenated_textמשפט המורכב מחלקים: תרגום המחובר לטקסט או לערך באמצעות +, מחרוזת תבנית או אלמנטים סמוכיםכן
locale_numberמספר מעוצב ללא ההגדרות המקומיות של הקורא, כגון toFixed בקוד ממשק המשתמש או toLocaleString() ללא הגדרת שפהלא
locale_dateתאריך או שעה מעוצבים ללא ההגדרות המקומיות של הקורא, או עם תבנית קבועה כגון MM/dd/yyyyלא
hardcoded_currencyסמל מטבע או קוד הכתוב ליד סכוםלא
ordinal_sortטקסט ממוין או משווה לפי קוד תו, או localeCompare ללא הגדרת שפהלא
case_mappingtoUpperCase() או toLowerCase() על טקסט ללא הגדרת שפהלא
physical_directionימין ושמאל ב־CSS ובכיתובי תועלת, בפרויקט עם שפה מימין לשמאללא
postal_code_formatקוד דואר רשום לפי תבנית של מדינה אחתלא
phone_number_formatמספר טלפון המאומת כצפון אמריקאילא
latin_only_inputשם, עיר, רחוב או כתובת המוגבלים ל־a–zלא
joined_listרשימה שאנשים קוראים ומחוברת בפסיק או ב״ות״לא
calendar_namesשמות ימי שבוע או חודשים הכתובים בקוד, או יום ראשון קבועלא
paper_sizeאות, גודל A4 ודומיהם הקבועים בהגדרות הדפסה או PDFלא
fixed_unitיחידת מידה כגון מי, פאונד או מעלות פרנהייט הכתובה ליד מספר מוצגלא
locale_parsingמספר שאדם הקליד נקרא עם parseFloat או Numberלא
ime_compositionכניסת טקסט מטופלת ללא בדיקה אם מילה בסינית, יפנית או קוריאנית עדיין נבניתלא

עיצוב לכל שוק מציג את התיקון לכל אחד מהם.

מה שבדיקת ה־Check קוראת

שלב הקוד מנתח קוד JavaScript ו־TypeScript, כולל JSX, וקורא תבניות Vue, Svelte, Astro, HTML, ERB ו־Handlebars וגם CSS כטקסט. כל כלל חל רק כאשר ההקשר שלו מציין זאת: תבנית קוד דואר נרשמת רק ליד שדה קוד דואר, ורשימה מאוחדת נרשמת רק במקום שבו אנשים קוראים אותה.

  • מתורגם על פי ההגדרה. טקסט בתוך קריאות התרגום והרכיבים של הפרויקט (t(), formatMessage, <Trans>, <FormattedMessage>, $t()) והפונקציות המפורטות בקובץ ההגדרות.
  • לעולם לא טקסט. מונחים מוגנים, וגם המילים שהקובץ ההגדרות מאפשר.
  • הושמט בכוונה. שורה עם i18n-ignore הערה, והשורה שאחריה. ציינו את הסיבה: // i18n-ignore: product name.

החלק האופציונלי world של .coroid/i18n.json קובע את השאר:

{
  "world": {
    "exclude": ["src/legacy/**", "scripts/**"],
    "translate": ["translateText", "i18n.translate"],
    "allow": ["Storefront", "OK"]
  }
}
שדהמשמעות
excludeכללים של קבצים שהכללים מדלגים עליהם
translateפונקציות תרגום בנוסף לאלו של המסגרות עצמן
allowמילים שמעולם לא מתורגמות, חוץ ממונחים מוגנים
formatter, currenciesנקבע על ידי שלב Culture של המאסטר; ראו Culture
renderכיצד להפעיל את האפליקציה עבור דפים בעלי לוקליזציה מדומה; ראו לוקליזציה מדומה

ממצאים ותיקונים

כל ממצא נשמר במהלך הפעלת בדיקת ה־Check ומופיע ברשימת המשימה ב־ בעיות שנמצאו: ממצאי קטלוג מסודרים לפי קטלוג, מפתח ושפה; ממצאי קוד לפי קובץ, שורה והטקסט שנמצא; ממצאי דף לפי דף, אלמנט וטקסט. ממצא נחשב מתוקן כאשר הבדיקה האחרונה של אותה עבודה אינה מציגה אותו עוד.

תרגום טקסטי תשלוםמשימה
נמצאו בעיות
  • פתחui · checkout.total · fr: missingגלובליזציה · לא תורגם
  • בתהליך תיקוןsrc/pricing.tsx:7 · “תמחור פשוט”גלובליזציה · טקסט שנכתב ישירות בקוד
  • פתח/{locale}/ · p#promo · “משלוח חינם על כל הזמנה” · runtime_text (de-DE, ar-SA)גלובליזציה · טקסט שלא נלקח מהקטלוג
  • בתהליך תיקוןui · cart.items · ja: placeholder_mismatchגלובליזציה · התוויות שונות מהמקור
  • תוקןui · cart.count · ar: plural_categoriesגלובליזציה · צורות רבות לא קיימות לשפה זו

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

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

כאשר הבדיקה חוסמת משימה, סוכן המפתח מקבל כל ממצא חוסם, כגון src/pricing.tsx:7 hardcoded_text: “Simple pricing”, יחד עם דרך התיקון שלו. הוא מתקן תרגומים באמצעות מהלך תרגום עבור המשימה, לעולם לא על ידי עריכה ידנית של קטלוגים של שפות אחרות. הוא מעביר טקסט לקטלוג המקורי, כותב מחדש משפטים משולבים כהודעה אחת עם תוויות, ומריץ את הכללים של הקוד על השינוי שלו לפני שהוא מעביר את המשימה הלאה.

תרומות מכל מקור

ה־Check מחיל על כל שינוי אותו תקן, ללא קשר למי שכתב אותו:

  • סוכני Coroid בפרויקטים המתורגמים באופן בינלאומי נמסר בכל משימה: קטלוג המקור ופונקציית התרגום, הודעה אחת לכל משפט, מנגנון העיצוב של הפרויקט, פריסה לוגית כאשר השפה נכתבת מימין לשמאל, והנהוג בשווקים השונים מתוך Culture.
  • בקשות משיכוך מצד אנשים וכלים אחרים עוברות את ה־Coroid Check עם אותם ממצאים והערות. הוא פועל על כל pull request ברגע שה־App של Coroid GitHub מותקן במאגר הקוד ומדיניות הפרויקט מופעלת בעת הגשת בקשות משיכוך.
  • שינויים שמוזגו מבלי לעבור את הבדיקה נתפסים לאחר המיזוג. תרגם מחרוזות שמוזגו מחוץ ל־Coroid הקוד קורא את הבדיקה שבוצעה ב־pull request. הוא יוצר משימה לתרגום של המחרוזות ש־pull request השמיט או שהן לא עודכנו. כאשר הבדיקה חסמה ממצאי קוד, הוא גם יוצר משימה בשם הפוך את הקוד המוזג לבינלאומי ב־pull request, תוך ציון היכן לחפש. לכל מיזוג מוקצית לכל היותר משימה אחת מכל סוג.

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

הפעל אותו בעצמך

המנוע הוא כלי שורת הפקודה coroid-i18n, הגרסה שנקבעה בקובץ ההגדרות שלך:

coroid-i18n check                       # catalogues
coroid-i18n source --changed main       # the code a branch adds since main
coroid-i18n check --source --changed main

source קורא את הקוד מבלי לקרוא את הקטלוגים, ולכן הוא פועל גם כאשר הם עדיין לא הוגדרו. ללא --changed או --diff הוא קורא את כל המאגר. שתי הפקודות יחזירו ערך 1 כאשר יימצאו בעיות; הוסף --format json כדי לקבל דוח קריא למכונה.