Skip to content

Commit 6776ca7

Browse files
committed
Локализация: переведены компоненты и страницы на русский язык, включая админку, страницы контента и уведомления. Обновлён pnpm-lock.yaml для добавления новых зависимостей.
1 parent 6f7a080 commit 6776ca7

39 files changed

+1057
-1092
lines changed

app/components/AdminDashboard.vue

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,19 @@ const items = computed<DropdownMenuItem[][]>(() => [
2424
],
2525
[
2626
{
27-
label: 'Export Feedback',
27+
label: 'Экспорт отзывов',
2828
icon: 'i-lucide-download',
2929
onClick: handleExportFeedback
3030
},
3131
{
32-
label: 'Export Analytics',
32+
label: 'Экспорт аналитики',
3333
icon: 'i-lucide-bar-chart',
3434
onClick: handleExportPageAnalytics
3535
}
3636
],
3737
[
3838
{
39-
label: 'Logout',
39+
label: 'Выйти',
4040
icon: 'i-lucide-log-out',
4141
onClick: logout
4242
}
@@ -126,7 +126,7 @@ function useAdminTable() {
126126
const columns: TableColumn<PageAnalytic>[] = [
127127
{
128128
accessorKey: 'path',
129-
header: 'Page',
129+
header: 'Страница',
130130
cell: ({ row }) => {
131131
const page = row.original
132132
return h('div', { class: 'flex flex-col' }, [
@@ -142,7 +142,7 @@ function useAdminTable() {
142142
return h(UButton, {
143143
color: 'neutral',
144144
variant: 'ghost',
145-
label: 'Positive',
145+
label: 'Положительные',
146146
icon: isSorted
147147
? isSorted === 'asc'
148148
? 'i-lucide-arrow-up-narrow-wide'
@@ -165,7 +165,7 @@ function useAdminTable() {
165165
return h(UButton, {
166166
color: 'neutral',
167167
variant: 'ghost',
168-
label: 'Negative',
168+
label: 'Отрицательные',
169169
icon: isSorted
170170
? isSorted === 'asc'
171171
? 'i-lucide-arrow-up-narrow-wide'
@@ -188,7 +188,7 @@ function useAdminTable() {
188188
return h(UButton, {
189189
color: 'neutral',
190190
variant: 'ghost',
191-
label: 'Score',
191+
label: 'Оценка',
192192
icon: isSorted
193193
? isSorted === 'asc'
194194
? 'i-lucide-arrow-up-narrow-wide'
@@ -213,7 +213,7 @@ function useAdminTable() {
213213
return h(UButton, {
214214
color: 'neutral',
215215
variant: 'ghost',
216-
label: 'Total',
216+
label: 'Всего',
217217
icon: isSorted
218218
? isSorted === 'asc'
219219
? 'i-lucide-arrow-up-narrow-wide'
@@ -234,7 +234,7 @@ function useAdminTable() {
234234
return h(UButton, {
235235
color: 'neutral',
236236
variant: 'ghost',
237-
label: 'Created',
237+
label: 'Создано',
238238
icon: isSorted
239239
? isSorted === 'asc'
240240
? 'i-lucide-arrow-up-narrow-wide'
@@ -245,7 +245,7 @@ function useAdminTable() {
245245
})
246246
},
247247
cell: ({ row }) => {
248-
const date = row.original.createdAt.toLocaleDateString('en-US', {
248+
const date = row.original.createdAt.toLocaleDateString('ru', {
249249
month: 'short',
250250
day: 'numeric',
251251
year: '2-digit'
@@ -262,7 +262,7 @@ function useAdminTable() {
262262
return h(UButton, {
263263
color: 'neutral',
264264
variant: 'ghost',
265-
label: 'Last Update',
265+
label: 'Обновлено',
266266
icon: isSorted
267267
? isSorted === 'asc'
268268
? 'i-lucide-arrow-up-narrow-wide'
@@ -273,7 +273,7 @@ function useAdminTable() {
273273
})
274274
},
275275
cell: ({ row }) => {
276-
const date = row.original.updatedAt.toLocaleDateString('en-US', {
276+
const date = row.original.updatedAt.toLocaleDateString('ru', {
277277
month: 'short',
278278
day: 'numeric',
279279
hour: '2-digit',
@@ -345,46 +345,46 @@ watch(currentPage, () => {
345345
<FeedbackStatCard
346346
icon="i-lucide-message-circle"
347347
:value="globalStats.total"
348-
label="Total"
348+
label="Всего"
349349
:popover-stats="{
350-
trend: `${Math.round(globalStats.total / 7)} per day average`,
351-
details: 'Total feedback responses across all pages'
350+
trend: `В среднем ${Math.round(globalStats.total / 7)} в день`,
351+
details: 'Всего отзывов по всем страницам'
352352
}"
353353
/>
354354

355355
<FeedbackStatCard
356356
icon="i-lucide-thumbs-up"
357357
icon-color="text-success"
358358
:value="globalStats.positive"
359-
label="Positive"
359+
label="Положительные"
360360
:popover-stats="{
361-
percentage: `${globalStats.positivePercentage}% of total`,
362-
trend: `${globalStats.positivePercentage >= 70 ? '📈 Excellent' : globalStats.positivePercentage >= 50 ? '✅ Good' : '📉 Needs work'}`,
363-
details: 'Very helpful + Helpful responses'
361+
percentage: `${globalStats.positivePercentage}% от общего`,
362+
trend: `${globalStats.positivePercentage >= 70 ? '📈 Отлично' : globalStats.positivePercentage >= 50 ? '✅ Хорошо' : '📉 Требует доработки'}`,
363+
details: 'Очень полезно + Полезно'
364364
}"
365365
/>
366366

367367
<FeedbackStatCard
368368
icon="i-lucide-thumbs-down"
369369
icon-color="text-error"
370370
:value="globalStats.negative"
371-
label="Negative"
371+
label="Отрицательные"
372372
:popover-stats="{
373-
percentage: `${100 - globalStats.positivePercentage}% of total`,
374-
trend: `${globalStats.negative <= 2 ? '🟢 Low volume' : globalStats.negative <= 5 ? '🟡 Moderate' : '🔴 High volume'}`,
375-
details: 'Not helpful + Confusing responses'
373+
percentage: `${100 - globalStats.positivePercentage}% от общего`,
374+
trend: `${globalStats.negative <= 2 ? '🟢 Мало' : globalStats.negative <= 5 ? '🟡 Умеренно' : '🔴 Много'}`,
375+
details: 'Не полезно + Запутанно'
376376
}"
377377
/>
378378

379379
<FeedbackStatCard
380380
icon="i-lucide-target"
381381
icon-color="text-primary"
382382
:value="`${globalStats.averageScore}/4`"
383-
label="Avg Score"
383+
label="Средняя оценка"
384384
:popover-stats="{
385-
percentage: `${Math.round(globalStats.averageScore / 4 * 100)}% satisfaction`,
386-
trend: `${globalStats.averageScore >= 3.5 ? '🎯 Excellent' : globalStats.averageScore >= 3.0 ? '👍 Good' : '⚠️ Needs work'}`,
387-
details: 'Weighted average of all ratings'
385+
percentage: `${Math.round(globalStats.averageScore / 4 * 100)}% удовлетворённости`,
386+
trend: `${globalStats.averageScore >= 3.5 ? '🎯 Отлично' : globalStats.averageScore >= 3.0 ? '👍 Хорошо' : '⚠️ Требует доработки'}`,
387+
details: 'Взвешенное среднее всех оценок'
388388
}"
389389
/>
390390
</div>
@@ -396,33 +396,33 @@ watch(currentPage, () => {
396396
<div class="border-t border-default pt-6">
397397
<div class="flex sm:items-center justify-between flex-col sm:flex-row mb-4 gap-4">
398398
<h2 class="text-xl font-semibold">
399-
Feedback by Page
399+
Отзывы по страницам
400400
</h2>
401401
<div class="flex items-center gap-2">
402402
<UInput
403403
v-model="globalFilter"
404404
class="flex-1 max-w-sm"
405-
placeholder="Search pages..."
405+
placeholder="Поиск страниц..."
406406
icon="i-lucide-search"
407407
/>
408-
<UTooltip text="Reset filters" :content="{ side: 'top' }">
408+
<UTooltip text="Сбросить фильтры" :content="{ side: 'top' }">
409409
<UButton
410410
color="neutral"
411411
variant="outline"
412412
icon="i-lucide-filter-x"
413-
aria-label="Reset filters"
413+
aria-label="Сбросить фильтры"
414414
@click="resetFilters"
415415
/>
416416
</UTooltip>
417-
<UTooltip text="Show only v3 pages" :content="{ side: 'top' }">
417+
<UTooltip text="Только страницы v3" :content="{ side: 'top' }">
418418
<UButton
419419
:color="versionFilter === 'v3' ? 'primary' : 'neutral'"
420420
:variant="versionFilter === 'v3' ? 'solid' : 'outline'"
421421
label="v3"
422422
@click="filterByVersion('v3')"
423423
/>
424424
</UTooltip>
425-
<UTooltip text="Show only v4 pages" :content="{ side: 'top' }">
425+
<UTooltip text="Только страницы v4" :content="{ side: 'top' }">
426426
<UButton
427427
:color="versionFilter === 'v4' ? 'primary' : 'neutral'"
428428
:variant="versionFilter === 'v4' ? 'solid' : 'outline'"
@@ -511,54 +511,54 @@ watch(currentPage, () => {
511511
icon="i-lucide-target"
512512
icon-color="text-primary"
513513
:value="`${selectedPage.averageScore}/4`"
514-
label="Average Score"
514+
label="Средняя оценка"
515515
:popover-stats="{
516-
percentage: `${Math.round(selectedPage.averageScore / 4 * 100)}% satisfaction`,
517-
trend: `${selectedPage.averageScore >= 3.5 ? '🎯 Excellent' : selectedPage.averageScore >= 3.0 ? '👍 Good' : '⚠️ Poor'}`,
518-
details: `Based on ${selectedPage.total} ${selectedPage.total === 1 ? 'response' : 'responses'}`
516+
percentage: `${Math.round(selectedPage.averageScore / 4 * 100)}% удовлетворённости`,
517+
trend: `${selectedPage.averageScore >= 3.5 ? '🎯 Отлично' : selectedPage.averageScore >= 3.0 ? '👍 Хорошо' : '⚠️ Плохо'}`,
518+
details: `На основе ${selectedPage.total} ${selectedPage.total === 1 ? 'ответа' : 'ответов'}`
519519
}"
520520
/>
521521

522522
<FeedbackStatCard
523523
icon="i-lucide-message-circle"
524524
icon-color="text-muted"
525525
:value="selectedPage.total"
526-
label="Responses"
526+
label="Ответы"
527527
:popover-stats="{
528-
trend: `${selectedPage.total === 1 ? 'Single feedback' : 'Multiple feedbacks'}`,
529-
details: 'Total number of user feedback submissions for this page'
528+
trend: `${selectedPage.total === 1 ? 'Один отзыв' : 'Несколько отзывов'}`,
529+
details: 'Всего отзывов по этой странице'
530530
}"
531531
/>
532532

533533
<FeedbackStatCard
534534
icon="i-lucide-thumbs-up"
535535
icon-color="text-success"
536536
:value="selectedPage.positive"
537-
label="Positive"
537+
label="Положительные"
538538
:popover-stats="{
539-
percentage: `${selectedPage.positivePercentage}% of responses`,
540-
trend: `${selectedPage.positivePercentage >= 70 ? '📈 Excellent' : selectedPage.positivePercentage >= 50 ? '✅ Good' : '📉 Poor'}`,
541-
details: 'Users found this page helpful'
539+
percentage: `${selectedPage.positivePercentage}% ответов`,
540+
trend: `${selectedPage.positivePercentage >= 70 ? '📈 Отлично' : selectedPage.positivePercentage >= 50 ? '✅ Хорошо' : '📉 Плохо'}`,
541+
details: 'Страница полезна пользователям'
542542
}"
543543
/>
544544

545545
<FeedbackStatCard
546546
icon="i-lucide-thumbs-down"
547547
icon-color="text-error"
548548
:value="selectedPage.negative"
549-
label="Negative"
549+
label="Отрицательные"
550550
:popover-stats="{
551-
percentage: `${100 - selectedPage.positivePercentage}% of responses`,
552-
trend: `${selectedPage.negative <= 1 ? '🟢 Low' : selectedPage.negative <= 3 ? '🟡 Moderate' : '🔴 High'}`,
553-
details: 'Users found issues with this page'
551+
percentage: `${100 - selectedPage.positivePercentage}% ответов`,
552+
trend: `${selectedPage.negative <= 1 ? '🟢 Мало' : selectedPage.negative <= 3 ? '🟡 Умеренно' : '🔴 Много'}`,
553+
details: 'Пользователи нашли проблемы на странице'
554554
}"
555555
/>
556556
</div>
557557

558558
<div class="space-y-3 sm:space-y-4">
559559
<h4 class="text-base sm:text-lg font-semibold mb-3 sm:mb-4 flex items-center gap-2">
560560
<UIcon name="i-lucide-message-square" class="size-4 sm:size-5" />
561-
Individual Feedback
561+
Отдельные отзывы
562562
</h4>
563563
<div class="space-y-3 sm:space-y-4">
564564
<div ref="feedbackContainer" class="space-y-2 sm:space-y-3 max-h-[300px] sm:max-h-[400px] overflow-y-auto">

0 commit comments

Comments
 (0)