没想到啊

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  6 随笔 :: 379 文章 :: 97 评论 :: 24万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

全文转自:http://icekiller110.iteye.com/blog/1018350

1.JS国际化的实现原理: 
   动态加载对应的JS的国际化资源文件(js_locale_en_US.js和js_locale_zh_CN.js)。 
   <script src="/javascripts/locales/js_locale_<%=lang%>.js"></script> 
   其中[<%=lang%>]为动态取得的当前语言环境。 

2.资源文件说明(js_locale_zh_CN.js): 

Java代码  收藏代码
  1. var JSLocale = {  
  2.    hello: "你好"  
  3.    helloParam: "第一个参数{{:first}},第二个参数{{:second}}."  
  4.      
  5.    end: "" // 结束符号,没有意义  
  6. }  


资源文件就是创建了一个全局JSON对象JSLocale。 
在模板页调用资源内容,只需要使用JSLocale.hello("hello"为对应的json对象的键值)即可调用对应的内容。 

3.带有参数的国际化内容的疑问: 
   在有些情况下我们会需要在国际化的内容中带有参数,例如在国际化分页工具栏的时候会有"当前是第n页"的内容,其中的n就是个参数。 
   针对带有参数的国际化内容添加了dynamicLocale.js。 

Java代码  收藏代码
  1. /* 
  2.  * 描述:动态取得本地资源文件内容 
  3.  *  
  4.  * 参数: 
  5.  *   key 对应的资源的key 
  6.  *   params 对应资源中的参数对象(Hash) 
  7.  *    
  8.  * 返回:对应的资源内容 
  9.  *  
  10.  * 用法: 
  11.  *      getLocale("helloParam",{first:value1,second:value2}); 
  12.  */  
  13. function getJSLocale(key,params){  
  14.     var result = "";    // 对应的资源的内容  
  15.     var paramsObj = {}; // 参数对象  
  16.     if(params) paramsObj = params;  
  17.       
  18.     if(typeof(key) != 'undefined' && typeof(JSLocale) != 'undefined'){  
  19.         // 根据key取得对应的资源内容,如果没有找到则返回key值  
  20.         if(JSLocale[key] != undefined){  
  21.             result = JSLocale[key];  
  22.         }else{  
  23.             result = key;  
  24.         }  
  25.           
  26.         // 替换对应参数为value的值  
  27.         var regExp = new RegExp(); //替换资源中参数的正则  
  28.         for(var k in paramsObj){  
  29.             regExp = eval("/{{:" + k + "}}/g");  
  30.             result = result.replace(regExp,paramsObj[k]);  
  31.         }  
  32.           
  33.         // 如果没有找到对应的资源则返回 "No Value"  
  34.         if(/{{:[a-zA-Z]+}}/.test(result)){  
  35.             result = result.replace(/{{:[a-zA-Z]+}}/g, "No Value");  
  36.         }  
  37.     }  
  38.     return result;  
  39. }  


在模板页调用带参数的国际化资源内容,使用getLocale("helloParam",{first:value1,second:value2}); 

注:带参数的调用方式同时支持没有参数的调用,例如可以使用getLocale("hello");取得键值为"hello"的资源内容。 

4.在资源文件中定义参数的方式 
   使用{{:param}} 
   其中param即对应的参数的key值,可以重复使用,没有前后顺序。

posted on   没想到啊  阅读(4495)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示