chrome.i18n

תיאור

אפשר להשתמש בתשתית chrome.i18n כדי להטמיע תמיכה ב-Internationalization בכל האפליקציה או התוסף.

מניפסט

אם לתוסף יש ספרייה /_locales, צריך להגדיר את "default_locale" במניפסט.

מושגים ושימוש

צריך להעביר את כל המחרוזות שגלויות למשתמש לקובץ בשם messages.json. בכל פעם שמוסיפים לוקאל חדש, מוסיפים קובץ הודעות בספרייה בשם /_locales/_localeCode_, כאשר localeCode הוא קוד כמו en לאנגלית.

זוהי היררכיית הקבצים של תוסף בינלאומי שתומך באנגלית (en), בספרדית (es) ובקוריאנית (ko):

בספריית התוסף: manifest.json,‏ *.html,‏ *.js,‏ ספריית ‎/_locales. בספרייה ‎ /_locales: הספריות en,‏ es ו-ko, שכל אחת מהן מכילה את הקובץ messages.json.

תמיכה במספר שפות

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

קובץ manifest.json וקובץ עם JavaScript. בקובץ ה-JSON מופיע הכיתוב 'Hello World'. שם קובץ ה-JavaScript הוא title = 'Hello World'.

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

כך נראה התוסף אחרי ההתאמה הגלובלית (שימו לב שעדיין יש בו רק מחרוזות באנגלית):

בקובץ manifest.json, השם 'Hello World' השתנה ל-'__MSG_extName__', ונוסף פריט חדש בשם default_locale עם הערך 'en'. בקובץ JavaScript, השורה 'Hello World' (שלום עולם) השתנתה ל-chrome.i18n.getMessage('extName'). קובץ חדש בשם /_locales/iw/messages.json מגדיר את 'extName'.

כמה הערות לגבי התאמה לשוק הבינלאומי:

  • אפשר להשתמש בכל אחת מהשפות הנתמכות. אם משתמשים באזור לא נתמך, Google Chrome מתעלם ממנו.
  • בקובצי manifest.json ו-CSS, מפנים למחרוזת בשם messagename באופן הבא:

    __MSG_messagename__
    
  • בקוד ה-JavaScript של התוסף או האפליקציה, מפנים למחרוזת בשם messagename באופן הבא:

    chrome.i18n.getMessage("messagename")
    
  • בכל קריאה ל-getMessage(), אפשר לספק עד 9 מחרוזות שייכללו בהודעה. לפרטים נוספים, ראו דוגמאות: getMessage.

  • הודעות מסוימות, כמו @@bidi_dir ו-@@ui_locale, מסופקות על ידי מערכת ההתאמה לשוק הבינלאומי. בקטע הודעות מוגדרות מראש מופיעה רשימה מלאה של שמות של הודעות מוגדרות מראש.

  • ב-messages.json, לכל מחרוזת שגלויה למשתמשים יש שם, פריט 'message' ופריט 'description' אופציונלי. השם הוא מפתח כמו 'extName' או 'search_string' שמזהה את המחרוזת. השדה message מציין את הערך של המחרוזת באותו אזור גיאוגרפי. השדה האופציונלי 'description' עוזר למתורגמנים, שיכול להיות שלא יוכלו לראות איך משתמשים במחרוזת בתוסף. לדוגמה:

    {
      "search_string": {
        "message": "hello%20world",
        "description": "The string we search for. Put %20 between words that go together."
      },
      ...
    }
    

מידע נוסף זמין במאמר פורמטים: הודעות ספציפיות לאזור.

אחרי שמבצעים תהליך של עיבוד לתמיכה בשפות שונות בתוסף, קל לתרגם אותו. מעתיקים את messages.json, מתרגמים אותו ומעבירים את העותק לספרייה חדשה ב-/_locales. לדוגמה, כדי לתמוך בספרדית, פשוט מוסיפים עותק מתורגם של messages.json בקטע /_locales/es. באיור הבא מוצג התוסף הקודם עם תרגום חדש לספרדית.

זה נראה כמו הדוגמה הקודמת, אבל עם קובץ חדש ב-‎ /_locales/es/messages.json שמכיל תרגום של ההודעות לספרדית.

הודעות מוגדרות מראש

מערכת ההתאמה הגלובלית מספקת כמה הודעות מוגדרות מראש שיעזרו לכם לבצע לוקליזציה. אלה כוללים את @@ui_locale, כדי שתוכלו לזהות את ה-locale הנוכחי של ממשק המשתמש, וכמה הודעות @@bidi_... שמאפשרות לכם לזהות את כיוון הטקסט. לשמות של ההודעות האחרונות יש שמות דומים למשתנים קבועים ב-gadgets BIDI (bi-directional) API.

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

