r18n-rails 4.0.0 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog.md +383 -0
  3. data/README.md +73 -59
  4. data/lib/r18n-rails.rb +32 -20
  5. data/lib/r18n-rails/filters.rb +2 -2
  6. data/lib/r18n-rails/helpers.rb +5 -6
  7. data/lib/r18n-rails/{controller.rb → hooks_helper.rb} +39 -15
  8. data/lib/r18n-rails/translated.rb +5 -4
  9. data/lib/r18n-rails/version.rb +7 -0
  10. metadata +217 -69
  11. data/.rspec +0 -1
  12. data/Rakefile +0 -15
  13. data/r18n-rails.gemspec +0 -32
  14. data/spec/app/app/controllers/application_controller.rb +0 -5
  15. data/spec/app/app/controllers/test_controller.rb +0 -50
  16. data/spec/app/app/i18n/en.yml +0 -6
  17. data/spec/app/app/i18n/filters.rb +0 -5
  18. data/spec/app/app/i18n/ru.yml +0 -2
  19. data/spec/app/app/mailers/test_mailer.rb +0 -9
  20. data/spec/app/app/models/post.rb +0 -6
  21. data/spec/app/app/views/test/format.html.erb +0 -1
  22. data/spec/app/app/views/test/helpers.html.erb +0 -4
  23. data/spec/app/app/views/test/safe.html.erb +0 -1
  24. data/spec/app/app/views/test_mailer/test.text.erb +0 -3
  25. data/spec/app/config.ru +0 -6
  26. data/spec/app/config/application.rb +0 -28
  27. data/spec/app/config/boot.rb +0 -6
  28. data/spec/app/config/environment.rb +0 -7
  29. data/spec/app/config/environments/test.rb +0 -14
  30. data/spec/app/config/initializers/r18n.rb +0 -4
  31. data/spec/app/config/initializers/secret_token.rb +0 -3
  32. data/spec/app/config/locales/en.yml +0 -7
  33. data/spec/app/config/locales/ru.yml +0 -20
  34. data/spec/app/config/routes.rb +0 -15
  35. data/spec/app/db/migrate/20091218123631_create_posts.rb +0 -14
  36. data/spec/app/db/schema.rb +0 -22
  37. data/spec/rails_spec.rb +0 -183
  38. data/spec/spec_helper.rb +0 -10
