A lógica de fulfillment pode usar a string de localidade recebida em cada solicitação para para fornecer respostas aos usuários. Neste guia, mostramos como usar algumas bibliotecas de localização de terceiros em uma Função do Cloud para Firebase e retornar respostas localizadas.
Bibliotecas de localização
Confira algumas bibliotecas úteis para ajudar você gerar respostas personalizadas para localidades específicas:
- Uso geral: I18n-node (nosso exemplos de snippets de código usam essa biblioteca)
- Uso geral: format.js
- Localização de fuso horário/hora: moment.js (nosso exemplos de snippets de código usam essa biblioteca)
- Dinheiro/moeda: numeral.js
Criar respostas localizadas
Esta seção mostra como criar arquivos de recursos de string localizados que contêm strings localizadas e como usar esses arquivos de recursos no Função para fulfillment do Firebase.
Para criar respostas localizadas:
- No mesmo diretório dos arquivos
package.json
eindex.js
, crie um diretóriolocales
para os arquivos de string localizados. Vamos nos referir a isso como<project-dir>/functions/locales
. Criar um arquivo de recurso que contenha strings localizadas para cada localidade que você quer apoiar. Por exemplo, se você quiser oferecer suporte a
en-US
,en-GB
, ede-DE
com mensagens localizadas de data e boas-vindas, esses arquivos pode ter esta aparência:<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" }
No arquivo
package.json
, declare as bibliotecas i18n-node e moment como dependencies:{ ... "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" } }
No arquivo
index.js
, declare as dependências do i18n-node e momento bibliotecas:const i18n = require('i18n'); const moment = require('moment');
No arquivo
index.js
, configure o i18n-node com as localidades compatíveis:i18n.configure({ locales: ['en-US', 'en-GB', 'de-DE'], directory: __dirname + '/locales', defaultLocale: 'en-US' });
Defina a localidade das bibliotecas usando
conv.user.locale
da propriedade da biblioteca de cliente.app.middleware((conv) => { i18n.setLocale(conv.user.locale); moment.locale(conv.user.locale); });
Para retornar uma resposta localizada, chame
ask()
com uma string localizada retornados por i18n. Esse snippet também contém uma função que usa moment. para retornar uma data localizada: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'))); });
Confira um arquivo index.js completo como exemplo:
'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);