質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

1307閲覧

(Spring Boot) 多言語化をAjaxで実現したい

_cocapeach

総合スコア20

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2018/03/28 02:33

編集2018/03/28 04:40

お世話になります。
SpringBootで開発しているプロジェクトで、多言語化をしています。
現在は、言語設定を選択した時に、AjaxでDBのLanguageFlagを更新して、

その後に、

location.reload();

で、ページリロードをして言語表示を更新しています。
言語表示の更新もAjaxで行いたいと思っているのですが、可能でしょうか?
ViewはThymeleafを使用しています。
各項目は、下記のように表示しており、

//Thymeleaf th:utext="#{company}";
//messages_ja.properties company = 会社
//messages_en.properties company = Company
package com.toray.controller; import java.security.Principal; import java.util.Locale; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.Authentication; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ModelAttribute; import com.toray.entity.User; import com.toray.repository.UserRepository; @ControllerAdvice(basePackages = "com.xxx.controller") public class AppController { @Autowired UserRepository userRepository; @ModelAttribute("user") public User addOneObject(Principal principal, Model model) { Authentication authentication = (Authentication) principal; User user = (User) authentication.getPrincipal(); User myuser = userRepository.findByIdEquals(user.getId()); Integer languageflg = myuser.getLanguageflg(); this.setLang(languageflg); model.addAttribute("languageflg", languageflg); return user; } public void setLang(Integer languageflg) { switch(languageflg) { case 2: Locale.setDefault(Locale.JAPANESE); System.out.println(Locale.getDefault()); break; default: Locale.setDefault(Locale.ENGLISH); System.out.println(Locale.getDefault()); break; } } }

各言語ごとの表示内容は、messages.propertiesに定義しています。
動いている場所が違うので不可能でしょうか?
ご教示頂けますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ちょうど今やっている案件で同様の課題がありましたので、私がやっている方法を紹介します。
以下のライブラリを使用することでmessages.properiiesをjavascript側でも処理するようにしています。

https://github.com/jquery-i18n-properties/jquery-i18n-properties

messages.propertiesをjavascript側に渡す必要がありますので、ライブラリの説明にあるようにブラウザから見えるパスに配置するか、java側でmessages.propertiesファイルの中身を返すようなコントローラを作成して渡すなどするとよいと思います。

投稿2018/03/28 03:43

euledge

総合スコア2404

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_cocapeach

2018/03/28 04:00

Euledge様 ご回答有難うございます。 こんなライブラリがあるのですね。参考になります。 ただ、DBから引っ張ってくるデータも多言語化していますので、 DBの内容も含めるとやはり非同期では不可能な気がしています。
_cocapeach

2018/03/28 04:01

messages.propertiesに定義されている項目はこのライブラリを使用することで非同期更新が可能になりそうなので、ベストアンサーとさせて頂きました。
euledge

2018/03/28 04:22 編集

私のところではDBに保管している中身もmessages.propertiesのキーとしていますのでそのキーで多言語化していますよ。 messages.propertiesに定義できる単語レベルのものに関してのみですが
_cocapeach

2018/03/28 04:41

有難うございます。別件になってしまうのですが、多言語化の実装で動的にmessages.propertiesを切り分けることが出来ません。質問にも書いて有る通り、言語設定を選択した際にDBの値と、Locale.setDefaultを変更し、ページリロードをしているのですが、言語表示が切り替わりません。messages.propertiesがうまく切り替わっていないように思うのですが、原因がわかりません。プロジェクトを再起動すると、言語表示が切り替わっています。質問内容にLocaleを更新しているソースコードを追記しました。不足情報等有りましたら、質問に追記致しますのでご指摘ください。
_cocapeach

2018/03/28 05:01

有難うございます。動的に切り替えるには、lang=のパラメータが必要なんですね。パラメータなしで切り替える事が出来無いのでしょうか。少し調べてみます。ご丁寧に有難うございます。
_cocapeach

2018/03/28 05:19

setDefaultではなく、localeResolver.setLocale(request,response,Locale.JAPANESE);とすることでパラメータを与えず、動的に変更することができました。ご丁寧に有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問