如何获取枚举字段的翻译?
How to get the translation of an enumeration field?
在一个实体中,我有一个用英语和法语翻译的枚举字段。
在同一个实体中,我有一个用作 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
的实例
为了满足您的用例,必须实现第 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
局部变量。
在一个实体中,我有一个用英语和法语翻译的枚举字段。
在同一个实体中,我有一个用作 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
的实例
为了满足您的用例,必须实现第 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
局部变量。