Rails I18n:3つのクイックヒントと1つのクレイジーな虐待
Railsのi18nライブラリは見た目よりも強力です。翻訳にのみ使用する必要はありません。 i18nライブラリは、表示するテキストを表示する場所から切り離したい場合に便利です。
私がAvvoにいる間、私たちはi18nを使って本当にクールなことをしました。私たちが学んだいくつかの便利なことと、ライブラリの乱用が私たちにとって信じられないほどうまくいったことを共有します。
次のような行がありますか:
<%= raw(t('form.required_field_header')) %>
あなたの見解では? そのraw
は必要ありません 、翻訳キーが_html
で終わる場合 、無料で脱出できます:
<%= t('form.required_field_header_html') %>
シンプルで、他のt()
とより一貫性があります 呼び出します。
ロケールファイルを作成するとき、おそらくいくつかのキーが同じ親の下にグループ化されます:
en:
bugs:
index:
new_label: "File a new bug"
edit_label: "edit"
delete_label: "delete"
これらすべてをまとめて参照するには、できます 完全なキーでそれらを参照します:
<%= t('bugs.index.edit_label') %> | <%= t('bugs.index.delete_label') %>
それはかなり面倒で反復的です。 しかしt()
スコープを取得すると便利なため、キーをより便利に参照できます。
<% bugs_scope = 'bugs.index' -%>
<%= t('edit_label', scope: bugs_scope) %> | <%= t('delete_label', scope: bugs_scope) %>
パーシャルに適切な名前を付ける場合は、スコープを指定する必要もありません。
<%= t('.edit_label') %> | <%= t('.delete_label') %>
つまり、.edit_label
bugs.index.edit_label
を参照します 、bugs/index.html.erb
にいるため 。
ActiveRecordバックエンド
場合によっては、yamlファイルの静的翻訳がプロジェクトで機能しないことがあります。代わりにActiveRecordi18nバックエンドを使用する場合:
require 'i18n/backend/active_record'
I18n.backend = I18n::Backend::ActiveRecord.new
translations
で翻訳を検索できます データベース内のテーブル。 このように、すべての翻訳を事前に定義する必要はありません。代わりに、その場で新しい翻訳を追加できます。
translations
の設定 テーブルには特定の移行が必要です。 i18n-active_recordリポジトリのREADMEには、それを機能させるために必要なすべての情報が含まれています。
Avvoには、弁護士名簿、弁護士レビュー、および法律上のアドバイスがあります。 しかし、数年前、私たちのサイトには弁護士がいただけではありませんでした。医者や歯科医もいました!
私たちのUIの多くは、これらの職業間で同じでした。しかし、十分に異なっていたため(たとえば、弁護士が「実践分野」と呼んでいるもの、医師が「専門分野」と呼んでいるもの)、かなり醜いコードがなければ同じ見解や部分を共有することは困難です。
最終的には、このためにi18nシステムに頼ろうと考えました。 結局のところ、英国の弁護士は一種です。 英語の方言、そして医者は同じ方法です 。最終的に他の言語の使用をブロックしたくなかったため、en_jd
という2つの新しいロケールを作成することにしました。 およびen_md
。
これは、カスタムi18nバックエンドとして簡単に設定できることがわかりました:
class AvvoI18nStore < I18n::Backend::Simple
def translate(locale, key, options = {})
begin
default = options.delete(:default)
super(locale, key, options)
rescue I18n::MissingTranslationData => e
# fall back to "en" if we can't find anything under "en_jd", etc.
fallback_locale = locale.to_s.split("_").first
super(fallback_locale, key, options.merge(:default => default))
end
end
end
I18n.backend = AvvoI18nStore.new
また、翻訳の定義も同様に簡単でした:
en_jd:
practice_area: "practice area"
en_md:
practice_area: "specialty"
パーシャル全体の翻訳にも最適です(ファイル名に注意してください):
<!-- Lawyer badge HTML -->
<!-- Doctor badge HTML -->
そしてそれはen
にさえ落ちました ロケール、共有翻訳の場合:
en:
leaderboard:
title: "Leaderboard"
サイトの「Doctors」セクションにいるときに、デフォルトのロケールを:en_md
に変更しました 、およびその逆:
I18n.locale = :en_md
そして、すべてがうまくいきました!
これをお勧めするかどうかはわかりません。さまざまな言語のさまざまな職業を考えると、少しおかしくなります。しかし、私たちがそれをしている間、それは驚くほどうまくいきました。 そして、i18nのようなシンプルなツールがどれだけのパワーを発揮できるかを明らかにします。
このようなものはどこで受け取りますか?
先週、私は初心者から専門家に移行する方法として、特定のテクノロジーを深く掘り下げることについて話しました。これはその別の例です。i18nについて学んだことのほとんどは、RailsガイドとAPIドキュメントを読んで学んだものです。
だから、その余分なステップを踏みます。信頼できるツールを学びましょう。生産性を向上させるだけでなく、他の方法では考えもしなかったまったく新しいカテゴリのソリューションのロックを解除する可能性のある便利なトリックに遭遇することがわかります。
-
Redisの10の簡単なヒント
Redisは現在、技術コミュニティで注目を集めています。 Antirezの小さな個人的なプロジェクトから、メモリ内データストレージの業界標準になるまでには長い道のりがあります。これに伴い、Redisを適切に使用するためにほとんどの人が同意できる一連のベストプラクティスが提供されます。以下では、Redisを正しく使用するための10の簡単なヒントを紹介します。 1。キーの使用をやめる* さて、多分あなたに向かって叫ぶことはこの記事を始めるための素晴らしい方法ではありません。しかし、それはおそらく最も重要なポイントです。あまりにも頻繁に、redisインスタンスを見て、簡単なcommandstats
-
生産性を高めるための 10 の簡単な Gmail のヒントとコツ
世界中の 7 人に 1 人が Gmail を使用していますが、彼らも Gmail が提供するさまざまなオプションを認識していません。 Gmail を使用すると、メールをチェックするだけでなく、重要なメールを強調表示したり、ゴミをフィルター処理したり、ユーザーをブロックしたり、さらに多くのことができます。 Gmail はさまざまな機能を提供しますが、それらのほとんどは非表示のユーザーであるため、それらを利用することはできません。この記事では、これらの素晴らしい機能とその使用方法について説明します。これらの機能は、Gmail を整理、管理するのに役立つだけでなく、楽しく簡単な方法で Gmail