Tag <fmt:bundle> โหลด ResourceBundle ทำให้ <fmt:message> ภายในใช้ bundle นั้นโดยไม่ต้องระบุ basename ซ้ำ
Attributes
| Attribute | คำอธิบาย | Required | Default |
|---|---|---|---|
| basename | Base name ของ resource bundle (fully qualified class name) | Yes | - |
| prefix | Prefix เพิ่มหน้า key ใน fmt:message subtags | No | - |
1. สร้าง Resource Bundle Class
package com.example;
import java.util.ListResourceBundle;
public class Messages_En extends ListResourceBundle {
protected Object[][] getContents() {
return new Object[][] {
{"count.one", "One"},
{"count.two", "Two"},
{"count.three", "Three"},
{"greeting", "Hello"}
};
}
}
คอมไพล์ → Messages_En.class วางใน WEB-INF/classes/com/example/
2. ใช้งานใน JSP
<%@ taglib prefix="fmt" uri="https://java.sun.com/jsp/jstl/fmt" %>
<html>
<body>
<!-- แบบมี prefix -->
<fmt:bundle basename="com.example.Messages" prefix="count.">
<fmt:message key="one"/><br/> <!-- ใช้ key="count.one" -->
<fmt:message key="two"/><br/>
<fmt:message key="three"/><br/>
</fmt:bundle>
<hr/>
<!-- แบบไม่มี prefix (ใช้ key เต็ม) -->
<fmt:bundle basename="com.example.Messages">
<fmt:message key="count.one"/><br/>
<fmt:message key="greeting"/><br/>
</fmt:bundle>
</body>
</html>
ผลลัพธ์
One Two Three One Hello
Internationalization (i18n)
สร้าง bundle หลาย locale:
Messages_En.class(default)Messages_Th.class(Thai)Messages_Th_TH.class(Thai Thailand)
JSTL เลือก bundle ตาม Locale ของ request (header Accept-Language) หรือตั้งค่า <fmt:setLocale>
ตั้งค่า Locale
<fmt:setLocale value="th_TH" scope="session"/>
<fmt:bundle basename="com.example.Messages">
<fmt:message key="greeting"/> <-- แสดงภาษาไทย -->
</fmt:bundle>
Property Files (Alternative)
ใช้ .properties files แทน class (วางใน classpath):
# Messages.properties greeting=Hello count.one=One # Messages_th.properties greeting=สวัสดี count.one=หนึ่ง
basename เหมือนกัน (ไม่ต้องมี _En suffix สำหรับ default)