From de1f75df1201a9568ba5dd5deac84bf40a6eb78c Mon Sep 17 00:00:00 2001 From: Steffen Mahler Date: Tue, 5 May 2020 15:46:02 +0200 Subject: [PATCH 01/12] fix discount calulation for percentage coupon, various bug fixes in tax rounding, add test --- .../Webkul/CartRule/src/Helpers/CartRule.php | 18 ++- packages/Webkul/Checkout/src/Cart.php | 22 ++++ packages/Webkul/Tax/src/Helpers/Tax.php | 16 +-- tests/unit/CartRule/CartRuleCest.php | 124 +++++++++++++++--- tests/unit/Tax/Helpers/TaxCest.php | 8 +- 5 files changed, 151 insertions(+), 37 deletions(-) diff --git a/packages/Webkul/CartRule/src/Helpers/CartRule.php b/packages/Webkul/CartRule/src/Helpers/CartRule.php index 2ea493156..83e47f6d2 100644 --- a/packages/Webkul/CartRule/src/Helpers/CartRule.php +++ b/packages/Webkul/CartRule/src/Helpers/CartRule.php @@ -324,16 +324,14 @@ class CartRule break; } - $item->discount_amount = round( - min( - $item->discount_amount + $discountAmount, - $item->price * $quantity + $item->tax_amount - ),2); - $item->base_discount_amount = round( - min( - $item->base_discount_amount + $baseDiscountAmount, - $item->base_price * $quantity + $item->base_tax_amount - ), 2); + $item->discount_amount = min( + $item->discount_amount + $discountAmount, + $item->price * $quantity + $item->tax_amount + ); + $item->base_discount_amount = min( + $item->base_discount_amount + $baseDiscountAmount, + $item->base_price * $quantity + $item->base_tax_amount + ); $appliedRuleIds[$rule->id] = $rule->id; diff --git a/packages/Webkul/Checkout/src/Cart.php b/packages/Webkul/Checkout/src/Cart.php index 947d68ef1..41896fa8e 100755 --- a/packages/Webkul/Checkout/src/Cart.php +++ b/packages/Webkul/Checkout/src/Cart.php @@ -2,6 +2,7 @@ namespace Webkul\Checkout; +use Webkul\Checkout\Models\Cart as CartModel; use Webkul\Checkout\Models\CartAddress; use Webkul\Checkout\Repositories\CartRepository; use Webkul\Checkout\Repositories\CartItemRepository; @@ -600,6 +601,8 @@ class Cart $cart->base_discount_amount += $shipping->base_discount_amount; } + $cart = $this->finalizeCartTotals($cart); + $quantities = 0; foreach ($cart->items as $item) { @@ -1052,6 +1055,25 @@ class Cart } } + /** + * Round cart totals + * + * @param \Webkul\Checkout\Models\Cart $cart + * + * @return \Webkul\Checkout\Models\Cart + */ + private function finalizeCartTotals(CartModel $cart): CartModel + { + $cart->discount_amount = round($cart->discount_amount, 2); + $cart->base_discount_amount = round($cart->base_discount_amount, 2); + + $cart->grand_total = round($cart->grand_total, 2); + $cart->grand_total = round($cart->grand_total, 2); + $cart->base_grand_total = round($cart->base_grand_total, 2); + + return $cart; + } + /** * @param $user * diff --git a/packages/Webkul/Tax/src/Helpers/Tax.php b/packages/Webkul/Tax/src/Helpers/Tax.php index 0c91acb6f..a52e056e9 100644 --- a/packages/Webkul/Tax/src/Helpers/Tax.php +++ b/packages/Webkul/Tax/src/Helpers/Tax.php @@ -13,16 +13,16 @@ class Tax /** * Returns an array with tax rates and tax amount * - * @param \Webkul\Checkout\Contracts\Cart $cart - * @param bool $asBase + * @param object $that + * @param bool $asBase * * @return array */ - public static function getTaxRatesWithAmount(\Webkul\Checkout\Contracts\Cart $cart, bool $asBase = false): array + public static function getTaxRatesWithAmount(object $that, bool $asBase = false): array { $taxes = []; - foreach ($cart->items as $item) { + foreach ($that->items as $item) { $taxRate = (string) round((float) $item->tax_percent, self::TAX_RATE_PRECISION); if (! array_key_exists($taxRate, $taxes)) { @@ -43,14 +43,14 @@ class Tax /** * Returns the total tax amount * - * @param \Webkul\Checkout\Contracts\Cart $cart - * @param bool $asBase + * @param object $that + * @param bool $asBase * * @return float */ - public static function getTaxTotal(\Webkul\Checkout\Contracts\Cart $cart, bool $asBase = false): float + public static function getTaxTotal(object $that, bool $asBase = false): float { - $taxes = self::getTaxRatesWithAmount($cart, $asBase); + $taxes = self::getTaxRatesWithAmount($that, $asBase); $result = 0; diff --git a/tests/unit/CartRule/CartRuleCest.php b/tests/unit/CartRule/CartRuleCest.php index cf8e4b683..0202929b8 100644 --- a/tests/unit/CartRule/CartRuleCest.php +++ b/tests/unit/CartRule/CartRuleCest.php @@ -36,7 +36,7 @@ class cartRuleWithCoupon class expectedCartItem { - public const ITEM_DISCOUNT_AMOUNT_PRECISION = 2; + public const ITEM_DISCOUNT_AMOUNT_PRECISION = 4; public const ITEM_TAX_AMOUNT_PRECISION = 4; public $cart_id; @@ -106,6 +106,7 @@ class expectedCartItem class expectedCart { public const CART_TOTAL_PRECISION = 2; + public const CART_GRAND_TOTAL_PRECISION = 4; public $customer_id; public $id; @@ -138,11 +139,15 @@ class expectedCart { $this->sub_total = round($this->sub_total, self::CART_TOTAL_PRECISION); $this->tax_total = round($this->tax_total, self::CART_TOTAL_PRECISION); - $this->grand_total = round($this->sub_total + $this->tax_total - $this->discount_amount, self::CART_TOTAL_PRECISION); + $this->discount_amount = round($this->discount_amount, self::CART_TOTAL_PRECISION); + $this->grand_total = round($this->sub_total + $this->tax_total - $this->discount_amount, + self::CART_GRAND_TOTAL_PRECISION); $this->base_sub_total = round($this->base_sub_total, self::CART_TOTAL_PRECISION); $this->base_tax_total = round($this->base_tax_total, self::CART_TOTAL_PRECISION); - $this->base_grand_total = round($this->base_sub_total + $this->base_tax_total - $this->base_discount_amount, self::CART_TOTAL_PRECISION); + $this->base_discount_amount = round($this->base_discount_amount, self::CART_TOTAL_PRECISION); + $this->base_grand_total = round($this->base_sub_total + $this->base_tax_total - $this->base_discount_amount, + self::CART_GRAND_TOTAL_PRECISION); } public function toArray(): array @@ -579,6 +584,102 @@ class CartRuleCest } } + public function checkExampleCase(UnitTester $I) + { + config(['app.default_country' => 'DE']); + + $faker = Factory::create(); + + $customer = $I->have(Customer::class); + + auth()->guard('customer')->loginUsingId($customer->id); + Event::dispatch('customer.after.login', $customer['email']); + + $this->sessionToken = $faker->uuid; + session(['_token' => $this->sessionToken]); + + $tax = $I->have(TaxRate::class, [ + 'country' => 'DE', + 'tax_rate' => 19.0, + ]); + + $taxCategorie = $I->have(TaxCategory::class); + + $I->have(TaxMap::class, [ + 'tax_rate_id' => $tax->id, + 'tax_category_id' => $taxCategorie->id, + ]); + + $productConfig = [ + 'attributeValues' => [ + 'price' => 23.92, + 'tax_category_id' => $taxCategorie->id, + ], + ]; + $product = $I->haveProduct(Laravel5Helper::SIMPLE_PRODUCT, $productConfig); + + $ruleConfig = [ + 'action_type' => self::ACTION_TYPE_PERCENTAGE, + 'discount_amount' => 100, + 'conditions' => [ + [ + 'attribute' => 'product|sku', + 'value' => $product->sku, + 'operator' => '==', + 'attribute_type' => 'text', + ], + ], + ]; + $cartRule = $I->have(CartRule::class, $ruleConfig); + + DB::table('cart_rule_channels')->insert([ + 'cart_rule_id' => $cartRule->id, + 'channel_id' => core()->getCurrentChannel()->id, + ]); + + $guestCustomerGroup = $I->grabRecord('customer_groups', ['code' => 'guest']); + DB::table('cart_rule_customer_groups')->insert([ + 'cart_rule_id' => $cartRule->id, + 'customer_group_id' => $guestCustomerGroup['id'], + ]); + + $generalCustomerGroup = $I->grabRecord('customer_groups', ['code' => 'general']); + DB::table('cart_rule_customer_groups')->insert([ + 'cart_rule_id' => $cartRule->id, + 'customer_group_id' => $generalCustomerGroup['id'], + ]); + + $coupon = $I->have(CartRuleCoupon::class, [ + 'code' => 'AWESOME', + 'cart_rule_id' => $cartRule->id, + ]); + + + $data = [ + '_token' => session('_token'), + 'product_id' => $product->id, + 'quantity' => 1, + ]; + cart()->addProduct($product->id, $data); + cart()->setCouponCode('AWESOME')->collectTotals(); + + $cart = cart()->getCart(); + $cartItem = $cart->items()->first(); + + $I->assertEquals('AWESOME', $cartItem['coupon_code']); + $I->assertEquals(23.92, $cartItem['price']); + $I->assertEquals(19.0, $cartItem['tax_percent']); + $I->assertEquals(4.5448, $cartItem['tax_amount']); + $I->assertEquals(28.4648, $cartItem['discount_amount']); + + $I->assertEquals('AWESOME', $cart->coupon_code); + $I->assertEquals(23.92, $cart->sub_total); + $I->assertEquals(4.54, $cart->tax_total); + $I->assertEquals(28.46, $cart->discount_amount); + // 23.92 + 4.54 - 28.46 = 0.00 + $I->assertEquals(0.00, $cart->grand_total); + } + /** * @param \Codeception\Example $scenario * @param \Tests\Unit\Category\cartRuleWithCoupon $cartRuleWithCoupon @@ -586,19 +687,15 @@ class CartRuleCest * * @return array */ - private function getExpectedCartItems( - Example $scenario, - ?cartRuleWithCoupon $cartRuleWithCoupon, - int $cartID - ): array { + private function getExpectedCartItems(Example $scenario, ?cartRuleWithCoupon $cartRuleWithCoupon, int $cartID): array + { $cartItems = []; foreach ($scenario['productSequence'] as $key => $item) { $pos = $this->array_find( 'product_id', $this->products[$scenario['productSequence'][$key]]->id, - $cartItems, - true + $cartItems ); if ($pos === null) { @@ -793,11 +890,8 @@ class CartRuleCest * * @return \Tests\Unit\Category\expectedCart */ - private function getExpectedCart( - int $cartId, - array $expectedCartItems, - ?cartRuleWithCoupon $cartRuleWithCoupon - ): expectedCart { + private function getExpectedCart(int $cartId, array $expectedCartItems, ?cartRuleWithCoupon $cartRuleWithCoupon): expectedCart + { $cart = new expectedCart( $cartId, auth()->guard('customer')->user()->id diff --git a/tests/unit/Tax/Helpers/TaxCest.php b/tests/unit/Tax/Helpers/TaxCest.php index 4dd4c843a..dc775952a 100644 --- a/tests/unit/Tax/Helpers/TaxCest.php +++ b/tests/unit/Tax/Helpers/TaxCest.php @@ -17,7 +17,6 @@ class TaxCest private const PRODUCT2_QTY = 7; private const CART_TOTAL_PRECISION = 2; - private const TAX_AMOUNT_PRECISION = 2; public function _before(UnitTester $I) { @@ -73,16 +72,17 @@ class TaxCest 'quantity' => self::PRODUCT2_QTY, ]); + // rounded by precision of 2 because this are sums of corresponding tax categories $expectedTaxAmount1 = round( round(self::PRODUCT1_QTY * $product1->price, self::CART_TOTAL_PRECISION) * $tax1->tax_rate / 100, - self::TAX_AMOUNT_PRECISION + self::CART_TOTAL_PRECISION ); $expectedTaxAmount2 = round( round(self::PRODUCT2_QTY * $product2->price, self::CART_TOTAL_PRECISION) * $tax2->tax_rate / 100, - self::TAX_AMOUNT_PRECISION + self::CART_TOTAL_PRECISION ); $this->scenario = [ @@ -92,7 +92,7 @@ class TaxCest (string)round((float)$tax2->tax_rate, 4) => $expectedTaxAmount2, ], 'expectedTaxTotal' => - round($expectedTaxAmount1 + $expectedTaxAmount2, self::TAX_AMOUNT_PRECISION), + round($expectedTaxAmount1 + $expectedTaxAmount2, self::CART_TOTAL_PRECISION), ]; } From 3f160c8fe6708bcd1d843e129bb3b447d7a5cf6d Mon Sep 17 00:00:00 2001 From: Steffen Mahler Date: Tue, 5 May 2020 15:59:13 +0200 Subject: [PATCH 02/12] remove constant value --- tests/unit/CartRule/CartRuleCest.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/unit/CartRule/CartRuleCest.php b/tests/unit/CartRule/CartRuleCest.php index 0202929b8..17d334acc 100644 --- a/tests/unit/CartRule/CartRuleCest.php +++ b/tests/unit/CartRule/CartRuleCest.php @@ -106,7 +106,6 @@ class expectedCartItem class expectedCart { public const CART_TOTAL_PRECISION = 2; - public const CART_GRAND_TOTAL_PRECISION = 4; public $customer_id; public $id; @@ -141,13 +140,13 @@ class expectedCart $this->tax_total = round($this->tax_total, self::CART_TOTAL_PRECISION); $this->discount_amount = round($this->discount_amount, self::CART_TOTAL_PRECISION); $this->grand_total = round($this->sub_total + $this->tax_total - $this->discount_amount, - self::CART_GRAND_TOTAL_PRECISION); + self::CART_TOTAL_PRECISION); $this->base_sub_total = round($this->base_sub_total, self::CART_TOTAL_PRECISION); $this->base_tax_total = round($this->base_tax_total, self::CART_TOTAL_PRECISION); $this->base_discount_amount = round($this->base_discount_amount, self::CART_TOTAL_PRECISION); $this->base_grand_total = round($this->base_sub_total + $this->base_tax_total - $this->base_discount_amount, - self::CART_GRAND_TOTAL_PRECISION); + self::CART_TOTAL_PRECISION); } public function toArray(): array From 17b3f6bb93b1a24408c2767c1d4191e5db9188b3 Mon Sep 17 00:00:00 2001 From: Matt April Date: Thu, 7 May 2020 20:47:20 -0400 Subject: [PATCH 03/12] Rebuilt product filter query for improved performance. --- .../src/Repositories/ProductRepository.php | 114 +++++++++++------- 1 file changed, 73 insertions(+), 41 deletions(-) diff --git a/packages/Webkul/Product/src/Repositories/ProductRepository.php b/packages/Webkul/Product/src/Repositories/ProductRepository.php index 711207976..22ea78842 100755 --- a/packages/Webkul/Product/src/Repositories/ProductRepository.php +++ b/packages/Webkul/Product/src/Repositories/ProductRepository.php @@ -2,13 +2,13 @@ namespace Webkul\Product\Repositories; +use Illuminate\Pagination\Paginator; use Illuminate\Support\Facades\DB; use Illuminate\Container\Container as App; use Illuminate\Support\Facades\Event; use Illuminate\Database\Eloquent\ModelNotFoundException; use Webkul\Attribute\Repositories\AttributeRepository; use Webkul\Core\Eloquent\Repository; -use Webkul\Product\Repositories\ProductFlatRepository; use Webkul\Product\Models\ProductAttributeValue; class ProductRepository extends Repository @@ -108,18 +108,22 @@ class ProductRepository extends Repository { $params = request()->input(); - $results = app(ProductFlatRepository::class)->scopeQuery(function($query) use($params, $categoryId) { + $perPage = isset($params['limit']) ? $params['limit'] : 9; + $page = Paginator::resolveCurrentPage('page'); + + $repository = app(ProductFlatRepository::class)->scopeQuery(function($query) use($params, $categoryId) { $channel = request()->get('channel') ?: (core()->getCurrentChannelCode() ?: core()->getDefaultChannelCode()); $locale = request()->get('locale') ?: app()->getLocale(); $qb = $query->distinct() - ->addSelect('product_flat.*') - ->leftJoin('products', 'product_flat.product_id', '=', 'products.id') - ->leftJoin('product_categories', 'products.id', '=', 'product_categories.product_id') - ->where('product_flat.channel', $channel) - ->where('product_flat.locale', $locale) - ->whereNotNull('product_flat.url_key'); + ->select('product_flat.*') + ->join('product_flat as variants', 'product_flat.id', '=', DB::raw('COALESCE(variants.parent_id, variants.id)')) + ->leftJoin('product_categories', 'product_categories.product_id', '=', 'product_flat.product_id') + ->leftJoin('product_attribute_values', 'product_attribute_values.product_id', '=', 'variants.product_id') + ->where('product_flat.channel', $channel) + ->where('product_flat.locale', $locale) + ->whereNotNull('product_flat.url_key'); if ($categoryId) { $qb->where('product_categories.category_id', $categoryId); @@ -133,12 +137,6 @@ class ProductRepository extends Repository $qb->where('product_flat.visible_individually', 1); } - $queryBuilder = $qb->leftJoin('product_flat as flat_variants', function($qb) use($channel, $locale) { - $qb->on('product_flat.id', '=', 'flat_variants.parent_id') - ->where('flat_variants.channel', $channel) - ->where('flat_variants.locale', $locale); - }); - if (isset($params['search'])) $qb->where('product_flat.name', 'like', '%' . urldecode($params['search']) . '%'); @@ -158,50 +156,84 @@ class ProductRepository extends Repository } } - $qb = $qb->leftJoin('products as variants', 'products.id', '=', 'variants.parent_id'); + if( $priceFilter = request('price') ){ + $priceRange = explode(',', $priceFilter); + if( count($priceRange) > 0 ) { + $qb->where('variants.min_price', '>=', core()->convertToBasePrice($priceRange[0])); + $qb->where('variants.min_price', '<=', core()->convertToBasePrice(end($priceRange))); + } + } - $qb = $qb->where(function($query1) use($qb) { - $aliases = [ - 'products' => 'filter_', - 'variants' => 'variant_filter_', - ]; + $attributeFilters = $this->attributeRepository + ->getProductDefaultAttributes(array_keys( + request()->except(['price']) + )); - foreach($aliases as $table => $alias) { - $query1 = $query1->orWhere(function($query2) use ($qb, $table, $alias) { + if( count($attributeFilters) > 0 ) { + $qb->where(function ($filterQuery) use($attributeFilters){ - foreach ($this->attributeRepository->getProductDefaultAttributes(array_keys(request()->input())) as $code => $attribute) { - $aliasTemp = $alias . $attribute->code; + foreach ($attributeFilters as $attribute) { + $filterQuery->orWhere(function ($attributeQuery) use ($attribute) { - $qb = $qb->leftJoin('product_attribute_values as ' . $aliasTemp, $table . '.id', '=', $aliasTemp . '.product_id'); + $column = 'product_attribute_values.' . ProductAttributeValue::$attributeTypeFields[$attribute->type]; - $column = ProductAttributeValue::$attributeTypeFields[$attribute->type]; + $filterInputValues = explode(',', request()->get($attribute->code)); - $temp = explode(',', request()->get($attribute->code)); + # define the attribute we are filtering + $attributeQuery = $attributeQuery->where('product_attribute_values.attribute_id', $attribute->id); + # apply the filter values to the correct column for this type of attribute. if ($attribute->type != 'price') { - $query2 = $query2->where($aliasTemp . '.attribute_id', $attribute->id); - $query2 = $query2->where(function($query3) use($aliasTemp, $column, $temp) { - foreach($temp as $code => $filterValue) { - if (! is_numeric($filterValue)) { + $attributeQuery->where(function ($attributeValueQuery) use ($column, $filterInputValues) { + foreach ($filterInputValues as $filterValue) { + if (!is_numeric($filterValue)) { continue; } - - $columns = $aliasTemp . '.' . $column; - $query3 = $query3->orwhereRaw("find_in_set($filterValue, $columns)"); + $attributeValueQuery->orWhereRaw("find_in_set(?, {$column})", [$filterValue]); } }); + } else { - $query2->where('product_flat.min_price', '>=', core()->convertToBasePrice(current($temp))) - ->where('product_flat.min_price', '<=', core()->convertToBasePrice(end($temp))); + $attributeQuery->where($column, '>=', core()->convertToBasePrice(current($filterInputValues))) + ->where($column, '<=', core()->convertToBasePrice(end($filterInputValues))); } - } - }); - } - }); + }); + } + + }); + + # this is key! if a product has been filtered down to the same number of attributes that we filtered on, + # we know that it has matched all of the requested filters. + $qb->groupBy('variants.id'); + $qb->havingRaw('COUNT(*) = ' . count($attributeFilters)); + } return $qb->groupBy('product_flat.id'); - })->paginate(isset($params['limit']) ? $params['limit'] : 9); + + }); + + # apply scope query so we can fetch the raw sql and perform a count + $repository->applyScope(); + $countQuery = "select count(*) as aggregate from ({$repository->model->toSql()}) c"; + $count = collect(DB::select($countQuery, $repository->model->getBindings()))->pluck('aggregate')->first(); + + if($count > 0) { + # apply a new scope query to limit results to one page + $repository->scopeQuery(function ($query) use ($page, $perPage) { + return $query->forPage($page, $perPage); + }); + + # manually build the paginator + $items = $repository->get(); + } else { + $items = []; + } + + $results = new \Illuminate\Pagination\LengthAwarePaginator($items, $count, $perPage, $page, [ + 'path' => request()->url(), + 'query' => request()->query() + ]); return $results; } From 85ef3fe69bdbc8c4569bb8268bc43efed24a5cc4 Mon Sep 17 00:00:00 2001 From: Florian Bosdorff Date: Sat, 9 May 2020 12:21:54 +0200 Subject: [PATCH 04/12] remove unused exception handler; make exception handler extendable --- .../src/Providers/AdminServiceProvider.php | 10 +-- .../src/Exceptions/Handler.php | 8 +- .../src/Providers/CoreServiceProvider.php | 7 ++ .../Webkul/Shop/src/Exceptions/Handler.php | 79 ------------------- 4 files changed, 12 insertions(+), 92 deletions(-) rename packages/Webkul/{Admin => Core}/src/Exceptions/Handler.php (92%) delete mode 100644 packages/Webkul/Shop/src/Exceptions/Handler.php diff --git a/packages/Webkul/Admin/src/Providers/AdminServiceProvider.php b/packages/Webkul/Admin/src/Providers/AdminServiceProvider.php index 97f1f36ec..63e25dc28 100755 --- a/packages/Webkul/Admin/src/Providers/AdminServiceProvider.php +++ b/packages/Webkul/Admin/src/Providers/AdminServiceProvider.php @@ -3,9 +3,6 @@ namespace Webkul\Admin\Providers; use Illuminate\Support\ServiceProvider; -use Webkul\Admin\Providers\EventServiceProvider; -use Illuminate\Contracts\Debug\ExceptionHandler; -use Webkul\Admin\Exceptions\Handler; use Webkul\Core\Tree; class AdminServiceProvider extends ServiceProvider @@ -32,11 +29,6 @@ class AdminServiceProvider extends ServiceProvider $this->registerACL(); $this->app->register(EventServiceProvider::class); - - $this->app->bind( - ExceptionHandler::class, - Handler::class - ); } /** @@ -96,7 +88,7 @@ class AdminServiceProvider extends ServiceProvider view()->composer(['admin::users.roles.create', 'admin::users.roles.edit'], function ($view) { $view->with('acl', $this->createACL()); }); - + view()->composer(['admin::catalog.products.create'], function ($view) { $items = array(); diff --git a/packages/Webkul/Admin/src/Exceptions/Handler.php b/packages/Webkul/Core/src/Exceptions/Handler.php similarity index 92% rename from packages/Webkul/Admin/src/Exceptions/Handler.php rename to packages/Webkul/Core/src/Exceptions/Handler.php index 42328c22b..a475e08eb 100755 --- a/packages/Webkul/Admin/src/Exceptions/Handler.php +++ b/packages/Webkul/Core/src/Exceptions/Handler.php @@ -1,15 +1,15 @@ 'Resource not found', diff --git a/packages/Webkul/Core/src/Providers/CoreServiceProvider.php b/packages/Webkul/Core/src/Providers/CoreServiceProvider.php index dcc7c0e89..b60cdd31e 100755 --- a/packages/Webkul/Core/src/Providers/CoreServiceProvider.php +++ b/packages/Webkul/Core/src/Providers/CoreServiceProvider.php @@ -2,11 +2,13 @@ namespace Webkul\Core\Providers; +use Illuminate\Contracts\Debug\ExceptionHandler; use Illuminate\Database\Eloquent\Factory as EloquentFactory; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Validator; use Illuminate\Foundation\AliasLoader; use Webkul\Core\Core; +use Webkul\Core\Exceptions\Handler; use Webkul\Core\Facades\Core as CoreFacade; use Webkul\Core\Models\SliderProxy; use Webkul\Core\Observers\SliderObserver; @@ -41,6 +43,11 @@ class CoreServiceProvider extends ServiceProvider dirname(__DIR__) . '/Config/concord.php' => config_path('concord.php'), ]); + $this->app->bind( + ExceptionHandler::class, + Handler::class + ); + SliderProxy::observe(SliderObserver::class); } diff --git a/packages/Webkul/Shop/src/Exceptions/Handler.php b/packages/Webkul/Shop/src/Exceptions/Handler.php deleted file mode 100644 index aea627dd0..000000000 --- a/packages/Webkul/Shop/src/Exceptions/Handler.php +++ /dev/null @@ -1,79 +0,0 @@ - 'Resource not found', - 403 => '403 forbidden Error', - 401 => 'Unauthenticated', - 500 => '500 Internal Server Error', - ]; - - /** - * Render an exception into an HTTP response. - * - * @param \Illuminate\Http\Request $request - * @param \Exception $exception - * @return \Illuminate\Http\Response - */ - public function render($request, Exception $exception) - { - $path = 'shop'; - - if ($exception instanceof HttpException) { - $statusCode = in_array($exception->getStatusCode(), [401, 403, 404, 503]) ? $exception->getStatusCode() : 500; - - return $this->response($path, $statusCode); - } elseif ($exception instanceof ModelNotFoundException) { - return $this->response($path, 404); - } elseif ($exception instanceof PDOException) { - return $this->response($path, 500); - } - - return parent::render($request, $exception); - } - - /** - * Convert an authentication exception into a response. - * - * @param \Illuminate\Http\Request $request - * @param \Illuminate\Auth\AuthenticationException $exception - * @return \Illuminate\Http\Response - */ - protected function unauthenticated($request, AuthenticationException $exception) - { - if ($request->expectsJson()) { - return response()->json(['error' => $this->jsonErrorMessages[401]], 401); - } - - return redirect()->guest(route('auth.login')); - } - - private function isSopUri() - { - return strpos(\Illuminate\Support\Facades\Request::path(), 'shop') !== false ? true : false; - } - - private function response($path, $statusCode) - { - if (request()->expectsJson()) { - return response()->json([ - 'error' => isset($this->jsonErrorMessages[$statusCode]) - ? $this->jsonErrorMessages[$statusCode] - : 'Something went wrong, please try again later.' - ], $statusCode); - } - - return response()->view("{$path}::errors.{$statusCode}", [], $statusCode); - } -} \ No newline at end of file From 48e0026ec2d7991159822de8d8b662b43ee231c1 Mon Sep 17 00:00:00 2001 From: Florian Bosdorff Date: Sat, 9 May 2020 12:29:34 +0200 Subject: [PATCH 05/12] fix typo --- packages/Webkul/Core/src/Exceptions/Handler.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/Webkul/Core/src/Exceptions/Handler.php b/packages/Webkul/Core/src/Exceptions/Handler.php index a475e08eb..0b89b3543 100755 --- a/packages/Webkul/Core/src/Exceptions/Handler.php +++ b/packages/Webkul/Core/src/Exceptions/Handler.php @@ -7,9 +7,9 @@ use Illuminate\Auth\AuthenticationException; use Doctrine\DBAL\Driver\PDOException; use Illuminate\Database\Eloquent\ModelNotFoundException; use Symfony\Component\HttpKernel\Exception\HttpException; -use App\Exceptions\Handler as AppExceptionsHandler; +use App\Exceptions\Handler as AppExceptionHandler; -class Handler extends AppExceptionsHandler +class Handler extends AppExceptionHandler { protected $jsonErrorMessages = [ 404 => 'Resource not found', From 33ddae27aea01874fa2b505d902bb08354fec733 Mon Sep 17 00:00:00 2001 From: Florian Bosdorff Date: Sat, 9 May 2020 12:38:20 +0200 Subject: [PATCH 06/12] fix namespace issues --- composer.json | 5 ++++- .../{CouponsDataGrid.php => CartRuleCouponsDataGrid.php} | 0 tests/functional/Admin/Catalog/ProductCest.php | 2 +- tests/functional/CartRule/CartRuleCest.php | 4 +++- tests/functional/Checkout/Order/OrderCest.php | 2 +- tests/functional/Customer/CustomerCest.php | 3 +++ tests/functional/Shop/CartTaxesCest.php | 2 +- tests/trigger/Shop/DatabaseLogicCest.php | 8 ++++---- tests/trigger/Shop/TriggerCest.php | 2 +- tests/unit/CartRule/CartRuleCest.php | 2 +- 10 files changed, 19 insertions(+), 11 deletions(-) rename packages/Webkul/Admin/src/DataGrids/{CouponsDataGrid.php => CartRuleCouponsDataGrid.php} (100%) diff --git a/composer.json b/composer.json index 822b663ab..261b2afd0 100755 --- a/composer.json +++ b/composer.json @@ -110,7 +110,10 @@ "autoload-dev": { "psr-4": { - "Tests\\": "tests/" + "Tests\\Acceptance\\": "tests/acceptance/", + "Tests\\Functional\\": "tests/functional/", + "Tests\\Unit\\": "tests/unit/", + "Tests\\Trigger\\": "tests/trigger/" } }, diff --git a/packages/Webkul/Admin/src/DataGrids/CouponsDataGrid.php b/packages/Webkul/Admin/src/DataGrids/CartRuleCouponsDataGrid.php similarity index 100% rename from packages/Webkul/Admin/src/DataGrids/CouponsDataGrid.php rename to packages/Webkul/Admin/src/DataGrids/CartRuleCouponsDataGrid.php diff --git a/tests/functional/Admin/Catalog/ProductCest.php b/tests/functional/Admin/Catalog/ProductCest.php index 9d2d3461a..ef49cb1ce 100644 --- a/tests/functional/Admin/Catalog/ProductCest.php +++ b/tests/functional/Admin/Catalog/ProductCest.php @@ -1,6 +1,6 @@ faker = Factory::create(); @@ -45,7 +45,7 @@ class DatabaseLogicCest ]); $parentCategoryName = $this->faker->word; - + $parentCategoryAttributes = [ 'parent_id' => $rootCategory->id, 'position' => 1, @@ -68,7 +68,7 @@ class DatabaseLogicCest $rootCategory->prependNode($parentCategory); $I->assertNotNull($parentCategory); - $categoryName = $this->faker->word; + $categoryName = $this->faker->word; $categoryAttributes = [ 'position' => 1, 'status' => 1, diff --git a/tests/trigger/Shop/TriggerCest.php b/tests/trigger/Shop/TriggerCest.php index 2be0f75d0..704a08fb6 100644 --- a/tests/trigger/Shop/TriggerCest.php +++ b/tests/trigger/Shop/TriggerCest.php @@ -1,6 +1,6 @@ Date: Sat, 9 May 2020 12:46:11 +0200 Subject: [PATCH 07/12] fix CustomerCest --- tests/functional/Customer/CustomerCest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/functional/Customer/CustomerCest.php b/tests/functional/Customer/CustomerCest.php index c9fb53d6c..6db95969c 100644 --- a/tests/functional/Customer/CustomerCest.php +++ b/tests/functional/Customer/CustomerCest.php @@ -37,7 +37,7 @@ class CustomerCest public function updateCustomerAddress(FunctionalTester $I) { $I->wantTo('Instantiate a european faker factory to have the vat provider available'); - $faker = Faker\Factory::create('at_AT'); + $faker = \Faker\Factory::create('at_AT'); $formCssSelector = '#customer-address-form'; From 9229e361752ad11831de40a474f6aa5736e9fc20 Mon Sep 17 00:00:00 2001 From: ottopodo Date: Mon, 11 May 2020 19:19:28 +0200 Subject: [PATCH 08/12] Italian Translations --- .../Admin/src/Resources/lang/it/app.php | 1340 +++++++++++++++++ .../src/Resources/lang/it/app.php | 125 ++ .../Core/src/Resources/lang/it/validation.php | 7 + .../Customer/src/Resources/lang/it/app.php | 21 + .../Webkul/Shop/src/Resources/lang/it/app.php | 687 +++++++++ .../Webkul/Ui/src/Resources/lang/it/app.php | 40 + .../Webkul/Ui/src/Resources/lang/it/form.php | 6 + .../Velocity/src/Resources/lang/it/app.php | 298 ++++ .../src/Resources/lang/it/app.php.bak | 298 ++++ 9 files changed, 2822 insertions(+) create mode 100644 packages/Webkul/Admin/src/Resources/lang/it/app.php create mode 100644 packages/Webkul/BookingProduct/src/Resources/lang/it/app.php create mode 100644 packages/Webkul/Core/src/Resources/lang/it/validation.php create mode 100644 packages/Webkul/Customer/src/Resources/lang/it/app.php create mode 100644 packages/Webkul/Shop/src/Resources/lang/it/app.php create mode 100644 packages/Webkul/Ui/src/Resources/lang/it/app.php create mode 100644 packages/Webkul/Ui/src/Resources/lang/it/form.php create mode 100644 packages/Webkul/Velocity/src/Resources/lang/it/app.php create mode 100644 packages/Webkul/Velocity/src/Resources/lang/it/app.php.bak diff --git a/packages/Webkul/Admin/src/Resources/lang/it/app.php b/packages/Webkul/Admin/src/Resources/lang/it/app.php new file mode 100644 index 000000000..b9261f724 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/lang/it/app.php @@ -0,0 +1,1340 @@ + 'Salva', + 'create' => 'Crea', + 'update' => 'Modifica', + 'delete' => 'Elimina', + 'failed' => 'Fallito', + 'store' => 'Store', + 'image' => 'Immagine', + 'no result' => 'Nessun risultato', + 'product' => 'Prodotto', + 'attribute' => 'Attributo', + 'actions' => 'Azioni', + 'id' => 'ID', + 'action' => 'azione', + 'yes' => 'Sì', + 'no' => 'No', + 'true' => 'Vero', + 'false' => 'Falso', + 'apply' => 'Applica', + 'action' => 'Azione', + 'label' => 'Etichetta', + 'name' => 'Nome', + 'title' => 'Titolo', + 'code' => 'Codice', + 'type' => 'Tipo', + 'required' => 'Richiesto', + 'unique' => 'Unico', + 'locale-based' => 'Basato su Localizzazione', + 'channel-based' => 'Basato su Canale', + 'status' => 'Stato', + 'select-option' => 'Seleziona opzione', + 'category' => 'Categoria', + + 'common' => [ + 'no-result-found' => 'Non è stato trovato nessun record.', + 'country' => 'Paese', + 'state' => 'Provincia', + 'true' => 'Vero', + 'false' => 'Falso' + ], + + 'layouts' => [ + 'app-version' => 'Versione : :version', + 'my-account' => 'Il Mio Account', + 'logout' => 'Logout', + 'visit-shop' => 'Visita Store', + 'dashboard' => 'Dashboard', + 'sales' => 'Vendite', + 'orders' => 'Ordini', + 'shipments' => 'Spedizioni', + 'invoices' => 'Fatture', + 'refunds' => 'Rimborsi', + 'catalog' => 'Catalogo', + 'products' => 'Prodotti', + 'categories' => 'Categorie', + 'attributes' => 'Attributi', + 'attribute-families' => 'Famiglie Attributi', + 'customers' => 'Clienti', + 'groups' => 'Gruppi', + 'reviews' => 'Recensioni', + 'newsletter-subscriptions' => 'Iscrizione Newsletter', + 'configure' => 'Configura', + 'settings' => 'Impostazioni', + 'locales' => 'Localizzazioni', + 'currencies' => 'Valute', + 'exchange-rates' => 'Tassi di Cambio', + 'inventory-sources' => 'Magazzini', + 'channels' => 'Canali', + 'users' => 'Utenti', + 'roles' => 'Ruoli', + 'sliders' => 'Sliders', + 'taxes' => 'IVA', + 'tax-categories' => 'Categorie IVA', + 'tax-rates' => 'Aliquote IVA', + 'promotions' => 'Promozioni', + 'discount' => 'Sconti', + 'cms' => 'CMS' + ], + + 'acl' => [ + 'dashboard' => 'Dashboard', + 'sales' => 'Vendite', + 'orders' => 'Ordini', + 'shipments' => 'Spedizioni', + 'invoices' => 'Fatture', + 'catalog' => 'Catalogo', + 'products' => 'Prodotti', + 'categories' => 'Categorie', + 'attributes' => 'Attributi', + 'attribute-families' => 'Famiglie Attributi', + 'customers' => 'Clienti', + 'groups' => 'Gruppi', + 'reviews' => 'Recensioni', + 'newsletter-subscriptions' => 'Iscrizioni Newsletter', + 'configure' => 'Configura', + 'settings' => 'Impostazioni', + 'locales' => 'Localizzazioni', + 'currencies' => 'Valute', + 'exchange-rates' => 'Tassi di cambio', + 'inventory-sources' => 'Magazzini', + 'channels' => 'Canali', + 'users' => 'Utenti', + 'roles' => 'Ruoli', + 'sliders' => 'Sliders', + 'taxes' => 'IVA', + 'tax-categories' => 'Categorie IVA', + 'tax-rates' => 'Aliquote IVA', + 'edit' => 'Modifica', + 'create' => 'Aggiungi', + 'delete' => 'Elimina', + 'promotions' => 'Promozioni', + 'cart-rules' => 'Regole Carrello', + 'catalog-rules' => 'Regole Catalogo', + ], + + 'dashboard' => [ + 'title' => 'Dashboard', + 'from' => 'Da', + 'to' => 'A', + 'total-customers' => 'Totale Clienti', + 'total-orders' => 'Totale Ordini', + 'total-sale' => 'Totale Vendite', + 'average-sale' => 'Media Ordine di Vendita', + 'increased' => ':progress%', + 'decreased' => ':progress%', + 'sales' => 'Vendite', + 'top-performing-categories' => 'Categorie più performanti', + 'product-count' => ':count Prodotti', + 'top-selling-products' => 'Prodotti più venduti', + 'sale-count' => ':count Vendite', + 'customer-with-most-sales' => 'Cliente con più Vendite', + 'order-count' => ':count Ordini', + 'revenue' => 'Fatturato :total', + 'stock-threshold' => 'Soglia stock', + 'qty-left' => ':qty rimasti' + ], + + 'datagrid' => [ + 'mass-ops' => [ + 'method-error' => 'Errore! Metodo errato selezinato, per favore verifica la configurazione dell\azione massiva', + 'delete-success' => ':resource eliminate con successo', + 'partial-action' => 'Some actions were not performed due restricted system constraints on :resource', + 'update-success' => 'Selected :resource were successfully updated', + 'no-resource' => 'The resource provided for insufficient for the action' + ], + + 'id' => 'ID', + 'status' => 'Stato', + 'code' => 'Codice', + 'admin-name' => 'Nome', + 'name' => 'Nome', + 'direction' => 'Direzione', + 'fullname' => 'Nome completo', + 'type' => 'Tipo', + 'required' => 'Richiesto', + 'unique' => 'Unico', + 'per-locale' => 'Basato su localizzazione', + 'per-channel' => 'Basato sul canale', + 'position' => 'Posizione', + 'locale' => 'Locale', + 'hostname' => 'Hostname', + 'email' => 'Email', + 'group' => 'Gruppo', + 'phone' => 'Telefono', + 'gender' => 'Sesso', + 'title' => 'Titolo', + 'layout' => 'Layout', + 'url-key' => 'URL Key', + 'comment' => 'Commento', + 'product-name' => 'Prodotto', + 'currency-name' => 'Nome Valuta', + 'exch-rate' => 'Tasso di cambio', + 'priority' => 'Priorità', + 'subscribed' => 'Iscritto', + 'base-total' => 'Base Totale', + 'grand-total' => 'Gran Totale', + 'order-date' => 'Data Ordine', + 'channel-name' => 'Nome Canale', + 'billed-to' => 'Fatturato a', + 'shipped-to' => 'Spedito a', + 'order-id' => 'Id Ordine', + 'invoice-date' => 'Data Fattura', + 'total-qty' => 'Qtà Totale', + 'inventory-source' => 'Magazzino', + 'shipment-date' => 'Data Spedizione', + 'shipment-to' => 'Spedizione A', + 'sku' => 'SKU', + 'price' => 'Prezzo', + 'qty' => 'Quantità', + 'permission-type' => 'Tipo Permessi', + 'identifier' => 'Identificatore', + 'state' => 'Provincia', + 'country' => 'Paese', + 'tax-rate' => 'Aliquota', + 'role' => 'Ruolo', + 'sub-total' => 'Subtotale', + 'no-of-products' => 'Numero di Prodotti', + 'attribute-family' => 'Famiglia Attributi', + 'starts-from' => 'Inizia dal', + 'ends-till' => 'Finisce il', + 'per-cust' => 'Per Cliente', + 'usage-throttle' => 'Numero Utilizzi', + 'for-guest' => 'Per Guest', + 'order_number' => 'Numero Ordine', + 'refund-date' => 'Data Rimborso', + 'refunded' => 'Rimborsato', + 'start' => 'Inizio', + 'end' => 'Fine', + 'active' => 'Attivo', + 'inactive' => 'Inattivo', + 'true' => 'Vero', + 'false' => 'Falso', + 'approved' => 'Approvato', + 'pending' => 'In attesa', + 'disapproved' => 'Non Approvato', + 'coupon-code' => 'Coupon Codice', + 'times-used' => 'Utilizzato Volte', + 'created-date' => 'Data Creazione', + 'expiration-date' => 'Data Scadenza', + 'edit' => 'Modifica', + 'delete' => 'Elimina', + 'view' => 'Vedi', + 'rtl' => 'RTL', + 'ltr' => 'LTR', + 'update-status' => 'Update Stato' + ], + + 'account' => [ + 'title' => 'Il Mio Account', + 'save-btn-title' => 'Salva', + 'general' => 'Generale', + 'name' => 'Nome', + 'email' => 'Email', + 'password' => 'Password', + 'confirm-password' => 'Conferma Password', + 'change-password' => 'Modifica Password', + 'current-password' => 'Attuale Password' + ], + + 'users' => [ + 'forget-password' => [ + 'title' => 'Password dimenticata', + 'header-title' => 'Recupera Password', + 'email' => 'Email registrata', + 'password' => 'Password', + 'confirm-password' => 'Conferma Password', + 'back-link-title' => 'Torna a Login', + 'submit-btn-title' => 'Invia Email Recupera Password' + ], + + 'reset-password' => [ + 'title' => 'Genera nuova Password', + 'email' => 'Email Registrata', + 'password' => 'Password', + 'confirm-password' => 'Conferma Password', + 'back-link-title' => 'Torna a Login', + 'submit-btn-title' => 'Invia Nuova Password' + ], + + 'roles' => [ + 'title' => 'Ruoli', + 'add-role-title' => 'Aggiungi Ruolo', + 'edit-role-title' => 'Modifica Ruolo', + 'save-btn-title' => 'Salva Ruolo', + 'general' => 'Generale', + 'name' => 'Nome', + 'description' => 'Descrizione', + 'access-control' => 'Controllo Accesso', + 'permissions' => 'Permissioni', + 'custom' => 'Custom', + 'all' => 'Tutto' + ], + + 'users' => [ + 'title' => 'Utente', + 'add-user-title' => 'Aggiungi Utente', + 'edit-user-title' => 'Modifica Utente', + 'save-btn-title' => 'Save Utente', + 'general' => 'Generale', + 'email' => 'Email', + 'name' => 'Nome', + 'password' => 'Password', + 'confirm-password' => 'Conferma Password', + 'status-and-role' => 'Stato e Ruolo', + 'role' => 'Ruolo', + 'status' => 'Stato', + 'account-is-active' => 'L\'Account è Attivo', + 'current-password' => 'Inserisci Password Attuale', + 'confirm-delete' => 'Conferma eliminazione di questo Account', + 'confirm-delete-title' => 'Conferma la password prima di eliminare', + 'delete-last' => 'Almeno un amministratore è necessario.', + 'delete-success' => 'Success! Utente deleted', + 'incorrect-password' => 'La password inserita non è corretta', + 'password-match' => 'La password attuale non corrisponde a quella salvata.', + 'account-save' => 'Le modifiche all\'Account sono state salvate.', + 'login-error' => 'Per favore verifica le tue credenziali e prova di nuovo.', + 'activate-warning' => 'Il tuo account deve ancora essere attivato, per favore contatta un amministratore.' + ], + + 'sessions' => [ + 'title' => 'Login', + 'email' => 'Email', + 'password' => 'Password', + 'forget-password-link-title' => 'Password dimenticata ?', + 'remember-me' => 'Ricordami', + 'submit-btn-title' => 'Login' + ] + ], + + 'sales' => [ + 'orders' => [ + 'title' => 'Ordini', + 'view-title' => 'Ordine #:order_id', + 'cancel-btn-title' => 'Cancella', + 'shipment-btn-title' => 'Spedisci', + 'invoice-btn-title' => 'Fattura', + 'info' => 'Informazoni', + 'invoices' => 'Fatture', + 'shipments' => 'Spedizioni', + 'order-and-account' => 'Ordine e Account', + 'order-info' => 'informazioni Ordine', + 'order-date' => 'Data Ordine', + 'order-status' => 'Stato Ordine', + 'order-status-canceled' => 'Cancellato', + 'order-status-closed' => 'Chiuso', + 'order-status-fraud' => 'Frode', + 'order-status-pending' => 'In attesa', + 'order-status-pending-payment' => 'In attesa Pagamento', + 'order-status-processing' => 'In corso di processamento', + 'order-status-success' => 'Completato', + 'channel' => 'Canale', + 'customer-name' => 'Nome Cliente', + 'email' => 'Email', + 'contact-number' => 'Numero Contatto', + 'account-info' => 'Informazione Account', + 'address' => 'Indirizzo', + 'shipping-address' => 'Indirizzo Spedizione', + 'billing-address' => 'Indirizzo Fatturazione', + 'payment-and-shipping' => 'Pagamento e Spedizione', + 'payment-info' => 'Informazioni Pagamento', + 'payment-method' => 'Metodo di Pagamento', + 'currency' => 'Valuta', + 'shipping-info' => 'Informazioni Spedizione', + 'shipping-method' => 'Metodo di Spedizione', + 'shipping-price' => 'Spedizione', + 'products-ordered' => 'Prodotti Ordinati', + 'SKU' => 'SKU', + 'product-name' => 'Nome Prodotto', + 'qty' => 'Qtà', + 'item-status' => 'Stato Articolo', + 'item-ordered' => 'Ordinati (:qty_ordered)', + 'item-invoice' => 'Fatturati (:qty_invoiced)', + 'item-shipped' => 'Spediti (:qty_shipped)', + 'item-canceled' => 'Cancellati (:qty_canceled)', + 'item-refunded' => 'Resi (:qty_refunded)', + 'price' => 'Prezzo', + 'total' => 'Totale', + 'subtotal' => 'Subtotale', + 'shipping-handling' => 'Spedizione', + 'discount' => 'Sconto', + 'tax' => 'IVA', + 'tax-percent' => '% IVA', + 'tax-amount' => 'Ammontare IVA', + 'discount-amount' => 'Ammontare Sconto', + 'discount-amount' => 'Ammontare Sconto', + 'grand-total' => 'Totale', + 'total-paid' => 'Totale Pagato', + 'total-refunded' => 'Totale Rimborsato', + 'total-due' => 'Totale Dovuto', + 'cancel-confirm-msg' => 'Sei sicuro di voler cancellare questo ordine ?', + 'refund-btn-title' => 'Rimborsa', + 'refunds' => 'Rimbrsi' + 'comment-added-success' => 'Commento aggiunto con successo.', + 'comment' => 'Commento', + 'submit-comment' => 'Invia Commento', + 'notify-customer' => 'Notifica Cliente', + 'customer-notified' => ':date | Cliente Notificato', + 'customer-not-notified' => ':date | Cliente Non Notificato' + ], + + 'invoices' => [ + 'title' => 'Fatture', + 'id' => 'Id', + 'invoice-id' => 'Id Fattura', + 'date' => 'Data Fattura', + 'order-id' => 'Id Ordine', + 'customer-name' => 'Nome Cliente', + 'status' => 'Stato', + 'amount' => 'Ammontare', + 'action' => 'Azione', + 'add-title' => 'Crea Fattura', + 'save-btn-title' => 'Salva Fattura', + 'qty' => 'Qtà', + 'qty-ordered' => 'Qtà ordinata', + 'qty-to-invoice' => 'Qtà da fatturare', + 'view-title' => 'Fattura #:invoice_id', + 'bill-to' => 'Fatturato a', + 'ship-to' => 'Spedito a', + 'print' => 'Stampa', + 'order-date' => 'Data Ordine', + 'creation-error' => 'La creazione della fattura dell\'Ordine non è consentita.', + 'product-error' => 'La fattura non può essere creata senza prodotti.' + ], + + 'shipments' => [ + 'title' => 'Spedizioni', + 'id' => 'Id', + 'date' => 'Data Spedizione', + 'order-id' => 'Ordine Id', + 'order-date' => 'Ordine date', + 'customer-name' => 'Cliente Nome', + 'total-qty' => 'Totale Qtà', + 'action' => 'Azione', + 'add-title' => 'Crea Spedizione', + 'save-btn-title' => 'Salva Spedizione', + 'qty-ordered' => 'Qtà Ordinata', + 'qty-to-ship' => 'Qtà da Spedire', + 'available-sources' => 'Fonti Disponibili', + 'source' => 'Magazzino', + 'select-source' => 'Per favore seleziona magazzino', + 'qty-available' => 'Qtà Disponibie', + 'inventory-source' => 'Magazzino Origine', + 'carrier-title' => 'Nome Carrier', + 'tracking-number' => 'Codice Tracking', + 'view-title' => 'Spedizione #:shipment_id', + 'creation-error' => 'La spedizione non può essere creata per questo ordine.', + 'order-error' => 'La creazione della spedizione dell\'Ordine non è consentita.', + 'quantity-invalid' => 'La quantità richiesta non è valida non è disponibile.', + ], + + 'refunds' => [ + 'title' => 'Rimborsi', + 'id' => 'Id', + 'add-title' => 'Crea Rimborso', + 'save-btn-title' => 'Rimborso', + 'order-id' => 'Ordine Id', + 'qty-ordered' => 'Qtà ordinata', + 'qty-to-refund' => 'Qtà da rimborsare', + 'refund-shipping' => 'Rimborso Spedizione', + 'adjustment-refund' => 'Rimborso', + 'adjustment-fee' => 'Commissione Rimborso', + 'update-qty' => 'Aggiorna Quantità', + 'invalid-qty' => 'Abbiamo trovato una quantità non valida di articoli da rimborsare.', + 'refund-limit-error' => 'L\'ammontare massimo rimborsabile è :amount.', + 'refunded' => 'Rimborsato', + 'date' => 'Data Rimborso', + 'customer-name' => 'Nome Cliente', + 'status' => 'Stato', + 'action' => 'Azione', + 'view-title' => 'Rimborso #:refund_id', + 'invalid-refund-amount-error' => 'La somma rimborsata dovrebbe essere diversa da zero.' + + ] + ], + + 'catalog' => [ + 'products' => [ + 'title' => 'Prodotti', + 'add-product-btn-title' => 'Aggiungi Prodotto', + 'add-title' => 'Aggiungi Prodotto', + 'edit-title' => 'Modifica Prodotto', + 'save-btn-title' => 'Salva Prodotto', + 'general' => 'Generale', + 'product-type' => 'Tipo Prodotto', + 'simple' => 'Semplice', + 'configurable' => 'Configurabile', + 'familiy' => 'Famiglia Attributo', + 'sku' => 'SKU', + 'configurable-attributes' => 'Attributi Configurabili', + 'attribute-header' => 'Attributo(i)', + 'attribute-option-header' => 'Opzioni Attributo', + 'no' => 'No', + 'yes' => 'Sì', + 'disabled' => 'Disabilitato', + 'enabled' => 'Abilitato', + 'add-variant-btn-title' => 'Aggiungi Variante', + 'name' => 'Nome', + 'qty' => 'Qtà', + 'price' => 'Prezzo', + 'weight' => 'Peso', + 'status' => 'Stato', + 'variant-already-exist-message' => 'Una variante con le stesse opzioni attributo esiste già.', + 'add-image-btn-title' => 'Aggiungi Immagine', + 'add-variant-title' => 'Aggiungi Variante', + 'variant-already-exist-message' => 'Una Variante con le stesse opzioni attributo esiste già.', + 'add-image-btn-title' => 'Aggiungi Immaggine', + 'mass-delete-success' => 'Tutti i prodotti selezionati devono essere eliminate con successo', + 'mass-update-success' => 'Tutti i prodotti sono stati aggiornati con successo', + 'configurable-error' => 'Per favore seleziona almeno un attributo configurabile.', + 'categories' => 'Categorie', + 'images' => 'Immagini', + 'inventories' => 'Magazzini', + 'variations' => 'Variazioni', + 'downloadable' => 'Informazioni scaricabili', + 'links' => 'Link', + 'add-link-btn-title' => 'Aggiungi Link', + 'samples' => 'Campioni', + 'add-sample-btn-title' => 'Aggiungi Campione', + 'downloads' => 'Download Conentito', + 'file' => 'File', + 'sample' => 'Campione', + 'upload-file' => 'Carica File', + 'url' => 'Url', + 'sort-order' => 'Ordina Ordine', + 'browse-file' => 'Naviga File', + 'product-link' => 'Prodotti collegati', + 'cross-selling' => 'Cross Selling', + 'up-selling' => 'Up Selling', + 'related-products' => 'Prodotti correlati', + 'product-search-hint' => 'Inizia a digitare un nome di prodotto', + 'no-result-found' => 'Prodotti con lo stesso nome non trovato.', + 'searching' => 'Sto cercando ...', + 'grouped-products' => 'Prodotti Raggruppati', + 'search-products' => 'Cerca Prodotti', + 'no-result-found' => 'Prodotti con lo stesso nome non trovato.', + 'channel' => 'Canali', + 'bundle-items' => 'Elementi Bundle', + 'add-option-btn-title' => 'Aggiungi Opzione', + 'option-title' => 'Titolo Opzione', + 'input-type' => 'Input Tipo', + 'is-required' => 'È Richiesto', + 'select' => 'Select', + 'radio' => 'Radio', + 'checkbox' => 'Checkbox', + 'multiselect' => 'Multiselect', + 'new-option' => 'Nuova Opzione', + 'is-default' => 'È Predefinita', + 'actions' => 'Azioni' + ], + + 'attributes' => [ + 'title' => 'Attributi', + 'add-title' => 'Aggiungi Attributo', + 'edit-title' => 'Modifica Attributo', + 'save-btn-title' => 'Salva Attributo', + 'general' => 'Generale', + 'code' => 'Attribute Codice', + 'type' => 'Attribute Tipo', + 'text' => 'Text', + 'textarea' => 'Textarea', + 'price' => 'Prezzo', + 'boolean' => 'Boolean', + 'select' => 'Select', + 'multiselect' => 'Multiselect', + 'datetime' => 'Datetime', + 'date' => 'Data', + 'label' => 'Etichetta', + 'admin' => 'Admin', + 'options' => 'Opzioni', + 'position' => 'Posizione', + 'add-option-btn-title' => 'Aggiungi Option', + 'validations' => 'Validazioni', + 'input_validation' => 'Validazione Input', + 'is_required' => 'È Richiesto', + 'is_unique' => 'È Unico', + 'number' => 'Number', + 'decimal' => 'Decimal', + 'email' => 'Email', + 'url' => 'URL', + 'configuration' => 'Configurazione', + 'status' => 'Stato', + 'yes' => 'Sì', + 'no' => 'No', + 'value_per_locale' => 'Valore per Localizzazione', + 'value_per_channel' => 'Valore per Canale', + 'is_filterable' => 'Utilizzato nella Navigazione Layered', + 'is_configurable' => 'Utilizzato per creare Prodotto Configurabile', + 'admin_name' => 'Nome Admin', + 'is_visible_on_front' => 'Visible on Prodotto View Page on Front-end', + 'swatch_type' => 'Swatch Tipo', + 'dropdown' => 'Dropdown', + 'color-swatch' => 'Color Swatch', + 'image-swatch' => 'Image Swatch', + 'text-swatch' => 'Text Swatch', + 'swatch' => 'Swatch', + 'image' => 'Image', + 'file' => 'File', + 'checkbox' => 'Checkbox', + 'use_in_flat' => "Crea in tabella Product flat", + 'is_comparable' => "L'attributo è comparabile", + 'default_null_option' => 'Crea opzione predefinita vuota', + ], + 'families' => [ + 'title' => 'Famiglie', + 'add-family-btn-title' => 'Aggiungi Famiglia', + 'add-title' => 'Aggiungi Famiglia', + 'edit-title' => 'Modifica Famiglia', + 'save-btn-title' => 'Salva Famiglia', + 'general' => 'Generale', + 'code' => 'Codice Famiglia', + 'name' => 'Nome', + 'groups' => 'Gruppi', + 'add-group-title' => 'Aggiungi Gruppo', + 'position' => 'Posizione', + 'attribute-code' => 'Codice', + 'type' => 'Tipo', + 'add-attribute-title' => 'Aggiungi Attributi', + 'search' => 'Cerca', + 'group-exist-error' => 'Un gruppo con lo stesso nome esiste già.', + 'actions' => 'Azioni', + 'description' => 'Descrizione' + ], + 'categories' => [ + 'title' => 'Categorie', + 'add-title' => 'Aggiungi Categoria', + 'edit-title' => 'Modifica Categoria', + 'save-btn-title' => 'Save Categoria', + 'general' => 'Generale', + 'name' => 'Nome', + 'visible-in-menu' => 'Visibile nel Menu', + 'yes' => 'Sì', + 'no' => 'No', + 'position' => 'Posizione', + 'display-mode' => 'Modalità di visualizzazione', + 'products-and-description' => 'Prodotti e Descrizioni', + 'products-only' => 'Solo Prodotti', + 'description-only' => 'Solo Descrizioni', + 'description-and-images' => 'Descrizioni e Immagini', + 'description' => 'Descrizione', + 'parent-category' => 'Categoria Padre', + 'seo' => 'Search Engine Optimization', + 'slug' => 'Slug', + 'meta_title' => 'Meta Title', + 'meta_description' => 'Meta Description', + 'meta_keywords' => 'Meta Keywords', + 'image' => 'Immagine', + 'filterable-attributes' => 'Attributi filtrabili', + 'attributes' => 'Attributi', + ] + ], + + 'configuration' => [ + 'title' => 'Configurazione', + 'save-btn-title' => 'Salva', + 'save-message' => 'Configurazione salvata con successo', + 'yes' => 'Sì', + 'no' => 'No', + 'delete' => 'Elimina', + + 'tax-categories' => [ + 'title' => 'Categorie IVA', + 'add-title' => 'Aggiungi Categoria IVA', + 'edit-title' => 'Modifica Categoria IVA', + 'save-btn-title' => 'Salva Categoria IVA', + 'general' => 'Categoria IVA', + 'select-channel' => 'Seleziona Canale', + 'name' => 'Nome', + 'code' => 'Codice', + 'description' => 'Descrizione', + 'select-taxrates' => 'Seleziona Aliquote IVA', + 'edit' => [ + 'title' => 'Modifica Category IVA', + 'edit-button-title' => 'Modifica Categoria IVA' + ] + ], + + 'tax-rates' => [ + 'title' => 'Aliquote IVA', + 'add-title' => 'Aggiungi Aliquota IVA', + 'edit-title' => 'Modifica Aliquota IVA', + 'save-btn-title' => 'Salva Aliquota IVA', + 'general' => 'Aliquota IVA', + 'identifier' => 'Identificatore', + 'is_zip' => 'Abilita Range per CAP', + 'zip_from' => 'CAP da', + 'zip_to' => 'CAP a', + 'state' => 'Stato/Provincia', + 'select-state' => 'Seleziona una regione, stato o provincia.', + 'country' => 'Paese', + 'tax_rate' => 'Aliquota', + 'edit' => [ + 'title' => 'Modifica Aliquota IVA', + 'edit-button-title' => 'Modifica Aliquota' + ], + 'zip_code' => 'CAP', + 'is_zip' => 'Abilita Range CAP', + ], + + 'sales' => [ + 'shipping-method' => [ + 'title' => 'Metodi di Spedizione', + 'save-btn-title' => 'Salva', + 'description' => 'Descrizione', + 'active' => 'Attivo', + 'status' => 'Stato' + ] + ] + ], + + 'settings' => [ + 'locales' => [ + 'title' => 'Localizzazioni', + 'add-title' => 'Aggiungi Localizzazione', + 'edit-title' => 'Modifica Localizzazione', + 'add-title' => 'Aggiungi Localizzazione', + 'save-btn-title' => 'Salva Localizzazione', + 'general' => 'Generale', + 'code' => 'Codice', + 'name' => 'Nome', + 'direction' => 'Direzione', + 'create-success' => 'Localizzazione creata con successo.', + 'update-success' => 'Locale aggiornata con successo.', + 'delete-success' => 'Localizzazione eliminata con successo.', + 'last-delete-error' => 'Almeno una localizzazione è necessaria.', + ], + 'countries' => [ + 'title' => 'Paesi', + 'add-title' => 'Aggiungi Paese', + 'save-btn-title' => 'Salva Paese', + 'general' => 'Generale', + 'code' => 'Codice', + 'name' => 'Nome' + ], + 'currencies' => [ + 'title' => 'Valute', + 'add-title' => 'Aggiungi Valuta', + 'edit-title' => 'Modifica Valuta', + 'save-btn-title' => 'Salva Valuta', + 'general' => 'Generale', + 'code' => 'Codice', + 'name' => 'Nome', + 'symbol' => 'Simbolo', + 'create-success' => 'Valuta creata con successo.', + 'update-success' => 'Valuta aggiornata con successo.', + 'delete-success' => 'Valuta eliminata con successo.', + 'last-delete-error' => 'Almeno una valuta è necessaria.', + ], + 'exchange_rates' => [ + 'title' => 'Tasso di cambio', + 'add-title' => 'Aggiungi Tasso di cambio', + 'edit-title' => 'Modifica Tasso di cambio', + 'save-btn-title' => 'Save Tasso di cambio', + 'general' => 'Generale', + 'source_currency' => 'Valuta Origine', + 'target_currency' => 'Valuta Destinazione', + 'rate' => 'Tasso', + 'exchange-class-not-found' => ':service cambio non trovata', + 'update-rates' => 'Aggiorna cambi utilizzando :service', + 'create-success' => 'Tasso di cambio creato con successo.', + 'update-success' => 'Tasso di cambio aggiornato con successo.', + 'delete-success' => 'Tasso di cambio eliminato con successo.', + 'last-delete-error' => 'Almeno un taasso di cambio è necessario.', + ], + 'inventory_sources' => [ + 'title' => 'Magazzini', + 'add-title' => 'Aggiungi Magazzino', + 'edit-title' => 'Modifica Magazzino', + 'save-btn-title' => 'Salva Magazzino', + 'general' => 'Generale', + 'code' => 'Codice', + 'name' => 'Nome', + 'description' => 'Descrizione', + 'source-is-active' => 'Magazzino è Attivo', + 'contact-info' => 'Informazioni Contatto', + 'contact_name' => 'Nome', + 'contact_email' => 'Email', + 'contact_number' => 'Numero Contatto', + 'contact_fax' => 'Fax', + 'address' => 'Indirizzo Magazzino', + 'country' => 'Paese', + 'state' => 'Provincia', + 'city' => 'Città', + 'street' => 'Indirizzo', + 'postcode' => 'CAP', + 'priority' => 'Priorità', + 'latitude' => 'Latitudine', + 'longitude' => 'Longitudine', + 'status' => 'Stato', + 'create-success' => 'Magazzino creato con successo.', + 'update-success' => 'Magazzino aggiornato con successo.', + 'delete-success' => 'Magazzino eliminato con successo.', + 'last-delete-error' => 'Almeno un Magazzino è necessario.', + ], + 'channels' => [ + 'title' => 'Canali', + 'add-title' => 'Aggiungi Canale', + 'edit-title' => 'Modifica Canale', + 'save-btn-title' => 'Save Canale', + 'general' => 'Generale', + 'code' => 'Codice', + 'name' => 'Nome', + 'description' => 'Descrizione', + 'hostname' => 'Hostname', + 'currencies-and-locales' => 'Valute e localizzazioni', + 'locales' => 'Localizzazioni', + 'default-locale' => 'Localizzazione predefinita', + 'currencies' => 'Valute', + 'base-currency' => 'Valuta Predefinita', + 'root-category' => 'Categoria principale', + 'inventory_sources' => 'Magazzini', + 'design' => 'Design', + 'theme' => 'Theme', + 'home_page_content' => 'Contenuto Home Page', + 'footer_content' => 'Contenuto Footer', + 'logo' => 'Logo', + 'favicon' => 'Favicon', + 'create-success' => 'Canale creato con successo.', + 'update-success' => 'Canale aggiornato con successo.', + 'delete-success' => 'Canale eliminato con successo.', + 'last-delete-error' => 'Almeno un Canale è necessario.', + 'seo' => 'Home page SEO', + 'seo-title' => 'Meta title', + 'seo-description' => 'Meta description', + 'seo-keywords' => 'Meta keywords', + + ], + + 'sliders' => [ + 'title' => 'Sliders', + 'name' => 'Nome', + 'add-title' => 'Crea Slider', + 'edit-title' => 'Modifica Slider', + 'save-btn-title' => 'Salva Slider', + 'general' => 'Generale', + 'image' => 'Immagine', + 'content' => 'Contenuto', + 'channels' => 'Canale', + 'created-success' => 'Slider creato con successo', + 'created-fault' => 'Errore nella creazione dello slider', + 'update-success' => 'Slider aggiornato con successo', + 'update-fail' => 'Non è stato possibile aggiornare lo Slider', + 'delete-success' => 'Non è stato possibile eliminare l\'ultimo slider', + 'delete-fail' => 'Slider eliminato con successo' + ], + + 'tax-categories' => [ + 'title' => 'Categorie IVA', + 'add-title' => 'Crea Categoria IVA', + 'edit-title' => 'Modifica Categoria IVA', + 'save-btn-title' => 'Salva Categoria IVA', + 'general' => 'Categoria IVA', + 'select-channel' => 'Seleziona Canale', + 'name' => 'Nome', + 'code' => 'Codice', + 'description' => 'Descrizione', + 'select-taxrates' => 'Seleziona Aliquote IVA', + 'edit' => [ + 'title' => 'Modifica Categoria IVA', + 'edit-button-title' => 'Modifica Categoria IVA' + ], + 'create-success' => 'Nuova Categoria IVA creata', + 'create-error' => 'Errore, nella creazione della Categoria IVA', + 'update-success' => 'Categoria IVA aggiornata con successo', + 'update-error' => 'Errore durante l\'aggiornamento della Categoria IVA', + 'atleast-one' => 'Non èstato possibile eliminare l\'ultima Categoria IVA', + 'delete' => 'Categoria IVA eliminata con successo' + ], + + 'tax-rates' => [ + 'title' => 'Aliquote IVA', + 'add-title' => 'Crea Aliquota IVA', + 'edit-title' => 'Modifica Aliquota IVA', + 'save-btn-title' => 'Salva Aliquota IVA', + 'general' => 'Aliquota IVA', + 'identifier' => 'Identificatore', + 'is_zip' => 'Abilita Zip Range', + 'zip_from' => 'Zip Da', + 'zip_to' => 'Zip a', + 'state' => 'Provincia/Stato', + 'select-state' => 'Seleziona una regione, stato o provincia.', + 'country' => 'Paese', + 'tax_rate' => 'Aliquota', + 'edit' => [ + 'title' => 'Modifica Aliquota', + 'edit-button-title' => 'Modifica Aliquota' + ], + 'zip_code' => 'Codice CAP', + 'is_zip' => 'Abilita Range CAP', + 'create-success' => 'Aliquota creata con successo', + 'create-error' => 'Non è stato possibile creare l\'Aliquota IVA', + 'update-success' => 'Aliquota aggiornata con successo', + 'update-error' => 'Errore! Non è stato possibile l\'Aliquota IVA', + 'delete' => 'Aliquota IVA eliminata con successo', + 'atleast-one' => 'Non posso eliminare l\'ultimo tasso IVA' + ], + 'development' => [ + 'title' => 'Sviluppo', + ] + ], + + 'customers' => [ + 'groups' =>[ + 'add-title' => 'Aggiungi Gruppo', + 'edit-title' => 'Modifica Gruppo', + 'save-btn-title' => 'Salva Gruppo', + 'title' => 'Gruppi', + 'save-btn-title' => 'Salva Gruppo', + 'code' => 'Codice', + 'name' => 'Nome', + 'is_user_defined' => 'Utente Definito', + 'yes' => 'Sì' + ], + + 'addresses' => [ + 'title' => 'Elenco Indirizzi :customer_name', + 'vat_id' => 'Partita IVA / Codice Fiscale', + 'create-title' => 'Crea Indirizzo Cliente', + 'edit-title' => 'Aggiorna Indirizzo Cliente', + 'title-orders' => 'Elenco Ordini :customer_name', + 'address-list' => 'Ellenco Indirizzi', + 'order-list' => 'Elenco Ordini', + 'address-id' => 'ID Indirizzo', + 'address-1' => 'Indirizzo 1', + 'city' => 'Città', + 'state-name' => 'Provincia', + 'country-name' => 'Paese', + 'postcode' => 'CAP', + 'default-address' => 'Indirizzo Principale', + 'yes' => 'Sì', + 'not-approved' => 'Non Approvato', + 'no' => 'No', + 'dash' => '-', + 'delete' => 'Elimina', + 'create-btn-title' => 'Aggiungi Indirizzo', + 'save-btn-title' => 'Salva Indirizzo', + 'general' => 'Generale', + 'success-create' => 'Success: Indirizzo cliente creato con successo.', + 'success-update' => 'Success: Indirizzo cliente aggiornato con successo.', + 'success-delete' => 'Success: Indirizzo cliente eliminato con successo.', + 'success-mass-delete' => 'Success: indirizzi selezionati eliminati con successo.', + 'error-create' => 'Error: Indirizzo cliente non creato.', + ], + + 'note' => [ + 'title' => 'Aggiungi Nota', + 'save-note' => 'Salva Nota', + 'enter-note' => 'Inserisci Nota', + 'help-title' => 'Aggiungi Note su questo Cliente' + ], + + 'customers' => [ + 'add-title' => 'Aggiungi Cliente', + 'edit-title' => 'Modifica Cliente', + 'title' => 'Clienti', + 'first_name' => 'Nome', + 'last_name' => 'Cognome', + 'gender' => 'Sesso', + 'email' => 'Email', + 'date_of_birth' => 'Data di Nascita', + 'phone' => 'Telefono', + 'customer_group' => 'Gruppo Clienti', + 'save-btn-title' => 'Salva Cliente', + 'channel_name' => 'Nome Canale', + 'state' => 'Provincia', + 'select-state' => 'Seleziiona una Regione, Stato o provincia.', + 'country' => 'Paese', + 'other' => 'Altro', + 'male' => 'Maschio', + 'female' => 'Femmina', + 'phone' => 'Telefono', + 'group-default' => 'Non è possibile eliminare il gruppo predefinito.', + 'edit-help-title' => 'Modifica Cliente', + 'delete-help-title' => 'Elimina Cliente', + 'addresses' => 'Indirizzi', + 'mass-destroy-success' => 'Clienti eliminati con successo', + 'mass-update-success' => 'Clienti aggiornati con successo', + 'status' => 'Stato', + 'active' => 'Attivo', + 'inactive' => 'Non attivo', + 'in-active' => 'Non attivo' + ], + + 'reviews' => [ + 'title' => 'Recensioni', + 'edit-title' => 'Modifica Recensione', + 'rating' => 'Rating', + 'status' => 'Stato', + 'comment' => 'Commento', + 'pending' => 'In attesa', + 'approved' => 'Approva', + 'disapproved' => 'Rifiuta' + ], + + 'subscribers' => [ + 'title' => 'Iscritti a Newsletter', + 'title-edit' => 'Modifica iscritto a Newsletter', + 'email' => 'Email', + 'is_subscribed' => 'Iscritto', + 'edit-btn-title' => 'Aggiorna iscritto', + 'update-success' => 'Iscritto aggiornato con successo', + 'update-failed' => 'Errore! Non puoi disiscrivere l\'utente', + 'delete' => 'Iscritto eliminato correttamente', + 'delete-failed' => 'Errore! L\'iscritto non può essere eliminato' + ] + ], + + 'promotions' => [ + 'cart-rules' => [ + 'title' => 'Regole Carrello', + 'add-title' => 'Aggiungi Regola Carrello', + 'edit-title' => 'Modifica Regola Carrello', + 'save-btn-title' => 'Salva Regola Carrello', + 'rule-information' => 'Infrmazioni sulla Regola', + 'name' => 'Nome', + 'description' => 'Descrizione', + 'status' => 'Stato', + 'is-active' => 'La Regola del Carrello è Attiva', + 'channels' => 'Canali', + 'customer-groups' => 'Gruppi Clienti', + 'coupon-type' => 'Tipo Coupon', + 'no-coupon' => 'No Coupon', + 'specific-coupon' => 'Coupon Specifico', + 'auto-generate-coupon' => 'Auto Genera Coupon', + 'no' => 'No', + 'yes' => 'Sì', + 'coupon-code' => 'Codice Coupon', + 'uses-per-coupon' => 'Usi per Coupon', + 'uses-per-customer' => 'Usi per Cliente', + 'uses-per-customer-control-info' => 'Sarà utilizzato solo per clienti registrati e autenticati.', + 'from' => 'Da', + 'to' => 'A', + 'priority' => 'Priorità', + 'conditions' => 'Condizioni', + 'condition-type' => 'Tipo Condizione', + 'all-conditions-true' => 'Tutte le Condizioni Sono Vere', + 'any-condition-true' => 'Almeno una Condizione è Vera', + 'add-condition' => 'Aggiungi Condizione', + 'choose-condition-to-add' => 'Scegli una condizione da aggiungere', + 'cart-attribute' => 'Attributi Carrello', + 'subtotal' => 'Subtotale', + 'total-items-qty' => 'Totale articoli Qtà', + 'total-weight' => 'Totale Peso', + 'payment-method' => 'Metodo di Pagamento', + 'shipping-method' => 'Metodo di Spedizione', + 'shipping-postcode' => 'CAP di Spedizione', + 'shipping-state' => 'Provincia di Spedizione', + 'shipping-country' => 'Paese di Spedizione', + 'cart-item-attribute' => 'Attributo Articolo Carrello', + 'price-in-cart' => 'Prezzo nel Carrello', + 'qty-in-cart' => 'Qtà nel Carrello', + 'product-attribute' => 'Attributo Prodotto', + 'attribute-name-children-only' => ':attribute_name (Solo Figlio)', + 'attribute-name-parent-only' => ':attribute_name (Solo Padre)', + 'is-equal-to' => 'È uguale a', + 'is-not-equal-to' => 'Non è uguale a', + 'equals-or-greater-than' => 'Uguale o maggiore di', + 'equals-or-less-than' => 'Uguale o minore di', + 'greater-than' => 'Maggiore di', + 'less-than' => 'Minore di', + 'contain' => 'Contengono', + 'contains' => 'Contiene', + 'does-not-contain' => 'Non contiene', + 'actions' => 'Azioni', + 'action-type' => 'Tipo Azione', + 'percentage-product-price' => 'Percentuale sul Prezzo del Prodotto', + 'fixed-amount' => 'Ammontare fisso', + 'fixed-amount-whole-cart' => 'Ammontare fisso per intero carrello', + 'buy-x-get-y-free' => 'Compra X e ottieni Y gratis', + 'discount-amount' => 'Ammontare Sconto', + 'discount-quantity' => 'Massima quantità scontabile', + 'discount-step' => 'Compra quantità X', + 'free-shipping' => 'Spedizione gratuita', + 'apply-to-shipping' => 'Applica a spedizione', + 'coupon-codes' => 'Codici Coupon', + 'coupon-qty' => 'Qtà Coupon', + 'code-length' => 'Lunghezza Codice', + 'code-format' => 'Formato Codice', + 'alphanumeric' => 'Alfanumerico', + 'alphabetical' => 'Alfabetico', + 'numeric' => 'Numerico', + 'code-prefix' => 'Prefisso Codice', + 'code-suffix' => 'Suffisso Codice', + 'generate' => 'Genera', + 'cart-rule-not-defind-error' => 'La regola del carrello non è stata definitaaCart rule is not defined', + 'mass-delete-success' => 'Tutti i coupon selezinati sono stati eliminati con successo.', + 'end-other-rules' => 'Fine altre regole', + 'children-categories' => 'Categorie (Children Only)', + 'parent-categories' => 'Categorie (Parent Only)', + 'categories' => 'Categorie', + 'attribute_family' => 'Famiglia Attributo' + ], + + 'catalog-rules' => [ + 'title' => 'Regole Catalogo', + 'add-title' => 'Aggiungi Regola Catalogo', + 'edit-title' => 'Modifica Regola Catalogo', + 'save-btn-title' => 'Salva Regola Catalogo', + 'rule-information' => 'Regola Information', + 'name' => 'Nome', + 'description' => 'Descrizione', + 'status' => 'Stato', + 'is-active' => 'Regola del Catalogo è Attiva', + 'channels' => 'Canali', + 'customer-groups' => 'Gruppi di Clienti', + 'no' => 'No', + 'yes' => 'S+', + 'from' => 'Da', + 'to' => 'A', + 'priority' => 'Priorità', + 'conditions' => 'Condizioni', + 'condition-type' => 'Tipo Condizione', + 'all-conditions-true' => 'Tutte le condizioni sono Vere', + 'any-condition-true' => 'Almeno una condizione è Vera', + 'add-condition' => 'Aggiungi Condizione', + 'choose-condition-to-add' => 'Scegli una Condizione da aggiungere', + 'product-attribute' => 'Attributo Prodotto', + 'attribute-name-children-only' => ':attribute_name (Solo Figli)', + 'attribute-name-parent-only' => ':attribute_name (Solo Padre)', + 'is-equal-to' => 'È uguale a', + 'is-not-equal-to' => 'È non uguale a', + 'equals-or-greater-than' => 'Uguale o maggiore di', + 'equals-or-less-than' => 'Uguale o minore di', + 'greater-than' => 'Maggiore di', + 'less-than' => 'Minore di', + 'contain' => 'Coniene', + 'contains' => 'Contengono', + 'does-not-contain' => 'Non contiene', + 'actions' => 'Azioni', + 'action-type' => 'Tipo Azione', + 'percentage-product-price' => 'Percentuale su Prezzo Prodotto', + 'fixed-amount' => 'Ammontare fisso', + 'fixed-amount-whole-cart' => 'Ammontare fisso sull\'intero catalogo', + 'buy-x-get-y-free' => 'Compra X Ottieni Y Gratis', + 'discount-amount' => 'Ammontare Sconto', + 'mass-delete-success' => 'Tutti gli indici selezionati dei coupon sono stati eliminati con successo.', + 'end-other-rules' => 'Fine altre regole', + 'categories' => 'Categorie', + 'attribute_family' => 'Famiglia Attributi' + ] + ], + + 'error' => [ + 'go-to-home' => 'TORNA A HOME', + 'in-maitainace' => 'In Manutezione', + 'right-back' => 'Torno subito', + + '404' => [ + 'page-title' => '404 Pagina non trovata', + 'name' => '404', + 'title' => 'Pagina non trovata', + 'message' => 'La Pagina che stai cercando non esiste o è stata spostata. Naviga utilizzando il menu.' + ], + '403' => [ + 'page-title' => '403 accesso negato', + 'name' => '403', + 'title' => 'Accesso negato', + 'message' => 'Non hai i permessi per accedere a questa pagina' + ], + '500' => [ + 'page-title' => '500 Errore interno del server', + 'name' => '500', + 'title' => 'Errore interno del server', + 'message' => 'Il Server ha incontrato un errore interno.' + ], + '401' => [ + 'page-title' => '401 Errore non autorizzato', + 'name' => '401', + 'title' => 'Errore non autorizzato', + 'message' => 'La richiesta non è stata applicata perchè manca di una valida autenticazione per accedere alla risorsa.' + ], + ], + + 'export' => [ + 'export' => 'Esporta + 'import' => 'Importa, + 'format' => 'Seleziona formato', + 'download' => 'Download', + 'upload' => 'Upload', + 'csv' => 'CSV', + 'xls' => 'XLS', + 'file' => 'File', + 'upload-error' => 'Il file deve essere di tipo: xls, xlsx, csv.', + 'duplicate-error' => 'L\'Identificativo deve essere unico, identificativi duplicati :identifier nella riga :position.', + 'enough-row-error' => 'Il file non ha abbastanza righe', + 'allowed-type' => 'Tipo consentito:', + 'file-type' => 'csv, xls, xlsx.', + 'no-records' => 'Niente da esportare', + 'illegal-format' => 'Errore! Questo tipo di formato non è supportato o è in un formato illegale' + ], + + 'cms' => [ + 'pages' => [ + 'general' => 'Generale', + 'seo' => 'SEO', + 'pages' => 'Pagine', + 'title' => 'Pagine', + 'add-title' => 'Aggiungi Pagina', + 'content' => 'Contenuto', + 'url-key' => 'URL Key', + 'channel' => 'Canali', + 'locale' => 'Localizzazioni', + 'create-btn-title' => 'Salva Pagina', + 'edit-title' => 'Modifica Pagina', + 'edit-btn-title' => 'Salva Pagina', + 'create-success' => 'Pagina creata con successo', + 'create-partial' => 'Alcune delle pagine richieste esistono già', + 'create-failure' => 'Tutte le pagine richieste esistono già', + 'update-success' => 'Pagina aggiornata con successo', + 'update-failure' => 'Non è stato possibile aggiornare la Pagina', + 'page-title' => 'Titolo Pagina', + 'layout' => 'Layout', + 'meta_keywords' => 'Meta Keywords', + 'meta_description' => 'Meta Description', + 'meta_title' => 'Meta Title', + 'delete-success' => 'Pagina CMS eliminata con successo', + 'delete-failure' => 'La Pagina CMS non può essere eliminata', + 'preview' => 'Anteprima', + 'one-col' => '
Utilizza la classe: "static-container one-column" per layout a una colonna.
', + 'two-col' => '
Utilizza la classe: "static-container two-column" per layout a due colonne.
', + 'three-col' => '
Utilizza la classe: "static-container three-column" per layout a tre colonne.
', + 'helper-classes' => 'Classi Helper' + ] + ], + + 'response' => [ + 'being-used' => 'Questo resource :name is getting used in :source', + 'cannot-delete-default' => 'Non è possibile eliminare il canale di default', + 'create-success' => ':name creato con successo.', + 'update-success' => ':name aggiornato con successo.', + 'delete-success' => ':name eliminato con successo.', + 'delete-failed' => 'Si è verificato un errore durante la cancellazione di :name.', + 'last-delete-error' => 'Almeno un :name è obbligatorio.', + 'user-define-error' => 'Non è possibile eliminare il sistema :name', + 'attribute-error' => ':name è utilizzato per alcuni prodotti configurabili.', + 'attribute-product-error' => ':name è utilizzato per alcuni prodotti.', + 'customer-associate' => ':name non può essere eliminato perchè un cliente è associato a questo gruppo.', + 'currency-delete-error' => 'Questa valuta è utilizzata come valuta base in un canale e non può quindi essere eliminata.', + 'upload-success' => ':name caricato con successo.', + 'delete-category-root' => 'Non è possibile eliminare la categoria root', + 'create-root-failure' => 'Una Categoria con lo stesso nome esiste già', + 'cancel-success' => ':name cancellata con successo.', + 'cancel-error' => ':name non può essere cancellato.', + 'already-taken' => 'Il nome :name è stato giù utilizzato.', + 'order-pending' => 'Non è possibile eliminare l\'account perchè alcuni Ordini sono in stato di attesa o in corso.' + ], + + 'footer' => [ + 'copy-right' => 'Realizzato con Bagisto, Un Community Project di Webkul', + ], + + 'admin' => [ + 'emails' => [ + 'email' => 'Email', + 'notification_label' => 'Notifiche', + 'notifications' => [ + 'verification' => 'Invia email di verifica', + 'registration' => 'Invia email di registrazione', + 'customer' => 'Invia email a cliente', + 'new-order' => 'Invia email di conferma Ordine', + 'new-admin' => 'Invia email di invito ad Admin', + 'new-invoice' => 'Invia email di Conferma Fattura', + 'new-refund' => 'Invia email di notifica Rimborso', + 'new-shipment' => 'Invia email di notifica Spedizione', + 'new-inventory-source' => 'Invia email di notifica a magazzino', + 'cancel-order' => 'Invia notifica di cancellazione ordine', + ], + + ], + 'system' => [ + 'catalog' => 'Catalogo', + 'products' => 'Prodotti', + 'guest-checkout' => 'Checkout come Ospite', + 'allow-guest-checkout' => 'Consenti Checkout come Ospite', + 'allow-guest-checkout-hint' => 'Hint: se attiva, questa opzione può essere configurata per ciascun singolo prodotto.', + 'review' => 'Recensione', + 'allow-guest-review' => 'Consenti Recensioni ai non registrati', + 'inventory' => 'Magazzino', + 'stock-options' => 'Opzioni Stock', + 'allow-backorders' => 'Consenti Backorders', + 'customer' => 'Cliente', + 'settings' => 'Impostazioni', + 'address' => 'Indirizzo', + 'street-lines' => 'Linee nell\'indirizzo', + 'sales' => 'Vendite', + 'shipping-methods' => 'Metodi di Spedizione', + 'free-shipping' => 'Spedizione Gratuita', + 'flate-rate-shipping' => 'Spedizione Prezzo Fisso', + 'shipping' => 'Spedizione', + 'origin' => 'Origine', + 'country' => 'Paese', + 'state' => 'Provincia', + 'zip' => 'CAP', + 'city' => 'Città', + 'street-address' => 'Indirizzo', + 'title' => 'Titolo', + 'description' => 'Descrizione', + 'rate' => 'Tasso', + 'status' => 'Stato', + 'type' => 'Tipo', + 'payment-methods' => 'Metodi di Pagamento', + 'cash-on-delivery' => 'Contrassegno', + 'money-transfer' => 'Bonifico', + 'paypal-standard' => 'Paypal Standard', + 'business-account' => 'Account Business', + 'newsletter' => 'Iscrizione a NewsLetter', + 'newsletter-subscription' => 'Consenti Iscrizione a NewsLetter', + 'email' => 'Verifica Email', + 'email-verification' => 'Consenti verifica Email', + 'sort_order' => 'Sort Ordine', + 'general' => 'Generale', + 'footer' => 'Footer', + 'content' => 'Contenuto', + 'footer-content' => 'Testo Footer', + 'footer-toggle' => 'Toggle footer', + 'locale-options' => 'Opzioni Unità', + 'weight-unit' => 'Unità di peso', + 'email-settings' => 'Impostazioni Email', + 'email-sender-name' => 'Nome Mittente Email', + 'shop-email-from' => 'Indirizzo Email Negozio [per invio email]', + 'admin-name' => 'Nome Admin', + 'admin-email' => 'Email Admin', + 'admin-page-limit' => 'Numero di risultati per Pagina (Admin)', + 'design' => 'Design', + 'admin-logo' => 'Logo Admin', + 'logo-image' => 'Immagine Logo', + 'credit-max' => 'Massimo credito Cliente', + 'credit-max-value' => 'Valore massimo credito', + 'use-credit-max' => 'Usa massimo credito', + 'order-settings' => 'Impostazioni Ordine', + 'orderNumber' => 'Impostazioni Numero Ordine', + 'order-number-prefix' => 'Prefisso Numero Ordine', + 'order-number-length' => 'Lunghezza Numero Ordine', + 'order-number-suffix' => 'Suffisso Numero Ordine', + 'default' => 'Default', + 'sandbox' => 'Sandbox', + 'all-channels' => 'Tutti', + 'all-locales' => 'Tutti', + 'all-customer-groups' => 'tutti i Gruppi di Clienti', + 'invoice-slip-design' => 'Design della Fattura', + 'logo' => 'Logo', + 'storefront' => 'Storefront', + 'default-list-mode' => 'Modalità predefinita elenchiDefault List Mode', + 'grid' => 'Griglia', + 'list' => 'Lista', + 'products-per-page' => 'Prodotti Per Pagina', + 'sort-by' => 'Ordina Per', + 'from-z-a' => 'Da Z-A', + 'from-a-z' => 'Da A-Z', + 'newest-first' => 'I più nuovi prima', + 'oldest-first' => 'I più vecchi prima', + 'cheapest-first' => 'I più convenienti prima', + 'expensive-first' => 'I più cari prima', + 'comma-seperated' => 'Separato da virgola', + 'favicon' => 'Favicon' + + ] + ] +]; diff --git a/packages/Webkul/BookingProduct/src/Resources/lang/it/app.php b/packages/Webkul/BookingProduct/src/Resources/lang/it/app.php new file mode 100644 index 000000000..924a89c5b --- /dev/null +++ b/packages/Webkul/BookingProduct/src/Resources/lang/it/app.php @@ -0,0 +1,125 @@ + [ + 'catalog' => [ + 'products' => [ + 'booking' => 'Informazioni Prenotazione', + 'booking-type' => 'Prenotazione Tipo', + 'default' => 'Default', + 'appointment-booking' => 'Prenotazione Appuntamento', + 'event-booking' => 'Prenotazione Evento', + 'rental-booking' => 'Prenotazione Noleggio', + 'table-booking' => 'Prenotazione Tavolo', + 'slot-duration' => 'Durata Slot (Min)', + 'break-time' => 'Break Time b/w Slots (Mins)', + 'available-every-week' => 'Disponibiità Ogni Settimana', + 'yes' => 'Sì', + 'no' => 'No', + 'available-from' => 'Disponibile Da', + 'available-to' => 'Disponibile Fino A', + 'same-slot-all-days' => 'Stesso Slot tutti i giorni', + 'slot-has-quantity' => 'Slot ha quantità', + 'slots' => 'Slot', + 'from' => 'Da', + 'to' => 'A', + 'qty' => 'Qtà', + 'add-slot' => 'Aggiungi Slot', + 'sunday' => 'Domenica', + 'monday' => 'Lunedì', + 'tuesday' => 'Martedì', + 'wednesday' => 'Mercoledì', + 'thursday' => 'Giovedì', + 'friday' => 'Venerdì', + 'saturday' => 'Sabato', + 'renting-type' => 'Tipo di noleggio', + 'daily' => 'Base Giornaliera', + 'hourly' => 'Base Oraria', + 'daily-hourly' => 'Entrambe (Base Giornaliera e Oraria)', + 'daily-price' => 'Prezzo al giorno', + 'hourly-price' => 'Prezzo all\'ora', + 'location' => 'Location', + 'show-location' => 'Mostra Location', + 'event-start-date' => 'Data Inizio Evento', + 'event-end-date' => 'Data Fine Evento', + 'tickets' => 'Biglietti', + 'add-ticket' => 'Aggungi Biglietto', + 'name' => 'Nome', + 'price' => 'Prezzo', + 'quantity' => 'Quantità', + 'description' => 'Descrizione', + 'charged-per' => 'Charged Per', + 'guest' => 'Ospite', + 'table' => 'Tavolo', + 'prevent-scheduling-before' => 'Previeni Scheduling Prima', + 'guest-limit' => 'Limite Ospiti per Tavolo', + 'guest-capacity' => 'Capacità Ospiti', + 'type' => 'Tipo', + 'many-bookings-for-one-day' => 'Diverse prenotazioni di un giorno', + 'one-booking-for-many-days' => 'Una prenotazione per diversi giorni', + 'day' => 'Giorno', + 'status' => 'Stato', + 'open' => 'Aperto', + 'close' => 'Chiuso' + ] + ] + ], + + 'shop' => [ + 'products' => [ + 'location' => 'Location', + 'contact' => 'Contatto', + 'email' => 'Email', + 'slot-duration' => 'Durata Slot', + 'slot-duration-in-minutes' => ':minutes Minuti', + 'today-availability' => 'Disponibilità odierna', + 'slots-for-all-days' => 'Mostra per tutti i giorni', + 'sunday' => 'Domenica', + 'monday' => 'Lunedì', + 'tuesday' => 'Martedì', + 'wednesday' => 'Mercoledì', + 'thursday' => 'Giovedì', + 'friday' => 'Venerdì', + 'saturday' => 'Sabato', + 'closed' => 'Chiuso', + 'book-an-appointment' => 'Prenota un Appuntamento', + 'date' => 'Data', + 'slot' => 'Slot', + 'rent-an-item' => 'Noleggia un Articolo', + 'choose-rent-option' => 'Scegli una opzione di noleggio', + 'daily-basis' => 'Base Giornaliera', + 'hourly-basis' => 'Base Oraria', + 'select-time-slot'=> 'Seleziona slot di tempo', + 'select-slot' => 'Seleziona Slot', + 'select-date' => 'Seleziona data', + 'select-rent-time' => 'Seleziona Periodo di Noleggio', + 'from' => 'Da', + 'to' => 'A', + 'book-a-table' => 'Prenota un Tavolo', + 'special-notes' => 'Richieste/Note Speciali', + 'event-on' => 'Evento del', + 'book-your-ticket' => 'Prenota il tuo Biglietto', + 'per-ticket-price' => ':price per Biglietto', + 'number-of-tickets' => 'Numero di Biglietti', + 'total-tickets' => 'Totale Biglietti', + 'base-price' => 'Prezzo Base', + 'total-price' => 'Prezzo Totale', + 'base-price-info' => '(Questo si applicherà ad ogni tipo di biglietto per ciascuna quantità)' + ], + + 'cart' => [ + 'renting_type' => 'Tipo Noleggio', + 'daily' => 'Giornaliero', + 'hourly' => 'Orario', + 'event-ticket' => 'Biglietto Evento', + 'event-from' => 'Evento dal', + 'event-till' => 'Evento al', + 'rent-type' => 'Tipo Noleggio', + 'rent-from' => 'Noleggio Da', + 'rent-till' => 'Noleggio A', + 'booking-from' => 'Prenotazione Da', + 'booking-till' => 'Prenotazione A', + 'special-note' => 'Richieste/Note Speciali', + ] + ] +]; \ No newline at end of file diff --git a/packages/Webkul/Core/src/Resources/lang/it/validation.php b/packages/Webkul/Core/src/Resources/lang/it/validation.php new file mode 100644 index 000000000..368a2a6f3 --- /dev/null +++ b/packages/Webkul/Core/src/Resources/lang/it/validation.php @@ -0,0 +1,7 @@ + ':attribute deve essere uno slug valido.', + 'code' => ':attribute deve essere valido.', + 'decimal' => ':attribute deve essere valido.' +]; \ No newline at end of file diff --git a/packages/Webkul/Customer/src/Resources/lang/it/app.php b/packages/Webkul/Customer/src/Resources/lang/it/app.php new file mode 100644 index 000000000..de13bb197 --- /dev/null +++ b/packages/Webkul/Customer/src/Resources/lang/it/app.php @@ -0,0 +1,21 @@ + [ + 'success' => 'Prodotto aggiunto ai Preferiti', + 'failure' => 'Il Prodotto non può essere aggiunto ai Preferiti', + 'already' => 'Prodotto già presente nei tuoi Preferiti', + 'removed' => 'Prodotto rimosso con successo dai Preferiti', + 'remove-fail' => 'Non è stato possibile rimuovere il prodotto dai Preferiti', + 'empty' => 'Non hai prodotti nei tuoi Preferiti', + 'select-options' => 'Seleziona una opzione del prodotto prima di aggiungerlo ai Preferiti', + 'remove-all-success' => 'Tutti i Prodotti presenti nei preferiti sono stati rimossi', + ], + 'reviews' => [ + 'empty' => 'Non hai ancora recensito i nostri prodotti' + ], + 'forget_password' => [ + 'reset_link_sent' => 'Ti abbiamo inviato una email per generare una nuova password.' + ] + +]; \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Resources/lang/it/app.php b/packages/Webkul/Shop/src/Resources/lang/it/app.php new file mode 100644 index 000000000..93ebeef9c --- /dev/null +++ b/packages/Webkul/Shop/src/Resources/lang/it/app.php @@ -0,0 +1,687 @@ + 'La partita IVA indicata ha un formato non corretto', + 'security-warning' => 'Identificata attività sospetta!!!', + 'nothing-to-delete' => 'Niente da eliminare', + + 'layouts' => [ + 'my-account' => 'Il Mio Account', + 'profile' => 'Profilo', + 'address' => 'Indirizzo', + 'reviews' => 'Recensioni', + 'wishlist' => 'Preferiti', + 'orders' => 'Ordini', + 'downloadable-products' => 'Prodotti Scaricabili' + ], + + 'common' => [ + 'error' => 'Qualcosa è andato storto, per favore prova ancora più tardi.', + 'no-result-found' => 'Non abbiamo trovato risultati.' + ], + + 'home' => [ + 'page-title' => config('app.name') . ' - Home', + 'featured-products' => 'Prodotti in evidenza', + 'new-products' => 'Nuovi Prodotti', + 'verify-email' => 'Verifica il tuo indirizzo email', + 'resend-verify-email' => 'Reinvia email di verifica' + ], + + 'header' => [ + 'title' => 'Account', + 'dropdown-text' => 'Gestione Carrello, Ordini e Preferiti', + 'sign-in' => 'Login', + 'sign-up' => 'Registrati', + 'account' => 'Account', + 'cart' => 'Carrello', + 'profile' => 'Profilo', + 'wishlist' => 'Preferiti', + 'cart' => 'Carrello', + 'logout' => 'Logout', + 'search-text' => 'Cerca prodotti qui' + ], + + 'minicart' => [ + 'view-cart' => 'Mostra Carrello', + 'checkout' => 'Cassa', + 'cart' => 'Carrello', + 'zero' => '0' + ], + + 'footer' => [ + 'subscribe-newsletter' => 'Iscriviti alla Newsletter', + 'subscribe' => 'Iscriviti', + 'locale' => 'Lingua', + 'currency' => 'Valuta', + ], + + 'subscription' => [ + 'unsubscribe' => 'Cancellati', + 'subscribe' => 'Iscriviti', + 'subscribed' => 'Ora sei iscritto al nostro servizio di notifica.', + 'not-subscribed' => 'Non è stato possibile iscriverti al nostro servizio di notifica, prova di nuovo più tardi.', + 'already' => 'Sei già iscritto al nostro servizio di notifica.', + 'unsubscribed' => 'Sei stato rimosso dal nostro servizio di notifica.', + 'already-unsub' => 'Sei già stato cancellato.', + 'not-subscribed' => 'Errore! L\'email non può essere inviata in questo momento, per favore riprovare più tardi.' + ], + + 'search' => [ + 'no-results' => 'Nessun risultato trovato', + 'page-title' => config('app.name') . ' - Cerca', + 'found-results' => 'Risultati trovati', + 'found-result' => 'Risultato trovato' + ], + + 'reviews' => [ + 'title' => 'Titolo', + 'add-review-page-title' => 'Aggiungi Recensione', + 'write-review' => 'Scrivi una recensione', + 'review-title' => 'Dai un titolo alla tua recensione', + 'product-review-page-title' => 'Recensione Prodotto', + 'rating-reviews' => 'Valutazioni e recensioni', + 'submit' => 'INVIA', + 'delete-all' => 'Tutte le recensioni sono state eliminate con successo', + 'ratingreviews' => ':rating Valutazioni e :review Recensioni', + 'star' => 'Stella', + 'percentage' => ':percentage %', + 'id-star' => 'stella', + 'name' => 'Nome', + ], + + 'customer' => [ + 'signup-text' => [ + 'account_exists' => 'Sei già registrato?', + 'title' => 'Login' + ], + + 'signup-form' => [ + 'page-title' => 'Crea subito il tuo profilo', + 'title' => 'Registrati', + 'firstname' => 'Nome', + 'lastname' => 'Cognome', + 'email' => 'Email', + 'password' => 'Password', + 'confirm_pass' => 'Conferma Password', + 'button_title' => 'Registrati', + 'agree' => 'Acconsento', + 'terms' => 'Termini', + 'conditions' => 'Condizioni', + 'using' => 'utilizzando questo sito', + 'agreement' => 'Accordo', + 'success' => 'Account creato con successo.', + 'success-verify' => 'Account creato con successo, una e-mail è stata inviata per verifica.', + 'success-verify-email-unsent' => 'Account creato con successo, ma non è stato possibile inviare l\'email di verifica.', + 'failed' => 'Errore! Non è stato possibile creare il tuo profilo, prova di nuovo più tardi.', + 'already-verified' => 'Il tuo profilo è già stato verificato oppure il link di verifica è scaduto. Prova a chidere una nuova email di verifica.', + 'verification-not-sent' => 'Errore! Problema nell\'invio dell\'email di verifica, prova di nuovo più tardi.', + 'verification-sent' => 'Email di verifica inviata', + 'verified' => 'Il tuo account è stato verificato, prova ora ad autenticarti.', + 'verify-failed' => 'Non possiamo verificare la tua email', + 'dont-have-account' => 'Non risulti registrato sul nostro sito.', + 'customer-registration' => 'CIl cliente è stato registrato con successo' + ], + + 'login-text' => [ + 'no_account' => 'Primo accesso?', + 'title' => 'Registrati', + ], + + 'login-form' => [ + 'page-title' => 'Login', + 'title' => 'Login', + 'email' => 'Email', + 'password' => 'Password', + 'forgot_pass' => 'Dimenticato Password?', + 'button_title' => 'Login', + 'remember' => 'Ricordami', + 'footer' => '© Copyright :year Webkul Software, Tutti i diritti riservati', + 'invalid-creds' => 'Per favore verifica le tue credenziali e prova di nuovo.', + 'verify-first' => 'Verifica prima il tuo account email.', + 'not-activated' => 'La tua attivazione richiede l\'approvazione di un amministratore', + 'resend-verification' => 'Reinvia l\'email di verifica' + ], + + 'forgot-password' => [ + 'title' => 'Recupera Password', + 'email' => 'Email', + 'submit' => 'Richiedi nuova Password', + 'page_title' => 'Hai dimenticato la Password?' + ], + + 'reset-password' => [ + 'title' => 'Crea nuova Password', + 'email' => 'Email registrata', + 'password' => 'Password', + 'confirm-password' => 'Conferma Password', + 'back-link-title' => 'Ritorna a Login', + 'submit-btn-title' => 'Aggiorna Password' + ], + + 'account' => [ + 'dashboard' => 'Modifica Profilo', + 'menu' => 'Menu', + + 'profile' => [ + 'index' => [ + 'page-title' => 'Profilo', + 'title' => 'Profilo', + 'edit' => 'Modifica', + ], + + 'edit-success' => 'Profilo aggiornato con successo.', + 'edit-fail' => 'Errore! Non è stato possibile aggiornare il profilo, prova nuovamente più tardi.', + 'unmatch' => 'La vecchia password non coincide.', + + 'fname' => 'Nome', + 'lname' => 'Cognome', + 'gender' => 'Sesso', + 'other' => 'Altro', + 'male' => 'Uomo', + 'female' => 'Donna', + 'dob' => 'Data di nascita', + 'phone' => 'Telefono', + 'email' => 'Email', + 'opassword' => 'Vecchia Password', + 'password' => 'Password', + 'cpassword' => 'Conferma Password', + 'submit' => 'Aggiorna Profilo', + + 'edit-profile' => [ + 'title' => 'Modifica Profilo', + 'page-title' => 'Modifica Profilo' + ] + ], + + 'address' => [ + 'index' => [ + 'page-title' => 'Indirizzo', + 'title' => 'Indirizzo', + 'add' => 'Aggiungi Indirizzo', + 'edit' => 'Modifica', + 'empty' => 'Non hai ancora salvato i tuoi indirizzi, prova ad aggiungerne uno cliccando il link qui sotto', + 'create' => 'Crea Indirizzo', + 'delete' => 'Elimina', + 'make-default' => 'Rendi Predefinito', + 'default' => 'Predefinito', + 'contact' => 'Contatto', + 'confirm-delete' => 'Vuoi veramente eliminare questo indirizzo?', + 'default-delete' => 'L\'indirizzo predefinito non può essere modificato.', + 'enter-password' => 'Inserisci la tua Password.', + ], + + 'create' => [ + 'page-title' => 'Aggiungi Indirizzo', + 'company_name' => 'Ragione Sociale', + 'first_name' => 'Nome', + 'last_name' => 'Cognome', + 'vat_id' => 'Partita IVA', + 'vat_help_note' => '[Nota: Utilizza il codice paese con la Partita IVA. Es. IT01234567891]', + 'title' => 'Aggiungi Indirizzo', + 'street-address' => 'Indirizzo', + 'country' => 'Paese', + 'state' => 'Provincia', + 'select-state' => 'Seleziona provincia', + 'city' => 'Città', + 'postcode' => 'CAP', + 'phone' => 'Telefono', + 'submit' => 'Salva Indirizzo', + 'success' => 'Indirizzo aggiunto con successo.', + 'error' => 'Non è stato possibile aggiungere l\'indirizzo.' + ], + + 'edit' => [ + 'page-title' => 'Modifica Indirizzo', + 'company_name' => 'Ragione Sociale', + 'first_name' => 'Nome', + 'last_name' => 'Cognome', + 'vat_id' => 'Partita IVA', + 'title' => 'Modifica Indirizzo', + 'street-address' => 'Indirizzo', + 'submit' => 'Salva Indirizzo', + 'success' => 'Indirizzo aggiornato con successo.', + ], + 'delete' => [ + 'success' => 'Indirizzo eliminato con successo', + 'failure' => 'L\'indirizzo non può essere eliminato', + 'wrong-password' => 'Password errata !' + ] + ], + + 'order' => [ + 'index' => [ + 'page-title' => 'Ordini', + 'title' => 'Ordini', + 'order_id' => 'Ordine Nro', + 'date' => 'Data', + 'status' => 'Status', + 'total' => 'Totale', + 'order_number' => 'Numero Ordine', + 'processing' => 'In lavorazione', + 'completed' => 'Completato', + 'canceled' => 'Cancellato', + 'closed' => 'Chiuso', + 'pending' => 'In attesa', + 'pending-payment' => 'In attesa pagamento', + 'fraud' => 'Frode' + ], + + 'view' => [ + 'page-tile' => 'Ordine #:order_id', + 'info' => 'Informazioni', + 'placed-on' => 'Data Ordine', + 'products-ordered' => 'Prodotti Ordinati', + 'invoices' => 'Fatture', + 'shipments' => 'Spedizioni', + 'SKU' => 'SKU', + 'product-name' => 'Articolo', + 'qty' => 'Qtà', + 'item-status' => 'Stato Articolo', + 'item-ordered' => 'Ordinato (:qty_ordered)', + 'item-invoice' => 'Fatturato (:qty_invoiced)', + 'item-shipped' => 'spedito (:qty_shipped)', + 'item-canceled' => 'Cancellato (:qty_canceled)', + 'item-refunded' => 'Rimborsato (:qty_refunded)', + 'price' => 'Prezzo', + 'total' => 'Totale', + 'subtotal' => 'Subtotale', + 'shipping-handling' => 'Spedizione', + 'tax' => 'IVA', + 'discount' => 'Sconto', + 'tax-percent' => 'IVA %', + 'tax-amount' => 'IVA', + 'discount-amount' => 'Sconto', + 'grand-total' => 'Totale', + 'total-paid' => 'Totale Pagato', + 'total-refunded' => 'Total Rimborsato', + 'total-due' => 'Totale da pagare', + 'shipping-address' => 'Indirizzo Spedizione', + 'billing-address' => 'Indirizzo Ordinante', + 'shipping-method' => 'Metodo Spedizione', + 'payment-method' => 'Metodo Pagamento', + 'individual-invoice' => 'Fattura #:invoice_id', + 'individual-shipment' => 'Spedizione #:shipment_id', + 'print' => 'Stampa', + 'invoice-id' => 'Fattura Nro', + 'order-id' => 'Ordine Nro', + 'order-date' => 'Ordine Data', + 'bill-to' => 'Fatturato a', + 'ship-to' => 'Spedito a', + 'contact' => 'Contatto', + 'refunds' => 'Rimborsi', + 'individual-refund' => 'Rimborso #:refund_id', + 'adjustment-refund' => 'Rimborso', + 'adjustment-fee' => 'Commissione di rimborso', + 'cancel-btn-title' => 'Cancella', + ] + ], + + 'wishlist' => [ + 'page-title' => 'Preferiti', + 'title' => 'Preferiti', + 'deleteall' => 'Elimina tutti', + 'moveall' => 'Aggiungi tutti i Prodotti al Carrello', + 'move-to-cart' => 'Aggiungi al Carrello', + 'error' => 'Non è possibile aggiungere il prodotto ai preferiti per un problema sconosciuto, provare nuovamente più tardi', + 'add' => 'Il prodotto è stato aggiunto ai preferiti', + 'remove' => 'Articolo rimosso dai preferiti', + 'moved' => 'Articolo aggiunto al carrello', + 'option-missing' => 'Le opzioni del prodotto mancano, per questo il prodotto non può essere aggiunto ai preferiti.', + 'move-error' => 'Il prodotto non può essere aggiunto ai preferiti, prova nuovamente più tardi', + 'success' => 'Il prodotto è stato aggiunto ai preferiti', + 'failure' => 'Il prodotto non può essere aggiunto ai preferiti, prova nuovamente più tardi', + 'already' => 'Il prodotto è già presente nei tuoi preferiti', + 'removed' => 'Il prodotto è stato rimosso dai preferiti', + 'remove-fail' => 'Il prodotto non può essere rimosso dai preferiti, prova nuovamente più tardi', + 'empty' => 'Non hai ancora aggiunto prodotti ai tuoi preferiti', + 'remove-all-success' => 'Tutti gli articoli sono stati rimossi dai tuoi preferiti', + ], + + 'downloadable_products' => [ + 'title' => 'Prodotti scaricabili', + 'order-id' => 'Id Ordine', + 'date' => 'Data', + 'name' => 'Titolo', + 'status' => 'Status', + 'pending' => 'In attesa', + 'available' => 'Disponibile', + 'expired' => 'Scaduto', + 'remaining-downloads' => 'Download rimasti', + 'unlimited' => 'Illimitati', + 'download-error' => 'Il link per il Download è scaduto.' + ], + + 'review' => [ + 'index' => [ + 'title' => 'Recensioni', + 'page-title' => 'Recensioni' + ], + + 'view' => [ + 'page-tile' => 'Recensione #:id', + ] + ] + ] + ], + + 'products' => [ + 'layered-nav-title' => 'Acquista per', + 'price-label' => 'A partire da', + 'remove-filter-link-title' => 'Rimuovi filtri', + 'sort-by' => 'Ordina per', + 'from-a-z' => 'Da A-Z', + 'from-z-a' => 'Da Z-A', + 'newest-first' => 'I più recenti prima', + 'oldest-first' => 'I più datati prima', + 'cheapest-first' => 'Prezzo più basso prima', + 'expensive-first' => 'Prezzo più alto prima', + 'show' => 'Mostra', + 'pager-info' => 'Stai vedendo :showing di :total Items', + 'description' => 'Descrizione', + 'specification' => 'Specifiche', + 'total-reviews' => ':total Recensioni', + 'total-rating' => ':total_rating valutazioni e :total_reviews recensioni', + 'by' => 'Per :name', + 'up-sell-title' => 'Abbiamo trovato altri prodotti che potrebbero piacerti!', + 'related-product-title' => 'Prodotti correlati', + 'cross-sell-title' => 'Altre scelte', + 'reviews-title' => 'Valutazioni e Recensioni', + 'write-review-btn' => 'Scrivi una recensione', + 'choose-option' => 'Scegli una opzione', + 'sale' => 'Promo', + 'new' => 'Nuovo', + 'empty' => 'Nessun prodotto disponibile in questa categoria', + 'add-to-cart' => 'Aggiungi al Carrello', + 'buy-now' => 'Compra ora', + 'whoops' => 'Whoops!', + 'quantity' => 'Quantità', + 'in-stock' => 'Disponibile', + 'out-of-stock' => 'Esaurito', + 'view-all' => 'Mostra Tutto', + 'select-above-options' => 'Per favore seleziona prima le opzioni sopra.', + 'less-quantity' => 'La quantità non può essere inferiore a uno.', + 'samples' => 'Campioni', + 'links' => 'Links', + 'sample' => 'Campione', + 'name' => 'Nome', + 'qty' => 'Qtà', + 'starting-at' => 'A partire da', + 'customize-options' => 'Customizza opzioni', + 'choose-selection' => 'Scegli una selezione', + 'your-customization' => 'La tua Personalizzazione', + 'total-amount' => 'Totale', + 'none' => 'Nessuno', + 'available' => 'Disponibile' + ], + + // 'reviews' => [ + // 'empty' => 'Non hai ancora recensito alcun prodotto' + // ] + + 'buynow' => [ + 'no-options' => 'Per favore seleziona le opzioni per acquistare questo prodotto.' + ], + + 'checkout' => [ + 'cart' => [ + 'integrity' => [ + 'missing_fields' => 'Mancano alcuni campi obbligatori per questo prodotto.', + 'missing_options' => 'Mancano alcune Opzioni obbligatorie per questo prodotto.', + 'missing_links' => 'I link per il download di questo prodotto sono mancanti.', + 'qty_missing' => 'Almeno un prodotto dovrebbe avere una quantità superiore a 1.', + 'qty_impossible' => 'Non è possibile aggiungere più di un pezzo di questo articolo nel carrello.' + ], + 'create-error' => 'Si è verificato un problema durante la visualizzazione del carrello.', + 'title' => 'Carrello', + 'empty' => 'Il tuo carrello è ancora vuoto', + 'update-cart' => 'Aggiorna Carrello', + 'continue-shopping' => 'Continua con i tuoi acquisti', + 'proceed-to-checkout' => 'Procedi alla Cassa', + 'remove' => 'Rimuovi', + 'remove-link' => 'Rimuovi', + 'move-to-wishlist' => 'Sposta nella Wishlist', + 'move-to-wishlist-success' => 'Articolo spostato nella tua wishlist.', + 'move-to-wishlist-error' => 'Non è possibile spostare l\'articolo nella tua wishlist, prova ancora.', + 'add-config-warning' => 'Seleziona una opzione prima di aggiungere al carrello.', + 'quantity' => [ + 'quantity' => 'Quantità', + 'success' => 'Articoli nel carrello aggiornati con successo.', + 'illegal' => 'La quantità non può essere inferiore a 0.', + 'inventory_warning' => 'La quantità richiesta non è disponibile, prova ancora.', + 'error' => 'Non è posibile aggiornare gli articoli al momento, prova ancora.' + ], + + 'item' => [ + 'error_remove' => 'Nessun prodotto da rimuovere nel carrello.', + 'success' => 'Prodotto aggiunto al carrello.', + 'success-remove' => 'Prodotto rimosso dal carrello.', + 'error-add' => 'Il prodotto non può essere aggiunto al carrello, prova ancora.', + ], + 'quantity-error' => 'La quantità richiesta non è disponibile.', + 'cart-subtotal' => 'Subtotale Carrello', + 'cart-remove-action' => 'Vuoi veramente farlo ?', + 'partial-cart-update' => 'Solo alcuni dei prodotti sono stati aggiornati', + 'link-missing' => '', + 'event' => [ + 'expired' => 'Questo evento è terminato.' + ] + ], + + 'onepage' => [ + 'title' => 'Cassa', + 'information' => 'Informazioni', + 'shipping' => 'Spedizione', + 'payment' => 'Pagamento', + 'complete' => 'Completo', + 'billing-address' => 'Indirizzo Fatturazione', + 'sign-in' => 'Login', + 'company-name' => 'Azienda', + 'first-name' => 'Nome', + 'last-name' => 'Cognome', + 'email' => 'Email', + 'address1' => 'Indirizzo', + 'city' => 'Città', + 'state' => 'Provincia', + 'select-state' => 'Seleziona una provincia', + 'postcode' => 'CAP', + 'phone' => 'Telefono', + 'country' => 'Paese', + 'order-summary' => 'Riepilogo Ordine', + 'shipping-address' => 'Indirizzo Spedizione', + 'use_for_shipping' => 'Spedisci a questo indirizzo', + 'continue' => 'Continua', + 'shipping-method' => 'Seleziona Metodo di Spedizione', + 'payment-methods' => 'Seleziona Metodo di Pagamento', + 'payment-method' => 'Metodo di Pagamento', + 'summary' => 'Riepilogo Ordine', + 'price' => 'Prezzo', + 'quantity' => 'Quantità', + 'billing-address' => 'Indirizzo Fatturazione', + 'shipping-address' => 'Indirizzo Spedizione', + 'contact' => 'Contatto', + 'place-order' => 'Procedi con Ordine', + 'new-address' => 'Aggiungi Nuovo Indirizzo', + 'save_as_address' => 'Salva questo indirizzo', + 'apply-coupon' => 'Codice Promo', + 'amt-payable' => 'Totale da Pagare', + 'got' => 'Got', + 'free' => 'Gratis', + 'coupon-used' => 'Codice Utilizzato', + 'applied' => 'Applicato', + 'back' => 'Indietro', + 'cash-desc' => 'Contrassegno', + 'money-desc' => 'Bonifico', + 'paypal-desc' => 'Paypal', + 'free-desc' => 'Questa è una spedizine gratuita', + 'flat-desc' => 'Questa è una spedizione a prezzo fisso', + 'password' => 'Password', + 'login-exist-message' => 'Sei già registrato nel nostro store, effettua la login o continua come ospite.', + 'enter-coupon-code' => 'Inserisci Codice Promo' + ], + + 'total' => [ + 'order-summary' => 'Riepilogo Ordine', + 'sub-total' => 'Articoli', + 'grand-total' => 'Totale', + 'delivery-charges' => 'Spedizione', + 'tax' => 'IVA', + 'discount' => 'Sconto', + 'price' => 'prezzo', + 'disc-amount' => 'Totale Scontato', + 'new-grand-total' => 'Nuovo Totale', + 'coupon' => 'Codice Promo', + 'coupon-applied' => 'Codice Promo Applicato', + 'remove-coupon' => 'Rimuovi Codice Promo', + 'cannot-apply-coupon' => 'Non è possibile Applicare il Codice Promo', + 'invalid-coupon' => 'Il Codice Promo non è valido.', + 'success-coupon' => 'Codice Promo applicato con successo.', + 'coupon-apply-issue' => 'Il Codice Promo non può essere applicato.' + ], + + 'success' => [ + 'title' => 'Ordine completato con successo', + 'thanks' => 'Grazie per il tuo ordine!', + 'order-id-info' => 'Il tuo id ordine è #:order_id', + 'info' => 'Ti invieremo via email i dettagli del tuo ordine e le informazioni di tracking' + ] + ], + + 'mail' => [ + 'order' => [ + 'subject' => 'Nuova Conferma Ordine', + 'heading' => 'Conferma Ordine!', + 'dear' => ':customer_name', + 'dear-admin' => ':admin_name', + 'greeting' => 'Grazie per il tuo Oridne :order_id su :created_at', + 'greeting-admin' => 'Id Ordine :order_id su :created_at', + 'summary' => 'Riepilogo Ordine', + 'shipping-address' => 'Indirizzo Spedizione', + 'billing-address' => 'Indirizzo Fatturazione', + 'contact' => 'Contatto', + 'shipping' => 'Metodo di Spedizione', + 'payment' => 'Metodo di Pagamento', + 'price' => 'Prezzo', + 'quantity' => 'Quantità', + 'subtotal' => 'Subtotale', + 'shipping-handling' => 'Spedizione', + 'tax' => 'IVA', + 'discount' => 'Sconto', + 'grand-total' => 'Totale', + 'final-summary' => 'Grazie per il tuo interesse nel nostro store, ti invieremo un codice di tracking una volta che la spedizione sarà completata', + 'help' => 'Se hai bisogno di aiuto contattaci qui :support_email', + 'thanks' => 'Grazie!', + + 'comment' => [ + 'subject' => 'Nuovo commento aggiunto al tuo ordine', + 'dear' => ':customer_name', + 'final-summary' => 'Grazie per aver mostrato interesse per il nostro store', + 'help' => 'Se hai bisogno di aiuto contattaci all'indirizzo :support_email', + 'thanks' => 'Graze!', + ], + + 'cancel' => [ + 'subject' => 'Conferma Cancellazione Ordine', + 'heading' => 'Ordine Cancellato', + 'dear' => ':customer_name', + 'greeting' => 'Il tuo Ordine #:order_id su :created_at è stato cancellato', + 'summary' => 'Riepilogo Ordine', + 'shipping-address' => 'Indirizzo di Spedizione', + 'billing-address' => 'Indirizzo di Fattuazione', + 'contact' => 'Contatti', + 'shipping' => 'Metodo di Spedizione', + 'payment' => 'Metodo di Pagamento', + 'subtotal' => 'Subtotale', + 'shipping-handling' => 'Spedizione', + 'tax' => 'IVA', + 'discount' => 'Sconto', + 'grand-total' => 'Totale', + 'final-summary' => 'Grazie per l\'interesse mostrato nel nostro store', + 'help' => 'Se hai bisogno di qualsiasi tipo di aiuto contattaci a :support_email', + 'thanks' => 'Grazie!', + ] + ], + + 'invoice' => [ + 'heading' => 'Fattura #:invoice_id per l\'Ordine #:order_id', + 'subject' => 'Fattura per ordine #:order_id', + 'summary' => 'Dettaglio Fattura', + ], + + 'shipment' => [ + 'heading' => 'La Spedizione #:shipment_id relativa all\'Ordine #:order_id è stata generata ', + 'inventory-heading' => 'Nuova Spedizione #:shipment_id relativa all\'Ordine #:order_id è stata generata', + 'subject' => 'Spedizione per il tuo ordine #:order_id', + 'inventory-subject' => 'Nuova spedizione generata per l\'Ordine #:order_id', + 'summary' => 'Riepilogo Spedizione', + 'carrier' => 'Corriere', + 'tracking-number' => 'Codice Tracking', + 'greeting' => 'Un ordine :order_id è stato piazzato su :created_at', + ], + + 'refund' => [ + 'heading' => 'Il tuo rimborso #:refund_id per l\'Ordine #:order_id', + 'subject' => 'Rimborso per il tuo ordine #:order_id', + 'summary' => 'Riepilogo rimborso', + 'adjustment-refund' => 'Rimborso accordato', + 'adjustment-fee' => 'Commissione di rimborso' + ], + + 'forget-password' => [ + 'subject' => 'Generazione Nuova Password', + 'dear' => ':name', + 'info' => 'Ricevi questa email perchè abbiamo ricevuto una richiesta di generazione di nuova password per il tuo account', + 'reset-password' => 'Generazione nuova Password', + 'final-summary' => 'Se non hai inviato tu questa richiesta, non è necessario effettuare alcuna operazione', + 'thanks' => 'Grazie!' + ], + + 'customer' => [ + 'new' => [ + 'dear' => 'Gentile :customer_name', + 'username-email' => 'UserName/Email', + 'subject' => 'Nuova registrazione cliente', + 'password' => 'Password', + 'summary' => 'Il tuo account è stato creato. + I dettagli del tuo account sono i seguenti: ', + 'thanks' => 'Grazie!', + ], + + 'registration' => [ + 'subject' => 'Nuova registrazione cliente', + 'customer-registration' => 'Cliente registrato con successo', + 'dear' => 'Gentile :customer_name', + 'greeting' => 'Benvenuto e grazie per esserti registrato!', + 'summary' => 'Il tuo account è stato creato e puoi ora effettuare la login utilizzando il tuo indirizzo email e la password che hai scelto. Una volta effettuato l\'accesso, potrai accedere ad altri servizi tra cui revisione ordini passati, gestione prodotti preferiti e modifica dei tuoi dati.', + 'thanks' => 'Grazie!', + ], + + 'verification' => [ + 'heading' => config('app.name') . ' - Email di Verifica', + 'subject' => 'Email di verifica', + 'verify' => 'Verifica il tuo Account', + 'summary' => 'Questa email serve a verificare che l\'indirizzo email che hai inserito ti appartenga veramente. + Clicca il bottone Verifica il tuo Account qui sotto per verificare il tuo account.' + ], + + 'subscription' => [ + 'subject' => 'Email Iscrizione', + 'greeting' => ' Benvenuto ' . config('app.name') . ' - Email Iscrizione', + 'unsubscribe' => 'Cancellati', + 'summary' => 'Grazie per avere scelto di ricevere le nostre email. È passato un po\' di tempo da quando hai letto le email di ' . config('app.name') . '. Non è un nostro desidero inondare la tua casella email con le nostre comunicazioni. Se desideri comunque + non ricevere più le nostre news clicca il bottone qui sotto.' + ] + ] + ], + + 'webkul' => [ + 'copy-right' => '© Copyright :year Webkul Software, Tutti i diritti riservati', + ], + + 'response' => [ + 'create-success' => ':name creato con successoy.', + 'update-success' => ':name aggiornato con successo.', + 'delete-success' => ':name eliminato con successo.', + 'submit-success' => ':name inviato con successo.' + ], +]; \ No newline at end of file diff --git a/packages/Webkul/Ui/src/Resources/lang/it/app.php b/packages/Webkul/Ui/src/Resources/lang/it/app.php new file mode 100644 index 000000000..93125f800 --- /dev/null +++ b/packages/Webkul/Ui/src/Resources/lang/it/app.php @@ -0,0 +1,40 @@ + [ + 'actions' => 'Azioni', + 'id' => 'Le colonne indice hanno solo valore maggiore di zero', + + 'massaction' => [ + 'mass-delete-confirm' => 'Vuoi eliminare davvero :resource selezionati?', + 'mass-update-status' => 'Vuoi aggiornare davvero lo stato dei :resource selezionati?', + 'delete' => 'Vuoi davvero effettuare questa azione?', + 'edit' => 'Vuoi davvero modificare questo :resource?', + ], + + 'zero-index' => 'Le colonnne indice possono avere solo valori maggiori di zero', + 'no-records' => 'Nessun risultato trovato', + 'filter-fields-missing' => 'Alcuni dei campi obbligatori sono nulli, per favore verificare le colonne, le condizioni e i valori inseriti', + 'click_on_action' => 'Vuoi davvero effettuare questa azione?', + 'search' => 'Cerca qui...', + 'filter' => 'Filtro', + 'column' => 'Seleziona Colonna', + 'condition' => 'Seleziona Condizione', + 'contains' => 'Contiene', + 'ncontains' => 'Non contiene', + 'equals' => 'È uguale a', + 'nequals' => 'Non è uguale a', + 'greater' => 'Maggiore di', + 'less' => 'Minore di', + 'greatere' => 'Uguale o maggiore di', + 'lesse' => 'Uguale o minore di', + 'value' => 'Seleziona Valore', + 'true' => 'Vero / Attivo', + 'false' => 'Falso / Inattivo', + 'between' => 'Compreso tra', + 'apply' => 'Applica', + 'items-per-page' => 'Risultati per pagina', + 'value-here' => 'Valore qui', + 'numeric-value-here' => 'Valore numerico qui', + 'submit' => 'Invia' + ] +]; \ No newline at end of file diff --git a/packages/Webkul/Ui/src/Resources/lang/it/form.php b/packages/Webkul/Ui/src/Resources/lang/it/form.php new file mode 100644 index 000000000..30b65c91a --- /dev/null +++ b/packages/Webkul/Ui/src/Resources/lang/it/form.php @@ -0,0 +1,6 @@ + 'Inserisci :attribute', + 'select-attribute' => 'Seleziona :attribute' + ]; \ No newline at end of file diff --git a/packages/Webkul/Velocity/src/Resources/lang/it/app.php b/packages/Webkul/Velocity/src/Resources/lang/it/app.php new file mode 100644 index 000000000..8c0ed34a7 --- /dev/null +++ b/packages/Webkul/Velocity/src/Resources/lang/it/app.php @@ -0,0 +1,298 @@ + [ + 'system' => [ + 'velocity' => [ + 'general' => 'Generale', + 'category' => 'Categoria', + 'settings' => 'Impostazioni', + 'extension_name' => 'Velocity Theme', + 'error-module-inactive' => 'Attenzione: lo stato del tema Velocity è insattivo', + ], + + 'settings' => [ + 'channels'=> [ + 'subscription_bar' => 'Contenuto barra iscrizione' + ], + ], + + 'general' => [ + 'status' => 'Stato', + 'active' => 'Attivo', + 'inactive' => 'Inattivo', + ], + 'category' => [ + 'all' => 'Tutto', + 'left' => 'Sinistra', + 'right' => 'Destra', + 'active' => 'Attivo', + 'custom' => 'Custom', + 'inactive' => 'Non Attivo', + 'image-alignment' => 'Allineamento Immagine', + 'icon-status' => 'Stato Icona Categoria', + 'image-status' => 'Stato Immagine Categoria', + 'sub-category-show' => 'Mostra Sub Categoria', + 'image-height' => 'Altezza Immagine [in Pixel]', + 'image-width' => 'Larghezza Immagine [in Pixel]', + 'show-tooltip' => 'Mostra Tooltip Categoria', + 'num-sub-category' => 'Numero della Sub Categoria', + ] + ], + 'layouts' => [ + 'velocity' => 'Velocity', + 'cms-pages' => 'Pagine CMS', + 'meta-data' => 'Meta Data', + 'category-menu' => 'Menu Categoria', + 'header-content' => 'Contenuto Header', + ], + 'contents' => [ + 'self' => 'Self', + 'active' => 'Attivo', + 'new-tab' => 'Nuovo Tab', + 'inactive' => 'Non Attivo', + 'title' => 'Elenco Contenuti', + 'select' => '-- Selezione --', + 'add-title' => 'Aggiungi Contenuto', + 'btn-add-content' => 'Aggiungi Contenuto', + 'save-btn-title' => 'Salva Contenuto', + 'autocomplete' => '[Autocompleta]', + 'no-result-found' => 'Nessun record trovato.', + 'search-hint' => 'Cerca prodotto qui...', + 'mass-delete-success' => 'Contenuti selezionati eliminati con successo.', + 'tab' => [ + 'page' => 'Impostazioni Pagina', + 'content' => 'Impostazioni Contenuto', + 'meta_content' => 'Meta Data', + ], + 'page' => [ + 'title' => 'Titolo', + 'status' => 'Stato', + 'position' => 'Posizione', + ], + 'content' => [ + 'content-type' => 'Tipo Contenuto', + 'custom-title' => 'Titolo Custom', + 'category-slug' => 'Slug Categoria', + 'link-target' => 'Target Link a Pagina', + 'custom-product' => 'Prodotti dello Store', + 'custom-heading' => 'Custom Heading', + 'catalog-type' => 'Tipo Catalogo Prodotti', + 'static-description' => 'Descrizione Contenuto', + 'page-link' => 'Link Pagina [es. http://example.com/../../]', + ], + 'datagrid' => [ + 'id' => 'Id', + 'title' => 'Titolo', + 'status' => 'Stato', + 'position' => 'Posizione', + 'content-type' => 'Tpo Contenuto', + 'actions' => 'Azioni', + ] + ], + 'meta-data' => [ + 'footer' => 'Footer', + 'title' => 'Velocity meta data', + 'activate-slider' => 'Attiva Slider', + 'home-page-content' => 'Contenuti Home Page', + 'footer-left-content' => 'Contenuti Footer Sinistra', + 'subscription-content' => 'Conenuti Subscription bar', + 'sidebar-categories' => 'Categorie Sidebar', + 'footer-left-raw-content' => '

Ci piace personalizzare software e risolvere problemi del mondo reale. Siamo fortemente to our goals. We invest our resources to create world class easy to use softwares and applications for the enterprise business with the top notch, on the edge technology expertise.

', + 'slider-path' => 'Percorso Slider', + 'category-logo' => 'Logo Categoria', + 'product-policy' => 'Policy Prodotto', + 'featured-product' => 'Prodotti in evidenza', + 'new-products' => 'Nuovi Prodotti', + 'update-meta-data' => 'Aggiorna Meta Data', + 'product-view-image' => 'Immagine Vista Prodotto', + 'advertisement-two' => 'Advertisement Two Images', + 'advertisement-one' => 'Advertisement One Images', + 'footer-middle-content' => 'Contenuto Footer Centrale', + 'advertisement-four' => 'Advertisement Four Images', + 'advertisement-three' => 'Advertisement Three Images', + 'images' => 'Immmagini', + 'general' => 'Generale', + 'add-image-btn-title' => 'Aggiungi Immagine' + ], + 'category' => [ + 'save-btn-title' => 'Salva Menu', + 'title' => 'Elenco Menu Categorie', + 'add-title' => 'Aggiungi Menu Contenuto', + 'edit-title' => 'Modifica Menu Contenuto', + 'btn-add-category' => 'Aggiungi Contenuto Categoria', + 'datagrid' => [ + 'category-id' => 'Id Categoria', + 'category-name' => 'Nome Categoria', + 'category-icon' => 'Icona Categoria', + 'category-status' => 'Stato', + ], + 'tab' => [ + 'general' => 'Generale', + ], + 'status' => 'Status', + 'active' => 'Attivo', + 'inactive' => 'Non Attivo', + 'select' => '-- Seleziona --', + 'icon-class' => 'Classe Icona', + 'select-category' => 'Scegli Categoria', + 'tooltip-content' => 'Contenuto Tooltip', + 'mass-delete-success' => 'Categorie a menu eliminate con successo.', + ], + 'general' => [ + 'locale_logo' => 'Logo Lingua', + ], + ], + + 'home' => [ + 'view-all' => 'Mostra tutto', + 'add-to-cart' => 'Aggiungi al Carrello', + 'hot-categories' => 'Categorie Hot', + 'payment-methods' => 'Metodi Pagamenti', + 'customer-reviews' => 'Recensioni Clienti', + 'shipping-methods' => 'Metodi di Spedizione', + 'popular-categories' => 'Categorie Popolari', + ], + + 'header' => [ + 'cart' => 'Carrello', + 'cart' => 'Carrello', + 'guest' => 'Guest', + 'logout' => 'Logout', + 'title' => 'Account', + 'account' => 'Account', + 'profile' => 'Profilo', + 'wishlist' => 'Wishlist', + 'all-categories' => 'Tutte le Categorie', + 'search-text' => 'Cerca prodotti qui', + 'welcome-message' => 'Benvenuto, :customer_name', + 'dropdown-text' => 'Gestione Carrello, Ordini e Wishlist', + ], + + 'menu-navbar' => [ + 'text-more' => 'More', + 'text-category' => 'Acquista per Categoria', + ], + + 'minicart' => [ + 'cart' => 'Carrello', + 'view-cart' => 'Vai al Carrello', + ], + + 'checkout' => [ + 'qty' => 'Qtà', + 'checkout' => 'Cassa', + 'cart' => [ + 'view-cart' => 'Vai al Carrello', + 'cart-summary' => 'Sommario Carrello', + ], + 'qty' => 'Qtà', + 'items' => 'Articoli', + 'subtotal' => 'Subtotale', + 'sub-total' => 'Sub Totale', + 'proceed' => 'Procedi alla cassa', + ], + + 'customer' => [ + + 'compare' => [ + 'text' => 'Compara', + 'compare_similar_items' => 'Compara articoli simili', + 'added' => 'Articolo aggiunto alla lista di comparazione', + 'already_added' => 'Articolo già aggiunto alla lista di comparazione', + 'removed' => 'Articolo rimosso dalla lista di comparazione', + 'empty-text' => "Non hai articoli nella tua lista di comparazione", + ], + 'login-form' => [ + 'sign-up' => 'Registrati', + 'new-customer' => 'Nuovo Cliente', + 'customer-login' => 'Login Cliente', + 'registered-user' => 'Utente Registrato', + 'your-email-address' => 'Il tuo indirizzo email', + 'form-login-text' => 'Se hai un account, effettua login con la tua email.', + ], + 'signup-form' => [ + 'login' => 'Login', + 'become-user' => 'Diventa Utente', + 'user-registration' => 'Registrazione Utente', + 'form-sginup-text' => 'Se sei nuovo nel nostro store, siamo lieti di averti come nuovo amico.', + ], + 'forget-password' => [ + 'login' => 'Login', + 'forgot-password' => 'Password dimenticata', + 'recover-password' => 'Recupera Password', + 'recover-password-text' => 'Se hai dimenticato la password, recuperala inserendo il tuo indirizzo email.', + ] + ], + + 'error' => [ + 'go-to-home' => 'Vai alla home', + 'page-lost-short' => 'Page lost content', + 'something-went-wrong' => 'Qualcosa è andato storto', + 'page-lost-description' => "La pagina che stavi cercando non è disponibile. Prova a cercare ancora o usa il tasto Torna Indietro qui sotto.", + ], + + 'products' => [ + 'text' => 'Prodotti', + 'details' => 'Dettagli', + 'reviews-title' => 'Recensioni', + 'reviewed' => 'Recensito', + 'review-by' => 'Recensione di', + 'quick-view' => 'Vista veloce', + 'not-available' => 'Non Disponibile', + 'submit-review' => 'Invia Recensione', + 'ratings' => 'Valutazioni :totalRatings', + 'reviews-count' => ':totalReviews Recensioni', + 'customer-rating' => 'Valutazione Cliente', + 'more-infomation' => 'Scopri di più', + 'view-all-reviews' => 'Mostra tutte le Recensioni', + 'write-your-review' => 'Scrivi la tua Recensione', + 'short-description' => 'Descrizioni Brevi', + 'recently-viewed' => 'Prodotti visti di recente', + 'be-first-review' => 'Sii il primo a scrivere una review', + ], + + 'shop' => [ + 'gender' => [ + 'male' => 'Maschio', + 'other' => 'Altro', + 'female' => 'Femmina', + ], + 'general' => [ + 'no' => 'No', + 'yes' => 'Sì', + 'view' => 'View', + 'filter' => 'Filtro', + 'orders' => 'Ordini', + 'update' => 'Aggiorna', + 'reviews' => 'Recensioni', + 'addresses' => 'Indirizzi', + 'top-brands' => 'Marchi top', + 'new-password' => 'Nuova password', + 'downloadables' => 'Prodotti Scaricabili', + 'confirm-new-password' => 'Conferma nuova password', + 'enter-current-password' => 'Inserisci la password attuale', + + 'alert' => [ + 'info' => 'Info', + 'error' => 'Errore', + 'success' => 'Successo', + 'warning' => 'Attenzione', + ], + ], + 'wishlist' => [ + 'add-wishlist-text' => 'Aggiungi prodotto a wishlist', + 'remove-wishlist-text' => 'Rimuovi prodotti da wishlist' + ] + ], + + 'responsive' => [ + 'header' => [ + 'done' => 'Fatto', + 'languages' => 'Lingue', + 'greeting' => 'Benvenuto, :customer !', + ] + ], +] + +?> \ No newline at end of file diff --git a/packages/Webkul/Velocity/src/Resources/lang/it/app.php.bak b/packages/Webkul/Velocity/src/Resources/lang/it/app.php.bak new file mode 100644 index 000000000..b438ac176 --- /dev/null +++ b/packages/Webkul/Velocity/src/Resources/lang/it/app.php.bak @@ -0,0 +1,298 @@ + [ + 'system' => [ + 'velocity' => [ + 'general' => 'Generale', + 'category' => 'Categoria', + 'settings' => 'Impostazioni', + 'extension_name' => 'Velocity Theme', + 'error-module-inactive' => 'Attenzione: lo stato del tema Velocity è insattivo', + ], + + 'settings' => [ + 'channels'=> [ + 'subscription_bar' => 'Contenuto barra iscrizione' + ], + ], + + 'general' => [ + 'status' => 'Stato', + 'active' => 'Attivo', + 'inactive' => 'Inattivo', + ], + 'category' => [ + 'all' => 'Tutto', + 'left' => 'Sinistra', + 'right' => 'Destra', + 'active' => 'Attivo', + 'custom' => 'Custom', + 'inactive' => 'Non Attivo', + 'image-alignment' => 'Allineamento Immagine', + 'icon-status' => 'Stato Icona Categoria', + 'image-status' => 'Stato Immagine Categoria', + 'sub-category-show' => 'Mostra Sub Categoria', + 'image-height' => 'Altezza Immagine [in Pixel]', + 'image-width' => 'Larghezza Immagine [in Pixel]', + 'show-tooltip' => 'Mostra Tooltip Categoria', + 'num-sub-category' => 'Numero della Sub Categoria', + ] + ], + 'layouts' => [ + 'velocity' => 'Velocity', + 'cms-pages' => 'Pagine CMS', + 'meta-data' => 'Meta Data', + 'category-menu' => 'Menu Categoria', + 'header-content' => 'Contenuto Header', + ], + 'contents' => [ + 'self' => 'Self', + 'active' => 'Attivo', + 'new-tab' => 'Nuovo Tab', + 'inactive' => 'Non Attivo', + 'title' => 'Elenco Contenuti', + 'select' => '-- Selezione --', + 'add-title' => 'Aggiungi Contenuto', + 'btn-add-content' => 'Aggiungi Contenuto', + 'save-btn-title' => 'Salva Contenuto', + 'autocomplete' => '[Autocompleta]', + 'no-result-found' => 'Nessun record trovato.', + 'search-hint' => 'Cerca prodotto qui...', + 'mass-delete-success' => 'Contenuti selezionati eliminati con successo.', + 'tab' => [ + 'page' => 'Impostazioni Pagina', + 'content' => 'Impostazioni Contenuto', + 'meta_content' => 'Meta Data', + ], + 'page' => [ + 'title' => 'Titolo', + 'status' => 'Stato', + 'position' => 'Posizione', + ], + 'content' => [ + 'content-type' => 'Tipo Contenuto', + 'custom-title' => 'Titolo Custom', + 'category-slug' => 'Slug Categoria', + 'link-target' => 'Target Link a Pagina', + 'custom-product' => 'Prodotti dello Store', + 'custom-heading' => 'Custom Heading', + 'catalog-type' => 'Tipo Catalogo Prodotti', + 'static-description' => 'Descrizione Contenuto', + 'page-link' => 'Link Pagina [es. http://example.com/../../]', + ], + 'datagrid' => [ + 'id' => 'Id', + 'title' => 'Titolo', + 'status' => 'Stato', + 'position' => 'Posizione', + 'content-type' => 'Tpo Contenuto', + 'actions' => 'Azioni', + ] + ], + 'meta-data' => [ + 'footer' => 'Footer', + 'title' => 'Velocity meta data', + 'activate-slider' => 'Attiva Slider', + 'home-page-content' => 'Contenuti Home Page', + 'footer-left-content' => 'Contenuti Footer Sinistra', + 'subscription-content' => 'Conenuti Subscription bar', + 'sidebar-categories' => 'Categorie Sidebar', + 'footer-left-raw-content' => '

Ci piace personalizzare software e risolvere problemi del mondo reale. Siamo fortemente to our goals. We invest our resources to create world class easy to use softwares and applications for the enterprise business with the top notch, on the edge technology expertise.

', + 'slider-path' => 'Percorso Slider', + 'category-logo' => 'Logo Categoria', + 'product-policy' => 'Policy Prodotto', + 'featured-product' => 'Prodotti in evidenza', + 'new-products' => 'Nuovi Prodotti', + 'update-meta-data' => 'Aggiorna Meta Data', + 'product-view-image' => 'Immagine Vista Prodotto', + 'advertisement-two' => 'Advertisement Two Images', + 'advertisement-one' => 'Advertisement One Images', + 'footer-middle-content' => 'Contenuto Footer Centrale', + 'advertisement-four' => 'Advertisement Four Images', + 'advertisement-three' => 'Advertisement Three Images', + 'images' => 'Immmagini', + 'general' => 'Generale', + 'add-image-btn-title' => 'Aggiungi Immagine' + ], + 'category' => [ + 'save-btn-title' => 'Salva Menu', + 'title' => 'Elenco Menu Categorie', + 'add-title' => 'Aggiungi Menu Contenuto', + 'edit-title' => 'Modifica Menu Contenuto', + 'btn-add-category' => 'Aggiungi Contenuto Categoria', + 'datagrid' => [ + 'category-id' => 'Id Categoria', + 'category-name' => 'Nome Categoria', + 'category-icon' => 'Icona Categoria', + 'category-status' => 'Stato', + ], + 'tab' => [ + 'general' => 'Generale', + ], + 'status' => 'Status', + 'active' => 'Attivo', + 'inactive' => 'Non Attivo', + 'select' => '-- Seleziona --', + 'icon-class' => 'Classe Icona', + 'select-category' => 'Scegli Categoria', + 'tooltip-content' => 'Contenuto Tooltip', + 'mass-delete-success' => 'Categorie a menu eliminate con successo.', + ], + 'general' => [ + 'locale_logo' => 'Logo Lingua', + ], + ], + + 'home' => [ + 'view-all' => 'Mostra tutto', + 'add-to-cart' => 'Aggiungi al Carrello', + 'hot-categories' => 'Categorie Hot', + 'payment-methods' => 'Metodi Pagamenti', + 'customer-reviews' => 'Recensioni Clienti', + 'shipping-methods' => 'Metodi di Spedizione', + 'popular-categories' => 'Categorie Popolari', + ], + + 'header' => [ + 'cart' => 'Carrello', + 'cart' => 'Carrello', + 'guest' => 'Guest', + 'logout' => 'Logout', + 'title' => 'Account', + 'account' => 'Account', + 'profile' => 'Profilo', + 'wishlist' => 'Wishlist', + 'all-categories' => 'Tutte le Categorie', + 'search-text' => 'Cerca prodotti qui', + 'welcome-message' => 'Benvenuto, :customer_name', + 'dropdown-text' => 'Gestione Carrello, Ordini e Wishlist', + ], + + 'menu-navbar' => [ + 'text-more' => 'More', + 'text-category' => 'Acquista per Categoria', + ], + + 'minicart' => [ + 'cart' => 'Carrello', + 'view-cart' => 'Vai al Carrello', + ], + + 'checkout' => [ + 'qty' => 'Qtà', + 'checkout' => 'Cassa', + 'cart' => [ + 'view-cart' => 'Vai al Carrello', + 'cart-summary' => 'Sommario Carrello', + ], + 'qty' => 'Qtà', + 'items' => 'Articoli', + 'subtotal' => 'Subtotale', + 'sub-total' => 'Sub Totale', + 'proceed' => 'Procedi alla cassa', + ], + + 'customer' => [ + + 'compare' => [ + 'text' => 'Compara', + 'compare_similar_items' => 'Compara articoli simili', + 'added' => 'Articolo aggiunto alla lista di comparazione', + 'already_added' => 'Articolo già aggiunto alla lista di comparazione', + 'removed' => 'Articolo rimosso dalla lista di comparazione', + 'empty-text' => "Non hai articoli nella tua lista di comparazione", + ], + 'login-form' => [ + 'sign-up' => 'Registrati', + 'new-customer' => 'Nuovo Cliente', + 'customer-login' => 'Login Cliente', + 'registered-user' => 'Utente Registrato', + 'your-email-address' => 'Il tuo indirizzo email', + 'form-login-text' => 'Se hai un account, effettua login con la tua email.', + ], + 'signup-form' => [ + 'login' => 'Login', + 'become-user' => 'Diventa Utente', + 'user-registration' => 'Registrazione Utente', + 'form-sginup-text' => 'Se sei nuovo nel nostro store, siamo lieti di averti come nuovo amico.', + ], + 'forget-password' => [ + 'login' => 'Login', + 'forgot-password' => 'Password dimenticata', + 'recover-password' => 'Recupera Password', + 'recover-password-text' => 'Se hai dimenticato la password, recuperala inserendo il tuo indirizzo email.', + ] + ], + + 'error' => [ + 'go-to-home' => 'Vai alla home', + 'page-lost-short' => 'Page lost content', + 'something-went-wrong' => 'Qualcosa è andato storto', + 'page-lost-description' => "La pagina che stavi cercando non è disponibile. Prova a cercare ancora o usa il tasto Torna Indietro qui sotto.", + ], + + 'products' => [ + 'text' => 'Prodotti', + 'details' => 'Dettagli', + 'reviews-title' => 'Recensioni', + 'reviewed' => 'Recensito', + 'review-by' => 'Recensione di', + 'quick-view' => 'Vista veloce', + 'not-available' => 'Non Disponibile', + 'submit-review' => 'Invia Recensione', + 'ratings' => 'Valutazioni :totalRatings', + 'reviews-count' => ':totalReviews Recensioni', + 'customer-rating' => 'Valutazione Cliente', + 'more-infomation' => 'Scopri di più', + 'view-all-reviews' => 'Mostra tutte le Recensioni', + 'write-your-review' => 'Scrivi la tua Recensione', + 'short-description' => 'Descrizioni Brevi', + 'recently-viewed' => 'Prodotti visti di recente', + 'be-first-review' => 'Sii il primo a scrivere una review', + ], + + 'shop' => [ + 'gender' => [ + 'male' => 'Maschio', + 'other' => 'Altro', + 'female' => 'Femmina', + ], + 'general' => [ + 'no' => 'No', + 'yes' => 'Sì', + 'view' => 'View', + 'filter' => 'Filtro', + 'orders' => 'Ordini', + 'update' => 'Aggiorna', + 'reviews' => 'Recensioni', + 'addresses' => 'Indirizzi', + 'top-brands' => 'Marchi top', + 'new-password' => 'Nuova password', + 'downloadables' => 'Prodotti Scaricabili', + 'confirm-new-password' => 'Conferma nuova password', + 'enter-current-password' => 'Inserisci la password attuale', + + 'alert' => [ + 'info' => 'Info', + 'error' => 'Errore', + 'success' => 'Successo', + 'warning' => 'Attenzione', + ], + ], + 'wishlist' => [ + 'add-wishlist-text' => 'Aggiungi prodotto a wishlist', + 'remove-wishlist-text' => 'Rimuovi prodotti da wishlist' + ] + ], + + 'responsive' => [ + 'header' => [ + 'done' => 'Fatto', + 'languages' => 'Lingue', + 'greeting' => 'Benvenuto, :customer !', + ] + ], +] + +?> \ No newline at end of file From 909913870baae3fc944b2ceb4b63c8b6c912266b Mon Sep 17 00:00:00 2001 From: ottopodo Date: Mon, 11 May 2020 22:46:35 +0200 Subject: [PATCH 09/12] Italian translation Correct bug --- .../Admin/src/Resources/lang/it/app.php | 4 +- .../src/Resources/lang/it/app.php.bak | 298 ------------------ 2 files changed, 2 insertions(+), 300 deletions(-) delete mode 100644 packages/Webkul/Velocity/src/Resources/lang/it/app.php.bak diff --git a/packages/Webkul/Admin/src/Resources/lang/it/app.php b/packages/Webkul/Admin/src/Resources/lang/it/app.php index b9261f724..2494bd14d 100644 --- a/packages/Webkul/Admin/src/Resources/lang/it/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/it/app.php @@ -32,7 +32,7 @@ return [ 'status' => 'Stato', 'select-option' => 'Seleziona opzione', 'category' => 'Categoria', - + 'common' => [ 'no-result-found' => 'Non è stato trovato nessun record.', 'country' => 'Paese', @@ -371,7 +371,7 @@ return [ 'total-due' => 'Totale Dovuto', 'cancel-confirm-msg' => 'Sei sicuro di voler cancellare questo ordine ?', 'refund-btn-title' => 'Rimborsa', - 'refunds' => 'Rimbrsi' + 'refunds' => 'Rimborsi', 'comment-added-success' => 'Commento aggiunto con successo.', 'comment' => 'Commento', 'submit-comment' => 'Invia Commento', diff --git a/packages/Webkul/Velocity/src/Resources/lang/it/app.php.bak b/packages/Webkul/Velocity/src/Resources/lang/it/app.php.bak deleted file mode 100644 index b438ac176..000000000 --- a/packages/Webkul/Velocity/src/Resources/lang/it/app.php.bak +++ /dev/null @@ -1,298 +0,0 @@ - [ - 'system' => [ - 'velocity' => [ - 'general' => 'Generale', - 'category' => 'Categoria', - 'settings' => 'Impostazioni', - 'extension_name' => 'Velocity Theme', - 'error-module-inactive' => 'Attenzione: lo stato del tema Velocity è insattivo', - ], - - 'settings' => [ - 'channels'=> [ - 'subscription_bar' => 'Contenuto barra iscrizione' - ], - ], - - 'general' => [ - 'status' => 'Stato', - 'active' => 'Attivo', - 'inactive' => 'Inattivo', - ], - 'category' => [ - 'all' => 'Tutto', - 'left' => 'Sinistra', - 'right' => 'Destra', - 'active' => 'Attivo', - 'custom' => 'Custom', - 'inactive' => 'Non Attivo', - 'image-alignment' => 'Allineamento Immagine', - 'icon-status' => 'Stato Icona Categoria', - 'image-status' => 'Stato Immagine Categoria', - 'sub-category-show' => 'Mostra Sub Categoria', - 'image-height' => 'Altezza Immagine [in Pixel]', - 'image-width' => 'Larghezza Immagine [in Pixel]', - 'show-tooltip' => 'Mostra Tooltip Categoria', - 'num-sub-category' => 'Numero della Sub Categoria', - ] - ], - 'layouts' => [ - 'velocity' => 'Velocity', - 'cms-pages' => 'Pagine CMS', - 'meta-data' => 'Meta Data', - 'category-menu' => 'Menu Categoria', - 'header-content' => 'Contenuto Header', - ], - 'contents' => [ - 'self' => 'Self', - 'active' => 'Attivo', - 'new-tab' => 'Nuovo Tab', - 'inactive' => 'Non Attivo', - 'title' => 'Elenco Contenuti', - 'select' => '-- Selezione --', - 'add-title' => 'Aggiungi Contenuto', - 'btn-add-content' => 'Aggiungi Contenuto', - 'save-btn-title' => 'Salva Contenuto', - 'autocomplete' => '[Autocompleta]', - 'no-result-found' => 'Nessun record trovato.', - 'search-hint' => 'Cerca prodotto qui...', - 'mass-delete-success' => 'Contenuti selezionati eliminati con successo.', - 'tab' => [ - 'page' => 'Impostazioni Pagina', - 'content' => 'Impostazioni Contenuto', - 'meta_content' => 'Meta Data', - ], - 'page' => [ - 'title' => 'Titolo', - 'status' => 'Stato', - 'position' => 'Posizione', - ], - 'content' => [ - 'content-type' => 'Tipo Contenuto', - 'custom-title' => 'Titolo Custom', - 'category-slug' => 'Slug Categoria', - 'link-target' => 'Target Link a Pagina', - 'custom-product' => 'Prodotti dello Store', - 'custom-heading' => 'Custom Heading', - 'catalog-type' => 'Tipo Catalogo Prodotti', - 'static-description' => 'Descrizione Contenuto', - 'page-link' => 'Link Pagina [es. http://example.com/../../]', - ], - 'datagrid' => [ - 'id' => 'Id', - 'title' => 'Titolo', - 'status' => 'Stato', - 'position' => 'Posizione', - 'content-type' => 'Tpo Contenuto', - 'actions' => 'Azioni', - ] - ], - 'meta-data' => [ - 'footer' => 'Footer', - 'title' => 'Velocity meta data', - 'activate-slider' => 'Attiva Slider', - 'home-page-content' => 'Contenuti Home Page', - 'footer-left-content' => 'Contenuti Footer Sinistra', - 'subscription-content' => 'Conenuti Subscription bar', - 'sidebar-categories' => 'Categorie Sidebar', - 'footer-left-raw-content' => '

Ci piace personalizzare software e risolvere problemi del mondo reale. Siamo fortemente to our goals. We invest our resources to create world class easy to use softwares and applications for the enterprise business with the top notch, on the edge technology expertise.

', - 'slider-path' => 'Percorso Slider', - 'category-logo' => 'Logo Categoria', - 'product-policy' => 'Policy Prodotto', - 'featured-product' => 'Prodotti in evidenza', - 'new-products' => 'Nuovi Prodotti', - 'update-meta-data' => 'Aggiorna Meta Data', - 'product-view-image' => 'Immagine Vista Prodotto', - 'advertisement-two' => 'Advertisement Two Images', - 'advertisement-one' => 'Advertisement One Images', - 'footer-middle-content' => 'Contenuto Footer Centrale', - 'advertisement-four' => 'Advertisement Four Images', - 'advertisement-three' => 'Advertisement Three Images', - 'images' => 'Immmagini', - 'general' => 'Generale', - 'add-image-btn-title' => 'Aggiungi Immagine' - ], - 'category' => [ - 'save-btn-title' => 'Salva Menu', - 'title' => 'Elenco Menu Categorie', - 'add-title' => 'Aggiungi Menu Contenuto', - 'edit-title' => 'Modifica Menu Contenuto', - 'btn-add-category' => 'Aggiungi Contenuto Categoria', - 'datagrid' => [ - 'category-id' => 'Id Categoria', - 'category-name' => 'Nome Categoria', - 'category-icon' => 'Icona Categoria', - 'category-status' => 'Stato', - ], - 'tab' => [ - 'general' => 'Generale', - ], - 'status' => 'Status', - 'active' => 'Attivo', - 'inactive' => 'Non Attivo', - 'select' => '-- Seleziona --', - 'icon-class' => 'Classe Icona', - 'select-category' => 'Scegli Categoria', - 'tooltip-content' => 'Contenuto Tooltip', - 'mass-delete-success' => 'Categorie a menu eliminate con successo.', - ], - 'general' => [ - 'locale_logo' => 'Logo Lingua', - ], - ], - - 'home' => [ - 'view-all' => 'Mostra tutto', - 'add-to-cart' => 'Aggiungi al Carrello', - 'hot-categories' => 'Categorie Hot', - 'payment-methods' => 'Metodi Pagamenti', - 'customer-reviews' => 'Recensioni Clienti', - 'shipping-methods' => 'Metodi di Spedizione', - 'popular-categories' => 'Categorie Popolari', - ], - - 'header' => [ - 'cart' => 'Carrello', - 'cart' => 'Carrello', - 'guest' => 'Guest', - 'logout' => 'Logout', - 'title' => 'Account', - 'account' => 'Account', - 'profile' => 'Profilo', - 'wishlist' => 'Wishlist', - 'all-categories' => 'Tutte le Categorie', - 'search-text' => 'Cerca prodotti qui', - 'welcome-message' => 'Benvenuto, :customer_name', - 'dropdown-text' => 'Gestione Carrello, Ordini e Wishlist', - ], - - 'menu-navbar' => [ - 'text-more' => 'More', - 'text-category' => 'Acquista per Categoria', - ], - - 'minicart' => [ - 'cart' => 'Carrello', - 'view-cart' => 'Vai al Carrello', - ], - - 'checkout' => [ - 'qty' => 'Qtà', - 'checkout' => 'Cassa', - 'cart' => [ - 'view-cart' => 'Vai al Carrello', - 'cart-summary' => 'Sommario Carrello', - ], - 'qty' => 'Qtà', - 'items' => 'Articoli', - 'subtotal' => 'Subtotale', - 'sub-total' => 'Sub Totale', - 'proceed' => 'Procedi alla cassa', - ], - - 'customer' => [ - - 'compare' => [ - 'text' => 'Compara', - 'compare_similar_items' => 'Compara articoli simili', - 'added' => 'Articolo aggiunto alla lista di comparazione', - 'already_added' => 'Articolo già aggiunto alla lista di comparazione', - 'removed' => 'Articolo rimosso dalla lista di comparazione', - 'empty-text' => "Non hai articoli nella tua lista di comparazione", - ], - 'login-form' => [ - 'sign-up' => 'Registrati', - 'new-customer' => 'Nuovo Cliente', - 'customer-login' => 'Login Cliente', - 'registered-user' => 'Utente Registrato', - 'your-email-address' => 'Il tuo indirizzo email', - 'form-login-text' => 'Se hai un account, effettua login con la tua email.', - ], - 'signup-form' => [ - 'login' => 'Login', - 'become-user' => 'Diventa Utente', - 'user-registration' => 'Registrazione Utente', - 'form-sginup-text' => 'Se sei nuovo nel nostro store, siamo lieti di averti come nuovo amico.', - ], - 'forget-password' => [ - 'login' => 'Login', - 'forgot-password' => 'Password dimenticata', - 'recover-password' => 'Recupera Password', - 'recover-password-text' => 'Se hai dimenticato la password, recuperala inserendo il tuo indirizzo email.', - ] - ], - - 'error' => [ - 'go-to-home' => 'Vai alla home', - 'page-lost-short' => 'Page lost content', - 'something-went-wrong' => 'Qualcosa è andato storto', - 'page-lost-description' => "La pagina che stavi cercando non è disponibile. Prova a cercare ancora o usa il tasto Torna Indietro qui sotto.", - ], - - 'products' => [ - 'text' => 'Prodotti', - 'details' => 'Dettagli', - 'reviews-title' => 'Recensioni', - 'reviewed' => 'Recensito', - 'review-by' => 'Recensione di', - 'quick-view' => 'Vista veloce', - 'not-available' => 'Non Disponibile', - 'submit-review' => 'Invia Recensione', - 'ratings' => 'Valutazioni :totalRatings', - 'reviews-count' => ':totalReviews Recensioni', - 'customer-rating' => 'Valutazione Cliente', - 'more-infomation' => 'Scopri di più', - 'view-all-reviews' => 'Mostra tutte le Recensioni', - 'write-your-review' => 'Scrivi la tua Recensione', - 'short-description' => 'Descrizioni Brevi', - 'recently-viewed' => 'Prodotti visti di recente', - 'be-first-review' => 'Sii il primo a scrivere una review', - ], - - 'shop' => [ - 'gender' => [ - 'male' => 'Maschio', - 'other' => 'Altro', - 'female' => 'Femmina', - ], - 'general' => [ - 'no' => 'No', - 'yes' => 'Sì', - 'view' => 'View', - 'filter' => 'Filtro', - 'orders' => 'Ordini', - 'update' => 'Aggiorna', - 'reviews' => 'Recensioni', - 'addresses' => 'Indirizzi', - 'top-brands' => 'Marchi top', - 'new-password' => 'Nuova password', - 'downloadables' => 'Prodotti Scaricabili', - 'confirm-new-password' => 'Conferma nuova password', - 'enter-current-password' => 'Inserisci la password attuale', - - 'alert' => [ - 'info' => 'Info', - 'error' => 'Errore', - 'success' => 'Successo', - 'warning' => 'Attenzione', - ], - ], - 'wishlist' => [ - 'add-wishlist-text' => 'Aggiungi prodotto a wishlist', - 'remove-wishlist-text' => 'Rimuovi prodotti da wishlist' - ] - ], - - 'responsive' => [ - 'header' => [ - 'done' => 'Fatto', - 'languages' => 'Lingue', - 'greeting' => 'Benvenuto, :customer !', - ] - ], -] - -?> \ No newline at end of file From 15320934b47c37be9b7bb05eae42bf555f51ea45 Mon Sep 17 00:00:00 2001 From: Steffen Mahler Date: Tue, 12 May 2020 16:43:56 +0200 Subject: [PATCH 10/12] fix issue with coupons with same code --- .../Webkul/CartRule/src/Helpers/CartRule.php | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/packages/Webkul/CartRule/src/Helpers/CartRule.php b/packages/Webkul/CartRule/src/Helpers/CartRule.php index 83e47f6d2..b10d2721b 100644 --- a/packages/Webkul/CartRule/src/Helpers/CartRule.php +++ b/packages/Webkul/CartRule/src/Helpers/CartRule.php @@ -124,7 +124,9 @@ class CartRule $this->processFreeShippingDiscount($cart); - $this->validateCouponCode(); + if (! $this->checkCouponCode()) { + cart()->removeCouponCode(); + } } /** @@ -516,23 +518,26 @@ class CartRule } /** - * Check if coupon code is valid or not, if not remove from cart + * Check if coupon code is applied or not * - * @return void + * @return bool */ - public function validateCouponCode() + public function checkCouponCode(): bool { - $cart = Cart::getCart(); + $cart = cart()->getCart(); if (! $cart->coupon_code) { - return; + return true; } - $coupon = $this->cartRuleCouponRepository->findOneByField('code', $cart->coupon_code); - - if (! $coupon || ! in_array($coupon->cart_rule_id, explode(',', $cart->applied_cart_rule_ids))) { - Cart::removeCouponCode(); + $coupons = $this->cartRuleCouponRepository->where(['code' => $cart->coupon_code])->get(); + foreach ($coupons as $coupon) { + if (in_array($coupon->cart_rule_id, explode(',', $cart->applied_cart_rule_ids))) { + return true; + } } + + return false; } /** From 020df01980a92b16e9d03eaa92ac86ecb89979b5 Mon Sep 17 00:00:00 2001 From: Pranshu Tomar Date: Wed, 13 May 2020 16:53:25 +0530 Subject: [PATCH 11/12] Issue #3054 fixed --- packages/Webkul/Sales/src/Repositories/OrderItemRepository.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php b/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php index c318f8b30..9dd308621 100755 --- a/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php +++ b/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php @@ -116,7 +116,7 @@ class OrderItemRepository extends Repository } $orderedInventory = $item->product->ordered_inventories() - ->where('channel_id', $orderItem->order->channel->id) + ->where('channel_id', $orderItem->order->channel_id) ->first(); $qty = $item->qty_ordered ?: $item->parent->qty_ordered; From eb109b2aee1fe87884e3054454d37fd8ebfcbf50 Mon Sep 17 00:00:00 2001 From: Pranshu Tomar Date: Wed, 13 May 2020 17:21:44 +0530 Subject: [PATCH 12/12] Issue #3048 fixed --- composer.json | 1 - 1 file changed, 1 deletion(-) diff --git a/composer.json b/composer.json index 822b663ab..ce6a19934 100755 --- a/composer.json +++ b/composer.json @@ -31,7 +31,6 @@ "laravel/helpers": "^1.1", "laravel/tinker": "^1.0", "maatwebsite/excel": "3.1.18", - "nwidart/laravel-modules": "^3.2", "prettus/l5-repository": "^2.6", "tymon/jwt-auth": "^1.0.0", "barryvdh/laravel-debugbar": "^3.1",