countries_and_languages 0.1.0
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.
- data/Gemfile +9 -0
- data/Gemfile.lock +65 -0
- data/Rakefile +20 -0
- data/Readme.md +42 -0
- data/countries_and_languages.gemspec +12 -0
- data/init.rb +2 -0
- data/lib/countries_and_languages/version.rb +3 -0
- data/lib/countries_and_languages.rb +49 -0
- data/spec/countries_and_languages_spec.rb +73 -0
- data/spec/spec_helper.rb +6 -0
- metadata +71 -0
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
countries_and_languages (0.1.0)
|
5
|
+
i18n_data
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
actionpack (3.1.1)
|
11
|
+
activemodel (= 3.1.1)
|
12
|
+
activesupport (= 3.1.1)
|
13
|
+
builder (~> 3.0.0)
|
14
|
+
erubis (~> 2.7.0)
|
15
|
+
i18n (~> 0.6)
|
16
|
+
rack (~> 1.3.2)
|
17
|
+
rack-cache (~> 1.1)
|
18
|
+
rack-mount (~> 0.8.2)
|
19
|
+
rack-test (~> 0.6.1)
|
20
|
+
sprockets (~> 2.0.2)
|
21
|
+
activemodel (3.1.1)
|
22
|
+
activesupport (= 3.1.1)
|
23
|
+
builder (~> 3.0.0)
|
24
|
+
i18n (~> 0.6)
|
25
|
+
activesupport (3.1.1)
|
26
|
+
multi_json (~> 1.0)
|
27
|
+
builder (3.0.0)
|
28
|
+
diff-lcs (1.1.3)
|
29
|
+
erubis (2.7.0)
|
30
|
+
hike (1.2.1)
|
31
|
+
i18n (0.6.0)
|
32
|
+
i18n_data (0.2.7)
|
33
|
+
activesupport
|
34
|
+
multi_json (1.0.3)
|
35
|
+
rack (1.3.5)
|
36
|
+
rack-cache (1.1)
|
37
|
+
rack (>= 0.4)
|
38
|
+
rack-mount (0.8.3)
|
39
|
+
rack (>= 1.0.0)
|
40
|
+
rack-test (0.6.1)
|
41
|
+
rack (>= 1.0)
|
42
|
+
rake (0.9.2)
|
43
|
+
rspec (2.6.0)
|
44
|
+
rspec-core (~> 2.6.0)
|
45
|
+
rspec-expectations (~> 2.6.0)
|
46
|
+
rspec-mocks (~> 2.6.0)
|
47
|
+
rspec-core (2.6.4)
|
48
|
+
rspec-expectations (2.6.0)
|
49
|
+
diff-lcs (~> 1.1.2)
|
50
|
+
rspec-mocks (2.6.0)
|
51
|
+
sprockets (2.0.3)
|
52
|
+
hike (~> 1.2)
|
53
|
+
rack (~> 1.0)
|
54
|
+
tilt (~> 1.1, != 1.3.0)
|
55
|
+
tilt (1.3.3)
|
56
|
+
|
57
|
+
PLATFORMS
|
58
|
+
ruby
|
59
|
+
|
60
|
+
DEPENDENCIES
|
61
|
+
actionpack
|
62
|
+
activesupport
|
63
|
+
countries_and_languages!
|
64
|
+
rake
|
65
|
+
rspec (~> 2)
|
data/Rakefile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require "bundler"
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
task :default do
|
5
|
+
sh "rspec spec/"
|
6
|
+
end
|
7
|
+
|
8
|
+
rule /^version:bump:.*/ do |t|
|
9
|
+
sh "git status | grep 'nothing to commit'" # ensure we are not dirty
|
10
|
+
index = ['major', 'minor','patch'].index(t.name.split(':').last)
|
11
|
+
file = 'lib/countries_and_languages/version.rb'
|
12
|
+
|
13
|
+
version_file = File.read(file)
|
14
|
+
old_version, *version_parts = version_file.match(/(\d+)\.(\d+)\.(\d+)/).to_a
|
15
|
+
version_parts[index] = version_parts[index].to_i + 1
|
16
|
+
new_version = version_parts * '.'
|
17
|
+
File.open(file,'w'){|f| f.write(version_file.sub(old_version, new_version)) }
|
18
|
+
|
19
|
+
sh "bundle && git add #{file} Gemfile.lock && git commit -m 'bump version to #{new_version}'"
|
20
|
+
end
|
data/Readme.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
Countries and languages in I18n.locale
|
2
|
+
======================================
|
3
|
+
In currently 85 languages supplied by [I18nData](http://github.com/grosser/i18n_data).<br/>
|
4
|
+
Languages and countries are stored as iso 639/iso 3166 - 2 letter code.<br/>
|
5
|
+
Methods are available in views.
|
6
|
+
|
7
|
+
@user.country == 'de'
|
8
|
+
@user.language == 'de'
|
9
|
+
|
10
|
+
User is from <%=country(@user.country)%> and speaks <%=language(@user.language)%>
|
11
|
+
User is from Germany and speaks German.
|
12
|
+
|
13
|
+
Please select you language <%=f.select_tag(:language,options_for_select(languages))%>
|
14
|
+
Select box with all 185 localized languages.
|
15
|
+
|
16
|
+
If you have special needs like renaming countries or only displaying a subset,
|
17
|
+
have a look at the code and overwrite as necessary.
|
18
|
+
|
19
|
+
DEMO can be found in [Gettext example application](http://github.com/grosser/gettext_i18n_rails_example)
|
20
|
+
|
21
|
+
Install
|
22
|
+
=====
|
23
|
+
|
24
|
+
As Gem
|
25
|
+
|
26
|
+
gem install countries_and_languages
|
27
|
+
|
28
|
+
As Rails Plugin
|
29
|
+
|
30
|
+
rails plugin install git://github.com/grosser/countries_and_languages.git
|
31
|
+
|
32
|
+
# Gemfile
|
33
|
+
gem 'i18n_data'
|
34
|
+
|
35
|
+
|
36
|
+
Author
|
37
|
+
======
|
38
|
+
[Michael Grosser](http://grosser.it)<br/>
|
39
|
+
michael@grosser.it<br/>
|
40
|
+
Hereby placed under public domain, do what you want, just do not hold me accountable...<br/>
|
41
|
+
[](https://flattr.com/submit/auto?user_id=grosser&url=https://github.com/grosser/countries_and_languages&title=countries_and_languages&language=en_US&tags=github&category=software)
|
42
|
+
[](http://travis-ci.org/grosser/countries_and_languages)
|
@@ -0,0 +1,12 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
|
2
|
+
name = 'countries_and_languages'
|
3
|
+
require "#{name}/version"
|
4
|
+
|
5
|
+
Gem::Specification.new name, CountriesAndLanguages::VERSION do |s|
|
6
|
+
s.summary = "Countries and languages in I18n.locale for select_tag or output in 85 languages"
|
7
|
+
s.authors = ["Michael Grosser"]
|
8
|
+
s.email = "michael@grosser.it"
|
9
|
+
s.homepage = "http://github.com/grosser/#{name}"
|
10
|
+
s.files = `git ls-files`.split("\n")
|
11
|
+
s.add_dependency 'i18n_data'
|
12
|
+
end
|
data/init.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
module CountriesAndLanguages
|
3
|
+
extend self
|
4
|
+
|
5
|
+
module Helpers
|
6
|
+
def countries
|
7
|
+
@@countries ||= {}
|
8
|
+
@@countries[I18n.locale] ||= CountriesAndLanguages.clean_and_sort(I18nData.countries(I18n.locale.to_s.upcase))
|
9
|
+
end
|
10
|
+
|
11
|
+
def country(country_code)
|
12
|
+
countries.rassoc(country_code.to_s.upcase)[0] rescue ''
|
13
|
+
end
|
14
|
+
|
15
|
+
def languages
|
16
|
+
@@languages ||= {}
|
17
|
+
@@languages[I18n.locale] ||= CountriesAndLanguages.clean_and_sort(I18nData.languages(I18n.locale.to_s.upcase))
|
18
|
+
end
|
19
|
+
|
20
|
+
def language(language_code)
|
21
|
+
languages.rassoc(language_code.to_s.upcase)[0] rescue ''
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def clean_and_sort(data)
|
26
|
+
data = data.to_a.sort_by{|code,name| convert_umlaut_to_base(name)}
|
27
|
+
data.map!{|code,name|[clean_name(name),code]}
|
28
|
+
end
|
29
|
+
|
30
|
+
def clean_name(name)
|
31
|
+
#General fixes
|
32
|
+
name = name.sub(/\s*[,;(].*/,'')
|
33
|
+
|
34
|
+
#German fixes
|
35
|
+
name.sub!(/-Sprache$/,'')
|
36
|
+
name.sub!(/ Peoples Democratic Republics Democratic Republic/,'')#Lao
|
37
|
+
name.sub!(/Demokratische Republik /,'')#Congo
|
38
|
+
|
39
|
+
name
|
40
|
+
end
|
41
|
+
|
42
|
+
def convert_umlaut_to_base(input)
|
43
|
+
$KCODE='u'
|
44
|
+
%w(aáä AÁÄÅ oóö OÓÖ ií IÍ uúü UÚÜ eé EÉ sß).inject(input.dup) do |input, set|
|
45
|
+
to, *from = set.split('')
|
46
|
+
input.gsub(/[#{from}]/, to)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require File.expand_path("spec_helper", File.dirname(__FILE__))
|
3
|
+
|
4
|
+
include CountriesAndLanguages::Helpers
|
5
|
+
|
6
|
+
describe CountriesAndLanguages do
|
7
|
+
before do
|
8
|
+
I18n.locale = :en
|
9
|
+
end
|
10
|
+
|
11
|
+
{:country=>['Germany','Deutschland'],:language=>['German','Deutsch']}.each do |method,translation|
|
12
|
+
it "translates #{method}" do
|
13
|
+
send(method,'DE').should == translation[0]
|
14
|
+
I18n.locale = :de
|
15
|
+
send(method,'DE').should == translation[1]
|
16
|
+
end
|
17
|
+
|
18
|
+
it "returns blank when not found" do
|
19
|
+
send(method,'XC').should be_blank
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe 'clean names' do
|
24
|
+
it "removes everything in braces" do
|
25
|
+
country('va').should == 'Holy See'
|
26
|
+
language('IA').should == 'Interlingua'
|
27
|
+
end
|
28
|
+
it "removes everything behind comma" do
|
29
|
+
country('IR').should == 'Iran'
|
30
|
+
language('ND').should == 'Ndebele'
|
31
|
+
end
|
32
|
+
it "removes everything behind semicolon" do
|
33
|
+
language('nb').should == 'Bokmål'
|
34
|
+
language('ca').should == 'Catalan'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
it "sorts umlaut-aware" do
|
39
|
+
I18n.locale = :de
|
40
|
+
countries[1][0].should == 'Ägypten'
|
41
|
+
end
|
42
|
+
|
43
|
+
describe 'misc fixes' do
|
44
|
+
describe 'German' do
|
45
|
+
before {I18n.locale = :de}
|
46
|
+
it "removes -Sprache aditions" do
|
47
|
+
language('ZU').should == "Zulu"
|
48
|
+
end
|
49
|
+
it "knows Kongo" do
|
50
|
+
country('CD').should == 'Kongo'
|
51
|
+
end
|
52
|
+
it "knows Lao" do
|
53
|
+
country('LA').should == 'Lao'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe :select_tag do
|
59
|
+
def h
|
60
|
+
ActionController::Base.helpers
|
61
|
+
end
|
62
|
+
|
63
|
+
it "can use countries for a select tag" do
|
64
|
+
select = h.select_tag('x',h.options_for_select(countries))
|
65
|
+
select.split("\n").last.should == %Q[<option value=\"ZW\">Zimbabwe</option></select>]
|
66
|
+
end
|
67
|
+
|
68
|
+
it "can use languages for a select tag" do
|
69
|
+
select = h.select_tag('x',h.options_for_select(languages))
|
70
|
+
select.split("\n").last.should == %Q[<option value=\"ZU\">Zulu</option></select>]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: countries_and_languages
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Michael Grosser
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-10-27 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: i18n_data
|
16
|
+
requirement: &76023630 !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: *76023630
|
25
|
+
description:
|
26
|
+
email: michael@grosser.it
|
27
|
+
executables: []
|
28
|
+
extensions: []
|
29
|
+
extra_rdoc_files: []
|
30
|
+
files:
|
31
|
+
- Gemfile
|
32
|
+
- Gemfile.lock
|
33
|
+
- Rakefile
|
34
|
+
- Readme.md
|
35
|
+
- countries_and_languages.gemspec
|
36
|
+
- init.rb
|
37
|
+
- lib/countries_and_languages.rb
|
38
|
+
- lib/countries_and_languages/version.rb
|
39
|
+
- spec/countries_and_languages_spec.rb
|
40
|
+
- spec/spec_helper.rb
|
41
|
+
homepage: http://github.com/grosser/countries_and_languages
|
42
|
+
licenses: []
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
require_paths:
|
46
|
+
- lib
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
49
|
+
requirements:
|
50
|
+
- - ! '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
segments:
|
54
|
+
- 0
|
55
|
+
hash: 199256531
|
56
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
segments:
|
63
|
+
- 0
|
64
|
+
hash: 199256531
|
65
|
+
requirements: []
|
66
|
+
rubyforge_project:
|
67
|
+
rubygems_version: 1.8.10
|
68
|
+
signing_key:
|
69
|
+
specification_version: 3
|
70
|
+
summary: Countries and languages in I18n.locale for select_tag or output in 85 languages
|
71
|
+
test_files: []
|