Localiser les messages

Cette documentation décrit l'utilisation des champs de localisation FCM (*_loc_key et *_loc_args) pour envoyer des notifications qui s'adaptent automatiquement aux paramètres de langue d'un utilisateur sur Android et iOS. Cela permet à votre serveur d'envoyer une seule charge utile indépendante de la langue, en déléguant la traduction à l'appareil client.

FCM Présentation de la localisation

Pour localiser votre application, vous pouvez envoyer une clé qui correspond à une entrée de ressource de chaîne dans l'application de l'utilisateur. Le système d'exploitation (OS) de l'appareil gère la recherche et l'insertion des arguments dynamiques.

Champ FCM Description Action du client
title_loc_key Clé de la chaîne de titre dans les ressources de chaîne de l'application cliente. L'OS trouve la chaîne correspondante dans les fichiers localisés de l'application.
body_loc_key Clé de la chaîne du corps dans les ressources de chaîne de l'application cliente. L'OS trouve la chaîne correspondante dans les fichiers localisés de l'application.
title_loc_args Tableau de valeurs de chaîne dynamiques à substituer dans la chaîne title_loc_key. L'OS insère ces arguments dans les spécificateurs de format de la chaîne localisée.
body_loc_args Tableau de valeurs de chaîne dynamiques à substituer dans la chaîne body_loc_key. L'OS insère ces arguments dans les spécificateurs de format de la chaîne localisée.

Étape 1 : Définissez des ressources de chaînes localisées dans vos applications

Pour commencer à localiser FCM, il est important de vous assurer que les traductions nécessaires sont disponibles dans vos projets Android et iOS.

Configuration d'Android

Définissez les ressources de chaîne : saisissez les chaînes de votre langue par défaut dans res/values/strings.xml. Utilisez des spécificateurs de format (%1$s, %2$d, etc.) pour toutes les valeurs dynamiques que vous prévoyez de transmettre dans *_loc_args.

Par défaut (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>

Ajouter des traductions : créez des répertoires spécifiques à une langue à l'aide des codes de langue ISO (par exemple, values-fr pour le français, values-es pour l'espagnol) et traduisez les clés.

Français (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>

Pour en savoir plus, consultez la documentation suivante :

Configuration d'iOS

Définissez les ressources de chaîne : définissez vos chaînes de base dans le fichier Localizable.strings (généralement dans le dossier Base.lproj ou dans un catalogue de chaînes). Utilisez des spécificateurs de format (%@, %ld, etc.) pour les valeurs dynamiques. Par convention, les clés sont souvent définies en majuscules.

Par défaut (anglais Localizable.strings) :

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

Ajouter des traductions : créez des dossiers .lproj spécifiques à une langue (ou ajoutez des localisations à l'aide d'un catalogue de chaînes) et traduisez les clés.

Français (fr.lproj/Localizable.strings) :

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

Pour en savoir plus, consultez la documentation suivante :

Étape 2 : Construisez la charge utile du message FCM

Lorsque vous envoyez la notification à l'aide de l'API HTTP v1 FCM, votre serveur construit une charge utile unique qui utilise les clés de ressources (*_loc_key) et les données dynamiques (*_loc_args) sous forme de tableau de chaînes.

Exemple de charge utile HTTP v1 FCM

Les clés de localisation sont placées dans les blocs de remplacement spécifiques à la plate-forme (android.notification et 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"]
          }
        }
      }
    }
  }
}

Points clés à prendre en compte pour les arguments de charge utile

  • L'ordre est important : les chaînes de *_loc_args doivent être dans l'ordre exact requis par les espaces réservés dans le fichier de ressources de chaîne (par exemple, %1$s, %2$s).

  • Chaînes uniquement : tous les éléments du tableau *_loc_args doivent être des chaînes, même s'ils représentent des nombres (comme "3" dans l'exemple). Le formateur de chaîne de l'OS client gère la conversion de type finale en fonction du spécificateur de format (%ld ou %1$d).

Étape 3 : Traitement et affichage côté client

Lorsque l'appareil reçoit la notification, les étapes suivantes se produisent automatiquement :

  1. Vérification de la langue : l'appareil identifie la langue principale de l'utilisateur (par exemple, allemand, italien).

  2. Recherche de clé : l'OS utilise la valeur *_loc_key (welcome_title) pour rechercher la chaîne traduite correspondante dans les fichiers de ressources de l'application pour les paramètres régionaux de l'appareil.

  3. Insertion d'arguments : l'OS prend le tableau de *_loc_args (["Alice"]) et insère les valeurs dans la chaîne localisée, en respectant les règles de mise en forme de la langue (ponctuation, ordre des mots, etc.).

Langue de l'appareil title_loc_key : welcome_title title_loc_args : ["Alice"] Affichage du titre final
Anglais "Welcome, %1$s!" Alice "Welcome, Alice!"
Français "Bienvenue, %1$s!" Alice "Bienvenue, Alice!"
Allemand "Willkommen, %1$s!" Alice "Willkommen, Alice!"

Ce processus permet de s'assurer que chaque utilisateur reçoit un message adapté à ses préférences linguistiques, en utilisant la structure linguistique appropriée, tout en conservant une charge utile standardisée depuis votre serveur.

Exemple : message de notification avec options de localisation

L'exemple de requête d'envoi suivant envoie une notification au sujet Tech, y compris les options de localisation permettant au client d'afficher des messages localisés. Voici un exemple de l'effet visuel sur l'appareil d'un utilisateur :

Dessin simple de deux appareils affichant du texte en anglais et en espagnol

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"]
          }
        }
      }
    }
  }
}'

Pour en savoir plus, consultez AndroidNotification et ApnsConfig dans la documentation de référence HTTP/1.1 pour obtenir des informations détaillées sur les clés disponibles dans les blocs spécifiques à la plate-forme dans le corps du message. Pour connaître les clés compatibles avec APNS, consultez la référence des clés de charge utile d'Apple.