Gérer le contenu localisé avec les catalogues Braze
Stockez les chaînes de caractères et les URL localisées dans des catalogues pour que chaque utilisateur reçoive le contenu dans sa langue à partir d’une seule Campaign ou d’un seul Canvas, sans créer de variantes séparées par langue.
À propos de cet exemple
PantsLabyrinth, un détaillant de vêtements fictif, vend ses produits en Amérique du Nord et en Europe. Les noms de produits, les prix et les images principales diffèrent selon la langue, mais l’équipe marketing souhaite disposer d’un seul modèle d’e-mail ou de notification push qui se personnalise au moment de l’envoi.
Cet exemple couvre trois schémas de catalogues qui lisent l’${language} attribut standard de l’utilisateur (collecté par le SDK à partir des paramètres régionaux de l’appareil) :
- Champs d’objet JSON : toutes les langues dans une seule ligne par article
- Colonnes distinctes par langue :
header_en,header_fr, etc. - Catalogue séparé par langue : nom de catalogue dynamique tel que
pantslabyrinth-promo-en
Utilisez les catalogues lorsque le contenu localisé est constitué de données structurées (produits, promotions, URLs d’images). Pour du contenu de message libre dans un e-mail ou une notification push, préférez les messages multilingues lorsque vos canaux les prennent en charge. Pour comparer plus largement les approches de localisation, consultez Gestion des traductions.
Considérations
- Les exemples sont fournis à titre indicatif. Confirmez la casse et le format de
${language}dans votre base d’utilisateurs avant de nommer les clés ou suffixes de catalogue. - Pour les méthodes 1 et 2, si
${language}est vide ou ne correspond pas à une clé ou un champ de catalogue, le contenu localisé peut être vide. Vérifiez chaque champ indépendamment et prévoyez une valeur par défaut (par exemple l’anglais). - Pour la méthode 3, établissez une liste autorisée des codes de langue pris en charge avant de construire le nom du catalogue ; un catalogue manquant entraîne l’abandon du message.
- Les objets JSON dans les catalogues peuvent être créés ou mis à jour via l’API ou l’ingestion de données cloud (CDI) pour les catalogues, et non via un import CSV.
- La méthode 2 est compatible avec la maintenance par CSV, mais le nombre de colonnes se multiplie à mesure que les langues augmentent. Les fichiers CSV prennent en charge jusqu’à 1 000 colonnes.
- La méthode 3 nécessite un catalogue pour chaque code de langue susceptible d’atteindre la balise
catalog_items. Si le catalogue n’existe pas, Braze abandonne le message. Un ID d’élément manquant dans un catalogue existant renvoie un tableau d’éléments vide. - Les balises Liquid de catalogue ne peuvent pas être utilisées de manière récursive.
- Les sélections de catalogue prennent en charge jusqu’à 10 filtres et renvoient jusqu’à 50 éléments. Validez vos filtres par rapport au schéma de votre catalogue.
- Consultez les niveaux de stockage des catalogues si vous gérez des flux de produits multilingues volumineux.
Configuration
Étape 1 : Choisir une structure de catalogue
Choisissez une structure de catalogue en vous appuyant sur les recommandations de ce tableau.
| Méthode | Idéale quand | Compromis |
|---|---|---|
| Champs d’objets JSON | Catalogue de taille moyenne ; une ligne par élément ; mises à jour via API ou CDI | L’ajout d’une langue met à jour chaque élément via l’API ; pas de CSV pour les champs JSON |
| Champs plats par langue | Peu de langues et de champs ; les équipes non techniques utilisent le CSV | Chaque nouvelle langue ajoute des colonnes ; la convention de nommage des champs doit rester cohérente |
| Un catalogue par langue | Flux volumineux par locale ou propriétaires de locale distincts ; CSV par langue | Chaque code de langue autorisé nécessite un catalogue ; un catalogue manquant interrompt l’envoi |
Étape 2 : Créer le catalogue et les éléments
- Accédez à Data Settings > Catalogs et créez un catalogue (ou plusieurs catalogues pour la méthode 3).
- Ajoutez des champs et des éléments en fonction de la structure choisie. Consultez Créer un catalogue.
- (Facultatif) Créez une sélection de catalogue pour filtrer les éléments, par exemple en faisant correspondre
categoryà un attribut personnalisé de l’utilisateur.
Exemple d’élément dans le catalogue PantsLabyrinth_Product_Copy :
| Élément | Valeur |
|---|---|
id |
trail-runner-001 |
name |
{"EN":"Trail Runner","FR":"Chaussure de trail","DE":"Trailrunner"} |
category |
footwear |
url |
https://pantslabyrinth.shop/products/trail-runner-001 |
price |
{"EN":"$120 USD","FR":"112 EUR","DE":"112 EUR"} |
Exemple d’élément dans le catalogue PantsLabyrinth_Promo_Copy :
| Élément | Valeur |
|---|---|
id |
spring-sale |
header_en |
Spring trail sale |
header_fr |
Soldes de printemps |
body_en |
Save on trail runners this week. |
body_fr |
Économisez sur les chaussures de trail cette semaine. |
cta_text_en |
Shop now |
cta_text_fr |
Acheter |
img_src_en |
https://cdn.pantslabyrinth.shop/en/spring.jpg |
img_src_fr |
https://cdn.pantslabyrinth.shop/fr/spring.jpg |
Créez un catalogue par langue avec les mêmes champs. Par exemple, reproduisez le même id et les mêmes champs dans pantslabyrinth-promo-fr et pantslabyrinth-promo-de avec des valeurs localisées.
Exemple d’élément dans pantslabyrinth-promo-en :
| Élément | Valeur |
|---|---|
id |
spring-sale |
header |
Spring trail sale |
body |
Save on trail runners this week. |
cta_text |
Shop now |
img_src |
https://cdn.pantslabyrinth.shop/en/spring.jpg |
Étape 3 : Ajouter du Liquid à votre message
Sélectionnez le modèle Liquid correspondant à la structure de catalogue que vous avez choisie à l’étape 1.
Stockez toutes les locales dans des champs d’objets JSON sur une seule ligne de catalogue, puis utilisez le filtre property_accessor pour lire les clés name et price correspondant à ${language} (normalisé en majuscules). Vérifiez chaque champ indépendamment et utilisez EN comme valeur de secours lorsque le champ est vide, afin qu’une locale disposant d’un nom mais pas de prix affiche tout de même un prix en anglais.
{% catalog_items PantsLabyrinth_Product_Copy trail-runner-001 %}
{% assign lang = ${language} | upcase %}
{% assign localized_name = items[0].name | property_accessor: lang %}
{% assign localized_price = items[0].price | property_accessor: lang %}
{% if localized_name == blank %}
{% assign localized_name = items[0].name | property_accessor: 'EN' %}
{% endif %}
{% if localized_price == blank %}
{% assign localized_price = items[0].price | property_accessor: 'EN' %}
{% endif %}
Product: {{ localized_name }}
Price: {{ localized_price }}
Consultez Filtre property accessor.
Construisez des noms de champs dynamiques à partir de ${language} (normalisé en minuscules), puis lisez ces champs depuis l’élément avec une recherche par crochets. Par exemple, items[0][header_field] lit le titre pour la langue résolue. Vérifiez chaque champ indépendamment et utilisez la colonne anglaise comme valeur de secours lorsque le champ est vide, afin qu’une locale disposant d’un titre mais pas de corps affiche tout de même le corps en anglais.
{% catalog_items PantsLabyrinth_Promo_Copy spring-sale %}
{% assign lang = ${language} | downcase %}
{% assign header_field = 'header_' | append: lang %}
{% assign body_field = 'body_' | append: lang %}
{% assign cta_field = 'cta_text_' | append: lang %}
{% assign img_field = 'img_src_' | append: lang %}
{% assign header_val = items[0][header_field] %}
{% assign body_val = items[0][body_field] %}
{% assign cta_val = items[0][cta_field] %}
{% assign img_val = items[0][img_field] %}
{% if header_val == blank %}
{% assign header_val = items[0].header_en %}
{% endif %}
{% if body_val == blank %}
{% assign body_val = items[0].body_en %}
{% endif %}
{% if cta_val == blank %}
{% assign cta_val = items[0].cta_text_en %}
{% endif %}
{% if img_val == blank %}
{% assign img_val = items[0].img_src_en %}
{% endif %}
<img src="{{ img_val }}" alt="" />
<h2>{{ header_val }}</h2>
<p>{{ body_val }}</p>
<a href="#">{{ cta_val }}</a>

