Sua lógica de fulfillment pode usar a string de localidade recebida em cada solicitação para atender às respostas dos usuários. Neste guia, mostramos como usar algumas bibliotecas de localização de terceiros em uma função do Cloud para Firebase para retornar respostas localizadas.
Bibliotecas de localização
Veja algumas bibliotecas úteis para ajudar você a gerar respostas personalizadas para localidades específicas:
- Uso geral: I18n-node (nossos snippets de código de exemplo usam essa biblioteca).
- Uso geral: format.js
- Localização de fuso horário/horário: moment.js (nossos snippets de código de exemplo usam essa biblioteca).
- Dinheiro/moeda: numeral.js
Criar respostas localizadas
Nesta seção, mostramos como criar arquivos de recursos de string localizados que contêm strings localizadas e como usar esses arquivos de recursos no fulfillment do Cloud Functions para Firebase.
Para criar respostas localizadas:
- No mesmo diretório que os arquivos
package.json
eindex.js
, crie um diretóriolocales
para os arquivos de string localizados. Chamaremos esse diretório de<project-dir>/functions/locales
. Crie um arquivo de recursos que contenha strings localizadas para cada localidade a que você quer oferecer suporte. Por exemplo, se você quiser oferecer suporte às localidades
en-US
,en-GB
ede-DE
com mensagens de boas-vindas e de data localizadas, esses arquivos podem 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 momento como dependências:{ ... "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 das bibliotecas i18n-node e momento:const i18n = require('i18n'); const moment = require('moment');
No arquivo
index.js
, configure o nó i18n 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 retornada por i18n. Este snippet também contém uma função que usa o momento 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 exemplo de arquivo index.js completo:
'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);