मैसेज को स्थानीय भाषा में उपलब्ध कराएं

इस दस्तावेज़ में, FCM स्थानीय भाषा के फ़ील्ड (*_loc_key और *_loc_args) के इस्तेमाल के बारे में बताया गया है. इनकी मदद से ऐसी सूचनाएं भेजी जा सकती हैं जो Android और iOS पर, उपयोगकर्ता की भाषा की सेटिंग के हिसाब से अपने-आप बदल जाती हैं. इससे आपका सर्वर, भाषा से जुड़ा एक पेलोड भेज सकता है. साथ ही, अनुवाद करने का काम क्लाइंट डिवाइस को सौंप सकता है.

FCM स्थानीय भाषा के मुताबिक बनाने की खास जानकारी

अपने ऐप्लिकेशन को स्थानीय भाषा में उपलब्ध कराने के लिए, ऐसी कुंजी भेजी जा सकती है जो उपयोगकर्ता के ऐप्लिकेशन में मौजूद स्ट्रिंग रिसॉर्स एंट्री से मेल खाती हो. डिवाइस का ऑपरेटिंग सिस्टम (ओएस), डाइनैमिक आर्ग्युमेंट को ढूंढने और डालने का काम करता है.

FCM फ़ील्ड ब्यौरा क्लाइंट की कार्रवाई
title_loc_key क्लाइंट ऐप्लिकेशन के स्ट्रिंग रिसॉर्स में टाइटल स्ट्रिंग के लिए कुंजी. इसके बाद, ओएस ऐप्लिकेशन की स्थानीय भाषा में मौजूद फ़ाइलों में, उससे मिलती-जुलती स्ट्रिंग ढूंढता है.
body_loc_key क्लाइंट ऐप्लिकेशन के स्ट्रिंग रिसॉर्स में मौजूद बॉडी स्ट्रिंग के लिए कुंजी. इसके बाद, ओएस ऐप्लिकेशन की स्थानीय भाषा में मौजूद फ़ाइलों में, उससे मिलती-जुलती स्ट्रिंग ढूंढता है.
title_loc_args डाइनैमिक स्ट्रिंग वैल्यू का एक ऐसा कलेक्शन जिसे title_loc_key स्ट्रिंग में बदला जाना है. ओएस, इन आर्ग्युमेंट को स्थानीय भाषा में मौजूद स्ट्रिंग के फ़ॉर्मैट स्पेसिफ़ायर में डालता है.
body_loc_args डाइनैमिक स्ट्रिंग वैल्यू का एक ऐसा कलेक्शन जिसे body_loc_key स्ट्रिंग में बदला जाना है. ओएस, इन आर्ग्युमेंट को स्थानीय भाषा में मौजूद स्ट्रिंग के फ़ॉर्मैट स्पेसिफ़ायर में डालता है.

पहला चरण: अपने ऐप्लिकेशन में स्थानीय भाषा में स्ट्रिंग रिसॉर्स तय करना

FCM को स्थानीय भाषा में उपलब्ध कराने की सुविधा का इस्तेमाल शुरू करने के लिए, यह पक्का करना ज़रूरी है कि आपके Android और iOS प्रोजेक्ट में ज़रूरी अनुवाद उपलब्ध हों.

Android का सेटअप

स्ट्रिंग रिसॉर्स तय करें: res/values/strings.xml में अपनी डिफ़ॉल्ट भाषा की स्ट्रिंग डालें. *_loc_args में पास की जाने वाली किसी भी डाइनैमिक वैल्यू के लिए, फ़ॉर्मैट स्पेसिफ़ायर (%1$s, %2$d वगैरह) का इस्तेमाल करें.

डिफ़ॉल्ट (res/values/strings.xml):

<resources>
    <string name="welcome_title">Welcome, %1$s!</string>
    <string name="new_message_body">You have %1$d new message(s) from %2$s.</string>
</resources>

अनुवाद जोड़ना: आईएसओ भाषा कोड का इस्तेमाल करके, भाषा के हिसाब से डायरेक्ट्री बनाएं. उदाहरण के लिए, values-fr फ़्रेंच के लिए, values-es स्पैनिश के लिए) और कुंजियों का अनुवाद करें.

