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

इस दस्तावेज़ में, 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>

अनुवाद जोड़ें: ISO भाषा कोड का इस्तेमाल करके, भाषा के हिसाब से डायरेक्ट्री बनाएं.जैसे, फ़्रेंच के लिए 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 एचटीटीपी v1 एपीआई का इस्तेमाल करके सूचना भेजते समय, आपका सर्वर एक पेलोड बनाता है. यह पेलोड, स्ट्रिंग के कलेक्शन के तौर पर, संसाधन कुंजियों (*_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 का पेलोड कुंजी रेफ़रंस देखें.