2011-05-28 72 views

回答

0

除了根据您的链接本地化Ext的内置字符串,我们还有一个全局函数,它返回一个本地化的字符串,并随处调用我们想要显示的字符串。我们还将用户当前选择的语言存储在变量和cookie中。

我从我们的经验中建议您可能希望将本地化的字符串存储在服务器上的数据库中,并在加载时通​​过Ajax调用将其关闭。这使您可以管理这些字符串,而无需部署代码更改。

当用户更改语言时,我们设置语言cookie并重新加载整个浏览器窗口。

// global shortcut function for retrieving a localized string 
function i18n(key, arrInsertValues) { 
    return Local.getLocalizedString(key, Local.languageCode, arrInsertValues); 
} 

// "Local" is a simple "static" object containing methods and localization strings 
Local = { 

    // Default locale code - set based on cookie at the bottom of this script 
    languageCode: 'en', 
    languageCodeDefault: 'en', 
    charset: 'utf-8', 

    languages: [ 
     ['en', 'English', 'utf-8'], 
     ['ja', '日本語', 'utf-8'] 
    ], 

    getLocalizedString: function(key, languageCode, arrInsertValues) { 
     if (!this.localizedStrings[key]) { 
      // return empty string if key is undefined 
      return ''; 
     } 
     if (!this.localizedStrings[key][languageCode]) { 
      // return default language string or empty string if the string for the specified language is undefined 
      return this.formatString(this.localizedStrings[key][this.lcDefault] || '', arrInsertValues); 
     } 
     // give 'em what they asked for 
     return (this.formatString(this.localizedStrings[key][languageCode], arrInsertValues)); 
    }, 


    // returns a localized string formatted to replace values {0},{1} etc with values from the passed array 
    formatString: function(string, arrInsertValues) { 
     var formattedString = string; 
     if (arrInsertValues && arrInsertValues.constructor.toString().indexOf("Array") != -1) { 
      for (var i = 0; i < arrInsertValues.length; i++) { 
       formattedString = formattedString.replace('{' + i + '}', arrInsertValues[i]); 
      } 
     } 
     return formattedString; 
    }, 

    localizedStrings: { 
     tEN: { en: 'Eng', ja: '英語' }, 
     tJPN: { en: 'Jpn', ja: '日本語' },    
     tYes: { en: 'Yes', ja: 'はい' }, 
     tNo: { en: 'No', ja: 'いいえ' },  
     tAnd: { en: 'and', ja: 'と' }, 
     tOr: { en: 'or', ja: 'or' },  
     tDateFormat : { en: 'Y\/m\/d - g\:iA', ja: 'G\:i - Y年m月d日' },  
     tGoodMorning: { en: 'Good morning, {0}.', ja: '{0}様、おはようございます。' } 
    } 
} 

// this is the first script to run, so we can set default language here based on cookie 
var cookie = new Ext.state.CookieProvider(); 
Local.languageCode = cookie.get('languageCode') ? cookie.get('languageCode') : Local.languageCodeDefault;