PluginProbe
Translate and Go multilingual – Automatic AI translation – wpLingua / 1.1.0
Translate and Go multilingual – Automatic AI translation – wpLingua v1.1.0
2.16.7 2.16.6 2.16.5 2.16.4 2.16.3 2.16.2 2.16.1 2.16.0 2.15.2 2.15.1 2.15.0 2.14.3 2.14.2 2.14.1 2.14.0 2.13.1 2.13.0 2.12.3 2.12.2 2.12.1 trunk 1.0.3 1.0.4 1.0.5 1.1.0 All 112 releases
wplingua / inc / languages.php

languages.php in Translate and Go multilingual – Automatic AI translation – wpLingua 1.1.0, at inc/languages.php

459 lines 10.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 // If this file is called directly, abort.
4 if ( ! defined( 'WPINC' ) ) {
5 die;
6 }
7
8
9 /**
10 * Get website language data array
11 *
12 * @return array Language data
13 */
14 function wplng_get_language_website() {
15 return wplng_get_language_by_id( wplng_get_language_website_id() );
16 }
17
18
19 /**
20 * Get the website language ID
21 *
22 * @return string Language ID
23 */
24 function wplng_get_language_website_id() {
25
26 $language_api = wplng_get_api_language_website();
27
28 if ( 'all' === $language_api ) {
29 $language_id = get_option( 'wplng_website_language' );
30 } elseif ( false === $language_api ) {
31 return 'en';
32 } else {
33 $language_id = wplng_get_api_language_website();
34 }
35
36 if ( ! wplng_is_valid_language_id( $language_id ) ) {
37 return 'en';
38 }
39
40 return $language_id;
41 }
42
43
44 /**
45 * Get the URL of website language flag image
46 *
47 * @return string URL flag image
48 */
49 function wplng_get_language_website_flag() {
50
51 $website_flag = get_option( 'wplng_website_flag' );
52
53 if ( empty( $website_flag ) ) {
54
55 $website_flag = wplng_get_language_by_id(
56 wplng_get_language_website_id()
57 );
58
59 if ( ! empty( $website_flag['flags'][0]['flag'] ) ) {
60 $website_flag = $website_flag['flags'][0]['flag'];
61 } else {
62 $website_flag = ''; // Return empty string if no valid flag
63 }
64 }
65
66 $website_flag = apply_filters( 'wplng_language_website_flag', $website_flag );
67
68 return esc_url( $website_flag );
69 }
70
71
72 /**
73 * Get language name from language ID or data
74 *
75 * @param mixed $language
76 * @return string
77 */
78 function wplng_get_language_name( $language ) {
79
80 // if $language is a language array, return name
81 if ( ! empty( $language['name'] ) ) {
82 return esc_html( $language['name'] );
83 }
84
85 // $language is a language ID
86 // convert language ID to language array
87 $language = wplng_get_language_by_id( $language );
88
89 // If $language is not a valid, return empty string
90 if ( false === $language ) {
91 return '';
92 }
93
94 // If name is valid, return the name
95 if ( ! empty( $language['name'] ) ) {
96 return esc_html( $language['name'] );
97 }
98
99 // If no name returned here, return empty string
100 return '';
101 }
102
103
104 /**
105 * Get language ID from language ID or data
106 *
107 * @param mixed $language
108 * @return string Language ID
109 */
110 function wplng_get_language_id( $language ) {
111
112 // If $language is a language array
113 if ( ! empty( $language['id'] ) && wplng_is_valid_language_id( $language['id'] ) ) {
114 return $language['id'];
115 }
116
117 // If $language is a language ID, get language array
118 $language = wplng_get_language_by_id( $language );
119
120 // If language ID is invalid, return a default value
121 if ( false === $language || empty( $language['id'] ) ) {
122 return 'en';
123 }
124
125 return $language['id'];
126 }
127
128
129 /**
130 * Get language name translated from language ID or data
131 *
132 * @param mixed $language Language ID or data
133 * @param string $language_target Language ID
134 * @return string Language name translated
135 */
136 function wplng_get_language_name_translated( $language, $language_target = '' ) {
137
138 // Get target language ID
139 if ( empty( $language_target ) ) {
140 $language_target = wplng_get_language_current_id();
141 } else {
142 $language_target_id = wplng_get_language_id( $language_target );
143 }
144
145 // Get language array
146 if ( empty( $language['id'] ) ) {
147 $language = wplng_get_language_by_id( $language );
148 }
149
150 $translated_language_name = '';
151
152 if ( ! empty( $language['name_translation'][ $language_target_id ] ) ) {
153 $translated_language_name = esc_html( $language['name_translation'][ $language_target_id ] );
154 } else {
155 $translated_language_name = wplng_get_language_name( $language );
156 }
157
158 return esc_html( $translated_language_name );
159 }
160
161
162 function wplng_get_language_name_untranslated( $language ) {
163 return wplng_get_language_name_translated( $language, $language );
164 }
165
166
167 /**
168 * Return a JSON with languages data simplified
169 *
170 * @return array Languages data simplified
171 */
172 function wplng_get_languages_target_simplified() {
173
174 $json = get_option( 'wplng_target_languages' );
175
176 if ( empty( $json ) || ! is_string( $json ) ) {
177 $json = '[]';
178 }
179
180 $languages_target = json_decode( $json, true );
181 $all_languages = wplng_get_languages_allow();
182 $ordered = array();
183
184 foreach ( $all_languages as $language ) {
185 foreach ( $languages_target as $language_target ) {
186 if (
187 ! empty( $language['id'] )
188 && ! empty( $language_target['id'] )
189 && $language['id'] === $language_target['id']
190 ) {
191 $ordered[] = $language_target;
192 }
193 }
194 }
195
196 return $ordered;
197 }
198
199
200 /**
201 * Get target languages data
202 *
203 * @return array
204 */
205 function wplng_get_languages_target() {
206
207 $languages_target = wplng_get_languages_target_simplified();
208 $languages_target_clear = array();
209
210 // Check each $languages_target
211 foreach ( $languages_target as $key => $language_target ) {
212 // Check languages target format
213 if ( ! empty( $language_target['id'] ) && isset( $language_target['flag'] ) ) {
214 // Check if language is valid
215 if ( wplng_is_valid_language_id( $language_target['id'] ) ) {
216 $language = wplng_get_language_by_id( $language_target['id'] );
217 if ( false !== $language ) {
218 $languages_target_clear[] = $language;
219 }
220 }
221 }
222 }
223
224 return $languages_target_clear;
225 }
226
227
228 /**
229 * Get target languages IDs
230 *
231 * @return array
232 */
233 function wplng_get_languages_target_ids() {
234
235 $languages_target = wplng_get_languages_target();
236 $languages_target_ids = array();
237
238 foreach ( $languages_target as $language_target ) {
239 $languages_target_ids[] = $language_target['id'];
240 }
241
242 return $languages_target_ids;
243 }
244
245
246 /**
247 * Get current language ID
248 *
249 * @return string
250 */
251 function wplng_get_language_current_id() {
252
253 global $wplng_request_uri;
254 $current_path = $wplng_request_uri;
255 $languages_target = wplng_get_languages_target_ids();
256
257 if ( ! wplng_url_is_translatable()
258 || empty( $current_path )
259 || ! is_string( $current_path )
260 ) {
261 return wplng_get_language_website_id();
262 }
263
264 foreach ( $languages_target as $language ) {
265 if ( substr( $current_path, 0, 4 ) === '/' . $language . '/'
266 || substr( $current_path, 0, 3 ) === $language . '/'
267 ) {
268 return $language;
269 break;
270 }
271 }
272
273 return wplng_get_language_website_id();
274 }
275
276
277 /**
278 * Get languages data from languages IDs list
279 *
280 * @param array $language_ids
281 * @return array
282 */
283 function wplng_get_languages_by_ids( $language_ids ) {
284
285 $all_languages = wplng_get_languages_all();
286 $languages = array();
287
288 foreach ( $language_ids as $language_id ) {
289 foreach ( $all_languages as $language ) {
290 if ( ! empty( $language['id'] ) && $language['id'] === $language_id ) {
291 $languages[] = $language;
292 break;
293 }
294 }
295 }
296
297 return $languages;
298 }
299
300
301 /**
302 * Get language data from ID
303 *
304 * @param string $language_id
305 * @return array
306 */
307 function wplng_get_language_by_id( $language_id ) {
308
309 $all_languages = wplng_get_languages_all();
310
311 foreach ( $all_languages as $language ) {
312 if ( ! empty( $language['id'] ) && $language['id'] === $language_id ) {
313 return $language;
314 }
315 }
316
317 // Return a default value if $language_id not exist
318 return wplng_get_language_by_id( 'en' );
319 }
320
321
322 /**
323 * Check if a language ID is valid
324 *
325 * @param string $language_id
326 * @return bool
327 */
328 function wplng_is_valid_language_id( $language_id ) {
329
330 // If $language_id format is not valid, return default data
331 if ( empty( $language_id )
332 || ! is_string( $language_id )
333 || strlen( $language_id ) !== 2
334 ) {
335 return false;
336 }
337
338 // Check if $language_id is in languages data
339 $languages_data = wplng_data_languages();
340 foreach ( $languages_data as $language_data ) {
341 if ( $language_data['id'] === $language_id ) {
342 return true;
343 }
344 }
345
346 return false;
347 }
348
349
350 /**
351 * Check if a list of language ID are valid
352 *
353 * @param array $language_id_list
354 * @return bool
355 */
356 function wplng_is_valid_language_ids( $language_id_list ) {
357
358 if ( ! is_array( $language_id_list ) ) {
359 return false;
360 }
361
362 foreach ( $language_id_list as $language_id ) {
363 if ( ! wplng_is_valid_language_id( $language_id ) ) {
364 return false;
365 }
366 }
367
368 return true;
369 }
370
371
372 /**
373 * Get data of all languages
374 *
375 * @return array
376 */
377 function wplng_get_languages_all() {
378
379 $languages = wplng_data_languages();
380 $source_language = get_option( 'wplng_website_language' );
381 $source_flag = get_option( 'wplng_website_flag' );
382 $target_flags = get_option( 'wplng_target_languages' );
383
384 if ( empty( $target_flags ) || ! is_string( $target_flags ) ) {
385 $target_flags = '[]';
386 }
387
388 $target_flags = json_decode( $target_flags, true );
389
390 if ( empty( $source_language ) ) {
391 $source_language = 'en';
392 }
393
394 foreach ( $languages as $key => $language ) {
395
396 $flags_style = wplng_get_switcher_flags_style() . '/';
397
398 if ( 'none/' === $flags_style ) {
399 $flags_style = 'rectangular/';
400 }
401
402 // Set custom website flag if defined
403 if ( ! empty( $source_language )
404 && $language['id'] == $source_language
405 && ! empty( $source_flag )
406 ) {
407 $languages[ $key ]['flag'] = $source_flag;
408 } else {
409 $languages[ $key ]['flag'] = plugins_url() . '/wplingua/assets/images/' . $flags_style . $language['flag'] . '.png';
410 }
411
412 // Set custom target flag if defined
413 foreach ( $target_flags as $target_key => $target_flag ) {
414 if ( ! empty( $target_flag['id'] ) && $target_flag['id'] == $language['id'] ) {
415 $languages[ $key ]['flag'] = $target_flag['flag'];
416 break;
417 }
418 }
419
420 // Transform flags to URL
421 foreach ( $languages[ $key ]['flags'] as $key_flag => $flag ) {
422 $languages[ $key ]['flags'][ $key_flag ]['flag'] = plugins_url() . '/wplingua/assets/images/' . $flags_style . $flag['flag'] . '.png';
423 }
424
425 // Add default DIR as LTR if not specified or invalid
426 if ( empty( $language['dir'] )
427 || 'rtl' !== $language['dir']
428 ) {
429 $languages[ $key ]['dir'] = 'ltr';
430 }
431 }
432
433 return $languages;
434 }
435
436
437 /**
438 * Get data of all languages allowed
439 *
440 * @return array
441 */
442 function wplng_get_languages_allow() {
443
444 $languages_alow = wplng_get_api_languages_target();
445 $languages = array();
446
447 if ( 'all' === $languages_alow ) {
448 return wplng_get_languages_all();
449 } elseif ( empty( $languages_alow ) || ! is_array( $languages_alow ) ) {
450 return array();
451 }
452
453 foreach ( $languages_alow as $language_id_alow ) {
454 $languages[] = wplng_get_language_by_id( $language_id_alow );
455 }
456
457 return $languages;
458 }
459