iubenda Cookie Solution for GDPR - Version 3.2.0

Version Description

  • Set EN as default language on QuickGenerator
  • Bugfix: PCP detection not correctly rated
  • Translate plugin into [IT, FR, PT-BR, ES, NL]
  • Pre-select website language on the language setup dropdown
Download this release

Release Info

Developer iubenda
Plugin Icon 128x128 iubenda Cookie Solution for GDPR
Version 3.2.0
Comparing to
See all releases

Code changes from version 3.1.2 to 3.2.0

assets/js/admin.js CHANGED
@@ -158,7 +158,7 @@ document.addEventListener("DOMContentLoaded", function () {
158
  error: function(response) { // if error occured
159
 
160
  $("#alert-div").addClass("alert--failure");
161
- $("#alert-image").attr('src',iub_js_vars['site_url'] + '/wp-content/plugins/iubenda-cookie-wp-solution/assets/images/banner_failure.svg');
162
  $("#alert-message").text(response.responseText);
163
 
164
 
@@ -210,7 +210,7 @@ document.addEventListener("DOMContentLoaded", function () {
210
 
211
  console.log(response.responseText)
212
  $("#alert-div").addClass("alert--failure");
213
- $("#alert-image").attr('src',iub_js_vars['site_url'] + '/wp-content/plugins/iubenda-cookie-wp-solution/assets/images/banner_failure.svg');
214
  $("#alert-message").text(response.responseText);
215
 
216
 
@@ -247,6 +247,12 @@ document.addEventListener("DOMContentLoaded", function () {
247
  $('.'+serviceKey+'-item').removeClass("list_radar__item--on").addClass("list_radar__item--off");
248
  $('#configiration-'+serviceKey).toggle();
249
 
 
 
 
 
 
 
250
  // Update rating circular bar if rating percentage is not equal undefined
251
  if(response.rating_percentage != undefined){
252
  document.querySelectorAll(".circularBar").forEach(function (el) {
@@ -689,7 +695,7 @@ jQuery(document).ready(function($){
689
 
690
  if (result.status === 'error'){
691
  $("#alert-div").addClass("alert--failure");
692
- $("#alert-image").attr('src',iub_js_vars['site_url'] + '/wp-content/plugins/iubenda-cookie-wp-solution/assets/images/banner_failure.svg');
693
  $("#alert-message").html(result.message);
694
  $("#alert-div-container").fadeIn( 300 );
695
  }
158
  error: function(response) { // if error occured
159
 
160
  $("#alert-div").addClass("alert--failure");
161
+ $("#alert-image").attr('src',iub_js_vars['plugin_url'] + '/assets/images/banner_failure.svg');
162
  $("#alert-message").text(response.responseText);
163
 
164
 
210
 
211
  console.log(response.responseText)
212
  $("#alert-div").addClass("alert--failure");
213
+ $("#alert-image").attr('src',iub_js_vars['plugin_url'] + '/assets/images/banner_failure.svg');
214
  $("#alert-message").text(response.responseText);
215
 
216
 
247
  $('.'+serviceKey+'-item').removeClass("list_radar__item--on").addClass("list_radar__item--off");
248
  $('#configiration-'+serviceKey).toggle();
249
 
250
+ // Update service status label
251
+ let service_status_label = $('#'+serviceKey+'-status-label');
252
+ if(service_status_label != undefined){
253
+ service_status_label.html(service_status_label.data('status-label-off'));
254
+ }
255
+
256
  // Update rating circular bar if rating percentage is not equal undefined
257
  if(response.rating_percentage != undefined){
258
  document.querySelectorAll(".circularBar").forEach(function (el) {
695
 
696
  if (result.status === 'error'){
697
  $("#alert-div").addClass("alert--failure");
698
+ $("#alert-image").attr('src',iub_js_vars['plugin_url'] + '/assets/images/banner_failure.svg');
699
  $("#alert-message").html(result.message);
700
  $("#alert-div-container").fadeIn( 300 );
701
  }
includes/CookieSolutionGenerator.php CHANGED
@@ -23,7 +23,7 @@ class CookieSolutionGenerator {
23
 
24
  // Handle if the website is single language
25
  if($language == 'default'){
26
- $language = iubenda()->lang_current;
27
  }
28
 
29
  // Workaround to solve return languages if has 'pt' language
23
 
24
  // Handle if the website is single language
25
  if($language == 'default'){
26
+ $language = iubenda()->lang_current ?: iubenda()->lang_default;
27
  }
28
 
29
  // Workaround to solve return languages if has 'pt' language
includes/LanguageHelper.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // exit if accessed directly
3
+ if (!defined('ABSPATH')) exit;
4
+
5
+ /**
6
+ * Class LanguageHelper
7
+ */
8
+ class LanguageHelper {
9
+
10
+ /**
11
+ * Get the language code of logged in user profile
12
+ *
13
+ * @param bool $lower_case
14
+ * @return string
15
+ */
16
+ public function get_user_profile_language_code($lower_case = false): string {
17
+ $iub_supported_languages = iubenda()->supported_languages;
18
+ $user_profile_language = get_bloginfo("language");
19
+
20
+ // Check if the current user language is supported by iubenda
21
+ if (iub_array_get($iub_supported_languages, $user_profile_language) ?: null) {
22
+ $result = $user_profile_language;
23
+ }
24
+ // Remove the country from the language code to check if iubenda supports the current user language without the country
25
+ else{
26
+ $locale = explode('-', $user_profile_language) ?: [];
27
+ $result = iub_array_get($iub_supported_languages, $locale[0]) ? $locale[0] : null;
28
+ }
29
+
30
+ // Fallback to EN if current user language is not supported
31
+ if(!$result){
32
+ $result = 'en';
33
+ }
34
+
35
+ return $lower_case ? strtolower($result) : $result;
36
+ }
37
+
38
+ /**
39
+ * Get the site's default language code
40
+ *
41
+ * @param bool $lower_case
42
+ * @return string
43
+ */
44
+ public function get_default_website_language_code($lower_case = false): string {
45
+ if ((is_plugin_active('polylang/polylang.php') || is_plugin_active('polylang-pro/polylang.php')) && function_exists('PLL')) {
46
+ $default_language_local_code = pll_default_language('locale');
47
+ $website_language_code = iub_array_get(iubenda()->lang_mapping, $default_language_local_code);
48
+ }
49
+ elseif (is_plugin_active('sitepress-multilingual-cms/sitepress.php') && class_exists('SitePress')) {
50
+ global $sitepress;
51
+ $website_language_code = $sitepress->get_default_language();
52
+ }
53
+ else {
54
+ $website_language_code = iub_array_get(iubenda()->lang_mapping, get_locale());
55
+ }
56
+
57
+ return $lower_case ? strtolower($website_language_code) : $website_language_code;
58
+ }
59
+
60
+ }
includes/PrivacyPolicyGenerator.php CHANGED
@@ -19,8 +19,13 @@ class PrivacyPolicyGenerator {
19
  if(!$cookiePolicyId){
20
  return null;
21
  }
 
22
 
23
- $privacyTitle = $language == 'default' ? iub__2('Privacy Policy', 'iubenda', $language) : __('Privacy Policy', 'iubenda');
 
 
 
 
24
 
25
  $ppConfiguration = '
26
  <a href="https://www.iubenda.com/privacy-policy/'.$cookiePolicyId.'" class="iubenda-'.$buttonStyle.' no-brand iubenda-noiframe iubenda-embed iubenda-noiframe " title="'.$privacyTitle.'">'.$privacyTitle.'</a><script type="text/javascript">(function (w,d) {var loader = function () {var s = d.createElement("script"), tag = d.getElementsByTagName("script")[0]; s.src="https://cdn.iubenda.com/iubenda.js"; tag.parentNode.insertBefore(s,tag);}; if(w.addEventListener){w.addEventListener("load", loader, false);}else if(w.attachEvent){w.attachEvent("onload", loader);}else{w.onload = loader;}})(window, document);</script>
19
  if(!$cookiePolicyId){
20
  return null;
21
  }
22
+ $privacyTitle = 'Privacy Policy';
23
 
24
+ // If the language has translation in iubenda plugin
25
+ $language_code = array_search($language, iubenda()->lang_mapping) ?: null;
26
+ if($language_code){
27
+ $privacyTitle = __iub_trans('Privacy Policy', $language_code);
28
+ }
29
 
30
  $ppConfiguration = '
31
  <a href="https://www.iubenda.com/privacy-policy/'.$cookiePolicyId.'" class="iubenda-'.$buttonStyle.' no-brand iubenda-noiframe iubenda-embed iubenda-noiframe " title="'.$privacyTitle.'">'.$privacyTitle.'</a><script type="text/javascript">(function (w,d) {var loader = function () {var s = d.createElement("script"), tag = d.getElementsByTagName("script")[0]; s.src="https://cdn.iubenda.com/iubenda.js"; tag.parentNode.insertBefore(s,tag);}; if(w.addEventListener){w.addEventListener("load", loader, false);}else if(w.attachEvent){w.attachEvent("onload", loader);}else{w.onload = loader;}})(window, document);</script>
includes/ProductHelper.php CHANGED
@@ -99,4 +99,22 @@ class ProductHelper
99
 
100
  return boolval(trim($iubenda_code));
101
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  }
99
 
100
  return boolval(trim($iubenda_code));
101
  }
102
+
103
+ /**
104
+ * Get intersect supported local languages intersect with iubenda supported languages
105
+ *
106
+ */
107
+ public function get_local_supported_language(){
108
+ if (iubenda()->multilang && !empty(iubenda()->languages)) {
109
+ $local_languages = array_keys(iubenda()->languages_locale) ?: [];
110
+ $local_languages = iubenda()->language_unification_locale_to_iub($local_languages);
111
+
112
+ $iubenda_intersect_supported_langs = array_intersect($local_languages, array_keys(iubenda()->supported_languages)) ?: [];
113
+ }
114
+ else {
115
+ $iubenda_intersect_supported_langs = array_intersect([iub_array_get(iubenda()->lang_mapping, get_locale())], array_values(iubenda()->lang_mapping)) ?: [];
116
+ }
117
+
118
+ return $iubenda_intersect_supported_langs;
119
+ }
120
  }
includes/QuickGeneratorService.php CHANGED
@@ -88,6 +88,14 @@ class QuickGeneratorService
88
  $public_ids[$local_lang_code] = iub_array_get($privacy_policy, 'public_id');
89
  }
90
  }
 
 
 
 
 
 
 
 
91
  }else{
92
  $privacy_policies['default'] = $privacy_policy;
93
 
@@ -552,7 +560,7 @@ class QuickGeneratorService
552
  */
553
  private function plugin_settings_save_options($default_options = true)
554
  {
555
- $new_options = iub_array_get($_POST, 'iubenda_plugin_settings');
556
 
557
  if (!$default_options) {
558
  $new_options['ctype'] = (bool)isset($new_options['ctype']);
@@ -621,10 +629,10 @@ class QuickGeneratorService
621
 
622
  private function add_amp_permission_error()
623
  {
624
- $message = "Currently, you do not have write permission for <i>%s</i>. For instructions on how to fix this, please read <a target=\"_blank\" href=\"%s\">our guide</a>.";
625
- $our_guide_URL = 'https://www.iubenda.com/en/help/1215-cookie-solution-wordpress-plugin-installation-guide#amp-permissions';
626
  $file_path = IUBENDA_PLUGIN_PATH . 'templates' . DIRECTORY_SEPARATOR;
627
- add_settings_error('cs_settings_errors', 'iub_cs_settings_updated', __(sprintf($message, $file_path, $our_guide_URL), 'iubenda'), 'error');
628
- iubenda()->settings->add_notice( 'iub_integrated_success', __(sprintf($message, $file_path, $our_guide_URL), 'iubenda'), 'error' );
 
 
629
  }
630
  }
88
  $public_ids[$local_lang_code] = iub_array_get($privacy_policy, 'public_id');
89
  }
90
  }
91
+
92
+ // Getting supported local languages intersect with iubenda supported languages
93
+ $iubenda_intersect_supported_langs = (new ProductHelper())->get_local_supported_language();
94
+
95
+ // Fallback to default language if no supported local languages intersect with iubenda supported languages
96
+ if (empty($iubenda_intersect_supported_langs)) {
97
+ $public_ids[iubenda()->lang_default] = iub_array_get($privacy_policy, 'public_id');
98
+ }
99
  }else{
100
  $privacy_policies['default'] = $privacy_policy;
101
 
560
  */
561
  private function plugin_settings_save_options($default_options = true)
562
  {
563
+ $new_options = iub_array_get($_POST, 'iubenda_plugin_settings', []) ?: [];
564
 
565
  if (!$default_options) {
566
  $new_options['ctype'] = (bool)isset($new_options['ctype']);
629
 
630
  private function add_amp_permission_error()
631
  {
 
 
632
  $file_path = IUBENDA_PLUGIN_PATH . 'templates' . DIRECTORY_SEPARATOR;
633
+ $message = sprintf( __( 'Currently, you do not have write permission for <i class="text-bold">%s</i>. For instructions on how to fix this, please read <a class="link-underline" target="_blank" href="%s">our guide</a>.', 'iubenda' ), $file_path, iubenda()->settings->links['amp_permission_support']);
634
+
635
+ add_settings_error('cs_settings_errors', 'iub_cs_settings_updated', $message, 'error');
636
+ iubenda()->settings->add_notice( 'iub_integrated_success', $message, 'error' );
637
  }
638
  }
includes/RadarService.php CHANGED
@@ -162,9 +162,11 @@ class RadarService {
162
  $message = "Something went wrong: " . $response->get_error_message();
163
  }
164
 
165
- wp_send_json(['code' => $responseCode, 'status' => 'error', 'message' => $message]);
166
- wp_die();
 
 
 
167
  }
168
  }
169
-
170
  }
162
  $message = "Something went wrong: " . $response->get_error_message();
163
  }
164
 
165
+ if (defined('DOING_AJAX') && DOING_AJAX) {
166
+ wp_send_json(['code' => $responseCode, 'status' => 'error', 'message' => $message]);
167
+ wp_die();
168
+ }
169
+ return true;
170
  }
171
  }
 
172
  }
includes/ServiceRating.php CHANGED
@@ -19,7 +19,7 @@ class ServiceRating {
19
  return true;
20
  }
21
 
22
- if($this->is_service_installed_by_radar('cp') == true){
23
  return true;
24
  }
25
  return false;
@@ -30,7 +30,7 @@ class ServiceRating {
30
  return true;
31
  }
32
 
33
- if($this->is_service_installed_by_radar('cp') == true){
34
  return true;
35
  }
36
  return false;
@@ -41,7 +41,7 @@ class ServiceRating {
41
  return true;
42
  }
43
 
44
- if($this->is_service_installed_by_radar('pp') == true){
45
  return true;
46
  }
47
  return false;
@@ -52,7 +52,7 @@ class ServiceRating {
52
  return true;
53
  }
54
 
55
- if($this->is_service_installed_by_radar('tc') == true){
56
  return true;
57
  }
58
  return false;
@@ -65,6 +65,13 @@ class ServiceRating {
65
  return false;
66
  }
67
 
 
 
 
 
 
 
 
68
  public function check_service_status($service){
69
  if($service == 'cs'){
70
  return $this->is_cookie_solution_activated();
@@ -96,24 +103,31 @@ class ServiceRating {
96
  'cs' => [
97
  'status' => $this->is_cookie_solution_activated(),
98
  'label' => __('Set up a cookie banner', 'iubenda'),
99
- 'paragraph'=> __('This accounts for 25% of your score. Your cookie banner should inform your users about your use of cookies and similar tracking technologies, and their rights in this regard. You may need a banner if either the GDPR, CCPA or ePrivacy apply to you.', 'iubenda')
100
  ],
101
  'cons' => [
102
  'status' => boolval($this->is_cookie_solution_activated() && $this->is_cookie_solution_automatically_parse_enabled()),
103
  'label' => __('Only track users that give consent', 'iubenda'),
104
- 'paragraph'=> __('This accounts for 25% of your score. If you’re based in Europe or have Europe-based users, you likely need to block cookies from running until you receive user consent. To do this, select “Automatically block scripts detected by the plugin”.', 'iubenda')
105
  ],
106
  'pp' => [
107
  'status' => $this->is_privacy_policy_activated(),
108
  'label' => __('Set up a privacy policy', 'iubenda'),
109
- 'paragraph'=> __('This accounts for 25% of your score. A privacy policy is a requirement under most privacy laws around the world. This document typically includes legally required disclosures about the type of personal data you process, why you need to process it, how the processing is done and the user’s rights under applicable law.', 'iubenda')
110
  ],
111
  'tc' => [
112
  'status' => $this->is_terms_conditions_activated(),
113
  'label' => __('Set up terms and conditions', 'iubenda'),
114
- 'paragraph'=> __('This accounts for 25% of your score. Terms and conditions help to protect you, the website owner, from potential liabilities and more. Furthermore, if you run an e-commerce site or app, having this document may be legally required as Terms typically contain legally mandatory disclosures. Terms are legally binding documents, and therefore it’s important to ensure that they actually fit your specific scenario.', 'iubenda')
115
  ],
116
  ];
117
  }
118
 
 
 
 
 
 
 
 
119
  }
19
  return true;
20
  }
21
 
22
+ if($this->is_service_detected_or_installed_by_radar('cp') == true){
23
  return true;
24
  }
25
  return false;
30
  return true;
31
  }
32
 
33
+ if($this->is_service_detected_or_installed_by_radar('cp') == true){
34
  return true;
35
  }
36
  return false;
41
  return true;
42
  }
43
 
44
+ if($this->is_service_detected_or_installed_by_radar('pp') == true){
45
  return true;
46
  }
47
  return false;
52
  return true;
53
  }
54
 
55
+ if($this->is_service_detected_or_installed_by_radar('tc') == true){
56
  return true;
57
  }
58
  return false;
65
  return false;
66
  }
67
 
68
+ private function is_service_detected_by_radar($service){
69
+ if(iub_array_get($this->radar_api_configuration, 'status') == 'completed'){
70
+ return boolval(iub_array_get($this->radar_api_configuration, 'result.meta.'.'detected_'.$service));
71
+ }
72
+ return false;
73
+ }
74
+
75
  public function check_service_status($service){
76
  if($service == 'cs'){
77
  return $this->is_cookie_solution_activated();
103
  'cs' => [
104
  'status' => $this->is_cookie_solution_activated(),
105
  'label' => __('Set up a cookie banner', 'iubenda'),
106
+ 'paragraph'=> __('This accounts for 25&#37; of your score. Your cookie banner should inform your users about your use of cookies and similar tracking technologies, and their rights in this regard. You may need a banner if either the GDPR, CCPA or ePrivacy apply to you.', 'iubenda')
107
  ],
108
  'cons' => [
109
  'status' => boolval($this->is_cookie_solution_activated() && $this->is_cookie_solution_automatically_parse_enabled()),
110
  'label' => __('Only track users that give consent', 'iubenda'),
111
+ 'paragraph'=> __('This accounts for 25&#37; of your score. If you’re based in Europe or have Europe-based users, you likely need to block cookies from running until you receive user consent. To do this, select “Automatically block scripts detected by the plugin”.', 'iubenda')
112
  ],
113
  'pp' => [
114
  'status' => $this->is_privacy_policy_activated(),
115
  'label' => __('Set up a privacy policy', 'iubenda'),
116
+ 'paragraph'=> __('This accounts for 25&#37; of your score. A privacy policy is a requirement under most privacy laws around the world. This document typically includes legally required disclosures about the type of personal data you process, why you need to process it, how the processing is done and the user’s rights under applicable law.', 'iubenda')
117
  ],
118
  'tc' => [
119
  'status' => $this->is_terms_conditions_activated(),
120
  'label' => __('Set up terms and conditions', 'iubenda'),
121
+ 'paragraph'=> __('This accounts for 25&#37; of your score. Terms and conditions help to protect you, the website owner, from potential liabilities and more. Furthermore, if you run an e-commerce site or app, having this document may be legally required as Terms typically contain legally mandatory disclosures. Terms are legally binding documents, and therefore it’s important to ensure that they actually fit your specific scenario.', 'iubenda')
122
  ],
123
  ];
124
  }
125
 
126
+ private function is_service_detected_or_installed_by_radar(string $string) {
127
+ if($this->is_service_installed_by_radar($string) == true || $this->is_service_detected_by_radar($string) == true){
128
+ return true;
129
+ }
130
+ return false;
131
+ }
132
+
133
  }
