?? 入門 17 - struts國際化支援 - javaworld@tw.htm
字號:
?<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0071)http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=612 -->
<HTML><HEAD><TITLE>入門 17 - Struts國際化支援 - JAVAWORLD@TW</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8"><!-- CONFL-BEGIN standardHeader -->
<META http-equiv=Pragma content=no-cache>
<META http-equiv=Expires content=-1>
<SCRIPT language=javascript> var contextPath = '/confluence';</SCRIPT>
<LINK href="入門 17 - Struts國際化支援 - JAVAWORLD@TW.files/main-action.css"
type=text/css rel=stylesheet><LINK href="/confluence/images/icons/favicon.ico"
rel="shortcut icon"><LINK href="/confluence/images/icons/favicon.png"
type=image/png rel=icon>
<SCRIPT src="入門 17 - Struts國際化支援 - JAVAWORLD@TW.files/effects.js"></SCRIPT>
<!-- CONF-END standardHeader -->
<META content="MSHTML 6.00.2800.1491" name=GENERATOR></HEAD>
<BODY onload=placeFocus()>
<DIV id=Content>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=logocell width="60%" rowSpan=2>
<DIV class=spacenametitle><A
href="http://www.javaworld.com.tw/confluence/display/opensrc"><IMG
src="入門 17 - Struts國際化支援 - JAVAWORLD@TW.files/confluence_logo.gif"
align=bottom border=0></A> <A
href="http://www.javaworld.com.tw/confluence/display/opensrc">OpenSource
Project</A></DIV></TD>
<TD vAlign=top align=right width="40%">
<TABLE cellSpacing=1 cellPadding=2 align=right bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD class=navItem onmouseover="this.className='navItemOver'"
onclick="window.document.location='/confluence/'"
onmouseout="this.className='navItem'" vAlign=center noWrap
align=middle> <A title="Go to the Confluence Dashboard"
accessKey=h onclick="return false"
href="http://www.javaworld.com.tw/confluence/"><U>H</U>OME</A>
</TD>
<TD class=navItem onmouseover="this.className='navItemOver'"
onclick="window.document.location='/confluence/spaces/listspaces.action'"
onmouseout="this.className='navItem'" vAlign=center noWrap
align=middle> <A title="The spaces available for you"
accessKey=s onclick="return false"
href="http://www.javaworld.com.tw/confluence/spaces/listspaces.action"><U>S</U>PACES</A>
</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD vAlign=bottom align=right><SPAN class=smalltext><A
href="http://www.javaworld.com.tw/confluence/login.action?os_destination=/pages/viewpage.action?pageId=612">Log
In</A> </SPAN><A
href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=612&decorator=printable"><IMG
title="View a printable version of the current page." height=16
alt="View a printable version of the current page." hspace=1
src="入門 17 - Struts國際化支援 - JAVAWORLD@TW.files/print_16.gif" width=16
align=absMiddle vspace=1 border=0></A> <A
href="http://confluence.atlassian.com/display/DOC"><IMG
title="Get help from the Confluence website." height=16
alt="Get help from the Confluence website." hspace=1
src="入門 17 - Struts國際化支援 - JAVAWORLD@TW.files/help_16.gif" width=16
align=absMiddle vspace=1 border=0></A> </TD></TR></TBODY></TABLE><!-- CONF-BEGIN breadcrumbsAndSearch -->
<DIV class=breadcrumbs width="100%">
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD> Location: <A
href="http://www.javaworld.com.tw/confluence/dashboard.action">Dashboard</A>
> <A
href="http://www.javaworld.com.tw/confluence/spaces/viewspacesummary.action?key=opensrc">opensrc</A>
> <A
href="http://www.javaworld.com.tw/confluence/pages/listpages.action?key=opensrc">Pages</A>
> <A
href="http://www.javaworld.com.tw/confluence/display/opensrc/Home">Home</A>
> <A
href="http://www.javaworld.com.tw/confluence/display/opensrc/Struts">Struts</A>
> <A
href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=1958">Struts入門</A>
> <A
href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=612">入門
17 - Struts國際化支援</A> </TD>
<FORM name=searchForm action=/confluence/dosearchsite.action
method=get><INPUT type=hidden value=true name=quickSearch>
<TD vAlign=bottom align=right width=200><A style="TEXT-DECORATION: none"
href="http://www.javaworld.com.tw/confluence/searchsite.action"><U>Q</U>uick
<U>Search</U></A>:<INPUT accessKey=q size=10 name=searchQuery.queryString><INPUT type=submit value=Go><BR><IMG height=1
src="入門 17 - Struts國際化支援 - JAVAWORLD@TW.files/spacer.gif"
width=200></TD></FORM></TR></TBODY></TABLE></DIV><!-- CONF-END breadcrumbsAndSearch -->
<TABLE cellSpacing=0 cellPadding=5 width="100%" border=0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=pagebody vAlign=top>
<DIV class=pageheader><SPAN class=pagetitle>入門 17 -
Struts國際化支援</SPAN> </DIV>
<SCRIPT language=javascript> function toggle(id) { var oldAttachmentVersionsBlock = document.getElementById('attachment' + id); with (oldAttachmentVersionsBlock.style) { if ( display == "none" ) display = "" else display = "none" } var arrowIcon = document.getElementById('arrow' + id); with (arrowIcon) { if (src != null && (src.indexOf('/confluence/images/icons/arrow_closed_active_16.gif') != -1 || src.indexOf('/confluence/images/icons/arrow_closing_active_16.gif') != -1)) { src = '/confluence/images/icons/arrow_opening_active_16.gif'; } else { src = '/confluence/images/icons/arrow_closing_active_16.gif'; } } } </SCRIPT>
<DIV class=pagesubheading>Last changed on Oct 27, 2004 by <A
href="http://www.javaworld.com.tw/confluence/display/~koji">koji
lin</A>
</DIV><!-- page content --> Struts從一開始就支援國際化(internationallization,
i18n),我們可以使用訊息資源檔案來管理國際化的訊息,就如之前所提過的,您在struts-config.xml中設定訊息資源檔的名稱與位置:
<DIV class=code
style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
<DIV class=codeHeader
style="BORDER-BOTTOM-STYLE: solid"><B>struts-config.xml</B></DIV>
<DIV class=codeContent><PRE><message-resources parameter=<SPAN class=java-quote>"resources.application"</SPAN>/></PRE></DIV></DIV><BR> 這樣的設定表示您將使用WEB-INF/resources目錄下以application開頭,副檔名為properties的訊息資源檔,在檔案名稱命名上您可以用語言與國別訊息來表明國際化時要使用的檔案,例如application_zh_TW.properties、application_zh_CN.properties、application_zh_HK.properties,儲存特定的字元之後,記得使用native2ascii工具程式進行轉換,轉換方法參考這邊:
<BR><SPAN class=nobr><A title="Visit page outside Confluence"
href="http://www.caterpillar.onlyfun.net/phpBB2/viewtopic.php?t=1244">http://www.caterpillar.onlyfun.net/phpBB2/viewtopic.php?t=1244<SUP><IMG
class=rendericon height=7 alt=""
src="入門 17 - Struts國際化支援 - JAVAWORLD@TW.files/linkext7.gif" width=7
align=absMiddle
border=0></SUP></A></SPAN><BR> Struts預設會以所在伺服器的locale設定來決定要傳回哪一個訊息資源檔的內容給客戶端,如果客戶端是瀏覽器,則會根據所傳送的Header
Accept-Language來選擇傳回的資源檔訊息,如果瀏覽器指定的Accept-Language沒有對應的資源檔案,且也沒有與伺服器的locale對應的資源檔案,則使用沒有任何的語言與國別訊息的訊息資源檔案名稱,也就是application.properties。
<BR> 您可以提供application_zh_TW.properties、application_zh_CN.properties、application_zh_HK.properties、application.properties等等的檔案,依賴瀏覽器所提供的Header來選擇適當的國際化訊息,但這並不保險,例如若使用者要看中文,而它的瀏覽器預設語系是英文語系,則這個方法會使得使用者看到英文訊息。
<BR> 要求使用者有能力自行更改瀏覽器的預設語系是不切實際的,並不是每個使用者都知道如何作這個設定,更好的方法是使用Struts的session中的Locale來控制,Struts預設會在每個用戶的session中放入一個Locale,預設是使用者瀏覽器所提供的語言訊息,您可以替換掉session中的這個Locale,方法之一是提供一個Action來進行轉換,例如在網頁上提供一個連結(像是「轉為簡體」,link至/ChangeLang.do這樣),按下後可進行以下的動作:
<DIV class=code
style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
<DIV class=codeHeader
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -