Passed
Pull Request — 1.2 (#405)
by
unknown
08:49
created

getLanguageNativeNameFromCode()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 151
Code Lines 89

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 89
nc 1
nop 1
dl 0
loc 151
ccs 2
cts 2
cp 1
crap 1
rs 8.24
c 1
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
use Illuminate\Support\Collection;
4
5
if (!function_exists('getLocales')) {
6
    /**
7
     * @return string[]
8
     */
9
    function getLocales()
10
    {
11 55
        return config('translatable.locales') ?? [config('app.locale')];
12
    }
13
}
14
15
if (!function_exists('getLanguagesForVueStore')) {
16
    /**
17
     * @param array $form_fields
18
     * @param bool $translate
19
     * @return array
20
     */
21
    function getLanguagesForVueStore($form_fields = [], $translate = true)
22
    {
23 46
        $manageMultipleLanguages = count(getLocales()) > 1;
24 46
        if ($manageMultipleLanguages && $translate) {
25
            $allLanguages = Collection::make(config('translatable.locales'))->map(function ($locale, $index) use ($form_fields) {
26
                return [
27 46
                    'shortlabel' => strtoupper($locale),
28 46
                    'label' => getLanguageLabelFromLocaleCode($locale),
29 46
                    'value' => $locale,
30
                    'disabled' => false,
31 46
                    'published' => $form_fields['translations']['active'][$locale] ?? ($index === 0),
32
                ];
33 46
            });
34
35
            return [
36 46
                'all' => $allLanguages,
37 46
                'active' => request()->has('lang') ? $allLanguages->where('value', request('lang'))->first() : null,
38
            ];
39
        }
40
41 1
        $locale = config('app.locale');
42
43
        return [
44
            'all' => [
45
                [
46 1
                    'shortlabel' => strtoupper($locale),
47 1
                    'label' => getLanguageLabelFromLocaleCode($locale),
48 1
                    'value' => $locale,
49
                    'disabled' => false,
50
                    'published' => true,
51
                ],
52
            ],
53
        ];
54
    }
55
}
56
57
if (!function_exists('getLanguageLabelFromLocaleCode')) {
58
    /**
59
     * @param string $code
60
     * @return string
61
     */
62
    function getLanguageLabelFromLocaleCode($code)
63
    {
64 46
        if (class_exists(Locale::class)) {
65 46
            return Locale::getDisplayLanguage($code);
66
        }
67
68
        $codeToLanguageMappings = [
69
            'ab' => 'Abkhazian',
70
            'aa' => 'Afar',
71
            'af' => 'Afrikaans',
72
            'sq' => 'Albanian',
73
            'am' => 'Amharic',
74
            'ar' => 'Arabic',
75
            'an' => 'Aragonese',
76
            'hy' => 'Armenian',
77
            'as' => 'Assamese',
78
            'ay' => 'Aymara',
79
            'az' => 'Azerbaijani',
80
            'ba' => 'Bashkir',
81
            'eu' => 'Basque',
82
            'bn' => 'Bengali (Bangla)',
83
            'dz' => 'Bhutani',
84
            'bh' => 'Bihari',
85
            'bi' => 'Bislama',
86
            'br' => 'Breton',
87
            'bg' => 'Bulgarian',
88
            'my' => 'Burmese',
89
            'be' => 'Byelorussian (Belarusian)',
90
            'km' => 'Cambodian',
91
            'ca' => 'Catalan',
92
            'zh' => 'Chinese',
93
            'zh-Hans' => 'Chinese (simplified)',
94
            'zh-Hant' => 'Chinese (traditional)',
95
            'co' => 'Corsican',
96
            'hr' => 'Croatian',
97
            'cs' => 'Czech',
98
            'da' => 'Danish',
99
            'nl' => 'Dutch',
100
            'en' => 'English',
101
            'eo' => 'Esperanto',
102
            'et' => 'Estonian',
103
            'fo' => 'Faeroese',
104
            'fa' => 'Farsi',
105
            'fj' => 'Fiji',
106
            'fi' => 'Finnish',
107
            'fr' => 'French',
108
            'fy' => 'Frisian',
109
            'gd' => 'Gaelic (Scottish)',
110
            'gv' => 'Gaelic (Manx)',
111
            'gl' => 'Galician',
112
            'ka' => 'Georgian',
113
            'de' => 'German',
114
            'el' => 'Greek',
115
            'kl' => 'Kalaallisut (Greenlandic)',
116
            'gn' => 'Guarani',
117
            'gu' => 'Gujarati',
118
            'ht' => 'Haitian Creole',
119
            'ha' => 'Hausa',
120
            'he' => 'Hebrew',
121
            'iw' => 'Hebrew',
122
            'hi' => 'Hindi',
123
            'hu' => 'Hungarian',
124
            'is' => 'Icelandic',
125
            'io' => 'Ido',
126
            'id' => 'Indonesian',
127
            'in' => 'Indonesian',
128
            'ia' => 'Interlingua',
129
            'ie' => 'Interlingue',
130
            'iu' => 'Inuktitut',
131
            'ik' => 'Inupiak',
132
            'ga' => 'Irish',
133
            'it' => 'Italian',
134
            'ja' => 'Japanese',
135
            'jv' => 'Javanese',
136
            'kn' => 'Kannada',
137
            'ks' => 'Kashmiri',
138
            'kk' => 'Kazakh',
139
            'rw' => 'Kinyarwanda (Ruanda)',
140
            'ky' => 'Kirghiz',
141
            'rn' => 'Kirundi (Rundi)',
142
            'ko' => 'Korean',
143
            'ku' => 'Kurdish',
144
            'lo' => 'Laothian',
145
            'la' => 'Latin',
146
            'lv' => 'Latvian (Lettish)',
147
            'li' => 'Limburgish ( Limburger)',
148
            'ln' => 'Lingala',
149
            'lt' => 'Lithuanian',
150
            'mk' => 'Macedonian',
151
            'mg' => 'Malagasy',
152
            'ms' => 'Malay',
153
            'ml' => 'Malayalam',
154
            'mt' => 'Maltese',
155
            'mi' => 'Maori',
156
            'mr' => 'Marathi',
157
            'mo' => 'Moldavian',
158
            'mn' => 'Mongolian',
159
            'na' => 'Nauru',
160
            'ne' => 'Nepali',
161
            'no' => 'Norwegian',
162
            'oc' => 'Occitan',
163
            'or' => 'Oriya',
164
            'om' => 'Oromo (Afan, Galla)',
165
            'ps' => 'Pashto (Pushto)',
166
            'pl' => 'Polish',
167
            'pt' => 'Portuguese',
168
            'pa' => 'Punjabi',
169
            'qu' => 'Quechua',
170
            'rm' => 'Rhaeto-Romance',
171
            'ro' => 'Romanian',
172
            'ru' => 'Russian',
173
            'sm' => 'Samoan',
174
            'sg' => 'Sango',
175
            'sa' => 'Sanskrit',
176
            'sr' => 'Serbian',
177
            'sh' => 'Serbo-Croatian',
178
            'st' => 'Sesotho',
179
            'tn' => 'Setswana',
180
            'sn' => 'Shona',
181
            'ii' => 'Sichuan Yi',
182
            'sd' => 'Sindhi',
183
            'si' => 'Sinhalese',
184
            'ss' => 'Siswati',
185
            'sk' => 'Slovak',
186
            'sl' => 'Slovenian',
187
            'so' => 'Somali',
188
            'es' => 'Spanish',
189
            'su' => 'Sundanese',
190
            'sw' => 'Swahili (Kiswahili)',
191
            'sv' => 'Swedish',
192
            'tl' => 'Tagalog',
193
            'tg' => 'Tajik',
194
            'ta' => 'Tamil',
195
            'tt' => 'Tatar',
196
            'te' => 'Telugu',
197
            'th' => 'Thai',
198
            'bo' => 'Tibetan',
199
            'ti' => 'Tigrinya',
200
            'to' => 'Tonga',
201
            'ts' => 'Tsonga',
202
            'tr' => 'Turkish',
203
            'tk' => 'Turkmen',
204
            'tw' => 'Twi',
205
            'ug' => 'Uighur',
206
            'uk' => 'Ukrainian',
207
            'ur' => 'Urdu',
208
            'uz' => 'Uzbek',
209
            'vi' => 'Vietnamese',
210
            'vo' => 'Volapük',
211
            'wa' => 'Wallon',
212
            'cy' => 'Welsh',
213
            'wo' => 'Wolof',
214
            'xh' => 'Xhosa',
215
            'yi' => 'Yiddish',
216
            'ji' => 'Yiddish',
217
            'yo' => 'Yoruba',
218
            'zu' => 'Zulu',
219
        ];
220
221
        return $codeToLanguageMappings[$code] ?? $code;
222
    }
223
}
224
225
/**
226
 * Converts camelCase string to have spaces between each.
227
 * @param string $camelCaseString
228
 * @return string (ex.: camel case string)
229
 */
230
if (!function_exists('camelCaseToWords')) {
231
    function camelCaseToWords($camelCaseString)
232
    {
233 40
        $re = '/(?<=[a-z])(?=[A-Z])/x';
234 40
        $a = preg_split($re, $camelCaseString);
235 40
        $words = join(" ", $a);
0 ignored issues
show
Bug introduced by
It seems like $a can also be of type false; however, parameter $pieces of join() does only seem to accept array, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

235
        $words = join(" ", /** @scrutinizer ignore-type */ $a);
Loading history...
236 40
        return ucfirst(strtolower($words));
237
    }
238
}
239
240
if (!function_exists('getLanguageNativeNameFromCode')) {
241
    /**
242
     * @param string $code
243
     * @return string
244
     */
245
    function getLanguageNativeNameFromCode($code)
246
    {
247
        $codeToLanguageMappings = [
248
            'ar' => 
249
                [
250 1
                    'english_name' => 'Arabic',
251
                    'native_name' => 'العربية',
252
                ],
253
            'bg' => 
254
                [
255
                    'english_name' => 'Bulgarian',
256
                    'native_name' => 'български език',
257
                ],
258
            'zh-CN' => 
259
                [
260
                    'english_name' => 'Chinese (Simplified)',
261
                    'native_name' => '简体中文',
262
                ],
263
            'zh-TW' => 
264
                [
265
                    'english_name' => 'Chinese (Traditional)',
266
                    'native_name' => '繁體中文',
267
                ],
268
            'cs' => 
269
                [
270
                    'english_name' => 'Czech',
271
                    'native_name' => 'čeština',
272
                ],
273
            'da' => 
274
                [
275
                    'english_name' => 'Danish',
276
                    'native_name' => 'Dansk',
277
                ],
278
            'nl' => 
279
                [
280
                    'english_name' => 'Dutch',
281
                    'native_name' => 'Nederlands',
282
                ],
283
            'en' => 
284
                [
285
                    'english_name' => 'English',
286
                    'native_name' => 'English',
287
                ],
288
            'fi' => 
289
                [
290
                    'english_name' => 'Finnish',
291
                    'native_name' => 'Suomi',
292
                ],
293
            'fr' => 
294
                [
295
                    'english_name' => 'French',
296
                    'native_name' => 'Français',
297
                ],
298
            'de' => 
299
                [
300
                    'english_name' => 'German',
301
                    'native_name' => 'Deutsch',
302
                ],
303
            'el' => 
304
                [
305
                    'english_name' => 'Greek',
306
                    'native_name' => 'Ελληνικά',
307
                ],
308
            'hu' => 
309
                [
310
                    'english_name' => 'Hungarian',
311
                    'native_name' => 'Magyar',
312
                ],
313
            'it' => 
314
                [
315
                    'english_name' => 'Italian',
316
                    'native_name' => 'Italiano',
317
                ],
318
            'ja' => 
319
                [
320
                    'english_name' => 'Japanese',
321
                    'native_name' => '日本語',
322
                ],
323
            'ko' => 
324
                [
325
                    'english_name' => 'Korean',
326
                    'native_name' => '한국어',
327
                ],
328
            'no' => 
329
                [
330
                    'english_name' => 'Norwegian',
331
                    'native_name' => 'Norsk',
332
                ],
333
            'pl' => 
334
                [
335
                    'english_name' => 'Polish',
336
                    'native_name' => 'Polski',
337
                ],
338
            'pt' => 
339
                [
340
                    'english_name' => 'Portuguese',
341
                    'native_name' => 'Português',
342
                ],
343
            'pt-BR' => 
344
                [
345
                    'english_name' => 'Portuguese-Brazil',
346
                    'native_name' => 'Português-Brasil',
347
                ],
348
            'ro' => 
349
                [
350
                    'english_name' => 'Romanian',
351
                    'native_name' => 'Română',
352
                ],
353
            'ru' => 
354
                [
355
                    'english_name' => 'Russian',
356
                    'native_name' => 'Русский',
357
                ],
358
            'es' => 
359
                [
360
                    'english_name' => 'Spanish-Spain',
361
                    'native_name' => 'Español-España',
362
                ],
363
            'es-419' => 
364
                [
365
                    'english_name' => 'Spanish-Latin America',
366
                    'native_name' => 'Español-Latinoamérica',
367
                ],
368
            'sv' => 
369
                [
370
                    'english_name' => 'Swedish',
371
                    'native_name' => 'Svenska',
372
                ],
373
            'th' => 
374
                [
375
                    'english_name' => 'Thai',
376
                    'native_name' => 'ไทย',
377
                ],
378
            'tr' => 
379
                [
380
                    'english_name' => 'Turkish',
381
                    'native_name' => 'Türkçe',
382
                ],
383
            'uk' => 
384
                [
385
                    'english_name' => 'Ukrainian',
386
                    'native_name' => 'Українська',
387
                ],
388
            'vn' => 
389
                [
390
                    'english_name' => 'Vietnamese',
391
                    'native_name' => 'Tiếng Việt',
392
                ],
393
        ];
394
395 1
        return $codeToLanguageMappings[$code]['native_name'] ?? $code ;
396
    }
397
}
398