Toggle Theme Editor
Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Charcoal

[series Spring Boot] 11. Message

Discussion in 'Spring Framework' started by quydtkt, 25/11/19.

  1. quydtkt

    quydtkt Administrator

    Trong bài này, chúng ta sẽ cùng tìm hiểu về message resource trong Spring Boot.
    1. Internationalization
    - Trong các demo trước của mình, text hiển thị trên view templete thường là các text cố định và không thể thay đổi. Việc sử dụng text cố định, làm cho trang web do bạn tạo ra chỉ có duy nhất 1 ngôn ngữ.​
    - Hiện tại, Internationalization (i18n) (Quốc tế hóa) đang là một xu thế, nó trái ngược với Localization (L10n) (Nội địa hóa).​
    2. Internationalization trong Spring Boot
    - Spring cung cấp các hỗ trợ mở rộng cho quốc tế hóa (Internationalization) (i18n) thông qua việc sử dụng Spring Interceptor, Locale Resolvers và Resource Bundles cho các địa phương khác nhau.​
    - Các message được khai báo trong các file message.properties.​
    - Trong project Spring Boot, các file message.properties thường được tạo với cấu trúc như sau:​
    • message.properties: Chứa các message mặc định. Được Spring sử dụng khi không tìm được file message.properties của tương ứng với locale chỉ định
    • message_[locale].properties: Các file message.properties ứng với locale (địa phương cụ thể
      • message_en.properties: Anh
      • message_fr properties: Pháp
      • message_vi properties: Việt Nam
    - Trong bài học này, tôi sẽ hướng dẫn các tạo ra một web đơn giản, có sử dụng đa ngôn ngữ​
    ApplicationConfig.java
    PHP:
    package vn.congdongjava.config;
     
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.support.ReloadableResourceBundleMessageSource;
    import org.springframework.web.servlet.LocaleResolver;
    import org.springframework.web.servlet.i18n.SessionLocaleResolver;
     
    import java.nio.charset.StandardCharsets;
    import java.util.Locale;
     
    @
    Configuration
    public class ApplicationConfig {
     
        @
    Bean
        
    public ReloadableResourceBundleMessageSource messageSource() {
            
    ReloadableResourceBundleMessageSource messageSource;
     
            
    messageSource = new ReloadableResourceBundleMessageSource();
            
    messageSource.setBasenames("classpath:message/message");
            
    messageSource.setDefaultEncoding(StandardCharsets.UTF_8.name());
     
            return 
    messageSource;
        }
     
        @
    Bean
        
    public LocaleResolver localeResolver() {
            
    SessionLocaleResolver slr = new SessionLocaleResolver();
            
    slr.setDefaultLocale(Locale.US);
            return 
    slr;
        }
    }
    - Đây là nơi config các Spring Bean với annotation @Configuration​
    - Trong class có khai báo 2 method để tạo Spring Bean​
    • messageSource: Load các file message có nằm tại thư mực \src\main\resources\message, Các file message có tên message.properties
    • localeResolver: Xác định locale chỉ định từ client. Resource Bundles sẽ dủng thông tin này để load các message tại file message tương ứng
    WebMvcConfig.java
    PHP:
    package vn.congdongjava.config;
     
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
     
    @
    Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
     
        @
    Override
        
    public void addInterceptors(InterceptorRegistry registry) {
            
    LocaleChangeInterceptor lci;
     
            
    lci = new LocaleChangeInterceptor();
            
    lci.setParamName("lang");
     
            
    registry.addInterceptor(lci);
        }
    }
    - WebMvcConfig cũng là một class được đánh đấu bằng annotation @Configuration để Spring Boot tự động quét khi khởi động.​
    - Đây là nơi đăng kí các thông tin cho mô hình MVC như interceptor, web Resolvers, …​
    - Tại method addInterceptors, có đăng kí một interceptor dùng cho việc xác định locale qua request param “lang”​
    HomeController.java
    PHP:
    package vn.congdongjava.controller;
     
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
     
    @
    Controller
    public class HomeController {
     
        @
    RequestMapping(value "/"method RequestMethod.GET)
        public 
    String show() {
            return 
    "index";
        }
    }
    \resources\message\message_en.properties
    PHP:
    username=Username
    password
    =Password
    \resources\message\message_vi.properties
    PHP:
    username=Tên đăng nhập
    password
    =Mật mã
    - Các message được khai báo theo dạng key=value như trong các file .properties khác​
    index.html
    HTML:
    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>Login</title>
    </head>
    <body>
    [[#{username}]] <input type="text" name="username"><br/>
    [[#{password}]] <input type="password" name="password"><br/>
    </body>
    </html>
    - Để sử dụng message trong message resource tại thymeleaf, ta dùng cú pháp [[#{key}]]​
    Chạy project và truy cập link http://localhost:8080?lang=en
    [​IMG]
    http://localhost:8080?lang=vi
    [​IMG]
    Cám ơn các bạn đã theo dõi. Hẹn gặp lại trong bài viết tiếp theo :)
     

    Attached Files:

Chia sẻ trang này

Loading...