Plugin Directory

Changeset 3418158


Ignore:
Timestamp:
12/12/2025 11:06:43 AM (3 weeks ago)
Author:
pacotole
Message:

tagging version 2.5.4

Location:
connect-polylang-elementor
Files:
3 added
18 deleted
16 edited
25 copied

Legend:

Unmodified
Added
Removed
  • connect-polylang-elementor/tags/2.5.4/README.txt

    r3380230 r3418158  
    11=== Connect Polylang for Elementor ===
    2 Contributors: creapuntome, pacotole, daveshine, p4fbradjohnson
     2Contributors: creapuntome, pacotole, daveshine, narinder-singh, p4fbradjohnson
    33Donate link: https://github.com/sponsors/creame
    44Tags: elementor, polylang, multilingual, language switcher, dynamic tags
    55Requires at least: 5.4
    6 Tested up to: 6.8
     6Tested up to: 6.9
    77Requires PHP: 5.6
    8 Stable tag: 2.5.3
     8Stable tag: 2.5.4
    99License: GPL-2.0-or-later
    1010License URI: https://opensource.org/licenses/GPL-2.0
    1111
    1212Connect Polylang with Elementor: translated templates, language switcher widget, language visibility conditions and more
    13 
    14 
    1513
    1614== Description ==
     
    3331* Vertical list, Horizontal list or **styled dropdown**.
    3432* **SVG scalable flags**.
     33
     34https://www.youtube.com/watch?v=7DUh-bggJBs&feature=youtu.be
     35
    3536
    3637#### 👁️ Language Visibility Conditions
     
    6061* Other integration fixes.
    6162
     63
     64[AI-powered translation for Polylang](https://coolplugins.net/product/autopoly-ai-translation-for-polylang/?ref=creame&utm_source=cpel_plugin&utm_medium=readme&utm_campaign=get_pro&utm_content=bottom_link) — AutoPoly instantly translates your Elementor, Gutenberg, and ACF content in one click while keeping your design exactly the same. [Check it now (affiliated link)](https://coolplugins.net/product/autopoly-ai-translation-for-polylang/?ref=creame&utm_source=cpel_plugin&utm_medium=readme&utm_campaign=get_pro&utm_content=bottom_link)
     65
     66
    6267### How to use
    6368You can manage translated templates in two ways:
     
    1351401. Setup Polylang at first, add at least TWO languages, one of them make your default language (in Polylang)
    1361412. Add content to your default Polylang language - if Polylang asks you to apply existing content to it, you should most likely click "ok" and proceed - it works really fine :)
    137 3. After that setup an Elementor Theme Builder template - asign it to your Polylang default language, apply conditions in Elementor
    138 4. Next, setup a translation template for the template of 3.) -- asign your second Polylang language, DO NOT apply conditions in Elementor
     1423. After that setup an Elementor Theme Builder template - assign it to your Polylang default language, apply conditions in Elementor
     1434. Next, setup a translation template for the template of 3.) -- assign your second Polylang language, DO NOT apply conditions in Elementor
    139144
    140145
     
    186191* [**Lingotek Translation**](https://wordpress.org/plugins/lingotek-translation/) - Native Polylang integration - Lingotek brings convenient cloud-based localization and translation for WordPress
    187192* [**Elementor Datepicker Localization**](https://github.com/creame/elementor-datepicker-localization) - Allow form datetime fields in your site language
    188 * [**Country Flags for Elementor**](https://wordpress.org/plugins/country-flags-for-elementor/) - Native Elementor widget
    189 
    190 
     193
     194
     195= How can I translate Polylang pages automatically? =
     196Use [AutoPoly ](https://coolplugins.net/product/autopoly-ai-translation-for-polylang/?ref=creame&utm_source=cpel_plugin&utm_medium=readme&utm_campaign=get_pro&utm_content=bottom_link) to auto-translate your Elementor and Gutenberg pages with AI in one click. [Check it now (affiliated link)](https://coolplugins.net/product/autopoly-ai-translation-for-polylang/?ref=creame&utm_source=cpel_plugin&utm_medium=readme&utm_campaign=get_pro&utm_content=bottom_link)
     197
     198= Where do I report security bugs found in this plugin? =
     199Please report security bugs found in the source code of the undefined plugin through the [Patchstack Vulnerability Disclosure  Program](https://patchstack.com/database/vdp/ad44f834-19c4-470b-860f-d19657e7902a). The Patchstack team will assist you with verification, CVE assignment, and notify the developers of this plugin.
    191200
    192201== Screenshots ==
    193 
    194 1. Language Switcher examples
    195 2. Widget Visibility Conditions
    196 3. Dynamic Tag example
    197 4. Elementor Editor translations integration
    198 5. Elementor Editor Top Bar translations integration
    199 
    200 
     2021. Add the language switcher in Elementor and customize its appearance.
     2032. Create and link translated pages directly inside Elementor.
     2043. Preview how the Polylang–Elementor language switcher looks on the frontend.
    201205
    202206== Changelog ==
     207
     208= 2.5.4 =
     209* Added: Registered with Patchstack Vulnerability Disclosure Program
     210* Added: New screenshots
     211* Tweaks: Added affiliated links.
     212* Tweaks: Minor text improvements.
     213* Compatibility: Tested with WordPress 6.9, Elementor v3.33.2 and Polylang v3.7.5.
     214* Tweaks: Updated readme video and made small textual adjustments.
     215* Removed: Old screenshots and outdated links
    203216
    204217= 2.5.3 =
     
    213226= 2.5.0 =
    214227* **NEW editor language switcher controls** for Elementor Editor Top Bar 3.25.0 and later (not v4).
    215 Now can switch between pages & templates translations from "Page Settings" and in setings panel, on "Languages" section.
     228Now can switch between pages & templates translations from "Page Settings" and in settings panel, on "Languages" section.
    216229This utilizes Elementor 3.25.0's updated approach to managing Page Settings Panel Controls.
    217230(thanks to [@narinder9](https://github.com/narinder9) for the [main work](https://github.com/creame/connect-polylang-elementor/pull/21)).
     
    305318
    306319= 2.0.3 =
    307 * Updated language switcher dropdown animated & toogle on mobile.
     320* Updated language switcher dropdown animated & toggle on mobile.
    308321* Added Elementor icon in posts list status.
    309322* Fixed language switcher underline style.
     
    324337* New dynamic tags for language name, language code, language flag (icon or svg scalable) and language url.
    325338* Better Polylang/Elementor integration:
    326   * Automatically generate display conditios on new template translation.
     339  * Automatically generate display conditions on new template translation.
    327340  * Automatically generate CSS file on new template translation.
    328   * Update display conditios un change template language.
     341  * Update display conditions un change template language.
    329342  * Fix home and search links to point to the current language.
    330343  * Hide langue on wp-admin for global widgets.
     
    354367= 1.0.1 - 2020-06-17 =
    355368* Stability update for edge cases were experiencing fatal errors
    356 * Thanks to sebastienserre for correct fatal unknow pll_the_languages();
     369* Thanks to @sebastienserre for correct fatal unknow pll_the_languages();
    357370
    358371= 1.0.0 - 2018-11-28 =
     
    379392* *Second alpha version*
    380393* New: Added Elementor Finder integration for Polylang plugin links and resources
    381 * New: Make plugin translateable - added German translations
     394* New: Make plugin translatable - added German translations
    382395* New: Added Readme file, plus `composer.json`
    383396* New: First public alpha release on GitHub
     
    389402
    390403
    391 
    392404== Upgrade Notice ==
    393405
    394406= 2.0.4 =
    395 **Warning** breaking changes with v1. Language Switcher and Dynamic Tags has been renamed and neeed to re-added again in your templates.
     407**Warning** breaking changes with v1. Language Switcher and Dynamic Tags has been renamed and need to re-added again in your templates.
    396408
    397409= 1.0.2 =
  • connect-polylang-elementor/tags/2.5.4/connect-polylang-elementor.php

    r3380230 r3418158  
    1111 * Plugin URI:        https://github.com/creame/connect-polylang-elementor
    1212 * Description:       Connect Polylang with Elementor. Display templates in the correct language, language switcher widget, language visibility conditions and dynamic tags.
    13  * Version:           2.5.3
     13 * Version:           2.5.4
    1414 * Author:            Creame
    1515 * Author URI:        https://crea.me/
     
    2020 * Requires WP:       5.4
    2121 * Requires PHP:      5.6
    22  * Elementor tested up to: 3.30.2
    23  * Elementor Pro tested up to: 3.30.0
     22 * Requires Plugins:  polylang, elementor
     23 * Elementor tested up to: 3.33.2
     24 * Elementor Pro tested up to: 3.33.2
    2425 *
    2526 * Copyright (c) 2021 Paco Toledo - CREAME
     
    3738 * @since 2.0.0
    3839 */
    39 define( 'CPEL_PLUGIN_VERSION', '2.5.3' );
     40define( 'CPEL_PLUGIN_VERSION', '2.5.4' );
    4041define( 'CPEL_FILE', __FILE__ );
    4142define( 'CPEL_DIR', plugin_dir_path( CPEL_FILE ) );
     
    153154    if ( isset( $pll_options['force_lang'] ) && 3 === $pll_options['force_lang'] && ! empty( $pll_options['domains'] ) ) {
    154155
    155         $srv_host = wp_parse_url( "//{$_SERVER['HTTP_HOST']}", PHP_URL_HOST );
     156        $srv_host = wp_parse_url( '//' . sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) ), PHP_URL_HOST );
    156157        $url_host = wp_parse_url( $url, PHP_URL_HOST );
    157158
    158159        if ( $url_host ) {
    159160            foreach ( $pll_options['domains'] as $domain ) {
    160                 if ( false !== strpos( $domain, $srv_host ) ) {
     161                $domain_host = wp_parse_url( $domain, PHP_URL_HOST );
     162                if ( $domain_host === $srv_host ) {
    161163                    $url = str_replace( $url_host, $srv_host, $url );
    162164                    break;
     
    181183function fix_elementor_editor_context( $class ) {
    182184
    183     return 'PLL_Frontend' === $class && is_admin() && isset( $_GET['action'] ) && 'elementor' === $_GET['action'] ? 'PLL_Admin' : $class;
     185    return 'PLL_Frontend' === $class && is_admin() && isset( $_GET['action'] ) && 'elementor' === sanitize_key( wp_unslash( $_GET['action'] ) ) ? 'PLL_Admin' : $class;
    184186
    185187}
  • connect-polylang-elementor/tags/2.5.4/includes/admin-extras.php

    r2776211 r3418158  
    7373        }
    7474
    75         /** Display plugin settings links */
    76         return apply_filters(
    77             'cpel/filter/plugins_page/settings_links',
    78             $cpel_links,
    79             $link_polylang, // additional param.
    80             $link_elementor // additional param.
    81         );
     75        // Output the links.
     76        return apply_filters( 'cpel/filter/plugins_page/settings_links', $cpel_links );
    8277
    8378    }
     
    9691        if ( CPEL_BASENAME === $cpel_file ) {
    9792
    98             $cpel_links[] = '<a href="https://paypal.me/pacotole" title="Support this plugin\'s development">Donate</a>';
    99             $cpel_links[] = '<a href="mailto:[email protected]" title="Request personal one on one training on using Polylang + Elementor">Personal one-on-one training</a>';
     93            $cpel_links[] = sprintf(
     94                '<a href="%1$s" title="%2$s" target="_blank" rel="noopener noreferrer">%3$s <small><b>(%4$s)</b></small></a>',
     95                esc_url( 'https://coolplugins.net/product/autopoly-ai-translation-for-polylang/?ref=creame&utm_source=cpel_plugin&utm_medium=inside&utm_campaign=get_pro&utm_content=plugins_list' ),
     96                esc_html__( 'AI Translation For Polylang', 'connect-polylang-elementor' ),
     97                esc_html__( 'AI Translation', 'connect-polylang-elementor' ),
     98                esc_html__( 'Affiliated', 'connect-polylang-elementor' ),
     99            );
    100100
    101101        }
  • connect-polylang-elementor/tags/2.5.4/includes/connect-plugins.php

    r3367616 r3418158  
    230230        }
    231231
    232         // Translate post_id.
    233         $attr['id'] = pll_get_post( absint( $attr['id'] ) ) ?: $attr['id']; //phpcs:ignore WordPress.PHP.DisallowShortTernary
     232        // Translate post_id safely.
     233        if ( isset( $attr['id'] ) && '' !== $attr['id'] ) {
     234            $id = absint( $attr['id'] );
     235            if ( $id ) {
     236                $attr['id'] = pll_get_post( $id ) ?: $id; //phpcs:ignore WordPress.PHP.DisallowShortTernary
     237            }
     238        }
    234239        // Skip next call.
    235240        $attr['skip'] = 1;
     
    237242        $output = '';
    238243        foreach ( $attr as $key => $val ) {
    239             $output .= " $key=\"$val\"";
     244            $output .= ' ' . esc_attr( sanitize_key( $key ) ) . '="' . esc_attr( $val ) . '"';
    240245        }
    241246
     
    299304
    300305        $translation = null;
    301 
    302306        // Is API REST '/wp-json/elementor/v1/globals'.
    303307        if ( defined( 'REST_REQUEST' ) && REST_REQUEST && isset( $_SERVER['HTTP_REFERER'] ) ) {
    304308            // Referrer is Elementor Editor?
    305             wp_parse_str( wp_parse_url( $_SERVER['HTTP_REFERER'], PHP_URL_QUERY ), $query );
     309            $referer = esc_url_raw( $_SERVER['HTTP_REFERER'] );
     310            wp_parse_str( wp_parse_url( $referer, PHP_URL_QUERY ), $query );
    306311
    307312            if ( isset( $query['action'], $query['post'] ) && 'elementor' === $query['action'] ) {
    308                 $translation = pll_get_post( $value, pll_get_post_language( intval( $query['post'] ) ) );
     313                $translation = pll_get_post( $value, pll_get_post_language( absint( $query['post'] ) ) );
    309314            }
    310315        } elseif ( cpel_is_elementor_editor() ) {
    311 
    312             $translation = pll_get_post( $value, pll_get_post_language( intval( $_GET['post'] ) ) );
     316            $post_id     = isset( $_GET['post'] ) ? absint( $_GET['post'] ) : 0;
     317            $translation = $post_id ? pll_get_post( $value, pll_get_post_language( $post_id ) ) : null;
    313318
    314319        } elseif ( ! is_admin() ) {
     
    501506
    502507        return '_elementor_css' === $meta_key && 'post-new.php' === $pagenow
    503             && isset( $_GET['from_post'], $_GET['new_lang'] ) ? false : $null;
     508            && isset( $_GET['from_post'], $_GET['new_lang'] )
     509            && ! empty( absint( wp_unslash( $_GET['from_post'] ) ) )
     510            && ! empty( sanitize_key( wp_unslash( $_GET['new_lang'] ) ) ) ? false : $null;
    504511
    505512    }
     
    809816    private function fix_url_domain( $url, $post_id ) {
    810817
    811         $current_host = wp_parse_url( pll_current_language( 'home_url' ) ?: trailingslashit( "//{$_SERVER['HTTP_HOST']}" ), PHP_URL_HOST ); //phpcs:ignore WordPress.PHP.DisallowShortTernary
     818        $current_host = wp_parse_url( pll_current_language( 'home_url' ) ?: trailingslashit( '//' . sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) ) ), PHP_URL_HOST ); //phpcs:ignore WordPress.PHP.DisallowShortTernary
    812819        $post_host    = wp_parse_url( pll_get_post_language( $post_id, 'home_url' ), PHP_URL_HOST );
    813820
  • connect-polylang-elementor/tags/2.5.4/includes/dynamic-tags/language-code.php

    r2670040 r3418158  
    2525
    2626    public function render() {
    27         echo wp_kses_post( $this->get_language_field( 'slug' ) );
     27        echo esc_html( $this->get_language_field( 'slug' ) );
    2828    }
    2929
  • connect-polylang-elementor/tags/2.5.4/includes/dynamic-tags/language-name.php

    r2670040 r3418158  
    2525
    2626    public function render() {
    27         echo wp_kses_post( $this->get_language_field( 'name' ) );
     27        echo esc_html( $this->get_language_field( 'name' ) );
    2828    }
    2929
  • connect-polylang-elementor/tags/2.5.4/includes/dynamic-tags/tag-trait.php

    r2885561 r3418158  
    3939
    4040        $languages = pll_the_languages( array( 'raw' => 1 ) );
    41 
    4241        if ( is_array( $languages ) ) {
    4342            if ( 'current' === $language ) {
    44                 $value = $languages[ pll_current_language() ][ $field ];
    45             } elseif ( isset( $languages[ $language ] ) ) {
     43                $current_lang = pll_current_language();
     44                // If no current language, fallback to default language
     45                if ( ! $current_lang ) {
     46                    $current_lang = pll_default_language();
     47                }
     48                if ( $current_lang && isset( $languages[ $current_lang ] ) && isset( $languages[ $current_lang ][ $field ] ) ) {
     49                    $value = $languages[ $current_lang ][ $field ];
     50                }
     51            } elseif ( isset( $languages[ $language ] ) && isset( $languages[ $language ][ $field ] ) ) {
    4652                $value = $languages[ $language ][ $field ];
    4753            }
  • connect-polylang-elementor/tags/2.5.4/includes/elementor-assets.php

    r2922994 r3418158  
    5050        }
    5151
    52         $is_preview = isset( $_GET['elementor_preview'] );
     52        $is_preview = ! empty( sanitize_key( wp_unslash( $_GET['elementor_preview'] ) ) );
    5353
    5454        if ( ! cpel_is_elementor_editor() && ! $is_preview ) {
     
    179179        }
    180180
    181         $current_url = add_query_arg( $_SERVER['QUERY_STRING'], '', admin_url( 'post.php' ) );
    182         $server_host = wp_parse_url( "//{$_SERVER['HTTP_HOST']}", PHP_URL_HOST );
    183         $post_host   = wp_parse_url( \pll_get_post_language( intval( $_GET['post'] ), 'home_url' ), PHP_URL_HOST );
     181        $current_url = add_query_arg( wp_unslash( $_SERVER['QUERY_STRING'] ), '', admin_url( 'post.php' ) );
     182        $server_host = wp_parse_url( '//' . sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) ), PHP_URL_HOST );
     183        $post_host   = wp_parse_url( \pll_get_post_language( absint( $_GET['post'] ), 'home_url' ), PHP_URL_HOST );
    184184
    185185        if ( null !== $post_host && $server_host !== $post_host ) {
  • connect-polylang-elementor/tags/2.5.4/includes/finder/polylang-category.php

    r2922994 r3418158  
    108108                    array(
    109109                        'name' => 'settings',
    110                         'url'  => esc_url_raw( admin_url( 'admin.php?page=mlang&pll_action=edit&lang=' . $lang_data->term_id ) ),
     110                        'url'  => esc_url_raw( admin_url( 'admin.php?page=mlang&pll_action=edit&lang=' . absint( $lang_data->term_id ) ) ),
    111111                        'icon' => 'settings',
    112112                    ),
  • connect-polylang-elementor/tags/2.5.4/includes/functions.php

    r2885561 r3418158  
    9393function cpel_is_elementor_editor() {
    9494
    95     return is_admin() && isset( $_GET['action'], $_GET['post'] ) && 'elementor' === $_GET['action'];
     95    return is_admin()
     96        && isset( $_GET['action'], $_GET['post'] )
     97        && 'elementor' === sanitize_key( wp_unslash( $_GET['action'] ) )
     98        && absint( $_GET['post'] ) > 0;
    9699
    97100}
  • connect-polylang-elementor/tags/2.5.4/includes/widgets/polylang-language-switcher.php

    r3368585 r3418158  
    731731        // Max number of items in language dropdown
    732732        if ( 'dropdown' === $settings['layout'] ) {
    733             $this->add_render_attribute( '_wrapper', 'style', '--langs:' . ( count( $languages ) - 1 ) );
     733            $this->add_render_attribute( '_wrapper', 'style', '--langs:' . ( absint( count( $languages ) - 1 ) ) );
    734734        }
    735735
  • connect-polylang-elementor/tags/2.5.4/languages/connect-polylang-elementor.pot

    r2932719 r3418158  
    1 # Copyright (C) 2023 Creame
     1# Copyright (C) 2025 Creame
    22# This file is distributed under the GPL-2.0-or-later.
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Connect Polylang for Elementor 2.4.3\n"
     5"Project-Id-Version: Connect Polylang for Elementor 2.5.4\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/connect-polylang-elementor\n"
    77"Last-Translator: Pacotole <[email protected]>\n"
     
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2023-06-07T16:17:27+00:00\n"
     12"POT-Creation-Date: 2025-12-12T10:59:13+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    14 "X-Generator: WP-CLI 2.7.1\n"
     14"X-Generator: WP-CLI 2.12.0\n"
    1515"X-Domain: connect-polylang-elementor\n"
    1616
    1717#. Plugin Name of the plugin
     18#: connect-polylang-elementor.php
    1819msgid "Connect Polylang for Elementor"
    1920msgstr ""
    2021
    2122#. Plugin URI of the plugin
     23#: connect-polylang-elementor.php
    2224msgid "https://github.com/creame/connect-polylang-elementor"
    2325msgstr ""
    2426
    2527#. Description of the plugin
     28#: connect-polylang-elementor.php
    2629msgid "Connect Polylang with Elementor. Display templates in the correct language, language switcher widget, language visibility conditions and dynamic tags."
    2730msgstr ""
    2831
    2932#. Author of the plugin
     33#: connect-polylang-elementor.php
    3034msgid "Creame"
    3135msgstr ""
    3236
    3337#. Author URI of the plugin
     38#: connect-polylang-elementor.php
    3439msgid "https://crea.me/"
    3540msgstr ""
     
    5560msgstr ""
    5661
    57 #: includes/connect-plugins.php:636
     62#: includes/admin-extras.php:96
     63msgid "AI Translation For Polylang"
     64msgstr ""
     65
     66#: includes/admin-extras.php:97
     67msgid "AI Translation"
     68msgstr ""
     69
     70#: includes/admin-extras.php:98
     71msgid "Affiliated"
     72msgstr ""
     73
     74#: includes/connect-plugins.php:694
     75#: includes/connect-plugins.php:953
     76#, php-format
    5877msgid "Add a translation — %s"
    5978msgstr ""
    6079
    61 #: includes/connect-plugins.php:743
     80#: includes/connect-plugins.php:801
     81#, php-format
    6282msgid "(from %s)"
     83msgstr ""
     84
     85#: includes/connect-plugins.php:954
     86#, php-format
     87msgid "Add a translation in %s"
    6388msgstr ""
    6489
     
    79104
    80105#: includes/dynamic-tags/language-flag.php:46
    81 #: includes/widgets/polylang-language-switcher.php:552
     106#: includes/widgets/polylang-language-switcher.php:548
    82107msgid "Scalable Image"
    83108msgstr ""
     
    139164msgstr ""
    140165
    141 #: includes/language-visibility.php:66
     166#: includes/language-visibility.php:68
    142167msgid "Language Visibility"
    143168msgstr ""
    144169
    145 #: includes/language-visibility.php:106
     170#: includes/language-visibility.php:108
    146171msgid "When language is:"
    147172msgstr ""
    148173
    149 #: includes/widgets/polylang-language-switcher.php:108
     174#: includes/widgets/polylang-language-switcher.php:104
    150175msgctxt "Comma separated keywords"
    151176msgid "languages, switcher, polylang, multilingual, flags, countries, country"
    152177msgstr ""
    153178
    154 #: includes/widgets/polylang-language-switcher.php:183
    155 #: includes/widgets/polylang-language-switcher.php:454
     179#: includes/widgets/polylang-language-switcher.php:179
     180#: includes/widgets/polylang-language-switcher.php:450
    156181msgid "Dropdown"
    157182msgstr ""
    158183
    159 #: includes/widgets/polylang-language-switcher.php:262
     184#: includes/widgets/polylang-language-switcher.php:258
    160185msgid "Displays language codes"
    161186msgstr ""
    162187
    163 #: includes/widgets/polylang-language-switcher.php:275
     188#: includes/widgets/polylang-language-switcher.php:271
    164189msgid "Main Menu"
    165190msgstr ""
    166191
    167 #: includes/widgets/polylang-language-switcher.php:403
     192#: includes/widgets/polylang-language-switcher.php:399
    168193msgid "Horizontal Padding"
    169194msgstr ""
    170195
    171 #: includes/widgets/polylang-language-switcher.php:418
     196#: includes/widgets/polylang-language-switcher.php:414
    172197msgid "Vertical Padding"
    173198msgstr ""
    174199
     200#: includes/widgets/polylang-language-switcher.php:459
     201msgid "Drop"
     202msgstr ""
     203
     204#: includes/widgets/polylang-language-switcher.php:462
     205msgid "On Click"
     206msgstr ""
     207
    175208#: includes/widgets/polylang-language-switcher.php:463
    176 msgid "Drop"
    177 msgstr ""
    178 
    179 #: includes/widgets/polylang-language-switcher.php:466
    180 msgid "On Click"
    181 msgstr ""
    182 
    183 #: includes/widgets/polylang-language-switcher.php:467
    184209msgid "On Mouse Hover"
    185210msgstr ""
    186211
    187 #: includes/widgets/polylang-language-switcher.php:477
     212#: includes/widgets/polylang-language-switcher.php:473
    188213msgid "Drop Direction"
    189214msgstr ""
    190215
    191 #: includes/widgets/polylang-language-switcher.php:615
     216#: includes/widgets/polylang-language-switcher.php:611
    192217msgid "Language Name"
    193218msgstr ""
    194219
    195 #: includes/widgets/polylang-language-switcher.php:645
     220#: includes/widgets/polylang-language-switcher.php:641
    196221msgid "Language Code"
    197222msgstr ""
  • connect-polylang-elementor/trunk/README.txt

    r3380230 r3418158  
    11=== Connect Polylang for Elementor ===
    2 Contributors: creapuntome, pacotole, daveshine, p4fbradjohnson
     2Contributors: creapuntome, pacotole, daveshine, narinder-singh, p4fbradjohnson
    33Donate link: https://github.com/sponsors/creame
    44Tags: elementor, polylang, multilingual, language switcher, dynamic tags
    55Requires at least: 5.4
    6 Tested up to: 6.8
     6Tested up to: 6.9
    77Requires PHP: 5.6
    8 Stable tag: 2.5.3
     8Stable tag: 2.5.4
    99License: GPL-2.0-or-later
    1010License URI: https://opensource.org/licenses/GPL-2.0
    1111
    1212Connect Polylang with Elementor: translated templates, language switcher widget, language visibility conditions and more
    13 
    14 
    1513
    1614== Description ==
     
    3331* Vertical list, Horizontal list or **styled dropdown**.
    3432* **SVG scalable flags**.
     33
     34https://www.youtube.com/watch?v=7DUh-bggJBs&feature=youtu.be
     35
    3536
    3637#### 👁️ Language Visibility Conditions
     
    6061* Other integration fixes.
    6162
     63
     64[AI-powered translation for Polylang](https://coolplugins.net/product/autopoly-ai-translation-for-polylang/?ref=creame&utm_source=cpel_plugin&utm_medium=readme&utm_campaign=get_pro&utm_content=bottom_link) — AutoPoly instantly translates your Elementor, Gutenberg, and ACF content in one click while keeping your design exactly the same. [Check it now (affiliated link)](https://coolplugins.net/product/autopoly-ai-translation-for-polylang/?ref=creame&utm_source=cpel_plugin&utm_medium=readme&utm_campaign=get_pro&utm_content=bottom_link)
     65
     66
    6267### How to use
    6368You can manage translated templates in two ways:
     
    1351401. Setup Polylang at first, add at least TWO languages, one of them make your default language (in Polylang)
    1361412. Add content to your default Polylang language - if Polylang asks you to apply existing content to it, you should most likely click "ok" and proceed - it works really fine :)
    137 3. After that setup an Elementor Theme Builder template - asign it to your Polylang default language, apply conditions in Elementor
    138 4. Next, setup a translation template for the template of 3.) -- asign your second Polylang language, DO NOT apply conditions in Elementor
     1423. After that setup an Elementor Theme Builder template - assign it to your Polylang default language, apply conditions in Elementor
     1434. Next, setup a translation template for the template of 3.) -- assign your second Polylang language, DO NOT apply conditions in Elementor
    139144
    140145
     
    186191* [**Lingotek Translation**](https://wordpress.org/plugins/lingotek-translation/) - Native Polylang integration - Lingotek brings convenient cloud-based localization and translation for WordPress
    187192* [**Elementor Datepicker Localization**](https://github.com/creame/elementor-datepicker-localization) - Allow form datetime fields in your site language
    188 * [**Country Flags for Elementor**](https://wordpress.org/plugins/country-flags-for-elementor/) - Native Elementor widget
    189 
    190 
     193
     194
     195= How can I translate Polylang pages automatically? =
     196Use [AutoPoly ](https://coolplugins.net/product/autopoly-ai-translation-for-polylang/?ref=creame&utm_source=cpel_plugin&utm_medium=readme&utm_campaign=get_pro&utm_content=bottom_link) to auto-translate your Elementor and Gutenberg pages with AI in one click. [Check it now (affiliated link)](https://coolplugins.net/product/autopoly-ai-translation-for-polylang/?ref=creame&utm_source=cpel_plugin&utm_medium=readme&utm_campaign=get_pro&utm_content=bottom_link)
     197
     198= Where do I report security bugs found in this plugin? =
     199Please report security bugs found in the source code of the undefined plugin through the [Patchstack Vulnerability Disclosure  Program](https://patchstack.com/database/vdp/ad44f834-19c4-470b-860f-d19657e7902a). The Patchstack team will assist you with verification, CVE assignment, and notify the developers of this plugin.
    191200
    192201== Screenshots ==
    193 
    194 1. Language Switcher examples
    195 2. Widget Visibility Conditions
    196 3. Dynamic Tag example
    197 4. Elementor Editor translations integration
    198 5. Elementor Editor Top Bar translations integration
    199 
    200 
     2021. Add the language switcher in Elementor and customize its appearance.
     2032. Create and link translated pages directly inside Elementor.
     2043. Preview how the Polylang–Elementor language switcher looks on the frontend.
    201205
    202206== Changelog ==
     207
     208= 2.5.4 =
     209* Added: Registered with Patchstack Vulnerability Disclosure Program
     210* Added: New screenshots
     211* Tweaks: Added affiliated links.
     212* Tweaks: Minor text improvements.
     213* Compatibility: Tested with WordPress 6.9, Elementor v3.33.2 and Polylang v3.7.5.
     214* Tweaks: Updated readme video and made small textual adjustments.
     215* Removed: Old screenshots and outdated links
    203216
    204217= 2.5.3 =
     
    213226= 2.5.0 =
    214227* **NEW editor language switcher controls** for Elementor Editor Top Bar 3.25.0 and later (not v4).
    215 Now can switch between pages & templates translations from "Page Settings" and in setings panel, on "Languages" section.
     228Now can switch between pages & templates translations from "Page Settings" and in settings panel, on "Languages" section.
    216229This utilizes Elementor 3.25.0's updated approach to managing Page Settings Panel Controls.
    217230(thanks to [@narinder9](https://github.com/narinder9) for the [main work](https://github.com/creame/connect-polylang-elementor/pull/21)).
     
    305318
    306319= 2.0.3 =
    307 * Updated language switcher dropdown animated & toogle on mobile.
     320* Updated language switcher dropdown animated & toggle on mobile.
    308321* Added Elementor icon in posts list status.
    309322* Fixed language switcher underline style.
     
    324337* New dynamic tags for language name, language code, language flag (icon or svg scalable) and language url.
    325338* Better Polylang/Elementor integration:
    326   * Automatically generate display conditios on new template translation.
     339  * Automatically generate display conditions on new template translation.
    327340  * Automatically generate CSS file on new template translation.
    328   * Update display conditios un change template language.
     341  * Update display conditions un change template language.
    329342  * Fix home and search links to point to the current language.
    330343  * Hide langue on wp-admin for global widgets.
     
    354367= 1.0.1 - 2020-06-17 =
    355368* Stability update for edge cases were experiencing fatal errors
    356 * Thanks to sebastienserre for correct fatal unknow pll_the_languages();
     369* Thanks to @sebastienserre for correct fatal unknow pll_the_languages();
    357370
    358371= 1.0.0 - 2018-11-28 =
     
    379392* *Second alpha version*
    380393* New: Added Elementor Finder integration for Polylang plugin links and resources
    381 * New: Make plugin translateable - added German translations
     394* New: Make plugin translatable - added German translations
    382395* New: Added Readme file, plus `composer.json`
    383396* New: First public alpha release on GitHub
     
    389402
    390403
    391 
    392404== Upgrade Notice ==
    393405
    394406= 2.0.4 =
    395 **Warning** breaking changes with v1. Language Switcher and Dynamic Tags has been renamed and neeed to re-added again in your templates.
     407**Warning** breaking changes with v1. Language Switcher and Dynamic Tags has been renamed and need to re-added again in your templates.
    396408
    397409= 1.0.2 =
  • connect-polylang-elementor/trunk/connect-polylang-elementor.php

    r3380230 r3418158  
    1111 * Plugin URI:        https://github.com/creame/connect-polylang-elementor
    1212 * Description:       Connect Polylang with Elementor. Display templates in the correct language, language switcher widget, language visibility conditions and dynamic tags.
    13  * Version:           2.5.3
     13 * Version:           2.5.4
    1414 * Author:            Creame
    1515 * Author URI:        https://crea.me/
     
    2020 * Requires WP:       5.4
    2121 * Requires PHP:      5.6
    22  * Elementor tested up to: 3.30.2
    23  * Elementor Pro tested up to: 3.30.0
     22 * Requires Plugins:  polylang, elementor
     23 * Elementor tested up to: 3.33.2
     24 * Elementor Pro tested up to: 3.33.2
    2425 *
    2526 * Copyright (c) 2021 Paco Toledo - CREAME
     
    3738 * @since 2.0.0
    3839 */
    39 define( 'CPEL_PLUGIN_VERSION', '2.5.3' );
     40define( 'CPEL_PLUGIN_VERSION', '2.5.4' );
    4041define( 'CPEL_FILE', __FILE__ );
    4142define( 'CPEL_DIR', plugin_dir_path( CPEL_FILE ) );
     
    153154    if ( isset( $pll_options['force_lang'] ) && 3 === $pll_options['force_lang'] && ! empty( $pll_options['domains'] ) ) {
    154155
    155         $srv_host = wp_parse_url( "//{$_SERVER['HTTP_HOST']}", PHP_URL_HOST );
     156        $srv_host = wp_parse_url( '//' . sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) ), PHP_URL_HOST );
    156157        $url_host = wp_parse_url( $url, PHP_URL_HOST );
    157158
    158159        if ( $url_host ) {
    159160            foreach ( $pll_options['domains'] as $domain ) {
    160                 if ( false !== strpos( $domain, $srv_host ) ) {
     161                $domain_host = wp_parse_url( $domain, PHP_URL_HOST );
     162                if ( $domain_host === $srv_host ) {
    161163                    $url = str_replace( $url_host, $srv_host, $url );
    162164                    break;
     
    181183function fix_elementor_editor_context( $class ) {
    182184
    183     return 'PLL_Frontend' === $class && is_admin() && isset( $_GET['action'] ) && 'elementor' === $_GET['action'] ? 'PLL_Admin' : $class;
     185    return 'PLL_Frontend' === $class && is_admin() && isset( $_GET['action'] ) && 'elementor' === sanitize_key( wp_unslash( $_GET['action'] ) ) ? 'PLL_Admin' : $class;
    184186
    185187}
  • connect-polylang-elementor/trunk/includes/admin-extras.php

    r2776211 r3418158  
    7373        }
    7474
    75         /** Display plugin settings links */
    76         return apply_filters(
    77             'cpel/filter/plugins_page/settings_links',
    78             $cpel_links,
    79             $link_polylang, // additional param.
    80             $link_elementor // additional param.
    81         );
     75        // Output the links.
     76        return apply_filters( 'cpel/filter/plugins_page/settings_links', $cpel_links );
    8277
    8378    }
     
    9691        if ( CPEL_BASENAME === $cpel_file ) {
    9792
    98             $cpel_links[] = '<a href="https://paypal.me/pacotole" title="Support this plugin\'s development">Donate</a>';
    99             $cpel_links[] = '<a href="mailto:[email protected]" title="Request personal one on one training on using Polylang + Elementor">Personal one-on-one training</a>';
     93            $cpel_links[] = sprintf(
     94                '<a href="%1$s" title="%2$s" target="_blank" rel="noopener noreferrer">%3$s <small><b>(%4$s)</b></small></a>',
     95                esc_url( 'https://coolplugins.net/product/autopoly-ai-translation-for-polylang/?ref=creame&utm_source=cpel_plugin&utm_medium=inside&utm_campaign=get_pro&utm_content=plugins_list' ),
     96                esc_html__( 'AI Translation For Polylang', 'connect-polylang-elementor' ),
     97                esc_html__( 'AI Translation', 'connect-polylang-elementor' ),
     98                esc_html__( 'Affiliated', 'connect-polylang-elementor' ),
     99            );
    100100
    101101        }
  • connect-polylang-elementor/trunk/includes/connect-plugins.php

    r3367616 r3418158  
    230230        }
    231231
    232         // Translate post_id.
    233         $attr['id'] = pll_get_post( absint( $attr['id'] ) ) ?: $attr['id']; //phpcs:ignore WordPress.PHP.DisallowShortTernary
     232        // Translate post_id safely.
     233        if ( isset( $attr['id'] ) && '' !== $attr['id'] ) {
     234            $id = absint( $attr['id'] );
     235            if ( $id ) {
     236                $attr['id'] = pll_get_post( $id ) ?: $id; //phpcs:ignore WordPress.PHP.DisallowShortTernary
     237            }
     238        }
    234239        // Skip next call.
    235240        $attr['skip'] = 1;
     
    237242        $output = '';
    238243        foreach ( $attr as $key => $val ) {
    239             $output .= " $key=\"$val\"";
     244            $output .= ' ' . esc_attr( sanitize_key( $key ) ) . '="' . esc_attr( $val ) . '"';
    240245        }
    241246
     
    299304
    300305        $translation = null;
    301 
    302306        // Is API REST '/wp-json/elementor/v1/globals'.
    303307        if ( defined( 'REST_REQUEST' ) && REST_REQUEST && isset( $_SERVER['HTTP_REFERER'] ) ) {
    304308            // Referrer is Elementor Editor?
    305             wp_parse_str( wp_parse_url( $_SERVER['HTTP_REFERER'], PHP_URL_QUERY ), $query );
     309            $referer = esc_url_raw( $_SERVER['HTTP_REFERER'] );
     310            wp_parse_str( wp_parse_url( $referer, PHP_URL_QUERY ), $query );
    306311
    307312            if ( isset( $query['action'], $query['post'] ) && 'elementor' === $query['action'] ) {
    308                 $translation = pll_get_post( $value, pll_get_post_language( intval( $query['post'] ) ) );
     313                $translation = pll_get_post( $value, pll_get_post_language( absint( $query['post'] ) ) );
    309314            }
    310315        } elseif ( cpel_is_elementor_editor() ) {
    311 
    312             $translation = pll_get_post( $value, pll_get_post_language( intval( $_GET['post'] ) ) );
     316            $post_id     = isset( $_GET['post'] ) ? absint( $_GET['post'] ) : 0;
     317            $translation = $post_id ? pll_get_post( $value, pll_get_post_language( $post_id ) ) : null;
    313318
    314319        } elseif ( ! is_admin() ) {
     
    501506
    502507        return '_elementor_css' === $meta_key && 'post-new.php' === $pagenow
    503             && isset( $_GET['from_post'], $_GET['new_lang'] ) ? false : $null;
     508            && isset( $_GET['from_post'], $_GET['new_lang'] )
     509            && ! empty( absint( wp_unslash( $_GET['from_post'] ) ) )
     510            && ! empty( sanitize_key( wp_unslash( $_GET['new_lang'] ) ) ) ? false : $null;
    504511
    505512    }
     
    809816    private function fix_url_domain( $url, $post_id ) {
    810817
    811         $current_host = wp_parse_url( pll_current_language( 'home_url' ) ?: trailingslashit( "//{$_SERVER['HTTP_HOST']}" ), PHP_URL_HOST ); //phpcs:ignore WordPress.PHP.DisallowShortTernary
     818        $current_host = wp_parse_url( pll_current_language( 'home_url' ) ?: trailingslashit( '//' . sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) ) ), PHP_URL_HOST ); //phpcs:ignore WordPress.PHP.DisallowShortTernary
    812819        $post_host    = wp_parse_url( pll_get_post_language( $post_id, 'home_url' ), PHP_URL_HOST );
    813820
  • connect-polylang-elementor/trunk/includes/dynamic-tags/language-code.php

    r2670040 r3418158  
    2525
    2626    public function render() {
    27         echo wp_kses_post( $this->get_language_field( 'slug' ) );
     27        echo esc_html( $this->get_language_field( 'slug' ) );
    2828    }
    2929
  • connect-polylang-elementor/trunk/includes/dynamic-tags/language-name.php

    r2670040 r3418158  
    2525
    2626    public function render() {
    27         echo wp_kses_post( $this->get_language_field( 'name' ) );
     27        echo esc_html( $this->get_language_field( 'name' ) );
    2828    }
    2929
  • connect-polylang-elementor/trunk/includes/dynamic-tags/tag-trait.php

    r2885561 r3418158  
    3939
    4040        $languages = pll_the_languages( array( 'raw' => 1 ) );
    41 
    4241        if ( is_array( $languages ) ) {
    4342            if ( 'current' === $language ) {
    44                 $value = $languages[ pll_current_language() ][ $field ];
    45             } elseif ( isset( $languages[ $language ] ) ) {
     43                $current_lang = pll_current_language();
     44                // If no current language, fallback to default language
     45                if ( ! $current_lang ) {
     46                    $current_lang = pll_default_language();
     47                }
     48                if ( $current_lang && isset( $languages[ $current_lang ] ) && isset( $languages[ $current_lang ][ $field ] ) ) {
     49                    $value = $languages[ $current_lang ][ $field ];
     50                }
     51            } elseif ( isset( $languages[ $language ] ) && isset( $languages[ $language ][ $field ] ) ) {
    4652                $value = $languages[ $language ][ $field ];
    4753            }
  • connect-polylang-elementor/trunk/includes/elementor-assets.php

    r2922994 r3418158  
    5050        }
    5151
    52         $is_preview = isset( $_GET['elementor_preview'] );
     52        $is_preview = ! empty( sanitize_key( wp_unslash( $_GET['elementor_preview'] ) ) );
    5353
    5454        if ( ! cpel_is_elementor_editor() && ! $is_preview ) {
     
    179179        }
    180180
    181         $current_url = add_query_arg( $_SERVER['QUERY_STRING'], '', admin_url( 'post.php' ) );
    182         $server_host = wp_parse_url( "//{$_SERVER['HTTP_HOST']}", PHP_URL_HOST );
    183         $post_host   = wp_parse_url( \pll_get_post_language( intval( $_GET['post'] ), 'home_url' ), PHP_URL_HOST );
     181        $current_url = add_query_arg( wp_unslash( $_SERVER['QUERY_STRING'] ), '', admin_url( 'post.php' ) );
     182        $server_host = wp_parse_url( '//' . sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) ), PHP_URL_HOST );
     183        $post_host   = wp_parse_url( \pll_get_post_language( absint( $_GET['post'] ), 'home_url' ), PHP_URL_HOST );
    184184
    185185        if ( null !== $post_host && $server_host !== $post_host ) {
  • connect-polylang-elementor/trunk/includes/finder/polylang-category.php

    r2922994 r3418158  
    108108                    array(
    109109                        'name' => 'settings',
    110                         'url'  => esc_url_raw( admin_url( 'admin.php?page=mlang&pll_action=edit&lang=' . $lang_data->term_id ) ),
     110                        'url'  => esc_url_raw( admin_url( 'admin.php?page=mlang&pll_action=edit&lang=' . absint( $lang_data->term_id ) ) ),
    111111                        'icon' => 'settings',
    112112                    ),
  • connect-polylang-elementor/trunk/includes/functions.php

    r2885561 r3418158  
    9393function cpel_is_elementor_editor() {
    9494
    95     return is_admin() && isset( $_GET['action'], $_GET['post'] ) && 'elementor' === $_GET['action'];
     95    return is_admin()
     96        && isset( $_GET['action'], $_GET['post'] )
     97        && 'elementor' === sanitize_key( wp_unslash( $_GET['action'] ) )
     98        && absint( $_GET['post'] ) > 0;
    9699
    97100}
  • connect-polylang-elementor/trunk/includes/widgets/polylang-language-switcher.php

    r3368585 r3418158  
    731731        // Max number of items in language dropdown
    732732        if ( 'dropdown' === $settings['layout'] ) {
    733             $this->add_render_attribute( '_wrapper', 'style', '--langs:' . ( count( $languages ) - 1 ) );
     733            $this->add_render_attribute( '_wrapper', 'style', '--langs:' . ( absint( count( $languages ) - 1 ) ) );
    734734        }
    735735
  • connect-polylang-elementor/trunk/languages/connect-polylang-elementor.pot

    r2932719 r3418158  
    1 # Copyright (C) 2023 Creame
     1# Copyright (C) 2025 Creame
    22# This file is distributed under the GPL-2.0-or-later.
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Connect Polylang for Elementor 2.4.3\n"
     5"Project-Id-Version: Connect Polylang for Elementor 2.5.4\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/connect-polylang-elementor\n"
    77"Last-Translator: Pacotole <[email protected]>\n"
     
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2023-06-07T16:17:27+00:00\n"
     12"POT-Creation-Date: 2025-12-12T10:59:13+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    14 "X-Generator: WP-CLI 2.7.1\n"
     14"X-Generator: WP-CLI 2.12.0\n"
    1515"X-Domain: connect-polylang-elementor\n"
    1616
    1717#. Plugin Name of the plugin
     18#: connect-polylang-elementor.php
    1819msgid "Connect Polylang for Elementor"
    1920msgstr ""
    2021
    2122#. Plugin URI of the plugin
     23#: connect-polylang-elementor.php
    2224msgid "https://github.com/creame/connect-polylang-elementor"
    2325msgstr ""
    2426
    2527#. Description of the plugin
     28#: connect-polylang-elementor.php
    2629msgid "Connect Polylang with Elementor. Display templates in the correct language, language switcher widget, language visibility conditions and dynamic tags."
    2730msgstr ""
    2831
    2932#. Author of the plugin
     33#: connect-polylang-elementor.php
    3034msgid "Creame"
    3135msgstr ""
    3236
    3337#. Author URI of the plugin
     38#: connect-polylang-elementor.php
    3439msgid "https://crea.me/"
    3540msgstr ""
     
    5560msgstr ""
    5661
    57 #: includes/connect-plugins.php:636
     62#: includes/admin-extras.php:96
     63msgid "AI Translation For Polylang"
     64msgstr ""
     65
     66#: includes/admin-extras.php:97
     67msgid "AI Translation"
     68msgstr ""
     69
     70#: includes/admin-extras.php:98
     71msgid "Affiliated"
     72msgstr ""
     73
     74#: includes/connect-plugins.php:694
     75#: includes/connect-plugins.php:953
     76#, php-format
    5877msgid "Add a translation — %s"
    5978msgstr ""
    6079
    61 #: includes/connect-plugins.php:743
     80#: includes/connect-plugins.php:801
     81#, php-format
    6282msgid "(from %s)"
     83msgstr ""
     84
     85#: includes/connect-plugins.php:954
     86#, php-format
     87msgid "Add a translation in %s"
    6388msgstr ""
    6489
     
    79104
    80105#: includes/dynamic-tags/language-flag.php:46
    81 #: includes/widgets/polylang-language-switcher.php:552
     106#: includes/widgets/polylang-language-switcher.php:548
    82107msgid "Scalable Image"
    83108msgstr ""
     
    139164msgstr ""
    140165
    141 #: includes/language-visibility.php:66
     166#: includes/language-visibility.php:68
    142167msgid "Language Visibility"
    143168msgstr ""
    144169
    145 #: includes/language-visibility.php:106
     170#: includes/language-visibility.php:108
    146171msgid "When language is:"
    147172msgstr ""
    148173
    149 #: includes/widgets/polylang-language-switcher.php:108
     174#: includes/widgets/polylang-language-switcher.php:104
    150175msgctxt "Comma separated keywords"
    151176msgid "languages, switcher, polylang, multilingual, flags, countries, country"
    152177msgstr ""
    153178
    154 #: includes/widgets/polylang-language-switcher.php:183
    155 #: includes/widgets/polylang-language-switcher.php:454
     179#: includes/widgets/polylang-language-switcher.php:179
     180#: includes/widgets/polylang-language-switcher.php:450
    156181msgid "Dropdown"
    157182msgstr ""
    158183
    159 #: includes/widgets/polylang-language-switcher.php:262
     184#: includes/widgets/polylang-language-switcher.php:258
    160185msgid "Displays language codes"
    161186msgstr ""
    162187
    163 #: includes/widgets/polylang-language-switcher.php:275
     188#: includes/widgets/polylang-language-switcher.php:271
    164189msgid "Main Menu"
    165190msgstr ""
    166191
    167 #: includes/widgets/polylang-language-switcher.php:403
     192#: includes/widgets/polylang-language-switcher.php:399
    168193msgid "Horizontal Padding"
    169194msgstr ""
    170195
    171 #: includes/widgets/polylang-language-switcher.php:418
     196#: includes/widgets/polylang-language-switcher.php:414
    172197msgid "Vertical Padding"
    173198msgstr ""
    174199
     200#: includes/widgets/polylang-language-switcher.php:459
     201msgid "Drop"
     202msgstr ""
     203
     204#: includes/widgets/polylang-language-switcher.php:462
     205msgid "On Click"
     206msgstr ""
     207
    175208#: includes/widgets/polylang-language-switcher.php:463
    176 msgid "Drop"
    177 msgstr ""
    178 
    179 #: includes/widgets/polylang-language-switcher.php:466
    180 msgid "On Click"
    181 msgstr ""
    182 
    183 #: includes/widgets/polylang-language-switcher.php:467
    184209msgid "On Mouse Hover"
    185210msgstr ""
    186211
    187 #: includes/widgets/polylang-language-switcher.php:477
     212#: includes/widgets/polylang-language-switcher.php:473
    188213msgid "Drop Direction"
    189214msgstr ""
    190215
    191 #: includes/widgets/polylang-language-switcher.php:615
     216#: includes/widgets/polylang-language-switcher.php:611
    192217msgid "Language Name"
    193218msgstr ""
    194219
    195 #: includes/widgets/polylang-language-switcher.php:645
     220#: includes/widgets/polylang-language-switcher.php:641
    196221msgid "Language Code"
    197222msgstr ""
Note: See TracChangeset for help on using the changeset viewer.