Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: src/extensions/i18n/i18n-utils.js

Issue 21499003: Move helper methods from i18n extension into runtime. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 248
249 return resolved; 249 return resolved;
250 } 250 }
251 251
252 252
253 /** 253 /**
254 * Returns best matched supported locale and extension info using basic 254 * Returns best matched supported locale and extension info using basic
255 * lookup algorithm. 255 * lookup algorithm.
256 */ 256 */
257 function lookupMatcher(service, requestedLocales) { 257 function lookupMatcher(service, requestedLocales) {
258 native function NativeJSGetDefaultICULocale();
259
260 if (service.match(SERVICE_RE) === null) { 258 if (service.match(SERVICE_RE) === null) {
261 throw new Error('Internal error, wrong service type: ' + service); 259 throw new Error('Internal error, wrong service type: ' + service);
262 } 260 }
263 261
264 // Cache these, they don't ever change per service. 262 // Cache these, they don't ever change per service.
265 if (AVAILABLE_LOCALES[service] === undefined) { 263 if (AVAILABLE_LOCALES[service] === undefined) {
266 AVAILABLE_LOCALES[service] = getAvailableLocalesOf(service); 264 AVAILABLE_LOCALES[service] = getAvailableLocalesOf(service);
267 } 265 }
268 266
269 for (var i = 0; i < requestedLocales.length; ++i) { 267 for (var i = 0; i < requestedLocales.length; ++i) {
(...skipping 10 matching lines...) Expand all
280 var pos = locale.lastIndexOf('-'); 278 var pos = locale.lastIndexOf('-');
281 if (pos === -1) { 279 if (pos === -1) {
282 break; 280 break;
283 } 281 }
284 locale = locale.substring(0, pos); 282 locale = locale.substring(0, pos);
285 } while (true); 283 } while (true);
286 } 284 }
287 285
288 // Didn't find a match, return default. 286 // Didn't find a match, return default.
289 if (DEFAULT_ICU_LOCALE === undefined) { 287 if (DEFAULT_ICU_LOCALE === undefined) {
290 DEFAULT_ICU_LOCALE = NativeJSGetDefaultICULocale(); 288 DEFAULT_ICU_LOCALE = %GetDefaultICULocale();
291 } 289 }
292 290
293 return {'locale': DEFAULT_ICU_LOCALE, 'extension': '', 'position': -1}; 291 return {'locale': DEFAULT_ICU_LOCALE, 'extension': '', 'position': -1};
294 } 292 }
295 293
296 294
297 /** 295 /**
298 * Returns best matched supported locale and extension info using 296 * Returns best matched supported locale and extension info using
299 * implementation dependend algorithm. 297 * implementation dependend algorithm.
300 */ 298 */
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 * It's sometimes desireable to leave user requested locale instead of ICU 437 * It's sometimes desireable to leave user requested locale instead of ICU
440 * supported one (zh-TW is equivalent to zh-Hant-TW, so we should keep shorter 438 * supported one (zh-TW is equivalent to zh-Hant-TW, so we should keep shorter
441 * one, if that was what user requested). 439 * one, if that was what user requested).
442 * This function returns user specified tag if its maximized form matches ICU 440 * This function returns user specified tag if its maximized form matches ICU
443 * resolved locale. If not we return ICU result. 441 * resolved locale. If not we return ICU result.
444 */ 442 */
445 function getOptimalLanguageTag(original, resolved) { 443 function getOptimalLanguageTag(original, resolved) {
446 // Returns Array<Object>, where each object has maximized and base properties. 444 // Returns Array<Object>, where each object has maximized and base properties.
447 // Maximized: zh -> zh-Hans-CN 445 // Maximized: zh -> zh-Hans-CN
448 // Base: zh-CN-u-ca-gregory -> zh-CN 446 // Base: zh-CN-u-ca-gregory -> zh-CN
449 native function NativeJSGetLanguageTagVariants();
450
451 // Take care of grandfathered or simple cases. 447 // Take care of grandfathered or simple cases.
452 if (original === resolved) { 448 if (original === resolved) {
453 return original; 449 return original;
454 } 450 }
455 451
456 var locales = NativeJSGetLanguageTagVariants([original, resolved]); 452 var locales = %GetLanguageTagVariants([original, resolved]);
457 if (locales[0].maximized !== locales[1].maximized) { 453 if (locales[0].maximized !== locales[1].maximized) {
458 return resolved; 454 return resolved;
459 } 455 }
460 456
461 // Preserve extensions of resolved locale, but swap base tags with original. 457 // Preserve extensions of resolved locale, but swap base tags with original.
462 var resolvedBase = new RegExp('^' + locales[1].base); 458 var resolvedBase = new RegExp('^' + locales[1].base);
463 return resolved.replace(resolvedBase, locales[0].base); 459 return resolved.replace(resolvedBase, locales[0].base);
464 } 460 }
465 461
466 462
467 /** 463 /**
468 * Returns an Object that contains all of supported locales for a given 464 * Returns an Object that contains all of supported locales for a given
469 * service. 465 * service.
470 * In addition to the supported locales we add xx-ZZ locale for each xx-Yyyy-ZZ 466 * In addition to the supported locales we add xx-ZZ locale for each xx-Yyyy-ZZ
471 * that is supported. This is required by the spec. 467 * that is supported. This is required by the spec.
472 */ 468 */
473 function getAvailableLocalesOf(service) { 469 function getAvailableLocalesOf(service) {
474 native function NativeJSAvailableLocalesOf(); 470 var available = %AvailableLocalesOf(service);
475 var available = NativeJSAvailableLocalesOf(service);
476 471
477 for (var i in available) { 472 for (var i in available) {
478 if (available.hasOwnProperty(i)) { 473 if (available.hasOwnProperty(i)) {
479 var parts = i.match(/^([a-z]{2,3})-([A-Z][a-z]{3})-([A-Z]{2})$/); 474 var parts = i.match(/^([a-z]{2,3})-([A-Z][a-z]{3})-([A-Z]{2})$/);
480 if (parts !== null) { 475 if (parts !== null) {
481 // Build xx-ZZ. We don't care about the actual value, 476 // Build xx-ZZ. We don't care about the actual value,
482 // as long it's not undefined. 477 // as long it's not undefined.
483 available[parts[1] + '-' + parts[3]] = null; 478 available[parts[1] + '-' + parts[3]] = null;
484 } 479 }
485 } 480 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 } 527 }
533 } 528 }
534 529
535 530
536 /** 531 /**
537 * Returns titlecased word, aMeRricA -> America. 532 * Returns titlecased word, aMeRricA -> America.
538 */ 533 */
539 function toTitleCaseWord(word) { 534 function toTitleCaseWord(word) {
540 return word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase(); 535 return word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase();
541 } 536 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698