summaryrefslogtreecommitdiff
path: root/lib/gitlab/i18n.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/i18n.rb')
-rw-r--r--lib/gitlab/i18n.rb58
1 files changed, 58 insertions, 0 deletions
diff --git a/lib/gitlab/i18n.rb b/lib/gitlab/i18n.rb
new file mode 100644
index 00000000000..a1b896c9511
--- /dev/null
+++ b/lib/gitlab/i18n.rb
@@ -0,0 +1,58 @@
+module Gitlab
+ module I18n
+ extend self
+
+ AVAILABLE_LANGUAGES = {
+ 'en' => 'English',
+ 'es' => 'Español',
+ 'de' => 'Deutsch',
+ 'fr' => 'Français',
+ 'pt_BR' => 'Português(Brasil)',
+ 'zh_CN' => '简体中文',
+ 'zh_HK' => '繁體中文(香港)',
+ 'zh_TW' => '繁體中文(臺灣)',
+ 'bg' => 'български',
+ 'ru' => 'Русский',
+ 'eo' => 'Esperanto',
+ 'it' => 'Italiano',
+ 'uk' => 'Українська',
+ 'ja' => '日本語'
+ }.freeze
+
+ def available_locales
+ AVAILABLE_LANGUAGES.keys
+ end
+
+ def locale
+ FastGettext.locale
+ end
+
+ def locale=(locale_string)
+ requested_locale = locale_string || ::I18n.default_locale
+ new_locale = FastGettext.set_locale(requested_locale)
+ ::I18n.locale = new_locale
+ end
+
+ def use_default_locale
+ FastGettext.set_locale(::I18n.default_locale)
+ ::I18n.locale = ::I18n.default_locale
+ end
+
+ def with_locale(locale_string)
+ original_locale = locale
+
+ self.locale = locale_string
+ yield
+ ensure
+ self.locale = original_locale
+ end
+
+ def with_user_locale(user, &block)
+ with_locale(user&.preferred_language, &block)
+ end
+
+ def with_default_locale(&block)
+ with_locale(::I18n.default_locale, &block)
+ end
+ end
+end