توصيل الطلبات (Dialogflow)

يمكن لمنطق التنفيذ استخدام سلسلة اللغة التي يتلقاها في كل طلب وتلبية احتياجات المستخدمين. يوضّح لك هذا الدليل كيفية استخدام خدمات تابعة لجهات خارجية لعرض مكتبات الأقلمة ضمن إحدى وظائف السحابة الإلكترونية حتى يمكن لمنصّة Firebase عرض ردودًا مترجَمة.

مكتبات الأقلمة

فيما يلي بعض المكتبات المفيدة التي يجب أخذها في الاعتبار لمساعدتك إنشاء ردود مخصصة للغات معينة:

  • الغرض العام: I18n-node ( مثال لمقتطفات الرمز التي تستخدم هذه المكتبة)
  • الأغراض العامة: format.js
  • أقلمة المنطقة الزمنية/الوقت: moment.js ( مثال لمقتطفات الرمز التي تستخدم هذه المكتبة)
  • مال/عملة: numeral.js

إنشاء ردود مترجَمة

يوضّح لك هذا القسم كيفية إنشاء ملفات لموارد السلاسل النصية المترجَمة والتي تحتوي على سلاسل معدَّلة بما يناسب السوق المحلية وكيفية استخدام ملفات الموارد هذه في السحابة الإلكترونية وظيفة تنفيذ Firebase.

لإنشاء ردود مترجَمة:

  1. في الدليل نفسه الذي يضم ملفات package.json وindex.js، أنشئ دليل locales لملفات السلسلة المترجَمة سنشير إلى هذا الدليل باسم <project-dir>/functions/locales.
  2. أنشئ ملف موارد يحتوي على سلاسل مترجمة لكل لغة التي تريد دعمها. على سبيل المثال، إذا كنت تريد إتاحة 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"
    }
    
  3. في ملف package.json، تعريف مكتبات العُقدة i18n واللحظات على أنّها والتبعيات:

    {
     ...
     "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"
     }
    }
    
  4. في ملف index.js، يجب الإعلان عن التبعيات لعقدة i18n واللحظة المكتبات:

    const i18n = require('i18n');
    const moment = require('moment');

  5. في ملف index.js، اضبط عقدة i18n باللغات المتوافقة:

    i18n.configure({
      locales: ['en-US', 'en-GB', 'de-DE'],
      directory: __dirname + '/locales',
      defaultLocale: 'en-US'
    });

  6. ضبط اللغة للمكتبات باستخدام conv.user.locale من مكتبة البرامج الموقع.

    app.middleware((conv) => {
      i18n.setLocale(conv.user.locale);
      moment.locale(conv.user.locale);
    });

  7. لعرض رد مترجم، يمكنك طلب ask() باستخدام سلسلة مترجمة. التي تم إرجاعها بواسطة i18n. يحتوي هذا المقتطف أيضًا على دالة تستخدم اللحظة لعرض تاريخ مترجَم:

    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);