translatomatic 0.1.1 → 0.1.2

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.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +19 -0
  3. data/.gitignore +0 -0
  4. data/.travis.yml +7 -7
  5. data/.yardopts +9 -0
  6. data/Gemfile +4 -4
  7. data/Guardfile +0 -0
  8. data/README.de.md +61 -16
  9. data/README.es.md +60 -15
  10. data/README.fr.md +61 -16
  11. data/README.it.md +60 -15
  12. data/README.ja.md +59 -14
  13. data/README.ko.md +137 -0
  14. data/README.md +58 -13
  15. data/README.ms.md +137 -0
  16. data/README.pt.md +137 -0
  17. data/README.ru.md +137 -0
  18. data/README.sv.md +137 -0
  19. data/README.zh.md +137 -0
  20. data/bin/setup +8 -8
  21. data/bin/translatomatic +6 -6
  22. data/bin/travis +1 -1
  23. data/config/locales/translatomatic/de.yml +104 -0
  24. data/config/locales/translatomatic/en.yml +101 -0
  25. data/config/locales/translatomatic/es.yml +105 -0
  26. data/config/locales/translatomatic/fr.yml +105 -0
  27. data/config/locales/translatomatic/it.yml +103 -0
  28. data/config/locales/translatomatic/ja.yml +102 -0
  29. data/config/locales/translatomatic/ko.yml +101 -0
  30. data/config/locales/translatomatic/ms.yml +103 -0
  31. data/config/locales/translatomatic/pt.yml +105 -0
  32. data/config/locales/translatomatic/ru.yml +103 -0
  33. data/config/locales/translatomatic/sv.yml +103 -0
  34. data/config/locales/translatomatic/zh.yml +102 -0
  35. data/db/migrate/201712170000_initial.rb +2 -1
  36. data/lib/translatomatic/cli/base.rb +73 -0
  37. data/lib/translatomatic/cli/common_options.rb +14 -0
  38. data/lib/translatomatic/cli/config.rb +81 -0
  39. data/lib/translatomatic/cli/database.rb +29 -0
  40. data/lib/translatomatic/cli/main.rb +112 -0
  41. data/lib/translatomatic/cli/translate.rb +146 -0
  42. data/lib/translatomatic/cli.rb +8 -216
  43. data/lib/translatomatic/config.rb +143 -0
  44. data/lib/translatomatic/converter.rb +196 -149
  45. data/lib/translatomatic/converter_stats.rb +18 -14
  46. data/lib/translatomatic/database.rb +35 -37
  47. data/lib/translatomatic/escaped_unicode.rb +1 -1
  48. data/lib/translatomatic/extractor/base.rb +2 -0
  49. data/lib/translatomatic/extractor/ruby.rb +1 -0
  50. data/lib/translatomatic/extractor.rb +1 -0
  51. data/lib/translatomatic/http_request.rb +43 -14
  52. data/lib/translatomatic/locale.rb +28 -4
  53. data/lib/translatomatic/logger.rb +21 -13
  54. data/lib/translatomatic/model/locale.rb +5 -1
  55. data/lib/translatomatic/model/text.rb +2 -0
  56. data/lib/translatomatic/model.rb +1 -0
  57. data/lib/translatomatic/option.rb +75 -10
  58. data/lib/translatomatic/progress_updater.rb +7 -3
  59. data/lib/translatomatic/resource_file/base.rb +41 -18
  60. data/lib/translatomatic/resource_file/html.rb +11 -14
  61. data/lib/translatomatic/resource_file/markdown.rb +13 -12
  62. data/lib/translatomatic/resource_file/plist.rb +3 -14
  63. data/lib/translatomatic/resource_file/properties.rb +21 -3
  64. data/lib/translatomatic/resource_file/resw.rb +1 -0
  65. data/lib/translatomatic/resource_file/text.rb +1 -0
  66. data/lib/translatomatic/resource_file/xcode_strings.rb +23 -14
  67. data/lib/translatomatic/resource_file/xml.rb +34 -22
  68. data/lib/translatomatic/resource_file/yaml.rb +39 -5
  69. data/lib/translatomatic/resource_file.rb +7 -5
  70. data/lib/translatomatic/string.rb +40 -12
  71. data/lib/translatomatic/tmx/document.rb +11 -12
  72. data/lib/translatomatic/tmx/translation_unit.rb +5 -1
  73. data/lib/translatomatic/tmx.rb +2 -0
  74. data/lib/translatomatic/translation.rb +30 -0
  75. data/lib/translatomatic/translation_result.rb +45 -45
  76. data/lib/translatomatic/translator/base.rb +128 -83
  77. data/lib/translatomatic/translator/frengly.rb +62 -57
  78. data/lib/translatomatic/translator/google.rb +35 -31
  79. data/lib/translatomatic/translator/microsoft.rb +41 -33
  80. data/lib/translatomatic/translator/my_memory.rb +68 -64
  81. data/lib/translatomatic/translator/yandex.rb +56 -39
  82. data/lib/translatomatic/translator.rb +99 -63
  83. data/lib/translatomatic/util.rb +31 -1
  84. data/lib/translatomatic/version.rb +4 -1
  85. data/lib/translatomatic.rb +17 -0
  86. data/translatomatic.gemspec +5 -4
  87. metadata +56 -16
