multilang 0.0.1

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 multilang.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Takahiro Kondo
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,93 @@
1
+ # What is multilang
2
+
3
+ Support multilingualization.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'multilang'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install multilang
18
+
19
+ ## Usage
20
+
21
+ You will support multilingualization to following:
22
+
23
+ require 'multilang'
24
+
25
+ module Tokenizer
26
+ class English
27
+
28
+ # register Tokenizer::English to Tokenizer as English
29
+ Multilang.register self
30
+
31
+ end
32
+
33
+ class Japanese
34
+
35
+ # Class.#include is okay
36
+ include Multilang
37
+
38
+ end
39
+ end
40
+
41
+ You can use the multilingualized module to following:
42
+
43
+ english_tokenizer = Tokenizer[:en].new
44
+ japanese_tokenizer = Tokenizer['Japanese'].new
45
+
46
+ ### Register regardless name of class
47
+
48
+ By specifying `:as` option, you can register regardless name of class:
49
+
50
+ module Tokenizer
51
+ class E
52
+ Multilang.register self, :as => 'English'
53
+ end
54
+
55
+ class J
56
+
57
+ # ISO639-2 or ISO639-1 is okay
58
+ # (http://www.loc.gov/standards/iso639-2/php/code_list.php)
59
+ Multilang.register self, :as => :ja
60
+
61
+ end
62
+ end
63
+
64
+ ### Process at getting the class (or module) first
65
+
66
+ By giving a block to the `Multilang.#register`, you can execute code arbitrarily
67
+ at getting an object first from a multilingualized module:
68
+
69
+ module Tokenizer
70
+ class English
71
+ Multilang.register self do
72
+ # execute once at getting first
73
+ end
74
+ end
75
+ end
76
+
77
+ By specifying `:with` option, you can call `Kernel.#require`:
78
+
79
+ module Tokenizer
80
+ class English
81
+ Multilang.register self, :with => 'tokenizer/en'
82
+ end
83
+ end
84
+
85
+ Of course you can specify both a block and `:with` option.
86
+
87
+ ## Contributing
88
+
89
+ 1. Fork it
90
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
91
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
92
+ 4. Push to the branch (`git push origin my-new-feature`)
93
+ 5. Create new Pull Request
@@ -0,0 +1,26 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'open-uri'
3
+ require 'nokogiri'
4
+ require 'yaml'
5
+
6
+ desc 'Update language_names.yaml that refer from http://www.loc.gov/standards/iso639-2/php/code_list.php'
7
+ task :update do
8
+ document = Nokogiri::HTML(open('http://www.loc.gov/standards/iso639-2/php/code_list.php').read)
9
+ table = document.xpath('//h1/following-sibling::table')
10
+
11
+ language_names = table.xpath('tr/td[@scope="row"]/parent::tr').map do |row|
12
+ iso_639_2, iso_639_1, name = row.children.map(&:text).map(&:strip).reject(&:empty?)
13
+
14
+ if match = /([a-z]{3})\s*\(B\)/.match(iso_639_2)
15
+ iso_639_2 = match.captures[0]
16
+ end
17
+
18
+ aliases = [iso_639_2]
19
+ aliases << iso_639_1 unless iso_639_1 == "\u00a0"
20
+ [name, aliases]
21
+ end
22
+
23
+ File.open(File.join(File.dirname(__FILE__), %w(lib multilang language_names.yaml)), 'w') do |file|
24
+ YAML.dump(Hash[language_names], file)
25
+ end
26
+ end
@@ -0,0 +1,53 @@
1
+ require 'multilang/version'
2
+ require 'multilang/slot'
3
+
4
+ module Multilang
5
+ SLOT_KEY = :@__multilang_slot__
6
+
7
+ # Support the class or the module to multilingualization.
8
+ #
9
+ # @param [Class, Module] mod the class (or the module) to register
10
+ # @param [Hash] options
11
+ # @option options [String] :as the language name
12
+ # @option options [Symbol] :as the language code (ISO639-2 or ISO639-1)
13
+ # @option options [String] :with the path of the file to dependent
14
+ # @yield call once at getting the class (or the module) first
15
+ #
16
+ # @see Multilang::Slot#[]
17
+ def self.register(mod, options = {}, &first)
18
+ type = mod.class.name.downcase
19
+ raise TypeError, "can't convert #{mod.class} into #{Module}" unless mod.is_a?(Module)
20
+ raise ArgumentError, "anonymous #{type} can't register" if mod.name.nil?
21
+
22
+ namespace = mod.name.split('::')
23
+ class_name = namespace.pop
24
+ language_spec = options[:as] || class_name
25
+
26
+ if options[:with]
27
+ path = options[:with]
28
+
29
+ first = if block_given?
30
+ f = first
31
+ lambda { require path; f.call }
32
+ else
33
+ lambda { require path }
34
+ end
35
+ end
36
+
37
+ raise ArgumentError, "can't permit top-level #{type}" if namespace.empty?
38
+ parent = namespace.inject(Object) { |parent, name| parent.const_get(name) }
39
+
40
+ slot = if parent.instance_variable_defined?(SLOT_KEY)
41
+ parent.instance_variable_get(SLOT_KEY)
42
+ else
43
+ parent.extend(Slot::Access)
44
+ parent.instance_variable_set(SLOT_KEY, Slot.new)
45
+ end
46
+
47
+ slot.register(language_spec, mod, &first)
48
+ end
49
+
50
+ def self.included(klass)
51
+ register klass
52
+ end
53
+ end
@@ -0,0 +1,41 @@
1
+ require 'yaml'
2
+
3
+ module Multilang
4
+ module LanguageNames
5
+ NAME_MAP, CODE_MAP = begin
6
+ name_map = {}
7
+ code_map = {}
8
+
9
+ store = lambda do |map, key, value|
10
+ key = key.downcase
11
+ raise ArgumentError, "already defined #{key.inspect} => #{map[key].inspect} in map" if map[key]
12
+ map[key] = value
13
+ end
14
+
15
+ path = File.join(File.dirname(__FILE__), 'language_names.yaml')
16
+
17
+ YAML.load_file(path).each do |name, codes|
18
+ store[name_map, name, name]
19
+ codes.each { |code| store[code_map, code, name] }
20
+ end
21
+
22
+ [name_map, code_map]
23
+ end
24
+
25
+ # Convert from the language specifier to the language name.
26
+ #
27
+ # @param [String] spec the language name
28
+ # @param [Symbol] spec the language code (ISO639-2 or ISO639-1)
29
+ # @return [String] normalized language name
30
+ def self.[](spec)
31
+ map, key = case spec
32
+ when String then [NAME_MAP, spec]
33
+ when Symbol then [CODE_MAP, spec.to_s]
34
+ else raise TypeError, "can't convert #{spec.class} into #{String} or #{Symbol}"
35
+ end
36
+
37
+ map[key.downcase] or raise ArgumentError, "#{spec.inspect} language specifier does not defined"
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,1155 @@
1
+ ---
2
+ Afar:
3
+ - aar
4
+ - aa
5
+ Abkhazian:
6
+ - abk
7
+ - ab
8
+ Achinese:
9
+ - ace
10
+ Acoli:
11
+ - ach
12
+ Adangme:
13
+ - ada
14
+ Adyghe; Adygei:
15
+ - ady
16
+ Afro-Asiatic languages:
17
+ - afa
18
+ Afrihili:
19
+ - afh
20
+ Afrikaans:
21
+ - afr
22
+ - af
23
+ Ainu:
24
+ - ain
25
+ Akan:
26
+ - aka
27
+ - ak
28
+ Akkadian:
29
+ - akk
30
+ Albanian:
31
+ - alb
32
+ - sq
33
+ Aleut:
34
+ - ale
35
+ Algonquian languages:
36
+ - alg
37
+ Southern Altai:
38
+ - alt
39
+ Amharic:
40
+ - amh
41
+ - am
42
+ English, Old (ca.450-1100):
43
+ - ang
44
+ Angika:
45
+ - anp
46
+ Apache languages:
47
+ - apa
48
+ Arabic:
49
+ - ara
50
+ - ar
51
+ Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE):
52
+ - arc
53
+ Aragonese:
54
+ - arg
55
+ - an
56
+ Armenian:
57
+ - arm
58
+ - hy
59
+ Mapudungun; Mapuche:
60
+ - arn
61
+ Arapaho:
62
+ - arp
63
+ Artificial languages:
64
+ - art
65
+ Arawak:
66
+ - arw
67
+ Assamese:
68
+ - asm
69
+ - as
70
+ Asturian; Bable; Leonese; Asturleonese:
71
+ - ast
72
+ Athapascan languages:
73
+ - ath
74
+ Australian languages:
75
+ - aus
76
+ Avaric:
77
+ - ava
78
+ - av
79
+ Avestan:
80
+ - ave
81
+ - ae
82
+ Awadhi:
83
+ - awa
84
+ Aymara:
85
+ - aym
86
+ - ay
87
+ Azerbaijani:
88
+ - aze
89
+ - az
90
+ Banda languages:
91
+ - bad
92
+ Bamileke languages:
93
+ - bai
94
+ Bashkir:
95
+ - bak
96
+ - ba
97
+ Baluchi:
98
+ - bal
99
+ Bambara:
100
+ - bam
101
+ - bm
102
+ Balinese:
103
+ - ban
104
+ Basque:
105
+ - baq
106
+ - eu
107
+ Basa:
108
+ - bas
109
+ Baltic languages:
110
+ - bat
111
+ Beja; Bedawiyet:
112
+ - bej
113
+ Belarusian:
114
+ - bel
115
+ - be
116
+ Bemba:
117
+ - bem
118
+ Bengali:
119
+ - ben
120
+ - bn
121
+ Berber languages:
122
+ - ber
123
+ Bhojpuri:
124
+ - bho
125
+ Bihari languages:
126
+ - bih
127
+ - bh
128
+ Bikol:
129
+ - bik
130
+ Bini; Edo:
131
+ - bin
132
+ Bislama:
133
+ - bis
134
+ - bi
135
+ Siksika:
136
+ - bla
137
+ Bantu languages:
138
+ - bnt
139
+ Tibetan:
140
+ - tib
141
+ - bo
142
+ Bosnian:
143
+ - bos
144
+ - bs
145
+ Braj:
146
+ - bra
147
+ Breton:
148
+ - bre
149
+ - br
150
+ Batak languages:
151
+ - btk
152
+ Buriat:
153
+ - bua
154
+ Buginese:
155
+ - bug
156
+ Bulgarian:
157
+ - bul
158
+ - bg
159
+ Burmese:
160
+ - bur
161
+ - my
162
+ Blin; Bilin:
163
+ - byn
164
+ Caddo:
165
+ - cad
166
+ Central American Indian languages:
167
+ - cai
168
+ Galibi Carib:
169
+ - car
170
+ Catalan; Valencian:
171
+ - cat
172
+ - ca
173
+ Caucasian languages:
174
+ - cau
175
+ Cebuano:
176
+ - ceb
177
+ Celtic languages:
178
+ - cel
179
+ Czech:
180
+ - cze
181
+ - cs
182
+ Chamorro:
183
+ - cha
184
+ - ch
185
+ Chibcha:
186
+ - chb
187
+ Chechen:
188
+ - che
189
+ - ce
190
+ Chagatai:
191
+ - chg
192
+ Chinese:
193
+ - chi
194
+ - zh
195
+ Chuukese:
196
+ - chk
197
+ Mari:
198
+ - chm
199
+ Chinook jargon:
200
+ - chn
201
+ Choctaw:
202
+ - cho
203
+ Chipewyan; Dene Suline:
204
+ - chp
205
+ Cherokee:
206
+ - chr
207
+ Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic:
208
+ - chu
209
+ - cu
210
+ Chuvash:
211
+ - chv
212
+ - cv
213
+ Cheyenne:
214
+ - chy
215
+ Chamic languages:
216
+ - cmc
217
+ Coptic:
218
+ - cop
219
+ Cornish:
220
+ - cor
221
+ - kw
222
+ Corsican:
223
+ - cos
224
+ - co
225
+ Creoles and pidgins, English based:
226
+ - cpe
227
+ Creoles and pidgins, French-based:
228
+ - cpf
229
+ Creoles and pidgins, Portuguese-based:
230
+ - cpp
231
+ Cree:
232
+ - cre
233
+ - cr
234
+ Crimean Tatar; Crimean Turkish:
235
+ - crh
236
+ Creoles and pidgins:
237
+ - crp
238
+ Kashubian:
239
+ - csb
240
+ Cushitic languages:
241
+ - cus
242
+ Welsh:
243
+ - wel
244
+ - cy
245
+ Dakota:
246
+ - dak
247
+ Danish:
248
+ - dan
249
+ - da
250
+ Dargwa:
251
+ - dar
252
+ Land Dayak languages:
253
+ - day
254
+ Delaware:
255
+ - del
256
+ Slave (Athapascan):
257
+ - den
258
+ German:
259
+ - ger
260
+ - de
261
+ Dogrib:
262
+ - dgr
263
+ Dinka:
264
+ - din
265
+ Divehi; Dhivehi; Maldivian:
266
+ - div
267
+ - dv
268
+ Dogri:
269
+ - doi
270
+ Dravidian languages:
271
+ - dra
272
+ Lower Sorbian:
273
+ - dsb
274
+ Duala:
275
+ - dua
276
+ Dutch, Middle (ca.1050-1350):
277
+ - dum
278
+ Dutch; Flemish:
279
+ - dut
280
+ - nl
281
+ Dyula:
282
+ - dyu
283
+ Dzongkha:
284
+ - dzo
285
+ - dz
286
+ Efik:
287
+ - efi
288
+ Egyptian (Ancient):
289
+ - egy
290
+ Ekajuk:
291
+ - eka
292
+ Greek, Modern (1453-):
293
+ - gre
294
+ - el
295
+ Elamite:
296
+ - elx
297
+ English:
298
+ - eng
299
+ - en
300
+ English, Middle (1100-1500):
301
+ - enm
302
+ Esperanto:
303
+ - epo
304
+ - eo
305
+ Estonian:
306
+ - est
307
+ - et
308
+ Ewe:
309
+ - ewe
310
+ - ee
311
+ Ewondo:
312
+ - ewo
313
+ Fang:
314
+ - fan
315
+ Faroese:
316
+ - fao
317
+ - fo
318
+ Persian:
319
+ - per
320
+ - fa
321
+ Fanti:
322
+ - fat
323
+ Fijian:
324
+ - fij
325
+ - fj
326
+ Filipino; Pilipino:
327
+ - fil
328
+ Finnish:
329
+ - fin
330
+ - fi
331
+ Finno-Ugrian languages:
332
+ - fiu
333
+ Fon:
334
+ - fon
335
+ French:
336
+ - fre
337
+ - fr
338
+ French, Middle (ca.1400-1600):
339
+ - frm
340
+ French, Old (842-ca.1400):
341
+ - fro
342
+ Northern Frisian:
343
+ - frr
344
+ Eastern Frisian:
345
+ - frs
346
+ Western Frisian:
347
+ - fry
348
+ - fy
349
+ Fulah:
350
+ - ful
351
+ - ff
352
+ Friulian:
353
+ - fur
354
+ Ga:
355
+ - gaa
356
+ Gayo:
357
+ - gay
358
+ Gbaya:
359
+ - gba
360
+ Germanic languages:
361
+ - gem
362
+ Georgian:
363
+ - geo
364
+ - ka
365
+ Geez:
366
+ - gez
367
+ Gilbertese:
368
+ - gil
369
+ Gaelic; Scottish Gaelic:
370
+ - gla
371
+ - gd
372
+ Irish:
373
+ - gle
374
+ - ga
375
+ Galician:
376
+ - glg
377
+ - gl
378
+ Manx:
379
+ - glv
380
+ - gv
381
+ German, Middle High (ca.1050-1500):
382
+ - gmh
383
+ German, Old High (ca.750-1050):
384
+ - goh
385
+ Gondi:
386
+ - gon
387
+ Gorontalo:
388
+ - gor
389
+ Gothic:
390
+ - got
391
+ Grebo:
392
+ - grb
393
+ Greek, Ancient (to 1453):
394
+ - grc
395
+ Guarani:
396
+ - grn
397
+ - gn
398
+ Swiss German; Alemannic; Alsatian:
399
+ - gsw
400
+ Gujarati:
401
+ - guj
402
+ - gu
403
+ Gwich'in:
404
+ - gwi
405
+ Haida:
406
+ - hai
407
+ Haitian; Haitian Creole:
408
+ - hat
409
+ - ht
410
+ Hausa:
411
+ - hau
412
+ - ha
413
+ Hawaiian:
414
+ - haw
415
+ Hebrew:
416
+ - heb
417
+ - he
418
+ Herero:
419
+ - her
420
+ - hz
421
+ Hiligaynon:
422
+ - hil
423
+ Himachali languages; Western Pahari languages:
424
+ - him
425
+ Hindi:
426
+ - hin
427
+ - hi
428
+ Hittite:
429
+ - hit
430
+ Hmong; Mong:
431
+ - hmn
432
+ Hiri Motu:
433
+ - hmo
434
+ - ho
435
+ Croatian:
436
+ - hrv
437
+ - hr
438
+ Upper Sorbian:
439
+ - hsb
440
+ Hungarian:
441
+ - hun
442
+ - hu
443
+ Hupa:
444
+ - hup
445
+ Iban:
446
+ - iba
447
+ Igbo:
448
+ - ibo
449
+ - ig
450
+ Icelandic:
451
+ - ice
452
+ - is
453
+ Ido:
454
+ - ido
455
+ - io
456
+ Sichuan Yi; Nuosu:
457
+ - iii
458
+ - ii
459
+ Ijo languages:
460
+ - ijo
461
+ Inuktitut:
462
+ - iku
463
+ - iu
464
+ Interlingue; Occidental:
465
+ - ile
466
+ - ie
467
+ Iloko:
468
+ - ilo
469
+ Interlingua (International Auxiliary Language Association):
470
+ - ina
471
+ - ia
472
+ Indic languages:
473
+ - inc
474
+ Indonesian:
475
+ - ind
476
+ - id
477
+ Indo-European languages:
478
+ - ine
479
+ Ingush:
480
+ - inh
481
+ Inupiaq:
482
+ - ipk
483
+ - ik
484
+ Iranian languages:
485
+ - ira
486
+ Iroquoian languages:
487
+ - iro
488
+ Italian:
489
+ - ita
490
+ - it
491
+ Javanese:
492
+ - jav
493
+ - jv
494
+ Lojban:
495
+ - jbo
496
+ Japanese:
497
+ - jpn
498
+ - ja
499
+ Judeo-Persian:
500
+ - jpr
501
+ Judeo-Arabic:
502
+ - jrb
503
+ Kara-Kalpak:
504
+ - kaa
505
+ Kabyle:
506
+ - kab
507
+ Kachin; Jingpho:
508
+ - kac
509
+ Kalaallisut; Greenlandic:
510
+ - kal
511
+ - kl
512
+ Kamba:
513
+ - kam
514
+ Kannada:
515
+ - kan
516
+ - kn
517
+ Karen languages:
518
+ - kar
519
+ Kashmiri:
520
+ - kas
521
+ - ks
522
+ Kanuri:
523
+ - kau
524
+ - kr
525
+ Kawi:
526
+ - kaw
527
+ Kazakh:
528
+ - kaz
529
+ - kk
530
+ Kabardian:
531
+ - kbd
532
+ Khasi:
533
+ - kha
534
+ Khoisan languages:
535
+ - khi
536
+ Central Khmer:
537
+ - khm
538
+ - km
539
+ Khotanese; Sakan:
540
+ - kho
541
+ Kikuyu; Gikuyu:
542
+ - kik
543
+ - ki
544
+ Kinyarwanda:
545
+ - kin
546
+ - rw
547
+ Kirghiz; Kyrgyz:
548
+ - kir
549
+ - ky
550
+ Kimbundu:
551
+ - kmb
552
+ Konkani:
553
+ - kok
554
+ Komi:
555
+ - kom
556
+ - kv
557
+ Kongo:
558
+ - kon
559
+ - kg
560
+ Korean:
561
+ - kor
562
+ - ko
563
+ Kosraean:
564
+ - kos
565
+ Kpelle:
566
+ - kpe
567
+ Karachay-Balkar:
568
+ - krc
569
+ Karelian:
570
+ - krl
571
+ Kru languages:
572
+ - kro
573
+ Kurukh:
574
+ - kru
575
+ Kuanyama; Kwanyama:
576
+ - kua
577
+ - kj
578
+ Kumyk:
579
+ - kum
580
+ Kurdish:
581
+ - kur
582
+ - ku
583
+ Kutenai:
584
+ - kut
585
+ Ladino:
586
+ - lad
587
+ Lahnda:
588
+ - lah
589
+ Lamba:
590
+ - lam
591
+ Lao:
592
+ - lao
593
+ - lo
594
+ Latin:
595
+ - lat
596
+ - la
597
+ Latvian:
598
+ - lav
599
+ - lv
600
+ Lezghian:
601
+ - lez
602
+ Limburgan; Limburger; Limburgish:
603
+ - lim
604
+ - li
605
+ Lingala:
606
+ - lin
607
+ - ln
608
+ Lithuanian:
609
+ - lit
610
+ - lt
611
+ Mongo:
612
+ - lol
613
+ Lozi:
614
+ - loz
615
+ Luxembourgish; Letzeburgesch:
616
+ - ltz
617
+ - lb
618
+ Luba-Lulua:
619
+ - lua
620
+ Luba-Katanga:
621
+ - lub
622
+ - lu
623
+ Ganda:
624
+ - lug
625
+ - lg
626
+ Luiseno:
627
+ - lui
628
+ Lunda:
629
+ - lun
630
+ Luo (Kenya and Tanzania):
631
+ - luo
632
+ Lushai:
633
+ - lus
634
+ Macedonian:
635
+ - mac
636
+ - mk
637
+ Madurese:
638
+ - mad
639
+ Magahi:
640
+ - mag
641
+ Marshallese:
642
+ - mah
643
+ - mh
644
+ Maithili:
645
+ - mai
646
+ Makasar:
647
+ - mak
648
+ Malayalam:
649
+ - mal
650
+ - ml
651
+ Mandingo:
652
+ - man
653
+ Maori:
654
+ - mao
655
+ - mi
656
+ Austronesian languages:
657
+ - map
658
+ Marathi:
659
+ - mar
660
+ - mr
661
+ Masai:
662
+ - mas
663
+ Malay:
664
+ - may
665
+ - ms
666
+ Moksha:
667
+ - mdf
668
+ Mandar:
669
+ - mdr
670
+ Mende:
671
+ - men
672
+ Irish, Middle (900-1200):
673
+ - mga
674
+ Mi'kmaq; Micmac:
675
+ - mic
676
+ Minangkabau:
677
+ - min
678
+ Uncoded languages:
679
+ - mis
680
+ Mon-Khmer languages:
681
+ - mkh
682
+ Malagasy:
683
+ - mlg
684
+ - mg
685
+ Maltese:
686
+ - mlt
687
+ - mt
688
+ Manchu:
689
+ - mnc
690
+ Manipuri:
691
+ - mni
692
+ Manobo languages:
693
+ - mno
694
+ Mohawk:
695
+ - moh
696
+ Mongolian:
697
+ - mon
698
+ - mn
699
+ Mossi:
700
+ - mos
701
+ Multiple languages:
702
+ - mul
703
+ Munda languages:
704
+ - mun
705
+ Creek:
706
+ - mus
707
+ Mirandese:
708
+ - mwl
709
+ Marwari:
710
+ - mwr
711
+ Mayan languages:
712
+ - myn
713
+ Erzya:
714
+ - myv
715
+ Nahuatl languages:
716
+ - nah
717
+ North American Indian languages:
718
+ - nai
719
+ Neapolitan:
720
+ - nap
721
+ Nauru:
722
+ - nau
723
+ - na
724
+ Navajo; Navaho:
725
+ - nav
726
+ - nv
727
+ Ndebele, South; South Ndebele:
728
+ - nbl
729
+ - nr
730
+ Ndebele, North; North Ndebele:
731
+ - nde
732
+ - nd
733
+ Ndonga:
734
+ - ndo
735
+ - ng
736
+ Low German; Low Saxon; German, Low; Saxon, Low:
737
+ - nds
738
+ Nepali:
739
+ - nep
740
+ - ne
741
+ Nepal Bhasa; Newari:
742
+ - new
743
+ Nias:
744
+ - nia
745
+ Niger-Kordofanian languages:
746
+ - nic
747
+ Niuean:
748
+ - niu
749
+ Norwegian Nynorsk; Nynorsk, Norwegian:
750
+ - nno
751
+ - nn
752
+ Bokmål, Norwegian; Norwegian Bokmål:
753
+ - nob
754
+ - nb
755
+ Nogai:
756
+ - nog
757
+ Norse, Old:
758
+ - non
759
+ Norwegian:
760
+ - nor
761
+ - 'no'
762
+ N'Ko:
763
+ - nqo
764
+ Pedi; Sepedi; Northern Sotho:
765
+ - nso
766
+ Nubian languages:
767
+ - nub
768
+ Classical Newari; Old Newari; Classical Nepal Bhasa:
769
+ - nwc
770
+ Chichewa; Chewa; Nyanja:
771
+ - nya
772
+ - ny
773
+ Nyamwezi:
774
+ - nym
775
+ Nyankole:
776
+ - nyn
777
+ Nyoro:
778
+ - nyo
779
+ Nzima:
780
+ - nzi
781
+ Occitan (post 1500):
782
+ - oci
783
+ - oc
784
+ Ojibwa:
785
+ - oji
786
+ - oj
787
+ Oriya:
788
+ - ori
789
+ - or
790
+ Oromo:
791
+ - orm
792
+ - om
793
+ Osage:
794
+ - osa
795
+ Ossetian; Ossetic:
796
+ - oss
797
+ - os
798
+ Turkish, Ottoman (1500-1928):
799
+ - ota
800
+ Otomian languages:
801
+ - oto
802
+ Papuan languages:
803
+ - paa
804
+ Pangasinan:
805
+ - pag
806
+ Pahlavi:
807
+ - pal
808
+ Pampanga; Kapampangan:
809
+ - pam
810
+ Panjabi; Punjabi:
811
+ - pan
812
+ - pa
813
+ Papiamento:
814
+ - pap
815
+ Palauan:
816
+ - pau
817
+ Persian, Old (ca.600-400 B.C.):
818
+ - peo
819
+ Philippine languages:
820
+ - phi
821
+ Phoenician:
822
+ - phn
823
+ Pali:
824
+ - pli
825
+ - pi
826
+ Polish:
827
+ - pol
828
+ - pl
829
+ Pohnpeian:
830
+ - pon
831
+ Portuguese:
832
+ - por
833
+ - pt
834
+ Prakrit languages:
835
+ - pra
836
+ Provençal, Old (to 1500);Occitan, Old (to 1500):
837
+ - pro
838
+ Pushto; Pashto:
839
+ - pus
840
+ - ps
841
+ Reserved for local use:
842
+ - qaa-qtz
843
+ Quechua:
844
+ - que
845
+ - qu
846
+ Rajasthani:
847
+ - raj
848
+ Rapanui:
849
+ - rap
850
+ Rarotongan; Cook Islands Maori:
851
+ - rar
852
+ Romance languages:
853
+ - roa
854
+ Romansh:
855
+ - roh
856
+ - rm
857
+ Romany:
858
+ - rom
859
+ Romanian; Moldavian; Moldovan:
860
+ - rum
861
+ - ro
862
+ Rundi:
863
+ - run
864
+ - rn
865
+ Aromanian; Arumanian; Macedo-Romanian:
866
+ - rup
867
+ Russian:
868
+ - rus
869
+ - ru
870
+ Sandawe:
871
+ - sad
872
+ Sango:
873
+ - sag
874
+ - sg
875
+ Yakut:
876
+ - sah
877
+ South American Indian languages:
878
+ - sai
879
+ Salishan languages:
880
+ - sal
881
+ Samaritan Aramaic:
882
+ - sam
883
+ Sanskrit:
884
+ - san
885
+ - sa
886
+ Sasak:
887
+ - sas
888
+ Santali:
889
+ - sat
890
+ Sicilian:
891
+ - scn
892
+ Scots:
893
+ - sco
894
+ Selkup:
895
+ - sel
896
+ Semitic languages:
897
+ - sem
898
+ Irish, Old (to 900):
899
+ - sga
900
+ Sign Languages:
901
+ - sgn
902
+ Shan:
903
+ - shn
904
+ Sidamo:
905
+ - sid
906
+ Sinhala; Sinhalese:
907
+ - sin
908
+ - si
909
+ Siouan languages:
910
+ - sio
911
+ Sino-Tibetan languages:
912
+ - sit
913
+ Slavic languages:
914
+ - sla
915
+ Slovak:
916
+ - slo
917
+ - sk
918
+ Slovenian:
919
+ - slv
920
+ - sl
921
+ Southern Sami:
922
+ - sma
923
+ Northern Sami:
924
+ - sme
925
+ - se
926
+ Sami languages:
927
+ - smi
928
+ Lule Sami:
929
+ - smj
930
+ Inari Sami:
931
+ - smn
932
+ Samoan:
933
+ - smo
934
+ - sm
935
+ Skolt Sami:
936
+ - sms
937
+ Shona:
938
+ - sna
939
+ - sn
940
+ Sindhi:
941
+ - snd
942
+ - sd
943
+ Soninke:
944
+ - snk
945
+ Sogdian:
946
+ - sog
947
+ Somali:
948
+ - som
949
+ - so
950
+ Songhai languages:
951
+ - son
952
+ Sotho, Southern:
953
+ - sot
954
+ - st
955
+ Spanish; Castilian:
956
+ - spa
957
+ - es
958
+ Sardinian:
959
+ - srd
960
+ - sc
961
+ Sranan Tongo:
962
+ - srn
963
+ Serbian:
964
+ - srp
965
+ - sr
966
+ Serer:
967
+ - srr
968
+ Nilo-Saharan languages:
969
+ - ssa
970
+ Swati:
971
+ - ssw
972
+ - ss
973
+ Sukuma:
974
+ - suk
975
+ Sundanese:
976
+ - sun
977
+ - su
978
+ Susu:
979
+ - sus
980
+ Sumerian:
981
+ - sux
982
+ Swahili:
983
+ - swa
984
+ - sw
985
+ Swedish:
986
+ - swe
987
+ - sv
988
+ Classical Syriac:
989
+ - syc
990
+ Syriac:
991
+ - syr
992
+ Tahitian:
993
+ - tah
994
+ - ty
995
+ Tai languages:
996
+ - tai
997
+ Tamil:
998
+ - tam
999
+ - ta
1000
+ Tatar:
1001
+ - tat
1002
+ - tt
1003
+ Telugu:
1004
+ - tel
1005
+ - te
1006
+ Timne:
1007
+ - tem
1008
+ Tereno:
1009
+ - ter
1010
+ Tetum:
1011
+ - tet
1012
+ Tajik:
1013
+ - tgk
1014
+ - tg
1015
+ Tagalog:
1016
+ - tgl
1017
+ - tl
1018
+ Thai:
1019
+ - tha
1020
+ - th
1021
+ Tigre:
1022
+ - tig
1023
+ Tigrinya:
1024
+ - tir
1025
+ - ti
1026
+ Tiv:
1027
+ - tiv
1028
+ Tokelau:
1029
+ - tkl
1030
+ Klingon; tlhIngan-Hol:
1031
+ - tlh
1032
+ Tlingit:
1033
+ - tli
1034
+ Tamashek:
1035
+ - tmh
1036
+ Tonga (Nyasa):
1037
+ - tog
1038
+ Tonga (Tonga Islands):
1039
+ - ton
1040
+ - to
1041
+ Tok Pisin:
1042
+ - tpi
1043
+ Tsimshian:
1044
+ - tsi
1045
+ Tswana:
1046
+ - tsn
1047
+ - tn
1048
+ Tsonga:
1049
+ - tso
1050
+ - ts
1051
+ Turkmen:
1052
+ - tuk
1053
+ - tk
1054
+ Tumbuka:
1055
+ - tum
1056
+ Tupi languages:
1057
+ - tup
1058
+ Turkish:
1059
+ - tur
1060
+ - tr
1061
+ Altaic languages:
1062
+ - tut
1063
+ Tuvalu:
1064
+ - tvl
1065
+ Twi:
1066
+ - twi
1067
+ - tw
1068
+ Tuvinian:
1069
+ - tyv
1070
+ Udmurt:
1071
+ - udm
1072
+ Ugaritic:
1073
+ - uga
1074
+ Uighur; Uyghur:
1075
+ - uig
1076
+ - ug
1077
+ Ukrainian:
1078
+ - ukr
1079
+ - uk
1080
+ Umbundu:
1081
+ - umb
1082
+ Undetermined:
1083
+ - und
1084
+ Urdu:
1085
+ - urd
1086
+ - ur
1087
+ Uzbek:
1088
+ - uzb
1089
+ - uz
1090
+ Vai:
1091
+ - vai
1092
+ Venda:
1093
+ - ven
1094
+ - ve
1095
+ Vietnamese:
1096
+ - vie
1097
+ - vi
1098
+ Volapük:
1099
+ - vol
1100
+ - vo
1101
+ Votic:
1102
+ - vot
1103
+ Wakashan languages:
1104
+ - wak
1105
+ Wolaitta; Wolaytta:
1106
+ - wal
1107
+ Waray:
1108
+ - war
1109
+ Washo:
1110
+ - was
1111
+ Sorbian languages:
1112
+ - wen
1113
+ Walloon:
1114
+ - wln
1115
+ - wa
1116
+ Wolof:
1117
+ - wol
1118
+ - wo
1119
+ Kalmyk; Oirat:
1120
+ - xal
1121
+ Xhosa:
1122
+ - xho
1123
+ - xh
1124
+ Yao:
1125
+ - yao
1126
+ Yapese:
1127
+ - yap
1128
+ Yiddish:
1129
+ - yid
1130
+ - yi
1131
+ Yoruba:
1132
+ - yor
1133
+ - yo
1134
+ Yupik languages:
1135
+ - ypk
1136
+ Zapotec:
1137
+ - zap
1138
+ Blissymbols; Blissymbolics; Bliss:
1139
+ - zbl
1140
+ Zenaga:
1141
+ - zen
1142
+ Zhuang; Chuang:
1143
+ - zha
1144
+ - za
1145
+ Zande languages:
1146
+ - znd
1147
+ Zulu:
1148
+ - zul
1149
+ - zu
1150
+ Zuni:
1151
+ - zun
1152
+ No linguistic content; Not applicable:
1153
+ - zxx
1154
+ Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki:
1155
+ - zza