diff --git a/Library/Homebrew/os/linux.rb b/Library/Homebrew/os/linux.rb index 4345e9a1f12e53..a4f3f6408998ab 100644 --- a/Library/Homebrew/os/linux.rb +++ b/Library/Homebrew/os/linux.rb @@ -63,10 +63,23 @@ def self.wsl_version def self.languages return @languages if @languages.present? - os_langs = Utils.popen_read("localectl", "list-locales") - os_langs = os_langs.scan(/[^ \n"(),]+/).map { |item| item.split(".").first.tr("_", "-") } + locale_variables = ENV.keys.grep(/^(?:LC_\S+|LANG|LANGUAGE)\Z/).sort + ctl_ret = Utils.popen_read("localectl", "list-locales") + if ctl_ret.present? + list = ctl_ret.scan(/[^ \n"(),]+/) + elsif locale_variables.present? + keys = locale_variables.select { |var| ENV.fetch(var) } + list = locale_variables.map { |key| ENV.fetch(key) } + else + list = ["en_US.utf8"] + end - @languages = os_langs + @languages = list.map { |item| item.split(".").first.tr("_", "-") } + end + + sig { returns(String) } + def self.language + languages.first end end end diff --git a/Library/Homebrew/test/os/linux_spec.rb b/Library/Homebrew/test/os/linux_spec.rb new file mode 100644 index 00000000000000..aceecd46de1f05 --- /dev/null +++ b/Library/Homebrew/test/os/linux_spec.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require "locale" +require "os/linux" + +RSpec.describe OS::Linux do + describe "::languages" do + it "returns a list of all languages" do + expect(described_class.languages).not_to be_empty + end + end + + describe "::language" do + it "returns the first item from #languages" do + expect(described_class.language).to eq(described_class.languages.first) + end + end + + describe "::'os_version'" do + it "returns the OS version" do + expect(described_class.os_version).not_to be_empty + end + end + + describe "::'wsl?'" do + it "returns the WSL state" do + expect(described_class.wsl?).to eq(false) + end + end + + describe "::'wsl_version'" do + it "returns the WSL version" do + expect(described_class.wsl_version).to match(Version::NULL) + end + end +end