- 浏览: 234692 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
annyliyear:
找到的ExtJS实现多选下拉框3个代码 -
yinboxian:
源码太乱了
JXTA中使用JxtaServerPipe和JxtaBiDiPipe实现双向可靠的通信 -
yinboxian:
我的peers第一次执行时可以得到正确的结果,以后就不行了。不 ...
JXTA中基于管道监听方式通信 -
cuizhenfu#gmail.com:
http://www.cnblogs.com/cuizhf
JXTA中使用JxtaServerPipe和JxtaBiDiPipe实现双向可靠的通信 -
luxing44530:
请问, jsp页面如果在 META-INF 中, 改怎么访问? ...
Servlet3.0 新特性之模块化实践
引言
如果你是英语的用户就不必做任何本地化的工作了,这篇教程是为非英语用户所准备的,好像一般的用户,开发主管,业务员等,他们的外语可能稍逊,这样就需要你对如何本地化ext的整个流程了解一番了。
慢慢开始
如果你曾浏览Ext 2.x目录的树状结构,你就会发现source/locale的目录(或SVN目录的src/locale)。此目录包含了Ext本地化类。先不长篇大论地讲太多概念的东西,我们应了解如何先使用。
下面的一个例子就是使用了本地化的ext,但是不是在ext同一个目录下的。因此通常的,你需要调整head标签内的路径,以正确指向Ext的安装目录。尤其注意本地化的那个目录路径。
把你服务器的路径Copy and paste到相应文件路径中:
注意: 下里的代码我是动态加载到head头部的,只能在FireFox通过。不过实际情况你不必如此,你只要在服务端指定script的路径而不必动态加载。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link rel="stylesheet" type="text/css" href="../ext/resources/css/ext-all.css"> <script type="text/javascript" src="../ext/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="../ext/ext-all-debug.js"></script> <script type="text/javascript"> //根据url上指定的语言进行解码 var locale = window.location.search ? Ext.urlDecode(window.location.search.substring(1)).locale : ''; // 将本地化的JS文件加入head元素内 var head = Ext.fly(document.getElementsByTagName('head')[0]); if(locale) { Ext.DomHelper.append(head, { tag:'script' ,type:'text/javascript' ,src:'../ext/src/locale/ext-lang-' + locale + '.js' }); } //预先定义的window继承类 Ext.ns('Tutorial'); Tutorial.LocalizationWin = Ext.extend(Ext.Window, { initComponent:function() { Ext.apply(this, { width:500 ,id:'winid' ,height:300 ,layout:'fit' ,border:false ,closable:false ,title:Ext.get('title').dom.innerHTML ,items:[{ xtype:'form' ,frame:true ,defaultType:'textfield' ,items:[{ xtype:'combo' ,fieldLabel:'Select Language' ,name:'locale' ,store:new Ext.data.SimpleStore({ id:0 ,fields:['file', 'locale'] ,data:[ ['cs', 'Czech'] ,['', 'English'] ,['fr', 'French'] ,['de', 'German'] ,['gr', 'Greece'] ,['hu', 'Hungarian'] ,['it', 'Italian'] ,['ja', 'Japanese'] ,['pl', 'Polish'] ,['pt', 'Portugal'] ,['ru', 'Russian'] ,['sk', 'Slovak'] ,['es', 'Spanish'] ,['sv_SE', 'Swedish'] ,['tr', 'Turkish'] ] }) ,listeners:{ select:{fn:function(combo){ window.location.search = '?' + Ext.urlEncode({locale:combo.getValue()}) ; }} } ,mode:'local' ,editable:false ,forceSelection:true ,valueField:'file' ,displayField:'locale' ,triggerAction:'all' ,value:locale },{ fieldLabel:'Text Field' ,allowBlank:false },{ xtype:'datefield' ,fieldLabel:'Date Field' ,allowBlank:false }] }] }); // eo apply Tutorial.LocalizationWin.superclass.initComponent.apply(this, arguments); } // eo function initComponent }); // eo Tutorial.LocalizationWin Ext.BLANK_IMAGE_URL = '../ext/resources/images/default/s.gif'; Ext.onReady(function() { Ext.QuickTips.init(); Ext.form.Field.prototype.msgTarget = 'side'; // create example window var win = new Tutorial.LocalizationWin(); win.show(); }); </script> <title id="title">Localization Example</title> </head> <body> </body> </html>
现在完整的本地化工作是限于ComboBox、TextField和DateField这些Ext基础组件。试试在已翻译好的DataPicker组件中输入一些文字。
原理是??
原理是一改变cobmo box里面的"Select Language"就会包含(include)相应的Ext本地化文件(这里我使用了一些技巧性的做法,改变本地化文件的过程是用过客户端脚本完成的)
本地化文件的葫芦里卖的什么药?
首先要打开本地化文件来看看,读懂里面的源码后不但对Ext的理解有帮助而且对整个程序的本地化,也是有帮助的。我们以法语版的DatePicker为例子:
if(Ext.DatePicker){ Ext.override(Ext.DatePicker, { todayText : "Aujourd'hui", minText : "Cette date est antérieure à la date minimum", maxText : "Cette date est postérieure à la date maximum", disabledDaysText : "", disabledDatesText : "", monthNames : Date.monthNames, dayNames : Date.dayNames, nextText : 'Mois suivant (CTRL+Flèche droite)', prevText : "Mois précédent (CTRL+Flèche gauche)", monthYearText : "Choisissez un mois (CTRL+Flèche haut ou bas pour changer d'année.)", todayTip : "{0} (Barre d'espace)", okText : " OK ", cancelText : "Annuler", format : "d/m/y", startDay : 1 }); }
通过观察,我们得知如果DataPicker对象存在(这是需要检测的,事因有些ext是你自己可制定的)就重写DataPicker的部分属性;更严格说,我们是把法语的文字替换掉英语的文字而已。Ext.override的作用是在DatePicker建立实例之前改变class的原型。
应用程序的本地化
我们对范例文件略加修改,把所有的静态文本变为类成员,修改过后看起来是这样的:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link rel="stylesheet" type="text/css" href="../ext/resources/css/ext-all.css"> <script type="text/javascript" src="../ext/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="../ext/ext-all-debug.js"></script> <!-- Ext localization javascript --> <script type="text/javascript" id="extlocale"></script> <!-- Locale and example extension javascript --> <script type="text/javascript"> // decode language passed in url var locale = window.location.search ? Ext.urlDecode(window.location.search.substring(1)).locale : '' ; // append locale script to the head var head = Ext.fly(document.getElementsByTagName('head')[0]); if(locale) { Ext.fly('extlocale').set({src:'../ext/src/locale/ext-lang-' + locale + '.js'}); } // create pre-configured example window extension class Ext.ns('Tutorial'); Tutorial.LocalizationWin = Ext.extend(Ext.Window, { titleText:'Localization Example' ,selectLangText:'Select Language' ,textFieldText:'Text Field' ,dateFieldText:'Date Field' ,initComponent:function() { Ext.apply(this, { width:500 ,id:'winid' ,height:300 ,layout:'fit' ,border:false ,closable:false ,title:this.titleText ,items:[{ xtype:'form' ,frame:true ,defaultType:'textfield' ,items:[{ xtype:'combo' ,fieldLabel:this.selectLangText ,name:'locale' ,store:new Ext.data.SimpleStore({ id:0 ,fields:['file', 'locale'] ,data:[ ['cs', 'Czech'] ,['', 'English'] ,['fr', 'French'] ,['de', 'German'] ,['gr', 'Greece'] ,['hu', 'Hungarian'] ,['it', 'Italian'] ,['ja', 'Japanese'] ,['pl', 'Polish'] ,['pt', 'Portugal'] ,['ru', 'Russian'] ,['sk', 'Slovak'] ,['es', 'Spanish'] ,['sv_SE', 'Swedish'] ,['tr', 'Turkish'] ] }) ,listeners:{ select:{fn:function(combo){ window.location.search = '?' + Ext.urlEncode({locale:combo.getValue()}) ; }} } ,mode:'local' ,editable:false ,forceSelection:true ,valueField:'file' ,displayField:'locale' ,triggerAction:'all' ,value:locale },{ fieldLabel:this.textFieldText ,allowBlank:false },{ xtype:'datefield' ,fieldLabel:this.dateFieldText ,allowBlank:false }] }] }); // eo apply Tutorial.LocalizationWin.superclass.initComponent.apply(this, arguments); } // eo function initComponent }); // eo Tutorial.LocalizationWin </script> <!-- Application localization javascript --> <script type="text/javascript" id="applocale"></script> <!-- Set src for application localization javascript --> <script> if(locale) { Ext.fly('applocale').set({src:'app-lang-' + locale + '.js'}); } </script> <!-- Main application --> <script type="text/javascript"> Ext.BLANK_IMAGE_URL = '../ext/resources/images/default/s.gif'; Ext.onReady(function() { Ext.QuickTips.init(); Ext.form.Field.prototype.msgTarget = 'side'; // create example window var win = new Tutorial.LocalizationWin(); win.show(); }); </script> <title id="title">Localization Example</title> </head> <body> </body> </html>
最后一步,我们需要为特定的语种创建程序本地化的文件(翻译,语种)。这里是app-lang-sk.js文件因为我操的是斯洛伐克语的缘故。你可因应你需求的语种去设置(保存html的格式放到同一目录下或修改上面代码的目录):
/** * 斯洛伐克语版的教程之本地化文件 */ if(Tutorial.LocalizationWin) { Ext.override(Tutorial.LocalizationWin, { titleText:'Príklad lokalizácie' ,selectLangText:'Zvoľ jazyk' ,textFieldText:'Textové pole' ,dateFieldText:'Dátumové pole' }); }
高级提示
请明确,要做Ext程序的本地化需要遵循哪些的原则。关键点在于将所有翻译文本作为公共类的成员出现,重写原先类的prototype的属性
高级开发这也许会体会到这些本地化文件在使用,维护和部署中的不便。尤其是在他们已经采用了诸如GNU gettext这样的翻译架构的时候。对于这些用户,我的建议是通过从服务器动态生成本地化文件,并使用gettext作为后端的生成器。
这种做法最大的好处是可将翻译文件集中在一块(*.po),客户端和服务端都可以使用。
如果本地化这主题反映还不错的话而读者又非常想进一步了解我会写进阶的Ext本地化。
发表评论
-
自定义ListView背景
2012-10-23 09:06 0在Android中,ListView是最常用的一个控件,在做U ... -
TabPanel 加载多个 SWF 需要注意的问题。
2012-02-24 10:11 1329第1个问题,切换TabPanel的时候,有些Tab加载不到SW ... -
ExtJs中2个常用的高级事件功能:委托(Delegation),缓冲(Buffer)
2012-02-24 09:47 1359委托delegation 减低内存销毁和防止内存泄露的隐患是 ... -
ExtJs实现SearchGrid查询表格
2011-08-22 02:19 3473实现在表格头部下文可以有对应的查询框,如附件图。代码如下: ... -
ExtJs监听FormPanel的数据的更新情况
2011-08-21 18:17 3042最近项目提出一个新的需求: FormPanel面板当前 ... -
ExtJs中的CheckboxSelectionModel功能的完善
2011-08-17 23:44 5995所谓说要完善CheckboxSelectionModel功能, ... -
ExtJs实现刷新Grid单个单元格
2011-08-17 01:10 4766产生问题背景: ExtJS3.2版本 页面上存在定时刷新表 ... -
使用ExtJs开发项目总结
2011-08-09 00:38 17961、少用IFrame,或者不要 ... -
ExtJs TabPanel右键功能插件
2011-08-09 00:17 1941下面是ExtJs TabPanel右键功能插件,可以全部 ... -
ExtJs自定义带Form功能的Window
2011-08-08 23:58 3592之前在项目遇到一个问题就是使用很多的Window进行新增 ... -
Ext与RESTful Web Services(转载)
2011-04-19 23:29 1800REST与RESTful Web Services 表述性 ... -
教你创建Ext UI控件(转载)
2011-04-19 23:26 1394使用ExtJs创建新的UI控件 此文档介绍了怎么在ExtJS ... -
扩展Ext中的组件(转载)
2011-04-19 23:22 893引言 起初,Ext.extend()干的不错,它使你能够建 ... -
如何合理规划一个Ext应用程序(转载)
2011-04-19 23:19 1112事前准备 本教程假设你已经安装好ExtJS库。安装的目录是e ... -
扩展Ext的新手教程(转载)
2011-04-19 23:12 1064一般你会希望使用类(class)来诠释面何对象的思想。本教程的 ... -
使用ExtJs如何框架一个大型网站?
2011-04-03 21:42 1600使用ExtJs开发项目问题: 1、如何管理大量的Js文件。 ... -
ddddddd
2011-01-16 15:24 0dddddd -
Ext.tree.panel中如何每次点击展开都从后台加载
2010-12-18 00:54 3710昨天为了项目需要在做异步加载树时,碰到一个每次点击节点都重新, ...
相关推荐
《4.0Ext 本地化:打造符合用户文化的交互体验》 在当今全球化的时代,软件应用不仅要功能强大,还要能够适应不同地区的语言和文化习惯。4.0Ext 提供了强大的本地化功能,帮助开发者为用户提供更加贴心的界面体验。...
"EXT中文教程"对英文文档进行了翻译和本地化,对于中文使用者来说,这是一份非常有价值的参考资料。它可以帮助你更好地理解和运用EXT的各类功能,解决在实际开发中遇到的问题。中文教程通常会提供实例代码和详尽的...
ext使用简明教程 ext中文手册 ext中文教程 extJs学习
新版ext教程.pdf新版ext教程.pdf新版ext教程.pdf新版ext教程.pdf新版ext教程.pdf新版ext教程.pdf新版ext教程.pdf新版ext教程.pdf新版ext教程.pdf新版ext教程.pdf
Ext教程 整合官方中文教程的电子书,对Ext初学以及提高有很大帮助
EXT教程示例代码,供EXT新手学习的好资料。
Ext入门-详细教程Ext入门-详细教程Ext入门-详细教程Ext入门-详细教程Ext入门-详细教程Ext入门-详细教程Ext入门-详细教程Ext入门-详细教程Ext入门-详细教程Ext入门-详细教程Ext入门-详细教程Ext入门-详细教程Ext入门-...
7. **EXT 教程.rar、EXT 中文帮助手册 .rar、ext_教程(入门到精通).rar、EXT 教程.rar**:这些都是压缩文件,包含了更详细的教程和帮助文档,可能包含视频教程、源代码示例等,需要解压后进行学习。 通过这些资源,...
例如,Ext的`Ext.onReady`函数用于确保DOM加载完成后再执行代码,这是初始化Ext组件的常见方法。以下是一个简单的例子,展示如何使用MessageBox组件弹出一个警告对话框: ```html Ext.onReady(function() { Ext....
如何本地化ext的教程 xtype的含义 扩展Ext中的组件 扩展与插件之间的区别 扩展Ext的新手教程 Ext的类继承 从源码生成Ext 基础用法: DomQuery基础 Ext中的事件 简述模板 模板(Templates)的函数 教你创建Ext UI...
Ext 教程打包下载
ext中文教程 ext API ext中文教程 ext API
"ext中文API"则是EXT的官方文档在中国化的版本,它详尽地介绍了EXT框架的每一个类、方法、属性和事件。API文档是开发者查阅EXT功能、解决技术问题的重要参考。通过中文API,开发者可以快速查找特定控件或函数的用法...
- **国际化和本地化**:EXTJS支持多语言应用,了解如何实现应用的国际化和本地化。 通过EXT-2.3.0的PDF教程,开发者可以系统学习EXTJS的基础知识和实践技巧,逐步提升EXTJS开发能力。在实践中不断探索和掌握EXTJS,...
Ext API和Ext教程是Web开发领域中的重要学习资源,尤其对于使用Sencha Ext JS框架的开发者来说更是必不可少。本文将详细介绍这两个主题,并结合提供的压缩包文件内容进行解析。 首先,Ext API,全称为Ext ...
### ext教程知识点详解 #### 一、概述 **ext** 是一个非常强大的 JavaScript 类库,最初它是基于 Yahoo UI 库开发的,但现在已经完全独立。它提供了丰富的组件和功能,适用于构建复杂的 Web 应用程序。 #### 二、...
EXT的核心特性之一是它的组件化架构。EXT提供了一系列预定义的UI组件,如表格、面板、菜单、按钮、窗口等,这些组件可组合、扩展,以构建复杂的用户界面。EXT的另一个亮点是其强大的数据绑定机制,能够方便地与...
- **国际化与本地化**: 提供了关于如何使应用程序支持多种语言和文化特性的指导。 - **性能优化**: 包括了缓存策略、异步加载和资源压缩等,帮助开发者构建高性能的Web应用。 ### 实例详解 《EXT中文教程(实例版)...
Ext4.07中文教程 Extjs4 API Extjs4 学习指南 1 1 Extjs初步 2 1.1 获取Extjs 2 1.2 搭建学习环境: 2 1.3 测试例子 4 2 Extjs4布局详解 7 3 Extjs4文档阅读 16 4 示例 55 5 员工管理系统 ...
【GWT EXT 教程全集】是一份综合性的教程资源集合,主要涵盖了GWT(Google Web Toolkit)和EXT-GWT这两个技术领域的知识。GWT是Google推出的一个用于开发富互联网应用程序(RIA)的开放源代码框架,它允许开发者使用...