Die Auftragsausführungslogik kann den Sprachstring, den sie in jeder Anfrage erhält, verwenden, um Antworten an Nutzer zu verteilen. In diesem Leitfaden erfahren Sie, wie Sie einige Lokalisierungsbibliotheken von Drittanbietern in einer Cloud Functions for Firebase-Funktion verwenden, um lokalisierte Antworten zurückzugeben.
Lokalisierungsbibliotheken
Im Folgenden finden Sie einige hilfreiche Bibliotheken, mit denen Sie benutzerdefinierte Antworten für bestimmte Sprachen generieren können:
- Für allgemeine Zwecke: I18n-node (diese Bibliothek wird in unseren Beispiel-Code-Snippets verwendet)
- Für allgemeine Zwecke: format.js
- Lokalisierung von Zeitzone/Zeit: moment.js (diese Bibliothek wird in unseren Beispiel-Code-Snippets verwendet)
- Geld/Währung: numeral.js
Lokalisierte Antworten erstellen
In diesem Abschnitt erfahren Sie, wie Sie lokalisierte Stringressourcendateien erstellen, die lokalisierte Strings enthalten, und wie Sie diese Ressourcendateien in der Cloud Functions for Firebase-Auftragsausführung verwenden.
So erstellst du lokalisierte Antworten:
- Erstelle im selben Verzeichnis wie deine
package.json
- undindex.js
-Dateien einlocales
-Verzeichnis für deine lokalisierten Stringdateien. Wir nennen dieses Verzeichnis<project-dir>/functions/locales
. Erstellen Sie eine Ressourcendatei, die lokalisierte Strings für jede Sprache enthält, die Sie unterstützen möchten. Wenn Sie beispielsweise die Sprachen
en-US
,en-GB
undde-DE
mit lokalisierten Willkommens- und Datumsnachrichten unterstützen möchten, könnten diese Dateien so aussehen:<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" }
Deklarieren Sie in der Datei
package.json
die i18n-node- und Moment-Bibliotheken als Abhängigkeiten:{ ... "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" } }
Deklarieren Sie in der Datei
index.js
die Abhängigkeiten für die i18n-node- und Momentbibliotheken:const i18n = require('i18n'); const moment = require('moment');
Konfigurieren Sie in der Datei
index.js
den i18n-Knoten mit Ihren unterstützten Sprachen:i18n.configure({ locales: ['en-US', 'en-GB', 'de-DE'], directory: __dirname + '/locales', defaultLocale: 'en-US' });
Legen Sie die Sprache für die Bibliotheken mit
conv.user.locale
aus dem Attribut der Clientbibliothek fest.app.middleware((conv) => { i18n.setLocale(conv.user.locale); moment.locale(conv.user.locale); });
Um eine lokalisierte Antwort zurückzugeben, rufst du
ask()
mit einem lokalisierten String auf, der von i18n zurückgegeben wird. Dieses Snippet enthält auch eine Funktion, die den Moment nutzt, um ein lokalisiertes Datum zurückzugeben: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'))); });
Hier ein Beispiel für eine vollständige index.js-Datei:
'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);