yaml2tmx 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 95411c8753b165a339292a636a11ea54ee20f6db
4
+ data.tar.gz: 3deb030b8d6f647cf5f6e7d216b77f5bce367ee2
5
+ SHA512:
6
+ metadata.gz: affe6c11ca9e7cfe1743e24da3b89ca5b3a534e615cf3db851e2ba54e9533d74a10f3bc39f231f1f9ec43a13e69938aa1462aff998d7409ce26ca5b29f5a324d
7
+ data.tar.gz: 31c86d1bb6b97a75332722cc1f977acef6f9d69d3a62db286985753c89587407cbd4eaa364068f32e7054f6482a36359e3a8b3123ab95531bf9e8790616e4b7d
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'rake'
4
+
5
+ gemspec
@@ -0,0 +1,3 @@
1
+ == 1.0.0
2
+
3
+ * Birthday!
@@ -0,0 +1,7 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
4
+ require 'rubygems/package_task'
5
+ require 'bundler'
6
+
7
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,117 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+ require 'xml-write-stream'
5
+ require 'yaml'
6
+
7
+ $options = {}
8
+
9
+ option_parser = OptionParser.new do |opts|
10
+ opts.banner = "Usage: yaml2tmx [options]"
11
+
12
+ opts.on('-s', '--source [file]', 'YAML file containing phrases in the source locale.') do |source|
13
+ $options[:source] = source
14
+ end
15
+
16
+ opts.on('-t', '--target [file]', 'YAML file containing translations in the target locale.') do |target|
17
+ $options[:target] = target
18
+ end
19
+
20
+ opts.on('-o', '--output [file]', 'The TMX output file to write. If not specified, output is printed to stdout.') do |output|
21
+ $options[:output] = output
22
+ end
23
+
24
+ opts.on('-h', '--help', 'Prints this help message.') do
25
+ puts opts
26
+ exit
27
+ end
28
+ end
29
+
30
+ option_parser.parse!
31
+
32
+ # load source and target phrases
33
+ source_phrases = YAML.load_file($options[:source])
34
+ target_phrases = YAML.load_file($options[:target])
35
+
36
+ source_locale = source_phrases.keys.first
37
+ target_locale = target_phrases.keys.first
38
+
39
+ source_phrases = source_phrases[source_locale]
40
+ target_phrases = target_phrases[target_locale]
41
+
42
+ def each_phrase(phrases, path, &block)
43
+ case phrases
44
+ when Hash
45
+ phrases.each_pair do |key, value|
46
+ each_phrase(value, path + [key], &block)
47
+ end
48
+
49
+ when Array
50
+ phrases.each_with_index do |element, idx|
51
+ each_phrase(element, path + [idx], &block)
52
+ end
53
+
54
+ when String
55
+ yield phrases, path
56
+ end
57
+ end
58
+
59
+ # correlate source and target phrases
60
+ trans_map = {}
61
+
62
+ phrase_count = 0
63
+
64
+ each_phrase(source_phrases, []) do |phrase, path|
65
+ phrase_count += 1
66
+
67
+ translation = path.inject(:start) do |ret, seg|
68
+ if ret == :start
69
+ target_phrases[seg]
70
+ elsif ret
71
+ if seg.is_a?(Numeric) && ret.is_a?(Array)
72
+ ret[seg] # array index case
73
+ elsif seg.is_a?(String) && ret.is_a?(Hash)
74
+ ret[seg] # hash key case
75
+ end
76
+ end
77
+ end
78
+
79
+ trans_map[phrase] = translation if translation
80
+ end
81
+
82
+ STDERR.write("Matched #{trans_map.size} of #{phrase_count} source phrases\n")
83
+
84
+ stream = if $options[:output]
85
+ File.open($options[:output], 'w+')
86
+ else
87
+ STDOUT
88
+ end
89
+
90
+ writer = XmlWriteStream.from_stream(stream)
91
+ writer.open_tag('tmx', version: '1.4')
92
+ writer.open_single_line_tag('header', srclang: source_locale, datatype: 'plaintext', segtype: 'paragraph')
93
+ writer.close_tag
94
+
95
+ writer.open_tag('body')
96
+
97
+ trans_map.each_pair do |source_phrase, target_phrase|
98
+ writer.open_tag('tu')
99
+ writer.open_tag('tuv', 'xml:lang' => source_locale)
100
+ writer.open_single_line_tag('seg')
101
+ writer.write_text(source_phrase)
102
+ writer.close_tag # seg
103
+ writer.close_tag # tuv
104
+
105
+ writer.open_tag('tuv', 'xml:lang' => target_locale)
106
+ writer.open_single_line_tag('seg')
107
+ writer.write_text(target_phrase)
108
+ writer.close_tag # seg
109
+ writer.close_tag # tuv
110
+ writer.close_tag # tu
111
+ end
112
+
113
+ writer.close
114
+
115
+ if $options[:output]
116
+ STDERR.write("Wrote #{$options[:output]}\n")
117
+ end
@@ -0,0 +1,3 @@
1
+ module Yaml2Tmx
2
+ VERSION = '1.0.0'
3
+ end
@@ -0,0 +1,21 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), 'lib')
2
+ require 'yaml2tmx/version'
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "yaml2tmx"
6
+ s.version = ::Yaml2Tmx::VERSION
7
+ s.authors = ["Cameron Dutro"]
8
+ s.email = ["camertron@gmail.com"]
9
+ s.homepage = "http://github.com/camertron"
10
+
11
+ s.description = s.summary = "A command-line tool to convert Rails locale-specific yaml files to the standard TMX format for translation memories."
12
+
13
+ s.platform = Gem::Platform::RUBY
14
+ s.has_rdoc = true
15
+
16
+ s.add_dependency 'xml-write-stream', '~> 1.0'
17
+ s.executables << 'yaml2tmx'
18
+
19
+ s.require_path = 'lib'
20
+ s.files = Dir["{lib,spec}/**/*", "Gemfile", "History.txt", "README.md", "Rakefile", "yaml2tmx.gemspec"]
21
+ end
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: yaml2tmx
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Cameron Dutro
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-01-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: xml-write-stream
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ description: A command-line tool to convert Rails locale-specific yaml files to the
28
+ standard TMX format for translation memories.
29
+ email:
30
+ - camertron@gmail.com
31
+ executables:
32
+ - yaml2tmx
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - Gemfile
37
+ - History.txt
38
+ - Rakefile
39
+ - bin/yaml2tmx
40
+ - lib/yaml2tmx/version.rb
41
+ - yaml2tmx.gemspec
42
+ homepage: http://github.com/camertron
43
+ licenses: []
44
+ metadata: {}
45
+ post_install_message:
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ requirements: []
60
+ rubyforge_project:
61
+ rubygems_version: 2.2.3
62
+ signing_key:
63
+ specification_version: 4
64
+ summary: A command-line tool to convert Rails locale-specific yaml files to the standard
65
+ TMX format for translation memories.
66
+ test_files: []