Method: Rack::Acceptable::LanguageTag.extract_language_info

Defined in:
lib/rack/acceptable/language_tag.rb

.extract_language_info(langtag) ⇒ Object

Parameters

langtag<String>

The LangTag snippet.

Returns

Array or nil

It returns nil, when the snipped passed:

  • does not conform the Language-Tag ABNF (malformed)

  • represents a ‘grandfathered’ Language-Tag

  • starts with ‘x’ singleton (‘privateuse’).

Otherwise you’ll get an Array with:

  • primary subtag (as String, downcased),

  • extlang (as String, downcased) or nil,

  • script (as String, capitalized) or nil,

  • region (as String, upcased) or nil

  • downcased variants (Array) or nil.

Notes

In most cases, it’s quite enough. Take a look, for example, at ‘35-character recomendation’.



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/rack/acceptable/language_tag.rb', line 105

def extract_language_info(langtag)
  tag = langtag.downcase
  return nil if GRANDFATHERED_TAGS.key?(langtag)
  return nil unless LANGTAG_INFO_REGEX === tag

  primary     = $1
  extlang     = nil
  script      = $2
  region      = $3
  variants    = $4.split(Utils::HYPHEN_SPLITTER)[1..-1]

  primary, *extlang = primary.split(Utils::HYPHEN_SPLITTER) if primary.include?(Const::HYPHEN)
  script.capitalize! if script
  region.upcase! if region

  [primary, extlang, script, region, variants]
end