[web] Simplify translations

This commit is contained in:
Alain Nussbaumer
2025-03-05 21:31:48 +01:00
parent 296dbe7a78
commit eecc915a6a
32 changed files with 233 additions and 550 deletions

View File

@@ -1644,14 +1644,14 @@
"license": "MIT"
},
"node_modules/@typescript-eslint/scope-manager": {
"version": "8.25.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.25.0.tgz",
"integrity": "sha512-6PPeiKIGbgStEyt4NNXa2ru5pMzQ8OYKO1hX1z53HMomrmiSB+R5FmChgQAP1ro8jMtNawz+TRQo/cSXrauTpg==",
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.26.0.tgz",
"integrity": "sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.25.0",
"@typescript-eslint/visitor-keys": "8.25.0"
"@typescript-eslint/types": "8.26.0",
"@typescript-eslint/visitor-keys": "8.26.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1662,9 +1662,9 @@
}
},
"node_modules/@typescript-eslint/types": {
"version": "8.25.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.25.0.tgz",
"integrity": "sha512-+vUe0Zb4tkNgznQwicsvLUJgZIRs6ITeWSCclX1q85pR1iOiaj+4uZJIUp//Z27QWu5Cseiw3O3AR8hVpax7Aw==",
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.0.tgz",
"integrity": "sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1676,14 +1676,14 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
"version": "8.25.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.25.0.tgz",
"integrity": "sha512-ZPaiAKEZ6Blt/TPAx5Ot0EIB/yGtLI2EsGoY6F7XKklfMxYQyvtL+gT/UCqkMzO0BVFHLDlzvFqQzurYahxv9Q==",
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.0.tgz",
"integrity": "sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.25.0",
"@typescript-eslint/visitor-keys": "8.25.0",
"@typescript-eslint/types": "8.26.0",
"@typescript-eslint/visitor-keys": "8.26.0",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
@@ -1699,17 +1699,17 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
"typescript": ">=4.8.4 <5.8.0"
"typescript": ">=4.8.4 <5.9.0"
}
},
"node_modules/@typescript-eslint/visitor-keys": {
"version": "8.25.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.25.0.tgz",
"integrity": "sha512-kCYXKAum9CecGVHGij7muybDfTS2sD3t0L4bJsEZLkyrXUImiCTq1M3LG2SRtOhiHFwMR9wAFplpT6XHYjTkwQ==",
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.0.tgz",
"integrity": "sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.25.0",
"@typescript-eslint/types": "8.26.0",
"eslint-visitor-keys": "^4.2.0"
},
"engines": {
@@ -1881,9 +1881,9 @@
"license": "MIT"
},
"node_modules/acorn": {
"version": "8.14.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
"integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
"version": "8.14.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
"integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
"dev": true,
"license": "MIT",
"bin": {
@@ -2130,9 +2130,9 @@
}
},
"node_modules/core-js": {
"version": "3.40.0",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.40.0.tgz",
"integrity": "sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==",
"version": "3.41.0",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.41.0.tgz",
"integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==",
"hasInstallScript": true,
"license": "MIT",
"funding": {
@@ -2443,9 +2443,9 @@
}
},
"node_modules/eslint-plugin-vue": {
"version": "9.32.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.32.0.tgz",
"integrity": "sha512-b/Y05HYmnB/32wqVcjxjHZzNpwxj1onBOvqW89W+V+XNG1dRuaFbNd3vT9CLbr2LXjEoq+3vn8DanWf7XU22Ug==",
"version": "9.33.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.33.0.tgz",
"integrity": "sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3594,9 +3594,9 @@
}
},
"node_modules/prettier": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.2.tgz",
"integrity": "sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
"integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
"dev": true,
"license": "MIT",
"bin": {
@@ -3945,9 +3945,9 @@
}
},
"node_modules/typescript": {
"version": "5.7.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
"integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
"version": "5.8.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
"integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
"devOptional": true,
"license": "Apache-2.0",
"peer": true,

View File

@@ -38,13 +38,9 @@ export default {
value: { required: true, type: [String, Number] }
},
emits: ['update:value'],
data() {
return {
active: false
}
return { active: false }
},
computed: {
option: {
get() {
@@ -52,7 +48,6 @@ export default {
}
}
},
methods: {
deactivate() {
this.active = false

View File

@@ -40,9 +40,9 @@ export default {
return [{ key: 'dialog.add.rss.processing', icon: 'web' }]
}
return [
{ key: 'dialog.add.rss.cancel', handler: this.cancel, icon: 'cancel' },
{ key: 'actions.cancel', handler: this.cancel, icon: 'cancel' },
{
key: 'dialog.add.rss.add',
key: 'actions.add',
disabled: this.disabled,
handler: this.add,
icon: 'playlist-plus'

View File

@@ -41,19 +41,15 @@ export default {
return [{ key: 'dialog.add.stream.processing', icon: 'web' }]
}
return [
{ key: 'actions.cancel', handler: this.cancel, icon: 'cancel' },
{
key: 'dialog.add.stream.cancel',
handler: this.cancel,
icon: 'cancel'
},
{
key: 'dialog.add.stream.add',
key: 'actions.add',
disabled: this.disabled,
handler: this.add,
icon: 'playlist-plus'
},
{
key: 'dialog.add.stream.play',
key: 'actions.play',
disabled: this.disabled,
handler: this.play,
icon: 'play'

View File

@@ -25,13 +25,11 @@ export default {
if (this.media_kind_resolved === 'podcast') {
if (this.item.data_kind === 'url') {
return [
{ key: 'dialog.album.mark-as-played', handler: this.mark_played },
{ key: 'dialog.album.remove-podcast', handler: this.remove_podcast }
{ key: 'actions.mark-as-played', handler: this.mark_played },
{ key: 'actions.remove-podcast', handler: this.remove_podcast }
]
}
return [
{ key: 'dialog.album.mark-as-played', handler: this.mark_played }
]
return [{ key: 'actions.mark-as-played', handler: this.mark_played }]
}
return []
},

View File

@@ -34,17 +34,13 @@ export default {
computed: {
actions() {
return [
{ key: 'actions.add', handler: this.queue_add, icon: 'playlist-plus' },
{
key: 'dialog.playable.add',
handler: this.queue_add,
icon: 'playlist-plus'
},
{
key: 'dialog.playable.add-next',
key: 'actions.add-next',
handler: this.queue_add_next,
icon: 'playlist-play'
},
{ key: 'dialog.playable.play', handler: this.play, icon: 'play' }
{ key: 'actions.play', handler: this.play, icon: 'play' }
]
}
},

View File

@@ -50,13 +50,9 @@ export default {
return [{ key: 'dialog.playlist.save.saving', icon: 'web' }]
}
return [
{ key: 'actions.cancel', handler: this.cancel, icon: 'cancel' },
{
key: 'dialog.playlist.save.cancel',
handler: this.cancel,
icon: 'cancel'
},
{
key: 'dialog.playlist.save.save',
key: 'actions.save',
disabled: this.disabled,
handler: this.save,
icon: 'download'

View File

@@ -29,16 +29,8 @@ export default {
computed: {
actions() {
return [
{
key: this.$t('dialog.queue-item.remove'),
handler: this.remove,
icon: 'delete'
},
{
key: this.$t('dialog.queue-item.play'),
handler: this.play,
icon: 'play'
}
{ key: 'actions.remove', handler: this.remove, icon: 'delete' },
{ key: 'actions.play', handler: this.play, icon: 'play' }
]
},
playable() {

View File

@@ -46,16 +46,8 @@ export default {
computed: {
actions() {
return [
{
key: 'dialog.remote-pairing.cancel',
handler: this.cancel,
icon: 'cancel'
},
{
key: 'dialog.remote-pairing.pair',
handler: this.pair,
icon: 'cellphone'
}
{ key: 'actions.cancel', handler: this.cancel, icon: 'cancel' },
{ key: 'actions.pair', handler: this.pair, icon: 'cellphone' }
]
},
pairing() {

View File

@@ -22,8 +22,8 @@ export default {
return []
}
return this.item.play_count > 0
? [{ key: 'dialog.track.mark-as-new', handler: this.mark_new }]
: [{ key: 'dialog.track.mark-as-played', handler: this.mark_played }]
? [{ key: 'actions.mark-as-new', handler: this.mark_new }]
: [{ key: 'actions.mark-as-played', handler: this.mark_played }]
},
playable() {
return {

View File

@@ -67,15 +67,11 @@ export default {
computed: {
actions() {
const actions = [
{
key: 'dialog.update.cancel',
handler: this.cancel,
icon: 'cancel'
}
{ key: 'actions.cancel', handler: this.cancel, icon: 'cancel' }
]
if (!this.libraryStore.updating) {
actions.push({
key: 'dialog.update.rescan',
key: 'actions.rescan',
handler: this.analyse,
icon: 'check'
})

View File

@@ -1,4 +1,28 @@
{
"actions": {
"add": "Hinzufügen",
"add-next": "Als nächstes hinzufügen",
"add-stream": "Stream hinzufügen",
"cancel": "Abbrechen",
"clear": "Alle entfernen",
"edit": "Bearbeiten",
"filter": "Filter",
"login": "Einloggen",
"logout": "Ausloggen",
"hide-previous": "Vorherige verbergen",
"mark-all-played": "Alle abgespielten markieren",
"mark-as-new": "Markiere als neu",
"mark-as-played": "Markiere als gespielt",
"pair": "Remote paaren",
"play": "Spielen",
"remove": "Entfernen",
"remove-podcast": "Entferne podcast",
"rescan": "Neu einlesen",
"save": "Speichern",
"send": "Senden",
"show-more": "Zeige mehr",
"shuffle": "Zufallswiedergabe"
},
"count": {
"albums": "{count} Album|{count} Album|{count} Alben",
"artists": "{count} Künstler",
@@ -23,70 +47,43 @@
"dialog": {
"add": {
"rss": {
"add": "Hinzufügen",
"cancel": "Abbrechen",
"help": "Hinzufügen eines Podcasts führt zur Anlage einer RSS-Playlist, so kann OwnTone das Podcast-Abo verwalten.",
"placeholder": "https://url-to-rss",
"processing": "Verarbeite…",
"title": "Podcast hinzufügen"
},
"stream": {
"add": "Hinzufügen",
"cancel": "Abbrechen",
"loading": "Lade…",
"placeholder": "https://url-to-stream",
"play": "Spielen",
"processing": "Verarbeite…",
"title": "Stream hinzufügen"
}
},
"album": {
"mark-as-played": "Markiere als gespielt",
"remove-podcast": "Entferne podcast"
},
"playable": {
"add-next": "Als nächstes hinzufügen",
"add": "Hinzufügen",
"play": "Spielen"
},
"playlist": {
"add-next": "Als nächstes hinzufügen",
"add": "Hinzufügen",
"play": "Spielen",
"save": {
"cancel": "Abbrechen",
"playlist-name": "Playlistname",
"save": "Speichern",
"saving": "Speichere…",
"title": "Warteschlange als Playlist speichern"
}
},
"queue-item": {
"play": "Spielen",
"quality-value": "{format} {'|'} {samplerate} Hz {'|'} {channels} {'|'} {bitrate} kbit/s",
"remove": "Entfernen"
"quality-value": "{format} {'|'} {samplerate} Hz {'|'} {channels} {'|'} {bitrate} kbit/s"
},
"remote-pairing": {
"cancel": "Abbrechen",
"pair": "Remote paaren",
"pairing-code": "Pairing-Code",
"title": "Remote-Paarungs-Anfrage"
},
"track": {
"mark-as-new": "Markiere als neu",
"mark-as-played": "Markiere als gespielt",
"quality-value": "{format} {'|'} {samplerate} Hz {'|'} {channels} {'|'} {bitrate} kbit/s",
"rating-value": "{rating} / 10"
},
"update": {
"all": "Alles neu einlesen",
"cancel": "Abbrechen",
"feeds": "Nur RSS-Feeds neu einlesen",
"info": "Suche nach neuen, gelöschten und veränderten Dateien",
"local": "Nur lokale Bibliothek neu einlesen",
"progress": "Bibliothek wird neu eingelesen…",
"rescan-metadata": "Metadata von unveränderten Dateien neu einlesen",
"rescan": "Neu einlesen",
"spotify": "Nur Spotify neu einlesen",
"title": "Bibliothek neu einlesen"
}
@@ -100,9 +97,7 @@
},
"list": {
"albums": {
"info": "Diesen Podcast dauerhaft aus der Bibliothek löschen?{separator}(Damit wird auch die RSS-Playliste {name} gelöscht)",
"remove": "Entfernen",
"remove-podcast": "Entferne podcast"
"info": "Diesen Podcast dauerhaft aus der Bibliothek löschen?{separator}(Damit wird auch die RSS-Playliste {name} gelöscht)"
},
"spotify": {
"not-playable-track": "Track kann nicht gespielt werden",
@@ -146,11 +141,7 @@
"update": "Neu einlesen",
"version": "Version {version}"
},
"album": {
"shuffle": "Zufallswiedergabe"
},
"albums": {
"filter": "Filter",
"hide-singles-help": "Nach Aktivierung werden keine Singles und Alben angezeigt, die nur in Playlisten enthalten sind.",
"hide-singles": "Nach Aktivierung werden keine Singles angezeigt",
"hide-spotify-help": "Nach Aktivierung werden keine Alben angezeigt, die nur in der Spotify-Bibliothek enthalten sind.",
@@ -166,10 +157,8 @@
}
},
"artist": {
"filter": "Filter",
"hide-spotify-help": "Nach Aktivierung wird kein Inhalt angezeigt, der nur in der Spotify-Bibliothek enthalten ist.",
"hide-spotify": "Verbirgt Spotify-Inhalt",
"shuffle": "Zufallswiedergabe",
"sort": {
"title": "Sortieren",
"name": "Name",
@@ -178,7 +167,6 @@
}
},
"artists": {
"filter": "Filter",
"sort": {
"title": "Sortieren",
"name": "Namen",
@@ -191,15 +179,9 @@
"title": "Künstler"
},
"audiobooks": {
"album": {
"play": "Spielen"
},
"albums": {
"title": "Hörbücher"
},
"artist": {
"play": "Spielen"
},
"artists": {
"title": "Autoren"
},
@@ -210,7 +192,6 @@
}
},
"composer": {
"shuffle": "Zufallswiedergabe",
"sort": {
"title": "Sortieren",
"name": "Name",
@@ -221,11 +202,9 @@
"title": "Komponisten"
},
"files": {
"play": "Spielen",
"title": "Dateien"
},
"genre": {
"shuffle": "Zufallswiedergabe",
"sort": {
"title": "Sortieren",
"name": "Name",
@@ -236,7 +215,6 @@
"title": "Genres"
},
"music": {
"show-more": "Zeige mehr",
"recently-added": {
"title": "Kürzlich hinzugefügt"
},
@@ -257,33 +235,18 @@
"live": "Live",
"title": "Deine Playliste ist leer."
},
"playlist": {
"length": "{length} Tracks",
"shuffle": "Zufallswiedergabe"
},
"playlists": {
"title": "Playlisten"
},
"podcast": {
"cancel": "Abbrechen",
"play": "Spielen",
"remove": "Entfernen",
"remove-info": "Diesen Podcast dauerhaft aus der Bibliothek löschen?{separator}(Damit wird auch die RSS-Playliste {name} gelöscht)",
"remove-podcast": "Entferne podcast"
"remove-info": "Diesen Podcast dauerhaft aus der Bibliothek löschen?{separator}(Damit wird auch die RSS-Playliste {name} gelöscht)"
},
"podcasts": {
"add": "Hinzufügen",
"mark-all-played": "Alle abgespielten markieren",
"new-episodes": "Neue Episoden",
"title": "Podcasts",
"update": "Neu einlesen"
},
"queue": {
"add-stream": "Stream hinzufügen",
"clear": "Alle entfernen",
"edit": "Bearbeiten",
"hide-previous": "Vorherige verbergen",
"save": "Speichern",
"title": "Warteschlange"
},
"radio": {
@@ -329,7 +292,6 @@
"pairing-code": "Pairing-Code",
"pairing-request": "Remote-Pairing-Anfrage von ",
"pairing": "Pairing Remote",
"send": "Senden",
"speaker-pairing-info": "Wenn der Laufsprecher PIN-basiertes Pairing verlangt, aktiviere ihn hier und gib dann den hier PIN an, der am Lautsprecher angezeigt wird.",
"speaker-pairing": "Lautsprecher-Pairing und Geräteverifikation",
"verification-code": "Verifikationscode",
@@ -374,8 +336,6 @@
"reauthorize": "Bitte den Zugriff der Web-API durch setzen folgender Zugriffsrechte für OwnTone: ",
"title": "Spotify"
},
"login": "Einloggen",
"logout": "Ausloggen",
"password": "Passwort",
"username": "Benutzername"
},
@@ -387,19 +347,9 @@
}
},
"spotify": {
"album": {
"shuffle": "Zufallswiedergabe"
},
"artist": {
"shuffle": "Zufallswiedergabe"
},
"music": {
"featured-playlists": "Ausgezeichnete Playlisten",
"new-releases": "Neuvorstellung",
"show-more": "Zeige mehr"
},
"playlist": {
"shuffle": "Zufallswiedergabe"
"new-releases": "Neuvorstellung"
},
"search": {
"albums": "Alben",

View File

@@ -1,4 +1,28 @@
{
"actions": {
"add": "Add",
"add-next": "Add Next",
"add-stream": "Add stream",
"cancel": "Cancel",
"clear": "Clear",
"edit": "Edit",
"filter": "Filter",
"login": "Login",
"logout": "Logout",
"hide-previous": "Hide previous",
"mark-all-played": "Mark All Played",
"mark-as-new": "Mark as new",
"mark-as-played": "Mark as played",
"pair": "Pair Remote",
"play": "Play",
"remove": "Remove",
"remove-podcast": "Remove podcast",
"rescan": "Rescan",
"save": "Save",
"send": "Send",
"show-more": "Show more",
"shuffle": "Shuffle"
},
"count": {
"albums": "{count} album|{count} album|{count} albums",
"artists": "{count} artist|{count} artist|{count} artists",
@@ -23,70 +47,43 @@
"dialog": {
"add": {
"rss": {
"add": "Add",
"cancel": "Cancel",
"help": "Adding a podcast includes creating an RSS playlist, that will allow OwnTone to manage the podcast subscription.",
"placeholder": "https://url-to-rss",
"processing": "Processing…",
"title": "Add podcast"
},
"stream": {
"add": "Add",
"cancel": "Cancel",
"loading": "Loading…",
"placeholder": "https://url-to-stream",
"play": "Play",
"processing": "Processing…",
"title": "Add stream"
}
},
"album": {
"mark-as-played": "Mark as played",
"remove-podcast": "Remove podcast"
},
"playable": {
"add-next": "Add Next",
"add": "Add",
"play": "Play"
},
"playlist": {
"add-next": "Add Next",
"add": "Add",
"play": "Play",
"save": {
"cancel": "Cancel",
"playlist-name": "Playlist name",
"save": "Save",
"saving": "Saving…",
"title": "Save queue to playlist"
}
},
"queue-item": {
"play": "Play",
"quality-value": "{format} {'|'} {samplerate} Hz {'|'} @:count.channels {'|'} {bitrate} kbit/s",
"remove": "Remove"
"quality-value": "{format} {'|'} {samplerate} Hz {'|'} @:count.channels {'|'} {bitrate} kbit/s"
},
"remote-pairing": {
"cancel": "Cancel",
"pair": "Pair Remote",
"pairing-code": "Pairing code",
"title": "Remote pairing request"
},
"track": {
"mark-as-new": "Mark as new",
"mark-as-played": "Mark as played",
"quality-value": "{format} {'|'} {samplerate} Hz {'|'} @:count.channels {'|'} {bitrate} kbit/s",
"rating-value": "{rating} / 10"
},
"update": {
"all": "Update everything",
"cancel": "Cancel",
"feeds": "Only update RSS feeds",
"info": "Scan for new, deleted and modified files",
"local": "Only update local library",
"progress": "Library update in progress…",
"rescan-metadata": "Rescan metadata of unmodified files",
"rescan": "Rescan",
"spotify": "Only update Spotify",
"title": "Update library"
}
@@ -100,9 +97,7 @@
},
"list": {
"albums": {
"info": "Permanently remove this podcast from your library?{separator}(This will also remove the RSS playlist {name})",
"remove": "Remove",
"remove-podcast": "Remove podcast"
"info": "Permanently remove this podcast from your library?{separator}(This will also remove the RSS playlist {name})"
},
"spotify": {
"not-playable-track": "Track is not playable",
@@ -146,11 +141,7 @@
"update": "Update",
"version": "Version {version}"
},
"album": {
"shuffle": "Shuffle"
},
"albums": {
"filter": "Filter",
"hide-singles-help": "If active, hides singles and albums with tracks that only appear in playlists.",
"hide-singles": "Hide singles",
"hide-spotify-help": "If active, hides albums that only appear in your Spotify library.",
@@ -166,10 +157,8 @@
}
},
"artist": {
"filter": "Filter",
"hide-spotify-help": "If active, hides the content only appearing in your Spotify library.",
"hide-spotify": "Hide the content from Spotify",
"shuffle": "Shuffle",
"sort": {
"title": "Sort",
"name": "Name",
@@ -178,7 +167,6 @@
}
},
"artists": {
"filter": "Filter",
"sort": {
"title": "Sort",
"name": "Name",
@@ -191,15 +179,9 @@
"title": "Artists"
},
"audiobooks": {
"album": {
"play": "Play"
},
"albums": {
"title": "Audiobooks"
},
"artist": {
"play": "Play"
},
"artists": {
"title": "Authors"
},
@@ -210,7 +192,6 @@
}
},
"composer": {
"shuffle": "Shuffle",
"sort": {
"title": "Sort",
"name": "Name",
@@ -221,11 +202,9 @@
"title": "Composers"
},
"files": {
"play": "Play",
"title": "Files"
},
"genre": {
"shuffle": "Shuffle",
"sort": {
"title": "Sort",
"name": "Name",
@@ -236,7 +215,6 @@
"title": "Genres"
},
"music": {
"show-more": "Show more",
"recently-added": {
"title": "Recently added"
},
@@ -257,33 +235,18 @@
"live": "Live",
"title": "Your play queue is empty"
},
"playlist": {
"length": "{length} tracks",
"shuffle": "Shuffle"
},
"playlists": {
"title": "Playlists"
},
"podcast": {
"cancel": "Cancel",
"play": "Play",
"remove": "Remove",
"remove-info": "Permanently remove this podcast from your library?{separator}(This will also remove the RSS playlist {name})",
"remove-podcast": "Remove podcast"
"remove-info": "Permanently remove this podcast from your library?{separator}(This will also remove the RSS playlist {name})"
},
"podcasts": {
"add": "Add",
"mark-all-played": "Mark All Played",
"new-episodes": "New Episodes",
"title": "Podcasts",
"update": "Update"
},
"queue": {
"add-stream": "Add stream",
"clear": "Clear",
"edit": "Edit",
"hide-previous": "Hide previous",
"save": "Save",
"title": "Queue"
},
"radio": {
@@ -329,7 +292,6 @@
"pairing-code": "Pairing code",
"pairing-request": "Remote pairing request from ",
"pairing": "Remote Pairing",
"send": "Send",
"speaker-pairing-info": "If your speaker requires pairing then activate it below and enter the PIN that it displays.",
"speaker-pairing": "Speaker pairing and device verification",
"verification-code": "Verification code",
@@ -374,8 +336,6 @@
"reauthorize": "Please reauthorize Web API access to grant OwnTone the following additional access rights: ",
"title": "Spotify"
},
"login": "Login",
"logout": "Logout",
"password": "Password",
"username": "Username"
},
@@ -387,19 +347,9 @@
}
},
"spotify": {
"album": {
"shuffle": "Shuffle"
},
"artist": {
"shuffle": "Shuffle"
},
"music": {
"featured-playlists": "Featured Playlists",
"new-releases": "New Releases",
"show-more": "Show More"
},
"playlist": {
"shuffle": "Shuffle"
"new-releases": "New Releases"
},
"search": {
"albums": "Albums",

View File

@@ -1,4 +1,28 @@
{
"actions": {
"add": "Ajouter",
"add-next": "Ajouter ensuite",
"add-stream": "Ajouter un flux",
"cancel": "Annuler",
"clear": "Effacer",
"edit": "Éditer",
"filter": "Filtrer",
"login": "Se connecter",
"logout": "Se déconnecter",
"hide-previous": "Masquer lhistorique",
"mark-all-played": "Marquer comme lus",
"mark-as-new": "Marquer comme nouveau",
"mark-as-played": "Marquer comme lu",
"pair": "Jumeler la télécommande",
"play": "Lire",
"remove": "Supprimer",
"remove-podcast": "Supprimer le podcast",
"rescan": "Analyser",
"save": "Enregistrer",
"send": "Envoyer",
"show-more": "Afficher plus",
"shuffle": "Lecture aléatoire"
},
"count": {
"albums": "{count} album|{count} album|{count} albums",
"artists": "{count} artiste|{count} artiste|{count} artistes",
@@ -23,70 +47,43 @@
"dialog": {
"add": {
"rss": {
"add": "Ajouter",
"cancel": "Annuler",
"help": "Lajout dun podcast inclut la création dune liste de lecture RSS, qui permettra à OwnTone de gérer labonnement au podcast.",
"placeholder": "https://url-du-flux-rss",
"processing": "Traitement en cours…",
"title": "Ajouter un podcast"
},
"stream": {
"add": "Ajouter",
"cancel": "Annuler",
"loading": "Chargement…",
"placeholder": "https://url-du-flux",
"play": "Lire",
"processing": "Traitement en cours…",
"title": "Ajouter un flux"
}
},
"album": {
"mark-as-played": "Marquer comme lu",
"remove-podcast": "Supprimer le podcast"
},
"playable": {
"add-next": "Ajouter ensuite",
"add": "Ajouter",
"play": "Lire"
},
"playlist": {
"add-next": "Ajouter ensuite",
"add": "Ajouter",
"play": "Lire",
"save": {
"cancel": "Annuler",
"playlist-name": "Nom de la liste de lecture",
"save": "Enregistrer",
"saving": "Enregistrement en cours…",
"title": "Enregistrer la file dattente dans une liste de lecture"
}
},
"queue-item": {
"play": "Lire",
"quality-value": "{format} {'|'} {samplerate} Hz {'|'} {channels} {'|'} {bitrate} kbit/s",
"remove": "Supprimer"
"quality-value": "{format} {'|'} {samplerate} Hz {'|'} {channels} {'|'} {bitrate} kbit/s"
},
"remote-pairing": {
"cancel": "Annuler",
"pair": "Jumeler la télécommande",
"pairing-code": "Code de jumelage",
"title": "Demande de jumelage de télécommande"
},
"track": {
"mark-as-new": "Marquer comme nouveau",
"mark-as-played": "Marquer comme lu",
"quality-value": "{format} {'|'} {samplerate} Hz {'|'} {channels} {'|'} {bitrate} kbit/s",
"rating-value": "{rating} / 10"
},
"update": {
"all": "Tout actualiser",
"cancel": "Annuler",
"feeds": "Actualiser uniquement les flux RSS",
"info": "Recherche les fichiers ajoutés, supprimés et modifiés",
"local": "Actualiser uniquement la bibliothèque locale",
"progress": "Actualisation de la bibliothèque en cours…",
"rescan-metadata": "Analyser les métadonnées des fichiers non modifiés",
"rescan": "Analyser",
"spotify": "Actualiser uniquement Spotify",
"title": "Actualiser la bibliothèque"
}
@@ -100,9 +97,7 @@
},
"list": {
"albums": {
"info": "Supprimer définitivement ce podcast de votre bibliothèque ?{separator}(Cela supprimera également la liste de lecture RSS {name})",
"remove": "Supprimer",
"remove-podcast": "Supprimer le podcast"
"info": "Supprimer définitivement ce podcast de votre bibliothèque ?{separator}(Cela supprimera également la liste de lecture RSS {name})"
},
"spotify": {
"not-playable-track": "La piste ne peut pas être lue",
@@ -146,11 +141,7 @@
"update": "Actualiser",
"version": "Version {version}"
},
"album": {
"shuffle": "Lecture aléatoire"
},
"albums": {
"filter": "Filtrer",
"hide-singles-help": "Si actif, masque les singles et les albums dont les pistes napparaissent que dans les listes de lecture.",
"hide-singles": "Masquer les singles",
"hide-spotify-help": "Si actif, masque les albums qui napparaissent que dans votre bibliothèque Spotify.",
@@ -166,10 +157,8 @@
}
},
"artist": {
"filter": "Filtrer",
"hide-spotify-help": "Si actif, masque le contenu qui napparaît que dans votre bibliothèque Spotify.",
"hide-spotify": "Masquer le contenu de Spotify",
"shuffle": "Lecture aléatoire",
"sort": {
"title": "Trier",
"name": "Nom",
@@ -178,7 +167,6 @@
}
},
"artists": {
"filter": "Filtrer",
"sort": {
"title": "Trier",
"name": "Nom",
@@ -191,15 +179,9 @@
"title": "Artistes"
},
"audiobooks": {
"album": {
"play": "Lire"
},
"albums": {
"title": "Livres audio"
},
"artist": {
"play": "Lire"
},
"artists": {
"title": "Auteurs"
},
@@ -210,7 +192,6 @@
}
},
"composer": {
"shuffle": "Lecture aléatoire",
"sort": {
"title": "Trier",
"name": "Nom",
@@ -221,11 +202,9 @@
"title": "Compositeurs"
},
"files": {
"play": "Lire",
"title": "Fichiers"
},
"genre": {
"shuffle": "Lecture aléatoire",
"sort": {
"title": "Trier",
"name": "Nom",
@@ -236,7 +215,6 @@
"title": "Genres"
},
"music": {
"show-more": "Afficher plus",
"recently-added": {
"title": "Ajouts récents"
},
@@ -257,33 +235,18 @@
"live": "En direct",
"title": "La file dattente est vide"
},
"playlist": {
"length": "{length} pistes",
"shuffle": "Lecture aléatoire"
},
"playlists": {
"title": "Listes de lecture"
},
"podcast": {
"cancel": "Annuler",
"play": "Lire",
"remove": "Supprimer",
"remove-info": "Supprimer ce podcast de manière permanente de la bibliothèque ?{separator}(Cela supprimera également la liste de lecture RSS {name})",
"remove-podcast": "Supprimer le podcast"
"remove-info": "Supprimer ce podcast de manière permanente de la bibliothèque ?{separator}(Cela supprimera également la liste de lecture RSS {name})"
},
"podcasts": {
"add": "Ajouter",
"mark-all-played": "Marquer comme lus",
"new-episodes": "Nouveaux épisodes",
"title": "Podcasts",
"update": "Actualiser"
},
"queue": {
"add-stream": "Ajouter un flux",
"clear": "Effacer",
"edit": "Éditer",
"hide-previous": "Masquer lhistorique",
"save": "Enregistrer",
"title": "File dattente"
},
"radio": {
@@ -329,7 +292,6 @@
"pairing-code": "Code de jumelage",
"pairing-request": "Demande de jumelage de télécommande ",
"pairing": "Jumelage de télécommande",
"send": "Envoyer",
"speaker-pairing-info": "Si votre enceinte nécessite un jumelage, activez-la ci-dessous et entrez le code PIN quelle affiche.",
"speaker-pairing": "Jumelage denceinte et vérification dappareil",
"verification-code": "Code de vérification",
@@ -374,8 +336,6 @@
"reauthorize": "Veuillez autoriser à nouveau laccès à lAPI pour accorder à OwnTone les droits daccès supplémentaires suivants :",
"title": "Spotify"
},
"login": "Se connecter",
"logout": "Se déconnecter",
"password": "Mot de passe",
"username": "Nom dutilisateur"
},
@@ -387,19 +347,9 @@
}
},
"spotify": {
"album": {
"shuffle": "Lecture aléatoire"
},
"artist": {
"shuffle": "Lecture aléatoire"
},
"music": {
"featured-playlists": "Listes de lecture en vedette",
"new-releases": "Nouvelle sorties",
"show-more": "Afficher plus"
},
"playlist": {
"shuffle": "Lecture aléatoire"
"new-releases": "Nouvelle sorties"
},
"search": {
"albums": "Albums",

View File

@@ -1,4 +1,28 @@
{
"actions": {
"add": "添加",
"add-next": "插播",
"add-stream": "添加流",
"cancel": "取消",
"clear": "清除",
"edit": "编辑",
"filter": "筛选",
"login": "登入",
"logout": "退出",
"hide-previous": "隐藏历史",
"mark-all-played": "全部标记为已播放",
"mark-as-new": "标记为最新",
"mark-as-played": "标记为已播放",
"pair": "遥控配对",
"play": "播放",
"remove": "移除",
"remove-podcast": "移除播客",
"rescan": "重新扫描",
"save": "保存",
"send": "发送",
"show-more": "显示更多",
"shuffle": "随机播放"
},
"count": {
"albums": "{count} 张专辑|{count} 张专辑",
"artists": "{count} 位艺人|{count} 位艺人",
@@ -23,70 +47,43 @@
"dialog": {
"add": {
"rss": {
"add": "添加",
"cancel": "取消",
"help": "添加一个可生成播放列表的播客RSS链接这将允许OwnTone管理订阅",
"placeholder": "https://url-to-rss",
"processing": "处理中…",
"title": "添加播客"
},
"stream": {
"add": "添加",
"cancel": "取消",
"loading": "加载中…",
"placeholder": "https://url-to-stream",
"play": "播放",
"processing": "处理中…",
"title": "添加流"
}
},
"album": {
"mark-as-played": "标记为已播",
"remove-podcast": "移除播客"
},
"playable": {
"add-next": "插播",
"add": "添加",
"play": "播放"
},
"playlist": {
"add-next": "插播",
"add": "添加",
"play": "播放",
"save": {
"cancel": "取消",
"playlist-name": "播放列表名称",
"save": "保存",
"saving": "保存中…",
"title": "保存播放清单到列表"
}
},
"queue-item": {
"play": "播放",
"quality-value": "{format} {'|'} {samplerate} Hz {'|'} {channels} {'|'} {bitrate} kbit/s",
"remove": "移除"
"quality-value": "{format} {'|'} {samplerate} Hz {'|'} {channels} {'|'} {bitrate} kbit/s"
},
"remote-pairing": {
"cancel": "取消",
"pair": "遥控配对",
"pairing-code": "配对码",
"title": "请求遥控配对"
},
"track": {
"mark-as-new": "标记为最新",
"mark-as-played": "标记为已播放",
"quality-value": "{format} {'|'} {samplerate} Hz {'|'} {channels} {'|'} {bitrate} kbit/s",
"rating-value": "{rating} / 10"
},
"update": {
"all": "更新所有内容",
"cancel": "取消",
"feeds": "仅更新RSS订阅内容",
"info": "扫描新的、删除的和修改的文件",
"local": "仅更新本地资料库",
"progress": "正在更新本地资料库…",
"rescan-metadata": "重新扫描未修改文件的元数据",
"rescan": "重新扫描",
"spotify": "仅更新Spotify",
"title": "更新资料库"
}
@@ -100,9 +97,7 @@
},
"list": {
"albums": {
"info": "从资料库中永久移除该播客吗?{separator}(这也将移除RSS播放列表 {name})",
"remove": "移除",
"remove-podcast": "移除播客"
"info": "从资料库中永久移除该播客吗?{separator}(这也将移除RSS播放列表 {name})"
},
"spotify": {
"not-playable-track": "曲目无法播放",
@@ -146,11 +141,7 @@
"update": "更新",
"version": "版本 {version}"
},
"album": {
"shuffle": "随机播放"
},
"albums": {
"filter": "筛选",
"hide-singles-help": "如果激活,将隐藏仅在播放列表出现的单曲和专辑",
"hide-singles": "隐藏单曲",
"hide-spotify-help": "如果激活将隐藏仅在Spotify资料库出现的专辑",
@@ -166,10 +157,8 @@
}
},
"artist": {
"filter": "筛选",
"hide-spotify-help": "如果激活将隐藏只出现在Spotify库中的内容",
"hide-spotify": "隐藏来自Spotify的内容",
"shuffle": "随机播放",
"sort": {
"title": "分类",
"name": "名称",
@@ -178,7 +167,6 @@
}
},
"artists": {
"filter": "筛选",
"sort": {
"title": "分类",
"name": "名称",
@@ -191,15 +179,9 @@
"title": "艺人"
},
"audiobooks": {
"album": {
"play": "播放"
},
"albums": {
"title": "有声读物"
},
"artist": {
"play": "播放"
},
"artists": {
"title": "作者"
},
@@ -210,7 +192,6 @@
}
},
"composer": {
"shuffle": "随机播放",
"sort": {
"title": "分类",
"name": "名称",
@@ -221,11 +202,9 @@
"title": "作曲家"
},
"files": {
"play": "播放",
"title": "文件"
},
"genre": {
"shuffle": "随机播放",
"sort": {
"title": "分类",
"name": "名称",
@@ -236,7 +215,6 @@
"title": "流派"
},
"music": {
"show-more": "显示更多",
"recently-added": {
"title": "最近添加"
},
@@ -257,33 +235,18 @@
"live": "直播",
"title": "播放清单是空的"
},
"playlist": {
"length": "{length} 曲目",
"shuffle": "随机播放"
},
"playlists": {
"title": "播放列表"
},
"podcast": {
"cancel": "取消",
"play": "播放",
"remove": "移除",
"remove-info": "从资料库中永久移除该播客?{separator}(这也将移除该播客RSS列表 {name})",
"remove-podcast": "移除播客"
"remove-info": "从资料库中永久移除该播客?{separator}(这也将移除该播客RSS列表 {name})"
},
"podcasts": {
"add": "添加",
"mark-all-played": "全部标记为已播放",
"new-episodes": "最新单集",
"title": "播客",
"update": "更新"
},
"queue": {
"add-stream": "添加流",
"clear": "清除",
"edit": "编辑",
"hide-previous": "隐藏历史",
"save": "保存",
"title": "清单"
},
"radio": {
@@ -329,7 +292,6 @@
"pairing-code": "配对代码",
"pairing-request": "远程配对请求来自于 ",
"pairing": "遥控配对",
"send": "发送",
"speaker-pairing-info": "如果您的扬声器需要配对,请在下面输入它显示的 PIN以激活",
"speaker-pairing": "扬声器配对和设备验证",
"verification-code": "验证码",
@@ -374,8 +336,6 @@
"reauthorize": "请重新授权 Web API 访问权限,以授予 OwnTone 以下附加访问权限:",
"title": "Spotify"
},
"login": "登入",
"logout": "退出",
"password": "密码",
"username": "用户名"
},
@@ -387,19 +347,9 @@
}
},
"spotify": {
"album": {
"shuffle": "随机播放"
},
"artist": {
"shuffle": "随机播放"
},
"music": {
"featured-playlists": "特色列表",
"new-releases": "最新发行",
"show-more": "显示更多"
},
"playlist": {
"shuffle": "随机播放"
"new-releases": "最新发行"
},
"search": {
"albums": "专辑",

View File

@@ -1,4 +1,28 @@
{
"actions": {
"add": "新增",
"add-next": "插播",
"add-stream": "新增串流",
"cancel": "取消",
"clear": "清除",
"edit": "編輯",
"filter": "篩選",
"login": "登入",
"logout": "退出",
"hide-previous": "隱藏歷史",
"mark-all-played": "全部標記為已播放",
"mark-as-new": "標記為最新",
"mark-as-played": "標記為已播放",
"pair": "遙控配對",
"play": "播放",
"remove": "移除",
"remove-podcast": "移除Podcast",
"rescan": "重新掃描",
"save": "儲存",
"send": "發送",
"show-more": "顯示更多",
"shuffle": "隨機播放"
},
"count": {
"albums": "{count} 張專輯|{count} 張專輯",
"artists": "{count} 位藝人|{count} 位藝人",
@@ -23,70 +47,43 @@
"dialog": {
"add": {
"rss": {
"add": "新增",
"cancel": "取消",
"help": "新增一個可生成播放列表的Podcast RSS鏈接這將允許OwnTone管理訂閱",
"placeholder": "https://url-to-rss",
"processing": "處理中…",
"title": "新增Podcast"
},
"stream": {
"add": "新增",
"cancel": "取消",
"loading": "載入中…",
"placeholder": "https://url-to-stream",
"play": "播放",
"processing": "處理中…",
"title": "新增串流"
}
},
"album": {
"mark-as-played": "標記為已播",
"remove-podcast": "移除Podcast"
},
"playable": {
"add-next": "插播",
"add": "新增",
"play": "播放"
},
"playlist": {
"add-next": "插播",
"add": "新增",
"play": "播放",
"save": {
"cancel": "取消",
"playlist-name": "播放列表名稱",
"save": "儲存",
"saving": "儲存中…",
"title": "儲存播放清單到列表"
}
},
"queue-item": {
"play": "播放",
"quality-value": "{format} {'|'} {samplerate} Hz {'|'} {channels} {'|'} {bitrate} kbit/s",
"remove": "移除"
"quality-value": "{format} {'|'} {samplerate} Hz {'|'} {channels} {'|'} {bitrate} kbit/s"
},
"remote-pairing": {
"cancel": "取消",
"pair": "遙控配對",
"pairing-code": "配對碼",
"title": "請求遙控配對"
},
"track": {
"mark-as-new": "標記為最新",
"mark-as-played": "標記為已播放",
"quality-value": "{format} {'|'} {samplerate} Hz {'|'} {channels} {'|'} {bitrate} kbit/s",
"rating-value": "{rating} / 10"
},
"update": {
"all": "更新所有內容",
"cancel": "取消",
"feeds": "僅更新RSS訂閱內容",
"info": "掃描新的、刪除的和修改的文件",
"local": "僅更新本地資料庫",
"progress": "正在更新本地資料庫…",
"rescan-metadata": "重新掃描未修改文件的中繼資料",
"rescan": "重新掃描",
"spotify": "僅更新Spotify",
"title": "更新資料庫"
}
@@ -100,9 +97,7 @@
},
"list": {
"albums": {
"info": "從資料庫中永久移除該Podcast嗎{separator}(這也將移除RSS播放列表 {name})",
"remove": "移除",
"remove-podcast": "移除Podcast"
"info": "從資料庫中永久移除該Podcast嗎{separator}(這也將移除RSS播放列表 {name})"
},
"spotify": {
"not-playable-track": "曲目無法播放",
@@ -146,11 +141,7 @@
"update": "更新",
"version": "版本 {version}"
},
"album": {
"shuffle": "隨機播放"
},
"albums": {
"filter": "篩選",
"hide-singles-help": "如果啓用,將隱藏僅在播放列表出現的單曲和專輯",
"hide-singles": "隱藏單曲",
"hide-spotify-help": "如果啓用將隱藏僅在Spotify資料庫出現的專輯",
@@ -166,10 +157,8 @@
}
},
"artist": {
"filter": "篩選",
"hide-spotify-help": "如果啓用將隱藏只出現在Spotify庫中的內容",
"hide-spotify": "隱藏來自Spotify的內容",
"shuffle": "隨機播放",
"sort": {
"title": "分類",
"name": "名稱",
@@ -178,7 +167,6 @@
}
},
"artists": {
"filter": "篩選",
"sort": {
"title": "分類",
"name": "名稱",
@@ -191,15 +179,9 @@
"title": "藝人"
},
"audiobooks": {
"album": {
"play": "播放"
},
"albums": {
"title": "有聲書"
},
"artist": {
"play": "播放"
},
"artists": {
"title": "作者"
},
@@ -210,7 +192,6 @@
}
},
"composer": {
"shuffle": "隨機播放",
"sort": {
"title": "分類",
"name": "名稱",
@@ -221,11 +202,9 @@
"title": "作曲家"
},
"files": {
"play": "播放",
"title": "文件"
},
"genre": {
"shuffle": "隨機播放",
"sort": {
"title": "分類",
"name": "名稱",
@@ -236,7 +215,6 @@
"title": "音樂類型"
},
"music": {
"show-more": "顯示更多",
"recently-added": {
"title": "最近新增"
},
@@ -257,33 +235,18 @@
"live": "直播",
"title": "播放清單是空的"
},
"playlist": {
"length": "{length} 曲目",
"shuffle": "隨機播放"
},
"playlists": {
"title": "播放列表"
},
"podcast": {
"cancel": "取消",
"play": "播放",
"remove": "移除",
"remove-info": "從資料庫中永久移除該Podcast{separator}(這也將移除該PodcastRSS列表 {name})",
"remove-podcast": "移除Podcast"
"remove-info": "從資料庫中永久移除該Podcast{separator}(這也將移除該PodcastRSS列表 {name})"
},
"podcasts": {
"add": "新增",
"mark-all-played": "全部標記為已播放",
"new-episodes": "最新單集",
"title": "Podcast",
"update": "更新"
},
"queue": {
"add-stream": "新增串流",
"clear": "清除",
"edit": "編輯",
"hide-previous": "隱藏歷史",
"save": "儲存",
"title": "清單"
},
"radio": {
@@ -329,7 +292,6 @@
"pairing-code": "配對代碼",
"pairing-request": "遠程配對請求來自於 ",
"pairing": "遙控配對",
"send": "發送",
"speaker-pairing-info": "如果您的揚聲器需要配對,請在下面輸入它顯示的 PIN以啓用",
"speaker-pairing": "揚聲器配對和設備驗證",
"verification-code": "驗證碼",
@@ -374,8 +336,6 @@
"reauthorize": "請重新授權 Web API 訪問權限,以授予 OwnTone 以下附加訪問權限:",
"title": "Spotify"
},
"login": "登入",
"logout": "退出",
"password": "密碼",
"username": "用戶名"
},
@@ -387,19 +347,9 @@
}
},
"spotify": {
"album": {
"shuffle": "隨機播放"
},
"artist": {
"shuffle": "隨機播放"
},
"music": {
"featured-playlists": "特色列表",
"new-releases": "最新發行",
"show-more": "顯示更多"
},
"playlist": {
"shuffle": "隨機播放"
"new-releases": "最新發行"
},
"search": {
"albums": "專輯",

View File

@@ -12,11 +12,7 @@
/>
<div class="buttons is-centered-mobile mt-5">
<control-button
:button="{
handler: play,
icon: 'shuffle',
key: 'page.album.shuffle'
}"
:button="{ handler: play, icon: 'shuffle', key: 'actions.shuffle' }"
/>
<control-button
:button="{ handler: showDetails, icon: 'dots-horizontal' }"

View File

@@ -12,11 +12,7 @@
/>
<div class="buttons is-centered-mobile mt-5">
<control-button
:button="{
handler: play,
icon: 'shuffle',
key: 'page.spotify.album.shuffle'
}"
:button="{ handler: play, icon: 'shuffle', key: 'actions.shuffle' }"
/>
<control-button
:button="{ handler: showDetails, icon: 'dots-horizontal' }"

View File

@@ -40,11 +40,7 @@
:button="{ handler: showDetails, icon: 'dots-horizontal' }"
/>
<control-button
:button="{
handler: play,
icon: 'shuffle',
key: 'page.artist.shuffle'
}"
:button="{ handler: play, icon: 'shuffle', key: 'actions.shuffle' }"
/>
</template>
<template #content>

View File

@@ -9,11 +9,7 @@
:button="{ handler: showDetails, icon: 'dots-horizontal' }"
/>
<control-button
:button="{
handler: play,
icon: 'shuffle',
key: 'page.spotify.artist.shuffle'
}"
:button="{ handler: play, icon: 'shuffle', key: 'actions.shuffle' }"
/>
</template>
<template #content>

View File

@@ -41,11 +41,7 @@
:button="{ handler: showDetails, icon: 'dots-horizontal' }"
/>
<control-button
:button="{
handler: play,
icon: 'shuffle',
key: 'page.artist.shuffle'
}"
:button="{ handler: play, icon: 'shuffle', key: 'actions.shuffle' }"
/>
</template>
<template #content>

View File

@@ -9,7 +9,7 @@
:button="{ handler: showDetails, icon: 'dots-horizontal' }"
/>
<control-button
:button="{ handler: play, icon: 'play', key: 'page.files.play' }"
:button="{ handler: play, icon: 'play', key: 'actions.play' }"
/>
</template>
<template #content>

View File

@@ -12,11 +12,7 @@
:button="{ handler: showDetails, icon: 'dots-horizontal' }"
/>
<control-button
:button="{
handler: play,
icon: 'shuffle',
key: 'page.genre.shuffle'
}"
:button="{ handler: play, icon: 'shuffle', key: 'actions.shuffle' }"
/>
</template>
<template #content>

View File

@@ -24,11 +24,7 @@
:button="{ handler: showDetails, icon: 'dots-horizontal' }"
/>
<control-button
:button="{
handler: play,
icon: 'shuffle',
key: 'page.genre.shuffle'
}"
:button="{ handler: play, icon: 'shuffle', key: 'actions.shuffle' }"
/>
</template>
<template #content>

View File

@@ -12,7 +12,7 @@
:button="{
handler: play,
icon: 'shuffle',
key: 'page.playlist.shuffle'
key: 'actions.shuffle'
}"
:disabled="tracks.count === 0"
/>

View File

@@ -12,7 +12,7 @@
:button="{
handler: play,
icon: 'shuffle',
key: 'page.spotify.playlist.shuffle'
key: 'actions.shuffle'
}"
:disabled="playlist.tracks.total === 0"
/>

View File

@@ -12,7 +12,7 @@
/>
<div class="buttons is-centered-mobile mt-5">
<control-button
:button="{ handler: play, icon: 'play', key: 'page.podcast.play' }"
:button="{ handler: play, icon: 'play', key: 'actions.play' }"
/>
<control-button
:button="{ handler: showDetails, icon: 'dots-horizontal' }"

View File

@@ -9,7 +9,7 @@
:button="{
handler: markAllAsPlayed,
icon: 'pencil',
key: 'page.podcasts.mark-all-played'
key: 'actions.mark-all-played'
}"
/>
</template>
@@ -31,14 +31,14 @@
:button="{
handler: updateRss,
icon: 'refresh',
key: 'page.podcasts.update'
key: 'actions.update'
}"
/>
<control-button
:button="{
handler: 'openAddPodcastDialog',
icon: 'rss',
key: 'page.podcasts.add'
key: 'actions.add'
}"
/>
</template>

View File

@@ -9,7 +9,7 @@
:button="{
handler: update_show_next_items,
icon: 'eye-off-outline',
key: 'page.queue.hide-previous'
key: 'actions.hide-previous'
}"
:class="{ 'is-dark': uiStore.show_only_next_items }"
/>
@@ -17,23 +17,23 @@
:button="{
handler: open_add_stream_dialog,
icon: 'web',
key: 'page.queue.add-stream'
key: 'actions.add-stream'
}"
/>
<control-button
:button="{
handler: toggleEdit,
icon: 'pencil',
key: 'page.queue.edit',
disabled: queue_items.length === 0
key: 'actions.edit'
}"
:class="{ 'is-dark': edit_mode }"
:disabled="queue_items.length === 0"
/>
<control-button
:button="{
handler: queue_clear,
icon: 'delete-empty',
key: 'page.queue.clear'
key: 'actions.clear'
}"
:disabled="queue_items.length === 0"
/>
@@ -42,7 +42,7 @@
:button="{
handler: save_dialog,
icon: 'download',
key: 'page.queue.save'
key: 'actions.save'
}"
:disabled="queue_items.length === 0"
/>

View File

@@ -28,7 +28,7 @@
<button
class="button"
type="submit"
v-text="$t('page.settings.devices.send')"
v-text="$t('actions.send')"
/>
</div>
</div>