i18n_language_select 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +5 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/i18n_language_select.gemspec +25 -0
- data/lib/i18n_language_select/form_builder.rb +7 -0
- data/lib/i18n_language_select/form_helpers.rb +13 -0
- data/lib/i18n_language_select/import.rb +107 -0
- data/lib/i18n_language_select/instance_tag.rb +46 -0
- data/lib/i18n_language_select/railtie.rb +35 -0
- data/lib/i18n_language_select/version.rb +3 -0
- data/lib/i18n_language_select.rb +47 -0
- data/lib/locales/i18n_languages.af.yml +87 -0
- data/lib/locales/i18n_languages.ar.yml +90 -0
- data/lib/locales/i18n_languages.az.yml +90 -0
- data/lib/locales/i18n_languages.be.yml +78 -0
- data/lib/locales/i18n_languages.bg.yml +90 -0
- data/lib/locales/i18n_languages.bn.yml +90 -0
- data/lib/locales/i18n_languages.bs.yml +89 -0
- data/lib/locales/i18n_languages.ca.yml +90 -0
- data/lib/locales/i18n_languages.cs.yml +90 -0
- data/lib/locales/i18n_languages.cy.yml +89 -0
- data/lib/locales/i18n_languages.da.yml +90 -0
- data/lib/locales/i18n_languages.de.yml +90 -0
- data/lib/locales/i18n_languages.el.yml +90 -0
- data/lib/locales/i18n_languages.en.yml +93 -0
- data/lib/locales/i18n_languages.eo.yml +86 -0
- data/lib/locales/i18n_languages.es.yml +90 -0
- data/lib/locales/i18n_languages.et.yml +90 -0
- data/lib/locales/i18n_languages.eu.yml +88 -0
- data/lib/locales/i18n_languages.fa.yml +90 -0
- data/lib/locales/i18n_languages.fi.yml +90 -0
- data/lib/locales/i18n_languages.fr.yml +90 -0
- data/lib/locales/i18n_languages.ga.yml +90 -0
- data/lib/locales/i18n_languages.gl.yml +88 -0
- data/lib/locales/i18n_languages.gu.yml +90 -0
- data/lib/locales/i18n_languages.ha.yml +80 -0
- data/lib/locales/i18n_languages.hi.yml +90 -0
- data/lib/locales/i18n_languages.hr.yml +90 -0
- data/lib/locales/i18n_languages.hu.yml +90 -0
- data/lib/locales/i18n_languages.hy.yml +86 -0
- data/lib/locales/i18n_languages.id.yml +90 -0
- data/lib/locales/i18n_languages.ig.yml +43 -0
- data/lib/locales/i18n_languages.is.yml +90 -0
- data/lib/locales/i18n_languages.it.yml +90 -0
- data/lib/locales/i18n_languages.ja.yml +90 -0
- data/lib/locales/i18n_languages.ka.yml +87 -0
- data/lib/locales/i18n_languages.kk.yml +87 -0
- data/lib/locales/i18n_languages.km.yml +86 -0
- data/lib/locales/i18n_languages.kn.yml +90 -0
- data/lib/locales/i18n_languages.ko.yml +90 -0
- data/lib/locales/i18n_languages.lo.yml +90 -0
- data/lib/locales/i18n_languages.lt.yml +90 -0
- data/lib/locales/i18n_languages.lv.yml +90 -0
- data/lib/locales/i18n_languages.mg.yml +44 -0
- data/lib/locales/i18n_languages.mk.yml +90 -0
- data/lib/locales/i18n_languages.ml.yml +90 -0
- data/lib/locales/i18n_languages.mn.yml +86 -0
- data/lib/locales/i18n_languages.mr.yml +90 -0
- data/lib/locales/i18n_languages.ms.yml +87 -0
- data/lib/locales/i18n_languages.mt.yml +90 -0
- data/lib/locales/i18n_languages.my.yml +84 -0
- data/lib/locales/i18n_languages.ne.yml +85 -0
- data/lib/locales/i18n_languages.nl.yml +90 -0
- data/lib/locales/i18n_languages.pa.yml +84 -0
- data/lib/locales/i18n_languages.pl.yml +90 -0
- data/lib/locales/i18n_languages.pt.yml +90 -0
- data/lib/locales/i18n_languages.ro.yml +90 -0
- data/lib/locales/i18n_languages.ru.yml +90 -0
- data/lib/locales/i18n_languages.si.yml +84 -0
- data/lib/locales/i18n_languages.sk.yml +90 -0
- data/lib/locales/i18n_languages.sl.yml +90 -0
- data/lib/locales/i18n_languages.so.yml +81 -0
- data/lib/locales/i18n_languages.sq.yml +86 -0
- data/lib/locales/i18n_languages.sr.yml +90 -0
- data/lib/locales/i18n_languages.sv.yml +90 -0
- data/lib/locales/i18n_languages.sw.yml +87 -0
- data/lib/locales/i18n_languages.ta.yml +90 -0
- data/lib/locales/i18n_languages.te.yml +90 -0
- data/lib/locales/i18n_languages.th.yml +90 -0
- data/lib/locales/i18n_languages.tr.yml +90 -0
- data/lib/locales/i18n_languages.uk.yml +90 -0
- data/lib/locales/i18n_languages.ur.yml +88 -0
- data/lib/locales/i18n_languages.uz.yml +84 -0
- data/lib/locales/i18n_languages.vi.yml +90 -0
- data/lib/locales/i18n_languages.yi.yml +74 -0
- data/lib/locales/i18n_languages.yo.yml +78 -0
- data/lib/locales/i18n_languages.zh.yml +90 -0
- data/lib/locales/i18n_languages.zu.yml +87 -0
- data/lib/tasks/import_languages.rake +25 -0
- data/prune_languages.rb +49 -0
- metadata +193 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: df6121d4d84dbe1fcc23a1c5bdb93b9b198d0293
|
4
|
+
data.tar.gz: b170555f0fc346668bfec51437e62c9862daf726
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3a3558c23d4ca5a7bbb88775fe90121be5e04d19b1d729a1e1c33bb75d20b8833f802cc4184a1f0fc6dc31a6976f29870739e8f737798f22e79474c396d011b5
|
7
|
+
data.tar.gz: 45624fd65356eae7b3c03ca48c5dfb26df0457937dfae6f9ffc7ea366deeae8ebbd22d92ddb98b02eaea43a03c22de12c71a0e6e325fbaea85d12ef546d4ac08
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2015 Adam St. John
|
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.
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# I18nLanguageSelect
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'i18n_language_select'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install i18n_language_select
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it ( http://github.com/<my-github-username>/i18n_language_select/fork )
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'i18n_language_select/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "i18n_language_select"
|
8
|
+
spec.version = I18nLanguageSelect::VERSION
|
9
|
+
spec.authors = ["Adam St. John"]
|
10
|
+
spec.email = ["astjohn@gmail.com"]
|
11
|
+
spec.homepage = "https://github.com/Sitata/i18n_language_select"
|
12
|
+
spec.summary = "I18n language select helper"
|
13
|
+
spec.description = "A simple language code select helper that works with I18n translations."
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.5"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "rspec"
|
24
|
+
spec.add_development_dependency "threach"
|
25
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
module I18nLanguageSelect
|
2
|
+
module FormBuilder
|
3
|
+
def language_code_select(method, priority_languages = nil, options = {}, html_options = {})
|
4
|
+
@template.language_code_select(@object_name, method, priority_languages, options.merge(object: @object), html_options)
|
5
|
+
end
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module I18nLanguageSelect
|
2
|
+
module FormHelpers
|
3
|
+
def language_code_select(object_name, method, priority_languages = nil, options = {}, html_options = {})
|
4
|
+
if Rails::VERSION::MAJOR >= 4
|
5
|
+
instance_tag = ActionView::Helpers::Tags::Select.new(object_name, method, self, [], options, html_options)
|
6
|
+
instance_tag.to_language_code_select_tag(priority_languages, html_options)
|
7
|
+
else
|
8
|
+
instance_tag = ActionView::Helpers::InstanceTag.new(object_name, method, self, options.delete(:object))
|
9
|
+
instance_tag.to_language_code_select_tag(priority_languages, html_options, options)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'open-uri'
|
3
|
+
require 'nokogiri'
|
4
|
+
require 'threach'
|
5
|
+
|
6
|
+
# Imports ISO 639-1 country codes
|
7
|
+
# It parses a HTML file from Unicode.org for given locale and saves the
|
8
|
+
# Rails' I18n hash in the plugin +locale+ directory
|
9
|
+
module I18nLanguageSelect
|
10
|
+
class Import
|
11
|
+
attr_accessor :output_dir
|
12
|
+
attr_reader :locales
|
13
|
+
|
14
|
+
def initialize(locales = nil, namespace=nil)
|
15
|
+
@namespace = namespace || I18nLanguageSelect::NAMESPACE
|
16
|
+
@locales = if locales
|
17
|
+
locales.split(",")
|
18
|
+
else
|
19
|
+
fetch_locales
|
20
|
+
end
|
21
|
+
if @locales && @locales.length
|
22
|
+
puts "Gathering languages from unicode.org using the namespace '#{@namespace}' and the locales: #{@locales.join(', ')}"
|
23
|
+
else
|
24
|
+
puts "Unable to gather languages. No locales specified. Either specifiy locales using the environment variable LOCALES, or install the i18n gem."
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def process
|
29
|
+
@locales.threach(4, :each_with_index) do |locale, index|
|
30
|
+
puts "Processing: #{locale}"
|
31
|
+
# ----- Get the CLDR HTML --------------------------------------------------
|
32
|
+
begin
|
33
|
+
doc = Nokogiri::HTML(open("http://www.unicode.org/cldr/charts/latest/summary/#{locale}.html"))
|
34
|
+
rescue => e
|
35
|
+
puts "[!] Invalid locale name '#{locale}'! Not found in CLDR (#{e})"
|
36
|
+
return if index == @locales.length - 1
|
37
|
+
end
|
38
|
+
|
39
|
+
languages = search_for_languages(doc)
|
40
|
+
if languages.keys.length
|
41
|
+
# ----- Parse the HTML with Nokogiri ----------------------------------------
|
42
|
+
output = { locale => { @namespace => languages } }
|
43
|
+
# ----- Write the parsed values into file ---------------------------------
|
44
|
+
write_for(locale, output)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def search_for_languages(doc)
|
52
|
+
result = {}
|
53
|
+
doc.search("//tr").each do |row|
|
54
|
+
if row_is_language?(row)
|
55
|
+
code_cell = row.search("td[@class='g']").last
|
56
|
+
value_cell = row.search("td[@class='v']").first
|
57
|
+
|
58
|
+
if value_cell
|
59
|
+
r = /([A-Za-z\-_0-9]+)/ # to sanitize the language code
|
60
|
+
match = r.match(code_cell.inner_text)
|
61
|
+
code = match[0] if match
|
62
|
+
name = value_cell.inner_text
|
63
|
+
# if code and name are the same, then translation doesn't exist and best to
|
64
|
+
# not include anything so developer can choose own fallback.
|
65
|
+
result.update(code.to_s => name.to_s) unless code.to_s == name.to_s
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
# result.sort_by { |key, value| key }.to_h works in Ruby 2.x
|
70
|
+
Hash[result.sort_by { |key, value| key }]
|
71
|
+
end
|
72
|
+
|
73
|
+
def row_is_language?(row)
|
74
|
+
primary = row.search("td[@class='n']")
|
75
|
+
secondary = row.search("td[@class='g']")
|
76
|
+
|
77
|
+
has_locale_cell = primary.first && primary.first.inner_text =~ /^Locale Display Names$/
|
78
|
+
primary_has_language_cell = primary[1] && primary[1].inner_text =~ /^Languages/
|
79
|
+
secondary_has_language_cell = secondary.first && secondary.first.inner_text =~ /^Languages/
|
80
|
+
|
81
|
+
has_locale_cell && (primary_has_language_cell || secondary_has_language_cell)
|
82
|
+
end
|
83
|
+
|
84
|
+
def fetch_locales
|
85
|
+
puts "Fetching available locales from unicode.org."
|
86
|
+
begin
|
87
|
+
doc = Nokogiri::HTML(open("http://www.unicode.org/cldr/charts/latest/summary/root.html"))
|
88
|
+
doc.css("p a").map{|link| link['href']}.map do |url|
|
89
|
+
m = /([A-za-z]+).html/.match(url)
|
90
|
+
m[1] if m && m[1] != "root"
|
91
|
+
end.compact.uniq
|
92
|
+
rescue => e
|
93
|
+
puts "[!] Unable to fetch unitcode root for locales (#{e})."
|
94
|
+
[]
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
|
99
|
+
def write_for(locale, output)
|
100
|
+
puts "\n... writing the output"
|
101
|
+
filename = File.join(Dir.pwd, "#{@namespace}.#{locale}.yml")
|
102
|
+
File.rename(filename, filename + ".OLD") if File.exists?(filename) # Rename by appending 'OLD' if file exists
|
103
|
+
File.open(filename, "w+") { |f| f << output.to_yaml }
|
104
|
+
puts "\n---\nWritten values for the '#{locale}' into file: #{filename}\n"
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module I18nLanguageSelect
|
2
|
+
module InstanceTag
|
3
|
+
|
4
|
+
def to_language_code_select_tag(priority_languages, html_options = {}, options = {})
|
5
|
+
# Rails 4 stores options sent when creating an InstanceTag.
|
6
|
+
# Let's use them!
|
7
|
+
options = @options if defined?(@options)
|
8
|
+
|
9
|
+
language_code_select(priority_languages, options, html_options)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Adapted from Rails language_select. Just uses language codes instead of full names.
|
13
|
+
def language_code_select(priority_languages, options, html_options)
|
14
|
+
selected = object.send(@method_name) if object.respond_to?(@method_name)
|
15
|
+
|
16
|
+
languages = ""
|
17
|
+
|
18
|
+
if options.present? and options[:include_blank]
|
19
|
+
option = options[:include_blank] == true ? "" : options[:include_blank]
|
20
|
+
languages += "<option>#{option}</option>\n"
|
21
|
+
end
|
22
|
+
|
23
|
+
if priority_languages
|
24
|
+
languages += options_for_select(priority_languages, selected)
|
25
|
+
languages += "<option value=\"\" disabled=\"disabled\">-------------</option>\n"
|
26
|
+
end
|
27
|
+
|
28
|
+
languages = languages + options_for_select(language_translations, selected)
|
29
|
+
|
30
|
+
html_options = html_options.stringify_keys
|
31
|
+
add_default_name_and_id(html_options)
|
32
|
+
|
33
|
+
content_tag(:select, languages.html_safe, html_options)
|
34
|
+
end
|
35
|
+
|
36
|
+
def language_translations
|
37
|
+
I18n.t(I18nLanguageSelect.configuration.namespace.to_s).map do |pairing|
|
38
|
+
[pairing[1], pairing[0]] if pairing[0] && pairing[1]
|
39
|
+
end.compact.sort_by do |pairing|
|
40
|
+
pairing[0] # sort by language name alphabetical
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module I18nLanguageSelect
|
2
|
+
class Railtie < Rails::Railtie
|
3
|
+
initializer 'i18n_language_select' do |app|
|
4
|
+
I18nLanguageSelect::Railtie.instance_eval do
|
5
|
+
|
6
|
+
unless I18nLanguageSelect.configuration.custom
|
7
|
+
which_locals = if I18nLanguageSelect.configuration.available_locales_only
|
8
|
+
app.config.i18n.available_locales
|
9
|
+
else
|
10
|
+
nil
|
11
|
+
end
|
12
|
+
pattern = pattern_from(which_locals)
|
13
|
+
add("locales/i18n_languages.#{pattern}.yml")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
rake_tasks do
|
19
|
+
load "tasks/import_languages.rake"
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
|
24
|
+
def self.add(pattern)
|
25
|
+
files = Dir[File.join(File.dirname(__FILE__), '../', pattern)]
|
26
|
+
I18n.load_path.concat(files)
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.pattern_from(args)
|
30
|
+
array = Array(args || [])
|
31
|
+
array.blank? ? '*' : "{#{array.join ','}}"
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require "i18n_language_select/version"
|
2
|
+
require "i18n_language_select/form_helpers"
|
3
|
+
require "i18n_language_select/instance_tag"
|
4
|
+
require "i18n_language_select/form_builder"
|
5
|
+
require "i18n_language_select/import"
|
6
|
+
require 'i18n_language_select/railtie' if defined?(Rails)
|
7
|
+
|
8
|
+
module I18nLanguageSelect
|
9
|
+
|
10
|
+
class << self
|
11
|
+
|
12
|
+
def configuration
|
13
|
+
@configuration ||= Configuration.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def configuration=(config)
|
17
|
+
@configuration = config
|
18
|
+
end
|
19
|
+
|
20
|
+
def configure
|
21
|
+
yield(configuration)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
class Configuration
|
27
|
+
attr_accessor :namespace, # namespace of locales for language options
|
28
|
+
:custom, # if true, do not load locales from gem
|
29
|
+
:available_locales_only # if true and custom is false, only load app's locales from gem
|
30
|
+
|
31
|
+
def initialize
|
32
|
+
self.namespace = "i18n_languages"
|
33
|
+
self.custom = false
|
34
|
+
self.available_locales_only = true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
ActionView::Base.send(:include, I18nLanguageSelect::FormHelpers)
|
42
|
+
if Rails::VERSION::MAJOR >= 4
|
43
|
+
ActionView::Helpers::ActiveModelInstanceTag.send(:include, I18nLanguageSelect::InstanceTag)
|
44
|
+
else
|
45
|
+
ActionView::Helpers::InstanceTag.send(:include, I18nLanguageSelect::InstanceTag)
|
46
|
+
end
|
47
|
+
ActionView::Helpers::FormBuilder.send(:include, I18nLanguageSelect::FormBuilder)
|
@@ -0,0 +1,87 @@
|
|
1
|
+
---
|
2
|
+
af:
|
3
|
+
i18n_languages:
|
4
|
+
af: Afrikaans
|
5
|
+
ar: Arabies
|
6
|
+
az: Azerbeidjans
|
7
|
+
be: Wit-Russies
|
8
|
+
bg: Bulgaars
|
9
|
+
bn: Bengaals
|
10
|
+
bs: Bosnies
|
11
|
+
ca: Katalaans
|
12
|
+
cs: Tsjeggies
|
13
|
+
cy: Wallies
|
14
|
+
da: Deens
|
15
|
+
de: Duits
|
16
|
+
el: Grieks
|
17
|
+
en: Engels
|
18
|
+
eo: Esperanto
|
19
|
+
es: Spaans
|
20
|
+
et: Estnies
|
21
|
+
eu: Baskies
|
22
|
+
fa: Persies
|
23
|
+
fi: Fins
|
24
|
+
fr: Frans
|
25
|
+
ga: Iers
|
26
|
+
gl: Galisies
|
27
|
+
gu: Goedjarati
|
28
|
+
ha: Hausa
|
29
|
+
hi: Hindi
|
30
|
+
hr: Kroaties
|
31
|
+
ht: Haïtiaans
|
32
|
+
hu: Hongaars
|
33
|
+
hy: Armeens
|
34
|
+
id: Indonesies
|
35
|
+
ig: Igbo
|
36
|
+
is: Yslands
|
37
|
+
it: Italiaans
|
38
|
+
ja: Japannees
|
39
|
+
ka: Georgies
|
40
|
+
kk: Kazaks
|
41
|
+
km: Khmer
|
42
|
+
kn: Kannada
|
43
|
+
ko: Koreaans
|
44
|
+
la: Latyn
|
45
|
+
lo: Lao
|
46
|
+
lt: Litaus
|
47
|
+
lv: Letties
|
48
|
+
mg: Malgassies
|
49
|
+
mi: Maori
|
50
|
+
mk: Masedonies
|
51
|
+
ml: Malabaars
|
52
|
+
mn: Mongools
|
53
|
+
mr: Marathi
|
54
|
+
ms: Maleis
|
55
|
+
mt: Maltees
|
56
|
+
my: Birmaans
|
57
|
+
ne: Nepalees
|
58
|
+
nl: Nederlands
|
59
|
+
ny: Nyanja
|
60
|
+
pa: Pandjabi
|
61
|
+
pl: Pools
|
62
|
+
pt: Portugees
|
63
|
+
ro: Roemeens
|
64
|
+
ru: Russies
|
65
|
+
si: Sinhala
|
66
|
+
sk: Slowaaks
|
67
|
+
sl: Sloweens
|
68
|
+
so: Somalies
|
69
|
+
sq: Albanees
|
70
|
+
sr: Serwies
|
71
|
+
st: Suid-Sotho
|
72
|
+
su: Sundanees
|
73
|
+
sv: Sweeds
|
74
|
+
sw: Swahili
|
75
|
+
ta: Tamil
|
76
|
+
te: Telugu
|
77
|
+
tg: Tadzjieks
|
78
|
+
th: Thai
|
79
|
+
tr: Turks
|
80
|
+
uk: Oekraïens
|
81
|
+
ur: Oerdoe
|
82
|
+
uz: Oezbeeks
|
83
|
+
vi: Viëtnamees
|
84
|
+
yi: Jiddisj
|
85
|
+
yo: Yoruba
|
86
|
+
zh: Sjinees
|
87
|
+
zu: Zoeloe
|