בטבלה הבאה מתוארות כל ההודעות שמוגדרות מראש.

שם ההודעהתיאור
@@extension_idמזהה התוסף או האפליקציה. אפשר להשתמש במחרוזת הזו כדי ליצור כתובות URL למשאבים בתוך התוסף. אפשר להשתמש בהודעה הזו גם בתוספים שלא בוצעה להם לוקליזציה.
הערה: אי אפשר להשתמש בהודעה הזו בקובץ מניפסט.
@@ui_localeהאזור הנוכחי. אפשר להשתמש במחרוזת הזו כדי ליצור כתובות URL ספציפיות לאזור.
@@bidi_dirכיוון הטקסט של האזור הנוכחי. הערך יכול להיות 'ltr' בשפות שמנוקדות משמאל לימין, כמו אנגלית, או 'rtl' בשפות שמנוקדות מימין לשמאל, כמו ערבית.
@@bidi_reversed_dirאם הערך של @@bidi_dir הוא 'ltr', הערך הזה הוא 'rtl'. אחרת, הערך הוא 'ltr'.
@@bidi_start_edgeאם הערך של @@bidi_dir הוא 'ltr', הערך הזה הוא 'left'. אחרת, הערך הוא 'right'.
@@bidi_end_edgeאם הערך של @@bidi_dir הוא 'ltr', הערך הזה הוא 'right'. אחרת, הערך הוא 'left'.

דוגמה לשימוש ב-@@extension_id בקובץ CSS כדי ליצור כתובת URL:

body {
  background-image:url('chrome-extension://__MSG_@@extension_id__/background.png');
}

אם מזהה התוסף הוא abcdefghijklmnopqrstuvwxyzabcdef, השורה המודגשת בקטע הקוד הקודם תהפוך ל:

  background-image:url('chrome-extension://abcdefghijklmnopqrstuvwxyzabcdef/background.png');

דוגמה לשימוש בהודעות @@bidi_* בקובץ CSS:

body {
  direction: __MSG_@@bidi_dir__;
}

div#header {
  margin-bottom: 1.05em;
  overflow: hidden;
  padding-bottom: 1.5em;
  padding-__MSG_@@bidi_start_edge__: 0;
  padding-__MSG_@@bidi_end_edge__: 1.5em;
  position: relative;
}

בשפות שנכתבות משמאל לימין, כמו אנגלית, הקווים המודגשים הופכים ל:

  dir: ltr;
  padding-left: 0;
  padding-right: 1.5em;

לוקאלים

אפשר לבחור מבין הרבה אזורים גיאוגרפיים, כולל אזורים מסוימים (כמו en) שמאפשרים לתרגום יחיד לתמוך בכמה וריאציות של שפה (כמו en_GB ו-en_US).

אתם יכולים להתאים את התוסף לכל אזור גיאוגרפי שנתמך בחנות האינטרנט של Chrome. אם האזור לא מופיע ברשימה, בוחרים באפשרות החלופית הקרובה ביותר. לדוגמה, אם אזור ברירת המחדל של התוסף הוא "de_CH", בוחרים באפשרות "de" בחנות האינטרנט של Chrome.

