@afixt/test-utils 1.2.0 → 1.2.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.
package/src/testLang.js CHANGED
@@ -10,274 +10,273 @@ const { franc } = require('franc');
10
10
  * @property {string|null} [franc3] - The three-letter code used by the franc library, if available.
11
11
  */
12
12
  const langCodes = [
13
- { alpha3: "aar", alpha2: "aa", English: "Afar", franc3: null },
14
- { alpha3: "abk", alpha2: "ab", English: "Abkhazian", franc3: null },
15
- { alpha3: "afr", alpha2: "af", English: "Afrikaans" },
16
- { alpha3: "aka", alpha2: "ak", English: "Akan" },
17
- { alpha3: "alb", alpha2: "sq", English: "Albanian", franc3: "als" },
18
- { alpha3: "amh", alpha2: "am", English: "Amharic" },
19
- { alpha3: "ara", alpha2: "ar", English: "Arabic", franc3: "arb" },
20
- { alpha3: "arg", alpha2: "an", English: "Aragonese", franc3: null },
21
- { alpha3: "arm", alpha2: "hy", English: "Armenian", franc3: "hye" },
22
- { alpha3: "asm", alpha2: "as", English: "Assamese", franc3: null },
23
- { alpha3: "ava", alpha2: "av", English: "Avaric", franc3: null },
24
- { alpha3: "ave", alpha2: "ae", English: "Avestan", franc3: null },
25
- { alpha3: "aym", alpha2: "ay", English: "Aymara", franc3: "ayr" },
26
- { alpha3: "aze", alpha2: "az", English: "Azerbaijani", franc3: "azj" },
27
- { alpha3: "bak", alpha2: "ba", English: "Bashkir", franc3: null },
28
- { alpha3: "bam", alpha2: "bm", English: "Bambara" },
29
- { alpha3: "baq", alpha2: "eu", English: "Basque", franc3: null },
30
- { alpha3: "bel", alpha2: "be", English: "Belarusian" },
31
- { alpha3: "ben", alpha2: "bn", English: "Bengali" },
32
- { alpha3: "bih", alpha2: "bh", English: "Bihari languages", franc3: null },
33
- { alpha3: "bis", alpha2: "bi", English: "Bislama", franc3: null },
34
- { alpha3: "bos", alpha2: "bs", English: "Bosnian" },
35
- { alpha3: "bre", alpha2: "br", English: "Breton", franc3: null },
36
- { alpha3: "bul", alpha2: "bg", English: "Bulgarian" },
37
- { alpha3: "bur", alpha2: "my", English: "Burmese", franc3: "mya" },
38
- { alpha3: "cat", alpha2: "ca", English: "Catalan; Valencian" },
39
- { alpha3: "cha", alpha2: "ch", English: "Chamorro", franc3: null },
40
- { alpha3: "che", alpha2: "ce", English: "Chechen", franc3: null },
41
- { alpha3: "chi", alpha2: "zh", English: "Chinese", franc3: "cmn" },
13
+ { alpha3: 'aar', alpha2: 'aa', English: 'Afar', franc3: null },
14
+ { alpha3: 'abk', alpha2: 'ab', English: 'Abkhazian', franc3: null },
15
+ { alpha3: 'afr', alpha2: 'af', English: 'Afrikaans' },
16
+ { alpha3: 'aka', alpha2: 'ak', English: 'Akan' },
17
+ { alpha3: 'alb', alpha2: 'sq', English: 'Albanian', franc3: 'als' },
18
+ { alpha3: 'amh', alpha2: 'am', English: 'Amharic' },
19
+ { alpha3: 'ara', alpha2: 'ar', English: 'Arabic', franc3: 'arb' },
20
+ { alpha3: 'arg', alpha2: 'an', English: 'Aragonese', franc3: null },
21
+ { alpha3: 'arm', alpha2: 'hy', English: 'Armenian', franc3: 'hye' },
22
+ { alpha3: 'asm', alpha2: 'as', English: 'Assamese', franc3: null },
23
+ { alpha3: 'ava', alpha2: 'av', English: 'Avaric', franc3: null },
24
+ { alpha3: 'ave', alpha2: 'ae', English: 'Avestan', franc3: null },
25
+ { alpha3: 'aym', alpha2: 'ay', English: 'Aymara', franc3: 'ayr' },
26
+ { alpha3: 'aze', alpha2: 'az', English: 'Azerbaijani', franc3: 'azj' },
27
+ { alpha3: 'bak', alpha2: 'ba', English: 'Bashkir', franc3: null },
28
+ { alpha3: 'bam', alpha2: 'bm', English: 'Bambara' },
29
+ { alpha3: 'baq', alpha2: 'eu', English: 'Basque', franc3: null },
30
+ { alpha3: 'bel', alpha2: 'be', English: 'Belarusian' },
31
+ { alpha3: 'ben', alpha2: 'bn', English: 'Bengali' },
32
+ { alpha3: 'bih', alpha2: 'bh', English: 'Bihari languages', franc3: null },
33
+ { alpha3: 'bis', alpha2: 'bi', English: 'Bislama', franc3: null },
34
+ { alpha3: 'bos', alpha2: 'bs', English: 'Bosnian' },
35
+ { alpha3: 'bre', alpha2: 'br', English: 'Breton', franc3: null },
36
+ { alpha3: 'bul', alpha2: 'bg', English: 'Bulgarian' },
37
+ { alpha3: 'bur', alpha2: 'my', English: 'Burmese', franc3: 'mya' },
38
+ { alpha3: 'cat', alpha2: 'ca', English: 'Catalan; Valencian' },
39
+ { alpha3: 'cha', alpha2: 'ch', English: 'Chamorro', franc3: null },
40
+ { alpha3: 'che', alpha2: 'ce', English: 'Chechen', franc3: null },
41
+ { alpha3: 'chi', alpha2: 'zh', English: 'Chinese', franc3: 'cmn' },
42
42
  {
43
- alpha3: "chu",
44
- alpha2: "cu",
45
- English:
46
- "Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic",
43
+ alpha3: 'chu',
44
+ alpha2: 'cu',
45
+ English: 'Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic',
47
46
  franc3: null,
48
47
  },
49
- { alpha3: "chv", alpha2: "cv", English: "Chuvash", franc3: null },
50
- { alpha3: "cor", alpha2: "kw", English: "Cornish", franc3: null },
51
- { alpha3: "cos", alpha2: "co", English: "Corsican", franc3: null },
52
- { alpha3: "cre", alpha2: "cr", English: "Cree", franc3: null },
53
- { alpha3: "cze", alpha2: "cs", English: "Czech", franc3: "ces" },
54
- { alpha3: "dan", alpha2: "da", English: "Danish" },
48
+ { alpha3: 'chv', alpha2: 'cv', English: 'Chuvash', franc3: null },
49
+ { alpha3: 'cor', alpha2: 'kw', English: 'Cornish', franc3: null },
50
+ { alpha3: 'cos', alpha2: 'co', English: 'Corsican', franc3: null },
51
+ { alpha3: 'cre', alpha2: 'cr', English: 'Cree', franc3: null },
52
+ { alpha3: 'cze', alpha2: 'cs', English: 'Czech', franc3: 'ces' },
53
+ { alpha3: 'dan', alpha2: 'da', English: 'Danish' },
55
54
  {
56
- alpha3: "div",
57
- alpha2: "dv",
58
- English: "Divehi; Dhivehi; Maldivian",
55
+ alpha3: 'div',
56
+ alpha2: 'dv',
57
+ English: 'Divehi; Dhivehi; Maldivian',
59
58
  franc3: null,
60
59
  },
61
- { alpha3: "dut", alpha2: "nl", English: "Dutch; Flemish", franc3: "nld" },
62
- { alpha3: "dzo", alpha2: "dz", English: "Dzongkha", franc3: null },
63
- { alpha3: "eng", alpha2: "en", English: "English" },
64
- { alpha3: "epo", alpha2: "eo", English: "Esperanto" },
65
- { alpha3: "est", alpha2: "et", English: "Estonian" },
66
- { alpha3: "ewe", alpha2: "ee", English: "Ewe" },
67
- { alpha3: "fao", alpha2: "fo", English: "Faroese", franc3: null },
68
- { alpha3: "fij", alpha2: "fj", English: "Fijian", franc3: null },
69
- { alpha3: "fin", alpha2: "fi", English: "Finnish" },
70
- { alpha3: "fre", alpha2: "fr", English: "French", franc3: "fra" },
71
- { alpha3: "fry", alpha2: "fy", English: "Western Frisian", franc3: null },
72
- { alpha3: "ful", alpha2: "ff", English: "Fulah", franc3: null },
73
- { alpha3: "geo", alpha2: "ka", English: "Georgian", franc3: "kat" },
74
- { alpha3: "ger", alpha2: "de", English: "German", franc3: "deu" },
60
+ { alpha3: 'dut', alpha2: 'nl', English: 'Dutch; Flemish', franc3: 'nld' },
61
+ { alpha3: 'dzo', alpha2: 'dz', English: 'Dzongkha', franc3: null },
62
+ { alpha3: 'eng', alpha2: 'en', English: 'English' },
63
+ { alpha3: 'epo', alpha2: 'eo', English: 'Esperanto' },
64
+ { alpha3: 'est', alpha2: 'et', English: 'Estonian' },
65
+ { alpha3: 'ewe', alpha2: 'ee', English: 'Ewe' },
66
+ { alpha3: 'fao', alpha2: 'fo', English: 'Faroese', franc3: null },
67
+ { alpha3: 'fij', alpha2: 'fj', English: 'Fijian', franc3: null },
68
+ { alpha3: 'fin', alpha2: 'fi', English: 'Finnish' },
69
+ { alpha3: 'fre', alpha2: 'fr', English: 'French', franc3: 'fra' },
70
+ { alpha3: 'fry', alpha2: 'fy', English: 'Western Frisian', franc3: null },
71
+ { alpha3: 'ful', alpha2: 'ff', English: 'Fulah', franc3: null },
72
+ { alpha3: 'geo', alpha2: 'ka', English: 'Georgian', franc3: 'kat' },
73
+ { alpha3: 'ger', alpha2: 'de', English: 'German', franc3: 'deu' },
75
74
  {
76
- alpha3: "gla",
77
- alpha2: "gd",
78
- English: "Gaelic; Scottish Gaelic",
75
+ alpha3: 'gla',
76
+ alpha2: 'gd',
77
+ English: 'Gaelic; Scottish Gaelic',
79
78
  franc3: null,
80
79
  },
81
- { alpha3: "gle", alpha2: "ga", English: "Irish", franc3: null },
82
- { alpha3: "glg", alpha2: "gl", English: "Galician" },
83
- { alpha3: "glv", alpha2: "gv", English: "Manx", franc3: null },
80
+ { alpha3: 'gle', alpha2: 'ga', English: 'Irish', franc3: null },
81
+ { alpha3: 'glg', alpha2: 'gl', English: 'Galician' },
82
+ { alpha3: 'glv', alpha2: 'gv', English: 'Manx', franc3: null },
84
83
  {
85
- alpha3: "gre",
86
- alpha2: "el",
87
- English: "Greek, Modern (1453-)",
88
- franc3: "ell",
84
+ alpha3: 'gre',
85
+ alpha2: 'el',
86
+ English: 'Greek, Modern (1453-)',
87
+ franc3: 'ell',
89
88
  },
90
- { alpha3: "grn", alpha2: "gn", English: "Guarani", franc3: null },
91
- { alpha3: "guj", alpha2: "gu", English: "Gujarati" },
92
- { alpha3: "hat", alpha2: "ht", English: "Haitian; Haitian Creole" },
93
- { alpha3: "hau", alpha2: "ha", English: "Hausa" },
94
- { alpha3: "heb", alpha2: "he", English: "Hebrew" },
95
- { alpha3: "her", alpha2: "hz", English: "Herero", franc3: null },
96
- { alpha3: "hin", alpha2: "hi", English: "Hindi" },
97
- { alpha3: "hmo", alpha2: "ho", English: "Hiri Motu", franc3: null },
98
- { alpha3: "hrv", alpha2: "hr", English: "Croatian" },
99
- { alpha3: "hun", alpha2: "hu", English: "Hungarian" },
100
- { alpha3: "ibo", alpha2: "ig", English: "Igbo" },
101
- { alpha3: "ice", alpha2: "is", English: "Icelandic", franc3: null },
102
- { alpha3: "ido", alpha2: "io", English: "Ido", franc3: null },
103
- { alpha3: "iii", alpha2: "ii", English: "Sichuan Yi; Nuosu" },
104
- { alpha3: "iku", alpha2: "iu", English: "Inuktitut", franc3: null },
89
+ { alpha3: 'grn', alpha2: 'gn', English: 'Guarani', franc3: null },
90
+ { alpha3: 'guj', alpha2: 'gu', English: 'Gujarati' },
91
+ { alpha3: 'hat', alpha2: 'ht', English: 'Haitian; Haitian Creole' },
92
+ { alpha3: 'hau', alpha2: 'ha', English: 'Hausa' },
93
+ { alpha3: 'heb', alpha2: 'he', English: 'Hebrew' },
94
+ { alpha3: 'her', alpha2: 'hz', English: 'Herero', franc3: null },
95
+ { alpha3: 'hin', alpha2: 'hi', English: 'Hindi' },
96
+ { alpha3: 'hmo', alpha2: 'ho', English: 'Hiri Motu', franc3: null },
97
+ { alpha3: 'hrv', alpha2: 'hr', English: 'Croatian' },
98
+ { alpha3: 'hun', alpha2: 'hu', English: 'Hungarian' },
99
+ { alpha3: 'ibo', alpha2: 'ig', English: 'Igbo' },
100
+ { alpha3: 'ice', alpha2: 'is', English: 'Icelandic', franc3: null },
101
+ { alpha3: 'ido', alpha2: 'io', English: 'Ido', franc3: null },
102
+ { alpha3: 'iii', alpha2: 'ii', English: 'Sichuan Yi; Nuosu' },
103
+ { alpha3: 'iku', alpha2: 'iu', English: 'Inuktitut', franc3: null },
105
104
  {
106
- alpha3: "ile",
107
- alpha2: "ie",
108
- English: "Interlingue; Occidental",
105
+ alpha3: 'ile',
106
+ alpha2: 'ie',
107
+ English: 'Interlingue; Occidental',
109
108
  franc3: null,
110
109
  },
111
110
  {
112
- alpha3: "ina",
113
- alpha2: "ia",
114
- English: "Interlingua (International Auxiliary Language Association)",
111
+ alpha3: 'ina',
112
+ alpha2: 'ia',
113
+ English: 'Interlingua (International Auxiliary Language Association)',
115
114
  franc3: null,
116
115
  },
117
- { alpha3: "ind", alpha2: "id", English: "Indonesian" },
118
- { alpha3: "ipk", alpha2: "ik", English: "Inupiaq", franc3: null },
119
- { alpha3: "ita", alpha2: "it", English: "Italian" },
120
- { alpha3: "jav", alpha2: "jv", English: "Javanese" },
121
- { alpha3: "jpn", alpha2: "ja", English: "Japanese" },
116
+ { alpha3: 'ind', alpha2: 'id', English: 'Indonesian' },
117
+ { alpha3: 'ipk', alpha2: 'ik', English: 'Inupiaq', franc3: null },
118
+ { alpha3: 'ita', alpha2: 'it', English: 'Italian' },
119
+ { alpha3: 'jav', alpha2: 'jv', English: 'Javanese' },
120
+ { alpha3: 'jpn', alpha2: 'ja', English: 'Japanese' },
122
121
  {
123
- alpha3: "kal",
124
- alpha2: "kl",
125
- English: "Kalaallisut; Greenlandic",
122
+ alpha3: 'kal',
123
+ alpha2: 'kl',
124
+ English: 'Kalaallisut; Greenlandic',
126
125
  franc3: null,
127
126
  },
128
- { alpha3: "kan", alpha2: "kn", English: "Kannada" },
129
- { alpha3: "kas", alpha2: "ks", English: "Kashmiri", franc3: null },
130
- { alpha3: "kau", alpha2: "kr", English: "Kanuri", franc3: "knc" },
131
- { alpha3: "kaz", alpha2: "kk", English: "Kazakh" },
132
- { alpha3: "khm", alpha2: "km", English: "Central Khmer" },
133
- { alpha3: "kik", alpha2: "ki", English: "Kikuyu; Gikuyu", franc3: null },
134
- { alpha3: "kin", alpha2: "rw", English: "Kinyarwanda" },
135
- { alpha3: "kir", alpha2: "ky", English: "Kirghiz; Kyrgyz" },
136
- { alpha3: "kom", alpha2: "kv", English: "Komi", franc3: "koi" },
137
- { alpha3: "kon", alpha2: "kg", English: "Kongo", franc3: null },
138
- { alpha3: "kor", alpha2: "ko", English: "Korean" },
127
+ { alpha3: 'kan', alpha2: 'kn', English: 'Kannada' },
128
+ { alpha3: 'kas', alpha2: 'ks', English: 'Kashmiri', franc3: null },
129
+ { alpha3: 'kau', alpha2: 'kr', English: 'Kanuri', franc3: 'knc' },
130
+ { alpha3: 'kaz', alpha2: 'kk', English: 'Kazakh' },
131
+ { alpha3: 'khm', alpha2: 'km', English: 'Central Khmer' },
132
+ { alpha3: 'kik', alpha2: 'ki', English: 'Kikuyu; Gikuyu', franc3: null },
133
+ { alpha3: 'kin', alpha2: 'rw', English: 'Kinyarwanda' },
134
+ { alpha3: 'kir', alpha2: 'ky', English: 'Kirghiz; Kyrgyz' },
135
+ { alpha3: 'kom', alpha2: 'kv', English: 'Komi', franc3: 'koi' },
136
+ { alpha3: 'kon', alpha2: 'kg', English: 'Kongo', franc3: null },
137
+ { alpha3: 'kor', alpha2: 'ko', English: 'Korean' },
139
138
  {
140
- alpha3: "kua",
141
- alpha2: "kj",
142
- English: "Kuanyama; Kwanyama",
139
+ alpha3: 'kua',
140
+ alpha2: 'kj',
141
+ English: 'Kuanyama; Kwanyama',
143
142
  franc3: null,
144
143
  },
145
- { alpha3: "kur", alpha2: "ku", English: "Kurdish", franc3: "ckb" },
146
- { alpha3: "lao", alpha2: "lo", English: "Lao" },
147
- { alpha3: "lat", alpha2: "la", English: "Latin", franc3: null },
148
- { alpha3: "lav", alpha2: "lv", English: "Latvian" },
144
+ { alpha3: 'kur', alpha2: 'ku', English: 'Kurdish', franc3: 'ckb' },
145
+ { alpha3: 'lao', alpha2: 'lo', English: 'Lao' },
146
+ { alpha3: 'lat', alpha2: 'la', English: 'Latin', franc3: null },
147
+ { alpha3: 'lav', alpha2: 'lv', English: 'Latvian' },
149
148
  {
150
- alpha3: "lim",
151
- alpha2: "li",
152
- English: "Limburgan; Limburger; Limburgish",
149
+ alpha3: 'lim',
150
+ alpha2: 'li',
151
+ English: 'Limburgan; Limburger; Limburgish',
153
152
  franc3: null,
154
153
  },
155
- { alpha3: "lin", alpha2: "ln", English: "Lingala" },
156
- { alpha3: "lit", alpha2: "lt", English: "Lithuanian" },
154
+ { alpha3: 'lin', alpha2: 'ln', English: 'Lingala' },
155
+ { alpha3: 'lit', alpha2: 'lt', English: 'Lithuanian' },
157
156
  {
158
- alpha3: "ltz",
159
- alpha2: "lb",
160
- English: "Luxembourgish; Letzeburgesch",
157
+ alpha3: 'ltz',
158
+ alpha2: 'lb',
159
+ English: 'Luxembourgish; Letzeburgesch',
161
160
  franc3: null,
162
161
  },
163
- { alpha3: "lub", alpha2: "lu", English: "Luba-Katanga", franc3: null },
164
- { alpha3: "lug", alpha2: "lg", English: "Ganda" },
165
- { alpha3: "mac", alpha2: "mk", English: "Macedonian", franc3: "mkd" },
166
- { alpha3: "mah", alpha2: "mh", English: "Marshallese", franc3: null },
167
- { alpha3: "mal", alpha2: "ml", English: "Malayalam" },
168
- { alpha3: "mao", alpha2: "mi", English: "Maori", franc3: null },
169
- { alpha3: "mar", alpha2: "mr", English: "Marathi" },
170
- { alpha3: "may", alpha2: "ms", English: "Malay", franc3: null },
171
- { alpha3: "mlg", alpha2: "mg", English: "Malagasy", franc3: "plt" },
172
- { alpha3: "mlt", alpha2: "mt", English: "Maltese", franc3: null },
173
- { alpha3: "mon", alpha2: "mn", English: "Mongolian", franc3: "khk" },
174
- { alpha3: "nau", alpha2: "na", English: "Nauru", franc3: null },
175
- { alpha3: "nav", alpha2: "nv", English: "Navajo; Navaho", franc3: null },
162
+ { alpha3: 'lub', alpha2: 'lu', English: 'Luba-Katanga', franc3: null },
163
+ { alpha3: 'lug', alpha2: 'lg', English: 'Ganda' },
164
+ { alpha3: 'mac', alpha2: 'mk', English: 'Macedonian', franc3: 'mkd' },
165
+ { alpha3: 'mah', alpha2: 'mh', English: 'Marshallese', franc3: null },
166
+ { alpha3: 'mal', alpha2: 'ml', English: 'Malayalam' },
167
+ { alpha3: 'mao', alpha2: 'mi', English: 'Maori', franc3: null },
168
+ { alpha3: 'mar', alpha2: 'mr', English: 'Marathi' },
169
+ { alpha3: 'may', alpha2: 'ms', English: 'Malay', franc3: null },
170
+ { alpha3: 'mlg', alpha2: 'mg', English: 'Malagasy', franc3: 'plt' },
171
+ { alpha3: 'mlt', alpha2: 'mt', English: 'Maltese', franc3: null },
172
+ { alpha3: 'mon', alpha2: 'mn', English: 'Mongolian', franc3: 'khk' },
173
+ { alpha3: 'nau', alpha2: 'na', English: 'Nauru', franc3: null },
174
+ { alpha3: 'nav', alpha2: 'nv', English: 'Navajo; Navaho', franc3: null },
176
175
  {
177
- alpha3: "nbl",
178
- alpha2: "nr",
179
- English: "Ndebele, South; South Ndebele",
176
+ alpha3: 'nbl',
177
+ alpha2: 'nr',
178
+ English: 'Ndebele, South; South Ndebele',
180
179
  franc3: null,
181
180
  },
182
181
  {
183
- alpha3: "nde",
184
- alpha2: "nd",
185
- English: "Ndebele, North; North Ndebele",
182
+ alpha3: 'nde',
183
+ alpha2: 'nd',
184
+ English: 'Ndebele, North; North Ndebele',
186
185
  franc3: null,
187
186
  },
188
- { alpha3: "ndo", alpha2: "ng", English: "Ndonga" },
189
- { alpha3: "nep", alpha2: "ne", English: "Nepali" },
187
+ { alpha3: 'ndo', alpha2: 'ng', English: 'Ndonga' },
188
+ { alpha3: 'nep', alpha2: 'ne', English: 'Nepali' },
190
189
  {
191
- alpha3: "nno",
192
- alpha2: "nn",
193
- English: "Norwegian Nynorsk; Nynorsk, Norwegian",
190
+ alpha3: 'nno',
191
+ alpha2: 'nn',
192
+ English: 'Norwegian Nynorsk; Nynorsk, Norwegian',
194
193
  },
195
194
  {
196
- alpha3: "nob",
197
- alpha2: "nb",
198
- English: "Bokmål, Norwegian; Norwegian Bokmål",
195
+ alpha3: 'nob',
196
+ alpha2: 'nb',
197
+ English: 'Bokmål, Norwegian; Norwegian Bokmål',
199
198
  },
200
- { alpha3: "nor", alpha2: "no", English: "Norwegian", franc3: "nob" },
201
- { alpha3: "nya", alpha2: "ny", English: "Chichewa; Chewa; Nyanja" },
199
+ { alpha3: 'nor', alpha2: 'no', English: 'Norwegian', franc3: 'nob' },
200
+ { alpha3: 'nya', alpha2: 'ny', English: 'Chichewa; Chewa; Nyanja' },
202
201
  {
203
- alpha3: "oci",
204
- alpha2: "oc",
205
- English: "Occitan (post 1500); Provençal",
202
+ alpha3: 'oci',
203
+ alpha2: 'oc',
204
+ English: 'Occitan (post 1500); Provençal',
206
205
  franc3: null,
207
206
  },
208
- { alpha3: "oji", alpha2: "oj", English: "Ojibwa", franc3: null },
209
- { alpha3: "ori", alpha2: "or", English: "Oriya" },
210
- { alpha3: "orm", alpha2: "om", English: "Oromo", franc3: "gax" },
211
- { alpha3: "oss", alpha2: "os", English: "Ossetian; Ossetic", franc3: null },
212
- { alpha3: "pan", alpha2: "pa", English: "Panjabi; Punjabi" },
213
- { alpha3: "per", alpha2: "fa", English: "Persian", franc3: "fas" },
214
- { alpha3: "pli", alpha2: "pi", English: "Pali", franc3: null },
215
- { alpha3: "pol", alpha2: "pl", English: "Polish" },
216
- { alpha3: "por", alpha2: "pt", English: "Portuguese" },
217
- { alpha3: "pus", alpha2: "ps", English: "Pushto; Pashto", franc3: null },
218
- { alpha3: "que", alpha2: "qu", English: "Quechua", franc3: "quz" },
219
- { alpha3: "roh", alpha2: "rm", English: "Romansh", franc3: null },
207
+ { alpha3: 'oji', alpha2: 'oj', English: 'Ojibwa', franc3: null },
208
+ { alpha3: 'ori', alpha2: 'or', English: 'Oriya' },
209
+ { alpha3: 'orm', alpha2: 'om', English: 'Oromo', franc3: 'gax' },
210
+ { alpha3: 'oss', alpha2: 'os', English: 'Ossetian; Ossetic', franc3: null },
211
+ { alpha3: 'pan', alpha2: 'pa', English: 'Panjabi; Punjabi' },
212
+ { alpha3: 'per', alpha2: 'fa', English: 'Persian', franc3: 'fas' },
213
+ { alpha3: 'pli', alpha2: 'pi', English: 'Pali', franc3: null },
214
+ { alpha3: 'pol', alpha2: 'pl', English: 'Polish' },
215
+ { alpha3: 'por', alpha2: 'pt', English: 'Portuguese' },
216
+ { alpha3: 'pus', alpha2: 'ps', English: 'Pushto; Pashto', franc3: null },
217
+ { alpha3: 'que', alpha2: 'qu', English: 'Quechua', franc3: 'quz' },
218
+ { alpha3: 'roh', alpha2: 'rm', English: 'Romansh', franc3: null },
220
219
  {
221
- alpha3: "rum",
222
- alpha2: "ro",
223
- English: "Romanian; Moldavian; Moldovan",
224
- franc3: "ron",
220
+ alpha3: 'rum',
221
+ alpha2: 'ro',
222
+ English: 'Romanian; Moldavian; Moldovan',
223
+ franc3: 'ron',
225
224
  },
226
- { alpha3: "run", alpha2: "rn", English: "Rundi" },
227
- { alpha3: "rus", alpha2: "ru", English: "Russian" },
228
- { alpha3: "sag", alpha2: "sg", English: "Sango" },
229
- { alpha3: "san", alpha2: "sa", English: "Sanskrit", franc3: null },
230
- { alpha3: "sin", alpha2: "si", English: "Sinhala; Sinhalese" },
231
- { alpha3: "slo", alpha2: "sk", English: "Slovak", franc3: "slk" },
232
- { alpha3: "slv", alpha2: "sl", English: "Slovenian" },
233
- { alpha3: "sme", alpha2: "se", English: "Northern Sami", franc3: null },
234
- { alpha3: "smo", alpha2: "sm", English: "Samoan", franc3: null },
235
- { alpha3: "sna", alpha2: "sn", English: "Shona" },
236
- { alpha3: "snd", alpha2: "sd", English: "Sindhi", franc3: null },
237
- { alpha3: "som", alpha2: "so", English: "Somali" },
238
- { alpha3: "sot", alpha2: "st", English: "Sotho, Southern" },
239
- { alpha3: "spa", alpha2: "es", English: "Spanish; Castilian" },
240
- { alpha3: "srd", alpha2: "sc", English: "Sardinian", franc3: "src" },
241
- { alpha3: "srp", alpha2: "sr", English: "Serbian" },
242
- { alpha3: "ssw", alpha2: "ss", English: "Swati" },
243
- { alpha3: "sun", alpha2: "su", English: "Sundanese" },
244
- { alpha3: "swa", alpha2: "sw", English: "Swahili", franc3: "swh" },
245
- { alpha3: "swe", alpha2: "sv", English: "Swedish" },
246
- { alpha3: "tah", alpha2: "ty", English: "Tahitian", franc3: null },
247
- { alpha3: "tam", alpha2: "ta", English: "Tamil" },
248
- { alpha3: "tat", alpha2: "tt", English: "Tatar" },
249
- { alpha3: "tel", alpha2: "te", English: "Telugu" },
250
- { alpha3: "tgk", alpha2: "tg", English: "Tajik" },
251
- { alpha3: "tgl", alpha2: "tl", English: "Tagalog" },
252
- { alpha3: "tha", alpha2: "th", English: "Thai" },
253
- { alpha3: "tib", alpha2: "bo", English: "Tibetan", franc3: "bod" },
254
- { alpha3: "tir", alpha2: "ti", English: "Tigrinya" },
225
+ { alpha3: 'run', alpha2: 'rn', English: 'Rundi' },
226
+ { alpha3: 'rus', alpha2: 'ru', English: 'Russian' },
227
+ { alpha3: 'sag', alpha2: 'sg', English: 'Sango' },
228
+ { alpha3: 'san', alpha2: 'sa', English: 'Sanskrit', franc3: null },
229
+ { alpha3: 'sin', alpha2: 'si', English: 'Sinhala; Sinhalese' },
230
+ { alpha3: 'slo', alpha2: 'sk', English: 'Slovak', franc3: 'slk' },
231
+ { alpha3: 'slv', alpha2: 'sl', English: 'Slovenian' },
232
+ { alpha3: 'sme', alpha2: 'se', English: 'Northern Sami', franc3: null },
233
+ { alpha3: 'smo', alpha2: 'sm', English: 'Samoan', franc3: null },
234
+ { alpha3: 'sna', alpha2: 'sn', English: 'Shona' },
235
+ { alpha3: 'snd', alpha2: 'sd', English: 'Sindhi', franc3: null },
236
+ { alpha3: 'som', alpha2: 'so', English: 'Somali' },
237
+ { alpha3: 'sot', alpha2: 'st', English: 'Sotho, Southern' },
238
+ { alpha3: 'spa', alpha2: 'es', English: 'Spanish; Castilian' },
239
+ { alpha3: 'srd', alpha2: 'sc', English: 'Sardinian', franc3: 'src' },
240
+ { alpha3: 'srp', alpha2: 'sr', English: 'Serbian' },
241
+ { alpha3: 'ssw', alpha2: 'ss', English: 'Swati' },
242
+ { alpha3: 'sun', alpha2: 'su', English: 'Sundanese' },
243
+ { alpha3: 'swa', alpha2: 'sw', English: 'Swahili', franc3: 'swh' },
244
+ { alpha3: 'swe', alpha2: 'sv', English: 'Swedish' },
245
+ { alpha3: 'tah', alpha2: 'ty', English: 'Tahitian', franc3: null },
246
+ { alpha3: 'tam', alpha2: 'ta', English: 'Tamil' },
247
+ { alpha3: 'tat', alpha2: 'tt', English: 'Tatar' },
248
+ { alpha3: 'tel', alpha2: 'te', English: 'Telugu' },
249
+ { alpha3: 'tgk', alpha2: 'tg', English: 'Tajik' },
250
+ { alpha3: 'tgl', alpha2: 'tl', English: 'Tagalog' },
251
+ { alpha3: 'tha', alpha2: 'th', English: 'Thai' },
252
+ { alpha3: 'tib', alpha2: 'bo', English: 'Tibetan', franc3: 'bod' },
253
+ { alpha3: 'tir', alpha2: 'ti', English: 'Tigrinya' },
255
254
  {
256
- alpha3: "ton",
257
- alpha2: "to",
258
- English: "Tonga (Tonga Islands)",
259
- franc3: "toi",
255
+ alpha3: 'ton',
256
+ alpha2: 'to',
257
+ English: 'Tonga (Tonga Islands)',
258
+ franc3: 'toi',
260
259
  },
261
- { alpha3: "tsn", alpha2: "tn", English: "Tswana" },
262
- { alpha3: "tso", alpha2: "ts", English: "Tsonga" },
263
- { alpha3: "tuk", alpha2: "tk", English: "Turkmen" },
264
- { alpha3: "tur", alpha2: "tr", English: "Turkish" },
265
- { alpha3: "twi", alpha2: "tw", English: "Twi", franc3: null },
266
- { alpha3: "uig", alpha2: "ug", English: "Uighur; Uyghur" },
267
- { alpha3: "ukr", alpha2: "uk", English: "Ukrainian" },
268
- { alpha3: "urd", alpha2: "ur", English: "Urdu" },
269
- { alpha3: "uzb", alpha2: "uz", English: "Uzbek", franc3: "uzn" },
270
- { alpha3: "ven", alpha2: "ve", English: "Venda" },
271
- { alpha3: "vie", alpha2: "vi", English: "Vietnamese" },
272
- { alpha3: "vol", alpha2: "vo", English: "Volapük", franc3: null },
273
- { alpha3: "wel", alpha2: "cy", English: "Welsh", franc3: null },
274
- { alpha3: "wln", alpha2: "wa", English: "Walloon", franc3: null },
275
- { alpha3: "wol", alpha2: "wo", English: "Wolof" },
276
- { alpha3: "xho", alpha2: "xh", English: "Xhosa" },
277
- { alpha3: "yid", alpha2: "yi", English: "Yiddish", franc3: "ydd" },
278
- { alpha3: "yor", alpha2: "yo", English: "Yoruba" },
279
- { alpha3: "zha", alpha2: "za", English: "Zhuang; Chuang", franc3: "zyb" },
280
- { alpha3: "zul", alpha2: "zu", English: "Zulu" },
260
+ { alpha3: 'tsn', alpha2: 'tn', English: 'Tswana' },
261
+ { alpha3: 'tso', alpha2: 'ts', English: 'Tsonga' },
262
+ { alpha3: 'tuk', alpha2: 'tk', English: 'Turkmen' },
263
+ { alpha3: 'tur', alpha2: 'tr', English: 'Turkish' },
264
+ { alpha3: 'twi', alpha2: 'tw', English: 'Twi', franc3: null },
265
+ { alpha3: 'uig', alpha2: 'ug', English: 'Uighur; Uyghur' },
266
+ { alpha3: 'ukr', alpha2: 'uk', English: 'Ukrainian' },
267
+ { alpha3: 'urd', alpha2: 'ur', English: 'Urdu' },
268
+ { alpha3: 'uzb', alpha2: 'uz', English: 'Uzbek', franc3: 'uzn' },
269
+ { alpha3: 'ven', alpha2: 've', English: 'Venda' },
270
+ { alpha3: 'vie', alpha2: 'vi', English: 'Vietnamese' },
271
+ { alpha3: 'vol', alpha2: 'vo', English: 'Volapük', franc3: null },
272
+ { alpha3: 'wel', alpha2: 'cy', English: 'Welsh', franc3: null },
273
+ { alpha3: 'wln', alpha2: 'wa', English: 'Walloon', franc3: null },
274
+ { alpha3: 'wol', alpha2: 'wo', English: 'Wolof' },
275
+ { alpha3: 'xho', alpha2: 'xh', English: 'Xhosa' },
276
+ { alpha3: 'yid', alpha2: 'yi', English: 'Yiddish', franc3: 'ydd' },
277
+ { alpha3: 'yor', alpha2: 'yo', English: 'Yoruba' },
278
+ { alpha3: 'zha', alpha2: 'za', English: 'Zhuang; Chuang', franc3: 'zyb' },
279
+ { alpha3: 'zul', alpha2: 'zu', English: 'Zulu' },
281
280
  ];
