i18n_csv 0.0.1 → 0.0.2

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: 8c482d2a1f8a6ac2cbbf0955edaafd5ac1a0df42
4
- data.tar.gz: 9776b8b620c41eae44f394b3a061f648c2763c76
3
+ metadata.gz: aebb9bd92b897b5fae2bf122018169da25a553e0
4
+ data.tar.gz: 541f64428f4b71059bfe65dbf1d4578081dcab31
5
5
  SHA512:
6
- metadata.gz: 348faf77713e1227535106d3f18d6f749774fae76dc616a9bb7da8f78b5813091d791c57f23a743075c4dbfcb0eed44dbbc7dee8ce66c583c096be5fd0442539
7
- data.tar.gz: cf551a84fad4ceb5adc99a3ce2a221743c9352a29c3314a05685049c51195d39847cd112c9754c13475cc5467f7cec96a4529ebe23f3e26ee92a53bbf341498a
6
+ metadata.gz: ec5d7f1e63390a5186f8f8e0e5cd619e272c214fc8b7b80692fee72166cd76efe631c401838770e6a83ba0fe1b7db24a39f74545c1c4252e5aca235018a7152a
7
+ data.tar.gz: 2d33879cd7ed204f4ab0a0d9e3f90fbe347c6663f814d0769e4a211504718b602c9e82a7deaedd780efa45a049d78da5b8583817d431e3bddc8f5c602ab4e325
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # I18nCsv
2
2
 
3
- TODO: Write a gem description
3
+ One extends standard I18n so that you could store your translations in a Comma-Separated Value files (*CSV*) in a **key-value** manner, where the **key** is a word or a phrase or even a poem if you wish. No limits here (except be aware to escape symbols so the CSV format is kept). And the **value** is the same text as the key but translated to a language, specified by a file name you are using. For example, you could write one line to a `sp.csv` file: `"hello!","hola!"` and use `t 'hello!'` with a *spanish locale* to get the `"hola!"` text.
4
4
 
5
5
  ## Installation
6
6
 
data/i18n_csv.gemspec CHANGED
@@ -22,4 +22,5 @@ Gem::Specification.new do |spec|
22
22
 
23
23
  spec.add_development_dependency "bundler", "~> 1.3"
24
24
  spec.add_development_dependency "rake"
25
+ spec.add_development_dependency "i18n"
25
26
  end
@@ -0,0 +1,59 @@
1
+ require 'csv'
2
+
3
+ module I18n
4
+ module Backend
5
+ module CSV18n
6
+ def get_translations
7
+ tmp_translations = translations()
8
+
9
+ def moo(hash, prefix = nil)
10
+ prefix = prefix.to_s
11
+
12
+ if hash.is_a? Hash then
13
+ hash.collect do |k, v|
14
+ k = k.to_s
15
+
16
+ moo(v, (prefix.blank? ? k : prefix + '.' + k)).flatten(1)
17
+ end
18
+ elsif hash.is_a? Array
19
+ [ prefix, [ hash.reject { |e| e.blank? } ] ]
20
+ else
21
+ [ prefix, hash ]
22
+ end
23
+ end
24
+
25
+ reload!
26
+
27
+ tmp = tmp_translations.collect do |locale, values|
28
+ [locale, Hash[*moo(values).flatten(1)]]
29
+ end
30
+
31
+ Hash[[*tmp]]
32
+ end
33
+
34
+ protected
35
+
36
+ def load_csv(filename)
37
+ begin
38
+ lines = CSV.read(filename)
39
+ locale = ::File.basename(filename, '.csv').to_sym
40
+ { locale => Hash[ lines.map { |l| l if l.size == 2 } ] }
41
+ rescue Exception => e
42
+ Rails.logger.error "I18n CSV error: #{e.message} :: #{e.backtrace}"
43
+ nil
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ class MissingTranslation
50
+ module Base
51
+ def html_message
52
+ key
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ I18n::Backend::Simple.include(I18n::Backend::CSV18n)
59
+ I18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.csv')]
@@ -0,0 +1,65 @@
1
+ require 'csv'
2
+
3
+ module I18n
4
+ module Backend
5
+ module CSV18n
6
+ def get_translations
7
+ tmp_translations = translations()
8
+
9
+ def yaml_to_key_string(hash, prefix = nil)
10
+ prefix = prefix.to_s
11
+
12
+ if hash.is_a? Hash then
13
+ hash.collect do |k, v|
14
+ k = k.to_s
15
+
16
+ yaml_to_key_string(v, (prefix.blank? ? k : prefix + '.' + k)).flatten(1)
17
+ end
18
+ elsif hash.is_a? Array
19
+ [ prefix, [ hash.reject { |e| e.blank? } ] ]
20
+ else
21
+ [ prefix, hash ]
22
+ end
23
+ end
24
+
25
+ reload!
26
+
27
+ tmp = tmp_translations.collect do |locale, values|
28
+ [locale, Hash[*yaml_to_key_string(values).flatten(1)]]
29
+ end
30
+
31
+ Hash[[*tmp]]
32
+ end
33
+
34
+ protected
35
+
36
+ def load_csv(filename)
37
+ begin
38
+ lines = CSV.read(filename)
39
+ locale = ::File.basename(filename, '.csv').to_sym
40
+ { locale => Hash[ lines.map { |l| l if l.size == 2 } ] }
41
+ rescue Exception => e
42
+ Rails.logger.error "I18n CSV error: #{e.message} :: #{e.backtrace}"
43
+ nil
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ class MissingTranslation
50
+ module Base
51
+ def html_message
52
+ key
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ module I18n_CSV
59
+ class Railtie < Rails::Railtie
60
+ initializer "i18n_csv.configure_rails_initialization" do
61
+ I18n::Backend::Simple.include(I18n::Backend::CSV18n)
62
+ I18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.csv')]
63
+ end
64
+ end
65
+ end
@@ -1,3 +1,3 @@
1
1
  module I18nCsv
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/i18n_csv.rb CHANGED
@@ -1,61 +1,3 @@
1
1
  require "i18n_csv/version"
