Ir para o conteúdo

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

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

Este exemplo abrange 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 linha por item
  • Colunas planas por idioma: header_en, header_fr, e assim por diante
  • Catálogo separado por idioma: nome de catálogo dinâmico 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 oferecerem suporte. 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 capitalização e o formato 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 use um fallback padrão (por exemplo, inglês).
  • Para o Método 3, crie uma lista de permissão dos códigos de idioma compatíveis 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 pela Ingestão de Dados na Nuvem (CDI) para catálogos, não por upload de CSV.
  • O Método 2 permite a manutenção por CSV, mas multiplica as colunas à medida que 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 em relação ao esquema do seu catálogo.
  • Revise os níveis de armazenamento de catálogo se você mantém feeds de produtos grandes com múltiplas localidades.

Configuração

Etapa 1: Escolher uma estrutura de catálogo

Escolha uma estrutura de catálogo usando as orientações desta tabela.

Método Melhor quando Tradeoff
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 locale ou responsáveis separados por locale; 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: Criar 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 correspondendo 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 os mesmos 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: Adicionar Liquid à sua mensagem

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

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

{% 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, em seguida, leia esses campos do item usando busca por colchetes. Por exemplo, items[0][header_field] lê o cabeçalho para o idioma resolvido. Verifique cada campo independentemente e use o fallback para a coluna em inglês quando o campo estiver em branco, de modo que um locale com cabeçalho mas sem corpo ainda receba o texto do corpo em inglês.

{% 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>

Inclua os códigos de idioma que possuem catálogos correspondentes na lista de permissão (aqui en, fr e de), defina valores não suportados ou em branco como en e, em seguida, busque o item. Se o ID do item estiver ausente naquele catálogo, use o fallback para o catálogo em inglês.

{% 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 Interrompendo mensagens.

Seleção de catálogo opcional por categoria

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

{% catalog_selection_items PantsLabyrinth_Product_Copy footwear_promos %}
{% for item in items %}
  {{ item.name }}
{% endfor %}

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

Etapa 4: Pré-visualizar e testar

  1. Use Preview as User com perfis de usuário que tenham diferentes valores de ${language}.
  2. Confirme o texto de fallback quando o idioma estiver ausente ou não for suportado, incluindo locales 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 são mapeados para o catálogo padrão sem interromper o envio.
New Stuff!