在一个实体中,我有一个用英语和法语翻译的枚举字段。
在同一个实体中,我有一个用作 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
为了满足您的用例,必须实现第四个接口。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
局部变量计算的。