Merge branch 'master' of github.com:thelia/thelia

This commit is contained in:
Etienne Roudeix
2014-01-10 16:29:27 +01:00
60 changed files with 1056 additions and 1098 deletions

View File

@@ -2,7 +2,9 @@
- Coupon effect inputs are now more customisable (input text, select, ajax, etc.. are usable) and unlimited amount of input for coupon effect are now possible too - Coupon effect inputs are now more customisable (input text, select, ajax, etc.. are usable) and unlimited amount of input for coupon effect are now possible too
- when a category is deleted, all subcategories are deleted - when a category is deleted, all subcategories are deleted
- delete products when categories are removed. Works only when the category is the default one for this product - delete products when categories are removed. Works only when the category is the default one for this product
- Manager update exists now. - Manager update exists now. Rune php Thelia thelia:update
- Coupon works now
- Improved tax rule configuration
#2.0.0-beta2 #2.0.0-beta2

View File

@@ -130,7 +130,8 @@ class Coupon extends BaseAction implements EventSubscriberInterface
->getSession() ->getSession()
->getOrder() ->getOrder()
->setDiscount($totalDiscount) ->setDiscount($totalDiscount)
->save(); // ->save()
;
} }
} }
@@ -262,6 +263,8 @@ class Coupon extends BaseAction implements EventSubscriberInterface
$orderCoupon->save(); $orderCoupon->save();
} }
} }
$request->getSession()->setConsumedCoupons(array());
} }
/** /**

View File

@@ -30,7 +30,6 @@ use Thelia\Core\Event\Cart\CartEvent;
use Thelia\Core\Event\Order\OrderAddressEvent; use Thelia\Core\Event\Order\OrderAddressEvent;
use Thelia\Core\Event\Order\OrderEvent; use Thelia\Core\Event\Order\OrderEvent;
use Thelia\Core\Event\TheliaEvents; use Thelia\Core\Event\TheliaEvents;
use Thelia\Coupon\CouponManager;
use Thelia\Exception\TheliaProcessException; use Thelia\Exception\TheliaProcessException;
use Thelia\Model\AddressQuery; use Thelia\Model\AddressQuery;
use Thelia\Model\ConfigQuery; use Thelia\Model\ConfigQuery;
@@ -288,7 +287,8 @@ class Order extends BaseAction implements EventSubscriberInterface
$sessionOrder = new \Thelia\Model\Order(); $sessionOrder = new \Thelia\Model\Order();
$event->setOrder($sessionOrder); $event->setOrder($sessionOrder);
$event->setPlacedOrder($placedOrder); $event->setPlacedOrder($placedOrder);
$this->getSession()->setOrder($placedOrder); $this->getSession()->setProcessedOrder($placedOrder);
$this->getSession()->setOrder(new \Thelia\Model\Order());
/* empty cart */ /* empty cart */
$this->getDispatcher()->dispatch(TheliaEvents::CART_CLEAR, new CartEvent($this->getCart($this->getRequest()))); $this->getDispatcher()->dispatch(TheliaEvents::CART_CLEAR, new CartEvent($this->getCart($this->getRequest())));

View File

@@ -27,8 +27,6 @@ use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\OutputInterface;
use Thelia\Install\Exception\UpToDateException; use Thelia\Install\Exception\UpToDateException;
use Thelia\Install\Update; use Thelia\Install\Update;
use Thelia\Model\ConfigQuery;
/** /**
* Class UpdateCommand * Class UpdateCommand

View File

@@ -26,7 +26,6 @@ namespace Thelia\Condition;
use ArrayAccess; use ArrayAccess;
use Countable; use Countable;
use Iterator; use Iterator;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Thelia\Condition\Implementation\ConditionInterface; use Thelia\Condition\Implementation\ConditionInterface;
/** /**

View File

@@ -23,12 +23,10 @@
namespace Thelia\Condition; namespace Thelia\Condition;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Thelia\Condition\Implementation\ConditionInterface; use Thelia\Condition\Implementation\ConditionInterface;
use Thelia\Condition\Operators; use Thelia\Condition\Operators;
use Thelia\Condition\ConditionCollection; use Thelia\Condition\ConditionCollection;
/** /**
* Validate Conditions * Validate Conditions
* *

View File

@@ -28,7 +28,6 @@ use Thelia\Condition\Implementation\ConditionInterface;
use Thelia\Coupon\FacadeInterface; use Thelia\Coupon\FacadeInterface;
use Thelia\Condition\ConditionCollection; use Thelia\Condition\ConditionCollection;
/** /**
* Manage how Condition could interact with the current application state (Thelia) * Manage how Condition could interact with the current application state (Thelia)
* *
@@ -114,7 +113,6 @@ class ConditionFactory
return $collection; return $collection;
} }
/** /**
* Build a Condition from form * Build a Condition from form
* *
@@ -166,7 +164,6 @@ class ConditionFactory
*/ */
public function getInputsFromConditionInterface(ConditionInterface $condition) public function getInputsFromConditionInterface(ConditionInterface $condition)
{ {
return $condition->getValidators(); return $condition->getValidators();
} }
} }

View File

@@ -171,7 +171,6 @@ abstract class ConditionAbstract implements ConditionInterface
return $serializableCondition; return $serializableCondition;
} }
/** /**
* Check if currency if valid or not * Check if currency if valid or not
* *
@@ -282,6 +281,7 @@ abstract class ConditionAbstract implements ConditionInterface
</div> </div>
</div> </div>
'; ';
return $html; return $html;
} }

View File

@@ -24,7 +24,6 @@
namespace Thelia\Condition\Implementation; namespace Thelia\Condition\Implementation;
use Thelia\Condition\SerializableCondition; use Thelia\Condition\SerializableCondition;
use Thelia\Core\Translation\Translator;
use Thelia\Coupon\FacadeInterface; use Thelia\Coupon\FacadeInterface;
/** /**
@@ -41,7 +40,7 @@ interface ConditionInterface
* *
* @param FacadeInterface $adapter Service adapter * @param FacadeInterface $adapter Service adapter
*/ */
function __construct(FacadeInterface $adapter); public function __construct(FacadeInterface $adapter);
/** /**
* Get Condition Service id * Get Condition Service id
@@ -75,7 +74,6 @@ interface ConditionInterface
*/ */
public function getAvailableOperators(); public function getAvailableOperators();
/** /**
* Get I18n name * Get I18n name
* *

View File

@@ -148,7 +148,6 @@ class MatchForEveryone extends ConditionAbstract
public function drawBackOfficeInputs() public function drawBackOfficeInputs()
{ {
// No input // No input
return ''; return '';
} }

View File

@@ -23,7 +23,6 @@
namespace Thelia\Condition\Implementation; namespace Thelia\Condition\Implementation;
use Symfony\Component\Intl\Exception\NotImplementedException;
use Thelia\Condition\Implementation\ConditionAbstract; use Thelia\Condition\Implementation\ConditionAbstract;
use Thelia\Condition\Operators; use Thelia\Condition\Operators;
use Thelia\Exception\InvalidConditionOperatorException; use Thelia\Exception\InvalidConditionOperatorException;
@@ -119,10 +118,8 @@ class MatchForTotalAmount extends ConditionAbstract
$this->isPriceValid($priceValue); $this->isPriceValid($priceValue);
$this->isCurrencyValid($currencyValue); $this->isCurrencyValid($currencyValue);
$this->operators = array( $this->operators = array(
self::INPUT1 => $priceOperator, self::INPUT1 => $priceOperator,
self::INPUT2 => $currencyOperator, self::INPUT2 => $currencyOperator,

View File

@@ -247,6 +247,7 @@ class MatchForXArticles extends ConditionAbstract
</div> </div>
</div> </div>
'; ';
return $html; return $html;
} }

View File

@@ -314,7 +314,6 @@ class CouponController extends BaseAdminController
/** @var ConditionInterface $condition */ /** @var ConditionInterface $condition */
$condition = $this->container->get($conditionId); $condition = $this->container->get($conditionId);
if ($inputs === null) { if ($inputs === null) {
return $this->pageNotFound(); return $this->pageNotFound();
} }
@@ -723,6 +722,7 @@ class CouponController extends BaseAdminController
$args = array(); $args = array();
$args['conditions'] = $this->cleanConditionForTemplate($couponManager->getConditions()); $args['conditions'] = $this->cleanConditionForTemplate($couponManager->getConditions());
return $this->render('coupon/conditions', $args); return $this->render('coupon/conditions', $args);
} }

View File

@@ -253,6 +253,26 @@ class Session extends BaseSession
return $this->get("thelia.order"); return $this->get("thelia.order");
} }
/**
* @param Order $order
* @return $this
*/
public function setProcessedOrder(Order $order)
{
$this->set('thelia.order.processed', $order);
return $this;
}
/**
* Return an order already processed, usefull for payment modules
* @return Order
*/
public function getProcessedOrder()
{
return $this->get('thelia.order.processed');
}
/** /**
* Set consumed coupons by the Customer * Set consumed coupons by the Customer
* *

View File

@@ -23,7 +23,8 @@
namespace Thelia\Core\Template\Assets; namespace Thelia\Core\Template\Assets;
interface AssetManagerInterface { interface AssetManagerInterface
{
/** /**
* Prepare an asset directory by checking that no changes occured in * Prepare an asset directory by checking that no changes occured in
* the source directory. If any change is detected, the whole asset directory * the source directory. If any change is detected, the whole asset directory

View File

@@ -76,7 +76,8 @@ class AsseticAssetManager implements AssetManagerInterface
* *
* @return bool * @return bool
*/ */
protected function isSourceFile(\SplFileInfo $fileInfo) { protected function isSourceFile(\SplFileInfo $fileInfo)
{
return in_array($fileInfo->getExtension(), $this->source_file_extensions); return in_array($fileInfo->getExtension(), $this->source_file_extensions);
} }
@@ -205,8 +206,7 @@ class AsseticAssetManager implements AssetManagerInterface
throw new \RuntimeException( throw new \RuntimeException(
"Failed to create asset stamp file $stamp_file_path. Please check that your web server has the proper access rights to do that."); "Failed to create asset stamp file $stamp_file_path. Please check that your web server has the proper access rights to do that.");
} }
/* } /* } else {
else {
@fclose($fp); @fclose($fp);
} }
*/ */
@@ -221,8 +221,8 @@ class AsseticAssetManager implements AssetManagerInterface
* @throws \InvalidArgumentException if a wrong filter is passed * @throws \InvalidArgumentException if a wrong filter is passed
* @return an array of filter names * @return an array of filter names
*/ */
protected function decodeAsseticFilters(FilterManager $filterManager, $filters) { protected function decodeAsseticFilters(FilterManager $filterManager, $filters)
{
if (!empty($filters)) { if (!empty($filters)) {
$filter_list = explode(',', $filters); $filter_list = explode(',', $filters);
@@ -261,8 +261,7 @@ class AsseticAssetManager implements AssetManagerInterface
break; break;
} }
} }
} } else {
else {
$filter_list = array(); $filter_list = array();
} }