@@ -1,64 +1,68 @@
1
- require 'bing_translator'
2
-
3
- module Translatomatic
4
- module Translator
5
-
6
- class MyMemory < Base
7
-
8
- define_options(
9
- { name: :mymemory_api_key, desc: "MyMemory API key", use_env: true },
10
- { name: :mymemory_email, desc: "Email address", use_env: true }
11
- )
12
-
13
- # Create a new MyMemory translator instance
14
- def initialize(options = {})
15
- super(options)
16
- @key = options[:mymemory_api_key] || ENV["MYMEMORY_API_KEY"]
17
- @email = options[:mymemory_email] || ENV["MYMEMORY_EMAIL"]
18
- @query_options = {}
19
- @query_options.merge!(de: @email) if @email
20
- @query_options.merge!(key: @key) if @key
21
- end
22
-
23
- # TODO: implement language list
24
- # (see Translatomatic::Translator::Base#languages)
25
- #def languages
26
- #end
27
-
28
- # Upload a set of translations to MyMemory
29
- # @param [Translatomatic::TMX::Document] TMX document
30
- def upload(tmx)
31
- request = Translatomatic::HTTPRequest.new(UPLOAD_URL)
32
- request.start do |http|
33
- body = [
34
- request.file(key: :tmx, filename: "import.tmx",
35
- content: tmx.to_xml, mime_type: "application/xml"
36
- ),
37
- request.param(key: :private, value: 0)
38
- ]
39
- response = request.post(body, multipart: true)
40
- log.debug("share response: #{response.body}")
41
- end
42
- end
43
-
44
- private
45
-
46
- GET_URL = 'https://api.mymemory.translated.net/get'
47
- UPLOAD_URL = 'https://api.mymemory.translated.net/tmx/import'
48
-
49
- def perform_translate(strings, from, to)
50
- perform_fetch_translations(GET_URL, strings, from, to)
51
- end
52
-
53
- def fetch_translation(request, string, from, to)
54
- response = request.get({
55
- langpair: from.to_s + "|" + to.to_s,
56
- q: string
57
- }.merge(@query_options)
58
- )
59
- data = JSON.parse(response.body)
60
- data['responseData']['translatedText']
61
- end
62
- end
63
- end
64
- end
1
+ require 'bing_translator'
2
+
3
+ module Translatomatic
4
+ module Translator
5
+
6
+ # Interface to the MyMemory translation API
7
+ # @see https://mymemory.translated.net/doc/
8
+ class MyMemory < Base
9
+
10
+ define_options(
11
+ { name: :mymemory_api_key, desc: t("translator.mymemory_api_key"), use_env: true },
12
+ { name: :mymemory_email, desc: t("translator.email_address"), use_env: true }
13
+ )
14
+
15
+ # Create a new MyMemory translator instance
16
+ def initialize(options = {})
17
+ super(options)
18
+ @key = options[:mymemory_api_key] || ENV["MYMEMORY_API_KEY"]
19
+ @email = options[:mymemory_email] || ENV["MYMEMORY_EMAIL"]
20
+ @query_options = {}
21
+ @query_options.merge!(de: @email) if @email
22
+ @query_options.merge!(key: @key) if @key
23
+ end
24
+
25
+ # TODO: implement language list
26
+ # (see Translatomatic::Translator::Base#languages)
27
+ #def languages
28
+ #end
29
+
30
+ # Upload a set of translations to MyMemory
31
+ # @param tmx [Translatomatic::TMX::Document] TMX document
32
+ # @return [void]
33
+ def upload(tmx)
34
+ request = Translatomatic::HTTPRequest.new(UPLOAD_URL)
35
+ request.start do |http|
36
+ body = [
37
+ request.file(key: :tmx, filename: "import.tmx",
38
+ content: tmx.to_xml, mime_type: "application/xml"
39
+ ),
40
+ request.param(key: :private, value: 0)
41
+ ]
42
+ response = request.post(body, multipart: true)
43
+ log.debug(t("translator.share_response",
44
+ response: response.body.inspect))
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ GET_URL = 'https://api.mymemory.translated.net/get'
51
+ UPLOAD_URL = 'https://api.mymemory.translated.net/tmx/import'
52
+
53
+ def perform_translate(strings, from, to)
54
+ perform_fetch_translations(GET_URL, strings, from, to)
55
+ end
56
+
57
+ def fetch_translation(request, string, from, to)
58
+ response = request.get({
59
+ langpair: from.to_s + "|" + to.to_s,
60
+ q: string # multiple q strings not supported (tested 20180101)
61
+ }.merge(@query_options)
62
+ )
63
+ data = JSON.parse(response.body)
64
+ data['responseData']['translatedText']
65
+ end
66
+ end
67
+ end
68
+ end
@@ -1,39 +1,56 @@
1
- require 'yandex-translator'
2
-
3
- module Translatomatic
4
- module Translator
5
-
6
- class Yandex < Base
7
-
8
- define_options({
9
- name: :yandex_api_key, desc: "Yandex API key", use_env: true
10
- })
11
-
12
- # Create a new Yandex translator instance
13
- def initialize(options = {})
14
- super(options)
15
- key = options[:yandex_api_key] || ENV["YANDEX_API_KEY"]
16
- raise "yandex api key required" if key.nil?
17
- @impl = ::Yandex::Translator.new(key)
18
- end
19
-
20
- # (see Translatomatic::Translator::Base#languages)
21
- def languages
22
- @languages ||= @impl.langs.collect { |i| i[0, 2] }.uniq
23
- end
24
-
25
- private
26
-
27
- def perform_translate(strings, from, to)
28
- translated = []
29
- strings.each do |string|
30
- result = @impl.translate(string, from: from.language, to: to.language) || ""
31
- translated.push(result)
32
- update_translated(result)
33
- end
34
- translated
35
- end
36
-
37
- end # class
38
- end # module
39
- end
1
+ module Translatomatic
2
+ module Translator
3
+
4
+ # Interface to the Yandex translation API
5
+ # @see https://tech.yandex.com/translate/
6
+ class Yandex < Base
7
+
8
+ define_options({
9
+ name: :yandex_api_key, desc: t("translator.yandex_api_key"), use_env: true
10
+ })
11
+
12
+ # Create a new Yandex translator instance
13
+ def initialize(options = {})
14
+ super(options)
15
+ @api_key = options[:yandex_api_key] || ENV["YANDEX_API_KEY"]
16
+ raise t("translator.yandex_key_required") if @api_key.nil?
17
+ end
18
+
19
+ # (see Translatomatic::Translator::Base#languages)
20
+ def languages
21
+ @languages ||= begin
22
+ request = Translatomatic::HTTPRequest.new(LANGUAGES_URL)
23
+ response = request.post(key: @api_key, ui: "en")
24
+ data = JSON.parse(response.body) || {}
25
+ langs = data["langs"] || {}
26
+ langs.keys.flatten.uniq
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ TRANSLATE_URL = 'https://translate.yandex.net/api/v1.5/tr.json/translate'
33
+ LANGUAGES_URL = 'https://translate.yandex.net/api/v1.5/tr.json/getLangs'
34
+
35
+ def perform_translate(strings, from, to)
36
+ attempt_with_retries(3) do
37
+ fetch_translations(strings, from, to)
38
+ end
39
+ end
40
+
41
+ def fetch_translations(strings, from, to)
42
+ request = Translatomatic::HTTPRequest.new(TRANSLATE_URL)
43
+ body = {
44
+ key: @api_key,
45
+ text: strings,
46
+ lang: from.language + "-" + to.language,
47
+ format: "plain"
48
+ }
49
+ response = request.post(body)
50
+ data = JSON.parse(response.body)
51
+ data['text']
52
+ end
53
+
54
+ end # class
55
+ end # module
56
+ end
@@ -1,63 +1,99 @@
1
- require 'translatomatic/translator/base'
2
- require 'translatomatic/translator/yandex'
3
- require 'translatomatic/translator/google'
4
- require 'translatomatic/translator/microsoft'
5
- require 'translatomatic/translator/frengly'
6
- require 'translatomatic/translator/my_memory'
7
-
8
- module Translatomatic::Translator
9
-
10
- class << self
11
- include Translatomatic::Util
12
- end
13
-
14
- # @return [Class] The translator class corresponding to the given name
15
- def self.find(name)
16
- name ? self.const_get(name) : nil
17
- end
18
-
19
- # @return [List<Class>] A list of all translator classes
20
- def self.modules
21
- self.constants.collect { |c| self.const_get(c) }.select do |klass|
22
- klass.is_a?(Class) && klass != Translatomatic::Translator::Base
23
- end
24
- end
25
-
26
- # @return [List<String>] A list of all translators
27
- def self.names
28
- modules.collect { |i| i.name.demodulize }
29
- end
30
-
31
- # Find all configured translators
32
- # @param [Hash<String,String>] options Translator options
33
- # @return [Array<#translate>] A list of translator instances
34
- def self.available(options = {})
35
- available = []
36
- modules.each do |mod|
37
- begin
38
- translator = mod.new(options)
39
- available << translator
40
- rescue Exception
41
- log.debug("translator #{mod.name.demodulize} is unavailable")
42
- end
43
- end
44
- available
45
- end
46
-
47
- # @return [String] A description of all translators and options
48
- def self.list
49
- out = "Translators:\n"
50
- modules.each do |mod|
51
- out += "\n" + mod.name.demodulize + ":\n"
52
- opts = mod.options
53
- opts.each do |opt|
54
- optname = opt.name.to_s.gsub("_", "-")
55
- out += " --%-18s %18s %10s %15s\n" % [optname, opt.description,
56
- opt.required ? "(required)" : "",
57
- opt.use_env ? "ENV[#{opt.name.upcase}]" : ""]
58
- end
59
- end
60
- out + "\n"
61
- end
62
-
63
- end
1
+ require 'translatomatic/translator/base'
2
+ require 'translatomatic/translator/yandex'
3
+ require 'translatomatic/translator/google'
4
+ require 'translatomatic/translator/microsoft'
5
+ require 'translatomatic/translator/frengly'
6
+ require 'translatomatic/translator/my_memory'
7
+
8
+ # Provides methods to access and create instances of
9
+ # interfaces to translation APIs.
10
+ module Translatomatic::Translator
11
+
12
+ class << self
13
+ include Translatomatic::Util
14
+ end
15
+
16
+ # @return [Class] The translator class corresponding to the given name
17
+ def self.find(name)
18
+ name && !name.empty? ? self.const_get(name) : nil
19
+ end
20
+
21
+ # Resolve the given list of translator names to a list of translators.
22
+ # If the list is empty, return all translators that are configured.
23
+ # @param list [Array<String>] Translator names or translators
24
+ # @param options [Hash<String,String>] Translator options
25
+ # @return [Array<Translatomatic::Translator::Base>] Translators
26
+ def self.resolve(list, options = {})
27
+ list = [list] unless list.kind_of?(Array)
28
+ list = list.compact.collect do |translator|
29
+ if translator.respond_to?(:translate)
30
+ translator
31
+ else
32
+ klass = Translatomatic::Translator.find(translator)
33
+ translator = klass.new(options)
34
+ end
35
+ translator
36
+ end
37
+
38
+ if list.empty?
39
+ # find all available translators that work with the given options
40
+ list = Translatomatic::Translator.available(options)
41
+ if list.empty?
42
+ raise t("cli.no_translators")
43
+ end
44
+ end
45
+ list
46
+ end
47
+
48
+ # @return [List<Class>] A list of all translator classes
49
+ def self.modules
50
+ self.constants.collect { |c| self.const_get(c) }.select do |klass|
51
+ klass.is_a?(Class) && klass != Translatomatic::Translator::Base
52
+ end
53
+ end
54
+
55
+ # @return [List<String>] A list of all translators
56
+ def self.names
57
+ modules.collect { |i| i.name.demodulize }
58
+ end
59
+
60
+ # Find all configured translators
61
+ # @param options [Hash<String,String>] Translator options
62
+ # @return [Array<#translate>] A list of translator instances
63
+ def self.available(options = {})
64
+ available = []
65
+ modules.each do |mod|
66
+ begin
67
+ translator = mod.new(options)
68
+ available << translator
69
+ rescue Exception
70
+ log.debug(t("translator.unavailable", name: mod.name.demodulize))
71
+ end
72
+ end
73
+ available
74
+ end
75
+
76
+ # @return [String] A description of all translators and options
77
+ def self.list
78
+ out = t("translator.translators") + "\n"
79
+ modules.each do |mod|
80
+ out += "\n" + mod.name.demodulize + ":\n"
81
+ opts = mod.options
82
+ opts.each do |opt|
83
+ optname = opt.name.to_s.gsub("_", "-")
84
+ out += " --%-18s %18s %10s %15s\n" % [optname, opt.description,
85
+ opt.required ? t("translator.required_option") : "",
86
+ opt.use_env ? "ENV[#{opt.name.upcase}]" : ""]
87
+ end
88
+ end
89
+ out += "\n"
90
+ out += t("translator.configured") + "\n"
91
+ configured = available
92
+ configured.each do |translator|
93
+ out += " " + translator.name + "\n"
94
+ end
95
+ out += t("translator.no_translators") if configured.empty?
96
+ out + "\n"
97
+ end
98
+
99
+ end
@@ -1,6 +1,30 @@
1
-
1
+ # Utility functions, used internally
2
2
  module Translatomatic::Util
