天天看点

struts2(十二)struts2国际化底层大揭秘

Struts2鐨勫崥瀹㈠湪鍓嶄笉涔呭凡缁忓仠姝簡锛屼絾鏄噷闈㈣繕鏈夊緢澶氬唴瀹规垜浠兘杩樻病鎺ヨЕ鍒帮紝鎵€浠ョ幇鍦ㄦ垜浠湪琛ュ厖涓€涓媠truts2鐨勫唴瀹广€傝繖绡囧崥瀹㈡垜浠富瑕佹槸涓€鍧楁潵鐪嬩竴涓媠truts2鍐呭鍥介檯鍖栫殑鏀寔銆傚湪浜嗚Вstruts2瀵硅祫婧愬浗闄呭寲鏀寔涔嬪墠锛屾垜浠厛鏉ョ湅涓€涓婮DK瀵瑰浗闄呭寲鐨勬敮鎸侊紝鍥犱负濡傛灉浣犵湅涓€涓嬪晩婧愮爜浣犲彲浠ュ彂鐜帮紝鍏跺疄struts2涓浗闄呭寲鐨勬敮鎸佸簳灞備富瑕佸氨鏄JDK涓彁渚涚殑鍥介檯鍖栫殑涓€涓皝瑁呫€?

涓€锛欽DK瀵瑰浗闄呭寲鐨勬敮鎸?

聽聽聽聽聽聽鎵€璋撳浗闄呭寲锛屽氨鏄垜浠啓鐨勫簲鐢ㄧ▼搴忓湪涓嶅悓鐨勫湴鍩熷拰鏀寔涓嶅悓璇█鐨勫満鍚堝彲浠ョ粰鐢ㄦ埛涓€涓敤鎴锋墍鍦ㄥ湴鍩熺殑璇█鏀寔銆備篃灏辨槸璇存垜鍦ㄤ腑鍥戒綘鐨勫簲鐢ㄧ▼搴忓氨缁欐垜涓浗鐨勬彁绀猴紝鎴戝湪缇庡浗浣犲氨缁欐垜鑻辫鐨勬彁绀恒€傚湪鐪嬪叿浣撳簲鐢ㄤ箣鍓嶆垜浠厛鏉ョ啛鎮変竴涓嬪嚑涓狫DK涓彁渚涜祫婧愬浗闄呭寲鐨勭被锛?

1.Local绫?

聽聽聽聽Locale聽瀵硅薄琛ㄧず浜嗙壒瀹氱殑鍦扮悊銆佹斂娌诲拰鏂囧寲鍦板尯銆傞渶瑕伮燣ocale聽鏉ユ墽琛屽叾浠诲姟鐨勬搷浣滅О涓鸿瑷€鐜鏁忔劅鐨勬搷浣滐紝瀹冧娇鐢燣ocale聽涓虹敤鎴烽噺韬畾鍒朵俊鎭€備緥濡傦紝鏄剧ず涓€涓暟鍊煎氨鏄瑷€鐜鏁忔劅鐨勬搷浣滐紝搴旇鏍规嵁鐢ㄦ埛鐨勫浗瀹躲€佸湴鍖烘垨鏂囧寲鐨勯淇?浼犵粺鏉ユ牸寮忓寲璇ユ暟鍊笺€?

浣跨敤姝ょ被涓殑鏋勯€犳柟娉曟潵鍒涘缓聽Locale锛?

[java]聽 view plain copy print ?

  1. Locale(String聽language)鏍规嵁璇█鍒涘缓瀵硅薄聽聽

[java]聽 view plain copy print ?

  1. Locale(String聽language,聽String聽country)鏍规嵁璇█鍜屽浗瀹舵潵鍒涘缓瀵硅薄聽聽

[java]聽 view plain copy print ?

  1. Locale(String聽language,聽String聽country,聽String聽variant)鏍规嵁璇█銆佸浗瀹?鍦板尯鍜屽彉閲忔瀯閫犱竴涓瑷€鐜銆偮犅?

