Skip to content

Commit 5606fd4

Browse files
committed
Change to switch plugin message customization depending on the presence of 35_change_load_order_locales.rb #30
1 parent 98b45dd commit 5606fd4

File tree

3 files changed

+49
-7
lines changed

3 files changed

+49
-7
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ $ cp plugins/redmine_message_customize/35_change_load_order_locales.rb config/in
1212
$ # redmine restart
1313
```
1414

15-
:warning: In order to customize messages of other plugins, it is necessary to copy redmine_message_customize/35_change_load_order_locales.rb into redmine/config/initializers.
15+
:warning: In order to customize messages of other plugins, it is necessary to copy redmine_message_customize/35_change_load_order_locales.rb into redmine/config/initializers.
16+
If you don't have redmine/config/initializers/35_change_load_order_locales.rb, you can customize only messages other than plugins.
1617

1718
## Usage
1819

lib/message_customize/locale.rb

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
module MessageCustomize
22
module Locale
33
@available_messages = {}
4+
CHANGE_LOARD_ORDER_LOCALES_FILE_PATH = 'config/initializers/35_change_load_order_locales.rb'
45

56
class << self
67
def available_locales
@@ -11,7 +12,16 @@ def reload!(*languages)
1112
available_languages = self.find_language(languages.flatten)
1213
paths = I18n.load_path.select {|path| available_languages.include?(File.basename(path, '.*').to_s)}
1314
I18n.backend.load_translations(paths)
14-
available_languages.each{|lang| @available_messages[:"#{lang}"] = I18n.backend.send(:translations)[:"#{lang}"] || {}}
15+
if customizable_plugin_messages?
16+
available_languages.each{|lang| @available_messages[:"#{lang}"] = I18n.backend.send(:translations)[:"#{lang}"] || {}}
17+
else
18+
available_languages.each do |lang|
19+
redmine_root_locale_path = Rails.root.join('config', 'locales', "#{lang}.yml")
20+
if File.exist?(redmine_root_locale_path)
21+
@available_messages[:"#{lang}"] = (I18n.backend.send(:load_yaml, redmine_root_locale_path)[lang] || {}).deep_symbolize_keys
22+
end
23+
end
24+
end
1525
end
1626

1727
def find_language(language=nil)
@@ -29,6 +39,10 @@ def available_messages(lang)
2939
self.reload!(lang) if @available_messages[lang].blank?
3040
@available_messages[lang] || {}
3141
end
42+
43+
def customizable_plugin_messages?
44+
@customizable_plugin_messages ||= File.exist?(Rails.root.join(CHANGE_LOARD_ORDER_LOCALES_FILE_PATH))
45+
end
3246
end
3347
end
3448
end

test/unit/lib/message_customize/locale_test.rb

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,44 @@ def test_available_locales
3030
assert_equal locales.uniq.sort.map(&:to_sym), MessageCustomize::Locale.available_locales
3131
end
3232

33-
def test_available_messages_should_return_translations
33+
def test_available_messages_if_customizable_plugin_messages
34+
MessageCustomize::Locale.stubs(:customizable_plugin_messages?).returns(true)
35+
3436
# Reset @available_messages
3537
MessageCustomize::Locale.instance_variable_set(:@available_messages, {})
3638

3739
en_available_messages = MessageCustomize::Locale.available_messages('en')
3840
assert_equal 'am', en_available_messages[:time][:am]
41+
assert_equal 'Message customize', en_available_messages[:label_custom_messages] # plugin messages
3942
assert_equal [:en], MessageCustomize::Locale.instance_variable_get(:@available_messages).keys
4043

41-
# Language 'ar' not loaded
42-
ar_available_messages = MessageCustomize::Locale.available_messages('ar')
43-
assert_equal "صباحا", ar_available_messages[:time][:am]
44-
assert_equal [:en, :ar], MessageCustomize::Locale.instance_variable_get(:@available_messages).keys
44+
# Language 'ja' not loaded
45+
ja_available_messages = MessageCustomize::Locale.available_messages('ja')
46+
assert_equal "午前", ja_available_messages[:time][:am]
47+
assert_equal 'メッセージのカスタマイズ', ja_available_messages[:label_custom_messages] # plugin messages
48+
assert_equal [:en, :ja], MessageCustomize::Locale.instance_variable_get(:@available_messages).keys
49+
end
50+
51+
def test_available_messages_should_return_messages_without_plugin_messages_if_not_customizable_plugin_messages
52+
MessageCustomize::Locale.stubs(:customizable_plugin_messages?).returns(false)
53+
54+
# Reset @available_messages
55+
MessageCustomize::Locale.instance_variable_set(:@available_messages, {})
56+
57+
en_available_messages = MessageCustomize::Locale.available_messages('en')
58+
assert_equal 'am', en_available_messages[:time][:am]
59+
assert_nil en_available_messages[:label_custom_messages] # plugin messages
60+
assert_equal [:en], MessageCustomize::Locale.instance_variable_get(:@available_messages).keys
61+
62+
# Language 'ja' not loaded
63+
ja_available_messages = MessageCustomize::Locale.available_messages('ja')
64+
assert_equal "午前", ja_available_messages[:time][:am]
65+
assert_nil ja_available_messages[:label_custom_messages] # plugin messages
66+
assert_equal [:en, :ja], MessageCustomize::Locale.instance_variable_get(:@available_messages).keys
67+
end
68+
69+
def test_customizable_plugin_messages?
70+
expect = File.exist?(Rails.root.join('config', 'initializers', MessageCustomize::Locale::CHANGE_LOARD_ORDER_LOCALES_FILE_PATH))
71+
assert_equal expect, MessageCustomize::Locale.customizable_plugin_messages?
4572
end
4673
end

0 commit comments

Comments
 (0)