class Locale::Tag::Rfc

Language tag class for RFC4646(BCP47).

Constants

EXTENSION
GRANDFATHERED
PRIVATEUSE
SINGLETON
TAG_RE
VARIANT

Attributes

extensions[R]
privateuse[R]

Public Class Methods

new(language, script = nil, region = nil, variants = [], extensions = [], privateuse = nil) click to toggle source
Calls superclass method Locale::Tag::Common.new
# File lib/locale/tag/rfc.rb, line 61
def initialize(language, script = nil, region = nil, variants = [],
             extensions = [], privateuse = nil)
  @extensions, @privateuse = extensions, privateuse
  super(language, script, region, variants)
end
parse(tag) click to toggle source

Parse the language tag and return the new Locale::Tag::Rfc.

# File lib/locale/tag/rfc.rb, line 32
def parse(tag)
  if tag =~ /\APOSIX\Z/  # This is the special case of POSIX locale but match this regexp.
    nil
  elsif tag =~ TAG_RE
    lang, script, region, subtag = $1, $2, $3, $4
    extensions = []
    variants = []
    if subtag =~ /#{PRIVATEUSE}/
        subtag, privateuse = $`, $1
      # Private use for CLDR.
      if /x-ldml(.*)/ =~ privateuse
        p_subtag = $1 
        extensions = p_subtag.scan(/(^|-)#{EXTENSION}/i).collect{|v| p_subtag.sub!(v[1], ""); v[1]}
        variants = p_subtag.scan(/(^|-)#{VARIANT}(?=(-|$))/i).collect{|v| v[1]}
      end
    end
    extensions += subtag.scan(/(^|-)#{EXTENSION}/i).collect{|v| subtag.sub!(v[1], ""); v[1]}
    variants += subtag.scan(/(^|-)#{VARIANT}(?=(-|$))/i).collect{|v| v[1]}
    
    ret = self.new(lang, script, region, variants, extensions, privateuse)
    ret.tag = tag
    ret
  else
    nil
  end
end

Public Instance Methods

extensions=(val) click to toggle source

Sets the extensions as an Array.

# File lib/locale/tag/rfc.rb, line 68
def extensions=(val)
  clear
  @extensions = val
end
privateuse=(val) click to toggle source

Sets the privateuse as a String

# File lib/locale/tag/rfc.rb, line 74
def privateuse=(val)
  clear
  @privateuse = val
end

Private Instance Methods

convert_to(klass) click to toggle source
Calls superclass method
# File lib/locale/tag/rfc.rb, line 80
def convert_to(klass)
  if klass == Rfc
    klass.new(language, script, region, variants, extensions, privateuse)
  elsif klass == Cldr
    exts = {}
    extensions.sort.each do |v|
      if v =~ /^k-(#{ALPHANUM}{2,})-(.*)$/i
        exts[$1] = $2
      end
    end
    klass.new(language, script, region, variants, exts)
  else
    super
  end
end
to_string() click to toggle source

Returns the language tag

<language>-<Script>-<REGION>-<variants>-<extensions>-<PRIVATEUSE>
(e.g.) "ja-Hira-JP-variant"

This is used in internal only. Use to_s instead.

Calls superclass method Locale::Tag::Common#to_string
# File lib/locale/tag/rfc.rb, line 101
def to_string
  s = super.gsub(/_/, "-")
  @extensions.sort.each do |v|
    s << "-#{v}"
  end
  s << "-#{@privateuse}" if @privateuse
  s
end