includes/settings.php CHANGED
@@ -63,7 +63,7 @@ class iubenda_Settings {
63
  add_shortcode( 'iub-tc-button', array( new QuickGeneratorService(), 'tc_button_shortcode' ) );
64
  add_shortcode( 'iub-pp-button', array( new QuickGeneratorService(), 'pp_button_shortcode' ) );
65
 
66
- }
67
 
68
  /**
69
  * Load default settings.
@@ -140,7 +140,8 @@ class iubenda_Settings {
140
  'how_cons_rate' => 'https://www.iubenda.com/en/help/3081-prior-blocking-of-cookie-scripts#wordpress',
141
  'how_pp_rate' => 'https://www.iubenda.com/en/help/6187-what-should-be-in-a-privacy-policy',
142
  'how_tc_rate' => 'https://www.iubenda.com/en/help/19482-what-should-basic-terms-and-conditions-include',
143
- 'user_account' => 'https://www.iubenda.com/account',
 
144
  ),
145
  'it' => array(
146
  'iab' => 'https://www.iubenda.com/it/help/7440-enable-preference-management-iab-framework',
@@ -169,6 +170,7 @@ class iubenda_Settings {
169
  'how_pp_rate' => 'https://www.iubenda.com/it/help/6187-what-should-be-in-a-privacy-policy',
170
  'how_tc_rate' => 'https://www.iubenda.com/it/help/19482-what-should-basic-terms-and-conditions-include',
171
  'user_account' => 'https://www.iubenda.com/it/account',
 
172
  ),
173
  'de' => array(
174
  'iab' => 'https://www.iubenda.com/de/help/7440-enable-preference-management-iab-framework',
@@ -197,6 +199,7 @@ class iubenda_Settings {
197
  'how_pp_rate' => 'https://www.iubenda.com/de/help/6187-what-should-be-in-a-privacy-policy',
198
  'how_tc_rate' => 'https://www.iubenda.com/de/help/19482-what-should-basic-terms-and-conditions-include',
199
  'user_account' => 'https://www.iubenda.com/de/account',
 
200
  ),
201
  'es' => array(
202
  'iab' => 'https://www.iubenda.com/es/help/7440-enable-preference-management-iab-framework',
@@ -225,6 +228,7 @@ class iubenda_Settings {
225
  'how_pp_rate' => 'https://www.iubenda.com/es/help/6187-what-should-be-in-a-privacy-policy',
226
  'how_tc_rate' => 'https://www.iubenda.com/es/help/19482-what-should-basic-terms-and-conditions-include',
227
  'user_account' => 'https://www.iubenda.com/es/account',
 
228
  ),
229
  'fr' => array(
230
  'iab' => 'https://www.iubenda.com/fr/help/7440-enable-preference-management-iab-framework',
@@ -253,14 +257,15 @@ class iubenda_Settings {
253
  'how_pp_rate' => 'https://www.iubenda.com/fr/help/6187-what-should-be-in-a-privacy-policy',
254
  'how_tc_rate' => 'https://www.iubenda.com/fr/help/19482-what-should-basic-terms-and-conditions-include',
255
  'user_account' => 'https://www.iubenda.com/fr/account',
 
256
  ),
257
  'pt-br' => array(
258
  'iab' => 'https://www.iubenda.com/pt-br/help/7440-enable-preference-management-iab-framework',
259
  'enable_iab' => 'https://www.iubenda.com/pt-br/help/7440-iab-framework-cmp#why-publishers-should-enable-the-transparency-and-consent-framework',
260
  'guide' => 'https://www.iubenda.com/pt-br/cookie-solution',
261
- 'plugin_page' => 'https://www.iubenda.com/pt-br/help/posts/810',
262
  'support_forum' => 'https://support.iubenda.com/support/home',
263
- 'documentation' => 'https://www.iubenda.com/pt-br/help/posts/810',
264
  'how_generate_tc' => 'https://www.iubenda.com/pt-br/help/19394',
265
  'how_generate_cs' => 'https://www.iubenda.com/pt-br/help/680',
266
  'how_generate_pp' => 'https://www.iubenda.com/pt-br/help/463-generate-privacy-policy',
@@ -281,6 +286,36 @@ class iubenda_Settings {
281
  'how_pp_rate' => 'https://www.iubenda.com/pt-br/help/6187-what-should-be-in-a-privacy-policy',
282
  'how_tc_rate' => 'https://www.iubenda.com/pt-br/help/19482-what-should-basic-terms-and-conditions-include',
283
  'user_account' => 'https://www.iubenda.com/pt-br/account',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
284
  )
285
  );
286
 
@@ -289,11 +324,10 @@ class iubenda_Settings {
289
  }
290
  $this->quick_generator = get_option(static::IUB_QG_Response) ?: [];
291
 
292
- $locale = explode( '_', get_locale() );
293
- $locale_code = $locale[0];
294
 
295
  // assign links
296
- $this->links = in_array( $locale_code, array_keys( $links ) ) ? $links[$locale_code] : $links['en'];
297
 
298
  // handle actions
299
  if ( ! empty( $_POST['save'] ) ) {
@@ -433,6 +467,7 @@ class iubenda_Settings {
433
  // Localize the script with new data
434
  $iub_js_vars = [
435
  'site_url' => get_site_url(),
 
436
  'radar_status' => iub_array_get($iubendaRadarApiConfiguration, 'status'),
437
  'form_id' => iub_array_get($_GET,'form_id', 0),
438
  'iub_dismiss_notification_alert_nonce' => wp_create_nonce( 'iub_dismiss_notification_alert_nonce' ),
63
  add_shortcode( 'iub-tc-button', array( new QuickGeneratorService(), 'tc_button_shortcode' ) );
64
  add_shortcode( 'iub-pp-button', array( new QuickGeneratorService(), 'pp_button_shortcode' ) );
65
 
66
+ }
67
 
68
  /**
69
  * Load default settings.
140
  'how_cons_rate' => 'https://www.iubenda.com/en/help/3081-prior-blocking-of-cookie-scripts#wordpress',
141
  'how_pp_rate' => 'https://www.iubenda.com/en/help/6187-what-should-be-in-a-privacy-policy',
142
  'how_tc_rate' => 'https://www.iubenda.com/en/help/19482-what-should-basic-terms-and-conditions-include',
143
+ 'user_account' => 'https://www.iubenda.com/en/account',
144
+ 'amp_permission_support' => 'https://www.iubenda.com/en/help/1215#amp-permissions'
145
  ),
146
  'it' => array(
147
  'iab' => 'https://www.iubenda.com/it/help/7440-enable-preference-management-iab-framework',
170
  'how_pp_rate' => 'https://www.iubenda.com/it/help/6187-what-should-be-in-a-privacy-policy',
171
  'how_tc_rate' => 'https://www.iubenda.com/it/help/19482-what-should-basic-terms-and-conditions-include',
172
  'user_account' => 'https://www.iubenda.com/it/account',
173
+ 'amp_permission_support' => 'https://www.iubenda.com/it/help/1215#amp-permissions'
174
  ),
175
  'de' => array(
176
  'iab' => 'https://www.iubenda.com/de/help/7440-enable-preference-management-iab-framework',
199
  'how_pp_rate' => 'https://www.iubenda.com/de/help/6187-what-should-be-in-a-privacy-policy',
200
  'how_tc_rate' => 'https://www.iubenda.com/de/help/19482-what-should-basic-terms-and-conditions-include',
201
  'user_account' => 'https://www.iubenda.com/de/account',
202
+ 'amp_permission_support' => 'https://www.iubenda.com/de/help/1215#amp-permissions'
203
  ),
204
  'es' => array(
205
  'iab' => 'https://www.iubenda.com/es/help/7440-enable-preference-management-iab-framework',
228
  'how_pp_rate' => 'https://www.iubenda.com/es/help/6187-what-should-be-in-a-privacy-policy',
229
  'how_tc_rate' => 'https://www.iubenda.com/es/help/19482-what-should-basic-terms-and-conditions-include',
230
  'user_account' => 'https://www.iubenda.com/es/account',
231
+ 'amp_permission_support' => 'https://www.iubenda.com/es/help/1215#amp-permissions'
232
  ),
233
  'fr' => array(
234
  'iab' => 'https://www.iubenda.com/fr/help/7440-enable-preference-management-iab-framework',
257
  'how_pp_rate' => 'https://www.iubenda.com/fr/help/6187-what-should-be-in-a-privacy-policy',
258
  'how_tc_rate' => 'https://www.iubenda.com/fr/help/19482-what-should-basic-terms-and-conditions-include',
259
  'user_account' => 'https://www.iubenda.com/fr/account',
260
+ 'amp_permission_support' => 'https://www.iubenda.com/fr/help/1215#amp-permissions'
261
  ),
262
  'pt-br' => array(
263
  'iab' => 'https://www.iubenda.com/pt-br/help/7440-enable-preference-management-iab-framework',
264
  'enable_iab' => 'https://www.iubenda.com/pt-br/help/7440-iab-framework-cmp#why-publishers-should-enable-the-transparency-and-consent-framework',
265
  'guide' => 'https://www.iubenda.com/pt-br/cookie-solution',
266
+ 'plugin_page' => 'https://www.iubenda.com/pt-br/help/45342-cookie-solution-manual-de-instalacao-do-plugin-do-wordpress',
267
  'support_forum' => 'https://support.iubenda.com/support/home',
268
+ 'documentation' => 'https://www.iubenda.com/pt-br/help/45342-cookie-solution-manual-de-instalacao-do-plugin-do-wordpress',
269
  'how_generate_tc' => 'https://www.iubenda.com/pt-br/help/19394',
270
  'how_generate_cs' => 'https://www.iubenda.com/pt-br/help/680',
271
  'how_generate_pp' => 'https://www.iubenda.com/pt-br/help/463-generate-privacy-policy',
286
  'how_pp_rate' => 'https://www.iubenda.com/pt-br/help/6187-what-should-be-in-a-privacy-policy',
287
  'how_tc_rate' => 'https://www.iubenda.com/pt-br/help/19482-what-should-basic-terms-and-conditions-include',
288
  'user_account' => 'https://www.iubenda.com/pt-br/account',
289
+ 'amp_permission_support' => 'https://www.iubenda.com/pt-br/help/1215#amp-permissions'
290
+ ),
291
+ 'nl' => array(
292
+ 'iab' => 'https://www.iubenda.com/nl/help/7440-enable-preference-management-iab-framework',
293
+ 'enable_iab' => 'https://www.iubenda.com/nl/help/7440-iab-framework-cmp#why-publishers-should-enable-the-transparency-and-consent-framework',
294
+ 'guide' => 'https://www.iubenda.com/nl/cookie-solution',
295
+ 'plugin_page' => 'https://www.iubenda.com/nl/help/posts/810',
296
+ 'support_forum' => 'https://support.iubenda.com/support/home',
297
+ 'documentation' => 'https://www.iubenda.com/nl/help/posts/810',
298
+ 'how_generate_tc' => 'https://www.iubenda.com/nl/help/19394',
299
+ 'how_generate_cs' => 'https://www.iubenda.com/nl/help/680',
300
+ 'how_generate_pp' => 'https://www.iubenda.com/nl/help/463-generate-privacy-policy',
301
+ 'how_generate_cons' => 'https://www.iubenda.com/nl/help/6473-consent-solution-js-documentation#generate-embed',
302
+ 'about_pp' => 'https://www.iubenda.com/nl/privacy-and-cookie-policy-generator',
303
+ 'about_cs' => 'https://www.iubenda.com/nl/cookie-solution',
304
+ 'about_tc' => 'https://www.iubenda.com/nl/terms-and-conditions-generator',
305
+ 'flow_page' => "https://www.iubenda.com/nl/flow/{$siteId}",
306
+ 'about_cons' => 'https://www.iubenda.com/nl/consent-solution',
307
+ 'amp_support' => 'https://www.iubenda.com/nl/help/22135-cookie-solution-amp-wordpress#amp-domain',
308
+ 'enable_amp_support' => 'https://www.iubenda.com/nl/help/22135-cookie-solution-amp-wordpress#step-2-enable-the-google-amp-support',
309
+ 'wordpress_support' => 'https://www.iubenda.com/nl/help/370-how-to-use-iubenda-privacy-and-cookie-policy-on-a-wordpress-website',
310
+ 'privacy_policy_generator_edit' => iub_array_get($QG_Response, 'privacy_policies.nl.edit_url', '') ?? '',
311
+ 'privacy_policy_generator_setup' => iub_array_get($QG_Response, 'privacy_policies.nl.setup_url', '') ?? '',
312
+ 'automatic_block_scripts' => 'https://www.iubenda.com/nl/help/1215-cookie-solution-wordpress-plugin-installation-guide#functionality',
313
+ 'how_cs_rate' => 'https://www.iubenda.com/nl/help/21985-cookie-banner-do-you-really-need-one-and-how-can-you-get-a-cookie-notice-for-your-website',
314
+ 'how_cons_rate' => 'https://www.iubenda.com/nl/help/3081-prior-blocking-of-cookie-scripts#wordpress',
315
+ 'how_pp_rate' => 'https://www.iubenda.com/nl/help/6187-what-should-be-in-a-privacy-policy',
316
+ 'how_tc_rate' => 'https://www.iubenda.com/nl/help/19482-what-should-basic-terms-and-conditions-include',
317
+ 'user_account' => 'https://www.iubenda.com/nl/account',
318
+ 'amp_permission_support' => 'https://www.iubenda.com/nl/help/1215#amp-permissions'
319
  )
320
  );
321
 
324
  }
325
  $this->quick_generator = get_option(static::IUB_QG_Response) ?: [];
326
 
327
+ $user_profile_language = (new LanguageHelper())->get_user_profile_language_code(true);
 
328
 
329
  // assign links
330
+ $this->links = in_array( $user_profile_language, array_keys( $links ) ) ? $links[$user_profile_language] : $links['en'];
331
 
332
  // handle actions
333
  if ( ! empty( $_POST['save'] ) ) {
467
  // Localize the script with new data
468
  $iub_js_vars = [
469
  'site_url' => get_site_url(),
470
+ 'plugin_url' => IUBENDA_PLUGIN_URL,
471
  'radar_status' => iub_array_get($iubendaRadarApiConfiguration, 'status'),
472
  'form_id' => iub_array_get($_GET,'form_id', 0),
473
  'iub_dismiss_notification_alert_nonce' => wp_create_nonce( 'iub_dismiss_notification_alert_nonce' ),
iubenda_cookie_solution.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Cookie and Consent Solution for the GDPR & ePrivacy
4
  Plugin URI: https://www.iubenda.com
5
  Description: An All-in-One approach developed by iubenda, which includes functionalities of two powerful solutions that help to make your website GDPR and ePrivacy compliant.
6
- Version: 3.1.2
7
  Author: iubenda
8
  Author URI: https://www.iubenda.com
9
  License: MIT License
@@ -34,7 +34,7 @@ define( 'IUB_DEBUG', false );
34
  * @property-read iubenda_Settings $settings
35
  *
36
  * @class iubenda
37
- * @version 3.1.2
38
  */