282
281
 
283
282
  /**
@@ -288,202 +287,202 @@ const langCodes = [
288
287
  * @constant {string[]}
289
288
  */
290
289
  const validLangCodes = [
291
- "af",
292
- "agq",
293
- "ak",
294
- "am",
295
- "ar",
296
- "as",
297
- "asa",
298
- "ast",
299
- "az",
300
- "bas",
301
- "be",
302
- "bem",
303
- "bez",
304
- "bg",
305
- "bm",
306
- "bn",
307
- "bo",
308
- "br",
309
- "brx",
310
- "bs",
311
- "ca",
312
- "ce",
313
- "cgg",
314
- "chr",
315
- "ckb",
316
- "cs",
317
- "cu",
318
- "cy",
319
- "da",
320
- "dav",
321
- "de",
322
- "dje",
323
- "dsb",
324
- "dua",
325
- "dyo",
326
- "dz",
327
- "ebu",
328
- "ee",
329
- "el",
330
- "en",
331
- "eo",
332
- "es",
333
- "et",
334
- "eu",
335
- "ewo",
336
- "fa",
337
- "ff",
338
- "fi",
339
- "fil",
340
- "fo",
341
- "fr",
342
- "fur",
343
- "fy",
344
- "ga",
345
- "gd",
346
- "gl",
347
- "gsw",
348
- "gu",
349
- "guz",
350
- "gv",
351
- "ha",
352
- "haw",
353
- "he",
354
- "hi",
355
- "hr",
356
- "hsb",
357
- "hu",
358
- "hy",
359
- "id",
360
- "ig",
361
- "ii",
362
- "is",
363
- "it",
364
- "ja",
365
- "jgo",
366
- "jmc",
367
- "ka",
368
- "kab",
369
- "kam",
370
- "kde",
371
- "kea",
372
- "khq",
373
- "ki",
374
- "kk",
375
- "kkj",
376
- "kl",
377
- "kln",
378
- "km",
379
- "kn",
380
- "ko",
381
- "kok",
382
- "ks",
383
- "ksb",
384
- "ksf",
385
- "ksh",
386
- "kw",
387
- "ky",
388
- "lag",
389
- "lb",
390
- "lg",
391
- "lkt",
392
- "ln",
393
- "lo",
394
- "lrc",
395
- "lt",
396
- "lu",
397
- "luo",
398
- "luy",
399
- "lv",
400
- "mas",
401
- "mer",
402
- "mfe",
403
- "mg",
404
- "mgh",
405
- "mgo",
406
- "mk",
407
- "ml",
408
- "mn",
409
- "mr",
410
- "ms",
411
- "mt",
412
- "mua",
413
- "my",
414
- "mzn",
415
- "naq",
416
- "nb",
417
- "nd",
418
- "nds",
419
- "ne",
420
- "nl",
421
- "nmg",
422
- "nn",
423
- "nnh",
424
- "nus",
425
- "nyn",
426
- "om",
427
- "or",
428
- "os",
429
- "pa",
430
- "pl",
431
- "prg",
432
- "ps",
433
- "pt",
434
- "qu",
435
- "rm",
436
- "rn",
437
- "ro",
438
- "rof",
439
- "ru",
440
- "rw",
441
- "rwk",
442
- "sah",
443
- "saq",
444
- "sbp",
445
- "se",
446
- "seh",
447
- "ses",
448
- "sg",
449
- "shi",
450
- "si",
451
- "sk",
452
- "sl",
453
- "smn",
454
- "sn",
455
- "so",
456
- "sq",
457
- "sr",
458
- "sv",
459
- "sw",
460
- "ta",
461
- "te",
462
- "teo",
463
- "th",
464
- "ti",
465
- "tk",
466
- "to",
467
- "tr",
468
- "twq",
469
- "tzm",
470
- "ug",
471
- "uk",
472
- "ur",
473
- "uz",
474
- "vai",
475
- "vi",
476
- "vo",
477
- "vun",
478
- "wae",
479
- "xog",
480
- "yav",
481
- "yi",
482
- "yo",
483
- "yue",
484
- "zgh",
485
- "zh",
486
- "zu",
290
+ 'af',
291
+ 'agq',
292
+ 'ak',
293
+ 'am',
294
+ 'ar',
295
+ 'as',
296
+ 'asa',
297
+ 'ast',
298
+ 'az',
299
+ 'bas',
300
+ 'be',
301
+ 'bem',
302
+ 'bez',
303
+ 'bg',
304
+ 'bm',
305
+ 'bn',
306
+ 'bo',
307
+ 'br',
308
+ 'brx',
309
+ 'bs',
310
+ 'ca',
311
+ 'ce',
312
+ 'cgg',
313
+ 'chr',
314
+ 'ckb',
315
+ 'cs',
316
+ 'cu',
317
+ 'cy',
318
+ 'da',
319
+ 'dav',
320
+ 'de',
321
+ 'dje',
322
+ 'dsb',
323
+ 'dua',
324
+ 'dyo',
325
+ 'dz',
326
+ 'ebu',
327
+ 'ee',
328
+ 'el',
329
+ 'en',
330
+ 'eo',
331
+ 'es',
332
+ 'et',
333
+ 'eu',
334
+ 'ewo',
335
+ 'fa',
336
+ 'ff',
337
+ 'fi',
338
+ 'fil',
339
+ 'fo',
340
+ 'fr',
341
+ 'fur',
342
+ 'fy',
343
+ 'ga',
344
+ 'gd',
345
+ 'gl',
346
+ 'gsw',
347
+ 'gu',
348
+ 'guz',
349
+ 'gv',
350
+ 'ha',
351
+ 'haw',
352
+ 'he',
353
+ 'hi',
354
+ 'hr',
355
+ 'hsb',
356
+ 'hu',
357
+ 'hy',
358
+ 'id',
359
+ 'ig',
360
+ 'ii',
361
+ 'is',
362
+ 'it',
363
+ 'ja',
364
+ 'jgo',
365
+ 'jmc',
366
+ 'ka',
367
+ 'kab',
368
+ 'kam',
369
+ 'kde',
370
+ 'kea',
371
+ 'khq',
372
+ 'ki',
373
+ 'kk',
374
+ 'kkj',
375
+ 'kl',
376
+ 'kln',
377
+ 'km',
378
+ 'kn',
379
+ 'ko',
380
+ 'kok',
381
+ 'ks',
382
+ 'ksb',
383
+ 'ksf',
384
+ 'ksh',
385
+ 'kw',
386
+ 'ky',
387
+ 'lag',
388
+ 'lb',
389
+ 'lg',
390
+ 'lkt',
391
+ 'ln',
392
+ 'lo',
393
+ 'lrc',
394
+ 'lt',
395
+ 'lu',
396
+ 'luo',
397
+ 'luy',
398
+ 'lv',
399
+ 'mas',
400
+ 'mer',
401
+ 'mfe',
402
+ 'mg',
403
+ 'mgh',
404
+ 'mgo',
405
+ 'mk',
406
+ 'ml',
407
+ 'mn',
408
+ 'mr',
409
+ 'ms',
410
+ 'mt',
411
+ 'mua',
412
+ 'my',
413
+ 'mzn',
414
+ 'naq',
415
+ 'nb',
416
+ 'nd',
417
+ 'nds',
418
+ 'ne',
419
+ 'nl',
420
+ 'nmg',
421
+ 'nn',
422
+ 'nnh',
423
+ 'nus',
424
+ 'nyn',
425
+ 'om',
426
+ 'or',
427
+ 'os',
428
+ 'pa',
429
+ 'pl',
430
+ 'prg',
431
+ 'ps',
432
+ 'pt',
433
+ 'qu',
434
+ 'rm',
435
+ 'rn',
436
+ 'ro',
437
+ 'rof',
438
+ 'ru',
439
+ 'rw',
440
+ 'rwk',
441
+ 'sah',
442
+ 'saq',
443
+ 'sbp',
444
+ 'se',
445
+ 'seh',
446
+ 'ses',
447
+ 'sg',
448
+ 'shi',
449
+ 'si',
450
+ 'sk',
451
+ 'sl',
452
+ 'smn',
453
+ 'sn',
454
+ 'so',
455
+ 'sq',
456
+ 'sr',
457
+ 'sv',
458
+ 'sw',
459
+ 'ta',
460
+ 'te',
461
+ 'teo',
462
+ 'th',
463
+ 'ti',
464
+ 'tk',
465
+ 'to',
466
+ 'tr',
467
+ 'twq',
468
+ 'tzm',
469
+ 'ug',
470
+ 'uk',
471
+ 'ur',
472
+ 'uz',
473
+ 'vai',
474
+ 'vi',
475
+ 'vo',
476
+ 'vun',
477
+ 'wae',
478
+ 'xog',
479
+ 'yav',
480
+ 'yi',
481
+ 'yo',
482
+ 'yue',
483
+ 'zgh',
484
+ 'zh',
485
+ 'zu',
487
486
  ];
