i18n.html revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<!--
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)[NOTEs for editors:
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Try to be consistent about string vs. message (it's probably not yet).
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-->
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p id="classSummary">
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)An <em>internationalized</em> extension or app
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)can be easily
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<em>localized</em> &mdash;
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)adapted to languages and regions
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)that it didn't originally support.
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)You need to put all of its user-visible strings into a file
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)named <a href="i18n-messages.html"><code>messages.json</code></a>.
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Each time you add a new locale,
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)you add a messages file
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)under a directory
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)named <code>_locales/<em>localeCode</em></code>,
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)where <em>localeCode</em> is a code such as
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<code>en</code> for English.
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Here's the file hierarchy
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)for an internationalized extension that supports
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)English (<code>en</code>),
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Spanish (<code>es</code>), and
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Korean (<code>ko</code>):
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<img src="{{static}}/images/i18n-hierarchy.gif"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alt='In the extension directory: manifest.json, *.html, *.js, _locales directory. In the _locales directory: en, es, and ko directories, each with a messages.json file.'
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) width="385" height="77" />
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<h2 id="l10">How to support multiple languages</h2>
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Say you have an extension
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)with the files shown in the following figure:
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<img src="{{static}}/images/i18n-before.gif"
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alt='A manifest.json file and a file with JavaScript. The .json file has "name": "Hello World". The JavaScript file has title = "Hello World";'
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) width="323" height="148">
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)To internationalize this extension,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)you name each user-visible string
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)and put it into a messages file.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)The extension's manifest,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CSS files,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)and JavaScript code
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)use each string's name to get its localized version.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Here's what the extension looks like when it's internationalized
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)(note that it still has only English strings):
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<img src="{{static}}/images/i18n-after-1.gif"
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alt='In the manifest.json file, "Hello World" has been changed to "__MSG_extName__", and a new "default_locale" item has the value "en". In the JavaScript file, "Hello World" has been changed to chrome.i18n.getMessage("extName"). A new file named _locales/en/messages.json defines "extName".'
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) width="782" height="228">
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p class="note">
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<b>Important:</b>
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)If an extension has a <code>_locales</code> directory,
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)the <a href="manifest.html">manifest</a>
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<b>must</b> define "default_locale".
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Some notes about internationalizing:
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<ul>
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li><p>
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    You can use any of the <a href="#overview-locales">supported locales</a>.
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    If you use an unsupported locale,
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Google Chrome ignores it.
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  </p></li>
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li>
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    In <code>manifest.json</code>
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    and CSS files,
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    refer to a string named <em>messagename</em> like this:
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    <pre>__MSG_<em>messagename</em>__</pre>
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  </li>
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li>
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    In your extension or app's JavaScript code,
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    refer to a string named <em>messagename</em>
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    like this:
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    <pre>chrome.i18n.getMessage("<em>messagename</em>")</pre>
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li> <p>
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    In each call to <code>getMessage()</code>,
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    you can supply up to 9 strings
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    to be included in the message.
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    See <a href="#examples-getMessage">Examples: getMessage</a>
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for details.
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    </p>
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  </li>
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li><p>
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Some messages, such as <code>@@bidi_dir</code> and <code>@@ui_locale</code>,
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    are provided by the internationalization system.
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    See the <a href="#overview-predefined">Predefined messages</a> section
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for a full list of predefined message names.
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    </p>
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  </li>
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li>
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    In <code>messages.json</code>,
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    each user-visible string has a name, a "message" item,
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    and an optional "description" item.
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    The name is a key
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    such as "extName" or "search_string"
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    that identifies the string.
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    The "message" specifies
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    the value of the string in this locale.
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    The optional "description"
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    provides help to translators,
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    who might not be able to see how the string is used in your extension.
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    For example:
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<pre>
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  "search_string": {
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "message": "hello%20world",
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description": "The string we search for. Put %20 between words that go together."
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ...
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}</pre>
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)For more information, see
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<a href="i18n-messages.html">Formats: Locale-Specific Messages</a>.
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  </li>
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</ul>
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Once an extension or app is internationalized,
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)translating it is simple.
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)You copy <code>messages.json</code>,
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)translate it,
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)and put the copy into a new directory under <code>_locales</code>.
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)For example, to support Spanish,
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)just put a translated copy of <code>messages.json</code>
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)under <code>_locales/es</code>.
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)The following figure shows the previous extension
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)with a new Spanish translation.
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<img src="{{static}}/images/i18n-after-2.gif"
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alt='This looks the same as the previous figure, but with a new file at _locales/es/messages.json that contains a Spanish translation of the messages.'
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) width="782" height="358">
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<h2 id="overview-predefined">Predefined messages</h2>
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)The internationalization system provides a few predefined
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)messages to help you localize.
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)These include <code>@@ui_locale</code>,
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)so you can detect the current UI locale,
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)and a few <code>@@bidi_...</code> messages
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)that let you detect the text direction.
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)The latter messages have similar names to constants in the
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<a href="http://code.google.com/apis/gadgets/docs/i18n.html#BIDI">
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gadgets BIDI (bi-directional) API</a>.
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)The special message <code>@@extension_id</code>
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)can be used in the CSS and JavaScript files,
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)whether or not the extension or app is localized.
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)This message doesn't work in manifest files.
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)The following table describes each predefined message.
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<table>
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<tr>
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <th>Message name</th> <th>Description</th>
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</tr>
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<tr>
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <td> <code>@@extension_id</code> </td>
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <td>The extension or app ID;
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    you might use this string to construct URLs
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for resources inside the extension.
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Even unlocalized extensions can use this message.
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    <br>
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    <b>Note:</b> You can't use this message in a manifest file.
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    </td>
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</tr>
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<tr>
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <td> <code>@@ui_locale</code> </td>
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <td>The current locale;
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    you might use this string to construct locale-specific URLs. </td>
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</tr>
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<tr>
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <td> <code>@@bidi_dir</code> </td>
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <td> The text direction for the current locale,
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       either "ltr" for left-to-right languages such as English
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       or "rtl" for right-to-left languages such as Japanese. </td>
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</tr>
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<tr>
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <td> <code>@@bidi_reversed_dir</code> </td>
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <td> If the <code>@@bidi_dir</code> is "ltr", then this is "rtl";
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       otherwise, it's "ltr". </td>
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</tr>
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<tr>
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <td> <code>@@bidi_start_edge</code> </td>
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <td> If the <code>@@bidi_dir</code> is "ltr", then this is "left";
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       otherwise, it's "right". </td>
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</tr>
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<tr>
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <td> <code>@@bidi_end_edge</code> </td>
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <td> If the <code>@@bidi_dir</code> is "ltr", then this is "right";
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       otherwise, it's "left". </td>
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</tr>
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</table>
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Here's an example of using <code>@@extension_id</code> in a CSS file
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)to construct a URL:
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<pre>
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)body {
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <b>background-image:url('chrome-extension://__MSG_@@extension_id__/background.png');</b>
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</pre>
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)If the extension ID is abcdefghijklmnopqrstuvwxyzabcdef,
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)then the bold line in the previous code snippet becomes:
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<pre>
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)background-image:url('chrome-extension://abcdefghijklmnopqrstuvwxyzabcdef/background.png');
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</pre>
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Here's an example of using <code>@@bidi_*</code> messages in a CSS file:
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<pre>
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)body {
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <b>direction: __MSG_@@bidi_dir__;</b>
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)div#header {
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  margin-bottom: 1.05em;
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  overflow: hidden;
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  padding-bottom: 1.5em;
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <b>padding-__MSG_@@bidi_start_edge__: 0;</b>
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <b>padding-__MSG_@@bidi_end_edge__: 1.5em;</b>
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  position: relative;
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</pre>
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)For left-to-right languages such as English,
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)the bold lines become:
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<pre>
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)dir: ltr;
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)padding-left: 0;
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)padding-right: 1.5em;
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</pre>
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<h2 id="overview-locales">Locales</h2>
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)You can choose from many locales,
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)including some (such as <code>en</code>)
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)that let a single translation support multiple variations of a language
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)(such as <code>en_GB</code> and <code>en_US</code>).
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<h3 id="locales-supported">Supported locales</h3>
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)You can use any of the
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<a href="http://code.google.com/chrome/webstore/docs/i18n.html#localeTable">locales that the Chrome Web Store supports</a>.
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<h3 id="locales-usage">Searching for messages</h3>
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)You don't have to define every string for every supported locale.
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)As long as the default locale's <code>messages.json</code> file
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)has a value for every string,
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)your extension or app will run no matter how sparse a translation is.
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Here's how the extension system searches for a message:
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<ol>
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li>
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     Search the messages file (if any)
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     for the user's preferred locale.
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     For example, when Google Chrome's locale is set to
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     British English (<code>en_GB</code>),
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     the system first looks for the message in
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     <code>_locales/en_GB/messages.json</code>.
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     If that file exists and the message is there,
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     the system looks no further.
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  </li>
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li>
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     If the user's preferred locale has a region
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     (that is, the locale has an underscore: _),
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     search the locale without that region.
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     For example, if the <code>en_GB</code> messages file
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     doesn't exist or doesn't contain the message,
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     the system looks in the <code>en</code> messages file.
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     If that file exists and the message is there,
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     the system looks no further.
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  </li>
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li>
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     Search the messages file for the default locale.
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     For example, if the extension's "default_locale" is set to "es",
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     and neither <code>_locales/en_GB/messages.json</code>
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     nor <code>_locales/en/messages.json</code> contains the message,
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     the extension uses the message from
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     <code>_locales/es/messages.json</code>.
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  </li>
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</ol>
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)In the following figure,
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)the message named "colores" is in all three locales
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)that the extension supports,
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)but "extName" is in only two of the locales.
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Wherever a user running Google Chrome in US English sees the label "Colors",
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)a user of British English sees "Colours".
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Both US English and British English users
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)see the extension name "Hello World".
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Because the default language is Spanish,
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)users running Google Chrome in any non-English language
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)see the label "Colores" and the extension name "Hola mundo".
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<img src="{{static}}/images/i18n-strings.gif"
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alt='Four files: manifest.json and three messages.json files (for es, en, and en_GB).  The es and en files show entries for messages named "extName" and "colores"; the en_GB file has just one entry (for "colores").'
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) width="493" height="488" />
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<h3 id="locales-testing">How to set your browser's locale</h3>
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)To test translations, you might want to set your browser's locale.
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)This section tells you how to set the locale in
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<a href="#testing-win">Windows</a>,
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<a href="#testing-mac">Mac OS X</a>, and
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<a href="#testing-linux">Linux</a>.
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<h4 id="testing-win">Windows</h4>
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)You can change the locale using either
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)a locale-specific shortcut
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)or the Google Chrome UI.
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)The shortcut approach is quicker, once you've set it up,
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)and it lets you use several languages at once.
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<h5 id="win-shortcut">Using a locale-specific shortcut</h5>
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)To create and use a shortcut that launches Google Chrome
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)with a particular locale:
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<ol>
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li>
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Make a copy of the Google Chrome shortcut
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    that's already on your desktop.
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  </li>
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li>
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Rename the new shortcut to match the new locale.
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  </li>
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li>
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Change the shortcut's properties
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    so that the Target field specifies the
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    <code>--lang</code> and
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    <code>--user-data-dir</code> flags.
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    The target should look something like this:
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<pre><em>path_to_chrome.exe</em> --lang=<em>locale</em> --user-data-dir=c:\<em>locale_profile_dir</em></pre>
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  </li>
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li>
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Launch Google Chrome by double-clicking the shortcut.
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  </li>
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</ol>
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)For example, to create a shortcut
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)that launches Google Chrome in Spanish (<code>es</code>),
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)you might create a shortcut named <code>chrome-es</code>
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)that has the following target:
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<pre><em>path_to_chrome.exe</em> --lang=es --user-data-dir=c:\chrome-profile-es</pre>
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)You can create as many shortcuts as you like,
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)making it easy to test in multiple languages.
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)For example:
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<pre><em>path_to_chrome.exe</em> --lang=en --user-data-dir=c:\chrome-profile-en
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<em>path_to_chrome.exe</em> --lang=en_GB --user-data-dir=c:\chrome-profile-en_GB
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<em>path_to_chrome.exe</em> --lang=ko --user-data-dir=c:\chrome-profile-ko</pre>
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p class="note">
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<b>Note:</b>
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Specifying <code>--user-data-dir</code> is optional but handy.
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Having one data directory per locale
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)lets you run the browser
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)in several languages at the same time.
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)A disadvantage is that because the locales' data isn't shared,
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)you have to install your extension multiple times &mdash; once per locale,
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)which can be challenging when you don't speak the language.
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)For more information, see
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<a href="http://www.chromium.org/developers/creating-and-using-profiles">Creating and Using Profiles</a>.
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<h5 id="win-ui">Using the UI</h5>
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Here's how to change the locale using the UI on Google Chrome for Windows:
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<ol>
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li> Wrench icon > <b>Options</b> </li>
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li> Choose the <b>Under the Hood</b> tab </li>
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li> Scroll down to <b>Web Content</b> </li>
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li> Click <b>Change font and language settings</b> </li>
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li> Choose the <b>Languages</b> tab </li>
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li> Use the drop down to set the <b>Google Chrome language</b> </li>
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li> Restart Chrome </li>
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</ol>
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<h4 id="testing-mac">Mac OS X</h4>
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)To change the locale on Mac,
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)you use the system preferences.
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<ol>
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li> From the Apple menu, choose <b>System Preferences</b> </li>
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li> Under the <b>Personal</b> section, choose <b>International</b> </li>
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li> Choose your language and location </li>
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  <li> Restart Chrome </li>
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</ol>
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<h4 id="testing-linux">Linux</h4>
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)To change the locale on Linux,
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)first quit Google Chrome.
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Then, all in one line,
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)set the LANGUAGE environment variable
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)and launch Google Chrome.
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)For example:
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<pre>
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LANGUAGE=es /chrome
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</pre>
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<h2 id="overview-examples">Examples</h2>
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)You can find simple examples of internationalization in the
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/api/i18n/">examples/api/i18n</a>
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)directory.
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)For a complete example, see
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/extensions/news/">examples/extensions/news</a>.
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)For other examples and for help in viewing the source code, see
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<a href="samples.html">Samples</a>.
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<h3 id="examples-getMessage">Examples: getMessage</h3>
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<!--
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)[PENDING: improve this section. it should probably start with a
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)one-variable example that includes the messages.json code.]
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-->
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)The following code gets a localized message from the browser
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)and displays it as a string.
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)It replaces two placeholders within the message with the strings
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"string1" and "string2".
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<pre>
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function getMessage() {
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var message = chrome.i18n.getMessage("click_here", ["string1", "string2"]);
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  document.getElementById("languageSpan").innerHTML = message;
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</pre>
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Here's how you'd supply and use a single string:
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<pre>
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<em>// In JavaScript code</em>
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)status.innerText = chrome.i18n.getMessage("error", errorDetails);
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<em>// In messages.json</em>
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"error": {
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  "message": "Error: $details$",
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  "description": "Generic error template. Expects error parameter to be passed in.",
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  "placeholders": {
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "details": {
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "content": "$1",
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "example": "Failed to fetch RSS feed."
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</pre>
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)For more information about placeholders, see the
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<a href="i18n-messages.html">Locale-Specific Messages</a> page.
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)For details on calling <code>getMessage()</code>, see the
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<a href="#method-getMessage">API reference</a>.
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<h3 id="example-accept-languages">Example: getAcceptLanguages</h3>
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)The following code gets accept-languages from the browser and displays them as a
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string by separating each accept-language with ','.
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<pre>
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function getAcceptLanguages() {
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome.i18n.getAcceptLanguages(function(languageList) {
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var languages = languageList.join(",");
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    document.getElementById("languageSpan").innerHTML = languages;
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  })
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</pre>
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<p>
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)For details on calling <code>getAcceptLanguages()</code>, see the
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<a href="#method-getAcceptLanguages">API reference</a>.
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)</p>