我正在使用spring MVC。在我的应用程序中,用户应该能够以多种语言(英语,日语,中文,波兰语等)发布评论/文本。这些帖子也会存储在数据库中。那么如何在我的UI端和服务器端启用多语言支持Spring MVC:多语言支持
我需要做什么事情。我看到一些国际化的例子,但我的困惑是它使用属性文件来存储每个单词的含义。这就是我如何存储每一个单词的问题。这是我需要的东西吗?一个例子将足够好
我正在使用spring MVC。在我的应用程序中,用户应该能够以多种语言(英语,日语,中文,波兰语等)发布评论/文本。这些帖子也会存储在数据库中。那么如何在我的UI端和服务器端启用多语言支持Spring MVC:多语言支持
我需要做什么事情。我看到一些国际化的例子,但我的困惑是它使用属性文件来存储每个单词的含义。这就是我如何存储每一个单词的问题。这是我需要的东西吗?一个例子将足够好
是的,你需要做的事情告诉你的例子。您不必存储含义,但您必须为要在UI中实现国际化的每个字符串都有一个属性。
你需要认识到Spring I18N的例子只涉及不同语言的UI显示。数据库中的多语言将需要单独的努力。
你需要更多的专业知识,比你从这里或网上的例子中得到的更多。
网站大多具有语言链接(即EN英语,FR为法语等)。因此,根据用户选择的语言链接,您可以找出不同的语言。
另一种方法是进行某种自动检测,因此如果用户输入某些特定语言的常用单词,则可以突出显示自动选择的语言,并且还可以让用户选择重写自动检测并手动选择语言。一个很好的例子就是谷歌的translate website。
此外,请确保从前端到后端的每个组件均设置为UTF-8编码。也就是说,您的Web /应用程序服务器(例如Tomcat),您的应用程序框架(例如Spring)和您的数据库(包括IDE设置),并且包括jsp/html文件的所有文件都保存为UTF-8编码并声明UTF-如在您的jsp/html文件中有... <%@ page language="java" session="false" pageEncoding="UTF-8" contentType="text/html; charset=utf-8"%>
和<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
)。
对于具有数据库使用的Spring l18n扩展AbstractMessageSource。 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);
}
和
public class DatabaseMessageBandle extends AbstractMessageSource {
@Autowired
private FooRepository fooRepo;
@Override
protected MessageFormat resolveCode(String code, Locale locale) {
String message = getMessage(code, locale);
MessageFormat messageFormat = createMessageFormat(message, locale);
return messageFormat;
}
@Override
protected String resolveCodeWithoutArguments(String code, Locale locale) {
return getMessage(code, locale);
}
private String getMessage(String code, Locale locale) {
String message = fooRepo.getMeesageByCodeAndLocale(code, locale); //better not do this
return message;
}
}
,如果你需要获得当前区域控制器:
@RequestMapping
public String index(Locale locale) { //you will have it
//or use LocaleContextHolder.getLocale, and it will return current thread locale
return "index";
}
多语言支持不涉及翻译用户的内容,只是内容提供由应用程序。如果用户使用波兰语进行评论,则所有其他用户都将看到波兰语评论,无论他们选择了哪种语言。 – Qwerky
所以如果已经设置了UTF-8编码并且在数据库中存储任何语言的用户类型。当我在没有做任何额外工作的情况下将它显示在网页上时,我会得到同样的结果吗? – manish