Class: TwitterCldr::Shared::Locale

Inherits:
Object
  • Object
show all
Defined in:
lib/twitter_cldr/shared/locale.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(language, script = nil, region = nil, variants = []) ⇒ Locale

Returns a new instance of Locale.


220
221
222
223
224
225
# File 'lib/twitter_cldr/shared/locale.rb', line 220

def initialize(language, script = nil, region = nil, variants = [])
  @language = language ? language.to_s : nil
  @script = script ? script.to_s : nil
  @region = region ? region.to_s : nil
  @variants = Array(variants)
end

Instance Attribute Details

#languageObject

Returns the value of attribute language


218
219
220
# File 'lib/twitter_cldr/shared/locale.rb', line 218

def language
  @language
end

#regionObject

Returns the value of attribute region


218
219
220
# File 'lib/twitter_cldr/shared/locale.rb', line 218

def region
  @region
end

#scriptObject

Returns the value of attribute script


218
219
220
# File 'lib/twitter_cldr/shared/locale.rb', line 218

def script
  @script
end

#variantsObject

Returns the value of attribute variants


218
219
220
# File 'lib/twitter_cldr/shared/locale.rb', line 218

def variants
  @variants
end

Class Method Details

.parse(locale_text) ⇒ Object

unicode.org/reports/tr35/tr35-9.html#Likely_Subtags

  1. Make sure the input locale is in canonical form: uses the right separator, and has the right casing.

  2. Replace any deprecated subtags with their canonical values using the <alias> data in supplemental metadata. Use the first value in the replacement list, if it exists.

  3. If the tag is grandfathered (see <variable id=“$grandfathered” type=“choice”> in the supplemental data), then return it. (NOTE: grandfathered subtags are no longer part of CLDR)

  4. Remove the script code 'Zzzz' and the region code 'ZZ' if they occur; change an empty language subtag to 'und'.

  5. Get the components of the cleaned-up tag (language¹, script¹, and region¹), plus any variants if they exist (including keywords).


29
30
31
32
33
34
35
36
# File 'lib/twitter_cldr/shared/locale.rb', line 29

def parse(locale_text)
  locale_text = locale_text.to_s.strip

  normalize(locale_text).tap do |locale|
    replace_aliased_subtags(locale)
    remove_placeholder_tags(locale)
  end
end

.parse_likely(locale_text) ⇒ Object


46
47
48
# File 'lib/twitter_cldr/shared/locale.rb', line 46

def parse_likely(locale_text)
  LikelySubtags.locale_for(locale_text)
end

.split(locale_text) ⇒ Object


50
51
52
# File 'lib/twitter_cldr/shared/locale.rb', line 50

def split(locale_text)
  locale_text.strip.split(/[-_ ]/)
end

.valid?(locale_text) ⇒ Boolean

Returns:

  • (Boolean)

38
39
40
41
42
43
44
# File 'lib/twitter_cldr/shared/locale.rb', line 38

def valid?(locale_text)
  # make sure all subtags have at least one identity, i.e. they exist
  # in one of the language/script/region/variant lists
  identify_subtags(locale_text.strip).all? do |subtag|
    !subtag.last.empty?
  end
end

Instance Method Details

#<=>(other) ⇒ Object


299
300
301
# File 'lib/twitter_cldr/shared/locale.rb', line 299

def <=>(other)
  other.sort_key <=> sort_key
end

#==(other) ⇒ Object Also known as: eql?


278
279
280
281
282
283
# File 'lib/twitter_cldr/shared/locale.rb', line 278

def ==(other)
  language == other.language &&
    script == other.script &&
    region == other.region &&
    variants == other.variants
end

#abbreviated_scriptObject


232
233
234
# File 'lib/twitter_cldr/shared/locale.rb', line 232

def abbreviated_script
  @short_script ||= PropertyValueAliases.abbreviated_alias_for('sc', script) || script
end

#ancestor_chainObject


303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
# File 'lib/twitter_cldr/shared/locale.rb', line 303

def ancestor_chain
  ancestry = [self]
  remaining = [self]

  until remaining.empty?
    locale = remaining.pop

    if parent = self.class.send(:parent_locales)[locale.to_s]
      parent = self.class.parse(parent)
      ancestry << parent
      remaining << parent
    else
      parents = locale.permutations.map { |p| self.class.parse(p) }
      remaining += parents - ancestry
      ancestry += parents - ancestry
    end
  end

  ancestry
end

#dasherizedObject


252
253
254
# File 'lib/twitter_cldr/shared/locale.rb', line 252

def dasherized
  join('-')
end

#full_scriptObject


227
228
229
230
# File 'lib/twitter_cldr/shared/locale.rb', line 227

def full_script
  # fall back to abbreviated script if long alias can't be found
  @full_script ||= PropertyValueAliases.long_alias_for('sc', script) || script
end

#hashObject


287
288
289
# File 'lib/twitter_cldr/shared/locale.rb', line 287

def hash
  to_a.hash
end

#join(delimiter = '_') ⇒ Object Also known as: underscored, to_s


256
257
258
# File 'lib/twitter_cldr/shared/locale.rb', line 256

def join(delimiter = '_')
  to_a.join(delimiter)
end

#max_supportedObject


240
241
242
# File 'lib/twitter_cldr/shared/locale.rb', line 240

def max_supported
  @max_supported ||= maximize.supported
end

#maximizeObject


236
237
238
# File 'lib/twitter_cldr/shared/locale.rb', line 236

def maximize
  LikelySubtags.locale_for(to_s)
end

#permutations(delimiter = '_') ⇒ Object


267
268
269
270
271
272
273
274
275
276
# File 'lib/twitter_cldr/shared/locale.rb', line 267

def permutations(delimiter = '_')
  perms = [
    [language, script, region].compact.join(delimiter),
    [language, script].compact.join(delimiter),
    [language, region].compact.join(delimiter),
    language,
  ]

  perms.uniq
end

#sort_keyObject


291
292
293
294
295
296
297
# File 'lib/twitter_cldr/shared/locale.rb', line 291

def sort_key
  k = 0
  k += 3 if language
  k += 2 if script
  k += 1 if region
  k
end

#supportedObject


244
245
246
247
248
249
250
# File 'lib/twitter_cldr/shared/locale.rb', line 244

def supported
  @supported ||= begin
    ancestor_chain.sort.find do |loc|
      TwitterCldr.supported_locale?(loc.dasherized)
    end
  end
end

#to_aObject


263
264
265
# File 'lib/twitter_cldr/shared/locale.rb', line 263

def to_a
  ([language, script, region] + variants).compact
end