ה- גלובליזציה בדיקת בקרת האיכות שומרת על תכנית מקומית ובינלאומית מוכנה לשימוש. היא פועלת על בדיקות משימות ועל בקשות משיכה, וקוראת רק את מה שהשינוי נגע בו:
- קטלוגים. המחרוזות שהשינוי הוסיף או שינה, בכל השפות.
- קוד. השורות שהשינוי מוסיף, עבור טקסט ועיצוב המניחים יסוד על שפה אחת או תרבות אחת.
- דפים. כאשר התכנית קובעת כיצד להפעיל את האפליקציה, הדפים שלה נ 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_mapping | toUpperCase() או 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 mainsource קורא את הקוד מבלי לקרוא את הקטלוגים, ולכן הוא פועל גם כאשר הם עדיין לא הוגדרו. ללא --changed או --diff הוא קורא את כל המאגר. שתי הפקודות יחזירו ערך 1 כאשר יימצאו בעיות; הוסף
--format json כדי לקבל דוח קריא למכונה.