[英]How to handle language specific subdomains in express?
使用nodejs和express,我嘗試根據路由中的“子文件夾”設置語言。 此語言參數是可選的。 有沒有一種方法,而不必更改所有路由以包含可選的language參數?
例如,我希望mydomain.tld / mypath /和mydomain.tld / de / mypath /為/ mypath /觸發相同的路由,並使用一個中間件來檢測/ de /(如果存在)並相應地設置區域設置變量。
您將不得不檢查路由中是否有語言標簽的特殊情況,然后在中間件中重寫req.url
,設置正確的語言環境變量。 這是一個如何完成此操作的簡單示例。
var languages = ["de", ...];
function routeLanguage(req, res, next) {
var lang, parts = req.path.split("/");
if (parts[1] && (lang = languages[parts[1]])) {
req.url = req.url.replace(/^\/[^/]*/, "");
// set locale vars using lang
}
return next();
}
該中間件會將任何“語言路徑”重新路由到正常路由( /de/mypath
轉到/mypath
)。
請注意,如果您將語言標記用作路徑,則這對於默認語言將不起作用,即/de
將使用de
作為語言路由到/
,而/de/de
將路由到/de
。
更新:
如果您假設中間件的掛載點,這會在某種程度上簡化,因為express可以在路徑上使用它的正則表達式解析。 您還可以通過將解析的語言分配給例如req.lang
來將本地化邏輯推遲到堆棧的req.lang
。
app.use(/^\/(de|en|...)\//, function (req, res, next) {
req.lang = req.params[0];
req.url = req.url.replace(/^\/[^/]*/, "");
next();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.