talk_like_a_pirate 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -0
- data/README.md +5 -1
- data/lib/{talk_like_a_pirate → config}/pirate_booty.yml +0 -0
- data/lib/config/sample_config.yml +9 -0
- data/lib/install_local_config.rb +48 -0
- data/lib/rails/i18n_translator.rb +78 -0
- data/lib/rails/railties.rb +23 -0
- data/lib/talk_like_a_pirate.rb +13 -9
- data/spec/lib/i18n_translator_spec.rb +90 -0
- data/spec/lib/talk_like_a_pirate_spec.rb +20 -18
- data/spec/spec_helper.rb +5 -0
- data/spec/support/i18n_helper_methods.rb +49 -0
- data/spec/support/source_template.yml +7 -0
- data/talk_like_a_pirate.gemspec +1 -1
- metadata +11 -4
- data/lib/talk_like_a_pirate/railties.rb +0 -5
- data/lib/talk_like_a_pirate/tasks/pirate.rake +0 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 801d5bcf62c5d990f5cb9b5379e823432dbf6f50
|
4
|
+
data.tar.gz: 588ff4de48eae2b03e5702a566fd53099e47593f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 70a8ecb9b3d870979dcf4af96b4e0435eb76bb48e7a1e738bef2cfe67a1d16081692f24bb0c43efd1681e513b23a2d21b52c49539d6ef2416ea3174d3580954e
|
7
|
+
data.tar.gz: c8c4718b9978ab21394746386c7265e947f2b8090a9c5b116647d2cee90d8fac12f983dcf940c9dc7243728f157c8505551100953f5444a54716b095202929f8
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
## [0.2.1] - 2018-10-01
|
2
|
+
### Added
|
3
|
+
- rake pirate:initialize installs a sample YAML file into your Rails config folder
|
4
|
+
- Specs for I18n generation
|
5
|
+
|
6
|
+
### Changed
|
7
|
+
- I18n generation now works with YAML files with prefixes (i.e. devise.en.yml)
|
8
|
+
|
9
|
+
## [0.2.0] - 2018-10-01
|
10
|
+
### Added
|
11
|
+
- Now compatible with Rails 3.2 through 5.2.X
|
12
|
+
- Specs for all supported Rails versions
|
13
|
+
|
14
|
+
### Changed
|
15
|
+
- Class public methods
|
data/README.md
CHANGED
@@ -28,7 +28,11 @@ Config
|
|
28
28
|
----
|
29
29
|
The pirate dictionary is fairly generic. You may have domain-specific lingo you think would be hillarious in pirate. So, add on to the dictionary!
|
30
30
|
|
31
|
-
|
31
|
+
You can generate a config file using the rake task:
|
32
|
+
|
33
|
+
rake pirate:initialize
|
34
|
+
|
35
|
+
Or, add a config file at
|
32
36
|
|
33
37
|
* Rails:
|
34
38
|
config/pirate_booty.yml
|
File without changes
|
@@ -0,0 +1,48 @@
|
|
1
|
+
class TalkLikeAPirate
|
2
|
+
class InstallLocalConfig
|
3
|
+
class << self
|
4
|
+
def install(target_file_path=nil)
|
5
|
+
target_file_path = set_target_file_path(target_file_path)
|
6
|
+
if File.exists?(target_file_path)
|
7
|
+
"Configuration file already exists at #{target_file_path}"
|
8
|
+
else
|
9
|
+
copy_local_config_template_to(target_file_path)
|
10
|
+
output_local_instructions(target_file_path)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
private #####################################################################
|
15
|
+
|
16
|
+
def set_target_file_path(target_file_path)
|
17
|
+
if TalkLikeAPirate.on_rails?
|
18
|
+
Rails.root.join 'config', 'pirate_booty.yml'
|
19
|
+
else
|
20
|
+
target_file_path = path_looks_like_file(target_file_path) ? FileUtils.pwd : target_file_path
|
21
|
+
File.join target_file_path, 'pirate_booty.yml'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def copy_local_config_template_to(target_file_path)
|
26
|
+
target_directory = File.dirname(target_file_path)
|
27
|
+
FileUtils.mkdir_p(target_directory) unless Dir.exists?(target_directory)
|
28
|
+
source_path = File.join File.dirname(__FILE__), 'config', 'sample_config.yml'
|
29
|
+
|
30
|
+
FileUtils.copy source_path, target_file_path
|
31
|
+
end
|
32
|
+
|
33
|
+
def output_local_instructions(target_file_path)
|
34
|
+
return "Configuration installed at #{target_file_path}" if TalkLikeAPirate.on_rails?
|
35
|
+
<<-INSTRUCTIONS
|
36
|
+
********************************************************************************************
|
37
|
+
Be sure to specify the path to your YAML file in ENV['TALK_LIKE_A_PIRATE_CONFIG_PATH'], i.e.
|
38
|
+
export TALK_LIKE_A_PIRATE_CONFIG_PATH="#{target_file_path}"
|
39
|
+
********************************************************************************************
|
40
|
+
INSTRUCTIONS
|
41
|
+
end
|
42
|
+
|
43
|
+
def path_looks_like_file(target_file_path)
|
44
|
+
target_file_path =~ /\.[^\.\/]*\z/
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
class TalkLikeAPirate
|
2
|
+
class I18nTranslator
|
3
|
+
def initialize(from_locale: 'en', verbose: false)
|
4
|
+
@source_locale = from_locale
|
5
|
+
@verbose = verbose
|
6
|
+
end
|
7
|
+
|
8
|
+
def translate_file_or_directory(path='config/locales')
|
9
|
+
path = Rails.root.join(path) if TalkLikeAPirate.on_rails? && !path.include?(Rails.root.to_s)
|
10
|
+
return translate(path) if File.exists?(path) && file_is_source_yaml_file?(path)
|
11
|
+
|
12
|
+
directory_contents(path).each do |file_path|
|
13
|
+
process_file_or_directory file_path
|
14
|
+
end
|
15
|
+
end
|
16
|
+
alias :translate :translate_file_or_directory
|
17
|
+
|
18
|
+
private #####################################################################
|
19
|
+
|
20
|
+
def process_file_or_directory(file_path)
|
21
|
+
if File.directory? file_path
|
22
|
+
source_path = File.join(file_path, "#{@source_locale}.yml")
|
23
|
+
translate_file(source_path) if File.exists?(source_path)
|
24
|
+
translate_file_or_directory file_path
|
25
|
+
elsif file_is_source_yaml_file?(file_path)
|
26
|
+
translate_file file_path
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def file_is_source_yaml_file?(file_path)
|
31
|
+
file_path.to_s.match source_yaml_file_matcher
|
32
|
+
end
|
33
|
+
|
34
|
+
def source_yaml_file_matcher
|
35
|
+
# prefix_with_dot locale_name sublocale_name .yml
|
36
|
+
/([^\/]*\.)?#{@source_locale}([a-zA-Z-]*).yml/
|
37
|
+
end
|
38
|
+
|
39
|
+
def translate_file(source_file_path)
|
40
|
+
pirate_locale_name = pirate_locale_name_for(source_file_path)
|
41
|
+
target_file_path = File.join File.dirname(source_file_path), "#{source_filename_prefix(source_file_path)}#{pirate_locale_name}.yml"
|
42
|
+
puts "Translatin' #{source_file_path} to #{pirate_locale_name}.yml" if @verbose
|
43
|
+
|
44
|
+
en_yml = YAML::load_file(source_file_path)
|
45
|
+
translation = {pirate_locale_name => parse_element(en_yml).values.first}
|
46
|
+
File.open(target_file_path, 'w:utf-8'){|f| YAML::dump translation, f }
|
47
|
+
end
|
48
|
+
|
49
|
+
def pirate_locale_name_for(source_filename)
|
50
|
+
TalkLikeAPirate.pirate_locale + source_filename.match(source_yaml_file_matcher)[2]
|
51
|
+
end
|
52
|
+
|
53
|
+
def source_filename_prefix(source_filename)
|
54
|
+
source_filename.match(source_yaml_file_matcher)[1]
|
55
|
+
end
|
56
|
+
|
57
|
+
def parse_element(element)
|
58
|
+
case element
|
59
|
+
when Hash
|
60
|
+
new_hash = {}
|
61
|
+
element.each{|k,v| new_hash[k] = parse_element(v)}
|
62
|
+
new_hash
|
63
|
+
when Array
|
64
|
+
element.map{|el| parse_element(element)}
|
65
|
+
when String
|
66
|
+
TalkLikeAPirate.translate element
|
67
|
+
else
|
68
|
+
element
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def directory_contents(path)
|
73
|
+
Dir.new(path).entries.map do |filename|
|
74
|
+
File.join(path, filename) unless ['.', '..'].include?(filename)
|
75
|
+
end.compact
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative 'i18n_translator'
|
2
|
+
require_relative '../install_local_config'
|
3
|
+
|
4
|
+
class LoadTasks < Rails::Railtie
|
5
|
+
rake_tasks do
|
6
|
+
|
7
|
+
namespace 'pirate' do
|
8
|
+
desc 'Translate config/locales dictionary into pirrrrate'
|
9
|
+
task :translate, [:dir_or_file_to_translate] => :environment do |t, args|
|
10
|
+
args.with_defaults(dir_or_file_to_translate: 'config/locales')
|
11
|
+
TalkLikeAPirate::I18nTranslator.new.translate args[:dir_or_file_to_translate]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
namespace 'pirate' do
|
16
|
+
desc 'Add a pirate config file to enable customization of the translation dictionary'
|
17
|
+
task :initialize, [:target_path] => :environment do |t, args|
|
18
|
+
message = TalkLikeAPirate::InstallLocalConfig.install(args[:target_path])
|
19
|
+
puts "#{message}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/talk_like_a_pirate.rb
CHANGED
@@ -5,6 +5,14 @@ class TalkLikeAPirate
|
|
5
5
|
me_string.is_a?(String) ? build_string(me_string) : me_string
|
6
6
|
end
|
7
7
|
|
8
|
+
def pirate_locale
|
9
|
+
@@locale ||= local_config['locale'] || config['locale']
|
10
|
+
end
|
11
|
+
|
12
|
+
def on_rails?
|
13
|
+
Object.const_defined?(:Rails)
|
14
|
+
end
|
15
|
+
|
8
16
|
private #####################################################################
|
9
17
|
|
10
18
|
def build_string(me_string)
|
@@ -76,10 +84,6 @@ class TalkLikeAPirate
|
|
76
84
|
capitalize_first(sprinklings_of_flavor.sample) + ["!!","!","."].sample
|
77
85
|
end
|
78
86
|
|
79
|
-
def pirate_locale
|
80
|
-
@@locale ||= local_config.has_key?("locale") ? local_config["locale"] : config["locale"]
|
81
|
-
end
|
82
|
-
|
83
87
|
def dictionary
|
84
88
|
@@dictionary_map ||= config['dictionary'].merge(local_dictionary)
|
85
89
|
end
|
@@ -90,7 +94,7 @@ class TalkLikeAPirate
|
|
90
94
|
|
91
95
|
def config
|
92
96
|
@@config ||= begin
|
93
|
-
gem_config_path = File.join File.dirname(__FILE__), '
|
97
|
+
gem_config_path = File.join File.dirname(__FILE__), 'config', 'pirate_booty.yml'
|
94
98
|
YAML::load_file gem_config_path
|
95
99
|
end
|
96
100
|
end
|
@@ -105,8 +109,8 @@ class TalkLikeAPirate
|
|
105
109
|
|
106
110
|
def local_config
|
107
111
|
@@local_configs ||= begin
|
108
|
-
local_config_path = if
|
109
|
-
Rails.root.join
|
112
|
+
local_config_path = if on_rails?
|
113
|
+
Rails.root.join 'config', 'pirate_booty.yml'
|
110
114
|
else
|
111
115
|
ENV['TALK_LIKE_A_PIRATE_CONFIG_PATH']
|
112
116
|
end
|
@@ -134,8 +138,8 @@ class TalkLikeAPirate
|
|
134
138
|
end
|
135
139
|
end
|
136
140
|
|
137
|
-
if
|
138
|
-
require '
|
141
|
+
if TalkLikeAPirate.on_rails?
|
142
|
+
require 'rails/railties'
|
139
143
|
else
|
140
144
|
require 'yaml'
|
141
145
|
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
include I18nHelperMethods
|
3
|
+
|
4
|
+
describe TalkLikeAPirate::I18nTranslator do
|
5
|
+
let(:source_locale) { 'en' }
|
6
|
+
let(:instance) { TalkLikeAPirate::I18nTranslator.new(from_locale: source_locale) }
|
7
|
+
setup_temp_folder
|
8
|
+
after { remove_temp_files }
|
9
|
+
|
10
|
+
describe '#translate_file_or_directory' do
|
11
|
+
let(:source_filename) { 'en.yml' }
|
12
|
+
let(:source_path) { nil }
|
13
|
+
|
14
|
+
subject do
|
15
|
+
create_source_file source_path, source_filename
|
16
|
+
instance.translate_file_or_directory(@temp_folder)
|
17
|
+
target_filename = source_filename.sub(source_locale, 'arr')
|
18
|
+
tempfile_exists? File.join(*[source_path, target_filename].compact)
|
19
|
+
end
|
20
|
+
|
21
|
+
describe 'translated file creation' do
|
22
|
+
it { is_expected.to be true }
|
23
|
+
|
24
|
+
context 'prefixed filenames' do
|
25
|
+
let(:source_filename) { 'devise.en.yml' }
|
26
|
+
it { is_expected.to be true }
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'sublocale filenames' do
|
30
|
+
let(:source_filename) { 'en-US.yml' }
|
31
|
+
it { is_expected.to be true }
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'subfolders' do
|
35
|
+
let(:source_path) { 'subfolder' }
|
36
|
+
it { is_expected.to be true }
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'nested subfolders' do
|
40
|
+
let(:source_path) { 'subfolder/another_subfolder' }
|
41
|
+
it { is_expected.to be true }
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'multiple source files in folder' do
|
45
|
+
before do
|
46
|
+
create_source_file '', source_filename_1
|
47
|
+
create_source_file '', source_filename_2
|
48
|
+
end
|
49
|
+
let(:source_filename_1) { 'en.yml' }
|
50
|
+
let(:source_filename_2) { 'en-US.yml' }
|
51
|
+
it { expect(tempfile_exists?(source_filename_1)).to be true }
|
52
|
+
it { expect(tempfile_exists?(source_filename_2)).to be true }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe 'yaml top level key' do
|
57
|
+
subject do
|
58
|
+
create_source_file '', source_filename
|
59
|
+
instance.translate_file_or_directory(@temp_folder)
|
60
|
+
target_filename = source_filename.sub(source_locale, 'arr')
|
61
|
+
|
62
|
+
yaml_for(target_filename).keys[0]
|
63
|
+
end
|
64
|
+
|
65
|
+
it { is_expected.to eq 'arr' }
|
66
|
+
|
67
|
+
context 'prefixed filenames' do
|
68
|
+
let(:source_filename) { 'devise.en.yml' }
|
69
|
+
it { is_expected.to eq 'arr' }
|
70
|
+
end
|
71
|
+
|
72
|
+
context 'sublocale filenames' do
|
73
|
+
let(:source_filename) { 'en-US.yml' }
|
74
|
+
it { is_expected.to eq 'arr-US' }
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe 'translations' do
|
79
|
+
def subject(yaml_path)
|
80
|
+
create_source_file '', 'en.yml'
|
81
|
+
instance.translate_file_or_directory(@temp_folder)
|
82
|
+
yaml_for('arr.yml').dig *yaml_path
|
83
|
+
end
|
84
|
+
it { expect(subject(['arr', 'house', 'address'])).to eq "Port o' call"}
|
85
|
+
it { expect(subject(['arr', 'house', 'country'])).to eq "Land"}
|
86
|
+
it { expect(subject(['arr', 'person', 'employee'])).to eq "Crew"}
|
87
|
+
it { expect(subject(['arr', 'person', 'family'])).to eq "kin"}
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -1,6 +1,4 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
# TODO: Test Rails integration/railties/rake task
|
1
|
+
require 'spec_helper'
|
4
2
|
|
5
3
|
describe TalkLikeAPirate do
|
6
4
|
def execute(string)
|
@@ -11,10 +9,6 @@ describe TalkLikeAPirate do
|
|
11
9
|
expect(execute('between')).to eq "betwixt"
|
12
10
|
end
|
13
11
|
|
14
|
-
it "shouldn't translate plural words without ActiveSupport" do
|
15
|
-
expect(execute("islands")).to eq 'islands'
|
16
|
-
end
|
17
|
-
|
18
12
|
it "makes gerunds piratey" do
|
19
13
|
expect(execute('having')).to eq "havin'"
|
20
14
|
end
|
@@ -23,39 +17,47 @@ describe TalkLikeAPirate do
|
|
23
17
|
expect(execute('havings')).to eq "havin's"
|
24
18
|
end
|
25
19
|
|
26
|
-
it "
|
20
|
+
it "capitalizes single words" do
|
27
21
|
expect(execute('Boss')).to eq "Admiral"
|
28
22
|
end
|
29
23
|
|
30
|
-
it "
|
24
|
+
it "capitalizes all caps words" do
|
31
25
|
expect(execute('BOSS')).to eq "ADMIRAL"
|
32
26
|
expect(execute('BOSS!!!!')).to eq "ADMIRAL!!!!"
|
33
27
|
end
|
34
28
|
|
35
|
-
it "
|
29
|
+
it "capitalizes phrases" do
|
36
30
|
expect(execute('Bourbon Country')).to eq "Rum Land"
|
37
31
|
expect(execute('Bourbon country')).to eq "Rum land"
|
38
32
|
end
|
39
33
|
|
40
|
-
it "
|
34
|
+
it "translates words with trailing punctuation" do
|
41
35
|
expect(execute('man!!!')).to eq "pirate!!!"
|
42
36
|
expect(execute('man!?!?!?!')).to eq "pirate!?!?!?!"
|
43
37
|
end
|
44
38
|
|
45
|
-
it "
|
39
|
+
it "translates plural gerunds with trailing punctuation" do
|
46
40
|
expect(execute('belongings!')).to eq "belongin's!"
|
47
41
|
end
|
48
42
|
|
49
|
-
it "
|
43
|
+
it "punctuates and translates words with leading and punctuation" do
|
50
44
|
expect(execute('"The boss said kill."')).to eq '"Tha admiral said keelhaul."'
|
51
45
|
expect(execute('"The boss said to kill the dude!"')).to eq '"Tha admiral said t\' keelhaul tha pirate!"'
|
52
46
|
end
|
53
47
|
|
54
|
-
|
55
|
-
|
56
|
-
|
48
|
+
context 'without ActiveSupport' do
|
49
|
+
it "does not translate plural words" do
|
50
|
+
expect(execute("islands")).to eq 'islands'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'with ActiveSupport' do
|
55
|
+
it "translates plural words" do
|
56
|
+
require "active_support"
|
57
|
+
require "active_support/inflector"
|
57
58
|
|
58
|
-
|
59
|
-
|
59
|
+
expect(execute("islands")).to eq 'isles'
|
60
|
+
expect(execute("men")).to eq 'pirates'
|
61
|
+
end
|
60
62
|
end
|
61
63
|
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
module I18nHelperMethods
|
2
|
+
def setup_temp_folder
|
3
|
+
before(:all) do
|
4
|
+
tmp_path = File.join File.dirname(__FILE__), 'tmp'
|
5
|
+
@temp_folder = FileUtils.mkdir(tmp_path)[0]
|
6
|
+
end
|
7
|
+
after(:all) do
|
8
|
+
FileUtils.rm_r(@temp_folder) unless @temp_folder.nil?
|
9
|
+
@temp_folder = nil
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def tempfile_exists?(target_filename)
|
14
|
+
File.exists? tempfile(target_filename)
|
15
|
+
end
|
16
|
+
|
17
|
+
def tempfile_contents(target_filename)
|
18
|
+
File.read tempfile(target_filename)
|
19
|
+
end
|
20
|
+
|
21
|
+
def yaml_for(target_filename)
|
22
|
+
YAML.load(tempfile_contents(target_filename))
|
23
|
+
end
|
24
|
+
|
25
|
+
def tempfile(target_filename)
|
26
|
+
File.join(@temp_folder, target_filename)
|
27
|
+
end
|
28
|
+
|
29
|
+
def remove_temp_files
|
30
|
+
return if @temp_folder.nil? || @temp_folder == ''
|
31
|
+
Dir.glob(@temp_folder).each do |file_path|
|
32
|
+
next if ['.','..',@temp_folder].include?(file_path)
|
33
|
+
FileUtils.remove_entry file_path
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def create_source_file(target_path, target_filename)
|
38
|
+
target_path = File.join [@temp_folder, target_path].compact
|
39
|
+
FileUtils.mkdir_p(target_path) unless Dir.exists?(target_path)
|
40
|
+
|
41
|
+
source_path = File.join File.dirname(__FILE__), 'source_template.yml'
|
42
|
+
target_file_path = File.join target_path, target_filename
|
43
|
+
FileUtils.copy source_path, target_file_path
|
44
|
+
end
|
45
|
+
|
46
|
+
def delete_config_file
|
47
|
+
FileUtils.remove_entry File.dirname(target_file_path)
|
48
|
+
end
|
49
|
+
end
|
data/talk_like_a_pirate.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
Gem::Specification.new do |spec|
|
3
3
|
spec.name = 'talk_like_a_pirate'
|
4
|
-
spec.version = '0.2.
|
4
|
+
spec.version = '0.2.1'
|
5
5
|
spec.authors = ['Steve Hodges']
|
6
6
|
spec.email = ['shodges317@gmail.com']
|
7
7
|
spec.homepage = 'https://github.com/stevehodges/talk_like_a_pirate'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: talk_like_a_pirate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steve Hodges
|
@@ -109,16 +109,23 @@ extra_rdoc_files: []
|
|
109
109
|
files:
|
110
110
|
- ".gitignore"
|
111
111
|
- Appraisals
|
112
|
+
- CHANGELOG.md
|
112
113
|
- Gemfile
|
113
114
|
- Gemfile.lock
|
114
115
|
- LICENSE
|
115
116
|
- README.md
|
116
117
|
- Rakefile
|
118
|
+
- lib/config/pirate_booty.yml
|
119
|
+
- lib/config/sample_config.yml
|
120
|
+
- lib/install_local_config.rb
|
121
|
+
- lib/rails/i18n_translator.rb
|
122
|
+
- lib/rails/railties.rb
|
117
123
|
- lib/talk_like_a_pirate.rb
|
118
|
-
- lib/
|
119
|
-
- lib/talk_like_a_pirate/railties.rb
|
120
|
-
- lib/talk_like_a_pirate/tasks/pirate.rake
|
124
|
+
- spec/lib/i18n_translator_spec.rb
|
121
125
|
- spec/lib/talk_like_a_pirate_spec.rb
|
126
|
+
- spec/spec_helper.rb
|
127
|
+
- spec/support/i18n_helper_methods.rb
|
128
|
+
- spec/support/source_template.yml
|
122
129
|
- talk_like_a_pirate.gemspec
|
123
130
|
homepage: https://github.com/stevehodges/talk_like_a_pirate
|
124
131
|
licenses: []
|
@@ -1,57 +0,0 @@
|
|
1
|
-
namespace "pirate" do
|
2
|
-
desc "Use this task to translate config/locales dictionary into pirrrrate"
|
3
|
-
task :translate, :dir_or_file_to_translate do |t, args|
|
4
|
-
require 'cgi'
|
5
|
-
args.with_defaults(:dir_or_file_to_translate => "config/locales")
|
6
|
-
translate_locale(args[:dir_or_file_to_translate])
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
def translate(filename)
|
11
|
-
en_yml = YAML::load_file(filename)
|
12
|
-
target_filename = TalkLikeAPirate.pirate_locale + filename.match(/\/en([a-zA-Z-]*).yml/)[1]
|
13
|
-
dirname = filename.split("/")[0..-2].join("/")
|
14
|
-
translation = {target_filename => parse_element(en_yml).values.first}
|
15
|
-
File.open(dirname + "/#{target_filename}.yml", 'w:utf-8') do |f|
|
16
|
-
YAML::dump translation, f
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def translate_locale(path)
|
21
|
-
path = "#{Rails.root}/#{path}" unless path.include? Rails.root.to_s
|
22
|
-
return translate(path) if File.exists?(path) && path.match("/\/en([a-zA-Z-]*).yml")
|
23
|
-
|
24
|
-
relevent_file_paths(path).each do |file_path|
|
25
|
-
if File.directory? file_path
|
26
|
-
translate(file_path + "/en.yml") if File.exists?(file_path + "/en.yml")
|
27
|
-
translate_locale file_path
|
28
|
-
elsif file_path.match("\/en([a-zA-Z-]*).yml")
|
29
|
-
puts file_path
|
30
|
-
translate file_path
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def parse_element(element)
|
36
|
-
case element
|
37
|
-
when Hash
|
38
|
-
new_hash = {}
|
39
|
-
element.each {|k,v| new_hash[k] = parse_element(v)}
|
40
|
-
new_hash
|
41
|
-
when Array
|
42
|
-
element.map {|el| parse_element(element)}
|
43
|
-
when String
|
44
|
-
TalkLikeAPirate.translate element
|
45
|
-
else
|
46
|
-
element
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def relevent_file_paths(path)
|
51
|
-
Dir.new(path).entries.reject do |filename|
|
52
|
-
[".", ".."].include? filename
|
53
|
-
end.map do |filename|
|
54
|
-
"#{path}/#{filename}"
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|