OLD | NEW |
| (Empty) |
1 <!DOCTYPE html><!-- This page is a placeholder for generated extensions api doc.
Note: | |
2 1) The <head> information in this page is significant, should be uniform | |
3 across api docs and should be edited only with knowledge of the | |
4 templating mechanism. | |
5 3) All <body>.innerHTML is genereated as an rendering step. If viewed in a | |
6 browser, it will be re-generated from the template, json schema and | |
7 authored overview content. | |
8 4) The <body>.innerHTML is also generated by an offline step so that this | |
9 page may easily be indexed by search engines. | |
10 --><html xmlns="http://www.w3.org/1999/xhtml"><head> | |
11 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | |
12 <link href="css/ApiRefStyles.css" rel="stylesheet" type="text/css"> | |
13 <link href="css/print.css" rel="stylesheet" type="text/css" media="print"> | |
14 <script type="text/javascript" src="../../../third_party/jstemplate/jstempla
te_compiled.js"> | |
15 </script> | |
16 <script type="text/javascript" src="../../../../third_party/json_minify/mini
fy-sans-regexp.js"> | |
17 </script> | |
18 <script type="text/javascript" src="js/api_page_generator.js"></script> | |
19 <script type="text/javascript" src="js/bootstrap.js"></script> | |
20 <script type="text/javascript" src="js/sidebar.js"></script> | |
21 <meta name="description" content="Documentation for the chrome.i18n module, wh
ich is part of the Google Chrome extension APIs."><title>Internationalization (
i18n) - Google Chrome Extensions - Google Code</title></head> | |
22 <body> <div id="devModeWarning" class="displayModeWarning"> | |
23 You are viewing extension docs in chrome via the 'file:' scheme: are you exp
ecting to see local changes when you refresh? You'll need run chrome with --allo
w-file-access-from-files. | |
24 </div> | |
25 <div id="branchWarning" class="displayModeWarning"> | |
26 <span>WARNING: This is the <span id="branchName">BETA</span> documentation. | |
27 It may not work with the stable release of Chrome.</span> | |
28 <select id="branchChooser"> | |
29 <option>Choose a different version... | |
30 </option><option value="">Stable | |
31 </option><option value="beta">Beta | |
32 </option><option value="dev">Dev | |
33 </option><option value="trunk">Trunk | |
34 </option></select> | |
35 </div> | |
36 <div id="unofficialWarning" class="displayModeWarning"> | |
37 <span>WARNING: This is unofficial documentation. It may not work with the | |
38 current release of Chrome.</span> | |
39 <button id="goToOfficialDocs">Go to the official docs</button> | |
40 </div> | |
41 <div id="gc-container" class="labs"> | |
42 <!-- SUBTEMPLATES: DO NOT MOVE FROM THIS LOCATION --> | |
43 <!-- In particular, sub-templates that recurse, must be used by allowing | |
44 jstemplate to make a copy of the template in this section which | |
45 are not operated on by way of the jsskip="true" --> | |
46 <!-- /SUBTEMPLATES --> | |
47 <a id="top"></a> | |
48 <div id="skipto"> | |
49 <a href="#gc-pagecontent">Skip to page content</a> | |
50 <a href="#gc-toc">Skip to main navigation</a> | |
51 </div> | |
52 <!-- API HEADER --> | |
53 <table id="header" width="100%" cellspacing="0" border="0"> | |
54 <tbody><tr> | |
55 <td valign="middle"><a href="http://code.google.com/"><img src="images/c
ode_labs_logo.gif" height="43" width="161" alt="Google Code Labs" style="border:
0; margin:0;"></a></td> | |
56 <td valign="middle" width="100%" style="padding-left:0.6em;"> | |
57 <form action="http://www.google.com/cse" id="cse" style="margin-top:0.
5em"> | |
58 <div id="gsc-search-box"> | |
59 <input type="hidden" name="cx" value="002967670403910741006:61_cvz
fqtno"> | |
60 <input type="hidden" name="ie" value="UTF-8"> | |
61 <input type="text" name="q" value="" size="55"> | |
62 <input class="gsc-search-button" type="submit" name="sa" value="Se
arch"> | |
63 <br> | |
64 <span class="greytext">e.g. "page action" or "tabs"</span> | |
65 </div> | |
66 </form> | |
67 <script type="text/javascript" src="https://www.google.com/jsapi"></sc
ript> | |
68 <script type="text/javascript">google.load("elements", "1", {packages:
"transliteration"});</script> | |
69 <script type="text/javascript" src="https://www.google.com/coop/cse/t1
3n?form=cse&t13n_langs=en"></script> | |
70 <script type="text/javascript" src="https://www.google.com/coop/cse/br
and?form=cse&lang=en"></script> | |
71 </td> | |
72 </tr> | |
73 </tbody></table> | |
74 <div id="codesiteContent" class=""> | |
75 <a id="gc-topnav-anchor"></a> | |
76 <div id="gc-topnav"> | |
77 <h1>Google Chrome Extensions (<a href="http://code.google.com/labs/">Lab
s</a>)</h1> | |
78 <ul id="home" class="gc-topnav-tabs"> | |
79 <li id="home_link"> | |
80 <a href="index.html" title="Google Chrome Extensions home page">Home
</a> | |
81 </li> | |
82 <li id="docs_link"> | |
83 <a href="docs.html" title="Official Google Chrome Extensions documen
tation">Docs</a> | |
84 </li> | |
85 <li id="faq_link"> | |
86 <a href="faq.html" title="Answers to frequently asked questions abou
t Google Chrome Extensions">FAQ</a> | |
87 </li> | |
88 <li id="samples_link"> | |
89 <a href="samples.html" title="Sample extensions (with source code)">
Samples</a> | |
90 </li> | |
91 <li id="group_link"> | |
92 <a href="http://groups.google.com/a/chromium.org/group/chromium-exte
nsions" title="Google Chrome Extensions developer forum">Group</a> | |
93 </li> | |
94 <li id="so_link"> | |
95 <a href="http://stackoverflow.com/questions/tagged/google-chrome-ext
ension" title="[google-chrome-extension] tag on Stack Overflow">Questions?</a> | |
96 </li> | |
97 </ul> | |
98 </div> <!-- end gc-topnav --> | |
99 <div class="g-section g-tpl-170"> | |
100 <!-- SIDENAV --> | |
101 <div class="g-unit g-first" id="gc-toc"> | |
102 <ul> | |
103 <li><a href="getstarted.html">Getting Started</a></li> | |
104 <li><a href="overview.html">Overview</a></li> | |
105 <li><a href="whats_new.html">What's New?</a></li> | |
106 <li><h2><a href="devguide.html">Developer's Guide</a></h2> | |
107 <ul> | |
108 <li>Browser UI | |
109 <ul> | |
110 <li><a href="browserAction.html">Browser Actions</a></li> | |
111 <li><a href="contextMenus.html">Context Menus</a></li> | |
112 <li><a href="notifications.html">Desktop Notifications</a></li
> | |
113 <li><a href="omnibox.html">Omnibox</a></li> | |
114 <li><a href="options.html">Options Pages</a></li> | |
115 <li><a href="override.html">Override Pages</a></li> | |
116 <li><a href="pageAction.html">Page Actions</a></li> | |
117 </ul> | |
118 </li> | |
119 <li>Browser Interaction | |
120 <ul> | |
121 <li><a href="bookmarks.html">Bookmarks</a></li> | |
122 <li><a href="cookies.html">Cookies</a></li> | |
123 <li><a href="devtools.html">Developer Tools</a></li> | |
124 <li><a href="events.html">Events</a></li> | |
125 <li><a href="history.html">History</a></li> | |
126 <li><a href="management.html">Management</a></li> | |
127 <li><a href="tabs.html">Tabs</a></li> | |
128 <li><a href="windows.html">Windows</a></li> | |
129 </ul> | |
130 </li> | |
131 <li>Implementation | |
132 <ul> | |
133 <li><a href="a11y.html">Accessibility</a></li> | |
134 <li><a href="background_pages.html">Background Pages</a></li> | |
135 <li><a href="content_scripts.html">Content Scripts</a></li> | |
136 <li><a href="xhr.html">Cross-Origin XHR</a></li> | |
137 <li class="leftNavSelected">Internationalization</li> | |
138 <li><a href="messaging.html">Message Passing</a></li> | |
139 <li><a href="permissions.html">Optional Permissions</a></li> | |
140 <li><a href="npapi.html">NPAPI Plugins</a></li> | |
141 </ul> | |
142 </li> | |
143 <li>Finishing | |
144 <ul> | |
145 <li><a href="hosting.html">Hosting</a></li> | |
146 <li><a href="external_extensions.html">Other Deployment Option
s</a></li> | |
147 </ul> | |
148 </li> | |
149 </ul> | |
150 </li> | |
151 <li><h2><a href="apps.html">Packaged Apps</a></h2></li> | |
152 <li><h2><a href="tutorials.html">Tutorials</a></h2> | |
153 <ul> | |
154 <li><a href="tut_debugging.html">Debugging</a></li> | |
155 <li><a href="tut_analytics.html">Google Analytics</a></li> | |
156 <li><a href="tut_oauth.html">OAuth</a></li> | |
157 </ul> | |
158 </li> | |
159 <li><h2>Reference</h2> | |
160 <ul> | |
161 <li>Formats | |
162 <ul> | |
163 <li><a href="manifest.html">Manifest Files</a></li> | |
164 <li><a href="match_patterns.html">Match Patterns</a></li> | |
165 </ul> | |
166 </li> | |
167 <li><a href="permission_warnings.html">Permission Warnings</a></li
> | |
168 <li><a href="api_index.html">chrome.* APIs</a></li> | |
169 <li><a href="api_other.html">Other APIs</a></li> | |
170 </ul> | |
171 </li> | |
172 <li><h2><a href="samples.html">Samples</a></h2></li> | |
173 <div class="line"> </div> | |
174 <li><h2>More</h2> | |
175 <ul> | |
176 <li><a href="http://code.google.com/chrome/webstore/docs/index.htm
l">Chrome Web Store</a></li> | |
177 <li><a href="http://code.google.com/chrome/apps/docs/developers_gu
ide.html">Hosted Apps</a></li> | |
178 <li><a href="themes.html">Themes</a></li> | |
179 </ul> | |
180 </li> | |
181 </ul> | |
182 </div> | |
183 <script> | |
184 initToggles(); | |
185 </script> | |
186 <div class="g-unit" id="gc-pagecontent"> | |
187 <div id="pageTitle"> | |
188 <h1 class="page_title">Internationalization (i18n)</h1> | |
189 </div> | |
190 <!-- TABLE OF CONTENTS --> | |
191 <div id="toc"> | |
192 <h2>Contents</h2> | |
193 <ol> | |
194 <li> | |
195 <a href="#l10">How to support multiple languages</a> | |
196 <ol> | |
197 </ol> | |
198 </li><li> | |
199 <a href="#overview-predefined">Predefined messages</a> | |
200 <ol> | |
201 </ol> | |
202 </li><li> | |
203 <a href="#overview-locales">Locales</a> | |
204 <ol> | |
205 <li> | |
206 <a href="#locales-supported">Supported locales</a> | |
207 </li><li> | |
208 <a href="#locales-usage">How extensions find strings</a> | |
209 </li><li> | |
210 <a href="#locales-testing">How to set your browser's locale</a
> | |
211 </li> | |
212 </ol> | |
213 </li><li> | |
214 <a href="#overview-examples">Examples</a> | |
215 <ol> | |
216 <li> | |
217 <a href="#examples-getMessage">Examples: getMessage</a> | |
218 </li><li> | |
219 <a href="#example-accept-languages">Example: getAcceptLanguage
s</a> | |
220 </li> | |
221 </ol> | |
222 </li> | |
223 <li> | |
224 <a href="#apiReference">API reference: chrome.i18n</a> | |
225 <ol> | |
226 <li> | |
227 <a href="#global-methods">Methods</a> | |
228 <ol> | |
229 <li> | |
230 <a href="#method-getAcceptLanguages">getAcceptLanguages</a> | |
231 </li><li> | |
232 <a href="#method-getMessage">getMessage</a> | |
233 </li> | |
234 </ol> | |
235 </li> | |
236 </ol> | |
237 </li> | |
238 </ol> | |
239 </div> | |
240 <!-- /TABLE OF CONTENTS --> | |
241 <!-- Standard content lead-in for experimental API pages --> | |
242 <!-- STATIC CONTENT PLACEHOLDER --> | |
243 <div id="static"><div id="pageData-name" class="pageData">Internationali
zation (i18n)</div> | |
244 <!-- | |
245 [NOTEs for editors: | |
246 * Try to be consistent about string vs. message (it's probably not yet). | |
247 --> | |
248 <!-- BEGIN AUTHORED CONTENT --> | |
249 <p id="classSummary"> | |
250 An <em>internationalized</em> extension | |
251 can be easily | |
252 <em>localized</em> — | |
253 adapted to languages and regions | |
254 that it didn't originally support. | |
255 </p> | |
256 <p> | |
257 To internationalize your extension, | |
258 you need to put all of its user-visible strings into a file | |
259 named <a href="i18n-messages.html"><code>messages.json</code></a>. | |
260 Each time you localize your extension | |
261 you add a messages file | |
262 under a directory | |
263 named <code>_locales/<em>localeCode</em></code>, | |
264 where <em>localeCode</em> is a code such as | |
265 <code>en</code> for English. | |
266 </p> | |
267 <p> | |
268 Here's the file hierarchy | |
269 for an internationalized extension that supports | |
270 English (<code>en</code>), | |
271 Spanish (<code>es</code>), and | |
272 Korean (<code>ko</code>): | |
273 </p> | |
274 <img src="images/i18n-hierarchy.gif" alt="In the extension directory: manifest.j
son, *.html, *.js, _locales directory. In the _locales directory: en, es, and ko
directories, each with a messages.json file." width="385" height="77"> | |
275 <h2 id="l10">How to support multiple languages</h2> | |
276 <p> | |
277 Say you have an extension | |
278 with the files shown in the following figure: | |
279 </p> | |
280 <img src="images/i18n-before.gif" alt="A manifest.json file and a file with Java
Script. The .json file has "name": "Hello World". The JavaSc
ript file has title = "Hello World";" width="323" height="148"> | |
281 <p> | |
282 To internationalize this extension, | |
283 you name each user-visible string | |
284 and put it into a messages file. | |
285 The extension's manifest, | |
286 CSS files, | |
287 and JavaScript code | |
288 use each string's name to get its localized version. | |
289 </p> | |
290 <p> | |
291 Here's what the extension looks like when it's internationalized | |
292 (note that it still has only English strings): | |
293 </p> | |
294 <img src="images/i18n-after-1.gif" alt="In the manifest.json file, "Hello W
orld" has been changed to "__MSG_extName__", and a new "defa
ult_locale" item has the value "en". In the JavaScript file, &quo
t;Hello World" has been changed to chrome.i18n.getMessage("extName&quo
t;). A new file named _locales/en/messages.json defines "extName"." wi
dth="782" height="228"> | |
295 <p class="note"> | |
296 <b>Important:</b> | |
297 If an extension has a <code>_locales</code> directory, | |
298 the <a href="manifest.html">manifest</a> | |
299 <b>must</b> define "default_locale". | |
300 </p> | |
301 <p> | |
302 Some notes about internationalizing extensions: | |
303 </p> | |
304 <ul> | |
305 <li><p> | |
306 You can use any of the <a href="#overview-locales">supported locales</a>. | |
307 If you use an unsupported locale, | |
308 Google Chrome ignores it. | |
309 </p></li> | |
310 <li> | |
311 In <code>manifest.json</code> | |
312 and CSS files, | |
313 refer to a string named <em>messagename</em> like this: | |
314 <pre>__MSG_<em>messagename</em>__</pre> | |
315 </li> | |
316 <li> | |
317 In your extension's JavaScript code, | |
318 refer to a string named <em>messagename</em> | |
319 like this: | |
320 <pre>chrome.i18n.getMessage("<em>messagename</em>")</pre> | |
321 </li><li> <p> | |
322 In each call to <code>getMessage()</code>, | |
323 you can supply up to 9 strings | |
324 to be included in the message. | |
325 See <a href="#examples-getMessage">Examples: getMessage</a> | |
326 for details. | |
327 </p> | |
328 </li> | |
329 <li><p> | |
330 Some messages, such as <code>@@bidi_dir</code> and <code>@@ui_locale</code>, | |
331 are provided by the internationalization system. | |
332 See the <a href="#overview-predefined">Predefined messages</a> section | |
333 for a full list of predefined message names. | |
334 </p> | |
335 </li> | |
336 <li> | |
337 In <code>messages.json</code>, | |
338 each user-visible string has a name, a "message" item, | |
339 and an optional "description" item. | |
340 The name is a key | |
341 such as "extName" or "search_string" | |
342 that identifies the string. | |
343 The "message" specifies | |
344 the value of the string in this locale. | |
345 The optional "description" | |
346 provides help to translators, | |
347 who might not be able to see how the string is used in your extension. | |
348 For example: | |
349 <pre>{ | |
350 "search_string": { | |
351 "message": "hello%20world", | |
352 "description": "The string we search for. Put %20 between words that go toge
ther." | |
353 }, | |
354 ... | |
355 }</pre> | |
356 <p> | |
357 For more information, see | |
358 <a href="i18n-messages.html">Formats: Locale-Specific Messages</a>. | |
359 </p> | |
360 </li> | |
361 </ul> | |
362 <p> | |
363 Once an extension is internationalized, | |
364 translating it is simple. | |
365 You copy <code>messages.json</code>, | |
366 translate it, | |
367 and put the copy into a new directory under <code>_locales</code>. | |
368 For example, to support Spanish, | |
369 just put a translated copy of <code>messages.json</code> | |
370 under <code>_locales/es</code>. | |
371 The following figure shows the previous extension | |
372 with a new Spanish translation. | |
373 </p> | |
374 <img src="images/i18n-after-2.gif" alt="This looks the same as the previous figu
re, but with a new file at _locales/es/messages.json that contains a Spanish tra
nslation of the messages." width="782" height="358"> | |
375 <h2 id="overview-predefined">Predefined messages</h2> | |
376 <p> | |
377 The internationalization system provides a few predefined | |
378 messages to help you localize your extension. | |
379 These include <code>@@ui_locale</code>, | |
380 so you can detect the current UI locale, | |
381 and a few <code>@@bidi_...</code> messages | |
382 that let you detect the text direction. | |
383 The latter messages have similar names to constants in the | |
384 <a href="http://code.google.com/apis/gadgets/docs/i18n.html#BIDI"> | |
385 gadgets BIDI (bi-directional) API</a>. | |
386 </p> | |
387 <p> | |
388 The special message <code>@@extension_id</code> | |
389 can be used in the CSS and JavaScript files of any extension, | |
390 whether or not the extension is localized. | |
391 This message doesn't work in manifest files. | |
392 </p> | |
393 <p> | |
394 The following table describes each predefined message. | |
395 </p> | |
396 <table> | |
397 <tbody><tr> | |
398 <th>Message name</th> <th>Description</th> | |
399 </tr> | |
400 <tr> | |
401 <td> <code>@@extension_id</code> </td> | |
402 <td>The extension ID; | |
403 you might use this string to construct URLs | |
404 for resources inside the extension. | |
405 Even unlocalized extensions can use this message. | |
406 <br> | |
407 <b>Note:</b> You can't use this message in a manifest file. | |
408 </td> | |
409 </tr> | |
410 <tr> | |
411 <td> <code>@@ui_locale</code> </td> | |
412 <td>The current locale; | |
413 you might use this string to construct locale-specific URLs. </td> | |
414 </tr> | |
415 <tr> | |
416 <td> <code>@@bidi_dir</code> </td> | |
417 <td> The text direction for the current locale, | |
418 either "ltr" for left-to-right languages such as English | |
419 or "rtl" for right-to-left languages such as Japanese. </td> | |
420 </tr> | |
421 <tr> | |
422 <td> <code>@@bidi_reversed_dir</code> </td> | |
423 <td> If the <code>@@bidi_dir</code> is "ltr", then this is "rtl"; | |
424 otherwise, it's "ltr". </td> | |
425 </tr> | |
426 <tr> | |
427 <td> <code>@@bidi_start_edge</code> </td> | |
428 <td> If the <code>@@bidi_dir</code> is "ltr", then this is "left"; | |
429 otherwise, it's "right". </td> | |
430 </tr> | |
431 <tr> | |
432 <td> <code>@@bidi_end_edge</code> </td> | |
433 <td> If the <code>@@bidi_dir</code> is "ltr", then this is "right"; | |
434 otherwise, it's "left". </td> | |
435 </tr> | |
436 </tbody></table> | |
437 <p> | |
438 Here's an example of using <code>@@extension_id</code> in a CSS file | |
439 to construct a URL: | |
440 </p> | |
441 <pre>body { | |
442 <b>background-image:url('chrome-extension://__MSG_@@extension_id__/background.
png');</b> | |
443 } | |
444 </pre> | |
445 <p> | |
446 If the extension ID is abcdefghijklmnopqrstuvwxyzabcdef, | |
447 then the bold line in the previous code snippet becomes: | |
448 </p> | |
449 <pre>background-image:url('chrome-extension://abcdefghijklmnopqrstuvwxyzabcdef/b
ackground.png'); | |
450 </pre> | |
451 <p> | |
452 Here's an example of using <code>@@bidi_*</code> messages in a CSS file: | |
453 </p> | |
454 <pre>body { | |
455 <b>direction: __MSG_@@bidi_dir__;</b> | |
456 } | |
457 div#header { | |
458 margin-bottom: 1.05em; | |
459 overflow: hidden; | |
460 padding-bottom: 1.5em; | |
461 <b>padding-__MSG_@@bidi_start_edge__: 0;</b> | |
462 <b>padding-__MSG_@@bidi_end_edge__: 1.5em;</b> | |
463 position: relative; | |
464 } | |
465 </pre> | |
466 <p> | |
467 For left-to-right languages such as English, | |
468 the bold lines become: | |
469 </p> | |
470 <pre>dir: ltr; | |
471 padding-left: 0; | |
472 padding-right: 1.5em; | |
473 </pre> | |
474 <h2 id="overview-locales">Locales</h2> | |
475 <p> | |
476 You can choose from many locales, | |
477 including some (such as <code>en</code>) | |
478 that let a single translation support multiple variations of a language | |
479 (such as <code>en_GB</code> and <code>en_US</code>). | |
480 </p> | |
481 <h3 id="locales-supported">Supported locales</h3> | |
482 <p> | |
483 Extensions can use any of the | |
484 <a href="http://code.google.com/chrome/webstore/docs/i18n.html#localeTable">loca
les that the Chrome Web Store supports</a>. | |
485 </p> | |
486 <h3 id="locales-usage">How extensions find strings</h3> | |
487 <p> | |
488 You don't have to define every string for every locale | |
489 that your internationalized extension supports. | |
490 As long as the default locale's <code>messages.json</code> file | |
491 has a value for every string, | |
492 your extension will run no matter how sparse a translation is. | |
493 Here's how the extension system searches for a message: | |
494 </p> | |
495 <ol> | |
496 <li> | |
497 Search the messages file (if any) | |
498 for the user's preferred locale. | |
499 For example, when Google Chrome's locale is set to | |
500 British English (<code>en_GB</code>), | |
501 the system first looks for the message in | |
502 <code>_locales/en_GB/messages.json</code>. | |
503 If that file exists and the message is there, | |
504 the system looks no further. | |
505 </li> | |
506 <li> | |
507 If the user's preferred locale has a region | |
508 (that is, the locale has an underscore: _), | |
509 search the locale without that region. | |
510 For example, if the <code>en_GB</code> messages file | |
511 doesn't exist or doesn't contain the message, | |
512 the system looks in the <code>en</code> messages file. | |
513 If that file exists and the message is there, | |
514 the system looks no further. | |
515 </li> | |
516 <li> | |
517 Search the messages file for the extension's default locale. | |
518 For example, if the extension's "default_locale" is set to "es", | |
519 and neither <code>_locales/en_GB/messages.json</code> | |
520 nor <code>_locales/en/messages.json</code> contains the message, | |
521 the extension uses the message from | |
522 <code>_locales/es/messages.json</code>. | |
523 </li> | |
524 </ol> | |
525 <p> | |
526 In the following figure, | |
527 the message named "colores" is in all three locales | |
528 that the extension supports, | |
529 but "extName" is in only two of the locales. | |
530 Wherever a user running Google Chrome in US English sees the label "Colors", | |
531 a user of British English sees "Colours". | |
532 Both US English and British English users | |
533 see the extension name "Hello World". | |
534 Because the default language is Spanish, | |
535 users running Google Chrome in any non-English language | |
536 see the label "Colores" and the extension name "Hola mundo". | |
537 </p> | |
538 <img src="images/i18n-strings.gif" alt="Four files: manifest.json and three mess
ages.json files (for es, en, and en_GB). The es and en files show entries for m
essages named "extName" and "colores"; the en_GB file has ju
st one entry (for "colores")." width="493" height="488"> | |
539 <h3 id="locales-testing">How to set your browser's locale</h3> | |
540 <p> | |
541 To test translations, you might want to set your browser's locale. | |
542 This section tells you how to set the locale in | |
543 <a href="#testing-win">Windows</a>, | |
544 <a href="#testing-mac">Mac OS X</a>, and | |
545 <a href="#testing-linux">Linux</a>. | |
546 </p> | |
547 <h4 id="testing-win">Windows</h4> | |
548 <p> | |
549 You can change the locale using either | |
550 a locale-specific shortcut | |
551 or the Google Chrome UI. | |
552 The shortcut approach is quicker, once you've set it up, | |
553 and it lets you use several languages at once. | |
554 </p> | |
555 <h5 id="win-shortcut">Using a locale-specific shortcut</h5> | |
556 <p> | |
557 To create and use a shortcut that launches Google Chrome | |
558 with a particular locale: | |
559 </p> | |
560 <ol> | |
561 <li> | |
562 Make a copy of the Google Chrome shortcut | |
563 that's already on your desktop. | |
564 </li> | |
565 <li> | |
566 Rename the new shortcut to match the new locale. | |
567 </li> | |
568 <li> | |
569 Change the shortcut's properties | |
570 so that the Target field specifies the | |
571 <code>--lang</code> and | |
572 <code>--user-data-dir</code> flags. | |
573 The target should look something like this: | |
574 <pre><em>path_to_chrome.exe</em> --lang=<em>locale</em> --user-data-dir=c:\<em>l
ocale_profile_dir</em></pre> | |
575 </li> | |
576 <li> | |
577 Launch Google Chrome by double-clicking the shortcut. | |
578 </li> | |
579 </ol> | |
580 <p> | |
581 For example, to create a shortcut | |
582 that launches Google Chrome in Spanish (<code>es</code>), | |
583 you might create a shortcut named <code>chrome-es</code> | |
584 that has the following target: | |
585 </p> | |
586 <pre><em>path_to_chrome.exe</em> --lang=es --user-data-dir=c:\chrome-profile-es<
/pre> | |
587 <p> | |
588 You can create as many shortcuts as you like, | |
589 making it easy to test your extension in multiple languages. | |
590 For example: | |
591 </p> | |
592 <pre><em>path_to_chrome.exe</em> --lang=en --user-data-dir=c:\chrome-profile-en | |
593 <em>path_to_chrome.exe</em> --lang=en_GB --user-data-dir=c:\chrome-profile-en_GB | |
594 <em>path_to_chrome.exe</em> --lang=ko --user-data-dir=c:\chrome-profile-ko</pre> | |
595 <p class="note"> | |
596 <b>Note:</b> | |
597 Specifying <code>--user-data-dir</code> is optional but handy. | |
598 Having one data directory per locale | |
599 lets you run the browser | |
600 in several languages at the same time. | |
601 A disadvantage is that because the locales' data isn't shared, | |
602 you have to install your extension multiple times — once per locale, | |
603 which can be challenging when you don't speak the language. | |
604 For more information, see | |
605 <a href="http://www.chromium.org/developers/creating-and-using-profiles">Creatin
g and Using Profiles</a>. | |
606 </p> | |
607 <h5 id="win-ui">Using the UI</h5> | |
608 <p> | |
609 Here's how to change the locale using the UI on Google Chrome for Windows: | |
610 </p> | |
611 <ol> | |
612 <li> Wrench icon > <b>Options</b> </li> | |
613 <li> Choose the <b>Under the Hood</b> tab </li> | |
614 <li> Scroll down to <b>Web Content</b> </li> | |
615 <li> Click <b>Change font and language settings</b> </li> | |
616 <li> Choose the <b>Languages</b> tab </li> | |
617 <li> Use the drop down to set the <b>Google Chrome language</b> </li> | |
618 <li> Restart Chrome </li> | |
619 </ol> | |
620 <h4 id="testing-mac">Mac OS X</h4> | |
621 <p> | |
622 To change the locale on Mac, | |
623 you use the system preferences. | |
624 </p> | |
625 <ol> | |
626 <li> From the Apple menu, choose <b>System Preferences</b> </li> | |
627 <li> Under the <b>Personal</b> section, choose <b>International</b> </li> | |
628 <li> Choose your language and location </li> | |
629 <li> Restart Chrome </li> | |
630 </ol> | |
631 <h4 id="testing-linux">Linux</h4> | |
632 <p> | |
633 To change the locale on Linux, | |
634 first quit Google Chrome. | |
635 Then, all in one line, | |
636 set the LANGUAGE environment variable | |
637 and launch Google Chrome. | |
638 For example: | |
639 </p> | |
640 <pre>LANGUAGE=es ./chrome | |
641 </pre> | |
642 <h2 id="overview-examples">Examples</h2> | |
643 <p> | |
644 You can find simple examples of internationalization in the | |
645 <a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extension
s/docs/examples/api/i18n/">examples/api/i18n</a> | |
646 directory. | |
647 For a complete example, see | |
648 <a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extension
s/docs/examples/extensions/news/">examples/extensions/news</a>. | |
649 For other examples and for help in viewing the source code, see | |
650 <a href="samples.html">Samples</a>. | |
651 </p> | |
652 <h3 id="examples-getMessage">Examples: getMessage</h3> | |
653 <!-- | |
654 [PENDING: improve this section. it should probably start with a | |
655 one-variable example that includes the messages.json code.] | |
656 --> | |
657 <p> | |
658 The following code gets a localized message from the browser | |
659 and displays it as a string. | |
660 It replaces two placeholders within the message with the strings | |
661 "string1" and "string2". | |
662 </p> | |
663 <pre>function getMessage() { | |
664 var message = chrome.i18n.getMessage("click_here", ["string1", "string2"]); | |
665 document.getElementById("languageSpan").innerHTML = message; | |
666 } | |
667 </pre> | |
668 <p> | |
669 Here's how you'd supply and use a single string: | |
670 </p> | |
671 <pre><em>// In JavaScript code</em> | |
672 status.innerText = chrome.i18n.getMessage("error", errorDetails); | |
673 <em>// In messages.json</em> | |
674 "error": { | |
675 "message": "Error: $details$", | |
676 "description": "Generic error template. Expects error parameter to be passed i
n.", | |
677 "placeholders": { | |
678 "details": { | |
679 "content": "$1", | |
680 "example": "Failed to fetch RSS feed." | |
681 } | |
682 } | |
683 } | |
684 </pre> | |
685 <p> | |
686 For more information about placeholders, see the | |
687 <a href="i18n-messages.html">Locale-Specific Messages</a> page. | |
688 For details on calling <code>getMessage()</code>, see the | |
689 <a href="#method-getMessage">API reference</a>. | |
690 </p> | |
691 <h3 id="example-accept-languages">Example: getAcceptLanguages</h3> | |
692 <p> | |
693 The following code gets accept-languages from the browser and displays them as a | |
694 string by separating each accept-language with ','. | |
695 </p> | |
696 <pre>function getAcceptLanguages() { | |
697 chrome.i18n.getAcceptLanguages(function(languageList) { | |
698 var languages = languageList.join(","); | |
699 document.getElementById("languageSpan").innerHTML = languages; | |
700 }) | |
701 } | |
702 </pre> | |
703 <p> | |
704 For details on calling <code>getAcceptLanguages()</code>, see the | |
705 <a href="#method-getAcceptLanguages">API reference</a>. | |
706 </p> | |
707 <!-- END AUTHORED CONTENT --> | |
708 </div> | |
709 <!-- API PAGE --> | |
710 <div class="apiPage"> | |
711 <a name="apiReference"></a> | |
712 <h2>API reference: chrome.i18n</h2> | |
713 <!-- PROPERTIES --> | |
714 <!-- /apiGroup --> | |
715 <!-- METHODS --> | |
716 <div id="methodsTemplate" class="apiGroup"> | |
717 <a name="global-methods"></a> | |
718 <h3>Methods</h3> | |
719 <!-- iterates over all functions --> | |
720 <div class="apiItem"> | |
721 <a name="method-getAcceptLanguages"></a> <!-- method-anchor --> | |
722 <h4>getAcceptLanguages</h4> | |
723 <div class="summary"> | |
724 <!-- Note: intentionally longer 80 columns --> | |
725 <span>chrome.i18n.getAcceptLanguages</span>(<span class="null"
><span>function</span> | |
726 <var><span>callback</span></var></span>)</div> | |
727 <div class="description"> | |
728 <p>Gets the accept-languages of the browser. This is different f
rom the locale used by the browser; to get the locale, use <code>window.navigato
r.language</code>.</p> | |
729 <!-- PARAMETERS --> | |
730 <h4>Parameters</h4> | |
731 <dl> | |
732 <div> | |
733 <div> | |
734 <dt> | |
735 <var>callback</var> | |
736 <em> | |
737 <!-- TYPE --> | |
738 <div style="display:inline"> | |
739 ( | |
740 <span id="typeTemplate"> | |
741 <span> | |
742 <span>function</span> | |
743 </span> | |
744 </span> | |
745 ) | |
746 </div> | |
747 </em> | |
748 </dt> | |
749 <dd class="todo"> | |
750 Undocumented. | |
751 </dd> | |
752 <!-- OBJECT PROPERTIES --> | |
753 <!-- OBJECT METHODS --> | |
754 <!-- OBJECT EVENT FIELDS --> | |
755 <!-- FUNCTION PARAMETERS --> | |
756 </div> | |
757 </div> | |
758 </dl> | |
759 <!-- RETURNS --> | |
760 <dl> | |
761 </dl> | |
762 <!-- CALLBACK --> | |
763 <div> | |
764 <div> | |
765 <h4>Callback function</h4> | |
766 <p> | |
767 The <em>callback</em> parameter should specify a function | |
768 that looks like this: | |
769 </p> | |
770 <!-- Note: intentionally longer 80 columns --> | |
771 <pre>function(<span>array of string languages</span>) <span cl
ass="subdued">{...}</span>;</pre> | |
772 <dl> | |
773 <div> | |
774 <div> | |
775 <dt> | |
776 <var>languages</var> | |
777 <em> | |
778 <!-- TYPE --> | |
779 <div style="display:inline"> | |
780 ( | |
781 <span id="typeTemplate"> | |
782 <span> | |
783 <span> | |
784 array of <span><span> | |
785 <span> | |
786 <span>string</span> | |
787 </span> | |
788 </span></span> | |
789 </span> | |
790 </span> | |
791 </span> | |
792 ) | |
793 </div> | |
794 </em> | |
795 </dt> | |
796 <dd>Array of the accept languages of the browser, such as en-US,en,zh-
CN</dd> | |
797 <!-- OBJECT PROPERTIES --> | |
798 <!-- OBJECT METHODS --> | |
799 <!-- OBJECT EVENT FIELDS --> | |
800 <!-- FUNCTION PARAMETERS --> | |
801 </div> | |
802 </div> | |
803 </dl> | |
804 </div> | |
805 </div> | |
806 <!-- MIN_VERSION --> | |
807 </div> <!-- /description --> | |
808 </div><div class="apiItem"> | |
809 <a name="method-getMessage"></a> <!-- method-anchor --> | |
810 <h4>getMessage</h4> | |
811 <div class="summary"><span>string</span> | |
812 <!-- Note: intentionally longer 80 columns --> | |
813 <span>chrome.i18n.getMessage</span>(<span class="null"><span>s
tring</span> | |
814 <var><span>messageName</span></var></span><span class="opt
ional"><span>, </span><span>any</span> | |
815 <var><span>substitutions</span></var></span>)</div> | |
816 <div class="description"> | |
817 <p>Gets the localized string for the specified message. If the m
essage is missing, this method returns an empty string (''). If the format of th
e <code>getMessage()</code> call is wrong — for example, <em>messageName</em> is
not a string or the <em>substitutions</em> array has more than 9 elements — thi
s method returns <code>undefined</code>.</p> | |
818 <!-- PARAMETERS --> | |
819 <h4>Parameters</h4> | |
820 <dl> | |
821 <div> | |
822 <div> | |
823 <dt> | |
824 <var>messageName</var> | |
825 <em> | |
826 <!-- TYPE --> | |
827 <div style="display:inline"> | |
828 ( | |
829 <span id="typeTemplate"> | |
830 <span> | |
831 <span>string</span> | |
832 </span> | |
833 </span> | |
834 ) | |
835 </div> | |
836 </em> | |
837 </dt> | |
838 <dd>The name of the message, as specified in the <a href="i18n-message
s.html"><code>messages.json</code></a> file.</dd> | |
839 <!-- OBJECT PROPERTIES --> | |
840 <!-- OBJECT METHODS --> | |
841 <!-- OBJECT EVENT FIELDS --> | |
842 <!-- FUNCTION PARAMETERS --> | |
843 </div> | |
844 </div><div> | |
845 <div> | |
846 <dt> | |
847 <var>substitutions</var> | |
848 <em> | |
849 <!-- TYPE --> | |
850 <div style="display:inline"> | |
851 ( | |
852 <span class="optional">optional</span> | |
853 <span id="typeTemplate"> | |
854 <span> | |
855 <span>any</span> | |
856 </span> | |
857 </span> | |
858 ) | |
859 </div> | |
860 </em> | |
861 </dt> | |
862 <dd>Up to 9 substitution strings, if the message requires any.</dd> | |
863 <!-- OBJECT PROPERTIES --> | |
864 <!-- OBJECT METHODS --> | |
865 <!-- OBJECT EVENT FIELDS --> | |
866 <!-- FUNCTION PARAMETERS --> | |
867 </div> | |
868 </div> | |
869 </dl> | |
870 <!-- RETURNS --> | |
871 <h4>Returns</h4> | |
872 <dl> | |
873 <div> | |
874 <div> | |
875 <dt> | |
876 <em> | |
877 <!-- TYPE --> | |
878 <div style="display:inline"> | |
879 ( | |
880 <span id="typeTemplate"> | |
881 <span> | |
882 <span>string</span> | |
883 </span> | |
884 </span> | |
885 ) | |
886 </div> | |
887 </em> | |
888 </dt> | |
889 <dd>Message localized for current locale.</dd> | |
890 <!-- OBJECT PROPERTIES --> | |
891 <!-- OBJECT METHODS --> | |
892 <!-- OBJECT EVENT FIELDS --> | |
893 <!-- FUNCTION PARAMETERS --> | |
894 </div> | |
895 </div> | |
896 </dl> | |
897 <!-- CALLBACK --> | |
898 <!-- MIN_VERSION --> | |
899 </div> <!-- /description --> | |
900 </div> <!-- /apiItem --> | |
901 </div> <!-- /apiGroup --> | |
902 <!-- EVENTS --> | |
903 <!-- /apiGroup --> | |
904 <!-- TYPES --> | |
905 <!-- /apiGroup --> | |
906 </div> <!-- /apiPage --> | |
907 </div> <!-- /gc-pagecontent --> | |
908 </div> <!-- /g-section --> | |
909 </div> <!-- /codesiteContent --> | |
910 <div id="gc-footer" --=""> | |
911 <div class="text"> | |
912 <p> | |
913 Except as otherwise <a href="http://code.google.com/policies.html#restrictions
">noted</a>, | |
914 the content of this page is licensed under the <a rel="license" href="http://c
reativecommons.org/licenses/by/3.0/">Creative Commons | |
915 Attribution 3.0 License</a>, and code samples are licensed under the | |
916 <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD Lic
ense</a>. | |
917 </p> | |
918 <p> | |
919 ©2011 Google | |
920 </p> | |
921 <!-- begin analytics --> | |
922 <script src="https://www.google-analytics.com/urchin.js" type="text/javascript">
</script> | |
923 <script src="https://www.google-analytics.com/ga.js" type="text/javascript"></sc
ript> | |
924 <script type="text/javascript"> | |
925 // chrome doc tracking | |
926 try { | |
927 var engdocs = _gat._getTracker("YT-10763712-2"); | |
928 engdocs._trackPageview(); | |
929 } catch(err) {} | |
930 // code.google.com site-wide tracking | |
931 try { | |
932 _uacct="UA-18071-1"; | |
933 _uanchor=1; | |
934 _uff=0; | |
935 urchinTracker(); | |
936 } | |
937 catch(e) {/* urchinTracker not available. */} | |
938 </script> | |
939 <!-- end analytics --> | |
940 </div> | |
941 </div> <!-- /gc-footer --> | |
942 </div> <!-- /gc-container --> | |
943 </body></html> | |
OLD | NEW |