PluginProbe
Translate and Go multilingual – Automatic AI translation – wpLingua / 2.13.0
Translate and Go multilingual – Automatic AI translation – wpLingua v2.13.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 / args.php

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

436 lines 8.8 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 * Setup the arguments
11 *
12 * @param array $args
13 * @return void
14 */
15 function wplng_args_setup( &$args ) {
16
17 $args_clear = array();
18
19 /**
20 * Check language website ID
21 */
22
23 if ( empty( $args['language_source'] )
24 || ! wplng_is_valid_language_id( $args['language_source'] )
25 ) {
26 $args_clear['language_source'] = wplng_get_language_website_id();
27 } else {
28 $args_clear['language_source'] = $args['language_source'];
29 }
30
31 /**
32 * Check language website DIR
33 */
34
35 if ( empty( $args['language_source_dir'] ) ) {
36
37 $language = wplng_get_language_by_id( $args_clear['language_source'] );
38
39 $args_clear['language_source_dir'] = $language['dir'];
40
41 } else {
42 $args_clear['language_source_dir'] = $args['language_source_dir'];
43 }
44
45 /**
46 * Check language target ID
47 */
48
49 if ( empty( $args['language_target'] )
50 || ! wplng_is_valid_language_id( $args['language_target'] )
51 ) {
52 $args_clear['language_target'] = wplng_get_language_current_id();
53 } else {
54 $args_clear['language_target'] = $args['language_target'];
55 }
56
57 /**
58 * Check language target DIR
59 */
60
61 if ( empty( $args['language_target_dir'] ) ) {
62
63 $language = wplng_get_language_by_id( $args_clear['language_target'] );
64
65 $args_clear['language_target_dir'] = $language['dir'];
66
67 } else {
68 $args_clear['language_target_dir'] = $args['language_target_dir'];
69 }
70
71 /**
72 * Get count_texts
73 */
74
75 if ( ! isset( $args['count_texts'] )
76 || ! is_int( $args['count_texts'] )
77 ) {
78 $args_clear['count_texts'] = 0;
79 } else {
80 $args_clear['count_texts'] = $args['count_texts'];
81 }
82
83 if ( ! isset( $args['count_texts_unknow'] )
84 || ! is_int( $args['count_texts_unknow'] )
85 ) {
86 $args_clear['count_texts_unknow'] = 0;
87 } else {
88 $args_clear['count_texts_unknow'] = $args['count_texts_unknow'];
89 }
90
91 /**
92 * Get overloaded
93 */
94
95 $args_clear['overloaded'] = isset( $args['overloaded'] ) && ! empty( $args['overloaded'] );
96
97 /**
98 * Get mode (vanilla/editor/list)
99 */
100
101 if ( isset( $args['mode'] )
102 && (
103 'editor' === $args['mode']
104 || 'list' === $args['mode']
105 )
106 ) {
107
108 $args_clear['mode'] = $args['mode'];
109
110 } else {
111
112 $args_clear['mode'] = 'vanilla';
113
114 }
115
116 /**
117 * Get load mode (enabled/progress/disabled)
118 */
119
120 if ( isset( $args['load'] )
121 && (
122 'enabled' === $args['load']
123 || 'progress' === $args['load']
124 || 'translated' === $args['load']
125 )
126 ) {
127 $args_clear['load'] = $args['load'];
128 } else {
129 $args_clear['load'] = 'disabled';
130 }
131
132 /**
133 * Check current URL
134 */
135
136 if ( empty( $args['url_current'] ) ) {
137 $args_clear['url_current'] = remove_query_arg(
138 array(
139 'wplng-mode',
140 'wplng-load',
141 'nocache',
142 ),
143 wp_make_link_relative(
144 wplng_get_url_current()
145 )
146 );
147 } else {
148 $args_clear['url_current'] = $args['url_current'];
149 }
150
151 /**
152 * Check translated URL
153 */
154
155 if ( empty( $args['url_original'] ) ) {
156 $args_clear['url_original'] = remove_query_arg(
157 array(
158 'wplng-mode',
159 'wplng-load',
160 'nocache',
161 ),
162 wp_make_link_relative(
163 wplng_get_url_original()
164 )
165 );
166 } else {
167 $args_clear['url_original'] = $args['url_original'];
168 }
169
170 /**
171 * Get parents (Use by JSON)
172 */
173
174 if ( empty( $args['parents'] )
175 || ! is_array( $args['parents'] )
176 ) {
177 $args_clear['parents'] = array();
178 } else {
179 $args_clear['parents'] = $args['parents'];
180 }
181
182 /**
183 * Check translations array
184 */
185
186 if ( empty( $args['translations'] )
187 || ! is_array( $args['translations'] )
188 ) {
189 $args_clear['translations'] = array();
190 } else {
191 $args_clear['translations'] = $args['translations'];
192 }
193
194 /**
195 * Check texts unknow array
196 */
197
198 if ( empty( $args['texts_unknow'] )
199 || ! is_array( $args['texts_unknow'] )
200 ) {
201 $args_clear['texts_unknow'] = array();
202 } else {
203 $args_clear['texts_unknow'] = $args['texts_unknow'];
204 }
205
206 $args = $args_clear;
207 }
208
209
210 /**
211 * Return a translations array from a texts array
212 * If text is unknow, call API and save it
213 *
214 * @param array $texts
215 * @param array $args
216 * @return void
217 */
218 function wplng_args_update_from_texts( &$args, $texts ) {
219
220 if ( empty( $texts ) ) {
221 $args['translations'] = array();
222 return;
223 }
224
225 /**
226 * Texts: Sanitize and clear duplicated
227 */
228
229 $texts_clear = array();
230
231 foreach ( $texts as $key => $text ) {
232
233 if ( ! is_string( $text ) ) {
234 continue;
235 }
236
237 $text = wplng_text_esc( $text );
238
239 if ( '' !== $text ) {
240 $texts_clear[] = $text;
241 }
242 }
243
244 $texts = array_unique( $texts_clear ); // Remove duplicate
245
246 /**
247 * Update args
248 */
249
250 wplng_args_setup( $args );
251
252 /**
253 * Get all translations for all languages
254 */
255
256 $translations_all_languages = get_option( 'wplng_cached_translations' );
257
258 if ( empty( $translations_all_languages )
259 || ! is_array( $translations_all_languages )
260 ) {
261 $translations_all_languages = wplng_get_translations_from_query();
262 }
263
264 /**
265 * Get unknow texts & Separate page translations
266 */
267
268 $texts_unknow = array();
269 $translations_in_page = array();
270
271 foreach ( $texts as $text ) {
272
273 $is_in = false;
274 $detection = wplng_api_feature_is_allow( 'detection' );
275
276 $array_index = (string) mb_substr( $text, 0, 1 );
277 $array_index .= (string) strlen( $text );
278
279 if ( ! empty( $translations_all_languages[ $array_index ] ) ) {
280 foreach ( $translations_all_languages[ $array_index ] as $translation ) {
281
282 // $source = $translation['source'];
283
284 if ( $text === $translation['source']
285 && isset( $translation['translations'][ $args['language_target'] ] )
286 && is_string( $translation['translations'][ $args['language_target'] ] )
287 && isset( $translation['review'] )
288 && is_array( $translation['review'] )
289 && isset( $translation['post_id'] )
290 && is_int( $translation['post_id'] )
291 ) {
292
293 $is_in = true;
294
295 $review = in_array(
296 $args['language_target'],
297 $translation['review'],
298 true
299 );
300
301 $translated_text = wplng_text_esc(
302 $translation['translations'][ $args['language_target'] ]
303 );
304
305 $translations_in_page[] = array(
306 'source' => $text,
307 'post_id' => $translation['post_id'],
308 'review' => $review,
309 'translation' => $translated_text,
310 );
311
312 break;
313 }
314 }
315 }
316
317 if ( ! $is_in && $detection ) {
318 $texts_unknow[] = $text;
319 }
320 }
321
322 $args['texts_unknow'] = $texts_unknow;
323
324 /**
325 * Limit $texts_unknow for a total of 4200 char
326 */
327
328 $current_length = 0;
329 $texts_unknow_limited = array();
330
331 foreach ( $texts_unknow as $text ) {
332 $text_length = strlen( $text );
333 if ( $current_length + $text_length > WPLNG_MAX_TRANSLATIONS_CHAR ) {
334 break;
335 }
336 $texts_unknow_limited[] = $text;
337 $current_length += $text_length + 8;
338 }
339
340 /**
341 * Get count_texts
342 */
343
344 $args['count_texts'] = count( $texts );
345 $args['count_texts_unknow'] = count( $texts_unknow );
346
347 /**
348 * Check if the current page is overloaded
349 */
350
351 $args['overloaded'] = wplng_get_api_overloaded() && ! empty( $args['count_texts_unknow'] );
352
353 /**
354 * Define $max_translations
355 */
356
357 $max_translations = WPLNG_MAX_TRANSLATIONS_STR + 1;
358
359 if ( $args['load'] === 'translated' ) {
360
361 /**
362 * This is the page reloaded after "Load in progress" was complete
363 */
364
365 $max_translations = 0;
366
367 wplng_clear_website_cache();
368
369 } elseif ( $args['load'] === 'enabled'
370 && $args['count_texts_unknow'] > 10
371 && ! $args['overloaded']
372 && wplng_api_feature_is_allow( 'detection' )
373 && current_user_can( 'edit_posts' )
374 ) {
375
376 /**
377 * Current page identified as requiring "in progress" mode
378 */
379
380 $args['load'] = 'progress';
381 $max_translations = 0;
382
383 } else {
384 $args['load'] = 'disabled';
385 }
386
387 $texts_unknow_limited = array_splice(
388 $texts_unknow_limited,
389 0,
390 $max_translations
391 );
392
393 /**
394 * Get new translated text
395 */
396
397 $texts_translated = wplng_api_call_translate(
398 $texts_unknow_limited,
399 $args['language_source'],
400 $args['language_target']
401 );
402
403 $texts_unknow = array_diff_assoc( $texts_unknow, $texts_unknow_limited );
404
405 $args['texts_unknow'] = $texts_unknow;
406
407 /**
408 * Save new translation as wplng_translation CPT
409 */
410
411 $translations_new = array();
412
413 foreach ( $texts_unknow_limited as $key => $text_source ) {
414 if ( isset( $texts_translated[ $key ] ) ) {
415 $translations_new[] = array(
416 'source' => $text_source,
417 'translation' => $texts_translated[ $key ],
418 );
419 }
420 }
421
422 $translations_new = wplng_save_translations(
423 $translations_new,
424 $args['language_target']
425 );
426
427 /**
428 * Merge know and new translations
429 */
430
431 $args['translations'] = array_merge(
432 $translations_in_page,
433 $translations_new
434 );
435 }
436