i18n-docs 0.0.10 → 0.1.0

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: 652380c1ce699595e1e8f178caae06c4f8b5d838
4
- data.tar.gz: f1bd46979506ce45acbfe438b8b8aaea5f78d75a
3
+ metadata.gz: 5dfaf572b4a18ef1c85ae6641dba030ca833fc2f
4
+ data.tar.gz: 85391361b7c3c7f2eea154a7aa5bed34b15e0ccb
5
5
  SHA512:
6
- metadata.gz: cead59ccf41276601dfe75f336e7211ea1d71bac1b460f3518633d4d04da8de91befe70294d16dc76cc015076b2e07766ba36eb104f4809402f2f3c6d781db8d
7
- data.tar.gz: ea99aa588c362abf09714aa18e375d0c057e011317c86c05c6e9fc481c984935777b20717551cebf300080f5e0265651679b5e13b583a879d716a292420958df
6
+ metadata.gz: 90bb038ed0f6651347019398af8373e8f1daf84007e70531e3aecb7a6c5f6952f9f7850078253cad119ba56cf4b92f6447e58290230ce6b218df8e079753fe32
7
+ data.tar.gz: 388126fd79d675b78b541c99da04c0b384eb10ad07562d59e0676320535c50e0d320fe5a530898922e76c398d9fc9086ee88570ff5900eadd19123e9c58941e5
data/README.md CHANGED
@@ -16,7 +16,7 @@ Although we use it with Google Docs, it could be used with any CSV file.
16
16
 
17
17
  ### Configuration
18
18
 
19
- Add the GEM to your Rails project:
19
+ Add the GEM to your project:
20
20
 
21
21
  gem 'i18n-docs'
22
22
 
@@ -27,6 +27,8 @@ Create a configuration file in `config/translations.yml`:
27
27
  forms.yml: "https://docs.google.com/spreadsheet/pub?key=0Ap...XveWc&single=true&gid=0&output=csv"
28
28
  ... etc ...
29
29
 
30
+ #### Rails
31
+
30
32
  Finally, let Rails know what locales you will be using. Add this to `config/application.rb`:
31
33
 
32
34
  module Web
