chrome.i18n

Mô tả

Sử dụng cơ sở hạ tầng chrome.i18n để triển khai tính năng quốc tế hoá trên toàn bộ ứng dụng hoặc tiện ích của bạn.

Tệp kê khai

Nếu một tiện ích có thư mục /_locales, thì tệp kê khai phải xác định "default_locale".

Khái niệm và cách sử dụng

Bạn cần đặt tất cả các chuỗi hiển thị với người dùng vào một tệp có tên là messages.json. Mỗi khi thêm một ngôn ngữ mới, bạn sẽ thêm một tệp thông báo trong thư mục có tên /_locales/_localeCode_, trong đó localeCode là một mã như en cho tiếng Anh.

Sau đây là hệ phân cấp tệp cho một tiện ích được quốc tế hoá hỗ trợ tiếng Anh (en), tiếng Tây Ban Nha (es) và tiếng Hàn (ko):

Trong thư mục tiện ích: manifest.json, *.html, *.js, thư mục /_locales. Trong thư mục /_locales: thư mục en, es và ko, mỗi thư mục có một tệp messages.json.

Hỗ trợ nhiều ngôn ngữ

Giả sử bạn có một tiện ích với các tệp như trong hình sau:

Tệp manifest.json và tệp có JavaScript. Tệp .json có nội dung "Hello World". Tệp JavaScript có title = "Hello World" (Xin chào thế giới).

Để quốc tế hoá tiện ích này, bạn đặt tên cho từng chuỗi hiển thị với người dùng và đưa chuỗi đó vào tệp thông báo. Tệp kê khai, tệp CSS và mã JavaScript của tiện ích sử dụng tên của từng chuỗi để lấy phiên bản đã bản địa hoá.

Sau đây là giao diện của tiện ích khi được quốc tế hoá (lưu ý rằng tiện ích này vẫn chỉ có các chuỗi tiếng Anh):

Trong tệp manifest.json, "Hello World" đã được thay đổi thành "__MSG_extName__" và mục "default_locale" mới có giá trị là "en". Trong tệp JavaScript, "Hello World" đã được thay đổi thành chrome.i18n.getMessage('extName'). Tệp mới có tên /_locales/vi/messages.json xác định "extName".

Một số lưu ý về việc quốc tế hoá:

  • Bạn có thể sử dụng mọi ngôn ngữ được hỗ trợ. Nếu bạn sử dụng một ngôn ngữ không được hỗ trợ, Google Chrome sẽ bỏ qua ngôn ngữ đó.
  • Trong tệp manifest.json và CSS, hãy tham chiếu đến một chuỗi có tên messagename như sau:

    __MSG_messagename__
    
  • Trong mã JavaScript của tiện ích hoặc ứng dụng, hãy tham chiếu đến một chuỗi có tên messagename như sau:

    chrome.i18n.getMessage("messagename")
    
  • Trong mỗi lệnh gọi đến getMessage(), bạn có thể cung cấp tối đa 9 chuỗi để đưa vào thông báo. Hãy xem phần Ví dụ: getMessage để biết thông tin chi tiết.

  • Một số thông báo, chẳng hạn như @@bidi_dir@@ui_locale, do hệ thống quốc tế hoá cung cấp. Hãy xem phần Tin nhắn được xác định trước để biết danh sách đầy đủ các tên tin nhắn được xác định trước.

  • Trong messages.json, mỗi chuỗi hiển thị với người dùng đều có một tên, một mục "message" (thông báo) và một mục "description" (mô tả) không bắt buộc. Tên là một khoá như "extName" hoặc "search_string" giúp xác định chuỗi. "message" chỉ định giá trị của chuỗi trong ngôn ngữ này. Phần "description" (mô tả) không bắt buộc sẽ giúp các nhà dịch thuật, những người có thể không thấy cách chuỗi được sử dụng trong tiện ích của bạn. Ví dụ:

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

Để biết thêm thông tin, hãy xem phần Định dạng: Thông báo theo ngôn ngữ.

Sau khi một tiện ích được quốc tế hoá, việc dịch tiện ích đó sẽ trở nên đơn giản. Bạn sao chép messages.json, dịch tệp này rồi đặt bản sao vào một thư mục mới trong /_locales. Ví dụ: để hỗ trợ tiếng Tây Ban Nha, bạn chỉ cần đặt bản sao đã dịch của messages.json trong /_locales/es. Hình sau đây cho thấy tiện ích trước đó với bản dịch tiếng Tây Ban Nha mới.

Hình này giống với hình trước, nhưng có một tệp mới tại /_locales/es/messages.json chứa bản dịch tiếng Tây Ban Nha của các thông báo.

