Spring Boot 系列教程16-數據國際化


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));
  }

其他關聯項目

源碼地址

https://github.com/je-ge/spring-boot

如果覺得我的文章對您有幫助,請打賞支持。您的支持將鼓勵我繼續創作!謝謝!
微信打賞
支付寶打賞


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM