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 PersonTranslations | ロケール; person_id;

次に、Personクラスで、述語のすべての属性の言語を設定します

Person.description(これは、person_idキーとロケールを使用してPersonTranslationを検索します)PersonTranslation.find(1、'en');のようなものです。

ここに画像の説明を入力してください

于 2012-07-15T18:16:02.513 に答える