data/.rspec DELETED
@@ -1 +0,0 @@
1
- --format documentation --colour --warnings --require spec_helper
data/Rakefile DELETED
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rubygems'
4
-
5
- require 'bundler/setup'
6
- Bundler::GemHelper.install_tasks
7
-
8
- require 'rspec/core/rake_task'
9
- RSpec::Core::RakeTask.new
10
- task default: :spec
11
-
12
- task :clobber_package do
13
- rm_rf 'pkg'
14
- end
15
- task clobber: [:clobber_package]
data/r18n-rails.gemspec DELETED
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../r18n-core/lib/r18n-core/version'
4
-
5
- Gem::Specification.new do |s|
6
- s.platform = Gem::Platform::RUBY
7
- s.name = 'r18n-rails'
8
- s.version = R18n::VERSION.dup
9
- s.date = Time.now.strftime('%Y-%m-%d')
10
-
11
- s.summary = 'R18n for Rails'
12
- s.description = <<-DESC
13
- Out-of-box R18n support for Ruby on Rails.
14
- It is just a wrapper for R18n Rails API and R18n core libraries.
15
- R18n has nice Ruby-style syntax, filters, flexible locales, custom loaders,
16
- translation support for any classes, time and number localization, several
17
- user language support, agnostic core package with out-of-box support for
18
- Rails, Sinatra and desktop applications.
19
- DESC
20
-
21
- s.files = `git ls-files`.split("\n")
22
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
- s.extra_rdoc_files = ['README.md', 'LICENSE']
24
- s.require_path = 'lib'
25
-
26
- s.author = 'Andrey Sitnik'
27
- s.email = 'andrey@sitnik.ru'
28
- s.homepage = 'https://github.com/r18n/r18n/tree/master/r18n-rails'
29
- s.license = 'LGPL-3.0'
30
-
31
- s.add_dependency 'r18n-rails-api', "= #{R18n::VERSION}"
32
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ApplicationController < ActionController::Base
4
- protect_from_forgery
5
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class TestController < ApplicationController
4
- layout false
5
-
6
- before_action :reload_r18n, only: :filter
7
-
8
- def locales
9
- render plain: R18n.get.locales.map(&:code).join(', ')
10
- end
11
-
12
- def translations
13
- render plain: "R18n: #{R18n.get.r18n.translations}. " \
14
- "Rails I18n: #{R18n.get.i18n.translations}"
15
- end
16
-
17
- def available
18
- render plain: R18n.get.available_locales.map(&:code).sort.join(' ')
19
- end
20
-
21
- def helpers
22
- @from_controller = r18n.user.name
23
- render
24
- end
25
-
26
- def untranslated
27
- render plain: R18n.get.user.not.exists.to_s
28
- end
29
-
30
- def controller
31
- render plain: "#{t.user.name} #{r18n.t.user.name} #{t('user.name')}"
32
- end
33
-
34
- def time
35
- render plain:
36
- l(Time.at(0).utc) + "\n" + l(Time.at(0).utc, format: :short)
37
- end
38
-
39
- def human_time
40
- render plain: l(Time.now, :human)
41
- end
42
-
43
- def filter
44
- render plain: t.ruby
45
- end
46
-
47
- def format
48
- render
49
- end
50
- end
@@ -1,6 +0,0 @@
1
- r18n:
2
- translations: supported
3
- ruby: !!rails
4
- Ruby
5
- html:
6
- <b>
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- R18n::Filters.add('rails', :rails_custom_filter) do |content, _config, *_params|
4
- content.gsub('Ruby', 'Rails')
5
- end
@@ -1,2 +0,0 @@
1
- user:
2
- name: Имя
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class TestMailer < ActionMailer::Base
4
- default from: 'from@example.com'
5
-
6
- def test
7
- mail(to: 'to@example.com')
8
- end
9
- end
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Post < ActiveRecord::Base
4
- include R18n::Translated
5
- translations :title
6
- end
@@ -1 +0,0 @@
1
- <%= number_to_currency(1000.12345, precision: 1) %>
@@ -1,4 +0,0 @@
1
- <%= @from_controller %>
2
- <%= r18n.user.name %>
3
- <%= t 'user.name' %>
4
- <%= t.user.name %>
@@ -1 +0,0 @@
1
- <%= t.html %> <%= t.user.no_tr %>
@@ -1,3 +0,0 @@
1
- <%= r18n.user.name %>
2
- <%= t 'user.name' %>
3
- <%= t.user.name %>
data/spec/app/config.ru DELETED
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # This file is used by Rack-based servers to start the application.
4
-
5
- require_relative 'config/environment'
6
- run App::Application
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'boot'
4
-
5
- require 'active_record/railtie'
6
- require 'action_controller/railtie'
7
- require 'action_mailer/railtie'
8
- require 'rails/test_unit/railtie'
9
-
10
- if defined?(Bundler)
11
- Bundler.require(*Rails.groups(assets: %w[development test]))
12
- end
13
-
14
- module App
15
- class Application < Rails::Application
16
- config.time_zone = 'UTC'
17
- config.i18n.default_locale = :ru
18
- config.encoding = 'utf-8'
19
-
20
- config.active_record.sqlite3.represent_boolean_as_integer = true
21
-
22
- def config.database_configuration
23
- sqlite = { 'adapter' => 'sqlite3', 'database' => ':memory:' }
24
- sqlite['adapter'] = 'jdbcsqlite3' if RUBY_PLATFORM == 'java'
25
- { 'development' => sqlite, 'test' => sqlite, 'production' => sqlite }
26
- end
27
- end
28
- end
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Set up gems listed in the Gemfile.
4
- ENV['BUNDLE_GEMFILE'] ||= File.join(__dir__, '..', 'Gemfile')
5
-
6
- require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Load the rails application
4
- require_relative 'application'
5
-
6
- # Initialize the rails application
7
- App::Application.initialize!
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- App::Application.configure do
4
- config.cache_classes = true
5
- config.serve_static_files = true
6
- config.static_cache_control = 'public, max-age=3600'
7
- config.eager_load = false
8
- config.consider_all_requests_local = true
9
- config.action_controller.perform_caching = false
10
- config.action_dispatch.show_exceptions = false
11
- config.action_controller.allow_forgery_protection = false
12
- config.active_support.deprecation = :stderr
13
- config.action_mailer.delivery_method = :test
14
- end
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Fix R18n Rails require, because it doesn't require in global Gemfile.
4
- require 'r18n-rails'
@@ -1,3 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- App::Application.config.secret_key_base = 'test'
@@ -1,7 +0,0 @@
1
- en:
2
- r18n:
3
- translations: unsupported
4
- i18n:
5
- translations: supported
6
- user:
7
- name: Name
@@ -1,20 +0,0 @@
1
- ru:
2
- number:
3
- format:
4
- delimiter: ' '
5
- precision: 3
6
- separator: ','
7
- significant: false
8
- strip_insignificant_zeros: false
9
- precision:
10
- format:
11
- delimiter: ' '
12
- currency:
13
- format:
14
- delimiter: ' '
15
- format: '%n %u'
16
- precision: 2
17
- separator: ','
18
- significant: false
19
- strip_insignificant_zeros: false
20
- unit: руб.
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- App::Application.routes.draw do
4
- get '/locales', to: 'test#locales'
5
- get '/translations', to: 'test#translations'
6
- get '/available', to: 'test#available'
7
- get '/helpers', to: 'test#helpers'
8
- get '/untranslated', to: 'test#untranslated'
9
- get '/controller', to: 'test#controller'
10
- get '/time', to: 'test#time'
11
- get '/human_time', to: 'test#human_time'
12
- get '/filter', to: 'test#filter'
13
- get '/format', to: 'test#format'
14
- get '/safe', to: 'test#safe'
15
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class CreatePosts < ActiveRecord::Migration
4
- def self.up
5
- create_table :posts do |t|
6
- t.string :title_en
7
- t.string :title_ru
8
- end
9
- end
10
-
11
- def self.down
12
- drop_table :posts
13
- end
14
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # This file is auto-generated from the current state of the database. Instead
4
- # of editing this file, please use the migrations feature of Active Record to
5
- # incrementally modify your database, and then regenerate
6
- # this schema definition.
7
- #
8
- # Note that this schema.rb definition is the authoritative source for your
9
- # database schema. If you need to create the application database on another
10
- # system, you should be using db:schema:load, not running all the migrations
11
- # from scratch. The latter is a flawed and unsustainable approach
12
- # (the more migrations you'll amass, the slower it'll run
13
- # and the greater likelihood for issues).
14
- #
15
- # It's strongly recommended to check this file into your version control system.
16
-
17
- ActiveRecord::Schema.define(version: 20091218123631) do
18
- create_table 'posts', force: true do |t|
19
- t.string 'title_en'
20
- t.string 'title_ru'
21
- end
22
- end
data/spec/rails_spec.rb DELETED
@@ -1,183 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe TestController, type: :controller do
4
- render_views
5
-
6
- it 'uses default locale' do
7
- get :locales
8
- expect(response).to have_http_status(200)
9
- expect(response.body).to eq 'ru'
10
- end
11
-
12
- it 'gets locale from param' do
13
- get :locales, params: { locale: 'ru' }
14
- expect(response).to have_http_status(200)
15
- expect(response.body).to eq 'ru, en'
16
- end
17
-
18
- it 'gets locale from session' do
19
- get :locales, session: { locale: 'ru' }
20
- expect(response).to have_http_status(200)
21
- expect(response.body).to eq 'ru, en'
22
- end
23
-
24
- describe 'locales from http' do
25
- it 'gets from regular locales' do
26
- request.env['HTTP_ACCEPT_LANGUAGE'] = 'ru,fr;q=0.9'
27
- get :locales
28
- expect(response).to have_http_status(200)
29
- expect(response.body).to eq 'ru, fr, en'
30
- end
31
-
32
- it 'gets from wildcard' do
33
- request.env['HTTP_ACCEPT_LANGUAGE'] = '*'
34
- get :locales
35
- expect(response).to have_http_status(200)
36
- expect(response.body).to eq 'ru'
37
- end
38
-
39
- it 'gets from regular locales with wildcard' do
40
- request.env['HTTP_ACCEPT_LANGUAGE'] = 'ru, fr;q=0.9, *;q=0.5'
41
- get :locales
42
- expect(response).to have_http_status(200)
43
- expect(response.body).to eq 'ru, fr, en'
44
- end
45
- end
46
-
47
- it 'loads translations' do
48
- get :translations, params: { locale: 'en' }
49
- expect(response).to have_http_status(200)
50
- expect(response.body).to eq 'R18n: supported. Rails I18n: supported'
51
- end
52
-
53
- it 'returns available translations' do
54
- get :available
55
- expect(response).to have_http_status(200)
56
- expect(response.body).to eq 'en ru'
57
- end
58
-
59
- it 'adds helpers' do
60
- get :helpers, params: { locale: 'en' }
61
- expect(response).to have_http_status(200)
62
- expect(response.body).to eq "Name\nName\nName\nName\n"
63
- end
64
-
65
- it 'formats untranslated' do
66
- get :untranslated
67
- expect(response).to have_http_status(200)
68
- expect(response.body).to eq(
69
- 'user.<span style="color: red">[not.exists]</span>'
70
- )
71
- end
72
-
73
- it 'adds methods to controller' do
74
- get :controller, params: { locale: 'en' }
75
- expect(response).to have_http_status(200)
76
- expect(response.body).to eq 'Name Name Name'
77
- end
78
-
79
- it 'localizes time by Rails I18n' do
80
- get :time, params: { locale: 'en' }
81
- expect(response).to have_http_status(200)
82
- expect(response.body).to eq "Thu, 01 Jan 1970 00:00:00 +0000\n01 Jan 00:00"
83
- end
84
-
85
- it 'localizes time by R18n' do
86
- get :human_time, params: { locale: 'en' }
87
- expect(response).to have_http_status(200)
88
- expect(response.body).to eq 'now'
89
- end
90
-
91
- it 'translates models' do
92
- ActiveRecord::Schema.verbose = false
93
- ActiveRecord::Schema.define(version: 20_091_218_130_034) do
94
- create_table 'posts', force: true do |t|
95
- t.string 'title_en'
96
- t.string 'title_ru'
97
- end
98
- end
99
-
100
- expect(Post.unlocalized_getters(:title)).to eq(
101
- 'ru' => 'title_ru',
102
- 'en' => 'title_en'
103
- )
104
- expect(Post.unlocalized_setters(:title)).to eq(
105
- 'ru' => 'title_ru=',
106
- 'en' => 'title_en='
107
- )
108
-
109
- @post = Post.new
110
- @post.title_en = 'Record'
111
-
112
- R18n.set('ru')
113
- expect(@post.title).to eq 'Record'
114
-
115
- @post.title = 'Запись'
116
- expect(@post.title_ru).to eq 'Запись'
117
- expect(@post.title_en).to eq 'Record'
118
- expect(@post.title).to eq 'Запись'
119
- end
120
-
121
- it 'sets default places' do
122
- expect(R18n.default_places).to eq([
123
- Rails.root.join('app/i18n'), R18n::Loader::Rails.new
124
- ])
125
-
126
- R18n.set('en')
127
- expect(R18n.get.user.name).to eq 'Name'
128
- end
129
-
130
- it 'translates mails' do
131
- R18n.set('en')
132
- email = TestMailer.test.deliver_now
133
- expect(email.body.to_s).to eq "Name\nName\nName\n"
134
- end
135
-
136
- it 'reloads filters from app directory' do
137
- get :filter, params: { locale: 'en' }
138
- expect(response).to have_http_status(200)
139
- expect(response.body).to eq 'Rails'
140
- expect(R18n::Rails::Filters.loaded).to eq [:rails_custom_filter]
141
-
142
- R18n::Filters.defined[:rails_custom_filter].block = proc { 'No' }
143
- get :filter, params: { locale: 'en' }
144
-
145
- expect(response).to have_http_status(200)
146
- expect(response.body).to eq 'Rails'
147
- end
148
-
149
- it 'escapes html inside R18n' do
150
- get :safe, params: { locale: 'en' }
151
- expect(response).to have_http_status(200)
152
- expect(response.body).to eq(
153
- "<b> user.<span style=\"color: red\">[no_tr]</span>\n"
154
- )
155
- end
156
-
157
- it 'works with Rails build-in herlpers' do
158
- get :format
159
- expect(response).to have_http_status(200)
160
- expect(response.body).to eq "1 000,1 руб.\n"
161
- end
162
-
163
- it 'caches I18n object' do
164
- R18n.clear_cache!
165
-
166
- get :translations
167
- expect(R18n.cache.keys.length).to eq 1
168
-
169
- get :translations
170
- expect(R18n.cache.keys.length).to eq 1
171
-
172
- get :translations
173
- request.env['HTTP_ACCEPT_LANGUAGE'] = 'ru,fr;q=0.9'
174
- expect(R18n.cache.keys.length).to eq 1
175
-
176
- get :translations, params: { locale: 'en' }
177
- expect(R18n.cache.keys.length).to eq 2
178
- end
179
-
180
- it 'parameterizes strigns' do
181
- expect('One two три'.parameterize).to eq 'one-two'
182
- end
183
- end