class Locale::Tag::Cldr

(Unicode Common Locale Data Repository).
Unicode locale identifier class for CLDR-1.6.1.

def convert_to(klass) # :nodoc:

:nodoc:
def convert_to(klass) # :nodoc:
  if klass == Cldr
    klass.new(language, script, region, variants, extensions)
  elsif klass == Rfc
    exts = []
    @extensions.to_a.sort.each do |k, v|
      exts << "k-#{k[0,8]}-#{v[0,8]}"
    end
    klass.new(language, script, region, variants, exts)
  else
    super
  end
end

def extensions=(val)

Sets the extensions as an Hash.
def extensions=(val)
  @extensions = val
end

def initialize(language, script = nil, region = nil,

variants should be upcase.

Create Locale::Tag::Cldr.
def initialize(language, script = nil, region = nil, 
               variants = [], extensions = {})
  @extensions = extensions
  super(language, script, region, variants.map{|v| v.upcase})
end

def parse(tag)

Parse the language tag and return the new Locale::Tag::CLDR.
def parse(tag)
  case tag
  when /\APOSIX\Z/  # This is the special case of POSIX locale but match this regexp.
    nil
  when TAG_RE
    lang, script, region, subtag = $1, $2, $3, $4
    
    extensions = {}
    subtag.scan(/#{EXTENSION}/i).each{|v| 
      subtag.sub!(v, "")
      key, type = v.split("=")
      extensions[key] = type
    }
    variants = subtag.scan(/#{VARIANT}/i).collect{|v| v[0].upcase}
    
    ret = self.new(lang, script, region, variants, extensions)
    ret.tag = tag
    ret
  else
    nil
  end
end

def to_string

This is used in internal only. Use to_s instead.

(e.g.) "ja_Hira_JP_VARIANT1_VARIANT2@foo1=var1;foo2=var2"
Returns the language tag.
def to_string
  s = super
  if @extensions.size > 0
    s << "@" << @extensions.to_a.sort.map{|k, v| "#{k}=#{v}"}.join(";")
  end
  s 
end