簡體   English   中英

節奏:根據請求創建新引擎或在現有引擎實例上設置語言/語言環境

[英]Rythm: create new engine or set Language/Locale on existing engine instance per request

節奏可以用作單例或實例化為普通對象。 目前,我在Servlet Init()方法的webapp中實例化了它一次。 (這與使用單例幾乎相同,因為我只創建了一次)

現在,我需要在網站上添加i18n支持,並且需要在渲染之前動態設置語言。

我可以這樣做:

engine.setLocale(userLocale);
engine.render(template,arguments);

我假設如果我使用一個singleton(或在servlet中創建的單個實例),那么我可能會在兩個語句之間獲得競爭條件。

  1. 這是正確的還是沒有比賽條件?
  2. 我應該為每個請求創建一個Rythm實例嗎?
  3. 是否有另一種方法可以更改每個渲染的語言而不更改引擎狀態?

首先,在最新版的engine.prepare(Locale) ,您應該調用engine.prepare(Locale) ,而不是engine.setLocale(Locale)

現在回答您的問題:

  1. 這是正確的還是沒有比賽條件?

它不會導致競爭狀態,因為它在代碼內部使用ThreadLocal存儲渲染設置。

  1. 我應該為每個請求創建一個Rythm實例嗎?

絕對沒有

  1. 是否有另一種方法可以更改每個渲染的語言而不更改引擎狀態?

語言和語言環境不是引擎級別的狀態,它們是每個請求的狀態。 但是,可以在引擎級別配置默認語言和語言環境

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM