Java 来自数据库的多语言支持数据
我的应用程序有nameEn实体和nameDe实体(英语和德语)。但现在只使用英语。由于有这么多实体可用,我希望有一个泛型类可以返回所选的语言条目,但对于多个条目,我的方法不起作用Java 来自数据库的多语言支持数据,java,jpa,Java,Jpa,我的应用程序有nameEn实体和nameDe实体(英语和德语)。但现在只使用英语。由于有这么多实体可用,我希望有一个泛型类可以返回所选的语言条目,但对于多个条目,我的方法不起作用 @Entity @Table(name="employee") public class Employee implements java.io.Serializable { // Fields private Integer id; private String nameEn;
@Entity
@Table(name="employee")
public class Employee implements java.io.Serializable {
// Fields
private Integer id;
private String nameEn;
private String nameDe;
//Getter, Setter Methods
}
@Entity
@Table(name="address")
public class Address implements
java.io.Serializable {
private String descriptionEn;
private String descriptionDe;
}
public interface ILabelText {
String getNameEn();
String getNameDe();
String getDescriptionEn();
String getDescriptionDe();
}
public abstract class LabelText implements ILabelText, Serializable {
private static final long serialVersionUID = 1L;
protected String descriptionEn;
protected String descriptionDe;
private Logger log = Logger.getLogger(LabelText.class);
String language = FacesContext.getCurrentInstance().getViewRoot().getLocale().getLanguage();
public String getDescription() {
log.info("Language Selected is " + language);
if (language.equals("De")) {
return getDescriptionDe();
} else {
return getDescriptionEn();
}
}
public String getName() {
log.info("Language Selected is " + language);
if (language.equals("De")) {
return getNameDe();
} else {
return getNameEn();
}
}
}
//In Xhtml, based on selected locale, display value accordingly
<h:outputText value="#{emp.getName()}" />
<h:outputText value="#{add.getDescription()}" />
@实体
@表(name=“employee”)
公共类Employee实现java.io.Serializable{
//田地
私有整数id;
私有字符串名称;
私有字符串名称;
//Getter、Setter方法
}
@实体
@表(name=“address”)
公共类地址实现
java.io.Serializable{
私有字符串描述符;
私有字符串描述符;
}
公共接口文本{
字符串getNameEn();
字符串getNameDe();
字符串getDescriptionEn();
字符串getDescriptionDe();
}
公共抽象类LabelText实现ILabelText,可序列化{
私有静态最终长serialVersionUID=1L;
受保护的字符串描述符;
受保护的字符串描述符;
专用记录器log=Logger.getLogger(LabelText.class);
字符串语言=FacesContext.getCurrentInstance().getViewRoot().getLocale().getLanguage();
公共字符串getDescription(){
log.info(“所选语言为”+语言);
if(语言等于(“De”)){
返回getDescriptionDe();
}否则{
返回getDescriptionEn();
}
}
公共字符串getName(){
log.info(“所选语言为”+语言);
if(语言等于(“De”)){
返回getNameDe();
}否则{
返回getNameEn();
}
}
}
//在Xhtml中,基于选定的区域设置,相应地显示值
创建带有翻译的表更容易:
e、 g:
人->所有人
翻译
人物身份证
个人翻译|地点;个人识别码
然后在Person类上为谓词上的所有属性设置语言
Person.description(这将使用Person\u id键和区域设置搜索Person翻译)
有些人喜欢这样的翻译
您可以像这样创建一个实体
Lang
@Entity
public class Lang implements Serializable
{
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@NotNull
private String key;
@NotNull
private String translation;
}
@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
@MapKey(name = "key")
protected Map<String, Lang> name;
然后像这样在你的地址中使用它
@Entity
public class Lang implements Serializable
{
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@NotNull
private String key;
@NotNull
private String translation;
}
@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
@MapKey(name = "key")
protected Map<String, Lang> name;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@MapKey(name=“key”)
受保护地图名称;
然后您就可以访问JSF中的正确语言:
<h:outputText value="#{emp.name[userLocale].translation}" />
表达式userLocale
应该解析为您的语言键(en
,de
,…
),或者可以硬编码,例如{emp.name['en'].translation}
,请阅读一篇您非常熟悉的文章-