perf: support more translations + add Simplified Chinese translations (#415)

* Extract all translatable strings in the settings dialog box.

* Finish All string extract.

issue:
  1. src\components\Modals\ShareLimit\ShareLimitInput.vue
     :label="`${title} Limit`"
  2. src\components\Modals\TagsAndCategories\CreateCategoryDialog.vue
     all tips not work
  3. src\components\Modals\TorrentDetailModal\Tabs\Trackers.vue
     no idea about formatTrackerStatus

Signed-off-by: Dee.H.Y <dongfengweixiao@hotmail.com>
This commit is contained in:
Dee 2022-05-08 15:47:14 +08:00 committed by GitHub
parent ea8e4a4f75
commit ddd28ae619
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
45 changed files with 863 additions and 261 deletions

View file

@ -87,14 +87,14 @@
<v-textarea <v-textarea
v-if="files.length == 0" v-if="files.length == 0"
v-model="urls" v-model="urls"
label="URL" :label="$t('url')"
:prepend-icon="mdiLink" :prepend-icon="mdiLink"
rows="1" rows="1"
required required
:autofocus="!phoneLayout" :autofocus="!phoneLayout"
auto-grow auto-grow
clearable clearable
hint="One link per line" :hint="$t('modals.add.urlHint')"
/> />
</v-col> </v-col>
</v-row> </v-row>
@ -103,7 +103,7 @@
v-model="category" v-model="category"
:items="availableCategories" :items="availableCategories"
clearable clearable
label="Category" :label="$t('category')"
item-text="name" item-text="name"
:prepend-icon="mdiTag" :prepend-icon="mdiTag"
@input="categoryChanged" @input="categoryChanged"
@ -112,7 +112,7 @@
<v-text-field <v-text-field
v-model="directory" v-model="directory"
:disabled="autoTMM" :disabled="autoTMM"
label="Download Directory" :label="$t('modals.add.downloadDirectory')"
:prepend-icon="mdiFolder" :prepend-icon="mdiFolder"
autocomplete="download-directory" autocomplete="download-directory"
name="download-directory" name="download-directory"
@ -121,28 +121,28 @@
<v-flex xs12 sm6> <v-flex xs12 sm6>
<v-checkbox <v-checkbox
v-model="start" v-model="start"
label="Start torrent" :label="$t('modals.add.starttorrent')"
hide-details hide-details
/> />
</v-flex> </v-flex>
<v-flex xs12 sm6> <v-flex xs12 sm6>
<v-checkbox <v-checkbox
v-model="skip_checking" v-model="skip_checking"
label="Skip hash check" :label="$t('modals.add.skipHashCheck')"
hide-details hide-details
/> />
</v-flex> </v-flex>
<v-flex xs12 sm6> <v-flex xs12 sm6>
<v-checkbox <v-checkbox
v-model="root_folder" v-model="root_folder"
label="Create subfolder" :label="$t('modals.add.createSubfolder')"
hide-details hide-details
/> />
</v-flex> </v-flex>
<v-flex xs12 sm6> <v-flex xs12 sm6>
<v-checkbox <v-checkbox
v-model="autoTMM" v-model="autoTMM"
label="Automatic Torrent Management" :label="$t('modals.add.automaticTorrentManagement')"
hide-details hide-details
/> />
</v-flex> </v-flex>
@ -198,7 +198,7 @@
</v-icon> </v-icon>
</div> </div>
<div> <div>
<h3>Drop here for add</h3> <h3>{{ $t('modals.add.dropHereForAdd') }}</h3>
</div> </div>
</div> </div>
</div> </div>
@ -234,7 +234,7 @@ export default {
else return /^.*\.torrent$/.test(f.name) else return /^.*\.torrent$/.test(f.name)
}) })
return result ? result : 'One or more files is not a valid torrent' return result ? result : this.$i18n.t('modals.add.oneOrMoreFilesInvalidTorrent')
} }
], ],
loading: false, loading: false,

View file

@ -8,7 +8,7 @@
<v-card> <v-card>
<v-card-title class="pa-0"> <v-card-title class="pa-0">
<v-toolbar-title class="ma-4 primarytext--text"> <v-toolbar-title class="ma-4 primarytext--text">
<h3>Change Location</h3> <h3>{{ $t('modals.changeLocation.title') }}</h3>
</v-toolbar-title> </v-toolbar-title>
</v-card-title> </v-card-title>
<v-card-text> <v-card-text>
@ -17,13 +17,13 @@
<v-col> <v-col>
<v-text-field <v-text-field
v-model="torrent.name" v-model="torrent.name"
label="Torrent Name" :label="$t('modals.changeLocation.torrentName')"
:prepend-icon="mdiFile" :prepend-icon="mdiFile"
readonly readonly
/> />
<v-text-field <v-text-field
v-model="newPath" v-model="newPath"
label="Directory" :label="$t('directory')"
:prepend-icon="mdiFolder" :prepend-icon="mdiFolder"
@keydown.enter="setLocation" @keydown.enter="setLocation"
/> />
@ -37,13 +37,13 @@
class="accent white--text elevation-0 px-4" class="accent white--text elevation-0 px-4"
@click="setLocation" @click="setLocation"
> >
Save {{ $t('save') }}
</v-btn> </v-btn>
<v-btn <v-btn
class="error white--text elevation-0 px-4" class="error white--text elevation-0 px-4"
@click="close" @click="close"
> >
Cancel {{ $t('cancel') }}
</v-btn> </v-btn>
</v-card-actions> </v-card-actions>
</v-card> </v-card>

View file

@ -9,7 +9,7 @@
<v-card> <v-card>
<v-card-title class="pa-0"> <v-card-title class="pa-0">
<v-toolbar-title class="ma-4 primarytext--text"> <v-toolbar-title class="ma-4 primarytext--text">
<h3>Rename</h3> <h3>{{ $t('modals.rename.title') }}</h3>
</v-toolbar-title> </v-toolbar-title>
</v-card-title> </v-card-title>
<v-card-text> <v-card-text>
@ -21,7 +21,7 @@
rows="1" rows="1"
auto-grow auto-grow
clearable clearable
label="Torrent Name" :label="$t('modals.rename.torrentName')"
:prepend-inner-icon="mdiFile" :prepend-inner-icon="mdiFile"
/> />
</v-col> </v-col>
@ -42,13 +42,13 @@
class="accent white--text elevation-0 px-4" class="accent white--text elevation-0 px-4"
@click="rename" @click="rename"
> >
save {{ $t('save') }}
</v-btn> </v-btn>
<v-btn <v-btn
class="error white--text elevation-0 px-4" class="error white--text elevation-0 px-4"
@click="close" @click="close"
> >
cancel {{ $t('cancel') }}
</v-btn> </v-btn>
</v-card-actions> </v-card-actions>
</v-card> </v-card>

View file

@ -1,7 +1,7 @@
<template> <template>
<div> <div>
<v-btn @click="opened = true"> <v-btn @click="opened = true">
<v-icon>{{ mdiCog }}</v-icon> Plugin manager <v-icon>{{ mdiCog }}</v-icon> {{ $t('modals.pluginManager.title') | titleCase }}
</v-btn> </v-btn>
<v-bottom-sheet <v-bottom-sheet

View file