488
487
 
489
488
  /**
@@ -491,8 +490,7 @@ const validLangCodes = [
491
490
  *
492
491
  * @constant {string[]}
493
492
  */
494
- const rtls = ["ar", "az", "dv", "he", "ku", "fa", "ur"];
495
-
493
+ const rtls = ['ar', 'az', 'dv', 'he', 'ku', 'fa', 'ur'];
496
494
 
497
495
  /**
498
496
  * Converts a three-letter language code to a two-letter language code.
@@ -501,12 +499,11 @@ const rtls = ["ar", "az", "dv", "he", "ku", "fa", "ur"];
501
499
  * @returns {string|boolean} The corresponding two-letter language code, or false if not found.
502
500
  */
503
501
  function getTwoLetterCode(threeLetterCode) {
504
- if (threeLetterCode === "cmn") {
505
- threeLetterCode = "chi";
502
+ if (threeLetterCode === 'cmn') {
503
+ threeLetterCode = 'chi';
506
504
  }
507
505
  const result = langCodes.find(
508
- (value) =>
509
- value.alpha3 === threeLetterCode || value.franc3 === threeLetterCode
506
+ value => value.alpha3 === threeLetterCode || value.franc3 === threeLetterCode
510
507
  );
511
508
  return result ? result.alpha2 : false;
512
509
  }
@@ -525,39 +522,39 @@ function getTwoLetterCode(threeLetterCode) {
525
522
  * undefined ("und"). Otherwise, returns `false`.
526
523
  */
527
524
  function testLang(element) {
528
- let selfLang =
529
- element.getAttribute("lang") || element.getAttribute("xml:lang");
525
+ let selfLang = element.getAttribute('lang') || element.getAttribute('xml:lang');
530
526
  if (!selfLang) {
531
527
  let parent = element.parentElement;
532
528
  while (parent && !selfLang) {
533
- selfLang =
534
- parent.getAttribute("lang") || parent.getAttribute("xml:lang");
529
+ selfLang = parent.getAttribute('lang') || parent.getAttribute('xml:lang');
535
530
  parent = parent.parentElement;
536
531
  }
537
532
  }
538
- if (!selfLang || selfLang.length < 2) return false;
539
- selfLang = selfLang.split("-")[0].toLowerCase();
533
+ if (!selfLang || selfLang.length < 2) {
534
+ return false;
535
+ }
536
+ selfLang = selfLang.split('-')[0].toLowerCase();
540
537
  const threeLetterCode = franc(element.textContent.trim());
541
- if (threeLetterCode === "und") return true;
538
+ if (threeLetterCode === 'und') {
539
+ return true;
540
+ }
542
541
  return getTwoLetterCode(threeLetterCode) === selfLang;
543
542
  }
544
543
 
545
544
  function getLang(element) {
546
- let selfLang =
547
- element.getAttribute("lang") || element.getAttribute("xml:lang");
545
+ let selfLang = element.getAttribute('lang') || element.getAttribute('xml:lang');
548
546
  if (!selfLang) {
549
547
  let parent = element.parentElement;
550
548
  while (parent && !selfLang) {
551
- selfLang =
552
- parent.getAttribute("lang") || parent.getAttribute("xml:lang");
549
+ selfLang = parent.getAttribute('lang') || parent.getAttribute('xml:lang');
553
550
  parent = parent.parentElement;
554
551
  }
555
552
  }
556
- if (!selfLang || selfLang.length < 2) return false;
557
- selfLang = selfLang.split("-")[0].toLowerCase();
558
- const result = langCodes.find(
559
- (value) => value.alpha2 === selfLang || value.alpha3 === selfLang
560
- );
553
+ if (!selfLang || selfLang.length < 2) {
554
+ return false;
555
+ }
556
+ selfLang = selfLang.split('-')[0].toLowerCase();
557
+ const result = langCodes.find(value => value.alpha2 === selfLang || value.alpha3 === selfLang);
561
558
  if (result) {
562
559
  return result.alpha2;
563
560
  } else if (validLangCodes.includes(selfLang)) {
@@ -569,19 +566,92 @@ function getLang(element) {
569
566
 
570
567
  function isDirValid(element) {
571
568
  const lang = getLang(element);
572
- if (element.hasAttribute("dir")) {
573
- const dir = element.getAttribute("dir");
574
- return rtls.includes(lang) ? dir === "rtl" : dir !== "rtl";
569
+ if (element.hasAttribute('dir')) {
570
+ const dir = element.getAttribute('dir');
571
+ return rtls.includes(lang) ? dir === 'rtl' : dir !== 'rtl';
575
572
  }
576
573
  return !rtls.includes(lang);
577
574
  }
578
575
 
576
+ /**
577
+ * ISO 639-1 codes for right-to-left languages (comprehensive list).
578
+ * @type {string[]}
579
+ */
580
+ const RTL_LANGUAGES = ['ar', 'he', 'fa', 'ur', 'sd', 'yi', 'ps', 'ku', 'ug', 'dv'];
581
+
582
+ /**
583
+ * Checks if a language code represents an RTL language.
584
+ * @param {string} lang - The language code (e.g., "ar", "ar-SA", "he-IL")
585
+ * @returns {boolean} True if the language is RTL
586
+ */
587
+ function isRTLLanguage(lang) {
588
+ if (!lang) {
589
+ return false;
590
+ }
591
+ const primaryLang = lang.toLowerCase().split('-')[0];
592
+ return RTL_LANGUAGES.includes(primaryLang);
593
+ }
594
+
595
+ /**
596
+ * Gets the effective dir attribute value for an element (including inherited).
597
+ * @param {HTMLElement} element - The element to check
598
+ * @returns {string|null} The effective direction ('ltr', 'rtl', 'auto') or null
599
+ */
600
+ function getEffectiveDir(element) {
601
+ let el = element;
602
+ while (el && el.nodeType === Node.ELEMENT_NODE) {
603
+ const dir = el.getAttribute('dir');
604
+ if (dir) {
605
+ return dir.toLowerCase();
606
+ }
607
+ el = el.parentElement;
608
+ }
609
+ return null;
610
+ }
611
+
612
+ /**
613
+ * Validates if a language code is a valid ISO 639 language code.
614
+ * Uses pre-defined lists of valid language codes from ISO 639-1 and ISO 639-2.
615
+ * @param {string} langCode - The language code to validate
616
+ * @returns {boolean} True if valid language code
617
+ */
618
+ function isValidLanguageCode(langCode) {
619
+ if (!langCode || typeof langCode !== 'string') {
620
+ return false;
621
+ }
622
+
623
+ const cleaned = langCode.trim().toLowerCase();
624
+ if (cleaned.length < 2) {
625
+ return false;
626
+ }
627
+
628
+ const primaryLang = cleaned.split('-')[0];
629
+
630
+ const isInLangCodes = langCodes.some(function (lang) {
631
+ return lang.alpha2 === primaryLang || lang.alpha3 === primaryLang;
632
+ });
633
+
634
+ if (isInLangCodes) {
635
+ return true;
636
+ }
637
+
638
+ if (validLangCodes.includes(primaryLang)) {
639
+ return true;
640
+ }
641
+
642
+ return false;
643
+ }
644
+
579
645
  module.exports = {
580
646
  langCodes,
581
647
  validLangCodes,
582
648
  rtls,
649
+ RTL_LANGUAGES,
583
650
  getTwoLetterCode,
584
651
  testLang,
585
652
  getLang,
586
- isDirValid
653
+ isDirValid,
654
+ isRTLLanguage,
655
+ getEffectiveDir,
656
+ isValidLanguageCode,
587
657
  };