0
在一個實體中,我有一個用英文和法文翻譯的枚舉字段。如何獲取枚舉字段的翻譯?
在同一個實體中,我使用了一個計算字段作爲toString,因此我希望根據用戶的語言環境使用英文或法文翻譯的枚舉值構建計算字段。
我的問題:在實體擴展中寫入的計算字段的getter中,如何獲取用戶的語言環境並翻譯枚舉值?
在一個實體中,我有一個用英文和法文翻譯的枚舉字段。如何獲取枚舉字段的翻譯?
在同一個實體中,我使用了一個計算字段作爲toString,因此我希望根據用戶的語言環境使用英文或法文翻譯的枚舉值構建計算字段。
我的問題:在實體擴展中寫入的計算字段的getter中,如何獲取用戶的語言環境並翻譯枚舉值?
你必須讓你的擴展知道它的執行上下文。有幾個接口可以在擴展中實現,以便爲它們注入運行上下文的元素。
org.jspresso.framework.model.component.IComponentFactoryAware
成接收ICompoentFactory
實例org.jspresso.framework.security.ISubjectAware
接收的實例的登錄Subject
org.jspresso.framework.application.backend.session.IApplicationSessionAware
接收的IApplicationSession
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
局部變量。