3
3
 
4
+ private
5
+
6
+ # @!visibility private
7
+ module CommonMethods
8
+ private
9
+ def t(key, options = {})
10
+ tkey = "translatomatic.#{key}"
11
+ raise "missing translation: #{tkey}" unless I18n.exists?(tkey)
12
+ I18n.t(tkey, options)
13
+ end
14
+ end
15
+
16
+ include CommonMethods
17
+
18
+ # @!visibility private
19
+ module ClassMethods
20
+ private
21
+ include CommonMethods
22
+ end
23
+
24
+ def self.included(klass)
25
+ klass.extend(ClassMethods)
26
+ end
27
+
4
28
  def log
5
29
  Translatomatic::Config.instance.logger
6
30
  end
@@ -12,4 +36,10 @@ module Translatomatic::Util
12
36
  def string(value, locale)
13
37
  Translatomatic::String.new(value, locale)
14
38
  end
39
+
40
+ def hashify(list)
41
+ hash = {}
42
+ list.each { |i| hash[i.to_s] = i }
43
+ hash
44
+ end
15
45
  end
@@ -1,4 +1,7 @@
1
1
  module Translatomatic
2
- VERSION = "0.1.1"
2
+ # @return [String] Gem version
3
+ VERSION = "0.1.2"
4
+
5
+ # @return [String] Homepage
3
6
  URL = "https://github.com/smugglys/translatomatic"