Si le nom de catalogue transmis à catalog_items n’existe pas, Braze interrompt le message. Autorisez les codes de langue pris en charge avant de construire le nom du catalogue. Un ID d’élément manquant dans un catalogue existant renvoie un tableau d’éléments vide — vous pouvez alors vous rabattre sur le catalogue anglais uniquement dans ce cas.
Autorisez les codes de langue qui disposent de catalogues correspondants (ici en, fr et de), attribuez la valeur par défaut en aux codes non pris en charge ou vides, puis recherchez l’élément. Si l’ID de l’élément est absent de ce catalogue, rabattez-vous sur le catalogue anglais.
{% assign lang = ${language} | downcase %}
{% assign supported = 'en,fr,de' | split: ',' %}
{% if supported contains lang %}{% else %}{% assign lang = 'en' %}{% endif %}
{% assign theCatalog = 'pantslabyrinth-promo-' | append: lang %}
{% catalog_items {{ theCatalog }} spring-sale %}
{% if items[0] == blank %}
{% catalog_items pantslabyrinth-promo-en spring-sale %}
{% endif %}
<img src="{{ items[0].img_src }}" alt="" />
<h2>{{ items[0].header }}</h2>
<p>{{ items[0].body }}</p>
<a href="#">{{ items[0].cta_text }}</a>
Consultez Utiliser des modèles dans les noms de catalogues et Interrompre des messages.
Sélection de catalogue facultative par catégorie
Filtrez les éléments avant la personnalisation — par exemple les promotions de chaussures pour les utilisateurs dont preferred_category = footwear :
{% catalog_selection_items PantsLabyrinth_Product_Copy footwear_promos %}
{% for item in items %}
{{ item.name }}
{% endfor %}
Définissez la sélection dans le tableau de bord avec des filtres sur votre colonne category et des attributs utilisateur selon vos besoins.
Étape 4 : Prévisualiser et tester
- Utilisez Preview as User avec des profils utilisateur possédant différentes valeurs
${language}. - Vérifiez le contenu de secours lorsque la langue est absente ou non prise en charge, y compris pour les locales partielles (par exemple un nom sans prix).
- Pour la méthode 3, confirmez que chaque langue autorisée dispose d’un catalogue correspondant et que les codes de langue non pris en charge renvoient vers votre catalogue par défaut sans interrompre l’envoi.