簡體   English   中英

像URL這樣的多語言目錄的節點Express API路由

[英]Node express api routes for multilingual directory like url

有誰知道一個示例,或者在這里可以解釋node.js和express如何為一個多語言站點路由? 我正在使用i18n-node進行翻譯和針對不同語言的文件夾(如路由(/ es /,/ de /等))。 這都是靜態路由,但我也有類似apiRoutes.route('/ user / profile')的路由, 開頭使用了“ app”( app.get('/ app / user / profile'),因此請在回答中考慮這一點所以不需要路由到: app.get('/ es / app / user / profile')

現在有15條這樣的路線:

app.get('/terms', function(req, res) {
    res.render('terms',{
...
    });
});

如何為以下路線設置路線:

app.get('/es/terms', function(req, res) {
    res.render('terms',{
   ...
    });
});
  1. 我是否應該復制此路線並為每個類似的地方添加一個區域設置:

     app.get('/es/terms', function(req, res) { res.render('terms',{ ... }); }); 
  2. 或應執行以下操作:

      if cookie['lang'] && cookie['lang'] is in locales // then redirect to /:lang/terms else // show default language in /terms if req.headers["accept-language"] && req.headers["accept-language"] // then redirect to /:lang/terms else //show default language in /terms 
  3. 還是我有其他方法可以遵循良好實踐或更好地遵守標准?

  4. Miro的回答: 如何在node.js(express.js)中獲得瀏覽器語言? 說我應該使用app.all('*',...

這是我需要的嗎?..仍然,它可能有語法錯誤,或者我對這兩個部分不太了解

    var rxLocal = /^\/(de|en)/i;
    ...
    app.get(/\/(de|en)\/login/i, routes.login);

提前致謝

您需要考慮兩件事:

1.如何獲得本地:

接受語言

HTTP協議定義了Accept-Language標頭來管理本地。 這是一種規范化的方法。 您可以使用express的req.acceptsLanguages方法訪問它。

  • +標准化
  • +本國人的支持
  • -最終用戶不容易通過

路徑/ Cookie

您可以從路徑中獲取本地信息。 在表示中,可以使用/:local/rest/of/path類的參數模式/:local/rest/of/path並使用req.param方法在請求對象中進行檢索。

您也可以使用req.cookies屬性(不要忘記設置)從cookie中獲取信息。

為了增加用戶體驗,您可以同時使用兩種方法。 例如,從瀏覽器發送的HTTP標頭中獲取默認語言,但允許用戶在您的應用程序中覆蓋此默認語言並將此參數存儲在cookie中。

2.使用本地:

每種獲取本地方法都可以以不同的方式使用。 例如,我將隨機使用它們,但是它們都是兼容的。

頂級配置。

如果您使用模板引擎,並且控制器可以是本地不可知的。 您可以使用中間件來獲取本地信息並配置渲染引擎。

app.use('/:local' (req, res, next) => {
  let localKey = req.param('local');
  res.locals = // Some ingenious method to get the locales from localKey

  next();
}

檢查res.locals和您的引擎文檔。

在控制器中使用它。

如果本地是控制程序過程的一部分。 您可以直接獲得控制器中的價值。

如果您使用復雜方法來確定本地的最終值,則還可以使用中間件來確定該值並使用它來豐富請求。

app.use((req, res, next) => {
  let local = req.cookies.local;
  if(!local) local = req.acceptsLanguages();
  if(!local) local = 'en-US';
  req.local = local;
}

您也可以使用兩種方法。 這取決於您的需求。 尋找獲得可維護代碼並避免針對您的用例進行復制的最佳方法。

當您使用巫婆影響控制器的中間位置時,請確保在路線之前聲明它們。

您可以使用route參數從URL獲取語言環境,如下所示:

app.get('/:lang/terms', function (req, res) {
    if (req.params === 'es') {
        res.send('¡Hola!');
    else {
        res.send('Hi!');
    }
});

冒號字符告訴Express將req.params.lang路徑的第一個斜杠之間的內容放在req.params.lang 有關詳細信息,請參見快速路由文檔

暫無
暫無

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

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