New Slang - Création de Site Internet Artisanale

Comment gérer les formats monétaires dans Prestashop

thierry
Comment gérer les formats monétaires dans Prestashop

Un des points les plus importants pour un visiteur qui vient faire ses courses sur votre boutique en ligne, c’est bien évidemment le prix ! Et pour s’assurer que celui-ci soit clair et corresponde bien au format du pays où se trouve la boutique, Prestashop s’occupe de tout. Sauf que parfois, le formatage par défaut du CMS est incorrect. Comment le modifier ? Comment Prestashop gère-t-il les différents formats ? (monétaire, date, etc.)

Vaste sujet pourtant peu couvert, à part dans quelques forums de-ci de-là. Ou encore par de brefs articles qui vous donnent 3 lignes de codes pour modifier le format monétaire de votre pays.

Pourtant c’est loin d’être un détail. Bien sûr, si vous êtes chanceux et que vous vendez en France ou aux USA, vous ne devriez avoir aucun problème avec le format monétaire mis à disposition par Prestashop.

Mais si vous venez d’une région plus petite, moins couverte, vous remarquerez peut-être que le symbole monétaire n’est pas au bon endroit, que le séparateur de décimales est incorrect, etc.

C’est en tout cas plus que jamais le cas en Suisse, où le prix s’affiche par défaut sous la forme : 2 340,20 CHF alors que la convention voudrait qu’il s’affiche plutôt sous la forme CHF 2'340.20. En gros, Prestashop a faux sur toute la ligne.

Alors, comment gérer les formats monétaires dans Prestashop 1.7 ? Pour faire bref, rendez-vous dans le dossier d’installation de Prestashop, sous localization > CLDR > core > common > main et là, trouvez le fichier XML de votre langue (par exemple fr.xml). À l’intérieur, la balise <numbers> vous permet de modifier ces réglages pour votre boutique.

Mais avant de foncer tête baissée modifier ça, j’aimerais vous donner plus de détails sur la manière dont Prestashop gère ces informations, qu’elles autres formats sont modifiables au sein de ces fichiers et les limitations que j’ai découvertes.

Je reviendrai également plus en détail sur la manière de changer ces informations dans la version 1.7 ainsi que les précédentes.

Comment Prestashop 1.7 gère-t-il les formats monétaires ?

Il faut distinguer deux éléments importants dans la manière qu’à Prestashop de gérer les monnaies :

  • La monnaie en elle-même avec son nom, son symbole et son court s’il ne s’agit pas de la monnaie principale
  • Le formatage de la monnaie et les symboles utilisés (séparateur, décimales, etc.)

Gestion des monnaies / devises

Les monnaies peuvent-être gérées simplement dans le back-office en se rendant dans International > Localisation puis sur Devises dans les onglets en haut de la fenêtre.

Dans cette fenêtre vous pourrez ajouter / supprimer des devises. Et si vous vous rendez dans l’onglet Localisation, vous pourrez voir dans les paramètres :

Paramètres de langue et devise par défaut

Ces réglages sont en général définis lorsque vous choisissez le pays et la langue dans l’installation de Prestashop. Sur le principe, la langue et le pays par défaut devraient définir quel format monétaire est utilisé à l’affichage.

Pour le test, j’ai essayé de tout passer sur le pays Allemagne en langue allemande.

Le format allemand a bien été utilisé au lieu du format suisse. Donc le pays et la langue ont une incidence. Cependant, en voulant revenir au pays d’origine, la Suisse, en langue allemande Prestashop continue désormais de me prendre le format allemand.

Donc il subsiste de grosses confusions ici, d’autant qu’un peu plus bas dans cette fenêtre, se trouvent les réglages avancées permettant de donner les codes ISO de la langue et du pays / de la région :

Identifiant ISO de la langue et du pays, généré à l’installation de Prestashop

Ces informations ne sont pas mises à jour en fonction des choix que vous ferez dans les paramètres plus haut et vous devrez les modifier manuellement si vous le désirez.

Cependant ces paramètres avancés ne sont pas utilisés pour les formats monétaires et je ne sais pas exactement le rôle qu’ils jouent dans Prestashop.

J’aimerais pouvoir donner une explication plus claire de ce fonctionnement, mais en testant j’ai remarqué des inconsistances. Et si la langue définit le format utilisé (voir plus loin les fichiers XML de traductions concernés), il semblerait que le pays ait une incidence également, mais pas systématiquement…

Et ce n’est pas le dernier souci que j’ai rencontré !

La gestion des formats jusqu’à Prestashop 1.7.6.2

Disclaimer important concernant ce qui suivre : ci-dessous j’explique comment les cultures DEVRAIENT fonctionner dans Prestashop 1.7. À ce jour, la version stable 1.7.6.2 ne permet pas, en modifiant le fichier fr_CH.xml d’écraser les réglages de fr.xml.

