Class: CocinaDisplay::Languages::Language

Inherits:
Object
  • Object
show all
Defined in:
lib/cocina_display/languages/language.rb

Overview

A language associated with part or all of a Cocina object.

Constant Summary collapse

SEARCHWORKS_LANGUAGES_FILE_PATH =
CocinaDisplay.root / "config" / "searchworks_languages.yml"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cocina) ⇒ Language

Create a Language object from Cocina structured data.

Parameters:

  • cocina (Hash)


19
20
21
# File 'lib/cocina_display/languages/language.rb', line 19

def initialize(cocina)
  @cocina = cocina
end

Instance Attribute Details

#cocinaObject (readonly)

Returns the value of attribute cocina.



9
10
11
# File 'lib/cocina_display/languages/language.rb', line 9

def cocina
  @cocina
end

Class Method Details

.searchworks_languagesHash{String => String}

A hash of language codes to language names recognized by Searchworks.

Returns:

  • (Hash{String => String})


13
14
15
# File 'lib/cocina_display/languages/language.rb', line 13

def self.searchworks_languages
  @searchworks_languages ||= YAML.safe_load_file(SEARCHWORKS_LANGUAGES_FILE_PATH)
end

Instance Method Details

#codeString?

The language code, e.g. an ISO 639 code like “eng” or “spa”.

Returns:

  • (String, nil)


31
32
33
# File 'lib/cocina_display/languages/language.rb', line 31

def code
  cocina["code"]
end

#decoded_valueString?

Decoded name of the language based on the code, if present.

Returns:

  • (String, nil)


59
60
61
# File 'lib/cocina_display/languages/language.rb', line 59

def decoded_value
  Language.searchworks_languages[code] if searchworks_language?
end

#english?Boolean

True if the language is English.

Returns:

  • (Boolean)


53
54
55
# File 'lib/cocina_display/languages/language.rb', line 53

def english?
  to_s == "English"
end

#ietf_tagString?

The IETF tag describing this language and script, if available.

Examples:

“ara-Latn” for Arabic written in Latin script

Returns:

  • (String, nil)

See Also:



39
40
41
42
43
# File 'lib/cocina_display/languages/language.rb', line 39

def ietf_tag
  return code unless transliterated?

  "#{code}-#{script.code}"
end

#labelString

Display label for this field.

Returns:

  • (String)


65
66
67
# File 'lib/cocina_display/languages/language.rb', line 65

def label
  cocina["displayLabel"].presence || I18n.t("cocina_display.field_label.language")
end

#scriptCocinaDisplay::Languages::Script?

The script of the language, if specified.



78
79
80
# File 'lib/cocina_display/languages/language.rb', line 78

def script
  CocinaDisplay::Languages::Script.new(script_cocina) if script_cocina.present?
end

#searchworks_language?Boolean

True if the language is recognized by Searchworks.

Returns:

  • (Boolean)

See Also:

  • CocinaDisplay::Language.searchworks_languages


72
73
74
# File 'lib/cocina_display/languages/language.rb', line 72

def searchworks_language?
  Language.searchworks_languages.value?(cocina["value"]) || Language.searchworks_languages.key?(code)
end

#to_sString?

The language name for display.

Returns:

  • (String, nil)


25
26
27
# File 'lib/cocina_display/languages/language.rb', line 25

def to_s
  cocina["value"] || decoded_value
end

#transliterated?Boolean

True if the value is transliterated, i.e. non-English written in Latin script.

Returns:

  • (Boolean)


47
48
49
# File 'lib/cocina_display/languages/language.rb', line 47

def transliterated?
  !english? && script&.latin?
end