Playframework: การทำให้เป็นสากลภายใน Akka และ Unit-Test

ขณะนี้ฉันกำลังทำงานกับ Akka-Task ตามกำหนดเวลาซึ่งจะส่งอีเมลถึงลูกค้า ส่วนหนึ่งของอีเมลเหล่านั้นแสดงผลด้วยเทมเพลตสกาล่าที่แทรกไว้ดังนี้:

emailData.add("address", views.html.shared.formated_address.render(item).body());

formated_address.scala.html ใช้ Message-helper อย่างหนัก (play.api.i18n.Messages)

ในบริบทของแอปพลิเคชัน การทำให้เป็นสากลทำงานได้อย่างไร้ที่ติ (ใช้ภาษาที่กำหนดในบริบท) น่าเสียดายที่การแสดงผลเทมเพลตเดียวกันจากภายใน Akka-Task หรือ Unit-Test ส่งผลให้มีคีย์การแปลที่ไม่ได้รับการแปล

ฉันรู้ว่ามันต้องเป็นไปได้ที่จะบังคับภาษาด้วยการเขียนทับค่า Lang โดยนัย แต่ก็ไม่ประสบความสำเร็จในการทำเช่นนั้น

วิธีแก้ปัญหาหนึ่งที่อยู่ในใจของฉันคือการเริ่ม fakeApplication แต่ดูเหมือนว่าจะเกินความจำเป็นสำหรับ Akka-Task ที่มีน้ำหนักเบา

มีแนวคิดใดบ้างที่จะแก้ไขปัญหานี้




คำตอบ (1)


นี่คือคำตอบสำหรับคำถามของฉันเอง ขณะวิเคราะห์ Library-Code ฉันพบว่า Lang โดยนัย (ซึ่งใช้โดย Messages-Helper) มักจะถูกกำหนดโดยคุกกี้ PLAY_LANG ในบริบทที่ไม่ใช่แอปพลิเคชัน (เช่นใน Akka-Actors หรือ Unit-Tests) คุณไม่มีข้อมูลนี้ ดังนั้น Play เลยใช้ System Default Locale แทน ซึ่งมีค่าเริ่มต้นเป็น "en" บนเครื่องของฉัน เนื่องจากแอปของเราไม่รองรับภาษาอังกฤษ จึงไม่พบไฟล์การแปลที่ลงท้ายด้วย ".en" ส่งผลให้มีคีย์ที่ไม่สามารถแปลได้

มีความเป็นไปได้สองประการที่จะใช้ภาษาเฉพาะภายในนักแสดง

  • สร้างไฟล์ conf/messages ซึ่งเป็นไฟล์เริ่มต้นหากไม่มีไฟล์ภาษาอื่นสำหรับ Locale ที่ตั้งค่าไว้
  • (วิธีที่ฉันชอบ) บังคับใช้ภาษาโดยนัยโดยการตั้งค่าภาษาเริ่มต้นดังนี้: java.util.Locale.setDefault(new Locale("de"));

ฉันหวังว่านี่อาจเป็นประโยชน์สำหรับใครบางคน

person uhon    schedule 16.04.2014