文档章节

项目扩展koala i18n组件

小咔蹭
 小咔蹭
发布于 2014/06/21 21:21
字数 420
阅读 536
收藏 3
点赞 0
评论 0

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



© 著作权归作者所有

共有 人打赏支持
小咔蹭

小咔蹭

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

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

mcy247 ⋅ 2017/12/05 ⋅ 0

纯 Swift 实现的 Material UITextInput (附 GitHub 源码)

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

jeantimex ⋅ 2016/04/23 ⋅ 0

iOS码农聊天室--zychat

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

ZYVincent ⋅ 2016/01/04 ⋅ 1

快速产生项目 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 ⋅ 3

wyuxiao729/osmp

#osmp Osgi Service Management Platform 交流QQ群:335898216 osgi实战项目(osmp)一步一步玩转osgi同步博客地址: 博客:http://wyuxiao729.iteye.com/ 基于osgi实战项目osmp视频教程: ht...

wyuxiao729 ⋅ 2016/09/04 ⋅ 0

基于 OSGi 规范的 C# 基础框架--OSGi.NET

这是实现的一套基于OSGi规范的C#基础框架-OSGi.NET,并且用Go语言初步实现了插件的管理平台-插件仓库。在几个中小型项目中有所应用(Winform、WPF),主要可以解决多人协作的开发规范与插件的...

FreezeSoul ⋅ 2016/11/26 ⋅ 1

DWZ富客户端框架设计思路

DWZ富客户端框架设计目标是简单实用扩展方便, 让开发人员不写javascript的情况下, 也能用ajax做项目和使用各种UI组件. DWZ框架支持用html扩展的方式来代替javascript代码, 只要董html语法, 再...

张慧华 ⋅ 2010/04/27 ⋅ 0

HTML5拓扑图编辑器项目 - Graph.Editor

拓扑图编辑器介绍 项目地址:https://github.com/samsha/graph.editor 在线演示:http://demo.qunee.com/editor/ Graph.Editor是一款基于HTML5技术的拓补图编辑器,采用jquery插件的形式,是...

nosand ⋅ 2015/01/17 ⋅ 0

心云间、凝听/EacooPHP

EacooPHP v1.1.0-Dev 介绍 EacooPHP是基于ThinkPHP5.0.11开发的一套轻量级WEB产品开发框架,追求高效,简单,灵活。 具有完善并灵活的模块化和插件机制,模块式开发,大大降低开发成本。 支持...

心云间、凝听 ⋅ 2017/09/26 ⋅ 0

OSGi 服务管理平台--osmp

osgi 服务管理平台,通过 servicemix 可以灵活,快速,方便的开发和部署服务,支持通过 zk 实现分布式服务调度! 基于OSGI、SERVICEMIX开发 组件化的开发方式,封装了大量的基础组件,可以直...

天涯浪子007 ⋅ 2016/08/26 ⋅ 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

iExec Blockchain Marketplace for Cloud

iExec Releases the First-Ever Blockchain Marketplace for Trading Cloud Computing Berlin, Germany, May 29, 2018. iExec has released its blockchain-based decentralized cloud marke......

openthings ⋅ 31分钟前 ⋅ 0

OSChina 周二乱弹 —— 加班的代码不要枉费了我的童子功

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《29》- 未完成乐队 《29》- 未完成乐队 手机党少年们想听歌,请使劲儿戳(这里) @FalconChen :#看球提醒# 02:00 巴西v...

小小编辑 ⋅ 51分钟前 ⋅ 15

Docker Swarm的前世今生

概述 在我的《Docker Swarm集群初探》一文中,我们实际体验了Docker Swarm容器集群技术的魅力,与《Kubernetes实践录》一文中提到的Kubernetes集群技术相比,Docker Swarm没有Kubernetes显得...

CodeSheep ⋅ 今天 ⋅ 0

骰子游戏代码开源地址

因为阿里云现在服务器已经停用了,所以上面的配置已经失效。 服务端开源地址:https://gitee.com/goalya/chat4.git 客户端开源地址:https://gitee.com/goalya/client4.git 具体运行界面请参考...

算法之名 ⋅ 今天 ⋅ 0

设计模式--装饰者模式

装饰者模式 定义 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 通用类图 意图 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比...

gaob2001 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部