Unit testing Playframework:Akka内部的国际化和单元测试

Unit testing Playframework:Akka内部的国际化和单元测试,unit-testing,internationalization,akka,playframework-2.2,messages,Unit Testing,Internationalization,Akka,Playframework 2.2,Messages,我目前正在进行一项预定的Akka任务,向客户发送电子邮件。 部分电子邮件使用scala模板呈现,插入方式如下: emailData.add("address", views.html.shared.formated_address.render(item).body()); 格式化的_address.scala.html大量使用消息助手(play.api.i18n.Messages) 在应用程序上下文中,国际化是完美的(采用上下文中定义的语言)。 不幸的是,从Akka任务或单元测试中呈现相同的

我目前正在进行一项预定的Akka任务,向客户发送电子邮件。 部分电子邮件使用scala模板呈现,插入方式如下:

emailData.add("address", views.html.shared.formated_address.render(item).body());
格式化的_address.scala.html大量使用消息助手(play.api.i18n.Messages)

在应用程序上下文中,国际化是完美的(采用上下文中定义的语言)。 不幸的是,从Akka任务或单元测试中呈现相同的模板会导致未翻译的翻译键

我知道,通过重写隐式Lang值来强制使用语言是可能的,但没有成功

我想到的一个解决方案是,启动一个伪造的应用程序,但对于一个轻量级的Akka任务来说,这似乎是一个过火了


有什么办法解决这个问题吗?

下面是我自己问题的答案。 在分析库代码时,我发现隐式语言(Messages Helper使用)通常由Cookie PLAY_Lang设置。在非应用程序上下文中(如Akka Actors或单元测试中),您没有这些信息。因此,Play使用的是系统默认语言环境,在我的机器上默认为“en”。由于我们的应用程序不支持英语,因此未找到以“.en”结尾的翻译文件。 这导致了不可翻译的键

在参与者中使用特定语言有两种可能性

  • 创建conf/messages文件,如果没有其他语言文件可用于设置的区域设置,则该文件是默认文件
  • (我喜欢的方式)。通过如下设置默认语言环境强制隐式语言:
    java.util.Locale.setDefault(新语言环境(“de”))
我希望这可能对某些人有用