PluginProbe ʕ •ᴥ•ʔ
Robin Image Optimizer – Unlimited Image Optimization, WebP & AVIF / 2.0.6
Robin Image Optimizer – Unlimited Image Optimization, WebP & AVIF v2.0.6
2.0.7 2.0.6 2.0.5 trunk 1.3.7 1.4.0 1.4.1 1.4.2 1.4.6 1.5.0 1.5.3 1.5.6 1.5.8 1.6.5 1.6.6 1.6.9 1.7.0 1.7.4 1.8.1 1.8.2 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4
robin-image-optimizer / vendor / codeinwp / themeisle-sdk / src / Modules / Translate.php
robin-image-optimizer / vendor / codeinwp / themeisle-sdk / src / Modules Last commit date
About_us.php 1 month ago Abstract_Migration.php 4 months ago Announcements.php 4 months ago Compatibilities.php 10 months ago Crash_reporter.php 1 month ago Dashboard_widget.php 1 month ago Featured_plugins.php 1 month ago Float_widget.php 10 months ago Licenser.php 4 months ago Logger.php 1 month ago Migrator.php 1 month ago Notification.php 10 months ago Promotions.php 1 month ago Recommendation.php 10 months ago Review.php 10 months ago Rollback.php 10 months ago Script_loader.php 10 months ago Translate.php 10 months ago Translations.php 10 months ago Uninstall_feedback.php 1 month ago Welcome.php 10 months ago
Translate.php
919 lines
1 <?php
2 /**
3 * The translate model class for ThemeIsle SDK
4 *
5 * @package ThemeIsleSDK
6 * @subpackage Modules
7 * @copyright Copyright (c) 2017, Marius Cristea
8 * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9 * @since 1.0.0
10 */
11
12 namespace ThemeisleSDK\Modules;
13
14 use ThemeisleSDK\Common\Abstract_Module;
15 use ThemeisleSDK\Product;
16
17 // Exit if accessed directly.
18 if ( ! defined( 'ABSPATH' ) ) {
19 exit;
20 }
21
22 /**
23 * Translate module for ThemeIsle SDK.
24 */
25 class Translate extends Abstract_Module {
26 /**
27 * List of available locales.
28 *
29 * @var array Array of available locals.
30 */
31 private static $locales = array(
32 'af' => array(
33 'slug' => 'af',
34 'name' => 'Afrikaans',
35 ),
36 'ak' => array(
37 'slug' => 'ak',
38 'name' => 'Akan',
39 ),
40 'am' => array(
41 'slug' => 'am',
42 'name' => 'Amharic',
43 ),
44 'ar' => array(
45 'slug' => 'ar',
46 'name' => 'Arabic',
47 ),
48 'arq' => array(
49 'slug' => 'arq',
50 'name' => 'Algerian Arabic',
51 ),
52 'ary' => array(
53 'slug' => 'ary',
54 'name' => 'Moroccan Arabic',
55 ),
56 'as' => array(
57 'slug' => 'as',
58 'name' => 'Assamese',
59 ),
60 'ast' => array(
61 'slug' => 'ast',
62 'name' => 'Asturian',
63 ),
64 'az' => array(
65 'slug' => 'az',
66 'name' => 'Azerbaijani',
67 ),
68 'azb' => array(
69 'slug' => 'azb',
70 'name' => 'South Azerbaijani',
71 ),
72 'az_TR' => array(
73 'slug' => 'az-tr',
74 'name' => 'Azerbaijani (Turkey)',
75 ),
76 'ba' => array(
77 'slug' => 'ba',
78 'name' => 'Bashkir',
79 ),
80 'bal' => array(
81 'slug' => 'bal',
82 'name' => 'Catalan (Balear)',
83 ),
84 'bcc' => array(
85 'slug' => 'bcc',
86 'name' => 'Balochi Southern',
87 ),
88 'bel' => array(
89 'slug' => 'bel',
90 'name' => 'Belarusian',
91 ),
92 'bg_BG' => array(
93 'slug' => 'bg',
94 'name' => 'Bulgarian',
95 ),
96 'bn_BD' => array(
97 'slug' => 'bn',
98 'name' => 'Bengali',
99 ),
100 'bo' => array(
101 'slug' => 'bo',
102 'name' => 'Tibetan',
103 ),
104 'bre' => array(
105 'slug' => 'br',
106 'name' => 'Breton',
107 ),
108 'bs_BA' => array(
109 'slug' => 'bs',
110 'name' => 'Bosnian',
111 ),
112 'ca' => array(
113 'slug' => 'ca',
114 'name' => 'Catalan',
115 ),
116 'ceb' => array(
117 'slug' => 'ceb',
118 'name' => 'Cebuano',
119 ),
120 'ckb' => array(
121 'slug' => 'ckb',
122 'name' => 'Kurdish (Sorani)',
123 ),
124 'co' => array(
125 'slug' => 'co',
126 'name' => 'Corsican',
127 ),
128 'cs_CZ' => array(
129 'slug' => 'cs',
130 'name' => 'Czech',
131 ),
132 'cy' => array(
133 'slug' => 'cy',
134 'name' => 'Welsh',
135 ),
136 'da_DK' => array(
137 'slug' => 'da',
138 'name' => 'Danish',
139 ),
140 'de_DE' => array(
141 'slug' => 'de',
142 'name' => 'German',
143 ),
144 'de_CH' => array(
145 'slug' => 'de-ch',
146 'name' => 'German (Switzerland)',
147 ),
148 'dv' => array(
149 'slug' => 'dv',
150 'name' => 'Dhivehi',
151 ),
152 'dzo' => array(
153 'slug' => 'dzo',
154 'name' => 'Dzongkha',
155 ),
156 'el' => array(
157 'slug' => 'el',
158 'name' => 'Greek',
159 ),
160 'art_xemoji' => array(
161 'slug' => 'art-xemoji',
162 'name' => 'Emoji',
163 ),
164 'en_US' => array(
165 'slug' => 'en',
166 'name' => 'English',
167 ),
168 'en_AU' => array(
169 'slug' => 'en-au',
170 'name' => 'English (Australia)',
171 ),
172 'en_CA' => array(
173 'slug' => 'en-ca',
174 'name' => 'English (Canada)',
175 ),
176 'en_GB' => array(
177 'slug' => 'en-gb',
178 'name' => 'English (UK)',
179 ),
180 'en_NZ' => array(
181 'slug' => 'en-nz',
182 'name' => 'English (New Zealand)',
183 ),
184 'en_ZA' => array(
185 'slug' => 'en-za',
186 'name' => 'English (South Africa)',
187 ),
188 'eo' => array(
189 'slug' => 'eo',
190 'name' => 'Esperanto',
191 ),
192 'es_ES' => array(
193 'slug' => 'es',
194 'name' => 'Spanish (Spain)',
195 ),
196 'es_AR' => array(
197 'slug' => 'es-ar',
198 'name' => 'Spanish (Argentina)',
199 ),
200 'es_CL' => array(
201 'slug' => 'es-cl',
202 'name' => 'Spanish (Chile)',
203 ),
204 'es_CO' => array(
205 'slug' => 'es-co',
206 'name' => 'Spanish (Colombia)',
207 ),
208 'es_CR' => array(
209 'slug' => 'es-cr',
210 'name' => 'Spanish (Costa Rica)',
211 ),
212 'es_GT' => array(
213 'slug' => 'es-gt',
214 'name' => 'Spanish (Guatemala)',
215 ),
216 'es_MX' => array(
217 'slug' => 'es-mx',
218 'name' => 'Spanish (Mexico)',
219 ),
220 'es_PE' => array(
221 'slug' => 'es-pe',
222 'name' => 'Spanish (Peru)',
223 ),
224 'es_PR' => array(
225 'slug' => 'es-pr',
226 'name' => 'Spanish (Puerto Rico)',
227 ),
228 'es_VE' => array(
229 'slug' => 'es-ve',
230 'name' => 'Spanish (Venezuela)',
231 ),
232 'et' => array(
233 'slug' => 'et',
234 'name' => 'Estonian',
235 ),
236 'eu' => array(
237 'slug' => 'eu',
238 'name' => 'Basque',
239 ),
240 'fa_IR' => array(
241 'slug' => 'fa',
242 'name' => 'Persian',
243 ),
244 'fa_AF' => array(
245 'slug' => 'fa-af',
246 'name' => 'Persian (Afghanistan)',
247 ),
248 'fuc' => array(
249 'slug' => 'fuc',
250 'name' => 'Fulah',
251 ),
252 'fi' => array(
253 'slug' => 'fi',
254 'name' => 'Finnish',
255 ),
256 'fo' => array(
257 'slug' => 'fo',
258 'name' => 'Faroese',
259 ),
260 'fr_FR' => array(
261 'slug' => 'fr',
262 'name' => 'French (France)',
263 ),
264 'fr_BE' => array(
265 'slug' => 'fr-be',
266 'name' => 'French (Belgium)',
267 ),
268 'fr_CA' => array(
269 'slug' => 'fr-ca',
270 'name' => 'French (Canada)',
271 ),
272 'frp' => array(
273 'slug' => 'frp',
274 'name' => 'Arpitan',
275 ),
276 'fur' => array(
277 'slug' => 'fur',
278 'name' => 'Friulian',
279 ),
280 'fy' => array(
281 'slug' => 'fy',
282 'name' => 'Frisian',
283 ),
284 'ga' => array(
285 'slug' => 'ga',
286 'name' => 'Irish',
287 ),
288 'gd' => array(
289 'slug' => 'gd',
290 'name' => 'Scottish Gaelic',
291 ),
292 'gl_ES' => array(
293 'slug' => 'gl',
294 'name' => 'Galician',
295 ),
296 'gn' => array(
297 'slug' => 'gn',
298 'name' => 'Guarani',
299 ),
300 'gsw' => array(
301 'slug' => 'gsw',
302 'name' => 'Swiss German',
303 ),
304 'gu' => array(
305 'slug' => 'gu',
306 'name' => 'Gujarati',
307 ),
308 'hat' => array(
309 'slug' => 'hat',
310 'name' => 'Haitian Creole',
311 ),
312 'hau' => array(
313 'slug' => 'hau',
314 'name' => 'Hausa',
315 ),
316 'haw_US' => array(
317 'slug' => 'haw',
318 'name' => 'Hawaiian',
319 ),
320 'haz' => array(
321 'slug' => 'haz',
322 'name' => 'Hazaragi',
323 ),
324 'he_IL' => array(
325 'slug' => 'he',
326 'name' => 'Hebrew',
327 ),
328 'hi_IN' => array(
329 'slug' => 'hi',
330 'name' => 'Hindi',
331 ),
332 'hr' => array(
333 'slug' => 'hr',
334 'name' => 'Croatian',
335 ),
336 'hu_HU' => array(
337 'slug' => 'hu',
338 'name' => 'Hungarian',
339 ),
340 'hy' => array(
341 'slug' => 'hy',
342 'name' => 'Armenian',
343 ),
344 'id_ID' => array(
345 'slug' => 'id',
346 'name' => 'Indonesian',
347 ),
348 'ido' => array(
349 'slug' => 'ido',
350 'name' => 'Ido',
351 ),
352 'is_IS' => array(
353 'slug' => 'is',
354 'name' => 'Icelandic',
355 ),
356 'it_IT' => array(
357 'slug' => 'it',
358 'name' => 'Italian',
359 ),
360 'ja' => array(
361 'slug' => 'ja',
362 'name' => 'Japanese',
363 ),
364 'jv_ID' => array(
365 'slug' => 'jv',
366 'name' => 'Javanese',
367 ),
368 'ka_GE' => array(
369 'slug' => 'ka',
370 'name' => 'Georgian',
371 ),
372 'kab' => array(
373 'slug' => 'kab',
374 'name' => 'Kabyle',
375 ),
376 'kal' => array(
377 'slug' => 'kal',
378 'name' => 'Greenlandic',
379 ),
380 'kin' => array(
381 'slug' => 'kin',
382 'name' => 'Kinyarwanda',
383 ),
384 'kk' => array(
385 'slug' => 'kk',
386 'name' => 'Kazakh',
387 ),
388 'km' => array(
389 'slug' => 'km',
390 'name' => 'Khmer',
391 ),
392 'kn' => array(
393 'slug' => 'kn',
394 'name' => 'Kannada',
395 ),
396 'ko_KR' => array(
397 'slug' => 'ko',
398 'name' => 'Korean',
399 ),
400 'kir' => array(
401 'slug' => 'kir',
402 'name' => 'Kyrgyz',
403 ),
404 'lb_LU' => array(
405 'slug' => 'lb',
406 'name' => 'Luxembourgish',
407 ),
408 'li' => array(
409 'slug' => 'li',
410 'name' => 'Limburgish',
411 ),
412 'lin' => array(
413 'slug' => 'lin',
414 'name' => 'Lingala',
415 ),
416 'lo' => array(
417 'slug' => 'lo',
418 'name' => 'Lao',
419 ),
420 'lt_LT' => array(
421 'slug' => 'lt',
422 'name' => 'Lithuanian',
423 ),
424 'lv' => array(
425 'slug' => 'lv',
426 'name' => 'Latvian',
427 ),
428 'me_ME' => array(
429 'slug' => 'me',
430 'name' => 'Montenegrin',
431 ),
432 'mg_MG' => array(
433 'slug' => 'mg',
434 'name' => 'Malagasy',
435 ),
436 'mk_MK' => array(
437 'slug' => 'mk',
438 'name' => 'Macedonian',
439 ),
440 'ml_IN' => array(
441 'slug' => 'ml',
442 'name' => 'Malayalam',
443 ),
444 'mlt' => array(
445 'slug' => 'mlt',
446 'name' => 'Maltese',
447 ),
448 'mn' => array(
449 'slug' => 'mn',
450 'name' => 'Mongolian',
451 ),
452 'mr' => array(
453 'slug' => 'mr',
454 'name' => 'Marathi',
455 ),
456 'mri' => array(
457 'slug' => 'mri',
458 'name' => 'Maori',
459 ),
460 'ms_MY' => array(
461 'slug' => 'ms',
462 'name' => 'Malay',
463 ),
464 'my_MM' => array(
465 'slug' => 'mya',
466 'name' => 'Myanmar (Burmese)',
467 ),
468 'ne_NP' => array(
469 'slug' => 'ne',
470 'name' => 'Nepali',
471 ),
472 'nb_NO' => array(
473 'slug' => 'nb',
474 'name' => 'Norwegian (Bokmal)',
475 ),
476 'nl_NL' => array(
477 'slug' => 'nl',
478 'name' => 'Dutch',
479 ),
480 'nl_BE' => array(
481 'slug' => 'nl-be',
482 'name' => 'Dutch (Belgium)',
483 ),
484 'nn_NO' => array(
485 'slug' => 'nn',
486 'name' => 'Norwegian (Nynorsk)',
487 ),
488 'oci' => array(
489 'slug' => 'oci',
490 'name' => 'Occitan',
491 ),
492 'ory' => array(
493 'slug' => 'ory',
494 'name' => 'Oriya',
495 ),
496 'os' => array(
497 'slug' => 'os',
498 'name' => 'Ossetic',
499 ),
500 'pa_IN' => array(
501 'slug' => 'pa',
502 'name' => 'Punjabi',
503 ),
504 'pl_PL' => array(
505 'slug' => 'pl',
506 'name' => 'Polish',
507 ),
508 'pt_BR' => array(
509 'slug' => 'pt-br',
510 'name' => 'Portuguese (Brazil)',
511 ),
512 'pt_PT' => array(
513 'slug' => 'pt',
514 'name' => 'Portuguese (Portugal)',
515 ),
516 'ps' => array(
517 'slug' => 'ps',
518 'name' => 'Pashto',
519 ),
520 'rhg' => array(
521 'slug' => 'rhg',
522 'name' => 'Rohingya',
523 ),
524 'ro_RO' => array(
525 'slug' => 'ro',
526 'name' => 'Romanian',
527 ),
528 'roh' => array(
529 'slug' => 'roh',
530 'name' => 'Romansh',
531 ),
532 'ru_RU' => array(
533 'slug' => 'ru',
534 'name' => 'Russian',
535 ),
536 'rue' => array(
537 'slug' => 'rue',
538 'name' => 'Rusyn',
539 ),
540 'rup_MK' => array(
541 'slug' => 'rup',
542 'name' => 'Aromanian',
543 ),
544 'sah' => array(
545 'slug' => 'sah',
546 'name' => 'Sakha',
547 ),
548 'sa_IN' => array(
549 'slug' => 'sa-in',
550 'name' => 'Sanskrit',
551 ),
552 'scn' => array(
553 'slug' => 'scn',
554 'name' => 'Sicilian',
555 ),
556 'si_LK' => array(
557 'slug' => 'si',
558 'name' => 'Sinhala',
559 ),
560 'sk_SK' => array(
561 'slug' => 'sk',
562 'name' => 'Slovak',
563 ),
564 'sl_SI' => array(
565 'slug' => 'sl',
566 'name' => 'Slovenian',
567 ),
568 'sna' => array(
569 'slug' => 'sna',
570 'name' => 'Shona',
571 ),
572 'snd' => array(
573 'slug' => 'snd',
574 'name' => 'Sindhi',
575 ),
576 'so_SO' => array(
577 'slug' => 'so',
578 'name' => 'Somali',
579 ),
580 'sq' => array(
581 'slug' => 'sq',
582 'name' => 'Albanian',
583 ),
584 'sq_XK' => array(
585 'slug' => 'sq-xk',
586 'name' => 'Shqip (Kosovo)',
587 ),
588 'sr_RS' => array(
589 'slug' => 'sr',
590 'name' => 'Serbian',
591 ),
592 'srd' => array(
593 'slug' => 'srd',
594 'name' => 'Sardinian',
595 ),
596 'su_ID' => array(
597 'slug' => 'su',
598 'name' => 'Sundanese',
599 ),
600 'sv_SE' => array(
601 'slug' => 'sv',
602 'name' => 'Swedish',
603 ),
604 'sw' => array(
605 'slug' => 'sw',
606 'name' => 'Swahili',
607 ),
608 'syr' => array(
609 'slug' => 'syr',
610 'name' => 'Syriac',
611 ),
612 'szl' => array(
613 'slug' => 'szl',
614 'name' => 'Silesian',
615 ),
616 'ta_IN' => array(
617 'slug' => 'ta',
618 'name' => 'Tamil',
619 ),
620 'ta_LK' => array(
621 'slug' => 'ta-lk',
622 'name' => 'Tamil (Sri Lanka)',
623 ),
624 'tah' => array(
625 'slug' => 'tah',
626 'name' => 'Tahitian',
627 ),
628 'te' => array(
629 'slug' => 'te',
630 'name' => 'Telugu',
631 ),
632 'tg' => array(
633 'slug' => 'tg',
634 'name' => 'Tajik',
635 ),
636 'th' => array(
637 'slug' => 'th',
638 'name' => 'Thai',
639 ),
640 'tir' => array(
641 'slug' => 'tir',
642 'name' => 'Tigrinya',
643 ),
644 'tl' => array(
645 'slug' => 'tl',
646 'name' => 'Tagalog',
647 ),
648 'tr_TR' => array(
649 'slug' => 'tr',
650 'name' => 'Turkish',
651 ),
652 'tt_RU' => array(
653 'slug' => 'tt',
654 'name' => 'Tatar',
655 ),
656 'tuk' => array(
657 'slug' => 'tuk',
658 'name' => 'Turkmen',
659 ),
660 'twd' => array(
661 'slug' => 'twd',
662 'name' => 'Tweants',
663 ),
664 'tzm' => array(
665 'slug' => 'tzm',
666 'name' => 'Tamazight (Central Atlas)',
667 ),
668 'ug_CN' => array(
669 'slug' => 'ug',
670 'name' => 'Uighur',
671 ),
672 'uk' => array(
673 'slug' => 'uk',
674 'name' => 'Ukrainian',
675 ),
676 'ur' => array(
677 'slug' => 'ur',
678 'name' => 'Urdu',
679 ),
680 'uz_UZ' => array(
681 'slug' => 'uz',
682 'name' => 'Uzbek',
683 ),
684 'vi' => array(
685 'slug' => 'vi',
686 'name' => 'Vietnamese',
687 ),
688 'wa' => array(
689 'slug' => 'wa',
690 'name' => 'Walloon',
691 ),
692 'xho' => array(
693 'slug' => 'xho',
694 'name' => 'Xhosa',
695 ),
696 'xmf' => array(
697 'slug' => 'xmf',
698 'name' => 'Mingrelian',
699 ),
700 'yor' => array(
701 'slug' => 'yor',
702 'name' => 'Yoruba',
703 ),
704 'zh_CN' => array(
705 'slug' => 'zh-cn',
706 'name' => 'Chinese (China)',
707 ),
708 'zh_HK' => array(
709 'slug' => 'zh-hk',
710 'name' => 'Chinese (Hong Kong)',
711 ),
712 'zh_TW' => array(
713 'slug' => 'zh-tw',
714 'name' => 'Chinese (Taiwan)',
715 ),
716 'de_DE_formal' => array(
717 'slug' => 'de/formal',
718 'name' => 'German (Formal)',
719 ),
720 'nl_NL_formal' => array(
721 'slug' => 'nl/formal',
722 'name' => 'Dutch (Formal)',
723 ),
724 'de_CH_informal' => array(
725 'slug' => 'de-ch/informal',
726 'name' => 'Chinese (Taiwan)',
727 ),
728 'pt_PT_ao90' => array(
729 'slug' => 'pt/ao90',
730 'name' => 'Portuguese (Portugal, AO90)',
731 ),
732 );
733
734 /**
735 * Check if we should load module for this.
736 *
737 * @param Product $product Product to check.
738 *
739 * @return bool Should load ?
740 */
741 public function can_load( $product ) {
742 if ( $this->is_from_partner( $product ) ) {
743 return false;
744 }
745 if ( ! $product->is_wordpress_available() ) {
746 return false;
747 }
748
749 $lang = $this->get_user_locale();
750
751 if ( 'en_US' === $lang ) {
752 return false;
753 }
754
755 $languages = $this->get_translations( $product );
756
757 if ( ! is_array( $languages ) ) {
758 return false;
759 }
760
761 if ( ! isset( $languages['translations'] ) ) {
762 return false;
763 }
764
765 $languages = $languages['translations'];
766
767 $available = wp_list_pluck( $languages, 'language' );
768
769 if ( in_array( $lang, $available ) ) {
770 return false;
771 }
772
773 if ( ! isset( self::$locales[ $lang ] ) ) {
774 return false;
775 }
776
777 return apply_filters( $product->get_slug() . '_sdk_enable_translate', true );
778 }
779
780 /**
781 * Get the user's locale.
782 */
783 private function get_user_locale() {
784 global $wp_version;
785 if ( version_compare( $wp_version, '4.7.0', '>=' ) ) {
786 return get_user_locale();
787 }
788 $user = wp_get_current_user();
789 if ( $user ) {
790 $locale = $user->locale;
791 }
792
793 return $locale ? $locale : get_locale();
794 }
795
796 /**
797 * Fetch translations from api.
798 *
799 * @param Product $product Product to check.
800 *
801 * @return mixed Translation array.
802 */
803 private function get_translations( $product ) {
804 $cache_key = $product->get_key() . '_all_languages';
805 $translations = get_transient( $cache_key );
806
807 if ( false === $translations ) {
808 require_once ABSPATH . 'wp-admin/includes/translation-install.php';
809 $translations = translations_api(
810 $product->get_type() . 's',
811 array(
812 'slug' => $product->get_slug(),
813 'version' => $product->get_version(),
814 )
815 );
816 set_transient( $cache_key, $translations, WEEK_IN_SECONDS );
817 }
818
819 return $translations;
820
821 }
822
823 /**
824 * Add notification to queue.
825 *
826 * @param array $all_notifications Previous notification.
827 *
828 * @return array All notifications.
829 */
830 public function add_notification( $all_notifications ) {
831
832 $lang = $this->get_user_locale();
833 $link = $this->get_locale_paths( $lang );
834 $language_meta = self::$locales[ $lang ];
835
836 $heading = apply_filters( $this->product->get_key() . '_feedback_translate_heading', 'Improve {product}' );
837 $heading = str_replace(
838 array( '{product}' ),
839 $this->product->get_friendly_name(),
840 $heading
841 );
842 $message = apply_filters(
843 $this->product->get_key() . '_feedback_translation',
844 'Translating <b>{product}</b> into as many languages as possible is a huge project. We still need help with a lot of them, so if you are good at translating into <b>{language}</b>, it would be greatly appreciated.
845 The process is easy, and you can join by following the link below!'
846 );
847
848 $message = str_replace(
849 [ '{product}', '{language}' ],
850 [
851 $this->product->get_friendly_name(),
852 $language_meta['name'],
853 ],
854 $message
855 );
856
857 $button_submit = apply_filters( $this->product->get_key() . '_feedback_translate_button_do', 'Ok, I will gladly help.' );
858 $button_cancel = apply_filters( $this->product->get_key() . '_feedback_translate_button_cancel', 'No, thanks.' );
859
860 $all_notifications[] = [
861 'id' => $this->product->get_key() . '_translate_flag',
862 'heading' => $heading,
863 'message' => $message,
864 'ctas' => [
865 'confirm' => [
866 'link' => $link,
867 'text' => $button_submit,
868 ],
869 'cancel' => [
870 'link' => '#',
871 'text' => $button_cancel,
872 ],
873 ],
874 ];
875
876 return $all_notifications;
877 }
878
879 /**
880 * Return the locale path.
881 *
882 * @param string $locale Locale code.
883 *
884 * @return string Locale path.
885 */
886 private function get_locale_paths( $locale ) {
887 if ( empty( $locale ) ) {
888 return '';
889 }
890
891 $slug = isset( self::$locales[ $locale ] ) ? self::$locales[ $locale ]['slug'] : '';
892 if ( empty( $slug ) ) {
893 return '';
894 }
895 if ( strpos( $slug, '/' ) === false ) {
896 $slug .= '/default';
897 }
898 $url = 'https://translate.wordpress.org/projects/wp-' . $this->product->get_type() . 's/' . $this->product->get_slug() . '/' . ( $this->product->get_type() === 'plugin' ? 'dev/' : '' ) . $slug . '?filters%5Bstatus%5D=untranslated&sort%5Bby%5D=random';
899
900 return $url;
901 }
902
903 /**
904 * Load module logic.
905 *
906 * @param Product $product Product to load.
907 *
908 * @return Translate Module instance.
909 */
910 public function load( $product ) {
911
912 $this->product = $product;
913
914 add_filter( 'themeisle_sdk_registered_notifications', [ $this, 'add_notification' ] );
915
916 return $this;
917 }
918 }
919