Chrome i18n API Complete Reference

3 min read

chrome.i18n API Reference

The chrome.i18n API provides internationalization support for Chrome Extensions without requiring permissions.

Overview

Message Files

Location: _locales/{locale}/messages.json

{
  "extensionName": {
    "message": "My Extension",
    "description": "The name"
  },
  "greetingMessage": {
    "message": "Hello, $1!",
    "placeholders": { "1": { "content": "$1" } }
  }
}

Manifest: { "default_locale": "en", "name": "__MSG_extensionName__" }

API Methods

chrome.i18n.getMessage(messageName, substitutions?)

Returns localized string from messages.json.

chrome.i18n.getMessage("greeting");                  // "Hello!"
chrome.i18n.getMessage("greetingMessage", "John");   // "Hello, John!"

chrome.i18n.getUILanguage()

Returns browser UI language (e.g., “en-US”, “es”).

const uiLang = chrome.i18n.getUILanguage();

chrome.i18n.getAcceptLanguages(callback)

Returns user’s preferred languages array.

chrome.i18n.getAcceptLanguages((langs) => console.log(langs));
// ["en-US", "es", "fr"]

chrome.i18n.detectLanguage(text, callback)

Detects language of text using CLD.

chrome.i18n.detectLanguage("Hello world", (result) => {
  console.log(result.isReliable);   // true/false
  console.log(result.languages);   // [{language: "en", percentage: 95}]
});

Predefined Messages (@@)

Built-in messages (no definition needed):

Key Description Value
@@extension_id Extension’s unique ID “abcdefgh…”
@@ui_locale Current locale “en”
@@bidi_dir Text direction “ltr” or “rtl”
@@bidi_reversed_dir Opposite direction “rtl” or “ltr”
@@bidi_start_edge Start edge “left” or “right”
@@bidi_end_edge End edge “right” or “left”
document.documentElement.dir = chrome.i18n.getMessage("@@bidi_dir");

Using in Manifest

Use __MSG_*__ syntax for name, description, action.default_title, etc.

{
  "name": "__MSG_extension_name__",
  "description": "__MSG_description__"
}

Locale Fallback

Search order: exact locale → language only → default_locale

Example: pt_BR → pt → en → (fallback) when default_locale is “en”

Code Examples

Basic message:

// messages.json: { "welcome": { "message": "Welcome, $1!" } }
chrome.i18n.getMessage("welcome", "John"); // "Welcome, John!"

Language detection:

chrome.i18n.detectLanguage(text, (r) => console.log(r.languages));

RTL support:

document.documentElement.dir = chrome.i18n.getMessage("@@bidi_dir");

Cross-References

See Also

How do I internationalize my extension?

Use messages.json files in the _locales directory and reference them with MSG_messagename in your code.

How do I get user’s locale in code?

Use chrome.i18n.getMessage() to retrieve translated strings, and chrome.i18n.getAcceptLanguages() for user’s languages.


Part of the Chrome Extension Guide by theluckystrike. Built at zovo.one.

No previous article
No next article