Shadwire

Buscar na documentação

Busque nas páginas da documentação e dos componentes por título e por conteúdo.

Começar
Introdução
Instalação
shadwire.json
Theming
Dark mode
Ferramentas
CLI
Agent skill
Registry
llms.txt
Guias
Composição
Estilização
Formulários
Ícones
Acessibilidade
Localização
Blocks
Visão geral
Componentes
Visão geral
Accordion
Alert
Alert Dialog
Aspect Ratio
Avatar
Badge
Breadcrumb
Button
Button Group
Calendar
Card
Carousel
Chart
Checkbox
Collapsible
Combobox
Command
Context Menu
Data Table
Date Picker
Dialog
Drawer
Dropdown Menu
Empty
Field
Hover Card
Icon
Input
Input Group
Input OTP
Item
Kbd
Label
Menubar
Native Select
Navigation Menu
Pagination
Popover
Progress
Radio Group
Resizable
Scroll Area
Select
Separator
Sheet
Sidebar
Skeleton
Slider
Sonner
Spinner
Switch
Table
Tabs
Textarea
Toggle
Toggle Group
Tooltip

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:

# app/components/ui/dialog/content_component.rb, as installed
I18n.t("ui.dialog.close", default: "Close")

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.

# config/locales/pt.yml
pt:
  ui:
    dialog:
      close: Fechar
    sheet:
      close: Fechar
    pagination:

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:

pt:
  ui:
    data_table:
      # The Stimulus controller substitutes these tokens, not I18n.
      # Keep every one of them, in any order.
      selection: "%{selected} de %{total} linha(s) selecionada(s)."
      page: "Página %{page} de %{total}"

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:

<%# Abbreviated months in the caption, two-letter column headers %>
<%= ui_calendar(month_names: I18n.t("date.abbr_month_names").compact,
                day_names: I18n.t("date.abbr_day_names").map { |name| name.first(2) }) %>

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.