class Locales

Matches configured locales against language ranges.

Definitions

def self.expand(locale, patterns)

Expand a locale into progressively less specific language ranges.

Signature

parameter locale String

The locale to expand.

parameter patterns Hash

The destination language-range mapping.

Implementation

def self.expand(locale, patterns)
	parts = locale.split("-")
	
	while parts.any?
		pattern = parts.join("-")
		patterns[pattern] ||= locale
		parts.pop
	end
end

def initialize(names)

Initialize the configured locales.

Signature

parameter names Array(String)

The locale names, in preference order.

Implementation

def initialize(names)
	@names = names
	@patterns = {}
	
	@names.each do |name|
		self.class.expand(name, @patterns)
	end
	
	freeze
end

def freeze

Freeze this object and its internal state.

Signature

returns self

This object.

Implementation

def freeze
	return self if frozen?
	
	@names.freeze
	@patterns.freeze
	
	return super
end

def match(languages)

Select configured locales matching the given language ranges.

Signature

parameter languages Enumerable

Preferred language ranges.

returns Array(String)

Matching locale names in language preference order.

Implementation

def match(languages)
	languages.filter_map do |language|
		@patterns[language.name]
	end
end