PluginProbe ʕ •ᴥ•ʔ
Starter Sites & Templates by Neve / 1.4.1
Starter Sites & Templates by Neve v1.4.1
1.4.1 1.4.0 1.3.0 1.2.29 1.2.28 1.2.6 1.2.7 1.2.8 1.2.9 trunk 1.0.10 1.0.11 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.20 1.1.21 1.1.22 1.1.23 1.1.24 1.1.25 1.1.26 1.1.27 1.1.28 1.1.29 1.1.3 1.1.30 1.1.31 1.1.32 1.1.33 1.1.34 1.1.35 1.1.36 1.1.37 1.1.38 1.1.39 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.3 1.2.4 1.2.5
templates-patterns-collection / vendor / codeinwp / themeisle-sdk / src / Modules / Translate.php
templates-patterns-collection / vendor / codeinwp / themeisle-sdk / src / Modules Last commit date
About_us.php 3 weeks ago Abstract_Migration.php 2 months ago Announcements.php 2 months ago Compatibilities.php 2 years ago Dashboard_widget.php 3 weeks ago Featured_plugins.php 1 month ago Float_widget.php 1 year ago Licenser.php 2 months ago Logger.php 10 months ago Migrator.php 2 months ago Notification.php 3 years ago Promotions.php 3 weeks ago Recommendation.php 3 years ago Review.php 1 year ago Rollback.php 1 year ago Script_loader.php 1 year ago Translate.php 5 years ago Translations.php 1 year ago Uninstall_feedback.php 3 days ago Welcome.php 2 years 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