Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 来自数据库的多语言支持数据_Java_Jpa - Fatal编程技术网

Java 来自数据库的多语言支持数据

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;

我的应用程序有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()}" />
@实体
@表(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}
,请阅读一篇您非常熟悉的文章-