Il est pour le moment obligatoire de modifier fr.xml afin de modifier ces réglages. fr_CH.xml ne semble pas pris en compte. J’ai publié un rapport de bug sur GitHub à ce sujet. Ils ont pu reproduire le problème, pour le moment c’est en attente de retour par un développeur. J’y reviendrai si les choses changent entre temps.

Dans le futur, ils ont en tout cas le projet d’implémenter un nouveau système pour gérer les formats de monnaies depuis le back-office. Il devrait arriver avec la version 1.7.7.

Le but est de passer de cette gestion des devises :

Le système de gestion des devises dans Prestashop 1.7.6.2
Le système de gestion des devises dans Prestashop 1.7.6.2

À celle-ci :

Le système de gestion des devises prévu dans les futures version de Prestashop
Une maquette de la future gestion des devises – Source

Je reviendrai donc mettre à jour cet article en fonction des avancées de ce projet. Mais sur ces captures, il semble toujours manquer les caractères de séparateur de milliers et de décimales, donc les techniques de cet article seront certainement encore d’actualité.

Gestion des formats monétaires

Le formatage de la monnaie, lui, indique de quelle manière un prix sera affiché aux visiteurs en fonction du type de monnaie choisi. Cette information est importante, car elle n’est pas spécifique à une monnaie (qui se résume en général à un symbole), mais elle est spécifique à un pays ou une région.

En plus des informations liées au formatage de la monnaie, Prestashop gère également dans ces fichiers tout ce qui concerne la culture, c’est-à-dire le pays ou la région actuelle. On trouvera donc dans les fichiers destinés à gérer ces informations, entre autres :

  • Le formatage des nombres
  • Les noms des jours de la semaine
  • Le formatage des dates
  • Etc.

Ces réglages, qui peuvent s’apparenter à des traductions, se trouvent tous dans le dossier d’installation de Prestashop sous :

\localization\CLDR\core\common\main

Dans ce dossier se trouve une quantité de fichiers XML gérés par les contributeurs de Prestashop. Pour chaque langue, on trouvera un fichier de base, par exemple :

fr.xml

Pour le français, qui contiendra l’ensemble des traductions de base, des formatages, etc. de la langue.

Puis des fichiers spécifiques à la région seront disponibles. La Suisse ayant l’abréviation CH, le fichier spécifique à la Suisse sera :

fr_CH.xml

Ce fichier héritera de fr.xml, mais son extension CH permettra d’appliquer des réglages différents pour la Suisse, tout en conservant les réglages de base du fichier fr.xml.

Pour illustrer, voici ces 3 informations dans 3 fichiers différents :

Fichier fr_CH.xml – Français pour la Suisse

  • Nombre : 2’420.40
  • Jours : Lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche
  • Date : 22.05.2020

Fichier de_CH.xml – Allemand pour la Suisse

  • Nombre : 2’420.40
  • Jours : Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag
  • Date : 22.05.2020

Fichier fr-FR – Français pour la France

  • Nombre : 2 420,40
  • Jours : Lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche
  • Date : 22/05/2020

Vous pouvez constater comment sont partagées ces informations en fonction du pays et de la langue. Comprendre le fonctionnement des cultures est important pour savoir comment Prestashop gère celles-ci dans le système.

Le problème de Prestashop, c’est qu’il n’offre pas dans le back-office de moyen d’aller personnaliser soi-même ces informations. Parce que le CMS estime que l’ensemble des fichiers de cultures livré avec la version correspond parfaitement à la culture en question et qu’il n’y a aucune raison de les modifier.

Seulement ce n’est pas toujours le cas comme je l’ai évoqué plus haut. Alors, comment modifier ces réglages ?

Modifier les formats monétaires

J’essaierai de suivre l’évolution des mises à jour de Prestashop en proposant d’expliquer comment gérer les formats monétaires dans les futures versions de Prestashop.

Mais voici déjà un retour sur les différentes manières de gérer les formats monétaires dans les versions actuelles ainsi que les versions 1.6 et 1.5 de Prestashop.

N’ayant pas toutes les versions de Prestashop sous la main, je n’ai pas testé chacune de ces solutions, cependant je compile ici les méthodes que j’ai trouvées sur le sujet.

Prestashop 1.7

Rendez-vous dans le dossier :

\localization\CLDR\core\common\main

Là vous trouverez toute une série de fichiers XML, avec à chaque fois une version du fichier pour la langue, par exemple fr.xml, et une version spécifique à la région, par exemple fr_CH.xml pour le français Suisse.

Comme indiqué plus haut dans mon disclaimer, pour le moment modifier les réglages d’un fichier de région, en tout cas à la version 1.7.6.2, ne semble pas changer le réglage dans la boutique. Il est nécessaire de faire la modification sur le fichier de langue global.

Donc si vous aimeriez changer le formatage monétaire pour la version française, modifiez le fichier suivant :

\localization\CLDR\core\common\main\fr.xml

Dans ce fichier, rendez-vous sous la balise <numbers> et là vous trouverez deux autres balises importantes pour l’affichage du prix :

