mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-01-31 23:39:39 +00:00
Add rss details configuration
This commit is contained in:
parent
d7b287bfed
commit
0d3e6b1d0a
15 changed files with 211 additions and 19 deletions
|
|
@ -14,6 +14,21 @@
|
|||
|
||||
<span class="material-icons absolute right-2 bottom-2 p-0.5 text-base transition-transform duration-100 text-gray-300 hover:text-white transform hover:scale-125 cursor-pointer" @click="copyToClipboard(currentFeed.feedUrl)">content_copy</span>
|
||||
</div>
|
||||
|
||||
<div v-if="currentFeed.meta" class="mt-5">
|
||||
<div class="flex py-0.5">
|
||||
<div class="w-48"><span class="text-white text-opacity-60 uppercase text-sm">{{ $strings.LabelRssFeedPreventIndexing }}</span></div>
|
||||
<div> {{ currentFeed.meta.preventIndexing ? 'Yes' : 'No' }} </div>
|
||||
</div>
|
||||
<div v-if="currentFeed.meta.ownerName" class="flex py-0.5">
|
||||
<div class="w-48"><span class="text-white text-opacity-60 uppercase text-sm">{{ $strings.LabelRssFeedCustomOwnerName }}</span></div>
|
||||
<div> {{ currentFeed.meta.ownerName }} </div>
|
||||
</div>
|
||||
<div v-if="currentFeed.meta.ownerEmail" class="flex py-0.5">
|
||||
<div class="w-48"><span class="text-white text-opacity-60 uppercase text-sm">{{ $strings.LabelRssFeedCustomOwnerEmail }}</span></div>
|
||||
<div> {{ currentFeed.meta.ownerEmail }} </div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="w-full">
|
||||
<p class="text-lg font-semibold mb-4">{{ $strings.HeaderOpenRSSFeed }}</p>
|
||||
|
|
@ -22,6 +37,7 @@
|
|||
<ui-text-input-with-label v-model="newFeedSlug" :label="$strings.LabelRSSFeedSlug" />
|
||||
<p class="text-xs text-gray-400 py-0.5 px-1">{{ $getString('MessageFeedURLWillBe', [demoFeedUrl]) }}</p>
|
||||
</div>
|
||||
<widgets-rss-feed-metadata-builder v-model="metadataDetails" />
|
||||
|
||||
<p v-if="isHttp" class="w-full pt-2 text-warning text-xs">{{ $strings.NoteRSSFeedPodcastAppsHttps }}</p>
|
||||
<p v-if="hasEpisodesWithoutPubDate" class="w-full pt-2 text-warning text-xs">{{ $strings.NoteRSSFeedPodcastAppsPubDate }}</p>
|
||||
|
|
@ -41,7 +57,12 @@ export default {
|
|||
return {
|
||||
processing: false,
|
||||
newFeedSlug: null,
|
||||
currentFeed: null
|
||||
currentFeed: null,
|
||||
metadataDetails: {
|
||||
preventIndexing: true,
|
||||
ownerName: '',
|
||||
ownerEmail: ''
|
||||
},
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
|
|
@ -107,7 +128,8 @@ export default {
|
|||
|
||||
const payload = {
|
||||
serverAddress: window.origin,
|
||||
slug: this.newFeedSlug
|
||||
slug: this.newFeedSlug,
|
||||
metadataDetails: this.metadataDetails
|
||||
}
|
||||
if (this.$isDev) payload.serverAddress = `http://localhost:3333${this.$config.routerBasePath}`
|
||||
|
||||
|
|
|
|||
92
client/components/widgets/RssFeedMetadataBuilder.vue
Normal file
92
client/components/widgets/RssFeedMetadataBuilder.vue
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
<template>
|
||||
<div class="w-full py-2">
|
||||
<div class="flex -mb-px">
|
||||
<div class="w-1/2 h-6 rounded-tl-md relative border border-black-200 flex items-center justify-center cursor-pointer" :class="!showAdvancedView ? 'text-white bg-bg hover:bg-opacity-60 border-b-bg' : 'text-gray-400 hover:text-gray-300 bg-primary bg-opacity-70 hover:bg-opacity-60'" @click="showAdvancedView = false">
|
||||
<p class="text-sm">{{ $strings.HeaderRSSFeedGeneral }}</p>
|
||||
</div>
|
||||
<div class="w-1/2 h-6 rounded-tr-md relative border border-black-200 flex items-center justify-center -ml-px cursor-pointer" :class="showAdvancedView ? 'text-white bg-bg hover:bg-opacity-60 border-b-bg' : 'text-gray-400 hover:text-gray-300 bg-primary bg-opacity-70 hover:bg-opacity-60'" @click="showAdvancedView = true">
|
||||
<p class="text-sm">{{ $strings.HeaderAdvanced }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="px-2 py-4 md:p-4 border border-black-200 rounded-b-md mr-px" style="min-height: 200px">
|
||||
<template v-if="!showAdvancedView">
|
||||
<div class="flex-grow pt-2 mb-2">
|
||||
<ui-checkbox v-model="preventIndexing" :label="$strings.LabelPreventIndexing" checkbox-bg="primary" border-color="gray-600" label-class="pl-2" />
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div class="flex-grow pt-2 mb-2">
|
||||
<ui-checkbox v-model="preventIndexing" :label="$strings.LabelPreventIndexing" checkbox-bg="primary" border-color="gray-600" label-class="pl-2" />
|
||||
</div>
|
||||
<div class="w-full relative mb-1">
|
||||
<ui-text-input-with-label v-model="ownerName" :label="$strings.LabelRssFeedCustomOwnerName" />
|
||||
</div>
|
||||
<div class="w-full relative mb-1">
|
||||
<ui-text-input-with-label v-model="ownerEmail" :label="$strings.LabelRssFeedCustomOwnerEmail" />
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
value: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {
|
||||
preventIndexing: true,
|
||||
ownerName: '',
|
||||
ownerEmail: ''
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
showAdvancedView: false
|
||||
}
|
||||
},
|
||||
watch: {},
|
||||
computed: {
|
||||
preventIndexing: {
|
||||
get() {
|
||||
return this.value.preventIndexing
|
||||
},
|
||||
set(value) {
|
||||
this.$emit('input', {
|
||||
...this.value,
|
||||
preventIndexing: value
|
||||
})
|
||||
}
|
||||
},
|
||||
ownerName: {
|
||||
get() {
|
||||
return this.value.ownerName
|
||||
},
|
||||
set(value) {
|
||||
this.$emit('input', {
|
||||
...this.value,
|
||||
ownerName: value
|
||||
})
|
||||
}
|
||||
},
|
||||
ownerEmail: {
|
||||
get() {
|
||||
return this.value.ownerEmail
|
||||
},
|
||||
set(value) {
|
||||
this.$emit('input', {
|
||||
...this.value,
|
||||
ownerEmail: value
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
},
|
||||
mounted() {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -127,6 +127,7 @@
|
|||
"HeaderRemoveEpisode": "Episode löschen",
|
||||
"HeaderRemoveEpisodes": "Lösche {0} Episoden",
|
||||
"HeaderRSSFeedIsOpen": "RSS-Feed ist geöffnet",
|
||||
"HeaderRSSFeedGeneral": "RSS Detailss",
|
||||
"HeaderSavedMediaProgress": "Gespeicherte Hörfortschritte",
|
||||
"HeaderSchedule": "Zeitplan",
|
||||
"HeaderScheduleLibraryScans": "Automatische Bibliotheksscans",
|
||||
|
|
@ -304,6 +305,7 @@
|
|||
"LabelPodcasts": "Podcasts",
|
||||
"LabelPodcastType": "Podcast Type",
|
||||
"LabelPrefixesToIgnore": "Zu ignorierende(s) Vorwort(e) (Groß- und Kleinschreibung wird nicht berücksichtigt)",
|
||||
"LabelPreventIndexing": "Prevent your feed from being indexed by iTunes and Google podcast directories",
|
||||
"LabelProgress": "Fortschritt",
|
||||
"LabelProvider": "Anbieter",
|
||||
"LabelPubDate": "Veröffentlichungsdatum",
|
||||
|
|
@ -318,6 +320,9 @@
|
|||
"LabelRSSFeedOpen": "RSS Feed Offen",
|
||||
"LabelRSSFeedSlug": "RSS Feed Schlagwort",
|
||||
"LabelRSSFeedURL": "RSS Feed URL",
|
||||
"LabelRssFeedCustomOwnerName": "Custom owner Name",
|
||||
"LabelRssFeedCustomOwnerEmail": "Custom owner Email",
|
||||
"LabelRssFeedPreventIndexing": "Prevent Indexing",
|
||||
"LabelSearchTerm": "Begriff suchen",
|
||||
"LabelSearchTitle": "Titel",
|
||||
"LabelSearchTitleOrASIN": "Titel oder ASIN",
|
||||
|
|
|
|||
|
|
@ -127,6 +127,7 @@
|
|||
"HeaderRemoveEpisode": "Remove Episode",
|
||||
"HeaderRemoveEpisodes": "Remove {0} Episodes",
|
||||
"HeaderRSSFeedIsOpen": "RSS Feed is Open",
|
||||
"HeaderRSSFeedGeneral": "RSS Detailss",
|
||||
"HeaderSavedMediaProgress": "Saved Media Progress",
|
||||
"HeaderSchedule": "Schedule",
|
||||
"HeaderScheduleLibraryScans": "Schedule Automatic Library Scans",
|
||||
|
|
@ -304,6 +305,7 @@
|
|||
"LabelPodcasts": "Podcasts",
|
||||
"LabelPodcastType": "Podcast Type",
|
||||
"LabelPrefixesToIgnore": "Prefixes to Ignore (case insensitive)",
|
||||
"LabelPreventIndexing": "Prevent your feed from being indexed by iTunes and Google podcast directories",
|
||||
"LabelProgress": "Progress",
|
||||
"LabelProvider": "Provider",
|
||||
"LabelPubDate": "Pub Date",
|
||||
|
|
@ -318,6 +320,9 @@
|
|||
"LabelRSSFeedOpen": "RSS Feed Open",
|
||||
"LabelRSSFeedSlug": "RSS Feed Slug",
|
||||
"LabelRSSFeedURL": "RSS Feed URL",
|
||||
"LabelRssFeedCustomOwnerName": "Custom owner Name",
|
||||
"LabelRssFeedCustomOwnerEmail": "Custom owner Email",
|
||||
"LabelRssFeedPreventIndexing": "Prevent Indexing",
|
||||
"LabelSearchTerm": "Search Term",
|
||||
"LabelSearchTitle": "Search Title",
|
||||
"LabelSearchTitleOrASIN": "Search Title or ASIN",
|
||||
|
|
|
|||
|
|
@ -127,6 +127,7 @@
|
|||
"HeaderRemoveEpisode": "Remove Episode",
|
||||
"HeaderRemoveEpisodes": "Remove {0} Episodes",
|
||||
"HeaderRSSFeedIsOpen": "RSS Feed is Open",
|
||||
"HeaderRSSFeedGeneral": "RSS Details",
|
||||
"HeaderSavedMediaProgress": "Saved Media Progress",
|
||||
"HeaderSchedule": "Schedule",
|
||||
"HeaderScheduleLibraryScans": "Schedule Automatic Library Scans",
|
||||
|
|
@ -304,6 +305,7 @@
|
|||
"LabelPodcasts": "Podcasts",
|
||||
"LabelPodcastType": "Podcast Type",
|
||||
"LabelPrefixesToIgnore": "Prefixes to Ignore (case insensitive)",
|
||||
"LabelPreventIndexing": "Prevent your feed from being indexed by iTunes and Google podcast directories",
|
||||
"LabelProgress": "Progress",
|
||||
"LabelProvider": "Provider",
|
||||
"LabelPubDate": "Pub Date",
|
||||
|
|
@ -318,6 +320,9 @@
|
|||
"LabelRSSFeedOpen": "RSS Feed Open",
|
||||
"LabelRSSFeedSlug": "RSS Feed Slug",
|
||||
"LabelRSSFeedURL": "RSS Feed URL",
|
||||
"LabelRssFeedCustomOwnerName": "Custom owner Name",
|
||||
"LabelRssFeedCustomOwnerEmail": "Custom owner Email",
|
||||
"LabelRssFeedPreventIndexing": "Prevent Indexing",
|
||||
"LabelSearchTerm": "Search Term",
|
||||
"LabelSearchTitle": "Search Title",
|
||||
"LabelSearchTitleOrASIN": "Search Title or ASIN",
|
||||
|
|
|
|||
|
|
@ -127,6 +127,7 @@
|
|||
"HeaderRemoveEpisode": "Supprimer l'épisode",
|
||||
"HeaderRemoveEpisodes": "Suppression de {0} épisodes",
|
||||
"HeaderRSSFeedIsOpen": "Le Flux RSS est actif",
|
||||
"HeaderRSSFeedGeneral": "RSS Detailss",
|
||||
"HeaderSavedMediaProgress": "Progression de la sauvegarde des médias",
|
||||
"HeaderSchedule": "Programmation",
|
||||
"HeaderScheduleLibraryScans": "Analyse automatique de la bibliothèque",
|
||||
|
|
@ -304,6 +305,7 @@
|
|||
"LabelPodcasts": "Podcasts",
|
||||
"LabelPodcastType": "Podcast Type",
|
||||
"LabelPrefixesToIgnore": "Préfixes à Ignorer (Insensible à la Casse)",
|
||||
"LabelPreventIndexing": "Prevent your feed from being indexed by iTunes and Google podcast directories",
|
||||
"LabelProgress": "Progression",
|
||||
"LabelProvider": "Fournisseur",
|
||||
"LabelPubDate": "Date de publication",
|
||||
|
|
@ -318,6 +320,9 @@
|
|||
"LabelRSSFeedOpen": "Flux RSS ouvert",
|
||||
"LabelRSSFeedSlug": "Identificateur d'adresse du Flux RSS ",
|
||||
"LabelRSSFeedURL": "Adresse du flux RSS",
|
||||
"LabelRssFeedCustomOwnerName": "Custom owner Name",
|
||||
"LabelRssFeedCustomOwnerEmail": "Custom owner Email",
|
||||
"LabelRssFeedPreventIndexing": "Prevent Indexing",
|
||||
"LabelSearchTerm": "Terme de recherche",
|
||||
"LabelSearchTitle": "Titre de recherche",
|
||||
"LabelSearchTitleOrASIN": "Recherche du titre ou ASIN",
|
||||
|
|
|
|||
|
|
@ -127,6 +127,7 @@
|
|||
"HeaderRemoveEpisode": "Ukloni epizodu",
|
||||
"HeaderRemoveEpisodes": "Ukloni {0} epizoda/-e",
|
||||
"HeaderRSSFeedIsOpen": "RSS Feed je otvoren",
|
||||
"HeaderRSSFeedGeneral": "RSS Detailss",
|
||||
"HeaderSavedMediaProgress": "Spremljen Media Progress",
|
||||
"HeaderSchedule": "Schedule",
|
||||
"HeaderScheduleLibraryScans": "Zakaži automatsko skeniranje biblioteke",
|
||||
|
|
@ -304,6 +305,7 @@
|
|||
"LabelPodcasts": "Podcasts",
|
||||
"LabelPodcastType": "Podcast Type",
|
||||
"LabelPrefixesToIgnore": "Prefiksi za ignorirati (mala i velika slova nisu bitna)",
|
||||
"LabelPreventIndexing": "Prevent your feed from being indexed by iTunes and Google podcast directories",
|
||||
"LabelProgress": "Napredak",
|
||||
"LabelProvider": "Dobavljač",
|
||||
"LabelPubDate": "Datam izdavanja",
|
||||
|
|
@ -318,6 +320,9 @@
|
|||
"LabelRSSFeedOpen": "RSS Feed Open",
|
||||
"LabelRSSFeedSlug": "RSS Feed Slug",
|
||||
"LabelRSSFeedURL": "RSS Feed URL",
|
||||
"LabelRssFeedCustomOwnerName": "Custom owner Name",
|
||||
"LabelRssFeedCustomOwnerEmail": "Custom owner Email",
|
||||
"LabelRssFeedPreventIndexing": "Prevent Indexing",
|
||||
"LabelSearchTerm": "Traži pojam",
|
||||
"LabelSearchTitle": "Traži naslov",
|
||||
"LabelSearchTitleOrASIN": "Traži naslov ili ASIN",
|
||||
|
|
|
|||
|
|
@ -127,6 +127,7 @@
|
|||
"HeaderRemoveEpisode": "Rimuovi Episodi",
|
||||
"HeaderRemoveEpisodes": "Rimuovi {0} Episodi",
|
||||
"HeaderRSSFeedIsOpen": "RSS Feed è aperto",
|
||||
"HeaderRSSFeedGeneral": "RSS Detailss",
|
||||
"HeaderSavedMediaProgress": "Progressi salvati",
|
||||
"HeaderSchedule": "Schedula",
|
||||
"HeaderScheduleLibraryScans": "Schedula la scansione della libreria",
|
||||
|
|
@ -304,6 +305,7 @@
|
|||
"LabelPodcasts": "Podcasts",
|
||||
"LabelPodcastType": "Podcast Type",
|
||||
"LabelPrefixesToIgnore": "Suffissi da ignorare (specificando maiuscole e minuscole)",
|
||||
"LabelPreventIndexing": "Prevent your feed from being indexed by iTunes and Google podcast directories",
|
||||
"LabelProgress": "Cominciati",
|
||||
"LabelProvider": "Provider",
|
||||
"LabelPubDate": "Data Pubblicazione",
|
||||
|
|
@ -318,6 +320,9 @@
|
|||
"LabelRSSFeedOpen": "RSS Feed Aperto",
|
||||
"LabelRSSFeedSlug": "RSS Feed Slug",
|
||||
"LabelRSSFeedURL": "RSS Feed URL",
|
||||
"LabelRssFeedCustomOwnerName": "Custom owner Name",
|
||||
"LabelRssFeedCustomOwnerEmail": "Custom owner Email",
|
||||
"LabelRssFeedPreventIndexing": "Prevent Indexing",
|
||||
"LabelSearchTerm": "Ricerca",
|
||||
"LabelSearchTitle": "Cerca Titolo",
|
||||
"LabelSearchTitleOrASIN": "Cerca titolo o ASIN",
|
||||
|
|
|
|||
|
|
@ -127,6 +127,7 @@
|
|||
"HeaderRemoveEpisode": "Usuń odcinek",
|
||||
"HeaderRemoveEpisodes": "Usuń {0} odcinków",
|
||||
"HeaderRSSFeedIsOpen": "Kanał RSS jest otwarty",
|
||||
"HeaderRSSFeedGeneral": "RSS Detailss",
|
||||
"HeaderSavedMediaProgress": "Zapisany postęp",
|
||||
"HeaderSchedule": "Harmonogram",
|
||||
"HeaderScheduleLibraryScans": "Zaplanuj automatyczne skanowanie biblioteki",
|
||||
|
|
@ -304,6 +305,7 @@
|
|||
"LabelPodcasts": "Podcasty",
|
||||
"LabelPodcastType": "Podcast Type",
|
||||
"LabelPrefixesToIgnore": "Ignorowane prefiksy (wielkość liter nie ma znaczenia)",
|
||||
"LabelPreventIndexing": "Prevent your feed from being indexed by iTunes and Google podcast directories",
|
||||
"LabelProgress": "Postęp",
|
||||
"LabelProvider": "Dostawca",
|
||||
"LabelPubDate": "Data publikacji",
|
||||
|
|
@ -318,6 +320,9 @@
|
|||
"LabelRSSFeedOpen": "RSS Feed otwarty",
|
||||
"LabelRSSFeedSlug": "RSS Feed Slug",
|
||||
"LabelRSSFeedURL": "URL kanały RSS",
|
||||
"LabelRssFeedCustomOwnerName": "Custom owner Name",
|
||||
"LabelRssFeedCustomOwnerEmail": "Custom owner Email",
|
||||
"LabelRssFeedPreventIndexing": "Prevent Indexing",
|
||||
"LabelSearchTerm": "Wyszukiwanie frazy",
|
||||
"LabelSearchTitle": "Wyszukaj tytuł",
|
||||
"LabelSearchTitleOrASIN": "Szukaj tytuł lub ASIN",
|
||||
|
|
|
|||
|
|
@ -127,6 +127,7 @@
|
|||
"HeaderRemoveEpisode": "Удалить Эпизод",
|
||||
"HeaderRemoveEpisodes": "Удалить {0} Эпизодов",
|
||||
"HeaderRSSFeedIsOpen": "RSS-канал Открыт",
|
||||
"HeaderRSSFeedGeneral": "RSS Detailss",
|
||||
"HeaderSavedMediaProgress": "Прогресс Медиа Сохранен",
|
||||
"HeaderSchedule": "Планировщик",
|
||||
"HeaderScheduleLibraryScans": "Планировщик Автоматического Сканирования Библиотеки",
|
||||
|
|
@ -304,6 +305,7 @@
|
|||
"LabelPodcasts": "Подкасты",
|
||||
"LabelPodcastType": "Podcast Type",
|
||||
"LabelPrefixesToIgnore": "Игнорируемые Префиксы (без учета регистра)",
|
||||
"LabelPreventIndexing": "Prevent your feed from being indexed by iTunes and Google podcast directories",
|
||||
"LabelProgress": "Прогресс",
|
||||
"LabelProvider": "Провайдер",
|
||||
"LabelPubDate": "Дата Публикации",
|
||||
|
|
@ -318,6 +320,9 @@
|
|||
"LabelRSSFeedOpen": "Открыть RSS-канал",
|
||||
"LabelRSSFeedSlug": "Встроить RSS-канал",
|
||||
"LabelRSSFeedURL": "URL RSS-канала",
|
||||
"LabelRssFeedCustomOwnerName": "Custom owner Name",
|
||||
"LabelRssFeedCustomOwnerEmail": "Custom owner Email",
|
||||
"LabelRssFeedPreventIndexing": "Prevent Indexing",
|
||||
"LabelSearchTerm": "Поисковый Запрос",
|
||||
"LabelSearchTitle": "Поиск по Названию",
|
||||
"LabelSearchTitleOrASIN": "Поиск по Названию или ASIN",
|
||||
|
|
|
|||
|
|
@ -127,6 +127,7 @@
|
|||
"HeaderRemoveEpisode": "移除剧集",
|
||||
"HeaderRemoveEpisodes": "移除 {0} 剧集",
|
||||
"HeaderRSSFeedIsOpen": "RSS 源已打开",
|
||||
"HeaderRSSFeedGeneral": "RSS Detailss",
|
||||
"HeaderSavedMediaProgress": "保存媒体进度",
|
||||
"HeaderSchedule": "计划任务",
|
||||
"HeaderScheduleLibraryScans": "自动扫描媒体库",
|
||||
|
|
@ -304,6 +305,7 @@
|
|||
"LabelPodcasts": "播客",
|
||||
"LabelPodcastType": "Podcast Type",
|
||||
"LabelPrefixesToIgnore": "忽略的前缀 (不区分大小写)",
|
||||
"LabelPreventIndexing": "Prevent your feed from being indexed by iTunes and Google podcast directories",
|
||||
"LabelProgress": "进度",
|
||||
"LabelProvider": "供应商",
|
||||
"LabelPubDate": "出版日期",
|
||||
|
|
@ -318,6 +320,9 @@
|
|||
"LabelRSSFeedOpen": "打开 RSS 源",
|
||||
"LabelRSSFeedSlug": "RSS 源段",
|
||||
"LabelRSSFeedURL": "RSS 源 URL",
|
||||
"LabelRssFeedCustomOwnerName": "Custom owner Name",
|
||||
"LabelRssFeedCustomOwnerEmail": "Custom owner Email",
|
||||
"LabelRssFeedPreventIndexing": "Prevent Indexing",
|
||||
"LabelSearchTerm": "搜索项",
|
||||
"LabelSearchTitle": "搜索标题",
|
||||
"LabelSearchTitleOrASIN": "搜索标题或 ASIN",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue