module GettextSetup
Public Class Methods
add_repository_to_chain(project_name, options)
click to toggle source
# File lib/gettext-setup/gettext_setup.rb, line 56 def self.add_repository_to_chain(project_name, options) repository = FastGettext::TranslationRepository.build(project_name, path: locales_path, type: options[:file_format] || :po, ignore_fuzzy: false) @translation_repositories[project_name] = repository unless @translation_repositories.key? project_name end
candidate_locales()
click to toggle source
Returns the locale for the current machine. This is most useful for shell applications that need an ACCEPT-LANGUAGE header set.
# File lib/gettext-setup/gettext_setup.rb, line 88 def self.candidate_locales Locale.candidates(type: :cldr).join(',') end
clear()
click to toggle source
# File lib/gettext-setup/gettext_setup.rb, line 92 def self.clear Locale.clear end
config()
click to toggle source
# File lib/gettext-setup/gettext_setup.rb, line 68 def self.config @config ||= {} end
config?()
click to toggle source
# File lib/gettext-setup/gettext_setup.rb, line 51 def self.config? raise NoConfigFoundError, File.join(locales_path, 'config.yaml') unless @config @config end
default_locale()
click to toggle source
# File lib/gettext-setup/gettext_setup.rb, line 76 def self.default_locale config['default_locale'] || 'en' end
default_locale=(new_locale)
click to toggle source
# File lib/gettext-setup/gettext_setup.rb, line 80 def self.default_locale=(new_locale) FastGettext.default_locale = new_locale Locale.set_default(new_locale) config['default_locale'] = new_locale end
initialize(locales_path = 'locales', options = {})
click to toggle source
`locales_path` should include:
-
config.yaml
-
a .pot file for the project
-
i18n directories for languages, each with a .po file
-
if using .mo files, an LC_MESSAGES dir in each language dir, with the .mo file in it
valid `options` fields: :file_format - one of the supported backends for fast_gettext (e.g. :po, :mo, :yaml, etc.)
# File lib/gettext-setup/gettext_setup.rb, line 24 def self.initialize(locales_path = 'locales', options = {}) config_path = File.absolute_path('config.yaml', locales_path) File.exist?(config_path) || raise(NoConfigFoundError, config_path) @config = YAML.load_file(config_path)['gettext'] @locales_path = locales_path # Make the translation methods available everywhere Object.send(:include, FastGettext::Translation) # Define our text domain, and set the path into our root. I would prefer to # have something smarter, but we really want this up earlier even than our # config loading happens so that errors there can be translated. add_repository_to_chain(config['project_name'], options) # 'chain' is the only available multi-domain type in fast_gettext 1.1.0 We should consider # investigating 'merge' once we can bump our dependency FastGettext.add_text_domain('master_domain', type: :chain, chain: @translation_repositories.values) FastGettext.default_text_domain = 'master_domain' # Likewise, be explicit in our default language choice. FastGettext.default_locale = default_locale FastGettext.default_available_locales = FastGettext.default_available_locales | locales Locale.set_default(default_locale) end
locales()
click to toggle source
# File lib/gettext-setup/gettext_setup.rb, line 96 def self.locales explicit = Dir.glob(File.absolute_path('*/*.po', locales_path)).map do |x| File.basename(File.dirname(x)) end (explicit + [default_locale]).uniq end
locales_path()
click to toggle source
# File lib/gettext-setup/gettext_setup.rb, line 64 def self.locales_path @locales_path ||= File.join(Dir.pwd, 'locales') end
negotiate_locale(accept_header)
click to toggle source
Given an HTTP Accept-Language header return the locale with the highest priority from it for which we have a locale available. If none exists, return the default locale
# File lib/gettext-setup/gettext_setup.rb, line 106 def self.negotiate_locale(accept_header) unless @config raise ArgumentError, 'No config.yaml found! Use `GettextSetup.initialize(locales_path)` to locate your config.yaml' end return FastGettext.default_locale if accept_header.nil? available_locales = accept_header.split(',').map do |locale| pair = locale.strip.split(';q=') pair << '1.0' unless pair.size == 2 pair[0] = FastGettext.default_locale if pair[0] == '*' pair end.sort_by do |(_, qvalue)| -1 * qvalue.to_f end.select do |(locale, _)| FastGettext.available_locales.include?(locale) end if available_locales && available_locales.first available_locales.first.first else # We can't satisfy the request preference. Just use the default locale. default_locale end end
negotiate_locale!(accept_header)
click to toggle source
Negotiates and sets the locale based on an accept language header.
# File lib/gettext-setup/gettext_setup.rb, line 130 def self.negotiate_locale!(accept_header) FastGettext.locale = negotiate_locale(accept_header) end
translation_repositories()
click to toggle source
# File lib/gettext-setup/gettext_setup.rb, line 72 def self.translation_repositories @translation_repositories end