4
7
  end
@@ -1,7 +1,23 @@
1
+ require 'i18n'
2
+ require 'rails-i18n'
3
+
4
+ # Module containing all of the translation goodness
1
5
  module Translatomatic
6
+ # @return [Translatomatic::Config] configuration
2
7
  def self.config
3
8
  @config ||= Translatomatic::Config.new
4
9
  end
10
+
11
+ private
12
+
13
+ def self.init_i18n(lib_path)
14
+ locale_path = File.join(File.dirname(lib_path), "..", "config", "locales")
15
+ I18n.load_path += Dir[File.join(locale_path, "**", "*.yml")]
16
+ end
17
+ end
18
+
19
+ begin
20
+ Translatomatic.init_i18n(__FILE__)
5
21
  end
6
22
 
7
23
  require 'pathname'
@@ -13,6 +29,7 @@ require 'ruby-progressbar'
13
29
  require 'translatomatic/option'
14
30
  require 'translatomatic/locale'
15
31
  require 'translatomatic/string'
32
+ require 'translatomatic/translation'
16
33
  require 'translatomatic/util'
17
34
  require 'translatomatic/version'
18
35
  require 'translatomatic/logger'
@@ -27,18 +27,19 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency "rspec", "~> 3.0"
28
28
  spec.add_development_dependency "rspec-mocks", "~> 3.0"
