Dashboard sipadu mbip
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

intl-base.js 3.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*
  2. Copyright (c) 2010, Yahoo! Inc. All rights reserved.
  3. Code licensed under the BSD License:
  4. http://developer.yahoo.com/yui/license.html
  5. version: 3.4.0
  6. build: nightly
  7. */
  8. YUI.add('intl-base', function(Y) {
  9. /**
  10. * The Intl utility provides a central location for managing sets of
  11. * localized resources (strings and formatting patterns).
  12. *
  13. * @class Intl
  14. * @uses EventTarget
  15. * @static
  16. */
  17. var SPLIT_REGEX = /[, ]/;
  18. Y.mix(Y.namespace('Intl'), {
  19. /**
  20. * Returns the language among those available that
  21. * best matches the preferred language list, using the Lookup
  22. * algorithm of BCP 47.
  23. * If none of the available languages meets the user's preferences,
  24. * then "" is returned.
  25. * Extended language ranges are not supported.
  26. *
  27. * @method lookupBestLang
  28. * @param {String[] | String} preferredLanguages The list of preferred
  29. * languages in descending preference order, represented as BCP 47
  30. * language tags. A string array or a comma-separated list.
  31. * @param {String[]} availableLanguages The list of languages
  32. * that the application supports, represented as BCP 47 language
  33. * tags.
  34. *
  35. * @return {String} The available language that best matches the
  36. * preferred language list, or "".
  37. * @since 3.1.0
  38. */
  39. lookupBestLang: function(preferredLanguages, availableLanguages) {
  40. var i, language, result, index;
  41. // check whether the list of available languages contains language;
  42. // if so return it
  43. function scan(language) {
  44. var i;
  45. for (i = 0; i < availableLanguages.length; i += 1) {
  46. if (language.toLowerCase() ===
  47. availableLanguages[i].toLowerCase()) {
  48. return availableLanguages[i];
  49. }
  50. }
  51. }
  52. if (Y.Lang.isString(preferredLanguages)) {
  53. preferredLanguages = preferredLanguages.split(SPLIT_REGEX);
  54. }
  55. for (i = 0; i < preferredLanguages.length; i += 1) {
  56. language = preferredLanguages[i];
  57. if (!language || language === '*') {
  58. continue;
  59. }
  60. // check the fallback sequence for one language
  61. while (language.length > 0) {
  62. result = scan(language);
  63. if (result) {
  64. return result;
  65. } else {
  66. index = language.lastIndexOf('-');
  67. if (index >= 0) {
  68. language = language.substring(0, index);
  69. // one-character subtags get cut along with the
  70. // following subtag
  71. if (index >= 2 && language.charAt(index - 2) === '-') {
  72. language = language.substring(0, index - 2);
  73. }
  74. } else {
  75. // nothing available for this language
  76. break;
  77. }
  78. }
  79. }
  80. }
  81. return '';
  82. }
  83. });
  84. }, '3.4.0' ,{requires:['yui-base']});