2
2
 
3
- require 'csv'
4
-
5
- module I18n
6
- module Backend
7
- module CSV18n
8
- def get_translations
9
- tmp_translations = translations()
10
-
11
- def moo(hash, prefix = nil)
12
- prefix = prefix.to_s
13
-
14
- if hash.is_a? Hash then
15
- hash.collect do |k, v|
16
- k = k.to_s
17
-
18
- moo(v, (prefix.blank? ? k : prefix + '.' + k)).flatten(1)
19
- end
20
- elsif hash.is_a? Array
21
- [ prefix, [ hash.reject { |e| e.blank? } ] ]
22
- else
23
- [ prefix, hash ]
24
- end
25
- end
26
-
27
- reload!
28
-
29
- tmp = tmp_translations.collect do |locale, values|
30
- [locale, Hash[*moo(values).flatten(1)]]
31
- end
32
-
33
- Hash[[*tmp]]
34
- end
35
-
36
- protected
37
-
38
- def load_csv(filename)
39
- begin
40
- lines = CSV.read(filename)
41
- locale = ::File.basename(filename, '.csv').to_sym
42
- { locale => Hash[ lines.map { |l| l if l.size == 2 } ] }
43
- rescue Exception => e
44
- Rails.logger.error "I18n CSV error: #{e.message} :: #{e.backtrace}"
45
- nil
46
- end
47
- end
48
- end
49
- end
50
-
51
- class MissingTranslation
52
- module Base
53
- def html_message
54
- key
55
- end
56
- end
57
- end
58
- end
59
-
60
- I18n::Backend::Simple.include(I18n::Backend::CSV18n)
61
- I18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.csv')]
3
+ require 'i18n_csv/railtie' if defined?(Rails)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i18n_csv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artem Shoobovych
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: i18n
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  description: 'One extends standard I18n so that you could store your translations
42
56
  in a Comma-Separated Value files (CSV) in a key-value manner, where the key is a
43
57
  word or a phrase or even a poem if you wish. No limits here (except be aware to
@@ -58,6 +72,8 @@ files:
58
72
  - Rakefile
59
73
  - i18n_csv.gemspec
60
74
  - lib/i18n_csv.rb
75
+ - lib/i18n_csv/i18n_csv.rb
76
+ - lib/i18n_csv/railtie.rb
61
77
  - lib/i18n_csv/version.rb
62
78
  homepage: ''
63
79
  licenses: