@@ -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