聽 聽 聽 璇█鍙傛暟鏄竴涓湁鏁堢殑聽ISO聽璇█浠g爜銆傝繖浜涗唬鐮佹槸鐢甭營SO-639聽瀹氫箟鐨勫皬鍐欎袱瀛楁瘝浠g爜銆傚湪璁稿缃戠珯涓婇兘鍙互鎵惧埌杩欎簺浠g爜鐨勫畬鏁村垪琛紝濡傦細http://www.loc.gov/standards/iso639-2/englangn.html銆偮燣ocale聽绫绘彁渚涗簡涓€浜涙柟渚跨殑鍥藉甯搁噺锛屽彲鐢ㄨ繖浜涘父閲忎负甯哥敤鐨勮瑷€鐜鍒涘缓聽Locale聽瀵硅薄銆備緥濡傦紝涓嬮潰鐨勫唴瀹逛负缇庡浗鍒涘缓浜嗕竴涓燣ocale聽瀵硅薄锛歀ocale.US銆?

聽 聽 聽 鍒涘缓瀹屄燣ocale聽鍚庯紝灏卞彲浠ユ煡璇㈡湁鍏冲叾鑷韩鐨勪俊鎭€備娇鐢爂etCountry聽鍙幏鍙柭營SO聽鍥藉/鍦板尯浠g爜锛屼娇鐢爂etLanguage聽鍒欒幏鍙柭營SO聽璇█浠g爜銆傚彲鐢ㄤ娇鐢爂etDisplayCountry聽鏉ヨ幏鍙栭€傚悎鍚戠敤鎴锋樉绀虹殑鍥藉/鍦板尯鍚嶃€傚悓鏍凤紝鍙敤浣跨敤聽getDisplayLanguage聽鏉ヨ幏鍙栭€傚悎鍚戠敤鎴锋樉绀虹殑璇█鍚嶃€傛湁瓒g殑鏄紝getDisplayXXX聽鏂规硶鏈韩鏄瑷€鐜鏁忔劅鐨勶紝瀹冩湁涓や釜鐗堟湰锛氫竴涓娇鐢ㄩ粯璁ょ殑璇█鐜浣滀负鍙傛暟锛屽彟涓€涓垯浣跨敤鎸囧畾鐨勮瑷€鐜浣滀负鍙傛暟銆?

2.ResourceBundle

聽聽聽聽聽璧勬簮鍖呭寘鍚壒瀹氫簬璇█鐜鐨勫璞°€傚綋绋嬪簭闇€瑕佷竴涓壒瀹氫簬璇█鐜鐨勮祫婧愭椂锛堝聽String锛夛紝绋嬪簭鍙互浠庨€傚悎褰撳墠鐢ㄦ埛璇█鐜鐨勮祫婧愬寘涓姞杞藉畠銆傜畝鍗曟潵璇村氨鏄€氳繃闈欐€佹柟娉曟潵鑾峰緱绋嬪簭澶栫晫鐨勮祫婧愬寘銆備娇鐢ㄨ繖绉嶆柟寮忥紝鍙互缂栧啓寰堝ぇ绋嬪害涓婄嫭绔嬩簬鐢ㄦ埛璇█鐜鐨勭▼搴忎唬鐮侊紝瀹冨皢璧勬簮鍖呬腑澶ч儴鍒嗭紙鍗充究涓嶆槸鍏ㄩ儴锛夌壒瀹氫簬璇█鐜鐨勪俊鎭殧绂诲紑鏉ャ€?

杩欎娇缂栧啓鐨勭▼搴忓彲浠ワ細

路聽杞绘澗鍦版湰鍦板寲鎴栫炕璇戞垚涓嶅悓鐨勮瑷€

路聽涓€娆″鐞嗗涓瑷€鐜

路聽浠ュ悗鍙互杞绘澗杩涜淇敼锛屼互渚挎敮鎸佹洿澶氱殑璇█鐜

褰撶▼搴忛渶瑕佺壒瀹氫簬璇█鐜鐨勫璞℃椂锛屽畠浣跨敤getBundle鏂规硶鍔犺浇聽ResourceBundle聽绫伙細

[java]聽 view plain copy print ?

  1. ResourceBundle聽myResources聽=聽聽
  2. 聽聽聽聽聽ResourceBundle.getBundle("MyResources",聽currentLocale);聽聽

