diff --git a/Library/Homebrew/cask/lib/hbc/dsl.rb b/Library/Homebrew/cask/lib/hbc/dsl.rb
index 624d62a7607e5f834e52af72706771df35cd9ee5..bae395726f3ca7859a329cb7a3f8a2d6378cc93b 100644
--- a/Library/Homebrew/cask/lib/hbc/dsl.rb
+++ b/Library/Homebrew/cask/lib/hbc/dsl.rb
@@ -101,27 +101,37 @@ module Hbc
 
     def language(*args, &block)
       if !args.empty? && block_given?
-        args.each do |arg|
-          MacOS.languages.each_with_index do |l, index|
-            next unless arg == :default || l.match(arg)
-            next unless @language.nil? || @language[:level].nil? || @language[:level] > index
-            @language = {
-                          block: block,
-                          level: index,
-                        }
-          end
-        end
+        @language_blocks ||= {}
+        @language_blocks[args] = block
       else
         language_eval
         @language
       end
     end
 
-
     def language_eval
-      if @language.is_a?(Hash) && @language.key?(:block)
-        @language = @language[:block].call
+      return if instance_variable_defined?(:@language)
+
+      return unless instance_variable_defined?(:@language_blocks)
+
+      default_key = @language_blocks.keys.detect { |key| key.include?(:default) }
+
+      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
+
+          case language
+          when *regexes_or_strings
+            @language = block.call
+            return
+          end
+        end
       end
+
+      # fallback to :default
+      @language = default_key.nil? ? nil : @language_blocks[default_key].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 1e13d49f323a14f5226c52dd75c28493dda91903..f6fca3d2d1b9e2d123a45c2ee5d1b7f7a0ece74b 100644
--- a/Library/Homebrew/cask/test/cask/dsl_test.rb
+++ b/Library/Homebrew/cask/test/cask/dsl_test.rb
@@ -148,6 +148,12 @@ describe Hbc::DSL do
 
       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
+
+      MacOS.stubs(languages: ["THIRD_LANGUAGE", "FIRST_LANGUAGE", "SECOND_LANGUAGE"])
+      cask.call.language.must_equal :first
     end
   end