konjac 0.1.7 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- data/konjac.gemspec +1 -0
- data/lib/konjac/cli.rb +53 -38
- data/lib/konjac/config.rb +48 -0
- data/lib/konjac/utils.rb +10 -0
- data/lib/konjac/version.rb +1 -1
- data/lib/konjac.rb +4 -0
- data/locales/en.yml +30 -0
- data/locales/ja.yml +30 -0
- data/spec/cli_spec.rb +1 -1
- metadata +33 -19
data/konjac.gemspec
CHANGED
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
|
+
s.add_runtime_dependency "i18n"
|
21
22
|
s.add_runtime_dependency "nokogiri"
|
22
23
|
s.add_runtime_dependency "term-ansicolor"
|
23
24
|
s.add_runtime_dependency "trollop"
|
data/lib/konjac/cli.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "term/ansicolor"
|
2
2
|
require "trollop"
|
3
|
+
require "yaml"
|
3
4
|
|
4
5
|
module Konjac
|
5
6
|
module CLI
|
@@ -8,94 +9,108 @@ module Konjac
|
|
8
9
|
end
|
9
10
|
|
10
11
|
class << self
|
11
|
-
SUB_COMMANDS =
|
12
|
-
"add" => "Add a definition to translation memory",
|
13
|
-
"edit" => "Edit the tags file for a .docx file",
|
14
|
-
"export" => "Export text tags from a .docx file",
|
15
|
-
"import" => "Import text tags into a .docx file",
|
16
|
-
"translate" => "Translate a file according to ~/.konjac/dict.yml"
|
17
|
-
}
|
12
|
+
SUB_COMMANDS = ["add", "edit", "export", "import", "language", "translate"]
|
18
13
|
BANNER = <<-eos
|
14
|
+
#{Color.bold { Color.underscore { "KONJAC" } }}
|
15
|
+
|
19
16
|
#{Color.bold "%s"}
|
20
17
|
|
21
|
-
#{Color.bold
|
22
|
-
konjac %s [#{Color.underscore
|
23
|
-
|
18
|
+
#{Color.bold I18n.t :usage}
|
19
|
+
konjac %s [#{Color.underscore I18n.t :options}] <#{I18n.t :filenames}>+%s
|
20
|
+
#{I18n.t(:where_options) % Color.underscore(I18n.t(:options))}
|
24
21
|
eos
|
25
22
|
|
26
23
|
def start
|
24
|
+
ARGV << "-h" if ARGV.empty?
|
27
25
|
global_opts = Trollop::options do
|
28
|
-
version "konjac #{Konjac::VERSION} (c) 2012
|
26
|
+
version "konjac #{Konjac::VERSION} (c) 2012 " + I18n.t(:me)
|
29
27
|
banner BANNER % [
|
30
|
-
|
31
|
-
|
32
|
-
"
|
33
|
-
|
34
|
-
Konjac::CLI.describe_subcommands
|
28
|
+
I18n.t(:banner),
|
29
|
+
"[#{Color.underscore I18n.t :subcommand}]",
|
30
|
+
"\n\n" + (I18n.t(:where_subcommand) % Color.underscore(I18n.t(:subcommand))) + ("\n%s\n" %
|
31
|
+
Konjac::CLI.describe_subcommands)
|
35
32
|
]
|
36
|
-
opt :dry_run,
|
37
|
-
opt :quiet,
|
38
|
-
|
33
|
+
opt :dry_run, I18n.t(:dry_run, :scope => :opts), :short => "n"
|
34
|
+
opt :quiet, I18n.t(:quiet, :scope => :opts)
|
35
|
+
opt :version, I18n.t(:version, :scope => :opts)
|
36
|
+
opt :help, I18n.t(:help, :scope => :opts)
|
37
|
+
stop_on SUB_COMMANDS
|
39
38
|
end
|
40
39
|
|
41
40
|
# Get subcommand
|
42
41
|
cmd = ARGV.shift
|
43
|
-
sc_banner = BANNER % [
|
42
|
+
sc_banner = BANNER % [I18n.t(cmd, :scope => :subcommands), cmd, "\n"]
|
44
43
|
cmd_opts = case cmd
|
45
44
|
when "add"
|
46
45
|
opts = Trollop::options do
|
47
46
|
banner sc_banner
|
48
|
-
opt :original,
|
49
|
-
opt :translation,
|
50
|
-
opt :from,
|
51
|
-
opt :to,
|
52
|
-
opt :using,
|
47
|
+
opt :original, I18n.t(:original, :scope => :opts), :type => :string
|
48
|
+
opt :translation, I18n.t(:translation, :scope => :opts), :type => :string, :short => :r
|
49
|
+
opt :from, I18n.t(:from, :scope => :opts), :type => :string
|
50
|
+
opt :to, I18n.t(:to, :scope => :opts), :type => :string
|
51
|
+
opt :using, I18n.t(:using, :scope => :opts), :type => :string,
|
53
52
|
:default => "dict", :multi => true
|
53
|
+
opt :help, I18n.t(:help, :scope => :opts)
|
54
54
|
end
|
55
55
|
Dictionary.add_word opts
|
56
56
|
when "edit"
|
57
57
|
Trollop::options do
|
58
58
|
banner sc_banner
|
59
|
-
opt :editor,
|
59
|
+
opt :editor, I18n.t(:editor, :scope => :opts), :type => :string
|
60
|
+
opt :help, I18n.t(:help, :scope => :opts)
|
60
61
|
end
|
61
62
|
Word.edit_docx_tags ARGV, opts
|
62
63
|
when "export"
|
63
64
|
opts = Trollop::options do
|
64
65
|
banner sc_banner
|
65
|
-
opt :from,
|
66
|
-
opt :to,
|
67
|
-
opt :using,
|
66
|
+
opt :from, I18n.t(:from, :scope => :opts), :type => :string
|
67
|
+
opt :to, I18n.t(:to, :scope => :opts), :type => :string
|
68
|
+
opt :using, I18n.t(:using, :scope => :opts), :type => :string,
|
68
69
|
:default => "dict", :multi => true
|
70
|
+
opt :help, I18n.t(:help, :scope => :opts)
|
69
71
|
end
|
70
72
|
Word.export_docx_tags ARGV, opts
|
71
73
|
when "import"
|
72
74
|
Trollop::options do
|
73
75
|
banner sc_banner
|
76
|
+
opt :help, I18n.t(:help, :scope => :opts)
|
74
77
|
end
|
75
78
|
Word.import_docx_tags ARGV
|
79
|
+
when "language"
|
80
|
+
Trollop::options do
|
81
|
+
banner sc_banner
|
82
|
+
opt :help, I18n.t(:help, :scope => :opts)
|
83
|
+
end
|
84
|
+
Config.language = ARGV[0]
|
85
|
+
Config.save
|
76
86
|
when "translate"
|
77
87
|
opts = Trollop::options do
|
78
88
|
banner sc_banner
|
79
|
-
opt :from,
|
80
|
-
opt :to,
|
81
|
-
opt :using,
|
89
|
+
opt :from, I18n.t(:from, :scope => :opts), :type => :string
|
90
|
+
opt :to, I18n.t(:to, :scope => :opts), :type => :string
|
91
|
+
opt :using, I18n.t(:using, :scope => :opts), :type => :string,
|
82
92
|
:default => "dict", :multi => true
|
83
|
-
opt :use_cache,
|
84
|
-
opt :word,
|
93
|
+
opt :use_cache, I18n.t(:use_cache, :scope => :opts), :default => false
|
94
|
+
opt :word, I18n.t(:word, :scope => :opts), :default => false
|
95
|
+
opt :help, I18n.t(:help, :scope => :opts)
|
85
96
|
end
|
86
97
|
result = translate(ARGV, opts)
|
87
98
|
puts result if opts[:word]
|
88
99
|
else
|
89
|
-
|
100
|
+
if global_opts[:quiet]
|
101
|
+
raise SystemExit
|
102
|
+
else
|
103
|
+
Trollop::die I18n.t(:unknown_subcommand) % cmd.inspect
|
104
|
+
end
|
90
105
|
end
|
91
106
|
end
|
92
107
|
|
93
108
|
# Describe the subcommands available to the command line interface
|
94
109
|
def describe_subcommands
|
95
110
|
text = []
|
96
|
-
leftcol_width = SUB_COMMANDS.
|
97
|
-
SUB_COMMANDS.each do |sc
|
98
|
-
text << " %#{leftcol_width}s: %s" % [sc,
|
111
|
+
leftcol_width = SUB_COMMANDS.map(&:length).max
|
112
|
+
SUB_COMMANDS.each do |sc|
|
113
|
+
text << " %#{leftcol_width}s: %s" % [sc, I18n.t(sc, :scope => :subcommands)]
|
99
114
|
end
|
100
115
|
text.join "\n"
|
101
116
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require "yaml"
|
2
|
+
|
3
|
+
module Konjac
|
4
|
+
module Config
|
5
|
+
class << self
|
6
|
+
CONFIG_PATH = File.expand_path("~/.konjac/config.yml")
|
7
|
+
|
8
|
+
def load
|
9
|
+
Utils.verify_file CONFIG_PATH, "--- {}"
|
10
|
+
config = YAML.load_file(CONFIG_PATH)
|
11
|
+
config = {} unless config.is_a?(Hash)
|
12
|
+
@opts = {
|
13
|
+
:language => :en
|
14
|
+
}.merge config
|
15
|
+
|
16
|
+
set_language
|
17
|
+
save
|
18
|
+
end
|
19
|
+
|
20
|
+
def language
|
21
|
+
@opts[:language]
|
22
|
+
end
|
23
|
+
|
24
|
+
def language=(lang)
|
25
|
+
@opts[:language] = Language.find(lang).to_sym || @opts[:language]
|
26
|
+
save
|
27
|
+
end
|
28
|
+
|
29
|
+
def save
|
30
|
+
File.open(CONFIG_PATH, "w") do |file|
|
31
|
+
YAML.dump @opts, file
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def set_language
|
38
|
+
I18n.load_path = Dir[File.join(File.dirname(__FILE__), "..", "..", "locales", "*.yml")]
|
39
|
+
I18n.default_locale = :en
|
40
|
+
if I18n.available_locales.include?(@opts[:language])
|
41
|
+
I18n.locale = @opts[:language]
|
42
|
+
else
|
43
|
+
I18n.locale = I18n.default_locale
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/konjac/utils.rb
CHANGED
@@ -36,6 +36,16 @@ module Konjac
|
|
36
36
|
end
|
37
37
|
parsed_files.uniq
|
38
38
|
end
|
39
|
+
|
40
|
+
# Verifies that a file exists, writing initial content to it if not
|
41
|
+
def verify_file(path, initial_content = "")
|
42
|
+
unless File.exists?(path)
|
43
|
+
FileUtils.mkdir_p File.dirname(path)
|
44
|
+
File.open(path, "w") do |file|
|
45
|
+
file.puts initial_content
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
39
49
|
end
|
40
50
|
end
|
41
51
|
end
|
data/lib/konjac/version.rb
CHANGED
data/lib/konjac.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
require "konjac/version"
|
2
2
|
require "konjac/exception"
|
3
3
|
autoload :FileUtils, "fileutils"
|
4
|
+
autoload :I18n, "i18n"
|
4
5
|
autoload :Nokogiri, "nokogiri"
|
5
6
|
|
6
7
|
module Konjac
|
7
8
|
# Set up autoload for all modules
|
8
9
|
autoload :CLI, "konjac/cli"
|
10
|
+
autoload :Config, "konjac/config"
|
9
11
|
autoload :Dictionary, "konjac/dictionary"
|
10
12
|
autoload :Language, "konjac/language"
|
11
13
|
autoload :Tag, "konjac/tag"
|
@@ -13,4 +15,6 @@ module Konjac
|
|
13
15
|
autoload :Translator, "konjac/translator"
|
14
16
|
autoload :Utils, "konjac/utils"
|
15
17
|
autoload :Word, "konjac/word"
|
18
|
+
|
19
|
+
Config.load
|
16
20
|
end
|
data/locales/en.yml
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
en:
|
2
|
+
banner: konjac is a Ruby command-line utility for translating files using a YAML wordlist
|
3
|
+
filenames: filenames
|
4
|
+
me: Bryan McKelvey
|
5
|
+
options: options
|
6
|
+
subcommand: subcommand
|
7
|
+
unknown_subcommand: "Unknown subcommand: %s"
|
8
|
+
usage: "Usage:"
|
9
|
+
where_options: "where [%s] are:"
|
10
|
+
where_subcommand: "where [%s] is any one of:"
|
11
|
+
opts:
|
12
|
+
dry_run: Don't actually do anything
|
13
|
+
editor: A command to run to pass the file to an editor (e.g. vi %s)
|
14
|
+
from: The language from which to translate
|
15
|
+
help: Show this message
|
16
|
+
original: The untranslated original text
|
17
|
+
quiet: Suppress error messages
|
18
|
+
to: The language into which to translate
|
19
|
+
translation: The translated text
|
20
|
+
using: The names of dictionaries to use
|
21
|
+
use_cache: Use cached dictionary
|
22
|
+
version: Print version and exit
|
23
|
+
word: Translate a word or phrase
|
24
|
+
subcommands:
|
25
|
+
add: Add a definition to translation memory
|
26
|
+
edit: Edit the tags file for a .docx file
|
27
|
+
export: Export text tags from a .docx file
|
28
|
+
import: Import text tags into a .docx file
|
29
|
+
language: Sets the default language
|
30
|
+
translate: Translate a file, word or phrase
|
data/locales/ja.yml
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
ja:
|
2
|
+
banner: konjacはYAML辞書でファイルを翻訳するRubyのコマンドライン・ユーティリティです。
|
3
|
+
filenames: ファイル名
|
4
|
+
me: ブライアン・マッケルビー
|
5
|
+
options: オプション
|
6
|
+
subcommand: サブコマンド
|
7
|
+
unknown_subcommand: 不明なサブコマンド:%s
|
8
|
+
usage: 使い方:
|
9
|
+
where_options: "使用できる[%s]は"
|
10
|
+
where_subcommand: "使用できる[%s]は"
|
11
|
+
opts:
|
12
|
+
dry_run: 何もしない
|
13
|
+
editor: 結果ファイルをエディターで開くコマンド(例:vi %s)
|
14
|
+
from: 原文の言語
|
15
|
+
help: このメッセージを表示する
|
16
|
+
original: 翻訳されなかった元の言語の言葉
|
17
|
+
quiet: エラーメッセージを抑止する
|
18
|
+
to: 訳文の言語
|
19
|
+
translation: 翻訳された言葉
|
20
|
+
using: 使用したい辞書の名前
|
21
|
+
use_cache: キャッシュした辞書を使用する
|
22
|
+
version: バーションを表示し終了する
|
23
|
+
word: 文字列を翻訳する
|
24
|
+
subcommands:
|
25
|
+
add: 翻訳メモリに定義を追加する
|
26
|
+
edit: .docxファイルに当たるタグファイルを編集する
|
27
|
+
export: .docxファイルからタグを抽出する
|
28
|
+
import: .docxファイルにタグをインポートする
|
29
|
+
language: 言語を設定する
|
30
|
+
translate: ファイル・文字列を翻訳する
|
data/spec/cli_spec.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: konjac
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,9 +11,20 @@ bindir: bin
|
|
11
11
|
cert_chain: []
|
12
12
|
date: 2012-01-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: i18n
|
16
|
+
requirement: &70296439418000 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70296439418000
|
14
25
|
- !ruby/object:Gem::Dependency
|
15
26
|
name: nokogiri
|
16
|
-
requirement: &
|
27
|
+
requirement: &70296439417580 !ruby/object:Gem::Requirement
|
17
28
|
none: false
|
18
29
|
requirements:
|
19
30
|
- - ! '>='
|
@@ -21,10 +32,10 @@ dependencies:
|
|
21
32
|
version: '0'
|
22
33
|
type: :runtime
|
23
34
|
prerelease: false
|
24
|
-
version_requirements: *
|
35
|
+
version_requirements: *70296439417580
|
25
36
|
- !ruby/object:Gem::Dependency
|
26
37
|
name: term-ansicolor
|
27
|
-
requirement: &
|
38
|
+
requirement: &70296439417160 !ruby/object:Gem::Requirement
|
28
39
|
none: false
|
29
40
|
requirements:
|
30
41
|
- - ! '>='
|
@@ -32,10 +43,10 @@ dependencies:
|
|
32
43
|
version: '0'
|
33
44
|
type: :runtime
|
34
45
|
prerelease: false
|
35
|
-
version_requirements: *
|
46
|
+
version_requirements: *70296439417160
|
36
47
|
- !ruby/object:Gem::Dependency
|
37
48
|
name: trollop
|
38
|
-
requirement: &
|
49
|
+
requirement: &70296439416740 !ruby/object:Gem::Requirement
|
39
50
|
none: false
|
40
51
|
requirements:
|
41
52
|
- - ! '>='
|
@@ -43,10 +54,10 @@ dependencies:
|
|
43
54
|
version: '0'
|
44
55
|
type: :runtime
|
45
56
|
prerelease: false
|
46
|
-
version_requirements: *
|
57
|
+
version_requirements: *70296439416740
|
47
58
|
- !ruby/object:Gem::Dependency
|
48
59
|
name: autotest
|
49
|
-
requirement: &
|
60
|
+
requirement: &70296439442300 !ruby/object:Gem::Requirement
|
50
61
|
none: false
|
51
62
|
requirements:
|
52
63
|
- - ! '>='
|
@@ -54,10 +65,10 @@ dependencies:
|
|
54
65
|
version: '0'
|
55
66
|
type: :development
|
56
67
|
prerelease: false
|
57
|
-
version_requirements: *
|
68
|
+
version_requirements: *70296439442300
|
58
69
|
- !ruby/object:Gem::Dependency
|
59
70
|
name: autotest-fsevent
|
60
|
-
requirement: &
|
71
|
+
requirement: &70296439441680 !ruby/object:Gem::Requirement
|
61
72
|
none: false
|
62
73
|
requirements:
|
63
74
|
- - ! '>='
|
@@ -65,10 +76,10 @@ dependencies:
|
|
65
76
|
version: '0'
|
66
77
|
type: :development
|
67
78
|
prerelease: false
|
68
|
-
version_requirements: *
|
79
|
+
version_requirements: *70296439441680
|
69
80
|
- !ruby/object:Gem::Dependency
|
70
81
|
name: autotest-growl
|
71
|
-
requirement: &
|
82
|
+
requirement: &70296439441000 !ruby/object:Gem::Requirement
|
72
83
|
none: false
|
73
84
|
requirements:
|
74
85
|
- - ! '>='
|
@@ -76,10 +87,10 @@ dependencies:
|
|
76
87
|
version: '0'
|
77
88
|
type: :development
|
78
89
|
prerelease: false
|
79
|
-
version_requirements: *
|
90
|
+
version_requirements: *70296439441000
|
80
91
|
- !ruby/object:Gem::Dependency
|
81
92
|
name: bundler
|
82
|
-
requirement: &
|
93
|
+
requirement: &70296439440460 !ruby/object:Gem::Requirement
|
83
94
|
none: false
|
84
95
|
requirements:
|
85
96
|
- - ! '>='
|
@@ -87,10 +98,10 @@ dependencies:
|
|
87
98
|
version: '0'
|
88
99
|
type: :development
|
89
100
|
prerelease: false
|
90
|
-
version_requirements: *
|
101
|
+
version_requirements: *70296439440460
|
91
102
|
- !ruby/object:Gem::Dependency
|
92
103
|
name: rspec
|
93
|
-
requirement: &
|
104
|
+
requirement: &70296439439480 !ruby/object:Gem::Requirement
|
94
105
|
none: false
|
95
106
|
requirements:
|
96
107
|
- - ! '>='
|
@@ -98,10 +109,10 @@ dependencies:
|
|
98
109
|
version: '0'
|
99
110
|
type: :development
|
100
111
|
prerelease: false
|
101
|
-
version_requirements: *
|
112
|
+
version_requirements: *70296439439480
|
102
113
|
- !ruby/object:Gem::Dependency
|
103
114
|
name: sdoc
|
104
|
-
requirement: &
|
115
|
+
requirement: &70296439437560 !ruby/object:Gem::Requirement
|
105
116
|
none: false
|
106
117
|
requirements:
|
107
118
|
- - ! '>='
|
@@ -109,7 +120,7 @@ dependencies:
|
|
109
120
|
version: '0'
|
110
121
|
type: :development
|
111
122
|
prerelease: false
|
112
|
-
version_requirements: *
|
123
|
+
version_requirements: *70296439437560
|
113
124
|
description: A Ruby command-line utility for translating files using a YAML wordlist
|
114
125
|
email:
|
115
126
|
- bryan.mckelvey@gmail.com
|
@@ -129,6 +140,7 @@ files:
|
|
129
140
|
- konjac.gemspec
|
130
141
|
- lib/konjac.rb
|
131
142
|
- lib/konjac/cli.rb
|
143
|
+
- lib/konjac/config.rb
|
132
144
|
- lib/konjac/dictionary.rb
|
133
145
|
- lib/konjac/exception.rb
|
134
146
|
- lib/konjac/language.rb
|
@@ -138,6 +150,8 @@ files:
|
|
138
150
|
- lib/konjac/utils.rb
|
139
151
|
- lib/konjac/version.rb
|
140
152
|
- lib/konjac/word.rb
|
153
|
+
- locales/en.yml
|
154
|
+
- locales/ja.yml
|
141
155
|
- spec/cli_spec.rb
|
142
156
|
- spec/dictionary_spec.rb
|
143
157
|
- spec/language_spec.rb
|