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