mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-07-15 05:41:34 +00:00
feat(i18n): added missing translation strings to item detail page and added german translation strings
This commit is contained in:
parent
fbe12b393f
commit
1169ee01d2
5 changed files with 37 additions and 14 deletions
|
|
@ -13,9 +13,9 @@
|
|||
<div class="flex-grow" />
|
||||
<p class="text-sm md:text-base">{{ book.publishedYear }}</p>
|
||||
</div>
|
||||
<p v-if="book.author" class="text-gray-300 text-xs md:text-sm">by {{ book.author }}</p>
|
||||
<p v-if="book.narrator" class="text-gray-400 text-xs">Narrated by {{ book.narrator }}</p>
|
||||
<p v-if="book.duration" class="text-gray-400 text-xs">Runtime: {{ $elapsedPrettyExtended(bookDuration, false) }} {{ bookDurationComparison }}</p>
|
||||
<p v-if="book.author" class="text-gray-300 text-xs md:text-sm">{{ $getString('LabelAuthorDescriptor', [book.author]) }}</p>
|
||||
<p v-if="book.narrator" class="text-gray-400 text-xs">{{ $getString('LabelNarratorDescriptor', [book.narrator]) }}</p>
|
||||
<p v-if="book.duration" class="text-gray-400 text-xs">{{ $getString('LabelRuntimeMatch', [$elapsedPrettyExtended(bookDuration, false), bookDurationComparison]) }}</p>
|
||||
<div v-if="book.series?.length" class="flex py-1 -mx-1">
|
||||
<div v-for="(series, index) in book.series" :key="index" class="bg-white bg-opacity-10 rounded-full px-1 py-0.5 mx-1">
|
||||
<p class="leading-3 text-xs text-gray-400">
|
||||
|
|
@ -31,9 +31,9 @@
|
|||
<h1>
|
||||
<div class="flex items-center">{{ book.title }}<widgets-explicit-indicator :explicit="book.explicit" /></div>
|
||||
</h1>
|
||||
<p class="text-base text-gray-300 whitespace-nowrap truncate">by {{ book.author }}</p>
|
||||
<p class="text-base text-gray-300 whitespace-nowrap truncate">{{ $getString('LabelAuthorDescriptor', [book.author]) }}</p>
|
||||
<p v-if="book.genres" class="text-xs text-gray-400 leading-5">{{ book.genres.join(', ') }}</p>
|
||||
<p class="text-xs text-gray-400 leading-5">{{ book.trackCount }} Episodes</p>
|
||||
<p class="text-xs text-gray-400 leading-5">{{ $getString('LabelEpisodesCounter', [book.trackCount]) }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="bookCovers.length > 1" class="flex">
|
||||
|
|
@ -75,11 +75,11 @@ export default {
|
|||
let differenceInMinutes = currentBookDurationMinutes - this.book.duration
|
||||
if (differenceInMinutes < 0) {
|
||||
differenceInMinutes = Math.abs(differenceInMinutes)
|
||||
return `(${this.$elapsedPrettyExtended(differenceInMinutes * 60, false, false)} shorter)`
|
||||
return this.$getString('LabelRuntimeMatchLonger', [this.$elapsedPrettyExtended(differenceInMinutes * 60, false, false)])
|
||||
} else if (differenceInMinutes > 0) {
|
||||
return `(${this.$elapsedPrettyExtended(differenceInMinutes * 60, false, false)} longer)`
|
||||
return this.$getString('LabelRuntimeMatchShorter', [this.$elapsedPrettyExtended(differenceInMinutes * 60, false, false)])
|
||||
}
|
||||
return '(exact match)'
|
||||
return this.$strings.LabelRuntimeMatchExact
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
|
|
|||
|
|
@ -42,13 +42,13 @@
|
|||
|
||||
<div class="flex py-2">
|
||||
<div>
|
||||
<p class="text-center text-gray-200">New</p>
|
||||
<p class="text-center text-gray-200">{{ $string.LabelNew }}</p>
|
||||
<a :href="selectedMatch.cover" target="_blank" class="bg-primary">
|
||||
<covers-preview-cover :src="selectedMatch.cover" :width="100" :book-cover-aspect-ratio="bookCoverAspectRatio" />
|
||||
</a>
|
||||
</div>
|
||||
<div v-if="media.coverPath">
|
||||
<p class="text-center text-gray-200">Current</p>
|
||||
<p class="text-center text-gray-200">{{ $string.LabelCurrent }}</p>
|
||||
<a :href="$store.getters['globals/getLibraryItemCoverSrcById'](libraryItemId, null, true)" target="_blank" class="bg-primary">
|
||||
<covers-preview-cover :src="$store.getters['globals/getLibraryItemCoverSrcById'](libraryItemId, null, true)" :width="100" :book-cover-aspect-ratio="bookCoverAspectRatio" />
|
||||
</a>
|
||||
|
|
@ -180,14 +180,14 @@
|
|||
<ui-checkbox v-model="selectedMatchUsage.explicit" checkbox-bg="bg" @input="checkboxToggled" />
|
||||
<div class="flex-grow ml-4" :class="{ 'pt-4': mediaMetadata.explicit != null }">
|
||||
<ui-checkbox v-model="selectedMatch.explicit" :label="$strings.LabelExplicit" :disabled="!selectedMatchUsage.explicit" :checkbox-bg="!selectedMatchUsage.explicit ? 'bg' : 'primary'" border-color="gray-600" label-class="pl-2 text-base font-semibold" />
|
||||
<p v-if="mediaMetadata.explicit != null" class="text-xs ml-1 text-white text-opacity-60">{{ $strings.LabelCurrently }} {{ mediaMetadata.explicit ? 'Explicit (checked)' : 'Not Explicit (unchecked)' }}</p>
|
||||
<p v-if="mediaMetadata.explicit != null" class="text-xs ml-1 text-white text-opacity-60">{{ $strings.LabelCurrently }} {{ mediaMetadata.explicit ? $strings.LabelExplicitChecked : $strings.LabelExplicitUnchecked }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="selectedMatchOrig.abridged != null" class="flex items-center pb-2" :class="{ 'pt-2': mediaMetadata.abridged == null }">
|
||||
<ui-checkbox v-model="selectedMatchUsage.abridged" checkbox-bg="bg" @input="checkboxToggled" />
|
||||
<div class="flex-grow ml-4" :class="{ 'pt-4': mediaMetadata.abridged != null }">
|
||||
<ui-checkbox v-model="selectedMatch.abridged" :label="$strings.LabelAbridged" :disabled="!selectedMatchUsage.abridged" :checkbox-bg="!selectedMatchUsage.abridged ? 'bg' : 'primary'" border-color="gray-600" label-class="pl-2 text-base font-semibold" />
|
||||
<p v-if="mediaMetadata.abridged != null" class="text-xs ml-1 text-white text-opacity-60">{{ $strings.LabelCurrently }} {{ mediaMetadata.abridged ? 'Abridged (checked)' : 'Unabridged (unchecked)' }}</p>
|
||||
<p v-if="mediaMetadata.abridged != null" class="text-xs ml-1 text-white text-opacity-60">{{ $strings.LabelCurrently }} {{ mediaMetadata.abridged ? $strings.LabelAbridgedChecked : $strings.LabelAbridgedUnchecked }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
<div class="w-12 hidden lg:block" />
|
||||
<p class="text-lg mb-4 font-semibold">{{ $strings.HeaderChapters }}</p>
|
||||
<div class="flex-grow" />
|
||||
<ui-checkbox v-model="showSecondInputs" checkbox-bg="primary" small label-class="text-sm text-gray-200 pl-1" label="Show seconds" class="mx-2" />
|
||||
<ui-checkbox v-model="showSecondInputs" checkbox-bg="primary" small label-class="text-sm text-gray-200 pl-1" :label="$strings.LabelShowSeconds" class="mx-2" />
|
||||
<div class="w-32 hidden lg:block" />
|
||||
</div>
|
||||
<div class="flex items-center mb-3 py-1 -mx-1">
|
||||
|
|
|
|||
|
|
@ -182,6 +182,8 @@
|
|||
"HeaderUsers": "Benutzer",
|
||||
"HeaderYourStats": "Eigene Statistiken",
|
||||
"LabelAbridged": "Gekürzt",
|
||||
"LabelAbridgedChecked": "Gekürzt (Ausgewählt)",
|
||||
"LabelAbridgedUnchecked": "Ungekürzt (Nicht Ausgewählt)",
|
||||
"LabelAccountType": "Kontoart",
|
||||
"LabelAccountTypeAdmin": "Admin",
|
||||
"LabelAccountTypeGuest": "Gast",
|
||||
|
|
@ -201,6 +203,7 @@
|
|||
"LabelAlreadyInYourLibrary": "Bereits in der Bibliothek",
|
||||
"LabelAppend": "Anhängen",
|
||||
"LabelAuthor": "Autor",
|
||||
"LabelAuthorDescriptor": "von {0}",
|
||||
"LabelAuthorFirstLast": "Autor (Vorname Nachname)",
|
||||
"LabelAuthorLastFirst": "Autor (Nachname, Vorname)",
|
||||
"LabelAuthors": "Autoren",
|
||||
|
|
@ -272,10 +275,13 @@
|
|||
"LabelEnable": "Aktivieren",
|
||||
"LabelEnd": "Ende",
|
||||
"LabelEpisode": "Episode",
|
||||
"LabelEpisodesCounter": "{0} Episoden",
|
||||
"LabelEpisodeTitle": "Episodentitel",
|
||||
"LabelEpisodeType": "Episodentyp",
|
||||
"LabelExample": "Beispiel",
|
||||
"LabelExplicit": "Explizit (Altersbeschränkung)",
|
||||
"LabelExplicitChecked": "Explizit (Ausgewählt)",
|
||||
"LabelExplicitUnchecked": "Nicht Explizit (Nicht Ausgewählt)",
|
||||
"LabelFeedURL": "Feed URL",
|
||||
"LabelFetchingMetadata": "Abholen der Metadaten",
|
||||
"LabelFile": "Datei",
|
||||
|
|
@ -358,6 +364,7 @@
|
|||
"LabelMoreInfo": "Mehr Infos",
|
||||
"LabelName": "Name",
|
||||
"LabelNarrator": "Erzähler",
|
||||
"LabelNarratorDescriptor": "Erzählt von {0}",
|
||||
"LabelNarrators": "Erzähler",
|
||||
"LabelNew": "Neu",
|
||||
"LabelNewestAuthors": "Neueste Autoren",
|
||||
|
|
@ -424,6 +431,10 @@
|
|||
"LabelRSSFeedPreventIndexing": "Indizierung verhindern",
|
||||
"LabelRSSFeedSlug": "RSS Feed Schlagwort",
|
||||
"LabelRSSFeedURL": "RSS Feed URL",
|
||||
"LabelRuntimeMatch": "Laufzeit: {0} ({1})",
|
||||
"LabelRuntimeMatchExact": "genaue Übereinstimmung",
|
||||
"LabelRuntimeMatchShorter": "{0} kürzer",
|
||||
"LabelRuntimeMatchLonger": "{0} länger",
|
||||
"LabelSearchTerm": "Begriff suchen",
|
||||
"LabelSearchTitle": "Titel suchen",
|
||||
"LabelSearchTitleOrASIN": "Titel oder ASIN suchen",
|
||||
|
|
|
|||
|
|
@ -182,6 +182,8 @@
|
|||
"HeaderUsers": "Users",
|
||||
"HeaderYourStats": "Your Stats",
|
||||
"LabelAbridged": "Abridged",
|
||||
"LabelAbridgedChecked": "Abridged (checked)",
|
||||
"LabelAbridgedUnchecked": "Unabridged (unchecked)",
|
||||
"LabelAccountType": "Account Type",
|
||||
"LabelAccountTypeAdmin": "Admin",
|
||||
"LabelAccountTypeGuest": "Guest",
|
||||
|
|
@ -201,6 +203,7 @@
|
|||
"LabelAlreadyInYourLibrary": "Already in your library",
|
||||
"LabelAppend": "Append",
|
||||
"LabelAuthor": "Author",
|
||||
"LabelAuthorDescriptor": "by {0}",
|
||||
"LabelAuthorFirstLast": "Author (First Last)",
|
||||
"LabelAuthorLastFirst": "Author (Last, First)",
|
||||
"LabelAuthors": "Authors",
|
||||
|
|
@ -272,10 +275,13 @@
|
|||
"LabelEnable": "Enable",
|
||||
"LabelEnd": "End",
|
||||
"LabelEpisode": "Episode",
|
||||
"LabelEpisodesCounter": "{0} Episodes",
|
||||
"LabelEpisodeTitle": "Episode Title",
|
||||
"LabelEpisodeType": "Episode Type",
|
||||
"LabelExample": "Example",
|
||||
"LabelExplicit": "Explicit",
|
||||
"LabelExplicitChecked": "Explicit (checked)",
|
||||
"LabelExplicitUnchecked": "Not Explicit (unchecked)",
|
||||
"LabelFeedURL": "Feed URL",
|
||||
"LabelFetchingMetadata": "Fetching Metadata",
|
||||
"LabelFile": "File",
|
||||
|
|
@ -358,6 +364,7 @@
|
|||
"LabelMoreInfo": "More Info",
|
||||
"LabelName": "Name",
|
||||
"LabelNarrator": "Narrator",
|
||||
"LabelNarratorDescriptor": "Narrated by {0}",
|
||||
"LabelNarrators": "Narrators",
|
||||
"LabelNew": "New",
|
||||
"LabelNewestAuthors": "Newest Authors",
|
||||
|
|
@ -424,6 +431,10 @@
|
|||
"LabelRSSFeedPreventIndexing": "Prevent Indexing",
|
||||
"LabelRSSFeedSlug": "RSS Feed Slug",
|
||||
"LabelRSSFeedURL": "RSS Feed URL",
|
||||
"LabelRuntimeMatch": "Runtime: {0} ({1})",
|
||||
"LabelRuntimeMatchExact": "exact match",
|
||||
"LabelRuntimeMatchLonger": "{0} longer",
|
||||
"LabelRuntimeMatchShorter": "{0} shorter",
|
||||
"LabelSearchTerm": "Search Term",
|
||||
"LabelSearchTitle": "Search Title",
|
||||
"LabelSearchTitleOrASIN": "Search Title or ASIN",
|
||||
|
|
@ -473,6 +484,7 @@
|
|||
"LabelSettingsStoreMetadataWithItemHelp": "By default metadata files are stored in /metadata/items, enabling this setting will store metadata files in your library item folders",
|
||||
"LabelSettingsTimeFormat": "Time Format",
|
||||
"LabelShowAll": "Show All",
|
||||
"LabelShowSeconds": "Show seconds",
|
||||
"LabelSize": "Size",
|
||||
"LabelSleepTimer": "Sleep timer",
|
||||
"LabelSlug": "Slug",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue