Eu usei quase todas as gemas de título de página existentes. Nenhum era perfeito. Meu título de página ideal do Rails:
- funciona quase sem código
- tem padrões sãos
- não requer gema
- funciona no Rails 2, 3 e 4 (diabos, 5 também!)
- é totalmente compatível com I18n
E caramba , encontrei uma configuração perfeita!
Construídas em
Todos nós vimos isso:
content_for?(:title) ? yield(:title) : "Example"
o que é ótimo, mas não flexível. Queremos I18n. E para 90% dos títulos das minhas páginas, eles são estáticos, não quero ter nenhuma linha na minha visão.
Estou pensando em algo assim:
t("#{ controller_path.tr('/', '.') }.#{ action_name }.title")
no meu layout que irá procurar uma chave de tradução preguiçoso como Rails foi construído em Eles começam com um ponto.: .t('.title')
Isso me permite colocar quase todos os títulos de minha página estática no arquivo local:
# config/en.yml
en:
products:
index:
title: "All products"
Mas sempre há aquela ação incômoda de show de produto onde você quer o nome do produto no título. Afinal, tenho que alimentar o monstro SEO. Equipe, lutei durante anos para encontrar a solução mais limpa. Passei por pântanos, minha busca me levou às profundezas de Ruby, C e – sim – Java. Mas eu perseverei. E hoje equipe apresento minha solução. Fique em meus ombros. Subir!
Passo 1
Primeiro, criaremos um auxiliar antiquado para ajudar a manter nossa visão limpa.
module ApplicationHelper
def title
if content_for?(:title)
# allows the title to be set in the view by using t(".title")
content_for :title
else
# look up translation key based on controller path, action name and .title
# this works identical to the built-in lazy lookup
t("#{ controller_path.tr('/', '.') }.#{ action_name }.title", default: :site_name)
end
end
end
Ótimo. Agora
Passo 2
colocamos aquele bad boy no layout do aplicativo:
<title><%= title %></title> <!-- see what I did? I made ERB clean! HOLY SHIT! -->
%title= title # haml. still bad ass.
title = title # slim, baby.
etapa 3
Coloque títulos estáticos no arquivo local. Use a convenção lazy-i18n, sua chave se chama title
:
en:
products:
index:
title: "All our products"
Passo 4
Se quisermos colocar algo dinâmico no título, use content_for
em um arquivo de visualização:
<%= content_for :title, t(".title", name: @product.name) %>
e adicione o i18n correspondente:
en:
products:
show:
title: "Choose %{name}!"
É isso, xerife.