lib/refinery/i18n.rb in refinerycms-i18n-1.0.0 vs lib/refinery/i18n.rb in refinerycms-i18n-2.0.0

- old
+ new

@@ -1,215 +1,61 @@ # Encoding: UTF-8 <-- required, please leave this in. -if defined?(Refinery) && Refinery.version > '0.9.9' - require 'refinerycms-core' -else - require 'refinery' -end +require 'refinerycms-core' require 'routing-filter' module Refinery - module I18n - class Engine < Rails::Engine - config.before_initialize do - require File.expand_path('../i18n-filter', __FILE__) - require File.expand_path('../i18n-js', __FILE__) - require File.expand_path('../translate', __FILE__) - end + autoload :I18nGenerator, 'generators/refinery/i18n_generator' - initializer "serve static assets" do |app| - app.middleware.insert_after ::ActionDispatch::Static, ::ActionDispatch::Static, "#{root}/public" - end - - config.to_prepare do - ::ApplicationController.module_eval do - before_filter lambda {|c| - ::SimplesIdeias::I18n.export! if Rails.env.development? - } - - def default_url_options(options={}) - ::Refinery::I18n.enabled? ? { :locale => ::I18n.locale } : {} - end - - def find_or_set_locale - if ::Refinery::I18n.enabled? - ::I18n.locale = ::Refinery::I18n.current_frontend_locale - - if ::Refinery::I18n.has_locale?(locale = params[:locale].try(:to_sym)) - ::I18n.locale = locale - elsif locale.present? and locale != ::Refinery::I18n.default_frontend_locale - params[:locale] = ::I18n.locale = ::Refinery::I18n.default_frontend_locale - redirect_to(params, :notice => "The locale '#{locale}' is not supported.") and return - else - ::I18n.locale = ::Refinery::I18n.default_frontend_locale - end - Thread.current[:globalize_locale] = ::I18n.locale - end - end - - prepend_before_filter :find_or_set_locale - protected :default_url_options, :find_or_set_locale - end - - ::Admin::BaseController.class_eval do - def find_or_set_locale - if (params[:set_locale] and ::Refinery::I18n.locales.keys.map(&:to_sym).include?(params[:set_locale].to_sym)) - ::Refinery::I18n.current_locale = params[:set_locale].to_sym - redirect_back_or_default(admin_root_path) and return - else - ::I18n.locale = ::Refinery::I18n.current_locale - end - end - - def globalize! - if ::Refinery::I18n.frontend_locales.any? - if params[:switch_locale] - Thread.current[:globalize_locale] = params[:switch_locale].to_sym - elsif ::I18n.locale != ::Refinery::I18n.default_frontend_locale - Thread.current[:globalize_locale] = ::Refinery::I18n.default_frontend_locale - end - end - - Thread.current[:globalize_locale] = ::I18n.locale if Thread.current[:globalize_locale].nil? - end - # globalize! should be prepended first so that it runs after find_or_set_locale - prepend_before_filter :globalize!, :find_or_set_locale - protected :globalize!, :find_or_set_locale - end - end - - config.after_initialize do - ::Refinery::I18n.setup! - - Refinery::Plugin.register do |plugin| - plugin.name = "refinery_i18n" - plugin.version = %q{0.9.9.11} - plugin.hide_from_menu = true - plugin.always_allow_access = true - end - end - - end - + module I18n class << self + attr_accessor :built_in_locales - attr_accessor :built_in_locales, :current_locale, :current_frontend_locale, - :default_locale, :default_frontend_locale, :enabled, :locales - - def enabled? - RefinerySetting.find_or_set(:i18n_translation_enabled, true, { - :scoping => 'refinery' - }) - end - - def current_locale - unless enabled? - ::Refinery::I18n.current_locale = ::Refinery::I18n.default_locale - else - RefinerySetting.find_or_set(:i18n_translation_current_locale, ::Refinery::I18n.default_locale, { - :scoping => 'refinery' - }).to_sym - end - end - - def current_locale=(locale) - value = { - :value => locale.to_sym, - :scoping => 'refinery' + def built_in_locales + @built_in_locales ||= { + :en => 'English', + :fr => 'Français', + :nl => 'Nederlands', + :'pt-BR' => 'Português', + :da => 'Dansk', + :nb => 'Norsk Bokmål', + :sl => 'Slovenian', + :es => 'Español', + :it => 'Italiano', + :de => 'Deutsch', + :lv => 'Latviski', + :ru => 'Русский', + :sv => 'Svenska', + :pl => 'Polski', + :'zh-CN' => 'Simplified Chinese', + :'zh-TW' => 'Traditional Chinese', + :el => 'Ελληνικά', + :rs => 'Srpski', + :cs => 'Česky', + :sk => 'Slovenský', + :ja => '日本語', + :bg => 'Български' } - # handles a change in Refinery API - if RefinerySetting.methods.map(&:to_sym).include?(:set) - RefinerySetting.set(:i18n_translation_current_locale, value) - else - RefinerySetting[:i18n_translation_current_locale] = value - end - - ::I18n.locale = locale.to_sym end - def default_locale - RefinerySetting.find_or_set(:i18n_translation_default_locale, :en, { - :scoping => 'refinery' - }).to_sym - end - def current_frontend_locale - if Globalize.locale.present? && Globalize.locale.to_s != ::Refinery::I18n.default_frontend_locale.to_s + if Globalize.locale.present? && Globalize.locale.to_s != config.default_frontend_locale.to_s Globalize.locale - elsif ::Refinery::I18n.default_frontend_locale.present? - ::Refinery::I18n.default_frontend_locale + elsif config.default_frontend_locale.present? + config.default_frontend_locale else ::I18n.locale end end - def default_frontend_locale - RefinerySetting.find_or_set(:i18n_translation_default_frontend_locale, :en, { - :scoping => 'refinery' - }).to_sym + def enabled? + config.enabled end - def frontend_locales - RefinerySetting.find_or_set(:i18n_translation_frontend_locales, [self.default_frontend_locale], { - :scoping => 'refinery' - }) - end - - def locales - RefinerySetting.find_or_set(:i18n_translation_locales, self.built_in_locales, { - :scoping => 'refinery' - }) - end - def has_locale?(locale) - locales.has_key?(locale.try(:to_sym)) + config.locales.has_key?(locale.try(:to_sym)) end - - def setup! - self.ensure_locales_up_to_date! - end - - def ensure_locales_up_to_date! - # ensure running latest locales (this is awfully brittle). - locales = if Refinery.version >= '0.9.9' - RefinerySetting.get(:i18n_translation_locales, :scoping => 'refinery') - else - RefinerySetting.find_by_name_and_scoping('i18n_translation_locales', 'refinery').try(:value) - end - - if locales.present? and locales.is_a?(Hash) and locales.keys.exclude?(self.built_in_locales.keys.last) - value = {:value => locales.dup.deep_merge(self.built_in_locales), :scoping => 'refinery'} - if RefinerySetting.respond_to?(:set) - RefinerySetting.set(:i18n_translation_locales, value) - else - RefinerySetting[:i18n_translation_locales] = value - end - end - end - end - @built_in_locales = { - :en => 'English', - :fr => 'Français', - :nl => 'Nederlands', - :'pt-BR' => 'Português', - :da => 'Dansk', - :nb => 'Norsk Bokmål', - :sl => 'Slovenian', - :es => 'Español', - :it => 'Italiano', - :de => 'Deutsch', - :lv => 'Latviski', - :ru => 'Русский', - :sv => 'Svenska', - :pl => 'Polski', - :'zh-CN' => 'Simplified Chinese', - :'zh-TW' => 'Traditional Chinese', - :el => 'Ελληνικά', - :rs => 'Srpski', - :cs => 'Česky', - :sk => 'Slovenský', - :jp => '日本語' - } + require 'refinery/i18n/engine' + require 'refinery/i18n/configuration' end end -