r18n-rails 2.2.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rspec +1 -1
- data/Rakefile +5 -3
- data/lib/r18n-rails.rb +28 -28
- data/lib/r18n-rails/controller.rb +22 -20
- data/lib/r18n-rails/filters.rb +22 -21
- data/lib/r18n-rails/helpers.rb +20 -20
- data/lib/r18n-rails/translated.rb +18 -18
- data/r18n-rails.gemspec +5 -4
- data/spec/app/app/controllers/application_controller.rb +2 -0
- data/spec/app/app/controllers/test_controller.rb +7 -5
- data/spec/app/app/i18n/filters.rb +3 -1
- data/spec/app/app/mailers/test_mailer.rb +2 -0
- data/spec/app/app/models/post.rb +2 -0
- data/spec/app/config.ru +3 -1
- data/spec/app/config/application.rb +9 -7
- data/spec/app/config/boot.rb +4 -2
- data/spec/app/config/environment.rb +3 -1
- data/spec/app/config/environments/test.rb +3 -1
- data/spec/app/config/initializers/r18n.rb +2 -0
- data/spec/app/config/initializers/secret_token.rb +2 -0
- data/spec/app/config/routes.rb +2 -0
- data/spec/app/db/migrate/20091218123631_create_posts.rb +2 -0
- data/spec/app/db/schema.rb +10 -8
- data/spec/rails_spec.rb +35 -32
- data/spec/spec_helper.rb +5 -3
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3f89d4df26a1849c69bff90ed718823bf56c79bc0312544950bf3cee3a2d2bc3
|
4
|
+
data.tar.gz: 245b26a363d89724b14586b375a252e3ac0fb7da2a01b93b142ef19b2d3f8658
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6bc6137b61b9390d4ae754ffe413a415bc79799a1184f8bc2dc4288cada211d32e5a28881950919e4fb17ffc70f13d09cadb5f34b93c597eb14204d78bb20a7
|
7
|
+
data.tar.gz: 1a82c0ff9431801aadd5c373adba5edf88e888fd096afae43359c1b264ed606d787089d4a4aeb9e65fdf9bf180b0ded7b34ab0278d1d895825ae52ce47cabd93
|
data/.rspec
CHANGED
@@ -1 +1 @@
|
|
1
|
-
--format documentation --colour
|
1
|
+
--format documentation --colour --warnings --require spec_helper
|
data/Rakefile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rubygems'
|
2
4
|
|
3
5
|
require 'bundler/setup'
|
@@ -5,9 +7,9 @@ Bundler::GemHelper.install_tasks
|
|
5
7
|
|
6
8
|
require 'rspec/core/rake_task'
|
7
9
|
RSpec::Core::RakeTask.new
|
8
|
-
task :
|
10
|
+
task default: :spec
|
9
11
|
|
10
12
|
task :clobber_package do
|
11
|
-
|
13
|
+
rm_rf 'pkg'
|
12
14
|
end
|
13
|
-
task :
|
15
|
+
task clobber: [:clobber_package]
|
data/lib/r18n-rails.rb
CHANGED
@@ -1,31 +1,29 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# R18n support for Rails.
|
4
|
+
#
|
5
|
+
# Copyright (C) 2009 Andrey “A.I.” Sitnik <andrey@sitnik.ru>
|
6
|
+
#
|
7
|
+
# This program is free software: you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU Lesser General Public License as published by
|
9
|
+
# the Free Software Foundation, either version 3 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU Lesser General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU Lesser General Public License
|
18
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
3
19
|
|
4
|
-
Copyright (C) 2009 Andrey “A.I.” Sitnik <andrey@sitnik.ru>
|
5
|
-
|
6
|
-
This program is free software: you can redistribute it and/or modify
|
7
|
-
it under the terms of the GNU Lesser General Public License as published by
|
8
|
-
the Free Software Foundation, either version 3 of the License, or
|
9
|
-
(at your option) any later version.
|
10
|
-
|
11
|
-
This program is distributed in the hope that it will be useful,
|
12
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
-
GNU Lesser General Public License for more details.
|
15
|
-
|
16
|
-
You should have received a copy of the GNU Lesser General Public License
|
17
|
-
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
18
|
-
=end
|
19
|
-
|
20
|
-
require 'pathname'
|
21
20
|
require 'r18n-core'
|
22
21
|
require 'r18n-rails-api'
|
23
22
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
require dir + 'filters'
|
23
|
+
require_relative 'r18n-rails/helpers'
|
24
|
+
require_relative 'r18n-rails/controller'
|
25
|
+
require_relative 'r18n-rails/translated'
|
26
|
+
require_relative 'r18n-rails/filters'
|
29
27
|
|
30
28
|
R18n.default_places { [Rails.root.join('app/i18n'), R18n::Loader::Rails.new] }
|
31
29
|
|
@@ -50,10 +48,12 @@ ActiveSupport.on_load(:after_initialize) do
|
|
50
48
|
env = ENV['LANG']
|
51
49
|
env = env.split('.').first if env
|
52
50
|
locale = env || I18n.default_locale.to_s
|
53
|
-
if defined?
|
54
|
-
i18n
|
55
|
-
|
56
|
-
|
51
|
+
if defined?(Rails::Console) && !defined?(Wirble)
|
52
|
+
i18n = R18n::I18n.new(
|
53
|
+
locale, R18n.default_places,
|
54
|
+
off_filters: :untranslated,
|
55
|
+
on_filters: :untranslated_bash
|
56
|
+
)
|
57
57
|
R18n.set(i18n)
|
58
58
|
else
|
59
59
|
R18n.set(locale)
|
@@ -1,21 +1,21 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
the
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Methods and filters to controllers.
|
4
|
+
#
|
5
|
+
# Copyright (C) 2009 Andrey “A.I.” Sitnik <andrey@sitnik.ru>
|
6
|
+
#
|
7
|
+
# This program is free software: you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU Lesser General Public License as published by
|
9
|
+
# the Free Software Foundation, either version 3 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU Lesser General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU Lesser General Public License
|
18
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
19
|
|
20
20
|
require 'r18n-rails-api'
|
21
21
|
|
@@ -38,8 +38,10 @@ module R18n
|
|
38
38
|
locales.insert(0, session[:locale])
|
39
39
|
end
|
40
40
|
|
41
|
-
i18n = R18n::I18n.new(
|
42
|
-
|
41
|
+
i18n = R18n::I18n.new(
|
42
|
+
locales, R18n.default_places,
|
43
|
+
off_filters: :untranslated, on_filters: :untranslated_html
|
44
|
+
)
|
43
45
|
::I18n.locale = i18n.locale.code.to_sym
|
44
46
|
i18n
|
45
47
|
end
|
data/lib/r18n-rails/filters.rb
CHANGED
@@ -1,21 +1,21 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
the
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Load R18n filters from Rails app directory.
|
4
|
+
#
|
5
|
+
# Copyright (C) 2012 Andrey “A.I.” Sitnik <andrey@sitnik.ru>
|
6
|
+
#
|
7
|
+
# This program is free software: you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU Lesser General Public License as published by
|
9
|
+
# the Free Software Foundation, either version 3 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU Lesser General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU Lesser General Public License
|
18
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
19
|
|
20
20
|
module R18n
|
21
21
|
module Rails
|
@@ -28,14 +28,15 @@ module R18n
|
|
28
28
|
# Path to filters. Should be set to `app/i18n`.
|
29
29
|
attr_writer :path
|
30
30
|
def path
|
31
|
-
@path
|
31
|
+
return @path if defined?(@path)
|
32
|
+
::Rails.root.join('app/i18n')
|
32
33
|
end
|
33
34
|
|
34
35
|
# Load all ruby files from `app/i18n` and remember loaded filters.
|
35
36
|
def load!
|
36
|
-
@loaded = R18n::Filters.listen
|
37
|
+
@loaded = R18n::Filters.listen do
|
37
38
|
Pathname.glob(path.join('**/*.rb').to_s) { |i| load i.to_s; }
|
38
|
-
|
39
|
+
end.map(&:name)
|
39
40
|
end
|
40
41
|
|
41
42
|
# Shortcut to call `remove!` and `load!`.
|
data/lib/r18n-rails/helpers.rb
CHANGED
@@ -1,21 +1,21 @@
|
|
1
|
-
|
2
|
-
R18n helpers for Rails.
|
1
|
+
# frozen_string_literal: true
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
3
|
+
# R18n helpers for Rails.
|
4
|
+
#
|
5
|
+
# Copyright (C) 2009 Andrey “A.I.” Sitnik <andrey@sitnik.ru>
|
6
|
+
#
|
7
|
+
# This program is free software: you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU Lesser General Public License as published by
|
9
|
+
# the Free Software Foundation, either version 3 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU Lesser General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU Lesser General Public License
|
18
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
19
|
|
20
20
|
module R18n
|
21
21
|
module Rails
|
@@ -42,7 +42,7 @@ module R18n
|
|
42
42
|
super(*params)
|
43
43
|
end
|
44
44
|
end
|
45
|
-
alias
|
45
|
+
alias translate t
|
46
46
|
|
47
47
|
# Extend +l+ helper to use also R18n syntax.
|
48
48
|
#
|
@@ -50,13 +50,13 @@ module R18n
|
|
50
50
|
# l Time.now, format: :short # Rails I18n style
|
51
51
|
# l Time.now, :human # R18n style
|
52
52
|
def l(obj, *params)
|
53
|
-
if params.empty?
|
53
|
+
if params.empty? || params.first.is_a?(Hash)
|
54
54
|
super(obj, *params)
|
55
55
|
else
|
56
56
|
r18n.l(obj, *params)
|
57
57
|
end
|
58
58
|
end
|
59
|
-
alias
|
59
|
+
alias localize l
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|
@@ -1,27 +1,27 @@
|
|
1
|
-
|
2
|
-
ActiveRecord fix mixin to R18n::Translated.
|
1
|
+
# frozen_string_literal: true
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
3
|
+
# ActiveRecord fix mixin to R18n::Translated.
|
4
|
+
#
|
5
|
+
# Copyright (C) 2011 Andrey “A.I.” Sitnik <andrey@sitnik.ru>
|
6
|
+
#
|
7
|
+
# This program is free software: you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU Lesser General Public License as published by
|
9
|
+
# the Free Software Foundation, either version 3 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU Lesser General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU Lesser General Public License
|
18
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
19
|
|
20
20
|
module R18n
|
21
21
|
module Translated
|
22
22
|
module Base
|
23
23
|
def unlocalized_methods
|
24
|
-
if defined?
|
24
|
+
if defined?(ActiveRecord) && ancestors.include?(ActiveRecord::Base)
|
25
25
|
column_names + column_names.map { |i| i + '=' } + instance_methods
|
26
26
|
else
|
27
27
|
instance_methods
|
data/r18n-rails.gemspec
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../r18n-core/lib/r18n-core/version'
|
2
4
|
|
3
5
|
Gem::Specification.new do |s|
|
4
6
|
s.platform = Gem::Platform::RUBY
|
@@ -7,14 +9,14 @@ Gem::Specification.new do |s|
|
|
7
9
|
s.date = Time.now.strftime('%Y-%m-%d')
|
8
10
|
|
9
11
|
s.summary = 'R18n for Rails'
|
10
|
-
s.description = <<-
|
12
|
+
s.description = <<-DESC
|
11
13
|
Out-of-box R18n support for Ruby on Rails.
|
12
14
|
It is just a wrapper for R18n Rails API and R18n core libraries.
|
13
15
|
R18n has nice Ruby-style syntax, filters, flexible locales, custom loaders,
|
14
16
|
translation support for any classes, time and number localization, several
|
15
17
|
user language support, agnostic core package with out-of-box support for
|
16
18
|
Rails, Sinatra and desktop applications.
|
17
|
-
|
19
|
+
DESC
|
18
20
|
|
19
21
|
s.files = `git ls-files`.split("\n")
|
20
22
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
@@ -28,4 +30,3 @@ Gem::Specification.new do |s|
|
|
28
30
|
|
29
31
|
s.add_dependency 'r18n-rails-api', "= #{R18n::VERSION}"
|
30
32
|
end
|
31
|
-
|
@@ -1,19 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class TestController < ApplicationController
|
2
4
|
layout false
|
3
5
|
|
4
6
|
before_action :reload_r18n, only: :filter
|
5
7
|
|
6
8
|
def locales
|
7
|
-
render plain: R18n.get.locales.map
|
9
|
+
render plain: R18n.get.locales.map(&:code).join(', ')
|
8
10
|
end
|
9
11
|
|
10
12
|
def translations
|
11
|
-
render plain: "R18n: #{R18n.get.r18n.translations}. "
|
13
|
+
render plain: "R18n: #{R18n.get.r18n.translations}. " \
|
12
14
|
"Rails I18n: #{R18n.get.i18n.translations}"
|
13
15
|
end
|
14
16
|
|
15
17
|
def available
|
16
|
-
render plain: R18n.get.available_locales.map
|
18
|
+
render plain: R18n.get.available_locales.map(&:code).sort.join(' ')
|
17
19
|
end
|
18
20
|
|
19
21
|
def helpers
|
@@ -22,7 +24,7 @@ class TestController < ApplicationController
|
|
22
24
|
end
|
23
25
|
|
24
26
|
def untranslated
|
25
|
-
render plain:
|
27
|
+
render plain: R18n.get.user.not.exists.to_s
|
26
28
|
end
|
27
29
|
|
28
30
|
def controller
|
@@ -31,7 +33,7 @@ class TestController < ApplicationController
|
|
31
33
|
|
32
34
|
def time
|
33
35
|
render plain: l(Time.at(0).utc) + "\n" +
|
34
|
-
|
36
|
+
l(Time.at(0).utc, format: :short)
|
35
37
|
end
|
36
38
|
|
37
39
|
def human_time
|
data/spec/app/app/models/post.rb
CHANGED
data/spec/app/config.ru
CHANGED
@@ -1,19 +1,21 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
require
|
6
|
-
require
|
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'
|
7
9
|
|
8
10
|
if defined?(Bundler)
|
9
|
-
Bundler.require(*Rails.groups(assets: %w
|
11
|
+
Bundler.require(*Rails.groups(assets: %w[development test]))
|
10
12
|
end
|
11
13
|
|
12
14
|
module App
|
13
15
|
class Application < Rails::Application
|
14
16
|
config.time_zone = 'UTC'
|
15
17
|
config.i18n.default_locale = :ru
|
16
|
-
config.encoding =
|
18
|
+
config.encoding = 'utf-8'
|
17
19
|
|
18
20
|
def config.database_configuration
|
19
21
|
sqlite = { 'adapter' => 'sqlite3', 'database' => ':memory:' }
|
data/spec/app/config/boot.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Set up gems listed in the Gemfile.
|
2
|
-
ENV['BUNDLE_GEMFILE'] ||= File.
|
4
|
+
ENV['BUNDLE_GEMFILE'] ||= File.join(__dir__, '..', 'Gemfile')
|
3
5
|
|
4
|
-
require 'bundler/setup' if File.
|
6
|
+
require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
App::Application.configure do
|
2
4
|
config.cache_classes = true
|
3
5
|
config.serve_static_files = true
|
4
|
-
config.static_cache_control =
|
6
|
+
config.static_cache_control = 'public, max-age=3600'
|
5
7
|
config.eager_load = false
|
6
8
|
config.consider_all_requests_local = true
|
7
9
|
config.action_controller.perform_caching = false
|
data/spec/app/config/routes.rb
CHANGED
data/spec/app/db/schema.rb
CHANGED
@@ -1,20 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# This file is auto-generated from the current state of the database. Instead
|
2
4
|
# of editing this file, please use the migrations feature of Active Record to
|
3
|
-
# incrementally modify your database, and then regenerate
|
5
|
+
# incrementally modify your database, and then regenerate
|
6
|
+
# this schema definition.
|
4
7
|
#
|
5
8
|
# Note that this schema.rb definition is the authoritative source for your
|
6
9
|
# database schema. If you need to create the application database on another
|
7
10
|
# system, you should be using db:schema:load, not running all the migrations
|
8
|
-
# from scratch. The latter is a flawed and unsustainable approach
|
9
|
-
# you'll amass, the slower it'll run
|
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).
|
10
14
|
#
|
11
15
|
# It's strongly recommended to check this file into your version control system.
|
12
16
|
|
13
17
|
ActiveRecord::Schema.define(version: 20091218123631) do
|
14
|
-
|
15
|
-
|
16
|
-
t.string
|
17
|
-
t.string "title_ru"
|
18
|
+
create_table 'posts', force: true do |t|
|
19
|
+
t.string 'title_en'
|
20
|
+
t.string 'title_ru'
|
18
21
|
end
|
19
|
-
|
20
22
|
end
|
data/spec/rails_spec.rb
CHANGED
@@ -1,93 +1,94 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
describe TestController, type: :controller do
|
4
4
|
render_views
|
5
5
|
|
6
|
-
it
|
6
|
+
it 'uses default locale' do
|
7
7
|
get :locales
|
8
8
|
expect(response).to be_success
|
9
9
|
expect(response.body).to eq 'ru'
|
10
10
|
end
|
11
11
|
|
12
|
-
it
|
12
|
+
it 'gets locale from param' do
|
13
13
|
get :locales, params: { locale: 'ru' }
|
14
14
|
expect(response).to be_success
|
15
15
|
expect(response.body).to eq 'ru, en'
|
16
16
|
end
|
17
17
|
|
18
|
-
it
|
18
|
+
it 'gets locale from session' do
|
19
19
|
get :locales, session: { locale: 'ru' }
|
20
20
|
expect(response).to be_success
|
21
21
|
expect(response.body).to eq 'ru, en'
|
22
22
|
end
|
23
23
|
|
24
|
-
it
|
24
|
+
it 'gets locales from http' do
|
25
25
|
request.env['HTTP_ACCEPT_LANGUAGE'] = 'ru,fr;q=0.9'
|
26
26
|
get :locales
|
27
27
|
expect(response).to be_success
|
28
28
|
expect(response.body).to eq 'ru, fr, en'
|
29
29
|
end
|
30
30
|
|
31
|
-
it
|
31
|
+
it 'loads translations' do
|
32
32
|
get :translations, params: { locale: 'en' }
|
33
33
|
expect(response).to be_success
|
34
34
|
expect(response.body).to eq 'R18n: supported. Rails I18n: supported'
|
35
35
|
end
|
36
36
|
|
37
|
-
it
|
37
|
+
it 'returns available translations' do
|
38
38
|
get :available
|
39
39
|
expect(response).to be_success
|
40
40
|
expect(response.body).to eq 'en ru'
|
41
41
|
end
|
42
42
|
|
43
|
-
it
|
43
|
+
it 'adds helpers' do
|
44
44
|
get :helpers, params: { locale: 'en' }
|
45
45
|
expect(response).to be_success
|
46
46
|
expect(response.body).to eq "Name\nName\nName\nName\n"
|
47
47
|
end
|
48
48
|
|
49
|
-
it
|
49
|
+
it 'formats untranslated' do
|
50
50
|
get :untranslated
|
51
51
|
expect(response).to be_success
|
52
52
|
expect(response.body).to eq(
|
53
|
-
'user.<span style="color: red">[not.exists]</span>'
|
53
|
+
'user.<span style="color: red">[not.exists]</span>'
|
54
|
+
)
|
54
55
|
end
|
55
56
|
|
56
|
-
it
|
57
|
+
it 'adds methods to controller' do
|
57
58
|
get :controller, params: { locale: 'en' }
|
58
59
|
expect(response).to be_success
|
59
|
-
expect(response.body).to eq
|
60
|
+
expect(response.body).to eq 'Name Name Name'
|
60
61
|
end
|
61
62
|
|
62
|
-
it
|
63
|
+
it 'localizes time by Rails I18n' do
|
63
64
|
get :time, params: { locale: 'en' }
|
64
65
|
expect(response).to be_success
|
65
66
|
expect(response.body).to eq "Thu, 01 Jan 1970 00:00:00 +0000\n01 Jan 00:00"
|
66
67
|
end
|
67
68
|
|
68
|
-
it
|
69
|
+
it 'localizes time by R18n' do
|
69
70
|
get :human_time, params: { locale: 'en' }
|
70
71
|
expect(response).to be_success
|
71
72
|
expect(response.body).to eq 'now'
|
72
73
|
end
|
73
74
|
|
74
|
-
it
|
75
|
+
it 'translates models' do
|
75
76
|
ActiveRecord::Schema.verbose = false
|
76
|
-
ActiveRecord::Schema.define(version:
|
77
|
-
create_table
|
78
|
-
t.string
|
79
|
-
t.string
|
77
|
+
ActiveRecord::Schema.define(version: 20_091_218_130_034) do
|
78
|
+
create_table 'posts', force: true do |t|
|
79
|
+
t.string 'title_en'
|
80
|
+
t.string 'title_ru'
|
80
81
|
end
|
81
82
|
end
|
82
83
|
|
83
|
-
expect(Post.unlocalized_getters(:title)).to eq(
|
84
|
+
expect(Post.unlocalized_getters(:title)).to eq(
|
84
85
|
'ru' => 'title_ru',
|
85
86
|
'en' => 'title_en'
|
86
|
-
|
87
|
-
expect(Post.unlocalized_setters(:title)).to eq(
|
87
|
+
)
|
88
|
+
expect(Post.unlocalized_setters(:title)).to eq(
|
88
89
|
'ru' => 'title_ru=',
|
89
90
|
'en' => 'title_en='
|
90
|
-
|
91
|
+
)
|
91
92
|
|
92
93
|
@post = Post.new
|
93
94
|
@post.title_en = 'Record'
|
@@ -101,21 +102,22 @@ describe TestController, type: :controller do
|
|
101
102
|
expect(@post.title).to eq 'Запись'
|
102
103
|
end
|
103
104
|
|
104
|
-
it
|
105
|
+
it 'sets default places' do
|
105
106
|
expect(R18n.default_places).to eq([
|
106
|
-
Rails.root.join('app/i18n'), R18n::Loader::Rails.new
|
107
|
+
Rails.root.join('app/i18n'), R18n::Loader::Rails.new
|
108
|
+
])
|
107
109
|
|
108
110
|
R18n.set('en')
|
109
111
|
expect(R18n.get.user.name).to eq 'Name'
|
110
112
|
end
|
111
113
|
|
112
|
-
it
|
114
|
+
it 'translates mails' do
|
113
115
|
R18n.set('en')
|
114
116
|
email = TestMailer.test.deliver_now
|
115
117
|
expect(email.body.to_s).to eq "Name\nName\nName\n"
|
116
118
|
end
|
117
119
|
|
118
|
-
it
|
120
|
+
it 'reloads filters from app directory' do
|
119
121
|
get :filter, params: { locale: 'en' }
|
120
122
|
expect(response).to be_success
|
121
123
|
expect(response.body).to eq 'Rails'
|
@@ -128,20 +130,21 @@ describe TestController, type: :controller do
|
|
128
130
|
expect(response.body).to eq 'Rails'
|
129
131
|
end
|
130
132
|
|
131
|
-
it
|
133
|
+
it 'escapes html inside R18n' do
|
132
134
|
get :safe, params: { locale: 'en' }
|
133
135
|
expect(response).to be_success
|
134
136
|
expect(response.body).to eq(
|
135
|
-
"<b> user.<span style=\"color: red\">[no_tr]</span>\n"
|
137
|
+
"<b> user.<span style=\"color: red\">[no_tr]</span>\n"
|
138
|
+
)
|
136
139
|
end
|
137
140
|
|
138
|
-
it
|
141
|
+
it 'works with Rails build-in herlpers' do
|
139
142
|
get :format
|
140
143
|
expect(response).to be_success
|
141
144
|
expect(response.body).to eq "1 000,1 руб.\n"
|
142
145
|
end
|
143
146
|
|
144
|
-
it
|
147
|
+
it 'caches I18n object' do
|
145
148
|
R18n.clear_cache!
|
146
149
|
|
147
150
|
get :translations
|
@@ -158,7 +161,7 @@ describe TestController, type: :controller do
|
|
158
161
|
expect(R18n.cache.keys.length).to eq 2
|
159
162
|
end
|
160
163
|
|
161
|
-
it
|
164
|
+
it 'parameterizes strigns' do
|
162
165
|
expect('One two три'.parameterize).to eq 'one-two'
|
163
166
|
end
|
164
167
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'pp'
|
2
4
|
|
3
5
|
ENV['RAILS_ENV'] ||= 'test'
|
4
|
-
|
5
|
-
|
6
|
-
|
6
|
+
|
7
|
+
require_relative 'app/config/environment'
|
8
|
+
require_relative '../lib/r18n-rails'
|
7
9
|
|
8
10
|
require 'rspec/rails'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: r18n-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrey Sitnik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: r18n-rails-api
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 3.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 3.0.0
|
27
27
|
description: |2
|
28
28
|
Out-of-box R18n support for Ruby on Rails.
|
29
29
|
It is just a wrapper for R18n Rails API and R18n core libraries.
|
@@ -93,7 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
93
|
version: '0'
|
94
94
|
requirements: []
|
95
95
|
rubyforge_project:
|
96
|
-
rubygems_version: 2.
|
96
|
+
rubygems_version: 2.7.6
|
97
97
|
signing_key:
|
98
98
|
specification_version: 4
|
99
99
|
summary: R18n for Rails
|