聽聽聽聽聽聽聽杩欓噷鎴戜滑鏈夊繀瑕佽涓€涓嬭繖閲岀殑涓や釜鍙傛暟锛岀涓€涓弬鏁版寚瀹氭垜浠閮ㄨ祫婧愭枃浠剁殑鏂囦欢鍚嶇殑澶达紝涓轰粈涔堣鏄枃浠跺ご鍛紝瑕佹兂鐭ラ亾杩欎釜鎴戜滑杩樺緱鍏堣涓€浜涙垜浠殑璧勬簮鏂囦欢鐨勫懡鍚嶈鍒欐槸锛氭枃浠跺ご_璇█浠e彿_鍥藉浠e彿.properties銆傝繖閲岀殑鏂囦欢鍚嶆槸鎴戜滑鑷繁璧风殑锛岃瑷€浠e彿鍜屽浗瀹朵唬鍙烽兘鏄竴浜涘畾涔夊ソ鐨勶紝鎴戜滑鐩存帴鍘昏皟鐢ㄥ氨OK浜嗐€傚綋绋嬪簭鎵€瑕佹壘鐨勮瑷€鐜鎴戜滑娌℃湁瀹氫箟鐨勮瘽锛屼粬浼氶粯璁ょ殑鍘绘壘:鏂囦欢澶?properties,绗簩涓弬鏁版槸璁剧疆鎴戜滑鐨勫湴鍩熶俊鎭€?

聽 聽 聽 聽 璧勬簮鍖呭寘鍚敭/鍊煎銆傞敭鍞竴鍦版爣璇嗕簡鍖呬腑鐗瑰畾浜庤瑷€鐜鐨勫璞°€偮犵湅鍒拌繖閲岀浉淇″ぇ瀹堕兘搴旇鎯冲埌杩欓噷鐨勮祫婧愮敤浠€涔堟枃浠舵渶鍚堥€備簡锛屽锛屽氨鏄痯roperties鏂囦欢姣旇緝鍚堥€傦紝JDK涓彁渚涗簡寰堝閲嶈浇鐨刧etBundle鏂规硶锛屽叿浣撶殑鐪嬩笅鍥撅細

聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

struts2(十二)struts2国际化底层大揭秘

寰楀埌ResourceBundle聽瀵硅薄涔嬪悗锛屾垜浠彲浠ヨ皟鐢ㄤ粬鐨勪竴浜涘唴缃殑getxx鏂规硶鑾峰緱鍒板叾鐩稿簲鐨勪俊鎭?

聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽聽

struts2(十二)struts2国际化底层大揭秘

3.MessageFormat

聽 聽 聽 聽 聽鍦ㄥ浗闄呭寲涓殑璧勬簮閰嶇疆鏂囦欢涓垜浠篃缁忓父浼氱湅鍒板崰浣嶇鐨勫舰寮忓嚭鐜帮紝JDK涓箣鎵€浠ュ彲浠ユ敮鎸佸崰浣嶇锛屽畬鍏ㄥ氨鏄湅MessageFormat杩欎釜绫荤殑鏀寔銆傚綋鐒朵簡锛岃繖涓篃鍙槸杩欎釜绫荤殑鍏朵腑涓€涓姛鑳姐€侻essageFormat聽鎻愪緵浜嗕互涓庤瑷€鏃犲叧鏂瑰紡鐢熸垚杩炴帴娑堟伅鐨勬柟寮忋€備娇鐢ㄦ鏂规硶鏋勯€犲悜缁堢鐢ㄦ埛鏄剧ず鐨勬秷鎭€侻essageFormat聽鑾峰彇涓€缁勫璞★紝鏍煎紡鍖栬繖浜涘璞★紝鐒跺悗灏嗘牸寮忓寲鍚庣殑瀛楃涓叉彃鍏ュ埌妯″紡涓殑閫傚綋浣嶇疆銆?

