ה- גלובליזציה בדיקת בקרת האיכות שומרת על תאימות בינלאומית של הפרויקט. היא פועלת על בדיקות משימות ועל בקשות משיכה, ובוחנת רק את מה שהשינוי נגע בו:
- קטלוגים. המחרוזות שהשינוי הוסיף או שינה, בכל השפות.
- קוד. השורות שהשינוי מוסיף, עבור טקסט ועיצוב המניחים יסוד על שפה או תרבות מסוימת.
- דפים. כאשר הפרויקט מציין כיצד להפעיל את האפליקציה, הדפים שלו מוצגים עם תרגום צוללת.
המסייע מפעיל את הבדיקה כברירת מחדל לאחר ש־pull request שלו מתמזג. ההגדרות שלו נמצאות ב־ בקרת איכות → גלובליזציה; במתחם העבודה של הגדרות מציג האם הוא פעיל.
מה חוסם כברירת מחדל
שינוי חוזר לתיקון כאשר הוא משאיר מחרוזות חסרות או שבורות, או כאשר הקוד שהוא מוסיף מכניס טקסט שאנשים קוראים ישירות לתוך הקוד או מרכיב משפט מחלקים. כל השאר מדווח כממצא ואינו חוסם דבר עד שתבחרו לחסום אותו. ממצאי עיצוב, מיון ופריסה נשארים מדווחים עד שהפרויקט יראה אותם בקוד שלו.
בחרו מה יחסום תחת בקרת איכות → גלובליזציה: קודי הקטלוג, מה בקוד גורם לשינוי לחזור, ו בעיות דף ששולחות שינוי לתיקון. בדוק קוד מקור ו הצג דפים מכבים את שלבי הקוד והדף.
קודי קטלוג
| קוד | משמעות | חוסם כברירת מחדל |
|---|---|---|
missing | למחרוזת אין תרגום | כן |
invalid_syntax | התרגום אינו ניתן לפענוח, למשל ICU שבור | כן |
placeholder_mismatch | התווים המחליפים שונים מהמקור | כן |
plural_categories | צורת רבים שהשפה זקוקה לה חסרה | כן |
stale | המקור השתנה לאחר תרגום המחרוזת | לא |
המילון, כללי אורך ומילים אסורות מדווחים על הקודים שלהם כאשר קובץ ההגדרות שלכם מגדיר אותם.
קודי קוד
| קוד | מה הוא מוצא | חוסם כברירת מחדל |
|---|---|---|
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 | כניסת טקסט שנטופלה ללא בדיקה אם מילה בסינית, יפנית או קוריאנית עדיין נבנית | לא |
עיצוב לכל שוק מציג את התיקון לכל אחד מהם.
מה הבדיקה קוראת
שלב הקוד מפרש 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 | נקבע על ידי שלב התרבות של המאסטר; ראה תרבות |
render | כיצד להפעיל את האפליקציה עבור דפים בעלי לוקליזציה מדומה; ראה לוקליזציה מדומה |
ממצאים ותיקונים
כל ממצא נשמר בריצת ה-Coroid 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גלובליזציה · צורות רבות לא קיימות לשפה זו
ממצאי איכות מהבדיקה של גלובליזציה: מחרוזות קטלוג, שינוי שנוסף לקוד ודף פסאודו-מקומי, קוד בעיה אחד לכל ממצא. נתונים אילוסטרטיביים.
בבקשות משיכה, ממצאי קוד מופיעים גם כהערות על השורות המשתנות: ככישלון כאשר הם חוסמים, כאזהרה כאשר הם רק מדווחים.
כאשר ה-Coroid Check חוסם משימה, סוכן המפתח מקבל כל ממצא חוסם, כגון src/pricing.tsx:7 hardcoded_text: “Simple pricing”, יחד עם דרך התיקון. הוא מתקן תרגומים באמצעות פגישת תרגום עבור המשימה, לעולם לא על ידי עריכה ידנית של קטלוגים של שפות אחרות. הוא מעביר טקסט לקטלוג המקורי, כותב מחדש משפטים משולבים כהודעה אחת עם תוויות כתחליף, ומריץ את כללי הקוד על השינוי שלו לפני שהוא מעביר את המשימה הלאה.
תרומות מכל מקור
ה-Coroid Check מחיל את אותו הסטנדרט על כל שינוי, ללא קשר לכותב:
- סוכני Coroid העובדים על פרויקט מבוסס-בינלאומיות מקבלים בכל משימה: את הקטלוג המקורי ופונקציית התרגום, הודעה אחת לכל משפט, מנחה הפורמט של הפרויקט, פריסה לוגית כאשר שפה נכתבת מימין לשמאל, והכללים של השווקים מתוך תרבות.
- בקשות משיכה מאנשים וכלים אחרים עוברות את הבדיקה דרך Coroid Check, עם אותם ממצאים והערות. הפעל את בצע סקירה של כל PR כדי להריץ אותו על כל pull request.
- שינויים שמוזגו מבלי לעבור את הבדיקה נתפסים לאחר המיזוג. תרגם מחרוזות שמוזגו מחוץ ל-Coroid קורא את הבדיקה שבוצעה על ה-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 כדי לקבל דוח קריא למכונה.