29
29
  spec.add_development_dependency "simplecov"
30
- spec.add_development_dependency "webmock"
30
+ spec.add_development_dependency "webmock"
31
31
  spec.add_development_dependency "factory_bot" # RIP girl
32
32
 
33
33
  spec.add_dependency "thor", "~> 0.20"
34
- spec.add_dependency "yandex-translator"
35
34
  spec.add_dependency "easy_translate"
36
35
  spec.add_dependency "bing_translator", "~> 5.1.0"
37
36
  spec.add_dependency "activerecord", "~> 5.0"
38
37
  spec.add_dependency "i18n"
39
38
  spec.add_dependency "i18n_data"
39
+ spec.add_dependency "rails-i18n", '~> 5.0.0' # For 5.0.x and 5.1.x
40
40
  spec.add_dependency "nokogiri"
41
- spec.add_dependency "ruby-progressbar"
42
- spec.add_dependency "kramdown" # markdown -> html
41
+ spec.add_dependency "ruby-progressbar"
42
+ spec.add_dependency "kramdown" # markdown -> html
43
43
  spec.add_dependency "reverse_markdown" # html -> markdown
44
+ spec.add_dependency "concurrent-ruby"
44
45
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: translatomatic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-28 00:00:00.000000000 Z
11
+ date: 2018-01-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -122,20 +122,6 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0.20'
125
- - !ruby/object:Gem::Dependency
126
- name: yandex-translator
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :runtime
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
125
  - !ruby/object:Gem::Dependency
