internationalization(i18n)
- 國際化(internationalization)是設計和制造容易適應不同區域要求的產品的一種方式。
- 它要求從產品中抽離所有地域語言,國家/地區和文化相關的元素。
- 換言之,應用程序的功能和代碼設計考慮在不同地區運行的需要,其代碼簡化了不同本地版本的生產。
- 開發這樣的程序的過程,就稱為國際化。
數據國際化
- * 關鍵的思路是從請求作用域獲取locale,然后查詢對應的數據*
中文語言數據頁面:只有中文數據
英文語言數據頁面:只有英文數據
瀏覽器切換中文,英文
User
@Entity
@Table(name = "t_user")
public class User {
@Id
@GeneratedValue
private Long id;
private String name;
private Integer age;
private String locale;//通過此字段查詢對應的數據
InitApplicationListener
package com.jege.spring.boot.controller;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
import com.jege.spring.boot.data.jpa.entity.User;
import com.jege.spring.boot.data.jpa.repository.UserRepository;
/** * @author JE哥 * @email 1272434821@qq.com * @description:spring的事件監聽器的處理機制:在啟動服務器的時候,插入默認數據 */
@Component
public class InitApplicationListener implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
ApplicationContext context = event.getApplicationContext();
UserRepository userRepository = context.getBean("userRepository", UserRepository.class);
User user;
for (int i = 1; i < 21; i++) {
if (i % 2 == 0) {
user = new User("je哥" + i, 25 + i);
user.setLocale("zh");
} else {
user = new User("je-ge" + i, 25 + i);
user.setLocale("en");
}
userRepository.save(user);
}
}
}
UserController
// 從user.jsp列表頁面由easyui-datagrid發出ajax請求獲取json數據
@RequestMapping("/json")
@ResponseBody
public Map<String, Object> json(@RequestParam(name = "page", defaultValue = "1") int page,
@RequestParam(name = "rows", defaultValue = "10") int rows, final String q, HttpServletRequest request) {
// 按照id降序
Sort sort = new Sort(Sort.Direction.DESC, "id");
// 封裝分頁查詢條件
Pageable pageable = new PageRequest(page - 1, rows, sort);
// 拼接查詢條件
Specification<User> specification = new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
List<Predicate> list = new ArrayList<Predicate>();
if (!StringUtils.isEmpty(q)) {
list.add(cb.like(root.get("name").as(String.class), "%" + q + "%"));
}
if (request.getLocale().toString().contains("en")) {
list.add(cb.like(root.get("locale").as(String.class), "%en%"));
} else {
list.add(cb.like(root.get("locale").as(String.class), "%zh%"));
}
Predicate[] p = new Predicate[list.size()];
return cb.and(list.toArray(p));
}
};
return findEasyUIData(userRepository.findAll(specification, pageable));
}
其他關聯項目
- Spring Boot 系列教程15-頁面國際化
http://blog.csdn.net/je_ge/article/details/53434761 - Spring Boot 系列教程7-EasyUI-datagrid
http://blog.csdn.net/je_ge/article/details/53365189
源碼地址
https://github.com/je-ge/spring-boot
如果覺得我的文章對您有幫助,請打賞支持。您的支持將鼓勵我繼續創作!謝謝!