2015-04-07 36 views
0

在一個實體中,我有一個用英文和法文翻譯的枚舉字段。如何獲取枚舉字段的翻譯?

在同一個實體中,我使用了一個計算字段作爲toString,因此我希望根據用戶的語言環境使用英文或法文翻譯的枚舉值構建計算字段。

我的問題:在實體擴展中寫入的計算字段的getter中,如何獲取用戶的語言環境並翻譯枚舉值?

回答

1

你必須讓你的擴展知道它的執行上下文。有幾個接口可以在擴展中實現,以便爲它們注入運行上下文的元素。

  1. org.jspresso.framework.model.component.IComponentFactoryAware成接收ICompoentFactory實例
  2. org.jspresso.framework.security.ISubjectAware接收的實例的登錄Subject
  3. org.jspresso.framework.application.backend.session.IApplicationSessionAware接收的IApplicationSession
  4. org.jspresso.framework.model.entity.IEntityLifecycleHandlerAware當前實例接收的IEntityLifecycleHandler
一個實例

爲了履行你r用例,必須實現第4個接口。

void setEntityLifecycleHandler(IEntityLifecycleHandler); 

這種情況下只是存儲在您的擴展實現作爲一個實例參數和安全鑄造它作爲一個org.jspresso.framework.application.IController在你的代碼以後使用:您的擴展將與IEntityLifecycleHandler實例通過以下方法注入。

例如:

public String getI18nLabel() { 
    String translationKey = "ENUM_NAME." + getComponent().getEnumValue(); 
    IController controller = (IController) lifecycleHandler; 
    return controller.getTranslation(translationKey, controller.getLocale()); 
} 

只要記住,用於枚舉的I18N資源束鍵的圖案是其中${ENUM_NAME}.${ENUM_VALUE}被計算爲在上面的代碼中的translationKey局部變量。