首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Struts 2 國際化實戰:從資源檔配置到前後端完整落地

     編輯:Java 相關知識

核心機制:Struts 如何實現 i18n

Struts 透過 MessageResources 機制支援國際化:將不同語言文字放入對應的屬性檔,JSP 使用 <bean:message> 或 <s:text> 標籤,框架自動根據瀏覽器 Accept-Language 或 Session 中的 Locale 解析對應鍵值,實現零代碼侵入的多語言切換。

一、資源檔規範與生成流程

1. 命名慣例

基礎名稱.properties                    # 預設語言(通常英文)
基礎名稱_zh_CN.properties              # 簡體中文
基礎名稱_zh_TW.properties              # 繁體中文
基礎名稱_en_US.properties              # 美式英文

建議統一放置於 /WEB-INF/classes/resources/ 目錄,並在 struts-config.xml 配置:

<message-resources parameter="resources.ApplicationResources"/>

2. 編碼轉換關鍵步驟

  1. 使用支援 UTF-8 的編輯器編寫,存檔為 UTF-8 編碼。
  2. 執行 JDK 自帶 native2ascii 轉換為 Unicode 轉義格式:
    native2ascii -encoding UTF-8 ApplicationResources.properties ApplicationResources_zh_CN.properties
    
  3. 轉換後檔案方可被 Java 正確讀取。

二、JSP 頁面完整國際化

1. 頁面編碼宣告

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

2. 文字顯示

<!-- Struts 1.x -->
<bean:message key="index.title"/>

<!-- Struts 2 -->
<s:text name="index.title"/>

3. Action 層手動獲取資源

MessageResources resources = getResources(request);
String msg = resources.getMessage(locale, "key");
request.setAttribute("dynamicMsg", msg);

其中 locale = (Locale) session.getAttribute(Globals.LOCALE_KEY)。

4. 使用者手動切換語言

Locale newLocale = new Locale(language, country);
session.setAttribute(Globals.LOCALE_KEY, newLocale);

語言/國家代碼參考 Unicode 官方列表。

三、圖片與動態內容國際化

1. 靜態圖片

為每種語言準備對應版本圖片,路徑寫入資源檔:

# 資源檔
logo.path=/images/logo_zh_CN.png

JSP 引用:<img src="<bean:message key='logo.path'/>" />

2. 動態生成圖片

後端繪圖時,靜態文字從資源檔讀取,動態數據直接拼裝,確保圖片內容隨語言切換。

四、請求參數編碼統一解決方案

問題根源

Tomcat 預設 ISO-8859-1 解碼 URL 參數,導致中文亂碼。手動 new String(param.getBytes("ISO-8859-1"), "UTF-8") 繁瑣且易漏。

最佳實踐:Filter 全攔截

public class EncodingFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) {
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        chain.doFilter(req, resp);
    }
}

web.xml 配置:

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>com.example.EncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

一勞永逸解決所有請求(含 multipart)編碼問題。

五、資料庫層面支援

  • 建庫指定字元集:CREATE DATABASE ... CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • 連線 URL 附帶:?characterEncoding=utf8&useUnicode=true
  • 表欄位類型使用 VARCHAR / TEXT 存儲 UTF-8 內容。

總結

Struts 國際化核心在於「資源檔標準化 → native2ascii 轉換 → 框架自動解析 → Filter 統一編碼 → 資料庫字元集對齊」。遵循此全鏈路規範,即可構建支援多語言無縫切換的企業級應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved