fast_gettext 0.4.17 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +42 -27
- data/Rakefile +5 -15
- data/VERSION +1 -1
- data/fast_gettext.gemspec +26 -19
- data/lib/fast_gettext/mo_file.rb +1 -1
- data/lib/fast_gettext/translation_repository.rb +6 -4
- data/lib/fast_gettext/translation_repository/mo.rb +1 -1
- data/lib/fast_gettext/translation_repository/yaml.rb +72 -0
- data/spec/fast_gettext/mo_file_spec.rb +2 -3
- data/spec/fast_gettext/storage_spec.rb +7 -7
- data/spec/fast_gettext/translation_repository/db_spec.rb +3 -2
- data/spec/fast_gettext/translation_repository/mo_spec.rb +1 -1
- data/spec/fast_gettext/translation_repository/po_spec.rb +1 -1
- data/spec/fast_gettext/translation_repository/yaml_spec.rb +61 -0
- data/spec/fast_gettext/translation_repository_spec.rb +34 -0
- data/spec/fast_gettext/translation_spec.rb +5 -5
- data/spec/fast_gettext_spec.rb +1 -2
- data/spec/locale/yaml/de.yml +25 -0
- data/spec/locale/yaml/en.yml +21 -0
- data/spec/locale/yaml/notfound.yml +2 -0
- data/spec/vendor/string_spec.rb +27 -17
- data/vendor/string.rb +16 -0
- metadata +22 -15
- data/rdoc/README.rdoc +0 -1
    
        data/README.markdown
    CHANGED
    
    | @@ -2,10 +2,43 @@ FastGettext | |
| 2 2 | 
             
            ===========
         | 
| 3 3 | 
             
            GetText but 3.5 x faster, 560 x less memory, simple, clean namespace (7 vs 34) and threadsave!  
         | 
