chipairon-i18n-active_record 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a21451f4f0606b0ece514ef310c4b6b1f173f15d
|
4
|
+
data.tar.gz: 0db34961a29760d60c8c440e4792b3eed056d1d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b17dbb4cbacaa33ad46af65a66bc0a4ef1b0c1f6e9f67d0044f7549d9a39ddc4b0c402de96b6c2f54b2a482f6b3065cc20cf7d0888b26a663a4bc8b05234f14
|
7
|
+
data.tar.gz: aa4e52a831e4f7ccd2a38f18d71e16ffb37fa49f1cfdd4c795b4258c671ee794c933009c68878810e14898f888ab34c0244f71d0b8cacc2de46b7845c7c06ef9
|
@@ -41,6 +41,11 @@ module I18n
|
|
41
41
|
key = normalize_flat_keys(locale, key, scope, separator)
|
42
42
|
interpolations = options.keys - I18n::RESERVED_KEYS
|
43
43
|
|
44
|
+
# if already memoized, then a record already exists.
|
45
|
+
if @memoized_lookup and @memoized_lookup[locale.to_sym].keys.include? key.to_sym
|
46
|
+
return
|
47
|
+
end
|
48
|
+
|
44
49
|
if I18n::available_locales.any?
|
45
50
|
I18n::available_locales.each do |a_locale|
|
46
51
|
store_if_not_exists(a_locale, key, interpolations, count)
|
@@ -50,13 +55,6 @@ module I18n
|
|
50
55
|
end
|
51
56
|
end
|
52
57
|
|
53
|
-
def store_if_not_exists(locale, key, interpolations, count)
|
54
|
-
unless ActiveRecord::Translation.locale(locale).lookup(key).exists?
|
55
|
-
keys = count ? I18n.t('i18n.plural.keys', :locale => locale).map { |k| [key, k].join(FLATTEN_SEPARATOR) } : [key]
|
56
|
-
keys.each { |key| store_default_translation(locale, key, interpolations) }
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
58
|
def store_default_translation(locale, key, interpolations)
|
61
59
|
translation = ActiveRecord::Translation.new :locale => locale.to_s, :key => key
|
62
60
|
translation.interpolations = interpolations
|
@@ -68,6 +66,25 @@ module I18n
|
|
68
66
|
ensure
|
69
67
|
self.store_default_translations(locale, key, options) unless translation
|
70
68
|
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def store_if_not_exists(locale, key, interpolations, count)
|
73
|
+
unless ActiveRecord::Translation.locale(locale).lookup(key).exists?
|
74
|
+
keys = count ? get_plurals(locale).map { |k| [key, k].join(FLATTEN_SEPARATOR) } : [key]
|
75
|
+
keys.each { |key| store_default_translation(locale, key, interpolations) }
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# get plural rules or use English rules as default:
|
80
|
+
def get_plurals(locale)
|
81
|
+
plurals = I18n.t('i18n.plural.keys', :locale => locale)
|
82
|
+
# if no rules found, plurals is a string "translation missing...."
|
83
|
+
if plurals.is_a?(String)
|
84
|
+
plurals = [:zero, :one, :other]
|
85
|
+
end
|
86
|
+
plurals
|
87
|
+
end
|
71
88
|
end
|
72
89
|
end
|
73
90
|
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# This extension stores translation stub records for missing translations to
|
2
|
+
# the database.
|
3
|
+
#
|
4
|
+
# This is useful if you have a web based translation tool. It will populate
|
5
|
+
# the database with untranslated keys as the application is being used. A
|
6
|
+
# translator can then go through these and add missing translations.
|
7
|
+
#
|
8
|
+
# Example usage:
|
9
|
+
#
|
10
|
+
# I18n::Backend::Chain.send(:include, I18n::Backend::ActiveRecord::Missing)
|
11
|
+
# I18n.backend = I18n::Backend::Chain.new(I18n::Backend::ActiveRecord.new, I18n::Backend::Simple.new)
|
12
|
+
#
|
13
|
+
# Stub records for pluralizations will also be created for each key defined
|
14
|
+
# in i18n.plural.keys.
|
15
|
+
#
|
16
|
+
# For example:
|
17
|
+
#
|
18
|
+
# # en.yml
|
19
|
+
# en:
|
20
|
+
# i18n:
|
21
|
+
# plural:
|
22
|
+
# keys: [:zero, :one, :other]
|
23
|
+
#
|
24
|
+
# # pl.yml
|
25
|
+
# pl:
|
26
|
+
# i18n:
|
27
|
+
# plural:
|
28
|
+
# keys: [:zero, :one, :few, :other]
|
29
|
+
#
|
30
|
+
# It will also persist interpolation keys in Translation#interpolations so
|
31
|
+
# translators will be able to review and use them.
|
32
|
+
module I18n
|
33
|
+
module Backend
|
34
|
+
class ActiveRecord
|
35
|
+
module Missing
|
36
|
+
include Flatten
|
37
|
+
|
38
|
+
def store_default_translations(locale, key, options = {})
|
39
|
+
count, scope, default, separator = options.values_at(:count, :scope, :default, :separator)
|
40
|
+
separator ||= I18n.default_separator
|
41
|
+
key = normalize_flat_keys(locale, key, scope, separator)
|
42
|
+
interpolations = options.keys - I18n::RESERVED_KEYS
|
43
|
+
|
44
|
+
# if already memoized, then a record already exists.
|
45
|
+
if @memoized_lookup and @memoized_lookup[locale.to_sym].keys.include? key.to_sym
|
46
|
+
return
|
47
|
+
end
|
48
|
+
|
49
|
+
if I18n::available_locales.any?
|
50
|
+
I18n::available_locales.each do |a_locale|
|
51
|
+
store_if_not_exists(a_locale, key, interpolations, count)
|
52
|
+
end
|
53
|
+
else
|
54
|
+
store_if_not_exists(locale, key, interpolations, count)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def store_if_not_exists(locale, key, interpolations, count)
|
59
|
+
unless ActiveRecord::Translation.locale(locale).lookup(key).exists?
|
60
|
+
<<<<<<< HEAD
|
61
|
+
keys = count ? I18n.t('i18n.plural.keys', :locale => locale).map { |k| [key, k].join(FLATTEN_SEPARATOR) } : [key]
|
62
|
+
=======
|
63
|
+
interpolations = options.keys - I18n::RESERVED_KEYS
|
64
|
+
keys = count ? get_plurals(locale).map { |k| [key, k].join(FLATTEN_SEPARATOR) } : [key]
|
65
|
+
>>>>>>> e4d6427a8d4550e773199bef8410dcbe5f175f62
|
66
|
+
keys.each { |key| store_default_translation(locale, key, interpolations) }
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def store_default_translation(locale, key, interpolations)
|
71
|
+
translation = ActiveRecord::Translation.new :locale => locale.to_s, :key => key
|
72
|
+
translation.interpolations = interpolations
|
73
|
+
translation.save
|
74
|
+
end
|
75
|
+
|
76
|
+
def translate(locale, key, options = {})
|
77
|
+
translation = super
|
78
|
+
ensure
|
79
|
+
self.store_default_translations(locale, key, options) unless translation
|
80
|
+
end
|
81
|
+
|
82
|
+
private
|
83
|
+
# get plural rules or use English rules as default:
|
84
|
+
def get_plurals(locale)
|
85
|
+
plurals = I18n.t('i18n.plural.keys', :locale => locale)
|
86
|
+
# if no rules found, plurals is a string "translation missing...."
|
87
|
+
if plurals.is_a?(String)
|
88
|
+
plurals = [:zero, :one, :other]
|
89
|
+
end
|
90
|
+
plurals
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
data/test/mi_test.rb
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
# test setup:
|
2
|
+
require 'rubygems'
|
3
|
+
require 'test/unit'
|
4
|
+
require 'optparse'
|
5
|
+
|
6
|
+
module I18n
|
7
|
+
module Tests
|
8
|
+
class << self
|
9
|
+
def options
|
10
|
+
@options ||= { :with => [], :adapter => 'sqlite3' }
|
11
|
+
end
|
12
|
+
|
13
|
+
def parse_options!
|
14
|
+
OptionParser.new do |o|
|
15
|
+
o.on('-w', '--with DEPENDENCIES', 'Define dependencies') do |dep|
|
16
|
+
options[:with] = dep.split(',').map { |group| group.to_sym }
|
17
|
+
end
|
18
|
+
end.parse!
|
19
|
+
|
20
|
+
options[:with].each do |dep|
|
21
|
+
case dep
|
22
|
+
when :sqlite3, :mysql, :postgres
|
23
|
+
@options[:adapter] = dep
|
24
|
+
when :r23, :'rails-2.3.x'
|
25
|
+
ENV['BUNDLE_GEMFILE'] = 'ci/Gemfile.rails-2.3.x'
|
26
|
+
when :r3, :'rails-3.0.x'
|
27
|
+
ENV['BUNDLE_GEMFILE'] = 'ci/Gemfile.rails-3.x'
|
28
|
+
when :'no-rails'
|
29
|
+
ENV['BUNDLE_GEMFILE'] = 'ci/Gemfile.no-rails'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
ENV['BUNDLE_GEMFILE'] ||= 'Gemfile'
|
34
|
+
end
|
35
|
+
|
36
|
+
def setup_active_record
|
37
|
+
begin
|
38
|
+
require 'active_record'
|
39
|
+
ActiveRecord::Base.connection
|
40
|
+
true
|
41
|
+
rescue LoadError => e
|
42
|
+
puts "can't use ActiveRecord backend because: #{e.message}"
|
43
|
+
rescue ActiveRecord::ConnectionNotEstablished
|
44
|
+
require 'i18n/backend/active_record'
|
45
|
+
require 'i18n/backend/active_record/store_procs'
|
46
|
+
connect_active_record
|
47
|
+
true
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def connect_active_record
|
52
|
+
connect_adapter
|
53
|
+
ActiveRecord::Migration.verbose = false
|
54
|
+
ActiveRecord::Schema.define(:version => 1) do
|
55
|
+
create_table :translations, :force => true do |t|
|
56
|
+
t.string :locale
|
57
|
+
t.string :key
|
58
|
+
t.text :value
|
59
|
+
t.text :interpolations
|
60
|
+
t.boolean :is_proc, :default => false
|
61
|
+
end
|
62
|
+
add_index :translations, [:locale, :key], :unique => true
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def connect_adapter
|
67
|
+
case options[:adapter].to_sym
|
68
|
+
when :sqlite3
|
69
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
70
|
+
when :mysql
|
71
|
+
# CREATE DATABASE i18n_unittest;
|
72
|
+
# CREATE USER 'i18n'@'localhost' IDENTIFIED BY '';
|
73
|
+
# GRANT ALL PRIVILEGES ON i18n_unittest.* to 'i18n'@'localhost';
|
74
|
+
ActiveRecord::Base.establish_connection(:adapter => "mysql", :database => "i18n_unittest", :username => "i18n", :password => "", :host => "localhost")
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
# test_helper:
|
82
|
+
require 'bundler/setup'
|
83
|
+
$:.unshift File.expand_path("../lib", File.dirname(__FILE__))
|
84
|
+
require 'i18n/active_record'
|
85
|
+
|
86
|
+
require 'i18n/tests'
|
87
|
+
I18n::Tests.setup_active_record
|
88
|
+
|
89
|
+
class MiTest < Test::Unit::TestCase
|
90
|
+
class Backend < I18n::Backend::ActiveRecord
|
91
|
+
include I18n::Backend::ActiveRecord::Missing
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_add
|
95
|
+
assert_equal 2, 5
|
96
|
+
end
|
97
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chipairon-i18n-active_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sven Fuchs
|
@@ -37,6 +37,7 @@ files:
|
|
37
37
|
- lib/i18n/backend/active_record/missing.rb
|
38
38
|
- lib/i18n/backend/active_record/store_procs.rb
|
39
39
|
- lib/i18n/backend/active_record/translation.rb
|
40
|
+
- lib/i18n/backend/active_record/missing.rb.orig
|
40
41
|
- lib/i18n/active_record.rb
|
41
42
|
- lib/i18n/active_record/version.rb
|
42
43
|
- test/test_setup.rb
|
@@ -44,11 +45,12 @@ files:
|
|
44
45
|
- test/missing_test.rb
|
45
46
|
- test/active_record_test.rb
|
46
47
|
- test/all.rb
|
48
|
+
- test/mi_test.rb
|
47
49
|
- test/api_test.rb
|
48
50
|
- MIT-LICENSE
|
49
51
|
- README.textile
|
50
52
|
- Rakefile
|
51
|
-
homepage: http://github.com/
|
53
|
+
homepage: http://github.com/svenfuchs/i18n-active_record
|
52
54
|
licenses:
|
53
55
|
- MIT
|
54
56
|
metadata: {}
|