簡體   English   中英

如何處理快遞中特定於語言的子域?

[英]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.

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