View File

@@ -15,7 +15,6 @@ use Thelia\Core\Template\Element\LoopResult;
use Thelia\Core\Template\Element\LoopResultRow; use Thelia\Core\Template\Element\LoopResultRow;
use Thelia\Core\Template\Loop\Argument\Argument; use Thelia\Core\Template\Loop\Argument\Argument;
use Thelia\Core\Template\Loop\Argument\ArgumentCollection; use Thelia\Core\Template\Loop\Argument\ArgumentCollection;
use Thelia\Model\CountryQuery;
use Thelia\TaxEngine\TaxEngine; use Thelia\TaxEngine\TaxEngine;
use Thelia\Type; use Thelia\Type;

View File

@@ -25,8 +25,6 @@ namespace Thelia\Core\Template\Loop;
use Propel\Runtime\ActiveQuery\Criteria; use Propel\Runtime\ActiveQuery\Criteria;
use Thelia\Condition\ConditionFactory; use Thelia\Condition\ConditionFactory;
use Thelia\Condition\Implementation\ConditionInterface;
use Thelia\Core\HttpFoundation\Request;
use Thelia\Core\Template\Element\BaseLoop; use Thelia\Core\Template\Element\BaseLoop;
use Thelia\Core\Template\Element\LoopResult; use Thelia\Core\Template\Element\LoopResult;
use Thelia\Core\Template\Element\LoopResultRow; use Thelia\Core\Template\Element\LoopResultRow;
@@ -35,7 +33,6 @@ use Thelia\Core\Template\Loop\Argument\Argument;
use Thelia\Core\Template\Loop\Argument\ArgumentCollection; use Thelia\Core\Template\Loop\Argument\ArgumentCollection;
use Thelia\Model\OrderCouponQuery; use Thelia\Model\OrderCouponQuery;
use Thelia\Model\OrderQuery; use Thelia\Model\OrderQuery;
use Thelia\Type;
/** /**
* *

View File

@@ -36,7 +36,6 @@ use Thelia\Core\Template\Loop\Argument\Argument;
use Thelia\Exception\TaxEngineException; use Thelia\Exception\TaxEngineException;
use Thelia\Model\CategoryQuery; use Thelia\Model\CategoryQuery;
use Thelia\Model\CountryQuery;
use Thelia\Model\CurrencyQuery; use Thelia\Model\CurrencyQuery;
use Thelia\Model\Map\ProductPriceTableMap; use Thelia\Model\Map\ProductPriceTableMap;
use Thelia\Model\Map\ProductSaleElementsTableMap; use Thelia\Model\Map\ProductSaleElementsTableMap;

View File

@@ -34,7 +34,6 @@ use Thelia\Core\Template\Loop\Argument\Argument;
use Thelia\Exception\TaxEngineException; use Thelia\Exception\TaxEngineException;
use Thelia\Model\Base\ProductSaleElementsQuery; use Thelia\Model\Base\ProductSaleElementsQuery;
use Thelia\Model\CountryQuery;
use Thelia\Model\CurrencyQuery; use Thelia\Model\CurrencyQuery;
use Thelia\Model\Map\ProductSaleElementsTableMap; use Thelia\Model\Map\ProductSaleElementsTableMap;
use Thelia\TaxEngine\TaxEngine; use Thelia\TaxEngine\TaxEngine;

View File

@@ -23,19 +23,12 @@
namespace Thelia\Core\Template\Loop; namespace Thelia\Core\Template\Loop;
use Propel\Runtime\ActiveQuery\Criteria;
use Thelia\Core\Security\AccessManager;
use Thelia\Core\Template\Element\BaseI18nLoop;
use Thelia\Core\Template\Element\LoopResult; use Thelia\Core\Template\Element\LoopResult;
use Thelia\Core\Template\Element\LoopResultRow; use Thelia\Core\Template\Element\LoopResultRow;
use Thelia\Core\Template\Element\PropelSearchLoopInterface;
use Thelia\Core\Template\Loop\Argument\ArgumentCollection; use Thelia\Core\Template\Loop\Argument\ArgumentCollection;
use Thelia\Core\Template\Loop\Argument\Argument; use Thelia\Core\Template\Loop\Argument\Argument;
use Thelia\Model\ModuleQuery;
use Thelia\Module\BaseModule;
use Thelia\Type; use Thelia\Type;
use Thelia\Core\Template\TemplateHelper; use Thelia\Core\Template\TemplateHelper;
use Thelia\Core\Template\TemplateDefinition; use Thelia\Core\Template\TemplateDefinition;
@@ -72,7 +65,8 @@ class Template extends BaseLoop implements ArraySearchLoopInterface
); );
} }
public function buildArray() { public function buildArray()
{
$type = $this->getArg('template-type')->getValue(); $type = $this->getArg('template-type')->getValue();
if ($type == 'front-office') if ($type == 'front-office')

View File

@@ -50,7 +50,6 @@ interface ParserInterface
*/ */
public function addTemplateDirectory($templateType, $templateName, $templateDirectory, $key, $unshift = false); public function addTemplateDirectory($templateType, $templateName, $templateDirectory, $key, $unshift = false);
/** /**
* Return the registeted template directories for a givent template type * Return the registeted template directories for a givent template type
* *

View File

@@ -23,7 +23,6 @@
namespace Thelia\Core\Template\Smarty\Assets; namespace Thelia\Core\Template\Smarty\Assets;
use Thelia\Core\Template\Assets\AsseticHelper;
use Thelia\Core\Template\TemplateDefinition; use Thelia\Core\Template\TemplateDefinition;
use Thelia\Tools\URL; use Thelia\Tools\URL;
use Thelia\Core\Template\Assets\AssetManagerInterface; use Thelia\Core\Template\Assets\AssetManagerInterface;
@@ -37,7 +36,7 @@ class SmartyAssetsManager
private $web_root; private $web_root;
private $path_relative_to_web_root; private $path_relative_to_web_root;
static private $assetsDirectory = null; private static $assetsDirectory = null;
/** /**
* Creates a new SmartyAssetsManager instance * Creates a new SmartyAssetsManager instance

View File

@@ -14,8 +14,6 @@ use Thelia\Core\Template\Smarty\AbstractSmartyPlugin;
use Thelia\Core\Template\Exception\ResourceNotFoundException; use Thelia\Core\Template\Exception\ResourceNotFoundException;
use Thelia\Core\Template\ParserContext; use Thelia\Core\Template\ParserContext;
use Thelia\Core\Template\TemplateDefinition; use Thelia\Core\Template\TemplateDefinition;
use Thelia\Model\ConfigQuery;
use Thelia\Core\Template\TemplateHelper;
use Imagine\Exception\InvalidArgumentException; use Imagine\Exception\InvalidArgumentException;
use Thelia\Core\Translation\Translator; use Thelia\Core\Translation\Translator;
@@ -72,7 +70,6 @@ class SmartyParser extends Smarty implements ParserInterface
$this->setCompileDir($compile_dir); $this->setCompileDir($compile_dir);
$this->setCacheDir($cache_dir); $this->setCacheDir($cache_dir);
$this->debugging = $debug; $this->debugging = $debug;
// Prevent smarty ErrorException: Notice: Undefined index bla bla bla... // Prevent smarty ErrorException: Notice: Undefined index bla bla bla...
@@ -89,7 +86,6 @@ class SmartyParser extends Smarty implements ParserInterface
//$this->enableSecurity(); //$this->enableSecurity();
// The default HTTP status // The default HTTP status
$this->status = 200; $this->status = 200;
@@ -106,8 +102,8 @@ class SmartyParser extends Smarty implements ParserInterface
* @param unknown $key ??? * @param unknown $key ???
* @param string $unshift ??? Etienne ? * @param string $unshift ??? Etienne ?
*/ */
public function addTemplateDirectory($templateType, $templateName, $templateDirectory, $key, $unshift = false) { public function addTemplateDirectory($templateType, $templateName, $templateDirectory, $key, $unshift = false)
{
if (true === $unshift && isset($this->templateDirectories[$templateType][$templateName])) { if (true === $unshift && isset($this->templateDirectories[$templateType][$templateName])) {
$this->templateDirectories[$templateType][$templateName] = array_merge( $this->templateDirectories[$templateType][$templateName] = array_merge(

View File

@@ -57,7 +57,6 @@ class TemplateDefinition
*/ */
protected $type; protected $type;
public function __construct($name, $type) public function __construct($name, $type)
{ {
$this->name = $name; $this->name = $name;
@@ -90,14 +89,17 @@ class TemplateDefinition
public function setName($name) public function setName($name)
{ {
$this->name = $name; $this->name = $name;
return $this; return $this;
} }
public function getI18nPath() { public function getI18nPath()
{
return $this->getPath() . DS . 'I18n'; return $this->getPath() . DS . 'I18n';
} }
public function getAbsoluteI18nPath() { public function getAbsoluteI18nPath()
{
return THELIA_TEMPLATE_DIR . $this->getI18nPath(); return THELIA_TEMPLATE_DIR . $this->getI18nPath();
} }
@@ -106,7 +108,8 @@ class TemplateDefinition
return $this->path; return $this->path;
} }
public function getAbsolutePath() { public function getAbsolutePath()
{
return THELIA_TEMPLATE_DIR . $this->getPath(); return THELIA_TEMPLATE_DIR . $this->getPath();
} }
@@ -115,13 +118,15 @@ class TemplateDefinition
return $this->getPath() . DS . 'configs'; return $this->getPath() . DS . 'configs';
} }
public function getAbsoluteConfigPath() { public function getAbsoluteConfigPath()
{
return THELIA_TEMPLATE_DIR . $this->getConfigPath(); return THELIA_TEMPLATE_DIR . $this->getConfigPath();
} }
public function setPath($path) public function setPath($path)
{ {
$this->path = $path; $this->path = $path;
return $this; return $this;
} }
@@ -133,13 +138,15 @@ class TemplateDefinition
public function setType($type) public function setType($type)
{ {
$this->type = $type; $this->type = $type;
return $this; return $this;
} }
/** /**
* Returns an iterator on the standard templates subdir names * Returns an iterator on the standard templates subdir names
*/ */
public static function getStandardTemplatesSubdirsIterator() { public static function getStandardTemplatesSubdirsIterator()
{
return new \ArrayIterator(self::$standardTemplatesSubdirs); return new \ArrayIterator(self::$standardTemplatesSubdirs);
} }
} }

View File

@@ -93,7 +93,8 @@ class TemplateHelper
/** /**
* Returns an array which contains all standard template definitions * Returns an array which contains all standard template definitions
*/ */
public function getStandardTemplateDefinitions() { public function getStandardTemplateDefinitions()
{
return array( return array(
$this->getActiveFrontTemplate(), $this->getActiveFrontTemplate(),
$this->getActiveAdminTemplate(), $this->getActiveAdminTemplate(),
@@ -108,8 +109,8 @@ class TemplateHelper
* @param int $templateType the template type * @param int $templateType the template type
* @return An array of \Thelia\Core\Template\TemplateDefinition * @return An array of \Thelia\Core\Template\TemplateDefinition
*/ */
public function getList($templateType) { public function getList($templateType)
{
$list = $exclude = array(); $list = $exclude = array();
$tplIterator = TemplateDefinition::getStandardTemplatesSubdirsIterator(); $tplIterator = TemplateDefinition::getStandardTemplatesSubdirsIterator();

View File

@@ -49,7 +49,6 @@ use Thelia\Config\DefinePropel;
use Thelia\Core\Template\TemplateDefinition; use Thelia\Core\Template\TemplateDefinition;
use Thelia\Core\TheliaContainerBuilder; use Thelia\Core\TheliaContainerBuilder;
use Thelia\Core\DependencyInjection\Loader\XmlFileLoader; use Thelia\Core\DependencyInjection\Loader\XmlFileLoader;
use Thelia\Model\ConfigQuery;
use Symfony\Component\Config\FileLocator; use Symfony\Component\Config\FileLocator;
use Propel\Runtime\Propel; use Propel\Runtime\Propel;
@@ -112,7 +111,8 @@ class Thelia extends Kernel
* @param TheliaParser $parser the parser * @param TheliaParser $parser the parser
* @param Module $module the Module. * @param Module $module the Module.
*/ */
protected function addStandardModuleTemplatesToParserEnvironment($parser, $module) { protected function addStandardModuleTemplatesToParserEnvironment($parser, $module)
{
$stdTpls = TemplateDefinition::getStandardTemplatesSubdirsIterator(); $stdTpls = TemplateDefinition::getStandardTemplatesSubdirsIterator();
foreach ($stdTpls as $templateType => $templateSubdirName) { foreach ($stdTpls as $templateType => $templateSubdirName) {
@@ -128,8 +128,8 @@ class Thelia extends Kernel
* @param string $templateType the template type (one of the TemplateDefinition type constants) * @param string $templateType the template type (one of the TemplateDefinition type constants)
* @param string $templateSubdirName the template subdirectory name (one of the TemplateDefinition::XXX_SUBDIR constants) * @param string $templateSubdirName the template subdirectory name (one of the TemplateDefinition::XXX_SUBDIR constants)
*/ */
protected function addModuleTemplateToParserEnvironment($parser, $module, $templateType, $templateSubdirName) { protected function addModuleTemplateToParserEnvironment($parser, $module, $templateType, $templateSubdirName)
{
// Get template path // Get template path
$templateDirectory = $module->getAbsoluteTemplateDirectoryPath($templateSubdirName); $templateDirectory = $module->getAbsoluteTemplateDirectoryPath($templateSubdirName);
@@ -155,8 +155,7 @@ class Thelia extends Kernel
); );
} }
} }
} } catch (\UnexpectedValueException $ex) {
catch (\UnexpectedValueException $ex) {
// The directory does not exists, ignore it. // The directory does not exists, ignore it.
} }
} }

View File

@@ -59,7 +59,7 @@ class BaseFacade implements FacadeInterface
* *
* @param ContainerInterface $container Service container * @param ContainerInterface $container Service container
*/ */
function __construct(ContainerInterface $container) public function __construct(ContainerInterface $container)
{ {
$this->container = $container; $this->container = $container;
} }
@@ -135,7 +135,6 @@ class BaseFacade implements FacadeInterface
return $this->getRequest()->getSession()->getCurrency()->getCode(); return $this->getRequest()->getSession()->getCurrency()->getCode();
} }
/** /**
* Return the number of Products in the Cart * Return the number of Products in the Cart
* *
@@ -202,7 +201,6 @@ class BaseFacade implements FacadeInterface
return $this->container->get('thelia.translator'); return $this->container->get('thelia.translator');
} }
/** /**
* Return the main currency * Return the main currency
* THe one used to set prices in BackOffice * THe one used to set prices in BackOffice
@@ -234,7 +232,6 @@ class BaseFacade implements FacadeInterface
return $this->container->get('thelia.condition.validator'); return $this->container->get('thelia.condition.validator');
} }
/** /**
* Return all available currencies * Return all available currencies
* *

View File

@@ -132,6 +132,4 @@ class CouponFactory
return clone $couponManager; return clone $couponManager;
} }
} }

View File

@@ -43,9 +43,6 @@ class CouponManager
/** @var ContainerInterface Service Container */ /** @var ContainerInterface Service Container */
protected $container = null; protected $container = null;
/** @var array CouponInterface to process*/
protected $coupons = array();
/** @var array Available Coupons (Services) */ /** @var array Available Coupons (Services) */
protected $availableCoupons = array(); protected $availableCoupons = array();
@@ -61,10 +58,8 @@ class CouponManager
{ {
$this->container = $container; $this->container = $container;
$this->facade = $container->get('thelia.facade'); $this->facade = $container->get('thelia.facade');
$this->coupons = $this->facade->getCurrentCoupons();
} }
/** /**
* Get Discount for the given Coupons * Get Discount for the given Coupons
* *
@@ -74,9 +69,9 @@ class CouponManager
public function getDiscount() public function getDiscount()
{ {
$discount = 0.00; $discount = 0.00;
$coupons = $this->facade->getCurrentCoupons();
if (count($this->coupons) > 0) { if (count($coupons) > 0) {
$couponsKept = $this->sortCoupons($this->coupons); $couponsKept = $this->sortCoupons($coupons);
$discount = $this->getEffect($couponsKept); $discount = $this->getEffect($couponsKept);
@@ -96,11 +91,12 @@ class CouponManager
*/ */
public function isCouponRemovingPostage() public function isCouponRemovingPostage()
{ {
if (count($this->coupons) == 0) { $coupons = $this->facade->getCurrentCoupons();
if (count($coupons) == 0) {
return false; return false;
} }
$couponsKept = $this->sortCoupons($this->coupons); $couponsKept = $this->sortCoupons($coupons);
/** @var CouponInterface $coupon */ /** @var CouponInterface $coupon */
foreach ($couponsKept as $coupon) { foreach ($couponsKept as $coupon) {

View File

@@ -45,7 +45,7 @@ interface FacadeInterface
* *
* @param ContainerInterface $container Service container * @param ContainerInterface $container Service container
*/ */
function __construct(ContainerInterface $container); public function __construct(ContainerInterface $container);
/** /**
* Return a Cart a CouponManager can process * Return a Cart a CouponManager can process

View File

@@ -23,7 +23,6 @@
namespace Thelia\Coupon\Type; namespace Thelia\Coupon\Type;
use Symfony\Component\Intl\Exception\NotImplementedException;
use Thelia\Condition\ConditionEvaluator; use Thelia\Condition\ConditionEvaluator;
use Thelia\Core\Translation\Translator; use Thelia\Core\Translation\Translator;
use Thelia\Coupon\FacadeInterface; use Thelia\Coupon\FacadeInterface;
@@ -62,7 +61,6 @@ abstract class CouponAbstract implements CouponInterface
/** @var ConditionEvaluator Condition validator */ /** @var ConditionEvaluator Condition validator */
protected $conditionEvaluator = null; protected $conditionEvaluator = null;
/** @var string Service Id */ /** @var string Service Id */
protected $serviceId = null; protected $serviceId = null;
@@ -75,8 +73,6 @@ abstract class CouponAbstract implements CouponInterface
/** @var string Coupon code (ex: XMAS) */ /** @var string Coupon code (ex: XMAS) */
protected $code = null; protected $code = null;
/** @var string Coupon title (ex: Coupon for XMAS) */ /** @var string Coupon title (ex: Coupon for XMAS) */
protected $title = null; protected $title = null;
@@ -86,8 +82,6 @@ abstract class CouponAbstract implements CouponInterface
/** @var string Coupon description */ /** @var string Coupon description */
protected $description = null; protected $description = null;
/** @var bool if Coupon is enabled */ /** @var bool if Coupon is enabled */
protected $isEnabled = false; protected $isEnabled = false;
@@ -106,7 +100,6 @@ abstract class CouponAbstract implements CouponInterface
/** @var bool if Coupon is available for Products already on special offers */ /** @var bool if Coupon is available for Products already on special offers */
protected $isAvailableOnSpecialOffers = false; protected $isAvailableOnSpecialOffers = false;
/** /**
* Constructor * Constructor
* *
@@ -355,7 +348,6 @@ abstract class CouponAbstract implements CouponInterface
return $this->serviceId; return $this->serviceId;
} }
/** /**
* Check if the current state of the application is matching this Coupon conditions * Check if the current state of the application is matching this Coupon conditions
* Thelia variables are given by the FacadeInterface * Thelia variables are given by the FacadeInterface
@@ -398,5 +390,4 @@ abstract class CouponAbstract implements CouponInterface
return $this->extendedInputs; return $this->extendedInputs;
} }
} }

View File

@@ -138,8 +138,6 @@ interface CouponInterface
*/ */
public function isRemovingPostage(); public function isRemovingPostage();
/** /**
* Return condition to validate the Coupon or not * Return condition to validate the Coupon or not
* *
@@ -173,7 +171,6 @@ interface CouponInterface
*/ */
public function isAvailableOnSpecialOffers(); public function isAvailableOnSpecialOffers();
/** /**
* Check if Coupon has been disabled by admin * Check if Coupon has been disabled by admin
* *
@@ -196,7 +193,6 @@ interface CouponInterface
*/ */
public function isExpired(); public function isExpired();
/** /**
* Return effects generated by the coupon * Return effects generated by the coupon
* A positive value * A positive value

View File

@@ -110,7 +110,6 @@ class RemoveXPercent extends CouponAbstract
return $basePrice * (( $this->percentage ) / 100); return $basePrice * (( $this->percentage ) / 100);
} }
/** /**
* Get I18n name * Get I18n name
* *

View File

@@ -22,7 +22,6 @@
/*************************************************************************************/ /*************************************************************************************/
namespace Thelia\Form; namespace Thelia\Form;
use Symfony\Component\Validator\Constraints;
use Symfony\Component\Validator\ExecutionContextInterface; use Symfony\Component\Validator\ExecutionContextInterface;
use Thelia\Core\Translation\Translator; use Thelia\Core\Translation\Translator;
use Thelia\Model\ProfileQuery; use Thelia\Model\ProfileQuery;

View File

@@ -53,7 +53,6 @@ abstract class BaseInstall
throw new AlreadyInstallException("Thelia is already installed"); throw new AlreadyInstallException("Thelia is already installed");
} }
$this->exec(); $this->exec();
} }

View File

@@ -24,12 +24,8 @@
namespace Thelia\Install; namespace Thelia\Install;
use PDO; use PDO;
use RecursiveDirectoryIterator;
use RecursiveIteratorIterator;
use Symfony\Component\Translation\TranslatorInterface; use Symfony\Component\Translation\TranslatorInterface;
use Thelia\Core\Translation\Translator; use Thelia\Core\Translation\Translator;
use Thelia\Install\Exception\InstallException;
/** /**
* Class CheckDatabaseConnection * Class CheckDatabaseConnection

View File

@@ -28,7 +28,6 @@ use RecursiveIteratorIterator;
use Symfony\Component\Translation\TranslatorInterface; use Symfony\Component\Translation\TranslatorInterface;
use Thelia\Core\Translation\Translator; use Thelia\Core\Translation\Translator;
/** /**
* Class CheckPermission * Class CheckPermission
* *
@@ -164,9 +163,6 @@ class CheckPermission extends BaseInstall
} }
} }
return $this->isValid; return $this->isValid;
} }
@@ -200,7 +196,6 @@ class CheckPermission extends BaseInstall
return (is_writable(THELIA_ROOT . $directory) === true); return (is_writable(THELIA_ROOT . $directory) === true);
} }
/** /**
* Get Translated text about the directory state * Get Translated text about the directory state
* *
@@ -269,7 +264,6 @@ class CheckPermission extends BaseInstall
return $translatedText; return $translatedText;
} }
/** /**
* Get Translated text about the directory state * Get Translated text about the directory state
* Not usable with CLI * Not usable with CLI

View File

@@ -23,7 +23,6 @@
namespace Thelia\Install; namespace Thelia\Install;
/** /**
* Class Database * Class Database
* @package Thelia\Install * @package Thelia\Install

View File

@@ -23,7 +23,6 @@
namespace Thelia\Install\Exception; namespace Thelia\Install\Exception;
/** /**
* Class AlreadyInstallException * Class AlreadyInstallException
* @package Thelia\Install\Exception * @package Thelia\Install\Exception

View File

@@ -23,7 +23,6 @@
namespace Thelia\Install\Exception; namespace Thelia\Install\Exception;
/** /**
* Class UpToDateException * Class UpToDateException
* @package Thelia\Install\Exception * @package Thelia\Install\Exception

View File

@@ -29,7 +29,6 @@ use Thelia\Log\Tlog;
use Thelia\Model\ConfigQuery; use Thelia\Model\ConfigQuery;
use Thelia\Model\Map\ProductTableMap; use Thelia\Model\Map\ProductTableMap;
/** /**
* Class Update * Class Update
* @package Thelia\Install * @package Thelia\Install

View File

@@ -27,13 +27,13 @@ use Thelia\Core\Event\MailTransporterEvent;
use Thelia\Core\Event\TheliaEvents; use Thelia\Core\Event\TheliaEvents;
use Thelia\Model\ConfigQuery; use Thelia\Model\ConfigQuery;
/** /**
* Class MailerFactory * Class MailerFactory
* @package Thelia\Mailer * @package Thelia\Mailer
* @author Manuel Raynaud <mraynaud@openstudio.fr> * @author Manuel Raynaud <mraynaud@openstudio.fr>
*/ */
class MailerFactory { class MailerFactory
{
/** /**
* @var \Swift_Mailer * @var \Swift_Mailer
*/ */
@@ -74,6 +74,7 @@ class MailerFactory {
->setTimeout(ConfigQuery::getSmtpTimeout()) ->setTimeout(ConfigQuery::getSmtpTimeout())
->setSourceIp(ConfigQuery::getSmtpSourceIp()) ->setSourceIp(ConfigQuery::getSmtpSourceIp())
; ;
return $smtpTransporter; return $smtpTransporter;
} }
@@ -87,5 +88,4 @@ class MailerFactory {
return $this->swiftMailer; return $this->swiftMailer;
} }
} }

