gettext_i18n_rails-1.5.0/0000755000004100000410000000000012666364534015301 5ustar www-datawww-datagettext_i18n_rails-1.5.0/lib/0000755000004100000410000000000012666364534016047 5ustar www-datawww-datagettext_i18n_rails-1.5.0/lib/gettext_i18n_rails.rb0000644000004100000410000000220412666364534022107 0ustar www-datawww-datarequire 'gettext_i18n_rails/version' require 'gettext_i18n_rails/gettext_hooks' module GettextI18nRails IGNORE_TABLES = [/^sitemap_/, /_versions$/, 'schema_migrations', 'sessions', 'delayed_jobs'] end # translate from everywhere require 'fast_gettext' Object.send(:include, FastGettext::Translation) # make translations html_safe if possible and wanted if "".respond_to?(:html_safe?) require 'gettext_i18n_rails/html_safe_translations' Object.send(:include, GettextI18nRails::HtmlSafeTranslations) end # set up the backend require 'gettext_i18n_rails/backend' I18n.backend = GettextI18nRails::Backend.new # make I18n play nice with FastGettext require 'gettext_i18n_rails/i18n_hacks' # translate activerecord errors if defined? Rails::Railtie # Rails 3+ # load active_model extensions at the correct point in time require 'gettext_i18n_rails/railtie' else if defined? ActiveRecord require 'gettext_i18n_rails/active_record' elsif defined?(ActiveModel) require 'gettext_i18n_rails/active_model' end end # make bundle console work in a rails project require 'gettext_i18n_rails/action_controller' if defined?(ActionController) gettext_i18n_rails-1.5.0/lib/tasks/0000755000004100000410000000000012666364534017174 5ustar www-datawww-datagettext_i18n_rails-1.5.0/lib/tasks/gettext_rails_i18n.rake0000644000004100000410000000011212666364534023547 0ustar www-datawww-datarequire File.join(File.dirname(__FILE__), "/../gettext_i18n_rails/tasks") gettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/0000755000004100000410000000000012666364534021564 5ustar www-datawww-datagettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/active_record.rb0000644000004100000410000000043412666364534024723 0ustar www-datawww-datarequire 'gettext_i18n_rails/active_model/translation' class ActiveRecord::Base extend ActiveModel::Translation def self.human_attribute_name(*args) super(*args) end # method deprecated in Rails 3.1 def self.human_name(*args) _(self.humanize_class_name) end end gettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/base_parser.rb0000644000004100000410000000165212666364534024403 0ustar www-datawww-datarequire 'gettext_i18n_rails/gettext_hooks' module GettextI18nRails class BaseParser def self.target?(file) File.extname(file) == ".#{extension}" end def self.parse(file, _options = {}, msgids = []) return msgids unless load_library code = convert_to_code(File.read(file)) RubyGettextExtractor.parse_string(code, msgids, file) rescue Racc::ParseError => e $stderr.puts "file ignored: ruby_parser cannot read #{extension} files with 1.9 syntax --- #{file}: (#{e.message.strip})" return msgids end def self.load_library return true if @library_loaded begin require extension rescue LoadError puts "A #{extension} file was found, but #{extension} library could not be found, so nothing will be parsed..." return false end require 'gettext_i18n_rails/ruby_gettext_extractor' @library_loaded = true end end end gettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/i18n_hacks.rb0000644000004100000410000000104012666364534024034 0ustar www-datawww-dataI18n::Config # autoload module I18n class Config def locale FastGettext.locale.gsub("_","-").to_sym end def locale=(new_locale) FastGettext.locale=(new_locale) end end # backport I18n.with_locale if it does not exist # Executes block with given I18n.locale set. def self.with_locale(tmp_locale = nil) if tmp_locale current_locale = self.locale self.locale = tmp_locale end yield ensure self.locale = current_locale if tmp_locale end unless defined? I18n.with_locale end gettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/slim_parser.rb0000644000004100000410000000045612666364534024436 0ustar www-datawww-datarequire 'gettext_i18n_rails/base_parser' module GettextI18nRails class SlimParser < BaseParser def self.extension "slim" end def self.convert_to_code(text) Slim::Engine.new.call(text) end end end GettextI18nRails::GettextHooks.add_parser GettextI18nRails::SlimParser gettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/model_attributes_finder.rb0000644000004100000410000001303612666364534027011 0ustar www-datawww-datarequire 'rails/version' require 'rails' if Rails::VERSION::MAJOR > 2 module GettextI18nRails #write all found models/columns to a file where GetTexts ruby parser can find them def store_model_attributes(options) file = options[:to] || 'locale/model_attributes.rb' begin File.open(file,'w') do |f| f.puts "#DO NOT MODIFY! AUTOMATICALLY GENERATED FILE!" ModelAttributesFinder.new.find(options).each do |model,column_names| f.puts("_('#{model.humanize_class_name}')") #all columns namespaced under the model column_names.each do |attribute| translation = model.gettext_translation_for_attribute_name(attribute) f.puts("_('#{translation}')") end end f.puts "#DO NOT MODIFY! AUTOMATICALLY GENERATED FILE!" end rescue puts "[Error] Attribute extraction failed. Removing incomplete file (#{file})" File.delete(file) raise end end module_function :store_model_attributes class ModelAttributesFinder # options: # :ignore_tables => ['cars',/_settings$/,...] # :ignore_columns => ['id',/_id$/,...] # current connection ---> {'cars'=>['model_name','type'],...} def find(options) found = ActiveSupport::OrderedHash.new([]) models.each do |model| attributes = model_attributes(model, options[:ignore_tables], options[:ignore_columns]) found[model] = attributes.sort if attributes.any? end found end def initialize connection = ::ActiveRecord::Base.connection @existing_tables = (Rails::VERSION::MAJOR >= 5 ? connection.data_sources : connection.tables) end # Rails < 3.0 doesn't have DescendantsTracker. # Instead of iterating over ObjectSpace (slow) the decision was made NOT to support # class hierarchies with abstract base classes in Rails 2.x def model_attributes(model, ignored_tables, ignored_cols) return [] if model.abstract_class? && Rails::VERSION::MAJOR < 3 if model.abstract_class? model.direct_descendants.reject {|m| ignored?(m.table_name, ignored_tables)}.inject([]) do |attrs, m| attrs.push(model_attributes(m, ignored_tables, ignored_cols)).flatten.uniq end elsif !ignored?(model.table_name, ignored_tables) && @existing_tables.include?(model.table_name) model.columns.reject { |c| ignored?(c.name, ignored_cols) }.collect { |c| c.name } else [] end end def models if Rails::VERSION::MAJOR >= 3 Rails.application.eager_load! # make sure that all models are loaded so that direct_descendants works descendants = ::ActiveRecord::Base.direct_descendants # In rails 5+ user models are supposed to inherit from ApplicationRecord if defined?(::ApplicationRecord) descendants += ApplicationRecord.direct_descendants descendants.delete ApplicationRecord end descendants else ::ActiveRecord::Base.connection.tables \ .map { |t| table_name_to_namespaced_model(t) } \ .compact \ .collect { |c| c.superclass.abstract_class? ? c.superclass : c } end.uniq.sort_by(&:name) end def ignored?(name,patterns) return false unless patterns patterns.detect{|p|p.to_s==name.to_s or (p.is_a?(Regexp) and name=~p)} end private # Tries to find the model class corresponding to specified table name. # Takes into account that the model can be defined in a namespace. # Searches only up to one level deep - won't find models nested in two # or more modules. # # Note that if we allow namespaces, the conversion can be ambiguous, i.e. # if the table is named "aa_bb_cc" and AaBbCc, Aa::BbCc and AaBb::Cc are # all defined there's no absolute rule that tells us which one to use. # This method prefers the less nested one and, if there are two at # the same level, the one with shorter module name. def table_name_to_namespaced_model(table_name) # First assume that there are no namespaces model = to_class(table_name.singularize.camelcase) return model if model != nil # If you were wrong, assume that the model is in a namespace. # Iterate over the underscores and try to substitute each of them # for a slash that camelcase() replaces with the scope operator (::). underscore_position = table_name.index('_') while underscore_position != nil namespaced_table_name = table_name.dup namespaced_table_name[underscore_position] = '/' model = to_class(namespaced_table_name.singularize.camelcase) return model if model != nil underscore_position = table_name.index('_', underscore_position + 1) end # The model either is not defined or is buried more than one level # deep in a module hierarchy return nil end # Checks if there is a class of specified name and if so, returns # the class object. Otherwise returns nil. def to_class(name) # I wanted to use Module.const_defined?() here to avoid relying # on exceptions for normal program flow but it's of no use. # If class autoloading is enabled, the constant may be undefined # but turn out to be present when we actually try to use it. begin constant = name.constantize rescue NameError return nil rescue LoadError => e $stderr.puts "failed to load '#{name}', ignoring (#{e.class}: #{e.message})" return nil end return constant.is_a?(Class) ? constant : nil end end end gettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/haml_parser.rb0000644000004100000410000000046712666364534024415 0ustar www-datawww-datarequire 'gettext_i18n_rails/base_parser' module GettextI18nRails class HamlParser < BaseParser def self.extension "haml" end def self.convert_to_code(text) Haml::Engine.new(text).precompiled() end end end GettextI18nRails::GettextHooks.add_parser GettextI18nRails::HamlParser gettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/version.rb0000644000004100000410000000007212666364534023575 0ustar www-datawww-datamodule GettextI18nRails Version = VERSION = '1.5.0' end gettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/active_model.rb0000644000004100000410000000014512666364534024544 0ustar www-datawww-datarequire 'gettext_i18n_rails/active_model/name' require 'gettext_i18n_rails/active_model/translation' gettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/html_safe_translations.rb0000644000004100000410000000103312666364534026651 0ustar www-datawww-datamodule GettextI18nRails mattr_accessor :translations_are_html_safe module HtmlSafeTranslations # also make available on class methods def self.included(base) base.extend self end def _(*args) html_safe_if_wanted super end def n_(*args) html_safe_if_wanted super end def s_(*args) html_safe_if_wanted super end private def html_safe_if_wanted(text) return text unless GettextI18nRails.translations_are_html_safe text.to_s.html_safe end end end gettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/action_controller.rb0000644000004100000410000000062012666364534025627 0ustar www-datawww-dataclass ActionController::Base def set_gettext_locale requested_locale = params[:locale] || session[:locale] || cookies[:locale] || request.env['HTTP_ACCEPT_LANGUAGE'] || I18n.default_locale locale = FastGettext.set_locale(requested_locale) session[:locale] = locale I18n.locale = locale # some weird overwriting in action-controller makes this necessary ... see I18nProxy end end gettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/gettext_hooks.rb0000644000004100000410000000107012666364534024776 0ustar www-datawww-datamodule GettextI18nRails module GettextHooks # shoarter call / maybe the interface changes again ... def self.add_parser(parser) xgettext.add_parser(parser) end def self.xgettext @xgettext ||= begin require 'gettext/tools/xgettext' # 2.3+ GetText::Tools::XGetText rescue LoadError begin require 'gettext/tools/rgettext' # 2.0 - 2.2 GetText::RGetText rescue LoadError # # 1.x require 'gettext/rgettext' GetText::RGetText end end end end end gettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/ruby_gettext_extractor.rb0000644000004100000410000000617112666364534026736 0ustar www-datawww-datagem 'ruby_parser', '>= 3.7.1' # sync with gemspec require 'ruby_parser' gem 'sexp_processor' require 'sexp_processor' module RubyGettextExtractor extend self def parse(file, targets = []) # :nodoc: parse_string(File.read(file), targets, file) end def parse_string(content, targets = [], file) syntax_tree = RubyParser.for_current_ruby.parse(content, file) processor = Extractor.new(targets) processor.require_empty = false processor.process(syntax_tree) processor.results end class Extractor < SexpProcessor attr_reader :results def initialize(targets) @targets = {} @results = [] targets.each do |a| k, _v = a # things go wrong if k already exists, but this # should not happen (according to the gettext doc) @targets[k] = a @results << a end super() end def extract_string(node) case node.first when :str node.last when :call type, recv, meth, args = node # node has to be in form of "string" + "other_string" return nil unless recv && meth == :+ first_part = extract_string(recv) second_part = extract_string(args) first_part && second_part ? first_part.to_s + second_part.to_s : nil else nil end end def extract_key_singular(args, separator) key = extract_string(args) if args.size == 2 || args.size == 4 return nil unless key key.gsub("\n", '\n').gsub("\t", '\t').gsub("\0", '\0') end def extract_key_plural(args, separator) # this could be n_("aaa", "aaa plural", @retireitems.length) # s(s(:str, "aaa"), # s(:str, "aaa plural"), # s(:call, s(:ivar, :@retireitems), :length)) # all strings arguments are extracted and joined with \004 or \000 arguments = args[0..(-2)] res = [] arguments.each do |a| next unless a.kind_of? Sexp str = extract_string(a) res << str if str end key = res.empty? ? nil : res.join(separator) return nil unless key key.gsub("\n", '\n').gsub("\t", '\t').gsub("\0", '\0') end def store_key(key, args) if key res = @targets[key] unless res res = [key] @results << res @targets[key] = res end res << "#{args.file}:#{args.line}" end end def gettext_simple_call(args) # args comes in 2 forms: # s(s(:str, "Button Group Order:")) # s(:str, "Button Group Order:") # normalizing: args = args.first if Sexp === args.sexp_type key = extract_key_singular(args, "\004") store_key(key, args) end def gettext_plural_call(args) key = extract_key_plural(args, "\000") store_key(key, args) end def process_call exp _call = exp.shift _recv = process exp.shift meth = exp.shift case meth when :_, :p_, :N_, :pgettext, :s_ gettext_simple_call(exp) when :n_ gettext_plural_call(exp) end until exp.empty? do process(exp.shift) end s() end end end gettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/backend.rb0000644000004100000410000000450712666364534023506 0ustar www-datawww-datamodule GettextI18nRails #translates i18n calls to gettext calls class Backend @@translate_defaults = true cattr_accessor :translate_defaults attr_accessor :backend RUBY19 = (RUBY_VERSION > "1.9") def initialize(*args) self.backend = I18n::Backend::Simple.new(*args) end def available_locales FastGettext.available_locales || [] end def translate(locale, key, options) if gettext_key = gettext_key(key, options) translation = plural_translate(gettext_key, options) || FastGettext._(gettext_key) interpolate(translation, options) else result = backend.translate(locale, key, options) (RUBY19 and result.is_a?(String)) ? result.force_encoding("UTF-8") : result end end def method_missing(method, *args) backend.send(method, *args) end protected def gettext_key(key, options) flat_key = flatten_key key, options if FastGettext.key_exist?(flat_key) flat_key elsif self.class.translate_defaults [*options[:default]].each do |default| #try the scoped(more specific) key first e.g. 'activerecord.errors.my custom message' flat_key = flatten_key default, options return flat_key if FastGettext.key_exist?(flat_key) #try the short key thereafter e.g. 'my custom message' return default if FastGettext.key_exist?(default) end return nil end end def plural_translate(gettext_key, options) if options[:count] translation = FastGettext.n_(gettext_key, options[:count]) discard_pass_through_key gettext_key, translation end end def discard_pass_through_key(key, translation) if translation == key nil else translation end end def interpolate(string, values) if string.respond_to?(:%) reserved_keys = if defined?(I18n::RESERVED_KEYS) # rails 3+ I18n::RESERVED_KEYS else I18n::Backend::Base::RESERVED_KEYS end options = values.except(*reserved_keys) options.any? ? (string % options) : string else string end end def flatten_key key, options scope = [*(options[:scope] || [])] scope.empty? ? key.to_s : "#{scope*'.'}.#{key}" end end end gettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/active_model/0000755000004100000410000000000012666364534024217 5ustar www-datawww-datagettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/active_model/translation.rb0000644000004100000410000000200212666364534027074 0ustar www-datawww-datamodule ActiveModel module Translation # CarDealer.sales_count -> s_('CarDealer|Sales count') -> 'Sales count' if no translation was found def human_attribute_name(attribute, *args) s_(gettext_translation_for_attribute_name(attribute)) end def gettext_translation_for_attribute_name(attribute) attribute = attribute.to_s if attribute.ends_with?('_id') humanize_class_name(attribute) else "#{inheritance_tree_root(self)}|#{attribute.split('.').map! {|a| a.humanize }.join('|')}" end end def inheritance_tree_root(aclass) return aclass unless aclass.respond_to?(:base_class) base = aclass.base_class if base.superclass.abstract_class? if defined?(::ApplicationRecord) && base.superclass == ApplicationRecord base else base.superclass end else base end end def humanize_class_name(name=nil) name ||= self.to_s name.underscore.humanize end end end gettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/active_model/name.rb0000644000004100000410000000040312666364534025461 0ustar www-datawww-datamodule ActiveModel Name.class_eval do def human(options={}) human_name = @klass.humanize_class_name if count = options[:count] n_(human_name, human_name.pluralize, count) else _(human_name) end end end end gettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/railtie.rb0000644000004100000410000000141612666364534023544 0ustar www-datawww-datamodule GettextI18nRails class Railtie < ::Rails::Railtie config.gettext_i18n_rails = ActiveSupport::OrderedOptions.new config.gettext_i18n_rails.msgmerge = nil config.gettext_i18n_rails.msgcat = nil config.gettext_i18n_rails.xgettext = nil config.gettext_i18n_rails.use_for_active_record_attributes = true rake_tasks do begin gem "gettext", ">= 3.0.2" require 'gettext_i18n_rails/tasks' rescue Gem::LoadError # no gettext available, no tasks for you! end end config.after_initialize do |app| if app.config.gettext_i18n_rails.use_for_active_record_attributes ActiveSupport.on_load :active_record do require 'gettext_i18n_rails/active_model' end end end end end gettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/string_interpolate_fix.rb0000644000004100000410000000103112666364534026666 0ustar www-datawww-dataneeded = "".respond_to?(:html_safe) and ( "".html_safe % {:x => '
'} == '
' or not ("".html_safe % {:x=>'a'}).html_safe? ) if needed class String alias :interpolate_without_html_safe :% def %(*args) if args.first.is_a?(Hash) and html_safe? safe_replacement = Hash[args.first.map{|k,v| [k,ERB::Util.h(v)] }] interpolate_without_html_safe(safe_replacement).html_safe else interpolate_without_html_safe(*args).dup # make sure its not html_safe end end end end gettext_i18n_rails-1.5.0/lib/gettext_i18n_rails/tasks.rb0000644000004100000410000000743012666364534023242 0ustar www-datawww-datarequire "gettext/tools/task" gem "gettext", ">= 3.0.2" namespace :gettext do def locale_path path = FastGettext.translation_repositories[text_domain].instance_variable_get(:@options)[:path] rescue nil path || File.join(Rails.root, "locale") end def text_domain # if your textdomain is not 'app': require the environment before calling e.g. gettext:find OR add TEXTDOMAIN=my_domain (FastGettext.text_domain rescue nil) || ENV['TEXTDOMAIN'] || "app" end # do not rename, gettext_i18n_rails_js overwrites this to inject coffee + js def files_to_translate Dir.glob("{app,lib,config,#{locale_path}}/**/*.{rb,erb,haml,slim}") end def gettext_default_options config = (Rails.application.config.gettext_i18n_rails.default_options if defined?(Rails.application)) config || %w[--sort-by-msgid --no-location --no-wrap] end def gettext_msgmerge_options config = (Rails.application.config.gettext_i18n_rails.msgmerge if defined?(Rails.application)) config || gettext_default_options end def gettext_msgcat_options config = (Rails.application.config.gettext_i18n_rails.msgcat if defined?(Rails.application)) config || gettext_default_options end def gettext_xgettext_options config = (Rails.application.config.gettext_i18n_rails.xgettext if defined?(Rails.application)) config || gettext_default_options end require "gettext_i18n_rails/haml_parser" require "gettext_i18n_rails/slim_parser" task :setup => [:environment] do GetText::Tools::Task.define do |task| task.package_name = text_domain task.package_version = "1.0.0" task.domain = text_domain task.po_base_directory = locale_path task.mo_base_directory = locale_path task.files = files_to_translate task.enable_description = false task.msgmerge_options = gettext_msgmerge_options task.msgcat_options = gettext_msgcat_options task.xgettext_options = gettext_xgettext_options end end desc "Create mo-files" task :pack => [:setup] do Rake::Task["gettext:mo:update"].invoke end desc "Update pot/po files" task :find => [:setup] do Rake::Task["gettext:po:update"].invoke end # This is more of an example, ignoring # the columns/tables that mostly do not need translation. # This can also be done with GetText::ActiveRecord # but this crashed too often for me, and # IMO which column should/should-not be translated does not # belong into the model # # You can get your translations from GetText::ActiveRecord # by adding this to you gettext:find task # # require 'active_record' # gem "gettext_activerecord", '>=0.1.0' #download and install from github # require 'gettext_activerecord/parser' desc "write the model attributes to /model_attributes.rb" task :store_model_attributes => :environment do FastGettext.silence_errors require 'gettext_i18n_rails/model_attributes_finder' require 'gettext_i18n_rails/active_record' storage_file = "#{locale_path}/model_attributes.rb" puts "writing model translations to: #{storage_file}" GettextI18nRails.store_model_attributes( :to => storage_file, :ignore_columns => [/_id$/, 'id', 'type', 'created_at', 'updated_at'], :ignore_tables => GettextI18nRails::IGNORE_TABLES ) end desc "add a new language" task :add_language, [:language] => :environment do |_, args| language = args.language || ENV["LANGUAGE"] # Let's do some pre-verification of the environment. if language.nil? puts "You need to specify the language to add. Either 'LANGUAGE=eo rake gettext:add_language' or 'rake gettext:add_language[eo]'" next end language_path = File.join(locale_path, language) mkdir_p(language_path) Rake.application.lookup('gettext:find', _.scope).invoke end end gettext_i18n_rails-1.5.0/MIT-LICENSE.txt0000644000004100000410000000207012666364534017552 0ustar www-datawww-dataCopyright (C) 2013 Michael Grosser Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. gettext_i18n_rails-1.5.0/metadata.yml0000644000004100000410000001371512666364534017613 0ustar www-datawww-data--- !ruby/object:Gem::Specification name: gettext_i18n_rails version: !ruby/object:Gem::Version version: 1.5.0 platform: ruby authors: - Michael Grosser autorequire: bindir: bin cert_chain: [] date: 2016-02-29 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency name: fast_gettext requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: 0.9.0 type: :runtime prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: 0.9.0 - !ruby/object:Gem::Dependency name: bump requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: gettext requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: 3.0.2 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: 3.0.2 - !ruby/object:Gem::Dependency name: haml requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: rake requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: rails requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: ruby_parser requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: 3.7.1 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: 3.7.1 - !ruby/object:Gem::Dependency name: sexp_processor requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: rspec requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: slim requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: sqlite3 requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: wwtd requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' description: email: michael@grosser.it executables: [] extensions: [] extra_rdoc_files: [] files: - MIT-LICENSE.txt - lib/gettext_i18n_rails.rb - lib/gettext_i18n_rails/action_controller.rb - lib/gettext_i18n_rails/active_model.rb - lib/gettext_i18n_rails/active_model/name.rb - lib/gettext_i18n_rails/active_model/translation.rb - lib/gettext_i18n_rails/active_record.rb - lib/gettext_i18n_rails/backend.rb - lib/gettext_i18n_rails/base_parser.rb - lib/gettext_i18n_rails/gettext_hooks.rb - lib/gettext_i18n_rails/haml_parser.rb - lib/gettext_i18n_rails/html_safe_translations.rb - lib/gettext_i18n_rails/i18n_hacks.rb - lib/gettext_i18n_rails/model_attributes_finder.rb - lib/gettext_i18n_rails/railtie.rb - lib/gettext_i18n_rails/ruby_gettext_extractor.rb - lib/gettext_i18n_rails/slim_parser.rb - lib/gettext_i18n_rails/string_interpolate_fix.rb - lib/gettext_i18n_rails/tasks.rb - lib/gettext_i18n_rails/version.rb - lib/tasks/gettext_rails_i18n.rake homepage: http://github.com/grosser/gettext_i18n_rails licenses: - MIT metadata: {} post_install_message: rdoc_options: [] require_paths: - lib required_ruby_version: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' required_rubygems_version: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' requirements: [] rubyforge_project: rubygems_version: 2.4.5.1 signing_key: specification_version: 4 summary: Simple FastGettext Rails integration. test_files: []