在一个实体中,我有一个枚举字段,用英语和法语翻译。
在同一个实体中,我有一个计算字段,我将其用作toString,因此我希望使用英语或法语翻译的枚举值构建计算字段,具体取决于用户的语言环境。
我的问题:在我在实体扩展中编写的计算字段的getter中,我如何获得用户的语言环境并翻译枚举值?
答案 0 :(得分:1)
您必须让扩展程序了解其执行上下文。您可以在扩展中实现几个接口,以便为它们注入运行上下文的元素。
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
为了满足您的用例,必须实现第4个接口。您的扩展程序将通过以下方法注入IEntityLifecycleHandler
实例:
void setEntityLifecycleHandler(IEntityLifecycleHandler);
只需将此实例作为实例参数存储在您的扩展实现中,然后在代码中将其安全地用作org.jspresso.framework.application.IController
。
例如:
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
局部变量。