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 =

Signature:

  • String

Returns:

  • (String)
File.expand_path("messages", __dir__ || raise("message catalog directory is unavailable"))
LANGUAGES =

Signature:

  • Array[String]

Returns:

  • (Array[String])
%w[en ja].freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.catalog(language) ⇒ Object

RBS:

  • (String language) -> Hash[String, String]



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

RBS:

  • (String id) -> bool

Returns:

  • (Boolean)


33
34
35
# File 'lib/ibex/messages.rb', line 33

def known?(id)
  catalog("en").key?(id)
end

.language(requested) ⇒ Object

RBS:

  • (String? requested) -> String



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

RBS:

  • (String id, ?language: String, **Object? values) -> String



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.message}"
end

Instance Method Details

#self?.catalogHash[String, String]

RBS:

  • (String language) -> Hash[String, String]

Parameters:

  • language (String)

Returns:

  • (Hash[String, String])


21
# File 'sig/ibex/messages.rbs', line 21

def self?.catalog: (String language) -> Hash[String, String]

#self?.known?Boolean

RBS:

  • (String id) -> bool

Parameters:

  • id (String)

Returns:

  • (Boolean)


18
# File 'sig/ibex/messages.rbs', line 18

def self?.known?: (String id) -> bool

#self?.languageString

RBS:

  • (String? requested) -> String

Parameters:

  • requested (String, nil)

Returns:

  • (String)


12
# File 'sig/ibex/messages.rbs', line 12

def self?.language: (String? requested) -> String

#self?.load_catalogHash[String, String]

RBS:

  • (String language) -> Hash[String, String]

Parameters:

  • language (String)

Returns:

  • (Hash[String, String])


24
# File 'sig/ibex/messages.rbs', line 24

def self?.load_catalog: (String language) -> Hash[String, String]

#self?.translateString

RBS:

  • (String id, ?language: String, **Object? values) -> String

Parameters:

  • id (String)
  • language: (String)
  • values (Object, nil)

Returns:

  • (String)


15
# File 'sig/ibex/messages.rbs', line 15

def self?.translate: (String id, ?language: String, **Object? values) -> String