Class: CSL::Locale
- Extended by:
- Loader
- Includes:
- Comparable
- Defined in:
- lib/csl/locale.rb,
lib/csl/locale/date.rb,
lib/csl/locale/term.rb,
lib/csl/locale/style_options.rb
Overview
CSL::Locales contain locale specific date formatting options, term translations, and a number ordinalizer.
Defined Under Namespace
Classes: Date, DatePart, StyleOptions, Term, Terms
Class Attribute Summary collapse
-
.default ⇒ Object
Returns the value of attribute default.
-
.languages ⇒ Object
readonly
Returns the value of attribute languages.
-
.regions ⇒ Object
readonly
Returns the value of attribute regions.
Instance Attribute Summary collapse
-
#region ⇒ Object
Returns the value of attribute region.
Attributes included from Loader
Attributes inherited from Node
Attributes included from Treelike
Class Method Summary collapse
- .load(input = Locale.default) ⇒ Object
-
.normalize(tag) ⇒ String
Normalizes an IETF tag; adds a language’s default region or a region’s default language.
Instance Method Summary collapse
-
#<=>(other) ⇒ 1, ...
Locales are sorted first by language, then by region; sort order is alphabetical with the following exceptions: the default locale is prioritised; in case of a language match the default region of that language will be prioritised (e.g., de-DE will come before de-AT even though the alphabetical order would be different).
- #added_to(node) ⇒ Object
-
#clear ⇒ self
Sets the locale’s language and region to nil.
- #default? ⇒ Boolean
-
#default_language? ⇒ Boolean
Whether or not the Locale’s language is the default language for its region.
-
#default_region? ⇒ Boolean
Whehter or not the Locale’s region is the default region for its language.
-
#each_date ⇒ Object
Calls block once for each date format defined by the locale.
-
#each_term ⇒ Object
Calls block once for each term defined by the locale.
-
#initialize(*arguments) {|_self| ... } ⇒ Locale
constructor
Returns a new locale.
- #initialize_copy(other) ⇒ Object
-
#inspect ⇒ String
A string representation of the Locale.
-
#legacy? ⇒ Boolean
Whether or not the Locale’s version is less than CSL-Ruby’s default version.
- #merge(*others) ⇒ Locale
- #merge!(*others) ⇒ self
-
#ordinalize(number, options = {}) ⇒ String
Ordinalizes the passed-in number using either the ordinal or long-ordinal forms defined by the locale.
-
#set(locale) ⇒ self
Sets language and region according to the passed-in locale string.
-
#to_s ⇒ String
The Locale’s IETF tag.
-
#translate(name, options = {}) ⇒ String?
(also: #t)
The term’s translation.
- #valid? ⇒ Boolean
- #validate ⇒ Object
- #version ⇒ Object
- #version=(version) ⇒ Object
Methods included from Loader
extend_name, extend_path, list, load
Methods inherited from Node
#attribute?, #attributes?, #attributes_for, constantize, create, create_attributes, #custom_attributes, #deep_copy, #default_attribute?, #default_attributes, default_attributes, #each, #exact_match?, #formatting_options, #has_attributes?, #has_default_attributes?, #has_language?, hide_default_attributes!, hide_default_attributes?, match?, #match?, matches?, parse, parse!, #save_to, show_default_attributes!, #tags, #textnode?, types
Methods included from PrettyPrinter
Methods included from Treelike
#<<, #add_child, #add_children, #ancestors, #delete_child, #delete_children, #depth, #descendants, #each_ancestor, #each_child, #each_descendant, #each_sibling, #empty?, #find_child, #find_children, #has_children?, #root, #root?, #siblings, #unlink
Constructor Details
#initialize(*arguments) {|_self| ... } ⇒ Locale
Returns a new locale. In the first form, the language/regions is set to the default language and region. In the second form the language/region is set by the passed-in IETF tag. The third form additionally accepts a hash of localize style-options. The fourth form is the standard node attribute initialize signature.
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/csl/locale.rb', line 105 def initialize(*arguments) case arguments.length when 0 locale, attributes, = Locale.default, {}, nil when 1 if arguments[0].is_a?(Hash) arguments[0] = arguments[0].symbolize_keys locale = arguments[0].delete(:lang) || arguments[0].delete(:'xml:lang') || Locale.default attributes, = arguments else attributes, locale, = {}, *arguments end when 2 attributes, locale, = {}, *arguments else raise ArgumentError, "wrong number of arguments (#{arguments.length} for 0..2)" end super(attributes, &nil) set(locale) unless locale.nil? unless .nil? children[:'style-options'] = StyleOptions.new() end yield self if block_given? end |
Class Attribute Details
.default ⇒ Object
Returns the value of attribute default.
37 38 39 |
# File 'lib/csl/locale.rb', line 37 def default @default end |
.languages ⇒ Object (readonly)
Returns the value of attribute languages.
38 39 40 |
# File 'lib/csl/locale.rb', line 38 def languages @languages end |
.regions ⇒ Object (readonly)
Returns the value of attribute regions.
38 39 40 |
# File 'lib/csl/locale.rb', line 38 def regions @regions end |
Instance Attribute Details
#region ⇒ Object
Returns the value of attribute region.
85 86 87 |
# File 'lib/csl/locale.rb', line 85 def region @region end |
Class Method Details
.load(input = Locale.default) ⇒ Object
40 41 42 43 |
# File 'lib/csl/locale.rb', line 40 def load(input = Locale.default) input = normalize input if input.to_s =~ tag_pattern super end |
.normalize(tag) ⇒ String
Normalizes an IETF tag; adds a language’s default region or a region’s default language.
56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/csl/locale.rb', line 56 def normalize(tag) tag = tag.to_s.strip raise ArgumentError, "not a valid IETF tag: #{tag.inspect}" unless tag =~ tag_pattern language, region = tag.split(/-/) return [language, regions[language.to_sym]].compact.join('-') if region.nil? return [languages[region.to_sym], region].join('-') if language.empty? tag end |
Instance Method Details
#<=>(other) ⇒ 1, ...
Locales are sorted first by language, then by region; sort order is alphabetical with the following exceptions: the default locale is prioritised; in case of a language match the default region of that language will be prioritised (e.g., de-DE will come before de-AT even though the alphabetical order would be different).
331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 |
# File 'lib/csl/locale.rb', line 331 def <=>(other) case when !other.is_a?(Locale) nil when [language, region] == [other.language, other.region] 0 when default? -1 when other.default? 1 when language == other.language case when default_region? -1 when other.default_region? 1 else region <=> other.region end else language <=> other.language end end |
#added_to(node) ⇒ Object
143 144 145 146 |
# File 'lib/csl/locale.rb', line 143 def added_to(node) raise ValidationError, "not allowed to add locale to #{node.nodename}" unless node.nodename == 'style' end |
#clear ⇒ self
Sets the locale’s language and region to nil.
196 197 198 199 |
# File 'lib/csl/locale.rb', line 196 def clear @language, @region = nil self end |
#default? ⇒ Boolean
283 284 285 |
# File 'lib/csl/locale.rb', line 283 def default? to_s == Locale.default end |
#default_language? ⇒ Boolean
Returns whether or not the Locale’s language is the default language for its region.
295 296 297 |
# File 'lib/csl/locale.rb', line 295 def default_language? language && language == Locale.languages[region] end |
#default_region? ⇒ Boolean
Returns whehter or not the Locale’s region is the default region for its language.
289 290 291 |
# File 'lib/csl/locale.rb', line 289 def default_region? region && region == Locale.regions[language] end |
#each_date ⇒ Object
Calls block once for each date format defined by the locale. If no block is given, an enumerator is returned instead.
274 275 276 277 278 279 280 |
# File 'lib/csl/locale.rb', line 274 def each_date if block_given? date.each(&Proc.new) else enum_for :each_date end end |
#each_term ⇒ Object
Calls block once for each term defined by the locale. If no block is given, an enumerator is returned instead.
259 260 261 262 263 264 265 266 |
# File 'lib/csl/locale.rb', line 259 def each_term if block_given? terms.each(&Proc.new) self else enum_for :each_term end end |
#initialize_copy(other) ⇒ Object
137 138 139 140 |
# File 'lib/csl/locale.rb', line 137 def initialize_copy(other) super @language, @region = other.language, other.region end |
#inspect ⇒ String
Returns a string representation of the Locale.
361 362 363 |
# File 'lib/csl/locale.rb', line 361 def inspect "#<#{self.class.name} #{to_s}>" end |
#legacy? ⇒ Boolean
Returns whether or not the Locale’s version is less than CSL-Ruby’s default version.
170 171 172 |
# File 'lib/csl/locale.rb', line 170 def legacy? version < Schema.major_version end |
#merge(*others) ⇒ Locale
308 309 310 |
# File 'lib/csl/locale.rb', line 308 def merge(*others) deep_copy.merge!(*others) end |
#merge!(*others) ⇒ self
313 314 315 316 317 318 319 320 |
# File 'lib/csl/locale.rb', line 313 def merge!(*others) others.each do |other| other merge_dates other end self end |
#ordinalize(number, options = {}) ⇒ String
For CSL 1.0 (and older) locales that do not define an “ordinal-00” term the algorithm specified by CSL 1.0 is used; otherwise uses the CSL 1.0.1 algorithm with improved support for languages other than English.
Ordinalizes the passed-in number using either the ordinal or long-ordinal forms defined by the locale. If a long-ordinal form is requested but not available, the regular ordinal will be returned instead.
240 241 242 243 244 245 246 247 248 249 250 251 |
# File 'lib/csl/locale.rb', line 240 def ordinalize(number, = {}) raise ArgumentError, "unable to ordinalize #{number}; integer expected" unless number.respond_to?(:to_i) number = number.to_i ordinal = terms.ordinalize number, return number.to_s if ordinal.nil? return ordinal.to_s() if ordinal.long_ordinal? [number, ordinal.to_s()].join end |
#set(locale) ⇒ self
Sets language and region according to the passed-in locale string. If the region part is not defined by the string, this method will set the region to the default region for the given language.
189 190 191 192 |
# File 'lib/csl/locale.rb', line 189 def set(locale) @language, @region = Locale.normalize(locale).split(/-/).map(&:to_sym) self end |
#to_s ⇒ String
Returns the Locale’s IETF tag.
356 357 358 |
# File 'lib/csl/locale.rb', line 356 def to_s [language, region].compact.join('-') end |
#translate(name, options = {}) ⇒ String? Also known as: t
Returns the term’s translation.
202 203 204 205 |
# File 'lib/csl/locale.rb', line 202 def translate(name, = {}) term = terms.lookup name, term && term.to_s() end |
#valid? ⇒ Boolean
303 304 305 |
# File 'lib/csl/locale.rb', line 303 def valid? validate.empty? end |
#validate ⇒ Object
299 300 301 |
# File 'lib/csl/locale.rb', line 299 def validate Schema.validate self end |
#version ⇒ Object
149 150 151 |
# File 'lib/csl/locale.rb', line 149 def version attributes[:version] end |
#version=(version) ⇒ Object
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/csl/locale.rb', line 153 def version=(version) raise ArgumentError, "failed to set version to #{version}" unless version.respond_to?(:to_s) version = version.to_s.strip raise ArgumentError, "failed to set version to #{version}: not a version string" unless version =~ /^\d[\d\.]+$/ if version > Schema.version warn "setting version to #{version}; latest supported version is #{Schema.version}" end attributes[:version] = version end |