Module: Ibex::Messages
- Defined in:
- lib/ibex/messages.rb,
sig/ibex/messages.rbs
Overview
Immutable built-in diagnostic translations, separate from user E00xx sentence-keyed parser error catalogs.
Constant Summary collapse
- ROOT =
File.("messages", __dir__ || raise("message catalog directory is unavailable"))
- LANGUAGES =
%w[en ja].freeze
Class Method Summary collapse
- .catalog(language) ⇒ Object
- .known?(id) ⇒ Boolean
- .language(requested) ⇒ Object
- .translate(id, language: "en", **values) ⇒ Object
Instance Method Summary collapse
- #self?.catalog ⇒ Hash[String, String]
- #self?.known? ⇒ Boolean
- #self?.language ⇒ String
- #self?.load_catalog ⇒ Hash[String, String]
- #self?.translate ⇒ String
Class Method Details
.catalog(language) ⇒ Object
39 40 41 42 |
# File 'lib/ibex/messages.rb', line 39 def catalog(language) @catalogs ||= {} #: Hash[String, Hash[String, String]] @catalogs[language] ||= load_catalog(language) end |
.known?(id) ⇒ Boolean
33 34 35 |
# File 'lib/ibex/messages.rb', line 33 def known?(id) catalog("en").key?(id) end |
.language(requested) ⇒ Object
14 15 16 17 |
# File 'lib/ibex/messages.rb', line 14 def language(requested) candidate = requested.to_s.downcase.tr("_", "-").split("-").first LANGUAGES.include?(candidate) ? candidate : "en" end |
.translate(id, language: "en", **values) ⇒ Object
21 22 23 24 25 26 27 28 29 |
# File 'lib/ibex/messages.rb', line 21 def translate(id, language: "en", **values) selected = catalog(self.language(language)) template = selected[id] || catalog("en").fetch(id) do raise Ibex::Error, "(messages):1:1: unknown built-in message id #{id.inspect}" end template % values.transform_keys(&:to_sym) rescue KeyError => e raise Ibex::Error, "(messages):1:1: missing interpolation for #{id.inspect}: #{e.}" end |
Instance Method Details
#self?.catalog ⇒ Hash[String, String]
21 |
# File 'sig/ibex/messages.rbs', line 21
def self?.catalog: (String language) -> Hash[String, String]
|
#self?.known? ⇒ Boolean
18 |
# File 'sig/ibex/messages.rbs', line 18
def self?.known?: (String id) -> bool
|
#self?.language ⇒ String
12 |
# File 'sig/ibex/messages.rbs', line 12
def self?.language: (String? requested) -> String
|
#self?.load_catalog ⇒ Hash[String, String]
24 |
# File 'sig/ibex/messages.rbs', line 24
def self?.load_catalog: (String language) -> Hash[String, String]
|
#self?.translate ⇒ String
15 |
# File 'sig/ibex/messages.rbs', line 15
def self?.translate: (String id, ?language: String, **Object? values) -> String
|