diff --git a/client/index.html b/client/index.html index 3467bc698..aeb6517ce 100644 --- a/client/index.html +++ b/client/index.html @@ -10,6 +10,7 @@ +
{{ t('components.appHeader.appearance') }}
{{ selectedLabel }}
{{ label }}
+
{{ t('adminFeature.userForm.excludeGenresHint') }}
{{ t('book.detail.readingLog.attempts.rereadPrompt') }}
{{ result.excerpt.pre }}{{ result.excerpt.match }}{{ result.excerpt.match }}{{ result.excerpt.post }}
diff --git a/client/src/features/reader/epub/components/ReaderSidebar.vue b/client/src/features/reader/epub/components/ReaderSidebar.vue index 48a93fbe8..c0e2cac4e 100644 --- a/client/src/features/reader/epub/components/ReaderSidebar.vue +++ b/client/src/features/reader/epub/components/ReaderSidebar.vue @@ -344,7 +344,7 @@ function togglePinned() { @@ -395,7 +395,7 @@ function togglePinned() {
{{ identity.providerName }}
{{ identity.oidcSubject }}
+ {{ t('settings.appearance.theme.style.label') }} +
+ {{ t(themeStore.styleDefinition.descriptionKey) }} +
+ {{ t('settings.appearance.theme.surfacePalette.label') }} +
+ {{ t('settings.appearance.theme.surfacePalette.hint') }} +
+ {{ t('settings.appearance.theme.topGlow.label') }} +
+ {{ t('settings.appearance.theme.topGlow.hint') }} +
@@ -150,12 +204,12 @@ function handleBrightnessInput(event: Event) { " @click="themeStore.setRadius(opt.id)" > - {{ opt.label }} + {{ t(opt.labelKey) }}
@@ -188,7 +242,7 @@ function handleBrightnessInput(event: Event) {
{{ t('settings.appearance.theme.libraryBackground.title') }}
diff --git a/client/src/features/settings/MagicLinksSettings.vue b/client/src/features/settings/MagicLinksSettings.vue index 0cc59483d..a588d8b2c 100644 --- a/client/src/features/settings/MagicLinksSettings.vue +++ b/client/src/features/settings/MagicLinksSettings.vue @@ -323,7 +323,7 @@ function isExpired(expiresAt: string | null | undefined): boolean { {{ t('settings.admin.migration.sourceValidatedWithWarnings') }} {{ warn }}
{{ t('settings.admin.migration.sourceValidatedWithWarnings') }}
{{ warn }}
{{ t('settings.admin.migration.lastValidationSnapshot') }}
{{ @@ -1385,7 +1385,7 @@ function formatSourceCountLabel(key: string) {
{{ t('settings.admin.migration.pathValidation') }}
{{ @@ -1488,7 +1488,7 @@ function formatSourceCountLabel(key: string) { {{ t('settings.admin.migration.runDryRun') }} -
{{ t('settings.admin.migration.matched') }} {{ plan.summary?.matchedBooks ?? 0 }} · {{ t('settings.admin.migration.unresolved') }} @@ -1515,14 +1515,14 @@ function formatSourceCountLabel(key: string) {
{{ targetBookLabel(dup.targetBookId) }}
{{ t('settings.admin.migration.targetBookNum', { id: dup.targetBookId }) }}
{{ t('settings.admin.migration.preflightChecks') }}
{{ t('settings.admin.migration.allChecksPassed') }}
{{ t('settings.admin.migration.migrationFailed') }}
{{ run.errorMessage }}
{{ t('settings.admin.migration.booksCard') }}
{{ t('settings.admin.migration.userDataCard') }}
{{ book.sourceTitle || t('settings.admin.migration.sourceBookFallback', { id: book.sourceBookId }) }} @@ -1847,7 +1847,7 @@ function formatSourceCountLabel(key: string) {
{{ book.title || t('settings.admin.migration.sourceBookFallback', { id: book.sourceBookId }) }} @@ -1869,7 +1869,7 @@ function formatSourceCountLabel(key: string) {
{{ preview.username }}
{{ describeUserPreviewCounts(preview.counts) }}
{{ t('settings.oidc.form.mappedClaims') }}
{{ + {{ JSON.stringify(previewClaims.mapped, null, 2) }} {{ t('settings.oidc.form.rawClaims') }} - {{ + {{ JSON.stringify(previewClaims.raw, null, 2) }}
{{ JSON.stringify(previewClaims.mapped, null, 2) }}
{{ t('settings.oidc.form.rawClaims') }}
{{ + {{ JSON.stringify(previewClaims.raw, null, 2) }}
{{ JSON.stringify(previewClaims.raw, null, 2) }}
diff --git a/client/src/features/settings/components/AuthorMetadataPreferences.vue b/client/src/features/settings/components/AuthorMetadataPreferences.vue index 51b32cafe..b41aad28e 100644 --- a/client/src/features/settings/components/AuthorMetadataPreferences.vue +++ b/client/src/features/settings/components/AuthorMetadataPreferences.vue @@ -188,7 +188,7 @@ defineExpose({ save }) type="button" :disabled="saving || !preferences.fields[field].enabled" :aria-label="t('settings.admin.authorEnrichment.metadataPreferences.addProvider', { provider: provider.label })" - class="flex items-center gap-1 h-6 px-2 rounded border border-dashed border-border text-xs font-medium text-muted-foreground transition-colors hover:text-foreground hover:border-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary disabled:opacity-50" + class="flex items-center gap-1 h-6 px-2 rounded-xs border border-dashed border-border text-xs font-medium text-muted-foreground transition-colors hover:text-foreground hover:border-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary disabled:opacity-50" @click="addProvider(field, provider.key)" > diff --git a/client/src/features/settings/file-naming/components/NamingRuleEditor.vue b/client/src/features/settings/file-naming/components/NamingRuleEditor.vue index 8016e4d04..998d19f8d 100644 --- a/client/src/features/settings/file-naming/components/NamingRuleEditor.vue +++ b/client/src/features/settings/file-naming/components/NamingRuleEditor.vue @@ -305,8 +305,8 @@ async function handleCopyPattern() { class="mt-1.5 text-[11px] leading-relaxed text-muted-foreground" scope="global" > - Enter - { + Enter + {
{{ field.label }}
_storygraph_session
remember_user_token
This book couldn't be matched to StoryGraph automatically. Use "Try auto-match" to search again, or paste the book's StoryGraph URL, or - its StoryGraph book ID (the code after /books/ in the URL, not an ISBN), below for an exact + its StoryGraph book ID (the code after /books/ in the URL, not an ISBN), below for an exact link.
/books/
- ↑ - ↓ + ↑ + ↓ {{ t('tools.bulkRename.review.keyboardHint') }} · - S + S {{ t('tools.bulkRename.review.keyboardSkip') }}
{{ formatList(entry.authors) }}