translation 1.0.1 → 1.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: 6fdbfc3366fc33e98b990f1ef6769f483e54b36a
4
- data.tar.gz: bfef13d4a532bb6b17a2a390c7dd3803e8a9068e
3
+ metadata.gz: e6055d7b901a7e9feef192da60bb4313b73fcff3
4
+ data.tar.gz: 75fc068a3a457b753c0712dd062cb4930533a93d
5
5
  SHA512:
6
- metadata.gz: 9e3cdc31a4db0fa2966d33c23dd8be0115a788fd2962b450acdc7f95596178b67cba27a5420342465b8c6c6ef059e06f6711598f67fd1e2cf67f00014e686f19
7
- data.tar.gz: f004b789f120a27803f3d37e04a849cdba04d6e261b2e3de4cf63d535f6ce13cc2a9355bdbe9662d7d2af31480643a528b8e42e20bc5bd286b16bf3b6ab354b1
6
+ metadata.gz: 5f8e4d890eadb175c48ae56065fa2546bb2bd3d0a089a5d50ffba13091d7745cb3bdbe83295e6abe0f715764e6e462be48ee4b14f4827bf02e3daa705d1f55ce
7
+ data.tar.gz: 6ed57c9f6a19e138aaba17ba9c117b1ebd2ea370dfb5d5e3c87efe5b563d7333882f800889d1a2c1c64829486b3ee3a8838f987b2b18cb9052ed7bd7a868d555
@@ -21,7 +21,7 @@ module TranslationIO
21
21
  end
22
22
 
23
23
  all_flat_special_translations = all_flat_translations.select do |key, value|
24
- TranslationIO::YamlEntry.localization?(key, value)
24
+ YamlEntry.localization?(key, value)
25
25
  end
26
26
 
27
27
  @target_locales.each do |target_locale|
@@ -30,7 +30,7 @@ module TranslationIO
30
30
  TranslationIO.info yaml_path, 2, 2
31
31
 
32
32
  target_flat_special_translations = all_flat_special_translations.select do |key|
33
- TranslationIO::YamlEntry.from_locale?(key, target_locale) && !TranslationIO::YamlEntry.ignored?(key)
33
+ YamlEntry.from_locale?(key, target_locale) && !YamlEntry.ignored?(key)
34
34
  end
35
35
 
36
36
  yaml_data = YAMLConversion.get_yaml_data_from_flat_translations(target_flat_special_translations)
@@ -11,10 +11,6 @@ module TranslationIO
11
11
 
12
12
  haml_source_files = config.haml_source_files
13
13
  slim_source_files = config.slim_source_files
14
-
15
- BaseOperation::DumpHamlGettextKeysStep.new(haml_source_files).run
16
- BaseOperation::DumpSlimGettextKeysStep.new(slim_source_files).run
17
-
18
14
  source_files = config.source_files
19
15
  pot_path = config.pot_path
20
16
  source_locale = config.source_locale
@@ -23,6 +19,9 @@ module TranslationIO
23
19
  yaml_locales_path = config.yaml_locales_path
24
20
  yaml_file_paths = config.yaml_file_paths
25
21
 
22
+ BaseOperation::DumpHamlGettextKeysStep.new(haml_source_files).run
23
+ BaseOperation::DumpSlimGettextKeysStep.new(slim_source_files).run
24
+
26
25
  UpdatePotFileStep.new(pot_path, source_files).run(params)
27
26
  UpdateAndCollectPoFilesStep.new(target_locales, pot_path, locales_path).run(params)
28
27
  CreateYamlPoFilesStep.new(source_locale, target_locales, yaml_file_paths).run(params)
@@ -13,7 +13,7 @@ module TranslationIO
13
13
  @yaml_file_paths.each do |locale_file_path|
14
14
  if locale_file_removable?(locale_file_path)
15
15
  if File.exist?(locale_file_path)
16
- content_hash = YAML::load(File.read(locale_file_path))
16
+ content_hash = YAML::load(File.read(locale_file_path))
17
17
 
18
18
  if content_hash
19
19
  new_content_hash = content_hash.keep_if { |k| k.to_s == @source_locale.to_s }
@@ -25,11 +25,11 @@ module TranslationIO
25
25
  all_flat_translations = FlatHash.to_flat_hash(all_translations)
26
26
 
27
27
  all_flat_string_translations = all_flat_translations.select do |key, value|
28
- TranslationIO::YamlEntry.string?(key, value) && !TranslationIO::YamlEntry.localization?(key, value)
28
+ YamlEntry.string?(key, value) && !YamlEntry.localization?(key, value)
29
29
  end
30
30
 
31
31
  source_flat_string_tanslations = all_flat_string_translations.select do |key|
32
- TranslationIO::YamlEntry.from_locale?(key, @source_locale) && !TranslationIO::YamlEntry.ignored?(key)
32
+ YamlEntry.from_locale?(key, @source_locale) && !YamlEntry.ignored?(key)
33
33
  end
