Ваша логика выполнения может использовать строку языкового стандарта, которую она получает в каждом запросе, для обработки ответов пользователей. В этом руководстве показано, как использовать некоторые сторонние библиотеки локализации в облачной функции для 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);