Changeset 3172037
- Timestamp:
- 10/19/2024 04:13:20 PM (18 months ago)
- Location:
- style-genre/trunk
- Files:
-
- 4 edited
-
languages/style-genre-fr_FR.mo (modified) (previous)
-
languages/style-genre-fr_FR.po (modified) (1 diff)
-
readme.txt (modified) (2 diffs)
-
style-genre.php (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
style-genre/trunk/languages/style-genre-fr_FR.po
r3171909 r3172037 1 msgid "" 2 msgstr "" 3 "Project-Id-Version: Style Genre 1.0\n" 4 "Content-Type: text/plain; charset=UTF-8\n" 5 "Content-Transfer-Encoding: 8bit\n" 6 "Language: fr_FR\n" 7 8 #: style-genre.php:21 1 9 msgid "Style Genre" 2 10 msgstr "Style Genre" 3 11 4 msgid "Style Genre - Replace parts of translations" 5 msgstr "Style Genre - Remplacer des parties des traductions" 12 #: style-genre.php:22 13 msgid "Style Genre Settings" 14 msgstr "Paramètres de Style Genre" 6 15 7 msgid "Override Translations" 8 msgstr "Remplacer des traductions" 16 #: style-genre.php:41 17 msgid "Substitution rules saved successfully!" 18 msgstr "Règles de substitution enregistrées avec succès !" 9 19 10 msgid "Parts of Translations to Override" 11 msgstr "Parties des traductions à remplacer" 20 #: style-genre.php:50 21 msgid "Substitution Rules (e.g., \"autrice|auteure\"):" 22 msgstr "Règles de Substitution (ex : \"autrice|auteure\") :" 12 23 13 msgid "Enter the part of text to be replaced and the new text, in the format:" 14 msgstr "Entrez la partie du texte à remplacer et le nouveau texte, au format :" 24 #: style-genre.php:52 25 msgid "Enter each substitution as \"original_text|replacement_text\" separated by commas." 26 msgstr "Entrez chaque substitution sous forme de \"texte_original|texte_de_remplacement\" séparés par des virgules." 27 28 #: style-genre.php:53 29 msgid "Save Changes" 30 msgstr "Enregistrer les modifications" 31 32 #: style-genre.php:76 33 msgid "Run Substitution Now" 34 msgstr "Exécuter la Substitution Maintenant" 35 36 #: style-genre.php:78 37 msgid "Substitutions applied successfully!" 38 msgstr "Substitutions appliquées avec succès !" 39 40 #: style-genre.php:80 41 msgid "No substitutions applied. Please check your rules." 42 msgstr "Aucune substitution appliquée. Veuillez vérifier vos règles." -
style-genre/trunk/readme.txt
r3171909 r3172037 5 5 Requires PHP: 7.0 6 6 Tested up to: 6.6.2 7 Stable tag: 1. 2.07 Stable tag: 1.3.0 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 43 43 == Changelog == 44 44 45 = 1.3.0 = 46 * Complete rebuild 47 45 48 = 1.2.0 = 46 49 * Rebuild and shell script added (cron) -
style-genre/trunk/style-genre.php
r3171909 r3172037 1 1 <?php 2 2 3 /** 3 4 * Style Genre … … 12 13 * Plugin URI: https://profiles.wordpress.org/janiko/#content-plugins 13 14 * Description: This extension helps you to modify some parts of the translations. 14 * Version: 1. 2.015 * Version: 1.3.0 15 16 * Requires at least: 5.2 16 17 * Requires PHP: 7.2 … … 34 35 35 36 36 // If this file is called directly, abort.37 if ( ! defined( 'WPINC' ) ) {38 die;39 }40 41 /**42 * Currently plugin version.43 * Start at version 1.0.0 and use SemVer - https://semver.org44 * Rename this for your plugin and update it as you release new versions.45 */46 define( 'STYLE_GENRE_VERSION', '1.2.0' );47 37 // Sécurité : empêcher un accès direct au fichier. 48 38 if (!defined('ABSPATH')) { … … 50 40 } 51 41 52 // Charger les fichiers de traduction 42 // Charger les fichiers de traduction pour le plugin 53 43 function style_genre_load_textdomain() { 54 load_plugin_textdomain('style-genre', false, basename(dirname(__FILE__)) . '/languages');44 load_plugin_textdomain('style-genre', false, dirname(plugin_basename(__FILE__)) . '/languages/'); 55 45 } 56 46 add_action('plugins_loaded', 'style_genre_load_textdomain'); 57 47 58 // Fonction pour charger la page d'options du plugin.48 // Créer une page d'administration pour configurer les paramètres 59 49 function style_genre_menu() { 60 add_options_page( 61 esc_attr__('Style Genre', 'style-genre'), // Titre de la page 62 esc_attr__('Style Genre', 'style-genre'), // Texte du menu 63 'manage_options', // Capability requis 64 'style-genre', // Slug de la page 65 'style_genre_options_page' // Fonction callback 50 add_menu_page( 51 esc_attr__('Style Genre', 'style-genre'), 52 esc_attr__('Style Genre', 'style-genre'), 53 'manage_options', 54 'style-genre-settings', 55 'style_genre_settings_page', 56 'dashicons-translation', 57 90 66 58 ); 67 59 } 68 60 add_action('admin_menu', 'style_genre_menu'); 69 61 70 // Fonction pour afficher la page d'options. 71 function style_genre_options_page() { 62 // Affichage de la page d'administration pour configurer les substitutions 63 function style_genre_settings_page() { 64 if (!current_user_can('manage_options')) { 65 return; 66 } 67 68 if (isset($_POST['save_substitution_rules'])) { 69 check_admin_referer('style_genre_save_settings'); 70 if (isset($_POST['substitution_rules'])) { 71 $substitution_rules = sanitize_text_field(wp_unslash($_POST['substitution_rules'])); 72 update_option('style_genre_substitution_rules', $substitution_rules); 73 echo '<div class="notice notice-success is-dismissible"><p>' . esc_attr__('Substitution rules saved successfully!', 'style-genre') . '</p></div>'; 74 } 75 } 76 77 $substitution_rules = get_option('style_genre_substitution_rules', 'autrice|auteure, Autrice|Autrice'); 72 78 ?> 73 79 <div class="wrap"> 74 <h1><?php esc_attr_e('Style Genre - Replace parts of translations', 'style-genre'); ?></h1> 75 <form method="post" action="options.php"> 76 <?php 77 settings_fields('style_genre_group'); 78 do_settings_sections('style-genre'); 79 submit_button(); 80 ?> 80 <h1><?php esc_attr_e('Style Genre Settings', 'style-genre'); ?></h1> 81 <form method="post"> 82 <?php wp_nonce_field('style_genre_save_settings'); ?> 83 <label for="substitution_rules"><?php esc_attr_e('Substitution Rules (e.g., "autrice|auteure"):', 'style-genre'); ?></label> 84 <textarea id="substitution_rules" name="substitution_rules" rows="5" class="large-text"><?php echo esc_textarea($substitution_rules); ?></textarea> 85 <p><?php esc_attr_e('Enter each substitution as "original_text|replacement_text" separated by commas.', 'style-genre'); ?></p> 86 <input type="submit" name="save_substitution_rules" class="button-primary" value="<?php esc_attr_e('Save Changes', 'style-genre'); ?>"> 87 </form> 88 89 <h2><?php esc_attr_e('Manual Substitution', 'style-genre'); ?></h2> 90 <form method="post"> 91 <?php wp_nonce_field('execute_substitution_nonce'); ?> 92 <input type="submit" name="execute_substitution" class="button-primary" value="<?php esc_attr_e('Run Substitution Now', 'style-genre'); ?>"> 81 93 </form> 82 94 </div> … … 84 96 } 85 97 86 // Fonction pour enregistrer les paramètres du plugin. 87 function style_genre_settings_init() { 88 register_setting('style_genre_group', 'style_genre_replacements'); 98 // Fonction pour appliquer les substitutions sur les fichiers de traduction 99 function apply_style_genre_substitution() { 100 // Initialiser le système de fichiers WordPress 101 if (!function_exists('WP_Filesystem')) { 102 require_once ABSPATH . 'wp-admin/includes/file.php'; 103 } 89 104 90 add_settings_section( 91 'style_genre_section', 92 esc_attr__('Override Translations', 'style-genre'), 93 'style_genre_section_callback', 94 'style-genre' 95 ); 105 // Prépare l'accès au WP_Filesystem global 106 global $wp_filesystem; 107 WP_Filesystem(); 96 108 97 add_settings_field( 98 'style_genre_field', 99 esc_attr__('Parts of Translations to Override', 'style-genre'), 100 'style_genre_field_callback', 101 'style-genre', 102 'style_genre_section' 103 ); 104 } 105 add_action('admin_init', 'style_genre_settings_init'); 109 // Récupérer les règles de substitution 110 $substitution_rules = get_option('style_genre_substitution_rules', ''); 106 111 107 // Callback pour la description de la section. 108 function style_genre_section_callback() { 109 echo '<p>' . esc_attr__('Enter the part of text to be replaced and the new text, in the format:', 'style-genre') . ' <code>part_to_replace|new_text</code>.</p>'; 112 if (!empty($substitution_rules)) { 113 $rules = array_map('trim', explode(',', $substitution_rules)); 114 115 // Récupérer les fichiers à modifier (.po, .mo, .php) 116 $translation_files = glob(ABSPATH . 'wp-content/languages/*.{po,mo,php}', GLOB_BRACE); 117 $theme_translation_files = glob(ABSPATH . 'wp-content/languages/themes/*.{po,mo,php}', GLOB_BRACE); 118 119 // Appliquer les substitutions dans chaque fichier 120 foreach (array_merge($translation_files, $theme_translation_files) as $file) { 121 // Lire le contenu du fichier avec WP_Filesystem 122 $content = $wp_filesystem->get_contents($file); 123 if ($content === false) { 124 continue; // Si la lecture échoue, passer au fichier suivant 125 } 126 127 // Appliquer les substitutions 128 foreach ($rules as $rule) { 129 list($search, $replace) = array_map('trim', explode('|', $rule)); 130 $content = str_replace($search, $replace, $content); 131 } 132 133 // Enregistrer les modifications avec WP_Filesystem 134 $wp_filesystem->put_contents($file, $content); 135 } 136 return true; 137 } 138 return false; 110 139 } 111 140 112 // Callback pour afficher le champ d'options.113 function style_genre_field_callback() {114 // Valeurs par défaut pour les remplacements.115 $default_replacements = "autrice|auteure\nAutrice|Autrice";116 $replacements = get_option('style_genre_replacements', $default_replacements);117 echo '<textarea name="style_genre_replacements" rows="10" cols="50" class="large-text">' . esc_textarea($replacements) . '</textarea>';118 }119 141 120 // Fonction pour remplacer les parties de traductions. 121 function style_genre_override($translation, $text, $domain) { 122 // Valeurs par défaut pour les remplacements si aucune option n'est définie. 123 $default_replacements = "autrice|auteure\nAutrice|Autrice"; 124 $replacements = get_option('style_genre_replacements', $default_replacements); 142 // Ajouter un bouton pour exécuter la substitution manuellement 143 function add_manual_style_genre_button() { 144 if (isset($_POST['execute_substitution'])) { 145 check_admin_referer('execute_substitution_nonce'); 125 146 126 // Si des remplacements existent, les appliquer. 127 if (!empty($replacements)) { 128 $lines = explode("\n", $replacements); 129 foreach ($lines as $line) { 130 list($old_part, $new_part) = array_map('trim', explode('|', $line)); 131 if (strpos($translation, $old_part) !== false) { 132 // Remplacer uniquement la partie du texte trouvée. 133 $translation = str_replace($old_part, $new_part, $translation); 134 } 147 // Ajouter un message de débogage pour voir si la soumission est capturée 148 if (apply_style_genre_substitution()) { 149 echo '<div class="notice notice-success is-dismissible"><p>' . esc_html__('Substitutions applied successfully!', 'style-genre') . '</p></div>'; 150 } else { 151 echo '<div class="notice notice-error is-dismissible"><p>' . esc_html__('No substitutions applied. Please check your rules.', 'style-genre') . '</p></div>'; 135 152 } 136 153 } 154 } 155 add_action('admin_notices', 'add_manual_style_genre_button'); 137 156 138 return $translation; 157 // Hook pour déclencher la substitution après une mise à jour des traductions 158 function run_style_genre_substitution_after_translation_update($upgrader, $hook_extra) { 159 if (isset($hook_extra['type']) && $hook_extra['type'] === 'translation') { 160 apply_style_genre_substitution(); 161 } 139 162 } 140 add_ filter('gettext', 'style_genre_override', 10, 3);163 add_action('upgrader_process_complete', 'run_style_genre_substitution_after_translation_update', 10, 2);
Note: See TracChangeset
for help on using the changeset viewer.