Node.js 如何在firebase云函数中添加i18n(或获取请求区域设置)

Node.js 如何在firebase云函数中添加i18n(或获取请求区域设置),node.js,firebase,express,google-cloud-functions,Node.js,Firebase,Express,Google Cloud Functions,根据本教程,我使用firebase创建了一个简单的动态内容应用程序:例如: const functions=require('firebase-functions'); exports.bigben=functions.https.onRequest((req,res)=>{ 常数小时=(新日期().getHours()%12)+1//伦敦是UTC+1小时; 资源状态(200)。发送(` 时间 ${'BONG'。重复(小时)} `); }); 我的问题是如何将i18n应用于此动态内容,以便根据

根据本教程,我使用firebase创建了一个简单的动态内容应用程序:例如:

const functions=require('firebase-functions');
exports.bigben=functions.https.onRequest((req,res)=>{
常数小时=(新日期().getHours()%12)+1//伦敦是UTC+1小时;
资源状态(200)。发送(`
时间
${'BONG'。重复(小时)}
`);
});
我的问题是如何将i18n应用于此动态内容,以便根据请求的区域设置返回不同的html响应。我在firebase中阅读了i18n文档,但它仅表明使用托管的静态内容是可行的:


我需要在云函数内部完成,所以我相信我需要一种方法来获取函数本身内部的区域设置信息,有人知道如何实现这一点或有什么不同的方法吗?

云函数除了您向其提供的信息外,对最终用户一无所知。因此,您要么将区域设置作为输入传递到此函数,要么从其他数据源(如数据库)读取它

如果要在此函数中使用用户的浏览器配置语言环境,可以使用此问题中的信息从浏览器发送的HTTP标头中提取语言环境:


除了您向最终用户提供的信息之外,云功能对最终用户一无所知。因此,您要么将区域设置作为输入传递到此函数,要么从其他数据源(如数据库)读取它

如果要在此函数中使用用户的浏览器配置语言环境,可以使用此问题中的信息从浏览器发送的HTTP标头中提取语言环境:


我不明白您的示例中哪里需要i18n,但可能您可以在firestore中使用不同的语言创建一个文档并获取您的字符串,但您必须在每次请求时阅读此文档。在示例中没有必要,它只是firebase的动态内容示例。在我的例子中,假设返回的html可能是其他语言的,这取决于请求它的用户从哪里请求“我相信我需要一种方法来获取函数本身内部的区域设置信息”——什么区域设置信息?最终用户的区域设置,由他们使用的浏览器定义?@user3107720。我认为firestore文档是用不同语言表达不同句子的唯一方法。但最好不要使用函数,而是使用firebase hosting创建自己的API。是的@DougStevenson,如果可能的话,在云功能中这将是完美的。我不知道你的示例中哪里需要i18n,但可能是你可以在firestore中使用不同的语言创建一个文档并获取字符串,但你必须在每次请求时阅读此文档。在示例中,没有必要,这只是firebase动态内容的一个例子。在我的例子中,假设返回的html可能是其他语言的,这取决于请求它的用户从哪里请求“我相信我需要一种方法来获取函数本身内部的区域设置信息”——什么区域设置信息?最终用户的区域设置,由他们使用的浏览器定义?@user3107720。我认为firestore文档是用不同语言表达不同句子的唯一方法。但是,最好不要使用函数,而是使用firebase hosting创建自己的API。是的@DougStevenson,如果可能的话,在云函数内部这将是完美的。因此,如果您通过云函数进行SSR,您不必在118n hosting中配置任何内容(比如),对吗?如果为true,则在捕获区域设置时,必须在响应中使用重定向?因此,如果通过云函数执行SSR,则不必在118n主机中配置任何内容(如),对吗?如果为true,则在捕获区域设置时必须在响应中使用重定向?
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>`);
});