Skip to content
Extraits de code Groupes Projets
Valider 04bd80e7 rédigé par kent1@arscenic.info's avatar kent1@arscenic.info
Parcourir les fichiers

On permet d'exporter le module .php complet ou partiel, le partiel est celui...

On permet d'exporter le module .php complet ou partiel, le partiel est celui qui doit être utilisé en prod, le complet ne doit servir que de base de traduction

On généralise l'export en .po sur toutes les pages

On ajoute un confirm javascript sur l'export en .po et en .php complet pour expliquer que cela ne doit servir que comme base de traduction

On en profite pour améliorer un chouilla la structure html en ajoutant des class sur les boutons par exemple

Amélioration de certains phpdoc
Passage en version 2.1.4
parent dc860106
Branches
Étiquettes
Aucune requête de fusion associée trouvée
......@@ -13,18 +13,17 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
function action_tradlang_exporter_langue_dist(){
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
if (!preg_match(",^([0-9]+)\/(\w+)?(\/?(\w*))$,", $arg, $r))
if (!preg_match(",^([0-9]+)\/(\w+)?(\/?(\w*))?(\/?(\w*))$,", $arg, $r))
spip_log("action_tradlang_exporter_langue_dist $arg pas compris","tradlang");
$id_tradlang_module = intval($r[1]);
$lang_cible = $r[2];
$type = $r[4] ? $r[4] : false;
$tout = ($r[6] == 'non') ? false : true;
if($lang_cible && intval($id_tradlang_module) && sql_countsel('spip_tradlangs','id_tradlang_module='.intval($id_tradlang_module).' AND lang='.sql_quote($lang_cible))){
$module = sql_getfetsel('module','spip_tradlang_modules','id_tradlang_module='.intval($id_tradlang_module));
$tradlang_sauvegarde_module = charger_fonction('tradlang_sauvegarde_module','inc');
$fichier = $tradlang_sauvegarde_module($module,$lang_cible,false,$type);
$fichier = $tradlang_sauvegarde_module($module,$lang_cible,false,$type,$tout);
if(file_exists($fichier)){
switch($type){
case 'po':
......
......@@ -36,7 +36,9 @@
<h2 class="h2"><:tradlang:titre_traduction_module_de_vers{module=#NOM_MOD,lang_orig=#GET{lang_orig},lang_orig_long=#GET{orig_lng},lang_cible=#GET{lang_cible},lang_cible_long=#GET{cible_lng}}:></h2>
[(#ENV{vue}|=={upload}|oui)
<p><a href="[(#SELF|parametre_url{vue,''})]" class="ajax btn"><:tradlang:lien_retour_module{module=#NOM_MOD}:></a></p>
<div class="actions">
<a href="[(#SELF|parametre_url{vue,''})]" class="ajax btn icon-back"><:tradlang:lien_retour_module{module=#NOM_MOD}:></a>
</div>
<INCLURE{fond=noisettes/vues/tradlang_upload_module,lang_orig=#GET{lang_orig},lang_cible=#GET{lang_cible},lang_cible_forcee=#GET{lang_cible_forcee},env,ajax}>]
[(#ENV{vue}|=={upload}|non)
<INCLURE{fond=noisettes/listes/tradlang_liste_tous,lang_orig=#GET{lang_orig},lang_cible=#GET{lang_cible},lang_cible_forcee=#GET{lang_cible_forcee},env,ajax}>]
......
......@@ -13,12 +13,18 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Fonction d'export d'une langue d'un module SPIP en php
*
* @param string $module Le module à exporter
* @param string $langue La langue à exporter
* @param string $dir_lang Le répertoire où stocker les fichiers de langue
* @return string $fichier Le fichier final
* @param string $module
* Le module à exporter
* @param string $langue
* La langue à exporter
* @param string $dir_lang
* Le répertoire où stocker les fichiers de langue
* @param bool $tout
* Si true, exporte toutes les chaines même non traduites
* @return string $fichier
* Le fichier final
*/
function export_lang_spip_dist($module,$langue,$dir_lang){
function export_lang_spip_dist($module,$langue,$dir_lang,$tout=false){
/**
* Le fichier final
* local/cache-lang/module_lang.php
......@@ -26,8 +32,10 @@ function export_lang_spip_dist($module,$langue,$dir_lang){
$fichier = $dir_lang."/".$module."_".$langue.".php";
$tab = "\t";
$res=sql_select("id,str,comm,statut","spip_tradlangs","module=".sql_quote($module)." AND lang=".sql_quote($langue),"id");
$where = "module=".sql_quote($module)." AND lang=".sql_quote($langue);
if(!$tout)
$where .= " AND statut IN ('OK','MODIF')";
$res=sql_select("id,str,comm,statut","spip_tradlangs",$where,"id");
$x=array();
$prev="";
$tous = $lorigine; // on part de l'origine comme ca on a tout meme si c'est pas dans la base de donnees (import de salvatore/lecteur.php)
......
......@@ -12,43 +12,47 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Sauvegarde d'une langue d'un module dans son fichier
*
* @param string $module le nom d'un module d'un module (par défaut local/cache-lang/$module)
* @param string $langue la langue cible
* @param string $dir_lang le répertoire de stockage des fichiers de langue
* @return string $fic_exp le chemin complet du fichier de langue
* @param string $module
* Le nom d'un module d'un module (par défaut local/cache-lang/$module)
* @param string $langue
* La langue cible à exporter
* @param string $dir_lang
* Le répertoire de stockage des fichiers de langue
* @param bool $tout
* Si true, exporte toutes les chaines même non traduites (utilisé uniquement pour les modules SPIP)
* @return string $fichier
* Le chemin complet du fichier de langue
*/
function inc_tradlang_sauvegarde_module_dist($module,$langue,$dir_lang=false,$type=false){
function inc_tradlang_sauvegarde_module_dist($module,$langue,$dir_lang=false,$type=false,$tout=true){
include_spip('inc/flock');
include_spip('inc/filtres'); # Pour url_absolue
if(!$dir_lang){
$dir_lang = _DIR_VAR.'cache-lang/'.$module;
if(!is_dir(_DIR_VAR.'cache-lang/')){
$dir_lang = _DIR_VAR.'cache-lang/'.($tout ? '':'partiels/').$module;
if(!is_dir(_DIR_VAR.'cache-lang/'))
sous_repertoire(_DIR_VAR,'cache-lang');
}
if(!$tout && !is_dir(_DIR_VAR.'cache-lang/partiels/'))
sous_repertoire(_DIR_VAR.'cache-lang/','partiels');
}
if(!is_dir($dir_lang)){
sous_repertoire($dir_lang);
if(!is_dir($dir_lang)){
return false;
}
if(!is_dir($dir_lang))
return false;
}
$tradlang_module = sql_fetsel('id_tradlang_module,type_export','spip_tradlang_modules','module='.sql_quote($module));
/**
* L'URL du site de traduction
*/
$url_trad = parametre_url(url_absolue(generer_url_entite($tradlang_module['id_tradlang_module'],'tradlang_module')),'lang_cible',$langue);
if(!$type)
$type = $tradlang_module['type_export'];
if(!$f = charger_fonction($type,'export_lang'))
$f = charger_fonction('spip','export_lang');
$fichier = $f($module,$langue,$dir_lang);
$fichier = $f($module,$langue,$dir_lang,$tout);
return $fichier;
}
?>
\ No newline at end of file
......@@ -18,7 +18,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'bouton_activer_lang' => 'Activer la langue "@lang@" pour ce module',
'bouton_exporter_fichier' => 'Exporter le fichier',
'bouton_exporter_fichier_langue' => 'Exporter le fichier de langue en "@lang@"',
'bouton_exporter_fichier_langue_complet' => 'Exporter le fichier de langue complet en "@lang@"',
'bouton_exporter_fichier_langue_original' => 'Exporter le fichier de langue original ("@lang_mere@")',
'bouton_exporter_fichier_langue_po' => 'Exporter le fichier de langue en "@lang@" au format .po',
'bouton_exporter_fichier_po' => 'Exporter le fichier en .po',
'bouton_exporter_fichier_zip' => 'Exporter les fichiers en zip',
'bouton_precedent' => 'Etape précédente',
......@@ -101,6 +103,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'info_chaine_originale' => 'Cette chaîne est la chaine originale',
'info_choisir_langue' => 'Dans une langue spécifique',
'info_contributeurs' => 'Contributeurs',
'info_edition_par_lot' => 'Édition par lot :',
'info_export' => 'Export :',
'info_filtrer_status' => 'Filtrer par statut :',
'info_langue_mere' => '(langue mère)',
'info_langues_non_preferees' => 'Autres langues :',
......@@ -228,6 +232,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'menu_info_interface' => 'Affiche un lien menant vers l\'interface de traduction',
'menu_titre_interface' => 'Interface de traduction',
'message_afficher_vos_modules' => 'Afficher les modules :',
'message_avertissement_export_langue_complet' => 'Il est préconisé de ne pas utiliser ce fichier en production. Il est préférable de ne l\'utiliser que pour base de traduction.',
'message_avertissement_export_langue_po' => 'Ce fichier ne peut servir que pour traduire dans un logiciel spécialisé, vous pourrez ensuite l\'importer via le bouton adéquat.',
'message_aucun_resultat_chaine' => 'Aucun résultat correspondant à vos critères dans les chaînes de langue.',
'message_aucun_resultat_statut' => 'Aucune chaine ne correspond au statut demandé.',
'message_aucune_nouvelle_langue_dispo' => 'Ce module est disponible dans toutes les langues possibles',
......
......@@ -62,60 +62,64 @@
</div>
</li>
</ul>]
[(#SET{texte_bouton_upload,<:tradlang:bouton_upload_langue_module:>}|attribut_html)]
[(#GET{total_ok}|=={0}|et{#GET{total_cible}|>{0}}|et{#GET{autoriser_modifier}}|oui)
[(#SET{texte_bouton_delete,<:tradlang:bouton_supprimer_langue_module:>}|attribut_html)]
<div class="actions">
[(#BOUTON_ACTION{#GET{texte_bouton_delete},[(#URL_ACTION_AUTEUR{tradlang_supprimer_langue_cible,[(#ID_TRADLANG_MODULE|concat{/#ENV{lang_cible}})],#SELF})]})]
[<span class="sep"> | </span>(#BOUTON_ACTION{#GET{texte_bouton_upload},[(#SELF|parametre_url{vue,upload})]})]
</div>]
[(#GET{total_ok}|>{0}|et{#GET{total_cible}|>{0}}|et{#GET{autoriser_modifier}}|oui)
<div class="actions">
[(#BOUTON_ACTION{[(#VAL{tradlang:bouton_exporter_fichier_langue}|_T{#ARRAY{lang,#ENV{lang_cible}}})],[(#URL_ACTION_AUTEUR{tradlang_exporter_langue,[(#ID_TRADLANG_MODULE|concat{/#ENV{lang_cible}})],#SELF})]})]
<p class="info_export"><:tradlang:info_export:></p>
[(#BOUTON_ACTION{[(#VAL{tradlang:bouton_exporter_fichier_langue}|_T{#ARRAY{lang,#ENV{lang_cible}}})],[(#URL_ACTION_AUTEUR{tradlang_exporter_langue,[(#ID_TRADLANG_MODULE|concat{/#ENV{lang_cible}}|concat{/#TYPE_EXPORT}|concat{/non})],#SELF})],icon-export})]
[(#BOUTON_ACTION{[(#VAL{tradlang:bouton_exporter_fichier_langue_complet}|_T{#ARRAY{lang,#ENV{lang_cible}}})],[(#URL_ACTION_AUTEUR{tradlang_exporter_langue,[(#ID_TRADLANG_MODULE|concat{/#ENV{lang_cible}})],#SELF})],icon-export,<:tradlang:message_avertissement_export_langue_complet:>})]
[(#BOUTON_ACTION{[(#VAL{tradlang:bouton_exporter_fichier_langue_po}|_T{#ARRAY{lang,#ENV{lang_cible}}})],[(#URL_ACTION_AUTEUR{tradlang_exporter_langue,[(#ID_TRADLANG_MODULE|concat{/#ENV{lang_cible}|concat{/po}})],#SELF})],icon-export,<:tradlang:message_avertissement_export_langue_po:>})]
[(#GET{lang_orig}|et{#GET{lang_orig}|!={#LANG_MERE}}|oui)
[<span class="sep"> | </span>(#BOUTON_ACTION{[(#VAL{tradlang:bouton_exporter_fichier_langue}|_T{#ARRAY{lang,#GET{lang_orig}}})],[(#URL_ACTION_AUTEUR{tradlang_exporter_langue,[(#ID_TRADLANG_MODULE|concat{/#GET{lang_orig}})],#SELF})]})]]
[<span class="sep"> | </span>(#BOUTON_ACTION{<:tradlang:bouton_exporter_fichier_langue_original{lang_mere=#LANG_MERE}|attribut_html:>,[(#URL_ACTION_AUTEUR{tradlang_exporter_langue,[(#ID_TRADLANG_MODULE|concat{/#LANG_MERE})],#SELF})]})]
[<span class="sep"> | </span>(#BOUTON_ACTION{#GET{texte_bouton_upload},[(#SELF|parametre_url{vue,upload})]})]
[(#BOUTON_ACTION{[(#VAL{tradlang:bouton_exporter_fichier_langue}|_T{#ARRAY{lang,#GET{lang_orig}}})],[(#URL_ACTION_AUTEUR{tradlang_exporter_langue,[(#ID_TRADLANG_MODULE|concat{/#GET{lang_orig}})],#SELF})],icon-export})]]
[(#BOUTON_ACTION{<:tradlang:bouton_exporter_fichier_langue_original{lang_mere=#LANG_MERE}|attribut_html:>,[(#URL_ACTION_AUTEUR{tradlang_exporter_langue,[(#ID_TRADLANG_MODULE|concat{/#LANG_MERE})],#SELF})],icon-export})]
</div>]
</div>
[(#REM)
[(#GET{total_mere}|>{0}|oui)<p> <:tradlang:nb_items_langue_cible{nb=#GET{total_mere},langue=#ENV{lang_cible}}:></p>]]
[(#ENV{edit}|=={1}|oui)
<p><a href="[(#SELF|parametre_url{edit,2})]" class="ajax btn back"><:tradlang:lien_retour_module{module=#NOM_MOD}:></a></p>]
[(#ENV{edit}|=={1}|non|et{#GET{module_existant,non}|=={oui}|oui}|et{#GET{percent_ok}|!={100}|oui}|et{#GET{autoriser_modifier}|oui}|oui)
<div class="actions"><p><a href="[(#SELF|parametre_url{edit,1})]" class="ajax btn edit"><:tradlang:lien_editer_tous:></a></p></div>
]
<div class="actions">
<p><:tradlang:info_edition_par_lot:></p>
[(#SET{texte_bouton_upload,<:tradlang:bouton_upload_langue_module:>}|attribut_html)]
[(#ENV{edit}|=={1}|oui)
<a href="[(#SELF|parametre_url{edit,2})]" class="ajax btn icon-back"><:tradlang:lien_retour_module{module=#NOM_MOD}:></a>]
[(#ENV{edit}|=={1}|non|et{#GET{module_existant,non}|=={oui}|oui}|et{#GET{percent_ok}|!={100}|oui}|et{#GET{autoriser_modifier}|oui}|oui)
<a href="[(#SELF|parametre_url{edit,1})]" class="ajax btn icon-edit"><:tradlang:lien_editer_tous:></a>]
[(#BOUTON_ACTION{#GET{texte_bouton_upload},[(#SELF|parametre_url{vue,upload})],icon-upload})]
</div>
<BOUCLE_si_edit(CONDITION){si #GET{autoriser_modifier}|et{#ENV{edit}|=={1}}}>
[(#_module:CRAYON{tradlang_tous})]
</BOUCLE_si_edit>
</B_si_edit>
<B_statut>
[(#GRAND_TOTAL|>{1}|oui)
<div class="actions"><p class="filtrer"><:tradlang:info_filtrer_status:>
[(#ENV{statut}|oui)<a href="[(#_module:URL_TRADLANG_MODULE|parametre_url{statut,''}|parametre_url{lang_cible,#ENV{lang_cible}}|parametre_url{lang_orig,#ENV{lang_orig}})]" class="ajax bouton"><:tradlang:lien_aucun_status:></a><span class="sep"> | </span>]
[(#ENV{statut}|non)<:tradlang:lien_aucun_status:><span class="sep"> | </span>]]
<BOUCLE_statut(TRADLANGS){module}{id IN #GET{str_mere}}{lang=#ENV{lang_cible}}{fusion statut}{'<span class="sep"> | </span>'}>
[(#GRAND_TOTAL|>{1}|oui)
[(#STATUT|!={#ENV{statut}}|oui)<a href="[(#_module:URL_TRADLANG_MODULE|parametre_url{statut,#STATUT}|parametre_url{lang_cible,#ENV{lang_cible}}|parametre_url{lang_orig,#ENV{lang_orig}})]" class="ajax bouton">#STATUT</a>]
[(#STATUT|!={#ENV{statut}}|non)#STATUT]
]
#SET{statut,#STATUT}
</BOUCLE_statut>
[(#GRAND_TOTAL|>{1}|oui)
</p></div>]
[(#REM)
<div class="actions">
<p class="filtrer"><:tradlang:info_filtrer_status:></p>
[(#ENV{statut}|oui)<a href="[(#_module:URL_TRADLANG_MODULE|parametre_url{statut,''}|parametre_url{lang_cible,#ENV{lang_cible}}|parametre_url{lang_orig,#ENV{lang_orig}})]" class="ajax bouton"><:tradlang:lien_aucun_status:></a>]
[(#ENV{statut}|non)<strong class="on"><:tradlang:lien_aucun_status:></strong>]]
<BOUCLE_statut(TRADLANGS){module}{id IN #GET{str_mere}}{lang=#ENV{lang_cible}}{fusion statut}>
[(#GRAND_TOTAL|>{1}|oui)[(#SET{statut,#STATUT})]
[(#STATUT|!={#ENV{statut}}|oui)<a href="[(#_module:URL_TRADLANG_MODULE|parametre_url{statut,#STATUT}|parametre_url{lang_cible,#ENV{lang_cible}}|parametre_url{lang_orig,#ENV{lang_orig}})]" class="ajax bouton">#STATUT</a>]
[(#STATUT|!={#ENV{statut}}|non)<strong class="on">#STATUT</strong>]]
</BOUCLE_statut>
[(#GRAND_TOTAL|>{1}|oui)
</div>]
</B_statut>[(#REM)
Si un seul statut et pas celui de l'environnement c'est qu'on aura pas de résultats après
]
[(#GRAND_TOTAL|=={1}|et{#ENV{statut}}|et{#GET{statut}|!={#ENV{statut}}}|oui)
][(#GRAND_TOTAL|=={1}|et{#ENV{statut}}|et{#GET{statut}|!={#ENV{statut}}}|oui)
<p><:tradlang:message_aucun_resultat_statut:></p>
<p><a href="[(#_module:URL_TRADLANG_MODULE|parametre_url{statut,''}|parametre_url{lang_cible,#ENV{lang_cible}}|parametre_url{lang_orig,#ENV{lang_orig}})]"><:tradlang:lien_voir_toute_chaines_module:></a></p>
]
</B_statut>
[(#REM)
<p><a href="[(#_module:URL_TRADLANG_MODULE|parametre_url{statut,''}|parametre_url{lang_cible,#ENV{lang_cible}}|parametre_url{lang_orig,#ENV{lang_orig}})]"><:tradlang:lien_voir_toute_chaines_module:></a></p>]
</B_statut>[(#REM)
On affiche les id qui n'existent pas dans la langue cible
]
<B_revise_inexistants>[(#SET{total_inexistants,#GRAND_TOTAL})]
]<B_revise_inexistants>[(#SET{total_inexistants,#GRAND_TOTAL})]
[(#GET{total_inexistants}|=={#GET{total_mere}}|oui)
[(#SET{texte_bouton,[(#VAL{tradlang:bouton_activer_lang}|_T{#ARRAY{lang,#ENV{lang_cible}}})]})]
[(#GET{autoriser_modifier}|oui)
......@@ -127,9 +131,7 @@
[(#ENV{lang_cible}|langue_possible|non)
#BOITE_OUVRIR{'',error}
<:tradlang:erreur_langue_activer_impossible{lang=#ENV{lang_cible}}:>
#BOITE_FERMER]
]
]
#BOITE_FERMER]]
[(#GET{total_inexistants}|=={#GET{total_mere}}|non)
[(#SET{texte_bouton,[(#VAL{tradlang:bouton_activer_lang}|_T{#ARRAY{lang,#ENV{lang_cible}}})]})]
[(#GET{autoriser_modifier}|oui)
......@@ -161,11 +163,11 @@
</BOUCLE_revise_inexistants>
</tbody>
</table>
</B_revise_inexistants>
[(#REM)
</B_revise_inexistants>[(#REM)
On affiche les id qui n'existent pas dans la langue cible
]<B_revise_en_trop>
#SET{total_en_trop,#GRAND_TOTAL}
]<B_revise_en_trop>[(#SET{total_en_trop,#GRAND_TOTAL})]
[<p>(#GET{total_en_trop}|singulier_ou_pluriel{tradlang:nb_items_langue_en_trop,tradlang:nb_item_langue_en_trop,nb,#ARRAY{langue,#ENV{lang_cible},langue_longue,#GET{langue_longue}}})</p>]
<table class="spip liste_traductions tablesorter">
<thead>
......@@ -187,9 +189,10 @@
</BOUCLE_revise_en_trop>
</tbody>
</table>
</B_revise_en_trop>
[(#REM)
</B_revise_en_trop>[(#REM)
On affiche finalement le tableau de traductions
]<B_revise_cible>
<table class="spip liste_traductions tablesorter">
<thead>
......@@ -202,9 +205,10 @@
<th class="modifier ts_disabled">&nbsp;</th>
</tr>
</thead>
<tbody>
[(#REM)on n'affiche que les id qui existent dans la langue mère]
<BOUCLE_revise_cible(TRADLANGS trandlang_modules){module}{id IN #GET{str_mere}}{statut ?}{lang=#ENV{lang_cible}}{tri #ENV{par,statut},#GET{defaut_tri}}{par id}>
<tbody>[(#REM)
on n'affiche que les id qui existent dans la langue mère
]<BOUCLE_revise_cible(TRADLANGS trandlang_modules){module}{id IN #GET{str_mere}}{statut ?}{lang=#ENV{lang_cible}}{tri #ENV{par,statut},#GET{defaut_tri}}{par id}>
<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})] statut_[(#STATUT|strtolower)]" id="tradlang-#ID_TRADLANG">
<td class="code_langue">#ID</td>
<BOUCLE_revise_orig(TRADLANGS){module}{id=#ID}{lang=#GET{lang_orig,#LANG_MERE}}>
......@@ -223,9 +227,10 @@
</B_revise_cible>
<//B_si_edit>
</BOUCLE_module>
</B_module>
[(#REM)
</B_module>[(#REM)
Le module n'existe pas
][(#BOITE_OUVRIR{'',error})]
<:tradlang:erreur_module_inconnu:>
[(#BOITE_FERMER)]
......
<paquet
prefix="tradlang"
categorie="outil"
version="2.1.3"
version="2.1.4"
etat="stable"
compatibilite="[3.0.0;3.1.*]"
logo="images/spip_lang.png"
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter