diff --git a/Library/Homebrew/cask/lib/hbc/dsl.rb b/Library/Homebrew/cask/lib/hbc/dsl.rb
index 9970f839547663ca37ed085b9aa173f3d09564ec..08afe75fc519f58019510b5850b6875b0c69b73a 100644
--- a/Library/Homebrew/cask/lib/hbc/dsl.rb
+++ b/Library/Homebrew/cask/lib/hbc/dsl.rb
@@ -1,4 +1,5 @@
 require "set"
+require "locale"
 
 require "hbc/dsl/appcast"
 require "hbc/dsl/base"
@@ -99,9 +100,10 @@ module Hbc
       @homepage ||= homepage
     end
 
-    def language(*args, &block)
+    def language(*args, default: false, &block)
       if !args.empty? && block_given?
         @language_blocks ||= {}
+        @language_blocks.default = block if default
         @language_blocks[args] = block
       else
         language_eval
@@ -114,29 +116,15 @@ module Hbc
 
       return unless instance_variable_defined?(:@language_blocks)
 
-      default_key = @language_blocks.keys.detect { |key| key.include?(:default) }
+      MacOS.languages.map(&Locale.method(:parse)).any? { |locale|
+        key = @language_blocks.keys.detect { |strings|
+          strings.any? { |string| locale.include?(string) }
+        }
 
-      MacOS.languages.each do |language|
-        @language_blocks.each do |regexes_or_strings, block|
-          if regexes_or_strings.include?(:default)
-            regexes_or_strings = regexes_or_strings - [:default] + [%r{^en}]
-          end
+        return @language = @language_blocks[key].call unless key.nil?
+      }
 
-          regexes_or_strings.each do |regex_or_string|
-            if regex_or_string.class == language.class
-              next unless regex_or_string == language
-            else
-              next unless regex_or_string =~ language
-            end
-
-            @language = block.call
-            return
-          end
-        end
-      end
-
-      # fallback to :default
-      @language = default_key.nil? ? nil : @language_blocks[default_key].call
+      @language = @language_blocks.default.call
     end
 
     def url(*args, &block)
diff --git a/Library/Homebrew/cask/test/cask/dsl_test.rb b/Library/Homebrew/cask/test/cask/dsl_test.rb
index f6fca3d2d1b9e2d123a45c2ee5d1b7f7a0ece74b..053eae1e1dd11d793a01a7335de7d3afadd686f9 100644
--- a/Library/Homebrew/cask/test/cask/dsl_test.rb
+++ b/Library/Homebrew/cask/test/cask/dsl_test.rb
@@ -124,36 +124,51 @@ describe Hbc::DSL do
 
   describe "language stanza" do
     it "allows multilingual casks" do
-      cask = lambda {
+      cask = lambda do
         Hbc::Cask.new("cask-with-apps") do
-          language "FIRST_LANGUAGE" do
-            :first
+          language "zh" do
+            sha256 "abc123"
+            "zh-CN"
           end
 
-          language %r{SECOND_LANGUAGE} do
-            :second
+          language "en-US", default: true do
+            sha256 "xyz789"
+            "en-US"
           end
 
-          language :default do
-            :default
-          end
+          url "https://example.org/#{language}.zip"
         end
-      }
-
-      MacOS.stubs(languages: ["FIRST_LANGUAGE"])
-      cask.call.language.must_equal :first
-
-      MacOS.stubs(languages: ["SECOND_LANGUAGE"])
-      cask.call.language.must_equal :second
-
-      MacOS.stubs(languages: ["THIRD_LANGUAGE"])
-      cask.call.language.must_equal :default
-
-      MacOS.stubs(languages: ["THIRD_LANGUAGE", "SECOND_LANGUAGE", "FIRST_LANGUAGE"])
-      cask.call.language.must_equal :second
+      end
 
-      MacOS.stubs(languages: ["THIRD_LANGUAGE", "FIRST_LANGUAGE", "SECOND_LANGUAGE"])
-      cask.call.language.must_equal :first
+      MacOS.stubs(languages: ["zh"])
+      cask.call.language.must_equal "zh-CN"
+      cask.call.sha256.must_equal "abc123"
+      cask.call.url.to_s.must_equal "https://example.org/zh-CN.zip"
+
+      MacOS.stubs(languages: ["zh-XX"])
+      cask.call.language.must_equal "zh-CN"
+      cask.call.sha256.must_equal "abc123"
+      cask.call.url.to_s.must_equal "https://example.org/zh-CN.zip"
+
+      MacOS.stubs(languages: ["en"])
+      cask.call.language.must_equal "en-US"
+      cask.call.sha256.must_equal "xyz789"
+      cask.call.url.to_s.must_equal "https://example.org/en-US.zip"
+
+      MacOS.stubs(languages: ["xx-XX"])
+      cask.call.language.must_equal "en-US"
+      cask.call.sha256.must_equal "xyz789"
+      cask.call.url.to_s.must_equal "https://example.org/en-US.zip"
+
+      MacOS.stubs(languages: ["xx-XX", "zh", "en"])
+      cask.call.language.must_equal "zh-CN"
+      cask.call.sha256.must_equal "abc123"
+      cask.call.url.to_s.must_equal "https://example.org/zh-CN.zip"
+
+      MacOS.stubs(languages: ["xx-XX", "en-US", "zh"])
+      cask.call.language.must_equal "en-US"
+      cask.call.sha256.must_equal "xyz789"
+      cask.call.url.to_s.must_equal "https://example.org/en-US.zip"
     end
   end