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