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-if="files.length == 0"
v-model="urls"
label="URL"
:label="$t('url')"
:prepend-icon="mdiLink"
rows="1"
required
:autofocus="!phoneLayout"
auto-grow
clearable
hint="One link per line"
:hint="$t('modals.add.urlHint')"
/>
</v-col>
</v-row>
@ -103,7 +103,7 @@
v-model="category"
:items="availableCategories"
clearable
label="Category"
:label="$t('category')"
item-text="name"
:prepend-icon="mdiTag"
@input="categoryChanged"
@ -112,7 +112,7 @@
<v-text-field
v-model="directory"
:disabled="autoTMM"
label="Download Directory"
:label="$t('modals.add.downloadDirectory')"
:prepend-icon="mdiFolder"
autocomplete="download-directory"
name="download-directory"
@ -121,28 +121,28 @@
<v-flex xs12 sm6>
<v-checkbox
v-model="start"
label="Start torrent"
:label="$t('modals.add.starttorrent')"
hide-details
/>
</v-flex>
<v-flex xs12 sm6>
<v-checkbox
v-model="skip_checking"
label="Skip hash check"
:label="$t('modals.add.skipHashCheck')"
hide-details
/>
</v-flex>
<v-flex xs12 sm6>
<v-checkbox
v-model="root_folder"
label="Create subfolder"
:label="$t('modals.add.createSubfolder')"
hide-details
/>
</v-flex>
<v-flex xs12 sm6>
<v-checkbox
v-model="autoTMM"
label="Automatic Torrent Management"
:label="$t('modals.add.automaticTorrentManagement')"
hide-details
/>
</v-flex>
@ -198,7 +198,7 @@
</v-icon>
</div>
<div>
<h3>Drop here for add</h3>
<h3>{{ $t('modals.add.dropHereForAdd') }}</h3>
</div>
</div>
</div>
@ -234,7 +234,7 @@ export default {
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,

View file

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

View file

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

View file

@ -1,7 +1,7 @@
<template>
<div>
<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-bottom-sheet

View file

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

View file

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

View file

@ -1,12 +1,12 @@
<template>
<v-card flat>
<v-subheader>Privacy</v-subheader>
<v-subheader>{{ $t('modals.settings.pageBittorrent.subHeaderPrivacy') }}</v-subheader>
<v-list-item>
<v-checkbox
v-model="settings.dht"
hide-details
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>
@ -14,7 +14,7 @@
v-model="settings.pex"
hide-details
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>
@ -22,7 +22,7 @@
v-model="settings.lsd"
hide-details
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>
@ -30,7 +30,7 @@
v-model="settings.lsd"
hide-details
class="ma-0 pa-0"
label="Enable anonymous mode"
:label="$t('modals.settings.pageBittorrent.enableAnonymous')"
/>
</v-list-item>
<v-divider insert />
@ -39,7 +39,7 @@
v-model="settings.queueing_enabled"
hide-details
class="ma-0 pa-0"
label="Torrent Queueing"
:label="$t('modals.settings.pageBittorrent.torrentQueue')"
/>
</v-list-item>
<v-list-item>
@ -50,7 +50,7 @@
dense
type="number"
hide-details
label="Maximum active downloads"
:label="$t('modals.settings.pageBittorrent.maxActiveDownload')"
:disabled="!settings.queueing_enabled"
/>
</v-list-item>
@ -62,7 +62,7 @@
dense
type="number"
hide-details
label="Maximum active uploads"
:label="$t('modals.settings.pageBittorrent.maxActiveUpload')"
:disabled="!settings.queueing_enabled"
/>
</v-list-item>
@ -74,7 +74,7 @@
dense
type="number"
hide-details
label="Maximum active torrents"
:label="$t('modals.settings.pageBittorrent.maxActiveTorrent')"
:disabled="!settings.queueing_enabled"
/>
</v-list-item>
@ -83,7 +83,7 @@
v-model="settings.dont_count_slow_torrents"
hide-details
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>
@ -94,7 +94,7 @@
dense
type="number"
hide-details
label="Download rate threshold KiB/s"
:label="$t('modals.settings.pageBittorrent.downloadRateLimit')"
:disabled="!settings.dont_count_slow_torrents"
/>
</v-list-item>
@ -106,7 +106,7 @@
dense
type="number"
hide-details
label="Upload rate threshold KiB/s"
:label="$t('modals.settings.pageBittorrent.uploadRateLimit')"
:disabled="!settings.dont_count_slow_torrents"
/>
</v-list-item>
@ -118,12 +118,12 @@
dense
type="number"
hide-details
label="Torrent inactivity timer"
:label="$t('modals.settings.pageBittorrent.torrentInactivityTimer')"
:disabled="!settings.dont_count_slow_torrents"
/>
</v-list-item>
<v-divider insert />
<v-subheader>Seed Limits</v-subheader>
<v-subheader>{{ $t('modals.settings.pageBittorrent.subHeaderSeedLimits') }}</v-subheader>
<v-list-item>
<v-row dense>
<v-col>
@ -131,7 +131,7 @@
v-model="settings.max_ratio_enabled"
hide-details
class="ma-0 pa-0"
label="When ratio reaches"
:label="$t('modals.settings.pageBittorrent.whenRatioReaches')"
/>
</v-col>
<v-col>
@ -154,7 +154,7 @@
v-model="settings.max_seeding_time_enabled"
hide-details
class="ma-0 pa-0"
label="When seeding time reaches"
:label="$t('modals.settings.pageBittorrent.whenSeedingTimeReaches')"
/>
</v-col>
<v-col>

View file

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

View file

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

View file

@ -2,7 +2,7 @@
<v-card flat>
<v-row dense class="ma-0 pa-0">
<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">
<v-list-item :key="item.title">
<v-list-item-content>
@ -24,13 +24,13 @@
class="mx-auto accent white--text elevation-0 px-4"
@click="createTag"
>
Create new
{{ $t('modals.settings.pageTagsAndCategories.btnCreateNew') }}
</v-btn>
</v-list-item>
</v-col>
<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">
<v-list-item :key="item.title">
<v-list-item-content>
@ -58,7 +58,7 @@
class="mx-auto accent white--text elevation-0 px-4"
@click="createCategory"
>
Create new
{{ $t('modals.settings.pageTagsAndCategories.btnCreateNew') }}
</v-btn>
</v-list-item>
</v-col>

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -7,7 +7,7 @@
>
<v-card>
<v-card-title class="justify-center primarytext--text">
<h2>Sort Torrents</h2>
<h2>{{ $t('modals.sort.title') }}</h2>
</v-card-title>
<v-card-text>
<v-form class="px-6 mt-3 justify-center mx-auto">
@ -32,7 +32,7 @@
style="padding-left: 10px !important"
>
<template #label>
Reverse
{{ $t('modals.sort.reverse') }}
</template>
</v-switch>
</v-container>
@ -51,30 +51,32 @@ export default {
data() {
return {
sortProperty: { value: 'added_on', name: 'Added On' },
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' }
]
reverse: true
}
},
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: {
close() {

View file

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

View file

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

View file

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

View file

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

View file

@ -58,19 +58,6 @@ export default {
props: { hash: String, isActive: Boolean },
data: () => ({
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
}),
computed: {
@ -84,6 +71,21 @@ export default {
},
peers() {
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: {

View file

@ -2,7 +2,7 @@
<v-card flat>
<v-row dense class="ma-0 pa-0">
<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
:value="activeTags"
active-class="accent--text"
@ -23,7 +23,7 @@
</v-col>
<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
:value="activeCategory"
active-class="accent--text"

View file

@ -120,16 +120,6 @@ export default {
props: { hash: String, isActive: Boolean },
data: () => ({
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: [],
newTrackers: '',
selectedTrackers: []
@ -137,6 +127,18 @@ export default {
computed: {
trackers() {
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: {

View file

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

View file

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

View file

@ -1,14 +1,14 @@
<template>
<div class="mt-1">
<label class="white--text text-uppercase font-weight-medium caption ml-4">
Status
{{ $t('status') }}
</label>
<v-select
name="state_filter"
aria-label="state_filter"
:value="selectedState"
class="ml-2 mr-2"
label="STATUS"
:label="$t('status')"
flat
solo
:items="options"
@ -27,7 +27,7 @@
flat
solo
class="ml-2 mr-2"
label="CATEGORIES"
:label="$t('category')"
:items="availableCategories"
item-text="name"
color="download"
@ -63,20 +63,6 @@ export default {
name: 'FilterSelect',
props: ['showTrackerFilter'],
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,
selectedCategory: null,
selectedTracker: null
@ -84,6 +70,22 @@ export default {
computed: {
...mapGetters(['getCategories', 'getTrackers']),
...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() {
const categories = [
{ name: 'All', value: null },

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -7,6 +7,39 @@ const locale = {
save: 'save',
cancel: 'cancel',
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: {
@ -19,7 +52,9 @@ const locale = {
downloaded: 'downloaded',
uploaded: 'uploaded',
created: 'created by',
comments: 'comments'
comments: 'comments',
uploadedSession: 'Uploaded Session',
torrentTitle: 'Torrent Title'
},
/** Navbar */
navbar: {
@ -35,14 +70,269 @@ const locale = {
},
sessionStats: {
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: {
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: {
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: {
check: 'Also delete files from storage'
@ -64,7 +354,12 @@ const locale = {
advanced: {
advanced: 'advanced',
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: 'set priority',

View file

@ -7,6 +7,39 @@ const locale = {
save: '保存',
cancel: '取消',
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: {
@ -19,7 +52,9 @@ const locale = {
downloaded: '下载量',
uploaded: '上传量',
created: '制作程序',
comments: '注释'
comments: '注释',
uploadedSession: '上传会话',
torrentTitle: '种子标题'
},
/** Navbar */
navbar: {
@ -35,14 +70,269 @@ const locale = {
},
sessionStats: {
tooltip: '自 qBittorrent 上次重启以来'
},
filters: {
stalled_uploading: '低速上传',
stalled_downloading: '低速下载'
},
action: {
altSpeed: '备用速率限制',
dark: '暗色界面',
light: '亮色界面'
}
},
/** 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: {
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: {
check: '同时从存储中删除'
@ -64,7 +354,12 @@ const locale = {
advanced: {
advanced: '高级',
changeLocation: '修改保存位置',
rename: '重命名'
rename: '重命名',
forceRecheck: '强制重新检查',
forceReannounce: '强制重新汇报',
sequentialDownload: '顺序下载',
firstLastPriority: '首尾优先',
automaticTorrentManagement: '自动种子管理ATM'
},
prio: {
prio: '设置优先级',
@ -75,7 +370,7 @@ const locale = {
},
category: '设置分类',
limit: '设置限制',
copy: '复制',
copy: '复制',
info: '显示详情'
}
}