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

يمكن لمنطق التنفيذ استخدام سلسلة اللغة التي يتلقّاها في كل طلب لتقديم الردود للمستخدمين. يوضِّح لك هذا الدليل كيفية استخدام بعض مكتبات الأقلمة التابعة لجهات خارجية ضمن دالة Cloud في Firebase لعرض ردود مترجَمة.

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

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

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

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

يوضِّح لك هذا القسم كيفية إنشاء ملفات موارد سلسلة مترجَمة تحتوي على سلاسل مترجَمة وكيفية استخدام ملفات الموارد هذه في دالة Cloud لتنفيذ 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-node ولحظات الانتقال كتبعيات على النحو التالي:

    {
     ...
     "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-node وSim:

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

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

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