39
  class iubenda {
40
 
@@ -92,7 +92,7 @@ class iubenda {
92
  )
93
  );
94
  public $base_url;
95
- public $version = '3.1.2';
96
  public $activation = array(
97
  'update_version' => 0,
98
  'update_notice' => true,
@@ -264,6 +264,7 @@ class iubenda {
264
  include_once( IUBENDA_PLUGIN_PATH . 'includes/ServiceRating.php' );
265
  include_once( IUBENDA_PLUGIN_PATH . 'includes/widget/IubendaLegalWidget.php' );
266
  include_once( IUBENDA_PLUGIN_PATH . 'includes/ProductHelper.php' );
 
267
  }
268
 
269
  /**
@@ -833,7 +834,7 @@ class iubenda {
833
  *
834
  * @return void
835
  */
836
- private function do_upgrade_processes() {
837
  $db_version = get_option( 'iubenda_cookie_law_version' ) ?: '2.5.91';
838
 
839
  // Version 3.0.0 and above
@@ -1236,20 +1237,27 @@ if (!function_exists('iub_array_get')) {
1236
  }
1237
  }
1238
 
1239
- if (!function_exists('iub__2')) {
1240
  /**
1241
  * @param $string
1242
  * @param $textDomain
1243
  * @param $locale
1244
  * @return string|void
1245
  */
1246
- function iub__2($string, $textDomain, $locale): string
1247
  {
1248
  global $l10n;
1249
- if(isset($l10n[$textDomain])) $backup = $l10n[$textDomain];
1250
- load_textdomain($textDomain, get_template_directory() . '/languages/'. $locale . '.mo');
 
 
 
1251
  $translation = __($string,$textDomain);
1252
- if(isset($bkup)) $l10n[$textDomain] = $backup;
 
 
 
 
1253
  return $translation;
1254
  }
1255
  }
3
  Plugin Name: Cookie and Consent Solution for the GDPR & ePrivacy
4
  Plugin URI: https://www.iubenda.com
5
  Description: An All-in-One approach developed by iubenda, which includes functionalities of two powerful solutions that help to make your website GDPR and ePrivacy compliant.
6
+ Version: 3.2.0
7
  Author: iubenda
8
  Author URI: https://www.iubenda.com
9
  License: MIT License
34
  * @property-read iubenda_Settings $settings
35
  *
36
  * @class iubenda
37
+ * @version 3.2.0
38
  */
39
  class iubenda {
40
 
92
  )
93
  );
