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

时间:2015-04-07 15:07:10

标签: jspresso

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

在同一个实体中,我有一个计算字段,我将其用作toString,因此我希望使用英语或法语翻译的枚举值构建计算字段,具体取决于用户的语言环境。

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

1 个答案:

答案 0 :(得分:1)

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

  1. org.jspresso.framework.model.component.IComponentFactoryAware收到ICompoentFactory个实例
  2. org.jspresso.framework.security.ISubjectAware接收已登录的Subject
  3. 的实例
  4. org.jspresso.framework.application.backend.session.IApplicationSessionAware接收IApplicationSession
  5. 的当前实例
  6. org.jspresso.framework.model.entity.IEntityLifecycleHandlerAware接收IEntityLifecycleHandler
  7. 的实例

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