Class: Lazier::I18n
- Inherits:
-
Object
- Object
- Lazier::I18n
- Defined in:
- lib/lazier/i18n.rb
Overview
Provides an easy way to localized messages in a class.
Instance Attribute Summary collapse
-
#backend ⇒ I18n::Backend
readonly
The backend used for translations.
-
#locale ⇒ String|Symbol|nil
The current locale.
-
#path ⇒ String
readonly
The path where the translations are stored.
-
#root ⇒ Symbol
readonly
The root level of the translation.
Class Method Summary collapse
-
.instance(locale = nil, root: :lazier, path: nil, force: false) ⇒ I18n
Returns the singleton instance of the settings.
Instance Method Summary collapse
-
#initialize(locale = nil, root: :lazier, path: nil) ⇒ I18n
constructor
Creates a new I18n object.
-
#locales ⇒ Array
Get the list of available translation for a locale.
-
#reload ⇒ Object
Reloads all the I18n translations.
-
#translate(message, **args) ⇒ String
(also: #t)
Localize a message.
-
#translate_in_locale(locale, message, *args) ⇒ String
(also: #tl)
Localize a message in a specific locale.
-
#translations(locale = nil) ⇒ Hash
Gets the list of available translation for a locale.
-
#with_locale(locale) ⇒ Object
Temporary sets a different locale and execute the given block.
Constructor Details
#initialize(locale = nil, root: :lazier, path: nil) ⇒ I18n
Creates a new I18n object.
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/lazier/i18n.rb', line 41 def initialize(locale = nil, root: :lazier, path: nil) Lazier.load_object path ||= Lazier::ROOT + "/locales" @root = root.to_sym @path = File.absolute_path(path.to_s) setup_backend self.locale = (locale || Lazier::I18n.default_locale || system_locale).to_sym end |
Instance Attribute Details
#backend ⇒ I18n::Backend (readonly)
Returns The backend used for translations.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/lazier/i18n.rb', line 17 class I18n attr_accessor :locale attr_reader :root, :path, :backend # The default locale for new instances. mattr_accessor :default_locale # Returns the singleton instance of the settings. # # @param locale [Symbol|NilClass] The locale to use for translations. Default is the current system locale. # @param root [Symbol] The root level of the translation. # @param path [String|NilClass] The path where the translations are stored. # @param force [Boolean] Whether to force recreation of the instance. # @return [I18n] The singleton instance of the i18n. def self.instance(locale = nil, root: :lazier, path: nil, force: false) @instance = nil if force @instance ||= new(locale, root: root, path: path) end # Creates a new I18n object. # # @param locale [Symbol|NilClass] The locale to use. Defaults to the current locale. # @param root [Symbol] The root level of the translation. # @param path [String|NilClass] The path where the translations are stored. def initialize(locale = nil, root: :lazier, path: nil) Lazier.load_object path ||= Lazier::ROOT + "/locales" @root = root.to_sym @path = File.absolute_path(path.to_s) setup_backend self.locale = (locale || Lazier::I18n.default_locale || system_locale).to_sym end # Reloads all the I18n translations. def reload # Extract the backend to an attribute ::I18n.backend.load_translations end # Gets the list of available translation for a locale. # # @param locale [Symbol|NilClass] The locale to list. Defaults to the current locale. # @return [Hash] The available translations for the specified locale. def translations(locale = nil) locale ||= @locale @backend.send(:translations)[locale.to_sym] || {} end # Sets the current locale. # # @param value [Symbol] The locale to use for translations. Default is the current system locale. def locale=(value) @locale = value.to_sym ::I18n.locale = @locale end # Get the list of available translation for a locale. # # @return [Array] The list of available locales. def locales ::I18n.available_locales end # Localize a message. # # @param message [String|Symbol] The message to localize. # @param args [Array] Optional arguments to localize the message. # @return [String] The localized message. def translate(, **args) # PI: Ignore reek on this. = "#{root}.#{}" if !~ /^(\.|::)/ begin ::I18n.translate(, **args.merge(raise: true)) rescue ::I18n::MissingTranslationData raise Lazier::Exceptions::MissingTranslation, [locale, ] end end alias_method :t, :translate # Localize a message in a specific locale. # # @param locale [String|Symbol] The new locale to use for localization. # @param message [String|Symbol] The message to localize. # @param args [Array] Optional arguments to localize the message. # @return [String] The localized message. def translate_in_locale(locale, , *args) with_locale(locale) { translate(, *args) } end alias_method :tl, :translate_in_locale # Temporary sets a different locale and execute the given block. # # @param locale [String|Symbol] The new locale to use for localization. def with_locale(locale) old_locale = self.locale begin self.locale = locale return yield ensure self.locale = old_locale end end private # :nodoc: OSX_DETECTION = "defaults read .GlobalPreferences AppleLanguages | awk 'NR==2{gsub(/[ ,]/, \"\");print}'".freeze # :nodoc: def system_locale platform = Lazier.platform rv = [:java, :osx, :posix].include?(platform) ? send("system_locale_#{Lazier.platform}") : nil raise(RuntimeError) if rv.blank? rv rescue "en" end # :nodoc: def system_locale_java Java.java.util.Locale.getDefault.toString end # :nodoc: def system_locale_osx `#{OSX_DETECTION}`.strip end # :nodoc: def system_locale_posix ENV["LANG"] end # :nodoc: def setup_backend ::I18n.load_path += Dir["#{@path}/*.yml"] ::I18n.load_path.uniq! ::I18n.exception_handler = ::Lazier::Exceptions::TranslationExceptionHandler.new reload @backend = ::I18n.backend end end |
#locale ⇒ String|Symbol|nil
Returns The current locale.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/lazier/i18n.rb', line 17 class I18n attr_accessor :locale attr_reader :root, :path, :backend # The default locale for new instances. mattr_accessor :default_locale # Returns the singleton instance of the settings. # # @param locale [Symbol|NilClass] The locale to use for translations. Default is the current system locale. # @param root [Symbol] The root level of the translation. # @param path [String|NilClass] The path where the translations are stored. # @param force [Boolean] Whether to force recreation of the instance. # @return [I18n] The singleton instance of the i18n. def self.instance(locale = nil, root: :lazier, path: nil, force: false) @instance = nil if force @instance ||= new(locale, root: root, path: path) end # Creates a new I18n object. # # @param locale [Symbol|NilClass] The locale to use. Defaults to the current locale. # @param root [Symbol] The root level of the translation. # @param path [String|NilClass] The path where the translations are stored. def initialize(locale = nil, root: :lazier, path: nil) Lazier.load_object path ||= Lazier::ROOT + "/locales" @root = root.to_sym @path = File.absolute_path(path.to_s) setup_backend self.locale = (locale || Lazier::I18n.default_locale || system_locale).to_sym end # Reloads all the I18n translations. def reload # Extract the backend to an attribute ::I18n.backend.load_translations end # Gets the list of available translation for a locale. # # @param locale [Symbol|NilClass] The locale to list. Defaults to the current locale. # @return [Hash] The available translations for the specified locale. def translations(locale = nil) locale ||= @locale @backend.send(:translations)[locale.to_sym] || {} end # Sets the current locale. # # @param value [Symbol] The locale to use for translations. Default is the current system locale. def locale=(value) @locale = value.to_sym ::I18n.locale = @locale end # Get the list of available translation for a locale. # # @return [Array] The list of available locales. def locales ::I18n.available_locales end # Localize a message. # # @param message [String|Symbol] The message to localize. # @param args [Array] Optional arguments to localize the message. # @return [String] The localized message. def translate(, **args) # PI: Ignore reek on this. = "#{root}.#{}" if !~ /^(\.|::)/ begin ::I18n.translate(, **args.merge(raise: true)) rescue ::I18n::MissingTranslationData raise Lazier::Exceptions::MissingTranslation, [locale, ] end end alias_method :t, :translate # Localize a message in a specific locale. # # @param locale [String|Symbol] The new locale to use for localization. # @param message [String|Symbol] The message to localize. # @param args [Array] Optional arguments to localize the message. # @return [String] The localized message. def translate_in_locale(locale, , *args) with_locale(locale) { translate(, *args) } end alias_method :tl, :translate_in_locale # Temporary sets a different locale and execute the given block. # # @param locale [String|Symbol] The new locale to use for localization. def with_locale(locale) old_locale = self.locale begin self.locale = locale return yield ensure self.locale = old_locale end end private # :nodoc: OSX_DETECTION = "defaults read .GlobalPreferences AppleLanguages | awk 'NR==2{gsub(/[ ,]/, \"\");print}'".freeze # :nodoc: def system_locale platform = Lazier.platform rv = [:java, :osx, :posix].include?(platform) ? send("system_locale_#{Lazier.platform}") : nil raise(RuntimeError) if rv.blank? rv rescue "en" end # :nodoc: def system_locale_java Java.java.util.Locale.getDefault.toString end # :nodoc: def system_locale_osx `#{OSX_DETECTION}`.strip end # :nodoc: def system_locale_posix ENV["LANG"] end # :nodoc: def setup_backend ::I18n.load_path += Dir["#{@path}/*.yml"] ::I18n.load_path.uniq! ::I18n.exception_handler = ::Lazier::Exceptions::TranslationExceptionHandler.new reload @backend = ::I18n.backend end end |
#path ⇒ String (readonly)
Returns The path where the translations are stored.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/lazier/i18n.rb', line 17 class I18n attr_accessor :locale attr_reader :root, :path, :backend # The default locale for new instances. mattr_accessor :default_locale # Returns the singleton instance of the settings. # # @param locale [Symbol|NilClass] The locale to use for translations. Default is the current system locale. # @param root [Symbol] The root level of the translation. # @param path [String|NilClass] The path where the translations are stored. # @param force [Boolean] Whether to force recreation of the instance. # @return [I18n] The singleton instance of the i18n. def self.instance(locale = nil, root: :lazier, path: nil, force: false) @instance = nil if force @instance ||= new(locale, root: root, path: path) end # Creates a new I18n object. # # @param locale [Symbol|NilClass] The locale to use. Defaults to the current locale. # @param root [Symbol] The root level of the translation. # @param path [String|NilClass] The path where the translations are stored. def initialize(locale = nil, root: :lazier, path: nil) Lazier.load_object path ||= Lazier::ROOT + "/locales" @root = root.to_sym @path = File.absolute_path(path.to_s) setup_backend self.locale = (locale || Lazier::I18n.default_locale || system_locale).to_sym end # Reloads all the I18n translations. def reload # Extract the backend to an attribute ::I18n.backend.load_translations end # Gets the list of available translation for a locale. # # @param locale [Symbol|NilClass] The locale to list. Defaults to the current locale. # @return [Hash] The available translations for the specified locale. def translations(locale = nil) locale ||= @locale @backend.send(:translations)[locale.to_sym] || {} end # Sets the current locale. # # @param value [Symbol] The locale to use for translations. Default is the current system locale. def locale=(value) @locale = value.to_sym ::I18n.locale = @locale end # Get the list of available translation for a locale. # # @return [Array] The list of available locales. def locales ::I18n.available_locales end # Localize a message. # # @param message [String|Symbol] The message to localize. # @param args [Array] Optional arguments to localize the message. # @return [String] The localized message. def translate(, **args) # PI: Ignore reek on this. = "#{root}.#{}" if !~ /^(\.|::)/ begin ::I18n.translate(, **args.merge(raise: true)) rescue ::I18n::MissingTranslationData raise Lazier::Exceptions::MissingTranslation, [locale, ] end end alias_method :t, :translate # Localize a message in a specific locale. # # @param locale [String|Symbol] The new locale to use for localization. # @param message [String|Symbol] The message to localize. # @param args [Array] Optional arguments to localize the message. # @return [String] The localized message. def translate_in_locale(locale, , *args) with_locale(locale) { translate(, *args) } end alias_method :tl, :translate_in_locale # Temporary sets a different locale and execute the given block. # # @param locale [String|Symbol] The new locale to use for localization. def with_locale(locale) old_locale = self.locale begin self.locale = locale return yield ensure self.locale = old_locale end end private # :nodoc: OSX_DETECTION = "defaults read .GlobalPreferences AppleLanguages | awk 'NR==2{gsub(/[ ,]/, \"\");print}'".freeze # :nodoc: def system_locale platform = Lazier.platform rv = [:java, :osx, :posix].include?(platform) ? send("system_locale_#{Lazier.platform}") : nil raise(RuntimeError) if rv.blank? rv rescue "en" end # :nodoc: def system_locale_java Java.java.util.Locale.getDefault.toString end # :nodoc: def system_locale_osx `#{OSX_DETECTION}`.strip end # :nodoc: def system_locale_posix ENV["LANG"] end # :nodoc: def setup_backend ::I18n.load_path += Dir["#{@path}/*.yml"] ::I18n.load_path.uniq! ::I18n.exception_handler = ::Lazier::Exceptions::TranslationExceptionHandler.new reload @backend = ::I18n.backend end end |
#root ⇒ Symbol (readonly)
Returns The root level of the translation.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/lazier/i18n.rb', line 17 class I18n attr_accessor :locale attr_reader :root, :path, :backend # The default locale for new instances. mattr_accessor :default_locale # Returns the singleton instance of the settings. # # @param locale [Symbol|NilClass] The locale to use for translations. Default is the current system locale. # @param root [Symbol] The root level of the translation. # @param path [String|NilClass] The path where the translations are stored. # @param force [Boolean] Whether to force recreation of the instance. # @return [I18n] The singleton instance of the i18n. def self.instance(locale = nil, root: :lazier, path: nil, force: false) @instance = nil if force @instance ||= new(locale, root: root, path: path) end # Creates a new I18n object. # # @param locale [Symbol|NilClass] The locale to use. Defaults to the current locale. # @param root [Symbol] The root level of the translation. # @param path [String|NilClass] The path where the translations are stored. def initialize(locale = nil, root: :lazier, path: nil) Lazier.load_object path ||= Lazier::ROOT + "/locales" @root = root.to_sym @path = File.absolute_path(path.to_s) setup_backend self.locale = (locale || Lazier::I18n.default_locale || system_locale).to_sym end # Reloads all the I18n translations. def reload # Extract the backend to an attribute ::I18n.backend.load_translations end # Gets the list of available translation for a locale. # # @param locale [Symbol|NilClass] The locale to list. Defaults to the current locale. # @return [Hash] The available translations for the specified locale. def translations(locale = nil) locale ||= @locale @backend.send(:translations)[locale.to_sym] || {} end # Sets the current locale. # # @param value [Symbol] The locale to use for translations. Default is the current system locale. def locale=(value) @locale = value.to_sym ::I18n.locale = @locale end # Get the list of available translation for a locale. # # @return [Array] The list of available locales. def locales ::I18n.available_locales end # Localize a message. # # @param message [String|Symbol] The message to localize. # @param args [Array] Optional arguments to localize the message. # @return [String] The localized message. def translate(, **args) # PI: Ignore reek on this. = "#{root}.#{}" if !~ /^(\.|::)/ begin ::I18n.translate(, **args.merge(raise: true)) rescue ::I18n::MissingTranslationData raise Lazier::Exceptions::MissingTranslation, [locale, ] end end alias_method :t, :translate # Localize a message in a specific locale. # # @param locale [String|Symbol] The new locale to use for localization. # @param message [String|Symbol] The message to localize. # @param args [Array] Optional arguments to localize the message. # @return [String] The localized message. def translate_in_locale(locale, , *args) with_locale(locale) { translate(, *args) } end alias_method :tl, :translate_in_locale # Temporary sets a different locale and execute the given block. # # @param locale [String|Symbol] The new locale to use for localization. def with_locale(locale) old_locale = self.locale begin self.locale = locale return yield ensure self.locale = old_locale end end private # :nodoc: OSX_DETECTION = "defaults read .GlobalPreferences AppleLanguages | awk 'NR==2{gsub(/[ ,]/, \"\");print}'".freeze # :nodoc: def system_locale platform = Lazier.platform rv = [:java, :osx, :posix].include?(platform) ? send("system_locale_#{Lazier.platform}") : nil raise(RuntimeError) if rv.blank? rv rescue "en" end # :nodoc: def system_locale_java Java.java.util.Locale.getDefault.toString end # :nodoc: def system_locale_osx `#{OSX_DETECTION}`.strip end # :nodoc: def system_locale_posix ENV["LANG"] end # :nodoc: def setup_backend ::I18n.load_path += Dir["#{@path}/*.yml"] ::I18n.load_path.uniq! ::I18n.exception_handler = ::Lazier::Exceptions::TranslationExceptionHandler.new reload @backend = ::I18n.backend end end |
Class Method Details
.instance(locale = nil, root: :lazier, path: nil, force: false) ⇒ I18n
Returns the singleton instance of the settings.
31 32 33 34 |
# File 'lib/lazier/i18n.rb', line 31 def self.instance(locale = nil, root: :lazier, path: nil, force: false) @instance = nil if force @instance ||= new(locale, root: root, path: path) end |
Instance Method Details
#locales ⇒ Array
Get the list of available translation for a locale.
78 79 80 |
# File 'lib/lazier/i18n.rb', line 78 def locales ::I18n.available_locales end |
#reload ⇒ Object
Reloads all the I18n translations.
53 54 55 56 |
# File 'lib/lazier/i18n.rb', line 53 def reload # Extract the backend to an attribute ::I18n.backend.load_translations end |
#translate(message, **args) ⇒ String Also known as: t
Localize a message.
87 88 89 90 91 92 93 94 95 96 |
# File 'lib/lazier/i18n.rb', line 87 def translate(, **args) # PI: Ignore reek on this. = "#{root}.#{}" if !~ /^(\.|::)/ begin ::I18n.translate(, **args.merge(raise: true)) rescue ::I18n::MissingTranslationData raise Lazier::Exceptions::MissingTranslation, [locale, ] end end |
#translate_in_locale(locale, message, *args) ⇒ String Also known as: tl
Localize a message in a specific locale.
105 106 107 |
# File 'lib/lazier/i18n.rb', line 105 def translate_in_locale(locale, , *args) with_locale(locale) { translate(, *args) } end |
#translations(locale = nil) ⇒ Hash
Gets the list of available translation for a locale.
62 63 64 65 |
# File 'lib/lazier/i18n.rb', line 62 def translations(locale = nil) locale ||= @locale @backend.send(:translations)[locale.to_sym] || {} end |
#with_locale(locale) ⇒ Object
Temporary sets a different locale and execute the given block.
113 114 115 116 117 118 119 120 121 122 |
# File 'lib/lazier/i18n.rb', line 113 def with_locale(locale) old_locale = self.locale begin self.locale = locale return yield ensure self.locale = old_locale end end |