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 |