קוד לוקאל שפה (אזור)
ar ערבית
לפנה"צ אמהרית
bg בולגרית
bn בנגלית
ca קטלאנית
cs צ'כית
da דנית
de גרמנית
el יוונית
en אנגלית
en_AU אנגלית (אוסטרליה)
en_GB אנגלית (בריטניה)
iw_IL אנגלית (ארה"ב)
es ספרדית
es_419 ספרדית (אמריקה הלטינית והקריביים)
et אסטונית
fa פרסית
fi פינית
fil פיליפינית
fr צרפתית
gu גוג'ארטי
הוא עברית
hi הינדי
שעה קרואטית
hu הונגרית
id [מזהה] אינדונזית
it איטלקית
ja יפנית
kn קנאדה
ko קוריאנית
lt ליטאית
lv לטבית
ml מליאלאם
mr מראטהית
ms מלאית
nl הולנדית
לא נורווגית
pl פולנית
pt_BR פורטוגזית (ברזיל)
pt_PT פורטוגזית (פורטוגל)
ro רומנית
ru רוסית
sk סלובקית
sl סלובנית
sr סרבית
sv שוודית
sw סווהילי
ta טמילית
te טלוגו
th תאית
tr טורקית
uk אוקראינית
vi וייטנאמית
zh_CN סינית (סין)
zh_TW סינית (טאייוואן)

חיפוש הודעות

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

  1. מחפשים את האזור המועדף על המשתמש בקובץ ההודעות (אם יש כזה). לדוגמה, כשהשפה והאזור של Google Chrome מוגדרים לאנגלית בריטית (en_GB), המערכת מחפשת את ההודעה קודם ב-/_locales/en_GB/messages.json. אם הקובץ הזה קיים וההודעה נמצאת בו, המערכת לא ממשיכה לחפש.
  2. אם ללוקאל המועדף של המשתמש יש אזור (כלומר, ללוקאל יש קו תחתון: _), מחפשים את הלוקאל בלי האזור הזה. לדוגמה, אם קובץ ההודעות en_GB לא קיים או שהוא לא מכיל את ההודעה, המערכת מחפשת את ההודעה בקובץ ההודעות en. אם הקובץ הזה קיים וההודעה מופיעה בו, המערכת לא ממשיכה לחפש.
  3. מחפשים את מקום ברירת המחדל בקובץ ההודעות. לדוגמה, אם הערך של default_locale בתוסף מוגדר כ-es, וגם /_locales/en_GB/messages.json וגם /_locales/en/messages.json לא מכילים את ההודעה, התוסף ישתמש בהודעה מ-/_locales/es/messages.json.

באיור הבא, ההודעה 'colores' מופיעה בכל שלוש הגרסאות המקומיות שהתוסף תומך בהן, אבל 'extName' מופיעה רק בשתי הגרסאות המקומיות. אם משתמש שמשתמש ב-Google Chrome באנגלית ארה"ב רואה את התווית 'צבעים', משתמש שמשתמש באנגלית בריטית רואה את התווית 'צבעים'. גם משתמשים באנגלית אמריקאית וגם משתמשים באנגלית בריטית רואים את שם התוסף 'Hello World'. שפת ברירת המחדל היא ספרדית, ולכן משתמשים שמפעילים את Google Chrome בשפה שאינה אנגלית רואים את התווית 'Colores' ואת שם התוסף 'Hola mundo'.

ארבעה קבצים: manifest.json ושלושה קבצים מסוג messages.json (עבור es,‏ en ו-en_GB). בקבצים es ו-en מופיעות רשומות להודעות בשם 'extName' ו-'colores'. בקובץ en_GB יש רק רשומה אחת (עבור 'colores').

הגדרת האזור של הדפדפן

כדי לבדוק את התרגומים, מומלץ להגדיר את האזור של הדפדפן. בקטע הזה מוסבר איך להגדיר את האזור ב-Windows, ב-Mac OS, ב-Linux וב-ChromeOS.

Windows

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

שימוש במקש קיצור ספציפי לאזור

כדי ליצור קיצור דרך ולהשתמש בו כדי להפעיל את Google Chrome עם אזור זמן מסוים:

  1. יוצרים עותק של קיצור הדרך ל-Google Chrome שכבר נמצא במחשב.
  2. משנים את השם של קיצור הדרך החדש כך שיתאים לאזור הזמן החדש.
  3. משנים את המאפיינים של קיצור הדרך כך ששדה היעד יציין את הדגלים --lang ו---user-data-dir. היעד אמור להיראות כך:

    path_to_chrome.exe --lang=locale --user-data-dir=c:\locale_profile_dir
    
  4. לוחצים פעמיים על קיצור הדרך כדי להפעיל את Google Chrome.

לדוגמה, כדי ליצור קיצור דרך שיפעיל את Google Chrome בספרדית (es), אפשר ליצור קיצור דרך בשם chrome-es עם היעד הבא:

path_to_chrome.exe --lang=es --user-data-dir=c:\chrome-profile-es

אתם יכולים ליצור כמה קיצורי דרך שתרצו, וכך לבדוק בקלות בכמה שפות. לדוגמה:

path_to_chrome.exe --lang=en --user-data-dir=c:\chrome-profile-en
path_to_chrome.exe --lang=en_GB --user-data-dir=c:\chrome-profile-en_GB
path_to_chrome.exe --lang=ko --user-data-dir=c:\chrome-profile-ko
שימוש בממשק המשתמש

כך משנים את האזור באמצעות ממשק המשתמש ב-Google Chrome ל-Windows:

  1. סמל האפליקציה > אפשרויות
  2. בוחרים בכרטיסייה בתוך הדפדפן.
  3. גוללים אל תוכן אינטרנט.
  4. לוחצים על שינוי הגדרות הגופן והשפה.
  5. בוחרים בכרטיסייה שפות.
  6. משתמשים בתפריט הנפתח כדי להגדיר את השפה של Google Chrome.
  7. הפעלה מחדש של Chrome

Mac OS

כדי לשנות את הלוקאל ב-Mac, משתמשים בהעדפות המערכת.

  1. בתפריט Apple, בוחרים באפשרות העדפות המערכת.
  2. בקטע Personal (אישי), בוחרים באפשרות International (בינלאומי).
  3. בחירת השפה והמיקום
  4. הפעלה מחדש של Chrome

Linux

כדי לשנות את האזור ב-Linux, קודם צריך לצאת מ-Google Chrome. לאחר מכן, כולם בשורה אחת, מגדירים את משתנה הסביבה LANGUAGE ומפעילים את Google Chrome. לדוגמה:

LANGUAGE=es ./chrome

ChromeOS

כדי לשנות את הלוקאל ב-ChromeOS:

  1. בוחרים באפשרות הגדרות בסרגל האפליקציות.
  2. בקטע שפות וקלט, בוחרים בתפריט הנפתח שפה.
  3. אם השפה הרצויה לא מופיעה ברשימה, לוחצים על הוספת שפות ומוסיפים אותה.
  4. אחרי שמוסיפים את השפה, לוחצים על סמל 3 הנקודות More actions (פעולות נוספות) ליד השפה ובוחרים באפשרות Display ChromeOS in this language (הצגת ChromeOS בשפה הזו).
  5. לוחצים על הלחצן הפעלה מחדש שמופיע לצד השפה שהוגדרה כדי להפעיל מחדש את ChromeOS.

דוגמאות

דוגמאות לאינטרנציונליזציה מפורטות בספרייה examples/api/i18n. דוגמה מלאה זמינה ב-examples/extensions/news. דוגמאות נוספות ועזרה בהצגת קוד המקור זמינות במאמר דוגמאות.

getMessage()

הקוד הבא מקבל מהדפדפן הודעה מותאמת לשפה ומציג אותה כמחרוזת. הפונקציה מחליפה שני placeholders בהודעה במחרוזות "string1" ו-"string2".

function getMessage() {
  var message = chrome.i18n.getMessage("click_here", ["string1", "string2"]);
  document.getElementById("languageSpan").innerHTML = message;
}

כך מספקים מחרוזת אחת ומשתמשים בה:

  // In JavaScript code
  status.innerText = chrome.i18n.getMessage("error", errorDetails);
"error": {
  "message": "Error: $details$",
  "description": "Generic error template. Expects error parameter to be passed in.",
  "placeholders": {
    "details": {
      "content": "$1",
      "example": "Failed to fetch RSS feed."
    }
  }
}

מידע נוסף על placeholders זמין בדף הודעות ספציפיות לשפה. פרטים על קריאה ל-getMessage() זמינים בחומר העזרה של ה-API.

getAcceptLanguages()

הקוד הבא מקבל את שפות ה-accept מהדפדפן ומציג אותן כמחרוזת, על ידי הפרדה בין כל שפת accept באמצעות ','.

function getAcceptLanguages() {
  chrome.i18n.getAcceptLanguages(function(languageList) {
    var languages = languageList.join(",");
    document.getElementById("languageSpan").innerHTML = languages;
  })
}

פרטים על קריאה ל-getAcceptLanguages() זמינים בחומר העזרה של ה-API.

detectLanguage()

הקוד הבא מזהה עד 3 שפות מהמחרוזת שצוינה ומציג את התוצאה כמחרוזות המופרדות באמצעות מעברי שורה.

function detectLanguage(inputText) {
  chrome.i18n.detectLanguage(inputText, function(result) {
    var outputLang = "Detected Language: ";
    var outputPercent = "Language Percentage: ";
    for(i = 0; i < result.languages.length; i++) {
      outputLang += result.languages[i].language + " ";
      outputPercent +=result.languages[i].percentage + " ";
    }
    document.getElementById("languageSpan").innerHTML = outputLang + "\n" + outputPercent + "\nReliable: " + result.isReliable;
  });
}

פרטים נוספים על קריאה ל-detectLanguage(inputText) זמינים בחומר העזרה של ה-API.

סוגים

LanguageCode

Chrome מגרסה 47 ואילך

קוד שפה לפי תקן ISO, כמו en או fr. רשימה מלאה של השפות שנתמכות בשיטה הזו מופיעה במאמר kLanguageInfoTable. אם השפה לא מזוהה, המערכת תחזיר את הערך und, כלומר [אחוז] מהטקסט לא ידוע ל-CLD.

סוג

מחרוזת

Methods

detectLanguage()

Promise Chrome מגרסה 47 ואילך
chrome.i18n.detectLanguage(
  text: string,
  callback?: function,
)

זיהוי השפה של הטקסט שסופק באמצעות CLD.

פרמטרים

  • text

    מחרוזת

    מחרוזת הקלט של המשתמש שצריך לתרגם.

  • קריאה חוזרת (callback)

    פונקציה אופציונלי

    הפרמטר callback נראה כך:

    (result: object) => void

    • תוצאה

      אובייקט

      אובייקט LanguageDetectionResult שמכיל את האמינות של השפה שזוהתה ואת המערך של DetectedLanguage

      • isReliable

        בוליאני

        מהימנות השפה שזוהתה על ידי CLD

      • שפות

        object[]

        מערך של detectedLanguage

        • language

          מחרוזת

        • אחוזים

          number

          אחוז השפה שזוהתה

החזרות

  • Promise<object>

    גרסה 99 ואילך של Chrome

    יש תמיכה ב-Promises ב-Manifest V3 ואילך, אבל פונקציות קריאה חוזרת (callbacks) ניתנות לצורך תאימות לאחור. אי אפשר להשתמש בשניהם באותה קריאה לפונקציה. הפתרון של ההבטחה יהיה באותו סוג שהוענק ל-callback.

getAcceptLanguages()

Promise
chrome.i18n.getAcceptLanguages(
  callback?: function,
)

הפונקציה מקבלת את שפות ה-accept-languages של הדפדפן. זה שונה מהשפה והאזור שבהם משתמש הדפדפן. כדי לקבל את השפה והאזור, משתמשים ב-i18n.getUILanguage.

פרמטרים

  • קריאה חוזרת (callback)

    פונקציה אופציונלי

    הפרמטר callback נראה כך:

    (languages: string[]) => void

    • שפות

      string[]

      מערך של LanguageCode

החזרות

  • Promise<LanguageCode[]>

    גרסה 99 ואילך של Chrome

    יש תמיכה ב-Promises ב-Manifest V3 ואילך, אבל פונקציות קריאה חוזרת (callbacks) ניתנות לצורך תאימות לאחור. אי אפשר להשתמש בשניהם באותה קריאה לפונקציה. הפתרון של ההבטחה יהיה באותו סוג שהוענק ל-callback.

getMessage()

chrome.i18n.getMessage(
  messageName: string,
  substitutions?: any,
  options?: object,
)

הפונקציה מקבלת את המחרוזת המותאמת לשוק המקומי של ההודעה שצוינה. אם ההודעה חסרה, השיטה מחזירה מחרוזת ריקה (''). אם הפורמט של הקריאה ל-getMessage() שגוי – לדוגמה, messageName היא לא מחרוזת או שהמערך substitutions מכיל יותר מ-9 רכיבים – השיטה מחזירה את הערך undefined.

פרמטרים

  • messageName

    מחרוזת

    שם ההודעה, כפי שצוין בקובץ messages.json.

  • החלפות

    כל אופציונלי

    עד 9 מחרוזות החלפה, אם יש צורך בהן בהודעה.

  • אפשרויות

    אובייקט אופציונלי

    גרסה 79 ואילך של Chrome
    • escapeLt

      boolean אופציונלי

      בריחה < בתרגום ל-&lt;. ההגבלה הזו חלה רק על ההודעה עצמה, ולא על הסמנים. מפתחים יכולים להשתמש באפשרות הזו אם התרגום משמש בהקשר של HTML. תבניות Closure שמשמשות עם Closure Compiler יוצרות את זה באופן אוטומטי.

החזרות

  • מחרוזת

    הודעה שמותאמת לשוק המקומי הנוכחי.

getUILanguage()

chrome.i18n.getUILanguage()

הפונקציה מקבלת את השפה של ממשק המשתמש בדפדפן. הפונקציה הזו שונה מ-i18n.getAcceptLanguages, שמציגה את שפות המשתמש המועדפות.

החזרות

  • מחרוזת

    קוד השפה של ממשק המשתמש בדפדפן, למשל en-US או fr-FR.