Rythm: создать новый движок или установить язык / локаль для существующего экземпляра движка для каждого запроса
Ритм может быть использован как одиночка или создан как обычный объект. В настоящее время я создаю его один раз в веб-приложении в сервлете. Init()
метод. (Это почти то же самое, что и использование синглтона, так как я создаю его только один раз)
Теперь мне нужно добавить поддержку i18n на мой сайт и динамически установить язык перед рендерингом.
Я мог бы сделать это:
engine.setLocale(userLocale);
engine.render(template,arguments);
Я предполагаю, что если я использую синглтон (или единственный экземпляр, созданный в сервлете), то я могу получить условие гонки между двумя операторами.
- Это правильно или нет расы?
- Должен ли я создать экземпляр Rythm для каждого запроса?
- Есть ли другой способ изменить язык для каждого рендеринга без изменения состояния движка?
1 ответ
Сначала в последней версии ритма, вы должны позвонить engine.prepare(Locale)
не engine.setLocale(Locale)
;
Теперь, чтобы ответить на ваши вопросы:
- Это правильно или нет расы?
Это НЕ вызовет состояние гонки, потому что внутри кода, который он использует ThreadLocal
сохранить настройки рендера
- Должен ли я создать экземпляр Rythm для каждого запроса?
Определенно НЕТ
- Есть ли другой способ изменить язык для каждого рендеринга без изменения состояния движка?
Язык и локаль НЕ являются состояниями уровня двигателя, они являются состояниями для каждого запроса. Однако язык и локаль по умолчанию могут быть настроены на уровне движка