lib/locale/driver/env.rb in locale-2.0.8 vs lib/locale/driver/env.rb in locale-2.0.9
- old
+ new
@@ -22,33 +22,41 @@
require 'locale/tag'
require 'locale/taglist'
require "locale/driver"
-module Locale
+module Locale
module Driver
# Locale::Driver::Env module.
# Detect the user locales and the charset.
- # All drivers(except CGI) refer environment variables first and use it
+ # All drivers(except CGI) refer environment variables first and use it
# as the locale if it's defined.
# This is a low-level module. Application shouldn't use this directly.
module Env
module_function
- # Gets the locale from environment variable. (LC_ALL > LC_CTYPES > LANG)
+ # Gets the locale from environment variable.
+ # Priority order except charset is LC_ALL > LC_MESSAGES > LANG.
+ # Priority order for charset is LC_ALL > LC_CTYPE > LANG.
# Returns: the locale as Locale::Tag::Posix.
def locale
- # At least one environment valiables should be set on *nix system.
- [ENV["LC_ALL"], ENV["LC_CTYPES"], ENV["LANG"]].each do |loc|
- if loc != nil and loc.size > 0
- return Locale::Tag::Posix.parse(loc)
- end
- end
- nil
+ lc_all = Private.parse(ENV["LC_ALL"])
+ return lc_all if lc_all
+
+ lc_messages = Private.parse(ENV["LC_MESSAGES"])
+ lang = Private.parse(ENV["LANG"])
+
+ tag = lc_messages || lang
+ return nil if tag.nil?
+
+ lc_ctype = Private.parse(ENV["LC_CTYPE"])
+ tag.charset = lc_ctype.charset if lc_ctype
+
+ tag
end
- # Gets the locales from environment variables. (LANGUAGE > LC_ALL > LC_CTYPES > LANG)
+ # Gets the locales from environment variables. (LANGUAGE > LC_ALL > LC_MESSAGES > LANG)
# * Returns: an Array of the locale as Locale::Tag::Posix or nil.
def locales
locales = ENV["LANGUAGE"]
if (locales != nil and locales.size > 0)
locs = locales.split(/:/).collect{|v| Locale::Tag::Posix.parse(v)}.compact
@@ -59,19 +67,29 @@
return Locale::TagList.new([loc])
end
nil
end
- # Gets the charset from environment variable or return nil.
+ # Gets the charset from environment variables
+ # (LC_ALL > LC_CTYPE > LANG) or return nil.
# * Returns: the system charset.
def charset # :nodoc:
- if loc = locale
- loc.charset
- else
- nil
+ [ENV["LC_ALL"], ENV["LC_CTYPE"], ENV["LANG"]].each do |env|
+ tag = Private.parse(env)
+ next if tag.nil?
+ return tag.charset
end
+ nil
end
-
+
+ module Private
+ module_function
+ def parse(env_value)
+ return nil if env_value.nil?
+ return nil if env_value.empty?
+ Locale::Tag::Posix.parse(env_value)
+ end
+ end
end
MODULES[:env] = Env
end
end