translation 1.7 → 1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -3
- data/lib/translation.rb +21 -17
- data/lib/translation_io/client/base_operation/{dump_haml_gettext_keys_step.rb → dump_markup_gettext_keys_step.rb} +11 -10
- data/lib/translation_io/client/base_operation/save_new_po_files_step.rb +1 -1
- data/lib/translation_io/client/base_operation.rb +1 -2
- data/lib/translation_io/client/init_operation/update_and_collect_po_files_step.rb +1 -1
- data/lib/translation_io/client/init_operation.rb +38 -25
- data/lib/translation_io/client/sync_operation.rb +2 -2
- data/lib/translation_io/railtie.rb +27 -25
- data/lib/translation_io/tasks.rb +3 -0
- metadata +17 -4
- data/lib/translation_io/client/base_operation/dump_slim_gettext_keys_step.rb +0 -46
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d359ae6010036c8991106bd2c997ce9e134e274c
|
4
|
+
data.tar.gz: 9791346e543d7dbfa94b0274f13a106062530d1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 656c738ea8e941704f986971cc9a739d40973626f10d72015c75adb020201b564e7475f14b16f4fc8f54b180452c7f875c98d9976a9f22ca0baae31d5328c756
|
7
|
+
data.tar.gz: 6877fd10b443c673f885d53bb844ef0a40632bedc87924ec2c75be219455f0fe2aed9dcfdeedf4a38a7ac38670e0daff65e6a03d565501b785daef50b9a3315a
|
data/README.md
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
![Build Status](https://www.codeship.io/projects/f7cd4ac0-b73c-0131-51ea-522dcd2196ed/status)
|
1
|
+
# Gem for [Translation.io](http://translation.io). ![Build Status](https://www.codeship.io/projects/f7cd4ac0-b73c-0131-51ea-522dcd2196ed/status) [![Code Climate](https://codeclimate.com/github/aurels/translation-gem/badges/gpa.svg)](https://codeclimate.com/github/aurels/translation-gem) [![Test Coverage](https://codeclimate.com/github/aurels/translation-gem/badges/coverage.svg)](https://codeclimate.com/github/aurels/translation-gem/coverage)
|
4
2
|
|
5
3
|
## Description
|
6
4
|
|
data/lib/translation.rb
CHANGED
@@ -1,11 +1,5 @@
|
|
1
1
|
require 'net/http'
|
2
2
|
|
3
|
-
require 'gettext'
|
4
|
-
require 'gettext/po'
|
5
|
-
require 'gettext/po_parser'
|
6
|
-
require 'gettext/tools'
|
7
|
-
require 'gettext/text_domain_manager'
|
8
|
-
|
9
3
|
module TranslationIO
|
10
4
|
GETTEXT_METHODS = [
|
11
5
|
:nsgettext, :pgettext, :npgettext, :sgettext, :ngettext, :gettext,
|
@@ -27,7 +21,6 @@ require 'translation_io/yaml_entry'
|
|
27
21
|
|
28
22
|
module TranslationIO
|
29
23
|
module Proxy
|
30
|
-
include GetText
|
31
24
|
end
|
32
25
|
|
33
26
|
class << self
|
@@ -37,21 +30,32 @@ module TranslationIO
|
|
37
30
|
ENV['LANG'] = 'en_US.UTF-8' if ENV['LANG'].blank?
|
38
31
|
ENV['LC_CTYPE'] = 'UTF-8' if ENV['LC_CTYPE'].blank?
|
39
32
|
|
40
|
-
if Rails.env.development?
|
41
|
-
GetText::TextDomainManager.cached = false
|
42
|
-
end
|
43
|
-
|
44
33
|
@config ||= Config.new
|
45
34
|
|
46
35
|
yield @config
|
47
36
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
37
|
+
unless @config.disable_gettext
|
38
|
+
require 'gettext'
|
39
|
+
require 'gettext/po'
|
40
|
+
require 'gettext/po_parser'
|
41
|
+
require 'gettext/tools'
|
42
|
+
require 'gettext/text_domain_manager'
|
43
|
+
require 'gettext/tools/xgettext'
|
44
|
+
|
45
|
+
if Rails.env.development?
|
46
|
+
GetText::TextDomainManager.cached = false
|
47
|
+
end
|
52
48
|
|
53
|
-
|
54
|
-
|
49
|
+
Proxy.include GetText
|
50
|
+
|
51
|
+
Proxy.bindtextdomain(TEXT_DOMAIN, {
|
52
|
+
:path => @config.locales_path,
|
53
|
+
:output_charset => @config.charset
|
54
|
+
})
|
55
|
+
|
56
|
+
Proxy.textdomain(TEXT_DOMAIN)
|
57
|
+
Object.delegate *GETTEXT_METHODS, :to => Proxy
|
58
|
+
end
|
55
59
|
|
56
60
|
@client = Client.new(@config.api_key, @config.endpoint)
|
57
61
|
|
@@ -1,19 +1,20 @@
|
|
1
1
|
module TranslationIO
|
2
2
|
class Client
|
3
3
|
class BaseOperation
|
4
|
-
class
|
5
|
-
def initialize(
|
6
|
-
@
|
4
|
+
class DumpMarkupGettextKeysStep
|
5
|
+
def initialize(markup_source_files, markup_type)
|
6
|
+
@markup_source_files = markup_source_files
|
7
|
+
@markup_type = markup_type
|
7
8
|
end
|
8
9
|
|
9
10
|
def run
|
10
|
-
if @
|
11
|
-
TranslationIO.info "Extracting Gettext entries from
|
11
|
+
if @markup_source_files.any?
|
12
|
+
TranslationIO.info "Extracting Gettext entries from #{@markup_type.to_s.upcase} files."
|
12
13
|
|
13
14
|
FileUtils.mkdir_p(File.join('tmp', 'translation'))
|
14
15
|
|
15
16
|
extracted_gettext_entries.each_with_index do |entry, index|
|
16
|
-
file_path = File.join('tmp', 'translation', "
|
17
|
+
file_path = File.join('tmp', 'translation', "#{@markup_type}-gettext-#{index.to_s.rjust(8,'0')}.rb")
|
17
18
|
|
18
19
|
File.open(file_path, 'w') do |file|
|
19
20
|
file.puts "def fake"
|
@@ -29,11 +30,11 @@ module TranslationIO
|
|
29
30
|
def extracted_gettext_entries
|
30
31
|
entries = []
|
31
32
|
|
32
|
-
@
|
33
|
-
TranslationIO.info
|
33
|
+
@markup_source_files.each do |markup_file_path|
|
34
|
+
TranslationIO.info markup_file_path, 2, 2
|
34
35
|
|
35
|
-
|
36
|
-
entries
|
36
|
+
markup_data = File.read(markup_file_path)
|
37
|
+
entries += TranslationIO::Extractor.extract(markup_data)
|
37
38
|
end
|
38
39
|
|
39
40
|
TranslationIO.info "#{entries.size} entries found", 2, 2
|
@@ -13,7 +13,7 @@ module TranslationIO
|
|
13
13
|
|
14
14
|
@target_locales.each do |target_locale|
|
15
15
|
if @parsed_response.has_key?("po_data_#{target_locale}")
|
16
|
-
po_path = File.join(@locales_path, target_locale.to_s
|
16
|
+
po_path = File.join(@locales_path, Locale::Tag.parse(target_locale).to_s, "#{TEXT_DOMAIN}.po")
|
17
17
|
FileUtils.mkdir_p(File.dirname(po_path))
|
18
18
|
TranslationIO.info po_path, 2, 2
|
19
19
|
|
@@ -3,8 +3,7 @@ require 'translation_io/client/base_operation/save_new_po_files_step'
|
|
3
3
|
require 'translation_io/client/base_operation/create_new_mo_files_step'
|
4
4
|
require 'translation_io/client/base_operation/save_new_yaml_files_step'
|
5
5
|
require 'translation_io/client/base_operation/save_special_yaml_files_step'
|
6
|
-
require 'translation_io/client/base_operation/
|
7
|
-
require 'translation_io/client/base_operation/dump_slim_gettext_keys_step'
|
6
|
+
require 'translation_io/client/base_operation/dump_markup_gettext_keys_step'
|
8
7
|
|
9
8
|
module TranslationIO
|
10
9
|
class Client
|
@@ -12,7 +12,7 @@ module TranslationIO
|
|
12
12
|
TranslationIO.info "Updating PO files."
|
13
13
|
|
14
14
|
@target_locales.each do |target_locale|
|
15
|
-
po_path = "#{@locales_path}/#{
|
15
|
+
po_path = "#{@locales_path}/#{Locale::Tag.parse(target_locale).to_s}/#{TEXT_DOMAIN}.po"
|
16
16
|
TranslationIO.info po_path, 2, 2
|
17
17
|
|
18
18
|
if File.exist?(po_path)
|
@@ -19,8 +19,8 @@ module TranslationIO
|
|
19
19
|
yaml_file_paths = config.yaml_file_paths
|
20
20
|
|
21
21
|
unless config.disable_gettext
|
22
|
-
BaseOperation::
|
23
|
-
BaseOperation::
|
22
|
+
BaseOperation::DumpMarkupGettextKeysStep.new(haml_source_files, :haml).run
|
23
|
+
BaseOperation::DumpMarkupGettextKeysStep.new(slim_source_files, :slim).run
|
24
24
|
end
|
25
25
|
|
26
26
|
UpdatePotFileStep.new(pot_path, source_files).run(params)
|
@@ -29,9 +29,30 @@ module TranslationIO
|
|
29
29
|
create_yaml_pot_files_step = CreateYamlPoFilesStep.new(source_locale, target_locales, yaml_file_paths)
|
30
30
|
create_yaml_pot_files_step.run(params)
|
31
31
|
|
32
|
-
all_used_yaml_locales
|
32
|
+
all_used_yaml_locales = create_yaml_pot_files_step.all_used_yaml_locales.to_a.map(&:to_s).sort
|
33
|
+
|
34
|
+
warn_source_locale_unfound(source_locale, all_used_yaml_locales)
|
35
|
+
warn_target_locale_unfound(target_locales, all_used_yaml_locales)
|
36
|
+
|
37
|
+
TranslationIO.info "Sending data to server"
|
38
|
+
uri = URI("#{client.endpoint}/projects/#{client.api_key}/init")
|
39
|
+
parsed_response = BaseOperation.perform_request(uri, params)
|
40
|
+
|
41
|
+
unless parsed_response.nil?
|
42
|
+
BaseOperation::SaveNewPoFilesStep.new(target_locales, locales_path, parsed_response).run
|
43
|
+
BaseOperation::SaveNewYamlFilesStep.new(target_locales, yaml_locales_path, parsed_response).run
|
44
|
+
BaseOperation::SaveSpecialYamlFilesStep.new(source_locale, target_locales, yaml_locales_path, yaml_file_paths).run
|
45
|
+
CleanupYamlFilesStep.new(source_locale, target_locales, yaml_file_paths, yaml_locales_path).run
|
46
|
+
BaseOperation::CreateNewMoFilesStep.new(locales_path).run
|
47
|
+
|
48
|
+
info_yaml_directory_structure
|
49
|
+
end
|
50
|
+
|
51
|
+
cleanup
|
52
|
+
end
|
53
|
+
|
54
|
+
def warn_source_locale_unfound(source_locale, all_used_yaml_locales)
|
33
55
|
is_source_locale_unfound = !source_locale.in?(all_used_yaml_locales)
|
34
|
-
unfound_target_locales = target_locales - all_used_yaml_locales
|
35
56
|
|
36
57
|
if is_source_locale_unfound
|
37
58
|
puts
|
@@ -48,12 +69,16 @@ module TranslationIO
|
|
48
69
|
exit(0)
|
49
70
|
end
|
50
71
|
end
|
72
|
+
end
|
51
73
|
|
52
|
-
|
74
|
+
def warn_target_locale_unfound(target_locales, all_used_yaml_locales)
|
75
|
+
target_locales_unfound = target_locales - all_used_yaml_locales
|
76
|
+
|
77
|
+
if target_locales_unfound.any?
|
53
78
|
puts
|
54
79
|
puts "----------"
|
55
80
|
puts "Your `config.target_locales` are [#{target_locales.sort.join(', ')}]."
|
56
|
-
puts "But we haven't found any YAML key for [#{
|
81
|
+
puts "But we haven't found any YAML key for [#{target_locales_unfound.join(', ')}], is this normal?"
|
57
82
|
puts "If not, check that you haven't misspelled the locale (ex. 'en-GB' instead of 'en')."
|
58
83
|
puts "----------"
|
59
84
|
puts "Do you want to continue? (y/N)"
|
@@ -65,26 +90,14 @@ module TranslationIO
|
|
65
90
|
exit(0)
|
66
91
|
end
|
67
92
|
end
|
93
|
+
end
|
68
94
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
BaseOperation::SaveNewYamlFilesStep.new(target_locales, yaml_locales_path, parsed_response).run
|
76
|
-
BaseOperation::SaveSpecialYamlFilesStep.new(source_locale, target_locales, yaml_locales_path, yaml_file_paths).run
|
77
|
-
CleanupYamlFilesStep.new(source_locale, target_locales, yaml_file_paths, yaml_locales_path).run
|
78
|
-
BaseOperation::CreateNewMoFilesStep.new(locales_path).run
|
79
|
-
|
80
|
-
puts
|
81
|
-
puts "----------"
|
82
|
-
puts "If you're wondering why your YAML directory structure has changed so much,"
|
83
|
-
puts "please check this article: https://translation.io/blog/dealing-with-yaml-files-and-their-directory-structure"
|
84
|
-
puts "----------"
|
85
|
-
end
|
86
|
-
|
87
|
-
cleanup
|
95
|
+
def info_yaml_directory_structure
|
96
|
+
puts
|
97
|
+
puts "----------"
|
98
|
+
puts "If you're wondering why your YAML directory structure has changed so much,"
|
99
|
+
puts "please check this article: https://translation.io/blog/dealing-with-yaml-files-and-their-directory-structure"
|
100
|
+
puts "----------"
|
88
101
|
end
|
89
102
|
end
|
90
103
|
end
|
@@ -20,8 +20,8 @@ module TranslationIO
|
|
20
20
|
ApplyYamlSourceEditsStep.new(yaml_file_paths, source_locale).run(params)
|
21
21
|
|
22
22
|
unless config.disable_gettext
|
23
|
-
BaseOperation::
|
24
|
-
BaseOperation::
|
23
|
+
BaseOperation::DumpMarkupGettextKeysStep.new(haml_source_files, :haml).run
|
24
|
+
BaseOperation::DumpMarkupGettextKeysStep.new(slim_source_files, :slim).run
|
25
25
|
end
|
26
26
|
|
27
27
|
UpdatePotFileStep.new(pot_path, source_files).run(params)
|
@@ -1,11 +1,6 @@
|
|
1
1
|
require 'i18n'
|
2
2
|
require 'i18n/config'
|
3
3
|
|
4
|
-
require 'gettext'
|
5
|
-
require 'gettext/po'
|
6
|
-
require 'gettext/po_parser'
|
7
|
-
require 'gettext/tools/xgettext'
|
8
|
-
|
9
4
|
module TranslationIO
|
10
5
|
class Railtie < Rails::Railtie
|
11
6
|
rake_tasks do
|
@@ -28,34 +23,41 @@ module I18n
|
|
28
23
|
def locale=(locale)
|
29
24
|
I18n.enforce_available_locales!(locale) if I18n.respond_to?(:enforce_available_locales!)
|
30
25
|
@locale = locale.to_sym rescue nil
|
31
|
-
|
26
|
+
|
27
|
+
if defined?(GetText)
|
28
|
+
GetText.set_current_locale(locale.to_s.gsub('-', '_').to_sym)
|
29
|
+
else
|
30
|
+
puts "do not set gettext locale because not loaded"
|
31
|
+
end
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
36
|
+
if defined?(GetText)
|
37
|
+
module GetText
|
38
|
+
class POParser < Racc::Parser
|
39
|
+
def initialize
|
40
|
+
@ignore_fuzzy = true
|
41
|
+
@report_warning = false
|
42
|
+
end
|
41
43
|
end
|
42
|
-
end
|
43
44
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
45
|
+
module Tools
|
46
|
+
class XGetText
|
47
|
+
def parse(paths)
|
48
|
+
po = PO.new
|
49
|
+
paths = [paths] if paths.kind_of?(String)
|
50
|
+
paths.each do |path|
|
51
|
+
begin
|
52
|
+
parse_path(path, po)
|
53
|
+
rescue SystemExit => e
|
54
|
+
# puts(_("Error parsing %{path}") % {:path => path})
|
55
|
+
puts
|
56
|
+
puts
|
57
|
+
end
|
56
58
|
end
|
59
|
+
po
|
57
60
|
end
|
58
|
-
po
|
59
61
|
end
|
60
62
|
end
|
61
63
|
end
|
data/lib/translation_io/tasks.rb
CHANGED
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.
|
4
|
+
version: '1.8'
|
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: 2016-
|
12
|
+
date: 2016-07-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: gettext
|
@@ -67,6 +67,20 @@ dependencies:
|
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '4.1'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: codeclimate-test-reporter
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
70
84
|
description: Rails translation made _("simple") with YAML and GetText. Localize your
|
71
85
|
app using either t(".keys") or _("free text") and type "rake translation:sync" to
|
72
86
|
synchronize with your translators.
|
@@ -80,8 +94,7 @@ files:
|
|
80
94
|
- lib/translation_io/client.rb
|
81
95
|
- lib/translation_io/client/base_operation.rb
|
82
96
|
- lib/translation_io/client/base_operation/create_new_mo_files_step.rb
|
83
|
-
- lib/translation_io/client/base_operation/
|
84
|
-
- lib/translation_io/client/base_operation/dump_slim_gettext_keys_step.rb
|
97
|
+
- lib/translation_io/client/base_operation/dump_markup_gettext_keys_step.rb
|
85
98
|
- lib/translation_io/client/base_operation/save_new_po_files_step.rb
|
86
99
|
- lib/translation_io/client/base_operation/save_new_yaml_files_step.rb
|
87
100
|
- lib/translation_io/client/base_operation/save_special_yaml_files_step.rb
|
@@ -1,46 +0,0 @@
|
|
1
|
-
module TranslationIO
|
2
|
-
class Client
|
3
|
-
class BaseOperation
|
4
|
-
class DumpSlimGettextKeysStep
|
5
|
-
def initialize(slim_source_files)
|
6
|
-
@slim_source_files = slim_source_files
|
7
|
-
end
|
8
|
-
|
9
|
-
def run
|
10
|
-
if @slim_source_files.any?
|
11
|
-
TranslationIO.info "Extracting Gettext entries from SLIM files."
|
12
|
-
|
13
|
-
FileUtils.mkdir_p(File.join('tmp', 'translation'))
|
14
|
-
|
15
|
-
extracted_gettext_entries.each_with_index do |entry, index|
|
16
|
-
file_path = File.join('tmp', 'translation', "slim-gettext-#{index.to_s.rjust(8,'0')}.rb")
|
17
|
-
|
18
|
-
File.open(file_path, 'w') do |file|
|
19
|
-
file.puts "def fake"
|
20
|
-
file.puts " #{entry}"
|
21
|
-
file.puts "end"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
protected
|
28
|
-
|
29
|
-
def extracted_gettext_entries
|
30
|
-
entries = []
|
31
|
-
|
32
|
-
@slim_source_files.each do |slim_file_path|
|
33
|
-
TranslationIO.info slim_file_path, 2, 2
|
34
|
-
|
35
|
-
slim_data = File.read(slim_file_path)
|
36
|
-
entries += TranslationIO::Extractor.extract(slim_data)
|
37
|
-
end
|
38
|
-
|
39
|
-
TranslationIO.info "#{entries.size} entries found", 2, 2
|
40
|
-
|
41
|
-
entries
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|