Spring-Boot |动态地为不同的客户端/用户加载不同的messages.properties文件

时间:2017-11-14 16:41:02

标签: spring spring-boot properties thymeleaf

我搜索了很多,但我找不到有关我主题的任何有用信息。让我解释一下。

我创建了一个spring应用程序,可以根据登录的用户更改其布局。此布局可以由管理员上传。现在我想添加一个管理员可以为该用户上传特定ReloadableResourceBundleMessageSource的功能,因此文本也会根据登录用户进行更改。我用百里香叶创建的模板总是一样的。所以消息键是相同的,只是值正在改变。

我尝试创建动态messages.propertie,但这不起作用,因为在配置时您不知道messages.properties的名称是什么。

我只是不明白吗?我不知道。有没有办法创建一个动态temp1=matrixText.split(';') temp2=temp1[0].split(',') rows=len(temp1) columns=len(temp2) rA=np.zeros((rows, columns)) arrayText=matrixText.split(';') rowText=range(len(arrayText)) for rowIndex, rowItem in enumerate(arrayText): rowText[rowIndex]=arrayText[rowIndex].split(',') for colIndex, colItem in enumerate(rowText[rowIndex]): rA[[rowIndex, colIndex]]=rowText[rowIndex][colIndex] - 加载器,可以识别具有如下名称的文件: messages_foo_de_DE.properties

2 个答案:

答案 0 :(得分:0)

尝试这种方法。 propsFileNamepropertyvalue可以作为参数提供

    @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();
}

答案 1 :(得分: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 );