娉細MessageFormat聽涓嶅悓浜庡叾浠柭燜ormat聽绫伙紝鍥犱负聽MessageFormat聽瀵硅薄鏄敤鍏舵瀯閫犳柟娉曚箣涓€鍒涘缓鐨勶紙鑰屼笉鏄娇鐢爂etInstance聽鏍峰紡鐨勫伐鍘傛柟娉曞垱寤虹殑锛夈€傚伐鍘傛柟娉曚笉鏄繀闇€鐨勶紝鍥犱负聽MessageFormat聽鏈韩涓嶅疄鐜扮壒瀹氫簬璇█鐜鐨勮涓恒€傜壒瀹氫簬璇█鐜鐨勮涓烘槸鐢辨墍鎻愪緵鐨勬ā寮忓拰鐢ㄤ簬宸叉彃鍏ュ弬鏁扮殑瀛愭牸寮忔潵瀹氫箟鐨勩€?

MessageFormat聽绫绘彁渚涗簡涓や釜鏋勯€犳柟娉曪紝涓嬮潰鎴戜滑鏉ョ湅涓€涓嬶細

MessageFormat(String聽pattern)

鏋勯€犻粯璁よ瑷€鐜鍜屾寚瀹氭ā寮忕殑聽MessageFormat銆?

MessageFormat(String聽pattern,聽Locale聽locale)

鏋勯€犳寚瀹氳瑷€鐜鍜屾ā寮忕殑聽MessageFormat銆?

鍦ㄨ幏鍙栧埌璧勬簮淇℃伅涔嬪悗鍦ㄨ繘琛屾牸寮忓寲璁剧疆鐨勬椂鍊欐垜浠竴鑸笉鍘籲ew鍑轰粬鐨勫璞★紝鑰屾槸鐢ㄤ粬鐨勪竴涓潤鎬佹柟娉曪細format鏂规硶锛屾垜浠潵鐪嬩竴涓嬩粬鎻愪緵鐨勪竴浜涢噸杞芥柟娉曪細

format(Object[]聽arguments,聽StringBuffer聽result,聽FieldPosition聽pos)

鏍煎紡鍖栦竴涓璞℃暟缁勶紝骞跺皢聽MessageFormat聽鐨勬ā寮忔坊鍔犲埌鎵€鎻愪緵鐨劼燬tringBuffer锛岀敤鏍煎紡鍖栧悗鐨勫璞℃浛鎹㈡牸寮忓厓绱犮€?

format(Object聽arguments,聽StringBuffer聽result,聽FieldPosition聽pos)

鏍煎紡鍖栦竴涓璞℃暟缁勶紝骞跺皢聽MessageFormat聽鐨勬ā寮忔坊鍔犲埌鎵€鎻愪緵鐨劼燬tringBuffer锛岀敤鏍煎紡鍖栧悗鐨勫璞℃浛鎹㈡牸寮忓厓绱?

format(String聽pattern,聽Object...聽arguments)

鍒涘缓鍏锋湁缁欏畾妯″紡鐨劼燤essageFormat锛屽嵆涓哄甫鏈夊崰浣嶇鐨勫€笺€傚苟鐢ㄥ畠鏉ユ牸寮忓寲缁欏畾鐨勫弬鏁般€?

濂戒簡锛屽嚑涓噸瑕佺殑绫讳粙缁嶅畬浜嗕互鍚庯紝鎴戠浉淇″ぇ瀹跺璧勬簮鍥介檯鍖栦竴瀹氭湁鍜屼竴涓繁鍒荤殑浜嗚В浜嗗惂銆備笅闈㈡垜浠氨浠ヤ竴涓畝鍗曠殑灏忓疄渚嬫潵鎶婅繖鍑犱釜绫荤殑鐢ㄦ硶涓茶捣鏉ワ細

