@crm-market/template-shared 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/components/AddAddress/index.vue +10 -12
  2. package/components/Cart/index.vue +15 -17
  3. package/components/ChangePassword/index.vue +11 -13
  4. package/components/Checkout/index.vue +35 -37
  5. package/components/Common/DashboardNavigation.vue +11 -13
  6. package/components/Common/PageBanner.vue +4 -6
  7. package/components/Common/ProductCard.vue +38 -52
  8. package/components/Common/Services.vue +10 -12
  9. package/components/Contact/ContactForm.vue +13 -18
  10. package/components/Dashboard/index.vue +8 -10
  11. package/components/EditAddress/index.vue +14 -16
  12. package/components/EditProfile/index.vue +10 -12
  13. package/components/ForgotPassword/index.vue +7 -9
  14. package/components/Layout/Copyright.vue +3 -5
  15. package/components/Layout/Footer.vue +36 -51
  16. package/components/Layout/FooterTwo.vue +34 -40
  17. package/components/Layout/MiddleHeader.vue +11 -9
  18. package/components/Layout/MiddleHeaderThree.vue +7 -5
  19. package/components/Layout/MiddleHeaderTwo.vue +9 -7
  20. package/components/Layout/Navbar.vue +10 -8
  21. package/components/Layout/NavbarStyleThree.vue +10 -8
  22. package/components/Layout/NavbarStyleTwo.vue +8 -6
  23. package/components/Layout/ResponsiveNavbar.vue +40 -38
  24. package/components/Layout/TopHeader.vue +30 -63
  25. package/components/Login/index.vue +14 -19
  26. package/components/MyAccount/index.vue +31 -31
  27. package/components/OrderDetails/index.vue +16 -18
  28. package/components/OrderHistory/index.vue +13 -15
  29. package/components/ProductDetails/index.vue +17 -15
  30. package/components/Products/RecentlyViewed.vue +12 -14
  31. package/components/Products/index.vue +20 -18
  32. package/components/Register/index.vue +14 -19
  33. package/components/Wishlist/index.vue +12 -14
  34. package/composables/useCategories.ts +2 -0
  35. package/composables/useCheckout.ts +3 -0
  36. package/composables/useI18n.ts +114 -0
  37. package/composables/useProducts.ts +2 -0
  38. package/composables/useSiteConfig.ts +1 -0
  39. package/composables/useTemplateSections.ts +2 -1
  40. package/locales/ar.json +234 -0
  41. package/locales/en.json +234 -0
  42. package/locales/ru.json +234 -0
  43. package/locales/uk.json +234 -0
  44. package/modules/auto-imports.ts +20 -0
  45. package/nuxt.config.ts +3 -11
  46. package/package.json +8 -6
  47. package/pages/about-us.vue +2 -1
  48. package/pages/address.vue +2 -1
  49. package/pages/cart.vue +2 -1
  50. package/pages/categories.vue +2 -1
  51. package/pages/change-password.vue +2 -1
  52. package/pages/checkout.vue +2 -1
  53. package/pages/contact.vue +2 -1
  54. package/pages/dashboard.vue +2 -1
  55. package/pages/edit-address.vue +2 -1
  56. package/pages/edit-profile.vue +2 -1
  57. package/pages/faq.vue +2 -1
  58. package/pages/forgot-password.vue +2 -1
  59. package/pages/login.vue +2 -1
  60. package/pages/my-account.vue +2 -1
  61. package/pages/order-details.vue +2 -1
  62. package/pages/order-history.vue +2 -1
  63. package/pages/privacy-policy.vue +2 -1
  64. package/pages/product-details.vue +2 -1
  65. package/pages/products.vue +2 -1
  66. package/pages/register.vue +2 -1
  67. package/pages/terms-conditions.vue +2 -1
  68. package/pages/wishlist.vue +2 -1
  69. package/plugins/i18n.ts +7 -0
  70. package/plugins/site-init.client.ts +5 -0
  71. package/plugins/vuetify.ts +0 -1
  72. package/utils/image.ts +2 -0
  73. package/e2e/cart.spec.ts +0 -71
  74. package/e2e/fixtures/mock-api.ts +0 -166
  75. package/e2e/homepage.spec.ts +0 -65
  76. package/e2e/layout.spec.ts +0 -73
  77. package/e2e/navigation.spec.ts +0 -61
  78. package/e2e/pages/cart.page.ts +0 -44
  79. package/e2e/pages/homepage.page.ts +0 -46
  80. package/e2e/playwright.config.ts +0 -32
  81. package/e2e/products.spec.ts +0 -33
@@ -0,0 +1,234 @@
1
+ {
2
+ "nav": {
3
+ "aboutUs": "Про нас",
4
+ "faqs": "Часті запитання",
5
+ "helpContact": "Допомога та контакти",
6
+ "flashSale": "Блискавичний розпродаж {percent}% знижка",
7
+ "home": "Головна",
8
+ "products": "Товари",
9
+ "categories": "Категорії",
10
+ "about": "Про нас",
11
+ "contact": "Контакти",
12
+ "browseCategories": "Переглянути категорії",
13
+ "searchProducts": "Пошук товарів...",
14
+ "search": "Пошук",
15
+ "allCategories": "Усі категорії",
16
+ "allProducts": "Усі товари",
17
+ "hotline": "Гаряча лінія",
18
+ "noCategories": "Категорії відсутні",
19
+ "pages": "Сторінки",
20
+ "blog": "Блог",
21
+ "ourBlog": "Наш блог",
22
+ "blogDetails": "Деталі статті",
23
+ "tags": "Теги",
24
+ "author": "Автор",
25
+ "authentication": "Автентифікація",
26
+ "shop": "Магазин",
27
+ "productLayouts": "Макети товарів",
28
+ "productsStep": "Кроки товарів",
29
+ "adminPage": "Панель керування"
30
+ },
31
+ "auth": {
32
+ "login": "Увійти",
33
+ "register": "Реєстрація",
34
+ "loginDescription": "Якщо у вас є обліковий запис, увійдіть за допомогою імені користувача або електронної пошти.",
35
+ "usernameOrEmail": "Ім'я користувача або електронна пошта",
36
+ "username": "Ім'я користувача",
37
+ "email": "Електронна пошта",
38
+ "password": "Пароль",
39
+ "yourPassword": "Ваш пароль",
40
+ "remember": "Запам'ятати",
41
+ "lostPassword": "Забули пароль?",
42
+ "noAccount": "Немає облікового запису?",
43
+ "haveAccount": "Вже є обліковий запис?",
44
+ "forgotPassword": "Забули пароль",
45
+ "enterEmail": "Введіть вашу електронну пошту",
46
+ "changePassword": "Змінити пароль",
47
+ "oldPassword": "Старий пароль",
48
+ "newPassword": "Новий пароль",
49
+ "confirmPassword": "Підтвердити пароль",
50
+ "savePassword": "Зберегти пароль",
51
+ "logOut": "Вийти"
52
+ },
53
+ "account": {
54
+ "loginYour": "Увійдіть у свій",
55
+ "account": "Обліковий запис",
56
+ "yourCart": "Ваш кошик",
57
+ "viewCart": "Переглянути кошик",
58
+ "checkout": "Оформлення замовлення",
59
+ "dashboard": "Панель керування",
60
+ "yourAccount": "Ваш обліковий запис",
61
+ "yourOrders": "Ваші замовлення",
62
+ "editProfile": "Редагувати профіль",
63
+ "editAddress": "Редагувати адресу",
64
+ "orderHistory": "Історія замовлень",
65
+ "orderDetails": "Деталі замовлення",
66
+ "address": "Адреса",
67
+ "addAddress": "Додати адресу",
68
+ "billingAddress": "Платіжна адреса",
69
+ "navigation": "Навігація",
70
+ "myAccount": "Мій обліковий запис",
71
+ "country": "Країна",
72
+ "stateCounty": "Область",
73
+ "zip": "Індекс",
74
+ "phone": "Телефон",
75
+ "email": "Електронна пошта",
76
+ "password": "Пароль"
77
+ },
78
+ "product": {
79
+ "addToCart": "Додати до кошика",
80
+ "inCart": "У кошику",
81
+ "addToWishlist": "Додати до списку бажань",
82
+ "inStock": "В наявності",
83
+ "quantity": "Кількість",
84
+ "subtotal": "Проміжний підсумок",
85
+ "unitPrice": "Ціна за одиницю",
86
+ "name": "Назва",
87
+ "remove": "Видалити",
88
+ "freeDelivery": "Безкоштовна доставка сьогодні",
89
+ "moneyBack": "100% гарантія повернення коштів",
90
+ "returnPolicy": "Повернення товару протягом 7 днів",
91
+ "sku": "Артикул",
92
+ "category": "Категорія",
93
+ "share": "Поділитися",
94
+ "reviews": "Відгуки",
95
+ "viewingProduct": "людей переглядають цей товар",
96
+ "style": "Стиль",
97
+ "capacity": "Об'єм",
98
+ "color": "Колір",
99
+ "noProducts": "Товарів не знайдено",
100
+ "loading": "Завантаження...",
101
+ "productsFound": "товарів знайдено",
102
+ "clearAll": "Очистити все",
103
+ "filterByCategories": "Фільтр за категоріями",
104
+ "clearFilter": "Скинути фільтр",
105
+ "priceRange": "Діапазон цін",
106
+ "min": "Мін",
107
+ "max": "Макс",
108
+ "apply": "Застосувати",
109
+ "sortBy": "Сортувати за",
110
+ "newest": "Найновіші",
111
+ "priceLowHigh": "Ціна: від низької до високої",
112
+ "priceHighLow": "Ціна: від високої до низької",
113
+ "nameAZ": "Назва А-Я",
114
+ "bestSellers": "Найпопулярніші",
115
+ "featuredProducts": "Рекомендовані товари",
116
+ "trendingProducts": "Популярні товари",
117
+ "newArrivals": "Новинки",
118
+ "wishlist": "Список бажань",
119
+ "productDetails": "Деталі товару",
120
+ "product": "Товар"
121
+ },
122
+ "cart": {
123
+ "cart": "Кошик",
124
+ "cartTotals": "Підсумки кошика",
125
+ "total": "Загалом",
126
+ "subtotal": "Проміжний підсумок",
127
+ "coupon": "Купон",
128
+ "applyCoupon": "Застосувати купон",
129
+ "updatePrice": "Оновити ціну",
130
+ "proceedToCheckout": "Перейти до оформлення",
131
+ "cartEmpty": "Кошик порожній",
132
+ "shipping": "Доставка"
133
+ },
134
+ "checkout": {
135
+ "billingDetails": "Платіжні дані",
136
+ "firstName": "Ім'я",
137
+ "lastName": "Прізвище",
138
+ "emailAddress": "Електронна пошта",
139
+ "companyName": "Назва компанії (необов'язково)",
140
+ "countryRegion": "Країна/Регіон",
141
+ "streetAddress": "Вулиця",
142
+ "addressLine1": "Адресний рядок 1",
143
+ "addressLine2": "Адресний рядок 2",
144
+ "townCity": "Місто",
145
+ "postalCode": "Поштовий індекс",
146
+ "phone": "Телефон",
147
+ "phoneNumber": "Номер телефону",
148
+ "additionalInfo": "Додаткова інформація",
149
+ "notes": "Примітки (необов'язково)",
150
+ "yourOrder": "Ваше замовлення",
151
+ "paymentOption": "Спосіб оплати",
152
+ "cardPayment": "Оплата карткою",
153
+ "cashOnDelivery": "Оплата при отриманні",
154
+ "placeOrder": "Оформити замовлення"
155
+ },
156
+ "footer": {
157
+ "gotQuestion": "Є запитання? Телефонуйте цілодобово",
158
+ "storeDescription": "Ваш інтернет-магазин найкращих товарів та пропозицій.",
159
+ "subscribe": "Підписатися на розсилку",
160
+ "enterEmail": "Введіть вашу електронну пошту",
161
+ "submitNow": "Надіслати",
162
+ "followUs": "Підписуйтесь на нас",
163
+ "allRightsReserved": "Усі права захищені",
164
+ "getToKnowUs": "Дізнайтеся про нас",
165
+ "letUsHelp": "Дозвольте допомогти",
166
+ "popularCategories": "Популярні категорії",
167
+ "aboutTheShop": "Про магазин",
168
+ "returnPolicy": "Політика повернення",
169
+ "productReplacement": "Заміна товару",
170
+ "shopWithPoints": "Покупки за бали",
171
+ "careers": "Кар'єра",
172
+ "storeLocation": "Розташування магазину",
173
+ "newsCenter": "Новини",
174
+ "downloadApp": "Завантажити додаток"
175
+ },
176
+ "services": {
177
+ "fastDelivery": "Швидка доставка",
178
+ "fastDeliveryDesc": "Блискавична доставка ваших замовлень",
179
+ "securedPayment": "Безпечна оплата",
180
+ "securedPaymentDesc": "Купуйте з впевненістю",
181
+ "moneyBack": "Повернення коштів",
182
+ "moneyBackDesc": "100% гарантія повернення коштів",
183
+ "support247": "Підтримка 24/7",
184
+ "support247Desc": "Завжди на зв'язку"
185
+ },
186
+ "contact": {
187
+ "getInTouch": "Зв'яжіться з нами",
188
+ "contactDescription": "Ваш шлях до досконалості: зв'яжіться з нами та відкрийте світ можливостей",
189
+ "yourName": "Ваше ім'я",
190
+ "yourEmail": "Ваша електронна пошта",
191
+ "yourSubject": "Тема",
192
+ "yourMessage": "Ваше повідомлення",
193
+ "writeMessage": "Напишіть повідомлення",
194
+ "enterName": "Введіть ваше ім'я",
195
+ "enterEmail": "Введіть вашу електронну пошту"
196
+ },
197
+ "order": {
198
+ "orderNumber": "Номер замовлення",
199
+ "orderCreatedAt": "Замовлення створено",
200
+ "backHistory": "Назад до історії",
201
+ "status": "Статус",
202
+ "paid": "Оплачено",
203
+ "pending": "Очікує",
204
+ "failed": "Невдале",
205
+ "trash": "Кошик",
206
+ "order": "Замовлення"
207
+ },
208
+ "common": {
209
+ "save": "Зберегти",
210
+ "saveChange": "Зберегти зміни",
211
+ "edit": "Редагувати",
212
+ "default": "За замовчуванням",
213
+ "clickHere": "Натисніть тут",
214
+ "changeImage": "Змінити зображення",
215
+ "location": "Місцезнаходження",
216
+ "searchLocation": "Знайдіть ваше місцезнаходження",
217
+ "selectLocation": "Оберіть місцезнаходження",
218
+ "deliverProducts": "Куди доставити ваші товари?",
219
+ "privacyPolicy": "Політика конфіденційності",
220
+ "termsConditions": "Умови та положення",
221
+ "helpCenter": "Центр допомоги"
222
+ },
223
+ "lang": {
224
+ "english": "English",
225
+ "ukrainian": "Українська",
226
+ "russian": "Русский",
227
+ "arabic": "العربية"
228
+ },
229
+ "currency": {
230
+ "usd": "USD $",
231
+ "eur": "EUR \u20ac",
232
+ "uah": "UAH \u20b4"
233
+ }
234
+ }
@@ -0,0 +1,20 @@
1
+ import { defineNuxtModule, createResolver, addImportsDir, addComponentsDir } from '@nuxt/kit';
2
+
3
+ export default defineNuxtModule({
4
+ meta: {
5
+ name: 'template-shared-auto-imports',
6
+ },
7
+ setup(_options, nuxt) {
8
+ const { resolve } = createResolver(import.meta.url);
9
+
10
+ // Реєстрація composables як auto-imports
11
+ addImportsDir(resolve('../composables'));
12
+ addImportsDir(resolve('../utils'));
13
+
14
+ // Реєстрація components
15
+ addComponentsDir({
16
+ path: resolve('../components'),
17
+ pathPrefix: false,
18
+ });
19
+ },
20
+ });
package/nuxt.config.ts CHANGED
@@ -33,6 +33,7 @@ export default defineNuxtConfig({
33
33
  resolve(__dirname, 'assets/css/remixicon.css'),
34
34
  resolve(__dirname, 'assets/fonts/flaticon.css'),
35
35
  resolve(__dirname, 'assets/css/satoshi-font.css'),
36
+ resolve(__dirname, 'assets/scss/style.css'),
36
37
  ],
37
38
 
38
39
  // Plugins авто-скануються з plugins/ — не потрібно оголошувати явно
@@ -42,6 +43,8 @@ export default defineNuxtConfig({
42
43
  },
43
44
 
44
45
  modules: [
46
+ // Auto-imports composables, utils, components для npm-пакету
47
+ resolve(__dirname, 'modules/auto-imports'),
45
48
  (
46
49
  _options: any,
47
50
  nuxt: {
@@ -81,16 +84,5 @@ export default defineNuxtConfig({
81
84
  },
82
85
  },
83
86
 
84
- components: [
85
- { path: resolve(__dirname, 'components'), pathPrefix: false },
86
- ],
87
-
88
- imports: {
89
- dirs: [
90
- resolve(__dirname, 'composables'),
91
- resolve(__dirname, 'utils'),
92
- ],
93
- },
94
-
95
87
  compatibilityDate: "2026-01-02",
96
88
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crm-market/template-shared",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "type": "module",
5
5
  "description": "Shared Nuxt 3 layer for CRM Market store templates (layouts, components, composables, pages)",
6
6
  "publishConfig": {
@@ -21,18 +21,20 @@
21
21
  "plugins",
22
22
  "types",
23
23
  "utils",
24
- "e2e"
24
+ "modules",
25
+ "locales"
25
26
  ],
26
27
  "dependencies": {
27
28
  "bootstrap": "^5.3.3",
28
29
  "nuxt": "^3.12.4",
29
30
  "nuxt-swiper": "^1.2.2",
31
+ "vite-plugin-vuetify": "^2.0.3",
30
32
  "vue": "^3.4.34",
31
- "vue-router": "^4.4.0"
33
+ "vue-router": "^4.4.0",
34
+ "vuetify": "^3.6.13"
32
35
  },
33
36
  "devDependencies": {
34
- "sass": "^1.77.8",
35
- "vite-plugin-vuetify": "^2.0.3",
36
- "vuetify": "^3.6.13"
37
+ "@playwright/test": "^1.58.2",
38
+ "sass": "^1.77.8"
37
39
  }
38
40
  }
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Про нас" />
3
+ <CommonPageBanner :pageTitle="t('nav.aboutUs')" />
4
4
  <AboutUsTuan />
5
5
  <AboutUsStatistics />
6
6
  <AboutUsSubscribeToTheNewsletter />
@@ -9,4 +9,5 @@
9
9
 
10
10
  <script setup lang="ts">
11
11
  definePageMeta({ layout: 'inner' });
12
+ const { t } = useI18n();
12
13
  </script>
package/pages/address.vue CHANGED
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Додати адресу" />
3
+ <CommonPageBanner :pageTitle="t('account.addAddress')" />
4
4
  <AddAddress />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
package/pages/cart.vue CHANGED
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Кошик" />
3
+ <CommonPageBanner :pageTitle="t('cart.cart')" />
4
4
  <Cart />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Категорії" />
3
+ <CommonPageBanner :pageTitle="t('nav.categories')" />
4
4
  <Categories />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Зміна пароля" />
3
+ <CommonPageBanner :pageTitle="t('auth.changePassword')" />
4
4
  <ChangePassword />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Оформлення замовлення" />
3
+ <CommonPageBanner :pageTitle="t('account.checkout')" />
4
4
  <Checkout />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
package/pages/contact.vue CHANGED
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Контакти" />
3
+ <CommonPageBanner :pageTitle="t('contact.getInTouch')" />
4
4
  <ContactInfo />
5
5
  <ContactForm />
6
6
  </div>
@@ -8,4 +8,5 @@
8
8
 
9
9
  <script setup lang="ts">
10
10
  definePageMeta({ layout: 'inner' });
11
+ const { t } = useI18n();
11
12
  </script>
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Дашборд" />
3
+ <CommonPageBanner :pageTitle="t('account.dashboard')" />
4
4
  <Dashboard />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Редагувати адресу" />
3
+ <CommonPageBanner :pageTitle="t('account.editAddress')" />
4
4
  <EditAddress />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Редагувати профіль" />
3
+ <CommonPageBanner :pageTitle="t('account.editProfile')" />
4
4
  <EditProfile />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
package/pages/faq.vue CHANGED
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Часті запитання" />
3
+ <CommonPageBanner :pageTitle="t('nav.faqs')" />
4
4
  <FAQ />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Відновити пароль" />
3
+ <CommonPageBanner :pageTitle="t('auth.forgotPassword')" />
4
4
  <ForgotPassword />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
package/pages/login.vue CHANGED
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Увійти" />
3
+ <CommonPageBanner :pageTitle="t('auth.login')" />
4
4
  <Login />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Мій акаунт" />
3
+ <CommonPageBanner :pageTitle="t('account.myAccount')" />
4
4
  <MyAccount />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Деталі замовлення" />
3
+ <CommonPageBanner :pageTitle="t('account.orderDetails')" />
4
4
  <OrderDetails />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Історія замовлень" />
3
+ <CommonPageBanner :pageTitle="t('account.orderHistory')" />
4
4
  <OrderHistory />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Політика конфіденційності" />
3
+ <CommonPageBanner :pageTitle="t('common.privacyPolicy')" />
4
4
  <PrivacyPolicy />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Деталі товару" />
3
+ <CommonPageBanner :pageTitle="t('product.productDetails')" />
4
4
  <ProductDetails />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Товари" />
3
+ <CommonPageBanner :pageTitle="t('nav.products')" />
4
4
  <Products />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Реєстрація" />
3
+ <CommonPageBanner :pageTitle="t('auth.register')" />
4
4
  <Register />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Умови використання" />
3
+ <CommonPageBanner :pageTitle="t('common.termsConditions')" />
4
4
  <TermsConditions />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div>
3
- <CommonPageBanner pageTitle="Список бажань" />
3
+ <CommonPageBanner :pageTitle="t('product.wishlist')" />
4
4
  <Wishlist />
5
5
  </div>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
9
  definePageMeta({ layout: 'inner' });
10
+ const { t } = useI18n();
10
11
  </script>
@@ -0,0 +1,7 @@
1
+ import { defineNuxtPlugin } from '#app';
2
+ import { useI18n } from '../composables/useI18n';
3
+
4
+ export default defineNuxtPlugin(async () => {
5
+ const { initLocale } = useI18n();
6
+ await initLocale();
7
+ });
@@ -1,3 +1,8 @@
1
+ import { defineNuxtPlugin } from '#app';
2
+ import { useSiteConfig } from '../composables/useSiteConfig';
3
+ import { useCart } from '../composables/useCart';
4
+ import { useCategories } from '../composables/useCategories';
5
+
1
6
  export default defineNuxtPlugin(async () => {
2
7
  const { fetchConfig, error } = useSiteConfig();
3
8
  const { loadCart } = useCart();