34
34
 
35
35
  @target_locales.each do |target_locale|
@@ -1,5 +1,6 @@
1
1
  require 'translation_io/client/sync_operation/update_and_collect_pot_file_step'
2
2
  require 'translation_io/client/sync_operation/create_yaml_pot_file_step'
3
+ require 'translation_io/client/sync_operation/apply_yaml_source_edits_step'
3
4
 
4
5
  module TranslationIO
5
6
  class Client
@@ -9,10 +10,6 @@ module TranslationIO
9
10
 
10
11
  haml_source_files = config.haml_source_files
11
12
  slim_source_files = config.slim_source_files
12
-
13
- BaseOperation::DumpHamlGettextKeysStep.new(haml_source_files).run
14
- BaseOperation::DumpSlimGettextKeysStep.new(slim_source_files).run
15
-
16
13
  source_files = config.source_files
17
14
  pot_path = config.pot_path
18
15
  source_locale = config.source_locale
@@ -21,6 +18,11 @@ module TranslationIO
21
18
  yaml_locales_path = config.yaml_locales_path
22
19
  yaml_file_paths = config.yaml_file_paths
23
20
 
21
+ ApplyYamlSourceEditsStep.new(yaml_file_paths, source_locale).run(params)
22
+
23
+ BaseOperation::DumpHamlGettextKeysStep.new(haml_source_files).run
24
+ BaseOperation::DumpSlimGettextKeysStep.new(slim_source_files).run
25
+
24
26
  UpdateAndCollectPotFileStep.new(pot_path, source_files).run(params)
25
27
  CreateYamlPotFileStep.new(source_locale, yaml_file_paths).run(params)
26
28
 
@@ -0,0 +1,96 @@
1
+ module TranslationIO
2
+ class Client
3
+ class SyncOperation < BaseOperation
4
+ class ApplyYamlSourceEditsStep
5
+ def initialize(yaml_file_paths, source_locale)
6
+ @yaml_file_paths = yaml_file_paths
7
+ @source_locale = source_locale
8
+ end
9
+
10
+ def run(params)
11
+ TranslationIO.info "Downloading YAML source editions."
12
+
13
+ timestamp = YAML::load(File.read(TranslationIO.config.metadata_path))['timestamp'] rescue 0
14
+
15
+ params.merge!({ :timestamp => timestamp })
16
+ parsed_response = perform_source_edits_request(params)
17
+
18
+ unless parsed_response.nil?
19
+ TranslationIO.info "Applying YAML source editions."
20
+
21
+ parsed_response['source_edits'].each do |source_edit|
22
+ inserted = false
23
+
24
+ sort_by_project_locales_first(@yaml_file_paths).each do |file_path|
25
+ yaml_hash = YAML::load(File.read(file_path))
26
+ flat_yaml_hash = FlatHash.to_flat_hash(yaml_hash)
27
+
28
+ flat_yaml_hash.each do |key, value|
29
+ if key == "#{@source_locale}.#{source_edit['key']}" && value == source_edit['old_text']
30
+ TranslationIO.info "#{source_edit['key']} | #{source_edit['old_text']} -> #{source_edit['new_text']}", 2, 2
31
+
32
+ if locale_file_path_in_project?(file_path)
33
+ flat_yaml_hash[key] = source_edit['new_text']
34
+
35
+ File.open(file_path, 'w') do |f|
36
+ f.write(FlatHash.to_hash(flat_yaml_hash).to_yaml)
37
+ end
38
+ else
39
+ yaml_path = File.join(TranslationIO.config.yaml_locales_path, "#{@source_locale}.yml")
40
+
41
+ if File.exists?(yaml_path) # en.yml
42
+ yaml_hash = YAML::load(File.read(yaml_path))
43
+ flat_yaml_hash = FlatHash.to_flat_hash(yaml_hash)
44
+ else
45
+ FileUtils::mkdir_p File.dirname(yaml_path)
46
+ flat_yaml_hash = {}
47
+ end
48
+
49
+ flat_yaml_hash["#{@source_locale}.#{source_edit['key']}"] = source_edit['new_text']
50
+
51
+ File.open(yaml_path, 'w') do |f|
52
+ f.write(FlatHash.to_hash(flat_yaml_hash).to_yaml)
53
+ end
54
+ end
55
+
56
+ inserted = true
57
+ break
58
+ end
59
+ end
60
+
61
+ break if inserted
62
+ end
63
+ end
64
+ end
65
+
66
+ File.open(TranslationIO.config.metadata_path, 'w') do |f|
67
+ f.write({ 'timestamp' => Time.now.getutc.to_i }.to_yaml)
68
+ end
69
+ end
70
+
71
+ private
72
+
73
+ def perform_source_edits_request(params)
74
+ uri = URI("#{TranslationIO.client.endpoint}/projects/#{TranslationIO.client.api_key}/source_edits")
75
+ parsed_response = BaseOperation.perform_request(uri, params)
76
+ end
77
+
78
+ # Sort YAML file paths by project locales first, gem locales after
79
+ # (to replace "overridden" source first)
80
+ def sort_by_project_locales_first(yaml_file_paths)
81
+ yaml_file_paths.sort do |x, y|
82
+ a = locale_file_path_in_project?(x)
83
+ b = locale_file_path_in_project?(y)
84
+ (!a && b) ? 1 : ((a && !b) ? -1 : 0)
85
+ end
86
+ end
87
+
88
+ def locale_file_path_in_project?(locale_file_path)
89
+ TranslationIO.normalize_path(locale_file_path).start_with?(
90
+ TranslationIO.normalize_path(TranslationIO.config.yaml_locales_path)
91
+ )
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -24,7 +24,7 @@ module TranslationIO
24
24
  all_flat_translations = FlatHash.to_flat_hash(all_translations)
