Logic thực hiện của bạn có thể sử dụng chuỗi ngôn ngữ mà nó nhận được trong mọi yêu cầu để phân phối phản hồi cho người dùng. Hướng dẫn này cho bạn biết cách sử dụng một số thư viện bản địa hoá của bên thứ ba trong Chức năng đám mây cho Firebase để trả về các phản hồi đã bản địa hoá.
Thư viện bản địa hoá
Dưới đây là một số thư viện hữu ích nên xem xét để giúp bạn tạo câu trả lời tuỳ chỉnh cho các ngôn ngữ cụ thể:
- Mục đích chung: I18n-node (đoạn mã ví dụ của chúng tôi sử dụng thư viện này)
- Mục đích chung: format.js
- Bản địa hoá múi giờ/thời gian: moment.js (đoạn mã mẫu của chúng tôi sử dụng thư viện này)
- Tiền/đơn vị tiền tệ: numeral.js
Tạo câu trả lời đã bản địa hoá
Phần này cho bạn biết cách tạo tệp tài nguyên chuỗi đã bản địa hoá chứa các chuỗi đã bản địa hoá và cách sử dụng các tệp tài nguyên này trong phương thức thực hiện Cloud cho Firebase.
Cách tạo câu trả lời đã bản địa hoá:
- Trong cùng thư mục với các tệp
package.json
vàindex.js
, hãy tạo một thư mụclocales
cho các tệp chuỗi đã được bản địa hoá. Chúng tôi sẽ gọi thư mục này là<project-dir>/functions/locales
. Tạo một tệp tài nguyên chứa các chuỗi đã bản địa hoá cho mọi ngôn ngữ mà bạn muốn hỗ trợ. Ví dụ: nếu bạn muốn hỗ trợ các ngôn ngữ
en-US
,en-GB
vàde-DE
có thông báo chào mừng và thông báo ngày đã bản địa hoá, thì các tệp đó có thể có dạng như sau:<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" }
Trong tệp
package.json
, hãy khai báo thư viện nút i18n và thư viện khoảnh khắc dưới dạng phần phụ thuộc:{ ... "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" } }
Trong tệp
index.js
, hãy khai báo các phần phụ thuộc cho thư viện nút i18n và thư viện khoảnh khắc:const i18n = require('i18n'); const moment = require('moment');
Trong tệp
index.js
, hãy định cấu hình nút i18n bằng các ngôn ngữ được hỗ trợ:i18n.configure({ locales: ['en-US', 'en-GB', 'de-DE'], directory: __dirname + '/locales', defaultLocale: 'en-US' });
Đặt ngôn ngữ cho thư viện bằng cách sử dụng
conv.user.locale
từ thuộc tính thư viện ứng dụng.app.middleware((conv) => { i18n.setLocale(conv.user.locale); moment.locale(conv.user.locale); });
Để trả về một phản hồi đã bản địa hoá, hãy gọi
ask()
với một chuỗi đã bản địa hoá do i18n trả về. Đoạn mã này cũng chứa một hàm sử dụng khoảnh khắc để trả về ngày đã bản địa hoá: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'))); });
Dưới đây là một tệp index.js hoàn chỉnh làm ví dụ:
'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);