From 74d3aa9741f99c7bebc4139d440dc1fd860be45d Mon Sep 17 00:00:00 2001 From: Akira Matsuda Date: Tue, 20 Oct 2020 16:35:59 +0900 Subject: [PATCH] Load locale files for available locales only --- lib/faker.rb | 10 +++++++++- test/test_locale.rb | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/faker.rb b/lib/faker.rb index 981f9f4dc3..1ee71a66a4 100644 --- a/lib/faker.rb +++ b/lib/faker.rb @@ -14,7 +14,15 @@ module Faker class << self def load_i18n unless @i18n_loaded - I18n.load_path += ::Dir[::File.join(__dir__, 'locales', '**/*.yml')] + if I18n.available_locales && I18n.available_locales.any? + # We expect all locale .yml files to have the locale name in its filename + I18n.load_path += ::Dir[::File.join(__dir__, 'locales', "{#{I18n.available_locales.join(',')}}.yml")] + # Or to be located in a directory with the locale name + I18n.load_path += ::Dir[::File.join(__dir__, 'locales', "{#{I18n.available_locales.join(',')}}/*.yml")] + else + I18n.load_path += ::Dir[::File.join(__dir__, 'locales', '**/*.yml')] + end + I18n.reload! if I18n.backend.initialized? @i18n_loaded = true end diff --git a/test/test_locale.rb b/test/test_locale.rb index 3c7b362ed7..22f732fdb9 100644 --- a/test/test_locale.rb +++ b/test/test_locale.rb @@ -78,4 +78,19 @@ def test_regex def test_available_locales assert I18n.locale_available?('en-GB') end + + def test_load_i18n + Faker.instance_variable_set :@i18n_loaded, nil + available_locales_was = I18n.available_locales + + I18n.available_locales = %i(en ja id) + Faker.load_i18n + I18n.eager_load! + + assert Faker.instance_variable_get(:@i18n_loaded) + assert_equal %i(en id ja), I18n.backend.translations.keys.sort + ensure + I18n.available_locales = available_locales_was + Faker.instance_variable_set :@i18n_loaded, nil + end end