diff --git a/client/components/app/BookShelfToolbar.vue b/client/components/app/BookShelfToolbar.vue index fc191626..b2bd0330 100644 --- a/client/components/app/BookShelfToolbar.vue +++ b/client/components/app/BookShelfToolbar.vue @@ -114,28 +114,30 @@ export default { totalEntities: 0, processingSeries: false, processingIssues: false, - processingAuthors: false, - seriesSortItems: [ - { - text: 'Name', - value: 'name' - }, - { - text: 'Number of Books', - value: 'numBooks' - }, - { - text: 'Date Added', - value: 'addedAt' - }, - { - text: 'Total Duration', - value: 'totalDuration' - } - ] + processingAuthors: false } }, computed: { + seriesSortItems() { + return [ + { + text: this.$strings.LabelName, + value: 'name' + }, + { + text: this.$strings.LabelNumberOfBooks, + value: 'numBooks' + }, + { + text: this.$strings.LabelAddedAt, + value: 'addedAt' + }, + { + text: this.$strings.LabelTotalDuration, + value: 'totalDuration' + } + ] + }, userIsAdminOrUp() { return this.$store.getters['user/getIsAdminOrUp'] }, diff --git a/client/components/widgets/CronExpressionBuilder.vue b/client/components/widgets/CronExpressionBuilder.vue index 2cefce24..f9c11c67 100644 --- a/client/components/widgets/CronExpressionBuilder.vue +++ b/client/components/widgets/CronExpressionBuilder.vue @@ -101,35 +101,35 @@ export default { intervalOptions() { return [ { - text: 'Custom daily/weekly', + text: this.$strings.LabelIntervalCustomDailyWeekly, value: 'custom' }, { - text: 'Every day', + text: this.$strings.LabelIntervalEveryDay, value: 'daily' }, { - text: 'Every 12 hours', + text: this.$strings.LabelIntervalEvery12Hours, value: '0 */12 * * *' }, { - text: 'Every 6 hours', + text: this.$strings.LabelIntervalEvery6Hours, value: '0 */6 * * *' }, { - text: 'Every 2 hours', + text: this.$strings.LabelIntervalEvery2Hours, value: '0 */2 * * *' }, { - text: 'Every hour', + text: this.$strings.LabelIntervalEveryHour, value: '0 * * * *' }, { - text: 'Every 30 minutes', + text: this.$strings.LabelIntervalEvery30Minutes, value: '*/30 * * * *' }, { - text: 'Every 15 minutes', + text: this.$strings.LabelIntervalEvery15Minutes, value: '*/15 * * * *' } ] diff --git a/client/pages/config.vue b/client/pages/config.vue index 236d99c5..b7aa4398 100644 --- a/client/pages/config.vue +++ b/client/pages/config.vue @@ -42,10 +42,20 @@ export default { return this.$store.state.streamLibraryItem }, currentPage() { - if (!this.$route.name) return 'Settings' + if (!this.$route.name) return this.$strings.HeaderSettings var routeName = this.$route.name.split('-') - if (routeName.length > 0) return routeName.slice(1).join('-') - return 'Settings' + if (routeName.length > 0) { + const pageName = routeName.slice(1).join('-') + if (pageName === 'log') return this.$strings.HeaderLogs + else if (pageName === 'backups') return this.$strings.HeaderBackups + else if (pageName === 'libraries') return this.$strings.HeaderLibraries + else if (pageName === 'notifications') return this.$strings.HeaderNotifications + else if (pageName === 'sessions') return this.$strings.HeaderListeningSessions + else if (pageName === 'stats') return this.$strings.HeaderYourStats + else if (pageName === 'library-stats') return this.$strings.HeaderLibraryStats + else if (pageName === 'users') return this.$strings.HeaderUsers + } + return this.$strings.HeaderSettings } }, methods: { diff --git a/client/pages/config/log.vue b/client/pages/config/log.vue index 41b2d26a..12714121 100644 --- a/client/pages/config/log.vue +++ b/client/pages/config/log.vue @@ -38,20 +38,6 @@ export default { searchText: null, newServerSettings: {}, logColors: ['yellow-200', 'gray-400', 'info', 'warning', 'error', 'red-800', 'blue-400'], - logLevels: [ - { - value: 1, - text: 'Debug' - }, - { - value: 2, - text: 'Info' - }, - { - value: 3, - text: 'Warn' - } - ], loadedLogs: [] } }, @@ -66,6 +52,22 @@ export default { } }, computed: { + logLevels() { + return [ + { + value: 1, + text: this.$strings.LabelLogLevelDebug + }, + { + value: 2, + text: this.$strings.LabelLogLevelInfo + }, + { + value: 3, + text: this.$strings.LabelLogLevelWarn + } + ] + }, logLevelItems() { if (process.env.NODE_ENV === 'production') return this.logLevels this.logLevels.unshift({ text: 'Trace', value: 0 }) diff --git a/client/pages/config/sessions.vue b/client/pages/config/sessions.vue index adb34662..4f51d511 100644 --- a/client/pages/config/sessions.vue +++ b/client/pages/config/sessions.vue @@ -102,7 +102,7 @@ export default { return this.$store.getters['users/getIsUserOnline'](this.user.id) }, userItems() { - var userItems = [{ value: '', text: 'All Users' }] + var userItems = [{ value: '', text: this.$strings.LabelAllUsers }] return userItems.concat(this.users.map((u) => ({ value: u.id, text: u.username }))) }, filteredUserUsername() { diff --git a/client/strings/de.json b/client/strings/de.json index d2ab5f0a..549154e6 100644 --- a/client/strings/de.json +++ b/client/strings/de.json @@ -215,6 +215,14 @@ "LabelIncomplete": "Unvollständig", "LabelInProgress": "In Bearbeitung", "LabelInterval": "Intervall", + "LabelIntervalCustomDailyWeekly": "Custom daily/weekly", + "LabelIntervalEvery12Hours": "Every 12 hours", + "LabelIntervalEvery15Minutes": "Every 15 minutes", + "LabelIntervalEvery2Hours": "Every 2 hours", + "LabelIntervalEvery30Minutes": "Every 30 minutes", + "LabelIntervalEvery6Hours": "Every 6 hours", + "LabelIntervalEveryDay": "Every day", + "LabelIntervalEveryHour": "Every hour", "LabelInvalidParts": "Ungültige Teile", "LabelItem": "Element/Eintrag", "LabelLanguage": "Sprache", @@ -229,6 +237,9 @@ "LabelLibraryName": "Bibliotheksname", "LabelLimit": "Begrenzung", "LabelListenAgain": "Erneut anhören", + "LabelLogLevelDebug": "Debug", + "LabelLogLevelInfo": "Info", + "LabelLogLevelWarn": "Warn", "LabelLookForNewEpisodesAfterDate": "Suchen nach neuen Episoden nach diesem Datum", "LabelMarkSeries": "Serien markieren", "LabelMediaPlayer": "Mediaplayer", @@ -258,6 +269,7 @@ "LabelNotificationsMaxQueueSizeHelp": "Es wird nur 1 Ereignis pro Sekunde ausgelöst. Ereignisse werden ignoriert, wenn die Warteschlange die maximale Größe erreicht hat. Dies verhindert Benachrichtigungsspamming.", "LabelNotificationTitleTemplate": "Titelvorlage", "LabelNotStarted": "Not Started", + "LabelNumberOfBooks": "Number of Books", "LabelNumberOfEpisodes": "# of Episodes", "LabelOpenRSSFeed": "Öffne RSS Feed", "LabelPassword": "Passwort", @@ -367,6 +379,7 @@ "LabelToolsMakeM4bDescription": "Generate a .M4B audiobook file with embedded metadata, cover image, and chapters.", "LabelToolsSplitM4b": "Split M4B to MP3's", "LabelToolsSplitM4bDescription": "Create MP3's from an M4B split by chapters with embedded metadata, cover image, and chapters.", + "LabelTotalDuration": "Total Duration", "LabelTotalTimeListened": "Gehörte Gesamtzeit", "LabelTrackFromFilename": "Titel von Dateiname", "LabelTrackFromMetadata": "Titel aus Metadaten", diff --git a/client/strings/en-us.json b/client/strings/en-us.json index 44e54d86..2d450958 100644 --- a/client/strings/en-us.json +++ b/client/strings/en-us.json @@ -215,6 +215,14 @@ "LabelIncomplete": "Incomplete", "LabelInProgress": "In Progress", "LabelInterval": "Interval", + "LabelIntervalCustomDailyWeekly": "Custom daily/weekly", + "LabelIntervalEvery12Hours": "Every 12 hours", + "LabelIntervalEvery15Minutes": "Every 15 minutes", + "LabelIntervalEvery2Hours": "Every 2 hours", + "LabelIntervalEvery30Minutes": "Every 30 minutes", + "LabelIntervalEvery6Hours": "Every 6 hours", + "LabelIntervalEveryDay": "Every day", + "LabelIntervalEveryHour": "Every hour", "LabelInvalidParts": "Invalid Parts", "LabelItem": "Item", "LabelLanguage": "Language", @@ -229,6 +237,9 @@ "LabelLibraryName": "Library Name", "LabelLimit": "Limit", "LabelListenAgain": "Listen Again", + "LabelLogLevelDebug": "Debug", + "LabelLogLevelInfo": "Info", + "LabelLogLevelWarn": "Warn", "LabelLookForNewEpisodesAfterDate": "Look for new episodes after this date", "LabelMarkSeries": "Mark Series", "LabelMediaPlayer": "Media Player", @@ -258,6 +269,7 @@ "LabelNotificationsMaxQueueSizeHelp": "Events are limited to firing 1 per second. Events will be ignored if the queue is at max size. This prevents notification spamming.", "LabelNotificationTitleTemplate": "Title Template", "LabelNotStarted": "Not Started", + "LabelNumberOfBooks": "Number of Books", "LabelNumberOfEpisodes": "# of Episodes", "LabelOpenRSSFeed": "Open RSS Feed", "LabelPassword": "Password", @@ -367,6 +379,7 @@ "LabelToolsMakeM4bDescription": "Generate a .M4B audiobook file with embedded metadata, cover image, and chapters.", "LabelToolsSplitM4b": "Split M4B to MP3's", "LabelToolsSplitM4bDescription": "Create MP3's from an M4B split by chapters with embedded metadata, cover image, and chapters.", + "LabelTotalDuration": "Total Duration", "LabelTotalTimeListened": "Total Time Listened", "LabelTrackFromFilename": "Track from Filename", "LabelTrackFromMetadata": "Track from Metadata", diff --git a/client/strings/es.json b/client/strings/es.json index 44e54d86..2d450958 100644 --- a/client/strings/es.json +++ b/client/strings/es.json @@ -215,6 +215,14 @@ "LabelIncomplete": "Incomplete", "LabelInProgress": "In Progress", "LabelInterval": "Interval", + "LabelIntervalCustomDailyWeekly": "Custom daily/weekly", + "LabelIntervalEvery12Hours": "Every 12 hours", + "LabelIntervalEvery15Minutes": "Every 15 minutes", + "LabelIntervalEvery2Hours": "Every 2 hours", + "LabelIntervalEvery30Minutes": "Every 30 minutes", + "LabelIntervalEvery6Hours": "Every 6 hours", + "LabelIntervalEveryDay": "Every day", + "LabelIntervalEveryHour": "Every hour", "LabelInvalidParts": "Invalid Parts", "LabelItem": "Item", "LabelLanguage": "Language", @@ -229,6 +237,9 @@ "LabelLibraryName": "Library Name", "LabelLimit": "Limit", "LabelListenAgain": "Listen Again", + "LabelLogLevelDebug": "Debug", + "LabelLogLevelInfo": "Info", + "LabelLogLevelWarn": "Warn", "LabelLookForNewEpisodesAfterDate": "Look for new episodes after this date", "LabelMarkSeries": "Mark Series", "LabelMediaPlayer": "Media Player", @@ -258,6 +269,7 @@ "LabelNotificationsMaxQueueSizeHelp": "Events are limited to firing 1 per second. Events will be ignored if the queue is at max size. This prevents notification spamming.", "LabelNotificationTitleTemplate": "Title Template", "LabelNotStarted": "Not Started", + "LabelNumberOfBooks": "Number of Books", "LabelNumberOfEpisodes": "# of Episodes", "LabelOpenRSSFeed": "Open RSS Feed", "LabelPassword": "Password", @@ -367,6 +379,7 @@ "LabelToolsMakeM4bDescription": "Generate a .M4B audiobook file with embedded metadata, cover image, and chapters.", "LabelToolsSplitM4b": "Split M4B to MP3's", "LabelToolsSplitM4bDescription": "Create MP3's from an M4B split by chapters with embedded metadata, cover image, and chapters.", + "LabelTotalDuration": "Total Duration", "LabelTotalTimeListened": "Total Time Listened", "LabelTrackFromFilename": "Track from Filename", "LabelTrackFromMetadata": "Track from Metadata", diff --git a/client/strings/fr.json b/client/strings/fr.json index 5e4753cf..07f54390 100644 --- a/client/strings/fr.json +++ b/client/strings/fr.json @@ -215,6 +215,14 @@ "LabelIncomplete": "Incomplet", "LabelInProgress": "En Cours", "LabelInterval": "Interval", + "LabelIntervalCustomDailyWeekly": "Custom daily/weekly", + "LabelIntervalEvery12Hours": "Every 12 hours", + "LabelIntervalEvery15Minutes": "Every 15 minutes", + "LabelIntervalEvery2Hours": "Every 2 hours", + "LabelIntervalEvery30Minutes": "Every 30 minutes", + "LabelIntervalEvery6Hours": "Every 6 hours", + "LabelIntervalEveryDay": "Every day", + "LabelIntervalEveryHour": "Every hour", "LabelInvalidParts": "Parties Invalides", "LabelItem": "Article", "LabelLanguage": "Langue", @@ -229,6 +237,9 @@ "LabelLibraryName": "Nom de Bibliothèque", "LabelLimit": "Limite", "LabelListenAgain": "Ecouter à Nouveau", + "LabelLogLevelDebug": "Debug", + "LabelLogLevelInfo": "Info", + "LabelLogLevelWarn": "Warn", "LabelLookForNewEpisodesAfterDate": "Rechercher de Nouveaux Episode après cette Date", "LabelMarkSeries": "Marquer la Série", "LabelMediaPlayer": "Lecteur Multimédia", @@ -258,6 +269,7 @@ "LabelNotificationsMaxQueueSizeHelp": "La limite de notification est de un évènement par seconde. Le notification seront ignorées si la file d'attente est à son maximum. Cela empêche un flot trop important.", "LabelNotificationTitleTemplate": "Modèle de Titre", "LabelNotStarted": "Not Started", + "LabelNumberOfBooks": "Number of Books", "LabelNumberOfEpisodes": "Nombre d'Episodes", "LabelOpenRSSFeed": "Ouvrir le flux RSS", "LabelPassword": "Mot de Passe", @@ -367,6 +379,7 @@ "LabelToolsMakeM4bDescription": "Génère un fichier Livre Audio .M4B avec intégration des métadonnées, image de couverture et les chapitres.", "LabelToolsSplitM4b": "Scinde le fichier M4B en fichiers MP3", "LabelToolsSplitM4bDescription": "Créer plusieurs fichier MP3 à partir du découpage par chapitre, en incluant les métadonnées, l'image de couverture et les chapitres.", + "LabelTotalDuration": "Total Duration", "LabelTotalTimeListened": "Temps d'Ecoute Total", "LabelTrackFromFilename": "Piste depuis le Fichier", "LabelTrackFromMetadata": "Piste depuis les Métadonnées", diff --git a/client/strings/hr.json b/client/strings/hr.json index ffc83d20..00f83abf 100644 --- a/client/strings/hr.json +++ b/client/strings/hr.json @@ -215,6 +215,14 @@ "LabelIncomplete": "Nepotpuno", "LabelInProgress": "U tijeku", "LabelInterval": "Interval", + "LabelIntervalCustomDailyWeekly": "Custom daily/weekly", + "LabelIntervalEvery12Hours": "Every 12 hours", + "LabelIntervalEvery15Minutes": "Every 15 minutes", + "LabelIntervalEvery2Hours": "Every 2 hours", + "LabelIntervalEvery30Minutes": "Every 30 minutes", + "LabelIntervalEvery6Hours": "Every 6 hours", + "LabelIntervalEveryDay": "Every day", + "LabelIntervalEveryHour": "Every hour", "LabelInvalidParts": "Nevaljajuči dijelovi", "LabelItem": "Stavka", "LabelLanguage": "Jezik", @@ -229,6 +237,9 @@ "LabelLibraryName": "Ime biblioteke", "LabelLimit": "Limit", "LabelListenAgain": "Slušaj ponovno", + "LabelLogLevelDebug": "Debug", + "LabelLogLevelInfo": "Info", + "LabelLogLevelWarn": "Warn", "LabelLookForNewEpisodesAfterDate": "Traži nove epizode nakon ovog datuma", "LabelMarkSeries": "Označi seriju", "LabelMediaPlayer": "Media Player", @@ -258,6 +269,7 @@ "LabelNotificationsMaxQueueSizeHelp": "Samo 1 event po sekundi može biti pokrenut. Eventi će biti ignorirani ako je queue na maksimalnoj veličini. To spriječava spammanje s obavijestima.", "LabelNotificationTitleTemplate": "Title Template", "LabelNotStarted": "Not Started", + "LabelNumberOfBooks": "Number of Books", "LabelNumberOfEpisodes": "# of Episodes", "LabelOpenRSSFeed": "Otvori RSS Feed", "LabelPassword": "Lozinka", @@ -367,6 +379,7 @@ "LabelToolsMakeM4bDescription": "Generate a .M4B audiobook file with embedded metadata, cover image, and chapters.", "LabelToolsSplitM4b": "Split M4B to MP3's", "LabelToolsSplitM4bDescription": "Create MP3's from an M4B split by chapters with embedded metadata, cover image, and chapters.", + "LabelTotalDuration": "Total Duration", "LabelTotalTimeListened": "Sveukupno vrijeme slušanja", "LabelTrackFromFilename": "Track iz imena datoteke", "LabelTrackFromMetadata": "Track iz metapodataka", diff --git a/client/strings/it.json b/client/strings/it.json index 02840ca7..8c726ce7 100644 --- a/client/strings/it.json +++ b/client/strings/it.json @@ -215,6 +215,14 @@ "LabelIncomplete": "Incompleta", "LabelInProgress": "In Corso", "LabelInterval": "Intervallo", + "LabelIntervalCustomDailyWeekly": "Custom daily/weekly", + "LabelIntervalEvery12Hours": "Every 12 hours", + "LabelIntervalEvery15Minutes": "Every 15 minutes", + "LabelIntervalEvery2Hours": "Every 2 hours", + "LabelIntervalEvery30Minutes": "Every 30 minutes", + "LabelIntervalEvery6Hours": "Every 6 hours", + "LabelIntervalEveryDay": "Every day", + "LabelIntervalEveryHour": "Every hour", "LabelInvalidParts": "Parti Invalide", "LabelItem": "Oggetti", "LabelLanguage": "Lingua", @@ -229,6 +237,9 @@ "LabelLibraryName": "Nome Libreria", "LabelLimit": "Limiti", "LabelListenAgain": "Ri-ascolta", + "LabelLogLevelDebug": "Debug", + "LabelLogLevelInfo": "Info", + "LabelLogLevelWarn": "Warn", "LabelLookForNewEpisodesAfterDate": "Cerca nuovi episodi dopo questa data", "LabelMarkSeries": "Segna Serie", "LabelMediaPlayer": "Media Player", @@ -258,6 +269,7 @@ "LabelNotificationsMaxQueueSizeHelp": "Le notifiche sono limitate per 1 al secondo, per evitare lo spamming le notifiche verrano ignorare se superano la coda", "LabelNotificationTitleTemplate": "Template del titolo", "LabelNotStarted": "Non iniziato", + "LabelNumberOfBooks": "Number of Books", "LabelNumberOfEpisodes": "# degli episodi", "LabelOpenRSSFeed": "Apri RSS Feed", "LabelPassword": "Password", @@ -367,6 +379,7 @@ "LabelToolsMakeM4bDescription": "Genera un file audiolibro .M4B con metadati incorporati, immagine di copertina e capitoli.", "LabelToolsSplitM4b": "Converti M4B to MP3's", "LabelToolsSplitM4bDescription": "Crea MP3 da un M4B diviso per capitoli con metadati incorporati, immagine di copertina e capitoli.", + "LabelTotalDuration": "Total Duration", "LabelTotalTimeListened": "Tempo totale di Ascolto", "LabelTrackFromFilename": "Traccia da nome file", "LabelTrackFromMetadata": "Traccia da Metadata", diff --git a/client/strings/pl.json b/client/strings/pl.json index a9896c3d..05b3d17d 100644 --- a/client/strings/pl.json +++ b/client/strings/pl.json @@ -215,6 +215,14 @@ "LabelIncomplete": "Nieukończone", "LabelInProgress": "W trakcie", "LabelInterval": "Interwał", + "LabelIntervalCustomDailyWeekly": "Custom daily/weekly", + "LabelIntervalEvery12Hours": "Every 12 hours", + "LabelIntervalEvery15Minutes": "Every 15 minutes", + "LabelIntervalEvery2Hours": "Every 2 hours", + "LabelIntervalEvery30Minutes": "Every 30 minutes", + "LabelIntervalEvery6Hours": "Every 6 hours", + "LabelIntervalEveryDay": "Every day", + "LabelIntervalEveryHour": "Every hour", "LabelInvalidParts": "Nieprawidłowe części", "LabelItem": "Pozycja", "LabelLanguage": "Język", @@ -229,6 +237,9 @@ "LabelLibraryName": "Nazwa biblioteki", "LabelLimit": "Limit", "LabelListenAgain": "Słuchaj ponownie", + "LabelLogLevelDebug": "Debug", + "LabelLogLevelInfo": "Info", + "LabelLogLevelWarn": "Warn", "LabelLookForNewEpisodesAfterDate": "Szukaj nowych odcinków po dacie", "LabelMarkSeries": "Oznacz serię", "LabelMediaPlayer": "Odtwarzacz", @@ -258,6 +269,7 @@ "LabelNotificationsMaxQueueSizeHelp": "Zdarzenia są ograniczone do 1 na sekundę. Zdarzenia będą ignorowane jeśli kolejka ma maksymalny rozmiar. Zapobiega to spamowaniu powiadomieniami.", "LabelNotificationTitleTemplate": "Szablon tytułu powiadmienia", "LabelNotStarted": "Not Started", + "LabelNumberOfBooks": "Number of Books", "LabelNumberOfEpisodes": "# of Episodes", "LabelOpenRSSFeed": "Otwórz kanał RSS", "LabelPassword": "Hasło", @@ -367,6 +379,7 @@ "LabelToolsMakeM4bDescription": "Generate a .M4B audiobook file with embedded metadata, cover image, and chapters.", "LabelToolsSplitM4b": "Split M4B to MP3's", "LabelToolsSplitM4bDescription": "Create MP3's from an M4B split by chapters with embedded metadata, cover image, and chapters.", + "LabelTotalDuration": "Total Duration", "LabelTotalTimeListened": "Całkowity czas odtwarzania", "LabelTrackFromFilename": "Ścieżka z nazwy pliku", "LabelTrackFromMetadata": "Ścieżka z metadanych", diff --git a/client/strings/zh-cn.json b/client/strings/zh-cn.json index 1c34cf60..6b62dca9 100644 --- a/client/strings/zh-cn.json +++ b/client/strings/zh-cn.json @@ -215,6 +215,14 @@ "LabelIncomplete": "未听完", "LabelInProgress": "正在听", "LabelInterval": "间隔", + "LabelIntervalCustomDailyWeekly": "Custom daily/weekly", + "LabelIntervalEvery12Hours": "Every 12 hours", + "LabelIntervalEvery15Minutes": "Every 15 minutes", + "LabelIntervalEvery2Hours": "Every 2 hours", + "LabelIntervalEvery30Minutes": "Every 30 minutes", + "LabelIntervalEvery6Hours": "Every 6 hours", + "LabelIntervalEveryDay": "Every day", + "LabelIntervalEveryHour": "Every hour", "LabelInvalidParts": "无效部件", "LabelItem": "项目", "LabelLanguage": "语言", @@ -229,6 +237,9 @@ "LabelLibraryName": "图书库名称", "LabelLimit": "限制", "LabelListenAgain": "再次收听", + "LabelLogLevelDebug": "Debug", + "LabelLogLevelInfo": "Info", + "LabelLogLevelWarn": "Warn", "LabelLookForNewEpisodesAfterDate": "在此日期后查找新剧集", "LabelMarkSeries": "标记系列", "LabelMediaPlayer": "媒体播放器", @@ -258,6 +269,7 @@ "LabelNotificationsMaxQueueSizeHelp": "通知事件被限制为每秒触发 1 个. 如果队列处于最大大小, 则将忽略事件. 这可以防止通知垃圾邮件.", "LabelNotificationTitleTemplate": "标题模板", "LabelNotStarted": "未开始", + "LabelNumberOfBooks": "Number of Books", "LabelNumberOfEpisodes": "# 集", "LabelOpenRSSFeed": "打开 RSS 源", "LabelPassword": "密码", @@ -367,6 +379,7 @@ "LabelToolsMakeM4bDescription": "生成带有嵌入元数据, 封面图像和章节的 .M4B 有声读物文件.", "LabelToolsSplitM4b": "将 M4B 文件拆分为 MP3 文件", "LabelToolsSplitM4bDescription": "从 M4B 文件创建 MP3 文件, 按章节分割, 并嵌入元数据, 封面图像和章节.", + "LabelTotalDuration": "Total Duration", "LabelTotalTimeListened": "总收听时间", "LabelTrackFromFilename": "从文件名获取音轨", "LabelTrackFromMetadata": "从源数据获取音轨",