相关疑难解决方法(0)

如何国际化Java Web应用程序?

我从谷歌那里了解到,国际化是我使用我的网络应用程序来使用所有语言的过程.我想了解Unicode的国际化过程,所以我从这里那里学习了Unicode .

我能够理解Unicode如何将字符集设置为字节并再次将字节解码为字符集.但我不知道如何进一步前进.我想学习如何比较字符串,我需要知道如何在我的Web应用程序中实现国际化.有什么建议吗?请指导我.

我的目标:

我的主要目标是开发一个用于翻译的Web应用程序(英语到阿拉伯语,反之亦然).我想遵循国际化.我希望在所有三种浏览器中运行我的Web应用程序进行翻译,即FF,Chrome,IE.我该如何实现这一目标?

java unicode jsp internationalization

80
推荐指数
2
解决办法
9万
查看次数

使用从数据库加载的ResourceBundle条目在JSF中进行国际化

我正在使用JPA/EJB/JSF开发Java EE6项目,我在为实体设计多语言支持方面遇到了一些麻烦.有三个相关实体:

语言(具有id)
能力(具有id)
CompetenceName(具有能力参考,语言参考和字符串)

Competence对使用Map实现的CompetenceName有一对多的引用,每个语言都包含一个对象,其中存在一个Competence的名称.请注意,权限是动态创建的,因此它们的名称不能存在于资源包中.

在网页上列出Competences时,我希望它们以当前登录用户的语言显示,它存储在Session Scoped Managed Bean中.

有没有什么好方法可以在不破坏MVC设计的情况下实现这一目标?我的第一个想法是通过FacesContext直接从Competence实体中的"getName"方法获取会话范围bean,并在CompetenceNames的地图中查找如下:

public class Competence
{
...
@MapKey(name="language")
@OneToMany(mappedBy="competence", cascade=CascadeType.ALL, orphanRemoval=true)
private Map<Language, CompetenceName> competenceNames;

public String getName(String controller){
    FacesContext context = FacesContext.getCurrentInstance();
    ELResolver resolver = context.getApplication().getELResolver();
    SessionController sc = (SessionController)resolver.getValue(context.getELContext(), null, "sessionController");
    Language language = sc.getLoggedInUser().getLanguage();
    if(competenceNames.get(language) != null)
        return competenceNames.get(language).getName();
    else
        return "resource missing";
}
Run Code Online (Sandbox Code Playgroud)

这个解决方案感觉非常粗糙,因为实体依赖于Controller层,并且每次我想要它的名字时都必须获取会话控制器.更符合MVC的解决方案是采用Language参数,但这意味着来自JSF的每一次调用都必须包含从会话作用域托管bean中获取的语言,这也不是一个好的解决方案.

有没有人对此问题有任何想法或设计模式?

database jsf jpa resourcebundle internationalization

8
推荐指数
1
解决办法
5922
查看次数

标签 统计

internationalization ×2

database ×1

java ×1

jpa ×1

jsf ×1

jsp ×1

resourcebundle ×1

unicode ×1