您的执行方式逻辑可以使用它在每个请求中收到的语言区域字符串, 迎合用户的需求。本指南将为您介绍如何使用 Cloud Functions for Firebase 中的本地化库,以返回 本地响应。
本地化库
下面是一些值得考虑的实用库 针对特定语言区域生成自定义响应:
- 通用:I18n-node(我们的 使用此库的示例代码段)
- 通用:format.js
- 时区/时间本地化:moment.js(我们的 使用此库的示例代码段)
- 金额/币种:numeral.js
创建本地化响应
本部分介绍了如何创建经过本地化的字符串资源文件, 包含本地化的字符串以及如何在 Cloud SQL 中使用这些资源文件 Firebase 执行方式的函数。
如要创建本地化响应,请按以下步骤操作:
- 在
package.json
和index.js
文件所在的目录中,创建locales
目录,用于存放本地化字符串文件。我们会将其称为 目录指定为<project-dir>/functions/locales
。 创建一个资源文件,其中包含已翻译的每个语言区域的本地化字符串 支持的大小。例如,如果您想要支持
en-US
、en-GB
、 以及de-DE
个语言区域(包含本地化的欢迎和日期消息),这些文件 可能如下所示:<project-dir>/functions/locales/en-US.json
{ "WELCOME_BASIC": "Hello, welcome!", "DATE": "The date is %s" }
<project-dir>/functions/locales/en-GB.json
{ "WELCOME_BASIC": "Hello, welcome!", "DATE": "The date is %s" }
<project-dir>/functions/locales/de-DE.json
{ "WELCOME_BASIC": "Hallo und willkommen!", "DATE": "Das Datum ist %s" }
在
package.json
文件中,将国际化节点和时刻库声明为 依赖项:{ ... "dependencies": { "actions-on-google": "^2.7.0", "firebase-admin": "^7.2.1", "firebase-functions": "^2.2.1", "i18n": "^0.8.3", "moment": "^2.22.1" } }
在
index.js
文件中,声明 i18n 节点和时刻的依赖项 库:const i18n = require('i18n'); const moment = require('moment');
在
index.js
文件中,使用受支持的语言区域配置 i18n- 节点:i18n.configure({ locales: ['en-US', 'en-GB', 'de-DE'], directory: __dirname + '/locales', defaultLocale: 'en-US' });
使用客户端库中的
conv.user.locale
为库设置语言区域 属性。app.middleware((conv) => { i18n.setLocale(conv.user.locale); moment.locale(conv.user.locale); });
如需返回本地化响应,请使用本地化字符串调用
ask()
由 i18n 返回。此代码段还包含一个使用时刻的函数 以返回本地化日期:app.intent('Default Welcome Intent', (conv) => { // must not be async for i18n conv.ask(i18n.__('WELCOME_BASIC')); }); app.intent('date', (conv) => { // must not be async for i18n conv.ask(i18n.__('DATE', moment().format('LL'))); });
下面是一个完整的 index.js 文件示例:
'use strict'; const {dialogflow} = require('actions-on-google'); const functions = require('firebase-functions'); const i18n = require('i18n'); const moment = require('moment'); i18n.configure({ locales: ['en-US', 'en-GB', 'de-DE'], directory: __dirname + '/locales', defaultLocale: 'en-US' }); const app = dialogflow({debug: true}); app.middleware((conv) => { i18n.setLocale(conv.user.locale); moment.locale(conv.user.locale); }); app.intent('Default Welcome Intent', (conv) => { // must not be async for i18n conv.ask(i18n.__('WELCOME_BASIC')); }); app.intent('date', (conv) => { // must not be async for i18n conv.ask(i18n.__('DATE', moment().format('LL'))); }); exports.demoAction = functions.https.onRequest(app);