Thông báo được xác định trước

Hệ thống quốc tế hoá cung cấp một số thông báo được xác định trước để giúp bạn bản địa hoá. Các thông báo này bao gồm @@ui_locale, vì vậy, bạn có thể phát hiện ngôn ngữ giao diện người dùng hiện tại và một số thông báo @@bidi_... cho phép bạn phát hiện hướng văn bản. Các thông báo sau có tên tương tự như các hằng số trong API tiện ích BIDI (2 chiều).

Bạn có thể sử dụng thông báo đặc biệt @@extension_id trong các tệp CSS và JavaScript, cho dù phần mở rộng hoặc ứng dụng có được bản địa hoá hay không. Thông báo này không hoạt động trong tệp kê khai.

Bảng sau đây mô tả từng thông báo được xác định trước.

Tên thông báoMô tả
@@extension_idMã tiện ích hoặc mã ứng dụng; bạn có thể sử dụng chuỗi này để tạo URL cho các tài nguyên bên trong tiện ích. Ngay cả các tiện ích chưa được bản địa hoá cũng có thể sử dụng thông báo này.
Lưu ý: Bạn không thể sử dụng thông báo này trong tệp kê khai.
@@ui_localeNgôn ngữ hiện tại; bạn có thể sử dụng chuỗi này để tạo URL theo ngôn ngữ.
@@bidi_dirHướng văn bản cho ngôn ngữ hiện tại, "ltr" cho các ngôn ngữ từ trái sang phải như tiếng Anh hoặc "rtl" cho các ngôn ngữ từ phải sang trái như tiếng Ả Rập.
@@bidi_reversed_dirNếu @@bidi_dir là "ltr", thì đây là "rtl"; nếu không, thì đây là "ltr".
@@bidi_start_edgeNếu @@bidi_dir là "ltr", thì đây là "trái"; nếu không, đây là "phải".
@@bidi_end_edgeNếu @@bidi_dir là "ltr", thì đây là "phải"; nếu không, đây là "trái".

Dưới đây là ví dụ về cách sử dụng @@extension_id trong tệp CSS để tạo URL:

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

Nếu mã tiện ích là abcdefghijklmnopqrstuvwxyzabcdef, thì dòng in đậm trong đoạn mã trước sẽ trở thành:

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

Dưới đây là ví dụ về cách sử dụng thông báo @@bidi_* trong tệp 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;
}

Đối với các ngôn ngữ viết từ trái sang phải như tiếng Anh, các dòng in đậm sẽ trở thành:

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

Ngôn ngữ

Bạn có thể chọn trong số nhiều ngôn ngữ, bao gồm một số ngôn ngữ (chẳng hạn như en) cho phép một bản dịch hỗ trợ nhiều biến thể của một ngôn ngữ (chẳng hạn như en_GBen_US).

Bạn có thể bản địa hoá tiện ích của mình cho bất kỳ ngôn ngữ nào mà Cửa hàng Chrome trực tuyến hỗ trợ. Nếu ngôn ngữ của bạn không có trong danh sách này, hãy chọn ngôn ngữ thay thế gần nhất. Ví dụ: nếu ngôn ngữ mặc định của tiện ích là "de_CH", hãy chọn "de" trong Cửa hàng Chrome trực tuyến.

Mã ngôn ngữ Ngôn ngữ (khu vực)
ar Tiếng Ả Rập
sáng Tiếng Amhara
bg Tiếng Bungary
bn Tiếng Bengal
ca Tiếng Catalan
cs Tiếng Séc
da Tiếng Đan Mạch
de Tiếng Đức
el Tiếng Hy Lạp
vi Tiếng Anh
en_AU Tiếng Anh (Úc)
en_GB Tiếng Anh (Anh)
vi_VN Tiếng Anh (Hoa Kỳ)
es Tiếng Tây Ban Nha
es_419 Tiếng Tây Ban Nha (Mỹ Latinh và vùng Caribe)
et Tiếng Estonia
fa Tiếng Ba Tư
fi Tiếng Phần Lan
fil Tiếng Philippines
fr Tiếng Pháp
gu Tiếng Gujarat
hi hi Tiếng Do Thái
hi Tiếng Hindi
giờ Tiếng Croatia
hu Tiếng Hungary
id Tiếng Indonesia
it Tiếng Ý
ja Tiếng Nhật
kn Tiếng Kannada
ko Tiếng Hàn
lt Tiếng Lithuania
lv Tiếng Latvia
ml Tiếng Malayalam
mr Tiếng Marathi
ms Tiếng Malay
nl Tiếng Hà Lan
không Tiếng Na Uy
pl Tiếng Ba Lan
pt_BR Tiếng Bồ Đào Nha (Brazil)
pt_PT Tiếng Bồ Đào Nha (Bồ Đào Nha)
ro Tiếng Rumani
ru Tiếng Nga
sk Tiếng Slovak
sl Tiếng Slovenia
sr Tiếng Serbia
sv Tiếng Thuỵ Điển
sw Tiếng Swahili
ta Tiếng Tamil
te Tiếng Telugu
th Tiếng Thái
tr Tiếng Thổ Nhĩ Kỳ
uk Tiếng Ukraina
vi Tiếng Việt
zh_CN Tiếng Trung (Trung Quốc)
zh_TW Tiếng Trung (Đài Loan)