<numbers>
		[...]
		<symbols numberSystem="latn">
			<decimal>,</decimal>
			<group> </group>
			<list>;</list>
			<percentSign>%</percentSign>
			<plusSign>+</plusSign>
			<minusSign>-</minusSign>
			<exponential>E</exponential>
			<superscriptingExponent>×</superscriptingExponent>
			<perMille>‰</perMille>
			<infinity>∞</infinity>
			<nan>NaN</nan>
			<timeSeparator draft="contributed">:</timeSeparator>
		</symbols>
		[...]
		<currencyFormats numberSystem="latn">
			<currencyFormatLength>
				<currencyFormat type="standard">
					<pattern>#,##0.00 ¤</pattern>
				</currencyFormat>
			        [...]

Pour commencer la balise <symbols> dans laquelle vous pourrez définir deux réglages indispensables :

  • <decimal> qui indiquera le séparateur de décimal à utiliser au formatage d’un nombre. Ici une virgule.
  • <group> qui indiquera quel caractère sera utilisé pour séparer les groupes lorsqu’un nombre arrive au millier. Ici il s’agit d’un espace.

Donc le montant 2520.30 sera formaté de cette manière avec ces réglages : 2 530,30. Pour le formater à la manière suisse, c’est à dire 2'530.30, voici les modifications à appliquer :

<symbols numberSystem="latn">
	<decimal>.</decimal>
	<group>'</group>

La deuxième balise importante au sein du code est la balise <currencyFormats> qui permet de définir le formatage monétaire et surtout le positionnement du symbole monétaire.

En passant ce format de :

<pattern>#,##0.00 ¤</pattern>

Qui donnerait toujours avec les réglages suisses : 2'530.30 CHF. Ou ¤ représente le symbole monétaire.

À ça :

<pattern>¤ #,##0.00</pattern>

On aboutira au résultat désiré : CHF 2'530.30.

Je n’entrerai pas dans le détail de tous les réglages, mais en fouillant un peu vous verrez que vous pourrez personnaliser pas mal d’informations pour votre boutique en modifiant ce fichier XML.

Dernière chose, très importante, une fois que vous avez apporté les modifications, il faut vider le cache de Prestashop. Que le cache soit activé ou non n’y change rien, ces fichiers XML de traductions devront être interprétés à nouveau et vider le cache est le seul moyen de forcer cette opération.

Prestashop 1.5/1.6

Pour ces versions de Prestashop, il existe des réglages supplémentaires au niveau des devises qui permettent de définir le format à utiliser. Problème, cette liste n’est pas très complète.

La gestion des devises dans Prestashop 1.6 – Source

Vous pouvez voir que sous Format de la devise, il existe différents positionnements pour la devise.

Seulement si ce réglage permet de déplacer le symbole monétaire avec ou sans espace avant ou après (grâce à l’option Espace un peu plus bas), il n’influe pas sur le réglage des décimales et séparateurs de milliers.

Voilà ce que j’ai trouvé à ce sujet, afin de permettre de créer un nouveau format dans cette liste. Pour se faire, il faudra taper directement dans le code de Prestashop en surchargeant le fichier Tools.php.

Dans le dossier :

\override\classes

Créer un nouveau fichier Tools.php. Dans ce fichier, commencez par déclarer la classe :

class Tools extends ToolsCore {
}

Rendez-vous dans le fichier Tools.php original, qui se trouve à la racine du dossier d’installation dans classes et localisez la méthode displayPrice. Copiez cette méthode et collez-là au sein de votre nouvelle classe créée dans le dossier override.

Ensuite dans cette méthode, vous pouvez changer un des formats définis dans le select (celui qui correspond à vos besoins en matière de positionnement de la devise). Ici en modifiant :

case 4: 
$ret = number_format($price, $c_decimals, '.', ',').$blank.$c_char;
break;

Vers :

case 4:
$ret = number_format($price, $c_decimals, '.', '\'').$blank.$c_char; 
break;

Vous pourrez formater un nombre sous la forme 2'420.30 en sélectionnant la quatrième option dans la liste (case 4).

7 commentaires

7 réflexions au sujet de “Comment gérer les formats monétaires dans Prestashop”

  1. Grand merci pour votre blog très complet et dont j’apprécie beaucoup le layout.
    Des articles de qualité et bien documentes. Une mine d’or.
    Faites-vous aussi des interventions en tant que dev sur des blogs de client ? Cela pourrait m’intéresser.

    Répondre
    • Bonjour Manutek et merci pour les compliments.
      Non je ne fais pas ce type d’interventions, j’ai déjà bien du mal à suivre le rythme sur mon blog et ma chaîne YouTube pour produire du contenu fréquemment 😉

      Répondre
  2. Un article intéressant. Est-il possible d’ajouter une balise span?
    je cherche à rendre plus petit les centimes (d’euro). Mais dans ma variable, je n’ai qu’un bloc, pas de span.
    Merci pour vos infos.

    Répondre

Laisser un commentaire

Télécharger cette super ressource gratuite !

Entrez votre adresse e-mail ci-dessous et recevez cette ressource dans votre boîte de réception dans quelques secondes.