94
  public $base_url;
95
+ public $version = '3.2.0';
96
  public $activation = array(
97
  'update_version' => 0,
98
  'update_notice' => true,
264
  include_once( IUBENDA_PLUGIN_PATH . 'includes/ServiceRating.php' );
265
  include_once( IUBENDA_PLUGIN_PATH . 'includes/widget/IubendaLegalWidget.php' );
266
  include_once( IUBENDA_PLUGIN_PATH . 'includes/ProductHelper.php' );
267
+ include_once( IUBENDA_PLUGIN_PATH . 'includes/LanguageHelper.php' );
268
  }
269
 
270
  /**
834
  *
835
  * @return void
836
  */
837
+ public function do_upgrade_processes() {
838
  $db_version = get_option( 'iubenda_cookie_law_version' ) ?: '2.5.91';
839
 
840
  // Version 3.0.0 and above
1237
  }
1238
  }
1239
 
1240
+ if (!function_exists('__iub_trans')) {
1241
  /**
1242
  * @param $string
1243
  * @param $textDomain
1244
  * @param $locale
1245
  * @return string|void
1246
  */
1247
+ function __iub_trans($string, $locale, $textDomain = 'iubenda' ): string
1248
  {
1249
  global $l10n;
1250
+ // Take a backup of textDomain
1251
+ if (isset($l10n[$textDomain])) {
1252
+ $backup = $l10n[$textDomain];
1253
+ }
1254
+ load_textdomain($textDomain, IUBENDA_PLUGIN_PATH . 'languages/'.$textDomain.'-'. $locale . '.mo');
1255
  $translation = __($string,$textDomain);
1256
+
1257
+ // update back the backup of textDomain if isset
1258
+ if (isset($backup)) {
1259
+ $l10n[$textDomain] = $backup;
1260
+ }
1261
  return $translation;
1262
  }
1263
  }
