我的应用程序具有nameEn和nameDe的实体,用于英语和德语。但现在只使用英语。由于有很多实体可用,我希望有一个可以返回所选语言条目的泛型类,但对于多个条目,我的方法不起作用。
@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()}" />
答案 0 :(得分:1)
您可以像这样创建一个实体Lang
@Entity
public class Lang implements Serializable
{
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@NotNull
private String key;
@NotNull
private String translation;
}
并在您的Address
中使用它
@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
@MapKey(name = "key")
protected Map<String, Lang> name;
然后您就可以在JSF中访问正确的语言了:
<h:outputText value="#{emp.name[userLocale].translation}" />
表达式userLocale
应解析为您的语言密钥(en
,de
,...
),或者可以硬编码,例如#{emp.name['en'].translation}
。
答案 1 :(得分:0)
您可以更轻松地创建包含翻译的表格:
e.g: 人 - &gt;你所有的人 PersonTranslations
人物| ID PersonTranslations |区域;为person_id;
然后在您的Person类上设置谓词
上所有属性的语言Person.description(这将使用person_id键和区域设置搜索PersonTranslation) 有些像PersonTranslation.find(1,'en');