Module: Ibex::Messages
- Defined in:
- lib/ibex/messages.rb
Overview
Immutable built-in diagnostic translations, separate from user E00xx sentence-keyed parser error catalogs.
Constant Summary collapse
- ROOT =
: String
File.("messages", __dir__ || raise("message catalog directory is unavailable"))
- LANGUAGES =
: Array
%w[en ja].freeze
Class Method Summary collapse
- .catalog(language) ⇒ Object
- .known?(id) ⇒ Boolean
- .language(requested) ⇒ Object
- .translate(id, language: "en", **values) ⇒ Object
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 |