widget-i18n-debug.js revision d57e8af4277d928d616e3b91b4b26693d18903e1
012a352f4b26cfd874db8d06debc495c2303e8b2Bob HalleyYUI.add('widget-i18n', function(Y) {
178f6ad061e54bc5babfca3577f72058fa0797c1Bob Halley
24a4fabc0b0508a2d2b4651454dba1dfa93968f2Tinderbox Uservar TRUE = true,
bf8267aa453e5d2a735ed732a043b77a0b355b20Mark Andrews LOCALE = "locale",
bf8267aa453e5d2a735ed732a043b77a0b355b20Mark Andrews INIT_VALUE = "initValue",
bf8267aa453e5d2a735ed732a043b77a0b355b20Mark Andrews HYPHEN = "-",
bf8267aa453e5d2a735ed732a043b77a0b355b20Mark Andrews EMPTY_STR = "",
bf8267aa453e5d2a735ed732a043b77a0b355b20Mark Andrews Widget = Y.Widget;
bf8267aa453e5d2a735ed732a043b77a0b355b20Mark Andrews
bf8267aa453e5d2a735ed732a043b77a0b355b20Mark Andrews/**
bf8267aa453e5d2a735ed732a043b77a0b355b20Mark Andrews * @attribute locale
bf8267aa453e5d2a735ed732a043b77a0b355b20Mark Andrews * @description
bf8267aa453e5d2a735ed732a043b77a0b355b20Mark Andrews * The default locale for the widget. NOTE: Using get/set on the "strings" attribute will
bf8267aa453e5d2a735ed732a043b77a0b355b20Mark Andrews * return/set strings for this locale.
bf8267aa453e5d2a735ed732a043b77a0b355b20Mark Andrews * @default "en"
bf8267aa453e5d2a735ed732a043b77a0b355b20Mark Andrews * @type String
b897c52f865b2fc4e220e2110b874e59c716456bBob Halley */
ea94d370123a5892f6c47a97f21d1b28d44bb168Tinderbox UserWidget.ATTRS[LOCALE] = {
9c3531d72aeaad6c5f01efe6a1c82023e1379e4dDavid Lawrence value: "en"
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt};
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan HuntY.mix(Widget.prototype, {
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt /**
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley * Sets strings for a particular locale, merging with any existing
460b427411b72da26b1836b9424e2e70d65d9394David Lawrence * strings which may already be defined for the locale.
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley *
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley * @method _setStrings
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt * @protected
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley * @param {Object} strings The hash of string key/values to set
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley * @param {Object} locale The locale for the string values being set
b897c52f865b2fc4e220e2110b874e59c716456bBob Halley */
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley _setStrings : function(strings, locale) {
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley var strs = this._strs;
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt locale = locale.toLowerCase();
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley if (!strs[locale]) {
b897c52f865b2fc4e220e2110b874e59c716456bBob Halley strs[locale] = {};
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt }
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley Y.aggregate(strs[locale], strings, TRUE);
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt return strs[locale];
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt },
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt /**
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt * Returns the strings key/value hash for a paricular locale, without locale lookup applied.
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt *
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt * @method _getStrings
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt * @protected
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt * @param {Object} locale
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt */
460b427411b72da26b1836b9424e2e70d65d9394David Lawrence _getStrings : function(locale) {
460b427411b72da26b1836b9424e2e70d65d9394David Lawrence return this._strs[locale.toLowerCase()];
460b427411b72da26b1836b9424e2e70d65d9394David Lawrence },
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt
fcb54ce0a4f7377486df5bec83b3aa4711bf4131Mark Andrews /**
460b427411b72da26b1836b9424e2e70d65d9394David Lawrence * Gets the entire strings hash for a particular locale, performing locale lookup.
460b427411b72da26b1836b9424e2e70d65d9394David Lawrence * <p>
460b427411b72da26b1836b9424e2e70d65d9394David Lawrence * If no values of the key are defined for a particular locale the value for the
460b427411b72da26b1836b9424e2e70d65d9394David Lawrence * default locale (in initial locale set for the class) is returned.
460b427411b72da26b1836b9424e2e70d65d9394David Lawrence * </p>
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley * @method getStrings
12e63bfe1d111ccb57f482b28d56c785cccc7cf7David Lawrence * @param {String} locale (optional) The locale for which the string value is required. Defaults to the current locale, if not provided.
12e63bfe1d111ccb57f482b28d56c785cccc7cf7David Lawrence */
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt // TODO: Optimize/Cache. Clear cache on _setStrings call.
12e63bfe1d111ccb57f482b28d56c785cccc7cf7David Lawrence getStrings : function(locale) {
12e63bfe1d111ccb57f482b28d56c785cccc7cf7David Lawrence
dabea86dac4c01f852b7aea728f73b4f55a89d44Mark Andrews locale = (locale || this.get(LOCALE)).toLowerCase();
dabea86dac4c01f852b7aea728f73b4f55a89d44Mark Andrews
dabea86dac4c01f852b7aea728f73b4f55a89d44Mark Andrews Y.log("getStrings: For " + locale, "info", "widget");
12a3ab37fe6556406acdf92fc7c5f198d603ca2eMark Andrews
f5cfcbf2f7906fb59c2b8b9b8fc9c7a75ac44dabMark Andrews var defLocale = this.getDefaultLocale().toLowerCase(),
2d46d268ccff30bb50e661b47c6496d23d9156c7Mark Andrews defStrs = this._getStrings(defLocale),
2d46d268ccff30bb50e661b47c6496d23d9156c7Mark Andrews strs = (defStrs) ? Y.merge(defStrs) : {},
dabea86dac4c01f852b7aea728f73b4f55a89d44Mark Andrews localeSegments = locale.split(HYPHEN),
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley localeStrs,
12e63bfe1d111ccb57f482b28d56c785cccc7cf7David Lawrence i, l,
460b427411b72da26b1836b9424e2e70d65d9394David Lawrence lookup;
12e63bfe1d111ccb57f482b28d56c785cccc7cf7David Lawrence
460b427411b72da26b1836b9424e2e70d65d9394David Lawrence // If locale is different than the default, or needs lookup support
2d9bd38ec3fbbfe920757b8972d94f664a9b354bMark Andrews if (locale !== defLocale || localeSegments.length > 1) {
2d9bd38ec3fbbfe920757b8972d94f664a9b354bMark Andrews lookup = EMPTY_STR;
12e63bfe1d111ccb57f482b28d56c785cccc7cf7David Lawrence for (i = 0, l = localeSegments.length; i < l; ++i) {
460b427411b72da26b1836b9424e2e70d65d9394David Lawrence lookup += localeSegments[i];
596912ee9ca8eb14d30707ec286ab5d28bd39b3eMark Andrews
8319af16557b81eba3277ee67215285f0823b587Mark Andrews Y.log("getStrings: Merging in strings from: " + lookup, "info", "widget");
8319af16557b81eba3277ee67215285f0823b587Mark Andrews
aee5e9cbacd8f88325840b8a498876f4319b0890Mark Andrews localeStrs = this._getStrings(lookup);
9e5854255178c04170bc98839282d4cf3fae7443Mark Andrews if (localeStrs) {
9e5854255178c04170bc98839282d4cf3fae7443Mark Andrews Y.aggregate(strs, localeStrs, TRUE);
12e63bfe1d111ccb57f482b28d56c785cccc7cf7David Lawrence }
460b427411b72da26b1836b9424e2e70d65d9394David Lawrence lookup += HYPHEN;
12e63bfe1d111ccb57f482b28d56c785cccc7cf7David Lawrence }
460b427411b72da26b1836b9424e2e70d65d9394David Lawrence }
12e63bfe1d111ccb57f482b28d56c785cccc7cf7David Lawrence
c32b87bc54abacf95fb3b063d72b7d1855c1643bMichael Graff return strs;
7f9f8c13c5e5e26e0ba2b82c0900d11ecf6269ceMark Andrews },
460b427411b72da26b1836b9424e2e70d65d9394David Lawrence
c3e6fbe4b7471d843d015e3f1737b7edb9d0c547Mark Andrews /**
c3e6fbe4b7471d843d015e3f1737b7edb9d0c547Mark Andrews * Gets the string for a particular key, for a particular locale, performing locale lookup.
12e63bfe1d111ccb57f482b28d56c785cccc7cf7David Lawrence * <p>
12e63bfe1d111ccb57f482b28d56c785cccc7cf7David Lawrence * If no values if defined for the key, for the given locale, the value for the
12e63bfe1d111ccb57f482b28d56c785cccc7cf7David Lawrence * default locale (in initial locale set for the class) is returned.
460b427411b72da26b1836b9424e2e70d65d9394David Lawrence * </p>
a04588e781b513ae3b30e061ac98035802b5e8e8Mark Andrews * @method getString
5e47b4200ed81b8e18e165fe3a626d9992003db4Mark Andrews * @param {String} key The key.
5e47b4200ed81b8e18e165fe3a626d9992003db4Mark Andrews * @param {String} locale (optional) The locale for which the string value is required. Defaults to the current locale, if not provided.
5e47b4200ed81b8e18e165fe3a626d9992003db4Mark Andrews */
5e47b4200ed81b8e18e165fe3a626d9992003db4Mark Andrews getString : function(key, locale) {
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley
2320f230995995595438a9d9301d84931fd266ceMark Andrews locale = (locale || this.get(LOCALE)).toLowerCase();
c427260a8678f2e99a2337fb95ec98d9c9ee8c05Mark Andrews
620a452ebe92fff63e85c5930a6e6dc8d9455918Mark Andrews Y.log("getString: For " + locale, "info", "widget");
620a452ebe92fff63e85c5930a6e6dc8d9455918Mark Andrews
6dcb47e37f9f0cdb94bdabc3fa157ff07983c590Mark Andrews var defLocale = (this.getDefaultLocale()).toLowerCase(),
6dcb47e37f9f0cdb94bdabc3fa157ff07983c590Mark Andrews strs = this._getStrings(defLocale) || {},
43b3337ba58d70ca34f4d91e8c6c5e13a54af690Mark Andrews str = strs[key],
43b3337ba58d70ca34f4d91e8c6c5e13a54af690Mark Andrews idx = locale.lastIndexOf(HYPHEN);
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley // If locale is different than the default, or needs lookup support
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley if (locale !== defLocale || idx != -1) {
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt do {
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt Y.log("getString: Performing lookup for: " + locale, "info", "widget");
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley strs = this._getStrings(locale);
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley if (strs && key in strs) {
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley str = strs[key];
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley break;
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley }
0014d6342b0d50ae37126ac16d5bf821d02ffff7David Lawrence idx = locale.lastIndexOf(HYPHEN);
0014d6342b0d50ae37126ac16d5bf821d02ffff7David Lawrence // Chop of last locale segment
0014d6342b0d50ae37126ac16d5bf821d02ffff7David Lawrence if (idx != -1) {
0014d6342b0d50ae37126ac16d5bf821d02ffff7David Lawrence locale = locale.substring(0, idx);
0014d6342b0d50ae37126ac16d5bf821d02ffff7David Lawrence }
0014d6342b0d50ae37126ac16d5bf821d02ffff7David Lawrence
a9558a6c63d9c6dbb2f3800b39ccb008652fcde3Mark Andrews } while (idx != -1);
a9558a6c63d9c6dbb2f3800b39ccb008652fcde3Mark Andrews }
a9558a6c63d9c6dbb2f3800b39ccb008652fcde3Mark Andrews
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews return str;
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews },
0014d6342b0d50ae37126ac16d5bf821d02ffff7David Lawrence
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt /**
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt * Returns the default locale for the widget (the locale value defined by the
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt * widget class, or provided by the user during construction).
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley *
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley * @method getDefaultLocale
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley * @return {String} The default locale for the widget
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley */
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley getDefaultLocale : function() {
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt return this._state.get(LOCALE, INIT_VALUE);
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley },
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley _strSetter : function(val) {
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt return this._setStrings(val, this.get(LOCALE));
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley },
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley _strGetter : function(val) {
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt return this._getStrings(this.get(LOCALE));
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley }
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt}, true);
af9dbf1ccdd53933aaae9300d13ce0965d39b067Evan Hunt
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley}, '@VERSION@' ,{requires:['widget-base']});
0b72c791466d0807bcf22522b5ddb7da902c2720Bob Halley