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

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

उदाहरण FCM HTTP 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"]
          }
        }
      }
    }
  }
}'

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