Tìm kiếm thư

Bạn không cần phải xác định mọi chuỗi cho mọi ngôn ngữ được hỗ trợ. Miễn là tệp messages.json của ngôn ngữ mặc định có giá trị cho mọi chuỗi, thì tiện ích hoặc ứng dụng của bạn sẽ chạy bất kể bản dịch có thưa thớt đến mức nào. Dưới đây là cách hệ thống tiện ích tìm kiếm thông báo:

  1. Tìm ngôn ngữ ưu tiên của người dùng trong tệp tin nhắn (nếu có). Ví dụ: khi ngôn ngữ của Google Chrome được đặt thành tiếng Anh (Anh) (en_GB), trước tiên, hệ thống sẽ tìm thông báo trong /_locales/en_GB/messages.json. Nếu tệp đó tồn tại và thông báo đó có trong tệp, thì hệ thống sẽ không tìm kiếm thêm.
  2. Nếu ngôn ngữ ưu tiên của người dùng có một khu vực (tức là ngôn ngữ có dấu gạch dưới: _), hãy tìm ngôn ngữ không có khu vực đó. Ví dụ: nếu tệp thông báo en_GB không tồn tại hoặc không chứa thông báo, thì hệ thống sẽ tìm trong tệp thông báo en. Nếu tệp đó tồn tại và thông báo đó có trong tệp, thì hệ thống sẽ không tìm thêm.
  3. Tìm ngôn ngữ mặc định trong tệp thông báo. Ví dụ: nếu "default_locale" của tiện ích được đặt thành "es" và cả /_locales/en_GB/messages.json lẫn /_locales/en/messages.json đều không chứa thông báo, thì tiện ích sẽ sử dụng thông báo từ /_locales/es/messages.json.

Trong hình sau, thông báo có tên "colores" có ở cả ba ngôn ngữ mà tiện ích hỗ trợ, nhưng "extName" chỉ có ở hai ngôn ngữ. Bất cứ khi nào người dùng chạy Google Chrome bằng tiếng Anh ở Hoa Kỳ thấy nhãn "Colors" (Màu sắc), thì người dùng tiếng Anh ở Anh sẽ thấy nhãn "Colours" (Màu sắc). Cả người dùng tiếng Anh Mỹ và người dùng tiếng Anh Anh đều thấy tên tiện ích là "Hello World". Vì ngôn ngữ mặc định là tiếng Tây Ban Nha, nên người dùng chạy Google Chrome bằng bất kỳ ngôn ngữ nào không phải tiếng Anh sẽ thấy nhãn "Colores" và tên tiện ích "Hola mundo".

4 tệp: manifest.json và 3 tệp messages.json (dành cho es, en và en_GB). Tệp es và en hiển thị các mục nhập cho thông báo có tên "extName" và "colores"; tệp en_GB chỉ có một mục nhập (cho "colores").

Đặt ngôn ngữ của trình duyệt

Để kiểm thử bản dịch, bạn nên đặt ngôn ngữ của trình duyệt. Phần này hướng dẫn bạn cách đặt ngôn ngữ trong Windows, Mac OS, LinuxChromeOS.

Windows

Bạn có thể thay đổi ngôn ngữ bằng phím tắt dành riêng cho ngôn ngữ hoặc giao diện người dùng Google Chrome. Phương pháp phím tắt nhanh hơn sau khi bạn thiết lập và cho phép bạn sử dụng nhiều ngôn ngữ cùng một lúc.

Sử dụng phím tắt theo ngôn ngữ

