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 bibliotecas de localização em uma função do Cloud para Firebase a fim de 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.jsoneindex.js, crie um diretóriolocalespara 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, e- de-DEcom 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 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 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' }); 
- Definir a localidade das bibliotecas usando - conv.user.localeda 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);
