Logika realizacji zamówień może wykorzystywać ciąg znaków dotyczący regionu otrzymywany w każdym żądaniu w celu obsługi odpowiedzi użytkowników. W tym przewodniku pokazujemy, jak za pomocą funkcji w Cloud Functions dla Firebase używać niektórych zewnętrznych bibliotek lokalizacji do zwracania zlokalizowanych odpowiedzi.
Biblioteki lokalizacji
Oto kilka przydatnych bibliotek, które pomogą Ci w generowaniu odpowiedzi niestandardowych dla określonych języków:
- Do zwykłych obciążeń: I18n-node (ta biblioteka jest przykładowa dla naszych przykładowych fragmentów kodu)
- Do zwykłych obciążeń: format.js
- Lokalizacja strefy czasowej i czasu: moment.js (nasz przykładowy kod korzysta z tej biblioteki)
- Pieniądze/waluta: numeral.js
Twórz zlokalizowane odpowiedzi
W tej sekcji dowiesz się, jak utworzyć zlokalizowane pliki zasobów łańcuchowych, które zawierają zlokalizowane ciągi znaków, oraz jak używać tych plików zasobów w funkcji w Cloud Functions na potrzeby realizacji Firebase.
Aby utworzyć zlokalizowane odpowiedzi:
- W tym samym katalogu co pliki
package.json
iindex.js
utwórz kataloglocales
na zlokalizowane pliki tekstowe. Będziemy określać ten katalog jako<project-dir>/functions/locales
. Utwórz plik zasobów zawierający zlokalizowane ciągi znaków dla każdego obsługiwanego języka. Jeśli na przykład chcesz obsługiwać języki
en-US
,en-GB
ide-DE
ze zlokalizowanymi wiadomościami powitalnymi i datami, pliki te mogą wyglądać tak:<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" }
W pliku
package.json
zadeklaruj biblioteki i18n-node i Moment jako zależności:{ ... "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" } }
W pliku
index.js
zadeklaruj zależności dla bibliotek węzłów i18n i bibliotek momentów:const i18n = require('i18n'); const moment = require('moment');
W pliku
index.js
skonfiguruj węzeł i18n z obsługiwanymi ustawieniami języka:i18n.configure({ locales: ['en-US', 'en-GB', 'de-DE'], directory: __dirname + '/locales', defaultLocale: 'en-US' });
Ustaw język dla bibliotek za pomocą polecenia
conv.user.locale
z usługi biblioteki klienta.app.middleware((conv) => { i18n.setLocale(conv.user.locale); moment.locale(conv.user.locale); });
Aby zwrócić zlokalizowaną odpowiedź, wywołaj funkcję
ask()
ze zlokalizowanym ciągiem znaków zwracanym przez i18n. Ten fragment kodu zawiera też funkcję, która wykorzystuje moment do zwrócenia zlokalizowanej daty: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'))); });
Oto przykładowy plik index.js:
'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);