simple_i18n 0.0.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.
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in simple_i18n.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Shou Ya
2
+
3
+ MIT License
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.
@@ -0,0 +1,92 @@
1
+ # Simple I18n
2
+
3
+ Using this gem is very easy to add multilanguage support for small projects.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'simple_i18n'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install simple_i18n
18
+
19
+ ## Usage
20
+
21
+ First you'd create a language specification file. This file is recommended to
22
+ named as `i18nspec.rb` and put in the root directory of project.
23
+
24
+ Which shall contain the content like:
25
+
26
+ require 'simple_i18n'
27
+
28
+ SimpleI18n.load_language_file('language/en')
29
+ SimpleI18n.load_language_file('language/zh')
30
+ # ... other languages
31
+ SimpleI18n.set_default_language('en')
32
+
33
+
34
+ Where you'd create a directory names `language` too. And inside there shall be
35
+ the language translation files, right name as form of `lang-en` as above.
36
+
37
+ The language files should contain the translation tables. Fortunately they are
38
+ defined in ruby also, in the form of:
39
+
40
+ # in file `en`
41
+
42
+ define_language('en', 'English') do |en|
43
+ en['display-username'] = 'Display Username'
44
+ en['reset-password'] = 'Reset Password'
45
+ # ... others translations
46
+ end
47
+
48
+ Different translation tables should define same tokens, for example:
49
+
50
+ # in file `zh`
51
+
52
+ # -*- encoding: utf-8 -*-
53
+
54
+ define_language('zh', '中文') do |zh|
55
+ zh['display-username'] = '顯示用戶名'
56
+ zh['reset-password'] = '重置密碼'
57
+ # ... blah blah blah
58
+ end
59
+
60
+ Note the encoding specification might be required for non-ascii files.
61
+
62
+ Then you can use these in your code:
63
+
64
+ # a file in project
65
+ require '../i18nspec'
66
+
67
+ def turn_to_english
68
+ swith_language('en')
69
+ end
70
+ def turn_to_chinese
71
+ switch_language('zh')
72
+ end
73
+
74
+ def foo
75
+ tr['display-username'] #=> 'Display Username' or '顯示用戶名'
76
+ end
77
+
78
+ Via refering translations with `tr` and changing current language with
79
+ `switch_language` methods whereever you need.
80
+
81
+
82
+ If there are places that you don't understand, you can move on the
83
+ demonstration project, which is located in `demo_project` directory.
84
+ And if that doesn't help too, welcome to write to me.
85
+
86
+ ## Contributing
87
+
88
+ 1. Fork it
89
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
90
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
91
+ 4. Push to the branch (`git push origin my-new-feature`)
92
+ 5. Create new Pull Request
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -0,0 +1,8 @@
1
+
2
+ require 'simple_i18n'
3
+
4
+ SimpleI18n.load_language_file('language/en')
5
+ SimpleI18n.load_language_file('language/zh')
6
+
7
+ SimpleI18n.set_default_language('en')
8
+
@@ -0,0 +1,8 @@
1
+ # -*- ruby -*-
2
+
3
+ define_language('en', 'English') do |en|
4
+ en['display-username'] = 'Display Username'
5
+ en['reset-password'] = 'Reset Password'
6
+ # ... others translations
7
+ end
8
+
@@ -0,0 +1,9 @@
1
+ # -*- coding: utf-8 -*-
2
+ # -*- ruby -*-
3
+
4
+ define_language('zh', '中文') do |zh|
5
+ zh['display-username'] = '顯示用戶名'
6
+ zh['reset-password'] = '重置密碼'
7
+ end
8
+
9
+
@@ -0,0 +1,14 @@
1
+
2
+ require_relative '../i18nspec'
3
+
4
+ def switch_to_zh
5
+ switch_language('zh')
6
+ end
7
+
8
+ def switch_to_en
9
+ switch_language('en')
10
+ end
11
+
12
+ def foo
13
+ tr['display-username']
14
+ end
@@ -0,0 +1,18 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require './lib/libfoo'
4
+
5
+ # default language is English as previously set
6
+ puts foo #=> 'Display Username'
7
+
8
+ switch_to_zh
9
+ puts foo #=> '顯示用戶名'
10
+
11
+
12
+ switch_to_en
13
+ puts foo #=> 'Display Username'
14
+
15
+
16
+ puts current_language #=> 'en'
17
+ puts current_language(:full_name => true) #=> 'English'
18
+
@@ -0,0 +1,35 @@
1
+
2
+ $LOAD_PATH << '.'
3
+
4
+ require 'simple_i18n/version'
5
+ require 'simple_i18n/language'
6
+ require 'simple_i18n/specification'
7
+
8
+ module SimpleI18n
9
+ class << self
10
+ include Specification
11
+ end
12
+
13
+
14
+ Kernel.class_eval do
15
+ def tr
16
+ return Language.current
17
+ end
18
+
19
+ def switch_language(lang)
20
+ unless Language.table.has_key?(lang)
21
+ warn 'Language %s is not defined.' % lang
22
+ return Language.current
23
+ end
24
+ Language.current = Language.table[lang]
25
+ end
26
+
27
+ def current_language(option={})
28
+ return option[:full_name] ?
29
+ Language.current.full_name :
30
+ Language.current.abbreviation
31
+ end
32
+ end
33
+
34
+ end
35
+
@@ -0,0 +1,59 @@
1
+
2
+ module SimpleI18n
3
+ class Language
4
+
5
+ class << self
6
+ attr_accessor :default, :current
7
+ attr_accessor :table
8
+ end
9
+
10
+ attr_reader :abbreviation, :full_name
11
+ attr :translations
12
+
13
+ def initialize(abbr, full_name)
14
+ @translations = {}
15
+ @abbreviation = abbr
16
+ @full_name = full_name
17
+
18
+ self.class.table ||= {}
19
+ self.class.default ||= self
20
+ self.class.current ||= self
21
+
22
+ if self.class.table.has_key?(abbr)
23
+ warn 'Redefining %s language.' % abbr
24
+ end
25
+
26
+ self.class.table[abbr] = self
27
+ end
28
+
29
+ def token_defined?(token_name)
30
+ return @translations.has_key?(token_name)
31
+ end
32
+
33
+ def [](token)
34
+ tran = @translations[token]
35
+ return tran if tran
36
+
37
+ default_lang = self.class.default
38
+
39
+ if default_lang == self or (not default_lang.token_defined? token)
40
+ warn 'No token [%s] defined.' % token
41
+ return token
42
+ end
43
+
44
+ warn 'No token [%s] defined in %s, take from %s.' % \
45
+ [token, @abbreviation, default_lang.abbreviation]
46
+ return default_lang[token]
47
+ end
48
+
49
+ def []=(token, translation)
50
+ if translations.has_key?(token)
51
+ warn 'Token [%s] redefined in language %s.' % [token, @abbreviation]
52
+ end
53
+ @translations[token] = translation
54
+ end
55
+
56
+ end
57
+
58
+ end
59
+
@@ -0,0 +1,44 @@
1
+
2
+ require_relative './language'
3
+
4
+ module SimpleI18n
5
+ module Specification
6
+
7
+ def set_default_language(lang_abbr)
8
+ unless Language.table.key?(lang_abbr)
9
+ warn 'No language [%s] defined.' % lang_abbr
10
+ return
11
+ end
12
+
13
+ Language.default = Language.table[lang_abbr]
14
+ end
15
+
16
+ def load_language_file(filename, options = {})
17
+ BasicObject.new.instance_eval do
18
+ class << self
19
+ include TranslationDefinition
20
+ end
21
+ Kernel.eval(File.read(filename), Kernel.binding)
22
+ end
23
+ end
24
+
25
+
26
+ module TranslationDefinition
27
+
28
+ def define_language(abbreviation, full_name, &block)
29
+ lang = Language.new(abbreviation, full_name)
30
+
31
+ if block.arity == 0
32
+ lang.instance_eval(&block)
33
+ elsif block.arity == 1
34
+ block.call(lang)
35
+ else
36
+ warn 'Pass one or zero argument to `define_language\' please.'
37
+ end
38
+ end
39
+
40
+ end
41
+
42
+
43
+ end
44
+ end
@@ -0,0 +1,3 @@
1
+ module SimpleI18n
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8; ruby -*-
2
+
3
+ require File.expand_path('../lib/simple_i18n/version', __FILE__)
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.authors = ["Shou Ya"]
7
+ gem.email = ["shouyatf@gmail.com"]
8
+ gem.description = 'A simple internationalization library for' \
9
+ 'easily creating multilanguage ruby program'
10
+ gem.summary = gem.description
11
+
12
+ gem.homepage = "https://github.com/shouya/simple_i18n" # TODO
13
+
14
+ gem.files = `git ls-files`.split($\)
15
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
16
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
17
+ gem.name = "simple_i18n"
18
+ gem.require_paths = ["lib"]
19
+ gem.version = SimpleI18n::VERSION
20
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: simple_i18n
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Shou Ya
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-07-21 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: A simple internationalization library foreasily creating multilanguage
15
+ ruby program
16
+ email:
17
+ - shouyatf@gmail.com
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - .gitignore
23
+ - Gemfile
24
+ - LICENSE
25
+ - README.md
26
+ - Rakefile
27
+ - demo_project/i18nspec.rb
28
+ - demo_project/language/en
29
+ - demo_project/language/zh
30
+ - demo_project/lib/libfoo.rb
31
+ - demo_project/test.rb
32
+ - lib/simple_i18n.rb
33
+ - lib/simple_i18n/language.rb
34
+ - lib/simple_i18n/specification.rb
35
+ - lib/simple_i18n/version.rb
36
+ - simple_i18n.gemspec
37
+ homepage: https://github.com/shouya/simple_i18n
38
+ licenses: []
39
+ post_install_message:
40
+ rdoc_options: []
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ requirements: []
56
+ rubyforge_project:
57
+ rubygems_version: 1.8.23
58
+ signing_key:
59
+ specification_version: 3
60
+ summary: A simple internationalization library foreasily creating multilanguage ruby
61
+ program
62
+ test_files: []
63
+ has_rdoc: