この情報は Redmine 2.5 で不要になりました。→ tail -f pinzo.log: Redmine 2.5.0 からプラグインでの文言上書きが復活しています
Redmine のプラグインで本体の文言を上書きすることが出来ません。
昔はできたようなのですが、バージョンが違うのか I18n の仕様が変わったのか現在は出来ません。
ja:
project_module_documents: ドキュメント
project_module_calendar: 日程表
プラグインの ja.yml
にこんな記述をしても画面はかわりません。
通常、プラグインをロードすると、I18n.load_path
はこんな状態になります。
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.15/lib/active_support/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activemodel-3.2.15/lib/active_model/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.15/lib/active_record/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/actionpack-3.2.15/lib/action_view/locale/en.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/en.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/ja.yml
$REDMINE_HOME/config/locales/ar.yml
$REDMINE_HOME/config/locales/az.yml
$REDMINE_HOME/config/locales/bg.yml
--- 延々と Redmine 本体の言語ファイルが列挙
$REDMINE_HOME/config/locales/vi.yml
$REDMINE_HOME/config/locales/zh-TW.yml
$REDMINE_HOME/config/locales/zh.yml
rails/railties/lib/rails/engine.rb at 3-2-stable · rails/rails にあるように、I18n.load_path
の後ろのほうが優先度が高いので、本体の言語ファイルのほうが優先されてしまいプラグイン側で上書きすることができません。
プラグインの登録は config/initializers/30-redmine.rb
で行われていて、その際にプラグインの辞書ファイルが I18n.load_path
に登録されるのですが、この時点ではアプリケーション本来の辞書ファイルが登録されていないからでしょう。
じゃあどうすればいいのかというと、どこかで I18n.load_path
を調整して、プラグインの辞書ファイルを後ろの方にもっていくのがいいのかなと。
確実に行うなら、初期化完了時がよさげですね。
Rails::Engine
には after_initialize
という目的そのままの機能があるのでこれが使えそうです。
# coding: utf-8 | |
module RedmineApp | |
class Application < Rails::Application | |
config.after_initialize do | |
plugin_root_path = File.expand_path(File.join(File.dirname(__FILE__), '../')) | |
Dir.glob(File.join(plugin_root_path, 'config', 'locales', '*.yml')) do |path| | |
if I18n.load_path.include?(path) | |
I18n.load_path.delete(path) | |
I18n.load_path << path | |
end | |
end | |
end | |
end | |
end | |
こんなコードを lib
あたりに突っ込んでおいて、init.rb
で require
すればOK。
I18n.load_path
はこんな感じになります。
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.15/lib/active_support/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activemodel-3.2.15/lib/active_model/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.15/lib/active_record/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/actionpack-3.2.15/lib/action_view/locale/en.yml
$REDMINE_HOME/config/locales/ar.yml
$REDMINE_HOME/config/locales/az.yml
$REDMINE_HOME/config/locales/bg.yml
--- 延々と Redmine 本体の言語ファイルが列挙
$REDMINE_HOME/config/locales/vi.yml
$REDMINE_HOME/config/locales/zh-TW.yml
$REDMINE_HOME/config/locales/zh.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/en.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/ja.yml
0 件のコメント :
コメントを投稿