PluginProbe
Translate and Go multilingual – Automatic AI translation – wpLingua / 2.16.6
Translate and Go multilingual – Automatic AI translation – wpLingua v2.16.6
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 1.1.1 All 111 releases
wplingua / inc / args.php

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

430 lines 8.6 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 = wplng_get_translations();
257
258 /**
259 * Get unknow texts & Separate page translations
260 */
261
262 $texts_unknow = array();
263 $translations_in_page = array();
264
265 foreach ( $texts as $text ) {
266
267 $is_in = false;
268 $detection = wplng_api_feature_is_allow( 'detection' );
269
270 $array_index = (string) mb_substr( $text, 0, 1 );
271 $array_index .= (string) strlen( $text );
272
273 if ( ! empty( $translations_all_languages[ $array_index ] ) ) {
274 foreach ( $translations_all_languages[ $array_index ] as $translation ) {
275
276 // $source = $translation['source'];
277
278 if ( $text === $translation['source']
279 && isset( $translation['translations'][ $args['language_target'] ] )
280 && is_string( $translation['translations'][ $args['language_target'] ] )
281 && isset( $translation['review'] )
282 && is_array( $translation['review'] )
283 && isset( $translation['post_id'] )
284 && is_int( $translation['post_id'] )
285 ) {
286
287 $is_in = true;
288
289 $review = in_array(
290 $args['language_target'],
291 $translation['review'],
292 true
293 );
294
295 $translated_text = wplng_text_esc(
296 $translation['translations'][ $args['language_target'] ]
297 );
298
299 $translations_in_page[] = array(
300 'source' => $text,
301 'post_id' => $translation['post_id'],
302 'review' => $review,
303 'translation' => $translated_text,
304 );
305
306 break;
307 }
308 }
309 }
310
311 if ( ! $is_in && $detection ) {
312 $texts_unknow[] = $text;
313 }
314 }
315
316 $args['texts_unknow'] = $texts_unknow;
317
318 /**
319 * Limit $texts_unknow for a total of 4200 char
320 */
321
322 $current_length = 0;
323 $texts_unknow_limited = array();
324
325 foreach ( $texts_unknow as $text ) {
326 $text_length = strlen( $text );
327 if ( $current_length + $text_length > WPLNG_MAX_TRANSLATIONS_CHAR ) {
328 break;
329 }
330 $texts_unknow_limited[] = $text;
331 $current_length += $text_length + 8;
332 }
333
334 /**
335 * Get count_texts
336 */
337
338 $args['count_texts'] = count( $texts );
339 $args['count_texts_unknow'] = count( $texts_unknow );
340
341 /**
342 * Check if the current page is overloaded
343 */
344
345 $args['overloaded'] = wplng_get_api_overloaded() && ! empty( $args['count_texts_unknow'] );
346
347 /**
348 * Define $max_translations
349 */
350
351 $max_translations = WPLNG_MAX_TRANSLATIONS_STR + 1;
352
353 if ( $args['load'] === 'translated' ) {
354
355 /**
356 * This is the page reloaded after "Load in progress" was complete
357 */
358
359 $max_translations = 0;
360
361 wplng_clear_website_cache();
362
363 } elseif ( $args['load'] === 'enabled'
364 && $args['count_texts_unknow'] > 10
365 && ! $args['overloaded']
366 && wplng_api_feature_is_allow( 'detection' )
367 && current_user_can( 'edit_posts' )
368 ) {
369
370 /**
371 * Current page identified as requiring "in progress" mode
372 */
373
374 $args['load'] = 'progress';
375 $max_translations = 0;
376
377 } else {
378 $args['load'] = 'disabled';
379 }
380
381 $texts_unknow_limited = array_splice(
382 $texts_unknow_limited,
383 0,
384 $max_translations
385 );
386
387 /**
388 * Get new translated text
389 */
390
391 $texts_translated = wplng_api_call_translate(
392 $texts_unknow_limited,
393 $args['language_source'],
394 $args['language_target']
395 );
396
397 $texts_unknow = array_diff_assoc( $texts_unknow, $texts_unknow_limited );
398
399 $args['texts_unknow'] = $texts_unknow;
400
401 /**
402 * Save new translation as wplng_translation CPT
403 */
404
405 $translations_new = array();
406
407 foreach ( $texts_unknow_limited as $key => $text_source ) {
408 if ( isset( $texts_translated[ $key ] ) ) {
409 $translations_new[] = array(
410 'source' => $text_source,
411 'translation' => $texts_translated[ $key ],
412 );
413 }
414 }
415
416 $translations_new = wplng_save_translations(
417 $translations_new,
418 $args['language_target']
419 );
420
421 /**
422 * Merge know and new translations
423 */
424
425 $args['translations'] = array_merge(
426 $translations_in_page,
427 $translations_new
428 );
429 }
430