25
25
 
26
26
  source_flat_string_tanslations = all_flat_translations.select do |key, value|
27
- TranslationIO::YamlEntry.string?(key, value) && TranslationIO::YamlEntry.from_locale?(key, @source_locale) && !TranslationIO::YamlEntry.ignored?(key) && !TranslationIO::YamlEntry.localization?(key, value)
27
+ YamlEntry.string?(key, value) && YamlEntry.from_locale?(key, @source_locale) && !YamlEntry.ignored?(key) && !YamlEntry.localization?(key, value)
28
28
  end
29
29
 
30
30
  pot_representation = GetText::PO.new
@@ -1,6 +1,6 @@
1
1
  module TranslationIO
2
2
  class Config
3
- attr_accessor :api_key, :locales_path
3
+ attr_accessor :api_key, :locales_path, :yaml_locales_path
4
4
  attr_accessor :source_locale, :target_locales
5
5
  attr_accessor :endpoint
6
6
  attr_accessor :verbose
@@ -8,6 +8,7 @@ module TranslationIO
8
8
  attr_accessor :ignored_key_prefixes
9
9
  attr_accessor :localization_key_prefixes
10
10
  attr_accessor :charset
11
+ attr_accessor :metadata_path
11
12
 
12
13
  attr_accessor :pot_msgid_bugs_address
13
14
  attr_accessor :pot_package_name
@@ -17,6 +18,7 @@ module TranslationIO
17
18
 
18
19
  def initialize
19
20
  self.locales_path = File.join('config', 'locales', 'gettext')
21
+ self.yaml_locales_path = File.join('config', 'locales')
20
22
  self.source_locale = :en
21
23
  self.target_locales = []
22
24
  self.endpoint = 'https://translation.io/api'
@@ -25,6 +27,7 @@ module TranslationIO
25
27
  self.ignored_key_prefixes = []
26
28
  self.localization_key_prefixes = []
27
29
  self.charset = 'UTF-8'
30
+ self.metadata_path = File.join('config', 'locales', '.translation_io')
28
31
 
29
32
  self.pot_msgid_bugs_address = 'contact@translation.io'
30
33
  self.pot_package_name = File.basename(Dir.pwd)
@@ -53,10 +56,6 @@ module TranslationIO
53
56
  paths
54
57
  end
55
58
 
56
- def yaml_locales_path
57
- 'config/locales'
58
- end
59
-
60
59
  def haml_source_files
61
60
  Dir['**/*.{haml}'].select do |p|
62
61
  !p.start_with?('vendor/') && !p.start_with?('tmp/')
@@ -35,7 +35,7 @@ module TranslationIO
35
35
  end
36
36
 
37
37
  def localization?(key, value)
38
- key.present? && (localization_prefix?(key) || (!TranslationIO::YamlEntry.string?(key, value) && !value.nil?))
38
+ key.present? && (localization_prefix?(key) || (!string?(key, value) && !value.nil?))
39
39
  end
40
40
 
41
41
  def localization_prefix?(key)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: translation
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aurelien Malisart
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-01-08 00:00:00.000000000 Z
12
+ date: 2015-03-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: gettext
@@ -103,6 +103,7 @@ files:
103
103
  - lib/translation_io/client/init_operation/update_and_collect_po_files_step.rb
104
104
  - lib/translation_io/client/init_operation/update_pot_file_step.rb
105
105
  - lib/translation_io/client/sync_operation.rb
106
+ - lib/translation_io/client/sync_operation/apply_yaml_source_edits_step.rb
106
107
  - lib/translation_io/client/sync_operation/create_yaml_pot_file_step.rb
107
108
  - lib/translation_io/client/sync_operation/update_and_collect_pot_file_step.rb
108
109
  - lib/translation_io/config.rb
@@ -133,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
134
  version: '0'
134
135
  requirements: []
135
136
  rubyforge_project:
136
- rubygems_version: 2.2.0
137
+ rubygems_version: 2.4.5
137
138
  signing_key:
138
139
  specification_version: 4
139
140
  summary: Rails translation made _("simple") with YAML and GetText.