module Locale

Locale module manages the locale informations of the application. These functions are the most important APIs in this library. Almost of all i18n/l10n programs use this APIs only.

Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>

License: Ruby's or LGPL

This library is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <www.gnu.org/licenses/>.

begin

win32_table.rb - Locale table for win32

Copyright (C) 2008 Masao Mutoh <mutomasa at gmail.com>

You may redistribute it and/or modify it under the same
license terms as Ruby.

Original: Ruby-GetText-Package-1.92.0.

$Id: win32_table.rb 27 2008-12-03 15:06:50Z mutoh $

end

begin

locale/tag/posix.rb - Locale::Tag::Posix

Copyright (C) 2008  Masao Mutoh

You may redistribute it and/or modify it under the same
license terms as Ruby.

$Id: posix.rb 27 2008-12-03 15:06:50Z mutoh $

end

Refer from activesupport-2.2.0.

begin

version - version information of Ruby-Locale

Copyright (C) 2008 Masao Mutoh

You may redistribute it and/or modify it under the same
license terms as Ruby.

end

Constants

VERSION

Public Instance Methods

app_language_tags() click to toggle source

Returns the app_language_tags. Default is nil. See #set_app_language_tags for more details.

# File lib/locale.rb, line 331
def app_language_tags
  @@app_language_tags
end
candidates(options = {}) click to toggle source

Returns the language tags which are variations of the current locales order by priority.