@ -8,7 +8,7 @@
> >
<v-card :style="{ height: phoneLayout ? '100vh' : '' }"> <v-card :style="{ height: phoneLayout ? '100vh' : '' }">
<v-card-title class="justify-center"> <v-card-title class="justify-center">
<h2>Search</h2> <h2>{{ $t('modals.search.title') }}</h2>
</v-card-title> </v-card-title>
<v-card-text class="pa-0"> <v-card-text class="pa-0">
<v-form <v-form
@ -35,7 +35,7 @@
:color="loading ? 'warning' : 'primary'" :color="loading ? 'warning' : 'primary'"
@click="loading ? stopSearch() : startSearch()" @click="loading ? stopSearch() : startSearch()"
> >
{{ loading ? "Stop" : "Search" }} {{ loading ? $t('modals.search.btnStopSearch') : $t('modals.search.btnStartSearch') }}
</v-btn> </v-btn>
</v-col> </v-col>
</v-flex> </v-flex>
@ -106,12 +106,12 @@ export default {
loading: false, loading: false,
grid: { grid: {
headers: [ headers: [
{ text: 'Name', value: 'fileName' }, { text: this.$i18n.t('modals.search.columnTitle.name'), value: 'fileName' },
{ text: 'Size', value: 'fileSize' }, { text: this.$i18n.t('modals.search.columnTitle.size'), value: 'fileSize' },
{ text: 'Seeds', value: 'nbSeeders' }, { text: this.$i18n.t('modals.search.columnTitle.seeds'), value: 'nbSeeders' },
{ text: 'Peers', value: 'nbLeechers' }, { text: this.$i18n.t('modals.search.columnTitle.peers'), value: 'nbLeechers' },
{ text: 'Search_engine', value: 'siteUrl' }, { text: this.$i18n.t('modals.search.columnTitle.search_engine'), value: 'siteUrl' },
{ text: 'Action', value: 'actions', sortable: false } { text: this.$i18n.t('modals.search.columnTitle.action'), value: 'actions', sortable: false }
] ]
}, },
searchForm: { searchForm: {

View file

@ -20,22 +20,22 @@
<v-tabs v-model="tab" align-with-title show-arrows> <v-tabs v-model="tab" align-with-title show-arrows>
<v-tabs-slider color="white" /> <v-tabs-slider color="white" />
<v-tab class="white--text" href="#vuetorrent"> <v-tab class="white--text" href="#vuetorrent">
<h4>vuetorrent</h4> <h4>{{ $t('modals.settings.tabName.VueTorrent') }}</h4>
</v-tab> </v-tab>
<v-tab class="white--text" href="#downloads"> <v-tab class="white--text" href="#downloads">
<h4>downloads</h4> <h4>{{ $t('modals.settings.tabName.downloads') }}</h4>
</v-tab> </v-tab>
<v-tab class="white--text" href="#connection"> <v-tab class="white--text" href="#connection">
<h4>connection</h4> <h4>{{ $t('modals.settings.tabName.connection') }}</h4>
</v-tab> </v-tab>
<v-tab class="white--text" href="#bittorrent"> <v-tab class="white--text" href="#bittorrent">
<h4>bittorrent</h4> <h4>{{ $t('modals.settings.tabName.bittorrent') }}</h4>
</v-tab> </v-tab>
<v-tab class="white--text" href="#webui"> <v-tab class="white--text" href="#webui">
<h4>WEB UI</h4> <h4>{{ $t('modals.settings.tabName.webUI') }}</h4>
</v-tab> </v-tab>
<v-tab class="white--text" href="#tagsAndCategories"> <v-tab class="white--text" href="#tagsAndCategories">
<h4>tags & categories</h4> <h4>{{ $t('modals.settings.tabName.tagsAndCategories') }}</h4>
</v-tab> </v-tab>
</v-tabs> </v-tabs>
</template> </template>

View file

@ -1,12 +1,12 @@
<template> <template>
<v-card flat> <v-card flat>
<v-subheader>Privacy</v-subheader> <v-subheader>{{ $t('modals.settings.pageBittorrent.subHeaderPrivacy') }}</v-subheader>
<v-list-item> <v-list-item>
<v-checkbox <v-checkbox
v-model="settings.dht" v-model="settings.dht"
hide-details hide-details
class="ma-0 pa-0" class="ma-0 pa-0"
label="Enable DHT (decentralized network) to find more peers" :label="$t('modals.settings.pageBittorrent.enableDHT')"
/> />
</v-list-item> </v-list-item>
<v-list-item> <v-list-item>
@ -14,7 +14,7 @@
v-model="settings.pex" v-model="settings.pex"
hide-details hide-details
class="ma-0 pa-0" class="ma-0 pa-0"
label="Enable Peer Exchange (PeX) to find more peers" :label="$t('modals.settings.pageBittorrent.enablePeX')"
/> />
</v-list-item> </v-list-item>
<v-list-item> <v-list-item>
@ -22,7 +22,7 @@
v-model="settings.lsd" v-model="settings.lsd"
hide-details hide-details
class="ma-0 pa-0" class="ma-0 pa-0"
label="Enable Local Peer Discovery to find more peers" :label="$t('modals.settings.pageBittorrent.enableLPD')"
/> />
</v-list-item> </v-list-item>
<v-list-item> <v-list-item>
@ -30,7 +30,7 @@
v-model="settings.lsd" v-model="settings.lsd"
hide-details hide-details
class="ma-0 pa-0" class="ma-0 pa-0"
label="Enable anonymous mode" :label="$t('modals.settings.pageBittorrent.enableAnonymous')"
/> />
</v-list-item> </v-list-item>
<v-divider insert /> <v-divider insert />
@ -39,7 +39,7 @@
v-model="settings.queueing_enabled" v-model="settings.queueing_enabled"
hide-details hide-details
class="ma-0 pa-0" class="ma-0 pa-0"
label="Torrent Queueing" :label="$t('modals.settings.pageBittorrent.torrentQueue')"
/> />
</v-list-item> </v-list-item>
<v-list-item> <v-list-item>
@ -50,7 +50,7 @@
dense dense
type="number" type="number"
hide-details hide-details
label="Maximum active downloads" :label="$t('modals.settings.pageBittorrent.maxActiveDownload')"
:disabled="!settings.queueing_enabled" :disabled="!settings.queueing_enabled"
/> />
</v-list-item> </v-list-item>
@ -62,7 +62,7 @@
dense dense
type="number" type="number"
hide-details hide-details
label="Maximum active uploads" :label="$t('modals.settings.pageBittorrent.maxActiveUpload')"
:disabled="!settings.queueing_enabled" :disabled="!settings.queueing_enabled"
/> />
</v-list-item> </v-list-item>
@ -74,7 +74,7 @@
dense dense
type="number" type="number"
hide-details hide-details
label="Maximum active torrents" :label="$t('modals.settings.pageBittorrent.maxActiveTorrent')"
:disabled="!settings.queueing_enabled" :disabled="!settings.queueing_enabled"
/> />
</v-list-item> </v-list-item>
@ -83,7 +83,7 @@
v-model="settings.dont_count_slow_torrents" v-model="settings.dont_count_slow_torrents"
hide-details hide-details
class="ma-0 pa-0" class="ma-0 pa-0"
label="Do not count slow torrents in these limits" :label="$t('modals.settings.pageBittorrent.excludeSlowTorrent')"
/> />
</v-list-item> </v-list-item>
<v-list-item> <v-list-item>
@ -94,7 +94,7 @@
dense dense
type="number" type="number"
hide-details hide-details
label="Download rate threshold KiB/s" :label="$t('modals.settings.pageBittorrent.downloadRateLimit')"
:disabled="!settings.dont_count_slow_torrents" :disabled="!settings.dont_count_slow_torrents"
/> />
</v-list-item> </v-list-item>
@ -106,7 +106,7 @@
dense dense
type="number" type="number"
hide-details hide-details
label="Upload rate threshold KiB/s" :label="$t('modals.settings.pageBittorrent.uploadRateLimit')"
:disabled="!settings.dont_count_slow_torrents" :disabled="!settings.dont_count_slow_torrents"
/> />
</v-list-item> </v-list-item>
@ -118,12 +118,12 @@
dense dense
type="number" type="number"
hide-details hide-details
label="Torrent inactivity timer" :label="$t('modals.settings.pageBittorrent.torrentInactivityTimer')"
:disabled="!settings.dont_count_slow_torrents" :disabled="!settings.dont_count_slow_torrents"
/> />
</v-list-item> </v-list-item>
<v-divider insert /> <v-divider insert />
<v-subheader>Seed Limits</v-subheader> <v-subheader>{{ $t('modals.settings.pageBittorrent.subHeaderSeedLimits') }}</v-subheader>
<v-list-item> <v-list-item>
<v-row dense> <v-row dense>
<v-col> <v-col>
@ -131,7 +131,7 @@
v-model="settings.max_ratio_enabled" v-model="settings.max_ratio_enabled"
hide-details hide-details
class="ma-0 pa-0" class="ma-0 pa-0"
label="When ratio reaches" :label="$t('modals.settings.pageBittorrent.whenRatioReaches')"
/> />
</v-col> </v-col>
<v-col> <v-col>
@ -154,7 +154,7 @@
v-model="settings.max_seeding_time_enabled" v-model="settings.max_seeding_time_enabled"
hide-details hide-details
class="ma-0 pa-0" class="ma-0 pa-0"
label="When seeding time reaches" :label="$t('modals.settings.pageBittorrent.whenSeedingTimeReaches')"
/> />
</v-col> </v-col>
<v-col> <v-col>

View file

@ -1,6 +1,6 @@
<template> <template>
<v-card flat> <v-card flat>
<v-subheader>Connection Limits</v-subheader> <v-subheader>{{ $t('modals.settings.pageConnection.subHeader') }}</v-subheader>
<v-list-item> <v-list-item>
<v-text-field <v-text-field
v-model="settings.max_connec" v-model="settings.max_connec"
@ -9,7 +9,7 @@
dense dense
type="number" type="number"
hide-details hide-details
label="Global maximum number of connections" :label="$t('modals.settings.pageConnection.globalMaxConnection')"
/> />
</v-list-item> </v-list-item>
<v-list-item> <v-list-item>
@ -20,7 +20,7 @@
dense dense
type="number" type="number"
hide-details hide-details
label="Maximum number of connections per torrent" :label="$t('modals.settings.pageConnection.perTorrentMaxConnection')"
/> />
</v-list-item> </v-list-item>
<v-list-item> <v-list-item>
@ -31,7 +31,7 @@
dense dense
type="number" type="number"
hide-details hide-details
label="Global maximum number of upload slots" :label="$t('modals.settings.pageConnection.globalMaxUploadSlots')"
/> />
</v-list-item> </v-list-item>
<v-list-item> <v-list-item>
@ -42,7 +42,7 @@
dense dense
type="number" type="number"
hide-details hide-details
label="Maximum number of upload slots per torrent" :label="$t('modals.settings.pageConnection.perTorrentMaxUploadSlots')"
/> />
</v-list-item> </v-list-item>
</v-card> </v-card>

View file

@ -1,12 +1,12 @@
<template> <template>
<v-card flat> <v-card flat>
<v-subheader>When adding a torrent</v-subheader> <v-subheader>{{ $t('modals.settings.pageDownloads.subHeaderWhenAddTorrent') }}</v-subheader>
<v-list-item> <v-list-item>
<v-checkbox <v-checkbox
v-model="settings.create_subfolder_enabled" v-model="settings.create_subfolder_enabled"
hide-details hide-details
class="ma-0 pa-0" class="ma-0 pa-0"
label="Create subfolder for torrents with multiple files" :label="$t('modals.settings.pageDownloads.whenAddTorrent.createSubFolder')"
/> />
</v-list-item> </v-list-item>
<v-list-item> <v-list-item>
@ -14,17 +14,17 @@
v-model="settings.start_paused_enabled" v-model="settings.start_paused_enabled"
hide-details hide-details
class="ma-0 pa-0" class="ma-0 pa-0"
label="Do not start the download automatically" :label="$t('modals.settings.pageDownloads.whenAddTorrent.donotAutoStart')"
/> />
</v-list-item> </v-list-item>
<v-divider insert /> <v-divider insert />
<v-subheader>Public Settings</v-subheader> <v-subheader>{{ $t('modals.settings.pageDownloads.subHeaderPublicSettings') }}</v-subheader>
<v-list-item> <v-list-item>
<v-checkbox <v-checkbox
v-model="settings.preallocate_all" v-model="settings.preallocate_all"
hide-details hide-details
class="ma-0 pa-0" class="ma-0 pa-0"
label="Pre-allocate disk space for all files" :label="$t('modals.settings.pageDownloads.publicSettings.preAllocateDisk')"
/> />
</v-list-item> </v-list-item>
<v-list-item> <v-list-item>
@ -32,17 +32,17 @@
v-model="settings.incomplete_files_ext" v-model="settings.incomplete_files_ext"
hide-details hide-details
class="ma-0 pa-0" class="ma-0 pa-0"
label="Append .!qB extension to incomplete files" :label="$t('modals.settings.pageDownloads.publicSettings.appendQBExtension')"
/> />
</v-list-item> </v-list-item>
<v-divider insert /> <v-divider insert />
<v-subheader>Saving Management</v-subheader> <v-subheader>{{ $t('modals.settings.pageDownloads.subHeaderSaveManagement') }}</v-subheader>
<v-list-item> <v-list-item>
<v-checkbox <v-checkbox
v-model="settings.auto_tmm_enabled" v-model="settings.auto_tmm_enabled"
hide-details hide-details
class="ma-0 pa-0" class="ma-0 pa-0"
label="Automatic Torrent Management" :label="$t('modals.settings.pageDownloads.saveManagement.autoManagement')"
/> />
</v-list-item> </v-list-item>
<v-list-item class="mb-2"> <v-list-item class="mb-2">
@ -50,7 +50,7 @@
v-model="settings.save_path_changed_tmm_enabled" v-model="settings.save_path_changed_tmm_enabled"
hide-details hide-details
class="ma-0 pa-0" class="ma-0 pa-0"
label="Relocate Torrent when category changes" :label="$t('modals.settings.pageDownloads.saveManagement.relocate')"
/> />
</v-list-item> </v-list-item>
<v-list-item class="mb-2"> <v-list-item class="mb-2">
@ -59,7 +59,7 @@
class="mb-2" class="mb-2"
outlined outlined
dense dense
label="Default Save Path" :label="$t('modals.settings.pageDownloads.saveManagement.defaultSavePath')"
hide-details hide-details
/> />
</v-list-item> </v-list-item>
@ -68,7 +68,7 @@
v-model="settings.temp_path_enabled" v-model="settings.temp_path_enabled"
hide-details hide-details
class="ma-0 pa-0" class="ma-0 pa-0"
label="Keep incomplete torrents in:" :label="$t('modals.settings.pageDownloads.saveManagement.keepIncompleteIn')"
/> />
</v-list-item> </v-list-item>
<v-list-item v-if="settings.temp_path_enabled"> <v-list-item v-if="settings.temp_path_enabled">
@ -85,7 +85,7 @@
v-model="settings.autorun_enabled" v-model="settings.autorun_enabled"
hide-details hide-details
class="ma-0 pa-0" class="ma-0 pa-0"
label="Autorun enabled:" :label="$t('modals.settings.pageDownloads.saveManagement.autoEnabled')"
/> />
</v-list-item> </v-list-item>
<v-list-item v-if="settings.autorun_enabled"> <v-list-item v-if="settings.autorun_enabled">
@ -94,25 +94,25 @@
class="mb-2" class="mb-2"
outlined outlined
dense dense
label="Autorun program" :label="$t('modals.settings.pageDownloads.saveManagement.autorunProgram')"
hide-details hide-details
/> />
</v-list-item> </v-list-item>
<v-list-item v-if="settings.autorun_enabled" class="mb-4"> <v-list-item v-if="settings.autorun_enabled" class="mb-4">
<v-card flat color="grey--text selected"> <v-card flat color="grey--text selected">
<v-card-text> <v-card-text>
<h5>Supported parameters (case sensitive):</h5> <h5>{{ $t('modals.settings.pageDownloads.saveManagement.supportParamTitle') }}</h5>
<ul> <ul>
<li>%N: Torrent name </li> <li>{{ $t('modals.settings.pageDownloads.saveManagement.supportParamN') }}</li>
<li>%L: Category</li> <li>{{ $t('modals.settings.pageDownloads.saveManagement.supportParamL') }}</li>
<li>%G: Tags (separated by comma)</li> <li>{{ $t('modals.settings.pageDownloads.saveManagement.supportParamG') }}</li>
<li>%F: Content path (same as root path for multi-file torrent)</li> <li>{{ $t('modals.settings.pageDownloads.saveManagement.supportParamF') }}</li>
<li>%R: Root path (first torrent subdirectory path)</li> <li>{{ $t('modals.settings.pageDownloads.saveManagement.supportParamR') }}</li>
<li>%D: Save path</li> <li>{{ $t('modals.settings.pageDownloads.saveManagement.supportParamD') }}</li>
<li>%C: Number of files</li> <li>{{ $t('modals.settings.pageDownloads.saveManagement.supportParamC') }}</li>
<li>%Z: Torrent size (bytes)</li> <li>{{ $t('modals.settings.pageDownloads.saveManagement.supportParamZ') }}</li>
<li>%T: Current tracker</li> <li>{{ $t('modals.settings.pageDownloads.saveManagement.supportParamT') }}</li>
<li>%I: Info hash</li> <li>{{ $t('modals.settings.pageDownloads.saveManagement.supportParamI') }}</li>
</ul> </ul>
</v-card-text> </v-card-text>
</v-card> </v-card>

View file

@ -2,7 +2,7 @@
<v-card flat> <v-card flat>
<v-row dense class="ma-0 pa-0"> <v-row dense class="ma-0 pa-0">
<v-col cols="12" md="6"> <v-col cols="12" md="6">
<v-subheader>Available Tags:</v-subheader> <v-subheader>{{ $t('modals.settings.pageTagsAndCategories.subHeaderTags') }}</v-subheader>
<template v-for="(item, index) in availableTags"> <template v-for="(item, index) in availableTags">
<v-list-item :key="item.title"> <v-list-item :key="item.title">
<v-list-item-content> <v-list-item-content>
@ -24,13 +24,13 @@
class="mx-auto accent white--text elevation-0 px-4" class="mx-auto accent white--text elevation-0 px-4"
@click="createTag" @click="createTag"
> >
Create new {{ $t('modals.settings.pageTagsAndCategories.btnCreateNew') }}
</v-btn> </v-btn>
</v-list-item> </v-list-item>
</v-col> </v-col>
<v-col cols="12" md="6"> <v-col cols="12" md="6">
<v-subheader>Available Categories:</v-subheader> <v-subheader>{{ $t('modals.settings.pageTagsAndCategories.subHeaderCategories') }}</v-subheader>
<template v-for="(item, index) in availableCategories"> <template v-for="(item, index) in availableCategories">
<v-list-item :key="item.title"> <v-list-item :key="item.title">
<v-list-item-content> <v-list-item-content>
@ -58,7 +58,7 @@
class="mx-auto accent white--text elevation-0 px-4" class="mx-auto accent white--text elevation-0 px-4"
@click="createCategory" @click="createCategory"
> >
Create new {{ $t('modals.settings.pageTagsAndCategories.btnCreateNew') }}
</v-btn> </v-btn>
</v-list-item> </v-list-item>
</v-col> </v-col>

View file

@ -2,10 +2,10 @@
<v-card flat> <v-card flat>
<v-tabs v-model="tab"> <v-tabs v-model="tab">
<v-tab href="#general"> <v-tab href="#general">
General {{ $t('modals.settings.pageVueTorrent.tabName.general') }}
</v-tab> </v-tab>
<v-tab href="#dashboard"> <v-tab href="#dashboard">
Dashboard {{ $t('modals.settings.pageVueTorrent.tabName.dashboard') }}
</v-tab> </v-tab>
</v-tabs> </v-tabs>
<v-tabs-items v-model="tab" touchless> <v-tabs-items v-model="tab" touchless>

View file

@ -3,7 +3,7 @@
<v-row dense> <v-row dense>
<v-col cols="12" md="6"> <v-col cols="12" md="6">
<v-subheader> <v-subheader>
Properties to display for busy torrents {{ $t('modals.settings.pageVueTorrent.pageDashboard.busyTorrentTip') }}
</v-subheader> </v-subheader>
<v-row dense> <v-row dense>
<v-list flat class="ma-2 pa-0"> <v-list flat class="ma-2 pa-0">
@ -38,7 +38,7 @@
<v-col cols="12" md="6"> <v-col cols="12" md="6">
<v-subheader> <v-subheader>
Properties to display for completed torrents {{ $t('modals.settings.pageVueTorrent.pageDashboard.completedTorrentTip') }}
</v-subheader> </v-subheader>
<v-row dense> <v-row dense>
<v-list flat class="ma-2 pa-0"> <v-list flat class="ma-2 pa-0">

View file

@ -1,8 +1,7 @@
<template> <template>
<v-card flat> <v-card flat>
<v-subheader> <v-subheader>
These settings are for the custom WebUI {{ $t('modals.settings.pageVueTorrent.pageGeneral.tip') }}
itself
</v-subheader> </v-subheader>
<v-list-item> <v-list-item>
<v-row dense> <v-row dense>
@ -12,7 +11,7 @@
class="v-input--reverse pa-0 ma-0" class="v-input--reverse pa-0 ma-0"
hide-details hide-details
inset inset
label="Show Current Speed" :label="$t('modals.settings.pageVueTorrent.pageGeneral.currentSpeed')"
/> />
</v-col> </v-col>
</v-row> </v-row>
@ -25,7 +24,7 @@
class="v-input--reverse pa-0 ma-0" class="v-input--reverse pa-0 ma-0"
hide-details hide-details
inset inset
label="Show Speed Graph" :label="$t('modals.settings.pageVueTorrent.pageGeneral.speedGraph')"
/> />
</v-col> </v-col>
</v-row> </v-row>
@ -38,7 +37,7 @@
class="v-input--reverse pa-0 ma-0" class="v-input--reverse pa-0 ma-0"
hide-details hide-details
inset inset
label="Show Session Stats" :label="$t('modals.settings.pageVueTorrent.pageGeneral.sessionStats')"
/> />
</v-col> </v-col>
</v-row> </v-row>
@ -51,7 +50,7 @@
class="v-input--reverse pa-0 ma-0" class="v-input--reverse pa-0 ma-0"
hide-details hide-details
inset inset
label="Show All-Time Stats" :label="$t('modals.settings.pageVueTorrent.pageGeneral.allTimeStats')"
/> />
</v-col> </v-col>
</v-row> </v-row>
@ -64,7 +63,7 @@
class="v-input--reverse pa-0 ma-0" class="v-input--reverse pa-0 ma-0"
hide-details hide-details
inset inset
label="Show Free Space" :label="$t('modals.settings.pageVueTorrent.pageGeneral.freeSpace')"
/> />
</v-col> </v-col>
</v-row> </v-row>
@ -77,7 +76,7 @@
class="v-input--reverse pa-0 ma-0" class="v-input--reverse pa-0 ma-0"
hide-details hide-details
inset inset
label="Show Tracker Filter" :label="$t('modals.settings.pageVueTorrent.pageGeneral.trackerFilter')"
/> />
</v-col> </v-col>
</v-row> </v-row>
@ -90,7 +89,7 @@
class="v-input--reverse pa-0 ma-0" class="v-input--reverse pa-0 ma-0"
hide-details hide-details
inset inset
label="Right Drawer" :label="$t('modals.settings.pageVueTorrent.pageGeneral.rightDrawer')"
/> />
</v-col> </v-col>
</v-row> </v-row>
@ -99,7 +98,7 @@
<v-row dense> <v-row dense>
<v-col cols="8" sm="8" md="10"> <v-col cols="8" sm="8" md="10">
<p class="subtitle-1 mt-2"> <p class="subtitle-1 mt-2">
Language: {{ $t('modals.settings.pageVueTorrent.pageGeneral.language') }}
</p> </p>
</v-col> </v-col>
<v-col cols="4" sm="4" md="2"> <v-col cols="4" sm="4" md="2">
@ -120,7 +119,7 @@
<v-row dense> <v-row dense>
<v-col cols="8" sm="8" md="10"> <v-col cols="8" sm="8" md="10">
<p class="subtitle-1 mt-2"> <p class="subtitle-1 mt-2">
Pagination size: {{ $t('modals.settings.pageVueTorrent.pageGeneral.paginationSize') }}
</p> </p>
</v-col> </v-col>
<v-col cols="4" sm="4" md="2"> <v-col cols="4" sm="4" md="2">
@ -141,7 +140,7 @@
<v-row dense> <v-row dense>
<v-col cols="8" sm="8" md="10"> <v-col cols="8" sm="8" md="10">
<p class="subtitle-1 mt-2"> <p class="subtitle-1 mt-2">
VueTorrent title: {{ $t('modals.settings.pageVueTorrent.pageGeneral.vueTorrentTitle') }}
</p> </p>
</v-col> </v-col>
<v-col cols="4" sm="4" md="2"> <v-col cols="4" sm="4" md="2">
@ -162,7 +161,7 @@
<v-row dense> <v-row dense>
<v-col cols="10" sm="10" md="11"> <v-col cols="10" sm="10" md="11">
<p class="subtitle-1"> <p class="subtitle-1">
Current Version: {{ $t('modals.settings.pageVueTorrent.pageGeneral.currentVersion') }}
</p> </p>
</v-col> </v-col>
<v-col cols="2" sm="2" md="1"> <v-col cols="2" sm="2" md="1">
@ -176,7 +175,7 @@
<v-row dense> <v-row dense>
<v-col cols="10" sm="10" md="11"> <v-col cols="10" sm="10" md="11">
<p class="subtitle-1"> <p class="subtitle-1">
QBittorrent Version: {{ $t('modals.settings.pageVueTorrent.pageGeneral.qbittorrentVersion') }}
</p> </p>
</v-col> </v-col>
<v-col cols="2" sm="2" md="1"> <v-col cols="2" sm="2" md="1">

View file

@ -5,7 +5,7 @@
v-model="settings.alternative_webui_enabled" v-model="settings.alternative_webui_enabled"
hide-details hide-details
class="ma-0 pa-0" class="ma-0 pa-0"
label="Use Alternative WebUI" :label="$t('modals.settings.pageWebUI.useAlternativeWebUI')"
/> />
</v-list-item> </v-list-item>
<v-list-item> <v-list-item>
@ -15,12 +15,12 @@
outlined outlined
dense dense
hide-details hide-details
label="Files location" :label="$t('modals.settings.pageWebUI.filesLocation')"
:disabled="!settings.alternative_webui_enabled" :disabled="!settings.alternative_webui_enabled"
/> />
</v-list-item> </v-list-item>
<v-divider insert /> <v-divider insert />
<v-subheader>Web User Interface (Remote Control)</v-subheader> <v-subheader>{{ $t('modals.settings.pageWebUI.webUserInterface') }}</v-subheader>
<v-list-item> <v-list-item>
<v-row class="ml-5 mr-5 pb-4"> <v-row class="ml-5 mr-5 pb-4">
<v-col cols="9" class="pa-0"> <v-col cols="9" class="pa-0">
@ -30,7 +30,7 @@
outlined outlined
dense dense
hide-details="true" hide-details="true"
label="IP Address:" :label="$t('modals.settings.pageWebUI.ipAddress')"
/> />
</v-col> </v-col>
<v-col cols="3" class="pa-0"> <v-col cols="3" class="pa-0">
@ -41,13 +41,13 @@
dense dense
type="number" type="number"
hide-details="true" hide-details="true"
label="Port" :label="$t('modals.settings.pageWebUI.port')"
/> />
</v-col> </v-col>
</v-row> </v-row>
</v-list-item> </v-list-item>
<v-divider insert /> <v-divider insert />
<v-subheader>Authentication</v-subheader> <v-subheader>{{ $t('modals.settings.pageWebUI.authentication') }}</v-subheader>
<v-list-item> <v-list-item>
<v-row class="ml-5 mr-5 pb-4"> <v-row class="ml-5 mr-5 pb-4">
<v-col cols="6" class="pa-0"> <v-col cols="6" class="pa-0">
@ -57,7 +57,7 @@
outlined outlined
dense dense
hide-details="true" hide-details="true"
label="Username" :label="$t('modals.settings.pageWebUI.username')"
/> />
</v-col> </v-col>
<v-col cols="6" class="pa-0"> <v-col cols="6" class="pa-0">
@ -67,7 +67,7 @@
outlined outlined
dense dense
hide-details="true" hide-details="true"
label="password" :label="$t('modals.settings.pageWebUI.password')"
/> />
</v-col> </v-col>
</v-row> </v-row>
@ -82,7 +82,7 @@
dense dense
type="number" type="number"
hide-details="true" hide-details="true"
label="Max attempts" :label="$t('modals.settings.pageWebUI.maxAttempts')"
/> />
</v-col> </v-col>
<v-col cols="6" class="pa-0"> <v-col cols="6" class="pa-0">
@ -93,7 +93,7 @@
dense dense
type="number" type="number"
hide-details="true" hide-details="true"
label="Ban Duration (seconds)" :label="$t('modals.settings.pageWebUI.banDuration')"
/> />
</v-col> </v-col>
</v-row> </v-row>
@ -106,7 +106,7 @@
dense dense
type="number" type="number"
hide-details="true" hide-details="true"
label="Session timeout (seconds)" :label="$t('modals.settings.pageWebUI.sessionTimeout')"
/> />
</v-list-item> </v-list-item>
<v-list-item class="ml-4"> <v-list-item class="ml-4">
@ -114,7 +114,7 @@
v-model="settings.bypass_local_auth" v-model="settings.bypass_local_auth"
hide-details hide-details
class="ma-0 pa-0" class="ma-0 pa-0"
label="Bypass authentication for clients on localhost" :label="$t('modals.settings.pageWebUI.bypassAuthenticationForClientsOnLocalhost')"
/> />
</v-list-item> </v-list-item>
<v-list-item class="ml-4"> <v-list-item class="ml-4">
@ -122,7 +122,7 @@
v-model="settings.bypass_auth_subnet_whitelist_enabled" v-model="settings.bypass_auth_subnet_whitelist_enabled"
hide-details hide-details
class="ma-0 pa-0" class="ma-0 pa-0"
label="Bypass authentication for clients in whitelisted IP subnets" :label="$t('modals.settings.pageWebUI.bypassAuthenticationForClientsInWhitelisted')"
/> />
</v-list-item> </v-list-item>
<v-list-item class="ml-4"> <v-list-item class="ml-4">

View file

@ -9,7 +9,7 @@
class="v-input--reverse pa-0 ma-0" class="v-input--reverse pa-0 ma-0"
hide-details hide-details
inset inset
label="Use global limit" :label="$t('modals.shareLimit.input.globalLimit')"
@change="disableUnlimited" @change="disableUnlimited"
/> />
</v-col> </v-col>
@ -23,7 +23,7 @@
class="v-input--reverse pa-0 ma-0" class="v-input--reverse pa-0 ma-0"
hide-details hide-details
inset inset
label="Unlimited" :label="$t('modals.shareLimit.input.unlimited')"
@change="disabledGlobal" @change="disabledGlobal"
/> />
</v-col> </v-col>

View file

@ -9,14 +9,18 @@
<v-card class="px-2"> <v-card class="px-2">
<v-card-title class="pa-0"> <v-card-title class="pa-0">
<v-toolbar-title class="ma-4 primarytext--text"> <v-toolbar-title class="ma-4 primarytext--text">
<h3>Limit Ratio</h3> <h3>{{ $t('modals.shareLimit.limitRatio') }}</h3>
</v-toolbar-title> </v-toolbar-title>
</v-card-title> </v-card-title>
<v-card-text class="px-4 py-2"> <v-card-text class="px-4 py-2">
<ShareLimitInput ref="ratio" title="Ratio" :initial-limit="torrent.ratio_limit" /> <ShareLimitInput
ref="ratio"
:title="$t('modals.shareLimit.titleRatio')"
:initial-limit="torrent.ratio_limit"
/>
<ShareLimitInput <ShareLimitInput
ref="time" ref="time"
title="Duration" :title="$t('modals.shareLimit.titleDuration')"
:initial-limit="torrent.ratio_time_limit" :initial-limit="torrent.ratio_time_limit"
class="mt-2" class="mt-2"
/> />
@ -24,10 +28,10 @@
<v-divider /> <v-divider />
<v-card-actions class="justify-end"> <v-card-actions class="justify-end">
<v-btn class="accent white--text elevation-0 px-4" @click="save"> <v-btn class="accent white--text elevation-0 px-4" @click="save">
Save {{ $t('save') }}
</v-btn> </v-btn>
<v-btn class="error white--text elevation-0 px-4" @click="close"> <v-btn class="error white--text elevation-0 px-4" @click="close">
Cancel {{ $t('cancel') }}
</v-btn> </v-btn>
</v-card-actions> </v-card-actions>
</v-card> </v-card>

View file

@ -7,7 +7,7 @@
> >
<v-card> <v-card>
<v-card-title class="justify-center primarytext--text"> <v-card-title class="justify-center primarytext--text">
<h2>Sort Torrents</h2> <h2>{{ $t('modals.sort.title') }}</h2>
</v-card-title> </v-card-title>
<v-card-text> <v-card-text>
<v-form class="px-6 mt-3 justify-center mx-auto"> <v-form class="px-6 mt-3 justify-center mx-auto">
@ -32,7 +32,7 @@
style="padding-left: 10px !important" style="padding-left: 10px !important"
> >
<template #label> <template #label>
Reverse {{ $t('modals.sort.reverse') }}
</template> </template>
</v-switch> </v-switch>
</v-container> </v-container>
@ -51,30 +51,32 @@ export default {
data() { data() {
return { return {
sortProperty: { value: 'added_on', name: 'Added On' }, sortProperty: { value: 'added_on', name: 'Added On' },
reverse: true, reverse: true
options: [
{ value: 'added_on', name: 'Added On' },
{ value: 'availability', name: 'Availability' },
{ value: 'category', name: 'Category' },
{ value: 'completed', name: 'Completed' },
{ value: 'dlspeed', name: 'Download Speed' },
{ value: 'downloaded', name: 'Downloaded' },
{ value: 'eta', name: 'ETA' },
{ value: 'name', name: 'Name' },
{ value: 'num_leechs', name: 'Peers' },
{ value: 'priority', name: 'Priority' },
{ value: 'progress', name: 'Progress' },
{ value: 'ratio', name: 'Ratio' },
{ value: 'size', name: 'Size' },
{ value: 'state', name: 'State' },
{ value: 'time_active', name: 'Time Active' },
{ value: 'uploaded', name: 'Uploaded' },
{ value: 'upspeed', name: 'Upload Speed' }
]
} }
}, },
computed: { computed: {
...mapState(['sort_options']) ...mapState(['sort_options']),
options() {
return [
{ value: 'added_on', name: this.$i18n.t('modals.sort.sortBy.addedOn') },
{ value: 'availability', name: this.$i18n.t('modals.sort.sortBy.availability') },
{ value: 'category', name: this.$i18n.t('modals.sort.sortBy.category') },
{ value: 'completed', name: this.$i18n.t('modals.sort.sortBy.completed') },
{ value: 'dlspeed', name: this.$i18n.t('modals.sort.sortBy.downloadSpeed') },
{ value: 'downloaded', name: this.$i18n.t('modals.sort.sortBy.downloaded') },
{ value: 'eta', name: this.$i18n.t('modals.sort.sortBy.ETA') },
{ value: 'name', name: this.$i18n.t('modals.sort.sortBy.name') },
{ value: 'num_leechs', name: this.$i18n.t('modals.sort.sortBy.peers') },
{ value: 'priority', name: this.$i18n.t('modals.sort.sortBy.priority') },
{ value: 'progress', name: this.$i18n.t('modals.sort.sortBy.progress') },
{ value: 'ratio', name: this.$i18n.t('modals.sort.sortBy.ratio') },
{ value: 'size', name: this.$i18n.t('modals.sort.sortBy.size') },
{ value: 'state', name: this.$i18n.t('modals.sort.sortBy.state') },
{ value: 'time_active', name: this.$i18n.t('modals.sort.sortBy.timeActive') },
{ value: 'uploaded', name: this.$i18n.t('modals.sort.sortBy.uploaded') },
{ value: 'upspeed', name: this.$i18n.t('modals.sort.sortBy.uploadSpeed') }
]
}
}, },
methods: { methods: {
close() { close() {

View file

@ -20,7 +20,7 @@
v-model="limit" v-model="limit"
autofocus autofocus
clearable clearable
label="Speed Limit" label="$t('modals.speedLimit.speedLimit')"
:prepend-inner-icon="mdiSpeedometer" :prepend-inner-icon="mdiSpeedometer"
suffix="KB/s" suffix="KB/s"
@focus="$event.target.select()" @focus="$event.target.select()"

View file

@ -3,7 +3,7 @@
<v-card> <v-card>
<v-card-title class="pa-0"> <v-card-title class="pa-0">
<v-toolbar-title class="ma-4 primarytext--text"> <v-toolbar-title class="ma-4 primarytext--text">
<h3>{{ hasInitialCategory ? 'Edit' : 'Create New' }} Category</h3> <h3>{{ hasInitialCategory ? $t('edit') : $t('createNew') }} {{ $t('category') }}</h3>
</v-toolbar-title> </v-toolbar-title>
</v-card-title> </v-card-title>
<v-card-text> <v-card-text>
@ -13,7 +13,7 @@
v-model="category.name" v-model="category.name"
:rules="nameRules" :rules="nameRules"
:counter="15" :counter="15"
label="Category name" :label="$t('modals.newCategory.categoryName')"
required required
:disabled="hasInitialCategory" :disabled="hasInitialCategory"
/> />
@ -21,7 +21,7 @@
v-model="category.savePath" v-model="category.savePath"
:rules="PathRules" :rules="PathRules"
:counter="40" :counter="40"
label="Path" :label="$t('path')"
required required
/> />
</v-container> </v-container>
@ -34,20 +34,20 @@
class="accent white--text elevation-0 px-4" class="accent white--text elevation-0 px-4"
@click="create" @click="create"
> >
Create {{ $t('create') }}
</v-btn> </v-btn>
<v-btn <v-btn
v-else v-else
class="accent white--text elevation-0 px-4" class="accent white--text elevation-0 px-4"
@click="edit" @click="edit"
> >
Edit {{ $t('edit') }}
</v-btn> </v-btn>
<v-btn <v-btn
class="error white--text elevation-0 px-4" class="error white--text elevation-0 px-4"
@click="cancel" @click="cancel"
> >
Cancel {{ $t('cancel') }}
</v-btn> </v-btn>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
@ -69,14 +69,14 @@ export default {
}, },
data: () => ({ data: () => ({
nameRules: [ nameRules: [
v => !!v || 'Category name is required', v => !!v || this.$i18n.t('modals.newCategory.tipOnNoName'),
v => v =>
(v && v.length <= 15) || (v && v.length <= 15) ||
'Category name must be less than 15 characters' this.$i18n.t('modals.newCategory.tipOnNameTooLong')
], ],
PathRules: [ PathRules: [
v => !!v || 'Path is required', v => !!v || this.$i18n.t('modals.newCategory.tipOnNoPath'),
v => (v && v.length <= 40) || 'Path must be less than 40 characters' v => (v && v.length <= 40) || this.$i18n.t('modals.newCategory.TipOnPathTooLong')
], ],
category: { name: '', savePath: '' }, category: { name: '', savePath: '' },
mdiCancel, mdiTagPlus, mdiPencil mdiCancel, mdiTagPlus, mdiPencil

View file

@ -3,7 +3,7 @@
<v-card> <v-card>
<v-card-title class="pa-0"> <v-card-title class="pa-0">
<v-toolbar-title class="ma-4 primarytext--text"> <v-toolbar-title class="ma-4 primarytext--text">
<h3>Create New Tag</h3> <h3>{{ $t('modals.newTag.createNewTag') }}</h3>
</v-toolbar-title> </v-toolbar-title>
</v-card-title> </v-card-title>
<v-card-text> <v-card-text>
@ -13,7 +13,7 @@
v-model="tagname" v-model="tagname"
:rules="rules" :rules="rules"
:counter="10" :counter="10"
label="Tag name" :label="$t('modals.newTag.tagName')"
required required
/> />
</v-container> </v-container>
@ -25,13 +25,13 @@
class="accent white--text elevation-0 px-4" class="accent white--text elevation-0 px-4"
@click="create" @click="create"
> >
Create {{ $t('create') }}
</v-btn> </v-btn>
<v-btn <v-btn
class="error white--text elevation-0 px-4" class="error white--text elevation-0 px-4"
@click="cancel" @click="cancel"
> >
Cancel {{ $t('cancel') }}
</v-btn> </v-btn>
</v-card-actions> </v-card-actions>
</v-card> </v-card>

View file

@ -4,7 +4,7 @@
<tbody> <tbody>
<tr> <tr>
<td :class="commonStyle"> <td :class="commonStyle">
Torrent title {{ $t('modals.detail.pageInfo.torrentTitle') }}
</td> </td>
<td> <td>
{{ torrent.name }} {{ torrent.name }}
@ -20,7 +20,7 @@
</tr> </tr>
<tr style="margin-top: 10px !important"> <tr style="margin-top: 10px !important">
<td :class="commonStyle"> <td :class="commonStyle">
hash {{ $t('modals.detail.pageInfo.hash') }}
</td> </td>
<td> <td>
{{ torrent.hash }} {{ torrent.hash }}
@ -55,7 +55,7 @@
</tr> </tr>
<tr> <tr>
<td :class="commonStyle"> <td :class="commonStyle">
Ratio {{ $t('modals.detail.pageInfo.ratio') }}
</td> </td>
<td> <td>
{{ torrent.ratio }} {{ torrent.ratio }}
@ -63,7 +63,7 @@
</tr> </tr>
<tr> <tr>
<td :class="commonStyle"> <td :class="commonStyle">
DL Speed {{ $t('modals.detail.pageInfo.downloadSpeed') }}
</td> </td>
<td> <td>
{{ torrent.dlspeed | getDataValue }} {{ torrent.dlspeed | getDataValue }}
@ -72,7 +72,7 @@
</tr> </tr>
<tr> <tr>
<td :class="commonStyle"> <td :class="commonStyle">
UP Speed {{ $t('modals.detail.pageInfo.uploadSpeed') }}
</td> </td>
<td> <td>
{{ torrent.upspeed | getDataValue }} {{ torrent.upspeed | getDataValue }}
@ -81,7 +81,7 @@
</tr> </tr>
<tr> <tr>
<td :class="commonStyle"> <td :class="commonStyle">
ETA {{ $t('modals.detail.pageInfo.eta') }}
</td> </td>
<td> <td>
{{ torrent.eta }} {{ torrent.eta }}
@ -89,7 +89,7 @@
</tr> </tr>
<tr> <tr>
<td :class="commonStyle"> <td :class="commonStyle">
Peers {{ $t('modals.detail.pageInfo.peers') }}
</td> </td>
<td> <td>
{{ torrent.num_leechs {{ torrent.num_leechs
@ -98,7 +98,7 @@
</tr> </tr>
<tr> <tr>
<td :class="commonStyle"> <td :class="commonStyle">
Seeds {{ $t('modals.detail.pageInfo.seeds') }}
</td> </td>
<td> <td>
{{ torrent.num_seeds {{ torrent.num_seeds
@ -115,7 +115,7 @@
</tr> </tr>
<tr> <tr>
<td :class="commonStyle"> <td :class="commonStyle">
Status {{ $t('modals.detail.pageInfo.status') }}
</td> </td>
<td> <td>
<v-chip <v-chip
@ -128,7 +128,7 @@
</tr> </tr>
<tr v-if="torrent.tracker"> <tr v-if="torrent.tracker">
<td :class="commonStyle"> <td :class="commonStyle">
Trackers {{ $t('modals.detail.pageInfo.trackers') }}
</td> </td>
<td> <td>
{{ torrent.tracker }} {{ torrent.tracker }}
@ -136,7 +136,7 @@
</tr> </tr>
<tr v-if="createdBy"> <tr v-if="createdBy">
<td :class="commonStyle"> <td :class="commonStyle">
Created By {{ $t('modals.detail.pageInfo.createdBy') }}
</td> </td>
<td> <td>
{{ createdBy }} {{ createdBy }}
@ -153,7 +153,7 @@
<tr> <tr>
<td :class="commonStyle"> <td :class="commonStyle">
First/Last Piece Priority {{ $t('modals.detail.pageInfo.firstLastPiecePriority') }}
</td> </td>
<td> <td>
{{ torrent.f_l_piece_prio }} {{ torrent.f_l_piece_prio }}
@ -161,7 +161,7 @@
</tr> </tr>
<tr> <tr>
<td :class="commonStyle"> <td :class="commonStyle">
Sequential Download {{ $t('modals.detail.pageInfo.sequentialDownload') }}
</td> </td>
<td> <td>
{{ torrent.seq_dl }} {{ torrent.seq_dl }}
@ -169,7 +169,7 @@
</tr> </tr>
<tr> <tr>
<td :class="commonStyle"> <td :class="commonStyle">
Auto TMM {{ $t('modals.detail.pageInfo.autoTMM') }}
</td> </td>
<td> <td>
{{ torrent.auto_tmm }} {{ torrent.auto_tmm }}
@ -177,7 +177,7 @@
</tr> </tr>
<tr> <tr>
<td :class="commonStyle"> <td :class="commonStyle">
Share Ratio Limit {{ $t('modals.detail.pageInfo.shareRatioLimit') }}
</td> </td>
<td> <td>
{{ torrent.ratio_limit | limitToValue }} {{ torrent.ratio_limit | limitToValue }}
@ -185,7 +185,7 @@
</tr> </tr>
<tr> <tr>
<td :class="commonStyle"> <td :class="commonStyle">
Share Time Limit (minutes) {{ $t('modals.detail.pageInfo.shareTimeLimit') }}
</td> </td>
<td> <td>
{{ torrent.ratio_time_limit | limitToValue }} {{ torrent.ratio_time_limit | limitToValue }}
@ -193,7 +193,7 @@
</tr> </tr>
<tr> <tr>
<td :class="commonStyle"> <td :class="commonStyle">
Download Limit {{ $t('modals.detail.pageInfo.downloadLimit') }}
</td> </td>
<td v-if="torrent.dl_limit > 0"> <td v-if="torrent.dl_limit > 0">
{{ torrent.dl_limit | getDataValue }} {{ torrent.dl_limit | getDataUnit }}<span>/s </span> {{ torrent.dl_limit | getDataValue }} {{ torrent.dl_limit | getDataUnit }}<span>/s </span>
@ -204,7 +204,7 @@
</tr> </tr>
<tr> <tr>
<td :class="commonStyle"> <td :class="commonStyle">
Upload Limit {{ $t('modals.detail.pageInfo.uploadLimit') }}
</td> </td>
<td v-if="torrent.up_limit > 0"> <td v-if="torrent.up_limit > 0">
{{ torrent.up_limit | getDataValue }} {{ torrent.up_limit | getDataUnit }}<span>/s </span> {{ torrent.up_limit | getDataValue }} {{ torrent.up_limit | getDataUnit }}<span>/s </span>

View file

@ -58,19 +58,6 @@ export default {
props: { hash: String, isActive: Boolean }, props: { hash: String, isActive: Boolean },
data: () => ({ data: () => ({
refreshTimer: '', refreshTimer: '',
headers: [
{ text: 'IP', value: 'ip' },
{ text: 'Connection', value: 'connection' },
{ text: 'Flags', value: 'flags' },
{ text: 'Client', value: 'client' },
{ text: 'Progress', value: 'progress' },
{ text: 'DL Speed', value: 'dl_speed' },
{ text: 'Downloaded', value: 'downloaded' },
{ text: 'UP Speed', value: 'up_speed' },
{ text: 'Uploaded', value: 'uploaded' },
{ text: 'Relevance', value: 'relevance' },
{ text: 'Files', value: 'files' }
],
peersObj: null peersObj: null
}), }),
computed: { computed: {
@ -84,6 +71,21 @@ export default {
}, },
peers() { peers() {
return map(this.peersObj, (value, key) => merge({}, value, { key })) return map(this.peersObj, (value, key) => merge({}, value, { key }))
},
headers() {
return [
{ text: this.$i18n.t('modals.detail.pagePeers.ip'), value: 'ip' },
{ text: this.$i18n.t('modals.detail.pagePeers.connection'), value: 'connection' },
{ text: this.$i18n.t('modals.detail.pagePeers.flags'), value: 'flags' },
{ text: this.$i18n.t('modals.detail.pagePeers.client'), value: 'client' },
{ text: this.$i18n.t('modals.detail.pagePeers.progress'), value: 'progress' },
{ text: this.$i18n.t('modals.detail.pagePeers.downloadSpeed'), value: 'dl_speed' },
{ text: this.$i18n.t('modals.detail.pagePeers.downloaded'), value: 'downloaded' },
{ text: this.$i18n.t('modals.detail.pagePeers.upSpeed'), value: 'up_speed' },
{ text: this.$i18n.t('modals.detail.pagePeers.uploaded'), value: 'uploaded' },
{ text: this.$i18n.t('modals.detail.pagePeers.relevance'), value: 'relevance' },
{ text: this.$i18n.t('modals.detail.pagePeers.files'), value: 'files' }
]
} }
}, },
watch: { watch: {

View file

@ -2,7 +2,7 @@
<v-card flat> <v-card flat>
<v-row dense class="ma-0 pa-0"> <v-row dense class="ma-0 pa-0">
<v-col cols="12" md="6"> <v-col cols="12" md="6">
<v-subheader>Available Tags:</v-subheader> <v-subheader>{{ $t('modals.detail.pageTagsAndCategories.subHeaderTag') }}</v-subheader>
<v-list-item-group <v-list-item-group
:value="activeTags" :value="activeTags"
active-class="accent--text" active-class="accent--text"
@ -23,7 +23,7 @@
</v-col> </v-col>
<v-col cols="12" md="6"> <v-col cols="12" md="6">
<v-subheader>Available Categories:</v-subheader> <v-subheader>{{ $t('modals.detail.pageTagsAndCategories.subHeaderCategories') }}</v-subheader>
<v-list-item-group <v-list-item-group
:value="activeCategory" :value="activeCategory"
active-class="accent--text" active-class="accent--text"

View file

@ -120,16 +120,6 @@ export default {
props: { hash: String, isActive: Boolean }, props: { hash: String, isActive: Boolean },
data: () => ({ data: () => ({
trackerDialog: false, trackerDialog: false,
headers: [
{ text: '#', value: 'tier' },
{ text: 'URL', value: 'url' },
{ text: 'Status', value: 'status' },
{ text: 'Peers', value: 'num_peers' },
{ text: 'Seeds', value: 'num_seeds' },
{ text: 'Leeches', value: 'num_leeches' },
{ text: 'Downloaded', value: 'num_downloaded' },
{ text: 'Message', value: 'msg' }
],
tempTrackers: [], tempTrackers: [],
newTrackers: '', newTrackers: '',
selectedTrackers: [] selectedTrackers: []
@ -137,6 +127,18 @@ export default {
computed: { computed: {
trackers() { trackers() {
return this.tempTrackers.map(x => ({ ...x, isSelectable: typeof x.tier === 'number' })) return this.tempTrackers.map(x => ({ ...x, isSelectable: typeof x.tier === 'number' }))
},
headers() {
return [
{ text: '#', value: 'tier' },
{ text: this.$i18n.t('modals.detail.pageTrackers.url'), value: 'url' },
{ text: this.$i18n.t('modals.detail.pageTrackers.status'), value: 'status' },
{ text: this.$i18n.t('modals.detail.pageTrackers.peers'), value: 'num_peers' },
{ text: this.$i18n.t('modals.detail.pageTrackers.seeds'), value: 'num_seeds' },
{ text: this.$i18n.t('modals.detail.pageTrackers.leeches'), value: 'num_leeches' },
{ text: this.$i18n.t('modals.detail.pageTrackers.downloaded'), value: 'num_downloaded' },
{ text: this.$i18n.t('modals.detail.pageTrackers.message'), value: 'msg' }
]
} }
}, },
watch: { watch: {

View file

@ -13,7 +13,7 @@
<v-card-title class="primary pa-0" @dblclick="hndlFullscreen = !hndlFullscreen"> <v-card-title class="primary pa-0" @dblclick="hndlFullscreen = !hndlFullscreen">
<v-toolbar flat dense class="primary white--text"> <v-toolbar flat dense class="primary white--text">
<v-toolbar-title class="mt-auto"> <v-toolbar-title class="mt-auto">
<h3>Torrent Detail</h3> <h3>{{ $t('modals.detail.title') }}</h3>
</v-toolbar-title> </v-toolbar-title>
<v-spacer /> <v-spacer />
<v-btn <v-btn
@ -37,19 +37,19 @@
<v-tabs v-model="tab" align-with-title show-arrows> <v-tabs v-model="tab" align-with-title show-arrows>
<v-tabs-slider color="white" /> <v-tabs-slider color="white" />
<v-tab class="white--text" href="#info"> <v-tab class="white--text" href="#info">
<h4>Info</h4> <h4>{{ $t('modals.detail.tabTitleInfo') }}</h4>
</v-tab> </v-tab>
<v-tab class="white--text" href="#trackers"> <v-tab class="white--text" href="#trackers">
<h4>Trackers</h4> <h4>{{ $t('modals.detail.tabTitleTrackers') }}</h4>
</v-tab> </v-tab>
<v-tab class="white--text" href="#peers"> <v-tab class="white--text" href="#peers">
<h4>Peers</h4> <h4>{{ $t('modals.detail.tabTitlePeers') }}</h4>
</v-tab> </v-tab>
<v-tab class="white--text" href="#content"> <v-tab class="white--text" href="#content">
<h4>Content</h4> <h4>{{ $t('modals.detail.tabTitleContent') }}</h4>
</v-tab> </v-tab>
<v-tab class="white--text" href="#tagsAndCategories"> <v-tab class="white--text" href="#tagsAndCategories">
<h4>Tags & Categories</h4> <h4>{{ $t('modals.detail.tabTitleTagsCategories') }}</h4>
</v-tab> </v-tab>
</v-tabs> </v-tabs>
</template> </template>

View file

@ -8,7 +8,7 @@
</div> </div>
</template> </template>
<span>{{ status || 'unknown' }}</span> <span>{{ status || $t('unknown') }}</span>
</v-tooltip> </v-tooltip>
</template> </template>

View file

@ -1,14 +1,14 @@
<template> <template>
<div class="mt-1"> <div class="mt-1">
<label class="white--text text-uppercase font-weight-medium caption ml-4"> <label class="white--text text-uppercase font-weight-medium caption ml-4">
Status {{ $t('status') }}
</label> </label>
<v-select <v-select
name="state_filter" name="state_filter"
aria-label="state_filter" aria-label="state_filter"
:value="selectedState" :value="selectedState"
class="ml-2 mr-2" class="ml-2 mr-2"
label="STATUS" :label="$t('status')"
flat flat
solo solo
:items="options" :items="options"
@ -27,7 +27,7 @@
flat flat
solo solo
class="ml-2 mr-2" class="ml-2 mr-2"
label="CATEGORIES" :label="$t('category')"
:items="availableCategories" :items="availableCategories"
item-text="name" item-text="name"
color="download" color="download"
@ -63,20 +63,6 @@ export default {
name: 'FilterSelect', name: 'FilterSelect',
props: ['showTrackerFilter'], props: ['showTrackerFilter'],
data: () => ({ data: () => ({
options: [
{ value: null, name: 'All' },
{ value: 'downloading', name: 'Downloading' },
{ value: 'seeding', name: 'Seeding' },
{ value: 'completed', name: 'Completed' },
{ value: 'resumed', name: 'Resumed' },
{ value: 'paused', name: 'Paused' },
{ value: 'active', name: 'Active' },
{ value: 'inactive', name: 'Inactive' },
{ value: 'stalled', name: 'Stalled' },
{ value: 'stalled_uploading', name: 'Stalled Uploading' },
{ value: 'stalled_downloading', name: 'Stalled Downloading' },
{ value: 'errored', name: 'Errored' }
],
selectedState: null, selectedState: null,
selectedCategory: null, selectedCategory: null,
selectedTracker: null selectedTracker: null
@ -84,6 +70,22 @@ export default {
computed: { computed: {
...mapGetters(['getCategories', 'getTrackers']), ...mapGetters(['getCategories', 'getTrackers']),
...mapState(['sort_options']), ...mapState(['sort_options']),
options() {
return [
{ value: null, name: this.$i18n.t('all') },
{ value: 'downloading', name: this.$i18n.t('downloading') },
{ value: 'seeding', name: this.$i18n.t('seeding') },
{ value: 'completed', name: this.$i18n.t('completed') },
{ value: 'resumed', name: this.$i18n.t('resumed') },
{ value: 'paused', name: this.$i18n.t('paused') },
{ value: 'active', name: this.$i18n.t('active') },
{ value: 'inactive', name: this.$i18n.t('inactive') },
{ value: 'stalled', name: this.$i18n.t('stalled') },
{ value: 'stalled_uploading', name: this.$i18n.t('navbar.filters.stalled_uploading') },
{ value: 'stalled_downloading', name: this.$i18n.t('navbar.filters.stalled_downloading') },
{ value: 'errored', name: this.$i18n.t('errored') }
]
},
availableCategories() { availableCategories() {
const categories = [ const categories = [
{ name: 'All', value: null }, { name: 'All', value: null },

View file

@ -15,7 +15,7 @@
</v-icon> </v-icon>
</v-btn> </v-btn>
</template> </template>
<span>Log Out</span> <span>{{ $t('logout') }}</span>
</v-tooltip> </v-tooltip>
</v-col> </v-col>
<v-col> <v-col>
@ -33,7 +33,7 @@
</v-icon> </v-icon>
</v-btn> </v-btn>
</template> </template>
<span>Alt speeds</span> <span>{{ $t('navbar.action.altSpeed') }}</span>
</v-tooltip> </v-tooltip>
</v-col> </v-col>
<v-col> <v-col>
@ -95,7 +95,7 @@ export default {
return this.getWebuiSettings() return this.getWebuiSettings()
}, },
theme() { theme() {
return this.getTheme() ? 'Dark' : 'Light' return this.getTheme() ? this.$i18n.t('navbar.action.dark') : this.$i18n.t('navbar.action.light')
}, },
alarm() { alarm() {
return this.getAlarm() return this.getAlarm()

View file

@ -18,11 +18,11 @@
</v-tooltip> </v-tooltip>
<StorageCard <StorageCard
class="mb-4 mt-4" class="mb-4 mt-4"
label="Downloaded" :label="$t('downloaded')"
color="download" color="download"
:value="getDownload" :value="getDownload"
/> />
<StorageCard label="Uploaded" color="upload" :value="getUpload" /> <StorageCard :label="$t('uploaded')" color="upload" :value="getUpload" />
</div> </div>
</template> </template>

View file

@ -6,7 +6,7 @@
md1 md1
> >
<div class="caption grey--text"> <div class="caption grey--text">
Category {{ $t('category') }}
</div> </div>
<v-chip small class="upload white--text caption"> <v-chip small class="upload white--text caption">
{{ torrent.category }} {{ torrent.category }}

View file

@ -1,7 +1,7 @@
<template> <template>
<v-flex xs6 sm1 md1> <v-flex xs6 sm1 md1>
<div class="caption grey--text"> <div class="caption grey--text">
Download {{ $t('download') }}
</div> </div>
<div> <div>
{{ torrent.dlspeed | getDataValue(1) }} {{ torrent.dlspeed | getDataValue(1) }}

View file

@ -1,7 +1,7 @@
<template> <template>
<v-flex xs6 sm1 md1> <v-flex xs6 sm1 md1>
<div class="caption grey--text"> <div class="caption grey--text">
Downloaded {{ $t('downloaded') }}
</div> </div>
<div> <div>
{{ torrent.dloaded | getDataValue(2) }} {{ torrent.dloaded | getDataValue(2) }}

View file

@ -1,7 +1,7 @@
<template> <template>
<v-flex xs6 sm1 md1> <v-flex xs6 sm1 md1>
<div class="caption grey--text"> <div class="caption grey--text">
ETA {{ $t('ETA') }}
</div> </div>
<div> <div>
{{ torrent.eta }} {{ torrent.eta }}

View file

@ -1,7 +1,7 @@
<template> <template>
<v-flex xs6 sm1 md1> <v-flex xs6 sm1 md1>
<div class="caption grey--text"> <div class="caption grey--text">
Peers {{ $t('peers') }}
</div> </div>
<div> <div>
{{ torrent.num_leechs }} {{ torrent.num_leechs }}

View file

@ -1,7 +1,7 @@
<template> <template>
<v-flex xs6 sm1 md1> <v-flex xs6 sm1 md1>
<div class="caption grey--text"> <div class="caption grey--text">
Ratio {{ $t('ratio') }}
</div> </div>
<div>{{ torrent.ratio }}</div> <div>{{ torrent.ratio }}</div>
</v-flex> </v-flex>

View file

@ -1,7 +1,7 @@
<template> <template>
<v-flex xs6 sm1 md1> <v-flex xs6 sm1 md1>
<div class="caption grey--text"> <div class="caption grey--text">
Seeds {{ $t('seeds') }}
</div> </div>
<div> <div>
{{ torrent.num_seeds }} {{ torrent.num_seeds }}

View file

@ -6,7 +6,7 @@
class="mr-4" class="mr-4"
> >
<div class="caption grey--text"> <div class="caption grey--text">
Status {{ $t('status') }}
</div> </div>
<v-chip <v-chip
small small

View file

@ -1,7 +1,7 @@
<template> <template>
<v-flex v-if="torrent.tags && torrent.tags.length" xs6 sm2> <v-flex v-if="torrent.tags && torrent.tags.length" xs6 sm2>
<div class="caption grey--text"> <div class="caption grey--text">
Tags {{ $t('tags') }}
</div> </div>
<v-row wrap class="ma-0"> <v-row wrap class="ma-0">
<v-chip <v-chip

View file

@ -1,7 +1,7 @@
<template> <template>
<v-flex xs6 sm1 md1> <v-flex xs6 sm1 md1>
<div class="caption grey--text"> <div class="caption grey--text">
Upload {{ $t('upload') }}
</div> </div>
<div> <div>
{{ torrent.upspeed | getDataValue(1) }} {{ torrent.upspeed | getDataValue(1) }}

View file

@ -1,7 +1,7 @@
<template> <template>
<v-flex xs6 sm1 md1> <v-flex xs6 sm1 md1>
<div class="caption grey--text"> <div class="caption grey--text">
Uploaded {{ $t('uploaded') }}
</div> </div>
<div> <div>
{{ torrent.uploaded | getDataValue }} {{ torrent.uploaded | getDataValue }}

View file

@ -2,6 +2,7 @@
<v-flex xs6 sm2 md2> <v-flex xs6 sm2 md2>
<div class="caption grey--text"> <div class="caption grey--text">
Uploaded Session Uploaded Session
{{ $t('torrent.uploadedSession') }}
</div> </div>
<div> <div>
{{ torrent.uploaded_session | getDataValue }} {{ torrent.uploaded_session | getDataValue }}

View file

@ -6,7 +6,7 @@
> >
<v-flex xs12> <v-flex xs12>
<div class="caption grey--text"> <div class="caption grey--text">
Torrent title {{ $t('torrent.torrentTitle') }}
</div> </div>
<div class="truncate mr-4"> <div class="truncate mr-4">
{{ torrent.name }} {{ torrent.name }}

View file

@ -87,7 +87,7 @@
class="ml-2" class="ml-2"
style="font-size: 1em" style="font-size: 1em"
> >
Force recheck {{ $t('rightClick.advanced.forceRecheck') | titleCase }}
</v-list-item-title> </v-list-item-title>
</v-list-item> </v-list-item>
<v-list-item link @click="reannounce"> <v-list-item link @click="reannounce">
@ -96,7 +96,7 @@
class="ml-2" class="ml-2"
style="font-size: 1em" style="font-size: 1em"
> >
Force reannounce {{ $t('rightClick.advanced.forceReannounce') | titleCase }}
</v-list-item-title> </v-list-item-title>
</v-list-item> </v-list-item>
<v-list-item v-if="!multiple" link @click="toggleSeq"> <v-list-item v-if="!multiple" link @click="toggleSeq">
@ -105,7 +105,7 @@
class="ml-2" class="ml-2"
style="font-size: 1em" style="font-size: 1em"
> >
Sequential Download {{ $t('rightClick.advanced.sequentialDownload') | titleCase }}
</v-list-item-title> </v-list-item-title>
</v-list-item> </v-list-item>
<v-list-item v-if="!multiple" link @click="toggleFL"> <v-list-item v-if="!multiple" link @click="toggleFL">
@ -114,7 +114,7 @@
class="ml-2" class="ml-2"
style="font-size: 1em" style="font-size: 1em"
> >
First/Last priority {{ $t('rightClick.advanced.firstLastPriority') | titleCase }}
</v-list-item-title> </v-list-item-title>
</v-list-item> </v-list-item>
<v-list-item v-if="!multiple" link @click="toggleAutoTMM"> <v-list-item v-if="!multiple" link @click="toggleAutoTMM">
@ -123,7 +123,7 @@
class="ml-2" class="ml-2"
style="font-size: 1em" style="font-size: 1em"
> >
Auto TMM {{ $t('rightClick.advanced.automaticTorrentManagement') | titleCase }}
</v-list-item-title> </v-list-item-title>
</v-list-item> </v-list-item>
</v-list> </v-list>
@ -223,19 +223,19 @@
<v-list-item @click="setLimit('download')"> <v-list-item @click="setLimit('download')">
<v-icon>{{ mdiChevronDown }}</v-icon> <v-icon>{{ mdiChevronDown }}</v-icon>
<v-list-item-title class="ml-2"> <v-list-item-title class="ml-2">
Download {{ $t('download') }}
</v-list-item-title> </v-list-item-title>
</v-list-item> </v-list-item>
<v-list-item @click="setLimit('upload')"> <v-list-item @click="setLimit('upload')">
<v-icon>{{ mdiChevronUp }}</v-icon> <v-icon>{{ mdiChevronUp }}</v-icon>
<v-list-item-title class="ml-2"> <v-list-item-title class="ml-2">
Upload {{ $t('upload') }}
</v-list-item-title> </v-list-item-title>
</v-list-item> </v-list-item>
<v-list-item @click="setShareLimit()"> <v-list-item @click="setShareLimit()">
<v-icon>{{ mdiAccountGroup }}</v-icon> <v-icon>{{ mdiAccountGroup }}</v-icon>
<v-list-item-title class="ml-2"> <v-list-item-title class="ml-2">
Share {{ $t('share') }}
</v-list-item-title> </v-list-item-title>
</v-list-item> </v-list-item>
</v-list> </v-list>
@ -266,19 +266,19 @@
<v-list-item @click="copyToClipBoard(torrent.name)"> <v-list-item @click="copyToClipBoard(torrent.name)">
<v-icon>{{ mdiContentCopy }}</v-icon> <v-icon>{{ mdiContentCopy }}</v-icon>
<v-list-item-title class="ml-2"> <v-list-item-title class="ml-2">
Name {{ $t('name') }}
</v-list-item-title> </v-list-item-title>
</v-list-item> </v-list-item>
<v-list-item @click="copyToClipBoard(torrent.hash)"> <v-list-item @click="copyToClipBoard(torrent.hash)">
<v-icon>{{ mdiContentCopy }}</v-icon> <v-icon>{{ mdiContentCopy }}</v-icon>
<v-list-item-title class="ml-2"> <v-list-item-title class="ml-2">
Hash {{ $t('hash') }}
</v-list-item-title> </v-list-item-title>
</v-list-item> </v-list-item>
<v-list-item @click="copyToClipBoard(torrent.magnet)"> <v-list-item @click="copyToClipBoard(torrent.magnet)">
<v-icon>{{ mdiMagnet }}</v-icon> <v-icon>{{ mdiMagnet }}</v-icon>
<v-list-item-title class="ml-2"> <v-list-item-title class="ml-2">
Magnet {{ $t('magnet') }}
</v-list-item-title> </v-list-item-title>
</v-list-item> </v-list-item>
</v-list> </v-list>

View file

@ -7,6 +7,39 @@ const locale = {
save: 'save', save: 'save',
cancel: 'cancel', cancel: 'cancel',
confirm: 'confirm', confirm: 'confirm',
edit: 'Edit',
createNew: 'Create New',
path: 'Path',
create: 'Create',
url: 'URL',
directory: 'Directory',
unknown: 'unknown',
status: 'Status',
all: 'All',
downloading: 'downloading',
seeding: 'Seeding',
completed: 'Completed',
resumed: 'Resumed',
paused: 'Paused',
active: 'Active',
inactive: 'Inactive',
stalled: 'Stalled',
errored: 'Errored',
login: 'Login in',
logout: 'Log out',
downloaded: 'downloaded',
uploaded: 'uploaded',
upload: 'upload',
download: 'Download',
ETA: 'ETA',
peers: 'Peers',
ratio: 'Ratio',
seeds: 'Seeds',
tags: 'Tags',
share: 'Share',
name: 'Name',
hash: 'Hase',
magnet: 'Magnet',
/** Torrent */ /** Torrent */
torrent: { torrent: {
@ -19,7 +52,9 @@ const locale = {
downloaded: 'downloaded', downloaded: 'downloaded',
uploaded: 'uploaded', uploaded: 'uploaded',
created: 'created by', created: 'created by',
comments: 'comments' comments: 'comments',
uploadedSession: 'Uploaded Session',
torrentTitle: 'Torrent Title'
}, },
/** Navbar */ /** Navbar */
navbar: { navbar: {
@ -35,14 +70,269 @@ const locale = {
}, },
sessionStats: { sessionStats: {
tooltip: 'Since the last time qBittorrent was restarted' tooltip: 'Since the last time qBittorrent was restarted'
},
filters: {
stalled_uploading: 'Stalled Uploading',
stalled_downloading: 'Stalled Downloading'
},
action: {
altSpeed: 'Alt speeds',
dark: 'Dark',
light: 'Light'
} }
}, },
/** Modals */ /** Modals */
modals: { modals: {
pluginManager: {
title: 'Plugin manager'
},
search: {
title: 'Search',
btnStartSearch: 'Search',
btnStopSearch: 'Stop',
columnTitle: {
name: 'Name',
size: 'Size',
seeds: 'Seeds',
peers: 'Peers',
search_engine: 'Search_engine',
action: 'Action'
}
},
settings: {
tabName: {
VueTorrent: 'vuetorrent',
downloads: 'downloads',
connection: 'connection',
bittorrent: 'bittorrent',
webUI: 'WEB UI',
tagsAndCategories: 'tags & categories'
},
pageVueTorrent: {
tabName: {
general: 'General',
dashboard: 'Dashboard'
},
pageGeneral: {
tip: 'These settings are for the custom WebUI itself',
currentSpeed: 'Show Current Speed',
speedGraph: 'Show Speed Graph',
sessionStats: 'Show Session Stats',
allTimeStats: 'Show All-Time Stats',
freeSpace: 'Show Free Space',
trackerFilter: 'Show Tracker Filter',
rightDrawer: 'Right Drawer',
language: 'Language:',
paginationSize: 'Pagination size:',
vueTorrentTitle: 'VueTorrent title:',
currentVersion: 'Current Version:',
qbittorrentVersion: 'QBittorrent Version:'
},
pageDashboard: {
busyTorrentTip: 'Properties to display for busy torrents',
completedTorrentTip: 'Properties to display for completed torrents'
}
},
pageDownloads: {
subHeaderWhenAddTorrent: 'When adding a torrent',
whenAddTorrent: {
createSubFolder: 'Create subfolder for torrents with multiple files',
donotAutoStart: 'Do not start the download automatically'
},
subHeaderPublicSettings: 'Public Settings',
publicSettings: {
preAllocateDisk: 'Pre-allocate disk space for all files',
appendQBExtension: 'Append .!qB extension to incomplete files'
},
subHeaderSaveManagement: 'Saving Management',
saveManagement: {
autoManagement: 'Automatic Torrent Management',
relocate: 'Relocate Torrent when category changes',
defaultSavePath: 'Default Save Path',
keepIncompleteIn: 'Keep incomplete torrents in:',
autoEnabled: 'Autorun enabled:',
autorunProgram: 'Autorun program',
supportParamTitle: 'Supported parameters (case sensitive):',
supportParamN: '%N: Torrent name ',
supportParamL: '%L: Category',
supportParamG: '%G: Tags (separated by comma)',
supportParamF: '%F: Content path (same as root path for multi-file torrent)',
supportParamR: '%R: Root path (first torrent subdirectory path)',
supportParamD: '%D: Save path',
supportParamC: '%C: Number of files',
supportParamZ: '%Z: Torrent size (bytes)',
supportParamT: '%T: Current tracker',
supportParamI: '%I: Info hash'
}
},
pageConnection: {
subHeader: 'Connection Limits',
globalMaxConnection: 'Global maximum number of connections',
perTorrentMaxConnection: 'Maximum number of connections per torrent',
globalMaxUploadSlots: 'Global maximum number of upload slots',
perTorrentMaxUploadSlots: 'Maximum number of upload slots per torrent'
},
pageBittorrent: {
subHeaderPrivacy: 'Privacy',
enableDHT: 'Enable DHT (decentralized network) to find more peers',
enablePeX: 'Enable Peer Exchange (PeX) to find more peers',
enableLPD: 'Enable Local Peer Discovery to find more peers',
enableAnonymous: 'Enable anonymous mode',
torrentQueue: 'Torrent Queueing',
maxActiveDownload: 'Maximum active downloads',
maxActiveUpload: 'Maximum active uploads',
maxActiveTorrent: 'Maximum active torrents',
excludeSlowTorrent: 'Do not count slow torrents in these limits',
downloadRateLimit: 'Download rate threshold KiB/s',
uploadRateLimit: 'Upload rate threshold KiB/s',
torrentInactivityTimer: 'Torrent inactivity timer',
subHeaderSeedLimits: 'Seed Limits',
whenRatioReaches: 'When ratio reaches',
whenSeedingTimeReaches: 'When seeding time reaches'
},
pageWebUI: {
useAlternativeWebUI: 'Use Alternative WebUI',
filesLocation: 'Files location',
webUserInterface: 'Web User Interface (Remote Control)',
ipAddress: 'IP Address:',
port: 'Port',
authentication: 'Authentication',
username: 'Username',
password: 'password',
maxAttempts: 'Max attempts',
banDuration: 'Ban Duration (seconds)',
sessionTimeout: 'Session timeout (seconds)',
bypassAuthenticationForClientsOnLocalhost: 'Bypass authentication for clients on localhost',
bypassAuthenticationForClientsInWhitelisted: 'Bypass authentication for clients in whitelisted IP subnets',
whiteListExample: 'Example: 172.17.32.0/24, fdff:ffff:c8::/40'
},
pageTagsAndCategories: {
btnCreateNew: 'Create new',
subHeaderTags: 'Available Tags:',
subHeaderCategories: 'Available Categories:'
}
},
shareLimit: {
input: {
globalLimit: 'Use global limit',
unlimited: 'Unlimited'
},
limitRatio: 'Limit Ratio',
titleDuration: 'Duration',
titleRatio: 'Ratio'
},
newCategory: {
categoryName: 'Category name',
Path: 'Path',
tipOnNoName: 'Category name is required',
tipOnNameTooLong: 'Category name must be less than 15 characters',
tipOnNoPath: 'Path is required',
TipOnPathTooLong: 'Path must be less than 40 characters'
},
newTag: {
createNewTag: 'Create New Tag',
tagName: 'Tag name'
},
detail: {
title: 'Torrent Detail',
tabTitleInfo: 'Info',
tabTitleTrackers: 'Trackers',
tabTitlePeers: 'Peers',
tabTitleContent: 'Content',
tabTitleTagsCategories: 'Tags & Categories',
pageInfo: {
torrentTitle: 'Torrent title',
hash: 'hash',
ratio: 'Ratio',
downloadSpeed: 'DL Speed',
uploadSpeed: 'UP Speed',
eta: 'ETA',
peers: 'Peers',
seeds: 'Seeds',
status: 'Status',
trackers: 'Trackers',
createdBy: 'Created By',
firstLastPiecePriority: 'First/Last Piece Priority',
sequentialDownload: 'Sequential Download',
autoTMM: 'Auto TMM',
shareRatioLimit: 'Share Ratio Limit',
shareTimeLimit: 'Share Time Limit (minutes)',
downloadLimit: 'Download Limit',
uploadLimit: 'Upload Limit'
},
pagePeers: {
ip: 'IP',
connection: 'Connection',
flags: 'Flags',
client: 'Client',
progress: 'Progress',
downloadSpeed: 'DL Speed',
downloaded: 'Downloaded',
upSpeed: 'UP Speed',
uploaded: 'Uploaded',
relevance: 'Relevance',
files: 'Files'
},
pageTagsAndCategories: {
subHeaderTag: 'Available Tags:',
subHeaderCategories: 'Available Categories:'
},
pageTrackers: {
url: 'URL',
status: 'Status',
peers: 'Peers',
seeds: 'Seeds',
leeches: 'Leeches',
downloaded: 'Downloaded',
message: 'Message'
}
},
add: { add: {
title: 'Add a new Torrent', title: 'Add a new Torrent',
selectFiles: 'Select your files' selectFiles: 'Select your files',
urlHint: 'One link per line',
downloadDirectory: 'Download Directory',
starttorrent: 'Start torrent',
skipHashCheck: 'Skip hash check',
createSubfolder: 'Create subfolder',
automaticTorrentManagement: 'Automatic Torrent Management',
dropHereForAdd: 'Drop here for add',
oneOrMoreFilesInvalidTorrent: 'One or more files is not a valid torrent'
},
changeLocation: {
title: 'Change Location',
torrentName: 'Torrent Name'
},
rename: {
title: 'Rename',
torrentName: 'Torrent Name'
},
sort: {
title: 'Sort Torrents',
reverse: 'Reverse',
sortBy: {
availability: 'Availability',
category: 'Category',
completed: 'Completed',
downloaded: 'Downloaded',
ETA: 'ETA',
name: 'Name',
peers: 'Peers',
priority: 'Priority',
progress: 'Progress',
ratio: 'Ratio',
size: 'Size',
state: 'State',
uploaded: 'Uploaded',
addedOn: 'Added On',
downloadSpeed: 'Download Speed',
timeActive: 'Time Active',
uploadSpeed: 'Upload Speed'
}
},
speedLimit: {
speedLimit: 'Speed Limit'
}, },
delete: { delete: {
check: 'Also delete files from storage' check: 'Also delete files from storage'
@ -64,7 +354,12 @@ const locale = {
advanced: { advanced: {
advanced: 'advanced', advanced: 'advanced',
changeLocation: 'change location', changeLocation: 'change location',
rename: 'rename' rename: 'rename',
forceRecheck: 'Force recheck',
forceReannounce: 'Force reannounce',
sequentialDownload: 'Sequential Download',
firstLastPriority: 'First/Last priority',
autoManagement: 'Automatic Torrent Management'
}, },
prio: { prio: {
prio: 'set priority', prio: 'set priority',

View file

@ -7,6 +7,39 @@ const locale = {
save: '保存', save: '保存',
cancel: '取消', cancel: '取消',
confirm: '确认', confirm: '确认',
edit: '编辑',
createNew: '新增',
path: '路径',
create: '新增',
url: '链接',
directory: '目录',
unknown: '未知',
status: '状态',
all: '所有',
downloading: '下载中',
seeding: '做种中',
completed: '已完成',
resumed: '恢复',
paused: '暂停',
active: '活动',
inactive: '空闲',
stalled: '低速',
errored: '错误',
login: '登录',
logout: '退出',
downloaded: '已下载',
uploaded: '已上传',
download: '下载',
ETA: '剩余时间',
peers: '用户',
ratio: '比率',
seeds: '做种',
tags: '标签',
upload: '上传',
share: '分享',
name: '名称',
hash: '哈希值',
magnet: '磁力链接',
/** Torrent */ /** Torrent */
torrent: { torrent: {
@ -19,7 +52,9 @@ const locale = {
downloaded: '下载量', downloaded: '下载量',
uploaded: '上传量', uploaded: '上传量',
created: '制作程序', created: '制作程序',
comments: '注释' comments: '注释',
uploadedSession: '上传会话',
torrentTitle: '种子标题'
}, },
/** Navbar */ /** Navbar */
navbar: { navbar: {
@ -35,14 +70,269 @@ const locale = {
}, },
sessionStats: { sessionStats: {
tooltip: '自 qBittorrent 上次重启以来' tooltip: '自 qBittorrent 上次重启以来'
},
filters: {
stalled_uploading: '低速上传',
stalled_downloading: '低速下载'
},
action: {
altSpeed: '备用速率限制',
dark: '暗色界面',
light: '亮色界面'
} }
}, },
/** Modals */ /** Modals */
modals: { modals: {
pluginManager: {
title: '插件管理器'
},
search: {
title: '搜索',
btnStartSearch: '搜索',
btnStopSearch: '停止',
columnTitle: {
name: '名称',
size: '大小',
seeds: '上传',
peers: '用户',
search_engine: '搜索引擎',
action: '操作'
}
},
settings: {
tabName: {
VueTorrent: 'VueTorrent',
downloads: '下载',
connection: '连接',
bittorrent: 'bittorrent',
webUI: '网页界面',
tagsAndCategories: '标签和分类'
},
pageVueTorrent: {
tabName: {
general: '常规',
dashboard: '面板'
},
pageGeneral: {
tip: '这些设置适用于自定义WebUI本身',
currentSpeed: '显示当前速度',
speedGraph: '显示速度图形化',
sessionStats: '显示会话状态',
allTimeStats: '显示历史状态',
freeSpace: '显示剩余空间',
trackerFilter: '显示 Tracker 过滤',
rightDrawer: '侧边栏居右显示',
language: '语言',
paginationSize: '每页展示数量',
vueTorrentTitle: 'VueTorrent 标题',
currentVersion: '当前版本',
qbittorrentVersion: 'QBittorrent 版本'
},
pageDashboard: {
busyTorrentTip: '未完成的种子要显示的属性',
completedTorrentTip: '已完成的种子要显示的属性'
}
},
pageDownloads: {
subHeaderWhenAddTorrent: '当添加种子时',
whenAddTorrent: {
createSubFolder: '为包含多个文件的种子创建子文件夹',
donotAutoStart: '不要自动开始下载'
},
subHeaderPublicSettings: '公共设置',
publicSettings: {
preAllocateDisk: '为所有文件预分配磁盘空间',
appendQBExtension: '为未完成的文件添加 .!qB 后缀'
},
subHeaderSaveManagement: '存储管理器',
saveManagement: {
autoManagement: '自动管理种子',
relocate: '当分类变化时更改种子保存的路径',
defaultSavePath: '默认保存路径',
keepIncompleteIn: '将未完成的种子保存在:',
autoEnabled: '启用自动运行:',
autorunProgram: '自动运行的程序',
supportParamTitle: '支持的参数(大小写敏感):',
supportParamN: '%N: 种子名称',
supportParamL: '%L: 分类',
supportParamG: '%G: 标签(用逗号分隔)',
supportParamF: '%F: 内容路径(多文件种子同根路径)',
supportParamR: '%R: 根路径(首个种子子目录的路径)',
supportParamD: '%D: 保存路径',
supportParamC: '%C: 文件数量',
supportParamZ: '%Z: 种子大小(单位为字节 byte',
supportParamT: '%T: 当前 tracker',
supportParamI: '%I: 信息哈希值'
}
},
pageConnection: {
subHeader: '连接限制',
globalMaxConnection: '全局最大连接数',
perTorrentMaxConnection: '单个种子最大连接数',
globalMaxUploadSlots: '全局最大上传数',
perTorrentMaxUploadSlots: '单个种子最大上传数'
},
pageBittorrent: {
subHeaderPrivacy: '隐私',
enableDHT: '启用 DHT分散网络寻找更多终端',
enablePeX: '启用 PeX (对等交换)寻找更多终端',
enableLPD: '启用 LPD (本地终端发现)寻找更多终端',
enableAnonymous: '启用匿名模式',
torrentQueue: '种子队列',
maxActiveDownload: '最大活跃下载数',
maxActiveUpload: '最大活跃上传数',
maxActiveTorrent: '最大活跃种子数',
excludeSlowTorrent: '不要在这些限制范围内计算慢速种子',
downloadRateLimit: '下载速率限制为 KiB/s',
uploadRateLimit: '上传速率限制为 KiB/s',
torrentInactivityTimer: '种子不活跃计数器',
subHeaderSeedLimits: '做种限制',
whenRatioReaches: '当比率达到时',
whenSeedingTimeReaches: '当做种时间达到时'
},
pageWebUI: {
useAlternativeWebUI: '使用其他的网页界面',
filesLocation: '文件路径',
webUserInterface: '网页用户界面(远程控制)',
ipAddress: 'IP 地址',
port: '端口号',
authentication: '认证',
username: '用户名',
password: '密码',
maxAttempts: '最大尝试次数',
banDuration: '禁用时长(秒)',
sessionTimeout: '会话持续时间(秒)',
bypassAuthenticationForClientsOnLocalhost: '绕过本地主机上客户端的身份验证',
bypassAuthenticationForClientsInWhitelisted: '绕过白名单IP子网中客户端的身份验证',
whiteListExample: '示例172.17.32.0/24, fdff:ffff:c8::/40'
},
pageTagsAndCategories: {
btnCreateNew: '新增',
subHeaderTags: '可用标签:',
subHeaderCategories: '可用分类:'
}
},
shareLimit: {
input: {
globalLimit: '使用全局限制',
unlimited: '无限制'
},
limitRatio: '做种限制',
titleDuration: '做种时间',
titleRatio: '分享率'
},
newCategory: {
categoryName: '分类名称',
path: '路径',
tipOnNoName: '分类名称是必须的',
tipOnNameTooLong: '分类名称必须小于 15 个字符',
tipOnNoPath: '路径是必须的',
TipOnPathTooLong: '路径必须小于 40 个字符'
},
newTag: {
createNewTag: '新建标签',
tagName: '标签名称'
},
detail: {
title: '种子详情',
tabTitleInfo: '信息',
tabTitleTrackers: 'Trackers',
tabTitlePeers: '用户',
tabTitleContent: '内容',
tabTitleTagsCategories: '标签和分类',
pageInfo: {
torrentTitle: '种子标题',
hash: '哈希值',
ratio: '比率',
downloadSpeed: '下载速度',
uploadSpeed: '上传速度',
eta: '剩余时间',
peers: '用户',
seeds: '上传',
status: '状态',
trackers: 'Trackers',
createdBy: '创建者',
firstLastPiecePriority: '首末块优先',
sequentialDownload: '顺序下载',
autoTMM: '自动种子管理',
shareRatioLimit: '分享率限制',
shareTimeLimit: '分享时间限制(分钟)',
downloadLimit: '下载限制',
uploadLimit: '上传限制'
},
pagePeers: {
ip: 'IP',
connection: '连接',
flags: '标志',
client: '客户端',
progress: '进度',
downloadSpeed: '下载速率',
downloaded: '下载量',
upSpeed: '上传速率',
uploaded: '上传量',
relevance: '关联',
files: '文件'
},
pageTagsAndCategories: {
subHeaderTag: '可用标签:',
subHeaderCategories: '可用分类:'
},
pageTrackers: {
url: '连接地址',
status: '状态',
peers: '用户',
seeds: '做种',
leeches: '下载',
downloaded: '下载量',
message: '消息'
}
},
add: { add: {
title: '添加新的种子', title: '添加新的种子',
selectFiles: '选择文件' selectFiles: '选择文件',
urlHint: '每行一个链接',
downloadDirectory: '下载目录',
starttorrent: '添加后立即开始',
skipHashCheck: '跳过哈希值检查',
createSubfolder: '建立子目录',
automaticTorrentManagement: '自动种子管理ATM',
dropHereForAdd: '拖拽到此处即可添加',
oneOrMoreFilesInvalidTorrent: '存在无效的种子文件'
},
changeLocation: {
title: '更改位置',
torrentName: '种子名称'
},
rename: {
title: '重命名',
torrentName: '种子名称'
},
sort: {
title: '种子排序',
reverse: '逆序',
sortBy: {
availability: '可用性',
category: '分类',
completed: '已完成',
downloaded: '下载量',
ETA: '剩余时间',
name: '名称',
peers: '用户',
priority: '优先级',
progress: '进度',
ratio: '比率',
size: '大小',
state: '状态',
uploaded: '上传量',
addedOn: '添加时间',
downloadSpeed: '下载速率',
timeActive: '活跃时间',
uploadSpeed: '上传速率'
}
},
speedLimit: {
speedLimit: '速率限制'
}, },
delete: { delete: {
check: '同时从存储中删除' check: '同时从存储中删除'
@ -64,7 +354,12 @@ const locale = {
advanced: { advanced: {
advanced: '高级', advanced: '高级',
changeLocation: '修改保存位置', changeLocation: '修改保存位置',
rename: '重命名' rename: '重命名',
forceRecheck: '强制重新检查',
forceReannounce: '强制重新汇报',
sequentialDownload: '顺序下载',
firstLastPriority: '首尾优先',
automaticTorrentManagement: '自动种子管理ATM'
}, },
prio: { prio: {
prio: '设置优先级', prio: '设置优先级',
@ -75,7 +370,7 @@ const locale = {
}, },
category: '设置分类', category: '设置分类',
limit: '设置限制', limit: '设置限制',
copy: '复制', copy: '复制',
info: '显示详情' info: '显示详情'
} }
} }