140
126
  name: easy_translate
141
127
  requirement: !ruby/object:Gem::Requirement
@@ -206,6 +192,20 @@ dependencies:
206
192
  - - ">="
207
193
  - !ruby/object:Gem::Version
208
194
  version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: rails-i18n
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: 5.0.0
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: 5.0.0
209
209
  - !ruby/object:Gem::Dependency
210
210
  name: nokogiri
211
211
  requirement: !ruby/object:Gem::Requirement
@@ -262,6 +262,20 @@ dependencies:
262
262
  - - ">="
263
263
  - !ruby/object:Gem::Version
264
264
  version: '0'
265
+ - !ruby/object:Gem::Dependency
266
+ name: concurrent-ruby
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - ">="
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ type: :runtime
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ version: '0'
265
279
  description:
266
280
  email:
267
281
  - contact@smugglys.com
@@ -274,6 +288,7 @@ files:
274
288
  - ".gitignore"
275
289
  - ".rspec"
276
290
  - ".travis.yml"
291
+ - ".yardopts"
277
292
  - CODE_OF_CONDUCT.md
278
293
  - Gemfile
279
294
  - Guardfile
@@ -283,16 +298,40 @@ files:
283
298
  - README.fr.md
284
299
  - README.it.md
285
300
  - README.ja.md
301
+ - README.ko.md
286
302
  - README.md
303
+ - README.ms.md
304
+ - README.pt.md
305
+ - README.ru.md
306
+ - README.sv.md
307
+ - README.zh.md
287
308
  - Rakefile
288
309
  - bin/console
289
310
  - bin/setup
290
311
  - bin/translatomatic
291
312
  - bin/travis
313
+ - config/locales/translatomatic/de.yml
314
+ - config/locales/translatomatic/en.yml
315
+ - config/locales/translatomatic/es.yml
316
+ - config/locales/translatomatic/fr.yml
317
+ - config/locales/translatomatic/it.yml
318
+ - config/locales/translatomatic/ja.yml
319
+ - config/locales/translatomatic/ko.yml
320
+ - config/locales/translatomatic/ms.yml
321
+ - config/locales/translatomatic/pt.yml
322
+ - config/locales/translatomatic/ru.yml
323
+ - config/locales/translatomatic/sv.yml
324
+ - config/locales/translatomatic/zh.yml
292
325
  - db/database.yml
293
326
  - db/migrate/201712170000_initial.rb
294
327
  - lib/translatomatic.rb
295
328
  - lib/translatomatic/cli.rb
329
+ - lib/translatomatic/cli/base.rb
330
+ - lib/translatomatic/cli/common_options.rb
331
+ - lib/translatomatic/cli/config.rb
332
+ - lib/translatomatic/cli/database.rb
333
+ - lib/translatomatic/cli/main.rb
334
+ - lib/translatomatic/cli/translate.rb
296
335
  - lib/translatomatic/config.rb
297
336
  - lib/translatomatic/converter.rb
298
337
  - lib/translatomatic/converter_stats.rb
@@ -324,6 +363,7 @@ files:
324
363
  - lib/translatomatic/tmx.rb
325
364
  - lib/translatomatic/tmx/document.rb
326
365
  - lib/translatomatic/tmx/translation_unit.rb
366
+ - lib/translatomatic/translation.rb
327
367
  - lib/translatomatic/translation_result.rb
328
368
  - lib/translatomatic/translator.rb
329
369
  - lib/translatomatic/translator/base.rb