feat: affichage de la devise configurable (#10)

Nouvelle option de configuration pour choisir si on veut afficher le code ou le symbole de la devise dans les montants.

Utiliser les symboles avec précaution pour des raisons d'accessibilité, c'est ok pour les plus connus (dollar, euros, etc.), pas sûr pour les autres.

Si on a confirmation que les symboles ne posent pas de problème dans tous les cas, ça pourra devenir la nouvelle valeur par défaut (RastaPopoulos).

Refs: #9

Co-authored-by: tcharlss <tcharlss@bravecassine.com>
Reviewed-on: #10
pull/12/head
tcharlss 9 months ago
parent 9d699360bb
commit 69eaceed4f

@ -15,23 +15,47 @@
</p>
]
<div class="editer-groupe">
[(#REM) Devise principale ]
#SET{name,devise_defaut}
#SET{erreurs,#ENV**{erreurs/#GET{name}}}
#SET{defaut,#REM|intl_devise_defaut}
#SET{valeur,#ENV**{#GET{name}}|sinon{#GET{defaut}}}
<div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
<label for="champ_#GET{name}"><:intl:cfg_devise_label:></label>
[<span class='erreur_message'>(#GET{erreurs})</span>]
<select class="select select2 chosen" name="#GET{name}" id="champ_#GET{name}">
<option value=""[ (#GET{valeur}|non)selected="selected"]><:intl:cfg_choisir_option:></option>
<BOUCLE_devises(DATA) {source table, #REM|intl_lister_devises}>
<option value="#CLE"[ (#CLE|=={#GET{valeur}}|oui)selected="selected"]>#CODE - #NOM</option>
</BOUCLE_devises>
</select>
<fieldset>
<legend class="legend"><:intl:cfg_devises_legend:></legend>
<div class="editer-groupe">
[(#REM) Devise principale ]
#SET{name,devise_defaut}
#SET{erreurs,#ENV**{erreurs/#GET{name}}}
#SET{defaut,#REM|intl_devise_defaut}
#SET{valeur,#ENV**{#GET{name}}|sinon{#GET{defaut}}}
<div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
<label for="champ_#GET{name}"><:intl:cfg_devise_label:></label>
[<span class='erreur_message'>(#GET{erreurs})</span>]
<select class="select select2 chosen" name="#GET{name}" id="champ_#GET{name}">
<option value=""[ (#GET{valeur}|non)selected="selected"]><:intl:cfg_choisir_option:></option>
<BOUCLE_devises(DATA) {source table, #REM|intl_lister_devises}>
<option value="#CLE"[ (#CLE|=={#GET{valeur}}|oui)selected="selected"]>#CODE - #NOM</option>
</BOUCLE_devises>
</select>
</div>
[(#REM) Montants : symbole ou devise ]
#SET{name,currency_display}
#SET{erreurs,#ENV**{erreurs/#GET{name}}}
#SET{defaut,code}
#SET{valeur,#ENV**{#GET{name}}|sinon{#GET{defaut}}}
<div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
<label for="champ_#GET{name}"><:intl:cfg_currency_display_label:></label>
[<span class='erreur_message'>(#GET{erreurs})</span>]
<div class="choix">
<input type="radio" class="radio" name="#GET{name}" id="champ_#GET{name}_code" value="code"[ (#GET{valeur}|=={code}|oui)checked="checked"]>
<label for="champ_#GET{name}_code"><:intl:cfg_currency_display_code:> [<small>((#VAL{100}|montant_formater{#ARRAY{currency,EUR,currency_display,code}}))</small>]</label>
</div>
<div class="choix">
<input type="radio" class="radio" name="#GET{name}" id="champ_#GET{name}_symbol" value="symbol"[ (#GET{valeur}|=={symbol}|oui)checked="checked"]>
<label for="champ_#GET{name}_symbol"><:intl:cfg_currency_display_symbol:> [<small>((#VAL{100}|montant_formater{#ARRAY{currency,EUR,currency_display,symbol}}))</small>]</label>
</div>
<p class="explication"><:intl:cfg_currency_display_explication:></p>
</div>
</div>
</div>
</fieldset>
<fieldset>
<legend class="legend"><:intl:cfg_locales_legend:></legend>

@ -68,12 +68,13 @@ function montant_formater($montant, $options = array()) {
* - maximum_fraction_digits : (Int)
* Défaut : fraction de la devise.
* - currency_display : (String) symbol | code | none.
* Défaut : code
* Défaut : config
* @return string|float
* Retourne une chaine contenant le montant formaté avec une devise, encapsulée dans un <span>
*/
function filtre_montant_formater_dist($montant, $options = array()) {
intl_loader();
include_spip('inc/config');
// S'assurer d'avoir un nombre flottant
$montant = floatval(str_replace(array(',', ' '), array('.', ''), $montant));
@ -85,10 +86,13 @@ function filtre_montant_formater_dist($montant, $options = array()) {
$locale = (!empty($options['locale']) ? $options['locale'] : intl_locale_defaut());
$locale = intl_langue_vers_locale($locale);
// Afficher le symbole ou le code de la devise
$currency_display = lire_config('intl/currency_display', 'code');
// Options (celles propres au formatter + diverses)
$options_defaut = array(
'locale' => $locale,
'currency_display' => 'code', // pour l'accessibilité
'currency_display' => $currency_display,
'markup' => true, // encapsuler
);
$options = array_merge($options_defaut, is_array($options) ? $options : array());

@ -9,7 +9,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
// C
'cfg_choisir_option' => 'Veuillez choisir une option',
'cfg_currency_display_label' => 'Affichage par défaut',
'cfg_currency_display_explication' => 'Toutes les devises nont pas de symbole, dans ce cas le code sera utilisé.',
'cfg_currency_display_code' => 'Utiliser le code',
'cfg_currency_display_symbol' => 'Utiliser le symbole',
'cfg_devise_label' => 'Devise par défaut',
'cfg_devises_legend' => 'Devises',
'cfg_locale_non' => 'Pas doption régionale',
'cfg_locales_explication' => 'Pour chaque langue du site, il peut y avoir plusieurs variantes régionales. Vous pouvez ici dire à quelle variante officielle correspond chaque langue choisie pour votre site.',
'cfg_locales_legend' => 'Correspondance entre les langues du site et les variantes régionales officielles',

Loading…
Cancel
Save