Cách tạo và sử dụng lối tắt để khởi chạy Google Chrome bằng một ngôn ngữ cụ thể:

  1. Sao chép lối tắt Google Chrome đã có trên máy tính.
  2. Đổi tên lối tắt mới cho phù hợp với ngôn ngữ mới.
  3. Thay đổi thuộc tính của lối tắt để trường Mục tiêu chỉ định cờ --lang--user-data-dir. Mục tiêu sẽ có dạng như sau:

    path_to_chrome.exe --lang=locale --user-data-dir=c:\locale_profile_dir
    
  4. Chạy Google Chrome bằng cách nhấp đúp vào lối tắt.

Ví dụ: để tạo một lối tắt chạy Google Chrome bằng tiếng Tây Ban Nha (es), bạn có thể tạo một lối tắt có tên chrome-es với mục tiêu sau:

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

Bạn có thể tạo bao nhiêu lối tắt tuỳ thích, giúp việc kiểm thử bằng nhiều ngôn ngữ trở nên đơn giản. Ví dụ:

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
Sử dụng giao diện người dùng

Sau đây là cách thay đổi ngôn ngữ bằng giao diện người dùng trên Google Chrome cho Windows:

  1. Biểu tượng ứng dụng > Tuỳ chọn
  2. Chọn thẻ Under the Hood (Thông tin chi tiết)
  3. Di chuyển đến mục Nội dung web
  4. Nhấp vào Thay đổi chế độ cài đặt phông chữ và ngôn ngữ
  5. Chọn thẻ Ngôn ngữ
  6. Sử dụng trình đơn thả xuống để đặt ngôn ngữ của Google Chrome
  7. Khởi động lại Chrome

Mac OS

Để thay đổi ngôn ngữ trên máy Mac, bạn có thể sử dụng các tuỳ chọn hệ thống.

  1. Trong trình đơn Apple, hãy chọn System Preferences (Tuỳ chọn hệ thống)
  2. Trong phần Cá nhân, hãy chọn Quốc tế
  3. Chọn ngôn ngữ và vị trí
  4. Khởi động lại Chrome

Linux

Để thay đổi ngôn ngữ trên Linux, trước tiên, hãy thoát Google Chrome. Sau đó, tất cả trong một dòng, hãy đặt biến môi trường LANGUAGE và khởi chạy Google Chrome. Ví dụ:

LANGUAGE=es ./chrome

ChromeOS

Cách thay đổi ngôn ngữ trên ChromeOS:

  1. Trong khay hệ thống, hãy chọn Cài đặt.
  2. Trong phần Ngôn ngữ và phương thức nhập, hãy chọn trình đơn thả xuống Ngôn ngữ.
  3. Nếu ngôn ngữ của bạn không có trong danh sách, hãy nhấp vào Thêm ngôn ngữ rồi thêm ngôn ngữ đó.
  4. Sau khi thêm, hãy nhấp vào mục trình đơn Thao tác khác có biểu tượng 3 dấu chấm bên cạnh ngôn ngữ của bạn rồi chọn Hiển thị ChromeOS bằng ngôn ngữ này.
  5. Nhấp vào nút Khởi động lại xuất hiện bên cạnh ngôn ngữ đã đặt để khởi động lại ChromeOS.

Ví dụ

Bạn có thể tìm thấy các ví dụ về bản địa hoá trong thư mục examples/api/i18n. Để xem ví dụ đầy đủ, hãy xem ví dụ/tiện ích/tin tức. Để xem các ví dụ khác và được trợ giúp về cách xem mã nguồn, hãy xem phần Mẫu.

getMessage()

Mã sau đây nhận thông báo đã bản địa hoá từ trình duyệt và hiển thị thông báo đó dưới dạng chuỗi. Hàm này thay thế hai phần giữ chỗ trong thông báo bằng các chuỗi "string1" và "string2".

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

Dưới đây là cách bạn cung cấp và sử dụng một chuỗi:

  // 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."
    }
  }
}

Để biết thêm thông tin về phần giữ chỗ, hãy xem trang Thông báo theo ngôn ngữ. Để biết thông tin chi tiết về cách gọi getMessage(), hãy xem tài liệu tham khảo API.

getAcceptLanguages()

Đoạn mã sau đây sẽ lấy accept-languages từ trình duyệt và hiển thị các ngôn ngữ đó dưới dạng một chuỗi bằng cách tách từng accept-language bằng dấu ",".

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

Để biết thông tin chi tiết về cách gọi getAcceptLanguages(), hãy xem tài liệu tham khảo API.

detectLanguage()

Mã sau đây phát hiện tối đa 3 ngôn ngữ từ chuỗi đã cho và hiển thị kết quả dưới dạng các chuỗi được phân tách bằng dòng mới.

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;
  });
}

Để biết thêm thông tin chi tiết về cách gọi detectLanguage(inputText), hãy xem tài liệu tham khảo API.

Loại

LanguageCode

Chrome 47 trở lên

Mã ngôn ngữ ISO như en hoặc fr. Để xem danh sách đầy đủ các ngôn ngữ được phương thức này hỗ trợ, hãy xem kLanguageInfoTable. Đối với ngôn ngữ không xác định, und sẽ được trả về, nghĩa là CLD không xác định được [tỷ lệ phần trăm] văn bản

Loại

chuỗi

Phương thức

detectLanguage()

Promise Chrome 47 trở lên
chrome.i18n.detectLanguage(
  text: string,
  callback?: function,
)

Phát hiện ngôn ngữ của văn bản được cung cấp bằng CLD.

Tham số

  • văn bản

    chuỗi

    Chuỗi do người dùng nhập cần được dịch.

  • lệnh gọi lại

    hàm không bắt buộc

    Tham số callback có dạng như sau:

    (result: object) => void

    • kết quả

      đối tượng

      Đối tượng LanguageDetectionResult chứa độ tin cậy của ngôn ngữ được phát hiện và mảng DetectedLanguage

      • isReliable

        boolean

        CLD đã phát hiện độ tin cậy của ngôn ngữ

      • ngôn ngữ

        object[]

        mảng detectedLanguage

        • language

          chuỗi

        • phần trăm

          số

          Tỷ lệ phần trăm ngôn ngữ được phát hiện

Giá trị trả về

  • Promise<object>

    Chrome 99 trở lên

    Lời hứa được hỗ trợ trong Tệp kê khai V3 trở lên, nhưng lệnh gọi lại được cung cấp để đảm bảo khả năng tương thích ngược. Bạn không thể sử dụng cả hai trong cùng một lệnh gọi hàm. Lời hứa sẽ phân giải bằng cùng một loại được truyền đến lệnh gọi lại.

getAcceptLanguages()

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

Lấy accept-languages của trình duyệt. Ngôn ngữ này khác với ngôn ngữ mà trình duyệt sử dụng; để lấy ngôn ngữ, hãy sử dụng i18n.getUILanguage.

Tham số

  • lệnh gọi lại

    hàm không bắt buộc

    Tham số callback có dạng như sau:

    (languages: string[]) => void

    • ngôn ngữ

      string[]

      Mảng LanguageCode

Giá trị trả về

  • Promise<LanguageCode[]>

    Chrome 99 trở lên

    Lời hứa được hỗ trợ trong Tệp kê khai V3 trở lên, nhưng lệnh gọi lại được cung cấp để đảm bảo khả năng tương thích ngược. Bạn không thể sử dụng cả hai trong cùng một lệnh gọi hàm. Lời hứa sẽ phân giải bằng cùng một loại được truyền đến lệnh gọi lại.

getMessage()

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

Lấy chuỗi đã bản địa hoá cho thông báo đã chỉ định. Nếu thiếu thông báo, phương thức này sẽ trả về một chuỗi trống (""). Nếu định dạng của lệnh gọi getMessage() không chính xác (ví dụ: messageName không phải là một chuỗi hoặc mảng substitutions có nhiều hơn 9 phần tử), thì phương thức này sẽ trả về undefined.

Tham số

  • messageName

    chuỗi

    Tên của thông báo, như được chỉ định trong tệp messages.json.

  • giá trị thay thế

    bất kỳ không bắt buộc nào

    Tối đa 9 chuỗi thay thế, nếu thông báo yêu cầu.

  • tùy chọn

    đối tượng không bắt buộc

    Chrome 79 trở lên
    • escapeLt

      boolean không bắt buộc

      Tạo lối thoát < trong bản dịch sang &lt;. Điều này chỉ áp dụng cho chính thông báo chứ không áp dụng cho phần giữ chỗ. Nhà phát triển có thể muốn sử dụng tính năng này nếu bản dịch được dùng trong ngữ cảnh HTML. Mẫu Closure được dùng với Trình biên dịch Closure sẽ tự động tạo ra mã này.

Giá trị trả về

  • chuỗi

    Thông báo được bản địa hoá cho ngôn ngữ hiện tại.

getUILanguage()

chrome.i18n.getUILanguage()

Lấy ngôn ngữ giao diện người dùng của trình duyệt. API này khác với i18n.getAcceptLanguages trả về ngôn ngữ ưu tiên của người dùng.

Giá trị trả về

  • chuỗi

    Mã ngôn ngữ trên giao diện người dùng của trình duyệt, chẳng hạn như en-US hoặc fr-FR.