From 7a1977988ad8826cbfb4c77e156ac0575ad88027 Mon Sep 17 00:00:00 2001
From: v-byte-cpu <65545655+v-byte-cpu@users.noreply.github.com>
Date: Sun, 7 Jun 2026 18:19:40 +0400
Subject: [PATCH] feat(i18n): add multilingual UI locales
Add public locale resources, language selection, and
document language metadata for supported UI translations.
Also align pluralized date formatting with i18next locale rules and
add resource coverage checks for locale keys and placeholders.
---
ui/src/core/i18n/I18nProvider.test.tsx | 46 ++
ui/src/core/i18n/I18nProvider.tsx | 33 +-
ui/src/core/i18n/i18n.test.ts | 327 ++++++++-
ui/src/core/i18n/index.ts | 5 +-
ui/src/core/i18n/locales.ts | 51 +-
ui/src/core/i18n/resources/ar.ts | 675 ++++++++++++++++++
ui/src/core/i18n/resources/bg.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/bs.ts | 636 +++++++++++++++++
ui/src/core/i18n/resources/ca.ts | 636 +++++++++++++++++
ui/src/core/i18n/resources/cs.ts | 649 +++++++++++++++++
ui/src/core/i18n/resources/da.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/de.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/el.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/en-US.ts | 50 +-
ui/src/core/i18n/resources/es.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/et.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/fa.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/fi.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/fr.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/he.ts | 636 +++++++++++++++++
ui/src/core/i18n/resources/hr.ts | 636 +++++++++++++++++
ui/src/core/i18n/resources/hu.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/id.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/index.ts | 152 ++++
ui/src/core/i18n/resources/it.ts | 636 +++++++++++++++++
ui/src/core/i18n/resources/ja.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/ko.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/lt.ts | 649 +++++++++++++++++
ui/src/core/i18n/resources/lv.ts | 636 +++++++++++++++++
ui/src/core/i18n/resources/nb.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/nl.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/pl.ts | 649 +++++++++++++++++
ui/src/core/i18n/resources/pt-BR.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/ro.ts | 636 +++++++++++++++++
ui/src/core/i18n/resources/ru.ts | 649 +++++++++++++++++
ui/src/core/i18n/resources/sk.ts | 649 +++++++++++++++++
ui/src/core/i18n/resources/sl.ts | 649 +++++++++++++++++
ui/src/core/i18n/resources/sr-Latn.ts | 636 +++++++++++++++++
ui/src/core/i18n/resources/sv.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/th.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/tr.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/uk.ts | 649 +++++++++++++++++
ui/src/core/i18n/resources/vi.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/zh-Hans.ts | 623 ++++++++++++++++
ui/src/core/i18n/resources/zh-Hant.ts | 623 ++++++++++++++++
.../components/SettingsPageContent.tsx | 3 +-
.../constants/settings-options.test.ts | 59 ++
.../settings/constants/settings-options.ts | 50 +-
.../settings/constants/settings-ui.ts | 2 +-
.../settings/pages/SettingsPage.test.tsx | 41 +-
.../features/settings/pages/SettingsPage.tsx | 10 +-
ui/src/features/trash/pages/TrashPage.tsx | 5 +-
ui/src/shared/lib/translated-date-format.ts | 38 +-
ui/src/test/setup.ts | 2 +
54 files changed, 24800 insertions(+), 86 deletions(-)
create mode 100644 ui/src/core/i18n/I18nProvider.test.tsx
create mode 100644 ui/src/core/i18n/resources/ar.ts
create mode 100644 ui/src/core/i18n/resources/bg.ts
create mode 100644 ui/src/core/i18n/resources/bs.ts
create mode 100644 ui/src/core/i18n/resources/ca.ts
create mode 100644 ui/src/core/i18n/resources/cs.ts
create mode 100644 ui/src/core/i18n/resources/da.ts
create mode 100644 ui/src/core/i18n/resources/de.ts
create mode 100644 ui/src/core/i18n/resources/el.ts
create mode 100644 ui/src/core/i18n/resources/es.ts
create mode 100644 ui/src/core/i18n/resources/et.ts
create mode 100644 ui/src/core/i18n/resources/fa.ts
create mode 100644 ui/src/core/i18n/resources/fi.ts
create mode 100644 ui/src/core/i18n/resources/fr.ts
create mode 100644 ui/src/core/i18n/resources/he.ts
create mode 100644 ui/src/core/i18n/resources/hr.ts
create mode 100644 ui/src/core/i18n/resources/hu.ts
create mode 100644 ui/src/core/i18n/resources/id.ts
create mode 100644 ui/src/core/i18n/resources/it.ts
create mode 100644 ui/src/core/i18n/resources/ja.ts
create mode 100644 ui/src/core/i18n/resources/ko.ts
create mode 100644 ui/src/core/i18n/resources/lt.ts
create mode 100644 ui/src/core/i18n/resources/lv.ts
create mode 100644 ui/src/core/i18n/resources/nb.ts
create mode 100644 ui/src/core/i18n/resources/nl.ts
create mode 100644 ui/src/core/i18n/resources/pl.ts
create mode 100644 ui/src/core/i18n/resources/pt-BR.ts
create mode 100644 ui/src/core/i18n/resources/ro.ts
create mode 100644 ui/src/core/i18n/resources/ru.ts
create mode 100644 ui/src/core/i18n/resources/sk.ts
create mode 100644 ui/src/core/i18n/resources/sl.ts
create mode 100644 ui/src/core/i18n/resources/sr-Latn.ts
create mode 100644 ui/src/core/i18n/resources/sv.ts
create mode 100644 ui/src/core/i18n/resources/th.ts
create mode 100644 ui/src/core/i18n/resources/tr.ts
create mode 100644 ui/src/core/i18n/resources/uk.ts
create mode 100644 ui/src/core/i18n/resources/vi.ts
create mode 100644 ui/src/core/i18n/resources/zh-Hans.ts
create mode 100644 ui/src/core/i18n/resources/zh-Hant.ts
create mode 100644 ui/src/features/settings/constants/settings-options.test.ts
diff --git a/ui/src/core/i18n/I18nProvider.test.tsx b/ui/src/core/i18n/I18nProvider.test.tsx
new file mode 100644
index 0000000..f0bdc97
--- /dev/null
+++ b/ui/src/core/i18n/I18nProvider.test.tsx
@@ -0,0 +1,46 @@
+import { act, render } from '@testing-library/react'
+import { describe, expect, it } from 'vitest'
+
+import { AppI18nProvider, createAppI18n, defaultLocale } from '@core/i18n'
+
+describe('AppI18nProvider', () => {
+ it('syncs document language and direction with the active i18n language', async () => {
+ const i18n = createAppI18n('ar')
+
+ render(
+
+
+ ,
+ )
+
+ expect(document.documentElement).toHaveAttribute('lang', 'ar')
+ expect(document.documentElement).toHaveAttribute('dir', 'rtl')
+
+ await act(async () => {
+ await i18n.changeLanguage('he')
+ })
+
+ expect(document.documentElement).toHaveAttribute('lang', 'he')
+ expect(document.documentElement).toHaveAttribute('dir', 'rtl')
+
+ await act(async () => {
+ await i18n.changeLanguage(defaultLocale)
+ })
+
+ expect(document.documentElement).toHaveAttribute('lang', defaultLocale)
+ expect(document.documentElement).toHaveAttribute('dir', 'ltr')
+ })
+
+ it('uses default document metadata for unsupported locales', () => {
+ const i18n = createAppI18n('zz')
+
+ render(
+
+
+ ,
+ )
+
+ expect(document.documentElement).toHaveAttribute('lang', defaultLocale)
+ expect(document.documentElement).toHaveAttribute('dir', 'ltr')
+ })
+})
diff --git a/ui/src/core/i18n/I18nProvider.tsx b/ui/src/core/i18n/I18nProvider.tsx
index 6fe5ace..0a12842 100644
--- a/ui/src/core/i18n/I18nProvider.tsx
+++ b/ui/src/core/i18n/I18nProvider.tsx
@@ -1,13 +1,42 @@
-import type { PropsWithChildren } from 'react'
+import { useEffect, type PropsWithChildren } from 'react'
import { I18nextProvider } from 'react-i18next'
import { appI18n } from './i18n'
+import { getDocumentLocale, getLocaleDirection } from './locales'
import type { i18n } from 'i18next'
+const syncDocumentLocale = (language: string) => {
+ const locale = getDocumentLocale(language)
+
+ document.documentElement.lang = locale
+ document.documentElement.dir = getLocaleDirection(locale)
+}
+
+const I18nDocumentMetadata = ({ i18n }: { i18n: i18n }) => {
+ useEffect(() => {
+ syncDocumentLocale(i18n.resolvedLanguage ?? i18n.language)
+
+ const handleLanguageChanged = (language: string) => {
+ syncDocumentLocale(language)
+ }
+
+ i18n.on('languageChanged', handleLanguageChanged)
+
+ return () => {
+ i18n.off('languageChanged', handleLanguageChanged)
+ }
+ }, [i18n])
+
+ return null
+}
+
export const AppI18nProvider = ({
children,
i18n = appI18n,
}: PropsWithChildren<{ i18n?: i18n }>) => (
- {children}
+
+
+ {children}
+
)
diff --git a/ui/src/core/i18n/i18n.test.ts b/ui/src/core/i18n/i18n.test.ts
index 5b9ebb3..4a96b41 100644
--- a/ui/src/core/i18n/i18n.test.ts
+++ b/ui/src/core/i18n/i18n.test.ts
@@ -1,6 +1,40 @@
import { describe, expect, it } from 'vitest'
-import { createAppI18n, defaultLocale } from '@core/i18n'
+import {
+ createAppI18n,
+ defaultLocale,
+ defaultNamespace,
+ getDocumentLocale,
+ getLocaleDirection,
+ publicLocales,
+ resources,
+} from '@core/i18n'
+
+type FlatResource = Record
+
+const flattenResource = (
+ value: unknown,
+ prefix = '',
+ result: FlatResource = {},
+): FlatResource => {
+ if (typeof value === 'string') {
+ result[prefix] = value
+ return result
+ }
+
+ if (!value || typeof value !== 'object') {
+ return result
+ }
+
+ for (const [key, child] of Object.entries(value)) {
+ flattenResource(child, prefix ? `${prefix}.${key}` : key, result)
+ }
+
+ return result
+}
+
+const placeholdersFor = (value: string) =>
+ [...value.matchAll(/\{\{([^}]+)\}\}/g)].map((match) => match[1]).sort()
describe('i18n', () => {
it('creates an English i18next instance with typed selector resources', () => {
@@ -14,8 +48,297 @@ describe('i18n', () => {
})
it('falls back to English for unsupported locales', () => {
- const i18n = createAppI18n('fr-FR')
+ const i18n = createAppI18n('zz')
expect(i18n.t(($) => $.decks.labels.dueToday)).toBe('Due Today')
})
+
+ it('maps public locales to document metadata', () => {
+ expect(getDocumentLocale('ar')).toBe('ar')
+ expect(getDocumentLocale('zz')).toBe(defaultLocale)
+ expect(getLocaleDirection('fa')).toBe('rtl')
+ expect(getLocaleDirection('ar')).toBe('rtl')
+ expect(getLocaleDirection('he')).toBe('rtl')
+ expect(getLocaleDirection(defaultLocale)).toBe('ltr')
+ expect(getLocaleDirection('zz')).toBe('ltr')
+ })
+
+ it('loads each public locale through i18next resources', () => {
+ expect(publicLocales).toEqual([
+ 'en-US',
+ 'es',
+ 'pt-BR',
+ 'fr',
+ 'de',
+ 'ja',
+ 'zh-Hans',
+ 'zh-Hant',
+ 'ko',
+ 'id',
+ 'ru',
+ 'it',
+ 'nl',
+ 'tr',
+ 'pl',
+ 'vi',
+ 'cs',
+ 'uk',
+ 'hu',
+ 'sv',
+ 'ro',
+ 'el',
+ 'da',
+ 'fi',
+ 'sk',
+ 'bg',
+ 'th',
+ 'hr',
+ 'nb',
+ 'sr-Latn',
+ 'lt',
+ 'sl',
+ 'ca',
+ 'et',
+ 'lv',
+ 'bs',
+ 'fa',
+ 'ar',
+ 'he',
+ ])
+
+ expect(createAppI18n('es').t(($) => $.settings.labels.settings)).toBe('Ajustes')
+ expect(createAppI18n('pt-BR').t(($) => $.settings.labels.settings)).toBe(
+ 'Configurações',
+ )
+ expect(createAppI18n('fr').t(($) => $.settings.labels.settings)).toBe('Paramètres')
+ expect(createAppI18n('de').t(($) => $.settings.labels.settings)).toBe('Einstellungen')
+ expect(createAppI18n('ja').t(($) => $.settings.labels.settings)).toBe('設定')
+ expect(createAppI18n('zh-Hans').t(($) => $.settings.labels.settings)).toBe('设置')
+ expect(createAppI18n('zh-Hant').t(($) => $.settings.labels.settings)).toBe('設定')
+ expect(createAppI18n('ko').t(($) => $.settings.labels.settings)).toBe('설정')
+ expect(createAppI18n('id').t(($) => $.settings.labels.settings)).toBe('Pengaturan')
+ expect(createAppI18n('ru').t(($) => $.settings.labels.settings)).toBe('Настройки')
+ expect(createAppI18n('it').t(($) => $.settings.labels.settings)).toBe('Impostazioni')
+ expect(createAppI18n('nl').t(($) => $.settings.labels.settings)).toBe('Instellingen')
+ expect(createAppI18n('tr').t(($) => $.settings.labels.settings)).toBe('Ayarlar')
+ expect(createAppI18n('pl').t(($) => $.settings.labels.settings)).toBe('Ustawienia')
+ expect(createAppI18n('vi').t(($) => $.settings.labels.settings)).toBe('Cài đặt')
+ expect(createAppI18n('cs').t(($) => $.settings.labels.settings)).toBe('Nastavení')
+ expect(createAppI18n('uk').t(($) => $.settings.labels.settings)).toBe(
+ 'Налаштування',
+ )
+ expect(createAppI18n('hu').t(($) => $.settings.labels.settings)).toBe('Beállítások')
+ expect(createAppI18n('sv').t(($) => $.settings.labels.settings)).toBe('Inställningar')
+ expect(createAppI18n('ro').t(($) => $.settings.labels.settings)).toBe('Setări')
+ expect(createAppI18n('el').t(($) => $.settings.labels.settings)).toBe('Ρυθμίσεις')
+ expect(createAppI18n('da').t(($) => $.settings.labels.settings)).toBe(
+ 'Indstillinger',
+ )
+ expect(createAppI18n('fi').t(($) => $.settings.labels.settings)).toBe('Asetukset')
+ expect(createAppI18n('sk').t(($) => $.settings.labels.settings)).toBe('Nastavenia')
+ expect(createAppI18n('bg').t(($) => $.settings.labels.settings)).toBe('Настройки')
+ expect(createAppI18n('th').t(($) => $.settings.labels.settings)).toBe('การตั้งค่า')
+ expect(createAppI18n('hr').t(($) => $.settings.labels.settings)).toBe('Postavke')
+ expect(createAppI18n('nb').t(($) => $.settings.labels.settings)).toBe(
+ 'Innstillinger',
+ )
+ expect(createAppI18n('sr-Latn').t(($) => $.settings.labels.settings)).toBe(
+ 'Podešavanja',
+ )
+ expect(createAppI18n('lt').t(($) => $.settings.labels.settings)).toBe('Nustatymai')
+ expect(createAppI18n('sl').t(($) => $.settings.labels.settings)).toBe('Nastavitve')
+ expect(createAppI18n('ca').t(($) => $.settings.labels.settings)).toBe(
+ 'Configuració',
+ )
+ expect(createAppI18n('et').t(($) => $.settings.labels.settings)).toBe('Seaded')
+ expect(createAppI18n('lv').t(($) => $.settings.labels.settings)).toBe('Iestatījumi')
+ expect(createAppI18n('bs').t(($) => $.settings.labels.settings)).toBe('Postavke')
+ expect(createAppI18n('fa').t(($) => $.settings.labels.settings)).toBe('تنظیمات')
+ expect(createAppI18n('ar').t(($) => $.settings.labels.settings)).toBe('الإعدادات')
+ expect(createAppI18n('he').t(($) => $.settings.labels.settings)).toBe('הגדרות')
+ })
+
+ it('keeps locale resource keys and placeholders aligned with English', () => {
+ const defaultResource = flattenResource(resources[defaultLocale][defaultNamespace])
+ const defaultKeys = Object.keys(defaultResource).sort()
+
+ for (const locale of publicLocales) {
+ const localeResource = flattenResource(resources[locale][defaultNamespace])
+ const missingKeys = defaultKeys.filter((key) => !(key in localeResource))
+ const placeholderMismatches = defaultKeys.filter(
+ (key) =>
+ JSON.stringify(placeholdersFor(localeResource[key] ?? '')) !==
+ JSON.stringify(placeholdersFor(defaultResource[key])),
+ )
+
+ expect(missingKeys, locale).toEqual([])
+ expect(placeholderMismatches, locale).toEqual([])
+ }
+ })
+
+ it('uses Russian plural categories for count-based translations', () => {
+ const i18n = createAppI18n('ru')
+
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 1 })).toBe('1 элемент')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 2 })).toBe('2 элемента')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 5 })).toBe('5 элементов')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 21 })).toBe('21 день назад')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 22 })).toBe('22 дня назад')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 25 })).toBe('25 дней назад')
+ })
+
+ it('uses Polish plural categories for count-based translations', () => {
+ const i18n = createAppI18n('pl')
+
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 1 })).toBe('1 element')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 2 })).toBe('2 elementy')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 5 })).toBe('5 elementów')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 1 })).toBe('1 dzień temu')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 2 })).toBe('2 dni temu')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 5 })).toBe('5 dni temu')
+ })
+
+ it('uses Czech plural categories for count-based translations', () => {
+ const i18n = createAppI18n('cs')
+
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 1 })).toBe('1 položka')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 2 })).toBe('2 položky')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 5 })).toBe('5 položek')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 1 })).toBe('před 1 dnem')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 2 })).toBe('před 2 dny')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 5 })).toBe('před 5 dny')
+ })
+
+ it('uses Croatian plural categories for count-based translations', () => {
+ const i18n = createAppI18n('hr')
+
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 1 })).toBe('1 stavka')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 2 })).toBe('2 stavke')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 5 })).toBe('5 stavki')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 1 })).toBe('prije 1 dan')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 2 })).toBe('prije 2 dana')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 5 })).toBe('prije 5 dana')
+ })
+
+ it('uses Slovenian plural categories for count-based translations', () => {
+ const i18n = createAppI18n('sl')
+
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 1 })).toBe('1 element')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 2 })).toBe('2 elementa')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 3 })).toBe('3 elementi')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 5 })).toBe('5 elementov')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 1 })).toBe('pred 1 dnem')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 2 })).toBe('pred 2 dnevoma')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 3 })).toBe('pred 3 dnevi')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 5 })).toBe('pred 5 dnevi')
+ })
+
+ it('uses Bosnian plural categories for count-based translations', () => {
+ const i18n = createAppI18n('bs')
+
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 1 })).toBe('1 stavka')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 2 })).toBe('2 stavke')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 5 })).toBe('5 stavki')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 1 })).toBe('prije 1 dan')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 2 })).toBe('prije 2 dana')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 5 })).toBe('prije 5 dana')
+ })
+
+ it('uses Arabic plural categories for count-based translations', () => {
+ const i18n = createAppI18n('ar')
+
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 0 })).toBe('0 عنصر')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 1 })).toBe('1 عنصر')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 2 })).toBe('2 عنصران')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 3 })).toBe('3 عناصر')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 11 })).toBe('11 عنصرا')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 100 })).toBe('100 عنصر')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 0 })).toBe('منذ 0 يوم')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 1 })).toBe('منذ 1 يوم')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 2 })).toBe('منذ 2 يومين')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 3 })).toBe('منذ 3 أيام')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 11 })).toBe('منذ 11 يوما')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 100 })).toBe('منذ 100 يوم')
+ })
+
+ it('uses Hebrew plural categories for count-based translations', () => {
+ const i18n = createAppI18n('he')
+
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 1 })).toBe('1 פריט')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 2 })).toBe('2 פריטים')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 3 })).toBe('3 פריטים')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 1 })).toBe('לפני 1 יום')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 2 })).toBe('לפני 2 ימים')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 3 })).toBe('לפני 3 ימים')
+ })
+
+ it('uses Ukrainian plural categories for count-based translations', () => {
+ const i18n = createAppI18n('uk')
+
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 1 })).toBe('1 елемент')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 2 })).toBe('2 елементи')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 5 })).toBe('5 елементів')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 21 })).toBe('21 день тому')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 22 })).toBe('22 дні тому')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 25 })).toBe('25 днів тому')
+ })
+
+ it('uses Slovak plural categories for count-based translations', () => {
+ const i18n = createAppI18n('sk')
+
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 1 })).toBe('1 položka')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 2 })).toBe('2 položky')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 5 })).toBe('5 položiek')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 1 })).toBe('pred 1 dňom')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 2 })).toBe('pred 2 dňami')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 5 })).toBe('pred 5 dňami')
+ })
+
+ it('uses Serbian Latin plural categories for count-based translations', () => {
+ const i18n = createAppI18n('sr-Latn')
+
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 1 })).toBe('1 stavka')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 2 })).toBe('2 stavke')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 5 })).toBe('5 stavki')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 1 })).toBe('pre 1 dan')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 2 })).toBe('pre 2 dana')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 5 })).toBe('pre 5 dana')
+ })
+
+ it('uses Lithuanian plural categories for count-based translations', () => {
+ const i18n = createAppI18n('lt')
+
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 1 })).toBe('1 elementas')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 2 })).toBe('2 elementai')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 10 })).toBe('10 elementų')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 1 })).toBe('prieš 1 dieną')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 2 })).toBe('prieš 2 dienas')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 10 })).toBe('prieš 10 dienų')
+ })
+
+ it('uses Latvian plural categories for count-based translations', () => {
+ const i18n = createAppI18n('lv')
+
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 0 })).toBe('0 vienumu')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 1 })).toBe('1 vienums')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 2 })).toBe('2 vienumi')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 0 })).toBe('pirms 0 dienām')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 1 })).toBe('pirms 1 dienas')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 2 })).toBe('pirms 2 dienām')
+ })
+
+ it('uses Romanian plural categories for count-based translations', () => {
+ const i18n = createAppI18n('ro')
+
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 1 })).toBe('1 element')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 2 })).toBe('2 elemente')
+ expect(i18n.t(($) => $.trash.labels.itemCount, { count: 21 })).toBe(
+ '21 de elemente',
+ )
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 1 })).toBe('acum 1 zi')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 2 })).toBe('acum 2 zile')
+ expect(i18n.t(($) => $.dates.age.dayAgo, { count: 21 })).toBe(
+ 'acum 21 de zile',
+ )
+ })
})
diff --git a/ui/src/core/i18n/index.ts b/ui/src/core/i18n/index.ts
index d248a72..a0ee3b9 100644
--- a/ui/src/core/i18n/index.ts
+++ b/ui/src/core/i18n/index.ts
@@ -2,9 +2,12 @@ export { AppI18nProvider } from './I18nProvider'
export { appI18n, createAppI18n } from './i18n'
export {
defaultLocale,
+ getDocumentLocale,
+ getLocaleDirection,
isPublicLocale,
publicLocales,
+ rtlLocales,
} from './locales'
export { defaultNamespace, resources } from './resources'
-export type { PublicLocale } from './locales'
+export type { LocaleDirection, PublicLocale } from './locales'
export type { TranslationResources } from './resources'
diff --git a/ui/src/core/i18n/locales.ts b/ui/src/core/i18n/locales.ts
index 2da2147..a8d937b 100644
--- a/ui/src/core/i18n/locales.ts
+++ b/ui/src/core/i18n/locales.ts
@@ -1,8 +1,57 @@
export const defaultLocale = 'en-US'
-export const publicLocales = [defaultLocale] as const
+export const publicLocales = [
+ defaultLocale,
+ 'es',
+ 'pt-BR',
+ 'fr',
+ 'de',
+ 'ja',
+ 'zh-Hans',
+ 'zh-Hant',
+ 'ko',
+ 'id',
+ 'ru',
+ 'it',
+ 'nl',
+ 'tr',
+ 'pl',
+ 'vi',
+ 'cs',
+ 'uk',
+ 'hu',
+ 'sv',
+ 'ro',
+ 'el',
+ 'da',
+ 'fi',
+ 'sk',
+ 'bg',
+ 'th',
+ 'hr',
+ 'nb',
+ 'sr-Latn',
+ 'lt',
+ 'sl',
+ 'ca',
+ 'et',
+ 'lv',
+ 'bs',
+ 'fa',
+ 'ar',
+ 'he',
+] as const
export type PublicLocale = (typeof publicLocales)[number]
+export type LocaleDirection = 'ltr' | 'rtl'
+
+export const rtlLocales = ['fa', 'ar', 'he'] satisfies readonly PublicLocale[]
export const isPublicLocale = (locale: string): locale is PublicLocale =>
publicLocales.includes(locale as PublicLocale)
+
+export const getLocaleDirection = (locale: string): LocaleDirection =>
+ rtlLocales.includes(locale as (typeof rtlLocales)[number]) ? 'rtl' : 'ltr'
+
+export const getDocumentLocale = (locale: string): PublicLocale =>
+ isPublicLocale(locale) ? locale : defaultLocale
diff --git a/ui/src/core/i18n/resources/ar.ts b/ui/src/core/i18n/resources/ar.ts
new file mode 100644
index 0000000..338d39a
--- /dev/null
+++ b/ui/src/core/i18n/resources/ar.ts
@@ -0,0 +1,675 @@
+export const ar = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'حاول مرة أخرى. إذا استمر ذلك، أعد فتح Clear.',
+ title: 'تعذر البدء',
+ },
+ loadingTitle: 'جار تحضير مساحة الدراسة الخاصة بك',
+ },
+ common: {
+ actions: {
+ back: 'رجوع',
+ cancel: 'إلغاء',
+ checkAgain: 'تحقق مرة أخرى',
+ close: 'إغلاق',
+ create: 'إنشاء',
+ delete: 'حذف',
+ dismissError: 'إخفاء الخطأ',
+ dismissStatus: 'إخفاء الحالة',
+ edit: 'تعديل',
+ itemActions: 'إجراءات {{title}}',
+ reset: 'إعادة ضبط',
+ review: 'مراجعة',
+ save: 'حفظ',
+ saveChanges: 'حفظ التغييرات',
+ tryAgain: 'حاول مرة أخرى',
+ },
+ labels: {
+ active: 'نشط',
+ clear: 'Clear',
+ custom: 'مخصص',
+ default: 'افتراضي',
+ loadingEditor: 'جار تحميل المحرر',
+ name: 'الاسم',
+ completedTask: 'مهمة مكتملة',
+ description: 'الوصف',
+ incompleteTask: 'مهمة غير مكتملة',
+ percentageInput: 'نسبة {{label}}',
+ visual: 'الشكل',
+ },
+ status: {
+ actionFailed: 'فشل الإجراء',
+ actionInProgress: 'الإجراء قيد التنفيذ',
+ },
+ sort: {
+ ascending: 'تصاعدي',
+ column: 'العمود',
+ descending: 'تنازلي',
+ direction: 'الاتجاه',
+ sort: 'فرز',
+ },
+ search: {
+ label: 'بحث',
+ },
+ visualPicker: {
+ allLucideIcons: 'كل أيقونات Lucide',
+ browseIconsFor: 'تصفح أو ابحث عن أيقونات لـ {{label}}.',
+ chooseIcon: 'اختر أيقونة',
+ iconPicker: 'منتقي أيقونة {{label}}',
+ iconSearch: 'بحث أيقونة {{label}}',
+ iconsCouldNotLoad: 'تعذر تحميل الأيقونات.',
+ loadingIcons: 'جار تحميل الأيقونات',
+ loadingMoreIcons: 'جار تحميل المزيد من الأيقونات',
+ moreIcons: 'المزيد من الأيقونات',
+ noIconsMatch: 'لا توجد أيقونات تطابق "{{query}}".',
+ searchIconsPlaceholder: 'ابحث عن أيقونات…',
+ selectedIcon: '{{label}} المحدد',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'إنشاء',
+ newDeck: 'مجموعة جديدة',
+ newFolder: 'مجلد جديد',
+ },
+ descriptions: {
+ defaultWorkspace: 'احتفظ بالمجموعات والمجلدات والملاحظات معا.',
+ emptyWorkspace: 'أنشئ مجموعة، ثم أضف ملاحظات لبناء قائمة المراجعة.',
+ emptyFolder: 'أنشئ مجموعة، ثم أضف ملاحظات لبناء قائمة مراجعة.',
+ searchPlaceholder: 'ابحث في المجلدات والمجموعات والملاحظات…',
+ },
+ empty: {
+ createFirstDeck: 'أنشئ أول مجموعة لك',
+ },
+ errors: {
+ couldNotDeleteDeck: 'تعذر حذف المجموعة',
+ couldNotDeleteFolder: 'تعذر حذف المجلد',
+ couldNotDeleteWorkspace: 'تعذر حذف مساحة العمل',
+ dashboardCouldNotOpen: 'تعذر فتح لوحة التحكم',
+ decksCouldNotLoad: 'تعذر تحميل المجموعات',
+ decksMayBeOutOfDate: 'قد تكون المجموعات قديمة',
+ foldersCouldNotLoad: 'تعذر تحميل المجلدات',
+ foldersMayBeOutOfDate: 'قد تكون المجلدات قديمة',
+ workspaceCouldNotLoad: 'تعذر تحميل مساحة العمل',
+ },
+ labels: {
+ dashboard: 'لوحة التحكم',
+ loadingDashboard: 'جار تحميل لوحة التحكم',
+ newItem: 'عنصر جديد',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'التاريخ غير متاح',
+ },
+ age: {
+ dayAgo_zero: 'منذ {{count}} يوم',
+ dayAgo_one: 'منذ {{count}} يوم',
+ dayAgo_two: 'منذ {{count}} يومين',
+ dayAgo_few: 'منذ {{count}} أيام',
+ dayAgo_many: 'منذ {{count}} يوما',
+ dayAgo_other: 'منذ {{count}} يوم',
+ hourAgo_zero: 'منذ {{count}} ساعة',
+ hourAgo_one: 'منذ {{count}} ساعة',
+ hourAgo_two: 'منذ {{count}} ساعتين',
+ hourAgo_few: 'منذ {{count}} ساعات',
+ hourAgo_many: 'منذ {{count}} ساعة',
+ hourAgo_other: 'منذ {{count}} ساعة',
+ justNow: 'الآن',
+ minuteAgo_zero: 'منذ {{count}} دقيقة',
+ minuteAgo_one: 'منذ {{count}} دقيقة',
+ minuteAgo_two: 'منذ {{count}} دقيقتين',
+ minuteAgo_few: 'منذ {{count}} دقائق',
+ minuteAgo_many: 'منذ {{count}} دقيقة',
+ minuteAgo_other: 'منذ {{count}} دقيقة',
+ unavailable: 'التاريخ غير متاح',
+ weekAgo_zero: 'منذ {{count}} أسبوع',
+ weekAgo_one: 'منذ {{count}} أسبوع',
+ weekAgo_two: 'منذ {{count}} أسبوعين',
+ weekAgo_few: 'منذ {{count}} أسابيع',
+ weekAgo_many: 'منذ {{count}} أسبوعا',
+ weekAgo_other: 'منذ {{count}} أسبوع',
+ },
+ labels: {
+ deleted: 'حذف {{value}}',
+ due: 'مستحق: {{value}}',
+ reviewed: 'تمت المراجعة: {{value}}',
+ updated: 'تم التحديث {{value}}',
+ updatedUppercase: 'تم التحديث {{value}}',
+ },
+ relative: {
+ dayAgo_zero: 'منذ {{count}} يوم',
+ dayAgo_one: 'منذ {{count}} يوم',
+ dayAgo_two: 'منذ {{count}} يومين',
+ dayAgo_few: 'منذ {{count}} أيام',
+ dayAgo_many: 'منذ {{count}} يوما',
+ dayAgo_other: 'منذ {{count}} يوم',
+ inAMoment: 'بعد لحظات',
+ inDay_zero: 'خلال {{count}} يوم',
+ inDay_one: 'خلال {{count}} يوم',
+ inDay_two: 'خلال {{count}} يومين',
+ inDay_few: 'خلال {{count}} أيام',
+ inDay_many: 'خلال {{count}} يوما',
+ inDay_other: 'خلال {{count}} يوم',
+ inMonth_zero: 'خلال {{count}} شهر',
+ inMonth_one: 'خلال {{count}} شهر',
+ inMonth_two: 'خلال {{count}} شهرين',
+ inMonth_few: 'خلال {{count}} أشهر',
+ inMonth_many: 'خلال {{count}} شهرا',
+ inMonth_other: 'خلال {{count}} شهر',
+ inWeek_zero: 'خلال {{count}} أسبوع',
+ inWeek_one: 'خلال {{count}} أسبوع',
+ inWeek_two: 'خلال {{count}} أسبوعين',
+ inWeek_few: 'خلال {{count}} أسابيع',
+ inWeek_many: 'خلال {{count}} أسبوعا',
+ inWeek_other: 'خلال {{count}} أسبوع',
+ justNow: 'الآن',
+ monthAgo_zero: 'منذ {{count}} شهر',
+ monthAgo_one: 'منذ {{count}} شهر',
+ monthAgo_two: 'منذ {{count}} شهرين',
+ monthAgo_few: 'منذ {{count}} أشهر',
+ monthAgo_many: 'منذ {{count}} شهرا',
+ monthAgo_other: 'منذ {{count}} شهر',
+ secondsAgoShort: 'قبل {{count}}ث',
+ minutesAgoShort: 'قبل {{count}}د',
+ hoursAgoShort: 'قبل {{count}}س',
+ today: 'اليوم',
+ tomorrow: 'غدا',
+ weekAgo_zero: 'منذ {{count}} أسبوع',
+ weekAgo_one: 'منذ {{count}} أسبوع',
+ weekAgo_two: 'منذ {{count}} أسبوعين',
+ weekAgo_few: 'منذ {{count}} أسابيع',
+ weekAgo_many: 'منذ {{count}} أسبوعا',
+ weekAgo_other: 'منذ {{count}} أسبوع',
+ yesterday: 'أمس',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'إجراءات {{title}}',
+ createDeck: 'إنشاء مجموعة',
+ createNote: 'إنشاء ملاحظة',
+ deleteDeck: 'حذف المجموعة',
+ editDeck: 'تعديل المجموعة',
+ newNote: 'ملاحظة جديدة',
+ openDeck: 'فتح مجموعة {{title}}',
+ saveDeck: 'تعذر حفظ المجموعة',
+ studyNow: 'ادرس الآن',
+ },
+ descriptions: {
+ emptyDeck: 'أضف ملاحظة حتى تحتوي هذه المجموعة على مادة للمراجعة.',
+ editorDefault: 'مجموعة دراسة مركزة.',
+ editorVisual: 'اختر رمزا لغلاف هذه المجموعة.',
+ notesSearchPlaceholder: 'ابحث في الملاحظات…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'سيتم نقل "{{title}}" إلى المهملات. يمكنك استعادتها لاحقا.',
+ deleteDeckFallbackDescription: 'سيتم نقل هذه المجموعة إلى المهملات. يمكنك استعادتها لاحقا.',
+ deleteDeckFallbackTitle: 'حذف المجموعة؟',
+ deleteDeckTitle: 'حذف "{{title}}"؟',
+ deleteNoteDescription: 'سيتم نقل "{{title}}" إلى المهملات. يمكنك استعادتها لاحقا.',
+ deleteNoteFallbackTitle: 'حذف الملاحظة؟',
+ deleteNoteTitle: 'حذف "{{title}}"؟',
+ },
+ empty: {
+ noMatchingNotes: 'لا توجد ملاحظات مطابقة',
+ noMatchingNotesDescription: 'لم تطابق أي ملاحظات "{{query}}".',
+ thisDeckIsEmpty: 'هذه المجموعة فارغة',
+ },
+ errors: {
+ couldNotCreateDeck: 'تعذر إنشاء المجموعة',
+ couldNotDeleteDeck: 'تعذر حذف المجموعة',
+ couldNotDeleteNote: 'تعذر حذف الملاحظة',
+ couldNotLoadFolderPath: 'تعذر تحميل مسار المجلد',
+ couldNotSaveDeck: 'تعذر حفظ المجموعة',
+ deckCouldNotLoad: 'تعذر تحميل المجموعة',
+ notesCouldNotLoad: 'تعذر تحميل الملاحظات',
+ notesMayBeOutOfDate: 'قد تكون الملاحظات قديمة',
+ },
+ fields: {
+ descriptionLabel: 'وصف المجموعة',
+ descriptionPlaceholder: 'ما الذي ستساعدك هذه المجموعة على مراجعته؟',
+ namePlaceholder: 'اسم المجموعة',
+ untitledDeck: 'مجموعة بلا عنوان',
+ untitledDeckLower: 'مجموعة بلا عنوان',
+ },
+ labels: {
+ createDeckTitle: 'إنشاء مجموعة',
+ deck: 'مجموعة',
+ deckNotesSearch: 'بحث ملاحظات المجموعة',
+ deckOverview: 'نظرة عامة على المجموعة',
+ decks: 'المجموعات',
+ due: 'مستحق',
+ dueToday: 'مستحق اليوم',
+ loadingDeck: 'جار تحميل المجموعة',
+ mastery: 'الإتقان',
+ notes: 'ملاحظات',
+ },
+ sort: {
+ ariaLabel: 'فرز المجموعات',
+ dueToday: 'مستحق اليوم',
+ title: 'العنوان',
+ updated: 'تم التحديث',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'تغيرت البيانات. حدّث وحاول مرة أخرى.',
+ forbidden: 'ليست لديك صلاحية لتنفيذ ذلك.',
+ notFound: 'تعذر العثور على هذا العنصر.',
+ offline: 'لا يمكن الوصول إلى الخدمة.',
+ timeout: 'استغرق ذلك وقتا طويلا. حاول مرة أخرى.',
+ unauthorized: 'سجل الدخول للمتابعة.',
+ unavailable: 'الخدمة غير متاحة مؤقتا.',
+ },
+ fallback: {
+ unexpected: 'خطأ غير متوقع',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'إنشاء مجلد',
+ deleteFolder: 'حذف المجلد',
+ editFolder: 'تعديل المجلد',
+ },
+ descriptions: {
+ editorDefault: 'مجلد للمجموعات ذات الصلة.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'سيتم نقل "{{name}}" إلى المهملات. يمكنك استعادته لاحقا.',
+ deleteFolderFallbackDescription: 'سيتم نقل هذا المجلد إلى المهملات. يمكنك استعادته لاحقا.',
+ deleteFolderFallbackTitle: 'حذف المجلد؟',
+ deleteFolderTitle: 'حذف "{{name}}"؟',
+ },
+ empty: {
+ noMatchesInFolder: 'لا توجد نتائج في هذا المجلد',
+ noMatchesInFolderDescription: 'لم تطابق أي مجلدات أو مجموعات أو ملاحظات "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'تعذر إنشاء المجلد',
+ couldNotDeleteFolder: 'تعذر حذف المجلد',
+ couldNotLoadFolderPath: 'تعذر تحميل مسار المجلد',
+ couldNotSaveFolder: 'تعذر حفظ المجلد',
+ folderCouldNotLoad: 'تعذر تحميل المجلد',
+ },
+ fields: {
+ descriptionLabel: 'وصف المجلد',
+ descriptionPlaceholder: 'ما الذي ينتمي إلى هذا المجلد؟',
+ namePlaceholder: 'اسم المجلد',
+ untitledFolder: 'مجلد بلا عنوان',
+ },
+ labels: {
+ createFolderTitle: 'إنشاء مجلد',
+ folder: 'مجلد',
+ folders: 'المجلدات',
+ loadingFolder: 'جار تحميل المجلد',
+ name: 'الاسم',
+ updated: 'تم التحديث',
+ },
+ sort: {
+ ariaLabel: 'فرز المجلدات',
+ name: 'الاسم',
+ updated: 'تم التحديث',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'إذا اختلفت البيانات المحلية والمزامنة، فسيظهر العنصر هنا.',
+ heading: 'حالة المزامنة',
+ title: 'التعارضات',
+ noConflicts: 'لم يتم العثور على تعارضات',
+ },
+ labels: {
+ menu: 'القائمة',
+ },
+ sections: {
+ settings: {
+ description: 'خصص بيئتك وتفضيلاتك',
+ title: 'الإعدادات',
+ },
+ trash: {
+ description: 'استعد العناصر المحذوفة أو احذفها نهائيا',
+ title: 'المهملات',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'إغلاق المحرر',
+ openActions: 'فتح الإجراءات',
+ openWorkspaces: 'فتح مساحات العمل',
+ },
+ items: {
+ home: 'الرئيسية',
+ menu: 'القائمة',
+ primary: 'أساسي',
+ settings: 'الإعدادات',
+ spaces: 'المساحات',
+ trash: 'المهملات',
+ workspaces: 'مساحات العمل',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'إضافة إخفاء',
+ deleteNote: 'حذف الملاحظة',
+ editNote: 'تعديل الملاحظة',
+ hideDerivedCardsNote: 'إخفاء ملاحظة البطاقات المشتقة',
+ openNote: 'فتح {{title}}',
+ saveNote: 'حفظ الملاحظة',
+ showDerivedCardsNote: 'إظهار ملاحظة البطاقات المشتقة',
+ },
+ descriptions: {
+ clozeFormat: 'يصبح كل جزء مخفي بطاقة مراجعة عند الحفظ.',
+ clozeFormatPrefix: 'غلّف النص المخفي بـ',
+ derivedCardsHelper: 'الملاحظات هي مصدر الحقيقة للبطاقات المشتقة.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'سيتم نقل "{{title}}" إلى المهملات. يمكنك استعادتها لاحقا.',
+ deleteNoteFallbackDescription: 'سيتم نقل هذه الملاحظة إلى المهملات. يمكنك استعادتها لاحقا.',
+ deleteNoteFallbackTitle: 'حذف الملاحظة؟',
+ deleteNoteTitle: 'حذف "{{title}}"؟',
+ },
+ errors: {
+ couldNotCreateNote: 'تعذر إنشاء الملاحظة',
+ couldNotDeleteNote: 'تعذر حذف الملاحظة',
+ couldNotSaveNote: 'تعذر حفظ الملاحظة',
+ noteCouldNotLoad: 'تعذر تحميل الملاحظة',
+ },
+ fields: {
+ back: 'الوجه الخلفي',
+ backPlaceholder: 'أدخل الوجه الخلفي',
+ bodyPlaceholder: 'اكتب نص الملاحظة مع الإخفاءات…',
+ front: 'الوجه الأمامي',
+ frontPlaceholder: 'أدخل الوجه الأمامي',
+ noteBody: 'نص الملاحظة',
+ title: 'العنوان',
+ titlePlaceholder: 'أضف عنوان ملاحظة',
+ untitledCloze: 'إخفاء بلا عنوان',
+ untitledNote: 'ملاحظة بلا عنوان',
+ },
+ labels: {
+ backUppercase: 'الوجه الخلفي',
+ basic: 'أساسي',
+ basicLower: 'أساسي',
+ basicUppercase: 'أساسي',
+ cloze: 'إخفاء',
+ clozeLower: 'إخفاء',
+ clozeFormat: 'تنسيق الإخفاء',
+ clozeUppercase: 'إخفاء',
+ deck: 'مجموعة',
+ derivedCards: 'البطاقات المشتقة',
+ due: 'مستحق',
+ frontUppercase: 'الوجه الأمامي',
+ inProgress: 'قيد التنفيذ',
+ inProgressUppercase: 'قيد التنفيذ',
+ loadingNote: 'جار تحميل الملاحظة',
+ loadingNoteEditor: 'جار تحميل محرر الملاحظات',
+ markdownFormatting: 'تنسيق Markdown',
+ mastered: 'تم إتقانه',
+ masteredUppercase: 'تم إتقانه',
+ newNote: 'ملاحظة جديدة',
+ noteBody: 'نص الملاحظة',
+ noteContent: 'محتوى الملاحظة',
+ noteDetails: 'تفاصيل الملاحظة',
+ noteMetadata: 'بيانات الملاحظة',
+ noteType: 'نوع الملاحظة',
+ notes: 'ملاحظات',
+ reviewed: 'تمت المراجعة',
+ studyProgress: 'تقدم الدراسة',
+ studyProgressUppercase: 'تقدم الدراسة',
+ titleUppercase: 'العنوان',
+ updated: 'تم التحديث',
+ },
+ sort: {
+ ariaLabel: 'فرز الملاحظات',
+ title: 'العنوان',
+ updated: 'تم التحديث',
+ },
+ toolbar: {
+ bold: 'غامق',
+ italic: 'مائل',
+ link: 'رابط',
+ list: 'قائمة',
+ },
+ },
+ review: {
+ actions: {
+ again: 'مرة أخرى',
+ backToDeck: 'العودة إلى المجموعة',
+ continueReview: 'متابعة المراجعة',
+ easy: 'سهل',
+ good: 'جيد',
+ hard: 'صعب',
+ newNote: 'ملاحظة جديدة',
+ showAnswer: 'إظهار الإجابة',
+ },
+ errors: {
+ couldNotGradeCard: 'تعذر تقييم البطاقة',
+ reviewCouldNotLoad: 'تعذر تحميل المراجعة',
+ reviewCouldNotStart: 'تعذر بدء المراجعة',
+ summaryCouldNotLoad: 'تعذر تحميل ملخص المراجعة',
+ summaryNotAvailable: 'ملخص المراجعة غير متاح',
+ summaryNotComplete: 'هذه المراجعة لم تكتمل بعد.',
+ },
+ labels: {
+ cardsReviewed: 'البطاقات التي تمت مراجعتها',
+ deck: 'مجموعة',
+ duration: 'المدة',
+ loadingReview: 'جار تحميل المراجعة',
+ loadingSummary: 'جار تحميل الملخص',
+ progress: 'تقدم المراجعة',
+ review: 'مراجعة',
+ reviewComplete: 'اكتملت المراجعة',
+ reviewed_zero: 'تمت مراجعة {{count}}',
+ reviewed_one: 'تمت مراجعة {{count}}',
+ reviewed_two: 'تمت مراجعة {{count}}',
+ reviewed_few: 'تمت مراجعة {{count}}',
+ reviewed_many: 'تمت مراجعة {{count}}',
+ reviewed_other: 'تمت مراجعة {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}}س {{minutes}}د',
+ durationMinutes: '{{minutes}}د',
+ durationSeconds: '{{seconds}}ث',
+ saved: 'تم حفظ تقدمك في هذه المجموعة.',
+ },
+ unavailable: {
+ description: 'أضف ملاحظة حتى تتمكن هذه المجموعة من دخول قائمة المراجعة.',
+ title: 'لا توجد بطاقات للمراجعة',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'مسح البحث',
+ },
+ empty: {
+ noMatchesInWorkspace: 'لا توجد نتائج في مساحة العمل هذه',
+ noMatchesInWorkspaceDescription: 'لم تطابق أي مجلدات أو مجموعات أو ملاحظات "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'تعذر إكمال البحث',
+ },
+ labels: {
+ results: 'نتائج البحث',
+ resultsFor: 'نتائج "{{query}}"',
+ searchingContent: 'جار البحث في المحتوى',
+ },
+ resultGroups: {
+ deck: 'المجموعات',
+ folder: 'المجلدات',
+ note: 'الملاحظات',
+ },
+ resultKinds: {
+ deck: 'مجموعة',
+ folder: 'مجلد',
+ note: 'ملاحظة',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'إعادة ضبط كل الإعدادات',
+ resetSettings: 'إعادة ضبط الإعدادات',
+ resetToDefaults: 'إعادة الضبط إلى الافتراضي',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'ألصق JSON صالحا يحتوي على 21 قيمة رقمية.',
+ fsrsErrorInvalidParams_zero: 'أدخل مصفوفة JSON تحتوي على {{count}} رقم محدود بالضبط.',
+ fsrsErrorInvalidParams_one: 'أدخل مصفوفة JSON تحتوي على {{count}} رقم محدود بالضبط.',
+ fsrsErrorInvalidParams_two: 'أدخل مصفوفة JSON تحتوي على {{count}} رقمين محدودين بالضبط.',
+ fsrsErrorInvalidParams_few: 'أدخل مصفوفة JSON تحتوي على {{count}} أرقام محدودة بالضبط.',
+ fsrsErrorInvalidParams_many: 'أدخل مصفوفة JSON تحتوي على {{count}} رقما محدودا بالضبط.',
+ fsrsErrorInvalidParams_other: 'أدخل مصفوفة JSON تحتوي على {{count}} رقم محدود بالضبط.',
+ fsrsHelper: 'هذا تجاوز متقدم. يجب أن تبقى القيم بالترتيب.',
+ fsrsJsonLabel: 'JSON لمعاملات FSRS',
+ fsrsTitle: 'تعديل معاملات FSRS',
+ fsrsDescription: 'ألصق مصفوفة JSON تحتوي على 21 رقما لتجاوز أوزان المجدول.',
+ resetDescription: 'سيؤدي ذلك إلى استعادة المنطقة الزمنية وحدود الدراسة وإعدادات FSRS.',
+ resetDescriptionWithLanguage: 'سيؤدي ذلك إلى استعادة اللغة والمنطقة الزمنية وحدود الدراسة وإعدادات FSRS.',
+ resetTitle: 'إعادة ضبط كل الإعدادات؟',
+ timezoneDescription: 'ابحث عن مدينة أو معرف منطقة زمنية.',
+ timezoneSearchLabel: 'بحث المناطق الزمنية',
+ timezoneSearchPlaceholder: 'ابحث عن المناطق الزمنية…',
+ timezoneTitle: 'اختيار المنطقة الزمنية',
+ },
+ errors: {
+ couldNotResetSettings: 'تعذر إعادة ضبط الإعدادات',
+ couldNotSaveSettings: 'تعذر حفظ الإعدادات',
+ settingsCouldNotLoad: 'تعذر تحميل الإعدادات',
+ settingsUnavailable: 'الإعدادات غير متاحة.',
+ },
+ labels: {
+ appearance: 'المظهر',
+ automatic: 'تلقائي',
+ fsrsParameters: 'معاملات FSRS',
+ general: 'عام',
+ language: 'اللغة',
+ loadingSettings: 'جار تحميل الإعدادات',
+ masteryHorizon: 'أفق الإتقان',
+ newCardOrder: 'ترتيب البطاقات الجديدة',
+ newCardsPerDay: 'البطاقات الجديدة يوميا',
+ reviewCardsPerDay: 'بطاقات المراجعة يوميا',
+ savingSettings: 'جار حفظ الإعدادات',
+ schedule: 'الجدول',
+ searchNoTimezones: 'لا توجد مناطق زمنية مطابقة.',
+ settings: 'الإعدادات',
+ settingsReset: 'إعادة ضبط الإعدادات',
+ study: 'الدراسة',
+ targetRecallProbability: 'احتمال التذكر المستهدف',
+ theme: 'السمة',
+ timezone: 'المنطقة الزمنية',
+ },
+ options: {
+ languageEnUs: 'الإنجليزية (الولايات المتحدة)',
+ newCardsAfterReviews: 'بعد المراجعات',
+ newCardsBeforeReviews: 'قبل المراجعات',
+ newCardsMixed: 'مختلط',
+ themeDark: 'داكن',
+ themeLight: 'فاتح',
+ themeSystem: 'النظام',
+ timezoneSystem: 'استخدام منطقة النظام الزمنية',
+ },
+ rows: {
+ fsrsDescription: 'أوزان النموذج المتقدمة',
+ languageDescription: 'لغة الواجهة',
+ masteryHorizonDescription: 'عدد الأيام التي يجب أن تبقى فيها البطاقة قابلة للتذكر عند الاحتمال المستهدف أو أعلى حتى تعد متقنة',
+ newCardOrderDescription: 'ترتيب البطاقات الجديدة بالنسبة إلى المراجعات',
+ newCardsPerDayDescription: 'الحد الأقصى للبطاقات الجديدة يوميا',
+ reviewCardsPerDayDescription: 'الحد الأقصى لبطاقات المراجعة يوميا',
+ targetRecallProbabilityDescription: 'الحد الأدنى لاحتمال التذكر في المراجعة المجدولة التالية',
+ timezoneDescription: 'استخدم المنطقة الزمنية التلقائية أو اختر مدينة.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'حذف نهائي',
+ empty: 'إفراغ',
+ emptyTrash: 'إفراغ المهملات',
+ restore: 'استعادة',
+ restoringItem: 'جار استعادة {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'سيؤدي ذلك إلى حذف "{{title}}" نهائيا. لا يمكن التراجع عن ذلك.',
+ deleteItemFallbackDescription: 'سيؤدي ذلك إلى حذف هذا العنصر نهائيا. لا يمكن التراجع عن ذلك.',
+ deleteItemFallbackTitle: 'حذف العنصر؟',
+ deleteItemTitle: 'حذف "{{title}}"؟',
+ emptyTrashDescription: 'سيؤدي ذلك إلى حذف كل شيء في المهملات نهائيا. لا يمكن التراجع عن ذلك.',
+ emptyTrashTitle: 'إفراغ المهملات؟',
+ },
+ empty: {
+ description: 'ستظهر العناصر التي تحذفها هنا قبل الإزالة النهائية.',
+ title: 'المهملات فارغة',
+ },
+ errors: {
+ couldNotDeleteItem: 'تعذر حذف العنصر',
+ couldNotEmptyTrash: 'تعذر إفراغ المهملات',
+ couldNotRestoreItem: 'تعذر استعادة العنصر',
+ trashCouldNotLoad: 'تعذر تحميل المهملات',
+ trashMayBeOutOfDate: 'قد تكون المهملات قديمة',
+ },
+ labels: {
+ deletedAge: 'حذف {{value}}',
+ itemCount_zero: '{{count}} عنصر',
+ itemCount_one: '{{count}} عنصر',
+ itemCount_two: '{{count}} عنصران',
+ itemCount_few: '{{count}} عناصر',
+ itemCount_many: '{{count}} عنصرا',
+ itemCount_other: '{{count}} عنصر',
+ lastEmptied: 'آخر إفراغ {{value}}',
+ loadingTrash: 'جار تحميل المهملات',
+ originalLocation: 'الموقع الأصلي: {{location}}',
+ title: 'المهملات',
+ trashActions: 'إجراءات مهملات {{title}}',
+ },
+ kinds: {
+ deck: 'مجموعة',
+ folder: 'مجلد',
+ note: 'ملاحظة',
+ workspace: 'مساحة عمل',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'إنشاء مساحة عمل',
+ deleteWorkspace: 'حذف مساحة العمل',
+ editWorkspace: 'تعديل مساحة العمل',
+ newWorkspace: 'مساحة عمل جديدة',
+ openWorkspace: 'فتح {{title}}',
+ openingWorkspace: 'جار فتح {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'سياق دراسة.',
+ editorVisual: 'اختر مرجعا بصريا لمساحة العمل هذه.',
+ emptyList: 'افصل المجموعات والملاحظات وقوائم المراجعة حسب سياق الدراسة.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'سيتم نقل "{{title}}" إلى المهملات. يمكنك استعادتها لاحقا.',
+ deleteWorkspaceFallbackDescription: 'سيتم نقل مساحة العمل هذه إلى المهملات. يمكنك استعادتها لاحقا.',
+ deleteWorkspaceFallbackTitle: 'حذف مساحة العمل؟',
+ deleteWorkspaceTitle: 'حذف "{{title}}"؟',
+ },
+ empty: {
+ startWithWorkspace: 'ابدأ بمساحة عمل',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'تعذر إنشاء مساحة العمل',
+ couldNotDeleteWorkspace: 'تعذر حذف مساحة العمل',
+ couldNotOpenWorkspace: 'تعذر فتح مساحة العمل',
+ couldNotSaveWorkspace: 'تعذر حفظ مساحة العمل',
+ workspaceCouldNotLoad: 'تعذر تحميل مساحة العمل',
+ workspacesCouldNotLoad: 'تعذر تحميل مساحات العمل',
+ },
+ fields: {
+ descriptionLabel: 'وصف مساحة العمل',
+ descriptionPlaceholder: 'ما الذي ينتمي إلى مساحة العمل هذه؟',
+ namePlaceholder: 'اسم مساحة العمل',
+ untitledWorkspace: 'مساحة عمل بلا عنوان',
+ },
+ labels: {
+ createWorkspaceTitle: 'إنشاء مساحة عمل',
+ loadingWorkspaces: 'جار تحميل مساحات العمل',
+ workspace: 'مساحة عمل',
+ workspaces: 'مساحات العمل',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/bg.ts b/ui/src/core/i18n/resources/bg.ts
new file mode 100644
index 0000000..3fc4855
--- /dev/null
+++ b/ui/src/core/i18n/resources/bg.ts
@@ -0,0 +1,623 @@
+export const bg = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Опитайте отново. Ако това продължи, отворете Clear отново.',
+ title: 'Не можа да се стартира',
+ },
+ loadingTitle: 'Подготвяме вашето пространство за учене',
+ },
+ common: {
+ actions: {
+ back: 'Назад',
+ cancel: 'Отказ',
+ checkAgain: 'Провери отново',
+ close: 'Затвори',
+ create: 'Създай',
+ delete: 'Изтрий',
+ dismissError: 'Скрий грешката',
+ dismissStatus: 'Скрий състоянието',
+ edit: 'Редактирай',
+ itemActions: 'Действия за {{title}}',
+ reset: 'Нулирай',
+ review: 'Преговор',
+ save: 'Запази',
+ saveChanges: 'Запази промените',
+ tryAgain: 'Опитай отново',
+ },
+ labels: {
+ active: 'Активно',
+ clear: 'Clear',
+ custom: 'Персонализирано',
+ default: 'По подразбиране',
+ loadingEditor: 'Зареждане на редактора',
+ name: 'Име',
+ completedTask: 'Завършена задача',
+ description: 'Описание',
+ incompleteTask: 'Незавършена задача',
+ percentageInput: 'Процент за {{label}}',
+ visual: 'Визуално',
+ },
+ status: {
+ actionFailed: 'Действието не бе успешно',
+ actionInProgress: 'Действието се изпълнява',
+ },
+ sort: {
+ ascending: 'Възх.',
+ column: 'Колона',
+ descending: 'Низх.',
+ direction: 'Посока',
+ sort: 'Сортиране',
+ },
+ search: {
+ label: 'Търсене',
+ },
+ visualPicker: {
+ allLucideIcons: 'Всички Lucide икони',
+ browseIconsFor: 'Прегледайте или потърсете икони за {{label}}.',
+ chooseIcon: 'Избери икона',
+ iconPicker: 'Избор на икона за {{label}}',
+ iconSearch: 'Търсене на икони за {{label}}',
+ iconsCouldNotLoad: 'Иконите не можаха да се заредят.',
+ loadingIcons: 'Зареждане на икони',
+ loadingMoreIcons: 'Зареждане на още икони',
+ moreIcons: 'Още икони',
+ noIconsMatch: 'Няма икони, съвпадащи с "{{query}}".',
+ searchIconsPlaceholder: 'Търсене на икони…',
+ selectedIcon: 'Избрано {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Създай',
+ newDeck: 'Нова колода',
+ newFolder: 'Нова папка',
+ },
+ descriptions: {
+ defaultWorkspace: 'Дръжте колодите, папките и бележките заедно.',
+ emptyWorkspace: 'Създайте колода, след това добавете бележки, за да изградите опашка за преговор.',
+ emptyFolder: 'Създайте колода, след това добавете бележки, за да изградите опашка за преговор.',
+ searchPlaceholder: 'Търсене на папки, колоди и бележки…',
+ },
+ empty: {
+ createFirstDeck: 'Създайте първата си колода',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Колодата не можа да се изтрие',
+ couldNotDeleteFolder: 'Папката не можа да се изтрие',
+ couldNotDeleteWorkspace: 'Работното пространство не можа да се изтрие',
+ dashboardCouldNotOpen: 'Таблото не можа да се отвори',
+ decksCouldNotLoad: 'Колодите не можаха да се заредят',
+ decksMayBeOutOfDate: 'Колодите може да са остарели',
+ foldersCouldNotLoad: 'Папките не можаха да се заредят',
+ foldersMayBeOutOfDate: 'Папките може да са остарели',
+ workspaceCouldNotLoad: 'Работното пространство не можа да се зареди',
+ },
+ labels: {
+ dashboard: 'Табло',
+ loadingDashboard: 'Зареждане на таблото',
+ newItem: 'Нов елемент',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Датата не е налична',
+ },
+ age: {
+ dayAgo_one: 'преди {{count}} ден',
+ dayAgo_other: 'преди {{count}} дни',
+ hourAgo_one: 'преди {{count}} час',
+ hourAgo_other: 'преди {{count}} часа',
+ justNow: 'току-що',
+ minuteAgo_one: 'преди {{count}} минута',
+ minuteAgo_other: 'преди {{count}} минути',
+ unavailable: 'датата не е налична',
+ weekAgo_one: 'преди {{count}} седмица',
+ weekAgo_other: 'преди {{count}} седмици',
+ },
+ labels: {
+ deleted: 'Изтрито {{value}}',
+ due: 'Срок: {{value}}',
+ reviewed: 'Преговорено: {{value}}',
+ updated: 'Обновено {{value}}',
+ updatedUppercase: 'ОБНОВЕНО {{value}}',
+ },
+ relative: {
+ dayAgo_one: 'преди {{count}} ден',
+ dayAgo_other: 'преди {{count}} дни',
+ inAMoment: 'След малко',
+ inDay_one: 'След {{count}} ден',
+ inDay_other: 'След {{count}} дни',
+ inMonth_one: 'След {{count}} месец',
+ inMonth_other: 'След {{count}} месеца',
+ inWeek_one: 'След {{count}} седмица',
+ inWeek_other: 'След {{count}} седмици',
+ justNow: 'Току-що',
+ monthAgo_one: 'преди {{count}} месец',
+ monthAgo_other: 'преди {{count}} месеца',
+ secondsAgoShort: 'преди {{count}} сек',
+ minutesAgoShort: 'преди {{count}} мин',
+ hoursAgoShort: 'преди {{count}} ч',
+ today: 'Днес',
+ tomorrow: 'Утре',
+ weekAgo_one: 'преди {{count}} седмица',
+ weekAgo_other: 'преди {{count}} седмици',
+ yesterday: 'Вчера',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Действия за {{title}}',
+ createDeck: 'Създай колода',
+ createNote: 'Създай бележка',
+ deleteDeck: 'Изтрий колода',
+ editDeck: 'Редактирай колода',
+ newNote: 'Нова бележка',
+ openDeck: 'Отвори колода {{title}}',
+ saveDeck: 'Колодата не можа да се запази',
+ studyNow: 'Учи сега',
+ },
+ descriptions: {
+ emptyDeck: 'Добавете бележка, за да има тази колода материал за преговор.',
+ editorDefault: 'Фокусирана колода за учене.',
+ editorVisual: 'Изберете символ за корицата на тази колода.',
+ notesSearchPlaceholder: 'Търсене на бележки…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Това премества "{{title}}" в Кошчето. Можете да го възстановите по-късно.',
+ deleteDeckFallbackDescription: 'Това премества тази колода в Кошчето. Можете да я възстановите по-късно.',
+ deleteDeckFallbackTitle: 'Да се изтрие ли колодата?',
+ deleteDeckTitle: 'Да се изтрие ли "{{title}}"?',
+ deleteNoteDescription: 'Това премества "{{title}}" в Кошчето. Можете да я възстановите по-късно.',
+ deleteNoteFallbackTitle: 'Да се изтрие ли бележката?',
+ deleteNoteTitle: 'Да се изтрие ли "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Няма съвпадащи бележки',
+ noMatchingNotesDescription: 'Няма бележки, съвпадащи с "{{query}}".',
+ thisDeckIsEmpty: 'Тази колода е празна',
+ },
+ errors: {
+ couldNotCreateDeck: 'Колодата не можа да се създаде',
+ couldNotDeleteDeck: 'Колодата не можа да се изтрие',
+ couldNotDeleteNote: 'Бележката не можа да се изтрие',
+ couldNotLoadFolderPath: 'Пътят до папката не можа да се зареди',
+ couldNotSaveDeck: 'Колодата не можа да се запази',
+ deckCouldNotLoad: 'Колодата не можа да се зареди',
+ notesCouldNotLoad: 'Бележките не можаха да се заредят',
+ notesMayBeOutOfDate: 'Бележките може да са остарели',
+ },
+ fields: {
+ descriptionLabel: 'Описание на колодата',
+ descriptionPlaceholder: 'Какво ще ви помогне да преговаряте тази колода?',
+ namePlaceholder: 'Име на колодата',
+ untitledDeck: 'Колода без заглавие',
+ untitledDeckLower: 'колода без заглавие',
+ },
+ labels: {
+ createDeckTitle: 'Създай колода',
+ deck: 'Колода',
+ deckNotesSearch: 'Търсене в бележките на колодата',
+ deckOverview: 'Преглед на колодата',
+ decks: 'Колоди',
+ due: 'Срок',
+ dueToday: 'Срок днес',
+ loadingDeck: 'Зареждане на колодата',
+ mastery: 'Усвояване',
+ notes: 'Бележки',
+ },
+ sort: {
+ ariaLabel: 'Сортиране на колоди',
+ dueToday: 'Срок днес',
+ title: 'Заглавие',
+ updated: 'Обновено',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Данните се промениха. Обновете и опитайте отново.',
+ forbidden: 'Нямате разрешение да направите това.',
+ notFound: 'Не успяхме да намерим този елемент.',
+ offline: 'Услугата е недостъпна.',
+ timeout: 'Това отне твърде дълго. Опитайте отново.',
+ unauthorized: 'Влезте, за да продължите.',
+ unavailable: 'Услугата временно не е налична.',
+ },
+ fallback: {
+ unexpected: 'Неочаквана грешка',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Създай папка',
+ deleteFolder: 'Изтрий папка',
+ editFolder: 'Редактирай папка',
+ },
+ descriptions: {
+ editorDefault: 'Папка за свързани колоди.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Това премества "{{name}}" в Кошчето. Можете да я възстановите по-късно.',
+ deleteFolderFallbackDescription: 'Това премества тази папка в Кошчето. Можете да я възстановите по-късно.',
+ deleteFolderFallbackTitle: 'Да се изтрие ли папката?',
+ deleteFolderTitle: 'Да се изтрие ли "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'Няма съвпадения в тази папка',
+ noMatchesInFolderDescription: 'Няма папки, колоди или бележки, съвпадащи с "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Папката не можа да се създаде',
+ couldNotDeleteFolder: 'Папката не можа да се изтрие',
+ couldNotLoadFolderPath: 'Пътят до папката не можа да се зареди',
+ couldNotSaveFolder: 'Папката не можа да се запази',
+ folderCouldNotLoad: 'Папката не можа да се зареди',
+ },
+ fields: {
+ descriptionLabel: 'Описание на папката',
+ descriptionPlaceholder: 'Какво принадлежи в тази папка?',
+ namePlaceholder: 'Име на папката',
+ untitledFolder: 'Папка без заглавие',
+ },
+ labels: {
+ createFolderTitle: 'Създай папка',
+ folder: 'Папка',
+ folders: 'Папки',
+ loadingFolder: 'Зареждане на папката',
+ name: 'Име',
+ updated: 'Обновено',
+ },
+ sort: {
+ ariaLabel: 'Сортиране на папки',
+ name: 'Име',
+ updated: 'Обновено',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Ако локалните и синхронизираните данни някога се разминават, елементът ще се появи тук.',
+ heading: 'Състояние на синхронизацията',
+ title: 'Конфликти',
+ noConflicts: 'Няма намерени конфликти',
+ },
+ labels: {
+ menu: 'Меню',
+ },
+ sections: {
+ settings: {
+ description: 'Персонализирайте средата и предпочитанията си',
+ title: 'Настройки',
+ },
+ trash: {
+ description: 'Възстановяване или окончателно изтриване на премахнати елементи',
+ title: 'Кошче',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Затвори редактора',
+ openActions: 'Отвори действията',
+ openWorkspaces: 'Отвори работните пространства',
+ },
+ items: {
+ home: 'Начало',
+ menu: 'Меню',
+ primary: 'Основно',
+ settings: 'Настройки',
+ spaces: 'Пространства',
+ trash: 'Кошче',
+ workspaces: 'Работни пространства',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Добави cloze',
+ deleteNote: 'Изтрий бележка',
+ editNote: 'Редактирай бележка',
+ hideDerivedCardsNote: 'Скрий бележката за производни карти',
+ openNote: 'Отвори {{title}}',
+ saveNote: 'Запази бележка',
+ showDerivedCardsNote: 'Покажи бележката за производни карти',
+ },
+ descriptions: {
+ clozeFormat: 'Всяка скрита част става карта за преговор, когато запазите.',
+ clozeFormatPrefix: 'Оградете скрития текст с',
+ derivedCardsHelper: 'Бележките са източникът на истина за производните карти.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Това премества "{{title}}" в Кошчето. Можете да я възстановите по-късно.',
+ deleteNoteFallbackDescription: 'Това премества тази бележка в Кошчето. Можете да я възстановите по-късно.',
+ deleteNoteFallbackTitle: 'Да се изтрие ли бележката?',
+ deleteNoteTitle: 'Да се изтрие ли "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Бележката не можа да се създаде',
+ couldNotDeleteNote: 'Бележката не можа да се изтрие',
+ couldNotSaveNote: 'Бележката не можа да се запази',
+ noteCouldNotLoad: 'Бележката не можа да се зареди',
+ },
+ fields: {
+ back: 'Гръб',
+ backPlaceholder: 'Въведете гръб',
+ bodyPlaceholder: 'Напишете съдържанието на бележката с cloze изтривания…',
+ front: 'Лице',
+ frontPlaceholder: 'Въведете лице',
+ noteBody: 'Съдържание на бележката',
+ title: 'Заглавие',
+ titlePlaceholder: 'Добавете заглавие на бележката',
+ untitledCloze: 'Cloze без заглавие',
+ untitledNote: 'Бележка без заглавие',
+ },
+ labels: {
+ backUppercase: 'ГРЪБ',
+ basic: 'Основна',
+ basicLower: 'основна',
+ basicUppercase: 'ОСНОВНА',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Cloze формат',
+ clozeUppercase: 'CLOZE',
+ deck: 'Колода',
+ derivedCards: 'ПРОИЗВОДНИ КАРТИ',
+ due: 'Срок',
+ frontUppercase: 'ЛИЦЕ',
+ inProgress: 'В ход',
+ inProgressUppercase: 'В ХОД',
+ loadingNote: 'Зареждане на бележката',
+ loadingNoteEditor: 'Зареждане на редактора на бележки',
+ markdownFormatting: 'Markdown форматиране',
+ mastered: 'Усвоено',
+ masteredUppercase: 'УСВОЕНО',
+ newNote: 'Нова бележка',
+ noteBody: 'СЪДЪРЖАНИЕ НА БЕЛЕЖКАТА',
+ noteContent: 'Съдържание на бележката',
+ noteDetails: 'Детайли за бележката',
+ noteMetadata: 'Метаданни на бележката',
+ noteType: 'Тип бележка',
+ notes: 'Бележки',
+ reviewed: 'Преговорено',
+ studyProgress: 'Напредък в ученето',
+ studyProgressUppercase: 'НАПРЕДЪК В УЧЕНЕТО',
+ titleUppercase: 'ЗАГЛАВИЕ',
+ updated: 'Обновено',
+ },
+ sort: {
+ ariaLabel: 'Сортиране на бележки',
+ title: 'Заглавие',
+ updated: 'Обновено',
+ },
+ toolbar: {
+ bold: 'Удебелен',
+ italic: 'Курсив',
+ link: 'Връзка',
+ list: 'Списък',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Отново',
+ backToDeck: 'Назад към колодата',
+ continueReview: 'Продължи преговора',
+ easy: 'Лесно',
+ good: 'Добре',
+ hard: 'Трудно',
+ newNote: 'Нова бележка',
+ showAnswer: 'Покажи отговора',
+ },
+ errors: {
+ couldNotGradeCard: 'Картата не можа да се оцени',
+ reviewCouldNotLoad: 'Преговорът не можа да се зареди',
+ reviewCouldNotStart: 'Преговорът не можа да започне',
+ summaryCouldNotLoad: 'Обобщението на преговора не можа да се зареди',
+ summaryNotAvailable: 'Обобщението на преговора не е налично',
+ summaryNotComplete: 'Този преговор още не е завършен.',
+ },
+ labels: {
+ cardsReviewed: 'Преговорени карти',
+ deck: 'Колода',
+ duration: 'Продължителност',
+ loadingReview: 'Зареждане на преговора',
+ loadingSummary: 'Зареждане на обобщението',
+ progress: 'Напредък на преговора',
+ review: 'Преговор',
+ reviewComplete: 'Преговорът е завършен',
+ reviewed_one: 'Преговорена {{count}}',
+ reviewed_other: 'Преговорени {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} ч {{minutes}} мин',
+ durationMinutes: '{{minutes}} мин',
+ durationSeconds: '{{seconds}} сек',
+ saved: 'Напредъкът ви беше запазен в тази колода.',
+ },
+ unavailable: {
+ description: 'Добавете бележка, за да може тази колода да влезе в опашката за преговор.',
+ title: 'Няма карти за преговор',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Изчисти търсенето',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Няма съвпадения в това работно пространство',
+ noMatchesInWorkspaceDescription: 'Няма папки, колоди или бележки, съвпадащи с "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Търсенето не можа да се завърши',
+ },
+ labels: {
+ results: 'Резултати от търсенето',
+ resultsFor: 'Резултати за "{{query}}"',
+ searchingContent: 'Търсене в съдържанието',
+ },
+ resultGroups: {
+ deck: 'Колоди',
+ folder: 'Папки',
+ note: 'Бележки',
+ },
+ resultKinds: {
+ deck: 'колода',
+ folder: 'папка',
+ note: 'бележка',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Нулирай всички настройки',
+ resetSettings: 'Нулирай настройките',
+ resetToDefaults: 'Върни по подразбиране',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Поставете валиден JSON с 21 числови стойности.',
+ fsrsErrorInvalidParams_one: 'Въведете JSON масив с точно {{count}} крайно число.',
+ fsrsErrorInvalidParams_other: 'Въведете JSON масив с точно {{count}} крайни числа.',
+ fsrsHelper: 'Това е експертна промяна. Стойностите трябва да останат в ред.',
+ fsrsJsonLabel: 'JSON на FSRS параметрите',
+ fsrsTitle: 'Редактиране на FSRS параметри',
+ fsrsDescription: 'Поставете JSON масив с 21 числа, за да замените теглата на планировчика.',
+ resetDescription: 'Това възстановява часовата зона, учебните лимити и FSRS настройките.',
+ resetDescriptionWithLanguage: 'Това възстановява езика, часовата зона, учебните лимити и FSRS настройките.',
+ resetTitle: 'Да се нулират ли всички настройки?',
+ timezoneDescription: 'Потърсете град или идентификатор на часова зона.',
+ timezoneSearchLabel: 'Търсене на часови зони',
+ timezoneSearchPlaceholder: 'Търсене на часови зони…',
+ timezoneTitle: 'Избор на часова зона',
+ },
+ errors: {
+ couldNotResetSettings: 'Настройките не можаха да се нулират',
+ couldNotSaveSettings: 'Настройките не можаха да се запазят',
+ settingsCouldNotLoad: 'Настройките не можаха да се заредят',
+ settingsUnavailable: 'Настройките не са налични.',
+ },
+ labels: {
+ appearance: 'Външен вид',
+ automatic: 'Автоматично',
+ fsrsParameters: 'FSRS параметри',
+ general: 'Общи',
+ language: 'Език',
+ loadingSettings: 'Зареждане на настройките',
+ masteryHorizon: 'Хоризонт на усвояване',
+ newCardOrder: 'Ред на новите карти',
+ newCardsPerDay: 'Нови карти на ден',
+ reviewCardsPerDay: 'Карти за преговор на ден',
+ savingSettings: 'Запазване на настройките',
+ schedule: 'График',
+ searchNoTimezones: 'Няма съвпадащи часови зони.',
+ settings: 'Настройки',
+ settingsReset: 'Настройките са нулирани',
+ study: 'Учене',
+ targetRecallProbability: 'Целева вероятност за припомняне',
+ theme: 'Тема',
+ timezone: 'Часова зона',
+ },
+ options: {
+ languageEnUs: 'Английски (САЩ)',
+ newCardsAfterReviews: 'След преговорите',
+ newCardsBeforeReviews: 'Преди преговорите',
+ newCardsMixed: 'Смесено',
+ themeDark: 'Тъмна',
+ themeLight: 'Светла',
+ themeSystem: 'Системна',
+ timezoneSystem: 'Използвай системната часова зона',
+ },
+ rows: {
+ fsrsDescription: 'Тегла на експертния модел',
+ languageDescription: 'Език на интерфейса',
+ masteryHorizonDescription: 'Брой дни, през които картата трябва да остане припомняема на или над целевата вероятност, за да се счита за усвоена',
+ newCardOrderDescription: 'Ред на новите карти спрямо преговорите',
+ newCardsPerDayDescription: 'Максимален брой нови карти на ден',
+ reviewCardsPerDayDescription: 'Максимален брой карти за преговор на ден',
+ targetRecallProbabilityDescription: 'Минимална вероятност за припомняне при следващия планиран преговор',
+ timezoneDescription: 'Използвайте автоматична часова зона или изберете град.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Изтрий окончателно',
+ empty: 'Изпразни',
+ emptyTrash: 'Изпразни кошчето',
+ restore: 'Възстанови',
+ restoringItem: 'Възстановяване на {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Това изтрива "{{title}}" окончателно. Не може да бъде отменено.',
+ deleteItemFallbackDescription: 'Това изтрива този елемент окончателно. Не може да бъде отменено.',
+ deleteItemFallbackTitle: 'Да се изтрие ли елементът?',
+ deleteItemTitle: 'Да се изтрие ли "{{title}}"?',
+ emptyTrashDescription: 'Това изтрива окончателно всичко в Кошчето. Не може да бъде отменено.',
+ emptyTrashTitle: 'Да се изпразни ли кошчето?',
+ },
+ empty: {
+ description: 'Елементите, които изтривате, ще се появяват тук преди окончателно премахване.',
+ title: 'Кошчето е празно',
+ },
+ errors: {
+ couldNotDeleteItem: 'Елементът не можа да се изтрие',
+ couldNotEmptyTrash: 'Кошчето не можа да се изпразни',
+ couldNotRestoreItem: 'Елементът не можа да се възстанови',
+ trashCouldNotLoad: 'Кошчето не можа да се зареди',
+ trashMayBeOutOfDate: 'Кошчето може да е остаряло',
+ },
+ labels: {
+ deletedAge: 'Изтрито {{value}}',
+ itemCount_one: '{{count}} елемент',
+ itemCount_other: '{{count}} елемента',
+ lastEmptied: 'Последно изпразнено {{value}}',
+ loadingTrash: 'Зареждане на кошчето',
+ originalLocation: 'Оригинално местоположение: {{location}}',
+ title: 'Кошче',
+ trashActions: 'Действия в кошчето за {{title}}',
+ },
+ kinds: {
+ deck: 'Колода',
+ folder: 'Папка',
+ note: 'Бележка',
+ workspace: 'Работно пространство',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Създай работно пространство',
+ deleteWorkspace: 'Изтрий работно пространство',
+ editWorkspace: 'Редактирай работно пространство',
+ newWorkspace: 'Ново работно пространство',
+ openWorkspace: 'Отвори {{title}}',
+ openingWorkspace: 'Отваряне на {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Контекст за учене.',
+ editorVisual: 'Изберете визуална опора за това работно пространство.',
+ emptyList: 'Разделете колоди, бележки и опашки за преговор по контекст на учене.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Това премества "{{title}}" в Кошчето. Можете да го възстановите по-късно.',
+ deleteWorkspaceFallbackDescription: 'Това премества това работно пространство в Кошчето. Можете да го възстановите по-късно.',
+ deleteWorkspaceFallbackTitle: 'Да се изтрие ли работното пространство?',
+ deleteWorkspaceTitle: 'Да се изтрие ли "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Започнете с работно пространство',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Работното пространство не можа да се създаде',
+ couldNotDeleteWorkspace: 'Работното пространство не можа да се изтрие',
+ couldNotOpenWorkspace: 'Работното пространство не можа да се отвори',
+ couldNotSaveWorkspace: 'Работното пространство не можа да се запази',
+ workspaceCouldNotLoad: 'Работното пространство не можа да се зареди',
+ workspacesCouldNotLoad: 'Работните пространства не можаха да се заредят',
+ },
+ fields: {
+ descriptionLabel: 'Описание на работното пространство',
+ descriptionPlaceholder: 'Какво принадлежи в това работно пространство?',
+ namePlaceholder: 'Име на работното пространство',
+ untitledWorkspace: 'Работно пространство без заглавие',
+ },
+ labels: {
+ createWorkspaceTitle: 'Създай работно пространство',
+ loadingWorkspaces: 'Зареждане на работните пространства',
+ workspace: 'Работно пространство',
+ workspaces: 'Работни пространства',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/bs.ts b/ui/src/core/i18n/resources/bs.ts
new file mode 100644
index 0000000..25aeb28
--- /dev/null
+++ b/ui/src/core/i18n/resources/bs.ts
@@ -0,0 +1,636 @@
+export const bs = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Pokušajte ponovo. Ako se ovo nastavi dešavati, ponovo otvorite Clear.',
+ title: 'Pokretanje nije uspjelo',
+ },
+ loadingTitle: 'Priprema se vaš prostor za učenje',
+ },
+ common: {
+ actions: {
+ back: 'Nazad',
+ cancel: 'Otkaži',
+ checkAgain: 'Provjeri ponovo',
+ close: 'Zatvori',
+ create: 'Kreiraj',
+ delete: 'Izbriši',
+ dismissError: 'Zatvori grešku',
+ dismissStatus: 'Zatvori status',
+ edit: 'Uredi',
+ itemActions: 'Radnje za {{title}}',
+ reset: 'Resetuj',
+ review: 'Ponavljanje',
+ save: 'Spremi',
+ saveChanges: 'Spremi promjene',
+ tryAgain: 'Pokušaj ponovo',
+ },
+ labels: {
+ active: 'Aktivno',
+ clear: 'Clear',
+ custom: 'Prilagođeno',
+ default: 'Zadano',
+ loadingEditor: 'Učitavanje uređivača',
+ name: 'Naziv',
+ completedTask: 'Završen zadatak',
+ description: 'Opis',
+ incompleteTask: 'Nedovršen zadatak',
+ percentageInput: 'Procenat za {{label}}',
+ visual: 'Vizuelno',
+ },
+ status: {
+ actionFailed: 'Radnja nije uspjela',
+ actionInProgress: 'Radnja je u toku',
+ },
+ sort: {
+ ascending: 'Rast.',
+ column: 'Kolona',
+ descending: 'Opad.',
+ direction: 'Smjer',
+ sort: 'Sortiraj',
+ },
+ search: {
+ label: 'Pretraga',
+ },
+ visualPicker: {
+ allLucideIcons: 'Sve Lucide ikone',
+ browseIconsFor: 'Pregledajte ili pretražite ikone za {{label}}.',
+ chooseIcon: 'Odaberi ikonu',
+ iconPicker: 'Birač ikone za {{label}}',
+ iconSearch: 'Pretraga ikona za {{label}}',
+ iconsCouldNotLoad: 'Ikone se nisu mogle učitati.',
+ loadingIcons: 'Učitavanje ikona',
+ loadingMoreIcons: 'Učitavanje dodatnih ikona',
+ moreIcons: 'Još ikona',
+ noIconsMatch: 'Nijedna ikona ne odgovara "{{query}}".',
+ searchIconsPlaceholder: 'Pretraži ikone…',
+ selectedIcon: 'Odabrano {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Kreiraj',
+ newDeck: 'Novi špil',
+ newFolder: 'Nova mapa',
+ },
+ descriptions: {
+ defaultWorkspace: 'Držite špilove, mape i bilješke zajedno.',
+ emptyWorkspace: 'Kreirajte špil, zatim dodajte bilješke da izgradite red za ponavljanje.',
+ emptyFolder: 'Kreirajte špil, zatim dodajte bilješke da izgradite red za ponavljanje.',
+ searchPlaceholder: 'Pretraži mape, špilove i bilješke…',
+ },
+ empty: {
+ createFirstDeck: 'Kreirajte svoj prvi špil',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Špil se nije mogao izbrisati',
+ couldNotDeleteFolder: 'Mapa se nije mogla izbrisati',
+ couldNotDeleteWorkspace: 'Radni prostor se nije mogao izbrisati',
+ dashboardCouldNotOpen: 'Kontrolna tabla se nije mogla otvoriti',
+ decksCouldNotLoad: 'Špilovi se nisu mogli učitati',
+ decksMayBeOutOfDate: 'Špilovi možda nisu ažurni',
+ foldersCouldNotLoad: 'Mape se nisu mogle učitati',
+ foldersMayBeOutOfDate: 'Mape možda nisu ažurne',
+ workspaceCouldNotLoad: 'Radni prostor se nije mogao učitati',
+ },
+ labels: {
+ dashboard: 'Kontrolna tabla',
+ loadingDashboard: 'Učitavanje kontrolne table',
+ newItem: 'Nova stavka',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Datum nije dostupan',
+ },
+ age: {
+ dayAgo_one: 'prije {{count}} dan',
+ dayAgo_few: 'prije {{count}} dana',
+ dayAgo_other: 'prije {{count}} dana',
+ hourAgo_one: 'prije {{count}} sat',
+ hourAgo_few: 'prije {{count}} sata',
+ hourAgo_other: 'prije {{count}} sati',
+ justNow: 'upravo sada',
+ minuteAgo_one: 'prije {{count}} minutu',
+ minuteAgo_few: 'prije {{count}} minute',
+ minuteAgo_other: 'prije {{count}} minuta',
+ unavailable: 'datum nije dostupan',
+ weekAgo_one: 'prije {{count}} sedmicu',
+ weekAgo_few: 'prije {{count}} sedmice',
+ weekAgo_other: 'prije {{count}} sedmica',
+ },
+ labels: {
+ deleted: 'Izbrisano {{value}}',
+ due: 'Rok: {{value}}',
+ reviewed: 'Ponovljeno: {{value}}',
+ updated: 'Ažurirano {{value}}',
+ updatedUppercase: 'AŽURIRANO {{value}}',
+ },
+ relative: {
+ dayAgo_one: 'prije {{count}} dan',
+ dayAgo_few: 'prije {{count}} dana',
+ dayAgo_other: 'prije {{count}} dana',
+ inAMoment: 'Za trenutak',
+ inDay_one: 'Za {{count}} dan',
+ inDay_few: 'Za {{count}} dana',
+ inDay_other: 'Za {{count}} dana',
+ inMonth_one: 'Za {{count}} mjesec',
+ inMonth_few: 'Za {{count}} mjeseca',
+ inMonth_other: 'Za {{count}} mjeseci',
+ inWeek_one: 'Za {{count}} sedmicu',
+ inWeek_few: 'Za {{count}} sedmice',
+ inWeek_other: 'Za {{count}} sedmica',
+ justNow: 'Upravo sada',
+ monthAgo_one: 'prije {{count}} mjesec',
+ monthAgo_few: 'prije {{count}} mjeseca',
+ monthAgo_other: 'prije {{count}} mjeseci',
+ secondsAgoShort: 'prije {{count}} s',
+ minutesAgoShort: 'prije {{count}} min',
+ hoursAgoShort: 'prije {{count}} h',
+ today: 'Danas',
+ tomorrow: 'Sutra',
+ weekAgo_one: 'prije {{count}} sedmicu',
+ weekAgo_few: 'prije {{count}} sedmice',
+ weekAgo_other: 'prije {{count}} sedmica',
+ yesterday: 'Jučer',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Radnje za {{title}}',
+ createDeck: 'Kreiraj špil',
+ createNote: 'Kreiraj bilješku',
+ deleteDeck: 'Izbriši špil',
+ editDeck: 'Uredi špil',
+ newNote: 'Nova bilješka',
+ openDeck: 'Otvori špil {{title}}',
+ saveDeck: 'Špil se nije mogao spremiti',
+ studyNow: 'Uči sada',
+ },
+ descriptions: {
+ emptyDeck: 'Dodajte bilješku da bi ovaj špil imao materijal za ponavljanje.',
+ editorDefault: 'Fokusiran špil za učenje.',
+ editorVisual: 'Odaberite simbol naslovnice za ovaj špil.',
+ notesSearchPlaceholder: 'Pretraži bilješke…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Ovo premješta "{{title}}" u Smeće. Možete ga vratiti kasnije.',
+ deleteDeckFallbackDescription: 'Ovo premješta ovaj špil u Smeće. Možete ga vratiti kasnije.',
+ deleteDeckFallbackTitle: 'Izbrisati špil?',
+ deleteDeckTitle: 'Izbrisati "{{title}}"?',
+ deleteNoteDescription: 'Ovo premješta "{{title}}" u Smeće. Možete je vratiti kasnije.',
+ deleteNoteFallbackTitle: 'Izbrisati bilješku?',
+ deleteNoteTitle: 'Izbrisati "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Nema odgovarajućih bilješki',
+ noMatchingNotesDescription: 'Nijedna bilješka ne odgovara "{{query}}".',
+ thisDeckIsEmpty: 'Ovaj špil je prazan',
+ },
+ errors: {
+ couldNotCreateDeck: 'Špil se nije mogao kreirati',
+ couldNotDeleteDeck: 'Špil se nije mogao izbrisati',
+ couldNotDeleteNote: 'Bilješka se nije mogla izbrisati',
+ couldNotLoadFolderPath: 'Putanja mape se nije mogla učitati',
+ couldNotSaveDeck: 'Špil se nije mogao spremiti',
+ deckCouldNotLoad: 'Špil se nije mogao učitati',
+ notesCouldNotLoad: 'Bilješke se nisu mogle učitati',
+ notesMayBeOutOfDate: 'Bilješke možda nisu ažurne',
+ },
+ fields: {
+ descriptionLabel: 'Opis špila',
+ descriptionPlaceholder: 'Šta će vam ovaj špil pomoći da ponavljate?',
+ namePlaceholder: 'Naziv špila',
+ untitledDeck: 'Špil bez naslova',
+ untitledDeckLower: 'špil bez naslova',
+ },
+ labels: {
+ createDeckTitle: 'Kreiraj špil',
+ deck: 'Špil',
+ deckNotesSearch: 'Pretraga bilješki u špilu',
+ deckOverview: 'Pregled špila',
+ decks: 'Špilovi',
+ due: 'Rok',
+ dueToday: 'Rok danas',
+ loadingDeck: 'Učitavanje špila',
+ mastery: 'Savladanost',
+ notes: 'Bilješke',
+ },
+ sort: {
+ ariaLabel: 'Sortiraj špilove',
+ dueToday: 'Rok danas',
+ title: 'Naslov',
+ updated: 'Ažurirano',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Podaci su se promijenili. Osvježite i pokušajte ponovo.',
+ forbidden: 'Nemate dozvolu za ovu radnju.',
+ notFound: 'Nismo mogli pronaći ovu stavku.',
+ offline: 'Usluga nije dostupna.',
+ timeout: 'Ovo je trajalo predugo. Pokušajte ponovo.',
+ unauthorized: 'Prijavite se da nastavite.',
+ unavailable: 'Usluga je privremeno nedostupna.',
+ },
+ fallback: {
+ unexpected: 'Neočekivana greška',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Kreiraj mapu',
+ deleteFolder: 'Izbriši mapu',
+ editFolder: 'Uredi mapu',
+ },
+ descriptions: {
+ editorDefault: 'Mapa za povezane špilove.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Ovo premješta "{{name}}" u Smeće. Možete je vratiti kasnije.',
+ deleteFolderFallbackDescription: 'Ovo premješta ovu mapu u Smeće. Možete je vratiti kasnije.',
+ deleteFolderFallbackTitle: 'Izbrisati mapu?',
+ deleteFolderTitle: 'Izbrisati "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'Nema rezultata u ovoj mapi',
+ noMatchesInFolderDescription: 'Nijedna mapa, špil ili bilješka ne odgovara "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Mapa se nije mogla kreirati',
+ couldNotDeleteFolder: 'Mapa se nije mogla izbrisati',
+ couldNotLoadFolderPath: 'Putanja mape se nije mogla učitati',
+ couldNotSaveFolder: 'Mapa se nije mogla spremiti',
+ folderCouldNotLoad: 'Mapa se nije mogla učitati',
+ },
+ fields: {
+ descriptionLabel: 'Opis mape',
+ descriptionPlaceholder: 'Šta pripada ovoj mapi?',
+ namePlaceholder: 'Naziv mape',
+ untitledFolder: 'Mapa bez naslova',
+ },
+ labels: {
+ createFolderTitle: 'Kreiraj mapu',
+ folder: 'Mapa',
+ folders: 'Mape',
+ loadingFolder: 'Učitavanje mape',
+ name: 'Naziv',
+ updated: 'Ažurirano',
+ },
+ sort: {
+ ariaLabel: 'Sortiraj mape',
+ name: 'Naziv',
+ updated: 'Ažurirano',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Ako se lokalni i sinhronizovani podaci ikada ne poklope, stavka će se pojaviti ovdje.',
+ heading: 'Status sinhronizacije',
+ title: 'Konflikti',
+ noConflicts: 'Nema pronađenih konflikata',
+ },
+ labels: {
+ menu: 'Meni',
+ },
+ sections: {
+ settings: {
+ description: 'Prilagodite okruženje i postavke',
+ title: 'Postavke',
+ },
+ trash: {
+ description: 'Vratite ili trajno izbrišite uklonjene stavke',
+ title: 'Smeće',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Zatvori uređivač',
+ openActions: 'Otvori radnje',
+ openWorkspaces: 'Otvori radne prostore',
+ },
+ items: {
+ home: 'Početna',
+ menu: 'Meni',
+ primary: 'Primarno',
+ settings: 'Postavke',
+ spaces: 'Prostori',
+ trash: 'Smeće',
+ workspaces: 'Radni prostori',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Dodaj cloze',
+ deleteNote: 'Izbriši bilješku',
+ editNote: 'Uredi bilješku',
+ hideDerivedCardsNote: 'Sakrij bilješku o izvedenim karticama',
+ openNote: 'Otvori {{title}}',
+ saveNote: 'Spremi bilješku',
+ showDerivedCardsNote: 'Prikaži bilješku o izvedenim karticama',
+ },
+ descriptions: {
+ clozeFormat: 'Svaki skriveni dio postaje kartica za ponavljanje kada spremite.',
+ clozeFormatPrefix: 'Označite skriveni tekst pomoću',
+ derivedCardsHelper: 'Bilješke su izvor istine za izvedene kartice.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Ovo premješta "{{title}}" u Smeće. Možete je vratiti kasnije.',
+ deleteNoteFallbackDescription: 'Ovo premješta ovu bilješku u Smeće. Možete je vratiti kasnije.',
+ deleteNoteFallbackTitle: 'Izbrisati bilješku?',
+ deleteNoteTitle: 'Izbrisati "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Bilješka se nije mogla kreirati',
+ couldNotDeleteNote: 'Bilješka se nije mogla izbrisati',
+ couldNotSaveNote: 'Bilješka se nije mogla spremiti',
+ noteCouldNotLoad: 'Bilješka se nije mogla učitati',
+ },
+ fields: {
+ back: 'Poleđina',
+ backPlaceholder: 'Unesite poleđinu',
+ bodyPlaceholder: 'Napišite sadržaj bilješke sa cloze izostavljanjima…',
+ front: 'Prednja strana',
+ frontPlaceholder: 'Unesite prednju stranu',
+ noteBody: 'Sadržaj bilješke',
+ title: 'Naslov',
+ titlePlaceholder: 'Dodajte naslov bilješke',
+ untitledCloze: 'Cloze bez naslova',
+ untitledNote: 'Bilješka bez naslova',
+ },
+ labels: {
+ backUppercase: 'POLEĐINA',
+ basic: 'Osnovna',
+ basicLower: 'osnovna',
+ basicUppercase: 'OSNOVNA',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Cloze format',
+ clozeUppercase: 'CLOZE',
+ deck: 'Špil',
+ derivedCards: 'IZVEDENE KARTICE',
+ due: 'Rok',
+ frontUppercase: 'PREDNJA STRANA',
+ inProgress: 'U toku',
+ inProgressUppercase: 'U TOKU',
+ loadingNote: 'Učitavanje bilješke',
+ loadingNoteEditor: 'Učitavanje uređivača bilješki',
+ markdownFormatting: 'Markdown formatiranje',
+ mastered: 'Savladano',
+ masteredUppercase: 'SAVLADANO',
+ newNote: 'Nova bilješka',
+ noteBody: 'SADRŽAJ BILJEŠKE',
+ noteContent: 'Sadržaj bilješke',
+ noteDetails: 'Detalji bilješke',
+ noteMetadata: 'Metapodaci bilješke',
+ noteType: 'Tip bilješke',
+ notes: 'Bilješke',
+ reviewed: 'Ponovljeno',
+ studyProgress: 'Napredak u učenju',
+ studyProgressUppercase: 'NAPREDAK U UČENJU',
+ titleUppercase: 'NASLOV',
+ updated: 'Ažurirano',
+ },
+ sort: {
+ ariaLabel: 'Sortiraj bilješke',
+ title: 'Naslov',
+ updated: 'Ažurirano',
+ },
+ toolbar: {
+ bold: 'Podebljano',
+ italic: 'Kurziv',
+ link: 'Link',
+ list: 'Lista',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Ponovo',
+ backToDeck: 'Nazad na špil',
+ continueReview: 'Nastavi ponavljanje',
+ easy: 'Lako',
+ good: 'Dobro',
+ hard: 'Teško',
+ newNote: 'Nova bilješka',
+ showAnswer: 'Prikaži odgovor',
+ },
+ errors: {
+ couldNotGradeCard: 'Kartica se nije mogla ocijeniti',
+ reviewCouldNotLoad: 'Ponavljanje se nije moglo učitati',
+ reviewCouldNotStart: 'Ponavljanje se nije moglo pokrenuti',
+ summaryCouldNotLoad: 'Sažetak ponavljanja se nije mogao učitati',
+ summaryNotAvailable: 'Sažetak ponavljanja nije dostupan',
+ summaryNotComplete: 'Ovo ponavljanje još nije završeno.',
+ },
+ labels: {
+ cardsReviewed: 'Ponovljene kartice',
+ deck: 'Špil',
+ duration: 'Trajanje',
+ loadingReview: 'Učitavanje ponavljanja',
+ loadingSummary: 'Učitavanje sažetka',
+ progress: 'Napredak ponavljanja',
+ review: 'Ponavljanje',
+ reviewComplete: 'Ponavljanje završeno',
+ reviewed_one: 'Ponovljena {{count}}',
+ reviewed_few: 'Ponovljene {{count}}',
+ reviewed_other: 'Ponovljeno {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} h {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'Vaš napredak je spremljen u ovaj špil.',
+ },
+ unavailable: {
+ description: 'Dodajte bilješku da bi ovaj špil mogao ući u red za ponavljanje.',
+ title: 'Nema kartica za ponavljanje',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Obriši pretragu',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Nema rezultata u ovom radnom prostoru',
+ noMatchesInWorkspaceDescription: 'Nijedna mapa, špil ili bilješka ne odgovara "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Pretraga se nije mogla završiti',
+ },
+ labels: {
+ results: 'Rezultati pretrage',
+ resultsFor: 'Rezultati za "{{query}}"',
+ searchingContent: 'Pretraga sadržaja',
+ },
+ resultGroups: {
+ deck: 'Špilovi',
+ folder: 'Mape',
+ note: 'Bilješke',
+ },
+ resultKinds: {
+ deck: 'špil',
+ folder: 'mapa',
+ note: 'bilješka',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Resetuj sve postavke',
+ resetSettings: 'Resetuj postavke',
+ resetToDefaults: 'Vrati zadane vrijednosti',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Zalijepite važeći JSON sa 21 numeričkom vrijednošću.',
+ fsrsErrorInvalidParams_one: 'Unesite JSON niz sa tačno {{count}} konačnim brojem.',
+ fsrsErrorInvalidParams_few: 'Unesite JSON niz sa tačno {{count}} konačna broja.',
+ fsrsErrorInvalidParams_other: 'Unesite JSON niz sa tačno {{count}} konačnih brojeva.',
+ fsrsHelper: 'Ovo je stručna izmjena. Vrijednosti moraju ostati redom.',
+ fsrsJsonLabel: 'JSON FSRS parametara',
+ fsrsTitle: 'Uredi FSRS parametre',
+ fsrsDescription: 'Zalijepite JSON niz sa 21 brojem da zamijenite težine planera.',
+ resetDescription: 'Ovo vraća vremensku zonu, ograničenja učenja i FSRS postavke.',
+ resetDescriptionWithLanguage: 'Ovo vraća jezik, vremensku zonu, ograničenja učenja i FSRS postavke.',
+ resetTitle: 'Resetovati sve postavke?',
+ timezoneDescription: 'Pretražite grad ili identifikator vremenske zone.',
+ timezoneSearchLabel: 'Pretraži vremenske zone',
+ timezoneSearchPlaceholder: 'Pretraži vremenske zone…',
+ timezoneTitle: 'Odaberite vremensku zonu',
+ },
+ errors: {
+ couldNotResetSettings: 'Postavke se nisu mogle resetovati',
+ couldNotSaveSettings: 'Postavke se nisu mogle spremiti',
+ settingsCouldNotLoad: 'Postavke se nisu mogle učitati',
+ settingsUnavailable: 'Postavke nisu dostupne.',
+ },
+ labels: {
+ appearance: 'Izgled',
+ automatic: 'Automatski',
+ fsrsParameters: 'FSRS parametri',
+ general: 'Općenito',
+ language: 'Jezik',
+ loadingSettings: 'Učitavanje postavki',
+ masteryHorizon: 'Horizont savladavanja',
+ newCardOrder: 'Redoslijed novih kartica',
+ newCardsPerDay: 'Nove kartice dnevno',
+ reviewCardsPerDay: 'Kartice za ponavljanje dnevno',
+ savingSettings: 'Spremanje postavki',
+ schedule: 'Raspored',
+ searchNoTimezones: 'Nema odgovarajućih vremenskih zona.',
+ settings: 'Postavke',
+ settingsReset: 'Postavke su resetovane',
+ study: 'Učenje',
+ targetRecallProbability: 'Ciljna vjerovatnoća prisjećanja',
+ theme: 'Tema',
+ timezone: 'Vremenska zona',
+ },
+ options: {
+ languageEnUs: 'Engleski (SAD)',
+ newCardsAfterReviews: 'Nakon ponavljanja',
+ newCardsBeforeReviews: 'Prije ponavljanja',
+ newCardsMixed: 'Miješano',
+ themeDark: 'Tamna',
+ themeLight: 'Svijetla',
+ themeSystem: 'Sistem',
+ timezoneSystem: 'Koristi vremensku zonu sistema',
+ },
+ rows: {
+ fsrsDescription: 'Težine stručnog modela',
+ languageDescription: 'Jezik interfejsa',
+ masteryHorizonDescription: 'Broj dana tokom kojih kartica mora ostati prisjetljiva na ciljnoj vjerovatnoći ili iznad nje da bi se računala kao savladana',
+ newCardOrderDescription: 'Redoslijed novih kartica u odnosu na ponavljanja',
+ newCardsPerDayDescription: 'Maksimalan broj novih kartica dnevno',
+ reviewCardsPerDayDescription: 'Maksimalan broj kartica za ponavljanje dnevno',
+ targetRecallProbabilityDescription: 'Minimalna vjerovatnoća prisjećanja pri sljedećem zakazanom ponavljanju',
+ timezoneDescription: 'Koristite automatsku vremensku zonu ili odaberite grad.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Izbriši trajno',
+ empty: 'Isprazni',
+ emptyTrash: 'Isprazni smeće',
+ restore: 'Vrati',
+ restoringItem: 'Vraćanje {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Ovo trajno briše "{{title}}". To se ne može poništiti.',
+ deleteItemFallbackDescription: 'Ovo trajno briše ovu stavku. To se ne može poništiti.',
+ deleteItemFallbackTitle: 'Izbrisati stavku?',
+ deleteItemTitle: 'Izbrisati "{{title}}"?',
+ emptyTrashDescription: 'Ovo trajno briše sve u Smeću. To se ne može poništiti.',
+ emptyTrashTitle: 'Isprazniti smeće?',
+ },
+ empty: {
+ description: 'Stavke koje izbrišete pojavit će se ovdje prije trajnog uklanjanja.',
+ title: 'Smeće je prazno',
+ },
+ errors: {
+ couldNotDeleteItem: 'Stavka se nije mogla izbrisati',
+ couldNotEmptyTrash: 'Smeće se nije moglo isprazniti',
+ couldNotRestoreItem: 'Stavka se nije mogla vratiti',
+ trashCouldNotLoad: 'Smeće se nije moglo učitati',
+ trashMayBeOutOfDate: 'Smeće možda nije ažurno',
+ },
+ labels: {
+ deletedAge: 'Izbrisano {{value}}',
+ itemCount_one: '{{count}} stavka',
+ itemCount_few: '{{count}} stavke',
+ itemCount_other: '{{count}} stavki',
+ lastEmptied: 'Zadnje ispražnjeno {{value}}',
+ loadingTrash: 'Učitavanje Smeća',
+ originalLocation: 'Izvorna lokacija: {{location}}',
+ title: 'Smeće',
+ trashActions: 'Radnje u Smeću za {{title}}',
+ },
+ kinds: {
+ deck: 'Špil',
+ folder: 'Mapa',
+ note: 'Bilješka',
+ workspace: 'Radni prostor',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Kreiraj radni prostor',
+ deleteWorkspace: 'Izbriši radni prostor',
+ editWorkspace: 'Uredi radni prostor',
+ newWorkspace: 'Novi radni prostor',
+ openWorkspace: 'Otvori {{title}}',
+ openingWorkspace: 'Otvaranje {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Kontekst učenja.',
+ editorVisual: 'Odaberite vizuelno sidro za ovaj radni prostor.',
+ emptyList: 'Odvojite špilove, bilješke i redove za ponavljanje po kontekstu učenja.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Ovo premješta "{{title}}" u Smeće. Možete ga vratiti kasnije.',
+ deleteWorkspaceFallbackDescription: 'Ovo premješta ovaj radni prostor u Smeće. Možete ga vratiti kasnije.',
+ deleteWorkspaceFallbackTitle: 'Izbrisati radni prostor?',
+ deleteWorkspaceTitle: 'Izbrisati "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Počnite s radnim prostorom',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Radni prostor se nije mogao kreirati',
+ couldNotDeleteWorkspace: 'Radni prostor se nije mogao izbrisati',
+ couldNotOpenWorkspace: 'Radni prostor se nije mogao otvoriti',
+ couldNotSaveWorkspace: 'Radni prostor se nije mogao spremiti',
+ workspaceCouldNotLoad: 'Radni prostor se nije mogao učitati',
+ workspacesCouldNotLoad: 'Radni prostori se nisu mogli učitati',
+ },
+ fields: {
+ descriptionLabel: 'Opis radnog prostora',
+ descriptionPlaceholder: 'Šta pripada ovom radnom prostoru?',
+ namePlaceholder: 'Naziv radnog prostora',
+ untitledWorkspace: 'Radni prostor bez naslova',
+ },
+ labels: {
+ createWorkspaceTitle: 'Kreiraj radni prostor',
+ loadingWorkspaces: 'Učitavanje radnih prostora',
+ workspace: 'Radni prostor',
+ workspaces: 'Radni prostori',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/ca.ts b/ui/src/core/i18n/resources/ca.ts
new file mode 100644
index 0000000..4479b1c
--- /dev/null
+++ b/ui/src/core/i18n/resources/ca.ts
@@ -0,0 +1,636 @@
+export const ca = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Torna-ho a provar. Si continua passant, torna a obrir Clear.',
+ title: 'No s\'ha pogut iniciar',
+ },
+ loadingTitle: 'Preparant el teu espai d\'estudi',
+ },
+ common: {
+ actions: {
+ back: 'Enrere',
+ cancel: 'Cancel·la',
+ checkAgain: 'Comprova-ho de nou',
+ close: 'Tanca',
+ create: 'Crea',
+ delete: 'Suprimeix',
+ dismissError: 'Descarta l\'error',
+ dismissStatus: 'Descarta l\'estat',
+ edit: 'Edita',
+ itemActions: 'Accions de {{title}}',
+ reset: 'Restableix',
+ review: 'Repassa',
+ save: 'Desa',
+ saveChanges: 'Desa els canvis',
+ tryAgain: 'Torna-ho a provar',
+ },
+ labels: {
+ active: 'Actiu',
+ clear: 'Clear',
+ custom: 'Personalitzat',
+ default: 'Predeterminat',
+ loadingEditor: 'S\'està carregant l\'editor',
+ name: 'Nom',
+ completedTask: 'Tasca completada',
+ description: 'Descripció',
+ incompleteTask: 'Tasca incompleta',
+ percentageInput: 'Percentatge de {{label}}',
+ visual: 'Visual',
+ },
+ status: {
+ actionFailed: 'L\'acció ha fallat',
+ actionInProgress: 'Acció en curs',
+ },
+ sort: {
+ ascending: 'Asc.',
+ column: 'Columna',
+ descending: 'Desc.',
+ direction: 'Direcció',
+ sort: 'Ordena',
+ },
+ search: {
+ label: 'Cerca',
+ },
+ visualPicker: {
+ allLucideIcons: 'Totes les icones Lucide',
+ browseIconsFor: 'Explora o cerca icones per a {{label}}.',
+ chooseIcon: 'Tria una icona',
+ iconPicker: 'Selector d\'icona de {{label}}',
+ iconSearch: 'Cerca d\'icones de {{label}}',
+ iconsCouldNotLoad: 'No s\'han pogut carregar les icones.',
+ loadingIcons: 'S\'estan carregant les icones',
+ loadingMoreIcons: 'S\'estan carregant més icones',
+ moreIcons: 'Més icones',
+ noIconsMatch: 'Cap icona coincideix amb "{{query}}".',
+ searchIconsPlaceholder: 'Cerca icones…',
+ selectedIcon: '{{label}} seleccionat',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Crea',
+ newDeck: 'Baralla nova',
+ newFolder: 'Carpeta nova',
+ },
+ descriptions: {
+ defaultWorkspace: 'Mantén juntes les baralles, les carpetes i les notes.',
+ emptyWorkspace: 'Crea una baralla i després afegeix notes per construir la teva cua de repàs.',
+ emptyFolder: 'Crea una baralla i després afegeix notes per construir una cua de repàs.',
+ searchPlaceholder: 'Cerca carpetes, baralles i notes…',
+ },
+ empty: {
+ createFirstDeck: 'Crea la teva primera baralla',
+ },
+ errors: {
+ couldNotDeleteDeck: 'No s\'ha pogut suprimir la baralla',
+ couldNotDeleteFolder: 'No s\'ha pogut suprimir la carpeta',
+ couldNotDeleteWorkspace: 'No s\'ha pogut suprimir l\'espai de treball',
+ dashboardCouldNotOpen: 'No s\'ha pogut obrir el tauler',
+ decksCouldNotLoad: 'No s\'han pogut carregar les baralles',
+ decksMayBeOutOfDate: 'Les baralles poden estar desactualitzades',
+ foldersCouldNotLoad: 'No s\'han pogut carregar les carpetes',
+ foldersMayBeOutOfDate: 'Les carpetes poden estar desactualitzades',
+ workspaceCouldNotLoad: 'No s\'ha pogut carregar l\'espai de treball',
+ },
+ labels: {
+ dashboard: 'Tauler',
+ loadingDashboard: 'S\'està carregant el tauler',
+ newItem: 'Element nou',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Data no disponible',
+ },
+ age: {
+ dayAgo_one: 'fa {{count}} dia',
+ dayAgo_many: 'fa {{count}} dies',
+ dayAgo_other: 'fa {{count}} dies',
+ hourAgo_one: 'fa {{count}} hora',
+ hourAgo_many: 'fa {{count}} hores',
+ hourAgo_other: 'fa {{count}} hores',
+ justNow: 'ara mateix',
+ minuteAgo_one: 'fa {{count}} minut',
+ minuteAgo_many: 'fa {{count}} minuts',
+ minuteAgo_other: 'fa {{count}} minuts',
+ unavailable: 'data no disponible',
+ weekAgo_one: 'fa {{count}} setmana',
+ weekAgo_many: 'fa {{count}} setmanes',
+ weekAgo_other: 'fa {{count}} setmanes',
+ },
+ labels: {
+ deleted: 'Suprimit {{value}}',
+ due: 'Venciment: {{value}}',
+ reviewed: 'Repassat: {{value}}',
+ updated: 'Actualitzat {{value}}',
+ updatedUppercase: 'ACTUALITZAT {{value}}',
+ },
+ relative: {
+ dayAgo_one: 'fa {{count}} dia',
+ dayAgo_many: 'fa {{count}} dies',
+ dayAgo_other: 'fa {{count}} dies',
+ inAMoment: 'D\'aquí a un moment',
+ inDay_one: 'D\'aquí a {{count}} dia',
+ inDay_many: 'D\'aquí a {{count}} dies',
+ inDay_other: 'D\'aquí a {{count}} dies',
+ inMonth_one: 'D\'aquí a {{count}} mes',
+ inMonth_many: 'D\'aquí a {{count}} mesos',
+ inMonth_other: 'D\'aquí a {{count}} mesos',
+ inWeek_one: 'D\'aquí a {{count}} setmana',
+ inWeek_many: 'D\'aquí a {{count}} setmanes',
+ inWeek_other: 'D\'aquí a {{count}} setmanes',
+ justNow: 'Ara mateix',
+ monthAgo_one: 'fa {{count}} mes',
+ monthAgo_many: 'fa {{count}} mesos',
+ monthAgo_other: 'fa {{count}} mesos',
+ secondsAgoShort: 'fa {{count}} s',
+ minutesAgoShort: 'fa {{count}} min',
+ hoursAgoShort: 'fa {{count}} h',
+ today: 'Avui',
+ tomorrow: 'Demà',
+ weekAgo_one: 'fa {{count}} setmana',
+ weekAgo_many: 'fa {{count}} setmanes',
+ weekAgo_other: 'fa {{count}} setmanes',
+ yesterday: 'Ahir',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Accions de {{title}}',
+ createDeck: 'Crea una baralla',
+ createNote: 'Crea una nota',
+ deleteDeck: 'Suprimeix la baralla',
+ editDeck: 'Edita la baralla',
+ newNote: 'Nota nova',
+ openDeck: 'Obre la baralla {{title}}',
+ saveDeck: 'No s\'ha pogut desar la baralla',
+ studyNow: 'Estudia ara',
+ },
+ descriptions: {
+ emptyDeck: 'Afegeix una nota perquè aquesta baralla tingui material per repassar.',
+ editorDefault: 'Baralla d\'estudi enfocada.',
+ editorVisual: 'Tria un símbol de portada per a aquesta baralla.',
+ notesSearchPlaceholder: 'Cerca notes…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Això mou "{{title}}" a la Paperera. Pots restaurar-ho més tard.',
+ deleteDeckFallbackDescription: 'Això mou aquesta baralla a la Paperera. Pots restaurar-la més tard.',
+ deleteDeckFallbackTitle: 'Vols suprimir la baralla?',
+ deleteDeckTitle: 'Vols suprimir "{{title}}"?',
+ deleteNoteDescription: 'Això mou "{{title}}" a la Paperera. Pots restaurar-la més tard.',
+ deleteNoteFallbackTitle: 'Vols suprimir la nota?',
+ deleteNoteTitle: 'Vols suprimir "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'No hi ha notes coincidents',
+ noMatchingNotesDescription: 'Cap nota coincideix amb "{{query}}".',
+ thisDeckIsEmpty: 'Aquesta baralla és buida',
+ },
+ errors: {
+ couldNotCreateDeck: 'No s\'ha pogut crear la baralla',
+ couldNotDeleteDeck: 'No s\'ha pogut suprimir la baralla',
+ couldNotDeleteNote: 'No s\'ha pogut suprimir la nota',
+ couldNotLoadFolderPath: 'No s\'ha pogut carregar el camí de la carpeta',
+ couldNotSaveDeck: 'No s\'ha pogut desar la baralla',
+ deckCouldNotLoad: 'No s\'ha pogut carregar la baralla',
+ notesCouldNotLoad: 'No s\'han pogut carregar les notes',
+ notesMayBeOutOfDate: 'Les notes poden estar desactualitzades',
+ },
+ fields: {
+ descriptionLabel: 'Descripció de la baralla',
+ descriptionPlaceholder: 'Què t\'ajudarà a repassar aquesta baralla?',
+ namePlaceholder: 'Nom de la baralla',
+ untitledDeck: 'Baralla sense títol',
+ untitledDeckLower: 'baralla sense títol',
+ },
+ labels: {
+ createDeckTitle: 'Crea una baralla',
+ deck: 'Baralla',
+ deckNotesSearch: 'Cerca de notes de la baralla',
+ deckOverview: 'Vista general de la baralla',
+ decks: 'Baralles',
+ due: 'Venciment',
+ dueToday: 'Venciment avui',
+ loadingDeck: 'S\'està carregant la baralla',
+ mastery: 'Domini',
+ notes: 'Notes',
+ },
+ sort: {
+ ariaLabel: 'Ordena les baralles',
+ dueToday: 'Venciment avui',
+ title: 'Títol',
+ updated: 'Actualitzat',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Les dades han canviat. Actualitza i torna-ho a provar.',
+ forbidden: 'No tens permís per fer això.',
+ notFound: 'No hem pogut trobar aquest element.',
+ offline: 'No es pot contactar amb el servei.',
+ timeout: 'Això ha trigat massa. Torna-ho a provar.',
+ unauthorized: 'Inicia la sessió per continuar.',
+ unavailable: 'El servei no està disponible temporalment.',
+ },
+ fallback: {
+ unexpected: 'Error inesperat',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Crea una carpeta',
+ deleteFolder: 'Suprimeix la carpeta',
+ editFolder: 'Edita la carpeta',
+ },
+ descriptions: {
+ editorDefault: 'Carpeta per a baralles relacionades.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Això mou "{{name}}" a la Paperera. Pots restaurar-la més tard.',
+ deleteFolderFallbackDescription: 'Això mou aquesta carpeta a la Paperera. Pots restaurar-la més tard.',
+ deleteFolderFallbackTitle: 'Vols suprimir la carpeta?',
+ deleteFolderTitle: 'Vols suprimir "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'No hi ha coincidències en aquesta carpeta',
+ noMatchesInFolderDescription: 'Cap carpeta, baralla o nota coincideix amb "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'No s\'ha pogut crear la carpeta',
+ couldNotDeleteFolder: 'No s\'ha pogut suprimir la carpeta',
+ couldNotLoadFolderPath: 'No s\'ha pogut carregar el camí de la carpeta',
+ couldNotSaveFolder: 'No s\'ha pogut desar la carpeta',
+ folderCouldNotLoad: 'No s\'ha pogut carregar la carpeta',
+ },
+ fields: {
+ descriptionLabel: 'Descripció de la carpeta',
+ descriptionPlaceholder: 'Què pertany a aquesta carpeta?',
+ namePlaceholder: 'Nom de la carpeta',
+ untitledFolder: 'Carpeta sense títol',
+ },
+ labels: {
+ createFolderTitle: 'Crea una carpeta',
+ folder: 'Carpeta',
+ folders: 'Carpetes',
+ loadingFolder: 'S\'està carregant la carpeta',
+ name: 'Nom',
+ updated: 'Actualitzat',
+ },
+ sort: {
+ ariaLabel: 'Ordena les carpetes',
+ name: 'Nom',
+ updated: 'Actualitzat',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Si les dades locals i sincronitzades no coincideixen mai, l\'element apareixerà aquí.',
+ heading: 'Estat de sincronització',
+ title: 'Conflictes',
+ noConflicts: 'No s\'han trobat conflictes',
+ },
+ labels: {
+ menu: 'Menú',
+ },
+ sections: {
+ settings: {
+ description: 'Personalitza el teu entorn i preferències',
+ title: 'Configuració',
+ },
+ trash: {
+ description: 'Restaura o suprimeix permanentment els elements eliminats',
+ title: 'Paperera',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Tanca l\'editor',
+ openActions: 'Obre les accions',
+ openWorkspaces: 'Obre els espais de treball',
+ },
+ items: {
+ home: 'Inici',
+ menu: 'Menú',
+ primary: 'Principal',
+ settings: 'Configuració',
+ spaces: 'Espais',
+ trash: 'Paperera',
+ workspaces: 'Espais de treball',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Afegeix cloze',
+ deleteNote: 'Suprimeix la nota',
+ editNote: 'Edita la nota',
+ hideDerivedCardsNote: 'Amaga la nota sobre targetes derivades',
+ openNote: 'Obre {{title}}',
+ saveNote: 'Desa la nota',
+ showDerivedCardsNote: 'Mostra la nota sobre targetes derivades',
+ },
+ descriptions: {
+ clozeFormat: 'Cada part amagada es converteix en una targeta de repàs quan deses.',
+ clozeFormatPrefix: 'Envolta el text amagat amb',
+ derivedCardsHelper: 'Les notes són la font de veritat de les targetes derivades.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Això mou "{{title}}" a la Paperera. Pots restaurar-la més tard.',
+ deleteNoteFallbackDescription: 'Això mou aquesta nota a la Paperera. Pots restaurar-la més tard.',
+ deleteNoteFallbackTitle: 'Vols suprimir la nota?',
+ deleteNoteTitle: 'Vols suprimir "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'No s\'ha pogut crear la nota',
+ couldNotDeleteNote: 'No s\'ha pogut suprimir la nota',
+ couldNotSaveNote: 'No s\'ha pogut desar la nota',
+ noteCouldNotLoad: 'No s\'ha pogut carregar la nota',
+ },
+ fields: {
+ back: 'Dors',
+ backPlaceholder: 'Introdueix el dors',
+ bodyPlaceholder: 'Escriu el contingut de la nota amb eliminacions cloze…',
+ front: 'Anvers',
+ frontPlaceholder: 'Introdueix l\'anvers',
+ noteBody: 'Contingut de la nota',
+ title: 'Títol',
+ titlePlaceholder: 'Afegeix un títol de nota',
+ untitledCloze: 'Cloze sense títol',
+ untitledNote: 'Nota sense títol',
+ },
+ labels: {
+ backUppercase: 'DORS',
+ basic: 'Bàsica',
+ basicLower: 'bàsica',
+ basicUppercase: 'BÀSICA',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Format cloze',
+ clozeUppercase: 'CLOZE',
+ deck: 'Baralla',
+ derivedCards: 'TARGETES DERIVADES',
+ due: 'Venciment',
+ frontUppercase: 'ANVERS',
+ inProgress: 'En curs',
+ inProgressUppercase: 'EN CURS',
+ loadingNote: 'S\'està carregant la nota',
+ loadingNoteEditor: 'S\'està carregant l\'editor de notes',
+ markdownFormatting: 'Format Markdown',
+ mastered: 'Dominada',
+ masteredUppercase: 'DOMINADA',
+ newNote: 'Nota nova',
+ noteBody: 'CONTINGUT DE LA NOTA',
+ noteContent: 'Contingut de la nota',
+ noteDetails: 'Detalls de la nota',
+ noteMetadata: 'Metadades de la nota',
+ noteType: 'Tipus de nota',
+ notes: 'Notes',
+ reviewed: 'Repassat',
+ studyProgress: 'Progrés d\'estudi',
+ studyProgressUppercase: 'PROGRÉS D\'ESTUDI',
+ titleUppercase: 'TÍTOL',
+ updated: 'Actualitzat',
+ },
+ sort: {
+ ariaLabel: 'Ordena les notes',
+ title: 'Títol',
+ updated: 'Actualitzat',
+ },
+ toolbar: {
+ bold: 'Negreta',
+ italic: 'Cursiva',
+ link: 'Enllaç',
+ list: 'Llista',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Una altra vegada',
+ backToDeck: 'Torna a la baralla',
+ continueReview: 'Continua el repàs',
+ easy: 'Fàcil',
+ good: 'Bé',
+ hard: 'Difícil',
+ newNote: 'Nota nova',
+ showAnswer: 'Mostra la resposta',
+ },
+ errors: {
+ couldNotGradeCard: 'No s\'ha pogut qualificar la targeta',
+ reviewCouldNotLoad: 'No s\'ha pogut carregar el repàs',
+ reviewCouldNotStart: 'No s\'ha pogut iniciar el repàs',
+ summaryCouldNotLoad: 'No s\'ha pogut carregar el resum del repàs',
+ summaryNotAvailable: 'El resum del repàs no està disponible',
+ summaryNotComplete: 'Aquest repàs encara no està complet.',
+ },
+ labels: {
+ cardsReviewed: 'Targetes repassades',
+ deck: 'Baralla',
+ duration: 'Durada',
+ loadingReview: 'S\'està carregant el repàs',
+ loadingSummary: 'S\'està carregant el resum',
+ progress: 'Progrés del repàs',
+ review: 'Repàs',
+ reviewComplete: 'Repàs completat',
+ reviewed_one: 'Repassada {{count}}',
+ reviewed_many: 'Repassades {{count}}',
+ reviewed_other: 'Repassades {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} h {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'El teu progrés s\'ha desat en aquesta baralla.',
+ },
+ unavailable: {
+ description: 'Afegeix una nota perquè aquesta baralla pugui entrar a la cua de repàs.',
+ title: 'No hi ha targetes per repassar',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Esborra la cerca',
+ },
+ empty: {
+ noMatchesInWorkspace: 'No hi ha coincidències en aquest espai de treball',
+ noMatchesInWorkspaceDescription: 'Cap carpeta, baralla o nota coincideix amb "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'No s\'ha pogut completar la cerca',
+ },
+ labels: {
+ results: 'Resultats de cerca',
+ resultsFor: 'Resultats per a "{{query}}"',
+ searchingContent: 'S\'està cercant contingut',
+ },
+ resultGroups: {
+ deck: 'Baralles',
+ folder: 'Carpetes',
+ note: 'Notes',
+ },
+ resultKinds: {
+ deck: 'baralla',
+ folder: 'carpeta',
+ note: 'nota',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Restableix tota la configuració',
+ resetSettings: 'Restableix la configuració',
+ resetToDefaults: 'Restableix els valors predeterminats',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Enganxa un JSON vàlid amb 21 valors numèrics.',
+ fsrsErrorInvalidParams_one: 'Introdueix una matriu JSON amb exactament {{count}} nombre finit.',
+ fsrsErrorInvalidParams_many: 'Introdueix una matriu JSON amb exactament {{count}} nombres finits.',
+ fsrsErrorInvalidParams_other: 'Introdueix una matriu JSON amb exactament {{count}} nombres finits.',
+ fsrsHelper: 'Això és una substitució experta. Els valors han de mantenir l\'ordre.',
+ fsrsJsonLabel: 'JSON de paràmetres FSRS',
+ fsrsTitle: 'Edita els paràmetres FSRS',
+ fsrsDescription: 'Enganxa una matriu JSON amb 21 nombres per substituir els pesos del planificador.',
+ resetDescription: 'Això restaura la zona horària, els límits d\'estudi i la configuració FSRS.',
+ resetDescriptionWithLanguage: 'Això restaura l\'idioma, la zona horària, els límits d\'estudi i la configuració FSRS.',
+ resetTitle: 'Vols restablir tota la configuració?',
+ timezoneDescription: 'Cerca una ciutat o un identificador de zona horària.',
+ timezoneSearchLabel: 'Cerca zones horàries',
+ timezoneSearchPlaceholder: 'Cerca zones horàries…',
+ timezoneTitle: 'Tria la zona horària',
+ },
+ errors: {
+ couldNotResetSettings: 'No s\'ha pogut restablir la configuració',
+ couldNotSaveSettings: 'No s\'ha pogut desar la configuració',
+ settingsCouldNotLoad: 'No s\'ha pogut carregar la configuració',
+ settingsUnavailable: 'La configuració no està disponible.',
+ },
+ labels: {
+ appearance: 'Aparença',
+ automatic: 'Automàtic',
+ fsrsParameters: 'Paràmetres FSRS',
+ general: 'General',
+ language: 'Idioma',
+ loadingSettings: 'S\'està carregant la configuració',
+ masteryHorizon: 'Horitzó de domini',
+ newCardOrder: 'Ordre de les targetes noves',
+ newCardsPerDay: 'Targetes noves per dia',
+ reviewCardsPerDay: 'Targetes de repàs per dia',
+ savingSettings: 'S\'està desant la configuració',
+ schedule: 'Programació',
+ searchNoTimezones: 'No hi ha zones horàries coincidents.',
+ settings: 'Configuració',
+ settingsReset: 'Configuració restablerta',
+ study: 'Estudi',
+ targetRecallProbability: 'Probabilitat objectiu de record',
+ theme: 'Tema',
+ timezone: 'Zona horària',
+ },
+ options: {
+ languageEnUs: 'Anglès (EUA)',
+ newCardsAfterReviews: 'Després dels repassos',
+ newCardsBeforeReviews: 'Abans dels repassos',
+ newCardsMixed: 'Mixt',
+ themeDark: 'Fosc',
+ themeLight: 'Clar',
+ themeSystem: 'Sistema',
+ timezoneSystem: 'Utilitza la zona horària del sistema',
+ },
+ rows: {
+ fsrsDescription: 'Pesos del model expert',
+ languageDescription: 'Idioma de la interfície',
+ masteryHorizonDescription: 'Dies que una targeta ha de romandre recordable a la probabilitat objectiu o per sobre per comptar com a dominada',
+ newCardOrderDescription: 'Ordre de les targetes noves respecte als repassos',
+ newCardsPerDayDescription: 'Nombre màxim de targetes noves per dia',
+ reviewCardsPerDayDescription: 'Nombre màxim de targetes de repàs per dia',
+ targetRecallProbabilityDescription: 'Probabilitat mínima de record en el proper repàs programat',
+ timezoneDescription: 'Utilitza la zona horària automàtica o tria una ciutat.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Suprimeix permanentment',
+ empty: 'Buida',
+ emptyTrash: 'Buida la paperera',
+ restore: 'Restaura',
+ restoringItem: 'S\'està restaurant {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Això suprimeix "{{title}}" permanentment. No es pot desfer.',
+ deleteItemFallbackDescription: 'Això suprimeix aquest element permanentment. No es pot desfer.',
+ deleteItemFallbackTitle: 'Vols suprimir l\'element?',
+ deleteItemTitle: 'Vols suprimir "{{title}}"?',
+ emptyTrashDescription: 'Això suprimeix permanentment tot el que hi ha a la Paperera. No es pot desfer.',
+ emptyTrashTitle: 'Vols buidar la paperera?',
+ },
+ empty: {
+ description: 'Els elements que suprimeixis apareixeran aquí abans de l\'eliminació permanent.',
+ title: 'La paperera és buida',
+ },
+ errors: {
+ couldNotDeleteItem: 'No s\'ha pogut suprimir l\'element',
+ couldNotEmptyTrash: 'No s\'ha pogut buidar la paperera',
+ couldNotRestoreItem: 'No s\'ha pogut restaurar l\'element',
+ trashCouldNotLoad: 'No s\'ha pogut carregar la paperera',
+ trashMayBeOutOfDate: 'La paperera pot estar desactualitzada',
+ },
+ labels: {
+ deletedAge: 'Suprimit {{value}}',
+ itemCount_one: '{{count}} element',
+ itemCount_many: '{{count}} elements',
+ itemCount_other: '{{count}} elements',
+ lastEmptied: 'Buidada per última vegada {{value}}',
+ loadingTrash: 'S\'està carregant la Paperera',
+ originalLocation: 'Ubicació original: {{location}}',
+ title: 'Paperera',
+ trashActions: 'Accions de paperera de {{title}}',
+ },
+ kinds: {
+ deck: 'Baralla',
+ folder: 'Carpeta',
+ note: 'Nota',
+ workspace: 'Espai de treball',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Crea un espai de treball',
+ deleteWorkspace: 'Suprimeix l\'espai de treball',
+ editWorkspace: 'Edita l\'espai de treball',
+ newWorkspace: 'Espai de treball nou',
+ openWorkspace: 'Obre {{title}}',
+ openingWorkspace: 'S\'està obrint {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Context d\'estudi.',
+ editorVisual: 'Tria un ancoratge visual per a aquest espai de treball.',
+ emptyList: 'Separa baralles, notes i cues de repàs per context d\'estudi.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Això mou "{{title}}" a la Paperera. Pots restaurar-ho més tard.',
+ deleteWorkspaceFallbackDescription: 'Això mou aquest espai de treball a la Paperera. Pots restaurar-lo més tard.',
+ deleteWorkspaceFallbackTitle: 'Vols suprimir l\'espai de treball?',
+ deleteWorkspaceTitle: 'Vols suprimir "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Comença amb un espai de treball',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'No s\'ha pogut crear l\'espai de treball',
+ couldNotDeleteWorkspace: 'No s\'ha pogut suprimir l\'espai de treball',
+ couldNotOpenWorkspace: 'No s\'ha pogut obrir l\'espai de treball',
+ couldNotSaveWorkspace: 'No s\'ha pogut desar l\'espai de treball',
+ workspaceCouldNotLoad: 'No s\'ha pogut carregar l\'espai de treball',
+ workspacesCouldNotLoad: 'No s\'han pogut carregar els espais de treball',
+ },
+ fields: {
+ descriptionLabel: 'Descripció de l\'espai de treball',
+ descriptionPlaceholder: 'Què pertany a aquest espai de treball?',
+ namePlaceholder: 'Nom de l\'espai de treball',
+ untitledWorkspace: 'Espai de treball sense títol',
+ },
+ labels: {
+ createWorkspaceTitle: 'Crea un espai de treball',
+ loadingWorkspaces: 'S\'estan carregant els espais de treball',
+ workspace: 'Espai de treball',
+ workspaces: 'Espais de treball',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/cs.ts b/ui/src/core/i18n/resources/cs.ts
new file mode 100644
index 0000000..8fe8568
--- /dev/null
+++ b/ui/src/core/i18n/resources/cs.ts
@@ -0,0 +1,649 @@
+export const cs = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Zkuste to znovu. Pokud se to bude opakovat, znovu otevřete Clear.',
+ title: 'Nepodařilo se spustit',
+ },
+ loadingTitle: 'Připravuje se váš studijní prostor',
+ },
+ common: {
+ actions: {
+ back: 'Zpět',
+ cancel: 'Zrušit',
+ checkAgain: 'Zkontrolovat znovu',
+ close: 'Zavřít',
+ create: 'Vytvořit',
+ delete: 'Smazat',
+ dismissError: 'Zavřít chybu',
+ dismissStatus: 'Zavřít stav',
+ edit: 'Upravit',
+ itemActions: 'Akce pro {{title}}',
+ reset: 'Resetovat',
+ review: 'Opakovat',
+ save: 'Uložit',
+ saveChanges: 'Uložit změny',
+ tryAgain: 'Zkusit znovu',
+ },
+ labels: {
+ active: 'Aktivní',
+ clear: 'Clear',
+ custom: 'Vlastní',
+ default: 'Výchozí',
+ loadingEditor: 'Načítání editoru',
+ name: 'Název',
+ completedTask: 'Dokončený úkol',
+ description: 'Popis',
+ incompleteTask: 'Nedokončený úkol',
+ percentageInput: 'Procento pro {{label}}',
+ visual: 'Vizuál',
+ },
+ status: {
+ actionFailed: 'Akce se nezdařila',
+ actionInProgress: 'Akce probíhá',
+ },
+ sort: {
+ ascending: 'Vzest.',
+ column: 'Sloupec',
+ descending: 'Sest.',
+ direction: 'Směr',
+ sort: 'Řadit',
+ },
+ search: {
+ label: 'Hledat',
+ },
+ visualPicker: {
+ allLucideIcons: 'Všechny ikony Lucide',
+ browseIconsFor: 'Procházejte nebo hledejte ikony pro {{label}}.',
+ chooseIcon: 'Vybrat ikonu',
+ iconPicker: 'Výběr ikony pro {{label}}',
+ iconSearch: 'Hledání ikon pro {{label}}',
+ iconsCouldNotLoad: 'Ikony se nepodařilo načíst.',
+ loadingIcons: 'Načítání ikon',
+ loadingMoreIcons: 'Načítání dalších ikon',
+ moreIcons: 'Další ikony',
+ noIconsMatch: 'Žádné ikony neodpovídají "{{query}}".',
+ searchIconsPlaceholder: 'Hledat ikony…',
+ selectedIcon: 'Vybráno {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Vytvořit',
+ newDeck: 'Nový balíček',
+ newFolder: 'Nová složka',
+ },
+ descriptions: {
+ defaultWorkspace: 'Mějte balíčky, složky a poznámky pohromadě.',
+ emptyWorkspace: 'Vytvořte balíček a poté přidejte poznámky, abyste sestavili frontu opakování.',
+ emptyFolder: 'Vytvořte balíček a poté přidejte poznámky, abyste sestavili frontu opakování.',
+ searchPlaceholder: 'Hledat složky, balíčky a poznámky…',
+ },
+ empty: {
+ createFirstDeck: 'Vytvořte svůj první balíček',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Balíček se nepodařilo smazat',
+ couldNotDeleteFolder: 'Složku se nepodařilo smazat',
+ couldNotDeleteWorkspace: 'Pracovní prostor se nepodařilo smazat',
+ dashboardCouldNotOpen: 'Panel se nepodařilo otevřít',
+ decksCouldNotLoad: 'Balíčky se nepodařilo načíst',
+ decksMayBeOutOfDate: 'Balíčky mohou být zastaralé',
+ foldersCouldNotLoad: 'Složky se nepodařilo načíst',
+ foldersMayBeOutOfDate: 'Složky mohou být zastaralé',
+ workspaceCouldNotLoad: 'Pracovní prostor se nepodařilo načíst',
+ },
+ labels: {
+ dashboard: 'Panel',
+ loadingDashboard: 'Načítání panelu',
+ newItem: 'Nová položka',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Datum není k dispozici',
+ },
+ age: {
+ dayAgo_one: 'před {{count}} dnem',
+ dayAgo_few: 'před {{count}} dny',
+ dayAgo_many: 'před {{count}} dne',
+ dayAgo_other: 'před {{count}} dny',
+ hourAgo_one: 'před {{count}} hodinou',
+ hourAgo_few: 'před {{count}} hodinami',
+ hourAgo_many: 'před {{count}} hodiny',
+ hourAgo_other: 'před {{count}} hodinami',
+ justNow: 'právě teď',
+ minuteAgo_one: 'před {{count}} minutou',
+ minuteAgo_few: 'před {{count}} minutami',
+ minuteAgo_many: 'před {{count}} minuty',
+ minuteAgo_other: 'před {{count}} minutami',
+ unavailable: 'datum není k dispozici',
+ weekAgo_one: 'před {{count}} týdnem',
+ weekAgo_few: 'před {{count}} týdny',
+ weekAgo_many: 'před {{count}} týdne',
+ weekAgo_other: 'před {{count}} týdny',
+ },
+ labels: {
+ deleted: 'Smazáno {{value}}',
+ due: 'Termín: {{value}}',
+ reviewed: 'Opakováno: {{value}}',
+ updated: 'Aktualizováno {{value}}',
+ updatedUppercase: 'AKTUALIZOVÁNO {{value}}',
+ },
+ relative: {
+ dayAgo_one: 'před {{count}} dnem',
+ dayAgo_few: 'před {{count}} dny',
+ dayAgo_many: 'před {{count}} dne',
+ dayAgo_other: 'před {{count}} dny',
+ inAMoment: 'Za chvíli',
+ inDay_one: 'Za {{count}} den',
+ inDay_few: 'Za {{count}} dny',
+ inDay_many: 'Za {{count}} dne',
+ inDay_other: 'Za {{count}} dní',
+ inMonth_one: 'Za {{count}} měsíc',
+ inMonth_few: 'Za {{count}} měsíce',
+ inMonth_many: 'Za {{count}} měsíce',
+ inMonth_other: 'Za {{count}} měsíců',
+ inWeek_one: 'Za {{count}} týden',
+ inWeek_few: 'Za {{count}} týdny',
+ inWeek_many: 'Za {{count}} týdne',
+ inWeek_other: 'Za {{count}} týdnů',
+ justNow: 'Právě teď',
+ monthAgo_one: 'před {{count}} měsícem',
+ monthAgo_few: 'před {{count}} měsíci',
+ monthAgo_many: 'před {{count}} měsíce',
+ monthAgo_other: 'před {{count}} měsíci',
+ secondsAgoShort: 'před {{count}} s',
+ minutesAgoShort: 'před {{count}} min',
+ hoursAgoShort: 'před {{count}} h',
+ today: 'Dnes',
+ tomorrow: 'Zítra',
+ weekAgo_one: 'před {{count}} týdnem',
+ weekAgo_few: 'před {{count}} týdny',
+ weekAgo_many: 'před {{count}} týdne',
+ weekAgo_other: 'před {{count}} týdny',
+ yesterday: 'Včera',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Akce pro {{title}}',
+ createDeck: 'Vytvořit balíček',
+ createNote: 'Vytvořit poznámku',
+ deleteDeck: 'Smazat balíček',
+ editDeck: 'Upravit balíček',
+ newNote: 'Nová poznámka',
+ openDeck: 'Otevřít balíček {{title}}',
+ saveDeck: 'Balíček se nepodařilo uložit',
+ studyNow: 'Studovat teď',
+ },
+ descriptions: {
+ emptyDeck: 'Přidejte poznámku, aby měl tento balíček materiál k opakování.',
+ editorDefault: 'Zaměřený studijní balíček.',
+ editorVisual: 'Vyberte krycí symbol pro tento balíček.',
+ notesSearchPlaceholder: 'Hledat poznámky…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Tím se "{{title}}" přesune do Koše. Později ho můžete obnovit.',
+ deleteDeckFallbackDescription: 'Tím se tento balíček přesune do Koše. Později ho můžete obnovit.',
+ deleteDeckFallbackTitle: 'Smazat balíček?',
+ deleteDeckTitle: 'Smazat "{{title}}"?',
+ deleteNoteDescription: 'Tím se "{{title}}" přesune do Koše. Později ji můžete obnovit.',
+ deleteNoteFallbackTitle: 'Smazat poznámku?',
+ deleteNoteTitle: 'Smazat "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Žádné odpovídající poznámky',
+ noMatchingNotesDescription: 'Žádné poznámky neodpovídají "{{query}}".',
+ thisDeckIsEmpty: 'Tento balíček je prázdný',
+ },
+ errors: {
+ couldNotCreateDeck: 'Balíček se nepodařilo vytvořit',
+ couldNotDeleteDeck: 'Balíček se nepodařilo smazat',
+ couldNotDeleteNote: 'Poznámku se nepodařilo smazat',
+ couldNotLoadFolderPath: 'Cestu ke složce se nepodařilo načíst',
+ couldNotSaveDeck: 'Balíček se nepodařilo uložit',
+ deckCouldNotLoad: 'Balíček se nepodařilo načíst',
+ notesCouldNotLoad: 'Poznámky se nepodařilo načíst',
+ notesMayBeOutOfDate: 'Poznámky mohou být zastaralé',
+ },
+ fields: {
+ descriptionLabel: 'Popis balíčku',
+ descriptionPlaceholder: 'Co vám tento balíček pomůže opakovat?',
+ namePlaceholder: 'Název balíčku',
+ untitledDeck: 'Balíček bez názvu',
+ untitledDeckLower: 'balíček bez názvu',
+ },
+ labels: {
+ createDeckTitle: 'Vytvořit balíček',
+ deck: 'Balíček',
+ deckNotesSearch: 'Hledání poznámek v balíčku',
+ deckOverview: 'Přehled balíčku',
+ decks: 'Balíčky',
+ due: 'Termín',
+ dueToday: 'Termín dnes',
+ loadingDeck: 'Načítání balíčku',
+ mastery: 'Zvládnutí',
+ notes: 'Poznámky',
+ },
+ sort: {
+ ariaLabel: 'Řadit balíčky',
+ dueToday: 'Termín dnes',
+ title: 'Název',
+ updated: 'Aktualizováno',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Data se změnila. Obnovte je a zkuste to znovu.',
+ forbidden: 'K této akci nemáte oprávnění.',
+ notFound: 'Tuto položku se nepodařilo najít.',
+ offline: 'Službu nelze kontaktovat.',
+ timeout: 'Trvá to příliš dlouho. Zkuste to znovu.',
+ unauthorized: 'Pro pokračování se přihlaste.',
+ unavailable: 'Služba je dočasně nedostupná.',
+ },
+ fallback: {
+ unexpected: 'Neočekávaná chyba',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Vytvořit složku',
+ deleteFolder: 'Smazat složku',
+ editFolder: 'Upravit složku',
+ },
+ descriptions: {
+ editorDefault: 'Složka pro související balíčky.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Tím se "{{name}}" přesune do Koše. Později ji můžete obnovit.',
+ deleteFolderFallbackDescription: 'Tím se tato složka přesune do Koše. Později ji můžete obnovit.',
+ deleteFolderFallbackTitle: 'Smazat složku?',
+ deleteFolderTitle: 'Smazat "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'V této složce nejsou žádné shody',
+ noMatchesInFolderDescription: 'Žádné složky, balíčky ani poznámky neodpovídají "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Složku se nepodařilo vytvořit',
+ couldNotDeleteFolder: 'Složku se nepodařilo smazat',
+ couldNotLoadFolderPath: 'Cestu ke složce se nepodařilo načíst',
+ couldNotSaveFolder: 'Složku se nepodařilo uložit',
+ folderCouldNotLoad: 'Složku se nepodařilo načíst',
+ },
+ fields: {
+ descriptionLabel: 'Popis složky',
+ descriptionPlaceholder: 'Co patří do této složky?',
+ namePlaceholder: 'Název složky',
+ untitledFolder: 'Složka bez názvu',
+ },
+ labels: {
+ createFolderTitle: 'Vytvořit složku',
+ folder: 'Složka',
+ folders: 'Složky',
+ loadingFolder: 'Načítání složky',
+ name: 'Název',
+ updated: 'Aktualizováno',
+ },
+ sort: {
+ ariaLabel: 'Řadit složky',
+ name: 'Název',
+ updated: 'Aktualizováno',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Pokud se místní a synchronizovaná data budou lišit, položka se objeví zde.',
+ heading: 'Stav synchronizace',
+ title: 'Konflikty',
+ noConflicts: 'Nebyly nalezeny žádné konflikty',
+ },
+ labels: {
+ menu: 'Menu',
+ },
+ sections: {
+ settings: {
+ description: 'Přizpůsobte si prostředí a předvolby',
+ title: 'Nastavení',
+ },
+ trash: {
+ description: 'Obnovte nebo trvale smažte odebrané položky',
+ title: 'Koš',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Zavřít editor',
+ openActions: 'Otevřít akce',
+ openWorkspaces: 'Otevřít pracovní prostory',
+ },
+ items: {
+ home: 'Domů',
+ menu: 'Menu',
+ primary: 'Primární',
+ settings: 'Nastavení',
+ spaces: 'Prostory',
+ trash: 'Koš',
+ workspaces: 'Pracovní prostory',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Přidat cloze',
+ deleteNote: 'Smazat poznámku',
+ editNote: 'Upravit poznámku',
+ hideDerivedCardsNote: 'Skrýt poznámku k odvozeným kartám',
+ openNote: 'Otevřít {{title}}',
+ saveNote: 'Uložit poznámku',
+ showDerivedCardsNote: 'Zobrazit poznámku k odvozeným kartám',
+ },
+ descriptions: {
+ clozeFormat: 'Každá skrytá část se po uložení stane kartou k opakování.',
+ clozeFormatPrefix: 'Skrytý text obalte pomocí',
+ derivedCardsHelper: 'Poznámky jsou zdrojem pravdy pro odvozené karty.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Tím se "{{title}}" přesune do Koše. Později ji můžete obnovit.',
+ deleteNoteFallbackDescription: 'Tím se tato poznámka přesune do Koše. Později ji můžete obnovit.',
+ deleteNoteFallbackTitle: 'Smazat poznámku?',
+ deleteNoteTitle: 'Smazat "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Poznámku se nepodařilo vytvořit',
+ couldNotDeleteNote: 'Poznámku se nepodařilo smazat',
+ couldNotSaveNote: 'Poznámku se nepodařilo uložit',
+ noteCouldNotLoad: 'Poznámku se nepodařilo načíst',
+ },
+ fields: {
+ back: 'Zadní strana',
+ backPlaceholder: 'Zadejte zadní stranu',
+ bodyPlaceholder: 'Napište tělo poznámky s cloze vynechávkami…',
+ front: 'Přední strana',
+ frontPlaceholder: 'Zadejte přední stranu',
+ noteBody: 'Tělo poznámky',
+ title: 'Název',
+ titlePlaceholder: 'Přidejte název poznámky',
+ untitledCloze: 'Cloze bez názvu',
+ untitledNote: 'Poznámka bez názvu',
+ },
+ labels: {
+ backUppercase: 'ZADNÍ STRANA',
+ basic: 'Základní',
+ basicLower: 'základní',
+ basicUppercase: 'ZÁKLADNÍ',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Formát cloze',
+ clozeUppercase: 'CLOZE',
+ deck: 'Balíček',
+ derivedCards: 'ODVOZENÉ KARTY',
+ due: 'Termín',
+ frontUppercase: 'PŘEDNÍ STRANA',
+ inProgress: 'Probíhá',
+ inProgressUppercase: 'PROBÍHÁ',
+ loadingNote: 'Načítání poznámky',
+ loadingNoteEditor: 'Načítání editoru poznámek',
+ markdownFormatting: 'Formátování Markdown',
+ mastered: 'Zvládnuto',
+ masteredUppercase: 'ZVLÁDNUTO',
+ newNote: 'Nová poznámka',
+ noteBody: 'TĚLO POZNÁMKY',
+ noteContent: 'Obsah poznámky',
+ noteDetails: 'Podrobnosti poznámky',
+ noteMetadata: 'Metadata poznámky',
+ noteType: 'Typ poznámky',
+ notes: 'Poznámky',
+ reviewed: 'Opakováno',
+ studyProgress: 'Průběh studia',
+ studyProgressUppercase: 'PRŮBĚH STUDIA',
+ titleUppercase: 'NÁZEV',
+ updated: 'Aktualizováno',
+ },
+ sort: {
+ ariaLabel: 'Řadit poznámky',
+ title: 'Název',
+ updated: 'Aktualizováno',
+ },
+ toolbar: {
+ bold: 'Tučně',
+ italic: 'Kurzíva',
+ link: 'Odkaz',
+ list: 'Seznam',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Znovu',
+ backToDeck: 'Zpět na balíček',
+ continueReview: 'Pokračovat v opakování',
+ easy: 'Snadné',
+ good: 'Dobré',
+ hard: 'Těžké',
+ newNote: 'Nová poznámka',
+ showAnswer: 'Zobrazit odpověď',
+ },
+ errors: {
+ couldNotGradeCard: 'Kartu se nepodařilo ohodnotit',
+ reviewCouldNotLoad: 'Opakování se nepodařilo načíst',
+ reviewCouldNotStart: 'Opakování se nepodařilo spustit',
+ summaryCouldNotLoad: 'Souhrn opakování se nepodařilo načíst',
+ summaryNotAvailable: 'Souhrn opakování není k dispozici',
+ summaryNotComplete: 'Toto opakování ještě není dokončené.',
+ },
+ labels: {
+ cardsReviewed: 'Opakované karty',
+ deck: 'Balíček',
+ duration: 'Doba trvání',
+ loadingReview: 'Načítání opakování',
+ loadingSummary: 'Načítání souhrnu',
+ progress: 'Průběh opakování',
+ review: 'Opakování',
+ reviewComplete: 'Opakování dokončeno',
+ reviewed_one: 'Opakována {{count}}',
+ reviewed_few: 'Opakovány {{count}}',
+ reviewed_many: 'Opakováno {{count}}',
+ reviewed_other: 'Opakováno {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} h {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'Váš postup byl uložen do tohoto balíčku.',
+ },
+ unavailable: {
+ description: 'Přidejte poznámku, aby tento balíček mohl vstoupit do fronty opakování.',
+ title: 'Žádné karty k opakování',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Vymazat hledání',
+ },
+ empty: {
+ noMatchesInWorkspace: 'V tomto pracovním prostoru nejsou žádné shody',
+ noMatchesInWorkspaceDescription: 'Žádné složky, balíčky ani poznámky neodpovídají "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Hledání se nepodařilo dokončit',
+ },
+ labels: {
+ results: 'Výsledky hledání',
+ resultsFor: 'Výsledky pro "{{query}}"',
+ searchingContent: 'Hledání obsahu',
+ },
+ resultGroups: {
+ deck: 'Balíčky',
+ folder: 'Složky',
+ note: 'Poznámky',
+ },
+ resultKinds: {
+ deck: 'balíček',
+ folder: 'složka',
+ note: 'poznámka',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Resetovat všechna nastavení',
+ resetSettings: 'Resetovat nastavení',
+ resetToDefaults: 'Obnovit výchozí',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Vložte platný JSON s 21 číselnými hodnotami.',
+ fsrsErrorInvalidParams_one: 'Zadejte pole JSON s přesně {{count}} konečným číslem.',
+ fsrsErrorInvalidParams_few: 'Zadejte pole JSON s přesně {{count}} konečnými čísly.',
+ fsrsErrorInvalidParams_many: 'Zadejte pole JSON s přesně {{count}} konečného čísla.',
+ fsrsErrorInvalidParams_other: 'Zadejte pole JSON s přesně {{count}} konečnými čísly.',
+ fsrsHelper: 'Toto je expertní přepsání. Hodnoty musí zůstat ve správném pořadí.',
+ fsrsJsonLabel: 'JSON parametrů FSRS',
+ fsrsTitle: 'Upravit parametry FSRS',
+ fsrsDescription: 'Vložte pole JSON s 21 čísly, kterým přepíšete váhy scheduler.',
+ resetDescription: 'Tím se obnoví časové pásmo, studijní limity a nastavení FSRS.',
+ resetDescriptionWithLanguage: 'Tím se obnoví jazyk, časové pásmo, studijní limity a nastavení FSRS.',
+ resetTitle: 'Resetovat všechna nastavení?',
+ timezoneDescription: 'Vyhledejte město nebo identifikátor časového pásma.',
+ timezoneSearchLabel: 'Hledat časová pásma',
+ timezoneSearchPlaceholder: 'Hledat časová pásma…',
+ timezoneTitle: 'Vybrat časové pásmo',
+ },
+ errors: {
+ couldNotResetSettings: 'Nastavení se nepodařilo resetovat',
+ couldNotSaveSettings: 'Nastavení se nepodařilo uložit',
+ settingsCouldNotLoad: 'Nastavení se nepodařilo načíst',
+ settingsUnavailable: 'Nastavení nejsou k dispozici.',
+ },
+ labels: {
+ appearance: 'Vzhled',
+ automatic: 'Automaticky',
+ fsrsParameters: 'Parametry FSRS',
+ general: 'Obecné',
+ language: 'Jazyk',
+ loadingSettings: 'Načítání nastavení',
+ masteryHorizon: 'Horizont zvládnutí',
+ newCardOrder: 'Pořadí nových karet',
+ newCardsPerDay: 'Nové karty za den',
+ reviewCardsPerDay: 'Karty k opakování za den',
+ savingSettings: 'Ukládání nastavení',
+ schedule: 'Rozvrh',
+ searchNoTimezones: 'Žádná odpovídající časová pásma.',
+ settings: 'Nastavení',
+ settingsReset: 'Nastavení resetována',
+ study: 'Studium',
+ targetRecallProbability: 'Cílová pravděpodobnost vybavení',
+ theme: 'Motiv',
+ timezone: 'Časové pásmo',
+ },
+ options: {
+ languageEnUs: 'Angličtina (USA)',
+ newCardsAfterReviews: 'Po opakováních',
+ newCardsBeforeReviews: 'Před opakováními',
+ newCardsMixed: 'Smíšené',
+ themeDark: 'Tmavý',
+ themeLight: 'Světlý',
+ themeSystem: 'Systémový',
+ timezoneSystem: 'Použít systémové časové pásmo',
+ },
+ rows: {
+ fsrsDescription: 'Váhy expertního modelu',
+ languageDescription: 'Jazyk rozhraní',
+ masteryHorizonDescription: 'Počet dní, po které musí karta zůstat vybavitelná na cílové pravděpodobnosti nebo výše, aby se počítala jako zvládnutá',
+ newCardOrderDescription: 'Pořadí nových karet vůči opakováním',
+ newCardsPerDayDescription: 'Maximum nových karet za den',
+ reviewCardsPerDayDescription: 'Maximum karet k opakování za den',
+ targetRecallProbabilityDescription: 'Minimální pravděpodobnost vybavení při příštím naplánovaném opakování',
+ timezoneDescription: 'Použijte automatické časové pásmo nebo vyberte město.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Smazat trvale',
+ empty: 'Vyprázdnit',
+ emptyTrash: 'Vyprázdnit koš',
+ restore: 'Obnovit',
+ restoringItem: 'Obnovování {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Tím se "{{title}}" trvale smaže. Tuto akci nelze vrátit zpět.',
+ deleteItemFallbackDescription: 'Tím se tato položka trvale smaže. Tuto akci nelze vrátit zpět.',
+ deleteItemFallbackTitle: 'Smazat položku?',
+ deleteItemTitle: 'Smazat "{{title}}"?',
+ emptyTrashDescription: 'Tím se trvale smaže vše v Koši. Tuto akci nelze vrátit zpět.',
+ emptyTrashTitle: 'Vyprázdnit koš?',
+ },
+ empty: {
+ description: 'Položky, které smažete, se před trvalým odstraněním zobrazí zde.',
+ title: 'Koš je prázdný',
+ },
+ errors: {
+ couldNotDeleteItem: 'Položku se nepodařilo smazat',
+ couldNotEmptyTrash: 'Koš se nepodařilo vyprázdnit',
+ couldNotRestoreItem: 'Položku se nepodařilo obnovit',
+ trashCouldNotLoad: 'Koš se nepodařilo načíst',
+ trashMayBeOutOfDate: 'Koš může být zastaralý',
+ },
+ labels: {
+ deletedAge: 'Smazáno {{value}}',
+ itemCount_one: '{{count}} položka',
+ itemCount_few: '{{count}} položky',
+ itemCount_many: '{{count}} položky',
+ itemCount_other: '{{count}} položek',
+ lastEmptied: 'Naposledy vyprázdněno {{value}}',
+ loadingTrash: 'Načítání Koše',
+ originalLocation: 'Původní umístění: {{location}}',
+ title: 'Koš',
+ trashActions: 'Akce koše pro {{title}}',
+ },
+ kinds: {
+ deck: 'Balíček',
+ folder: 'Složka',
+ note: 'Poznámka',
+ workspace: 'Pracovní prostor',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Vytvořit pracovní prostor',
+ deleteWorkspace: 'Smazat pracovní prostor',
+ editWorkspace: 'Upravit pracovní prostor',
+ newWorkspace: 'Nový pracovní prostor',
+ openWorkspace: 'Otevřít {{title}}',
+ openingWorkspace: 'Otevírání {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Studijní kontext.',
+ editorVisual: 'Vyberte vizuální kotvu pro tento pracovní prostor.',
+ emptyList: 'Oddělte balíčky, poznámky a fronty opakování podle studijního kontextu.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Tím se "{{title}}" přesune do Koše. Později ho můžete obnovit.',
+ deleteWorkspaceFallbackDescription: 'Tím se tento pracovní prostor přesune do Koše. Později ho můžete obnovit.',
+ deleteWorkspaceFallbackTitle: 'Smazat pracovní prostor?',
+ deleteWorkspaceTitle: 'Smazat "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Začněte pracovním prostorem',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Pracovní prostor se nepodařilo vytvořit',
+ couldNotDeleteWorkspace: 'Pracovní prostor se nepodařilo smazat',
+ couldNotOpenWorkspace: 'Pracovní prostor se nepodařilo otevřít',
+ couldNotSaveWorkspace: 'Pracovní prostor se nepodařilo uložit',
+ workspaceCouldNotLoad: 'Pracovní prostor se nepodařilo načíst',
+ workspacesCouldNotLoad: 'Pracovní prostory se nepodařilo načíst',
+ },
+ fields: {
+ descriptionLabel: 'Popis pracovního prostoru',
+ descriptionPlaceholder: 'Co patří do tohoto pracovního prostoru?',
+ namePlaceholder: 'Název pracovního prostoru',
+ untitledWorkspace: 'Pracovní prostor bez názvu',
+ },
+ labels: {
+ createWorkspaceTitle: 'Vytvořit pracovní prostor',
+ loadingWorkspaces: 'Načítání pracovních prostorů',
+ workspace: 'Pracovní prostor',
+ workspaces: 'Pracovní prostory',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/da.ts b/ui/src/core/i18n/resources/da.ts
new file mode 100644
index 0000000..75cd673
--- /dev/null
+++ b/ui/src/core/i18n/resources/da.ts
@@ -0,0 +1,623 @@
+export const da = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Prøv igen. Hvis det bliver ved, skal du åbne Clear igen.',
+ title: 'Kunne ikke starte',
+ },
+ loadingTitle: 'Forbereder dit studieområde',
+ },
+ common: {
+ actions: {
+ back: 'Tilbage',
+ cancel: 'Annuller',
+ checkAgain: 'Tjek igen',
+ close: 'Luk',
+ create: 'Opret',
+ delete: 'Slet',
+ dismissError: 'Afvis fejl',
+ dismissStatus: 'Afvis status',
+ edit: 'Rediger',
+ itemActions: 'Handlinger for {{title}}',
+ reset: 'Nulstil',
+ review: 'Gentag',
+ save: 'Gem',
+ saveChanges: 'Gem ændringer',
+ tryAgain: 'Prøv igen',
+ },
+ labels: {
+ active: 'Aktiv',
+ clear: 'Clear',
+ custom: 'Tilpasset',
+ default: 'Standard',
+ loadingEditor: 'Indlæser editor',
+ name: 'Navn',
+ completedTask: 'Fuldført opgave',
+ description: 'Beskrivelse',
+ incompleteTask: 'Ufuldført opgave',
+ percentageInput: '{{label}} i procent',
+ visual: 'Visuel',
+ },
+ status: {
+ actionFailed: 'Handlingen mislykkedes',
+ actionInProgress: 'Handling i gang',
+ },
+ sort: {
+ ascending: 'Stig.',
+ column: 'Kolonne',
+ descending: 'Fald.',
+ direction: 'Retning',
+ sort: 'Sortér',
+ },
+ search: {
+ label: 'Søg',
+ },
+ visualPicker: {
+ allLucideIcons: 'Alle Lucide-ikoner',
+ browseIconsFor: 'Gennemse eller søg efter ikoner til {{label}}.',
+ chooseIcon: 'Vælg ikon',
+ iconPicker: 'Ikonvælger til {{label}}',
+ iconSearch: 'Ikonsøgning til {{label}}',
+ iconsCouldNotLoad: 'Ikonerne kunne ikke indlæses.',
+ loadingIcons: 'Indlæser ikoner',
+ loadingMoreIcons: 'Indlæser flere ikoner',
+ moreIcons: 'Flere ikoner',
+ noIconsMatch: 'Ingen ikoner matcher "{{query}}".',
+ searchIconsPlaceholder: 'Søg efter ikoner…',
+ selectedIcon: '{{label}} valgt',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Opret',
+ newDeck: 'Nyt kortsæt',
+ newFolder: 'Ny mappe',
+ },
+ descriptions: {
+ defaultWorkspace: 'Hold kortsæt, mapper og noter samlet.',
+ emptyWorkspace: 'Opret et kortsæt, og tilføj derefter noter for at opbygge din gentagelseskø.',
+ emptyFolder: 'Opret et kortsæt, og tilføj derefter noter for at opbygge en gentagelseskø.',
+ searchPlaceholder: 'Søg efter mapper, kortsæt og noter…',
+ },
+ empty: {
+ createFirstDeck: 'Opret dit første kortsæt',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Kortsættet kunne ikke slettes',
+ couldNotDeleteFolder: 'Mappen kunne ikke slettes',
+ couldNotDeleteWorkspace: 'Arbejdsområdet kunne ikke slettes',
+ dashboardCouldNotOpen: 'Dashboardet kunne ikke åbnes',
+ decksCouldNotLoad: 'Kortsæt kunne ikke indlæses',
+ decksMayBeOutOfDate: 'Kortsæt kan være forældede',
+ foldersCouldNotLoad: 'Mapper kunne ikke indlæses',
+ foldersMayBeOutOfDate: 'Mapper kan være forældede',
+ workspaceCouldNotLoad: 'Arbejdsområdet kunne ikke indlæses',
+ },
+ labels: {
+ dashboard: 'Dashboard',
+ loadingDashboard: 'Indlæser dashboard',
+ newItem: 'Nyt element',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Dato utilgængelig',
+ },
+ age: {
+ dayAgo_one: '{{count}} dag siden',
+ dayAgo_other: '{{count}} dage siden',
+ hourAgo_one: '{{count}} time siden',
+ hourAgo_other: '{{count}} timer siden',
+ justNow: 'lige nu',
+ minuteAgo_one: '{{count}} minut siden',
+ minuteAgo_other: '{{count}} minutter siden',
+ unavailable: 'dato utilgængelig',
+ weekAgo_one: '{{count}} uge siden',
+ weekAgo_other: '{{count}} uger siden',
+ },
+ labels: {
+ deleted: 'Slettet {{value}}',
+ due: 'Forfalder: {{value}}',
+ reviewed: 'Gentaget: {{value}}',
+ updated: 'Opdateret {{value}}',
+ updatedUppercase: 'OPDATERET {{value}}',
+ },
+ relative: {
+ dayAgo_one: '{{count}} dag siden',
+ dayAgo_other: '{{count}} dage siden',
+ inAMoment: 'Om et øjeblik',
+ inDay_one: 'Om {{count}} dag',
+ inDay_other: 'Om {{count}} dage',
+ inMonth_one: 'Om {{count}} måned',
+ inMonth_other: 'Om {{count}} måneder',
+ inWeek_one: 'Om {{count}} uge',
+ inWeek_other: 'Om {{count}} uger',
+ justNow: 'Lige nu',
+ monthAgo_one: '{{count}} måned siden',
+ monthAgo_other: '{{count}} måneder siden',
+ secondsAgoShort: '{{count}} s siden',
+ minutesAgoShort: '{{count}} min siden',
+ hoursAgoShort: '{{count}} t siden',
+ today: 'I dag',
+ tomorrow: 'I morgen',
+ weekAgo_one: '{{count}} uge siden',
+ weekAgo_other: '{{count}} uger siden',
+ yesterday: 'I går',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Handlinger for {{title}}',
+ createDeck: 'Opret kortsæt',
+ createNote: 'Opret note',
+ deleteDeck: 'Slet kortsæt',
+ editDeck: 'Rediger kortsæt',
+ newNote: 'Ny note',
+ openDeck: 'Åbn kortsættet {{title}}',
+ saveDeck: 'Kortsættet kunne ikke gemmes',
+ studyNow: 'Studér nu',
+ },
+ descriptions: {
+ emptyDeck: 'Tilføj en note, så dette kortsæt har materiale til gentagelse.',
+ editorDefault: 'Fokuseret studiekortsæt.',
+ editorVisual: 'Vælg et omslagssymbol til dette kortsæt.',
+ notesSearchPlaceholder: 'Søg i noter…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Dette flytter "{{title}}" til Papirkurv. Du kan gendanne det senere.',
+ deleteDeckFallbackDescription: 'Dette flytter dette kortsæt til Papirkurv. Du kan gendanne det senere.',
+ deleteDeckFallbackTitle: 'Slet kortsæt?',
+ deleteDeckTitle: 'Slet "{{title}}"?',
+ deleteNoteDescription: 'Dette flytter "{{title}}" til Papirkurv. Du kan gendanne den senere.',
+ deleteNoteFallbackTitle: 'Slet note?',
+ deleteNoteTitle: 'Slet "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Ingen matchende noter',
+ noMatchingNotesDescription: 'Ingen noter matchede "{{query}}".',
+ thisDeckIsEmpty: 'Dette kortsæt er tomt',
+ },
+ errors: {
+ couldNotCreateDeck: 'Kortsættet kunne ikke oprettes',
+ couldNotDeleteDeck: 'Kortsættet kunne ikke slettes',
+ couldNotDeleteNote: 'Noten kunne ikke slettes',
+ couldNotLoadFolderPath: 'Mappestien kunne ikke indlæses',
+ couldNotSaveDeck: 'Kortsættet kunne ikke gemmes',
+ deckCouldNotLoad: 'Kortsættet kunne ikke indlæses',
+ notesCouldNotLoad: 'Noter kunne ikke indlæses',
+ notesMayBeOutOfDate: 'Noter kan være forældede',
+ },
+ fields: {
+ descriptionLabel: 'Beskrivelse af kortsæt',
+ descriptionPlaceholder: 'Hvad skal dette kortsæt hjælpe dig med at gentage?',
+ namePlaceholder: 'Navn på kortsæt',
+ untitledDeck: 'Kortsæt uden titel',
+ untitledDeckLower: 'kortsæt uden titel',
+ },
+ labels: {
+ createDeckTitle: 'Opret kortsæt',
+ deck: 'Kortsæt',
+ deckNotesSearch: 'Søg i kortsætnoter',
+ deckOverview: 'Oversigt over kortsæt',
+ decks: 'Kortsæt',
+ due: 'Forfalder',
+ dueToday: 'Forfalder i dag',
+ loadingDeck: 'Indlæser kortsæt',
+ mastery: 'Beherskelse',
+ notes: 'Noter',
+ },
+ sort: {
+ ariaLabel: 'Sortér kortsæt',
+ dueToday: 'Forfalder i dag',
+ title: 'Titel',
+ updated: 'Opdateret',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Dataene blev ændret. Opdater, og prøv igen.',
+ forbidden: 'Du har ikke tilladelse til dette.',
+ notFound: 'Vi kunne ikke finde dette element.',
+ offline: 'Kan ikke nå tjenesten.',
+ timeout: 'Dette tog for lang tid. Prøv igen.',
+ unauthorized: 'Log ind for at fortsætte.',
+ unavailable: 'Tjenesten er midlertidigt utilgængelig.',
+ },
+ fallback: {
+ unexpected: 'Uventet fejl',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Opret mappe',
+ deleteFolder: 'Slet mappe',
+ editFolder: 'Rediger mappe',
+ },
+ descriptions: {
+ editorDefault: 'Mappe til relaterede kortsæt.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Dette flytter "{{name}}" til Papirkurv. Du kan gendanne den senere.',
+ deleteFolderFallbackDescription: 'Dette flytter denne mappe til Papirkurv. Du kan gendanne den senere.',
+ deleteFolderFallbackTitle: 'Slet mappe?',
+ deleteFolderTitle: 'Slet "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'Ingen match i denne mappe',
+ noMatchesInFolderDescription: 'Ingen mapper, kortsæt eller noter matchede "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Mappen kunne ikke oprettes',
+ couldNotDeleteFolder: 'Mappen kunne ikke slettes',
+ couldNotLoadFolderPath: 'Mappestien kunne ikke indlæses',
+ couldNotSaveFolder: 'Mappen kunne ikke gemmes',
+ folderCouldNotLoad: 'Mappen kunne ikke indlæses',
+ },
+ fields: {
+ descriptionLabel: 'Mappebeskrivelse',
+ descriptionPlaceholder: 'Hvad hører hjemme i denne mappe?',
+ namePlaceholder: 'Mappenavn',
+ untitledFolder: 'Mappe uden titel',
+ },
+ labels: {
+ createFolderTitle: 'Opret mappe',
+ folder: 'Mappe',
+ folders: 'Mapper',
+ loadingFolder: 'Indlæser mappe',
+ name: 'Navn',
+ updated: 'Opdateret',
+ },
+ sort: {
+ ariaLabel: 'Sortér mapper',
+ name: 'Navn',
+ updated: 'Opdateret',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Hvis lokale og synkroniserede data nogensinde er forskellige, vises elementet her.',
+ heading: 'Synkroniseringsstatus',
+ title: 'Konflikter',
+ noConflicts: 'Ingen konflikter fundet',
+ },
+ labels: {
+ menu: 'Menu',
+ },
+ sections: {
+ settings: {
+ description: 'Tilpas dit miljø og dine præferencer',
+ title: 'Indstillinger',
+ },
+ trash: {
+ description: 'Gendan eller slet fjernede elementer permanent',
+ title: 'Papirkurv',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Luk editor',
+ openActions: 'Åbn handlinger',
+ openWorkspaces: 'Åbn arbejdsområder',
+ },
+ items: {
+ home: 'Hjem',
+ menu: 'Menu',
+ primary: 'Primær',
+ settings: 'Indstillinger',
+ spaces: 'Områder',
+ trash: 'Papirkurv',
+ workspaces: 'Arbejdsområder',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Tilføj cloze',
+ deleteNote: 'Slet note',
+ editNote: 'Rediger note',
+ hideDerivedCardsNote: 'Skjul note om afledte kort',
+ openNote: 'Åbn {{title}}',
+ saveNote: 'Gem note',
+ showDerivedCardsNote: 'Vis note om afledte kort',
+ },
+ descriptions: {
+ clozeFormat: 'Hver skjult del bliver til et gentagelseskort, når du gemmer.',
+ clozeFormatPrefix: 'Ombryd skjult tekst med',
+ derivedCardsHelper: 'Noter er sandhedskilden for afledte kort.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Dette flytter "{{title}}" til Papirkurv. Du kan gendanne den senere.',
+ deleteNoteFallbackDescription: 'Dette flytter denne note til Papirkurv. Du kan gendanne den senere.',
+ deleteNoteFallbackTitle: 'Slet note?',
+ deleteNoteTitle: 'Slet "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Noten kunne ikke oprettes',
+ couldNotDeleteNote: 'Noten kunne ikke slettes',
+ couldNotSaveNote: 'Noten kunne ikke gemmes',
+ noteCouldNotLoad: 'Noten kunne ikke indlæses',
+ },
+ fields: {
+ back: 'Bagside',
+ backPlaceholder: 'Indtast bagside',
+ bodyPlaceholder: 'Skriv notens indhold med cloze-sletninger…',
+ front: 'Forside',
+ frontPlaceholder: 'Indtast forside',
+ noteBody: 'Noteindhold',
+ title: 'Titel',
+ titlePlaceholder: 'Tilføj en notetitel',
+ untitledCloze: 'Cloze uden titel',
+ untitledNote: 'Note uden titel',
+ },
+ labels: {
+ backUppercase: 'BAGSIDE',
+ basic: 'Grundlæggende',
+ basicLower: 'grundlæggende',
+ basicUppercase: 'GRUNDLÆGGENDE',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Cloze-format',
+ clozeUppercase: 'CLOZE',
+ deck: 'Kortsæt',
+ derivedCards: 'AFLEDTE KORT',
+ due: 'Forfalder',
+ frontUppercase: 'FORSIDE',
+ inProgress: 'I gang',
+ inProgressUppercase: 'I GANG',
+ loadingNote: 'Indlæser note',
+ loadingNoteEditor: 'Indlæser noteeditor',
+ markdownFormatting: 'Markdown-formatering',
+ mastered: 'Behersket',
+ masteredUppercase: 'BEHERSKET',
+ newNote: 'Ny note',
+ noteBody: 'NOTEINDHOLD',
+ noteContent: 'Noteindhold',
+ noteDetails: 'Notedetaljer',
+ noteMetadata: 'Notemetadata',
+ noteType: 'Notetype',
+ notes: 'Noter',
+ reviewed: 'Gentaget',
+ studyProgress: 'Studiefremskridt',
+ studyProgressUppercase: 'STUDIEFREMSKRIDT',
+ titleUppercase: 'TITEL',
+ updated: 'Opdateret',
+ },
+ sort: {
+ ariaLabel: 'Sortér noter',
+ title: 'Titel',
+ updated: 'Opdateret',
+ },
+ toolbar: {
+ bold: 'Fed',
+ italic: 'Kursiv',
+ link: 'Link',
+ list: 'Liste',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Igen',
+ backToDeck: 'Tilbage til kortsæt',
+ continueReview: 'Fortsæt gentagelse',
+ easy: 'Let',
+ good: 'God',
+ hard: 'Svær',
+ newNote: 'Ny note',
+ showAnswer: 'Vis svar',
+ },
+ errors: {
+ couldNotGradeCard: 'Kortet kunne ikke bedømmes',
+ reviewCouldNotLoad: 'Gentagelsen kunne ikke indlæses',
+ reviewCouldNotStart: 'Gentagelsen kunne ikke startes',
+ summaryCouldNotLoad: 'Gentagelsesoversigten kunne ikke indlæses',
+ summaryNotAvailable: 'Gentagelsesoversigten er ikke tilgængelig',
+ summaryNotComplete: 'Denne gentagelse er ikke færdig endnu.',
+ },
+ labels: {
+ cardsReviewed: 'Gentagne kort',
+ deck: 'Kortsæt',
+ duration: 'Varighed',
+ loadingReview: 'Indlæser gentagelse',
+ loadingSummary: 'Indlæser oversigt',
+ progress: 'Gentagelsesfremgang',
+ review: 'Gentagelse',
+ reviewComplete: 'Gentagelse fuldført',
+ reviewed_one: 'Gentaget {{count}}',
+ reviewed_other: 'Gentaget {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} t {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'Dine fremskridt blev gemt i dette kortsæt.',
+ },
+ unavailable: {
+ description: 'Tilføj en note, så dette kortsæt kan komme i gentagelseskøen.',
+ title: 'Ingen kort at gentage',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Ryd søgning',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Ingen match i dette arbejdsområde',
+ noMatchesInWorkspaceDescription: 'Ingen mapper, kortsæt eller noter matchede "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Søgningen kunne ikke fuldføres',
+ },
+ labels: {
+ results: 'Søgeresultater',
+ resultsFor: 'Resultater for "{{query}}"',
+ searchingContent: 'Søger i indhold',
+ },
+ resultGroups: {
+ deck: 'Kortsæt',
+ folder: 'Mapper',
+ note: 'Noter',
+ },
+ resultKinds: {
+ deck: 'kortsæt',
+ folder: 'mappe',
+ note: 'note',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Nulstil alle indstillinger',
+ resetSettings: 'Nulstil indstillinger',
+ resetToDefaults: 'Gendan standarder',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Indsæt gyldig JSON med 21 numeriske værdier.',
+ fsrsErrorInvalidParams_one: 'Indtast et JSON-array med præcis {{count}} endeligt tal.',
+ fsrsErrorInvalidParams_other: 'Indtast et JSON-array med præcis {{count}} endelige tal.',
+ fsrsHelper: 'Dette er en ekspertoverskrivning. Værdierne skal forblive i rækkefølge.',
+ fsrsJsonLabel: 'FSRS-parametre JSON',
+ fsrsTitle: 'Rediger FSRS-parametre',
+ fsrsDescription: 'Indsæt et JSON-array med 21 tal for at overskrive scheduler-vægtene.',
+ resetDescription: 'Dette gendanner tidszone, studiegrænser og FSRS-indstillinger.',
+ resetDescriptionWithLanguage: 'Dette gendanner sprog, tidszone, studiegrænser og FSRS-indstillinger.',
+ resetTitle: 'Nulstil alle indstillinger?',
+ timezoneDescription: 'Søg efter en by eller tidszoneidentifikator.',
+ timezoneSearchLabel: 'Søg tidszoner',
+ timezoneSearchPlaceholder: 'Søg tidszoner…',
+ timezoneTitle: 'Vælg tidszone',
+ },
+ errors: {
+ couldNotResetSettings: 'Indstillingerne kunne ikke nulstilles',
+ couldNotSaveSettings: 'Indstillingerne kunne ikke gemmes',
+ settingsCouldNotLoad: 'Indstillingerne kunne ikke indlæses',
+ settingsUnavailable: 'Indstillinger er ikke tilgængelige.',
+ },
+ labels: {
+ appearance: 'Udseende',
+ automatic: 'Automatisk',
+ fsrsParameters: 'FSRS-parametre',
+ general: 'Generelt',
+ language: 'Sprog',
+ loadingSettings: 'Indlæser indstillinger',
+ masteryHorizon: 'Beherskelseshorisont',
+ newCardOrder: 'Rækkefølge for nye kort',
+ newCardsPerDay: 'Nye kort pr. dag',
+ reviewCardsPerDay: 'Gentagelseskort pr. dag',
+ savingSettings: 'Gemmer indstillinger',
+ schedule: 'Plan',
+ searchNoTimezones: 'Ingen matchende tidszoner.',
+ settings: 'Indstillinger',
+ settingsReset: 'Indstillinger nulstillet',
+ study: 'Studie',
+ targetRecallProbability: 'Målsandsynlighed for genkaldelse',
+ theme: 'Tema',
+ timezone: 'Tidszone',
+ },
+ options: {
+ languageEnUs: 'Engelsk (USA)',
+ newCardsAfterReviews: 'Efter gentagelser',
+ newCardsBeforeReviews: 'Før gentagelser',
+ newCardsMixed: 'Blandet',
+ themeDark: 'Mørk',
+ themeLight: 'Lys',
+ themeSystem: 'System',
+ timezoneSystem: 'Brug systemets tidszone',
+ },
+ rows: {
+ fsrsDescription: 'Ekspertmodelvægte',
+ languageDescription: 'Grænsefladesprog',
+ masteryHorizonDescription: 'Antal dage et kort skal forblive genkaldeligt ved eller over målsandsynligheden for at tælle som behersket',
+ newCardOrderDescription: 'Rækkefølge for nye kort i forhold til gentagelser',
+ newCardsPerDayDescription: 'Maksimalt antal nye kort pr. dag',
+ reviewCardsPerDayDescription: 'Maksimalt antal gentagelseskort pr. dag',
+ targetRecallProbabilityDescription: 'Minimumssandsynlighed for genkaldelse ved næste planlagte gentagelse',
+ timezoneDescription: 'Brug automatisk tidszone, eller vælg en by.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Slet permanent',
+ empty: 'Tøm',
+ emptyTrash: 'Tøm papirkurv',
+ restore: 'Gendan',
+ restoringItem: 'Gendanner {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Dette sletter "{{title}}" permanent. Det kan ikke fortrydes.',
+ deleteItemFallbackDescription: 'Dette sletter dette element permanent. Det kan ikke fortrydes.',
+ deleteItemFallbackTitle: 'Slet element?',
+ deleteItemTitle: 'Slet "{{title}}"?',
+ emptyTrashDescription: 'Dette sletter alt i Papirkurv permanent. Det kan ikke fortrydes.',
+ emptyTrashTitle: 'Tøm papirkurv?',
+ },
+ empty: {
+ description: 'Elementer, du sletter, vises her før permanent fjernelse.',
+ title: 'Papirkurven er tom',
+ },
+ errors: {
+ couldNotDeleteItem: 'Elementet kunne ikke slettes',
+ couldNotEmptyTrash: 'Papirkurven kunne ikke tømmes',
+ couldNotRestoreItem: 'Elementet kunne ikke gendannes',
+ trashCouldNotLoad: 'Papirkurven kunne ikke indlæses',
+ trashMayBeOutOfDate: 'Papirkurven kan være forældet',
+ },
+ labels: {
+ deletedAge: 'Slettet {{value}}',
+ itemCount_one: '{{count}} element',
+ itemCount_other: '{{count}} elementer',
+ lastEmptied: 'Sidst tømt {{value}}',
+ loadingTrash: 'Indlæser Papirkurv',
+ originalLocation: 'Oprindelig placering: {{location}}',
+ title: 'Papirkurv',
+ trashActions: 'Papirkurvshandlinger for {{title}}',
+ },
+ kinds: {
+ deck: 'Kortsæt',
+ folder: 'Mappe',
+ note: 'Note',
+ workspace: 'Arbejdsområde',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Opret arbejdsområde',
+ deleteWorkspace: 'Slet arbejdsområde',
+ editWorkspace: 'Rediger arbejdsområde',
+ newWorkspace: 'Nyt arbejdsområde',
+ openWorkspace: 'Åbn {{title}}',
+ openingWorkspace: 'Åbner {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Studiekontekst.',
+ editorVisual: 'Vælg et visuelt anker til dette arbejdsområde.',
+ emptyList: 'Adskil kortsæt, noter og gentagelseskøer efter studiekontekst.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Dette flytter "{{title}}" til Papirkurv. Du kan gendanne det senere.',
+ deleteWorkspaceFallbackDescription: 'Dette flytter dette arbejdsområde til Papirkurv. Du kan gendanne det senere.',
+ deleteWorkspaceFallbackTitle: 'Slet arbejdsområde?',
+ deleteWorkspaceTitle: 'Slet "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Start med et arbejdsområde',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Arbejdsområdet kunne ikke oprettes',
+ couldNotDeleteWorkspace: 'Arbejdsområdet kunne ikke slettes',
+ couldNotOpenWorkspace: 'Arbejdsområdet kunne ikke åbnes',
+ couldNotSaveWorkspace: 'Arbejdsområdet kunne ikke gemmes',
+ workspaceCouldNotLoad: 'Arbejdsområdet kunne ikke indlæses',
+ workspacesCouldNotLoad: 'Arbejdsområder kunne ikke indlæses',
+ },
+ fields: {
+ descriptionLabel: 'Beskrivelse af arbejdsområde',
+ descriptionPlaceholder: 'Hvad hører hjemme i dette arbejdsområde?',
+ namePlaceholder: 'Navn på arbejdsområde',
+ untitledWorkspace: 'Arbejdsområde uden titel',
+ },
+ labels: {
+ createWorkspaceTitle: 'Opret arbejdsområde',
+ loadingWorkspaces: 'Indlæser arbejdsområder',
+ workspace: 'Arbejdsområde',
+ workspaces: 'Arbejdsområder',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/de.ts b/ui/src/core/i18n/resources/de.ts
new file mode 100644
index 0000000..41d3aeb
--- /dev/null
+++ b/ui/src/core/i18n/resources/de.ts
@@ -0,0 +1,623 @@
+export const de = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Versuche es erneut. Wenn das Problem bleibt, öffne Clear neu.',
+ title: 'Start fehlgeschlagen',
+ },
+ loadingTitle: 'Dein Lernbereich wird vorbereitet',
+ },
+ common: {
+ actions: {
+ back: 'Zurück',
+ cancel: 'Abbrechen',
+ checkAgain: 'Erneut prüfen',
+ close: 'Schließen',
+ create: 'Erstellen',
+ delete: 'Löschen',
+ dismissError: 'Fehler ausblenden',
+ dismissStatus: 'Status ausblenden',
+ edit: 'Bearbeiten',
+ itemActions: 'Aktionen für {{title}}',
+ reset: 'Zurücksetzen',
+ review: 'Wiederholen',
+ save: 'Speichern',
+ saveChanges: 'Änderungen speichern',
+ tryAgain: 'Erneut versuchen',
+ },
+ labels: {
+ active: 'Aktiv',
+ clear: 'Clear',
+ custom: 'Benutzerdefiniert',
+ default: 'Standard',
+ loadingEditor: 'Editor wird geladen',
+ name: 'Name',
+ completedTask: 'Aufgabe erledigt',
+ description: 'Beschreibung',
+ incompleteTask: 'Aufgabe offen',
+ percentageInput: '{{label}} in Prozent',
+ visual: 'Visuell',
+ },
+ status: {
+ actionFailed: 'Aktion fehlgeschlagen',
+ actionInProgress: 'Aktion läuft',
+ },
+ sort: {
+ ascending: 'Aufst.',
+ column: 'Spalte',
+ descending: 'Abst.',
+ direction: 'Richtung',
+ sort: 'Sortieren',
+ },
+ search: {
+ label: 'Suchen',
+ },
+ visualPicker: {
+ allLucideIcons: 'Alle Lucide-Symbole',
+ browseIconsFor: 'Symbole für {{label}} durchsuchen.',
+ chooseIcon: 'Symbol wählen',
+ iconPicker: 'Symbolauswahl für {{label}}',
+ iconSearch: 'Symbolsuche für {{label}}',
+ iconsCouldNotLoad: 'Symbole konnten nicht geladen werden.',
+ loadingIcons: 'Symbole werden geladen',
+ loadingMoreIcons: 'Weitere Symbole werden geladen',
+ moreIcons: 'Weitere Symbole',
+ noIconsMatch: 'Keine Symbole passen zu "{{query}}".',
+ searchIconsPlaceholder: 'Symbole suchen…',
+ selectedIcon: '{{label}} ausgewählt',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Erstellen',
+ newDeck: 'Neuer Stapel',
+ newFolder: 'Neuer Ordner',
+ },
+ descriptions: {
+ defaultWorkspace: 'Halte Stapel, Ordner und Notizen zusammen.',
+ emptyWorkspace: 'Erstelle einen Stapel und füge Notizen für deine Wiederholungen hinzu.',
+ emptyFolder: 'Erstelle einen Stapel und füge Notizen für eine Wiederholungsliste hinzu.',
+ searchPlaceholder: 'Ordner, Stapel und Notizen suchen…',
+ },
+ empty: {
+ createFirstDeck: 'Erstelle deinen ersten Stapel',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Stapel konnte nicht gelöscht werden',
+ couldNotDeleteFolder: 'Ordner konnte nicht gelöscht werden',
+ couldNotDeleteWorkspace: 'Arbeitsbereich konnte nicht gelöscht werden',
+ dashboardCouldNotOpen: 'Dashboard konnte nicht geöffnet werden',
+ decksCouldNotLoad: 'Stapel konnten nicht geladen werden',
+ decksMayBeOutOfDate: 'Stapel sind möglicherweise veraltet',
+ foldersCouldNotLoad: 'Ordner konnten nicht geladen werden',
+ foldersMayBeOutOfDate: 'Ordner sind möglicherweise veraltet',
+ workspaceCouldNotLoad: 'Arbeitsbereich konnte nicht geladen werden',
+ },
+ labels: {
+ dashboard: 'Dashboard',
+ loadingDashboard: 'Dashboard wird geladen',
+ newItem: 'Neues Element',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Datum nicht verfügbar',
+ },
+ age: {
+ dayAgo_one: 'vor {{count}} Tag',
+ dayAgo_other: 'vor {{count}} Tagen',
+ hourAgo_one: 'vor {{count}} Stunde',
+ hourAgo_other: 'vor {{count}} Stunden',
+ justNow: 'gerade eben',
+ minuteAgo_one: 'vor {{count}} Minute',
+ minuteAgo_other: 'vor {{count}} Minuten',
+ unavailable: 'Datum nicht verfügbar',
+ weekAgo_one: 'vor {{count}} Woche',
+ weekAgo_other: 'vor {{count}} Wochen',
+ },
+ labels: {
+ deleted: 'Gelöscht {{value}}',
+ due: 'Fällig: {{value}}',
+ reviewed: 'Wiederholt: {{value}}',
+ updated: 'Aktualisiert {{value}}',
+ updatedUppercase: 'AKTUALISIERT {{value}}',
+ },
+ relative: {
+ dayAgo_one: 'vor {{count}} Tag',
+ dayAgo_other: 'vor {{count}} Tagen',
+ inAMoment: 'Gleich',
+ inDay_one: 'In {{count}} Tag',
+ inDay_other: 'In {{count}} Tagen',
+ inMonth_one: 'In {{count}} Monat',
+ inMonth_other: 'In {{count}} Monaten',
+ inWeek_one: 'In {{count}} Woche',
+ inWeek_other: 'In {{count}} Wochen',
+ justNow: 'Gerade eben',
+ monthAgo_one: 'vor {{count}} Monat',
+ monthAgo_other: 'vor {{count}} Monaten',
+ secondsAgoShort: 'vor {{count}} s',
+ minutesAgoShort: 'vor {{count}} min',
+ hoursAgoShort: 'vor {{count}} h',
+ today: 'Heute',
+ tomorrow: 'Morgen',
+ weekAgo_one: 'vor {{count}} Woche',
+ weekAgo_other: 'vor {{count}} Wochen',
+ yesterday: 'Gestern',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Aktionen für {{title}}',
+ createDeck: 'Stapel erstellen',
+ createNote: 'Notiz erstellen',
+ deleteDeck: 'Stapel löschen',
+ editDeck: 'Stapel bearbeiten',
+ newNote: 'Neue Notiz',
+ openDeck: 'Stapel {{title}} öffnen',
+ saveDeck: 'Stapel konnte nicht gespeichert werden',
+ studyNow: 'Jetzt lernen',
+ },
+ descriptions: {
+ emptyDeck: 'Füge eine Notiz hinzu, damit dieser Stapel Wiederholungsstoff hat.',
+ editorDefault: 'Fokussierter Lernstapel.',
+ editorVisual: 'Wähle ein Titelzeichen für diesen Stapel.',
+ notesSearchPlaceholder: 'Notizen suchen…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Dadurch wird "{{title}}" in den Papierkorb verschoben. Du kannst es später wiederherstellen.',
+ deleteDeckFallbackDescription: 'Dadurch wird dieser Stapel in den Papierkorb verschoben. Du kannst ihn später wiederherstellen.',
+ deleteDeckFallbackTitle: 'Stapel löschen?',
+ deleteDeckTitle: '"{{title}}" löschen?',
+ deleteNoteDescription: 'Dadurch wird "{{title}}" in den Papierkorb verschoben. Du kannst sie später wiederherstellen.',
+ deleteNoteFallbackTitle: 'Notiz löschen?',
+ deleteNoteTitle: '"{{title}}" löschen?',
+ },
+ empty: {
+ noMatchingNotes: 'Keine passenden Notizen',
+ noMatchingNotesDescription: 'Keine Notizen passen zu "{{query}}".',
+ thisDeckIsEmpty: 'Dieser Stapel ist leer',
+ },
+ errors: {
+ couldNotCreateDeck: 'Stapel konnte nicht erstellt werden',
+ couldNotDeleteDeck: 'Stapel konnte nicht gelöscht werden',
+ couldNotDeleteNote: 'Notiz konnte nicht gelöscht werden',
+ couldNotLoadFolderPath: 'Ordnerpfad konnte nicht geladen werden',
+ couldNotSaveDeck: 'Stapel konnte nicht gespeichert werden',
+ deckCouldNotLoad: 'Stapel konnte nicht geladen werden',
+ notesCouldNotLoad: 'Notizen konnten nicht geladen werden',
+ notesMayBeOutOfDate: 'Notizen sind möglicherweise veraltet',
+ },
+ fields: {
+ descriptionLabel: 'Stapelbeschreibung',
+ descriptionPlaceholder: 'Was hilft dir dieser Stapel zu wiederholen?',
+ namePlaceholder: 'Stapelname',
+ untitledDeck: 'Unbenannter Stapel',
+ untitledDeckLower: 'unbenannter Stapel',
+ },
+ labels: {
+ createDeckTitle: 'Stapel erstellen',
+ deck: 'Stapel',
+ deckNotesSearch: 'Notizen im Stapel suchen',
+ deckOverview: 'Stapelübersicht',
+ decks: 'Stapel',
+ due: 'Fällig',
+ dueToday: 'Heute fällig',
+ loadingDeck: 'Stapel wird geladen',
+ mastery: 'Beherrschung',
+ notes: 'Notizen',
+ },
+ sort: {
+ ariaLabel: 'Stapel sortieren',
+ dueToday: 'Heute fällig',
+ title: 'Titel',
+ updated: 'Aktualisiert',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Die Daten haben sich geändert. Aktualisiere und versuche es erneut.',
+ forbidden: 'Du hast keine Berechtigung dafür.',
+ notFound: 'Wir konnten dieses Element nicht finden.',
+ offline: 'Der Dienst ist nicht erreichbar.',
+ timeout: 'Das hat zu lange gedauert. Versuche es erneut.',
+ unauthorized: 'Melde dich an, um fortzufahren.',
+ unavailable: 'Der Dienst ist vorübergehend nicht verfügbar.',
+ },
+ fallback: {
+ unexpected: 'Unerwarteter Fehler',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Ordner erstellen',
+ deleteFolder: 'Ordner löschen',
+ editFolder: 'Ordner bearbeiten',
+ },
+ descriptions: {
+ editorDefault: 'Ordner für verwandte Stapel.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Dadurch wird "{{name}}" in den Papierkorb verschoben. Du kannst ihn später wiederherstellen.',
+ deleteFolderFallbackDescription: 'Dadurch wird dieser Ordner in den Papierkorb verschoben. Du kannst ihn später wiederherstellen.',
+ deleteFolderFallbackTitle: 'Ordner löschen?',
+ deleteFolderTitle: '"{{name}}" löschen?',
+ },
+ empty: {
+ noMatchesInFolder: 'Keine Treffer in diesem Ordner',
+ noMatchesInFolderDescription: 'Keine Ordner, Stapel oder Notizen passen zu "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Ordner konnte nicht erstellt werden',
+ couldNotDeleteFolder: 'Ordner konnte nicht gelöscht werden',
+ couldNotLoadFolderPath: 'Ordnerpfad konnte nicht geladen werden',
+ couldNotSaveFolder: 'Ordner konnte nicht gespeichert werden',
+ folderCouldNotLoad: 'Ordner konnte nicht geladen werden',
+ },
+ fields: {
+ descriptionLabel: 'Ordnerbeschreibung',
+ descriptionPlaceholder: 'Was gehört in diesen Ordner?',
+ namePlaceholder: 'Ordnername',
+ untitledFolder: 'Unbenannter Ordner',
+ },
+ labels: {
+ createFolderTitle: 'Ordner erstellen',
+ folder: 'Ordner',
+ folders: 'Ordner',
+ loadingFolder: 'Ordner wird geladen',
+ name: 'Name',
+ updated: 'Aktualisiert',
+ },
+ sort: {
+ ariaLabel: 'Ordner sortieren',
+ name: 'Name',
+ updated: 'Aktualisiert',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Wenn lokale und synchronisierte Daten voneinander abweichen, erscheint das Element hier.',
+ heading: 'Synchronisierungsstatus',
+ title: 'Konflikte',
+ noConflicts: 'Keine Konflikte gefunden',
+ },
+ labels: {
+ menu: 'Menü',
+ },
+ sections: {
+ settings: {
+ description: 'Passe Umgebung und Einstellungen an',
+ title: 'Einstellungen',
+ },
+ trash: {
+ description: 'Entfernte Elemente wiederherstellen oder endgültig löschen',
+ title: 'Papierkorb',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Editor schließen',
+ openActions: 'Aktionen öffnen',
+ openWorkspaces: 'Arbeitsbereiche öffnen',
+ },
+ items: {
+ home: 'Start',
+ menu: 'Menü',
+ primary: 'Primär',
+ settings: 'Einstellungen',
+ spaces: 'Bereiche',
+ trash: 'Papierkorb',
+ workspaces: 'Arbeitsbereiche',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Cloze hinzufügen',
+ deleteNote: 'Notiz löschen',
+ editNote: 'Notiz bearbeiten',
+ hideDerivedCardsNote: 'Hinweis zu abgeleiteten Karten ausblenden',
+ openNote: '{{title}} öffnen',
+ saveNote: 'Notiz speichern',
+ showDerivedCardsNote: 'Hinweis zu abgeleiteten Karten anzeigen',
+ },
+ descriptions: {
+ clozeFormat: 'Jeder verborgene Teil wird beim Speichern zu einer Wiederholungskarte.',
+ clozeFormatPrefix: 'Umschließe verborgenen Text mit',
+ derivedCardsHelper: 'Notizen sind die Quelle der Wahrheit für abgeleitete Karten.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Dadurch wird "{{title}}" in den Papierkorb verschoben. Du kannst sie später wiederherstellen.',
+ deleteNoteFallbackDescription: 'Dadurch wird diese Notiz in den Papierkorb verschoben. Du kannst sie später wiederherstellen.',
+ deleteNoteFallbackTitle: 'Notiz löschen?',
+ deleteNoteTitle: '"{{title}}" löschen?',
+ },
+ errors: {
+ couldNotCreateNote: 'Notiz konnte nicht erstellt werden',
+ couldNotDeleteNote: 'Notiz konnte nicht gelöscht werden',
+ couldNotSaveNote: 'Notiz konnte nicht gespeichert werden',
+ noteCouldNotLoad: 'Notiz konnte nicht geladen werden',
+ },
+ fields: {
+ back: 'Rückseite',
+ backPlaceholder: 'Rückseite eingeben',
+ bodyPlaceholder: 'Notizinhalt mit Cloze-Löschungen schreiben…',
+ front: 'Vorderseite',
+ frontPlaceholder: 'Vorderseite eingeben',
+ noteBody: 'Notizinhalt',
+ title: 'Titel',
+ titlePlaceholder: 'Notiztitel hinzufügen',
+ untitledCloze: 'Unbenannter Cloze',
+ untitledNote: 'Unbenannte Notiz',
+ },
+ labels: {
+ backUppercase: 'RÜCKSEITE',
+ basic: 'Einfach',
+ basicLower: 'einfach',
+ basicUppercase: 'EINFACH',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Cloze-Format',
+ clozeUppercase: 'CLOZE',
+ deck: 'Stapel',
+ derivedCards: 'ABGELEITETE KARTEN',
+ due: 'Fällig',
+ frontUppercase: 'VORDERSEITE',
+ inProgress: 'In Arbeit',
+ inProgressUppercase: 'IN ARBEIT',
+ loadingNote: 'Notiz wird geladen',
+ loadingNoteEditor: 'Notizeditor wird geladen',
+ markdownFormatting: 'Markdown-Formatierung',
+ mastered: 'Beherrscht',
+ masteredUppercase: 'BEHERRSCHT',
+ newNote: 'Neue Notiz',
+ noteBody: 'NOTIZINHALT',
+ noteContent: 'Notizinhalt',
+ noteDetails: 'Notizdetails',
+ noteMetadata: 'Notizmetadaten',
+ noteType: 'Notiztyp',
+ notes: 'Notizen',
+ reviewed: 'Wiederholt',
+ studyProgress: 'Lernfortschritt',
+ studyProgressUppercase: 'LERNFORTSCHRITT',
+ titleUppercase: 'TITEL',
+ updated: 'Aktualisiert',
+ },
+ sort: {
+ ariaLabel: 'Notizen sortieren',
+ title: 'Titel',
+ updated: 'Aktualisiert',
+ },
+ toolbar: {
+ bold: 'Fett',
+ italic: 'Kursiv',
+ link: 'Link',
+ list: 'Liste',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Nochmal',
+ backToDeck: 'Zurück zum Stapel',
+ continueReview: 'Wiederholung fortsetzen',
+ easy: 'Einfach',
+ good: 'Gut',
+ hard: 'Schwer',
+ newNote: 'Neue Notiz',
+ showAnswer: 'Antwort zeigen',
+ },
+ errors: {
+ couldNotGradeCard: 'Karte konnte nicht bewertet werden',
+ reviewCouldNotLoad: 'Wiederholung konnte nicht geladen werden',
+ reviewCouldNotStart: 'Wiederholung konnte nicht gestartet werden',
+ summaryCouldNotLoad: 'Zusammenfassung konnte nicht geladen werden',
+ summaryNotAvailable: 'Zusammenfassung ist nicht verfügbar',
+ summaryNotComplete: 'Diese Wiederholung ist noch nicht abgeschlossen.',
+ },
+ labels: {
+ cardsReviewed: 'Wiederholte Karten',
+ deck: 'Stapel',
+ duration: 'Dauer',
+ loadingReview: 'Wiederholung wird geladen',
+ loadingSummary: 'Zusammenfassung wird geladen',
+ progress: 'Wiederholungsfortschritt',
+ review: 'Wiederholung',
+ reviewComplete: 'Wiederholung abgeschlossen',
+ reviewed_one: '{{count}} wiederholt',
+ reviewed_other: '{{count}} wiederholt',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} h {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'Dein Fortschritt wurde in diesem Stapel gespeichert.',
+ },
+ unavailable: {
+ description: 'Füge eine Notiz hinzu, damit dieser Stapel in die Wiederholungsliste kommt.',
+ title: 'Keine Karten zum Wiederholen',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Suche leeren',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Keine Treffer in diesem Arbeitsbereich',
+ noMatchesInWorkspaceDescription: 'Keine Ordner, Stapel oder Notizen passen zu "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Suche konnte nicht abgeschlossen werden',
+ },
+ labels: {
+ results: 'Suchergebnisse',
+ resultsFor: 'Ergebnisse für "{{query}}"',
+ searchingContent: 'Inhalte werden gesucht',
+ },
+ resultGroups: {
+ deck: 'Stapel',
+ folder: 'Ordner',
+ note: 'Notizen',
+ },
+ resultKinds: {
+ deck: 'Stapel',
+ folder: 'Ordner',
+ note: 'Notiz',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Alle Einstellungen zurücksetzen',
+ resetSettings: 'Einstellungen zurücksetzen',
+ resetToDefaults: 'Standardwerte wiederherstellen',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Füge gültiges JSON mit 21 numerischen Werten ein.',
+ fsrsErrorInvalidParams_one: 'Gib ein JSON-Array mit genau {{count}} endlicher Zahl ein.',
+ fsrsErrorInvalidParams_other: 'Gib ein JSON-Array mit genau {{count}} endlichen Zahlen ein.',
+ fsrsHelper: 'Dies ist eine Expertenüberschreibung. Die Werte müssen in Reihenfolge bleiben.',
+ fsrsJsonLabel: 'FSRS-Parameter-JSON',
+ fsrsTitle: 'FSRS-Parameter bearbeiten',
+ fsrsDescription: 'Füge ein JSON-Array mit 21 Zahlen ein, um die Scheduler-Gewichte zu überschreiben.',
+ resetDescription: 'Dadurch werden Zeitzone, Lernlimits und FSRS-Einstellungen wiederhergestellt.',
+ resetDescriptionWithLanguage: 'Dadurch werden Sprache, Zeitzone, Lernlimits und FSRS-Einstellungen wiederhergestellt.',
+ resetTitle: 'Alle Einstellungen zurücksetzen?',
+ timezoneDescription: 'Suche nach einer Stadt oder Zeitzonenkennung.',
+ timezoneSearchLabel: 'Zeitzonen suchen',
+ timezoneSearchPlaceholder: 'Zeitzonen suchen…',
+ timezoneTitle: 'Zeitzone wählen',
+ },
+ errors: {
+ couldNotResetSettings: 'Einstellungen konnten nicht zurückgesetzt werden',
+ couldNotSaveSettings: 'Einstellungen konnten nicht gespeichert werden',
+ settingsCouldNotLoad: 'Einstellungen konnten nicht geladen werden',
+ settingsUnavailable: 'Einstellungen sind nicht verfügbar.',
+ },
+ labels: {
+ appearance: 'Darstellung',
+ automatic: 'Automatisch',
+ fsrsParameters: 'FSRS-Parameter',
+ general: 'Allgemein',
+ language: 'Sprache',
+ loadingSettings: 'Einstellungen werden geladen',
+ masteryHorizon: 'Beherrschungshorizont',
+ newCardOrder: 'Reihenfolge neuer Karten',
+ newCardsPerDay: 'Neue Karten pro Tag',
+ reviewCardsPerDay: 'Wiederholungskarten pro Tag',
+ savingSettings: 'Einstellungen werden gespeichert',
+ schedule: 'Zeitplan',
+ searchNoTimezones: 'Keine passenden Zeitzonen.',
+ settings: 'Einstellungen',
+ settingsReset: 'Einstellungen zurückgesetzt',
+ study: 'Lernen',
+ targetRecallProbability: 'Ziel-Erinnerungswahrscheinlichkeit',
+ theme: 'Design',
+ timezone: 'Zeitzone',
+ },
+ options: {
+ languageEnUs: 'Englisch (USA)',
+ newCardsAfterReviews: 'Nach Wiederholungen',
+ newCardsBeforeReviews: 'Vor Wiederholungen',
+ newCardsMixed: 'Gemischt',
+ themeDark: 'Dunkel',
+ themeLight: 'Hell',
+ themeSystem: 'System',
+ timezoneSystem: 'Systemzeitzone verwenden',
+ },
+ rows: {
+ fsrsDescription: 'Expertenmodell-Gewichte',
+ languageDescription: 'Sprache der Oberfläche',
+ masteryHorizonDescription: 'Tage, die eine Karte bei oder über der Zielwahrscheinlichkeit abrufbar bleiben muss, um als beherrscht zu gelten',
+ newCardOrderDescription: 'Reihenfolge neuer Karten im Verhältnis zu Wiederholungen',
+ newCardsPerDayDescription: 'Maximale neue Karten pro Tag',
+ reviewCardsPerDayDescription: 'Maximale Wiederholungskarten pro Tag',
+ targetRecallProbabilityDescription: 'Minimale Erinnerungswahrscheinlichkeit bei der nächsten geplanten Wiederholung',
+ timezoneDescription: 'Automatische Zeitzone verwenden oder eine Stadt wählen.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Endgültig löschen',
+ empty: 'Leeren',
+ emptyTrash: 'Papierkorb leeren',
+ restore: 'Wiederherstellen',
+ restoringItem: '{{title}} wird wiederhergestellt',
+ },
+ dialogs: {
+ deleteItemDescription: 'Dadurch wird "{{title}}" endgültig gelöscht. Das kann nicht rückgängig gemacht werden.',
+ deleteItemFallbackDescription: 'Dadurch wird dieses Element endgültig gelöscht. Das kann nicht rückgängig gemacht werden.',
+ deleteItemFallbackTitle: 'Element löschen?',
+ deleteItemTitle: '"{{title}}" löschen?',
+ emptyTrashDescription: 'Dadurch wird alles im Papierkorb endgültig gelöscht. Das kann nicht rückgängig gemacht werden.',
+ emptyTrashTitle: 'Papierkorb leeren?',
+ },
+ empty: {
+ description: 'Gelöschte Elemente erscheinen hier vor der endgültigen Entfernung.',
+ title: 'Der Papierkorb ist leer',
+ },
+ errors: {
+ couldNotDeleteItem: 'Element konnte nicht gelöscht werden',
+ couldNotEmptyTrash: 'Papierkorb konnte nicht geleert werden',
+ couldNotRestoreItem: 'Element konnte nicht wiederhergestellt werden',
+ trashCouldNotLoad: 'Papierkorb konnte nicht geladen werden',
+ trashMayBeOutOfDate: 'Papierkorb ist möglicherweise veraltet',
+ },
+ labels: {
+ deletedAge: 'Gelöscht {{value}}',
+ itemCount_one: '{{count}} Element',
+ itemCount_other: '{{count}} Elemente',
+ lastEmptied: 'Zuletzt geleert {{value}}',
+ loadingTrash: 'Papierkorb wird geladen',
+ originalLocation: 'Ursprünglicher Ort: {{location}}',
+ title: 'Papierkorb',
+ trashActions: 'Papierkorb-Aktionen für {{title}}',
+ },
+ kinds: {
+ deck: 'Stapel',
+ folder: 'Ordner',
+ note: 'Notiz',
+ workspace: 'Arbeitsbereich',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Arbeitsbereich erstellen',
+ deleteWorkspace: 'Arbeitsbereich löschen',
+ editWorkspace: 'Arbeitsbereich bearbeiten',
+ newWorkspace: 'Neuer Arbeitsbereich',
+ openWorkspace: '{{title}} öffnen',
+ openingWorkspace: '{{title}} wird geöffnet',
+ },
+ descriptions: {
+ editorDefault: 'Lernkontext.',
+ editorVisual: 'Wähle einen visuellen Anker für diesen Arbeitsbereich.',
+ emptyList: 'Trenne Stapel, Notizen und Wiederholungslisten nach Lernkontext.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Dadurch wird "{{title}}" in den Papierkorb verschoben. Du kannst ihn später wiederherstellen.',
+ deleteWorkspaceFallbackDescription: 'Dadurch wird dieser Arbeitsbereich in den Papierkorb verschoben. Du kannst ihn später wiederherstellen.',
+ deleteWorkspaceFallbackTitle: 'Arbeitsbereich löschen?',
+ deleteWorkspaceTitle: '"{{title}}" löschen?',
+ },
+ empty: {
+ startWithWorkspace: 'Beginne mit einem Arbeitsbereich',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Arbeitsbereich konnte nicht erstellt werden',
+ couldNotDeleteWorkspace: 'Arbeitsbereich konnte nicht gelöscht werden',
+ couldNotOpenWorkspace: 'Arbeitsbereich konnte nicht geöffnet werden',
+ couldNotSaveWorkspace: 'Arbeitsbereich konnte nicht gespeichert werden',
+ workspaceCouldNotLoad: 'Arbeitsbereich konnte nicht geladen werden',
+ workspacesCouldNotLoad: 'Arbeitsbereiche konnten nicht geladen werden',
+ },
+ fields: {
+ descriptionLabel: 'Arbeitsbereichsbeschreibung',
+ descriptionPlaceholder: 'Was gehört in diesen Arbeitsbereich?',
+ namePlaceholder: 'Name des Arbeitsbereichs',
+ untitledWorkspace: 'Unbenannter Arbeitsbereich',
+ },
+ labels: {
+ createWorkspaceTitle: 'Arbeitsbereich erstellen',
+ loadingWorkspaces: 'Arbeitsbereiche werden geladen',
+ workspace: 'Arbeitsbereich',
+ workspaces: 'Arbeitsbereiche',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/el.ts b/ui/src/core/i18n/resources/el.ts
new file mode 100644
index 0000000..57c87c5
--- /dev/null
+++ b/ui/src/core/i18n/resources/el.ts
@@ -0,0 +1,623 @@
+export const el = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Δοκιμάστε ξανά. Αν συνεχίσει να συμβαίνει, ανοίξτε ξανά το Clear.',
+ title: 'Δεν ήταν δυνατή η εκκίνηση',
+ },
+ loadingTitle: 'Προετοιμασία του χώρου μελέτης σας',
+ },
+ common: {
+ actions: {
+ back: 'Πίσω',
+ cancel: 'Ακύρωση',
+ checkAgain: 'Έλεγχος ξανά',
+ close: 'Κλείσιμο',
+ create: 'Δημιουργία',
+ delete: 'Διαγραφή',
+ dismissError: 'Απόκρυψη σφάλματος',
+ dismissStatus: 'Απόκρυψη κατάστασης',
+ edit: 'Επεξεργασία',
+ itemActions: 'Ενέργειες για {{title}}',
+ reset: 'Επαναφορά',
+ review: 'Επανάληψη',
+ save: 'Αποθήκευση',
+ saveChanges: 'Αποθήκευση αλλαγών',
+ tryAgain: 'Δοκιμάστε ξανά',
+ },
+ labels: {
+ active: 'Ενεργό',
+ clear: 'Clear',
+ custom: 'Προσαρμοσμένο',
+ default: 'Προεπιλογή',
+ loadingEditor: 'Φόρτωση επεξεργαστή',
+ name: 'Όνομα',
+ completedTask: 'Ολοκληρωμένη εργασία',
+ description: 'Περιγραφή',
+ incompleteTask: 'Μη ολοκληρωμένη εργασία',
+ percentageInput: 'Ποσοστό για {{label}}',
+ visual: 'Οπτικό',
+ },
+ status: {
+ actionFailed: 'Η ενέργεια απέτυχε',
+ actionInProgress: 'Ενέργεια σε εξέλιξη',
+ },
+ sort: {
+ ascending: 'Αύξ.',
+ column: 'Στήλη',
+ descending: 'Φθίν.',
+ direction: 'Κατεύθυνση',
+ sort: 'Ταξινόμηση',
+ },
+ search: {
+ label: 'Αναζήτηση',
+ },
+ visualPicker: {
+ allLucideIcons: 'Όλα τα εικονίδια Lucide',
+ browseIconsFor: 'Περιηγηθείτε ή αναζητήστε εικονίδια για {{label}}.',
+ chooseIcon: 'Επιλογή εικονιδίου',
+ iconPicker: 'Επιλογέας εικονιδίου για {{label}}',
+ iconSearch: 'Αναζήτηση εικονιδίων για {{label}}',
+ iconsCouldNotLoad: 'Δεν ήταν δυνατή η φόρτωση των εικονιδίων.',
+ loadingIcons: 'Φόρτωση εικονιδίων',
+ loadingMoreIcons: 'Φόρτωση περισσότερων εικονιδίων',
+ moreIcons: 'Περισσότερα εικονίδια',
+ noIconsMatch: 'Κανένα εικονίδιο δεν ταιριάζει με "{{query}}".',
+ searchIconsPlaceholder: 'Αναζήτηση εικονιδίων…',
+ selectedIcon: 'Επιλέχθηκε {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Δημιουργία',
+ newDeck: 'Νέα τράπουλα',
+ newFolder: 'Νέος φάκελος',
+ },
+ descriptions: {
+ defaultWorkspace: 'Κρατήστε τράπουλες, φακέλους και σημειώσεις μαζί.',
+ emptyWorkspace: 'Δημιουργήστε μια τράπουλα και μετά προσθέστε σημειώσεις για να φτιάξετε την ουρά επανάληψης.',
+ emptyFolder: 'Δημιουργήστε μια τράπουλα και μετά προσθέστε σημειώσεις για να φτιάξετε μια ουρά επανάληψης.',
+ searchPlaceholder: 'Αναζήτηση φακέλων, τράπουλων και σημειώσεων…',
+ },
+ empty: {
+ createFirstDeck: 'Δημιουργήστε την πρώτη σας τράπουλα',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Δεν ήταν δυνατή η διαγραφή της τράπουλας',
+ couldNotDeleteFolder: 'Δεν ήταν δυνατή η διαγραφή του φακέλου',
+ couldNotDeleteWorkspace: 'Δεν ήταν δυνατή η διαγραφή του χώρου εργασίας',
+ dashboardCouldNotOpen: 'Δεν ήταν δυνατό το άνοιγμα του πίνακα',
+ decksCouldNotLoad: 'Δεν ήταν δυνατή η φόρτωση των τράπουλων',
+ decksMayBeOutOfDate: 'Οι τράπουλες μπορεί να μην είναι ενημερωμένες',
+ foldersCouldNotLoad: 'Δεν ήταν δυνατή η φόρτωση των φακέλων',
+ foldersMayBeOutOfDate: 'Οι φάκελοι μπορεί να μην είναι ενημερωμένοι',
+ workspaceCouldNotLoad: 'Δεν ήταν δυνατή η φόρτωση του χώρου εργασίας',
+ },
+ labels: {
+ dashboard: 'Πίνακας',
+ loadingDashboard: 'Φόρτωση πίνακα',
+ newItem: 'Νέο στοιχείο',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Η ημερομηνία δεν είναι διαθέσιμη',
+ },
+ age: {
+ dayAgo_one: 'πριν από {{count}} ημέρα',
+ dayAgo_other: 'πριν από {{count}} ημέρες',
+ hourAgo_one: 'πριν από {{count}} ώρα',
+ hourAgo_other: 'πριν από {{count}} ώρες',
+ justNow: 'μόλις τώρα',
+ minuteAgo_one: 'πριν από {{count}} λεπτό',
+ minuteAgo_other: 'πριν από {{count}} λεπτά',
+ unavailable: 'η ημερομηνία δεν είναι διαθέσιμη',
+ weekAgo_one: 'πριν από {{count}} εβδομάδα',
+ weekAgo_other: 'πριν από {{count}} εβδομάδες',
+ },
+ labels: {
+ deleted: 'Διαγράφηκε {{value}}',
+ due: 'Προθεσμία: {{value}}',
+ reviewed: 'Επαναλήφθηκε: {{value}}',
+ updated: 'Ενημερώθηκε {{value}}',
+ updatedUppercase: 'ΕΝΗΜΕΡΩΘΗΚΕ {{value}}',
+ },
+ relative: {
+ dayAgo_one: 'πριν από {{count}} ημέρα',
+ dayAgo_other: 'πριν από {{count}} ημέρες',
+ inAMoment: 'Σε λίγο',
+ inDay_one: 'Σε {{count}} ημέρα',
+ inDay_other: 'Σε {{count}} ημέρες',
+ inMonth_one: 'Σε {{count}} μήνα',
+ inMonth_other: 'Σε {{count}} μήνες',
+ inWeek_one: 'Σε {{count}} εβδομάδα',
+ inWeek_other: 'Σε {{count}} εβδομάδες',
+ justNow: 'Μόλις τώρα',
+ monthAgo_one: 'πριν από {{count}} μήνα',
+ monthAgo_other: 'πριν από {{count}} μήνες',
+ secondsAgoShort: 'πριν από {{count}} δ',
+ minutesAgoShort: 'πριν από {{count}} λεπ',
+ hoursAgoShort: 'πριν από {{count}} ώ',
+ today: 'Σήμερα',
+ tomorrow: 'Αύριο',
+ weekAgo_one: 'πριν από {{count}} εβδομάδα',
+ weekAgo_other: 'πριν από {{count}} εβδομάδες',
+ yesterday: 'Χθες',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Ενέργειες για {{title}}',
+ createDeck: 'Δημιουργία τράπουλας',
+ createNote: 'Δημιουργία σημείωσης',
+ deleteDeck: 'Διαγραφή τράπουλας',
+ editDeck: 'Επεξεργασία τράπουλας',
+ newNote: 'Νέα σημείωση',
+ openDeck: 'Άνοιγμα τράπουλας {{title}}',
+ saveDeck: 'Δεν ήταν δυνατή η αποθήκευση της τράπουλας',
+ studyNow: 'Μελέτη τώρα',
+ },
+ descriptions: {
+ emptyDeck: 'Προσθέστε μια σημείωση ώστε αυτή η τράπουλα να έχει υλικό για επανάληψη.',
+ editorDefault: 'Εστιασμένη τράπουλα μελέτης.',
+ editorVisual: 'Επιλέξτε ένα σύμβολο εξωφύλλου για αυτήν την τράπουλα.',
+ notesSearchPlaceholder: 'Αναζήτηση σημειώσεων…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Αυτό μετακινεί το "{{title}}" στον Κάδο. Μπορείτε να το επαναφέρετε αργότερα.',
+ deleteDeckFallbackDescription: 'Αυτό μετακινεί αυτήν την τράπουλα στον Κάδο. Μπορείτε να την επαναφέρετε αργότερα.',
+ deleteDeckFallbackTitle: 'Διαγραφή τράπουλας;',
+ deleteDeckTitle: 'Διαγραφή "{{title}}";',
+ deleteNoteDescription: 'Αυτό μετακινεί το "{{title}}" στον Κάδο. Μπορείτε να το επαναφέρετε αργότερα.',
+ deleteNoteFallbackTitle: 'Διαγραφή σημείωσης;',
+ deleteNoteTitle: 'Διαγραφή "{{title}}";',
+ },
+ empty: {
+ noMatchingNotes: 'Δεν υπάρχουν αντίστοιχες σημειώσεις',
+ noMatchingNotesDescription: 'Καμία σημείωση δεν ταιριάζει με "{{query}}".',
+ thisDeckIsEmpty: 'Αυτή η τράπουλα είναι κενή',
+ },
+ errors: {
+ couldNotCreateDeck: 'Δεν ήταν δυνατή η δημιουργία της τράπουλας',
+ couldNotDeleteDeck: 'Δεν ήταν δυνατή η διαγραφή της τράπουλας',
+ couldNotDeleteNote: 'Δεν ήταν δυνατή η διαγραφή της σημείωσης',
+ couldNotLoadFolderPath: 'Δεν ήταν δυνατή η φόρτωση της διαδρομής φακέλου',
+ couldNotSaveDeck: 'Δεν ήταν δυνατή η αποθήκευση της τράπουλας',
+ deckCouldNotLoad: 'Δεν ήταν δυνατή η φόρτωση της τράπουλας',
+ notesCouldNotLoad: 'Δεν ήταν δυνατή η φόρτωση των σημειώσεων',
+ notesMayBeOutOfDate: 'Οι σημειώσεις μπορεί να μην είναι ενημερωμένες',
+ },
+ fields: {
+ descriptionLabel: 'Περιγραφή τράπουλας',
+ descriptionPlaceholder: 'Τι θα σας βοηθήσει να επαναλάβετε αυτή η τράπουλα;',
+ namePlaceholder: 'Όνομα τράπουλας',
+ untitledDeck: 'Τράπουλα χωρίς τίτλο',
+ untitledDeckLower: 'τράπουλα χωρίς τίτλο',
+ },
+ labels: {
+ createDeckTitle: 'Δημιουργία τράπουλας',
+ deck: 'Τράπουλα',
+ deckNotesSearch: 'Αναζήτηση σημειώσεων τράπουλας',
+ deckOverview: 'Επισκόπηση τράπουλας',
+ decks: 'Τράπουλες',
+ due: 'Προθεσμία',
+ dueToday: 'Προθεσμία σήμερα',
+ loadingDeck: 'Φόρτωση τράπουλας',
+ mastery: 'Κατάκτηση',
+ notes: 'Σημειώσεις',
+ },
+ sort: {
+ ariaLabel: 'Ταξινόμηση τράπουλων',
+ dueToday: 'Προθεσμία σήμερα',
+ title: 'Τίτλος',
+ updated: 'Ενημερώθηκε',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Τα δεδομένα άλλαξαν. Ανανεώστε και δοκιμάστε ξανά.',
+ forbidden: 'Δεν έχετε άδεια για αυτήν την ενέργεια.',
+ notFound: 'Δεν μπορέσαμε να βρούμε αυτό το στοιχείο.',
+ offline: 'Δεν είναι δυνατή η πρόσβαση στην υπηρεσία.',
+ timeout: 'Αυτό πήρε πολύ χρόνο. Δοκιμάστε ξανά.',
+ unauthorized: 'Συνδεθείτε για να συνεχίσετε.',
+ unavailable: 'Η υπηρεσία δεν είναι προσωρινά διαθέσιμη.',
+ },
+ fallback: {
+ unexpected: 'Απροσδόκητο σφάλμα',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Δημιουργία φακέλου',
+ deleteFolder: 'Διαγραφή φακέλου',
+ editFolder: 'Επεξεργασία φακέλου',
+ },
+ descriptions: {
+ editorDefault: 'Φάκελος για σχετικές τράπουλες.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Αυτό μετακινεί το "{{name}}" στον Κάδο. Μπορείτε να το επαναφέρετε αργότερα.',
+ deleteFolderFallbackDescription: 'Αυτό μετακινεί αυτόν τον φάκελο στον Κάδο. Μπορείτε να τον επαναφέρετε αργότερα.',
+ deleteFolderFallbackTitle: 'Διαγραφή φακέλου;',
+ deleteFolderTitle: 'Διαγραφή "{{name}}";',
+ },
+ empty: {
+ noMatchesInFolder: 'Δεν υπάρχουν αντιστοιχίες σε αυτόν τον φάκελο',
+ noMatchesInFolderDescription: 'Κανένας φάκελος, τράπουλα ή σημείωση δεν ταιριάζει με "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Δεν ήταν δυνατή η δημιουργία του φακέλου',
+ couldNotDeleteFolder: 'Δεν ήταν δυνατή η διαγραφή του φακέλου',
+ couldNotLoadFolderPath: 'Δεν ήταν δυνατή η φόρτωση της διαδρομής φακέλου',
+ couldNotSaveFolder: 'Δεν ήταν δυνατή η αποθήκευση του φακέλου',
+ folderCouldNotLoad: 'Δεν ήταν δυνατή η φόρτωση του φακέλου',
+ },
+ fields: {
+ descriptionLabel: 'Περιγραφή φακέλου',
+ descriptionPlaceholder: 'Τι ανήκει σε αυτόν τον φάκελο;',
+ namePlaceholder: 'Όνομα φακέλου',
+ untitledFolder: 'Φάκελος χωρίς τίτλο',
+ },
+ labels: {
+ createFolderTitle: 'Δημιουργία φακέλου',
+ folder: 'Φάκελος',
+ folders: 'Φάκελοι',
+ loadingFolder: 'Φόρτωση φακέλου',
+ name: 'Όνομα',
+ updated: 'Ενημερώθηκε',
+ },
+ sort: {
+ ariaLabel: 'Ταξινόμηση φακέλων',
+ name: 'Όνομα',
+ updated: 'Ενημερώθηκε',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Αν τα τοπικά και συγχρονισμένα δεδομένα διαφέρουν, το στοιχείο θα εμφανιστεί εδώ.',
+ heading: 'Κατάσταση συγχρονισμού',
+ title: 'Διενέξεις',
+ noConflicts: 'Δεν βρέθηκαν διενέξεις',
+ },
+ labels: {
+ menu: 'Μενού',
+ },
+ sections: {
+ settings: {
+ description: 'Προσαρμόστε το περιβάλλον και τις προτιμήσεις σας',
+ title: 'Ρυθμίσεις',
+ },
+ trash: {
+ description: 'Επαναφέρετε ή διαγράψτε οριστικά αφαιρεμένα στοιχεία',
+ title: 'Κάδος',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Κλείσιμο επεξεργαστή',
+ openActions: 'Άνοιγμα ενεργειών',
+ openWorkspaces: 'Άνοιγμα χώρων εργασίας',
+ },
+ items: {
+ home: 'Αρχική',
+ menu: 'Μενού',
+ primary: 'Κύριο',
+ settings: 'Ρυθμίσεις',
+ spaces: 'Χώροι',
+ trash: 'Κάδος',
+ workspaces: 'Χώροι εργασίας',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Προσθήκη cloze',
+ deleteNote: 'Διαγραφή σημείωσης',
+ editNote: 'Επεξεργασία σημείωσης',
+ hideDerivedCardsNote: 'Απόκρυψη σημείωσης παράγωγων καρτών',
+ openNote: 'Άνοιγμα {{title}}',
+ saveNote: 'Αποθήκευση σημείωσης',
+ showDerivedCardsNote: 'Εμφάνιση σημείωσης παράγωγων καρτών',
+ },
+ descriptions: {
+ clozeFormat: 'Κάθε κρυφό τμήμα γίνεται κάρτα επανάληψης όταν αποθηκεύετε.',
+ clozeFormatPrefix: 'Τυλίξτε το κρυφό κείμενο με',
+ derivedCardsHelper: 'Οι σημειώσεις είναι η πηγή αλήθειας για τις παράγωγες κάρτες.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Αυτό μετακινεί το "{{title}}" στον Κάδο. Μπορείτε να το επαναφέρετε αργότερα.',
+ deleteNoteFallbackDescription: 'Αυτό μετακινεί αυτήν τη σημείωση στον Κάδο. Μπορείτε να την επαναφέρετε αργότερα.',
+ deleteNoteFallbackTitle: 'Διαγραφή σημείωσης;',
+ deleteNoteTitle: 'Διαγραφή "{{title}}";',
+ },
+ errors: {
+ couldNotCreateNote: 'Δεν ήταν δυνατή η δημιουργία της σημείωσης',
+ couldNotDeleteNote: 'Δεν ήταν δυνατή η διαγραφή της σημείωσης',
+ couldNotSaveNote: 'Δεν ήταν δυνατή η αποθήκευση της σημείωσης',
+ noteCouldNotLoad: 'Δεν ήταν δυνατή η φόρτωση της σημείωσης',
+ },
+ fields: {
+ back: 'Πίσω πλευρά',
+ backPlaceholder: 'Εισαγάγετε πίσω πλευρά',
+ bodyPlaceholder: 'Γράψτε το σώμα της σημείωσης με cloze deletions…',
+ front: 'Μπροστινή πλευρά',
+ frontPlaceholder: 'Εισαγάγετε μπροστινή πλευρά',
+ noteBody: 'Σώμα σημείωσης',
+ title: 'Τίτλος',
+ titlePlaceholder: 'Προσθέστε τίτλο σημείωσης',
+ untitledCloze: 'Cloze χωρίς τίτλο',
+ untitledNote: 'Σημείωση χωρίς τίτλο',
+ },
+ labels: {
+ backUppercase: 'ΠΙΣΩ ΠΛΕΥΡΑ',
+ basic: 'Βασική',
+ basicLower: 'βασική',
+ basicUppercase: 'ΒΑΣΙΚΗ',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Μορφή cloze',
+ clozeUppercase: 'CLOZE',
+ deck: 'Τράπουλα',
+ derivedCards: 'ΠΑΡΑΓΩΓΕΣ ΚΑΡΤΕΣ',
+ due: 'Προθεσμία',
+ frontUppercase: 'ΜΠΡΟΣΤΙΝΗ ΠΛΕΥΡΑ',
+ inProgress: 'Σε εξέλιξη',
+ inProgressUppercase: 'ΣΕ ΕΞΕΛΙΞΗ',
+ loadingNote: 'Φόρτωση σημείωσης',
+ loadingNoteEditor: 'Φόρτωση επεξεργαστή σημειώσεων',
+ markdownFormatting: 'Μορφοποίηση Markdown',
+ mastered: 'Κατακτημένο',
+ masteredUppercase: 'ΚΑΤΑΚΤΗΜΕΝΟ',
+ newNote: 'Νέα σημείωση',
+ noteBody: 'ΣΩΜΑ ΣΗΜΕΙΩΣΗΣ',
+ noteContent: 'Περιεχόμενο σημείωσης',
+ noteDetails: 'Λεπτομέρειες σημείωσης',
+ noteMetadata: 'Μεταδεδομένα σημείωσης',
+ noteType: 'Τύπος σημείωσης',
+ notes: 'Σημειώσεις',
+ reviewed: 'Επαναλήφθηκε',
+ studyProgress: 'Πρόοδος μελέτης',
+ studyProgressUppercase: 'ΠΡΟΟΔΟΣ ΜΕΛΕΤΗΣ',
+ titleUppercase: 'ΤΙΤΛΟΣ',
+ updated: 'Ενημερώθηκε',
+ },
+ sort: {
+ ariaLabel: 'Ταξινόμηση σημειώσεων',
+ title: 'Τίτλος',
+ updated: 'Ενημερώθηκε',
+ },
+ toolbar: {
+ bold: 'Έντονα',
+ italic: 'Πλάγια',
+ link: 'Σύνδεσμος',
+ list: 'Λίστα',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Ξανά',
+ backToDeck: 'Πίσω στην τράπουλα',
+ continueReview: 'Συνέχεια επανάληψης',
+ easy: 'Εύκολο',
+ good: 'Καλό',
+ hard: 'Δύσκολο',
+ newNote: 'Νέα σημείωση',
+ showAnswer: 'Εμφάνιση απάντησης',
+ },
+ errors: {
+ couldNotGradeCard: 'Δεν ήταν δυνατή η αξιολόγηση της κάρτας',
+ reviewCouldNotLoad: 'Δεν ήταν δυνατή η φόρτωση της επανάληψης',
+ reviewCouldNotStart: 'Δεν ήταν δυνατή η έναρξη της επανάληψης',
+ summaryCouldNotLoad: 'Δεν ήταν δυνατή η φόρτωση της σύνοψης επανάληψης',
+ summaryNotAvailable: 'Η σύνοψη επανάληψης δεν είναι διαθέσιμη',
+ summaryNotComplete: 'Αυτή η επανάληψη δεν έχει ολοκληρωθεί ακόμη.',
+ },
+ labels: {
+ cardsReviewed: 'Κάρτες που επαναλήφθηκαν',
+ deck: 'Τράπουλα',
+ duration: 'Διάρκεια',
+ loadingReview: 'Φόρτωση επανάληψης',
+ loadingSummary: 'Φόρτωση σύνοψης',
+ progress: 'Πρόοδος επανάληψης',
+ review: 'Επανάληψη',
+ reviewComplete: 'Η επανάληψη ολοκληρώθηκε',
+ reviewed_one: 'Επαναλήφθηκε {{count}}',
+ reviewed_other: 'Επαναλήφθηκαν {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} ώ {{minutes}} λεπ',
+ durationMinutes: '{{minutes}} λεπ',
+ durationSeconds: '{{seconds}} δ',
+ saved: 'Η πρόοδός σας αποθηκεύτηκε σε αυτήν την τράπουλα.',
+ },
+ unavailable: {
+ description: 'Προσθέστε μια σημείωση ώστε αυτή η τράπουλα να μπει στην ουρά επανάληψης.',
+ title: 'Δεν υπάρχουν κάρτες για επανάληψη',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Εκκαθάριση αναζήτησης',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Δεν υπάρχουν αντιστοιχίες σε αυτόν τον χώρο εργασίας',
+ noMatchesInWorkspaceDescription: 'Κανένας φάκελος, τράπουλα ή σημείωση δεν ταιριάζει με "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Δεν ήταν δυνατή η ολοκλήρωση της αναζήτησης',
+ },
+ labels: {
+ results: 'Αποτελέσματα αναζήτησης',
+ resultsFor: 'Αποτελέσματα για "{{query}}"',
+ searchingContent: 'Αναζήτηση περιεχομένου',
+ },
+ resultGroups: {
+ deck: 'Τράπουλες',
+ folder: 'Φάκελοι',
+ note: 'Σημειώσεις',
+ },
+ resultKinds: {
+ deck: 'τράπουλα',
+ folder: 'φάκελος',
+ note: 'σημείωση',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Επαναφορά όλων των ρυθμίσεων',
+ resetSettings: 'Επαναφορά ρυθμίσεων',
+ resetToDefaults: 'Επαναφορά προεπιλογών',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Επικολλήστε έγκυρο JSON με 21 αριθμητικές τιμές.',
+ fsrsErrorInvalidParams_one: 'Εισαγάγετε έναν πίνακα JSON με ακριβώς {{count}} πεπερασμένο αριθμό.',
+ fsrsErrorInvalidParams_other: 'Εισαγάγετε έναν πίνακα JSON με ακριβώς {{count}} πεπερασμένους αριθμούς.',
+ fsrsHelper: 'Αυτή είναι μια ρύθμιση για προχωρημένους. Οι τιμές πρέπει να παραμείνουν στη σειρά.',
+ fsrsJsonLabel: 'JSON παραμέτρων FSRS',
+ fsrsTitle: 'Επεξεργασία παραμέτρων FSRS',
+ fsrsDescription: 'Επικολλήστε έναν πίνακα JSON με 21 αριθμούς για να παρακάμψετε τα βάρη του scheduler.',
+ resetDescription: 'Αυτό επαναφέρει ζώνη ώρας, όρια μελέτης και ρυθμίσεις FSRS.',
+ resetDescriptionWithLanguage: 'Αυτό επαναφέρει γλώσσα, ζώνη ώρας, όρια μελέτης και ρυθμίσεις FSRS.',
+ resetTitle: 'Επαναφορά όλων των ρυθμίσεων;',
+ timezoneDescription: 'Αναζητήστε πόλη ή αναγνωριστικό ζώνης ώρας.',
+ timezoneSearchLabel: 'Αναζήτηση ζωνών ώρας',
+ timezoneSearchPlaceholder: 'Αναζήτηση ζωνών ώρας…',
+ timezoneTitle: 'Επιλογή ζώνης ώρας',
+ },
+ errors: {
+ couldNotResetSettings: 'Δεν ήταν δυνατή η επαναφορά των ρυθμίσεων',
+ couldNotSaveSettings: 'Δεν ήταν δυνατή η αποθήκευση των ρυθμίσεων',
+ settingsCouldNotLoad: 'Δεν ήταν δυνατή η φόρτωση των ρυθμίσεων',
+ settingsUnavailable: 'Οι ρυθμίσεις δεν είναι διαθέσιμες.',
+ },
+ labels: {
+ appearance: 'Εμφάνιση',
+ automatic: 'Αυτόματα',
+ fsrsParameters: 'Παράμετροι FSRS',
+ general: 'Γενικά',
+ language: 'Γλώσσα',
+ loadingSettings: 'Φόρτωση ρυθμίσεων',
+ masteryHorizon: 'Ορίζοντας κατάκτησης',
+ newCardOrder: 'Σειρά νέων καρτών',
+ newCardsPerDay: 'Νέες κάρτες ανά ημέρα',
+ reviewCardsPerDay: 'Κάρτες επανάληψης ανά ημέρα',
+ savingSettings: 'Αποθήκευση ρυθμίσεων',
+ schedule: 'Πρόγραμμα',
+ searchNoTimezones: 'Δεν υπάρχουν αντίστοιχες ζώνες ώρας.',
+ settings: 'Ρυθμίσεις',
+ settingsReset: 'Οι ρυθμίσεις επαναφέρθηκαν',
+ study: 'Μελέτη',
+ targetRecallProbability: 'Στόχος πιθανότητας ανάκλησης',
+ theme: 'Θέμα',
+ timezone: 'Ζώνη ώρας',
+ },
+ options: {
+ languageEnUs: 'Αγγλικά (ΗΠΑ)',
+ newCardsAfterReviews: 'Μετά τις επαναλήψεις',
+ newCardsBeforeReviews: 'Πριν από τις επαναλήψεις',
+ newCardsMixed: 'Μικτά',
+ themeDark: 'Σκούρο',
+ themeLight: 'Ανοιχτό',
+ themeSystem: 'Σύστημα',
+ timezoneSystem: 'Χρήση ζώνης ώρας συστήματος',
+ },
+ rows: {
+ fsrsDescription: 'Βάρη μοντέλου για προχωρημένους',
+ languageDescription: 'Γλώσσα διεπαφής',
+ masteryHorizonDescription: 'Ημέρες που μια κάρτα πρέπει να παραμένει ανακλήσιμη στην πιθανότητα στόχο ή πάνω από αυτή για να θεωρηθεί κατακτημένη',
+ newCardOrderDescription: 'Σειρά νέων καρτών σε σχέση με τις επαναλήψεις',
+ newCardsPerDayDescription: 'Μέγιστος αριθμός νέων καρτών ανά ημέρα',
+ reviewCardsPerDayDescription: 'Μέγιστος αριθμός καρτών επανάληψης ανά ημέρα',
+ targetRecallProbabilityDescription: 'Ελάχιστη πιθανότητα ανάκλησης στην επόμενη προγραμματισμένη επανάληψη',
+ timezoneDescription: 'Χρησιμοποιήστε αυτόματη ζώνη ώρας ή επιλέξτε πόλη.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Οριστική διαγραφή',
+ empty: 'Άδειασμα',
+ emptyTrash: 'Άδειασμα κάδου',
+ restore: 'Επαναφορά',
+ restoringItem: 'Επαναφορά {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Αυτό διαγράφει οριστικά το "{{title}}". Δεν μπορεί να αναιρεθεί.',
+ deleteItemFallbackDescription: 'Αυτό διαγράφει οριστικά αυτό το στοιχείο. Δεν μπορεί να αναιρεθεί.',
+ deleteItemFallbackTitle: 'Διαγραφή στοιχείου;',
+ deleteItemTitle: 'Διαγραφή "{{title}}";',
+ emptyTrashDescription: 'Αυτό διαγράφει οριστικά όλα τα στοιχεία στον Κάδο. Δεν μπορεί να αναιρεθεί.',
+ emptyTrashTitle: 'Άδειασμα κάδου;',
+ },
+ empty: {
+ description: 'Τα στοιχεία που διαγράφετε θα εμφανίζονται εδώ πριν αφαιρεθούν οριστικά.',
+ title: 'Ο Κάδος είναι άδειος',
+ },
+ errors: {
+ couldNotDeleteItem: 'Δεν ήταν δυνατή η διαγραφή του στοιχείου',
+ couldNotEmptyTrash: 'Δεν ήταν δυνατό το άδειασμα του Κάδου',
+ couldNotRestoreItem: 'Δεν ήταν δυνατή η επαναφορά του στοιχείου',
+ trashCouldNotLoad: 'Δεν ήταν δυνατή η φόρτωση του Κάδου',
+ trashMayBeOutOfDate: 'Ο Κάδος μπορεί να μην είναι ενημερωμένος',
+ },
+ labels: {
+ deletedAge: 'Διαγράφηκε {{value}}',
+ itemCount_one: '{{count}} στοιχείο',
+ itemCount_other: '{{count}} στοιχεία',
+ lastEmptied: 'Τελευταίο άδειασμα {{value}}',
+ loadingTrash: 'Φόρτωση Κάδου',
+ originalLocation: 'Αρχική τοποθεσία: {{location}}',
+ title: 'Κάδος',
+ trashActions: 'Ενέργειες κάδου για {{title}}',
+ },
+ kinds: {
+ deck: 'Τράπουλα',
+ folder: 'Φάκελος',
+ note: 'Σημείωση',
+ workspace: 'Χώρος εργασίας',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Δημιουργία χώρου εργασίας',
+ deleteWorkspace: 'Διαγραφή χώρου εργασίας',
+ editWorkspace: 'Επεξεργασία χώρου εργασίας',
+ newWorkspace: 'Νέος χώρος εργασίας',
+ openWorkspace: 'Άνοιγμα {{title}}',
+ openingWorkspace: 'Άνοιγμα {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Πλαίσιο μελέτης.',
+ editorVisual: 'Επιλέξτε μια οπτική άγκυρα για αυτόν τον χώρο εργασίας.',
+ emptyList: 'Διαχωρίστε τράπουλες, σημειώσεις και ουρές επανάληψης ανά πλαίσιο μελέτης.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Αυτό μετακινεί το "{{title}}" στον Κάδο. Μπορείτε να το επαναφέρετε αργότερα.',
+ deleteWorkspaceFallbackDescription: 'Αυτό μετακινεί αυτόν τον χώρο εργασίας στον Κάδο. Μπορείτε να τον επαναφέρετε αργότερα.',
+ deleteWorkspaceFallbackTitle: 'Διαγραφή χώρου εργασίας;',
+ deleteWorkspaceTitle: 'Διαγραφή "{{title}}";',
+ },
+ empty: {
+ startWithWorkspace: 'Ξεκινήστε με έναν χώρο εργασίας',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Δεν ήταν δυνατή η δημιουργία του χώρου εργασίας',
+ couldNotDeleteWorkspace: 'Δεν ήταν δυνατή η διαγραφή του χώρου εργασίας',
+ couldNotOpenWorkspace: 'Δεν ήταν δυνατό το άνοιγμα του χώρου εργασίας',
+ couldNotSaveWorkspace: 'Δεν ήταν δυνατή η αποθήκευση του χώρου εργασίας',
+ workspaceCouldNotLoad: 'Δεν ήταν δυνατή η φόρτωση του χώρου εργασίας',
+ workspacesCouldNotLoad: 'Δεν ήταν δυνατή η φόρτωση των χώρων εργασίας',
+ },
+ fields: {
+ descriptionLabel: 'Περιγραφή χώρου εργασίας',
+ descriptionPlaceholder: 'Τι ανήκει σε αυτόν τον χώρο εργασίας;',
+ namePlaceholder: 'Όνομα χώρου εργασίας',
+ untitledWorkspace: 'Χώρος εργασίας χωρίς τίτλο',
+ },
+ labels: {
+ createWorkspaceTitle: 'Δημιουργία χώρου εργασίας',
+ loadingWorkspaces: 'Φόρτωση χώρων εργασίας',
+ workspace: 'Χώρος εργασίας',
+ workspaces: 'Χώροι εργασίας',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/en-US.ts b/ui/src/core/i18n/resources/en-US.ts
index 8cf7217..9add2ab 100644
--- a/ui/src/core/i18n/resources/en-US.ts
+++ b/ui/src/core/i18n/resources/en-US.ts
@@ -103,16 +103,16 @@ export const enUS = {
unavailable: 'Date unavailable',
},
age: {
- dayAgo: '{{count}} day ago',
- daysAgo: '{{count}} days ago',
- hourAgo: '{{count}} hour ago',
- hoursAgo: '{{count}} hours ago',
+ dayAgo_one: '{{count}} day ago',
+ dayAgo_other: '{{count}} days ago',
+ hourAgo_one: '{{count}} hour ago',
+ hourAgo_other: '{{count}} hours ago',
justNow: 'just now',
- minuteAgo: '{{count}} minute ago',
- minutesAgo: '{{count}} minutes ago',
+ minuteAgo_one: '{{count}} minute ago',
+ minuteAgo_other: '{{count}} minutes ago',
unavailable: 'date unavailable',
- weekAgo: '{{count}} week ago',
- weeksAgo: '{{count}} weeks ago',
+ weekAgo_one: '{{count}} week ago',
+ weekAgo_other: '{{count}} weeks ago',
},
labels: {
deleted: 'Deleted {{value}}',
@@ -122,25 +122,25 @@ export const enUS = {
updatedUppercase: 'UPDATED {{value}}',
},
relative: {
- dayAgo: '{{count}} day ago',
- daysAgo: '{{count}} days ago',
+ dayAgo_one: '{{count}} day ago',
+ dayAgo_other: '{{count}} days ago',
inAMoment: 'In a moment',
- inDay: 'In {{count}} day',
- inDays: 'In {{count}} days',
- inMonth: 'In {{count}} month',
- inMonths: 'In {{count}} months',
- inWeek: 'In {{count}} week',
- inWeeks: 'In {{count}} weeks',
+ inDay_one: 'In {{count}} day',
+ inDay_other: 'In {{count}} days',
+ inMonth_one: 'In {{count}} month',
+ inMonth_other: 'In {{count}} months',
+ inWeek_one: 'In {{count}} week',
+ inWeek_other: 'In {{count}} weeks',
justNow: 'Just now',
- monthAgo: '{{count}} month ago',
- monthsAgo: '{{count}} months ago',
+ monthAgo_one: '{{count}} month ago',
+ monthAgo_other: '{{count}} months ago',
secondsAgoShort: '{{count}}s ago',
minutesAgoShort: '{{count}}m ago',
hoursAgoShort: '{{count}}h ago',
today: 'Today',
tomorrow: 'Tomorrow',
- weekAgo: '{{count}} week ago',
- weeksAgo: '{{count}} weeks ago',
+ weekAgo_one: '{{count}} week ago',
+ weekAgo_other: '{{count}} weeks ago',
yesterday: 'Yesterday',
},
},
@@ -421,7 +421,8 @@ export const enUS = {
progress: 'Review progress',
review: 'Review',
reviewComplete: 'Review complete',
- reviewed: 'Reviewed {{count}}',
+ reviewed_one: 'Reviewed {{count}}',
+ reviewed_other: 'Reviewed {{count}}',
},
summary: {
durationHoursMinutes: '{{hours}}h {{minutes}}m',
@@ -469,7 +470,8 @@ export const enUS = {
},
dialogs: {
fsrsErrorInvalidJson: 'Paste valid JSON with 21 numeric values.',
- fsrsErrorInvalidParams: 'Enter a JSON array with exactly {{count}} finite numbers.',
+ fsrsErrorInvalidParams_one: 'Enter a JSON array with exactly {{count}} finite number.',
+ fsrsErrorInvalidParams_other: 'Enter a JSON array with exactly {{count}} finite numbers.',
fsrsHelper: 'This is an expert override. Values must stay in order.',
fsrsJsonLabel: 'FSRS Parameters JSON',
fsrsTitle: 'Edit FSRS parameters',
@@ -559,8 +561,8 @@ export const enUS = {
},
labels: {
deletedAge: 'Deleted {{value}}',
- itemCount: '{{count}} item',
- itemCountPlural: '{{count}} items',
+ itemCount_one: '{{count}} item',
+ itemCount_other: '{{count}} items',
lastEmptied: 'Last emptied {{value}}',
loadingTrash: 'Loading trash',
originalLocation: 'Original location: {{location}}',
diff --git a/ui/src/core/i18n/resources/es.ts b/ui/src/core/i18n/resources/es.ts
new file mode 100644
index 0000000..3333ab9
--- /dev/null
+++ b/ui/src/core/i18n/resources/es.ts
@@ -0,0 +1,623 @@
+export const es = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Inténtalo de nuevo. Si sigue ocurriendo, vuelve a abrir Clear.',
+ title: 'No se pudo iniciar',
+ },
+ loadingTitle: 'Preparando tu espacio de estudio',
+ },
+ common: {
+ actions: {
+ back: 'Atrás',
+ cancel: 'Cancelar',
+ checkAgain: 'Comprobar de nuevo',
+ close: 'Cerrar',
+ create: 'Crear',
+ delete: 'Eliminar',
+ dismissError: 'Descartar error',
+ dismissStatus: 'Descartar estado',
+ edit: 'Editar',
+ itemActions: 'Acciones de {{title}}',
+ reset: 'Restablecer',
+ review: 'Repasar',
+ save: 'Guardar',
+ saveChanges: 'Guardar cambios',
+ tryAgain: 'Intentar de nuevo',
+ },
+ labels: {
+ active: 'Activo',
+ clear: 'Clear',
+ custom: 'Personalizado',
+ default: 'Predeterminado',
+ loadingEditor: 'Cargando editor',
+ name: 'Nombre',
+ completedTask: 'Tarea completada',
+ description: 'Descripción',
+ incompleteTask: 'Tarea incompleta',
+ percentageInput: 'Porcentaje de {{label}}',
+ visual: 'Visual',
+ },
+ status: {
+ actionFailed: 'La acción falló',
+ actionInProgress: 'Acción en curso',
+ },
+ sort: {
+ ascending: 'Asc',
+ column: 'Columna',
+ descending: 'Desc',
+ direction: 'Dirección',
+ sort: 'Ordenar',
+ },
+ search: {
+ label: 'Buscar',
+ },
+ visualPicker: {
+ allLucideIcons: 'Todos los iconos de Lucide',
+ browseIconsFor: 'Explora o busca iconos para {{label}}.',
+ chooseIcon: 'Elegir icono',
+ iconPicker: 'Selector de iconos de {{label}}',
+ iconSearch: 'Búsqueda de iconos de {{label}}',
+ iconsCouldNotLoad: 'No se pudieron cargar los iconos.',
+ loadingIcons: 'Cargando iconos',
+ loadingMoreIcons: 'Cargando más iconos',
+ moreIcons: 'Más iconos',
+ noIconsMatch: 'Ningún icono coincide con "{{query}}".',
+ searchIconsPlaceholder: 'Buscar iconos…',
+ selectedIcon: '{{label}} seleccionado',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Crear',
+ newDeck: 'Nuevo mazo',
+ newFolder: 'Nueva carpeta',
+ },
+ descriptions: {
+ defaultWorkspace: 'Mantén juntos mazos, carpetas y notas.',
+ emptyWorkspace: 'Crea un mazo y luego añade notas para crear tu cola de repaso.',
+ emptyFolder: 'Crea un mazo y luego añade notas para crear una cola de repaso.',
+ searchPlaceholder: 'Buscar carpetas, mazos y notas…',
+ },
+ empty: {
+ createFirstDeck: 'Crea tu primer mazo',
+ },
+ errors: {
+ couldNotDeleteDeck: 'No se pudo eliminar el mazo',
+ couldNotDeleteFolder: 'No se pudo eliminar la carpeta',
+ couldNotDeleteWorkspace: 'No se pudo eliminar el espacio de trabajo',
+ dashboardCouldNotOpen: 'No se pudo abrir el panel',
+ decksCouldNotLoad: 'No se pudieron cargar los mazos',
+ decksMayBeOutOfDate: 'Los mazos pueden estar desactualizados',
+ foldersCouldNotLoad: 'No se pudieron cargar las carpetas',
+ foldersMayBeOutOfDate: 'Las carpetas pueden estar desactualizadas',
+ workspaceCouldNotLoad: 'No se pudo cargar el espacio de trabajo',
+ },
+ labels: {
+ dashboard: 'Panel',
+ loadingDashboard: 'Cargando panel',
+ newItem: 'Nuevo elemento',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Fecha no disponible',
+ },
+ age: {
+ dayAgo_one: 'hace {{count}} día',
+ dayAgo_other: 'hace {{count}} días',
+ hourAgo_one: 'hace {{count}} hora',
+ hourAgo_other: 'hace {{count}} horas',
+ justNow: 'ahora mismo',
+ minuteAgo_one: 'hace {{count}} minuto',
+ minuteAgo_other: 'hace {{count}} minutos',
+ unavailable: 'fecha no disponible',
+ weekAgo_one: 'hace {{count}} semana',
+ weekAgo_other: 'hace {{count}} semanas',
+ },
+ labels: {
+ deleted: 'Eliminado {{value}}',
+ due: 'Vence: {{value}}',
+ reviewed: 'Repasado: {{value}}',
+ updated: 'Actualizado {{value}}',
+ updatedUppercase: 'ACTUALIZADO {{value}}',
+ },
+ relative: {
+ dayAgo_one: 'hace {{count}} día',
+ dayAgo_other: 'hace {{count}} días',
+ inAMoment: 'En un momento',
+ inDay_one: 'En {{count}} día',
+ inDay_other: 'En {{count}} días',
+ inMonth_one: 'En {{count}} mes',
+ inMonth_other: 'En {{count}} meses',
+ inWeek_one: 'En {{count}} semana',
+ inWeek_other: 'En {{count}} semanas',
+ justNow: 'Ahora mismo',
+ monthAgo_one: 'hace {{count}} mes',
+ monthAgo_other: 'hace {{count}} meses',
+ secondsAgoShort: 'hace {{count}} s',
+ minutesAgoShort: 'hace {{count}} min',
+ hoursAgoShort: 'hace {{count}} h',
+ today: 'Hoy',
+ tomorrow: 'Mañana',
+ weekAgo_one: 'hace {{count}} semana',
+ weekAgo_other: 'hace {{count}} semanas',
+ yesterday: 'Ayer',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Acciones de {{title}}',
+ createDeck: 'Crear mazo',
+ createNote: 'Crear nota',
+ deleteDeck: 'Eliminar mazo',
+ editDeck: 'Editar mazo',
+ newNote: 'Nueva nota',
+ openDeck: 'Abrir mazo {{title}}',
+ saveDeck: 'No se pudo guardar el mazo',
+ studyNow: 'Estudiar ahora',
+ },
+ descriptions: {
+ emptyDeck: 'Añade una nota para que este mazo tenga material de repaso.',
+ editorDefault: 'Mazo de estudio enfocado.',
+ editorVisual: 'Elige un glifo de portada para este mazo.',
+ notesSearchPlaceholder: 'Buscar notas…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Esto mueve "{{title}}" a la Papelera. Puedes restaurarlo más tarde.',
+ deleteDeckFallbackDescription: 'Esto mueve este mazo a la Papelera. Puedes restaurarlo más tarde.',
+ deleteDeckFallbackTitle: '¿Eliminar mazo?',
+ deleteDeckTitle: '¿Eliminar "{{title}}"?',
+ deleteNoteDescription: 'Esto mueve "{{title}}" a la Papelera. Puedes restaurarla más tarde.',
+ deleteNoteFallbackTitle: '¿Eliminar nota?',
+ deleteNoteTitle: '¿Eliminar "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'No hay notas coincidentes',
+ noMatchingNotesDescription: 'Ninguna nota coincidió con "{{query}}".',
+ thisDeckIsEmpty: 'Este mazo está vacío',
+ },
+ errors: {
+ couldNotCreateDeck: 'No se pudo crear el mazo',
+ couldNotDeleteDeck: 'No se pudo eliminar el mazo',
+ couldNotDeleteNote: 'No se pudo eliminar la nota',
+ couldNotLoadFolderPath: 'No se pudo cargar la ruta de la carpeta',
+ couldNotSaveDeck: 'No se pudo guardar el mazo',
+ deckCouldNotLoad: 'No se pudo cargar el mazo',
+ notesCouldNotLoad: 'No se pudieron cargar las notas',
+ notesMayBeOutOfDate: 'Las notas pueden estar desactualizadas',
+ },
+ fields: {
+ descriptionLabel: 'Descripción del mazo',
+ descriptionPlaceholder: '¿Qué te ayudará a repasar este mazo?',
+ namePlaceholder: 'Nombre del mazo',
+ untitledDeck: 'Mazo sin título',
+ untitledDeckLower: 'mazo sin título',
+ },
+ labels: {
+ createDeckTitle: 'Crear mazo',
+ deck: 'Mazo',
+ deckNotesSearch: 'Búsqueda de notas del mazo',
+ deckOverview: 'Resumen del mazo',
+ decks: 'Mazos',
+ due: 'Vence',
+ dueToday: 'Vence hoy',
+ loadingDeck: 'Cargando mazo',
+ mastery: 'Dominio',
+ notes: 'Notas',
+ },
+ sort: {
+ ariaLabel: 'Ordenar mazos',
+ dueToday: 'Vence hoy',
+ title: 'Título',
+ updated: 'Actualizado',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Los datos cambiaron. Actualiza e inténtalo de nuevo.',
+ forbidden: 'No tienes permiso para hacer esto.',
+ notFound: 'No pudimos encontrar este elemento.',
+ offline: 'No se puede conectar con el servicio.',
+ timeout: 'Esto tardó demasiado. Inténtalo de nuevo.',
+ unauthorized: 'Inicia sesión para continuar.',
+ unavailable: 'El servicio no está disponible temporalmente.',
+ },
+ fallback: {
+ unexpected: 'Error inesperado',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Crear carpeta',
+ deleteFolder: 'Eliminar carpeta',
+ editFolder: 'Editar carpeta',
+ },
+ descriptions: {
+ editorDefault: 'Carpeta para mazos relacionados.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Esto mueve "{{name}}" a la Papelera. Puedes restaurarla más tarde.',
+ deleteFolderFallbackDescription: 'Esto mueve esta carpeta a la Papelera. Puedes restaurarla más tarde.',
+ deleteFolderFallbackTitle: '¿Eliminar carpeta?',
+ deleteFolderTitle: '¿Eliminar "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'No hay coincidencias en esta carpeta',
+ noMatchesInFolderDescription: 'Ninguna carpeta, mazo o nota coincidió con "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'No se pudo crear la carpeta',
+ couldNotDeleteFolder: 'No se pudo eliminar la carpeta',
+ couldNotLoadFolderPath: 'No se pudo cargar la ruta de la carpeta',
+ couldNotSaveFolder: 'No se pudo guardar la carpeta',
+ folderCouldNotLoad: 'No se pudo cargar la carpeta',
+ },
+ fields: {
+ descriptionLabel: 'Descripción de la carpeta',
+ descriptionPlaceholder: '¿Qué pertenece a esta carpeta?',
+ namePlaceholder: 'Nombre de la carpeta',
+ untitledFolder: 'Carpeta sin título',
+ },
+ labels: {
+ createFolderTitle: 'Crear carpeta',
+ folder: 'Carpeta',
+ folders: 'Carpetas',
+ loadingFolder: 'Cargando carpeta',
+ name: 'Nombre',
+ updated: 'Actualizado',
+ },
+ sort: {
+ ariaLabel: 'Ordenar carpetas',
+ name: 'Nombre',
+ updated: 'Actualizado',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Si los datos locales y sincronizados alguna vez difieren, el elemento aparecerá aquí.',
+ heading: 'Estado de sincronización',
+ title: 'Conflictos',
+ noConflicts: 'No se encontraron conflictos',
+ },
+ labels: {
+ menu: 'Menú',
+ },
+ sections: {
+ settings: {
+ description: 'Personaliza tu entorno y preferencias',
+ title: 'Ajustes',
+ },
+ trash: {
+ description: 'Restaura o elimina permanentemente elementos quitados',
+ title: 'Papelera',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Cerrar editor',
+ openActions: 'Abrir acciones',
+ openWorkspaces: 'Abrir espacios de trabajo',
+ },
+ items: {
+ home: 'Inicio',
+ menu: 'Menú',
+ primary: 'Principal',
+ settings: 'Ajustes',
+ spaces: 'Espacios',
+ trash: 'Papelera',
+ workspaces: 'Espacios de trabajo',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Añadir cloze',
+ deleteNote: 'Eliminar nota',
+ editNote: 'Editar nota',
+ hideDerivedCardsNote: 'Ocultar nota de tarjetas derivadas',
+ openNote: 'Abrir {{title}}',
+ saveNote: 'Guardar nota',
+ showDerivedCardsNote: 'Mostrar nota de tarjetas derivadas',
+ },
+ descriptions: {
+ clozeFormat: 'Cada parte oculta se convierte en una tarjeta de repaso al guardar.',
+ clozeFormatPrefix: 'Envuelve el texto oculto con',
+ derivedCardsHelper: 'Las notas son la fuente de verdad de las tarjetas derivadas.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Esto mueve "{{title}}" a la Papelera. Puedes restaurarla más tarde.',
+ deleteNoteFallbackDescription: 'Esto mueve esta nota a la Papelera. Puedes restaurarla más tarde.',
+ deleteNoteFallbackTitle: '¿Eliminar nota?',
+ deleteNoteTitle: '¿Eliminar "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'No se pudo crear la nota',
+ couldNotDeleteNote: 'No se pudo eliminar la nota',
+ couldNotSaveNote: 'No se pudo guardar la nota',
+ noteCouldNotLoad: 'No se pudo cargar la nota',
+ },
+ fields: {
+ back: 'Reverso',
+ backPlaceholder: 'Introduce el reverso',
+ bodyPlaceholder: 'Escribe el cuerpo de la nota con cloze deletions…',
+ front: 'Anverso',
+ frontPlaceholder: 'Introduce el anverso',
+ noteBody: 'Cuerpo de la nota',
+ title: 'Título',
+ titlePlaceholder: 'Añade un título de nota',
+ untitledCloze: 'Cloze sin título',
+ untitledNote: 'Nota sin título',
+ },
+ labels: {
+ backUppercase: 'REVERSO',
+ basic: 'Básica',
+ basicLower: 'básica',
+ basicUppercase: 'BÁSICA',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Formato cloze',
+ clozeUppercase: 'CLOZE',
+ deck: 'Mazo',
+ derivedCards: 'TARJETAS DERIVADAS',
+ due: 'Vence',
+ frontUppercase: 'ANVERSO',
+ inProgress: 'En curso',
+ inProgressUppercase: 'EN CURSO',
+ loadingNote: 'Cargando nota',
+ loadingNoteEditor: 'Cargando editor de notas',
+ markdownFormatting: 'Formato Markdown',
+ mastered: 'Dominado',
+ masteredUppercase: 'DOMINADO',
+ newNote: 'Nueva nota',
+ noteBody: 'CUERPO DE LA NOTA',
+ noteContent: 'Contenido de la nota',
+ noteDetails: 'Detalles de la nota',
+ noteMetadata: 'Metadatos de la nota',
+ noteType: 'Tipo de nota',
+ notes: 'Notas',
+ reviewed: 'Repasado',
+ studyProgress: 'Progreso de estudio',
+ studyProgressUppercase: 'PROGRESO DE ESTUDIO',
+ titleUppercase: 'TÍTULO',
+ updated: 'Actualizado',
+ },
+ sort: {
+ ariaLabel: 'Ordenar notas',
+ title: 'Título',
+ updated: 'Actualizado',
+ },
+ toolbar: {
+ bold: 'Negrita',
+ italic: 'Cursiva',
+ link: 'Enlace',
+ list: 'Lista',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Otra vez',
+ backToDeck: 'Volver al mazo',
+ continueReview: 'Continuar repaso',
+ easy: 'Fácil',
+ good: 'Bien',
+ hard: 'Difícil',
+ newNote: 'Nueva nota',
+ showAnswer: 'Mostrar respuesta',
+ },
+ errors: {
+ couldNotGradeCard: 'No se pudo calificar la tarjeta',
+ reviewCouldNotLoad: 'No se pudo cargar el repaso',
+ reviewCouldNotStart: 'No se pudo iniciar el repaso',
+ summaryCouldNotLoad: 'No se pudo cargar el resumen del repaso',
+ summaryNotAvailable: 'El resumen del repaso no está disponible',
+ summaryNotComplete: 'Este repaso aún no está completo.',
+ },
+ labels: {
+ cardsReviewed: 'Tarjetas repasadas',
+ deck: 'Mazo',
+ duration: 'Duración',
+ loadingReview: 'Cargando repaso',
+ loadingSummary: 'Cargando resumen',
+ progress: 'Progreso del repaso',
+ review: 'Repaso',
+ reviewComplete: 'Repaso completo',
+ reviewed_one: '{{count}} repasada',
+ reviewed_other: '{{count}} repasadas',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} h {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'Tu progreso se guardó en este mazo.',
+ },
+ unavailable: {
+ description: 'Añade una nota para que este mazo pueda entrar en la cola de repaso.',
+ title: 'No hay tarjetas para repasar',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Borrar búsqueda',
+ },
+ empty: {
+ noMatchesInWorkspace: 'No hay coincidencias en este espacio de trabajo',
+ noMatchesInWorkspaceDescription: 'Ninguna carpeta, mazo o nota coincidió con "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'No se pudo completar la búsqueda',
+ },
+ labels: {
+ results: 'Resultados de búsqueda',
+ resultsFor: 'Resultados para "{{query}}"',
+ searchingContent: 'Buscando contenido',
+ },
+ resultGroups: {
+ deck: 'Mazos',
+ folder: 'Carpetas',
+ note: 'Notas',
+ },
+ resultKinds: {
+ deck: 'mazo',
+ folder: 'carpeta',
+ note: 'nota',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Restablecer todos los ajustes',
+ resetSettings: 'Restablecer ajustes',
+ resetToDefaults: 'Restablecer valores predeterminados',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Pega un JSON válido con 21 valores numéricos.',
+ fsrsErrorInvalidParams_one: 'Introduce un array JSON con exactamente {{count}} número finito.',
+ fsrsErrorInvalidParams_other: 'Introduce un array JSON con exactamente {{count}} números finitos.',
+ fsrsHelper: 'Esta es una sobrescritura experta. Los valores deben mantenerse en orden.',
+ fsrsJsonLabel: 'JSON de parámetros FSRS',
+ fsrsTitle: 'Editar parámetros FSRS',
+ fsrsDescription: 'Pega un array JSON con 21 números para sobrescribir los pesos del scheduler.',
+ resetDescription: 'Esto restaura zona horaria, límites de estudio y ajustes de FSRS.',
+ resetDescriptionWithLanguage: 'Esto restaura idioma, zona horaria, límites de estudio y ajustes de FSRS.',
+ resetTitle: '¿Restablecer todos los ajustes?',
+ timezoneDescription: 'Busca una ciudad o identificador de zona horaria.',
+ timezoneSearchLabel: 'Buscar zonas horarias',
+ timezoneSearchPlaceholder: 'Buscar zonas horarias…',
+ timezoneTitle: 'Elegir zona horaria',
+ },
+ errors: {
+ couldNotResetSettings: 'No se pudieron restablecer los ajustes',
+ couldNotSaveSettings: 'No se pudieron guardar los ajustes',
+ settingsCouldNotLoad: 'No se pudieron cargar los ajustes',
+ settingsUnavailable: 'Los ajustes no están disponibles.',
+ },
+ labels: {
+ appearance: 'Apariencia',
+ automatic: 'Automático',
+ fsrsParameters: 'Parámetros FSRS',
+ general: 'General',
+ language: 'Idioma',
+ loadingSettings: 'Cargando ajustes',
+ masteryHorizon: 'Horizonte de dominio',
+ newCardOrder: 'Orden de tarjetas nuevas',
+ newCardsPerDay: 'Tarjetas nuevas por día',
+ reviewCardsPerDay: 'Tarjetas de repaso por día',
+ savingSettings: 'Guardando ajustes',
+ schedule: 'Programación',
+ searchNoTimezones: 'No hay zonas horarias coincidentes.',
+ settings: 'Ajustes',
+ settingsReset: 'Ajustes restablecidos',
+ study: 'Estudio',
+ targetRecallProbability: 'Probabilidad de recuerdo objetivo',
+ theme: 'Tema',
+ timezone: 'Zona horaria',
+ },
+ options: {
+ languageEnUs: 'Inglés (EE. UU.)',
+ newCardsAfterReviews: 'Después de los repasos',
+ newCardsBeforeReviews: 'Antes de los repasos',
+ newCardsMixed: 'Mezcladas',
+ themeDark: 'Oscuro',
+ themeLight: 'Claro',
+ themeSystem: 'Sistema',
+ timezoneSystem: 'Usar zona horaria del sistema',
+ },
+ rows: {
+ fsrsDescription: 'Pesos del modelo experto',
+ languageDescription: 'Idioma de la interfaz',
+ masteryHorizonDescription: 'Días que una tarjeta debe permanecer recordable al objetivo o por encima de él para contar como dominada',
+ newCardOrderDescription: 'Orden de tarjetas nuevas respecto a los repasos',
+ newCardsPerDayDescription: 'Máximo de tarjetas nuevas por día',
+ reviewCardsPerDayDescription: 'Máximo de tarjetas de repaso por día',
+ targetRecallProbabilityDescription: 'Probabilidad mínima de recuerdo en el próximo repaso programado',
+ timezoneDescription: 'Usa la zona horaria automática o elige una ciudad.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Eliminar permanentemente',
+ empty: 'Vaciar',
+ emptyTrash: 'Vaciar papelera',
+ restore: 'Restaurar',
+ restoringItem: 'Restaurando {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Esto elimina permanentemente "{{title}}". No se puede deshacer.',
+ deleteItemFallbackDescription: 'Esto elimina permanentemente este elemento. No se puede deshacer.',
+ deleteItemFallbackTitle: '¿Eliminar elemento?',
+ deleteItemTitle: '¿Eliminar "{{title}}"?',
+ emptyTrashDescription: 'Esto elimina permanentemente todo lo que está en la Papelera. No se puede deshacer.',
+ emptyTrashTitle: '¿Vaciar papelera?',
+ },
+ empty: {
+ description: 'Los elementos que elimines aparecerán aquí antes de su eliminación permanente.',
+ title: 'La Papelera está vacía',
+ },
+ errors: {
+ couldNotDeleteItem: 'No se pudo eliminar el elemento',
+ couldNotEmptyTrash: 'No se pudo vaciar la Papelera',
+ couldNotRestoreItem: 'No se pudo restaurar el elemento',
+ trashCouldNotLoad: 'No se pudo cargar la Papelera',
+ trashMayBeOutOfDate: 'La Papelera puede estar desactualizada',
+ },
+ labels: {
+ deletedAge: 'Eliminado {{value}}',
+ itemCount_one: '{{count}} elemento',
+ itemCount_other: '{{count}} elementos',
+ lastEmptied: 'Vaciada por última vez {{value}}',
+ loadingTrash: 'Cargando Papelera',
+ originalLocation: 'Ubicación original: {{location}}',
+ title: 'Papelera',
+ trashActions: 'Acciones de Papelera para {{title}}',
+ },
+ kinds: {
+ deck: 'Mazo',
+ folder: 'Carpeta',
+ note: 'Nota',
+ workspace: 'Espacio de trabajo',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Crear espacio de trabajo',
+ deleteWorkspace: 'Eliminar espacio de trabajo',
+ editWorkspace: 'Editar espacio de trabajo',
+ newWorkspace: 'Nuevo espacio de trabajo',
+ openWorkspace: 'Abrir {{title}}',
+ openingWorkspace: 'Abriendo {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Contexto de estudio.',
+ editorVisual: 'Elige un ancla visual para este espacio de trabajo.',
+ emptyList: 'Separa mazos, notas y colas de repaso por contexto de estudio.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Esto mueve "{{title}}" a la Papelera. Puedes restaurarlo más tarde.',
+ deleteWorkspaceFallbackDescription: 'Esto mueve este espacio de trabajo a la Papelera. Puedes restaurarlo más tarde.',
+ deleteWorkspaceFallbackTitle: '¿Eliminar espacio de trabajo?',
+ deleteWorkspaceTitle: '¿Eliminar "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Empieza con un espacio de trabajo',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'No se pudo crear el espacio de trabajo',
+ couldNotDeleteWorkspace: 'No se pudo eliminar el espacio de trabajo',
+ couldNotOpenWorkspace: 'No se pudo abrir el espacio de trabajo',
+ couldNotSaveWorkspace: 'No se pudo guardar el espacio de trabajo',
+ workspaceCouldNotLoad: 'No se pudo cargar el espacio de trabajo',
+ workspacesCouldNotLoad: 'No se pudieron cargar los espacios de trabajo',
+ },
+ fields: {
+ descriptionLabel: 'Descripción del espacio de trabajo',
+ descriptionPlaceholder: '¿Qué pertenece a este espacio de trabajo?',
+ namePlaceholder: 'Nombre del espacio de trabajo',
+ untitledWorkspace: 'Espacio de trabajo sin título',
+ },
+ labels: {
+ createWorkspaceTitle: 'Crear espacio de trabajo',
+ loadingWorkspaces: 'Cargando espacios de trabajo',
+ workspace: 'Espacio de trabajo',
+ workspaces: 'Espacios de trabajo',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/et.ts b/ui/src/core/i18n/resources/et.ts
new file mode 100644
index 0000000..0a71d5c
--- /dev/null
+++ b/ui/src/core/i18n/resources/et.ts
@@ -0,0 +1,623 @@
+export const et = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Proovi uuesti. Kui see jätkub, ava Clear uuesti.',
+ title: 'Käivitamine nurjus',
+ },
+ loadingTitle: 'Õpperuumi ettevalmistamine',
+ },
+ common: {
+ actions: {
+ back: 'Tagasi',
+ cancel: 'Tühista',
+ checkAgain: 'Kontrolli uuesti',
+ close: 'Sulge',
+ create: 'Loo',
+ delete: 'Kustuta',
+ dismissError: 'Sulge tõrge',
+ dismissStatus: 'Sulge olek',
+ edit: 'Muuda',
+ itemActions: '{{title}} toimingud',
+ reset: 'Lähtesta',
+ review: 'Korda',
+ save: 'Salvesta',
+ saveChanges: 'Salvesta muudatused',
+ tryAgain: 'Proovi uuesti',
+ },
+ labels: {
+ active: 'Aktiivne',
+ clear: 'Clear',
+ custom: 'Kohandatud',
+ default: 'Vaikimisi',
+ loadingEditor: 'Redaktori laadimine',
+ name: 'Nimi',
+ completedTask: 'Lõpetatud ülesanne',
+ description: 'Kirjeldus',
+ incompleteTask: 'Lõpetamata ülesanne',
+ percentageInput: '{{label}} protsent',
+ visual: 'Visuaal',
+ },
+ status: {
+ actionFailed: 'Toiming nurjus',
+ actionInProgress: 'Toiming on pooleli',
+ },
+ sort: {
+ ascending: 'Kasvav',
+ column: 'Veerg',
+ descending: 'Kahanev',
+ direction: 'Suund',
+ sort: 'Sordi',
+ },
+ search: {
+ label: 'Otsing',
+ },
+ visualPicker: {
+ allLucideIcons: 'Kõik Lucide ikoonid',
+ browseIconsFor: 'Sirvi või otsi ikoone: {{label}}.',
+ chooseIcon: 'Vali ikoon',
+ iconPicker: '{{label}} ikoonivalija',
+ iconSearch: '{{label}} ikooniotsing',
+ iconsCouldNotLoad: 'Ikoone ei saanud laadida.',
+ loadingIcons: 'Ikoonide laadimine',
+ loadingMoreIcons: 'Rohkemate ikoonide laadimine',
+ moreIcons: 'Rohkem ikoone',
+ noIconsMatch: 'Ükski ikoon ei vasta otsingule "{{query}}".',
+ searchIconsPlaceholder: 'Otsi ikoone…',
+ selectedIcon: 'Valitud {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Loo',
+ newDeck: 'Uus pakk',
+ newFolder: 'Uus kaust',
+ },
+ descriptions: {
+ defaultWorkspace: 'Hoia pakid, kaustad ja märkmed koos.',
+ emptyWorkspace: 'Loo pakk ja lisa seejärel märkmeid, et ehitada kordamisjärjekord.',
+ emptyFolder: 'Loo pakk ja lisa seejärel märkmeid, et ehitada kordamisjärjekord.',
+ searchPlaceholder: 'Otsi kaustu, pakke ja märkmeid…',
+ },
+ empty: {
+ createFirstDeck: 'Loo oma esimene pakk',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Pakki ei saanud kustutada',
+ couldNotDeleteFolder: 'Kausta ei saanud kustutada',
+ couldNotDeleteWorkspace: 'Tööruumi ei saanud kustutada',
+ dashboardCouldNotOpen: 'Töölauda ei saanud avada',
+ decksCouldNotLoad: 'Pakke ei saanud laadida',
+ decksMayBeOutOfDate: 'Pakid võivad olla aegunud',
+ foldersCouldNotLoad: 'Kaustu ei saanud laadida',
+ foldersMayBeOutOfDate: 'Kaustad võivad olla aegunud',
+ workspaceCouldNotLoad: 'Tööruumi ei saanud laadida',
+ },
+ labels: {
+ dashboard: 'Töölaud',
+ loadingDashboard: 'Töölaua laadimine',
+ newItem: 'Uus üksus',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Kuupäev pole saadaval',
+ },
+ age: {
+ dayAgo_one: '{{count}} päev tagasi',
+ dayAgo_other: '{{count}} päeva tagasi',
+ hourAgo_one: '{{count}} tund tagasi',
+ hourAgo_other: '{{count}} tundi tagasi',
+ justNow: 'just praegu',
+ minuteAgo_one: '{{count}} minut tagasi',
+ minuteAgo_other: '{{count}} minutit tagasi',
+ unavailable: 'kuupäev pole saadaval',
+ weekAgo_one: '{{count}} nädal tagasi',
+ weekAgo_other: '{{count}} nädalat tagasi',
+ },
+ labels: {
+ deleted: 'Kustutatud {{value}}',
+ due: 'Tähtaeg: {{value}}',
+ reviewed: 'Korratud: {{value}}',
+ updated: 'Uuendatud {{value}}',
+ updatedUppercase: 'UUENDATUD {{value}}',
+ },
+ relative: {
+ dayAgo_one: '{{count}} päev tagasi',
+ dayAgo_other: '{{count}} päeva tagasi',
+ inAMoment: 'Hetke pärast',
+ inDay_one: '{{count}} päeva pärast',
+ inDay_other: '{{count}} päeva pärast',
+ inMonth_one: '{{count}} kuu pärast',
+ inMonth_other: '{{count}} kuu pärast',
+ inWeek_one: '{{count}} nädala pärast',
+ inWeek_other: '{{count}} nädala pärast',
+ justNow: 'Just praegu',
+ monthAgo_one: '{{count}} kuu tagasi',
+ monthAgo_other: '{{count}} kuud tagasi',
+ secondsAgoShort: '{{count}} s tagasi',
+ minutesAgoShort: '{{count}} min tagasi',
+ hoursAgoShort: '{{count}} h tagasi',
+ today: 'Täna',
+ tomorrow: 'Homme',
+ weekAgo_one: '{{count}} nädal tagasi',
+ weekAgo_other: '{{count}} nädalat tagasi',
+ yesterday: 'Eile',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: '{{title}} toimingud',
+ createDeck: 'Loo pakk',
+ createNote: 'Loo märge',
+ deleteDeck: 'Kustuta pakk',
+ editDeck: 'Muuda pakki',
+ newNote: 'Uus märge',
+ openDeck: 'Ava pakk {{title}}',
+ saveDeck: 'Pakki ei saanud salvestada',
+ studyNow: 'Õpi kohe',
+ },
+ descriptions: {
+ emptyDeck: 'Lisa märge, et sellel pakil oleks kordamiseks materjali.',
+ editorDefault: 'Fookustatud õppepakk.',
+ editorVisual: 'Vali selle paki kaanesümbol.',
+ notesSearchPlaceholder: 'Otsi märkmeid…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'See teisaldab "{{title}}" prügikasti. Saad selle hiljem taastada.',
+ deleteDeckFallbackDescription: 'See teisaldab selle paki prügikasti. Saad selle hiljem taastada.',
+ deleteDeckFallbackTitle: 'Kas kustutada pakk?',
+ deleteDeckTitle: 'Kas kustutada "{{title}}"?',
+ deleteNoteDescription: 'See teisaldab "{{title}}" prügikasti. Saad selle hiljem taastada.',
+ deleteNoteFallbackTitle: 'Kas kustutada märge?',
+ deleteNoteTitle: 'Kas kustutada "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Sobivaid märkmeid pole',
+ noMatchingNotesDescription: 'Ükski märge ei vastanud otsingule "{{query}}".',
+ thisDeckIsEmpty: 'See pakk on tühi',
+ },
+ errors: {
+ couldNotCreateDeck: 'Pakki ei saanud luua',
+ couldNotDeleteDeck: 'Pakki ei saanud kustutada',
+ couldNotDeleteNote: 'Märget ei saanud kustutada',
+ couldNotLoadFolderPath: 'Kaustateed ei saanud laadida',
+ couldNotSaveDeck: 'Pakki ei saanud salvestada',
+ deckCouldNotLoad: 'Pakki ei saanud laadida',
+ notesCouldNotLoad: 'Märkmeid ei saanud laadida',
+ notesMayBeOutOfDate: 'Märkmed võivad olla aegunud',
+ },
+ fields: {
+ descriptionLabel: 'Paki kirjeldus',
+ descriptionPlaceholder: 'Mida see pakk aitab sul korrata?',
+ namePlaceholder: 'Paki nimi',
+ untitledDeck: 'Pealkirjata pakk',
+ untitledDeckLower: 'pealkirjata pakk',
+ },
+ labels: {
+ createDeckTitle: 'Loo pakk',
+ deck: 'Pakk',
+ deckNotesSearch: 'Paki märkmete otsing',
+ deckOverview: 'Paki ülevaade',
+ decks: 'Pakid',
+ due: 'Tähtaeg',
+ dueToday: 'Tähtaeg täna',
+ loadingDeck: 'Paki laadimine',
+ mastery: 'Omandamine',
+ notes: 'Märkmed',
+ },
+ sort: {
+ ariaLabel: 'Sordi pakke',
+ dueToday: 'Tähtaeg täna',
+ title: 'Pealkiri',
+ updated: 'Uuendatud',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Andmed muutusid. Värskenda ja proovi uuesti.',
+ forbidden: 'Sul pole luba seda teha.',
+ notFound: 'Me ei leidnud seda üksust.',
+ offline: 'Teenusega ei saa ühendust.',
+ timeout: 'See võttis liiga kaua aega. Proovi uuesti.',
+ unauthorized: 'Jätkamiseks logi sisse.',
+ unavailable: 'Teenus pole ajutiselt saadaval.',
+ },
+ fallback: {
+ unexpected: 'Ootamatu tõrge',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Loo kaust',
+ deleteFolder: 'Kustuta kaust',
+ editFolder: 'Muuda kausta',
+ },
+ descriptions: {
+ editorDefault: 'Kaust seotud pakkide jaoks.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'See teisaldab "{{name}}" prügikasti. Saad selle hiljem taastada.',
+ deleteFolderFallbackDescription: 'See teisaldab selle kausta prügikasti. Saad selle hiljem taastada.',
+ deleteFolderFallbackTitle: 'Kas kustutada kaust?',
+ deleteFolderTitle: 'Kas kustutada "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'Selles kaustas vasteid pole',
+ noMatchesInFolderDescription: 'Ükski kaust, pakk ega märge ei vastanud otsingule "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Kausta ei saanud luua',
+ couldNotDeleteFolder: 'Kausta ei saanud kustutada',
+ couldNotLoadFolderPath: 'Kaustateed ei saanud laadida',
+ couldNotSaveFolder: 'Kausta ei saanud salvestada',
+ folderCouldNotLoad: 'Kausta ei saanud laadida',
+ },
+ fields: {
+ descriptionLabel: 'Kausta kirjeldus',
+ descriptionPlaceholder: 'Mis sellesse kausta kuulub?',
+ namePlaceholder: 'Kausta nimi',
+ untitledFolder: 'Pealkirjata kaust',
+ },
+ labels: {
+ createFolderTitle: 'Loo kaust',
+ folder: 'Kaust',
+ folders: 'Kaustad',
+ loadingFolder: 'Kausta laadimine',
+ name: 'Nimi',
+ updated: 'Uuendatud',
+ },
+ sort: {
+ ariaLabel: 'Sordi kaustu',
+ name: 'Nimi',
+ updated: 'Uuendatud',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Kui kohalikud ja sünkroonitud andmed kunagi ei kattu, kuvatakse üksus siin.',
+ heading: 'Sünkroonimise olek',
+ title: 'Konfliktid',
+ noConflicts: 'Konflikte ei leitud',
+ },
+ labels: {
+ menu: 'Menüü',
+ },
+ sections: {
+ settings: {
+ description: 'Kohanda oma keskkonda ja eelistusi',
+ title: 'Seaded',
+ },
+ trash: {
+ description: 'Taasta või kustuta eemaldatud üksused jäädavalt',
+ title: 'Prügikast',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Sulge redaktor',
+ openActions: 'Ava toimingud',
+ openWorkspaces: 'Ava tööruumid',
+ },
+ items: {
+ home: 'Avaleht',
+ menu: 'Menüü',
+ primary: 'Peamine',
+ settings: 'Seaded',
+ spaces: 'Ruumid',
+ trash: 'Prügikast',
+ workspaces: 'Tööruumid',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Lisa cloze',
+ deleteNote: 'Kustuta märge',
+ editNote: 'Muuda märget',
+ hideDerivedCardsNote: 'Peida tuletatud kaartide märkus',
+ openNote: 'Ava {{title}}',
+ saveNote: 'Salvesta märge',
+ showDerivedCardsNote: 'Kuva tuletatud kaartide märkus',
+ },
+ descriptions: {
+ clozeFormat: 'Iga peidetud osa muutub salvestamisel kordamiskaardiks.',
+ clozeFormatPrefix: 'Ümbritse peidetud tekst märgendiga',
+ derivedCardsHelper: 'Märkmed on tuletatud kaartide tõeallikas.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'See teisaldab "{{title}}" prügikasti. Saad selle hiljem taastada.',
+ deleteNoteFallbackDescription: 'See teisaldab selle märkme prügikasti. Saad selle hiljem taastada.',
+ deleteNoteFallbackTitle: 'Kas kustutada märge?',
+ deleteNoteTitle: 'Kas kustutada "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Märget ei saanud luua',
+ couldNotDeleteNote: 'Märget ei saanud kustutada',
+ couldNotSaveNote: 'Märget ei saanud salvestada',
+ noteCouldNotLoad: 'Märget ei saanud laadida',
+ },
+ fields: {
+ back: 'Tagakülg',
+ backPlaceholder: 'Sisesta tagakülg',
+ bodyPlaceholder: 'Kirjuta märkme sisu cloze-kustutustega…',
+ front: 'Esikülg',
+ frontPlaceholder: 'Sisesta esikülg',
+ noteBody: 'Märkme sisu',
+ title: 'Pealkiri',
+ titlePlaceholder: 'Lisa märkme pealkiri',
+ untitledCloze: 'Pealkirjata cloze',
+ untitledNote: 'Pealkirjata märge',
+ },
+ labels: {
+ backUppercase: 'TAGAKÜLG',
+ basic: 'Tavaline',
+ basicLower: 'tavaline',
+ basicUppercase: 'TAVALINE',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Cloze-vorming',
+ clozeUppercase: 'CLOZE',
+ deck: 'Pakk',
+ derivedCards: 'TULETATUD KAARDID',
+ due: 'Tähtaeg',
+ frontUppercase: 'ESIKÜLG',
+ inProgress: 'Pooleli',
+ inProgressUppercase: 'POOLELI',
+ loadingNote: 'Märkme laadimine',
+ loadingNoteEditor: 'Märkmeredaktori laadimine',
+ markdownFormatting: 'Markdown-vormindus',
+ mastered: 'Omandatud',
+ masteredUppercase: 'OMANDATUD',
+ newNote: 'Uus märge',
+ noteBody: 'MÄRKME SISU',
+ noteContent: 'Märkme sisu',
+ noteDetails: 'Märkme üksikasjad',
+ noteMetadata: 'Märkme metaandmed',
+ noteType: 'Märkme tüüp',
+ notes: 'Märkmed',
+ reviewed: 'Korratud',
+ studyProgress: 'Õppimise edenemine',
+ studyProgressUppercase: 'ÕPPIMISE EDENEMINE',
+ titleUppercase: 'PEALKIRI',
+ updated: 'Uuendatud',
+ },
+ sort: {
+ ariaLabel: 'Sordi märkmeid',
+ title: 'Pealkiri',
+ updated: 'Uuendatud',
+ },
+ toolbar: {
+ bold: 'Paks kiri',
+ italic: 'Kaldkiri',
+ link: 'Link',
+ list: 'Loend',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Uuesti',
+ backToDeck: 'Tagasi paki juurde',
+ continueReview: 'Jätka kordamist',
+ easy: 'Lihtne',
+ good: 'Hea',
+ hard: 'Raske',
+ newNote: 'Uus märge',
+ showAnswer: 'Näita vastust',
+ },
+ errors: {
+ couldNotGradeCard: 'Kaarti ei saanud hinnata',
+ reviewCouldNotLoad: 'Kordamist ei saanud laadida',
+ reviewCouldNotStart: 'Kordamist ei saanud alustada',
+ summaryCouldNotLoad: 'Kordamise kokkuvõtet ei saanud laadida',
+ summaryNotAvailable: 'Kordamise kokkuvõte pole saadaval',
+ summaryNotComplete: 'See kordamine pole veel lõpetatud.',
+ },
+ labels: {
+ cardsReviewed: 'Korratud kaardid',
+ deck: 'Pakk',
+ duration: 'Kestus',
+ loadingReview: 'Kordamise laadimine',
+ loadingSummary: 'Kokkuvõtte laadimine',
+ progress: 'Kordamise edenemine',
+ review: 'Kordamine',
+ reviewComplete: 'Kordamine lõpetatud',
+ reviewed_one: 'Korratud {{count}}',
+ reviewed_other: 'Korratud {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} h {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'Sinu edenemine salvestati sellesse pakki.',
+ },
+ unavailable: {
+ description: 'Lisa märge, et see pakk saaks kordamisjärjekorda minna.',
+ title: 'Kordamiseks pole kaarte',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Tühjenda otsing',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Selles tööruumis vasteid pole',
+ noMatchesInWorkspaceDescription: 'Ükski kaust, pakk ega märge ei vastanud otsingule "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Otsingut ei saanud lõpetada',
+ },
+ labels: {
+ results: 'Otsingutulemused',
+ resultsFor: 'Tulemused otsingule "{{query}}"',
+ searchingContent: 'Sisu otsimine',
+ },
+ resultGroups: {
+ deck: 'Pakid',
+ folder: 'Kaustad',
+ note: 'Märkmed',
+ },
+ resultKinds: {
+ deck: 'pakk',
+ folder: 'kaust',
+ note: 'märge',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Lähtesta kõik seaded',
+ resetSettings: 'Lähtesta seaded',
+ resetToDefaults: 'Taasta vaikeväärtused',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Kleebi kehtiv JSON 21 arvväärtusega.',
+ fsrsErrorInvalidParams_one: 'Sisesta JSON-massiiv täpselt {{count}} lõpliku arvuga.',
+ fsrsErrorInvalidParams_other: 'Sisesta JSON-massiiv täpselt {{count}} lõpliku arvuga.',
+ fsrsHelper: 'See on eksperdi ülekirjutus. Väärtused peavad jääma järjekorda.',
+ fsrsJsonLabel: 'FSRS-i parameetrite JSON',
+ fsrsTitle: 'Muuda FSRS-i parameetreid',
+ fsrsDescription: 'Kleebi 21 arvuga JSON-massiiv, et ajastaja kaalud üle kirjutada.',
+ resetDescription: 'See taastab ajavööndi, õppepiirangud ja FSRS-i seaded.',
+ resetDescriptionWithLanguage: 'See taastab keele, ajavööndi, õppepiirangud ja FSRS-i seaded.',
+ resetTitle: 'Kas lähtestada kõik seaded?',
+ timezoneDescription: 'Otsi linna või ajavööndi identifikaatorit.',
+ timezoneSearchLabel: 'Otsi ajavööndeid',
+ timezoneSearchPlaceholder: 'Otsi ajavööndeid…',
+ timezoneTitle: 'Vali ajavöönd',
+ },
+ errors: {
+ couldNotResetSettings: 'Seadeid ei saanud lähtestada',
+ couldNotSaveSettings: 'Seadeid ei saanud salvestada',
+ settingsCouldNotLoad: 'Seadeid ei saanud laadida',
+ settingsUnavailable: 'Seaded pole saadaval.',
+ },
+ labels: {
+ appearance: 'Välimus',
+ automatic: 'Automaatne',
+ fsrsParameters: 'FSRS-i parameetrid',
+ general: 'Üldine',
+ language: 'Keel',
+ loadingSettings: 'Seadete laadimine',
+ masteryHorizon: 'Omandamise horisont',
+ newCardOrder: 'Uute kaartide järjekord',
+ newCardsPerDay: 'Uusi kaarte päevas',
+ reviewCardsPerDay: 'Kordamiskaarte päevas',
+ savingSettings: 'Seadete salvestamine',
+ schedule: 'Ajakava',
+ searchNoTimezones: 'Sobivaid ajavööndeid pole.',
+ settings: 'Seaded',
+ settingsReset: 'Seaded lähtestatud',
+ study: 'Õppimine',
+ targetRecallProbability: 'Sihtmeenutuse tõenäosus',
+ theme: 'Teema',
+ timezone: 'Ajavöönd',
+ },
+ options: {
+ languageEnUs: 'Inglise (USA)',
+ newCardsAfterReviews: 'Pärast kordamisi',
+ newCardsBeforeReviews: 'Enne kordamisi',
+ newCardsMixed: 'Segatud',
+ themeDark: 'Tume',
+ themeLight: 'Hele',
+ themeSystem: 'Süsteem',
+ timezoneSystem: 'Kasuta süsteemi ajavööndit',
+ },
+ rows: {
+ fsrsDescription: 'Ekspertmudeli kaalud',
+ languageDescription: 'Liidese keel',
+ masteryHorizonDescription: 'Päevade arv, mille jooksul kaart peab püsima meelde tuletatav sihttõenäosusel või sellest kõrgemal, et seda loetaks omandatuks',
+ newCardOrderDescription: 'Uute kaartide järjekord kordamiste suhtes',
+ newCardsPerDayDescription: 'Maksimaalne uute kaartide arv päevas',
+ reviewCardsPerDayDescription: 'Maksimaalne kordamiskaartide arv päevas',
+ targetRecallProbabilityDescription: 'Minimaalne meenutamise tõenäosus järgmisel ajastatud kordamisel',
+ timezoneDescription: 'Kasuta automaatset ajavööndit või vali linn.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Kustuta jäädavalt',
+ empty: 'Tühjenda',
+ emptyTrash: 'Tühjenda prügikast',
+ restore: 'Taasta',
+ restoringItem: '{{title}} taastamine',
+ },
+ dialogs: {
+ deleteItemDescription: 'See kustutab "{{title}}" jäädavalt. Seda ei saa tagasi võtta.',
+ deleteItemFallbackDescription: 'See kustutab selle üksuse jäädavalt. Seda ei saa tagasi võtta.',
+ deleteItemFallbackTitle: 'Kas kustutada üksus?',
+ deleteItemTitle: 'Kas kustutada "{{title}}"?',
+ emptyTrashDescription: 'See kustutab kõik prügikastis oleva jäädavalt. Seda ei saa tagasi võtta.',
+ emptyTrashTitle: 'Kas tühjendada prügikast?',
+ },
+ empty: {
+ description: 'Kustutatud üksused ilmuvad siia enne jäädavat eemaldamist.',
+ title: 'Prügikast on tühi',
+ },
+ errors: {
+ couldNotDeleteItem: 'Üksust ei saanud kustutada',
+ couldNotEmptyTrash: 'Prügikasti ei saanud tühjendada',
+ couldNotRestoreItem: 'Üksust ei saanud taastada',
+ trashCouldNotLoad: 'Prügikasti ei saanud laadida',
+ trashMayBeOutOfDate: 'Prügikast võib olla aegunud',
+ },
+ labels: {
+ deletedAge: 'Kustutatud {{value}}',
+ itemCount_one: '{{count}} üksus',
+ itemCount_other: '{{count}} üksust',
+ lastEmptied: 'Viimati tühjendatud {{value}}',
+ loadingTrash: 'Prügikasti laadimine',
+ originalLocation: 'Algne asukoht: {{location}}',
+ title: 'Prügikast',
+ trashActions: '{{title}} prügikasti toimingud',
+ },
+ kinds: {
+ deck: 'Pakk',
+ folder: 'Kaust',
+ note: 'Märge',
+ workspace: 'Tööruum',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Loo tööruum',
+ deleteWorkspace: 'Kustuta tööruum',
+ editWorkspace: 'Muuda tööruumi',
+ newWorkspace: 'Uus tööruum',
+ openWorkspace: 'Ava {{title}}',
+ openingWorkspace: '{{title}} avamine',
+ },
+ descriptions: {
+ editorDefault: 'Õppekontekst.',
+ editorVisual: 'Vali selle tööruumi visuaalne ankur.',
+ emptyList: 'Eralda pakid, märkmed ja kordamisjärjekorrad õppekonteksti järgi.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'See teisaldab "{{title}}" prügikasti. Saad selle hiljem taastada.',
+ deleteWorkspaceFallbackDescription: 'See teisaldab selle tööruumi prügikasti. Saad selle hiljem taastada.',
+ deleteWorkspaceFallbackTitle: 'Kas kustutada tööruum?',
+ deleteWorkspaceTitle: 'Kas kustutada "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Alusta tööruumiga',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Tööruumi ei saanud luua',
+ couldNotDeleteWorkspace: 'Tööruumi ei saanud kustutada',
+ couldNotOpenWorkspace: 'Tööruumi ei saanud avada',
+ couldNotSaveWorkspace: 'Tööruumi ei saanud salvestada',
+ workspaceCouldNotLoad: 'Tööruumi ei saanud laadida',
+ workspacesCouldNotLoad: 'Tööruume ei saanud laadida',
+ },
+ fields: {
+ descriptionLabel: 'Tööruumi kirjeldus',
+ descriptionPlaceholder: 'Mis sellesse tööruumi kuulub?',
+ namePlaceholder: 'Tööruumi nimi',
+ untitledWorkspace: 'Pealkirjata tööruum',
+ },
+ labels: {
+ createWorkspaceTitle: 'Loo tööruum',
+ loadingWorkspaces: 'Tööruumide laadimine',
+ workspace: 'Tööruum',
+ workspaces: 'Tööruumid',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/fa.ts b/ui/src/core/i18n/resources/fa.ts
new file mode 100644
index 0000000..667267b
--- /dev/null
+++ b/ui/src/core/i18n/resources/fa.ts
@@ -0,0 +1,623 @@
+export const fa = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'دوباره تلاش کنید. اگر این مشکل ادامه داشت، Clear را دوباره باز کنید.',
+ title: 'شروع نشد',
+ },
+ loadingTitle: 'در حال آماده کردن فضای مطالعه شما',
+ },
+ common: {
+ actions: {
+ back: 'بازگشت',
+ cancel: 'لغو',
+ checkAgain: 'بررسی دوباره',
+ close: 'بستن',
+ create: 'ایجاد',
+ delete: 'حذف',
+ dismissError: 'بستن خطا',
+ dismissStatus: 'بستن وضعیت',
+ edit: 'ویرایش',
+ itemActions: 'اقدامهای {{title}}',
+ reset: 'بازنشانی',
+ review: 'مرور',
+ save: 'ذخیره',
+ saveChanges: 'ذخیره تغییرات',
+ tryAgain: 'تلاش دوباره',
+ },
+ labels: {
+ active: 'فعال',
+ clear: 'Clear',
+ custom: 'سفارشی',
+ default: 'پیشفرض',
+ loadingEditor: 'در حال بارگیری ویرایشگر',
+ name: 'نام',
+ completedTask: 'کار تکمیلشده',
+ description: 'توضیحات',
+ incompleteTask: 'کار ناتمام',
+ percentageInput: 'درصد {{label}}',
+ visual: 'نمایه',
+ },
+ status: {
+ actionFailed: 'اقدام ناموفق بود',
+ actionInProgress: 'اقدام در حال انجام است',
+ },
+ sort: {
+ ascending: 'صعودی',
+ column: 'ستون',
+ descending: 'نزولی',
+ direction: 'جهت',
+ sort: 'مرتبسازی',
+ },
+ search: {
+ label: 'جستجو',
+ },
+ visualPicker: {
+ allLucideIcons: 'همه آیکنهای Lucide',
+ browseIconsFor: 'آیکنهای {{label}} را مرور یا جستجو کنید.',
+ chooseIcon: 'انتخاب آیکن',
+ iconPicker: 'انتخابگر آیکن {{label}}',
+ iconSearch: 'جستجوی آیکن {{label}}',
+ iconsCouldNotLoad: 'آیکنها بارگیری نشدند.',
+ loadingIcons: 'در حال بارگیری آیکنها',
+ loadingMoreIcons: 'در حال بارگیری آیکنهای بیشتر',
+ moreIcons: 'آیکنهای بیشتر',
+ noIconsMatch: 'هیچ آیکنی با "{{query}}" مطابقت ندارد.',
+ searchIconsPlaceholder: 'جستجوی آیکنها…',
+ selectedIcon: '{{label}} انتخابشده',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'ایجاد',
+ newDeck: 'دسته جدید',
+ newFolder: 'پوشه جدید',
+ },
+ descriptions: {
+ defaultWorkspace: 'دستهها، پوشهها و یادداشتها را کنار هم نگه دارید.',
+ emptyWorkspace: 'یک دسته بسازید، سپس یادداشت اضافه کنید تا صف مرور را شکل دهید.',
+ emptyFolder: 'یک دسته بسازید، سپس یادداشت اضافه کنید تا صف مرور شکل بگیرد.',
+ searchPlaceholder: 'جستجو در پوشهها، دستهها و یادداشتها…',
+ },
+ empty: {
+ createFirstDeck: 'اولین دسته خود را بسازید',
+ },
+ errors: {
+ couldNotDeleteDeck: 'دسته حذف نشد',
+ couldNotDeleteFolder: 'پوشه حذف نشد',
+ couldNotDeleteWorkspace: 'فضای کاری حذف نشد',
+ dashboardCouldNotOpen: 'داشبورد باز نشد',
+ decksCouldNotLoad: 'دستهها بارگیری نشدند',
+ decksMayBeOutOfDate: 'ممکن است دستهها بهروز نباشند',
+ foldersCouldNotLoad: 'پوشهها بارگیری نشدند',
+ foldersMayBeOutOfDate: 'ممکن است پوشهها بهروز نباشند',
+ workspaceCouldNotLoad: 'فضای کاری بارگیری نشد',
+ },
+ labels: {
+ dashboard: 'داشبورد',
+ loadingDashboard: 'در حال بارگیری داشبورد',
+ newItem: 'مورد جدید',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'تاریخ در دسترس نیست',
+ },
+ age: {
+ dayAgo_one: '{{count}} روز پیش',
+ dayAgo_other: '{{count}} روز پیش',
+ hourAgo_one: '{{count}} ساعت پیش',
+ hourAgo_other: '{{count}} ساعت پیش',
+ justNow: 'همین حالا',
+ minuteAgo_one: '{{count}} دقیقه پیش',
+ minuteAgo_other: '{{count}} دقیقه پیش',
+ unavailable: 'تاریخ در دسترس نیست',
+ weekAgo_one: '{{count}} هفته پیش',
+ weekAgo_other: '{{count}} هفته پیش',
+ },
+ labels: {
+ deleted: 'حذفشده {{value}}',
+ due: 'موعد: {{value}}',
+ reviewed: 'مرور شد: {{value}}',
+ updated: 'بهروزرسانیشده {{value}}',
+ updatedUppercase: 'بهروزرسانیشده {{value}}',
+ },
+ relative: {
+ dayAgo_one: '{{count}} روز پیش',
+ dayAgo_other: '{{count}} روز پیش',
+ inAMoment: 'تا لحظاتی دیگر',
+ inDay_one: 'در {{count}} روز',
+ inDay_other: 'در {{count}} روز',
+ inMonth_one: 'در {{count}} ماه',
+ inMonth_other: 'در {{count}} ماه',
+ inWeek_one: 'در {{count}} هفته',
+ inWeek_other: 'در {{count}} هفته',
+ justNow: 'همین حالا',
+ monthAgo_one: '{{count}} ماه پیش',
+ monthAgo_other: '{{count}} ماه پیش',
+ secondsAgoShort: '{{count}}ث پیش',
+ minutesAgoShort: '{{count}}د پیش',
+ hoursAgoShort: '{{count}}س پیش',
+ today: 'امروز',
+ tomorrow: 'فردا',
+ weekAgo_one: '{{count}} هفته پیش',
+ weekAgo_other: '{{count}} هفته پیش',
+ yesterday: 'دیروز',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'اقدامهای {{title}}',
+ createDeck: 'ایجاد دسته',
+ createNote: 'ایجاد یادداشت',
+ deleteDeck: 'حذف دسته',
+ editDeck: 'ویرایش دسته',
+ newNote: 'یادداشت جدید',
+ openDeck: 'باز کردن دسته {{title}}',
+ saveDeck: 'دسته ذخیره نشد',
+ studyNow: 'اکنون مطالعه کن',
+ },
+ descriptions: {
+ emptyDeck: 'یک یادداشت اضافه کنید تا این دسته محتوایی برای مرور داشته باشد.',
+ editorDefault: 'دسته مطالعه متمرکز.',
+ editorVisual: 'یک نماد جلد برای این دسته انتخاب کنید.',
+ notesSearchPlaceholder: 'جستجو در یادداشتها…',
+ },
+ dialogs: {
+ deleteDeckDescription: '"{{title}}" به سطل زباله منتقل میشود. بعدا میتوانید آن را بازیابی کنید.',
+ deleteDeckFallbackDescription: 'این دسته به سطل زباله منتقل میشود. بعدا میتوانید آن را بازیابی کنید.',
+ deleteDeckFallbackTitle: 'دسته حذف شود؟',
+ deleteDeckTitle: '"{{title}}" حذف شود؟',
+ deleteNoteDescription: '"{{title}}" به سطل زباله منتقل میشود. بعدا میتوانید آن را بازیابی کنید.',
+ deleteNoteFallbackTitle: 'یادداشت حذف شود؟',
+ deleteNoteTitle: '"{{title}}" حذف شود؟',
+ },
+ empty: {
+ noMatchingNotes: 'یادداشت مطابقی نیست',
+ noMatchingNotesDescription: 'هیچ یادداشتی با "{{query}}" مطابقت نداشت.',
+ thisDeckIsEmpty: 'این دسته خالی است',
+ },
+ errors: {
+ couldNotCreateDeck: 'دسته ایجاد نشد',
+ couldNotDeleteDeck: 'دسته حذف نشد',
+ couldNotDeleteNote: 'یادداشت حذف نشد',
+ couldNotLoadFolderPath: 'مسیر پوشه بارگیری نشد',
+ couldNotSaveDeck: 'دسته ذخیره نشد',
+ deckCouldNotLoad: 'دسته بارگیری نشد',
+ notesCouldNotLoad: 'یادداشتها بارگیری نشدند',
+ notesMayBeOutOfDate: 'ممکن است یادداشتها بهروز نباشند',
+ },
+ fields: {
+ descriptionLabel: 'توضیحات دسته',
+ descriptionPlaceholder: 'این دسته به مرور چه چیزی کمک میکند؟',
+ namePlaceholder: 'نام دسته',
+ untitledDeck: 'دسته بدون عنوان',
+ untitledDeckLower: 'دسته بدون عنوان',
+ },
+ labels: {
+ createDeckTitle: 'ایجاد دسته',
+ deck: 'دسته',
+ deckNotesSearch: 'جستجوی یادداشتهای دسته',
+ deckOverview: 'نمای کلی دسته',
+ decks: 'دستهها',
+ due: 'موعد',
+ dueToday: 'موعد امروز',
+ loadingDeck: 'در حال بارگیری دسته',
+ mastery: 'تسلط',
+ notes: 'یادداشتها',
+ },
+ sort: {
+ ariaLabel: 'مرتبسازی دستهها',
+ dueToday: 'موعد امروز',
+ title: 'عنوان',
+ updated: 'بهروزرسانیشده',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'دادهها تغییر کردهاند. تازهسازی کنید و دوباره تلاش کنید.',
+ forbidden: 'اجازه انجام این کار را ندارید.',
+ notFound: 'این مورد پیدا نشد.',
+ offline: 'دسترسی به سرویس ممکن نیست.',
+ timeout: 'این کار بیش از حد طول کشید. دوباره تلاش کنید.',
+ unauthorized: 'برای ادامه وارد شوید.',
+ unavailable: 'سرویس موقتا در دسترس نیست.',
+ },
+ fallback: {
+ unexpected: 'خطای غیرمنتظره',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'ایجاد پوشه',
+ deleteFolder: 'حذف پوشه',
+ editFolder: 'ویرایش پوشه',
+ },
+ descriptions: {
+ editorDefault: 'پوشهای برای دستههای مرتبط.',
+ },
+ dialogs: {
+ deleteFolderDescription: '"{{name}}" به سطل زباله منتقل میشود. بعدا میتوانید آن را بازیابی کنید.',
+ deleteFolderFallbackDescription: 'این پوشه به سطل زباله منتقل میشود. بعدا میتوانید آن را بازیابی کنید.',
+ deleteFolderFallbackTitle: 'پوشه حذف شود؟',
+ deleteFolderTitle: '"{{name}}" حذف شود؟',
+ },
+ empty: {
+ noMatchesInFolder: 'در این پوشه نتیجهای نیست',
+ noMatchesInFolderDescription: 'هیچ پوشه، دسته یا یادداشتی با "{{query}}" مطابقت نداشت.',
+ },
+ errors: {
+ couldNotCreateFolder: 'پوشه ایجاد نشد',
+ couldNotDeleteFolder: 'پوشه حذف نشد',
+ couldNotLoadFolderPath: 'مسیر پوشه بارگیری نشد',
+ couldNotSaveFolder: 'پوشه ذخیره نشد',
+ folderCouldNotLoad: 'پوشه بارگیری نشد',
+ },
+ fields: {
+ descriptionLabel: 'توضیحات پوشه',
+ descriptionPlaceholder: 'چه چیزی در این پوشه قرار میگیرد؟',
+ namePlaceholder: 'نام پوشه',
+ untitledFolder: 'پوشه بدون عنوان',
+ },
+ labels: {
+ createFolderTitle: 'ایجاد پوشه',
+ folder: 'پوشه',
+ folders: 'پوشهها',
+ loadingFolder: 'در حال بارگیری پوشه',
+ name: 'نام',
+ updated: 'بهروزرسانیشده',
+ },
+ sort: {
+ ariaLabel: 'مرتبسازی پوشهها',
+ name: 'نام',
+ updated: 'بهروزرسانیشده',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'اگر دادههای محلی و همگامسازیشده تفاوت داشته باشند، مورد اینجا ظاهر میشود.',
+ heading: 'وضعیت همگامسازی',
+ title: 'تعارضها',
+ noConflicts: 'تعارضی پیدا نشد',
+ },
+ labels: {
+ menu: 'منو',
+ },
+ sections: {
+ settings: {
+ description: 'محیط و ترجیحات خود را شخصیسازی کنید',
+ title: 'تنظیمات',
+ },
+ trash: {
+ description: 'موارد حذفشده را بازیابی یا برای همیشه حذف کنید',
+ title: 'سطل زباله',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'بستن ویرایشگر',
+ openActions: 'باز کردن اقدامها',
+ openWorkspaces: 'باز کردن فضاهای کاری',
+ },
+ items: {
+ home: 'خانه',
+ menu: 'منو',
+ primary: 'اصلی',
+ settings: 'تنظیمات',
+ spaces: 'فضاها',
+ trash: 'سطل زباله',
+ workspaces: 'فضاهای کاری',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'افزودن جای خالی',
+ deleteNote: 'حذف یادداشت',
+ editNote: 'ویرایش یادداشت',
+ hideDerivedCardsNote: 'پنهان کردن یادداشت کارتهای مشتقشده',
+ openNote: 'باز کردن {{title}}',
+ saveNote: 'ذخیره یادداشت',
+ showDerivedCardsNote: 'نمایش یادداشت کارتهای مشتقشده',
+ },
+ descriptions: {
+ clozeFormat: 'هر بخش پنهان پس از ذخیره به یک کارت مرور تبدیل میشود.',
+ clozeFormatPrefix: 'متن پنهان را با این قالب بنویسید',
+ derivedCardsHelper: 'یادداشتها منبع اصلی کارتهای مشتقشده هستند.',
+ },
+ dialogs: {
+ deleteNoteDescription: '"{{title}}" به سطل زباله منتقل میشود. بعدا میتوانید آن را بازیابی کنید.',
+ deleteNoteFallbackDescription: 'این یادداشت به سطل زباله منتقل میشود. بعدا میتوانید آن را بازیابی کنید.',
+ deleteNoteFallbackTitle: 'یادداشت حذف شود؟',
+ deleteNoteTitle: '"{{title}}" حذف شود؟',
+ },
+ errors: {
+ couldNotCreateNote: 'یادداشت ایجاد نشد',
+ couldNotDeleteNote: 'یادداشت حذف نشد',
+ couldNotSaveNote: 'یادداشت ذخیره نشد',
+ noteCouldNotLoad: 'یادداشت بارگیری نشد',
+ },
+ fields: {
+ back: 'پشت',
+ backPlaceholder: 'متن پشت را وارد کنید',
+ bodyPlaceholder: 'متن یادداشت را با حذفهای جای خالی بنویسید…',
+ front: 'رو',
+ frontPlaceholder: 'متن رو را وارد کنید',
+ noteBody: 'متن یادداشت',
+ title: 'عنوان',
+ titlePlaceholder: 'عنوان یادداشت را اضافه کنید',
+ untitledCloze: 'جای خالی بدون عنوان',
+ untitledNote: 'یادداشت بدون عنوان',
+ },
+ labels: {
+ backUppercase: 'پشت',
+ basic: 'ساده',
+ basicLower: 'ساده',
+ basicUppercase: 'ساده',
+ cloze: 'جای خالی',
+ clozeLower: 'جای خالی',
+ clozeFormat: 'قالب جای خالی',
+ clozeUppercase: 'جای خالی',
+ deck: 'دسته',
+ derivedCards: 'کارتهای مشتقشده',
+ due: 'موعد',
+ frontUppercase: 'رو',
+ inProgress: 'در حال انجام',
+ inProgressUppercase: 'در حال انجام',
+ loadingNote: 'در حال بارگیری یادداشت',
+ loadingNoteEditor: 'در حال بارگیری ویرایشگر یادداشت',
+ markdownFormatting: 'قالببندی Markdown',
+ mastered: 'مسلط',
+ masteredUppercase: 'مسلط',
+ newNote: 'یادداشت جدید',
+ noteBody: 'متن یادداشت',
+ noteContent: 'محتوای یادداشت',
+ noteDetails: 'جزئیات یادداشت',
+ noteMetadata: 'فراداده یادداشت',
+ noteType: 'نوع یادداشت',
+ notes: 'یادداشتها',
+ reviewed: 'مرور شد',
+ studyProgress: 'پیشرفت مطالعه',
+ studyProgressUppercase: 'پیشرفت مطالعه',
+ titleUppercase: 'عنوان',
+ updated: 'بهروزرسانیشده',
+ },
+ sort: {
+ ariaLabel: 'مرتبسازی یادداشتها',
+ title: 'عنوان',
+ updated: 'بهروزرسانیشده',
+ },
+ toolbar: {
+ bold: 'پررنگ',
+ italic: 'کج',
+ link: 'پیوند',
+ list: 'فهرست',
+ },
+ },
+ review: {
+ actions: {
+ again: 'دوباره',
+ backToDeck: 'بازگشت به دسته',
+ continueReview: 'ادامه مرور',
+ easy: 'آسان',
+ good: 'خوب',
+ hard: 'سخت',
+ newNote: 'یادداشت جدید',
+ showAnswer: 'نمایش پاسخ',
+ },
+ errors: {
+ couldNotGradeCard: 'کارت ارزیابی نشد',
+ reviewCouldNotLoad: 'مرور بارگیری نشد',
+ reviewCouldNotStart: 'مرور شروع نشد',
+ summaryCouldNotLoad: 'خلاصه مرور بارگیری نشد',
+ summaryNotAvailable: 'خلاصه مرور در دسترس نیست',
+ summaryNotComplete: 'این مرور هنوز کامل نشده است.',
+ },
+ labels: {
+ cardsReviewed: 'کارتهای مرورشده',
+ deck: 'دسته',
+ duration: 'مدت',
+ loadingReview: 'در حال بارگیری مرور',
+ loadingSummary: 'در حال بارگیری خلاصه',
+ progress: 'پیشرفت مرور',
+ review: 'مرور',
+ reviewComplete: 'مرور کامل شد',
+ reviewed_one: '{{count}} مرور شد',
+ reviewed_other: '{{count}} مرور شد',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}}س {{minutes}}د',
+ durationMinutes: '{{minutes}}د',
+ durationSeconds: '{{seconds}}ث',
+ saved: 'پیشرفت شما در این دسته ذخیره شد.',
+ },
+ unavailable: {
+ description: 'یک یادداشت اضافه کنید تا این دسته وارد صف مرور شود.',
+ title: 'کارتی برای مرور نیست',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'پاک کردن جستجو',
+ },
+ empty: {
+ noMatchesInWorkspace: 'در این فضای کاری نتیجهای نیست',
+ noMatchesInWorkspaceDescription: 'هیچ پوشه، دسته یا یادداشتی با "{{query}}" مطابقت نداشت.',
+ },
+ errors: {
+ couldNotComplete: 'جستجو کامل نشد',
+ },
+ labels: {
+ results: 'نتایج جستجو',
+ resultsFor: 'نتایج برای "{{query}}"',
+ searchingContent: 'در حال جستجو در محتوا',
+ },
+ resultGroups: {
+ deck: 'دستهها',
+ folder: 'پوشهها',
+ note: 'یادداشتها',
+ },
+ resultKinds: {
+ deck: 'دسته',
+ folder: 'پوشه',
+ note: 'یادداشت',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'بازنشانی همه تنظیمات',
+ resetSettings: 'بازنشانی تنظیمات',
+ resetToDefaults: 'بازنشانی به پیشفرضها',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'JSON معتبر با 21 مقدار عددی وارد کنید.',
+ fsrsErrorInvalidParams_one: 'یک آرایه JSON با دقیقا {{count}} عدد محدود وارد کنید.',
+ fsrsErrorInvalidParams_other: 'یک آرایه JSON با دقیقا {{count}} عدد محدود وارد کنید.',
+ fsrsHelper: 'این یک تنظیم پیشرفته است. مقدارها باید به ترتیب بمانند.',
+ fsrsJsonLabel: 'JSON پارامترهای FSRS',
+ fsrsTitle: 'ویرایش پارامترهای FSRS',
+ fsrsDescription: 'برای بازنویسی وزنهای زمانبند، یک آرایه JSON با 21 عدد وارد کنید.',
+ resetDescription: 'این کار منطقه زمانی، محدودیتهای مطالعه و تنظیمات FSRS را بازمیگرداند.',
+ resetDescriptionWithLanguage: 'این کار زبان، منطقه زمانی، محدودیتهای مطالعه و تنظیمات FSRS را بازمیگرداند.',
+ resetTitle: 'همه تنظیمات بازنشانی شوند؟',
+ timezoneDescription: 'نام شهر یا شناسه منطقه زمانی را جستجو کنید.',
+ timezoneSearchLabel: 'جستجوی مناطق زمانی',
+ timezoneSearchPlaceholder: 'جستجوی مناطق زمانی…',
+ timezoneTitle: 'انتخاب منطقه زمانی',
+ },
+ errors: {
+ couldNotResetSettings: 'تنظیمات بازنشانی نشد',
+ couldNotSaveSettings: 'تنظیمات ذخیره نشد',
+ settingsCouldNotLoad: 'تنظیمات بارگیری نشد',
+ settingsUnavailable: 'تنظیمات در دسترس نیست.',
+ },
+ labels: {
+ appearance: 'ظاهر',
+ automatic: 'خودکار',
+ fsrsParameters: 'پارامترهای FSRS',
+ general: 'عمومی',
+ language: 'زبان',
+ loadingSettings: 'در حال بارگیری تنظیمات',
+ masteryHorizon: 'افق تسلط',
+ newCardOrder: 'ترتیب کارتهای جدید',
+ newCardsPerDay: 'کارت جدید در روز',
+ reviewCardsPerDay: 'کارت مرور در روز',
+ savingSettings: 'در حال ذخیره تنظیمات',
+ schedule: 'زمانبندی',
+ searchNoTimezones: 'منطقه زمانی مطابقی نیست.',
+ settings: 'تنظیمات',
+ settingsReset: 'بازنشانی تنظیمات',
+ study: 'مطالعه',
+ targetRecallProbability: 'احتمال یادآوری هدف',
+ theme: 'پوسته',
+ timezone: 'منطقه زمانی',
+ },
+ options: {
+ languageEnUs: 'انگلیسی (آمریکا)',
+ newCardsAfterReviews: 'بعد از مرورها',
+ newCardsBeforeReviews: 'قبل از مرورها',
+ newCardsMixed: 'ترکیبی',
+ themeDark: 'تیره',
+ themeLight: 'روشن',
+ themeSystem: 'سیستم',
+ timezoneSystem: 'استفاده از منطقه زمانی سیستم',
+ },
+ rows: {
+ fsrsDescription: 'وزنهای مدل پیشرفته',
+ languageDescription: 'زبان رابط',
+ masteryHorizonDescription: 'تعداد روزهایی که کارت باید در احتمال هدف یا بالاتر قابل یادآوری بماند تا مسلط محسوب شود',
+ newCardOrderDescription: 'ترتیب کارتهای جدید نسبت به مرورها',
+ newCardsPerDayDescription: 'حداکثر کارتهای جدید در روز',
+ reviewCardsPerDayDescription: 'حداکثر کارتهای مرور در روز',
+ targetRecallProbabilityDescription: 'حداقل احتمال یادآوری در مرور زمانبندیشده بعدی',
+ timezoneDescription: 'از منطقه زمانی خودکار استفاده کنید یا یک شهر انتخاب کنید.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'حذف دائمی',
+ empty: 'خالی کردن',
+ emptyTrash: 'خالی کردن سطل زباله',
+ restore: 'بازیابی',
+ restoringItem: 'در حال بازیابی {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: '"{{title}}" برای همیشه حذف میشود. این کار قابل بازگشت نیست.',
+ deleteItemFallbackDescription: 'این مورد برای همیشه حذف میشود. این کار قابل بازگشت نیست.',
+ deleteItemFallbackTitle: 'مورد حذف شود؟',
+ deleteItemTitle: '"{{title}}" حذف شود؟',
+ emptyTrashDescription: 'همه چیز در سطل زباله برای همیشه حذف میشود. این کار قابل بازگشت نیست.',
+ emptyTrashTitle: 'سطل زباله خالی شود؟',
+ },
+ empty: {
+ description: 'مواردی که حذف میکنید پیش از حذف دائمی اینجا ظاهر میشوند.',
+ title: 'سطل زباله خالی است',
+ },
+ errors: {
+ couldNotDeleteItem: 'مورد حذف نشد',
+ couldNotEmptyTrash: 'سطل زباله خالی نشد',
+ couldNotRestoreItem: 'مورد بازیابی نشد',
+ trashCouldNotLoad: 'سطل زباله بارگیری نشد',
+ trashMayBeOutOfDate: 'ممکن است سطل زباله بهروز نباشد',
+ },
+ labels: {
+ deletedAge: 'حذفشده {{value}}',
+ itemCount_one: '{{count}} مورد',
+ itemCount_other: '{{count}} مورد',
+ lastEmptied: 'آخرین خالیسازی {{value}}',
+ loadingTrash: 'در حال بارگیری سطل زباله',
+ originalLocation: 'مکان اصلی: {{location}}',
+ title: 'سطل زباله',
+ trashActions: 'اقدامهای سطل زباله {{title}}',
+ },
+ kinds: {
+ deck: 'دسته',
+ folder: 'پوشه',
+ note: 'یادداشت',
+ workspace: 'فضای کاری',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'ایجاد فضای کاری',
+ deleteWorkspace: 'حذف فضای کاری',
+ editWorkspace: 'ویرایش فضای کاری',
+ newWorkspace: 'فضای کاری جدید',
+ openWorkspace: 'باز کردن {{title}}',
+ openingWorkspace: 'در حال باز کردن {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'زمینه مطالعه.',
+ editorVisual: 'یک نشانه بصری برای این فضای کاری انتخاب کنید.',
+ emptyList: 'دستهها، یادداشتها و صفهای مرور را بر اساس زمینه مطالعه جدا کنید.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: '"{{title}}" به سطل زباله منتقل میشود. بعدا میتوانید آن را بازیابی کنید.',
+ deleteWorkspaceFallbackDescription: 'این فضای کاری به سطل زباله منتقل میشود. بعدا میتوانید آن را بازیابی کنید.',
+ deleteWorkspaceFallbackTitle: 'فضای کاری حذف شود؟',
+ deleteWorkspaceTitle: '"{{title}}" حذف شود؟',
+ },
+ empty: {
+ startWithWorkspace: 'با یک فضای کاری شروع کنید',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'فضای کاری ایجاد نشد',
+ couldNotDeleteWorkspace: 'فضای کاری حذف نشد',
+ couldNotOpenWorkspace: 'فضای کاری باز نشد',
+ couldNotSaveWorkspace: 'فضای کاری ذخیره نشد',
+ workspaceCouldNotLoad: 'فضای کاری بارگیری نشد',
+ workspacesCouldNotLoad: 'فضاهای کاری بارگیری نشدند',
+ },
+ fields: {
+ descriptionLabel: 'توضیحات فضای کاری',
+ descriptionPlaceholder: 'چه چیزی در این فضای کاری قرار میگیرد؟',
+ namePlaceholder: 'نام فضای کاری',
+ untitledWorkspace: 'فضای کاری بدون عنوان',
+ },
+ labels: {
+ createWorkspaceTitle: 'ایجاد فضای کاری',
+ loadingWorkspaces: 'در حال بارگیری فضاهای کاری',
+ workspace: 'فضای کاری',
+ workspaces: 'فضاهای کاری',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/fi.ts b/ui/src/core/i18n/resources/fi.ts
new file mode 100644
index 0000000..540de32
--- /dev/null
+++ b/ui/src/core/i18n/resources/fi.ts
@@ -0,0 +1,623 @@
+export const fi = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Yritä uudelleen. Jos tämä jatkuu, avaa Clear uudelleen.',
+ title: 'Käynnistys epäonnistui',
+ },
+ loadingTitle: 'Valmistellaan opiskelutilaasi',
+ },
+ common: {
+ actions: {
+ back: 'Takaisin',
+ cancel: 'Peruuta',
+ checkAgain: 'Tarkista uudelleen',
+ close: 'Sulje',
+ create: 'Luo',
+ delete: 'Poista',
+ dismissError: 'Piilota virhe',
+ dismissStatus: 'Piilota tila',
+ edit: 'Muokkaa',
+ itemActions: '{{title}}: toiminnot',
+ reset: 'Palauta',
+ review: 'Kertaa',
+ save: 'Tallenna',
+ saveChanges: 'Tallenna muutokset',
+ tryAgain: 'Yritä uudelleen',
+ },
+ labels: {
+ active: 'Aktiivinen',
+ clear: 'Clear',
+ custom: 'Mukautettu',
+ default: 'Oletus',
+ loadingEditor: 'Ladataan editoria',
+ name: 'Nimi',
+ completedTask: 'Valmis tehtävä',
+ description: 'Kuvaus',
+ incompleteTask: 'Keskeneräinen tehtävä',
+ percentageInput: '{{label}} prosentteina',
+ visual: 'Visuaalinen',
+ },
+ status: {
+ actionFailed: 'Toiminto epäonnistui',
+ actionInProgress: 'Toiminto käynnissä',
+ },
+ sort: {
+ ascending: 'Nouseva',
+ column: 'Sarake',
+ descending: 'Laskeva',
+ direction: 'Suunta',
+ sort: 'Lajittelu',
+ },
+ search: {
+ label: 'Haku',
+ },
+ visualPicker: {
+ allLucideIcons: 'Kaikki Lucide-kuvakkeet',
+ browseIconsFor: 'Selaa tai hae kuvakkeita kohteelle {{label}}.',
+ chooseIcon: 'Valitse kuvake',
+ iconPicker: '{{label}}: kuvakkeen valinta',
+ iconSearch: '{{label}}: kuvakehaku',
+ iconsCouldNotLoad: 'Kuvakkeita ei voitu ladata.',
+ loadingIcons: 'Ladataan kuvakkeita',
+ loadingMoreIcons: 'Ladataan lisää kuvakkeita',
+ moreIcons: 'Lisää kuvakkeita',
+ noIconsMatch: 'Mikään kuvake ei vastaa hakua "{{query}}".',
+ searchIconsPlaceholder: 'Hae kuvakkeita…',
+ selectedIcon: 'Valittu {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Luo',
+ newDeck: 'Uusi pakka',
+ newFolder: 'Uusi kansio',
+ },
+ descriptions: {
+ defaultWorkspace: 'Pidä pakat, kansiot ja muistiinpanot yhdessä.',
+ emptyWorkspace: 'Luo pakka ja lisää sitten muistiinpanoja kertausta varten.',
+ emptyFolder: 'Luo pakka ja lisää sitten muistiinpanoja kertausta varten.',
+ searchPlaceholder: 'Hae kansioita, pakkoja ja muistiinpanoja…',
+ },
+ empty: {
+ createFirstDeck: 'Luo ensimmäinen pakkasi',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Pakkaa ei voitu poistaa',
+ couldNotDeleteFolder: 'Kansiota ei voitu poistaa',
+ couldNotDeleteWorkspace: 'Työtilaa ei voitu poistaa',
+ dashboardCouldNotOpen: 'Koontinäkymää ei voitu avata',
+ decksCouldNotLoad: 'Pakkoja ei voitu ladata',
+ decksMayBeOutOfDate: 'Pakat voivat olla vanhentuneita',
+ foldersCouldNotLoad: 'Kansioita ei voitu ladata',
+ foldersMayBeOutOfDate: 'Kansiot voivat olla vanhentuneita',
+ workspaceCouldNotLoad: 'Työtilaa ei voitu ladata',
+ },
+ labels: {
+ dashboard: 'Koontinäkymä',
+ loadingDashboard: 'Ladataan koontinäkymää',
+ newItem: 'Uusi kohde',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Päivämäärä ei ole saatavilla',
+ },
+ age: {
+ dayAgo_one: '{{count}} päivä sitten',
+ dayAgo_other: '{{count}} päivää sitten',
+ hourAgo_one: '{{count}} tunti sitten',
+ hourAgo_other: '{{count}} tuntia sitten',
+ justNow: 'juuri nyt',
+ minuteAgo_one: '{{count}} minuutti sitten',
+ minuteAgo_other: '{{count}} minuuttia sitten',
+ unavailable: 'päivämäärä ei ole saatavilla',
+ weekAgo_one: '{{count}} viikko sitten',
+ weekAgo_other: '{{count}} viikkoa sitten',
+ },
+ labels: {
+ deleted: 'Poistettu {{value}}',
+ due: 'Erääntyy: {{value}}',
+ reviewed: 'Kerrattu: {{value}}',
+ updated: 'Päivitetty {{value}}',
+ updatedUppercase: 'PÄIVITETTY {{value}}',
+ },
+ relative: {
+ dayAgo_one: '{{count}} päivä sitten',
+ dayAgo_other: '{{count}} päivää sitten',
+ inAMoment: 'Hetken kuluttua',
+ inDay_one: '{{count}} päivän päästä',
+ inDay_other: '{{count}} päivän päästä',
+ inMonth_one: '{{count}} kuukauden päästä',
+ inMonth_other: '{{count}} kuukauden päästä',
+ inWeek_one: '{{count}} viikon päästä',
+ inWeek_other: '{{count}} viikon päästä',
+ justNow: 'Juuri nyt',
+ monthAgo_one: '{{count}} kuukausi sitten',
+ monthAgo_other: '{{count}} kuukautta sitten',
+ secondsAgoShort: '{{count}} s sitten',
+ minutesAgoShort: '{{count}} min sitten',
+ hoursAgoShort: '{{count}} h sitten',
+ today: 'Tänään',
+ tomorrow: 'Huomenna',
+ weekAgo_one: '{{count}} viikko sitten',
+ weekAgo_other: '{{count}} viikkoa sitten',
+ yesterday: 'Eilen',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: '{{title}}: toiminnot',
+ createDeck: 'Luo pakka',
+ createNote: 'Luo muistiinpano',
+ deleteDeck: 'Poista pakka',
+ editDeck: 'Muokkaa pakkaa',
+ newNote: 'Uusi muistiinpano',
+ openDeck: 'Avaa pakka {{title}}',
+ saveDeck: 'Pakkaa ei voitu tallentaa',
+ studyNow: 'Opiskele nyt',
+ },
+ descriptions: {
+ emptyDeck: 'Lisää muistiinpano, jotta tässä pakassa on kerrattavaa.',
+ editorDefault: 'Keskittynyt opiskelupakka.',
+ editorVisual: 'Valitse tälle pakalle kansikuvake.',
+ notesSearchPlaceholder: 'Hae muistiinpanoja…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Tämä siirtää kohteen "{{title}}" roskakoriin. Voit palauttaa sen myöhemmin.',
+ deleteDeckFallbackDescription: 'Tämä siirtää tämän pakan roskakoriin. Voit palauttaa sen myöhemmin.',
+ deleteDeckFallbackTitle: 'Poistetaanko pakka?',
+ deleteDeckTitle: 'Poistetaanko "{{title}}"?',
+ deleteNoteDescription: 'Tämä siirtää kohteen "{{title}}" roskakoriin. Voit palauttaa sen myöhemmin.',
+ deleteNoteFallbackTitle: 'Poistetaanko muistiinpano?',
+ deleteNoteTitle: 'Poistetaanko "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Ei vastaavia muistiinpanoja',
+ noMatchingNotesDescription: 'Yksikään muistiinpano ei vastannut hakua "{{query}}".',
+ thisDeckIsEmpty: 'Tämä pakka on tyhjä',
+ },
+ errors: {
+ couldNotCreateDeck: 'Pakkaa ei voitu luoda',
+ couldNotDeleteDeck: 'Pakkaa ei voitu poistaa',
+ couldNotDeleteNote: 'Muistiinpanoa ei voitu poistaa',
+ couldNotLoadFolderPath: 'Kansiopolkua ei voitu ladata',
+ couldNotSaveDeck: 'Pakkaa ei voitu tallentaa',
+ deckCouldNotLoad: 'Pakkaa ei voitu ladata',
+ notesCouldNotLoad: 'Muistiinpanoja ei voitu ladata',
+ notesMayBeOutOfDate: 'Muistiinpanot voivat olla vanhentuneita',
+ },
+ fields: {
+ descriptionLabel: 'Pakan kuvaus',
+ descriptionPlaceholder: 'Mitä tämä pakka auttaa sinua kertaamaan?',
+ namePlaceholder: 'Pakan nimi',
+ untitledDeck: 'Nimetön pakka',
+ untitledDeckLower: 'nimetön pakka',
+ },
+ labels: {
+ createDeckTitle: 'Luo pakka',
+ deck: 'Pakka',
+ deckNotesSearch: 'Pakan muistiinpanojen haku',
+ deckOverview: 'Pakan yleiskatsaus',
+ decks: 'Pakat',
+ due: 'Erääntyy',
+ dueToday: 'Erääntyy tänään',
+ loadingDeck: 'Ladataan pakkaa',
+ mastery: 'Hallinta',
+ notes: 'Muistiinpanot',
+ },
+ sort: {
+ ariaLabel: 'Lajittele pakat',
+ dueToday: 'Erääntyy tänään',
+ title: 'Otsikko',
+ updated: 'Päivitetty',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Tiedot muuttuivat. Päivitä ja yritä uudelleen.',
+ forbidden: 'Sinulla ei ole oikeutta tehdä tätä.',
+ notFound: 'Emme löytäneet tätä kohdetta.',
+ offline: 'Palveluun ei saada yhteyttä.',
+ timeout: 'Tässä kesti liian kauan. Yritä uudelleen.',
+ unauthorized: 'Kirjaudu sisään jatkaaksesi.',
+ unavailable: 'Palvelu ei ole tilapäisesti saatavilla.',
+ },
+ fallback: {
+ unexpected: 'Odottamaton virhe',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Luo kansio',
+ deleteFolder: 'Poista kansio',
+ editFolder: 'Muokkaa kansiota',
+ },
+ descriptions: {
+ editorDefault: 'Kansio toisiinsa liittyville pakoille.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Tämä siirtää kohteen "{{name}}" roskakoriin. Voit palauttaa sen myöhemmin.',
+ deleteFolderFallbackDescription: 'Tämä siirtää tämän kansion roskakoriin. Voit palauttaa sen myöhemmin.',
+ deleteFolderFallbackTitle: 'Poistetaanko kansio?',
+ deleteFolderTitle: 'Poistetaanko "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'Ei osumia tässä kansiossa',
+ noMatchesInFolderDescription: 'Yksikään kansio, pakka tai muistiinpano ei vastannut hakua "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Kansiota ei voitu luoda',
+ couldNotDeleteFolder: 'Kansiota ei voitu poistaa',
+ couldNotLoadFolderPath: 'Kansiopolkua ei voitu ladata',
+ couldNotSaveFolder: 'Kansiota ei voitu tallentaa',
+ folderCouldNotLoad: 'Kansiota ei voitu ladata',
+ },
+ fields: {
+ descriptionLabel: 'Kansion kuvaus',
+ descriptionPlaceholder: 'Mitä tähän kansioon kuuluu?',
+ namePlaceholder: 'Kansion nimi',
+ untitledFolder: 'Nimetön kansio',
+ },
+ labels: {
+ createFolderTitle: 'Luo kansio',
+ folder: 'Kansio',
+ folders: 'Kansiot',
+ loadingFolder: 'Ladataan kansiota',
+ name: 'Nimi',
+ updated: 'Päivitetty',
+ },
+ sort: {
+ ariaLabel: 'Lajittele kansiot',
+ name: 'Nimi',
+ updated: 'Päivitetty',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Jos paikalliset ja synkronoidut tiedot eroavat toisistaan, kohde näkyy täällä.',
+ heading: 'Synkronoinnin tila',
+ title: 'Ristiriidat',
+ noConflicts: 'Ristiriitoja ei löytynyt',
+ },
+ labels: {
+ menu: 'Valikko',
+ },
+ sections: {
+ settings: {
+ description: 'Mukauta ympäristöäsi ja asetuksiasi',
+ title: 'Asetukset',
+ },
+ trash: {
+ description: 'Palauta tai poista poistettuja kohteita pysyvästi',
+ title: 'Roskakori',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Sulje editori',
+ openActions: 'Avaa toiminnot',
+ openWorkspaces: 'Avaa työtilat',
+ },
+ items: {
+ home: 'Etusivu',
+ menu: 'Valikko',
+ primary: 'Ensisijainen',
+ settings: 'Asetukset',
+ spaces: 'Tilat',
+ trash: 'Roskakori',
+ workspaces: 'Työtilat',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Lisää cloze',
+ deleteNote: 'Poista muistiinpano',
+ editNote: 'Muokkaa muistiinpanoa',
+ hideDerivedCardsNote: 'Piilota johdettujen korttien huomautus',
+ openNote: 'Avaa {{title}}',
+ saveNote: 'Tallenna muistiinpano',
+ showDerivedCardsNote: 'Näytä johdettujen korttien huomautus',
+ },
+ descriptions: {
+ clozeFormat: 'Jokaisesta piilotetusta osasta tulee kertauskortti, kun tallennat.',
+ clozeFormatPrefix: 'Kääri piilotettu teksti merkinnällä',
+ derivedCardsHelper: 'Muistiinpanot ovat johdettujen korttien totuuden lähde.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Tämä siirtää kohteen "{{title}}" roskakoriin. Voit palauttaa sen myöhemmin.',
+ deleteNoteFallbackDescription: 'Tämä siirtää tämän muistiinpanon roskakoriin. Voit palauttaa sen myöhemmin.',
+ deleteNoteFallbackTitle: 'Poistetaanko muistiinpano?',
+ deleteNoteTitle: 'Poistetaanko "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Muistiinpanoa ei voitu luoda',
+ couldNotDeleteNote: 'Muistiinpanoa ei voitu poistaa',
+ couldNotSaveNote: 'Muistiinpanoa ei voitu tallentaa',
+ noteCouldNotLoad: 'Muistiinpanoa ei voitu ladata',
+ },
+ fields: {
+ back: 'Kääntöpuoli',
+ backPlaceholder: 'Kirjoita kääntöpuoli',
+ bodyPlaceholder: 'Kirjoita muistiinpanon sisältö cloze-poistoilla…',
+ front: 'Etupuoli',
+ frontPlaceholder: 'Kirjoita etupuoli',
+ noteBody: 'Muistiinpanon sisältö',
+ title: 'Otsikko',
+ titlePlaceholder: 'Lisää muistiinpanon otsikko',
+ untitledCloze: 'Nimetön cloze',
+ untitledNote: 'Nimetön muistiinpano',
+ },
+ labels: {
+ backUppercase: 'KÄÄNTÖPUOLI',
+ basic: 'Perus',
+ basicLower: 'perus',
+ basicUppercase: 'PERUS',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Cloze-muoto',
+ clozeUppercase: 'CLOZE',
+ deck: 'Pakka',
+ derivedCards: 'JOHDETUT KORTIT',
+ due: 'Erääntyy',
+ frontUppercase: 'ETUPUOLI',
+ inProgress: 'Kesken',
+ inProgressUppercase: 'KESKEN',
+ loadingNote: 'Ladataan muistiinpanoa',
+ loadingNoteEditor: 'Ladataan muistiinpanoeditoria',
+ markdownFormatting: 'Markdown-muotoilu',
+ mastered: 'Hallittu',
+ masteredUppercase: 'HALLITTU',
+ newNote: 'Uusi muistiinpano',
+ noteBody: 'MUISTIINPANON SISÄLTÖ',
+ noteContent: 'Muistiinpanon sisältö',
+ noteDetails: 'Muistiinpanon tiedot',
+ noteMetadata: 'Muistiinpanon metatiedot',
+ noteType: 'Muistiinpanon tyyppi',
+ notes: 'Muistiinpanot',
+ reviewed: 'Kerrattu',
+ studyProgress: 'Opiskelun edistyminen',
+ studyProgressUppercase: 'OPISKELUN EDISTYMINEN',
+ titleUppercase: 'OTSIKKO',
+ updated: 'Päivitetty',
+ },
+ sort: {
+ ariaLabel: 'Lajittele muistiinpanot',
+ title: 'Otsikko',
+ updated: 'Päivitetty',
+ },
+ toolbar: {
+ bold: 'Lihavointi',
+ italic: 'Kursivointi',
+ link: 'Linkki',
+ list: 'Luettelo',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Uudelleen',
+ backToDeck: 'Takaisin pakkaan',
+ continueReview: 'Jatka kertausta',
+ easy: 'Helppo',
+ good: 'Hyvä',
+ hard: 'Vaikea',
+ newNote: 'Uusi muistiinpano',
+ showAnswer: 'Näytä vastaus',
+ },
+ errors: {
+ couldNotGradeCard: 'Korttia ei voitu arvioida',
+ reviewCouldNotLoad: 'Kertausta ei voitu ladata',
+ reviewCouldNotStart: 'Kertausta ei voitu aloittaa',
+ summaryCouldNotLoad: 'Kertauksen yhteenvetoa ei voitu ladata',
+ summaryNotAvailable: 'Kertauksen yhteenveto ei ole saatavilla',
+ summaryNotComplete: 'Tämä kertaus ei ole vielä valmis.',
+ },
+ labels: {
+ cardsReviewed: 'Kerratut kortit',
+ deck: 'Pakka',
+ duration: 'Kesto',
+ loadingReview: 'Ladataan kertausta',
+ loadingSummary: 'Ladataan yhteenvetoa',
+ progress: 'Kertauksen edistyminen',
+ review: 'Kertaus',
+ reviewComplete: 'Kertaus valmis',
+ reviewed_one: 'Kerrattu {{count}}',
+ reviewed_other: 'Kerrattu {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} h {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'Edistymisesi tallennettiin tähän pakkaan.',
+ },
+ unavailable: {
+ description: 'Lisää muistiinpano, jotta tämä pakka voi siirtyä kertausjonoon.',
+ title: 'Ei kortteja kerrattavaksi',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Tyhjennä haku',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Ei osumia tässä työtilassa',
+ noMatchesInWorkspaceDescription: 'Yksikään kansio, pakka tai muistiinpano ei vastannut hakua "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Hakua ei voitu suorittaa',
+ },
+ labels: {
+ results: 'Hakutulokset',
+ resultsFor: 'Tulokset haulle "{{query}}"',
+ searchingContent: 'Haetaan sisältöä',
+ },
+ resultGroups: {
+ deck: 'Pakat',
+ folder: 'Kansiot',
+ note: 'Muistiinpanot',
+ },
+ resultKinds: {
+ deck: 'pakka',
+ folder: 'kansio',
+ note: 'muistiinpano',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Palauta kaikki asetukset',
+ resetSettings: 'Palauta asetukset',
+ resetToDefaults: 'Palauta oletukset',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Liitä kelvollinen JSON, jossa on 21 numeerista arvoa.',
+ fsrsErrorInvalidParams_one: 'Syötä JSON-taulukko, jossa on täsmälleen {{count}} äärellinen luku.',
+ fsrsErrorInvalidParams_other: 'Syötä JSON-taulukko, jossa on täsmälleen {{count}} äärellistä lukua.',
+ fsrsHelper: 'Tämä on asiantuntijan ohitus. Arvojen on pysyttävä järjestyksessä.',
+ fsrsJsonLabel: 'FSRS-parametrit JSON',
+ fsrsTitle: 'Muokkaa FSRS-parametreja',
+ fsrsDescription: 'Liitä JSON-taulukko, jossa on 21 lukua, korvataksesi ajoituspainot.',
+ resetDescription: 'Tämä palauttaa aikavyöhykkeen, opiskelurajat ja FSRS-asetukset.',
+ resetDescriptionWithLanguage: 'Tämä palauttaa kielen, aikavyöhykkeen, opiskelurajat ja FSRS-asetukset.',
+ resetTitle: 'Palautetaanko kaikki asetukset?',
+ timezoneDescription: 'Hae kaupunkia tai aikavyöhykkeen tunnistetta.',
+ timezoneSearchLabel: 'Hae aikavyöhykkeitä',
+ timezoneSearchPlaceholder: 'Hae aikavyöhykkeitä…',
+ timezoneTitle: 'Valitse aikavyöhyke',
+ },
+ errors: {
+ couldNotResetSettings: 'Asetuksia ei voitu palauttaa',
+ couldNotSaveSettings: 'Asetuksia ei voitu tallentaa',
+ settingsCouldNotLoad: 'Asetuksia ei voitu ladata',
+ settingsUnavailable: 'Asetukset eivät ole saatavilla.',
+ },
+ labels: {
+ appearance: 'Ulkoasu',
+ automatic: 'Automaattinen',
+ fsrsParameters: 'FSRS-parametrit',
+ general: 'Yleiset',
+ language: 'Kieli',
+ loadingSettings: 'Ladataan asetuksia',
+ masteryHorizon: 'Hallinnan aikahorisontti',
+ newCardOrder: 'Uusien korttien järjestys',
+ newCardsPerDay: 'Uusia kortteja päivässä',
+ reviewCardsPerDay: 'Kertauskortteja päivässä',
+ savingSettings: 'Tallennetaan asetuksia',
+ schedule: 'Aikataulu',
+ searchNoTimezones: 'Ei vastaavia aikavyöhykkeitä.',
+ settings: 'Asetukset',
+ settingsReset: 'Asetukset palautettu',
+ study: 'Opiskelu',
+ targetRecallProbability: 'Tavoiteltu muistamisen todennäköisyys',
+ theme: 'Teema',
+ timezone: 'Aikavyöhyke',
+ },
+ options: {
+ languageEnUs: 'Englanti (Yhdysvallat)',
+ newCardsAfterReviews: 'Kertausten jälkeen',
+ newCardsBeforeReviews: 'Ennen kertauksia',
+ newCardsMixed: 'Sekoitettu',
+ themeDark: 'Tumma',
+ themeLight: 'Vaalea',
+ themeSystem: 'Järjestelmä',
+ timezoneSystem: 'Käytä järjestelmän aikavyöhykettä',
+ },
+ rows: {
+ fsrsDescription: 'Asiantuntijamallin painot',
+ languageDescription: 'Käyttöliittymän kieli',
+ masteryHorizonDescription: 'Päivien määrä, joiden ajan kortin on pysyttävä muistettavissa tavoitetodennäköisyydellä tai sitä paremmin, jotta se lasketaan hallituksi',
+ newCardOrderDescription: 'Uusien korttien järjestys suhteessa kertauksiin',
+ newCardsPerDayDescription: 'Uusien korttien enimmäismäärä päivässä',
+ reviewCardsPerDayDescription: 'Kertauskorttien enimmäismäärä päivässä',
+ targetRecallProbabilityDescription: 'Muistamisen vähimmäistodennäköisyys seuraavassa ajoitetussa kertauksessa',
+ timezoneDescription: 'Käytä automaattista aikavyöhykettä tai valitse kaupunki.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Poista pysyvästi',
+ empty: 'Tyhjennä',
+ emptyTrash: 'Tyhjennä roskakori',
+ restore: 'Palauta',
+ restoringItem: 'Palautetaan {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Tämä poistaa kohteen "{{title}}" pysyvästi. Tätä ei voi kumota.',
+ deleteItemFallbackDescription: 'Tämä poistaa tämän kohteen pysyvästi. Tätä ei voi kumota.',
+ deleteItemFallbackTitle: 'Poistetaanko kohde?',
+ deleteItemTitle: 'Poistetaanko "{{title}}"?',
+ emptyTrashDescription: 'Tämä poistaa pysyvästi kaiken roskakorista. Tätä ei voi kumota.',
+ emptyTrashTitle: 'Tyhjennetäänkö roskakori?',
+ },
+ empty: {
+ description: 'Poistamasi kohteet näkyvät täällä ennen pysyvää poistamista.',
+ title: 'Roskakori on tyhjä',
+ },
+ errors: {
+ couldNotDeleteItem: 'Kohdetta ei voitu poistaa',
+ couldNotEmptyTrash: 'Roskakoria ei voitu tyhjentää',
+ couldNotRestoreItem: 'Kohdetta ei voitu palauttaa',
+ trashCouldNotLoad: 'Roskakoria ei voitu ladata',
+ trashMayBeOutOfDate: 'Roskakori voi olla vanhentunut',
+ },
+ labels: {
+ deletedAge: 'Poistettu {{value}}',
+ itemCount_one: '{{count}} kohde',
+ itemCount_other: '{{count}} kohdetta',
+ lastEmptied: 'Viimeksi tyhjennetty {{value}}',
+ loadingTrash: 'Ladataan roskakoria',
+ originalLocation: 'Alkuperäinen sijainti: {{location}}',
+ title: 'Roskakori',
+ trashActions: '{{title}}: roskakoritoiminnot',
+ },
+ kinds: {
+ deck: 'Pakka',
+ folder: 'Kansio',
+ note: 'Muistiinpano',
+ workspace: 'Työtila',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Luo työtila',
+ deleteWorkspace: 'Poista työtila',
+ editWorkspace: 'Muokkaa työtilaa',
+ newWorkspace: 'Uusi työtila',
+ openWorkspace: 'Avaa {{title}}',
+ openingWorkspace: 'Avataan {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Opiskelukonteksti.',
+ editorVisual: 'Valitse tälle työtilalle visuaalinen ankkuri.',
+ emptyList: 'Erota pakat, muistiinpanot ja kertausjonot opiskelukontekstin mukaan.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Tämä siirtää kohteen "{{title}}" roskakoriin. Voit palauttaa sen myöhemmin.',
+ deleteWorkspaceFallbackDescription: 'Tämä siirtää tämän työtilan roskakoriin. Voit palauttaa sen myöhemmin.',
+ deleteWorkspaceFallbackTitle: 'Poistetaanko työtila?',
+ deleteWorkspaceTitle: 'Poistetaanko "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Aloita työtilalla',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Työtilaa ei voitu luoda',
+ couldNotDeleteWorkspace: 'Työtilaa ei voitu poistaa',
+ couldNotOpenWorkspace: 'Työtilaa ei voitu avata',
+ couldNotSaveWorkspace: 'Työtilaa ei voitu tallentaa',
+ workspaceCouldNotLoad: 'Työtilaa ei voitu ladata',
+ workspacesCouldNotLoad: 'Työtiloja ei voitu ladata',
+ },
+ fields: {
+ descriptionLabel: 'Työtilan kuvaus',
+ descriptionPlaceholder: 'Mitä tähän työtilaan kuuluu?',
+ namePlaceholder: 'Työtilan nimi',
+ untitledWorkspace: 'Nimetön työtila',
+ },
+ labels: {
+ createWorkspaceTitle: 'Luo työtila',
+ loadingWorkspaces: 'Ladataan työtiloja',
+ workspace: 'Työtila',
+ workspaces: 'Työtilat',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/fr.ts b/ui/src/core/i18n/resources/fr.ts
new file mode 100644
index 0000000..bb780f1
--- /dev/null
+++ b/ui/src/core/i18n/resources/fr.ts
@@ -0,0 +1,623 @@
+export const fr = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Réessayez. Si le problème persiste, rouvrez Clear.',
+ title: 'Impossible de démarrer',
+ },
+ loadingTitle: 'Préparation de votre espace d’étude',
+ },
+ common: {
+ actions: {
+ back: 'Retour',
+ cancel: 'Annuler',
+ checkAgain: 'Vérifier à nouveau',
+ close: 'Fermer',
+ create: 'Créer',
+ delete: 'Supprimer',
+ dismissError: 'Masquer l’erreur',
+ dismissStatus: 'Masquer l’état',
+ edit: 'Modifier',
+ itemActions: 'Actions pour {{title}}',
+ reset: 'Réinitialiser',
+ review: 'Réviser',
+ save: 'Enregistrer',
+ saveChanges: 'Enregistrer les modifications',
+ tryAgain: 'Réessayer',
+ },
+ labels: {
+ active: 'Actif',
+ clear: 'Clear',
+ custom: 'Personnalisé',
+ default: 'Par défaut',
+ loadingEditor: 'Chargement de l’éditeur',
+ name: 'Nom',
+ completedTask: 'Tâche terminée',
+ description: 'Description',
+ incompleteTask: 'Tâche incomplète',
+ percentageInput: 'Pourcentage de {{label}}',
+ visual: 'Visuel',
+ },
+ status: {
+ actionFailed: 'L’action a échoué',
+ actionInProgress: 'Action en cours',
+ },
+ sort: {
+ ascending: 'Asc',
+ column: 'Colonne',
+ descending: 'Desc',
+ direction: 'Sens',
+ sort: 'Trier',
+ },
+ search: {
+ label: 'Rechercher',
+ },
+ visualPicker: {
+ allLucideIcons: 'Toutes les icônes Lucide',
+ browseIconsFor: 'Parcourez ou recherchez des icônes pour {{label}}.',
+ chooseIcon: 'Choisir une icône',
+ iconPicker: 'Sélecteur d’icône pour {{label}}',
+ iconSearch: 'Recherche d’icône pour {{label}}',
+ iconsCouldNotLoad: 'Les icônes n’ont pas pu être chargées.',
+ loadingIcons: 'Chargement des icônes',
+ loadingMoreIcons: 'Chargement d’autres icônes',
+ moreIcons: 'Plus d’icônes',
+ noIconsMatch: 'Aucune icône ne correspond à "{{query}}".',
+ searchIconsPlaceholder: 'Rechercher des icônes…',
+ selectedIcon: '{{label}} sélectionné',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Créer',
+ newDeck: 'Nouveau paquet',
+ newFolder: 'Nouveau dossier',
+ },
+ descriptions: {
+ defaultWorkspace: 'Gardez paquets, dossiers et notes ensemble.',
+ emptyWorkspace: 'Créez un paquet, puis ajoutez des notes pour constituer votre file de révision.',
+ emptyFolder: 'Créez un paquet, puis ajoutez des notes pour constituer une file de révision.',
+ searchPlaceholder: 'Rechercher dossiers, paquets et notes…',
+ },
+ empty: {
+ createFirstDeck: 'Créez votre premier paquet',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Impossible de supprimer le paquet',
+ couldNotDeleteFolder: 'Impossible de supprimer le dossier',
+ couldNotDeleteWorkspace: 'Impossible de supprimer l’espace de travail',
+ dashboardCouldNotOpen: 'Impossible d’ouvrir le tableau de bord',
+ decksCouldNotLoad: 'Impossible de charger les paquets',
+ decksMayBeOutOfDate: 'Les paquets peuvent être obsolètes',
+ foldersCouldNotLoad: 'Impossible de charger les dossiers',
+ foldersMayBeOutOfDate: 'Les dossiers peuvent être obsolètes',
+ workspaceCouldNotLoad: 'Impossible de charger l’espace de travail',
+ },
+ labels: {
+ dashboard: 'Tableau de bord',
+ loadingDashboard: 'Chargement du tableau de bord',
+ newItem: 'Nouvel élément',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Date indisponible',
+ },
+ age: {
+ dayAgo_one: 'il y a {{count}} jour',
+ dayAgo_other: 'il y a {{count}} jours',
+ hourAgo_one: 'il y a {{count}} heure',
+ hourAgo_other: 'il y a {{count}} heures',
+ justNow: 'à l’instant',
+ minuteAgo_one: 'il y a {{count}} minute',
+ minuteAgo_other: 'il y a {{count}} minutes',
+ unavailable: 'date indisponible',
+ weekAgo_one: 'il y a {{count}} semaine',
+ weekAgo_other: 'il y a {{count}} semaines',
+ },
+ labels: {
+ deleted: 'Supprimé {{value}}',
+ due: 'À réviser : {{value}}',
+ reviewed: 'Révisé : {{value}}',
+ updated: 'Mis à jour {{value}}',
+ updatedUppercase: 'MIS À JOUR {{value}}',
+ },
+ relative: {
+ dayAgo_one: 'il y a {{count}} jour',
+ dayAgo_other: 'il y a {{count}} jours',
+ inAMoment: 'Dans un instant',
+ inDay_one: 'Dans {{count}} jour',
+ inDay_other: 'Dans {{count}} jours',
+ inMonth_one: 'Dans {{count}} mois',
+ inMonth_other: 'Dans {{count}} mois',
+ inWeek_one: 'Dans {{count}} semaine',
+ inWeek_other: 'Dans {{count}} semaines',
+ justNow: 'À l’instant',
+ monthAgo_one: 'il y a {{count}} mois',
+ monthAgo_other: 'il y a {{count}} mois',
+ secondsAgoShort: 'il y a {{count}} s',
+ minutesAgoShort: 'il y a {{count}} min',
+ hoursAgoShort: 'il y a {{count}} h',
+ today: 'Aujourd’hui',
+ tomorrow: 'Demain',
+ weekAgo_one: 'il y a {{count}} semaine',
+ weekAgo_other: 'il y a {{count}} semaines',
+ yesterday: 'Hier',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Actions pour {{title}}',
+ createDeck: 'Créer un paquet',
+ createNote: 'Créer une note',
+ deleteDeck: 'Supprimer le paquet',
+ editDeck: 'Modifier le paquet',
+ newNote: 'Nouvelle note',
+ openDeck: 'Ouvrir le paquet {{title}}',
+ saveDeck: 'Impossible d’enregistrer le paquet',
+ studyNow: 'Étudier maintenant',
+ },
+ descriptions: {
+ emptyDeck: 'Ajoutez une note pour donner du contenu à réviser à ce paquet.',
+ editorDefault: 'Paquet d’étude ciblé.',
+ editorVisual: 'Choisissez un glyphe de couverture pour ce paquet.',
+ notesSearchPlaceholder: 'Rechercher des notes…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Cela déplace "{{title}}" vers la corbeille. Vous pourrez le restaurer plus tard.',
+ deleteDeckFallbackDescription: 'Cela déplace ce paquet vers la corbeille. Vous pourrez le restaurer plus tard.',
+ deleteDeckFallbackTitle: 'Supprimer le paquet ?',
+ deleteDeckTitle: 'Supprimer "{{title}}" ?',
+ deleteNoteDescription: 'Cela déplace "{{title}}" vers la corbeille. Vous pourrez la restaurer plus tard.',
+ deleteNoteFallbackTitle: 'Supprimer la note ?',
+ deleteNoteTitle: 'Supprimer "{{title}}" ?',
+ },
+ empty: {
+ noMatchingNotes: 'Aucune note correspondante',
+ noMatchingNotesDescription: 'Aucune note ne correspond à "{{query}}".',
+ thisDeckIsEmpty: 'Ce paquet est vide',
+ },
+ errors: {
+ couldNotCreateDeck: 'Impossible de créer le paquet',
+ couldNotDeleteDeck: 'Impossible de supprimer le paquet',
+ couldNotDeleteNote: 'Impossible de supprimer la note',
+ couldNotLoadFolderPath: 'Impossible de charger le chemin du dossier',
+ couldNotSaveDeck: 'Impossible d’enregistrer le paquet',
+ deckCouldNotLoad: 'Impossible de charger le paquet',
+ notesCouldNotLoad: 'Impossible de charger les notes',
+ notesMayBeOutOfDate: 'Les notes peuvent être obsolètes',
+ },
+ fields: {
+ descriptionLabel: 'Description du paquet',
+ descriptionPlaceholder: 'Que ce paquet vous aidera-t-il à réviser ?',
+ namePlaceholder: 'Nom du paquet',
+ untitledDeck: 'Paquet sans titre',
+ untitledDeckLower: 'paquet sans titre',
+ },
+ labels: {
+ createDeckTitle: 'Créer un paquet',
+ deck: 'Paquet',
+ deckNotesSearch: 'Recherche des notes du paquet',
+ deckOverview: 'Aperçu du paquet',
+ decks: 'Paquets',
+ due: 'À réviser',
+ dueToday: 'À réviser aujourd’hui',
+ loadingDeck: 'Chargement du paquet',
+ mastery: 'Maîtrise',
+ notes: 'Notes',
+ },
+ sort: {
+ ariaLabel: 'Trier les paquets',
+ dueToday: 'À réviser aujourd’hui',
+ title: 'Titre',
+ updated: 'Mis à jour',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Les données ont changé. Actualisez et réessayez.',
+ forbidden: 'Vous n’avez pas l’autorisation de faire cela.',
+ notFound: 'Nous n’avons pas trouvé cet élément.',
+ offline: 'Impossible de joindre le service.',
+ timeout: 'Cela a pris trop de temps. Réessayez.',
+ unauthorized: 'Connectez-vous pour continuer.',
+ unavailable: 'Le service est temporairement indisponible.',
+ },
+ fallback: {
+ unexpected: 'Erreur inattendue',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Créer un dossier',
+ deleteFolder: 'Supprimer le dossier',
+ editFolder: 'Modifier le dossier',
+ },
+ descriptions: {
+ editorDefault: 'Dossier pour paquets associés.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Cela déplace "{{name}}" vers la corbeille. Vous pourrez le restaurer plus tard.',
+ deleteFolderFallbackDescription: 'Cela déplace ce dossier vers la corbeille. Vous pourrez le restaurer plus tard.',
+ deleteFolderFallbackTitle: 'Supprimer le dossier ?',
+ deleteFolderTitle: 'Supprimer "{{name}}" ?',
+ },
+ empty: {
+ noMatchesInFolder: 'Aucune correspondance dans ce dossier',
+ noMatchesInFolderDescription: 'Aucun dossier, paquet ou note ne correspond à "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Impossible de créer le dossier',
+ couldNotDeleteFolder: 'Impossible de supprimer le dossier',
+ couldNotLoadFolderPath: 'Impossible de charger le chemin du dossier',
+ couldNotSaveFolder: 'Impossible d’enregistrer le dossier',
+ folderCouldNotLoad: 'Impossible de charger le dossier',
+ },
+ fields: {
+ descriptionLabel: 'Description du dossier',
+ descriptionPlaceholder: 'Qu’est-ce qui appartient à ce dossier ?',
+ namePlaceholder: 'Nom du dossier',
+ untitledFolder: 'Dossier sans titre',
+ },
+ labels: {
+ createFolderTitle: 'Créer un dossier',
+ folder: 'Dossier',
+ folders: 'Dossiers',
+ loadingFolder: 'Chargement du dossier',
+ name: 'Nom',
+ updated: 'Mis à jour',
+ },
+ sort: {
+ ariaLabel: 'Trier les dossiers',
+ name: 'Nom',
+ updated: 'Mis à jour',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Si les données locales et synchronisées divergent, l’élément apparaîtra ici.',
+ heading: 'État de synchronisation',
+ title: 'Conflits',
+ noConflicts: 'Aucun conflit trouvé',
+ },
+ labels: {
+ menu: 'Menu',
+ },
+ sections: {
+ settings: {
+ description: 'Personnalisez votre environnement et vos préférences',
+ title: 'Paramètres',
+ },
+ trash: {
+ description: 'Restaurez ou supprimez définitivement les éléments retirés',
+ title: 'Corbeille',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Fermer l’éditeur',
+ openActions: 'Ouvrir les actions',
+ openWorkspaces: 'Ouvrir les espaces de travail',
+ },
+ items: {
+ home: 'Accueil',
+ menu: 'Menu',
+ primary: 'Principal',
+ settings: 'Paramètres',
+ spaces: 'Espaces',
+ trash: 'Corbeille',
+ workspaces: 'Espaces de travail',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Ajouter un cloze',
+ deleteNote: 'Supprimer la note',
+ editNote: 'Modifier la note',
+ hideDerivedCardsNote: 'Masquer la note des cartes dérivées',
+ openNote: 'Ouvrir {{title}}',
+ saveNote: 'Enregistrer la note',
+ showDerivedCardsNote: 'Afficher la note des cartes dérivées',
+ },
+ descriptions: {
+ clozeFormat: 'Chaque partie masquée devient une carte de révision à l’enregistrement.',
+ clozeFormatPrefix: 'Entourez le texte masqué avec',
+ derivedCardsHelper: 'Les notes sont la source de vérité des cartes dérivées.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Cela déplace "{{title}}" vers la corbeille. Vous pourrez la restaurer plus tard.',
+ deleteNoteFallbackDescription: 'Cela déplace cette note vers la corbeille. Vous pourrez la restaurer plus tard.',
+ deleteNoteFallbackTitle: 'Supprimer la note ?',
+ deleteNoteTitle: 'Supprimer "{{title}}" ?',
+ },
+ errors: {
+ couldNotCreateNote: 'Impossible de créer la note',
+ couldNotDeleteNote: 'Impossible de supprimer la note',
+ couldNotSaveNote: 'Impossible d’enregistrer la note',
+ noteCouldNotLoad: 'Impossible de charger la note',
+ },
+ fields: {
+ back: 'Verso',
+ backPlaceholder: 'Saisissez le verso',
+ bodyPlaceholder: 'Rédigez le corps de la note avec des cloze deletions…',
+ front: 'Recto',
+ frontPlaceholder: 'Saisissez le recto',
+ noteBody: 'Corps de la note',
+ title: 'Titre',
+ titlePlaceholder: 'Ajoutez un titre de note',
+ untitledCloze: 'Cloze sans titre',
+ untitledNote: 'Note sans titre',
+ },
+ labels: {
+ backUppercase: 'VERSO',
+ basic: 'Basique',
+ basicLower: 'basique',
+ basicUppercase: 'BASIQUE',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Format cloze',
+ clozeUppercase: 'CLOZE',
+ deck: 'Paquet',
+ derivedCards: 'CARTES DÉRIVÉES',
+ due: 'À réviser',
+ frontUppercase: 'RECTO',
+ inProgress: 'En cours',
+ inProgressUppercase: 'EN COURS',
+ loadingNote: 'Chargement de la note',
+ loadingNoteEditor: 'Chargement de l’éditeur de notes',
+ markdownFormatting: 'Mise en forme Markdown',
+ mastered: 'Maîtrisé',
+ masteredUppercase: 'MAÎTRISÉ',
+ newNote: 'Nouvelle note',
+ noteBody: 'CORPS DE LA NOTE',
+ noteContent: 'Contenu de la note',
+ noteDetails: 'Détails de la note',
+ noteMetadata: 'Métadonnées de la note',
+ noteType: 'Type de note',
+ notes: 'Notes',
+ reviewed: 'Révisé',
+ studyProgress: 'Progression de l’étude',
+ studyProgressUppercase: 'PROGRESSION DE L’ÉTUDE',
+ titleUppercase: 'TITRE',
+ updated: 'Mis à jour',
+ },
+ sort: {
+ ariaLabel: 'Trier les notes',
+ title: 'Titre',
+ updated: 'Mis à jour',
+ },
+ toolbar: {
+ bold: 'Gras',
+ italic: 'Italique',
+ link: 'Lien',
+ list: 'Liste',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Encore',
+ backToDeck: 'Retour au paquet',
+ continueReview: 'Continuer la révision',
+ easy: 'Facile',
+ good: 'Bien',
+ hard: 'Difficile',
+ newNote: 'Nouvelle note',
+ showAnswer: 'Afficher la réponse',
+ },
+ errors: {
+ couldNotGradeCard: 'Impossible de noter la carte',
+ reviewCouldNotLoad: 'Impossible de charger la révision',
+ reviewCouldNotStart: 'Impossible de démarrer la révision',
+ summaryCouldNotLoad: 'Impossible de charger le résumé de révision',
+ summaryNotAvailable: 'Le résumé de révision n’est pas disponible',
+ summaryNotComplete: 'Cette révision n’est pas encore terminée.',
+ },
+ labels: {
+ cardsReviewed: 'Cartes révisées',
+ deck: 'Paquet',
+ duration: 'Durée',
+ loadingReview: 'Chargement de la révision',
+ loadingSummary: 'Chargement du résumé',
+ progress: 'Progression de la révision',
+ review: 'Révision',
+ reviewComplete: 'Révision terminée',
+ reviewed_one: '{{count}} révisée',
+ reviewed_other: '{{count}} révisées',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} h {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'Votre progression a été enregistrée dans ce paquet.',
+ },
+ unavailable: {
+ description: 'Ajoutez une note pour que ce paquet puisse entrer dans la file de révision.',
+ title: 'Aucune carte à réviser',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Effacer la recherche',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Aucune correspondance dans cet espace de travail',
+ noMatchesInWorkspaceDescription: 'Aucun dossier, paquet ou note ne correspond à "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'La recherche n’a pas pu aboutir',
+ },
+ labels: {
+ results: 'Résultats de recherche',
+ resultsFor: 'Résultats pour "{{query}}"',
+ searchingContent: 'Recherche de contenu',
+ },
+ resultGroups: {
+ deck: 'Paquets',
+ folder: 'Dossiers',
+ note: 'Notes',
+ },
+ resultKinds: {
+ deck: 'paquet',
+ folder: 'dossier',
+ note: 'note',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Réinitialiser tous les paramètres',
+ resetSettings: 'Réinitialiser les paramètres',
+ resetToDefaults: 'Rétablir les valeurs par défaut',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Collez un JSON valide avec 21 valeurs numériques.',
+ fsrsErrorInvalidParams_one: 'Saisissez un tableau JSON avec exactement {{count}} nombre fini.',
+ fsrsErrorInvalidParams_other: 'Saisissez un tableau JSON avec exactement {{count}} nombres finis.',
+ fsrsHelper: 'Il s’agit d’un réglage expert. Les valeurs doivent rester dans l’ordre.',
+ fsrsJsonLabel: 'JSON des paramètres FSRS',
+ fsrsTitle: 'Modifier les paramètres FSRS',
+ fsrsDescription: 'Collez un tableau JSON de 21 nombres pour remplacer les poids du scheduler.',
+ resetDescription: 'Cela restaure le fuseau horaire, les limites d’étude et les paramètres FSRS.',
+ resetDescriptionWithLanguage: 'Cela restaure la langue, le fuseau horaire, les limites d’étude et les paramètres FSRS.',
+ resetTitle: 'Réinitialiser tous les paramètres ?',
+ timezoneDescription: 'Recherchez une ville ou un identifiant de fuseau horaire.',
+ timezoneSearchLabel: 'Rechercher des fuseaux horaires',
+ timezoneSearchPlaceholder: 'Rechercher des fuseaux horaires…',
+ timezoneTitle: 'Choisir un fuseau horaire',
+ },
+ errors: {
+ couldNotResetSettings: 'Impossible de réinitialiser les paramètres',
+ couldNotSaveSettings: 'Impossible d’enregistrer les paramètres',
+ settingsCouldNotLoad: 'Impossible de charger les paramètres',
+ settingsUnavailable: 'Les paramètres sont indisponibles.',
+ },
+ labels: {
+ appearance: 'Apparence',
+ automatic: 'Automatique',
+ fsrsParameters: 'Paramètres FSRS',
+ general: 'Général',
+ language: 'Langue',
+ loadingSettings: 'Chargement des paramètres',
+ masteryHorizon: 'Horizon de maîtrise',
+ newCardOrder: 'Ordre des nouvelles cartes',
+ newCardsPerDay: 'Nouvelles cartes par jour',
+ reviewCardsPerDay: 'Cartes de révision par jour',
+ savingSettings: 'Enregistrement des paramètres',
+ schedule: 'Planification',
+ searchNoTimezones: 'Aucun fuseau horaire correspondant.',
+ settings: 'Paramètres',
+ settingsReset: 'Paramètres réinitialisés',
+ study: 'Étude',
+ targetRecallProbability: 'Probabilité de rappel cible',
+ theme: 'Thème',
+ timezone: 'Fuseau horaire',
+ },
+ options: {
+ languageEnUs: 'Anglais (États-Unis)',
+ newCardsAfterReviews: 'Après les révisions',
+ newCardsBeforeReviews: 'Avant les révisions',
+ newCardsMixed: 'Mélangé',
+ themeDark: 'Sombre',
+ themeLight: 'Clair',
+ themeSystem: 'Système',
+ timezoneSystem: 'Utiliser le fuseau horaire du système',
+ },
+ rows: {
+ fsrsDescription: 'Poids du modèle expert',
+ languageDescription: 'Langue de l’interface',
+ masteryHorizonDescription: 'Nombre de jours pendant lesquels une carte doit rester rappelable au seuil cible ou au-dessus pour compter comme maîtrisée',
+ newCardOrderDescription: 'Ordre des nouvelles cartes par rapport aux révisions',
+ newCardsPerDayDescription: 'Nombre maximal de nouvelles cartes par jour',
+ reviewCardsPerDayDescription: 'Nombre maximal de cartes de révision par jour',
+ targetRecallProbabilityDescription: 'Probabilité minimale de rappel lors de la prochaine révision planifiée',
+ timezoneDescription: 'Utilisez le fuseau horaire automatique ou choisissez une ville.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Supprimer définitivement',
+ empty: 'Vider',
+ emptyTrash: 'Vider la corbeille',
+ restore: 'Restaurer',
+ restoringItem: 'Restauration de {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Cela supprime définitivement "{{title}}". Cette action est irréversible.',
+ deleteItemFallbackDescription: 'Cela supprime définitivement cet élément. Cette action est irréversible.',
+ deleteItemFallbackTitle: 'Supprimer l’élément ?',
+ deleteItemTitle: 'Supprimer "{{title}}" ?',
+ emptyTrashDescription: 'Cela supprime définitivement tout ce qui se trouve dans la corbeille. Cette action est irréversible.',
+ emptyTrashTitle: 'Vider la corbeille ?',
+ },
+ empty: {
+ description: 'Les éléments que vous supprimez apparaissent ici avant leur suppression définitive.',
+ title: 'La corbeille est vide',
+ },
+ errors: {
+ couldNotDeleteItem: 'Impossible de supprimer l’élément',
+ couldNotEmptyTrash: 'Impossible de vider la corbeille',
+ couldNotRestoreItem: 'Impossible de restaurer l’élément',
+ trashCouldNotLoad: 'Impossible de charger la corbeille',
+ trashMayBeOutOfDate: 'La corbeille peut être obsolète',
+ },
+ labels: {
+ deletedAge: 'Supprimé {{value}}',
+ itemCount_one: '{{count}} élément',
+ itemCount_other: '{{count}} éléments',
+ lastEmptied: 'Vidée pour la dernière fois {{value}}',
+ loadingTrash: 'Chargement de la corbeille',
+ originalLocation: 'Emplacement d’origine : {{location}}',
+ title: 'Corbeille',
+ trashActions: 'Actions de corbeille pour {{title}}',
+ },
+ kinds: {
+ deck: 'Paquet',
+ folder: 'Dossier',
+ note: 'Note',
+ workspace: 'Espace de travail',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Créer un espace de travail',
+ deleteWorkspace: 'Supprimer l’espace de travail',
+ editWorkspace: 'Modifier l’espace de travail',
+ newWorkspace: 'Nouvel espace de travail',
+ openWorkspace: 'Ouvrir {{title}}',
+ openingWorkspace: 'Ouverture de {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Contexte d’étude.',
+ editorVisual: 'Choisissez un repère visuel pour cet espace de travail.',
+ emptyList: 'Séparez les paquets, les notes et les files de révision par contexte d’étude.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Cela déplace "{{title}}" vers la corbeille. Vous pourrez le restaurer plus tard.',
+ deleteWorkspaceFallbackDescription: 'Cela déplace cet espace de travail vers la corbeille. Vous pourrez le restaurer plus tard.',
+ deleteWorkspaceFallbackTitle: 'Supprimer l’espace de travail ?',
+ deleteWorkspaceTitle: 'Supprimer "{{title}}" ?',
+ },
+ empty: {
+ startWithWorkspace: 'Commencez avec un espace de travail',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Impossible de créer l’espace de travail',
+ couldNotDeleteWorkspace: 'Impossible de supprimer l’espace de travail',
+ couldNotOpenWorkspace: 'Impossible d’ouvrir l’espace de travail',
+ couldNotSaveWorkspace: 'Impossible d’enregistrer l’espace de travail',
+ workspaceCouldNotLoad: 'Impossible de charger l’espace de travail',
+ workspacesCouldNotLoad: 'Impossible de charger les espaces de travail',
+ },
+ fields: {
+ descriptionLabel: 'Description de l’espace de travail',
+ descriptionPlaceholder: 'Qu’est-ce qui appartient à cet espace de travail ?',
+ namePlaceholder: 'Nom de l’espace de travail',
+ untitledWorkspace: 'Espace de travail sans titre',
+ },
+ labels: {
+ createWorkspaceTitle: 'Créer un espace de travail',
+ loadingWorkspaces: 'Chargement des espaces de travail',
+ workspace: 'Espace de travail',
+ workspaces: 'Espaces de travail',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/he.ts b/ui/src/core/i18n/resources/he.ts
new file mode 100644
index 0000000..e90b8f9
--- /dev/null
+++ b/ui/src/core/i18n/resources/he.ts
@@ -0,0 +1,636 @@
+export const he = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'נסו שוב. אם זה ממשיך לקרות, פתחו את Clear מחדש.',
+ title: 'לא ניתן להתחיל',
+ },
+ loadingTitle: 'מכינים את מרחב הלמידה שלכם',
+ },
+ common: {
+ actions: {
+ back: 'חזרה',
+ cancel: 'ביטול',
+ checkAgain: 'בדיקה חוזרת',
+ close: 'סגירה',
+ create: 'יצירה',
+ delete: 'מחיקה',
+ dismissError: 'הסתרת שגיאה',
+ dismissStatus: 'הסתרת סטטוס',
+ edit: 'עריכה',
+ itemActions: 'פעולות עבור {{title}}',
+ reset: 'איפוס',
+ review: 'סקירה',
+ save: 'שמירה',
+ saveChanges: 'שמירת שינויים',
+ tryAgain: 'נסו שוב',
+ },
+ labels: {
+ active: 'פעיל',
+ clear: 'Clear',
+ custom: 'מותאם אישית',
+ default: 'ברירת מחדל',
+ loadingEditor: 'העורך נטען',
+ name: 'שם',
+ completedTask: 'משימה שהושלמה',
+ description: 'תיאור',
+ incompleteTask: 'משימה שלא הושלמה',
+ percentageInput: 'אחוז {{label}}',
+ visual: 'ייצוג חזותי',
+ },
+ status: {
+ actionFailed: 'הפעולה נכשלה',
+ actionInProgress: 'הפעולה מתבצעת',
+ },
+ sort: {
+ ascending: 'עולה',
+ column: 'עמודה',
+ descending: 'יורד',
+ direction: 'כיוון',
+ sort: 'מיון',
+ },
+ search: {
+ label: 'חיפוש',
+ },
+ visualPicker: {
+ allLucideIcons: 'כל סמלי Lucide',
+ browseIconsFor: 'עיינו או חפשו סמלים עבור {{label}}.',
+ chooseIcon: 'בחירת סמל',
+ iconPicker: 'בורר סמלים עבור {{label}}',
+ iconSearch: 'חיפוש סמלים עבור {{label}}',
+ iconsCouldNotLoad: 'לא ניתן היה לטעון את הסמלים.',
+ loadingIcons: 'הסמלים נטענים',
+ loadingMoreIcons: 'סמלים נוספים נטענים',
+ moreIcons: 'סמלים נוספים',
+ noIconsMatch: 'אין סמלים שתואמים ל-"{{query}}".',
+ searchIconsPlaceholder: 'חיפוש סמלים…',
+ selectedIcon: '{{label}} נבחר',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'יצירה',
+ newDeck: 'חפיסה חדשה',
+ newFolder: 'תיקייה חדשה',
+ },
+ descriptions: {
+ defaultWorkspace: 'שמרו חפיסות, תיקיות והערות יחד.',
+ emptyWorkspace: 'צרו חפיסה, ואז הוסיפו הערות כדי לבנות תור סקירה.',
+ emptyFolder: 'צרו חפיסה, ואז הוסיפו הערות כדי לבנות תור סקירה.',
+ searchPlaceholder: 'חיפוש תיקיות, חפיסות והערות…',
+ },
+ empty: {
+ createFirstDeck: 'צרו את החפיסה הראשונה שלכם',
+ },
+ errors: {
+ couldNotDeleteDeck: 'לא ניתן היה למחוק את החפיסה',
+ couldNotDeleteFolder: 'לא ניתן היה למחוק את התיקייה',
+ couldNotDeleteWorkspace: 'לא ניתן היה למחוק את מרחב העבודה',
+ dashboardCouldNotOpen: 'לא ניתן היה לפתוח את לוח הבקרה',
+ decksCouldNotLoad: 'לא ניתן היה לטעון חפיסות',
+ decksMayBeOutOfDate: 'ייתכן שהחפיסות אינן עדכניות',
+ foldersCouldNotLoad: 'לא ניתן היה לטעון תיקיות',
+ foldersMayBeOutOfDate: 'ייתכן שהתיקיות אינן עדכניות',
+ workspaceCouldNotLoad: 'לא ניתן היה לטעון את מרחב העבודה',
+ },
+ labels: {
+ dashboard: 'לוח בקרה',
+ loadingDashboard: 'לוח הבקרה נטען',
+ newItem: 'פריט חדש',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'התאריך לא זמין',
+ },
+ age: {
+ dayAgo_one: 'לפני {{count}} יום',
+ dayAgo_two: 'לפני {{count}} ימים',
+ dayAgo_other: 'לפני {{count}} ימים',
+ hourAgo_one: 'לפני {{count}} שעה',
+ hourAgo_two: 'לפני {{count}} שעות',
+ hourAgo_other: 'לפני {{count}} שעות',
+ justNow: 'ממש עכשיו',
+ minuteAgo_one: 'לפני {{count}} דקה',
+ minuteAgo_two: 'לפני {{count}} דקות',
+ minuteAgo_other: 'לפני {{count}} דקות',
+ unavailable: 'התאריך לא זמין',
+ weekAgo_one: 'לפני {{count}} שבוע',
+ weekAgo_two: 'לפני {{count}} שבועות',
+ weekAgo_other: 'לפני {{count}} שבועות',
+ },
+ labels: {
+ deleted: 'נמחק {{value}}',
+ due: 'מועד: {{value}}',
+ reviewed: 'נסקר: {{value}}',
+ updated: 'עודכן {{value}}',
+ updatedUppercase: 'עודכן {{value}}',
+ },
+ relative: {
+ dayAgo_one: 'לפני {{count}} יום',
+ dayAgo_two: 'לפני {{count}} ימים',
+ dayAgo_other: 'לפני {{count}} ימים',
+ inAMoment: 'בעוד רגע',
+ inDay_one: 'בעוד {{count}} יום',
+ inDay_two: 'בעוד {{count}} ימים',
+ inDay_other: 'בעוד {{count}} ימים',
+ inMonth_one: 'בעוד {{count}} חודש',
+ inMonth_two: 'בעוד {{count}} חודשים',
+ inMonth_other: 'בעוד {{count}} חודשים',
+ inWeek_one: 'בעוד {{count}} שבוע',
+ inWeek_two: 'בעוד {{count}} שבועות',
+ inWeek_other: 'בעוד {{count}} שבועות',
+ justNow: 'ממש עכשיו',
+ monthAgo_one: 'לפני {{count}} חודש',
+ monthAgo_two: 'לפני {{count}} חודשים',
+ monthAgo_other: 'לפני {{count}} חודשים',
+ secondsAgoShort: 'לפני {{count}}ש',
+ minutesAgoShort: 'לפני {{count}}ד',
+ hoursAgoShort: 'לפני {{count}}ש׳',
+ today: 'היום',
+ tomorrow: 'מחר',
+ weekAgo_one: 'לפני {{count}} שבוע',
+ weekAgo_two: 'לפני {{count}} שבועות',
+ weekAgo_other: 'לפני {{count}} שבועות',
+ yesterday: 'אתמול',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'פעולות עבור {{title}}',
+ createDeck: 'יצירת חפיסה',
+ createNote: 'יצירת הערה',
+ deleteDeck: 'מחיקת חפיסה',
+ editDeck: 'עריכת חפיסה',
+ newNote: 'הערה חדשה',
+ openDeck: 'פתיחת חפיסת {{title}}',
+ saveDeck: 'לא ניתן היה לשמור את החפיסה',
+ studyNow: 'ללמוד עכשיו',
+ },
+ descriptions: {
+ emptyDeck: 'הוסיפו הערה כדי שלחפיסה הזו יהיה חומר לסקירה.',
+ editorDefault: 'חפיסת לימוד ממוקדת.',
+ editorVisual: 'בחרו סמל כיסוי לחפיסה הזו.',
+ notesSearchPlaceholder: 'חיפוש הערות…',
+ },
+ dialogs: {
+ deleteDeckDescription: '"{{title}}" תועבר לאשפה. ניתן לשחזר אותה מאוחר יותר.',
+ deleteDeckFallbackDescription: 'החפיסה הזו תועבר לאשפה. ניתן לשחזר אותה מאוחר יותר.',
+ deleteDeckFallbackTitle: 'למחוק את החפיסה?',
+ deleteDeckTitle: 'למחוק את "{{title}}"?',
+ deleteNoteDescription: '"{{title}}" תועבר לאשפה. ניתן לשחזר אותה מאוחר יותר.',
+ deleteNoteFallbackTitle: 'למחוק את ההערה?',
+ deleteNoteTitle: 'למחוק את "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'אין הערות תואמות',
+ noMatchingNotesDescription: 'לא נמצאו הערות שתואמות ל-"{{query}}".',
+ thisDeckIsEmpty: 'החפיסה הזו ריקה',
+ },
+ errors: {
+ couldNotCreateDeck: 'לא ניתן היה ליצור את החפיסה',
+ couldNotDeleteDeck: 'לא ניתן היה למחוק את החפיסה',
+ couldNotDeleteNote: 'לא ניתן היה למחוק את ההערה',
+ couldNotLoadFolderPath: 'לא ניתן היה לטעון את נתיב התיקייה',
+ couldNotSaveDeck: 'לא ניתן היה לשמור את החפיסה',
+ deckCouldNotLoad: 'לא ניתן היה לטעון את החפיסה',
+ notesCouldNotLoad: 'לא ניתן היה לטעון הערות',
+ notesMayBeOutOfDate: 'ייתכן שההערות אינן עדכניות',
+ },
+ fields: {
+ descriptionLabel: 'תיאור החפיסה',
+ descriptionPlaceholder: 'מה החפיסה הזו תעזור לכם לסקור?',
+ namePlaceholder: 'שם החפיסה',
+ untitledDeck: 'חפיסה ללא שם',
+ untitledDeckLower: 'חפיסה ללא שם',
+ },
+ labels: {
+ createDeckTitle: 'יצירת חפיסה',
+ deck: 'חפיסה',
+ deckNotesSearch: 'חיפוש הערות בחפיסה',
+ deckOverview: 'סקירת חפיסה',
+ decks: 'חפיסות',
+ due: 'מועד',
+ dueToday: 'מועד היום',
+ loadingDeck: 'החפיסה נטענת',
+ mastery: 'שליטה',
+ notes: 'הערות',
+ },
+ sort: {
+ ariaLabel: 'מיון חפיסות',
+ dueToday: 'מועד היום',
+ title: 'כותרת',
+ updated: 'עודכן',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'הנתונים השתנו. רעננו ונסו שוב.',
+ forbidden: 'אין לכם הרשאה לבצע זאת.',
+ notFound: 'לא הצלחנו למצוא את הפריט הזה.',
+ offline: 'לא ניתן להגיע לשירות.',
+ timeout: 'זה נמשך יותר מדי זמן. נסו שוב.',
+ unauthorized: 'התחברו כדי להמשיך.',
+ unavailable: 'השירות אינו זמין זמנית.',
+ },
+ fallback: {
+ unexpected: 'שגיאה בלתי צפויה',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'יצירת תיקייה',
+ deleteFolder: 'מחיקת תיקייה',
+ editFolder: 'עריכת תיקייה',
+ },
+ descriptions: {
+ editorDefault: 'תיקייה לחפיסות קשורות.',
+ },
+ dialogs: {
+ deleteFolderDescription: '"{{name}}" תועבר לאשפה. ניתן לשחזר אותה מאוחר יותר.',
+ deleteFolderFallbackDescription: 'התיקייה הזו תועבר לאשפה. ניתן לשחזר אותה מאוחר יותר.',
+ deleteFolderFallbackTitle: 'למחוק את התיקייה?',
+ deleteFolderTitle: 'למחוק את "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'אין תוצאות בתיקייה הזו',
+ noMatchesInFolderDescription: 'לא נמצאו תיקיות, חפיסות או הערות שתואמות ל-"{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'לא ניתן היה ליצור את התיקייה',
+ couldNotDeleteFolder: 'לא ניתן היה למחוק את התיקייה',
+ couldNotLoadFolderPath: 'לא ניתן היה לטעון את נתיב התיקייה',
+ couldNotSaveFolder: 'לא ניתן היה לשמור את התיקייה',
+ folderCouldNotLoad: 'לא ניתן היה לטעון את התיקייה',
+ },
+ fields: {
+ descriptionLabel: 'תיאור התיקייה',
+ descriptionPlaceholder: 'מה שייך לתיקייה הזו?',
+ namePlaceholder: 'שם התיקייה',
+ untitledFolder: 'תיקייה ללא שם',
+ },
+ labels: {
+ createFolderTitle: 'יצירת תיקייה',
+ folder: 'תיקייה',
+ folders: 'תיקיות',
+ loadingFolder: 'התיקייה נטענת',
+ name: 'שם',
+ updated: 'עודכן',
+ },
+ sort: {
+ ariaLabel: 'מיון תיקיות',
+ name: 'שם',
+ updated: 'עודכן',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'אם נתונים מקומיים ומסונכרנים יהיו שונים, הפריט יופיע כאן.',
+ heading: 'סטטוס סנכרון',
+ title: 'התנגשויות',
+ noConflicts: 'לא נמצאו התנגשויות',
+ },
+ labels: {
+ menu: 'תפריט',
+ },
+ sections: {
+ settings: {
+ description: 'התאימו את הסביבה וההעדפות שלכם',
+ title: 'הגדרות',
+ },
+ trash: {
+ description: 'שחזרו או מחקו לצמיתות פריטים שהוסרו',
+ title: 'אשפה',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'סגירת העורך',
+ openActions: 'פתיחת פעולות',
+ openWorkspaces: 'פתיחת מרחבי עבודה',
+ },
+ items: {
+ home: 'בית',
+ menu: 'תפריט',
+ primary: 'ראשי',
+ settings: 'הגדרות',
+ spaces: 'מרחבים',
+ trash: 'אשפה',
+ workspaces: 'מרחבי עבודה',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'הוספת Cloze',
+ deleteNote: 'מחיקת הערה',
+ editNote: 'עריכת הערה',
+ hideDerivedCardsNote: 'הסתרת הערת כרטיסים נגזרים',
+ openNote: 'פתיחת {{title}}',
+ saveNote: 'שמירת הערה',
+ showDerivedCardsNote: 'הצגת הערת כרטיסים נגזרים',
+ },
+ descriptions: {
+ clozeFormat: 'כל חלק מוסתר יהפוך לכרטיס סקירה לאחר השמירה.',
+ clozeFormatPrefix: 'עטפו טקסט מוסתר עם',
+ derivedCardsHelper: 'הערות הן מקור האמת לכרטיסים נגזרים.',
+ },
+ dialogs: {
+ deleteNoteDescription: '"{{title}}" תועבר לאשפה. ניתן לשחזר אותה מאוחר יותר.',
+ deleteNoteFallbackDescription: 'ההערה הזו תועבר לאשפה. ניתן לשחזר אותה מאוחר יותר.',
+ deleteNoteFallbackTitle: 'למחוק את ההערה?',
+ deleteNoteTitle: 'למחוק את "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'לא ניתן היה ליצור את ההערה',
+ couldNotDeleteNote: 'לא ניתן היה למחוק את ההערה',
+ couldNotSaveNote: 'לא ניתן היה לשמור את ההערה',
+ noteCouldNotLoad: 'לא ניתן היה לטעון את ההערה',
+ },
+ fields: {
+ back: 'גב',
+ backPlaceholder: 'הזינו צד גב',
+ bodyPlaceholder: 'כתבו את גוף ההערה עם מחיקות Cloze…',
+ front: 'חזית',
+ frontPlaceholder: 'הזינו צד חזית',
+ noteBody: 'גוף ההערה',
+ title: 'כותרת',
+ titlePlaceholder: 'הוסיפו כותרת להערה',
+ untitledCloze: 'Cloze ללא שם',
+ untitledNote: 'הערה ללא שם',
+ },
+ labels: {
+ backUppercase: 'גב',
+ basic: 'בסיסי',
+ basicLower: 'בסיסי',
+ basicUppercase: 'בסיסי',
+ cloze: 'Cloze',
+ clozeLower: 'Cloze',
+ clozeFormat: 'תבנית Cloze',
+ clozeUppercase: 'Cloze',
+ deck: 'חפיסה',
+ derivedCards: 'כרטיסים נגזרים',
+ due: 'מועד',
+ frontUppercase: 'חזית',
+ inProgress: 'בתהליך',
+ inProgressUppercase: 'בתהליך',
+ loadingNote: 'ההערה נטענת',
+ loadingNoteEditor: 'עורך ההערות נטען',
+ markdownFormatting: 'עיצוב Markdown',
+ mastered: 'נשלט',
+ masteredUppercase: 'נשלט',
+ newNote: 'הערה חדשה',
+ noteBody: 'גוף ההערה',
+ noteContent: 'תוכן ההערה',
+ noteDetails: 'פרטי ההערה',
+ noteMetadata: 'מטא־נתוני ההערה',
+ noteType: 'סוג הערה',
+ notes: 'הערות',
+ reviewed: 'נסקר',
+ studyProgress: 'התקדמות לימוד',
+ studyProgressUppercase: 'התקדמות לימוד',
+ titleUppercase: 'כותרת',
+ updated: 'עודכן',
+ },
+ sort: {
+ ariaLabel: 'מיון הערות',
+ title: 'כותרת',
+ updated: 'עודכן',
+ },
+ toolbar: {
+ bold: 'מודגש',
+ italic: 'נטוי',
+ link: 'קישור',
+ list: 'רשימה',
+ },
+ },
+ review: {
+ actions: {
+ again: 'שוב',
+ backToDeck: 'חזרה לחפיסה',
+ continueReview: 'המשך סקירה',
+ easy: 'קל',
+ good: 'טוב',
+ hard: 'קשה',
+ newNote: 'הערה חדשה',
+ showAnswer: 'הצגת תשובה',
+ },
+ errors: {
+ couldNotGradeCard: 'לא ניתן היה לדרג את הכרטיס',
+ reviewCouldNotLoad: 'לא ניתן היה לטעון את הסקירה',
+ reviewCouldNotStart: 'לא ניתן היה להתחיל את הסקירה',
+ summaryCouldNotLoad: 'לא ניתן היה לטעון את סיכום הסקירה',
+ summaryNotAvailable: 'סיכום הסקירה אינו זמין',
+ summaryNotComplete: 'הסקירה הזו עדיין לא הושלמה.',
+ },
+ labels: {
+ cardsReviewed: 'כרטיסים שנסקרו',
+ deck: 'חפיסה',
+ duration: 'משך',
+ loadingReview: 'הסקירה נטענת',
+ loadingSummary: 'הסיכום נטען',
+ progress: 'התקדמות הסקירה',
+ review: 'סקירה',
+ reviewComplete: 'הסקירה הושלמה',
+ reviewed_one: '{{count}} נסקר',
+ reviewed_two: '{{count}} נסקרו',
+ reviewed_other: '{{count}} נסקרו',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}}ש {{minutes}}ד',
+ durationMinutes: '{{minutes}}ד',
+ durationSeconds: '{{seconds}}שנ',
+ saved: 'ההתקדמות שלכם נשמרה בחפיסה הזו.',
+ },
+ unavailable: {
+ description: 'הוסיפו הערה כדי שהחפיסה הזו תוכל להיכנס לתור הסקירה.',
+ title: 'אין כרטיסים לסקירה',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'ניקוי חיפוש',
+ },
+ empty: {
+ noMatchesInWorkspace: 'אין תוצאות במרחב העבודה הזה',
+ noMatchesInWorkspaceDescription: 'לא נמצאו תיקיות, חפיסות או הערות שתואמות ל-"{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'לא ניתן היה להשלים את החיפוש',
+ },
+ labels: {
+ results: 'תוצאות חיפוש',
+ resultsFor: 'תוצאות עבור "{{query}}"',
+ searchingContent: 'מתבצע חיפוש בתוכן',
+ },
+ resultGroups: {
+ deck: 'חפיסות',
+ folder: 'תיקיות',
+ note: 'הערות',
+ },
+ resultKinds: {
+ deck: 'חפיסה',
+ folder: 'תיקייה',
+ note: 'הערה',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'איפוס כל ההגדרות',
+ resetSettings: 'איפוס הגדרות',
+ resetToDefaults: 'איפוס לברירות המחדל',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'הדביקו JSON תקין עם 21 ערכים מספריים.',
+ fsrsErrorInvalidParams_one: 'הזינו מערך JSON עם בדיוק {{count}} מספר סופי.',
+ fsrsErrorInvalidParams_two: 'הזינו מערך JSON עם בדיוק {{count}} מספרים סופיים.',
+ fsrsErrorInvalidParams_other: 'הזינו מערך JSON עם בדיוק {{count}} מספרים סופיים.',
+ fsrsHelper: 'זו עקיפה למומחים. הערכים חייבים להישאר לפי הסדר.',
+ fsrsJsonLabel: 'JSON של פרמטרי FSRS',
+ fsrsTitle: 'עריכת פרמטרי FSRS',
+ fsrsDescription: 'הדביקו מערך JSON עם 21 מספרים כדי לעקוף את משקלי המתזמן.',
+ resetDescription: 'פעולה זו משחזרת אזור זמן, מגבלות לימוד והגדרות FSRS.',
+ resetDescriptionWithLanguage: 'פעולה זו משחזרת שפה, אזור זמן, מגבלות לימוד והגדרות FSRS.',
+ resetTitle: 'לאפס את כל ההגדרות?',
+ timezoneDescription: 'חפשו עיר או מזהה אזור זמן.',
+ timezoneSearchLabel: 'חיפוש אזורי זמן',
+ timezoneSearchPlaceholder: 'חיפוש אזורי זמן…',
+ timezoneTitle: 'בחירת אזור זמן',
+ },
+ errors: {
+ couldNotResetSettings: 'לא ניתן היה לאפס את ההגדרות',
+ couldNotSaveSettings: 'לא ניתן היה לשמור את ההגדרות',
+ settingsCouldNotLoad: 'לא ניתן היה לטעון את ההגדרות',
+ settingsUnavailable: 'ההגדרות אינן זמינות.',
+ },
+ labels: {
+ appearance: 'מראה',
+ automatic: 'אוטומטי',
+ fsrsParameters: 'פרמטרי FSRS',
+ general: 'כללי',
+ language: 'שפה',
+ loadingSettings: 'ההגדרות נטענות',
+ masteryHorizon: 'אופק שליטה',
+ newCardOrder: 'סדר כרטיסים חדשים',
+ newCardsPerDay: 'כרטיסים חדשים ביום',
+ reviewCardsPerDay: 'כרטיסי סקירה ביום',
+ savingSettings: 'ההגדרות נשמרות',
+ schedule: 'לוח זמנים',
+ searchNoTimezones: 'אין אזורי זמן תואמים.',
+ settings: 'הגדרות',
+ settingsReset: 'איפוס הגדרות',
+ study: 'לימוד',
+ targetRecallProbability: 'הסתברות זכירה יעד',
+ theme: 'ערכת נושא',
+ timezone: 'אזור זמן',
+ },
+ options: {
+ languageEnUs: 'אנגלית (ארה״ב)',
+ newCardsAfterReviews: 'אחרי סקירות',
+ newCardsBeforeReviews: 'לפני סקירות',
+ newCardsMixed: 'מעורב',
+ themeDark: 'כהה',
+ themeLight: 'בהיר',
+ themeSystem: 'מערכת',
+ timezoneSystem: 'שימוש באזור הזמן של המערכת',
+ },
+ rows: {
+ fsrsDescription: 'משקלי מודל למומחים',
+ languageDescription: 'שפת הממשק',
+ masteryHorizonDescription: 'מספר הימים שכרטיס צריך להישאר ניתן לזכירה ברמת הסתברות היעד או מעליה כדי להיחשב נשלט',
+ newCardOrderDescription: 'סדר הכרטיסים החדשים ביחס לסקירות',
+ newCardsPerDayDescription: 'מספר מרבי של כרטיסים חדשים ביום',
+ reviewCardsPerDayDescription: 'מספר מרבי של כרטיסי סקירה ביום',
+ targetRecallProbabilityDescription: 'הסתברות הזכירה המזערית בסקירה המתוזמנת הבאה',
+ timezoneDescription: 'השתמשו באזור זמן אוטומטי או בחרו עיר.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'מחיקה לצמיתות',
+ empty: 'ריקון',
+ emptyTrash: 'ריקון האשפה',
+ restore: 'שחזור',
+ restoringItem: '{{title}} משוחזר',
+ },
+ dialogs: {
+ deleteItemDescription: '"{{title}}" יימחק לצמיתות. לא ניתן לבטל פעולה זו.',
+ deleteItemFallbackDescription: 'הפריט הזה יימחק לצמיתות. לא ניתן לבטל פעולה זו.',
+ deleteItemFallbackTitle: 'למחוק את הפריט?',
+ deleteItemTitle: 'למחוק את "{{title}}"?',
+ emptyTrashDescription: 'כל מה שבאשפה יימחק לצמיתות. לא ניתן לבטל פעולה זו.',
+ emptyTrashTitle: 'לרוקן את האשפה?',
+ },
+ empty: {
+ description: 'פריטים שתמחקו יופיעו כאן לפני הסרה לצמיתות.',
+ title: 'האשפה ריקה',
+ },
+ errors: {
+ couldNotDeleteItem: 'לא ניתן היה למחוק את הפריט',
+ couldNotEmptyTrash: 'לא ניתן היה לרוקן את האשפה',
+ couldNotRestoreItem: 'לא ניתן היה לשחזר את הפריט',
+ trashCouldNotLoad: 'לא ניתן היה לטעון את האשפה',
+ trashMayBeOutOfDate: 'ייתכן שהאשפה אינה עדכנית',
+ },
+ labels: {
+ deletedAge: 'נמחק {{value}}',
+ itemCount_one: '{{count}} פריט',
+ itemCount_two: '{{count}} פריטים',
+ itemCount_other: '{{count}} פריטים',
+ lastEmptied: 'רוקנה לאחרונה {{value}}',
+ loadingTrash: 'האשפה נטענת',
+ originalLocation: 'מיקום מקורי: {{location}}',
+ title: 'אשפה',
+ trashActions: 'פעולות אשפה עבור {{title}}',
+ },
+ kinds: {
+ deck: 'חפיסה',
+ folder: 'תיקייה',
+ note: 'הערה',
+ workspace: 'מרחב עבודה',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'יצירת מרחב עבודה',
+ deleteWorkspace: 'מחיקת מרחב עבודה',
+ editWorkspace: 'עריכת מרחב עבודה',
+ newWorkspace: 'מרחב עבודה חדש',
+ openWorkspace: 'פתיחת {{title}}',
+ openingWorkspace: '{{title}} נפתח',
+ },
+ descriptions: {
+ editorDefault: 'הקשר לימוד.',
+ editorVisual: 'בחרו עוגן חזותי למרחב העבודה הזה.',
+ emptyList: 'הפרידו חפיסות, הערות ותורי סקירה לפי הקשר לימוד.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: '"{{title}}" יועבר לאשפה. ניתן לשחזר אותו מאוחר יותר.',
+ deleteWorkspaceFallbackDescription: 'מרחב העבודה הזה יועבר לאשפה. ניתן לשחזר אותו מאוחר יותר.',
+ deleteWorkspaceFallbackTitle: 'למחוק את מרחב העבודה?',
+ deleteWorkspaceTitle: 'למחוק את "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'התחילו עם מרחב עבודה',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'לא ניתן היה ליצור את מרחב העבודה',
+ couldNotDeleteWorkspace: 'לא ניתן היה למחוק את מרחב העבודה',
+ couldNotOpenWorkspace: 'לא ניתן היה לפתוח את מרחב העבודה',
+ couldNotSaveWorkspace: 'לא ניתן היה לשמור את מרחב העבודה',
+ workspaceCouldNotLoad: 'לא ניתן היה לטעון את מרחב העבודה',
+ workspacesCouldNotLoad: 'לא ניתן היה לטעון מרחבי עבודה',
+ },
+ fields: {
+ descriptionLabel: 'תיאור מרחב העבודה',
+ descriptionPlaceholder: 'מה שייך למרחב העבודה הזה?',
+ namePlaceholder: 'שם מרחב העבודה',
+ untitledWorkspace: 'מרחב עבודה ללא שם',
+ },
+ labels: {
+ createWorkspaceTitle: 'יצירת מרחב עבודה',
+ loadingWorkspaces: 'מרחבי העבודה נטענים',
+ workspace: 'מרחב עבודה',
+ workspaces: 'מרחבי עבודה',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/hr.ts b/ui/src/core/i18n/resources/hr.ts
new file mode 100644
index 0000000..debad50
--- /dev/null
+++ b/ui/src/core/i18n/resources/hr.ts
@@ -0,0 +1,636 @@
+export const hr = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Pokušajte ponovno. Ako se ovo nastavi događati, ponovno otvorite Clear.',
+ title: 'Pokretanje nije uspjelo',
+ },
+ loadingTitle: 'Priprema se vaš prostor za učenje',
+ },
+ common: {
+ actions: {
+ back: 'Natrag',
+ cancel: 'Odustani',
+ checkAgain: 'Provjeri ponovno',
+ close: 'Zatvori',
+ create: 'Stvori',
+ delete: 'Izbriši',
+ dismissError: 'Zatvori pogrešku',
+ dismissStatus: 'Zatvori status',
+ edit: 'Uredi',
+ itemActions: 'Radnje za {{title}}',
+ reset: 'Vrati na početno',
+ review: 'Ponavljanje',
+ save: 'Spremi',
+ saveChanges: 'Spremi promjene',
+ tryAgain: 'Pokušaj ponovno',
+ },
+ labels: {
+ active: 'Aktivno',
+ clear: 'Clear',
+ custom: 'Prilagođeno',
+ default: 'Zadano',
+ loadingEditor: 'Učitavanje uređivača',
+ name: 'Naziv',
+ completedTask: 'Dovršen zadatak',
+ description: 'Opis',
+ incompleteTask: 'Nedovršen zadatak',
+ percentageInput: 'Postotak za {{label}}',
+ visual: 'Vizual',
+ },
+ status: {
+ actionFailed: 'Radnja nije uspjela',
+ actionInProgress: 'Radnja je u tijeku',
+ },
+ sort: {
+ ascending: 'Uzlazno',
+ column: 'Stupac',
+ descending: 'Silazno',
+ direction: 'Smjer',
+ sort: 'Sortiraj',
+ },
+ search: {
+ label: 'Pretraživanje',
+ },
+ visualPicker: {
+ allLucideIcons: 'Sve Lucide ikone',
+ browseIconsFor: 'Pregledajte ili pretražite ikone za {{label}}.',
+ chooseIcon: 'Odaberi ikonu',
+ iconPicker: 'Odabir ikone za {{label}}',
+ iconSearch: 'Pretraživanje ikona za {{label}}',
+ iconsCouldNotLoad: 'Ikone se nisu mogle učitati.',
+ loadingIcons: 'Učitavanje ikona',
+ loadingMoreIcons: 'Učitavanje dodatnih ikona',
+ moreIcons: 'Više ikona',
+ noIconsMatch: 'Nijedna ikona ne odgovara upitu "{{query}}".',
+ searchIconsPlaceholder: 'Pretraži ikone…',
+ selectedIcon: 'Odabrano: {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Stvori',
+ newDeck: 'Novi špil',
+ newFolder: 'Nova mapa',
+ },
+ descriptions: {
+ defaultWorkspace: 'Držite špilove, mape i bilješke zajedno.',
+ emptyWorkspace: 'Stvorite špil, zatim dodajte bilješke za izgradnju reda za ponavljanje.',
+ emptyFolder: 'Stvorite špil, zatim dodajte bilješke za izgradnju reda za ponavljanje.',
+ searchPlaceholder: 'Pretražite mape, špilove i bilješke…',
+ },
+ empty: {
+ createFirstDeck: 'Stvorite svoj prvi špil',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Špil se nije mogao izbrisati',
+ couldNotDeleteFolder: 'Mapa se nije mogla izbrisati',
+ couldNotDeleteWorkspace: 'Radni prostor se nije mogao izbrisati',
+ dashboardCouldNotOpen: 'Nadzorna ploča se nije mogla otvoriti',
+ decksCouldNotLoad: 'Špilovi se nisu mogli učitati',
+ decksMayBeOutOfDate: 'Špilovi možda nisu ažurni',
+ foldersCouldNotLoad: 'Mape se nisu mogle učitati',
+ foldersMayBeOutOfDate: 'Mape možda nisu ažurne',
+ workspaceCouldNotLoad: 'Radni prostor se nije mogao učitati',
+ },
+ labels: {
+ dashboard: 'Nadzorna ploča',
+ loadingDashboard: 'Učitavanje nadzorne ploče',
+ newItem: 'Nova stavka',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Datum nije dostupan',
+ },
+ age: {
+ dayAgo_one: 'prije {{count}} dan',
+ dayAgo_few: 'prije {{count}} dana',
+ dayAgo_other: 'prije {{count}} dana',
+ hourAgo_one: 'prije {{count}} sat',
+ hourAgo_few: 'prije {{count}} sata',
+ hourAgo_other: 'prije {{count}} sati',
+ justNow: 'upravo sada',
+ minuteAgo_one: 'prije {{count}} minutu',
+ minuteAgo_few: 'prije {{count}} minute',
+ minuteAgo_other: 'prije {{count}} minuta',
+ unavailable: 'datum nije dostupan',
+ weekAgo_one: 'prije {{count}} tjedan',
+ weekAgo_few: 'prije {{count}} tjedna',
+ weekAgo_other: 'prije {{count}} tjedana',
+ },
+ labels: {
+ deleted: 'Izbrisano {{value}}',
+ due: 'Rok: {{value}}',
+ reviewed: 'Ponovljeno: {{value}}',
+ updated: 'Ažurirano {{value}}',
+ updatedUppercase: 'AŽURIRANO {{value}}',
+ },
+ relative: {
+ dayAgo_one: 'prije {{count}} dan',
+ dayAgo_few: 'prije {{count}} dana',
+ dayAgo_other: 'prije {{count}} dana',
+ inAMoment: 'Za trenutak',
+ inDay_one: 'Za {{count}} dan',
+ inDay_few: 'Za {{count}} dana',
+ inDay_other: 'Za {{count}} dana',
+ inMonth_one: 'Za {{count}} mjesec',
+ inMonth_few: 'Za {{count}} mjeseca',
+ inMonth_other: 'Za {{count}} mjeseci',
+ inWeek_one: 'Za {{count}} tjedan',
+ inWeek_few: 'Za {{count}} tjedna',
+ inWeek_other: 'Za {{count}} tjedana',
+ justNow: 'Upravo sada',
+ monthAgo_one: 'prije {{count}} mjesec',
+ monthAgo_few: 'prije {{count}} mjeseca',
+ monthAgo_other: 'prije {{count}} mjeseci',
+ secondsAgoShort: 'prije {{count}} s',
+ minutesAgoShort: 'prije {{count}} min',
+ hoursAgoShort: 'prije {{count}} h',
+ today: 'Danas',
+ tomorrow: 'Sutra',
+ weekAgo_one: 'prije {{count}} tjedan',
+ weekAgo_few: 'prije {{count}} tjedna',
+ weekAgo_other: 'prije {{count}} tjedana',
+ yesterday: 'Jučer',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Radnje za {{title}}',
+ createDeck: 'Stvori špil',
+ createNote: 'Stvori bilješku',
+ deleteDeck: 'Izbriši špil',
+ editDeck: 'Uredi špil',
+ newNote: 'Nova bilješka',
+ openDeck: 'Otvori špil {{title}}',
+ saveDeck: 'Špil se nije mogao spremiti',
+ studyNow: 'Uči sada',
+ },
+ descriptions: {
+ emptyDeck: 'Dodajte bilješku kako bi ovaj špil imao materijal za ponavljanje.',
+ editorDefault: 'Fokusirani špil za učenje.',
+ editorVisual: 'Odaberite simbol naslovnice za ovaj špil.',
+ notesSearchPlaceholder: 'Pretraži bilješke…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Ovo premješta "{{title}}" u Smeće. Možete ga vratiti kasnije.',
+ deleteDeckFallbackDescription: 'Ovo premješta ovaj špil u Smeće. Možete ga vratiti kasnije.',
+ deleteDeckFallbackTitle: 'Izbrisati špil?',
+ deleteDeckTitle: 'Izbrisati "{{title}}"?',
+ deleteNoteDescription: 'Ovo premješta "{{title}}" u Smeće. Možete je vratiti kasnije.',
+ deleteNoteFallbackTitle: 'Izbrisati bilješku?',
+ deleteNoteTitle: 'Izbrisati "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Nema odgovarajućih bilješki',
+ noMatchingNotesDescription: 'Nijedna bilješka ne odgovara upitu "{{query}}".',
+ thisDeckIsEmpty: 'Ovaj špil je prazan',
+ },
+ errors: {
+ couldNotCreateDeck: 'Špil se nije mogao stvoriti',
+ couldNotDeleteDeck: 'Špil se nije mogao izbrisati',
+ couldNotDeleteNote: 'Bilješka se nije mogla izbrisati',
+ couldNotLoadFolderPath: 'Putanja mape se nije mogla učitati',
+ couldNotSaveDeck: 'Špil se nije mogao spremiti',
+ deckCouldNotLoad: 'Špil se nije mogao učitati',
+ notesCouldNotLoad: 'Bilješke se nisu mogle učitati',
+ notesMayBeOutOfDate: 'Bilješke možda nisu ažurne',
+ },
+ fields: {
+ descriptionLabel: 'Opis špila',
+ descriptionPlaceholder: 'Što će vam ovaj špil pomoći ponavljati?',
+ namePlaceholder: 'Naziv špila',
+ untitledDeck: 'Špil bez naslova',
+ untitledDeckLower: 'špil bez naslova',
+ },
+ labels: {
+ createDeckTitle: 'Stvori špil',
+ deck: 'Špil',
+ deckNotesSearch: 'Pretraživanje bilješki u špilu',
+ deckOverview: 'Pregled špila',
+ decks: 'Špilovi',
+ due: 'Rok',
+ dueToday: 'Rok danas',
+ loadingDeck: 'Učitavanje špila',
+ mastery: 'Ovladanost',
+ notes: 'Bilješke',
+ },
+ sort: {
+ ariaLabel: 'Sortiraj špilove',
+ dueToday: 'Rok danas',
+ title: 'Naslov',
+ updated: 'Ažurirano',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Podaci su se promijenili. Osvježite i pokušajte ponovno.',
+ forbidden: 'Nemate dopuštenje za ovu radnju.',
+ notFound: 'Nismo mogli pronaći ovu stavku.',
+ offline: 'Usluga nije dostupna.',
+ timeout: 'Ovo je trajalo predugo. Pokušajte ponovno.',
+ unauthorized: 'Prijavite se za nastavak.',
+ unavailable: 'Usluga je privremeno nedostupna.',
+ },
+ fallback: {
+ unexpected: 'Neočekivana pogreška',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Stvori mapu',
+ deleteFolder: 'Izbriši mapu',
+ editFolder: 'Uredi mapu',
+ },
+ descriptions: {
+ editorDefault: 'Mapa za povezane špilove.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Ovo premješta "{{name}}" u Smeće. Možete je vratiti kasnije.',
+ deleteFolderFallbackDescription: 'Ovo premješta ovu mapu u Smeće. Možete je vratiti kasnije.',
+ deleteFolderFallbackTitle: 'Izbrisati mapu?',
+ deleteFolderTitle: 'Izbrisati "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'Nema rezultata u ovoj mapi',
+ noMatchesInFolderDescription: 'Nijedna mapa, špil ili bilješka ne odgovara upitu "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Mapa se nije mogla stvoriti',
+ couldNotDeleteFolder: 'Mapa se nije mogla izbrisati',
+ couldNotLoadFolderPath: 'Putanja mape se nije mogla učitati',
+ couldNotSaveFolder: 'Mapa se nije mogla spremiti',
+ folderCouldNotLoad: 'Mapa se nije mogla učitati',
+ },
+ fields: {
+ descriptionLabel: 'Opis mape',
+ descriptionPlaceholder: 'Što pripada u ovu mapu?',
+ namePlaceholder: 'Naziv mape',
+ untitledFolder: 'Mapa bez naslova',
+ },
+ labels: {
+ createFolderTitle: 'Stvori mapu',
+ folder: 'Mapa',
+ folders: 'Mape',
+ loadingFolder: 'Učitavanje mape',
+ name: 'Naziv',
+ updated: 'Ažurirano',
+ },
+ sort: {
+ ariaLabel: 'Sortiraj mape',
+ name: 'Naziv',
+ updated: 'Ažurirano',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Ako se lokalni i sinkronizirani podaci ikada razlikuju, stavka će se pojaviti ovdje.',
+ heading: 'Status sinkronizacije',
+ title: 'Sukobi',
+ noConflicts: 'Nema pronađenih sukoba',
+ },
+ labels: {
+ menu: 'Izbornik',
+ },
+ sections: {
+ settings: {
+ description: 'Prilagodite svoje okruženje i postavke',
+ title: 'Postavke',
+ },
+ trash: {
+ description: 'Vratite ili trajno izbrišite uklonjene stavke',
+ title: 'Smeće',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Zatvori uređivač',
+ openActions: 'Otvori radnje',
+ openWorkspaces: 'Otvori radne prostore',
+ },
+ items: {
+ home: 'Početna',
+ menu: 'Izbornik',
+ primary: 'Primarno',
+ settings: 'Postavke',
+ spaces: 'Prostori',
+ trash: 'Smeće',
+ workspaces: 'Radni prostori',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Dodaj cloze',
+ deleteNote: 'Izbriši bilješku',
+ editNote: 'Uredi bilješku',
+ hideDerivedCardsNote: 'Sakrij bilješku o izvedenim karticama',
+ openNote: 'Otvori {{title}}',
+ saveNote: 'Spremi bilješku',
+ showDerivedCardsNote: 'Prikaži bilješku o izvedenim karticama',
+ },
+ descriptions: {
+ clozeFormat: 'Svaki skriveni dio postaje kartica za ponavljanje kada spremite.',
+ clozeFormatPrefix: 'Označite skriveni tekst pomoću',
+ derivedCardsHelper: 'Bilješke su izvor istine za izvedene kartice.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Ovo premješta "{{title}}" u Smeće. Možete je vratiti kasnije.',
+ deleteNoteFallbackDescription: 'Ovo premješta ovu bilješku u Smeće. Možete je vratiti kasnije.',
+ deleteNoteFallbackTitle: 'Izbrisati bilješku?',
+ deleteNoteTitle: 'Izbrisati "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Bilješka se nije mogla stvoriti',
+ couldNotDeleteNote: 'Bilješka se nije mogla izbrisati',
+ couldNotSaveNote: 'Bilješka se nije mogla spremiti',
+ noteCouldNotLoad: 'Bilješka se nije mogla učitati',
+ },
+ fields: {
+ back: 'Poleđina',
+ backPlaceholder: 'Unesite poleđinu',
+ bodyPlaceholder: 'Napišite sadržaj bilješke s cloze izostavljanjima…',
+ front: 'Prednja strana',
+ frontPlaceholder: 'Unesite prednju stranu',
+ noteBody: 'Sadržaj bilješke',
+ title: 'Naslov',
+ titlePlaceholder: 'Dodajte naslov bilješke',
+ untitledCloze: 'Cloze bez naslova',
+ untitledNote: 'Bilješka bez naslova',
+ },
+ labels: {
+ backUppercase: 'POLEĐINA',
+ basic: 'Osnovna',
+ basicLower: 'osnovna',
+ basicUppercase: 'OSNOVNA',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Cloze format',
+ clozeUppercase: 'CLOZE',
+ deck: 'Špil',
+ derivedCards: 'IZVEDENE KARTICE',
+ due: 'Rok',
+ frontUppercase: 'PREDNJA STRANA',
+ inProgress: 'U tijeku',
+ inProgressUppercase: 'U TIJEKU',
+ loadingNote: 'Učitavanje bilješke',
+ loadingNoteEditor: 'Učitavanje uređivača bilješki',
+ markdownFormatting: 'Markdown oblikovanje',
+ mastered: 'Ovladano',
+ masteredUppercase: 'OVLADANO',
+ newNote: 'Nova bilješka',
+ noteBody: 'SADRŽAJ BILJEŠKE',
+ noteContent: 'Sadržaj bilješke',
+ noteDetails: 'Pojedinosti bilješke',
+ noteMetadata: 'Metapodaci bilješke',
+ noteType: 'Vrsta bilješke',
+ notes: 'Bilješke',
+ reviewed: 'Ponovljeno',
+ studyProgress: 'Napredak u učenju',
+ studyProgressUppercase: 'NAPREDAK U UČENJU',
+ titleUppercase: 'NASLOV',
+ updated: 'Ažurirano',
+ },
+ sort: {
+ ariaLabel: 'Sortiraj bilješke',
+ title: 'Naslov',
+ updated: 'Ažurirano',
+ },
+ toolbar: {
+ bold: 'Podebljano',
+ italic: 'Kurziv',
+ link: 'Poveznica',
+ list: 'Popis',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Ponovno',
+ backToDeck: 'Natrag na špil',
+ continueReview: 'Nastavi ponavljanje',
+ easy: 'Lako',
+ good: 'Dobro',
+ hard: 'Teško',
+ newNote: 'Nova bilješka',
+ showAnswer: 'Prikaži odgovor',
+ },
+ errors: {
+ couldNotGradeCard: 'Kartica se nije mogla ocijeniti',
+ reviewCouldNotLoad: 'Ponavljanje se nije moglo učitati',
+ reviewCouldNotStart: 'Ponavljanje se nije moglo pokrenuti',
+ summaryCouldNotLoad: 'Sažetak ponavljanja se nije mogao učitati',
+ summaryNotAvailable: 'Sažetak ponavljanja nije dostupan',
+ summaryNotComplete: 'Ovo ponavljanje još nije dovršeno.',
+ },
+ labels: {
+ cardsReviewed: 'Ponovljene kartice',
+ deck: 'Špil',
+ duration: 'Trajanje',
+ loadingReview: 'Učitavanje ponavljanja',
+ loadingSummary: 'Učitavanje sažetka',
+ progress: 'Napredak ponavljanja',
+ review: 'Ponavljanje',
+ reviewComplete: 'Ponavljanje dovršeno',
+ reviewed_one: 'Ponovljena {{count}}',
+ reviewed_few: 'Ponovljene {{count}}',
+ reviewed_other: 'Ponovljeno {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} h {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'Vaš napredak spremljen je u ovaj špil.',
+ },
+ unavailable: {
+ description: 'Dodajte bilješku kako bi ovaj špil mogao ući u red za ponavljanje.',
+ title: 'Nema kartica za ponavljanje',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Očisti pretraživanje',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Nema rezultata u ovom radnom prostoru',
+ noMatchesInWorkspaceDescription: 'Nijedna mapa, špil ili bilješka ne odgovara upitu "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Pretraživanje se nije moglo dovršiti',
+ },
+ labels: {
+ results: 'Rezultati pretraživanja',
+ resultsFor: 'Rezultati za "{{query}}"',
+ searchingContent: 'Pretraživanje sadržaja',
+ },
+ resultGroups: {
+ deck: 'Špilovi',
+ folder: 'Mape',
+ note: 'Bilješke',
+ },
+ resultKinds: {
+ deck: 'špil',
+ folder: 'mapa',
+ note: 'bilješka',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Vrati sve postavke na početno',
+ resetSettings: 'Vrati postavke na početno',
+ resetToDefaults: 'Vrati zadane vrijednosti',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Zalijepite valjani JSON s 21 brojčanom vrijednošću.',
+ fsrsErrorInvalidParams_one: 'Unesite JSON polje s točno {{count}} konačnim brojem.',
+ fsrsErrorInvalidParams_few: 'Unesite JSON polje s točno {{count}} konačna broja.',
+ fsrsErrorInvalidParams_other: 'Unesite JSON polje s točno {{count}} konačnih brojeva.',
+ fsrsHelper: 'Ovo je stručna zamjena. Vrijednosti moraju ostati redom.',
+ fsrsJsonLabel: 'JSON FSRS parametara',
+ fsrsTitle: 'Uredi FSRS parametre',
+ fsrsDescription: 'Zalijepite JSON polje s 21 brojem za zamjenu težina planera.',
+ resetDescription: 'Ovo vraća vremensku zonu, ograničenja učenja i FSRS postavke.',
+ resetDescriptionWithLanguage: 'Ovo vraća jezik, vremensku zonu, ograničenja učenja i FSRS postavke.',
+ resetTitle: 'Vratiti sve postavke na početno?',
+ timezoneDescription: 'Pretražite grad ili identifikator vremenske zone.',
+ timezoneSearchLabel: 'Pretraži vremenske zone',
+ timezoneSearchPlaceholder: 'Pretraži vremenske zone…',
+ timezoneTitle: 'Odaberite vremensku zonu',
+ },
+ errors: {
+ couldNotResetSettings: 'Postavke se nisu mogle vratiti na početno',
+ couldNotSaveSettings: 'Postavke se nisu mogle spremiti',
+ settingsCouldNotLoad: 'Postavke se nisu mogle učitati',
+ settingsUnavailable: 'Postavke nisu dostupne.',
+ },
+ labels: {
+ appearance: 'Izgled',
+ automatic: 'Automatski',
+ fsrsParameters: 'FSRS parametri',
+ general: 'Općenito',
+ language: 'Jezik',
+ loadingSettings: 'Učitavanje postavki',
+ masteryHorizon: 'Horizont ovladavanja',
+ newCardOrder: 'Redoslijed novih kartica',
+ newCardsPerDay: 'Nove kartice po danu',
+ reviewCardsPerDay: 'Kartice za ponavljanje po danu',
+ savingSettings: 'Spremanje postavki',
+ schedule: 'Raspored',
+ searchNoTimezones: 'Nema odgovarajućih vremenskih zona.',
+ settings: 'Postavke',
+ settingsReset: 'Postavke su vraćene na početno',
+ study: 'Učenje',
+ targetRecallProbability: 'Ciljana vjerojatnost prisjećanja',
+ theme: 'Tema',
+ timezone: 'Vremenska zona',
+ },
+ options: {
+ languageEnUs: 'Engleski (SAD)',
+ newCardsAfterReviews: 'Nakon ponavljanja',
+ newCardsBeforeReviews: 'Prije ponavljanja',
+ newCardsMixed: 'Miješano',
+ themeDark: 'Tamna',
+ themeLight: 'Svijetla',
+ themeSystem: 'Sustav',
+ timezoneSystem: 'Koristi vremensku zonu sustava',
+ },
+ rows: {
+ fsrsDescription: 'Težine stručnog modela',
+ languageDescription: 'Jezik sučelja',
+ masteryHorizonDescription: 'Broj dana tijekom kojih kartica mora ostati prisjetljiva na ciljanoj vjerojatnosti ili iznad nje da bi se smatrala ovladanom',
+ newCardOrderDescription: 'Redoslijed novih kartica u odnosu na ponavljanja',
+ newCardsPerDayDescription: 'Maksimalan broj novih kartica po danu',
+ reviewCardsPerDayDescription: 'Maksimalan broj kartica za ponavljanje po danu',
+ targetRecallProbabilityDescription: 'Minimalna vjerojatnost prisjećanja pri sljedećem zakazanom ponavljanju',
+ timezoneDescription: 'Koristite automatsku vremensku zonu ili odaberite grad.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Izbriši trajno',
+ empty: 'Isprazni',
+ emptyTrash: 'Isprazni smeće',
+ restore: 'Vrati',
+ restoringItem: 'Vraćanje {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Ovo trajno briše "{{title}}". To se ne može poništiti.',
+ deleteItemFallbackDescription: 'Ovo trajno briše ovu stavku. To se ne može poništiti.',
+ deleteItemFallbackTitle: 'Izbrisati stavku?',
+ deleteItemTitle: 'Izbrisati "{{title}}"?',
+ emptyTrashDescription: 'Ovo trajno briše sve u Smeću. To se ne može poništiti.',
+ emptyTrashTitle: 'Isprazniti smeće?',
+ },
+ empty: {
+ description: 'Stavke koje izbrišete pojavit će se ovdje prije trajnog uklanjanja.',
+ title: 'Smeće je prazno',
+ },
+ errors: {
+ couldNotDeleteItem: 'Stavka se nije mogla izbrisati',
+ couldNotEmptyTrash: 'Smeće se nije moglo isprazniti',
+ couldNotRestoreItem: 'Stavka se nije mogla vratiti',
+ trashCouldNotLoad: 'Smeće se nije moglo učitati',
+ trashMayBeOutOfDate: 'Smeće možda nije ažurno',
+ },
+ labels: {
+ deletedAge: 'Izbrisano {{value}}',
+ itemCount_one: '{{count}} stavka',
+ itemCount_few: '{{count}} stavke',
+ itemCount_other: '{{count}} stavki',
+ lastEmptied: 'Zadnje ispražnjeno {{value}}',
+ loadingTrash: 'Učitavanje Smeća',
+ originalLocation: 'Izvorna lokacija: {{location}}',
+ title: 'Smeće',
+ trashActions: 'Radnje u Smeću za {{title}}',
+ },
+ kinds: {
+ deck: 'Špil',
+ folder: 'Mapa',
+ note: 'Bilješka',
+ workspace: 'Radni prostor',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Stvori radni prostor',
+ deleteWorkspace: 'Izbriši radni prostor',
+ editWorkspace: 'Uredi radni prostor',
+ newWorkspace: 'Novi radni prostor',
+ openWorkspace: 'Otvori {{title}}',
+ openingWorkspace: 'Otvaranje {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Kontekst učenja.',
+ editorVisual: 'Odaberite vizualno sidro za ovaj radni prostor.',
+ emptyList: 'Odvojite špilove, bilješke i redove za ponavljanje prema kontekstu učenja.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Ovo premješta "{{title}}" u Smeće. Možete ga vratiti kasnije.',
+ deleteWorkspaceFallbackDescription: 'Ovo premješta ovaj radni prostor u Smeće. Možete ga vratiti kasnije.',
+ deleteWorkspaceFallbackTitle: 'Izbrisati radni prostor?',
+ deleteWorkspaceTitle: 'Izbrisati "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Počnite s radnim prostorom',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Radni prostor se nije mogao stvoriti',
+ couldNotDeleteWorkspace: 'Radni prostor se nije mogao izbrisati',
+ couldNotOpenWorkspace: 'Radni prostor se nije mogao otvoriti',
+ couldNotSaveWorkspace: 'Radni prostor se nije mogao spremiti',
+ workspaceCouldNotLoad: 'Radni prostor se nije mogao učitati',
+ workspacesCouldNotLoad: 'Radni prostori se nisu mogli učitati',
+ },
+ fields: {
+ descriptionLabel: 'Opis radnog prostora',
+ descriptionPlaceholder: 'Što pripada u ovaj radni prostor?',
+ namePlaceholder: 'Naziv radnog prostora',
+ untitledWorkspace: 'Radni prostor bez naslova',
+ },
+ labels: {
+ createWorkspaceTitle: 'Stvori radni prostor',
+ loadingWorkspaces: 'Učitavanje radnih prostora',
+ workspace: 'Radni prostor',
+ workspaces: 'Radni prostori',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/hu.ts b/ui/src/core/i18n/resources/hu.ts
new file mode 100644
index 0000000..90aa9c9
--- /dev/null
+++ b/ui/src/core/i18n/resources/hu.ts
@@ -0,0 +1,623 @@
+export const hu = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Próbálja újra. Ha ez továbbra is előfordul, nyissa meg újra a Clear alkalmazást.',
+ title: 'Nem sikerült elindítani',
+ },
+ loadingTitle: 'A tanulási tér előkészítése',
+ },
+ common: {
+ actions: {
+ back: 'Vissza',
+ cancel: 'Mégse',
+ checkAgain: 'Ellenőrzés újra',
+ close: 'Bezárás',
+ create: 'Létrehozás',
+ delete: 'Törlés',
+ dismissError: 'Hiba bezárása',
+ dismissStatus: 'Állapot bezárása',
+ edit: 'Szerkesztés',
+ itemActions: '{{title}} műveletei',
+ reset: 'Visszaállítás',
+ review: 'Ismétlés',
+ save: 'Mentés',
+ saveChanges: 'Módosítások mentése',
+ tryAgain: 'Próbálja újra',
+ },
+ labels: {
+ active: 'Aktív',
+ clear: 'Clear',
+ custom: 'Egyéni',
+ default: 'Alapértelmezett',
+ loadingEditor: 'Szerkesztő betöltése',
+ name: 'Név',
+ completedTask: 'Befejezett feladat',
+ description: 'Leírás',
+ incompleteTask: 'Befejezetlen feladat',
+ percentageInput: '{{label}} százaléka',
+ visual: 'Vizuális elem',
+ },
+ status: {
+ actionFailed: 'A művelet sikertelen',
+ actionInProgress: 'Művelet folyamatban',
+ },
+ sort: {
+ ascending: 'Növ.',
+ column: 'Oszlop',
+ descending: 'Csökk.',
+ direction: 'Irány',
+ sort: 'Rendezés',
+ },
+ search: {
+ label: 'Keresés',
+ },
+ visualPicker: {
+ allLucideIcons: 'Minden Lucide ikon',
+ browseIconsFor: 'Böngésszen vagy keressen ikonokat ehhez: {{label}}.',
+ chooseIcon: 'Ikon kiválasztása',
+ iconPicker: '{{label}} ikonválasztó',
+ iconSearch: '{{label}} ikonkeresés',
+ iconsCouldNotLoad: 'Az ikonokat nem sikerült betölteni.',
+ loadingIcons: 'Ikonok betöltése',
+ loadingMoreIcons: 'További ikonok betöltése',
+ moreIcons: 'További ikonok',
+ noIconsMatch: 'Nincs ikon ehhez: "{{query}}".',
+ searchIconsPlaceholder: 'Ikonok keresése…',
+ selectedIcon: '{{label}} kiválasztva',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Létrehozás',
+ newDeck: 'Új pakli',
+ newFolder: 'Új mappa',
+ },
+ descriptions: {
+ defaultWorkspace: 'Tartsa együtt a paklikat, mappákat és jegyzeteket.',
+ emptyWorkspace: 'Hozzon létre egy paklit, majd adjon hozzá jegyzeteket az ismétlési sor felépítéséhez.',
+ emptyFolder: 'Hozzon létre egy paklit, majd adjon hozzá jegyzeteket az ismétlési sor felépítéséhez.',
+ searchPlaceholder: 'Mappák, paklik és jegyzetek keresése…',
+ },
+ empty: {
+ createFirstDeck: 'Hozza létre az első paklit',
+ },
+ errors: {
+ couldNotDeleteDeck: 'A paklit nem sikerült törölni',
+ couldNotDeleteFolder: 'A mappát nem sikerült törölni',
+ couldNotDeleteWorkspace: 'A munkaterületet nem sikerült törölni',
+ dashboardCouldNotOpen: 'Az irányítópult nem nyitható meg',
+ decksCouldNotLoad: 'A paklikat nem sikerült betölteni',
+ decksMayBeOutOfDate: 'A paklik elavultak lehetnek',
+ foldersCouldNotLoad: 'A mappákat nem sikerült betölteni',
+ foldersMayBeOutOfDate: 'A mappák elavultak lehetnek',
+ workspaceCouldNotLoad: 'A munkaterületet nem sikerült betölteni',
+ },
+ labels: {
+ dashboard: 'Irányítópult',
+ loadingDashboard: 'Irányítópult betöltése',
+ newItem: 'Új elem',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'A dátum nem érhető el',
+ },
+ age: {
+ dayAgo_one: '{{count}} nappal ezelőtt',
+ dayAgo_other: '{{count}} nappal ezelőtt',
+ hourAgo_one: '{{count}} órája',
+ hourAgo_other: '{{count}} órája',
+ justNow: 'éppen most',
+ minuteAgo_one: '{{count}} perce',
+ minuteAgo_other: '{{count}} perce',
+ unavailable: 'a dátum nem érhető el',
+ weekAgo_one: '{{count}} hete',
+ weekAgo_other: '{{count}} hete',
+ },
+ labels: {
+ deleted: 'Törölve {{value}}',
+ due: 'Esedékes: {{value}}',
+ reviewed: 'Ismételve: {{value}}',
+ updated: 'Frissítve {{value}}',
+ updatedUppercase: 'FRISSÍTVE {{value}}',
+ },
+ relative: {
+ dayAgo_one: '{{count}} nappal ezelőtt',
+ dayAgo_other: '{{count}} nappal ezelőtt',
+ inAMoment: 'Hamarosan',
+ inDay_one: '{{count}} nap múlva',
+ inDay_other: '{{count}} nap múlva',
+ inMonth_one: '{{count}} hónap múlva',
+ inMonth_other: '{{count}} hónap múlva',
+ inWeek_one: '{{count}} hét múlva',
+ inWeek_other: '{{count}} hét múlva',
+ justNow: 'Éppen most',
+ monthAgo_one: '{{count}} hónapja',
+ monthAgo_other: '{{count}} hónapja',
+ secondsAgoShort: '{{count}} mp',
+ minutesAgoShort: '{{count}} p',
+ hoursAgoShort: '{{count}} ó',
+ today: 'Ma',
+ tomorrow: 'Holnap',
+ weekAgo_one: '{{count}} hete',
+ weekAgo_other: '{{count}} hete',
+ yesterday: 'Tegnap',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: '{{title}} műveletei',
+ createDeck: 'Pakli létrehozása',
+ createNote: 'Jegyzet létrehozása',
+ deleteDeck: 'Pakli törlése',
+ editDeck: 'Pakli szerkesztése',
+ newNote: 'Új jegyzet',
+ openDeck: '{{title}} pakli megnyitása',
+ saveDeck: 'A paklit nem sikerült menteni',
+ studyNow: 'Tanulás most',
+ },
+ descriptions: {
+ emptyDeck: 'Adjon hozzá jegyzetet, hogy legyen mit ismételni ebben a pakliban.',
+ editorDefault: 'Fókuszált tanulási pakli.',
+ editorVisual: 'Válasszon borítójelet ehhez a paklihoz.',
+ notesSearchPlaceholder: 'Jegyzetek keresése…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Ez áthelyezi a következőt a Kukába: "{{title}}". Később visszaállítható.',
+ deleteDeckFallbackDescription: 'Ez áthelyezi ezt a paklit a Kukába. Később visszaállítható.',
+ deleteDeckFallbackTitle: 'Törli a paklit?',
+ deleteDeckTitle: 'Törli ezt: "{{title}}"?',
+ deleteNoteDescription: 'Ez áthelyezi a következőt a Kukába: "{{title}}". Később visszaállítható.',
+ deleteNoteFallbackTitle: 'Törli a jegyzetet?',
+ deleteNoteTitle: 'Törli ezt: "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Nincs megfelelő jegyzet',
+ noMatchingNotesDescription: 'Nincs jegyzet ehhez: "{{query}}".',
+ thisDeckIsEmpty: 'Ez a pakli üres',
+ },
+ errors: {
+ couldNotCreateDeck: 'A paklit nem sikerült létrehozni',
+ couldNotDeleteDeck: 'A paklit nem sikerült törölni',
+ couldNotDeleteNote: 'A jegyzetet nem sikerült törölni',
+ couldNotLoadFolderPath: 'A mappa útvonalát nem sikerült betölteni',
+ couldNotSaveDeck: 'A paklit nem sikerült menteni',
+ deckCouldNotLoad: 'A paklit nem sikerült betölteni',
+ notesCouldNotLoad: 'A jegyzeteket nem sikerült betölteni',
+ notesMayBeOutOfDate: 'A jegyzetek elavultak lehetnek',
+ },
+ fields: {
+ descriptionLabel: 'Pakli leírása',
+ descriptionPlaceholder: 'Mit segít ismételni ez a pakli?',
+ namePlaceholder: 'Pakli neve',
+ untitledDeck: 'Névtelen pakli',
+ untitledDeckLower: 'névtelen pakli',
+ },
+ labels: {
+ createDeckTitle: 'Pakli létrehozása',
+ deck: 'Pakli',
+ deckNotesSearch: 'Paklijegyzetek keresése',
+ deckOverview: 'Pakli áttekintése',
+ decks: 'Paklik',
+ due: 'Esedékes',
+ dueToday: 'Ma esedékes',
+ loadingDeck: 'Pakli betöltése',
+ mastery: 'Elsajátítás',
+ notes: 'Jegyzetek',
+ },
+ sort: {
+ ariaLabel: 'Paklik rendezése',
+ dueToday: 'Ma esedékes',
+ title: 'Cím',
+ updated: 'Frissítve',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Az adatok megváltoztak. Frissítsen, majd próbálja újra.',
+ forbidden: 'Nincs jogosultsága ehhez.',
+ notFound: 'Ezt az elemet nem találtuk.',
+ offline: 'A szolgáltatás nem érhető el.',
+ timeout: 'Ez túl sokáig tartott. Próbálja újra.',
+ unauthorized: 'A folytatáshoz jelentkezzen be.',
+ unavailable: 'A szolgáltatás átmenetileg nem érhető el.',
+ },
+ fallback: {
+ unexpected: 'Váratlan hiba',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Mappa létrehozása',
+ deleteFolder: 'Mappa törlése',
+ editFolder: 'Mappa szerkesztése',
+ },
+ descriptions: {
+ editorDefault: 'Mappa kapcsolódó paklikhoz.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Ez áthelyezi a következőt a Kukába: "{{name}}". Később visszaállítható.',
+ deleteFolderFallbackDescription: 'Ez áthelyezi ezt a mappát a Kukába. Később visszaállítható.',
+ deleteFolderFallbackTitle: 'Törli a mappát?',
+ deleteFolderTitle: 'Törli ezt: "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'Nincs találat ebben a mappában',
+ noMatchesInFolderDescription: 'Nincs mappa, pakli vagy jegyzet ehhez: "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'A mappát nem sikerült létrehozni',
+ couldNotDeleteFolder: 'A mappát nem sikerült törölni',
+ couldNotLoadFolderPath: 'A mappa útvonalát nem sikerült betölteni',
+ couldNotSaveFolder: 'A mappát nem sikerült menteni',
+ folderCouldNotLoad: 'A mappát nem sikerült betölteni',
+ },
+ fields: {
+ descriptionLabel: 'Mappa leírása',
+ descriptionPlaceholder: 'Mi tartozik ebbe a mappába?',
+ namePlaceholder: 'Mappa neve',
+ untitledFolder: 'Névtelen mappa',
+ },
+ labels: {
+ createFolderTitle: 'Mappa létrehozása',
+ folder: 'Mappa',
+ folders: 'Mappák',
+ loadingFolder: 'Mappa betöltése',
+ name: 'Név',
+ updated: 'Frissítve',
+ },
+ sort: {
+ ariaLabel: 'Mappák rendezése',
+ name: 'Név',
+ updated: 'Frissítve',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Ha a helyi és a szinkronizált adatok eltérnek, az elem itt jelenik meg.',
+ heading: 'Szinkronizálási állapot',
+ title: 'Ütközések',
+ noConflicts: 'Nem találhatók ütközések',
+ },
+ labels: {
+ menu: 'Menü',
+ },
+ sections: {
+ settings: {
+ description: 'Személyre szabhatja a környezetét és beállításait',
+ title: 'Beállítások',
+ },
+ trash: {
+ description: 'Visszaállíthatja vagy végleg törölheti az eltávolított elemeket',
+ title: 'Kuka',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Szerkesztő bezárása',
+ openActions: 'Műveletek megnyitása',
+ openWorkspaces: 'Munkaterületek megnyitása',
+ },
+ items: {
+ home: 'Kezdőlap',
+ menu: 'Menü',
+ primary: 'Elsődleges',
+ settings: 'Beállítások',
+ spaces: 'Terek',
+ trash: 'Kuka',
+ workspaces: 'Munkaterületek',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Cloze hozzáadása',
+ deleteNote: 'Jegyzet törlése',
+ editNote: 'Jegyzet szerkesztése',
+ hideDerivedCardsNote: 'Származtatott kártyák jegyzetének elrejtése',
+ openNote: '{{title}} megnyitása',
+ saveNote: 'Jegyzet mentése',
+ showDerivedCardsNote: 'Származtatott kártyák jegyzetének megjelenítése',
+ },
+ descriptions: {
+ clozeFormat: 'Mentéskor minden rejtett rész ismétlőkártyává válik.',
+ clozeFormatPrefix: 'A rejtett szöveget ezzel vegye körbe:',
+ derivedCardsHelper: 'A jegyzetek a származtatott kártyák igazságforrásai.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Ez áthelyezi a következőt a Kukába: "{{title}}". Később visszaállítható.',
+ deleteNoteFallbackDescription: 'Ez áthelyezi ezt a jegyzetet a Kukába. Később visszaállítható.',
+ deleteNoteFallbackTitle: 'Törli a jegyzetet?',
+ deleteNoteTitle: 'Törli ezt: "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'A jegyzetet nem sikerült létrehozni',
+ couldNotDeleteNote: 'A jegyzetet nem sikerült törölni',
+ couldNotSaveNote: 'A jegyzetet nem sikerült menteni',
+ noteCouldNotLoad: 'A jegyzetet nem sikerült betölteni',
+ },
+ fields: {
+ back: 'Hátoldal',
+ backPlaceholder: 'Adja meg a hátoldalt',
+ bodyPlaceholder: 'Írja meg a jegyzet törzsét cloze törlésekkel…',
+ front: 'Előlap',
+ frontPlaceholder: 'Adja meg az előlapot',
+ noteBody: 'Jegyzet törzse',
+ title: 'Cím',
+ titlePlaceholder: 'Adjon címet a jegyzetnek',
+ untitledCloze: 'Névtelen cloze',
+ untitledNote: 'Névtelen jegyzet',
+ },
+ labels: {
+ backUppercase: 'HÁTOLDAL',
+ basic: 'Alap',
+ basicLower: 'alap',
+ basicUppercase: 'ALAP',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Cloze formátum',
+ clozeUppercase: 'CLOZE',
+ deck: 'Pakli',
+ derivedCards: 'SZÁRMAZTATOTT KÁRTYÁK',
+ due: 'Esedékes',
+ frontUppercase: 'ELŐLAP',
+ inProgress: 'Folyamatban',
+ inProgressUppercase: 'FOLYAMATBAN',
+ loadingNote: 'Jegyzet betöltése',
+ loadingNoteEditor: 'Jegyzetszerkesztő betöltése',
+ markdownFormatting: 'Markdown formázás',
+ mastered: 'Elsajátítva',
+ masteredUppercase: 'ELSAJÁTÍTVA',
+ newNote: 'Új jegyzet',
+ noteBody: 'JEGYZET TÖRZSE',
+ noteContent: 'Jegyzet tartalma',
+ noteDetails: 'Jegyzet részletei',
+ noteMetadata: 'Jegyzet metaadatai',
+ noteType: 'Jegyzet típusa',
+ notes: 'Jegyzetek',
+ reviewed: 'Ismételve',
+ studyProgress: 'Tanulási előrehaladás',
+ studyProgressUppercase: 'TANULÁSI ELŐREHALADÁS',
+ titleUppercase: 'CÍM',
+ updated: 'Frissítve',
+ },
+ sort: {
+ ariaLabel: 'Jegyzetek rendezése',
+ title: 'Cím',
+ updated: 'Frissítve',
+ },
+ toolbar: {
+ bold: 'Félkövér',
+ italic: 'Dőlt',
+ link: 'Hivatkozás',
+ list: 'Lista',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Újra',
+ backToDeck: 'Vissza a paklihoz',
+ continueReview: 'Ismétlés folytatása',
+ easy: 'Könnyű',
+ good: 'Jó',
+ hard: 'Nehéz',
+ newNote: 'Új jegyzet',
+ showAnswer: 'Válasz megjelenítése',
+ },
+ errors: {
+ couldNotGradeCard: 'A kártyát nem sikerült értékelni',
+ reviewCouldNotLoad: 'Az ismétlést nem sikerült betölteni',
+ reviewCouldNotStart: 'Az ismétlést nem sikerült elindítani',
+ summaryCouldNotLoad: 'Az ismétlési összegzést nem sikerült betölteni',
+ summaryNotAvailable: 'Az ismétlési összegzés nem érhető el',
+ summaryNotComplete: 'Ez az ismétlés még nem fejeződött be.',
+ },
+ labels: {
+ cardsReviewed: 'Ismételt kártyák',
+ deck: 'Pakli',
+ duration: 'Időtartam',
+ loadingReview: 'Ismétlés betöltése',
+ loadingSummary: 'Összegzés betöltése',
+ progress: 'Ismétlési előrehaladás',
+ review: 'Ismétlés',
+ reviewComplete: 'Ismétlés kész',
+ reviewed_one: 'Ismételve {{count}}',
+ reviewed_other: 'Ismételve {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} ó {{minutes}} p',
+ durationMinutes: '{{minutes}} p',
+ durationSeconds: '{{seconds}} mp',
+ saved: 'Az előrehaladása mentve lett ebbe a pakliba.',
+ },
+ unavailable: {
+ description: 'Adjon hozzá jegyzetet, hogy ez a pakli bekerülhessen az ismétlési sorba.',
+ title: 'Nincs ismételhető kártya',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Keresés törlése',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Nincs találat ezen a munkaterületen',
+ noMatchesInWorkspaceDescription: 'Nincs mappa, pakli vagy jegyzet ehhez: "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'A keresést nem sikerült befejezni',
+ },
+ labels: {
+ results: 'Keresési eredmények',
+ resultsFor: 'Találatok erre: "{{query}}"',
+ searchingContent: 'Tartalom keresése',
+ },
+ resultGroups: {
+ deck: 'Paklik',
+ folder: 'Mappák',
+ note: 'Jegyzetek',
+ },
+ resultKinds: {
+ deck: 'pakli',
+ folder: 'mappa',
+ note: 'jegyzet',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Összes beállítás visszaállítása',
+ resetSettings: 'Beállítások visszaállítása',
+ resetToDefaults: 'Alapértelmezések visszaállítása',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Illesszen be érvényes JSON-t 21 numerikus értékkel.',
+ fsrsErrorInvalidParams_one: 'Adjon meg egy JSON tömböt pontosan {{count}} véges számmal.',
+ fsrsErrorInvalidParams_other: 'Adjon meg egy JSON tömböt pontosan {{count}} véges számmal.',
+ fsrsHelper: 'Ez egy szakértői felülírás. Az értékeknek sorrendben kell maradniuk.',
+ fsrsJsonLabel: 'FSRS-paraméterek JSON',
+ fsrsTitle: 'FSRS-paraméterek szerkesztése',
+ fsrsDescription: 'Illesszen be egy 21 számból álló JSON tömböt a scheduler súlyainak felülírásához.',
+ resetDescription: 'Ez visszaállítja az időzónát, a tanulási korlátokat és az FSRS-beállításokat.',
+ resetDescriptionWithLanguage: 'Ez visszaállítja a nyelvet, az időzónát, a tanulási korlátokat és az FSRS-beállításokat.',
+ resetTitle: 'Visszaállítja az összes beállítást?',
+ timezoneDescription: 'Keressen várost vagy időzóna-azonosítót.',
+ timezoneSearchLabel: 'Időzónák keresése',
+ timezoneSearchPlaceholder: 'Időzónák keresése…',
+ timezoneTitle: 'Időzóna kiválasztása',
+ },
+ errors: {
+ couldNotResetSettings: 'A beállításokat nem sikerült visszaállítani',
+ couldNotSaveSettings: 'A beállításokat nem sikerült menteni',
+ settingsCouldNotLoad: 'A beállításokat nem sikerült betölteni',
+ settingsUnavailable: 'A beállítások nem érhetők el.',
+ },
+ labels: {
+ appearance: 'Megjelenés',
+ automatic: 'Automatikus',
+ fsrsParameters: 'FSRS-paraméterek',
+ general: 'Általános',
+ language: 'Nyelv',
+ loadingSettings: 'Beállítások betöltése',
+ masteryHorizon: 'Elsajátítási horizont',
+ newCardOrder: 'Új kártyák sorrendje',
+ newCardsPerDay: 'Új kártyák naponta',
+ reviewCardsPerDay: 'Ismétlőkártyák naponta',
+ savingSettings: 'Beállítások mentése',
+ schedule: 'Ütemezés',
+ searchNoTimezones: 'Nincs megfelelő időzóna.',
+ settings: 'Beállítások',
+ settingsReset: 'Beállítások visszaállítva',
+ study: 'Tanulás',
+ targetRecallProbability: 'Cél felidézési valószínűség',
+ theme: 'Téma',
+ timezone: 'Időzóna',
+ },
+ options: {
+ languageEnUs: 'Angol (USA)',
+ newCardsAfterReviews: 'Ismétlések után',
+ newCardsBeforeReviews: 'Ismétlések előtt',
+ newCardsMixed: 'Vegyes',
+ themeDark: 'Sötét',
+ themeLight: 'Világos',
+ themeSystem: 'Rendszer',
+ timezoneSystem: 'Rendszer időzónájának használata',
+ },
+ rows: {
+ fsrsDescription: 'Szakértői modell súlyai',
+ languageDescription: 'Felület nyelve',
+ masteryHorizonDescription: 'Hány napig kell egy kártyának a célvalószínűségen vagy felette felidézhetőnek maradnia ahhoz, hogy elsajátítottnak számítson',
+ newCardOrderDescription: 'Az új kártyák sorrendje az ismétlésekhez képest',
+ newCardsPerDayDescription: 'Új kártyák maximális száma naponta',
+ reviewCardsPerDayDescription: 'Ismétlőkártyák maximális száma naponta',
+ targetRecallProbabilityDescription: 'Minimális felidézési valószínűség a következő ütemezett ismétlésnél',
+ timezoneDescription: 'Használjon automatikus időzónát, vagy válasszon várost.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Végleges törlés',
+ empty: 'Ürítés',
+ emptyTrash: 'Kuka ürítése',
+ restore: 'Visszaállítás',
+ restoringItem: '{{title}} visszaállítása',
+ },
+ dialogs: {
+ deleteItemDescription: 'Ez végleg törli a következőt: "{{title}}". Nem vonható vissza.',
+ deleteItemFallbackDescription: 'Ez végleg törli ezt az elemet. Nem vonható vissza.',
+ deleteItemFallbackTitle: 'Törli az elemet?',
+ deleteItemTitle: 'Törli ezt: "{{title}}"?',
+ emptyTrashDescription: 'Ez végleg töröl mindent a Kukából. Nem vonható vissza.',
+ emptyTrashTitle: 'Kiüríti a Kukát?',
+ },
+ empty: {
+ description: 'A törölt elemek itt jelennek meg a végleges eltávolítás előtt.',
+ title: 'A Kuka üres',
+ },
+ errors: {
+ couldNotDeleteItem: 'Az elemet nem sikerült törölni',
+ couldNotEmptyTrash: 'A Kukát nem sikerült kiüríteni',
+ couldNotRestoreItem: 'Az elemet nem sikerült visszaállítani',
+ trashCouldNotLoad: 'A Kukát nem sikerült betölteni',
+ trashMayBeOutOfDate: 'A Kuka elavult lehet',
+ },
+ labels: {
+ deletedAge: 'Törölve {{value}}',
+ itemCount_one: '{{count}} elem',
+ itemCount_other: '{{count}} elem',
+ lastEmptied: 'Utoljára ürítve {{value}}',
+ loadingTrash: 'Kuka betöltése',
+ originalLocation: 'Eredeti hely: {{location}}',
+ title: 'Kuka',
+ trashActions: '{{title}} kuka műveletei',
+ },
+ kinds: {
+ deck: 'Pakli',
+ folder: 'Mappa',
+ note: 'Jegyzet',
+ workspace: 'Munkaterület',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Munkaterület létrehozása',
+ deleteWorkspace: 'Munkaterület törlése',
+ editWorkspace: 'Munkaterület szerkesztése',
+ newWorkspace: 'Új munkaterület',
+ openWorkspace: '{{title}} megnyitása',
+ openingWorkspace: '{{title}} megnyitása',
+ },
+ descriptions: {
+ editorDefault: 'Tanulási kontextus.',
+ editorVisual: 'Válasszon vizuális horgonyt ehhez a munkaterülethez.',
+ emptyList: 'Válassza szét a paklikat, jegyzeteket és ismétlési sorokat tanulási kontextus szerint.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Ez áthelyezi a következőt a Kukába: "{{title}}". Később visszaállítható.',
+ deleteWorkspaceFallbackDescription: 'Ez áthelyezi ezt a munkaterületet a Kukába. Később visszaállítható.',
+ deleteWorkspaceFallbackTitle: 'Törli a munkaterületet?',
+ deleteWorkspaceTitle: 'Törli ezt: "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Kezdjen egy munkaterülettel',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'A munkaterületet nem sikerült létrehozni',
+ couldNotDeleteWorkspace: 'A munkaterületet nem sikerült törölni',
+ couldNotOpenWorkspace: 'A munkaterületet nem sikerült megnyitni',
+ couldNotSaveWorkspace: 'A munkaterületet nem sikerült menteni',
+ workspaceCouldNotLoad: 'A munkaterületet nem sikerült betölteni',
+ workspacesCouldNotLoad: 'A munkaterületeket nem sikerült betölteni',
+ },
+ fields: {
+ descriptionLabel: 'Munkaterület leírása',
+ descriptionPlaceholder: 'Mi tartozik ebbe a munkaterületbe?',
+ namePlaceholder: 'Munkaterület neve',
+ untitledWorkspace: 'Névtelen munkaterület',
+ },
+ labels: {
+ createWorkspaceTitle: 'Munkaterület létrehozása',
+ loadingWorkspaces: 'Munkaterületek betöltése',
+ workspace: 'Munkaterület',
+ workspaces: 'Munkaterületek',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/id.ts b/ui/src/core/i18n/resources/id.ts
new file mode 100644
index 0000000..3b488b7
--- /dev/null
+++ b/ui/src/core/i18n/resources/id.ts
@@ -0,0 +1,623 @@
+export const id = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Coba lagi. Jika terus terjadi, buka ulang Clear.',
+ title: 'Tidak dapat memulai',
+ },
+ loadingTitle: 'Menyiapkan ruang belajar Anda',
+ },
+ common: {
+ actions: {
+ back: 'Kembali',
+ cancel: 'Batal',
+ checkAgain: 'Periksa lagi',
+ close: 'Tutup',
+ create: 'Buat',
+ delete: 'Hapus',
+ dismissError: 'Tutup error',
+ dismissStatus: 'Tutup status',
+ edit: 'Edit',
+ itemActions: 'Tindakan {{title}}',
+ reset: 'Reset',
+ review: 'Ulas',
+ save: 'Simpan',
+ saveChanges: 'Simpan perubahan',
+ tryAgain: 'Coba lagi',
+ },
+ labels: {
+ active: 'Aktif',
+ clear: 'Clear',
+ custom: 'Kustom',
+ default: 'Default',
+ loadingEditor: 'Memuat editor',
+ name: 'Nama',
+ completedTask: 'Tugas selesai',
+ description: 'Deskripsi',
+ incompleteTask: 'Tugas belum selesai',
+ percentageInput: 'Persentase {{label}}',
+ visual: 'Visual',
+ },
+ status: {
+ actionFailed: 'Tindakan gagal',
+ actionInProgress: 'Tindakan berlangsung',
+ },
+ sort: {
+ ascending: 'Naik',
+ column: 'Kolom',
+ descending: 'Turun',
+ direction: 'Arah',
+ sort: 'Urutkan',
+ },
+ search: {
+ label: 'Cari',
+ },
+ visualPicker: {
+ allLucideIcons: 'Semua ikon Lucide',
+ browseIconsFor: 'Jelajahi atau cari ikon untuk {{label}}.',
+ chooseIcon: 'Pilih ikon',
+ iconPicker: 'Pemilih ikon {{label}}',
+ iconSearch: 'Pencarian ikon {{label}}',
+ iconsCouldNotLoad: 'Ikon tidak dapat dimuat.',
+ loadingIcons: 'Memuat ikon',
+ loadingMoreIcons: 'Memuat ikon lainnya',
+ moreIcons: 'Ikon lainnya',
+ noIconsMatch: 'Tidak ada ikon yang cocok dengan "{{query}}".',
+ searchIconsPlaceholder: 'Cari ikon…',
+ selectedIcon: '{{label}} dipilih',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Buat',
+ newDeck: 'Deck baru',
+ newFolder: 'Folder baru',
+ },
+ descriptions: {
+ defaultWorkspace: 'Simpan deck, folder, dan catatan bersama.',
+ emptyWorkspace: 'Buat deck, lalu tambahkan catatan untuk membangun antrean ulasan.',
+ emptyFolder: 'Buat deck, lalu tambahkan catatan untuk membangun antrean ulasan.',
+ searchPlaceholder: 'Cari folder, deck, dan catatan…',
+ },
+ empty: {
+ createFirstDeck: 'Buat deck pertama Anda',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Deck tidak dapat dihapus',
+ couldNotDeleteFolder: 'Folder tidak dapat dihapus',
+ couldNotDeleteWorkspace: 'Workspace tidak dapat dihapus',
+ dashboardCouldNotOpen: 'Dashboard tidak dapat dibuka',
+ decksCouldNotLoad: 'Deck tidak dapat dimuat',
+ decksMayBeOutOfDate: 'Deck mungkin tidak terbaru',
+ foldersCouldNotLoad: 'Folder tidak dapat dimuat',
+ foldersMayBeOutOfDate: 'Folder mungkin tidak terbaru',
+ workspaceCouldNotLoad: 'Workspace tidak dapat dimuat',
+ },
+ labels: {
+ dashboard: 'Dashboard',
+ loadingDashboard: 'Memuat dashboard',
+ newItem: 'Item baru',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Tanggal tidak tersedia',
+ },
+ age: {
+ dayAgo_one: '{{count}} hari lalu',
+ dayAgo_other: '{{count}} hari lalu',
+ hourAgo_one: '{{count}} jam lalu',
+ hourAgo_other: '{{count}} jam lalu',
+ justNow: 'baru saja',
+ minuteAgo_one: '{{count}} menit lalu',
+ minuteAgo_other: '{{count}} menit lalu',
+ unavailable: 'tanggal tidak tersedia',
+ weekAgo_one: '{{count}} minggu lalu',
+ weekAgo_other: '{{count}} minggu lalu',
+ },
+ labels: {
+ deleted: 'Dihapus {{value}}',
+ due: 'Jatuh tempo: {{value}}',
+ reviewed: 'Diulas: {{value}}',
+ updated: 'Diperbarui {{value}}',
+ updatedUppercase: 'DIPERBARUI {{value}}',
+ },
+ relative: {
+ dayAgo_one: '{{count}} hari lalu',
+ dayAgo_other: '{{count}} hari lalu',
+ inAMoment: 'Sebentar lagi',
+ inDay_one: 'Dalam {{count}} hari',
+ inDay_other: 'Dalam {{count}} hari',
+ inMonth_one: 'Dalam {{count}} bulan',
+ inMonth_other: 'Dalam {{count}} bulan',
+ inWeek_one: 'Dalam {{count}} minggu',
+ inWeek_other: 'Dalam {{count}} minggu',
+ justNow: 'Baru saja',
+ monthAgo_one: '{{count}} bulan lalu',
+ monthAgo_other: '{{count}} bulan lalu',
+ secondsAgoShort: '{{count}} dtk lalu',
+ minutesAgoShort: '{{count}} mnt lalu',
+ hoursAgoShort: '{{count}} jam lalu',
+ today: 'Hari ini',
+ tomorrow: 'Besok',
+ weekAgo_one: '{{count}} minggu lalu',
+ weekAgo_other: '{{count}} minggu lalu',
+ yesterday: 'Kemarin',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Tindakan {{title}}',
+ createDeck: 'Buat deck',
+ createNote: 'Buat catatan',
+ deleteDeck: 'Hapus deck',
+ editDeck: 'Edit deck',
+ newNote: 'Catatan baru',
+ openDeck: 'Buka deck {{title}}',
+ saveDeck: 'Deck tidak dapat disimpan',
+ studyNow: 'Belajar sekarang',
+ },
+ descriptions: {
+ emptyDeck: 'Tambahkan catatan agar deck ini memiliki materi untuk diulas.',
+ editorDefault: 'Deck belajar terfokus.',
+ editorVisual: 'Pilih glif sampul untuk deck ini.',
+ notesSearchPlaceholder: 'Cari catatan…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Ini memindahkan "{{title}}" ke Sampah. Anda dapat memulihkannya nanti.',
+ deleteDeckFallbackDescription: 'Ini memindahkan deck ini ke Sampah. Anda dapat memulihkannya nanti.',
+ deleteDeckFallbackTitle: 'Hapus deck?',
+ deleteDeckTitle: 'Hapus "{{title}}"?',
+ deleteNoteDescription: 'Ini memindahkan "{{title}}" ke Sampah. Anda dapat memulihkannya nanti.',
+ deleteNoteFallbackTitle: 'Hapus catatan?',
+ deleteNoteTitle: 'Hapus "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Tidak ada catatan yang cocok',
+ noMatchingNotesDescription: 'Tidak ada catatan yang cocok dengan "{{query}}".',
+ thisDeckIsEmpty: 'Deck ini kosong',
+ },
+ errors: {
+ couldNotCreateDeck: 'Deck tidak dapat dibuat',
+ couldNotDeleteDeck: 'Deck tidak dapat dihapus',
+ couldNotDeleteNote: 'Catatan tidak dapat dihapus',
+ couldNotLoadFolderPath: 'Jalur folder tidak dapat dimuat',
+ couldNotSaveDeck: 'Deck tidak dapat disimpan',
+ deckCouldNotLoad: 'Deck tidak dapat dimuat',
+ notesCouldNotLoad: 'Catatan tidak dapat dimuat',
+ notesMayBeOutOfDate: 'Catatan mungkin tidak terbaru',
+ },
+ fields: {
+ descriptionLabel: 'Deskripsi deck',
+ descriptionPlaceholder: 'Apa yang akan dibantu deck ini untuk Anda ulas?',
+ namePlaceholder: 'Nama deck',
+ untitledDeck: 'Deck tanpa judul',
+ untitledDeckLower: 'deck tanpa judul',
+ },
+ labels: {
+ createDeckTitle: 'Buat deck',
+ deck: 'Deck',
+ deckNotesSearch: 'Pencarian catatan deck',
+ deckOverview: 'Ringkasan deck',
+ decks: 'Deck',
+ due: 'Jatuh tempo',
+ dueToday: 'Jatuh tempo hari ini',
+ loadingDeck: 'Memuat deck',
+ mastery: 'Penguasaan',
+ notes: 'Catatan',
+ },
+ sort: {
+ ariaLabel: 'Urutkan deck',
+ dueToday: 'Jatuh tempo hari ini',
+ title: 'Judul',
+ updated: 'Diperbarui',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Data telah berubah. Segarkan dan coba lagi.',
+ forbidden: 'Anda tidak memiliki izin untuk melakukan ini.',
+ notFound: 'Kami tidak dapat menemukan item ini.',
+ offline: 'Tidak dapat menjangkau layanan.',
+ timeout: 'Ini terlalu lama. Coba lagi.',
+ unauthorized: 'Masuk untuk melanjutkan.',
+ unavailable: 'Layanan sementara tidak tersedia.',
+ },
+ fallback: {
+ unexpected: 'Error tidak terduga',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Buat folder',
+ deleteFolder: 'Hapus folder',
+ editFolder: 'Edit folder',
+ },
+ descriptions: {
+ editorDefault: 'Folder untuk deck terkait.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Ini memindahkan "{{name}}" ke Sampah. Anda dapat memulihkannya nanti.',
+ deleteFolderFallbackDescription: 'Ini memindahkan folder ini ke Sampah. Anda dapat memulihkannya nanti.',
+ deleteFolderFallbackTitle: 'Hapus folder?',
+ deleteFolderTitle: 'Hapus "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'Tidak ada kecocokan di folder ini',
+ noMatchesInFolderDescription: 'Tidak ada folder, deck, atau catatan yang cocok dengan "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Folder tidak dapat dibuat',
+ couldNotDeleteFolder: 'Folder tidak dapat dihapus',
+ couldNotLoadFolderPath: 'Jalur folder tidak dapat dimuat',
+ couldNotSaveFolder: 'Folder tidak dapat disimpan',
+ folderCouldNotLoad: 'Folder tidak dapat dimuat',
+ },
+ fields: {
+ descriptionLabel: 'Deskripsi folder',
+ descriptionPlaceholder: 'Apa yang termasuk dalam folder ini?',
+ namePlaceholder: 'Nama folder',
+ untitledFolder: 'Folder tanpa judul',
+ },
+ labels: {
+ createFolderTitle: 'Buat folder',
+ folder: 'Folder',
+ folders: 'Folder',
+ loadingFolder: 'Memuat folder',
+ name: 'Nama',
+ updated: 'Diperbarui',
+ },
+ sort: {
+ ariaLabel: 'Urutkan folder',
+ name: 'Nama',
+ updated: 'Diperbarui',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Jika data lokal dan data tersinkron berbeda, item akan muncul di sini.',
+ heading: 'Status sinkronisasi',
+ title: 'Konflik',
+ noConflicts: 'Tidak ada konflik ditemukan',
+ },
+ labels: {
+ menu: 'Menu',
+ },
+ sections: {
+ settings: {
+ description: 'Personalisasi lingkungan dan preferensi Anda',
+ title: 'Pengaturan',
+ },
+ trash: {
+ description: 'Pulihkan atau hapus permanen item yang dihapus',
+ title: 'Sampah',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Tutup editor',
+ openActions: 'Buka tindakan',
+ openWorkspaces: 'Buka workspace',
+ },
+ items: {
+ home: 'Beranda',
+ menu: 'Menu',
+ primary: 'Utama',
+ settings: 'Pengaturan',
+ spaces: 'Ruang',
+ trash: 'Sampah',
+ workspaces: 'Workspace',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Tambah cloze',
+ deleteNote: 'Hapus catatan',
+ editNote: 'Edit catatan',
+ hideDerivedCardsNote: 'Sembunyikan catatan kartu turunan',
+ openNote: 'Buka {{title}}',
+ saveNote: 'Simpan catatan',
+ showDerivedCardsNote: 'Tampilkan catatan kartu turunan',
+ },
+ descriptions: {
+ clozeFormat: 'Setiap bagian tersembunyi menjadi kartu ulasan saat Anda menyimpan.',
+ clozeFormatPrefix: 'Bungkus teks tersembunyi dengan',
+ derivedCardsHelper: 'Catatan adalah sumber kebenaran untuk kartu turunan.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Ini memindahkan "{{title}}" ke Sampah. Anda dapat memulihkannya nanti.',
+ deleteNoteFallbackDescription: 'Ini memindahkan catatan ini ke Sampah. Anda dapat memulihkannya nanti.',
+ deleteNoteFallbackTitle: 'Hapus catatan?',
+ deleteNoteTitle: 'Hapus "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Catatan tidak dapat dibuat',
+ couldNotDeleteNote: 'Catatan tidak dapat dihapus',
+ couldNotSaveNote: 'Catatan tidak dapat disimpan',
+ noteCouldNotLoad: 'Catatan tidak dapat dimuat',
+ },
+ fields: {
+ back: 'Belakang',
+ backPlaceholder: 'Masukkan sisi belakang',
+ bodyPlaceholder: 'Tulis isi catatan dengan cloze deletions…',
+ front: 'Depan',
+ frontPlaceholder: 'Masukkan sisi depan',
+ noteBody: 'Isi catatan',
+ title: 'Judul',
+ titlePlaceholder: 'Tambahkan judul catatan',
+ untitledCloze: 'Cloze tanpa judul',
+ untitledNote: 'Catatan tanpa judul',
+ },
+ labels: {
+ backUppercase: 'BELAKANG',
+ basic: 'Dasar',
+ basicLower: 'dasar',
+ basicUppercase: 'DASAR',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Format cloze',
+ clozeUppercase: 'CLOZE',
+ deck: 'Deck',
+ derivedCards: 'KARTU TURUNAN',
+ due: 'Jatuh tempo',
+ frontUppercase: 'DEPAN',
+ inProgress: 'Berlangsung',
+ inProgressUppercase: 'BERLANGSUNG',
+ loadingNote: 'Memuat catatan',
+ loadingNoteEditor: 'Memuat editor catatan',
+ markdownFormatting: 'Pemformatan Markdown',
+ mastered: 'Dikuasai',
+ masteredUppercase: 'DIKUASAI',
+ newNote: 'Catatan baru',
+ noteBody: 'ISI CATATAN',
+ noteContent: 'Konten catatan',
+ noteDetails: 'Detail catatan',
+ noteMetadata: 'Metadata catatan',
+ noteType: 'Jenis catatan',
+ notes: 'Catatan',
+ reviewed: 'Diulas',
+ studyProgress: 'Progres belajar',
+ studyProgressUppercase: 'PROGRES BELAJAR',
+ titleUppercase: 'JUDUL',
+ updated: 'Diperbarui',
+ },
+ sort: {
+ ariaLabel: 'Urutkan catatan',
+ title: 'Judul',
+ updated: 'Diperbarui',
+ },
+ toolbar: {
+ bold: 'Tebal',
+ italic: 'Miring',
+ link: 'Tautan',
+ list: 'Daftar',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Lagi',
+ backToDeck: 'Kembali ke deck',
+ continueReview: 'Lanjutkan ulasan',
+ easy: 'Mudah',
+ good: 'Baik',
+ hard: 'Sulit',
+ newNote: 'Catatan baru',
+ showAnswer: 'Tampilkan jawaban',
+ },
+ errors: {
+ couldNotGradeCard: 'Kartu tidak dapat dinilai',
+ reviewCouldNotLoad: 'Ulasan tidak dapat dimuat',
+ reviewCouldNotStart: 'Ulasan tidak dapat dimulai',
+ summaryCouldNotLoad: 'Ringkasan ulasan tidak dapat dimuat',
+ summaryNotAvailable: 'Ringkasan ulasan tidak tersedia',
+ summaryNotComplete: 'Ulasan ini belum selesai.',
+ },
+ labels: {
+ cardsReviewed: 'Kartu diulas',
+ deck: 'Deck',
+ duration: 'Durasi',
+ loadingReview: 'Memuat ulasan',
+ loadingSummary: 'Memuat ringkasan',
+ progress: 'Progres ulasan',
+ review: 'Ulasan',
+ reviewComplete: 'Ulasan selesai',
+ reviewed_one: '{{count}} diulas',
+ reviewed_other: '{{count}} diulas',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} j {{minutes}} mnt',
+ durationMinutes: '{{minutes}} mnt',
+ durationSeconds: '{{seconds}} dtk',
+ saved: 'Progres Anda disimpan ke deck ini.',
+ },
+ unavailable: {
+ description: 'Tambahkan catatan agar deck ini dapat masuk antrean ulasan.',
+ title: 'Tidak ada kartu untuk diulas',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Bersihkan pencarian',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Tidak ada kecocokan di workspace ini',
+ noMatchesInWorkspaceDescription: 'Tidak ada folder, deck, atau catatan yang cocok dengan "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Pencarian tidak dapat diselesaikan',
+ },
+ labels: {
+ results: 'Hasil pencarian',
+ resultsFor: 'Hasil untuk "{{query}}"',
+ searchingContent: 'Mencari konten',
+ },
+ resultGroups: {
+ deck: 'Deck',
+ folder: 'Folder',
+ note: 'Catatan',
+ },
+ resultKinds: {
+ deck: 'deck',
+ folder: 'folder',
+ note: 'catatan',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Reset semua pengaturan',
+ resetSettings: 'Reset pengaturan',
+ resetToDefaults: 'Kembalikan default',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Tempel JSON valid dengan 21 nilai numerik.',
+ fsrsErrorInvalidParams_one: 'Masukkan array JSON dengan tepat {{count}} angka finite.',
+ fsrsErrorInvalidParams_other: 'Masukkan array JSON dengan tepat {{count}} angka finite.',
+ fsrsHelper: 'Ini adalah override ahli. Nilai harus tetap berurutan.',
+ fsrsJsonLabel: 'JSON parameter FSRS',
+ fsrsTitle: 'Edit parameter FSRS',
+ fsrsDescription: 'Tempel array JSON dengan 21 angka untuk override bobot scheduler.',
+ resetDescription: 'Ini memulihkan zona waktu, batas belajar, dan pengaturan FSRS.',
+ resetDescriptionWithLanguage: 'Ini memulihkan bahasa, zona waktu, batas belajar, dan pengaturan FSRS.',
+ resetTitle: 'Reset semua pengaturan?',
+ timezoneDescription: 'Cari kota atau identifier zona waktu.',
+ timezoneSearchLabel: 'Cari zona waktu',
+ timezoneSearchPlaceholder: 'Cari zona waktu…',
+ timezoneTitle: 'Pilih zona waktu',
+ },
+ errors: {
+ couldNotResetSettings: 'Pengaturan tidak dapat direset',
+ couldNotSaveSettings: 'Pengaturan tidak dapat disimpan',
+ settingsCouldNotLoad: 'Pengaturan tidak dapat dimuat',
+ settingsUnavailable: 'Pengaturan tidak tersedia.',
+ },
+ labels: {
+ appearance: 'Tampilan',
+ automatic: 'Otomatis',
+ fsrsParameters: 'Parameter FSRS',
+ general: 'Umum',
+ language: 'Bahasa',
+ loadingSettings: 'Memuat pengaturan',
+ masteryHorizon: 'Horizon penguasaan',
+ newCardOrder: 'Urutan kartu baru',
+ newCardsPerDay: 'Kartu baru per hari',
+ reviewCardsPerDay: 'Kartu ulasan per hari',
+ savingSettings: 'Menyimpan pengaturan',
+ schedule: 'Jadwal',
+ searchNoTimezones: 'Tidak ada zona waktu yang cocok.',
+ settings: 'Pengaturan',
+ settingsReset: 'Pengaturan direset',
+ study: 'Belajar',
+ targetRecallProbability: 'Probabilitas ingat target',
+ theme: 'Tema',
+ timezone: 'Zona waktu',
+ },
+ options: {
+ languageEnUs: 'Inggris (AS)',
+ newCardsAfterReviews: 'Setelah ulasan',
+ newCardsBeforeReviews: 'Sebelum ulasan',
+ newCardsMixed: 'Campur',
+ themeDark: 'Gelap',
+ themeLight: 'Terang',
+ themeSystem: 'Sistem',
+ timezoneSystem: 'Gunakan zona waktu sistem',
+ },
+ rows: {
+ fsrsDescription: 'Bobot model ahli',
+ languageDescription: 'Bahasa antarmuka',
+ masteryHorizonDescription: 'Jumlah hari kartu harus tetap dapat diingat pada atau di atas probabilitas target agar dihitung dikuasai',
+ newCardOrderDescription: 'Urutan kartu baru relatif terhadap ulasan',
+ newCardsPerDayDescription: 'Maksimum kartu baru per hari',
+ reviewCardsPerDayDescription: 'Maksimum kartu ulasan per hari',
+ targetRecallProbabilityDescription: 'Probabilitas minimum untuk mengingat pada ulasan terjadwal berikutnya',
+ timezoneDescription: 'Gunakan zona waktu otomatis atau pilih kota.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Hapus permanen',
+ empty: 'Kosongkan',
+ emptyTrash: 'Kosongkan sampah',
+ restore: 'Pulihkan',
+ restoringItem: 'Memulihkan {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Ini menghapus "{{title}}" secara permanen. Tindakan ini tidak dapat dibatalkan.',
+ deleteItemFallbackDescription: 'Ini menghapus item ini secara permanen. Tindakan ini tidak dapat dibatalkan.',
+ deleteItemFallbackTitle: 'Hapus item?',
+ deleteItemTitle: 'Hapus "{{title}}"?',
+ emptyTrashDescription: 'Ini menghapus semua isi Sampah secara permanen. Tindakan ini tidak dapat dibatalkan.',
+ emptyTrashTitle: 'Kosongkan sampah?',
+ },
+ empty: {
+ description: 'Item yang Anda hapus akan muncul di sini sebelum dihapus permanen.',
+ title: 'Sampah kosong',
+ },
+ errors: {
+ couldNotDeleteItem: 'Item tidak dapat dihapus',
+ couldNotEmptyTrash: 'Sampah tidak dapat dikosongkan',
+ couldNotRestoreItem: 'Item tidak dapat dipulihkan',
+ trashCouldNotLoad: 'Sampah tidak dapat dimuat',
+ trashMayBeOutOfDate: 'Sampah mungkin tidak terbaru',
+ },
+ labels: {
+ deletedAge: 'Dihapus {{value}}',
+ itemCount_one: '{{count}} item',
+ itemCount_other: '{{count}} item',
+ lastEmptied: 'Terakhir dikosongkan {{value}}',
+ loadingTrash: 'Memuat Sampah',
+ originalLocation: 'Lokasi asal: {{location}}',
+ title: 'Sampah',
+ trashActions: 'Tindakan sampah {{title}}',
+ },
+ kinds: {
+ deck: 'Deck',
+ folder: 'Folder',
+ note: 'Catatan',
+ workspace: 'Workspace',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Buat workspace',
+ deleteWorkspace: 'Hapus workspace',
+ editWorkspace: 'Edit workspace',
+ newWorkspace: 'Workspace baru',
+ openWorkspace: 'Buka {{title}}',
+ openingWorkspace: 'Membuka {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Konteks belajar.',
+ editorVisual: 'Pilih jangkar visual untuk workspace ini.',
+ emptyList: 'Pisahkan deck, catatan, dan antrean ulasan berdasarkan konteks belajar.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Ini memindahkan "{{title}}" ke Sampah. Anda dapat memulihkannya nanti.',
+ deleteWorkspaceFallbackDescription: 'Ini memindahkan workspace ini ke Sampah. Anda dapat memulihkannya nanti.',
+ deleteWorkspaceFallbackTitle: 'Hapus workspace?',
+ deleteWorkspaceTitle: 'Hapus "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Mulai dengan workspace',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Workspace tidak dapat dibuat',
+ couldNotDeleteWorkspace: 'Workspace tidak dapat dihapus',
+ couldNotOpenWorkspace: 'Workspace tidak dapat dibuka',
+ couldNotSaveWorkspace: 'Workspace tidak dapat disimpan',
+ workspaceCouldNotLoad: 'Workspace tidak dapat dimuat',
+ workspacesCouldNotLoad: 'Workspace tidak dapat dimuat',
+ },
+ fields: {
+ descriptionLabel: 'Deskripsi workspace',
+ descriptionPlaceholder: 'Apa yang termasuk dalam workspace ini?',
+ namePlaceholder: 'Nama workspace',
+ untitledWorkspace: 'Workspace tanpa judul',
+ },
+ labels: {
+ createWorkspaceTitle: 'Buat workspace',
+ loadingWorkspaces: 'Memuat workspace',
+ workspace: 'Workspace',
+ workspaces: 'Workspace',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/index.ts b/ui/src/core/i18n/resources/index.ts
index d9b74bb..621cb23 100644
--- a/ui/src/core/i18n/resources/index.ts
+++ b/ui/src/core/i18n/resources/index.ts
@@ -1,12 +1,164 @@
import { defaultLocale } from '../locales'
+import { ar } from './ar'
+import { bg } from './bg'
+import { bs } from './bs'
+import { ca } from './ca'
+import { cs } from './cs'
+import { da } from './da'
+import { de } from './de'
+import { el } from './el'
import { enUS } from './en-US'
+import { es } from './es'
+import { et } from './et'
+import { fa } from './fa'
+import { fi } from './fi'
+import { fr } from './fr'
+import { he } from './he'
+import { hr } from './hr'
+import { hu } from './hu'
+import { id } from './id'
+import { it } from './it'
+import { ja } from './ja'
+import { ko } from './ko'
+import { lt } from './lt'
+import { lv } from './lv'
+import { nb } from './nb'
+import { nl } from './nl'
+import { pl } from './pl'
+import { ptBR } from './pt-BR'
+import { ro } from './ro'
+import { ru } from './ru'
+import { sk } from './sk'
+import { sl } from './sl'
+import { srLatn } from './sr-Latn'
+import { sv } from './sv'
+import { th } from './th'
+import { tr } from './tr'
+import { uk } from './uk'
+import { vi } from './vi'
+import { zhHans } from './zh-Hans'
+import { zhHant } from './zh-Hant'
export const defaultNamespace = 'translation'
export const resources = {
+ ar: {
+ [defaultNamespace]: ar,
+ },
+ bg: {
+ [defaultNamespace]: bg,
+ },
+ bs: {
+ [defaultNamespace]: bs,
+ },
+ ca: {
+ [defaultNamespace]: ca,
+ },
+ cs: {
+ [defaultNamespace]: cs,
+ },
+ da: {
+ [defaultNamespace]: da,
+ },
+ de: {
+ [defaultNamespace]: de,
+ },
+ el: {
+ [defaultNamespace]: el,
+ },
[defaultLocale]: {
[defaultNamespace]: enUS,
},
+ es: {
+ [defaultNamespace]: es,
+ },
+ et: {
+ [defaultNamespace]: et,
+ },
+ fa: {
+ [defaultNamespace]: fa,
+ },
+ fi: {
+ [defaultNamespace]: fi,
+ },
+ fr: {
+ [defaultNamespace]: fr,
+ },
+ he: {
+ [defaultNamespace]: he,
+ },
+ hr: {
+ [defaultNamespace]: hr,
+ },
+ hu: {
+ [defaultNamespace]: hu,
+ },
+ id: {
+ [defaultNamespace]: id,
+ },
+ it: {
+ [defaultNamespace]: it,
+ },
+ ja: {
+ [defaultNamespace]: ja,
+ },
+ ko: {
+ [defaultNamespace]: ko,
+ },
+ lt: {
+ [defaultNamespace]: lt,
+ },
+ lv: {
+ [defaultNamespace]: lv,
+ },
+ nb: {
+ [defaultNamespace]: nb,
+ },
+ nl: {
+ [defaultNamespace]: nl,
+ },
+ pl: {
+ [defaultNamespace]: pl,
+ },
+ 'pt-BR': {
+ [defaultNamespace]: ptBR,
+ },
+ ro: {
+ [defaultNamespace]: ro,
+ },
+ ru: {
+ [defaultNamespace]: ru,
+ },
+ sk: {
+ [defaultNamespace]: sk,
+ },
+ sl: {
+ [defaultNamespace]: sl,
+ },
+ 'sr-Latn': {
+ [defaultNamespace]: srLatn,
+ },
+ sv: {
+ [defaultNamespace]: sv,
+ },
+ th: {
+ [defaultNamespace]: th,
+ },
+ tr: {
+ [defaultNamespace]: tr,
+ },
+ uk: {
+ [defaultNamespace]: uk,
+ },
+ vi: {
+ [defaultNamespace]: vi,
+ },
+ 'zh-Hans': {
+ [defaultNamespace]: zhHans,
+ },
+ 'zh-Hant': {
+ [defaultNamespace]: zhHant,
+ },
} as const
export type TranslationResources = (typeof resources)[typeof defaultLocale]
diff --git a/ui/src/core/i18n/resources/it.ts b/ui/src/core/i18n/resources/it.ts
new file mode 100644
index 0000000..cbec46c
--- /dev/null
+++ b/ui/src/core/i18n/resources/it.ts
@@ -0,0 +1,636 @@
+export const it = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Riprova. Se continua a succedere, riapri Clear.',
+ title: 'Impossibile avviare',
+ },
+ loadingTitle: 'Preparazione del tuo spazio di studio',
+ },
+ common: {
+ actions: {
+ back: 'Indietro',
+ cancel: 'Annulla',
+ checkAgain: 'Controlla di nuovo',
+ close: 'Chiudi',
+ create: 'Crea',
+ delete: 'Elimina',
+ dismissError: 'Ignora errore',
+ dismissStatus: 'Ignora stato',
+ edit: 'Modifica',
+ itemActions: 'Azioni per {{title}}',
+ reset: 'Reimposta',
+ review: 'Ripassa',
+ save: 'Salva',
+ saveChanges: 'Salva modifiche',
+ tryAgain: 'Riprova',
+ },
+ labels: {
+ active: 'Attivo',
+ clear: 'Clear',
+ custom: 'Personalizzato',
+ default: 'Predefinito',
+ loadingEditor: 'Caricamento editor',
+ name: 'Nome',
+ completedTask: 'Attività completata',
+ description: 'Descrizione',
+ incompleteTask: 'Attività incompleta',
+ percentageInput: 'Percentuale di {{label}}',
+ visual: 'Visuale',
+ },
+ status: {
+ actionFailed: 'Azione non riuscita',
+ actionInProgress: 'Azione in corso',
+ },
+ sort: {
+ ascending: 'Cresc.',
+ column: 'Colonna',
+ descending: 'Decresc.',
+ direction: 'Direzione',
+ sort: 'Ordina',
+ },
+ search: {
+ label: 'Cerca',
+ },
+ visualPicker: {
+ allLucideIcons: 'Tutte le icone Lucide',
+ browseIconsFor: 'Sfoglia o cerca icone per {{label}}.',
+ chooseIcon: 'Scegli icona',
+ iconPicker: 'Selettore icone per {{label}}',
+ iconSearch: 'Ricerca icone per {{label}}',
+ iconsCouldNotLoad: 'Impossibile caricare le icone.',
+ loadingIcons: 'Caricamento icone',
+ loadingMoreIcons: 'Caricamento di altre icone',
+ moreIcons: 'Altre icone',
+ noIconsMatch: 'Nessuna icona corrisponde a "{{query}}".',
+ searchIconsPlaceholder: 'Cerca icone…',
+ selectedIcon: '{{label}} selezionato',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Crea',
+ newDeck: 'Nuovo mazzo',
+ newFolder: 'Nuova cartella',
+ },
+ descriptions: {
+ defaultWorkspace: 'Tieni insieme mazzi, cartelle e note.',
+ emptyWorkspace: 'Crea un mazzo, poi aggiungi note per costruire la coda di ripasso.',
+ emptyFolder: 'Crea un mazzo, poi aggiungi note per costruire una coda di ripasso.',
+ searchPlaceholder: 'Cerca cartelle, mazzi e note…',
+ },
+ empty: {
+ createFirstDeck: 'Crea il tuo primo mazzo',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Impossibile eliminare il mazzo',
+ couldNotDeleteFolder: 'Impossibile eliminare la cartella',
+ couldNotDeleteWorkspace: 'Impossibile eliminare lo spazio di lavoro',
+ dashboardCouldNotOpen: 'Impossibile aprire la dashboard',
+ decksCouldNotLoad: 'Impossibile caricare i mazzi',
+ decksMayBeOutOfDate: 'I mazzi potrebbero non essere aggiornati',
+ foldersCouldNotLoad: 'Impossibile caricare le cartelle',
+ foldersMayBeOutOfDate: 'Le cartelle potrebbero non essere aggiornate',
+ workspaceCouldNotLoad: 'Impossibile caricare lo spazio di lavoro',
+ },
+ labels: {
+ dashboard: 'Dashboard',
+ loadingDashboard: 'Caricamento dashboard',
+ newItem: 'Nuovo elemento',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Data non disponibile',
+ },
+ age: {
+ dayAgo_one: '{{count}} giorno fa',
+ dayAgo_many: '{{count}} giorni fa',
+ dayAgo_other: '{{count}} giorni fa',
+ hourAgo_one: '{{count}} ora fa',
+ hourAgo_many: '{{count}} ore fa',
+ hourAgo_other: '{{count}} ore fa',
+ justNow: 'adesso',
+ minuteAgo_one: '{{count}} minuto fa',
+ minuteAgo_many: '{{count}} minuti fa',
+ minuteAgo_other: '{{count}} minuti fa',
+ unavailable: 'data non disponibile',
+ weekAgo_one: '{{count}} settimana fa',
+ weekAgo_many: '{{count}} settimane fa',
+ weekAgo_other: '{{count}} settimane fa',
+ },
+ labels: {
+ deleted: 'Eliminato {{value}}',
+ due: 'In scadenza: {{value}}',
+ reviewed: 'Ripassato: {{value}}',
+ updated: 'Aggiornato {{value}}',
+ updatedUppercase: 'AGGIORNATO {{value}}',
+ },
+ relative: {
+ dayAgo_one: '{{count}} giorno fa',
+ dayAgo_many: '{{count}} giorni fa',
+ dayAgo_other: '{{count}} giorni fa',
+ inAMoment: 'Tra un momento',
+ inDay_one: 'Tra {{count}} giorno',
+ inDay_many: 'Tra {{count}} giorni',
+ inDay_other: 'Tra {{count}} giorni',
+ inMonth_one: 'Tra {{count}} mese',
+ inMonth_many: 'Tra {{count}} mesi',
+ inMonth_other: 'Tra {{count}} mesi',
+ inWeek_one: 'Tra {{count}} settimana',
+ inWeek_many: 'Tra {{count}} settimane',
+ inWeek_other: 'Tra {{count}} settimane',
+ justNow: 'Adesso',
+ monthAgo_one: '{{count}} mese fa',
+ monthAgo_many: '{{count}} mesi fa',
+ monthAgo_other: '{{count}} mesi fa',
+ secondsAgoShort: '{{count}} s fa',
+ minutesAgoShort: '{{count}} min fa',
+ hoursAgoShort: '{{count}} h fa',
+ today: 'Oggi',
+ tomorrow: 'Domani',
+ weekAgo_one: '{{count}} settimana fa',
+ weekAgo_many: '{{count}} settimane fa',
+ weekAgo_other: '{{count}} settimane fa',
+ yesterday: 'Ieri',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Azioni per {{title}}',
+ createDeck: 'Crea mazzo',
+ createNote: 'Crea nota',
+ deleteDeck: 'Elimina mazzo',
+ editDeck: 'Modifica mazzo',
+ newNote: 'Nuova nota',
+ openDeck: 'Apri il mazzo {{title}}',
+ saveDeck: 'Impossibile salvare il mazzo',
+ studyNow: 'Studia ora',
+ },
+ descriptions: {
+ emptyDeck: 'Aggiungi una nota per dare a questo mazzo materiale da ripassare.',
+ editorDefault: 'Mazzo di studio focalizzato.',
+ editorVisual: 'Scegli un glifo di copertina per questo mazzo.',
+ notesSearchPlaceholder: 'Cerca note…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Questo sposta "{{title}}" nel Cestino. Puoi ripristinarlo più tardi.',
+ deleteDeckFallbackDescription: 'Questo sposta questo mazzo nel Cestino. Puoi ripristinarlo più tardi.',
+ deleteDeckFallbackTitle: 'Eliminare mazzo?',
+ deleteDeckTitle: 'Eliminare "{{title}}"?',
+ deleteNoteDescription: 'Questo sposta "{{title}}" nel Cestino. Puoi ripristinarla più tardi.',
+ deleteNoteFallbackTitle: 'Eliminare nota?',
+ deleteNoteTitle: 'Eliminare "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Nessuna nota corrispondente',
+ noMatchingNotesDescription: 'Nessuna nota corrisponde a "{{query}}".',
+ thisDeckIsEmpty: 'Questo mazzo è vuoto',
+ },
+ errors: {
+ couldNotCreateDeck: 'Impossibile creare il mazzo',
+ couldNotDeleteDeck: 'Impossibile eliminare il mazzo',
+ couldNotDeleteNote: 'Impossibile eliminare la nota',
+ couldNotLoadFolderPath: 'Impossibile caricare il percorso della cartella',
+ couldNotSaveDeck: 'Impossibile salvare il mazzo',
+ deckCouldNotLoad: 'Impossibile caricare il mazzo',
+ notesCouldNotLoad: 'Impossibile caricare le note',
+ notesMayBeOutOfDate: 'Le note potrebbero non essere aggiornate',
+ },
+ fields: {
+ descriptionLabel: 'Descrizione del mazzo',
+ descriptionPlaceholder: 'Cosa ti aiuterà a ripassare questo mazzo?',
+ namePlaceholder: 'Nome del mazzo',
+ untitledDeck: 'Mazzo senza titolo',
+ untitledDeckLower: 'mazzo senza titolo',
+ },
+ labels: {
+ createDeckTitle: 'Crea mazzo',
+ deck: 'Mazzo',
+ deckNotesSearch: 'Ricerca note del mazzo',
+ deckOverview: 'Panoramica del mazzo',
+ decks: 'Mazzi',
+ due: 'In scadenza',
+ dueToday: 'In scadenza oggi',
+ loadingDeck: 'Caricamento mazzo',
+ mastery: 'Padronanza',
+ notes: 'Note',
+ },
+ sort: {
+ ariaLabel: 'Ordina mazzi',
+ dueToday: 'In scadenza oggi',
+ title: 'Titolo',
+ updated: 'Aggiornato',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'I dati sono cambiati. Aggiorna e riprova.',
+ forbidden: 'Non hai il permesso di farlo.',
+ notFound: 'Non siamo riusciti a trovare questo elemento.',
+ offline: 'Impossibile raggiungere il servizio.',
+ timeout: 'Ci sta mettendo troppo tempo. Riprova.',
+ unauthorized: 'Accedi per continuare.',
+ unavailable: 'Il servizio è temporaneamente non disponibile.',
+ },
+ fallback: {
+ unexpected: 'Errore imprevisto',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Crea cartella',
+ deleteFolder: 'Elimina cartella',
+ editFolder: 'Modifica cartella',
+ },
+ descriptions: {
+ editorDefault: 'Cartella per mazzi correlati.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Questo sposta "{{name}}" nel Cestino. Puoi ripristinarla più tardi.',
+ deleteFolderFallbackDescription: 'Questo sposta questa cartella nel Cestino. Puoi ripristinarla più tardi.',
+ deleteFolderFallbackTitle: 'Eliminare cartella?',
+ deleteFolderTitle: 'Eliminare "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'Nessuna corrispondenza in questa cartella',
+ noMatchesInFolderDescription: 'Nessuna cartella, mazzo o nota corrisponde a "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Impossibile creare la cartella',
+ couldNotDeleteFolder: 'Impossibile eliminare la cartella',
+ couldNotLoadFolderPath: 'Impossibile caricare il percorso della cartella',
+ couldNotSaveFolder: 'Impossibile salvare la cartella',
+ folderCouldNotLoad: 'Impossibile caricare la cartella',
+ },
+ fields: {
+ descriptionLabel: 'Descrizione della cartella',
+ descriptionPlaceholder: 'Cosa appartiene a questa cartella?',
+ namePlaceholder: 'Nome della cartella',
+ untitledFolder: 'Cartella senza titolo',
+ },
+ labels: {
+ createFolderTitle: 'Crea cartella',
+ folder: 'Cartella',
+ folders: 'Cartelle',
+ loadingFolder: 'Caricamento cartella',
+ name: 'Nome',
+ updated: 'Aggiornato',
+ },
+ sort: {
+ ariaLabel: 'Ordina cartelle',
+ name: 'Nome',
+ updated: 'Aggiornato',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Se i dati locali e sincronizzati non coincidono, l\'elemento apparirà qui.',
+ heading: 'Stato sincronizzazione',
+ title: 'Conflitti',
+ noConflicts: 'Nessun conflitto trovato',
+ },
+ labels: {
+ menu: 'Menu',
+ },
+ sections: {
+ settings: {
+ description: 'Personalizza ambiente e preferenze',
+ title: 'Impostazioni',
+ },
+ trash: {
+ description: 'Ripristina o elimina definitivamente gli elementi rimossi',
+ title: 'Cestino',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Chiudi editor',
+ openActions: 'Apri azioni',
+ openWorkspaces: 'Apri spazi di lavoro',
+ },
+ items: {
+ home: 'Home',
+ menu: 'Menu',
+ primary: 'Principale',
+ settings: 'Impostazioni',
+ spaces: 'Spazi',
+ trash: 'Cestino',
+ workspaces: 'Spazi di lavoro',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Aggiungi cloze',
+ deleteNote: 'Elimina nota',
+ editNote: 'Modifica nota',
+ hideDerivedCardsNote: 'Nascondi nota sulle carte derivate',
+ openNote: 'Apri {{title}}',
+ saveNote: 'Salva nota',
+ showDerivedCardsNote: 'Mostra nota sulle carte derivate',
+ },
+ descriptions: {
+ clozeFormat: 'Ogni parte nascosta diventa una carta di ripasso quando salvi.',
+ clozeFormatPrefix: 'Racchiudi il testo nascosto con',
+ derivedCardsHelper: 'Le note sono la fonte di verità per le carte derivate.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Questo sposta "{{title}}" nel Cestino. Puoi ripristinarla più tardi.',
+ deleteNoteFallbackDescription: 'Questo sposta questa nota nel Cestino. Puoi ripristinarla più tardi.',
+ deleteNoteFallbackTitle: 'Eliminare nota?',
+ deleteNoteTitle: 'Eliminare "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Impossibile creare la nota',
+ couldNotDeleteNote: 'Impossibile eliminare la nota',
+ couldNotSaveNote: 'Impossibile salvare la nota',
+ noteCouldNotLoad: 'Impossibile caricare la nota',
+ },
+ fields: {
+ back: 'Retro',
+ backPlaceholder: 'Inserisci il retro',
+ bodyPlaceholder: 'Scrivi il corpo della nota con cloze deletion…',
+ front: 'Fronte',
+ frontPlaceholder: 'Inserisci il fronte',
+ noteBody: 'Corpo della nota',
+ title: 'Titolo',
+ titlePlaceholder: 'Aggiungi un titolo alla nota',
+ untitledCloze: 'Cloze senza titolo',
+ untitledNote: 'Nota senza titolo',
+ },
+ labels: {
+ backUppercase: 'RETRO',
+ basic: 'Base',
+ basicLower: 'base',
+ basicUppercase: 'BASE',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Formato cloze',
+ clozeUppercase: 'CLOZE',
+ deck: 'Mazzo',
+ derivedCards: 'CARTE DERIVATE',
+ due: 'In scadenza',
+ frontUppercase: 'FRONTE',
+ inProgress: 'In corso',
+ inProgressUppercase: 'IN CORSO',
+ loadingNote: 'Caricamento nota',
+ loadingNoteEditor: 'Caricamento editor note',
+ markdownFormatting: 'Formattazione Markdown',
+ mastered: 'Acquisita',
+ masteredUppercase: 'ACQUISITA',
+ newNote: 'Nuova nota',
+ noteBody: 'CORPO NOTA',
+ noteContent: 'Contenuto nota',
+ noteDetails: 'Dettagli nota',
+ noteMetadata: 'Metadati nota',
+ noteType: 'Tipo di nota',
+ notes: 'Note',
+ reviewed: 'Ripassata',
+ studyProgress: 'Progresso di studio',
+ studyProgressUppercase: 'PROGRESSO DI STUDIO',
+ titleUppercase: 'TITOLO',
+ updated: 'Aggiornata',
+ },
+ sort: {
+ ariaLabel: 'Ordina note',
+ title: 'Titolo',
+ updated: 'Aggiornata',
+ },
+ toolbar: {
+ bold: 'Grassetto',
+ italic: 'Corsivo',
+ link: 'Link',
+ list: 'Elenco',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Di nuovo',
+ backToDeck: 'Torna al mazzo',
+ continueReview: 'Continua ripasso',
+ easy: 'Facile',
+ good: 'Buono',
+ hard: 'Difficile',
+ newNote: 'Nuova nota',
+ showAnswer: 'Mostra risposta',
+ },
+ errors: {
+ couldNotGradeCard: 'Impossibile valutare la carta',
+ reviewCouldNotLoad: 'Impossibile caricare il ripasso',
+ reviewCouldNotStart: 'Impossibile avviare il ripasso',
+ summaryCouldNotLoad: 'Impossibile caricare il riepilogo del ripasso',
+ summaryNotAvailable: 'Il riepilogo del ripasso non è disponibile',
+ summaryNotComplete: 'Questo ripasso non è ancora completo.',
+ },
+ labels: {
+ cardsReviewed: 'Carte ripassate',
+ deck: 'Mazzo',
+ duration: 'Durata',
+ loadingReview: 'Caricamento ripasso',
+ loadingSummary: 'Caricamento riepilogo',
+ progress: 'Progresso ripasso',
+ review: 'Ripasso',
+ reviewComplete: 'Ripasso completato',
+ reviewed_one: 'Ripassata {{count}}',
+ reviewed_many: 'Ripassate {{count}}',
+ reviewed_other: 'Ripassate {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} h {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'I tuoi progressi sono stati salvati in questo mazzo.',
+ },
+ unavailable: {
+ description: 'Aggiungi una nota per far entrare questo mazzo nella coda di ripasso.',
+ title: 'Nessuna carta da ripassare',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Cancella ricerca',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Nessuna corrispondenza in questo spazio di lavoro',
+ noMatchesInWorkspaceDescription: 'Nessuna cartella, mazzo o nota corrisponde a "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Impossibile completare la ricerca',
+ },
+ labels: {
+ results: 'Risultati ricerca',
+ resultsFor: 'Risultati per "{{query}}"',
+ searchingContent: 'Ricerca contenuti',
+ },
+ resultGroups: {
+ deck: 'Mazzi',
+ folder: 'Cartelle',
+ note: 'Note',
+ },
+ resultKinds: {
+ deck: 'mazzo',
+ folder: 'cartella',
+ note: 'nota',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Reimposta tutte le impostazioni',
+ resetSettings: 'Reimposta impostazioni',
+ resetToDefaults: 'Ripristina predefiniti',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Incolla JSON valido con 21 valori numerici.',
+ fsrsErrorInvalidParams_one: 'Inserisci un array JSON con esattamente {{count}} numero finito.',
+ fsrsErrorInvalidParams_many: 'Inserisci un array JSON con esattamente {{count}} numeri finiti.',
+ fsrsErrorInvalidParams_other: 'Inserisci un array JSON con esattamente {{count}} numeri finiti.',
+ fsrsHelper: 'Questa è una modifica esperta. I valori devono restare in ordine.',
+ fsrsJsonLabel: 'JSON parametri FSRS',
+ fsrsTitle: 'Modifica parametri FSRS',
+ fsrsDescription: 'Incolla un array JSON con 21 numeri per sovrascrivere i pesi dello scheduler.',
+ resetDescription: 'Ripristina fuso orario, limiti di studio e impostazioni FSRS.',
+ resetDescriptionWithLanguage: 'Ripristina lingua, fuso orario, limiti di studio e impostazioni FSRS.',
+ resetTitle: 'Reimpostare tutte le impostazioni?',
+ timezoneDescription: 'Cerca una città o un identificatore di fuso orario.',
+ timezoneSearchLabel: 'Cerca fusi orari',
+ timezoneSearchPlaceholder: 'Cerca fusi orari…',
+ timezoneTitle: 'Scegli fuso orario',
+ },
+ errors: {
+ couldNotResetSettings: 'Impossibile reimpostare le impostazioni',
+ couldNotSaveSettings: 'Impossibile salvare le impostazioni',
+ settingsCouldNotLoad: 'Impossibile caricare le impostazioni',
+ settingsUnavailable: 'Le impostazioni non sono disponibili.',
+ },
+ labels: {
+ appearance: 'Aspetto',
+ automatic: 'Automatico',
+ fsrsParameters: 'Parametri FSRS',
+ general: 'Generali',
+ language: 'Lingua',
+ loadingSettings: 'Caricamento impostazioni',
+ masteryHorizon: 'Orizzonte di padronanza',
+ newCardOrder: 'Ordine nuove carte',
+ newCardsPerDay: 'Nuove carte al giorno',
+ reviewCardsPerDay: 'Carte di ripasso al giorno',
+ savingSettings: 'Salvataggio impostazioni',
+ schedule: 'Programma',
+ searchNoTimezones: 'Nessun fuso orario corrispondente.',
+ settings: 'Impostazioni',
+ settingsReset: 'Impostazioni reimpostate',
+ study: 'Studio',
+ targetRecallProbability: 'Probabilità di richiamo target',
+ theme: 'Tema',
+ timezone: 'Fuso orario',
+ },
+ options: {
+ languageEnUs: 'Inglese (USA)',
+ newCardsAfterReviews: 'Dopo i ripassi',
+ newCardsBeforeReviews: 'Prima dei ripassi',
+ newCardsMixed: 'Misto',
+ themeDark: 'Scuro',
+ themeLight: 'Chiaro',
+ themeSystem: 'Sistema',
+ timezoneSystem: 'Usa fuso orario di sistema',
+ },
+ rows: {
+ fsrsDescription: 'Pesi del modello esperto',
+ languageDescription: 'Lingua dell\'interfaccia',
+ masteryHorizonDescription: 'Giorni in cui una carta deve restare richiamabile alla probabilità target o superiore per contare come acquisita',
+ newCardOrderDescription: 'Ordine delle nuove carte rispetto ai ripassi',
+ newCardsPerDayDescription: 'Massimo di nuove carte al giorno',
+ reviewCardsPerDayDescription: 'Massimo di carte di ripasso al giorno',
+ targetRecallProbabilityDescription: 'Probabilita minima di richiamo al prossimo ripasso programmato',
+ timezoneDescription: 'Usa il fuso orario automatico o scegli una città.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Elimina definitivamente',
+ empty: 'Svuota',
+ emptyTrash: 'Svuota cestino',
+ restore: 'Ripristina',
+ restoringItem: 'Ripristino di {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Questo elimina definitivamente "{{title}}". Non può essere annullato.',
+ deleteItemFallbackDescription: 'Questo elimina definitivamente questo elemento. Non può essere annullato.',
+ deleteItemFallbackTitle: 'Eliminare elemento?',
+ deleteItemTitle: 'Eliminare "{{title}}"?',
+ emptyTrashDescription: 'Questo elimina definitivamente tutto nel Cestino. Non può essere annullato.',
+ emptyTrashTitle: 'Svuotare cestino?',
+ },
+ empty: {
+ description: 'Gli elementi eliminati appariranno qui prima della rimozione definitiva.',
+ title: 'Il Cestino è vuoto',
+ },
+ errors: {
+ couldNotDeleteItem: 'Impossibile eliminare l\'elemento',
+ couldNotEmptyTrash: 'Impossibile svuotare il Cestino',
+ couldNotRestoreItem: 'Impossibile ripristinare l\'elemento',
+ trashCouldNotLoad: 'Impossibile caricare il Cestino',
+ trashMayBeOutOfDate: 'Il Cestino potrebbe non essere aggiornato',
+ },
+ labels: {
+ deletedAge: 'Eliminato {{value}}',
+ itemCount_one: '{{count}} elemento',
+ itemCount_many: '{{count}} elementi',
+ itemCount_other: '{{count}} elementi',
+ lastEmptied: 'Ultimo svuotamento {{value}}',
+ loadingTrash: 'Caricamento Cestino',
+ originalLocation: 'Posizione originale: {{location}}',
+ title: 'Cestino',
+ trashActions: 'Azioni cestino per {{title}}',
+ },
+ kinds: {
+ deck: 'Mazzo',
+ folder: 'Cartella',
+ note: 'Nota',
+ workspace: 'Spazio di lavoro',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Crea spazio di lavoro',
+ deleteWorkspace: 'Elimina spazio di lavoro',
+ editWorkspace: 'Modifica spazio di lavoro',
+ newWorkspace: 'Nuovo spazio di lavoro',
+ openWorkspace: 'Apri {{title}}',
+ openingWorkspace: 'Apertura di {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Contesto di studio.',
+ editorVisual: 'Scegli un riferimento visivo per questo spazio di lavoro.',
+ emptyList: 'Separa mazzi, note e code di ripasso per contesto di studio.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Questo sposta "{{title}}" nel Cestino. Puoi ripristinarlo più tardi.',
+ deleteWorkspaceFallbackDescription: 'Questo sposta questo spazio di lavoro nel Cestino. Puoi ripristinarlo più tardi.',
+ deleteWorkspaceFallbackTitle: 'Eliminare spazio di lavoro?',
+ deleteWorkspaceTitle: 'Eliminare "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Inizia con uno spazio di lavoro',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Impossibile creare lo spazio di lavoro',
+ couldNotDeleteWorkspace: 'Impossibile eliminare lo spazio di lavoro',
+ couldNotOpenWorkspace: 'Impossibile aprire lo spazio di lavoro',
+ couldNotSaveWorkspace: 'Impossibile salvare lo spazio di lavoro',
+ workspaceCouldNotLoad: 'Impossibile caricare lo spazio di lavoro',
+ workspacesCouldNotLoad: 'Impossibile caricare gli spazi di lavoro',
+ },
+ fields: {
+ descriptionLabel: 'Descrizione dello spazio di lavoro',
+ descriptionPlaceholder: 'Cosa appartiene a questo spazio di lavoro?',
+ namePlaceholder: 'Nome dello spazio di lavoro',
+ untitledWorkspace: 'Spazio di lavoro senza titolo',
+ },
+ labels: {
+ createWorkspaceTitle: 'Crea spazio di lavoro',
+ loadingWorkspaces: 'Caricamento spazi di lavoro',
+ workspace: 'Spazio di lavoro',
+ workspaces: 'Spazi di lavoro',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/ja.ts b/ui/src/core/i18n/resources/ja.ts
new file mode 100644
index 0000000..f889300
--- /dev/null
+++ b/ui/src/core/i18n/resources/ja.ts
@@ -0,0 +1,623 @@
+export const ja = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'もう一度お試しください。問題が続く場合は Clear を開き直してください。',
+ title: '開始できませんでした',
+ },
+ loadingTitle: '学習スペースを準備しています',
+ },
+ common: {
+ actions: {
+ back: '戻る',
+ cancel: 'キャンセル',
+ checkAgain: '再確認',
+ close: '閉じる',
+ create: '作成',
+ delete: '削除',
+ dismissError: 'エラーを閉じる',
+ dismissStatus: 'ステータスを閉じる',
+ edit: '編集',
+ itemActions: '{{title}} の操作',
+ reset: 'リセット',
+ review: '復習',
+ save: '保存',
+ saveChanges: '変更を保存',
+ tryAgain: 'もう一度試す',
+ },
+ labels: {
+ active: '有効',
+ clear: 'Clear',
+ custom: 'カスタム',
+ default: 'デフォルト',
+ loadingEditor: 'エディターを読み込み中',
+ name: '名前',
+ completedTask: '完了したタスク',
+ description: '説明',
+ incompleteTask: '未完了のタスク',
+ percentageInput: '{{label}} の割合',
+ visual: 'ビジュアル',
+ },
+ status: {
+ actionFailed: '操作に失敗しました',
+ actionInProgress: '操作中',
+ },
+ sort: {
+ ascending: '昇順',
+ column: '列',
+ descending: '降順',
+ direction: '方向',
+ sort: '並べ替え',
+ },
+ search: {
+ label: '検索',
+ },
+ visualPicker: {
+ allLucideIcons: 'すべての Lucide アイコン',
+ browseIconsFor: '{{label}} のアイコンを参照または検索します。',
+ chooseIcon: 'アイコンを選択',
+ iconPicker: '{{label}} のアイコン選択',
+ iconSearch: '{{label}} のアイコン検索',
+ iconsCouldNotLoad: 'アイコンを読み込めませんでした。',
+ loadingIcons: 'アイコンを読み込み中',
+ loadingMoreIcons: 'さらにアイコンを読み込み中',
+ moreIcons: 'さらに表示',
+ noIconsMatch: '"{{query}}" に一致するアイコンはありません。',
+ searchIconsPlaceholder: 'アイコンを検索…',
+ selectedIcon: '選択中の {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: '作成',
+ newDeck: '新しいデッキ',
+ newFolder: '新しいフォルダー',
+ },
+ descriptions: {
+ defaultWorkspace: 'デッキ、フォルダー、ノートをまとめて管理します。',
+ emptyWorkspace: 'デッキを作成し、ノートを追加して復習キューを作りましょう。',
+ emptyFolder: 'デッキを作成し、ノートを追加して復習キューを作りましょう。',
+ searchPlaceholder: 'フォルダー、デッキ、ノートを検索…',
+ },
+ empty: {
+ createFirstDeck: '最初のデッキを作成',
+ },
+ errors: {
+ couldNotDeleteDeck: 'デッキを削除できませんでした',
+ couldNotDeleteFolder: 'フォルダーを削除できませんでした',
+ couldNotDeleteWorkspace: 'ワークスペースを削除できませんでした',
+ dashboardCouldNotOpen: 'ダッシュボードを開けませんでした',
+ decksCouldNotLoad: 'デッキを読み込めませんでした',
+ decksMayBeOutOfDate: 'デッキが最新でない可能性があります',
+ foldersCouldNotLoad: 'フォルダーを読み込めませんでした',
+ foldersMayBeOutOfDate: 'フォルダーが最新でない可能性があります',
+ workspaceCouldNotLoad: 'ワークスペースを読み込めませんでした',
+ },
+ labels: {
+ dashboard: 'ダッシュボード',
+ loadingDashboard: 'ダッシュボードを読み込み中',
+ newItem: '新しい項目',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: '日付を利用できません',
+ },
+ age: {
+ dayAgo_one: '{{count}}日前',
+ dayAgo_other: '{{count}}日前',
+ hourAgo_one: '{{count}}時間前',
+ hourAgo_other: '{{count}}時間前',
+ justNow: 'たった今',
+ minuteAgo_one: '{{count}}分前',
+ minuteAgo_other: '{{count}}分前',
+ unavailable: '日付を利用できません',
+ weekAgo_one: '{{count}}週間前',
+ weekAgo_other: '{{count}}週間前',
+ },
+ labels: {
+ deleted: '{{value}}に削除',
+ due: '期限: {{value}}',
+ reviewed: '復習済み: {{value}}',
+ updated: '{{value}}に更新',
+ updatedUppercase: '{{value}}に更新',
+ },
+ relative: {
+ dayAgo_one: '{{count}}日前',
+ dayAgo_other: '{{count}}日前',
+ inAMoment: 'まもなく',
+ inDay_one: '{{count}}日後',
+ inDay_other: '{{count}}日後',
+ inMonth_one: '{{count}}か月後',
+ inMonth_other: '{{count}}か月後',
+ inWeek_one: '{{count}}週間後',
+ inWeek_other: '{{count}}週間後',
+ justNow: 'たった今',
+ monthAgo_one: '{{count}}か月前',
+ monthAgo_other: '{{count}}か月前',
+ secondsAgoShort: '{{count}}秒前',
+ minutesAgoShort: '{{count}}分前',
+ hoursAgoShort: '{{count}}時間前',
+ today: '今日',
+ tomorrow: '明日',
+ weekAgo_one: '{{count}}週間前',
+ weekAgo_other: '{{count}}週間前',
+ yesterday: '昨日',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: '{{title}} の操作',
+ createDeck: 'デッキを作成',
+ createNote: 'ノートを作成',
+ deleteDeck: 'デッキを削除',
+ editDeck: 'デッキを編集',
+ newNote: '新しいノート',
+ openDeck: '{{title}} デッキを開く',
+ saveDeck: 'デッキを保存できませんでした',
+ studyNow: '今すぐ学習',
+ },
+ descriptions: {
+ emptyDeck: '復習する内容を作るためにノートを追加してください。',
+ editorDefault: '集中学習用のデッキ。',
+ editorVisual: 'このデッキのカバーグリフを選びます。',
+ notesSearchPlaceholder: 'ノートを検索…',
+ },
+ dialogs: {
+ deleteDeckDescription: '"{{title}}" をゴミ箱に移動します。後で復元できます。',
+ deleteDeckFallbackDescription: 'このデッキをゴミ箱に移動します。後で復元できます。',
+ deleteDeckFallbackTitle: 'デッキを削除しますか?',
+ deleteDeckTitle: '"{{title}}" を削除しますか?',
+ deleteNoteDescription: '"{{title}}" をゴミ箱に移動します。後で復元できます。',
+ deleteNoteFallbackTitle: 'ノートを削除しますか?',
+ deleteNoteTitle: '"{{title}}" を削除しますか?',
+ },
+ empty: {
+ noMatchingNotes: '一致するノートはありません',
+ noMatchingNotesDescription: '"{{query}}" に一致するノートはありません。',
+ thisDeckIsEmpty: 'このデッキは空です',
+ },
+ errors: {
+ couldNotCreateDeck: 'デッキを作成できませんでした',
+ couldNotDeleteDeck: 'デッキを削除できませんでした',
+ couldNotDeleteNote: 'ノートを削除できませんでした',
+ couldNotLoadFolderPath: 'フォルダーのパスを読み込めませんでした',
+ couldNotSaveDeck: 'デッキを保存できませんでした',
+ deckCouldNotLoad: 'デッキを読み込めませんでした',
+ notesCouldNotLoad: 'ノートを読み込めませんでした',
+ notesMayBeOutOfDate: 'ノートが最新でない可能性があります',
+ },
+ fields: {
+ descriptionLabel: 'デッキの説明',
+ descriptionPlaceholder: 'このデッキで何を復習しますか?',
+ namePlaceholder: 'デッキ名',
+ untitledDeck: '無題のデッキ',
+ untitledDeckLower: '無題のデッキ',
+ },
+ labels: {
+ createDeckTitle: 'デッキを作成',
+ deck: 'デッキ',
+ deckNotesSearch: 'デッキ内ノート検索',
+ deckOverview: 'デッキ概要',
+ decks: 'デッキ',
+ due: '期限',
+ dueToday: '今日が期限',
+ loadingDeck: 'デッキを読み込み中',
+ mastery: '習熟度',
+ notes: 'ノート',
+ },
+ sort: {
+ ariaLabel: 'デッキを並べ替え',
+ dueToday: '今日が期限',
+ title: 'タイトル',
+ updated: '更新日',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'データが変更されました。更新してからもう一度お試しください。',
+ forbidden: 'この操作を行う権限がありません。',
+ notFound: 'この項目が見つかりませんでした。',
+ offline: 'サービスに接続できません。',
+ timeout: '時間がかかりすぎました。もう一度お試しください。',
+ unauthorized: '続行するにはサインインしてください。',
+ unavailable: 'サービスは一時的に利用できません。',
+ },
+ fallback: {
+ unexpected: '予期しないエラー',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'フォルダーを作成',
+ deleteFolder: 'フォルダーを削除',
+ editFolder: 'フォルダーを編集',
+ },
+ descriptions: {
+ editorDefault: '関連するデッキ用のフォルダー。',
+ },
+ dialogs: {
+ deleteFolderDescription: '"{{name}}" をゴミ箱に移動します。後で復元できます。',
+ deleteFolderFallbackDescription: 'このフォルダーをゴミ箱に移動します。後で復元できます。',
+ deleteFolderFallbackTitle: 'フォルダーを削除しますか?',
+ deleteFolderTitle: '"{{name}}" を削除しますか?',
+ },
+ empty: {
+ noMatchesInFolder: 'このフォルダーに一致する項目はありません',
+ noMatchesInFolderDescription: '"{{query}}" に一致するフォルダー、デッキ、ノートはありません。',
+ },
+ errors: {
+ couldNotCreateFolder: 'フォルダーを作成できませんでした',
+ couldNotDeleteFolder: 'フォルダーを削除できませんでした',
+ couldNotLoadFolderPath: 'フォルダーのパスを読み込めませんでした',
+ couldNotSaveFolder: 'フォルダーを保存できませんでした',
+ folderCouldNotLoad: 'フォルダーを読み込めませんでした',
+ },
+ fields: {
+ descriptionLabel: 'フォルダーの説明',
+ descriptionPlaceholder: 'このフォルダーには何を入れますか?',
+ namePlaceholder: 'フォルダー名',
+ untitledFolder: '無題のフォルダー',
+ },
+ labels: {
+ createFolderTitle: 'フォルダーを作成',
+ folder: 'フォルダー',
+ folders: 'フォルダー',
+ loadingFolder: 'フォルダーを読み込み中',
+ name: '名前',
+ updated: '更新日',
+ },
+ sort: {
+ ariaLabel: 'フォルダーを並べ替え',
+ name: '名前',
+ updated: '更新日',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'ローカルデータと同期済みデータが一致しない場合、項目はここに表示されます。',
+ heading: '同期ステータス',
+ title: '競合',
+ noConflicts: '競合はありません',
+ },
+ labels: {
+ menu: 'メニュー',
+ },
+ sections: {
+ settings: {
+ description: '環境と設定をカスタマイズ',
+ title: '設定',
+ },
+ trash: {
+ description: '削除した項目を復元または完全に削除',
+ title: 'ゴミ箱',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'エディターを閉じる',
+ openActions: '操作を開く',
+ openWorkspaces: 'ワークスペースを開く',
+ },
+ items: {
+ home: 'ホーム',
+ menu: 'メニュー',
+ primary: 'メイン',
+ settings: '設定',
+ spaces: 'スペース',
+ trash: 'ゴミ箱',
+ workspaces: 'ワークスペース',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: '穴埋めを追加',
+ deleteNote: 'ノートを削除',
+ editNote: 'ノートを編集',
+ hideDerivedCardsNote: '派生カードの注記を非表示',
+ openNote: '{{title}} を開く',
+ saveNote: 'ノートを保存',
+ showDerivedCardsNote: '派生カードの注記を表示',
+ },
+ descriptions: {
+ clozeFormat: '保存すると、隠した各部分が復習カードになります。',
+ clozeFormatPrefix: '隠すテキストを次で囲みます',
+ derivedCardsHelper: 'ノートは派生カードの信頼できる元データです。',
+ },
+ dialogs: {
+ deleteNoteDescription: '"{{title}}" をゴミ箱に移動します。後で復元できます。',
+ deleteNoteFallbackDescription: 'このノートをゴミ箱に移動します。後で復元できます。',
+ deleteNoteFallbackTitle: 'ノートを削除しますか?',
+ deleteNoteTitle: '"{{title}}" を削除しますか?',
+ },
+ errors: {
+ couldNotCreateNote: 'ノートを作成できませんでした',
+ couldNotDeleteNote: 'ノートを削除できませんでした',
+ couldNotSaveNote: 'ノートを保存できませんでした',
+ noteCouldNotLoad: 'ノートを読み込めませんでした',
+ },
+ fields: {
+ back: '裏面',
+ backPlaceholder: '裏面を入力',
+ bodyPlaceholder: '穴埋め削除を使ってノート本文を書く…',
+ front: '表面',
+ frontPlaceholder: '表面を入力',
+ noteBody: 'ノート本文',
+ title: 'タイトル',
+ titlePlaceholder: 'ノートのタイトルを追加',
+ untitledCloze: '無題の穴埋め',
+ untitledNote: '無題のノート',
+ },
+ labels: {
+ backUppercase: '裏面',
+ basic: '基本',
+ basicLower: '基本',
+ basicUppercase: '基本',
+ cloze: '穴埋め',
+ clozeLower: '穴埋め',
+ clozeFormat: '穴埋め形式',
+ clozeUppercase: '穴埋め',
+ deck: 'デッキ',
+ derivedCards: '派生カード',
+ due: '期限',
+ frontUppercase: '表面',
+ inProgress: '進行中',
+ inProgressUppercase: '進行中',
+ loadingNote: 'ノートを読み込み中',
+ loadingNoteEditor: 'ノートエディターを読み込み中',
+ markdownFormatting: 'Markdown 書式',
+ mastered: '習得済み',
+ masteredUppercase: '習得済み',
+ newNote: '新しいノート',
+ noteBody: 'ノート本文',
+ noteContent: 'ノート内容',
+ noteDetails: 'ノート詳細',
+ noteMetadata: 'ノートメタデータ',
+ noteType: 'ノートタイプ',
+ notes: 'ノート',
+ reviewed: '復習済み',
+ studyProgress: '学習進捗',
+ studyProgressUppercase: '学習進捗',
+ titleUppercase: 'タイトル',
+ updated: '更新日',
+ },
+ sort: {
+ ariaLabel: 'ノートを並べ替え',
+ title: 'タイトル',
+ updated: '更新日',
+ },
+ toolbar: {
+ bold: '太字',
+ italic: '斜体',
+ link: 'リンク',
+ list: 'リスト',
+ },
+ },
+ review: {
+ actions: {
+ again: 'もう一度',
+ backToDeck: 'デッキに戻る',
+ continueReview: '復習を続ける',
+ easy: '簡単',
+ good: '良い',
+ hard: '難しい',
+ newNote: '新しいノート',
+ showAnswer: '答えを表示',
+ },
+ errors: {
+ couldNotGradeCard: 'カードを採点できませんでした',
+ reviewCouldNotLoad: '復習を読み込めませんでした',
+ reviewCouldNotStart: '復習を開始できませんでした',
+ summaryCouldNotLoad: '復習サマリーを読み込めませんでした',
+ summaryNotAvailable: '復習サマリーは利用できません',
+ summaryNotComplete: 'この復習はまだ完了していません。',
+ },
+ labels: {
+ cardsReviewed: '復習したカード',
+ deck: 'デッキ',
+ duration: '時間',
+ loadingReview: '復習を読み込み中',
+ loadingSummary: 'サマリーを読み込み中',
+ progress: '復習の進捗',
+ review: '復習',
+ reviewComplete: '復習完了',
+ reviewed_one: '{{count}} 件復習済み',
+ reviewed_other: '{{count}} 件復習済み',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}}時間 {{minutes}}分',
+ durationMinutes: '{{minutes}}分',
+ durationSeconds: '{{seconds}}秒',
+ saved: '進捗はこのデッキに保存されました。',
+ },
+ unavailable: {
+ description: 'このデッキを復習キューに入れるにはノートを追加してください。',
+ title: '復習するカードがありません',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: '検索をクリア',
+ },
+ empty: {
+ noMatchesInWorkspace: 'このワークスペースに一致する項目はありません',
+ noMatchesInWorkspaceDescription: '"{{query}}" に一致するフォルダー、デッキ、ノートはありません。',
+ },
+ errors: {
+ couldNotComplete: '検索を完了できませんでした',
+ },
+ labels: {
+ results: '検索結果',
+ resultsFor: '"{{query}}" の結果',
+ searchingContent: 'コンテンツを検索中',
+ },
+ resultGroups: {
+ deck: 'デッキ',
+ folder: 'フォルダー',
+ note: 'ノート',
+ },
+ resultKinds: {
+ deck: 'デッキ',
+ folder: 'フォルダー',
+ note: 'ノート',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'すべての設定をリセット',
+ resetSettings: '設定をリセット',
+ resetToDefaults: 'デフォルトに戻す',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: '21 個の数値を含む有効な JSON を貼り付けてください。',
+ fsrsErrorInvalidParams_one: 'ちょうど {{count}} 個の有限数を含む JSON 配列を入力してください。',
+ fsrsErrorInvalidParams_other: 'ちょうど {{count}} 個の有限数を含む JSON 配列を入力してください。',
+ fsrsHelper: 'これは上級者向けの上書き設定です。値の順序を保ってください。',
+ fsrsJsonLabel: 'FSRS パラメーター JSON',
+ fsrsTitle: 'FSRS パラメーターを編集',
+ fsrsDescription: 'scheduler の重みを上書きするには、21 個の数値を含む JSON 配列を貼り付けます。',
+ resetDescription: 'タイムゾーン、学習上限、FSRS 設定を復元します。',
+ resetDescriptionWithLanguage: '言語、タイムゾーン、学習上限、FSRS 設定を復元します。',
+ resetTitle: 'すべての設定をリセットしますか?',
+ timezoneDescription: '都市またはタイムゾーン識別子を検索します。',
+ timezoneSearchLabel: 'タイムゾーンを検索',
+ timezoneSearchPlaceholder: 'タイムゾーンを検索…',
+ timezoneTitle: 'タイムゾーンを選択',
+ },
+ errors: {
+ couldNotResetSettings: '設定をリセットできませんでした',
+ couldNotSaveSettings: '設定を保存できませんでした',
+ settingsCouldNotLoad: '設定を読み込めませんでした',
+ settingsUnavailable: '設定を利用できません。',
+ },
+ labels: {
+ appearance: '外観',
+ automatic: '自動',
+ fsrsParameters: 'FSRS パラメーター',
+ general: '一般',
+ language: '言語',
+ loadingSettings: '設定を読み込み中',
+ masteryHorizon: '習熟判定期間',
+ newCardOrder: '新規カードの順序',
+ newCardsPerDay: '1日の新規カード',
+ reviewCardsPerDay: '1日の復習カード',
+ savingSettings: '設定を保存中',
+ schedule: 'スケジュール',
+ searchNoTimezones: '一致するタイムゾーンはありません。',
+ settings: '設定',
+ settingsReset: '設定をリセットしました',
+ study: '学習',
+ targetRecallProbability: '目標想起確率',
+ theme: 'テーマ',
+ timezone: 'タイムゾーン',
+ },
+ options: {
+ languageEnUs: '英語(米国)',
+ newCardsAfterReviews: '復習の後',
+ newCardsBeforeReviews: '復習の前',
+ newCardsMixed: '混在',
+ themeDark: 'ダーク',
+ themeLight: 'ライト',
+ themeSystem: 'システム',
+ timezoneSystem: 'システムのタイムゾーンを使用',
+ },
+ rows: {
+ fsrsDescription: '上級モデルの重み',
+ languageDescription: 'インターフェイスの言語',
+ masteryHorizonDescription: 'カードが目標確率以上で想起可能な状態を保つ必要がある日数',
+ newCardOrderDescription: '復習に対する新規カードの順序',
+ newCardsPerDayDescription: '1日あたりの新規カード上限',
+ reviewCardsPerDayDescription: '1日あたりの復習カード上限',
+ targetRecallProbabilityDescription: '次回予定復習での最小想起確率',
+ timezoneDescription: '自動タイムゾーンを使うか、都市を選択します。',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: '完全に削除',
+ empty: '空にする',
+ emptyTrash: 'ゴミ箱を空にする',
+ restore: '復元',
+ restoringItem: '{{title}} を復元中',
+ },
+ dialogs: {
+ deleteItemDescription: '"{{title}}" を完全に削除します。元に戻せません。',
+ deleteItemFallbackDescription: 'この項目を完全に削除します。元に戻せません。',
+ deleteItemFallbackTitle: '項目を削除しますか?',
+ deleteItemTitle: '"{{title}}" を削除しますか?',
+ emptyTrashDescription: 'ゴミ箱内のすべてを完全に削除します。元に戻せません。',
+ emptyTrashTitle: 'ゴミ箱を空にしますか?',
+ },
+ empty: {
+ description: '削除した項目は完全に削除される前にここに表示されます。',
+ title: 'ゴミ箱は空です',
+ },
+ errors: {
+ couldNotDeleteItem: '項目を削除できませんでした',
+ couldNotEmptyTrash: 'ゴミ箱を空にできませんでした',
+ couldNotRestoreItem: '項目を復元できませんでした',
+ trashCouldNotLoad: 'ゴミ箱を読み込めませんでした',
+ trashMayBeOutOfDate: 'ゴミ箱が最新でない可能性があります',
+ },
+ labels: {
+ deletedAge: '{{value}}に削除',
+ itemCount_one: '{{count}} 件',
+ itemCount_other: '{{count}} 件',
+ lastEmptied: '最後に空にした日時: {{value}}',
+ loadingTrash: 'ゴミ箱を読み込み中',
+ originalLocation: '元の場所: {{location}}',
+ title: 'ゴミ箱',
+ trashActions: '{{title}} のゴミ箱操作',
+ },
+ kinds: {
+ deck: 'デッキ',
+ folder: 'フォルダー',
+ note: 'ノート',
+ workspace: 'ワークスペース',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'ワークスペースを作成',
+ deleteWorkspace: 'ワークスペースを削除',
+ editWorkspace: 'ワークスペースを編集',
+ newWorkspace: '新しいワークスペース',
+ openWorkspace: '{{title}} を開く',
+ openingWorkspace: '{{title}} を開いています',
+ },
+ descriptions: {
+ editorDefault: '学習コンテキスト。',
+ editorVisual: 'このワークスペースの視覚的な目印を選びます。',
+ emptyList: 'デッキ、ノート、復習キューを学習コンテキストごとに分けます。',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: '"{{title}}" をゴミ箱に移動します。後で復元できます。',
+ deleteWorkspaceFallbackDescription: 'このワークスペースをゴミ箱に移動します。後で復元できます。',
+ deleteWorkspaceFallbackTitle: 'ワークスペースを削除しますか?',
+ deleteWorkspaceTitle: '"{{title}}" を削除しますか?',
+ },
+ empty: {
+ startWithWorkspace: 'ワークスペースから始める',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'ワークスペースを作成できませんでした',
+ couldNotDeleteWorkspace: 'ワークスペースを削除できませんでした',
+ couldNotOpenWorkspace: 'ワークスペースを開けませんでした',
+ couldNotSaveWorkspace: 'ワークスペースを保存できませんでした',
+ workspaceCouldNotLoad: 'ワークスペースを読み込めませんでした',
+ workspacesCouldNotLoad: 'ワークスペースを読み込めませんでした',
+ },
+ fields: {
+ descriptionLabel: 'ワークスペースの説明',
+ descriptionPlaceholder: 'このワークスペースには何を入れますか?',
+ namePlaceholder: 'ワークスペース名',
+ untitledWorkspace: '無題のワークスペース',
+ },
+ labels: {
+ createWorkspaceTitle: 'ワークスペースを作成',
+ loadingWorkspaces: 'ワークスペースを読み込み中',
+ workspace: 'ワークスペース',
+ workspaces: 'ワークスペース',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/ko.ts b/ui/src/core/i18n/resources/ko.ts
new file mode 100644
index 0000000..1a3580f
--- /dev/null
+++ b/ui/src/core/i18n/resources/ko.ts
@@ -0,0 +1,623 @@
+export const ko = {
+ bootstrap: {
+ error: {
+ fallbackMessage: '다시 시도하세요. 문제가 계속되면 Clear를 다시 여세요.',
+ title: '시작할 수 없음',
+ },
+ loadingTitle: '학습 공간을 준비하는 중',
+ },
+ common: {
+ actions: {
+ back: '뒤로',
+ cancel: '취소',
+ checkAgain: '다시 확인',
+ close: '닫기',
+ create: '만들기',
+ delete: '삭제',
+ dismissError: '오류 닫기',
+ dismissStatus: '상태 닫기',
+ edit: '편집',
+ itemActions: '{{title}} 작업',
+ reset: '초기화',
+ review: '복습',
+ save: '저장',
+ saveChanges: '변경 사항 저장',
+ tryAgain: '다시 시도',
+ },
+ labels: {
+ active: '활성',
+ clear: 'Clear',
+ custom: '사용자 지정',
+ default: '기본값',
+ loadingEditor: '편집기 로드 중',
+ name: '이름',
+ completedTask: '완료된 작업',
+ description: '설명',
+ incompleteTask: '미완료 작업',
+ percentageInput: '{{label}} 백분율',
+ visual: '시각 요소',
+ },
+ status: {
+ actionFailed: '작업 실패',
+ actionInProgress: '작업 진행 중',
+ },
+ sort: {
+ ascending: '오름차순',
+ column: '열',
+ descending: '내림차순',
+ direction: '방향',
+ sort: '정렬',
+ },
+ search: {
+ label: '검색',
+ },
+ visualPicker: {
+ allLucideIcons: '모든 Lucide 아이콘',
+ browseIconsFor: '{{label}} 아이콘을 둘러보거나 검색하세요.',
+ chooseIcon: '아이콘 선택',
+ iconPicker: '{{label}} 아이콘 선택기',
+ iconSearch: '{{label}} 아이콘 검색',
+ iconsCouldNotLoad: '아이콘을 불러올 수 없습니다.',
+ loadingIcons: '아이콘 로드 중',
+ loadingMoreIcons: '아이콘 더 불러오는 중',
+ moreIcons: '아이콘 더 보기',
+ noIconsMatch: '"{{query}}"와 일치하는 아이콘이 없습니다.',
+ searchIconsPlaceholder: '아이콘 검색…',
+ selectedIcon: '선택한 {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: '만들기',
+ newDeck: '새 덱',
+ newFolder: '새 폴더',
+ },
+ descriptions: {
+ defaultWorkspace: '덱, 폴더, 노트를 함께 보관하세요.',
+ emptyWorkspace: '덱을 만든 다음 노트를 추가해 복습 대기열을 만드세요.',
+ emptyFolder: '덱을 만든 다음 노트를 추가해 복습 대기열을 만드세요.',
+ searchPlaceholder: '폴더, 덱, 노트 검색…',
+ },
+ empty: {
+ createFirstDeck: '첫 덱 만들기',
+ },
+ errors: {
+ couldNotDeleteDeck: '덱을 삭제할 수 없습니다',
+ couldNotDeleteFolder: '폴더를 삭제할 수 없습니다',
+ couldNotDeleteWorkspace: '워크스페이스를 삭제할 수 없습니다',
+ dashboardCouldNotOpen: '대시보드를 열 수 없습니다',
+ decksCouldNotLoad: '덱을 불러올 수 없습니다',
+ decksMayBeOutOfDate: '덱이 최신 상태가 아닐 수 있습니다',
+ foldersCouldNotLoad: '폴더를 불러올 수 없습니다',
+ foldersMayBeOutOfDate: '폴더가 최신 상태가 아닐 수 있습니다',
+ workspaceCouldNotLoad: '워크스페이스를 불러올 수 없습니다',
+ },
+ labels: {
+ dashboard: '대시보드',
+ loadingDashboard: '대시보드 로드 중',
+ newItem: '새 항목',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: '날짜를 사용할 수 없음',
+ },
+ age: {
+ dayAgo_one: '{{count}}일 전',
+ dayAgo_other: '{{count}}일 전',
+ hourAgo_one: '{{count}}시간 전',
+ hourAgo_other: '{{count}}시간 전',
+ justNow: '방금',
+ minuteAgo_one: '{{count}}분 전',
+ minuteAgo_other: '{{count}}분 전',
+ unavailable: '날짜를 사용할 수 없음',
+ weekAgo_one: '{{count}}주 전',
+ weekAgo_other: '{{count}}주 전',
+ },
+ labels: {
+ deleted: '{{value}} 삭제됨',
+ due: '기한: {{value}}',
+ reviewed: '복습함: {{value}}',
+ updated: '{{value}} 업데이트됨',
+ updatedUppercase: '{{value}} 업데이트됨',
+ },
+ relative: {
+ dayAgo_one: '{{count}}일 전',
+ dayAgo_other: '{{count}}일 전',
+ inAMoment: '잠시 후',
+ inDay_one: '{{count}}일 후',
+ inDay_other: '{{count}}일 후',
+ inMonth_one: '{{count}}개월 후',
+ inMonth_other: '{{count}}개월 후',
+ inWeek_one: '{{count}}주 후',
+ inWeek_other: '{{count}}주 후',
+ justNow: '방금',
+ monthAgo_one: '{{count}}개월 전',
+ monthAgo_other: '{{count}}개월 전',
+ secondsAgoShort: '{{count}}초 전',
+ minutesAgoShort: '{{count}}분 전',
+ hoursAgoShort: '{{count}}시간 전',
+ today: '오늘',
+ tomorrow: '내일',
+ weekAgo_one: '{{count}}주 전',
+ weekAgo_other: '{{count}}주 전',
+ yesterday: '어제',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: '{{title}} 작업',
+ createDeck: '덱 만들기',
+ createNote: '노트 만들기',
+ deleteDeck: '덱 삭제',
+ editDeck: '덱 편집',
+ newNote: '새 노트',
+ openDeck: '{{title}} 덱 열기',
+ saveDeck: '덱을 저장할 수 없습니다',
+ studyNow: '지금 학습',
+ },
+ descriptions: {
+ emptyDeck: '이 덱에 복습할 자료가 생기도록 노트를 추가하세요.',
+ editorDefault: '집중 학습 덱.',
+ editorVisual: '이 덱의 표지 글리프를 선택하세요.',
+ notesSearchPlaceholder: '노트 검색…',
+ },
+ dialogs: {
+ deleteDeckDescription: '"{{title}}"을 휴지통으로 이동합니다. 나중에 복원할 수 있습니다.',
+ deleteDeckFallbackDescription: '이 덱을 휴지통으로 이동합니다. 나중에 복원할 수 있습니다.',
+ deleteDeckFallbackTitle: '덱을 삭제할까요?',
+ deleteDeckTitle: '"{{title}}"을 삭제할까요?',
+ deleteNoteDescription: '"{{title}}"을 휴지통으로 이동합니다. 나중에 복원할 수 있습니다.',
+ deleteNoteFallbackTitle: '노트를 삭제할까요?',
+ deleteNoteTitle: '"{{title}}"을 삭제할까요?',
+ },
+ empty: {
+ noMatchingNotes: '일치하는 노트 없음',
+ noMatchingNotesDescription: '"{{query}}"와 일치하는 노트가 없습니다.',
+ thisDeckIsEmpty: '이 덱은 비어 있습니다',
+ },
+ errors: {
+ couldNotCreateDeck: '덱을 만들 수 없습니다',
+ couldNotDeleteDeck: '덱을 삭제할 수 없습니다',
+ couldNotDeleteNote: '노트를 삭제할 수 없습니다',
+ couldNotLoadFolderPath: '폴더 경로를 불러올 수 없습니다',
+ couldNotSaveDeck: '덱을 저장할 수 없습니다',
+ deckCouldNotLoad: '덱을 불러올 수 없습니다',
+ notesCouldNotLoad: '노트를 불러올 수 없습니다',
+ notesMayBeOutOfDate: '노트가 최신 상태가 아닐 수 있습니다',
+ },
+ fields: {
+ descriptionLabel: '덱 설명',
+ descriptionPlaceholder: '이 덱은 무엇을 복습하는 데 도움이 되나요?',
+ namePlaceholder: '덱 이름',
+ untitledDeck: '제목 없는 덱',
+ untitledDeckLower: '제목 없는 덱',
+ },
+ labels: {
+ createDeckTitle: '덱 만들기',
+ deck: '덱',
+ deckNotesSearch: '덱 노트 검색',
+ deckOverview: '덱 개요',
+ decks: '덱',
+ due: '기한',
+ dueToday: '오늘 기한',
+ loadingDeck: '덱 로드 중',
+ mastery: '숙련도',
+ notes: '노트',
+ },
+ sort: {
+ ariaLabel: '덱 정렬',
+ dueToday: '오늘 기한',
+ title: '제목',
+ updated: '업데이트',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: '데이터가 변경되었습니다. 새로고침한 뒤 다시 시도하세요.',
+ forbidden: '이 작업을 수행할 권한이 없습니다.',
+ notFound: '이 항목을 찾을 수 없습니다.',
+ offline: '서비스에 연결할 수 없습니다.',
+ timeout: '너무 오래 걸렸습니다. 다시 시도하세요.',
+ unauthorized: '계속하려면 로그인하세요.',
+ unavailable: '서비스를 일시적으로 사용할 수 없습니다.',
+ },
+ fallback: {
+ unexpected: '예상치 못한 오류',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: '폴더 만들기',
+ deleteFolder: '폴더 삭제',
+ editFolder: '폴더 편집',
+ },
+ descriptions: {
+ editorDefault: '관련 덱을 위한 폴더.',
+ },
+ dialogs: {
+ deleteFolderDescription: '"{{name}}"을 휴지통으로 이동합니다. 나중에 복원할 수 있습니다.',
+ deleteFolderFallbackDescription: '이 폴더를 휴지통으로 이동합니다. 나중에 복원할 수 있습니다.',
+ deleteFolderFallbackTitle: '폴더를 삭제할까요?',
+ deleteFolderTitle: '"{{name}}"을 삭제할까요?',
+ },
+ empty: {
+ noMatchesInFolder: '이 폴더에 일치하는 항목 없음',
+ noMatchesInFolderDescription: '"{{query}}"와 일치하는 폴더, 덱 또는 노트가 없습니다.',
+ },
+ errors: {
+ couldNotCreateFolder: '폴더를 만들 수 없습니다',
+ couldNotDeleteFolder: '폴더를 삭제할 수 없습니다',
+ couldNotLoadFolderPath: '폴더 경로를 불러올 수 없습니다',
+ couldNotSaveFolder: '폴더를 저장할 수 없습니다',
+ folderCouldNotLoad: '폴더를 불러올 수 없습니다',
+ },
+ fields: {
+ descriptionLabel: '폴더 설명',
+ descriptionPlaceholder: '이 폴더에는 무엇이 들어가나요?',
+ namePlaceholder: '폴더 이름',
+ untitledFolder: '제목 없는 폴더',
+ },
+ labels: {
+ createFolderTitle: '폴더 만들기',
+ folder: '폴더',
+ folders: '폴더',
+ loadingFolder: '폴더 로드 중',
+ name: '이름',
+ updated: '업데이트',
+ },
+ sort: {
+ ariaLabel: '폴더 정렬',
+ name: '이름',
+ updated: '업데이트',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: '로컬 데이터와 동기화된 데이터가 서로 다르면 항목이 여기에 표시됩니다.',
+ heading: '동기화 상태',
+ title: '충돌',
+ noConflicts: '충돌이 없습니다',
+ },
+ labels: {
+ menu: '메뉴',
+ },
+ sections: {
+ settings: {
+ description: '환경과 기본 설정을 개인화하세요',
+ title: '설정',
+ },
+ trash: {
+ description: '제거된 항목을 복원하거나 영구 삭제하세요',
+ title: '휴지통',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: '편집기 닫기',
+ openActions: '작업 열기',
+ openWorkspaces: '워크스페이스 열기',
+ },
+ items: {
+ home: '홈',
+ menu: '메뉴',
+ primary: '기본',
+ settings: '설정',
+ spaces: '공간',
+ trash: '휴지통',
+ workspaces: '워크스페이스',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: '빈칸 추가',
+ deleteNote: '노트 삭제',
+ editNote: '노트 편집',
+ hideDerivedCardsNote: '파생 카드 안내 숨기기',
+ openNote: '{{title}} 열기',
+ saveNote: '노트 저장',
+ showDerivedCardsNote: '파생 카드 안내 보기',
+ },
+ descriptions: {
+ clozeFormat: '저장하면 숨긴 각 부분이 복습 카드가 됩니다.',
+ clozeFormatPrefix: '숨길 텍스트를 다음으로 감싸세요',
+ derivedCardsHelper: '노트는 파생 카드의 기준 데이터입니다.',
+ },
+ dialogs: {
+ deleteNoteDescription: '"{{title}}"을 휴지통으로 이동합니다. 나중에 복원할 수 있습니다.',
+ deleteNoteFallbackDescription: '이 노트를 휴지통으로 이동합니다. 나중에 복원할 수 있습니다.',
+ deleteNoteFallbackTitle: '노트를 삭제할까요?',
+ deleteNoteTitle: '"{{title}}"을 삭제할까요?',
+ },
+ errors: {
+ couldNotCreateNote: '노트를 만들 수 없습니다',
+ couldNotDeleteNote: '노트를 삭제할 수 없습니다',
+ couldNotSaveNote: '노트를 저장할 수 없습니다',
+ noteCouldNotLoad: '노트를 불러올 수 없습니다',
+ },
+ fields: {
+ back: '뒷면',
+ backPlaceholder: '뒷면 입력',
+ bodyPlaceholder: '빈칸 삭제를 사용해 노트 본문 작성…',
+ front: '앞면',
+ frontPlaceholder: '앞면 입력',
+ noteBody: '노트 본문',
+ title: '제목',
+ titlePlaceholder: '노트 제목 추가',
+ untitledCloze: '제목 없는 빈칸',
+ untitledNote: '제목 없는 노트',
+ },
+ labels: {
+ backUppercase: '뒷면',
+ basic: '기본',
+ basicLower: '기본',
+ basicUppercase: '기본',
+ cloze: '빈칸',
+ clozeLower: '빈칸',
+ clozeFormat: '빈칸 형식',
+ clozeUppercase: '빈칸',
+ deck: '덱',
+ derivedCards: '파생 카드',
+ due: '기한',
+ frontUppercase: '앞면',
+ inProgress: '진행 중',
+ inProgressUppercase: '진행 중',
+ loadingNote: '노트 로드 중',
+ loadingNoteEditor: '노트 편집기 로드 중',
+ markdownFormatting: 'Markdown 서식',
+ mastered: '숙달됨',
+ masteredUppercase: '숙달됨',
+ newNote: '새 노트',
+ noteBody: '노트 본문',
+ noteContent: '노트 내용',
+ noteDetails: '노트 세부 정보',
+ noteMetadata: '노트 메타데이터',
+ noteType: '노트 유형',
+ notes: '노트',
+ reviewed: '복습함',
+ studyProgress: '학습 진행률',
+ studyProgressUppercase: '학습 진행률',
+ titleUppercase: '제목',
+ updated: '업데이트',
+ },
+ sort: {
+ ariaLabel: '노트 정렬',
+ title: '제목',
+ updated: '업데이트',
+ },
+ toolbar: {
+ bold: '굵게',
+ italic: '기울임',
+ link: '링크',
+ list: '목록',
+ },
+ },
+ review: {
+ actions: {
+ again: '다시',
+ backToDeck: '덱으로 돌아가기',
+ continueReview: '복습 계속',
+ easy: '쉬움',
+ good: '좋음',
+ hard: '어려움',
+ newNote: '새 노트',
+ showAnswer: '답 보기',
+ },
+ errors: {
+ couldNotGradeCard: '카드를 평가할 수 없습니다',
+ reviewCouldNotLoad: '복습을 불러올 수 없습니다',
+ reviewCouldNotStart: '복습을 시작할 수 없습니다',
+ summaryCouldNotLoad: '복습 요약을 불러올 수 없습니다',
+ summaryNotAvailable: '복습 요약을 사용할 수 없습니다',
+ summaryNotComplete: '이 복습은 아직 완료되지 않았습니다.',
+ },
+ labels: {
+ cardsReviewed: '복습한 카드',
+ deck: '덱',
+ duration: '소요 시간',
+ loadingReview: '복습 로드 중',
+ loadingSummary: '요약 로드 중',
+ progress: '복습 진행률',
+ review: '복습',
+ reviewComplete: '복습 완료',
+ reviewed_one: '{{count}}개 복습함',
+ reviewed_other: '{{count}}개 복습함',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}}시간 {{minutes}}분',
+ durationMinutes: '{{minutes}}분',
+ durationSeconds: '{{seconds}}초',
+ saved: '진행 상황이 이 덱에 저장되었습니다.',
+ },
+ unavailable: {
+ description: '이 덱이 복습 대기열에 들어가도록 노트를 추가하세요.',
+ title: '복습할 카드가 없습니다',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: '검색 지우기',
+ },
+ empty: {
+ noMatchesInWorkspace: '이 워크스페이스에 일치하는 항목 없음',
+ noMatchesInWorkspaceDescription: '"{{query}}"와 일치하는 폴더, 덱 또는 노트가 없습니다.',
+ },
+ errors: {
+ couldNotComplete: '검색을 완료할 수 없습니다',
+ },
+ labels: {
+ results: '검색 결과',
+ resultsFor: '"{{query}}" 결과',
+ searchingContent: '콘텐츠 검색 중',
+ },
+ resultGroups: {
+ deck: '덱',
+ folder: '폴더',
+ note: '노트',
+ },
+ resultKinds: {
+ deck: '덱',
+ folder: '폴더',
+ note: '노트',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: '모든 설정 초기화',
+ resetSettings: '설정 초기화',
+ resetToDefaults: '기본값으로 되돌리기',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: '21개의 숫자 값이 있는 유효한 JSON을 붙여넣으세요.',
+ fsrsErrorInvalidParams_one: '정확히 {{count}}개의 유한 숫자가 있는 JSON 배열을 입력하세요.',
+ fsrsErrorInvalidParams_other: '정확히 {{count}}개의 유한 숫자가 있는 JSON 배열을 입력하세요.',
+ fsrsHelper: '전문가용 재정의입니다. 값의 순서를 유지해야 합니다.',
+ fsrsJsonLabel: 'FSRS 매개변수 JSON',
+ fsrsTitle: 'FSRS 매개변수 편집',
+ fsrsDescription: 'scheduler 가중치를 재정의하려면 21개의 숫자가 있는 JSON 배열을 붙여넣으세요.',
+ resetDescription: '시간대, 학습 제한, FSRS 설정을 복원합니다.',
+ resetDescriptionWithLanguage: '언어, 시간대, 학습 제한, FSRS 설정을 복원합니다.',
+ resetTitle: '모든 설정을 초기화할까요?',
+ timezoneDescription: '도시 또는 시간대 식별자를 검색하세요.',
+ timezoneSearchLabel: '시간대 검색',
+ timezoneSearchPlaceholder: '시간대 검색…',
+ timezoneTitle: '시간대 선택',
+ },
+ errors: {
+ couldNotResetSettings: '설정을 초기화할 수 없습니다',
+ couldNotSaveSettings: '설정을 저장할 수 없습니다',
+ settingsCouldNotLoad: '설정을 불러올 수 없습니다',
+ settingsUnavailable: '설정을 사용할 수 없습니다.',
+ },
+ labels: {
+ appearance: '모양',
+ automatic: '자동',
+ fsrsParameters: 'FSRS 매개변수',
+ general: '일반',
+ language: '언어',
+ loadingSettings: '설정 로드 중',
+ masteryHorizon: '숙달 기간',
+ newCardOrder: '새 카드 순서',
+ newCardsPerDay: '일일 새 카드',
+ reviewCardsPerDay: '일일 복습 카드',
+ savingSettings: '설정 저장 중',
+ schedule: '일정',
+ searchNoTimezones: '일치하는 시간대가 없습니다.',
+ settings: '설정',
+ settingsReset: '설정 초기화됨',
+ study: '학습',
+ targetRecallProbability: '목표 회상 확률',
+ theme: '테마',
+ timezone: '시간대',
+ },
+ options: {
+ languageEnUs: '영어(미국)',
+ newCardsAfterReviews: '복습 후',
+ newCardsBeforeReviews: '복습 전',
+ newCardsMixed: '섞기',
+ themeDark: '어둡게',
+ themeLight: '밝게',
+ themeSystem: '시스템',
+ timezoneSystem: '시스템 시간대 사용',
+ },
+ rows: {
+ fsrsDescription: '전문가 모델 가중치',
+ languageDescription: '인터페이스 언어',
+ masteryHorizonDescription: '카드가 숙달된 것으로 간주되려면 목표 확률 이상으로 회상 가능해야 하는 일수',
+ newCardOrderDescription: '복습에 대한 새 카드의 순서',
+ newCardsPerDayDescription: '하루 최대 새 카드 수',
+ reviewCardsPerDayDescription: '하루 최대 복습 카드 수',
+ targetRecallProbabilityDescription: '다음 예정 복습에서의 최소 회상 확률',
+ timezoneDescription: '자동 시간대를 사용하거나 도시를 선택하세요.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: '영구 삭제',
+ empty: '비우기',
+ emptyTrash: '휴지통 비우기',
+ restore: '복원',
+ restoringItem: '{{title}} 복원 중',
+ },
+ dialogs: {
+ deleteItemDescription: '"{{title}}"을 영구 삭제합니다. 되돌릴 수 없습니다.',
+ deleteItemFallbackDescription: '이 항목을 영구 삭제합니다. 되돌릴 수 없습니다.',
+ deleteItemFallbackTitle: '항목을 삭제할까요?',
+ deleteItemTitle: '"{{title}}"을 삭제할까요?',
+ emptyTrashDescription: '휴지통의 모든 항목을 영구 삭제합니다. 되돌릴 수 없습니다.',
+ emptyTrashTitle: '휴지통을 비울까요?',
+ },
+ empty: {
+ description: '삭제한 항목은 영구 제거되기 전에 여기에 표시됩니다.',
+ title: '휴지통이 비어 있습니다',
+ },
+ errors: {
+ couldNotDeleteItem: '항목을 삭제할 수 없습니다',
+ couldNotEmptyTrash: '휴지통을 비울 수 없습니다',
+ couldNotRestoreItem: '항목을 복원할 수 없습니다',
+ trashCouldNotLoad: '휴지통을 불러올 수 없습니다',
+ trashMayBeOutOfDate: '휴지통이 최신 상태가 아닐 수 있습니다',
+ },
+ labels: {
+ deletedAge: '{{value}} 삭제됨',
+ itemCount_one: '{{count}}개 항목',
+ itemCount_other: '{{count}}개 항목',
+ lastEmptied: '마지막으로 비운 시각 {{value}}',
+ loadingTrash: '휴지통 로드 중',
+ originalLocation: '원래 위치: {{location}}',
+ title: '휴지통',
+ trashActions: '{{title}} 휴지통 작업',
+ },
+ kinds: {
+ deck: '덱',
+ folder: '폴더',
+ note: '노트',
+ workspace: '워크스페이스',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: '워크스페이스 만들기',
+ deleteWorkspace: '워크스페이스 삭제',
+ editWorkspace: '워크스페이스 편집',
+ newWorkspace: '새 워크스페이스',
+ openWorkspace: '{{title}} 열기',
+ openingWorkspace: '{{title}} 여는 중',
+ },
+ descriptions: {
+ editorDefault: '학습 컨텍스트.',
+ editorVisual: '이 워크스페이스의 시각적 기준을 선택하세요.',
+ emptyList: '덱, 노트, 복습 대기열을 학습 컨텍스트별로 나누세요.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: '"{{title}}"을 휴지통으로 이동합니다. 나중에 복원할 수 있습니다.',
+ deleteWorkspaceFallbackDescription: '이 워크스페이스를 휴지통으로 이동합니다. 나중에 복원할 수 있습니다.',
+ deleteWorkspaceFallbackTitle: '워크스페이스를 삭제할까요?',
+ deleteWorkspaceTitle: '"{{title}}"을 삭제할까요?',
+ },
+ empty: {
+ startWithWorkspace: '워크스페이스로 시작하기',
+ },
+ errors: {
+ couldNotCreateWorkspace: '워크스페이스를 만들 수 없습니다',
+ couldNotDeleteWorkspace: '워크스페이스를 삭제할 수 없습니다',
+ couldNotOpenWorkspace: '워크스페이스를 열 수 없습니다',
+ couldNotSaveWorkspace: '워크스페이스를 저장할 수 없습니다',
+ workspaceCouldNotLoad: '워크스페이스를 불러올 수 없습니다',
+ workspacesCouldNotLoad: '워크스페이스를 불러올 수 없습니다',
+ },
+ fields: {
+ descriptionLabel: '워크스페이스 설명',
+ descriptionPlaceholder: '이 워크스페이스에는 무엇이 들어가나요?',
+ namePlaceholder: '워크스페이스 이름',
+ untitledWorkspace: '제목 없는 워크스페이스',
+ },
+ labels: {
+ createWorkspaceTitle: '워크스페이스 만들기',
+ loadingWorkspaces: '워크스페이스 로드 중',
+ workspace: '워크스페이스',
+ workspaces: '워크스페이스',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/lt.ts b/ui/src/core/i18n/resources/lt.ts
new file mode 100644
index 0000000..35e5954
--- /dev/null
+++ b/ui/src/core/i18n/resources/lt.ts
@@ -0,0 +1,649 @@
+export const lt = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Bandykite dar kartą. Jei tai kartojasi, iš naujo atidarykite Clear.',
+ title: 'Nepavyko paleisti',
+ },
+ loadingTitle: 'Ruošiama jūsų mokymosi erdvė',
+ },
+ common: {
+ actions: {
+ back: 'Atgal',
+ cancel: 'Atšaukti',
+ checkAgain: 'Patikrinti dar kartą',
+ close: 'Uždaryti',
+ create: 'Sukurti',
+ delete: 'Ištrinti',
+ dismissError: 'Uždaryti klaidą',
+ dismissStatus: 'Uždaryti būseną',
+ edit: 'Redaguoti',
+ itemActions: '{{title}} veiksmai',
+ reset: 'Atstatyti',
+ review: 'Kartoti',
+ save: 'Įrašyti',
+ saveChanges: 'Įrašyti pakeitimus',
+ tryAgain: 'Bandyti dar kartą',
+ },
+ labels: {
+ active: 'Aktyvu',
+ clear: 'Clear',
+ custom: 'Pasirinktinis',
+ default: 'Numatytasis',
+ loadingEditor: 'Įkeliamas redaktorius',
+ name: 'Pavadinimas',
+ completedTask: 'Atlikta užduotis',
+ description: 'Aprašas',
+ incompleteTask: 'Nebaigta užduotis',
+ percentageInput: '{{label}} procentais',
+ visual: 'Vizualas',
+ },
+ status: {
+ actionFailed: 'Veiksmas nepavyko',
+ actionInProgress: 'Veiksmas vykdomas',
+ },
+ sort: {
+ ascending: 'Didėj.',
+ column: 'Stulpelis',
+ descending: 'Mažėj.',
+ direction: 'Kryptis',
+ sort: 'Rikiuoti',
+ },
+ search: {
+ label: 'Paieška',
+ },
+ visualPicker: {
+ allLucideIcons: 'Visos Lucide piktogramos',
+ browseIconsFor: 'Naršykite arba ieškokite piktogramų: {{label}}.',
+ chooseIcon: 'Pasirinkti piktogramą',
+ iconPicker: '{{label}} piktogramos parinkiklis',
+ iconSearch: '{{label}} piktogramų paieška',
+ iconsCouldNotLoad: 'Piktogramų nepavyko įkelti.',
+ loadingIcons: 'Įkeliamos piktogramos',
+ loadingMoreIcons: 'Įkeliama daugiau piktogramų',
+ moreIcons: 'Daugiau piktogramų',
+ noIconsMatch: 'Nėra piktogramų, atitinkančių "{{query}}".',
+ searchIconsPlaceholder: 'Ieškoti piktogramų…',
+ selectedIcon: 'Pasirinkta {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Sukurti',
+ newDeck: 'Nauja kaladė',
+ newFolder: 'Naujas aplankas',
+ },
+ descriptions: {
+ defaultWorkspace: 'Laikykite kalades, aplankus ir pastabas kartu.',
+ emptyWorkspace: 'Sukurkite kaladę, tada pridėkite pastabų, kad sudarytumėte kartojimo eilę.',
+ emptyFolder: 'Sukurkite kaladę, tada pridėkite pastabų, kad sudarytumėte kartojimo eilę.',
+ searchPlaceholder: 'Ieškoti aplankų, kaladžių ir pastabų…',
+ },
+ empty: {
+ createFirstDeck: 'Sukurkite pirmąją kaladę',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Kaladės nepavyko ištrinti',
+ couldNotDeleteFolder: 'Aplanko nepavyko ištrinti',
+ couldNotDeleteWorkspace: 'Darbo srities nepavyko ištrinti',
+ dashboardCouldNotOpen: 'Skydelio nepavyko atidaryti',
+ decksCouldNotLoad: 'Kaladžių nepavyko įkelti',
+ decksMayBeOutOfDate: 'Kaladės gali būti pasenusios',
+ foldersCouldNotLoad: 'Aplankų nepavyko įkelti',
+ foldersMayBeOutOfDate: 'Aplankai gali būti pasenę',
+ workspaceCouldNotLoad: 'Darbo srities nepavyko įkelti',
+ },
+ labels: {
+ dashboard: 'Skydelis',
+ loadingDashboard: 'Įkeliamas skydelis',
+ newItem: 'Naujas elementas',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Data nepasiekiama',
+ },
+ age: {
+ dayAgo_one: 'prieš {{count}} dieną',
+ dayAgo_few: 'prieš {{count}} dienas',
+ dayAgo_many: 'prieš {{count}} dienos',
+ dayAgo_other: 'prieš {{count}} dienų',
+ hourAgo_one: 'prieš {{count}} valandą',
+ hourAgo_few: 'prieš {{count}} valandas',
+ hourAgo_many: 'prieš {{count}} valandos',
+ hourAgo_other: 'prieš {{count}} valandų',
+ justNow: 'ką tik',
+ minuteAgo_one: 'prieš {{count}} minutę',
+ minuteAgo_few: 'prieš {{count}} minutes',
+ minuteAgo_many: 'prieš {{count}} minutės',
+ minuteAgo_other: 'prieš {{count}} minučių',
+ unavailable: 'data nepasiekiama',
+ weekAgo_one: 'prieš {{count}} savaitę',
+ weekAgo_few: 'prieš {{count}} savaites',
+ weekAgo_many: 'prieš {{count}} savaitės',
+ weekAgo_other: 'prieš {{count}} savaičių',
+ },
+ labels: {
+ deleted: 'Ištrinta {{value}}',
+ due: 'Terminas: {{value}}',
+ reviewed: 'Kartota: {{value}}',
+ updated: 'Atnaujinta {{value}}',
+ updatedUppercase: 'ATNAUJINTA {{value}}',
+ },
+ relative: {
+ dayAgo_one: 'prieš {{count}} dieną',
+ dayAgo_few: 'prieš {{count}} dienas',
+ dayAgo_many: 'prieš {{count}} dienos',
+ dayAgo_other: 'prieš {{count}} dienų',
+ inAMoment: 'Netrukus',
+ inDay_one: 'Po {{count}} dienos',
+ inDay_few: 'Po {{count}} dienų',
+ inDay_many: 'Po {{count}} dienos',
+ inDay_other: 'Po {{count}} dienų',
+ inMonth_one: 'Po {{count}} mėnesio',
+ inMonth_few: 'Po {{count}} mėnesių',
+ inMonth_many: 'Po {{count}} mėnesio',
+ inMonth_other: 'Po {{count}} mėnesių',
+ inWeek_one: 'Po {{count}} savaitės',
+ inWeek_few: 'Po {{count}} savaičių',
+ inWeek_many: 'Po {{count}} savaitės',
+ inWeek_other: 'Po {{count}} savaičių',
+ justNow: 'Ką tik',
+ monthAgo_one: 'prieš {{count}} mėnesį',
+ monthAgo_few: 'prieš {{count}} mėnesius',
+ monthAgo_many: 'prieš {{count}} mėnesio',
+ monthAgo_other: 'prieš {{count}} mėnesių',
+ secondsAgoShort: 'prieš {{count}} sek.',
+ minutesAgoShort: 'prieš {{count}} min.',
+ hoursAgoShort: 'prieš {{count}} val.',
+ today: 'Šiandien',
+ tomorrow: 'Rytoj',
+ weekAgo_one: 'prieš {{count}} savaitę',
+ weekAgo_few: 'prieš {{count}} savaites',
+ weekAgo_many: 'prieš {{count}} savaitės',
+ weekAgo_other: 'prieš {{count}} savaičių',
+ yesterday: 'Vakar',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: '{{title}} veiksmai',
+ createDeck: 'Sukurti kaladę',
+ createNote: 'Sukurti pastabą',
+ deleteDeck: 'Ištrinti kaladę',
+ editDeck: 'Redaguoti kaladę',
+ newNote: 'Nauja pastaba',
+ openDeck: 'Atidaryti kaladę {{title}}',
+ saveDeck: 'Kaladės nepavyko įrašyti',
+ studyNow: 'Mokytis dabar',
+ },
+ descriptions: {
+ emptyDeck: 'Pridėkite pastabą, kad ši kaladė turėtų medžiagos kartojimui.',
+ editorDefault: 'Sutelktam mokymuisi skirta kaladė.',
+ editorVisual: 'Pasirinkite šios kaladės viršelio simbolį.',
+ notesSearchPlaceholder: 'Ieškoti pastabų…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Tai perkels "{{title}}" į Šiukšlinę. Galėsite atkurti vėliau.',
+ deleteDeckFallbackDescription: 'Tai perkels šią kaladę į Šiukšlinę. Galėsite atkurti vėliau.',
+ deleteDeckFallbackTitle: 'Ištrinti kaladę?',
+ deleteDeckTitle: 'Ištrinti "{{title}}"?',
+ deleteNoteDescription: 'Tai perkels "{{title}}" į Šiukšlinę. Galėsite atkurti vėliau.',
+ deleteNoteFallbackTitle: 'Ištrinti pastabą?',
+ deleteNoteTitle: 'Ištrinti "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Nėra atitinkančių pastabų',
+ noMatchingNotesDescription: 'Jokia pastaba neatitiko "{{query}}".',
+ thisDeckIsEmpty: 'Ši kaladė tuščia',
+ },
+ errors: {
+ couldNotCreateDeck: 'Kaladės nepavyko sukurti',
+ couldNotDeleteDeck: 'Kaladės nepavyko ištrinti',
+ couldNotDeleteNote: 'Pastabos nepavyko ištrinti',
+ couldNotLoadFolderPath: 'Aplanko kelio nepavyko įkelti',
+ couldNotSaveDeck: 'Kaladės nepavyko įrašyti',
+ deckCouldNotLoad: 'Kaladės nepavyko įkelti',
+ notesCouldNotLoad: 'Pastabų nepavyko įkelti',
+ notesMayBeOutOfDate: 'Pastabos gali būti pasenusios',
+ },
+ fields: {
+ descriptionLabel: 'Kaladės aprašas',
+ descriptionPlaceholder: 'Ką ši kaladė padės jums kartoti?',
+ namePlaceholder: 'Kaladės pavadinimas',
+ untitledDeck: 'Kaladė be pavadinimo',
+ untitledDeckLower: 'kaladė be pavadinimo',
+ },
+ labels: {
+ createDeckTitle: 'Sukurti kaladę',
+ deck: 'Kaladė',
+ deckNotesSearch: 'Kaladės pastabų paieška',
+ deckOverview: 'Kaladės apžvalga',
+ decks: 'Kaladės',
+ due: 'Terminas',
+ dueToday: 'Terminas šiandien',
+ loadingDeck: 'Įkeliama kaladė',
+ mastery: 'Įsisavinimas',
+ notes: 'Pastabos',
+ },
+ sort: {
+ ariaLabel: 'Rikiuoti kalades',
+ dueToday: 'Terminas šiandien',
+ title: 'Pavadinimas',
+ updated: 'Atnaujinta',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Duomenys pasikeitė. Atnaujinkite ir bandykite dar kartą.',
+ forbidden: 'Neturite leidimo tai atlikti.',
+ notFound: 'Nepavyko rasti šio elemento.',
+ offline: 'Nepavyksta pasiekti paslaugos.',
+ timeout: 'Tai užtruko per ilgai. Bandykite dar kartą.',
+ unauthorized: 'Prisijunkite, kad tęstumėte.',
+ unavailable: 'Paslauga laikinai nepasiekiama.',
+ },
+ fallback: {
+ unexpected: 'Netikėta klaida',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Sukurti aplanką',
+ deleteFolder: 'Ištrinti aplanką',
+ editFolder: 'Redaguoti aplanką',
+ },
+ descriptions: {
+ editorDefault: 'Aplankas susijusioms kaladėms.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Tai perkels "{{name}}" į Šiukšlinę. Galėsite atkurti vėliau.',
+ deleteFolderFallbackDescription: 'Tai perkels šį aplanką į Šiukšlinę. Galėsite atkurti vėliau.',
+ deleteFolderFallbackTitle: 'Ištrinti aplanką?',
+ deleteFolderTitle: 'Ištrinti "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'Šiame aplanke nėra atitikmenų',
+ noMatchesInFolderDescription: 'Joks aplankas, kaladė ar pastaba neatitiko "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Aplanko nepavyko sukurti',
+ couldNotDeleteFolder: 'Aplanko nepavyko ištrinti',
+ couldNotLoadFolderPath: 'Aplanko kelio nepavyko įkelti',
+ couldNotSaveFolder: 'Aplanko nepavyko įrašyti',
+ folderCouldNotLoad: 'Aplanko nepavyko įkelti',
+ },
+ fields: {
+ descriptionLabel: 'Aplanko aprašas',
+ descriptionPlaceholder: 'Kas priklauso šiam aplankui?',
+ namePlaceholder: 'Aplanko pavadinimas',
+ untitledFolder: 'Aplankas be pavadinimo',
+ },
+ labels: {
+ createFolderTitle: 'Sukurti aplanką',
+ folder: 'Aplankas',
+ folders: 'Aplankai',
+ loadingFolder: 'Įkeliamas aplankas',
+ name: 'Pavadinimas',
+ updated: 'Atnaujinta',
+ },
+ sort: {
+ ariaLabel: 'Rikiuoti aplankus',
+ name: 'Pavadinimas',
+ updated: 'Atnaujinta',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Jei vietiniai ir sinchronizuoti duomenys kada nors nesutaps, elementas bus rodomas čia.',
+ heading: 'Sinchronizavimo būsena',
+ title: 'Konfliktai',
+ noConflicts: 'Konfliktų nerasta',
+ },
+ labels: {
+ menu: 'Meniu',
+ },
+ sections: {
+ settings: {
+ description: 'Pritaikykite aplinką ir nuostatas',
+ title: 'Nustatymai',
+ },
+ trash: {
+ description: 'Atkurkite arba visam laikui ištrinkite pašalintus elementus',
+ title: 'Šiukšlinė',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Uždaryti redaktorių',
+ openActions: 'Atidaryti veiksmus',
+ openWorkspaces: 'Atidaryti darbo sritis',
+ },
+ items: {
+ home: 'Pradžia',
+ menu: 'Meniu',
+ primary: 'Pagrindinis',
+ settings: 'Nustatymai',
+ spaces: 'Sritys',
+ trash: 'Šiukšlinė',
+ workspaces: 'Darbo sritys',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Pridėti cloze',
+ deleteNote: 'Ištrinti pastabą',
+ editNote: 'Redaguoti pastabą',
+ hideDerivedCardsNote: 'Slėpti pastabą apie išvestines korteles',
+ openNote: 'Atidaryti {{title}}',
+ saveNote: 'Įrašyti pastabą',
+ showDerivedCardsNote: 'Rodyti pastabą apie išvestines korteles',
+ },
+ descriptions: {
+ clozeFormat: 'Kiekviena paslėpta dalis įrašius tampa kartojimo kortele.',
+ clozeFormatPrefix: 'Apgaubkite paslėptą tekstą',
+ derivedCardsHelper: 'Pastabos yra pagrindinis išvestinių kortelių šaltinis.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Tai perkels "{{title}}" į Šiukšlinę. Galėsite atkurti vėliau.',
+ deleteNoteFallbackDescription: 'Tai perkels šią pastabą į Šiukšlinę. Galėsite atkurti vėliau.',
+ deleteNoteFallbackTitle: 'Ištrinti pastabą?',
+ deleteNoteTitle: 'Ištrinti "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Pastabos nepavyko sukurti',
+ couldNotDeleteNote: 'Pastabos nepavyko ištrinti',
+ couldNotSaveNote: 'Pastabos nepavyko įrašyti',
+ noteCouldNotLoad: 'Pastabos nepavyko įkelti',
+ },
+ fields: {
+ back: 'Kita pusė',
+ backPlaceholder: 'Įveskite kitą pusę',
+ bodyPlaceholder: 'Rašykite pastabos turinį su cloze ištrynimais…',
+ front: 'Priekinė pusė',
+ frontPlaceholder: 'Įveskite priekinę pusę',
+ noteBody: 'Pastabos turinys',
+ title: 'Pavadinimas',
+ titlePlaceholder: 'Pridėkite pastabos pavadinimą',
+ untitledCloze: 'Cloze be pavadinimo',
+ untitledNote: 'Pastaba be pavadinimo',
+ },
+ labels: {
+ backUppercase: 'KITA PUSĖ',
+ basic: 'Paprasta',
+ basicLower: 'paprasta',
+ basicUppercase: 'PAPRASTA',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Cloze formatas',
+ clozeUppercase: 'CLOZE',
+ deck: 'Kaladė',
+ derivedCards: 'IŠVESTINĖS KORTELĖS',
+ due: 'Terminas',
+ frontUppercase: 'PRIEKINĖ PUSĖ',
+ inProgress: 'Vykdoma',
+ inProgressUppercase: 'VYKDOMA',
+ loadingNote: 'Įkeliama pastaba',
+ loadingNoteEditor: 'Įkeliamas pastabų redaktorius',
+ markdownFormatting: 'Markdown formatavimas',
+ mastered: 'Įsisavinta',
+ masteredUppercase: 'ĮSISAVINTA',
+ newNote: 'Nauja pastaba',
+ noteBody: 'PASTABOS TURINYS',
+ noteContent: 'Pastabos turinys',
+ noteDetails: 'Pastabos informacija',
+ noteMetadata: 'Pastabos metaduomenys',
+ noteType: 'Pastabos tipas',
+ notes: 'Pastabos',
+ reviewed: 'Kartota',
+ studyProgress: 'Mokymosi pažanga',
+ studyProgressUppercase: 'MOKYMOSI PAŽANGA',
+ titleUppercase: 'PAVADINIMAS',
+ updated: 'Atnaujinta',
+ },
+ sort: {
+ ariaLabel: 'Rikiuoti pastabas',
+ title: 'Pavadinimas',
+ updated: 'Atnaujinta',
+ },
+ toolbar: {
+ bold: 'Paryškintas',
+ italic: 'Kursyvas',
+ link: 'Nuoroda',
+ list: 'Sąrašas',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Vėl',
+ backToDeck: 'Grįžti į kaladę',
+ continueReview: 'Tęsti kartojimą',
+ easy: 'Lengva',
+ good: 'Gerai',
+ hard: 'Sunku',
+ newNote: 'Nauja pastaba',
+ showAnswer: 'Rodyti atsakymą',
+ },
+ errors: {
+ couldNotGradeCard: 'Kortelės nepavyko įvertinti',
+ reviewCouldNotLoad: 'Kartojimo nepavyko įkelti',
+ reviewCouldNotStart: 'Kartojimo nepavyko pradėti',
+ summaryCouldNotLoad: 'Kartojimo suvestinės nepavyko įkelti',
+ summaryNotAvailable: 'Kartojimo suvestinė nepasiekiama',
+ summaryNotComplete: 'Šis kartojimas dar nebaigtas.',
+ },
+ labels: {
+ cardsReviewed: 'Kartotos kortelės',
+ deck: 'Kaladė',
+ duration: 'Trukmė',
+ loadingReview: 'Įkeliamas kartojimas',
+ loadingSummary: 'Įkeliama suvestinė',
+ progress: 'Kartojimo pažanga',
+ review: 'Kartojimas',
+ reviewComplete: 'Kartojimas baigtas',
+ reviewed_one: 'Kartota {{count}}',
+ reviewed_few: 'Kartotos {{count}}',
+ reviewed_many: 'Kartota {{count}}',
+ reviewed_other: 'Kartota {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} val. {{minutes}} min.',
+ durationMinutes: '{{minutes}} min.',
+ durationSeconds: '{{seconds}} sek.',
+ saved: 'Jūsų pažanga įrašyta į šią kaladę.',
+ },
+ unavailable: {
+ description: 'Pridėkite pastabą, kad ši kaladė galėtų patekti į kartojimo eilę.',
+ title: 'Nėra kortelių kartojimui',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Išvalyti paiešką',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Šioje darbo srityje nėra atitikmenų',
+ noMatchesInWorkspaceDescription: 'Joks aplankas, kaladė ar pastaba neatitiko "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Paieškos nepavyko užbaigti',
+ },
+ labels: {
+ results: 'Paieškos rezultatai',
+ resultsFor: '"{{query}}" rezultatai',
+ searchingContent: 'Ieškoma turinyje',
+ },
+ resultGroups: {
+ deck: 'Kaladės',
+ folder: 'Aplankai',
+ note: 'Pastabos',
+ },
+ resultKinds: {
+ deck: 'kaladė',
+ folder: 'aplankas',
+ note: 'pastaba',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Atstatyti visus nustatymus',
+ resetSettings: 'Atstatyti nustatymus',
+ resetToDefaults: 'Atstatyti numatytuosius',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Įklijuokite tinkamą JSON su 21 skaitine reikšme.',
+ fsrsErrorInvalidParams_one: 'Įveskite JSON masyvą su tiksliai {{count}} baigtiniu skaičiumi.',
+ fsrsErrorInvalidParams_few: 'Įveskite JSON masyvą su tiksliai {{count}} baigtiniais skaičiais.',
+ fsrsErrorInvalidParams_many: 'Įveskite JSON masyvą su tiksliai {{count}} baigtinio skaičiaus.',
+ fsrsErrorInvalidParams_other: 'Įveskite JSON masyvą su tiksliai {{count}} baigtinių skaičių.',
+ fsrsHelper: 'Tai ekspertinis perrašymas. Reikšmės turi likti tokia pačia tvarka.',
+ fsrsJsonLabel: 'FSRS parametrų JSON',
+ fsrsTitle: 'Redaguoti FSRS parametrus',
+ fsrsDescription: 'Įklijuokite JSON masyvą su 21 skaičiumi, kad perrašytumėte planuoklio svorius.',
+ resetDescription: 'Tai atstatys laiko juostą, mokymosi limitus ir FSRS nustatymus.',
+ resetDescriptionWithLanguage: 'Tai atstatys kalbą, laiko juostą, mokymosi limitus ir FSRS nustatymus.',
+ resetTitle: 'Atstatyti visus nustatymus?',
+ timezoneDescription: 'Ieškokite miesto arba laiko juostos identifikatoriaus.',
+ timezoneSearchLabel: 'Ieškoti laiko juostų',
+ timezoneSearchPlaceholder: 'Ieškoti laiko juostų…',
+ timezoneTitle: 'Pasirinkti laiko juostą',
+ },
+ errors: {
+ couldNotResetSettings: 'Nustatymų nepavyko atstatyti',
+ couldNotSaveSettings: 'Nustatymų nepavyko įrašyti',
+ settingsCouldNotLoad: 'Nustatymų nepavyko įkelti',
+ settingsUnavailable: 'Nustatymai nepasiekiami.',
+ },
+ labels: {
+ appearance: 'Išvaizda',
+ automatic: 'Automatiškai',
+ fsrsParameters: 'FSRS parametrai',
+ general: 'Bendra',
+ language: 'Kalba',
+ loadingSettings: 'Įkeliami nustatymai',
+ masteryHorizon: 'Įsisavinimo horizontas',
+ newCardOrder: 'Naujų kortelių tvarka',
+ newCardsPerDay: 'Naujos kortelės per dieną',
+ reviewCardsPerDay: 'Kartojimo kortelės per dieną',
+ savingSettings: 'Įrašomi nustatymai',
+ schedule: 'Tvarkaraštis',
+ searchNoTimezones: 'Nėra atitinkančių laiko juostų.',
+ settings: 'Nustatymai',
+ settingsReset: 'Nustatymai atstatyti',
+ study: 'Mokymasis',
+ targetRecallProbability: 'Tikslinė prisiminimo tikimybė',
+ theme: 'Tema',
+ timezone: 'Laiko juosta',
+ },
+ options: {
+ languageEnUs: 'Anglų (JAV)',
+ newCardsAfterReviews: 'Po kartojimų',
+ newCardsBeforeReviews: 'Prieš kartojimus',
+ newCardsMixed: 'Mišriai',
+ themeDark: 'Tamsi',
+ themeLight: 'Šviesi',
+ themeSystem: 'Sistema',
+ timezoneSystem: 'Naudoti sistemos laiko juostą',
+ },
+ rows: {
+ fsrsDescription: 'Ekspertinio modelio svoriai',
+ languageDescription: 'Sąsajos kalba',
+ masteryHorizonDescription: 'Dienų skaičius, kurį kortelė turi išlikti prisimenama tiksline tikimybe arba didesne, kad būtų laikoma įsisavinta',
+ newCardOrderDescription: 'Naujų kortelių tvarka kartojimų atžvilgiu',
+ newCardsPerDayDescription: 'Didžiausias naujų kortelių skaičius per dieną',
+ reviewCardsPerDayDescription: 'Didžiausias kartojimo kortelių skaičius per dieną',
+ targetRecallProbabilityDescription: 'Mažiausia prisiminimo tikimybė per kitą suplanuotą kartojimą',
+ timezoneDescription: 'Naudokite automatinę laiko juostą arba pasirinkite miestą.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Ištrinti visam laikui',
+ empty: 'Ištuštinti',
+ emptyTrash: 'Ištuštinti šiukšlinę',
+ restore: 'Atkurti',
+ restoringItem: 'Atkuriama {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Tai visam laikui ištrins "{{title}}". To negalima atšaukti.',
+ deleteItemFallbackDescription: 'Tai visam laikui ištrins šį elementą. To negalima atšaukti.',
+ deleteItemFallbackTitle: 'Ištrinti elementą?',
+ deleteItemTitle: 'Ištrinti "{{title}}"?',
+ emptyTrashDescription: 'Tai visam laikui ištrins viską Šiukšlinėje. To negalima atšaukti.',
+ emptyTrashTitle: 'Ištuštinti šiukšlinę?',
+ },
+ empty: {
+ description: 'Elementai, kuriuos ištrinsite, čia bus rodomi prieš pašalinant visam laikui.',
+ title: 'Šiukšlinė tuščia',
+ },
+ errors: {
+ couldNotDeleteItem: 'Elemento nepavyko ištrinti',
+ couldNotEmptyTrash: 'Šiukšlinės nepavyko ištuštinti',
+ couldNotRestoreItem: 'Elemento nepavyko atkurti',
+ trashCouldNotLoad: 'Šiukšlinės nepavyko įkelti',
+ trashMayBeOutOfDate: 'Šiukšlinė gali būti pasenusi',
+ },
+ labels: {
+ deletedAge: 'Ištrinta {{value}}',
+ itemCount_one: '{{count}} elementas',
+ itemCount_few: '{{count}} elementai',
+ itemCount_many: '{{count}} elemento',
+ itemCount_other: '{{count}} elementų',
+ lastEmptied: 'Paskutinį kartą ištuštinta {{value}}',
+ loadingTrash: 'Įkeliama Šiukšlinė',
+ originalLocation: 'Pradinė vieta: {{location}}',
+ title: 'Šiukšlinė',
+ trashActions: '{{title}} šiukšlinės veiksmai',
+ },
+ kinds: {
+ deck: 'Kaladė',
+ folder: 'Aplankas',
+ note: 'Pastaba',
+ workspace: 'Darbo sritis',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Sukurti darbo sritį',
+ deleteWorkspace: 'Ištrinti darbo sritį',
+ editWorkspace: 'Redaguoti darbo sritį',
+ newWorkspace: 'Nauja darbo sritis',
+ openWorkspace: 'Atidaryti {{title}}',
+ openingWorkspace: 'Atidaroma {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Mokymosi kontekstas.',
+ editorVisual: 'Pasirinkite šios darbo srities vizualinį orientyrą.',
+ emptyList: 'Atskirkite kalades, pastabas ir kartojimo eiles pagal mokymosi kontekstą.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Tai perkels "{{title}}" į Šiukšlinę. Galėsite atkurti vėliau.',
+ deleteWorkspaceFallbackDescription: 'Tai perkels šią darbo sritį į Šiukšlinę. Galėsite atkurti vėliau.',
+ deleteWorkspaceFallbackTitle: 'Ištrinti darbo sritį?',
+ deleteWorkspaceTitle: 'Ištrinti "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Pradėkite nuo darbo srities',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Darbo srities nepavyko sukurti',
+ couldNotDeleteWorkspace: 'Darbo srities nepavyko ištrinti',
+ couldNotOpenWorkspace: 'Darbo srities nepavyko atidaryti',
+ couldNotSaveWorkspace: 'Darbo srities nepavyko įrašyti',
+ workspaceCouldNotLoad: 'Darbo srities nepavyko įkelti',
+ workspacesCouldNotLoad: 'Darbo sričių nepavyko įkelti',
+ },
+ fields: {
+ descriptionLabel: 'Darbo srities aprašas',
+ descriptionPlaceholder: 'Kas priklauso šiai darbo sričiai?',
+ namePlaceholder: 'Darbo srities pavadinimas',
+ untitledWorkspace: 'Darbo sritis be pavadinimo',
+ },
+ labels: {
+ createWorkspaceTitle: 'Sukurti darbo sritį',
+ loadingWorkspaces: 'Įkeliamos darbo sritys',
+ workspace: 'Darbo sritis',
+ workspaces: 'Darbo sritys',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/lv.ts b/ui/src/core/i18n/resources/lv.ts
new file mode 100644
index 0000000..17bddfa
--- /dev/null
+++ b/ui/src/core/i18n/resources/lv.ts
@@ -0,0 +1,636 @@
+export const lv = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Mēģiniet vēlreiz. Ja tas turpinās, vēlreiz atveriet Clear.',
+ title: 'Neizdevās startēt',
+ },
+ loadingTitle: 'Sagatavo jūsu mācību vietu',
+ },
+ common: {
+ actions: {
+ back: 'Atpakaļ',
+ cancel: 'Atcelt',
+ checkAgain: 'Pārbaudīt vēlreiz',
+ close: 'Aizvērt',
+ create: 'Izveidot',
+ delete: 'Dzēst',
+ dismissError: 'Aizvērt kļūdu',
+ dismissStatus: 'Aizvērt statusu',
+ edit: 'Rediģēt',
+ itemActions: '{{title}} darbības',
+ reset: 'Atiestatīt',
+ review: 'Atkārtot',
+ save: 'Saglabāt',
+ saveChanges: 'Saglabāt izmaiņas',
+ tryAgain: 'Mēģināt vēlreiz',
+ },
+ labels: {
+ active: 'Aktīvs',
+ clear: 'Clear',
+ custom: 'Pielāgots',
+ default: 'Noklusējums',
+ loadingEditor: 'Ielādē redaktoru',
+ name: 'Nosaukums',
+ completedTask: 'Pabeigts uzdevums',
+ description: 'Apraksts',
+ incompleteTask: 'Nepabeigts uzdevums',
+ percentageInput: '{{label}} procentos',
+ visual: 'Vizuāls',
+ },
+ status: {
+ actionFailed: 'Darbība neizdevās',
+ actionInProgress: 'Darbība notiek',
+ },
+ sort: {
+ ascending: 'Augošā',
+ column: 'Kolonna',
+ descending: 'Dilstošā',
+ direction: 'Virziens',
+ sort: 'Kārtot',
+ },
+ search: {
+ label: 'Meklēšana',
+ },
+ visualPicker: {
+ allLucideIcons: 'Visas Lucide ikonas',
+ browseIconsFor: 'Pārlūkojiet vai meklējiet ikonas: {{label}}.',
+ chooseIcon: 'Izvēlēties ikonu',
+ iconPicker: '{{label}} ikonas izvēle',
+ iconSearch: '{{label}} ikonu meklēšana',
+ iconsCouldNotLoad: 'Ikonas neizdevās ielādēt.',
+ loadingIcons: 'Ielādē ikonas',
+ loadingMoreIcons: 'Ielādē papildu ikonas',
+ moreIcons: 'Vairāk ikonu',
+ noIconsMatch: 'Neviena ikona neatbilst "{{query}}".',
+ searchIconsPlaceholder: 'Meklēt ikonas…',
+ selectedIcon: 'Izvēlēts {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Izveidot',
+ newDeck: 'Jauna kava',
+ newFolder: 'Jauna mape',
+ },
+ descriptions: {
+ defaultWorkspace: 'Glabājiet kavas, mapes un piezīmes kopā.',
+ emptyWorkspace: 'Izveidojiet kavu un pēc tam pievienojiet piezīmes, lai izveidotu atkārtošanas rindu.',
+ emptyFolder: 'Izveidojiet kavu un pēc tam pievienojiet piezīmes, lai izveidotu atkārtošanas rindu.',
+ searchPlaceholder: 'Meklēt mapes, kavas un piezīmes…',
+ },
+ empty: {
+ createFirstDeck: 'Izveidojiet savu pirmo kavu',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Neizdevās dzēst kavu',
+ couldNotDeleteFolder: 'Neizdevās dzēst mapi',
+ couldNotDeleteWorkspace: 'Neizdevās dzēst darbvietu',
+ dashboardCouldNotOpen: 'Neizdevās atvērt informācijas paneli',
+ decksCouldNotLoad: 'Neizdevās ielādēt kavas',
+ decksMayBeOutOfDate: 'Kavas var būt novecojušas',
+ foldersCouldNotLoad: 'Neizdevās ielādēt mapes',
+ foldersMayBeOutOfDate: 'Mapes var būt novecojušas',
+ workspaceCouldNotLoad: 'Neizdevās ielādēt darbvietu',
+ },
+ labels: {
+ dashboard: 'Informācijas panelis',
+ loadingDashboard: 'Ielādē informācijas paneli',
+ newItem: 'Jauns vienums',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Datums nav pieejams',
+ },
+ age: {
+ dayAgo_zero: 'pirms {{count}} dienām',
+ dayAgo_one: 'pirms {{count}} dienas',
+ dayAgo_other: 'pirms {{count}} dienām',
+ hourAgo_zero: 'pirms {{count}} stundām',
+ hourAgo_one: 'pirms {{count}} stundas',
+ hourAgo_other: 'pirms {{count}} stundām',
+ justNow: 'tikko',
+ minuteAgo_zero: 'pirms {{count}} minūtēm',
+ minuteAgo_one: 'pirms {{count}} minūtes',
+ minuteAgo_other: 'pirms {{count}} minūtēm',
+ unavailable: 'datums nav pieejams',
+ weekAgo_zero: 'pirms {{count}} nedēļām',
+ weekAgo_one: 'pirms {{count}} nedēļas',
+ weekAgo_other: 'pirms {{count}} nedēļām',
+ },
+ labels: {
+ deleted: 'Dzēsts {{value}}',
+ due: 'Termiņš: {{value}}',
+ reviewed: 'Atkārtots: {{value}}',
+ updated: 'Atjaunināts {{value}}',
+ updatedUppercase: 'ATJAUNINĀTS {{value}}',
+ },
+ relative: {
+ dayAgo_zero: 'pirms {{count}} dienām',
+ dayAgo_one: 'pirms {{count}} dienas',
+ dayAgo_other: 'pirms {{count}} dienām',
+ inAMoment: 'Pēc brīža',
+ inDay_zero: 'Pēc {{count}} dienām',
+ inDay_one: 'Pēc {{count}} dienas',
+ inDay_other: 'Pēc {{count}} dienām',
+ inMonth_zero: 'Pēc {{count}} mēnešiem',
+ inMonth_one: 'Pēc {{count}} mēneša',
+ inMonth_other: 'Pēc {{count}} mēnešiem',
+ inWeek_zero: 'Pēc {{count}} nedēļām',
+ inWeek_one: 'Pēc {{count}} nedēļas',
+ inWeek_other: 'Pēc {{count}} nedēļām',
+ justNow: 'Tikko',
+ monthAgo_zero: 'pirms {{count}} mēnešiem',
+ monthAgo_one: 'pirms {{count}} mēneša',
+ monthAgo_other: 'pirms {{count}} mēnešiem',
+ secondsAgoShort: 'pirms {{count}} s',
+ minutesAgoShort: 'pirms {{count}} min',
+ hoursAgoShort: 'pirms {{count}} st',
+ today: 'Šodien',
+ tomorrow: 'Rīt',
+ weekAgo_zero: 'pirms {{count}} nedēļām',
+ weekAgo_one: 'pirms {{count}} nedēļas',
+ weekAgo_other: 'pirms {{count}} nedēļām',
+ yesterday: 'Vakar',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: '{{title}} darbības',
+ createDeck: 'Izveidot kavu',
+ createNote: 'Izveidot piezīmi',
+ deleteDeck: 'Dzēst kavu',
+ editDeck: 'Rediģēt kavu',
+ newNote: 'Jauna piezīme',
+ openDeck: 'Atvērt kavu {{title}}',
+ saveDeck: 'Neizdevās saglabāt kavu',
+ studyNow: 'Mācīties tagad',
+ },
+ descriptions: {
+ emptyDeck: 'Pievienojiet piezīmi, lai šai kavai būtu materiāls atkārtošanai.',
+ editorDefault: 'Mērķēta mācību kava.',
+ editorVisual: 'Izvēlieties vāka simbolu šai kavai.',
+ notesSearchPlaceholder: 'Meklēt piezīmes…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Tas pārvieto "{{title}}" uz Atkritni. Vēlāk to varēsiet atjaunot.',
+ deleteDeckFallbackDescription: 'Tas pārvieto šo kavu uz Atkritni. Vēlāk to varēsiet atjaunot.',
+ deleteDeckFallbackTitle: 'Dzēst kavu?',
+ deleteDeckTitle: 'Dzēst "{{title}}"?',
+ deleteNoteDescription: 'Tas pārvieto "{{title}}" uz Atkritni. Vēlāk to varēsiet atjaunot.',
+ deleteNoteFallbackTitle: 'Dzēst piezīmi?',
+ deleteNoteTitle: 'Dzēst "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Nav atbilstošu piezīmju',
+ noMatchingNotesDescription: 'Neviena piezīme neatbilda "{{query}}".',
+ thisDeckIsEmpty: 'Šī kava ir tukša',
+ },
+ errors: {
+ couldNotCreateDeck: 'Neizdevās izveidot kavu',
+ couldNotDeleteDeck: 'Neizdevās dzēst kavu',
+ couldNotDeleteNote: 'Neizdevās dzēst piezīmi',
+ couldNotLoadFolderPath: 'Neizdevās ielādēt mapes ceļu',
+ couldNotSaveDeck: 'Neizdevās saglabāt kavu',
+ deckCouldNotLoad: 'Neizdevās ielādēt kavu',
+ notesCouldNotLoad: 'Neizdevās ielādēt piezīmes',
+ notesMayBeOutOfDate: 'Piezīmes var būt novecojušas',
+ },
+ fields: {
+ descriptionLabel: 'Kavas apraksts',
+ descriptionPlaceholder: 'Ko šī kava palīdzēs atkārtot?',
+ namePlaceholder: 'Kavas nosaukums',
+ untitledDeck: 'Kava bez nosaukuma',
+ untitledDeckLower: 'kava bez nosaukuma',
+ },
+ labels: {
+ createDeckTitle: 'Izveidot kavu',
+ deck: 'Kava',
+ deckNotesSearch: 'Kavas piezīmju meklēšana',
+ deckOverview: 'Kavas pārskats',
+ decks: 'Kavas',
+ due: 'Termiņš',
+ dueToday: 'Termiņš šodien',
+ loadingDeck: 'Ielādē kavu',
+ mastery: 'Apgūšana',
+ notes: 'Piezīmes',
+ },
+ sort: {
+ ariaLabel: 'Kārtot kavas',
+ dueToday: 'Termiņš šodien',
+ title: 'Nosaukums',
+ updated: 'Atjaunināts',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Dati ir mainījušies. Atsvaidziniet un mēģiniet vēlreiz.',
+ forbidden: 'Jums nav atļaujas to darīt.',
+ notFound: 'Neizdevās atrast šo vienumu.',
+ offline: 'Nevar sasniegt pakalpojumu.',
+ timeout: 'Tas aizņēma pārāk ilgu laiku. Mēģiniet vēlreiz.',
+ unauthorized: 'Pierakstieties, lai turpinātu.',
+ unavailable: 'Pakalpojums īslaicīgi nav pieejams.',
+ },
+ fallback: {
+ unexpected: 'Negaidīta kļūda',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Izveidot mapi',
+ deleteFolder: 'Dzēst mapi',
+ editFolder: 'Rediģēt mapi',
+ },
+ descriptions: {
+ editorDefault: 'Mape saistītām kavām.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Tas pārvieto "{{name}}" uz Atkritni. Vēlāk to varēsiet atjaunot.',
+ deleteFolderFallbackDescription: 'Tas pārvieto šo mapi uz Atkritni. Vēlāk to varēsiet atjaunot.',
+ deleteFolderFallbackTitle: 'Dzēst mapi?',
+ deleteFolderTitle: 'Dzēst "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'Šajā mapē nav atbilstību',
+ noMatchesInFolderDescription: 'Neviena mape, kava vai piezīme neatbilda "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Neizdevās izveidot mapi',
+ couldNotDeleteFolder: 'Neizdevās dzēst mapi',
+ couldNotLoadFolderPath: 'Neizdevās ielādēt mapes ceļu',
+ couldNotSaveFolder: 'Neizdevās saglabāt mapi',
+ folderCouldNotLoad: 'Neizdevās ielādēt mapi',
+ },
+ fields: {
+ descriptionLabel: 'Mapes apraksts',
+ descriptionPlaceholder: 'Kas pieder šai mapei?',
+ namePlaceholder: 'Mapes nosaukums',
+ untitledFolder: 'Mape bez nosaukuma',
+ },
+ labels: {
+ createFolderTitle: 'Izveidot mapi',
+ folder: 'Mape',
+ folders: 'Mapes',
+ loadingFolder: 'Ielādē mapi',
+ name: 'Nosaukums',
+ updated: 'Atjaunināts',
+ },
+ sort: {
+ ariaLabel: 'Kārtot mapes',
+ name: 'Nosaukums',
+ updated: 'Atjaunināts',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Ja vietējie un sinhronizētie dati kādreiz nesakritīs, vienums parādīsies šeit.',
+ heading: 'Sinhronizācijas statuss',
+ title: 'Konflikti',
+ noConflicts: 'Konflikti nav atrasti',
+ },
+ labels: {
+ menu: 'Izvēlne',
+ },
+ sections: {
+ settings: {
+ description: 'Pielāgojiet vidi un preferences',
+ title: 'Iestatījumi',
+ },
+ trash: {
+ description: 'Atjaunojiet vai neatgriezeniski dzēsiet noņemtos vienumus',
+ title: 'Atkritne',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Aizvērt redaktoru',
+ openActions: 'Atvērt darbības',
+ openWorkspaces: 'Atvērt darbvietas',
+ },
+ items: {
+ home: 'Sākums',
+ menu: 'Izvēlne',
+ primary: 'Galvenais',
+ settings: 'Iestatījumi',
+ spaces: 'Vietas',
+ trash: 'Atkritne',
+ workspaces: 'Darbvietas',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Pievienot cloze',
+ deleteNote: 'Dzēst piezīmi',
+ editNote: 'Rediģēt piezīmi',
+ hideDerivedCardsNote: 'Paslēpt piezīmi par atvasinātajām kartītēm',
+ openNote: 'Atvērt {{title}}',
+ saveNote: 'Saglabāt piezīmi',
+ showDerivedCardsNote: 'Rādīt piezīmi par atvasinātajām kartītēm',
+ },
+ descriptions: {
+ clozeFormat: 'Katra paslēptā daļa pēc saglabāšanas kļūst par atkārtošanas kartīti.',
+ clozeFormatPrefix: 'Ievietojiet paslēpto tekstu starp',
+ derivedCardsHelper: 'Piezīmes ir patiesības avots atvasinātajām kartītēm.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Tas pārvieto "{{title}}" uz Atkritni. Vēlāk to varēsiet atjaunot.',
+ deleteNoteFallbackDescription: 'Tas pārvieto šo piezīmi uz Atkritni. Vēlāk to varēsiet atjaunot.',
+ deleteNoteFallbackTitle: 'Dzēst piezīmi?',
+ deleteNoteTitle: 'Dzēst "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Neizdevās izveidot piezīmi',
+ couldNotDeleteNote: 'Neizdevās dzēst piezīmi',
+ couldNotSaveNote: 'Neizdevās saglabāt piezīmi',
+ noteCouldNotLoad: 'Neizdevās ielādēt piezīmi',
+ },
+ fields: {
+ back: 'Aizmugure',
+ backPlaceholder: 'Ievadiet aizmuguri',
+ bodyPlaceholder: 'Rakstiet piezīmes saturu ar cloze dzēsumiem…',
+ front: 'Priekšpuse',
+ frontPlaceholder: 'Ievadiet priekšpusi',
+ noteBody: 'Piezīmes saturs',
+ title: 'Nosaukums',
+ titlePlaceholder: 'Pievienojiet piezīmes nosaukumu',
+ untitledCloze: 'Cloze bez nosaukuma',
+ untitledNote: 'Piezīme bez nosaukuma',
+ },
+ labels: {
+ backUppercase: 'AIZMUGURE',
+ basic: 'Pamata',
+ basicLower: 'pamata',
+ basicUppercase: 'PAMATA',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Cloze formāts',
+ clozeUppercase: 'CLOZE',
+ deck: 'Kava',
+ derivedCards: 'ATVASINĀTĀS KARTĪTES',
+ due: 'Termiņš',
+ frontUppercase: 'PRIEKŠPUSE',
+ inProgress: 'Notiek',
+ inProgressUppercase: 'NOTIEK',
+ loadingNote: 'Ielādē piezīmi',
+ loadingNoteEditor: 'Ielādē piezīmju redaktoru',
+ markdownFormatting: 'Markdown formatēšana',
+ mastered: 'Apgūts',
+ masteredUppercase: 'APGŪTS',
+ newNote: 'Jauna piezīme',
+ noteBody: 'PIEZĪMES SATURS',
+ noteContent: 'Piezīmes saturs',
+ noteDetails: 'Piezīmes informācija',
+ noteMetadata: 'Piezīmes metadati',
+ noteType: 'Piezīmes tips',
+ notes: 'Piezīmes',
+ reviewed: 'Atkārtots',
+ studyProgress: 'Mācību progress',
+ studyProgressUppercase: 'MĀCĪBU PROGRESS',
+ titleUppercase: 'NOSAUKUMS',
+ updated: 'Atjaunināts',
+ },
+ sort: {
+ ariaLabel: 'Kārtot piezīmes',
+ title: 'Nosaukums',
+ updated: 'Atjaunināts',
+ },
+ toolbar: {
+ bold: 'Treknraksts',
+ italic: 'Slīpraksts',
+ link: 'Saite',
+ list: 'Saraksts',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Vēlreiz',
+ backToDeck: 'Atpakaļ uz kavu',
+ continueReview: 'Turpināt atkārtošanu',
+ easy: 'Viegli',
+ good: 'Labi',
+ hard: 'Grūti',
+ newNote: 'Jauna piezīme',
+ showAnswer: 'Rādīt atbildi',
+ },
+ errors: {
+ couldNotGradeCard: 'Neizdevās novērtēt kartīti',
+ reviewCouldNotLoad: 'Neizdevās ielādēt atkārtošanu',
+ reviewCouldNotStart: 'Neizdevās sākt atkārtošanu',
+ summaryCouldNotLoad: 'Neizdevās ielādēt atkārtošanas kopsavilkumu',
+ summaryNotAvailable: 'Atkārtošanas kopsavilkums nav pieejams',
+ summaryNotComplete: 'Šī atkārtošana vēl nav pabeigta.',
+ },
+ labels: {
+ cardsReviewed: 'Atkārtotas kartītes',
+ deck: 'Kava',
+ duration: 'Ilgums',
+ loadingReview: 'Ielādē atkārtošanu',
+ loadingSummary: 'Ielādē kopsavilkumu',
+ progress: 'Atkārtošanas progress',
+ review: 'Atkārtošana',
+ reviewComplete: 'Atkārtošana pabeigta',
+ reviewed_zero: 'Atkārtots {{count}}',
+ reviewed_one: 'Atkārtota {{count}}',
+ reviewed_other: 'Atkārtotas {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} st {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'Jūsu progress tika saglabāts šajā kavā.',
+ },
+ unavailable: {
+ description: 'Pievienojiet piezīmi, lai šī kava varētu nonākt atkārtošanas rindā.',
+ title: 'Nav kartīšu atkārtošanai',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Notīrīt meklēšanu',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Šajā darbvietā nav atbilstību',
+ noMatchesInWorkspaceDescription: 'Neviena mape, kava vai piezīme neatbilda "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Neizdevās pabeigt meklēšanu',
+ },
+ labels: {
+ results: 'Meklēšanas rezultāti',
+ resultsFor: 'Rezultāti vaicājumam "{{query}}"',
+ searchingContent: 'Meklē saturā',
+ },
+ resultGroups: {
+ deck: 'Kavas',
+ folder: 'Mapes',
+ note: 'Piezīmes',
+ },
+ resultKinds: {
+ deck: 'kava',
+ folder: 'mape',
+ note: 'piezīme',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Atiestatīt visus iestatījumus',
+ resetSettings: 'Atiestatīt iestatījumus',
+ resetToDefaults: 'Atiestatīt uz noklusējumu',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Ielīmējiet derīgu JSON ar 21 skaitlisku vērtību.',
+ fsrsErrorInvalidParams_zero: 'Ievadiet JSON masīvu tieši ar {{count}} galīgiem skaitļiem.',
+ fsrsErrorInvalidParams_one: 'Ievadiet JSON masīvu tieši ar {{count}} galīgu skaitli.',
+ fsrsErrorInvalidParams_other: 'Ievadiet JSON masīvu tieši ar {{count}} galīgiem skaitļiem.',
+ fsrsHelper: 'Šī ir eksperta pārrakstīšana. Vērtībām jāpaliek secībā.',
+ fsrsJsonLabel: 'FSRS parametru JSON',
+ fsrsTitle: 'Rediģēt FSRS parametrus',
+ fsrsDescription: 'Ielīmējiet JSON masīvu ar 21 skaitli, lai pārrakstītu plānotāja svarus.',
+ resetDescription: 'Tas atjauno laika joslu, mācību limitus un FSRS iestatījumus.',
+ resetDescriptionWithLanguage: 'Tas atjauno valodu, laika joslu, mācību limitus un FSRS iestatījumus.',
+ resetTitle: 'Atiestatīt visus iestatījumus?',
+ timezoneDescription: 'Meklējiet pilsētu vai laika joslas identifikatoru.',
+ timezoneSearchLabel: 'Meklēt laika joslas',
+ timezoneSearchPlaceholder: 'Meklēt laika joslas…',
+ timezoneTitle: 'Izvēlieties laika joslu',
+ },
+ errors: {
+ couldNotResetSettings: 'Neizdevās atiestatīt iestatījumus',
+ couldNotSaveSettings: 'Neizdevās saglabāt iestatījumus',
+ settingsCouldNotLoad: 'Neizdevās ielādēt iestatījumus',
+ settingsUnavailable: 'Iestatījumi nav pieejami.',
+ },
+ labels: {
+ appearance: 'Izskats',
+ automatic: 'Automātiski',
+ fsrsParameters: 'FSRS parametri',
+ general: 'Vispārīgi',
+ language: 'Valoda',
+ loadingSettings: 'Ielādē iestatījumus',
+ masteryHorizon: 'Apgūšanas horizonts',
+ newCardOrder: 'Jauno kartīšu secība',
+ newCardsPerDay: 'Jaunas kartītes dienā',
+ reviewCardsPerDay: 'Atkārtošanas kartītes dienā',
+ savingSettings: 'Saglabā iestatījumus',
+ schedule: 'Grafiks',
+ searchNoTimezones: 'Nav atbilstošu laika joslu.',
+ settings: 'Iestatījumi',
+ settingsReset: 'Iestatījumi atiestatīti',
+ study: 'Mācības',
+ targetRecallProbability: 'Mērķa atcerēšanās varbūtība',
+ theme: 'Motīvs',
+ timezone: 'Laika josla',
+ },
+ options: {
+ languageEnUs: 'Angļu (ASV)',
+ newCardsAfterReviews: 'Pēc atkārtošanām',
+ newCardsBeforeReviews: 'Pirms atkārtošanām',
+ newCardsMixed: 'Jaukti',
+ themeDark: 'Tumšs',
+ themeLight: 'Gaišs',
+ themeSystem: 'Sistēma',
+ timezoneSystem: 'Izmantot sistēmas laika joslu',
+ },
+ rows: {
+ fsrsDescription: 'Eksperta modeļa svari',
+ languageDescription: 'Saskarnes valoda',
+ masteryHorizonDescription: 'Dienu skaits, cik ilgi kartītei jāpaliek atceramai pie mērķa varbūtības vai virs tās, lai tā skaitītos apgūta',
+ newCardOrderDescription: 'Jauno kartīšu secība attiecībā pret atkārtošanām',
+ newCardsPerDayDescription: 'Maksimālais jauno kartīšu skaits dienā',
+ reviewCardsPerDayDescription: 'Maksimālais atkārtošanas kartīšu skaits dienā',
+ targetRecallProbabilityDescription: 'Minimālā atcerēšanās varbūtība nākamajā ieplānotajā atkārtošanā',
+ timezoneDescription: 'Izmantojiet automātisku laika joslu vai izvēlieties pilsētu.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Dzēst neatgriezeniski',
+ empty: 'Iztukšot',
+ emptyTrash: 'Iztukšot atkritni',
+ restore: 'Atjaunot',
+ restoringItem: 'Atjauno {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Tas neatgriezeniski dzēsīs "{{title}}". To nevar atsaukt.',
+ deleteItemFallbackDescription: 'Tas neatgriezeniski dzēsīs šo vienumu. To nevar atsaukt.',
+ deleteItemFallbackTitle: 'Dzēst vienumu?',
+ deleteItemTitle: 'Dzēst "{{title}}"?',
+ emptyTrashDescription: 'Tas neatgriezeniski dzēsīs visu Atkritnē. To nevar atsaukt.',
+ emptyTrashTitle: 'Iztukšot atkritni?',
+ },
+ empty: {
+ description: 'Dzēstie vienumi parādīsies šeit pirms neatgriezeniskas noņemšanas.',
+ title: 'Atkritne ir tukša',
+ },
+ errors: {
+ couldNotDeleteItem: 'Neizdevās dzēst vienumu',
+ couldNotEmptyTrash: 'Neizdevās iztukšot atkritni',
+ couldNotRestoreItem: 'Neizdevās atjaunot vienumu',
+ trashCouldNotLoad: 'Neizdevās ielādēt atkritni',
+ trashMayBeOutOfDate: 'Atkritne var būt novecojusi',
+ },
+ labels: {
+ deletedAge: 'Dzēsts {{value}}',
+ itemCount_zero: '{{count}} vienumu',
+ itemCount_one: '{{count}} vienums',
+ itemCount_other: '{{count}} vienumi',
+ lastEmptied: 'Pēdējoreiz iztukšots {{value}}',
+ loadingTrash: 'Ielādē Atkritni',
+ originalLocation: 'Sākotnējā atrašanās vieta: {{location}}',
+ title: 'Atkritne',
+ trashActions: '{{title}} atkritnes darbības',
+ },
+ kinds: {
+ deck: 'Kava',
+ folder: 'Mape',
+ note: 'Piezīme',
+ workspace: 'Darbvieta',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Izveidot darbvietu',
+ deleteWorkspace: 'Dzēst darbvietu',
+ editWorkspace: 'Rediģēt darbvietu',
+ newWorkspace: 'Jauna darbvieta',
+ openWorkspace: 'Atvērt {{title}}',
+ openingWorkspace: 'Atver {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Mācību konteksts.',
+ editorVisual: 'Izvēlieties vizuālo enkuru šai darbvietai.',
+ emptyList: 'Atdaliet kavas, piezīmes un atkārtošanas rindas pēc mācību konteksta.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Tas pārvieto "{{title}}" uz Atkritni. Vēlāk to varēsiet atjaunot.',
+ deleteWorkspaceFallbackDescription: 'Tas pārvieto šo darbvietu uz Atkritni. Vēlāk to varēsiet atjaunot.',
+ deleteWorkspaceFallbackTitle: 'Dzēst darbvietu?',
+ deleteWorkspaceTitle: 'Dzēst "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Sāciet ar darbvietu',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Neizdevās izveidot darbvietu',
+ couldNotDeleteWorkspace: 'Neizdevās dzēst darbvietu',
+ couldNotOpenWorkspace: 'Neizdevās atvērt darbvietu',
+ couldNotSaveWorkspace: 'Neizdevās saglabāt darbvietu',
+ workspaceCouldNotLoad: 'Neizdevās ielādēt darbvietu',
+ workspacesCouldNotLoad: 'Neizdevās ielādēt darbvietas',
+ },
+ fields: {
+ descriptionLabel: 'Darbvietas apraksts',
+ descriptionPlaceholder: 'Kas pieder šai darbvietai?',
+ namePlaceholder: 'Darbvietas nosaukums',
+ untitledWorkspace: 'Darbvieta bez nosaukuma',
+ },
+ labels: {
+ createWorkspaceTitle: 'Izveidot darbvietu',
+ loadingWorkspaces: 'Ielādē darbvietas',
+ workspace: 'Darbvieta',
+ workspaces: 'Darbvietas',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/nb.ts b/ui/src/core/i18n/resources/nb.ts
new file mode 100644
index 0000000..a4d7d01
--- /dev/null
+++ b/ui/src/core/i18n/resources/nb.ts
@@ -0,0 +1,623 @@
+export const nb = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Prøv igjen. Hvis dette fortsetter, åpner du Clear på nytt.',
+ title: 'Kunne ikke starte',
+ },
+ loadingTitle: 'Forbereder studieområdet ditt',
+ },
+ common: {
+ actions: {
+ back: 'Tilbake',
+ cancel: 'Avbryt',
+ checkAgain: 'Sjekk igjen',
+ close: 'Lukk',
+ create: 'Opprett',
+ delete: 'Slett',
+ dismissError: 'Lukk feil',
+ dismissStatus: 'Lukk status',
+ edit: 'Rediger',
+ itemActions: 'Handlinger for {{title}}',
+ reset: 'Tilbakestill',
+ review: 'Repetisjon',
+ save: 'Lagre',
+ saveChanges: 'Lagre endringer',
+ tryAgain: 'Prøv igjen',
+ },
+ labels: {
+ active: 'Aktiv',
+ clear: 'Clear',
+ custom: 'Tilpasset',
+ default: 'Standard',
+ loadingEditor: 'Laster redigerer',
+ name: 'Navn',
+ completedTask: 'Fullført oppgave',
+ description: 'Beskrivelse',
+ incompleteTask: 'Ufullført oppgave',
+ percentageInput: '{{label}} i prosent',
+ visual: 'Visuell',
+ },
+ status: {
+ actionFailed: 'Handlingen mislyktes',
+ actionInProgress: 'Handling pågår',
+ },
+ sort: {
+ ascending: 'Stig.',
+ column: 'Kolonne',
+ descending: 'Synk.',
+ direction: 'Retning',
+ sort: 'Sorter',
+ },
+ search: {
+ label: 'Søk',
+ },
+ visualPicker: {
+ allLucideIcons: 'Alle Lucide-ikoner',
+ browseIconsFor: 'Bla gjennom eller søk etter ikoner for {{label}}.',
+ chooseIcon: 'Velg ikon',
+ iconPicker: 'Ikonvelger for {{label}}',
+ iconSearch: 'Ikonsøk for {{label}}',
+ iconsCouldNotLoad: 'Ikonene kunne ikke lastes inn.',
+ loadingIcons: 'Laster ikoner',
+ loadingMoreIcons: 'Laster flere ikoner',
+ moreIcons: 'Flere ikoner',
+ noIconsMatch: 'Ingen ikoner samsvarer med "{{query}}".',
+ searchIconsPlaceholder: 'Søk etter ikoner…',
+ selectedIcon: 'Valgt {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Opprett',
+ newDeck: 'Ny kortstokk',
+ newFolder: 'Ny mappe',
+ },
+ descriptions: {
+ defaultWorkspace: 'Hold kortstokker, mapper og notater samlet.',
+ emptyWorkspace: 'Opprett en kortstokk, og legg deretter til notater for å bygge repetisjonskøen din.',
+ emptyFolder: 'Opprett en kortstokk, og legg deretter til notater for å bygge en repetisjonskø.',
+ searchPlaceholder: 'Søk i mapper, kortstokker og notater…',
+ },
+ empty: {
+ createFirstDeck: 'Opprett din første kortstokk',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Kortstokken kunne ikke slettes',
+ couldNotDeleteFolder: 'Mappen kunne ikke slettes',
+ couldNotDeleteWorkspace: 'Arbeidsområdet kunne ikke slettes',
+ dashboardCouldNotOpen: 'Dashbordet kunne ikke åpnes',
+ decksCouldNotLoad: 'Kortstokker kunne ikke lastes inn',
+ decksMayBeOutOfDate: 'Kortstokker kan være utdaterte',
+ foldersCouldNotLoad: 'Mapper kunne ikke lastes inn',
+ foldersMayBeOutOfDate: 'Mapper kan være utdaterte',
+ workspaceCouldNotLoad: 'Arbeidsområdet kunne ikke lastes inn',
+ },
+ labels: {
+ dashboard: 'Dashbord',
+ loadingDashboard: 'Laster dashbord',
+ newItem: 'Nytt element',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Dato utilgjengelig',
+ },
+ age: {
+ dayAgo_one: '{{count}} dag siden',
+ dayAgo_other: '{{count}} dager siden',
+ hourAgo_one: '{{count}} time siden',
+ hourAgo_other: '{{count}} timer siden',
+ justNow: 'akkurat nå',
+ minuteAgo_one: '{{count}} minutt siden',
+ minuteAgo_other: '{{count}} minutter siden',
+ unavailable: 'dato utilgjengelig',
+ weekAgo_one: '{{count}} uke siden',
+ weekAgo_other: '{{count}} uker siden',
+ },
+ labels: {
+ deleted: 'Slettet {{value}}',
+ due: 'Frist: {{value}}',
+ reviewed: 'Repetert: {{value}}',
+ updated: 'Oppdatert {{value}}',
+ updatedUppercase: 'OPPDATERT {{value}}',
+ },
+ relative: {
+ dayAgo_one: '{{count}} dag siden',
+ dayAgo_other: '{{count}} dager siden',
+ inAMoment: 'Om et øyeblikk',
+ inDay_one: 'Om {{count}} dag',
+ inDay_other: 'Om {{count}} dager',
+ inMonth_one: 'Om {{count}} måned',
+ inMonth_other: 'Om {{count}} måneder',
+ inWeek_one: 'Om {{count}} uke',
+ inWeek_other: 'Om {{count}} uker',
+ justNow: 'Akkurat nå',
+ monthAgo_one: '{{count}} måned siden',
+ monthAgo_other: '{{count}} måneder siden',
+ secondsAgoShort: '{{count}} s siden',
+ minutesAgoShort: '{{count}} min siden',
+ hoursAgoShort: '{{count}} t siden',
+ today: 'I dag',
+ tomorrow: 'I morgen',
+ weekAgo_one: '{{count}} uke siden',
+ weekAgo_other: '{{count}} uker siden',
+ yesterday: 'I går',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Handlinger for {{title}}',
+ createDeck: 'Opprett kortstokk',
+ createNote: 'Opprett notat',
+ deleteDeck: 'Slett kortstokk',
+ editDeck: 'Rediger kortstokk',
+ newNote: 'Nytt notat',
+ openDeck: 'Åpne kortstokken {{title}}',
+ saveDeck: 'Kortstokken kunne ikke lagres',
+ studyNow: 'Studer nå',
+ },
+ descriptions: {
+ emptyDeck: 'Legg til et notat, så denne kortstokken har materiale å repetere.',
+ editorDefault: 'Fokusert studiekortstokk.',
+ editorVisual: 'Velg et omslagssymbol for denne kortstokken.',
+ notesSearchPlaceholder: 'Søk i notater…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Dette flytter "{{title}}" til Papirkurv. Du kan gjenopprette den senere.',
+ deleteDeckFallbackDescription: 'Dette flytter denne kortstokken til Papirkurv. Du kan gjenopprette den senere.',
+ deleteDeckFallbackTitle: 'Slette kortstokk?',
+ deleteDeckTitle: 'Slette "{{title}}"?',
+ deleteNoteDescription: 'Dette flytter "{{title}}" til Papirkurv. Du kan gjenopprette det senere.',
+ deleteNoteFallbackTitle: 'Slette notat?',
+ deleteNoteTitle: 'Slette "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Ingen samsvarende notater',
+ noMatchingNotesDescription: 'Ingen notater samsvarte med "{{query}}".',
+ thisDeckIsEmpty: 'Denne kortstokken er tom',
+ },
+ errors: {
+ couldNotCreateDeck: 'Kortstokken kunne ikke opprettes',
+ couldNotDeleteDeck: 'Kortstokken kunne ikke slettes',
+ couldNotDeleteNote: 'Notatet kunne ikke slettes',
+ couldNotLoadFolderPath: 'Mappestien kunne ikke lastes inn',
+ couldNotSaveDeck: 'Kortstokken kunne ikke lagres',
+ deckCouldNotLoad: 'Kortstokken kunne ikke lastes inn',
+ notesCouldNotLoad: 'Notater kunne ikke lastes inn',
+ notesMayBeOutOfDate: 'Notater kan være utdaterte',
+ },
+ fields: {
+ descriptionLabel: 'Kortstokkbeskrivelse',
+ descriptionPlaceholder: 'Hva skal denne kortstokken hjelpe deg med å repetere?',
+ namePlaceholder: 'Navn på kortstokk',
+ untitledDeck: 'Kortstokk uten tittel',
+ untitledDeckLower: 'kortstokk uten tittel',
+ },
+ labels: {
+ createDeckTitle: 'Opprett kortstokk',
+ deck: 'Kortstokk',
+ deckNotesSearch: 'Søk i kortstokknotater',
+ deckOverview: 'Kortstokkoversikt',
+ decks: 'Kortstokker',
+ due: 'Frist',
+ dueToday: 'Frist i dag',
+ loadingDeck: 'Laster kortstokk',
+ mastery: 'Mestring',
+ notes: 'Notater',
+ },
+ sort: {
+ ariaLabel: 'Sorter kortstokker',
+ dueToday: 'Frist i dag',
+ title: 'Tittel',
+ updated: 'Oppdatert',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Dataene ble endret. Oppdater og prøv igjen.',
+ forbidden: 'Du har ikke tillatelse til å gjøre dette.',
+ notFound: 'Vi fant ikke dette elementet.',
+ offline: 'Kan ikke nå tjenesten.',
+ timeout: 'Dette tok for lang tid. Prøv igjen.',
+ unauthorized: 'Logg inn for å fortsette.',
+ unavailable: 'Tjenesten er midlertidig utilgjengelig.',
+ },
+ fallback: {
+ unexpected: 'Uventet feil',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Opprett mappe',
+ deleteFolder: 'Slett mappe',
+ editFolder: 'Rediger mappe',
+ },
+ descriptions: {
+ editorDefault: 'Mappe for relaterte kortstokker.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Dette flytter "{{name}}" til Papirkurv. Du kan gjenopprette den senere.',
+ deleteFolderFallbackDescription: 'Dette flytter denne mappen til Papirkurv. Du kan gjenopprette den senere.',
+ deleteFolderFallbackTitle: 'Slette mappe?',
+ deleteFolderTitle: 'Slette "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'Ingen treff i denne mappen',
+ noMatchesInFolderDescription: 'Ingen mapper, kortstokker eller notater samsvarte med "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Mappen kunne ikke opprettes',
+ couldNotDeleteFolder: 'Mappen kunne ikke slettes',
+ couldNotLoadFolderPath: 'Mappestien kunne ikke lastes inn',
+ couldNotSaveFolder: 'Mappen kunne ikke lagres',
+ folderCouldNotLoad: 'Mappen kunne ikke lastes inn',
+ },
+ fields: {
+ descriptionLabel: 'Mappebeskrivelse',
+ descriptionPlaceholder: 'Hva hører hjemme i denne mappen?',
+ namePlaceholder: 'Mappenavn',
+ untitledFolder: 'Mappe uten tittel',
+ },
+ labels: {
+ createFolderTitle: 'Opprett mappe',
+ folder: 'Mappe',
+ folders: 'Mapper',
+ loadingFolder: 'Laster mappe',
+ name: 'Navn',
+ updated: 'Oppdatert',
+ },
+ sort: {
+ ariaLabel: 'Sorter mapper',
+ name: 'Navn',
+ updated: 'Oppdatert',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Hvis lokale og synkroniserte data noen gang er uenige, vises elementet her.',
+ heading: 'Synkroniseringsstatus',
+ title: 'Konflikter',
+ noConflicts: 'Ingen konflikter funnet',
+ },
+ labels: {
+ menu: 'Meny',
+ },
+ sections: {
+ settings: {
+ description: 'Tilpass miljøet og innstillingene dine',
+ title: 'Innstillinger',
+ },
+ trash: {
+ description: 'Gjenopprett eller slett fjernede elementer permanent',
+ title: 'Papirkurv',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Lukk redigerer',
+ openActions: 'Åpne handlinger',
+ openWorkspaces: 'Åpne arbeidsområder',
+ },
+ items: {
+ home: 'Hjem',
+ menu: 'Meny',
+ primary: 'Primær',
+ settings: 'Innstillinger',
+ spaces: 'Områder',
+ trash: 'Papirkurv',
+ workspaces: 'Arbeidsområder',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Legg til cloze',
+ deleteNote: 'Slett notat',
+ editNote: 'Rediger notat',
+ hideDerivedCardsNote: 'Skjul notat om avledede kort',
+ openNote: 'Åpne {{title}}',
+ saveNote: 'Lagre notat',
+ showDerivedCardsNote: 'Vis notat om avledede kort',
+ },
+ descriptions: {
+ clozeFormat: 'Hver skjulte del blir et repetisjonskort når du lagrer.',
+ clozeFormatPrefix: 'Pakk skjult tekst inn med',
+ derivedCardsHelper: 'Notater er sannhetskilden for avledede kort.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Dette flytter "{{title}}" til Papirkurv. Du kan gjenopprette det senere.',
+ deleteNoteFallbackDescription: 'Dette flytter dette notatet til Papirkurv. Du kan gjenopprette det senere.',
+ deleteNoteFallbackTitle: 'Slette notat?',
+ deleteNoteTitle: 'Slette "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Notatet kunne ikke opprettes',
+ couldNotDeleteNote: 'Notatet kunne ikke slettes',
+ couldNotSaveNote: 'Notatet kunne ikke lagres',
+ noteCouldNotLoad: 'Notatet kunne ikke lastes inn',
+ },
+ fields: {
+ back: 'Bakside',
+ backPlaceholder: 'Skriv inn bakside',
+ bodyPlaceholder: 'Skriv notatinnholdet med cloze-slettinger…',
+ front: 'Forside',
+ frontPlaceholder: 'Skriv inn forside',
+ noteBody: 'Notatinnhold',
+ title: 'Tittel',
+ titlePlaceholder: 'Legg til en notattittel',
+ untitledCloze: 'Cloze uten tittel',
+ untitledNote: 'Notat uten tittel',
+ },
+ labels: {
+ backUppercase: 'BAKSIDE',
+ basic: 'Grunnleggende',
+ basicLower: 'grunnleggende',
+ basicUppercase: 'GRUNNLEGGENDE',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Cloze-format',
+ clozeUppercase: 'CLOZE',
+ deck: 'Kortstokk',
+ derivedCards: 'AVLEDEDE KORT',
+ due: 'Frist',
+ frontUppercase: 'FORSIDE',
+ inProgress: 'Pågår',
+ inProgressUppercase: 'PÅGÅR',
+ loadingNote: 'Laster notat',
+ loadingNoteEditor: 'Laster notatredigerer',
+ markdownFormatting: 'Markdown-formatering',
+ mastered: 'Mestret',
+ masteredUppercase: 'MESTRET',
+ newNote: 'Nytt notat',
+ noteBody: 'NOTATINNHOLD',
+ noteContent: 'Notatinnhold',
+ noteDetails: 'Notatdetaljer',
+ noteMetadata: 'Notatmetadata',
+ noteType: 'Notattype',
+ notes: 'Notater',
+ reviewed: 'Repetert',
+ studyProgress: 'Studiefremgang',
+ studyProgressUppercase: 'STUDIEFREMGANG',
+ titleUppercase: 'TITTEL',
+ updated: 'Oppdatert',
+ },
+ sort: {
+ ariaLabel: 'Sorter notater',
+ title: 'Tittel',
+ updated: 'Oppdatert',
+ },
+ toolbar: {
+ bold: 'Fet',
+ italic: 'Kursiv',
+ link: 'Lenke',
+ list: 'Liste',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Igjen',
+ backToDeck: 'Tilbake til kortstokk',
+ continueReview: 'Fortsett repetisjon',
+ easy: 'Lett',
+ good: 'Bra',
+ hard: 'Vanskelig',
+ newNote: 'Nytt notat',
+ showAnswer: 'Vis svar',
+ },
+ errors: {
+ couldNotGradeCard: 'Kortet kunne ikke vurderes',
+ reviewCouldNotLoad: 'Repetisjonen kunne ikke lastes inn',
+ reviewCouldNotStart: 'Repetisjonen kunne ikke startes',
+ summaryCouldNotLoad: 'Repetisjonssammendraget kunne ikke lastes inn',
+ summaryNotAvailable: 'Repetisjonssammendraget er ikke tilgjengelig',
+ summaryNotComplete: 'Denne repetisjonen er ikke fullført ennå.',
+ },
+ labels: {
+ cardsReviewed: 'Kort repetert',
+ deck: 'Kortstokk',
+ duration: 'Varighet',
+ loadingReview: 'Laster repetisjon',
+ loadingSummary: 'Laster sammendrag',
+ progress: 'Repetisjonsfremgang',
+ review: 'Repetisjon',
+ reviewComplete: 'Repetisjon fullført',
+ reviewed_one: 'Repetert {{count}}',
+ reviewed_other: 'Repetert {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} t {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'Fremgangen din ble lagret i denne kortstokken.',
+ },
+ unavailable: {
+ description: 'Legg til et notat, så denne kortstokken kan gå inn i repetisjonskøen.',
+ title: 'Ingen kort å repetere',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Tøm søk',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Ingen treff i dette arbeidsområdet',
+ noMatchesInWorkspaceDescription: 'Ingen mapper, kortstokker eller notater samsvarte med "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Søket kunne ikke fullføres',
+ },
+ labels: {
+ results: 'Søkeresultater',
+ resultsFor: 'Resultater for "{{query}}"',
+ searchingContent: 'Søker i innhold',
+ },
+ resultGroups: {
+ deck: 'Kortstokker',
+ folder: 'Mapper',
+ note: 'Notater',
+ },
+ resultKinds: {
+ deck: 'kortstokk',
+ folder: 'mappe',
+ note: 'notat',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Tilbakestill alle innstillinger',
+ resetSettings: 'Tilbakestill innstillinger',
+ resetToDefaults: 'Tilbakestill til standard',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Lim inn gyldig JSON med 21 numeriske verdier.',
+ fsrsErrorInvalidParams_one: 'Skriv inn en JSON-matrise med nøyaktig {{count}} endelig tall.',
+ fsrsErrorInvalidParams_other: 'Skriv inn en JSON-matrise med nøyaktig {{count}} endelige tall.',
+ fsrsHelper: 'Dette er en ekspert-overstyring. Verdiene må beholde rekkefølgen.',
+ fsrsJsonLabel: 'FSRS-parametere JSON',
+ fsrsTitle: 'Rediger FSRS-parametere',
+ fsrsDescription: 'Lim inn en JSON-matrise med 21 tall for å overstyre planleggervektene.',
+ resetDescription: 'Dette tilbakestiller tidssone, studiegrenser og FSRS-innstillinger.',
+ resetDescriptionWithLanguage: 'Dette tilbakestiller språk, tidssone, studiegrenser og FSRS-innstillinger.',
+ resetTitle: 'Tilbakestille alle innstillinger?',
+ timezoneDescription: 'Søk etter en by eller tidssoneidentifikator.',
+ timezoneSearchLabel: 'Søk tidssoner',
+ timezoneSearchPlaceholder: 'Søk tidssoner…',
+ timezoneTitle: 'Velg tidssone',
+ },
+ errors: {
+ couldNotResetSettings: 'Innstillingene kunne ikke tilbakestilles',
+ couldNotSaveSettings: 'Innstillingene kunne ikke lagres',
+ settingsCouldNotLoad: 'Innstillingene kunne ikke lastes inn',
+ settingsUnavailable: 'Innstillinger er utilgjengelige.',
+ },
+ labels: {
+ appearance: 'Utseende',
+ automatic: 'Automatisk',
+ fsrsParameters: 'FSRS-parametere',
+ general: 'Generelt',
+ language: 'Språk',
+ loadingSettings: 'Laster innstillinger',
+ masteryHorizon: 'Mestringshorisont',
+ newCardOrder: 'Rekkefølge for nye kort',
+ newCardsPerDay: 'Nye kort per dag',
+ reviewCardsPerDay: 'Repetisjonskort per dag',
+ savingSettings: 'Lagrer innstillinger',
+ schedule: 'Plan',
+ searchNoTimezones: 'Ingen samsvarende tidssoner.',
+ settings: 'Innstillinger',
+ settingsReset: 'Innstillinger tilbakestilt',
+ study: 'Studie',
+ targetRecallProbability: 'Mål for sannsynlighet for gjenkalling',
+ theme: 'Tema',
+ timezone: 'Tidssone',
+ },
+ options: {
+ languageEnUs: 'Engelsk (USA)',
+ newCardsAfterReviews: 'Etter repetisjoner',
+ newCardsBeforeReviews: 'Før repetisjoner',
+ newCardsMixed: 'Blandet',
+ themeDark: 'Mørk',
+ themeLight: 'Lys',
+ themeSystem: 'System',
+ timezoneSystem: 'Bruk systemets tidssone',
+ },
+ rows: {
+ fsrsDescription: 'Ekspertmodellvekter',
+ languageDescription: 'Grensesnittspråk',
+ masteryHorizonDescription: 'Antall dager et kort må forbli gjenkallbart ved eller over målsannsynligheten for å telle som mestret',
+ newCardOrderDescription: 'Rekkefølge for nye kort i forhold til repetisjoner',
+ newCardsPerDayDescription: 'Maksimalt antall nye kort per dag',
+ reviewCardsPerDayDescription: 'Maksimalt antall repetisjonskort per dag',
+ targetRecallProbabilityDescription: 'Minimum sannsynlighet for gjenkalling ved neste planlagte repetisjon',
+ timezoneDescription: 'Bruk automatisk tidssone eller velg en by.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Slett permanent',
+ empty: 'Tøm',
+ emptyTrash: 'Tøm papirkurv',
+ restore: 'Gjenopprett',
+ restoringItem: 'Gjenoppretter {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Dette sletter "{{title}}" permanent. Dette kan ikke angres.',
+ deleteItemFallbackDescription: 'Dette sletter dette elementet permanent. Dette kan ikke angres.',
+ deleteItemFallbackTitle: 'Slette element?',
+ deleteItemTitle: 'Slette "{{title}}"?',
+ emptyTrashDescription: 'Dette sletter alt i Papirkurv permanent. Dette kan ikke angres.',
+ emptyTrashTitle: 'Tømme papirkurv?',
+ },
+ empty: {
+ description: 'Elementer du sletter, vises her før permanent fjerning.',
+ title: 'Papirkurven er tom',
+ },
+ errors: {
+ couldNotDeleteItem: 'Elementet kunne ikke slettes',
+ couldNotEmptyTrash: 'Papirkurven kunne ikke tømmes',
+ couldNotRestoreItem: 'Elementet kunne ikke gjenopprettes',
+ trashCouldNotLoad: 'Papirkurven kunne ikke lastes inn',
+ trashMayBeOutOfDate: 'Papirkurven kan være utdatert',
+ },
+ labels: {
+ deletedAge: 'Slettet {{value}}',
+ itemCount_one: '{{count}} element',
+ itemCount_other: '{{count}} elementer',
+ lastEmptied: 'Sist tømt {{value}}',
+ loadingTrash: 'Laster Papirkurv',
+ originalLocation: 'Opprinnelig plassering: {{location}}',
+ title: 'Papirkurv',
+ trashActions: 'Papirkurvhandlinger for {{title}}',
+ },
+ kinds: {
+ deck: 'Kortstokk',
+ folder: 'Mappe',
+ note: 'Notat',
+ workspace: 'Arbeidsområde',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Opprett arbeidsområde',
+ deleteWorkspace: 'Slett arbeidsområde',
+ editWorkspace: 'Rediger arbeidsområde',
+ newWorkspace: 'Nytt arbeidsområde',
+ openWorkspace: 'Åpne {{title}}',
+ openingWorkspace: 'Åpner {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Studiekontekst.',
+ editorVisual: 'Velg et visuelt anker for dette arbeidsområdet.',
+ emptyList: 'Skill kortstokker, notater og repetisjonskøer etter studiekontekst.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Dette flytter "{{title}}" til Papirkurv. Du kan gjenopprette det senere.',
+ deleteWorkspaceFallbackDescription: 'Dette flytter dette arbeidsområdet til Papirkurv. Du kan gjenopprette det senere.',
+ deleteWorkspaceFallbackTitle: 'Slette arbeidsområde?',
+ deleteWorkspaceTitle: 'Slette "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Start med et arbeidsområde',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Arbeidsområdet kunne ikke opprettes',
+ couldNotDeleteWorkspace: 'Arbeidsområdet kunne ikke slettes',
+ couldNotOpenWorkspace: 'Arbeidsområdet kunne ikke åpnes',
+ couldNotSaveWorkspace: 'Arbeidsområdet kunne ikke lagres',
+ workspaceCouldNotLoad: 'Arbeidsområdet kunne ikke lastes inn',
+ workspacesCouldNotLoad: 'Arbeidsområder kunne ikke lastes inn',
+ },
+ fields: {
+ descriptionLabel: 'Arbeidsområdebeskrivelse',
+ descriptionPlaceholder: 'Hva hører hjemme i dette arbeidsområdet?',
+ namePlaceholder: 'Navn på arbeidsområde',
+ untitledWorkspace: 'Arbeidsområde uten tittel',
+ },
+ labels: {
+ createWorkspaceTitle: 'Opprett arbeidsområde',
+ loadingWorkspaces: 'Laster arbeidsområder',
+ workspace: 'Arbeidsområde',
+ workspaces: 'Arbeidsområder',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/nl.ts b/ui/src/core/i18n/resources/nl.ts
new file mode 100644
index 0000000..f8c9c82
--- /dev/null
+++ b/ui/src/core/i18n/resources/nl.ts
@@ -0,0 +1,623 @@
+export const nl = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Probeer het opnieuw. Als dit blijft gebeuren, open Clear opnieuw.',
+ title: 'Kan niet starten',
+ },
+ loadingTitle: 'Je studieruimte voorbereiden',
+ },
+ common: {
+ actions: {
+ back: 'Terug',
+ cancel: 'Annuleren',
+ checkAgain: 'Opnieuw controleren',
+ close: 'Sluiten',
+ create: 'Maken',
+ delete: 'Verwijderen',
+ dismissError: 'Fout sluiten',
+ dismissStatus: 'Status sluiten',
+ edit: 'Bewerken',
+ itemActions: 'Acties voor {{title}}',
+ reset: 'Resetten',
+ review: 'Herhalen',
+ save: 'Opslaan',
+ saveChanges: 'Wijzigingen opslaan',
+ tryAgain: 'Opnieuw proberen',
+ },
+ labels: {
+ active: 'Actief',
+ clear: 'Clear',
+ custom: 'Aangepast',
+ default: 'Standaard',
+ loadingEditor: 'Editor laden',
+ name: 'Naam',
+ completedTask: 'Voltooide taak',
+ description: 'Beschrijving',
+ incompleteTask: 'Onvoltooide taak',
+ percentageInput: 'Percentage voor {{label}}',
+ visual: 'Visueel',
+ },
+ status: {
+ actionFailed: 'Actie mislukt',
+ actionInProgress: 'Actie bezig',
+ },
+ sort: {
+ ascending: 'Opl.',
+ column: 'Kolom',
+ descending: 'Afl.',
+ direction: 'Richting',
+ sort: 'Sorteren',
+ },
+ search: {
+ label: 'Zoeken',
+ },
+ visualPicker: {
+ allLucideIcons: 'Alle Lucide-iconen',
+ browseIconsFor: 'Blader door iconen of zoek iconen voor {{label}}.',
+ chooseIcon: 'Icoon kiezen',
+ iconPicker: 'Iconenkiezer voor {{label}}',
+ iconSearch: 'Iconen zoeken voor {{label}}',
+ iconsCouldNotLoad: 'Iconen konden niet worden geladen.',
+ loadingIcons: 'Iconen laden',
+ loadingMoreIcons: 'Meer iconen laden',
+ moreIcons: 'Meer iconen',
+ noIconsMatch: 'Geen iconen gevonden voor "{{query}}".',
+ searchIconsPlaceholder: 'Iconen zoeken…',
+ selectedIcon: '{{label}} geselecteerd',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Maken',
+ newDeck: 'Nieuwe kaartenset',
+ newFolder: 'Nieuwe map',
+ },
+ descriptions: {
+ defaultWorkspace: 'Houd kaartensets, mappen en notities bij elkaar.',
+ emptyWorkspace: 'Maak een kaartenset en voeg daarna notities toe om je herhaalwachtrij op te bouwen.',
+ emptyFolder: 'Maak een kaartenset en voeg daarna notities toe om een herhaalwachtrij op te bouwen.',
+ searchPlaceholder: 'Mappen, kaartensets en notities zoeken…',
+ },
+ empty: {
+ createFirstDeck: 'Maak je eerste kaartenset',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Kan kaartenset niet verwijderen',
+ couldNotDeleteFolder: 'Kan map niet verwijderen',
+ couldNotDeleteWorkspace: 'Kan werkruimte niet verwijderen',
+ dashboardCouldNotOpen: 'Dashboard kon niet worden geopend',
+ decksCouldNotLoad: 'Kaartensets konden niet worden geladen',
+ decksMayBeOutOfDate: 'Kaartensets zijn mogelijk verouderd',
+ foldersCouldNotLoad: 'Mappen konden niet worden geladen',
+ foldersMayBeOutOfDate: 'Mappen zijn mogelijk verouderd',
+ workspaceCouldNotLoad: 'Werkruimte kon niet worden geladen',
+ },
+ labels: {
+ dashboard: 'Dashboard',
+ loadingDashboard: 'Dashboard laden',
+ newItem: 'Nieuw item',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Datum niet beschikbaar',
+ },
+ age: {
+ dayAgo_one: '{{count}} dag geleden',
+ dayAgo_other: '{{count}} dagen geleden',
+ hourAgo_one: '{{count}} uur geleden',
+ hourAgo_other: '{{count}} uur geleden',
+ justNow: 'zojuist',
+ minuteAgo_one: '{{count}} minuut geleden',
+ minuteAgo_other: '{{count}} minuten geleden',
+ unavailable: 'datum niet beschikbaar',
+ weekAgo_one: '{{count}} week geleden',
+ weekAgo_other: '{{count}} weken geleden',
+ },
+ labels: {
+ deleted: 'Verwijderd {{value}}',
+ due: 'Te doen: {{value}}',
+ reviewed: 'Herhaald: {{value}}',
+ updated: 'Bijgewerkt {{value}}',
+ updatedUppercase: 'BIJGEWERKT {{value}}',
+ },
+ relative: {
+ dayAgo_one: '{{count}} dag geleden',
+ dayAgo_other: '{{count}} dagen geleden',
+ inAMoment: 'Zo meteen',
+ inDay_one: 'Over {{count}} dag',
+ inDay_other: 'Over {{count}} dagen',
+ inMonth_one: 'Over {{count}} maand',
+ inMonth_other: 'Over {{count}} maanden',
+ inWeek_one: 'Over {{count}} week',
+ inWeek_other: 'Over {{count}} weken',
+ justNow: 'Zojuist',
+ monthAgo_one: '{{count}} maand geleden',
+ monthAgo_other: '{{count}} maanden geleden',
+ secondsAgoShort: '{{count}} s geleden',
+ minutesAgoShort: '{{count}} min geleden',
+ hoursAgoShort: '{{count}} u geleden',
+ today: 'Vandaag',
+ tomorrow: 'Morgen',
+ weekAgo_one: '{{count}} week geleden',
+ weekAgo_other: '{{count}} weken geleden',
+ yesterday: 'Gisteren',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Acties voor {{title}}',
+ createDeck: 'Kaartenset maken',
+ createNote: 'Notitie maken',
+ deleteDeck: 'Kaartenset verwijderen',
+ editDeck: 'Kaartenset bewerken',
+ newNote: 'Nieuwe notitie',
+ openDeck: 'Kaartenset {{title}} openen',
+ saveDeck: 'Kan kaartenset niet opslaan',
+ studyNow: 'Nu studeren',
+ },
+ descriptions: {
+ emptyDeck: 'Voeg een notitie toe zodat deze kaartenset materiaal heeft om te herhalen.',
+ editorDefault: 'Gerichte studiekaartenset.',
+ editorVisual: 'Kies een omslagicoon voor deze kaartenset.',
+ notesSearchPlaceholder: 'Notities zoeken…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Dit verplaatst "{{title}}" naar de Prullenbak. Je kunt het later herstellen.',
+ deleteDeckFallbackDescription: 'Dit verplaatst deze kaartenset naar de Prullenbak. Je kunt hem later herstellen.',
+ deleteDeckFallbackTitle: 'Kaartenset verwijderen?',
+ deleteDeckTitle: '"{{title}}" verwijderen?',
+ deleteNoteDescription: 'Dit verplaatst "{{title}}" naar de Prullenbak. Je kunt hem later herstellen.',
+ deleteNoteFallbackTitle: 'Notitie verwijderen?',
+ deleteNoteTitle: '"{{title}}" verwijderen?',
+ },
+ empty: {
+ noMatchingNotes: 'Geen overeenkomende notities',
+ noMatchingNotesDescription: 'Geen notities gevonden voor "{{query}}".',
+ thisDeckIsEmpty: 'Deze kaartenset is leeg',
+ },
+ errors: {
+ couldNotCreateDeck: 'Kan kaartenset niet maken',
+ couldNotDeleteDeck: 'Kan kaartenset niet verwijderen',
+ couldNotDeleteNote: 'Kan notitie niet verwijderen',
+ couldNotLoadFolderPath: 'Kan mappad niet laden',
+ couldNotSaveDeck: 'Kan kaartenset niet opslaan',
+ deckCouldNotLoad: 'Kaartenset kon niet worden geladen',
+ notesCouldNotLoad: 'Notities konden niet worden geladen',
+ notesMayBeOutOfDate: 'Notities zijn mogelijk verouderd',
+ },
+ fields: {
+ descriptionLabel: 'Beschrijving van kaartenset',
+ descriptionPlaceholder: 'Wat helpt deze kaartenset je te herhalen?',
+ namePlaceholder: 'Naam van kaartenset',
+ untitledDeck: 'Naamloze kaartenset',
+ untitledDeckLower: 'naamloze kaartenset',
+ },
+ labels: {
+ createDeckTitle: 'Kaartenset maken',
+ deck: 'Kaartenset',
+ deckNotesSearch: 'Notities in kaartenset zoeken',
+ deckOverview: 'Overzicht van kaartenset',
+ decks: 'Kaartensets',
+ due: 'Te doen',
+ dueToday: 'Vandaag te doen',
+ loadingDeck: 'Kaartenset laden',
+ mastery: 'Beheersing',
+ notes: 'Notities',
+ },
+ sort: {
+ ariaLabel: 'Kaartensets sorteren',
+ dueToday: 'Vandaag te doen',
+ title: 'Titel',
+ updated: 'Bijgewerkt',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'De gegevens zijn gewijzigd. Vernieuw en probeer opnieuw.',
+ forbidden: 'Je hebt geen toestemming om dit te doen.',
+ notFound: 'We konden dit item niet vinden.',
+ offline: 'Kan de service niet bereiken.',
+ timeout: 'Dit duurt te lang. Probeer opnieuw.',
+ unauthorized: 'Log in om door te gaan.',
+ unavailable: 'De service is tijdelijk niet beschikbaar.',
+ },
+ fallback: {
+ unexpected: 'Onverwachte fout',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Map maken',
+ deleteFolder: 'Map verwijderen',
+ editFolder: 'Map bewerken',
+ },
+ descriptions: {
+ editorDefault: 'Map voor verwante kaartensets.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Dit verplaatst "{{name}}" naar de Prullenbak. Je kunt hem later herstellen.',
+ deleteFolderFallbackDescription: 'Dit verplaatst deze map naar de Prullenbak. Je kunt hem later herstellen.',
+ deleteFolderFallbackTitle: 'Map verwijderen?',
+ deleteFolderTitle: '"{{name}}" verwijderen?',
+ },
+ empty: {
+ noMatchesInFolder: 'Geen resultaten in deze map',
+ noMatchesInFolderDescription: 'Geen mappen, kaartensets of notities gevonden voor "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Kan map niet maken',
+ couldNotDeleteFolder: 'Kan map niet verwijderen',
+ couldNotLoadFolderPath: 'Kan mappad niet laden',
+ couldNotSaveFolder: 'Kan map niet opslaan',
+ folderCouldNotLoad: 'Map kon niet worden geladen',
+ },
+ fields: {
+ descriptionLabel: 'Mapbeschrijving',
+ descriptionPlaceholder: 'Wat hoort in deze map?',
+ namePlaceholder: 'Mapnaam',
+ untitledFolder: 'Naamloze map',
+ },
+ labels: {
+ createFolderTitle: 'Map maken',
+ folder: 'Map',
+ folders: 'Mappen',
+ loadingFolder: 'Map laden',
+ name: 'Naam',
+ updated: 'Bijgewerkt',
+ },
+ sort: {
+ ariaLabel: 'Mappen sorteren',
+ name: 'Naam',
+ updated: 'Bijgewerkt',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Als lokale en gesynchroniseerde gegevens verschillen, verschijnt het item hier.',
+ heading: 'Synchronisatiestatus',
+ title: 'Conflicten',
+ noConflicts: 'Geen conflicten gevonden',
+ },
+ labels: {
+ menu: 'Menu',
+ },
+ sections: {
+ settings: {
+ description: 'Personaliseer je omgeving en voorkeuren',
+ title: 'Instellingen',
+ },
+ trash: {
+ description: 'Herstel of verwijder verwijderde items definitief',
+ title: 'Prullenbak',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Editor sluiten',
+ openActions: 'Acties openen',
+ openWorkspaces: 'Werkruimten openen',
+ },
+ items: {
+ home: 'Home',
+ menu: 'Menu',
+ primary: 'Primair',
+ settings: 'Instellingen',
+ spaces: 'Ruimten',
+ trash: 'Prullenbak',
+ workspaces: 'Werkruimten',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Cloze toevoegen',
+ deleteNote: 'Notitie verwijderen',
+ editNote: 'Notitie bewerken',
+ hideDerivedCardsNote: 'Notitie over afgeleide kaarten verbergen',
+ openNote: '{{title}} openen',
+ saveNote: 'Notitie opslaan',
+ showDerivedCardsNote: 'Notitie over afgeleide kaarten tonen',
+ },
+ descriptions: {
+ clozeFormat: 'Elk verborgen deel wordt een herhaalkaart wanneer je opslaat.',
+ clozeFormatPrefix: 'Zet verborgen tekst tussen',
+ derivedCardsHelper: 'Notities zijn de bron van waarheid voor afgeleide kaarten.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Dit verplaatst "{{title}}" naar de Prullenbak. Je kunt hem later herstellen.',
+ deleteNoteFallbackDescription: 'Dit verplaatst deze notitie naar de Prullenbak. Je kunt hem later herstellen.',
+ deleteNoteFallbackTitle: 'Notitie verwijderen?',
+ deleteNoteTitle: '"{{title}}" verwijderen?',
+ },
+ errors: {
+ couldNotCreateNote: 'Kan notitie niet maken',
+ couldNotDeleteNote: 'Kan notitie niet verwijderen',
+ couldNotSaveNote: 'Kan notitie niet opslaan',
+ noteCouldNotLoad: 'Notitie kon niet worden geladen',
+ },
+ fields: {
+ back: 'Achterkant',
+ backPlaceholder: 'Voer achterkant in',
+ bodyPlaceholder: 'Schrijf de notitietekst met cloze-verwijderingen…',
+ front: 'Voorkant',
+ frontPlaceholder: 'Voer voorkant in',
+ noteBody: 'Notitietekst',
+ title: 'Titel',
+ titlePlaceholder: 'Voeg een notitietitel toe',
+ untitledCloze: 'Naamloze cloze',
+ untitledNote: 'Naamloze notitie',
+ },
+ labels: {
+ backUppercase: 'ACHTERKANT',
+ basic: 'Basis',
+ basicLower: 'basis',
+ basicUppercase: 'BASIS',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Cloze-indeling',
+ clozeUppercase: 'CLOZE',
+ deck: 'Kaartenset',
+ derivedCards: 'AFGELEIDE KAARTEN',
+ due: 'Te doen',
+ frontUppercase: 'VOORKANT',
+ inProgress: 'Bezig',
+ inProgressUppercase: 'BEZIG',
+ loadingNote: 'Notitie laden',
+ loadingNoteEditor: 'Notitie-editor laden',
+ markdownFormatting: 'Markdown-opmaak',
+ mastered: 'Beheerst',
+ masteredUppercase: 'BEHEERST',
+ newNote: 'Nieuwe notitie',
+ noteBody: 'NOTITIETEKST',
+ noteContent: 'Notitie-inhoud',
+ noteDetails: 'Notitiedetails',
+ noteMetadata: 'Notitiemetadata',
+ noteType: 'Notitietype',
+ notes: 'Notities',
+ reviewed: 'Herhaald',
+ studyProgress: 'Studievoortgang',
+ studyProgressUppercase: 'STUDIEVOORTGANG',
+ titleUppercase: 'TITEL',
+ updated: 'Bijgewerkt',
+ },
+ sort: {
+ ariaLabel: 'Notities sorteren',
+ title: 'Titel',
+ updated: 'Bijgewerkt',
+ },
+ toolbar: {
+ bold: 'Vet',
+ italic: 'Cursief',
+ link: 'Link',
+ list: 'Lijst',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Opnieuw',
+ backToDeck: 'Terug naar kaartenset',
+ continueReview: 'Doorgaan met herhalen',
+ easy: 'Makkelijk',
+ good: 'Goed',
+ hard: 'Moeilijk',
+ newNote: 'Nieuwe notitie',
+ showAnswer: 'Antwoord tonen',
+ },
+ errors: {
+ couldNotGradeCard: 'Kan kaart niet beoordelen',
+ reviewCouldNotLoad: 'Herhaling kon niet worden geladen',
+ reviewCouldNotStart: 'Herhaling kon niet worden gestart',
+ summaryCouldNotLoad: 'Herhalingsoverzicht kon niet worden geladen',
+ summaryNotAvailable: 'Herhalingsoverzicht is niet beschikbaar',
+ summaryNotComplete: 'Deze herhaling is nog niet voltooid.',
+ },
+ labels: {
+ cardsReviewed: 'Kaarten herhaald',
+ deck: 'Kaartenset',
+ duration: 'Duur',
+ loadingReview: 'Herhaling laden',
+ loadingSummary: 'Overzicht laden',
+ progress: 'Herhalingsvoortgang',
+ review: 'Herhaling',
+ reviewComplete: 'Herhaling voltooid',
+ reviewed_one: '{{count}} herhaald',
+ reviewed_other: '{{count}} herhaald',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} u {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'Je voortgang is opgeslagen in deze kaartenset.',
+ },
+ unavailable: {
+ description: 'Voeg een notitie toe zodat deze kaartenset in de herhaalwachtrij kan komen.',
+ title: 'Geen kaarten om te herhalen',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Zoekopdracht wissen',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Geen resultaten in deze werkruimte',
+ noMatchesInWorkspaceDescription: 'Geen mappen, kaartensets of notities gevonden voor "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Zoekopdracht kon niet worden voltooid',
+ },
+ labels: {
+ results: 'Zoekresultaten',
+ resultsFor: 'Resultaten voor "{{query}}"',
+ searchingContent: 'Inhoud zoeken',
+ },
+ resultGroups: {
+ deck: 'Kaartensets',
+ folder: 'Mappen',
+ note: 'Notities',
+ },
+ resultKinds: {
+ deck: 'kaartenset',
+ folder: 'map',
+ note: 'notitie',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Alle instellingen resetten',
+ resetSettings: 'Instellingen resetten',
+ resetToDefaults: 'Standaardwaarden herstellen',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Plak geldige JSON met 21 numerieke waarden.',
+ fsrsErrorInvalidParams_one: 'Voer een JSON-array in met precies {{count}} eindig getal.',
+ fsrsErrorInvalidParams_other: 'Voer een JSON-array in met precies {{count}} eindige getallen.',
+ fsrsHelper: 'Dit is een expertinstelling. Waarden moeten in volgorde blijven.',
+ fsrsJsonLabel: 'JSON voor FSRS-parameters',
+ fsrsTitle: 'FSRS-parameters bewerken',
+ fsrsDescription: 'Plak een JSON-array met 21 getallen om de scheduler-gewichten te overschrijven.',
+ resetDescription: 'Dit herstelt tijdzone, studielimieten en FSRS-instellingen.',
+ resetDescriptionWithLanguage: 'Dit herstelt taal, tijdzone, studielimieten en FSRS-instellingen.',
+ resetTitle: 'Alle instellingen resetten?',
+ timezoneDescription: 'Zoek naar een stad of tijdzone-id.',
+ timezoneSearchLabel: 'Tijdzones zoeken',
+ timezoneSearchPlaceholder: 'Tijdzones zoeken…',
+ timezoneTitle: 'Tijdzone kiezen',
+ },
+ errors: {
+ couldNotResetSettings: 'Kan instellingen niet resetten',
+ couldNotSaveSettings: 'Kan instellingen niet opslaan',
+ settingsCouldNotLoad: 'Instellingen konden niet worden geladen',
+ settingsUnavailable: 'Instellingen zijn niet beschikbaar.',
+ },
+ labels: {
+ appearance: 'Weergave',
+ automatic: 'Automatisch',
+ fsrsParameters: 'FSRS-parameters',
+ general: 'Algemeen',
+ language: 'Taal',
+ loadingSettings: 'Instellingen laden',
+ masteryHorizon: 'Beheersingshorizon',
+ newCardOrder: 'Volgorde nieuwe kaarten',
+ newCardsPerDay: 'Nieuwe kaarten per dag',
+ reviewCardsPerDay: 'Herhaalkaarten per dag',
+ savingSettings: 'Instellingen opslaan',
+ schedule: 'Planning',
+ searchNoTimezones: 'Geen overeenkomende tijdzones.',
+ settings: 'Instellingen',
+ settingsReset: 'Instellingen gereset',
+ study: 'Studie',
+ targetRecallProbability: 'Doelherinneringskans',
+ theme: 'Thema',
+ timezone: 'Tijdzone',
+ },
+ options: {
+ languageEnUs: 'Engels (VS)',
+ newCardsAfterReviews: 'Na herhalingen',
+ newCardsBeforeReviews: 'Voor herhalingen',
+ newCardsMixed: 'Gemengd',
+ themeDark: 'Donker',
+ themeLight: 'Licht',
+ themeSystem: 'Systeem',
+ timezoneSystem: 'Systeemtijdzone gebruiken',
+ },
+ rows: {
+ fsrsDescription: 'Gewichten van expertmodel',
+ languageDescription: 'Interfacetaal',
+ masteryHorizonDescription: 'Aantal dagen dat een kaart op of boven de doelkans oproepbaar moet blijven om als beheerst te tellen',
+ newCardOrderDescription: 'Volgorde van nieuwe kaarten ten opzichte van herhalingen',
+ newCardsPerDayDescription: 'Maximumaantal nieuwe kaarten per dag',
+ reviewCardsPerDayDescription: 'Maximumaantal herhaalkaarten per dag',
+ targetRecallProbabilityDescription: 'Minimale kans op herinnering bij de volgende geplande herhaling',
+ timezoneDescription: 'Gebruik automatische tijdzone of kies een stad.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Definitief verwijderen',
+ empty: 'Leegmaken',
+ emptyTrash: 'Prullenbak legen',
+ restore: 'Herstellen',
+ restoringItem: '{{title}} herstellen',
+ },
+ dialogs: {
+ deleteItemDescription: 'Dit verwijdert "{{title}}" definitief. Dit kan niet ongedaan worden gemaakt.',
+ deleteItemFallbackDescription: 'Dit verwijdert dit item definitief. Dit kan niet ongedaan worden gemaakt.',
+ deleteItemFallbackTitle: 'Item verwijderen?',
+ deleteItemTitle: '"{{title}}" verwijderen?',
+ emptyTrashDescription: 'Dit verwijdert alles in de Prullenbak definitief. Dit kan niet ongedaan worden gemaakt.',
+ emptyTrashTitle: 'Prullenbak legen?',
+ },
+ empty: {
+ description: 'Items die je verwijdert verschijnen hier voordat ze definitief worden verwijderd.',
+ title: 'Prullenbak is leeg',
+ },
+ errors: {
+ couldNotDeleteItem: 'Kan item niet verwijderen',
+ couldNotEmptyTrash: 'Kan Prullenbak niet legen',
+ couldNotRestoreItem: 'Kan item niet herstellen',
+ trashCouldNotLoad: 'Prullenbak kon niet worden geladen',
+ trashMayBeOutOfDate: 'Prullenbak is mogelijk verouderd',
+ },
+ labels: {
+ deletedAge: 'Verwijderd {{value}}',
+ itemCount_one: '{{count}} item',
+ itemCount_other: '{{count}} items',
+ lastEmptied: 'Laatst geleegd {{value}}',
+ loadingTrash: 'Prullenbak laden',
+ originalLocation: 'Oorspronkelijke locatie: {{location}}',
+ title: 'Prullenbak',
+ trashActions: 'Prullenbakacties voor {{title}}',
+ },
+ kinds: {
+ deck: 'Kaartenset',
+ folder: 'Map',
+ note: 'Notitie',
+ workspace: 'Werkruimte',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Werkruimte maken',
+ deleteWorkspace: 'Werkruimte verwijderen',
+ editWorkspace: 'Werkruimte bewerken',
+ newWorkspace: 'Nieuwe werkruimte',
+ openWorkspace: '{{title}} openen',
+ openingWorkspace: '{{title}} openen',
+ },
+ descriptions: {
+ editorDefault: 'Studiecontext.',
+ editorVisual: 'Kies een visueel anker voor deze werkruimte.',
+ emptyList: 'Scheid kaartensets, notities en herhaalwachtrijen per studiecontext.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Dit verplaatst "{{title}}" naar de Prullenbak. Je kunt hem later herstellen.',
+ deleteWorkspaceFallbackDescription: 'Dit verplaatst deze werkruimte naar de Prullenbak. Je kunt hem later herstellen.',
+ deleteWorkspaceFallbackTitle: 'Werkruimte verwijderen?',
+ deleteWorkspaceTitle: '"{{title}}" verwijderen?',
+ },
+ empty: {
+ startWithWorkspace: 'Begin met een werkruimte',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Kan werkruimte niet maken',
+ couldNotDeleteWorkspace: 'Kan werkruimte niet verwijderen',
+ couldNotOpenWorkspace: 'Kan werkruimte niet openen',
+ couldNotSaveWorkspace: 'Kan werkruimte niet opslaan',
+ workspaceCouldNotLoad: 'Werkruimte kon niet worden geladen',
+ workspacesCouldNotLoad: 'Werkruimten konden niet worden geladen',
+ },
+ fields: {
+ descriptionLabel: 'Beschrijving van werkruimte',
+ descriptionPlaceholder: 'Wat hoort in deze werkruimte?',
+ namePlaceholder: 'Naam van werkruimte',
+ untitledWorkspace: 'Naamloze werkruimte',
+ },
+ labels: {
+ createWorkspaceTitle: 'Werkruimte maken',
+ loadingWorkspaces: 'Werkruimten laden',
+ workspace: 'Werkruimte',
+ workspaces: 'Werkruimten',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/pl.ts b/ui/src/core/i18n/resources/pl.ts
new file mode 100644
index 0000000..161052d
--- /dev/null
+++ b/ui/src/core/i18n/resources/pl.ts
@@ -0,0 +1,649 @@
+export const pl = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Spróbuj ponownie. Jeśli problem będzie się powtarzał, otwórz Clear jeszcze raz.',
+ title: 'Nie udało się uruchomić',
+ },
+ loadingTitle: 'Przygotowywanie przestrzeni do nauki',
+ },
+ common: {
+ actions: {
+ back: 'Wstecz',
+ cancel: 'Anuluj',
+ checkAgain: 'Sprawdź ponownie',
+ close: 'Zamknij',
+ create: 'Utwórz',
+ delete: 'Usuń',
+ dismissError: 'Zamknij błąd',
+ dismissStatus: 'Zamknij status',
+ edit: 'Edytuj',
+ itemActions: 'Działania dla {{title}}',
+ reset: 'Resetuj',
+ review: 'Powtarzaj',
+ save: 'Zapisz',
+ saveChanges: 'Zapisz zmiany',
+ tryAgain: 'Spróbuj ponownie',
+ },
+ labels: {
+ active: 'Aktywne',
+ clear: 'Clear',
+ custom: 'Niestandardowe',
+ default: 'Domyślne',
+ loadingEditor: 'Ładowanie edytora',
+ name: 'Nazwa',
+ completedTask: 'Zadanie ukończone',
+ description: 'Opis',
+ incompleteTask: 'Zadanie nieukończone',
+ percentageInput: 'Procent dla {{label}}',
+ visual: 'Wizualizacja',
+ },
+ status: {
+ actionFailed: 'Działanie nie powiodło się',
+ actionInProgress: 'Działanie w toku',
+ },
+ sort: {
+ ascending: 'Rosn.',
+ column: 'Kolumna',
+ descending: 'Mal.',
+ direction: 'Kierunek',
+ sort: 'Sortuj',
+ },
+ search: {
+ label: 'Szukaj',
+ },
+ visualPicker: {
+ allLucideIcons: 'Wszystkie ikony Lucide',
+ browseIconsFor: 'Przeglądaj lub wyszukuj ikony dla {{label}}.',
+ chooseIcon: 'Wybierz ikonę',
+ iconPicker: 'Wybór ikony dla {{label}}',
+ iconSearch: 'Wyszukiwanie ikon dla {{label}}',
+ iconsCouldNotLoad: 'Nie udało się załadować ikon.',
+ loadingIcons: 'Ładowanie ikon',
+ loadingMoreIcons: 'Ładowanie kolejnych ikon',
+ moreIcons: 'Więcej ikon',
+ noIconsMatch: 'Brak ikon pasujących do "{{query}}".',
+ searchIconsPlaceholder: 'Szukaj ikon…',
+ selectedIcon: 'Wybrano {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Utwórz',
+ newDeck: 'Nowy zestaw',
+ newFolder: 'Nowy folder',
+ },
+ descriptions: {
+ defaultWorkspace: 'Trzymaj zestawy, foldery i notatki razem.',
+ emptyWorkspace: 'Utwórz zestaw, a potem dodaj notatki, aby zbudować kolejkę powtórek.',
+ emptyFolder: 'Utwórz zestaw, a potem dodaj notatki, aby zbudować kolejkę powtórek.',
+ searchPlaceholder: 'Szukaj folderów, zestawów i notatek…',
+ },
+ empty: {
+ createFirstDeck: 'Utwórz pierwszy zestaw',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Nie udało się usunąć zestawu',
+ couldNotDeleteFolder: 'Nie udało się usunąć folderu',
+ couldNotDeleteWorkspace: 'Nie udało się usunąć obszaru roboczego',
+ dashboardCouldNotOpen: 'Nie udało się otworzyć pulpitu',
+ decksCouldNotLoad: 'Nie udało się załadować zestawów',
+ decksMayBeOutOfDate: 'Zestawy mogą być nieaktualne',
+ foldersCouldNotLoad: 'Nie udało się załadować folderów',
+ foldersMayBeOutOfDate: 'Foldery mogą być nieaktualne',
+ workspaceCouldNotLoad: 'Nie udało się załadować obszaru roboczego',
+ },
+ labels: {
+ dashboard: 'Pulpit',
+ loadingDashboard: 'Ładowanie pulpitu',
+ newItem: 'Nowy element',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Data niedostępna',
+ },
+ age: {
+ dayAgo_one: '{{count}} dzień temu',
+ dayAgo_few: '{{count}} dni temu',
+ dayAgo_many: '{{count}} dni temu',
+ dayAgo_other: '{{count}} dnia temu',
+ hourAgo_one: '{{count}} godzinę temu',
+ hourAgo_few: '{{count}} godziny temu',
+ hourAgo_many: '{{count}} godzin temu',
+ hourAgo_other: '{{count}} godziny temu',
+ justNow: 'przed chwilą',
+ minuteAgo_one: '{{count}} minutę temu',
+ minuteAgo_few: '{{count}} minuty temu',
+ minuteAgo_many: '{{count}} minut temu',
+ minuteAgo_other: '{{count}} minuty temu',
+ unavailable: 'data niedostępna',
+ weekAgo_one: '{{count}} tydzień temu',
+ weekAgo_few: '{{count}} tygodnie temu',
+ weekAgo_many: '{{count}} tygodni temu',
+ weekAgo_other: '{{count}} tygodnia temu',
+ },
+ labels: {
+ deleted: 'Usunięto {{value}}',
+ due: 'Do powtórki: {{value}}',
+ reviewed: 'Powtórzono: {{value}}',
+ updated: 'Zaktualizowano {{value}}',
+ updatedUppercase: 'ZAKTUALIZOWANO {{value}}',
+ },
+ relative: {
+ dayAgo_one: '{{count}} dzień temu',
+ dayAgo_few: '{{count}} dni temu',
+ dayAgo_many: '{{count}} dni temu',
+ dayAgo_other: '{{count}} dnia temu',
+ inAMoment: 'Za chwilę',
+ inDay_one: 'Za {{count}} dzień',
+ inDay_few: 'Za {{count}} dni',
+ inDay_many: 'Za {{count}} dni',
+ inDay_other: 'Za {{count}} dnia',
+ inMonth_one: 'Za {{count}} miesiąc',
+ inMonth_few: 'Za {{count}} miesiące',
+ inMonth_many: 'Za {{count}} miesięcy',
+ inMonth_other: 'Za {{count}} miesiąca',
+ inWeek_one: 'Za {{count}} tydzień',
+ inWeek_few: 'Za {{count}} tygodnie',
+ inWeek_many: 'Za {{count}} tygodni',
+ inWeek_other: 'Za {{count}} tygodnia',
+ justNow: 'Przed chwilą',
+ monthAgo_one: '{{count}} miesiąc temu',
+ monthAgo_few: '{{count}} miesiące temu',
+ monthAgo_many: '{{count}} miesięcy temu',
+ monthAgo_other: '{{count}} miesiąca temu',
+ secondsAgoShort: '{{count}} s temu',
+ minutesAgoShort: '{{count}} min temu',
+ hoursAgoShort: '{{count}} godz. temu',
+ today: 'Dzisiaj',
+ tomorrow: 'Jutro',
+ weekAgo_one: '{{count}} tydzień temu',
+ weekAgo_few: '{{count}} tygodnie temu',
+ weekAgo_many: '{{count}} tygodni temu',
+ weekAgo_other: '{{count}} tygodnia temu',
+ yesterday: 'Wczoraj',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Działania dla {{title}}',
+ createDeck: 'Utwórz zestaw',
+ createNote: 'Utwórz notatkę',
+ deleteDeck: 'Usuń zestaw',
+ editDeck: 'Edytuj zestaw',
+ newNote: 'Nowa notatka',
+ openDeck: 'Otwórz zestaw {{title}}',
+ saveDeck: 'Nie udało się zapisać zestawu',
+ studyNow: 'Ucz się teraz',
+ },
+ descriptions: {
+ emptyDeck: 'Dodaj notatkę, aby ten zestaw miał materiał do powtórek.',
+ editorDefault: 'Skupiony zestaw do nauki.',
+ editorVisual: 'Wybierz glif okładki dla tego zestawu.',
+ notesSearchPlaceholder: 'Szukaj notatek…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'To przeniesie "{{title}}" do Kosza. Możesz przywrócić go później.',
+ deleteDeckFallbackDescription: 'To przeniesie ten zestaw do Kosza. Możesz przywrócić go później.',
+ deleteDeckFallbackTitle: 'Usunąć zestaw?',
+ deleteDeckTitle: 'Usunąć "{{title}}"?',
+ deleteNoteDescription: 'To przeniesie "{{title}}" do Kosza. Możesz przywrócić ją później.',
+ deleteNoteFallbackTitle: 'Usunąć notatkę?',
+ deleteNoteTitle: 'Usunąć "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Brak pasujących notatek',
+ noMatchingNotesDescription: 'Żadna notatka nie pasuje do "{{query}}".',
+ thisDeckIsEmpty: 'Ten zestaw jest pusty',
+ },
+ errors: {
+ couldNotCreateDeck: 'Nie udało się utworzyć zestawu',
+ couldNotDeleteDeck: 'Nie udało się usunąć zestawu',
+ couldNotDeleteNote: 'Nie udało się usunąć notatki',
+ couldNotLoadFolderPath: 'Nie udało się załadować ścieżki folderu',
+ couldNotSaveDeck: 'Nie udało się zapisać zestawu',
+ deckCouldNotLoad: 'Nie udało się załadować zestawu',
+ notesCouldNotLoad: 'Nie udało się załadować notatek',
+ notesMayBeOutOfDate: 'Notatki mogą być nieaktualne',
+ },
+ fields: {
+ descriptionLabel: 'Opis zestawu',
+ descriptionPlaceholder: 'Co ten zestaw pomoże Ci powtórzyć?',
+ namePlaceholder: 'Nazwa zestawu',
+ untitledDeck: 'Zestaw bez tytułu',
+ untitledDeckLower: 'zestaw bez tytułu',
+ },
+ labels: {
+ createDeckTitle: 'Utwórz zestaw',
+ deck: 'Zestaw',
+ deckNotesSearch: 'Wyszukiwanie notatek w zestawie',
+ deckOverview: 'Przegląd zestawu',
+ decks: 'Zestawy',
+ due: 'Do powtórki',
+ dueToday: 'Do powtórki dziś',
+ loadingDeck: 'Ładowanie zestawu',
+ mastery: 'Opanowanie',
+ notes: 'Notatki',
+ },
+ sort: {
+ ariaLabel: 'Sortuj zestawy',
+ dueToday: 'Do powtórki dziś',
+ title: 'Tytuł',
+ updated: 'Zaktualizowano',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Dane uległy zmianie. Odśwież i spróbuj ponownie.',
+ forbidden: 'Nie masz uprawnień, aby to zrobić.',
+ notFound: 'Nie udało się znaleźć tego elementu.',
+ offline: 'Nie można połączyć się z usługą.',
+ timeout: 'To trwa zbyt długo. Spróbuj ponownie.',
+ unauthorized: 'Zaloguj się, aby kontynuować.',
+ unavailable: 'Usługa jest tymczasowo niedostępna.',
+ },
+ fallback: {
+ unexpected: 'Nieoczekiwany błąd',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Utwórz folder',
+ deleteFolder: 'Usuń folder',
+ editFolder: 'Edytuj folder',
+ },
+ descriptions: {
+ editorDefault: 'Folder na powiązane zestawy.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'To przeniesie "{{name}}" do Kosza. Możesz przywrócić go później.',
+ deleteFolderFallbackDescription: 'To przeniesie ten folder do Kosza. Możesz przywrócić go później.',
+ deleteFolderFallbackTitle: 'Usunąć folder?',
+ deleteFolderTitle: 'Usunąć "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'Brak wyników w tym folderze',
+ noMatchesInFolderDescription: 'Żaden folder, zestaw ani notatka nie pasuje do "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Nie udało się utworzyć folderu',
+ couldNotDeleteFolder: 'Nie udało się usunąć folderu',
+ couldNotLoadFolderPath: 'Nie udało się załadować ścieżki folderu',
+ couldNotSaveFolder: 'Nie udało się zapisać folderu',
+ folderCouldNotLoad: 'Nie udało się załadować folderu',
+ },
+ fields: {
+ descriptionLabel: 'Opis folderu',
+ descriptionPlaceholder: 'Co należy do tego folderu?',
+ namePlaceholder: 'Nazwa folderu',
+ untitledFolder: 'Folder bez tytułu',
+ },
+ labels: {
+ createFolderTitle: 'Utwórz folder',
+ folder: 'Folder',
+ folders: 'Foldery',
+ loadingFolder: 'Ładowanie folderu',
+ name: 'Nazwa',
+ updated: 'Zaktualizowano',
+ },
+ sort: {
+ ariaLabel: 'Sortuj foldery',
+ name: 'Nazwa',
+ updated: 'Zaktualizowano',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Jeśli dane lokalne i zsynchronizowane będą się różnić, element pojawi się tutaj.',
+ heading: 'Status synchronizacji',
+ title: 'Konflikty',
+ noConflicts: 'Nie znaleziono konfliktów',
+ },
+ labels: {
+ menu: 'Menu',
+ },
+ sections: {
+ settings: {
+ description: 'Dostosuj środowisko i preferencje',
+ title: 'Ustawienia',
+ },
+ trash: {
+ description: 'Przywróć lub trwale usuń usunięte elementy',
+ title: 'Kosz',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Zamknij edytor',
+ openActions: 'Otwórz działania',
+ openWorkspaces: 'Otwórz obszary robocze',
+ },
+ items: {
+ home: 'Start',
+ menu: 'Menu',
+ primary: 'Główne',
+ settings: 'Ustawienia',
+ spaces: 'Obszary',
+ trash: 'Kosz',
+ workspaces: 'Obszary robocze',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Dodaj cloze',
+ deleteNote: 'Usuń notatkę',
+ editNote: 'Edytuj notatkę',
+ hideDerivedCardsNote: 'Ukryj notatkę o kartach pochodnych',
+ openNote: 'Otwórz {{title}}',
+ saveNote: 'Zapisz notatkę',
+ showDerivedCardsNote: 'Pokaż notatkę o kartach pochodnych',
+ },
+ descriptions: {
+ clozeFormat: 'Każdy ukryty fragment stanie się kartą do powtórki po zapisaniu.',
+ clozeFormatPrefix: 'Otocz ukryty tekst za pomocą',
+ derivedCardsHelper: 'Notatki są źródłem prawdy dla kart pochodnych.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'To przeniesie "{{title}}" do Kosza. Możesz przywrócić ją później.',
+ deleteNoteFallbackDescription: 'To przeniesie tę notatkę do Kosza. Możesz przywrócić ją później.',
+ deleteNoteFallbackTitle: 'Usunąć notatkę?',
+ deleteNoteTitle: 'Usunąć "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Nie udało się utworzyć notatki',
+ couldNotDeleteNote: 'Nie udało się usunąć notatki',
+ couldNotSaveNote: 'Nie udało się zapisać notatki',
+ noteCouldNotLoad: 'Nie udało się załadować notatki',
+ },
+ fields: {
+ back: 'Tył',
+ backPlaceholder: 'Wpisz tylną stronę',
+ bodyPlaceholder: 'Napisz treść notatki z lukami cloze…',
+ front: 'Przód',
+ frontPlaceholder: 'Wpisz przednią stronę',
+ noteBody: 'Treść notatki',
+ title: 'Tytuł',
+ titlePlaceholder: 'Dodaj tytuł notatki',
+ untitledCloze: 'Cloze bez tytułu',
+ untitledNote: 'Notatka bez tytułu',
+ },
+ labels: {
+ backUppercase: 'TYŁ',
+ basic: 'Podstawowa',
+ basicLower: 'podstawowa',
+ basicUppercase: 'PODSTAWOWA',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Format cloze',
+ clozeUppercase: 'CLOZE',
+ deck: 'Zestaw',
+ derivedCards: 'KARTY POCHODNE',
+ due: 'Do powtórki',
+ frontUppercase: 'PRZÓD',
+ inProgress: 'W toku',
+ inProgressUppercase: 'W TOKU',
+ loadingNote: 'Ładowanie notatki',
+ loadingNoteEditor: 'Ładowanie edytora notatek',
+ markdownFormatting: 'Formatowanie Markdown',
+ mastered: 'Opanowane',
+ masteredUppercase: 'OPANOWANE',
+ newNote: 'Nowa notatka',
+ noteBody: 'TREŚĆ NOTATKI',
+ noteContent: 'Zawartość notatki',
+ noteDetails: 'Szczegóły notatki',
+ noteMetadata: 'Metadane notatki',
+ noteType: 'Typ notatki',
+ notes: 'Notatki',
+ reviewed: 'Powtórzono',
+ studyProgress: 'Postęp nauki',
+ studyProgressUppercase: 'POSTĘP NAUKI',
+ titleUppercase: 'TYTUŁ',
+ updated: 'Zaktualizowano',
+ },
+ sort: {
+ ariaLabel: 'Sortuj notatki',
+ title: 'Tytuł',
+ updated: 'Zaktualizowano',
+ },
+ toolbar: {
+ bold: 'Pogrubienie',
+ italic: 'Kursywa',
+ link: 'Link',
+ list: 'Lista',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Znowu',
+ backToDeck: 'Wróć do zestawu',
+ continueReview: 'Kontynuuj powtórkę',
+ easy: 'Łatwe',
+ good: 'Dobrze',
+ hard: 'Trudne',
+ newNote: 'Nowa notatka',
+ showAnswer: 'Pokaż odpowiedź',
+ },
+ errors: {
+ couldNotGradeCard: 'Nie udało się ocenić karty',
+ reviewCouldNotLoad: 'Nie udało się załadować powtórki',
+ reviewCouldNotStart: 'Nie udało się rozpocząć powtórki',
+ summaryCouldNotLoad: 'Nie udało się załadować podsumowania powtórki',
+ summaryNotAvailable: 'Podsumowanie powtórki jest niedostępne',
+ summaryNotComplete: 'Ta powtórka nie jest jeszcze ukończona.',
+ },
+ labels: {
+ cardsReviewed: 'Powtórzone karty',
+ deck: 'Zestaw',
+ duration: 'Czas trwania',
+ loadingReview: 'Ładowanie powtórki',
+ loadingSummary: 'Ładowanie podsumowania',
+ progress: 'Postęp powtórki',
+ review: 'Powtórka',
+ reviewComplete: 'Powtórka ukończona',
+ reviewed_one: 'Powtórzono {{count}}',
+ reviewed_few: 'Powtórzono {{count}}',
+ reviewed_many: 'Powtórzono {{count}}',
+ reviewed_other: 'Powtórzono {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} godz. {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'Twój postęp został zapisany w tym zestawie.',
+ },
+ unavailable: {
+ description: 'Dodaj notatkę, aby ten zestaw mógł trafić do kolejki powtórek.',
+ title: 'Brak kart do powtórki',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Wyczyść wyszukiwanie',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Brak wyników w tym obszarze roboczym',
+ noMatchesInWorkspaceDescription: 'Żaden folder, zestaw ani notatka nie pasuje do "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Nie udało się ukończyć wyszukiwania',
+ },
+ labels: {
+ results: 'Wyniki wyszukiwania',
+ resultsFor: 'Wyniki dla "{{query}}"',
+ searchingContent: 'Wyszukiwanie treści',
+ },
+ resultGroups: {
+ deck: 'Zestawy',
+ folder: 'Foldery',
+ note: 'Notatki',
+ },
+ resultKinds: {
+ deck: 'zestaw',
+ folder: 'folder',
+ note: 'notatka',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Resetuj wszystkie ustawienia',
+ resetSettings: 'Resetuj ustawienia',
+ resetToDefaults: 'Przywróć domyślne',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Wklej prawidłowy JSON z 21 wartościami liczbowymi.',
+ fsrsErrorInvalidParams_one: 'Wpisz tablicę JSON z dokładnie {{count}} skończoną liczbą.',
+ fsrsErrorInvalidParams_few: 'Wpisz tablicę JSON z dokładnie {{count}} skończonymi liczbami.',
+ fsrsErrorInvalidParams_many: 'Wpisz tablicę JSON z dokładnie {{count}} skończonymi liczbami.',
+ fsrsErrorInvalidParams_other: 'Wpisz tablicę JSON z dokładnie {{count}} skończonej liczby.',
+ fsrsHelper: 'To ustawienie eksperckie. Wartości muszą pozostać w kolejności.',
+ fsrsJsonLabel: 'JSON parametrów FSRS',
+ fsrsTitle: 'Edytuj parametry FSRS',
+ fsrsDescription: 'Wklej tablicę JSON z 21 liczbami, aby nadpisać wagi scheduler.',
+ resetDescription: 'To przywróci strefę czasową, limity nauki i ustawienia FSRS.',
+ resetDescriptionWithLanguage: 'To przywróci język, strefę czasową, limity nauki i ustawienia FSRS.',
+ resetTitle: 'Zresetować wszystkie ustawienia?',
+ timezoneDescription: 'Szukaj miasta lub identyfikatora strefy czasowej.',
+ timezoneSearchLabel: 'Szukaj stref czasowych',
+ timezoneSearchPlaceholder: 'Szukaj stref czasowych…',
+ timezoneTitle: 'Wybierz strefę czasową',
+ },
+ errors: {
+ couldNotResetSettings: 'Nie udało się zresetować ustawień',
+ couldNotSaveSettings: 'Nie udało się zapisać ustawień',
+ settingsCouldNotLoad: 'Nie udało się załadować ustawień',
+ settingsUnavailable: 'Ustawienia są niedostępne.',
+ },
+ labels: {
+ appearance: 'Wygląd',
+ automatic: 'Automatycznie',
+ fsrsParameters: 'Parametry FSRS',
+ general: 'Ogólne',
+ language: 'Język',
+ loadingSettings: 'Ładowanie ustawień',
+ masteryHorizon: 'Horyzont opanowania',
+ newCardOrder: 'Kolejność nowych kart',
+ newCardsPerDay: 'Nowe karty dziennie',
+ reviewCardsPerDay: 'Karty do powtórki dziennie',
+ savingSettings: 'Zapisywanie ustawień',
+ schedule: 'Harmonogram',
+ searchNoTimezones: 'Brak pasujących stref czasowych.',
+ settings: 'Ustawienia',
+ settingsReset: 'Ustawienia zresetowane',
+ study: 'Nauka',
+ targetRecallProbability: 'Docelowe prawdopodobieństwo przypomnienia',
+ theme: 'Motyw',
+ timezone: 'Strefa czasowa',
+ },
+ options: {
+ languageEnUs: 'Angielski (USA)',
+ newCardsAfterReviews: 'Po powtórkach',
+ newCardsBeforeReviews: 'Przed powtórkami',
+ newCardsMixed: 'Mieszane',
+ themeDark: 'Ciemny',
+ themeLight: 'Jasny',
+ themeSystem: 'Systemowy',
+ timezoneSystem: 'Użyj systemowej strefy czasowej',
+ },
+ rows: {
+ fsrsDescription: 'Wagi modelu eksperckiego',
+ languageDescription: 'Język interfejsu',
+ masteryHorizonDescription: 'Liczba dni, przez które karta musi pozostać możliwa do przypomnienia na poziomie docelowego prawdopodobieństwa lub wyżej, aby została uznana za opanowaną',
+ newCardOrderDescription: 'Kolejność nowych kart względem powtórek',
+ newCardsPerDayDescription: 'Maksymalna liczba nowych kart dziennie',
+ reviewCardsPerDayDescription: 'Maksymalna liczba kart do powtórki dziennie',
+ targetRecallProbabilityDescription: 'Minimalne prawdopodobieństwo przypomnienia przy następnej zaplanowanej powtórce',
+ timezoneDescription: 'Użyj automatycznej strefy czasowej lub wybierz miasto.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Usuń trwale',
+ empty: 'Opróżnij',
+ emptyTrash: 'Opróżnij kosz',
+ restore: 'Przywróć',
+ restoringItem: 'Przywracanie {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'To trwale usunie "{{title}}". Tej czynności nie można cofnąć.',
+ deleteItemFallbackDescription: 'To trwale usunie ten element. Tej czynności nie można cofnąć.',
+ deleteItemFallbackTitle: 'Usunąć element?',
+ deleteItemTitle: 'Usunąć "{{title}}"?',
+ emptyTrashDescription: 'To trwale usunie wszystko z Kosza. Tej czynności nie można cofnąć.',
+ emptyTrashTitle: 'Opróżnić kosz?',
+ },
+ empty: {
+ description: 'Usunięte elementy pojawią się tutaj przed trwałym usunięciem.',
+ title: 'Kosz jest pusty',
+ },
+ errors: {
+ couldNotDeleteItem: 'Nie udało się usunąć elementu',
+ couldNotEmptyTrash: 'Nie udało się opróżnić Kosza',
+ couldNotRestoreItem: 'Nie udało się przywrócić elementu',
+ trashCouldNotLoad: 'Nie udało się załadować Kosza',
+ trashMayBeOutOfDate: 'Kosz może być nieaktualny',
+ },
+ labels: {
+ deletedAge: 'Usunięto {{value}}',
+ itemCount_one: '{{count}} element',
+ itemCount_few: '{{count}} elementy',
+ itemCount_many: '{{count}} elementów',
+ itemCount_other: '{{count}} elementu',
+ lastEmptied: 'Ostatnio opróżniono {{value}}',
+ loadingTrash: 'Ładowanie Kosza',
+ originalLocation: 'Oryginalna lokalizacja: {{location}}',
+ title: 'Kosz',
+ trashActions: 'Działania kosza dla {{title}}',
+ },
+ kinds: {
+ deck: 'Zestaw',
+ folder: 'Folder',
+ note: 'Notatka',
+ workspace: 'Obszar roboczy',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Utwórz obszar roboczy',
+ deleteWorkspace: 'Usuń obszar roboczy',
+ editWorkspace: 'Edytuj obszar roboczy',
+ newWorkspace: 'Nowy obszar roboczy',
+ openWorkspace: 'Otwórz {{title}}',
+ openingWorkspace: 'Otwieranie {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Kontekst nauki.',
+ editorVisual: 'Wybierz wizualny punkt odniesienia dla tego obszaru roboczego.',
+ emptyList: 'Oddziel zestawy, notatki i kolejki powtórek według kontekstu nauki.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'To przeniesie "{{title}}" do Kosza. Możesz przywrócić go później.',
+ deleteWorkspaceFallbackDescription: 'To przeniesie ten obszar roboczy do Kosza. Możesz przywrócić go później.',
+ deleteWorkspaceFallbackTitle: 'Usunąć obszar roboczy?',
+ deleteWorkspaceTitle: 'Usunąć "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Zacznij od obszaru roboczego',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Nie udało się utworzyć obszaru roboczego',
+ couldNotDeleteWorkspace: 'Nie udało się usunąć obszaru roboczego',
+ couldNotOpenWorkspace: 'Nie udało się otworzyć obszaru roboczego',
+ couldNotSaveWorkspace: 'Nie udało się zapisać obszaru roboczego',
+ workspaceCouldNotLoad: 'Nie udało się załadować obszaru roboczego',
+ workspacesCouldNotLoad: 'Nie udało się załadować obszarów roboczych',
+ },
+ fields: {
+ descriptionLabel: 'Opis obszaru roboczego',
+ descriptionPlaceholder: 'Co należy do tego obszaru roboczego?',
+ namePlaceholder: 'Nazwa obszaru roboczego',
+ untitledWorkspace: 'Obszar roboczy bez tytułu',
+ },
+ labels: {
+ createWorkspaceTitle: 'Utwórz obszar roboczy',
+ loadingWorkspaces: 'Ładowanie obszarów roboczych',
+ workspace: 'Obszar roboczy',
+ workspaces: 'Obszary robocze',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/pt-BR.ts b/ui/src/core/i18n/resources/pt-BR.ts
new file mode 100644
index 0000000..6899753
--- /dev/null
+++ b/ui/src/core/i18n/resources/pt-BR.ts
@@ -0,0 +1,623 @@
+export const ptBR = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Tente novamente. Se isso continuar acontecendo, reabra o Clear.',
+ title: 'Não foi possível iniciar',
+ },
+ loadingTitle: 'Preparando seu espaço de estudo',
+ },
+ common: {
+ actions: {
+ back: 'Voltar',
+ cancel: 'Cancelar',
+ checkAgain: 'Verificar novamente',
+ close: 'Fechar',
+ create: 'Criar',
+ delete: 'Excluir',
+ dismissError: 'Dispensar erro',
+ dismissStatus: 'Dispensar status',
+ edit: 'Editar',
+ itemActions: 'Ações de {{title}}',
+ reset: 'Redefinir',
+ review: 'Revisar',
+ save: 'Salvar',
+ saveChanges: 'Salvar alterações',
+ tryAgain: 'Tentar novamente',
+ },
+ labels: {
+ active: 'Ativo',
+ clear: 'Clear',
+ custom: 'Personalizado',
+ default: 'Padrão',
+ loadingEditor: 'Carregando editor',
+ name: 'Nome',
+ completedTask: 'Tarefa concluída',
+ description: 'Descrição',
+ incompleteTask: 'Tarefa incompleta',
+ percentageInput: 'Percentual de {{label}}',
+ visual: 'Visual',
+ },
+ status: {
+ actionFailed: 'A ação falhou',
+ actionInProgress: 'Ação em andamento',
+ },
+ sort: {
+ ascending: 'Asc',
+ column: 'Coluna',
+ descending: 'Desc',
+ direction: 'Direção',
+ sort: 'Ordenar',
+ },
+ search: {
+ label: 'Pesquisar',
+ },
+ visualPicker: {
+ allLucideIcons: 'Todos os ícones do Lucide',
+ browseIconsFor: 'Explore ou pesquise ícones para {{label}}.',
+ chooseIcon: 'Escolher ícone',
+ iconPicker: 'Seletor de ícones de {{label}}',
+ iconSearch: 'Pesquisa de ícones de {{label}}',
+ iconsCouldNotLoad: 'Não foi possível carregar os ícones.',
+ loadingIcons: 'Carregando ícones',
+ loadingMoreIcons: 'Carregando mais ícones',
+ moreIcons: 'Mais ícones',
+ noIconsMatch: 'Nenhum ícone corresponde a "{{query}}".',
+ searchIconsPlaceholder: 'Pesquisar ícones…',
+ selectedIcon: '{{label}} selecionado',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Criar',
+ newDeck: 'Novo baralho',
+ newFolder: 'Nova pasta',
+ },
+ descriptions: {
+ defaultWorkspace: 'Mantenha baralhos, pastas e notas juntos.',
+ emptyWorkspace: 'Crie um baralho e depois adicione notas para montar sua fila de revisão.',
+ emptyFolder: 'Crie um baralho e depois adicione notas para montar uma fila de revisão.',
+ searchPlaceholder: 'Pesquisar pastas, baralhos e notas…',
+ },
+ empty: {
+ createFirstDeck: 'Crie seu primeiro baralho',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Não foi possível excluir o baralho',
+ couldNotDeleteFolder: 'Não foi possível excluir a pasta',
+ couldNotDeleteWorkspace: 'Não foi possível excluir o espaço de trabalho',
+ dashboardCouldNotOpen: 'Não foi possível abrir o painel',
+ decksCouldNotLoad: 'Não foi possível carregar os baralhos',
+ decksMayBeOutOfDate: 'Os baralhos podem estar desatualizados',
+ foldersCouldNotLoad: 'Não foi possível carregar as pastas',
+ foldersMayBeOutOfDate: 'As pastas podem estar desatualizadas',
+ workspaceCouldNotLoad: 'Não foi possível carregar o espaço de trabalho',
+ },
+ labels: {
+ dashboard: 'Painel',
+ loadingDashboard: 'Carregando painel',
+ newItem: 'Novo item',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Data indisponível',
+ },
+ age: {
+ dayAgo_one: 'há {{count}} dia',
+ dayAgo_other: 'há {{count}} dias',
+ hourAgo_one: 'há {{count}} hora',
+ hourAgo_other: 'há {{count}} horas',
+ justNow: 'agora mesmo',
+ minuteAgo_one: 'há {{count}} minuto',
+ minuteAgo_other: 'há {{count}} minutos',
+ unavailable: 'data indisponível',
+ weekAgo_one: 'há {{count}} semana',
+ weekAgo_other: 'há {{count}} semanas',
+ },
+ labels: {
+ deleted: 'Excluído {{value}}',
+ due: 'Vence: {{value}}',
+ reviewed: 'Revisado: {{value}}',
+ updated: 'Atualizado {{value}}',
+ updatedUppercase: 'ATUALIZADO {{value}}',
+ },
+ relative: {
+ dayAgo_one: 'há {{count}} dia',
+ dayAgo_other: 'há {{count}} dias',
+ inAMoment: 'Em instantes',
+ inDay_one: 'Em {{count}} dia',
+ inDay_other: 'Em {{count}} dias',
+ inMonth_one: 'Em {{count}} mês',
+ inMonth_other: 'Em {{count}} meses',
+ inWeek_one: 'Em {{count}} semana',
+ inWeek_other: 'Em {{count}} semanas',
+ justNow: 'Agora mesmo',
+ monthAgo_one: 'há {{count}} mês',
+ monthAgo_other: 'há {{count}} meses',
+ secondsAgoShort: 'há {{count}} s',
+ minutesAgoShort: 'há {{count}} min',
+ hoursAgoShort: 'há {{count}} h',
+ today: 'Hoje',
+ tomorrow: 'Amanhã',
+ weekAgo_one: 'há {{count}} semana',
+ weekAgo_other: 'há {{count}} semanas',
+ yesterday: 'Ontem',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Ações de {{title}}',
+ createDeck: 'Criar baralho',
+ createNote: 'Criar nota',
+ deleteDeck: 'Excluir baralho',
+ editDeck: 'Editar baralho',
+ newNote: 'Nova nota',
+ openDeck: 'Abrir baralho {{title}}',
+ saveDeck: 'Não foi possível salvar o baralho',
+ studyNow: 'Estudar agora',
+ },
+ descriptions: {
+ emptyDeck: 'Adicione uma nota para que este baralho tenha material para revisão.',
+ editorDefault: 'Baralho de estudo focado.',
+ editorVisual: 'Escolha um glifo de capa para este baralho.',
+ notesSearchPlaceholder: 'Pesquisar notas…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Isso move "{{title}}" para a Lixeira. Você pode restaurá-lo depois.',
+ deleteDeckFallbackDescription: 'Isso move este baralho para a Lixeira. Você pode restaurá-lo depois.',
+ deleteDeckFallbackTitle: 'Excluir baralho?',
+ deleteDeckTitle: 'Excluir "{{title}}"?',
+ deleteNoteDescription: 'Isso move "{{title}}" para a Lixeira. Você pode restaurá-la depois.',
+ deleteNoteFallbackTitle: 'Excluir nota?',
+ deleteNoteTitle: 'Excluir "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Nenhuma nota correspondente',
+ noMatchingNotesDescription: 'Nenhuma nota correspondeu a "{{query}}".',
+ thisDeckIsEmpty: 'Este baralho está vazio',
+ },
+ errors: {
+ couldNotCreateDeck: 'Não foi possível criar o baralho',
+ couldNotDeleteDeck: 'Não foi possível excluir o baralho',
+ couldNotDeleteNote: 'Não foi possível excluir a nota',
+ couldNotLoadFolderPath: 'Não foi possível carregar o caminho da pasta',
+ couldNotSaveDeck: 'Não foi possível salvar o baralho',
+ deckCouldNotLoad: 'Não foi possível carregar o baralho',
+ notesCouldNotLoad: 'Não foi possível carregar as notas',
+ notesMayBeOutOfDate: 'As notas podem estar desatualizadas',
+ },
+ fields: {
+ descriptionLabel: 'Descrição do baralho',
+ descriptionPlaceholder: 'O que este baralho vai ajudar você a revisar?',
+ namePlaceholder: 'Nome do baralho',
+ untitledDeck: 'Baralho sem título',
+ untitledDeckLower: 'baralho sem título',
+ },
+ labels: {
+ createDeckTitle: 'Criar baralho',
+ deck: 'Baralho',
+ deckNotesSearch: 'Pesquisa de notas do baralho',
+ deckOverview: 'Visão geral do baralho',
+ decks: 'Baralhos',
+ due: 'Vence',
+ dueToday: 'Vence hoje',
+ loadingDeck: 'Carregando baralho',
+ mastery: 'Domínio',
+ notes: 'Notas',
+ },
+ sort: {
+ ariaLabel: 'Ordenar baralhos',
+ dueToday: 'Vence hoje',
+ title: 'Título',
+ updated: 'Atualizado',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Os dados mudaram. Atualize e tente novamente.',
+ forbidden: 'Você não tem permissão para fazer isso.',
+ notFound: 'Não encontramos este item.',
+ offline: 'Não é possível acessar o serviço.',
+ timeout: 'Isso demorou demais. Tente novamente.',
+ unauthorized: 'Entre para continuar.',
+ unavailable: 'O serviço está temporariamente indisponível.',
+ },
+ fallback: {
+ unexpected: 'Erro inesperado',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Criar pasta',
+ deleteFolder: 'Excluir pasta',
+ editFolder: 'Editar pasta',
+ },
+ descriptions: {
+ editorDefault: 'Pasta para baralhos relacionados.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Isso move "{{name}}" para a Lixeira. Você pode restaurá-la depois.',
+ deleteFolderFallbackDescription: 'Isso move esta pasta para a Lixeira. Você pode restaurá-la depois.',
+ deleteFolderFallbackTitle: 'Excluir pasta?',
+ deleteFolderTitle: 'Excluir "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'Nenhuma correspondência nesta pasta',
+ noMatchesInFolderDescription: 'Nenhuma pasta, baralho ou nota correspondeu a "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Não foi possível criar a pasta',
+ couldNotDeleteFolder: 'Não foi possível excluir a pasta',
+ couldNotLoadFolderPath: 'Não foi possível carregar o caminho da pasta',
+ couldNotSaveFolder: 'Não foi possível salvar a pasta',
+ folderCouldNotLoad: 'Não foi possível carregar a pasta',
+ },
+ fields: {
+ descriptionLabel: 'Descrição da pasta',
+ descriptionPlaceholder: 'O que pertence a esta pasta?',
+ namePlaceholder: 'Nome da pasta',
+ untitledFolder: 'Pasta sem título',
+ },
+ labels: {
+ createFolderTitle: 'Criar pasta',
+ folder: 'Pasta',
+ folders: 'Pastas',
+ loadingFolder: 'Carregando pasta',
+ name: 'Nome',
+ updated: 'Atualizado',
+ },
+ sort: {
+ ariaLabel: 'Ordenar pastas',
+ name: 'Nome',
+ updated: 'Atualizado',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Se os dados locais e sincronizados discordarem, o item aparecerá aqui.',
+ heading: 'Status de sincronização',
+ title: 'Conflitos',
+ noConflicts: 'Nenhum conflito encontrado',
+ },
+ labels: {
+ menu: 'Menu',
+ },
+ sections: {
+ settings: {
+ description: 'Personalize seu ambiente e suas preferências',
+ title: 'Configurações',
+ },
+ trash: {
+ description: 'Restaure ou exclua permanentemente itens removidos',
+ title: 'Lixeira',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Fechar editor',
+ openActions: 'Abrir ações',
+ openWorkspaces: 'Abrir espaços de trabalho',
+ },
+ items: {
+ home: 'Início',
+ menu: 'Menu',
+ primary: 'Principal',
+ settings: 'Configurações',
+ spaces: 'Espaços',
+ trash: 'Lixeira',
+ workspaces: 'Espaços de trabalho',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Adicionar cloze',
+ deleteNote: 'Excluir nota',
+ editNote: 'Editar nota',
+ hideDerivedCardsNote: 'Ocultar nota de cartões derivados',
+ openNote: 'Abrir {{title}}',
+ saveNote: 'Salvar nota',
+ showDerivedCardsNote: 'Mostrar nota de cartões derivados',
+ },
+ descriptions: {
+ clozeFormat: 'Cada parte oculta vira um cartão de revisão quando você salva.',
+ clozeFormatPrefix: 'Envolva o texto oculto com',
+ derivedCardsHelper: 'As notas são a fonte da verdade para cartões derivados.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Isso move "{{title}}" para a Lixeira. Você pode restaurá-la depois.',
+ deleteNoteFallbackDescription: 'Isso move esta nota para a Lixeira. Você pode restaurá-la depois.',
+ deleteNoteFallbackTitle: 'Excluir nota?',
+ deleteNoteTitle: 'Excluir "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Não foi possível criar a nota',
+ couldNotDeleteNote: 'Não foi possível excluir a nota',
+ couldNotSaveNote: 'Não foi possível salvar a nota',
+ noteCouldNotLoad: 'Não foi possível carregar a nota',
+ },
+ fields: {
+ back: 'Verso',
+ backPlaceholder: 'Digite o verso',
+ bodyPlaceholder: 'Escreva o corpo da nota com cloze deletions…',
+ front: 'Frente',
+ frontPlaceholder: 'Digite a frente',
+ noteBody: 'Corpo da nota',
+ title: 'Título',
+ titlePlaceholder: 'Adicione um título à nota',
+ untitledCloze: 'Cloze sem título',
+ untitledNote: 'Nota sem título',
+ },
+ labels: {
+ backUppercase: 'VERSO',
+ basic: 'Básica',
+ basicLower: 'básica',
+ basicUppercase: 'BÁSICA',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Formato cloze',
+ clozeUppercase: 'CLOZE',
+ deck: 'Baralho',
+ derivedCards: 'CARTÕES DERIVADOS',
+ due: 'Vence',
+ frontUppercase: 'FRENTE',
+ inProgress: 'Em andamento',
+ inProgressUppercase: 'EM ANDAMENTO',
+ loadingNote: 'Carregando nota',
+ loadingNoteEditor: 'Carregando editor de notas',
+ markdownFormatting: 'Formatação Markdown',
+ mastered: 'Dominado',
+ masteredUppercase: 'DOMINADO',
+ newNote: 'Nova nota',
+ noteBody: 'CORPO DA NOTA',
+ noteContent: 'Conteúdo da nota',
+ noteDetails: 'Detalhes da nota',
+ noteMetadata: 'Metadados da nota',
+ noteType: 'Tipo de nota',
+ notes: 'Notas',
+ reviewed: 'Revisado',
+ studyProgress: 'Progresso de estudo',
+ studyProgressUppercase: 'PROGRESSO DE ESTUDO',
+ titleUppercase: 'TÍTULO',
+ updated: 'Atualizado',
+ },
+ sort: {
+ ariaLabel: 'Ordenar notas',
+ title: 'Título',
+ updated: 'Atualizado',
+ },
+ toolbar: {
+ bold: 'Negrito',
+ italic: 'Itálico',
+ link: 'Link',
+ list: 'Lista',
+ },
+ },
+ review: {
+ actions: {
+ again: 'De novo',
+ backToDeck: 'Voltar ao baralho',
+ continueReview: 'Continuar revisão',
+ easy: 'Fácil',
+ good: 'Bom',
+ hard: 'Difícil',
+ newNote: 'Nova nota',
+ showAnswer: 'Mostrar resposta',
+ },
+ errors: {
+ couldNotGradeCard: 'Não foi possível avaliar o cartão',
+ reviewCouldNotLoad: 'Não foi possível carregar a revisão',
+ reviewCouldNotStart: 'Não foi possível iniciar a revisão',
+ summaryCouldNotLoad: 'Não foi possível carregar o resumo da revisão',
+ summaryNotAvailable: 'O resumo da revisão não está disponível',
+ summaryNotComplete: 'Esta revisão ainda não foi concluída.',
+ },
+ labels: {
+ cardsReviewed: 'Cartões revisados',
+ deck: 'Baralho',
+ duration: 'Duração',
+ loadingReview: 'Carregando revisão',
+ loadingSummary: 'Carregando resumo',
+ progress: 'Progresso da revisão',
+ review: 'Revisão',
+ reviewComplete: 'Revisão concluída',
+ reviewed_one: '{{count}} revisado',
+ reviewed_other: '{{count}} revisados',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} h {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'Seu progresso foi salvo neste baralho.',
+ },
+ unavailable: {
+ description: 'Adicione uma nota para que este baralho possa entrar na fila de revisão.',
+ title: 'Nenhum cartão para revisar',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Limpar pesquisa',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Nenhuma correspondência neste espaço de trabalho',
+ noMatchesInWorkspaceDescription: 'Nenhuma pasta, baralho ou nota correspondeu a "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Não foi possível concluir a pesquisa',
+ },
+ labels: {
+ results: 'Resultados da pesquisa',
+ resultsFor: 'Resultados para "{{query}}"',
+ searchingContent: 'Pesquisando conteúdo',
+ },
+ resultGroups: {
+ deck: 'Baralhos',
+ folder: 'Pastas',
+ note: 'Notas',
+ },
+ resultKinds: {
+ deck: 'baralho',
+ folder: 'pasta',
+ note: 'nota',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Redefinir todas as configurações',
+ resetSettings: 'Redefinir configurações',
+ resetToDefaults: 'Restaurar padrões',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Cole um JSON válido com 21 valores numéricos.',
+ fsrsErrorInvalidParams_one: 'Insira um array JSON com exatamente {{count}} número finito.',
+ fsrsErrorInvalidParams_other: 'Insira um array JSON com exatamente {{count}} números finitos.',
+ fsrsHelper: 'Esta é uma substituição avançada. Os valores devem permanecer em ordem.',
+ fsrsJsonLabel: 'JSON de parâmetros FSRS',
+ fsrsTitle: 'Editar parâmetros FSRS',
+ fsrsDescription: 'Cole um array JSON com 21 números para substituir os pesos do scheduler.',
+ resetDescription: 'Isso restaura fuso horário, limites de estudo e configurações de FSRS.',
+ resetDescriptionWithLanguage: 'Isso restaura idioma, fuso horário, limites de estudo e configurações de FSRS.',
+ resetTitle: 'Redefinir todas as configurações?',
+ timezoneDescription: 'Pesquise uma cidade ou identificador de fuso horário.',
+ timezoneSearchLabel: 'Pesquisar fusos horários',
+ timezoneSearchPlaceholder: 'Pesquisar fusos horários…',
+ timezoneTitle: 'Escolher fuso horário',
+ },
+ errors: {
+ couldNotResetSettings: 'Não foi possível redefinir as configurações',
+ couldNotSaveSettings: 'Não foi possível salvar as configurações',
+ settingsCouldNotLoad: 'Não foi possível carregar as configurações',
+ settingsUnavailable: 'As configurações estão indisponíveis.',
+ },
+ labels: {
+ appearance: 'Aparência',
+ automatic: 'Automático',
+ fsrsParameters: 'Parâmetros FSRS',
+ general: 'Geral',
+ language: 'Idioma',
+ loadingSettings: 'Carregando configurações',
+ masteryHorizon: 'Horizonte de domínio',
+ newCardOrder: 'Ordem de cartões novos',
+ newCardsPerDay: 'Cartões novos por dia',
+ reviewCardsPerDay: 'Cartões de revisão por dia',
+ savingSettings: 'Salvando configurações',
+ schedule: 'Agenda',
+ searchNoTimezones: 'Nenhum fuso horário correspondente.',
+ settings: 'Configurações',
+ settingsReset: 'Configurações redefinidas',
+ study: 'Estudo',
+ targetRecallProbability: 'Probabilidade-alvo de lembrança',
+ theme: 'Tema',
+ timezone: 'Fuso horário',
+ },
+ options: {
+ languageEnUs: 'Inglês (EUA)',
+ newCardsAfterReviews: 'Depois das revisões',
+ newCardsBeforeReviews: 'Antes das revisões',
+ newCardsMixed: 'Misturados',
+ themeDark: 'Escuro',
+ themeLight: 'Claro',
+ themeSystem: 'Sistema',
+ timezoneSystem: 'Usar fuso horário do sistema',
+ },
+ rows: {
+ fsrsDescription: 'Pesos do modelo avançado',
+ languageDescription: 'Idioma da interface',
+ masteryHorizonDescription: 'Dias em que um cartão deve permanecer recuperável no alvo ou acima dele para contar como dominado',
+ newCardOrderDescription: 'Ordem dos cartões novos em relação às revisões',
+ newCardsPerDayDescription: 'Máximo de cartões novos por dia',
+ reviewCardsPerDayDescription: 'Máximo de cartões de revisão por dia',
+ targetRecallProbabilityDescription: 'Probabilidade mínima de lembrança na próxima revisão agendada',
+ timezoneDescription: 'Use o fuso horário automático ou escolha uma cidade.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Excluir permanentemente',
+ empty: 'Esvaziar',
+ emptyTrash: 'Esvaziar lixeira',
+ restore: 'Restaurar',
+ restoringItem: 'Restaurando {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Isso exclui "{{title}}" permanentemente. Não é possível desfazer.',
+ deleteItemFallbackDescription: 'Isso exclui este item permanentemente. Não é possível desfazer.',
+ deleteItemFallbackTitle: 'Excluir item?',
+ deleteItemTitle: 'Excluir "{{title}}"?',
+ emptyTrashDescription: 'Isso exclui permanentemente tudo na Lixeira. Não é possível desfazer.',
+ emptyTrashTitle: 'Esvaziar lixeira?',
+ },
+ empty: {
+ description: 'Os itens que você excluir aparecerão aqui antes da remoção permanente.',
+ title: 'A Lixeira está vazia',
+ },
+ errors: {
+ couldNotDeleteItem: 'Não foi possível excluir o item',
+ couldNotEmptyTrash: 'Não foi possível esvaziar a Lixeira',
+ couldNotRestoreItem: 'Não foi possível restaurar o item',
+ trashCouldNotLoad: 'Não foi possível carregar a Lixeira',
+ trashMayBeOutOfDate: 'A Lixeira pode estar desatualizada',
+ },
+ labels: {
+ deletedAge: 'Excluído {{value}}',
+ itemCount_one: '{{count}} item',
+ itemCount_other: '{{count}} itens',
+ lastEmptied: 'Esvaziada pela última vez {{value}}',
+ loadingTrash: 'Carregando Lixeira',
+ originalLocation: 'Local original: {{location}}',
+ title: 'Lixeira',
+ trashActions: 'Ações de lixeira de {{title}}',
+ },
+ kinds: {
+ deck: 'Baralho',
+ folder: 'Pasta',
+ note: 'Nota',
+ workspace: 'Espaço de trabalho',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Criar espaço de trabalho',
+ deleteWorkspace: 'Excluir espaço de trabalho',
+ editWorkspace: 'Editar espaço de trabalho',
+ newWorkspace: 'Novo espaço de trabalho',
+ openWorkspace: 'Abrir {{title}}',
+ openingWorkspace: 'Abrindo {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Contexto de estudo.',
+ editorVisual: 'Escolha uma âncora visual para este espaço de trabalho.',
+ emptyList: 'Separe baralhos, notas e filas de revisão por contexto de estudo.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Isso move "{{title}}" para a Lixeira. Você pode restaurá-lo depois.',
+ deleteWorkspaceFallbackDescription: 'Isso move este espaço de trabalho para a Lixeira. Você pode restaurá-lo depois.',
+ deleteWorkspaceFallbackTitle: 'Excluir espaço de trabalho?',
+ deleteWorkspaceTitle: 'Excluir "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Comece com um espaço de trabalho',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Não foi possível criar o espaço de trabalho',
+ couldNotDeleteWorkspace: 'Não foi possível excluir o espaço de trabalho',
+ couldNotOpenWorkspace: 'Não foi possível abrir o espaço de trabalho',
+ couldNotSaveWorkspace: 'Não foi possível salvar o espaço de trabalho',
+ workspaceCouldNotLoad: 'Não foi possível carregar o espaço de trabalho',
+ workspacesCouldNotLoad: 'Não foi possível carregar os espaços de trabalho',
+ },
+ fields: {
+ descriptionLabel: 'Descrição do espaço de trabalho',
+ descriptionPlaceholder: 'O que pertence a este espaço de trabalho?',
+ namePlaceholder: 'Nome do espaço de trabalho',
+ untitledWorkspace: 'Espaço de trabalho sem título',
+ },
+ labels: {
+ createWorkspaceTitle: 'Criar espaço de trabalho',
+ loadingWorkspaces: 'Carregando espaços de trabalho',
+ workspace: 'Espaço de trabalho',
+ workspaces: 'Espaços de trabalho',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/ro.ts b/ui/src/core/i18n/resources/ro.ts
new file mode 100644
index 0000000..a485893
--- /dev/null
+++ b/ui/src/core/i18n/resources/ro.ts
@@ -0,0 +1,636 @@
+export const ro = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Încearcă din nou. Dacă se repetă, redeschide Clear.',
+ title: 'Nu s-a putut porni',
+ },
+ loadingTitle: 'Se pregătește spațiul tău de studiu',
+ },
+ common: {
+ actions: {
+ back: 'Înapoi',
+ cancel: 'Anulează',
+ checkAgain: 'Verifică din nou',
+ close: 'Închide',
+ create: 'Creează',
+ delete: 'Șterge',
+ dismissError: 'Închide eroarea',
+ dismissStatus: 'Închide starea',
+ edit: 'Editează',
+ itemActions: 'Acțiuni pentru {{title}}',
+ reset: 'Resetează',
+ review: 'Recapitulează',
+ save: 'Salvează',
+ saveChanges: 'Salvează modificările',
+ tryAgain: 'Încearcă din nou',
+ },
+ labels: {
+ active: 'Activ',
+ clear: 'Clear',
+ custom: 'Personalizat',
+ default: 'Implicit',
+ loadingEditor: 'Se încarcă editorul',
+ name: 'Nume',
+ completedTask: 'Sarcină finalizată',
+ description: 'Descriere',
+ incompleteTask: 'Sarcină nefinalizată',
+ percentageInput: 'Procent pentru {{label}}',
+ visual: 'Vizual',
+ },
+ status: {
+ actionFailed: 'Acțiunea a eșuat',
+ actionInProgress: 'Acțiune în curs',
+ },
+ sort: {
+ ascending: 'Asc.',
+ column: 'Coloană',
+ descending: 'Desc.',
+ direction: 'Direcție',
+ sort: 'Sortează',
+ },
+ search: {
+ label: 'Caută',
+ },
+ visualPicker: {
+ allLucideIcons: 'Toate pictogramele Lucide',
+ browseIconsFor: 'Răsfoiește sau caută pictograme pentru {{label}}.',
+ chooseIcon: 'Alege pictograma',
+ iconPicker: 'Selector de pictograme pentru {{label}}',
+ iconSearch: 'Căutare pictograme pentru {{label}}',
+ iconsCouldNotLoad: 'Pictogramele nu au putut fi încărcate.',
+ loadingIcons: 'Se încarcă pictogramele',
+ loadingMoreIcons: 'Se încarcă mai multe pictograme',
+ moreIcons: 'Mai multe pictograme',
+ noIconsMatch: 'Nicio pictogramă nu se potrivește cu "{{query}}".',
+ searchIconsPlaceholder: 'Caută pictograme…',
+ selectedIcon: '{{label}} selectat',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Creează',
+ newDeck: 'Pachet nou',
+ newFolder: 'Folder nou',
+ },
+ descriptions: {
+ defaultWorkspace: 'Ține pachetele, folderele și notițele împreună.',
+ emptyWorkspace: 'Creează un pachet, apoi adaugă notițe pentru a construi coada de recapitulare.',
+ emptyFolder: 'Creează un pachet, apoi adaugă notițe pentru a construi o coadă de recapitulare.',
+ searchPlaceholder: 'Caută foldere, pachete și notițe…',
+ },
+ empty: {
+ createFirstDeck: 'Creează primul pachet',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Pachetul nu a putut fi șters',
+ couldNotDeleteFolder: 'Folderul nu a putut fi șters',
+ couldNotDeleteWorkspace: 'Spațiul de lucru nu a putut fi șters',
+ dashboardCouldNotOpen: 'Panoul nu a putut fi deschis',
+ decksCouldNotLoad: 'Pachetele nu au putut fi încărcate',
+ decksMayBeOutOfDate: 'Pachetele pot fi neactualizate',
+ foldersCouldNotLoad: 'Folderele nu au putut fi încărcate',
+ foldersMayBeOutOfDate: 'Folderele pot fi neactualizate',
+ workspaceCouldNotLoad: 'Spațiul de lucru nu a putut fi încărcat',
+ },
+ labels: {
+ dashboard: 'Panou',
+ loadingDashboard: 'Se încarcă panoul',
+ newItem: 'Element nou',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Data nu este disponibilă',
+ },
+ age: {
+ dayAgo_one: 'acum {{count}} zi',
+ dayAgo_few: 'acum {{count}} zile',
+ dayAgo_other: 'acum {{count}} de zile',
+ hourAgo_one: 'acum {{count}} oră',
+ hourAgo_few: 'acum {{count}} ore',
+ hourAgo_other: 'acum {{count}} de ore',
+ justNow: 'chiar acum',
+ minuteAgo_one: 'acum {{count}} minut',
+ minuteAgo_few: 'acum {{count}} minute',
+ minuteAgo_other: 'acum {{count}} de minute',
+ unavailable: 'data nu este disponibilă',
+ weekAgo_one: 'acum {{count}} săptămână',
+ weekAgo_few: 'acum {{count}} săptămâni',
+ weekAgo_other: 'acum {{count}} de săptămâni',
+ },
+ labels: {
+ deleted: 'Șters {{value}}',
+ due: 'Scadent: {{value}}',
+ reviewed: 'Recapitulat: {{value}}',
+ updated: 'Actualizat {{value}}',
+ updatedUppercase: 'ACTUALIZAT {{value}}',
+ },
+ relative: {
+ dayAgo_one: 'acum {{count}} zi',
+ dayAgo_few: 'acum {{count}} zile',
+ dayAgo_other: 'acum {{count}} de zile',
+ inAMoment: 'Într-o clipă',
+ inDay_one: 'În {{count}} zi',
+ inDay_few: 'În {{count}} zile',
+ inDay_other: 'În {{count}} de zile',
+ inMonth_one: 'În {{count}} lună',
+ inMonth_few: 'În {{count}} luni',
+ inMonth_other: 'În {{count}} de luni',
+ inWeek_one: 'În {{count}} săptămână',
+ inWeek_few: 'În {{count}} săptămâni',
+ inWeek_other: 'În {{count}} de săptămâni',
+ justNow: 'Chiar acum',
+ monthAgo_one: 'acum {{count}} lună',
+ monthAgo_few: 'acum {{count}} luni',
+ monthAgo_other: 'acum {{count}} de luni',
+ secondsAgoShort: 'acum {{count}} s',
+ minutesAgoShort: 'acum {{count}} min',
+ hoursAgoShort: 'acum {{count}} h',
+ today: 'Astăzi',
+ tomorrow: 'Mâine',
+ weekAgo_one: 'acum {{count}} săptămână',
+ weekAgo_few: 'acum {{count}} săptămâni',
+ weekAgo_other: 'acum {{count}} de săptămâni',
+ yesterday: 'Ieri',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Acțiuni pentru {{title}}',
+ createDeck: 'Creează pachet',
+ createNote: 'Creează notiță',
+ deleteDeck: 'Șterge pachetul',
+ editDeck: 'Editează pachetul',
+ newNote: 'Notiță nouă',
+ openDeck: 'Deschide pachetul {{title}}',
+ saveDeck: 'Pachetul nu a putut fi salvat',
+ studyNow: 'Studiază acum',
+ },
+ descriptions: {
+ emptyDeck: 'Adaugă o notiță pentru ca acest pachet să aibă material de recapitulat.',
+ editorDefault: 'Pachet de studiu concentrat.',
+ editorVisual: 'Alege un simbol de copertă pentru acest pachet.',
+ notesSearchPlaceholder: 'Caută notițe…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Aceasta mută "{{title}}" în Coș. Îl poți restaura mai târziu.',
+ deleteDeckFallbackDescription: 'Aceasta mută acest pachet în Coș. Îl poți restaura mai târziu.',
+ deleteDeckFallbackTitle: 'Ștergi pachetul?',
+ deleteDeckTitle: 'Ștergi "{{title}}"?',
+ deleteNoteDescription: 'Aceasta mută "{{title}}" în Coș. O poți restaura mai târziu.',
+ deleteNoteFallbackTitle: 'Ștergi notița?',
+ deleteNoteTitle: 'Ștergi "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Nicio notiță potrivită',
+ noMatchingNotesDescription: 'Nicio notiță nu se potrivește cu "{{query}}".',
+ thisDeckIsEmpty: 'Acest pachet este gol',
+ },
+ errors: {
+ couldNotCreateDeck: 'Pachetul nu a putut fi creat',
+ couldNotDeleteDeck: 'Pachetul nu a putut fi șters',
+ couldNotDeleteNote: 'Notița nu a putut fi ștearsă',
+ couldNotLoadFolderPath: 'Calea folderului nu a putut fi încărcată',
+ couldNotSaveDeck: 'Pachetul nu a putut fi salvat',
+ deckCouldNotLoad: 'Pachetul nu a putut fi încărcat',
+ notesCouldNotLoad: 'Notițele nu au putut fi încărcate',
+ notesMayBeOutOfDate: 'Notițele pot fi neactualizate',
+ },
+ fields: {
+ descriptionLabel: 'Descrierea pachetului',
+ descriptionPlaceholder: 'Ce te va ajuta să recapitulezi acest pachet?',
+ namePlaceholder: 'Numele pachetului',
+ untitledDeck: 'Pachet fără titlu',
+ untitledDeckLower: 'pachet fără titlu',
+ },
+ labels: {
+ createDeckTitle: 'Creează pachet',
+ deck: 'Pachet',
+ deckNotesSearch: 'Căutare notițe în pachet',
+ deckOverview: 'Prezentare pachet',
+ decks: 'Pachete',
+ due: 'Scadent',
+ dueToday: 'Scadent astăzi',
+ loadingDeck: 'Se încarcă pachetul',
+ mastery: 'Stăpânire',
+ notes: 'Notițe',
+ },
+ sort: {
+ ariaLabel: 'Sortează pachetele',
+ dueToday: 'Scadent astăzi',
+ title: 'Titlu',
+ updated: 'Actualizat',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Datele s-au schimbat. Reîmprospătează și încearcă din nou.',
+ forbidden: 'Nu ai permisiunea să faci asta.',
+ notFound: 'Nu am putut găsi acest element.',
+ offline: 'Serviciul nu poate fi contactat.',
+ timeout: 'A durat prea mult. Încearcă din nou.',
+ unauthorized: 'Conectează-te pentru a continua.',
+ unavailable: 'Serviciul este temporar indisponibil.',
+ },
+ fallback: {
+ unexpected: 'Eroare neașteptată',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Creează folder',
+ deleteFolder: 'Șterge folderul',
+ editFolder: 'Editează folderul',
+ },
+ descriptions: {
+ editorDefault: 'Folder pentru pachete asociate.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Aceasta mută "{{name}}" în Coș. Îl poți restaura mai târziu.',
+ deleteFolderFallbackDescription: 'Aceasta mută acest folder în Coș. Îl poți restaura mai târziu.',
+ deleteFolderFallbackTitle: 'Ștergi folderul?',
+ deleteFolderTitle: 'Ștergi "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'Nicio potrivire în acest folder',
+ noMatchesInFolderDescription: 'Niciun folder, pachet sau nicio notiță nu se potrivește cu "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Folderul nu a putut fi creat',
+ couldNotDeleteFolder: 'Folderul nu a putut fi șters',
+ couldNotLoadFolderPath: 'Calea folderului nu a putut fi încărcată',
+ couldNotSaveFolder: 'Folderul nu a putut fi salvat',
+ folderCouldNotLoad: 'Folderul nu a putut fi încărcat',
+ },
+ fields: {
+ descriptionLabel: 'Descrierea folderului',
+ descriptionPlaceholder: 'Ce aparține acestui folder?',
+ namePlaceholder: 'Numele folderului',
+ untitledFolder: 'Folder fără titlu',
+ },
+ labels: {
+ createFolderTitle: 'Creează folder',
+ folder: 'Folder',
+ folders: 'Foldere',
+ loadingFolder: 'Se încarcă folderul',
+ name: 'Nume',
+ updated: 'Actualizat',
+ },
+ sort: {
+ ariaLabel: 'Sortează folderele',
+ name: 'Nume',
+ updated: 'Actualizat',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Dacă datele locale și cele sincronizate diferă, elementul va apărea aici.',
+ heading: 'Stare sincronizare',
+ title: 'Conflicte',
+ noConflicts: 'Nu s-au găsit conflicte',
+ },
+ labels: {
+ menu: 'Meniu',
+ },
+ sections: {
+ settings: {
+ description: 'Personalizează mediul și preferințele',
+ title: 'Setări',
+ },
+ trash: {
+ description: 'Restaurează sau șterge definitiv elementele eliminate',
+ title: 'Coș',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Închide editorul',
+ openActions: 'Deschide acțiunile',
+ openWorkspaces: 'Deschide spațiile de lucru',
+ },
+ items: {
+ home: 'Acasă',
+ menu: 'Meniu',
+ primary: 'Principal',
+ settings: 'Setări',
+ spaces: 'Spații',
+ trash: 'Coș',
+ workspaces: 'Spații de lucru',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Adaugă cloze',
+ deleteNote: 'Șterge notița',
+ editNote: 'Editează notița',
+ hideDerivedCardsNote: 'Ascunde nota despre cardurile derivate',
+ openNote: 'Deschide {{title}}',
+ saveNote: 'Salvează notița',
+ showDerivedCardsNote: 'Arată nota despre cardurile derivate',
+ },
+ descriptions: {
+ clozeFormat: 'Fiecare parte ascunsă devine un card de recapitulare când salvezi.',
+ clozeFormatPrefix: 'Încadrează textul ascuns cu',
+ derivedCardsHelper: 'Notițele sunt sursa de adevăr pentru cardurile derivate.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Aceasta mută "{{title}}" în Coș. O poți restaura mai târziu.',
+ deleteNoteFallbackDescription: 'Aceasta mută această notiță în Coș. O poți restaura mai târziu.',
+ deleteNoteFallbackTitle: 'Ștergi notița?',
+ deleteNoteTitle: 'Ștergi "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Notița nu a putut fi creată',
+ couldNotDeleteNote: 'Notița nu a putut fi ștearsă',
+ couldNotSaveNote: 'Notița nu a putut fi salvată',
+ noteCouldNotLoad: 'Notița nu a putut fi încărcată',
+ },
+ fields: {
+ back: 'Verso',
+ backPlaceholder: 'Introdu verso',
+ bodyPlaceholder: 'Scrie conținutul notiței cu ștergeri cloze…',
+ front: 'Față',
+ frontPlaceholder: 'Introdu fața',
+ noteBody: 'Conținutul notiței',
+ title: 'Titlu',
+ titlePlaceholder: 'Adaugă un titlu pentru notiță',
+ untitledCloze: 'Cloze fără titlu',
+ untitledNote: 'Notiță fără titlu',
+ },
+ labels: {
+ backUppercase: 'VERSO',
+ basic: 'De bază',
+ basicLower: 'de bază',
+ basicUppercase: 'DE BAZĂ',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Format cloze',
+ clozeUppercase: 'CLOZE',
+ deck: 'Pachet',
+ derivedCards: 'CARDURI DERIVATE',
+ due: 'Scadent',
+ frontUppercase: 'FAȚĂ',
+ inProgress: 'În curs',
+ inProgressUppercase: 'ÎN CURS',
+ loadingNote: 'Se încarcă notița',
+ loadingNoteEditor: 'Se încarcă editorul de notițe',
+ markdownFormatting: 'Formatare Markdown',
+ mastered: 'Stăpânit',
+ masteredUppercase: 'STĂPÂNIT',
+ newNote: 'Notiță nouă',
+ noteBody: 'CONȚINUTUL NOTIȚEI',
+ noteContent: 'Conținut notiță',
+ noteDetails: 'Detalii notiță',
+ noteMetadata: 'Metadate notiță',
+ noteType: 'Tip notiță',
+ notes: 'Notițe',
+ reviewed: 'Recapitulat',
+ studyProgress: 'Progresul studiului',
+ studyProgressUppercase: 'PROGRESUL STUDIULUI',
+ titleUppercase: 'TITLU',
+ updated: 'Actualizat',
+ },
+ sort: {
+ ariaLabel: 'Sortează notițele',
+ title: 'Titlu',
+ updated: 'Actualizat',
+ },
+ toolbar: {
+ bold: 'Aldin',
+ italic: 'Cursiv',
+ link: 'Link',
+ list: 'Listă',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Din nou',
+ backToDeck: 'Înapoi la pachet',
+ continueReview: 'Continuă recapitularea',
+ easy: 'Ușor',
+ good: 'Bine',
+ hard: 'Greu',
+ newNote: 'Notiță nouă',
+ showAnswer: 'Arată răspunsul',
+ },
+ errors: {
+ couldNotGradeCard: 'Cardul nu a putut fi evaluat',
+ reviewCouldNotLoad: 'Recapitularea nu a putut fi încărcată',
+ reviewCouldNotStart: 'Recapitularea nu a putut fi pornită',
+ summaryCouldNotLoad: 'Rezumatul recapitulării nu a putut fi încărcat',
+ summaryNotAvailable: 'Rezumatul recapitulării nu este disponibil',
+ summaryNotComplete: 'Această recapitulare nu este încă finalizată.',
+ },
+ labels: {
+ cardsReviewed: 'Carduri recapitulate',
+ deck: 'Pachet',
+ duration: 'Durată',
+ loadingReview: 'Se încarcă recapitularea',
+ loadingSummary: 'Se încarcă rezumatul',
+ progress: 'Progres recapitulare',
+ review: 'Recapitulare',
+ reviewComplete: 'Recapitulare finalizată',
+ reviewed_one: 'Recapitulat {{count}}',
+ reviewed_few: 'Recapitulate {{count}}',
+ reviewed_other: 'Recapitulate {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} h {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'Progresul tău a fost salvat în acest pachet.',
+ },
+ unavailable: {
+ description: 'Adaugă o notiță pentru ca acest pachet să intre în coada de recapitulare.',
+ title: 'Nu există carduri de recapitulat',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Golește căutarea',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Nicio potrivire în acest spațiu de lucru',
+ noMatchesInWorkspaceDescription: 'Niciun folder, pachet sau nicio notiță nu se potrivește cu "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Căutarea nu a putut fi finalizată',
+ },
+ labels: {
+ results: 'Rezultatele căutării',
+ resultsFor: 'Rezultate pentru "{{query}}"',
+ searchingContent: 'Se caută conținut',
+ },
+ resultGroups: {
+ deck: 'Pachete',
+ folder: 'Foldere',
+ note: 'Notițe',
+ },
+ resultKinds: {
+ deck: 'pachet',
+ folder: 'folder',
+ note: 'notiță',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Resetează toate setările',
+ resetSettings: 'Resetează setările',
+ resetToDefaults: 'Revino la valorile implicite',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Lipește JSON valid cu 21 de valori numerice.',
+ fsrsErrorInvalidParams_one: 'Introdu un array JSON cu exact {{count}} număr finit.',
+ fsrsErrorInvalidParams_few: 'Introdu un array JSON cu exact {{count}} numere finite.',
+ fsrsErrorInvalidParams_other: 'Introdu un array JSON cu exact {{count}} de numere finite.',
+ fsrsHelper: 'Aceasta este o suprascriere expert. Valorile trebuie să rămână în ordine.',
+ fsrsJsonLabel: 'JSON parametri FSRS',
+ fsrsTitle: 'Editează parametrii FSRS',
+ fsrsDescription: 'Lipește un array JSON cu 21 de numere pentru a suprascrie ponderile scheduler.',
+ resetDescription: 'Aceasta restaurează fusul orar, limitele de studiu și setările FSRS.',
+ resetDescriptionWithLanguage: 'Aceasta restaurează limba, fusul orar, limitele de studiu și setările FSRS.',
+ resetTitle: 'Resetezi toate setările?',
+ timezoneDescription: 'Caută un oraș sau un identificator de fus orar.',
+ timezoneSearchLabel: 'Caută fusuri orare',
+ timezoneSearchPlaceholder: 'Caută fusuri orare…',
+ timezoneTitle: 'Alege fusul orar',
+ },
+ errors: {
+ couldNotResetSettings: 'Setările nu au putut fi resetate',
+ couldNotSaveSettings: 'Setările nu au putut fi salvate',
+ settingsCouldNotLoad: 'Setările nu au putut fi încărcate',
+ settingsUnavailable: 'Setările nu sunt disponibile.',
+ },
+ labels: {
+ appearance: 'Aspect',
+ automatic: 'Automat',
+ fsrsParameters: 'Parametri FSRS',
+ general: 'General',
+ language: 'Limbă',
+ loadingSettings: 'Se încarcă setările',
+ masteryHorizon: 'Orizont de stăpânire',
+ newCardOrder: 'Ordinea cardurilor noi',
+ newCardsPerDay: 'Carduri noi pe zi',
+ reviewCardsPerDay: 'Carduri de recapitulat pe zi',
+ savingSettings: 'Se salvează setările',
+ schedule: 'Program',
+ searchNoTimezones: 'Niciun fus orar potrivit.',
+ settings: 'Setări',
+ settingsReset: 'Setări resetate',
+ study: 'Studiu',
+ targetRecallProbability: 'Probabilitate țintă de reamintire',
+ theme: 'Temă',
+ timezone: 'Fus orar',
+ },
+ options: {
+ languageEnUs: 'Engleză (SUA)',
+ newCardsAfterReviews: 'După recapitulări',
+ newCardsBeforeReviews: 'Înainte de recapitulări',
+ newCardsMixed: 'Amestecat',
+ themeDark: 'Întunecată',
+ themeLight: 'Luminoasă',
+ themeSystem: 'Sistem',
+ timezoneSystem: 'Folosește fusul orar al sistemului',
+ },
+ rows: {
+ fsrsDescription: 'Ponderi ale modelului expert',
+ languageDescription: 'Limba interfeței',
+ masteryHorizonDescription: 'Numărul de zile în care un card trebuie să rămână reamintibil la probabilitatea țintă sau peste pentru a fi considerat stăpânit',
+ newCardOrderDescription: 'Ordinea cardurilor noi față de recapitulări',
+ newCardsPerDayDescription: 'Numărul maxim de carduri noi pe zi',
+ reviewCardsPerDayDescription: 'Numărul maxim de carduri de recapitulat pe zi',
+ targetRecallProbabilityDescription: 'Probabilitatea minimă de reamintire la următoarea recapitulare programată',
+ timezoneDescription: 'Folosește fusul orar automat sau alege un oraș.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Șterge definitiv',
+ empty: 'Golește',
+ emptyTrash: 'Golește coșul',
+ restore: 'Restaurează',
+ restoringItem: 'Se restaurează {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Aceasta șterge definitiv "{{title}}". Acțiunea nu poate fi anulată.',
+ deleteItemFallbackDescription: 'Aceasta șterge definitiv acest element. Acțiunea nu poate fi anulată.',
+ deleteItemFallbackTitle: 'Ștergi elementul?',
+ deleteItemTitle: 'Ștergi "{{title}}"?',
+ emptyTrashDescription: 'Aceasta șterge definitiv tot din Coș. Acțiunea nu poate fi anulată.',
+ emptyTrashTitle: 'Golești coșul?',
+ },
+ empty: {
+ description: 'Elementele pe care le ștergi vor apărea aici înainte de eliminarea definitivă.',
+ title: 'Coșul este gol',
+ },
+ errors: {
+ couldNotDeleteItem: 'Elementul nu a putut fi șters',
+ couldNotEmptyTrash: 'Coșul nu a putut fi golit',
+ couldNotRestoreItem: 'Elementul nu a putut fi restaurat',
+ trashCouldNotLoad: 'Coșul nu a putut fi încărcat',
+ trashMayBeOutOfDate: 'Coșul poate fi neactualizat',
+ },
+ labels: {
+ deletedAge: 'Șters {{value}}',
+ itemCount_one: '{{count}} element',
+ itemCount_few: '{{count}} elemente',
+ itemCount_other: '{{count}} de elemente',
+ lastEmptied: 'Golit ultima dată {{value}}',
+ loadingTrash: 'Se încarcă Coșul',
+ originalLocation: 'Locația originală: {{location}}',
+ title: 'Coș',
+ trashActions: 'Acțiuni în coș pentru {{title}}',
+ },
+ kinds: {
+ deck: 'Pachet',
+ folder: 'Folder',
+ note: 'Notiță',
+ workspace: 'Spațiu de lucru',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Creează spațiu de lucru',
+ deleteWorkspace: 'Șterge spațiul de lucru',
+ editWorkspace: 'Editează spațiul de lucru',
+ newWorkspace: 'Spațiu de lucru nou',
+ openWorkspace: 'Deschide {{title}}',
+ openingWorkspace: 'Se deschide {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Context de studiu.',
+ editorVisual: 'Alege o ancoră vizuală pentru acest spațiu de lucru.',
+ emptyList: 'Separă pachetele, notițele și cozile de recapitulare după contextul de studiu.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Aceasta mută "{{title}}" în Coș. Îl poți restaura mai târziu.',
+ deleteWorkspaceFallbackDescription: 'Aceasta mută acest spațiu de lucru în Coș. Îl poți restaura mai târziu.',
+ deleteWorkspaceFallbackTitle: 'Ștergi spațiul de lucru?',
+ deleteWorkspaceTitle: 'Ștergi "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Începe cu un spațiu de lucru',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Spațiul de lucru nu a putut fi creat',
+ couldNotDeleteWorkspace: 'Spațiul de lucru nu a putut fi șters',
+ couldNotOpenWorkspace: 'Spațiul de lucru nu a putut fi deschis',
+ couldNotSaveWorkspace: 'Spațiul de lucru nu a putut fi salvat',
+ workspaceCouldNotLoad: 'Spațiul de lucru nu a putut fi încărcat',
+ workspacesCouldNotLoad: 'Spațiile de lucru nu au putut fi încărcate',
+ },
+ fields: {
+ descriptionLabel: 'Descrierea spațiului de lucru',
+ descriptionPlaceholder: 'Ce aparține acestui spațiu de lucru?',
+ namePlaceholder: 'Numele spațiului de lucru',
+ untitledWorkspace: 'Spațiu de lucru fără titlu',
+ },
+ labels: {
+ createWorkspaceTitle: 'Creează spațiu de lucru',
+ loadingWorkspaces: 'Se încarcă spațiile de lucru',
+ workspace: 'Spațiu de lucru',
+ workspaces: 'Spații de lucru',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/ru.ts b/ui/src/core/i18n/resources/ru.ts
new file mode 100644
index 0000000..01942ed
--- /dev/null
+++ b/ui/src/core/i18n/resources/ru.ts
@@ -0,0 +1,649 @@
+export const ru = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Попробуйте еще раз. Если ошибка повторится, откройте Clear заново.',
+ title: 'Не удалось запустить',
+ },
+ loadingTitle: 'Готовим пространство для учебы',
+ },
+ common: {
+ actions: {
+ back: 'Назад',
+ cancel: 'Отмена',
+ checkAgain: 'Проверить снова',
+ close: 'Закрыть',
+ create: 'Создать',
+ delete: 'Удалить',
+ dismissError: 'Скрыть ошибку',
+ dismissStatus: 'Скрыть статус',
+ edit: 'Изменить',
+ itemActions: 'Действия для {{title}}',
+ reset: 'Сбросить',
+ review: 'Повторять',
+ save: 'Сохранить',
+ saveChanges: 'Сохранить изменения',
+ tryAgain: 'Попробовать снова',
+ },
+ labels: {
+ active: 'Активно',
+ clear: 'Clear',
+ custom: 'Пользовательский',
+ default: 'По умолчанию',
+ loadingEditor: 'Загрузка редактора',
+ name: 'Название',
+ completedTask: 'Завершенная задача',
+ description: 'Описание',
+ incompleteTask: 'Незавершенная задача',
+ percentageInput: '{{label}}, процент',
+ visual: 'Визуал',
+ },
+ status: {
+ actionFailed: 'Действие не выполнено',
+ actionInProgress: 'Действие выполняется',
+ },
+ sort: {
+ ascending: 'Возр.',
+ column: 'Столбец',
+ descending: 'Убыв.',
+ direction: 'Порядок',
+ sort: 'Сортировка',
+ },
+ search: {
+ label: 'Поиск',
+ },
+ visualPicker: {
+ allLucideIcons: 'Все иконки Lucide',
+ browseIconsFor: 'Просматривайте или ищите иконки для {{label}}.',
+ chooseIcon: 'Выбрать иконку',
+ iconPicker: 'Выбор иконки для {{label}}',
+ iconSearch: 'Поиск иконок для {{label}}',
+ iconsCouldNotLoad: 'Не удалось загрузить иконки.',
+ loadingIcons: 'Загрузка иконок',
+ loadingMoreIcons: 'Загрузка дополнительных иконок',
+ moreIcons: 'Еще иконки',
+ noIconsMatch: 'Нет иконок по запросу "{{query}}".',
+ searchIconsPlaceholder: 'Искать иконки…',
+ selectedIcon: 'Выбрано: {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Создать',
+ newDeck: 'Новая колода',
+ newFolder: 'Новая папка',
+ },
+ descriptions: {
+ defaultWorkspace: 'Храните колоды, папки и заметки вместе.',
+ emptyWorkspace: 'Создайте колоду, затем добавьте заметки, чтобы собрать очередь повторения.',
+ emptyFolder: 'Создайте колоду, затем добавьте заметки, чтобы собрать очередь повторения.',
+ searchPlaceholder: 'Искать папки, колоды и заметки…',
+ },
+ empty: {
+ createFirstDeck: 'Создайте первую колоду',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Не удалось удалить колоду',
+ couldNotDeleteFolder: 'Не удалось удалить папку',
+ couldNotDeleteWorkspace: 'Не удалось удалить рабочее пространство',
+ dashboardCouldNotOpen: 'Не удалось открыть панель',
+ decksCouldNotLoad: 'Не удалось загрузить колоды',
+ decksMayBeOutOfDate: 'Колоды могут быть устаревшими',
+ foldersCouldNotLoad: 'Не удалось загрузить папки',
+ foldersMayBeOutOfDate: 'Папки могут быть устаревшими',
+ workspaceCouldNotLoad: 'Не удалось загрузить рабочее пространство',
+ },
+ labels: {
+ dashboard: 'Панель',
+ loadingDashboard: 'Загрузка панели',
+ newItem: 'Новый элемент',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Дата недоступна',
+ },
+ age: {
+ dayAgo_one: '{{count}} день назад',
+ dayAgo_few: '{{count}} дня назад',
+ dayAgo_many: '{{count}} дней назад',
+ dayAgo_other: '{{count}} дня назад',
+ hourAgo_one: '{{count}} час назад',
+ hourAgo_few: '{{count}} часа назад',
+ hourAgo_many: '{{count}} часов назад',
+ hourAgo_other: '{{count}} часа назад',
+ justNow: 'только что',
+ minuteAgo_one: '{{count}} минуту назад',
+ minuteAgo_few: '{{count}} минуты назад',
+ minuteAgo_many: '{{count}} минут назад',
+ minuteAgo_other: '{{count}} минуты назад',
+ unavailable: 'дата недоступна',
+ weekAgo_one: '{{count}} неделю назад',
+ weekAgo_few: '{{count}} недели назад',
+ weekAgo_many: '{{count}} недель назад',
+ weekAgo_other: '{{count}} недели назад',
+ },
+ labels: {
+ deleted: 'Удалено {{value}}',
+ due: 'К повторению: {{value}}',
+ reviewed: 'Повторено: {{value}}',
+ updated: 'Обновлено {{value}}',
+ updatedUppercase: 'ОБНОВЛЕНО {{value}}',
+ },
+ relative: {
+ dayAgo_one: '{{count}} день назад',
+ dayAgo_few: '{{count}} дня назад',
+ dayAgo_many: '{{count}} дней назад',
+ dayAgo_other: '{{count}} дня назад',
+ inAMoment: 'Сейчас',
+ inDay_one: 'Через {{count}} день',
+ inDay_few: 'Через {{count}} дня',
+ inDay_many: 'Через {{count}} дней',
+ inDay_other: 'Через {{count}} дня',
+ inMonth_one: 'Через {{count}} месяц',
+ inMonth_few: 'Через {{count}} месяца',
+ inMonth_many: 'Через {{count}} месяцев',
+ inMonth_other: 'Через {{count}} месяца',
+ inWeek_one: 'Через {{count}} неделю',
+ inWeek_few: 'Через {{count}} недели',
+ inWeek_many: 'Через {{count}} недель',
+ inWeek_other: 'Через {{count}} недели',
+ justNow: 'Только что',
+ monthAgo_one: '{{count}} месяц назад',
+ monthAgo_few: '{{count}} месяца назад',
+ monthAgo_many: '{{count}} месяцев назад',
+ monthAgo_other: '{{count}} месяца назад',
+ secondsAgoShort: '{{count}} с назад',
+ minutesAgoShort: '{{count}} мин назад',
+ hoursAgoShort: '{{count}} ч назад',
+ today: 'Сегодня',
+ tomorrow: 'Завтра',
+ weekAgo_one: '{{count}} неделю назад',
+ weekAgo_few: '{{count}} недели назад',
+ weekAgo_many: '{{count}} недель назад',
+ weekAgo_other: '{{count}} недели назад',
+ yesterday: 'Вчера',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Действия для {{title}}',
+ createDeck: 'Создать колоду',
+ createNote: 'Создать заметку',
+ deleteDeck: 'Удалить колоду',
+ editDeck: 'Изменить колоду',
+ newNote: 'Новая заметка',
+ openDeck: 'Открыть колоду {{title}}',
+ saveDeck: 'Не удалось сохранить колоду',
+ studyNow: 'Учиться сейчас',
+ },
+ descriptions: {
+ emptyDeck: 'Добавьте заметку, чтобы в этой колоде был материал для повторения.',
+ editorDefault: 'Колода для сфокусированного обучения.',
+ editorVisual: 'Выберите символ обложки для этой колоды.',
+ notesSearchPlaceholder: 'Искать заметки…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Это переместит "{{title}}" в Корзину. Вы сможете восстановить ее позже.',
+ deleteDeckFallbackDescription: 'Это переместит эту колоду в Корзину. Вы сможете восстановить ее позже.',
+ deleteDeckFallbackTitle: 'Удалить колоду?',
+ deleteDeckTitle: 'Удалить "{{title}}"?',
+ deleteNoteDescription: 'Это переместит "{{title}}" в Корзину. Вы сможете восстановить ее позже.',
+ deleteNoteFallbackTitle: 'Удалить заметку?',
+ deleteNoteTitle: 'Удалить "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Нет подходящих заметок',
+ noMatchingNotesDescription: 'Нет заметок по запросу "{{query}}".',
+ thisDeckIsEmpty: 'Эта колода пуста',
+ },
+ errors: {
+ couldNotCreateDeck: 'Не удалось создать колоду',
+ couldNotDeleteDeck: 'Не удалось удалить колоду',
+ couldNotDeleteNote: 'Не удалось удалить заметку',
+ couldNotLoadFolderPath: 'Не удалось загрузить путь к папке',
+ couldNotSaveDeck: 'Не удалось сохранить колоду',
+ deckCouldNotLoad: 'Не удалось загрузить колоду',
+ notesCouldNotLoad: 'Не удалось загрузить заметки',
+ notesMayBeOutOfDate: 'Заметки могут быть устаревшими',
+ },
+ fields: {
+ descriptionLabel: 'Описание колоды',
+ descriptionPlaceholder: 'Что эта колода поможет вам повторять?',
+ namePlaceholder: 'Название колоды',
+ untitledDeck: 'Колода без названия',
+ untitledDeckLower: 'колода без названия',
+ },
+ labels: {
+ createDeckTitle: 'Создать колоду',
+ deck: 'Колода',
+ deckNotesSearch: 'Поиск заметок в колоде',
+ deckOverview: 'Обзор колоды',
+ decks: 'Колоды',
+ due: 'Повторить',
+ dueToday: 'К повторению сегодня',
+ loadingDeck: 'Загрузка колоды',
+ mastery: 'Освоение',
+ notes: 'Заметки',
+ },
+ sort: {
+ ariaLabel: 'Сортировать колоды',
+ dueToday: 'К повторению сегодня',
+ title: 'Название',
+ updated: 'Обновлено',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Данные изменились. Обновите и попробуйте снова.',
+ forbidden: 'У вас нет разрешения на это действие.',
+ notFound: 'Мы не нашли этот элемент.',
+ offline: 'Не удается подключиться к сервису.',
+ timeout: 'Это заняло слишком много времени. Попробуйте снова.',
+ unauthorized: 'Войдите, чтобы продолжить.',
+ unavailable: 'Сервис временно недоступен.',
+ },
+ fallback: {
+ unexpected: 'Неожиданная ошибка',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Создать папку',
+ deleteFolder: 'Удалить папку',
+ editFolder: 'Изменить папку',
+ },
+ descriptions: {
+ editorDefault: 'Папка для связанных колод.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Это переместит "{{name}}" в Корзину. Вы сможете восстановить ее позже.',
+ deleteFolderFallbackDescription: 'Это переместит эту папку в Корзину. Вы сможете восстановить ее позже.',
+ deleteFolderFallbackTitle: 'Удалить папку?',
+ deleteFolderTitle: 'Удалить "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'В этой папке ничего не найдено',
+ noMatchesInFolderDescription: 'Нет папок, колод или заметок по запросу "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Не удалось создать папку',
+ couldNotDeleteFolder: 'Не удалось удалить папку',
+ couldNotLoadFolderPath: 'Не удалось загрузить путь к папке',
+ couldNotSaveFolder: 'Не удалось сохранить папку',
+ folderCouldNotLoad: 'Не удалось загрузить папку',
+ },
+ fields: {
+ descriptionLabel: 'Описание папки',
+ descriptionPlaceholder: 'Что относится к этой папке?',
+ namePlaceholder: 'Название папки',
+ untitledFolder: 'Папка без названия',
+ },
+ labels: {
+ createFolderTitle: 'Создать папку',
+ folder: 'Папка',
+ folders: 'Папки',
+ loadingFolder: 'Загрузка папки',
+ name: 'Название',
+ updated: 'Обновлено',
+ },
+ sort: {
+ ariaLabel: 'Сортировать папки',
+ name: 'Название',
+ updated: 'Обновлено',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Если локальные и синхронизированные данные разойдутся, элемент появится здесь.',
+ heading: 'Статус синхронизации',
+ title: 'Конфликты',
+ noConflicts: 'Конфликтов не найдено',
+ },
+ labels: {
+ menu: 'Меню',
+ },
+ sections: {
+ settings: {
+ description: 'Настройте среду и предпочтения',
+ title: 'Настройки',
+ },
+ trash: {
+ description: 'Восстановить или навсегда удалить удаленные элементы',
+ title: 'Корзина',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Закрыть редактор',
+ openActions: 'Открыть действия',
+ openWorkspaces: 'Открыть рабочие пространства',
+ },
+ items: {
+ home: 'Главная',
+ menu: 'Меню',
+ primary: 'Основное',
+ settings: 'Настройки',
+ spaces: 'Пространства',
+ trash: 'Корзина',
+ workspaces: 'Рабочие пространства',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Добавить cloze',
+ deleteNote: 'Удалить заметку',
+ editNote: 'Изменить заметку',
+ hideDerivedCardsNote: 'Скрыть заметку о производных карточках',
+ openNote: 'Открыть {{title}}',
+ saveNote: 'Сохранить заметку',
+ showDerivedCardsNote: 'Показать заметку о производных карточках',
+ },
+ descriptions: {
+ clozeFormat: 'Каждая скрытая часть станет карточкой для повторения после сохранения.',
+ clozeFormatPrefix: 'Оберните скрытый текст в',
+ derivedCardsHelper: 'Заметки — источник истины для производных карточек.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Это переместит "{{title}}" в Корзину. Вы сможете восстановить ее позже.',
+ deleteNoteFallbackDescription: 'Это переместит эту заметку в Корзину. Вы сможете восстановить ее позже.',
+ deleteNoteFallbackTitle: 'Удалить заметку?',
+ deleteNoteTitle: 'Удалить "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Не удалось создать заметку',
+ couldNotDeleteNote: 'Не удалось удалить заметку',
+ couldNotSaveNote: 'Не удалось сохранить заметку',
+ noteCouldNotLoad: 'Не удалось загрузить заметку',
+ },
+ fields: {
+ back: 'Оборот',
+ backPlaceholder: 'Введите оборот',
+ bodyPlaceholder: 'Напишите текст заметки с cloze-удалениями…',
+ front: 'Лицевая сторона',
+ frontPlaceholder: 'Введите лицевую сторону',
+ noteBody: 'Текст заметки',
+ title: 'Название',
+ titlePlaceholder: 'Добавьте название заметки',
+ untitledCloze: 'Cloze без названия',
+ untitledNote: 'Заметка без названия',
+ },
+ labels: {
+ backUppercase: 'ОБОРОТ',
+ basic: 'Базовая',
+ basicLower: 'базовая',
+ basicUppercase: 'БАЗОВАЯ',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Формат cloze',
+ clozeUppercase: 'CLOZE',
+ deck: 'Колода',
+ derivedCards: 'ПРОИЗВОДНЫЕ КАРТОЧКИ',
+ due: 'К повторению',
+ frontUppercase: 'ЛИЦЕВАЯ СТОРОНА',
+ inProgress: 'В процессе',
+ inProgressUppercase: 'В ПРОЦЕССЕ',
+ loadingNote: 'Загрузка заметки',
+ loadingNoteEditor: 'Загрузка редактора заметок',
+ markdownFormatting: 'Форматирование Markdown',
+ mastered: 'Освоено',
+ masteredUppercase: 'ОСВОЕНО',
+ newNote: 'Новая заметка',
+ noteBody: 'ТЕКСТ ЗАМЕТКИ',
+ noteContent: 'Содержимое заметки',
+ noteDetails: 'Детали заметки',
+ noteMetadata: 'Метаданные заметки',
+ noteType: 'Тип заметки',
+ notes: 'Заметки',
+ reviewed: 'Повторено',
+ studyProgress: 'Учебный прогресс',
+ studyProgressUppercase: 'УЧЕБНЫЙ ПРОГРЕСС',
+ titleUppercase: 'НАЗВАНИЕ',
+ updated: 'Обновлено',
+ },
+ sort: {
+ ariaLabel: 'Сортировать заметки',
+ title: 'Название',
+ updated: 'Обновлено',
+ },
+ toolbar: {
+ bold: 'Жирный',
+ italic: 'Курсив',
+ link: 'Ссылка',
+ list: 'Список',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Снова',
+ backToDeck: 'Назад к колоде',
+ continueReview: 'Продолжить повторение',
+ easy: 'Легко',
+ good: 'Хорошо',
+ hard: 'Трудно',
+ newNote: 'Новая заметка',
+ showAnswer: 'Показать ответ',
+ },
+ errors: {
+ couldNotGradeCard: 'Не удалось оценить карточку',
+ reviewCouldNotLoad: 'Не удалось загрузить повторение',
+ reviewCouldNotStart: 'Не удалось начать повторение',
+ summaryCouldNotLoad: 'Не удалось загрузить итог повторения',
+ summaryNotAvailable: 'Итог повторения недоступен',
+ summaryNotComplete: 'Это повторение еще не завершено.',
+ },
+ labels: {
+ cardsReviewed: 'Карточек повторено',
+ deck: 'Колода',
+ duration: 'Длительность',
+ loadingReview: 'Загрузка повторения',
+ loadingSummary: 'Загрузка итога',
+ progress: 'Прогресс повторения',
+ review: 'Повторение',
+ reviewComplete: 'Повторение завершено',
+ reviewed_one: 'Повторено {{count}}',
+ reviewed_few: 'Повторено {{count}}',
+ reviewed_many: 'Повторено {{count}}',
+ reviewed_other: 'Повторено {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} ч {{minutes}} мин',
+ durationMinutes: '{{minutes}} мин',
+ durationSeconds: '{{seconds}} с',
+ saved: 'Ваш прогресс сохранен в этой колоде.',
+ },
+ unavailable: {
+ description: 'Добавьте заметку, чтобы эта колода попала в очередь повторения.',
+ title: 'Нет карточек для повторения',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Очистить поиск',
+ },
+ empty: {
+ noMatchesInWorkspace: 'В этом пространстве ничего не найдено',
+ noMatchesInWorkspaceDescription: 'Нет папок, колод или заметок по запросу "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Не удалось выполнить поиск',
+ },
+ labels: {
+ results: 'Результаты поиска',
+ resultsFor: 'Результаты для "{{query}}"',
+ searchingContent: 'Поиск содержимого',
+ },
+ resultGroups: {
+ deck: 'Колоды',
+ folder: 'Папки',
+ note: 'Заметки',
+ },
+ resultKinds: {
+ deck: 'колода',
+ folder: 'папка',
+ note: 'заметка',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Сбросить все настройки',
+ resetSettings: 'Сбросить настройки',
+ resetToDefaults: 'Вернуть значения по умолчанию',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Вставьте корректный JSON с 21 числовым значением.',
+ fsrsErrorInvalidParams_one: 'Введите JSON-массив ровно с {{count}} конечным числом.',
+ fsrsErrorInvalidParams_few: 'Введите JSON-массив ровно с {{count}} конечными числами.',
+ fsrsErrorInvalidParams_many: 'Введите JSON-массив ровно с {{count}} конечными числами.',
+ fsrsErrorInvalidParams_other: 'Введите JSON-массив ровно с {{count}} конечными числами.',
+ fsrsHelper: 'Это экспертная настройка. Значения должны оставаться в порядке.',
+ fsrsJsonLabel: 'JSON параметров FSRS',
+ fsrsTitle: 'Изменить параметры FSRS',
+ fsrsDescription: 'Вставьте JSON-массив с 21 числом, чтобы переопределить веса scheduler.',
+ resetDescription: 'Это восстановит часовой пояс, лимиты учебы и настройки FSRS.',
+ resetDescriptionWithLanguage: 'Это восстановит язык, часовой пояс, лимиты учебы и настройки FSRS.',
+ resetTitle: 'Сбросить все настройки?',
+ timezoneDescription: 'Ищите город или идентификатор часового пояса.',
+ timezoneSearchLabel: 'Поиск часовых поясов',
+ timezoneSearchPlaceholder: 'Искать часовые пояса…',
+ timezoneTitle: 'Выберите часовой пояс',
+ },
+ errors: {
+ couldNotResetSettings: 'Не удалось сбросить настройки',
+ couldNotSaveSettings: 'Не удалось сохранить настройки',
+ settingsCouldNotLoad: 'Не удалось загрузить настройки',
+ settingsUnavailable: 'Настройки недоступны.',
+ },
+ labels: {
+ appearance: 'Оформление',
+ automatic: 'Автоматически',
+ fsrsParameters: 'Параметры FSRS',
+ general: 'Основные',
+ language: 'Язык',
+ loadingSettings: 'Загрузка настроек',
+ masteryHorizon: 'Горизонт освоения',
+ newCardOrder: 'Порядок новых карточек',
+ newCardsPerDay: 'Новых карточек в день',
+ reviewCardsPerDay: 'Карточек для повторения в день',
+ savingSettings: 'Сохранение настроек',
+ schedule: 'Расписание',
+ searchNoTimezones: 'Нет подходящих часовых поясов.',
+ settings: 'Настройки',
+ settingsReset: 'Настройки сброшены',
+ study: 'Учеба',
+ targetRecallProbability: 'Целевая вероятность вспоминания',
+ theme: 'Тема',
+ timezone: 'Часовой пояс',
+ },
+ options: {
+ languageEnUs: 'Английский (США)',
+ newCardsAfterReviews: 'После повторений',
+ newCardsBeforeReviews: 'Перед повторениями',
+ newCardsMixed: 'Смешанно',
+ themeDark: 'Темная',
+ themeLight: 'Светлая',
+ themeSystem: 'Системная',
+ timezoneSystem: 'Использовать системный часовой пояс',
+ },
+ rows: {
+ fsrsDescription: 'Веса экспертной модели',
+ languageDescription: 'Язык интерфейса',
+ masteryHorizonDescription: 'Сколько дней карточка должна оставаться вспоминаемой на целевой вероятности или выше, чтобы считаться освоенной',
+ newCardOrderDescription: 'Порядок новых карточек относительно повторений',
+ newCardsPerDayDescription: 'Максимум новых карточек в день',
+ reviewCardsPerDayDescription: 'Максимум карточек для повторения в день',
+ targetRecallProbabilityDescription: 'Минимальная вероятность вспоминания на следующем запланированном повторении',
+ timezoneDescription: 'Используйте автоматический часовой пояс или выберите город.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Удалить навсегда',
+ empty: 'Очистить',
+ emptyTrash: 'Очистить корзину',
+ restore: 'Восстановить',
+ restoringItem: 'Восстановление {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Это навсегда удалит "{{title}}". Отменить действие нельзя.',
+ deleteItemFallbackDescription: 'Это навсегда удалит этот элемент. Отменить действие нельзя.',
+ deleteItemFallbackTitle: 'Удалить элемент?',
+ deleteItemTitle: 'Удалить "{{title}}"?',
+ emptyTrashDescription: 'Это навсегда удалит все из Корзины. Отменить действие нельзя.',
+ emptyTrashTitle: 'Очистить корзину?',
+ },
+ empty: {
+ description: 'Удаленные элементы появятся здесь перед окончательным удалением.',
+ title: 'Корзина пуста',
+ },
+ errors: {
+ couldNotDeleteItem: 'Не удалось удалить элемент',
+ couldNotEmptyTrash: 'Не удалось очистить Корзину',
+ couldNotRestoreItem: 'Не удалось восстановить элемент',
+ trashCouldNotLoad: 'Не удалось загрузить Корзину',
+ trashMayBeOutOfDate: 'Корзина может быть устаревшей',
+ },
+ labels: {
+ deletedAge: 'Удалено {{value}}',
+ itemCount_one: '{{count}} элемент',
+ itemCount_few: '{{count}} элемента',
+ itemCount_many: '{{count}} элементов',
+ itemCount_other: '{{count}} элемента',
+ lastEmptied: 'Последняя очистка {{value}}',
+ loadingTrash: 'Загрузка Корзины',
+ originalLocation: 'Исходное расположение: {{location}}',
+ title: 'Корзина',
+ trashActions: 'Действия корзины для {{title}}',
+ },
+ kinds: {
+ deck: 'Колода',
+ folder: 'Папка',
+ note: 'Заметка',
+ workspace: 'Рабочее пространство',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Создать рабочее пространство',
+ deleteWorkspace: 'Удалить рабочее пространство',
+ editWorkspace: 'Изменить рабочее пространство',
+ newWorkspace: 'Новое рабочее пространство',
+ openWorkspace: 'Открыть {{title}}',
+ openingWorkspace: 'Открытие {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Учебный контекст.',
+ editorVisual: 'Выберите визуальный якорь для этого пространства.',
+ emptyList: 'Разделяйте колоды, заметки и очереди повторения по учебному контексту.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Это переместит "{{title}}" в Корзину. Вы сможете восстановить его позже.',
+ deleteWorkspaceFallbackDescription: 'Это переместит это рабочее пространство в Корзину. Вы сможете восстановить его позже.',
+ deleteWorkspaceFallbackTitle: 'Удалить рабочее пространство?',
+ deleteWorkspaceTitle: 'Удалить "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Начните с рабочего пространства',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Не удалось создать рабочее пространство',
+ couldNotDeleteWorkspace: 'Не удалось удалить рабочее пространство',
+ couldNotOpenWorkspace: 'Не удалось открыть рабочее пространство',
+ couldNotSaveWorkspace: 'Не удалось сохранить рабочее пространство',
+ workspaceCouldNotLoad: 'Не удалось загрузить рабочее пространство',
+ workspacesCouldNotLoad: 'Не удалось загрузить рабочие пространства',
+ },
+ fields: {
+ descriptionLabel: 'Описание рабочего пространства',
+ descriptionPlaceholder: 'Что относится к этому рабочему пространству?',
+ namePlaceholder: 'Название рабочего пространства',
+ untitledWorkspace: 'Рабочее пространство без названия',
+ },
+ labels: {
+ createWorkspaceTitle: 'Создать рабочее пространство',
+ loadingWorkspaces: 'Загрузка рабочих пространств',
+ workspace: 'Рабочее пространство',
+ workspaces: 'Рабочие пространства',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/sk.ts b/ui/src/core/i18n/resources/sk.ts
new file mode 100644
index 0000000..cb9e183
--- /dev/null
+++ b/ui/src/core/i18n/resources/sk.ts
@@ -0,0 +1,649 @@
+export const sk = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Skúste to znova. Ak sa to bude opakovať, znova otvorte Clear.',
+ title: 'Nepodarilo sa spustiť',
+ },
+ loadingTitle: 'Pripravuje sa váš študijný priestor',
+ },
+ common: {
+ actions: {
+ back: 'Späť',
+ cancel: 'Zrušiť',
+ checkAgain: 'Skontrolovať znova',
+ close: 'Zavrieť',
+ create: 'Vytvoriť',
+ delete: 'Odstrániť',
+ dismissError: 'Zavrieť chybu',
+ dismissStatus: 'Zavrieť stav',
+ edit: 'Upraviť',
+ itemActions: 'Akcie pre {{title}}',
+ reset: 'Resetovať',
+ review: 'Opakovať',
+ save: 'Uložiť',
+ saveChanges: 'Uložiť zmeny',
+ tryAgain: 'Skúsiť znova',
+ },
+ labels: {
+ active: 'Aktívne',
+ clear: 'Clear',
+ custom: 'Vlastné',
+ default: 'Predvolené',
+ loadingEditor: 'Načítava sa editor',
+ name: 'Názov',
+ completedTask: 'Dokončená úloha',
+ description: 'Popis',
+ incompleteTask: 'Nedokončená úloha',
+ percentageInput: 'Percento pre {{label}}',
+ visual: 'Vizuál',
+ },
+ status: {
+ actionFailed: 'Akcia zlyhala',
+ actionInProgress: 'Akcia prebieha',
+ },
+ sort: {
+ ascending: 'Vzost.',
+ column: 'Stĺpec',
+ descending: 'Zost.',
+ direction: 'Smer',
+ sort: 'Triediť',
+ },
+ search: {
+ label: 'Hľadať',
+ },
+ visualPicker: {
+ allLucideIcons: 'Všetky ikony Lucide',
+ browseIconsFor: 'Prehliadajte alebo hľadajte ikony pre {{label}}.',
+ chooseIcon: 'Vybrať ikonu',
+ iconPicker: 'Výber ikony pre {{label}}',
+ iconSearch: 'Hľadanie ikon pre {{label}}',
+ iconsCouldNotLoad: 'Ikony sa nepodarilo načítať.',
+ loadingIcons: 'Načítavajú sa ikony',
+ loadingMoreIcons: 'Načítavajú sa ďalšie ikony',
+ moreIcons: 'Ďalšie ikony',
+ noIconsMatch: 'Žiadne ikony nezodpovedajú "{{query}}".',
+ searchIconsPlaceholder: 'Hľadať ikony…',
+ selectedIcon: 'Vybraté {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Vytvoriť',
+ newDeck: 'Nový balíček',
+ newFolder: 'Nový priečinok',
+ },
+ descriptions: {
+ defaultWorkspace: 'Majte balíčky, priečinky a poznámky spolu.',
+ emptyWorkspace: 'Vytvorte balíček a potom pridajte poznámky na zostavenie frontu opakovania.',
+ emptyFolder: 'Vytvorte balíček a potom pridajte poznámky na zostavenie frontu opakovania.',
+ searchPlaceholder: 'Hľadať priečinky, balíčky a poznámky…',
+ },
+ empty: {
+ createFirstDeck: 'Vytvorte svoj prvý balíček',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Balíček sa nepodarilo odstrániť',
+ couldNotDeleteFolder: 'Priečinok sa nepodarilo odstrániť',
+ couldNotDeleteWorkspace: 'Pracovný priestor sa nepodarilo odstrániť',
+ dashboardCouldNotOpen: 'Prehľad sa nepodarilo otvoriť',
+ decksCouldNotLoad: 'Balíčky sa nepodarilo načítať',
+ decksMayBeOutOfDate: 'Balíčky môžu byť zastarané',
+ foldersCouldNotLoad: 'Priečinky sa nepodarilo načítať',
+ foldersMayBeOutOfDate: 'Priečinky môžu byť zastarané',
+ workspaceCouldNotLoad: 'Pracovný priestor sa nepodarilo načítať',
+ },
+ labels: {
+ dashboard: 'Prehľad',
+ loadingDashboard: 'Načítava sa prehľad',
+ newItem: 'Nová položka',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Dátum nie je dostupný',
+ },
+ age: {
+ dayAgo_one: 'pred {{count}} dňom',
+ dayAgo_few: 'pred {{count}} dňami',
+ dayAgo_many: 'pred {{count}} dňa',
+ dayAgo_other: 'pred {{count}} dňami',
+ hourAgo_one: 'pred {{count}} hodinou',
+ hourAgo_few: 'pred {{count}} hodinami',
+ hourAgo_many: 'pred {{count}} hodiny',
+ hourAgo_other: 'pred {{count}} hodinami',
+ justNow: 'práve teraz',
+ minuteAgo_one: 'pred {{count}} minútou',
+ minuteAgo_few: 'pred {{count}} minútami',
+ minuteAgo_many: 'pred {{count}} minúty',
+ minuteAgo_other: 'pred {{count}} minútami',
+ unavailable: 'dátum nie je dostupný',
+ weekAgo_one: 'pred {{count}} týždňom',
+ weekAgo_few: 'pred {{count}} týždňami',
+ weekAgo_many: 'pred {{count}} týždňa',
+ weekAgo_other: 'pred {{count}} týždňami',
+ },
+ labels: {
+ deleted: 'Odstránené {{value}}',
+ due: 'Termín: {{value}}',
+ reviewed: 'Opakované: {{value}}',
+ updated: 'Aktualizované {{value}}',
+ updatedUppercase: 'AKTUALIZOVANÉ {{value}}',
+ },
+ relative: {
+ dayAgo_one: 'pred {{count}} dňom',
+ dayAgo_few: 'pred {{count}} dňami',
+ dayAgo_many: 'pred {{count}} dňa',
+ dayAgo_other: 'pred {{count}} dňami',
+ inAMoment: 'O chvíľu',
+ inDay_one: 'O {{count}} deň',
+ inDay_few: 'O {{count}} dni',
+ inDay_many: 'O {{count}} dňa',
+ inDay_other: 'O {{count}} dní',
+ inMonth_one: 'O {{count}} mesiac',
+ inMonth_few: 'O {{count}} mesiace',
+ inMonth_many: 'O {{count}} mesiaca',
+ inMonth_other: 'O {{count}} mesiacov',
+ inWeek_one: 'O {{count}} týždeň',
+ inWeek_few: 'O {{count}} týždne',
+ inWeek_many: 'O {{count}} týždňa',
+ inWeek_other: 'O {{count}} týždňov',
+ justNow: 'Práve teraz',
+ monthAgo_one: 'pred {{count}} mesiacom',
+ monthAgo_few: 'pred {{count}} mesiacmi',
+ monthAgo_many: 'pred {{count}} mesiaca',
+ monthAgo_other: 'pred {{count}} mesiacmi',
+ secondsAgoShort: 'pred {{count}} s',
+ minutesAgoShort: 'pred {{count}} min',
+ hoursAgoShort: 'pred {{count}} h',
+ today: 'Dnes',
+ tomorrow: 'Zajtra',
+ weekAgo_one: 'pred {{count}} týždňom',
+ weekAgo_few: 'pred {{count}} týždňami',
+ weekAgo_many: 'pred {{count}} týždňa',
+ weekAgo_other: 'pred {{count}} týždňami',
+ yesterday: 'Včera',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Akcie pre {{title}}',
+ createDeck: 'Vytvoriť balíček',
+ createNote: 'Vytvoriť poznámku',
+ deleteDeck: 'Odstrániť balíček',
+ editDeck: 'Upraviť balíček',
+ newNote: 'Nová poznámka',
+ openDeck: 'Otvoriť balíček {{title}}',
+ saveDeck: 'Balíček sa nepodarilo uložiť',
+ studyNow: 'Študovať teraz',
+ },
+ descriptions: {
+ emptyDeck: 'Pridajte poznámku, aby mal tento balíček materiál na opakovanie.',
+ editorDefault: 'Sústredený študijný balíček.',
+ editorVisual: 'Vyberte symbol obalu pre tento balíček.',
+ notesSearchPlaceholder: 'Hľadať poznámky…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Toto presunie "{{title}}" do Koša. Neskôr ho môžete obnoviť.',
+ deleteDeckFallbackDescription: 'Toto presunie tento balíček do Koša. Neskôr ho môžete obnoviť.',
+ deleteDeckFallbackTitle: 'Odstrániť balíček?',
+ deleteDeckTitle: 'Odstrániť "{{title}}"?',
+ deleteNoteDescription: 'Toto presunie "{{title}}" do Koša. Neskôr ju môžete obnoviť.',
+ deleteNoteFallbackTitle: 'Odstrániť poznámku?',
+ deleteNoteTitle: 'Odstrániť "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Žiadne zodpovedajúce poznámky',
+ noMatchingNotesDescription: 'Žiadne poznámky nezodpovedali "{{query}}".',
+ thisDeckIsEmpty: 'Tento balíček je prázdny',
+ },
+ errors: {
+ couldNotCreateDeck: 'Balíček sa nepodarilo vytvoriť',
+ couldNotDeleteDeck: 'Balíček sa nepodarilo odstrániť',
+ couldNotDeleteNote: 'Poznámku sa nepodarilo odstrániť',
+ couldNotLoadFolderPath: 'Cestu priečinka sa nepodarilo načítať',
+ couldNotSaveDeck: 'Balíček sa nepodarilo uložiť',
+ deckCouldNotLoad: 'Balíček sa nepodarilo načítať',
+ notesCouldNotLoad: 'Poznámky sa nepodarilo načítať',
+ notesMayBeOutOfDate: 'Poznámky môžu byť zastarané',
+ },
+ fields: {
+ descriptionLabel: 'Popis balíčka',
+ descriptionPlaceholder: 'Čo vám tento balíček pomôže opakovať?',
+ namePlaceholder: 'Názov balíčka',
+ untitledDeck: 'Balíček bez názvu',
+ untitledDeckLower: 'balíček bez názvu',
+ },
+ labels: {
+ createDeckTitle: 'Vytvoriť balíček',
+ deck: 'Balíček',
+ deckNotesSearch: 'Hľadanie poznámok v balíčku',
+ deckOverview: 'Prehľad balíčka',
+ decks: 'Balíčky',
+ due: 'Termín',
+ dueToday: 'Termín dnes',
+ loadingDeck: 'Načítava sa balíček',
+ mastery: 'Zvládnutie',
+ notes: 'Poznámky',
+ },
+ sort: {
+ ariaLabel: 'Triediť balíčky',
+ dueToday: 'Termín dnes',
+ title: 'Názov',
+ updated: 'Aktualizované',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Údaje sa zmenili. Obnovte ich a skúste to znova.',
+ forbidden: 'Na túto akciu nemáte povolenie.',
+ notFound: 'Túto položku sa nám nepodarilo nájsť.',
+ offline: 'Služba je nedostupná.',
+ timeout: 'Trvalo to príliš dlho. Skúste to znova.',
+ unauthorized: 'Ak chcete pokračovať, prihláste sa.',
+ unavailable: 'Služba je dočasne nedostupná.',
+ },
+ fallback: {
+ unexpected: 'Neočakávaná chyba',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Vytvoriť priečinok',
+ deleteFolder: 'Odstrániť priečinok',
+ editFolder: 'Upraviť priečinok',
+ },
+ descriptions: {
+ editorDefault: 'Priečinok pre súvisiace balíčky.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Toto presunie "{{name}}" do Koša. Neskôr ho môžete obnoviť.',
+ deleteFolderFallbackDescription: 'Toto presunie tento priečinok do Koša. Neskôr ho môžete obnoviť.',
+ deleteFolderFallbackTitle: 'Odstrániť priečinok?',
+ deleteFolderTitle: 'Odstrániť "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'V tomto priečinku nie sú žiadne zhody',
+ noMatchesInFolderDescription: 'Žiadne priečinky, balíčky ani poznámky nezodpovedali "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Priečinok sa nepodarilo vytvoriť',
+ couldNotDeleteFolder: 'Priečinok sa nepodarilo odstrániť',
+ couldNotLoadFolderPath: 'Cestu priečinka sa nepodarilo načítať',
+ couldNotSaveFolder: 'Priečinok sa nepodarilo uložiť',
+ folderCouldNotLoad: 'Priečinok sa nepodarilo načítať',
+ },
+ fields: {
+ descriptionLabel: 'Popis priečinka',
+ descriptionPlaceholder: 'Čo patrí do tohto priečinka?',
+ namePlaceholder: 'Názov priečinka',
+ untitledFolder: 'Priečinok bez názvu',
+ },
+ labels: {
+ createFolderTitle: 'Vytvoriť priečinok',
+ folder: 'Priečinok',
+ folders: 'Priečinky',
+ loadingFolder: 'Načítava sa priečinok',
+ name: 'Názov',
+ updated: 'Aktualizované',
+ },
+ sort: {
+ ariaLabel: 'Triediť priečinky',
+ name: 'Názov',
+ updated: 'Aktualizované',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Ak sa lokálne a synchronizované údaje niekedy nezhodnú, položka sa zobrazí tu.',
+ heading: 'Stav synchronizácie',
+ title: 'Konflikty',
+ noConflicts: 'Nenašli sa žiadne konflikty',
+ },
+ labels: {
+ menu: 'Menu',
+ },
+ sections: {
+ settings: {
+ description: 'Prispôsobte si prostredie a predvoľby',
+ title: 'Nastavenia',
+ },
+ trash: {
+ description: 'Obnovte alebo natrvalo odstráňte odstránené položky',
+ title: 'Kôš',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Zavrieť editor',
+ openActions: 'Otvoriť akcie',
+ openWorkspaces: 'Otvoriť pracovné priestory',
+ },
+ items: {
+ home: 'Domov',
+ menu: 'Menu',
+ primary: 'Primárne',
+ settings: 'Nastavenia',
+ spaces: 'Priestory',
+ trash: 'Kôš',
+ workspaces: 'Pracovné priestory',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Pridať cloze',
+ deleteNote: 'Odstrániť poznámku',
+ editNote: 'Upraviť poznámku',
+ hideDerivedCardsNote: 'Skryť poznámku o odvodených kartách',
+ openNote: 'Otvoriť {{title}}',
+ saveNote: 'Uložiť poznámku',
+ showDerivedCardsNote: 'Zobraziť poznámku o odvodených kartách',
+ },
+ descriptions: {
+ clozeFormat: 'Každá skrytá časť sa po uložení zmení na kartu na opakovanie.',
+ clozeFormatPrefix: 'Skrytý text obaľte pomocou',
+ derivedCardsHelper: 'Poznámky sú zdrojom pravdy pre odvodené karty.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Toto presunie "{{title}}" do Koša. Neskôr ju môžete obnoviť.',
+ deleteNoteFallbackDescription: 'Toto presunie túto poznámku do Koša. Neskôr ju môžete obnoviť.',
+ deleteNoteFallbackTitle: 'Odstrániť poznámku?',
+ deleteNoteTitle: 'Odstrániť "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Poznámku sa nepodarilo vytvoriť',
+ couldNotDeleteNote: 'Poznámku sa nepodarilo odstrániť',
+ couldNotSaveNote: 'Poznámku sa nepodarilo uložiť',
+ noteCouldNotLoad: 'Poznámku sa nepodarilo načítať',
+ },
+ fields: {
+ back: 'Zadná strana',
+ backPlaceholder: 'Zadajte zadnú stranu',
+ bodyPlaceholder: 'Napíšte telo poznámky s cloze vynechávkami…',
+ front: 'Predná strana',
+ frontPlaceholder: 'Zadajte prednú stranu',
+ noteBody: 'Telo poznámky',
+ title: 'Názov',
+ titlePlaceholder: 'Pridajte názov poznámky',
+ untitledCloze: 'Cloze bez názvu',
+ untitledNote: 'Poznámka bez názvu',
+ },
+ labels: {
+ backUppercase: 'ZADNÁ STRANA',
+ basic: 'Základná',
+ basicLower: 'základná',
+ basicUppercase: 'ZÁKLADNÁ',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Formát cloze',
+ clozeUppercase: 'CLOZE',
+ deck: 'Balíček',
+ derivedCards: 'ODVODENÉ KARTY',
+ due: 'Termín',
+ frontUppercase: 'PREDNÁ STRANA',
+ inProgress: 'Prebieha',
+ inProgressUppercase: 'PREBIEHA',
+ loadingNote: 'Načítava sa poznámka',
+ loadingNoteEditor: 'Načítava sa editor poznámok',
+ markdownFormatting: 'Formátovanie Markdown',
+ mastered: 'Zvládnuté',
+ masteredUppercase: 'ZVLÁDNUTÉ',
+ newNote: 'Nová poznámka',
+ noteBody: 'TELO POZNÁMKY',
+ noteContent: 'Obsah poznámky',
+ noteDetails: 'Podrobnosti poznámky',
+ noteMetadata: 'Metadáta poznámky',
+ noteType: 'Typ poznámky',
+ notes: 'Poznámky',
+ reviewed: 'Opakované',
+ studyProgress: 'Študijný pokrok',
+ studyProgressUppercase: 'ŠTUDIJNÝ POKROK',
+ titleUppercase: 'NÁZOV',
+ updated: 'Aktualizované',
+ },
+ sort: {
+ ariaLabel: 'Triediť poznámky',
+ title: 'Názov',
+ updated: 'Aktualizované',
+ },
+ toolbar: {
+ bold: 'Tučné',
+ italic: 'Kurzíva',
+ link: 'Odkaz',
+ list: 'Zoznam',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Znova',
+ backToDeck: 'Späť na balíček',
+ continueReview: 'Pokračovať v opakovaní',
+ easy: 'Ľahké',
+ good: 'Dobré',
+ hard: 'Ťažké',
+ newNote: 'Nová poznámka',
+ showAnswer: 'Zobraziť odpoveď',
+ },
+ errors: {
+ couldNotGradeCard: 'Kartu sa nepodarilo ohodnotiť',
+ reviewCouldNotLoad: 'Opakovanie sa nepodarilo načítať',
+ reviewCouldNotStart: 'Opakovanie sa nepodarilo spustiť',
+ summaryCouldNotLoad: 'Súhrn opakovania sa nepodarilo načítať',
+ summaryNotAvailable: 'Súhrn opakovania nie je dostupný',
+ summaryNotComplete: 'Toto opakovanie ešte nie je dokončené.',
+ },
+ labels: {
+ cardsReviewed: 'Opakované karty',
+ deck: 'Balíček',
+ duration: 'Trvanie',
+ loadingReview: 'Načítava sa opakovanie',
+ loadingSummary: 'Načítava sa súhrn',
+ progress: 'Pokrok opakovania',
+ review: 'Opakovanie',
+ reviewComplete: 'Opakovanie dokončené',
+ reviewed_one: 'Opakovaná {{count}}',
+ reviewed_few: 'Opakované {{count}}',
+ reviewed_many: 'Opakované {{count}}',
+ reviewed_other: 'Opakované {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} h {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'Váš pokrok bol uložený do tohto balíčka.',
+ },
+ unavailable: {
+ description: 'Pridajte poznámku, aby sa tento balíček mohol dostať do frontu opakovania.',
+ title: 'Žiadne karty na opakovanie',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Vymazať hľadanie',
+ },
+ empty: {
+ noMatchesInWorkspace: 'V tomto pracovnom priestore nie sú žiadne zhody',
+ noMatchesInWorkspaceDescription: 'Žiadne priečinky, balíčky ani poznámky nezodpovedali "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Hľadanie sa nepodarilo dokončiť',
+ },
+ labels: {
+ results: 'Výsledky hľadania',
+ resultsFor: 'Výsledky pre "{{query}}"',
+ searchingContent: 'Hľadá sa obsah',
+ },
+ resultGroups: {
+ deck: 'Balíčky',
+ folder: 'Priečinky',
+ note: 'Poznámky',
+ },
+ resultKinds: {
+ deck: 'balíček',
+ folder: 'priečinok',
+ note: 'poznámka',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Resetovať všetky nastavenia',
+ resetSettings: 'Resetovať nastavenia',
+ resetToDefaults: 'Obnoviť predvolené',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Vložte platný JSON s 21 číselnými hodnotami.',
+ fsrsErrorInvalidParams_one: 'Zadajte pole JSON s presne {{count}} konečným číslom.',
+ fsrsErrorInvalidParams_few: 'Zadajte pole JSON s presne {{count}} konečnými číslami.',
+ fsrsErrorInvalidParams_many: 'Zadajte pole JSON s presne {{count}} konečného čísla.',
+ fsrsErrorInvalidParams_other: 'Zadajte pole JSON s presne {{count}} konečnými číslami.',
+ fsrsHelper: 'Toto je expertné prepísanie. Hodnoty musia zostať v poradí.',
+ fsrsJsonLabel: 'JSON parametrov FSRS',
+ fsrsTitle: 'Upraviť parametre FSRS',
+ fsrsDescription: 'Vložte pole JSON s 21 číslami na prepísanie váh plánovača.',
+ resetDescription: 'Toto obnoví časové pásmo, študijné limity a nastavenia FSRS.',
+ resetDescriptionWithLanguage: 'Toto obnoví jazyk, časové pásmo, študijné limity a nastavenia FSRS.',
+ resetTitle: 'Resetovať všetky nastavenia?',
+ timezoneDescription: 'Hľadajte mesto alebo identifikátor časového pásma.',
+ timezoneSearchLabel: 'Hľadať časové pásma',
+ timezoneSearchPlaceholder: 'Hľadať časové pásma…',
+ timezoneTitle: 'Vybrať časové pásmo',
+ },
+ errors: {
+ couldNotResetSettings: 'Nastavenia sa nepodarilo resetovať',
+ couldNotSaveSettings: 'Nastavenia sa nepodarilo uložiť',
+ settingsCouldNotLoad: 'Nastavenia sa nepodarilo načítať',
+ settingsUnavailable: 'Nastavenia nie sú dostupné.',
+ },
+ labels: {
+ appearance: 'Vzhľad',
+ automatic: 'Automaticky',
+ fsrsParameters: 'Parametre FSRS',
+ general: 'Všeobecné',
+ language: 'Jazyk',
+ loadingSettings: 'Načítavajú sa nastavenia',
+ masteryHorizon: 'Horizont zvládnutia',
+ newCardOrder: 'Poradie nových kariet',
+ newCardsPerDay: 'Nové karty za deň',
+ reviewCardsPerDay: 'Karty na opakovanie za deň',
+ savingSettings: 'Ukladajú sa nastavenia',
+ schedule: 'Plán',
+ searchNoTimezones: 'Žiadne zodpovedajúce časové pásma.',
+ settings: 'Nastavenia',
+ settingsReset: 'Nastavenia resetované',
+ study: 'Štúdium',
+ targetRecallProbability: 'Cieľová pravdepodobnosť vybavenia',
+ theme: 'Motív',
+ timezone: 'Časové pásmo',
+ },
+ options: {
+ languageEnUs: 'Angličtina (USA)',
+ newCardsAfterReviews: 'Po opakovaniach',
+ newCardsBeforeReviews: 'Pred opakovaniami',
+ newCardsMixed: 'Zmiešané',
+ themeDark: 'Tmavý',
+ themeLight: 'Svetlý',
+ themeSystem: 'Systém',
+ timezoneSystem: 'Použiť systémové časové pásmo',
+ },
+ rows: {
+ fsrsDescription: 'Váhy expertného modelu',
+ languageDescription: 'Jazyk rozhrania',
+ masteryHorizonDescription: 'Počet dní, počas ktorých musí karta zostať vybaviteľná na cieľovej pravdepodobnosti alebo nad ňou, aby sa počítala ako zvládnutá',
+ newCardOrderDescription: 'Poradie nových kariet vzhľadom na opakovania',
+ newCardsPerDayDescription: 'Maximálny počet nových kariet za deň',
+ reviewCardsPerDayDescription: 'Maximálny počet kariet na opakovanie za deň',
+ targetRecallProbabilityDescription: 'Minimálna pravdepodobnosť vybavenia pri najbližšom naplánovanom opakovaní',
+ timezoneDescription: 'Použiť automatické časové pásmo alebo vybrať mesto.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Odstrániť natrvalo',
+ empty: 'Vyprázdniť',
+ emptyTrash: 'Vyprázdniť kôš',
+ restore: 'Obnoviť',
+ restoringItem: 'Obnovuje sa {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Toto natrvalo odstráni "{{title}}". Nedá sa to vrátiť späť.',
+ deleteItemFallbackDescription: 'Toto natrvalo odstráni túto položku. Nedá sa to vrátiť späť.',
+ deleteItemFallbackTitle: 'Odstrániť položku?',
+ deleteItemTitle: 'Odstrániť "{{title}}"?',
+ emptyTrashDescription: 'Toto natrvalo odstráni všetko v Koši. Nedá sa to vrátiť späť.',
+ emptyTrashTitle: 'Vyprázdniť kôš?',
+ },
+ empty: {
+ description: 'Položky, ktoré odstránite, sa tu zobrazia pred trvalým odstránením.',
+ title: 'Kôš je prázdny',
+ },
+ errors: {
+ couldNotDeleteItem: 'Položku sa nepodarilo odstrániť',
+ couldNotEmptyTrash: 'Kôš sa nepodarilo vyprázdniť',
+ couldNotRestoreItem: 'Položku sa nepodarilo obnoviť',
+ trashCouldNotLoad: 'Kôš sa nepodarilo načítať',
+ trashMayBeOutOfDate: 'Kôš môže byť zastaraný',
+ },
+ labels: {
+ deletedAge: 'Odstránené {{value}}',
+ itemCount_one: '{{count}} položka',
+ itemCount_few: '{{count}} položky',
+ itemCount_many: '{{count}} položky',
+ itemCount_other: '{{count}} položiek',
+ lastEmptied: 'Naposledy vyprázdnené {{value}}',
+ loadingTrash: 'Načítava sa kôš',
+ originalLocation: 'Pôvodné umiestnenie: {{location}}',
+ title: 'Kôš',
+ trashActions: 'Akcie Koša pre {{title}}',
+ },
+ kinds: {
+ deck: 'Balíček',
+ folder: 'Priečinok',
+ note: 'Poznámka',
+ workspace: 'Pracovný priestor',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Vytvoriť pracovný priestor',
+ deleteWorkspace: 'Odstrániť pracovný priestor',
+ editWorkspace: 'Upraviť pracovný priestor',
+ newWorkspace: 'Nový pracovný priestor',
+ openWorkspace: 'Otvoriť {{title}}',
+ openingWorkspace: 'Otvára sa {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Študijný kontext.',
+ editorVisual: 'Vyberte vizuálnu kotvu pre tento pracovný priestor.',
+ emptyList: 'Oddeľte balíčky, poznámky a fronty opakovania podľa študijného kontextu.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Toto presunie "{{title}}" do Koša. Neskôr ho môžete obnoviť.',
+ deleteWorkspaceFallbackDescription: 'Toto presunie tento pracovný priestor do Koša. Neskôr ho môžete obnoviť.',
+ deleteWorkspaceFallbackTitle: 'Odstrániť pracovný priestor?',
+ deleteWorkspaceTitle: 'Odstrániť "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Začnite pracovným priestorom',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Pracovný priestor sa nepodarilo vytvoriť',
+ couldNotDeleteWorkspace: 'Pracovný priestor sa nepodarilo odstrániť',
+ couldNotOpenWorkspace: 'Pracovný priestor sa nepodarilo otvoriť',
+ couldNotSaveWorkspace: 'Pracovný priestor sa nepodarilo uložiť',
+ workspaceCouldNotLoad: 'Pracovný priestor sa nepodarilo načítať',
+ workspacesCouldNotLoad: 'Pracovné priestory sa nepodarilo načítať',
+ },
+ fields: {
+ descriptionLabel: 'Popis pracovného priestoru',
+ descriptionPlaceholder: 'Čo patrí do tohto pracovného priestoru?',
+ namePlaceholder: 'Názov pracovného priestoru',
+ untitledWorkspace: 'Pracovný priestor bez názvu',
+ },
+ labels: {
+ createWorkspaceTitle: 'Vytvoriť pracovný priestor',
+ loadingWorkspaces: 'Načítavajú sa pracovné priestory',
+ workspace: 'Pracovný priestor',
+ workspaces: 'Pracovné priestory',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/sl.ts b/ui/src/core/i18n/resources/sl.ts
new file mode 100644
index 0000000..9ed9767
--- /dev/null
+++ b/ui/src/core/i18n/resources/sl.ts
@@ -0,0 +1,649 @@
+export const sl = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Poskusite znova. Če se to ponavlja, znova odprite Clear.',
+ title: 'Zagon ni uspel',
+ },
+ loadingTitle: 'Pripravljamo vaš učni prostor',
+ },
+ common: {
+ actions: {
+ back: 'Nazaj',
+ cancel: 'Prekliči',
+ checkAgain: 'Preveri znova',
+ close: 'Zapri',
+ create: 'Ustvari',
+ delete: 'Izbriši',
+ dismissError: 'Zapri napako',
+ dismissStatus: 'Zapri stanje',
+ edit: 'Uredi',
+ itemActions: 'Dejanja za {{title}}',
+ reset: 'Ponastavi',
+ review: 'Ponavljanje',
+ save: 'Shrani',
+ saveChanges: 'Shrani spremembe',
+ tryAgain: 'Poskusi znova',
+ },
+ labels: {
+ active: 'Aktivno',
+ clear: 'Clear',
+ custom: 'Po meri',
+ default: 'Privzeto',
+ loadingEditor: 'Nalaganje urejevalnika',
+ name: 'Ime',
+ completedTask: 'Dokončano opravilo',
+ description: 'Opis',
+ incompleteTask: 'Nedokončano opravilo',
+ percentageInput: 'Odstotek za {{label}}',
+ visual: 'Vizualno',
+ },
+ status: {
+ actionFailed: 'Dejanje ni uspelo',
+ actionInProgress: 'Dejanje poteka',
+ },
+ sort: {
+ ascending: 'Narašč.',
+ column: 'Stolpec',
+ descending: 'Padaj.',
+ direction: 'Smer',
+ sort: 'Razvrsti',
+ },
+ search: {
+ label: 'Iskanje',
+ },
+ visualPicker: {
+ allLucideIcons: 'Vse ikone Lucide',
+ browseIconsFor: 'Brskajte ali iščite ikone za {{label}}.',
+ chooseIcon: 'Izberi ikono',
+ iconPicker: 'Izbirnik ikon za {{label}}',
+ iconSearch: 'Iskanje ikon za {{label}}',
+ iconsCouldNotLoad: 'Ikon ni bilo mogoče naložiti.',
+ loadingIcons: 'Nalaganje ikon',
+ loadingMoreIcons: 'Nalaganje dodatnih ikon',
+ moreIcons: 'Več ikon',
+ noIconsMatch: 'Nobena ikona se ne ujema z "{{query}}".',
+ searchIconsPlaceholder: 'Išči ikone…',
+ selectedIcon: 'Izbrano {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Ustvari',
+ newDeck: 'Nov komplet',
+ newFolder: 'Nova mapa',
+ },
+ descriptions: {
+ defaultWorkspace: 'Komplete, mape in zapiske imejte skupaj.',
+ emptyWorkspace: 'Ustvarite komplet in nato dodajte zapiske, da sestavite čakalno vrsto za ponavljanje.',
+ emptyFolder: 'Ustvarite komplet in nato dodajte zapiske, da sestavite čakalno vrsto za ponavljanje.',
+ searchPlaceholder: 'Išči mape, komplete in zapiske…',
+ },
+ empty: {
+ createFirstDeck: 'Ustvarite svoj prvi komplet',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Kompleta ni bilo mogoče izbrisati',
+ couldNotDeleteFolder: 'Mape ni bilo mogoče izbrisati',
+ couldNotDeleteWorkspace: 'Delovnega prostora ni bilo mogoče izbrisati',
+ dashboardCouldNotOpen: 'Nadzorne plošče ni bilo mogoče odpreti',
+ decksCouldNotLoad: 'Kompletov ni bilo mogoče naložiti',
+ decksMayBeOutOfDate: 'Kompleti so morda zastareli',
+ foldersCouldNotLoad: 'Map ni bilo mogoče naložiti',
+ foldersMayBeOutOfDate: 'Mape so morda zastarele',
+ workspaceCouldNotLoad: 'Delovnega prostora ni bilo mogoče naložiti',
+ },
+ labels: {
+ dashboard: 'Nadzorna plošča',
+ loadingDashboard: 'Nalaganje nadzorne plošče',
+ newItem: 'Nov element',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Datum ni na voljo',
+ },
+ age: {
+ dayAgo_one: 'pred {{count}} dnem',
+ dayAgo_two: 'pred {{count}} dnevoma',
+ dayAgo_few: 'pred {{count}} dnevi',
+ dayAgo_other: 'pred {{count}} dnevi',
+ hourAgo_one: 'pred {{count}} uro',
+ hourAgo_two: 'pred {{count}} urama',
+ hourAgo_few: 'pred {{count}} urami',
+ hourAgo_other: 'pred {{count}} urami',
+ justNow: 'pravkar',
+ minuteAgo_one: 'pred {{count}} minuto',
+ minuteAgo_two: 'pred {{count}} minutama',
+ minuteAgo_few: 'pred {{count}} minutami',
+ minuteAgo_other: 'pred {{count}} minutami',
+ unavailable: 'datum ni na voljo',
+ weekAgo_one: 'pred {{count}} tednom',
+ weekAgo_two: 'pred {{count}} tednoma',
+ weekAgo_few: 'pred {{count}} tedni',
+ weekAgo_other: 'pred {{count}} tedni',
+ },
+ labels: {
+ deleted: 'Izbrisano {{value}}',
+ due: 'Rok: {{value}}',
+ reviewed: 'Ponovljeno: {{value}}',
+ updated: 'Posodobljeno {{value}}',
+ updatedUppercase: 'POSODOBLJENO {{value}}',
+ },
+ relative: {
+ dayAgo_one: 'pred {{count}} dnem',
+ dayAgo_two: 'pred {{count}} dnevoma',
+ dayAgo_few: 'pred {{count}} dnevi',
+ dayAgo_other: 'pred {{count}} dnevi',
+ inAMoment: 'Čez trenutek',
+ inDay_one: 'Čez {{count}} dan',
+ inDay_two: 'Čez {{count}} dneva',
+ inDay_few: 'Čez {{count}} dni',
+ inDay_other: 'Čez {{count}} dni',
+ inMonth_one: 'Čez {{count}} mesec',
+ inMonth_two: 'Čez {{count}} meseca',
+ inMonth_few: 'Čez {{count}} mesece',
+ inMonth_other: 'Čez {{count}} mesecev',
+ inWeek_one: 'Čez {{count}} teden',
+ inWeek_two: 'Čez {{count}} tedna',
+ inWeek_few: 'Čez {{count}} tedne',
+ inWeek_other: 'Čez {{count}} tednov',
+ justNow: 'Pravkar',
+ monthAgo_one: 'pred {{count}} mesecem',
+ monthAgo_two: 'pred {{count}} mesecema',
+ monthAgo_few: 'pred {{count}} meseci',
+ monthAgo_other: 'pred {{count}} meseci',
+ secondsAgoShort: 'pred {{count}} s',
+ minutesAgoShort: 'pred {{count}} min',
+ hoursAgoShort: 'pred {{count}} h',
+ today: 'Danes',
+ tomorrow: 'Jutri',
+ weekAgo_one: 'pred {{count}} tednom',
+ weekAgo_two: 'pred {{count}} tednoma',
+ weekAgo_few: 'pred {{count}} tedni',
+ weekAgo_other: 'pred {{count}} tedni',
+ yesterday: 'Včeraj',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Dejanja za {{title}}',
+ createDeck: 'Ustvari komplet',
+ createNote: 'Ustvari zapisek',
+ deleteDeck: 'Izbriši komplet',
+ editDeck: 'Uredi komplet',
+ newNote: 'Nov zapisek',
+ openDeck: 'Odpri komplet {{title}}',
+ saveDeck: 'Kompleta ni bilo mogoče shraniti',
+ studyNow: 'Uči se zdaj',
+ },
+ descriptions: {
+ emptyDeck: 'Dodajte zapisek, da bo imel ta komplet gradivo za ponavljanje.',
+ editorDefault: 'Osredotočen učni komplet.',
+ editorVisual: 'Izberite simbol naslovnice za ta komplet.',
+ notesSearchPlaceholder: 'Išči zapiske…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'To premakne "{{title}}" v Koš. Pozneje ga lahko obnovite.',
+ deleteDeckFallbackDescription: 'To premakne ta komplet v Koš. Pozneje ga lahko obnovite.',
+ deleteDeckFallbackTitle: 'Izbrisati komplet?',
+ deleteDeckTitle: 'Izbrisati "{{title}}"?',
+ deleteNoteDescription: 'To premakne "{{title}}" v Koš. Pozneje ga lahko obnovite.',
+ deleteNoteFallbackTitle: 'Izbrisati zapisek?',
+ deleteNoteTitle: 'Izbrisati "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Ni ujemajočih se zapiskov',
+ noMatchingNotesDescription: 'Noben zapisek se ne ujema z "{{query}}".',
+ thisDeckIsEmpty: 'Ta komplet je prazen',
+ },
+ errors: {
+ couldNotCreateDeck: 'Kompleta ni bilo mogoče ustvariti',
+ couldNotDeleteDeck: 'Kompleta ni bilo mogoče izbrisati',
+ couldNotDeleteNote: 'Zapiska ni bilo mogoče izbrisati',
+ couldNotLoadFolderPath: 'Poti mape ni bilo mogoče naložiti',
+ couldNotSaveDeck: 'Kompleta ni bilo mogoče shraniti',
+ deckCouldNotLoad: 'Kompleta ni bilo mogoče naložiti',
+ notesCouldNotLoad: 'Zapiskov ni bilo mogoče naložiti',
+ notesMayBeOutOfDate: 'Zapiski so morda zastareli',
+ },
+ fields: {
+ descriptionLabel: 'Opis kompleta',
+ descriptionPlaceholder: 'Kaj vam bo ta komplet pomagal ponavljati?',
+ namePlaceholder: 'Ime kompleta',
+ untitledDeck: 'Komplet brez naslova',
+ untitledDeckLower: 'komplet brez naslova',
+ },
+ labels: {
+ createDeckTitle: 'Ustvari komplet',
+ deck: 'Komplet',
+ deckNotesSearch: 'Iskanje zapiskov v kompletu',
+ deckOverview: 'Pregled kompleta',
+ decks: 'Kompleti',
+ due: 'Rok',
+ dueToday: 'Rok danes',
+ loadingDeck: 'Nalaganje kompleta',
+ mastery: 'Obvladovanje',
+ notes: 'Zapiski',
+ },
+ sort: {
+ ariaLabel: 'Razvrsti komplete',
+ dueToday: 'Rok danes',
+ title: 'Naslov',
+ updated: 'Posodobljeno',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Podatki so se spremenili. Osvežite in poskusite znova.',
+ forbidden: 'Nimate dovoljenja za to dejanje.',
+ notFound: 'Tega elementa nismo mogli najti.',
+ offline: 'Storitve ni mogoče doseči.',
+ timeout: 'To je trajalo predolgo. Poskusite znova.',
+ unauthorized: 'Za nadaljevanje se prijavite.',
+ unavailable: 'Storitev začasno ni na voljo.',
+ },
+ fallback: {
+ unexpected: 'Nepričakovana napaka',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Ustvari mapo',
+ deleteFolder: 'Izbriši mapo',
+ editFolder: 'Uredi mapo',
+ },
+ descriptions: {
+ editorDefault: 'Mapa za povezane komplete.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'To premakne "{{name}}" v Koš. Pozneje jo lahko obnovite.',
+ deleteFolderFallbackDescription: 'To premakne to mapo v Koš. Pozneje jo lahko obnovite.',
+ deleteFolderFallbackTitle: 'Izbrisati mapo?',
+ deleteFolderTitle: 'Izbrisati "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'V tej mapi ni zadetkov',
+ noMatchesInFolderDescription: 'Nobena mapa, komplet ali zapisek se ne ujema z "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Mape ni bilo mogoče ustvariti',
+ couldNotDeleteFolder: 'Mape ni bilo mogoče izbrisati',
+ couldNotLoadFolderPath: 'Poti mape ni bilo mogoče naložiti',
+ couldNotSaveFolder: 'Mape ni bilo mogoče shraniti',
+ folderCouldNotLoad: 'Mape ni bilo mogoče naložiti',
+ },
+ fields: {
+ descriptionLabel: 'Opis mape',
+ descriptionPlaceholder: 'Kaj spada v to mapo?',
+ namePlaceholder: 'Ime mape',
+ untitledFolder: 'Mapa brez naslova',
+ },
+ labels: {
+ createFolderTitle: 'Ustvari mapo',
+ folder: 'Mapa',
+ folders: 'Mape',
+ loadingFolder: 'Nalaganje mape',
+ name: 'Ime',
+ updated: 'Posodobljeno',
+ },
+ sort: {
+ ariaLabel: 'Razvrsti mape',
+ name: 'Ime',
+ updated: 'Posodobljeno',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Če se lokalni in sinhronizirani podatki kdaj ne ujemajo, se bo element prikazal tukaj.',
+ heading: 'Stanje sinhronizacije',
+ title: 'Spori',
+ noConflicts: 'Ni najdenih sporov',
+ },
+ labels: {
+ menu: 'Meni',
+ },
+ sections: {
+ settings: {
+ description: 'Prilagodite svoje okolje in nastavitve',
+ title: 'Nastavitve',
+ },
+ trash: {
+ description: 'Obnovite ali trajno izbrišite odstranjene elemente',
+ title: 'Koš',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Zapri urejevalnik',
+ openActions: 'Odpri dejanja',
+ openWorkspaces: 'Odpri delovne prostore',
+ },
+ items: {
+ home: 'Domov',
+ menu: 'Meni',
+ primary: 'Glavno',
+ settings: 'Nastavitve',
+ spaces: 'Prostori',
+ trash: 'Koš',
+ workspaces: 'Delovni prostori',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Dodaj cloze',
+ deleteNote: 'Izbriši zapisek',
+ editNote: 'Uredi zapisek',
+ hideDerivedCardsNote: 'Skrij opombo o izpeljanih karticah',
+ openNote: 'Odpri {{title}}',
+ saveNote: 'Shrani zapisek',
+ showDerivedCardsNote: 'Prikaži opombo o izpeljanih karticah',
+ },
+ descriptions: {
+ clozeFormat: 'Vsak skriti del po shranjevanju postane kartica za ponavljanje.',
+ clozeFormatPrefix: 'Skrito besedilo obdajte z',
+ derivedCardsHelper: 'Zapiski so vir resnice za izpeljane kartice.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'To premakne "{{title}}" v Koš. Pozneje ga lahko obnovite.',
+ deleteNoteFallbackDescription: 'To premakne ta zapisek v Koš. Pozneje ga lahko obnovite.',
+ deleteNoteFallbackTitle: 'Izbrisati zapisek?',
+ deleteNoteTitle: 'Izbrisati "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Zapiska ni bilo mogoče ustvariti',
+ couldNotDeleteNote: 'Zapiska ni bilo mogoče izbrisati',
+ couldNotSaveNote: 'Zapiska ni bilo mogoče shraniti',
+ noteCouldNotLoad: 'Zapiska ni bilo mogoče naložiti',
+ },
+ fields: {
+ back: 'Hrbtna stran',
+ backPlaceholder: 'Vnesite hrbtno stran',
+ bodyPlaceholder: 'Napišite vsebino zapiska z izbrisi cloze…',
+ front: 'Sprednja stran',
+ frontPlaceholder: 'Vnesite sprednjo stran',
+ noteBody: 'Vsebina zapiska',
+ title: 'Naslov',
+ titlePlaceholder: 'Dodajte naslov zapiska',
+ untitledCloze: 'Cloze brez naslova',
+ untitledNote: 'Zapisek brez naslova',
+ },
+ labels: {
+ backUppercase: 'HRBTNA STRAN',
+ basic: 'Osnovno',
+ basicLower: 'osnovno',
+ basicUppercase: 'OSNOVNO',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Oblika cloze',
+ clozeUppercase: 'CLOZE',
+ deck: 'Komplet',
+ derivedCards: 'IZPELJANE KARTICE',
+ due: 'Rok',
+ frontUppercase: 'SPREDNJA STRAN',
+ inProgress: 'V teku',
+ inProgressUppercase: 'V TEKU',
+ loadingNote: 'Nalaganje zapiska',
+ loadingNoteEditor: 'Nalaganje urejevalnika zapiskov',
+ markdownFormatting: 'Oblikovanje Markdown',
+ mastered: 'Obvladano',
+ masteredUppercase: 'OBVLADANO',
+ newNote: 'Nov zapisek',
+ noteBody: 'VSEBINA ZAPISKA',
+ noteContent: 'Vsebina zapiska',
+ noteDetails: 'Podrobnosti zapiska',
+ noteMetadata: 'Metapodatki zapiska',
+ noteType: 'Vrsta zapiska',
+ notes: 'Zapiski',
+ reviewed: 'Ponovljeno',
+ studyProgress: 'Napredek učenja',
+ studyProgressUppercase: 'NAPREDEK UČENJA',
+ titleUppercase: 'NASLOV',
+ updated: 'Posodobljeno',
+ },
+ sort: {
+ ariaLabel: 'Razvrsti zapiske',
+ title: 'Naslov',
+ updated: 'Posodobljeno',
+ },
+ toolbar: {
+ bold: 'Krepko',
+ italic: 'Ležeče',
+ link: 'Povezava',
+ list: 'Seznam',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Znova',
+ backToDeck: 'Nazaj na komplet',
+ continueReview: 'Nadaljuj ponavljanje',
+ easy: 'Lahko',
+ good: 'Dobro',
+ hard: 'Težko',
+ newNote: 'Nov zapisek',
+ showAnswer: 'Prikaži odgovor',
+ },
+ errors: {
+ couldNotGradeCard: 'Kartice ni bilo mogoče oceniti',
+ reviewCouldNotLoad: 'Ponavljanja ni bilo mogoče naložiti',
+ reviewCouldNotStart: 'Ponavljanja ni bilo mogoče začeti',
+ summaryCouldNotLoad: 'Povzetka ponavljanja ni bilo mogoče naložiti',
+ summaryNotAvailable: 'Povzetek ponavljanja ni na voljo',
+ summaryNotComplete: 'To ponavljanje še ni dokončano.',
+ },
+ labels: {
+ cardsReviewed: 'Ponovljene kartice',
+ deck: 'Komplet',
+ duration: 'Trajanje',
+ loadingReview: 'Nalaganje ponavljanja',
+ loadingSummary: 'Nalaganje povzetka',
+ progress: 'Napredek ponavljanja',
+ review: 'Ponavljanje',
+ reviewComplete: 'Ponavljanje dokončano',
+ reviewed_one: 'Ponovljena {{count}}',
+ reviewed_two: 'Ponovljeni {{count}}',
+ reviewed_few: 'Ponovljene {{count}}',
+ reviewed_other: 'Ponovljeno {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} h {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'Vaš napredek je bil shranjen v ta komplet.',
+ },
+ unavailable: {
+ description: 'Dodajte zapisek, da lahko ta komplet vstopi v čakalno vrsto za ponavljanje.',
+ title: 'Ni kartic za ponavljanje',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Počisti iskanje',
+ },
+ empty: {
+ noMatchesInWorkspace: 'V tem delovnem prostoru ni zadetkov',
+ noMatchesInWorkspaceDescription: 'Nobena mapa, komplet ali zapisek se ne ujema z "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Iskanja ni bilo mogoče dokončati',
+ },
+ labels: {
+ results: 'Rezultati iskanja',
+ resultsFor: 'Rezultati za "{{query}}"',
+ searchingContent: 'Iskanje vsebine',
+ },
+ resultGroups: {
+ deck: 'Kompleti',
+ folder: 'Mape',
+ note: 'Zapiski',
+ },
+ resultKinds: {
+ deck: 'komplet',
+ folder: 'mapa',
+ note: 'zapisek',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Ponastavi vse nastavitve',
+ resetSettings: 'Ponastavi nastavitve',
+ resetToDefaults: 'Ponastavi na privzeto',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Prilepite veljaven JSON z 21 številskimi vrednostmi.',
+ fsrsErrorInvalidParams_one: 'Vnesite polje JSON z natanko {{count}} končnim številom.',
+ fsrsErrorInvalidParams_two: 'Vnesite polje JSON z natanko {{count}} končnima številoma.',
+ fsrsErrorInvalidParams_few: 'Vnesite polje JSON z natanko {{count}} končnimi števili.',
+ fsrsErrorInvalidParams_other: 'Vnesite polje JSON z natanko {{count}} končnimi števili.',
+ fsrsHelper: 'To je strokovna preglasitev. Vrednosti morajo ostati v zaporedju.',
+ fsrsJsonLabel: 'JSON parametrov FSRS',
+ fsrsTitle: 'Uredi parametre FSRS',
+ fsrsDescription: 'Prilepite polje JSON z 21 števili, da preglasite uteži razporejevalnika.',
+ resetDescription: 'To obnovi časovni pas, učne omejitve in nastavitve FSRS.',
+ resetDescriptionWithLanguage: 'To obnovi jezik, časovni pas, učne omejitve in nastavitve FSRS.',
+ resetTitle: 'Ponastaviti vse nastavitve?',
+ timezoneDescription: 'Poiščite mesto ali identifikator časovnega pasu.',
+ timezoneSearchLabel: 'Išči časovne pasove',
+ timezoneSearchPlaceholder: 'Išči časovne pasove…',
+ timezoneTitle: 'Izberi časovni pas',
+ },
+ errors: {
+ couldNotResetSettings: 'Nastavitev ni bilo mogoče ponastaviti',
+ couldNotSaveSettings: 'Nastavitev ni bilo mogoče shraniti',
+ settingsCouldNotLoad: 'Nastavitev ni bilo mogoče naložiti',
+ settingsUnavailable: 'Nastavitve niso na voljo.',
+ },
+ labels: {
+ appearance: 'Videz',
+ automatic: 'Samodejno',
+ fsrsParameters: 'Parametri FSRS',
+ general: 'Splošno',
+ language: 'Jezik',
+ loadingSettings: 'Nalaganje nastavitev',
+ masteryHorizon: 'Obzorje obvladovanja',
+ newCardOrder: 'Vrstni red novih kartic',
+ newCardsPerDay: 'Nove kartice na dan',
+ reviewCardsPerDay: 'Kartice za ponavljanje na dan',
+ savingSettings: 'Shranjevanje nastavitev',
+ schedule: 'Razpored',
+ searchNoTimezones: 'Ni ujemajočih se časovnih pasov.',
+ settings: 'Nastavitve',
+ settingsReset: 'Nastavitve ponastavljene',
+ study: 'Učenje',
+ targetRecallProbability: 'Ciljna verjetnost priklica',
+ theme: 'Tema',
+ timezone: 'Časovni pas',
+ },
+ options: {
+ languageEnUs: 'Angleščina (ZDA)',
+ newCardsAfterReviews: 'Po ponavljanjih',
+ newCardsBeforeReviews: 'Pred ponavljanji',
+ newCardsMixed: 'Mešano',
+ themeDark: 'Temna',
+ themeLight: 'Svetla',
+ themeSystem: 'Sistem',
+ timezoneSystem: 'Uporabi sistemski časovni pas',
+ },
+ rows: {
+ fsrsDescription: 'Uteži strokovnega modela',
+ languageDescription: 'Jezik vmesnika',
+ masteryHorizonDescription: 'Število dni, ko mora kartica ostati priklicljiva pri ciljni verjetnosti ali nad njo, da šteje kot obvladana',
+ newCardOrderDescription: 'Vrstni red novih kartic glede na ponavljanja',
+ newCardsPerDayDescription: 'Največje število novih kartic na dan',
+ reviewCardsPerDayDescription: 'Največje število kartic za ponavljanje na dan',
+ targetRecallProbabilityDescription: 'Najmanjša verjetnost priklica pri naslednjem načrtovanem ponavljanju',
+ timezoneDescription: 'Uporabite samodejni časovni pas ali izberite mesto.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Trajno izbriši',
+ empty: 'Izprazni',
+ emptyTrash: 'Izprazni koš',
+ restore: 'Obnovi',
+ restoringItem: 'Obnavljanje {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'To trajno izbriše "{{title}}". Tega ni mogoče razveljaviti.',
+ deleteItemFallbackDescription: 'To trajno izbriše ta element. Tega ni mogoče razveljaviti.',
+ deleteItemFallbackTitle: 'Izbrisati element?',
+ deleteItemTitle: 'Izbrisati "{{title}}"?',
+ emptyTrashDescription: 'To trajno izbriše vse v Košu. Tega ni mogoče razveljaviti.',
+ emptyTrashTitle: 'Izprazniti koš?',
+ },
+ empty: {
+ description: 'Elementi, ki jih izbrišete, se bodo prikazali tukaj pred trajno odstranitvijo.',
+ title: 'Koš je prazen',
+ },
+ errors: {
+ couldNotDeleteItem: 'Elementa ni bilo mogoče izbrisati',
+ couldNotEmptyTrash: 'Koša ni bilo mogoče izprazniti',
+ couldNotRestoreItem: 'Elementa ni bilo mogoče obnoviti',
+ trashCouldNotLoad: 'Koša ni bilo mogoče naložiti',
+ trashMayBeOutOfDate: 'Koš je morda zastarel',
+ },
+ labels: {
+ deletedAge: 'Izbrisano {{value}}',
+ itemCount_one: '{{count}} element',
+ itemCount_two: '{{count}} elementa',
+ itemCount_few: '{{count}} elementi',
+ itemCount_other: '{{count}} elementov',
+ lastEmptied: 'Nazadnje izpraznjeno {{value}}',
+ loadingTrash: 'Nalaganje Koša',
+ originalLocation: 'Izvorna lokacija: {{location}}',
+ title: 'Koš',
+ trashActions: 'Dejanja Koša za {{title}}',
+ },
+ kinds: {
+ deck: 'Komplet',
+ folder: 'Mapa',
+ note: 'Zapisek',
+ workspace: 'Delovni prostor',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Ustvari delovni prostor',
+ deleteWorkspace: 'Izbriši delovni prostor',
+ editWorkspace: 'Uredi delovni prostor',
+ newWorkspace: 'Nov delovni prostor',
+ openWorkspace: 'Odpri {{title}}',
+ openingWorkspace: 'Odpiranje {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Učni kontekst.',
+ editorVisual: 'Izberite vizualno sidro za ta delovni prostor.',
+ emptyList: 'Ločite komplete, zapiske in čakalne vrste za ponavljanje po učnem kontekstu.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'To premakne "{{title}}" v Koš. Pozneje ga lahko obnovite.',
+ deleteWorkspaceFallbackDescription: 'To premakne ta delovni prostor v Koš. Pozneje ga lahko obnovite.',
+ deleteWorkspaceFallbackTitle: 'Izbrisati delovni prostor?',
+ deleteWorkspaceTitle: 'Izbrisati "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Začnite z delovnim prostorom',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Delovnega prostora ni bilo mogoče ustvariti',
+ couldNotDeleteWorkspace: 'Delovnega prostora ni bilo mogoče izbrisati',
+ couldNotOpenWorkspace: 'Delovnega prostora ni bilo mogoče odpreti',
+ couldNotSaveWorkspace: 'Delovnega prostora ni bilo mogoče shraniti',
+ workspaceCouldNotLoad: 'Delovnega prostora ni bilo mogoče naložiti',
+ workspacesCouldNotLoad: 'Delovnih prostorov ni bilo mogoče naložiti',
+ },
+ fields: {
+ descriptionLabel: 'Opis delovnega prostora',
+ descriptionPlaceholder: 'Kaj spada v ta delovni prostor?',
+ namePlaceholder: 'Ime delovnega prostora',
+ untitledWorkspace: 'Delovni prostor brez naslova',
+ },
+ labels: {
+ createWorkspaceTitle: 'Ustvari delovni prostor',
+ loadingWorkspaces: 'Nalaganje delovnih prostorov',
+ workspace: 'Delovni prostor',
+ workspaces: 'Delovni prostori',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/sr-Latn.ts b/ui/src/core/i18n/resources/sr-Latn.ts
new file mode 100644
index 0000000..cff69bf
--- /dev/null
+++ b/ui/src/core/i18n/resources/sr-Latn.ts
@@ -0,0 +1,636 @@
+export const srLatn = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Pokušajte ponovo. Ako se ovo i dalje dešava, ponovo otvorite Clear.',
+ title: 'Pokretanje nije uspelo',
+ },
+ loadingTitle: 'Priprema se vaš prostor za učenje',
+ },
+ common: {
+ actions: {
+ back: 'Nazad',
+ cancel: 'Otkaži',
+ checkAgain: 'Proveri ponovo',
+ close: 'Zatvori',
+ create: 'Napravi',
+ delete: 'Obriši',
+ dismissError: 'Zatvori grešku',
+ dismissStatus: 'Zatvori status',
+ edit: 'Uredi',
+ itemActions: 'Radnje za {{title}}',
+ reset: 'Resetuj',
+ review: 'Ponavljanje',
+ save: 'Sačuvaj',
+ saveChanges: 'Sačuvaj izmene',
+ tryAgain: 'Pokušaj ponovo',
+ },
+ labels: {
+ active: 'Aktivno',
+ clear: 'Clear',
+ custom: 'Prilagođeno',
+ default: 'Podrazumevano',
+ loadingEditor: 'Učitavanje uređivača',
+ name: 'Naziv',
+ completedTask: 'Završen zadatak',
+ description: 'Opis',
+ incompleteTask: 'Nedovršen zadatak',
+ percentageInput: 'Procenat za {{label}}',
+ visual: 'Vizuelno',
+ },
+ status: {
+ actionFailed: 'Radnja nije uspela',
+ actionInProgress: 'Radnja je u toku',
+ },
+ sort: {
+ ascending: 'Rast.',
+ column: 'Kolona',
+ descending: 'Opad.',
+ direction: 'Smer',
+ sort: 'Sortiraj',
+ },
+ search: {
+ label: 'Pretraga',
+ },
+ visualPicker: {
+ allLucideIcons: 'Sve Lucide ikonice',
+ browseIconsFor: 'Pregledajte ili pretražite ikonice za {{label}}.',
+ chooseIcon: 'Izaberi ikonicu',
+ iconPicker: 'Birač ikonice za {{label}}',
+ iconSearch: 'Pretraga ikonica za {{label}}',
+ iconsCouldNotLoad: 'Ikonice nisu mogle da se učitaju.',
+ loadingIcons: 'Učitavanje ikonica',
+ loadingMoreIcons: 'Učitavanje dodatnih ikonica',
+ moreIcons: 'Još ikonica',
+ noIconsMatch: 'Nijedna ikonica ne odgovara upitu "{{query}}".',
+ searchIconsPlaceholder: 'Pretraži ikonice…',
+ selectedIcon: 'Izabrano {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Napravi',
+ newDeck: 'Novi špil',
+ newFolder: 'Nova fascikla',
+ },
+ descriptions: {
+ defaultWorkspace: 'Držite špilove, fascikle i beleške zajedno.',
+ emptyWorkspace: 'Napravite špil, pa dodajte beleške da izgradite red za ponavljanje.',
+ emptyFolder: 'Napravite špil, pa dodajte beleške da izgradite red za ponavljanje.',
+ searchPlaceholder: 'Pretraži fascikle, špilove i beleške…',
+ },
+ empty: {
+ createFirstDeck: 'Napravite svoj prvi špil',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Špil nije mogao da se obriše',
+ couldNotDeleteFolder: 'Fascikla nije mogla da se obriše',
+ couldNotDeleteWorkspace: 'Radni prostor nije mogao da se obriše',
+ dashboardCouldNotOpen: 'Kontrolna tabla nije mogla da se otvori',
+ decksCouldNotLoad: 'Špilovi nisu mogli da se učitaju',
+ decksMayBeOutOfDate: 'Špilovi možda nisu ažurni',
+ foldersCouldNotLoad: 'Fascikle nisu mogle da se učitaju',
+ foldersMayBeOutOfDate: 'Fascikle možda nisu ažurne',
+ workspaceCouldNotLoad: 'Radni prostor nije mogao da se učita',
+ },
+ labels: {
+ dashboard: 'Kontrolna tabla',
+ loadingDashboard: 'Učitavanje kontrolne table',
+ newItem: 'Nova stavka',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Datum nije dostupan',
+ },
+ age: {
+ dayAgo_one: 'pre {{count}} dan',
+ dayAgo_few: 'pre {{count}} dana',
+ dayAgo_other: 'pre {{count}} dana',
+ hourAgo_one: 'pre {{count}} sat',
+ hourAgo_few: 'pre {{count}} sata',
+ hourAgo_other: 'pre {{count}} sati',
+ justNow: 'upravo sada',
+ minuteAgo_one: 'pre {{count}} minut',
+ minuteAgo_few: 'pre {{count}} minuta',
+ minuteAgo_other: 'pre {{count}} minuta',
+ unavailable: 'datum nije dostupan',
+ weekAgo_one: 'pre {{count}} nedelju',
+ weekAgo_few: 'pre {{count}} nedelje',
+ weekAgo_other: 'pre {{count}} nedelja',
+ },
+ labels: {
+ deleted: 'Obrisano {{value}}',
+ due: 'Rok: {{value}}',
+ reviewed: 'Ponovljeno: {{value}}',
+ updated: 'Ažurirano {{value}}',
+ updatedUppercase: 'AŽURIRANO {{value}}',
+ },
+ relative: {
+ dayAgo_one: 'pre {{count}} dan',
+ dayAgo_few: 'pre {{count}} dana',
+ dayAgo_other: 'pre {{count}} dana',
+ inAMoment: 'Za trenutak',
+ inDay_one: 'Za {{count}} dan',
+ inDay_few: 'Za {{count}} dana',
+ inDay_other: 'Za {{count}} dana',
+ inMonth_one: 'Za {{count}} mesec',
+ inMonth_few: 'Za {{count}} meseca',
+ inMonth_other: 'Za {{count}} meseci',
+ inWeek_one: 'Za {{count}} nedelju',
+ inWeek_few: 'Za {{count}} nedelje',
+ inWeek_other: 'Za {{count}} nedelja',
+ justNow: 'Upravo sada',
+ monthAgo_one: 'pre {{count}} mesec',
+ monthAgo_few: 'pre {{count}} meseca',
+ monthAgo_other: 'pre {{count}} meseci',
+ secondsAgoShort: 'pre {{count}} s',
+ minutesAgoShort: 'pre {{count}} min',
+ hoursAgoShort: 'pre {{count}} h',
+ today: 'Danas',
+ tomorrow: 'Sutra',
+ weekAgo_one: 'pre {{count}} nedelju',
+ weekAgo_few: 'pre {{count}} nedelje',
+ weekAgo_other: 'pre {{count}} nedelja',
+ yesterday: 'Juče',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Radnje za {{title}}',
+ createDeck: 'Napravi špil',
+ createNote: 'Napravi belešku',
+ deleteDeck: 'Obriši špil',
+ editDeck: 'Uredi špil',
+ newNote: 'Nova beleška',
+ openDeck: 'Otvori špil {{title}}',
+ saveDeck: 'Špil nije mogao da se sačuva',
+ studyNow: 'Uči sada',
+ },
+ descriptions: {
+ emptyDeck: 'Dodajte belešku da bi ovaj špil imao materijal za ponavljanje.',
+ editorDefault: 'Fokusiran špil za učenje.',
+ editorVisual: 'Izaberite simbol naslovnice za ovaj špil.',
+ notesSearchPlaceholder: 'Pretraži beleške…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Ovo premešta "{{title}}" u Smeće. Možete ga vratiti kasnije.',
+ deleteDeckFallbackDescription: 'Ovo premešta ovaj špil u Smeće. Možete ga vratiti kasnije.',
+ deleteDeckFallbackTitle: 'Obrisati špil?',
+ deleteDeckTitle: 'Obrisati "{{title}}"?',
+ deleteNoteDescription: 'Ovo premešta "{{title}}" u Smeće. Možete je vratiti kasnije.',
+ deleteNoteFallbackTitle: 'Obrisati belešku?',
+ deleteNoteTitle: 'Obrisati "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Nema odgovarajućih beleški',
+ noMatchingNotesDescription: 'Nijedna beleška ne odgovara upitu "{{query}}".',
+ thisDeckIsEmpty: 'Ovaj špil je prazan',
+ },
+ errors: {
+ couldNotCreateDeck: 'Špil nije mogao da se napravi',
+ couldNotDeleteDeck: 'Špil nije mogao da se obriše',
+ couldNotDeleteNote: 'Beleška nije mogla da se obriše',
+ couldNotLoadFolderPath: 'Putanja fascikle nije mogla da se učita',
+ couldNotSaveDeck: 'Špil nije mogao da se sačuva',
+ deckCouldNotLoad: 'Špil nije mogao da se učita',
+ notesCouldNotLoad: 'Beleške nisu mogle da se učitaju',
+ notesMayBeOutOfDate: 'Beleške možda nisu ažurne',
+ },
+ fields: {
+ descriptionLabel: 'Opis špila',
+ descriptionPlaceholder: 'Šta će vam ovaj špil pomoći da ponavljate?',
+ namePlaceholder: 'Naziv špila',
+ untitledDeck: 'Špil bez naslova',
+ untitledDeckLower: 'špil bez naslova',
+ },
+ labels: {
+ createDeckTitle: 'Napravi špil',
+ deck: 'Špil',
+ deckNotesSearch: 'Pretraga beleški u špilu',
+ deckOverview: 'Pregled špila',
+ decks: 'Špilovi',
+ due: 'Rok',
+ dueToday: 'Rok danas',
+ loadingDeck: 'Učitavanje špila',
+ mastery: 'Savladanost',
+ notes: 'Beleške',
+ },
+ sort: {
+ ariaLabel: 'Sortiraj špilove',
+ dueToday: 'Rok danas',
+ title: 'Naslov',
+ updated: 'Ažurirano',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Podaci su se promenili. Osvežite i pokušajte ponovo.',
+ forbidden: 'Nemate dozvolu za ovu radnju.',
+ notFound: 'Nismo mogli da pronađemo ovu stavku.',
+ offline: 'Usluga nije dostupna.',
+ timeout: 'Ovo je trajalo predugo. Pokušajte ponovo.',
+ unauthorized: 'Prijavite se da nastavite.',
+ unavailable: 'Usluga je privremeno nedostupna.',
+ },
+ fallback: {
+ unexpected: 'Neočekivana greška',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Napravi fasciklu',
+ deleteFolder: 'Obriši fasciklu',
+ editFolder: 'Uredi fasciklu',
+ },
+ descriptions: {
+ editorDefault: 'Fascikla za povezane špilove.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Ovo premešta "{{name}}" u Smeće. Možete je vratiti kasnije.',
+ deleteFolderFallbackDescription: 'Ovo premešta ovu fasciklu u Smeće. Možete je vratiti kasnije.',
+ deleteFolderFallbackTitle: 'Obrisati fasciklu?',
+ deleteFolderTitle: 'Obrisati "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'Nema rezultata u ovoj fascikli',
+ noMatchesInFolderDescription: 'Nijedna fascikla, špil ili beleška ne odgovara upitu "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Fascikla nije mogla da se napravi',
+ couldNotDeleteFolder: 'Fascikla nije mogla da se obriše',
+ couldNotLoadFolderPath: 'Putanja fascikle nije mogla da se učita',
+ couldNotSaveFolder: 'Fascikla nije mogla da se sačuva',
+ folderCouldNotLoad: 'Fascikla nije mogla da se učita',
+ },
+ fields: {
+ descriptionLabel: 'Opis fascikle',
+ descriptionPlaceholder: 'Šta pripada ovoj fascikli?',
+ namePlaceholder: 'Naziv fascikle',
+ untitledFolder: 'Fascikla bez naslova',
+ },
+ labels: {
+ createFolderTitle: 'Napravi fasciklu',
+ folder: 'Fascikla',
+ folders: 'Fascikle',
+ loadingFolder: 'Učitavanje fascikle',
+ name: 'Naziv',
+ updated: 'Ažurirano',
+ },
+ sort: {
+ ariaLabel: 'Sortiraj fascikle',
+ name: 'Naziv',
+ updated: 'Ažurirano',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Ako se lokalni i sinhronizovani podaci ikada razlikuju, stavka će se pojaviti ovde.',
+ heading: 'Status sinhronizacije',
+ title: 'Sukobi',
+ noConflicts: 'Nisu pronađeni sukobi',
+ },
+ labels: {
+ menu: 'Meni',
+ },
+ sections: {
+ settings: {
+ description: 'Prilagodite okruženje i podešavanja',
+ title: 'Podešavanja',
+ },
+ trash: {
+ description: 'Vratite ili trajno obrišite uklonjene stavke',
+ title: 'Smeće',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Zatvori uređivač',
+ openActions: 'Otvori radnje',
+ openWorkspaces: 'Otvori radne prostore',
+ },
+ items: {
+ home: 'Početna',
+ menu: 'Meni',
+ primary: 'Primarno',
+ settings: 'Podešavanja',
+ spaces: 'Prostori',
+ trash: 'Smeće',
+ workspaces: 'Radni prostori',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Dodaj cloze',
+ deleteNote: 'Obriši belešku',
+ editNote: 'Uredi belešku',
+ hideDerivedCardsNote: 'Sakrij belešku o izvedenim karticama',
+ openNote: 'Otvori {{title}}',
+ saveNote: 'Sačuvaj belešku',
+ showDerivedCardsNote: 'Prikaži belešku o izvedenim karticama',
+ },
+ descriptions: {
+ clozeFormat: 'Svaki skriveni deo postaje kartica za ponavljanje kada sačuvate.',
+ clozeFormatPrefix: 'Označite skriveni tekst pomoću',
+ derivedCardsHelper: 'Beleške su izvor istine za izvedene kartice.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Ovo premešta "{{title}}" u Smeće. Možete je vratiti kasnije.',
+ deleteNoteFallbackDescription: 'Ovo premešta ovu belešku u Smeće. Možete je vratiti kasnije.',
+ deleteNoteFallbackTitle: 'Obrisati belešku?',
+ deleteNoteTitle: 'Obrisati "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Beleška nije mogla da se napravi',
+ couldNotDeleteNote: 'Beleška nije mogla da se obriše',
+ couldNotSaveNote: 'Beleška nije mogla da se sačuva',
+ noteCouldNotLoad: 'Beleška nije mogla da se učita',
+ },
+ fields: {
+ back: 'Poleđina',
+ backPlaceholder: 'Unesite poleđinu',
+ bodyPlaceholder: 'Napišite sadržaj beleške sa cloze izostavljanjima…',
+ front: 'Prednja strana',
+ frontPlaceholder: 'Unesite prednju stranu',
+ noteBody: 'Sadržaj beleške',
+ title: 'Naslov',
+ titlePlaceholder: 'Dodajte naslov beleške',
+ untitledCloze: 'Cloze bez naslova',
+ untitledNote: 'Beleška bez naslova',
+ },
+ labels: {
+ backUppercase: 'POLEĐINA',
+ basic: 'Osnovna',
+ basicLower: 'osnovna',
+ basicUppercase: 'OSNOVNA',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Cloze format',
+ clozeUppercase: 'CLOZE',
+ deck: 'Špil',
+ derivedCards: 'IZVEDENE KARTICE',
+ due: 'Rok',
+ frontUppercase: 'PREDNJA STRANA',
+ inProgress: 'U toku',
+ inProgressUppercase: 'U TOKU',
+ loadingNote: 'Učitavanje beleške',
+ loadingNoteEditor: 'Učitavanje uređivača beleški',
+ markdownFormatting: 'Markdown formatiranje',
+ mastered: 'Savladano',
+ masteredUppercase: 'SAVLADANO',
+ newNote: 'Nova beleška',
+ noteBody: 'SADRŽAJ BELEŠKE',
+ noteContent: 'Sadržaj beleške',
+ noteDetails: 'Detalji beleške',
+ noteMetadata: 'Metapodaci beleške',
+ noteType: 'Tip beleške',
+ notes: 'Beleške',
+ reviewed: 'Ponovljeno',
+ studyProgress: 'Napredak u učenju',
+ studyProgressUppercase: 'NAPREDAK U UČENJU',
+ titleUppercase: 'NASLOV',
+ updated: 'Ažurirano',
+ },
+ sort: {
+ ariaLabel: 'Sortiraj beleške',
+ title: 'Naslov',
+ updated: 'Ažurirano',
+ },
+ toolbar: {
+ bold: 'Podebljano',
+ italic: 'Kurziv',
+ link: 'Link',
+ list: 'Lista',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Ponovo',
+ backToDeck: 'Nazad na špil',
+ continueReview: 'Nastavi ponavljanje',
+ easy: 'Lako',
+ good: 'Dobro',
+ hard: 'Teško',
+ newNote: 'Nova beleška',
+ showAnswer: 'Prikaži odgovor',
+ },
+ errors: {
+ couldNotGradeCard: 'Kartica nije mogla da se oceni',
+ reviewCouldNotLoad: 'Ponavljanje nije moglo da se učita',
+ reviewCouldNotStart: 'Ponavljanje nije moglo da se pokrene',
+ summaryCouldNotLoad: 'Sažetak ponavljanja nije mogao da se učita',
+ summaryNotAvailable: 'Sažetak ponavljanja nije dostupan',
+ summaryNotComplete: 'Ovo ponavljanje još nije završeno.',
+ },
+ labels: {
+ cardsReviewed: 'Ponovljene kartice',
+ deck: 'Špil',
+ duration: 'Trajanje',
+ loadingReview: 'Učitavanje ponavljanja',
+ loadingSummary: 'Učitavanje sažetka',
+ progress: 'Napredak ponavljanja',
+ review: 'Ponavljanje',
+ reviewComplete: 'Ponavljanje završeno',
+ reviewed_one: 'Ponovljena {{count}}',
+ reviewed_few: 'Ponovljene {{count}}',
+ reviewed_other: 'Ponovljeno {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} h {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'Vaš napredak je sačuvan u ovom špilu.',
+ },
+ unavailable: {
+ description: 'Dodajte belešku da bi ovaj špil mogao da uđe u red za ponavljanje.',
+ title: 'Nema kartica za ponavljanje',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Obriši pretragu',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Nema rezultata u ovom radnom prostoru',
+ noMatchesInWorkspaceDescription: 'Nijedna fascikla, špil ili beleška ne odgovara upitu "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Pretraga nije mogla da se završi',
+ },
+ labels: {
+ results: 'Rezultati pretrage',
+ resultsFor: 'Rezultati za "{{query}}"',
+ searchingContent: 'Pretraga sadržaja',
+ },
+ resultGroups: {
+ deck: 'Špilovi',
+ folder: 'Fascikle',
+ note: 'Beleške',
+ },
+ resultKinds: {
+ deck: 'špil',
+ folder: 'fascikla',
+ note: 'beleška',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Resetuj sva podešavanja',
+ resetSettings: 'Resetuj podešavanja',
+ resetToDefaults: 'Vrati podrazumevano',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Nalepite važeći JSON sa 21 numeričkom vrednošću.',
+ fsrsErrorInvalidParams_one: 'Unesite JSON niz sa tačno {{count}} konačnim brojem.',
+ fsrsErrorInvalidParams_few: 'Unesite JSON niz sa tačno {{count}} konačna broja.',
+ fsrsErrorInvalidParams_other: 'Unesite JSON niz sa tačno {{count}} konačnih brojeva.',
+ fsrsHelper: 'Ovo je stručno prepisivanje. Vrednosti moraju ostati redom.',
+ fsrsJsonLabel: 'JSON FSRS parametara',
+ fsrsTitle: 'Uredi FSRS parametre',
+ fsrsDescription: 'Nalepite JSON niz sa 21 brojem da zamenite težine planera.',
+ resetDescription: 'Ovo vraća vremensku zonu, ograničenja učenja i FSRS podešavanja.',
+ resetDescriptionWithLanguage: 'Ovo vraća jezik, vremensku zonu, ograničenja učenja i FSRS podešavanja.',
+ resetTitle: 'Resetovati sva podešavanja?',
+ timezoneDescription: 'Pretražite grad ili identifikator vremenske zone.',
+ timezoneSearchLabel: 'Pretraži vremenske zone',
+ timezoneSearchPlaceholder: 'Pretraži vremenske zone…',
+ timezoneTitle: 'Izaberite vremensku zonu',
+ },
+ errors: {
+ couldNotResetSettings: 'Podešavanja nisu mogla da se resetuju',
+ couldNotSaveSettings: 'Podešavanja nisu mogla da se sačuvaju',
+ settingsCouldNotLoad: 'Podešavanja nisu mogla da se učitaju',
+ settingsUnavailable: 'Podešavanja nisu dostupna.',
+ },
+ labels: {
+ appearance: 'Izgled',
+ automatic: 'Automatski',
+ fsrsParameters: 'FSRS parametri',
+ general: 'Opšte',
+ language: 'Jezik',
+ loadingSettings: 'Učitavanje podešavanja',
+ masteryHorizon: 'Horizont savladavanja',
+ newCardOrder: 'Redosled novih kartica',
+ newCardsPerDay: 'Nove kartice dnevno',
+ reviewCardsPerDay: 'Kartice za ponavljanje dnevno',
+ savingSettings: 'Čuvanje podešavanja',
+ schedule: 'Raspored',
+ searchNoTimezones: 'Nema odgovarajućih vremenskih zona.',
+ settings: 'Podešavanja',
+ settingsReset: 'Podešavanja su resetovana',
+ study: 'Učenje',
+ targetRecallProbability: 'Ciljna verovatnoća prisećanja',
+ theme: 'Tema',
+ timezone: 'Vremenska zona',
+ },
+ options: {
+ languageEnUs: 'Engleski (SAD)',
+ newCardsAfterReviews: 'Posle ponavljanja',
+ newCardsBeforeReviews: 'Pre ponavljanja',
+ newCardsMixed: 'Mešano',
+ themeDark: 'Tamna',
+ themeLight: 'Svetla',
+ themeSystem: 'Sistem',
+ timezoneSystem: 'Koristi vremensku zonu sistema',
+ },
+ rows: {
+ fsrsDescription: 'Težine stručnog modela',
+ languageDescription: 'Jezik interfejsa',
+ masteryHorizonDescription: 'Broj dana tokom kojih kartica mora ostati prisećiva na ciljnoj verovatnoći ili iznad nje da bi se računala kao savladana',
+ newCardOrderDescription: 'Redosled novih kartica u odnosu na ponavljanja',
+ newCardsPerDayDescription: 'Maksimalan broj novih kartica dnevno',
+ reviewCardsPerDayDescription: 'Maksimalan broj kartica za ponavljanje dnevno',
+ targetRecallProbabilityDescription: 'Minimalna verovatnoća prisećanja pri sledećem zakazanom ponavljanju',
+ timezoneDescription: 'Koristite automatsku vremensku zonu ili izaberite grad.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Obriši trajno',
+ empty: 'Isprazni',
+ emptyTrash: 'Isprazni smeće',
+ restore: 'Vrati',
+ restoringItem: 'Vraćanje {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Ovo trajno briše "{{title}}". To ne može da se poništi.',
+ deleteItemFallbackDescription: 'Ovo trajno briše ovu stavku. To ne može da se poništi.',
+ deleteItemFallbackTitle: 'Obrisati stavku?',
+ deleteItemTitle: 'Obrisati "{{title}}"?',
+ emptyTrashDescription: 'Ovo trajno briše sve iz Smeća. To ne može da se poništi.',
+ emptyTrashTitle: 'Isprazniti smeće?',
+ },
+ empty: {
+ description: 'Stavke koje obrišete pojaviće se ovde pre trajnog uklanjanja.',
+ title: 'Smeće je prazno',
+ },
+ errors: {
+ couldNotDeleteItem: 'Stavka nije mogla da se obriše',
+ couldNotEmptyTrash: 'Smeće nije moglo da se isprazni',
+ couldNotRestoreItem: 'Stavka nije mogla da se vrati',
+ trashCouldNotLoad: 'Smeće nije moglo da se učita',
+ trashMayBeOutOfDate: 'Smeće možda nije ažurno',
+ },
+ labels: {
+ deletedAge: 'Obrisano {{value}}',
+ itemCount_one: '{{count}} stavka',
+ itemCount_few: '{{count}} stavke',
+ itemCount_other: '{{count}} stavki',
+ lastEmptied: 'Poslednje pražnjenje {{value}}',
+ loadingTrash: 'Učitavanje Smeća',
+ originalLocation: 'Originalna lokacija: {{location}}',
+ title: 'Smeće',
+ trashActions: 'Radnje u Smeću za {{title}}',
+ },
+ kinds: {
+ deck: 'Špil',
+ folder: 'Fascikla',
+ note: 'Beleška',
+ workspace: 'Radni prostor',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Napravi radni prostor',
+ deleteWorkspace: 'Obriši radni prostor',
+ editWorkspace: 'Uredi radni prostor',
+ newWorkspace: 'Novi radni prostor',
+ openWorkspace: 'Otvori {{title}}',
+ openingWorkspace: 'Otvaranje {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Kontekst učenja.',
+ editorVisual: 'Izaberite vizuelno sidro za ovaj radni prostor.',
+ emptyList: 'Odvojite špilove, beleške i redove za ponavljanje po kontekstu učenja.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Ovo premešta "{{title}}" u Smeće. Možete ga vratiti kasnije.',
+ deleteWorkspaceFallbackDescription: 'Ovo premešta ovaj radni prostor u Smeće. Možete ga vratiti kasnije.',
+ deleteWorkspaceFallbackTitle: 'Obrisati radni prostor?',
+ deleteWorkspaceTitle: 'Obrisati "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Počnite sa radnim prostorom',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Radni prostor nije mogao da se napravi',
+ couldNotDeleteWorkspace: 'Radni prostor nije mogao da se obriše',
+ couldNotOpenWorkspace: 'Radni prostor nije mogao da se otvori',
+ couldNotSaveWorkspace: 'Radni prostor nije mogao da se sačuva',
+ workspaceCouldNotLoad: 'Radni prostor nije mogao da se učita',
+ workspacesCouldNotLoad: 'Radni prostori nisu mogli da se učitaju',
+ },
+ fields: {
+ descriptionLabel: 'Opis radnog prostora',
+ descriptionPlaceholder: 'Šta pripada ovom radnom prostoru?',
+ namePlaceholder: 'Naziv radnog prostora',
+ untitledWorkspace: 'Radni prostor bez naslova',
+ },
+ labels: {
+ createWorkspaceTitle: 'Napravi radni prostor',
+ loadingWorkspaces: 'Učitavanje radnih prostora',
+ workspace: 'Radni prostor',
+ workspaces: 'Radni prostori',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/sv.ts b/ui/src/core/i18n/resources/sv.ts
new file mode 100644
index 0000000..0204bd0
--- /dev/null
+++ b/ui/src/core/i18n/resources/sv.ts
@@ -0,0 +1,623 @@
+export const sv = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Försök igen. Om det fortsätter att hända, öppna Clear igen.',
+ title: 'Kunde inte starta',
+ },
+ loadingTitle: 'Förbereder din studieyta',
+ },
+ common: {
+ actions: {
+ back: 'Tillbaka',
+ cancel: 'Avbryt',
+ checkAgain: 'Kontrollera igen',
+ close: 'Stäng',
+ create: 'Skapa',
+ delete: 'Ta bort',
+ dismissError: 'Stäng fel',
+ dismissStatus: 'Stäng status',
+ edit: 'Redigera',
+ itemActions: 'Åtgärder för {{title}}',
+ reset: 'Återställ',
+ review: 'Repetera',
+ save: 'Spara',
+ saveChanges: 'Spara ändringar',
+ tryAgain: 'Försök igen',
+ },
+ labels: {
+ active: 'Aktiv',
+ clear: 'Clear',
+ custom: 'Anpassad',
+ default: 'Standard',
+ loadingEditor: 'Läser in redigerare',
+ name: 'Namn',
+ completedTask: 'Slutförd uppgift',
+ description: 'Beskrivning',
+ incompleteTask: 'Oslutförd uppgift',
+ percentageInput: '{{label}} procent',
+ visual: 'Visuell',
+ },
+ status: {
+ actionFailed: 'Åtgärden misslyckades',
+ actionInProgress: 'Åtgärd pågår',
+ },
+ sort: {
+ ascending: 'Stig.',
+ column: 'Kolumn',
+ descending: 'Fall.',
+ direction: 'Riktning',
+ sort: 'Sortera',
+ },
+ search: {
+ label: 'Sök',
+ },
+ visualPicker: {
+ allLucideIcons: 'Alla Lucide-ikoner',
+ browseIconsFor: 'Bläddra eller sök efter ikoner för {{label}}.',
+ chooseIcon: 'Välj ikon',
+ iconPicker: 'Ikonväljare för {{label}}',
+ iconSearch: 'Ikonsökning för {{label}}',
+ iconsCouldNotLoad: 'Ikonerna kunde inte läsas in.',
+ loadingIcons: 'Läser in ikoner',
+ loadingMoreIcons: 'Läser in fler ikoner',
+ moreIcons: 'Fler ikoner',
+ noIconsMatch: 'Inga ikoner matchar "{{query}}".',
+ searchIconsPlaceholder: 'Sök ikoner…',
+ selectedIcon: '{{label}} vald',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Skapa',
+ newDeck: 'Ny kortlek',
+ newFolder: 'Ny mapp',
+ },
+ descriptions: {
+ defaultWorkspace: 'Håll kortlekar, mappar och anteckningar samlade.',
+ emptyWorkspace: 'Skapa en kortlek och lägg sedan till anteckningar för att bygga din repetitionskö.',
+ emptyFolder: 'Skapa en kortlek och lägg sedan till anteckningar för att bygga en repetitionskö.',
+ searchPlaceholder: 'Sök mappar, kortlekar och anteckningar…',
+ },
+ empty: {
+ createFirstDeck: 'Skapa din första kortlek',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Kunde inte ta bort kortlek',
+ couldNotDeleteFolder: 'Kunde inte ta bort mapp',
+ couldNotDeleteWorkspace: 'Kunde inte ta bort arbetsyta',
+ dashboardCouldNotOpen: 'Instrumentpanelen kunde inte öppnas',
+ decksCouldNotLoad: 'Kortlekar kunde inte läsas in',
+ decksMayBeOutOfDate: 'Kortlekar kan vara inaktuella',
+ foldersCouldNotLoad: 'Mappar kunde inte läsas in',
+ foldersMayBeOutOfDate: 'Mappar kan vara inaktuella',
+ workspaceCouldNotLoad: 'Arbetsytan kunde inte läsas in',
+ },
+ labels: {
+ dashboard: 'Instrumentpanel',
+ loadingDashboard: 'Läser in instrumentpanel',
+ newItem: 'Nytt objekt',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Datum saknas',
+ },
+ age: {
+ dayAgo_one: '{{count}} dag sedan',
+ dayAgo_other: '{{count}} dagar sedan',
+ hourAgo_one: '{{count}} timme sedan',
+ hourAgo_other: '{{count}} timmar sedan',
+ justNow: 'nyss',
+ minuteAgo_one: '{{count}} minut sedan',
+ minuteAgo_other: '{{count}} minuter sedan',
+ unavailable: 'datum saknas',
+ weekAgo_one: '{{count}} vecka sedan',
+ weekAgo_other: '{{count}} veckor sedan',
+ },
+ labels: {
+ deleted: 'Borttaget {{value}}',
+ due: 'Förfaller: {{value}}',
+ reviewed: 'Repeterat: {{value}}',
+ updated: 'Uppdaterat {{value}}',
+ updatedUppercase: 'UPPDATERAT {{value}}',
+ },
+ relative: {
+ dayAgo_one: '{{count}} dag sedan',
+ dayAgo_other: '{{count}} dagar sedan',
+ inAMoment: 'Om ett ögonblick',
+ inDay_one: 'Om {{count}} dag',
+ inDay_other: 'Om {{count}} dagar',
+ inMonth_one: 'Om {{count}} månad',
+ inMonth_other: 'Om {{count}} månader',
+ inWeek_one: 'Om {{count}} vecka',
+ inWeek_other: 'Om {{count}} veckor',
+ justNow: 'Nyss',
+ monthAgo_one: '{{count}} månad sedan',
+ monthAgo_other: '{{count}} månader sedan',
+ secondsAgoShort: '{{count}} s sedan',
+ minutesAgoShort: '{{count}} min sedan',
+ hoursAgoShort: '{{count}} h sedan',
+ today: 'I dag',
+ tomorrow: 'I morgon',
+ weekAgo_one: '{{count}} vecka sedan',
+ weekAgo_other: '{{count}} veckor sedan',
+ yesterday: 'I går',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Åtgärder för {{title}}',
+ createDeck: 'Skapa kortlek',
+ createNote: 'Skapa anteckning',
+ deleteDeck: 'Ta bort kortlek',
+ editDeck: 'Redigera kortlek',
+ newNote: 'Ny anteckning',
+ openDeck: 'Öppna kortleken {{title}}',
+ saveDeck: 'Kunde inte spara kortlek',
+ studyNow: 'Studera nu',
+ },
+ descriptions: {
+ emptyDeck: 'Lägg till en anteckning så att kortleken har material att repetera.',
+ editorDefault: 'Fokuserad studiekortlek.',
+ editorVisual: 'Välj en omslagsikon för den här kortleken.',
+ notesSearchPlaceholder: 'Sök anteckningar…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Detta flyttar "{{title}}" till Papperskorgen. Du kan återställa den senare.',
+ deleteDeckFallbackDescription: 'Detta flyttar den här kortleken till Papperskorgen. Du kan återställa den senare.',
+ deleteDeckFallbackTitle: 'Ta bort kortlek?',
+ deleteDeckTitle: 'Ta bort "{{title}}"?',
+ deleteNoteDescription: 'Detta flyttar "{{title}}" till Papperskorgen. Du kan återställa den senare.',
+ deleteNoteFallbackTitle: 'Ta bort anteckning?',
+ deleteNoteTitle: 'Ta bort "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Inga matchande anteckningar',
+ noMatchingNotesDescription: 'Inga anteckningar matchade "{{query}}".',
+ thisDeckIsEmpty: 'Den här kortleken är tom',
+ },
+ errors: {
+ couldNotCreateDeck: 'Kunde inte skapa kortlek',
+ couldNotDeleteDeck: 'Kunde inte ta bort kortlek',
+ couldNotDeleteNote: 'Kunde inte ta bort anteckning',
+ couldNotLoadFolderPath: 'Kunde inte läsa in mappsökväg',
+ couldNotSaveDeck: 'Kunde inte spara kortlek',
+ deckCouldNotLoad: 'Kortleken kunde inte läsas in',
+ notesCouldNotLoad: 'Anteckningar kunde inte läsas in',
+ notesMayBeOutOfDate: 'Anteckningar kan vara inaktuella',
+ },
+ fields: {
+ descriptionLabel: 'Kortleksbeskrivning',
+ descriptionPlaceholder: 'Vad hjälper den här kortleken dig att repetera?',
+ namePlaceholder: 'Kortleksnamn',
+ untitledDeck: 'Namnlös kortlek',
+ untitledDeckLower: 'namnlös kortlek',
+ },
+ labels: {
+ createDeckTitle: 'Skapa kortlek',
+ deck: 'Kortlek',
+ deckNotesSearch: 'Sök anteckningar i kortlek',
+ deckOverview: 'Kortleksöversikt',
+ decks: 'Kortlekar',
+ due: 'Förfaller',
+ dueToday: 'Förfaller i dag',
+ loadingDeck: 'Läser in kortlek',
+ mastery: 'Behärskning',
+ notes: 'Anteckningar',
+ },
+ sort: {
+ ariaLabel: 'Sortera kortlekar',
+ dueToday: 'Förfaller i dag',
+ title: 'Titel',
+ updated: 'Uppdaterad',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Datan ändrades. Uppdatera och försök igen.',
+ forbidden: 'Du har inte behörighet att göra detta.',
+ notFound: 'Vi kunde inte hitta det här objektet.',
+ offline: 'Kan inte nå tjänsten.',
+ timeout: 'Detta tog för lång tid. Försök igen.',
+ unauthorized: 'Logga in för att fortsätta.',
+ unavailable: 'Tjänsten är tillfälligt otillgänglig.',
+ },
+ fallback: {
+ unexpected: 'Oväntat fel',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Skapa mapp',
+ deleteFolder: 'Ta bort mapp',
+ editFolder: 'Redigera mapp',
+ },
+ descriptions: {
+ editorDefault: 'Mapp för relaterade kortlekar.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Detta flyttar "{{name}}" till Papperskorgen. Du kan återställa den senare.',
+ deleteFolderFallbackDescription: 'Detta flyttar den här mappen till Papperskorgen. Du kan återställa den senare.',
+ deleteFolderFallbackTitle: 'Ta bort mapp?',
+ deleteFolderTitle: 'Ta bort "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'Inga träffar i den här mappen',
+ noMatchesInFolderDescription: 'Inga mappar, kortlekar eller anteckningar matchade "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Kunde inte skapa mapp',
+ couldNotDeleteFolder: 'Kunde inte ta bort mapp',
+ couldNotLoadFolderPath: 'Kunde inte läsa in mappsökväg',
+ couldNotSaveFolder: 'Kunde inte spara mapp',
+ folderCouldNotLoad: 'Mappen kunde inte läsas in',
+ },
+ fields: {
+ descriptionLabel: 'Mappbeskrivning',
+ descriptionPlaceholder: 'Vad hör hemma i den här mappen?',
+ namePlaceholder: 'Mappnamn',
+ untitledFolder: 'Namnlös mapp',
+ },
+ labels: {
+ createFolderTitle: 'Skapa mapp',
+ folder: 'Mapp',
+ folders: 'Mappar',
+ loadingFolder: 'Läser in mapp',
+ name: 'Namn',
+ updated: 'Uppdaterad',
+ },
+ sort: {
+ ariaLabel: 'Sortera mappar',
+ name: 'Namn',
+ updated: 'Uppdaterad',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Om lokal och synkroniserad data skiljer sig åt visas objektet här.',
+ heading: 'Synkroniseringsstatus',
+ title: 'Konflikter',
+ noConflicts: 'Inga konflikter hittades',
+ },
+ labels: {
+ menu: 'Meny',
+ },
+ sections: {
+ settings: {
+ description: 'Anpassa din miljö och dina inställningar',
+ title: 'Inställningar',
+ },
+ trash: {
+ description: 'Återställ eller ta bort borttagna objekt permanent',
+ title: 'Papperskorg',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Stäng redigerare',
+ openActions: 'Öppna åtgärder',
+ openWorkspaces: 'Öppna arbetsytor',
+ },
+ items: {
+ home: 'Hem',
+ menu: 'Meny',
+ primary: 'Primär',
+ settings: 'Inställningar',
+ spaces: 'Ytor',
+ trash: 'Papperskorg',
+ workspaces: 'Arbetsytor',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Lägg till cloze',
+ deleteNote: 'Ta bort anteckning',
+ editNote: 'Redigera anteckning',
+ hideDerivedCardsNote: 'Dölj anteckning om härledda kort',
+ openNote: 'Öppna {{title}}',
+ saveNote: 'Spara anteckning',
+ showDerivedCardsNote: 'Visa anteckning om härledda kort',
+ },
+ descriptions: {
+ clozeFormat: 'Varje dold del blir ett repetitionskort när du sparar.',
+ clozeFormatPrefix: 'Omslut dold text med',
+ derivedCardsHelper: 'Anteckningar är källan till sanning för härledda kort.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Detta flyttar "{{title}}" till Papperskorgen. Du kan återställa den senare.',
+ deleteNoteFallbackDescription: 'Detta flyttar den här anteckningen till Papperskorgen. Du kan återställa den senare.',
+ deleteNoteFallbackTitle: 'Ta bort anteckning?',
+ deleteNoteTitle: 'Ta bort "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Kunde inte skapa anteckning',
+ couldNotDeleteNote: 'Kunde inte ta bort anteckning',
+ couldNotSaveNote: 'Kunde inte spara anteckning',
+ noteCouldNotLoad: 'Anteckningen kunde inte läsas in',
+ },
+ fields: {
+ back: 'Baksida',
+ backPlaceholder: 'Ange baksida',
+ bodyPlaceholder: 'Skriv anteckningens innehåll med cloze-borttagningar…',
+ front: 'Framsida',
+ frontPlaceholder: 'Ange framsida',
+ noteBody: 'Anteckningens innehåll',
+ title: 'Titel',
+ titlePlaceholder: 'Lägg till en anteckningstitel',
+ untitledCloze: 'Namnlös cloze',
+ untitledNote: 'Namnlös anteckning',
+ },
+ labels: {
+ backUppercase: 'BAKSIDA',
+ basic: 'Grundläggande',
+ basicLower: 'grundläggande',
+ basicUppercase: 'GRUNDLÄGGANDE',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Cloze-format',
+ clozeUppercase: 'CLOZE',
+ deck: 'Kortlek',
+ derivedCards: 'HÄRLEDDA KORT',
+ due: 'Förfaller',
+ frontUppercase: 'FRAMSIDA',
+ inProgress: 'Pågår',
+ inProgressUppercase: 'PÅGÅR',
+ loadingNote: 'Läser in anteckning',
+ loadingNoteEditor: 'Läser in anteckningsredigerare',
+ markdownFormatting: 'Markdown-formatering',
+ mastered: 'Behärskad',
+ masteredUppercase: 'BEHÄRSKAD',
+ newNote: 'Ny anteckning',
+ noteBody: 'ANTECKNINGENS INNEHÅLL',
+ noteContent: 'Anteckningsinnehåll',
+ noteDetails: 'Anteckningsdetaljer',
+ noteMetadata: 'Anteckningsmetadata',
+ noteType: 'Anteckningstyp',
+ notes: 'Anteckningar',
+ reviewed: 'Repeterad',
+ studyProgress: 'Studieframsteg',
+ studyProgressUppercase: 'STUDIEFRAMSTEG',
+ titleUppercase: 'TITEL',
+ updated: 'Uppdaterad',
+ },
+ sort: {
+ ariaLabel: 'Sortera anteckningar',
+ title: 'Titel',
+ updated: 'Uppdaterad',
+ },
+ toolbar: {
+ bold: 'Fet',
+ italic: 'Kursiv',
+ link: 'Länk',
+ list: 'Lista',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Igen',
+ backToDeck: 'Tillbaka till kortlek',
+ continueReview: 'Fortsätt repetition',
+ easy: 'Lätt',
+ good: 'Bra',
+ hard: 'Svår',
+ newNote: 'Ny anteckning',
+ showAnswer: 'Visa svar',
+ },
+ errors: {
+ couldNotGradeCard: 'Kunde inte betygsätta kort',
+ reviewCouldNotLoad: 'Repetition kunde inte läsas in',
+ reviewCouldNotStart: 'Repetition kunde inte startas',
+ summaryCouldNotLoad: 'Repetitionssammanfattning kunde inte läsas in',
+ summaryNotAvailable: 'Repetitionssammanfattning är inte tillgänglig',
+ summaryNotComplete: 'Den här repetitionen är inte klar än.',
+ },
+ labels: {
+ cardsReviewed: 'Repeterade kort',
+ deck: 'Kortlek',
+ duration: 'Varaktighet',
+ loadingReview: 'Läser in repetition',
+ loadingSummary: 'Läser in sammanfattning',
+ progress: 'Repetitionsframsteg',
+ review: 'Repetition',
+ reviewComplete: 'Repetition slutförd',
+ reviewed_one: 'Repeterat {{count}}',
+ reviewed_other: 'Repeterat {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} h {{minutes}} min',
+ durationMinutes: '{{minutes}} min',
+ durationSeconds: '{{seconds}} s',
+ saved: 'Dina framsteg sparades i den här kortleken.',
+ },
+ unavailable: {
+ description: 'Lägg till en anteckning så att kortleken kan hamna i repetitionskön.',
+ title: 'Inga kort att repetera',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Rensa sökning',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Inga träffar i den här arbetsytan',
+ noMatchesInWorkspaceDescription: 'Inga mappar, kortlekar eller anteckningar matchade "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Sökningen kunde inte slutföras',
+ },
+ labels: {
+ results: 'Sökresultat',
+ resultsFor: 'Resultat för "{{query}}"',
+ searchingContent: 'Söker innehåll',
+ },
+ resultGroups: {
+ deck: 'Kortlekar',
+ folder: 'Mappar',
+ note: 'Anteckningar',
+ },
+ resultKinds: {
+ deck: 'kortlek',
+ folder: 'mapp',
+ note: 'anteckning',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Återställ alla inställningar',
+ resetSettings: 'Återställ inställningar',
+ resetToDefaults: 'Återställ standardvärden',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Klistra in giltig JSON med 21 numeriska värden.',
+ fsrsErrorInvalidParams_one: 'Ange en JSON-array med exakt {{count}} ändligt tal.',
+ fsrsErrorInvalidParams_other: 'Ange en JSON-array med exakt {{count}} ändliga tal.',
+ fsrsHelper: 'Detta är en expertåsidosättning. Värdena måste behålla ordningen.',
+ fsrsJsonLabel: 'FSRS-parametrar JSON',
+ fsrsTitle: 'Redigera FSRS-parametrar',
+ fsrsDescription: 'Klistra in en JSON-array med 21 tal för att åsidosätta scheduler-vikterna.',
+ resetDescription: 'Detta återställer tidszon, studiegränser och FSRS-inställningar.',
+ resetDescriptionWithLanguage: 'Detta återställer språk, tidszon, studiegränser och FSRS-inställningar.',
+ resetTitle: 'Återställa alla inställningar?',
+ timezoneDescription: 'Sök efter en stad eller tidszonsidentifierare.',
+ timezoneSearchLabel: 'Sök tidszoner',
+ timezoneSearchPlaceholder: 'Sök tidszoner…',
+ timezoneTitle: 'Välj tidszon',
+ },
+ errors: {
+ couldNotResetSettings: 'Kunde inte återställa inställningar',
+ couldNotSaveSettings: 'Kunde inte spara inställningar',
+ settingsCouldNotLoad: 'Inställningar kunde inte läsas in',
+ settingsUnavailable: 'Inställningar är inte tillgängliga.',
+ },
+ labels: {
+ appearance: 'Utseende',
+ automatic: 'Automatisk',
+ fsrsParameters: 'FSRS-parametrar',
+ general: 'Allmänt',
+ language: 'Språk',
+ loadingSettings: 'Läser in inställningar',
+ masteryHorizon: 'Behärskningshorisont',
+ newCardOrder: 'Ordning för nya kort',
+ newCardsPerDay: 'Nya kort per dag',
+ reviewCardsPerDay: 'Repetitionskort per dag',
+ savingSettings: 'Sparar inställningar',
+ schedule: 'Schema',
+ searchNoTimezones: 'Inga matchande tidszoner.',
+ settings: 'Inställningar',
+ settingsReset: 'Inställningar återställda',
+ study: 'Studier',
+ targetRecallProbability: 'Målsannolikhet för återkallelse',
+ theme: 'Tema',
+ timezone: 'Tidszon',
+ },
+ options: {
+ languageEnUs: 'Engelska (USA)',
+ newCardsAfterReviews: 'Efter repetitioner',
+ newCardsBeforeReviews: 'Före repetitioner',
+ newCardsMixed: 'Blandat',
+ themeDark: 'Mörkt',
+ themeLight: 'Ljust',
+ themeSystem: 'System',
+ timezoneSystem: 'Använd systemets tidszon',
+ },
+ rows: {
+ fsrsDescription: 'Expertmodellens vikter',
+ languageDescription: 'Gränssnittsspråk',
+ masteryHorizonDescription: 'Antal dagar ett kort måste vara återkalleligt vid eller över målsannolikheten för att räknas som behärskat',
+ newCardOrderDescription: 'Ordning för nya kort relativt repetitioner',
+ newCardsPerDayDescription: 'Maximalt antal nya kort per dag',
+ reviewCardsPerDayDescription: 'Maximalt antal repetitionskort per dag',
+ targetRecallProbabilityDescription: 'Minsta sannolikhet för återkallelse vid nästa schemalagda repetition',
+ timezoneDescription: 'Använd automatisk tidszon eller välj en stad.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Ta bort permanent',
+ empty: 'Töm',
+ emptyTrash: 'Töm papperskorg',
+ restore: 'Återställ',
+ restoringItem: 'Återställer {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Detta tar bort "{{title}}" permanent. Det kan inte ångras.',
+ deleteItemFallbackDescription: 'Detta tar bort objektet permanent. Det kan inte ångras.',
+ deleteItemFallbackTitle: 'Ta bort objekt?',
+ deleteItemTitle: 'Ta bort "{{title}}"?',
+ emptyTrashDescription: 'Detta tar bort allt i Papperskorgen permanent. Det kan inte ångras.',
+ emptyTrashTitle: 'Tömma papperskorgen?',
+ },
+ empty: {
+ description: 'Objekt du tar bort visas här innan de tas bort permanent.',
+ title: 'Papperskorgen är tom',
+ },
+ errors: {
+ couldNotDeleteItem: 'Kunde inte ta bort objekt',
+ couldNotEmptyTrash: 'Kunde inte tömma Papperskorgen',
+ couldNotRestoreItem: 'Kunde inte återställa objekt',
+ trashCouldNotLoad: 'Papperskorgen kunde inte läsas in',
+ trashMayBeOutOfDate: 'Papperskorgen kan vara inaktuell',
+ },
+ labels: {
+ deletedAge: 'Borttaget {{value}}',
+ itemCount_one: '{{count}} objekt',
+ itemCount_other: '{{count}} objekt',
+ lastEmptied: 'Senast tömd {{value}}',
+ loadingTrash: 'Läser in Papperskorgen',
+ originalLocation: 'Ursprunglig plats: {{location}}',
+ title: 'Papperskorg',
+ trashActions: 'Papperskorgsåtgärder för {{title}}',
+ },
+ kinds: {
+ deck: 'Kortlek',
+ folder: 'Mapp',
+ note: 'Anteckning',
+ workspace: 'Arbetsyta',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Skapa arbetsyta',
+ deleteWorkspace: 'Ta bort arbetsyta',
+ editWorkspace: 'Redigera arbetsyta',
+ newWorkspace: 'Ny arbetsyta',
+ openWorkspace: 'Öppna {{title}}',
+ openingWorkspace: 'Öppnar {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Studiekontext.',
+ editorVisual: 'Välj ett visuellt ankare för den här arbetsytan.',
+ emptyList: 'Separera kortlekar, anteckningar och repetitionsköer efter studiekontext.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Detta flyttar "{{title}}" till Papperskorgen. Du kan återställa den senare.',
+ deleteWorkspaceFallbackDescription: 'Detta flyttar den här arbetsytan till Papperskorgen. Du kan återställa den senare.',
+ deleteWorkspaceFallbackTitle: 'Ta bort arbetsyta?',
+ deleteWorkspaceTitle: 'Ta bort "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Börja med en arbetsyta',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Kunde inte skapa arbetsyta',
+ couldNotDeleteWorkspace: 'Kunde inte ta bort arbetsyta',
+ couldNotOpenWorkspace: 'Kunde inte öppna arbetsyta',
+ couldNotSaveWorkspace: 'Kunde inte spara arbetsyta',
+ workspaceCouldNotLoad: 'Arbetsytan kunde inte läsas in',
+ workspacesCouldNotLoad: 'Arbetsytor kunde inte läsas in',
+ },
+ fields: {
+ descriptionLabel: 'Beskrivning av arbetsyta',
+ descriptionPlaceholder: 'Vad hör hemma i den här arbetsytan?',
+ namePlaceholder: 'Namn på arbetsyta',
+ untitledWorkspace: 'Namnlös arbetsyta',
+ },
+ labels: {
+ createWorkspaceTitle: 'Skapa arbetsyta',
+ loadingWorkspaces: 'Läser in arbetsytor',
+ workspace: 'Arbetsyta',
+ workspaces: 'Arbetsytor',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/th.ts b/ui/src/core/i18n/resources/th.ts
new file mode 100644
index 0000000..477695a
--- /dev/null
+++ b/ui/src/core/i18n/resources/th.ts
@@ -0,0 +1,623 @@
+export const th = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'ลองอีกครั้ง หากยังเกิดขึ้นอยู่ ให้เปิด Clear ใหม่',
+ title: 'ไม่สามารถเริ่มต้นได้',
+ },
+ loadingTitle: 'กำลังเตรียมพื้นที่เรียนของคุณ',
+ },
+ common: {
+ actions: {
+ back: 'กลับ',
+ cancel: 'ยกเลิก',
+ checkAgain: 'ตรวจสอบอีกครั้ง',
+ close: 'ปิด',
+ create: 'สร้าง',
+ delete: 'ลบ',
+ dismissError: 'ปิดข้อผิดพลาด',
+ dismissStatus: 'ปิดสถานะ',
+ edit: 'แก้ไข',
+ itemActions: 'การทำงานของ {{title}}',
+ reset: 'รีเซ็ต',
+ review: 'ทบทวน',
+ save: 'บันทึก',
+ saveChanges: 'บันทึกการเปลี่ยนแปลง',
+ tryAgain: 'ลองอีกครั้ง',
+ },
+ labels: {
+ active: 'ใช้งานอยู่',
+ clear: 'Clear',
+ custom: 'กำหนดเอง',
+ default: 'ค่าเริ่มต้น',
+ loadingEditor: 'กำลังโหลดตัวแก้ไข',
+ name: 'ชื่อ',
+ completedTask: 'งานที่เสร็จแล้ว',
+ description: 'คำอธิบาย',
+ incompleteTask: 'งานที่ยังไม่เสร็จ',
+ percentageInput: 'เปอร์เซ็นต์ของ {{label}}',
+ visual: 'ภาพ',
+ },
+ status: {
+ actionFailed: 'การทำงานล้มเหลว',
+ actionInProgress: 'กำลังดำเนินการ',
+ },
+ sort: {
+ ascending: 'น้อยไปมาก',
+ column: 'คอลัมน์',
+ descending: 'มากไปน้อย',
+ direction: 'ทิศทาง',
+ sort: 'เรียงลำดับ',
+ },
+ search: {
+ label: 'ค้นหา',
+ },
+ visualPicker: {
+ allLucideIcons: 'ไอคอน Lucide ทั้งหมด',
+ browseIconsFor: 'เรียกดูหรือค้นหาไอคอนสำหรับ {{label}}',
+ chooseIcon: 'เลือกไอคอน',
+ iconPicker: 'ตัวเลือกไอคอนสำหรับ {{label}}',
+ iconSearch: 'ค้นหาไอคอนสำหรับ {{label}}',
+ iconsCouldNotLoad: 'ไม่สามารถโหลดไอคอนได้',
+ loadingIcons: 'กำลังโหลดไอคอน',
+ loadingMoreIcons: 'กำลังโหลดไอคอนเพิ่มเติม',
+ moreIcons: 'ไอคอนเพิ่มเติม',
+ noIconsMatch: 'ไม่มีไอคอนที่ตรงกับ "{{query}}"',
+ searchIconsPlaceholder: 'ค้นหาไอคอน…',
+ selectedIcon: 'เลือก {{label}} แล้ว',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'สร้าง',
+ newDeck: 'สำรับใหม่',
+ newFolder: 'โฟลเดอร์ใหม่',
+ },
+ descriptions: {
+ defaultWorkspace: 'เก็บสำรับ โฟลเดอร์ และโน้ตไว้ด้วยกัน',
+ emptyWorkspace: 'สร้างสำรับ แล้วเพิ่มโน้ตเพื่อสร้างคิวทบทวนของคุณ',
+ emptyFolder: 'สร้างสำรับ แล้วเพิ่มโน้ตเพื่อสร้างคิวทบทวน',
+ searchPlaceholder: 'ค้นหาโฟลเดอร์ สำรับ และโน้ต…',
+ },
+ empty: {
+ createFirstDeck: 'สร้างสำรับแรกของคุณ',
+ },
+ errors: {
+ couldNotDeleteDeck: 'ไม่สามารถลบสำรับได้',
+ couldNotDeleteFolder: 'ไม่สามารถลบโฟลเดอร์ได้',
+ couldNotDeleteWorkspace: 'ไม่สามารถลบพื้นที่ทำงานได้',
+ dashboardCouldNotOpen: 'ไม่สามารถเปิดแดชบอร์ดได้',
+ decksCouldNotLoad: 'ไม่สามารถโหลดสำรับได้',
+ decksMayBeOutOfDate: 'สำรับอาจล้าสมัย',
+ foldersCouldNotLoad: 'ไม่สามารถโหลดโฟลเดอร์ได้',
+ foldersMayBeOutOfDate: 'โฟลเดอร์อาจล้าสมัย',
+ workspaceCouldNotLoad: 'ไม่สามารถโหลดพื้นที่ทำงานได้',
+ },
+ labels: {
+ dashboard: 'แดชบอร์ด',
+ loadingDashboard: 'กำลังโหลดแดชบอร์ด',
+ newItem: 'รายการใหม่',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'ไม่มีวันที่',
+ },
+ age: {
+ dayAgo_one: '{{count}} วันที่แล้ว',
+ dayAgo_other: '{{count}} วันที่แล้ว',
+ hourAgo_one: '{{count}} ชั่วโมงที่แล้ว',
+ hourAgo_other: '{{count}} ชั่วโมงที่แล้ว',
+ justNow: 'เมื่อสักครู่',
+ minuteAgo_one: '{{count}} นาทีที่แล้ว',
+ minuteAgo_other: '{{count}} นาทีที่แล้ว',
+ unavailable: 'ไม่มีวันที่',
+ weekAgo_one: '{{count}} สัปดาห์ที่แล้ว',
+ weekAgo_other: '{{count}} สัปดาห์ที่แล้ว',
+ },
+ labels: {
+ deleted: 'ลบแล้ว {{value}}',
+ due: 'ครบกำหนด: {{value}}',
+ reviewed: 'ทบทวนแล้ว: {{value}}',
+ updated: 'อัปเดตแล้ว {{value}}',
+ updatedUppercase: 'อัปเดตแล้ว {{value}}',
+ },
+ relative: {
+ dayAgo_one: '{{count}} วันที่แล้ว',
+ dayAgo_other: '{{count}} วันที่แล้ว',
+ inAMoment: 'อีกสักครู่',
+ inDay_one: 'อีก {{count}} วัน',
+ inDay_other: 'อีก {{count}} วัน',
+ inMonth_one: 'อีก {{count}} เดือน',
+ inMonth_other: 'อีก {{count}} เดือน',
+ inWeek_one: 'อีก {{count}} สัปดาห์',
+ inWeek_other: 'อีก {{count}} สัปดาห์',
+ justNow: 'เมื่อสักครู่',
+ monthAgo_one: '{{count}} เดือนที่แล้ว',
+ monthAgo_other: '{{count}} เดือนที่แล้ว',
+ secondsAgoShort: '{{count}} วิที่แล้ว',
+ minutesAgoShort: '{{count}} นาทีที่แล้ว',
+ hoursAgoShort: '{{count}} ชม.ที่แล้ว',
+ today: 'วันนี้',
+ tomorrow: 'พรุ่งนี้',
+ weekAgo_one: '{{count}} สัปดาห์ที่แล้ว',
+ weekAgo_other: '{{count}} สัปดาห์ที่แล้ว',
+ yesterday: 'เมื่อวาน',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'การทำงานของ {{title}}',
+ createDeck: 'สร้างสำรับ',
+ createNote: 'สร้างโน้ต',
+ deleteDeck: 'ลบสำรับ',
+ editDeck: 'แก้ไขสำรับ',
+ newNote: 'โน้ตใหม่',
+ openDeck: 'เปิดสำรับ {{title}}',
+ saveDeck: 'ไม่สามารถบันทึกสำรับได้',
+ studyNow: 'เรียนตอนนี้',
+ },
+ descriptions: {
+ emptyDeck: 'เพิ่มโน้ตเพื่อให้สำรับนี้มีเนื้อหาสำหรับทบทวน',
+ editorDefault: 'สำรับเรียนแบบโฟกัส',
+ editorVisual: 'เลือกสัญลักษณ์หน้าปกสำหรับสำรับนี้',
+ notesSearchPlaceholder: 'ค้นหาโน้ต…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'การทำงานนี้จะย้าย "{{title}}" ไปที่ถังขยะ คุณสามารถกู้คืนได้ภายหลัง',
+ deleteDeckFallbackDescription: 'การทำงานนี้จะย้ายสำรับนี้ไปที่ถังขยะ คุณสามารถกู้คืนได้ภายหลัง',
+ deleteDeckFallbackTitle: 'ลบสำรับหรือไม่',
+ deleteDeckTitle: 'ลบ "{{title}}" หรือไม่',
+ deleteNoteDescription: 'การทำงานนี้จะย้าย "{{title}}" ไปที่ถังขยะ คุณสามารถกู้คืนได้ภายหลัง',
+ deleteNoteFallbackTitle: 'ลบโน้ตหรือไม่',
+ deleteNoteTitle: 'ลบ "{{title}}" หรือไม่',
+ },
+ empty: {
+ noMatchingNotes: 'ไม่มีโน้ตที่ตรงกัน',
+ noMatchingNotesDescription: 'ไม่มีโน้ตที่ตรงกับ "{{query}}"',
+ thisDeckIsEmpty: 'สำรับนี้ว่างเปล่า',
+ },
+ errors: {
+ couldNotCreateDeck: 'ไม่สามารถสร้างสำรับได้',
+ couldNotDeleteDeck: 'ไม่สามารถลบสำรับได้',
+ couldNotDeleteNote: 'ไม่สามารถลบโน้ตได้',
+ couldNotLoadFolderPath: 'ไม่สามารถโหลดเส้นทางโฟลเดอร์ได้',
+ couldNotSaveDeck: 'ไม่สามารถบันทึกสำรับได้',
+ deckCouldNotLoad: 'ไม่สามารถโหลดสำรับได้',
+ notesCouldNotLoad: 'ไม่สามารถโหลดโน้ตได้',
+ notesMayBeOutOfDate: 'โน้ตอาจล้าสมัย',
+ },
+ fields: {
+ descriptionLabel: 'คำอธิบายสำรับ',
+ descriptionPlaceholder: 'สำรับนี้จะช่วยคุณทบทวนอะไร',
+ namePlaceholder: 'ชื่อสำรับ',
+ untitledDeck: 'สำรับไม่มีชื่อ',
+ untitledDeckLower: 'สำรับไม่มีชื่อ',
+ },
+ labels: {
+ createDeckTitle: 'สร้างสำรับ',
+ deck: 'สำรับ',
+ deckNotesSearch: 'ค้นหาโน้ตในสำรับ',
+ deckOverview: 'ภาพรวมสำรับ',
+ decks: 'สำรับ',
+ due: 'ครบกำหนด',
+ dueToday: 'ครบกำหนดวันนี้',
+ loadingDeck: 'กำลังโหลดสำรับ',
+ mastery: 'ความเชี่ยวชาญ',
+ notes: 'โน้ต',
+ },
+ sort: {
+ ariaLabel: 'เรียงลำดับสำรับ',
+ dueToday: 'ครบกำหนดวันนี้',
+ title: 'ชื่อเรื่อง',
+ updated: 'อัปเดตแล้ว',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'ข้อมูลมีการเปลี่ยนแปลง รีเฟรชแล้วลองอีกครั้ง',
+ forbidden: 'คุณไม่มีสิทธิ์ทำสิ่งนี้',
+ notFound: 'เราไม่พบรายการนี้',
+ offline: 'ไม่สามารถติดต่อบริการได้',
+ timeout: 'ใช้เวลานานเกินไป ลองอีกครั้ง',
+ unauthorized: 'ลงชื่อเข้าใช้เพื่อดำเนินการต่อ',
+ unavailable: 'บริการไม่พร้อมใช้งานชั่วคราว',
+ },
+ fallback: {
+ unexpected: 'ข้อผิดพลาดที่ไม่คาดคิด',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'สร้างโฟลเดอร์',
+ deleteFolder: 'ลบโฟลเดอร์',
+ editFolder: 'แก้ไขโฟลเดอร์',
+ },
+ descriptions: {
+ editorDefault: 'โฟลเดอร์สำหรับสำรับที่เกี่ยวข้องกัน',
+ },
+ dialogs: {
+ deleteFolderDescription: 'การทำงานนี้จะย้าย "{{name}}" ไปที่ถังขยะ คุณสามารถกู้คืนได้ภายหลัง',
+ deleteFolderFallbackDescription: 'การทำงานนี้จะย้ายโฟลเดอร์นี้ไปที่ถังขยะ คุณสามารถกู้คืนได้ภายหลัง',
+ deleteFolderFallbackTitle: 'ลบโฟลเดอร์หรือไม่',
+ deleteFolderTitle: 'ลบ "{{name}}" หรือไม่',
+ },
+ empty: {
+ noMatchesInFolder: 'ไม่มีรายการที่ตรงกันในโฟลเดอร์นี้',
+ noMatchesInFolderDescription: 'ไม่มีโฟลเดอร์ สำรับ หรือโน้ตที่ตรงกับ "{{query}}"',
+ },
+ errors: {
+ couldNotCreateFolder: 'ไม่สามารถสร้างโฟลเดอร์ได้',
+ couldNotDeleteFolder: 'ไม่สามารถลบโฟลเดอร์ได้',
+ couldNotLoadFolderPath: 'ไม่สามารถโหลดเส้นทางโฟลเดอร์ได้',
+ couldNotSaveFolder: 'ไม่สามารถบันทึกโฟลเดอร์ได้',
+ folderCouldNotLoad: 'ไม่สามารถโหลดโฟลเดอร์ได้',
+ },
+ fields: {
+ descriptionLabel: 'คำอธิบายโฟลเดอร์',
+ descriptionPlaceholder: 'อะไรอยู่ในโฟลเดอร์นี้',
+ namePlaceholder: 'ชื่อโฟลเดอร์',
+ untitledFolder: 'โฟลเดอร์ไม่มีชื่อ',
+ },
+ labels: {
+ createFolderTitle: 'สร้างโฟลเดอร์',
+ folder: 'โฟลเดอร์',
+ folders: 'โฟลเดอร์',
+ loadingFolder: 'กำลังโหลดโฟลเดอร์',
+ name: 'ชื่อ',
+ updated: 'อัปเดตแล้ว',
+ },
+ sort: {
+ ariaLabel: 'เรียงลำดับโฟลเดอร์',
+ name: 'ชื่อ',
+ updated: 'อัปเดตแล้ว',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'หากข้อมูลในเครื่องและข้อมูลที่ซิงค์ไม่ตรงกัน รายการจะปรากฏที่นี่',
+ heading: 'สถานะการซิงค์',
+ title: 'ข้อขัดแย้ง',
+ noConflicts: 'ไม่พบข้อขัดแย้ง',
+ },
+ labels: {
+ menu: 'เมนู',
+ },
+ sections: {
+ settings: {
+ description: 'ปรับแต่งสภาพแวดล้อมและค่ากำหนดของคุณ',
+ title: 'การตั้งค่า',
+ },
+ trash: {
+ description: 'กู้คืนหรือลบรายการที่ถูกลบอย่างถาวร',
+ title: 'ถังขยะ',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'ปิดตัวแก้ไข',
+ openActions: 'เปิดการทำงาน',
+ openWorkspaces: 'เปิดพื้นที่ทำงาน',
+ },
+ items: {
+ home: 'หน้าแรก',
+ menu: 'เมนู',
+ primary: 'หลัก',
+ settings: 'การตั้งค่า',
+ spaces: 'พื้นที่',
+ trash: 'ถังขยะ',
+ workspaces: 'พื้นที่ทำงาน',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'เพิ่ม cloze',
+ deleteNote: 'ลบโน้ต',
+ editNote: 'แก้ไขโน้ต',
+ hideDerivedCardsNote: 'ซ่อนโน้ตเกี่ยวกับการ์ดที่สร้างตามมา',
+ openNote: 'เปิด {{title}}',
+ saveNote: 'บันทึกโน้ต',
+ showDerivedCardsNote: 'แสดงโน้ตเกี่ยวกับการ์ดที่สร้างตามมา',
+ },
+ descriptions: {
+ clozeFormat: 'แต่ละส่วนที่ซ่อนจะกลายเป็นการ์ดทบทวนเมื่อคุณบันทึก',
+ clozeFormatPrefix: 'ครอบข้อความที่ซ่อนด้วย',
+ derivedCardsHelper: 'โน้ตคือแหล่งข้อมูลหลักสำหรับการ์ดที่สร้างตามมา',
+ },
+ dialogs: {
+ deleteNoteDescription: 'การทำงานนี้จะย้าย "{{title}}" ไปที่ถังขยะ คุณสามารถกู้คืนได้ภายหลัง',
+ deleteNoteFallbackDescription: 'การทำงานนี้จะย้ายโน้ตนี้ไปที่ถังขยะ คุณสามารถกู้คืนได้ภายหลัง',
+ deleteNoteFallbackTitle: 'ลบโน้ตหรือไม่',
+ deleteNoteTitle: 'ลบ "{{title}}" หรือไม่',
+ },
+ errors: {
+ couldNotCreateNote: 'ไม่สามารถสร้างโน้ตได้',
+ couldNotDeleteNote: 'ไม่สามารถลบโน้ตได้',
+ couldNotSaveNote: 'ไม่สามารถบันทึกโน้ตได้',
+ noteCouldNotLoad: 'ไม่สามารถโหลดโน้ตได้',
+ },
+ fields: {
+ back: 'ด้านหลัง',
+ backPlaceholder: 'ป้อนด้านหลัง',
+ bodyPlaceholder: 'เขียนเนื้อหาโน้ตพร้อม cloze deletions…',
+ front: 'ด้านหน้า',
+ frontPlaceholder: 'ป้อนด้านหน้า',
+ noteBody: 'เนื้อหาโน้ต',
+ title: 'ชื่อเรื่อง',
+ titlePlaceholder: 'เพิ่มชื่อโน้ต',
+ untitledCloze: 'Cloze ไม่มีชื่อ',
+ untitledNote: 'โน้ตไม่มีชื่อ',
+ },
+ labels: {
+ backUppercase: 'ด้านหลัง',
+ basic: 'พื้นฐาน',
+ basicLower: 'พื้นฐาน',
+ basicUppercase: 'พื้นฐาน',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'รูปแบบ Cloze',
+ clozeUppercase: 'CLOZE',
+ deck: 'สำรับ',
+ derivedCards: 'การ์ดที่สร้างตามมา',
+ due: 'ครบกำหนด',
+ frontUppercase: 'ด้านหน้า',
+ inProgress: 'กำลังดำเนินการ',
+ inProgressUppercase: 'กำลังดำเนินการ',
+ loadingNote: 'กำลังโหลดโน้ต',
+ loadingNoteEditor: 'กำลังโหลดตัวแก้ไขโน้ต',
+ markdownFormatting: 'การจัดรูปแบบ Markdown',
+ mastered: 'เชี่ยวชาญแล้ว',
+ masteredUppercase: 'เชี่ยวชาญแล้ว',
+ newNote: 'โน้ตใหม่',
+ noteBody: 'เนื้อหาโน้ต',
+ noteContent: 'เนื้อหาโน้ต',
+ noteDetails: 'รายละเอียดโน้ต',
+ noteMetadata: 'เมตาดาต้าโน้ต',
+ noteType: 'ประเภทโน้ต',
+ notes: 'โน้ต',
+ reviewed: 'ทบทวนแล้ว',
+ studyProgress: 'ความคืบหน้าการเรียน',
+ studyProgressUppercase: 'ความคืบหน้าการเรียน',
+ titleUppercase: 'ชื่อเรื่อง',
+ updated: 'อัปเดตแล้ว',
+ },
+ sort: {
+ ariaLabel: 'เรียงลำดับโน้ต',
+ title: 'ชื่อเรื่อง',
+ updated: 'อัปเดตแล้ว',
+ },
+ toolbar: {
+ bold: 'ตัวหนา',
+ italic: 'ตัวเอียง',
+ link: 'ลิงก์',
+ list: 'รายการ',
+ },
+ },
+ review: {
+ actions: {
+ again: 'อีกครั้ง',
+ backToDeck: 'กลับไปที่สำรับ',
+ continueReview: 'ทบทวนต่อ',
+ easy: 'ง่าย',
+ good: 'ดี',
+ hard: 'ยาก',
+ newNote: 'โน้ตใหม่',
+ showAnswer: 'แสดงคำตอบ',
+ },
+ errors: {
+ couldNotGradeCard: 'ไม่สามารถให้คะแนนการ์ดได้',
+ reviewCouldNotLoad: 'ไม่สามารถโหลดการทบทวนได้',
+ reviewCouldNotStart: 'ไม่สามารถเริ่มการทบทวนได้',
+ summaryCouldNotLoad: 'ไม่สามารถโหลดสรุปการทบทวนได้',
+ summaryNotAvailable: 'สรุปการทบทวนไม่พร้อมใช้งาน',
+ summaryNotComplete: 'การทบทวนนี้ยังไม่เสร็จสมบูรณ์',
+ },
+ labels: {
+ cardsReviewed: 'การ์ดที่ทบทวนแล้ว',
+ deck: 'สำรับ',
+ duration: 'ระยะเวลา',
+ loadingReview: 'กำลังโหลดการทบทวน',
+ loadingSummary: 'กำลังโหลดสรุป',
+ progress: 'ความคืบหน้าการทบทวน',
+ review: 'ทบทวน',
+ reviewComplete: 'ทบทวนเสร็จแล้ว',
+ reviewed_one: 'ทบทวนแล้ว {{count}}',
+ reviewed_other: 'ทบทวนแล้ว {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} ชม. {{minutes}} นาที',
+ durationMinutes: '{{minutes}} นาที',
+ durationSeconds: '{{seconds}} วิ',
+ saved: 'บันทึกความคืบหน้าของคุณลงในสำรับนี้แล้ว',
+ },
+ unavailable: {
+ description: 'เพิ่มโน้ตเพื่อให้สำรับนี้เข้าสู่คิวทบทวนได้',
+ title: 'ไม่มีการ์ดให้ทบทวน',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'ล้างการค้นหา',
+ },
+ empty: {
+ noMatchesInWorkspace: 'ไม่มีรายการที่ตรงกันในพื้นที่ทำงานนี้',
+ noMatchesInWorkspaceDescription: 'ไม่มีโฟลเดอร์ สำรับ หรือโน้ตที่ตรงกับ "{{query}}"',
+ },
+ errors: {
+ couldNotComplete: 'ไม่สามารถค้นหาให้เสร็จได้',
+ },
+ labels: {
+ results: 'ผลการค้นหา',
+ resultsFor: 'ผลลัพธ์สำหรับ "{{query}}"',
+ searchingContent: 'กำลังค้นหาเนื้อหา',
+ },
+ resultGroups: {
+ deck: 'สำรับ',
+ folder: 'โฟลเดอร์',
+ note: 'โน้ต',
+ },
+ resultKinds: {
+ deck: 'สำรับ',
+ folder: 'โฟลเดอร์',
+ note: 'โน้ต',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'รีเซ็ตการตั้งค่าทั้งหมด',
+ resetSettings: 'รีเซ็ตการตั้งค่า',
+ resetToDefaults: 'กลับเป็นค่าเริ่มต้น',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'วาง JSON ที่ถูกต้องพร้อมค่าตัวเลข 21 ค่า',
+ fsrsErrorInvalidParams_one: 'ป้อนอาร์เรย์ JSON ที่มีตัวเลขจำกัดจำนวน {{count}} ค่า',
+ fsrsErrorInvalidParams_other: 'ป้อนอาร์เรย์ JSON ที่มีตัวเลขจำกัดจำนวน {{count}} ค่า',
+ fsrsHelper: 'นี่คือการตั้งค่าขั้นสูง ค่าต้องคงลำดับเดิม',
+ fsrsJsonLabel: 'JSON พารามิเตอร์ FSRS',
+ fsrsTitle: 'แก้ไขพารามิเตอร์ FSRS',
+ fsrsDescription: 'วางอาร์เรย์ JSON ที่มีตัวเลข 21 ค่าเพื่อแทนที่น้ำหนักของตัวจัดตาราง',
+ resetDescription: 'การทำงานนี้จะคืนค่าเขตเวลา ขีดจำกัดการเรียน และการตั้งค่า FSRS',
+ resetDescriptionWithLanguage: 'การทำงานนี้จะคืนค่าภาษา เขตเวลา ขีดจำกัดการเรียน และการตั้งค่า FSRS',
+ resetTitle: 'รีเซ็ตการตั้งค่าทั้งหมดหรือไม่',
+ timezoneDescription: 'ค้นหาเมืองหรือตัวระบุเขตเวลา',
+ timezoneSearchLabel: 'ค้นหาเขตเวลา',
+ timezoneSearchPlaceholder: 'ค้นหาเขตเวลา…',
+ timezoneTitle: 'เลือกเขตเวลา',
+ },
+ errors: {
+ couldNotResetSettings: 'ไม่สามารถรีเซ็ตการตั้งค่าได้',
+ couldNotSaveSettings: 'ไม่สามารถบันทึกการตั้งค่าได้',
+ settingsCouldNotLoad: 'ไม่สามารถโหลดการตั้งค่าได้',
+ settingsUnavailable: 'การตั้งค่าไม่พร้อมใช้งาน',
+ },
+ labels: {
+ appearance: 'รูปลักษณ์',
+ automatic: 'อัตโนมัติ',
+ fsrsParameters: 'พารามิเตอร์ FSRS',
+ general: 'ทั่วไป',
+ language: 'ภาษา',
+ loadingSettings: 'กำลังโหลดการตั้งค่า',
+ masteryHorizon: 'ช่วงเวลาความเชี่ยวชาญ',
+ newCardOrder: 'ลำดับการ์ดใหม่',
+ newCardsPerDay: 'การ์ดใหม่ต่อวัน',
+ reviewCardsPerDay: 'การ์ดทบทวนต่อวัน',
+ savingSettings: 'กำลังบันทึกการตั้งค่า',
+ schedule: 'ตารางเวลา',
+ searchNoTimezones: 'ไม่มีเขตเวลาที่ตรงกัน',
+ settings: 'การตั้งค่า',
+ settingsReset: 'รีเซ็ตการตั้งค่าแล้ว',
+ study: 'การเรียน',
+ targetRecallProbability: 'ความน่าจะเป็นเป้าหมายในการจำได้',
+ theme: 'ธีม',
+ timezone: 'เขตเวลา',
+ },
+ options: {
+ languageEnUs: 'อังกฤษ (สหรัฐฯ)',
+ newCardsAfterReviews: 'หลังการทบทวน',
+ newCardsBeforeReviews: 'ก่อนการทบทวน',
+ newCardsMixed: 'ผสม',
+ themeDark: 'มืด',
+ themeLight: 'สว่าง',
+ themeSystem: 'ระบบ',
+ timezoneSystem: 'ใช้เขตเวลาของระบบ',
+ },
+ rows: {
+ fsrsDescription: 'น้ำหนักโมเดลขั้นสูง',
+ languageDescription: 'ภาษาของอินเทอร์เฟซ',
+ masteryHorizonDescription: 'จำนวนวันที่การ์ดต้องยังจำได้ที่หรือสูงกว่าความน่าจะเป็นเป้าหมายเพื่อให้นับว่าเชี่ยวชาญ',
+ newCardOrderDescription: 'ลำดับการ์ดใหม่เทียบกับการทบทวน',
+ newCardsPerDayDescription: 'จำนวนการ์ดใหม่สูงสุดต่อวัน',
+ reviewCardsPerDayDescription: 'จำนวนการ์ดทบทวนสูงสุดต่อวัน',
+ targetRecallProbabilityDescription: 'ความน่าจะเป็นขั้นต่ำในการจำได้ในการทบทวนที่กำหนดไว้ครั้งถัดไป',
+ timezoneDescription: 'ใช้เขตเวลาอัตโนมัติหรือเลือกเมือง',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'ลบถาวร',
+ empty: 'ล้าง',
+ emptyTrash: 'ล้างถังขยะ',
+ restore: 'กู้คืน',
+ restoringItem: 'กำลังกู้คืน {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'การทำงานนี้จะลบ "{{title}}" อย่างถาวร และย้อนกลับไม่ได้',
+ deleteItemFallbackDescription: 'การทำงานนี้จะลบรายการนี้อย่างถาวร และย้อนกลับไม่ได้',
+ deleteItemFallbackTitle: 'ลบรายการหรือไม่',
+ deleteItemTitle: 'ลบ "{{title}}" หรือไม่',
+ emptyTrashDescription: 'การทำงานนี้จะลบทุกอย่างในถังขยะอย่างถาวร และย้อนกลับไม่ได้',
+ emptyTrashTitle: 'ล้างถังขยะหรือไม่',
+ },
+ empty: {
+ description: 'รายการที่คุณลบจะปรากฏที่นี่ก่อนถูกลบถาวร',
+ title: 'ถังขยะว่างเปล่า',
+ },
+ errors: {
+ couldNotDeleteItem: 'ไม่สามารถลบรายการได้',
+ couldNotEmptyTrash: 'ไม่สามารถล้างถังขยะได้',
+ couldNotRestoreItem: 'ไม่สามารถกู้คืนรายการได้',
+ trashCouldNotLoad: 'ไม่สามารถโหลดถังขยะได้',
+ trashMayBeOutOfDate: 'ถังขยะอาจล้าสมัย',
+ },
+ labels: {
+ deletedAge: 'ลบแล้ว {{value}}',
+ itemCount_one: '{{count}} รายการ',
+ itemCount_other: '{{count}} รายการ',
+ lastEmptied: 'ล้างครั้งล่าสุด {{value}}',
+ loadingTrash: 'กำลังโหลดถังขยะ',
+ originalLocation: 'ตำแหน่งเดิม: {{location}}',
+ title: 'ถังขยะ',
+ trashActions: 'การทำงานในถังขยะของ {{title}}',
+ },
+ kinds: {
+ deck: 'สำรับ',
+ folder: 'โฟลเดอร์',
+ note: 'โน้ต',
+ workspace: 'พื้นที่ทำงาน',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'สร้างพื้นที่ทำงาน',
+ deleteWorkspace: 'ลบพื้นที่ทำงาน',
+ editWorkspace: 'แก้ไขพื้นที่ทำงาน',
+ newWorkspace: 'พื้นที่ทำงานใหม่',
+ openWorkspace: 'เปิด {{title}}',
+ openingWorkspace: 'กำลังเปิด {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'บริบทการเรียน',
+ editorVisual: 'เลือกจุดยึดภาพสำหรับพื้นที่ทำงานนี้',
+ emptyList: 'แยกสำรับ โน้ต และคิวทบทวนตามบริบทการเรียน',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'การทำงานนี้จะย้าย "{{title}}" ไปที่ถังขยะ คุณสามารถกู้คืนได้ภายหลัง',
+ deleteWorkspaceFallbackDescription: 'การทำงานนี้จะย้ายพื้นที่ทำงานนี้ไปที่ถังขยะ คุณสามารถกู้คืนได้ภายหลัง',
+ deleteWorkspaceFallbackTitle: 'ลบพื้นที่ทำงานหรือไม่',
+ deleteWorkspaceTitle: 'ลบ "{{title}}" หรือไม่',
+ },
+ empty: {
+ startWithWorkspace: 'เริ่มด้วยพื้นที่ทำงาน',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'ไม่สามารถสร้างพื้นที่ทำงานได้',
+ couldNotDeleteWorkspace: 'ไม่สามารถลบพื้นที่ทำงานได้',
+ couldNotOpenWorkspace: 'ไม่สามารถเปิดพื้นที่ทำงานได้',
+ couldNotSaveWorkspace: 'ไม่สามารถบันทึกพื้นที่ทำงานได้',
+ workspaceCouldNotLoad: 'ไม่สามารถโหลดพื้นที่ทำงานได้',
+ workspacesCouldNotLoad: 'ไม่สามารถโหลดพื้นที่ทำงานได้',
+ },
+ fields: {
+ descriptionLabel: 'คำอธิบายพื้นที่ทำงาน',
+ descriptionPlaceholder: 'อะไรอยู่ในพื้นที่ทำงานนี้',
+ namePlaceholder: 'ชื่อพื้นที่ทำงาน',
+ untitledWorkspace: 'พื้นที่ทำงานไม่มีชื่อ',
+ },
+ labels: {
+ createWorkspaceTitle: 'สร้างพื้นที่ทำงาน',
+ loadingWorkspaces: 'กำลังโหลดพื้นที่ทำงาน',
+ workspace: 'พื้นที่ทำงาน',
+ workspaces: 'พื้นที่ทำงาน',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/tr.ts b/ui/src/core/i18n/resources/tr.ts
new file mode 100644
index 0000000..2d8c7d7
--- /dev/null
+++ b/ui/src/core/i18n/resources/tr.ts
@@ -0,0 +1,623 @@
+export const tr = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Tekrar deneyin. Bu devam ederse Clear uygulamasını yeniden açın.',
+ title: 'Başlatılamadı',
+ },
+ loadingTitle: 'Çalışma alanınız hazırlanıyor',
+ },
+ common: {
+ actions: {
+ back: 'Geri',
+ cancel: 'İptal',
+ checkAgain: 'Tekrar kontrol et',
+ close: 'Kapat',
+ create: 'Oluştur',
+ delete: 'Sil',
+ dismissError: 'Hatayı kapat',
+ dismissStatus: 'Durumu kapat',
+ edit: 'Düzenle',
+ itemActions: '{{title}} işlemleri',
+ reset: 'Sıfırla',
+ review: 'Tekrar et',
+ save: 'Kaydet',
+ saveChanges: 'Değişiklikleri kaydet',
+ tryAgain: 'Tekrar dene',
+ },
+ labels: {
+ active: 'Etkin',
+ clear: 'Clear',
+ custom: 'Özel',
+ default: 'Varsayılan',
+ loadingEditor: 'Düzenleyici yükleniyor',
+ name: 'Ad',
+ completedTask: 'Tamamlanan görev',
+ description: 'Açıklama',
+ incompleteTask: 'Tamamlanmayan görev',
+ percentageInput: '{{label}} yüzdesi',
+ visual: 'Görsel',
+ },
+ status: {
+ actionFailed: 'İşlem başarısız oldu',
+ actionInProgress: 'İşlem devam ediyor',
+ },
+ sort: {
+ ascending: 'Artan',
+ column: 'Sütun',
+ descending: 'Azalan',
+ direction: 'Yön',
+ sort: 'Sırala',
+ },
+ search: {
+ label: 'Ara',
+ },
+ visualPicker: {
+ allLucideIcons: 'Tüm Lucide simgeleri',
+ browseIconsFor: '{{label}} için simgelere göz atın veya arayın.',
+ chooseIcon: 'Simge seç',
+ iconPicker: '{{label}} simge seçici',
+ iconSearch: '{{label}} simge araması',
+ iconsCouldNotLoad: 'Simgeler yüklenemedi.',
+ loadingIcons: 'Simgeler yükleniyor',
+ loadingMoreIcons: 'Daha fazla simge yükleniyor',
+ moreIcons: 'Daha fazla simge',
+ noIconsMatch: '"{{query}}" ile eşleşen simge yok.',
+ searchIconsPlaceholder: 'Simge ara…',
+ selectedIcon: '{{label}} seçildi',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Oluştur',
+ newDeck: 'Yeni deste',
+ newFolder: 'Yeni klasör',
+ },
+ descriptions: {
+ defaultWorkspace: 'Desteleri, klasörleri ve notları bir arada tutun.',
+ emptyWorkspace: 'Bir deste oluşturun, ardından tekrar sıranızı kurmak için notlar ekleyin.',
+ emptyFolder: 'Bir deste oluşturun, ardından bir tekrar sırası kurmak için notlar ekleyin.',
+ searchPlaceholder: 'Klasör, deste ve not ara…',
+ },
+ empty: {
+ createFirstDeck: 'İlk destenizi oluşturun',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Deste silinemedi',
+ couldNotDeleteFolder: 'Klasör silinemedi',
+ couldNotDeleteWorkspace: 'Çalışma alanı silinemedi',
+ dashboardCouldNotOpen: 'Panel açılamadı',
+ decksCouldNotLoad: 'Desteler yüklenemedi',
+ decksMayBeOutOfDate: 'Desteler güncel olmayabilir',
+ foldersCouldNotLoad: 'Klasörler yüklenemedi',
+ foldersMayBeOutOfDate: 'Klasörler güncel olmayabilir',
+ workspaceCouldNotLoad: 'Çalışma alanı yüklenemedi',
+ },
+ labels: {
+ dashboard: 'Panel',
+ loadingDashboard: 'Panel yükleniyor',
+ newItem: 'Yeni öğe',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Tarih kullanılamıyor',
+ },
+ age: {
+ dayAgo_one: '{{count}} gün önce',
+ dayAgo_other: '{{count}} gün önce',
+ hourAgo_one: '{{count}} saat önce',
+ hourAgo_other: '{{count}} saat önce',
+ justNow: 'az önce',
+ minuteAgo_one: '{{count}} dakika önce',
+ minuteAgo_other: '{{count}} dakika önce',
+ unavailable: 'tarih kullanılamıyor',
+ weekAgo_one: '{{count}} hafta önce',
+ weekAgo_other: '{{count}} hafta önce',
+ },
+ labels: {
+ deleted: '{{value}} silindi',
+ due: 'Sıra zamanı: {{value}}',
+ reviewed: 'Tekrarlandı: {{value}}',
+ updated: '{{value}} güncellendi',
+ updatedUppercase: '{{value}} GÜNCELLENDİ',
+ },
+ relative: {
+ dayAgo_one: '{{count}} gün önce',
+ dayAgo_other: '{{count}} gün önce',
+ inAMoment: 'Birazdan',
+ inDay_one: '{{count}} gün içinde',
+ inDay_other: '{{count}} gün içinde',
+ inMonth_one: '{{count}} ay içinde',
+ inMonth_other: '{{count}} ay içinde',
+ inWeek_one: '{{count}} hafta içinde',
+ inWeek_other: '{{count}} hafta içinde',
+ justNow: 'Az önce',
+ monthAgo_one: '{{count}} ay önce',
+ monthAgo_other: '{{count}} ay önce',
+ secondsAgoShort: '{{count}} sn önce',
+ minutesAgoShort: '{{count}} dk önce',
+ hoursAgoShort: '{{count}} sa önce',
+ today: 'Bugün',
+ tomorrow: 'Yarın',
+ weekAgo_one: '{{count}} hafta önce',
+ weekAgo_other: '{{count}} hafta önce',
+ yesterday: 'Dün',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: '{{title}} işlemleri',
+ createDeck: 'Deste oluştur',
+ createNote: 'Not oluştur',
+ deleteDeck: 'Desteyi sil',
+ editDeck: 'Desteyi düzenle',
+ newNote: 'Yeni not',
+ openDeck: '{{title}} destesini aç',
+ saveDeck: 'Deste kaydedilemedi',
+ studyNow: 'Şimdi çalış',
+ },
+ descriptions: {
+ emptyDeck: 'Bu destede tekrar edilecek materyal olması için bir not ekleyin.',
+ editorDefault: 'Odaklı çalışma destesi.',
+ editorVisual: 'Bu deste için bir kapak glifi seçin.',
+ notesSearchPlaceholder: 'Not ara…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Bu, "{{title}}" öğesini Çöp Kutusu\'na taşır. Daha sonra geri yükleyebilirsiniz.',
+ deleteDeckFallbackDescription: 'Bu, bu desteyi Çöp Kutusu\'na taşır. Daha sonra geri yükleyebilirsiniz.',
+ deleteDeckFallbackTitle: 'Deste silinsin mi?',
+ deleteDeckTitle: '"{{title}}" silinsin mi?',
+ deleteNoteDescription: 'Bu, "{{title}}" öğesini Çöp Kutusu\'na taşır. Daha sonra geri yükleyebilirsiniz.',
+ deleteNoteFallbackTitle: 'Not silinsin mi?',
+ deleteNoteTitle: '"{{title}}" silinsin mi?',
+ },
+ empty: {
+ noMatchingNotes: 'Eşleşen not yok',
+ noMatchingNotesDescription: '"{{query}}" ile eşleşen not yok.',
+ thisDeckIsEmpty: 'Bu deste boş',
+ },
+ errors: {
+ couldNotCreateDeck: 'Deste oluşturulamadı',
+ couldNotDeleteDeck: 'Deste silinemedi',
+ couldNotDeleteNote: 'Not silinemedi',
+ couldNotLoadFolderPath: 'Klasör yolu yüklenemedi',
+ couldNotSaveDeck: 'Deste kaydedilemedi',
+ deckCouldNotLoad: 'Deste yüklenemedi',
+ notesCouldNotLoad: 'Notlar yüklenemedi',
+ notesMayBeOutOfDate: 'Notlar güncel olmayabilir',
+ },
+ fields: {
+ descriptionLabel: 'Deste açıklaması',
+ descriptionPlaceholder: 'Bu deste neyi tekrar etmenize yardımcı olacak?',
+ namePlaceholder: 'Deste adı',
+ untitledDeck: 'Adsız deste',
+ untitledDeckLower: 'adsız deste',
+ },
+ labels: {
+ createDeckTitle: 'Deste oluştur',
+ deck: 'Deste',
+ deckNotesSearch: 'Deste notlarında ara',
+ deckOverview: 'Deste özeti',
+ decks: 'Desteler',
+ due: 'Sırası geldi',
+ dueToday: 'Bugün sırası geldi',
+ loadingDeck: 'Deste yükleniyor',
+ mastery: 'Uzmanlık',
+ notes: 'Notlar',
+ },
+ sort: {
+ ariaLabel: 'Desteleri sırala',
+ dueToday: 'Bugün sırası geldi',
+ title: 'Başlık',
+ updated: 'Güncellendi',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Veriler değişti. Yenileyin ve tekrar deneyin.',
+ forbidden: 'Bunu yapma izniniz yok.',
+ notFound: 'Bu öğeyi bulamadık.',
+ offline: 'Hizmete ulaşılamıyor.',
+ timeout: 'Bu işlem çok uzun sürdü. Tekrar deneyin.',
+ unauthorized: 'Devam etmek için oturum açın.',
+ unavailable: 'Hizmet geçici olarak kullanılamıyor.',
+ },
+ fallback: {
+ unexpected: 'Beklenmeyen hata',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Klasör oluştur',
+ deleteFolder: 'Klasörü sil',
+ editFolder: 'Klasörü düzenle',
+ },
+ descriptions: {
+ editorDefault: 'İlgili desteler için klasör.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Bu, "{{name}}" öğesini Çöp Kutusu\'na taşır. Daha sonra geri yükleyebilirsiniz.',
+ deleteFolderFallbackDescription: 'Bu, bu klasörü Çöp Kutusu\'na taşır. Daha sonra geri yükleyebilirsiniz.',
+ deleteFolderFallbackTitle: 'Klasör silinsin mi?',
+ deleteFolderTitle: '"{{name}}" silinsin mi?',
+ },
+ empty: {
+ noMatchesInFolder: 'Bu klasörde eşleşme yok',
+ noMatchesInFolderDescription: '"{{query}}" ile eşleşen klasör, deste veya not yok.',
+ },
+ errors: {
+ couldNotCreateFolder: 'Klasör oluşturulamadı',
+ couldNotDeleteFolder: 'Klasör silinemedi',
+ couldNotLoadFolderPath: 'Klasör yolu yüklenemedi',
+ couldNotSaveFolder: 'Klasör kaydedilemedi',
+ folderCouldNotLoad: 'Klasör yüklenemedi',
+ },
+ fields: {
+ descriptionLabel: 'Klasör açıklaması',
+ descriptionPlaceholder: 'Bu klasöre neler ait?',
+ namePlaceholder: 'Klasör adı',
+ untitledFolder: 'Adsız klasör',
+ },
+ labels: {
+ createFolderTitle: 'Klasör oluştur',
+ folder: 'Klasör',
+ folders: 'Klasörler',
+ loadingFolder: 'Klasör yükleniyor',
+ name: 'Ad',
+ updated: 'Güncellendi',
+ },
+ sort: {
+ ariaLabel: 'Klasörleri sırala',
+ name: 'Ad',
+ updated: 'Güncellendi',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Yerel ve senkronize veriler farklılaşırsa öğe burada görünür.',
+ heading: 'Senkronizasyon durumu',
+ title: 'Çakışmalar',
+ noConflicts: 'Çakışma bulunamadı',
+ },
+ labels: {
+ menu: 'Menü',
+ },
+ sections: {
+ settings: {
+ description: 'Ortamınızı ve tercihlerinizi kişiselleştirin',
+ title: 'Ayarlar',
+ },
+ trash: {
+ description: 'Kaldırılan öğeleri geri yükleyin veya kalıcı olarak silin',
+ title: 'Çöp Kutusu',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Düzenleyiciyi kapat',
+ openActions: 'İşlemleri aç',
+ openWorkspaces: 'Çalışma alanlarını aç',
+ },
+ items: {
+ home: 'Ana sayfa',
+ menu: 'Menü',
+ primary: 'Birincil',
+ settings: 'Ayarlar',
+ spaces: 'Alanlar',
+ trash: 'Çöp Kutusu',
+ workspaces: 'Çalışma alanları',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Cloze ekle',
+ deleteNote: 'Notu sil',
+ editNote: 'Notu düzenle',
+ hideDerivedCardsNote: 'Türetilen kart notunu gizle',
+ openNote: '{{title}} aç',
+ saveNote: 'Notu kaydet',
+ showDerivedCardsNote: 'Türetilen kart notunu göster',
+ },
+ descriptions: {
+ clozeFormat: 'Her gizli bölüm, kaydettiğinizde bir tekrar kartına dönüşür.',
+ clozeFormatPrefix: 'Gizli metni şununla sarın:',
+ derivedCardsHelper: 'Notlar, türetilen kartlar için doğruluk kaynağıdır.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Bu, "{{title}}" öğesini Çöp Kutusu\'na taşır. Daha sonra geri yükleyebilirsiniz.',
+ deleteNoteFallbackDescription: 'Bu, bu notu Çöp Kutusu\'na taşır. Daha sonra geri yükleyebilirsiniz.',
+ deleteNoteFallbackTitle: 'Not silinsin mi?',
+ deleteNoteTitle: '"{{title}}" silinsin mi?',
+ },
+ errors: {
+ couldNotCreateNote: 'Not oluşturulamadı',
+ couldNotDeleteNote: 'Not silinemedi',
+ couldNotSaveNote: 'Not kaydedilemedi',
+ noteCouldNotLoad: 'Not yüklenemedi',
+ },
+ fields: {
+ back: 'Arka',
+ backPlaceholder: 'Arka yüzü girin',
+ bodyPlaceholder: 'Not gövdesini cloze silmeleriyle yazın…',
+ front: 'Ön',
+ frontPlaceholder: 'Ön yüzü girin',
+ noteBody: 'Not gövdesi',
+ title: 'Başlık',
+ titlePlaceholder: 'Not başlığı ekle',
+ untitledCloze: 'Adsız cloze',
+ untitledNote: 'Adsız not',
+ },
+ labels: {
+ backUppercase: 'ARKA',
+ basic: 'Temel',
+ basicLower: 'temel',
+ basicUppercase: 'TEMEL',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Cloze biçimi',
+ clozeUppercase: 'CLOZE',
+ deck: 'Deste',
+ derivedCards: 'TÜRETİLEN KARTLAR',
+ due: 'Sırası geldi',
+ frontUppercase: 'ÖN',
+ inProgress: 'Devam ediyor',
+ inProgressUppercase: 'DEVAM EDİYOR',
+ loadingNote: 'Not yükleniyor',
+ loadingNoteEditor: 'Not düzenleyici yükleniyor',
+ markdownFormatting: 'Markdown biçimlendirme',
+ mastered: 'Uzmanlaşıldı',
+ masteredUppercase: 'UZMANLAŞILDI',
+ newNote: 'Yeni not',
+ noteBody: 'NOT GÖVDESİ',
+ noteContent: 'Not içeriği',
+ noteDetails: 'Not ayrıntıları',
+ noteMetadata: 'Not meta verileri',
+ noteType: 'Not türü',
+ notes: 'Notlar',
+ reviewed: 'Tekrarlandı',
+ studyProgress: 'Çalışma ilerlemesi',
+ studyProgressUppercase: 'ÇALIŞMA İLERLEMESİ',
+ titleUppercase: 'BAŞLIK',
+ updated: 'Güncellendi',
+ },
+ sort: {
+ ariaLabel: 'Notları sırala',
+ title: 'Başlık',
+ updated: 'Güncellendi',
+ },
+ toolbar: {
+ bold: 'Kalın',
+ italic: 'İtalik',
+ link: 'Bağlantı',
+ list: 'Liste',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Tekrar',
+ backToDeck: 'Desteye dön',
+ continueReview: 'Tekrara devam et',
+ easy: 'Kolay',
+ good: 'İyi',
+ hard: 'Zor',
+ newNote: 'Yeni not',
+ showAnswer: 'Yanıtı göster',
+ },
+ errors: {
+ couldNotGradeCard: 'Kart değerlendirilemedi',
+ reviewCouldNotLoad: 'Tekrar yüklenemedi',
+ reviewCouldNotStart: 'Tekrar başlatılamadı',
+ summaryCouldNotLoad: 'Tekrar özeti yüklenemedi',
+ summaryNotAvailable: 'Tekrar özeti kullanılamıyor',
+ summaryNotComplete: 'Bu tekrar henüz tamamlanmadı.',
+ },
+ labels: {
+ cardsReviewed: 'Tekrar edilen kartlar',
+ deck: 'Deste',
+ duration: 'Süre',
+ loadingReview: 'Tekrar yükleniyor',
+ loadingSummary: 'Özet yükleniyor',
+ progress: 'Tekrar ilerlemesi',
+ review: 'Tekrar',
+ reviewComplete: 'Tekrar tamamlandı',
+ reviewed_one: '{{count}} tekrarlandı',
+ reviewed_other: '{{count}} tekrarlandı',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} sa {{minutes}} dk',
+ durationMinutes: '{{minutes}} dk',
+ durationSeconds: '{{seconds}} sn',
+ saved: 'İlerlemeniz bu desteye kaydedildi.',
+ },
+ unavailable: {
+ description: 'Bu destenin tekrar sırasına girebilmesi için bir not ekleyin.',
+ title: 'Tekrar edilecek kart yok',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Aramayı temizle',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Bu çalışma alanında eşleşme yok',
+ noMatchesInWorkspaceDescription: '"{{query}}" ile eşleşen klasör, deste veya not yok.',
+ },
+ errors: {
+ couldNotComplete: 'Arama tamamlanamadı',
+ },
+ labels: {
+ results: 'Arama sonuçları',
+ resultsFor: '"{{query}}" için sonuçlar',
+ searchingContent: 'İçerik aranıyor',
+ },
+ resultGroups: {
+ deck: 'Desteler',
+ folder: 'Klasörler',
+ note: 'Notlar',
+ },
+ resultKinds: {
+ deck: 'deste',
+ folder: 'klasör',
+ note: 'not',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Tüm ayarları sıfırla',
+ resetSettings: 'Ayarları sıfırla',
+ resetToDefaults: 'Varsayılanlara dön',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: '21 sayısal değer içeren geçerli JSON yapıştırın.',
+ fsrsErrorInvalidParams_one: 'Tam olarak {{count}} sonlu sayı içeren bir JSON dizisi girin.',
+ fsrsErrorInvalidParams_other: 'Tam olarak {{count}} sonlu sayı içeren bir JSON dizisi girin.',
+ fsrsHelper: 'Bu bir uzman geçersiz kılmasıdır. Değerler sırasını korumalıdır.',
+ fsrsJsonLabel: 'FSRS Parametreleri JSON',
+ fsrsTitle: 'FSRS parametrelerini düzenle',
+ fsrsDescription: 'Zamanlayıcı ağırlıklarını geçersiz kılmak için 21 sayı içeren bir JSON dizisi yapıştırın.',
+ resetDescription: 'Bu, saat dilimi, çalışma sınırları ve FSRS ayarlarını geri yükler.',
+ resetDescriptionWithLanguage: 'Bu, dil, saat dilimi, çalışma sınırları ve FSRS ayarlarını geri yükler.',
+ resetTitle: 'Tüm ayarlar sıfırlansın mı?',
+ timezoneDescription: 'Bir şehir veya saat dilimi tanımlayıcısı arayın.',
+ timezoneSearchLabel: 'Saat dilimlerinde ara',
+ timezoneSearchPlaceholder: 'Saat dilimlerinde ara…',
+ timezoneTitle: 'Saat dilimi seç',
+ },
+ errors: {
+ couldNotResetSettings: 'Ayarlar sıfırlanamadı',
+ couldNotSaveSettings: 'Ayarlar kaydedilemedi',
+ settingsCouldNotLoad: 'Ayarlar yüklenemedi',
+ settingsUnavailable: 'Ayarlar kullanılamıyor.',
+ },
+ labels: {
+ appearance: 'Görünüm',
+ automatic: 'Otomatik',
+ fsrsParameters: 'FSRS Parametreleri',
+ general: 'Genel',
+ language: 'Dil',
+ loadingSettings: 'Ayarlar yükleniyor',
+ masteryHorizon: 'Uzmanlık ufku',
+ newCardOrder: 'Yeni kart sırası',
+ newCardsPerDay: 'Günlük yeni kart',
+ reviewCardsPerDay: 'Günlük tekrar kartı',
+ savingSettings: 'Ayarlar kaydediliyor',
+ schedule: 'Program',
+ searchNoTimezones: 'Eşleşen saat dilimi yok.',
+ settings: 'Ayarlar',
+ settingsReset: 'Ayarlar sıfırlandı',
+ study: 'Çalışma',
+ targetRecallProbability: 'Hedef hatırlama olasılığı',
+ theme: 'Tema',
+ timezone: 'Saat dilimi',
+ },
+ options: {
+ languageEnUs: 'İngilizce (ABD)',
+ newCardsAfterReviews: 'Tekrarlardan sonra',
+ newCardsBeforeReviews: 'Tekrarlardan önce',
+ newCardsMixed: 'Karışık',
+ themeDark: 'Koyu',
+ themeLight: 'Açık',
+ themeSystem: 'Sistem',
+ timezoneSystem: 'Sistem saat dilimini kullan',
+ },
+ rows: {
+ fsrsDescription: 'Uzman model ağırlıkları',
+ languageDescription: 'Arayüz dili',
+ masteryHorizonDescription: 'Bir kartın öğrenilmiş sayılması için hedef olasılıkta veya üstünde hatırlanabilir kalması gereken gün sayısı',
+ newCardOrderDescription: 'Yeni kartların tekrarlara göre sırası',
+ newCardsPerDayDescription: 'Günlük maksimum yeni kart',
+ reviewCardsPerDayDescription: 'Günlük maksimum tekrar kartı',
+ targetRecallProbabilityDescription: 'Bir sonraki planlı tekrarda minimum hatırlama olasılığı',
+ timezoneDescription: 'Otomatik saat dilimini kullanın veya bir şehir seçin.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Kalıcı olarak sil',
+ empty: 'Boşalt',
+ emptyTrash: 'Çöp Kutusu\'nu boşalt',
+ restore: 'Geri yükle',
+ restoringItem: '{{title}} geri yükleniyor',
+ },
+ dialogs: {
+ deleteItemDescription: 'Bu, "{{title}}" öğesini kalıcı olarak siler. Bu işlem geri alınamaz.',
+ deleteItemFallbackDescription: 'Bu, bu öğeyi kalıcı olarak siler. Bu işlem geri alınamaz.',
+ deleteItemFallbackTitle: 'Öğe silinsin mi?',
+ deleteItemTitle: '"{{title}}" silinsin mi?',
+ emptyTrashDescription: 'Bu, Çöp Kutusu\'ndaki her şeyi kalıcı olarak siler. Bu işlem geri alınamaz.',
+ emptyTrashTitle: 'Çöp Kutusu boşaltılsın mı?',
+ },
+ empty: {
+ description: 'Sildiğiniz öğeler kalıcı olarak kaldırılmadan önce burada görünür.',
+ title: 'Çöp Kutusu boş',
+ },
+ errors: {
+ couldNotDeleteItem: 'Öğe silinemedi',
+ couldNotEmptyTrash: 'Çöp Kutusu boşaltılamadı',
+ couldNotRestoreItem: 'Öğe geri yüklenemedi',
+ trashCouldNotLoad: 'Çöp Kutusu yüklenemedi',
+ trashMayBeOutOfDate: 'Çöp Kutusu güncel olmayabilir',
+ },
+ labels: {
+ deletedAge: '{{value}} silindi',
+ itemCount_one: '{{count}} öğe',
+ itemCount_other: '{{count}} öğe',
+ lastEmptied: 'Son boşaltma {{value}}',
+ loadingTrash: 'Çöp Kutusu yükleniyor',
+ originalLocation: 'Orijinal konum: {{location}}',
+ title: 'Çöp Kutusu',
+ trashActions: '{{title}} çöp kutusu işlemleri',
+ },
+ kinds: {
+ deck: 'Deste',
+ folder: 'Klasör',
+ note: 'Not',
+ workspace: 'Çalışma alanı',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Çalışma alanı oluştur',
+ deleteWorkspace: 'Çalışma alanını sil',
+ editWorkspace: 'Çalışma alanını düzenle',
+ newWorkspace: 'Yeni çalışma alanı',
+ openWorkspace: '{{title}} aç',
+ openingWorkspace: '{{title}} açılıyor',
+ },
+ descriptions: {
+ editorDefault: 'Çalışma bağlamı.',
+ editorVisual: 'Bu çalışma alanı için görsel bir işaret seçin.',
+ emptyList: 'Desteleri, notları ve tekrar sıralarını çalışma bağlamına göre ayırın.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Bu, "{{title}}" öğesini Çöp Kutusu\'na taşır. Daha sonra geri yükleyebilirsiniz.',
+ deleteWorkspaceFallbackDescription: 'Bu, bu çalışma alanını Çöp Kutusu\'na taşır. Daha sonra geri yükleyebilirsiniz.',
+ deleteWorkspaceFallbackTitle: 'Çalışma alanı silinsin mi?',
+ deleteWorkspaceTitle: '"{{title}}" silinsin mi?',
+ },
+ empty: {
+ startWithWorkspace: 'Bir çalışma alanıyla başlayın',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Çalışma alanı oluşturulamadı',
+ couldNotDeleteWorkspace: 'Çalışma alanı silinemedi',
+ couldNotOpenWorkspace: 'Çalışma alanı açılamadı',
+ couldNotSaveWorkspace: 'Çalışma alanı kaydedilemedi',
+ workspaceCouldNotLoad: 'Çalışma alanı yüklenemedi',
+ workspacesCouldNotLoad: 'Çalışma alanları yüklenemedi',
+ },
+ fields: {
+ descriptionLabel: 'Çalışma alanı açıklaması',
+ descriptionPlaceholder: 'Bu çalışma alanına neler ait?',
+ namePlaceholder: 'Çalışma alanı adı',
+ untitledWorkspace: 'Adsız çalışma alanı',
+ },
+ labels: {
+ createWorkspaceTitle: 'Çalışma alanı oluştur',
+ loadingWorkspaces: 'Çalışma alanları yükleniyor',
+ workspace: 'Çalışma alanı',
+ workspaces: 'Çalışma alanları',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/uk.ts b/ui/src/core/i18n/resources/uk.ts
new file mode 100644
index 0000000..f6d25ac
--- /dev/null
+++ b/ui/src/core/i18n/resources/uk.ts
@@ -0,0 +1,649 @@
+export const uk = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Спробуйте ще раз. Якщо це повториться, відкрийте Clear знову.',
+ title: 'Не вдалося запустити',
+ },
+ loadingTitle: 'Готуємо ваш простір для навчання',
+ },
+ common: {
+ actions: {
+ back: 'Назад',
+ cancel: 'Скасувати',
+ checkAgain: 'Перевірити знову',
+ close: 'Закрити',
+ create: 'Створити',
+ delete: 'Видалити',
+ dismissError: 'Закрити помилку',
+ dismissStatus: 'Закрити статус',
+ edit: 'Редагувати',
+ itemActions: 'Дії для {{title}}',
+ reset: 'Скинути',
+ review: 'Повторювати',
+ save: 'Зберегти',
+ saveChanges: 'Зберегти зміни',
+ tryAgain: 'Спробувати ще раз',
+ },
+ labels: {
+ active: 'Активно',
+ clear: 'Clear',
+ custom: 'Власне',
+ default: 'Типово',
+ loadingEditor: 'Завантаження редактора',
+ name: 'Назва',
+ completedTask: 'Завершене завдання',
+ description: 'Опис',
+ incompleteTask: 'Незавершене завдання',
+ percentageInput: 'Відсоток для {{label}}',
+ visual: 'Візуал',
+ },
+ status: {
+ actionFailed: 'Дію не виконано',
+ actionInProgress: 'Дія виконується',
+ },
+ sort: {
+ ascending: 'Зрост.',
+ column: 'Стовпець',
+ descending: 'Спад.',
+ direction: 'Напрям',
+ sort: 'Сортувати',
+ },
+ search: {
+ label: 'Пошук',
+ },
+ visualPicker: {
+ allLucideIcons: 'Усі іконки Lucide',
+ browseIconsFor: 'Переглядайте або шукайте іконки для {{label}}.',
+ chooseIcon: 'Вибрати іконку',
+ iconPicker: 'Вибір іконки для {{label}}',
+ iconSearch: 'Пошук іконок для {{label}}',
+ iconsCouldNotLoad: 'Не вдалося завантажити іконки.',
+ loadingIcons: 'Завантаження іконок',
+ loadingMoreIcons: 'Завантаження додаткових іконок',
+ moreIcons: 'Більше іконок',
+ noIconsMatch: 'Немає іконок за запитом "{{query}}".',
+ searchIconsPlaceholder: 'Шукати іконки…',
+ selectedIcon: 'Вибрано {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Створити',
+ newDeck: 'Нова колода',
+ newFolder: 'Нова папка',
+ },
+ descriptions: {
+ defaultWorkspace: 'Тримайте колоди, папки й нотатки разом.',
+ emptyWorkspace: 'Створіть колоду, а потім додайте нотатки, щоб зібрати чергу повторення.',
+ emptyFolder: 'Створіть колоду, а потім додайте нотатки, щоб зібрати чергу повторення.',
+ searchPlaceholder: 'Шукати папки, колоди й нотатки…',
+ },
+ empty: {
+ createFirstDeck: 'Створіть першу колоду',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Не вдалося видалити колоду',
+ couldNotDeleteFolder: 'Не вдалося видалити папку',
+ couldNotDeleteWorkspace: 'Не вдалося видалити робочий простір',
+ dashboardCouldNotOpen: 'Не вдалося відкрити панель',
+ decksCouldNotLoad: 'Не вдалося завантажити колоди',
+ decksMayBeOutOfDate: 'Колоди можуть бути застарілими',
+ foldersCouldNotLoad: 'Не вдалося завантажити папки',
+ foldersMayBeOutOfDate: 'Папки можуть бути застарілими',
+ workspaceCouldNotLoad: 'Не вдалося завантажити робочий простір',
+ },
+ labels: {
+ dashboard: 'Панель',
+ loadingDashboard: 'Завантаження панелі',
+ newItem: 'Новий елемент',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Дата недоступна',
+ },
+ age: {
+ dayAgo_one: '{{count}} день тому',
+ dayAgo_few: '{{count}} дні тому',
+ dayAgo_many: '{{count}} днів тому',
+ dayAgo_other: '{{count}} дня тому',
+ hourAgo_one: '{{count}} годину тому',
+ hourAgo_few: '{{count}} години тому',
+ hourAgo_many: '{{count}} годин тому',
+ hourAgo_other: '{{count}} години тому',
+ justNow: 'щойно',
+ minuteAgo_one: '{{count}} хвилину тому',
+ minuteAgo_few: '{{count}} хвилини тому',
+ minuteAgo_many: '{{count}} хвилин тому',
+ minuteAgo_other: '{{count}} хвилини тому',
+ unavailable: 'дата недоступна',
+ weekAgo_one: '{{count}} тиждень тому',
+ weekAgo_few: '{{count}} тижні тому',
+ weekAgo_many: '{{count}} тижнів тому',
+ weekAgo_other: '{{count}} тижня тому',
+ },
+ labels: {
+ deleted: 'Видалено {{value}}',
+ due: 'До повторення: {{value}}',
+ reviewed: 'Повторено: {{value}}',
+ updated: 'Оновлено {{value}}',
+ updatedUppercase: 'ОНОВЛЕНО {{value}}',
+ },
+ relative: {
+ dayAgo_one: '{{count}} день тому',
+ dayAgo_few: '{{count}} дні тому',
+ dayAgo_many: '{{count}} днів тому',
+ dayAgo_other: '{{count}} дня тому',
+ inAMoment: 'Невдовзі',
+ inDay_one: 'Через {{count}} день',
+ inDay_few: 'Через {{count}} дні',
+ inDay_many: 'Через {{count}} днів',
+ inDay_other: 'Через {{count}} дня',
+ inMonth_one: 'Через {{count}} місяць',
+ inMonth_few: 'Через {{count}} місяці',
+ inMonth_many: 'Через {{count}} місяців',
+ inMonth_other: 'Через {{count}} місяця',
+ inWeek_one: 'Через {{count}} тиждень',
+ inWeek_few: 'Через {{count}} тижні',
+ inWeek_many: 'Через {{count}} тижнів',
+ inWeek_other: 'Через {{count}} тижня',
+ justNow: 'Щойно',
+ monthAgo_one: '{{count}} місяць тому',
+ monthAgo_few: '{{count}} місяці тому',
+ monthAgo_many: '{{count}} місяців тому',
+ monthAgo_other: '{{count}} місяця тому',
+ secondsAgoShort: '{{count}} с тому',
+ minutesAgoShort: '{{count}} хв тому',
+ hoursAgoShort: '{{count}} год тому',
+ today: 'Сьогодні',
+ tomorrow: 'Завтра',
+ weekAgo_one: '{{count}} тиждень тому',
+ weekAgo_few: '{{count}} тижні тому',
+ weekAgo_many: '{{count}} тижнів тому',
+ weekAgo_other: '{{count}} тижня тому',
+ yesterday: 'Вчора',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Дії для {{title}}',
+ createDeck: 'Створити колоду',
+ createNote: 'Створити нотатку',
+ deleteDeck: 'Видалити колоду',
+ editDeck: 'Редагувати колоду',
+ newNote: 'Нова нотатка',
+ openDeck: 'Відкрити колоду {{title}}',
+ saveDeck: 'Не вдалося зберегти колоду',
+ studyNow: 'Вчитися зараз',
+ },
+ descriptions: {
+ emptyDeck: 'Додайте нотатку, щоб у цій колоді був матеріал для повторення.',
+ editorDefault: 'Сфокусована навчальна колода.',
+ editorVisual: 'Виберіть символ обкладинки для цієї колоди.',
+ notesSearchPlaceholder: 'Шукати нотатки…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Це перемістить "{{title}}" до Кошика. Ви зможете відновити її пізніше.',
+ deleteDeckFallbackDescription: 'Це перемістить цю колоду до Кошика. Ви зможете відновити її пізніше.',
+ deleteDeckFallbackTitle: 'Видалити колоду?',
+ deleteDeckTitle: 'Видалити "{{title}}"?',
+ deleteNoteDescription: 'Це перемістить "{{title}}" до Кошика. Ви зможете відновити її пізніше.',
+ deleteNoteFallbackTitle: 'Видалити нотатку?',
+ deleteNoteTitle: 'Видалити "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Немає відповідних нотаток',
+ noMatchingNotesDescription: 'Немає нотаток за запитом "{{query}}".',
+ thisDeckIsEmpty: 'Ця колода порожня',
+ },
+ errors: {
+ couldNotCreateDeck: 'Не вдалося створити колоду',
+ couldNotDeleteDeck: 'Не вдалося видалити колоду',
+ couldNotDeleteNote: 'Не вдалося видалити нотатку',
+ couldNotLoadFolderPath: 'Не вдалося завантажити шлях до папки',
+ couldNotSaveDeck: 'Не вдалося зберегти колоду',
+ deckCouldNotLoad: 'Не вдалося завантажити колоду',
+ notesCouldNotLoad: 'Не вдалося завантажити нотатки',
+ notesMayBeOutOfDate: 'Нотатки можуть бути застарілими',
+ },
+ fields: {
+ descriptionLabel: 'Опис колоди',
+ descriptionPlaceholder: 'Що ця колода допоможе вам повторювати?',
+ namePlaceholder: 'Назва колоди',
+ untitledDeck: 'Колода без назви',
+ untitledDeckLower: 'колода без назви',
+ },
+ labels: {
+ createDeckTitle: 'Створити колоду',
+ deck: 'Колода',
+ deckNotesSearch: 'Пошук нотаток у колоді',
+ deckOverview: 'Огляд колоди',
+ decks: 'Колоди',
+ due: 'Повторити',
+ dueToday: 'До повторення сьогодні',
+ loadingDeck: 'Завантаження колоди',
+ mastery: 'Опанування',
+ notes: 'Нотатки',
+ },
+ sort: {
+ ariaLabel: 'Сортувати колоди',
+ dueToday: 'До повторення сьогодні',
+ title: 'Назва',
+ updated: 'Оновлено',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Дані змінилися. Оновіть і спробуйте ще раз.',
+ forbidden: 'У вас немає дозволу на цю дію.',
+ notFound: 'Не вдалося знайти цей елемент.',
+ offline: 'Не вдається зв’язатися із сервісом.',
+ timeout: 'Це зайняло забагато часу. Спробуйте ще раз.',
+ unauthorized: 'Увійдіть, щоб продовжити.',
+ unavailable: 'Сервіс тимчасово недоступний.',
+ },
+ fallback: {
+ unexpected: 'Неочікувана помилка',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Створити папку',
+ deleteFolder: 'Видалити папку',
+ editFolder: 'Редагувати папку',
+ },
+ descriptions: {
+ editorDefault: 'Папка для пов’язаних колод.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Це перемістить "{{name}}" до Кошика. Ви зможете відновити її пізніше.',
+ deleteFolderFallbackDescription: 'Це перемістить цю папку до Кошика. Ви зможете відновити її пізніше.',
+ deleteFolderFallbackTitle: 'Видалити папку?',
+ deleteFolderTitle: 'Видалити "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'У цій папці немає збігів',
+ noMatchesInFolderDescription: 'Немає папок, колод або нотаток за запитом "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Не вдалося створити папку',
+ couldNotDeleteFolder: 'Не вдалося видалити папку',
+ couldNotLoadFolderPath: 'Не вдалося завантажити шлях до папки',
+ couldNotSaveFolder: 'Не вдалося зберегти папку',
+ folderCouldNotLoad: 'Не вдалося завантажити папку',
+ },
+ fields: {
+ descriptionLabel: 'Опис папки',
+ descriptionPlaceholder: 'Що належить до цієї папки?',
+ namePlaceholder: 'Назва папки',
+ untitledFolder: 'Папка без назви',
+ },
+ labels: {
+ createFolderTitle: 'Створити папку',
+ folder: 'Папка',
+ folders: 'Папки',
+ loadingFolder: 'Завантаження папки',
+ name: 'Назва',
+ updated: 'Оновлено',
+ },
+ sort: {
+ ariaLabel: 'Сортувати папки',
+ name: 'Назва',
+ updated: 'Оновлено',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Якщо локальні й синхронізовані дані відрізнятимуться, елемент з’явиться тут.',
+ heading: 'Статус синхронізації',
+ title: 'Конфлікти',
+ noConflicts: 'Конфліктів не знайдено',
+ },
+ labels: {
+ menu: 'Меню',
+ },
+ sections: {
+ settings: {
+ description: 'Персоналізуйте середовище й уподобання',
+ title: 'Налаштування',
+ },
+ trash: {
+ description: 'Відновлюйте або остаточно видаляйте вилучені елементи',
+ title: 'Кошик',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Закрити редактор',
+ openActions: 'Відкрити дії',
+ openWorkspaces: 'Відкрити робочі простори',
+ },
+ items: {
+ home: 'Головна',
+ menu: 'Меню',
+ primary: 'Основне',
+ settings: 'Налаштування',
+ spaces: 'Простори',
+ trash: 'Кошик',
+ workspaces: 'Робочі простори',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Додати cloze',
+ deleteNote: 'Видалити нотатку',
+ editNote: 'Редагувати нотатку',
+ hideDerivedCardsNote: 'Сховати примітку про похідні картки',
+ openNote: 'Відкрити {{title}}',
+ saveNote: 'Зберегти нотатку',
+ showDerivedCardsNote: 'Показати примітку про похідні картки',
+ },
+ descriptions: {
+ clozeFormat: 'Кожна прихована частина стане карткою для повторення після збереження.',
+ clozeFormatPrefix: 'Оберніть прихований текст у',
+ derivedCardsHelper: 'Нотатки є джерелом істини для похідних карток.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Це перемістить "{{title}}" до Кошика. Ви зможете відновити її пізніше.',
+ deleteNoteFallbackDescription: 'Це перемістить цю нотатку до Кошика. Ви зможете відновити її пізніше.',
+ deleteNoteFallbackTitle: 'Видалити нотатку?',
+ deleteNoteTitle: 'Видалити "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Не вдалося створити нотатку',
+ couldNotDeleteNote: 'Не вдалося видалити нотатку',
+ couldNotSaveNote: 'Не вдалося зберегти нотатку',
+ noteCouldNotLoad: 'Не вдалося завантажити нотатку',
+ },
+ fields: {
+ back: 'Зворот',
+ backPlaceholder: 'Введіть зворотний бік',
+ bodyPlaceholder: 'Напишіть тіло нотатки з cloze-пропусками…',
+ front: 'Лицьовий бік',
+ frontPlaceholder: 'Введіть лицьовий бік',
+ noteBody: 'Тіло нотатки',
+ title: 'Назва',
+ titlePlaceholder: 'Додайте назву нотатки',
+ untitledCloze: 'Cloze без назви',
+ untitledNote: 'Нотатка без назви',
+ },
+ labels: {
+ backUppercase: 'ЗВОРОТ',
+ basic: 'Базова',
+ basicLower: 'базова',
+ basicUppercase: 'БАЗОВА',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Формат cloze',
+ clozeUppercase: 'CLOZE',
+ deck: 'Колода',
+ derivedCards: 'ПОХІДНІ КАРТКИ',
+ due: 'До повторення',
+ frontUppercase: 'ЛИЦЬОВИЙ БІК',
+ inProgress: 'У процесі',
+ inProgressUppercase: 'У ПРОЦЕСІ',
+ loadingNote: 'Завантаження нотатки',
+ loadingNoteEditor: 'Завантаження редактора нотаток',
+ markdownFormatting: 'Форматування Markdown',
+ mastered: 'Опановано',
+ masteredUppercase: 'ОПАНОВАНО',
+ newNote: 'Нова нотатка',
+ noteBody: 'ТІЛО НОТАТКИ',
+ noteContent: 'Вміст нотатки',
+ noteDetails: 'Деталі нотатки',
+ noteMetadata: 'Метадані нотатки',
+ noteType: 'Тип нотатки',
+ notes: 'Нотатки',
+ reviewed: 'Повторено',
+ studyProgress: 'Прогрес навчання',
+ studyProgressUppercase: 'ПРОГРЕС НАВЧАННЯ',
+ titleUppercase: 'НАЗВА',
+ updated: 'Оновлено',
+ },
+ sort: {
+ ariaLabel: 'Сортувати нотатки',
+ title: 'Назва',
+ updated: 'Оновлено',
+ },
+ toolbar: {
+ bold: 'Жирний',
+ italic: 'Курсив',
+ link: 'Посилання',
+ list: 'Список',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Знову',
+ backToDeck: 'Назад до колоди',
+ continueReview: 'Продовжити повторення',
+ easy: 'Легко',
+ good: 'Добре',
+ hard: 'Важко',
+ newNote: 'Нова нотатка',
+ showAnswer: 'Показати відповідь',
+ },
+ errors: {
+ couldNotGradeCard: 'Не вдалося оцінити картку',
+ reviewCouldNotLoad: 'Не вдалося завантажити повторення',
+ reviewCouldNotStart: 'Не вдалося почати повторення',
+ summaryCouldNotLoad: 'Не вдалося завантажити підсумок повторення',
+ summaryNotAvailable: 'Підсумок повторення недоступний',
+ summaryNotComplete: 'Це повторення ще не завершене.',
+ },
+ labels: {
+ cardsReviewed: 'Повторені картки',
+ deck: 'Колода',
+ duration: 'Тривалість',
+ loadingReview: 'Завантаження повторення',
+ loadingSummary: 'Завантаження підсумку',
+ progress: 'Прогрес повторення',
+ review: 'Повторення',
+ reviewComplete: 'Повторення завершено',
+ reviewed_one: 'Повторено {{count}}',
+ reviewed_few: 'Повторено {{count}}',
+ reviewed_many: 'Повторено {{count}}',
+ reviewed_other: 'Повторено {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} год {{minutes}} хв',
+ durationMinutes: '{{minutes}} хв',
+ durationSeconds: '{{seconds}} с',
+ saved: 'Ваш прогрес збережено в цій колоді.',
+ },
+ unavailable: {
+ description: 'Додайте нотатку, щоб ця колода потрапила до черги повторення.',
+ title: 'Немає карток для повторення',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Очистити пошук',
+ },
+ empty: {
+ noMatchesInWorkspace: 'У цьому робочому просторі немає збігів',
+ noMatchesInWorkspaceDescription: 'Немає папок, колод або нотаток за запитом "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Не вдалося завершити пошук',
+ },
+ labels: {
+ results: 'Результати пошуку',
+ resultsFor: 'Результати для "{{query}}"',
+ searchingContent: 'Пошук вмісту',
+ },
+ resultGroups: {
+ deck: 'Колоди',
+ folder: 'Папки',
+ note: 'Нотатки',
+ },
+ resultKinds: {
+ deck: 'колода',
+ folder: 'папка',
+ note: 'нотатка',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Скинути всі налаштування',
+ resetSettings: 'Скинути налаштування',
+ resetToDefaults: 'Відновити типові',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Вставте коректний JSON з 21 числовим значенням.',
+ fsrsErrorInvalidParams_one: 'Введіть JSON-масив рівно з {{count}} скінченним числом.',
+ fsrsErrorInvalidParams_few: 'Введіть JSON-масив рівно з {{count}} скінченними числами.',
+ fsrsErrorInvalidParams_many: 'Введіть JSON-масив рівно з {{count}} скінченними числами.',
+ fsrsErrorInvalidParams_other: 'Введіть JSON-масив рівно з {{count}} скінченного числа.',
+ fsrsHelper: 'Це експертне перевизначення. Значення мають залишатися в порядку.',
+ fsrsJsonLabel: 'JSON параметрів FSRS',
+ fsrsTitle: 'Редагувати параметри FSRS',
+ fsrsDescription: 'Вставте JSON-масив з 21 числом, щоб перевизначити ваги scheduler.',
+ resetDescription: 'Це відновить часовий пояс, ліміти навчання й налаштування FSRS.',
+ resetDescriptionWithLanguage: 'Це відновить мову, часовий пояс, ліміти навчання й налаштування FSRS.',
+ resetTitle: 'Скинути всі налаштування?',
+ timezoneDescription: 'Шукайте місто або ідентифікатор часового поясу.',
+ timezoneSearchLabel: 'Пошук часових поясів',
+ timezoneSearchPlaceholder: 'Шукати часові пояси…',
+ timezoneTitle: 'Виберіть часовий пояс',
+ },
+ errors: {
+ couldNotResetSettings: 'Не вдалося скинути налаштування',
+ couldNotSaveSettings: 'Не вдалося зберегти налаштування',
+ settingsCouldNotLoad: 'Не вдалося завантажити налаштування',
+ settingsUnavailable: 'Налаштування недоступні.',
+ },
+ labels: {
+ appearance: 'Вигляд',
+ automatic: 'Автоматично',
+ fsrsParameters: 'Параметри FSRS',
+ general: 'Загальні',
+ language: 'Мова',
+ loadingSettings: 'Завантаження налаштувань',
+ masteryHorizon: 'Горизонт опанування',
+ newCardOrder: 'Порядок нових карток',
+ newCardsPerDay: 'Нових карток на день',
+ reviewCardsPerDay: 'Карток для повторення на день',
+ savingSettings: 'Збереження налаштувань',
+ schedule: 'Розклад',
+ searchNoTimezones: 'Немає відповідних часових поясів.',
+ settings: 'Налаштування',
+ settingsReset: 'Налаштування скинуто',
+ study: 'Навчання',
+ targetRecallProbability: 'Цільова ймовірність пригадування',
+ theme: 'Тема',
+ timezone: 'Часовий пояс',
+ },
+ options: {
+ languageEnUs: 'Англійська (США)',
+ newCardsAfterReviews: 'Після повторень',
+ newCardsBeforeReviews: 'Перед повтореннями',
+ newCardsMixed: 'Змішано',
+ themeDark: 'Темна',
+ themeLight: 'Світла',
+ themeSystem: 'Системна',
+ timezoneSystem: 'Використовувати системний часовий пояс',
+ },
+ rows: {
+ fsrsDescription: 'Ваги експертної моделі',
+ languageDescription: 'Мова інтерфейсу',
+ masteryHorizonDescription: 'Скільки днів картка має залишатися пригадуваною на цільовій імовірності або вище, щоб вважатися опанованою',
+ newCardOrderDescription: 'Порядок нових карток відносно повторень',
+ newCardsPerDayDescription: 'Максимум нових карток на день',
+ reviewCardsPerDayDescription: 'Максимум карток для повторення на день',
+ targetRecallProbabilityDescription: 'Мінімальна ймовірність пригадування на наступному запланованому повторенні',
+ timezoneDescription: 'Використовуйте автоматичний часовий пояс або виберіть місто.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Видалити назавжди',
+ empty: 'Очистити',
+ emptyTrash: 'Очистити кошик',
+ restore: 'Відновити',
+ restoringItem: 'Відновлення {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Це назавжди видалить "{{title}}". Дію не можна скасувати.',
+ deleteItemFallbackDescription: 'Це назавжди видалить цей елемент. Дію не можна скасувати.',
+ deleteItemFallbackTitle: 'Видалити елемент?',
+ deleteItemTitle: 'Видалити "{{title}}"?',
+ emptyTrashDescription: 'Це назавжди видалить усе з Кошика. Дію не можна скасувати.',
+ emptyTrashTitle: 'Очистити кошик?',
+ },
+ empty: {
+ description: 'Елементи, які ви видаляєте, з’являтимуться тут перед остаточним видаленням.',
+ title: 'Кошик порожній',
+ },
+ errors: {
+ couldNotDeleteItem: 'Не вдалося видалити елемент',
+ couldNotEmptyTrash: 'Не вдалося очистити Кошик',
+ couldNotRestoreItem: 'Не вдалося відновити елемент',
+ trashCouldNotLoad: 'Не вдалося завантажити Кошик',
+ trashMayBeOutOfDate: 'Кошик може бути застарілим',
+ },
+ labels: {
+ deletedAge: 'Видалено {{value}}',
+ itemCount_one: '{{count}} елемент',
+ itemCount_few: '{{count}} елементи',
+ itemCount_many: '{{count}} елементів',
+ itemCount_other: '{{count}} елемента',
+ lastEmptied: 'Останнє очищення {{value}}',
+ loadingTrash: 'Завантаження Кошика',
+ originalLocation: 'Початкове розташування: {{location}}',
+ title: 'Кошик',
+ trashActions: 'Дії кошика для {{title}}',
+ },
+ kinds: {
+ deck: 'Колода',
+ folder: 'Папка',
+ note: 'Нотатка',
+ workspace: 'Робочий простір',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Створити робочий простір',
+ deleteWorkspace: 'Видалити робочий простір',
+ editWorkspace: 'Редагувати робочий простір',
+ newWorkspace: 'Новий робочий простір',
+ openWorkspace: 'Відкрити {{title}}',
+ openingWorkspace: 'Відкриття {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Навчальний контекст.',
+ editorVisual: 'Виберіть візуальний орієнтир для цього робочого простору.',
+ emptyList: 'Розділяйте колоди, нотатки й черги повторення за навчальним контекстом.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Це перемістить "{{title}}" до Кошика. Ви зможете відновити його пізніше.',
+ deleteWorkspaceFallbackDescription: 'Це перемістить цей робочий простір до Кошика. Ви зможете відновити його пізніше.',
+ deleteWorkspaceFallbackTitle: 'Видалити робочий простір?',
+ deleteWorkspaceTitle: 'Видалити "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Почніть з робочого простору',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Не вдалося створити робочий простір',
+ couldNotDeleteWorkspace: 'Не вдалося видалити робочий простір',
+ couldNotOpenWorkspace: 'Не вдалося відкрити робочий простір',
+ couldNotSaveWorkspace: 'Не вдалося зберегти робочий простір',
+ workspaceCouldNotLoad: 'Не вдалося завантажити робочий простір',
+ workspacesCouldNotLoad: 'Не вдалося завантажити робочі простори',
+ },
+ fields: {
+ descriptionLabel: 'Опис робочого простору',
+ descriptionPlaceholder: 'Що належить до цього робочого простору?',
+ namePlaceholder: 'Назва робочого простору',
+ untitledWorkspace: 'Робочий простір без назви',
+ },
+ labels: {
+ createWorkspaceTitle: 'Створити робочий простір',
+ loadingWorkspaces: 'Завантаження робочих просторів',
+ workspace: 'Робочий простір',
+ workspaces: 'Робочі простори',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/vi.ts b/ui/src/core/i18n/resources/vi.ts
new file mode 100644
index 0000000..a0a7069
--- /dev/null
+++ b/ui/src/core/i18n/resources/vi.ts
@@ -0,0 +1,623 @@
+export const vi = {
+ bootstrap: {
+ error: {
+ fallbackMessage: 'Thử lại. Nếu lỗi vẫn xảy ra, hãy mở lại Clear.',
+ title: 'Không thể khởi động',
+ },
+ loadingTitle: 'Đang chuẩn bị không gian học tập của bạn',
+ },
+ common: {
+ actions: {
+ back: 'Quay lại',
+ cancel: 'Hủy',
+ checkAgain: 'Kiểm tra lại',
+ close: 'Đóng',
+ create: 'Tạo',
+ delete: 'Xóa',
+ dismissError: 'Đóng lỗi',
+ dismissStatus: 'Đóng trạng thái',
+ edit: 'Chỉnh sửa',
+ itemActions: 'Thao tác cho {{title}}',
+ reset: 'Đặt lại',
+ review: 'Ôn tập',
+ save: 'Lưu',
+ saveChanges: 'Lưu thay đổi',
+ tryAgain: 'Thử lại',
+ },
+ labels: {
+ active: 'Đang hoạt động',
+ clear: 'Clear',
+ custom: 'Tùy chỉnh',
+ default: 'Mặc định',
+ loadingEditor: 'Đang tải trình chỉnh sửa',
+ name: 'Tên',
+ completedTask: 'Tác vụ đã hoàn tất',
+ description: 'Mô tả',
+ incompleteTask: 'Tác vụ chưa hoàn tất',
+ percentageInput: 'Phần trăm của {{label}}',
+ visual: 'Hình ảnh',
+ },
+ status: {
+ actionFailed: 'Thao tác thất bại',
+ actionInProgress: 'Đang thực hiện thao tác',
+ },
+ sort: {
+ ascending: 'Tăng',
+ column: 'Cột',
+ descending: 'Giảm',
+ direction: 'Hướng',
+ sort: 'Sắp xếp',
+ },
+ search: {
+ label: 'Tìm kiếm',
+ },
+ visualPicker: {
+ allLucideIcons: 'Tất cả biểu tượng Lucide',
+ browseIconsFor: 'Duyệt hoặc tìm biểu tượng cho {{label}}.',
+ chooseIcon: 'Chọn biểu tượng',
+ iconPicker: 'Bộ chọn biểu tượng cho {{label}}',
+ iconSearch: 'Tìm biểu tượng cho {{label}}',
+ iconsCouldNotLoad: 'Không thể tải biểu tượng.',
+ loadingIcons: 'Đang tải biểu tượng',
+ loadingMoreIcons: 'Đang tải thêm biểu tượng',
+ moreIcons: 'Thêm biểu tượng',
+ noIconsMatch: 'Không có biểu tượng nào khớp với "{{query}}".',
+ searchIconsPlaceholder: 'Tìm biểu tượng…',
+ selectedIcon: 'Đã chọn {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: 'Tạo',
+ newDeck: 'Bộ thẻ mới',
+ newFolder: 'Thư mục mới',
+ },
+ descriptions: {
+ defaultWorkspace: 'Giữ bộ thẻ, thư mục và ghi chú cùng nhau.',
+ emptyWorkspace: 'Tạo một bộ thẻ, rồi thêm ghi chú để xây dựng hàng đợi ôn tập.',
+ emptyFolder: 'Tạo một bộ thẻ, rồi thêm ghi chú để xây dựng hàng đợi ôn tập.',
+ searchPlaceholder: 'Tìm thư mục, bộ thẻ và ghi chú…',
+ },
+ empty: {
+ createFirstDeck: 'Tạo bộ thẻ đầu tiên',
+ },
+ errors: {
+ couldNotDeleteDeck: 'Không thể xóa bộ thẻ',
+ couldNotDeleteFolder: 'Không thể xóa thư mục',
+ couldNotDeleteWorkspace: 'Không thể xóa không gian làm việc',
+ dashboardCouldNotOpen: 'Không thể mở bảng điều khiển',
+ decksCouldNotLoad: 'Không thể tải bộ thẻ',
+ decksMayBeOutOfDate: 'Bộ thẻ có thể đã lỗi thời',
+ foldersCouldNotLoad: 'Không thể tải thư mục',
+ foldersMayBeOutOfDate: 'Thư mục có thể đã lỗi thời',
+ workspaceCouldNotLoad: 'Không thể tải không gian làm việc',
+ },
+ labels: {
+ dashboard: 'Bảng điều khiển',
+ loadingDashboard: 'Đang tải bảng điều khiển',
+ newItem: 'Mục mới',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: 'Ngày không khả dụng',
+ },
+ age: {
+ dayAgo_one: '{{count}} ngày trước',
+ dayAgo_other: '{{count}} ngày trước',
+ hourAgo_one: '{{count}} giờ trước',
+ hourAgo_other: '{{count}} giờ trước',
+ justNow: 'vừa xong',
+ minuteAgo_one: '{{count}} phút trước',
+ minuteAgo_other: '{{count}} phút trước',
+ unavailable: 'ngày không khả dụng',
+ weekAgo_one: '{{count}} tuần trước',
+ weekAgo_other: '{{count}} tuần trước',
+ },
+ labels: {
+ deleted: 'Đã xóa {{value}}',
+ due: 'Đến hạn: {{value}}',
+ reviewed: 'Đã ôn tập: {{value}}',
+ updated: 'Đã cập nhật {{value}}',
+ updatedUppercase: 'ĐÃ CẬP NHẬT {{value}}',
+ },
+ relative: {
+ dayAgo_one: '{{count}} ngày trước',
+ dayAgo_other: '{{count}} ngày trước',
+ inAMoment: 'Trong giây lát',
+ inDay_one: 'Trong {{count}} ngày',
+ inDay_other: 'Trong {{count}} ngày',
+ inMonth_one: 'Trong {{count}} tháng',
+ inMonth_other: 'Trong {{count}} tháng',
+ inWeek_one: 'Trong {{count}} tuần',
+ inWeek_other: 'Trong {{count}} tuần',
+ justNow: 'Vừa xong',
+ monthAgo_one: '{{count}} tháng trước',
+ monthAgo_other: '{{count}} tháng trước',
+ secondsAgoShort: '{{count}} giây trước',
+ minutesAgoShort: '{{count}} phút trước',
+ hoursAgoShort: '{{count}} giờ trước',
+ today: 'Hôm nay',
+ tomorrow: 'Ngày mai',
+ weekAgo_one: '{{count}} tuần trước',
+ weekAgo_other: '{{count}} tuần trước',
+ yesterday: 'Hôm qua',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: 'Thao tác cho {{title}}',
+ createDeck: 'Tạo bộ thẻ',
+ createNote: 'Tạo ghi chú',
+ deleteDeck: 'Xóa bộ thẻ',
+ editDeck: 'Chỉnh sửa bộ thẻ',
+ newNote: 'Ghi chú mới',
+ openDeck: 'Mở bộ thẻ {{title}}',
+ saveDeck: 'Không thể lưu bộ thẻ',
+ studyNow: 'Học ngay',
+ },
+ descriptions: {
+ emptyDeck: 'Thêm ghi chú để bộ thẻ này có nội dung ôn tập.',
+ editorDefault: 'Bộ thẻ học tập tập trung.',
+ editorVisual: 'Chọn một glyph bìa cho bộ thẻ này.',
+ notesSearchPlaceholder: 'Tìm ghi chú…',
+ },
+ dialogs: {
+ deleteDeckDescription: 'Thao tác này chuyển "{{title}}" vào Thùng rác. Bạn có thể khôi phục sau.',
+ deleteDeckFallbackDescription: 'Thao tác này chuyển bộ thẻ này vào Thùng rác. Bạn có thể khôi phục sau.',
+ deleteDeckFallbackTitle: 'Xóa bộ thẻ?',
+ deleteDeckTitle: 'Xóa "{{title}}"?',
+ deleteNoteDescription: 'Thao tác này chuyển "{{title}}" vào Thùng rác. Bạn có thể khôi phục sau.',
+ deleteNoteFallbackTitle: 'Xóa ghi chú?',
+ deleteNoteTitle: 'Xóa "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: 'Không có ghi chú phù hợp',
+ noMatchingNotesDescription: 'Không có ghi chú nào khớp với "{{query}}".',
+ thisDeckIsEmpty: 'Bộ thẻ này đang trống',
+ },
+ errors: {
+ couldNotCreateDeck: 'Không thể tạo bộ thẻ',
+ couldNotDeleteDeck: 'Không thể xóa bộ thẻ',
+ couldNotDeleteNote: 'Không thể xóa ghi chú',
+ couldNotLoadFolderPath: 'Không thể tải đường dẫn thư mục',
+ couldNotSaveDeck: 'Không thể lưu bộ thẻ',
+ deckCouldNotLoad: 'Không thể tải bộ thẻ',
+ notesCouldNotLoad: 'Không thể tải ghi chú',
+ notesMayBeOutOfDate: 'Ghi chú có thể đã lỗi thời',
+ },
+ fields: {
+ descriptionLabel: 'Mô tả bộ thẻ',
+ descriptionPlaceholder: 'Bộ thẻ này giúp bạn ôn tập điều gì?',
+ namePlaceholder: 'Tên bộ thẻ',
+ untitledDeck: 'Bộ thẻ chưa đặt tên',
+ untitledDeckLower: 'bộ thẻ chưa đặt tên',
+ },
+ labels: {
+ createDeckTitle: 'Tạo bộ thẻ',
+ deck: 'Bộ thẻ',
+ deckNotesSearch: 'Tìm ghi chú trong bộ thẻ',
+ deckOverview: 'Tổng quan bộ thẻ',
+ decks: 'Bộ thẻ',
+ due: 'Đến hạn',
+ dueToday: 'Đến hạn hôm nay',
+ loadingDeck: 'Đang tải bộ thẻ',
+ mastery: 'Mức thành thạo',
+ notes: 'Ghi chú',
+ },
+ sort: {
+ ariaLabel: 'Sắp xếp bộ thẻ',
+ dueToday: 'Đến hạn hôm nay',
+ title: 'Tiêu đề',
+ updated: 'Đã cập nhật',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: 'Dữ liệu đã thay đổi. Làm mới rồi thử lại.',
+ forbidden: 'Bạn không có quyền thực hiện việc này.',
+ notFound: 'Chúng tôi không tìm thấy mục này.',
+ offline: 'Không thể kết nối tới dịch vụ.',
+ timeout: 'Thao tác này mất quá lâu. Hãy thử lại.',
+ unauthorized: 'Đăng nhập để tiếp tục.',
+ unavailable: 'Dịch vụ tạm thời không khả dụng.',
+ },
+ fallback: {
+ unexpected: 'Lỗi không mong muốn',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: 'Tạo thư mục',
+ deleteFolder: 'Xóa thư mục',
+ editFolder: 'Chỉnh sửa thư mục',
+ },
+ descriptions: {
+ editorDefault: 'Thư mục cho các bộ thẻ liên quan.',
+ },
+ dialogs: {
+ deleteFolderDescription: 'Thao tác này chuyển "{{name}}" vào Thùng rác. Bạn có thể khôi phục sau.',
+ deleteFolderFallbackDescription: 'Thao tác này chuyển thư mục này vào Thùng rác. Bạn có thể khôi phục sau.',
+ deleteFolderFallbackTitle: 'Xóa thư mục?',
+ deleteFolderTitle: 'Xóa "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: 'Không có kết quả trong thư mục này',
+ noMatchesInFolderDescription: 'Không có thư mục, bộ thẻ hoặc ghi chú nào khớp với "{{query}}".',
+ },
+ errors: {
+ couldNotCreateFolder: 'Không thể tạo thư mục',
+ couldNotDeleteFolder: 'Không thể xóa thư mục',
+ couldNotLoadFolderPath: 'Không thể tải đường dẫn thư mục',
+ couldNotSaveFolder: 'Không thể lưu thư mục',
+ folderCouldNotLoad: 'Không thể tải thư mục',
+ },
+ fields: {
+ descriptionLabel: 'Mô tả thư mục',
+ descriptionPlaceholder: 'Những gì thuộc về thư mục này?',
+ namePlaceholder: 'Tên thư mục',
+ untitledFolder: 'Thư mục chưa đặt tên',
+ },
+ labels: {
+ createFolderTitle: 'Tạo thư mục',
+ folder: 'Thư mục',
+ folders: 'Thư mục',
+ loadingFolder: 'Đang tải thư mục',
+ name: 'Tên',
+ updated: 'Đã cập nhật',
+ },
+ sort: {
+ ariaLabel: 'Sắp xếp thư mục',
+ name: 'Tên',
+ updated: 'Đã cập nhật',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: 'Nếu dữ liệu cục bộ và dữ liệu đã đồng bộ khác nhau, mục đó sẽ xuất hiện ở đây.',
+ heading: 'Trạng thái đồng bộ',
+ title: 'Xung đột',
+ noConflicts: 'Không tìm thấy xung đột',
+ },
+ labels: {
+ menu: 'Menu',
+ },
+ sections: {
+ settings: {
+ description: 'Cá nhân hóa môi trường và tùy chọn của bạn',
+ title: 'Cài đặt',
+ },
+ trash: {
+ description: 'Khôi phục hoặc xóa vĩnh viễn các mục đã xóa',
+ title: 'Thùng rác',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: 'Đóng trình chỉnh sửa',
+ openActions: 'Mở thao tác',
+ openWorkspaces: 'Mở không gian làm việc',
+ },
+ items: {
+ home: 'Trang chủ',
+ menu: 'Menu',
+ primary: 'Chính',
+ settings: 'Cài đặt',
+ spaces: 'Không gian',
+ trash: 'Thùng rác',
+ workspaces: 'Không gian làm việc',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: 'Thêm cloze',
+ deleteNote: 'Xóa ghi chú',
+ editNote: 'Chỉnh sửa ghi chú',
+ hideDerivedCardsNote: 'Ẩn ghi chú về thẻ phát sinh',
+ openNote: 'Mở {{title}}',
+ saveNote: 'Lưu ghi chú',
+ showDerivedCardsNote: 'Hiện ghi chú về thẻ phát sinh',
+ },
+ descriptions: {
+ clozeFormat: 'Mỗi phần bị ẩn sẽ trở thành thẻ ôn tập khi bạn lưu.',
+ clozeFormatPrefix: 'Bọc văn bản bị ẩn bằng',
+ derivedCardsHelper: 'Ghi chú là nguồn sự thật cho các thẻ phát sinh.',
+ },
+ dialogs: {
+ deleteNoteDescription: 'Thao tác này chuyển "{{title}}" vào Thùng rác. Bạn có thể khôi phục sau.',
+ deleteNoteFallbackDescription: 'Thao tác này chuyển ghi chú này vào Thùng rác. Bạn có thể khôi phục sau.',
+ deleteNoteFallbackTitle: 'Xóa ghi chú?',
+ deleteNoteTitle: 'Xóa "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: 'Không thể tạo ghi chú',
+ couldNotDeleteNote: 'Không thể xóa ghi chú',
+ couldNotSaveNote: 'Không thể lưu ghi chú',
+ noteCouldNotLoad: 'Không thể tải ghi chú',
+ },
+ fields: {
+ back: 'Mặt sau',
+ backPlaceholder: 'Nhập mặt sau',
+ bodyPlaceholder: 'Viết nội dung ghi chú với cloze deletion…',
+ front: 'Mặt trước',
+ frontPlaceholder: 'Nhập mặt trước',
+ noteBody: 'Nội dung ghi chú',
+ title: 'Tiêu đề',
+ titlePlaceholder: 'Thêm tiêu đề ghi chú',
+ untitledCloze: 'Cloze chưa đặt tên',
+ untitledNote: 'Ghi chú chưa đặt tên',
+ },
+ labels: {
+ backUppercase: 'MẶT SAU',
+ basic: 'Cơ bản',
+ basicLower: 'cơ bản',
+ basicUppercase: 'CƠ BẢN',
+ cloze: 'Cloze',
+ clozeLower: 'cloze',
+ clozeFormat: 'Định dạng cloze',
+ clozeUppercase: 'CLOZE',
+ deck: 'Bộ thẻ',
+ derivedCards: 'THẺ PHÁT SINH',
+ due: 'Đến hạn',
+ frontUppercase: 'MẶT TRƯỚC',
+ inProgress: 'Đang tiến hành',
+ inProgressUppercase: 'ĐANG TIẾN HÀNH',
+ loadingNote: 'Đang tải ghi chú',
+ loadingNoteEditor: 'Đang tải trình chỉnh sửa ghi chú',
+ markdownFormatting: 'Định dạng Markdown',
+ mastered: 'Đã thành thạo',
+ masteredUppercase: 'ĐÃ THÀNH THẠO',
+ newNote: 'Ghi chú mới',
+ noteBody: 'NỘI DUNG GHI CHÚ',
+ noteContent: 'Nội dung ghi chú',
+ noteDetails: 'Chi tiết ghi chú',
+ noteMetadata: 'Siêu dữ liệu ghi chú',
+ noteType: 'Loại ghi chú',
+ notes: 'Ghi chú',
+ reviewed: 'Đã ôn tập',
+ studyProgress: 'Tiến độ học tập',
+ studyProgressUppercase: 'TIẾN ĐỘ HỌC TẬP',
+ titleUppercase: 'TIÊU ĐỀ',
+ updated: 'Đã cập nhật',
+ },
+ sort: {
+ ariaLabel: 'Sắp xếp ghi chú',
+ title: 'Tiêu đề',
+ updated: 'Đã cập nhật',
+ },
+ toolbar: {
+ bold: 'Đậm',
+ italic: 'Nghiêng',
+ link: 'Liên kết',
+ list: 'Danh sách',
+ },
+ },
+ review: {
+ actions: {
+ again: 'Lại',
+ backToDeck: 'Quay lại bộ thẻ',
+ continueReview: 'Tiếp tục ôn tập',
+ easy: 'Dễ',
+ good: 'Tốt',
+ hard: 'Khó',
+ newNote: 'Ghi chú mới',
+ showAnswer: 'Hiện đáp án',
+ },
+ errors: {
+ couldNotGradeCard: 'Không thể chấm thẻ',
+ reviewCouldNotLoad: 'Không thể tải phiên ôn tập',
+ reviewCouldNotStart: 'Không thể bắt đầu phiên ôn tập',
+ summaryCouldNotLoad: 'Không thể tải tóm tắt ôn tập',
+ summaryNotAvailable: 'Tóm tắt ôn tập không khả dụng',
+ summaryNotComplete: 'Phiên ôn tập này chưa hoàn tất.',
+ },
+ labels: {
+ cardsReviewed: 'Thẻ đã ôn tập',
+ deck: 'Bộ thẻ',
+ duration: 'Thời lượng',
+ loadingReview: 'Đang tải phiên ôn tập',
+ loadingSummary: 'Đang tải tóm tắt',
+ progress: 'Tiến độ ôn tập',
+ review: 'Ôn tập',
+ reviewComplete: 'Ôn tập hoàn tất',
+ reviewed_one: 'Đã ôn tập {{count}}',
+ reviewed_other: 'Đã ôn tập {{count}}',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} giờ {{minutes}} phút',
+ durationMinutes: '{{minutes}} phút',
+ durationSeconds: '{{seconds}} giây',
+ saved: 'Tiến độ của bạn đã được lưu vào bộ thẻ này.',
+ },
+ unavailable: {
+ description: 'Thêm ghi chú để bộ thẻ này có thể vào hàng đợi ôn tập.',
+ title: 'Không có thẻ để ôn tập',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: 'Xóa tìm kiếm',
+ },
+ empty: {
+ noMatchesInWorkspace: 'Không có kết quả trong không gian làm việc này',
+ noMatchesInWorkspaceDescription: 'Không có thư mục, bộ thẻ hoặc ghi chú nào khớp với "{{query}}".',
+ },
+ errors: {
+ couldNotComplete: 'Không thể hoàn tất tìm kiếm',
+ },
+ labels: {
+ results: 'Kết quả tìm kiếm',
+ resultsFor: 'Kết quả cho "{{query}}"',
+ searchingContent: 'Đang tìm nội dung',
+ },
+ resultGroups: {
+ deck: 'Bộ thẻ',
+ folder: 'Thư mục',
+ note: 'Ghi chú',
+ },
+ resultKinds: {
+ deck: 'bộ thẻ',
+ folder: 'thư mục',
+ note: 'ghi chú',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: 'Đặt lại tất cả cài đặt',
+ resetSettings: 'Đặt lại cài đặt',
+ resetToDefaults: 'Khôi phục mặc định',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: 'Dán JSON hợp lệ với 21 giá trị số.',
+ fsrsErrorInvalidParams_one: 'Nhập một mảng JSON có đúng {{count}} số hữu hạn.',
+ fsrsErrorInvalidParams_other: 'Nhập một mảng JSON có đúng {{count}} số hữu hạn.',
+ fsrsHelper: 'Đây là ghi đè nâng cao. Các giá trị phải giữ đúng thứ tự.',
+ fsrsJsonLabel: 'JSON tham số FSRS',
+ fsrsTitle: 'Chỉnh sửa tham số FSRS',
+ fsrsDescription: 'Dán một mảng JSON gồm 21 số để ghi đè trọng số của scheduler.',
+ resetDescription: 'Thao tác này khôi phục múi giờ, giới hạn học tập và cài đặt FSRS.',
+ resetDescriptionWithLanguage: 'Thao tác này khôi phục ngôn ngữ, múi giờ, giới hạn học tập và cài đặt FSRS.',
+ resetTitle: 'Đặt lại tất cả cài đặt?',
+ timezoneDescription: 'Tìm kiếm thành phố hoặc mã định danh múi giờ.',
+ timezoneSearchLabel: 'Tìm múi giờ',
+ timezoneSearchPlaceholder: 'Tìm múi giờ…',
+ timezoneTitle: 'Chọn múi giờ',
+ },
+ errors: {
+ couldNotResetSettings: 'Không thể đặt lại cài đặt',
+ couldNotSaveSettings: 'Không thể lưu cài đặt',
+ settingsCouldNotLoad: 'Không thể tải cài đặt',
+ settingsUnavailable: 'Cài đặt không khả dụng.',
+ },
+ labels: {
+ appearance: 'Giao diện',
+ automatic: 'Tự động',
+ fsrsParameters: 'Tham số FSRS',
+ general: 'Chung',
+ language: 'Ngôn ngữ',
+ loadingSettings: 'Đang tải cài đặt',
+ masteryHorizon: 'Ngưỡng thành thạo',
+ newCardOrder: 'Thứ tự thẻ mới',
+ newCardsPerDay: 'Thẻ mới mỗi ngày',
+ reviewCardsPerDay: 'Thẻ ôn tập mỗi ngày',
+ savingSettings: 'Đang lưu cài đặt',
+ schedule: 'Lịch',
+ searchNoTimezones: 'Không có múi giờ phù hợp.',
+ settings: 'Cài đặt',
+ settingsReset: 'Đã đặt lại cài đặt',
+ study: 'Học tập',
+ targetRecallProbability: 'Xác suất nhớ mục tiêu',
+ theme: 'Chủ đề',
+ timezone: 'Múi giờ',
+ },
+ options: {
+ languageEnUs: 'Tiếng Anh (Mỹ)',
+ newCardsAfterReviews: 'Sau ôn tập',
+ newCardsBeforeReviews: 'Trước ôn tập',
+ newCardsMixed: 'Trộn',
+ themeDark: 'Tối',
+ themeLight: 'Sáng',
+ themeSystem: 'Hệ thống',
+ timezoneSystem: 'Dùng múi giờ hệ thống',
+ },
+ rows: {
+ fsrsDescription: 'Trọng số mô hình nâng cao',
+ languageDescription: 'Ngôn ngữ giao diện',
+ masteryHorizonDescription: 'Số ngày một thẻ phải duy trì khả năng nhớ ở mức xác suất mục tiêu hoặc cao hơn để được tính là đã thành thạo',
+ newCardOrderDescription: 'Thứ tự thẻ mới so với thẻ ôn tập',
+ newCardsPerDayDescription: 'Số thẻ mới tối đa mỗi ngày',
+ reviewCardsPerDayDescription: 'Số thẻ ôn tập tối đa mỗi ngày',
+ targetRecallProbabilityDescription: 'Xác suất nhớ tối thiểu ở lần ôn tập đã lên lịch tiếp theo',
+ timezoneDescription: 'Dùng múi giờ tự động hoặc chọn một thành phố.',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: 'Xóa vĩnh viễn',
+ empty: 'Dọn sạch',
+ emptyTrash: 'Dọn Thùng rác',
+ restore: 'Khôi phục',
+ restoringItem: 'Đang khôi phục {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: 'Thao tác này xóa vĩnh viễn "{{title}}". Không thể hoàn tác.',
+ deleteItemFallbackDescription: 'Thao tác này xóa vĩnh viễn mục này. Không thể hoàn tác.',
+ deleteItemFallbackTitle: 'Xóa mục?',
+ deleteItemTitle: 'Xóa "{{title}}"?',
+ emptyTrashDescription: 'Thao tác này xóa vĩnh viễn mọi thứ trong Thùng rác. Không thể hoàn tác.',
+ emptyTrashTitle: 'Dọn Thùng rác?',
+ },
+ empty: {
+ description: 'Các mục bạn xóa sẽ xuất hiện ở đây trước khi bị xóa vĩnh viễn.',
+ title: 'Thùng rác đang trống',
+ },
+ errors: {
+ couldNotDeleteItem: 'Không thể xóa mục',
+ couldNotEmptyTrash: 'Không thể dọn Thùng rác',
+ couldNotRestoreItem: 'Không thể khôi phục mục',
+ trashCouldNotLoad: 'Không thể tải Thùng rác',
+ trashMayBeOutOfDate: 'Thùng rác có thể đã lỗi thời',
+ },
+ labels: {
+ deletedAge: 'Đã xóa {{value}}',
+ itemCount_one: '{{count}} mục',
+ itemCount_other: '{{count}} mục',
+ lastEmptied: 'Dọn lần cuối {{value}}',
+ loadingTrash: 'Đang tải Thùng rác',
+ originalLocation: 'Vị trí ban đầu: {{location}}',
+ title: 'Thùng rác',
+ trashActions: 'Thao tác Thùng rác cho {{title}}',
+ },
+ kinds: {
+ deck: 'Bộ thẻ',
+ folder: 'Thư mục',
+ note: 'Ghi chú',
+ workspace: 'Không gian làm việc',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: 'Tạo không gian làm việc',
+ deleteWorkspace: 'Xóa không gian làm việc',
+ editWorkspace: 'Chỉnh sửa không gian làm việc',
+ newWorkspace: 'Không gian làm việc mới',
+ openWorkspace: 'Mở {{title}}',
+ openingWorkspace: 'Đang mở {{title}}',
+ },
+ descriptions: {
+ editorDefault: 'Ngữ cảnh học tập.',
+ editorVisual: 'Chọn điểm neo hình ảnh cho không gian làm việc này.',
+ emptyList: 'Tách bộ thẻ, ghi chú và hàng đợi ôn tập theo ngữ cảnh học tập.',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: 'Thao tác này chuyển "{{title}}" vào Thùng rác. Bạn có thể khôi phục sau.',
+ deleteWorkspaceFallbackDescription: 'Thao tác này chuyển không gian làm việc này vào Thùng rác. Bạn có thể khôi phục sau.',
+ deleteWorkspaceFallbackTitle: 'Xóa không gian làm việc?',
+ deleteWorkspaceTitle: 'Xóa "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: 'Bắt đầu với một không gian làm việc',
+ },
+ errors: {
+ couldNotCreateWorkspace: 'Không thể tạo không gian làm việc',
+ couldNotDeleteWorkspace: 'Không thể xóa không gian làm việc',
+ couldNotOpenWorkspace: 'Không thể mở không gian làm việc',
+ couldNotSaveWorkspace: 'Không thể lưu không gian làm việc',
+ workspaceCouldNotLoad: 'Không thể tải không gian làm việc',
+ workspacesCouldNotLoad: 'Không thể tải không gian làm việc',
+ },
+ fields: {
+ descriptionLabel: 'Mô tả không gian làm việc',
+ descriptionPlaceholder: 'Những gì thuộc về không gian làm việc này?',
+ namePlaceholder: 'Tên không gian làm việc',
+ untitledWorkspace: 'Không gian làm việc chưa đặt tên',
+ },
+ labels: {
+ createWorkspaceTitle: 'Tạo không gian làm việc',
+ loadingWorkspaces: 'Đang tải không gian làm việc',
+ workspace: 'Không gian làm việc',
+ workspaces: 'Không gian làm việc',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/zh-Hans.ts b/ui/src/core/i18n/resources/zh-Hans.ts
new file mode 100644
index 0000000..002ad43
--- /dev/null
+++ b/ui/src/core/i18n/resources/zh-Hans.ts
@@ -0,0 +1,623 @@
+export const zhHans = {
+ bootstrap: {
+ error: {
+ fallbackMessage: '请重试。如果问题仍然存在,请重新打开 Clear。',
+ title: '无法启动',
+ },
+ loadingTitle: '正在准备你的学习空间',
+ },
+ common: {
+ actions: {
+ back: '返回',
+ cancel: '取消',
+ checkAgain: '再次检查',
+ close: '关闭',
+ create: '创建',
+ delete: '删除',
+ dismissError: '关闭错误',
+ dismissStatus: '关闭状态',
+ edit: '编辑',
+ itemActions: '{{title}} 操作',
+ reset: '重置',
+ review: '复习',
+ save: '保存',
+ saveChanges: '保存更改',
+ tryAgain: '重试',
+ },
+ labels: {
+ active: '启用',
+ clear: 'Clear',
+ custom: '自定义',
+ default: '默认',
+ loadingEditor: '正在加载编辑器',
+ name: '名称',
+ completedTask: '已完成任务',
+ description: '描述',
+ incompleteTask: '未完成任务',
+ percentageInput: '{{label}} 百分比',
+ visual: '视觉',
+ },
+ status: {
+ actionFailed: '操作失败',
+ actionInProgress: '操作进行中',
+ },
+ sort: {
+ ascending: '升序',
+ column: '列',
+ descending: '降序',
+ direction: '方向',
+ sort: '排序',
+ },
+ search: {
+ label: '搜索',
+ },
+ visualPicker: {
+ allLucideIcons: '所有 Lucide 图标',
+ browseIconsFor: '浏览或搜索 {{label}} 的图标。',
+ chooseIcon: '选择图标',
+ iconPicker: '{{label}} 图标选择器',
+ iconSearch: '{{label}} 图标搜索',
+ iconsCouldNotLoad: '无法加载图标。',
+ loadingIcons: '正在加载图标',
+ loadingMoreIcons: '正在加载更多图标',
+ moreIcons: '更多图标',
+ noIconsMatch: '没有图标匹配 "{{query}}"。',
+ searchIconsPlaceholder: '搜索图标…',
+ selectedIcon: '已选择 {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: '创建',
+ newDeck: '新建牌组',
+ newFolder: '新建文件夹',
+ },
+ descriptions: {
+ defaultWorkspace: '将牌组、文件夹和笔记放在一起。',
+ emptyWorkspace: '创建一个牌组,然后添加笔记来建立复习队列。',
+ emptyFolder: '创建一个牌组,然后添加笔记来建立复习队列。',
+ searchPlaceholder: '搜索文件夹、牌组和笔记…',
+ },
+ empty: {
+ createFirstDeck: '创建你的第一个牌组',
+ },
+ errors: {
+ couldNotDeleteDeck: '无法删除牌组',
+ couldNotDeleteFolder: '无法删除文件夹',
+ couldNotDeleteWorkspace: '无法删除工作区',
+ dashboardCouldNotOpen: '无法打开仪表板',
+ decksCouldNotLoad: '无法加载牌组',
+ decksMayBeOutOfDate: '牌组可能已过期',
+ foldersCouldNotLoad: '无法加载文件夹',
+ foldersMayBeOutOfDate: '文件夹可能已过期',
+ workspaceCouldNotLoad: '无法加载工作区',
+ },
+ labels: {
+ dashboard: '仪表板',
+ loadingDashboard: '正在加载仪表板',
+ newItem: '新项目',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: '日期不可用',
+ },
+ age: {
+ dayAgo_one: '{{count}} 天前',
+ dayAgo_other: '{{count}} 天前',
+ hourAgo_one: '{{count}} 小时前',
+ hourAgo_other: '{{count}} 小时前',
+ justNow: '刚刚',
+ minuteAgo_one: '{{count}} 分钟前',
+ minuteAgo_other: '{{count}} 分钟前',
+ unavailable: '日期不可用',
+ weekAgo_one: '{{count}} 周前',
+ weekAgo_other: '{{count}} 周前',
+ },
+ labels: {
+ deleted: '已删除 {{value}}',
+ due: '到期:{{value}}',
+ reviewed: '已复习:{{value}}',
+ updated: '已更新 {{value}}',
+ updatedUppercase: '已更新 {{value}}',
+ },
+ relative: {
+ dayAgo_one: '{{count}} 天前',
+ dayAgo_other: '{{count}} 天前',
+ inAMoment: '马上',
+ inDay_one: '{{count}} 天后',
+ inDay_other: '{{count}} 天后',
+ inMonth_one: '{{count}} 个月后',
+ inMonth_other: '{{count}} 个月后',
+ inWeek_one: '{{count}} 周后',
+ inWeek_other: '{{count}} 周后',
+ justNow: '刚刚',
+ monthAgo_one: '{{count}} 个月前',
+ monthAgo_other: '{{count}} 个月前',
+ secondsAgoShort: '{{count}} 秒前',
+ minutesAgoShort: '{{count}} 分钟前',
+ hoursAgoShort: '{{count}} 小时前',
+ today: '今天',
+ tomorrow: '明天',
+ weekAgo_one: '{{count}} 周前',
+ weekAgo_other: '{{count}} 周前',
+ yesterday: '昨天',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: '{{title}} 操作',
+ createDeck: '创建牌组',
+ createNote: '创建笔记',
+ deleteDeck: '删除牌组',
+ editDeck: '编辑牌组',
+ newNote: '新建笔记',
+ openDeck: '打开 {{title}} 牌组',
+ saveDeck: '无法保存牌组',
+ studyNow: '立即学习',
+ },
+ descriptions: {
+ emptyDeck: '添加一条笔记,让这个牌组有可复习的内容。',
+ editorDefault: '专注学习牌组。',
+ editorVisual: '为这个牌组选择封面符号。',
+ notesSearchPlaceholder: '搜索笔记…',
+ },
+ dialogs: {
+ deleteDeckDescription: '这会将 "{{title}}" 移至回收站。你稍后可以恢复它。',
+ deleteDeckFallbackDescription: '这会将此牌组移至回收站。你稍后可以恢复它。',
+ deleteDeckFallbackTitle: '删除牌组?',
+ deleteDeckTitle: '删除 "{{title}}"?',
+ deleteNoteDescription: '这会将 "{{title}}" 移至回收站。你稍后可以恢复它。',
+ deleteNoteFallbackTitle: '删除笔记?',
+ deleteNoteTitle: '删除 "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: '没有匹配的笔记',
+ noMatchingNotesDescription: '没有笔记匹配 "{{query}}"。',
+ thisDeckIsEmpty: '这个牌组是空的',
+ },
+ errors: {
+ couldNotCreateDeck: '无法创建牌组',
+ couldNotDeleteDeck: '无法删除牌组',
+ couldNotDeleteNote: '无法删除笔记',
+ couldNotLoadFolderPath: '无法加载文件夹路径',
+ couldNotSaveDeck: '无法保存牌组',
+ deckCouldNotLoad: '无法加载牌组',
+ notesCouldNotLoad: '无法加载笔记',
+ notesMayBeOutOfDate: '笔记可能已过期',
+ },
+ fields: {
+ descriptionLabel: '牌组描述',
+ descriptionPlaceholder: '这个牌组会帮助你复习什么?',
+ namePlaceholder: '牌组名称',
+ untitledDeck: '未命名牌组',
+ untitledDeckLower: '未命名牌组',
+ },
+ labels: {
+ createDeckTitle: '创建牌组',
+ deck: '牌组',
+ deckNotesSearch: '牌组笔记搜索',
+ deckOverview: '牌组概览',
+ decks: '牌组',
+ due: '到期',
+ dueToday: '今日到期',
+ loadingDeck: '正在加载牌组',
+ mastery: '掌握度',
+ notes: '笔记',
+ },
+ sort: {
+ ariaLabel: '排序牌组',
+ dueToday: '今日到期',
+ title: '标题',
+ updated: '更新时间',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: '数据已更改。请刷新后重试。',
+ forbidden: '你没有权限执行此操作。',
+ notFound: '找不到此项目。',
+ offline: '无法连接到服务。',
+ timeout: '耗时过长。请重试。',
+ unauthorized: '请登录以继续。',
+ unavailable: '服务暂时不可用。',
+ },
+ fallback: {
+ unexpected: '意外错误',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: '创建文件夹',
+ deleteFolder: '删除文件夹',
+ editFolder: '编辑文件夹',
+ },
+ descriptions: {
+ editorDefault: '用于相关牌组的文件夹。',
+ },
+ dialogs: {
+ deleteFolderDescription: '这会将 "{{name}}" 移至回收站。你稍后可以恢复它。',
+ deleteFolderFallbackDescription: '这会将此文件夹移至回收站。你稍后可以恢复它。',
+ deleteFolderFallbackTitle: '删除文件夹?',
+ deleteFolderTitle: '删除 "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: '此文件夹中没有匹配项',
+ noMatchesInFolderDescription: '没有文件夹、牌组或笔记匹配 "{{query}}"。',
+ },
+ errors: {
+ couldNotCreateFolder: '无法创建文件夹',
+ couldNotDeleteFolder: '无法删除文件夹',
+ couldNotLoadFolderPath: '无法加载文件夹路径',
+ couldNotSaveFolder: '无法保存文件夹',
+ folderCouldNotLoad: '无法加载文件夹',
+ },
+ fields: {
+ descriptionLabel: '文件夹描述',
+ descriptionPlaceholder: '这个文件夹里放什么?',
+ namePlaceholder: '文件夹名称',
+ untitledFolder: '未命名文件夹',
+ },
+ labels: {
+ createFolderTitle: '创建文件夹',
+ folder: '文件夹',
+ folders: '文件夹',
+ loadingFolder: '正在加载文件夹',
+ name: '名称',
+ updated: '更新时间',
+ },
+ sort: {
+ ariaLabel: '排序文件夹',
+ name: '名称',
+ updated: '更新时间',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: '如果本地数据和同步数据不一致,项目会显示在这里。',
+ heading: '同步状态',
+ title: '冲突',
+ noConflicts: '未发现冲突',
+ },
+ labels: {
+ menu: '菜单',
+ },
+ sections: {
+ settings: {
+ description: '个性化你的环境和偏好',
+ title: '设置',
+ },
+ trash: {
+ description: '恢复或永久删除已移除的项目',
+ title: '回收站',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: '关闭编辑器',
+ openActions: '打开操作',
+ openWorkspaces: '打开工作区',
+ },
+ items: {
+ home: '首页',
+ menu: '菜单',
+ primary: '主要',
+ settings: '设置',
+ spaces: '空间',
+ trash: '回收站',
+ workspaces: '工作区',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: '添加填空',
+ deleteNote: '删除笔记',
+ editNote: '编辑笔记',
+ hideDerivedCardsNote: '隐藏派生卡片提示',
+ openNote: '打开 {{title}}',
+ saveNote: '保存笔记',
+ showDerivedCardsNote: '显示派生卡片提示',
+ },
+ descriptions: {
+ clozeFormat: '保存后,每个隐藏部分都会成为一张复习卡片。',
+ clozeFormatPrefix: '用以下标记包裹隐藏文本',
+ derivedCardsHelper: '笔记是派生卡片的事实来源。',
+ },
+ dialogs: {
+ deleteNoteDescription: '这会将 "{{title}}" 移至回收站。你稍后可以恢复它。',
+ deleteNoteFallbackDescription: '这会将此笔记移至回收站。你稍后可以恢复它。',
+ deleteNoteFallbackTitle: '删除笔记?',
+ deleteNoteTitle: '删除 "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: '无法创建笔记',
+ couldNotDeleteNote: '无法删除笔记',
+ couldNotSaveNote: '无法保存笔记',
+ noteCouldNotLoad: '无法加载笔记',
+ },
+ fields: {
+ back: '背面',
+ backPlaceholder: '输入背面',
+ bodyPlaceholder: '用填空删除编写笔记正文…',
+ front: '正面',
+ frontPlaceholder: '输入正面',
+ noteBody: '笔记正文',
+ title: '标题',
+ titlePlaceholder: '添加笔记标题',
+ untitledCloze: '未命名填空',
+ untitledNote: '未命名笔记',
+ },
+ labels: {
+ backUppercase: '背面',
+ basic: '基础',
+ basicLower: '基础',
+ basicUppercase: '基础',
+ cloze: '填空',
+ clozeLower: '填空',
+ clozeFormat: '填空格式',
+ clozeUppercase: '填空',
+ deck: '牌组',
+ derivedCards: '派生卡片',
+ due: '到期',
+ frontUppercase: '正面',
+ inProgress: '进行中',
+ inProgressUppercase: '进行中',
+ loadingNote: '正在加载笔记',
+ loadingNoteEditor: '正在加载笔记编辑器',
+ markdownFormatting: 'Markdown 格式',
+ mastered: '已掌握',
+ masteredUppercase: '已掌握',
+ newNote: '新建笔记',
+ noteBody: '笔记正文',
+ noteContent: '笔记内容',
+ noteDetails: '笔记详情',
+ noteMetadata: '笔记元数据',
+ noteType: '笔记类型',
+ notes: '笔记',
+ reviewed: '已复习',
+ studyProgress: '学习进度',
+ studyProgressUppercase: '学习进度',
+ titleUppercase: '标题',
+ updated: '更新时间',
+ },
+ sort: {
+ ariaLabel: '排序笔记',
+ title: '标题',
+ updated: '更新时间',
+ },
+ toolbar: {
+ bold: '加粗',
+ italic: '斜体',
+ link: '链接',
+ list: '列表',
+ },
+ },
+ review: {
+ actions: {
+ again: '重来',
+ backToDeck: '返回牌组',
+ continueReview: '继续复习',
+ easy: '简单',
+ good: '良好',
+ hard: '困难',
+ newNote: '新建笔记',
+ showAnswer: '显示答案',
+ },
+ errors: {
+ couldNotGradeCard: '无法评分卡片',
+ reviewCouldNotLoad: '无法加载复习',
+ reviewCouldNotStart: '无法开始复习',
+ summaryCouldNotLoad: '无法加载复习总结',
+ summaryNotAvailable: '复习总结不可用',
+ summaryNotComplete: '这次复习尚未完成。',
+ },
+ labels: {
+ cardsReviewed: '已复习卡片',
+ deck: '牌组',
+ duration: '时长',
+ loadingReview: '正在加载复习',
+ loadingSummary: '正在加载总结',
+ progress: '复习进度',
+ review: '复习',
+ reviewComplete: '复习完成',
+ reviewed_one: '已复习 {{count}} 张',
+ reviewed_other: '已复习 {{count}} 张',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} 小时 {{minutes}} 分钟',
+ durationMinutes: '{{minutes}} 分钟',
+ durationSeconds: '{{seconds}} 秒',
+ saved: '你的进度已保存到这个牌组。',
+ },
+ unavailable: {
+ description: '添加一条笔记,让这个牌组可以进入复习队列。',
+ title: '没有可复习的卡片',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: '清除搜索',
+ },
+ empty: {
+ noMatchesInWorkspace: '此工作区中没有匹配项',
+ noMatchesInWorkspaceDescription: '没有文件夹、牌组或笔记匹配 "{{query}}"。',
+ },
+ errors: {
+ couldNotComplete: '无法完成搜索',
+ },
+ labels: {
+ results: '搜索结果',
+ resultsFor: '"{{query}}" 的结果',
+ searchingContent: '正在搜索内容',
+ },
+ resultGroups: {
+ deck: '牌组',
+ folder: '文件夹',
+ note: '笔记',
+ },
+ resultKinds: {
+ deck: '牌组',
+ folder: '文件夹',
+ note: '笔记',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: '重置所有设置',
+ resetSettings: '重置设置',
+ resetToDefaults: '恢复默认值',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: '请粘贴包含 21 个数值的有效 JSON。',
+ fsrsErrorInvalidParams_one: '请输入正好包含 {{count}} 个有限数的 JSON 数组。',
+ fsrsErrorInvalidParams_other: '请输入正好包含 {{count}} 个有限数的 JSON 数组。',
+ fsrsHelper: '这是专家级覆盖设置。值必须保持顺序。',
+ fsrsJsonLabel: 'FSRS 参数 JSON',
+ fsrsTitle: '编辑 FSRS 参数',
+ fsrsDescription: '粘贴包含 21 个数字的 JSON 数组以覆盖 scheduler 权重。',
+ resetDescription: '这会恢复时区、学习上限和 FSRS 设置。',
+ resetDescriptionWithLanguage: '这会恢复语言、时区、学习上限和 FSRS 设置。',
+ resetTitle: '重置所有设置?',
+ timezoneDescription: '搜索城市或时区标识符。',
+ timezoneSearchLabel: '搜索时区',
+ timezoneSearchPlaceholder: '搜索时区…',
+ timezoneTitle: '选择时区',
+ },
+ errors: {
+ couldNotResetSettings: '无法重置设置',
+ couldNotSaveSettings: '无法保存设置',
+ settingsCouldNotLoad: '无法加载设置',
+ settingsUnavailable: '设置不可用。',
+ },
+ labels: {
+ appearance: '外观',
+ automatic: '自动',
+ fsrsParameters: 'FSRS 参数',
+ general: '通用',
+ language: '语言',
+ loadingSettings: '正在加载设置',
+ masteryHorizon: '掌握期限',
+ newCardOrder: '新卡顺序',
+ newCardsPerDay: '每日新卡',
+ reviewCardsPerDay: '每日复习卡',
+ savingSettings: '正在保存设置',
+ schedule: '计划',
+ searchNoTimezones: '没有匹配的时区。',
+ settings: '设置',
+ settingsReset: '设置已重置',
+ study: '学习',
+ targetRecallProbability: '目标回忆概率',
+ theme: '主题',
+ timezone: '时区',
+ },
+ options: {
+ languageEnUs: '英语(美国)',
+ newCardsAfterReviews: '复习之后',
+ newCardsBeforeReviews: '复习之前',
+ newCardsMixed: '混合',
+ themeDark: '深色',
+ themeLight: '浅色',
+ themeSystem: '系统',
+ timezoneSystem: '使用系统时区',
+ },
+ rows: {
+ fsrsDescription: '专家模型权重',
+ languageDescription: '界面语言',
+ masteryHorizonDescription: '卡片必须在目标概率或以上保持可回忆的天数,才算已掌握',
+ newCardOrderDescription: '新卡相对于复习的顺序',
+ newCardsPerDayDescription: '每日最多新卡数',
+ reviewCardsPerDayDescription: '每日最多复习卡数',
+ targetRecallProbabilityDescription: '下次计划复习时的最低回忆概率',
+ timezoneDescription: '使用自动时区或选择城市。',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: '永久删除',
+ empty: '清空',
+ emptyTrash: '清空回收站',
+ restore: '恢复',
+ restoringItem: '正在恢复 {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: '这会永久删除 "{{title}}"。此操作无法撤销。',
+ deleteItemFallbackDescription: '这会永久删除此项目。此操作无法撤销。',
+ deleteItemFallbackTitle: '删除项目?',
+ deleteItemTitle: '删除 "{{title}}"?',
+ emptyTrashDescription: '这会永久删除回收站中的所有内容。此操作无法撤销。',
+ emptyTrashTitle: '清空回收站?',
+ },
+ empty: {
+ description: '你删除的项目会在永久移除前显示在这里。',
+ title: '回收站为空',
+ },
+ errors: {
+ couldNotDeleteItem: '无法删除项目',
+ couldNotEmptyTrash: '无法清空回收站',
+ couldNotRestoreItem: '无法恢复项目',
+ trashCouldNotLoad: '无法加载回收站',
+ trashMayBeOutOfDate: '回收站可能已过期',
+ },
+ labels: {
+ deletedAge: '已删除 {{value}}',
+ itemCount_one: '{{count}} 个项目',
+ itemCount_other: '{{count}} 个项目',
+ lastEmptied: '上次清空 {{value}}',
+ loadingTrash: '正在加载回收站',
+ originalLocation: '原位置:{{location}}',
+ title: '回收站',
+ trashActions: '{{title}} 回收站操作',
+ },
+ kinds: {
+ deck: '牌组',
+ folder: '文件夹',
+ note: '笔记',
+ workspace: '工作区',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: '创建工作区',
+ deleteWorkspace: '删除工作区',
+ editWorkspace: '编辑工作区',
+ newWorkspace: '新建工作区',
+ openWorkspace: '打开 {{title}}',
+ openingWorkspace: '正在打开 {{title}}',
+ },
+ descriptions: {
+ editorDefault: '学习上下文。',
+ editorVisual: '为此工作区选择视觉锚点。',
+ emptyList: '按学习上下文分隔牌组、笔记和复习队列。',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: '这会将 "{{title}}" 移至回收站。你稍后可以恢复它。',
+ deleteWorkspaceFallbackDescription: '这会将此工作区移至回收站。你稍后可以恢复它。',
+ deleteWorkspaceFallbackTitle: '删除工作区?',
+ deleteWorkspaceTitle: '删除 "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: '从工作区开始',
+ },
+ errors: {
+ couldNotCreateWorkspace: '无法创建工作区',
+ couldNotDeleteWorkspace: '无法删除工作区',
+ couldNotOpenWorkspace: '无法打开工作区',
+ couldNotSaveWorkspace: '无法保存工作区',
+ workspaceCouldNotLoad: '无法加载工作区',
+ workspacesCouldNotLoad: '无法加载工作区',
+ },
+ fields: {
+ descriptionLabel: '工作区描述',
+ descriptionPlaceholder: '这个工作区里放什么?',
+ namePlaceholder: '工作区名称',
+ untitledWorkspace: '未命名工作区',
+ },
+ labels: {
+ createWorkspaceTitle: '创建工作区',
+ loadingWorkspaces: '正在加载工作区',
+ workspace: '工作区',
+ workspaces: '工作区',
+ },
+ },
+} as const
diff --git a/ui/src/core/i18n/resources/zh-Hant.ts b/ui/src/core/i18n/resources/zh-Hant.ts
new file mode 100644
index 0000000..8672755
--- /dev/null
+++ b/ui/src/core/i18n/resources/zh-Hant.ts
@@ -0,0 +1,623 @@
+export const zhHant = {
+ bootstrap: {
+ error: {
+ fallbackMessage: '請重試。如果問題仍然存在,請重新打開 Clear。',
+ title: '無法啟動',
+ },
+ loadingTitle: '正在準備你的學習空間',
+ },
+ common: {
+ actions: {
+ back: '返回',
+ cancel: '取消',
+ checkAgain: '再次檢查',
+ close: '關閉',
+ create: '建立',
+ delete: '刪除',
+ dismissError: '關閉錯誤',
+ dismissStatus: '關閉狀態',
+ edit: '編輯',
+ itemActions: '{{title}} 操作',
+ reset: '重置',
+ review: '複習',
+ save: '儲存',
+ saveChanges: '儲存變更',
+ tryAgain: '重試',
+ },
+ labels: {
+ active: '啟用',
+ clear: 'Clear',
+ custom: '自訂',
+ default: '預設',
+ loadingEditor: '正在載入編輯器',
+ name: '名稱',
+ completedTask: '已完成任務',
+ description: '描述',
+ incompleteTask: '未完成任務',
+ percentageInput: '{{label}} 百分比',
+ visual: '視覺',
+ },
+ status: {
+ actionFailed: '操作失敗',
+ actionInProgress: '操作進行中',
+ },
+ sort: {
+ ascending: '升冪',
+ column: '列',
+ descending: '降冪',
+ direction: '方向',
+ sort: '排序',
+ },
+ search: {
+ label: '搜尋',
+ },
+ visualPicker: {
+ allLucideIcons: '所有 Lucide 圖示',
+ browseIconsFor: '瀏覽或搜尋 {{label}} 的圖示。',
+ chooseIcon: '選擇圖示',
+ iconPicker: '{{label}} 圖示選擇器',
+ iconSearch: '{{label}} 圖示搜尋',
+ iconsCouldNotLoad: '無法載入圖示。',
+ loadingIcons: '正在載入圖示',
+ loadingMoreIcons: '正在載入更多圖示',
+ moreIcons: '更多圖示',
+ noIconsMatch: '沒有圖示符合 "{{query}}"。',
+ searchIconsPlaceholder: '搜尋圖示…',
+ selectedIcon: '已選擇 {{label}}',
+ },
+ },
+ dashboard: {
+ actions: {
+ create: '建立',
+ newDeck: '新建牌組',
+ newFolder: '新建資料夾',
+ },
+ descriptions: {
+ defaultWorkspace: '將牌組、資料夾和筆記放在一起。',
+ emptyWorkspace: '建立一個牌組,然後新增筆記來建立複習佇列。',
+ emptyFolder: '建立一個牌組,然後新增筆記來建立複習佇列。',
+ searchPlaceholder: '搜尋資料夾、牌組和筆記…',
+ },
+ empty: {
+ createFirstDeck: '建立你的第一個牌組',
+ },
+ errors: {
+ couldNotDeleteDeck: '無法刪除牌組',
+ couldNotDeleteFolder: '無法刪除資料夾',
+ couldNotDeleteWorkspace: '無法刪除工作區',
+ dashboardCouldNotOpen: '無法打開儀表板',
+ decksCouldNotLoad: '無法載入牌組',
+ decksMayBeOutOfDate: '牌組可能已過期',
+ foldersCouldNotLoad: '無法載入資料夾',
+ foldersMayBeOutOfDate: '資料夾可能已過期',
+ workspaceCouldNotLoad: '無法載入工作區',
+ },
+ labels: {
+ dashboard: '儀表板',
+ loadingDashboard: '正在載入儀表板',
+ newItem: '新項目',
+ },
+ },
+ dates: {
+ absolute: {
+ unavailable: '日期不可用',
+ },
+ age: {
+ dayAgo_one: '{{count}} 天前',
+ dayAgo_other: '{{count}} 天前',
+ hourAgo_one: '{{count}} 小時前',
+ hourAgo_other: '{{count}} 小時前',
+ justNow: '剛剛',
+ minuteAgo_one: '{{count}} 分鐘前',
+ minuteAgo_other: '{{count}} 分鐘前',
+ unavailable: '日期不可用',
+ weekAgo_one: '{{count}} 週前',
+ weekAgo_other: '{{count}} 週前',
+ },
+ labels: {
+ deleted: '已刪除 {{value}}',
+ due: '到期:{{value}}',
+ reviewed: '已複習:{{value}}',
+ updated: '已更新 {{value}}',
+ updatedUppercase: '已更新 {{value}}',
+ },
+ relative: {
+ dayAgo_one: '{{count}} 天前',
+ dayAgo_other: '{{count}} 天前',
+ inAMoment: '马上',
+ inDay_one: '{{count}} 天後',
+ inDay_other: '{{count}} 天後',
+ inMonth_one: '{{count}} 個月後',
+ inMonth_other: '{{count}} 個月後',
+ inWeek_one: '{{count}} 週後',
+ inWeek_other: '{{count}} 週後',
+ justNow: '剛剛',
+ monthAgo_one: '{{count}} 個月前',
+ monthAgo_other: '{{count}} 個月前',
+ secondsAgoShort: '{{count}} 秒前',
+ minutesAgoShort: '{{count}} 分鐘前',
+ hoursAgoShort: '{{count}} 小時前',
+ today: '今天',
+ tomorrow: '明天',
+ weekAgo_one: '{{count}} 週前',
+ weekAgo_other: '{{count}} 週前',
+ yesterday: '昨天',
+ },
+ },
+ decks: {
+ actions: {
+ actionMenu: '{{title}} 操作',
+ createDeck: '建立牌組',
+ createNote: '建立筆記',
+ deleteDeck: '刪除牌組',
+ editDeck: '編輯牌組',
+ newNote: '新建筆記',
+ openDeck: '打開 {{title}} 牌組',
+ saveDeck: '無法儲存牌組',
+ studyNow: '立即學習',
+ },
+ descriptions: {
+ emptyDeck: '新增一則筆記,让這個牌組有可複習的內容。',
+ editorDefault: '专注學習牌組。',
+ editorVisual: '為這個牌組選擇封面符號。',
+ notesSearchPlaceholder: '搜尋筆記…',
+ },
+ dialogs: {
+ deleteDeckDescription: '這會將 "{{title}}" 移至回收站。你稍後可以還原它。',
+ deleteDeckFallbackDescription: '這會將此牌組移至回收站。你稍後可以還原它。',
+ deleteDeckFallbackTitle: '刪除牌組?',
+ deleteDeckTitle: '刪除 "{{title}}"?',
+ deleteNoteDescription: '這會將 "{{title}}" 移至回收站。你稍後可以還原它。',
+ deleteNoteFallbackTitle: '刪除筆記?',
+ deleteNoteTitle: '刪除 "{{title}}"?',
+ },
+ empty: {
+ noMatchingNotes: '沒有符合的筆記',
+ noMatchingNotesDescription: '沒有筆記符合 "{{query}}"。',
+ thisDeckIsEmpty: '這個牌組是空的',
+ },
+ errors: {
+ couldNotCreateDeck: '無法建立牌組',
+ couldNotDeleteDeck: '無法刪除牌組',
+ couldNotDeleteNote: '無法刪除筆記',
+ couldNotLoadFolderPath: '無法載入資料夾路径',
+ couldNotSaveDeck: '無法儲存牌組',
+ deckCouldNotLoad: '無法載入牌組',
+ notesCouldNotLoad: '無法載入筆記',
+ notesMayBeOutOfDate: '筆記可能已過期',
+ },
+ fields: {
+ descriptionLabel: '牌組描述',
+ descriptionPlaceholder: '這個牌組會帮助你複習什么?',
+ namePlaceholder: '牌組名稱',
+ untitledDeck: '未命名牌組',
+ untitledDeckLower: '未命名牌組',
+ },
+ labels: {
+ createDeckTitle: '建立牌組',
+ deck: '牌組',
+ deckNotesSearch: '牌組筆記搜尋',
+ deckOverview: '牌組概覽',
+ decks: '牌組',
+ due: '到期',
+ dueToday: '今日到期',
+ loadingDeck: '正在載入牌組',
+ mastery: '掌握度',
+ notes: '筆記',
+ },
+ sort: {
+ ariaLabel: '排序牌組',
+ dueToday: '今日到期',
+ title: '標題',
+ updated: '更新時間',
+ },
+ },
+ errors: {
+ byType: {
+ conflict: '資料已變更。請重新整理後重試。',
+ forbidden: '你沒有權限执行此操作。',
+ notFound: '找不到此項目。',
+ offline: '無法連線到服務。',
+ timeout: '耗時過长。請重試。',
+ unauthorized: '請登入以继续。',
+ unavailable: '服務暫時不可用。',
+ },
+ fallback: {
+ unexpected: '意外錯誤',
+ },
+ },
+ folders: {
+ actions: {
+ createFolder: '建立資料夾',
+ deleteFolder: '刪除資料夾',
+ editFolder: '編輯資料夾',
+ },
+ descriptions: {
+ editorDefault: '用于相關牌組的資料夾。',
+ },
+ dialogs: {
+ deleteFolderDescription: '這會將 "{{name}}" 移至回收站。你稍後可以還原它。',
+ deleteFolderFallbackDescription: '這會將此資料夾移至回收站。你稍後可以還原它。',
+ deleteFolderFallbackTitle: '刪除資料夾?',
+ deleteFolderTitle: '刪除 "{{name}}"?',
+ },
+ empty: {
+ noMatchesInFolder: '此資料夾中沒有符合項',
+ noMatchesInFolderDescription: '沒有資料夾、牌組或筆記符合 "{{query}}"。',
+ },
+ errors: {
+ couldNotCreateFolder: '無法建立資料夾',
+ couldNotDeleteFolder: '無法刪除資料夾',
+ couldNotLoadFolderPath: '無法載入資料夾路径',
+ couldNotSaveFolder: '無法儲存資料夾',
+ folderCouldNotLoad: '無法載入資料夾',
+ },
+ fields: {
+ descriptionLabel: '資料夾描述',
+ descriptionPlaceholder: '這個資料夾裡放什么?',
+ namePlaceholder: '資料夾名稱',
+ untitledFolder: '未命名資料夾',
+ },
+ labels: {
+ createFolderTitle: '建立資料夾',
+ folder: '資料夾',
+ folders: '資料夾',
+ loadingFolder: '正在載入資料夾',
+ name: '名稱',
+ updated: '更新時間',
+ },
+ sort: {
+ ariaLabel: '排序資料夾',
+ name: '名稱',
+ updated: '更新時間',
+ },
+ },
+ menu: {
+ conflicts: {
+ description: '如果本地資料和同步資料不一致,項目會顯示在這裡。',
+ heading: '同步狀態',
+ title: '衝突',
+ noConflicts: '未發現衝突',
+ },
+ labels: {
+ menu: '選單',
+ },
+ sections: {
+ settings: {
+ description: '個人化你的環境和偏好',
+ title: '設定',
+ },
+ trash: {
+ description: '還原或永久刪除已移除的項目',
+ title: '回收站',
+ },
+ },
+ },
+ navigation: {
+ actions: {
+ closeEditor: '關閉編輯器',
+ openActions: '打開操作',
+ openWorkspaces: '打開工作區',
+ },
+ items: {
+ home: '首頁',
+ menu: '選單',
+ primary: '主要',
+ settings: '設定',
+ spaces: '空間',
+ trash: '回收站',
+ workspaces: '工作區',
+ },
+ },
+ notes: {
+ actions: {
+ addCloze: '新增克漏字',
+ deleteNote: '刪除筆記',
+ editNote: '編輯筆記',
+ hideDerivedCardsNote: '隱藏衍生卡片提示',
+ openNote: '打開 {{title}}',
+ saveNote: '儲存筆記',
+ showDerivedCardsNote: '顯示衍生卡片提示',
+ },
+ descriptions: {
+ clozeFormat: '儲存後,每個隱藏部分都會成為一張複習卡片。',
+ clozeFormatPrefix: '用以下標記包裹隱藏文本',
+ derivedCardsHelper: '筆記是衍生卡片的事實來源。',
+ },
+ dialogs: {
+ deleteNoteDescription: '這會將 "{{title}}" 移至回收站。你稍後可以還原它。',
+ deleteNoteFallbackDescription: '這會將此筆記移至回收站。你稍後可以還原它。',
+ deleteNoteFallbackTitle: '刪除筆記?',
+ deleteNoteTitle: '刪除 "{{title}}"?',
+ },
+ errors: {
+ couldNotCreateNote: '無法建立筆記',
+ couldNotDeleteNote: '無法刪除筆記',
+ couldNotSaveNote: '無法儲存筆記',
+ noteCouldNotLoad: '無法載入筆記',
+ },
+ fields: {
+ back: '背面',
+ backPlaceholder: '輸入背面',
+ bodyPlaceholder: '用克漏字刪除编寫筆記內文…',
+ front: '正面',
+ frontPlaceholder: '輸入正面',
+ noteBody: '筆記內文',
+ title: '標題',
+ titlePlaceholder: '新增筆記標題',
+ untitledCloze: '未命名克漏字',
+ untitledNote: '未命名筆記',
+ },
+ labels: {
+ backUppercase: '背面',
+ basic: '基本',
+ basicLower: '基本',
+ basicUppercase: '基本',
+ cloze: '克漏字',
+ clozeLower: '克漏字',
+ clozeFormat: '克漏字格式',
+ clozeUppercase: '克漏字',
+ deck: '牌組',
+ derivedCards: '衍生卡片',
+ due: '到期',
+ frontUppercase: '正面',
+ inProgress: '進行中',
+ inProgressUppercase: '進行中',
+ loadingNote: '正在載入筆記',
+ loadingNoteEditor: '正在載入筆記編輯器',
+ markdownFormatting: 'Markdown 格式',
+ mastered: '已掌握',
+ masteredUppercase: '已掌握',
+ newNote: '新建筆記',
+ noteBody: '筆記內文',
+ noteContent: '筆記內容',
+ noteDetails: '筆記详情',
+ noteMetadata: '筆記元資料',
+ noteType: '筆記类型',
+ notes: '筆記',
+ reviewed: '已複習',
+ studyProgress: '學習進度',
+ studyProgressUppercase: '學習進度',
+ titleUppercase: '標題',
+ updated: '更新時間',
+ },
+ sort: {
+ ariaLabel: '排序筆記',
+ title: '標題',
+ updated: '更新時間',
+ },
+ toolbar: {
+ bold: '粗體',
+ italic: '斜體',
+ link: '連結',
+ list: '清單',
+ },
+ },
+ review: {
+ actions: {
+ again: '重來',
+ backToDeck: '返回牌組',
+ continueReview: '继续複習',
+ easy: '简單',
+ good: '良好',
+ hard: '困难',
+ newNote: '新建筆記',
+ showAnswer: '顯示答案',
+ },
+ errors: {
+ couldNotGradeCard: '無法評分卡片',
+ reviewCouldNotLoad: '無法載入複習',
+ reviewCouldNotStart: '無法開始複習',
+ summaryCouldNotLoad: '無法載入複習摘要',
+ summaryNotAvailable: '複習摘要不可用',
+ summaryNotComplete: '這次複習尚未完成。',
+ },
+ labels: {
+ cardsReviewed: '已複習卡片',
+ deck: '牌組',
+ duration: '時长',
+ loadingReview: '正在載入複習',
+ loadingSummary: '正在載入摘要',
+ progress: '複習進度',
+ review: '複習',
+ reviewComplete: '複習完成',
+ reviewed_one: '已複習 {{count}} 張',
+ reviewed_other: '已複習 {{count}} 張',
+ },
+ summary: {
+ durationHoursMinutes: '{{hours}} 小時 {{minutes}} 分鐘',
+ durationMinutes: '{{minutes}} 分鐘',
+ durationSeconds: '{{seconds}} 秒',
+ saved: '你的進度已儲存到這個牌組。',
+ },
+ unavailable: {
+ description: '新增一則筆記,让這個牌組可以進入複習佇列。',
+ title: '沒有可複習的卡片',
+ },
+ },
+ search: {
+ actions: {
+ clearSearch: '清除搜尋',
+ },
+ empty: {
+ noMatchesInWorkspace: '此工作區中沒有符合項',
+ noMatchesInWorkspaceDescription: '沒有資料夾、牌組或筆記符合 "{{query}}"。',
+ },
+ errors: {
+ couldNotComplete: '無法完成搜尋',
+ },
+ labels: {
+ results: '搜尋結果',
+ resultsFor: '"{{query}}" 的結果',
+ searchingContent: '正在搜尋內容',
+ },
+ resultGroups: {
+ deck: '牌組',
+ folder: '資料夾',
+ note: '筆記',
+ },
+ resultKinds: {
+ deck: '牌組',
+ folder: '資料夾',
+ note: '筆記',
+ },
+ },
+ settings: {
+ actions: {
+ resetAll: '重設所有設定',
+ resetSettings: '重設設定',
+ resetToDefaults: '還原預設值',
+ },
+ dialogs: {
+ fsrsErrorInvalidJson: '請貼上包含 21 個數值的有效 JSON。',
+ fsrsErrorInvalidParams_one: '請輸入正好包含 {{count}} 個有限數的 JSON 陣列。',
+ fsrsErrorInvalidParams_other: '請輸入正好包含 {{count}} 個有限數的 JSON 陣列。',
+ fsrsHelper: '這是專家級覆寫設定。值必須保持順序。',
+ fsrsJsonLabel: 'FSRS 參數 JSON',
+ fsrsTitle: '編輯 FSRS 參數',
+ fsrsDescription: '貼上包含 21 個數字的 JSON 陣列以覆寫 scheduler 權重。',
+ resetDescription: '這會還原時區、學習上限和 FSRS 設定。',
+ resetDescriptionWithLanguage: '這會還原語言、時區、學習上限和 FSRS 設定。',
+ resetTitle: '重設所有設定?',
+ timezoneDescription: '搜尋城市或時區識別碼。',
+ timezoneSearchLabel: '搜尋時區',
+ timezoneSearchPlaceholder: '搜尋時區…',
+ timezoneTitle: '選擇時區',
+ },
+ errors: {
+ couldNotResetSettings: '無法重設設定',
+ couldNotSaveSettings: '無法儲存設定',
+ settingsCouldNotLoad: '無法載入設定',
+ settingsUnavailable: '設定不可用。',
+ },
+ labels: {
+ appearance: '外觀',
+ automatic: '自動',
+ fsrsParameters: 'FSRS 參數',
+ general: '一般',
+ language: '語言',
+ loadingSettings: '正在載入設定',
+ masteryHorizon: '掌握期限',
+ newCardOrder: '新卡順序',
+ newCardsPerDay: '每日新卡',
+ reviewCardsPerDay: '每日複習卡',
+ savingSettings: '正在儲存設定',
+ schedule: '排程',
+ searchNoTimezones: '沒有符合的時區。',
+ settings: '設定',
+ settingsReset: '設定已重設',
+ study: '學習',
+ targetRecallProbability: '目標回憶機率',
+ theme: '主題',
+ timezone: '時區',
+ },
+ options: {
+ languageEnUs: '英語(美國)',
+ newCardsAfterReviews: '複習之後',
+ newCardsBeforeReviews: '複習之前',
+ newCardsMixed: '混合',
+ themeDark: '深色',
+ themeLight: '淺色',
+ themeSystem: '系統',
+ timezoneSystem: '使用系統時區',
+ },
+ rows: {
+ fsrsDescription: '專家模型權重',
+ languageDescription: '介面語言',
+ masteryHorizonDescription: '卡片必須在目標機率或以上保持可回憶的天數,才算已掌握',
+ newCardOrderDescription: '新卡相對於複習的順序',
+ newCardsPerDayDescription: '每日最多新卡數',
+ reviewCardsPerDayDescription: '每日最多複習卡數',
+ targetRecallProbabilityDescription: '下次排程複習時的最低回憶機率',
+ timezoneDescription: '使用自動時區或選擇城市。',
+ },
+ },
+ trash: {
+ actions: {
+ deletePermanently: '永久刪除',
+ empty: '清空',
+ emptyTrash: '清空回收站',
+ restore: '還原',
+ restoringItem: '正在還原 {{title}}',
+ },
+ dialogs: {
+ deleteItemDescription: '這會永久刪除 "{{title}}"。此操作無法撤销。',
+ deleteItemFallbackDescription: '這會永久刪除此項目。此操作無法撤销。',
+ deleteItemFallbackTitle: '刪除項目?',
+ deleteItemTitle: '刪除 "{{title}}"?',
+ emptyTrashDescription: '這會永久刪除回收站中的所有內容。此操作無法撤销。',
+ emptyTrashTitle: '清空回收站?',
+ },
+ empty: {
+ description: '你刪除的項目會在永久移除前顯示在這裡。',
+ title: '回收站為空',
+ },
+ errors: {
+ couldNotDeleteItem: '無法刪除項目',
+ couldNotEmptyTrash: '無法清空回收站',
+ couldNotRestoreItem: '無法還原項目',
+ trashCouldNotLoad: '無法載入回收站',
+ trashMayBeOutOfDate: '回收站可能已過期',
+ },
+ labels: {
+ deletedAge: '已刪除 {{value}}',
+ itemCount_one: '{{count}} 個項目',
+ itemCount_other: '{{count}} 個項目',
+ lastEmptied: '上次清空 {{value}}',
+ loadingTrash: '正在載入回收站',
+ originalLocation: '原始位置:{{location}}',
+ title: '回收站',
+ trashActions: '{{title}} 回收站操作',
+ },
+ kinds: {
+ deck: '牌組',
+ folder: '資料夾',
+ note: '筆記',
+ workspace: '工作區',
+ },
+ },
+ workspaces: {
+ actions: {
+ createWorkspace: '建立工作區',
+ deleteWorkspace: '刪除工作區',
+ editWorkspace: '編輯工作區',
+ newWorkspace: '新建工作區',
+ openWorkspace: '打開 {{title}}',
+ openingWorkspace: '正在打開 {{title}}',
+ },
+ descriptions: {
+ editorDefault: '學習脈絡。',
+ editorVisual: '為此工作區選擇視覺锚点。',
+ emptyList: '按學習脈絡分隔牌組、筆記和複習佇列。',
+ },
+ dialogs: {
+ deleteWorkspaceDescription: '這會將 "{{title}}" 移至回收站。你稍後可以還原它。',
+ deleteWorkspaceFallbackDescription: '這會將此工作區移至回收站。你稍後可以還原它。',
+ deleteWorkspaceFallbackTitle: '刪除工作區?',
+ deleteWorkspaceTitle: '刪除 "{{title}}"?',
+ },
+ empty: {
+ startWithWorkspace: '從工作區開始',
+ },
+ errors: {
+ couldNotCreateWorkspace: '無法建立工作區',
+ couldNotDeleteWorkspace: '無法刪除工作區',
+ couldNotOpenWorkspace: '無法打開工作區',
+ couldNotSaveWorkspace: '無法儲存工作區',
+ workspaceCouldNotLoad: '無法載入工作區',
+ workspacesCouldNotLoad: '無法載入工作區',
+ },
+ fields: {
+ descriptionLabel: '工作區描述',
+ descriptionPlaceholder: '這個工作區裡放什么?',
+ namePlaceholder: '工作區名稱',
+ untitledWorkspace: '未命名工作區',
+ },
+ labels: {
+ createWorkspaceTitle: '建立工作區',
+ loadingWorkspaces: '正在載入工作區',
+ workspace: '工作區',
+ workspaces: '工作區',
+ },
+ },
+} as const
diff --git a/ui/src/features/settings/components/SettingsPageContent.tsx b/ui/src/features/settings/components/SettingsPageContent.tsx
index 79f2c0f..3cb5f15 100644
--- a/ui/src/features/settings/components/SettingsPageContent.tsx
+++ b/ui/src/features/settings/components/SettingsPageContent.tsx
@@ -1,4 +1,5 @@
import type { ThemePreference } from '@core/theme'
+import { getDocumentLocale } from '@core/i18n'
import { Button } from '@shared/components/ui/button'
import { useTranslation } from 'react-i18next'
@@ -86,7 +87,7 @@ const SettingsPageContentInner = ({
description={t(($) => $.settings.rows.languageDescription)}
label={t(($) => $.settings.labels.language)}
options={settingsLanguageOptions}
- value={settings.language}
+ value={getDocumentLocale(settings.language)}
onSelect={(language) => {
onUpdateSettings({ language })
}}
diff --git a/ui/src/features/settings/constants/settings-options.test.ts b/ui/src/features/settings/constants/settings-options.test.ts
new file mode 100644
index 0000000..0ba034c
--- /dev/null
+++ b/ui/src/features/settings/constants/settings-options.test.ts
@@ -0,0 +1,59 @@
+import { describe, expect, it } from 'vitest'
+
+import { publicLocales } from '@core/i18n'
+
+import { settingsLanguageOptions } from './settings-options'
+
+describe('settings options', () => {
+ it('lists public locales with English language labels sorted alphabetically', () => {
+ expect(settingsLanguageOptions).toEqual([
+ { label: 'Arabic', value: 'ar' },
+ { label: 'Bosnian', value: 'bs' },
+ { label: 'Bulgarian', value: 'bg' },
+ { label: 'Catalan', value: 'ca' },
+ { label: 'Chinese (Simplified)', value: 'zh-Hans' },
+ { label: 'Chinese (Traditional)', value: 'zh-Hant' },
+ { label: 'Croatian', value: 'hr' },
+ { label: 'Czech', value: 'cs' },
+ { label: 'Danish', value: 'da' },
+ { label: 'Dutch', value: 'nl' },
+ { label: 'English', value: 'en-US' },
+ { label: 'Estonian', value: 'et' },
+ { label: 'Finnish', value: 'fi' },
+ { label: 'French', value: 'fr' },
+ { label: 'German', value: 'de' },
+ { label: 'Greek', value: 'el' },
+ { label: 'Hebrew', value: 'he' },
+ { label: 'Hungarian', value: 'hu' },
+ { label: 'Indonesian', value: 'id' },
+ { label: 'Italian', value: 'it' },
+ { label: 'Japanese', value: 'ja' },
+ { label: 'Korean', value: 'ko' },
+ { label: 'Latvian', value: 'lv' },
+ { label: 'Lithuanian', value: 'lt' },
+ { label: 'Norwegian Bokmål', value: 'nb' },
+ { label: 'Persian', value: 'fa' },
+ { label: 'Polish', value: 'pl' },
+ { label: 'Portuguese (Brazil)', value: 'pt-BR' },
+ { label: 'Romanian', value: 'ro' },
+ { label: 'Russian', value: 'ru' },
+ { label: 'Serbian', value: 'sr-Latn' },
+ { label: 'Slovak', value: 'sk' },
+ { label: 'Slovenian', value: 'sl' },
+ { label: 'Spanish', value: 'es' },
+ { label: 'Swedish', value: 'sv' },
+ { label: 'Thai', value: 'th' },
+ { label: 'Turkish', value: 'tr' },
+ { label: 'Ukrainian', value: 'uk' },
+ { label: 'Vietnamese', value: 'vi' },
+ ])
+ expect(settingsLanguageOptions.map((option) => option.label)).toEqual(
+ settingsLanguageOptions
+ .map((option) => option.label)
+ .sort((left, right) => left.localeCompare(right)),
+ )
+ expect([...settingsLanguageOptions.map((option) => option.value)].sort()).toEqual(
+ [...publicLocales].sort(),
+ )
+ })
+})
diff --git a/ui/src/features/settings/constants/settings-options.ts b/ui/src/features/settings/constants/settings-options.ts
index d34b42f..2ed4aaa 100644
--- a/ui/src/features/settings/constants/settings-options.ts
+++ b/ui/src/features/settings/constants/settings-options.ts
@@ -1,36 +1,52 @@
+import type { PublicLocale } from '@core/i18n'
+
import type { SettingsNewCardsOrder } from '../types/settings.types'
export type SettingsLanguageOption = Readonly<{
label: string
- value: string
+ value: PublicLocale
}>
export const settingsLanguageOptions: SettingsLanguageOption[] = [
- { label: 'English (US)', value: 'en-US' },
- { label: 'English (UK)', value: 'en-GB' },
- { label: 'Spanish', value: 'es' },
+ { label: 'Arabic', value: 'ar' },
+ { label: 'Bosnian', value: 'bs' },
+ { label: 'Bulgarian', value: 'bg' },
+ { label: 'Catalan', value: 'ca' },
+ { label: 'Chinese (Simplified)', value: 'zh-Hans' },
+ { label: 'Chinese (Traditional)', value: 'zh-Hant' },
+ { label: 'Croatian', value: 'hr' },
+ { label: 'Czech', value: 'cs' },
+ { label: 'Danish', value: 'da' },
+ { label: 'Dutch', value: 'nl' },
+ { label: 'English', value: 'en-US' },
+ { label: 'Estonian', value: 'et' },
+ { label: 'Finnish', value: 'fi' },
{ label: 'French', value: 'fr' },
{ label: 'German', value: 'de' },
- { label: 'Russian', value: 'ru' },
+ { label: 'Greek', value: 'el' },
+ { label: 'Hebrew', value: 'he' },
+ { label: 'Hungarian', value: 'hu' },
+ { label: 'Indonesian', value: 'id' },
{ label: 'Italian', value: 'it' },
- { label: 'Portuguese (Brazil)', value: 'pt-BR' },
- { label: 'Portuguese (Portugal)', value: 'pt-PT' },
{ label: 'Japanese', value: 'ja' },
- { label: 'Chinese (Simplified)', value: 'zh-Hans' },
- { label: 'Chinese (Traditional)', value: 'zh-Hant' },
{ label: 'Korean', value: 'ko' },
- { label: 'Arabic', value: 'ar' },
- { label: 'Hindi', value: 'hi' },
- { label: 'Turkish', value: 'tr' },
- { label: 'Dutch', value: 'nl' },
+ { label: 'Latvian', value: 'lv' },
+ { label: 'Lithuanian', value: 'lt' },
+ { label: 'Norwegian Bokmål', value: 'nb' },
+ { label: 'Persian', value: 'fa' },
{ label: 'Polish', value: 'pl' },
+ { label: 'Portuguese (Brazil)', value: 'pt-BR' },
+ { label: 'Romanian', value: 'ro' },
+ { label: 'Russian', value: 'ru' },
+ { label: 'Serbian', value: 'sr-Latn' },
+ { label: 'Slovak', value: 'sk' },
+ { label: 'Slovenian', value: 'sl' },
+ { label: 'Spanish', value: 'es' },
{ label: 'Swedish', value: 'sv' },
- { label: 'Greek', value: 'el' },
- { label: 'Hebrew', value: 'he' },
- { label: 'Indonesian', value: 'id' },
- { label: 'Vietnamese', value: 'vi' },
{ label: 'Thai', value: 'th' },
+ { label: 'Turkish', value: 'tr' },
{ label: 'Ukrainian', value: 'uk' },
+ { label: 'Vietnamese', value: 'vi' },
]
export const settingsNewCardsOrderOptions: Array<{
diff --git a/ui/src/features/settings/constants/settings-ui.ts b/ui/src/features/settings/constants/settings-ui.ts
index f9b6fe1..74f3ab7 100644
--- a/ui/src/features/settings/constants/settings-ui.ts
+++ b/ui/src/features/settings/constants/settings-ui.ts
@@ -1 +1 @@
-export const showSettingsLanguageControl = false
+export const showSettingsLanguageControl = true
diff --git a/ui/src/features/settings/pages/SettingsPage.test.tsx b/ui/src/features/settings/pages/SettingsPage.test.tsx
index 8cbe52a..76b0b3c 100644
--- a/ui/src/features/settings/pages/SettingsPage.test.tsx
+++ b/ui/src/features/settings/pages/SettingsPage.test.tsx
@@ -119,7 +119,7 @@ describe('SettingsPage', () => {
})
expect(screen.getByRole('button', { name: 'Timezone' })).toBeInTheDocument()
- expect(screen.queryByRole('button', { name: 'Language' })).not.toBeInTheDocument()
+ expect(screen.getByRole('button', { name: 'Language' })).toBeInTheDocument()
await act(async () => {
await vi.advanceTimersByTimeAsync(180)
@@ -138,7 +138,7 @@ describe('SettingsPage', () => {
expect(screen.getByText('Appearance')).toBeInTheDocument()
expect(screen.getByText('Study')).toBeInTheDocument()
expect(screen.getByText('FSRS Parameters')).toBeInTheDocument()
- expect(screen.queryByRole('button', { name: 'Language' })).not.toBeInTheDocument()
+ expect(screen.getByRole('button', { name: 'Language' })).toHaveTextContent('English')
await user.click(await screen.findByRole('button', { name: 'Timezone' }))
const timezoneDialog = await screen.findByRole('dialog', { name: 'Choose Timezone' })
@@ -163,6 +163,37 @@ describe('SettingsPage', () => {
)
})
+ it('switches the interface language when a language option is selected', async () => {
+ const user = userEvent.setup()
+ const baseServices = createAppServices('mock')
+ const write = vi.fn(baseServices.settings.write)
+ const services = {
+ ...baseServices,
+ settings: {
+ ...baseServices.settings,
+ write,
+ },
+ }
+
+ renderRoute('/menu/settings', { services })
+
+ const languageButton = await screen.findByRole('button', { name: 'Language' })
+
+ expect(languageButton).toHaveTextContent('English')
+ expect(document.documentElement).toHaveAttribute('lang', 'en-US')
+ expect(document.documentElement).toHaveAttribute('dir', 'ltr')
+
+ await user.click(languageButton)
+ await user.click(await screen.findByRole('menuitem', { name: 'Arabic' }))
+
+ expect(await screen.findByRole('heading', { name: 'الإعدادات' })).toBeInTheDocument()
+ expect(document.documentElement).toHaveAttribute('lang', 'ar')
+ expect(document.documentElement).toHaveAttribute('dir', 'rtl')
+ await waitFor(() => {
+ expect(write).toHaveBeenCalledWith(expect.objectContaining({ language: 'ar' }))
+ })
+ })
+
it('renders in the desktop sidebar layout', async () => {
const user = userEvent.setup()
mockMatchMedia(true)
@@ -171,7 +202,7 @@ describe('SettingsPage', () => {
const heading = await screen.findByRole('heading', { name: 'Settings' })
expect(heading).toBeInTheDocument()
expect(await screen.findByRole('button', { name: 'Timezone' })).toBeInTheDocument()
- expect(screen.queryByRole('button', { name: 'Language' })).not.toBeInTheDocument()
+ expect(screen.getByRole('button', { name: 'Language' })).toHaveTextContent('English')
expect(heading.closest('div.mx-auto')).toHaveClass('max-w-page-narrow')
expect(screen.getByText('General')).toBeInTheDocument()
expect(screen.getByText('Appearance')).toBeInTheDocument()
@@ -189,7 +220,9 @@ describe('SettingsPage', () => {
await user.click(resetButton)
const dialog = await screen.findByRole('dialog', { name: 'Reset all settings?' })
expect(dialog).toBeInTheDocument()
- expect(dialog).toHaveTextContent('This restores timezone, study limits, and FSRS settings.')
+ expect(dialog).toHaveTextContent(
+ 'This restores language, timezone, study limits, and FSRS settings.',
+ )
expect(screen.getByRole('link', { name: 'Settings', hidden: true })).toHaveAttribute(
'aria-current',
'page',
diff --git a/ui/src/features/settings/pages/SettingsPage.tsx b/ui/src/features/settings/pages/SettingsPage.tsx
index 9ab3bd9..6512e15 100644
--- a/ui/src/features/settings/pages/SettingsPage.tsx
+++ b/ui/src/features/settings/pages/SettingsPage.tsx
@@ -5,6 +5,7 @@ import {
BottomActionErrorStatus,
desktopBottomStatusStackClassName,
} from '@shared/components/feedback/BottomActionErrorStatus'
+import { getDocumentLocale } from '@core/i18n'
import { useThemeStore } from '@core/theme'
import { LoadErrorState } from '@shared/components/feedback/LoadErrorState'
import { PendingSpinner } from '@shared/components/feedback/PendingSpinner'
@@ -26,7 +27,7 @@ import {
import type { Settings } from '../types/settings.types'
export const SettingsPage = () => {
- const { t } = useTranslation()
+ const { i18n, t } = useTranslation()
const activeWorkspaceIdQuery = useActiveWorkspaceId()
const homeTarget = activeWorkspaceIdQuery.data
? { to: `/dashboard/${activeWorkspaceIdQuery.data}` }
@@ -53,8 +54,9 @@ export const SettingsPage = () => {
useEffect(() => {
if (settingsQuery.data) {
setSettings(settingsQuery.data)
+ void i18n.changeLanguage(getDocumentLocale(settingsQuery.data.language))
}
- }, [settingsQuery.data])
+ }, [i18n, settingsQuery.data])
const isInitialLoading = settingsQuery.isLoading || (!settings && !settingsQuery.isError)
const showInitialLoading = useDelayedBoolean(isInitialLoading, 180)
@@ -104,6 +106,9 @@ export const SettingsPage = () => {
const nextSettings = { ...settings, ...patch }
setSettings(nextSettings)
+ if (typeof patch.language === 'string') {
+ void i18n.changeLanguage(getDocumentLocale(patch.language))
+ }
writeSettings.mutate(nextSettings)
}
@@ -170,6 +175,7 @@ export const SettingsPage = () => {
resetSettings.mutate(undefined, {
onSuccess: (nextSettings) => {
setSettings(nextSettings)
+ void i18n.changeLanguage(getDocumentLocale(nextSettings.language))
setIsResetSettingsDialogOpen(false)
},
})
diff --git a/ui/src/features/trash/pages/TrashPage.tsx b/ui/src/features/trash/pages/TrashPage.tsx
index d2279e2..5fb738f 100644
--- a/ui/src/features/trash/pages/TrashPage.tsx
+++ b/ui/src/features/trash/pages/TrashPage.tsx
@@ -100,10 +100,7 @@ export const TrashPage = () => {
lastEmptiedAt: new Date().toISOString(),
}
const itemCount = trashState.items.length
- const summaryLabel =
- itemCount === 1
- ? t(($) => $.trash.labels.itemCount, { count: itemCount })
- : t(($) => $.trash.labels.itemCountPlural, { count: itemCount })
+ const summaryLabel = t(($) => $.trash.labels.itemCount, { count: itemCount })
const summaryAge = t(($) => $.trash.labels.lastEmptied, {
value: formatRelativeAge(trashState.lastEmptiedAt),
})
diff --git a/ui/src/shared/lib/translated-date-format.ts b/ui/src/shared/lib/translated-date-format.ts
index e31be14..b1a1661 100644
--- a/ui/src/shared/lib/translated-date-format.ts
+++ b/ui/src/shared/lib/translated-date-format.ts
@@ -43,8 +43,8 @@ const formatRelativeDayCount = (
}
return tense === 'past'
- ? t(($) => $.dates.relative.daysAgo, { count })
- : t(($) => $.dates.relative.inDays, { count })
+ ? t(($) => $.dates.relative.dayAgo, { count })
+ : t(($) => $.dates.relative.inDay, { count })
}
const formatRelativeWeekCount = (
@@ -53,8 +53,8 @@ const formatRelativeWeekCount = (
tense: 'past' | 'future',
) => {
return tense === 'past'
- ? t(($) => $.dates.relative.weeksAgo, { count })
- : t(($) => $.dates.relative.inWeeks, { count })
+ ? t(($) => $.dates.relative.weekAgo, { count })
+ : t(($) => $.dates.relative.inWeek, { count })
}
const formatRelativeMonthCount = (
@@ -62,15 +62,9 @@ const formatRelativeMonthCount = (
count: number,
tense: 'past' | 'future',
) => {
- if (count === 1) {
- return tense === 'past'
- ? t(($) => $.dates.relative.monthAgo, { count })
- : t(($) => $.dates.relative.inMonth, { count })
- }
-
return tense === 'past'
- ? t(($) => $.dates.relative.monthsAgo, { count })
- : t(($) => $.dates.relative.inMonths, { count })
+ ? t(($) => $.dates.relative.monthAgo, { count })
+ : t(($) => $.dates.relative.inMonth, { count })
}
const formatRelativeAgeValue = (t: TFunction, isoDate: string) => {
@@ -88,17 +82,13 @@ const formatRelativeAgeValue = (t: TFunction, isoDate: string) => {
}
if (diffMinutes < 60) {
- return diffMinutes === 1
- ? t(($) => $.dates.age.minuteAgo, { count: diffMinutes })
- : t(($) => $.dates.age.minutesAgo, { count: diffMinutes })
+ return t(($) => $.dates.age.minuteAgo, { count: diffMinutes })
}
const diffHours = Math.max(1, Math.round(diffMinutes / 60))
if (diffHours < 24) {
- return diffHours === 1
- ? t(($) => $.dates.age.hourAgo, { count: diffHours })
- : t(($) => $.dates.age.hoursAgo, { count: diffHours })
+ return t(($) => $.dates.age.hourAgo, { count: diffHours })
}
const diffDays = Math.max(1, Math.round(diffMs / dayMs))
@@ -106,14 +96,10 @@ const formatRelativeAgeValue = (t: TFunction, isoDate: string) => {
if (diffDays >= 7 && diffDays % 7 === 0) {
const weeks = diffDays / 7
- return weeks === 1
- ? t(($) => $.dates.age.weekAgo, { count: weeks })
- : t(($) => $.dates.age.weeksAgo, { count: weeks })
+ return t(($) => $.dates.age.weekAgo, { count: weeks })
}
- return diffDays === 1
- ? t(($) => $.dates.age.dayAgo, { count: diffDays })
- : t(($) => $.dates.age.daysAgo, { count: diffDays })
+ return t(($) => $.dates.age.dayAgo, { count: diffDays })
}
const formatUpdatedAgeValue = (t: TFunction, value: string) => {
@@ -146,9 +132,7 @@ const formatUpdatedAgeValue = (t: TFunction, value: string) => {
if (diffMs < weekMs) {
const days = Math.max(1, Math.round(diffMs / dayMs))
- return days === 1
- ? t(($) => $.dates.relative.dayAgo, { count: days })
- : t(($) => $.dates.relative.daysAgo, { count: days })
+ return t(($) => $.dates.relative.dayAgo, { count: days })
}
return formatAbsoluteDate(value)
diff --git a/ui/src/test/setup.ts b/ui/src/test/setup.ts
index c2f9bab..0f149e7 100644
--- a/ui/src/test/setup.ts
+++ b/ui/src/test/setup.ts
@@ -2,6 +2,7 @@ import '@testing-library/jest-dom/vitest'
import { cleanup } from '@testing-library/react'
import { afterEach, beforeEach, vi } from 'vitest'
+import { setI18n } from 'react-i18next'
import { queryClient } from '@core/query/query-client'
import { resetThemeStoreForTests } from '@core/theme'
@@ -69,6 +70,7 @@ beforeEach(async () => {
window.sessionStorage.clear()
resetThemeStoreForTests()
await appI18n.changeLanguage(defaultLocale)
+ setI18n(appI18n)
await mockStateRepository.reset()
queryClient.clear()
})