ตรรกะ Fulfillment อาจใช้สตริงภาษาที่ได้รับในคำขอทุกรายการเพื่อตอบสนองผู้ใช้ คู่มือนี้จะแสดงวิธีใช้ไลบรารีการแปลของบุคคลที่สามบางรายการภายใน Cloud Function สำหรับ Firebase เพื่อแสดงผลการตอบกลับที่แปลแล้ว
ไลบรารีการแปล
ต่อไปนี้คือไลบรารีที่มีประโยชน์บางส่วนซึ่งควรพิจารณา เพื่อช่วยคุณสร้างคำตอบที่กำหนดเองสำหรับภาษาเฉพาะ
- จุดประสงค์ทั่วไป: I18n-node (ข้อมูลโค้ดตัวอย่างของเราใช้ไลบรารีนี้)
- จุดประสงค์ทั่วไป: format.js
- เขตเวลา/การแปลเขตเวลา: moment.js (ข้อมูลโค้ดตัวอย่างของเราใช้ไลบรารีนี้)
- เงิน/สกุลเงิน: numeral.js
สร้างคำตอบที่แปลแล้ว
ส่วนนี้จะแสดงวิธีสร้างไฟล์ทรัพยากรสตริงที่แปลแล้วซึ่งมีสตริงที่แปลแล้ว และวิธีใช้ไฟล์ทรัพยากรเหล่านี้ใน Function ของ Cloud Function สำหรับ 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-node และ Moments เป็นทรัพยากร Dependency ดังนี้{ ... "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
ให้ประกาศทรัพยากร Dependency สำหรับไลบรารี i18n-node และโมเมนต์ต่อไปนี้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);