Class: Kotoshu::Language::Registry
- Inherits:
-
Object
- Object
- Kotoshu::Language::Registry
- Defined in:
- lib/kotoshu/language/registry.rb
Overview
Central registry for language registration and retrieval.
Uses Registry pattern for dynamic language discovery and management. Languages register themselves on load, making the system extensible.
Class Method Summary collapse
-
.all ⇒ Hash
Get all registered language classes.
-
.clear ⇒ void
Clear all registrations (mainly for testing).
-
.detect(text) ⇒ String?
Detect language from text.
-
.get(code) ⇒ Class?
Get language class by code.
-
.info(code) ⇒ Hash?
Get language info by code.
-
.register(code, language_class) ⇒ void
Register a language class with its code.
-
.register_detector(detector) ⇒ void
Register a detector for auto-detection.
-
.registered?(code) ⇒ Boolean
Check if a language is registered.
-
.supported_codes ⇒ Array<String>
Get all supported language codes.
Class Method Details
.all ⇒ Hash
Get all registered language classes.
94 95 96 |
# File 'lib/kotoshu/language/registry.rb', line 94 def all @languages.dup end |
.clear ⇒ void
This method returns an undefined value.
Clear all registrations (mainly for testing).
118 119 120 121 |
# File 'lib/kotoshu/language/registry.rb', line 118 def clear @languages.clear @detectors.clear end |
.detect(text) ⇒ String?
Detect language from text.
Tries registered detectors in order.
104 105 106 107 108 109 110 111 112 113 |
# File 'lib/kotoshu/language/registry.rb', line 104 def detect(text) return nil if text.nil? || text.empty? @detectors.each do |detector| result = detector.detect(text) return result if result end nil end |
.get(code) ⇒ Class?
Get language class by code.
Supports fallback to base language if variant not found. Also supports finding variants when asking for base language. For example:
-
“en-GB” falls back to “en” if “en-GB” not registered
-
“en” returns “en-US” if only “en-US” is registered
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/kotoshu/language/registry.rb', line 55 def get(code) return nil unless code # Try exact match first return @languages[code] if @languages.key?(code) base = code.split('-').first # If code has a hyphen (e.g., "en-GB"), try base language if code.include?('-') return @languages[base] end # If code is base language (e.g., "en"), find any variant @languages.each do |registered_code, klass| return klass if registered_code.split('-').first == base end nil end |
.info(code) ⇒ Hash?
Get language info by code.
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/kotoshu/language/registry.rb', line 127 def info(code) klass = get(code) return nil unless klass instance = klass.instance if klass.respond_to?(:instance) instance ||= klass.new { code: code, name: instance.name, variant: instance.variant, region: instance.region, encoding: instance.encoding, rtl?: instance.rtl?, script_type: instance.script_type } end |
.register(code, language_class) ⇒ void
This method returns an undefined value.
Register a language class with its code.
31 32 33 |
# File 'lib/kotoshu/language/registry.rb', line 31 def register(code, language_class) @languages[code] = language_class end |
.register_detector(detector) ⇒ void
This method returns an undefined value.
Register a detector for auto-detection.
Detectors are tried in order of registration.
41 42 43 |
# File 'lib/kotoshu/language/registry.rb', line 41 def register_detector(detector) @detectors << detector end |
.registered?(code) ⇒ Boolean
Check if a language is registered.
80 81 82 |
# File 'lib/kotoshu/language/registry.rb', line 80 def registered?(code) !get(code).nil? end |
.supported_codes ⇒ Array<String>
Get all supported language codes.
87 88 89 |
# File 'lib/kotoshu/language/registry.rb', line 87 def supported_codes @languages.keys.sort end |