0

在一个实体中,我有一个用英语和法语翻译的枚举字段。

在同一个实体中,我有一个用作 toString 的计算字段,因此我想根据用户的语言环境,用英语或法语翻译的枚举值来构建计算字段。

我的问题:在实体扩展中编写的计算字段的 getter 中,如何获取用户的语言环境并翻译枚举值?

4

1 回答 1

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

为了满足您的用例,必须实现第四个接口。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局部变量计算的。

于 2015-04-07T17:26:37.033 回答