mirror of
https://github.com/ManInDark/HabitTrove.git
synced 2026-03-11 04:49:49 +01:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
7cef915c69
|
|||
|
79c264f06d
|
|||
|
4af8950602
|
@@ -18,7 +18,7 @@ import { DESKTOP_DISPLAY_ITEM_COUNT } from '@/lib/constants'
|
|||||||
import { Habit, WishlistItemType } from '@/lib/types'
|
import { Habit, WishlistItemType } from '@/lib/types'
|
||||||
import { cn, d2t, getNow, getTodayInTimezone, isHabitDue, isSameDate, isTaskOverdue, t2d } from '@/lib/utils'
|
import { cn, d2t, getNow, getTodayInTimezone, isHabitDue, isSameDate, isTaskOverdue, t2d } from '@/lib/utils'
|
||||||
import { useAtom } from 'jotai'
|
import { useAtom } from 'jotai'
|
||||||
import { AlertTriangle, ArrowRight, ChevronDown, ChevronUp, Circle, CircleCheck, Coins, Pin, Plus } from 'lucide-react';
|
import { AlertTriangle, ArrowRight, ChevronDown, ChevronUp, Circle, CircleCheck, Coins, Pin, Plus } from 'lucide-react'
|
||||||
import { useTranslations } from 'next-intl'
|
import { useTranslations } from 'next-intl'
|
||||||
import Link from 'next/link'
|
import Link from 'next/link'
|
||||||
import { useState } from 'react'
|
import { useState } from 'react'
|
||||||
@@ -409,7 +409,7 @@ export default function DailyOverview({
|
|||||||
<CardContent>
|
<CardContent>
|
||||||
<div className="space-y-6">
|
<div className="space-y-6">
|
||||||
{/* Tasks Section */}
|
{/* Tasks Section */}
|
||||||
{habits.some(habit => habit.isTask === true) && (
|
{dailyTasks.length > 0 && (
|
||||||
<ItemSection
|
<ItemSection
|
||||||
title={t('dailyTasksTitle')}
|
title={t('dailyTasksTitle')}
|
||||||
items={dailyTasks}
|
items={dailyTasks}
|
||||||
@@ -421,16 +421,16 @@ export default function DailyOverview({
|
|||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Habits Section */}
|
{/* Habits Section */}
|
||||||
<ItemSection
|
{dailyHabits.length > 0 && <ItemSection
|
||||||
title={t('dailyHabitsTitle')}
|
title={t('dailyHabitsTitle')}
|
||||||
items={dailyHabits}
|
items={dailyHabits}
|
||||||
emptyMessage={t('noHabitsDueTodayMessage')}
|
emptyMessage={t('noHabitsDueTodayMessage')}
|
||||||
isTask={false}
|
isTask={false}
|
||||||
viewLink="/habits"
|
viewLink="/habits"
|
||||||
addNewItem={() => setModalConfig({ isOpen: true, isTask: false })}
|
addNewItem={() => setModalConfig({ isOpen: true, isTask: false })}
|
||||||
/>
|
/>}
|
||||||
|
|
||||||
<div className="space-y-2">
|
{sortedWishlistItems.length > 0 && <div className="space-y-2">
|
||||||
<div className="flex items-center justify-between mb-2">
|
<div className="flex items-center justify-between mb-2">
|
||||||
<h3 className="font-semibold">{t('wishlistGoalsTitle')}</h3>
|
<h3 className="font-semibold">{t('wishlistGoalsTitle')}</h3>
|
||||||
<Badge variant="secondary">
|
<Badge variant="secondary">
|
||||||
@@ -538,6 +538,10 @@ export default function DailyOverview({
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
{dailyHabits.length === 0 && dailyTasks.length === 0 && sortedWishlistItems.length === 0 && <>
|
||||||
|
{t("emptyAll")}
|
||||||
|
</>}
|
||||||
</div>
|
</div>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import {
|
|||||||
import { useHabits } from '@/hooks/useHabits'
|
import { useHabits } from '@/hooks/useHabits'
|
||||||
import { currentUserAtom, settingsAtom, usersAtom } from '@/lib/atoms'
|
import { currentUserAtom, settingsAtom, usersAtom } from '@/lib/atoms'
|
||||||
import { Habit, User } from '@/lib/types'
|
import { Habit, User } from '@/lib/types'
|
||||||
import { convertMachineReadableFrequencyToHumanReadable, getCompletionsForToday, hasPermission, isTaskOverdue } from '@/lib/utils'
|
import { convertMachineReadableFrequencyToHumanReadable, getCompletionsForToday, hasPermission, isHabitDueToday, isTaskOverdue } from '@/lib/utils'
|
||||||
import { useAtom } from 'jotai'
|
import { useAtom } from 'jotai'
|
||||||
import { Check, Coins, Edit, MoreVertical, Pin, Undo2 } from 'lucide-react'
|
import { Check, Coins, Edit, MoreVertical, Pin, Undo2 } from 'lucide-react'
|
||||||
import { useTranslations } from 'next-intl'
|
import { useTranslations } from 'next-intl'
|
||||||
@@ -135,11 +135,12 @@ export default function HabitItem({ habit, onEdit, onDelete }: HabitItemProps) {
|
|||||||
<span className={`text-sm font-medium ${habit.archived ? 'text-gray-400 dark:text-gray-500' : ''}`}>{t('coinsPerCompletion', { count: habit.coinReward })}</span>
|
<span className={`text-sm font-medium ${habit.archived ? 'text-gray-400 dark:text-gray-500' : ''}`}>{t('coinsPerCompletion', { count: habit.coinReward })}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div className='mt-2 text-sm font-medium'>{t("completionCount", { completions: habit.completions.length })}</div>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
<CardFooter className="flex-shrink-0 flex justify-between gap-2">
|
<CardFooter className="flex-shrink-0 flex justify-between gap-2">
|
||||||
<div className="flex gap-2">
|
<div className="flex gap-2">
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
<Button
|
{(habit.isTask || isHabitDueToday({ habit, timezone: settings.system.timezone })) && <Button
|
||||||
variant={isCompletedToday ? "secondary" : "default"}
|
variant={isCompletedToday ? "secondary" : "default"}
|
||||||
size="sm"
|
size="sm"
|
||||||
onClick={async () => await completeHabit(habit)}
|
onClick={async () => await completeHabit(habit)}
|
||||||
@@ -174,7 +175,7 @@ export default function HabitItem({ habit, onEdit, onDelete }: HabitItemProps) {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</Button>
|
</Button>}
|
||||||
</div>
|
</div>
|
||||||
{completionsToday > 0 && !habit.archived && (
|
{completionsToday > 0 && !habit.archived && (
|
||||||
<Button
|
<Button
|
||||||
|
|||||||
@@ -48,7 +48,8 @@
|
|||||||
"deleteHabitDialogTitle": "Elimina hàbit",
|
"deleteHabitDialogTitle": "Elimina hàbit",
|
||||||
"confirmDeleteDialogMessage": "Estàs segur que vols eliminar \"{name}\"? Aquesta acció no es pot desfer.",
|
"confirmDeleteDialogMessage": "Estàs segur que vols eliminar \"{name}\"? Aquesta acció no es pot desfer.",
|
||||||
"deleteButton": "Elimina",
|
"deleteButton": "Elimina",
|
||||||
"overdueTooltip": "Vençut"
|
"overdueTooltip": "Vençut",
|
||||||
|
"emptyAll": "Res a fer."
|
||||||
},
|
},
|
||||||
"HabitContextMenuItems": {
|
"HabitContextMenuItems": {
|
||||||
"startPomodoro": "Inicia Pomodoro",
|
"startPomodoro": "Inicia Pomodoro",
|
||||||
@@ -322,7 +323,8 @@
|
|||||||
"completeButtonCount": "Completa ({completed}/{target})",
|
"completeButtonCount": "Completa ({completed}/{target})",
|
||||||
"completeButtonCountMobile": "{completed}/{target}",
|
"completeButtonCountMobile": "{completed}/{target}",
|
||||||
"undoButton": "Desfés",
|
"undoButton": "Desfés",
|
||||||
"editButton": "Edita"
|
"editButton": "Edita",
|
||||||
|
"completionCount": "completat {completions} vegades"
|
||||||
},
|
},
|
||||||
"TransactionNoteEditor": {
|
"TransactionNoteEditor": {
|
||||||
"noteTooLongTitle": "Nota massa llarga",
|
"noteTooLongTitle": "Nota massa llarga",
|
||||||
|
|||||||
@@ -48,7 +48,8 @@
|
|||||||
"deleteHabitDialogTitle": "Gewohnheit löschen",
|
"deleteHabitDialogTitle": "Gewohnheit löschen",
|
||||||
"confirmDeleteDialogMessage": "Sind Sie sicher, dass Sie \"{name}\" löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.",
|
"confirmDeleteDialogMessage": "Sind Sie sicher, dass Sie \"{name}\" löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.",
|
||||||
"deleteButton": "Löschen",
|
"deleteButton": "Löschen",
|
||||||
"overdueTooltip": "Überfällig"
|
"overdueTooltip": "Überfällig",
|
||||||
|
"emptyAll": "Nichts zu tun."
|
||||||
},
|
},
|
||||||
"HabitContextMenuItems": {
|
"HabitContextMenuItems": {
|
||||||
"startPomodoro": "Pomodoro starten",
|
"startPomodoro": "Pomodoro starten",
|
||||||
@@ -322,7 +323,8 @@
|
|||||||
"completeButtonCount": "Abschließen ({completed}/{target})",
|
"completeButtonCount": "Abschließen ({completed}/{target})",
|
||||||
"completeButtonCountMobile": "{completed}/{target}",
|
"completeButtonCountMobile": "{completed}/{target}",
|
||||||
"undoButton": "Rückgängig",
|
"undoButton": "Rückgängig",
|
||||||
"editButton": "Bearbeiten"
|
"editButton": "Bearbeiten",
|
||||||
|
"completionCount": "{completions} mal abgeschlossen"
|
||||||
},
|
},
|
||||||
"TransactionNoteEditor": {
|
"TransactionNoteEditor": {
|
||||||
"noteTooLongTitle": "Notiz zu lang",
|
"noteTooLongTitle": "Notiz zu lang",
|
||||||
@@ -434,8 +436,6 @@
|
|||||||
"invalidAmountDescription": "Bitte geben Sie eine gültige positive Zahl ein",
|
"invalidAmountDescription": "Bitte geben Sie eine gültige positive Zahl ein",
|
||||||
"successTitle": "Erfolg",
|
"successTitle": "Erfolg",
|
||||||
"transactionNotFoundDescription": "Transaktion nicht gefunden",
|
"transactionNotFoundDescription": "Transaktion nicht gefunden",
|
||||||
"maxAmountExceededDescription": "Der Betrag darf {max} nicht überschreiten.",
|
|
||||||
"transactionNotFoundDescription": "Transaktion nicht gefunden",
|
|
||||||
"maxAmountExceededDescription": "Der Betrag darf {max} nicht überschreiten."
|
"maxAmountExceededDescription": "Der Betrag darf {max} nicht überschreiten."
|
||||||
},
|
},
|
||||||
"DrawingModal": {
|
"DrawingModal": {
|
||||||
|
|||||||
@@ -48,7 +48,8 @@
|
|||||||
"deleteHabitDialogTitle": "Delete Habit",
|
"deleteHabitDialogTitle": "Delete Habit",
|
||||||
"confirmDeleteDialogMessage": "Are you sure you want to delete \"{name}\"? This action cannot be undone.",
|
"confirmDeleteDialogMessage": "Are you sure you want to delete \"{name}\"? This action cannot be undone.",
|
||||||
"deleteButton": "Delete",
|
"deleteButton": "Delete",
|
||||||
"overdueTooltip": "Overdue"
|
"overdueTooltip": "Overdue",
|
||||||
|
"emptyAll": "Nothing to do."
|
||||||
},
|
},
|
||||||
"HabitContextMenuItems": {
|
"HabitContextMenuItems": {
|
||||||
"startPomodoro": "Start Pomodoro",
|
"startPomodoro": "Start Pomodoro",
|
||||||
@@ -322,7 +323,8 @@
|
|||||||
"completeButtonCount": "Complete ({completed}/{target})",
|
"completeButtonCount": "Complete ({completed}/{target})",
|
||||||
"completeButtonCountMobile": "{completed}/{target}",
|
"completeButtonCountMobile": "{completed}/{target}",
|
||||||
"undoButton": "Undo",
|
"undoButton": "Undo",
|
||||||
"editButton": "Edit"
|
"editButton": "Edit",
|
||||||
|
"completionCount": "Completed {completions} times"
|
||||||
},
|
},
|
||||||
"TransactionNoteEditor": {
|
"TransactionNoteEditor": {
|
||||||
"noteTooLongTitle": "Note too long",
|
"noteTooLongTitle": "Note too long",
|
||||||
|
|||||||
@@ -48,7 +48,8 @@
|
|||||||
"deleteHabitDialogTitle": "Eliminar hábito",
|
"deleteHabitDialogTitle": "Eliminar hábito",
|
||||||
"confirmDeleteDialogMessage": "¿Estás seguro de que quieres eliminar \"{name}\"? Esta acción no se puede deshacer.",
|
"confirmDeleteDialogMessage": "¿Estás seguro de que quieres eliminar \"{name}\"? Esta acción no se puede deshacer.",
|
||||||
"deleteButton": "Eliminar",
|
"deleteButton": "Eliminar",
|
||||||
"overdueTooltip": "Vencido"
|
"overdueTooltip": "Vencido",
|
||||||
|
"emptyAll": "Nada que hacer."
|
||||||
},
|
},
|
||||||
"HabitContextMenuItems": {
|
"HabitContextMenuItems": {
|
||||||
"startPomodoro": "Iniciar Pomodoro",
|
"startPomodoro": "Iniciar Pomodoro",
|
||||||
@@ -322,7 +323,8 @@
|
|||||||
"completeButtonCount": "Completar ({completed}/{target})",
|
"completeButtonCount": "Completar ({completed}/{target})",
|
||||||
"completeButtonCountMobile": "{completed}/{target}",
|
"completeButtonCountMobile": "{completed}/{target}",
|
||||||
"undoButton": "Deshacer",
|
"undoButton": "Deshacer",
|
||||||
"editButton": "Editar"
|
"editButton": "Editar",
|
||||||
|
"completionCount": "{completions} veces completadas"
|
||||||
},
|
},
|
||||||
"TransactionNoteEditor": {
|
"TransactionNoteEditor": {
|
||||||
"noteTooLongTitle": "Nota demasiado larga",
|
"noteTooLongTitle": "Nota demasiado larga",
|
||||||
@@ -442,8 +444,6 @@
|
|||||||
"invalidAmountDescription": "Por favor ingresa un número positivo válido",
|
"invalidAmountDescription": "Por favor ingresa un número positivo válido",
|
||||||
"successTitle": "Éxito",
|
"successTitle": "Éxito",
|
||||||
"transactionNotFoundDescription": "Transacción no encontrada",
|
"transactionNotFoundDescription": "Transacción no encontrada",
|
||||||
"maxAmountExceededDescription": "La cantidad no puede exceder {max}.",
|
|
||||||
"transactionNotFoundDescription": "Transacción no encontrada",
|
|
||||||
"maxAmountExceededDescription": "La cantidad no puede exceder {max}."
|
"maxAmountExceededDescription": "La cantidad no puede exceder {max}."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,8 @@
|
|||||||
"deleteHabitDialogTitle": "Supprimer l'habitude",
|
"deleteHabitDialogTitle": "Supprimer l'habitude",
|
||||||
"confirmDeleteDialogMessage": "Êtes-vous sûr de vouloir supprimer \"{name}\" ? Cette action est irréversible.",
|
"confirmDeleteDialogMessage": "Êtes-vous sûr de vouloir supprimer \"{name}\" ? Cette action est irréversible.",
|
||||||
"deleteButton": "Supprimer",
|
"deleteButton": "Supprimer",
|
||||||
"overdueTooltip": "En retard"
|
"overdueTooltip": "En retard",
|
||||||
|
"emptyAll": "Rien à faire."
|
||||||
},
|
},
|
||||||
"HabitContextMenuItems": {
|
"HabitContextMenuItems": {
|
||||||
"startPomodoro": "Démarrer Pomodoro",
|
"startPomodoro": "Démarrer Pomodoro",
|
||||||
@@ -322,7 +323,8 @@
|
|||||||
"completeButtonCount": "Compléter ({completed}/{target})",
|
"completeButtonCount": "Compléter ({completed}/{target})",
|
||||||
"completeButtonCountMobile": "{completed}/{target}",
|
"completeButtonCountMobile": "{completed}/{target}",
|
||||||
"undoButton": "Annuler",
|
"undoButton": "Annuler",
|
||||||
"editButton": "Modifier"
|
"editButton": "Modifier",
|
||||||
|
"completionCount": "complété {completions} fois"
|
||||||
},
|
},
|
||||||
"TransactionNoteEditor": {
|
"TransactionNoteEditor": {
|
||||||
"noteTooLongTitle": "Note trop longue",
|
"noteTooLongTitle": "Note trop longue",
|
||||||
@@ -434,8 +436,6 @@
|
|||||||
"invalidAmountDescription": "Veuillez entrer un nombre positif valide",
|
"invalidAmountDescription": "Veuillez entrer un nombre positif valide",
|
||||||
"successTitle": "Succès",
|
"successTitle": "Succès",
|
||||||
"transactionNotFoundDescription": "Transaction non trouvée",
|
"transactionNotFoundDescription": "Transaction non trouvée",
|
||||||
"maxAmountExceededDescription": "Le montant ne peut pas dépasser {max}.",
|
|
||||||
"transactionNotFoundDescription": "Transaction non trouvée",
|
|
||||||
"maxAmountExceededDescription": "Le montant ne peut pas dépasser {max}."
|
"maxAmountExceededDescription": "Le montant ne peut pas dépasser {max}."
|
||||||
},
|
},
|
||||||
"DrawingModal": {
|
"DrawingModal": {
|
||||||
|
|||||||
@@ -48,7 +48,8 @@
|
|||||||
"deleteHabitDialogTitle": "習慣を削除",
|
"deleteHabitDialogTitle": "習慣を削除",
|
||||||
"confirmDeleteDialogMessage": "\"{name}\"を削除してもよろしいですか?この操作は元に戻せません。",
|
"confirmDeleteDialogMessage": "\"{name}\"を削除してもよろしいですか?この操作は元に戻せません。",
|
||||||
"deleteButton": "削除",
|
"deleteButton": "削除",
|
||||||
"overdueTooltip": "期限超過"
|
"overdueTooltip": "期限超過",
|
||||||
|
"emptyAll": "何もする事はありません。"
|
||||||
},
|
},
|
||||||
"HabitContextMenuItems": {
|
"HabitContextMenuItems": {
|
||||||
"startPomodoro": "ポモドーロを開始",
|
"startPomodoro": "ポモドーロを開始",
|
||||||
@@ -322,7 +323,8 @@
|
|||||||
"completeButtonCount": "完了({completed}/{target})",
|
"completeButtonCount": "完了({completed}/{target})",
|
||||||
"completeButtonCountMobile": "{completed}/{target}",
|
"completeButtonCountMobile": "{completed}/{target}",
|
||||||
"undoButton": "取り消し",
|
"undoButton": "取り消し",
|
||||||
"editButton": "編集"
|
"editButton": "編集",
|
||||||
|
"completionCount": "{completions} 回完了しました"
|
||||||
},
|
},
|
||||||
"TransactionNoteEditor": {
|
"TransactionNoteEditor": {
|
||||||
"noteTooLongTitle": "メモが長すぎます",
|
"noteTooLongTitle": "メモが長すぎます",
|
||||||
@@ -434,8 +436,6 @@
|
|||||||
"invalidAmountDescription": "有効な正の数を入力してください",
|
"invalidAmountDescription": "有効な正の数を入力してください",
|
||||||
"successTitle": "成功しました",
|
"successTitle": "成功しました",
|
||||||
"transactionNotFoundDescription": "取引が見つかりません",
|
"transactionNotFoundDescription": "取引が見つかりません",
|
||||||
"maxAmountExceededDescription": "金額は{max}を超えることはできません。",
|
|
||||||
"transactionNotFoundDescription": "取引が見つかりません",
|
|
||||||
"maxAmountExceededDescription": "金額は{max}を超えることはできません。"
|
"maxAmountExceededDescription": "金額は{max}を超えることはできません。"
|
||||||
},
|
},
|
||||||
"DrawingModal": {
|
"DrawingModal": {
|
||||||
|
|||||||
@@ -48,7 +48,8 @@
|
|||||||
"deleteHabitDialogTitle": "습관 삭제",
|
"deleteHabitDialogTitle": "습관 삭제",
|
||||||
"confirmDeleteDialogMessage": "정말로 \"{name}\"을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
|
"confirmDeleteDialogMessage": "정말로 \"{name}\"을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
|
||||||
"deleteButton": "삭제",
|
"deleteButton": "삭제",
|
||||||
"overdueTooltip": "기한이 지남"
|
"overdueTooltip": "기한이 지남",
|
||||||
|
"emptyAll": "할 일이 없어요."
|
||||||
},
|
},
|
||||||
"HabitContextMenuItems": {
|
"HabitContextMenuItems": {
|
||||||
"startPomodoro": "뽀모도로 시작",
|
"startPomodoro": "뽀모도로 시작",
|
||||||
@@ -322,7 +323,8 @@
|
|||||||
"completeButtonCount": "완료 ({completed}/{target})",
|
"completeButtonCount": "완료 ({completed}/{target})",
|
||||||
"completeButtonCountMobile": "{completed}/{target}",
|
"completeButtonCountMobile": "{completed}/{target}",
|
||||||
"undoButton": "실행 취소",
|
"undoButton": "실행 취소",
|
||||||
"editButton": "수정"
|
"editButton": "수정",
|
||||||
|
"completionCount": "{completions}번 완료됨"
|
||||||
},
|
},
|
||||||
"TransactionNoteEditor": {
|
"TransactionNoteEditor": {
|
||||||
"noteTooLongTitle": "메모가 너무 깁니다",
|
"noteTooLongTitle": "메모가 너무 깁니다",
|
||||||
@@ -430,8 +432,6 @@
|
|||||||
"invalidAmountDescription": "유효한 양의 숫자를 입력하세요",
|
"invalidAmountDescription": "유효한 양의 숫자를 입력하세요",
|
||||||
"successTitle": "성공",
|
"successTitle": "성공",
|
||||||
"transactionNotFoundDescription": "거래를 찾을 수 없습니다",
|
"transactionNotFoundDescription": "거래를 찾을 수 없습니다",
|
||||||
"maxAmountExceededDescription": "금액은 {max}을(를) 초과할 수 없습니다.",
|
|
||||||
"transactionNotFoundDescription": "거래를 찾을 수 없습니다",
|
|
||||||
"maxAmountExceededDescription": "금액은 {max}을(를) 초과할 수 없습니다."
|
"maxAmountExceededDescription": "금액은 {max}을(를) 초과할 수 없습니다."
|
||||||
},
|
},
|
||||||
"Warning": {
|
"Warning": {
|
||||||
|
|||||||
@@ -48,7 +48,8 @@
|
|||||||
"deleteHabitDialogTitle": "Удалить привычку",
|
"deleteHabitDialogTitle": "Удалить привычку",
|
||||||
"confirmDeleteDialogMessage": "Вы уверены, что хотите удалить \"{name}\"? Это действие нельзя отменить.",
|
"confirmDeleteDialogMessage": "Вы уверены, что хотите удалить \"{name}\"? Это действие нельзя отменить.",
|
||||||
"deleteButton": "Удалить",
|
"deleteButton": "Удалить",
|
||||||
"overdueTooltip": "Просрочено"
|
"overdueTooltip": "Просрочено",
|
||||||
|
"emptyAll": "Делать нечего."
|
||||||
},
|
},
|
||||||
"HabitContextMenuItems": {
|
"HabitContextMenuItems": {
|
||||||
"startPomodoro": "Начать помидорку",
|
"startPomodoro": "Начать помидорку",
|
||||||
@@ -322,7 +323,8 @@
|
|||||||
"completeButtonCount": "Выполнить ({completed}/{target})",
|
"completeButtonCount": "Выполнить ({completed}/{target})",
|
||||||
"completeButtonCountMobile": "{completed}/{target}",
|
"completeButtonCountMobile": "{completed}/{target}",
|
||||||
"undoButton": "Отменить",
|
"undoButton": "Отменить",
|
||||||
"editButton": "Редактировать"
|
"editButton": "Редактировать",
|
||||||
|
"completionCount": "завершено {completions} раз"
|
||||||
},
|
},
|
||||||
"TransactionNoteEditor": {
|
"TransactionNoteEditor": {
|
||||||
"noteTooLongTitle": "Слишком длинная заметка",
|
"noteTooLongTitle": "Слишком длинная заметка",
|
||||||
@@ -434,8 +436,6 @@
|
|||||||
"invalidAmountDescription": "Пожалуйста, введите положительное число",
|
"invalidAmountDescription": "Пожалуйста, введите положительное число",
|
||||||
"successTitle": "Успех",
|
"successTitle": "Успех",
|
||||||
"transactionNotFoundDescription": "Транзакция не найдена",
|
"transactionNotFoundDescription": "Транзакция не найдена",
|
||||||
"maxAmountExceededDescription": "Сумма не может превышать {max}.",
|
|
||||||
"transactionNotFoundDescription": "Транзакция не найдена",
|
|
||||||
"maxAmountExceededDescription": "Сумма не может превышать {max}."
|
"maxAmountExceededDescription": "Сумма не может превышать {max}."
|
||||||
},
|
},
|
||||||
"DrawingModal": {
|
"DrawingModal": {
|
||||||
|
|||||||
@@ -48,7 +48,8 @@
|
|||||||
"deleteHabitDialogTitle": "删除习惯",
|
"deleteHabitDialogTitle": "删除习惯",
|
||||||
"confirmDeleteDialogMessage": "确定要删除\"{name}\"吗?此操作无法撤消。",
|
"confirmDeleteDialogMessage": "确定要删除\"{name}\"吗?此操作无法撤消。",
|
||||||
"deleteButton": "删除",
|
"deleteButton": "删除",
|
||||||
"overdueTooltip": "逾期"
|
"overdueTooltip": "逾期",
|
||||||
|
"emptyAll": "无事可做。"
|
||||||
},
|
},
|
||||||
"HabitContextMenuItems": {
|
"HabitContextMenuItems": {
|
||||||
"startPomodoro": "开始番茄钟",
|
"startPomodoro": "开始番茄钟",
|
||||||
@@ -322,7 +323,8 @@
|
|||||||
"completeButtonCount": "完成 ({completed}/{target})",
|
"completeButtonCount": "完成 ({completed}/{target})",
|
||||||
"completeButtonCountMobile": "{completed}/{target}",
|
"completeButtonCountMobile": "{completed}/{target}",
|
||||||
"undoButton": "撤销",
|
"undoButton": "撤销",
|
||||||
"editButton": "编辑"
|
"editButton": "编辑",
|
||||||
|
"completionCount": "完成 {completions} 次"
|
||||||
},
|
},
|
||||||
"TransactionNoteEditor": {
|
"TransactionNoteEditor": {
|
||||||
"noteTooLongTitle": "备注太长",
|
"noteTooLongTitle": "备注太长",
|
||||||
@@ -434,8 +436,6 @@
|
|||||||
"invalidAmountDescription": "请输入有效的正数",
|
"invalidAmountDescription": "请输入有效的正数",
|
||||||
"successTitle": "成功",
|
"successTitle": "成功",
|
||||||
"transactionNotFoundDescription": "未找到交易记录",
|
"transactionNotFoundDescription": "未找到交易记录",
|
||||||
"maxAmountExceededDescription": "金额不能超过 {max}。",
|
|
||||||
"transactionNotFoundDescription": "未找到交易记录",
|
|
||||||
"maxAmountExceededDescription": "金额不能超过 {max}。"
|
"maxAmountExceededDescription": "金额不能超过 {max}。"
|
||||||
},
|
},
|
||||||
"DrawingModal": {
|
"DrawingModal": {
|
||||||
|
|||||||
Reference in New Issue
Block a user