如何获取枚举字段的翻译?

How to get the translation of an enumeration field?

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

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

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

您必须让您的扩展了解其执行上下文。您可以在扩展中实现多个接口,以便将它们注入 运行 上下文的元素。

  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. 的当前实例
  5. org.jspresso.framework.model.entity.IEntityLifecycleHandlerAware 接收 IEntityLifecycleHandler
  6. 的实例

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