For example, if the current locales are [“fr”, “ja_JP”, “en_US”, “en-Latn-GB-VARIANT”], then returns [“fr”, “ja_JP”, “en_US”, “en-Latn-GB-VARIANT”, “en_Latn_GB”, “en_GB”, “ja”, “en”]. “en” is the default locale(You can change it using #set_default). The default locale is added at the end of the list even if it isn't exist.

Usually, this method is used to find the locale data as the path(or a kind of IDs).

  • options: options as a Hash or nil.

    • :supported_language_tags - An Array of the language tags order by the priority. This option restricts the locales which are supported by the library/application. Default is nil if you don't need to restrict the locales.

      (e.g.1) ["fr_FR", "en_GB", "en_US", ...]
    • :type - The type of language tag. :common, :rfc, :cldr, :posix and :simple are available. Default value is :common

# File lib/locale.rb, line 215
def candidates(options = {})
  opts = {:supported_language_tags => nil, :current => current,
    :type => :common}.merge(options)

  if Thread.current[:candidates_caches]
    cache = Thread.current[:candidates_caches][opts.hash]
    return cache if cache
  else
    Thread.current[:candidates_caches] = {} 
  end
  Thread.current[:candidates_caches][opts.hash] =
    collect_candidates(opts[:type], opts[:current],
                       opts[:supported_language_tags])
end
cgi=(cgi) click to toggle source

Sets a CGI object.This is the convenient function of #set_request().

This method is appeared when #init(:driver => :cgi) is called.

  • cgi: CGI object

  • Returns: cgi

# File lib/locale/driver/cgi.rb, line 145
def cgi=(cgi)
  set_cgi(cgi)
  cgi
end
charset() click to toggle source

Gets the current charset.

This returns the current user/system charset. This value is read only, so you can't set it by yourself.

  • Returns: the current charset.

# File lib/locale.rb, line 276
def charset
  driver_module.charset || "UTF-8"
end
clear() click to toggle source

Clear current locale.

  • Returns: self

# File lib/locale.rb, line 283
def clear
  Thread.current[:current_languages] = nil
  Thread.current[:candidates_caches] = nil
  self
end
clear_all() click to toggle source

Clear all locales and charsets of all threads. This doesn't clear the default and app_language_tags. Use #default = nil to unset the default locale.

  • Returns: self

# File lib/locale.rb, line 293
def clear_all
  Thread.list.each do |thread|
    thread[:current_languages] = nil
    thread[:candidates_caches] = nil
  end
  memoize_clear
  self
end
current() click to toggle source

Gets the current locales (Locale::Tag's class). If the current locale is not set, this returns system/default locale.

This method returns the current language tags even if it isn't included in app_language_tags.

Usually, the programs should use #candidates to find the correct locale, not this method.

  • Returns: an Array of the current locales (Locale::Tag's class).

# File lib/locale.rb, line 180
def current
  unless Thread.current[:current_languages]
    loc = driver_module.locales
    Thread.current[:current_languages] = loc ? loc : Locale::TagList.new([default])
  end
  Thread.current[:current_languages]
end
current=(tag) click to toggle source

Sets a current locale. This is a single argument version of #set_current.

  • tag: the language tag such as “ja-JP”

  • Returns: an Array of the current locale (Locale::Tag's class).

    Locale.current = "ja-JP"
    Locale.current = "ja_JP.eucJP"
    
# File lib/locale.rb, line 167
def current=(tag)
  set_current(tag)
  Thread.current[:current_languages]
end
default() click to toggle source

Gets the default locale(language tag).

If the default language tag is not set, this returns nil.

  • Returns: the default locale (Locale::Tag's class).

# File lib/locale.rb, line 124
def default
  @@default_tag || DEFAULT_LANGUAGE_TAG
end
default=(tag) click to toggle source

Same as #set_default.

  • locale: the default locale (Locale::Tag's class) or a String such as “ja-JP”.

  • Returns: locale.

# File lib/locale.rb, line 114
def default=(tag)
  set_default(tag)
  @@default_tag
end
driver_module() click to toggle source

Gets the driver module.

Usually you don't need to call this method.

  • Returns: the driver module.

# File lib/locale.rb, line 89
def driver_module 
  Locale.init if @@driver_name.nil?
  Driver::MODULES[@@driver_name]
end
init(opts = {}) click to toggle source

Initialize Locale library. Usually, you don't need to call this directly, because this is called when Locale's methods are called.

If you use this library with CGI or the kind of CGI. You need to call #init(:driver => :cgi).

For Framework designers/programers:

If your framework is for WWW, call this once like: #init(:driver => :cgi).

To Application programers:

If your framework doesn't use ruby-locale and the application is for WWW, call this once like: #init(:driver => :cgi).

To Library authors:

Don't call this, even if your application is only for WWW.

  • opts: Options as a Hash.

    • :driver - The driver. :cgi if you use Locale module with CGI, nil if you use system locale.

      (ex) Locale.init(:driver => :cgi)
# File lib/locale.rb, line 70
def init(opts = {})
  if opts[:driver]
    require_driver opts[:driver]
  else
    if /cygwin|mingw|win32/ =~ RUBY_PLATFORM
      require_driver 'win32' 
    elsif /java/ =~ RUBY_PLATFORM
      require_driver 'jruby' 
    else
      require_driver 'posix' 
    end
  end
end
set_app_language_tags(*tags) click to toggle source

Set the language tags which is supported by the Application. This value is same with supported_language_tags in #candidates to restrict the result but is the global setting. If you set a language tag, the application works as the single locale application.

If the current locale is not included in #app_language_tags, #default value is used. Use #set_default to set correct language if “en” is not included in the language tags.

Set nil if clear the value.

Note that the libraries/plugins shouldn't set this value.

(e.g.) Locale.set_app_language_tags("fr_FR", "en-GB", "en_US", ...)
# File lib/locale.rb, line 319
def set_app_language_tags(*tags)
  if tags[0]
    @@app_language_tags = tags.collect{|v| Locale::Tag.parse(v)}
  else
    @@app_language_tags = nil
  end
  
  clear_all
  self
end
set_cgi(cgi) click to toggle source

Sets a CGI object. This is the convenient function of #set_request().

This method is appeared when #init(:driver => :cgi) is called.

  • cgi: CGI object

  • Returns: self

# File lib/locale/driver/cgi.rb, line 133
def set_cgi(cgi)
  set_request(cgi.params["lang"], cgi.cookies["lang"],
              cgi.accept_language, cgi.accept_charset)
  self
end
set_current(*tags) click to toggle source

Sets the locales of the current thread order by the priority. Each thread has a current locales. The system locale/default locale is used if the thread doesn't have current locales.

  • tag: Locale::Language::Tag's class or the language tag as a String. nil if you need to clear current locales.

  • charset: the charset (override the charset even if the locale name has charset) or nil.

  • Returns: self

(e.g.)

Locale.set_current("ja_JP.eucJP")
Locale.set_current("ja-JP")
Locale.set_current("en_AU", "en_US", ...)
Locale.set_current(Locale::Tag::Simple.new("ja", "JP"), ...)
# File lib/locale.rb, line 142
def set_current(*tags)
  languages = nil
  if tags[0]
    languages = Locale::TagList.new
    tags.each do |tag|
      case tag
      when Locale::TagList
        languages.concat(tag)
      else
        languages << create_language_tag(tag)
      end
    end
  end
  Thread.current[:current_languages] = languages
  Thread.current[:candidates_caches] = nil
  self
end
set_default(tag) click to toggle source

Sets the default locale as the language tag (Locale::Tag's class or String(such as “ja_JP”)).

  • tag: the default language_tag

  • Returns: self.

# File lib/locale.rb, line 101
def set_default(tag)
  Thread.list.each do |thread|
    thread[:current_languages] = nil
    thread[:candidates_caches] = nil
  end
  @@default_tag = create_language_tag(tag)
  self
end
set_request(query_langs, cookie_langs, accept_language, accept_charset) click to toggle source

Sets a request values for lang/charset.

  • query_langs: An Array of QUERY_STRING value “lang”.

  • cookie_langs: An Array of cookie value “lang”.

  • accept_language: The value of HTTP_ACCEPT_LANGUAGE

  • accept_charset: The value of HTTP_ACCEPT_CHARSET

# File lib/locale/driver/cgi.rb, line 122
def set_request(query_langs, cookie_langs, accept_language, accept_charset)
  driver_module.set_request(query_langs, cookie_langs, accept_language, accept_charset)
  self
end