Ответ 1
Ваша проблема заключается в следующем: ваши промежуточные файлы scala не закодированы правильно.
Вот процесс:
Воспроизведение берет ваш файл шаблона (foo.scala.html
) и переводит его в Scala: target/scala-2.10/src_managed/main/views/html/foo.template.scala
. Затем он скомпилируется с помощью sbt в файлы .class и запускается в режиме воспроизведения.
Когда sbt создает эти промежуточные файлы, он создает их с кодировкой по умолчанию (в моем случае Windows-машина с UTF-8 без спецификации - ваша машина может отличаться). Важно отметить, что это кодирование имеет место, поэтому, даже если я изменю кодировку исходного файла шаблона (foo.scala.html на UTF-16), кодировка файла .scala остается прежней (UTF-8 без спецификации в моей дело). Однако файл больше не компилируется, потому что файл не может быть прочитан, потому что компилятор scala ожидает ITF-8.
"Правильное" решение - всегда использовать UTF-8, и на самом деле это было рекомендуемое решение для игры 1.x см. Документация по игре Интернационализация. Вот эквивалент для play 2. Вы также можете использовать обычные файлы сообщений интернационализации.
Итак, если вы укажете
JAVA_TOOL_OPTIONS='-Dfile.encoding=UTF8' sbt
как предложено Bjorn, тогда это скажет sbt, что все файлы, которые он читает и пишет, будут в UTF8. Вы также можете указать кодировку файла для компилятора scala в вашем Build.scala:
val main = play.Project(appName, appVersion, appDependencies).settings(
scalacOptions ++= Seq("-encoding", "UTF-8")
// Add your own project settings here
)
Это сообщает компилятору scala, что все файлы, которые он читает (т.е. foo.template.scala), кодируются в UTF-8. Если вы установите это значение по умолчанию, это может также работать.
Лучше всего сделать sbt clean, гарантируя исчезновение файлов-нарушителей и перезапуск с помощью JAVA_TOOL_OPTION, как было предложено выше. Тем не менее, вы должны убедиться, что все ваши сборки учитывают это (jenkins, другие разработчики и т.д.).