Skip to content

Commit 7966894

Browse files
authored
provide i18n document supplementary (ModelEngine-Group#293)
* 提供国际化功能的文档补充 * 完善文档 * 完善文档 * 完善文档
1 parent c04da0f commit 7966894

File tree

1 file changed

+110
-1
lines changed

1 file changed

+110
-1
lines changed

docs/framework/fit/java/user-guide-book/12. 附加功能组件.md

Lines changed: 110 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,116 @@ String messageEn = bundle.getMessage(new Locale("en"), "HELLO", "world");
4343
static StringResource combine(Iterable<StringResource> providers) {...}
4444
```
4545

46+
## 地区解析器
47+
48+
FIT 框架提供了 `LocaleResolver` 接口用于从 HTTP 请求中解析用户的地区设置,该接口定义了两个核心方法:
49+
50+
``` java
51+
public interface LocaleResolver {
52+
/**
53+
* 解析用户的地区设置。
54+
*
55+
* @param request 表示待解析 HTTP 请求的 {@link HttpClassicServerRequest}。
56+
* @return 表示解析出来地区信息的 {@link Locale}。
57+
*/
58+
Locale resolveLocale(HttpClassicServerRequest request);
59+
60+
/**
61+
* 设置地区到返回响应中。
62+
*
63+
* @param response 表示待设置地区的 HTTP 响应的 {@link HttpClassicServerResponse}。
64+
* @param locale 表示待设置地区的 {@link Locale}。
65+
*/
66+
void setLocale(HttpClassicServerResponse response, Locale locale);
67+
}
68+
```
69+
70+
其中,`resolveLocale()` 方法用于从请求中解析地区信息,`setLocale()` 方法用于在响应中设置地区信息。
71+
72+
FIT 提供了 `DefualtLocaleResolver` 实现类,该类支持从多个来源解析地区信息,按优先级顺序为:
73+
74+
1. 请求参数:从 URL 参数中获取名为 `locale` 的参数值。
75+
2. Cookie:从名为 `locale` 的 Cookie 中获取地区信息。
76+
3. 请求头:从 `Accept-Language` 请求头中解析地区信息。
77+
78+
## 地区解析过滤器
79+
80+
`LocaleResolveFilter` 是一个 HTTP 过滤器,用于自动处理请求的地区解析和响应的地区设置。该过滤器会在请求处理过程中自动执行以下操作:
81+
82+
- 使用配置的 `LocaleResolver` 解析请求中的地区信息。
83+
- 将解析得到的地区信息设置到 `LocaleContextHolder` 中。
84+
- 根据 `LocaleResolver` 的实现逻辑在响应中设置相应的地区状态。
85+
- 在请求处理完成后清理线程本地的地区信息。
86+
87+
使用示例如下:
88+
89+
``` java
90+
@Component
91+
public class WebConfig {
92+
@Bean
93+
public LocaleResolveFilter localeResolveFilter() {
94+
return new LocaleResolveFilter(new DefualtLocaleResolver());
95+
}
96+
}
97+
```
98+
99+
## 地区上下文管理
100+
101+
FIT 框架提供了 `LocaleContextHolder` 类用于在当前线程中管理地区信息,该类使用 ThreadLocal 机制确保多线程环境下的地区信息隔离。主要方法包括:
102+
103+
``` java
104+
public class LocaleContextHolder {
105+
/**
106+
* 设置当前线程的地区上下文。
107+
*
108+
* @param locale 表示待存储在当前线程地区上下文的 {@link Locale}。
109+
*/
110+
public static void setLocale(Locale locale) {
111+
if (locale != null) {
112+
LOCALE_CONTEXT_HOLDER.set(locale);
113+
}
114+
}
115+
116+
/**
117+
* 获取当前线程的地区。
118+
*
119+
* @return 表示当前线程上下文存储地区信息的 {@link Locale}。
120+
*/
121+
public static Locale getLocale() {
122+
return LOCALE_CONTEXT_HOLDER.get();
123+
}
124+
125+
/**
126+
* 清除当前线程的地区上下文。
127+
*/
128+
public static void clear() {
129+
LOCALE_CONTEXT_HOLDER.remove();
130+
}
131+
}
132+
```
133+
134+
使用示例:
135+
136+
``` java
137+
public class testLocaleContextHolder {
138+
public void test() {
139+
try {
140+
// 设置当前线程的地区为英文。
141+
LocaleContextHolder.setLocale(Locale.ENGLISH);
142+
// 获取当前线程的地区。
143+
Locale currentLocale = LocaleContextHolder.getLocale();
144+
} finally {
145+
// 请在使用完毕后尽快清理当前线程的地区信息。
146+
LocaleContextHolder.clear();
147+
}
148+
}
149+
}
150+
```
151+
152+
## 校验消息国际化
153+
154+
FIT 框架的校验功能支持国际化,实现通过 `LocaleContextMessageInterpolator` 类实现校验消息的多语言支持。该类会根据 `LocaleContextHolder` 中设置的地区信息自动选择对应语言的校验消息模板。
155+
46156
# 12.2 Event事件
47157

48158
## 12.2.1 相关接口
@@ -254,7 +364,6 @@ FIT 框架提供了基于 Hibernate Validator 的数据校验功能,支持对
254364
@Component
255365
@Validated
256366
public class UserController {
257-
258367
public void createUser(@NotBlank(message = "用户名不能为空") String username,
259368
@Min(value = 18, message = "年龄必须大于等于 18") Integer age) {
260369
// 业务逻辑

0 commit comments

Comments
 (0)