Plugin Directory

Changeset 3468722


Ignore:
Timestamp:
02/24/2026 03:07:11 PM (5 weeks ago)
Author:
conveythis
Message:

269.6 Dialects added + fixes

Location:
conveythis-translate/trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • conveythis-translate/trunk/app/class/ConveyThis.php

    r3465205 r3468722  
    1010    private $nodePathList = [];
    1111    private $nodePathListSpace = [];
     12    private $templateVarMap = [];
    1213
    1314    function __construct() {
     15        if (!isset($_SERVER['HTTP_HOST'])) {
     16            $_SERVER['HTTP_HOST'] = parse_url(home_url(), PHP_URL_HOST) ?: '';
     17        }
     18        if (!isset($_SERVER['REQUEST_URI'])) {
     19            $_SERVER['REQUEST_URI'] = '/';
     20        }
     21        if (!isset($_SERVER['REQUEST_SCHEME'])) {
     22            $_SERVER['REQUEST_SCHEME'] = is_ssl() ? 'https' : 'http';
     23        }
     24
    1425        $this->print_log('__construct()');
    1526        $this->print_log("***********************");
     
    24802491        $doc->formatOutput = true;
    24812492        libxml_use_internal_errors(true);
    2482         if (extension_loaded('mbstring')) {
    2483             $doc->loadHTML(mb_convert_encoding($output, 'HTML-ENTITIES', 'UTF-8'));
     2493
     2494        // Inject UTF-8 charset declaration so DOMDocument interprets the
     2495        // document correctly. Replaces deprecated mb_convert_encoding().
     2496        // Compatible with PHP 7.x and PHP 8.x.
     2497        if (stripos($output, '<head') !== false) {
     2498            $output = preg_replace(
     2499                '/<head(\s[^>]*)?>/i',
     2500                '<head$1><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">',
     2501                $output,
     2502                1
     2503            );
    24842504        } else {
    2485             $doc->loadHTML($output);
    2486         }
     2505            $output = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body>' . $output . '</body></html>';
     2506        }
     2507
     2508        $doc->loadHTML($output);
    24872509        libxml_clear_errors();
    24882510        return $doc;
     
    24922514        $this->print_log("* searchSegment()");
    24932515        $source_text = html_entity_decode($value);
     2516        $source_text = $this->protectTemplateVars($source_text);
    24942517        $source_text = trim(preg_replace("/\<!--(.*?)\-->/", "", $source_text));
    24952518
     
    25022525                $source_text2 = isset($item['source_text']) ? html_entity_decode($item['source_text']) : '';
    25032526                if (strcmp($source_text, trim($source_text2)) === 0) {
    2504                     return str_replace($source_text, $item['translate_text'], $source_text);
     2527                    return $this->restoreTemplateVars(str_replace($source_text, $item['translate_text'], $source_text));
    25052528                }
    25062529            }
     
    25232546
    25242547                if (strcmp($source_text, trim($source2Lower)) === 0) {
    2525                     return str_replace($source_text, $item['translate_text'], $source_text);
     2548                    return $this->restoreTemplateVars(str_replace($source_text, $item['translate_text'], $source_text));
    25262549                }
    25272550            }
     
    25362559
    25372560                if (strcmp($source_text, wp_strip_all_tags($source2Lower)) === 0) {
    2538                     return str_replace($source_text, $item['translate_text'], $source_text);
     2561                    return $this->restoreTemplateVars(str_replace($source_text, $item['translate_text'], $source_text));
    25392562                }
    25402563            }
     
    27882811                $content = html_entity_decode($content, ENT_HTML5, 'UTF-8');
    27892812
     2813                // Remove C1 control characters (U+0080–U+009F) that are never valid in
     2814                // HTML or JavaScript and can cause SyntaxError in browsers.
     2815                // Compatible with PHP 7.x and PHP 8.x.
     2816                $cleaned = preg_replace('/[\x{0080}-\x{009F}]/u', '', $content);
     2817                if ($cleaned !== null) {
     2818                    $content = $cleaned;
     2819                }
     2820
    27902821                //$this->print_log("############ content: #############");
    27912822                // $this->print_log($content);
     
    28212852            foreach ($segments as $segment) {
    28222853                if (preg_match('/\p{L}/u', $segment)) {
    2823                     $res[] = $segment;
     2854                    // Skip segments that consist entirely of template variables
     2855                    $stripped = preg_replace('/\{\{\{?.+?\}?\}\}/', '', $segment);
     2856                    if (trim($stripped) === '') {
     2857                        continue;
     2858                    }
     2859                    $res[] = $this->protectTemplateVars($segment);
    28242860                }
    28252861            }
    28262862        }
    28272863        return $res;
     2864    }
     2865
     2866    /**
     2867     * Replace {{ ... }} and {{{ ... }}} template expressions with deterministic
     2868     * placeholders so they are not sent for translation.
     2869     * Compatible with PHP 7.x and PHP 8.x.
     2870     */
     2871    private function protectTemplateVars($text) {
     2872        return preg_replace_callback('/\{\{\{?.+?\}?\}\}/', function ($matches) {
     2873            $original = $matches[0];
     2874            $placeholder = 'CTXNTP_' . substr(md5($original), 0, 10);
     2875            $this->templateVarMap[$placeholder] = $original;
     2876            return $placeholder;
     2877        }, $text);
     2878    }
     2879
     2880    /**
     2881     * Restore template-variable placeholders back to their original {{ ... }} form.
     2882     */
     2883    private function restoreTemplateVars($text) {
     2884        if (!empty($this->templateVarMap)) {
     2885            $text = str_replace(
     2886                array_keys($this->templateVarMap),
     2887                array_values($this->templateVarMap),
     2888                $text
     2889            );
     2890        }
     2891        return $text;
    28282892    }
    28292893
     
    29282992                $val_trimmed = trim($val);
    29292993                $val_trimmed = html_entity_decode($val_trimmed, ENT_QUOTES | ENT_HTML5, 'UTF-8');
    2930                 if (isset($translations[$val_trimmed])) {
     2994                $val_protected = $this->protectTemplateVars($val_trimmed);
     2995                if (isset($translations[$val_protected])) {
     2996                    $val = $this->restoreTemplateVars($translations[$val_protected]);
     2997                } elseif (isset($translations[$val_trimmed])) {
    29312998                    $val = $translations[$val_trimmed];
    29322999                }
  • conveythis-translate/trunk/app/class/Variables.php

    r3460968 r3468722  
    589589        908 => array('language_id' => 908, 'title_en' => 'Upper Sorbian', 'title' => 'Hornjoserbšćina', 'code2' => 'hsb', 'code3' => 'hsb', 'flag' => 'de'),
    590590        909 => array('language_id' => 909, 'title_en' => 'Yucatec Maya', 'title' => 'Maya tʼàan', 'code2' => 'yua', 'code3' => 'yua', 'flag' => 'mx'),
     591
     592        // New Languages
     593        910 => array('language_id' => 910, 'title_en' => 'Arabic (Egypt)', 'title' => 'Arabic (Egypt)', 'code2' => 'ar-eg', 'code3' => 'ara', 'flag' => 'eg'),
     594        911 => array('language_id' => 911, 'title_en' => 'Arabic (UAE)', 'title' => 'Arabic (UAE)', 'code2' => 'ar-ae', 'code3' => 'ara', 'flag' => 'ae'),
     595        912 => array('language_id' => 912, 'title_en' => 'English (UK)', 'title' => 'English (UK)', 'code2' => 'en-gb', 'code3' => 'eng', 'flag' => 'gb'),
     596        913 => array('language_id' => 913, 'title_en' => 'English (Australia)', 'title' => 'English (Australia)', 'code2' => 'en-au', 'code3' => 'eng', 'flag' => 'au'),
     597        914 => array('language_id' => 914, 'title_en' => 'Spanish (Mexico)', 'title' => 'Spanish (Mexico)', 'code2' => 'es-mx', 'code3' => 'spa', 'flag' => 'mx'),
     598        915 => array('language_id' => 915, 'title_en' => 'Spanish (US)', 'title' => 'Spanish (US)', 'code2' => 'es-us', 'code3' => 'spa', 'flag' => 'us'),
     599        916 => array('language_id' => 916, 'title_en' => 'French (Canada)', 'title' => 'French (Canada)', 'code2' => 'fr-ca', 'code3' => 'fre', 'flag' => 'ca'),
    591600    );
    592601
  • conveythis-translate/trunk/app/widget/js/settings.js

    r3460968 r3468722  
    680680        907: {'title_en': 'Twi', 'title': 'Twi', 'code2': 'ak', 'code3': 'aka', 'flag': '6Mr'},
    681681        908: {'title_en': 'Upper Sorbian', 'title': 'Upper Sorbian', 'code2': 'hsb', 'code3': 'hsb', 'flag': 'K7e'},
    682         909: {'title_en': 'Yucatec Maya', 'title': 'Yucatec Maya', 'code2': 'yua', 'code3': 'yua', 'flag': '8Qb'}
     682        909: {'title_en': 'Yucatec Maya', 'title': 'Yucatec Maya', 'code2': 'yua', 'code3': 'yua', 'flag': '8Qb'},
     683
     684        // New Languages
     685        910: {'title_en': 'Arabic (Egypt)', 'title': 'Arabic (Egypt)', 'code2': 'ar-eg', 'code3': 'ara', 'flag': 'eg'},
     686        911: {'title_en': 'Arabic (UAE)', 'title': 'Arabic (UAE)', 'code2': 'ar-ae', 'code3': 'ara', 'flag': 'ae'},
     687        912: {'title_en': 'English (UK)', 'title': 'English (UK)', 'code2': 'en-gb', 'code3': 'eng', 'flag': 'gb'},
     688        913: {'title_en': 'English (Australia)', 'title': 'English (Australia)', 'code2': 'en-au', 'code3': 'eng', 'flag': 'au'},
     689        914: {'title_en': 'Spanish (Mexico)', 'title': 'Spanish (Mexico)', 'code2': 'es-mx', 'code3': 'spa', 'flag': 'mx'},
     690        915: {'title_en': 'Spanish (USA)', 'title': 'Spanish (USA)', 'code2': 'es-us', 'code3': 'spa', 'flag': 'us'},
     691        916: {'title_en': 'French (Canada)', 'title': 'French (Canada)', 'code2': 'fr-ca', 'code3': 'fre', 'flag': 'ca'},
    683692    }
    684693
  • conveythis-translate/trunk/changelog.txt

    r3465205 r3468722  
    11== Changelog ==
     2= 269.6 =
     3* Dialects + fixes added
     4
    25= 269.5 =
    36* Instructions for Exclusion pages added
  • conveythis-translate/trunk/config.php

    r3465205 r3468722  
    6161
    6262define('CONVEYTHIS_LOADER', true);
    63 define('CONVEYTHIS_PLUGIN_VERSION', '269.5');
     63define('CONVEYTHIS_PLUGIN_VERSION', '269.6');
    6464define('CONVEY_PLUGIN_ROOT_PATH', plugin_dir_path( __FILE__ ));
    6565define('CONVEY_PLUGIN_PATH', plugin_dir_url(__FILE__));
  • conveythis-translate/trunk/index.php

    r3465205 r3468722  
    44Plugin URI: https://www.conveythis.com/?utm_source=widget&utm_medium=wordpress
    55Description: Translate your WordPress site into over 100 languages using professional and instant machine translation technology. ConveyThis will help provide you with an SEO-friendy, multilingual website in minutes with no coding required.
    6 Version: 269.5
     6Version: 269.6
    77
    88Author: ConveyThis Translate Team
  • conveythis-translate/trunk/readme.txt

    r3465205 r3468722  
    66Tested up to: 6.9.1
    77
    8 Stable tag: 269.5
     8Stable tag: 269.6
    99
    1010License: GPLv2
     
    107107**Popular languages:** English, Spanish, French, German, Chinese, Japanese, Korean, Arabic, Portuguese, Russian, Italian, Dutch, Ukrainian
    108108
    109 **Additional languages:** Abkhaz, Acehnese, Acholi, Afrikaans, Albanian, Alur, Amharic, Armenian, Assamese, Awadhi, Aymara, Azerbaijani, Balinese, Bambara, Bashkir, Basque, Batak Karo, Batak Simalungun, Batak Toba, Belarusian, Bemba, Bengali, Betawi, Bhojpuri, Bikol, Bodo, Bosnian, Breton, Bulgarian, Burmese, Buryat, Cantonese, Catalan, Cebuano, Chhattisgarhi, Chichewa, Chinese (Simpl.), Chinese (Trad.), Chuvash, Corsican, Crimean Tatar, Croatian, Czech, Danish, Dari, Dinka, Divehi, Dogri, Dombe, Dzongkha, Esperanto, Estonian, Ewe, Faroese, Fijian, Finnish, Frisian, Fulfulde, Ga, Galician, Ganda, Georgian, Greek, Guarani, Gujarati, Haitian (Creole), Hakha Chin, Hausa, Hawaiian, Hebrew, Hiligaynon, Hindi, Hmong, Hungarian, Hunsrik, Icelandic, Igbo, Iloko, Indonesian, Inuinnaqtun, Inuktitut, Irish, Javanese, Kannada, Kapampangan, Kashmiri, Kazakh, Khmer, Kiga, Kinyarwanda, Kituba, Konkani, Krio, Kurdish (Central), Kyrgyz, Laotian, Latgalian, Latin, Latvian, Ligurian, Limburgan, Lingala, Lithuanian, Lombard, Lower Sorbian, Luo, Luxembourgish, Macedonian, Maithili, Makassar, Malagasy, Malay, Malayalam, Maltese, Manipuri, Maori, Marathi, Meadow Mari, Minang, Mizo, Mongolian, Ndebele (South), Nepalbhasa, Nepali, Northern Sotho, Norwegian, Nuer, Occitan, Odia, Oromo, Pangasinan, Papiamento, Pashto, Persian, Polish, Portuguese (BR), Portuguese (PT), Punjabi, Quechua, Queretaro Otomi, Romani, Romanian, Rundi, Samoan, Sango, Sanskrit, Scottish, Serbian, Sesotho, Seychellois Creole, Shan, Shona, Sicilian, Silesian, Sindhi, Sinhala, Slovakian, Slovenian, Somali, Sundanese, Swahili, Swati, Swedish, Tagalog, Tahitian, Tajik, Tamil, Tatar, Telugu, Tetum, Thai, Tibetan, Tigrinya, Tongan, Tsonga, Tswana, Turkish, Turkmen, Twi, Upper Sorbian, Urdu, Uyghur, Uzbek, Vietnamese, Welsh, Xhosa, Yiddish, Yoruba, Yucatec Maya, Zulu
    110 
    111 **Custom languages & dialects:** Create your own language variations using **templates** (e.g., British English, Canadian French) or start from scratch.
     109**Additional languages:** Abkhaz, Acehnese, Acholi, Afrikaans, Albanian, Alur, Amharic, Armenian, Assamese, Awadhi, Aymara, Azerbaijani, Balinese, Bambara, Bashkir, Basque, Batak Karo, Batak Simalungun, Batak Toba, Belarusian, Bemba, Bengali, Betawi, Bhojpuri, Bikol, Bodo, Bosnian, Breton, Bulgarian, Burmese, Buryat, Cantonese, Catalan, Cebuano, Chhattisgarhi, Chichewa, Chinese (Simplified), Chinese (Traditional), Chuvash, Corsican, Crimean Tatar, Croatian, Czech, Danish, Dari, Dinka, Divehi, Dogri, Dombe, Dutch, Dzongkha, English, English (UK), English (Australia), Esperanto, Estonian, Ewe, Faroese, Fijian, Finnish, French, French (Canada), Frisian, Fulfulde, Ga, Galician, Ganda, Georgian, German, Greek, Guarani, Gujarati, Haitian Creole, Hakha Chin, Hausa, Hawaiian, Hebrew, Hiligaynon, Hindi, Hmong, Hungarian, Hunsrik, Icelandic, Igbo, Iloko, Indonesian, Inuinnaqtun, Inuktitut, Irish, Italian, Japanese, Javanese, Kannada, Kapampangan, Kashmiri, Kazakh, Khmer, Kiga, Kinyarwanda, Kituba, Konkani, Korean, Krio, Kurdish, Kurdish (Central), Kyrgyz, Laotian, Latgalian, Latin, Latvian, Ligurian, Limburgan, Lingala, Lithuanian, Lombard, Lower Sorbian, Luo, Luxembourgish, Macedonian, Maithili, Makassar, Malagasy, Malay, Malayalam, Maltese, Manipuri, Maori, Marathi, Meadow Mari, Minang, Mizo, Mongolian, Ndebele (South), Nepalbhasa, Nepali, Northern Sotho, Norwegian, Nuer, Occitan, Odia, Oromo, Pangasinan, Papiamento, Pashto, Persian, Polish, Portuguese, Portuguese (Brazil), Portuguese (Portugal), Punjabi, Quechua, Queretaro Otomi, Romani, Romanian, Rundi, Samoan, Sango, Sanskrit, Scottish Gaelic, Serbian, Sesotho, Seychellois Creole, Shan, Shona, Sicilian, Silesian, Sindhi, Sinhala, Slovak, Slovenian, Somali, Spanish, Spanish (Mexico), Spanish (United States), Sundanese, Swahili, Swati, Swedish, Tagalog, Tahitian, Tajik, Tamil, Tatar, Telugu, Tetum, Thai, Tibetan, Tigrinya, Tongan, Tsonga, Tswana, Turkish, Turkmen, Twi, Ukrainian, Upper Sorbian, Urdu, Uyghur, Uzbek, Vietnamese, Welsh, Xhosa, Yiddish, Yoruba, Yucatec Maya, Zulu
     110
     111**Custom languages & dialects:** Choose from regional variants including English (UK, Australia), French (Canada), Spanish (US, Mexico), Portuguese (Brazil, Portugal), and Arabic (Egypt, UAE)
    112112
    113113==Pricing==
     
    218218
    219219== Changelog ==
     220= 269.6 =
     221* Dialects + fixes added
     222
    220223= 269.5 =
    221224* Instructions for Exclusion pages added
     
    621624With the most advanced “Extreme plan,” you have 100 languages at your disposal.
    622625
    623 The current number of possible languages to operate in is 200.
     626The current number of possible languages to operate in is 208.
    624627
    625628While this list contains all the most-spoken languages of the world, many rare dialects are not yet included.
Note: See TracChangeset for help on using the changeset viewer.