| 4 4 |  | 
| 5 | 
            -
            It supports multiple backends ( | 
| 5 | 
            +
            It supports multiple backends (.mo, .po, .yml files, Database(ActiveRecor + any other), Chain, Loggers) and can easily be extended.
         | 
| 6 6 |  | 
| 7 7 | 
             
            [Example Rails application](https://github.com/grosser/gettext_i18n_rails_example)
         | 
| 8 8 |  | 
| 9 | 
            +
            Comparison
         | 
| 10 | 
            +
            ==========
         | 
| 11 | 
            +
            <table>
         | 
| 12 | 
            +
              <tr>
         | 
| 13 | 
            +
                <td></td>
         | 
| 14 | 
            +
                <td width="100">Hash</td>
         | 
| 15 | 
            +
                <td width="150">FastGettext</td>
         | 
| 16 | 
            +
                <td width="100">GetText</td>
         | 
| 17 | 
            +
                <td width="100">ActiveSupport I18n::Simple</td>
         | 
| 18 | 
            +
              </tr>
         | 
| 19 | 
            +
              <tr>
         | 
| 20 | 
            +
                <td>Speed*</td>
         | 
| 21 | 
            +
                <td>0.82s</td>
         | 
| 22 | 
            +
                <td>1.36s</td>
         | 
| 23 | 
            +
                <td>4.88s</td>
         | 
| 24 | 
            +
                <td>21.77s</td>
         | 
| 25 | 
            +
              </tr>
         | 
| 26 | 
            +
              <tr>
         | 
| 27 | 
            +
                <td>RAM*</td>
         | 
| 28 | 
            +
                <td>4K</td>
         | 
| 29 | 
            +
                <td>8K</td>
         | 
| 30 | 
            +
                <td>4480K</td>
         | 
| 31 | 
            +
                <td>10100K</td>
         | 
| 32 | 
            +
              </tr>
         | 
| 33 | 
            +
              <tr>
         | 
| 34 | 
            +
                <td>Included backends</td>
         | 
| 35 | 
            +
                <td></td>
         | 
| 36 | 
            +
                <td>db, yml, mo, po, logger, chain</td>
         | 
| 37 | 
            +
                <td>mo</td>
         | 
| 38 | 
            +
                <td>yml</td>
         | 
| 39 | 
            +
              </tr>
         | 
| 40 | 
            +
            </table>
         | 
| 41 | 
            +
            <small>*50.000 translations with ruby enterprise 1.8.6 through `rake benchmark`</small>
         | 
| 9 42 |  | 
| 10 43 | 
             
            Setup
         | 
| 11 44 | 
             
            =====
         | 
| @@ -17,10 +50,14 @@ Setup | |
| 17 50 | 
             
            From mo files (traditional/default)
         | 
| 18 51 | 
             
                FastGettext.add_text_domain('my_app',:path=>'locale')
         | 
| 19 52 |  | 
| 20 | 
            -
            Or po files (less  | 
| 53 | 
            +
            Or po files (less maintenance than mo)
         | 
| 21 54 | 
             
                FastGettext.add_text_domain('my_app',:path=>'locale', :type=>:po)
         | 
| 22 55 |  | 
| 23 | 
            -
            Or  | 
| 56 | 
            +
            Or yaml files (use I18n syntax/indentation)
         | 
| 57 | 
            +
                FastGettext.add_text_domain('my_app',:path=>'config/locales', :type=>:yaml)
         | 
| 58 | 
            +
             | 
| 59 | 
            +
            Or database (scaleable, good for many locales/translators)
         | 
| 60 | 
            +
                # db access is cached <-> only first lookup hits the db 
         | 
| 24 61 | 
             
                require "fast_gettext/translation_repository/db"
         | 
| 25 62 | 
             
                include FastGettext::TranslationRepository::Db.require_models #load and include default models
         | 
| 26 63 | 
             
                FastGettext.add_text_domain('my_app', :type=>:db, :model=>TranslationKey)
         | 
| @@ -51,7 +88,6 @@ Use the [original GetText](http://github.com/mutoh/gettext) to create and manage | |
| 51 88 | 
             
            (Work on a po/mo parser & reader that is easier to use has started, contributions welcome @ [pomo](http://github.com/grosser/pomo) )
         | 
| 52 89 |  | 
| 53 90 | 
             
            ###Database
         | 
| 54 | 
            -
            !!!new/only short time in production, please report back any ideas/suggestions you have!!!  
         | 
| 55 91 | 
             
            [Example migration for ActiveRecord](http://github.com/grosser/fast_gettext/blob/master/examples/db/migration.rb)  
         | 
| 56 92 | 
             
            The default plural seperator is `||||` but you may overwrite it (or suggest a better one..).
         | 
| 57 93 |  | 
| @@ -60,28 +96,6 @@ If you want to use your own models, have a look at the [default models](http://g | |
| 60 96 |  | 
| 61 97 | 
             
            To manage translations via a Web GUI, use a [Rails application and the translation_db_engine](http://github.com/grosser/translation_db_engine)
         | 
| 62 98 |  | 
| 63 | 
            -
             | 
| 64 | 
            -
            Performance
         | 
| 65 | 
            -
            ===========
         | 
| 66 | 
            -
            50_000 translations speed / memory  
         | 
| 67 | 
            -
            small translation file <-> large translation file  
         | 
| 68 | 
            -
            (ruby enterprise 1.8.6, your results may vary, try `rake benchmark`)
         | 
| 69 | 
            -
                Baseline: (doing nothing in a loop)
         | 
| 70 | 
            -
                0.250000s / 0K <->
         | 
| 71 | 
            -
             | 
| 72 | 
            -
                Ideal: (primitive Hash lookup)
         | 
| 73 | 
            -
                0.820000s / 4K <-> 0.760000s / 4K
         | 
| 74 | 
            -
             | 
| 75 | 
            -
                FastGettext:
         | 
| 76 | 
            -
                1.360000s / 8K <-> 1.320000s / 8K
         | 
| 77 | 
            -
             | 
| 78 | 
            -
                GetText 2.0.1:
         | 
| 79 | 
            -
                4.880000s / 4480K <-> 4.810000s / 4480K
         | 
| 80 | 
            -
             | 
| 81 | 
            -
                ActiveSupport I18n::Backend::Simple :
         | 
| 82 | 
            -
                21.770000s / 10100K <->
         | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 85 99 | 
             
            Rails
         | 
| 86 100 | 
             
            =======================
         | 
| 87 101 | 
             
            Try the [gettext_i18n_rails plugin](http://github.com/grosser/gettext_i18n_rails), it simplifies the setup.  
         | 
| @@ -145,7 +159,7 @@ Unfound may not always mean missing, if you chose not to translate a word becaus | |
| 145 159 | 
             
            A lambda or anything that responds to `call` will do as callback. A good starting point may be `examples/missing_translations_logger.rb`.
         | 
| 146 160 |  | 
| 147 161 | 
             
            ###Plugins
         | 
| 148 | 
            -
            Want a  | 
| 162 | 
            +
            Want a xml version ?
         | 
| 149 163 | 
             
            Write your own TranslationRepository!
         | 
| 150 164 | 
             
                #fast_gettext/translation_repository/xxx.rb
         | 
| 151 165 | 
             
                module FastGettext
         | 
| @@ -174,6 +188,7 @@ Mo/Po-file parsing from Masao Mutoh, see vendor/README | |
| 174 188 |  | 
| 175 189 | 
             
            ###Contributors
         | 
| 176 190 | 
             
             - [geekq](http://www.innoq.com/blog/vd)
         | 
| 191 | 
            +
             - [Matt Sanford](http://blog.mzsanford.com)
         | 
| 177 192 | 
             
             - Rudolf Gavlas
         | 
| 178 193 |  | 
| 179 194 | 
             
            [Michael Grosser](http://pragmatig.wordpress.com)  
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -1,9 +1,6 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
              files = FileList['spec/**/*_spec.rb']
         | 
| 5 | 
            -
              system("spec #{options} #{files}")
         | 
| 6 | 
            -
            end
         | 
| 1 | 
            +
            task :default => :spec
         | 
| 2 | 
            +
            require 'spec/rake/spectask'
         | 
| 3 | 
            +
            Spec::Rake::SpecTask.new {|t| t.spec_opts = ['--color']}
         | 
| 7 4 |  | 
| 8 5 | 
             
            task :benchmark do
         | 
| 9 6 | 
             
              puts "Running on #{RUBY}"
         | 
| @@ -27,16 +24,9 @@ begin | |
| 27 24 | 
             
                gem.email = "grosser.michael@gmail.com"
         | 
| 28 25 | 
             
                gem.homepage = "http://github.com/grosser/#{project_name}"
         | 
| 29 26 | 
             
                gem.authors = ["Michael Grosser"]
         | 
| 30 | 
            -
                gem.rubyforge_project = project_name.sub('_','-')
         | 
| 31 | 
            -
              end
         | 
| 32 | 
            -
             | 
| 33 | 
            -
              # fake task so that rubyforge:release works
         | 
| 34 | 
            -
              task :rdoc do
         | 
| 35 | 
            -
                `mkdir rdoc`
         | 
| 36 | 
            -
                `echo documentation is at http://github.com/grosser/#{project_name} > rdoc/README.rdoc`
         | 
| 37 27 | 
             
              end
         | 
| 38 28 |  | 
| 39 | 
            -
              Jeweler:: | 
| 29 | 
            +
              Jeweler::GemcutterTasks.new
         | 
| 40 30 | 
             
            rescue LoadError
         | 
| 41 | 
            -
              puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install  | 
| 31 | 
            +
              puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install jeweler"
         | 
| 42 32 | 
             
            end
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0. | 
| 1 | 
            +
            0.5.1
         | 
    
        data/fast_gettext.gemspec
    CHANGED
    
    | @@ -1,15 +1,15 @@ | |
| 1 1 | 
             
            # Generated by jeweler
         | 
| 2 | 
            -
            # DO NOT EDIT THIS FILE
         | 
| 3 | 
            -
            # Instead, edit Jeweler::Tasks in Rakefile, and run  | 
| 2 | 
            +
            # DO NOT EDIT THIS FILE DIRECTLY
         | 
| 3 | 
            +
            # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
         | 
| 4 4 | 
             
            # -*- encoding: utf-8 -*-
         | 
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 7 | 
             
              s.name = %q{fast_gettext}
         | 
| 8 | 
            -
              s.version = "0. | 
| 8 | 
            +
              s.version = "0.5.1"
         | 
| 9 9 |  | 
| 10 10 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 11 | 
             
              s.authors = ["Michael Grosser"]
         | 
| 12 | 
            -
              s.date = %q{ | 
| 12 | 
            +
              s.date = %q{2010-01-30}
         | 
| 13 13 | 
             
              s.email = %q{grosser.michael@gmail.com}
         | 
| 14 14 | 
             
              s.extra_rdoc_files = [
         | 
| 15 15 | 
             
                "README.markdown"
         | 
| @@ -48,7 +48,7 @@ Gem::Specification.new do |s| | |
| 48 48 | 
             
                 "lib/fast_gettext/translation_repository/logger.rb",
         | 
| 49 49 | 
             
                 "lib/fast_gettext/translation_repository/mo.rb",
         | 
| 50 50 | 
             
                 "lib/fast_gettext/translation_repository/po.rb",
         | 
| 51 | 
            -
                 " | 
| 51 | 
            +
                 "lib/fast_gettext/translation_repository/yaml.rb",
         | 
| 52 52 | 
             
                 "spec/aa_unconfigued_spec.rb",
         | 
| 53 53 | 
             
                 "spec/fast_gettext/mo_file_spec.rb",
         | 
| 54 54 | 
             
                 "spec/fast_gettext/storage_spec.rb",
         | 
| @@ -58,6 +58,8 @@ Gem::Specification.new do |s| | |
| 58 58 | 
             
                 "spec/fast_gettext/translation_repository/logger_spec.rb",
         | 
| 59 59 | 
             
                 "spec/fast_gettext/translation_repository/mo_spec.rb",
         | 
| 60 60 | 
             
                 "spec/fast_gettext/translation_repository/po_spec.rb",
         | 
| 61 | 
            +
                 "spec/fast_gettext/translation_repository/yaml_spec.rb",
         | 
| 62 | 
            +
                 "spec/fast_gettext/translation_repository_spec.rb",
         | 
| 61 63 | 
             
                 "spec/fast_gettext/translation_spec.rb",
         | 
| 62 64 | 
             
                 "spec/fast_gettext_spec.rb",
         | 
| 63 65 | 
             
                 "spec/locale/de/LC_MESSAGES/test.mo",
         | 
| @@ -66,6 +68,9 @@ Gem::Specification.new do |s| | |
| 66 68 | 
             
                 "spec/locale/en/LC_MESSAGES/test.mo",
         | 
| 67 69 | 
             
                 "spec/locale/en/plural_test.po",
         | 
| 68 70 | 
             
                 "spec/locale/en/test.po",
         | 
| 71 | 
            +
                 "spec/locale/yaml/de.yml",
         | 
| 72 | 
            +
                 "spec/locale/yaml/en.yml",
         | 
| 73 | 
            +
                 "spec/locale/yaml/notfound.yml",
         | 
| 69 74 | 
             
                 "spec/spec_helper.rb",
         | 
| 70 75 | 
             
                 "spec/vendor/fake_load_path/iconv.rb",
         | 
| 71 76 | 
             
                 "spec/vendor/iconv_spec.rb",
         | 
| @@ -80,27 +85,28 @@ Gem::Specification.new do |s| | |
| 80 85 | 
             
              s.homepage = %q{http://github.com/grosser/fast_gettext}
         | 
| 81 86 | 
             
              s.rdoc_options = ["--charset=UTF-8"]
         | 
| 82 87 | 
             
              s.require_paths = ["lib"]
         | 
| 83 | 
            -
              s.rubyforge_project = %q{fast-gettext}
         | 
| 84 88 | 
             
              s.rubygems_version = %q{1.3.5}
         | 
| 85 89 | 
             
              s.summary = %q{A simple, fast and threadsafe implementation of GetText}
         | 
| 86 90 | 
             
              s.test_files = [
         | 
| 87 | 
            -
                "spec/ | 
| 88 | 
            -
                 "spec/ | 
| 89 | 
            -
                 "spec/ | 
| 90 | 
            -
                 "spec/ | 
| 91 | 
            -
                 "spec/ | 
| 91 | 
            +
                "spec/spec_helper.rb",
         | 
| 92 | 
            +
                 "spec/aa_unconfigued_spec.rb",
         | 
| 93 | 
            +
                 "spec/vendor/fake_load_path/iconv.rb",
         | 
| 94 | 
            +
                 "spec/vendor/iconv_spec.rb",
         | 
| 95 | 
            +
                 "spec/vendor/string_spec.rb",
         | 
| 96 | 
            +
                 "spec/fast_gettext_spec.rb",
         | 
| 97 | 
            +
                 "spec/fast_gettext/translation_repository_spec.rb",
         | 
| 98 | 
            +
                 "spec/fast_gettext/translation_repository/mo_spec.rb",
         | 
| 99 | 
            +
                 "spec/fast_gettext/translation_repository/db_spec.rb",
         | 
| 100 | 
            +
                 "spec/fast_gettext/translation_repository/yaml_spec.rb",
         | 
| 92 101 | 
             
                 "spec/fast_gettext/translation_repository/logger_spec.rb",
         | 
| 93 102 | 
             
                 "spec/fast_gettext/translation_repository/base_spec.rb",
         | 
| 94 103 | 
             
                 "spec/fast_gettext/translation_repository/po_spec.rb",
         | 
| 95 | 
            -
                 "spec/fast_gettext/translation_repository/ | 
| 96 | 
            -
                 "spec/fast_gettext/ | 
| 104 | 
            +
                 "spec/fast_gettext/translation_repository/chain_spec.rb",
         | 
| 105 | 
            +
                 "spec/fast_gettext/translation_spec.rb",
         | 
| 97 106 | 
             
                 "spec/fast_gettext/mo_file_spec.rb",
         | 
| 98 | 
            -
                 "spec/ | 
| 99 | 
            -
                 " | 
| 100 | 
            -
                 " | 
| 101 | 
            -
                 "spec/vendor/string_spec.rb",
         | 
| 102 | 
            -
                 "examples/db/migration.rb",
         | 
| 103 | 
            -
                 "examples/missing_translation_logger.rb"
         | 
| 107 | 
            +
                 "spec/fast_gettext/storage_spec.rb",
         | 
| 108 | 
            +
                 "examples/missing_translation_logger.rb",
         | 
| 109 | 
            +
                 "examples/db/migration.rb"
         | 
| 104 110 | 
             
              ]
         | 
| 105 111 |  | 
| 106 112 | 
             
              if s.respond_to? :specification_version then
         | 
| @@ -113,3 +119,4 @@ Gem::Specification.new do |s| | |
| 113 119 | 
             
              else
         | 
| 114 120 | 
             
              end
         | 
| 115 121 | 
             
            end
         | 
| 122 | 
            +
             | 
    
        data/lib/fast_gettext/mo_file.rb
    CHANGED
    
    | @@ -19,7 +19,7 @@ module FastGettext | |
| 19 19 | 
             
                  @data[key]
         | 
| 20 20 | 
             
                end
         | 
| 21 21 |  | 
| 22 | 
            -
                #returns the plural forms or all  | 
| 22 | 
            +
                #returns the plural forms or all singular translations that where found
         | 
| 23 23 | 
             
                def plural(*msgids)
         | 
| 24 24 | 
             
                  translations = plural_translations(msgids)
         | 
| 25 25 | 
             
                  return translations unless translations.empty?
         | 
| @@ -5,11 +5,13 @@ module FastGettext | |
| 5 5 | 
             
                extend self
         | 
| 6 6 |  | 
| 7 7 | 
             
                # only single-word types supported atm (mytype works, MyType will not)
         | 
| 8 | 
            -
                def build(name,options)
         | 
| 8 | 
            +
                def build(name, options)
         | 
| 9 9 | 
             
                  type = options[:type] || :mo
         | 
| 10 | 
            -
                   | 
| 11 | 
            -
                   | 
| 12 | 
            -
             | 
| 10 | 
            +
                  class_name = type.to_s.capitalize
         | 
| 11 | 
            +
                  unless FastGettext::TranslationRepository.constants.map{|c|c.to_s}.include?(class_name)
         | 
| 12 | 
            +
                    require "fast_gettext/translation_repository/#{type}" 
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
                  eval(class_name).new(name,options)
         | 
| 13 15 | 
             
                end
         | 
| 14 16 | 
             
              end
         | 
| 15 17 | 
             
            end
         | 
| @@ -22,7 +22,7 @@ module FastGettext | |
| 22 22 |  | 
| 23 23 | 
             
                  def find_and_store_files(name,options)
         | 
| 24 24 | 
             
                    # parse all .mo files with the right name, that sit in locale/LC_MESSAGES folders
         | 
| 25 | 
            -
                    find_files_in_locale_folders(File.join('LC_MESSAGES',"#{name}.mo"),options[:path]) do |locale,file|
         | 
| 25 | 
            +
                    find_files_in_locale_folders(File.join('LC_MESSAGES',"#{name}.mo"), options[:path]) do |locale,file|
         | 
| 26 26 | 
             
                      @files[locale] = MoFile.new(file)
         | 
| 27 27 | 
             
                    end
         | 
| 28 28 | 
             
                  end
         | 
| @@ -0,0 +1,72 @@ | |
| 1 | 
            +
            require 'fast_gettext/translation_repository/base'
         | 
| 2 | 
            +
            require 'yaml'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module FastGettext
         | 
| 5 | 
            +
              module TranslationRepository
         | 
| 6 | 
            +
                # Responsibility:
         | 
| 7 | 
            +
                #  - find and store yaml files
         | 
| 8 | 
            +
                #  - provide access to translations in yaml files
         | 
| 9 | 
            +
                class Yaml < Base
         | 
| 10 | 
            +
                  def initialize(name,options={})
         | 
| 11 | 
            +
                    find_and_store_files(options)
         | 
| 12 | 
            +
                    super
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def available_locales
         | 
| 16 | 
            +
                    @files.keys
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  def plural(*keys)
         | 
| 20 | 
            +
                    ['one', 'other', 'plural2', 'plural3'].map do |name|
         | 
| 21 | 
            +
                      self[yaml_dot_notation(keys.first, name)]
         | 
| 22 | 
            +
                    end
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  def pluralisation_rule
         | 
| 26 | 
            +
                    self['pluralisation_rule'] ? lambda{|n| eval(self['pluralisation_rule']) } : nil
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  protected
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  MAX_FIND_DEPTH = 10
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  def find_and_store_files(options)
         | 
| 34 | 
            +
                    @files = {}
         | 
| 35 | 
            +
                    path = options[:path] || 'config/locales'
         | 
| 36 | 
            +
                    Dir["#{path}/??.yml"].each do |yaml_file|
         | 
| 37 | 
            +
                      locale = yaml_file.match(/([a-z]{2})\.yml$/)[1]
         | 
| 38 | 
            +
                      @files[locale] = load_yaml(yaml_file, locale)
         | 
| 39 | 
            +
                    end
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  def current_translations
         | 
| 43 | 
            +
                    @files[FastGettext.locale] || super
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  # Given a yaml file return a hash of key -> translation
         | 
| 47 | 
            +
                  def load_yaml(file, locale)
         | 
| 48 | 
            +
                    yaml = YAML.load_file(file)
         | 
| 49 | 
            +
                    yaml_hash_to_dot_notation(yaml[locale])
         | 
| 50 | 
            +
                  end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                  def yaml_hash_to_dot_notation(yaml_hash)
         | 
| 53 | 
            +
                    add_yaml_key({}, nil, yaml_hash)
         | 
| 54 | 
            +
                  end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                  def add_yaml_key(result, prefix, hash)
         | 
| 57 | 
            +
                    hash.each_pair do |key, value|
         | 
| 58 | 
            +
                      if value.kind_of?(Hash)
         | 
| 59 | 
            +
                        add_yaml_key(result, yaml_dot_notation(prefix, key), value)
         | 
| 60 | 
            +
                      else
         | 
| 61 | 
            +
                        result[yaml_dot_notation(prefix, key)] = value
         | 
| 62 | 
            +
                      end
         | 
| 63 | 
            +
                    end
         | 
| 64 | 
            +
                    result
         | 
| 65 | 
            +
                  end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                  def yaml_dot_notation(a,b)
         | 
| 68 | 
            +
                    a ? "#{a}.#{b}" : b
         | 
| 69 | 
            +
                  end
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
              end
         | 
| 72 | 
            +
            end
         | 
| @@ -1,11 +1,10 @@ | |
| 1 1 | 
             
            current_folder = File.dirname(__FILE__)
         | 
| 2 2 | 
             
            require File.join(current_folder,'..','spec_helper')
         | 
| 3 3 |  | 
| 4 | 
            -
            include FastGettext
         | 
| 5 4 | 
             
            de_file = File.join(current_folder,'..','locale','de','LC_MESSAGES','test.mo')
         | 
| 6 | 
            -
            de = MoFile.new(de_file)
         | 
| 5 | 
            +
            de = FastGettext::MoFile.new(de_file)
         | 
| 7 6 |  | 
| 8 | 
            -
            describe MoFile do
         | 
| 7 | 
            +
            describe FastGettext::MoFile do
         | 
| 9 8 | 
             
              before :all do
         | 
| 10 9 | 
             
                File.exist?(de_file).should == true
         | 
| 11 10 | 
             
              end
         | 
| @@ -1,9 +1,9 @@ | |
| 1 1 | 
             
            current_folder = File.dirname(__FILE__)
         | 
| 2 2 | 
             
            require File.join(current_folder,'..','spec_helper')
         | 
| 3 3 |  | 
| 4 | 
            -
            include FastGettext::Storage
         | 
| 5 | 
            -
             | 
| 6 4 | 
             
            describe 'Storage' do
         | 
| 5 | 
            +
              include FastGettext::Storage
         | 
| 6 | 
            +
             | 
| 7 7 | 
             
              before do
         | 
| 8 8 | 
             
                #reset everything to nil
         | 
| 9 9 | 
             
                self.available_locales = nil
         | 
| @@ -258,7 +258,7 @@ describe 'Storage' do | |
| 258 258 |  | 
| 259 259 | 
             
              describe :key_exist? do
         | 
| 260 260 | 
             
                it "does not find default keys" do
         | 
| 261 | 
            -
                  _('abcde')
         | 
| 261 | 
            +
                  FastGettext._('abcde')
         | 
| 262 262 | 
             
                  key_exist?('abcde').should be_false
         | 
| 263 263 | 
             
                end
         | 
| 264 264 |  | 
| @@ -291,19 +291,19 @@ describe 'Storage' do | |
| 291 291 | 
             
                end
         | 
| 292 292 | 
             
              end
         | 
| 293 293 |  | 
| 294 | 
            -
              describe NoTextDomainConfigured do
         | 
| 294 | 
            +
              describe FastGettext::Storage::NoTextDomainConfigured do
         | 
| 295 295 | 
             
                it "shows what to do" do
         | 
| 296 | 
            -
                  NoTextDomainConfigured.new.to_s.should =~ /FastGettext\.add_text_domain/
         | 
| 296 | 
            +
                  FastGettext::Storage::NoTextDomainConfigured.new.to_s.should =~ /FastGettext\.add_text_domain/
         | 
| 297 297 | 
             
                end
         | 
| 298 298 |  | 
| 299 299 | 
             
                it "warns when text_domain is nil" do
         | 
| 300 300 | 
             
                  FastGettext.text_domain = nil
         | 
| 301 | 
            -
                  NoTextDomainConfigured.new.to_s.should =~ /\(nil\)/
         | 
| 301 | 
            +
                  FastGettext::Storage::NoTextDomainConfigured.new.to_s.should =~ /\(nil\)/
         | 
| 302 302 | 
             
                end
         | 
| 303 303 |  | 
| 304 304 | 
             
                it "shows current text_domain" do
         | 
| 305 305 | 
             
                  FastGettext.text_domain = 'xxx'
         | 
| 306 | 
            -
                  NoTextDomainConfigured.new('xxx').to_s.should =~ /xxx/
         | 
| 306 | 
            +
                  FastGettext::Storage::NoTextDomainConfigured.new('xxx').to_s.should =~ /xxx/
         | 
| 307 307 | 
             
                end
         | 
| 308 308 | 
             
              end
         | 
| 309 309 | 
             
            end
         | 
| @@ -1,11 +1,12 @@ | |
| 1 1 | 
             
            current_folder = File.dirname(__FILE__)
         | 
| 2 2 | 
             
            require File.join(current_folder,'..','..','spec_helper')
         | 
| 3 3 |  | 
| 4 | 
            -
            require ' | 
| 4 | 
            +
            require 'active_record'
         | 
| 5 5 | 
             
            require 'fast_gettext/translation_repository/db'
         | 
| 6 | 
            -
            include FastGettext::TranslationRepository::Db.require_models
         | 
| 7 6 |  | 
| 7 | 
            +
            include FastGettext::TranslationRepository::Db.require_models
         | 
| 8 8 | 
             
            describe FastGettext::TranslationRepository::Db do
         | 
| 9 | 
            +
             | 
| 9 10 | 
             
              before :all do
         | 
| 10 11 | 
             
                ActiveRecord::Base.establish_connection({
         | 
| 11 12 | 
             
                  :adapter => "sqlite3",
         | 
| @@ -0,0 +1,61 @@ | |
| 1 | 
            +
            current_folder = File.dirname(__FILE__)
         | 
| 2 | 
            +
            require File.join(current_folder,'..','..','spec_helper')
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            describe 'FastGettext::TranslationRepository::Yaml' do
         | 
| 5 | 
            +
              before do
         | 
| 6 | 
            +
                @rep = FastGettext::TranslationRepository.build('test', :path => File.join(current_folder,'..', '..', 'locale', 'yaml'), :type => :yaml)
         | 
| 7 | 
            +
                @rep.is_a?(FastGettext::TranslationRepository::Yaml).should be_true
         | 
| 8 | 
            +
                FastGettext.locale = 'de'
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              it "can be built" do
         | 
| 12 | 
            +
                @rep.available_locales.sort.should == ['de', 'en']
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              it "translates nothing when locale is unsupported" do
         | 
| 16 | 
            +
                FastGettext.locale = 'xx'
         | 
| 17 | 
            +
                @rep['simple'].should == nil
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              it "does not translated categories" do
         | 
| 21 | 
            +
                @rep['cars'].should == nil
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              it "can translate simple" do
         | 
| 25 | 
            +
                @rep['simple'].should == 'einfach'
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              it "can translate nested" do
         | 
| 29 | 
            +
                @rep['cars.car'].should == 'Auto'
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              it "can pluralize" do
         | 
| 33 | 
            +
                @rep.plural('cars.axis').should == ['Achse', 'Achsen', nil, nil]
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              it "handles unfound plurals with nil" do
         | 
| 37 | 
            +
                @rep.plural('cars.xxx').should == [nil, nil, nil, nil]
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              it "can be used to translate plural forms" do
         | 
| 41 | 
            +
                FastGettext.stub!(:current_repository).and_return @rep
         | 
| 42 | 
            +
                FastGettext.n_('cars.axis','cars.axis',2).should == 'Achsen'
         | 
| 43 | 
            +
                FastGettext.n_('cars.axis',2).should == 'Achsen'
         | 
| 44 | 
            +
                FastGettext.n_('cars.axis',1).should == 'Achse'
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              it "can be used to do wanky pluralisation rules" do
         | 
| 48 | 
            +
                FastGettext.stub!(:current_repository).and_return @rep
         | 
| 49 | 
            +
                4.times do |i|
         | 
| 50 | 
            +
                  @rep.stub!(:pluralisation_rule).and_return lambda{i}
         | 
| 51 | 
            +
                  FastGettext.n_('cars.silly',1).should == i.to_s
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
              it "can use custom pluraliztion rules" do
         | 
| 56 | 
            +
                FastGettext.locale = 'en'
         | 
| 57 | 
            +
                {0 => 0, 1 => 1, 2 => 2, 3 => 0}.each do |input, expected|
         | 
| 58 | 
            +
                  @rep.pluralisation_rule.call(input).should == expected
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
              end
         | 
| 61 | 
            +
            end
         | 
| @@ -0,0 +1,34 @@ | |
| 1 | 
            +
            current_folder = File.dirname(__FILE__)
         | 
| 2 | 
            +
            require File.join(current_folder,'..','spec_helper')
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module FastGettext
         | 
| 5 | 
            +
              module TranslationRepository
         | 
| 6 | 
            +
                class Dummy
         | 
| 7 | 
            +
                  attr_accessor :name, :options
         | 
| 8 | 
            +
                  def initialize(name, options)
         | 
| 9 | 
            +
                    @name = name
         | 
| 10 | 
            +
                    @options = options
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
            end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            describe FastGettext::TranslationRepository do
         | 
| 17 | 
            +
              describe "build" do
         | 
| 18 | 
            +
                it "auto requires class by default" do
         | 
| 19 | 
            +
                  lambda { FastGettext::TranslationRepository.build('xx', { :type => 'invalid'}) }.should raise_error(LoadError)
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                it "can have auto-require disabled" do
         | 
| 23 | 
            +
                  FastGettext::TranslationRepository.build('xx', { :type => 'dummy' })
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                it "makes a new repository" do
         | 
| 27 | 
            +
                  options = { :type => 'dummy', :external => true }
         | 
| 28 | 
            +
                  repo = FastGettext::TranslationRepository.build('xx', options)
         | 
| 29 | 
            +
                  repo.class.should == FastGettext::TranslationRepository::Dummy
         | 
| 30 | 
            +
                  repo.name.should == 'xx'
         | 
| 31 | 
            +
                  repo.options.should == options
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
            end
         | 
| @@ -1,9 +1,9 @@ | |
| 1 1 | 
             
            current_folder = File.dirname(__FILE__)
         | 
| 2 2 | 
             
            require File.join(current_folder,'..','spec_helper')
         | 
| 3 3 |  | 
| 4 | 
            -
            include FastGettext::Translation
         | 
| 5 | 
            -
             | 
| 6 4 | 
             
            describe FastGettext::Translation do
         | 
| 5 | 
            +
              include FastGettext::Translation
         | 
| 6 | 
            +
             | 
| 7 7 | 
             
              before do
         | 
| 8 8 | 
             
                default_setup
         | 
| 9 9 | 
             
              end
         | 
| @@ -107,11 +107,11 @@ describe FastGettext::Translation do | |
| 107 107 | 
             
                  before do
         | 
| 108 108 | 
             
                    FastGettext.translation_repositories.replace({})
         | 
| 109 109 | 
             
                    #singular cache keys
         | 
| 110 | 
            -
                    current_cache['xxx'] = '1'
         | 
| 110 | 
            +
                    FastGettext.current_cache['xxx'] = '1'
         | 
| 111 111 |  | 
| 112 112 | 
             
                    #plural cache keys
         | 
| 113 | 
            -
                    current_cache['||||xxx'] = ['1','2']
         | 
| 114 | 
            -
                    current_cache['||||xxx||||yyy'] = ['1','2']
         | 
| 113 | 
            +
                    FastGettext.current_cache['||||xxx'] = ['1','2']
         | 
| 114 | 
            +
                    FastGettext.current_cache['||||xxx||||yyy'] = ['1','2']
         | 
| 115 115 | 
             
                  end
         | 
| 116 116 |  | 
| 117 117 | 
             
                  it "uses the cache when translating with _" do
         | 
    
        data/spec/fast_gettext_spec.rb
    CHANGED
    
    
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            de:
         | 
| 2 | 
            +
              simple: einfach
         | 
| 3 | 
            +
              date:
         | 
| 4 | 
            +
                relative: "vor %{relative_time}"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              cars:
         | 
| 7 | 
            +
                axis:
         | 
| 8 | 
            +
                  one: "Achse"
         | 
| 9 | 
            +
                  other: "Achsen"
         | 
| 10 | 
            +
                silly:
         | 
| 11 | 
            +
                  one: '0'
         | 
| 12 | 
            +
                  other: '1'
         | 
| 13 | 
            +
                  plural2: '2'
         | 
| 14 | 
            +
                  plural3: '3'
         | 
| 15 | 
            +
                model: "Modell"
         | 
| 16 | 
            +
                wheel_count: "Räderzahl"
         | 
| 17 | 
            +
                created: "Erstellt"
         | 
| 18 | 
            +
                month: "Monat"
         | 
| 19 | 
            +
                car: "Auto"
         | 
| 20 | 
            +
                messages:
         | 
| 21 | 
            +
                  created: "Auto wurde erfolgreich gespeichert"
         | 
| 22 | 
            +
                  updated: "Auto wurde erfolgreich aktualisiert"
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              test_log:
         | 
| 25 | 
            +
                phrases: "Dies ist eine dynamische Übersetzung, die durch gettext_test_log gefunden wurde!"
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            en:
         | 
| 2 | 
            +
              pluralisation_rule: n<3?n:0
         | 
| 3 | 
            +
              simple: easy
         | 
| 4 | 
            +
              date:
         | 
| 5 | 
            +
                relative: "%{relative_time} ago"
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              cars:
         | 
| 8 | 
            +
                axis:
         | 
| 9 | 
            +
                  one: "Axis"
         | 
| 10 | 
            +
                  other: "Axis"
         | 
| 11 | 
            +
                model: "Model"
         | 
| 12 | 
            +
                wheel_count: "Wheels count"
         | 
| 13 | 
            +
                created: "Created"
         | 
| 14 | 
            +
                month: "Month"
         | 
| 15 | 
            +
                car: "Car"
         | 
| 16 | 
            +
                messages:
         | 
| 17 | 
            +
                  created: "Car was successfully created."
         | 
| 18 | 
            +
                  updated: "Car was successfully updated."
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              test_log:
         | 
| 21 | 
            +
                phrases: "this is a dynamic translation which was found thorugh gettext_test_log!"
         | 
    
        data/spec/vendor/string_spec.rb
    CHANGED
    
    | @@ -9,7 +9,7 @@ describe String do | |
| 9 9 |  | 
| 10 10 | 
             
              describe "old % style replacement" do
         | 
| 11 11 | 
             
                it "substitudes using % + Hash" do
         | 
| 12 | 
            -
                  "x%{name}y" %{:name=>'a'}.should == 'xay'
         | 
| 12 | 
            +
                  ("x%{name}y" %{:name=>'a'}).should == 'xay'
         | 
| 13 13 | 
             
                end
         | 
| 14 14 |  | 
| 15 15 | 
             
                it "does not substitute after %%" do
         | 
| @@ -20,20 +20,22 @@ describe String do | |
| 20 20 | 
             
                  ("abc" % {:x=>1}).should == 'abc'
         | 
| 21 21 | 
             
                end
         | 
| 22 22 |  | 
| 23 | 
            -
                 | 
| 24 | 
            -
                   | 
| 25 | 
            -
             | 
| 23 | 
            +
                if RUBY_VERSION < '1.9' # this does not longer work in 1.9, use :"my weird string"
         | 
| 24 | 
            +
                  it "sustitutes strings" do
         | 
| 25 | 
            +
                    ("a%{b}c" % {'b'=>1}).should == 'a1c'
         | 
| 26 | 
            +
                  end
         | 
| 26 27 |  | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 28 | 
            +
                  it "sustitutes strings with -" do
         | 
| 29 | 
            +
                    ("a%{b-a}c" % {'b-a'=>1}).should == 'a1c'
         | 
| 30 | 
            +
                  end
         | 
| 30 31 |  | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 32 | 
            +
                  it "sustitutes string with ." do
         | 
| 33 | 
            +
                    ("a%{b.a}c" % {'b.a'=>1}).should == 'a1c'
         | 
| 34 | 
            +
                  end
         | 
| 34 35 |  | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 36 | 
            +
                  it "sustitutes string with number" do
         | 
| 37 | 
            +
                    ("a%{1}c" % {'1'=>1}).should == 'a1c'
         | 
| 38 | 
            +
                  end
         | 
| 37 39 | 
             
                end
         | 
| 38 40 | 
             
              end
         | 
| 39 41 |  | 
| @@ -42,12 +44,14 @@ describe String do | |
| 42 44 | 
             
                  ("x%sy%s" % ['a','b']).should == 'xayb'
         | 
| 43 45 | 
             
                end
         | 
| 44 46 |  | 
| 45 | 
            -
                 | 
| 46 | 
            -
                   | 
| 47 | 
            -
             | 
| 47 | 
            +
                if RUBY_VERSION < '1.9' # this does not longer work in 1.9, ArgumentError is raised
         | 
| 48 | 
            +
                  it "does not remove %{} style replacements" do
         | 
| 49 | 
            +
                    ("%{name} x%sy%s" % ['a','b']).should == '%{name} xayb'
         | 
| 50 | 
            +
                  end
         | 
| 48 51 |  | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 52 | 
            +
                  it "does not remove %<> style replacement" do
         | 
| 53 | 
            +
                     ("%{name} %<num>f %s" % ['x']).should == "%{name} %<num>f x"
         | 
| 54 | 
            +
                  end
         | 
| 51 55 | 
             
                end
         | 
| 52 56 | 
             
              end
         | 
| 53 57 |  | 
| @@ -64,4 +68,10 @@ describe String do | |
| 64 68 | 
             
                  ("%<num>#b" % {:num => 1}).should == "0b1"
         | 
| 65 69 | 
             
                end
         | 
| 66 70 | 
             
              end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
              if RUBY_VERSION >= '1.9'
         | 
| 73 | 
            +
                it "does not raise when key was not found" do
         | 
| 74 | 
            +
                  ("%{typo} xxx" % {:something=>1}).should == "%{typo} xxx"
         | 
| 75 | 
            +
                end
         | 
| 76 | 
            +
              end
         | 
| 67 77 | 
             
            end
         | 
    
        data/vendor/string.rb
    CHANGED
    
    | @@ -56,3 +56,19 @@ rescue ArgumentError | |
| 56 56 | 
             
                end
         | 
| 57 57 | 
             
              end
         | 
| 58 58 | 
             
            end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
            # 1.9.1 if you misspell a %{key} your whole page would blow up, no thanks...
         | 
| 61 | 
            +
            begin
         | 
| 62 | 
            +
              ("%{b}" % {:a=>'b'})
         | 
| 63 | 
            +
            rescue KeyError
         | 
| 64 | 
            +
              class String
         | 
| 65 | 
            +
                alias :_fast_gettext_old_format_m :%
         | 
| 66 | 
            +
                def %(*args)
         | 
| 67 | 
            +
                  begin
         | 
| 68 | 
            +
                    _fast_gettext_old_format_m(*args)
         | 
| 69 | 
            +
                  rescue KeyError
         | 
| 70 | 
            +
                    self
         | 
| 71 | 
            +
                  end
         | 
| 72 | 
            +
                end
         | 
| 73 | 
            +
              end
         | 
| 74 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: fast_gettext
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.5.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors: 
         | 
| 7 7 | 
             
            - Michael Grosser
         | 
| @@ -9,7 +9,7 @@ autorequire: | |
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 11 |  | 
| 12 | 
            -
            date:  | 
| 12 | 
            +
            date: 2010-01-30 00:00:00 +01:00
         | 
| 13 13 | 
             
            default_executable: 
         | 
| 14 14 | 
             
            dependencies: []
         | 
| 15 15 |  | 
| @@ -55,7 +55,7 @@ files: | |
| 55 55 | 
             
            - lib/fast_gettext/translation_repository/logger.rb
         | 
| 56 56 | 
             
            - lib/fast_gettext/translation_repository/mo.rb
         | 
| 57 57 | 
             
            - lib/fast_gettext/translation_repository/po.rb
         | 
| 58 | 
            -
            -  | 
| 58 | 
            +
            - lib/fast_gettext/translation_repository/yaml.rb
         | 
| 59 59 | 
             
            - spec/aa_unconfigued_spec.rb
         | 
| 60 60 | 
             
            - spec/fast_gettext/mo_file_spec.rb
         | 
| 61 61 | 
             
            - spec/fast_gettext/storage_spec.rb
         | 
| @@ -65,6 +65,8 @@ files: | |
| 65 65 | 
             
            - spec/fast_gettext/translation_repository/logger_spec.rb
         | 
| 66 66 | 
             
            - spec/fast_gettext/translation_repository/mo_spec.rb
         | 
| 67 67 | 
             
            - spec/fast_gettext/translation_repository/po_spec.rb
         | 
| 68 | 
            +
            - spec/fast_gettext/translation_repository/yaml_spec.rb
         | 
| 69 | 
            +
            - spec/fast_gettext/translation_repository_spec.rb
         | 
| 68 70 | 
             
            - spec/fast_gettext/translation_spec.rb
         | 
| 69 71 | 
             
            - spec/fast_gettext_spec.rb
         | 
| 70 72 | 
             
            - spec/locale/de/LC_MESSAGES/test.mo
         | 
| @@ -73,6 +75,9 @@ files: | |
| 73 75 | 
             
            - spec/locale/en/LC_MESSAGES/test.mo
         | 
| 74 76 | 
             
            - spec/locale/en/plural_test.po
         | 
| 75 77 | 
             
            - spec/locale/en/test.po
         | 
| 78 | 
            +
            - spec/locale/yaml/de.yml
         | 
| 79 | 
            +
            - spec/locale/yaml/en.yml
         | 
| 80 | 
            +
            - spec/locale/yaml/notfound.yml
         | 
| 76 81 | 
             
            - spec/spec_helper.rb
         | 
| 77 82 | 
             
            - spec/vendor/fake_load_path/iconv.rb
         | 
| 78 83 | 
             
            - spec/vendor/iconv_spec.rb
         | 
| @@ -106,26 +111,28 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 106 111 | 
             
              version: 
         | 
| 107 112 | 
             
            requirements: []
         | 
| 108 113 |  | 
| 109 | 
            -
            rubyforge_project:  | 
| 114 | 
            +
            rubyforge_project: 
         | 
| 110 115 | 
             
            rubygems_version: 1.3.5
         | 
| 111 116 | 
             
            signing_key: 
         | 
| 112 117 | 
             
            specification_version: 3
         | 
| 113 118 | 
             
            summary: A simple, fast and threadsafe implementation of GetText
         | 
| 114 119 | 
             
            test_files: 
         | 
| 115 | 
            -
            - spec/fast_gettext_spec.rb
         | 
| 116 120 | 
             
            - spec/spec_helper.rb
         | 
| 117 | 
            -
            - spec/ | 
| 118 | 
            -
            - spec/ | 
| 119 | 
            -
            - spec/ | 
| 121 | 
            +
            - spec/aa_unconfigued_spec.rb
         | 
| 122 | 
            +
            - spec/vendor/fake_load_path/iconv.rb
         | 
| 123 | 
            +
            - spec/vendor/iconv_spec.rb
         | 
| 124 | 
            +
            - spec/vendor/string_spec.rb
         | 
| 125 | 
            +
            - spec/fast_gettext_spec.rb
         | 
| 126 | 
            +
            - spec/fast_gettext/translation_repository_spec.rb
         | 
| 127 | 
            +
            - spec/fast_gettext/translation_repository/mo_spec.rb
         | 
| 128 | 
            +
            - spec/fast_gettext/translation_repository/db_spec.rb
         | 
| 129 | 
            +
            - spec/fast_gettext/translation_repository/yaml_spec.rb
         | 
| 120 130 | 
             
            - spec/fast_gettext/translation_repository/logger_spec.rb
         | 
| 121 131 | 
             
            - spec/fast_gettext/translation_repository/base_spec.rb
         | 
| 122 132 | 
             
            - spec/fast_gettext/translation_repository/po_spec.rb
         | 
| 123 | 
            -
            - spec/fast_gettext/translation_repository/ | 
| 124 | 
            -
            - spec/fast_gettext/ | 
| 133 | 
            +
            - spec/fast_gettext/translation_repository/chain_spec.rb
         | 
| 134 | 
            +
            - spec/fast_gettext/translation_spec.rb
         | 
| 125 135 | 
             
            - spec/fast_gettext/mo_file_spec.rb
         | 
| 126 | 
            -
            - spec/ | 
| 127 | 
            -
            - spec/vendor/iconv_spec.rb
         | 
| 128 | 
            -
            - spec/vendor/fake_load_path/iconv.rb
         | 
| 129 | 
            -
            - spec/vendor/string_spec.rb
         | 
| 130 | 
            -
            - examples/db/migration.rb
         | 
| 136 | 
            +
            - spec/fast_gettext/storage_spec.rb
         | 
| 131 137 | 
             
            - examples/missing_translation_logger.rb
         | 
| 138 | 
            +
            - examples/db/migration.rb
         | 
    
        data/rdoc/README.rdoc
    DELETED
    
    | @@ -1 +0,0 @@ | |
| 1 | 
            -
            documentation is at http://github.com/grosser/fast_gettext
         |