i18n-docs 0.0.10 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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.