Ваша логика выполнения может использовать строку языкового стандарта, которую она получает в каждом запросе, для обработки ответов пользователей. В этом руководстве показано, как использовать некоторые сторонние библиотеки локализации в облачной функции для Firebase для возврата локализованных ответов.
Библиотеки локализации
Вот несколько полезных библиотек, которые помогут вам генерировать индивидуальные ответы для конкретных языков:
- Общее назначение: I18n-node (в наших примерах кода используется эта библиотека)
- Общее назначение: format.js
- Локализация часового пояса/времени: moment.js (в наших примерах кода используется эта библиотека)
- Деньги/валюта: numeral.js
Создавайте локализованные ответы
В этом разделе показано, как создавать локализованные файлы строковых ресурсов, которые содержат локализованные строки, и как использовать эти файлы ресурсов в вашей облачной функции для выполнения Firebase.
Чтобы создать локализованные ответы:
- В том же каталоге, где находятся файлы
package.jsonиindex.js, создайте каталогlocalesдля локализованных строковых файлов. Мы будем называть этот каталог<project-dir>/functions/locales. Создайте файл ресурсов, содержащий локализованные строки для каждого языкового стандарта, который вы хотите поддерживать. Например, если вы хотите поддерживать локали
en-US,en-GBиde-DEс локализованными приветствиями и сообщениями о дате, эти файлы могут выглядеть следующим образом:<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" }В файле
package.jsonобъявите библиотеки i18n-node и moment как зависимости:{ ... "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" } }В файле
index.jsобъявите зависимости для библиотек i18n-node и moment:const i18n = require('i18n'); const moment = require('moment');
В файле
index.jsнастройте узел i18n с поддерживаемыми локалями:i18n.configure({ locales: ['en-US', 'en-GB', 'de-DE'], directory: __dirname + '/locales', defaultLocale: 'en-US' });
Установите локаль для библиотек, используя
conv.user.localeиз свойства клиентской библиотеки.app.middleware((conv) => { i18n.setLocale(conv.user.locale); moment.locale(conv.user.locale); });Чтобы вернуть локализованный ответ, вызовите функцию
ask()с локализованной строкой, возвращаемой i18n. Этот фрагмент также содержит функцию, которая использует moment для возврата локализованной даты: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'))); });
В качестве примера приведен полный файл 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);