rigor-rails-i18n
t('key.path') / I18n.t(...) / I18n.translate(...)の呼び出しをconfig/locales/*.ymlに照らして検証します。検証対象は、存在しないキー(did-you-mean候補つき)、ロケールごとのカバレッジ漏れ、補間変数の不一致です。Railsランタイムへの依存はなく、ロケールファイルはPrismとYAML.safe_loadのみを通して読み込まれます。
このプラグインはrigortypeにバンドルされて提供されます。plugins:の下で有効化してください。
plugins: - rigor-rails-i18nチェック内容
Section titled “チェック内容”ロケールカタログに照らして、静的に解決可能なすべての呼び出し箇所が検証されます。
demo.rb:14:1: info: `t('users.welcome')` resolves in en, jaerrors_demo.rb:12:1: error: missing translation key `users.welcom` in any locale (did you mean `users.welcome`?)errors_demo.rb:16:1: error: `t('users.welcome')` expects interpolation `name`, got (none)errors_demo.rb:20:1: warning: `t('users.welcome')` does not use interpolation `extra` (known placeholders: `name`)errors_demo.rb:25:1: warning: `t('errors.messages.blank')` is missing from locale(s) ja- キーの存在 — どのロケールにも存在しないキーは
DidYouMeanの近似候補つきで指摘されます。 - ロケールごとのカバレッジ — 一部の
configured_localesには存在するが他には存在しないキーはmissing-locale警告を出します(呼び出しがdefault:を渡している場合は抑制されます)。 - 補間変数 — リーフ文字列の
%{var}プレースホルダーは、呼び出しのキーワード引数と一致しなければなりません。必須のプレースホルダーが欠けている場合はエラー、余分なものは警告です。予約されたI18nオプションキー(default:/scope:/locale:/count:/raise:/ …)は除外されます。
認識される呼び出し形
Section titled “認識される呼び出し形”リテラルの第1引数を伴うt(...)(暗黙のself)、I18n.t(...)、I18n.translate(...)です。遅延キー(コントローラー内のt('.title'))は、ファイルパスと最も内側を囲むdefから<controller_scope>.<action>.<key>に展開され、Railsの慣習に従います。コントローラー以外のファイル内の遅延キーはスキップされます(スコープを静的に決定できないため)。リテラルでないキーを伴う呼び出し(t(some_variable))はチェックされずに通過します。
Railsとrails-i18ngem自身が提供するプレフィックス(date. / time. / datetime. / number. / errors.messages. / errors.format / support.array. / helpers.{select,submit,label}. / i18n.transliterate. / activerecord.errors.{messages,models}.)配下のキーは、フレームワークが提供するため不明キーとして指摘されません。
plugins: - gem: rigor-rails-i18n config: locale_search_paths: ["config/locales"] # default configured_locales: ["en"] # defaultconfigured_localesはプロジェクトが提供するロケールの集合です。これを["en", "ja"]に設定すると、キーが一方では解決できるがもう一方では解決できない場合にmissing-locale警告が有効になります。
- リテラル文字列キーのみ — 変数キーは通過します。
- コントローラー外の遅延キーはスキップされる —
t('.x')が依存するコントローラー/アクションのスコープは、モデル/ヘルパー/メーラーでは導出できません。 - 複数形は認識されるが検証されない —
count:は予約オプションとして扱われます。ロケールが:zero/:one/:otherを定義しているかどうかはチェックされません。 - ロケールごとの補間の違いは1つのプレースホルダー集合にマージされる(
enが%{name}を使いjaが%{user_name}を使う場合、両方とも必須として扱われます)。 safe_loadのみ — YAMLのエイリアス/マージは受け入れられますが、YAML内のカスタムRubyクラスは受け入れられません。
プラグイン内部
Section titled “プラグイン内部”ロケールローダー/インデックス、キャッシュされた:locale_indexプロデューサー、デモ、そしてこのプラグインが利用する契約(contract)のサーフェス(surface)については、プラグインのREADMEを参照してください。プラグインの書き方については、examples/とrigor-plugin-authorスキルを参照してください。
© 2026 TypedDuck. Licensed under CC BY-SA 4.0.