Changeset 123012 in spip-zone


Ignore:
Timestamp:
Mar 20, 2020, 10:54:32 AM (3 weeks ago)
Author:
Charles Razack
Message:

Fix définition de la locale en fonction du code langue de spip + ajout des exceptions (occitan, aymara, etc). On améliore l'UX du formulaire de config pour les locales : si plusieurs options possibles ça met un select, sinon un input en readonly.

Location:
_plugins_/prix
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/prix

    • Property subgit:lock:4774d19385f5b3a9fff8ed02f100c6c18d5b1301 deleted
    • Property subgit:lock:b463642b9ba98419753ec4c78c26170e73cd76b5 set to 2020-03-20T11:54:39.853
  • _plugins_/prix/formulaires/configurer_prix.html

    r123009 r123012  
    4848
    4949                                        [(#REM)
    50                                                 Configurer la locale pour chaque langue de spip utilisée sur le site
     50                                                Choisir la locale pour chaque langue de spip utilisée sur le site.
    5151                                                On obtient un tableau associatif dans la clé 'locales' : code langue de spip => locale
     52                                                S'il y a plusieurs déclinaisons régionales, on met un select pour choisir laquelle.
     53                                                Sinon on indique qu'il n'y en a pas.
    5254                                        ]
    5355                                        #SET{langues_spip,#LISTE{#CONFIG{langue_site}}|array_merge{#CONFIG{langues_multilingue}|explode{","}}|array_unique|array_filter}
     
    5658                                        #SET{name,locales\[#VALEUR\]}
    5759                                        #SET{erreurs,#ENV**{erreurs/#GET{name}}}
    58                                         #SET{defaut,#VALEUR|prix_langue_vers_locale}
    59                                         #SET{valeur,#ENV**{locales/#VALEUR}|sinon{#GET{defaut}}}
     60                                        #SET{locale,#VALEUR|prix_langue_vers_locale}
     61                                        #SET{valeur,#ENV**{locales/#VALEUR}|sinon{#GET{locale}}}
    6062                                        <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
    6163                                                <label for="champ_#GET{name}">[(#VALEUR|traduire_nom_langue)]</label>
    6264                                                [<span class='erreur_message'>(#GET{erreurs})</span>]
     65                                                [(#REM) S'il y a des déclinaisons régionales pour la langue, un select ]
     66                                                #SET{locales_langue,#ARRAY}
     67                                                <BOUCLE_set_locales(DATA) {source table, #GET{langues_intl}} {cle == ^#GET{locale}} {par cle}>
     68                                                #SET{locales_langue,#GET{locales_langue}|array_merge{#ARRAY{#CLE,#VALEUR}}}
     69                                                </BOUCLE_set_locales>
     70                                                <B_locales>
    6371                                                <select class="select select2 chosen" name="#GET{name}" id="champ_#GET{name}">
    64                                                         <BOUCLE_locales(DATA) {source table, #GET{langues_intl}} {cle == ^#VALEUR} {par cle}>
    65                                                         <option value="#CLE"[ (#CLE|=={#GET{valeur}}|oui)selected="selected"]>#VALEUR</option>
     72                                                        <BOUCLE_locales(DATA) {source table, #GET{locales_langue}} {si #GET{locales_langue}|count|>{1}}>
     73                                                        <option value="[(#CLE|attribut_html)]"[ (#CLE|=={#GET{valeur}}|oui)selected="selected"]>#VALEUR</option>
    6674                                                        </BOUCLE_locales>
    6775                                                </select>
     76                                                </B_locales>
     77                                                [(#REM) S'il n'y a aucune option régionale, un input ]
     78                                                <p class="explication"><:prix:cfg_locale_non:></p>
     79                                                <input class="text" name="#GET{name}" id="champ_#GET{name}" readonly="readonly" value="[(#GET{langues_intl/#GET{locale}}|sinon{#GET{locale}}|attribut_html)]" />
     80                                                <//B_locales>
    6881                                        </div>
    6982                                        </BOUCLE_langues_spip>
  • _plugins_/prix/lang/prix_fr.php

    r123009 r123012  
    1111        'cfg_choisir_option' => 'Veuillez choisir une option',
    1212        'cfg_devise_label' => 'Devise par défaut',
    13         'cfg_locales_legend' => 'Formatage des prix',
    14         'cfg_locales_explication' => 'Pour chaque langue utilisée sur le site, veuillez préciser la région quand plusieurs options sont possibles.',
    15         'cfg_locale_label' => 'Langue par défaut',
     13        'cfg_locales_legend' => 'Langues et formatage des prix',
     14        'cfg_locales_explication' => 'Veuillez choisir l’option régionale à utiliser pour formater les prix si plusieurs options sont possibles.',
     15        'cfg_locale_non' => 'Pas d’option régionale',
    1616        'cfg_titre_parametrages' => 'Configuration',
    1717
  • _plugins_/prix/paquet.xml

    r123009 r123012  
    22        prefix="prix"
    33        categorie="outil"
    4         version="1.2.1"
     4        version="1.2.2"
    55        etat="dev"
    66        compatibilite="[3.2.0;3.2.*]"
  • _plugins_/prix/prix_fonctions.php

    r123010 r123012  
    299299
    300300/**
    301  * Donne la locale pour un code langue de SPIP
    302  *
    303  * On se contente d'extraire le code pays, ce qui doit permettre d'obtenir une locale "générale".
    304  * Il s'agit des 2 à 3 lettres précédentes l'undescore : fr_tu → fr.
    305  *
    306  * L'objectif est d'obtenir une locale qui fait partie de la liste suivante :
    307  * https://github.com/commerceguys/intl/blob/master/src/Language/LanguageRepository.php#L46
    308  *
    309  * @todo Vérifier s'il y a des exceptions
     301 * Donne la locale correspondante un code langue de SPIP pour le formatage des prix.
     302 *
     303 * L'objectif est d'obtenir une locale qui fait partie de la liste prise en charge par Intl
     304 *
     305 * On extrait le code pays afin d'obtenir la locale "générale" (norme ISO 639).
     306 * Il s'agit des 2 à 3 lettres précédentes l'underscore : fr_tu → fr.
     307 *
     308 * @see https://github.com/commerceguys/intl/blob/master/src/Language/LanguageRepository.php#L46
    310309 * @see https://blog.smellup.net/106
    311310 *
     
    314313 */
    315314function prix_langue_vers_locale($langue_spip) {
    316         $code_pays = strtolower(substr($langue_spip, strpos($langue_spip, '_')));
    317         return $code_pays;
     315
     316        // Extraire le code pays pour avoir la locale "générale" : fr_tu → fr
     317        $locale = strtolower(strtok($langue_spip, '_'));
     318
     319        // Exceptions : certains codes pays des langues de spip ne font pas partie de la liste des locales.
     320        // On fait une correspondance manuellement en prenant la locale la plus proche.
     321        // (ça n'indique pas que ce sont des langues identiques, mais suffisamment proches pour le formatage des prix)
     322        $exceptions = array(
     323                'oc'  => 'fr', // occitan
     324                'ay'  => 'ayr', // aymara
     325                'co'  => 'fr', // corse
     326                'cpf' => 'fr', // créole et pidgins (rcf)
     327                'fon' => '', // fongbè
     328                'roa' => 'pdc', // langues romanes
     329        );
     330        if (!empty($exceptions[$locale])) {
     331                $locale = $exceptions[$locale];
     332        }
     333
     334        return $locale;
    318335}
    319336
Note: See TracChangeset for help on using the changeset viewer.