ripl-i18n 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gemspec +22 -0
- data/CHANGELOG.rdoc +2 -0
- data/LICENSE.txt +22 -0
- data/README.rdoc +30 -0
- data/Rakefile +35 -0
- data/deps.rip +1 -0
- data/lib/ripl/i18n/locales/de.yml +14 -0
- data/lib/ripl/i18n/locales/en.yml +15 -0
- data/lib/ripl/i18n/locales/es.yml +14 -0
- data/lib/ripl/i18n/version.rb +5 -0
- data/lib/ripl/i18n.rb +51 -0
- data/test/deps.rip +2 -0
- data/test/fixtures/.yml +0 -0
- data/test/fixtures/invalid_syntax.yml +1 -0
- data/test/fixtures/rb.yml +1 -0
- data/test/i18n_test.rb +100 -0
- metadata +104 -0
data/.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'rubygems' unless Object.const_defined?(:Gem)
|
3
|
+
require File.dirname(__FILE__) + "/lib/ripl/i18n/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "ripl-i18n"
|
7
|
+
s.version = Ripl::I18n::VERSION
|
8
|
+
s.authors = ["Gabriel Horner"]
|
9
|
+
s.email = "gabriel.horner@gmail.com"
|
10
|
+
s.homepage = "http://github.com/cldwalker/ripl-i18n"
|
11
|
+
s.summary = "A ripl plugin que habla ta langue"
|
12
|
+
s.description = "A ripl plugin that translates ripl to your preferred language."
|
13
|
+
s.required_rubygems_version = ">= 1.3.6"
|
14
|
+
s.add_dependency 'ripl', '~> 0.4.0'
|
15
|
+
s.add_development_dependency 'bacon', '>= 1.1.0'
|
16
|
+
s.add_development_dependency 'bacon-bits'
|
17
|
+
s.rubyforge_project = 'tagaholic'
|
18
|
+
s.files = Dir.glob(%w[{lib,test}/**/*.rb bin/* [A-Z]*.{txt,rdoc} ext/**/*.{rb,c} **/deps.rip]) + %w{Rakefile .gemspec}
|
19
|
+
s.files += Dir.glob(['lib/ripl/i18n/locales/*.yml', 'test/fixtures/{,*}.yml'])
|
20
|
+
s.extra_rdoc_files = ["README.rdoc", "LICENSE.txt"]
|
21
|
+
s.license = 'MIT'
|
22
|
+
end
|
data/CHANGELOG.rdoc
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
The MIT LICENSE
|
2
|
+
|
3
|
+
Copyright (c) 2011 Gabriel Horner
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
== Description
|
2
|
+
A ripl plugin that translates ripl to your preferred language.
|
3
|
+
|
4
|
+
== Usage
|
5
|
+
|
6
|
+
Add to your ~/.riplrc:
|
7
|
+
|
8
|
+
require 'ripl/i18n'
|
9
|
+
# Use your language: :es maps to es.yml
|
10
|
+
Ripl.config[:i18n_locale] = :es
|
11
|
+
|
12
|
+
If you want to load and use your own locale:
|
13
|
+
|
14
|
+
Ripl::I18n.load 'path/to/my_lang.yml'
|
15
|
+
Ripl.config[:i18n_locale] = :my_lang
|
16
|
+
|
17
|
+
== Contribute Your Language
|
18
|
+
|
19
|
+
As I would like to make ripl available in as many languages as possible,
|
20
|
+
please do add your own! Here's all you have to do:
|
21
|
+
|
22
|
+
* Fork this project. It's dead-easy to do this with the {fork and edit
|
23
|
+
button}[https://github.com/blog/844-forking-with-the-edit-button].
|
24
|
+
* Create a .yml file under lib/ripl/i18n/locales/ for your language.
|
25
|
+
If you're not sure what locale to use for your language, {see
|
26
|
+
some examples}[https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale].
|
27
|
+
* Be sure to translate all the keys in lib/ripl/i18n/locales/en.yml.
|
28
|
+
|
29
|
+
== Inspiration
|
30
|
+
http://yugui.jp/articles/863
|
data/Rakefile
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
def gemspec
|
5
|
+
@gemspec ||= eval(File.read('.gemspec'), binding, '.gemspec')
|
6
|
+
end
|
7
|
+
|
8
|
+
desc "Build the gem"
|
9
|
+
task :gem=>:gemspec do
|
10
|
+
sh "gem build .gemspec"
|
11
|
+
FileUtils.mkdir_p 'pkg'
|
12
|
+
FileUtils.mv "#{gemspec.name}-#{gemspec.version}.gem", 'pkg'
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "Install the gem locally"
|
16
|
+
task :install => :gem do
|
17
|
+
sh %{gem install pkg/#{gemspec.name}-#{gemspec.version}}
|
18
|
+
end
|
19
|
+
|
20
|
+
desc "Generate the gemspec"
|
21
|
+
task :generate do
|
22
|
+
puts gemspec.to_ruby
|
23
|
+
end
|
24
|
+
|
25
|
+
desc "Validate the gemspec"
|
26
|
+
task :gemspec do
|
27
|
+
gemspec.validate
|
28
|
+
end
|
29
|
+
|
30
|
+
desc 'Run tests'
|
31
|
+
task :test do |t|
|
32
|
+
sh 'bacon -q -Ilib -I. test/*_test.rb'
|
33
|
+
end
|
34
|
+
|
35
|
+
task :default => :test
|
data/deps.rip
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ripl ~>0.4.0
|
@@ -0,0 +1,14 @@
|
|
1
|
+
---
|
2
|
+
-f: Unterdrücke Laden von ~/.irbrc
|
3
|
+
-F: Unterdrücke Laden von ~/.riplrc
|
4
|
+
-d: Setze $DEBUG auf wahr (wie `ruby -d')
|
5
|
+
-I: Pfad an den Anfang des $LOAD_PATH hinzufügen. Begrenze mehrfache Pfade mit ':'
|
6
|
+
-r: Lade Datei mittels "require" (wie `ruby -r')
|
7
|
+
-v: Gib Version aus
|
8
|
+
-h: Gib Hilfe aus
|
9
|
+
run_command: `%s' ist kein %s-Befehl.
|
10
|
+
start: Unbenutzte Argumente
|
11
|
+
load_rc: Fehler beim Laden von %s
|
12
|
+
parse_option: Ungültige Option
|
13
|
+
prompt: Fehler beim Erstellen des Prompts
|
14
|
+
print_result: Fehler beim Ergebnis ausgeben
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Keys and their words to translate into other languages
|
2
|
+
---
|
3
|
+
-f: Suppress loading ~/.irbrc
|
4
|
+
-F: Suppress loading ~/.riplrc
|
5
|
+
-d: Set $DEBUG to true (same as `ruby -d')
|
6
|
+
-I: Add to front of $LOAD_PATH. Delimit multiple paths with ':'
|
7
|
+
-r: Require file (same as `ruby -r')
|
8
|
+
-v: Print version
|
9
|
+
-h: Print help
|
10
|
+
run_command: `%s' is not a %s command.
|
11
|
+
start: Unused arguments
|
12
|
+
load_rc: Error while loading %s
|
13
|
+
parse_option: invalid option
|
14
|
+
prompt: Error while creating prompt
|
15
|
+
print_result: Error while printing result
|
@@ -0,0 +1,14 @@
|
|
1
|
+
---
|
2
|
+
-f: Para de cargar ~/.irbrc
|
3
|
+
-F: Para de cargar ~/.riplrc
|
4
|
+
-d: Configura $DEBUG a true (lo mismo que `ruby -d')
|
5
|
+
-I: Añade al frente de $LOAD_PATH. Delimita con ':'
|
6
|
+
-r: Require archivo (lo mismo que `ruby -r')
|
7
|
+
-v: Imprime version
|
8
|
+
-h: Imprime ayuda
|
9
|
+
run_command: `%s' no es un comando de %s.
|
10
|
+
start: argumentos no usado
|
11
|
+
load_rc: Ocurrió un error mientras cargando %s
|
12
|
+
parse_option: opción inválida
|
13
|
+
prompt: Ocurrió un error mientras creando prompt
|
14
|
+
print_result: Ocurrió un error impremiendo el resultado
|
data/lib/ripl/i18n.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'ripl'
|
3
|
+
require 'yaml'
|
4
|
+
require 'ripl/i18n/version'
|
5
|
+
|
6
|
+
module Ripl::I18n
|
7
|
+
class<<self
|
8
|
+
attr_accessor :locales
|
9
|
+
|
10
|
+
def locale; Ripl.config[:i18n_locale]; end
|
11
|
+
|
12
|
+
def translate(str)
|
13
|
+
(locales[locale] ||= {})[str] || "Translation missing: #{locale}.#{str}"
|
14
|
+
end
|
15
|
+
|
16
|
+
def load_file(file)
|
17
|
+
YAML.load_file(file)
|
18
|
+
rescue
|
19
|
+
warn "Error while loading locale from #{file}:\n#{$!}"
|
20
|
+
end
|
21
|
+
|
22
|
+
def init
|
23
|
+
load Dir["#{File.dirname(__FILE__)}/i18n/locales/*.yml"]
|
24
|
+
internationalize
|
25
|
+
end
|
26
|
+
|
27
|
+
def load(*files)
|
28
|
+
files.flatten.each do |file|
|
29
|
+
lang = File.basename(file)[/^[a-zA-Z]+/]
|
30
|
+
next if lang.nil? || lang.empty?
|
31
|
+
locales[lang.to_sym] = load_file(file)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def internationalize
|
36
|
+
Ripl::Runner::OPTIONS.each { |opt, val| locales[:en][opt] = val[1] }
|
37
|
+
Ripl::Runner::OPTIONS.instance_eval %[
|
38
|
+
def [](v) [dup[v][0], Ripl::I18n.translate(v)] end
|
39
|
+
def values() map {|k,v| [v[0], Ripl::I18n.translate(k)] } end
|
40
|
+
]
|
41
|
+
[Ripl::Runner::MESSAGES, Ripl::Shell::MESSAGES].each do |obj|
|
42
|
+
obj.each { |opt, val| locales[:en][opt] = val }
|
43
|
+
obj.instance_eval %[def [](v) Ripl::I18n.translate(v) end]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
self.locales = {}
|
48
|
+
end
|
49
|
+
|
50
|
+
Ripl.config[:i18n_locale] ||= :en
|
51
|
+
Ripl::I18n.init
|
data/test/deps.rip
ADDED
data/test/fixtures/.yml
ADDED
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
''::'
|
@@ -0,0 +1 @@
|
|
1
|
+
-f: woah dudez
|
data/test/i18n_test.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'ripl/i18n'
|
2
|
+
require 'bacon'
|
3
|
+
require 'bacon/bits'
|
4
|
+
|
5
|
+
module Helpers
|
6
|
+
def capture_stderr(&block)
|
7
|
+
original_stderr = $stderr
|
8
|
+
$stderr = fake = StringIO.new
|
9
|
+
begin
|
10
|
+
yield
|
11
|
+
ensure
|
12
|
+
$stderr = original_stderr
|
13
|
+
end
|
14
|
+
fake.string
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
Bacon::Context.send :include, Helpers
|
19
|
+
|
20
|
+
describe Ripl::I18n do
|
21
|
+
before_all { Ripl::I18n.locales = {} }
|
22
|
+
|
23
|
+
describe ".init" do
|
24
|
+
describe "defines locales" do
|
25
|
+
before do
|
26
|
+
Ripl::I18n.locales = {}
|
27
|
+
Ripl::I18n.init
|
28
|
+
end
|
29
|
+
|
30
|
+
it "by language" do
|
31
|
+
Ripl::I18n.locales.keys.should.include? :en
|
32
|
+
Ripl::I18n.locales.keys.should.include? :es
|
33
|
+
end
|
34
|
+
|
35
|
+
it "with the correct number of translations" do
|
36
|
+
Ripl::I18n.locales.values.each {|e| e.size.should == 13 }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# already redefined when required
|
41
|
+
describe "redefines" do
|
42
|
+
before_all { Ripl.config[:i18n_locale] = :es }
|
43
|
+
|
44
|
+
it "Runner::OPTIONS#[]" do
|
45
|
+
Ripl::Runner::OPTIONS['-f'].should == ["-f", "Para de cargar ~/.irbrc"]
|
46
|
+
end
|
47
|
+
|
48
|
+
it "Runner::OPTIONS#values" do
|
49
|
+
Ripl::Runner::OPTIONS.values.sort_by {|a| a[0].downcase }[0][1].
|
50
|
+
should =~ /^Configura/
|
51
|
+
end
|
52
|
+
|
53
|
+
it "Runner::MESSAGES#[]" do
|
54
|
+
Ripl::Runner::MESSAGES['start'].should =~ /^argumentos/
|
55
|
+
end
|
56
|
+
|
57
|
+
it "Shell::MESSAGES#[]" do
|
58
|
+
Ripl::Shell::MESSAGES['prompt'].should =~ /^Ocurri/
|
59
|
+
end
|
60
|
+
after_all { Ripl.config[:i18n_locale] = :en }
|
61
|
+
end
|
62
|
+
|
63
|
+
describe ".translate" do
|
64
|
+
before_all { Ripl::I18n.init }
|
65
|
+
it "returns translation missing message for missing translation" do
|
66
|
+
Ripl::I18n.translate('blah').should == "Translation missing: en.blah"
|
67
|
+
end
|
68
|
+
|
69
|
+
it "handles locales that haven't been defined yet" do
|
70
|
+
Ripl.config[:i18n_locale] = :zzz
|
71
|
+
Ripl::I18n.translate('-f').should =~ /^Translation missing/
|
72
|
+
Ripl.config[:i18n_locale] = :en
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe ".load" do
|
77
|
+
def fixture(name)
|
78
|
+
File.dirname(__FILE__) +"/fixtures/#{name}.yml"
|
79
|
+
end
|
80
|
+
|
81
|
+
before { Ripl::I18n.locales = {} }
|
82
|
+
|
83
|
+
it "prints warning for locale file with invalid syntax" do
|
84
|
+
capture_stderr {
|
85
|
+
Ripl::I18n.load(fixture('invalid_syntax'))
|
86
|
+
}.should =~ /^Error while loading/
|
87
|
+
end
|
88
|
+
|
89
|
+
it "sets locale using basename of locale file" do
|
90
|
+
Ripl::I18n.load fixture('rb')
|
91
|
+
Ripl::I18n.locales[:rb].should == {'-f' => 'woah dudez' }
|
92
|
+
end
|
93
|
+
|
94
|
+
it "skips locale if invalid basename" do
|
95
|
+
Ripl::I18n.load fixture('')
|
96
|
+
Ripl::I18n.locales.should.be.empty
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
metadata
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ripl-i18n
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Gabriel Horner
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-05-07 00:00:00 -04:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: ripl
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ~>
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 0.4.0
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bacon
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 1.1.0
|
36
|
+
type: :development
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: bacon-bits
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: "0"
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id003
|
49
|
+
description: A ripl plugin that translates ripl to your preferred language.
|
50
|
+
email: gabriel.horner@gmail.com
|
51
|
+
executables: []
|
52
|
+
|
53
|
+
extensions: []
|
54
|
+
|
55
|
+
extra_rdoc_files:
|
56
|
+
- README.rdoc
|
57
|
+
- LICENSE.txt
|
58
|
+
files:
|
59
|
+
- lib/ripl/i18n/version.rb
|
60
|
+
- lib/ripl/i18n.rb
|
61
|
+
- test/i18n_test.rb
|
62
|
+
- LICENSE.txt
|
63
|
+
- CHANGELOG.rdoc
|
64
|
+
- README.rdoc
|
65
|
+
- deps.rip
|
66
|
+
- test/deps.rip
|
67
|
+
- Rakefile
|
68
|
+
- .gemspec
|
69
|
+
- lib/ripl/i18n/locales/de.yml
|
70
|
+
- lib/ripl/i18n/locales/en.yml
|
71
|
+
- lib/ripl/i18n/locales/es.yml
|
72
|
+
- test/fixtures/.yml
|
73
|
+
- test/fixtures/invalid_syntax.yml
|
74
|
+
- test/fixtures/rb.yml
|
75
|
+
has_rdoc: true
|
76
|
+
homepage: http://github.com/cldwalker/ripl-i18n
|
77
|
+
licenses:
|
78
|
+
- MIT
|
79
|
+
post_install_message:
|
80
|
+
rdoc_options: []
|
81
|
+
|
82
|
+
require_paths:
|
83
|
+
- lib
|
84
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: "0"
|
90
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: 1.3.6
|
96
|
+
requirements: []
|
97
|
+
|
98
|
+
rubyforge_project: tagaholic
|
99
|
+
rubygems_version: 1.6.1
|
100
|
+
signing_key:
|
101
|
+
specification_version: 3
|
102
|
+
summary: A ripl plugin que habla ta langue
|
103
|
+
test_files: []
|
104
|
+
|