FrontPage > Spring Bootの覚書

メッセージソース

1. メッセージソースの設定

  • ソースフォルダのルートにmessages.propertiesファイルを作成する。だけ。

    (例 src/main/resources/messages.properties)
    search.condition=検索条件
    search.condition.message=INVOICE IDは {0} です。
    btn.search=検索
    
  • ファイル名を変更、追加する場合。
    application.propertiesファイルにメッセージソース情報を記述する。

    (例 msg1.properties, msg2.propertiesファイルを指定する場合
    src/main/resources/application.properties抜粋)
    # INTERNATIONALIZATION (MessageSourceAutoConfiguration)
    spring.messages.basename=msg1,msg2
    spring.messages.cache-seconds=-1
    spring.messages.encoding=UTF-8
    

2. コントローラクラスからアクセス

  • コントローラクラスにメンバ変数としてMessageSourceを追加する。
    (例 src/main/java/com/ziqoo/sbSample/web/QuerySampleController.java抜粋)
    @Controller
    public class QuerySampleController {
        /** ロガー */
        private static final Logger log = LoggerFactory
                .getLogger(QuerySampleController.class);
    
        @Autowired
        private CustomerService customerService;
        @Autowired
        private InvoiceService invoiceService;
        @Autowired
        private MessageSource messageSource;
    
  • 追加したMessageSourceを使用してアクセス。

    (例 src/main/java/com/ziqoo/sbSample/web/QuerySampleController.java抜粋)
        @RequestMapping("/querySample2")
        public String querySample2(
                @RequestParam(value="invoiceId" ,required=false) Integer invoiceId
                ,Model model,Locale locale) {
    
            if (invoiceId != null) {
                model.addAttribute("invoiceId", invoiceId);
    
                InvoiceExt invoice = invoiceService.getInvoiceDetail(invoiceId);
                model.addAttribute("invoice", invoice);
            }
            String message = messageSource.getMessage("search.condition", null, locale);
            log.info(message);
    
            return "querySample2";
        }
    

3. 画面からアクセス(Thymeleaf)

  • #{キー}でアクセスする。置換文字列がある場合は#{キー(文字列,...)}。

    (例 src/main/resources/templates/querySample2.html抜粋)
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link th:href="@{/resources/css/base.css}" rel="stylesheet"
      type="text/css" />
    <title>Insert title here</title>
    </head>
    <body>
      <form th:action="@{querySample2}" method="post">
        <fieldset>
          <legend th:text="#{search.condition}"></legend>
          <label for="invoiceId">INVOICE ID:</label> <input type="text" size="5"
            name="invoiceId" /> <input type="submit" th:value="#{btn.search}" />
        </fieldset>
      </form>
      <p />
      <div th:if="${invoice != null}">
      <div th:text="#{search.condition.message(${invoiceId})}"></div>
      <table border="1">
        <tr>
          <th>INVOICE ID</th>
          <th>CUSTOMER ID</th>
          <th>FIRST NAME</th>
          <th>LAST NAME</th>
          <th>TOTAL</th>
        </tr>
    
  • 表示例
    sbms-search1.png

4. 国際化

日本語と英語に対応してみる。

  • messages_ja.propertiesとmessages_en.propertiesを用意する。

    (src/main/resources/i18n/messages_ja.properties)
    search.condition=検索条件
    search.condition.message=INVOICE IDは {0} です。
    btn.search=検索
    

    (src/main/resources/i18n/messages_en.properties)
    search.condition=CONDITION
    search.condition.message=INVOICE ID is {0} .
    btn.search=SEARCH
    

    (src/main/resources/application.properties)
    # INTERNATIONALIZATION (MessageSourceAutoConfiguration)
    spring.messages.basename=i18n/messages
    spring.messages.cache-seconds=-1
    spring.messages.encoding=UTF-8
    

動作確認

  • ブラウザの言語設定で英語の優先度をトップに移動する。
    sbms-lang.png

  • 対象ページにアクセス。
    sbms-search2.png



添付ファイル: filesbms-search2.png 1031件 [詳細] filesbms-lang.png 685件 [詳細] filesbms-search1.png 1015件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-13 (金) 01:00:01 (2091d)