Java SpringMVC:多语言支持

Java SpringMVC:多语言支持,java,spring,spring-mvc,Java,Spring,Spring Mvc,我正在使用SpringMVC。在我的应用程序中,用户应该能够以多种语言(英语、日语、汉语、波兰语等)发布评论/文本。这些post也将存储在DB中。那么,如何在UI端和服务器端启用多语言支持呢 我需要做什么。我看到了一些国际化示例,但我的困惑是它使用属性文件来存储每个单词的含义。这就是我如何存储每个单词的问题。这是我需要的东西吗?一个例子就足够了是的,你需要按照例子告诉你的去做。您不必存储含义,但对于要在UI中国际化的每个字符串,您必须有一个属性 您需要意识到SpringI18N示例只处理不同语言

我正在使用SpringMVC。在我的应用程序中,用户应该能够以多种语言(英语、日语、汉语、波兰语等)发布评论/文本。这些post也将存储在DB中。那么,如何在UI端和服务器端启用多语言支持呢


我需要做什么。我看到了一些国际化示例,但我的困惑是它使用属性文件来存储每个单词的含义。这就是我如何存储每个单词的问题。这是我需要的东西吗?一个例子就足够了

是的,你需要按照例子告诉你的去做。您不必存储含义,但对于要在UI中国际化的每个字符串,您必须有一个属性

您需要意识到SpringI18N示例只处理不同语言的UI显示。数据库中的多语言将需要单独的工作


你需要更多的专业知识,而不是从这里或网上的例子中获得的

大多数网站都有语言链接(即英语为en,法语为fr,等等)。因此,您可以根据用户选择的语言链接对不同的语言进行分类

另一种方法是进行某种自动检测,因此如果用户输入某些特定语言的常用词,则可以突出显示自动选择的语言,并为用户提供覆盖自动检测和手动选择语言的选项。谷歌就是一个很好的例子


另外,确保从前端到后端的每个组件都设置为UTF-8编码。也就是说,您的web/应用程序服务器(例如Tomcat)、应用程序框架(例如Spring)和数据库(包括IDE设置)以及包括jsp/html文件在内的所有文件都保存为UTF-8编码并声明UTF-8(例如在jsp/html文件中包含…
).

对于使用数据库扩展AbstractMessageSource的Spring l18n。Java conifg:

    @Bean
    public MessageSource messageSource(){
        DataBaseMessageSource source = new DatabaseMessageSource();

        return source;
    }

    @Bean
    public LocaleResolver localeResolver(){
        SessionLocaleResolver resolver = new SessionLocaleResolver();
        resolver.setDefaultLocale(Locale.ENGLISH); //setup default locale
       return resolver;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
        interceptor.setParamName("lang"); //will change current user locale when hit url with ?lang
        registry.addInterceptor(interceptor);
    }

如果您需要在控制器中获取当前区域设置:

@RequestMapping
public String index(Locale locale) {  //you will have it
//or use LocaleContextHolder.getLocale, and it will return current thread locale

return "index";
}

是的,我们可以管理用户界面部分,因为这将是固定金额。所以这不是什么大问题。问题开始如何管理帖子、评论?如果有人写波兰语,应该在页面上显示波兰语……但是如何:(他们的浏览器区域设置必须设置为波兰语。你必须对内容进行适当编码。这不是小事。你需要了解Unicode和前后编码。多语言支持不涉及翻译用户内容,只涉及应用程序提供的内容。如果用户以波兰语发表评论,那么所有其他用户都将看到无论他们选择了哪种语言,我都会使用波兰语。因此,如果我在数据库中设置了UTF-8编码并存储了用户输入的任何语言。当我在网页中显示它时,我会得到同样的结果吗?
@RequestMapping
public String index(Locale locale) {  //you will have it
//or use LocaleContextHolder.getLocale, and it will return current thread locale

return "index";
}