76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassYUI.add('widget-locale', function(Y) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Provides string support for widget with BCP 47 language tag lookup. This module has been deprecated. It's replaced by the "intl" module which provides generic internationalization and BCP 47 language tag support with externalization.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @module widget-locale
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @deprecated This module has been deprecated. It's replaced by the "intl" module which provides generic internationalization and BCP 47 language tag support with externalization.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassvar TRUE = true,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass LOCALE = "locale",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass INIT_VALUE = "initValue",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass HYPHEN = "-",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass EMPTY_STR = "",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Widget = Y.Widget;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute locale
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @deprecated Use Y.config.lang and Y.Intl externalization support
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * The default locale for the widget. NOTE: Using get/set on the "strings" attribute will
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * return/set strings for this locale.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @default "en"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassWidget.ATTRS[LOCALE] = {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: "en"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass};
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass// Since strings support with locale needs the private _strs setup
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassWidget.ATTRS.strings.lazyAdd = false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassY.mix(Widget.prototype, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Sets strings for a particular locale, merging with any existing
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * strings which may already be defined for the locale.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _setStrings
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Object} strings The hash of string key/values to set
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Object} locale The locale for the string values being set
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _setStrings : function(strings, locale) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var strs = this._strs;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass locale = locale.toLowerCase();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!strs[locale]) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass strs[locale] = {};
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.aggregate(strs[locale], strings, TRUE);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return strs[locale];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Returns the strings key/value hash for a paricular locale, without locale lookup applied.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _getStrings
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Object} locale
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _getStrings : function(locale) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this._strs[locale.toLowerCase()];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Gets the entire strings hash for a particular locale, performing locale lookup.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <p>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * If no values of the key are defined for a particular locale the value for the
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * default locale (in initial locale set for the class) is returned.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * </p>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method getStrings
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {String} locale (optional) The locale for which the string value is required. Defaults to the current locale, if not provided.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // TODO: Optimize/Cache. Clear cache on _setStrings call.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass getStrings : function(locale) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass locale = (locale || this.get(LOCALE)).toLowerCase();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.log("getStrings: For " + locale, "info", "widget");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var defLocale = this.getDefaultLocale().toLowerCase(),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass defStrs = this._getStrings(defLocale),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass strs = (defStrs) ? Y.merge(defStrs) : {},
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass localeSegments = locale.split(HYPHEN),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass localeStrs,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass i, l,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass lookup;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // If locale is different than the default, or needs lookup support
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (locale !== defLocale || localeSegments.length > 1) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass lookup = EMPTY_STR;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass for (i = 0, l = localeSegments.length; i < l; ++i) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass lookup += localeSegments[i];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.log("getStrings: Merging in strings from: " + lookup, "info", "widget");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass localeStrs = this._getStrings(lookup);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (localeStrs) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.aggregate(strs, localeStrs, TRUE);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass lookup += HYPHEN;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return strs;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Gets the string for a particular key, for a particular locale, performing locale lookup.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <p>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * If no values if defined for the key, for the given locale, the value for the
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * default locale (in initial locale set for the class) is returned.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * </p>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method getString
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {String} key The key.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {String} locale (optional) The locale for which the string value is required. Defaults to the current locale, if not provided.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass getString : function(key, locale) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass locale = (locale || this.get(LOCALE)).toLowerCase();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.log("getString: For " + locale, "info", "widget");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var defLocale = (this.getDefaultLocale()).toLowerCase(),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass strs = this._getStrings(defLocale) || {},
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass str = strs[key],
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass idx = locale.lastIndexOf(HYPHEN);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // If locale is different than the default, or needs lookup support
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (locale !== defLocale || idx != -1) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass do {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.log("getString: Performing lookup for: " + locale, "info", "widget");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass strs = this._getStrings(locale);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (strs && key in strs) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass str = strs[key];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass break;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass idx = locale.lastIndexOf(HYPHEN);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Chop of last locale segment
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (idx != -1) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass locale = locale.substring(0, idx);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } while (idx != -1);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return str;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Returns the default locale for the widget (the locale value defined by the
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * widget class, or provided by the user during construction).
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method getDefaultLocale
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {String} The default locale for the widget
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass getDefaultLocale : function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this._state.get(LOCALE, INIT_VALUE);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _strSetter : function(val) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this._setStrings(val, this.get(LOCALE));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _strGetter : function(val) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this._getStrings(this.get(LOCALE));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}, true);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}, '@VERSION@' ,{requires:['widget-base']});