執行要求邏輯可使用在每個要求中收到的語言代碼字串, 為使用者提供回覆本指南將說明如何使用 在 Cloud 函式中傳回本地化程式庫 本地化回應
本地化程式庫
以下列舉幾個實用的程式庫供您參考 生成特定語言代碼的自訂回應:
- 一般用途:I18n-node (我們的 程式碼片段範例使用這個程式庫)
- 一般用途:format.js
- 時區/時間本地化:moment.js (我們的 程式碼片段範例使用這個程式庫)
- 金額/貨幣:numeral.js
建立本地化回應
本節將說明如何建立本地化字串資源檔案, 包含本地化字串,以及如何在 Cloud 中使用這些資源檔案 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檔案中,宣告 i18n 節點和 PM 程式庫為 依附元件:- { ... "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-node:- 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);
