2017-11-14 7 views
0

私は多くを検索しましたが、私のトピックに関する有用な情報は見つかりませんでした。私に説明させてください。スプリングブーツ|さまざまなクライアント/ユーザーの異なるmessages.propertiesファイルを動的にロードする

ログインしているユーザーに基づいてレイアウトを変更できるSpringアプリケーションを作成しました。このレイアウトは管理者がアップロードできます。今私は管理者が特定のmessages.propertiesをこのユーザーにアップロードできる機能を追加したいので、ログインしたユーザーに基づいてテキストが変更されます。私がthymeleafで作成したテンプレートは、常に同じです。したがって、メッセージキーは同じで、値が変化しています。

ダイナミックReloadableResourceBundleMessageSourceを作成しようとしましたが、構成時にmessages.propertieの名前がわからないため動作しません。

私はそれを手に入れませんか?知りません。動的なmessages.propertiesローダーを作成する方法はありますか? messages_foo_de_DE.properties

+0

これまでに何か試しましたか?あなたの質問をテストコード(Spring boot + thymeleaf)で更新してください。 –

答えて

0

ユーザーに関連付けられたロケールまたは言語設定を保持できます。ユーザーがログインすると、現在のユーザーのロケールまたは言語がわかります。これでロケールを設定できるようになりましたLocaleResolver

LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request); 
Locale userLocale = new Locale('de')// Locale loaded dynamically from DB or url parameter. 

localeResolver.setLocale(request, response, userLocale); 
+0

これはロケールの解決に関するものではありません。それはユーザーまたはクライアントに依存します – DK1990

+0

私はそれがユーザー/クライアントに依存することを理解しましたが、ユーザーのログイン時にあなたのロケールを使ってトリックを行います。デフォルトロケールは、現在のユーザーロケールに基づいて変更されます。 –

+0

私は現在これをアーカイブしています。ローカルは私のカスタムロケールに設定されていますが、まだspringは 'messages_de_DE.properties'のみを検索し、' messages_foo_bar.properties'は検索しません。あなたは何か考えていますか? – DK1990

0

このアプローチを試してみてください。プロパティは、あなたがロードしたいファイルのあなたが値を渡すことができるはずですReloadableResourceBundleMessageSource(ファイル名)を作成した場合propsFileNameproperty、およびvalueは引数

@Autowired 
    ReloadableResourceBundleMessageSource messageSrc; 

    void updateProperty(String property, String value, String propsFileName) { 
    boolean success = false; 
    Properties props = new Properties(); 
    FileOutputStream output = null; 
    FileInputStream configStream = null; 
    try { 
     configStream = new FileInputStream(propsFileName); 
     props.load(configStream); 
     props.setProperty(property, value); 
     // save modified property file 
     output = new FileOutputStream(propsFileName); 
     props.store(output, "This description goes to the header of a file"); 

    } catch (IOException ex) { 
     log.error(ex); 
    } finally { 
     if (configStream != null) { 
      try { 
       configStream.close(); 
      } catch (IOException e) { 
       log.error(e); 
      } 
     } 
     if (output != null) { 
      try { 
       output.close(); 
      } catch (IOException e) { 
       log.error(e); 
      } 
     } 
    } 


    messageSrc.clearCache(); 
} 
+0

私は私のプロパティ値を更新したくないと思う。また、問題は、ユーザーがログインするときに適切な 'messages.properties'をロードする必要がありますが、どうすればよいのでしょうか? – DK1990

0

として供給することができます。

messageSource.loadProperties(..) 

Docs

あなたが言ったように、あなたはこれを試してみたが、あなたは名前が設定時にあるかわかりません。したがって、期待値を知るまで、デフォルトのプロパティをロードすることがあります。あるいは、管理者がユーザーごとにプロパティー・ファイルを変更したときの値をデータベースに保管し、構成時に値を取り出すことさえできます。

+0

'messgaeSource.getMessage(..)'は新しい 'messages.properties'ファイルを設定するオプションを提供しません。 – DK1990

+0

申し訳ありませんが、私は間違ったメソッド名を持っています、それは "loadProperties"でなければなりません。 – acroynon

+0

hmmm .....このメソッドは保護されていますが、私はこのメソッドが公開されているとは考えていません。 – DK1990

関連する問題