2017-11-14 4 views
0

Ich habe viel gesucht, aber ich kann keine nützliche Information zu meinem Thema finden. Lassen Sie mich erklären.Spring-Boot | Laden verschiedener messages.properties Dateien für verschiedene Clients/Benutzer dynamisch

Ich habe eine Feder-Anwendung erstellt, die ihr Layout basierend auf dem angemeldeten Benutzer ändern kann. Dieses Layout kann von einem Administrator hochgeladen werden. Jetzt möchte ich eine Funktion hinzufügen, die der Admin für diesen Benutzer eine spezifische messages.properties hochladen kann, so dass die Texte basierend auf dem angemeldeten Benutzer auch ändern. Die Vorlagen, die ich mit thymeleaf erstellt habe, sind immer gleich. Die Nachrichtenschlüssel sind also gleich, nur die Werte ändern sich.

Ich habe versucht, eine dynamische ReloadableResourceBundleMessageSource erstellen, aber das funktioniert nicht, weil zur Konfigurationszeit Sie nicht wissen, was der Name der messages.propertie wird.

Bekomme ich es einfach nicht? Ich weiß es nicht. Gibt es eine Möglichkeit, einen dynamischen messages.properties -loader zu erstellen, der die Datei mit einem Namen wie folgt identifizieren kann: messages_foo_de_DE.properties

+0

Haben Sie bisher alles versucht? Bitte aktualisieren Sie Ihre Frage mit Testcode (Spring boot + thymeleaf) –

Antwort

0

Sie können Gebietsschema oder Spracheinstellungen für den Benutzer beibehalten. Sobald der Benutzer sich angemeldet hat, kennen Sie das aktuelle Gebietsschema oder die Sprache des Benutzers. Jetzt können Sie das Gebietsschema mit LocaleResolver setzen

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

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

handelt es sich nicht um Gebietsschema Auflösung. Es hängt von einem Benutzer oder Client – DK1990

+0

Ich verstehe, es hängt von Benutzer/Client ab, aber Ihr Gebietsschema mit tun die Tricks bei der Benutzeranmeldung. Das Standardgebietsschema wird basierend auf dem aktuellen Gebietsschema des Benutzers geändert. –

+0

Ich arbeite derzeit, um dies zu archivieren, und das lokale ist auf mein benutzerdefiniertes Gebietsschema eingestellt, aber Spring sucht nur nach 'messages_de_DE.properties' und nicht nach' messages_foo_bar.properties'. Hast du irgendeine Idee? – DK1990

0

Versuchen Sie diesen Ansatz. propsFileName, property und value können als Argumente

@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

Ich denke, ich möchte meine Eigenschaftswerte nicht aktualisieren. Das Problem ist auch, dass wenn ein Benutzer sich anmeldet, ich die richtigen 'messages.properties' laden muss, aber wie mache ich das? – DK1990

0

Wenn Sie eine ReloadableResourceBundleMessageSource erstellen geliefert werden, sollten Sie den Wert (Dateiname) passieren können, für die Eigenschaften, die Sie laden Datei möchten.

messageSource.loadProperties(..) 

Docs

Wie Sie gesagt haben, Sie haben dies versucht, aber Sie wissen nicht, was der Name bei der Konfiguration ist. Vielleicht laden Sie also eine Standardeigenschaft, bis Sie den erwarteten Wert kennen. Oder speichern Sie den Wert (wenn der Administrator die Eigenschaftendatei pro Benutzer ändert) in einer Datenbank und rufen Sie ihn zur Konfigurationszeit ab.

+0

'messgaeSource.getMessage (..)' bietet keine Option zum Festlegen einer neuen Datei 'messages.properties'. – DK1990

+0

Sorry, ich habe den falschen Methodennamen, es sollte "loadProperties" sein. Ich habe meine Antwort mit Korrekturen bearbeitet – acroynon

+0

hmmm ..... diese Methode ist geschützt, ich glaube nicht, dass diese Methode für den öffentlichen Gebrauch ist. – DK1990

Verwandte Themen