Kerangka Kerja: Internasionalisasi dalam Akka dan Unit-Test

Saat ini saya sedang mengerjakan Tugas Akka terjadwal yang mengirimkan Email ke pelanggan. Sebagian dari Email tersebut dirender dengan scala-Template yang disisipkan seperti ini:

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

formated_address.scala.html banyak menggunakan Pembantu Pesan (play.api.i18n.Messages).

Dalam konteks aplikasi, internasionalisasi bekerja dengan sempurna (mengambil Bahasa yang ditentukan dalam Konteks). Sayangnya, merender Templat yang sama dari dalam Akka-Task atau Unit-Test menghasilkan kunci terjemahan yang tidak diterjemahkan.

Saya tahu bahwa mungkin untuk memaksakan suatu Bahasa dengan menimpa nilai implisit Lang, tetapi tidak berhasil melakukannya.

Salah satu solusi yang terlintas dalam pikiran saya adalah, untuk memulai Aplikasi palsu, tapi ini tampaknya berlebihan untuk Akka-Task yang ringan.

Adakah ide bagaimana mengatasi masalah ini?


person uhon    schedule 15.04.2014    source sumber


Jawaban (1)


Inilah jawaban atas pertanyaan saya sendiri. Saat menganalisis Library-Code, saya menemukan bahwa Lang implisit (yang digunakan oleh Messages-Helper) biasanya disetel oleh Cookie PLAY_LANG. Dalam konteks non-aplikasi (seperti di Akka-Actors atau Unit-Tests) Anda tidak memiliki info ini. Jadi, Play menggunakan Lokal Default Sistem, yang defaultnya adalah "en" di mesin saya. Karena aplikasi kami tidak mendukung bahasa Inggris, tidak ada file terjemahan dengan akhiran ".en" yang ditemukan. Hal ini mengakibatkan kunci tidak dapat diterjemahkan.

Ada dua kemungkinan untuk menggunakan bahasa tertentu dalam aktor.

  • Buat file conf/messages yang merupakan file default jika tidak ada file bahasa lain yang tersedia untuk set Lokal.
  • (cara pilihan saya). Paksa Bahasa implisit dengan menyetel Lokal default seperti ini: java.util.Locale.setDefault(new Locale("de"));

Saya harap ini mungkin bermanfaat bagi seseorang.

person uhon    schedule 16.04.2014