2013-09-06 1 views
2

Я пытаюсь отправить письма от грааля, и почтовый шаблон должен быть многоязычным.Многоязычный шаблон электронной почты с графами

Я обнаружил, что мы можем отображать GSP в виде строки или даже в почтовом плагине grails, который мы можем отобразить GSP.

В GSP теперь я читаю статические сообщения из messages.properties, предполагая, что я буду определять для каждого языка, и мои письма будут многоязычными.

Теперь вот проблема, что я столкнулся

В шаблоне язык всегда имеет значение en_US. Я использую API ниже, чтобы получить строку шаблона. Я не использую почтовый плагин напрямую, как мне нужно, чтобы сохранить сообщение посыла как строка в базу данных, а также

def contents = groovyPageRenderer.render(template:"/layouts/emailparse", model:[mailObj: mailObj]) 

Я также читал на другом посте на форуме о настройке языка с помощью параметра языки, но до сих пор язык установлен только для en_US.

Возможно, указанный выше метод вызовет поддержку, указав язык? Есть ли возможность использовать шаблон скорости для этого типа многоязычных писем?

ответ

0

Можете ли вы обойти это, создав модель, содержащую список с правильными переводами?

Например:

def messages = [:] 
messages['hello.world'] = messageSource.getMessage(
     "hello.world", 
     null, 
     new Locale("nb") 
) 
def template = groovyPageRenderer.render(
     template: '/mail/email', 
     model:[messages:messages] 
) 

И тогда в представлении просто написать:

<html> 
    <head> 
     <title>${messages['hello.world']}</title> 
    </head> 
    <body> 
    </body> 
</html> 
1

Если вы отправляете почту из в потоке обработки запросов (например, от действия контроллера) то он должен автоматически выбрать правильный язык из запроса. Если вы отправляете фоновый поток, он не будет знать, какой язык использовать, потому что контекст «текущего запроса» отсутствует.

Если у вас есть еще один способ узнать правильный язык для использования (например, если вы храните предпочтительный язык для каждого пользователя в базе данных), то вы можете сбросить LocaleContextHolder

def savedContext = LocaleContextHolder.getLocaleContext() 
LocaleContextHolder.setLocale(correctLocaleForThisUser) 
try { 
    def contents = groovyPageRenderer.render(template:"/layouts/emailparse", model:[mailObj: mailObj]) 
    // etc. etc. 
} finally { 
    LocaleContextHolder.setLocaleContext(savedContext) 
} 

как именно вы определяете correctLocaleForThisUser зависит от ваше приложение. Вы можете сохранить предпочтительный язык каждого пользователя в качестве свойства объекта домена User в базе данных, или если вы используете что-то вроде executor plugin's runAsync из действия контроллера, тогда вы можете сохранить локализацию запроса, пока у вас есть доступ к нему, использовать это в асинхронной задаче:

// SomeController.groovy 
def sendEmail() { 
    // get locale from the thread-local request and save it in a local variable 
    // that the runAsync closure can see 
    Locale localeFromRequest = LocaleContextHolder.getLocale() 
    runAsync { 
    def savedContext = LocaleContextHolder.getLocaleContext() 
    // inject the locale extracted from the request 
    LocaleContextHolder.setLocale(localeFromRequest) 
    try { 
     def contents = groovyPageRenderer.render(template:"/layouts/emailparse", model:[mailObj: mailObj]) 
     // etc. etc. 
    } finally { 
     LocaleContextHolder.setLocaleContext(savedContext) 
    }   
    } 
} 
+0

что такое «correctLocaleForThisUser» .. его показывает мне ошибку ... по этому переменному –

+0

@ user2446714, который был псевдо-кодом «, если у вас есть еще один способ знать правильное язык для использования "... Я добавил несколько примеров того, как вы можете заполнить это, но это действительно специфичный для приложения. –

+0

Я использую почтовый 1.0 плагин для отправки писем –

 Смежные вопросы

  • Нет связанных вопросов^_^