From bf64cd117ea1577ce3ff1821fed5ca1f61b1937f Mon Sep 17 00:00:00 2001 From: Franck Allimant Date: Thu, 5 Dec 2013 18:08:36 +0100 Subject: [PATCH] Translation : Ordering existing translations by keys. This should ease the merge process when conflicts occur Fixed issue #123. Introduced NumberFormat::formatStandardNumber() Adding translation for Backoffice Adding translation for Backoffice fix close #131 fix updatePositionDownTest Translation : Ordering existing translations by keys. This should ease the merge process when conflicts occur Translation : Ordering existing translations by keys, This should ease the merge process when conflicts occur Translation : Ordering existing translations by keys, This should ease the merge process when conflicts occur --- .../Controller/Admin/HomeController.php | 2 + .../Controller/Admin/ProductController.php | 11 +- .../Admin/TranslationsController.php | 4 + core/lib/Thelia/Core/Event/TheliaEvents.php | 14 - .../Thelia/Core/Template/Loop/Attribute.php | 2 - .../Thelia/Core/Template/Loop/Template.php | 5 +- .../Thelia/Core/Template/TemplateHelper.php | 12 +- core/lib/Thelia/Model/Category.php | 2 + core/lib/Thelia/Model/Content.php | 2 + core/lib/Thelia/Model/Folder.php | 2 + core/lib/Thelia/Model/Product.php | 8 +- .../Thelia/Model/Tools/UrlRewritingTrait.php | 13 + core/lib/Thelia/Tests/Action/FolderTest.php | 11 +- core/lib/Thelia/Tools/NumberFormat.php | 16 + templates/backOffice/default/I18n/fr_FR.php | 405 ++++++++++-------- .../default/assets/less/thelia/thelia.less | 25 +- .../backOffice/default/translations.html | 14 + templates/email/default/I18n/en_US.php | 4 + templates/email/default/I18n/es_ES.php | 4 + templates/email/default/I18n/fr_FR.php | 4 + templates/email/default/I18n/it_IT.php | 4 + templates/frontOffice/default/product.html | 8 +- 22 files changed, 350 insertions(+), 222 deletions(-) create mode 100644 templates/email/default/I18n/en_US.php create mode 100644 templates/email/default/I18n/es_ES.php create mode 100644 templates/email/default/I18n/fr_FR.php create mode 100644 templates/email/default/I18n/it_IT.php diff --git a/core/lib/Thelia/Controller/Admin/HomeController.php b/core/lib/Thelia/Controller/Admin/HomeController.php index e8711f97d..0fcee29ca 100644 --- a/core/lib/Thelia/Controller/Admin/HomeController.php +++ b/core/lib/Thelia/Controller/Admin/HomeController.php @@ -41,6 +41,8 @@ class HomeController extends BaseAdminController public function loadStatsAjaxAction() { + if (null !== $response = $this->checkAuth(self::RESOURCE_CODE, array(), AccessManager::VIEW)) return $response; + $data = new \stdClass(); $data->title = "Stats on " . $this->getRequest()->query->get('month', date('m')) . "/" . $this->getRequest()->query->get('year', date('Y')); diff --git a/core/lib/Thelia/Controller/Admin/ProductController.php b/core/lib/Thelia/Controller/Admin/ProductController.php index d415317c0..eca9849e3 100644 --- a/core/lib/Thelia/Controller/Admin/ProductController.php +++ b/core/lib/Thelia/Controller/Admin/ProductController.php @@ -1201,10 +1201,10 @@ class ProductController extends AbstractCrudController } return new JsonResponse(array( - 'price_with_tax' => NumberFormat::getInstance($this->getRequest())->format($price_with_tax, null, '.'), - 'price_without_tax' => NumberFormat::getInstance($this->getRequest())->format($price_without_tax, null, '.'), - 'sale_price_with_tax' => NumberFormat::getInstance($this->getRequest())->format($sale_price_with_tax, null, '.'), - 'sale_price_without_tax' => NumberFormat::getInstance($this->getRequest())->format($sale_price_without_tax, null, '.') + 'price_with_tax' => NumberFormat::getInstance($this->getRequest())->formatStandardNumber($price_with_tax), + 'price_without_tax' => NumberFormat::getInstance($this->getRequest())->formatStandardNumber($price_without_tax), + 'sale_price_with_tax' => NumberFormat::getInstance($this->getRequest())->formatStandardNumber($sale_price_with_tax), + 'sale_price_without_tax' => NumberFormat::getInstance($this->getRequest())->formatStandardNumber($sale_price_without_tax) )); } @@ -1236,7 +1236,8 @@ class ProductController extends AbstractCrudController if ($convert != 0) { $return_price = $prix * Currency::getDefaultCurrency()->getRate(); } + // Format the number using '.', to perform further calculation - return NumberFormat::getInstance($this->getRequest())->format($return_price, null, '.'); + return NumberFormat::getInstance($this->getRequest())->formatStandardNumber($return_price); } } diff --git a/core/lib/Thelia/Controller/Admin/TranslationsController.php b/core/lib/Thelia/Controller/Admin/TranslationsController.php index 7bea68e6f..cb7c3f072 100644 --- a/core/lib/Thelia/Controller/Admin/TranslationsController.php +++ b/core/lib/Thelia/Controller/Admin/TranslationsController.php @@ -94,6 +94,10 @@ class TranslationsController extends BaseAdminController case 'pf' : $template = new TemplateDefinition($item_id, TemplateDefinition::PDF); break; + + case 'ma' : + $template = new TemplateDefinition($item_id, TemplateDefinition::EMAIL); + break; } if ($template) { diff --git a/core/lib/Thelia/Core/Event/TheliaEvents.php b/core/lib/Thelia/Core/Event/TheliaEvents.php index 4b929409c..9ffd5c795 100755 --- a/core/lib/Thelia/Core/Event/TheliaEvents.php +++ b/core/lib/Thelia/Core/Event/TheliaEvents.php @@ -38,20 +38,6 @@ final class TheliaEvents */ const BOOT = "thelia.boot"; - /** - * ACTION event - * - * Sent if no action are already present in Thelia action process ( see Thelia\Routing\Matcher\ActionMatcher) - */ - const ACTION = "thelia.action"; - - /** - * INCLUDE event - * - * Sent before starting thelia inclusion - */ - const INCLUSION = "thelia.include"; - /** * Sent before the logout of the customer. */ diff --git a/core/lib/Thelia/Core/Template/Loop/Attribute.php b/core/lib/Thelia/Core/Template/Loop/Attribute.php index 2225ced66..66964c8b8 100755 --- a/core/lib/Thelia/Core/Template/Loop/Attribute.php +++ b/core/lib/Thelia/Core/Template/Loop/Attribute.php @@ -181,10 +181,8 @@ class Attribute extends BaseI18nLoop implements PropelSearchLoopInterface break; } } -echo "s=".$search->toString(); return $search; - } public function parseResults(LoopResult $loopResult) diff --git a/core/lib/Thelia/Core/Template/Loop/Template.php b/core/lib/Thelia/Core/Template/Loop/Template.php index c5b6a95f3..fc9505449 100644 --- a/core/lib/Thelia/Core/Template/Loop/Template.php +++ b/core/lib/Thelia/Core/Template/Loop/Template.php @@ -64,7 +64,8 @@ class Template extends BaseLoop implements ArraySearchLoopInterface new Type\EnumListType(array( 'front-office', 'back-office', - 'pdf' + 'pdf', + 'email' )) ) ) @@ -80,6 +81,8 @@ class Template extends BaseLoop implements ArraySearchLoopInterface $templateType = TemplateDefinition::BACK_OFFICE; else if ($type == 'pdf') $templateType = TemplateDefinition::PDF; + else if ($type == 'email') + $templateType = TemplateDefinition::EMAIL; return TemplateHelper::getInstance()->getList($templateType); } diff --git a/core/lib/Thelia/Core/Template/TemplateHelper.php b/core/lib/Thelia/Core/Template/TemplateHelper.php index 9b93aae96..acaf1117e 100644 --- a/core/lib/Thelia/Core/Template/TemplateHelper.php +++ b/core/lib/Thelia/Core/Template/TemplateHelper.php @@ -240,20 +240,18 @@ class TemplateHelper fwrite($fp, '<' . "?php\n\n"); fwrite($fp, "return array(\n"); - $idx = 0; + // Sort keys alphabetically while keeping index + asort($texts); - foreach($texts as $text) - { + foreach ($texts as $key => $text) { // Write only defined (not empty) translations - if (! empty($translations[$idx])) { + if (! empty($translations[$key])) { $text = str_replace("'", "\'", $text); - $translation = str_replace("'", "\'", $translations[$idx]); + $translation = str_replace("'", "\'", $translations[$key]); fwrite($fp, sprintf("\t'%s' => '%s',\n", $text, $translation)); } - - $idx++; } fwrite($fp, ");\n"); diff --git a/core/lib/Thelia/Model/Category.php b/core/lib/Thelia/Model/Category.php index 067c54fc1..8b8b53e4f 100755 --- a/core/lib/Thelia/Model/Category.php +++ b/core/lib/Thelia/Model/Category.php @@ -115,6 +115,8 @@ class Category extends BaseCategory */ public function postDelete(ConnectionInterface $con = null) { + $this->markRewritenUrlObsolete(); + $this->dispatchEvent(TheliaEvents::AFTER_DELETECATEGORY, new CategoryEvent($this)); } } \ No newline at end of file diff --git a/core/lib/Thelia/Model/Content.php b/core/lib/Thelia/Model/Content.php index 6417c8b56..3a002e6d1 100755 --- a/core/lib/Thelia/Model/Content.php +++ b/core/lib/Thelia/Model/Content.php @@ -148,6 +148,8 @@ class Content extends BaseContent public function postDelete(ConnectionInterface $con = null) { + $this->markRewritenUrlObsolete(); + $this->dispatchEvent(TheliaEvents::AFTER_DELETECONTENT, new ContentEvent($this)); } } diff --git a/core/lib/Thelia/Model/Folder.php b/core/lib/Thelia/Model/Folder.php index 4b32e7591..9249c94e2 100755 --- a/core/lib/Thelia/Model/Folder.php +++ b/core/lib/Thelia/Model/Folder.php @@ -100,6 +100,8 @@ class Folder extends BaseFolder public function postDelete(ConnectionInterface $con = null) { + $this->markRewritenUrlObsolete(); + $this->dispatchEvent(TheliaEvents::AFTER_DELETEFOLDER, new FolderEvent($this)); } } diff --git a/core/lib/Thelia/Model/Product.php b/core/lib/Thelia/Model/Product.php index 3855c46c1..12b98c890 100755 --- a/core/lib/Thelia/Model/Product.php +++ b/core/lib/Thelia/Model/Product.php @@ -263,12 +263,8 @@ class Product extends BaseProduct */ public function postDelete(ConnectionInterface $con = null) { - RewritingUrlQuery::create() - ->filterByView($this->getRewrittenUrlViewName()) - ->filterByViewId($this->getId()) - ->update(array( - "View" => ConfigQuery::getObsoleteRewrittenUrlView() - )); + $this->markRewritenUrlObsolete(); + $this->dispatchEvent(TheliaEvents::AFTER_DELETEPRODUCT, new ProductEvent($this)); } } diff --git a/core/lib/Thelia/Model/Tools/UrlRewritingTrait.php b/core/lib/Thelia/Model/Tools/UrlRewritingTrait.php index d16ceaf5f..bcbbb9afd 100644 --- a/core/lib/Thelia/Model/Tools/UrlRewritingTrait.php +++ b/core/lib/Thelia/Model/Tools/UrlRewritingTrait.php @@ -29,6 +29,7 @@ use Thelia\Exception\UrlRewritingException; use Thelia\Model\RewritingUrlQuery; use Thelia\Model\RewritingUrl; use Thelia\Tools\URL; +use Thelia\Model\ConfigQuery; /** * A trait for managing Rewritten URLs from model classes */ @@ -136,6 +137,18 @@ trait UrlRewritingTrait { return $url; } + /** + * Mark the current URL as obseolete + */ + public function markRewritenUrlObsolete() { + RewritingUrlQuery::create() + ->filterByView($this->getRewrittenUrlViewName()) + ->filterByViewId($this->getId()) + ->update(array( + "View" => ConfigQuery::getObsoleteRewrittenUrlView() + )); + } + /** * Set the rewritten URL for the given locale * diff --git a/core/lib/Thelia/Tests/Action/FolderTest.php b/core/lib/Thelia/Tests/Action/FolderTest.php index 7ef88aa0d..c433411ee 100644 --- a/core/lib/Thelia/Tests/Action/FolderTest.php +++ b/core/lib/Thelia/Tests/Action/FolderTest.php @@ -162,14 +162,19 @@ class FolderTest extends BaseAction public function testUpdatePositionDown() { - $folder = FolderQuery::create() - ->filterByPosition(1) + $nextFolder = FolderQuery::create() + ->filterByPosition(2) ->findOne(); - if (null === $folder) { + if (null === $nextFolder) { $this->fail('use fixtures before launching test, there is no folder in database'); } + $folder = FolderQuery::create() + ->filterByPosition(1) + ->filterByParent($nextFolder->getParent()) + ->findOne(); + $newPosition = $folder->getPosition()+1; $event = new UpdatePositionEvent($folder->getId(), UpdatePositionEvent::POSITION_DOWN); diff --git a/core/lib/Thelia/Tools/NumberFormat.php b/core/lib/Thelia/Tools/NumberFormat.php index ae25404d7..f3e69129b 100644 --- a/core/lib/Thelia/Tools/NumberFormat.php +++ b/core/lib/Thelia/Tools/NumberFormat.php @@ -39,6 +39,22 @@ class NumberFormat return new NumberFormat($request); } + /** + * Get a standard number, with '.' as decimal point and no thousands separator + * so that this number can be used to perform calculations. + * + * @param float $number the number + * @param string $decimals number of decimal figures + */ + public function formatStandardNumber($number, $decimals = null) { + + $lang = $this->request->getSession()->getLang(); + + if ($decimals == null) $decimals = $lang->getDecimals(); + + return number_format($number, $decimals, '.', ''); + } + public function format($number, $decimals = null, $decPoint = null, $thousandsSep = null) { $lang = $this->request->getSession()->getLang(); diff --git a/templates/backOffice/default/I18n/fr_FR.php b/templates/backOffice/default/I18n/fr_FR.php index a51ffc218..c40d35dd9 100755 --- a/templates/backOffice/default/I18n/fr_FR.php +++ b/templates/backOffice/default/I18n/fr_FR.php @@ -36,8 +36,8 @@ return array( 'Home' => 'Accueil', 'Configuration' => 'Configuration', 'Mailing system' => 'Envoi des e-mails', - 'Configuration mailing system' => 'Configuration du système d\'envoie de mail', - 'Enable remote SMTP use : ' => 'Activer l\'utilisation d\'un serveur SMTP distant', + 'Configuration mailing system' => 'Configuration du système de mailing', + 'Enable remote SMTP use : ' => 'Activer l\'utilisation d\'un serveur SMTP distant:', 'Host :' => 'Host', 'Host' => 'Host', 'Port :' => 'Port', @@ -55,16 +55,18 @@ return array( 'Source IP' => 'IP source', 'Edit a currency' => 'Modifier une devise', 'Currencies' => 'Monnaie', - 'Editing currency "%name"' => 'En cours d\'édition de la devise "%name"', - 'Edit currency "%name"' => 'Modifier la devise "%name"', + 'Editing currency "%name"' => 'En cours de modification de la devise "%name"', + 'Edit currency "%name"' => 'Modification de la devise "%name"', 'Currency name' => 'Nom de la devise', - 'Currency ISO 4217 Code' => 'Devise code ISO 4217', + 'Currency ISO 4217 Code' => 'Code ISO 4217 de la devise', 'Code' => 'Code', 'More information about ISO 4217' => 'Plus d\'information à propos de l\'ISO 4217', - 'Currency symbol' => 'Symbole de la devise', + 'Currency symbol' => 'Symbole de la monaie', 'Symbol' => 'Symbole', - 'The symbol, such as $, £, €...' => 'Le symbole (ex: $, £, €...)', + 'The symbol, such as $, £, €...' => 'Le symbole, tel que $, £, €...', + 'Rate from Euro' => 'Taux à partir de l\'Euro', 'Rate' => 'Taux', + 'Sorry, currency ID=%id was not found.' => 'Veuillez nous excuser, la devise ID=%id n\'a pas été trouvée', 'Thelia System Variables' => 'Variables Thelia', 'System variables' => 'Gestion des variables', 'Thelia system variables' => 'Variables Thelia', @@ -88,7 +90,7 @@ return array( 'Delete a variable' => 'Supprimer une variable', 'Do you really want to delete this variable ?' => 'Voulez-vous vraiment supprimer cette variable ?', 'Countries' => 'Pays', - 'Add a new country' => 'Ajouter un pays', + 'Add a new country' => 'Ajouter un nouveau pays', 'Default' => 'Défaut', 'Shop' => 'Magasin', 'N° ISO' => 'N° ISO', @@ -96,7 +98,7 @@ return array( 'Actions' => 'Actions', 'Change this country' => 'Modifier ce pays', 'Delete this country' => 'Supprimer ce pays', - 'No country has been created yet. Click the + button to create one.' => 'Aucun pays n\'a encore été créé. Cliquez sur le bouton + pour en créer un.', + 'No country has been created yet. Click the + button to create one.' => 'Aucun pays n\'a encore été créé. Cliquez sur le bouton + pour en créer un', 'Country title' => 'Titre du pays', 'Alpha code 2' => 'Code alpha 2', 'Alpha code 3' => 'Code alpha 3', @@ -106,6 +108,7 @@ return array( 'Delete country' => 'Supprimer le pays', 'Do you really want to delete this country ?' => 'Voulez-vous vraiment supprimer ce pays ?', 'Error' => 'Erreur', + 'Impossible to change default country. Please contact your administrator or try later' => 'Impossible de modifier le pays par défaut. Veuillez contacter votre administrateur ou réessayer plus tard', 'And' => 'Et', 'Edit' => 'Editer', 'Delete' => 'Supprimer', @@ -131,31 +134,44 @@ return array( 'Long description :' => 'Description longue', 'long description' => 'description longue', 'Save your modifications' => 'Enregistrer les modifications', - 'Please save your Coupon in oder to affect it some conditions' => 'Veuillez sauvegarder votre code promo afin de lui affecter des conditions', + 'Please save your Coupon in oder to affect it some conditions' => 'Veuillez sauvegarder votre code promo afin de pouvoir lui affecter des conditions', 'Conditions' => 'Conditions', 'Save this condition' => 'Enregistrer cette condition', - 'Condition type :' => 'Type de condition:', + 'Condition type :' => 'Type de la condition:', 'Or' => 'Ou', 'Condition\'s category :' => 'Type de condition', 'Please select a condition category' => 'Merci d\'entrer le type de condition', 'Operator :' => 'Opérateur:', + 'Edit a mailing template' => 'Modifier un template de mailing', 'Mailing templates' => 'Template e-mail', + 'Editing mailing template "%name"' => 'En cours de modification du template de mailing "%name"', + 'Edit mailing template "%name"' => 'Modifier le template de mailing "%name"', 'Title' => 'Civilité', 'Subject' => 'Sujet', + 'HTML version of this message' => 'Version HTML de ce message', + 'Use default layout' => 'Utiliser le layout par défaut', + 'Text version of this message' => 'Version texte de ce message', + 'Use Text message defined below' => 'Utiliser le message Text défini ci-dessous', + 'The mailing template in text-only format.' => 'Le template de mailing en format text-only.', + 'Sorry, message ID=%id was not found.' => 'Veuillez nous excuser, le message ID=%id n\'a pas été trouvé', 'Edit a tax rule' => 'Modifier une règle de taxe', 'Taxes rules' => 'Règles de taxes', - 'Editing tax rule' => 'En cours de modification d\'une règle de taxe', + 'Editing tax rule' => 'En cours de modification de la règle de taxe', 'Description' => 'Description', 'Taxes' => 'Taxes', - 'The detailed description.' => 'Description détaillée', + 'The detailed description.' => 'La description détaillée.', 'Manage taxes' => 'Gérer les taxes', 'Choose a country' => 'Choisissez un pays', - 'Countries that have the same tax rule' => 'Pays ayant les mêmes règles de taxe', + 'Countries that have the same tax rule' => 'Pays qui ont les même règles de taxe', 'NONE' => 'AUCUN', + 'Manage the tax rule taxes appliance order' => 'Gérer les règles de taxe et leur ordre d\'application', 'Add tax to this group' => 'Ajouter une taxe à ce groupe', + 'Drop tax here to create a tax group' => 'Déposer une taxe ici afin de créer un groupe de taxe', 'Apply' => 'Appliquer', - 'uncheck all' => 'Tous décocher', - 'Edit tax rule taxes' => 'Modifier une règle de taxe', + 'Drop tax here to delete from group' => 'Déposer une taxe ici afin de la supprimer du groupe', + 'uncheck all' => 'tout décocher', + 'Update tax rule taxes' => 'Mettre à jour les taxes de la règle de taxe', + 'Edit tax rule taxes' => 'Modifier les taxes de la règle de taxe', 'Coupons' => 'Codes Promo', 'Coupon' => 'Code promo', 'Browse' => 'Parcourir', @@ -172,16 +188,17 @@ return array( 'Edit content %title' => 'Modifier le contenu %title', 'Edit previous content' => 'Modifier le contenu précèdent', 'Preview folder page' => 'Aperçu de la page dossier', - 'Edit next content' => 'Modifier le prochain contenu', + 'Edit next content' => 'Modifier le contenu suivant', 'General description' => 'Description générale', 'Associations' => 'Associations', 'Images' => 'Images', 'Documents' => 'Documents', 'Modules' => 'Modules', - 'Rewritten URL' => 'URL réécrite', + 'Rewritten URL' => 'URL réécrites', 'Top level' => 'Niveau racine', 'Visibility' => 'Visibilité', - 'Remove associated folder' => 'Supprimer le dossier associé', + 'Remove associated folder' => 'Enlever le dossier associé', + 'Do you really want to remove the content from this folder ?' => 'Voulez-vous vraiment enlever le contenu de ce dossier ?', 'Thelia Back Office' => 'Thelia Back Office', 'Version %ver' => 'Version %ver', 'View site' => 'Voir le site', @@ -205,8 +222,8 @@ return array( 'Last name' => 'Nom', 'First name' => 'Prénom', 'Registration date' => 'Date d\'inscription', - 'Date of last order' => 'Date du dernier achat', - 'Last order amount' => 'Montant du dernier achat', + 'Date of last order' => 'Date de la dernière commande', + 'Last order amount' => 'Montant de la dernière commande', 'Edit this customer' => 'Modifier ce client', 'Send a mail to this customer' => 'Contacter ce client par mail', 'Delete this customer and all his orders' => 'Supprimer ce client et toutes ses commandes', @@ -224,27 +241,41 @@ return array( 'Do you really want to delete this customer ?' => 'Voulez-vous supprimer ce client ? ', 'Edit a profile' => 'Modifier un profile', 'Profiles' => 'Profiles', - 'Editing profile' => 'En cours d\'édition du profile', + 'Editing profile' => 'En cours du profile', + 'Resource access rights' => 'Droits d\'accès aux ressources', + 'Module access rights' => 'Droits d\'accès aux modules', 'Postscriptum' => 'Post-scriptum', + 'Manage resource rights' => 'Gérer les droits d\'accès aux ressources', 'Save' => ' Enregistrer', - 'Resource' => 'Ressource', + 'Resource' => 'Ressources', 'Rights' => 'Droits', 'View' => 'Voir', 'Create' => 'Créer', 'Update' => 'Mettre à jour', - 'Manage module rights' => 'Gérer les droits des modules', + 'Manage module rights' => 'Gestion des accès aux modules', 'Module' => 'Module', + 'Edit a shipping configuration' => 'Modifier une configuration de livraison', 'Shipping configuration' => 'Configuration du transport', + 'Editing shipping configuration "%name"' => 'En cours de modification de la configuration de livraison "%name"', + 'Edit shipping configuration %title' => 'Modifier la configuration de livraison %title', 'Country' => 'Pays', 'Add this country' => 'Ajouter ce pays', - 'Remove country' => 'Supprimer le pays', - 'Do you really want to remove this country ?' => 'Voulez-vous vraiment supprimer ce pays ?', + 'No area defined with this id' => 'Pas de zone définie avec cette id', + 'Remove country' => 'Enlever ce pays', + 'Do you really want to remove this country ?' => 'Voulez-vous vraiment enlever ce pays ?', 'Edit product' => 'Modifier le produit', + 'Edit product %title' => 'Modifier le produit %title', 'Edit previous product' => 'Modifier le produit précèdent', + 'Preview product page' => 'Aperçu de la page produit', 'Edit next product' => 'Modifier le produit suivant', 'General' => 'Général', 'Details' => 'Détails', - 'Files manager' => 'Gestionnaire de fichier', + 'Attributes & Features' => 'Déclinaisons & caractéristiques', + 'Please wait, loading' => 'Veuillez patienter, chargement', + 'Files manager' => 'Gestionnaire de fichiers', + 'Failed to get converted prices. Please try again.' => 'Erreur lors de la récupération des prix convertis. Veuillez réessayer.', + 'Failed to get prices. Please try again.' => 'Erreur lors de la récupération des prix. Veuillez réessayer.', + 'Existing combinations will be deleted. Do you want to continue ?' => 'Les combinaisons existantes seront supprimées. Voulez-vous continuer ?', 'Thelia configuration' => 'Configuration thelia', 'Product catalog configuration' => 'Configuration du catalogue produit', 'Product templates' => 'Template produit', @@ -259,48 +290,122 @@ return array( 'Translations' => 'Traductions', 'Administration logs' => 'Gestion des logs', 'System logs' => 'Journal des logs', - 'Add a new folder' => 'Ajouter une nouveau dossier', + 'Folders in %fold' => 'Dossier dans %fold', + 'Top level folders' => 'Dossiers à la racine', + 'Add a new folder' => 'Ajouter un nouveau dossier', 'ID' => 'ID', 'Folder title' => 'Titre du dossier', 'Online' => 'En ligne', 'Position' => 'Position', + 'Browse this folder' => 'Parcourir ce dossier', 'Edit this folder' => 'Modifier ce dossier', + 'Delete this folder and all its contents' => 'Supprimer ce dossier et tous ces contenus', + 'This folder has no sub-folders. To create a new one, click the + button above.' => 'Ce dossier n\'a pas de sous-dossiers. Afin de créer un nouveau, cliquez sur le bouton + ci-dessus.', + 'This folder has no sub-folders.' => 'Ce dossier n\'a pas de sous-dossiers.', + 'Contents in %fold' => 'Contenus dans %fold', + 'Top level Contents' => 'Contenus racine', 'Add a new content' => 'Ajouter un nouveau contenu', 'Content title' => 'Titre du contenu', 'Edit this content' => 'Modifier ce contenu', 'Delete this content' => 'Supprimer ce contenu', - 'Create a new folder' => 'Ajouter un nouveau dossier', + 'This folder doesn\'t contains any contents. To add a new content, click the + button above.' => 'Ce dossier ne contient pas de contenu. Pour ajouter un nouveau contenu, cliquez sur le bouton + ci-dessus.', + 'Create a new folder' => 'Créer un nouveau dossier', 'Create this folder' => 'Créer ce dossier', - 'Delete folder' => 'Supprimer le dossier', + 'Enter here the content name in the default language (%title)' => 'Entrez ici le nom du contenu dans le language par défaut (%title)', + 'Create a new content' => 'Créer un nouveau contenu', + 'Create this content' => 'Créer ce contenu', + 'Delete folder' => 'Supprimer ce contenu', + 'Do you really want to delete this folder and all its content ?' => 'Voulez-vous vraiment supprimer ce dossier et tous ses contenus ?', 'Delete content' => 'Supprimer le contenu', - 'Thelia Shipping zones' => 'Zones de livraison Thelia', - 'Change this shipping zone' => 'Changer cette zone de livraison', + 'Do you really want to delete this content ?' => 'Voulez-vous vraiment supprimer ce contenu ?', + 'Enter new folder position' => 'Modifier la position du dossier', + 'Enter new content position' => 'Modifier la position du contenu', + 'Thelia Shipping zones' => 'Zone de livraison de Thelia', + 'Change this shipping zone' => 'Modifier cette zone de livraison', + 'Edit a feature' => 'Modifier une caractéristique', + 'Features' => 'Caractéristiques', + 'Editing feature "%name"' => 'En cours de modification de la caractéristique "%name"', + 'Edit feature "%name"' => 'Modifier la caractéristique "%name"', + 'Feature information' => 'Informations sur la caractéristique', + 'Feature values' => 'Valeurs de la caractéristique', 'Delete this value' => 'Supprimer cette valeur', + 'No value has been created yet. Click the + button to create one.' => 'Aucune valeur n\'a encore été crée. Cliquez sur le bouton + pour en créer une.', + 'Sorry, feature ID=%id was not found.' => 'Veuillez nous excuser, la caractéristique ID=%id n\'a pas été trouvée', + 'Feature title' => 'Titre de la caractéristique', + 'Create a new feature value' => 'Créer une nouvelle valeur de caractéristique', 'Create this value' => 'Créer cette valeur', - 'Remove from all product templates' => 'Supprimer de tous les templates produits', + 'Delete feature value' => 'Supprimer la valeur de la caractéristique', + 'Do you really want to delete this feature value ?' => 'Voulez-vous vraiment supprimer cette valeur de caractéristique ?', + 'Enter new value position' => 'Entrez une nouvelle position', + 'Thelia Mailing Templates' => 'Template de Mailing Thelia', + 'Thelia mailing templates' => 'Template de mailing Thelia', + 'Add a new mailing template' => 'Ajouter un nouveau template de mailing', + 'Change this mailing template' => 'Modifier ce template de mailing', + 'Delete this mailing template' => 'Supprimer ce template de mailing', + 'This mailing template could not be changed.' => 'Ce template de mailing ne peut être modifié.', + 'Mailing template name' => 'Nom du template de mailing', + 'Mailing template purpose' => 'Objectif du template de mailing', + 'Enter here the mailing template purpose in the default language (%title)' => 'Entrez ici l\'objectif du template de mailing dans le language par défaut (%title)', + 'Create a new mailing template' => 'Créer un nouveau template de mailing', + 'Create this mailing template' => 'Créer ce template de mailing', + 'Delete mailing template' => 'Supprimer ce template de mailing', + 'Do you really want to delete this mailing template ?' => 'Voulez-vous vraiment supprimer ce template de mailing ?', + 'Thelia Product Features' => 'Caractéristiques produit de Thelia', + 'Thelia product features' => 'caractéristiques produit de Thelia', + 'Add a new product feature' => 'Ajouter une nouvelle caractéristique produit', + 'Change this feature' => 'Modifier cette caractéristique', + 'Remove this feature from all product templates' => 'Enlever cette caractéristique de tous les templates produit', + 'Add this feature to all product templates' => 'Ajouter cette caractéristique à tous les templates produit', + 'Change this product feature' => 'Modifier cette caractéristique produit', + 'Delete this product feature' => 'Supprimer cette caractéristique produit', + 'Create a new feature' => 'Créer une nouvelle caractéristique', + 'Create this feature' => 'Créer cette caractéristique', + 'Delete feature' => 'Supprimer cette caractéristique', + 'Do you really want to delete this feature ? It will be removed from all product templates.' => 'Voulez-vous vraiment supprimer cette caractéristique ? Elle sera supprimée de tous les templates produit', + 'Add to all product templates' => 'Ajouter à tous les templates produit', + 'Do you really want to add this feature to all product templates ?' => 'Voulez-vous vraiment ajouter cette caractéristique à tous les templates produit ?', + 'Remove from all product templates' => 'Enlever de tous les templates produit', + 'Do you really want to remove this feature from all product templates ? You\'ll loose all product related data for this feature.' => 'Voulez-vous vraiment enlever cette caractéristique de tous les templates produit ? Vous allez perdre toutes les informations des produits liées à cette caractéristique. ', + 'Enter new feature position' => 'Modifier la position de la caractéristique', 'Install a new module' => 'Installer un nouveau module', - 'Classic modules' => 'Module classique', - 'Delivery modules' => 'Module de livraison', - 'Payment modules' => 'Module de paiement', + 'Classic modules' => 'Modules classic', + 'Delivery modules' => 'Modules de livraison', + 'Payment modules' => 'Modules de payment', 'Delete a module' => 'Supprimer un module', 'Do you really want to delete this module ?' => 'Voulez-vous vraiment supprimer ce module ?', - 'An error occured' => 'Une erreur est apparue', - 'Edit an attribute' => 'Modifier un attribut', - 'Attributes' => 'Attributs', - 'Attribute values' => 'Valeur des attributs', - 'Attribute title' => 'Titre de l\'attribut', + 'An error occured' => 'Une erreur est survenue', + 'Edit an attribute' => 'Modifier une déclinaison', + 'Attributes' => 'Déclinaisons', + 'Editing attribute "%name"' => 'En cours de modification de la déclinaison "%name"', + 'Edit attribute "%name"' => 'Modifier la déclinaison "%name"', + 'Attribute information' => 'Information sur la déclinaison', + 'Attribute values' => 'Valeurs de la déclinaison', + 'Enter here all possible attribute values.' => 'Entrez ici toutes les valeurs de déclinaison possible.', + 'Sorry, attribute ID=%id was not found.' => 'Veuillez nous excuser, la déclinaison ID=%id n\'a pas été trouvée', + 'Attribute title' => 'Titre de la déclinaison', + 'Enter here the value in the current edit language (%title)' => 'Entrez ici la valeur dans le langue courante (%title)', + 'Create a new attribute value' => 'Créer une nouvelle valeur de déclinaison', + 'Delete attribute value' => 'Supprimer une valeur de déclinaison', + 'Do you really want to delete this attribute value ?' => 'Voulez-vous vraiment supprimer cette déclinaison ?', 'Edit a tax' => 'Modifier une taxe', + 'Editing tax' => 'En cours de modification de la taxe', + 'Tax created on %date_create. Last modification: %date_change' => 'Taxe créée le %date_create. Dernière modification: %date_change', 'Update rates' => 'Mettre à jour les taux', 'Add a new currency' => 'Ajouter une devise', 'ISO 4217 Code' => 'Code ISO 4217', - 'Rate in €' => 'Taux en € ', + 'Rate in €' => 'Taux en €', 'Change this currency' => 'Modifier cette devise', 'Delete this currency' => 'Supprimer cette devise', + 'No currency has been created yet. Click the + button to create one.' => 'Aucune devise n\'a encore été crée. Cliquez sur le bouton + pour en créer une.', + 'Enter here the currency name in the default language (%title)' => 'Entrez ici le nom de la devise dans la langue par défaut (%title)', 'ISO 4217 code' => 'Code ISO 4217', 'Currency rate' => 'Taux de la devise', + 'The rate from Euro (Price in Euro * rate = Price in this currency)' => 'Le taux à partir de l\'Euro (Prix en Euro * taux = Prix dans la devise)', 'Create a new currency' => 'Créer une nouvelle devise', 'Create this currency' => 'Créer cette devise', - 'Delete currency' => 'Supprimer la devise', + 'Delete currency' => 'Supprimer cette devise', + 'Do you really want to delete this currency ?' => 'Voulez-vous vraiment supprimer cette devise ?', + 'Enter new currency position' => 'Modifier la position de la devise', 'Edit an order' => 'Editer une commande', 'Ordered products' => 'Produits commandés', 'Invoice and Delivery' => 'Livraison et facturation', @@ -337,64 +442,65 @@ return array( 'Edit order address' => 'Editer l\'adresse de commande ', 'Confirm changes' => 'Valider les modifications', 'System Logs' => 'Logs système', - 'System Logs configuration' => 'Configuration logs système', + 'System Logs configuration' => 'Configuration du système de logs', 'General configuration' => 'Configuration générale', - 'Log lines format' => 'Format des lignes des logs', + 'Messages which have a level greater or equal to the selected level will be added to the log destinations. ' => 'Messages qui ont un niveau supérieur ou égale au niveau sélectionné seront ajoutés au logs.', + 'Log lines format' => 'Format de la ligne de log', + 'Log lines header format. You may use the following variables: ' => 'Format de l\'en-tête des lignes de log. Vous pouvez utiliser les variables suivantes:', + 'Message level' => 'Niveau du message', + 'date in yyyy-mm-dd format' => 'date au format yyyy-mm-dd', + 'hour in hh:mm:ss format' => 'date au format hh:mm:ss', 'Yes' => 'Oui', 'No' => 'Non', + 'If yes, redirections through Redirect::exec() will be displayed as links' => 'Si oui, les redirections seront faites via Redirect::exec() seront affichées comme liens', 'File names' => 'Noms du fichier', - 'IP Addresses' => 'Adresse IP', + 'Your current IP address is %ip' => 'Votre adresse IP courante est %ip', 'Destinations' => 'Destinations', + 'Activate this log destination' => 'Activer cette destination de log', + 'Thelia Product Templates' => 'Templates produit Thelia', + 'Thelia product templates' => 'templates produit Thelia', + 'Add a new product template' => 'Ajouter un nouveau template produit', + 'Change this template' => 'Modifier ce template', + 'Change this product template' => 'Modifier ce template produit', + 'Delete this product template' => 'Supprimer ce template produit', + 'No product template has been created yet. Click the + button to create one.' => 'Aucun template produit n\'a encore été créé. Cliquez sur le bouton + pour en créer une.', 'Template title' => 'Titre du template', - 'Delete template' => 'Supprimer le template', - 'Do you really want to delete this template ? It will be removed from all products.' => 'Voulez-vous vraiment supprimer ce template ? Il sera supprimer de tous les produits', + 'Enter here the template name in the default language (%title)' => 'Entrez ici le nom du template dans la langue par défaut (%title)', + 'Create a new product template' => 'Créer un nouveau template produit', + 'Create this product template' => 'Créer ce template produit', + 'Delete template' => 'Supprimer ce template produit', + 'Do you really want to delete this template ? It will be removed from all products.' => 'Voulez-vous vraiment supprimer ce template ? Il sera supprimé de tous les produits.', 'Edit folder' => 'Modifier le dossier', - 'Edit previous folder' => 'Modifier le dossier précèdent', + 'Edit folder %title' => 'Modifier le dossier %title', + 'Edit previous folder' => 'Modifier le dossier précédent', 'Edit next folder' => 'Modifier le dossier suivant', 'Select a folder...' => 'Choisissez un dossier de contenu...', 'Select a folder to get its content' => 'Choisissez un dossier de contenu pour lister ses contenus', 'Select a folder content...' => 'Choisissez un dossier de contenu...', + 'Select a content and click (+) to add it to this folder' => 'Sélectionnez un contenu et cliquez sur (+) pour l\'ajouter à ce dossier', 'No folders found' => 'Aucun dossier n\'a été trouvé.', - 'Remove related content' => 'Supprimer le contenu lié', - 'Thelia Languages' => 'Langages Thelia', - 'Languages' => 'Langages', - 'Locale' => 'Locale', - 'Parameters' => 'Paramètres', - 'activate' => 'activer', + 'This folder contains no contents' => 'Ce dossier ne contient aucun contenu', + 'Remove related content' => 'Enlever les contenus liés', + 'Do you really want to remove this related content ?' => 'Voulez-vous vraiment supprimer ce contenu lié ?', + 'Thelia Languages' => 'Langue Thelia', + 'Languages' => 'Langues', 'deactivate' => 'désactiver', 'en_US' => 'en_US', 'd-m-Y' => 'j-m-A', - 'Delete language' => 'Supprimer langage', - 'Impossible to change default languages. Please contact your administrator or try later' => 'Impossible de changer la langue par défaut. Veuillez contacter votre administrateur ou réessayer plus tard', + 'Do you really want to delete this language ?' => 'Voulez-vous vraiment supprimer cette langue ?', 'Edit category' => 'Editer la catégorie', 'Edit category %title' => 'Editer le titre de la catégorie : %title', - 'Edit previous category' => 'Modifier la catégorie précédente', - 'Preview category page' => 'Aperçu de la page catégorie', - 'Edit next category' => 'Modifier la catégorie suivante', 'Related content' => 'Contenu associé', 'No available content in this folder' => 'Ce dossier est vide de contenus', - 'Welcome' => 'Bienvenue', 'Login' => 'Connexion', 'Password' => 'Mot de passe', - 'Loading Thelia lastest news...' => 'Chargement des dernières nouvelles sur Thelia', 'You can attach here some content to this product' => 'Attachez ici un ou plusieurs contenus à ce produit', 'Select a content and click (+) to add it to this product' => 'Chosiissez un contenu, et cliquez [+] pour l\'attacher au produit', - 'This product contains no contents' => 'Ce produit ne contient aucun contenu', - 'Product accessories' => 'Accessoires produit', - 'Select a category...' => 'Sélectionnez une catégorie...', - 'Select a product...' => 'Sélectionnez un produit', - 'No categories found' => 'Aucune catégorie trouvée', - 'Accessory title' => 'Titre de l\'accessoire', - 'Delete this accessory' => 'Supprimer cet accessoire', - 'Additional categories' => 'Catégorie additionnelle', - ' (default)' => '(défaut)', 'Category title' => 'Titre de la catégorie', - 'Remove the product from this category' => 'Supprimer le produit de cette catégorie', - 'Do you really want to remove this related content from the product ?' => 'Voulez-vous vraiment enlever ce contenu lié de ce produit ?', - 'Remove an accessory' => 'Enlever un accessoire', - 'Do you really want to remove this accessory from the product ?' => 'Voulez-vous vraiment enlever cet accessoire de ce produit ?', - 'Remove from category' => 'Enlever de la catégorie', - 'Do you really want to remove the product from this category ?' => 'Voulez-vous vraiment enlever ce produit de cette catégorie ?', + 'Do you really want to remove this related content from the product ?' => 'Voulez-vous vraiment supprimer ce contenu lié de ce produit ?', + 'Do you really want to remove this accessory from the product ?' => 'Voulez-vous vraiment supprimer cet accessoire de ce produit ?', + 'Do you really want to remove the product from this category ?' => 'Voulez-vous vraiment supprimer ce produit de cette catégorie ?', + 'Enter new accessory position' => 'Modifier la position de l\'accessoire', 'Lire la suite' => 'Lire la suite', 'Label' => 'Libellé', 'Edit a language' => 'Modifier une langue', @@ -410,18 +516,15 @@ return array( 'Use Ctrl+click to select more than one value. You can also clear selected values.' => 'Utilisez Ctrl+clic pour choisir plus d\'une valeur. Vous pouvez aussi tout désélectionner.', 'Enter here the feature value as free text' => 'Indiquez ici la valeur de la caractéristique', 'Feature value' => 'Valeur de la caractéristique', - 'Select an attribute...' => 'Sélectionnez un attribut', - 'Delete this attribute' => 'Supprimer cet attribut', - 'This template contains no attributes' => 'Ce template ne contient aucun attribut', - 'Remove attribute' => 'Enlever l\'attribut', - 'Do you really want to remove this attribute from the template ?' => 'Voulez-vous vraiment enlever cet attribut de ce template ?', + 'Select an attribute...' => 'Sélectionnez une déclinaison...', + 'Do you really want to remove this attribute from the template ?' => 'Voulez-vous vraiment supprimer cette déclinaison de ce template ?', 'Enter new category position' => 'Classement de la catégorie ', + 'Do you really want to remove this feature from the template ?' => 'Voulez-vous vraiment supprimer cette caractéristique de ce template ?', 'Show logs' => 'Voir les loge', 'Period' => 'Période', 'From' => 'De', 'To' => 'A', 'Resources' => 'Ressources', - 'Store configuration' => 'Configuration du magasin', 'customer ref' => 'ref client', 'company' => 'entreprise', 'firstname & lastname' => 'Prénom & nom', @@ -433,84 +536,70 @@ return array( 'Status' => 'Etat', 'Edit this order' => 'Editer cette commande ', 'Product title' => 'Titre du produit', - 'Profile code' => 'Code du profile', - 'Short description' => 'Courte description', - 'Delete profile' => 'Supprimer le profile', 'Do you really want to delete this profile ?' => 'Voulez-vous vraiment supprimer ce profile ?', - 'You can\'t delete this profile' => 'Vous ne pouvez supprimer ce produit', 'Update coupon' => 'Mettre à jour le code', 'Please retry' => 'Merci de réessayer', 'Please select another condition' => 'Merci de sélectionner une autre condition', - 'Edit a country' => 'Modifier un pays', - 'Country description' => 'Description du pays', - 'Create coupon' => 'Créer un code promo', + 'Editing country "%name"' => 'En cours de modification du pays "%name"', + 'Sorry, country ID=%id was not found.' => 'Veuillez nous excuser, le pays ID=%id n\'a pas été trouvé', 'Edit a system variable' => 'Modifier une variable système', 'Editing variable "%name"' => 'Modification de la variable "%name" ', 'Edit variable %name' => 'Modifier de la variable "%name" ', 'Variable created on %date_create. Last modification: %date_change' => 'Variable créée le %date_create. Dernière modification: %date_change', 'Sorry, variable ID=%id was not found.' => 'Désolé, la variable ID=%id n\'a pas été trouvée.', + 'Editing module' => 'En cours de modification du module', + 'Do you really want to delete this attribute ? It will be removed from all product templates.' => 'Voulez-vous vraiment supprimer cette déclinaison ? Elle sera supprimée de tous les templates produit.', + 'Do you really want to add this attribute to all product templates ?' => 'Voulez-vous vraiment ajouter cette déclinaison de tous les templates produit ?', + 'Do you really want to remove this attribute from all product templates ? You\'ll loose all product related data for this attribute.' => 'Voulez-vous vraiment supprimer cette déclinaison de tous les templates produits ? Vous allez perdre toutes les informations produit liées à cette déclinaison.', + 'Enter new attribute position' => 'Modifier la position de la déclinaison', 'Edit a customer' => 'Editer un client', 'Editing customer "%name"' => 'Edition du client "%name"', - 'Edit customer %firstname %lastname' => 'Modifier le client %firstname %lastname', 'Customer informations' => 'Informations client', 'Default address' => 'Adresse par défaut', 'Other addresses' => 'Autres adresses', 'Add a new address' => 'Ajouter une nouvelle adresse', - 'Cellular phone' => 'Téléphone portable', 'Edit this address' => 'Editer cette adresse', 'Use this address by default' => 'Utiliser comme adresse par défaut', 'orders for this customer' => 'commandes pour ce client', 'Sorry, customer ID=%id was not found.' => 'Veuillez nous excuser, le client ID=%id n\'a pas été trouvé', - 'Create a customer address' => 'Créer une adresse client', 'Create this address' => 'Créer cette adresse', - 'Edit a customer address' => 'Modifier une adresse client', - 'Save this address' => 'Sauvegarder cette adresse', 'Use address by default' => 'Utiliser comme adresse par défaut', 'Do you really want to use this address by default ?' => 'Voulez-vous vraiment utiliser cette adresse comme adresse par défaut ?', 'Delete address' => 'Supprimer cette adresse', 'Do you really want to delete this address ?' => 'Voulez-vous vraiment supprimer cette adresse ?', - 'Configure' => 'Configurer', - 'Thelia Shipping configuration' => 'Configuration des livraison Thelia', - 'Add a new shipping configuration' => 'Ajouter une nouvelle configuration de livraison', - 'Change this shipping configuration' => 'Modifier cette configuration de livraison', - 'Delete this shipping configuration' => 'Supprimer cette configuration de livraison', - 'Edit an image' => 'Modifier une image', - 'Image' => 'Image', + 'Do you really want to delete this shipping configuration ?' => 'Voulez-vous vraiment supprimer cette configuration de livraison ?', 'Editing image "%name"' => 'En cours de modification de l\'image "%name"', - 'Edit image "%name"' => 'Modification de l\'image "%name"', 'Back' => 'Retour', - 'Preview' => 'Aperçu', - 'File' => 'Fichier', - 'Post Scriptum' => 'Post-scriptum', + 'Sorry, image ID=%id was not found.' => 'Veuillez nous excuser, l\'image ID=%id n\'a pas été trouvée', + 'Editing shipping zone "%name"' => 'En cours de modification de la zone de livraison "%name"', 'Add' => 'Ajouter', - 'Zones' => 'Zones', - 'Delete this zone' => 'Supprimer cette zone', - 'Remove zone' => 'Supprimer zone', + 'Do you really want to remove this zone ?' => 'Voulez-vous vraiment supprimer cette zone ?', 'Edit a document' => 'Modifier un document', 'Document' => 'Document', 'Editing document "%name"' => 'En cours de modification du document "%name"', 'Edit document "%name"' => 'Modifier le document "%name"', 'Document informations' => 'Informations sur le document', - 'Coupon : ' => 'Code promo', - 'days left' => 'jours restant', - 'May be cumulative' => 'Pourra être cumulé', - 'Can\'t be cumulative' => 'Ne pourra pas être cumulé', - 'Will remove postage' => 'Enlèvera les frais de port', - 'Won\'t remove postage' => 'N\'enlèvera pas les frais de port', - 'Will be available on special offers' => 'Sera disponible sur les offres spéciales', - 'Won\'t be available on special offers' => 'Ne sera pas disponible sur les offres spéciales', + 'Sorry, document ID=%id was not found.' => 'Veuillez nous excuser, le document ID=%id n\'a pas été trouvé', + 'Coupon : ' => 'Code promo:', + 'Is disabled' => 'Est désactivé', + 'days left' => 'jours restants', + 'May be cumulative' => 'Peut être cumulé', + 'Can\'t be cumulative' => 'Ne peut être cumulé', + 'Will remove postage' => 'Supprimera les frais de port', + 'Won\'t remove postage' => 'Ne supprimera pas les frais de port', + 'Will be available on special offers' => 'Sera disponible pour les produits en promotion', + 'Won\'t be available on special offers' => 'Ne sera pas disponible pour les produits en promotion', 'Application field' => 'Champs d\'application', 'Do you really want to enable this element ?' => 'Voulez-vous vraiment activer cet élément ?', - 'Templates' => 'Template', + 'Edit a template' => 'Modifier un template', + 'Templates' => 'Templates', + 'Editing template "%name"' => 'En cours de modification du template "%name"', + 'Edit template "%name"' => 'Modifier le template "%name"', 'Template name' => 'Nom du template', + 'Sorry, template ID=%id was not found.' => 'Veuillez nous excuser, le template ID=%id n\'a pas été trouvé', 'taxes' => 'taxes', 'and' => 'et', 'tax rules' => 'règles de taxe', - 'Example :' => 'Exemple:', - 'Create a new tax' => 'Créer une nouvelle taxe', - 'Change this tax' => 'Modifier cette taxe', - 'Delete this tax' => 'Supprimer cette taxe', - 'Delete tax' => 'Supprimer une taxe', 'Do you really want to delete this tax ?' => 'Voulez-vous vraiment supprimer cette taxe ?', 'Delete tax rule' => 'Supprimer une règle de taxe', 'Do you really want to delete this tax rule ?' => 'Voulez-vous vraiment supprimer cette règle de taxe ?', @@ -533,11 +622,7 @@ return array( 'Cancel this order' => 'Annuler cette commande', 'Delete an order' => 'Supprimer une commande', 'Do you really want to cancel this order ?' => 'Voulez-vous vraiment sup primer cette commande ? ', - 'Translation' => 'Traduction', - 'PDF templates' => 'Template du PDF', - 'Thelia core' => 'Cœur de Thelia', 'Warning' => 'Attention', - 'Categories in %cat' => 'Catégories en $cat', 'Top level categories' => 'Catégories de niveau 1 ', 'Add a new category' => 'Ajouter une catégorie', 'Browse this category' => 'Parcourir cette catégorie', @@ -545,10 +630,8 @@ return array( 'Delete this category and all its contents' => 'Supprimer cette catégorie et tout ce qu\'elle contient ? ', 'This category has no sub-categories. To create a new one, click the + button above.' => 'Cette catégorie n\'a pas de sous-catégorie. Pour en créer une nouvelle, cliquez sur le bouton + ci-dessus.', 'This category has no sub-categories.' => 'Cette catégorie n\'a pas de sous-catégorie.', - 'Products in %cat' => 'Produits en %cat', 'Top level Products' => 'Produits mis en avant', 'Add a new product' => 'Ajouter un nouveau produit', - 'Delete this product' => 'Supprimer ce produit', 'This category doesn\'t contains any products. To add a new product, click the + button above.' => 'Cette catégorie n\'a aucun produit. Pour créer un nouveau product, cliques sur le bouton + ci-dessus. ', 'Create a new category' => 'Créer une catégorie', 'Create this category' => 'Créer cette catégorie', @@ -569,64 +652,44 @@ return array( 'Do you really want to delete this product ?' => 'Voulez-vous vraiment supprimer ce produit ?', 'Enter new product position' => 'Classement du produit', 'OK' => 'OK', - 'Product reference' => 'Référence produit', - 'You can attach this product to more categories in the details tab.' => 'Vous pouvez lier ce produit à plus de catégories dans l\'onglet détail.', - 'Product created on %date_create. Last modification: %date_change' => 'Produit créé le %date_create. Dernière modification : %date_change ', - 'classic modules' => 'module classique', - 'Enable/Disable' => 'Activer/Désactiver', - 'Deactivate %title module' => 'Désactiver le module %title', - 'deactivation' => 'désactivation', - 'activate %title module' => 'activer le module %title', - 'activation' => 'activation', - 'Configure this module' => 'Configurer ce module', - 'Read the documentation of this module' => 'Lire la documentation de ce module', - 'Edit this module' => 'Modifier ce module', - 'Delete this module' => 'Supprimer ce module', - 'Edit information in %lng' => 'Modifier les information en %Ing', - 'Edit prices in %curr' => 'Modifier les prix en %curr', 'Save and close' => 'Enregistrer et fermer', - 'Close' => 'Fermer', - 'Send files' => 'Envoyer les fichiers', - 'Drop files to upload' => 'Déposez les fichiers à envoyer sur le serveur', - 'Browse files' => 'Sélectionner les fichiers', - 'Can\'t load documents, please refresh this page.' => 'Échec lors du chargement du document, veuillez réessayer', - 'Update this image' => 'Mettre à jour cette image', - 'There is no images attached to this %type.' => 'Il n\'y a pas d\'image liée à ce %type', - 'Additional Folders' => 'Dossier additionnels', - 'Select a folder and click (+) to add it to the additional folder list' => 'Sélectionnez un dossier et cliquez (+) pour l\'ajouter à la liste des dossiers additionnel', - 'No Folders found' => 'Aucun dossier trouvé', - 'This product doesn\'t belong to any additional folder.' => 'Ce produit n\'appartient à aucun dossier additionnel', - 'Confirmation' => 'Confirmation', 'Do you really want to delete this element ?' => 'Voulez-vous vraiment supprimer cet élément ?', - 'Confirm' => 'Je confirme', - 'Phone number' => 'Numéro de téléphone', - 'Cellular phone number' => 'Numéro de téléphone portable', - 'Editing %fold' => 'Modification de %fold', - '(edit)' => '(modifier)', - 'Editing %title' => 'Modifier %title', - 'There is no documents attached to this %type.' => 'Il n\'y a aucune document lié à ce %type', + '(edit)' => '(modification)', + 'Editing %title' => 'En cours de modification de %title', 'Editing %cat' => 'Edition de %cat', - 'A short description, used when a summary or an introduction is required' => 'Une courte description, utilisé si un résumé ou une introduction est nécessaire', - 'A short post-description information' => 'Une courte post-description', - 'Short conclusion' => 'Courte conclusion', - 'Can\'t load images, please refresh this page.' => 'Échec lors du chargement de l\'image, veuillez réessayer', + 'Can\'t load images, please refresh this page.' => 'Impossible de charger les images, veuillez rafraîchir cette page.', + 'Pricing' => 'Tarifs', + 'The default pricing is used when no combination is defined.' => 'Le tarif par défaut est utilisé lorsque aucune combinaison n\'est définie.', + 'Price excl. taxes' => 'Prix taxes exclues', + 'Product price including taxes' => 'Prix du produit taxes incluses', + 'Price incl. taxes' => 'Prix taxes incluses', 'Product EAN Code' => 'Code EAN du produit', 'Current quantity' => 'Quantité actuelle', 'Promotion' => 'Promotion', + 'Sale price incl. taxes' => 'Prix de vente taxes incluses', + 'Attribute Combinations' => 'Combinaison de déclinaisons', + 'Quickly create combinations using the combination builder' => 'Créer rapidement une combinaison via le constructeur de combinaison', 'Combination builder' => 'Constructeur de combinaison', 'Add a new combination' => 'Ajouter une nouvelle combinaison', 'EAN Code' => 'Code EAN', - 'Weight
(Kg)' => 'Poids
(Kg) ', + 'Price
w/o taxes (%currency)' => 'Prix
sans taxes (%currency)', + 'Price
w/ taxes (%currency)' => 'Prix
avec taxes (%currency)', + 'Weight
(Kg)' => 'Poids
(Kg)', 'Sale' => 'Vente', 'New' => 'Nouveau', + 'Sale price
w/o taxes (%currency)' => 'Prix de vente
avec taxes (%currency)', + 'Sale price
w/ taxes (%currency)' => 'Prix de vente
sans taxes (%currency)', 'Delete this combination' => 'Supprimer cette combinaison', - 'Attribute' => 'Attribut', - 'Select an attribute and click (+) to view available values' => 'Sélectionnez un attribut et cliquez (+) afin de voir les valeurs disponibles', - 'Remove selected values' => 'Supprimer la valeur sélectionnée', + 'Attribute' => 'Déclinaison', + 'Select an attribute value...' => 'Sélectionnez une valeur de déclinaison...', + 'Remove selected values' => 'Enlever les valeur sélectionnées', 'Create a new combination' => 'Créer une nouvelle combinaison', 'Create this combination' => 'Créer cette combinaison', 'Delete a combination' => 'Supprimer une combinaison', 'Do you really want to delete this combination ?' => 'Voulez-vous vraiment supprimer cette combinaison ?', + 'Select attribute values to combine. You may enter a default value for some of the fields of the generated combinations.' => 'Sélectionnez les valeurs de déclinaison à combiner. Vous pouvez entrer une valeur par défaut pour certains champs des combinaisons générées.', 'Combination reference' => 'Référence de la combinaison', + 'Combination EAN Code' => 'Combinaison de code EAN', + '0 combinations' => '0 combinaisons', 'Create combinations' => 'Créer des combinaisons', ); diff --git a/templates/backOffice/default/assets/less/thelia/thelia.less b/templates/backOffice/default/assets/less/thelia/thelia.less index 41b37d4ca..8660af2ad 100755 --- a/templates/backOffice/default/assets/less/thelia/thelia.less +++ b/templates/backOffice/default/assets/less/thelia/thelia.less @@ -161,16 +161,6 @@ width: 100%; } -.btn-group { - white-space: nowrap; // prevent buttons from wrapping when in tight spaces (e.g., the table on the tests page) - > .btn { - float: inherit; - } - > .btn + .btn { - margin-left: -4px; - } -} - // -- Login form -------------------------------------------------------------- .form-signin { @@ -423,4 +413,19 @@ .dropzone { border: 1px dashed #ddd; padding: 20px; +} + +// No button wrap in button groups in td.action cells +table { + td.actions { + .btn-group { + white-space: nowrap; // prevent buttons from wrapping when in tight spaces (e.g., the table on the tests page) + > .btn { + float: inherit; + } + > .btn + .btn { + margin-left: -4px; + } + } + } } \ No newline at end of file diff --git a/templates/backOffice/default/translations.html b/templates/backOffice/default/translations.html index fa41a3cf6..5a48e5277 100755 --- a/templates/backOffice/default/translations.html +++ b/templates/backOffice/default/translations.html @@ -45,6 +45,7 @@ + @@ -91,6 +92,19 @@ + {else if $item_to_translate == 'ma'} +
+
+ + + +
+
{else if $item_to_translate == 'pf'}
diff --git a/templates/email/default/I18n/en_US.php b/templates/email/default/I18n/en_US.php new file mode 100644 index 000000000..6d8ef0f1b --- /dev/null +++ b/templates/email/default/I18n/en_US.php @@ -0,0 +1,4 @@ + {loop name="feature_info" type="feature" product="{$ID}"} + {ifloop rel="feature_value_info"}
  • {$TITLE} : {loop name="feature_value_info" type="feature_value" feature="{$ID}" product="{product attr="id"}"} {$TITLE} {/loop}
  • + {/ifloop} {/loop} - {/ifloop} + {/ifloop} {/capture} {/strip} @@ -221,7 +223,7 @@
    -

    {$DESCRIPTION|default:'N/A'}

    +

    {$DESCRIPTION|default:'N/A' nofilter}

    {if $smarty.capture.additional ne ""}