Skip to content

Gerenciar conteúdo localizado com catálogos da Braze

Armazene strings e URLs localizados em catálogos para que cada usuário receba o conteúdo no seu idioma a partir de uma única Campaign ou Canvas, sem precisar de variantes separadas por localidade.

Sobre este exemplo

PantsLabyrinth, um varejista de roupas fictício, vende seus produtos na América do Norte e na Europa. Nomes de produtos, preços e imagens principais variam por idioma, mas o marketing quer um único modelo de e-mail ou push que personalize no momento do envio.

Este exemplo cobre três padrões de catálogo que leem o ${language} atributo padrão do usuário (coletado pelo SDK a partir da localidade do dispositivo):

  • Campos de objeto JSON: todas as localidades em uma única linha por item
  • Colunas planas por idioma: header_en, header_fr e assim por diante
  • Catálogo separado por idioma: nome dinâmico do catálogo, como pantslabyrinth-promo-en

Use catálogos quando o conteúdo localizado for dados estruturados (produtos, promoções, URLs de imagens). Para textos livres de mensagens em e-mail ou push, prefira mensagens multi-idioma quando seus canais as suportarem. Para comparar padrões de localização de forma mais ampla, consulte Gerenciamento de tradução.

Considerações

  • Os exemplos são ilustrativos. Confirme a formatação e o uso de maiúsculas/minúsculas de ${language} na sua base de usuários antes de nomear chaves ou sufixos do catálogo.
  • Para os Métodos 1 e 2, se ${language} estiver em branco ou não corresponder a uma chave ou campo do catálogo, a saída localizada pode ficar vazia — verifique cada campo de forma independente e recorra a um padrão (por exemplo, inglês).
  • Para o Método 3, crie uma lista de permissão dos códigos de idioma suportados antes de construir o nome do catálogo; um catálogo ausente interrompe a mensagem.
  • Objetos JSON em catálogos podem ser criados ou atualizados pela API ou por Cloud Data Ingestion (CDI) para catálogos, e não por upload de CSV.
  • O Método 2 suporta manutenção por CSV, mas multiplica as colunas conforme os idiomas aumentam. Arquivos CSV suportam até 1.000 colunas.
  • O Método 3 requer um catálogo para cada código de idioma que chega à tag catalog_items. Se o catálogo não existir, a Braze interrompe a mensagem. Um ID de item ausente em um catálogo existente retorna um array de itens vazio.
  • Liquid tags de catálogo não podem ser usadas recursivamente.
  • Seleções de catálogo suportam até 10 filtros e retornam até 50 itens — valide os filtros contra o schema do seu catálogo.
  • Revise os níveis de armazenamento de catálogo se você mantiver feeds de produtos grandes com múltiplas localidades.

Configuração

Etapa 1: Escolha uma estrutura de catálogo

Escolha uma estrutura de catálogo usando a orientação desta tabela.

Método Melhor quando Compensação
Campos de objeto JSON Catálogo de tamanho médio; uma linha por item; atualizações via API ou CDI Adicionar um idioma atualiza cada item via API; sem CSV para campos JSON
Campos planos por idioma Poucos idiomas e campos; equipes não técnicas usam CSV Cada novo idioma adiciona colunas; a nomenclatura dos campos precisa ser consistente
Catálogo por idioma Feeds grandes por localidade ou responsáveis separados por localidade; CSV por idioma Cada código de idioma na lista de permissão precisa de um catálogo; catálogos ausentes interrompem o envio

Etapa 2: Crie o catálogo e os itens

  1. Acesse Data Settings > Catalogs e crie um catálogo (ou vários catálogos para o Método 3).
  2. Adicione campos e itens com base na estrutura escolhida. Consulte Criar um catálogo.
  3. (Opcional) Crie uma seleção de catálogo para filtrar itens — por exemplo, por category correspondente a um atributo personalizado do usuário.

Exemplo de item no catálogo PantsLabyrinth_Product_Copy:

Item Valor
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"}

Exemplo de item no catálogo PantsLabyrinth_Promo_Copy:

Item Valor
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

Crie um catálogo por idioma com os mesmos campos. Por exemplo, repita o mesmo id e campos em pantslabyrinth-promo-fr e pantslabyrinth-promo-de com valores localizados.

Exemplo de item em pantslabyrinth-promo-en:

Item Valor
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

Etapa 3: Adicione Liquid à sua mensagem

Selecione o padrão Liquid que corresponde à estrutura de catálogo escolhida na Etapa 1.

Armazene todas as localidades em campos de objeto JSON em uma única linha do catálogo e use o filtro property_accessor para ler as chaves name e price que correspondem a ${language} (normalizado para maiúsculas). Verifique cada campo de forma independente e recorra a EN quando o campo estiver em branco, para que uma localidade com nome mas sem preço ainda receba um preço em inglês.

1
2
3
4
5
6
7
8
9
10
11
12
{% 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 }}

Consulte Filtro property accessor.

Construa nomes de campo dinâmicos a partir de ${language} (normalizado para minúsculas) e leia esses campos do item com busca por colchetes. Por exemplo, items[0][header_field] lê o cabeçalho para o idioma resolvido. Verifique cada campo de forma independente e recorra à coluna em inglês quando o campo estiver em branco, para que uma localidade com cabeçalho mas sem corpo ainda receba o texto do corpo em inglês.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{% 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>

Crie uma lista de permissão dos códigos de idioma que possuem catálogos correspondentes (aqui en, fr e de), defina valores não suportados ou em branco como en e consulte o item. Se o ID do item estiver ausente naquele catálogo, recorra ao catálogo em inglês.

1
2
3
4
5
6
7
8
9
10
11
12
{% 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>

Consulte Usando modelos em nomes de catálogo e Interrupção de mensagens.

Seleção opcional de catálogo por categoria

Filtre itens antes da personalização — por exemplo, promoções de calçados para usuários com preferred_category = footwear:

1
2
3
4
{% catalog_selection_items PantsLabyrinth_Product_Copy footwear_promos %}
{% for item in items %}
  {{ item.name }}
{% endfor %}

Defina a seleção no dashboard com filtros na sua coluna category e atributos de usuário conforme necessário.

Etapa 4: Prévia e teste

  1. Use Preview as User com perfis de usuário que tenham diferentes valores de ${language}.
  2. Confirme o conteúdo de fallback quando o idioma estiver ausente ou não for suportado, incluindo localidades parciais (por exemplo, um nome sem preço).
  3. Para o Método 3, confirme que cada idioma na lista de permissão possui um catálogo correspondente e que códigos de idioma não suportados mapeiam para o seu catálogo padrão sem interromper o envio.
New Stuff!