0

我的应用程序具有用于英语和德语的 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()}" />
4

2 回答 2

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}.

于 2012-07-16T10:16:50.053 回答
0

创建带有翻译的表更容易:

例如:人员 -> 您的所有人员 PersonTranslations

人 | id Person翻译 | 语言环境;人名;

然后在您的 Person 类上,您为谓词上的所有属性设置语言

Person.description(这将使用 person_id 键和语言环境搜索 PersonTranslation)有些类似于 PersonTranslation.find(1, 'en');

在此处输入图像描述

于 2012-07-15T18:16:02.513 回答