Class: FeduxOrgStdlib::ShellLanguageDetector

Inherits:
Object
  • Object
show all
Defined in:
lib/fedux_org_stdlib/shell_language_detector.rb,
lib/fedux_org_stdlib/shell_language_detector/language.rb

Overview

Detect language of shell

Examples:

Simple Usage


detector = ShellLanguageDetector.new
lang = detector.detect
puts lang.language_code
puts lang.country_code
puts lang.encoding

Overwrite detected lang


detector = ShellLanguageDetector.new
lang = detector.detect(overwrite: [:de, :de, :utf_8]

Allowed languages


detector = ShellLanguageDetector.new
lang = detector.detect(allowed: [:de, :en])

Defined Under Namespace

Classes: Language

Instance Method Summary collapse

Constructor Details

#initialize(default_language_code: :en, default_country_code: :gb, default_encoding: :utf_8, environment: ProcessEnvironment.new) ⇒ ShellLanguageDetector

Returns a new instance of ShellLanguageDetector.



32
33
34
35
36
37
# File 'lib/fedux_org_stdlib/shell_language_detector.rb', line 32

def initialize(default_language_code: :en, default_country_code: :gb, default_encoding: :utf_8, environment: ProcessEnvironment.new)
  @default_language_code = default_language_code.to_sym
  @default_country_code  = default_country_code.to_sym
  @default_encoding      = default_encoding.to_sym
  @environment           = environment
end

Instance Method Details

#detect(allowed: [], overwrite: []) ⇒ Language

Returns The detected language or the default language if no allowed language was detected.

Parameters:

  • allowed (Array, Symbol, String) (defaults to: [])

    The languages which are allowed

Returns:

  • (Language)

    The detected language or the default language if no allowed language was detected



44
45
46
47
48
49
50
51
52
53
54
# File 'lib/fedux_org_stdlib/shell_language_detector.rb', line 44

def detect(allowed: [], overwrite: [])
  allowed   = Array(allowed).map(&:to_sym)
  overwrite = Array(overwrite).map(&:to_sym)

  lang = environment.fetch 'LANG'
  language_code, country_code, encoding = lang.scan(/([^_-]+)[_-]([^.]+)\.([A-Za-z0-9_-]*)/i).flatten.map(&:downcase).map { |e| e.gsub('-', '_') }.map { |e| e.to_sym unless e.nil? }
  language_code, country_code, encoding = *overwrite if !overwrite.blank? && overwrite.none?(&:blank?)

  return Language.new(language_code: language_code, country_code: country_code, encoding: encoding) if language_code && (allowed.blank? || allowed.include?(language_code))
  Language.new(language_code: default_language_code, country_code: default_country_code, encoding: default_encoding)
end