summaryrefslogtreecommitdiff
path: root/vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale')
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/fallbacks.rb107
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/tag.rb28
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/tag/parents.rb24
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/tag/rfc4646.rb74
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/tag/simple.rb39
5 files changed, 272 insertions, 0 deletions
diff --git a/vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/fallbacks.rb b/vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/fallbacks.rb
new file mode 100644
index 0000000..56d08d7
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/fallbacks.rb
@@ -0,0 +1,107 @@
+# Locale Fallbacks
+#
+# Extends the I18n module to hold a fallbacks instance which is set to an
+# instance of I18n::Locale::Fallbacks by default but can be swapped with a
+# different implementation.
+#
+# Locale fallbacks will compute a number of fallback locales for a given locale.
+# For example:
+#
+# <pre><code>
+# I18n.fallbacks[:"es-MX"] # => [:"es-MX", :es, :en] </code></pre>
+#
+# Locale fallbacks always fall back to
+#
+# * all parent locales of a given locale (e.g. :es for :"es-MX") first,
+# * the current default locales and all of their parents second
+#
+# The default locales are set to [] by default but can be set to something else.
+#
+# One can additionally add any number of additional fallback locales manually.
+# These will be added before the default locales to the fallback chain. For
+# example:
+#
+# # using a custom locale as default fallback locale
+#
+# I18n.fallbacks = I18n::Locale::Fallbacks.new(:"en-GB", :"de-AT" => :de, :"de-CH" => :de)
+# I18n.fallbacks[:"de-AT"] # => [:"de-AT", :de, :"en-GB", :en]
+# I18n.fallbacks[:"de-CH"] # => [:"de-CH", :de, :"en-GB", :en]
+#
+# # mapping fallbacks to an existing instance
+#
+# # people speaking Catalan also speak Spanish as spoken in Spain
+# fallbacks = I18n.fallbacks
+# fallbacks.map(:ca => :"es-ES")
+# fallbacks[:ca] # => [:ca, :"es-ES", :es, :"en-US", :en]
+#
+# # people speaking Arabian as spoken in Palestine also speak Hebrew as spoken in Israel
+# fallbacks.map(:"ar-PS" => :"he-IL")
+# fallbacks[:"ar-PS"] # => [:"ar-PS", :ar, :"he-IL", :he, :"en-US", :en]
+# fallbacks[:"ar-EG"] # => [:"ar-EG", :ar, :"en-US", :en]
+#
+# # people speaking Sami as spoken in Finland also speak Swedish and Finnish as spoken in Finland
+# fallbacks.map(:sms => [:"se-FI", :"fi-FI"])
+# fallbacks[:sms] # => [:sms, :"se-FI", :se, :"fi-FI", :fi, :"en-US", :en]
+
+module I18n
+ module Locale
+ class Fallbacks < Hash
+ def initialize(*mappings)
+ @map = {}
+ map(mappings.pop) if mappings.last.is_a?(Hash)
+ self.defaults = mappings.empty? ? [] : mappings
+ end
+
+ def defaults=(defaults)
+ @defaults = defaults.flat_map { |default| compute(default, false) }
+ end
+ attr_reader :defaults
+
+ def [](locale)
+ raise InvalidLocale.new(locale) if locale.nil?
+ raise Disabled.new('fallback#[]') if locale == false
+ locale = locale.to_sym
+ super || store(locale, compute(locale))
+ end
+
+ def map(*args, &block)
+ if args.count == 1 && !block_given?
+ mappings = args.first
+ mappings.each do |from, to|
+ from, to = from.to_sym, Array(to)
+ to.each do |_to|
+ @map[from] ||= []
+ @map[from] << _to.to_sym
+ end
+ end
+ else
+ @map.map(*args, &block)
+ end
+ end
+
+ def empty?
+ @map.empty? && @defaults.empty?
+ end
+
+ def inspect
+ "#<#{self.class.name} @map=#{@map.inspect} @defaults=#{@defaults.inspect}>"
+ end
+
+ protected
+
+ def compute(tags, include_defaults = true, exclude = [])
+ result = []
+ Array(tags).each do |tag|
+ tags = I18n::Locale::Tag.tag(tag).self_and_parents.map! { |t| t.to_sym } - exclude
+ result += tags
+ tags.each { |_tag| result += compute(@map[_tag], false, exclude + result) if @map[_tag] }
+ end
+
+ result.push(*defaults) if include_defaults
+ result.uniq!
+ result.compact!
+ result
+ end
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/tag.rb b/vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/tag.rb
new file mode 100644
index 0000000..a640b44
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/tag.rb
@@ -0,0 +1,28 @@
+# encoding: utf-8
+
+module I18n
+ module Locale
+ module Tag
+ autoload :Parents, 'i18n/locale/tag/parents'
+ autoload :Rfc4646, 'i18n/locale/tag/rfc4646'
+ autoload :Simple, 'i18n/locale/tag/simple'
+
+ class << self
+ # Returns the current locale tag implementation. Defaults to +I18n::Locale::Tag::Simple+.
+ def implementation
+ @@implementation ||= Simple
+ end
+
+ # Sets the current locale tag implementation. Use this to set a different locale tag implementation.
+ def implementation=(implementation)
+ @@implementation = implementation
+ end
+
+ # Factory method for locale tags. Delegates to the current locale tag implementation.
+ def tag(tag)
+ implementation.tag(tag)
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/tag/parents.rb b/vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/tag/parents.rb
new file mode 100644
index 0000000..6283e66
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/tag/parents.rb
@@ -0,0 +1,24 @@
+module I18n
+ module Locale
+ module Tag
+ module Parents
+ def parent
+ @parent ||=
+ begin
+ segs = to_a
+ segs.compact!
+ segs.length > 1 ? self.class.tag(*segs[0..(segs.length - 2)].join('-')) : nil
+ end
+ end
+
+ def self_and_parents
+ @self_and_parents ||= [self].concat parents
+ end
+
+ def parents
+ @parents ||= parent ? [parent].concat(parent.parents) : []
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/tag/rfc4646.rb b/vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/tag/rfc4646.rb
new file mode 100644
index 0000000..4ce4c75
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/tag/rfc4646.rb
@@ -0,0 +1,74 @@
+# RFC 4646/47 compliant Locale tag implementation that parses locale tags to
+# subtags such as language, script, region, variant etc.
+#
+# For more information see by http://en.wikipedia.org/wiki/IETF_language_tag
+#
+# Rfc4646::Parser does not implement grandfathered tags.
+
+module I18n
+ module Locale
+ module Tag
+ RFC4646_SUBTAGS = [ :language, :script, :region, :variant, :extension, :privateuse, :grandfathered ]
+ RFC4646_FORMATS = { :language => :downcase, :script => :capitalize, :region => :upcase, :variant => :downcase }
+
+ class Rfc4646 < Struct.new(*RFC4646_SUBTAGS)
+ class << self
+ # Parses the given tag and returns a Tag instance if it is valid.
+ # Returns false if the given tag is not valid according to RFC 4646.
+ def tag(tag)
+ matches = parser.match(tag)
+ new(*matches) if matches
+ end
+
+ def parser
+ @@parser ||= Rfc4646::Parser
+ end
+
+ def parser=(parser)
+ @@parser = parser
+ end
+ end
+
+ include Parents
+
+ RFC4646_FORMATS.each do |name, format|
+ define_method(name) { self[name].send(format) unless self[name].nil? }
+ end
+
+ def to_sym
+ to_s.to_sym
+ end
+
+ def to_s
+ @tag ||= to_a.compact.join("-")
+ end
+
+ def to_a
+ members.collect { |attr| self.send(attr) }
+ end
+
+ module Parser
+ PATTERN = %r{\A(?:
+ ([a-z]{2,3}(?:(?:-[a-z]{3}){0,3})?|[a-z]{4}|[a-z]{5,8}) # language
+ (?:-([a-z]{4}))? # script
+ (?:-([a-z]{2}|\d{3}))? # region
+ (?:-([0-9a-z]{5,8}|\d[0-9a-z]{3}))* # variant
+ (?:-([0-9a-wyz](?:-[0-9a-z]{2,8})+))* # extension
+ (?:-(x(?:-[0-9a-z]{1,8})+))?| # privateuse subtag
+ (x(?:-[0-9a-z]{1,8})+)| # privateuse tag
+ /* ([a-z]{1,3}(?:-[0-9a-z]{2,8}){1,2}) */ # grandfathered
+ )\z}xi
+
+ class << self
+ def match(tag)
+ c = PATTERN.match(tag.to_s).captures
+ c[0..4] << (c[5].nil? ? c[6] : c[5]) << c[7] # TODO c[7] is grandfathered, throw a NotImplemented exception here?
+ rescue
+ false
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/tag/simple.rb b/vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/tag/simple.rb
new file mode 100644
index 0000000..18d55c2
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/i18n-1.15.2/lib/i18n/locale/tag/simple.rb
@@ -0,0 +1,39 @@
+# Simple Locale tag implementation that computes subtags by simply splitting
+# the locale tag at '-' occurrences.
+module I18n
+ module Locale
+ module Tag
+ class Simple
+ class << self
+ def tag(tag)
+ new(tag)
+ end
+ end
+
+ include Parents
+
+ attr_reader :tag
+
+ def initialize(*tag)
+ @tag = tag.join('-').to_sym
+ end
+
+ def subtags
+ @subtags = tag.to_s.split('-').map!(&:to_s)
+ end
+
+ def to_sym
+ tag
+ end
+
+ def to_s
+ tag.to_s
+ end
+
+ def to_a
+ subtags
+ end
+ end
+ end
+ end
+end