【问题标题】:How to add i18n (or get request locale) in firebase cloud function如何在 Firebase 云功能中添加 i18n(或获取请求区域设置)
【发布时间】:2020-11-25 19:55:25
【问题描述】:

我按照本教程创建了一个带有 firebase 的简单动态内容应用程序:https://firebase.google.com/docs/hosting/functions 例如:

const functions = require('firebase-functions');

exports.bigben = functions.https.onRequest((req, res) => {
  const hours = (new Date().getHours() % 12) + 1  // London is UTC + 1hr;
  res.status(200).send(`<!doctype html>
    <head>
      <title>Time</title>
    </head>
    <body>
      ${'BONG '.repeat(hours)}
    </body>
  </html>`);
});

我的问题是如何将 i18n 应用于此动态内容,以便我可以根据请求的语言环境返回不同的 html 响应。我在 firebase 中阅读了 i18n 文档,但它仅表明使用托管的静态内容是可能的: https://firebase.google.com/docs/hosting/i18n-rewrites

我需要在云函数中完成它,所以我相信我需要一种方法来获取函数本身内部的语言环境信息,有人知道如何做到这一点或有任何不同的方法吗?

【问题讨论】:

  • 我不明白您的示例中哪里需要 i18n,但您可能可以在 Firestore 中使用不同语言创建一个文档并获取您的字符串,但您必须在每次请求时阅读此文档。跨度>
  • 示例中没有必要,它只是一个带有firebase的动态内容示例。在我的情况下,想象返回的 html 可能是其他语言,这取决于请求它的用户从哪里请求
  • "我相信我需要一种方法来获取函数本身内部的语言环境信息" - 什么语言环境信息?最终用户的区域设置,由他们使用的浏览器定义?
  • @user3107720。我认为firestore文档是用不同语言拥有不同句子的唯一方法。但最好不要使用函数,而是使用 Firebase 托管创建自己的 API。
  • 是的@DougStevenson,如果可能的话,这将是完美的云功能

标签: node.js firebase express google-cloud-functions


【解决方案1】:

除了您向其提供的信息之外,Cloud Functions 对最终用户一无所知。因此,您要么必须将语言环境作为输入传递给此函数,要么从其他数据源(例如数据库)中读取它。

如果您想在此函数中为用户的浏览器配置区域设置,您可以使用此问题中的信息从浏览器发送的 HTTP 标头中提取区域设置:

【讨论】:

  • 因此,如果您通过 Cloud Function 进行 SSR,则无需在 118n 托管中配置任何内容(如 firebase.google.com/docs/hosting/i18n-rewrites),对吧?如果为真,则在捕获语言环境时,您必须在响应中使用重定向?
猜你喜欢
  • 2019-10-17
  • 2021-12-07
  • 2020-03-03
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多