@@ -40,6 +42,41 @@ Finally, let Rails know what locales you will be using. Add this to `config/appl
40
42
 
41
43
  This defines which languages and translation files to import from a Google Spreadsheet. The content of the Spreadsheet URL is stored to a file called e.g. `example1.yml` within folders `config/locales/en` and all other detected locales.
42
44
 
45
+ #### Non Rails
46
+
47
+ Load rake tasks in your `Rakefile`:
48
+
49
+ ```ruby
50
+ require 'i18n-docs'
51
+
52
+ spec = Gem::Specification.find_by_name 'i18n-docs'
53
+ load "#{spec.gem_dir}/lib/tasks/store_translations.rake"
54
+ ```
55
+
56
+ Create `environment` task in your `Rakefile`:
57
+
58
+ ```ruby
59
+ task :environment do
60
+ ...
61
+ end
62
+
63
+ ```
64
+
65
+ The minimal scope of this task is to set up `I18n.available_locales`.
66
+
67
+ Translations will be stored under `config/locales` in project root directory.
68
+ Don't forget to setup `I18n` accordingly:
69
+
70
+ ```ruby
71
+ I18n.load_path = Dir[File.join(MyProject.root, 'config', 'locales', '**', '*.yml')]
72
+ ```
73
+
74
+ And to load them:
75
+
76
+ ```ruby
77
+ I18n.backend.load_translations
78
+ ```
79
+
43
80
  ### Rake Tasks
44
81
 
45
82
  Following Rake tasks are added by the GEM to your Rails project:
@@ -116,4 +153,3 @@ Follow this: http://stackoverflow.com/questions/12562697/opensslsslsslerror-ssl-
116
153
  ### Credits/License
117
154
 
118
155
  This gem is sponsored by [local.ch](http://www.local.ch/). It is licensed under the [MIT license](http://en.wikipedia.org/wiki/MIT_License). If you're a ruby developer and want to work with us in Switzerland, please check out our [jobs page](http://local-ch.github.com/).
119
-
@@ -9,8 +9,8 @@ Gem::Specification.new do |s|
9
9
  s.date = '2013-05-10'
10
10
  s.summary = "Maintain translations in Google Docs and export them to your Rails project."
11
11
  s.description = "GEM providing helper scripts to manage i18n translations in Google Docs. Features: check YAML files for missing translations; export YAML files to CSV; download translations from multiple Google spreadsheets and store to YAML files"
12
- s.authors = ["Georg Kunz", "Ivan Jovanovic", "Jeremy Seitz", "Eduard Schäli", "Robin Wunderlin", "Esteban Pastorino"]
13
- s.email = 'jeremy.seitz@local.ch'
12
+ s.authors = ["Georg Kunz", "Ivan Jovanovic", "Jeremy Seitz", "Eduard Schäli", "Robin Wunderlin", "Esteban Pastorino", "Krzysztof Sakwerda"]
13
+ s.email = 'eduard.schaeli@localsearch.ch'
14
14
  s.files = `git ls-files`.split("\n")
15
15
  s.homepage = 'https://github.com/local-ch/i18n-docs'
16
16
 
@@ -18,4 +18,5 @@ Gem::Specification.new do |s|
18
18
  s.add_dependency('rake')
19
19
 
20
20
  s.add_development_dependency('mocha', '~> 0.13.3')
21
+ s.add_development_dependency('test-unit', '~> 3.1.7')
21
22
  end
@@ -4,6 +4,10 @@ module I18nDocs
4
4
 
5
5
  attr_reader :input_file, :output_file, :locales, :translations
6
6
 
7
+ def self.root_path
8
+ @root_path ||= defined?(Rails) ? Rails.root : Pathname.new(Dir.pwd)
9
+ end
10
+
7
11
  def initialize(input_file, output_file, locales = [])
8
12
  @input_file = input_file
9
13
  @output_file = File.basename(output_file)
@@ -19,12 +23,9 @@ module I18nDocs
19
23
 
20
24
  def write_files
21
25
  @locales.each do |locale|
22
- if defined?(Rails)
23
- output_file_path = Rails.root.join('config', 'locales', locale, @output_file)
24
- FileUtils.mkdir_p File.dirname(output_file_path)
25
- else
26
- output_file_path = "#{locale}_#{@output_file}"
27
- end
26
+ output_file_path = self.class.root_path.join('config', 'locales', locale, @output_file)
27
+ FileUtils.mkdir_p File.dirname(output_file_path)
28
+
28
29
  File.open(output_file_path, 'w') do |file|
29
30
  final_translation_hash = {locale => @translations[locale]}
30
31
  file.puts YAML::dump(final_translation_hash)
@@ -71,6 +72,11 @@ module I18nDocs
71
72
  raise "Error around key '#{keys.join '.'}': Expected #{memo.inspect} to be a Hash"
72
73
  end
73
74
  end
75
+
76
+ if data_hash.is_a? String
77
+ raise "Error around key '#{keys.join '.'}': Expected #{data_hash.inspect} to be a Hash"
78
+ end
79
+
74
80
  data_hash[leaf] = value
75
81
  end
76
82
 
@@ -71,10 +71,10 @@ module I18nDocs
71
71
 
72
72
  def collect_keys(scope, translations)
73
73
  full_keys = []
74
- translations.to_a.each do |key, translations|
74
+ translations.to_a.each do |key, translation|
75
75
  new_scope = scope.dup << key
76
- if translations.is_a?(Hash)
77
- full_keys += collect_keys(new_scope, translations)
76
+ if translation.is_a?(Hash)
77
+ full_keys += collect_keys(new_scope, translation)
78
78
  else
79
79
  full_keys << new_scope.join('.')
80
80
  end
@@ -102,7 +102,7 @@ module I18nDocs
102
102
  @yaml = {}
103
103
  begin
104
104
  @yaml = YAML.load_file(File.join(Rails.root, 'config', 'ignore_missing_i18n_keys.yml'))
105
- rescue => e
105
+ rescue
106
106
  STDERR.puts "No ignore_missing_keys.yml config file."
107
107
  end
108
108
 
@@ -52,7 +52,7 @@ module I18nDocs
52
52
 
53
53
  input_file = File.join(@source_dir, locale, @source_file)
54
54
  translations = {}
55
- translations = YAML.load_file(input_file) if File.exists?(input_file)
55
+ translations = YAML.load_file(input_file) if File.exist?(input_file)
56
56
  translations[locale]
57
57
  end
58
58
 
@@ -26,7 +26,7 @@ module I18nDocs
26
26
 
27
27
  def load_config
28
28
  @settings = {}
29
- @settings = YAML.load_file(config_file) if File.exists?(config_file)
29
+ @settings = YAML.load_file(config_file) if File.exist?(config_file)
30
30
  end
31
31
 
32
32
  def download_files
@@ -69,5 +69,3 @@ module I18nDocs
69
69
 
70
70
  end
71
71
  end
72
-
73
-
@@ -1,3 +1,3 @@
1
1
  module I18nDocs
2
- VERSION = '0.0.10'
2
+ VERSION = '0.1.0'
3
3
  end
@@ -9,12 +9,11 @@ namespace :i18n do
9
9
 
10
10
  desc "Download translations from Google Spreadsheet and save them to YAML files."
11
11
  task :import_translations => :environment do
12
- raise "'Rails' not found! Tasks can only run within a Rails application!" if !defined?(Rails)
13
12
 
14
- config_file = Rails.root.join('config', 'translations.yml')
15
- raise "No config file 'config/translations.yml' found." if !File.exists?(config_file)
13
+ config_file = I18nDocs::CsvToYaml.root_path.join('config', 'translations.yml')
14
+ raise "No config file 'config/translations.yml' found." if !File.exist?(config_file)
16
15
 
17
- tmp_dir = Rails.root.join('tmp')
16
+ tmp_dir = I18nDocs::CsvToYaml.root_path.join('tmp')
18
17
  Dir.mkdir(tmp_dir) unless Dir.exist?(tmp_dir)
19
18
 
20
19
  translations = I18nDocs::Translations.new(config_file, tmp_dir)
@@ -26,10 +25,8 @@ namespace :i18n do
26
25
 
27
26
  desc "Export all language files to CSV files (only files contained in en folder are considered)"
28
27
  task :export_translations => :environment do
29
- raise "'Rails' not found! Tasks can only run within a Rails application!" if !defined?(Rails)
30
-
31
- source_dir = Rails.root.join('config', 'locales')
32
- output_dir = Rails.root.join('tmp')
28
+ source_dir = I18nDocs::CsvToYaml.root_path.join('config', 'locales')
29
+ output_dir = I18nDocs::CsvToYaml.root_path.join('tmp')
33
30
  locales = I18n.available_locales
34
31
 
35
32
  input_files = Dir[File.join(source_dir, ENV['locale'] || 'en', '*.yml')]
@@ -54,5 +51,3 @@ namespace :i18n do
54
51
  end
55
52
 
56
53
  end
57
-
58
-
@@ -6,4 +6,4 @@
6
6
  # second.yml: http://www.google.com/spreadsheet/second.csv
7
7
  #
8
8
  files:
9
- download.yml: "https://docs.google.com/spreadsheet/pub?key=0ApnemdIdiDXedEpiVFR1RkdWMDhnTTgtdzRJMWZMLUE&single=true&gid=0&output=csv"
9
+ download.yml: "https://docs.google.com/spreadsheets/d/1PbmkqamXuNyP7gnVARpeCfV8rA7WvX98dTqsQB3Wdts/pub?output=csv"
@@ -0,0 +1,3 @@
1
+ key,en,de
2
+ top_level.key,Value1,Value2
3
+ top_level.key.another_key,Value3,Value4
@@ -16,7 +16,7 @@ module TestHelper
16
16
  end
17
17
 
18
18
  def create_tmp_dir
19
- FileUtils::mkdir(tmp_dir) if ! File.exists?(tmp_dir)
19
+ FileUtils::mkdir(tmp_dir) if ! File.exist?(tmp_dir)
20
20
  end
21
21
 
22
22
  def remove_tmp_dir
@@ -24,6 +24,3 @@ module TestHelper
24
24
  end
25
25
 
26
26
  end
27
-
28
-
29
-
@@ -134,10 +134,10 @@ module UnitTests
134
134
  end
135
135
 
136
136
  def test_write_files
137
- assert !File.exists?(@output_file)
137
+ assert !File.exist?(@output_file)
138
138
  @csv_to_yaml.process
139
139
  @csv_to_yaml.write_files
140
- assert File.exists?(@output_file)
140
+ assert File.exist?(@output_file)
141
141
  end
142
142
 
143
143
  def test_key_has_spaces
@@ -149,5 +149,14 @@ module UnitTests
149
149
  assert_equal 'yes', translations['en']['has']['space']
150
150
  end
151
151
 
152
+ def test_wrong_csv_format_error_message
153
+ @input_file = File.join(fixture_path, 'error.csv')
154
+ @csv_to_yaml = I18nDocs::CsvToYaml.new(@input_file, @output_file, @locales)
155
+
156
+ assert_raise "Error around key 'top_level.key.another_key': Expected \"Value2\" to be a Hash" do
157
+ @csv_to_yaml.process
158
+ end
159
+ end
160
+
152
161
  end
153
162
  end
@@ -24,9 +24,9 @@ module UnitTests
24
24
 
25
25
 
26
26
  def test_export
27
- assert !File.exists?(@output_file)
27
+ assert !File.exist?(@output_file)
28
28
  @exporter.export
29
- assert File.exists?(@output_file), "Expected to have a CSV file written"
29
+ assert File.exist?(@output_file), "Expected to have a CSV file written"
30
30
  end
31
31
 
32
32
  def dtest_load_language
@@ -26,33 +26,33 @@ module UnitTests
26
26
  end
27
27
 
28
28
  def test_download
29
- assert !File.exists?(@tmp_file)
30
- @translations.download("https://docs.google.com/spreadsheet/pub?key=0ApnemdIdiDXedEpiVFR1RkdWMDhnTTgtdzRJMWZMLUE&single=true&gid=0&output=csv", @tmp_file)
31
- assert File.exists?(@tmp_file), "Expected to have downloaded Google Spreadsheet to '#{@tmp_file}'"
29
+ assert !File.exist?(@tmp_file)
30
+ @translations.download("https://docs.google.com/spreadsheets/d/1PbmkqamXuNyP7gnVARpeCfV8rA7WvX98dTqsQB3Wdts/pub?output=csv", @tmp_file)
31
+ assert File.exist?(@tmp_file), "Expected to have downloaded Google Spreadsheet to '#{@tmp_file}'"
32
32
  end
33
33
 
34
34
  def test_cleanup
35
35
  @translations.csv_files = {'dummy.yml' => @tmp_file}
36
36
  File.open(@tmp_file, "w") {}
37
- assert File.exists?(@tmp_file)
37
+ assert File.exist?(@tmp_file)
38
38
  @translations.clean_up
39
- assert !File.exists?(@tmp_file), "Expected to delete file"
39
+ assert !File.exist?(@tmp_file), "Expected to delete file"
40
40
  end
41
41
 
42
42
  def test_store_translations
43
- assert !File.exists?(@output_file)
43
+ assert !File.exist?(@output_file)
44
44
 
45
45
  @translations.csv_files = {@output_file => @fixture_file}
46
46
  @translations.store_translations
47
47
 
48
- assert File.exists?(@output_file)
48
+ assert File.exist?(@output_file)
49
49
  end
50
50
 
51
51
  def test_download_files
52
52
  expected_file = File.join(tmp_dir, 'download.csv')
53
- assert !File.exists?(expected_file)
53
+ assert !File.exist?(expected_file)
54
54
  @translations.download_files
55
- assert File.exists?(expected_file)
55
+ assert File.exist?(expected_file)
56
56
  assert File.open(expected_file).read.encoding.name == 'UTF-8'
57
57
  end
58
58
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i18n-docs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Georg Kunz
@@ -10,6 +10,7 @@ authors:
10
10
  - Eduard Schäli
11
11
  - Robin Wunderlin
12
12
  - Esteban Pastorino
13
+ - Krzysztof Sakwerda
13
14
  autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
@@ -43,10 +44,24 @@ dependencies:
43
44
  - - "~>"
44
45
  - !ruby/object:Gem::Version
45
46
  version: 0.13.3
47
+ - !ruby/object:Gem::Dependency
48
+ name: test-unit
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: 3.1.7
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: 3.1.7
46
61
  description: 'GEM providing helper scripts to manage i18n translations in Google Docs.
47
62
  Features: check YAML files for missing translations; export YAML files to CSV; download
48
63
  translations from multiple Google spreadsheets and store to YAML files'
49
- email: jeremy.seitz@local.ch
64
+ email: eduard.schaeli@localsearch.ch
50
65
  executables: []
51
66
  extensions: []
52
67
  extra_rdoc_files: []
@@ -67,6 +82,7 @@ files:
67
82
  - test/fixtures/config.yml
68
83
  - test/fixtures/de/header.yml
69
84
  - test/fixtures/en/header.yml
85
+ - test/fixtures/error.csv
70
86
  - test/fixtures/minimal.csv
71
87
  - test/fixtures/test.csv
72
88
  - test/test_helper.rb
@@ -92,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
108
  version: '0'
93
109
  requirements: []
94
110
  rubyforge_project:
95
- rubygems_version: 2.4.8
111
+ rubygems_version: 2.6.5
96
112
  signing_key:
97
113
  specification_version: 4
98
114
  summary: Maintain translations in Google Docs and export them to your Rails project.