फ़्रेंच (res/values-fr/strings.xml):

<resources>
    <string name="welcome_title">Bienvenue, %1$s!</string>
    <string name="new_message_body">Vous avez %1$d nouveau(x) message(s) de %2$s.</string>
</resources>

ज़्यादा जानकारी के लिए, यह दस्तावेज़ पढ़ें:

iOS डिवाइस पर सेटअप करना

स्ट्रिंग रिसॉर्स तय करना: अपनी बेस स्ट्रिंग को Localizable.strings फ़ाइल में तय करें. आम तौर पर, यह Base.lproj फ़ोल्डर या स्ट्रिंग कैटलॉग में होता है. डाइनैमिक वैल्यू के लिए, फ़ॉर्मैट स्पेसिफ़ायर (%@, %ld वगैरह) का इस्तेमाल करें. आम तौर पर, की को सभी कैपिटल लेटर में लिखा जाता है.

डिफ़ॉल्ट (अंग्रेज़ी Localizable.strings):

"WELCOME_TITLE" = "Welcome, %@!";
"NEW_MESSAGE_BODY" = "You have %ld new message(s) from %@.";

अनुवाद जोड़ें: भाषा के हिसाब से .lproj फ़ोल्डर बनाएं या स्ट्रिंग कैटलॉग का इस्तेमाल करके स्थानीय भाषाएं जोड़ें. इसके बाद, कुंजियों का अनुवाद करें.

फ़्रेंच (fr.lproj/Localizable.strings):

"WELCOME_TITLE" = "Bienvenue, %@!";
"NEW_MESSAGE_BODY" = "Vous avez %ld nouveau(x) message(s) de %@.";

ज़्यादा जानकारी के लिए, यह दस्तावेज़ पढ़ें:

दूसरा चरण: FCM मैसेज पेलोड बनाना

FCM HTTP v1 API का इस्तेमाल करके सूचना भेजते समय, आपका सर्वर एक ऐसा पेलोड बनाता है जो संसाधन कुंजियों (*_loc_key) और डाइनैमिक डेटा (*_loc_args) का इस्तेमाल स्ट्रिंग के ऐरे के तौर पर करता है.

उदाहरण FCM एचटीटीपी v1 पेलोड

स्थानीय भाषा में अनुवाद करने की कुंजियां, प्लैटफ़ॉर्म के हिसाब से ओवरराइड किए गए ब्लॉक (android.notification और apns.payload.aps.alert) में रखी जाती हैं.

{
  "message": {
    "token": "DEVICE_REGISTRATION_TOKEN",

    "android": {
      "notification": {
        // Android keys match strings.xml resource names
        "title_loc_key": "welcome_title",
        "title_loc_args": ["Alice"],
        "body_loc_key": "new_message_body",
        "body_loc_args": ["3", "Bob"]
      }
    },

    "apns": {
      "payload": {
        "aps": {
          "alert": {
            // iOS uses 'title-loc-key' and 'loc-key' (for the body)
            "title-loc-key": "WELCOME_TITLE",
            "title-loc-args": ["Alice"],
            "loc-key": "NEW_MESSAGE_BODY",
            "loc-args": ["3", "Bob"]
          }
        }
      }
    }
  }
}

पे लोड आर्ग्युमेंट के लिए मुख्य बातें

  • क्रम मायने रखता है: *_loc_args में मौजूद स्ट्रिंग, स्ट्रिंग रिसॉर्स फ़ाइल में मौजूद प्लेसहोल्डर के हिसाब से सही क्रम में होनी चाहिए. उदाहरण के लिए, %1$s, %2$s).

  • सिर्फ़ स्ट्रिंग: *_loc_args ऐरे में मौजूद सभी एलिमेंट स्ट्रिंग होने चाहिए. भले ही, वे संख्याओं को दिखाते हों (जैसे, उदाहरण में "3"). क्लाइंट ओएस का स्ट्रिंग फ़ॉर्मेटर, फ़ॉर्मैट स्पेसिफ़ायर (%ld या %1$d) के आधार पर, टाइप कन्वर्ज़न को मैनेज करता है.

तीसरा चरण: क्लाइंट प्रोसेसिंग और डिसप्ले

डिवाइस को सूचना मिलने पर, ये चरण अपने-आप पूरे हो जाते हैं:

  1. भाषा की जांच: डिवाइस, उपयोगकर्ता की मुख्य भाषा की पहचान करता है. उदाहरण के लिए, जर्मन, इटैलियन).

  2. कुंजी ढूंढना: ओएस, *_loc_key वैल्यू (welcome_title) का इस्तेमाल करके, डिवाइस की स्थान-भाषा के लिए ऐप्लिकेशन की संसाधन फ़ाइलों में अनुवाद की गई स्ट्रिंग ढूंढता है.

  3. आर्ग्युमेंट इंसर्शन: ओएस, *_loc_args (["Alice"]) से ऐरे लेता है और वैल्यू को स्थानीय भाषा के हिसाब से तैयार की गई स्ट्रिंग में डालता है. ऐसा करते समय, वह स्थानीय भाषा के फ़ॉर्मैटिंग के नियमों (विराम चिह्न, शब्दों का क्रम वगैरह) का पालन करता है.

डिवाइस की स्थान-भाषा title_loc_key: welcome_title title_loc_args: ["Alice"] टाइटल का फ़ाइनल डिसप्ले
अंग्रेज़ी "Welcome, %1$s!" Alice "Welcome, Alice!"
फ़्रेंच "Bienvenue, %1$s!" Alice "Bienvenue, Alice!"
जर्मन "Willkommen, %1$s!" Alice "Willkommen, Alice!"

इस प्रोसेस से यह पक्का होता है कि हर उपयोगकर्ता को उसकी भाषा की प्राथमिकताओं के हिसाब से मैसेज मिले. साथ ही, इसमें सही भाषाई स्ट्रक्चर का इस्तेमाल किया जाता है. इसके अलावा, आपके सर्वर से स्टैंडर्ड पेलोड को बनाए रखा जाता है.

उदाहरण: स्थानीय भाषा में सूचना पाने के विकल्पों के साथ सूचना का मैसेज

भेजने के अनुरोध के इस उदाहरण में, Tech विषय को सूचना भेजी जाती है. इसमें क्लाइंट के लिए स्थानीय भाषा में अनुवाद करने के विकल्प भी शामिल हैं, ताकि स्थानीय भाषा में अनुवाद किए गए मैसेज दिखाए जा सकें. यहां उपयोगकर्ता के डिवाइस पर दिखने वाले विज़ुअल इफ़ेक्ट का एक उदाहरण दिया गया है:

दो डिवाइसों की सामान्य ड्राइंग, जिनमें अंग्रेज़ी और स्पैनिश में टेक्स्ट दिख रहा है

Node.js

var topicName = 'industry-tech';

var message = {
  android: {
    ttl: 3600000,
    notification: {
      bodyLocKey: 'STOCK_NOTIFICATION_BODY',
      bodyLocArgs: ['FooCorp', '11.80', '835.67', '1.43']
    }
  },
  apns: {
    payload: {
      aps: {
        alert: {
          locKey: 'STOCK_NOTIFICATION_BODY',
          locArgs: ['FooCorp', '11.80', '835.67', '1.43']
        }
      }
    }
  },
  topic: topicName,
};

getMessaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

REST

POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1

Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
  "message": {
    "topic":"Tech",
    "android": {
      "ttl":"3600s",
      "notification": {
        "body_loc_key": "STOCK_NOTIFICATION_BODY",
        "body_loc_args": ["FooCorp", "11.80", "835.67", "1.43"]
      }
    },
    "apns": {
      "payload": {
        "aps": {
          "alert": {
            "loc-key": "STOCK_NOTIFICATION_BODY",
            "loc-args": ["FooCorp", "11.80", "835.67", "1.43"]
          }
        }
      }
    }
  }
}'

ज़्यादा जानने के लिए, एचटीटीपी v1 के रेफ़रंस दस्तावेज़ में AndroidNotification और ApnsConfig देखें. इससे आपको मैसेज बॉडी में, प्लैटफ़ॉर्म के हिसाब से उपलब्ध ब्लॉक में मौजूद कुंजियों के बारे में पूरी जानकारी मिलेगी. APNS के साथ काम करने वाली कुंजियों के बारे में जानने के लिए, Apple का Payload Key Reference देखें.