languages/iubenda-de_DE.mo ADDED
Binary file
languages/iubenda-de_DE.po ADDED
@@ -0,0 +1,1218 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: \n"
4
+ "POT-Creation-Date: 2022-06-22 14:50+0200\n"
5
+ "PO-Revision-Date: 2022-08-05 18:51+0000\n"
6
+ "Last-Translator: \n"
7
+ "Language-Team: German\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
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13
+ "X-Generator: Loco https://localise.biz/\n"
14
+ "X-Poedit-Basepath: ..\n"
15
+ "X-Poedit-KeywordsList: _e;__\n"
16
+ "X-Poedit-SearchPath-0: .\n"
17
+ "Report-Msgid-Bugs-To: \n"
18
+ "X-Loco-Version: 2.6.2; wp-6.0.1"
19
+
20
+ #: views/partials/modals/modal_almost_there.php:25
21
+ msgid "(required)"
22
+ msgstr "(erforderlich)"
23
+
24
+ #: views/partials/buttonPosition.php:74
25
+ msgid ""
26
+ "A shortcode is a tiny bit of code that allows embedding interactive elements "
27
+ "or creating complex page layouts with a minimal effort.<br>Just copy and "
28
+ "paste the shortcode where you want the button to appear."
29
+ msgstr ""
30
+ "Ein Shortcode ist ein kleines Stück Code, mit dem sich interaktive Elemente "
31
+ "einbetten oder komplexe Seitenlayouts mit minimalem Aufwand erstellen lassen."
32
+ "<br>Kopieren Sie einfach den Shortcode und fügen Sie ihn dort ein, wo der "
33
+ "Button erscheinen soll."
34
+
35
+ #: views/cons-configuration.php:17
36
+ msgid "Activate & Configure Consent Solution by"
37
+ msgstr "Aktivieren und konfigurieren Sie die Consent Solution indem Sie"
38
+
39
+ #: views/cons-configuration.php:14
40
+ msgid ""
41
+ "Activate <strong>Consent Solution</strong> on our website in your iubenda "
42
+ "dashboard and paste here the <strong>API key</strong> to integrate it on "
43
+ "your website."
44
+ msgstr ""
45
+ "Aktivieren Sie die <strong>Consent Solution</strong> auf unserer Website in "
46
+ "Ihrem iubenda-Dashboard und fügen Sie hier den <strong>API-Schlüssel</strong>"
47
+ " ein, um ihn auf Ihrer Website zu integrieren."
48
+
49
+ #: views/integrate-setup.php:21
50
+ msgid "Add a cookie banner"
51
+ msgstr "Ein Cookie-Banner hinzufügen"
52
+
53
+ #: views/cons-configuration.php:44
54
+ msgid "Add forms"
55
+ msgstr "Formulare hinzufügen"
56
+
57
+ #: views/cons-single-form.php:268
58
+ msgid "Add New Document"
59
+ msgstr "Neues Dokument hinzufügen"
60
+
61
+ #: views/cons-single-form.php:216
62
+ msgid "Add New Exclude"
63
+ msgstr "Neuen Ausschluss hinzufügen"
64
+
65
+ #: views/partials/csGeneralSettings.php:247
66
+ #: views/partials/csPluginSettings.php:133
67
+ msgid "Add New iframe"
68
+ msgstr "Neuen iframe hinzufügen"
69
+
70
+ #: views/cons-single-form.php:155
71
+ msgid "Add New Preference"
72
+ msgstr "Neue Präferenz hinzufügen"
73
+
74
+ #: views/partials/csGeneralSettings.php:212
75
+ #: views/partials/csPluginSettings.php:98
76
+ msgid "Add New Script"
77
+ msgstr "Neues Skript hinzufügen"
78
+
79
+ #: views/integrate-setup.php:140
80
+ msgid "Add the privacy policy button"
81
+ msgstr "Datenschutzerklärung-Button hinzufügen"
82
+
83
+ #: views/partials/buttonPosition.php:5 views/tc-configuration.php:61
84
+ msgid "Add to the footer automatically"
85
+ msgstr "Automatisch in den Footer hinzufügen"
86
+
87
+ #: includes/forms-list-table.php:279
88
+ msgid "All form sources"
89
+ msgstr "Alle Formularquellen"
90
+
91
+ #: views/cons-single-form.php:250
92
+ msgid "Alternatively, you may add your own custom document identifiers."
93
+ msgstr ""
94
+ "Als Alternative können Sie auch Ihre eigenen Identifikatoren hinzufügen."
95
+
96
+ #: includes/amp.php:281
97
+ msgid "AMP Cookie Consent"
98
+ msgstr "AMP-Cookie-Einwilligung"
99
+
100
+ #: includes/settings.php:109 views/partials/csGeneralSettings.php:187
101
+ #: views/partials/csGeneralSettings.php:203
102
+ #: views/partials/csGeneralSettings.php:222
103
+ #: views/partials/csGeneralSettings.php:238
104
+ #: views/partials/csPluginSettings.php:73
105
+ #: views/partials/csPluginSettings.php:89
106
+ #: views/partials/csPluginSettings.php:108
107
+ #: views/partials/csPluginSettings.php:124
108
+ msgid "Analytics"
109
+ msgstr "Analytik"
110
+
111
+ #: views/partials/frontpage_main_box.php:22
112
+ msgid "Analyzing your website"
113
+ msgstr "Ihre Website analysieren"
114
+
115
+ #: views/cons-configuration.php:53
116
+ msgid "Auto-detect forms"
117
+ msgstr "Formulare automatisch erkennen"
118
+
119
+ #: views/integrate-setup.php:36 views/partials/csGeneralSettings.php:77
120
+ msgid "Auto-generated configuration file"
121
+ msgstr "Auto-generierte Konfigurationsdatei"
122
+
123
+ #: views/cons-single-form.php:71
124
+ msgid "Autogenerated"
125
+ msgstr "Autogeneriert"
126
+
127
+ #: views/integrate-setup.php:108 views/partials/csGeneralSettings.php:149
128
+ #: views/partials/csPluginSettings.php:4
129
+ msgid "Automatically block scripts detected by the plugin"
130
+ msgstr "Automatisch vom Plugin erkannte Skripte blockieren"
131
+
132
+ #: views/partials/bannerPosition.php:41
133
+ msgid "Background-overlay"
134
+ msgstr "Hintergrund-Overlay"
135
+
136
+ #: views/partials/csSimplifiedConfiguration.php:68
137
+ msgid "Banner buttons"
138
+ msgstr "Banner-Buttons"
139
+
140
+ #: includes/settings.php:107
141
+ msgid "Basic interactions & functionalities"
142
+ msgstr "Einfache Interaktionen & Funktionalitäten"
143
+
144
+ #: views/partials/csGeneralSettings.php:185
145
+ #: views/partials/csGeneralSettings.php:201
146
+ #: views/partials/csGeneralSettings.php:220
147
+ #: views/partials/csGeneralSettings.php:236
148
+ #: views/partials/csPluginSettings.php:71
149
+ #: views/partials/csPluginSettings.php:87
150
+ #: views/partials/csPluginSettings.php:106
151
+ #: views/partials/csPluginSettings.php:122
152
+ msgid "Basic interactions &amp; functionalities"
153
+ msgstr "Einfache Interaktionen &amp; Funktionalitäten"
154
+
155
+ #: views/partials/csGeneralSettings.php:173
156
+ msgid "Blocked domains"
157
+ msgstr "Gesperrte Domänen"
158
+
159
+ #: views/partials/csSimplifiedConfiguration.php:22
160
+ msgid "Both"
161
+ msgstr "Beide"
162
+
163
+ #: views/partials/buttonPosition.php:1 views/tc-configuration.php:57
164
+ msgid "Button position"
165
+ msgstr "Button Position"
166
+
167
+ #: views/partials/buttonStyle.php:1 views/tc-configuration.php:32
168
+ msgid "Button style"
169
+ msgstr "Button Stil"
170
+
171
+ #: views/cons-configuration.php:60 views/cons-single-form.php:277
172
+ #: views/cs-configuration.php:15 views/plugin-settings.php:44
173
+ #: views/pp-configuration.php:33 views/tc-configuration.php:131
174
+ msgid "Cancel"
175
+ msgstr "Abbrechen"
176
+
177
+ #: views/partials/csSimplifiedConfiguration.php:18
178
+ msgid "CCPA Only"
179
+ msgstr "Nur CCPA"
180
+
181
+ #: views/cons-configuration.php:18 views/partials/csManualConfiguration.php:6
182
+ #: views/tc-configuration.php:16
183
+ msgid "clicking here"
184
+ msgstr "hier klicken"
185
+
186
+ #: views/partials/csGeneralSettings.php:2
187
+ msgid "Configuration"
188
+ msgstr "Konfiguration"
189
+
190
+ #: views/partials/product-card.php:48
191
+ msgid "Configure"
192
+ msgstr "Konfigurieren"
193
+
194
+ #: views/partials/csManualConfiguration.php:5
195
+ msgid "Configure cookie banner by"
196
+ msgstr "Konfigurieren Sie Ihr Cookie-Banner indem Sie"
197
+
198
+ #: views/tc-configuration.php:15
199
+ msgid "Configure terms and conditions by"
200
+ msgstr "Konfigurieren Sie die AGBs indem Sie"
201
+
202
+ #: views/partials/csManualConfiguration.php:2
203
+ msgid ""
204
+ "Configure your cookie banner on our website and paste here the embed code to "
205
+ "integrate it to your website."
206
+ msgstr ""
207
+ "Konfigurieren Sie Ihr Cookie-Banner auf unserer Website und fügen Sie hier "
208
+ "den Einbettungs-Code ein, um es in Ihre Website zu integrieren."
209
+
210
+ #: views/tc-configuration.php:12
211
+ msgid ""
212
+ "Configure your terms and conditions on our website and paste here the embed "
213
+ "code to integrate the button on your website."
214
+ msgstr ""
215
+ "Konfigurieren Sie Ihre AGBs auf unserer Website und fügen Sie hier den "
216
+ "Einbettungs-Code ein, um den Button auf Ihrer Website zu integrieren."
217
+
218
+ #: views/cons-configuration.php:31
219
+ msgid "Confirm API"
220
+ msgstr "API bestätigen"
221
+
222
+ #: includes/settings.php:97 includes/settings.php:430 includes/settings.php:441
223
+ #: includes/settings.php:1182
224
+ msgid "Consent Solution"
225
+ msgstr "Consent Solution"
226
+
227
+ #: views/partials/modals/modal_almost_there.php:37
228
+ msgid "Consent Solution API key"
229
+ msgstr "API-Schlüssel der Consent Solution"
230
+
231
+ #: views/partials/modals/modal_select_language.php:54
232
+ msgid "Continue"
233
+ msgstr "Weiter"
234
+
235
+ #: includes/settings.php:91 includes/settings.php:424
236
+ #: includes/settings.php:1162
237
+ msgid "Cookie Solution"
238
+ msgstr "Cookie Solution"
239
+
240
+ #: includes/QuickGeneratorService.php:625
241
+ #, php-format
242
+ msgid ""
243
+ "Currently, you do not have write permission for <i class=\"text-bold\">%s</i>"
244
+ ". For instructions on how to fix this, please read <a class=\"link-"
245
+ "underline\" target=\"_blank\" href=\"%s\">our guide</a>."
246
+ msgstr ""
247
+ "Derzeit haben Sie keine Schreibberechtigung für <i class=\"text-bold\">%s</i>"
248
+ ". Wie Sie das Problem beheben können, lesen Sie bitte <a class=\"link-"
249
+ "underline\" target=\\\"blank\\\" href=\\\"%s\\\">unsere Anleitung</a>."
250
+
251
+ #: views/integrate-setup.php:40 views/partials/csGeneralSettings.php:81
252
+ msgid "Custom configuration file"
253
+ msgstr "Benutzerdefinierte Konfigurationsdatei"
254
+
255
+ #: views/partials/csGeneralSettings.php:177
256
+ #: views/partials/csPluginSettings.php:63
257
+ msgid "Custom iframes"
258
+ msgstr "Benutzerdefinierte iframes"
259
+
260
+ #: views/partials/csGeneralSettings.php:176
261
+ #: views/partials/csPluginSettings.php:62
262
+ msgid "Custom scripts"
263
+ msgstr "Benutzerdefinierte Skripte"
264
+
265
+ #: views/partials/csPluginSettings.php:59
266
+ msgid "Custom settings"
267
+ msgstr "Benutzerdefinierte Einstellungen"
268
+
269
+ #: views/partials/bannerStyle.php:9 views/partials/buttonStyle.php:19
270
+ #: views/tc-configuration.php:50
271
+ msgid "Dark"
272
+ msgstr "Dunkel"
273
+
274
+ #: includes/forms-list-table.php:90
275
+ msgid "Date"
276
+ msgstr "Datum"
277
+
278
+ #: views/integrate-setup.php:73 views/integrate-setup.php:91
279
+ #: views/partials/csGeneralSettings.php:115
280
+ msgid "Default language"
281
+ msgstr "Standardsprache"
282
+
283
+ #: includes/forms-list-table.php:160
284
+ msgid "Delete"
285
+ msgstr "Löschen"
286
+
287
+ #: views/partials/csPluginSettings.php:41 views/plugin-settings.php:25
288
+ msgid "Delete all plugin data upon deactivation"
289
+ msgstr "Alle Plugin-Daten bei Deaktivierung löschen"
290
+
291
+ #: views/partials/csPluginSettings.php:33 views/plugin-settings.php:17
292
+ msgid "Do not run the plugin inside the RSS feed (recommended)"
293
+ msgstr "Das Plugin nicht innerhalb des RSS-Feeds ausführen (empfohlen)"
294
+
295
+ #: views/partials/csPluginSettings.php:37 views/plugin-settings.php:21
296
+ msgid "Do not run the plugin on POST requests (recommended)"
297
+ msgstr "Das Plugin nicht bei POST-Anfragen ausführen (empfohlen)"
298
+
299
+ #: views/partials/footer.php:5
300
+ msgid "Documentation"
301
+ msgstr "Dokumentation"
302
+
303
+ #: includes/forms-list-table.php:159
304
+ msgid "Edit"
305
+ msgstr "Bearbeiten"
306
+
307
+ #: views/integrate-setup.php:29 views/partials/csGeneralSettings.php:69
308
+ msgid "Enable Google AMP support"
309
+ msgstr "Aktivieren Sie die Google AMP-Unterstützung"
310
+
311
+ #: views/partials/csSimplifiedConfiguration.php:88
312
+ msgid "Enable IAB Transparency and Consent Framework"
313
+ msgstr "IAB Transparency and Consent Framework aktivieren"
314
+
315
+ #: views/integrate-setup.php:128 views/partials/csGeneralSettings.php:170
316
+ #: views/partials/csPluginSettings.php:24
317
+ msgid ""
318
+ "Enable this option to improve performance <strong>only</strong> if your site "
319
+ "does <strong>not</strong> use a cache system or a cache plugin and if you're "
320
+ "<strong>not</strong> collecting per-category consent. If you're in doubt, "
321
+ "keep this setting disabled"
322
+ msgstr ""
323
+ "Aktivieren Sie diese Option, um die Leistung <strong>nur</strong> zu "
324
+ "verbessern, wenn Ihre Website <strong>nicht</strong> ein Cache-System oder "
325
+ "ein Cache-Plugin verwendet und wenn Sie <strong>keine</strong> "
326
+ "kategoriebezogenen Einwilligung sammeln. Im Zweifelsfall sollten Sie diese "
327
+ "Einstellung deaktiviert lassen."
328
+
329
+ #: includes/settings.php:917
330
+ msgid "Enjoying the iubenda Cookie & Consent Solution Plugin?"
331
+ msgstr "Gefällt Ihnen das iubenda Cookie & Consent Solution Plugin?"
332
+
333
+ #: views/partials/csGeneralSettings.php:216
334
+ #: views/partials/csGeneralSettings.php:232
335
+ #: views/partials/csPluginSettings.php:102
336
+ #: views/partials/csPluginSettings.php:118
337
+ msgid "Enter custom iframe"
338
+ msgstr "Benutzerdefinierten iframe eingeben"
339
+
340
+ #: views/partials/csGeneralSettings.php:181
341
+ #: views/partials/csGeneralSettings.php:197
342
+ #: views/partials/csPluginSettings.php:67
343
+ #: views/partials/csPluginSettings.php:83
344
+ msgid "Enter custom script"
345
+ msgstr "Benutzerdefiniertes Skript eingeben"
346
+
347
+ #: views/cons-single-form.php:108 views/cons-single-form.php:133
348
+ #: views/cons-single-form.php:234 views/cons-single-form.php:244
349
+ #: views/cons-single-form.php:260
350
+ msgid "Enter field name"
351
+ msgstr "Feldname eingeben"
352
+
353
+ #: views/partials/csSimplifiedConfiguration.php:59
354
+ msgid "EU Only"
355
+ msgstr "Nur EU"
356
+
357
+ #: views/cons-single-form.php:164
358
+ msgid "Exclude field"
359
+ msgstr "Feld ausschließen"
360
+
361
+ #: views/cons-single-form.php:159
362
+ msgid "Exclude fields"
363
+ msgstr "Felder ausschließen"
364
+
365
+ #: views/cons-single-form.php:160
366
+ msgid ""
367
+ "Exclude fields allow you to create a list of fields that you would like to "
368
+ "exclude from your Consent Solution recorded proofs (for e.g. password or "
369
+ "other fields not related to the consent)."
370
+ msgstr ""
371
+ "Mit der Option Felder ausschließen können Sie eine Liste von Feldern "
372
+ "erstellen, die Sie aus den aufgezeichneten Nachweisen der Consent Solution "
373
+ "ausschließen möchten (z. B. Kennwort oder andere Felder, die nicht mit der "
374
+ "Einwilligung zusammenhängen)."
375
+
376
+ #: includes/settings.php:108 views/partials/csGeneralSettings.php:186
377
+ #: views/partials/csGeneralSettings.php:202
378
+ #: views/partials/csGeneralSettings.php:221
379
+ #: views/partials/csGeneralSettings.php:237
380
+ #: views/partials/csPluginSettings.php:72
381
+ #: views/partials/csPluginSettings.php:88
382
+ #: views/partials/csPluginSettings.php:107
383
+ #: views/partials/csPluginSettings.php:123
384
+ msgid "Experience enhancement"
385
+ msgstr "Verbesserte Nutzererfahrung"
386
+
387
+ #: views/partials/csSimplifiedConfiguration.php:72
388
+ msgid "Explicit Accept and Customize buttons"
389
+ msgstr "Ausdrückliche Zustimmen- und Anpassen-Buttons"
390
+
391
+ #: views/partials/csSimplifiedConfiguration.php:77
392
+ msgid "Explicit Reject button"
393
+ msgstr "Ausdrücklicher Ablehnen-Button"
394
+
395
+ #: views/cons-single-form.php:12
396
+ msgid "Field Mapping"
397
+ msgstr "Feldzuordnung"
398
+
399
+ #: includes/forms-list-table.php:89
400
+ msgid "Fields"
401
+ msgstr "Felder"
402
+
403
+ #: includes/forms-list-table.php:260
404
+ msgid "Filter"
405
+ msgstr "Filter"
406
+
407
+ #: includes/forms-list-table.php:277
408
+ msgid "Filter by source"
409
+ msgstr "Nach Quelle filtern"
410
+
411
+ #: includes/forms.php:579 includes/forms.php:593
412
+ msgid "First name"
413
+ msgstr "Vorname"
414
+
415
+ #: views/partials/modals/modal_sync.php:4
416
+ msgid ""
417
+ "First of all, tell us if you already use our products for this website or if "
418
+ "you want to start from scratch"
419
+ msgstr ""
420
+ "Verwenden Sie bereits unsere Produkte für diese Website oder wollen Sie bei "
421
+ "Null anfangen?"
422
+
423
+ #: includes/forms.php:153
424
+ msgid "Form"
425
+ msgstr "Formular"
426
+
427
+ #: views/cons-single-form.php:66 views/cons-single-form.php:103
428
+ msgid "Form field"
429
+ msgstr "Formularfeld"
430
+
431
+ #: includes/forms-list-table.php:87
432
+ msgid "Form ID"
433
+ msgstr "Formular ID"
434
+
435
+ #: includes/settings.php:701
436
+ msgid "Form saving failed. Please fill the Subject fields."
437
+ msgstr ""
438
+ "Speicherung des Formulars fehlgeschlagen. Bitte füllen Sie die Betreff-"
439
+ "Felder aus."
440
+
441
+ #: includes/forms-list-table.php:88
442
+ msgid "Form Source"
443
+ msgstr "Formular Quelle"
444
+
445
+ #: includes/forms-list-table.php:86
446
+ msgid "Form Title"
447
+ msgstr "Formular Titel"
448
+
449
+ #: includes/forms.php:152
450
+ msgid "Forms"
451
+ msgstr "Formulare"
452
+
453
+ #: views/partials/modals/modal_pp_created.php:7
454
+ msgid ""
455
+ "From here you can customize your privacy policy by adding the services you "
456
+ "use within your website or you can customize the style of the button that "
457
+ "displays your privacy policy."
458
+ msgstr ""
459
+ "Von hier aus können Sie Ihre Datenschutzerklärung anpassen, indem Sie die "
460
+ "Dienste hinzufügen, die Sie auf Ihrer Website verwenden, oder Sie können den "
461
+ "Stil des Buttons anpassen, der Ihre Datenschutzerklärung anzeigt."
462
+
463
+ #: views/partials/csSimplifiedConfiguration.php:14
464
+ msgid "GDPR Only"
465
+ msgstr "Nur DSGVO"
466
+
467
+ #: views/partials/modals/modal_pp_created.php:9
468
+ msgid "Got it"
469
+ msgstr "Alles klar"
470
+
471
+ #: views/frontpage.php:9
472
+ msgid "Help me get compliant!"
473
+ msgstr "Helfen Sie mir, gesetzeskonform zu werden!"
474
+
475
+ #: views/partials/modals/modal_rating.php:11
476
+ msgid "Here’s how we calculate your rating."
477
+ msgstr "So berechnen wir Ihre Punktzahl."
478
+
479
+ #: views/partials/siteInfo.php:21
480
+ msgid "How is it calculated?"
481
+ msgstr "Wie wird sie berechnet?"
482
+
483
+ #: views/partials/buttonPosition.php:37 views/tc-configuration.php:92
484
+ msgid "HTML"
485
+ msgstr "HTML"
486
+
487
+ #: views/partials/modals/modal_no_website_found.php:11
488
+ #: views/partials/modals/modal_sync.php:8
489
+ msgid "I want to start from scratch"
490
+ msgstr "Ich möchte bei Null beginnen"
491
+
492
+ #: views/cons-single-form.php:225
493
+ msgid "Identifier"
494
+ msgstr "Identifikator"
495
+
496
+ #: views/cons-single-form.php:222
497
+ msgid ""
498
+ "In general, it's important that you declare which legal documents are being "
499
+ "agreed upon when each consent is collected. However, if you use iubenda for "
500
+ "your legal documents, it is *required* that you identify the documents by "
501
+ "selecting them here."
502
+ msgstr ""
503
+ "Im Allgemeinen ist es wichtig, dass Sie bei der Einholung jeder Einwilligung "
504
+ "angeben, welche Rechtsdokumente vereinbart wurden. Wenn Sie jedoch iubenda "
505
+ "für Ihre Rechtsdokumente verwenden, ist es *erforderlich*, dass Sie die "
506
+ "Dokumente identifizieren, indem Sie sie hier auswählen."
507
+
508
+ #: views/partials/integrateFooter.php:4
509
+ msgid "Integrate"
510
+ msgstr "Integrieren"
511
+
512
+ #: views/partials/buttonPosition.php:10 views/tc-configuration.php:65
513
+ msgid "Integrate manually"
514
+ msgstr "Manuell integrieren"
515
+
516
+ #: views/pp-configuration.php:26 views/tc-configuration.php:30
517
+ msgid "Integration"
518
+ msgstr "Integration"
519
+
520
+ #: views/partials/modals/modal_no_website_found.php:8
521
+ msgid ""
522
+ "It seems that it is not possible to access your data with the code you "
523
+ "pasted, do you want to try again or do you prefer to start configuring your "
524
+ "website from scratch?"
525
+ msgstr ""
526
+ "Es scheint, dass es nicht möglich ist, mit dem Code, den Sie eingefügt haben,"
527
+ " auf Ihre Daten zuzugreifen. Möchten Sie es erneut versuchen, oder möchten "
528
+ "Sie Ihre Website von Null an konfigurieren?"
529
+
530
+ #: views/partials/modals/modal_ops_embed_invalid.php:8
531
+ msgid ""
532
+ "It seems that it is not possible to access your data with the code you "
533
+ "pasted, do you want to try again."
534