Introdução
Com o bloco customizado na loja, devemos aprender a internacionalizar o conteúdo apresentado.
É importante lembrar que os blocos devem sempre seguir boas práticas de localização, e não devem mostrar strings hardcoded, mas sim sensíveis a linguagem que a loja opera.
Não se preocupe, você não precisará adicionar traduções de todos os textos para as variadas linguagens nas quais o Store Framework é usado. Portanto, nessa etapa, serão apresentados conceitos acerca da internacionalização de apps e como fazê-la.
As Messages
O conceito de messages facilita a adição de novos idiomas ao tema. As messages centralizam todos os serviços de tradução na plataforma. Dado um texto a ser traduzido, Messages irá primeiramente checar o contexto definido pelo usuário para, em seguida, checar as traduções das apps e, por fim, passa pelo sistema de tradução automática.
Na estrutura do diretório, é possível observar que há uma pasta chamada messages, que apresenta três arquivos principais: pt.json, en.json e es.json, cada um responsável pelas traduções: português, inglês e espanhol, respectivamente. Além disso, a fim de fornecer traduções automáticas melhores, é utilizado o arquivo context.json, responsável por evitar ambiguidades.
Para utilizar tais definições, os arquivos de tradução mencionados anteriormente são JSON, cujas chaves são as mensagens e os valores são as traduções.
O arquivo
context.jsoné necessário e precisa conter todas as mensagens, além de oferecer as traduções automáticas em casos excepcionais.
Internacionalizando seu bloco
Você já deve ter aprendido a usar o nosso builder messages, e será através dele que serão adicionadas strings internacionalizadas nos componentes.
-
Para isso, na pasta
/messages, adicione agora uma mensagem de título para o componente:messages/pt.json_10{_10...,_10+ "countdown.title": "Contagem Regressiva"_10}messages/en.json_10{_10...,_10+ "countdown.title": "Countdown"_10}messages/es.json_10{_10...,_10+ "countdown.title": "Cuenta Regresiva"_10}messages/context.json_10{_10...,_10+ "countdown.title": "Countdown"_10} -
Feito isso, para renderizar o título deve-se usar o componente
FormattedMessageda biblioteca react-intl.A biblioteca react-intl dá suporte a várias maneiras de configuração e internacionalização, vale a pena verificá-las.
-
Agora, adicione a biblioteca usando
yarn add react-intlna pasta react. Feito isso, no código do seu componenteCountdown.tsx,importe o FormattedMessage_10//react/Countdown.tsx_10+ import { FormattedMessage } from 'react-intl' -
Também é necessário adicionar uma nova prop ao
CountdownProps:_10interface CountdownProps {_10+ title: string_10targetDate: string_10} -
Além disso, adicione uma constante que será o seu título:
_10//react/Countdown.tsx_10const titleText = title || <FormattedMessage id="countdown.title" /> -
Agora, junte o título e o contador para renderizá-los. Para isso, defina um container por fora. Além disso, o texto do título será passado através da prop
title:_25//react/Countdown.tsx_25const Countdown: StorefrontFunctionComponent<CountdownProps> = ({_25title,_25targetDate,_25}) => {_25const [timeRemaining, setTime] = useState<TimeSplit>({_25hours: '00',_25minutes: '00',_25seconds: '00',_25})_25_25const titleText = title || <FormattedMessage id="countdown.title" />_25const handles = useCssHandles(CSS_HANDLES)_25_25tick(targetDate, setTime)_25_25return (_25<div className={`${handles.container} t-heading-2 fw3 w-100 c-muted-1`}>_25<div className={`${handles.title} db tc`}>{titleText}</div>_25<div className={`${handles.countdown} db tc`}>_25{`${timeRemaining.hours}:${timeRemaining.minutes}:${timeRemaining.seconds}`}_25</div>_25</div>_25)_25} -
Note que são utilizados três handles novos: container, countdown e title. Dessa forma, lembre-se de declará-los na constante
CSS_HANDLES, vista na etapa anterior:_10//react/Countdown.tsx_10const CSS_HANDLES = ['container', 'countdown', 'title'] -
Por fim, é preciso adicionar a prop de
titleno schema:_19//react/Countdown.tsx_19Countdown.schema = {_19title: 'editor.countdown.title',_19description: 'editor.countdown.description',_19type: 'object',_19properties: {_19+ title: {_19+ title: 'Sou um título',_19+ type: 'string',_19+ default: null,_19+ },_19targetDate: {_19title: 'Data final',_19description: 'Data final usada no contador',_19type: 'string',_19default: null,_19},_19},_19}
Pronto! Agora, para testar sua loja em outros idiomas basta adicionar a query string /?cultureInfo=pt-br ou /?cultureInfo=es-ar na URL, por exemplo. Ao utilizar tal URL, o resultado esperado é esse aqui:
