PluginProbe
Translate and boost SEO – Automatic AI translation – wpLingua / 2.16.8
Translate and boost SEO – Automatic AI translation – wpLingua v2.16.8
2.16.8 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 All 113 releases
← All changes | inc/args.php +429 -429 2.16.62.16.8 View file →
@@ -1,429 +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 - $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 -}
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 +}