文档章节

项目扩展koala i18n组件

小咔蹭
 小咔蹭
发布于 2014/06/21 21:21
字数 420
阅读 548
收藏 3

i18n组件中I18nTag类默认是通过request.getLocale().toString()来获取浏览器语言,实现用户自由切换语言需改动如下:

  • 界面提供可切换的语言选择
  • 把要切换的语言存入session
  • 标签解析先从session获取语言


提供语言选择

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.openkoala.org/i18n" prefix="koala" %>
<!DOCTYPE html>
<html>
<head>
<title>I18N</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="/lib/jquery-1.8.3.min.js" type="text/javascript"></script>
</head>
<body>

<select id="langSelect">
					<option value="zh_CN">请选择</option>
					<option value="zh_CN">中文</option>
					<option value="en_US">English</option>
				</select> 

I18N:<koala:i18n key="test" />

<script type="text/javascript">
	$(function(){
		$("#langSelect").change(function ()
                        { 
                            if (this.value)
                            {
                                $.post('${pageContext.request.contextPath}/international/switchLanguage.koala?locale=' + this.value).done(function(data){
                                	if(data.result == 'success'){
                                		window.location.reload();
                        			}else{
                        				alert("fail");
                        			}
                        		});
                            } else
                            {
                            }
                        });
		
	});

</script>

</body>
</html>


选中语言存入Session

创建I18NController类

package com.xiaokaceng.demo.web.controller;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/international")
public class I18NController {

	@ResponseBody
	@RequestMapping("/switchLanguage")
	public Map<String, Object> switchLanguage(String locale, HttpSession session) {
		if (locale == null || locale.isEmpty()) {
			session.setAttribute("locale", "zh_CN");
		} else {
			session.setAttribute("locale", locale);
		}
		Map<String, Object> result = new HashMap<String, Object>();
		result.put("result", "success");
		return result;
	}
}


扩展I18nTag类

package com.xiaokaceng.demo.web.tag;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;

import org.openkoala.framework.i18n.I18NManager;

public class I18nTag extends SimpleTagSupport {

	private String key;
	private String locale;

	public void setKey(String key) {
		this.key = key;
	}

	public void setLocale(String locale) {
		this.locale = locale;
	}

	public void doTag() throws JspException, IOException {
		String message = null;

		HttpServletRequest request = (HttpServletRequest) ((PageContext) getJspContext()).getRequest();

		try {
			if (this.locale == null) {
				this.locale = (String) request.getSession().getAttribute("locale");
			}
			if (this.locale == null) {
				message = I18NManager.getMessage(this.key, request.getLocale().toString());
			} else {
				message = I18NManager.getMessage(this.key, this.locale);
			}
		} catch (Exception e) {
			message = this.key;
			e.printStackTrace();
		}

		getJspContext().getOut().write(message);
	}
}
配置i18n.tld元素<tag-class>com.xiaokaceng.demo.web.tag.I18nTag</tag-class>


效果


DEMO代码下载

http://pan.baidu.com/s/1jGn51wM



© 著作权归作者所有

共有 人打赏支持
小咔蹭

小咔蹭

粉丝 44
博文 32
码字总数 17138
作品 0
广州
程序员
私信 提问
LindAgile~大叔新宠~一个无所不能框架

关于她 LindAgile是大叔在这两年里的新宠儿,它主推模块化,插件化,敏捷化,主要于LindAgile基础项目,LindAgile.Http项目,LindAgile.Modules项目和几个扩展模块项目组成,那几个扩展模块主要体现...

mcy247
2017/12/05
0
0
快速产生项目 UI 的前端框架--QMUI Web

QMUI Web 官网:http://qmuiteam.com/web Github: https://github.com/QMUI/qmuiweb QMUI Web 是一个专注 Web UI 开发,帮助开发者快速实现特定的一整套设计的框架。通过 QMUI Web,开发者可...

kayo5994
2016/08/04
18.5K
3
【.NET 深呼吸】在 .net core app 中使用 Composition

.NET 中的 Composition ,即 MEF。MEF 说得简单一点,就是它可以在运行阶段动态地发现类型,用于组件扩展方面特别合适。 .NET Core App 的默认框架并不提供 MEF 有关的 API,但,别忘了 Nuge...

东邪独孤
07/13
0
0
iOS码农聊天室--zychat

ZYChat (一) 是一个实战项目的聊天UI框架,针对高频次高速率刷新最近会话列表和实际对话页面做了缓冲优化,经过测试会话使用的性能和体验非常稳定。 (二) UI框架参考MVVM思想设计,并采用自身...

ZYVincent
2016/01/04
3.2K
1
纯 Swift 实现的 Material UITextInput (附 GitHub 源码)

最近看到Material-UI的风格非常流行,自己在设计这款五子棋游戏Gomoku的时候也采用了它,所以打算把这种风格的UI引入到iOS里。Google了很久也没有找到完全用Swift实现的扩展UITextField的组件...

jeantimex
2016/04/23
484
0

没有更多内容

加载失败,请刷新页面

加载更多

js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
昨天
12
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
昨天
16
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南,原来access_token是直接当作parameter的(写在url之后),scene参数一定要...

两广总督bogang
昨天
20
0
MYSQL索引

索引的作用 索引类似书籍目录,查找数据,先查找目录,定位页码 性能影响 索引能大大减少查询数据时需要扫描的数据量,提高查询速度, 避免排序和使用临时表 将随机I/O变顺序I/O 降低写速度,占用磁...

关元
昨天
11
0
撬动世界的支点——《引爆点》读书笔记2900字优秀范文

撬动世界的支点——《引爆点》读书笔记2900字优秀范文: 作者:挽弓如月。因为加入火种协会的读书活动,最近我连续阅读了两本论述流行的大作,格拉德威尔的《引爆点》和乔纳伯杰的《疯传》。...

原创小博客
昨天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部