Localização
Os componentes instalados buscam seus textos no I18n e, se não encontram, usam o inglês. Se o seu app define uma chave, o componente usa o seu texto.
Todo texto que um componente renderiza por conta própria, como o rótulo de um
botão de fechar, a seta da paginação ou a mensagem de tabela vazia, passa pelo
I18n.t com o texto em inglês como padrão:
Graças a esse padrão, o componente funciona logo depois de instalado: sem arquivo de locale, ele aparece em inglês. Não é preciso configurar nada antes, e apps que não usam I18n não são afetados.
Sobrescrevendo um texto
Defina a chave no seu próprio arquivo de locale. Não é preciso registrar nada nem passar argumento para o componente; basta a chave.
Só mudam as chaves que você define. As outras continuam com o padrão em inglês, então dá para traduzir um componente de cada vez.
As chaves
Todas as chaves que os componentes leem, com o texto padrão de cada uma. As
marcadas como value vão para um atributo
data-*-value e são usadas por um controller Stimulus, em vez
de impressas pelo servidor; a próxima seção explica por que isso importa.
breadcrumb
| Chave | Padrão | Tipo |
|---|---|---|
ui.breadcrumb.label |
breadcrumb | servidor |
ui.breadcrumb.more |
More | servidor |
calendar
| Chave | Padrão | Tipo |
|---|---|---|
ui.calendar.month |
Month | value |
ui.calendar.next_month |
Next month | servidor |
ui.calendar.previous_month |
Previous month | servidor |
ui.calendar.year |
Year | value |
carousel
| Chave | Padrão | Tipo |
|---|---|---|
ui.carousel.next |
Next slide | servidor |
ui.carousel.previous |
Previous slide | servidor |
ui.carousel.roledescription |
carousel | servidor |
ui.carousel.slide |
slide | servidor |
data_table
| Chave | Padrão | Tipo |
|---|---|---|
ui.data_table.columns |
Columns | servidor |
ui.data_table.empty |
No results. | servidor |
ui.data_table.filter_placeholder |
Filter… | servidor |
ui.data_table.next |
Next | servidor |
ui.data_table.page |
Page %{page} of %{total} | value |
ui.data_table.previous |
Previous | servidor |
ui.data_table.select_all |
Select all rows | servidor |
ui.data_table.select_row |
Select row | servidor |
ui.data_table.selection |
%{selected} of %{total} row(s) selected. | value |
dialog
| Chave | Padrão | Tipo |
|---|---|---|
ui.dialog.close |
Close | servidor |
pagination
| Chave | Padrão | Tipo |
|---|---|---|
ui.pagination.label |
pagination | servidor |
ui.pagination.more |
More pages | servidor |
ui.pagination.next |
Next | servidor |
ui.pagination.next_label |
Go to the next page | servidor |
ui.pagination.previous |
Previous | servidor |
ui.pagination.previous_label |
Go to the previous page | servidor |
sheet
| Chave | Padrão | Tipo |
|---|---|---|
ui.sheet.close |
Close | servidor |
sidebar
| Chave | Padrão | Tipo |
|---|---|---|
ui.sidebar.toggle |
Toggle Sidebar | servidor |
sonner
| Chave | Padrão | Tipo |
|---|---|---|
ui.sonner.close |
Close | value |
ui.sonner.label |
Notifications | servidor |
spinner
| Chave | Padrão | Tipo |
|---|---|---|
ui.spinner.label |
Loading | servidor |
Cinco delas são lidas por JavaScript
ui.data_table.selection, ui.data_table.page,
ui.calendar.month, ui.calendar.year e
ui.sonner.close não são
impressas na página. Elas são buscadas uma vez, quando o componente renderiza,
e gravadas num atributo data-*-value para o controller ler.
Você as traduz do mesmo jeito que as outras, porque são chaves de I18n comuns.
Duas delas pedem cuidado. A contagem de selecionados e o contador de páginas da data table são preenchidos pelo controller, não pelo I18n, então a sua tradução precisa manter os marcadores:
Se você traduzir ou remover %{selected}, %{page}
ou %{total}, a legenda mostra o marcador como texto ou fica sem
número, e nenhum erro aparece, porque o I18n nunca vê esses marcadores.
Nomes de meses e dias vêm do Rails
A legenda e os cabeçalhos do calendário não estão no namespace
ui.. O calendário os lê das traduções de data do próprio
Rails, date.month_names e
date.abbr_day_names. Eles vêm em inglês por padrão, e no seu
idioma assim que o app carrega as traduções, seja pelo
rails-i18n
ou pelo seu próprio arquivo de locale. Para usar outros nomes em um calendário
específico, passe-os como argumento:
O .compact é necessário: o
date.abbr_month_names do Rails começa no índice 1, então o primeiro
elemento é nil.
Um exemplo completo
Este site é um. As páginas em português renderizam os mesmos componentes que você
instala, e o site define o bloco ui. inteiro uma única vez. É
por isso que os textos que os próprios componentes colocam em
/pt (botões de fechar, setas da paginação, a mensagem de
tabela vazia) aparecem em português.
O sandbox/config/locales/pt.yml tem todas as chaves desta página, e você pode copiá-lo como ponto de partida para um app em português.