# frozen_string_literal: true # Takes a given locale string and formats it properly for the desired framework # # Examples: # # @formatter = LocaleFormatter.new('en-GB').to_s # => 'en-GB' # @formatter = LocaleFormatter.new('en-GB', format: :fast_gettext).to_s # => 'en_GB' # @formatter = LocaleFormatter.new('en_GB', format: :i18n).to_s # => 'en-GB' # class LocaleFormatter # I18n formats use a hyphen to join the language and region I18N_JOIN = "-" # FastGettext formats use an underscore to join the language and region FAST_GETTEXT_JOIN = "_" # Regex to extract the components (language and region) from a locale String COMPONENT_FORMAT = /[a-z]{2}/i # The format to modify the String in # # Returns Symbol attr_reader :format # The formatted locale as a string # # Returns String attr_reader :string alias to_s string # Takes a given locale string and formats it properly for the desired framework # # string - A locale String (e.g. "en_GB", "en-GB", "en", :en) # format - A Symbol representing the desired translation framework (defaults: :i18n) # def initialize(string, format: :i18n) @format = format language, region = string.to_s.scan(COMPONENT_FORMAT) join_char = format.to_sym == :fast_gettext ? FAST_GETTEXT_JOIN : I18N_JOIN language.downcase! if language region.upcase! if region if region.present? @string = "#{language}#{join_char}#{region}" else @string = language end end end