Йесод Юлиус Интерполяция сообщений

Я использую систему сообщений Yesod, чтобы поддерживать согласованность своего языка. Например, у меня есть сообщение с именем MsgBrand, которое без проблем интерполируется в файлы Hamlet. Однако сейчас я использую библиотеку JavaScript, которой нужна такая информация.

var tour = Tour.new();

tour.addSteps([
  { element: "#some-id",
    title:   "Some Title",
    content: "_{MsgTourStepFoo}"
  }
]);

Однако _{MsgTourStepFoo} появляется в отрендеренном коде JavaScript дословно. Другими словами, нет никакой интерполяции. Это нормально или я что-то упускаю?


person nomen    schedule 14.10.2013    source источник


Ответы (1)


Это нормально. Мы могли иметь i18n-вариант Юлиуса, но до сих пор избегали его просто потому, что кажется, что это будет больше путаницы, чем пользы. Вместо этого вы можете использовать getMessageRender, чтобы получить функцию рендеринга сообщений, а затем вызвать ее из Julius, например:

Haskell:
messageRender <- getMessageRender

Julius:
content: "#{messageRender MsgTourStepFoo}"
person Michael Snoyman    schedule 15.10.2013
comment
Хорошо, я понял. Хотя я нахожу это несколько удивительным. Спасибо, Майкл, за Йесод и вашу помощь. :) - person nomen; 15.10.2013
comment
Это хорошо, но я получил эту ошибку: Foundation.hs:85:26: Нет экземпляра для (RenderMessage App message0), возникающего из-за использования «getMessageRender». Переменная типа «message0» неоднозначна. - person Denis Shevchenko; 24.11.2014