Version Description
Just released into the wild.
=
Download this release
Release Info
Developer | p4fbradjohnson |
Plugin | Polylang Connect for Elementor – Templates Translation & Language Switcher |
Version | 1.0.0 |
Comparing to | |
See all releases |
Version 1.0.0
- CHANGES.md +60 -0
- LICENSE +339 -0
- LICENSE.txt +339 -0
- README.md +355 -0
- assets/css/index.php +4 -0
- assets/css/plsfe-editor.css +264 -0
- assets/css/plsfe-editor.min.css +1 -0
- assets/css/plsfe-frontend.css +279 -0
- assets/css/plsfe-frontend.min.css +1 -0
- assets/index.php +4 -0
- composer.json +22 -0
- connect-polylang-elementor.php +153 -0
- includes/admin-extras.php +212 -0
- includes/functions-conditionals.php +84 -0
- includes/functions-global.php +196 -0
- includes/index.php +4 -0
- index.php +4 -0
- languages/README.md +34 -0
- languages/connect-polylang-elementor-de_DE.mo +0 -0
- languages/connect-polylang-elementor-de_DE.po +444 -0
- languages/connect-polylang-elementor-de_DE_formal.mo +0 -0
- languages/connect-polylang-elementor-de_DE_formal.po +444 -0
- languages/connect-polylang-elementor.pot +408 -0
- languages/index.php +4 -0
- languages/readme.txt +34 -0
- modules/connect/index.php +4 -0
- modules/connect/tweaks-polylang-elementor.php +129 -0
- modules/dynamic-tags/index.php +4 -0
- modules/dynamic-tags/manager.php +44 -0
- modules/dynamic-tags/polylang-current-language-code.php +103 -0
- modules/dynamic-tags/polylang-current-language-flag.php +108 -0
- modules/dynamic-tags/polylang-current-language-name.php +103 -0
- modules/dynamic-tags/polylang-current-language-url.php +119 -0
- modules/dynamic-tags/polylang-language-names.php +141 -0
- modules/finder/index.php +4 -0
- modules/finder/manager.php +37 -0
- modules/finder/plugin-cpel.php +113 -0
- modules/finder/plugin-polylang.php +184 -0
- modules/index.php +4 -0
- modules/widgets/index.php +4 -0
- modules/widgets/polylang-language-switcher.php +741 -0
- modules/widgets/register-widget.php +120 -0
- readme.txt +299 -0
CHANGES.md
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Polylang Connect for Elementor
|
2 |
+
|
3 |
+
**General Info**
|
4 |
+
|
5 |
+
* [Plugin page on WordPress.org: wordpress.org/plugins/connect-polylang-elementor/](https://wordpress.org/plugins/connect-polylang-elementor/)
|
6 |
+
* [Translate the plugin](https://translate.wordpress.org/projects/wp-plugins/connect-polylang-elementor)
|
7 |
+
* [**Join plugin's newsletter for insider info, tutorials and more**](https://eepurl.com/gbAUUn)
|
8 |
+
* [**Become a Patron**](https://www.patreon.com/deckerweb) and support ongoing development, maintenance and support of this plugin
|
9 |
+
* [**Donate** for the further development & support of the plugin](https://www.paypal.me/deckerweb)
|
10 |
+
* [Plugin's documentation & FAQ](https://wordpress.org/plugins/connect-polylang-elementor/#faq)
|
11 |
+
* [Polylang Users Facebook Group](https://www.facebook.com/groups/polylang.users/)
|
12 |
+
* [Facebook Community User Group Deckerweb Plugins](https://www.facebook.com/groups/deckerweb.wordpress.plugins/)
|
13 |
+
* [Facebook Info Page for Deckerweb Plugins](https://www.facebook.com/deckerweb.wordpress.plugins/)
|
14 |
+
|
15 |
+
|
16 |
+
## Changelog of the Plugin
|
17 |
+
|
18 |
+
|
19 |
+
### 1.0.0 - 2018-11-28
|
20 |
+
|
21 |
+
* Official public release on WordPress.org
|
22 |
+
|
23 |
+
|
24 |
+
### 0.9.1 - 2018-11-27
|
25 |
+
|
26 |
+
* *First Release Candidate (RC) version*
|
27 |
+
* New: Automatic enabling of Elementor My Templates post type for Polylang support
|
28 |
+
* Tweak: Code improvements throughout
|
29 |
+
* Tweak: Inline documentation and PHP doc improvements
|
30 |
+
|
31 |
+
|
32 |
+
### 0.9.0 - 2018-11-26
|
33 |
+
|
34 |
+
* *Second beta version*
|
35 |
+
* New: More settings for Polylang Switcher widget
|
36 |
+
* Tweak: Improved Dynamic Tags additions
|
37 |
+
* Tweak: Improved Elementor Finder integration
|
38 |
+
|
39 |
+
|
40 |
+
### 0.8.0 - 2018-11-25
|
41 |
+
|
42 |
+
* *First beta version*
|
43 |
+
* New: Added native Elementor Widget - Polylang Language Switcher
|
44 |
+
* New: Added Dynamic Tags for Polylang (requires Elementor Pro)
|
45 |
+
|
46 |
+
|
47 |
+
### 0.7.0 - 2018-11-24
|
48 |
+
|
49 |
+
* *Second alpha version*
|
50 |
+
* New: Added Elementor Finder integration for Polylang plugin links and resources
|
51 |
+
* New: Make plugin translateable - added full German translations
|
52 |
+
* New: Added Readme file, plus `composer.json`
|
53 |
+
* New: First public alpha release on GitHub
|
54 |
+
|
55 |
+
|
56 |
+
### 0.5.0 - 2018-10-30
|
57 |
+
|
58 |
+
* *Plugin idea by Brad*
|
59 |
+
* *First alpha version by David*
|
60 |
+
* New: Template tweaks work in form of plugin code - coding standards improvements
|
LICENSE
ADDED
@@ -0,0 +1,339 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
GNU GENERAL PUBLIC LICENSE
|
2 |
+
Version 2, June 1991
|
3 |
+
|
4 |
+
Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
|
5 |
+
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
6 |
+
Everyone is permitted to copy and distribute verbatim copies
|
7 |
+
of this license document, but changing it is not allowed.
|
8 |
+
|
9 |
+
Preamble
|
10 |
+
|
11 |
+
The licenses for most software are designed to take away your
|
12 |
+
freedom to share and change it. By contrast, the GNU General Public
|
13 |
+
License is intended to guarantee your freedom to share and change free
|
14 |
+
software--to make sure the software is free for all its users. This
|
15 |
+
General Public License applies to most of the Free Software
|
16 |
+
Foundation's software and to any other program whose authors commit to
|
17 |
+
using it. (Some other Free Software Foundation software is covered by
|
18 |
+
the GNU Lesser General Public License instead.) You can apply it to
|
19 |
+
your programs, too.
|
20 |
+
|
21 |
+
When we speak of free software, we are referring to freedom, not
|
22 |
+
price. Our General Public Licenses are designed to make sure that you
|
23 |
+
have the freedom to distribute copies of free software (and charge for
|
24 |
+
this service if you wish), that you receive source code or can get it
|
25 |
+
if you want it, that you can change the software or use pieces of it
|
26 |
+
in new free programs; and that you know you can do these things.
|
27 |
+
|
28 |
+
To protect your rights, we need to make restrictions that forbid
|
29 |
+
anyone to deny you these rights or to ask you to surrender the rights.
|
30 |
+
These restrictions translate to certain responsibilities for you if you
|
31 |
+
distribute copies of the software, or if you modify it.
|
32 |
+
|
33 |
+
For example, if you distribute copies of such a program, whether
|
34 |
+
gratis or for a fee, you must give the recipients all the rights that
|
35 |
+
you have. You must make sure that they, too, receive or can get the
|
36 |
+
source code. And you must show them these terms so they know their
|
37 |
+
rights.
|
38 |
+
|
39 |
+
We protect your rights with two steps: (1) copyright the software, and
|
40 |
+
(2) offer you this license which gives you legal permission to copy,
|
41 |
+
distribute and/or modify the software.
|
42 |
+
|
43 |
+
Also, for each author's protection and ours, we want to make certain
|
44 |
+
that everyone understands that there is no warranty for this free
|
45 |
+
software. If the software is modified by someone else and passed on, we
|
46 |
+
want its recipients to know that what they have is not the original, so
|
47 |
+
that any problems introduced by others will not reflect on the original
|
48 |
+
authors' reputations.
|
49 |
+
|
50 |
+
Finally, any free program is threatened constantly by software
|
51 |
+
patents. We wish to avoid the danger that redistributors of a free
|
52 |
+
program will individually obtain patent licenses, in effect making the
|
53 |
+
program proprietary. To prevent this, we have made it clear that any
|
54 |
+
patent must be licensed for everyone's free use or not licensed at all.
|
55 |
+
|
56 |
+
The precise terms and conditions for copying, distribution and
|
57 |
+
modification follow.
|
58 |
+
|
59 |
+
GNU GENERAL PUBLIC LICENSE
|
60 |
+
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
61 |
+
|
62 |
+
0. This License applies to any program or other work which contains
|
63 |
+
a notice placed by the copyright holder saying it may be distributed
|
64 |
+
under the terms of this General Public License. The "Program", below,
|
65 |
+
refers to any such program or work, and a "work based on the Program"
|
66 |
+
means either the Program or any derivative work under copyright law:
|
67 |
+
that is to say, a work containing the Program or a portion of it,
|
68 |
+
either verbatim or with modifications and/or translated into another
|
69 |
+
language. (Hereinafter, translation is included without limitation in
|
70 |
+
the term "modification".) Each licensee is addressed as "you".
|
71 |
+
|
72 |
+
Activities other than copying, distribution and modification are not
|
73 |
+
covered by this License; they are outside its scope. The act of
|
74 |
+
running the Program is not restricted, and the output from the Program
|
75 |
+
is covered only if its contents constitute a work based on the
|
76 |
+
Program (independent of having been made by running the Program).
|
77 |
+
Whether that is true depends on what the Program does.
|
78 |
+
|
79 |
+
1. You may copy and distribute verbatim copies of the Program's
|
80 |
+
source code as you receive it, in any medium, provided that you
|
81 |
+
conspicuously and appropriately publish on each copy an appropriate
|
82 |
+
copyright notice and disclaimer of warranty; keep intact all the
|
83 |
+
notices that refer to this License and to the absence of any warranty;
|
84 |
+
and give any other recipients of the Program a copy of this License
|
85 |
+
along with the Program.
|
86 |
+
|
87 |
+
You may charge a fee for the physical act of transferring a copy, and
|
88 |
+
you may at your option offer warranty protection in exchange for a fee.
|
89 |
+
|
90 |
+
2. You may modify your copy or copies of the Program or any portion
|
91 |
+
of it, thus forming a work based on the Program, and copy and
|
92 |
+
distribute such modifications or work under the terms of Section 1
|
93 |
+
above, provided that you also meet all of these conditions:
|
94 |
+
|
95 |
+
a) You must cause the modified files to carry prominent notices
|
96 |
+
stating that you changed the files and the date of any change.
|
97 |
+
|
98 |
+
b) You must cause any work that you distribute or publish, that in
|
99 |
+
whole or in part contains or is derived from the Program or any
|
100 |
+
part thereof, to be licensed as a whole at no charge to all third
|
101 |
+
parties under the terms of this License.
|
102 |
+
|
103 |
+
c) If the modified program normally reads commands interactively
|
104 |
+
when run, you must cause it, when started running for such
|
105 |
+
interactive use in the most ordinary way, to print or display an
|
106 |
+
announcement including an appropriate copyright notice and a
|
107 |
+
notice that there is no warranty (or else, saying that you provide
|
108 |
+
a warranty) and that users may redistribute the program under
|
109 |
+
these conditions, and telling the user how to view a copy of this
|
110 |
+
License. (Exception: if the Program itself is interactive but
|
111 |
+
does not normally print such an announcement, your work based on
|
112 |
+
the Program is not required to print an announcement.)
|
113 |
+
|
114 |
+
These requirements apply to the modified work as a whole. If
|
115 |
+
identifiable sections of that work are not derived from the Program,
|
116 |
+
and can be reasonably considered independent and separate works in
|
117 |
+
themselves, then this License, and its terms, do not apply to those
|
118 |
+
sections when you distribute them as separate works. But when you
|
119 |
+
distribute the same sections as part of a whole which is a work based
|
120 |
+
on the Program, the distribution of the whole must be on the terms of
|
121 |
+
this License, whose permissions for other licensees extend to the
|
122 |
+
entire whole, and thus to each and every part regardless of who wrote it.
|
123 |
+
|
124 |
+
Thus, it is not the intent of this section to claim rights or contest
|
125 |
+
your rights to work written entirely by you; rather, the intent is to
|
126 |
+
exercise the right to control the distribution of derivative or
|
127 |
+
collective works based on the Program.
|
128 |
+
|
129 |
+
In addition, mere aggregation of another work not based on the Program
|
130 |
+
with the Program (or with a work based on the Program) on a volume of
|
131 |
+
a storage or distribution medium does not bring the other work under
|
132 |
+
the scope of this License.
|
133 |
+
|
134 |
+
3. You may copy and distribute the Program (or a work based on it,
|
135 |
+
under Section 2) in object code or executable form under the terms of
|
136 |
+
Sections 1 and 2 above provided that you also do one of the following:
|
137 |
+
|
138 |
+
a) Accompany it with the complete corresponding machine-readable
|
139 |
+
source code, which must be distributed under the terms of Sections
|
140 |
+
1 and 2 above on a medium customarily used for software interchange; or,
|
141 |
+
|
142 |
+
b) Accompany it with a written offer, valid for at least three
|
143 |
+
years, to give any third party, for a charge no more than your
|
144 |
+
cost of physically performing source distribution, a complete
|
145 |
+
machine-readable copy of the corresponding source code, to be
|
146 |
+
distributed under the terms of Sections 1 and 2 above on a medium
|
147 |
+
customarily used for software interchange; or,
|
148 |
+
|
149 |
+
c) Accompany it with the information you received as to the offer
|
150 |
+
to distribute corresponding source code. (This alternative is
|
151 |
+
allowed only for noncommercial distribution and only if you
|
152 |
+
received the program in object code or executable form with such
|
153 |
+
an offer, in accord with Subsection b above.)
|
154 |
+
|
155 |
+
The source code for a work means the preferred form of the work for
|
156 |
+
making modifications to it. For an executable work, complete source
|
157 |
+
code means all the source code for all modules it contains, plus any
|
158 |
+
associated interface definition files, plus the scripts used to
|
159 |
+
control compilation and installation of the executable. However, as a
|
160 |
+
special exception, the source code distributed need not include
|
161 |
+
anything that is normally distributed (in either source or binary
|
162 |
+
form) with the major components (compiler, kernel, and so on) of the
|
163 |
+
operating system on which the executable runs, unless that component
|
164 |
+
itself accompanies the executable.
|
165 |
+
|
166 |
+
If distribution of executable or object code is made by offering
|
167 |
+
access to copy from a designated place, then offering equivalent
|
168 |
+
access to copy the source code from the same place counts as
|
169 |
+
distribution of the source code, even though third parties are not
|
170 |
+
compelled to copy the source along with the object code.
|
171 |
+
|
172 |
+
4. You may not copy, modify, sublicense, or distribute the Program
|
173 |
+
except as expressly provided under this License. Any attempt
|
174 |
+
otherwise to copy, modify, sublicense or distribute the Program is
|
175 |
+
void, and will automatically terminate your rights under this License.
|
176 |
+
However, parties who have received copies, or rights, from you under
|
177 |
+
this License will not have their licenses terminated so long as such
|
178 |
+
parties remain in full compliance.
|
179 |
+
|
180 |
+
5. You are not required to accept this License, since you have not
|
181 |
+
signed it. However, nothing else grants you permission to modify or
|
182 |
+
distribute the Program or its derivative works. These actions are
|
183 |
+
prohibited by law if you do not accept this License. Therefore, by
|
184 |
+
modifying or distributing the Program (or any work based on the
|
185 |
+
Program), you indicate your acceptance of this License to do so, and
|
186 |
+
all its terms and conditions for copying, distributing or modifying
|
187 |
+
the Program or works based on it.
|
188 |
+
|
189 |
+
6. Each time you redistribute the Program (or any work based on the
|
190 |
+
Program), the recipient automatically receives a license from the
|
191 |
+
original licensor to copy, distribute or modify the Program subject to
|
192 |
+
these terms and conditions. You may not impose any further
|
193 |
+
restrictions on the recipients' exercise of the rights granted herein.
|
194 |
+
You are not responsible for enforcing compliance by third parties to
|
195 |
+
this License.
|
196 |
+
|
197 |
+
7. If, as a consequence of a court judgment or allegation of patent
|
198 |
+
infringement or for any other reason (not limited to patent issues),
|
199 |
+
conditions are imposed on you (whether by court order, agreement or
|
200 |
+
otherwise) that contradict the conditions of this License, they do not
|
201 |
+
excuse you from the conditions of this License. If you cannot
|
202 |
+
distribute so as to satisfy simultaneously your obligations under this
|
203 |
+
License and any other pertinent obligations, then as a consequence you
|
204 |
+
may not distribute the Program at all. For example, if a patent
|
205 |
+
license would not permit royalty-free redistribution of the Program by
|
206 |
+
all those who receive copies directly or indirectly through you, then
|
207 |
+
the only way you could satisfy both it and this License would be to
|
208 |
+
refrain entirely from distribution of the Program.
|
209 |
+
|
210 |
+
If any portion of this section is held invalid or unenforceable under
|
211 |
+
any particular circumstance, the balance of the section is intended to
|
212 |
+
apply and the section as a whole is intended to apply in other
|
213 |
+
circumstances.
|
214 |
+
|
215 |
+
It is not the purpose of this section to induce you to infringe any
|
216 |
+
patents or other property right claims or to contest validity of any
|
217 |
+
such claims; this section has the sole purpose of protecting the
|
218 |
+
integrity of the free software distribution system, which is
|
219 |
+
implemented by public license practices. Many people have made
|
220 |
+
generous contributions to the wide range of software distributed
|
221 |
+
through that system in reliance on consistent application of that
|
222 |
+
system; it is up to the author/donor to decide if he or she is willing
|
223 |
+
to distribute software through any other system and a licensee cannot
|
224 |
+
impose that choice.
|
225 |
+
|
226 |
+
This section is intended to make thoroughly clear what is believed to
|
227 |
+
be a consequence of the rest of this License.
|
228 |
+
|
229 |
+
8. If the distribution and/or use of the Program is restricted in
|
230 |
+
certain countries either by patents or by copyrighted interfaces, the
|
231 |
+
original copyright holder who places the Program under this License
|
232 |
+
may add an explicit geographical distribution limitation excluding
|
233 |
+
those countries, so that distribution is permitted only in or among
|
234 |
+
countries not thus excluded. In such case, this License incorporates
|
235 |
+
the limitation as if written in the body of this License.
|
236 |
+
|
237 |
+
9. The Free Software Foundation may publish revised and/or new versions
|
238 |
+
of the General Public License from time to time. Such new versions will
|
239 |
+
be similar in spirit to the present version, but may differ in detail to
|
240 |
+
address new problems or concerns.
|
241 |
+
|
242 |
+
Each version is given a distinguishing version number. If the Program
|
243 |
+
specifies a version number of this License which applies to it and "any
|
244 |
+
later version", you have the option of following the terms and conditions
|
245 |
+
either of that version or of any later version published by the Free
|
246 |
+
Software Foundation. If the Program does not specify a version number of
|
247 |
+
this License, you may choose any version ever published by the Free Software
|
248 |
+
Foundation.
|
249 |
+
|
250 |
+
10. If you wish to incorporate parts of the Program into other free
|
251 |
+
programs whose distribution conditions are different, write to the author
|
252 |
+
to ask for permission. For software which is copyrighted by the Free
|
253 |
+
Software Foundation, write to the Free Software Foundation; we sometimes
|
254 |
+
make exceptions for this. Our decision will be guided by the two goals
|
255 |
+
of preserving the free status of all derivatives of our free software and
|
256 |
+
of promoting the sharing and reuse of software generally.
|
257 |
+
|
258 |
+
NO WARRANTY
|
259 |
+
|
260 |
+
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
261 |
+
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
262 |
+
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
263 |
+
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
264 |
+
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
265 |
+
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
266 |
+
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
267 |
+
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
268 |
+
REPAIR OR CORRECTION.
|
269 |
+
|
270 |
+
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
271 |
+
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
272 |
+
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
273 |
+
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
274 |
+
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
275 |
+
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
276 |
+
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
277 |
+
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
278 |
+
POSSIBILITY OF SUCH DAMAGES.
|
279 |
+
|
280 |
+
END OF TERMS AND CONDITIONS
|
281 |
+
|
282 |
+
How to Apply These Terms to Your New Programs
|
283 |
+
|
284 |
+
If you develop a new program, and you want it to be of the greatest
|
285 |
+
possible use to the public, the best way to achieve this is to make it
|
286 |
+
free software which everyone can redistribute and change under these terms.
|
287 |
+
|
288 |
+
To do so, attach the following notices to the program. It is safest
|
289 |
+
to attach them to the start of each source file to most effectively
|
290 |
+
convey the exclusion of warranty; and each file should have at least
|
291 |
+
the "copyright" line and a pointer to where the full notice is found.
|
292 |
+
|
293 |
+
|
294 |
+
Copyright (C) 2018 David Decker
|
295 |
+
|
296 |
+
This program is free software; you can redistribute it and/or modify
|
297 |
+
it under the terms of the GNU General Public License as published by
|
298 |
+
the Free Software Foundation; either version 2 of the License, or
|
299 |
+
(at your option) any later version.
|
300 |
+
|
301 |
+
This program is distributed in the hope that it will be useful,
|
302 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
303 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
304 |
+
GNU General Public License for more details.
|
305 |
+
|
306 |
+
You should have received a copy of the GNU General Public License along
|
307 |
+
with this program; if not, write to the Free Software Foundation, Inc.,
|
308 |
+
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
309 |
+
|
310 |
+
Also add information on how to contact you by electronic and paper mail.
|
311 |
+
|
312 |
+
If the program is interactive, make it output a short notice like this
|
313 |
+
when it starts in an interactive mode:
|
314 |
+
|
315 |
+
Gnomovision version 69, Copyright (C) year name of author
|
316 |
+
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
317 |
+
This is free software, and you are welcome to redistribute it
|
318 |
+
under certain conditions; type `show c' for details.
|
319 |
+
|
320 |
+
The hypothetical commands `show w' and `show c' should show the appropriate
|
321 |
+
parts of the General Public License. Of course, the commands you use may
|
322 |
+
be called something other than `show w' and `show c'; they could even be
|
323 |
+
mouse-clicks or menu items--whatever suits your program.
|
324 |
+
|
325 |
+
You should also get your employer (if you work as a programmer) or your
|
326 |
+
school, if any, to sign a "copyright disclaimer" for the program, if
|
327 |
+
necessary. Here is a sample; alter the names:
|
328 |
+
|
329 |
+
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
330 |
+
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
331 |
+
|
332 |
+
{signature of Ty Coon}, 1 April 1989
|
333 |
+
Ty Coon, President of Vice
|
334 |
+
|
335 |
+
This General Public License does not permit incorporating your program into
|
336 |
+
proprietary programs. If your program is a subroutine library, you may
|
337 |
+
consider it more useful to permit linking proprietary applications with the
|
338 |
+
library. If this is what you want to do, use the GNU Lesser General
|
339 |
+
Public License instead of this License.
|
LICENSE.txt
ADDED
@@ -0,0 +1,339 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
GNU GENERAL PUBLIC LICENSE
|
2 |
+
Version 2, June 1991
|
3 |
+
|
4 |
+
Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
|
5 |
+
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
6 |
+
Everyone is permitted to copy and distribute verbatim copies
|
7 |
+
of this license document, but changing it is not allowed.
|
8 |
+
|
9 |
+
Preamble
|
10 |
+
|
11 |
+
The licenses for most software are designed to take away your
|
12 |
+
freedom to share and change it. By contrast, the GNU General Public
|
13 |
+
License is intended to guarantee your freedom to share and change free
|
14 |
+
software--to make sure the software is free for all its users. This
|
15 |
+
General Public License applies to most of the Free Software
|
16 |
+
Foundation's software and to any other program whose authors commit to
|
17 |
+
using it. (Some other Free Software Foundation software is covered by
|
18 |
+
the GNU Lesser General Public License instead.) You can apply it to
|
19 |
+
your programs, too.
|
20 |
+
|
21 |
+
When we speak of free software, we are referring to freedom, not
|
22 |
+
price. Our General Public Licenses are designed to make sure that you
|
23 |
+
have the freedom to distribute copies of free software (and charge for
|
24 |
+
this service if you wish), that you receive source code or can get it
|
25 |
+
if you want it, that you can change the software or use pieces of it
|
26 |
+
in new free programs; and that you know you can do these things.
|
27 |
+
|
28 |
+
To protect your rights, we need to make restrictions that forbid
|
29 |
+
anyone to deny you these rights or to ask you to surrender the rights.
|
30 |
+
These restrictions translate to certain responsibilities for you if you
|
31 |
+
distribute copies of the software, or if you modify it.
|
32 |
+
|
33 |
+
For example, if you distribute copies of such a program, whether
|
34 |
+
gratis or for a fee, you must give the recipients all the rights that
|
35 |
+
you have. You must make sure that they, too, receive or can get the
|
36 |
+
source code. And you must show them these terms so they know their
|
37 |
+
rights.
|
38 |
+
|
39 |
+
We protect your rights with two steps: (1) copyright the software, and
|
40 |
+
(2) offer you this license which gives you legal permission to copy,
|
41 |
+
distribute and/or modify the software.
|
42 |
+
|
43 |
+
Also, for each author's protection and ours, we want to make certain
|
44 |
+
that everyone understands that there is no warranty for this free
|
45 |
+
software. If the software is modified by someone else and passed on, we
|
46 |
+
want its recipients to know that what they have is not the original, so
|
47 |
+
that any problems introduced by others will not reflect on the original
|
48 |
+
authors' reputations.
|
49 |
+
|
50 |
+
Finally, any free program is threatened constantly by software
|
51 |
+
patents. We wish to avoid the danger that redistributors of a free
|
52 |
+
program will individually obtain patent licenses, in effect making the
|
53 |
+
program proprietary. To prevent this, we have made it clear that any
|
54 |
+
patent must be licensed for everyone's free use or not licensed at all.
|
55 |
+
|
56 |
+
The precise terms and conditions for copying, distribution and
|
57 |
+
modification follow.
|
58 |
+
|
59 |
+
GNU GENERAL PUBLIC LICENSE
|
60 |
+
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
61 |
+
|
62 |
+
0. This License applies to any program or other work which contains
|
63 |
+
a notice placed by the copyright holder saying it may be distributed
|
64 |
+
under the terms of this General Public License. The "Program", below,
|
65 |
+
refers to any such program or work, and a "work based on the Program"
|
66 |
+
means either the Program or any derivative work under copyright law:
|
67 |
+
that is to say, a work containing the Program or a portion of it,
|
68 |
+
either verbatim or with modifications and/or translated into another
|
69 |
+
language. (Hereinafter, translation is included without limitation in
|
70 |
+
the term "modification".) Each licensee is addressed as "you".
|
71 |
+
|
72 |
+
Activities other than copying, distribution and modification are not
|
73 |
+
covered by this License; they are outside its scope. The act of
|
74 |
+
running the Program is not restricted, and the output from the Program
|
75 |
+
is covered only if its contents constitute a work based on the
|
76 |
+
Program (independent of having been made by running the Program).
|
77 |
+
Whether that is true depends on what the Program does.
|
78 |
+
|
79 |
+
1. You may copy and distribute verbatim copies of the Program's
|
80 |
+
source code as you receive it, in any medium, provided that you
|
81 |
+
conspicuously and appropriately publish on each copy an appropriate
|
82 |
+
copyright notice and disclaimer of warranty; keep intact all the
|
83 |
+
notices that refer to this License and to the absence of any warranty;
|
84 |
+
and give any other recipients of the Program a copy of this License
|
85 |
+
along with the Program.
|
86 |
+
|
87 |
+
You may charge a fee for the physical act of transferring a copy, and
|
88 |
+
you may at your option offer warranty protection in exchange for a fee.
|
89 |
+
|
90 |
+
2. You may modify your copy or copies of the Program or any portion
|
91 |
+
of it, thus forming a work based on the Program, and copy and
|
92 |
+
distribute such modifications or work under the terms of Section 1
|
93 |
+
above, provided that you also meet all of these conditions:
|
94 |
+
|
95 |
+
a) You must cause the modified files to carry prominent notices
|
96 |
+
stating that you changed the files and the date of any change.
|
97 |
+
|
98 |
+
b) You must cause any work that you distribute or publish, that in
|
99 |
+
whole or in part contains or is derived from the Program or any
|
100 |
+
part thereof, to be licensed as a whole at no charge to all third
|
101 |
+
parties under the terms of this License.
|
102 |
+
|
103 |
+
c) If the modified program normally reads commands interactively
|
104 |
+
when run, you must cause it, when started running for such
|
105 |
+
interactive use in the most ordinary way, to print or display an
|
106 |
+
announcement including an appropriate copyright notice and a
|
107 |
+
notice that there is no warranty (or else, saying that you provide
|
108 |
+
a warranty) and that users may redistribute the program under
|
109 |
+
these conditions, and telling the user how to view a copy of this
|
110 |
+
License. (Exception: if the Program itself is interactive but
|
111 |
+
does not normally print such an announcement, your work based on
|
112 |
+
the Program is not required to print an announcement.)
|
113 |
+
|
114 |
+
These requirements apply to the modified work as a whole. If
|
115 |
+
identifiable sections of that work are not derived from the Program,
|
116 |
+
and can be reasonably considered independent and separate works in
|
117 |
+
themselves, then this License, and its terms, do not apply to those
|
118 |
+
sections when you distribute them as separate works. But when you
|
119 |
+
distribute the same sections as part of a whole which is a work based
|
120 |
+
on the Program, the distribution of the whole must be on the terms of
|
121 |
+
this License, whose permissions for other licensees extend to the
|
122 |
+
entire whole, and thus to each and every part regardless of who wrote it.
|
123 |
+
|
124 |
+
Thus, it is not the intent of this section to claim rights or contest
|
125 |
+
your rights to work written entirely by you; rather, the intent is to
|
126 |
+
exercise the right to control the distribution of derivative or
|
127 |
+
collective works based on the Program.
|
128 |
+
|
129 |
+
In addition, mere aggregation of another work not based on the Program
|
130 |
+
with the Program (or with a work based on the Program) on a volume of
|
131 |
+
a storage or distribution medium does not bring the other work under
|
132 |
+
the scope of this License.
|
133 |
+
|
134 |
+
3. You may copy and distribute the Program (or a work based on it,
|
135 |
+
under Section 2) in object code or executable form under the terms of
|
136 |
+
Sections 1 and 2 above provided that you also do one of the following:
|
137 |
+
|
138 |
+
a) Accompany it with the complete corresponding machine-readable
|
139 |
+
source code, which must be distributed under the terms of Sections
|
140 |
+
1 and 2 above on a medium customarily used for software interchange; or,
|
141 |
+
|
142 |
+
b) Accompany it with a written offer, valid for at least three
|
143 |
+
years, to give any third party, for a charge no more than your
|
144 |
+
cost of physically performing source distribution, a complete
|
145 |
+
machine-readable copy of the corresponding source code, to be
|
146 |
+
distributed under the terms of Sections 1 and 2 above on a medium
|
147 |
+
customarily used for software interchange; or,
|
148 |
+
|
149 |
+
c) Accompany it with the information you received as to the offer
|
150 |
+
to distribute corresponding source code. (This alternative is
|
151 |
+
allowed only for noncommercial distribution and only if you
|
152 |
+
received the program in object code or executable form with such
|
153 |
+
an offer, in accord with Subsection b above.)
|
154 |
+
|
155 |
+
The source code for a work means the preferred form of the work for
|
156 |
+
making modifications to it. For an executable work, complete source
|
157 |
+
code means all the source code for all modules it contains, plus any
|
158 |
+
associated interface definition files, plus the scripts used to
|
159 |
+
control compilation and installation of the executable. However, as a
|
160 |
+
special exception, the source code distributed need not include
|
161 |
+
anything that is normally distributed (in either source or binary
|
162 |
+
form) with the major components (compiler, kernel, and so on) of the
|
163 |
+
operating system on which the executable runs, unless that component
|
164 |
+
itself accompanies the executable.
|
165 |
+
|
166 |
+
If distribution of executable or object code is made by offering
|
167 |
+
access to copy from a designated place, then offering equivalent
|
168 |
+
access to copy the source code from the same place counts as
|
169 |
+
distribution of the source code, even though third parties are not
|
170 |
+
compelled to copy the source along with the object code.
|
171 |
+
|
172 |
+
4. You may not copy, modify, sublicense, or distribute the Program
|
173 |
+
except as expressly provided under this License. Any attempt
|
174 |
+
otherwise to copy, modify, sublicense or distribute the Program is
|
175 |
+
void, and will automatically terminate your rights under this License.
|
176 |
+
However, parties who have received copies, or rights, from you under
|
177 |
+
this License will not have their licenses terminated so long as such
|
178 |
+
parties remain in full compliance.
|
179 |
+
|
180 |
+
5. You are not required to accept this License, since you have not
|
181 |
+
signed it. However, nothing else grants you permission to modify or
|
182 |
+
distribute the Program or its derivative works. These actions are
|
183 |
+
prohibited by law if you do not accept this License. Therefore, by
|
184 |
+
modifying or distributing the Program (or any work based on the
|
185 |
+
Program), you indicate your acceptance of this License to do so, and
|
186 |
+
all its terms and conditions for copying, distributing or modifying
|
187 |
+
the Program or works based on it.
|
188 |
+
|
189 |
+
6. Each time you redistribute the Program (or any work based on the
|
190 |
+
Program), the recipient automatically receives a license from the
|
191 |
+
original licensor to copy, distribute or modify the Program subject to
|
192 |
+
these terms and conditions. You may not impose any further
|
193 |
+
restrictions on the recipients' exercise of the rights granted herein.
|
194 |
+
You are not responsible for enforcing compliance by third parties to
|
195 |
+
this License.
|
196 |
+
|
197 |
+
7. If, as a consequence of a court judgment or allegation of patent
|
198 |
+
infringement or for any other reason (not limited to patent issues),
|
199 |
+
conditions are imposed on you (whether by court order, agreement or
|
200 |
+
otherwise) that contradict the conditions of this License, they do not
|
201 |
+
excuse you from the conditions of this License. If you cannot
|
202 |
+
distribute so as to satisfy simultaneously your obligations under this
|
203 |
+
License and any other pertinent obligations, then as a consequence you
|
204 |
+
may not distribute the Program at all. For example, if a patent
|
205 |
+
license would not permit royalty-free redistribution of the Program by
|
206 |
+
all those who receive copies directly or indirectly through you, then
|
207 |
+
the only way you could satisfy both it and this License would be to
|
208 |
+
refrain entirely from distribution of the Program.
|
209 |
+
|
210 |
+
If any portion of this section is held invalid or unenforceable under
|
211 |
+
any particular circumstance, the balance of the section is intended to
|
212 |
+
apply and the section as a whole is intended to apply in other
|
213 |
+
circumstances.
|
214 |
+
|
215 |
+
It is not the purpose of this section to induce you to infringe any
|
216 |
+
patents or other property right claims or to contest validity of any
|
217 |
+
such claims; this section has the sole purpose of protecting the
|
218 |
+
integrity of the free software distribution system, which is
|
219 |
+
implemented by public license practices. Many people have made
|
220 |
+
generous contributions to the wide range of software distributed
|
221 |
+
through that system in reliance on consistent application of that
|
222 |
+
system; it is up to the author/donor to decide if he or she is willing
|
223 |
+
to distribute software through any other system and a licensee cannot
|
224 |
+
impose that choice.
|
225 |
+
|
226 |
+
This section is intended to make thoroughly clear what is believed to
|
227 |
+
be a consequence of the rest of this License.
|
228 |
+
|
229 |
+
8. If the distribution and/or use of the Program is restricted in
|
230 |
+
certain countries either by patents or by copyrighted interfaces, the
|
231 |
+
original copyright holder who places the Program under this License
|
232 |
+
may add an explicit geographical distribution limitation excluding
|
233 |
+
those countries, so that distribution is permitted only in or among
|
234 |
+
countries not thus excluded. In such case, this License incorporates
|
235 |
+
the limitation as if written in the body of this License.
|
236 |
+
|
237 |
+
9. The Free Software Foundation may publish revised and/or new versions
|
238 |
+
of the General Public License from time to time. Such new versions will
|
239 |
+
be similar in spirit to the present version, but may differ in detail to
|
240 |
+
address new problems or concerns.
|
241 |
+
|
242 |
+
Each version is given a distinguishing version number. If the Program
|
243 |
+
specifies a version number of this License which applies to it and "any
|
244 |
+
later version", you have the option of following the terms and conditions
|
245 |
+
either of that version or of any later version published by the Free
|
246 |
+
Software Foundation. If the Program does not specify a version number of
|
247 |
+
this License, you may choose any version ever published by the Free Software
|
248 |
+
Foundation.
|
249 |
+
|
250 |
+
10. If you wish to incorporate parts of the Program into other free
|
251 |
+
programs whose distribution conditions are different, write to the author
|
252 |
+
to ask for permission. For software which is copyrighted by the Free
|
253 |
+
Software Foundation, write to the Free Software Foundation; we sometimes
|
254 |
+
make exceptions for this. Our decision will be guided by the two goals
|
255 |
+
of preserving the free status of all derivatives of our free software and
|
256 |
+
of promoting the sharing and reuse of software generally.
|
257 |
+
|
258 |
+
NO WARRANTY
|
259 |
+
|
260 |
+
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
261 |
+
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
262 |
+
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
263 |
+
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
264 |
+
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
265 |
+
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
266 |
+
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
267 |
+
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
268 |
+
REPAIR OR CORRECTION.
|
269 |
+
|
270 |
+
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
271 |
+
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
272 |
+
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
273 |
+
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
274 |
+
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
275 |
+
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
276 |
+
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
277 |
+
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
278 |
+
POSSIBILITY OF SUCH DAMAGES.
|
279 |
+
|
280 |
+
END OF TERMS AND CONDITIONS
|
281 |
+
|
282 |
+
How to Apply These Terms to Your New Programs
|
283 |
+
|
284 |
+
If you develop a new program, and you want it to be of the greatest
|
285 |
+
possible use to the public, the best way to achieve this is to make it
|
286 |
+
free software which everyone can redistribute and change under these terms.
|
287 |
+
|
288 |
+
To do so, attach the following notices to the program. It is safest
|
289 |
+
to attach them to the start of each source file to most effectively
|
290 |
+
convey the exclusion of warranty; and each file should have at least
|
291 |
+
the "copyright" line and a pointer to where the full notice is found.
|
292 |
+
|
293 |
+
|
294 |
+
Copyright (C) 2018 David Decker
|
295 |
+
|
296 |
+
This program is free software; you can redistribute it and/or modify
|
297 |
+
it under the terms of the GNU General Public License as published by
|
298 |
+
the Free Software Foundation; either version 2 of the License, or
|
299 |
+
(at your option) any later version.
|
300 |
+
|
301 |
+
This program is distributed in the hope that it will be useful,
|
302 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
303 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
304 |
+
GNU General Public License for more details.
|
305 |
+
|
306 |
+
You should have received a copy of the GNU General Public License along
|
307 |
+
with this program; if not, write to the Free Software Foundation, Inc.,
|
308 |
+
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
309 |
+
|
310 |
+
Also add information on how to contact you by electronic and paper mail.
|
311 |
+
|
312 |
+
If the program is interactive, make it output a short notice like this
|
313 |
+
when it starts in an interactive mode:
|
314 |
+
|
315 |
+
Gnomovision version 69, Copyright (C) year name of author
|
316 |
+
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
317 |
+
This is free software, and you are welcome to redistribute it
|
318 |
+
under certain conditions; type `show c' for details.
|
319 |
+
|
320 |
+
The hypothetical commands `show w' and `show c' should show the appropriate
|
321 |
+
parts of the General Public License. Of course, the commands you use may
|
322 |
+
be called something other than `show w' and `show c'; they could even be
|
323 |
+
mouse-clicks or menu items--whatever suits your program.
|
324 |
+
|
325 |
+
You should also get your employer (if you work as a programmer) or your
|
326 |
+
school, if any, to sign a "copyright disclaimer" for the program, if
|
327 |
+
necessary. Here is a sample; alter the names:
|
328 |
+
|
329 |
+
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
330 |
+
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
331 |
+
|
332 |
+
{signature of Ty Coon}, 1 April 1989
|
333 |
+
Ty Coon, President of Vice
|
334 |
+
|
335 |
+
This General Public License does not permit incorporating your program into
|
336 |
+
proprietary programs. If your program is a subroutine library, you may
|
337 |
+
consider it more useful to permit linking proprietary applications with the
|
338 |
+
library. If this is what you want to do, use the GNU Lesser General
|
339 |
+
Public License instead of this License.
|
README.md
ADDED
@@ -0,0 +1,355 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Polylang Connect for Elementor - Language Switcher & Template Tweaks
|
2 |
+
**Contributors:** [daveshine](https://profiles.wordpress.org/daveshine), [p4fbradjohnson](https://profiles.wordpress.org/p4fbradjohnson), [deckerweb](https://profiles.wordpress.org/deckerweb), [wpautobahn](https://profiles.wordpress.org/wpautobahn)
|
3 |
+
**Donate link:** https://www.paypal.me/deckerweb
|
4 |
+
**Tags:** elementor, polylang, multilingual, language switcher, languages, templates, widget, finder, dynamic tags, deckerweb
|
5 |
+
**Requires at least:** 4.7
|
6 |
+
**Tested up to:** 5.3
|
7 |
+
**Requires PHP:** 5.6
|
8 |
+
**Stable tag:** 1.0.0
|
9 |
+
**License:** GPL-2.0-or-later
|
10 |
+
**License URI:** https://opensource.org/licenses/GPL-2.0
|
11 |
+
|
12 |
+
Connect Polylang with Elementor - show correct Templates, plus Elementor language switcher widget.
|
13 |
+
|
14 |
+
[<img src="https://raw.githubusercontent.com/deckerweb/connect-polylang-elementor/master/assets-repos/github-com/cpel-banner.png" data-canonical-src="https://raw.githubusercontent.com/deckerweb/connect-polylang-elementor/master/assets-repos/github-com/cpel-banner.png" width="772" height="250" />](https://wordpress.org/plugins/connect-polylang-elementor/)
|
15 |
+
|
16 |
+
|
17 |
+
## Description
|
18 |
+
|
19 |
+
|
20 |
+
Connect the Polylang multilingual plugin with Elementor Page Builder: This plugin will make Elementor and Polylang **show the correct language templates**, especially with Elementor Pro Theme Builder. Plus: native **Polylang Language Switcher Elementor widget**, new Dynamic Tags, and Polylang links added to the **Elementor Finder** feature.
|
21 |
+
|
22 |
+
[![Video of Plugin's Live Demo and Walkthrough](https://img.youtube.com/vi/tMmJ6sdMdxw/0.jpg)](https://www.youtube.com/watch?v=tMmJ6sdMdxw)
|
23 |
+
[**original video link**](https://www.youtube.com/watch?v=tMmJ6sdMdxw) *by plugin developer David Decker*
|
24 |
+
|
25 |
+
|
26 |
+
### What the Plugin Does
|
27 |
+
* **Shows the correct Template** (for different languages): Polylang Connect for Elementor allows Polylang to show the correct Elementor template to be displayed on the front end. Before this plugin, Elementor did not show the correct language (translated) template.
|
28 |
+
* Beyond enabling the Elementor post type in Polylang settings, plus assigning every post/page/template to a language, no further settings are needed for these template tweaks. It just works out of the box. All the heavy lifting happens under the hood.
|
29 |
+
* **Usage Example:**
|
30 |
+
* Make a header template in Elementor, set display conditions in Elementor panel, assign this to one language (English for example)
|
31 |
+
* Make a second header template in Elementor, set NO display conditions for this one (by assigning 2 of the same display conditions, you can create a conflict in Elementor), but assign to another Polylang language (Portuguese for example), meaning to link those languages/templates in Polylang.
|
32 |
+
* Result: when viewing in frontend the proper English content appears with the English header template, translated content in Portuguese appears with the Portuguese header template.
|
33 |
+
* Go on: The principle is always the same, now add German language, Spanish and so on ;-)
|
34 |
+
* [See **live demo** on co-author's own website](https://mariselaveludo.fashion/) // [Screenshot gallery](https://www.dropbox.com/sh/3i9tuh76etmhl1a/AADm_4L_aesp8Q9ss5NXuSiMa?dl=0)
|
35 |
+
|
36 |
+
|
37 |
+
### Plus: Even More Features
|
38 |
+
* **Polylang Language Switcher Widget**: A native Elementor Widget to easily build a nice language switcher menu and have **more styling options** for non-coders at hand
|
39 |
+
* **Elementor Finder integration**: Adds Polylang languages, admin settings links, plus support resources as quick jump links to the Elementor Finder feature (Elementor v2.3.0+) - so you can navigate more quickly from whereever you are
|
40 |
+
* **Dynamic Tags** in Elementor Pro: Polylang Language Names (all registered/active) / Current Language Name / Current Language Code / Current Language Flag (image) / Current Language URL
|
41 |
+
|
42 |
+
|
43 |
+
### Further Plugin Info
|
44 |
+
* More features might be added in the future.
|
45 |
+
* Community collaboration between David Decker and Brad Johnson, and more code coming from the Elementor/Polylang community
|
46 |
+
|
47 |
+
|
48 |
+
### Where to Get Support?
|
49 |
+
* [**Polylang User Community Group at Facebook**](https://www.facebook.com/groups/polylang.users/) - highly recommended for all users of this plugin!
|
50 |
+
* We monitor [the plugin's support forum](https://wordpress.org/support/plugin/connect-polylang-elementor) here on WordPress.org as well - but our preferred support channel is the FB community group
|
51 |
+
* **What is covered by our support?** - All regarding THIS plugin ("Polyang Connect for Elementor"), plus the relation to *Polylang*, *Elementor* and *Elementor Pro* of course.
|
52 |
+
* **What is NOT covered by support?** - Anything general regarding multilingual topics and WordPress. Explicitely we **DO NOT** offer any "WPML", "WPBakery" or "Visual Composer" support, and also not for your theme etc.!!!
|
53 |
+
|
54 |
+
|
55 |
+
### Translations
|
56 |
+
* English (default, `en_US`) - always included
|
57 |
+
* German (`de_DE`) - always included
|
58 |
+
* German formal (`de_DE_formal`) - always included
|
59 |
+
* `.pot` file (`connect-polylang-elementor.pot`) for translators is also always included :)
|
60 |
+
* Easy plugin translation platform with GlotPress tool: [Translate "Polylang Connect for Elementor"...](https://translate.wordpress.org/projects/wp-plugins/connect-polylang-elementor)
|
61 |
+
|
62 |
+
|
63 |
+
### Feedback
|
64 |
+
* I am open for your suggestions and feedback - Thank you for using or trying out one of my plugins!
|
65 |
+
* Join our [**Facebook User Community Support Group**](https://www.facebook.com/groups/deckerweb.wordpress.plugins/)
|
66 |
+
|
67 |
+
|
68 |
+
### My Other Plugins
|
69 |
+
* [**Toolbar Extras for Elementor - WordPress Admin Bar Enhanced**](https://wordpress.org/plugins/connect-polylang-elementor/)
|
70 |
+
* [**Toolbar Extras for Oxygen Builder - Add-On plugin**](https://wordpress.org/plugins/toolbar-extras-oxygen/)
|
71 |
+
* [**Toolbar Extras for MainWP Dashboard - Add-On plugin**](https://wordpress.org/plugins/toolbar-extras-mainwp/)
|
72 |
+
* [**Toolbar Extras for Give Donations (GiveWP) - Add-On plugin**](https://wordpress.org/plugins/toolbar-extras-givewp/)
|
73 |
+
* [**Builder Shortcode Extras – WordPress Shortcodes Collection to Save You Time**](https://wordpress.org/plugins/builder-shortcode-extras/)
|
74 |
+
* [**Builder Template Categories - for WordPress Page Builders**](https://wordpress.org/plugins/builder-template-categories/)
|
75 |
+
* [**Simple Download Manager for WP Document Revisions**](https://wordpress.org/plugins/wpdr-simple-downloads/)
|
76 |
+
* [Genesis What's New Info](https://wordpress.org/plugins/genesis-whats-new-info/)
|
77 |
+
* [Genesis Layout Extras](https://wordpress.org/plugins/genesis-layout-extras/)
|
78 |
+
* [Genesis Widgetized Not Found & 404](https://wordpress.org/plugins/genesis-widgetized-notfound/)
|
79 |
+
* [Genesis Extra Settings Transporter](https://wordpress.org/plugins/genesis-extra-settings-transporter/)
|
80 |
+
* [Genesis Widgetized Footer](https://wordpress.org/plugins/genesis-widgetized-footer/)
|
81 |
+
* [Genesis Widgetized Archive](https://wordpress.org/plugins/genesis-widgetized-archive/)
|
82 |
+
* [Multisite Toolbar Additions](https://wordpress.org/plugins/multisite-toolbar-additions/)
|
83 |
+
* [Cleaner Plugin Installer](https://wordpress.org/plugins/cleaner-plugin-installer/)
|
84 |
+
* [*My plugins newsletter*](https://eepurl.com/gbAUUn)
|
85 |
+
|
86 |
+
|
87 |
+
|
88 |
+
## Installation
|
89 |
+
|
90 |
+
|
91 |
+
### Minimum Requirements
|
92 |
+
|
93 |
+
* WordPress version 4.7 or higher
|
94 |
+
* [Elementor](https://wordpress.org/plugins/elementor/) and [Polylang](https://wordpress.org/plugins/polylang/) plugins - free versions from WordPress.org Plugin Directory
|
95 |
+
* **Optional:** *Elementor Pro* which is needed for Theme Building possibilities (Header templates etc.). This is a paid premium product by Elementor LTD, [available via elementor.com](https://toolbarextras.com/go/elementor-pro/)
|
96 |
+
* PHP version 5.6 or higher
|
97 |
+
* MySQL version 5.0 or higher
|
98 |
+
|
99 |
+
|
100 |
+
### We Recommend Your Host Supports at least:
|
101 |
+
|
102 |
+
* PHP version 7.2 or higher
|
103 |
+
* MySQL version 5.6 or higher / or MariaDB 10 or higher
|
104 |
+
|
105 |
+
|
106 |
+
### Installation
|
107 |
+
|
108 |
+
1. Install using the WordPress built-in Plugin installer (via **Plugins > Add New** - search for `connect polylang elementor`), or extract the ZIP file and drop the contents in the `wp-content/plugins/` directory of your WordPress installation.
|
109 |
+
2. Activate the plugin through the 'Plugins' menu in WordPress.
|
110 |
+
3. Go to **Polylang > Settings > Custom post types and Taxonomies**, enable the "My Templates" post type (Elementor)
|
111 |
+
4. Assign languages to your pages/ posts/ Elementor templates
|
112 |
+
5. For Elementor templates: set display conditions in Elementor for one template only (your main language is recommended) - templates in the other languages will then get loaded via this plugin magically! :)
|
113 |
+
6. Additionally use the native Elementor Widget: Polylang Switcher
|
114 |
+
|
115 |
+
|
116 |
+
|
117 |
+
## Frequently Asked Questions
|
118 |
+
|
119 |
+
|
120 |
+
### Where to get support?
|
121 |
+
|
122 |
+
At best in our [**Polylang User Community Group at Facebook**](https://www.facebook.com/groups/polylang.users/) - highly recommended for all users of this plugin!
|
123 |
+
|
124 |
+
Additionally, we also monitor [the plugin's support forum](https://wordpress.org/support/plugin/connect-polylang-elementor) here on WordPress.org as well - but our preferred support channel is the FB community group.
|
125 |
+
|
126 |
+
* **What is covered by our support?** - All things regarding THIS plugin ("Polyang Connect for Elementor"), plus the relation to *Polylang*, *Elementor* and *Elementor Pro* of course.
|
127 |
+
* **What is NOT covered by support?** - Anything general regarding multilingual topics and WordPress. Explicitely we **DO NOT** offer any "WPML", "WPBakery" or "Visual Composer" support, and also not for your theme etc.!!!
|
128 |
+
|
129 |
+
|
130 |
+
|
131 |
+
### Is there a live demo?
|
132 |
+
|
133 |
+
Yes, there is.
|
134 |
+
|
135 |
+
[**See live demo on co-author's own website**](https://mariselaveludo.fashion/)
|
136 |
+
|
137 |
+
[Plus: *bigger* versions of the above screenshots are in this external gallery ;-)](https://www.dropbox.com/sh/3i9tuh76etmhl1a/AADm_4L_aesp8Q9ss5NXuSiMa?dl=0)
|
138 |
+
|
139 |
+
|
140 |
+
|
141 |
+
### Recommended Workflow?
|
142 |
+
|
143 |
+
1. Setup Polylang at first, add at least TWO languages, one of them make your default language (in Polylang)
|
144 |
+
2. 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 :)
|
145 |
+
3. After that setup an Elementor Theme Builder template - asign it to your Polylang default language, apply conditions in Elementor
|
146 |
+
4. Next, setup a translation template for the template of 3.) -- asign your second Polylang language, DO NOT apply conditions in Elementor
|
147 |
+
|
148 |
+
|
149 |
+
|
150 |
+
### Recommended Polylang settings?
|
151 |
+
|
152 |
+
If you have issues with proper display of your translated templates, pages, content it is recommended to check your settings:
|
153 |
+
|
154 |
+
In Polylang Settings at `Languages > Settings > URL Modificatons` set to the following option: "The language is set from the directory name in pretty permalinks"
|
155 |
+
|
156 |
+
And in the case, all is working well with your current settings then please do not touch them. The above recommendation can be necessary for some users/ installs but not necessarily for all.
|
157 |
+
|
158 |
+
|
159 |
+
|
160 |
+
### Will this work with Elementor Popup Builder?
|
161 |
+
|
162 |
+
It most likely will work totally fine if you follow our recommended workflow (see above). If not, please ask in [our FB user group](https://www.facebook.com/groups/polylang.users/).
|
163 |
+
|
164 |
+
|
165 |
+
|
166 |
+
### Correct Elementor template does not show up?
|
167 |
+
|
168 |
+
Every page/ post/ template must be assigned a language for this to work. This is standard Polylang procedure but it should be noted in case "it doesnt work".
|
169 |
+
|
170 |
+
Also, for Elementor Templates, the post type must be enabled for Polylang support: Go to **Polylang > Settings > Custom post types and Taxonomies**, enable the "My Templates" post type (Elementor).
|
171 |
+
|
172 |
+
|
173 |
+
|
174 |
+
### Where is the Elementor Widget to be found?
|
175 |
+
|
176 |
+
It's in the widget category "General Elements". Plus, if Elementor Pro is active and you're editing a template, the widget additionally appears in the "Site" widget category.
|
177 |
+
|
178 |
+
*Always via search:* When searching for widgets type "polylang" or "languages" and it will show up immediately! ;-)
|
179 |
+
|
180 |
+
|
181 |
+
|
182 |
+
### Where is the plugin's settings page?
|
183 |
+
|
184 |
+
This plugin has NO settings page, as it does not need one. All it does works just under the hood. Activate the plugin. Done.
|
185 |
+
|
186 |
+
(If there will be settings needed in the future, we might add options in later plugin versions.)
|
187 |
+
|
188 |
+
|
189 |
+
|
190 |
+
### Is Polylang Pro supported?
|
191 |
+
|
192 |
+
Yes, it is! :)
|
193 |
+
All features of "Polylang Connect for Elementor" work with both, *Polylang* (free) AND *Polylang Pro* (Premium).
|
194 |
+
|
195 |
+
|
196 |
+
|
197 |
+
### Are custom flags supported?
|
198 |
+
|
199 |
+
In general, [custom flags](https://polylang.pro/doc/can-i-use-my-own-flags-for-the-language-switcher/) are supported in the Polylang Switcher Elementor widget and in the Dynamic Tag (Current Language Flag).
|
200 |
+
However, the default flags in Polylang are sized `16px` wide and `11px` high, this automatically applies to custom flags - as it is fully handled internally by Polylang.
|
201 |
+
|
202 |
+
To use a different size for custom flags we are trying to find ways to implement this for Elementor in future versions of this plugin.
|
203 |
+
|
204 |
+
|
205 |
+
|
206 |
+
### Typography and uppercase settings?
|
207 |
+
|
208 |
+
In the Polylang Switcher Elementor widget there are typography settings available for the Switcher menu items. These settings are CSS based of course, and applied "globally" to the various states they are for: normal, hover, active (current language). The available toggles for uppercase are done code-wise and therefore have a lower priority - this means the CSS always takes over, if wanted. That way you are most flexible with quick settings (toggles) but have all styling options at hand if needed.
|
209 |
+
|
210 |
+
|
211 |
+
|
212 |
+
### Is Elementor plugin needed?
|
213 |
+
|
214 |
+
Yes, it is. Otherwise this connect plugin won't do anything. Elementor is available for free on WordPress.org.
|
215 |
+
|
216 |
+
The Elementor Pro Add-On plugin is needed for the Theme Builder capabilities (for example Header templates), plus the feature of "Dynamic Tags". So it is highly recommended. But if it is not installed/ activated, the depending features from the connect plugin won't even load. So it is all optional.
|
217 |
+
|
218 |
+
The language switcher widget only needs Elementor base plugin to work ;-)
|
219 |
+
|
220 |
+
|
221 |
+
|
222 |
+
### Other recommended plugins for multilingual websites?
|
223 |
+
|
224 |
+
There are quite a few:
|
225 |
+
|
226 |
+
* [**Country Flags for Elementor**](https://wordpress.org/plugins/country-flags-for-elementor/) - Native Elementor widget
|
227 |
+
* [**Polylang Pro** (Premium)](https://polylang.pro/downloads/polylang-pro/) - The official premium version with more features, plus premium support
|
228 |
+
* [**Polylang for WooCommerce** (Premium)](https://polylang.pro/downloads/polylang-for-woocommerce/) - Makes WooCommerce multilingual - official Polylang Add-On
|
229 |
+
* [**Lingotek Translation**](https://wordpress.org/plugins/lingotek-translation/) - Native Polylang integration - Lingotek brings convenient cloud-based localization and translation for WordPress
|
230 |
+
* [**Integrate Gravity Forms + Polylang**](https://wordpress.org/plugins/integrate-gravity-forms-polylang/) - Add form titles, descriptions, field labels, etc. to Polylang string translations
|
231 |
+
* [**WPML to Polylang**](https://wordpress.org/plugins/wpml-to-polylang/) - From the Polylang developer himself
|
232 |
+
|
233 |
+
|
234 |
+
|
235 |
+
### More info on Translations?
|
236 |
+
|
237 |
+
* English - default, always included
|
238 |
+
* German (de_DE): Deutsch - immer dabei! :-)
|
239 |
+
* For custom and update-safe language files please upload them to `/wp-content/languages/connect-polylang-elementor/` (just create this folder) - This enables you to use fully custom translations that won't be overridden on plugin updates. Also, complete custom English wording is possible with that as well, just use a language file like `connect-polylang-elementor-en_US.mo/.po` to achieve that (for creating one see the following tools).
|
240 |
+
|
241 |
+
**Easy WordPress.org plugin translation platform with GlotPress platform:** [**Translate "Polylang Connect for Elementor"...**](https://translate.wordpress.org/projects/wp-plugins/connect-polylang-elementor)
|
242 |
+
|
243 |
+
*Note:* All my plugins are internationalized/ translateable by default. This is very important for all users worldwide. So please contribute your language to the plugin to make it even more useful. For translating and validating I recommend the awesome ["Poedit Editor"](https://www.poedit.net/), which works fine on Windows, macOS and Linux.
|
244 |
+
|
245 |
+
|
246 |
+
|
247 |
+
## Screenshots
|
248 |
+
|
249 |
+
|
250 |
+
### 1. Ensure that my templates is ticked in Polylang post types and Taxonomies. Although the plugin will automatically tick this for you 😊
|
251 |
+
![Ensure that my templates is ticked in Polylang post types and Taxonomies. Although the plugin will automatically tick this for you 😊](https://ps.w.org/connect-polylang-elementor/assets/screenshot-1.png)
|
252 |
+
|
253 |
+
|
254 |
+
### 2. Header Template in Elementor showing that they have both been translated
|
255 |
+
![Header Template in Elementor showing that they have both been translated](https://ps.w.org/connect-polylang-elementor/assets/screenshot-2.png)
|
256 |
+
|
257 |
+
|
258 |
+
### 3. Polylang Widget in Elementor under Site
|
259 |
+
![Polylang Widget in Elementor under Site](https://ps.w.org/connect-polylang-elementor/assets/screenshot-3.png)
|
260 |
+
|
261 |
+
|
262 |
+
### 4. Polylang Widget options in Elementor
|
263 |
+
![Polylang Widget options in Elementor](https://ps.w.org/connect-polylang-elementor/assets/screenshot-4.png)
|
264 |
+
|
265 |
+
|
266 |
+
### 5. Polylang Widget Styling Options in Elementor
|
267 |
+
![Polylang Widget Styling Options in Elementor](https://ps.w.org/connect-polylang-elementor/assets/screenshot-5.png)
|
268 |
+
|
269 |
+
|
270 |
+
### 6. Set your primary language display conditions for your primary language
|
271 |
+
![kkkk](https://ps.w.org/connect-polylang-elementor/assets/screenshot-6.png)
|
272 |
+
|
273 |
+
|
274 |
+
### 7. DO NOT SET A DISPLAY CONDITION FOR ANY OTHER LANGUAGE ---> Polylang will do this for you. Save without conditions
|
275 |
+
![Set your primary language display conditions for your primary language](https://ps.w.org/connect-polylang-elementor/assets/screenshot-7.png)
|
276 |
+
|
277 |
+
|
278 |
+
### 8. (1/2) Working language header templates on the front end. Styled by the widget. Previously this was not an option in Polylang. (other than editing the menu options) Polylang users could not display language codes but now they can 😉. Thanks to Polylang Connect for Elementor.
|
279 |
+
![(1/2) Working language header templates on the front end. Styled by the widget. Previously this was not an option in Polylang. (other than editing the menu options) Polylang users could not display language codes but now they can 😉. Thanks to Polylang Connect for Elementor.](https://ps.w.org/connect-polylang-elementor/assets/screenshot-8.png)
|
280 |
+
|
281 |
+
|
282 |
+
### 9. (2/2) Working language header templates on the front end. Styled by the widget. Previously this was not an option in Polylang. (other than editing the menu options) Polylang users could not display language codes but now they can 😉. Thanks to Polylang Connect for Elementor.
|
283 |
+
![(2/2) Working language header templates on the front end. Styled by the widget. Previously this was not an option in Polylang. (other than editing the menu options) Polylang users could not display language codes but now they can 😉. Thanks to Polylang Connect for Elementor.](https://ps.w.org/connect-polylang-elementor/assets/screenshot-9.png)
|
284 |
+
|
285 |
+
|
286 |
+
### 10. Recommended Polylang URL settings if you have issues with translated templates/ templates
|
287 |
+
![Recommended Polylang URL settings if you have issues with translated templates/ templates](https://ps.w.org/connect-polylang-elementor/assets/screenshot-10.png)
|
288 |
+
|
289 |
+
|
290 |
+
|
291 |
+
|
292 |
+
## Changelog
|
293 |
+
|
294 |
+
|
295 |
+
### 1.0.0 - 2018-11-28
|
296 |
+
* Official public release on WordPress.org
|
297 |
+
|
298 |
+
|
299 |
+
### 0.9.1 - 2018-11-27
|
300 |
+
* *First Release Candidate (RC) version*
|
301 |
+
* New: Automatic enabling of Elementor My Templates post type for Polylang support
|
302 |
+
* Tweak: Code improvements throughout
|
303 |
+
* Tweak: Inline documentation and PHP doc improvements
|
304 |
+
|
305 |
+
|
306 |
+
### 0.9.0 - 2018-11-26
|
307 |
+
* *Second beta version*
|
308 |
+
* New: More settings for Polylang Switcher widget
|
309 |
+
* Tweak: Improved Dynamic Tags additions
|
310 |
+
* Tweak: Improved Elementor Finder integration
|
311 |
+
|
312 |
+
|
313 |
+
### 0.8.0 - 2018-11-25
|
314 |
+
* *First beta version*
|
315 |
+
* New: Added native Elementor Widget - Polylang Language Switcher
|
316 |
+
* New: Added Dynamic Tags for Polylang (requires Elementor Pro)
|
317 |
+
|
318 |
+
|
319 |
+
### 0.7.0 - 2018-11-24
|
320 |
+
* *Second alpha version*
|
321 |
+
* New: Added Elementor Finder integration for Polylang plugin links and resources
|
322 |
+
* New: Make plugin translateable - added full German translations
|
323 |
+
* New: Added Readme file, plus `composer.json`
|
324 |
+
* New: First public alpha release on GitHub
|
325 |
+
|
326 |
+
|
327 |
+
### 0.5.0 - 2018-10-30
|
328 |
+
* *Plugin idea by Brad*
|
329 |
+
* *First alpha version by David*
|
330 |
+
* New: Template tweaks work in form of plugin code - coding standards improvements
|
331 |
+
|
332 |
+
|
333 |
+
|
334 |
+
## Upgrade Notice
|
335 |
+
|
336 |
+
|
337 |
+
### 1.0.0
|
338 |
+
Just released into the wild.
|
339 |
+
|
340 |
+
|
341 |
+
## Donate
|
342 |
+
Enjoy using *Polylang Connect for Elementor*? [**Please consider making a donation**](https://www.paypal.me/deckerweb) to support the project's continued development.
|
343 |
+
|
344 |
+
|
345 |
+
## Credits
|
346 |
+
Credit where credit is due. The following code/ classes, all licensed under the GPL. Note: Credit is also referenced in the code doc block inline where used.
|
347 |
+
|
348 |
+
* Polylang Switcher class (Elementor Widget) and its CSS based on widget from plugin "Language Switcher for Elementor" by Solitweb (GPLv2 or later)
|
349 |
+
|
350 |
+
|
351 |
+
## Plugin Links
|
352 |
+
* [Translations (WP GlotPress Platform)](https://translate.wordpress.org/projects/wp-plugins/connect-polylang-elementor)
|
353 |
+
* [User support forums](https://wordpress.org/support/plugin/connect-polylang-elementor)
|
354 |
+
* [Polylang Users Facebook Group](https://www.facebook.com/groups/polylang.users/)
|
355 |
+
* [DECKERWEB WordPress Plugins Facebook Group](https://www.facebook.com/groups/deckerweb.wordpress.plugins/)
|
assets/css/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Do not modify the files in this folder.
|
4 |
+
*/
|
assets/css/plsfe-editor.css
ADDED
@@ -0,0 +1,264 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* // assets/css/plsfe-editor
|
3 |
+
* @package Polylang Connect for Elementor - Assets
|
4 |
+
* @since 1.0.0
|
5 |
+
*
|
6 |
+
* Note: Code based on Widget class of plugin "Language Switcher for Elementor",
|
7 |
+
* licensed under GPLv2 or later.
|
8 |
+
* @author Solitweb
|
9 |
+
* @link https://solitweb.be/
|
10 |
+
*/
|
11 |
+
|
12 |
+
.plsfe-switcher .plsfe-menu {
|
13 |
+
list-style: none;
|
14 |
+
margin: 0;
|
15 |
+
padding: 0;
|
16 |
+
line-height: normal;
|
17 |
+
-webkit-tap-highlight-color: transparent;
|
18 |
+
}
|
19 |
+
|
20 |
+
.plsfe-layout-vertical .plsfe-switcher {
|
21 |
+
display: block;
|
22 |
+
}
|
23 |
+
|
24 |
+
.plsfe-layout-horizontal .plsfe-switcher {
|
25 |
+
display: -webkit-box;
|
26 |
+
display: -webkit-flex;
|
27 |
+
display: -ms-flexbox;
|
28 |
+
display: flex;
|
29 |
+
}
|
30 |
+
|
31 |
+
.plsfe-layout-vertical .plsfe-menu {
|
32 |
+
display: block;
|
33 |
+
}
|
34 |
+
|
35 |
+
.plsfe-layout-horizontal .plsfe-menu {
|
36 |
+
display: -webkit-box;
|
37 |
+
display: -webkit-flex;
|
38 |
+
display: -ms-flexbox;
|
39 |
+
display: flex;
|
40 |
+
-webkit-flex-wrap: wrap;
|
41 |
+
-ms-flex-wrap: wrap;
|
42 |
+
flex-wrap: wrap;
|
43 |
+
}
|
44 |
+
|
45 |
+
|
46 |
+
@media (max-width: 1024px) {
|
47 |
+
|
48 |
+
.plsfe-tablet-layout-vertical .plsfe-switcher {
|
49 |
+
display: block;
|
50 |
+
}
|
51 |
+
.plsfe-tablet-layout-horizontal .plsfe-switcher {
|
52 |
+
display: -webkit-box;
|
53 |
+
display: -webkit-flex;
|
54 |
+
display: -ms-flexbox;
|
55 |
+
display: flex;
|
56 |
+
}
|
57 |
+
.plsfe-tablet-layout-vertical .plsfe-menu {
|
58 |
+
display: block;
|
59 |
+
}
|
60 |
+
.plsfe-tablet-layout-horizontal .plsfe-menu {
|
61 |
+
display: -webkit-box;
|
62 |
+
display: -webkit-flex;
|
63 |
+
display: -ms-flexbox;
|
64 |
+
display: flex;
|
65 |
+
-webkit-flex-wrap: wrap;
|
66 |
+
-ms-flex-wrap: wrap;
|
67 |
+
flex-wrap: wrap;
|
68 |
+
}
|
69 |
+
|
70 |
+
}
|
71 |
+
|
72 |
+
@media (max-width: 767px) {
|
73 |
+
|
74 |
+
.plsfe-mobile-layout-vertical .plsfe-switcher {
|
75 |
+
display: block;
|
76 |
+
}
|
77 |
+
|
78 |
+
.plsfe-mobile-layout-horizontal .plsfe-switcher {
|
79 |
+
display: -webkit-box;
|
80 |
+
display: -webkit-flex;
|
81 |
+
display: -ms-flexbox;
|
82 |
+
display: flex;
|
83 |
+
}
|
84 |
+
|
85 |
+
.plsfe-mobile-layout-vertical .plsfe-menu {
|
86 |
+
display: block;
|
87 |
+
}
|
88 |
+
|
89 |
+
.plsfe-mobile-layout-horizontal .plsfe-menu {
|
90 |
+
display: -webkit-box;
|
91 |
+
display: -webkit-flex;
|
92 |
+
display: -ms-flexbox;
|
93 |
+
display: flex;
|
94 |
+
-webkit-flex-wrap: wrap;
|
95 |
+
-ms-flex-wrap: wrap;
|
96 |
+
flex-wrap: wrap;
|
97 |
+
}
|
98 |
+
|
99 |
+
}
|
100 |
+
|
101 |
+
.plsfe-switcher a {
|
102 |
+
display: -webkit-box;
|
103 |
+
display: -webkit-flex;
|
104 |
+
display: -ms-flexbox;
|
105 |
+
display: flex;
|
106 |
+
-webkit-box-align: center;
|
107 |
+
-webkit-align-items: center;
|
108 |
+
-ms-flex-align: center;
|
109 |
+
align-items: center;
|
110 |
+
}
|
111 |
+
|
112 |
+
.plsfe-align-right .plsfe-menu {
|
113 |
+
margin-left: auto;
|
114 |
+
margin-right: 0;
|
115 |
+
}
|
116 |
+
|
117 |
+
.plsfe-align-right .plsfe-menu > li > a {
|
118 |
+
-webkit-box-pack: end;
|
119 |
+
-webkit-justify-content: flex-end;
|
120 |
+
-ms-flex-pack: end;
|
121 |
+
justify-content: flex-end;
|
122 |
+
}
|
123 |
+
|
124 |
+
.plsfe-align-left .plsfe-menu {
|
125 |
+
margin-left: 0;
|
126 |
+
margin-right: auto;
|
127 |
+
}
|
128 |
+
|
129 |
+
.plsfe-align-left .plsfe-menu > li > a {
|
130 |
+
-webkit-box-pack: start;
|
131 |
+
-webkit-justify-content: flex-start;
|
132 |
+
-ms-flex-pack: start;
|
133 |
+
justify-content: flex-start;
|
134 |
+
}
|
135 |
+
|
136 |
+
.plsfe-align-center .plsfe-menu {
|
137 |
+
margin-left: auto;
|
138 |
+
margin-right: auto;
|
139 |
+
}
|
140 |
+
|
141 |
+
.plsfe-tablet-align-center.plsfe-tablet-layout-vertical .plsfe-menu > li > a {
|
142 |
+
-webkit-box-pack: center;
|
143 |
+
-webkit-justify-content: center;
|
144 |
+
-ms-flex-pack: center;
|
145 |
+
justify-content: center;
|
146 |
+
}
|
147 |
+
|
148 |
+
.plsfe-align-justify .plsfe-menu {
|
149 |
+
width: 100%;
|
150 |
+
}
|
151 |
+
|
152 |
+
.plsfe-align-justify .plsfe-menu > li {
|
153 |
+
-webkit-box-flex: 1;
|
154 |
+
-webkit-flex-grow: 1;
|
155 |
+
-ms-flex-positive: 1;
|
156 |
+
flex-grow: 1;
|
157 |
+
}
|
158 |
+
|
159 |
+
.plsfe-align-justify .plsfe-menu > li > a {
|
160 |
+
-webkit-box-pack: center;
|
161 |
+
-webkit-justify-content: center;
|
162 |
+
-ms-flex-pack: center;
|
163 |
+
justify-content: center;
|
164 |
+
}
|
165 |
+
|
166 |
+
@media (max-width: 1024px) {
|
167 |
+
|
168 |
+
.plsfe-tablet-align-right .plsfe-menu {
|
169 |
+
margin-left: auto;
|
170 |
+
margin-right: 0;
|
171 |
+
}
|
172 |
+
.plsfe-tablet-align-right .plsfe-menu > li > a {
|
173 |
+
-webkit-box-pack: end;
|
174 |
+
-webkit-justify-content: flex-end;
|
175 |
+
-ms-flex-pack: end;
|
176 |
+
justify-content: flex-end;
|
177 |
+
}
|
178 |
+
.plsfe-tablet-align-left .plsfe-menu {
|
179 |
+
margin-left: 0;
|
180 |
+
margin-right: auto;
|
181 |
+
}
|
182 |
+
.plsfe-tablet-align-left .plsfe-menu > li > a {
|
183 |
+
-webkit-box-pack: start;
|
184 |
+
-webkit-justify-content: flex-start;
|
185 |
+
-ms-flex-pack: start;
|
186 |
+
justify-content: flex-start;
|
187 |
+
}
|
188 |
+
.plsfe-tablet-align-center .plsfe-menu {
|
189 |
+
margin-left: auto;
|
190 |
+
margin-right: auto;
|
191 |
+
}
|
192 |
+
.plsfe-tablet-align-center .plsfe-menu > li > a {
|
193 |
+
-webkit-box-pack: center;
|
194 |
+
-webkit-justify-content: center;
|
195 |
+
-ms-flex-pack: center;
|
196 |
+
justify-content: center;
|
197 |
+
}
|
198 |
+
.plsfe-tablet-align-justify .plsfe-menu {
|
199 |
+
width: 100%;
|
200 |
+
}
|
201 |
+
.plsfe-tablet-align-justify .plsfe-menu > li {
|
202 |
+
-webkit-box-flex: 1;
|
203 |
+
-webkit-flex-grow: 1;
|
204 |
+
-ms-flex-positive: 1;
|
205 |
+
flex-grow: 1;
|
206 |
+
}
|
207 |
+
.plsfe-tablet-align-justify .plsfe-menu > li > a {
|
208 |
+
-webkit-box-pack: center;
|
209 |
+
-webkit-justify-content: center;
|
210 |
+
-ms-flex-pack: center;
|
211 |
+
justify-content: center;
|
212 |
+
}
|
213 |
+
|
214 |
+
}
|
215 |
+
|
216 |
+
@media (max-width: 767px) {
|
217 |
+
|
218 |
+
.plsfe-mobile-align-right .plsfe-menu {
|
219 |
+
margin-left: auto;
|
220 |
+
margin-right: 0;
|
221 |
+
}
|
222 |
+
.plsfe-mobile-align-right .plsfe-menu > li > a {
|
223 |
+
-webkit-box-pack: end;
|
224 |
+
-webkit-justify-content: flex-end;
|
225 |
+
-ms-flex-pack: end;
|
226 |
+
justify-content: flex-end;
|
227 |
+
}
|
228 |
+
.plsfe-mobile-align-left .plsfe-menu {
|
229 |
+
margin-left: 0;
|
230 |
+
margin-right: auto;
|
231 |
+
}
|
232 |
+
.plsfe-mobile-align-left .plsfe-menu > li > a {
|
233 |
+
-webkit-box-pack: start;
|
234 |
+
-webkit-justify-content: flex-start;
|
235 |
+
-ms-flex-pack: start;
|
236 |
+
justify-content: flex-start;
|
237 |
+
}
|
238 |
+
.plsfe-mobile-align-center .plsfe-menu {
|
239 |
+
margin-left: auto;
|
240 |
+
margin-right: auto;
|
241 |
+
}
|
242 |
+
.plsfe-mobile-align-center .plsfe-menu > li > a {
|
243 |
+
-webkit-box-pack: center;
|
244 |
+
-webkit-justify-content: center;
|
245 |
+
-ms-flex-pack: center;
|
246 |
+
justify-content: center;
|
247 |
+
}
|
248 |
+
.plsfe-mobile-align-justify .plsfe-menu {
|
249 |
+
width: 100%;
|
250 |
+
}
|
251 |
+
.plsfe-mobile-align-justify .plsfe-menu > li {
|
252 |
+
-webkit-box-flex: 1;
|
253 |
+
-webkit-flex-grow: 1;
|
254 |
+
-ms-flex-positive: 1;
|
255 |
+
flex-grow: 1;
|
256 |
+
}
|
257 |
+
.plsfe-mobile-align-justify .plsfe-menu > li > a {
|
258 |
+
-webkit-box-pack: center;
|
259 |
+
-webkit-justify-content: center;
|
260 |
+
-ms-flex-pack: center;
|
261 |
+
justify-content: center;
|
262 |
+
}
|
263 |
+
|
264 |
+
}
|
assets/css/plsfe-editor.min.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
.plsfe-switcher .plsfe-menu{list-style:none;margin:0;padding:0;line-height:normal;-webkit-tap-highlight-color:transparent}.plsfe-layout-vertical .plsfe-switcher{display:block}.plsfe-layout-horizontal .plsfe-switcher{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.plsfe-layout-vertical .plsfe-menu{display:block}.plsfe-layout-horizontal .plsfe-menu{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}@media (max-width:1024px){.plsfe-tablet-layout-vertical .plsfe-switcher{display:block}.plsfe-tablet-layout-horizontal .plsfe-switcher{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.plsfe-tablet-layout-vertical .plsfe-menu{display:block}.plsfe-tablet-layout-horizontal .plsfe-menu{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}}@media (max-width:767px){.plsfe-mobile-layout-vertical .plsfe-switcher{display:block}.plsfe-mobile-layout-horizontal .plsfe-switcher{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.plsfe-mobile-layout-vertical .plsfe-menu{display:block}.plsfe-mobile-layout-horizontal .plsfe-menu{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}}.plsfe-switcher a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.plsfe-align-right .plsfe-menu{margin-left:auto;margin-right:0}.plsfe-align-right .plsfe-menu>li>a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.plsfe-align-left .plsfe-menu{margin-left:0;margin-right:auto}.plsfe-align-left .plsfe-menu>li>a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.plsfe-align-center .plsfe-menu{margin-left:auto;margin-right:auto}.plsfe-tablet-align-center.plsfe-tablet-layout-vertical .plsfe-menu>li>a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.plsfe-align-justify .plsfe-menu{width:100%}.plsfe-align-justify .plsfe-menu>li{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.plsfe-align-justify .plsfe-menu>li>a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}@media (max-width:1024px){.plsfe-tablet-align-right .plsfe-menu{margin-left:auto;margin-right:0}.plsfe-tablet-align-right .plsfe-menu>li>a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.plsfe-tablet-align-left .plsfe-menu{margin-left:0;margin-right:auto}.plsfe-tablet-align-left .plsfe-menu>li>a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.plsfe-tablet-align-center .plsfe-menu{margin-left:auto;margin-right:auto}.plsfe-tablet-align-center .plsfe-menu>li>a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.plsfe-tablet-align-justify .plsfe-menu{width:100%}.plsfe-tablet-align-justify .plsfe-menu>li{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.plsfe-tablet-align-justify .plsfe-menu>li>a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}}@media (max-width:767px){.plsfe-mobile-align-right .plsfe-menu{margin-left:auto;margin-right:0}.plsfe-mobile-align-right .plsfe-menu>li>a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.plsfe-mobile-align-left .plsfe-menu{margin-left:0;margin-right:auto}.plsfe-mobile-align-left .plsfe-menu>li>a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.plsfe-mobile-align-center .plsfe-menu{margin-left:auto;margin-right:auto}.plsfe-mobile-align-center .plsfe-menu>li>a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.plsfe-mobile-align-justify .plsfe-menu{width:100%}.plsfe-mobile-align-justify .plsfe-menu>li{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.plsfe-mobile-align-justify .plsfe-menu>li>a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}}
|
assets/css/plsfe-frontend.css
ADDED
@@ -0,0 +1,279 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* // assets/css/plsfe-frontend
|
3 |
+
* @package Polylang Connect for Elementor - Assets
|
4 |
+
* @since 1.0.0
|
5 |
+
*
|
6 |
+
* Note: Code based on Widget class of plugin "Language Switcher for Elementor",
|
7 |
+
* licensed under GPLv2 or later.
|
8 |
+
* @author Solitweb
|
9 |
+
* @link https://solitweb.be/
|
10 |
+
*/
|
11 |
+
|
12 |
+
.plsfe-switcher .plsfe-menu {
|
13 |
+
list-style: none;
|
14 |
+
margin: 0;
|
15 |
+
padding: 0;
|
16 |
+
line-height: normal;
|
17 |
+
-webkit-tap-highlight-color: transparent;
|
18 |
+
}
|
19 |
+
|
20 |
+
.plsfe-layout-vertical .plsfe-switcher {
|
21 |
+
display: block;
|
22 |
+
}
|
23 |
+
|
24 |
+
.plsfe-layout-horizontal .plsfe-switcher {
|
25 |
+
display: -webkit-box;
|
26 |
+
display: -webkit-flex;
|
27 |
+
display: -ms-flexbox;
|
28 |
+
display: flex;
|
29 |
+
}
|
30 |
+
|
31 |
+
.plsfe-layout-vertical .plsfe-menu {
|
32 |
+
display: block;
|
33 |
+
}
|
34 |
+
|
35 |
+
.plsfe-layout-horizontal .plsfe-menu {
|
36 |
+
display: -webkit-box;
|
37 |
+
display: -webkit-flex;
|
38 |
+
display: -ms-flexbox;
|
39 |
+
display: flex;
|
40 |
+
-webkit-flex-wrap: wrap;
|
41 |
+
-ms-flex-wrap: wrap;
|
42 |
+
flex-wrap: wrap;
|
43 |
+
}
|
44 |
+
|
45 |
+
@media (max-width: 1024px) {
|
46 |
+
|
47 |
+
.plsfe-tablet-layout-vertical .plsfe-switcher {
|
48 |
+
display: block;
|
49 |
+
}
|
50 |
+
|
51 |
+
.plsfe-tablet-layout-horizontal .plsfe-switcher {
|
52 |
+
display: -webkit-box;
|
53 |
+
display: -webkit-flex;
|
54 |
+
display: -ms-flexbox;
|
55 |
+
display: flex;
|
56 |
+
}
|
57 |
+
|
58 |
+
.plsfe-tablet-layout-vertical .plsfe-menu {
|
59 |
+
display: block;
|
60 |
+
}
|
61 |
+
|
62 |
+
.plsfe-tablet-layout-horizontal .plsfe-menu {
|
63 |
+
display: -webkit-box;
|
64 |
+
display: -webkit-flex;
|
65 |
+
display: -ms-flexbox;
|
66 |
+
display: flex;
|
67 |
+
-webkit-flex-wrap: wrap;
|
68 |
+
-ms-flex-wrap: wrap;
|
69 |
+
flex-wrap: wrap;
|
70 |
+
}
|
71 |
+
|
72 |
+
}
|
73 |
+
|
74 |
+
@media (max-width: 767px) {
|
75 |
+
|
76 |
+
.plsfe-mobile-layout-vertical .plsfe-switcher {
|
77 |
+
display: block;
|
78 |
+
}
|
79 |
+
.plsfe-mobile-layout-horizontal .plsfe-switcher {
|
80 |
+
display: -webkit-box;
|
81 |
+
display: -webkit-flex;
|
82 |
+
display: -ms-flexbox;
|
83 |
+
display: flex;
|
84 |
+
}
|
85 |
+
.plsfe-mobile-layout-vertical .plsfe-menu {
|
86 |
+
display: block;
|
87 |
+
}
|
88 |
+
.plsfe-mobile-layout-horizontal .plsfe-menu {
|
89 |
+
display: -webkit-box;
|
90 |
+
display: -webkit-flex;
|
91 |
+
display: -ms-flexbox;
|
92 |
+
display: flex;
|
93 |
+
-webkit-flex-wrap: wrap;
|
94 |
+
-ms-flex-wrap: wrap;
|
95 |
+
flex-wrap: wrap;
|
96 |
+
}
|
97 |
+
|
98 |
+
}
|
99 |
+
|
100 |
+
.plsfe-switcher a {
|
101 |
+
display: -webkit-box;
|
102 |
+
display: -webkit-flex;
|
103 |
+
display: -ms-flexbox;
|
104 |
+
display: flex;
|
105 |
+
-webkit-box-align: center;
|
106 |
+
-webkit-align-items: center;
|
107 |
+
-ms-flex-align: center;
|
108 |
+
align-items: center;
|
109 |
+
}
|
110 |
+
|
111 |
+
.plsfe-align-right .plsfe-menu {
|
112 |
+
margin-left: auto;
|
113 |
+
margin-right: 0;
|
114 |
+
}
|
115 |
+
|
116 |
+
.plsfe-align-right .plsfe-menu > li > a {
|
117 |
+
-webkit-box-pack: end;
|
118 |
+
-webkit-justify-content: flex-end;
|
119 |
+
-ms-flex-pack: end;
|
120 |
+
justify-content: flex-end;
|
121 |
+
}
|
122 |
+
|
123 |
+
.plsfe-align-left .plsfe-menu {
|
124 |
+
margin-left: 0;
|
125 |
+
margin-right: auto;
|
126 |
+
}
|
127 |
+
|
128 |
+
.plsfe-align-left .plsfe-menu > li > a {
|
129 |
+
-webkit-box-pack: start;
|
130 |
+
-webkit-justify-content: flex-start;
|
131 |
+
-ms-flex-pack: start;
|
132 |
+
justify-content: flex-start;
|
133 |
+
}
|
134 |
+
|
135 |
+
.plsfe-align-center .plsfe-menu {
|
136 |
+
margin-left: auto;
|
137 |
+
margin-right: auto;
|
138 |
+
}
|
139 |
+
|
140 |
+
.plsfe-tablet-align-center.plsfe-tablet-layout-vertical .plsfe-menu > li > a {
|
141 |
+
-webkit-box-pack: center;
|
142 |
+
-webkit-justify-content: center;
|
143 |
+
-ms-flex-pack: center;
|
144 |
+
justify-content: center;
|
145 |
+
}
|
146 |
+
|
147 |
+
.plsfe-align-justify .plsfe-menu {
|
148 |
+
width: 100%;
|
149 |
+
}
|
150 |
+
|
151 |
+
.plsfe-align-justify .plsfe-menu > li {
|
152 |
+
-webkit-box-flex: 1;
|
153 |
+
-webkit-flex-grow: 1;
|
154 |
+
-ms-flex-positive: 1;
|
155 |
+
flex-grow: 1;
|
156 |
+
}
|
157 |
+
|
158 |
+
.plsfe-align-justify .plsfe-menu > li > a {
|
159 |
+
-webkit-box-pack: center;
|
160 |
+
-webkit-justify-content: center;
|
161 |
+
-ms-flex-pack: center;
|
162 |
+
justify-content: center;
|
163 |
+
}
|
164 |
+
|
165 |
+
@media (max-width: 1024px) {
|
166 |
+
|
167 |
+
.plsfe-tablet-align-right .plsfe-menu {
|
168 |
+
margin-left: auto;
|
169 |
+
margin-right: 0;
|
170 |
+
}
|
171 |
+
|
172 |
+
.plsfe-tablet-align-right .plsfe-menu > li > a {
|
173 |
+
-webkit-box-pack: end;
|
174 |
+
-webkit-justify-content: flex-end;
|
175 |
+
-ms-flex-pack: end;
|
176 |
+
justify-content: flex-end;
|
177 |
+
}
|
178 |
+
|
179 |
+
.plsfe-tablet-align-left .plsfe-menu {
|
180 |
+
margin-left: 0;
|
181 |
+
margin-right: auto;
|
182 |
+
}
|
183 |
+
|
184 |
+
.plsfe-tablet-align-left .plsfe-menu > li > a {
|
185 |
+
-webkit-box-pack: start;
|
186 |
+
-webkit-justify-content: flex-start;
|
187 |
+
-ms-flex-pack: start;
|
188 |
+
justify-content: flex-start;
|
189 |
+
}
|
190 |
+
|
191 |
+
.plsfe-tablet-align-center .plsfe-menu {
|
192 |
+
margin-left: auto;
|
193 |
+
margin-right: auto;
|
194 |
+
}
|
195 |
+
|
196 |
+
.plsfe-tablet-align-center .plsfe-menu > li > a {
|
197 |
+
-webkit-box-pack: center;
|
198 |
+
-webkit-justify-content: center;
|
199 |
+
-ms-flex-pack: center;
|
200 |
+
justify-content: center;
|
201 |
+
}
|
202 |
+
|
203 |
+
.plsfe-tablet-align-justify .plsfe-menu {
|
204 |
+
width: 100%;
|
205 |
+
}
|
206 |
+
|
207 |
+
.plsfe-tablet-align-justify .plsfe-menu > li {
|
208 |
+
-webkit-box-flex: 1;
|
209 |
+
-webkit-flex-grow: 1;
|
210 |
+
-ms-flex-positive: 1;
|
211 |
+
flex-grow: 1;
|
212 |
+
}
|
213 |
+
|
214 |
+
.plsfe-tablet-align-justify .plsfe-menu > li > a {
|
215 |
+
-webkit-box-pack: center;
|
216 |
+
-webkit-justify-content: center;
|
217 |
+
-ms-flex-pack: center;
|
218 |
+
justify-content: center;
|
219 |
+
}
|
220 |
+
|
221 |
+
}
|
222 |
+
|
223 |
+
@media (max-width: 767px) {
|
224 |
+
|
225 |
+
.plsfe-mobile-align-right .plsfe-menu {
|
226 |
+
margin-left: auto;
|
227 |
+
margin-right: 0;
|
228 |
+
}
|
229 |
+
|
230 |
+
.plsfe-mobile-align-right .plsfe-menu > li > a {
|
231 |
+
-webkit-box-pack: end;
|
232 |
+
-webkit-justify-content: flex-end;
|
233 |
+
-ms-flex-pack: end;
|
234 |
+
justify-content: flex-end;
|
235 |
+
}
|
236 |
+
|
237 |
+
.plsfe-mobile-align-left .plsfe-menu {
|
238 |
+
margin-left: 0;
|
239 |
+
margin-right: auto;
|
240 |
+
}
|
241 |
+
|
242 |
+
.plsfe-mobile-align-left .plsfe-menu > li > a {
|
243 |
+
-webkit-box-pack: start;
|
244 |
+
-webkit-justify-content: flex-start;
|
245 |
+
-ms-flex-pack: start;
|
246 |
+
justify-content: flex-start;
|
247 |
+
}
|
248 |
+
|
249 |
+
.plsfe-mobile-align-center .plsfe-menu {
|
250 |
+
margin-left: auto;
|
251 |
+
margin-right: auto;
|
252 |
+
}
|
253 |
+
|
254 |
+
.plsfe-mobile-align-center .plsfe-menu > li > a {
|
255 |
+
-webkit-box-pack: center;
|
256 |
+
-webkit-justify-content: center;
|
257 |
+
-ms-flex-pack: center;
|
258 |
+
justify-content: center;
|
259 |
+
}
|
260 |
+
|
261 |
+
.plsfe-mobile-align-justify .plsfe-menu {
|
262 |
+
width: 100%;
|
263 |
+
}
|
264 |
+
|
265 |
+
.plsfe-mobile-align-justify .plsfe-menu > li {
|
266 |
+
-webkit-box-flex: 1;
|
267 |
+
-webkit-flex-grow: 1;
|
268 |
+
-ms-flex-positive: 1;
|
269 |
+
flex-grow: 1;
|
270 |
+
}
|
271 |
+
|
272 |
+
.plsfe-mobile-align-justify .plsfe-menu > li > a {
|
273 |
+
-webkit-box-pack: center;
|
274 |
+
-webkit-justify-content: center;
|
275 |
+
-ms-flex-pack: center;
|
276 |
+
justify-content: center;
|
277 |
+
}
|
278 |
+
|
279 |
+
}
|
assets/css/plsfe-frontend.min.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
.plsfe-switcher .plsfe-menu{list-style:none;margin:0;padding:0;line-height:normal;-webkit-tap-highlight-color:transparent}.plsfe-layout-vertical .plsfe-switcher{display:block}.plsfe-layout-horizontal .plsfe-switcher{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.plsfe-layout-vertical .plsfe-menu{display:block}.plsfe-layout-horizontal .plsfe-menu{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}@media (max-width:1024px){.plsfe-tablet-layout-vertical .plsfe-switcher{display:block}.plsfe-tablet-layout-horizontal .plsfe-switcher{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.plsfe-tablet-layout-vertical .plsfe-menu{display:block}.plsfe-tablet-layout-horizontal .plsfe-menu{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}}@media (max-width:767px){.plsfe-mobile-layout-vertical .plsfe-switcher{display:block}.plsfe-mobile-layout-horizontal .plsfe-switcher{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.plsfe-mobile-layout-vertical .plsfe-menu{display:block}.plsfe-mobile-layout-horizontal .plsfe-menu{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}}.plsfe-switcher a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.plsfe-align-right .plsfe-menu{margin-left:auto;margin-right:0}.plsfe-align-right .plsfe-menu>li>a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.plsfe-align-left .plsfe-menu{margin-left:0;margin-right:auto}.plsfe-align-left .plsfe-menu>li>a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.plsfe-align-center .plsfe-menu{margin-left:auto;margin-right:auto}.plsfe-tablet-align-center.plsfe-tablet-layout-vertical .plsfe-menu>li>a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.plsfe-align-justify .plsfe-menu{width:100%}.plsfe-align-justify .plsfe-menu>li{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.plsfe-align-justify .plsfe-menu>li>a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}@media (max-width:1024px){.plsfe-tablet-align-right .plsfe-menu{margin-left:auto;margin-right:0}.plsfe-tablet-align-right .plsfe-menu>li>a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.plsfe-tablet-align-left .plsfe-menu{margin-left:0;margin-right:auto}.plsfe-tablet-align-left .plsfe-menu>li>a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.plsfe-tablet-align-center .plsfe-menu{margin-left:auto;margin-right:auto}.plsfe-tablet-align-center .plsfe-menu>li>a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.plsfe-tablet-align-justify .plsfe-menu{width:100%}.plsfe-tablet-align-justify .plsfe-menu>li{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.plsfe-tablet-align-justify .plsfe-menu>li>a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}}@media (max-width:767px){.plsfe-mobile-align-right .plsfe-menu{margin-left:auto;margin-right:0}.plsfe-mobile-align-right .plsfe-menu>li>a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.plsfe-mobile-align-left .plsfe-menu{margin-left:0;margin-right:auto}.plsfe-mobile-align-left .plsfe-menu>li>a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.plsfe-mobile-align-center .plsfe-menu{margin-left:auto;margin-right:auto}.plsfe-mobile-align-center .plsfe-menu>li>a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.plsfe-mobile-align-justify .plsfe-menu{width:100%}.plsfe-mobile-align-justify .plsfe-menu>li{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.plsfe-mobile-align-justify .plsfe-menu>li>a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}}
|
assets/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Do not modify the files in this folder.
|
4 |
+
*/
|
composer.json
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "deckerweb/connect-polylang-elementor",
|
3 |
+
"description": "WordPress plugin that connects the Polylang multilingual plugin with Elementor Page Builder: It helps showing the correct language templates, especially with Elementor Pro Theme Builder. Plus: native Polylang Language Switcher Elementor widget, new Dynamic Tags, and Polylang links added to the Elementor Finder feature.",
|
4 |
+
"keywords": ["elementor", "polylang", "multilingual", "languages", "templates", "conditions"],
|
5 |
+
"type": "wordpress-plugin",
|
6 |
+
"homepage": "https://github.com/deckerweb/connect-polylang-elementor",
|
7 |
+
"license": "GPL-2.0-or-later",
|
8 |
+
"authors": [
|
9 |
+
{
|
10 |
+
"name": "David Decker",
|
11 |
+
"homepage": "https://deckerweb.de/",
|
12 |
+
"role": "Developer"
|
13 |
+
}
|
14 |
+
],
|
15 |
+
"support": {
|
16 |
+
"issues": "https://github.com/deckerweb/connect-polylang-elementor/issues",
|
17 |
+
"source": "https://github.com/deckerweb/connect-polylang-elementor"
|
18 |
+
},
|
19 |
+
"require": {
|
20 |
+
"php": ">=5.6"
|
21 |
+
}
|
22 |
+
}
|
connect-polylang-elementor.php
ADDED
@@ -0,0 +1,153 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php # -*- coding: utf-8 -*-
|
2 |
+
/**
|
3 |
+
* Main plugin file.
|
4 |
+
* @package Polylang Connect for Elementor
|
5 |
+
* @author David Decker
|
6 |
+
* @copyright Copyright (c) 2018-2019, David Decker - DECKERWEB
|
7 |
+
* @license GPL-2.0-or-later
|
8 |
+
* @link https://deckerweb.de/twitter
|
9 |
+
*
|
10 |
+
* @wordpress-plugin
|
11 |
+
* Plugin Name: Polylang Connect for Elementor
|
12 |
+
* Plugin URI: https://github.com/deckerweb/connect-polylang-elementor
|
13 |
+
* Description: Connect the Polylang multilingual plugin with Elementor Page Builder: This plugin will make Elementor and Polylang show the correct language templates, especially with Elementor Pro Theme Builder. Plus: native Polylang Language Switcher Elementor widget, new Dynamic Tags, and Polylang links added to the Elementor Finder feature.
|
14 |
+
* Version: 1.0.0
|
15 |
+
* Author: David Decker - DECKERWEB
|
16 |
+
* Author URI: https://polyglotwp.com/
|
17 |
+
* License: GPL-2.0-or-later
|
18 |
+
* License URI: https://opensource.org/licenses/GPL-2.0
|
19 |
+
* Text Domain: connect-polylang-elementor
|
20 |
+
* Domain Path: /languages/
|
21 |
+
* Requires WP: 4.7
|
22 |
+
* Requires PHP: 5.6
|
23 |
+
* GitHub Plugin URI: https://github.com/deckerweb/connect-polylang-elementor
|
24 |
+
* GitHub Branch: master
|
25 |
+
*
|
26 |
+
* Copyright (c) 2018-2019 David Decker - DECKERWEB
|
27 |
+
*/
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Exit if called directly.
|
31 |
+
*/
|
32 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
33 |
+
exit( 'Sorry, you are not allowed to access this file directly.' );
|
34 |
+
}
|
35 |
+
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Setting constants.
|
39 |
+
*
|
40 |
+
* @since 1.0.0
|
41 |
+
*/
|
42 |
+
/** Plugin version */
|
43 |
+
define( 'CPEL_PLUGIN_VERSION', '1.0.0' );
|
44 |
+
|
45 |
+
/** File */
|
46 |
+
define( 'CPEL__FILE__', __FILE__ );
|
47 |
+
|
48 |
+
/** Plugin directory */
|
49 |
+
define( 'CPEL_PLUGIN_DIR', trailingslashit( dirname( __FILE__ ) ) );
|
50 |
+
|
51 |
+
/** Plugin base directory */
|
52 |
+
define( 'CPEL_PLUGIN_BASEDIR', trailingslashit( dirname( plugin_basename( __FILE__ ) ) ) );
|
53 |
+
|
54 |
+
|
55 |
+
add_action( 'plugins_loaded', 'ddw_cpel_load_translations', 10 );
|
56 |
+
/**
|
57 |
+
* Load the text domain for translation of the plugin.
|
58 |
+
*
|
59 |
+
* @since 1.0.0
|
60 |
+
*
|
61 |
+
* @uses get_user_locale()
|
62 |
+
* @uses load_textdomain() Load translations first from WP_LANG_DIR sub folder.
|
63 |
+
* @uses load_plugin_textdomain() Additionally load default translations from
|
64 |
+
* plugin folder (default).
|
65 |
+
*/
|
66 |
+
function ddw_cpel_load_translations() {
|
67 |
+
|
68 |
+
/** Set unique textdomain string */
|
69 |
+
$cpel_textdomain = 'connect-polylang-elementor';
|
70 |
+
|
71 |
+
/** The 'plugin_locale' filter is also used by default in load_plugin_textdomain() */
|
72 |
+
$locale = esc_attr(
|
73 |
+
apply_filters(
|
74 |
+
'plugin_locale',
|
75 |
+
get_user_locale(),
|
76 |
+
$cpel_textdomain
|
77 |
+
)
|
78 |
+
);
|
79 |
+
|
80 |
+
/**
|
81 |
+
* WordPress languages directory
|
82 |
+
* Will default to: wp-content/languages/connect-polylang-elementor/connect-polylang-elementor-{locale}.mo
|
83 |
+
*/
|
84 |
+
$cpel_wp_lang_dir = trailingslashit( WP_LANG_DIR ) . trailingslashit( $cpel_textdomain ) . $cpel_textdomain . '-' . $locale . '.mo';
|
85 |
+
|
86 |
+
/** Translations: First, look in WordPress' "languages" folder = custom & update-safe! */
|
87 |
+
load_textdomain(
|
88 |
+
$cpel_textdomain,
|
89 |
+
$cpel_wp_lang_dir
|
90 |
+
);
|
91 |
+
|
92 |
+
/** Translations: Secondly, look in 'wp-content/languages/plugins/' for the proper .mo file (= default) */
|
93 |
+
load_plugin_textdomain(
|
94 |
+
$cpel_textdomain,
|
95 |
+
FALSE,
|
96 |
+
CPEL_PLUGIN_BASEDIR . 'languages'
|
97 |
+
);
|
98 |
+
|
99 |
+
} // end function
|
100 |
+
|
101 |
+
|
102 |
+
/** Include global functions */
|
103 |
+
require_once( CPEL_PLUGIN_DIR . 'includes/functions-global.php' );
|
104 |
+
|
105 |
+
/** Include (global) conditionals functions */
|
106 |
+
require_once( CPEL_PLUGIN_DIR . 'includes/functions-conditionals.php' );
|
107 |
+
|
108 |
+
|
109 |
+
add_action( 'plugins_loaded', 'ddw_cpel_setup_plugin', 20 );
|
110 |
+
/**
|
111 |
+
* Finally setup the plugin for the main tasks.
|
112 |
+
*
|
113 |
+
* @since 1.0.0
|
114 |
+
*/
|
115 |
+
function ddw_cpel_setup_plugin() {
|
116 |
+
|
117 |
+
/** Load features that require Polylang & Elementor active */
|
118 |
+
if ( ddw_cpel_is_polylang_active() && ddw_cpel_is_elementor_active() ) {
|
119 |
+
|
120 |
+
require_once( CPEL_PLUGIN_DIR . 'modules/finder/manager.php' );
|
121 |
+
require_once( CPEL_PLUGIN_DIR . 'modules/widgets/register-widget.php' );
|
122 |
+
|
123 |
+
new \DDW_Connect_Polylang_Elementor\Register_Widget();
|
124 |
+
|
125 |
+
/** Load features that require Elementor Pro */
|
126 |
+
if ( ddw_cpel_is_elementor_pro_active() ) {
|
127 |
+
require_once( CPEL_PLUGIN_DIR . 'modules/connect/tweaks-polylang-elementor.php' );
|
128 |
+
require_once( CPEL_PLUGIN_DIR . 'modules/dynamic-tags/manager.php' );
|
129 |
+
}
|
130 |
+
|
131 |
+
} // end if
|
132 |
+
|
133 |
+
/** Include admin helper functions */
|
134 |
+
if ( is_admin() ) {
|
135 |
+
require_once( CPEL_PLUGIN_DIR . 'includes/admin-extras.php' );
|
136 |
+
}
|
137 |
+
|
138 |
+
/** Add links to Settings and Menu pages to Plugins page */
|
139 |
+
if ( ( is_admin() || is_network_admin() ) ) {
|
140 |
+
|
141 |
+
add_filter(
|
142 |
+
'plugin_action_links_' . plugin_basename( __FILE__ ),
|
143 |
+
'ddw_cpel_custom_settings_links'
|
144 |
+
);
|
145 |
+
|
146 |
+
add_filter(
|
147 |
+
'network_admin_plugin_action_links_' . plugin_basename( __FILE__ ),
|
148 |
+
'ddw_cpel_custom_settings_links'
|
149 |
+
);
|
150 |
+
|
151 |
+
} // end if
|
152 |
+
|
153 |
+
} // end function
|
includes/admin-extras.php
ADDED
@@ -0,0 +1,212 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// includes/admin-extras
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Prevent direct access to this file.
|
7 |
+
*
|
8 |
+
* @since 1.0.0
|
9 |
+
*/
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
+
exit( 'Sorry, you are not allowed to access this file directly.' );
|
12 |
+
}
|
13 |
+
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Add custom settings link to Plugins page.
|
17 |
+
*
|
18 |
+
* @since 1.0.0
|
19 |
+
*
|
20 |
+
* @param array $cpel_links (Default) Array of plugin action links.
|
21 |
+
* @return strings $cpel_links Settings & Menu Admin links.
|
22 |
+
*/
|
23 |
+
function ddw_cpel_custom_settings_links( $cpel_links ) {
|
24 |
+
|
25 |
+
$link_polylang = '';
|
26 |
+
$templates_link = '';
|
27 |
+
|
28 |
+
/** Add settings link only if user has permission */
|
29 |
+
if ( current_user_can( 'edit_theme_options' ) ) {
|
30 |
+
|
31 |
+
/** Polylang settings link */
|
32 |
+
if ( ddw_cpel_is_polylang_active() ) {
|
33 |
+
|
34 |
+
$link_polylang = sprintf(
|
35 |
+
'<a class="dashicons-before dashicons-translation" href="%1$s" title="%2$s">%3$s</a>',
|
36 |
+
esc_url( admin_url( 'admin.php?page=mlang' ) ),
|
37 |
+
/* translators: Title attribute for Polylang settings link */
|
38 |
+
esc_html__( 'Polylang Languages Setup', 'connect-polylang-elementor' ),
|
39 |
+
esc_attr_x( 'Languages', 'Link title attribute for Polylang settings', 'connect-polylang-elementor' )
|
40 |
+
);
|
41 |
+
|
42 |
+
} // end if
|
43 |
+
|
44 |
+
/** Elementor My Templates link */
|
45 |
+
if ( ddw_cpel_is_elementor_active() ) {
|
46 |
+
|
47 |
+
$link_elementor = sprintf(
|
48 |
+
'<a class="dashicons-before dashicons-admin-page" href="%1$s" title="%2$s">%3$s</a>',
|
49 |
+
esc_url( admin_url( 'edit.php?post_type=elementor_library' ) ),
|
50 |
+
/* translators: Title attribute for Elementor My Templates link */
|
51 |
+
esc_html__( 'Elementor My Templates', 'connect-polylang-elementor' ),
|
52 |
+
esc_attr_x( 'Templates', 'Link title attribute for Elementor My Templates', 'connect-polylang-elementor' )
|
53 |
+
);
|
54 |
+
|
55 |
+
} // end if
|
56 |
+
|
57 |
+
} // end if
|
58 |
+
|
59 |
+
/** Set the order of the links */
|
60 |
+
if ( ! empty( $link_polylang ) && ! empty( $link_elementor ) ) {
|
61 |
+
array_unshift( $cpel_links, $link_polylang, $link_elementor );
|
62 |
+
}
|
63 |
+
|
64 |
+
/** Display plugin settings links */
|
65 |
+
return apply_filters(
|
66 |
+
'cpel/filter/plugins_page/settings_links',
|
67 |
+
$cpel_links,
|
68 |
+
$link_polylang, // additional param
|
69 |
+
$link_elementor // additional param
|
70 |
+
);
|
71 |
+
|
72 |
+
} // end function
|
73 |
+
|
74 |
+
|
75 |
+
add_filter( 'plugin_row_meta', 'ddw_cpel_plugin_links', 10, 2 );
|
76 |
+
/**
|
77 |
+
* Add various support links to Plugins page.
|
78 |
+
*
|
79 |
+
* @since 1.0.0
|
80 |
+
*
|
81 |
+
* @uses ddw_cpel_get_info_link()
|
82 |
+
*
|
83 |
+
* @param array $cpel_links (Default) Array of plugin meta links
|
84 |
+
* @param string $cpel_file Path of base plugin file
|
85 |
+
* @return array $cpel_links Array of plugin link strings to build HTML markup.
|
86 |
+
*/
|
87 |
+
function ddw_cpel_plugin_links( $cpel_links, $cpel_file ) {
|
88 |
+
|
89 |
+
/** Capability check */
|
90 |
+
if ( ! current_user_can( 'install_plugins' ) ) {
|
91 |
+
return $cpel_links;
|
92 |
+
}
|
93 |
+
|
94 |
+
/** List additional links only for this plugin */
|
95 |
+
if ( $cpel_file === CPEL_PLUGIN_BASEDIR . 'connect-polylang-elementor.php' ) {
|
96 |
+
|
97 |
+
?>
|
98 |
+
<style type="text/css">
|
99 |
+
tr[data-plugin="<?php echo $cpel_file; ?>"] .plugin-version-author-uri a.dashicons-before:before {
|
100 |
+
font-size: 17px;
|
101 |
+
margin-right: 2px;
|
102 |
+
opacity: .85;
|
103 |
+
vertical-align: sub;
|
104 |
+
}
|
105 |
+
</style>
|
106 |
+
<?php
|
107 |
+
|
108 |
+
/* translators: Plugins page listing */
|
109 |
+
$cpel_links[] = ddw_cpel_get_info_link( 'url_wporg_forum', esc_html_x( 'Support', 'Plugins page listing', 'connect-polylang-elementor' ), 'dashicons-before dashicons-sos' );
|
110 |
+
|
111 |
+
/* translators: Plugins page listing */
|
112 |
+
$cpel_links[] = ddw_cpel_get_info_link( 'url_fb_group', esc_html_x( 'Facebook Group', 'Plugins page listing', 'connect-polylang-elementor' ), 'dashicons-before dashicons-facebook' );
|
113 |
+
|
114 |
+
/* translators: Plugins page listing */
|
115 |
+
$cpel_links[] = ddw_cpel_get_info_link( 'url_translate', esc_html_x( 'Translations', 'Plugins page listing', 'connect-polylang-elementor' ), 'dashicons-before dashicons-translation' );
|
116 |
+
|
117 |
+
/* translators: Plugins page listing */
|
118 |
+
$cpel_links[] = ddw_cpel_get_info_link( 'url_donate', esc_html_x( 'Donate', 'Plugins page listing', 'connect-polylang-elementor' ), 'button-primary dashicons-before dashicons-thumbs-up' );
|
119 |
+
|
120 |
+
} // end if plugin links
|
121 |
+
|
122 |
+
/** Output the links */
|
123 |
+
return apply_filters(
|
124 |
+
'cpel/filter/plugins_page/more_links',
|
125 |
+
$cpel_links
|
126 |
+
);
|
127 |
+
|
128 |
+
} // end function
|
129 |
+
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Inline CSS fix for Plugins page update messages.
|
133 |
+
*
|
134 |
+
* @since 1.0.0
|
135 |
+
*
|
136 |
+
* @see ddw_cpel_plugin_update_message()
|
137 |
+
* @see ddw_cpel_multisite_subsite_plugin_update_message()
|
138 |
+
*/
|
139 |
+
function ddw_cpel_plugin_update_message_style_tweak() {
|
140 |
+
|
141 |
+
?>
|
142 |
+
<style type="text/css">
|
143 |
+
.cpel-update-message p:before,
|
144 |
+
.update-message.notice p:empty {
|
145 |
+
display: none !important;
|
146 |
+
}
|
147 |
+
</style>
|
148 |
+
<?php
|
149 |
+
|
150 |
+
} // end function
|
151 |
+
|
152 |
+
|
153 |
+
add_action( 'in_plugin_update_message-' . CPEL_PLUGIN_BASEDIR . 'connect-polylang-elementor.php', 'ddw_cpel_plugin_update_message', 10, 2 );
|
154 |
+
/**
|
155 |
+
* On Plugins page add visible upgrade/update notice in the overview table.
|
156 |
+
* Note: This action fires for regular single site installs, and for Multisite
|
157 |
+
* installs where the plugin is activated Network-wide.
|
158 |
+
*
|
159 |
+
* @since 1.0.0
|
160 |
+
*
|
161 |
+
* @param object $data
|
162 |
+
* @param object $response
|
163 |
+
* @return string Echoed string and markup for the plugin's upgrade/update
|
164 |
+
* notice.
|
165 |
+
*/
|
166 |
+
function ddw_cpel_plugin_update_message( $data, $response ) {
|
167 |
+
|
168 |
+
if ( isset( $data[ 'upgrade_notice' ] ) ) {
|
169 |
+
|
170 |
+
ddw_cpel_plugin_update_message_style_tweak();
|
171 |
+
|
172 |
+
printf(
|
173 |
+
'<div class="update-message cpel-update-message">%s</div>',
|
174 |
+
wpautop( $data[ 'upgrade_notice' ] )
|
175 |
+
);
|
176 |
+
|
177 |
+
} // end if
|
178 |
+
|
179 |
+
} // end function
|
180 |
+
|
181 |
+
|
182 |
+
add_action( 'after_plugin_row_wp-' . CPEL_PLUGIN_BASEDIR . 'connect-polylang-elementor.php', 'ddw_cpel_multisite_subsite_plugin_update_message', 10, 2 );
|
183 |
+
/**
|
184 |
+
* On Plugins page add visible upgrade/update notice in the overview table.
|
185 |
+
* Note: This action fires for Multisite installs where the plugin is
|
186 |
+
* activated on a per site basis.
|
187 |
+
*
|
188 |
+
* @since 1.0.0
|
189 |
+
*
|
190 |
+
* @param string $file
|
191 |
+
* @param object $plugin
|
192 |
+
* @return string Echoed string and markup for the plugin's upgrade/update
|
193 |
+
* notice.
|
194 |
+
*/
|
195 |
+
function ddw_cpel_multisite_subsite_plugin_update_message( $file, $plugin ) {
|
196 |
+
|
197 |
+
if ( is_multisite() && version_compare( $plugin[ 'Version' ], $plugin[ 'new_version' ], '<' ) ) {
|
198 |
+
|
199 |
+
$wp_list_table = _get_list_table( 'WP_Plugins_List_Table' );
|
200 |
+
|
201 |
+
ddw_cpel_plugin_update_message_style_tweak();
|
202 |
+
|
203 |
+
printf(
|
204 |
+
'<tr class="plugin-update-tr"><td colspan="%s" class="plugin-update update-message notice inline notice-warning notice-alt"><div class="update-message cpel-update-message"><h4 style="margin: 0; font-size: 14px;">%s</h4>%s</div></td></tr>',
|
205 |
+
$wp_list_table->get_column_count(),
|
206 |
+
$plugin[ 'Name' ],
|
207 |
+
wpautop( $plugin[ 'upgrade_notice' ] )
|
208 |
+
);
|
209 |
+
|
210 |
+
} // end if
|
211 |
+
|
212 |
+
} // end function
|
includes/functions-conditionals.php
ADDED
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// includes/functions-conditionals
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Prevent direct access to this file.
|
7 |
+
*
|
8 |
+
* @since 1.0.0
|
9 |
+
*/
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
+
exit( 'Sorry, you are not allowed to access this file directly.' );
|
12 |
+
}
|
13 |
+
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Is Elementor (free) plugin active or not?
|
17 |
+
*
|
18 |
+
* @since 1.0.0
|
19 |
+
*
|
20 |
+
* @return bool TRUE if plugin is active, FALSE otherwise.
|
21 |
+
*/
|
22 |
+
function ddw_cpel_is_elementor_active() {
|
23 |
+
|
24 |
+
return defined( 'ELEMENTOR_VERSION' );
|
25 |
+
|
26 |
+
} // end function
|
27 |
+
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Is Elementor Pro plugin active or not?
|
31 |
+
*
|
32 |
+
* @since 1.0.0
|
33 |
+
*
|
34 |
+
* @return bool TRUE if plugin is active, FALSE otherwise.
|
35 |
+
*/
|
36 |
+
function ddw_cpel_is_elementor_pro_active() {
|
37 |
+
|
38 |
+
return defined( 'ELEMENTOR_PRO_VERSION' );
|
39 |
+
|
40 |
+
} // end function
|
41 |
+
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Is Polylang (free) OR Polylang Pro (Premium) plugin active or not?
|
45 |
+
* Note: This is for checking the base Polylang functionality which is
|
46 |
+
* identical in free and Pro version.
|
47 |
+
*
|
48 |
+
* @since 1.0.0
|
49 |
+
*
|
50 |
+
* @return bool TRUE if plugin is active, FALSE otherwise.
|
51 |
+
*/
|
52 |
+
function ddw_cpel_is_polylang_active() {
|
53 |
+
|
54 |
+
return defined( 'POLYLANG_BASENAME' );
|
55 |
+
|
56 |
+
} // end function
|
57 |
+
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Is Polylang Pro (Premium) plugin active or not?
|
61 |
+
*
|
62 |
+
* @since 1.0.0
|
63 |
+
*
|
64 |
+
* @return bool TRUE if plugin is active, FALSE otherwise.
|
65 |
+
*/
|
66 |
+
function ddw_cpel_is_polylang_pro_active() {
|
67 |
+
|
68 |
+
return defined( 'POLYLANG_PRO' );
|
69 |
+
|
70 |
+
} // end function
|
71 |
+
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Is Polylang (free) plugin active or not?
|
75 |
+
*
|
76 |
+
* @since 1.0.0
|
77 |
+
*
|
78 |
+
* @return bool TRUE if plugin is active, FALSE otherwise.
|
79 |
+
*/
|
80 |
+
function ddw_cpel_is_polylang_free_active() {
|
81 |
+
|
82 |
+
return ddw_cpel_is_polylang_active() && ! ddw_cpel_is_polylang_pro_active();
|
83 |
+
|
84 |
+
} // end function
|
includes/functions-global.php
ADDED
@@ -0,0 +1,196 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// includes/functions-global
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Prevent direct access to this file.
|
7 |
+
*
|
8 |
+
* @since 1.0.0
|
9 |
+
*/
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
+
exit( 'Sorry, you are not allowed to access this file directly.' );
|
12 |
+
}
|
13 |
+
|
14 |
+
|
15 |
+
add_action( 'wp_head', 'ddw_cpel_prepare_render_polylang_switcher' );
|
16 |
+
/**
|
17 |
+
* Prepare for tweaks to the rendering of the Polylang Switcher widget.
|
18 |
+
* Note: Using in-between step via action hook 'wp_head' to enforce the
|
19 |
+
* rendering tweaks only on frontend - where only we want them to happen.
|
20 |
+
*
|
21 |
+
* @since 1.0.0
|
22 |
+
*
|
23 |
+
* @see ddw_cpel_render_polylang_switcher()
|
24 |
+
*/
|
25 |
+
function ddw_cpel_prepare_render_polylang_switcher() {
|
26 |
+
|
27 |
+
if ( function_exists( 'pll_current_language' ) ) {
|
28 |
+
add_filter( 'elementor/widget/render_content', 'ddw_cpel_render_polylang_switcher', 10, 2 );
|
29 |
+
}
|
30 |
+
|
31 |
+
} // end function
|
32 |
+
|
33 |
+
|
34 |
+
//add_filter( 'elementor/widget/render_content', 'ddw_cpel_render_polylang_switcher', 10, 2 );
|
35 |
+
/**
|
36 |
+
* Render the Polylang Switcher widget only on the frontend when the display
|
37 |
+
* conditions of the widget's settings are met:
|
38 |
+
* 1) Display for "All languages"
|
39 |
+
* or
|
40 |
+
* 2) Display only for the chosen language (which then must also the be current
|
41 |
+
* language of the browser content)
|
42 |
+
*
|
43 |
+
* @since 1.0.0
|
44 |
+
*
|
45 |
+
* @uses pll_current_language() Provides slug current language.
|
46 |
+
*
|
47 |
+
* @param string $widget_content The content of the widget.
|
48 |
+
* @param \Elementor\Widget_Base $widget_instance The instance of the widget.
|
49 |
+
* @return string Tweaked content of the widget.
|
50 |
+
*/
|
51 |
+
function ddw_cpel_render_polylang_switcher( $widget_content, $widget_instance ) {
|
52 |
+
|
53 |
+
/** Bail early if no rendering tweaks wanted */
|
54 |
+
if ( 'polylang-language-switcher' !== $widget_instance->get_name()
|
55 |
+
|| \Elementor\Plugin::$instance->editor->is_edit_mode()
|
56 |
+
|| is_admin()
|
57 |
+
) {
|
58 |
+
return $widget_content;
|
59 |
+
}
|
60 |
+
|
61 |
+
/** Get the widget settings */
|
62 |
+
$display = sanitize_key( $widget_instance->get_settings_for_display( 'plsfe_widget_display' ) );
|
63 |
+
|
64 |
+
/** Get current language */
|
65 |
+
$current_lang = sanitize_key( pll_current_language( 'slug' ) );
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Only render the widget on the frontend if "All languages" is set, or if
|
69 |
+
* the current language matches the chosen language from the setting.
|
70 |
+
*/
|
71 |
+
if ( 'all' === $display || $current_lang === $display ) {
|
72 |
+
|
73 |
+
return $widget_content;
|
74 |
+
|
75 |
+
} elseif ( $current_lang !== $display ) {
|
76 |
+
|
77 |
+
return '<!-- hidden widget -->';
|
78 |
+
|
79 |
+
} // end if
|
80 |
+
|
81 |
+
} // end function
|
82 |
+
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Setting internal plugin helper values.
|
86 |
+
*
|
87 |
+
* @since 1.0.0
|
88 |
+
*
|
89 |
+
* @return array $cpel_info Array of info values.
|
90 |
+
*/
|
91 |
+
function ddw_cpel_info_values() {
|
92 |
+
|
93 |
+
$cpel_info = array(
|
94 |
+
|
95 |
+
'url_translate' => 'https://translate.wordpress.org/projects/wp-plugins/connect-polylang-elementor',
|
96 |
+
'url_wporg_faq' => 'https://wordpress.org/plugins/connect-polylang-elementor/#faq',
|
97 |
+
'url_wporg_forum' => 'https://wordpress.org/support/plugin/connect-polylang-elementor',
|
98 |
+
'url_wporg_review' => 'https://wordpress.org/support/plugin/connect-polylang-elementor/reviews/?filter=5/#new-post',
|
99 |
+
'url_wporg_profile' => 'https://profiles.wordpress.org/daveshine/',
|
100 |
+
'url_fb_group' => 'https://www.facebook.com/groups/deckerweb.wordpress.plugins/',
|
101 |
+
//'url_snippets' => 'https://github.com/deckerweb/connect-polylang-elementor/wiki/Code-Snippets',
|
102 |
+
'author' => __( 'David Decker - DECKERWEB', 'connect-polylang-elementor' ),
|
103 |
+
'author_uri' => 'https://deckerweb.de/',
|
104 |
+
'license' => 'GPL-2.0-or-later',
|
105 |
+
'url_license' => 'https://opensource.org/licenses/GPL-2.0',
|
106 |
+
'first_code' => '2018',
|
107 |
+
'url_donate' => 'https://www.paypal.me/deckerweb',
|
108 |
+
'url_plugin' => 'https://github.com/deckerweb/connect-polylang-elementor',
|
109 |
+
//'url_plugin_docs' => 'https://github.com/deckerweb/connect-polylang-elementor/wiki',
|
110 |
+
//'url_plugin_faq' => 'https://wordpress.org/plugins/connect-polylang-elementor/#faq',
|
111 |
+
'url_github' => 'https://github.com/deckerweb/connect-polylang-elementor',
|
112 |
+
'url_github_issues' => 'https://github.com/deckerweb/connect-polylang-elementor/issues',
|
113 |
+
'url_twitter' => 'https://twitter.com/deckerweb',
|
114 |
+
'url_github_follow' => 'https://github.com/deckerweb',
|
115 |
+
|
116 |
+
); // end of array
|
117 |
+
|
118 |
+
return $cpel_info;
|
119 |
+
|
120 |
+
} // end function
|
121 |
+
|
122 |
+
|
123 |
+
/**
|
124 |
+
* Get URL of specific BTC info value.
|
125 |
+
*
|
126 |
+
* @since 1.0.0
|
127 |
+
*
|
128 |
+
* @uses ddw_cpel_info_values()
|
129 |
+
*
|
130 |
+
* @param string $url_key String of value key from array of ddw_cpel_info_values()
|
131 |
+
* @param bool $raw If raw escaping or regular escaping of URL gets used
|
132 |
+
* @return string URL for info value.
|
133 |
+
*/
|
134 |
+
function ddw_cpel_get_info_url( $url_key = '', $raw = FALSE ) {
|
135 |
+
|
136 |
+
$cpel_info = (array) ddw_cpel_info_values();
|
137 |
+
|
138 |
+
$output = esc_url( $cpel_info[ sanitize_key( $url_key ) ] );
|
139 |
+
|
140 |
+
if ( TRUE === $raw ) {
|
141 |
+
$output = esc_url_raw( $cpel_info[ esc_attr( $url_key ) ] );
|
142 |
+
}
|
143 |
+
|
144 |
+
return $output;
|
145 |
+
|
146 |
+
} // end function
|
147 |
+
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Get link with complete markup for a specific BTC info value.
|
151 |
+
*
|
152 |
+
* @since 1.0.0
|
153 |
+
*
|
154 |
+
* @uses ddw_cpel_get_info_url()
|
155 |
+
*
|
156 |
+
* @param string $url_key String of value key
|
157 |
+
* @param string $text String of text and link attribute
|
158 |
+
* @param string $class String of CSS class
|
159 |
+
* @return string HTML markup for linked URL.
|
160 |
+
*/
|
161 |
+
function ddw_cpel_get_info_link( $url_key = '', $text = '', $class = '' ) {
|
162 |
+
|
163 |
+
$link = sprintf(
|
164 |
+
'<a class="%1$s" href="%2$s" target="_blank" rel="nofollow noopener noreferrer" title="%3$s">%3$s</a>',
|
165 |
+
strtolower( esc_attr( $class ) ), //sanitize_html_class( $class ),
|
166 |
+
ddw_cpel_get_info_url( $url_key ),
|
167 |
+
esc_html( $text )
|
168 |
+
);
|
169 |
+
|
170 |
+
return $link;
|
171 |
+
|
172 |
+
} // end function
|
173 |
+
|
174 |
+
|
175 |
+
/**
|
176 |
+
* Get timespan of coding years for this plugin.
|
177 |
+
*
|
178 |
+
* @since 1.0.0
|
179 |
+
*
|
180 |
+
* @uses ddw_cpel_info_values()
|
181 |
+
*
|
182 |
+
* @param int $first_year Integer number of first year
|
183 |
+
* @return string Timespan of years.
|
184 |
+
*/
|
185 |
+
function ddw_cpel_coding_years( $first_year = '' ) {
|
186 |
+
|
187 |
+
$cpel_info = (array) ddw_cpel_info_values();
|
188 |
+
|
189 |
+
$first_year = ( empty( $first_year ) ) ? absint( $cpel_info[ 'first_code' ] ) : absint( $first_year );
|
190 |
+
|
191 |
+
/** Set year of first released code */
|
192 |
+
$code_first_year = ( date( 'Y' ) == $first_year || 0 === $first_year ) ? '' : $first_year . '–';
|
193 |
+
|
194 |
+
return $code_first_year . date( 'Y' );
|
195 |
+
|
196 |
+
} // end function
|
includes/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Do not modify the files in this folder.
|
4 |
+
*/
|
index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Do not modify the files in this folder.
|
4 |
+
*/
|
languages/README.md
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# .pot File
|
2 |
+
|
3 |
+
The .pot file is always included in:
|
4 |
+
`/connect-polylang-elementor/languages/connect-polylang-elementor.pot`
|
5 |
+
|
6 |
+
--------------------------------------------------------------------------------
|
7 |
+
|
8 |
+
# Language Packs
|
9 |
+
|
10 |
+
Community Translations for this plugin are handled via:
|
11 |
+
https://translate.wordpress.org/projects/wp-plugins/connect-polylang-elementor
|
12 |
+
|
13 |
+
* You are invited to contribute there for your language
|
14 |
+
* Translations there which are 95% or more complete will be automatically loaded
|
15 |
+
in WordPress as language pack for the plugin and are also updateable
|
16 |
+
|
17 |
+
Thank you for your contribution!
|
18 |
+
|
19 |
+
--------------------------------------------------------------------------------
|
20 |
+
|
21 |
+
# Custom Translations
|
22 |
+
|
23 |
+
If you want or need custom translations different from the Community
|
24 |
+
translations above, you can do that easily:
|
25 |
+
Create your translation with "Poedit" (https://poedit.net/wordpress)
|
26 |
+
or "Loco Translate" plugin (https://wordpress.org/plugins/loco-translate/)
|
27 |
+
and upload the translation file there:
|
28 |
+
`/wp-content/languages/connect-polylang-elementor/`
|
29 |
+
|
30 |
+
for example the German version would looke like that:
|
31 |
+
`/wp-content/languages/connect-polylang-elementor/connect-polylang-elementor-de_DE.mo`
|
32 |
+
|
33 |
+
Note: The location `/wp-content/languages/` is the global translation folder -
|
34 |
+
if it does not exist yet in your installation just create it.
|
languages/connect-polylang-elementor-de_DE.mo
ADDED
Binary file
|
languages/connect-polylang-elementor-de_DE.po
ADDED
@@ -0,0 +1,444 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: Connect Polylang to Elementor\n"
|
4 |
+
"POT-Creation-Date: 2018-11-28 09:33+0100\n"
|
5 |
+
"PO-Revision-Date: 2018-11-28 09:34+0100\n"
|
6 |
+
"Last-Translator: David Decker DECKERWEB.de -- https://deckerweb.de/\n"
|
7 |
+
"Language-Team: David Decker DECKERWEB.de -- https://deckerweb.de/\n"
|
8 |
+
"Language: de_DE\n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 2.2\n"
|
13 |
+
"X-Poedit-Basepath: ..\n"
|
14 |
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
15 |
+
"X-Poedit-Flags-xgettext: --add-comments=translators:\n"
|
16 |
+
"X-Poedit-WPHeader: connect-polylang-elementor.php\n"
|
17 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
18 |
+
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
|
19 |
+
"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
|
20 |
+
"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
|
21 |
+
"X-Poedit-SearchPath-0: .\n"
|
22 |
+
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
23 |
+
|
24 |
+
#. translators: Title attribute for Polylang settings link
|
25 |
+
#: includes/admin-extras.php:38
|
26 |
+
msgid "Polylang Languages Setup"
|
27 |
+
msgstr "Sprachen in Polylang einrichten"
|
28 |
+
|
29 |
+
#: includes/admin-extras.php:39
|
30 |
+
msgctxt "Link title attribute for Polylang settings"
|
31 |
+
msgid "Languages"
|
32 |
+
msgstr "Sprachen"
|
33 |
+
|
34 |
+
#. translators: Title attribute for Elementor My Templates link
|
35 |
+
#: includes/admin-extras.php:51
|
36 |
+
msgid "Elementor My Templates"
|
37 |
+
msgstr "Elementor Meine Templates"
|
38 |
+
|
39 |
+
#: includes/admin-extras.php:52
|
40 |
+
msgctxt "Link title attribute for Elementor My Templates"
|
41 |
+
msgid "Templates"
|
42 |
+
msgstr "Templates"
|
43 |
+
|
44 |
+
#. translators: Plugins page listing
|
45 |
+
#: includes/admin-extras.php:109
|
46 |
+
msgctxt "Plugins page listing"
|
47 |
+
msgid "Support"
|
48 |
+
msgstr "Support"
|
49 |
+
|
50 |
+
#. translators: Plugins page listing
|
51 |
+
#: includes/admin-extras.php:112
|
52 |
+
msgctxt "Plugins page listing"
|
53 |
+
msgid "Facebook Group"
|
54 |
+
msgstr "Facebook-Gruppe"
|
55 |
+
|
56 |
+
#. translators: Plugins page listing
|
57 |
+
#: includes/admin-extras.php:115
|
58 |
+
msgctxt "Plugins page listing"
|
59 |
+
msgid "Translations"
|
60 |
+
msgstr "Übersetzungen"
|
61 |
+
|
62 |
+
#. translators: Plugins page listing
|
63 |
+
#: includes/admin-extras.php:118
|
64 |
+
msgctxt "Plugins page listing"
|
65 |
+
msgid "Donate"
|
66 |
+
msgstr "Spenden"
|
67 |
+
|
68 |
+
#. Author of the plugin/theme
|
69 |
+
#: includes/functions-global.php:102
|
70 |
+
msgid "David Decker - DECKERWEB"
|
71 |
+
msgstr "David Decker - DECKERWEB"
|
72 |
+
|
73 |
+
#: modules/dynamic-tags/manager.php:27
|
74 |
+
msgctxt "Elementor Dynamic Tags group title"
|
75 |
+
msgid "Polylang Languages"
|
76 |
+
msgstr "Polylang Sprachen"
|
77 |
+
|
78 |
+
#: modules/dynamic-tags/polylang-current-language-code.php:46
|
79 |
+
msgctxt "Elementor Dynamic Tag title"
|
80 |
+
msgid "Current Language Code"
|
81 |
+
msgstr "Aktuelle Sprache: Sprachcode"
|
82 |
+
|
83 |
+
#: modules/dynamic-tags/polylang-current-language-flag.php:46
|
84 |
+
msgctxt "Elementor Dynamic Tag title"
|
85 |
+
msgid "Current Language Flag"
|
86 |
+
msgstr "Aktuelle Sprache: Flagge"
|
87 |
+
|
88 |
+
#: modules/dynamic-tags/polylang-current-language-name.php:46
|
89 |
+
msgctxt "Elementor Dynamic Tag title"
|
90 |
+
msgid "Current Language Name"
|
91 |
+
msgstr "Aktuelle Sprache: Name der Sprache"
|
92 |
+
|
93 |
+
#: modules/dynamic-tags/polylang-current-language-url.php:46
|
94 |
+
msgctxt "Elementor Dynamic Tag title"
|
95 |
+
msgid "Current Language URL"
|
96 |
+
msgstr "Aktuelle Sprache: URL"
|
97 |
+
|
98 |
+
#: modules/dynamic-tags/polylang-language-names.php:46
|
99 |
+
msgctxt "Elementor Dynamic Tag title"
|
100 |
+
msgid "Language Names"
|
101 |
+
msgstr "Sprachnamen"
|
102 |
+
|
103 |
+
#: modules/dynamic-tags/polylang-language-names.php:110
|
104 |
+
#: modules/widgets/polylang-language-switcher.php:527
|
105 |
+
msgid "Language Name"
|
106 |
+
msgstr "Name der Sprache"
|
107 |
+
|
108 |
+
#: modules/finder/plugin-cpel.php:34
|
109 |
+
msgctxt "Category title in Elementor Finder"
|
110 |
+
msgid "Add-On: Polylang Connect for Elementor"
|
111 |
+
msgstr "Add-On: Polylang mit Elementor verbinden"
|
112 |
+
|
113 |
+
#: modules/finder/plugin-cpel.php:59
|
114 |
+
msgctxt "Title in Elementor Finder"
|
115 |
+
msgid "Plugin FAQ"
|
116 |
+
msgstr "Plugin-FAQ"
|
117 |
+
|
118 |
+
#: modules/finder/plugin-cpel.php:63
|
119 |
+
msgid "FAQ and Documentation"
|
120 |
+
msgstr "FAQ und Dokumentation"
|
121 |
+
|
122 |
+
#: modules/finder/plugin-cpel.php:75
|
123 |
+
msgctxt "Title in Elementor Finder"
|
124 |
+
msgid "Plugin Support Forum"
|
125 |
+
msgstr "Plugin-Support-Forum"
|
126 |
+
|
127 |
+
#: modules/finder/plugin-cpel.php:79 modules/finder/plugin-polylang.php:166
|
128 |
+
msgid "Free support on WordPress.org"
|
129 |
+
msgstr "Kostenloser Support auf WordPress.org"
|
130 |
+
|
131 |
+
#: modules/finder/plugin-cpel.php:91
|
132 |
+
msgctxt "Title in Elementor Finder"
|
133 |
+
msgid "Plugin Translations"
|
134 |
+
msgstr "Plugin-Übersetzungen"
|
135 |
+
|
136 |
+
#: modules/finder/plugin-cpel.php:95
|
137 |
+
msgid "Translate this plugin on WordPress.org"
|
138 |
+
msgstr "Dieses Plugin bei WordPress.org übersetzen"
|
139 |
+
|
140 |
+
#: modules/finder/plugin-polylang.php:35
|
141 |
+
msgctxt "Category title in Elementor Finder"
|
142 |
+
msgid "Polylang - Multilingual Plugin"
|
143 |
+
msgstr "Polylang - Mehrsprachigkeits-Plugin"
|
144 |
+
|
145 |
+
#: modules/finder/plugin-polylang.php:56
|
146 |
+
msgctxt "Item title part in Elementor Finder"
|
147 |
+
msgid "Polylang"
|
148 |
+
msgstr "Polylang"
|
149 |
+
|
150 |
+
#: modules/finder/plugin-polylang.php:59
|
151 |
+
msgctxt "Item title part in Elementor Finder"
|
152 |
+
msgid "Polylang Pro"
|
153 |
+
msgstr "Polylang Pro"
|
154 |
+
|
155 |
+
#: modules/finder/plugin-polylang.php:63
|
156 |
+
msgctxt "Item title part in Elementor Finder"
|
157 |
+
msgid "Website Language"
|
158 |
+
msgstr "Sprache der Webseite"
|
159 |
+
|
160 |
+
#: modules/finder/plugin-polylang.php:66
|
161 |
+
msgctxt "Item title part in Elementor Finder"
|
162 |
+
msgid "Polylang Language"
|
163 |
+
msgstr "Polylang Sprache"
|
164 |
+
|
165 |
+
#: modules/finder/plugin-polylang.php:69
|
166 |
+
msgctxt "Item title part in Elementor Finder"
|
167 |
+
msgid "Polylang Pro Language"
|
168 |
+
msgstr "Polylang Pro Sprache"
|
169 |
+
|
170 |
+
#: modules/finder/plugin-polylang.php:86
|
171 |
+
msgid "View website in this language"
|
172 |
+
msgstr "Website in dieser Sprache anzeigen"
|
173 |
+
|
174 |
+
#: modules/finder/plugin-polylang.php:105
|
175 |
+
msgid "Edit this language"
|
176 |
+
msgstr "Diese Sprache bearbeiten"
|
177 |
+
|
178 |
+
#: modules/finder/plugin-polylang.php:119
|
179 |
+
msgctxt "Title in Elementor Finder"
|
180 |
+
msgid "Setup languages"
|
181 |
+
msgstr "Sprachen einrichten"
|
182 |
+
|
183 |
+
#: modules/finder/plugin-polylang.php:123
|
184 |
+
msgid "All languages your website appears in"
|
185 |
+
msgstr "Alle Sprachen, in denen deine Website erscheint"
|
186 |
+
|
187 |
+
#: modules/finder/plugin-polylang.php:128
|
188 |
+
msgctxt "Title in Elementor Finder"
|
189 |
+
msgid "String Translations"
|
190 |
+
msgstr "Zeichenketten übersetzen"
|
191 |
+
|
192 |
+
#: modules/finder/plugin-polylang.php:132
|
193 |
+
msgid "From Widgets and other website parts"
|
194 |
+
msgstr "Von Widgets und anderen Website-Bereichen"
|
195 |
+
|
196 |
+
#: modules/finder/plugin-polylang.php:137
|
197 |
+
msgctxt "Title in Elementor Finder"
|
198 |
+
msgid "Settings"
|
199 |
+
msgstr "Einstellungen"
|
200 |
+
|
201 |
+
#: modules/finder/plugin-polylang.php:141
|
202 |
+
msgid "Plugin's settings, enable/ disable modules"
|
203 |
+
msgstr "Plugin-Einstellungen, Aktivieren/ Deaktivieren von Modulen"
|
204 |
+
|
205 |
+
#: modules/finder/plugin-polylang.php:146
|
206 |
+
msgctxt "Title in Elementor Finder"
|
207 |
+
msgid "Plugin Documentation"
|
208 |
+
msgstr "Plugin-Dokumentation"
|
209 |
+
|
210 |
+
#: modules/finder/plugin-polylang.php:150
|
211 |
+
msgid "FAQ, Knowledge Base and Documentation"
|
212 |
+
msgstr "FAQ, Wissensdatenbank und Dokumentation"
|
213 |
+
|
214 |
+
#: modules/finder/plugin-polylang.php:162
|
215 |
+
msgctxt "Title in Elementor Finder"
|
216 |
+
msgid "Support Forum"
|
217 |
+
msgstr "Support-Forum"
|
218 |
+
|
219 |
+
#: modules/widgets/polylang-language-switcher.php:66
|
220 |
+
msgctxt "Elementor widget title"
|
221 |
+
msgid "Polylang Switcher"
|
222 |
+
msgstr "Polylang Sprachwähler"
|
223 |
+
|
224 |
+
#: modules/widgets/polylang-language-switcher.php:174
|
225 |
+
msgid "Content"
|
226 |
+
msgstr "Inhalt"
|
227 |
+
|
228 |
+
#: modules/widgets/polylang-language-switcher.php:181
|
229 |
+
msgid "Layout"
|
230 |
+
msgstr "Layout"
|
231 |
+
|
232 |
+
#: modules/widgets/polylang-language-switcher.php:185
|
233 |
+
msgid "Horizontal"
|
234 |
+
msgstr "Horizontal"
|
235 |
+
|
236 |
+
#: modules/widgets/polylang-language-switcher.php:186
|
237 |
+
msgid "Vertical"
|
238 |
+
msgstr "Vertikal"
|
239 |
+
|
240 |
+
#: modules/widgets/polylang-language-switcher.php:196
|
241 |
+
msgid "Align"
|
242 |
+
msgstr "Ausrichtung"
|
243 |
+
|
244 |
+
#: modules/widgets/polylang-language-switcher.php:200
|
245 |
+
msgid "Left"
|
246 |
+
msgstr "Links"
|
247 |
+
|
248 |
+
#: modules/widgets/polylang-language-switcher.php:204
|
249 |
+
msgid "Center"
|
250 |
+
msgstr "Zentriert"
|
251 |
+
|
252 |
+
#: modules/widgets/polylang-language-switcher.php:208
|
253 |
+
msgid "Right"
|
254 |
+
msgstr "Rechts"
|
255 |
+
|
256 |
+
#: modules/widgets/polylang-language-switcher.php:212
|
257 |
+
msgid "Stretch"
|
258 |
+
msgstr "Strecken"
|
259 |
+
|
260 |
+
#: modules/widgets/polylang-language-switcher.php:224
|
261 |
+
msgid "Hide the current language"
|
262 |
+
msgstr "Aktuelle Sprache ausblenden"
|
263 |
+
|
264 |
+
#: modules/widgets/polylang-language-switcher.php:235
|
265 |
+
msgid "Hide languages with no translation"
|
266 |
+
msgstr "Sprachen ohne Übersetzungen ausblenden"
|
267 |
+
|
268 |
+
#: modules/widgets/polylang-language-switcher.php:245
|
269 |
+
msgid "Show Country Flag"
|
270 |
+
msgstr "Landesflagge anzeigen"
|
271 |
+
|
272 |
+
#: modules/widgets/polylang-language-switcher.php:255
|
273 |
+
msgid "Show Language Name"
|
274 |
+
msgstr "Sprachname anzeigen"
|
275 |
+
|
276 |
+
#: modules/widgets/polylang-language-switcher.php:265
|
277 |
+
msgid "Show Language Code"
|
278 |
+
msgstr "Sprachcode anzeigen"
|
279 |
+
|
280 |
+
#: modules/widgets/polylang-language-switcher.php:280
|
281 |
+
msgid "All languages"
|
282 |
+
msgstr "Alle Sprachen"
|
283 |
+
|
284 |
+
#: modules/widgets/polylang-language-switcher.php:287
|
285 |
+
msgid "Display widget for:"
|
286 |
+
msgstr "Widget anzeigen für:"
|
287 |
+
|
288 |
+
#: modules/widgets/polylang-language-switcher.php:301
|
289 |
+
#: modules/widgets/polylang-language-switcher.php:635
|
290 |
+
msgid "Main Menu"
|
291 |
+
msgstr "Hauptmenü"
|
292 |
+
|
293 |
+
#: modules/widgets/polylang-language-switcher.php:311
|
294 |
+
msgid "Normal"
|
295 |
+
msgstr "Normal"
|
296 |
+
|
297 |
+
#: modules/widgets/polylang-language-switcher.php:327
|
298 |
+
#: modules/widgets/polylang-language-switcher.php:364
|
299 |
+
#: modules/widgets/polylang-language-switcher.php:408
|
300 |
+
msgid "Text Color"
|
301 |
+
msgstr "Textfarbe"
|
302 |
+
|
303 |
+
#: modules/widgets/polylang-language-switcher.php:345
|
304 |
+
msgid "Hover"
|
305 |
+
msgstr "Hover"
|
306 |
+
|
307 |
+
#: modules/widgets/polylang-language-switcher.php:383
|
308 |
+
msgid "Active"
|
309 |
+
msgstr "Aktiv"
|
310 |
+
|
311 |
+
#: modules/widgets/polylang-language-switcher.php:391
|
312 |
+
msgid "This controls the item in the Switcher for the current active language"
|
313 |
+
msgstr "Dies steuert das Element im Switcher für die aktuell aktive Sprache"
|
314 |
+
|
315 |
+
#: modules/widgets/polylang-language-switcher.php:420
|
316 |
+
msgid "Text Hover Color"
|
317 |
+
msgstr "Textfarbe bei Hover"
|
318 |
+
|
319 |
+
#: modules/widgets/polylang-language-switcher.php:436
|
320 |
+
msgid "Horizontal Padding"
|
321 |
+
msgstr "Horizontaler Innenabstand"
|
322 |
+
|
323 |
+
#: modules/widgets/polylang-language-switcher.php:453
|
324 |
+
msgid "Vertical Padding"
|
325 |
+
msgstr "Vertikaler Innenabstand"
|
326 |
+
|
327 |
+
#: modules/widgets/polylang-language-switcher.php:469
|
328 |
+
msgid "Space Between"
|
329 |
+
msgstr "Abstand dazwischen"
|
330 |
+
|
331 |
+
#: modules/widgets/polylang-language-switcher.php:500
|
332 |
+
msgid "Country Flag"
|
333 |
+
msgstr "Landesflagge"
|
334 |
+
|
335 |
+
#: modules/widgets/polylang-language-switcher.php:511
|
336 |
+
#: modules/widgets/polylang-language-switcher.php:548
|
337 |
+
#: modules/widgets/polylang-language-switcher.php:585
|
338 |
+
msgid "Margin"
|
339 |
+
msgstr "Außenabstand"
|
340 |
+
|
341 |
+
#: modules/widgets/polylang-language-switcher.php:538
|
342 |
+
#: modules/widgets/polylang-language-switcher.php:575
|
343 |
+
msgid "Uppercase"
|
344 |
+
msgstr "Großbuchstaben"
|
345 |
+
|
346 |
+
#: modules/widgets/polylang-language-switcher.php:564
|
347 |
+
msgid "Language Code"
|
348 |
+
msgstr "Sprachcode"
|
349 |
+
|
350 |
+
#: modules/widgets/polylang-language-switcher.php:597
|
351 |
+
msgid "Text before"
|
352 |
+
msgstr "Text davor"
|
353 |
+
|
354 |
+
#: modules/widgets/polylang-language-switcher.php:605
|
355 |
+
msgid "Text after"
|
356 |
+
msgstr "Text danach"
|
357 |
+
|
358 |
+
#: modules/widgets/polylang-language-switcher.php:617
|
359 |
+
msgid "Helpful Information"
|
360 |
+
msgstr "Hilfreiche Informationen"
|
361 |
+
|
362 |
+
#: modules/widgets/polylang-language-switcher.php:624
|
363 |
+
msgid "Country Flags"
|
364 |
+
msgstr "Landesflaggen"
|
365 |
+
|
366 |
+
#. translators: %1$s - <code>16px</code> (width 16px) / %2$s - <code>11px</code> (height 11px)
|
367 |
+
#: modules/widgets/polylang-language-switcher.php:627
|
368 |
+
#, php-format
|
369 |
+
msgid ""
|
370 |
+
"Country flags are by default used from Polylang plugin and have the static "
|
371 |
+
"size of %1$s wide and %2$s high."
|
372 |
+
msgstr ""
|
373 |
+
"Länderflaggen werden standardmäßig vom Polylang-Plugin verwendet und haben "
|
374 |
+
"die statische Größe von %1$s breit und %2$s hoch."
|
375 |
+
|
376 |
+
#: modules/widgets/polylang-language-switcher.php:634
|
377 |
+
msgid "Style"
|
378 |
+
msgstr "Stile"
|
379 |
+
|
380 |
+
#: modules/widgets/polylang-language-switcher.php:636
|
381 |
+
msgid "Tab: \"Active\""
|
382 |
+
msgstr "Tab: „Aktiv“"
|
383 |
+
|
384 |
+
#: modules/widgets/polylang-language-switcher.php:637
|
385 |
+
msgid ""
|
386 |
+
"This marks the language of currently viewed content - on the frontend. In "
|
387 |
+
"Elementor Editor Panel this could be different."
|
388 |
+
msgstr ""
|
389 |
+
"Dies markiert die Sprache des aktuell angezeigten Inhalts - im Frontend. Im "
|
390 |
+
"Elementor Editor-Panel kann dies anders sein."
|
391 |
+
|
392 |
+
#. Plugin Name of the plugin/theme
|
393 |
+
msgid "Polylang Connect for Elementor"
|
394 |
+
msgstr "Add-On: Polylang mit Elementor verbinden"
|
395 |
+
|
396 |
+
#. Plugin URI of the plugin/theme
|
397 |
+
msgid "https://github.com/deckerweb/connect-polylang-elementor"
|
398 |
+
msgstr "https://github.com/deckerweb/connect-polylang-elementor"
|
399 |
+
|
400 |
+
#. Description of the plugin/theme
|
401 |
+
msgid ""
|
402 |
+
"Connect the Polylang multilingual plugin with Elementor Page Builder: This "
|
403 |
+
"plugin will make Elementor and Polylang show the correct language templates, "
|
404 |
+
"especially with Elementor Pro Theme Builder. Plus: native Polylang Language "
|
405 |
+
"Switcher Elementor widget, new Dynamic Tags, and Polylang links added to the "
|
406 |
+
"Elementor Finder feature."
|
407 |
+
msgstr ""
|
408 |
+
"Verbinde das Polylang mehrsprachigkeits-Plugin mit Elementor Page Builder: "
|
409 |
+
"Dieses Plugin hilft dabei, dass Elementor und Polylang die richtigen "
|
410 |
+
"Templates für Sprachen anzeigen, insbesondere in Verbindung mit dem "
|
411 |
+
"Elementor Pro Theme Builder. Plus: natives Polylang Language Switcher "
|
412 |
+
"Elementor Widget, neue Dynamic Tags und Polylang Links, die der Elementor "
|
413 |
+
"Finder Funktion hinzugefügt wurden."
|
414 |
+
|
415 |
+
#. Author URI of the plugin/theme
|
416 |
+
msgid "https://deckerweb.de/"
|
417 |
+
msgstr "https://deckerweb.de/"
|
418 |
+
|
419 |
+
#~ msgid "Connect Polylang Elementor"
|
420 |
+
#~ msgstr "Polylang mit Elementor verbinden"
|
421 |
+
|
422 |
+
#~ msgid "Polylang Language Names"
|
423 |
+
#~ msgstr "Polylang Sprachnamen"
|
424 |
+
|
425 |
+
#~ msgid "Before"
|
426 |
+
#~ msgstr "Davor"
|
427 |
+
|
428 |
+
#~ msgid "After"
|
429 |
+
#~ msgstr "Danach"
|
430 |
+
|
431 |
+
#~ msgctxt "Category title in Elementor Finder"
|
432 |
+
#~ msgid "Polylang"
|
433 |
+
#~ msgstr "Polylang"
|
434 |
+
|
435 |
+
#~ msgid ""
|
436 |
+
#~ "Connect Polylang with Elementor - some internal tweaks to make it work "
|
437 |
+
#~ "better."
|
438 |
+
#~ msgstr ""
|
439 |
+
#~ "Polylang mit Elementor verbinden - einige interne Tweaks, damit es besser "
|
440 |
+
#~ "läuft."
|
441 |
+
|
442 |
+
#~ msgctxt "Title in Elementor Finder"
|
443 |
+
#~ msgid "Polylang"
|
444 |
+
#~ msgstr "Polylang"
|
languages/connect-polylang-elementor-de_DE_formal.mo
ADDED
Binary file
|
languages/connect-polylang-elementor-de_DE_formal.po
ADDED
@@ -0,0 +1,444 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: Connect Polylang to Elementor\n"
|
4 |
+
"POT-Creation-Date: 2018-11-28 09:32+0100\n"
|
5 |
+
"PO-Revision-Date: 2018-11-28 09:33+0100\n"
|
6 |
+
"Last-Translator: David Decker DECKERWEB.de -- https://deckerweb.de/\n"
|
7 |
+
"Language-Team: David Decker DECKERWEB.de -- https://deckerweb.de/\n"
|
8 |
+
"Language: de_DE\n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 2.2\n"
|
13 |
+
"X-Poedit-Basepath: ..\n"
|
14 |
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
15 |
+
"X-Poedit-Flags-xgettext: --add-comments=translators:\n"
|
16 |
+
"X-Poedit-WPHeader: connect-polylang-elementor.php\n"
|
17 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
18 |
+
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
|
19 |
+
"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
|
20 |
+
"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
|
21 |
+
"X-Poedit-SearchPath-0: .\n"
|
22 |
+
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
23 |
+
|
24 |
+
#. translators: Title attribute for Polylang settings link
|
25 |
+
#: includes/admin-extras.php:38
|
26 |
+
msgid "Polylang Languages Setup"
|
27 |
+
msgstr "Sprachen in Polylang einrichten"
|
28 |
+
|
29 |
+
#: includes/admin-extras.php:39
|
30 |
+
msgctxt "Link title attribute for Polylang settings"
|
31 |
+
msgid "Languages"
|
32 |
+
msgstr "Sprachen"
|
33 |
+
|
34 |
+
#. translators: Title attribute for Elementor My Templates link
|
35 |
+
#: includes/admin-extras.php:51
|
36 |
+
msgid "Elementor My Templates"
|
37 |
+
msgstr "Elementor Meine Templates"
|
38 |
+
|
39 |
+
#: includes/admin-extras.php:52
|
40 |
+
msgctxt "Link title attribute for Elementor My Templates"
|
41 |
+
msgid "Templates"
|
42 |
+
msgstr "Templates"
|
43 |
+
|
44 |
+
#. translators: Plugins page listing
|
45 |
+
#: includes/admin-extras.php:109
|
46 |
+
msgctxt "Plugins page listing"
|
47 |
+
msgid "Support"
|
48 |
+
msgstr "Support"
|
49 |
+
|
50 |
+
#. translators: Plugins page listing
|
51 |
+
#: includes/admin-extras.php:112
|
52 |
+
msgctxt "Plugins page listing"
|
53 |
+
msgid "Facebook Group"
|
54 |
+
msgstr "Facebook-Gruppe"
|
55 |
+
|
56 |
+
#. translators: Plugins page listing
|
57 |
+
#: includes/admin-extras.php:115
|
58 |
+
msgctxt "Plugins page listing"
|
59 |
+
msgid "Translations"
|
60 |
+
msgstr "Übersetzungen"
|
61 |
+
|
62 |
+
#. translators: Plugins page listing
|
63 |
+
#: includes/admin-extras.php:118
|
64 |
+
msgctxt "Plugins page listing"
|
65 |
+
msgid "Donate"
|
66 |
+
msgstr "Spenden"
|
67 |
+
|
68 |
+
#. Author of the plugin/theme
|
69 |
+
#: includes/functions-global.php:102
|
70 |
+
msgid "David Decker - DECKERWEB"
|
71 |
+
msgstr "David Decker - DECKERWEB"
|
72 |
+
|
73 |
+
#: modules/dynamic-tags/manager.php:27
|
74 |
+
msgctxt "Elementor Dynamic Tags group title"
|
75 |
+
msgid "Polylang Languages"
|
76 |
+
msgstr "Polylang Sprachen"
|
77 |
+
|
78 |
+
#: modules/dynamic-tags/polylang-current-language-code.php:46
|
79 |
+
msgctxt "Elementor Dynamic Tag title"
|
80 |
+
msgid "Current Language Code"
|
81 |
+
msgstr "Aktuelle Sprache: Sprachcode"
|
82 |
+
|
83 |
+
#: modules/dynamic-tags/polylang-current-language-flag.php:46
|
84 |
+
msgctxt "Elementor Dynamic Tag title"
|
85 |
+
msgid "Current Language Flag"
|
86 |
+
msgstr "Aktuelle Sprache: Flagge"
|
87 |
+
|
88 |
+
#: modules/dynamic-tags/polylang-current-language-name.php:46
|
89 |
+
msgctxt "Elementor Dynamic Tag title"
|
90 |
+
msgid "Current Language Name"
|
91 |
+
msgstr "Aktuelle Sprache: Name der Sprache"
|
92 |
+
|
93 |
+
#: modules/dynamic-tags/polylang-current-language-url.php:46
|
94 |
+
msgctxt "Elementor Dynamic Tag title"
|
95 |
+
msgid "Current Language URL"
|
96 |
+
msgstr "Aktuelle Sprache: URL"
|
97 |
+
|
98 |
+
#: modules/dynamic-tags/polylang-language-names.php:46
|
99 |
+
msgctxt "Elementor Dynamic Tag title"
|
100 |
+
msgid "Language Names"
|
101 |
+
msgstr "Sprachnamen"
|
102 |
+
|
103 |
+
#: modules/dynamic-tags/polylang-language-names.php:110
|
104 |
+
#: modules/widgets/polylang-language-switcher.php:527
|
105 |
+
msgid "Language Name"
|
106 |
+
msgstr "Name der Sprache"
|
107 |
+
|
108 |
+
#: modules/finder/plugin-cpel.php:34
|
109 |
+
msgctxt "Category title in Elementor Finder"
|
110 |
+
msgid "Add-On: Polylang Connect for Elementor"
|
111 |
+
msgstr "Add-On: Polylang mit Elementor verbinden"
|
112 |
+
|
113 |
+
#: modules/finder/plugin-cpel.php:59
|
114 |
+
msgctxt "Title in Elementor Finder"
|
115 |
+
msgid "Plugin FAQ"
|
116 |
+
msgstr "Plugin-FAQ"
|
117 |
+
|
118 |
+
#: modules/finder/plugin-cpel.php:63
|
119 |
+
msgid "FAQ and Documentation"
|
120 |
+
msgstr "FAQ und Dokumentation"
|
121 |
+
|
122 |
+
#: modules/finder/plugin-cpel.php:75
|
123 |
+
msgctxt "Title in Elementor Finder"
|
124 |
+
msgid "Plugin Support Forum"
|
125 |
+
msgstr "Plugin-Support-Forum"
|
126 |
+
|
127 |
+
#: modules/finder/plugin-cpel.php:79 modules/finder/plugin-polylang.php:166
|
128 |
+
msgid "Free support on WordPress.org"
|
129 |
+
msgstr "Kostenloser Support auf WordPress.org"
|
130 |
+
|
131 |
+
#: modules/finder/plugin-cpel.php:91
|
132 |
+
msgctxt "Title in Elementor Finder"
|
133 |
+
msgid "Plugin Translations"
|
134 |
+
msgstr "Plugin-Übersetzungen"
|
135 |
+
|
136 |
+
#: modules/finder/plugin-cpel.php:95
|
137 |
+
msgid "Translate this plugin on WordPress.org"
|
138 |
+
msgstr "Dieses Plugin bei WordPress.org übersetzen"
|
139 |
+
|
140 |
+
#: modules/finder/plugin-polylang.php:35
|
141 |
+
msgctxt "Category title in Elementor Finder"
|
142 |
+
msgid "Polylang - Multilingual Plugin"
|
143 |
+
msgstr "Polylang - Mehrsprachigkeits-Plugin"
|
144 |
+
|
145 |
+
#: modules/finder/plugin-polylang.php:56
|
146 |
+
msgctxt "Item title part in Elementor Finder"
|
147 |
+
msgid "Polylang"
|
148 |
+
msgstr "Polylang"
|
149 |
+
|
150 |
+
#: modules/finder/plugin-polylang.php:59
|
151 |
+
msgctxt "Item title part in Elementor Finder"
|
152 |
+
msgid "Polylang Pro"
|
153 |
+
msgstr "Polylang Pro"
|
154 |
+
|
155 |
+
#: modules/finder/plugin-polylang.php:63
|
156 |
+
msgctxt "Item title part in Elementor Finder"
|
157 |
+
msgid "Website Language"
|
158 |
+
msgstr "Sprache der Webseite"
|
159 |
+
|
160 |
+
#: modules/finder/plugin-polylang.php:66
|
161 |
+
msgctxt "Item title part in Elementor Finder"
|
162 |
+
msgid "Polylang Language"
|
163 |
+
msgstr "Polylang Sprache"
|
164 |
+
|
165 |
+
#: modules/finder/plugin-polylang.php:69
|
166 |
+
msgctxt "Item title part in Elementor Finder"
|
167 |
+
msgid "Polylang Pro Language"
|
168 |
+
msgstr "Polylang Pro Sprache"
|
169 |
+
|
170 |
+
#: modules/finder/plugin-polylang.php:86
|
171 |
+
msgid "View website in this language"
|
172 |
+
msgstr "Website in dieser Sprache anzeigen"
|
173 |
+
|
174 |
+
#: modules/finder/plugin-polylang.php:105
|
175 |
+
msgid "Edit this language"
|
176 |
+
msgstr "Diese Sprache bearbeiten"
|
177 |
+
|
178 |
+
#: modules/finder/plugin-polylang.php:119
|
179 |
+
msgctxt "Title in Elementor Finder"
|
180 |
+
msgid "Setup languages"
|
181 |
+
msgstr "Sprachen einrichten"
|
182 |
+
|
183 |
+
#: modules/finder/plugin-polylang.php:123
|
184 |
+
msgid "All languages your website appears in"
|
185 |
+
msgstr "Alle Sprachen, in denen Ihre Website erscheint"
|
186 |
+
|
187 |
+
#: modules/finder/plugin-polylang.php:128
|
188 |
+
msgctxt "Title in Elementor Finder"
|
189 |
+
msgid "String Translations"
|
190 |
+
msgstr "Zeichenketten übersetzen"
|
191 |
+
|
192 |
+
#: modules/finder/plugin-polylang.php:132
|
193 |
+
msgid "From Widgets and other website parts"
|
194 |
+
msgstr "Von Widgets und anderen Website-Bereichen"
|
195 |
+
|
196 |
+
#: modules/finder/plugin-polylang.php:137
|
197 |
+
msgctxt "Title in Elementor Finder"
|
198 |
+
msgid "Settings"
|
199 |
+
msgstr "Einstellungen"
|
200 |
+
|
201 |
+
#: modules/finder/plugin-polylang.php:141
|
202 |
+
msgid "Plugin's settings, enable/ disable modules"
|
203 |
+
msgstr "Plugin-Einstellungen, Aktivieren/ Deaktivieren von Modulen"
|
204 |
+
|
205 |
+
#: modules/finder/plugin-polylang.php:146
|
206 |
+
msgctxt "Title in Elementor Finder"
|
207 |
+
msgid "Plugin Documentation"
|
208 |
+
msgstr "Plugin-Dokumentation"
|
209 |
+
|
210 |
+
#: modules/finder/plugin-polylang.php:150
|
211 |
+
msgid "FAQ, Knowledge Base and Documentation"
|
212 |
+
msgstr "FAQ, Wissensdatenbank und Dokumentation"
|
213 |
+
|
214 |
+
#: modules/finder/plugin-polylang.php:162
|
215 |
+
msgctxt "Title in Elementor Finder"
|
216 |
+
msgid "Support Forum"
|
217 |
+
msgstr "Support-Forum"
|
218 |
+
|
219 |
+
#: modules/widgets/polylang-language-switcher.php:66
|
220 |
+
msgctxt "Elementor widget title"
|
221 |
+
msgid "Polylang Switcher"
|
222 |
+
msgstr "Polylang Sprachwähler"
|
223 |
+
|
224 |
+
#: modules/widgets/polylang-language-switcher.php:174
|
225 |
+
msgid "Content"
|
226 |
+
msgstr "Inhalt"
|
227 |
+
|
228 |
+
#: modules/widgets/polylang-language-switcher.php:181
|
229 |
+
msgid "Layout"
|
230 |
+
msgstr "Layout"
|
231 |
+
|
232 |
+
#: modules/widgets/polylang-language-switcher.php:185
|
233 |
+
msgid "Horizontal"
|
234 |
+
msgstr "Horizontal"
|
235 |
+
|
236 |
+
#: modules/widgets/polylang-language-switcher.php:186
|
237 |
+
msgid "Vertical"
|
238 |
+
msgstr "Vertikal"
|
239 |
+
|
240 |
+
#: modules/widgets/polylang-language-switcher.php:196
|
241 |
+
msgid "Align"
|
242 |
+
msgstr "Ausrichtung"
|
243 |
+
|
244 |
+
#: modules/widgets/polylang-language-switcher.php:200
|
245 |
+
msgid "Left"
|
246 |
+
msgstr "Links"
|
247 |
+
|
248 |
+
#: modules/widgets/polylang-language-switcher.php:204
|
249 |
+
msgid "Center"
|
250 |
+
msgstr "Zentriert"
|
251 |
+
|
252 |
+
#: modules/widgets/polylang-language-switcher.php:208
|
253 |
+
msgid "Right"
|
254 |
+
msgstr "Rechts"
|
255 |
+
|
256 |
+
#: modules/widgets/polylang-language-switcher.php:212
|
257 |
+
msgid "Stretch"
|
258 |
+
msgstr "Strecken"
|
259 |
+
|
260 |
+
#: modules/widgets/polylang-language-switcher.php:224
|
261 |
+
msgid "Hide the current language"
|
262 |
+
msgstr "Aktuelle Sprache ausblenden"
|
263 |
+
|
264 |
+
#: modules/widgets/polylang-language-switcher.php:235
|
265 |
+
msgid "Hide languages with no translation"
|
266 |
+
msgstr "Sprachen ohne Übersetzungen ausblenden"
|
267 |
+
|
268 |
+
#: modules/widgets/polylang-language-switcher.php:245
|
269 |
+
msgid "Show Country Flag"
|
270 |
+
msgstr "Landesflagge anzeigen"
|
271 |
+
|
272 |
+
#: modules/widgets/polylang-language-switcher.php:255
|
273 |
+
msgid "Show Language Name"
|
274 |
+
msgstr "Sprachname anzeigen"
|
275 |
+
|
276 |
+
#: modules/widgets/polylang-language-switcher.php:265
|
277 |
+
msgid "Show Language Code"
|
278 |
+
msgstr "Sprachcode anzeigen"
|
279 |
+
|
280 |
+
#: modules/widgets/polylang-language-switcher.php:280
|
281 |
+
msgid "All languages"
|
282 |
+
msgstr "Alle Sprachen"
|
283 |
+
|
284 |
+
#: modules/widgets/polylang-language-switcher.php:287
|
285 |
+
msgid "Display widget for:"
|
286 |
+
msgstr "Widget anzeigen für:"
|
287 |
+
|
288 |
+
#: modules/widgets/polylang-language-switcher.php:301
|
289 |
+
#: modules/widgets/polylang-language-switcher.php:635
|
290 |
+
msgid "Main Menu"
|
291 |
+
msgstr "Hauptmenü"
|
292 |
+
|
293 |
+
#: modules/widgets/polylang-language-switcher.php:311
|
294 |
+
msgid "Normal"
|
295 |
+
msgstr "Normal"
|
296 |
+
|
297 |
+
#: modules/widgets/polylang-language-switcher.php:327
|
298 |
+
#: modules/widgets/polylang-language-switcher.php:364
|
299 |
+
#: modules/widgets/polylang-language-switcher.php:408
|
300 |
+
msgid "Text Color"
|
301 |
+
msgstr "Textfarbe"
|
302 |
+
|
303 |
+
#: modules/widgets/polylang-language-switcher.php:345
|
304 |
+
msgid "Hover"
|
305 |
+
msgstr "Hover"
|
306 |
+
|
307 |
+
#: modules/widgets/polylang-language-switcher.php:383
|
308 |
+
msgid "Active"
|
309 |
+
msgstr "Aktiv"
|
310 |
+
|
311 |
+
#: modules/widgets/polylang-language-switcher.php:391
|
312 |
+
msgid "This controls the item in the Switcher for the current active language"
|
313 |
+
msgstr "Dies steuert das Element im Switcher für die aktuell aktive Sprache"
|
314 |
+
|
315 |
+
#: modules/widgets/polylang-language-switcher.php:420
|
316 |
+
msgid "Text Hover Color"
|
317 |
+
msgstr "Textfarbe bei Hover"
|
318 |
+
|
319 |
+
#: modules/widgets/polylang-language-switcher.php:436
|
320 |
+
msgid "Horizontal Padding"
|
321 |
+
msgstr "Horizontaler Innenabstand"
|
322 |
+
|
323 |
+
#: modules/widgets/polylang-language-switcher.php:453
|
324 |
+
msgid "Vertical Padding"
|
325 |
+
msgstr "Vertikaler Innenabstand"
|
326 |
+
|
327 |
+
#: modules/widgets/polylang-language-switcher.php:469
|
328 |
+
msgid "Space Between"
|
329 |
+
msgstr "Abstand dazwischen"
|
330 |
+
|
331 |
+
#: modules/widgets/polylang-language-switcher.php:500
|
332 |
+
msgid "Country Flag"
|
333 |
+
msgstr "Landesflagge"
|
334 |
+
|
335 |
+
#: modules/widgets/polylang-language-switcher.php:511
|
336 |
+
#: modules/widgets/polylang-language-switcher.php:548
|
337 |
+
#: modules/widgets/polylang-language-switcher.php:585
|
338 |
+
msgid "Margin"
|
339 |
+
msgstr "Außenabstand"
|
340 |
+
|
341 |
+
#: modules/widgets/polylang-language-switcher.php:538
|
342 |
+
#: modules/widgets/polylang-language-switcher.php:575
|
343 |
+
msgid "Uppercase"
|
344 |
+
msgstr "Großbuchstaben"
|
345 |
+
|
346 |
+
#: modules/widgets/polylang-language-switcher.php:564
|
347 |
+
msgid "Language Code"
|
348 |
+
msgstr "Sprachcode"
|
349 |
+
|
350 |
+
#: modules/widgets/polylang-language-switcher.php:597
|
351 |
+
msgid "Text before"
|
352 |
+
msgstr "Text davor"
|
353 |
+
|
354 |
+
#: modules/widgets/polylang-language-switcher.php:605
|
355 |
+
msgid "Text after"
|
356 |
+
msgstr "Text danach"
|
357 |
+
|
358 |
+
#: modules/widgets/polylang-language-switcher.php:617
|
359 |
+
msgid "Helpful Information"
|
360 |
+
msgstr "Hilfreiche Informationen"
|
361 |
+
|
362 |
+
#: modules/widgets/polylang-language-switcher.php:624
|
363 |
+
msgid "Country Flags"
|
364 |
+
msgstr "Landesflaggen"
|
365 |
+
|
366 |
+
#. translators: %1$s - <code>16px</code> (width 16px) / %2$s - <code>11px</code> (height 11px)
|
367 |
+
#: modules/widgets/polylang-language-switcher.php:627
|
368 |
+
#, php-format
|
369 |
+
msgid ""
|
370 |
+
"Country flags are by default used from Polylang plugin and have the static "
|
371 |
+
"size of %1$s wide and %2$s high."
|
372 |
+
msgstr ""
|
373 |
+
"Länderflaggen werden standardmäßig vom Polylang-Plugin verwendet und haben "
|
374 |
+
"die statische Größe von %1$s breit und %2$s hoch."
|
375 |
+
|
376 |
+
#: modules/widgets/polylang-language-switcher.php:634
|
377 |
+
msgid "Style"
|
378 |
+
msgstr "Stile"
|
379 |
+
|
380 |
+
#: modules/widgets/polylang-language-switcher.php:636
|
381 |
+
msgid "Tab: \"Active\""
|
382 |
+
msgstr "Tab: „Aktiv“"
|
383 |
+
|
384 |
+
#: modules/widgets/polylang-language-switcher.php:637
|
385 |
+
msgid ""
|
386 |
+
"This marks the language of currently viewed content - on the frontend. In "
|
387 |
+
"Elementor Editor Panel this could be different."
|
388 |
+
msgstr ""
|
389 |
+
"Dies markiert die Sprache des aktuell angezeigten Inhalts - im Frontend. Im "
|
390 |
+
"Elementor Editor-Panel kann dies anders sein."
|
391 |
+
|
392 |
+
#. Plugin Name of the plugin/theme
|
393 |
+
msgid "Polylang Connect for Elementor"
|
394 |
+
msgstr "Add-On: Polylang mit Elementor verbinden"
|
395 |
+
|
396 |
+
#. Plugin URI of the plugin/theme
|
397 |
+
msgid "https://github.com/deckerweb/connect-polylang-elementor"
|
398 |
+
msgstr "https://github.com/deckerweb/connect-polylang-elementor"
|
399 |
+
|
400 |
+
#. Description of the plugin/theme
|
401 |
+
msgid ""
|
402 |
+
"Connect the Polylang multilingual plugin with Elementor Page Builder: This "
|
403 |
+
"plugin will make Elementor and Polylang show the correct language templates, "
|
404 |
+
"especially with Elementor Pro Theme Builder. Plus: native Polylang Language "
|
405 |
+
"Switcher Elementor widget, new Dynamic Tags, and Polylang links added to the "
|
406 |
+
"Elementor Finder feature."
|
407 |
+
msgstr ""
|
408 |
+
"Verbinden Sie das Polylang mehrsprachigkeits-Plugin mit Elementor Page "
|
409 |
+
"Builder: Dieses Plugin hilft dabei, dass Elementor und Polylang die "
|
410 |
+
"richtigen Templates für Sprachen anzeigen, insbesondere in Verbindung mit "
|
411 |
+
"dem Elementor Pro Theme Builder. Plus: natives Polylang Language Switcher "
|
412 |
+
"Elementor Widget, neue Dynamic Tags und Polylang Links, die der Elementor "
|
413 |
+
"Finder Funktion hinzugefügt wurden."
|
414 |
+
|
415 |
+
#. Author URI of the plugin/theme
|
416 |
+
msgid "https://deckerweb.de/"
|
417 |
+
msgstr "https://deckerweb.de/"
|
418 |
+
|
419 |
+
#~ msgid "Connect Polylang Elementor"
|
420 |
+
#~ msgstr "Polylang mit Elementor verbinden"
|
421 |
+
|
422 |
+
#~ msgid "Polylang Language Names"
|
423 |
+
#~ msgstr "Polylang Sprachnamen"
|
424 |
+
|
425 |
+
#~ msgid "Before"
|
426 |
+
#~ msgstr "Davor"
|
427 |
+
|
428 |
+
#~ msgid "After"
|
429 |
+
#~ msgstr "Danach"
|
430 |
+
|
431 |
+
#~ msgctxt "Category title in Elementor Finder"
|
432 |
+
#~ msgid "Polylang"
|
433 |
+
#~ msgstr "Polylang"
|
434 |
+
|
435 |
+
#~ msgid ""
|
436 |
+
#~ "Connect Polylang with Elementor - some internal tweaks to make it work "
|
437 |
+
#~ "better."
|
438 |
+
#~ msgstr ""
|
439 |
+
#~ "Polylang mit Elementor verbinden - einige interne Tweaks, damit es besser "
|
440 |
+
#~ "läuft."
|
441 |
+
|
442 |
+
#~ msgctxt "Title in Elementor Finder"
|
443 |
+
#~ msgid "Polylang"
|
444 |
+
#~ msgstr "Polylang"
|
languages/connect-polylang-elementor.pot
ADDED
@@ -0,0 +1,408 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#, fuzzy
|
2 |
+
msgid ""
|
3 |
+
msgstr ""
|
4 |
+
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
5 |
+
"Project-Id-Version: Connect Polylang to Elementor\n"
|
6 |
+
"POT-Creation-Date: 2018-11-28 09:34+0100\n"
|
7 |
+
"PO-Revision-Date: 2018-11-23 22:17+0100\n"
|
8 |
+
"Last-Translator: David Decker DECKERWEB.de -- https://deckerweb.de/\n"
|
9 |
+
"Language-Team: David Decker DECKERWEB.de -- https://deckerweb.de/\n"
|
10 |
+
"MIME-Version: 1.0\n"
|
11 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
+
"Content-Transfer-Encoding: 8bit\n"
|
13 |
+
"X-Generator: Poedit 2.2\n"
|
14 |
+
"X-Poedit-Basepath: ..\n"
|
15 |
+
"X-Poedit-Flags-xgettext: --add-comments=translators:\n"
|
16 |
+
"X-Poedit-WPHeader: connect-polylang-elementor.php\n"
|
17 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
18 |
+
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
|
19 |
+
"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;"
|
20 |
+
"_n_noop:1,2;_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
|
21 |
+
"X-Poedit-SearchPath-0: .\n"
|
22 |
+
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
23 |
+
|
24 |
+
#. translators: Title attribute for Polylang settings link
|
25 |
+
#: includes/admin-extras.php:38
|
26 |
+
msgid "Polylang Languages Setup"
|
27 |
+
msgstr ""
|
28 |
+
|
29 |
+
#: includes/admin-extras.php:39
|
30 |
+
msgctxt "Link title attribute for Polylang settings"
|
31 |
+
msgid "Languages"
|
32 |
+
msgstr ""
|
33 |
+
|
34 |
+
#. translators: Title attribute for Elementor My Templates link
|
35 |
+
#: includes/admin-extras.php:51
|
36 |
+
msgid "Elementor My Templates"
|
37 |
+
msgstr ""
|
38 |
+
|
39 |
+
#: includes/admin-extras.php:52
|
40 |
+
msgctxt "Link title attribute for Elementor My Templates"
|
41 |
+
msgid "Templates"
|
42 |
+
msgstr ""
|
43 |
+
|
44 |
+
#. translators: Plugins page listing
|
45 |
+
#: includes/admin-extras.php:109
|
46 |
+
msgctxt "Plugins page listing"
|
47 |
+
msgid "Support"
|
48 |
+
msgstr ""
|
49 |
+
|
50 |
+
#. translators: Plugins page listing
|
51 |
+
#: includes/admin-extras.php:112
|
52 |
+
msgctxt "Plugins page listing"
|
53 |
+
msgid "Facebook Group"
|
54 |
+
msgstr ""
|
55 |
+
|
56 |
+
#. translators: Plugins page listing
|
57 |
+
#: includes/admin-extras.php:115
|
58 |
+
msgctxt "Plugins page listing"
|
59 |
+
msgid "Translations"
|
60 |
+
msgstr ""
|
61 |
+
|
62 |
+
#. translators: Plugins page listing
|
63 |
+
#: includes/admin-extras.php:118
|
64 |
+
msgctxt "Plugins page listing"
|
65 |
+
msgid "Donate"
|
66 |
+
msgstr ""
|
67 |
+
|
68 |
+
#. Author of the plugin/theme
|
69 |
+
#: includes/functions-global.php:102
|
70 |
+
msgid "David Decker - DECKERWEB"
|
71 |
+
msgstr ""
|
72 |
+
|
73 |
+
#: modules/dynamic-tags/manager.php:27
|
74 |
+
msgctxt "Elementor Dynamic Tags group title"
|
75 |
+
msgid "Polylang Languages"
|
76 |
+
msgstr ""
|
77 |
+
|
78 |
+
#: modules/dynamic-tags/polylang-current-language-code.php:46
|
79 |
+
msgctxt "Elementor Dynamic Tag title"
|
80 |
+
msgid "Current Language Code"
|
81 |
+
msgstr ""
|
82 |
+
|
83 |
+
#: modules/dynamic-tags/polylang-current-language-flag.php:46
|
84 |
+
msgctxt "Elementor Dynamic Tag title"
|
85 |
+
msgid "Current Language Flag"
|
86 |
+
msgstr ""
|
87 |
+
|
88 |
+
#: modules/dynamic-tags/polylang-current-language-name.php:46
|
89 |
+
msgctxt "Elementor Dynamic Tag title"
|
90 |
+
msgid "Current Language Name"
|
91 |
+
msgstr ""
|
92 |
+
|
93 |
+
#: modules/dynamic-tags/polylang-current-language-url.php:46
|
94 |
+
msgctxt "Elementor Dynamic Tag title"
|
95 |
+
msgid "Current Language URL"
|
96 |
+
msgstr ""
|
97 |
+
|
98 |
+
#: modules/dynamic-tags/polylang-language-names.php:46
|
99 |
+
msgctxt "Elementor Dynamic Tag title"
|
100 |
+
msgid "Language Names"
|
101 |
+
msgstr ""
|
102 |
+
|
103 |
+
#: modules/dynamic-tags/polylang-language-names.php:110
|
104 |
+
#: modules/widgets/polylang-language-switcher.php:527
|
105 |
+
msgid "Language Name"
|
106 |
+
msgstr ""
|
107 |
+
|
108 |
+
#: modules/finder/plugin-cpel.php:34
|
109 |
+
msgctxt "Category title in Elementor Finder"
|
110 |
+
msgid "Add-On: Polylang Connect for Elementor"
|
111 |
+
msgstr ""
|
112 |
+
|
113 |
+
#: modules/finder/plugin-cpel.php:59
|
114 |
+
msgctxt "Title in Elementor Finder"
|
115 |
+
msgid "Plugin FAQ"
|
116 |
+
msgstr ""
|
117 |
+
|
118 |
+
#: modules/finder/plugin-cpel.php:63
|
119 |
+
msgid "FAQ and Documentation"
|
120 |
+
msgstr ""
|
121 |
+
|
122 |
+
#: modules/finder/plugin-cpel.php:75
|
123 |
+
msgctxt "Title in Elementor Finder"
|
124 |
+
msgid "Plugin Support Forum"
|
125 |
+
msgstr ""
|
126 |
+
|
127 |
+
#: modules/finder/plugin-cpel.php:79 modules/finder/plugin-polylang.php:166
|
128 |
+
msgid "Free support on WordPress.org"
|
129 |
+
msgstr ""
|
130 |
+
|
131 |
+
#: modules/finder/plugin-cpel.php:91
|
132 |
+
msgctxt "Title in Elementor Finder"
|
133 |
+
msgid "Plugin Translations"
|
134 |
+
msgstr ""
|
135 |
+
|
136 |
+
#: modules/finder/plugin-cpel.php:95
|
137 |
+
msgid "Translate this plugin on WordPress.org"
|
138 |
+
msgstr ""
|
139 |
+
|
140 |
+
#: modules/finder/plugin-polylang.php:35
|
141 |
+
msgctxt "Category title in Elementor Finder"
|
142 |
+
msgid "Polylang - Multilingual Plugin"
|
143 |
+
msgstr ""
|
144 |
+
|
145 |
+
#: modules/finder/plugin-polylang.php:56
|
146 |
+
msgctxt "Item title part in Elementor Finder"
|
147 |
+
msgid "Polylang"
|
148 |
+
msgstr ""
|
149 |
+
|
150 |
+
#: modules/finder/plugin-polylang.php:59
|
151 |
+
msgctxt "Item title part in Elementor Finder"
|
152 |
+
msgid "Polylang Pro"
|
153 |
+
msgstr ""
|
154 |
+
|
155 |
+
#: modules/finder/plugin-polylang.php:63
|
156 |
+
msgctxt "Item title part in Elementor Finder"
|
157 |
+
msgid "Website Language"
|
158 |
+
msgstr ""
|
159 |
+
|
160 |
+
#: modules/finder/plugin-polylang.php:66
|
161 |
+
msgctxt "Item title part in Elementor Finder"
|
162 |
+
msgid "Polylang Language"
|
163 |
+
msgstr ""
|
164 |
+
|
165 |
+
#: modules/finder/plugin-polylang.php:69
|
166 |
+
msgctxt "Item title part in Elementor Finder"
|
167 |
+
msgid "Polylang Pro Language"
|
168 |
+
msgstr ""
|
169 |
+
|
170 |
+
#: modules/finder/plugin-polylang.php:86
|
171 |
+
msgid "View website in this language"
|
172 |
+
msgstr ""
|
173 |
+
|
174 |
+
#: modules/finder/plugin-polylang.php:105
|
175 |
+
msgid "Edit this language"
|
176 |
+
msgstr ""
|
177 |
+
|
178 |
+
#: modules/finder/plugin-polylang.php:119
|
179 |
+
msgctxt "Title in Elementor Finder"
|
180 |
+
msgid "Setup languages"
|
181 |
+
msgstr ""
|
182 |
+
|
183 |
+
#: modules/finder/plugin-polylang.php:123
|
184 |
+
msgid "All languages your website appears in"
|
185 |
+
msgstr ""
|
186 |
+
|
187 |
+
#: modules/finder/plugin-polylang.php:128
|
188 |
+
msgctxt "Title in Elementor Finder"
|
189 |
+
msgid "String Translations"
|
190 |
+
msgstr ""
|
191 |
+
|
192 |
+
#: modules/finder/plugin-polylang.php:132
|
193 |
+
msgid "From Widgets and other website parts"
|
194 |
+
msgstr ""
|
195 |
+
|
196 |
+
#: modules/finder/plugin-polylang.php:137
|
197 |
+
msgctxt "Title in Elementor Finder"
|
198 |
+
msgid "Settings"
|
199 |
+
msgstr ""
|
200 |
+
|
201 |
+
#: modules/finder/plugin-polylang.php:141
|
202 |
+
msgid "Plugin's settings, enable/ disable modules"
|
203 |
+
msgstr ""
|
204 |
+
|
205 |
+
#: modules/finder/plugin-polylang.php:146
|
206 |
+
msgctxt "Title in Elementor Finder"
|
207 |
+
msgid "Plugin Documentation"
|
208 |
+
msgstr ""
|
209 |
+
|
210 |
+
#: modules/finder/plugin-polylang.php:150
|
211 |
+
msgid "FAQ, Knowledge Base and Documentation"
|
212 |
+
msgstr ""
|
213 |
+
|
214 |
+
#: modules/finder/plugin-polylang.php:162
|
215 |
+
msgctxt "Title in Elementor Finder"
|
216 |
+
msgid "Support Forum"
|
217 |
+
msgstr ""
|
218 |
+
|
219 |
+
#: modules/widgets/polylang-language-switcher.php:66
|
220 |
+
msgctxt "Elementor widget title"
|
221 |
+
msgid "Polylang Switcher"
|
222 |
+
msgstr ""
|
223 |
+
|
224 |
+
#: modules/widgets/polylang-language-switcher.php:174
|
225 |
+
msgid "Content"
|
226 |
+
msgstr ""
|
227 |
+
|
228 |
+
#: modules/widgets/polylang-language-switcher.php:181
|
229 |
+
msgid "Layout"
|
230 |
+
msgstr ""
|
231 |
+
|
232 |
+
#: modules/widgets/polylang-language-switcher.php:185
|
233 |
+
msgid "Horizontal"
|
234 |
+
msgstr ""
|
235 |
+
|
236 |
+
#: modules/widgets/polylang-language-switcher.php:186
|
237 |
+
msgid "Vertical"
|
238 |
+
msgstr ""
|
239 |
+
|
240 |
+
#: modules/widgets/polylang-language-switcher.php:196
|
241 |
+
msgid "Align"
|
242 |
+
msgstr ""
|
243 |
+
|
244 |
+
#: modules/widgets/polylang-language-switcher.php:200
|
245 |
+
msgid "Left"
|
246 |
+
msgstr ""
|
247 |
+
|
248 |
+
#: modules/widgets/polylang-language-switcher.php:204
|
249 |
+
msgid "Center"
|
250 |
+
msgstr ""
|
251 |
+
|
252 |
+
#: modules/widgets/polylang-language-switcher.php:208
|
253 |
+
msgid "Right"
|
254 |
+
msgstr ""
|
255 |
+
|
256 |
+
#: modules/widgets/polylang-language-switcher.php:212
|
257 |
+
msgid "Stretch"
|
258 |
+
msgstr ""
|
259 |
+
|
260 |
+
#: modules/widgets/polylang-language-switcher.php:224
|
261 |
+
msgid "Hide the current language"
|
262 |
+
msgstr ""
|
263 |
+
|
264 |
+
#: modules/widgets/polylang-language-switcher.php:235
|
265 |
+
msgid "Hide languages with no translation"
|
266 |
+
msgstr ""
|
267 |
+
|
268 |
+
#: modules/widgets/polylang-language-switcher.php:245
|
269 |
+
msgid "Show Country Flag"
|
270 |
+
msgstr ""
|
271 |
+
|
272 |
+
#: modules/widgets/polylang-language-switcher.php:255
|
273 |
+
msgid "Show Language Name"
|
274 |
+
msgstr ""
|
275 |
+
|
276 |
+
#: modules/widgets/polylang-language-switcher.php:265
|
277 |
+
msgid "Show Language Code"
|
278 |
+
msgstr ""
|
279 |
+
|
280 |
+
#: modules/widgets/polylang-language-switcher.php:280
|
281 |
+
msgid "All languages"
|
282 |
+
msgstr ""
|
283 |
+
|
284 |
+
#: modules/widgets/polylang-language-switcher.php:287
|
285 |
+
msgid "Display widget for:"
|
286 |
+
msgstr ""
|
287 |
+
|
288 |
+
#: modules/widgets/polylang-language-switcher.php:301
|
289 |
+
#: modules/widgets/polylang-language-switcher.php:635
|
290 |
+
msgid "Main Menu"
|
291 |
+
msgstr ""
|
292 |
+
|
293 |
+
#: modules/widgets/polylang-language-switcher.php:311
|
294 |
+
msgid "Normal"
|
295 |
+
msgstr ""
|
296 |
+
|
297 |
+
#: modules/widgets/polylang-language-switcher.php:327
|
298 |
+
#: modules/widgets/polylang-language-switcher.php:364
|
299 |
+
#: modules/widgets/polylang-language-switcher.php:408
|
300 |
+
msgid "Text Color"
|
301 |
+
msgstr ""
|
302 |
+
|
303 |
+
#: modules/widgets/polylang-language-switcher.php:345
|
304 |
+
msgid "Hover"
|
305 |
+
msgstr ""
|
306 |
+
|
307 |
+
#: modules/widgets/polylang-language-switcher.php:383
|
308 |
+
msgid "Active"
|
309 |
+
msgstr ""
|
310 |
+
|
311 |
+
#: modules/widgets/polylang-language-switcher.php:391
|
312 |
+
msgid ""
|
313 |
+
"This controls the item in the Switcher for the current active language"
|
314 |
+
msgstr ""
|
315 |
+
|
316 |
+
#: modules/widgets/polylang-language-switcher.php:420
|
317 |
+
msgid "Text Hover Color"
|
318 |
+
msgstr ""
|
319 |
+
|
320 |
+
#: modules/widgets/polylang-language-switcher.php:436
|
321 |
+
msgid "Horizontal Padding"
|
322 |
+
msgstr ""
|
323 |
+
|
324 |
+
#: modules/widgets/polylang-language-switcher.php:453
|
325 |
+
msgid "Vertical Padding"
|
326 |
+
msgstr ""
|
327 |
+
|
328 |
+
#: modules/widgets/polylang-language-switcher.php:469
|
329 |
+
msgid "Space Between"
|
330 |
+
msgstr ""
|
331 |
+
|
332 |
+
#: modules/widgets/polylang-language-switcher.php:500
|
333 |
+
msgid "Country Flag"
|
334 |
+
msgstr ""
|
335 |
+
|
336 |
+
#: modules/widgets/polylang-language-switcher.php:511
|
337 |
+
#: modules/widgets/polylang-language-switcher.php:548
|
338 |
+
#: modules/widgets/polylang-language-switcher.php:585
|
339 |
+
msgid "Margin"
|
340 |
+
msgstr ""
|
341 |
+
|
342 |
+
#: modules/widgets/polylang-language-switcher.php:538
|
343 |
+
#: modules/widgets/polylang-language-switcher.php:575
|
344 |
+
msgid "Uppercase"
|
345 |
+
msgstr ""
|
346 |
+
|
347 |
+
#: modules/widgets/polylang-language-switcher.php:564
|
348 |
+
msgid "Language Code"
|
349 |
+
msgstr ""
|
350 |
+
|
351 |
+
#: modules/widgets/polylang-language-switcher.php:597
|
352 |
+
msgid "Text before"
|
353 |
+
msgstr ""
|
354 |
+
|
355 |
+
#: modules/widgets/polylang-language-switcher.php:605
|
356 |
+
msgid "Text after"
|
357 |
+
msgstr ""
|
358 |
+
|
359 |
+
#: modules/widgets/polylang-language-switcher.php:617
|
360 |
+
msgid "Helpful Information"
|
361 |
+
msgstr ""
|
362 |
+
|
363 |
+
#: modules/widgets/polylang-language-switcher.php:624
|
364 |
+
msgid "Country Flags"
|
365 |
+
msgstr ""
|
366 |
+
|
367 |
+
#. translators: %1$s - <code>16px</code> (width 16px) / %2$s - <code>11px</code> (height 11px)
|
368 |
+
#: modules/widgets/polylang-language-switcher.php:627
|
369 |
+
#, php-format
|
370 |
+
msgid ""
|
371 |
+
"Country flags are by default used from Polylang plugin and have the static "
|
372 |
+
"size of %1$s wide and %2$s high."
|
373 |
+
msgstr ""
|
374 |
+
|
375 |
+
#: modules/widgets/polylang-language-switcher.php:634
|
376 |
+
msgid "Style"
|
377 |
+
msgstr ""
|
378 |
+
|
379 |
+
#: modules/widgets/polylang-language-switcher.php:636
|
380 |
+
msgid "Tab: \"Active\""
|
381 |
+
msgstr ""
|
382 |
+
|
383 |
+
#: modules/widgets/polylang-language-switcher.php:637
|
384 |
+
msgid ""
|
385 |
+
"This marks the language of currently viewed content - on the frontend. In "
|
386 |
+
"Elementor Editor Panel this could be different."
|
387 |
+
msgstr ""
|
388 |
+
|
389 |
+
#. Plugin Name of the plugin/theme
|
390 |
+
msgid "Polylang Connect for Elementor"
|
391 |
+
msgstr ""
|
392 |
+
|
393 |
+
#. Plugin URI of the plugin/theme
|
394 |
+
msgid "https://github.com/deckerweb/connect-polylang-elementor"
|
395 |
+
msgstr ""
|
396 |
+
|
397 |
+
#. Description of the plugin/theme
|
398 |
+
msgid ""
|
399 |
+
"Connect the Polylang multilingual plugin with Elementor Page Builder: This "
|
400 |
+
"plugin will make Elementor and Polylang show the correct language "
|
401 |
+
"templates, especially with Elementor Pro Theme Builder. Plus: native "
|
402 |
+
"Polylang Language Switcher Elementor widget, new Dynamic Tags, and "
|
403 |
+
"Polylang links added to the Elementor Finder feature."
|
404 |
+
msgstr ""
|
405 |
+
|
406 |
+
#. Author URI of the plugin/theme
|
407 |
+
msgid "https://deckerweb.de/"
|
408 |
+
msgstr ""
|
languages/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Do not modify the files in this folder.
|
4 |
+
*/
|
languages/readme.txt
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# .pot File
|
2 |
+
|
3 |
+
The .pot file is always included in:
|
4 |
+
`/connect-polylang-elementor/languages/connect-polylang-elementor.pot`
|
5 |
+
|
6 |
+
--------------------------------------------------------------------------------
|
7 |
+
|
8 |
+
# Language Packs
|
9 |
+
|
10 |
+
Community Translations for this plugin are handled via:
|
11 |
+
https://translate.wordpress.org/projects/wp-plugins/connect-polylang-elementor
|
12 |
+
|
13 |
+
* You are invited to contribute there for your language
|
14 |
+
* Translations there which are 95% or more complete will be automatically loaded
|
15 |
+
in WordPress as language pack for the plugin and are also updateable
|
16 |
+
|
17 |
+
Thank you for your contribution!
|
18 |
+
|
19 |
+
--------------------------------------------------------------------------------
|
20 |
+
|
21 |
+
# Custom Translations
|
22 |
+
|
23 |
+
If you want or need custom translations different from the Community
|
24 |
+
translations above, you can do that easily:
|
25 |
+
Create your translation with "Poedit" (https://poedit.net/wordpress)
|
26 |
+
or "Loco Translate" plugin (https://wordpress.org/plugins/loco-translate/)
|
27 |
+
and upload the translation file there:
|
28 |
+
`/wp-content/languages/connect-polylang-elementor/`
|
29 |
+
|
30 |
+
for example the German version would looke like that:
|
31 |
+
`/wp-content/languages/connect-polylang-elementor/connect-polylang-elementor-de_DE.mo`
|
32 |
+
|
33 |
+
Note: The location `/wp-content/languages/` is the global translation folder -
|
34 |
+
if it does not exist yet in your installation just create it.
|
modules/connect/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Do not modify the files in this folder.
|
4 |
+
*/
|
modules/connect/tweaks-polylang-elementor.php
ADDED
@@ -0,0 +1,129 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// modules/connect/tweaks-polylang-elementor
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Prevent direct access to this file.
|
7 |
+
*
|
8 |
+
* @since 1.0.0
|
9 |
+
*/
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
+
exit( 'Sorry, you are not allowed to access this file directly.' );
|
12 |
+
}
|
13 |
+
|
14 |
+
|
15 |
+
add_filter( 'pll_get_post_types', 'ddw_cpel_add_cpts_to_polylang', 10, 2 );
|
16 |
+
/**
|
17 |
+
* Enable Elementor-specific post types automatically for Polylang support.
|
18 |
+
*
|
19 |
+
* @link https://polylang.pro/doc/filter-reference/
|
20 |
+
*
|
21 |
+
* @since 1.0.0
|
22 |
+
*
|
23 |
+
* @param bool $is_settings Whether a post type is already added to Polylang
|
24 |
+
* or not.
|
25 |
+
* @param array $post_types Holds all Polylang-added post types.
|
26 |
+
* @return array Modified array of post types.
|
27 |
+
*/
|
28 |
+
function ddw_cpel_add_cpts_to_polylang( $post_types, $is_settings ) {
|
29 |
+
|
30 |
+
/** Bail early if integration not wanted */
|
31 |
+
if ( ! apply_filters( 'cpel/filter/polylang/posttypes_automatic', TRUE ) ) {
|
32 |
+
return;
|
33 |
+
}
|
34 |
+
|
35 |
+
/** Set Elementor-relevant post types */
|
36 |
+
$relevant_types = apply_filters(
|
37 |
+
'cpel/filter/polylang/post_types',
|
38 |
+
array(
|
39 |
+
'elementor_library', // Elementor
|
40 |
+
'oceanwp_library', // OceanWP Library
|
41 |
+
'astra-advanced-hook', // Astra Custom Layouts (Astra Pro)
|
42 |
+
'gp_elements', // GeneratePress Elements (GP Premium)
|
43 |
+
'jet-theme-core', // JetThemeCore (Kava Pro/ CrocoBlock)
|
44 |
+
'customify_hook', // Customify (Customify Pro)
|
45 |
+
'wpbf_hooks', // Page Builder Framework Sections (WPBF Premium)
|
46 |
+
'ae_global_templates', // AnyWhere Elementor plugin
|
47 |
+
)
|
48 |
+
);
|
49 |
+
|
50 |
+
/** Add all post types to Polylang */
|
51 |
+
foreach ( $relevant_types as $relevant_type ) {
|
52 |
+
$post_types[ $relevant_type ] = $relevant_type;
|
53 |
+
}
|
54 |
+
|
55 |
+
/** Return modified post types list for Polylang */
|
56 |
+
return $post_types;
|
57 |
+
|
58 |
+
} // end function
|
59 |
+
|
60 |
+
|
61 |
+
add_action( 'parse_query', 'ddw_cpel_polylang_elementor_library_conditions_parse_query', 1 );
|
62 |
+
/**
|
63 |
+
* Fix for Elementor template conditions not compatible with Polylang (you need
|
64 |
+
* to save again one of your templates conditions to make it work, after
|
65 |
+
* putting this function in your plugin/theme).
|
66 |
+
* Note: Needs to be priority 1, since Polylang uses the action parse_query
|
67 |
+
* which is fired before 'pre_get_posts'.
|
68 |
+
*
|
69 |
+
* @link https://github.com/polylang/polylang/issues/152#issuecomment-320602328
|
70 |
+
* @link https://github.com/pojome/elementor/issues/4839
|
71 |
+
*
|
72 |
+
* @since 1.0.0
|
73 |
+
*
|
74 |
+
* @param WP_Query $query
|
75 |
+
*/
|
76 |
+
function ddw_cpel_polylang_elementor_library_conditions_parse_query( $query ) {
|
77 |
+
|
78 |
+
if ( is_admin() && ! empty( $query->query_vars[ 'post_type' ] ) && 'elementor_library' === $query->query_vars[ 'post_type' ]
|
79 |
+
&& ! empty( $query->query_vars[ 'meta_key' ] )
|
80 |
+
&& '_elementor_conditions' === $query->query_vars[ 'meta_key' ]
|
81 |
+
) {
|
82 |
+
$query->set( 'lang', '' );
|
83 |
+
}
|
84 |
+
|
85 |
+
} // end function
|
86 |
+
|
87 |
+
|
88 |
+
add_filter( 'elementor/theme/get_location_templates/template_id', 'ddw_cpel_change_template_based_on_language' );
|
89 |
+
/**
|
90 |
+
* Filter Elementor conditions system: Change Elementor template based on an
|
91 |
+
* assigned language in Polylang plugin.
|
92 |
+
*
|
93 |
+
* @link https://github.com/pojome/elementor/issues/4839
|
94 |
+
*
|
95 |
+
* @since 1.0.0
|
96 |
+
*
|
97 |
+
* @uses pll_get_post()
|
98 |
+
*
|
99 |
+
* @param int $post_id ID of the current post.
|
100 |
+
* @return string Based translation, the translation ID, or the original Post ID.
|
101 |
+
*/
|
102 |
+
function ddw_cpel_change_template_based_on_language( $post_id ) {
|
103 |
+
|
104 |
+
if ( function_exists( 'pll_get_post' ) ) {
|
105 |
+
|
106 |
+
$translation_post_id = pll_get_post( $post_id );
|
107 |
+
|
108 |
+
if ( null === $translation_post_id ) {
|
109 |
+
|
110 |
+
/** The current language is not defined yet */
|
111 |
+
return $post_id;
|
112 |
+
|
113 |
+
} elseif ( false === $translation_post_id ) {
|
114 |
+
|
115 |
+
/** No translation yet */
|
116 |
+
return $post_id;
|
117 |
+
|
118 |
+
} elseif ( $translation_post_id > 0 ) {
|
119 |
+
|
120 |
+
/** Return translated post ID */
|
121 |
+
return $translation_post_id;
|
122 |
+
|
123 |
+
} // end if
|
124 |
+
|
125 |
+
} // end if
|
126 |
+
|
127 |
+
return $post_id;
|
128 |
+
|
129 |
+
} // end function
|
modules/dynamic-tags/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Do not modify the files in this folder.
|
4 |
+
*/
|
modules/dynamic-tags/manager.php
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// modules/dynamic-tags/manager
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Prevent direct access to this file.
|
7 |
+
*
|
8 |
+
* @since 1.0.0
|
9 |
+
*/
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
+
exit( 'Sorry, you are not allowed to access this file directly.' );
|
12 |
+
}
|
13 |
+
|
14 |
+
|
15 |
+
add_action( 'elementor/dynamic_tags/register_tags', 'ddw_cpel_register_dynamic_tags_polylang_languages', 10, 1 );
|
16 |
+
/**
|
17 |
+
* Register new Dynamic Tags for Elementor, including a new Tag Group.
|
18 |
+
*
|
19 |
+
* @since 1.0.0
|
20 |
+
*
|
21 |
+
* @uses \Elementor\Plugin()
|
22 |
+
*/
|
23 |
+
function ddw_cpel_register_dynamic_tags_polylang_languages( $dynamic_tags ) {
|
24 |
+
|
25 |
+
/** Register our tag groups before the tags */
|
26 |
+
\Elementor\Plugin::$instance->dynamic_tags->register_group( 'polylang-languages', [
|
27 |
+
'title' => _x( 'Polylang Languages', 'Elementor Dynamic Tags group title', 'connect-polylang-elementor' )
|
28 |
+
] );
|
29 |
+
|
30 |
+
/** Load the Dynamic tags class files */
|
31 |
+
require_once( CPEL_PLUGIN_DIR . 'modules/dynamic-tags/polylang-language-names.php' );
|
32 |
+
require_once( CPEL_PLUGIN_DIR . 'modules/dynamic-tags/polylang-current-language-name.php' );
|
33 |
+
require_once( CPEL_PLUGIN_DIR . 'modules/dynamic-tags/polylang-current-language-code.php' );
|
34 |
+
require_once( CPEL_PLUGIN_DIR . 'modules/dynamic-tags/polylang-current-language-url.php' );
|
35 |
+
require_once( CPEL_PLUGIN_DIR . 'modules/dynamic-tags/polylang-current-language-flag.php' );
|
36 |
+
|
37 |
+
/** Register the tags */
|
38 |
+
$dynamic_tags->register_tag( 'DDW_Polylang_Language_Names_Elementor_Dynamic_Tag' );
|
39 |
+
$dynamic_tags->register_tag( 'DDW_Polylang_Current_Language_Name_Elementor_Dynamic_Tag' );
|
40 |
+
$dynamic_tags->register_tag( 'DDW_Polylang_Current_Language_Code_Elementor_Dynamic_Tag' );
|
41 |
+
$dynamic_tags->register_tag( 'DDW_Polylang_Current_Language_URL_Elementor_Dynamic_Tag' );
|
42 |
+
$dynamic_tags->register_tag( 'DDW_Polylang_Current_Language_Flag_Elementor_Dynamic_Tag' );
|
43 |
+
|
44 |
+
} // end function
|
modules/dynamic-tags/polylang-current-language-code.php
ADDED
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// modules/dynamic-tags/polylang-current-language-code
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Prevent direct access to this file.
|
7 |
+
*
|
8 |
+
* @since 1.0.0
|
9 |
+
*/
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
+
exit( 'Sorry, you are not allowed to access this file directly.' );
|
12 |
+
}
|
13 |
+
|
14 |
+
|
15 |
+
class DDW_Polylang_Current_Language_Code_Elementor_Dynamic_Tag extends \Elementor\Core\DynamicTags\Tag {
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Get Name
|
19 |
+
*
|
20 |
+
* Returns the Name of the tag
|
21 |
+
*
|
22 |
+
* @since 1.0.0
|
23 |
+
* @access public
|
24 |
+
*
|
25 |
+
* @return string
|
26 |
+
*/
|
27 |
+
public function get_name() {
|
28 |
+
|
29 |
+
return 'current-language-code';
|
30 |
+
|
31 |
+
} // end method
|
32 |
+
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Get Title
|
36 |
+
*
|
37 |
+
* Returns the title of the Tag
|
38 |
+
*
|
39 |
+
* @since 1.0.0
|
40 |
+
* @access public
|
41 |
+
*
|
42 |
+
* @return string
|
43 |
+
*/
|
44 |
+
public function get_title() {
|
45 |
+
|
46 |
+
return _x( 'Current Language Code', 'Elementor Dynamic Tag title', 'connect-polylang-elementor' );
|
47 |
+
|
48 |
+
} // end method
|
49 |
+
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Get Group
|
53 |
+
*
|
54 |
+
* Returns the Group of the tag
|
55 |
+
*
|
56 |
+
* @since 1.0.0
|
57 |
+
* @access public
|
58 |
+
*
|
59 |
+
* @return string
|
60 |
+
*/
|
61 |
+
public function get_group() {
|
62 |
+
|
63 |
+
return 'polylang-languages';
|
64 |
+
|
65 |
+
} // end method
|
66 |
+
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Get Categories
|
70 |
+
*
|
71 |
+
* Returns an array of tag categories
|
72 |
+
*
|
73 |
+
* @since 1.0.0
|
74 |
+
* @access public
|
75 |
+
*
|
76 |
+
* @return array
|
77 |
+
*/
|
78 |
+
public function get_categories() {
|
79 |
+
|
80 |
+
return [ \Elementor\Modules\DynamicTags\Module::TEXT_CATEGORY ];
|
81 |
+
|
82 |
+
} // end method
|
83 |
+
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Render
|
87 |
+
*
|
88 |
+
* Prints out the value of the Dynamic tag
|
89 |
+
*
|
90 |
+
* @since 1.0.0
|
91 |
+
* @access public
|
92 |
+
*
|
93 |
+
* @uses pll_current_language()
|
94 |
+
*
|
95 |
+
* @return void
|
96 |
+
*/
|
97 |
+
public function render() {
|
98 |
+
|
99 |
+
echo wp_kses_post( pll_current_language( $field = 'slug' ) );
|
100 |
+
|
101 |
+
} // end method
|
102 |
+
|
103 |
+
} // end of class
|
modules/dynamic-tags/polylang-current-language-flag.php
ADDED
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// modules/dynamic-tags/polylang-current-language-flag
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Prevent direct access to this file.
|
7 |
+
*
|
8 |
+
* @since 1.0.0
|
9 |
+
*/
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
+
exit( 'Sorry, you are not allowed to access this file directly.' );
|
12 |
+
}
|
13 |
+
|
14 |
+
|
15 |
+
class DDW_Polylang_Current_Language_Flag_Elementor_Dynamic_Tag extends \Elementor\Core\DynamicTags\Data_Tag {
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Get Name
|
19 |
+
*
|
20 |
+
* Returns the Name of the tag
|
21 |
+
*
|
22 |
+
* @since 1.0.0
|
23 |
+
* @access public
|
24 |
+
*
|
25 |
+
* @return string
|
26 |
+
*/
|
27 |
+
public function get_name() {
|
28 |
+
|
29 |
+
return 'current-language-flag';
|
30 |
+
|
31 |
+
} // end method
|
32 |
+
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Get Title
|
36 |
+
*
|
37 |
+
* Returns the title of the Tag
|
38 |
+
*
|
39 |
+
* @since 1.0.0
|
40 |
+
* @access public
|
41 |
+
*
|
42 |
+
* @return string
|
43 |
+
*/
|
44 |
+
public function get_title() {
|
45 |
+
|
46 |
+
return _x( 'Current Language Flag', 'Elementor Dynamic Tag title', 'connect-polylang-elementor' );
|
47 |
+
|
48 |
+
} // end method
|
49 |
+
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Get Group
|
53 |
+
*
|
54 |
+
* Returns the Group of the tag
|
55 |
+
*
|
56 |
+
* @since 1.0.0
|
57 |
+
* @access public
|
58 |
+
*
|
59 |
+
* @return string
|
60 |
+
*/
|
61 |
+
public function get_group() {
|
62 |
+
|
63 |
+
return 'polylang-languages';
|
64 |
+
|
65 |
+
} // end method
|
66 |
+
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Get Categories
|
70 |
+
*
|
71 |
+
* Returns an array of tag categories
|
72 |
+
*
|
73 |
+
* @since 1.0.0
|
74 |
+
* @access public
|
75 |
+
*
|
76 |
+
* @return array
|
77 |
+
*/
|
78 |
+
public function get_categories() {
|
79 |
+
|
80 |
+
return [ \Elementor\Modules\DynamicTags\Module::IMAGE_CATEGORY ];
|
81 |
+
|
82 |
+
} // end method
|
83 |
+
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Render
|
87 |
+
*
|
88 |
+
* Prints out the value of the Dynamic tag
|
89 |
+
*
|
90 |
+
* @since 1.0.0
|
91 |
+
* @access public
|
92 |
+
*
|
93 |
+
* @uses pll_current_language()
|
94 |
+
*
|
95 |
+
* @return void
|
96 |
+
*/
|
97 |
+
public function get_value( array $options = [] ) {
|
98 |
+
|
99 |
+
$image_data = [
|
100 |
+
'id' => (int) pll_current_language( $field = 'term_id' ),
|
101 |
+
'url' => pll_current_language( $field = 'flag_url' ),
|
102 |
+
];
|
103 |
+
|
104 |
+
return $image_data;
|
105 |
+
|
106 |
+
} // end method
|
107 |
+
|
108 |
+
} // end of class
|
modules/dynamic-tags/polylang-current-language-name.php
ADDED
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// modules/dynamic-tags/polylang-current-language-name
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Prevent direct access to this file.
|
7 |
+
*
|
8 |
+
* @since 1.0.0
|
9 |
+
*/
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
+
exit( 'Sorry, you are not allowed to access this file directly.' );
|
12 |
+
}
|
13 |
+
|
14 |
+
|
15 |
+
class DDW_Polylang_Current_Language_Name_Elementor_Dynamic_Tag extends \Elementor\Core\DynamicTags\Tag {
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Get Name
|
19 |
+
*
|
20 |
+
* Returns the Name of the tag
|
21 |
+
*
|
22 |
+
* @since 1.0.0
|
23 |
+
* @access public
|
24 |
+
*
|
25 |
+
* @return string
|
26 |
+
*/
|
27 |
+
public function get_name() {
|
28 |
+
|
29 |
+
return 'current-language-name';
|
30 |
+
|
31 |
+
} // end method
|
32 |
+
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Get Title
|
36 |
+
*
|
37 |
+
* Returns the title of the Tag
|
38 |
+
*
|
39 |
+
* @since 1.0.0
|
40 |
+
* @access public
|
41 |
+
*
|
42 |
+
* @return string
|
43 |
+
*/
|
44 |
+
public function get_title() {
|
45 |
+
|
46 |
+
return _x( 'Current Language Name', 'Elementor Dynamic Tag title', 'connect-polylang-elementor' );
|
47 |
+
|
48 |
+
} // end method
|
49 |
+
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Get Group
|
53 |
+
*
|
54 |
+
* Returns the Group of the tag
|
55 |
+
*
|
56 |
+
* @since 1.0.0
|
57 |
+
* @access public
|
58 |
+
*
|
59 |
+
* @return string
|
60 |
+
*/
|
61 |
+
public function get_group() {
|
62 |
+
|
63 |
+
return 'polylang-languages';
|
64 |
+
|
65 |
+
} // end method
|
66 |
+
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Get Categories
|
70 |
+
*
|
71 |
+
* Returns an array of tag categories
|
72 |
+
*
|
73 |
+
* @since 1.0.0
|
74 |
+
* @access public
|
75 |
+
*
|
76 |
+
* @return array
|
77 |
+
*/
|
78 |
+
public function get_categories() {
|
79 |
+
|
80 |
+
return [ \Elementor\Modules\DynamicTags\Module::TEXT_CATEGORY ];
|
81 |
+
|
82 |
+
} // end method
|
83 |
+
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Render
|
87 |
+
*
|
88 |
+
* Prints out the value of the Dynamic tag
|
89 |
+
*
|
90 |
+
* @since 1.0.0
|
91 |
+
* @access public
|
92 |
+
*
|
93 |
+
* @uses pll_current_language()
|
94 |
+
*
|
95 |
+
* @return void
|
96 |
+
*/
|
97 |
+
public function render() {
|
98 |
+
|
99 |
+
echo wp_kses_post( pll_current_language( $field = 'name' ) );
|
100 |
+
|
101 |
+
} // end method
|
102 |
+
|
103 |
+
} // end of class
|
modules/dynamic-tags/polylang-current-language-url.php
ADDED
@@ -0,0 +1,119 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// modules/dynamic-tags/polylang-current-language-url
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Prevent direct access to this file.
|
7 |
+
*
|
8 |
+
* @since 1.0.0
|
9 |
+
*/
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
+
exit( 'Sorry, you are not allowed to access this file directly.' );
|
12 |
+
}
|
13 |
+
|
14 |
+
|
15 |
+
class DDW_Polylang_Current_Language_URL_Elementor_Dynamic_Tag extends \Elementor\Core\DynamicTags\Data_Tag {
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Get Name
|
19 |
+
*
|
20 |
+
* Returns the Name of the tag
|
21 |
+
*
|
22 |
+
* @since 1.0.0
|
23 |
+
* @access public
|
24 |
+
*
|
25 |
+
* @return string
|
26 |
+
*/
|
27 |
+
public function get_name() {
|
28 |
+
|
29 |
+
return 'current-language-url';
|
30 |
+
|
31 |
+
} // end method
|
32 |
+
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Get Title
|
36 |
+
*
|
37 |
+
* Returns the title of the Tag
|
38 |
+
*
|
39 |
+
* @since 1.0.0
|
40 |
+
* @access public
|
41 |
+
*
|
42 |
+
* @return string
|
43 |
+
*/
|
44 |
+
public function get_title() {
|
45 |
+
|
46 |
+
return _x( 'Current Language URL', 'Elementor Dynamic Tag title', 'connect-polylang-elementor' );
|
47 |
+
|
48 |
+
} // end method
|
49 |
+
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Get Group
|
53 |
+
*
|
54 |
+
* Returns the Group of the tag
|
55 |
+
*
|
56 |
+
* @since 1.0.0
|
57 |
+
* @access public
|
58 |
+
*
|
59 |
+
* @return string
|
60 |
+
*/
|
61 |
+
public function get_group() {
|
62 |
+
|
63 |
+
return 'polylang-languages';
|
64 |
+
|
65 |
+
} // end method
|
66 |
+
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Get Categories
|
70 |
+
*
|
71 |
+
* Returns an array of tag categories
|
72 |
+
*
|
73 |
+
* @since 1.0.0
|
74 |
+
* @access public
|
75 |
+
*
|
76 |
+
* @return array
|
77 |
+
*/
|
78 |
+
public function get_categories() {
|
79 |
+
|
80 |
+
return [ \Elementor\Modules\DynamicTags\Module::URL_CATEGORY ];
|
81 |
+
|
82 |
+
} // end method
|
83 |
+
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Render
|
87 |
+
*
|
88 |
+
* Prints out the value of the Dynamic tag
|
89 |
+
*
|
90 |
+
* @since 1.0.0
|
91 |
+
* @access public
|
92 |
+
*
|
93 |
+
* @uses pll_the_languages()
|
94 |
+
*
|
95 |
+
* @return void
|
96 |
+
*/
|
97 |
+
public function get_value( array $options = [] ) {
|
98 |
+
|
99 |
+
/** Get all Polylang languages */
|
100 |
+
$languages = pll_the_languages( array( 'raw' => 1 ) );
|
101 |
+
|
102 |
+
if ( ! empty( $languages ) ) {
|
103 |
+
|
104 |
+
foreach ( $languages as $language ) {
|
105 |
+
|
106 |
+
/** If current language found, stop the loop */
|
107 |
+
if ( $language[ 'current_lang' ] ) {
|
108 |
+
break;
|
109 |
+
}
|
110 |
+
|
111 |
+
} // end foreach
|
112 |
+
|
113 |
+
} // end if
|
114 |
+
|
115 |
+
return esc_url_raw( $language[ 'url' ] );
|
116 |
+
|
117 |
+
} // end method
|
118 |
+
|
119 |
+
} // end of class
|
modules/dynamic-tags/polylang-language-names.php
ADDED
@@ -0,0 +1,141 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// modules/dynamic-tags/polylang-language-names
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Prevent direct access to this file.
|
7 |
+
*
|
8 |
+
* @since 1.0.0
|
9 |
+
*/
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
+
exit( 'Sorry, you are not allowed to access this file directly.' );
|
12 |
+
}
|
13 |
+
|
14 |
+
|
15 |
+
class DDW_Polylang_Language_Names_Elementor_Dynamic_Tag extends \Elementor\Core\DynamicTags\Tag {
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Get Name
|
19 |
+
*
|
20 |
+
* Returns the Name of the tag
|
21 |
+
*
|
22 |
+
* @since 1.0.0
|
23 |
+
* @access public
|
24 |
+
*
|
25 |
+
* @return string
|
26 |
+
*/
|
27 |
+
public function get_name() {
|
28 |
+
|
29 |
+
return 'language-names';
|
30 |
+
|
31 |
+
} // end method
|
32 |
+
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Get Title
|
36 |
+
*
|
37 |
+
* Returns the title of the Tag
|
38 |
+
*
|
39 |
+
* @since 1.0.0
|
40 |
+
* @access public
|
41 |
+
*
|
42 |
+
* @return string
|
43 |
+
*/
|
44 |
+
public function get_title() {
|
45 |
+
|
46 |
+
return _x( 'Language Names', 'Elementor Dynamic Tag title', 'connect-polylang-elementor' );
|
47 |
+
|
48 |
+
} // end method
|
49 |
+
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Get Group
|
53 |
+
*
|
54 |
+
* Returns the Group of the tag
|
55 |
+
*
|
56 |
+
* @since 1.0.0
|
57 |
+
* @access public
|
58 |
+
*
|
59 |
+
* @return string
|
60 |
+
*/
|
61 |
+
public function get_group() {
|
62 |
+
|
63 |
+
return 'polylang-languages';
|
64 |
+
|
65 |
+
} // end method
|
66 |
+
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Get Categories
|
70 |
+
*
|
71 |
+
* Returns an array of tag categories
|
72 |
+
*
|
73 |
+
* @since 1.0.0
|
74 |
+
* @access public
|
75 |
+
*
|
76 |
+
* @return array
|
77 |
+
*/
|
78 |
+
public function get_categories() {
|
79 |
+
|
80 |
+
return [ \Elementor\Modules\DynamicTags\Module::TEXT_CATEGORY ];
|
81 |
+
|
82 |
+
} // end method
|
83 |
+
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Register Controls
|
87 |
+
*
|
88 |
+
* Registers the Dynamic tag controls
|
89 |
+
*
|
90 |
+
* @since 1.0.0
|
91 |
+
* @access protected
|
92 |
+
*
|
93 |
+
* @uses pll_languages_list()
|
94 |
+
*
|
95 |
+
* @return void
|
96 |
+
*/
|
97 |
+
protected function _register_controls() {
|
98 |
+
|
99 |
+
$languages = pll_languages_list( array( 'fields' => FALSE ) );
|
100 |
+
|
101 |
+
$lang_names = [];
|
102 |
+
|
103 |
+
foreach ( $languages as $language ) {
|
104 |
+
$lang_names[ $language->name ] = $language->name;
|
105 |
+
}
|
106 |
+
|
107 |
+
$this->add_control(
|
108 |
+
'polylang_language_name',
|
109 |
+
[
|
110 |
+
'label' => __( 'Language Name', 'connect-polylang-elementor' ),
|
111 |
+
'type' => \Elementor\Controls_Manager::SELECT,
|
112 |
+
'options' => $lang_names,
|
113 |
+
]
|
114 |
+
);
|
115 |
+
|
116 |
+
} // end method
|
117 |
+
|
118 |
+
|
119 |
+
/**
|
120 |
+
* Render
|
121 |
+
*
|
122 |
+
* Prints out the value of the Dynamic tag
|
123 |
+
*
|
124 |
+
* @since 1.0.0
|
125 |
+
* @access public
|
126 |
+
*
|
127 |
+
* @return void
|
128 |
+
*/
|
129 |
+
public function render() {
|
130 |
+
|
131 |
+
$lang_name = $this->get_settings( 'polylang_language_name' );
|
132 |
+
|
133 |
+
if ( ! $lang_name ) {
|
134 |
+
return;
|
135 |
+
}
|
136 |
+
|
137 |
+
echo esc_attr( $lang_name );
|
138 |
+
|
139 |
+
} // end method
|
140 |
+
|
141 |
+
} // end of class
|
modules/finder/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Do not modify the files in this folder.
|
4 |
+
*/
|
modules/finder/manager.php
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// modules/finder/manager
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Prevent direct access to this file.
|
7 |
+
*
|
8 |
+
* @since 1.0.0
|
9 |
+
*/
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
+
exit( 'Sorry, you are not allowed to access this file directly.' );
|
12 |
+
}
|
13 |
+
|
14 |
+
|
15 |
+
add_action( 'elementor/finder/categories/init', 'ddw_cpel_elementor_finder_add_items' );
|
16 |
+
/**
|
17 |
+
* Add categories to the Elementor Finder (Elementor v2.3.0+).
|
18 |
+
* - Polylang Plugin
|
19 |
+
* - CPEL (this plugin)
|
20 |
+
*
|
21 |
+
* @since 1.0.0
|
22 |
+
*
|
23 |
+
* @param object $categories_manager
|
24 |
+
*/
|
25 |
+
function ddw_cpel_elementor_finder_add_items( $categories_manager ) {
|
26 |
+
|
27 |
+
/** Include the Finder Category class files */
|
28 |
+
require_once( CPEL_PLUGIN_DIR . 'modules/finder/plugin-polylang.php' );
|
29 |
+
require_once( CPEL_PLUGIN_DIR . 'modules/finder/plugin-cpel.php' );
|
30 |
+
|
31 |
+
/** Add the Polyang Plugin category */
|
32 |
+
$categories_manager->add_category( 'polylang-plugin', new DDW_Polylang_Plugin_Finder_Category() );
|
33 |
+
|
34 |
+
/** Add the our own CPEL Plugin category */
|
35 |
+
$categories_manager->add_category( 'connect-polylang-elementor', new DDW_CPEL_Plugin_Finder_Category() );
|
36 |
+
|
37 |
+
} // end function
|
modules/finder/plugin-cpel.php
ADDED
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// modules/finder/plugin-cpel
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Prevent direct access to this file.
|
7 |
+
*
|
8 |
+
* @since 1.0.0
|
9 |
+
*/
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
+
exit( 'Sorry, you are not allowed to access this file directly.' );
|
12 |
+
}
|
13 |
+
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Add the "Polylang Connect for Elementor" category to the Elementor Finder.
|
17 |
+
* - Plugin resources
|
18 |
+
*
|
19 |
+
* @since 1.0.0
|
20 |
+
*/
|
21 |
+
class DDW_CPEL_Plugin_Finder_Category extends \Elementor\Core\Common\Modules\Finder\Base_Category {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get title.
|
25 |
+
*
|
26 |
+
* @since 1.0.0
|
27 |
+
*
|
28 |
+
* @access public
|
29 |
+
*
|
30 |
+
* @return string Translateable category title.
|
31 |
+
*/
|
32 |
+
public function get_title() {
|
33 |
+
|
34 |
+
return _x( 'Add-On: Polylang Connect for Elementor', 'Category title in Elementor Finder', 'connect-polylang-elementor' );
|
35 |
+
|
36 |
+
} // end method
|
37 |
+
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Get category items.
|
41 |
+
*
|
42 |
+
* @since 1.0.0
|
43 |
+
*
|
44 |
+
* @access public
|
45 |
+
*
|
46 |
+
* @uses ddw_cpel_get_info_url()
|
47 |
+
*
|
48 |
+
* @param array $options
|
49 |
+
* @return array $items Filterable array of additional Finder items.
|
50 |
+
*/
|
51 |
+
public function get_category_items( array $options = [] ) {
|
52 |
+
|
53 |
+
/** Set actions */
|
54 |
+
$action_name = 'view';
|
55 |
+
$action_icon = 'eye';
|
56 |
+
|
57 |
+
/** External: FAQ */
|
58 |
+
$items[ 'plugin-faq' ] = [
|
59 |
+
'title' => _x( 'Plugin FAQ', 'Title in Elementor Finder', 'connect-polylang-elementor' ),
|
60 |
+
'url' => ddw_cpel_get_info_url( 'url_wporg_faq' ),
|
61 |
+
'icon' => 'info',
|
62 |
+
'keywords' => [ 'help', 'docs', 'documentation', 'faq', 'knowledge base', 'plugin' ],
|
63 |
+
'description' => __( 'FAQ and Documentation', 'connect-polylang-elementor' ),
|
64 |
+
'actions' => [
|
65 |
+
[
|
66 |
+
'name' => $action_name,
|
67 |
+
'url' => ddw_cpel_get_info_url( 'url_wporg_faq' ),
|
68 |
+
'icon' => $action_icon,
|
69 |
+
],
|
70 |
+
],
|
71 |
+
];
|
72 |
+
|
73 |
+
/** External: WordPress.org support forum */
|
74 |
+
$items[ 'plugin-support-forum' ] = [
|
75 |
+
'title' => _x( 'Plugin Support Forum', 'Title in Elementor Finder', 'connect-polylang-elementor' ),
|
76 |
+
'url' => ddw_cpel_get_info_url( 'url_wporg_forum' ),
|
77 |
+
'icon' => 'comments',
|
78 |
+
'keywords' => [ 'support', 'forum', 'wordpress.org', 'help', 'plugin' ],
|
79 |
+
'description' => __( 'Free support on WordPress.org', 'connect-polylang-elementor' ),
|
80 |
+
'actions' => [
|
81 |
+
[
|
82 |
+
'name' => $action_name,
|
83 |
+
'url' => ddw_cpel_get_info_url( 'url_wporg_forum' ),
|
84 |
+
'icon' => $action_icon,
|
85 |
+
],
|
86 |
+
],
|
87 |
+
];
|
88 |
+
|
89 |
+
/** External: WordPress.org translation platform */
|
90 |
+
$items[ 'plugin-translations' ] = [
|
91 |
+
'title' => _x( 'Plugin Translations', 'Title in Elementor Finder', 'connect-polylang-elementor' ),
|
92 |
+
'url' => ddw_cpel_get_info_url( 'url_translate' ),
|
93 |
+
'icon' => 'exchange',
|
94 |
+
'keywords' => [ 'translate', 'translations', 'wordpress.org', 'glotpress', 'plugin' ],
|
95 |
+
'description' => __( 'Translate this plugin on WordPress.org', 'connect-polylang-elementor' ),
|
96 |
+
'actions' => [
|
97 |
+
[
|
98 |
+
'name' => $action_name,
|
99 |
+
'url' => ddw_cpel_get_info_url( 'url_translate' ),
|
100 |
+
'icon' => $action_icon,
|
101 |
+
],
|
102 |
+
],
|
103 |
+
];
|
104 |
+
|
105 |
+
/** Return items array, filterable */
|
106 |
+
return apply_filters(
|
107 |
+
'cpel/filter/elementor_finder/items/plugin_resources',
|
108 |
+
$items
|
109 |
+
);
|
110 |
+
|
111 |
+
} // end method
|
112 |
+
|
113 |
+
} // end of class
|
modules/finder/plugin-polylang.php
ADDED
@@ -0,0 +1,184 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// modules/finder/plugin-polylang
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Prevent direct access to this file.
|
7 |
+
*
|
8 |
+
* @since 1.0.0
|
9 |
+
*/
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
+
exit( 'Sorry, you are not allowed to access this file directly.' );
|
12 |
+
}
|
13 |
+
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Add the "Polylang" category to the Elementor Finder.
|
17 |
+
* - Settings pages
|
18 |
+
* - Plugin resources
|
19 |
+
*
|
20 |
+
* @since 1.0.0
|
21 |
+
*/
|
22 |
+
class DDW_Polylang_Plugin_Finder_Category extends \Elementor\Core\Common\Modules\Finder\Base_Category {
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Get title.
|
26 |
+
*
|
27 |
+
* @since 1.0.0
|
28 |
+
*
|
29 |
+
* @access public
|
30 |
+
*
|
31 |
+
* @return string Translateable category title.
|
32 |
+
*/
|
33 |
+
public function get_title() {
|
34 |
+
|
35 |
+
return _x( 'Polylang - Multilingual Plugin', 'Category title in Elementor Finder', 'connect-polylang-elementor' );
|
36 |
+
|
37 |
+
} // end method
|
38 |
+
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Get category items.
|
42 |
+
*
|
43 |
+
* @since 1.0.0
|
44 |
+
*
|
45 |
+
* @access public
|
46 |
+
*
|
47 |
+
* @uses ddw_cpel_is_polylang_pro_active()
|
48 |
+
* @uses pll_languages_list() Holds array of Polylang languages.
|
49 |
+
*
|
50 |
+
* @param array $options
|
51 |
+
* @return array $items Filterable array of additional Finder items.
|
52 |
+
*/
|
53 |
+
public function get_category_items( array $options = [] ) {
|
54 |
+
|
55 |
+
/** Set "Polylang (Pro)" string */
|
56 |
+
$string_polylang = _x( 'Polylang', 'Item title part in Elementor Finder', 'connect-polylang-elementor' ) . ': ';
|
57 |
+
|
58 |
+
if ( ddw_cpel_is_polylang_pro_active() ) {
|
59 |
+
$string_polylang = _x( 'Polylang Pro', 'Item title part in Elementor Finder', 'connect-polylang-elementor' ) . ': ';
|
60 |
+
}
|
61 |
+
|
62 |
+
/** Set "Website Language" string */
|
63 |
+
$string_website_lang = _x( 'Website Language', 'Item title part in Elementor Finder', 'connect-polylang-elementor' ) . ': ';
|
64 |
+
|
65 |
+
/** Set "Polylang (Pro) Language" string */
|
66 |
+
$string_polylang_lang = _x( 'Polylang Language', 'Item title part in Elementor Finder', 'connect-polylang-elementor' ) . ': ';
|
67 |
+
|
68 |
+
if ( ddw_cpel_is_polylang_pro_active() ) {
|
69 |
+
$string_polylang_lang = _x( 'Polylang Pro Language', 'Item title part in Elementor Finder', 'connect-polylang-elementor' ) . ': ';
|
70 |
+
}
|
71 |
+
|
72 |
+
/** Set actions */
|
73 |
+
$action_name = 'view';
|
74 |
+
$action_icon = 'eye';
|
75 |
+
|
76 |
+
/** List all setup languages */
|
77 |
+
$languages = pll_languages_list( array( 'fields' => FALSE ) );
|
78 |
+
|
79 |
+
foreach ( $languages as $lang_data ) {
|
80 |
+
|
81 |
+
$items[ 'website-language-' . $lang_data->slug ] = [
|
82 |
+
'title' => $string_website_lang . $lang_data->name,
|
83 |
+
'url' => esc_url( $lang_data->home_url ),
|
84 |
+
'icon' => 'eye',
|
85 |
+
'keywords' => [ 'website', 'polylang', 'language', $lang_data->name, $lang_data->slug, 'country', $lang_data->locale ],
|
86 |
+
'description' => __( 'View website in this language', 'connect-polylang-elementor' ),
|
87 |
+
'actions' => [
|
88 |
+
[
|
89 |
+
'name' => 'edit',
|
90 |
+
'url' => esc_url_raw( admin_url( 'admin.php?page=mlang&pll_action=edit&lang=' . $lang_data->term_id ) ),
|
91 |
+
'icon' => 'edit',
|
92 |
+
],
|
93 |
+
],
|
94 |
+
];
|
95 |
+
|
96 |
+
} // end foreach
|
97 |
+
|
98 |
+
foreach ( $languages as $lang_data ) {
|
99 |
+
|
100 |
+
$items[ 'polylang-language-' . $lang_data->slug ] = [
|
101 |
+
'title' => $string_polylang_lang . $lang_data->name,
|
102 |
+
'url' => esc_url_raw( admin_url( 'admin.php?page=mlang&pll_action=edit&lang=' . $lang_data->term_id ) ),
|
103 |
+
'icon' => 'edit',
|
104 |
+
'keywords' => [ 'polylang', 'language', $lang_data->name, $lang_data->slug, 'country', $lang_data->locale ],
|
105 |
+
'description' => __( 'Edit this language', 'connect-polylang-elementor' ),
|
106 |
+
'actions' => [
|
107 |
+
[
|
108 |
+
'name' => $action_name,
|
109 |
+
'url' => esc_url( $lang_data->home_url ),
|
110 |
+
'icon' => $action_icon,
|
111 |
+
],
|
112 |
+
],
|
113 |
+
];
|
114 |
+
|
115 |
+
} // end foreach
|
116 |
+
|
117 |
+
/** Settings: Languages setup */
|
118 |
+
$items[ 'languages' ] = [
|
119 |
+
'title' => $string_polylang . _x( 'Setup languages', 'Title in Elementor Finder', 'connect-polylang-elementor' ),
|
120 |
+
'url' => admin_url( 'admin.php?page=mlang' ),
|
121 |
+
'icon' => 'comments',
|
122 |
+
'keywords' => [ 'polylang', 'languages', 'setup', 'flags', 'country', 'countries' ],
|
123 |
+
'description' => __( 'All languages your website appears in', 'connect-polylang-elementor' ),
|
124 |
+
];
|
125 |
+
|
126 |
+
/** Settings: String translations */
|
127 |
+
$items[ 'string-translations' ] = [
|
128 |
+
'title' => $string_polylang . _x( 'String Translations', 'Title in Elementor Finder', 'connect-polylang-elementor' ),
|
129 |
+
'url' => admin_url( 'admin.php?page=mlang_strings' ),
|
130 |
+
'icon' => 'exchange',
|
131 |
+
'keywords' => [ 'polylang', 'translations', 'translate', 'strings' ],
|
132 |
+
'description' => __( 'From Widgets and other website parts', 'connect-polylang-elementor' ),
|
133 |
+
];
|
134 |
+
|
135 |
+
/** Settings: General, for plugin */
|
136 |
+
$items[ 'settings' ] = [
|
137 |
+
'title' => $string_polylang . _x( 'Settings', 'Title in Elementor Finder', 'connect-polylang-elementor' ),
|
138 |
+
'url' => admin_url( 'admin.php?page=mlang_settings' ),
|
139 |
+
'icon' => 'settings',
|
140 |
+
'keywords' => [ 'polylang', 'settings', 'options', 'modules' ],
|
141 |
+
'description' => __( 'Plugin\'s settings, enable/ disable modules', 'connect-polylang-elementor' ),
|
142 |
+
];
|
143 |
+
|
144 |
+
/** External: documentation */
|
145 |
+
$items[ 'documentation' ] = [
|
146 |
+
'title' => $string_polylang . _x( 'Plugin Documentation', 'Title in Elementor Finder', 'connect-polylang-elementor' ),
|
147 |
+
'url' => 'https://polylang.pro/doc/',
|
148 |
+
'icon' => 'info',
|
149 |
+
'keywords' => [ 'help', 'support', 'docs', 'documentation', 'faq', 'knowledge base' ],
|
150 |
+
'description' => __( 'FAQ, Knowledge Base and Documentation', 'connect-polylang-elementor' ),
|
151 |
+
'actions' => [
|
152 |
+
[
|
153 |
+
'name' => $action_name,
|
154 |
+
'url' => 'https://polylang.pro/doc/',
|
155 |
+
'icon' => $action_icon,
|
156 |
+
],
|
157 |
+
],
|
158 |
+
];
|
159 |
+
|
160 |
+
/** External: WordPress.org support forum */
|
161 |
+
$items[ 'support-forum' ] = [
|
162 |
+
'title' => $string_polylang . _x( 'Support Forum', 'Title in Elementor Finder', 'connect-polylang-elementor' ),
|
163 |
+
'url' => 'https://wordpress.org/support/plugin/polylang',
|
164 |
+
'icon' => 'comments',
|
165 |
+
'keywords' => [ 'support', 'forum', 'wordpress.org', 'help' ],
|
166 |
+
'description' => __( 'Free support on WordPress.org', 'connect-polylang-elementor' ),
|
167 |
+
'actions' => [
|
168 |
+
[
|
169 |
+
'name' => $action_name,
|
170 |
+
'url' => 'https://wordpress.org/support/plugin/polylang',
|
171 |
+
'icon' => $action_icon,
|
172 |
+
],
|
173 |
+
],
|
174 |
+
];
|
175 |
+
|
176 |
+
/** Return items array, filterable */
|
177 |
+
return apply_filters(
|
178 |
+
'cpel/filter/elementor_finder/items/polylang',
|
179 |
+
$items
|
180 |
+
);
|
181 |
+
|
182 |
+
} // end method
|
183 |
+
|
184 |
+
} // end of class
|
modules/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Do not modify the files in this folder.
|
4 |
+
*/
|
modules/widgets/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Do not modify the files in this folder.
|
4 |
+
*/
|
modules/widgets/polylang-language-switcher.php
ADDED
@@ -0,0 +1,741 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// modules/widget/polylang-language-switcher
|
4 |
+
|
5 |
+
namespace DDW_Connect_Polylang_Elementor\Widgets;
|
6 |
+
|
7 |
+
use Elementor\Widget_Base;
|
8 |
+
use Elementor\Controls_Manager;
|
9 |
+
use Elementor\Scheme_Color;
|
10 |
+
use Elementor\Scheme_Typography;
|
11 |
+
use Elementor\Group_Control_Border;
|
12 |
+
use Elementor\Group_Control_Typography;
|
13 |
+
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Prevent direct access to this file.
|
17 |
+
*
|
18 |
+
* @since 1.0.0
|
19 |
+
*/
|
20 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
21 |
+
exit( 'Sorry, you are not allowed to access this file directly.' );
|
22 |
+
}
|
23 |
+
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Polylang Switcher
|
27 |
+
*
|
28 |
+
* Elementor widget for Polylang Language Switcher.
|
29 |
+
*
|
30 |
+
* Note: Code based on Widget class of plugin "Language Switcher for Elementor",
|
31 |
+
* licensed under GPLv2 or later.
|
32 |
+
* @author Solitweb
|
33 |
+
* @link https://solitweb.be/
|
34 |
+
*
|
35 |
+
* @since 1.0.0
|
36 |
+
*/
|
37 |
+
class Polylang_Language_Switcher extends Widget_Base {
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Retrieve the widget name.
|
41 |
+
*
|
42 |
+
* @since 1.0.0
|
43 |
+
*
|
44 |
+
* @access public
|
45 |
+
*
|
46 |
+
* @return string Widget name.
|
47 |
+
*/
|
48 |
+
public function get_name() {
|
49 |
+
|
50 |
+
return 'polylang-language-switcher';
|
51 |
+
|
52 |
+
} // end method
|
53 |
+
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Retrieve the widget title.
|
57 |
+
*
|
58 |
+
* @since 1.0.0
|
59 |
+
*
|
60 |
+
* @access public
|
61 |
+
*
|
62 |
+
* @return string Widget title.
|
63 |
+
*/
|
64 |
+
public function get_title() {
|
65 |
+
|
66 |
+
return _x( 'Polylang Switcher', 'Elementor widget title', 'connect-polylang-elementor' );
|
67 |
+
|
68 |
+
} // end method
|
69 |
+
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Retrieve the widget icon.
|
73 |
+
*
|
74 |
+
* @since 1.0.0
|
75 |
+
*
|
76 |
+
* @access public
|
77 |
+
*
|
78 |
+
* @return string Widget icon.
|
79 |
+
*/
|
80 |
+
public function get_icon() {
|
81 |
+
|
82 |
+
return 'fa fa-language';
|
83 |
+
|
84 |
+
} // end method
|
85 |
+
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Retrieve the list of categories the widget belongs to.
|
89 |
+
*
|
90 |
+
* Used to determine where to display the widget in the editor.
|
91 |
+
*
|
92 |
+
* Note that currently Elementor supports only one category.
|
93 |
+
* When multiple categories passed, Elementor uses the first one.
|
94 |
+
*
|
95 |
+
* @since 1.0.0
|
96 |
+
*
|
97 |
+
* @access public
|
98 |
+
*
|
99 |
+
* @return array Widget categories.
|
100 |
+
*/
|
101 |
+
public function get_categories() {
|
102 |
+
|
103 |
+
return [ 'general', 'theme-elements' ];
|
104 |
+
|
105 |
+
} // end method
|
106 |
+
|
107 |
+
|
108 |
+
/**
|
109 |
+
* Set keywords for widgets search.
|
110 |
+
*
|
111 |
+
* @since 1.0.0
|
112 |
+
*/
|
113 |
+
public function get_keywords() {
|
114 |
+
|
115 |
+
return [ 'languages', 'switcher', 'polylang', 'multilingual', 'flags', 'countries', 'country', 'wpml' ];
|
116 |
+
|
117 |
+
} // end method
|
118 |
+
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Retrieve the list of styles the widget depended on.
|
122 |
+
*
|
123 |
+
* Used to set styles dependencies required to run the widget.
|
124 |
+
*
|
125 |
+
* @since 1.0.0
|
126 |
+
*
|
127 |
+
* @access public
|
128 |
+
*
|
129 |
+
* @return array Widget styles dependencies.
|
130 |
+
*/
|
131 |
+
public function get_style_depends() {
|
132 |
+
|
133 |
+
return [ 'plsfe-frontend' ];
|
134 |
+
|
135 |
+
} // end method
|
136 |
+
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Retrieve the list of scripts the widget depended on.
|
140 |
+
*
|
141 |
+
* Used to set scripts dependencies required to run the widget.
|
142 |
+
*
|
143 |
+
* @since 1.0.0
|
144 |
+
*
|
145 |
+
* @access public
|
146 |
+
*
|
147 |
+
* @return array Widget scripts dependencies.
|
148 |
+
*/
|
149 |
+
public function get_script_depends() {
|
150 |
+
|
151 |
+
return [ ];
|
152 |
+
|
153 |
+
} // end method
|
154 |
+
|
155 |
+
|
156 |
+
/**
|
157 |
+
* Register the widget controls.
|
158 |
+
*
|
159 |
+
* Adds different input fields to allow the user to change and customize the
|
160 |
+
* widget settings.
|
161 |
+
*
|
162 |
+
* @since 1.0.0
|
163 |
+
*
|
164 |
+
* @access protected
|
165 |
+
*
|
166 |
+
* @uses pll_the_languages()
|
167 |
+
*/
|
168 |
+
protected function _register_controls() {
|
169 |
+
|
170 |
+
/** Content: Layout etc. */
|
171 |
+
$this->start_controls_section(
|
172 |
+
'section_content',
|
173 |
+
[
|
174 |
+
'label' => __( 'Content', 'connect-polylang-elementor' ),
|
175 |
+
]
|
176 |
+
);
|
177 |
+
|
178 |
+
$this->add_responsive_control(
|
179 |
+
'layout',
|
180 |
+
[
|
181 |
+
'label' => __( 'Layout', 'connect-polylang-elementor' ),
|
182 |
+
'type' => Controls_Manager::SELECT,
|
183 |
+
'default' => 'horizontal',
|
184 |
+
'options' => [
|
185 |
+
'horizontal' => __( 'Horizontal', 'connect-polylang-elementor' ),
|
186 |
+
'vertical' => __( 'Vertical', 'connect-polylang-elementor' ),
|
187 |
+
],
|
188 |
+
'label_block' => true,
|
189 |
+
'prefix_class' => 'plsfe%s-layout-',
|
190 |
+
]
|
191 |
+
);
|
192 |
+
|
193 |
+
$this->add_responsive_control(
|
194 |
+
'align_items',
|
195 |
+
[
|
196 |
+
'label' => __( 'Align', 'connect-polylang-elementor' ),
|
197 |
+
'type' => Controls_Manager::CHOOSE,
|
198 |
+
'options' => [
|
199 |
+
'left' => [
|
200 |
+
'title' => __( 'Left', 'connect-polylang-elementor' ),
|
201 |
+
'icon' => 'eicon-h-align-left',
|
202 |
+
],
|
203 |
+
'center' => [
|
204 |
+
'title' => __( 'Center', 'connect-polylang-elementor' ),
|
205 |
+
'icon' => 'eicon-h-align-center',
|
206 |
+
],
|
207 |
+
'right' => [
|
208 |
+
'title' => __( 'Right', 'connect-polylang-elementor' ),
|
209 |
+
'icon' => 'eicon-h-align-right',
|
210 |
+
],
|
211 |
+
'justify' => [
|
212 |
+
'title' => __( 'Stretch', 'connect-polylang-elementor' ),
|
213 |
+
'icon' => 'eicon-h-align-stretch',
|
214 |
+
],
|
215 |
+
],
|
216 |
+
'label_block' => true,
|
217 |
+
'prefix_class' => 'plsfe%s-align-',
|
218 |
+
]
|
219 |
+
);
|
220 |
+
|
221 |
+
$this->add_control(
|
222 |
+
'hide_current',
|
223 |
+
[
|
224 |
+
'label' => __( 'Hide the current language', 'connect-polylang-elementor' ),
|
225 |
+
'type' => Controls_Manager::SWITCHER,
|
226 |
+
'return_value' => 'yes',
|
227 |
+
'default' => '',
|
228 |
+
'separator' => 'before',
|
229 |
+
]
|
230 |
+
);
|
231 |
+
|
232 |
+
$this->add_control(
|
233 |
+
'hide_missing',
|
234 |
+
[
|
235 |
+
'label' => __( 'Hide languages with no translation', 'connect-polylang-elementor' ),
|
236 |
+
'type' => Controls_Manager::SWITCHER,
|
237 |
+
'return_value' => 'yes',
|
238 |
+
'default' => '',
|
239 |
+
]
|
240 |
+
);
|
241 |
+
|
242 |
+
$this->add_control(
|
243 |
+
'show_country_flag',
|
244 |
+
[
|
245 |
+
'label' => __( 'Show Country Flag', 'connect-polylang-elementor' ),
|
246 |
+
'type' => Controls_Manager::SWITCHER,
|
247 |
+
'return_value' => 'yes',
|
248 |
+
'default' => 'yes',
|
249 |
+
]
|
250 |
+
);
|
251 |
+
|
252 |
+
$this->add_control(
|
253 |
+
'show_language_name',
|
254 |
+
[
|
255 |
+
'label' => __( 'Show Language Name', 'connect-polylang-elementor' ),
|
256 |
+
'type' => Controls_Manager::SWITCHER,
|
257 |
+
'return_value' => 'yes',
|
258 |
+
'default' => 'yes',
|
259 |
+
]
|
260 |
+
);
|
261 |
+
|
262 |
+
$this->add_control(
|
263 |
+
'show_language_code',
|
264 |
+
[
|
265 |
+
'label' => __( 'Show Language Code', 'connect-polylang-elementor' ),
|
266 |
+
'type' => Controls_Manager::SWITCHER,
|
267 |
+
'return_value' => 'yes',
|
268 |
+
'default' => '',
|
269 |
+
]
|
270 |
+
);
|
271 |
+
|
272 |
+
/** Create language drop-down for the select control */
|
273 |
+
$languages = pll_the_languages( array( 'raw' => 1 ) );
|
274 |
+
$dropdown = [];
|
275 |
+
|
276 |
+
foreach ( $languages as $language ) {
|
277 |
+
$dropdown[ $language[ 'slug' ] ] = $language[ 'name' ];
|
278 |
+
}
|
279 |
+
|
280 |
+
$first_key[ 'all' ] = __( 'All languages', 'connect-polylang-elementor' );
|
281 |
+
|
282 |
+
$dropdown = array_merge( $first_key, $dropdown );
|
283 |
+
|
284 |
+
$this->add_control(
|
285 |
+
'plsfe_widget_display',
|
286 |
+
[
|
287 |
+
'label' => __( 'Display widget for:', 'connect-polylang-elementor' ),
|
288 |
+
'type' => Controls_Manager::SELECT,
|
289 |
+
'default' => 'all',
|
290 |
+
'options' => $dropdown,
|
291 |
+
]
|
292 |
+
);
|
293 |
+
|
294 |
+
$this->end_controls_section();
|
295 |
+
|
296 |
+
|
297 |
+
/** Style: Main menu */
|
298 |
+
$this->start_controls_section(
|
299 |
+
'main_section',
|
300 |
+
[
|
301 |
+
'label' => __( 'Main Menu', 'connect-polylang-elementor' ),
|
302 |
+
'tab' => Controls_Manager::TAB_STYLE,
|
303 |
+
]
|
304 |
+
);
|
305 |
+
|
306 |
+
$this->start_controls_tabs( 'tabs_menu_item_style' );
|
307 |
+
|
308 |
+
$this->start_controls_tab(
|
309 |
+
'tab_menu_item_normal',
|
310 |
+
[
|
311 |
+
'label' => __( 'Normal', 'connect-polylang-elementor' ),
|
312 |
+
]
|
313 |
+
);
|
314 |
+
|
315 |
+
$this->add_group_control(
|
316 |
+
Group_Control_Typography::get_type(),
|
317 |
+
[
|
318 |
+
'name' => 'typography_menu_item',
|
319 |
+
'scheme' => Scheme_Typography::TYPOGRAPHY_1,
|
320 |
+
'selector' => '{{WRAPPER}} .plsfe-menu .plsfe-item',
|
321 |
+
]
|
322 |
+
);
|
323 |
+
|
324 |
+
$this->add_control(
|
325 |
+
'color_menu_item',
|
326 |
+
[
|
327 |
+
'label' => __( 'Text Color', 'connect-polylang-elementor' ),
|
328 |
+
'type' => Controls_Manager::COLOR,
|
329 |
+
'scheme' => [
|
330 |
+
'type' => Scheme_Color::get_type(),
|
331 |
+
'value' => Scheme_Color::COLOR_3,
|
332 |
+
],
|
333 |
+
'default' => '',
|
334 |
+
'selectors' => [
|
335 |
+
'{{WRAPPER}} .plsfe-menu .plsfe-item' => 'color: {{VALUE}}',
|
336 |
+
],
|
337 |
+
]
|
338 |
+
);
|
339 |
+
|
340 |
+
$this->end_controls_tab();
|
341 |
+
|
342 |
+
$this->start_controls_tab(
|
343 |
+
'tab_menu_item_hover',
|
344 |
+
[
|
345 |
+
'label' => __( 'Hover', 'connect-polylang-elementor' ),
|
346 |
+
]
|
347 |
+
);
|
348 |
+
|
349 |
+
$this->add_group_control(
|
350 |
+
Group_Control_Typography::get_type(),
|
351 |
+
[
|
352 |
+
'name' => 'typography_menu_item_hover',
|
353 |
+
'scheme' => Scheme_Typography::TYPOGRAPHY_1,
|
354 |
+
'selector' => '{{WRAPPER}} .plsfe-menu .plsfe-item:hover,
|
355 |
+
{{WRAPPER}} .plsfe-menu .plsfe-item.plsfe-item__active,
|
356 |
+
{{WRAPPER}} .plsfe-menu .plsfe-item.highlighted,
|
357 |
+
{{WRAPPER}} .plsfe-menu .plsfe-item:focus',
|
358 |
+
]
|
359 |
+
);
|
360 |
+
|
361 |
+
$this->add_control(
|
362 |
+
'color_menu_item_hover',
|
363 |
+
[
|
364 |
+
'label' => __( 'Text Color', 'connect-polylang-elementor' ),
|
365 |
+
'type' => Controls_Manager::COLOR,
|
366 |
+
'scheme' => [
|
367 |
+
'type' => Scheme_Color::get_type(),
|
368 |
+
'value' => Scheme_Color::COLOR_4,
|
369 |
+
],
|
370 |
+
'selectors' => [
|
371 |
+
'{{WRAPPER}} .plsfe-menu .plsfe-item:hover,
|
372 |
+
{{WRAPPER}} .plsfe-menu .plsfe-item.highlighted,
|
373 |
+
{{WRAPPER}} .plsfe-menu .plsfe-item:focus' => 'color: {{VALUE}}',
|
374 |
+
],
|
375 |
+
]
|
376 |
+
);
|
377 |
+
|
378 |
+
$this->end_controls_tab();
|
379 |
+
|
380 |
+
$this->start_controls_tab(
|
381 |
+
'tab_menu_item_active',
|
382 |
+
[
|
383 |
+
'label' => __( 'Active', 'connect-polylang-elementor' ),
|
384 |
+
]
|
385 |
+
);
|
386 |
+
|
387 |
+
$this->add_control(
|
388 |
+
'info_menu_item_active',
|
389 |
+
[
|
390 |
+
'type' => Controls_Manager::RAW_HTML,
|
391 |
+
'raw' => __( 'This controls the item in the Switcher for the current active language', 'connect-polylang-elementor' ),
|
392 |
+
'content_classes' => 'elementor-control-field-description cpel-info-menu-item-active',
|
393 |
+
]
|
394 |
+
);
|
395 |
+
|
396 |
+
$this->add_group_control(
|
397 |
+
Group_Control_Typography::get_type(),
|
398 |
+
[
|
399 |
+
'name' => 'typography_menu_item_active',
|
400 |
+
'scheme' => Scheme_Typography::TYPOGRAPHY_1,
|
401 |
+
'selector' => '{{WRAPPER}} .plsfe-menu .plsfe-item.plsfe-item__active',
|
402 |
+
]
|
403 |
+
);
|
404 |
+
|
405 |
+
$this->add_control(
|
406 |
+
'color_menu_item_active',
|
407 |
+
[
|
408 |
+
'label' => __( 'Text Color', 'connect-polylang-elementor' ),
|
409 |
+
'type' => Controls_Manager::COLOR,
|
410 |
+
'default' => '',
|
411 |
+
'selectors' => [
|
412 |
+
'{{WRAPPER}} .plsfe-menu .plsfe-item.plsfe-item__active' => 'color: {{VALUE}}',
|
413 |
+
],
|
414 |
+
]
|
415 |
+
);
|
416 |
+
|
417 |
+
$this->add_control(
|
418 |
+
'color_menu_item_active_hover',
|
419 |
+
[
|
420 |
+
'label' => __( 'Text Hover Color', 'connect-polylang-elementor' ),
|
421 |
+
'type' => Controls_Manager::COLOR,
|
422 |
+
'default' => '',
|
423 |
+
'selectors' => [
|
424 |
+
'{{WRAPPER}} .plsfe-menu .plsfe-item.plsfe-item__active:hover' => 'color: {{VALUE}}',
|
425 |
+
],
|
426 |
+
]
|
427 |
+
);
|
428 |
+
|
429 |
+
$this->end_controls_tab();
|
430 |
+
|
431 |
+
$this->end_controls_tabs();
|
432 |
+
|
433 |
+
$this->add_responsive_control(
|
434 |
+
'padding_horizontal_menu_item',
|
435 |
+
[
|
436 |
+
'label' => __( 'Horizontal Padding', 'connect-polylang-elementor' ),
|
437 |
+
'type' => Controls_Manager::SLIDER,
|
438 |
+
'range' => [
|
439 |
+
'px' => [
|
440 |
+
'max' => 50,
|
441 |
+
],
|
442 |
+
],
|
443 |
+
'separator' => 'before',
|
444 |
+
'selectors' => [
|
445 |
+
'{{WRAPPER}} .plsfe-switcher .plsfe-item' => 'padding-left: {{SIZE}}{{UNIT}}; padding-right: {{SIZE}}{{UNIT}}',
|
446 |
+
],
|
447 |
+
]
|
448 |
+
);
|
449 |
+
|
450 |
+
$this->add_responsive_control(
|
451 |
+
'padding_vertical_menu_item',
|
452 |
+
[
|
453 |
+
'label' => __( 'Vertical Padding', 'connect-polylang-elementor' ),
|
454 |
+
'type' => Controls_Manager::SLIDER,
|
455 |
+
'range' => [
|
456 |
+
'px' => [
|
457 |
+
'max' => 50,
|
458 |
+
],
|
459 |
+
],
|
460 |
+
'selectors' => [
|
461 |
+
'{{WRAPPER}} .plsfe-switcher .plsfe-item' => 'padding-top: {{SIZE}}{{UNIT}}; padding-bottom: {{SIZE}}{{UNIT}}',
|
462 |
+
],
|
463 |
+
]
|
464 |
+
);
|
465 |
+
|
466 |
+
$this->add_responsive_control(
|
467 |
+
'menu_space_between',
|
468 |
+
[
|
469 |
+
'label' => __( 'Space Between', 'connect-polylang-elementor' ),
|
470 |
+
'type' => Controls_Manager::SLIDER,
|
471 |
+
'range' => [
|
472 |
+
'px' => [
|
473 |
+
'max' => 100,
|
474 |
+
],
|
475 |
+
],
|
476 |
+
'selectors' => [
|
477 |
+
'body:not(.rtl) {{WRAPPER}}.plsfe-layout-horizontal:not(.plsfe-layout-vertical) .plsfe-menu > li:not(:last-child)' => 'margin-right: {{SIZE}}{{UNIT}}',
|
478 |
+
'body.rtl {{WRAPPER}}.plsfe-layout-horizontal:not(.plsfe-layout-vertical) .plsfe-menu > li:not(:last-child)' => 'margin-left: {{SIZE}}{{UNIT}}',
|
479 |
+
'{{WRAPPER}}.plsfe-layout-vertical:not(.plsfe-layout-horizontal) .plsfe-menu > li:not(:last-child)' => 'margin-bottom: {{SIZE}}{{UNIT}}',
|
480 |
+
],
|
481 |
+
]
|
482 |
+
);
|
483 |
+
|
484 |
+
$this->add_group_control(
|
485 |
+
Group_Control_Border::get_type(),
|
486 |
+
[
|
487 |
+
'name' => 'menu_item_border',
|
488 |
+
'selector' => '{{WRAPPER}} .plsfe-menu > li',
|
489 |
+
'separator' => 'before',
|
490 |
+
]
|
491 |
+
);
|
492 |
+
|
493 |
+
$this->end_controls_section();
|
494 |
+
|
495 |
+
|
496 |
+
/** Style: Language flag */
|
497 |
+
$this->start_controls_section(
|
498 |
+
'country_flag_section',
|
499 |
+
[
|
500 |
+
'label' => __( 'Country Flag', 'connect-polylang-elementor' ),
|
501 |
+
'tab' => Controls_Manager::TAB_STYLE,
|
502 |
+
'condition' => [
|
503 |
+
'show_country_flag' => [ 'yes' ],
|
504 |
+
],
|
505 |
+
]
|
506 |
+
);
|
507 |
+
|
508 |
+
$this->add_control(
|
509 |
+
'margin_country_flag',
|
510 |
+
[
|
511 |
+
'label' => __( 'Margin', 'connect-polylang-elementor' ),
|
512 |
+
'type' => Controls_Manager::DIMENSIONS,
|
513 |
+
'size_units' => [ 'px', '%', 'em' ],
|
514 |
+
'selectors' => [
|
515 |
+
'{{WRAPPER}} .plsfe-switcher .plsfe-country-flag' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
516 |
+
],
|
517 |
+
]
|
518 |
+
);
|
519 |
+
|
520 |
+
$this->end_controls_section();
|
521 |
+
|
522 |
+
|
523 |
+
/** Style: Language name */
|
524 |
+
$this->start_controls_section(
|
525 |
+
'language_name_section',
|
526 |
+
[
|
527 |
+
'label' => __( 'Language Name', 'connect-polylang-elementor' ),
|
528 |
+
'tab' => Controls_Manager::TAB_STYLE,
|
529 |
+
'condition' => [
|
530 |
+
'show_language_name' => [ 'yes' ],
|
531 |
+
],
|
532 |
+
]
|
533 |
+
);
|
534 |
+
|
535 |
+
$this->add_control(
|
536 |
+
'uppercase_language_name',
|
537 |
+
[
|
538 |
+
'label' => __( 'Uppercase', 'connect-polylang-elementor' ),
|
539 |
+
'type' => Controls_Manager::SWITCHER,
|
540 |
+
'return_value' => 'yes',
|
541 |
+
'default' => '',
|
542 |
+
]
|
543 |
+
);
|
544 |
+
|
545 |
+
$this->add_control(
|
546 |
+
'margin_language_name',
|
547 |
+
[
|
548 |
+
'label' => __( 'Margin', 'connect-polylang-elementor' ),
|
549 |
+
'type' => Controls_Manager::DIMENSIONS,
|
550 |
+
'size_units' => [ 'px', '%', 'em' ],
|
551 |
+
'selectors' => [
|
552 |
+
'{{WRAPPER}} .plsfe-switcher .plsfe-language-name' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
553 |
+
],
|
554 |
+
]
|
555 |
+
);
|
556 |
+
|
557 |
+
$this->end_controls_section();
|
558 |
+
|
559 |
+
|
560 |
+
/** Style: Language code */
|
561 |
+
$this->start_controls_section(
|
562 |
+
'language_code_section',
|
563 |
+
[
|
564 |
+
'label' => __( 'Language Code', 'connect-polylang-elementor' ),
|
565 |
+
'tab' => Controls_Manager::TAB_STYLE,
|
566 |
+
'condition' => [
|
567 |
+
'show_language_code' => [ 'yes' ],
|
568 |
+
],
|
569 |
+
]
|
570 |
+
);
|
571 |
+
|
572 |
+
$this->add_control(
|
573 |
+
'uppercase_language_code',
|
574 |
+
[
|
575 |
+
'label' => __( 'Uppercase', 'connect-polylang-elementor' ),
|
576 |
+
'type' => Controls_Manager::SWITCHER,
|
577 |
+
'return_value' => 'yes',
|
578 |
+
'default' => 'yes',
|
579 |
+
]
|
580 |
+
);
|
581 |
+
|
582 |
+
$this->add_control(
|
583 |
+
'margin_language_code',
|
584 |
+
[
|
585 |
+
'label' => __( 'Margin', 'connect-polylang-elementor' ),
|
586 |
+
'type' => Controls_Manager::DIMENSIONS,
|
587 |
+
'size_units' => [ 'px', '%', 'em' ],
|
588 |
+
'selectors' => [
|
589 |
+
'{{WRAPPER}} .plsfe-switcher .plsfe-language-code' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
590 |
+
],
|
591 |
+
]
|
592 |
+
);
|
593 |
+
|
594 |
+
$this->add_control(
|
595 |
+
'before_language_code',
|
596 |
+
[
|
597 |
+
'label' => __( 'Text before', 'connect-polylang-elementor' ),
|
598 |
+
'type' => Controls_Manager::TEXT,
|
599 |
+
]
|
600 |
+
);
|
601 |
+
|
602 |
+
$this->add_control(
|
603 |
+
'after_language_code',
|
604 |
+
[
|
605 |
+
'label' => __( 'Text after', 'connect-polylang-elementor' ),
|
606 |
+
'type' => Controls_Manager::TEXT,
|
607 |
+
]
|
608 |
+
);
|
609 |
+
|
610 |
+
$this->end_controls_section();
|
611 |
+
|
612 |
+
|
613 |
+
/** Help information - user guidance */
|
614 |
+
$this->start_controls_section(
|
615 |
+
'section_helpful_info',
|
616 |
+
[
|
617 |
+
'label' => __( 'Helpful Information', 'connect-polylang-elementor' ),
|
618 |
+
]
|
619 |
+
);
|
620 |
+
|
621 |
+
$output = '<div style="line-height: 1.2;">';
|
622 |
+
$output .= sprintf(
|
623 |
+
'<p style="margin-bottom: 15px;"><strong>%1$s:</strong><br />%2$s</p>',
|
624 |
+
__( 'Country Flags', 'connect-polylang-elementor' ),
|
625 |
+
sprintf(
|
626 |
+
/* translators: %1$s - <code>16px</code> (width 16px) / %2$s - <code>11px</code> (height 11px) */
|
627 |
+
__( 'Country flags are by default used from Polylang plugin and have the static size of %1$s wide and %2$s high.', 'connect-polylang-elementor' ),
|
628 |
+
'<code>16px</code>',
|
629 |
+
'<code>11px</code>'
|
630 |
+
)
|
631 |
+
);
|
632 |
+
$output .= sprintf(
|
633 |
+
'<p><strong>%1$s → %2$s → %3$s:</strong><br />%4$s</p>',
|
634 |
+
__( 'Style', 'connect-polylang-elementor' ),
|
635 |
+
__( 'Main Menu', 'connect-polylang-elementor' ),
|
636 |
+
__( 'Tab: "Active"', 'connect-polylang-elementor' ),
|
637 |
+
__( 'This marks the language of currently viewed content - on the frontend. In Elementor Editor Panel this could be different.', 'connect-polylang-elementor' )
|
638 |
+
);
|
639 |
+
$output .= '</div>';
|
640 |
+
|
641 |
+
$this->add_control(
|
642 |
+
'plsfe_help_info',
|
643 |
+
[
|
644 |
+
'type' => Controls_Manager::RAW_HTML,
|
645 |
+
'raw' => $output,
|
646 |
+
'content_classes' => 'cpel-help-info',
|
647 |
+
]
|
648 |
+
);
|
649 |
+
|
650 |
+
$this->end_controls_section();
|
651 |
+
|
652 |
+
} // end method
|
653 |
+
|
654 |
+
|
655 |
+
/**
|
656 |
+
* Render the widget output on the frontend.
|
657 |
+
*
|
658 |
+
* Written in PHP and used to generate the final HTML.
|
659 |
+
*
|
660 |
+
* @since 1.0.0
|
661 |
+
*
|
662 |
+
* @access protected
|
663 |
+
*
|
664 |
+
* @uses pll_the_languages() Holds Polylang languages for switcher.
|
665 |
+
*/
|
666 |
+
protected function render() {
|
667 |
+
|
668 |
+
/** Get the widget settings */
|
669 |
+
$settings = $this->get_active_settings();
|
670 |
+
|
671 |
+
/** Add render attributes for Elementor */
|
672 |
+
$this->add_render_attribute( 'main-menu', 'class', [
|
673 |
+
'plsfe-switcher',
|
674 |
+
] );
|
675 |
+
|
676 |
+
/** Get the available languages for a switcher */
|
677 |
+
$languages = pll_the_languages( array( 'raw' => 1 ) );
|
678 |
+
|
679 |
+
/** If there are language - render output */
|
680 |
+
if ( ! empty( $languages ) ) {
|
681 |
+
|
682 |
+
echo '<nav ' . $this->get_render_attribute_string( 'main-menu' ) . '><ul class="plsfe-menu">';
|
683 |
+
|
684 |
+
/** Loop through all languages */
|
685 |
+
foreach ( $languages as $language ) {
|
686 |
+
|
687 |
+
/** Optional: Hide the current language */
|
688 |
+
if ( 'yes' === $settings[ 'hide_current' ] && $language[ 'current_lang' ] ) {
|
689 |
+
continue;
|
690 |
+
}
|
691 |
+
|
692 |
+
/** Optional: Hide languages that have no translations available */
|
693 |
+
if ( 'yes' === $settings[ 'hide_missing' ] && $language[ 'no_translation' ] ) {
|
694 |
+
continue;
|
695 |
+
}
|
696 |
+
|
697 |
+
/** Language code: uppercase/ lowercase logic */
|
698 |
+
$language_code = ( 'yes' === $settings[ 'uppercase_language_code' ] ) ? strtoupper( $language[ 'slug' ] ) : strtolower( $language[ 'slug' ] );
|
699 |
+
|
700 |
+
/** Language name: uppercase/ lowercase logic */
|
701 |
+
$language_name = ( 'yes' === $settings[ 'uppercase_language_name' ] ) ? strtoupper( $language[ 'name' ] ) : $language[ 'name' ];
|
702 |
+
|
703 |
+
/** Build the language switcher menu output */
|
704 |
+
echo '<li class="plsfe-menu-item">';
|
705 |
+
|
706 |
+
echo ( $language[ 'current_lang' ] ) ? '<a href="' . $language[ 'url' ] . '" class="plsfe-item plsfe-item__active">' : '<a href="' . $language[ 'url' ] . '" class="plsfe-item">';
|
707 |
+
|
708 |
+
echo $settings[ 'show_country_flag' ] ? '<span class="plsfe-country-flag"><img src="' . $language[ 'flag' ] . '" alt="' . $language_code . '" width="16" height="11" /></span>' : '';
|
709 |
+
|
710 |
+
echo $settings[ 'show_language_name' ] ? '<span class="plsfe-language-name">' . $language_name . '</span>' : '';
|
711 |
+
|
712 |
+
echo $settings[ 'before_language_code' ] ?: '';
|
713 |
+
echo $settings[ 'show_language_code' ] ? '<span class="plsfe-language-code">' . $language_code . '</span>' : '';
|
714 |
+
echo $settings[ 'after_language_code' ] ?: '';
|
715 |
+
|
716 |
+
echo '</a>';
|
717 |
+
|
718 |
+
echo '</li>';
|
719 |
+
|
720 |
+
} // end if
|
721 |
+
|
722 |
+
echo '</ul></nav>';
|
723 |
+
|
724 |
+
} // end if
|
725 |
+
|
726 |
+
} // end method
|
727 |
+
|
728 |
+
|
729 |
+
/**
|
730 |
+
* Render the widget output in the editor.
|
731 |
+
*
|
732 |
+
* Written as a Backbone JavaScript template and used to generate the live
|
733 |
+
* preview.
|
734 |
+
*
|
735 |
+
* @since 1.0.0
|
736 |
+
*
|
737 |
+
* @access protected
|
738 |
+
*/
|
739 |
+
protected function _content_template() { } // end method
|
740 |
+
|
741 |
+
} // end of class
|
modules/widgets/register-widget.php
ADDED
@@ -0,0 +1,120 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// modules/widget/polylang-language-switcher
|
4 |
+
|
5 |
+
namespace DDW_Connect_Polylang_Elementor;
|
6 |
+
|
7 |
+
use DDW_Connect_Polylang_Elementor\Widgets\Polylang_Language_Switcher;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Prevent direct access to this file.
|
11 |
+
*
|
12 |
+
* @since 1.0.0
|
13 |
+
*/
|
14 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
15 |
+
exit( 'Sorry, you are not allowed to access this file directly.' );
|
16 |
+
}
|
17 |
+
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Main Plugin Class
|
21 |
+
*
|
22 |
+
* Register new elementor widget.
|
23 |
+
*
|
24 |
+
* @since 1.0.0
|
25 |
+
*/
|
26 |
+
class Register_Widget {
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Constructor
|
30 |
+
*
|
31 |
+
* @since 1.0.0
|
32 |
+
*
|
33 |
+
* @access public
|
34 |
+
*/
|
35 |
+
public function __construct() {
|
36 |
+
|
37 |
+
$this->add_actions();
|
38 |
+
|
39 |
+
} // end method
|
40 |
+
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Add Actions
|
44 |
+
*
|
45 |
+
* @since 1.0.0
|
46 |
+
*
|
47 |
+
* @access private
|
48 |
+
*/
|
49 |
+
private function add_actions() {
|
50 |
+
|
51 |
+
add_action( 'elementor/widgets/widgets_registered', [ $this, 'on_widgets_registered' ] );
|
52 |
+
|
53 |
+
add_action( 'elementor/preview/enqueue_styles', function() {
|
54 |
+
$suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
|
55 |
+
|
56 |
+
wp_enqueue_style(
|
57 |
+
'plsfe-editor',
|
58 |
+
plugins_url( '/assets/css/plsfe-editor' . $suffix . '.css', CPEL__FILE__ ),
|
59 |
+
'',
|
60 |
+
CPEL_PLUGIN_VERSION
|
61 |
+
);
|
62 |
+
} );
|
63 |
+
|
64 |
+
add_action( 'elementor/frontend/after_enqueue_styles', function() {
|
65 |
+
$suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
|
66 |
+
|
67 |
+
wp_register_style(
|
68 |
+
'plsfe-frontend',
|
69 |
+
plugins_url( '/assets/css/plsfe-frontend' . $suffix . '.css', CPEL__FILE__ ),
|
70 |
+
'',
|
71 |
+
CPEL_PLUGIN_VERSION
|
72 |
+
);
|
73 |
+
} );
|
74 |
+
|
75 |
+
} // end method
|
76 |
+
|
77 |
+
|
78 |
+
/**
|
79 |
+
* On Widgets Registered
|
80 |
+
*
|
81 |
+
* @since 1.0.0
|
82 |
+
*
|
83 |
+
* @access public
|
84 |
+
*/
|
85 |
+
public function on_widgets_registered() {
|
86 |
+
|
87 |
+
$this->includes();
|
88 |
+
$this->register_widget();
|
89 |
+
|
90 |
+
} // end method
|
91 |
+
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Includes
|
95 |
+
*
|
96 |
+
* @since 1.0.0
|
97 |
+
*
|
98 |
+
* @access private
|
99 |
+
*/
|
100 |
+
private function includes() {
|
101 |
+
|
102 |
+
require_once( CPEL_PLUGIN_DIR . 'modules/widgets/polylang-language-switcher.php' );
|
103 |
+
|
104 |
+
} // end method
|
105 |
+
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Register Widget
|
109 |
+
*
|
110 |
+
* @since 1.0.0
|
111 |
+
*
|
112 |
+
* @access private
|
113 |
+
*/
|
114 |
+
private function register_widget() {
|
115 |
+
|
116 |
+
\Elementor\Plugin::instance()->widgets_manager->register_widget_type( new Polylang_Language_Switcher() );
|
117 |
+
|
118 |
+
} // end method
|
119 |
+
|
120 |
+
} // end of class
|
readme.txt
ADDED
@@ -0,0 +1,299 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
=== Polylang Connect for Elementor - Language Switcher & Template Tweaks ===
|
2 |
+
Contributors: daveshine, p4fbradjohnson, deckerweb, wpautobahn
|
3 |
+
Donate link: https://www.paypal.me/deckerweb
|
4 |
+
Tags: elementor, polylang, multilingual, language switcher, languages, templates, widget, finder, dynamic tags, deckerweb
|
5 |
+
Requires at least: 4.7
|
6 |
+
Tested up to: 5.3
|
7 |
+
Requires PHP: 5.6
|
8 |
+
Stable tag: 1.0.1
|
9 |
+
License: GPL-2.0-or-later
|
10 |
+
License URI: https://opensource.org/licenses/GPL-2.0
|
11 |
+
|
12 |
+
Connect Polylang with Elementor - show correct Templates, plus Elementor language switcher widget.
|
13 |
+
|
14 |
+
== Description ==
|
15 |
+
|
16 |
+
Connect the Polylang multilingual plugin with Elementor Page Builder: This plugin will make Elementor and Polylang **show the correct language templates**, especially with Elementor Pro Theme Builder. Plus: native **Polylang Language Switcher Elementor widget**, new Dynamic Tags, and Polylang links added to the **Elementor Finder** feature.
|
17 |
+
|
18 |
+
https://www.youtube.com/watch?v=tMmJ6sdMdxw
|
19 |
+
|
20 |
+
= What the Plugin Does =
|
21 |
+
* **Shows the correct Template** (for different languages): Polylang Connect for Elementor allows Polylang to show the correct Elementor template to be displayed on the front end. Before this plugin, Elementor did not show the correct language (translated) template.
|
22 |
+
* Beyond enabling the Elementor post type in Polylang settings, plus assigning every post/page/template to a language, no further settings are needed for these template tweaks. It just works out of the box. All the heavy lifting happens under the hood.
|
23 |
+
* **Usage Example:**
|
24 |
+
* Make a header template in Elementor, set display conditions in Elementor panel, assign this to one language (English for example)
|
25 |
+
* Make a second header template in Elementor, set NO display conditions for this one (by assigning 2 of the same display conditions, you can create a conflict in Elementor), but assign to another Polylang language (Portuguese for example), meaning to link those languages/templates in Polylang.
|
26 |
+
* Result: when viewing in frontend the proper English content appears with the English header template, translated content in Portuguese appears with the Portuguese header template.
|
27 |
+
* Go on: The principle is always the same, now add German language, Spanish and so on ;-)
|
28 |
+
* [See **live demo** on co-author's own website](https://mariselaveludo.fashion/) // [Screenshot gallery](https://www.dropbox.com/sh/3i9tuh76etmhl1a/AADm_4L_aesp8Q9ss5NXuSiMa?dl=0)
|
29 |
+
|
30 |
+
= Plus: Even More Features =
|
31 |
+
* **Polylang Language Switcher Widget**: A native Elementor Widget to easily build a nice language switcher menu and have **more styling options** for non-coders at hand
|
32 |
+
* **Elementor Finder integration**: Adds Polylang languages, admin settings links, plus support resources as quick jump links to the Elementor Finder feature (Elementor v2.3.0+) - so you can navigate more quickly from whereever you are
|
33 |
+
* **Dynamic Tags** in Elementor Pro: Polylang Language Names (all registered/active) / Current Language Name / Current Language Code / Current Language Flag (image) / Current Language URL
|
34 |
+
|
35 |
+
= Further Plugin Info =
|
36 |
+
* More features might be added in the future.
|
37 |
+
* Community collaboration between David Decker and Brad Johnson, and more code coming from the Elementor/ Polylang community
|
38 |
+
* Plugin website: [https://polyglotwp.com](https://polyglotwp.com "PolyGlotWP.com - Multilingual WordPress Websites with Polylang and Elementor") - please sign up for our newsletter
|
39 |
+
|
40 |
+
= Where to Get Support? =
|
41 |
+
* [**Polylang User Community Group at Facebook**](https://www.facebook.com/groups/polylang.users/) - highly recommended for all users of this plugin!
|
42 |
+
* We monitor [the plugin's support forum](https://wordpress.org/support/plugin/connect-polylang-elementor) here on WordPress.org as well - but our preferred support channel is the FB community group
|
43 |
+
* **What is covered by our support?** - All regarding THIS plugin ("Polyang Connect for Elementor"), plus the relation to *Polylang*, *Elementor* and *Elementor Pro* of course.
|
44 |
+
* **What is NOT covered by support?** - Anything general regarding multilingual topics and WordPress. Explicitely we **DO NOT** offer any "WPML", "WPBakery" or "Visual Composer" support, and also not for your theme etc.!!!
|
45 |
+
|
46 |
+
= Translations =
|
47 |
+
* English (default, `en_US`) - always included
|
48 |
+
* German (`de_DE`) - always included
|
49 |
+
* German formal (`de_DE_formal`) - always included
|
50 |
+
* `.pot` file (`connect-polylang-elementor.pot`) for translators is also always included :)
|
51 |
+
* Easy plugin translation platform with GlotPress tool: [Translate "Polylang Connect for Elementor"...](https://translate.wordpress.org/projects/wp-plugins/connect-polylang-elementor)
|
52 |
+
|
53 |
+
= Feedback =
|
54 |
+
* I am open for your suggestions and feedback - Thank you for using or trying out one of my plugins!
|
55 |
+
* Join our [**Facebook User Community Support Group**](https://www.facebook.com/groups/deckerweb.wordpress.plugins/)
|
56 |
+
|
57 |
+
= My Other Plugins =
|
58 |
+
* [**Toolbar Extras for Elementor - WordPress Admin Bar Enhanced**](https://wordpress.org/plugins/connect-polylang-elementor/)
|
59 |
+
* [**Toolbar Extras for Oxygen Builder - Add-On plugin**](https://wordpress.org/plugins/toolbar-extras-oxygen/)
|
60 |
+
* [**Toolbar Extras for MainWP Dashboard - Add-On plugin**](https://wordpress.org/plugins/toolbar-extras-mainwp/)
|
61 |
+
* [**Toolbar Extras for Give Donations (GiveWP) - Add-On plugin**](https://wordpress.org/plugins/toolbar-extras-givewp/)
|
62 |
+
* [**Builder Shortcode Extras – WordPress Shortcodes Collection to Save You Time**](https://wordpress.org/plugins/builder-shortcode-extras/)
|
63 |
+
* [**Builder Template Categories - for WordPress Page Builders**](https://wordpress.org/plugins/builder-template-categories/)
|
64 |
+
* [**Simple Download Manager for WP Document Revisions**](https://wordpress.org/plugins/wpdr-simple-downloads/)
|
65 |
+
* [Genesis What's New Info](https://wordpress.org/plugins/genesis-whats-new-info/)
|
66 |
+
* [Genesis Layout Extras](https://wordpress.org/plugins/genesis-layout-extras/)
|
67 |
+
* [Genesis Widgetized Not Found & 404](https://wordpress.org/plugins/genesis-widgetized-notfound/)
|
68 |
+
* [Genesis Extra Settings Transporter](https://wordpress.org/plugins/genesis-extra-settings-transporter/)
|
69 |
+
* [Genesis Widgetized Footer](https://wordpress.org/plugins/genesis-widgetized-footer/)
|
70 |
+
* [Genesis Widgetized Archive](https://wordpress.org/plugins/genesis-widgetized-archive/)
|
71 |
+
* [Multisite Toolbar Additions](https://wordpress.org/plugins/multisite-toolbar-additions/)
|
72 |
+
* [Cleaner Plugin Installer](https://wordpress.org/plugins/cleaner-plugin-installer/)
|
73 |
+
* [*My plugins newsletter*](https://eepurl.com/gbAUUn)
|
74 |
+
|
75 |
+
|
76 |
+
== Installation ==
|
77 |
+
|
78 |
+
= Minimum Requirements =
|
79 |
+
|
80 |
+
* WordPress version 4.7 or higher
|
81 |
+
* [Elementor](https://wordpress.org/plugins/elementor/) and [Polylang](https://wordpress.org/plugins/polylang/) plugins - free versions from WordPress.org Plugin Directory
|
82 |
+
* **Optional:** *Elementor Pro* which is needed for Theme Building possibilities (Header templates etc.). This is a paid premium product by Elementor LTD, [available via elementor.com](https://toolbarextras.com/go/elementor-pro/)
|
83 |
+
* PHP version 5.6 or higher
|
84 |
+
* MySQL version 5.0 or higher
|
85 |
+
|
86 |
+
= We Recommend Your Host Supports at least: =
|
87 |
+
|
88 |
+
* PHP version 7.2 or higher
|
89 |
+
* MySQL version 5.6 or higher / or MariaDB 10 or higher
|
90 |
+
|
91 |
+
= Installation =
|
92 |
+
|
93 |
+
1. Install using the WordPress built-in Plugin installer (via **Plugins > Add New** - search for `connect polylang elementor`), or extract the ZIP file and drop the contents in the `wp-content/plugins/` directory of your WordPress installation.
|
94 |
+
2. Activate the plugin through the 'Plugins' menu in WordPress.
|
95 |
+
3. Go to **Polylang > Settings > Custom post types and Taxonomies**, enable the "My Templates" post type (Elementor)
|
96 |
+
4. Assign languages to your pages/ posts/ Elementor templates
|
97 |
+
5. For Elementor templates: set display conditions in Elementor for one template only (your main language is recommended) - templates in the other languages will then get loaded via this plugin magically! :)
|
98 |
+
6. Additionally use the native Elementor Widget: Polylang Switcher
|
99 |
+
|
100 |
+
|
101 |
+
== Frequently Asked Questions ==
|
102 |
+
|
103 |
+
= Where to get support? =
|
104 |
+
At best in our [**Polylang User Community Group at Facebook**](https://www.facebook.com/groups/polylang.users/) - highly recommended for all users of this plugin!
|
105 |
+
|
106 |
+
Additionally, we also monitor [the plugin's support forum](https://wordpress.org/support/plugin/connect-polylang-elementor) here on WordPress.org as well - but our preferred support channel is the FB community group.
|
107 |
+
|
108 |
+
* **What is covered by our support?** - All things regarding THIS plugin ("Polyang Connect for Elementor"), plus the relation to *Polylang*, *Elementor* and *Elementor Pro* of course.
|
109 |
+
* **What is NOT covered by support?** - Anything general regarding multilingual topics and WordPress. Explicitely we **DO NOT** offer any "WPML", "WPBakery" or "Visual Composer" support, and also not for your theme etc.!!!
|
110 |
+
|
111 |
+
|
112 |
+
= Is there a live demo? =
|
113 |
+
Yes, there is.
|
114 |
+
|
115 |
+
[**See live demo on co-author's own website**](https://mariselaveludo.fashion/)
|
116 |
+
|
117 |
+
[Plus: *bigger* versions of the above screenshots are in this external gallery ;-)](https://www.dropbox.com/sh/3i9tuh76etmhl1a/AADm_4L_aesp8Q9ss5NXuSiMa?dl=0)
|
118 |
+
|
119 |
+
|
120 |
+
= Recommended Workflow? =
|
121 |
+
|
122 |
+
1. Setup Polylang at first, add at least TWO languages, one of them make your default language (in Polylang)
|
123 |
+
2. 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 :)
|
124 |
+
3. After that setup an Elementor Theme Builder template - asign it to your Polylang default language, apply conditions in Elementor
|
125 |
+
4. Next, setup a translation template for the template of 3.) -- asign your second Polylang language, DO NOT apply conditions in Elementor
|
126 |
+
|
127 |
+
|
128 |
+
= Recommended Polylang settings? =
|
129 |
+
|
130 |
+
If you have issues with proper display of your translated templates, pages, content it is recommended to check your settings:
|
131 |
+
|
132 |
+
In Polylang Settings at `Languages > Settings > URL Modificatons` set to the following option: "The language is set from the directory name in pretty permalinks" ([see screenshot](https://ps.w.org/connect-polylang-elementor/assets/screenshot-10.png))
|
133 |
+
|
134 |
+
And in the case, all is working well with your current settings then please do not touch them. The above recommendation can be necessary for some users/ installs but not necessarily for all.
|
135 |
+
|
136 |
+
|
137 |
+
= Will this work with Elementor Popup Builder? =
|
138 |
+
It most likely will work totally fine if you follow our recommended workflow (see above). If not, please ask in [our FB user group](https://www.facebook.com/groups/polylang.users/).
|
139 |
+
|
140 |
+
|
141 |
+
= Correct Elementor template does not show up? =
|
142 |
+
Every page/ post/ template must be assigned a language for this to work. This is standard Polylang procedure but it should be noted in case "it doesnt work".
|
143 |
+
|
144 |
+
Also, for Elementor Templates, the post type must be enabled for Polylang support: Go to **Polylang > Settings > Custom post types and Taxonomies**, enable the "My Templates" post type (Elementor).
|
145 |
+
|
146 |
+
|
147 |
+
= Where is the Elementor Widget to be found? =
|
148 |
+
It's in the widget category "General Elements". Plus, if Elementor Pro is active and you're editing a template, the widget additionally appears in the "Site" widget category.
|
149 |
+
|
150 |
+
*Always via search:* When searching for widgets type "polylang" or "languages" and it will show up immediately! ;-)
|
151 |
+
|
152 |
+
|
153 |
+
= Where is the plugin's settings page? =
|
154 |
+
This plugin has NO settings page, as it does not need one. All it does works just under the hood. Activate the plugin. Done.
|
155 |
+
|
156 |
+
(If there will be settings needed in the future, we might add options in later plugin versions.)
|
157 |
+
|
158 |
+
|
159 |
+
= Is Elementor Pro required? =
|
160 |
+
Technically, Elementor Pro is not required - but highly recommended, though.
|
161 |
+
|
162 |
+
Elementor Pro is required for these features of the plugin:
|
163 |
+
|
164 |
+
* Translating Elementor Theme Builder Templates the version is required, otherwise this will not work.
|
165 |
+
* Dynamic Tags, additionally added by the plugin
|
166 |
+
|
167 |
+
For the other features of the plugin the regular free version of Elementor is sufficient - so the native Elementor language switcher widget will work also that way already ;-)
|
168 |
+
|
169 |
+
|
170 |
+
= Is Polylang Pro supported? =
|
171 |
+
Yes, it is! :)
|
172 |
+
All features of "Polylang Connect for Elementor" work with both, *Polylang* (free) AND *Polylang Pro* (Premium).
|
173 |
+
|
174 |
+
|
175 |
+
= Are custom flags supported? =
|
176 |
+
In general, [custom flags](https://polylang.pro/doc/can-i-use-my-own-flags-for-the-language-switcher/) are supported in the Polylang Switcher Elementor widget and in the Dynamic Tag (Current Language Flag).
|
177 |
+
However, the default flags in Polylang are sized `16px` wide and `11px` high, this automatically applies to custom flags - as it is fully handled internally by Polylang.
|
178 |
+
|
179 |
+
To use a different size for custom flags we are trying to find ways to implement this for Elementor in future versions of this plugin.
|
180 |
+
|
181 |
+
|
182 |
+
= Typography and uppercase settings? =
|
183 |
+
In the Polylang Switcher Elementor widget there are typography settings available for the Switcher menu items. These settings are CSS based of course, and applied "globally" to the various states they are for: normal, hover, active (current language). The available toggles for uppercase are done code-wise and therefore have a lower priority - this means the CSS always takes over, if wanted. That way you are most flexible with quick settings (toggles) but have all styling options at hand if needed.
|
184 |
+
|
185 |
+
|
186 |
+
= Is Elementor plugin needed? =
|
187 |
+
Yes, it is. Otherwise this connect plugin won't do anything. Elementor is available for free on WordPress.org.
|
188 |
+
|
189 |
+
The Elementor Pro Add-On plugin is needed for the Theme Builder capabilities (for example Header templates), plus the feature of "Dynamic Tags". So it is highly recommended. But if it is not installed/ activated, the depending features from the connect plugin won't even load. So it is all optional.
|
190 |
+
|
191 |
+
The language switcher widget only needs Elementor base plugin to work ;-)
|
192 |
+
|
193 |
+
|
194 |
+
= Other recommended plugins for multilingual websites? =
|
195 |
+
There are quite a few:
|
196 |
+
|
197 |
+
* [**Country Flags for Elementor**](https://wordpress.org/plugins/country-flags-for-elementor/) - Native Elementor widget
|
198 |
+
* [**Polylang Pro** (Premium)](https://polylang.pro/downloads/polylang-pro/) - The official premium version with more features, plus premium support
|
199 |
+
* [**Polylang for WooCommerce** (Premium)](https://polylang.pro/downloads/polylang-for-woocommerce/) - Makes WooCommerce multilingual - official Polylang Add-On
|
200 |
+
* [**Lingotek Translation**](https://wordpress.org/plugins/lingotek-translation/) - Native Polylang integration - Lingotek brings convenient cloud-based localization and translation for WordPress
|
201 |
+
* [**Integrate Gravity Forms + Polylang**](https://wordpress.org/plugins/integrate-gravity-forms-polylang/) - Add form titles, descriptions, field labels, etc. to Polylang string translations
|
202 |
+
* [**WPML to Polylang**](https://wordpress.org/plugins/wpml-to-polylang/) - From the Polylang developer himself
|
203 |
+
|
204 |
+
|
205 |
+
= More info on Translations? =
|
206 |
+
|
207 |
+
* English - default, always included
|
208 |
+
* German (de_DE): Deutsch - immer dabei! :-)
|
209 |
+
* For custom and update-safe language files please upload them to `/wp-content/languages/connect-polylang-elementor/` (just create this folder) - This enables you to use fully custom translations that won't be overridden on plugin updates. Also, complete custom English wording is possible with that as well, just use a language file like `connect-polylang-elementor-en_US.mo/.po` to achieve that (for creating one see the following tools).
|
210 |
+
|
211 |
+
**Easy WordPress.org plugin translation platform with GlotPress platform:** [**Translate "Polylang Connect for Elementor"...**](https://translate.wordpress.org/projects/wp-plugins/connect-polylang-elementor)
|
212 |
+
|
213 |
+
*Note:* All my plugins are internationalized/ translateable by default. This is very important for all users worldwide. So please contribute your language to the plugin to make it even more useful. For translating and validating I recommend the awesome ["Poedit Editor"](https://www.poedit.net/), which works fine on Windows, macOS and Linux.
|
214 |
+
|
215 |
+
|
216 |
+
== Screenshots ==
|
217 |
+
|
218 |
+
1. Ensure that my templates is ticked in Polylang post types and Taxonomies. Although the plugin will automatically tick this for you 😊
|
219 |
+
|
220 |
+
2. Header Template in Elementor showing that they have both been translated
|
221 |
+
|
222 |
+
3. Polylang Widget in Elementor under Site
|
223 |
+
|
224 |
+
4. Polylang Widget options in Elementor
|
225 |
+
|
226 |
+
5. Polylang Widget Styling Options in Elementor
|
227 |
+
|
228 |
+
6. Set your primary language display conditions for your primary language
|
229 |
+
|
230 |
+
7. DO NOT SET A DISPLAY CONDITION FOR ANY OTHER LANGUAGE ---> Polylang will do this for you. Save without conditions
|
231 |
+
|
232 |
+
8. (1/2) Working language header templates on the front end. Styled by the widget. Previously this was not an option in Polylang. (other than editing the menu options) Polylang users could not display language codes but now they can 😉. Thanks to Polylang Connect for Elementor.
|
233 |
+
|
234 |
+
9. (2/2) Working language header templates on the front end. Styled by the widget. Previously this was not an option in Polylang. (other than editing the menu options) Polylang users could not display language codes but now they can 😉. Thanks to Polylang Connect for Elementor.
|
235 |
+
|
236 |
+
10. Recommended Polylang URL settings if you have issues with translated templates/ templates
|
237 |
+
|
238 |
+
|
239 |
+
== Changelog ==
|
240 |
+
|
241 |
+
= 1.0.0 - 2018-11-28 =
|
242 |
+
* Official public release on WordPress.org
|
243 |
+
|
244 |
+
|
245 |
+
= 0.9.1 - 2018-11-27 =
|
246 |
+
* *First Release Candidate (RC) version*
|
247 |
+
* New: Automatic enabling of Elementor My Templates post type for Polylang support
|
248 |
+
* Tweak: Code improvements throughout
|
249 |
+
* Tweak: Inline documentation and PHP doc improvements
|
250 |
+
|
251 |
+
|
252 |
+
= 0.9.0 - 2018-11-26 =
|
253 |
+
* *Second beta version*
|
254 |
+
* New: More settings for Polylang Switcher widget
|
255 |
+
* Tweak: Improved Dynamic Tags additions
|
256 |
+
* Tweak: Improved Elementor Finder integration
|
257 |
+
|
258 |
+
|
259 |
+
= 0.8.0 - 2018-11-25 =
|
260 |
+
* *First beta version*
|
261 |
+
* New: Added native Elementor Widget - Polylang Language Switcher
|
262 |
+
* New: Added Dynamic Tags for Polylang (requires Elementor Pro)
|
263 |
+
|
264 |
+
|
265 |
+
= 0.7.0 - 2018-11-24 =
|
266 |
+
* *Second alpha version*
|
267 |
+
* New: Added Elementor Finder integration for Polylang plugin links and resources
|
268 |
+
* New: Make plugin translateable - added German translations
|
269 |
+
* New: Added Readme file, plus `composer.json`
|
270 |
+
* New: First public alpha release on GitHub
|
271 |
+
|
272 |
+
|
273 |
+
= 0.5.0 - 2018-10-30 =
|
274 |
+
* *Plugin idea by Brad*
|
275 |
+
* *First alpha version by David*
|
276 |
+
* New: Template tweaks work in form of plugin code - coding standards improvements
|
277 |
+
|
278 |
+
|
279 |
+
== Upgrade Notice ==
|
280 |
+
|
281 |
+
= 1.0.0 =
|
282 |
+
Just released into the wild.
|
283 |
+
|
284 |
+
|
285 |
+
== Donate ==
|
286 |
+
Enjoy using *Polylang Connect for Elementor*? [**Please consider making a donation**](https://www.paypal.me/deckerweb) to support the project's continued development.
|
287 |
+
|
288 |
+
|
289 |
+
== Credits ==
|
290 |
+
Credit where credit is due. The following code/ classes, all licensed under the GPL. Note: Credit is also referenced in the code doc block inline where used.
|
291 |
+
|
292 |
+
* Polylang Switcher class (Elementor Widget) and its CSS based on widget from plugin "Language Switcher for Elementor" by Solitweb (GPLv2 or later)
|
293 |
+
|
294 |
+
|
295 |
+
== Plugin Links ==
|
296 |
+
* [Translations (WP GlotPress Platform)](https://translate.wordpress.org/projects/wp-plugins/connect-polylang-elementor)
|
297 |
+
* [User support forums](https://wordpress.org/support/plugin/connect-polylang-elementor)
|
298 |
+
* [Polylang Users Facebook Group](https://www.facebook.com/groups/polylang.users/)
|
299 |
+
* [DECKERWEB WordPress Plugins Facebook Group](https://www.facebook.com/groups/deckerweb.wordpress.plugins/)
|