[java]聽 view plain copy print ?

  1. Locale聽locale聽=聽Locale.US;聽聽
  2. ResourceBundle聽bundle聽=聽ResourceBundle聽聽
  3. .getBundle("caoshenghuan",聽locale);聽聽
  4. String聽value聽=聽bundle.getString("hello");聽聽
  5. String聽result聽=聽MessageFormat.format(value,聽new聽Object[]聽{聽"鏇硅儨娆?聽});聽聽
  6. System.out.println(result);聽聽

鎴戜滑鍙互鐪嬪埌锛屼唬鐮佸緢绠€鍗曪紝灏辨槸鑾峰彇澶栭儴璧勬簮鏂囦欢鐨刱ey涓篽ello鐨勮祫婧愬€笺€備笅闈㈡垜浠湅涓€涓嬭祫婧愭枃浠剁殑鍐欐硶锛?

[plain]聽 view plain copy print ?

  1. caoshenghuan_en_US.properties锛毬犅?
  2. hello=helloworld{0}聽聽

聽聽聽聽聽聽Struts2鍥介檯鍖栨槸寤虹珛鍦↗ava鍥介檯鍖栫殑鍩虹涓婄殑锛屼竴鏍锋槸閫氳繃鎻愪緵涓嶅悓鍥藉/璇█鐜鐨勬秷鎭祫婧愶紝鐒跺悗閫氳繃ResourceBundle

鍔犺浇鎸囧畾Locale瀵瑰簲鐨勮祫婧愭枃浠讹紝鍐嶅彇寰楄璧勬簮鏂囦欢涓寚瀹歬ey瀵瑰簲鐨勬秷鎭?-鏁翠釜杩囩▼涓嶫AVA绋嬪簭鐨勫浗瀹跺寲瀹屽叏鐩稿悓锛屽彧鏄疭truts2妗嗘灦瀵笿AVA绋嬪簭鍥介檯鍖栬繘琛屼簡杩涗竴姝ュ皝瑁咃紝浠庤€岀畝鍖栦簡搴旂敤绋嬪簭鐨勫浗闄呭寲銆? Struts2闇€瑕佸浗闄呭寲鐨勯儴鍒?

1.绫诲瀷杞崲:

2.鏁版嵁鏍¢獙:

3.楠岃瘉妗嗘灦xml閰嶇疆鏂囦欢鐨勫浗闄呭寲锛歊egisterAction-validation.xml鏂囦欢<message聽key="username.xml.invalid"/>

4.JSP椤甸潰鐨勫浗闄呭寲锛?lt;s:text聽name="addUser"/>

5.Action鐨勫浗闄呭寲:鍒╃敤ActionSupport绫绘彁渚涚殑getText()鏂规硶.

6.Struts2涓姞杞藉叏灞€璧勬簮鏂囦欢

struts.xml

<constant聽name="struts.custom.i18n.resources"聽value="baseName"/>

鎴? struts.properties

struts.custom.i18n.resources=baseName

璁块棶鍥介檯鍖栨秷鎭?

Struts2璁块棶鍥介檯鍖栨秷鎭富瑕佹湁濡備笅涓夌鏂瑰紡锛? (1)JSP椤甸潰锛?lt;s:text聽name="key"/>

(2)Action绫讳腑锛氫娇鐢ˋctionSupport绫荤殑getText鏂规硶銆? (3)琛ㄥ崟鍏冪礌鐨凩abel閲岋細涓鸿〃鍗曞厓绱犳寚瀹氫竴涓猭ey灞炴€?

杈撳嚭甯﹀崰浣嶇鐨勫浗闄呭寲娑堟伅

Struts2涓彁渚涗簡濡備笅涓ょ鏂瑰紡鏉ュ~鍏呮秷鎭瓧绗︿覆涓殑鍗犱綅绗?

(1)JSP椤甸潰锛屽湪<s:text.../>鏍囩涓娇鐢ㄥ涓?lt;s:param.../>鏍囩鏉ュ~鍏呮秷鎭腑鐨勫崰浣嶇銆? (2)Action涓紝鍦ㄨ皟鐢╣etText鏂规硶鏃朵娇鐢╣etText(String聽aTextName,List聽args)鎴杇etText(String聽key,聽String[]聽args)鏂规硶鏉ュ~鍏呭崰浣嶇銆? 闄ゆ涔嬪锛孲truts2杩樻彁渚涗簡瀵瑰崰浣嶇鐨勪竴绉嶆浛浠f柟寮忥紝杩欑鏂瑰紡鍏佽鍦ㄥ浗闄呭寲娑堟伅璧勬簮鏂囦欢涓娇鐢ㄨ〃杈惧紡锛屽浜庤繖绉嶆柟寮忥紝鍒欏彲閬垮厤鍦ㄤ娇鐢ㄥ浗闄呭寲娑堟伅鏃惰繕闇€瑕佷负鍗犱綅绗︿紶鍏ュ弬鏁板€笺€傚涓嬪湪娑堟伅璧勬簮涓娇鐢ㄨ〃杈惧紡succTip=${username},聽娆㈣繋,聽鎮ㄥ凡缁忕櫥褰?

鍦ㄤ笂闈㈢殑娑堟伅璧勬簮涓紝閫氳繃浣跨敤琛ㄨ揪寮忥紝鍙互浠嶸alueStack涓彇鍑鸿username灞炴€у€硷紝鑷姩濉厖鍒拌娑堟伅璧勬簮涓€?

鍔犺浇璧勬簮鏂囦欢鐨勬柟寮? (1)鍔犺浇鍏ㄥ眬璧勬簮鏂囦欢锛毬?lt;constant聽name="struts.custom.i18n.resources"聽value="baseName"/>

(2)鍖呰寖鍥磋祫婧愭枃浠堵狅細涓篠truts2鎸囧畾鍖呰寖鍥磋祫婧愭枃浠剁殑鏂规硶鏄?鍦ㄥ寘鐨勬牴璺緞涓嬪缓绔嬪涓枃浠跺悕涓簆ackage_language_country.properties鐨勬枃浠讹紝涓€鏃﹀缓绔嬩簡杩欎釜绯诲垪鐨勫浗闄呭寲璧勬簮鏂囦欢锛屽簲鐢ㄤ腑澶勪簬璇ュ寘涓嬬殑鎵€鏈堿ction閮藉彲浠ヨ闂璧勬簮鏂囦欢銆傞渶瑕佹敞鎰忕殑鏄笂闈㈢殑鍖呰寖鍥磋祫婧愭枃浠剁殑baseName灏辨槸package锛屼笉鏄疉ction鎵€鍦ㄧ殑鍖呭悕銆? (3)Action鑼冨洿璧勬簮鏂囦欢锛氬湪Action绫绘枃浠舵墍鍦ㄧ殑璺緞寤虹珛澶氫釜鏂囦欢鍚嶄负ActionName_language_country.properties鐨勬枃浠躲€? (4)涓存椂鎸囧畾璧勬簮鏂囦欢锛?lt;s:i18n.../>鏍囩鐨刵ame灞炴€ф寚瀹氫复鏃剁殑鍥介檯鍖栬祫婧愭枃浠?

瀵逛簬鍦↗SP涓闂浗闄呭寲娑堟伅锛屽垯绠€鍗曠殑澶氾紝浠栦滑鍙堝彲浠ュ垎涓轰袱绉嶅舰寮忥細

(1)瀵逛簬浣跨敤<s:i18n.../>鏍囩浣滀负鐖舵爣绛剧殑<s:text.../>鏍囩銆佽〃鍗曟爣绛剧殑褰㈠紡锛? 聽聽聽a銆佸皢浠?lt;s:i18n.../>鏍囩鎸囧畾鐨勫浗闄呭寲璧勬簮鏂囦欢涓姞杞芥寚瀹歬ey瀵瑰簲鐨勬秷鎭€? 聽聽聽b銆佸鏋滃湪a涓壘涓嶅埌鎸囧畾key瀵瑰簲鐨勬秷鎭紝鍒欐煡鎵緎truts.custom.i18n.resources甯搁噺鎸囧畾baseName鐨勭郴鍒楄祫婧愭枃浠躲€? 聽聽聽c銆佸鏋滅粡杩囦笂闈㈡楠や竴鐩存壘涓嶅埌璇ey瀵瑰簲鐨勬秷鎭紝灏嗙洿鎺ヨ緭鍑鸿key鐨勫瓧绗︿覆鍊笺€?

(2)濡傛灉<s:text.../>鏍囩銆佽〃鍗曟爣绛炬病鏈変娇鐢?lt;s:i18n.../>鏍囩浣滀负鐖舵爣绛撅細

聽聽聽聽鐩存帴鍔犺浇struts.custom.i18n.resources甯搁噺鎸囧畾baseName鐨勭郴鍒楄祫婧愭枃浠躲€傚鏋滄壘涓嶅埌璇ey瀵瑰簲鐨勬秷鎭紝灏嗙洿鎺ヨ緭鍑鸿key鐨勫瓧绗︿覆鍊笺€傚厑璁哥敤鎴疯嚜琛岄€夋嫨绋嬪簭璇█

Struts2鍥介檯鍖栫殑杩愯鏈哄埗

鍦⊿truts2涓紝鍙互閫欰ctionContext.getContext().setLocale(Locale聽arg)璁剧疆鐢ㄦ埛鐨勯粯璁よ瑷€銆備负浜嗙畝鍖栬缃敤鎴烽粯璁よ瑷€鐜锛孲truts2鎻愪緵浜嗕竴涓悕涓篿18n鐨勬嫤鎴櫒(Interceptor),骞朵笖灏嗗叾娉ㄥ唽鍦ㄩ粯璁ょ殑鎷︽埅鍣ㄤ腑(defaultStack)銆偮爄18n鎷︽埅鍣ㄥ湪鎵цAction鏂规硶鍓嶏紝鑷姩鏌ユ壘璇锋眰涓竴涓悕涓簉equest_locale鐨勫弬鏁般€傚鏋滆鍙傛暟瀛樺湪锛屾嫤鎴櫒灏卞皢鍏朵綔涓哄弬鏁帮紝杞崲鎴怢ocale瀵硅薄锛屽苟灏嗗叾璁句负鐢ㄦ埛榛樿鐨凩ocale(浠h〃鍥藉/璇█鐜)銆傞櫎姝や箣澶栵紝i18n鎷︽埅鍣ㄨ繕浼氬皢涓婇潰鐢熸垚鐨凩ocale瀵硅薄淇濆瓨鍦ㄧ敤鎴稴ession鐨勫悕涓篧W_TRANS_I18N_LOCALE鐨勫睘鎬т腑銆備竴鏃︾敤鎴稴ession涓瓨鍦ㄤ竴涓悕涓篧W_TRANS_I18N_LOCALE鐨勫睘鎬э紝鍒欒灞炴€ф寚瀹氱殑Locale灏嗕細浣滀负娴忚鑰呯殑榛樿Locale銆?

[html]聽 view plain copy print ?

  1. <%@聽page聽language="java"聽contentType="text/html;聽charset=GBK"%>聽聽
  2. <%@taglib聽prefix="s"聽uri="/struts-tags"%>聽聽
  3. <script.聽type="text/javascript">聽聽
  4. function聽langSelecter_onChanged()聽聽
  5. {聽聽
  6. 聽document.getElementById("langForm").submit();聽聽
  7. }聽聽
  8. </script>聽聽
  9. <%--聽璁剧疆SESSION_LOCALE涓虹敤鎴穝ession涓殑WW_TRANS_I18N_LOCALE灞炴€у€悸?-%>聽聽
  10. <s:set聽name="SESSION_LOCALE"聽value="#session['WW_TRANS_I18N_LOCALE']"/>聽聽
  11. <%--聽浣跨敤lee.Locales鍒涘缓locales瀹炰緥聽--%>聽聽
  12. <s:bean聽id="locales"聽name="lee.Locales">聽聽
  13. 聽<%--聽涓簂ocales瀹炰緥浼犲叆current鍙傛暟鍊硷紝濡傛灉SESSION_LOCALE涓虹┖锛屽垯杩斿洖ValueStack涓璴ocale灞炴€у€?鍗崇敤鎴锋祻瑙堝櫒璁剧疆鐨凩ocale)聽--%>聽聽
  14. 聽<s:param聽name="current"聽value="#SESSION_LOCALE聽==聽null聽?聽locale聽:聽#SESSION_LOCALE"/>聽聽
  15. </s:bean>聽聽
  16. <%--聽璁╃敤鎴烽€夋嫨璇█鐨勮〃鍗暵?-%>聽聽
  17. <form.聽action="<s:url/>"聽id="langForm"聽聽
  18. 聽聽聽聽style="background-color:#bbbbbb;聽padding-top:聽4px;聽padding-bottom:聽4px;">聽聽
  19. 聽聽聽聽<s:text聽name="languag"/>聽聽
  20. 聽<s:select聽label="Language"聽list="#locales.locales"聽listKey="value"聽listValue="key"聽聽
  21. 聽聽聽聽聽聽聽聽value="#SESSION_LOCALE聽==聽null聽?聽locale聽:聽#SESSION_LOCALE"聽聽
  22. 聽聽聽聽聽聽聽聽name="request_locale"聽id="langSelecter"聽聽
  23. 聽聽聽聽聽聽聽聽nchange="langSelecter_onChanged()"聽theme="simple"/>聽聽
  24. </form>聽聽

鍦ㄥ叾浠栭〉闈腑鍖呭惈璇ラ〉闈?

[html]聽 view plain copy print ?

  1. <s:include聽value="selectlanguage.jsp"/>聽聽
  2. 鍦╯truts.xml鏂囦欢涓鍔燗ction閫氶厤绗︾殑閰嶇疆锛毬犅?
  3. <?xml聽version="1.0"聽encoding="GBK"?>聽聽
  4. <!DOCTYPE聽struts聽PUBLIC聽聽
  5. 聽聽聽聽聽聽聽聽"-//Apache聽Software聽Foundation//DTD聽Struts聽Configuration聽2.0//EN"聽聽
  6. 聽聽聽聽聽聽聽聽"http://struts.apache.org/dtds/struts-2.0.dtd">聽聽
  7. <struts>聽聽
  8. 聽<constant聽name="struts.custom.i18n.resources"聽value="messageResource"/>聽聽
  9. 聽<constant聽name="struts.i18n.encoding"聽value="GBK"/>聽聽
  10. 聽聽聽聽<package聽name="lee"聽extends="struts-default">聽聽
  11. 聽聽<!--聽浣跨敤閫氶厤绗﹀畾涔堿ction鐨刵ame聽-->聽聽
  12. 聽聽<action聽name="*">聽聽
  13. 聽聽聽<!--聽灏嗚姹傝浆鍙戠粰/WEB-INF/jsp/璺緞涓嬪悓鍚嶇殑JSP椤甸潰聽-->聽聽
  14. 聽聽聽<result>/WEB-INF/jsp/{1}.jsp</result>聽聽
  15. 聽聽</action>聽聽
  16. 聽聽聽聽</package>聽聽
  17. </struts>聽聽

鐢ㄦ埛涓诲姩閫夋嫨鍥介檯鍖栧簲鐢ㄤ粙缁?/h2> 棣栧厛閰嶇疆struts,xml

聽<constant name="struts.custom.i18n.resources" value="messageResouce"></constant>

鐒跺悗缂栧啓锛歮essageResouce_zh_CN.properties鍜宮essageResouce_en_US.properties

鍏蜂綋浠g爜绀轰緥锛?

stuNumber=StudentNumber

password=Password

login=login

loginInfo=Play login聽

璇█閫夋嫨鐨勫湴鏂瑰彲浠ヤ娇鐢ㄩ摼鎺ュ埌action涓紝闇€鍚慳ction浼犻€抮equest_locale=en_US鎴栬€卹equest_locale=zh_CN鍙傛暟灏卞彲浠ョ畝鍗曠殑瀹炵幇璇█鐨勫垏鎹?

椤甸潰浠g爜濡備笅锛?

聽 <a href="languageAction?request_locale=en_US" target="_blank" rel="external nofollow" >en</a>

聽 <a href="languageAction?request_locale=zh_CN" target="_blank" rel="external nofollow" >cn</a>

鐒跺悗鍐峚ction涓洿鎺ヨ繑鍥炲嵆鍙紝鍦ㄨ繑鍥炵殑鐣岄潰寰楀埌messageResouce_zh_CN鐨勫睘鎬у€硷紝濡備笅浠g爜绀轰緥锛?

label="%{getText('stuNumber')}"

label="%{getText('password')}"