Logika fulfillment Anda dapat menggunakan string lokalitas yang diterimanya di setiap permintaan untuk merespons pengguna. Panduan ini menunjukkan cara menggunakan beberapa library pelokalan pihak ketiga dalam Cloud Function for Firebase untuk menampilkan respons yang dilokalkan.
Library pelokalan
Berikut ini beberapa library berguna yang dapat dipertimbangkan untuk membantu Anda menghasilkan respons yang disesuaikan untuk lokalitas tertentu:
- Tujuan umum: I18n-node (cuplikan kode contoh kami menggunakan library ini)
- Tujuan umum: format.js
- Pelokalan zona waktu/waktu: moment.js (contoh cuplikan kode kami menggunakan library ini)
- Uang/mata uang: numeral.js
Membuat respons yang dilokalkan
Bagian ini menunjukkan cara membuat file resource string yang dilokalkan yang berisi string yang dilokalkan dan cara menggunakan file resource ini dalam fulfillment Cloud Functions for Firebase.
Untuk membuat respons yang dilokalkan:
- Dalam direktori yang sama dengan file
package.json
danindex.js
Anda, buat direktorilocales
untuk file string yang dilokalkan. Kita akan menyebut direktori ini sebagai<project-dir>/functions/locales
. Buat file resource yang berisi string yang dilokalkan untuk setiap lokalitas yang ingin Anda dukung. Misalnya, jika Anda ingin mendukung lokalitas
en-US
,en-GB
, dande-DE
dengan pesan selamat datang dan tanggal yang dilokalkan, file tersebut akan terlihat seperti ini:<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" }
Dalam file
package.json
, deklarasikan library momen dan node i18n sebagai dependensi:{ ... "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" } }
Dalam file
index.js
, deklarasikan dependensi untuk library momen dan node i18n:const i18n = require('i18n'); const moment = require('moment');
Dalam file
index.js
, konfigurasikan node i18n dengan lokalitas yang didukung:i18n.configure({ locales: ['en-US', 'en-GB', 'de-DE'], directory: __dirname + '/locales', defaultLocale: 'en-US' });
Setel lokalitas untuk library menggunakan
conv.user.locale
dari properti library klien.app.middleware((conv) => { i18n.setLocale(conv.user.locale); moment.locale(conv.user.locale); });
Untuk menampilkan respons yang dilokalkan, panggil
ask()
dengan string yang dilokalkan yang ditampilkan oleh i18n. Cuplikan ini juga berisi fungsi yang menggunakan momen untuk menampilkan tanggal yang dilokalkan: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'))); });
Berikut adalah file index.js lengkap sebagai contoh:
'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);