View File

@@ -22,12 +22,8 @@
/*************************************************************************************/ /*************************************************************************************/
namespace Thelia\Rewriting; namespace Thelia\Rewriting;
use Propel\Runtime\ActiveQuery\Criteria;
use Propel\Runtime\ActiveQuery\Join;
use Thelia\Exception\RewritingUrlException;
use Thelia\Exception\UrlRewritingException; use Thelia\Exception\UrlRewritingException;
use Thelia\Model\RewritingUrlQuery; use Thelia\Model\RewritingUrlQuery;
use Thelia\Model\Map\RewritingUrlTableMap;
/** /**
* Class RewritingResolver * Class RewritingResolver
@@ -93,5 +89,4 @@ class RewritingResolver
return $otherParameters; return $otherParameters;
} }
} }

View File

@@ -22,9 +22,7 @@
/*************************************************************************************/ /*************************************************************************************/
namespace Thelia\Rewriting; namespace Thelia\Rewriting;
use Propel\Runtime\ActiveQuery\Criteria;
use Thelia\Model\RewritingUrlQuery; use Thelia\Model\RewritingUrlQuery;
use Thelia\Model\Map\RewritingUrlTableMap;
use Thelia\Tools\URL; use Thelia\Tools\URL;
/** /**
@@ -87,6 +85,7 @@ class RewritingRetriever
{ {
if (empty($viewOtherParameters)) { if (empty($viewOtherParameters)) {
$this->loadViewUrl($view, $viewLocale, $viewId); $this->loadViewUrl($view, $viewLocale, $viewId);
return; return;
} }

View File

@@ -211,7 +211,6 @@ class Calculator
$currentFixTax += $taxType->fixAmountRetriever($this->product); $currentFixTax += $taxType->fixAmountRetriever($this->product);
$currentTaxFactor += $taxType->pricePercentRetriever(); $currentTaxFactor += $taxType->pricePercentRetriever();
} while ($taxRule = $this->taxRulesCollection->getPrevious()); } while ($taxRule = $this->taxRulesCollection->getPrevious());
$untaxedPrice -= $currentFixTax; $untaxedPrice -= $currentFixTax;

View File

@@ -42,7 +42,7 @@ class TaxEngine
*/ */
protected $session = null; protected $session = null;
static public function getInstance(Session $session = null) public static function getInstance(Session $session = null)
{ {
if (null === self::$instance) { if (null === self::$instance) {
self::$instance = new TaxEngine(); self::$instance = new TaxEngine();

View File

@@ -35,13 +35,13 @@ abstract class BaseTaxType
{ {
protected $requirements = null; protected $requirements = null;
public abstract function pricePercentRetriever(); abstract public function pricePercentRetriever();
public abstract function fixAmountRetriever(Product $product); abstract public function fixAmountRetriever(Product $product);
public abstract function getRequirementsList(); abstract public function getRequirementsList();
public abstract function getTitle(); abstract public function getTitle();
public function calculate(Product $product, $untaxedPrice) public function calculate(Product $product, $untaxedPrice)
{ {

View File

@@ -406,7 +406,6 @@ Sed facilisis pellentesque nisl, eu tincidunt erat scelerisque a. Nullam malesua
$couponManager = new RemoveXAmount($stubFacade); $couponManager = new RemoveXAmount($stubFacade);
$condition1 = new MatchForTotalAmount($stubFacade); $condition1 = new MatchForTotalAmount($stubFacade);
$operators = array( $operators = array(
MatchForTotalAmount::INPUT1 => Operators::SUPERIOR, MatchForTotalAmount::INPUT1 => Operators::SUPERIOR,
@@ -439,7 +438,6 @@ Sed facilisis pellentesque nisl, eu tincidunt erat scelerisque a. Nullam malesua
->method('unserializeConditionCollection') ->method('unserializeConditionCollection')
->will($this->returnValue($conditions)); ->will($this->returnValue($conditions));
$stubContainer->expects($this->any()) $stubContainer->expects($this->any())
->method('get') ->method('get')
->will($this->onConsecutiveCalls($stubFacade, $couponManager, $stubConditionFactory)); ->will($this->onConsecutiveCalls($stubFacade, $couponManager, $stubConditionFactory));

View File

@@ -1190,15 +1190,15 @@ INSERT INTO `country_i18n` (`id`, `locale`, `title`, `description`, `chapo`, `po
INSERT INTO `tax` (`id`, `type`, `serialized_requirements`, `created_at`, `updated_at`) INSERT INTO `tax` (`id`, `type`, `serialized_requirements`, `created_at`, `updated_at`)
VALUES VALUES
(1, 'PricePercentTaxType', 'eyJwZXJjZW50IjoxOS42fQ==', NOW(), NOW()), (1, 'PricePercentTaxType', 'eyJwZXJjZW50IjoiMjAifQ==', NOW(), NOW()),
(2, 'PricePercentTaxType', 'eyJwZXJjZW50Ijo1LjV9', NOW(), NOW()); (2, 'PricePercentTaxType', 'eyJwZXJjZW50IjoiMTAifQ==', NOW(), NOW());
INSERT INTO `tax_i18n` (`id`, `locale`, `title`) INSERT INTO `tax_i18n` (`id`, `locale`, `title`)
VALUES VALUES
(1, 'fr_FR', 'TVA française à 19.6%'), (1, 'fr_FR', 'TVA française à 20%'),
(1, 'en_US', 'French 19.6% VAT'), (1, 'en_US', 'French 20% VAT'),
(2, 'fr_FR', 'TVA française à 5.5%'), (2, 'fr_FR', 'TVA française à 10%'),
(2, 'en_US', 'French 5.5% VAT'); (2, 'en_US', 'French 10% VAT');
INSERT INTO `tax_rule` (`id`, `is_default`, `created_at`, `updated_at`) INSERT INTO `tax_rule` (`id`, `is_default`, `created_at`, `updated_at`)
VALUES VALUES
(1, 1, NOW(), NOW()), (1, 1, NOW(), NOW()),
@@ -1206,10 +1206,10 @@ INSERT INTO `tax_rule` (`id`, `is_default`, `created_at`, `updated_at`)
INSERT INTO `tax_rule_i18n` (`id`, `locale`, `title`) INSERT INTO `tax_rule_i18n` (`id`, `locale`, `title`)
VALUES VALUES
(1, 'fr_FR', 'TVA française à 19.6%'), (1, 'fr_FR', 'TVA française à 20%'),
(1, 'en_US', 'French 19.6% VAT'), (1, 'en_US', 'French 20% VAT'),
(2, 'fr_FR', 'TVA française à 5.5%'), (2, 'fr_FR', 'TVA française à 10%'),
(2, 'en_US', 'French 5.5% VAT'); (2, 'en_US', 'French 10% VAT');
INSERT INTO `tax_rule_country` (`tax_rule_id`, `country_id`, `tax_id`, `position`, `created_at`, `updated_at`) INSERT INTO `tax_rule_country` (`tax_rule_id`, `country_id`, `tax_id`, `position`, `created_at`, `updated_at`)
VALUES VALUES

File diff suppressed because it is too large Load Diff

View File

@@ -6,6 +6,9 @@ return array(
'(edit)' => '(modification)', '(edit)' => '(modification)',
'14.50' => '14.50', '14.50' => '14.50',
'<span id="number_of_generated_combinations">0</span> combinations' => '<span id="number_of_generated_combinations">0</span> combinaisons', '<span id="number_of_generated_combinations">0</span> combinations' => '<span id="number_of_generated_combinations">0</span> combinaisons',
'<strong>Cannot translate all fields.</strong> According to your PHP configuration, forms cannot contains more than
%current_max_input_vars input fields, but at least %required_max_input_vars are required. Please change the value of max_input_vars in your PHP configuration
of change the translation file by hand.' => '<strong>Impossible de traduire tout les champs.</strong> Selon votre configuration PHP, les formulaires ne peuvent pas contenir plus de %current_max_input_vars champs input, mais au moins %required_max_input_vars sont nécessaire. Vous devez changer la valeur max_input_vars dans votre fichier de configuration PHP ou modifier le fichier de traduction manuellement.',
'<strong>Congratulations</strong>, all text is now translated !' => '<strong>Félicitation</strong>, tout est traduit !', '<strong>Congratulations</strong>, all text is now translated !' => '<strong>Félicitation</strong>, tout est traduit !',
'<strong>Did not found any text to translate</strong>. It\'s probably normal. If not, please be sure to use Smarty\'s "intl" function in templates, or the Translator::trans() method in PHP files.' => '<strong>Aucun texte à traduire trouvé</strong>. Cela est probablement normal. Sinon veuillez-vous assurer d\'utiliser la fonction Smarty intl dans vos templates, ou la méthode Translator::trans() dans vos fichiers PHP.', '<strong>Did not found any text to translate</strong>. It\'s probably normal. If not, please be sure to use Smarty\'s "intl" function in templates, or the Translator::trans() method in PHP files.' => '<strong>Aucun texte à traduire trouvé</strong>. Cela est probablement normal. Sinon veuillez-vous assurer d\'utiliser la fonction Smarty intl dans vos templates, ou la méthode Translator::trans() dans vos fichiers PHP.',
'A content could be attached to more than one folder. Select here the additional folders for this content.' => 'Un contenu peut-être lié à un ou plusieurs fichier. Sélectionnez ici les dossiers additionnels pour ce contenu.', 'A content could be attached to more than one folder. Select here the additional folders for this content.' => 'Un contenu peut-être lié à un ou plusieurs fichier. Sélectionnez ici les dossiers additionnels pour ce contenu.',
@@ -78,6 +81,8 @@ return array(
'Can\'t be cumulative' => 'Ne peut être cumulé', 'Can\'t be cumulative' => 'Ne peut être cumulé',
'Can\'t load documents, please refresh this page.' => 'Impossible de charger le document, veuillez rafraîchir cette page.', 'Can\'t load documents, please refresh this page.' => 'Impossible de charger le document, veuillez rafraîchir cette page.',
'Can\'t load images, please refresh this page.' => 'Impossible de charger les images, veuillez rafraîchir cette page.', 'Can\'t load images, please refresh this page.' => 'Impossible de charger les images, veuillez rafraîchir cette page.',
'Can\'t reorder documents, please refresh this page.' => 'Impossible de réorganiser les documents, rafraichissez la page.',
'Can\'t reorder images, please refresh this page.' => 'Impossible de réorganiser les images, rafraichissez la page.',
'Cancel' => 'Annuler', 'Cancel' => 'Annuler',
'Cancel changes and revert to original value' => 'Annuler les modifications et revenir à la version antérieure', 'Cancel changes and revert to original value' => 'Annuler les modifications et revenir à la version antérieure',
'Cancel this order' => 'Annuler cette commande', 'Cancel this order' => 'Annuler cette commande',
@@ -106,6 +111,7 @@ return array(
'Change this tax rule' => 'Modifier cette règle de taxe', 'Change this tax rule' => 'Modifier cette règle de taxe',
'Change this template' => 'Modifier ce template', 'Change this template' => 'Modifier ce template',
'Change this variable' => 'Modifier cette variable', 'Change this variable' => 'Modifier cette variable',
'Chapo' => 'Chapeau',
'Check this box if you want to add this attributes to all product templates' => 'Cochez cette case si vous voulez ajouter cette déclinaison à tous les templates produits', 'Check this box if you want to add this attributes to all product templates' => 'Cochez cette case si vous voulez ajouter cette déclinaison à tous les templates produits',
'Check this box if you want to add this features to all product templates' => 'Cochez cette case si voulez ajouter cette caractéristique à tous les templates produit.', 'Check this box if you want to add this features to all product templates' => 'Cochez cette case si voulez ajouter cette caractéristique à tous les templates produit.',
'Choose a country' => 'Choisissez un pays', 'Choose a country' => 'Choisissez un pays',
@@ -309,6 +315,7 @@ return array(
'Document' => 'Document', 'Document' => 'Document',
'Document informations' => 'Informations sur le document', 'Document informations' => 'Informations sur le document',
'Documents' => 'Documents', 'Documents' => 'Documents',
'Don\'t repeat keywords over and over in a row. Rather, put in keyword phrases.' => 'Ne pas répéter les mots-clés. Il est préférable de les intégrer dans des phrases.',
'Download invoice as PDF' => 'Télécharger la facture au format PDF', 'Download invoice as PDF' => 'Télécharger la facture au format PDF',
'Download purchase order as PDF' => 'Télécharger le bon de commande au format PDF', 'Download purchase order as PDF' => 'Télécharger le bon de commande au format PDF',
'Drop files to upload' => 'Déposez des fichiers à envoyer', 'Drop files to upload' => 'Déposez des fichiers à envoyer',
@@ -430,6 +437,7 @@ return array(
'Enter new currency position' => 'Modifier la position de la devise', 'Enter new currency position' => 'Modifier la position de la devise',
'Enter new feature position' => 'Modifier la position de la caractéristique', 'Enter new feature position' => 'Modifier la position de la caractéristique',
'Enter new folder position' => 'Modifier la position du dossier', 'Enter new folder position' => 'Modifier la position du dossier',
'Enter new module position' => 'Entrez l\'emplacement du nouveau module',
'Enter new product position' => 'Classement du produit', 'Enter new product position' => 'Classement du produit',
'Enter new value position' => 'Entrez une nouvelle position', 'Enter new value position' => 'Entrez une nouvelle position',
'Enter one or more IP V4 addresses separated by ";". Leave empty to display logs for all IP addresses' => 'Entrez une ou plusieurs adresses IP V4 séparées par un ";". Laissez vide afin d\'afficher les logs pour toutes les adresses IP', 'Enter one or more IP V4 addresses separated by ";". Leave empty to display logs for all IP addresses' => 'Entrez une ou plusieurs adresses IP V4 séparées par un ";". Laissez vide afin d\'afficher les logs pour toutes les adresses IP',
@@ -441,6 +449,7 @@ return array(
'Expiration date :' => 'Date de fin de validité', 'Expiration date :' => 'Date de fin de validité',
'Failed to get converted prices. Please try again.' => 'Erreur lors de la récupération des prix convertis. Veuillez réessayer.', '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.', 'Failed to get prices. Please try again.' => 'Erreur lors de la récupération des prix. Veuillez réessayer.',
'Fax number' => 'Numéro de fax',
'Feature Name' => 'Nom de la caractéristique', 'Feature Name' => 'Nom de la caractéristique',
'Feature information' => 'Informations sur la caractéristique', 'Feature information' => 'Informations sur la caractéristique',
'Feature title' => 'Titre de la caractéristique', 'Feature title' => 'Titre de la caractéristique',
@@ -501,6 +510,7 @@ return array(
'Is enabled' => 'Est valide', 'Is enabled' => 'Est valide',
'Is removing postage' => 'Offre les frais de port', 'Is removing postage' => 'Offre les frais de port',
'Is unlimited' => 'Est illimité', 'Is unlimited' => 'Est illimité',
'Keep the most important part of your description in the first 150-160 characters.' => 'Insérez la partie la plus importante de votre description dans les 150-160 premiers caractères.',
'Kg' => 'Kg', 'Kg' => 'Kg',
'Label' => 'Libellé', 'Label' => 'Libellé',
'Language name' => 'Nom de la langue', 'Language name' => 'Nom de la langue',
@@ -528,6 +538,8 @@ return array(
'Mailing template name' => 'Nom du template de mailing', 'Mailing template name' => 'Nom du template de mailing',
'Mailing template purpose' => 'Objectif du template de mailing', 'Mailing template purpose' => 'Objectif du template de mailing',
'Mailing templates' => 'Template e-mail', 'Mailing templates' => 'Template e-mail',
'Make sure it uses keywords found within the page itself.' => 'Assurez-vous d\'utiliser des mot-clés qui apparaissent dans le contenu de la page en cours.',
'Make sure that your title is clear, and contains many of the keywords within the page itself.' => 'Assurez-vous que votre titre est clair et qu\'il contient les mot clés pertinents de la page en cours.',
'Manage module rights' => 'Gestion des accès aux modules', 'Manage module rights' => 'Gestion des accès aux modules',
'Manage resource rights' => 'Gérer les droits d\'accès aux ressources', 'Manage resource rights' => 'Gérer les droits d\'accès aux ressources',
'Manage taxes' => 'Gérer les taxes', 'Manage taxes' => 'Gérer les taxes',
@@ -573,6 +585,9 @@ return array(
'Order n°' => 'Commande n°', 'Order n°' => 'Commande n°',
'Ordered products' => 'Produits commandés', 'Ordered products' => 'Produits commandés',
'Orders' => 'Commandes', 'Orders' => 'Commandes',
'Originating file line number ' => 'Nombre de ligne du fichier d\'origine.',
'Originating file name' => 'Nom du fichier d\'origine.',
'Originating function name ' => 'Nom de la fonction d\'origine.',
'Other addresses' => 'Autres adresses', 'Other addresses' => 'Autres adresses',
'Overall sales' => 'Total des ventes', 'Overall sales' => 'Total des ventes',
'PDF templates' => 'Template PDF', 'PDF templates' => 'Template PDF',
@@ -669,7 +684,7 @@ return array(
'Rewritten URL' => 'URL réécrites', 'Rewritten URL' => 'URL réécrites',
'Rights' => 'Droits', 'Rights' => 'Droits',
'SEO' => 'SEO', 'SEO' => 'SEO',
'Sale' => 'Vente', 'Sale' => 'En promo',
'Sale price incl. taxes' => 'Prix de vente taxes incluses', 'Sale price incl. taxes' => 'Prix de vente taxes incluses',
'Sale price<br />w/ taxes (%currency)' => 'Prix de vente<br />sans taxes (%currency)', 'Sale price<br />w/ taxes (%currency)' => 'Prix de vente<br />sans taxes (%currency)',
'Sale price<br />w/o taxes (%currency)' => 'Prix de vente<br />avec taxes (%currency)', 'Sale price<br />w/o taxes (%currency)' => 'Prix de vente<br />avec taxes (%currency)',
@@ -714,6 +729,7 @@ return array(
'Select which items you want to translate' => 'Sélectionnez quels éléments vous voulez traduire', 'Select which items you want to translate' => 'Sélectionnez quels éléments vous voulez traduire',
'Send a mail to this customer' => 'Contacter ce client par mail', 'Send a mail to this customer' => 'Contacter ce client par mail',
'Send files' => 'Envoyer des fichiers', 'Send files' => 'Envoyer des fichiers',
'Sequential number of log line' => 'Numéro de ligne du log.',
'Set as default tax rule' => 'Configurer en tant que règle par défaut', 'Set as default tax rule' => 'Configurer en tant que règle par défaut',
'Shipping configuration' => 'Configuration du transport', 'Shipping configuration' => 'Configuration du transport',
'Shipping configuration name' => 'Nom de la configuration de livraison', 'Shipping configuration name' => 'Nom de la configuration de livraison',
@@ -740,6 +756,7 @@ return array(
'Status' => 'Etat', 'Status' => 'Etat',
'Store' => 'Magasin', 'Store' => 'Magasin',
'Store Business Identification Number (SIRET, etc).' => 'Numéro d\'identification de votre magasin (SIRET, etc).', 'Store Business Identification Number (SIRET, etc).' => 'Numéro d\'identification de votre magasin (SIRET, etc).',
'Store address' => 'Adresse du magasin',
'Store configuration' => 'Configuration du magasin', 'Store configuration' => 'Configuration du magasin',
'Street address' => 'Adresse', 'Street address' => 'Adresse',
'Subject' => 'Sujet', 'Subject' => 'Sujet',
@@ -763,7 +780,9 @@ return array(
'Template title' => 'Titre du template', 'Template title' => 'Titre du template',
'Templates' => 'Templates', 'Templates' => 'Templates',
'Text version of this message' => 'Version texte de ce message', 'Text version of this message' => 'Version texte de ce message',
'The HTML TITLE element is the most important element on your web page.' => 'La balise HTML TITLE est l\'élément le plus important de votre page.',
'The default pricing is used when no combination is defined.' => 'Le tarif par défaut est utilisé lorsque aucune combinaison n\'est définie.', 'The default pricing is used when no combination is defined.' => 'Le tarif par défaut est utilisé lorsque aucune combinaison n\'est définie.',
'The destinations processes logs to display, store or send them. You can select and configure zero, one or more destinations below.' => 'Destinations des processus de journaux à afficher, stocker ou envoyer. Vous pouvez sélectionner et configurer aucune, une ou plusieurs destinations ci-dessous.',
'The detailed description.' => 'La description détaillée.', 'The detailed description.' => 'La description détaillée.',
'The mailing template in HTML format.' => 'Le template de mailing au format HTML', 'The mailing template in HTML format.' => 'Le template de mailing au format HTML',
'The mailing template in text-only format.' => 'Le template de mailing en format text-only.', 'The mailing template in text-only format.' => 'Le template de mailing en format text-only.',
@@ -821,7 +840,7 @@ return array(
'This year' => 'Cette année', 'This year' => 'Cette année',
'Timeout' => 'Timeout', 'Timeout' => 'Timeout',
'Timeout :' => 'Timeout:', 'Timeout :' => 'Timeout:',
'Title' => 'Civilité', 'Title' => 'Titre',
'Title :' => 'Titre', 'Title :' => 'Titre',
'To' => 'A', 'To' => 'A',
'To create a new content, select an existing folder, or create a new one.' => 'Piur créer un nouveau contenu, choisissez un des dossiers ci dessus, ou créez un nouveau dossier.', 'To create a new content, select an existing folder, or create a new one.' => 'Piur créer un nouveau contenu, choisissez un des dossiers ci dessus, ou créez un nouveau dossier.',
@@ -855,6 +874,7 @@ return array(
'Use Text message defined below' => 'Utiliser le message Text défini ci-dessous', 'Use Text message defined below' => 'Utiliser le message Text défini ci-dessous',
'Use address by default' => 'Utiliser comme adresse par défaut', 'Use address by default' => 'Utiliser comme adresse par défaut',
'Use default layout' => 'Utiliser le layout par défaut', 'Use default layout' => 'Utiliser le layout par défaut',
'Use the keyword phrase in your URL.' => 'Utilisez les mot-clés importants de la page dans votre URL.',
'Use this address by default' => 'Utiliser comme adresse par défaut', 'Use this address by default' => 'Utiliser comme adresse par défaut',
'Used in your store front' => 'Utilisé dans votre vitrine', 'Used in your store front' => 'Utilisé dans votre vitrine',
'Username' => 'Nom d\'utilisateur', 'Username' => 'Nom d\'utilisateur',
@@ -887,6 +907,7 @@ return array(
'You can change the default folder (%title) in the "General" tab.' => 'Vous pouvez modifier le dossier par défaut (%title) dans l\'onglet "Général".', 'You can change the default folder (%title) in the "General" tab.' => 'Vous pouvez modifier le dossier par défaut (%title) dans l\'onglet "Général".',
'You can\'t delete this administrator' => 'Vous ne pouvez pas supprimer cet administrateur', 'You can\'t delete this administrator' => 'Vous ne pouvez pas supprimer cet administrateur',
'You can\'t delete this profile' => 'Vous ne pouvez pas supprimer ce profil', 'You can\'t delete this profile' => 'Vous ne pouvez pas supprimer ce profil',
'You don\'t need to use commas or other punctuations.' => 'Il n\'est pas nécessaire d\'utiliser d\'apostrophe ou autre ponctuation.',
'Your current IP address is %ip' => 'Votre adresse IP courante est %ip', 'Your current IP address is %ip' => 'Votre adresse IP courante est %ip',
'Zip code' => 'Code postal', 'Zip code' => 'Code postal',
'Zones' => 'Zones', 'Zones' => 'Zones',

View File

@@ -3,17 +3,19 @@
return array( return array(
'%nb Item' => '%nb produit', '%nb Item' => '%nb produit',
'%nb Items' => '%nb produits', '%nb Items' => '%nb produits',
'+' => '+',
'+ View All' => '+ Voir tout', '+ View All' => '+ Voir tout',
'404' => '404', '404' => '404',
'<strong>Sorry!</strong> We are not able to give you a delivery method for your order.' => '<strong>Désolé !</strong> Nous n\'avons aucune méthode de livraison pour votre commande.',
'A summary of your order email has been sent to the following address' => 'Un récapitulatif de commande vows a été envoyé par e-mail à l\'adresse suivante : ', 'A summary of your order email has been sent to the following address' => 'Un récapitulatif de commande vows a été envoyé par e-mail à l\'adresse suivante : ',
'Account' => 'Mon compte', 'Account' => 'Mon compte',
'Add a new address' => 'Ajouter une nouvelle adresse', 'Add a new address' => 'Ajouter une nouvelle adresse',
'Add to cart' => 'Ajouter au panier', 'Add to cart' => 'Ajouter au panier',
'Additional Info' => 'Informations complémentaires', 'Additional Info' => 'Informations complémentaires',
'Address' => 'Adresse',
'Address %nb' => 'Adresse n°', 'Address %nb' => 'Adresse n°',
'Address Update' => 'Mise à jour de l\'adresse', 'Address Update' => 'Mise à jour de l\'adresse',
'Address' => 'Adresse', 'All rights reserved.' => 'Tout droits réservés.',
'Address Line 2'=>'Complément d\'adresse',
'Amount' => 'Montant', 'Amount' => 'Montant',
'Availability' => 'Disponibilité', 'Availability' => 'Disponibilité',
'Available' => 'Disponible', 'Available' => 'Disponible',
@@ -23,102 +25,95 @@ return array(
'Cancel' => 'Annuler', 'Cancel' => 'Annuler',
'Cart' => 'Panier', 'Cart' => 'Panier',
'Categories' => 'Catégories', 'Categories' => 'Catégories',
'Cellphone'=> 'Portable', 'Change Password' => 'Modifier mon mot de passe',
'Change address' => 'Changer d\'adresse', 'Change address' => 'Changer d\'adresse',
'Change my account information' => 'Modifier mes informations personnelles', 'Change my account information' => 'Modifier mes informations personnelles',
'Change my password' => 'Changer mon mot de passe', 'Change my password' => 'Changer mon mot de passe',
'Change Password' => 'Modifier mon mot de passe',
'Check my order' => 'Vérifier ma commmande', 'Check my order' => 'Vérifier ma commmande',
'Checkout' => 'Payer', 'Checkout' => 'Payer',
'Choose your delivery address' => 'Choisissez une adresse de livraison', 'Choose your delivery address' => 'Choisissez une adresse de livraison',
'Choose your delivery method' => 'Choisissez votre moyen de livraison', 'Choose your delivery method' => 'Choisissez votre moyen de livraison',
'Choose your payment method' => 'Choisissez voter moyen de paiement', 'Choose your payment method' => 'Choisissez voter moyen de paiement',
'Code :' => 'Code', 'Code :' => 'Code',
'Company Name'=>'Entreprise',
'Complementary address' => 'Résidence secondaire',
'Contact Us' => 'Contactez-nous', 'Contact Us' => 'Contactez-nous',
'Continue Shopping' => 'Continuer mes achats', 'Continue Shopping' => 'Continuer mes achats',
'Copyright' => 'Copyright', 'Copyright' => 'Copyright',
'Coupon code' => 'Code promo', 'Coupon code' => 'Code promo',
'Create' => 'Créer',
'Create New Account' => 'Créer un nouveau compte', 'Create New Account' => 'Créer un nouveau compte',
'Create New Address' => 'Créer une nouvelle adresse', 'Create New Address' => 'Créer une nouvelle adresse',
'Create' => 'Créer', 'Currency' => 'Devise',
'Currency:' => 'Monnaie', 'Currency:' => 'Devise',
'Date' => 'Date', 'Date' => 'Date',
'Delete address' => 'Supprimer cette adresse',
'Delivery address' => 'Adresse de livraison',
'Delivery Information' => 'Informations de livraison', 'Delivery Information' => 'Informations de livraison',
'Delivery address' => 'Adresse de livraison',
'Demo product description' => 'Exemple de description de produit', 'Demo product description' => 'Exemple de description de produit',
'Demo product title' => 'Exemple de titre', 'Demo product title' => 'Exemple de titre',
'Description' => 'Description', 'Description' => 'Description',
'Do you have an account?' => 'Avez-vous déjà un compte ?', 'Do you have an account?' => 'Avez-vous déjà un compte ?',
'Do you really want to delete this address ?' => 'Voulez-vous vraiment supprimer cette adresse ?', 'Do you really want to delete this address ?' => 'Voulez-vous vraiment supprimer cette adresse ?',
'Edit this address' => 'Editer cette adresse',
'Edit' => 'Editer', 'Edit' => 'Editer',
'Edit this address' => 'Editer cette adresse',
'Email address' => 'Adresse e-mail', 'Email address' => 'Adresse e-mail',
'Email Address' => 'Adresse e-mail', 'Email not displaying correctly?' => 'L\'e-mail ne s\'affiche pas correctement ?',
'Facebook' => 'Facebook',
'Follow us' => 'Suivez-nous', 'Follow us' => 'Suivez-nous',
'Follow us introduction' => 'Sur les réseaux :', 'Follow us introduction' => 'Sur les réseaux :',
'Forgot your Password?' => 'Mot de passe oublié ?', 'Forgot your Password?' => 'Mot de passe oublié ?',
'Free shipping' => 'Livraison gratuite', 'Free shipping' => 'Livraison gratuite',
'Go home' => 'Retour à l\'accueil', 'Go home' => 'Retour à l\'accueil',
'Google+' => 'Google+',
'Grid' => 'Grille', 'Grid' => 'Grille',
'Home address' => 'Résidence principale',
'Home' => 'Accueil', 'Home' => 'Accueil',
'In Stock' => 'Disponible', 'In Stock' => 'Disponible',
'instead of' => 'au lieu de', 'Instagram' => 'Instagram',
'Item(s)' => 'Produit(s)', 'Language' => 'Langue',
'I would like to receive the newsletter or the latest news.' => 'Je veux m\'inscrire à la newsletter pour rester informé.',
'Language:' => 'Langue', 'Language:' => 'Langue',
'Latest' => 'Nouveautés',
'Latest articles' => 'Nouveaux articles', 'Latest articles' => 'Nouveaux articles',
'Latest products' => 'Derniers produits', 'Latest products' => 'Derniers produits',
'Latest' => 'Nouveautés',
'List of orders' => 'Liste de mes commandes',
'List' => 'Liste', 'List' => 'Liste',
'List of orders' => 'Liste de mes commandes',
'Log In!' => 'Se connecter', 'Log In!' => 'Se connecter',
'Log out!' => 'Se déconnecter', 'Log out!' => 'Se déconnecter',
'Login Information' => 'Informations de connexion',
'Login' => 'Connexion', 'Login' => 'Connexion',
'Login Information' => 'Informations de connexion',
'Main Navigation' => 'Navigation principale', 'Main Navigation' => 'Navigation principale',
'Minimum 2 characters.' => '2 caractères minimum.', 'Minimum 2 characters.' => '2 caractères minimum.',
'missing or invalid data' => 'Information éronnée ou incomplète', 'Multi-payment platform' => 'Plateforme de paiement en ligne',
'Multi-payment platform' => 'Plateforme de paiement en ligne',// bizarre ?
'My Account' => 'Mon compte', 'My Account' => 'Mon compte',
'My Address book' => 'Mon carnet d\'adresses',
'My Address Books' => 'Mes carnets d\'adresses', 'My Address Books' => 'Mes carnets d\'adresses',
'My order' => 'Ma commande', 'My Address book' => 'Mon carnet d\'adresses',
'My Orders' => 'Mes commandes', 'My Orders' => 'Mes commandes',
'My order' => 'Ma commande',
'Name' => 'Nom',
'Name ascending' => 'Nom croissant', 'Name ascending' => 'Nom croissant',
'Name descending' => 'Nom décroissant', 'Name descending' => 'Nom décroissant',
'Name' => 'Nom',
'Need help ?' => 'Besoin d\'aide? ', 'Need help ?' => 'Besoin d\'aide? ',
'Newsletter Subscription' => 'Inscription à la newsletter',
'Newsletter' => 'Newsletter', 'Newsletter' => 'Newsletter',
'Next product' => 'Produits suivants', 'Newsletter Subscription' => 'Inscription à la newsletter',
'Next' => 'Suivant',
'Next Step' => 'Etape suivante', 'Next Step' => 'Etape suivante',
'Next' => 'Suivant', 'Next product' => 'Produits suivants',
'Next' => 'Suivant', 'No Content in this folder.' => 'Aucun contenu dans ce dossier.',
'No articles currently' => 'Actuellement aucun article', 'No articles currently' => 'Actuellement aucun article',
'No, I am a new customer.' => 'Non, je suis un nouveau client.',
'No products available in this category' => 'Aucun produit dans cette catégorie.', 'No products available in this category' => 'Aucun produit dans cette catégorie.',
'No results found' => 'Aucun résultat', 'No results found' => 'Aucun résultat',
'No' => 'Non',
'No.' => 'N°', 'No.' => 'N°',
'Offers' => 'Promotions', 'Offers' => 'Promotions',
'Ok' => 'Ok', 'Ok' => 'Ok',
'Order details' => 'Détail de commande', 'Order details' => 'Détail de commande',
'Order number' => 'Commande numéro', 'Order number' => 'Commande numéro',
'Orders over $50' => 'Commandes supérieures à 50€',//ne devrait-on pas mettre une variable ici? 'Orders over $50' => 'Commandes supérieures à 50€',
'Out of stock' => 'Indisponible', 'Our mailing address is:' => 'Notre adresse mail est :',
'Out of Stock' => 'Hors stock',
'Pagination' => 'Pagination', 'Pagination' => 'Pagination',
'Password Forgotten' => 'Mot de passe oublié',
'Password' => 'Mot de passe', 'Password' => 'Mot de passe',
'Password confirmation'=>"Confirmer le mot de passe", 'Password Forgotten' => 'Mot de passe oublié',
'per page' => 'par page',
'Personal Information' => 'Informations personnelles', 'Personal Information' => 'Informations personnelles',
'Placeholder address label' => 'Maison, Domicile, Travail...', 'Placeholder address label' => 'Maison, Domicile, Travail...',
'Placeholder address1' => 'Adresse', 'Placeholder address1' => 'Adresse',
'Placeholder address2' => '', 'Placeholder address2' => 'Adresse suite',
'Placeholder cellphone' => 'Portable', 'Placeholder cellphone' => 'Portable',
'Placeholder city' => 'Ville', 'Placeholder city' => 'Ville',
'Placeholder company' => 'Compagnie', 'Placeholder company' => 'Compagnie',
@@ -131,46 +126,43 @@ return array(
'Placeholder lastname' => 'Nom de famille', 'Placeholder lastname' => 'Nom de famille',
'Placeholder phone' => 'Téléphone', 'Placeholder phone' => 'Téléphone',
'Placeholder zipcode' => 'Code postal', 'Placeholder zipcode' => 'Code postal',
'Please enter your email address' => 'Veuillez saisir votre adresse e-mail',
'Please enter your email address below.' => 'Veuillez saisir votre adresse e-mail ci-dessous.', 'Please enter your email address below.' => 'Veuillez saisir votre adresse e-mail ci-dessous.',
'Position' => 'Position', 'Position' => 'Position',
'Previous product' => 'Produits précédents',
'Previous' => 'Précédent', 'Previous' => 'Précédent',
'Previous product' => 'Produits précédents',
'Price' => 'Prix',
'Price ascending' => 'Prix croissant', 'Price ascending' => 'Prix croissant',
'Price descending' => 'Prix décroissant', 'Price descending' => 'Prix décroissant',
'Price' => 'Prix',
'Proceed checkout' => 'Payer', 'Proceed checkout' => 'Payer',
'Product Empty Button' => 'Ajouter mon premier produit', 'Product Empty Button' => 'Ajouter mon premier produit',
'Product Empty Message' => 'C\'est très simple d\'ajouter un produit dans l\'adminsitration. 'Product Empty Message' => 'C\'est très simple d\'ajouter un produit dans l\'administration. <ol> <li>N\'oubliez pas de sélectionner <strong>NEW</strong> dans l\'onglet Details afin de voir votre produit dans la section des nouveautés.</li> <li>N\'oubliez pas de sélectionner <strong>SALE</strong> dans l\'onglet Details afin de voir votre produit dans la section des promotions.</li> </ol>',
<ol>
<li>N\'oubliez pas de sélectionner <strong>NEW</strong> dans l\'onglet Details afin de voir votre produit dans la section des nouveautés.</li>
<li>N\'oubliez pas de sélectionner <strong>SALE</strong> dans l\'onglet Details afin de voir votre produit dans la section des promotions.</li>
</ol>',
'Product Empty Title' => 'Bonjour', 'Product Empty Title' => 'Bonjour',
'Product Name' => 'Nom du produit', 'Product Name' => 'Nom du produit',
'Product Offers' => 'Produits en promotion', 'Product Offers' => 'Produits en promotion',
'products' => 'produits',
'Qty' => 'Qté', 'Qty' => 'Qté',
'Quantity' => 'Quantité', 'Quantity' => 'Quantité',
'Questions ? See or F.A.Q.' => 'Des questions ? Voir la F.A.Q.', // bizarre le 'see or ' 'Questions ? See or F.A.Q.' => 'Des questions ? Voir la F.A.Q.',
'RSS' => 'RSS',
'Rating' => 'Avis', 'Rating' => 'Avis',
'Ref.' => '', 'Ref.' => 'Ref.',
'Register!' => 'S\'inscrire !',
'Register' => 'S\'inscrire', 'Register' => 'S\'inscrire',
'Register!' => 'S\'inscrire !',
'Regular Price:' => 'Prix :', 'Regular Price:' => 'Prix :',
'Related' => 'Liés', // voir le contexte pour l'accord 'Related' => 'Liés',
'Remove this address' => 'Supprimer cette adresse',
'Remove' => 'Supprimer', 'Remove' => 'Supprimer',
'Search a product' => 'Chercher un produit', 'Remove this address' => 'Supprimer cette adresse',
'Search Result for' => 'Résultat de recherche pour', 'SELECT YOUR CURRENCY' => 'Sélectionnez votre devise',
'SELECT YOUR LANGUAGE' => 'Sélectionnez votre langue',
'Search' => 'Recherche', 'Search' => 'Recherche',
'Search Result for' => 'Résultat de recherche pour',
'Search a product' => 'Chercher un produit',
'Search...' => 'Recherche…', 'Search...' => 'Recherche…',
'Secure payment' => 'Paiement sécurisé',
'Secure Payment' => 'Paiement sécurisé', 'Secure Payment' => 'Paiement sécurisé',
'Secure payment' => 'Paiement sécurisé',
'Select Country' => 'Choisissez un pays', 'Select Country' => 'Choisissez un pays',
'Select Title' => 'Civilité', 'Select Title' => 'Civilité',
'Send us a message' => 'Envoyer nous un message',
'Send' => 'Envoyer', 'Send' => 'Envoyer',
'Send us a message' => 'Envoyer nous un message',
'Shipping Tax' => 'Frais de livraison', 'Shipping Tax' => 'Frais de livraison',
'Show' => 'Voir', 'Show' => 'Voir',
'Sign In' => 'Se connecter', 'Sign In' => 'Se connecter',
@@ -179,32 +171,31 @@ return array(
'Sort By' => 'Trier par', 'Sort By' => 'Trier par',
'Special Price:' => 'Prix en promotion :', 'Special Price:' => 'Prix en promotion :',
'Status' => 'Etat', 'Status' => 'Etat',
'Street Address'=>"Adresse",
'Subscribe' => 'Inscription', 'Subscribe' => 'Inscription',
'Tax Inclusive' => 'TVA incluse',
'Thank you for the trust you place in us.' => 'Merci pour votre confiance. ', 'Thank you for the trust you place in us.' => 'Merci pour votre confiance. ',
'Thanks !' => 'Merci !', 'Thanks !' => 'Merci !',
'Thanks for signing up! We\'ll keep you posted whenever we have any new updates.' => '', 'Thanks for signing up! We\'ll keep you posted whenever we have any new updates.' => 'Merci de votre inscription ! Nous vous tiendrons informé dès qu\'il y aura des nouveautés.',
'Thanks for your message, we will contact as soon as possible.' => '', 'Thanks for your message, we will contact as soon as possible.' => 'Merci de votre message, nous vous contacterons dès que possible.',
'The page cannot be found' => '', 'The page cannot be found' => 'La page ne peut pas être trouvée',
'Thelia V2' => 'Thelia v2', 'Thelia V2' => 'Thelia v2',
'Toggle navigation' => 'Navigation alternative', 'Toggle navigation' => 'Navigation alternative',
'Total' => 'Total', 'Total' => 'Total',
'TTC' => 'TTC', 'Twitter' => 'Twitter',
'Unit Price' => 'Prix unitaire', 'Unit Price' => 'Prix unitaire',
'Update Profile' => 'Mettre à jour votre profil',
'Update' => 'Mettre à jour', 'Update' => 'Mettre à jour',
'Update Profile' => 'Mettre à jour votre profil',
'Update Quantity' => 'Mettre à jour la quantité',
'Upsell Products' => 'Nous vous proposons également', 'Upsell Products' => 'Nous vous proposons également',
'Useful links' => 'Liens utiles', 'Useful links' => 'Liens utiles',
'View' => 'Voir',
'View Cart' => 'Voir mon panier',
'View all' => ' Voir tout', 'View all' => ' Voir tout',
'View as' => 'Voir en tant que ', 'View as' => 'Voir en tant que ',
'View Cart' => 'Voir mon panier', 'View it in your browser' => 'Visualiser le dans votre navigateur.',
'View order %ref as pdf document' => 'Ouvrir la commande %ref dans un pdf', 'View order %ref as pdf document' => 'Ouvrir la commande %ref dans un pdf',
'View product' => 'Voir le produit', 'View product' => 'Voir le produit',
'View' => 'Voir',
'Warning' => 'Attention', 'Warning' => 'Attention',
'Yes' => 'Oui', 'Welcome to Thelia. This is a demo site built with Thelia V2 an E-Commerce solution based on Symfony 2.' => 'Bienvenue sur cette boutique Thelia. ce site est une version demo motorisée par la solution e-commerce Thelia v2 basée sur symfony 2.',
'Yes, I have a password :' => 'Oui, j\'ai déjà un mot de passe',
'You are here:' => 'Vous êtes ici :', 'You are here:' => 'Vous êtes ici :',
'You choose to pay by' => 'Vous avez choisi de payer par', 'You choose to pay by' => 'Vous avez choisi de payer par',
'You don\'t have orders yet.' => 'Vous n\'avez pas encore de commande.', 'You don\'t have orders yet.' => 'Vous n\'avez pas encore de commande.',
@@ -215,4 +206,8 @@ return array(
'Your Cart' => 'Votre panier', 'Your Cart' => 'Votre panier',
'Your email address' => 'Votre adresse e-mail', 'Your email address' => 'Votre adresse e-mail',
'Your order will be confirmed by us upon receipt of your payment.' => 'Votre commande sera confirmée à réception de votre pavement.', 'Your order will be confirmed by us upon receipt of your payment.' => 'Votre commande sera confirmée à réception de votre pavement.',
'Youtube' => 'Youtube',
'instead of' => 'au lieu de',
'missing or invalid data' => 'Information éronnée ou incomplète',
'per page' => 'par page',
); );