From ec85e1f4e754e7f3d0263f6a7002b881ba8a0fc5 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sun, 21 Jul 2024 11:35:15 +0200 Subject: [PATCH] v 2.25.0 Use WPUBaseToolbox to check plugins dependencies. --- inc/WPUBaseToolbox/.htaccess | 5 + inc/WPUBaseToolbox/README.md | 37 ++ inc/WPUBaseToolbox/WPUBaseToolbox.php | 624 +++++++++++++++++++ inc/WPUBaseToolbox/assets/form-validation.js | 160 +++++ inc/WPUBaseToolbox/assets/index.php | 1 + inc/WPUBaseToolbox/index.php | 1 + lang/wpuseo-fr_FR.l10n.php | 2 +- lang/wpuseo-fr_FR.mo | Bin 6746 -> 7071 bytes lang/wpuseo-fr_FR.po | 238 +++---- lang/wpuseo-it_IT.l10n.php | 2 +- lang/wpuseo-it_IT.mo | Bin 6618 -> 6923 bytes lang/wpuseo-it_IT.po | 234 ++++--- wpuseo.php | 63 +- 13 files changed, 1117 insertions(+), 250 deletions(-) create mode 100644 inc/WPUBaseToolbox/.htaccess create mode 100644 inc/WPUBaseToolbox/README.md create mode 100644 inc/WPUBaseToolbox/WPUBaseToolbox.php create mode 100644 inc/WPUBaseToolbox/assets/form-validation.js create mode 100644 inc/WPUBaseToolbox/assets/index.php create mode 100644 inc/WPUBaseToolbox/index.php diff --git a/inc/WPUBaseToolbox/.htaccess b/inc/WPUBaseToolbox/.htaccess new file mode 100644 index 0000000..a63c6ca --- /dev/null +++ b/inc/WPUBaseToolbox/.htaccess @@ -0,0 +1,5 @@ +deny from all + + + Allow From All + diff --git a/inc/WPUBaseToolbox/README.md b/inc/WPUBaseToolbox/README.md new file mode 100644 index 0000000..6d1bdd8 --- /dev/null +++ b/inc/WPUBaseToolbox/README.md @@ -0,0 +1,37 @@ +WPU Base Toolbox +--- + +Cool helpers for WordPress Plugins. + +## Insert in the INIT hook + +```php +require_once __DIR__ . '/inc/WPUBaseToolbox/WPUBaseToolbox.php'; +$this->basetoolbox = new \myplugin\WPUBaseToolbox(array( + 'need_form_js' => false +)); +``` + +## Use functions + + +### Get form HTML + +```php +echo $this->basetoolbox->get_form_html('form_edit_note', array( + 'note_name' => array( + 'label' => __('Note Name', 'myplugin'), + 'value' => 'base value' + ), + 'note_content' => array( + 'label' => __('Note Content', 'myplugin'), + 'type' => 'textarea' + ) +), array( + 'button_label' => __('Send modifications', 'myplugin'), + 'hidden_fields' => array( + 'method' => 'edit_note', + 'action' => 'myplugin_callback_crud' + ) +)); +``` diff --git a/inc/WPUBaseToolbox/WPUBaseToolbox.php b/inc/WPUBaseToolbox/WPUBaseToolbox.php new file mode 100644 index 0000000..fe4f902 --- /dev/null +++ b/inc/WPUBaseToolbox/WPUBaseToolbox.php @@ -0,0 +1,624 @@ + true, + 'plugin_name' => 'WPU Base Toolbox' + ); + + public function __construct($args = array()) { + if (!is_array($args)) { + $args = array(); + } + $this->args = array_merge($this->default_module_args, $args); + + add_action('wp_enqueue_scripts', array(&$this, + 'form_scripts' + )); + } + + function form_scripts() { + if ($this->args['need_form_js']) { + wp_enqueue_script(__NAMESPACE__ . '-wpubasetoolbox-form-validation', plugins_url('assets/form-validation.js', __FILE__), array(), $this->plugin_version); + } + } + + /* ---------------------------------------------------------- + Forms + ---------------------------------------------------------- */ + + /* Wrapper + -------------------------- */ + + public function get_form_html($form_id, $fields = array(), $args = array()) { + $html = ''; + if (!is_array($fields) || !is_array($args)) { + return ''; + } + + $args = $this->get_clean_form_args($form_id, $fields, $args); + + $extra_post_attributes = $args['form_attributes']; + + /* Clean & check fields */ + $has_file = false; + foreach ($fields as $field_name => $field) { + $fields[$field_name] = $this->get_clean_field($field_name, $field, $form_id, $args); + if ($fields[$field_name]['type'] == 'file') { + $has_file = true; + } + } + + /* Extra attributes */ + if ($has_file) { + $extra_post_attributes .= ' enctype="multipart/form-data"'; + } + + $button_submit = ''; + + /* Start form */ + if ($args['form_element']) { + $html .= '
'; + } + $html .= $args['html_before_content']; + + $html_fieldset = ''; + $html_wizard = ''; + + /* Insert fields */ + $nb_fieldsets = count($args['fieldsets']); + $fieldset_num = 0; + foreach ($args['fieldsets'] as $fieldset_id => $fieldset) { + $fieldset_num++; + + if ($args['wizard_steps'] && (!isset($fieldset['label']) || !$fieldset['label'])) { + $fieldset['label'] = $fieldset_id; + } + + $attributes = array_merge($fieldset['attributes'], array( + 'data-fielset-id' => $fieldset_id + )); + + $html_fieldset .= '
array_to_html_attributes($attributes) . '>'; + $html_fieldset .= $fieldset['content_before']; + if (isset($fieldset['label']) && $fieldset['label']) { + $html_fieldset .= '' . esc_html($fieldset['label']) . ''; + + if ($args['wizard_steps']) { + $html_wizard .= ''; + } + } + foreach ($fields as $field_name => $field) { + if ($field['fieldset'] != $fieldset_id) { + continue; + } + $html_fieldset .= $this->get_field_html($field_name, $field, $form_id, $args); + } + $html_fieldset .= $fieldset['content_after']; + if ($args['wizard_mode']) { + $btn_prev_class = isset($fieldset['wizard_prev_button_class']) && $fieldset['wizard_prev_button_class'] ? $fieldset['wizard_prev_button_class'] : $args['wizard_prev_button_class']; + $btn_next_class = isset($fieldset['wizard_next_button_class']) && $fieldset['wizard_next_button_class'] ? $fieldset['wizard_next_button_class'] : $args['wizard_next_button_class']; + $btn_prev_label = isset($fieldset['wizard_prev_button_label']) && $fieldset['wizard_prev_button_label'] ? $fieldset['wizard_prev_button_label'] : $args['wizard_prev_button_label']; + $btn_next_label = isset($fieldset['wizard_next_button_label']) && $fieldset['wizard_next_button_label'] ? $fieldset['wizard_next_button_label'] : $args['wizard_next_button_label']; + + $html_fieldset .= '
'; + if ($fieldset_num > 1) { + $html_fieldset .= ''; + } + if ($fieldset_num == $nb_fieldsets) { + $html_fieldset .= $button_submit; + } else { + $html_fieldset .= ''; + } + $html_fieldset .= '
'; + } + $html_fieldset .= '
'; + } + + if ($html_wizard) { + $html .= '
'; + $html .= $html_wizard; + $html .= '
'; + } + $html .= $html_fieldset; + + /* Submit box */ + $html .= '
'; + foreach ($args['hidden_fields'] as $field_id => $field_value) { + $html .= ''; + } + if ($args['has_nonce']) { + $html .= wp_nonce_field($args['nonce_id'], $args['nonce_name'], 0, 0); + } + if (!$args['wizard_mode']) { + $html .= $button_submit; + } + $html .= '
'; + + $html .= $args['html_after_content']; + + /* End form */ + if ($args['form_element']) { + $html .= '
'; + } + return $html; + } + + /* Clean form value + -------------------------- */ + + public function get_clean_form_args($form_id, $fields = array(), $args = array()) { + $default_args = array( + 'button_label' => __('Submit', __NAMESPACE__), + 'button_classname' => 'cssc-button', + 'fieldsets' => array( + 'default' => array( + 'label' => '', + 'attributes' => array(), + 'content_before' => '', + 'content_after' => '' + ) + ), + 'form_attributes' => '', + 'form_classname' => 'cssc-form', + 'form_element' => true, + 'field_group_classname' => 'twoboxes', + 'field_box_classname' => 'box', + 'submit_box_classname' => 'box--submit', + 'html_before_content' => '', + 'html_after_content' => '', + 'hidden_fields' => array(), + 'has_nonce' => true, + 'nonce_id' => $form_id, + 'nonce_name' => $form_id . '_nonce', + 'wizard_mode' => false, + 'wizard_steps' => false, + 'wizard_prev_button_class' => 'btn--prev', + 'wizard_next_button_class' => 'btn--next', + 'wizard_prev_button_label' => __('Previous', __NAMESPACE__), + 'wizard_next_button_label' => __('Next', __NAMESPACE__) + ); + $args = array_merge($default_args, $args); + + $args = apply_filters('wpubasetoolbox_get_form_html_args_' . __NAMESPACE__, $args); + if (!is_array($args['hidden_fields']) || !isset($args['hidden_fields'])) { + $args['hidden_fields'] = array(); + } + if (!is_array($args['fieldsets']) || !isset($args['fieldsets'])) { + $args['fieldsets'] = array(); + } + foreach ($args['fieldsets'] as $fieldset_id => $fieldset) { + $args['fieldsets'][$fieldset_id] = array_merge($default_args['fieldsets']['default'], $fieldset); + if (!is_array($args['fieldsets'][$fieldset_id]['attributes'])) { + $args['fieldsets'][$fieldset_id]['attributes'] = array(); + } + } + return $args; + } + + /* Clean field values + -------------------------- */ + + public function get_clean_field($field_name, $field, $form_id, $args) { + if (!is_array($field)) { + $field = array(); + } + + if (!isset($field['fieldset']) || !array_key_exists($field['fieldset'], $args['fieldsets'])) { + $field['fieldset'] = array_key_first($args['fieldsets']); + } + + $default_field = array( + 'label' => $field_name, + 'type' => 'text', + 'fieldgroup_start' => false, + 'fieldgroup_end' => false, + 'html_before_fieldgroup' => '', + 'html_before_fieldgroup_inner' => '', + 'html_after_fieldgroup' => '', + 'html_after_fieldgroup_inner' => '', + 'html_before_content' => '', + 'html_after_content' => '', + 'value' => '', + 'extra_attributes' => '', + 'data_html' => '', + 'sub_fields' => array(), + 'data' => array( + '0' => __('No'), + '1' => __('Yes') + ), + 'required' => false + ); + $field = array_merge($default_field, $field); + + /* Ensure format */ + if (!is_array($field['data'])) { + $field['data'] = array(); + } + + if (!is_array($field['sub_fields'])) { + $field['sub_fields'] = array(); + } + + foreach ($field['sub_fields'] as $subfield_name => $sub_field) { + $field['sub_fields'][$subfield_name] = $this->get_clean_field($subfield_name, $sub_field, $form_id, $args); + } + + return $field; + } + + public function get_field_html($field_name, $field, $form_id, $args = array()) { + + if (!isset($field['extra_attributes'])) { + echo wp_debug_backtrace_summary(); + die; + } + + /* Values */ + $field_id = strtolower($form_id . '__' . $field_name); + $field_id_name = ' name="' . esc_attr($field_name) . '" id="' . esc_attr($field_id) . '" ' . $field['extra_attributes']; + if ($field['required']) { + $field_id_name .= ' required'; + } + + /* Label */ + $default_label = ''; + + /* Content */ + $html = ''; + switch ($field['type']) { + case 'textarea': + $html .= $default_label; + $html .= ''; + break; + + case 'select': + $html .= $default_label; + $html .= ''; + break; + + case 'radio': + $html .= $default_label; + foreach ($field['data'] as $key => $var) { + $id_field = strtolower($field_id . '___' . $key); + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''; + } + break; + + case 'checkbox': + $checked = $field['value'] ? ' checked="checked"' : ''; + $html .= ''; + $html .= $default_label; + break; + + case 'group': + foreach ($field['sub_fields'] as $subfield_name => $sub_field) { + $html .= $this->get_field_html($subfield_name, $sub_field, $form_id, $args); + } + break; + + default: + $html .= $default_label; + $html .= ''; + } + + if ($html) { + $field_html = $html; + $field_tag = ($field['type'] == 'group') ? 'div' : 'p'; + $html = ''; + $html .= $field['html_before_fieldgroup']; + if ($field['fieldgroup_start']) { + $html .= '
'; + } + $html .= $field['html_before_fieldgroup_inner']; + $html .= '<' . $field_tag . ' class="' . $args['field_box_classname'] . '" data-box-name="' . $field_name . '" data-box-type="' . esc_attr($field['type']) . '">'; + $html .= $field['html_before_content']; + $html .= $field_html; + $html .= ''; + $html .= $field['html_after_content']; + $html .= ''; + $html .= $field['html_after_fieldgroup_inner']; + if ($field['fieldgroup_end']) { + $html .= '
'; + } + $html .= $field['html_after_fieldgroup']; + } + + return $html; + } + + /* Validate form + -------------------------- */ + + function validate_form($source, $form_id, $fields = array(), $args = array()) { + if (!is_array($source) || empty($source) || empty($fields)) { + return false; + } + + $errors = array(); + + $args = $this->get_clean_form_args($form_id, $fields, $args); + + /* Check nonce */ + if ($args['has_nonce']) { + if (!isset($_POST[$args['nonce_name']]) || !wp_verify_nonce($_POST[$args['nonce_name']], $args['nonce_id'])) { + wp_nonce_ays(''); + } + } + + /* Check required fields */ + foreach ($fields as $field_name => $field) { + $field = $this->get_clean_field($field_name, $field, $form_id, $args); + $value = isset($source[$field_name]) ? $source[$field_name] : false; + + if ($field['required'] && !isset($source[$field_name])) { + $errors[] = sprintf(__('The field “%s” is required', __NAMESPACE__), $field['label']); + continue; + } + + if ($field['type'] == 'email' && $field['type'] && !is_email($value)) { + $errors[] = sprintf(__('The field “%s” should be an email', __NAMESPACE__), $field['label']); + } + } + + return $errors; + } + + /* ---------------------------------------------------------- + HTML Helpers + ---------------------------------------------------------- */ + + function array_to_html_attributes($attributes = array()) { + if (!is_array($attributes)) { + return ''; + } + + $html = ''; + foreach ($attributes as $key => $value) { + $html .= ' ' . $key . '="' . esc_attr($value) . '"'; + } + + return trim($html); + } + + function array_to_html_table($array, $args = array()) { + + /* Ensure array is ok */ + if (empty($array) || !is_array($array)) { + return ''; + } + + /* Fix args */ + $default_args = array( + 'table_classname' => 'widefat', + 'htmlspecialchars_td' => true, + 'htmlspecialchars_th' => true, + 'colnames' => array() + ); + if (!is_array($args)) { + $args = array(); + } + $args = array_merge($default_args, $args); + + $html = ''; + + /* HEAD */ + $html .= ''; + foreach ($array[0] as $key => $value) { + $label = $key; + if (isset($args['colnames'][$key])) { + $label = $args['colnames'][$key]; + } + if ($args['htmlspecialchars_th']) { + $label = htmlspecialchars($label); + } + $html .= '' . $label . ''; + } + $html .= ''; + + /* CONTENT */ + $html .= ''; + foreach ($array as $line) { + $html .= ''; + foreach ($line as $value) { + if ($args['htmlspecialchars_td']) { + $value = htmlspecialchars($value); + } + $html .= '' . $value . ''; + } + $html .= ''; + } + $html .= ''; + + /* Return content */ + $html = '' . $html . '
'; + return $html; + } + + /* ---------------------------------------------------------- + Export + ---------------------------------------------------------- */ + + /* Ensure all lines have the same keys + -------------------------- */ + + function export_array_clean_for_csv($data) { + + /* Extract all available keys */ + $all_keys = array(); + foreach ($data as $item) { + $all_keys = array_merge($all_keys, array_keys($item)); + } + $all_keys = array_unique($all_keys); + + foreach ($data as $item_key => $item) { + /* Ensure all rows have the same keys */ + foreach ($all_keys as $k) { + if (!isset($item[$k])) { + $data[$item_key][$k] = ''; + } + } + /* Ensure same sorting of all keys */ + ksort($data[$item_key]); + } + + return $data; + } + + /* Array to JSON + -------------------------- */ + + public function export_array_to_json($data, $name) { + if (!isset($data[0])) { + return; + } + /* Correct headers */ + header('Content-type: application/json'); + header('Content-Disposition: attachment; filename=' . $name . '.json'); + header('Pragma: no-cache'); + + echo json_encode($data); + } + + /* Array to CSV + -------------------------- */ + + public function export_array_to_csv($data, $name) { + if (!isset($data[0])) { + return; + } + + $data = $this->export_array_clean_for_csv($data); + + /* Correct headers */ + header('Content-Type: application/csv'); + header('Content-Disposition: attachment; filename=' . $name . '.csv'); + header('Pragma: no-cache'); + + $all_keys = array_keys($data[0]); + + /* Build and send CSV */ + $output = fopen("php://output", 'w'); + fputcsv($output, $all_keys); + foreach ($data as $item) { + fputcsv($output, $item); + } + fclose($output); + die; + } + + /* ---------------------------------------------------------- + IPs + ---------------------------------------------------------- */ + + /* Thanks to https://stackoverflow.com/a/13646735/975337 */ + function get_user_ip($anonymized = true) { + if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) { + $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; + $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; + } + $client = isset($_SERVER['HTTP_CLIENT_IP']) ? $_SERVER['HTTP_CLIENT_IP'] : ''; + $forward = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : ''; + $remote = $_SERVER['REMOTE_ADDR']; + + if (filter_var($client, FILTER_VALIDATE_IP)) { + $ip = $client; + } elseif (filter_var($forward, FILTER_VALIDATE_IP)) { + $ip = $forward; + } else { + $ip = $remote; + } + if (!$anonymized) { + return $ip; + } + return $this->anonymize_ip($ip); + } + + /* Thanks to https://gist.github.com/svrnm/3a124d2af18a6726f66e */ + function anonymize_ip($ip) { + if ($ip = @inet_pton($ip)) { + return inet_ntop(substr($ip, 0, strlen($ip) / 2) . str_repeat(chr(0), strlen($ip) / 2)); + } + return '0.0.0.0'; + } + + /* ---------------------------------------------------------- + Dependencies + ---------------------------------------------------------- */ + + function check_plugins_dependencies($plugins = array()) { + if (!is_array($plugins) || !is_admin()) { + return; + } + + require_once ABSPATH . 'wp-admin/includes/plugin.php'; + + foreach ($plugins as $plugin) { + + // Check if plugin is active + $has_plugin = is_plugin_active($plugin['path']) || is_plugin_active_for_network($plugin['path']); + + /* Get active must-use plugins list */ + $mu_plugins_path = array( + WPMU_PLUGIN_DIR, + WPMU_PLUGIN_DIR . '/wpu' + ); + foreach ($mu_plugins_path as $mu_plugins_dir) { + if (is_dir($mu_plugins_dir) && file_exists($mu_plugins_dir . '/' . $plugin['path'])) { + $has_plugin = true; + break; + } + } + + if (!$has_plugin) { + $this->missing_plugins[] = $plugin; + } + } + + if (!empty($this->missing_plugins)) { + add_action('admin_notices', array(&$this, + 'set_error_missing_plugins' + )); + } + } + + public function set_error_missing_plugins() { + foreach ($this->missing_plugins as $plugin) { + echo '

' . sprintf(__('The plugin %s depends on the %s plugin. Please install and activate it.', __NAMESPACE__), $this->args['plugin_name'], $plugin['name']) . '

'; + } + } + +} diff --git a/inc/WPUBaseToolbox/assets/form-validation.js b/inc/WPUBaseToolbox/assets/form-validation.js new file mode 100644 index 0000000..12885ca --- /dev/null +++ b/inc/WPUBaseToolbox/assets/form-validation.js @@ -0,0 +1,160 @@ +document.addEventListener("DOMContentLoaded", function() { + 'use strict'; + /* Boxes */ + Array.prototype.forEach.call(document.querySelectorAll('.wpubasetoolbox-form [data-box-name]'), wpubasetoolbox_box_validation); + + /* Wizard */ + Array.prototype.forEach.call(document.querySelectorAll('.wpubasetoolbox-form[data-wizard="1"]'), wpubasetoolbox_form_setup_wizard); +}); + +/* ---------------------------------------------------------- + Fieldset switch +---------------------------------------------------------- */ + +function wpubasetoolbox_form_setup_wizard($form) { + 'use strict'; + var $fieldsets = $form.querySelectorAll('fieldset'); + var _currentFieldset = 0; + var _nbFieldsets = $fieldsets.length; + var $wizardSteps = $form.querySelectorAll(' .form-wizard-steps [data-go]'); + + /* Display first fieldset */ + wpubasetoolbox_fieldset_display($fieldsets, _currentFieldset); + + /* On button click : change visible fieldset */ + Array.prototype.forEach.call($form.querySelectorAll(' .form-navigation [data-dir]'), function($btn) { + $btn.querySelector('span').style['pointer-events'] = 'none'; + $btn.addEventListener('click', btn_click_event, 1); + }); + Array.prototype.forEach.call($wizardSteps, function($btn) { + $btn.querySelector('span').style['pointer-events'] = 'none'; + $btn.addEventListener('click', btn_click_event_go, 1); + }); + + function btn_click_event(e) { + var _dir = e.target.getAttribute('data-dir'); + e.preventDefault(); + if (_dir == 'next') { + /* Check if a field is invalid in this fieldset*/ + if (wpubasetoolbox_fieldset_fieldset_has_invalid_fields($fieldsets[_currentFieldset])) { + return; + } + /* Allow next fieldset */ + _currentFieldset++; + } + else { + /* Always allow previous fieldset */ + _currentFieldset--; + } + go_to_fieldset(_currentFieldset); + } + + function btn_click_event_go(e) { + var _target_fieldset = parseInt(e.target.getAttribute('data-go'), 10); + e.preventDefault(); + for (var i = 0; i <= _target_fieldset; i++) { + go_to_fieldset(i); + /* Do not check target fieldset */ + if (i == _target_fieldset) { + break; + } + /* Check if a field is invalid in this fieldset */ + if (wpubasetoolbox_fieldset_fieldset_has_invalid_fields($fieldsets[i])) { + break; + } + } + } + + function go_to_fieldset(_fieldset) { + /* Ensure everything is ok */ + _currentFieldset = Math.max(0, _fieldset); + _currentFieldset = Math.min(_nbFieldsets - 1, _currentFieldset); + + $form.setAttribute('data-current-fieldset', _currentFieldset); + + /* Display fieldset */ + wpubasetoolbox_fieldset_display($fieldsets, _currentFieldset); + + /* Current wizard step */ + if ($wizardSteps.length) { + Array.prototype.forEach.call($wizardSteps, function(el) { + el.setAttribute('data-active', 0); + }); + $wizardSteps[_currentFieldset].setAttribute('data-active', 1); + } + + /* Event */ + $form.dispatchEvent(new CustomEvent("wpubasetoolbox_form_set_fieldset", { + detail: { + id: _currentFieldset, + item: $fieldsets[_currentFieldset] + } + })); + } +} + +function wpubasetoolbox_fieldset_fieldset_has_invalid_fields($fieldset) { + 'use strict'; + var $invalidFields = $fieldset.querySelectorAll(':invalid'); + Array.prototype.forEach.call($invalidFields, function(el) { + el.dispatchEvent(new Event('change')); + }); + return $invalidFields.length > 0; +} + +function wpubasetoolbox_fieldset_display($fieldsets, _nb) { + 'use strict'; + Array.prototype.forEach.call($fieldsets, function(el) { + el.style.display = 'none'; + }); + $fieldsets[_nb].style.display = ''; +} + +/* ---------------------------------------------------------- + Box validation +---------------------------------------------------------- */ + +function wpubasetoolbox_box_validation($box) { + 'use strict'; + var _id = $box.getAttribute('data-box-name'), + $fields = $box.querySelectorAll('[name="' + _id + '"]'), + $message = $box.querySelector('.wpubasetoolbox-form-validation-message'), + _ischecking = false; + + if (!$fields.length || !$message) { + return; + } + + function check_field_error($tmp_field) { + if (_ischecking) { + return false; + } + _ischecking = true; + var _valid = $tmp_field.checkValidity(); + _ischecking = false; + if (_valid) { + $box.setAttribute('data-box-error', '0'); + $message.innerHTML = ''; + return; + } + setTimeout(function() { + window.scrollTo({ + top: $box.getBoundingClientRect().top + window.pageYOffset - 100, + behavior: 'smooth' + }); + }, 10); + + $box.setAttribute('data-box-error', '1'); + $message.innerHTML = $tmp_field.validationMessage; + } + + Array.prototype.forEach.call($fields, function($tmp_field) { + $tmp_field.addEventListener("invalid", function() { + check_field_error($tmp_field); + }); + $tmp_field.addEventListener("change", function() { + check_field_error($tmp_field); + }); + }); + +} diff --git a/inc/WPUBaseToolbox/assets/index.php b/inc/WPUBaseToolbox/assets/index.php new file mode 100644 index 0000000..194cdb1 --- /dev/null +++ b/inc/WPUBaseToolbox/assets/index.php @@ -0,0 +1 @@ +NULL,'plural-forms'=>NULL,'messages'=>['Enhance SEO : Clean title, Nice metas, GDPR friendly Analytics.'=>'Amélioration du référencement : Title propre, Belles métas, Analytics RGPD-friendly.','The plugin %s depends on the WPU Options plugin. Please install and activate it.'=>'Le plugin %s dépend du plugin WPU Options. Merci de installer et de l\'activer.','SEO Details'=>'Détails SEO','SEO Details - Twitter'=>'Détails SEO - Twitter','SEO Details - Facebook'=>'Détails SEO - Facebook','Page title'=>'Titre de la page','Page description'=>'Description de la page','Hide'=>'Masquer','Hide from search engines'=>'Masquer des moteurs de recherche','Image'=>'Image','Twitter:title'=>'Twitter:title','Twitter:description'=>'Twitter:description','Twitter:Image'=>'Twitter:Image','OG:Title'=>'OG:Title','OG:Description'=>'OG:Description','Og:Image'=>'Og:Image','Main'=>'Principal','Homepage'=>'Page d\'accueil','Title separator'=>'Séparateur de titre','Between site name and site description, or page name and site name'=>'Entre le nom du site et la description du site, ou le nom de la page et le nom du site','Site name before page title'=>'Nom du site avant le titre de la page','Meta keyword min length'=>'Longueur minimale d’un meta keyword','Default SEO Thumbnail'=>'Miniature SEO par défaut','If not filled, the current theme screenshot will be used'=>'S’il n’est pas rempli, la capture d’écran du thème en cours sera utilisée','Hide title prefix'=>'Masquer le préfixe du titre','Meta description'=>'Meta description','Meta keywords'=>'Meta keywords','Site verification ID'=>'ID de vérification de site','Use the content attribute of the validation meta tag'=>'Utilisez l’attribut contenu de la balise meta de validation','Custom JS Code'=>'Code JS personnalisé','Custom tracking code : Plugged to cookie notice if enabled. No HTML !'=>'Code de suivi personnalisé : branché au Cookie Notice s’il est activé. Pas de HTML !','%s content'=>'Contenu de %s','Content of the %s file'=>'Contenu du fichier %s','Google Analytics ID'=>'Google Analytics ID','Enable Analytics for logged-in users'=>'Activer Analytics pour les utilisateurs connectés','Enable anonymizeIp for Analytics'=>'Activer anonymizeIp pour Analytics','Cookie expiration for Analytics (in sec)'=>'Expiration des cookies pour Analytics (en sec)','If not filled, will use Google’s default value.'=>'S’il n’est pas rempli, la valeur par défaut de Google sera utilisée.','Enable Facebook metas'=>'Activer les metas Facebook','FB:Admins ID'=>'FB:Admins ID','FB:App ID'=>'FB:App ID','FB:Pixel ID'=>'FB:Pixel ID','Enable FB:Pixel for logged-in users'=>'Activer FB:Pixel pour les utilisateurs connectés','OG:Image'=>'OG:Image','OG:Title Home'=>'OG:Title de la page d’accueil','OG:Description Home'=>'OG:Description de la page d’accueil','Enable Twitter metas'=>'Activer les metas Twitter','Twitter site @username'=>'Twitter @username du site','Twitter ads ID'=>'Twitter ads ID','Twitter:Card format'=>'Twitter:Card format','Title Home'=>'Titre Accueil','Description Home'=>'Description de la page d’accueil','Enable Cookie Notice'=>'Activer le Cookie Notice','Track before cookie check'=>'Suivi avant la vérification des cookies','For test purposes only : do not use in production !'=>'Pour les tests seulement : ne pas utiliser en production !','Banner text'=>'Texte de la bannière','"Accept" button text'=>'Texte bouton « Accepter »','"Refuse" button text'=>'Texte bouton « Refuser »','Display "refuse" button'=>'Afficher le bouton « refuser »','Duration of choice (in days)'=>'Durée du choix (en jours)','Support DoNotTrack'=>'Support de DoNotTrack','Twitter'=>'Twitter','Facebook'=>'Facebook','404 Error'=>'Erreur 404','Search results for "%s"'=>'Résultats de recherche pour "%s"','Archive'=>'Archive','Tag:'=>'Tag :','Category:'=>'Catégorie :','Author:'=>'Auteur :','Year:'=>'Année :','Y'=>'Y','Month:'=>'Mois :','F Y'=>'F Y','Day:'=>'Jour :','F j, Y'=>'j F Y','a certified GDPR plugin'=>'un plugin RGPD certifié','This website uses cookies to ensure you get the best experience on our website.'=>'Ce site utilise des cookies pour vous garantir la meilleure expérience utilisateur.','Accept'=>'Accepter','Refuse'=>'Refuser','Title tag content'=>'Contenu de la balise title','Meta description content'=>'Contenu de la méta-description','Twitter Title'=>'Titre Twitter','Twitter Description'=>'Description Twitter','Twitter Image'=>'Image Twitter','Facebook og:title'=>'Facebook og:title','Facebook og:description'=>'Facebook og:description','Facebook og:image'=>'Facebook og:image','Preview'=>'Aperçu','Save post to display updated values'=>'Enregistrer la publication pour afficher les valeurs mises à jour','Edit in site options to display updated values'=>'Modifier dans les options du site pour afficher les valeurs mises à jour'],'language'=>'fr_FR','x-generator'=>'Poedit 3.3.2']; \ No newline at end of file +return ['domain'=>NULL,'plural-forms'=>NULL,'messages'=>['Submit'=>'Envoyer','Previous'=>'Précédent','Next'=>'Suivant','No'=>'Non','Yes'=>'Oui','The field “%s” is required'=>'Le champ « %s » est obligatoire','The field “%s” should be an email'=>'Le champ « %s » doit être un email','The plugin %s depends on the %s plugin. Please install and activate it.'=>'Le plugin %s dépend du plugin %s. Merci de l’installer et de l’activer.','Enhance SEO : Clean title, Nice metas, GDPR friendly Analytics.'=>'Amélioration du référencement : Title propre, Belles métas, Analytics RGPD-friendly.','SEO Details'=>'Détails SEO','SEO Details - Twitter'=>'Détails SEO - Twitter','SEO Details - Facebook'=>'Détails SEO - Facebook','Page title'=>'Titre de la page','Page description'=>'Description de la page','Hide'=>'Masquer','Hide from search engines'=>'Masquer des moteurs de recherche','Image'=>'Image','Twitter:title'=>'Twitter:title','Twitter:description'=>'Twitter:description','Twitter:Image'=>'Twitter:Image','OG:Title'=>'OG:Title','OG:Description'=>'OG:Description','Og:Image'=>'Og:Image','Main'=>'Principal','Homepage'=>'Page d\'accueil','Title separator'=>'Séparateur de titre','Between site name and site description, or page name and site name'=>'Entre le nom du site et la description du site, ou le nom de la page et le nom du site','Site name before page title'=>'Nom du site avant le titre de la page','Meta keyword min length'=>'Longueur minimale d’un meta keyword','Default SEO Thumbnail'=>'Miniature SEO par défaut','If not filled, the current theme screenshot will be used'=>'S’il n’est pas rempli, la capture d’écran du thème en cours sera utilisée','Hide title prefix'=>'Masquer le préfixe du titre','Meta description'=>'Meta description','Meta keywords'=>'Meta keywords','Site verification ID'=>'ID de vérification de site','Use the content attribute of the validation meta tag'=>'Utilisez l’attribut contenu de la balise meta de validation','Custom JS Code'=>'Code JS personnalisé','Custom tracking code : Plugged to cookie notice if enabled. No HTML !'=>'Code de suivi personnalisé : branché au Cookie Notice s’il est activé. Pas de HTML !','%s content'=>'Contenu de %s','Content of the %s file'=>'Contenu du fichier %s','Google Analytics ID'=>'Google Analytics ID','Enable Analytics for logged-in users'=>'Activer Analytics pour les utilisateurs connectés','Enable anonymizeIp for Analytics'=>'Activer anonymizeIp pour Analytics','Cookie expiration for Analytics (in sec)'=>'Expiration des cookies pour Analytics (en sec)','If not filled, will use Google’s default value.'=>'S’il n’est pas rempli, la valeur par défaut de Google sera utilisée.','Enable Facebook metas'=>'Activer les metas Facebook','FB:Admins ID'=>'FB:Admins ID','FB:App ID'=>'FB:App ID','FB:Pixel ID'=>'FB:Pixel ID','Enable FB:Pixel for logged-in users'=>'Activer FB:Pixel pour les utilisateurs connectés','OG:Image'=>'OG:Image','OG:Title Home'=>'OG:Title de la page d’accueil','OG:Description Home'=>'OG:Description de la page d’accueil','Enable Twitter metas'=>'Activer les metas Twitter','Twitter site @username'=>'Twitter @username du site','Twitter ads ID'=>'Twitter ads ID','Twitter:Card format'=>'Twitter:Card format','Title Home'=>'Titre Accueil','Description Home'=>'Description de la page d’accueil','Enable Cookie Notice'=>'Activer le Cookie Notice','Track before cookie check'=>'Suivi avant la vérification des cookies','For test purposes only : do not use in production !'=>'Pour les tests seulement : ne pas utiliser en production !','Banner text'=>'Texte de la bannière','"Accept" button text'=>'Texte bouton « Accepter »','"Refuse" button text'=>'Texte bouton « Refuser »','Display "refuse" button'=>'Afficher le bouton « refuser »','Duration of choice (in days)'=>'Durée du choix (en jours)','Support DoNotTrack'=>'Support de DoNotTrack','Twitter'=>'Twitter','Facebook'=>'Facebook','404 Error'=>'Erreur 404','Search results for "%s"'=>'Résultats de recherche pour "%s"','Archive'=>'Archive','Tag:'=>'Tag :','Category:'=>'Catégorie :','Author:'=>'Auteur :','Year:'=>'Année :','Y'=>'Y','Month:'=>'Mois :','F Y'=>'F Y','Day:'=>'Jour :','F j, Y'=>'j F Y','a certified GDPR plugin'=>'un plugin RGPD certifié','This website uses cookies to ensure you get the best experience on our website.'=>'Ce site utilise des cookies pour vous garantir la meilleure expérience utilisateur.','Accept'=>'Accepter','Refuse'=>'Refuser','Title tag content'=>'Contenu de la balise title','Meta description content'=>'Contenu de la méta-description','Twitter Title'=>'Titre Twitter','Twitter Description'=>'Description Twitter','Twitter Image'=>'Image Twitter','Facebook og:title'=>'Facebook og:title','Facebook og:description'=>'Facebook og:description','Facebook og:image'=>'Facebook og:image','Preview'=>'Aperçu','Save post to display updated values'=>'Enregistrer la publication pour afficher les valeurs mises à jour','Edit in site options to display updated values'=>'Modifier dans les options du site pour afficher les valeurs mises à jour'],'language'=>'fr_FR','x-generator'=>'Poedit 3.4.4']; \ No newline at end of file diff --git a/lang/wpuseo-fr_FR.mo b/lang/wpuseo-fr_FR.mo index 77c2ad4941051e87ade64458c1a2b021b58599d7..c5f439d48099f2487f3510ad16232f40df345465 100644 GIT binary patch delta 2475 zcmZwIe@vBC9LMp4plHaCFp%&Ek0yi|5P4NZLL?9@<%fVjNxi@W+`Mw}{-CVvGF?sE zve~V*$|jY$jB;$Zt+|#e9!kh z=klfJ=(6ZnnMuzXj!t4WaYv#t`>}Eg9~=!+jkyKaShwL#v_m)zA47FLfXVo@^?6L8 zeH3eO1l9ivX5$}NXiU_kb2W_%a8g#}d4P3vdouDbX6d z4L73hf5cutj1KMNxDwA}BIBE6($ox6a5`op&op_+pIOKU$(kjo1gh|6++gj)#k3#B z8F&&kficX%^Qivcpq}#!mg6-nV|?Rb)XCU`y3voC@ov-u_MrxT2~#nSO85+_|A#mU zKS5RUGgKm9qXzud`X}oC$$aSg42)`^*_==fQ;b@}a@(OAHP9L)S<{SKyAD)oL#R?8 zL?!q(&cbu3rMQH;|0-tUbyUI`WH}eJ(x`tvCmt@e;}&efQB*=Eef-a)ph`FkZ^dF% zqV=emHX+Y8UDn;mBTN*P@F7&c*X{SGZ2NpV_1BFTxZuGbFahUM7A=W`YzR|;nqd)c zr$Y_Sq5UdZ>1F%?^_+{S#D7GU_$n&Vzim62GN^JHxB&~IoUklrul?dlETKJY+n?fQ z+TWr|xsqw90;_R8?y&C1T-wKR4W7ZfFoku{J5+^bxDnOwAnG~MW1Q$gr*RWrLe02> zG*y8rRD!jrUD1Mi7q+5i*o&&n05VB)!1^Lq(0&Wa#e9#d#5Hs!=5&QAf=@8`YkVs!S2m#VkYJ*M$1T>%n<=0yXeQsNL~1>i$&f zpT+nlixbUs5o$Y?;qBOtTW~M7;TNcx7PEk?l39WLnPxr;aVP4*&!S3x1l51kdKy)U zkC8{23m8?$-))C!q^I^w)QyYqZd{Jq6%V3Hw+B_)eaK|Y6ZU)Evx>Nns3nSsMnaQX zNVF3Z2OCY3(ER^Bwt#*d^k5zL5Ow2c{8K_DQfb>utinsE{HqBix0TSbjwmNQYS?21 z789Mey+GrywGFLh3BhE{GD0tt-V2phTS?nz60w2M7TZWv5&9)l*;QH{+lU>+orIQ6 zzXvL}cA1v>enM5QCKgT1eD7sADNnK`bZc5gmkfhkgaw(&GoO(fAH9@pH-h zlad?Vhr*^Y5IdZm7weh6erj{j9rOhvq1e0AN4=f9d|}fX85jrz!%l6WF%WJGdb@U- zHg9i*Y3p;H9-r&)b}kPc$q!u~dfD-XoS?fq;tRUn|MzvMFA$-7r|Wq89e0=4=Z`&_ zT9}X@Kbd+gA#t-CinpXsO-S^Vc;X!yOQ)o?Mtpey^l72hX19I(wqq?GMMw zX8x31*FPB8;|621bDV~*KJTspXKZ9_I6pKtJocXBhQdyu)9>r`h65yI*1FDr`g8|; zVdw0d;h^h8CNe6|DO#8xsx0lSDsk4i!7iWE?K=L;LofLHLt(Gq?*<(=JaH|4C?}qf M*c9=_s&jMy0smATMF0Q* delta 2160 zcmYk-TTE0(9LMolK*7th0s^ig9Hj*cxG1~IrB;iIs}=>Ziqv>_F{_)Ez}nClvW-62 zga;CijmE?n6MZl|cv(%f51QBqX*I1)8k=6?Lz5cY`qJ2>)+TMgzhzJ-`#+zV!`U2p*fCERrmhEOH% zz#m?~bRTt}$G8=zurHao2etAZRDvwLU;@V7|BGzmbp0U=^Cck4m)KT92wgGx9NE4n=zZchb=>)Q30^ zZ=w?V5%rXNs5^@=b5Sb^;&yDp_wghu@ux_U%nQ`k_}G^!tVSiW301*usOt|&<~M_M zw9+BuV@`9>h1XCQj@j`;JN^yd;rw&d)4hb*RGCI(ZqtJ4^Yph6`gPQ6skV`Ln^0n^ zhUQOC)}anfnb#27)1`!-h0TPT{zo(u6ee8>FbfH71J9{hKuokYI$BhvJ+TV4|4KZA za0pt`EaRvLWuj^C)L2}48?>h(qMIls)bxC8AOb`qG10UgYITI(o>oF{!COQZ@gAY3 zZLJ{6wf>;a&{XR6>E8HZB~%mIJMI4(;`O$gfnFgsy`t^JVnV+g9}sGKuGAXFd3n?u zqBc_*>jy~hZY`nqZu&U>o~yfw;0MdJ5L*egFrhuye$OMCh>5m5)tYlG%Y87t*Inzq z\n" "Language-Team: \n" @@ -9,336 +9,366 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.4.4\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-Basepath: .\n" "X-Poedit-KeywordsList: __;_e\n" "X-Poedit-SearchPath-0: ../.\n" -#: .././wpuseo.php:207 -msgid "Enhance SEO : Clean title, Nice metas, GDPR friendly Analytics." -msgstr "" -"Amélioration du référencement : Title propre, Belles métas, Analytics RGPD-" -"friendly." +#: .././inc/WPUBaseToolbox/WPUBaseToolbox.php:169 +msgid "Submit" +msgstr "Envoyer" + +#: .././inc/WPUBaseToolbox/WPUBaseToolbox.php:195 +msgid "Previous" +msgstr "Précédent" + +#: .././inc/WPUBaseToolbox/WPUBaseToolbox.php:196 +msgid "Next" +msgstr "Suivant" + +#: .././inc/WPUBaseToolbox/WPUBaseToolbox.php:244 +msgid "No" +msgstr "Non" -#: .././wpuseo.php:230 +#: .././inc/WPUBaseToolbox/WPUBaseToolbox.php:245 +msgid "Yes" +msgstr "Oui" + +#: .././inc/WPUBaseToolbox/WPUBaseToolbox.php:388 +#, php-format +msgid "The field “%s” is required" +msgstr "Le champ « %s » est obligatoire" + +#: .././inc/WPUBaseToolbox/WPUBaseToolbox.php:393 +#, php-format +msgid "The field “%s” should be an email" +msgstr "Le champ « %s » doit être un email" + +#: .././inc/WPUBaseToolbox/WPUBaseToolbox.php:620 #, php-format msgid "" -"The plugin %s depends on the WPU Options plugin. Please " -"install and activate it." +"The plugin %s depends on the %s plugin. Please install and " +"activate it." msgstr "" -"Le plugin %s dépend du plugin WPU Options. Merci de installer " -"et de l'activer." +"Le plugin %s dépend du plugin %s. Merci de l’installer et de " +"l’activer." -#: .././wpuseo.php:250 .././wpuseo.php:353 +#: .././wpuseo.php:222 +msgid "Enhance SEO : Clean title, Nice metas, GDPR friendly Analytics." +msgstr "" +"Amélioration du référencement : Title propre, Belles métas, Analytics RGPD-" +"friendly." + +#: .././wpuseo.php:242 .././wpuseo.php:345 msgid "SEO Details" msgstr "Détails SEO" -#: .././wpuseo.php:255 .././wpuseo.php:376 +#: .././wpuseo.php:247 .././wpuseo.php:368 msgid "SEO Details - Twitter" msgstr "Détails SEO - Twitter" -#: .././wpuseo.php:261 .././wpuseo.php:400 +#: .././wpuseo.php:253 .././wpuseo.php:392 msgid "SEO Details - Facebook" msgstr "Détails SEO - Facebook" -#: .././wpuseo.php:275 .././wpuseo.php:302 .././wpuseo.php:320 -#: .././wpuseo.php:358 .././wpuseo.php:529 .././wpuseo.php:739 -#: .././wpuseo.php:768 .././wpuseo.php:793 +#: .././wpuseo.php:267 .././wpuseo.php:294 .././wpuseo.php:312 +#: .././wpuseo.php:350 .././wpuseo.php:521 .././wpuseo.php:731 +#: .././wpuseo.php:760 .././wpuseo.php:785 msgid "Page title" msgstr "Titre de la page" -#: .././wpuseo.php:282 .././wpuseo.php:307 .././wpuseo.php:325 -#: .././wpuseo.php:363 .././wpuseo.php:773 .././wpuseo.php:798 +#: .././wpuseo.php:274 .././wpuseo.php:299 .././wpuseo.php:317 +#: .././wpuseo.php:355 .././wpuseo.php:765 .././wpuseo.php:790 msgid "Page description" msgstr "Description de la page" -#: .././wpuseo.php:288 .././wpuseo.php:370 +#: .././wpuseo.php:280 .././wpuseo.php:362 msgid "Hide" msgstr "Masquer" -#: .././wpuseo.php:289 .././wpuseo.php:371 +#: .././wpuseo.php:281 .././wpuseo.php:363 msgid "Hide from search engines" msgstr "Masquer des moteurs de recherche" -#: .././wpuseo.php:296 .././wpuseo.php:314 .././wpuseo.php:762 -#: .././wpuseo.php:787 +#: .././wpuseo.php:288 .././wpuseo.php:306 .././wpuseo.php:754 +#: .././wpuseo.php:779 msgid "Image" msgstr "Image" -#: .././wpuseo.php:381 +#: .././wpuseo.php:373 msgid "Twitter:title" msgstr "Twitter:title" -#: .././wpuseo.php:386 +#: .././wpuseo.php:378 msgid "Twitter:description" msgstr "Twitter:description" -#: .././wpuseo.php:392 .././wpuseo.php:672 +#: .././wpuseo.php:384 .././wpuseo.php:664 msgid "Twitter:Image" msgstr "Twitter:Image" -#: .././wpuseo.php:405 +#: .././wpuseo.php:397 msgid "OG:Title" msgstr "OG:Title" -#: .././wpuseo.php:410 +#: .././wpuseo.php:402 msgid "OG:Description" msgstr "OG:Description" -#: .././wpuseo.php:416 +#: .././wpuseo.php:408 msgid "Og:Image" msgstr "Og:Image" -#: .././wpuseo.php:437 +#: .././wpuseo.php:429 msgid "Main" msgstr "Principal" -#: .././wpuseo.php:441 +#: .././wpuseo.php:433 msgid "Homepage" msgstr "Page d'accueil" -#: .././wpuseo.php:497 +#: .././wpuseo.php:489 msgid "Title separator" msgstr "Séparateur de titre" -#: .././wpuseo.php:499 +#: .././wpuseo.php:491 msgid "Between site name and site description, or page name and site name" msgstr "" "Entre le nom du site et la description du site, ou le nom de la page et le " "nom du site" -#: .././wpuseo.php:502 +#: .././wpuseo.php:494 msgid "Site name before page title" msgstr "Nom du site avant le titre de la page" -#: .././wpuseo.php:509 +#: .././wpuseo.php:501 msgid "Meta keyword min length" msgstr "Longueur minimale d’un meta keyword" -#: .././wpuseo.php:515 +#: .././wpuseo.php:507 msgid "Default SEO Thumbnail" msgstr "Miniature SEO par défaut" -#: .././wpuseo.php:518 +#: .././wpuseo.php:510 msgid "If not filled, the current theme screenshot will be used" msgstr "" "S’il n’est pas rempli, la capture d’écran du thème en cours sera utilisée" -#: .././wpuseo.php:524 +#: .././wpuseo.php:516 msgid "Hide title prefix" msgstr "Masquer le préfixe du titre" -#: .././wpuseo.php:535 .././wpuseo.php:747 +#: .././wpuseo.php:527 .././wpuseo.php:739 msgid "Meta description" msgstr "Meta description" -#: .././wpuseo.php:540 +#: .././wpuseo.php:532 msgid "Meta keywords" msgstr "Meta keywords" -#: .././wpuseo.php:549 .././wpuseo.php:578 .././wpuseo.php:613 +#: .././wpuseo.php:541 .././wpuseo.php:570 .././wpuseo.php:605 msgid "Site verification ID" msgstr "ID de vérification de site" -#: .././wpuseo.php:551 .././wpuseo.php:580 .././wpuseo.php:615 +#: .././wpuseo.php:543 .././wpuseo.php:572 .././wpuseo.php:607 msgid "Use the content attribute of the validation meta tag" msgstr "Utilisez l’attribut contenu de la balise meta de validation" -#: .././wpuseo.php:558 +#: .././wpuseo.php:550 msgid "Custom JS Code" msgstr "Code JS personnalisé" -#: .././wpuseo.php:561 +#: .././wpuseo.php:553 msgid "Custom tracking code : Plugged to cookie notice if enabled. No HTML !" msgstr "" "Code de suivi personnalisé : branché au Cookie Notice s’il est activé. Pas " "de HTML !" -#: .././wpuseo.php:568 +#: .././wpuseo.php:560 #, php-format msgid "%s content" msgstr "Contenu de %s" -#: .././wpuseo.php:572 +#: .././wpuseo.php:564 #, php-format msgid "Content of the %s file" msgstr "Contenu du fichier %s" -#: .././wpuseo.php:585 +#: .././wpuseo.php:577 msgid "Google Analytics ID" msgstr "Google Analytics ID" -#: .././wpuseo.php:589 +#: .././wpuseo.php:581 msgid "Enable Analytics for logged-in users" msgstr "Activer Analytics pour les utilisateurs connectés" -#: .././wpuseo.php:594 +#: .././wpuseo.php:586 msgid "Enable anonymizeIp for Analytics" msgstr "Activer anonymizeIp pour Analytics" -#: .././wpuseo.php:599 +#: .././wpuseo.php:591 msgid "Cookie expiration for Analytics (in sec)" msgstr "Expiration des cookies pour Analytics (en sec)" -#: .././wpuseo.php:602 +#: .././wpuseo.php:594 msgid "If not filled, will use Google’s default value." msgstr "S’il n’est pas rempli, la valeur par défaut de Google sera utilisée." -#: .././wpuseo.php:608 +#: .././wpuseo.php:600 msgid "Enable Facebook metas" msgstr "Activer les metas Facebook" -#: .././wpuseo.php:618 +#: .././wpuseo.php:610 msgid "FB:Admins ID" msgstr "FB:Admins ID" -#: .././wpuseo.php:622 +#: .././wpuseo.php:614 msgid "FB:App ID" msgstr "FB:App ID" -#: .././wpuseo.php:627 +#: .././wpuseo.php:619 msgid "FB:Pixel ID" msgstr "FB:Pixel ID" -#: .././wpuseo.php:631 +#: .././wpuseo.php:623 msgid "Enable FB:Pixel for logged-in users" msgstr "Activer FB:Pixel pour les utilisateurs connectés" -#: .././wpuseo.php:637 +#: .././wpuseo.php:629 msgid "OG:Image" msgstr "OG:Image" -#: .././wpuseo.php:642 +#: .././wpuseo.php:634 msgid "OG:Title Home" msgstr "OG:Title de la page d’accueil" -#: .././wpuseo.php:646 +#: .././wpuseo.php:638 msgid "OG:Description Home" msgstr "OG:Description de la page d’accueil" -#: .././wpuseo.php:653 +#: .././wpuseo.php:645 msgid "Enable Twitter metas" msgstr "Activer les metas Twitter" -#: .././wpuseo.php:658 +#: .././wpuseo.php:650 msgid "Twitter site @username" msgstr "Twitter @username du site" -#: .././wpuseo.php:662 +#: .././wpuseo.php:654 msgid "Twitter ads ID" msgstr "Twitter ads ID" -#: .././wpuseo.php:666 +#: .././wpuseo.php:658 msgid "Twitter:Card format" msgstr "Twitter:Card format" -#: .././wpuseo.php:677 +#: .././wpuseo.php:669 msgid "Title Home" msgstr "Titre Accueil" -#: .././wpuseo.php:681 +#: .././wpuseo.php:673 msgid "Description Home" msgstr "Description de la page d’accueil" -#: .././wpuseo.php:689 +#: .././wpuseo.php:681 msgid "Enable Cookie Notice" msgstr "Activer le Cookie Notice" -#: .././wpuseo.php:694 +#: .././wpuseo.php:686 msgid "Track before cookie check" msgstr "Suivi avant la vérification des cookies" -#: .././wpuseo.php:697 +#: .././wpuseo.php:689 msgid "For test purposes only : do not use in production !" msgstr "Pour les tests seulement : ne pas utiliser en production !" -#: .././wpuseo.php:700 +#: .././wpuseo.php:692 msgid "Banner text" msgstr "Texte de la bannière" -#: .././wpuseo.php:706 +#: .././wpuseo.php:698 msgid "\"Accept\" button text" msgstr "Texte bouton « Accepter »" -#: .././wpuseo.php:712 +#: .././wpuseo.php:704 msgid "\"Refuse\" button text" msgstr "Texte bouton « Refuser »" -#: .././wpuseo.php:718 +#: .././wpuseo.php:710 msgid "Display \"refuse\" button" msgstr "Afficher le bouton « refuser »" -#: .././wpuseo.php:723 +#: .././wpuseo.php:715 msgid "Duration of choice (in days)" msgstr "Durée du choix (en jours)" -#: .././wpuseo.php:729 +#: .././wpuseo.php:721 msgid "Support DoNotTrack" msgstr "Support de DoNotTrack" -#: .././wpuseo.php:757 +#: .././wpuseo.php:749 msgid "Twitter" msgstr "Twitter" -#: .././wpuseo.php:782 +#: .././wpuseo.php:774 msgid "Facebook" msgstr "Facebook" -#: .././wpuseo.php:1010 .././wpuseo.php:1056 +#: .././wpuseo.php:1005 .././wpuseo.php:1051 msgid "404 Error" msgstr "Erreur 404" -#: .././wpuseo.php:1013 +#: .././wpuseo.php:1008 #, php-format msgid "Search results for \"%s\"" msgstr "Résultats de recherche pour \"%s\"" -#: .././wpuseo.php:1016 +#: .././wpuseo.php:1011 msgid "Archive" msgstr "Archive" -#: .././wpuseo.php:1022 +#: .././wpuseo.php:1017 msgid "Tag:" msgstr "Tag :" -#: .././wpuseo.php:1025 +#: .././wpuseo.php:1020 msgid "Category:" msgstr "Catégorie :" -#: .././wpuseo.php:1034 +#: .././wpuseo.php:1029 msgid "Author:" msgstr "Auteur :" -#: .././wpuseo.php:1037 +#: .././wpuseo.php:1032 msgid "Year:" msgstr "Année :" -#: .././wpuseo.php:1037 +#: .././wpuseo.php:1032 msgid "Y" msgstr "Y" -#: .././wpuseo.php:1040 +#: .././wpuseo.php:1035 msgid "Month:" msgstr "Mois :" -#: .././wpuseo.php:1040 +#: .././wpuseo.php:1035 msgid "F Y" msgstr "F Y" -#: .././wpuseo.php:1043 +#: .././wpuseo.php:1038 msgid "Day:" msgstr "Jour :" -#: .././wpuseo.php:1043 +#: .././wpuseo.php:1038 msgid "F j, Y" msgstr "j F Y" -#: .././wpuseo.php:1805 +#: .././wpuseo.php:1803 msgid "a certified GDPR plugin" msgstr "un plugin RGPD certifié" -#: .././wpuseo.php:1878 +#: .././wpuseo.php:1895 msgid "" "This website uses cookies to ensure you get the best experience on our " "website." @@ -346,55 +376,55 @@ msgstr "" "Ce site utilise des cookies pour vous garantir la meilleure expérience " "utilisateur." -#: .././wpuseo.php:1884 +#: .././wpuseo.php:1901 msgid "Accept" msgstr "Accepter" -#: .././wpuseo.php:1890 +#: .././wpuseo.php:1907 msgid "Refuse" msgstr "Refuser" -#: .././wpuseo.php:2265 +#: .././wpuseo.php:2282 msgid "Title tag content" msgstr "Contenu de la balise title" -#: .././wpuseo.php:2271 +#: .././wpuseo.php:2288 msgid "Meta description content" msgstr "Contenu de la méta-description" -#: .././wpuseo.php:2279 +#: .././wpuseo.php:2296 msgid "Twitter Title" msgstr "Titre Twitter" -#: .././wpuseo.php:2285 +#: .././wpuseo.php:2302 msgid "Twitter Description" msgstr "Description Twitter" -#: .././wpuseo.php:2291 +#: .././wpuseo.php:2308 msgid "Twitter Image" msgstr "Image Twitter" -#: .././wpuseo.php:2299 +#: .././wpuseo.php:2316 msgid "Facebook og:title" msgstr "Facebook og:title" -#: .././wpuseo.php:2305 +#: .././wpuseo.php:2322 msgid "Facebook og:description" msgstr "Facebook og:description" -#: .././wpuseo.php:2311 +#: .././wpuseo.php:2328 msgid "Facebook og:image" msgstr "Facebook og:image" -#: .././wpuseo.php:2318 +#: .././wpuseo.php:2335 msgid "Preview" msgstr "Aperçu" -#: .././wpuseo.php:2324 +#: .././wpuseo.php:2341 msgid "Save post to display updated values" msgstr "Enregistrer la publication pour afficher les valeurs mises à jour" -#: .././wpuseo.php:2325 +#: .././wpuseo.php:2342 msgid "Edit in site options to display updated values" msgstr "" "Modifier dans les options du site pour afficher les valeurs mises à jour" diff --git a/lang/wpuseo-it_IT.l10n.php b/lang/wpuseo-it_IT.l10n.php index 3ec149c..f6e25c6 100644 --- a/lang/wpuseo-it_IT.l10n.php +++ b/lang/wpuseo-it_IT.l10n.php @@ -1,2 +1,2 @@ NULL,'plural-forms'=>NULL,'messages'=>['Enhance SEO : Clean title, Nice metas, GDPR friendly Analytics.'=>'Migliora SEO: titolo pulito, metas di Nizza, analisi GDPR friendly.','The plugin %s depends on the WPU Options plugin. Please install and activate it.'=>'Il plugin %s dipende il plugin WPU Options . Si prega di installare e attivarlo.','SEO Details'=>'Dettagli SEO','SEO Details - Twitter'=>'Dettagli SEO - Twitter','SEO Details - Facebook'=>'Dettagli SEO - Facebook','Page title'=>'Titolo della pagina','Page description'=>'Descrizione della pagina','Hide'=>'Nascondi','Hide from search engines'=>'Nascondi dai motori di ricerca','Image'=>'Immagine','Twitter:title'=>'Twitter:title','Twitter:description'=>'Twitter:description','Twitter:Image'=>'Twitter:Image','OG:Title'=>'OG:Title','OG:Description'=>'OG:Description','Og:Image'=>'Og:Image','Main'=>'Principale','Homepage'=>'Homepage','Title separator'=>'Separatore del titolo','Between site name and site description, or page name and site name'=>'Tra nome del sito e descrizione del sito o nome della pagina e nome del sito','Site name before page title'=>'Nome del sito prima del titolo della pagina','Meta keyword min length'=>'Lunghezza min del meta keyword','Default SEO Thumbnail'=>'Miniatura SEO predefinita','If not filled, the current theme screenshot will be used'=>'Se non è pieno, verrà utilizzata la schermata del tema corrente','Hide title prefix'=>'Nascondere il prefisso del titolo','Meta description'=>'Meta description','Meta keywords'=>'Principali meta keywords','Site verification ID'=>'Sito verification ID','Use the content attribute of the validation meta tag'=>'Utilizzare l\'attributo content del tag meta convalida','Custom JS Code'=>'Codice JS personalizzato','Custom tracking code : Plugged to cookie notice if enabled. No HTML !'=>'Codice di tracciamento personalizzato. Collegato all\'avviso cookie, se abilitato. Nessun html !','%s content'=>'%s contenuto','Content of the %s file'=>'Contenuto del file %s','Google Analytics ID'=>'Google Analytics ID','Enable Analytics for logged-in users'=>'Abilitare Analytics per gli utenti registrati','Enable anonymizeIp for Analytics'=>'Abilitare anonymizeIp for Analytics','Cookie expiration for Analytics (in sec)'=>'Scadenza dei cookie per Analytics (in sec)','If not filled, will use Google’s default value.'=>'Se non è pieno, verrà utilizzata la valore predefinito di Google.','Enable Facebook metas'=>'Abilitare Facebook metas','FB:Admins ID'=>'FB:Admins ID','FB:App ID'=>'FB:App ID','FB:Pixel ID'=>'FB:Pixel ID','Enable FB:Pixel for logged-in users'=>'Attivare FB:Pixel per gli utenti registrati','OG:Image'=>'OG: Image','OG:Title Home'=>'OG:Title Home','OG:Description Home'=>'OG:Description Home','Enable Twitter metas'=>'Abilitare Twitter metas','Twitter site @username'=>'Twitter site @username','Twitter ads ID'=>'Twitter ads ID','Twitter:Card format'=>'Twitter:Card format','Title Home'=>'Titolo Home','Description Home'=>'Descrizione Home','Enable Cookie Notice'=>'Attiva notifica cookie','Track before cookie check'=>'Traccia prima del controllo dei cookie','For test purposes only : do not use in production !'=>'Solo a scopo di prova : non utilizzare in produzione !','Banner text'=>'Testo banner','"Accept" button text'=>'Testo del pulsante "Accetta"','"Refuse" button text'=>'Testo del pulsante "Rifiuta"','Display "refuse" button'=>'Visualizzare il pulsante "rifiuta"','Duration of choice (in days)'=>'Durata della scelta (in giorni)','Support DoNotTrack'=>'Supporto DoNotTrack','Twitter'=>'Twitter','Facebook'=>'Facebook','404 Error'=>'Errore 404','Search results for "%s"'=>'Risultati della ricerca per "%s"','Archive'=>'Archivio','Tag:'=>'Tag:','Category:'=>'Categoria :','Author:'=>'Autore:','Year:'=>'Anno:','Y'=>'Y','Month:'=>'Mese:','F Y'=>'F Y','Day:'=>'Giorno:','F j, Y'=>'j F Y','a certified GDPR plugin'=>'un plugin certificato GDPR','This website uses cookies to ensure you get the best experience on our website.'=>'Questo sito Web utilizza i cookie per assicurarti di ottenere la migliore esperienza sul nostro sito Web.','Accept'=>'Accetta','Refuse'=>'Rifiutato','Title tag content'=>'Contenuto del tag del titolo','Meta description content'=>'Contenuto della meta descrizione','Twitter Title'=>'Titolo di Twitter','Twitter Description'=>'Descrizione Twitter','Twitter Image'=>'Immagine Twitter','Facebook og:title'=>'Facebook og:title','Facebook og:description'=>'Facebook og:description','Facebook og:image'=>'Facebook og:image','Preview'=>'Anteprima','Save post to display updated values'=>'Salva post per visualizzare i valori aggiornati','Edit in site options to display updated values'=>'Modificare le opzioni del sito per visualizzare i valori aggiornati'],'language'=>'it_IT','x-generator'=>'Poedit 3.3.2']; \ No newline at end of file +return ['domain'=>NULL,'plural-forms'=>NULL,'messages'=>['Submit'=>'Invia','Previous'=>'Precedente','Next'=>'Avanti','No'=>'No','Yes'=>'Si','The field “%s” is required'=>'Il campo "%s" è obbligatorio','The field “%s” should be an email'=>'Il campo "%s" dovrebbe essere un\'e-mail','The plugin %s depends on the %s plugin. Please install and activate it.'=>'Il plugin %s dipende il plugin %s. Si prega di installare e attivarlo.','Enhance SEO : Clean title, Nice metas, GDPR friendly Analytics.'=>'Migliora SEO: titolo pulito, metas di Nizza, analisi GDPR friendly.','SEO Details'=>'Dettagli SEO','SEO Details - Twitter'=>'Dettagli SEO - Twitter','SEO Details - Facebook'=>'Dettagli SEO - Facebook','Page title'=>'Titolo della pagina','Page description'=>'Descrizione della pagina','Hide'=>'Nascondi','Hide from search engines'=>'Nascondi dai motori di ricerca','Image'=>'Immagine','Twitter:title'=>'Twitter:title','Twitter:description'=>'Twitter:description','Twitter:Image'=>'Twitter:Image','OG:Title'=>'OG:Title','OG:Description'=>'OG:Description','Og:Image'=>'Og:Image','Main'=>'Principale','Homepage'=>'Homepage','Title separator'=>'Separatore del titolo','Between site name and site description, or page name and site name'=>'Tra nome del sito e descrizione del sito o nome della pagina e nome del sito','Site name before page title'=>'Nome del sito prima del titolo della pagina','Meta keyword min length'=>'Lunghezza min del meta keyword','Default SEO Thumbnail'=>'Miniatura SEO predefinita','If not filled, the current theme screenshot will be used'=>'Se non è pieno, verrà utilizzata la schermata del tema corrente','Hide title prefix'=>'Nascondere il prefisso del titolo','Meta description'=>'Meta description','Meta keywords'=>'Principali meta keywords','Site verification ID'=>'Sito verification ID','Use the content attribute of the validation meta tag'=>'Utilizzare l\'attributo content del tag meta convalida','Custom JS Code'=>'Codice JS personalizzato','Custom tracking code : Plugged to cookie notice if enabled. No HTML !'=>'Codice di tracciamento personalizzato. Collegato all\'avviso cookie, se abilitato. Nessun html !','%s content'=>'%s contenuto','Content of the %s file'=>'Contenuto del file %s','Google Analytics ID'=>'Google Analytics ID','Enable Analytics for logged-in users'=>'Abilitare Analytics per gli utenti registrati','Enable anonymizeIp for Analytics'=>'Abilitare anonymizeIp for Analytics','Cookie expiration for Analytics (in sec)'=>'Scadenza dei cookie per Analytics (in sec)','If not filled, will use Google’s default value.'=>'Se non è pieno, verrà utilizzata la valore predefinito di Google.','Enable Facebook metas'=>'Abilitare Facebook metas','FB:Admins ID'=>'FB:Admins ID','FB:App ID'=>'FB:App ID','FB:Pixel ID'=>'FB:Pixel ID','Enable FB:Pixel for logged-in users'=>'Attivare FB:Pixel per gli utenti registrati','OG:Image'=>'OG: Image','OG:Title Home'=>'OG:Title Home','OG:Description Home'=>'OG:Description Home','Enable Twitter metas'=>'Abilitare Twitter metas','Twitter site @username'=>'Twitter site @username','Twitter ads ID'=>'Twitter ads ID','Twitter:Card format'=>'Twitter:Card format','Title Home'=>'Titolo Home','Description Home'=>'Descrizione Home','Enable Cookie Notice'=>'Attiva notifica cookie','Track before cookie check'=>'Traccia prima del controllo dei cookie','For test purposes only : do not use in production !'=>'Solo a scopo di prova : non utilizzare in produzione !','Banner text'=>'Testo banner','"Accept" button text'=>'Testo del pulsante "Accetta"','"Refuse" button text'=>'Testo del pulsante "Rifiuta"','Display "refuse" button'=>'Visualizzare il pulsante "rifiuta"','Duration of choice (in days)'=>'Durata della scelta (in giorni)','Support DoNotTrack'=>'Supporto DoNotTrack','Twitter'=>'Twitter','Facebook'=>'Facebook','404 Error'=>'Errore 404','Search results for "%s"'=>'Risultati della ricerca per "%s"','Archive'=>'Archivio','Tag:'=>'Tag:','Category:'=>'Categoria :','Author:'=>'Autore:','Year:'=>'Anno:','Y'=>'Y','Month:'=>'Mese:','F Y'=>'F Y','Day:'=>'Giorno:','F j, Y'=>'j F Y','a certified GDPR plugin'=>'un plugin certificato GDPR','This website uses cookies to ensure you get the best experience on our website.'=>'Questo sito Web utilizza i cookie per assicurarti di ottenere la migliore esperienza sul nostro sito Web.','Accept'=>'Accetta','Refuse'=>'Rifiutato','Title tag content'=>'Contenuto del tag del titolo','Meta description content'=>'Contenuto della meta descrizione','Twitter Title'=>'Titolo di Twitter','Twitter Description'=>'Descrizione Twitter','Twitter Image'=>'Immagine Twitter','Facebook og:title'=>'Facebook og:title','Facebook og:description'=>'Facebook og:description','Facebook og:image'=>'Facebook og:image','Preview'=>'Anteprima','Save post to display updated values'=>'Salva post per visualizzare i valori aggiornati','Edit in site options to display updated values'=>'Modificare le opzioni del sito per visualizzare i valori aggiornati'],'language'=>'it_IT','x-generator'=>'Poedit 3.4.4']; \ No newline at end of file diff --git a/lang/wpuseo-it_IT.mo b/lang/wpuseo-it_IT.mo index cf4c573b654ba534daa934fda29342fa1a8a7bb3..dbb81cd5c1798c945075c9fda88c1570e108a4dd 100644 GIT binary patch delta 2428 zcmZwHdrXye9LMqBk*fki5Ri)SNFG5H%(z5KAV&$w;u3g`z;oac&jb#fb6_o9$H^b% znp&MzD{9@W+){F*O7;2zYC{iqQSqaJVw_2O|%!%0-aAEU1S6zAc2 zR3$${C2|4v!ap6aqwY^&qvKf^(Tnofp&F(XHHX#C1shN=YC@7Vt*E){M3pv#D)nJh zf~Rl^oHN;rco^D%oN^>?#V!GW!~3tR9sDj|~|`S zh#F}N@@&)NIE*~PL{JGIMP2u%bAHO{Pp4CV-S{mBD)2J8FrTt$N-X4qFe^|aEWvIr z@Sqmq>trQALaJ-NLnVG0mEd2fQeSua36w$CrQ!X!IKqxf+lR4|VhR1jsJVX+yYW2g zfu#&X6{tjVFfCY!yRiVra3j8frFaQdfo$eu6|P1-cL!=fkzsaXbBMa}6l%o3qbl$> zD&uRYuOgW&m2f6%WcjEE6(NH(b&hRVMZX8h!MupNegZZ3XKs1c8&g(p!DI*%IBFQ|kQ$R_qVqrQqv)LO_!C9)hfkZMfU_wQjxYhX+4 zfH6B!5A>mK*pIs57%Gt$oc?iCWhRiH`G5^Mm@jY*{)`qb=3y%RdZdV^50&Tv%;Np# z5Ig!Tp2MX$jzu_y9e5G_SjEJv^sgetGAB`s?<}ss3#c`cxOg`4g{X=ZqNb)CRfz^v zq8%8~2=}q03Pe!-BToM{tfc=gy6`7d=9f^V{T2C{-`ME9o>5P1AvO_O$jyY-*Ggh5 zG1vIeR1J-Pw(SB{L5ojKYoH;v$EwA9h#IG_q~@BJ9hLuHLhI!rLhS*fny666Y3s3+ z@HzeEdcVFyHO*xip?|Qu2rZ%lqL{doSW9Ts+lVG&J5ft$5vuGety&kco4A9}^l8m7 zGqKN9)q9vwl{XNp=Eh$~M{{TqI|w&1*R&Sei8jLH9Bjcx;z6g+5{b2LwylKb`{t%~ zqD84zK1*yZZPm)=zvV{Td}EITq&v&>r;%Mncgusi(cZ0e{%Ej|>e3f?;b@pg9ok2zq<=nGSE?I@7V& zw)Xh#{$6Y5;7jh%%)yr}f5-~j!z2En-TQy1Lwf@wT<)_i@1SK5c>Vp+18K!B_vA#{ zaaY_)8MGz z8$Fu4)YIb~7z$X0?ogri$q6gq^Y#1tyx~C5A23b*)=g)71EWFPM+$Z*WCv|)WU$CC ejivH-Zb_m$RI|ocJ2{j4y=z{(KlC^ zE;4}*ti&$#{2k~#yKx!r$3>R<9XeL~GJ4@JXvV*x6HH@O-na&fFoiC7En2zt=#Bf) z8|;kkLC-%B$D`=Hhmf^~*D>v$y-mjnCy{%Gljt6uMoaiTTGHRqh14=@4Yr~s@4+&B z3{7Ak4&VXo#`EY6=d;=pT#8nttC;#%(b>)c7czoovLCr7j75(if8iJ(F6@2uysyyn zevIQQaa_P%S~)%wb8sVC;Z0})TX2wnJW)dZeV9I@F8ULaWXNNAt~h}%tQIY8LmW4w z=Pkia*nw7V46WEJI2Xs!Ej*8dcnzJek8+v#BWXJB$zHqzU&J~*hWFrUY{nAOHS>0y zhg;E!pG7k|jBe35dfhjei&gB8na@TST#r873(*CqSI{xDb?8Lh$Rfkz(WkJD@hCE9 zIE9{n25-YlcspK?$CISLmhl{PAv@9YkE0cxL=*l9lfM67({Z9}Xh!9v>57|??F=dO z#vSO&x1kg6K=*zqj`w1=BIx;t(evMmo8AG*u8UK*AxG5>lnE2w#7s@;kNjcKSbF4<+ClF;@{6Lu~+VjXA{2r^W(w0 zql=;sAYWM7*XqG|tP6b$c!sjC-|~1|)=YF3KA)HQa>lOAhN9z{zl*9f1I6{z`+NG5 z-MjV-Jvlsau=r@s#N5(?oZM8);)&M8*?i7!%&e>!$Q-RWmpNEjoB5%#G4bCOBgs_@ R9$lTBD6P7Xllir}<{y5~wKD(! diff --git a/lang/wpuseo-it_IT.po b/lang/wpuseo-it_IT.po index 1415647..3a0a352 100644 --- a/lang/wpuseo-it_IT.po +++ b/lang/wpuseo-it_IT.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: WPU SEO\n" -"POT-Creation-Date: 2023-09-16 21:46+0200\n" +"POT-Creation-Date: 2024-07-21 11:04+0200\n" "PO-Revision-Date: \n" "Last-Translator: Darklg \n" "Language-Team: \n" @@ -9,332 +9,362 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.4.4\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-Basepath: .\n" "X-Poedit-KeywordsList: __;_e\n" "X-Poedit-SearchPath-0: ../.\n" -#: .././wpuseo.php:207 -msgid "Enhance SEO : Clean title, Nice metas, GDPR friendly Analytics." -msgstr "Migliora SEO: titolo pulito, metas di Nizza, analisi GDPR friendly." +#: .././inc/WPUBaseToolbox/WPUBaseToolbox.php:169 +msgid "Submit" +msgstr "Invia" + +#: .././inc/WPUBaseToolbox/WPUBaseToolbox.php:195 +msgid "Previous" +msgstr "Precedente" + +#: .././inc/WPUBaseToolbox/WPUBaseToolbox.php:196 +msgid "Next" +msgstr "Avanti" + +#: .././inc/WPUBaseToolbox/WPUBaseToolbox.php:244 +msgid "No" +msgstr "No" + +#: .././inc/WPUBaseToolbox/WPUBaseToolbox.php:245 +msgid "Yes" +msgstr "Si" -#: .././wpuseo.php:230 +#: .././inc/WPUBaseToolbox/WPUBaseToolbox.php:388 +#, php-format +msgid "The field “%s” is required" +msgstr "Il campo \"%s\" è obbligatorio" + +#: .././inc/WPUBaseToolbox/WPUBaseToolbox.php:393 +#, php-format +msgid "The field “%s” should be an email" +msgstr "Il campo \"%s\" dovrebbe essere un'e-mail" + +#: .././inc/WPUBaseToolbox/WPUBaseToolbox.php:620 #, php-format msgid "" -"The plugin %s depends on the WPU Options plugin. Please " -"install and activate it." +"The plugin %s depends on the %s plugin. Please install and " +"activate it." msgstr "" -"Il plugin %s dipende il plugin WPU Options . Si prega di " -"installare e attivarlo." +"Il plugin %s dipende il plugin %s. Si prega di installare e " +"attivarlo." -#: .././wpuseo.php:250 .././wpuseo.php:353 +#: .././wpuseo.php:222 +msgid "Enhance SEO : Clean title, Nice metas, GDPR friendly Analytics." +msgstr "Migliora SEO: titolo pulito, metas di Nizza, analisi GDPR friendly." + +#: .././wpuseo.php:242 .././wpuseo.php:345 msgid "SEO Details" msgstr "Dettagli SEO" -#: .././wpuseo.php:255 .././wpuseo.php:376 +#: .././wpuseo.php:247 .././wpuseo.php:368 msgid "SEO Details - Twitter" msgstr "Dettagli SEO - Twitter" -#: .././wpuseo.php:261 .././wpuseo.php:400 +#: .././wpuseo.php:253 .././wpuseo.php:392 msgid "SEO Details - Facebook" msgstr "Dettagli SEO - Facebook" -#: .././wpuseo.php:275 .././wpuseo.php:302 .././wpuseo.php:320 -#: .././wpuseo.php:358 .././wpuseo.php:529 .././wpuseo.php:739 -#: .././wpuseo.php:768 .././wpuseo.php:793 +#: .././wpuseo.php:267 .././wpuseo.php:294 .././wpuseo.php:312 +#: .././wpuseo.php:350 .././wpuseo.php:521 .././wpuseo.php:731 +#: .././wpuseo.php:760 .././wpuseo.php:785 msgid "Page title" msgstr "Titolo della pagina" -#: .././wpuseo.php:282 .././wpuseo.php:307 .././wpuseo.php:325 -#: .././wpuseo.php:363 .././wpuseo.php:773 .././wpuseo.php:798 +#: .././wpuseo.php:274 .././wpuseo.php:299 .././wpuseo.php:317 +#: .././wpuseo.php:355 .././wpuseo.php:765 .././wpuseo.php:790 msgid "Page description" msgstr "Descrizione della pagina" -#: .././wpuseo.php:288 .././wpuseo.php:370 +#: .././wpuseo.php:280 .././wpuseo.php:362 msgid "Hide" msgstr "Nascondi" -#: .././wpuseo.php:289 .././wpuseo.php:371 +#: .././wpuseo.php:281 .././wpuseo.php:363 msgid "Hide from search engines" msgstr "Nascondi dai motori di ricerca" -#: .././wpuseo.php:296 .././wpuseo.php:314 .././wpuseo.php:762 -#: .././wpuseo.php:787 +#: .././wpuseo.php:288 .././wpuseo.php:306 .././wpuseo.php:754 +#: .././wpuseo.php:779 msgid "Image" msgstr "Immagine" -#: .././wpuseo.php:381 +#: .././wpuseo.php:373 msgid "Twitter:title" msgstr "Twitter:title" -#: .././wpuseo.php:386 +#: .././wpuseo.php:378 msgid "Twitter:description" msgstr "Twitter:description" -#: .././wpuseo.php:392 .././wpuseo.php:672 +#: .././wpuseo.php:384 .././wpuseo.php:664 msgid "Twitter:Image" msgstr "Twitter:Image" -#: .././wpuseo.php:405 +#: .././wpuseo.php:397 msgid "OG:Title" msgstr "OG:Title" -#: .././wpuseo.php:410 +#: .././wpuseo.php:402 msgid "OG:Description" msgstr "OG:Description" -#: .././wpuseo.php:416 +#: .././wpuseo.php:408 msgid "Og:Image" msgstr "Og:Image" -#: .././wpuseo.php:437 +#: .././wpuseo.php:429 msgid "Main" msgstr "Principale" -#: .././wpuseo.php:441 +#: .././wpuseo.php:433 msgid "Homepage" msgstr "Homepage" -#: .././wpuseo.php:497 +#: .././wpuseo.php:489 msgid "Title separator" msgstr "Separatore del titolo" -#: .././wpuseo.php:499 +#: .././wpuseo.php:491 msgid "Between site name and site description, or page name and site name" msgstr "" "Tra nome del sito e descrizione del sito o nome della pagina e nome del sito" -#: .././wpuseo.php:502 +#: .././wpuseo.php:494 msgid "Site name before page title" msgstr "Nome del sito prima del titolo della pagina" -#: .././wpuseo.php:509 +#: .././wpuseo.php:501 msgid "Meta keyword min length" msgstr "Lunghezza min del meta keyword" -#: .././wpuseo.php:515 +#: .././wpuseo.php:507 msgid "Default SEO Thumbnail" msgstr "Miniatura SEO predefinita" -#: .././wpuseo.php:518 +#: .././wpuseo.php:510 msgid "If not filled, the current theme screenshot will be used" msgstr "Se non è pieno, verrà utilizzata la schermata del tema corrente" -#: .././wpuseo.php:524 +#: .././wpuseo.php:516 msgid "Hide title prefix" msgstr "Nascondere il prefisso del titolo" -#: .././wpuseo.php:535 .././wpuseo.php:747 +#: .././wpuseo.php:527 .././wpuseo.php:739 msgid "Meta description" msgstr "Meta description" -#: .././wpuseo.php:540 +#: .././wpuseo.php:532 msgid "Meta keywords" msgstr "Principali meta keywords" -#: .././wpuseo.php:549 .././wpuseo.php:578 .././wpuseo.php:613 +#: .././wpuseo.php:541 .././wpuseo.php:570 .././wpuseo.php:605 msgid "Site verification ID" msgstr "Sito verification ID" -#: .././wpuseo.php:551 .././wpuseo.php:580 .././wpuseo.php:615 +#: .././wpuseo.php:543 .././wpuseo.php:572 .././wpuseo.php:607 msgid "Use the content attribute of the validation meta tag" msgstr "Utilizzare l'attributo content del tag meta convalida" -#: .././wpuseo.php:558 +#: .././wpuseo.php:550 msgid "Custom JS Code" msgstr "Codice JS personalizzato" -#: .././wpuseo.php:561 +#: .././wpuseo.php:553 msgid "Custom tracking code : Plugged to cookie notice if enabled. No HTML !" msgstr "" "Codice di tracciamento personalizzato. Collegato all'avviso cookie, se " "abilitato. Nessun html !" -#: .././wpuseo.php:568 +#: .././wpuseo.php:560 #, php-format msgid "%s content" msgstr "%s contenuto" -#: .././wpuseo.php:572 +#: .././wpuseo.php:564 #, php-format msgid "Content of the %s file" msgstr "Contenuto del file %s" -#: .././wpuseo.php:585 +#: .././wpuseo.php:577 msgid "Google Analytics ID" msgstr "Google Analytics ID" -#: .././wpuseo.php:589 +#: .././wpuseo.php:581 msgid "Enable Analytics for logged-in users" msgstr "Abilitare Analytics per gli utenti registrati" -#: .././wpuseo.php:594 +#: .././wpuseo.php:586 msgid "Enable anonymizeIp for Analytics" msgstr "Abilitare anonymizeIp for Analytics" -#: .././wpuseo.php:599 +#: .././wpuseo.php:591 msgid "Cookie expiration for Analytics (in sec)" msgstr "Scadenza dei cookie per Analytics (in sec)" -#: .././wpuseo.php:602 +#: .././wpuseo.php:594 msgid "If not filled, will use Google’s default value." msgstr "Se non è pieno, verrà utilizzata la valore predefinito di Google." -#: .././wpuseo.php:608 +#: .././wpuseo.php:600 msgid "Enable Facebook metas" msgstr "Abilitare Facebook metas" -#: .././wpuseo.php:618 +#: .././wpuseo.php:610 msgid "FB:Admins ID" msgstr "FB:Admins ID" -#: .././wpuseo.php:622 +#: .././wpuseo.php:614 msgid "FB:App ID" msgstr "FB:App ID" -#: .././wpuseo.php:627 +#: .././wpuseo.php:619 msgid "FB:Pixel ID" msgstr "FB:Pixel ID" -#: .././wpuseo.php:631 +#: .././wpuseo.php:623 msgid "Enable FB:Pixel for logged-in users" msgstr "Attivare FB:Pixel per gli utenti registrati" -#: .././wpuseo.php:637 +#: .././wpuseo.php:629 msgid "OG:Image" msgstr "OG: Image" -#: .././wpuseo.php:642 +#: .././wpuseo.php:634 msgid "OG:Title Home" msgstr "OG:Title Home" -#: .././wpuseo.php:646 +#: .././wpuseo.php:638 msgid "OG:Description Home" msgstr "OG:Description Home" -#: .././wpuseo.php:653 +#: .././wpuseo.php:645 msgid "Enable Twitter metas" msgstr "Abilitare Twitter metas" -#: .././wpuseo.php:658 +#: .././wpuseo.php:650 msgid "Twitter site @username" msgstr "Twitter site @username" -#: .././wpuseo.php:662 +#: .././wpuseo.php:654 msgid "Twitter ads ID" msgstr "Twitter ads ID" -#: .././wpuseo.php:666 +#: .././wpuseo.php:658 msgid "Twitter:Card format" msgstr "Twitter:Card format" -#: .././wpuseo.php:677 +#: .././wpuseo.php:669 msgid "Title Home" msgstr "Titolo Home" -#: .././wpuseo.php:681 +#: .././wpuseo.php:673 msgid "Description Home" msgstr "Descrizione Home" -#: .././wpuseo.php:689 +#: .././wpuseo.php:681 msgid "Enable Cookie Notice" msgstr "Attiva notifica cookie" -#: .././wpuseo.php:694 +#: .././wpuseo.php:686 msgid "Track before cookie check" msgstr "Traccia prima del controllo dei cookie" -#: .././wpuseo.php:697 +#: .././wpuseo.php:689 msgid "For test purposes only : do not use in production !" msgstr "Solo a scopo di prova : non utilizzare in produzione !" -#: .././wpuseo.php:700 +#: .././wpuseo.php:692 msgid "Banner text" msgstr "Testo banner" -#: .././wpuseo.php:706 +#: .././wpuseo.php:698 msgid "\"Accept\" button text" msgstr "Testo del pulsante \"Accetta\"" -#: .././wpuseo.php:712 +#: .././wpuseo.php:704 msgid "\"Refuse\" button text" msgstr "Testo del pulsante \"Rifiuta\"" -#: .././wpuseo.php:718 +#: .././wpuseo.php:710 msgid "Display \"refuse\" button" msgstr "Visualizzare il pulsante \"rifiuta\"" -#: .././wpuseo.php:723 +#: .././wpuseo.php:715 msgid "Duration of choice (in days)" msgstr "Durata della scelta (in giorni)" -#: .././wpuseo.php:729 +#: .././wpuseo.php:721 msgid "Support DoNotTrack" msgstr "Supporto DoNotTrack" -#: .././wpuseo.php:757 +#: .././wpuseo.php:749 msgid "Twitter" msgstr "Twitter" -#: .././wpuseo.php:782 +#: .././wpuseo.php:774 msgid "Facebook" msgstr "Facebook" -#: .././wpuseo.php:1010 .././wpuseo.php:1056 +#: .././wpuseo.php:1005 .././wpuseo.php:1051 msgid "404 Error" msgstr "Errore 404" -#: .././wpuseo.php:1013 +#: .././wpuseo.php:1008 #, php-format msgid "Search results for \"%s\"" msgstr "Risultati della ricerca per \"%s\"" -#: .././wpuseo.php:1016 +#: .././wpuseo.php:1011 msgid "Archive" msgstr "Archivio" -#: .././wpuseo.php:1022 +#: .././wpuseo.php:1017 msgid "Tag:" msgstr "Tag:" -#: .././wpuseo.php:1025 +#: .././wpuseo.php:1020 msgid "Category:" msgstr "Categoria :" -#: .././wpuseo.php:1034 +#: .././wpuseo.php:1029 msgid "Author:" msgstr "Autore:" -#: .././wpuseo.php:1037 +#: .././wpuseo.php:1032 msgid "Year:" msgstr "Anno:" -#: .././wpuseo.php:1037 +#: .././wpuseo.php:1032 msgid "Y" msgstr "Y" -#: .././wpuseo.php:1040 +#: .././wpuseo.php:1035 msgid "Month:" msgstr "Mese:" -#: .././wpuseo.php:1040 +#: .././wpuseo.php:1035 msgid "F Y" msgstr "F Y" -#: .././wpuseo.php:1043 +#: .././wpuseo.php:1038 msgid "Day:" msgstr "Giorno:" -#: .././wpuseo.php:1043 +#: .././wpuseo.php:1038 msgid "F j, Y" msgstr "j F Y" -#: .././wpuseo.php:1805 +#: .././wpuseo.php:1803 msgid "a certified GDPR plugin" msgstr "un plugin certificato GDPR" -#: .././wpuseo.php:1878 +#: .././wpuseo.php:1895 msgid "" "This website uses cookies to ensure you get the best experience on our " "website." @@ -342,55 +372,55 @@ msgstr "" "Questo sito Web utilizza i cookie per assicurarti di ottenere la migliore " "esperienza sul nostro sito Web." -#: .././wpuseo.php:1884 +#: .././wpuseo.php:1901 msgid "Accept" msgstr "Accetta" -#: .././wpuseo.php:1890 +#: .././wpuseo.php:1907 msgid "Refuse" msgstr "Rifiutato" -#: .././wpuseo.php:2265 +#: .././wpuseo.php:2282 msgid "Title tag content" msgstr "Contenuto del tag del titolo" -#: .././wpuseo.php:2271 +#: .././wpuseo.php:2288 msgid "Meta description content" msgstr "Contenuto della meta descrizione" -#: .././wpuseo.php:2279 +#: .././wpuseo.php:2296 msgid "Twitter Title" msgstr "Titolo di Twitter" -#: .././wpuseo.php:2285 +#: .././wpuseo.php:2302 msgid "Twitter Description" msgstr "Descrizione Twitter" -#: .././wpuseo.php:2291 +#: .././wpuseo.php:2308 msgid "Twitter Image" msgstr "Immagine Twitter" -#: .././wpuseo.php:2299 +#: .././wpuseo.php:2316 msgid "Facebook og:title" msgstr "Facebook og:title" -#: .././wpuseo.php:2305 +#: .././wpuseo.php:2322 msgid "Facebook og:description" msgstr "Facebook og:description" -#: .././wpuseo.php:2311 +#: .././wpuseo.php:2328 msgid "Facebook og:image" msgstr "Facebook og:image" -#: .././wpuseo.php:2318 +#: .././wpuseo.php:2335 msgid "Preview" msgstr "Anteprima" -#: .././wpuseo.php:2324 +#: .././wpuseo.php:2341 msgid "Save post to display updated values" msgstr "Salva post per visualizzare i valori aggiornati" -#: .././wpuseo.php:2325 +#: .././wpuseo.php:2342 msgid "Edit in site options to display updated values" msgstr "Modificare le opzioni del sito per visualizzare i valori aggiornati" diff --git a/wpuseo.php b/wpuseo.php index c256bad..19f122f 100644 --- a/wpuseo.php +++ b/wpuseo.php @@ -6,7 +6,7 @@ Plugin URI: https://github.com/WordPressUtilities/wpuseo Update URI: https://github.com/WordPressUtilities/wpuseo Description: Enhance SEO : Clean title, Nice metas, GDPR friendly Analytics. -Version: 2.24.0 +Version: 2.25.0 Author: Darklg Author URI: https://darklg.me/ Text Domain: wpuseo @@ -20,8 +20,8 @@ */ class WPUSEO { - - public $plugin_version = '2.24.0'; + public $basetoolbox; + public $plugin_version = '2.25.0'; private $active_wp_title = true; private $active_metas = true; private $fake_txt_files = array('ads', 'robots'); @@ -47,7 +47,6 @@ public function init() { $this->active_metas = !apply_filters('wpuseo__disable__metas', false); $this->cookie_notice_tracking_feature_flag = apply_filters('wpuseo__cookie_notice_tracking_feature_flag', true); - $this->check_config(); $this->load_translation(); // Ads @@ -198,6 +197,24 @@ public function init() { 'WordPressUtilities', 'wpuseo', $this->plugin_version); + + require_once __DIR__ . '/inc/WPUBaseToolbox/WPUBaseToolbox.php'; + $this->basetoolbox = new \wpuseo\WPUBaseToolbox(array( + 'need_form_js' => false, + 'plugin_name' => 'WPU SEO', + )); + + /* Dependencies */ + $this->basetoolbox->check_plugins_dependencies(array( + 'wpuoptions' => array( + 'path' => 'wpuoptions/wpuoptions.php', + 'name' => 'WPU Options' + ), + 'wputaxometas' => array( + 'path' => 'wputaxometas/wputaxometas.php', + 'name' => 'WPU Taxo Metas' + ) + )); } public function load_translation() { @@ -209,44 +226,6 @@ public function load_translation() { $this->plugin_description = __('Enhance SEO : Clean title, Nice metas, GDPR friendly Analytics.', 'wpuseo'); } - /* ---------------------------------------------------------- - Check config - ---------------------------------------------------------- */ - - public function check_config() { - - if (!is_admin()) { - return; - } - include_once ABSPATH . 'wp-admin/includes/plugin.php'; - - // Check if WPU Options is active - $wpuoptions_file = 'wpuoptions/wpuoptions.php'; - $has_wpuoptions = is_plugin_active($wpuoptions_file) || is_plugin_active_for_network($wpuoptions_file); - - /* Get active must-use plugins list */ - $mu_plugins_path = array( - WPMU_PLUGIN_DIR, - WPMU_PLUGIN_DIR . '/wpu' - ); - foreach ($mu_plugins_path as $mu_plugins_dir) { - if (is_dir($mu_plugins_dir) && file_exists($mu_plugins_dir . '/wpuoptions/wpuoptions.php')) { - $has_wpuoptions = true; - break; - } - } - - if (!$has_wpuoptions) { - add_action('admin_notices', array(&$this, - 'set_error_missing_wpuoptions' - )); - } - } - - public function set_error_missing_wpuoptions() { - echo '

' . sprintf($this->__('The plugin %s depends on the WPU Options plugin. Please install and activate it.'), 'WPU SEO') . '

'; - } - /* ---------------------------------------------------------- Clean WordPress head ---------------------------------------------------------- */