Compare commits

..

1 Commits

Author SHA1 Message Date
jeffvli e3d7e8e856 add default values for optional docker env (#1500) 2026-01-04 15:36:32 -08:00
751 changed files with 50814 additions and 66240 deletions
-1
View File
@@ -5,7 +5,6 @@
*.jpeg binary
*.ico binary
*.icns binary
*.webp binary
*.eot binary
*.otf binary
*.ttf binary
-189
View File
@@ -1,189 +0,0 @@
# Alpha builds published to Cloudflare R2 with date versioning (e.g. 1.0.0-alpha-20260205).
# Required repo secrets: R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY (from R2 API token in Cloudflare dashboard).
name: Publish Alpha
on:
workflow_dispatch:
inputs:
version:
description: 'Semantic version number (e.g., 1.0.0) - alpha suffix will be added automatically'
required: false
type: string
schedule:
# Run at 3:00 AM PST daily (11:00 UTC; PST = UTC-8)
- cron: '0 11 * * *'
jobs:
check-new-commits:
runs-on: ubuntu-latest
outputs:
has_new_commits: ${{ steps.manual.outputs.has_new_commits || steps.check.outputs['has-new-commits'] }}
steps:
- name: Set has new commits (manual trigger)
id: manual
if: github.event_name == 'workflow_dispatch'
run: echo "has_new_commits=true" >> "$GITHUB_OUTPUT"
- name: Check for new commits (24 hr interval)
id: check
if: github.event_name != 'workflow_dispatch'
uses: adriangl/check-new-commits-action@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
seconds: 86400
prepare:
needs: check-new-commits
if: needs.check-new-commits.outputs.has_new_commits == 'true'
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
steps:
- name: Checkout git repo
uses: actions/checkout@v6
- name: Install Node and PNPM
uses: pnpm/action-setup@v4
with:
version: 10
- name: Install dependencies
run: pnpm install
- name: Set date-based alpha version
id: version
shell: pwsh
run: |
$inputVersion = "${{ github.event.inputs.version }}"
Write-Host "Input version: $inputVersion"
if ($inputVersion -eq "" -or $inputVersion -eq "null") {
# No input version provided (scheduled run or manual without input), auto-increment patch version
Write-Host "No version provided, auto-incrementing patch version..."
$currentVersion = (Get-Content package.json | ConvertFrom-Json).version
Write-Host "Current version: $currentVersion"
$cleanVersion = $currentVersion -replace '-.*$', ''
$versionParts = $cleanVersion.Split('.')
if ($versionParts.Length -ne 3) {
Write-Error "Current version format is invalid: $cleanVersion"
exit 1
}
$major = [int]$versionParts[0]
$minor = [int]$versionParts[1]
$patch = [int]$versionParts[2]
$newPatch = $patch + 1
$inputVersion = "$major.$minor.$newPatch"
Write-Host "Auto-generated version: $inputVersion"
} else {
# Validate semantic version format (major.minor.patch)
$versionPattern = '^\d+\.\d+\.\d+$'
if ($inputVersion -notmatch $versionPattern) {
Write-Error "Invalid version format. Expected semantic version (e.g., 1.0.0), got: $inputVersion"
exit 1
}
}
# Date in YYYYMMDD (PST / America/Los_Angeles)
$pst = [TimeZoneInfo]::FindSystemTimeZoneById('America/Los_Angeles')
$dateInPst = [TimeZoneInfo]::ConvertTimeFromUtc([DateTime]::UtcNow, $pst)
$dateStr = $dateInPst.ToString("yyyyMMdd")
$alphaVersion = "$inputVersion-alpha-$dateStr"
Write-Host "Alpha version: $alphaVersion"
# Update package.json
$packageJson = Get-Content package.json | ConvertFrom-Json
$packageJson.version = $alphaVersion
$packageJson | ConvertTo-Json -Depth 10 | Set-Content package.json
echo "version=$alphaVersion" >> $env:GITHUB_OUTPUT
cleanup:
needs: prepare
runs-on: ubuntu-latest
env:
AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
R2_ENDPOINT_URL: ${{ secrets.R2_ENDPOINT_URL }}
steps:
- name: Delete all objects in R2 bucket
run: |
aws s3 rm s3://feishin-nightly --recursive --endpoint-url $R2_ENDPOINT_URL
publish:
needs: [prepare, cleanup]
runs-on: ${{ matrix.os }}
env:
AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
strategy:
matrix:
os: [windows-latest, macos-26, ubuntu-latest]
steps:
- name: Checkout git repo
uses: actions/checkout@v6
- name: Install Node and PNPM
uses: pnpm/action-setup@v4
with:
version: 10
- name: Install dependencies
run: pnpm install
- name: Set version from prepare job
shell: pwsh
run: |
$version = "${{ needs.prepare.outputs.version }}"
Write-Host "Setting version: $version"
$packageJson = Get-Content package.json | ConvertFrom-Json
$packageJson.version = $version
$packageJson | ConvertTo-Json -Depth 10 | Set-Content package.json
- name: Build and Publish to R2 (Windows)
if: matrix.os == 'windows-latest'
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
retry_on: error
command: |
pnpm run publish:win:alpha
on_retry_command: pnpm cache delete
- name: Build and Publish to R2 (macOS)
if: matrix.os == 'macos-26'
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
retry_on: error
command: |
pnpm run publish:mac:alpha
on_retry_command: pnpm cache delete
- name: Build and Publish to R2 (Linux)
if: matrix.os == 'ubuntu-latest'
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
retry_on: error
command: |
pnpm run publish:linux:alpha
on_retry_command: pnpm cache delete
- name: Build and Publish to R2 (Linux ARM64)
if: matrix.os == 'ubuntu-latest'
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
retry_on: error
command: |
pnpm run publish:linux-arm64:alpha
on_retry_command: pnpm cache delete
+14 -14
View File
@@ -15,12 +15,12 @@ jobs:
version: ${{ steps.version.outputs.version }}
steps:
- name: Checkout git repo
uses: actions/checkout@v6
uses: actions/checkout@v1
- name: Install Node and PNPM
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v4.1.0
with:
version: 10
version: 9
- name: Install dependencies
run: pnpm install
@@ -115,16 +115,16 @@ jobs:
strategy:
matrix:
os: [windows-latest, macos-26, ubuntu-latest]
os: [windows-latest, macos-latest, ubuntu-latest]
steps:
- name: Checkout git repo
uses: actions/checkout@v6
uses: actions/checkout@v1
- name: Install Node and PNPM
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v4.1.0
with:
version: 10
version: 9
- name: Install dependencies
run: pnpm install
@@ -146,7 +146,7 @@ jobs:
if: matrix.os == 'windows-latest'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v3.0.2
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -156,10 +156,10 @@ jobs:
on_retry_command: pnpm cache delete
- name: Build and Publish releases (macOS)
if: matrix.os == 'macos-26'
if: matrix.os == 'macos-latest'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v3.0.2
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -172,7 +172,7 @@ jobs:
if: matrix.os == 'ubuntu-latest'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v3.0.2
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -185,7 +185,7 @@ jobs:
if: matrix.os == 'ubuntu-latest'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v3.0.2
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -199,7 +199,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout git repo
uses: actions/checkout@v6
uses: actions/checkout@v1
- name: Edit release with commits and title
shell: pwsh
@@ -346,7 +346,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout git repo
uses: actions/checkout@v6
uses: actions/checkout@v1
- name: Delete existing prereleases
shell: pwsh
+2 -1
View File
@@ -20,7 +20,7 @@ jobs:
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v6
uses: actions/checkout@v4
- name: Log in to the Container registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
@@ -51,4 +51,5 @@ jobs:
labels: ${{ steps.meta.outputs.labels }}
platforms: |
linux/amd64
linux/arm/v7
linux/arm64/v8
+1 -1
View File
@@ -15,7 +15,7 @@ jobs:
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v6
uses: actions/checkout@v4
- name: Log in to the Container registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
+5 -5
View File
@@ -12,12 +12,12 @@ jobs:
steps:
- name: Checkout git repo
uses: actions/checkout@v6
uses: actions/checkout@v1
- name: Install Node and PNPM
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v4.1.0
with:
version: 10
version: 9
- name: Install dependencies
run: pnpm install
@@ -25,7 +25,7 @@ jobs:
- name: Build and Publish releases
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v3.0.2
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -37,7 +37,7 @@ jobs:
- name: Build and Publish releases (arm64)
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v3.0.2
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
+5 -6
View File
@@ -8,25 +8,24 @@ jobs:
strategy:
matrix:
os: [macos-26]
os: [macos-latest]
steps:
- name: Checkout git repo
uses: actions/checkout@v6
uses: actions/checkout@v1
- name: Install Node and PNPM
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v4.1.0
with:
version: 10
version: 9
- name: Install dependencies
run: pnpm install
- name: Build and Publish releases
env:
NODE_OPTIONS: --max-old-space-size=4096
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v3.0.2
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
+13 -17
View File
@@ -1,17 +1,14 @@
name: Publish (PR)
on:
workflow_dispatch:
pull_request:
branches:
- development
paths:
- 'src/**'
- 'electron-builder*.yml'
jobs:
wait-for-lint:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- name: Wait for Test workflow to complete
@@ -25,28 +22,27 @@ jobs:
publish:
needs: wait-for-lint
if: always() && (needs.wait-for-lint.result == 'success' || needs.wait-for-lint.result == 'skipped')
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [macos-26, ubuntu-latest, windows-latest]
os: [macos-latest, ubuntu-latest, windows-latest]
steps:
- name: Checkout git repo
uses: actions/checkout@v6
uses: actions/checkout@v3
- name: Install Node and PNPM
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v4.1.0
with:
version: 10
version: 9
- name: Install dependencies
run: pnpm install
- name: Build for Windows
if: ${{ matrix.os == 'windows-latest' }}
uses: nick-invision/retry@v3.0.2
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -56,7 +52,7 @@ jobs:
- name: Build for Linux
if: ${{ matrix.os == 'ubuntu-latest' }}
uses: nick-invision/retry@v3.0.2
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -65,8 +61,8 @@ jobs:
pnpm run package:linux:pr
- name: Build for MacOS
if: ${{ matrix.os == 'macos-26' }}
uses: nick-invision/retry@v3.0.2
if: ${{ matrix.os == 'macos-latest' }}
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -86,27 +82,27 @@ jobs:
zip -r dist/linux-binaries.zip dist/*.{AppImage,deb,rpm}
- name: Zip MacOS Binaries
if: ${{ matrix.os == 'macos-26' }}
if: ${{ matrix.os == 'macos-latest' }}
run: |
zip -r dist/macos-binaries.zip dist/*.dmg
- name: Upload Windows Binaries
if: ${{ matrix.os == 'windows-latest' }}
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@v4
with:
name: windows-binaries
path: dist/windows-binaries.zip
- name: Upload Linux Binaries
if: ${{ matrix.os == 'ubuntu-latest' }}
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@v4
with:
name: linux-binaries
path: dist/linux-binaries.zip
- name: Upload MacOS Binaries
if: ${{ matrix.os == 'macos-26' }}
uses: actions/upload-artifact@v7
if: ${{ matrix.os == 'macos-latest' }}
uses: actions/upload-artifact@v4
with:
name: macos-binaries
path: dist/macos-binaries.zip
+4 -4
View File
@@ -12,12 +12,12 @@ jobs:
steps:
- name: Checkout git repo
uses: actions/checkout@v6
uses: actions/checkout@v1
- name: Install Node and PNPM
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v4.1.0
with:
version: 10
version: 9
- name: Install dependencies
run: pnpm install
@@ -25,7 +25,7 @@ jobs:
- name: Build and Publish releases
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v3.0.2
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
+2 -1
View File
@@ -16,5 +16,6 @@ jobs:
- uses: vedantmgoyal9/winget-releaser@main
with:
identifier: jeffvli.Feishin
installers-regex: 'Feishin-*-win-(x64|arm64)\.exe'
installers-regex: 'Feishin-*-win-x64\.exe'
token: ${{ secrets.WINGET_ACC_TOKEN }}
+9 -9
View File
@@ -8,16 +8,16 @@ jobs:
strategy:
matrix:
os: [windows-latest, macos-26, ubuntu-latest]
os: [windows-latest, macos-latest, ubuntu-latest]
steps:
- name: Checkout git repo
uses: actions/checkout@v6
uses: actions/checkout@v1
- name: Install Node and PNPM
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v4.1.0
with:
version: 10
version: 9
- name: Install dependencies
run: pnpm install
@@ -26,7 +26,7 @@ jobs:
if: matrix.os == 'windows-latest'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v3.0.2
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -36,10 +36,10 @@ jobs:
on_retry_command: pnpm cache delete
- name: Build and Publish releases (macOS)
if: matrix.os == 'macos-26'
if: matrix.os == 'macos-latest'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v3.0.2
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -52,7 +52,7 @@ jobs:
if: matrix.os == 'ubuntu-latest'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v3.0.2
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -65,7 +65,7 @@ jobs:
if: matrix.os == 'ubuntu-latest'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v3.0.2
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
+3 -3
View File
@@ -8,12 +8,12 @@ jobs:
steps:
- name: Check out Git repository
uses: actions/checkout@v6
uses: actions/checkout@v1
- name: Install Node.js and PNPM
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v4.1.0
with:
version: 10
version: 9
- name: Install dependencies
run: pnpm install
+1
View File
@@ -1 +1,2 @@
legacy-peer-deps=true
only-built-dependencies=electron,esbuild
+11 -6
View File
@@ -1,5 +1,5 @@
# --- Builder stage
FROM node:23-alpine AS builder
FROM node:23-alpine as builder
WORKDIR /app
# Copy package.json first to cache node_modules
@@ -14,14 +14,19 @@ COPY . .
RUN pnpm run build:web
# --- Production stage
FROM nginxinc/nginx-unprivileged:alpine-slim
FROM nginx:alpine-slim
COPY --chown=nginx:nginx --from=builder /app/out/web /usr/share/nginx/html
COPY --chown=nginx:nginx ./settings.js.template /etc/nginx/templates/settings.js.template
COPY --chown=nginx:nginx ng.conf.template /etc/nginx/templates/default.conf.template
COPY ./settings.js.template /etc/nginx/templates/settings.js.template
COPY ./ng.conf.template /etc/nginx/templates/default.conf.template
COPY ./docker-entrypoint.sh /docker-entrypoint.sh
ENV SERVER_LOCK=false SERVER_NAME="" SERVER_TYPE="" SERVER_URL="" REMOTE_URL=""
ENV LEGACY_AUTHENTICATION="" ANALYTICS_DISABLED="" PUBLIC_PATH="/"
RUN chmod +x /docker-entrypoint.sh
ENV PUBLIC_PATH="/"
ENV LEGACY_AUTHENTICATION="false"
ENV ANALYTICS_DISABLED="false"
EXPOSE 9180
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["nginx", "-g", "daemon off;"]
+3 -16
View File
@@ -43,7 +43,7 @@ Rewrite of [Sonixd](https://github.com/jeffvli/sonixd).
## Screenshots
<a href="./media/preview_full_screen_player.png"><img src="./media/preview_full_screen_player.png" width="49.5%"/></a> <a href="./media/preview_album_artist_detail.png"><img src="./media/preview_album_artist_detail.png" width="49.5%"/></a> <a href="./media/preview_album_detail.png"><img src="./media/preview_album_detail.png" width="49.5%"/></a> <a href="./media/preview_smart_playlist.png"><img src="./media/preview_smart_playlist.png" width="49.5%"/></a>
<a href="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_full_screen_player.png"><img src="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_full_screen_player.png" width="49.5%"/></a> <a href="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_album_artist_detail.png"><img src="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_album_artist_detail.png" width="49.5%"/></a> <a href="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_album_detail.png"><img src="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_album_detail.png" width="49.5%"/></a> <a href="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_smart_playlist.png"><img src="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_smart_playlist.png" width="49.5%"/></a>
## Getting Started
@@ -59,11 +59,7 @@ For media keys to work, you will be prompted to allow Feishin to be a Trusted Ac
#### Linux Notes
Feishin is available in [Flathub](https://flathub.org/en/apps/org.jeffvli.feishin).
Alternatively, you can install it as an Appimage.
We provide a small install script to download the latest `.AppImage`, make it executable, and also download the icons required by Desktop Environments.
Finally, it generates a `.desktop` file to add Feishin to your Application Launcher.
We provide a small install script to download the latest `.AppImage`, make it executable, and also download the icons required by Desktop Environments. Finally, it generates a `.desktop` file to add Feishin to your Application Launcher.
Simply run the installer like this:
@@ -118,7 +114,6 @@ services:
- SERVER_LOCK=true # When true AND name/type/url are set, only username/password can be toggled
- SERVER_TYPE=jellyfin # the allowed types are: jellyfin, navidrome, subsonic. These values are case insensitive
- SERVER_URL= # http://address:port or https://address:port
- REMOTE_URL= # http://address or https://address
- LEGACY_AUTHENTICATION=false # When SERVER_LOCK is true, sets the legacy (plaintext) authentication flag for Subsonic/OpenSubsonic servers
- ANALYTICS_DISABLED=true # Set to true to disable Umami analytics tracking
ports:
@@ -139,11 +134,7 @@ services:
4. _Optional_ - To hard code the server url, pass the following environment variables: `SERVER_NAME`, `SERVER_TYPE` (one of `jellyfin` or `navidrome` or `subsonic`), `SERVER_URL`. To prevent users from changing these settings, pass `SERVER_LOCK=true`. This can only be set if all three of the previous values are set. When `SERVER_LOCK=true`, you can also set `LEGACY_AUTHENTICATION=true` or `LEGACY_AUTHENTICATION=false` to configure the legacy authentication flag for the server (only applicable for Subsonic/OpenSubsonic servers).
5. _Optional_ - If your server uses a separate public-facing URL than what integrating applications use internally to communicate with your server, such as a separate Navidrome `ShareURL`, set `REMOTE_URL` to said public-facing URL.
6. _Optional_ - To disable Umami analytics tracking in the Docker/web version, set the environment variable `ANALYTICS_DISABLED=true`. When enabled, the analytics script will not be loaded and all tracking will be disabled.
7. _Optional_ - App settings (theme, language, sidebar options, etc.) can be overridden with environment variables on first run. The variables use the `FS_` prefix (e.g. `FS_GENERAL_THEME=defaultDark`, `FS_GENERAL_LANGUAGE=de`). See [the settings environment variable documentation](docs/ENV_SETTINGS.md) for the full list.
5. _Optional_ - To disable Umami analytics tracking in the Docker/web version, set the environment variable `ANALYTICS_DISABLED=true`. When enabled, the analytics script will not be loaded and all tracking will be disabled.
## FAQ
@@ -169,10 +160,6 @@ Feishin supports any music server that implements a [Navidrome](https://www.navi
- [Qm-Music](https://github.com/chenqimiao/qm-music)
- More (?)
- [Plex](https://www.plex.tv/media-server-downloads)
- [Feishin fork by lux032](https://github.com/lux032/feishin) - Plex is not natively supported. Use the fork by lux032 to use Plex with Feishin.
### I have the issue "The SUID sandbox helper binary was found, but is not configured correctly" on Linux
This happens when you have user (unprivileged) namespaces disabled (`sysctl kernel.unprivileged_userns_clone` returns 0). You can fix this by either enabling unprivileged namespaces, or by making the `chrome-sandbox` Setuid.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 651 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 277 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 447 B

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 422 KiB

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 48 KiB

+4 -5
View File
@@ -1,16 +1,15 @@
services:
feishin:
container_name: feishin
image: "ghcr.io/jeffvli/feishin:latest"
image: ghcr.io/jeffvli/feishin:latest
restart: unless-stopped
environment:
- SERVER_NAME=jellyfin # pre-defined server name
- SERVER_LOCK=false # When true AND name/type/url are set, only username/password can be toggled
- SERVER_LOCK=true # When true AND name/type/url are set, only username/password can be toggled
- SERVER_TYPE=jellyfin # the allowed types are: jellyfin, navidrome, subsonic. These values are case insensitive
- SERVER_URL=http://localhost:8096 # http://address:port or https://address:port
# - REMOTE_URL=http://share.localhost # Used for compatibility with external functionality, such as custom sharing URLs on Navidrome
- SERVER_URL= # http://address:port or https://address:port
- LEGACY_AUTHENTICATION=false # When SERVER_LOCK is true, sets the legacyauth flag for server authentication (true or false)
- ANALYTICS_DISABLED=false # Set to true to disable Umami analytics tracking
- ANALYTICS_DISABLED=false # When true, disables analytics
ports:
- 9180:9180
# Alternatively, to restrict to only localhost, - 127.0.0.1:9180:8190
+7
View File
@@ -0,0 +1,7 @@
#!/bin/sh
# Set default values for environment variables if not already set
export LEGACY_AUTHENTICATION=${LEGACY_AUTHENTICATION:-false}
export ANALYTICS_DISABLED=${ANALYTICS_DISABLED:-false}
# Execute the original nginx command
exec "$@"
-138
View File
@@ -1,138 +0,0 @@
# Environment variables for settings (web / Docker)
These variables override app settings **on first run** when no persisted settings exist. They are injected via `settings.js` (from `settings.js.template`) and only apply to the **web** build.
**Format:** All values are strings; booleans use `true`/`false`, numbers are numeric strings. Leave unset or empty to use the default.
---
## General
| Setting | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `general.accent` | `rgb(53, 116, 252)` | `FS_GENERAL_ACCENT` | CSS `rgb(r, g, b)` string (e.g. `rgb(53, 116, 252)`). Invalid values are ignored. |
| `general.albumBackground` | `false` | `FS_GENERAL_ALBUM_BACKGROUND` | `true` / `false` — Show album background image. |
| `general.albumBackgroundBlur` | `3` | `FS_GENERAL_ALBUM_BACKGROUND_BLUR` | Blur amount for album background (number). |
| `general.artistBackground` | `true` | `FS_GENERAL_ARTIST_BACKGROUND` | `true` / `false` — Show artist background image. |
| `general.artistBackgroundBlur` | `3` | `FS_GENERAL_ARTIST_BACKGROUND_BLUR` | Blur amount for artist background (number). |
| `general.blurExplicitImages` | `false` | `FS_GENERAL_BLUR_EXPLICIT_IMAGES` | `true` / `false` — Blur explicit images. |
| `general.combinedLyricsAndVisualizer` | `false` | `FS_GENERAL_COMBINED_LYRICS_AND_VISUALIZER` | `true` / `false` — Combine lyrics and visualizer panel. |
| `general.enableGridMultiSelect` | `false` | `FS_GENERAL_ENABLE_GRID_MULTI_SELECT` | `true` / `false` — Enable multi-select in grid views. |
| `general.externalLinks` | `true` | `FS_GENERAL_EXTERNAL_LINKS` | `true` / `false` — Show external links in UI. |
| `general.followCurrentSong` | `true` | `FS_GENERAL_FOLLOW_CURRENT_SONG` | `true` / `false` — Follow current song in list. |
| `general.followSystemTheme` | `false` | `FS_GENERAL_FOLLOW_SYSTEM_THEME` | `true` / `false` — Use OS light/dark preference. |
| `general.homeFeature` | `true` | `FS_GENERAL_HOME_FEATURE` | `true` / `false` — Show home featured carousel. |
| `general.homeFeatureStyle` | `single` | `FS_GENERAL_HOME_FEATURE_STYLE` | `multiple` / `single` — Home featured carousel style. |
| `general.language` | `en` | `FS_GENERAL_LANGUAGE` | UI language code (e.g. `en`, `de`, `fr`). |
| `general.theme` | `defaultDark` | `FS_GENERAL_THEME` | One of: `ayuDark`, `ayuLight`, `catppuccinLatte`, `catppuccinMocha`, `defaultDark`, `defaultLight`, `dracula`, `githubDark`, `githubLight`, `glassyDark`, `gruvboxDark`, `gruvboxLight`, `highContrastDark`, `highContrastLight`, `materialDark`, `materialLight`, `monokai`, `nightOwl`, `nord`, `oneDark`, `rosePine`, `rosePineDawn`, `rosePineMoon`, `shadesOfPurple`, `solarizedDark`, `solarizedLight`, `tokyoNight`, `vscodeDarkPlus`, `vscodeLightPlus`. |
| `general.themeDark` | `defaultDark` | `FS_GENERAL_THEME_DARK` | Same as theme (used when system is dark). |
| `general.themeLight` | `defaultLight` | `FS_GENERAL_THEME_LIGHT` | Same as theme (used when system is light). |
| `general.lastfmApiKey` | *(empty)* | `FS_GENERAL_LASTFM_API_KEY` | Last.fm API key. |
| `general.lastFM` | `true` | `FS_GENERAL_LAST_FM` | `true` / `false` — Enable Last.fm. |
| `general.listenBrainz` | `true` | `FS_GENERAL_LISTEN_BRAINZ` | `true` / `false` — ListenBrainz links. |
| `general.musicBrainz` | `true` | `FS_GENERAL_MUSIC_BRAINZ` | `true` / `false` — MusicBrainz links. |
| `general.nativeAspectRatio` | `false` | `FS_GENERAL_NATIVE_ASPECT_RATIO` | `true` / `false` — Use native cover art aspect ratio. |
| `general.pathReplace` | *(empty)* | `FS_GENERAL_PATH_REPLACE` | Path pattern to replace (e.g. server path in Docker). |
| `general.pathReplaceWith` | *(empty)* | `FS_GENERAL_PATH_REPLACE_WITH` | Replacement path. |
| `general.playerbarOpenDrawer` | `false` | `FS_GENERAL_PLAYERBAR_OPEN_DRAWER` | `true` / `false` — Open queue/lyrics as drawer from player bar. |
| `general.primaryShade` | `6` | `FS_GENERAL_PRIMARY_SHADE` | Mantine primary shade 09 (number). |
| `general.qobuz` | `true` | `FS_GENERAL_QOBUZ` | `true` / `false` — Qobuz links. |
| `general.resume` | `true` | `FS_GENERAL_RESUME` | `true` / `false` — Resume playback on load. |
| `general.showLyricsInSidebar` | `true` | `FS_GENERAL_SHOW_LYRICS_IN_SIDEBAR` | `true` / `false` — Show lyrics in sidebar. |
| `general.showRatings` | `true` | `FS_GENERAL_SHOW_RATINGS` | `true` / `false` — Show star ratings. |
| `general.showVisualizerInSidebar` | `true` | `FS_GENERAL_SHOW_VISUALIZER_IN_SIDEBAR` | `true` / `false` — Show visualizer in sidebar. |
| `general.sidebarCollapsedNavigation` | `true` | `FS_GENERAL_SIDEBAR_COLLAPSED_NAVIGATION` | `true` / `false` — Start with collapsed sidebar nav. |
| `general.sidebarCollapseShared` | `false` | `FS_GENERAL_SIDEBAR_COLLAPSE_SHARED` | `true` / `false` — Share sidebar collapse state. |
| `general.sidebarPlaylistFolders` | `true` | `FS_GENERAL_SIDEBAR_PLAYLIST_FOLDERS` | `true` / `false` — Group playlists into folders by name separator. |
| `general.sidebarPlaylistFolderSeparator` | `/` | `FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_SEPARATOR` | Character or string that separates folder levels in a playlist name. Empty = use default. |
| `general.sidebarPlaylistFolderTreeIndent` | `16` | `FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_TREE_INDENT` | Pixels each tree level is indented (064). |
| `general.sidebarPlaylistFolderTreeLineColor` | *(empty)* | `FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_TREE_LINE_COLOR` | CSS color for tree connecting lines. Empty = theme default. |
| `general.sidebarPlaylistFolderView` | `tree` | `FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_VIEW` | `single` / `tree` / `navigation` — How folders are displayed in the sidebar. |
| `general.sidebarPlaylistList` | `true` | `FS_GENERAL_SIDEBAR_PLAYLIST_LIST` | `true` / `false` — Show playlist list in sidebar. |
| `general.sidebarPlaylistMode` | `expanded` | `FS_GENERAL_SIDEBAR_PLAYLIST_MODE` | `compact` / `expanded` — Sidebar playlist row layout. |
| `general.sidebarPlaylistSorting` | `false` | `FS_GENERAL_SIDEBAR_PLAYLIST_SORTING` | `true` / `false` — Enable playlist sorting in sidebar. |
| `general.sideQueueType` | `sideQueue` | `FS_GENERAL_SIDE_QUEUE_TYPE` | `sideDrawerQueue` / `sideQueue` — Side play queue style. |
| `general.sideQueueLayout` | `horizontal` | `FS_GENERAL_SIDE_QUEUE_LAYOUT` | `horizontal` / `vertical` — Attached side queue layout orientation. |
| `general.useThemeAccentColor` | `false` | `FS_GENERAL_USE_THEME_ACCENT_COLOR` | `true` / `false` — Use themes accent color instead of custom. |
| `general.useThemePrimaryShade` | `true` | `FS_GENERAL_USE_THEME_PRIMARY_SHADE` | `true` / `false` — Use themes primary shade. |
| `general.zoomFactor` | `100` | `FS_GENERAL_ZOOM_FACTOR` | UI zoom percentage (number). |
---
## Playback
| Setting path | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `playback.mediaSession` | `false` | `FS_PLAYBACK_MEDIA_SESSION` | `true` / `false` — Media Session API (e.g. browser/media keys). |
| `playback.webAudio` | `true` | `FS_PLAYBACK_WEB_AUDIO` | `true` / `false` — Use Web Audio for playback. |
| `playback.audioFadeOnStatusChange` | `true` | `FS_PLAYBACK_AUDIO_FADE_ON_STATUS_CHANGE` | `true` / `false` — Fade on play/pause. |
| `playback.preservePitch` | `true` | `FS_PLAYBACK_PRESERVE_PITCH` | `true` / `false` — Preserve pitch when changing speed. |
| `playback.scrobble.enabled` | `true` | `FS_PLAYBACK_SCROBBLE_ENABLED` | `true` / `false` — Enable scrobbling. |
| `playback.scrobble.notify` | `false` | `FS_PLAYBACK_SCROBBLE_NOTIFY` | `true` / `false` — Scrobble notifications. |
| `playback.scrobble.scrobbleAtDuration` | `240` | `FS_PLAYBACK_SCROBBLE_AT_DURATION` | Seconds of playback before scrobble. |
| `playback.scrobble.scrobbleAtPercentage` | `75` | `FS_PLAYBACK_SCROBBLE_AT_PERCENTAGE` | Percentage of track before scrobble. |
| `playback.transcode.enabled` | `false` | `FS_PLAYBACK_TRANSCODE_ENABLED` | `true` / `false` — Enable transcoding. |
| `playback.transcode.format` | *(unset)* | `FS_PLAYBACK_TRANSCODE_FORMAT` | Transcode format string (codec/container), e.g. server-specific value. Empty = use default. |
| `playback.transcode.bitrate` | *(unset)* | `FS_PLAYBACK_TRANSCODE_BITRATE` | Transcode bitrate (number, kbps or as defined by server). |
| `playback.filters` | `[]` | `FS_PLAYBACK_FILTERS` | JSON array of player filters: each object needs `id`, `field`, `operator`, `value`; optional `isEnabled`. Invalid JSON or shape is ignored. |
---
## Discord
| Setting path | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `discord.enabled` | `false` | `FS_DISCORD_ENABLED` | `true` / `false` — Discord rich presence. |
| `discord.clientId` | *(built-in)* | `FS_DISCORD_CLIENT_ID` | Custom Discord application ID. |
| `discord.displayType` | `feishin` | `FS_DISCORD_DISPLAY_TYPE` | `artist` / `feishin` / `song`. |
| `discord.linkType` | `none` | `FS_DISCORD_LINK_TYPE` | `last_fm` / `musicbrainz` / `musicbrainz_last_fm` / `none`. |
| `discord.showAsListening` | `false` | `FS_DISCORD_SHOW_AS_LISTENING` | `true` / `false`. |
| `discord.showPaused` | `true` | `FS_DISCORD_SHOW_PAUSED` | `true` / `false` — Show paused state. |
| `discord.showServerImage` | `false` | `FS_DISCORD_SHOW_SERVER_IMAGE` | `true` / `false`. |
| `discord.showStateIcon` | `true` | `FS_DISCORD_SHOW_STATE_ICON` | `true` / `false`. |
---
## Lyrics
| Setting path | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `lyrics.fetch` | `true` | `FS_LYRICS_FETCH` | `true` / `false` — Fetch lyrics. |
| `lyrics.follow` | `true` | `FS_LYRICS_FOLLOW` | `true` / `false` — Follow current line. |
| `lyrics.delayMs` | `0` | `FS_LYRICS_DELAY_MS` | Sync delay in milliseconds. |
| `lyrics.preferLocalLyrics` | `true` | `FS_LYRICS_PREFER_LOCAL` | `true` / `false` — Prefer local lyric files. |
| `lyrics.showMatch` | `true` | `FS_LYRICS_SHOW_MATCH` | `true` / `false`. |
| `lyrics.showProvider` | `true` | `FS_LYRICS_SHOW_PROVIDER` | `true` / `false`. |
| `lyrics.enableAutoTranslation` | `false` | `FS_LYRICS_ENABLE_AUTO_TRANSLATION` | `true` / `false`. |
| `lyrics.translationApiKey` | *(empty)* | `FS_LYRICS_TRANSLATION_API_KEY` | API key for lyric translation. |
| `lyrics.translationTargetLanguage` | `en` | `FS_LYRICS_TRANSLATION_TARGET_LANGUAGE` | Target language code. |
| `lyrics.alignment` | `center` | `FS_LYRICS_ALIGNMENT` | `center` / `left` / `right`. |
---
## Auto DJ
| Setting path | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `autoDJ.enabled` | `false` | `FS_AUTO_DJ_ENABLED` | `true` / `false`. |
| `autoDJ.itemCount` | `5` | `FS_AUTO_DJ_ITEM_COUNT` | Number of items to add. |
| `autoDJ.timing` | `1` | `FS_AUTO_DJ_TIMING` | Timing value (number). |
---
## CSS
| Setting path | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `css.content` | *(empty)* | `FS_CSS_CONTENT` | Custom CSS string (sanitized like in-app custom CSS). Set `FS_CSS_ENABLED=true` to apply. |
| `css.enabled` | `false` | `FS_CSS_ENABLED` | `true` / `false` — Enable custom CSS. |
---
## Font
| Setting path | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `font.type` | `builtIn` | `FS_FONT_TYPE` | `builtIn` / `system` / `custom`. |
| `font.builtIn` | `Inter` | `FS_FONT_BUILT_IN` | Built-in font name. |
| `font.system` | *(empty)* | `FS_FONT_SYSTEM` | System font name (when type is `system`). |
-74
View File
@@ -1,74 +0,0 @@
appId: org.jeffvli.feishin
productName: Feishin
artifactName: ${productName}-${version}-${os}-${arch}.${ext}
electronVersion: 39.4.0
directories:
buildResources: assets
files:
- 'out/**/*'
- 'package.json'
extraResources:
- assets/**
asarUnpack:
- resources/**
win:
target:
- target: zip
arch:
- x64
- arm64
- target: nsis
arch:
- x64
- arm64
icon: assets/icons/icon.ico
nsis:
allowToChangeInstallationDirectory: true
oneClick: false
shortcutName: ${productName}
uninstallDisplayName: ${productName}
createDesktopShortcut: always
mac:
target:
- target: dmg
arch:
- arm64
- x64
- target: zip
arch:
- arm64
- x64
icon: media/feishin.icon
type: distribution
hardenedRuntime: false
identity: '-'
gatekeeperAssess: false
notarize: false
extendInfo:
NSAudioCaptureUsageDescription: "System audio access is required for mpv visualizer capture in Feishin"
NSLocalNetworkUsageDescription: 'Local network is necessary for accessing servers hosted on the same system as Feishin'
dmg:
contents: [{ x: 130, y: 220 }, { x: 410, y: 220, type: link, path: /Applications }]
linux:
target:
- AppImage
- deb
- tar.xz
category: AudioVideo;Audio;Player
icon: assets/icons/icon.png
artifactName: ${productName}-${os}-${arch}.${ext}
toolsets:
appimage: '1.0.2'
npmRebuild: false
publish:
provider: s3
bucket: feishin-nightly
channel: alpha
endpoint: https://065f090c64de2dc707dd70ac72db9669.r2.cloudflarestorage.com
+12 -27
View File
@@ -1,7 +1,7 @@
appId: org.jeffvli.feishin
productName: Feishin
artifactName: ${productName}-${version}-${os}-${arch}.${ext}
electronVersion: 39.4.0
electronVersion: 39.2.7
directories:
buildResources: assets
files:
@@ -13,15 +13,9 @@ asarUnpack:
- resources/**
win:
target:
- target: zip
arch:
- x64
- arm64
- target: nsis
arch:
- x64
- arm64
icon: assets/icons/icon.ico
- zip
- nsis
icon: assets/icons/icon.png
nsis:
allowToChangeInstallationDirectory: true
@@ -32,23 +26,17 @@ nsis:
mac:
target:
- target: dmg
arch:
- arm64
- x64
- target: zip
arch:
- arm64
- x64
icon: media/feishin.icon
target: default
arch:
- arm64
- x64
icon: assets/icons/icon.icns
type: distribution
hardenedRuntime: false
identity: '-'
hardenedRuntime: true
entitlements: assets/entitlements.mac.plist
entitlementsInherit: assets/entitlements.mac.plist
gatekeeperAssess: false
notarize: false
extendInfo:
NSAudioCaptureUsageDescription: "System audio access is required for mpv visualizer capture in Feishin"
NSLocalNetworkUsageDescription: 'Local network is necessary for accessing servers hosted on the same system as Feishin'
dmg:
contents: [{ x: 130, y: 220 }, { x: 410, y: 220, type: link, path: /Applications }]
@@ -62,9 +50,6 @@ linux:
icon: assets/icons/icon.png
artifactName: ${productName}-${os}-${arch}.${ext}
toolsets:
appimage: '1.0.2'
npmRebuild: false
publish:
provider: github
+12 -28
View File
@@ -1,7 +1,7 @@
appId: org.jeffvli.feishin
productName: Feishin
artifactName: ${productName}-${version}-${os}-${arch}.${ext}
electronVersion: 39.4.0
electronVersion: 39.2.7
directories:
buildResources: assets
files:
@@ -13,15 +13,9 @@ asarUnpack:
- resources/**
win:
target:
- target: zip
arch:
- x64
- arm64
- target: nsis
arch:
- x64
- arm64
icon: assets/icons/icon.ico
- zip
- nsis
icon: assets/icons/icon.png
nsis:
allowToChangeInstallationDirectory: true
@@ -32,23 +26,17 @@ nsis:
mac:
target:
- target: dmg
arch:
- arm64
- x64
- target: zip
arch:
- arm64
- x64
icon: media/feishin.icon
target: default
arch:
- arm64
- x64
icon: assets/icons/icon.icns
type: distribution
hardenedRuntime: false
identity: '-'
hardenedRuntime: true
entitlements: assets/entitlements.mac.plist
entitlementsInherit: assets/entitlements.mac.plist
gatekeeperAssess: false
notarize: false
extendInfo:
NSAudioCaptureUsageDescription: 'System audio access is required for mpv visualizer capture in Feishin'
NSLocalNetworkUsageDescription: 'Local network is necessary for accessing servers hosted on the same system as Feishin'
dmg:
contents: [{ x: 130, y: 220 }, { x: 410, y: 220, type: link, path: /Applications }]
@@ -62,11 +50,7 @@ linux:
icon: assets/icons/icon.png
artifactName: ${productName}-${os}-${arch}.${ext}
toolsets:
appimage: '1.0.2'
npmRebuild: false
afterAllArtifactBuild: scripts/after-all-artifact-build.mjs
publish:
provider: github
owner: jeffvli
+2 -11
View File
@@ -1,13 +1,11 @@
import react from '@vitejs/plugin-react';
import { externalizeDepsPlugin, UserConfig } from 'electron-vite';
import { resolve } from 'path';
import conditionalImportPlugin from 'vite-plugin-conditional-import';
import dynamicImportPlugin from 'vite-plugin-dynamic-import';
import { ViteEjsPlugin } from 'vite-plugin-ejs';
import { createReactPlugin } from './vite.react-plugin';
const currentOSEnv = process.platform;
const electronRendererTarget = 'chrome87';
const config: UserConfig = {
main: {
@@ -38,9 +36,6 @@ const config: UserConfig = {
},
},
preload: {
build: {
sourcemap: true,
},
plugins: [externalizeDepsPlugin()],
resolve: {
alias: {
@@ -53,11 +48,7 @@ const config: UserConfig = {
build: {
cssMinify: 'esbuild',
minify: 'esbuild',
modulePreload: {
polyfill: false,
},
sourcemap: true,
target: electronRendererTarget,
},
css: {
modules: {
@@ -65,7 +56,7 @@ const config: UserConfig = {
localsConvention: 'camelCase',
},
},
plugins: [createReactPlugin(), ViteEjsPlugin({ web: false })],
plugins: [react(), ViteEjsPlugin({ web: false })],
resolve: {
alias: {
'/@/i18n': resolve('src/i18n'),
+1 -1
View File
@@ -25,7 +25,7 @@ export default tseslint.config(
'react-refresh': eslintPluginReactRefresh,
},
rules: {
...eslintPluginReactHooks.configs['recommended-latest'].rules,
...eslintPluginReactHooks.configs.recommended.rules,
...eslintPluginReactRefresh.configs.vite.rules,
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/no-duplicate-enum-values': 'off',
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

-1
View File
@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512"><g style="display:inline" transform="translate(-53.452 -43.352)scale(1.11813)"><circle cx="256" cy="240.312" r="21.5" style="opacity:1;fill:#000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.19597;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;filter:url(#filter249)"/><path d="M220.85 277.951 183.5 315.6l36 36.1 20-19.7s5.856-6.2 16.5-6.2 16.5 6.2 16.5 6.2l20 19.7 36-36.1-37.35-37.649A51.5 51.5 0 0 1 256 291.812a51.5 51.5 0 0 1-35.15-13.86" style="opacity:1;fill:#000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter249)"/><path d="M256 145.4a25.7 25.7 0 0 0-18.229 7.551L66.97 323.47A25.42 25.42 0 0 0 59.5 341.5c0 14.083 11.417 25.5 25.5 25.5a25.42 25.42 0 0 0 18.031-7.469l103.895-103.597a51.5 51.5 0 0 1-2.426-15.621 51.5 51.5 0 0 1 51.5-51.5 51.5 51.5 0 0 1 51.5 51.5 51.5 51.5 0 0 1-2.426 15.62L408.97 359.532A25.42 25.42 0 0 0 427 367c14.083 0 25.5-11.417 25.5-25.5a25.42 25.42 0 0 0-7.469-18.031L274.23 152.95a25.7 25.7 0 0 0-18.229-7.55" style="display:inline;opacity:1;fill:#000;fill-opacity:1;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;paint-order:markers fill stroke;filter:url(#filter249)"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

-202
View File
@@ -1,202 +0,0 @@
{
"fill-specializations" : [
{
"value" : {
"linear-gradient" : [
"display-p3:0.87416,0.87416,0.87416,1.00000",
"display-p3:0.99575,0.99575,0.99575,1.00000"
],
"orientation" : {
"start" : {
"x" : 0.5,
"y" : 1
},
"stop" : {
"x" : 0.5,
"y" : 0.3
}
}
}
},
{
"appearance" : "dark",
"value" : "system-dark"
}
],
"groups" : [
{
"blend-mode-specializations" : [
{
"appearance" : "tinted",
"value" : "normal"
}
],
"blur-material-specializations" : [
{
"value" : 0.7
},
{
"appearance" : "dark",
"value" : 0.7
},
{
"appearance" : "tinted",
"value" : null
}
],
"hidden" : false,
"layers" : [
{
"blend-mode-specializations" : [
{
"appearance" : "tinted",
"value" : "normal"
}
],
"fill-specializations" : [
{
"value" : {
"solid" : "extended-gray:0.00000,1.00000"
}
},
{
"appearance" : "dark",
"value" : {
"linear-gradient" : [
"display-p3:0.78674,0.78674,0.78674,1.00000",
"display-p3:0.87416,0.87416,0.87416,1.00000"
],
"orientation" : {
"start" : {
"x" : 0.5,
"y" : 1
},
"stop" : {
"x" : 0.5,
"y" : 0
}
}
}
},
{
"appearance" : "tinted",
"value" : {
"solid" : "gray:1.00000,1.00000"
}
}
],
"glass-specializations" : [
{
"value" : true
},
{
"appearance" : "dark",
"value" : true
},
{
"appearance" : "tinted",
"value" : true
}
],
"hidden" : false,
"image-name" : "feishin.svg",
"name" : "feishin",
"opacity-specializations" : [
{
"value" : 1
},
{
"appearance" : "tinted",
"value" : 1
}
],
"position" : {
"scale" : 0.79,
"translation-in-points" : [
18,
-2
]
}
}
],
"lighting-specializations" : [
{
"value" : "individual"
},
{
"appearance" : "tinted",
"value" : "combined"
}
],
"position" : {
"scale" : 2.2,
"translation-in-points" : [
0,
0
]
},
"shadow-specializations" : [
{
"value" : {
"kind" : "neutral",
"opacity" : 1
}
},
{
"appearance" : "dark",
"value" : {
"kind" : "layer-color",
"opacity" : 0.5
}
},
{
"appearance" : "tinted",
"value" : {
"kind" : "neutral",
"opacity" : 1
}
}
],
"specular-specializations" : [
{
"value" : false
},
{
"appearance" : "dark",
"value" : false
},
{
"appearance" : "tinted",
"value" : true
}
],
"translucency-specializations" : [
{
"value" : {
"enabled" : true,
"value" : 0.29
}
},
{
"appearance" : "dark",
"value" : {
"enabled" : false,
"value" : 0.29
}
},
{
"appearance" : "tinted",
"value" : {
"enabled" : true,
"value" : 0.5
}
}
]
}
],
"supported-platforms" : {
"squares" : [
"macOS"
]
}
}
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 214 KiB

BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

-104
View File
@@ -1,104 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="512"
height="512"
viewBox="0 0 512 512"
version="1.1"
id="svg1"
xml:space="preserve"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs1"><linearGradient
id="linearGradient1"><stop
style="stop-color:#dfdfdf;stop-opacity:1;"
offset="0"
id="stop1" /><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop2" /></linearGradient><filter
style="color-interpolation-filters:sRGB"
id="filter249"
x="-0.61395349"
y="-0.61395349"
width="2.227907"
height="2.5069767"><feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
id="feFlood247" /><feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="1.000000"
id="feGaussianBlur247" /><feOffset
result="offset"
in="blur"
dx="0.000000"
dy="2"
id="feOffset247" /><feComposite
result="comp1"
operator="in"
in="flood"
in2="offset"
id="feComposite248" /><feComposite
result="fbSourceGraphic"
operator="over"
in="SourceGraphic"
id="feComposite249"
in2="comp1" /><feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix122" /><feFlood
id="feFlood122"
result="flood"
in="fbSourceGraphic"
flood-opacity="0.196078"
flood-color="rgb(0,0,0)" /><feGaussianBlur
id="feGaussianBlur122"
result="blur"
in="fbSourceGraphic"
stdDeviation="10.000000" /><feOffset
id="feOffset122"
result="offset"
in="blur"
dx="0.000000"
dy="10.000000" /><feComposite
id="feComposite122"
result="comp1"
operator="in"
in="flood"
in2="offset" /><feComposite
id="feComposite123"
result="comp2"
operator="over"
in="fbSourceGraphic"
in2="comp1" /></filter><linearGradient
xlink:href="#linearGradient1"
id="linearGradient2"
x1="256"
y1="0"
x2="256"
y2="512"
gradientUnits="userSpaceOnUse" /></defs><g
id="layer1"
style="display:inline"><circle
style="display:inline;fill:url(#linearGradient2);stroke-width:25;stroke-linecap:round;stroke-linejoin:round;paint-order:markers fill stroke"
id="background"
cx="256"
cy="256"
r="256" /><circle
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.19597;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;filter:url(#filter249)"
id="dot"
cx="256"
cy="240.31155"
r="21.5" /><path
id="bottom"
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter249)"
d="M 220.84961,277.95117 183.5,315.59961 219.5,351.69922 239.5,332 c 0,0 5.85615,-6.19922 16.5,-6.19922 10.64385,0 16.5,6.19922 16.5,6.19922 l 20,19.69922 36,-36.09961 -37.34961,-37.64844 A 51.5,51.5 0 0 1 256,291.8125 51.5,51.5 0 0 1 220.84961,277.95117 Z" /><path
id="main"
style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;paint-order:markers fill stroke;filter:url(#filter249)"
d="m 256,145.40039 c -7.11895,0 -13.56326,2.88552 -18.22852,7.55078 L 66.96875,323.46875 C 62.354158,328.08334 59.5,334.45837 59.5,341.5 c 0,14.08326 11.416739,25.5 25.5,25.5 7.04163,0 13.41666,-2.85416 18.03125,-7.46875 L 206.92578,255.93359 A 51.5,51.5 0 0 1 204.5,240.3125 a 51.5,51.5 0 0 1 51.5,-51.5 51.5,51.5 0 0 1 51.5,51.5 51.5,51.5 0 0 1 -2.42578,15.62109 L 408.96875,359.53125 C 413.58334,364.14585 419.95837,367 427,367 c 14.08326,0 25.5,-11.41674 25.5,-25.5 0,-7.04163 -2.85415,-13.41666 -7.46875,-18.03125 L 274.22852,152.95117 C 269.56326,148.2859 263.11895,145.40039 256,145.40039 Z" /></g></svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 733 KiB

After

Width:  |  Height:  |  Size: 644 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 371 KiB

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 869 KiB

After

Width:  |  Height:  |  Size: 465 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 990 KiB

After

Width:  |  Height:  |  Size: 887 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 356 KiB

After

Width:  |  Height:  |  Size: 396 KiB

-3
View File
@@ -1,6 +1,5 @@
server {
listen 9180;
listen [::]:9180;
sendfile on;
default_type application/octet-stream;
@@ -20,11 +19,9 @@ server {
location ${PUBLIC_PATH}settings.js {
alias /etc/nginx/conf.d/settings.js;
add_header Cache-Control "no-store";
}
location ${PUBLIC_PATH}/settings.js {
alias /etc/nginx/conf.d/settings.js;
add_header Cache-Control "no-store";
}
}
+18321
View File
File diff suppressed because it is too large Load Diff
+74 -84
View File
@@ -1,6 +1,6 @@
{
"name": "feishin",
"version": "1.11.0",
"version": "1.2.0",
"description": "A modern self-hosted music player.",
"keywords": [
"subsonic",
@@ -30,37 +30,29 @@
"dev:watch": "electron-vite dev --watch",
"i18next": "i18next -c src/i18n/i18next-parser.config.js",
"postinstall": "electron-builder install-app-deps",
"lint": "pnpm run typecheck && pnpm run lint-code && pnpm run lint-styles",
"lint:fix": "pnpm run lint-code:fix && pnpm run lint-styles:fix",
"lint": "pnpm run lint-code && pnpm run lint-styles",
"lint-code": "eslint --max-warnings=0 --cache .",
"lint-code:fix": "eslint --cache --fix .",
"lint-styles": "stylelint --max-warnings=0 'src/**/*.{css,scss}'",
"lint-styles:fix": "stylelint 'src/**/*.{css,scss}' --fix",
"lint:fix": "pnpm run lint-code:fix && pnpm run lint-styles:fix",
"package": "pnpm run build && electron-builder",
"package:dev": "pnpm run build && electron-builder --dir",
"package:linux": "pnpm run build && electron-builder --linux",
"package:linux:pr": "pnpm run build && electron-builder --linux --publish never",
"package:linux-arm64:pr": "pnpm run build && electron-builder --linux --arm64 --publish never",
"package:linux:pr": "pnpm run build && electron-builder --linux --publish never",
"package:mac": "pnpm run build && electron-builder --mac",
"package:mac:pr": "pnpm run build && electron-builder --mac --publish never",
"package:win": "pnpm run build && electron-builder --win",
"package:win:pr": "pnpm run build && electron-builder --win --publish never",
"package:win-arm64:pr": "pnpm run build && electron-builder --win --arm64 --publish never",
"publish:linux": "pnpm run build && electron-builder --publish always --linux",
"publish:linux:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --linux",
"publish:linux:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --linux",
"publish:linux-arm64": "pnpm run build && electron-builder --publish always --linux --arm64",
"publish:linux-arm64:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --linux --arm64",
"publish:linux-arm64:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --linux --arm64",
"publish:linux:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --linux",
"publish:mac": "pnpm run build && electron-builder --publish always --mac",
"publish:mac:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --mac",
"publish:mac:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --mac",
"publish:win": "pnpm run build && electron-builder --publish always --win",
"publish:win:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --win",
"publish:win:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --win",
"publish:win-arm64": "pnpm run build && electron-builder --publish always --win --arm64",
"publish:win-arm64:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --win --arm64",
"publish:win-arm64:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --win --arm64",
"start": "electron-vite preview",
"typecheck": "pnpm run typecheck:node && pnpm run typecheck:web",
"typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
@@ -68,123 +60,121 @@
"version": "pnpm version --no-git-tag-version",
"postversion": "node ./scripts/update-app-stream.mjs"
},
"resolutions": {
"react-router": "7.14.0",
"xml2js": "0.5.0"
},
"dependencies": {
"@atlaskit/pragmatic-drag-and-drop": "1.7.7",
"@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.5",
"@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.2",
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0",
"@electron-toolkit/preload": "^3.0.2",
"@electron-toolkit/preload": "^3.0.1",
"@electron-toolkit/utils": "^4.0.0",
"@mantine/colors-generator": "^9.1.1",
"@mantine/core": "^9.1.1",
"@mantine/dates": "^9.1.1",
"@mantine/form": "^9.1.1",
"@mantine/hooks": "^9.1.1",
"@mantine/modals": "^9.1.1",
"@mantine/notifications": "^9.1.1",
"@mantine/colors-generator": "^8.3.8",
"@mantine/core": "^8.3.8",
"@mantine/dates": "^8.3.8",
"@mantine/form": "^8.3.8",
"@mantine/hooks": "^8.3.8",
"@mantine/modals": "^8.3.8",
"@mantine/notifications": "^8.3.8",
"@radix-ui/react-context-menu": "^2.2.16",
"@tanstack/react-query": "^5.96.2",
"@tanstack/react-query-devtools": "^5.96.2",
"@tanstack/react-query-persist-client": "^5.96.2",
"@tanstack/react-query": "^5.90.9",
"@tanstack/react-query-devtools": "^5.90.2",
"@tanstack/react-query-persist-client": "^5.90.11",
"@ts-rest/core": "^3.52.1",
"@wavesurfer/react": "^1.0.12",
"@xhayper/discord-rpc": "^1.3.3",
"audiomotion-analyzer": "^4.5.4",
"axios": "^1.14.0",
"butterchurn": "3.0.0-beta.5",
"butterchurn-presets": "3.0.0-beta.4",
"cheerio": "^1.2.0",
"@wavesurfer/react": "^1.0.11",
"@xhayper/discord-rpc": "^1.3.0",
"audiomotion-analyzer": "^4.5.1",
"axios": "^1.13.2",
"butterchurn": "^3.0.0-beta.5",
"butterchurn-presets": "^3.0.0-beta.4",
"cheerio": "^1.1.2",
"clsx": "^2.1.1",
"cmdk": "^1.1.1",
"dayjs": "^1.11.20",
"dompurify": "^3.3.3",
"dayjs": "^1.11.19",
"dompurify": "^3.3.0",
"electron-debug": "^3.2.0",
"electron-localshortcut": "^3.2.1",
"electron-log": "^5.4.3",
"electron-store": "^8.2.0",
"electron-updater": "^6.8.3",
"fast-average-color": "9.5.0",
"fast-xml-parser": "^5.5.10",
"electron-updater": "^6.6.2",
"fast-average-color": "^9.5.0",
"fast-xml-parser": "^5.3.2",
"format-duration": "^3.0.2",
"fuse.js": "^7.2.0",
"i18next": "^25.10.10",
"fuse.js": "^7.1.0",
"i18next": "^25.6.2",
"icecast-metadata-stats": "^0.1.12",
"idb-keyval": "^6.2.2",
"immer": "^10.2.0",
"is-electron": "^2.2.2",
"lodash": "^4.18.1",
"lodash": "^4.17.21",
"md5": "^2.3.0",
"motion": "^12.38.0",
"motion": "^12.23.24",
"mpris-service": "^2.1.2",
"nanoid": "^3.3.11",
"node-mpv": "github:jeffvli/Node-MPV#32b4d64395289ad710c41d481d2707a7acfc228f",
"overlayscrollbars": "^2.14.0",
"nuqs": "^2.7.1",
"overlayscrollbars": "^2.11.1",
"overlayscrollbars-react": "^0.5.6",
"qs": "^6.15.0",
"react": "^19.2.4",
"react-call": "^1.8.2",
"react-dom": "^19.2.4",
"qs": "^6.14.1",
"react": "^19.1.0",
"react-call": "^1.8.1",
"react-dom": "^19.1.0",
"react-error-boundary": "^5.0.0",
"react-i18next": "^16.6.6",
"react-icons": "^5.6.0",
"react-player": "^2.16.1",
"react-router": "^7.14.0",
"react-split-pane": "^3.2.0",
"react-i18next": "^16.3.3",
"react-icons": "^5.5.0",
"react-image": "^4.1.0",
"react-loading-skeleton": "^3.5.0",
"react-player": "^2.16.0",
"react-router": "^7.9.6",
"react-split-pane": "^3.0.4",
"react-virtualized-auto-sizer": "^1.0.26",
"react-window": "1.8.11",
"react-window-v2": "npm:react-window@^2.2.7",
"semver": "^7.7.4",
"react-window-v2": "npm:react-window@^2.2.3",
"semver": "^7.5.4",
"string-to-color": "^2.2.2",
"wavesurfer.js": "^7.12.5",
"ws": "^8.20.0",
"zod": "^3.25.76",
"zustand": "^5.0.12"
"wavesurfer.js": "^7.11.1",
"ws": "^8.18.2",
"zod": "^3.22.3",
"zustand": "^5.0.5"
},
"devDependencies": {
"@electron-toolkit/eslint-config-prettier": "^3.0.0",
"@electron-toolkit/eslint-config-ts": "^3.1.0",
"@electron-toolkit/eslint-config-ts": "^3.0.0",
"@electron-toolkit/tsconfig": "^2.0.0",
"@types/electron-localshortcut": "^3.1.3",
"@types/lodash": "^4.17.24",
"@types/md5": "^2.3.6",
"@types/node": "^24.12.2",
"@types/react": "^19.2.14",
"@types/electron-localshortcut": "^3.1.0",
"@types/lodash": "^4.17.18",
"@types/md5": "^2.3.5",
"@types/node": "^24.10.1",
"@types/react": "^19.2.5",
"@types/react-dom": "^19.2.3",
"@types/react-window": "^1.8.8",
"@types/source-map-support": "^0.5.10",
"@types/ws": "^8.18.1",
"@vitejs/plugin-react": "^5.2.0",
"babel-plugin-react-compiler": "^1.0.0",
"@vitejs/plugin-react": "^5.1.1",
"concurrently": "^9.2.1",
"cross-env": "^10.1.0",
"electron": "^39.8.6",
"electron-builder": "^26.8.2",
"electron": "^39.2.7",
"electron-builder": "^26.0.12",
"electron-devtools-installer": "^4.0.0",
"electron-vite": "^4.0.1",
"eslint": "^9.39.4",
"eslint-plugin-perfectionist": "^4.15.1",
"eslint-plugin-prettier": "^5.5.5",
"eslint": "^9.24.0",
"eslint-plugin-perfectionist": "^4.13.0",
"eslint-plugin-prettier": "^5.4.0",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-refresh": "^0.4.26",
"i18next-parser": "^9.4.0",
"eslint-plugin-react-refresh": "^0.4.24",
"i18next-parser": "^9.3.0",
"postcss-preset-mantine": "^1.18.0",
"postcss-simple-vars": "^7.0.1",
"prettier": "^3.8.1",
"prettier-plugin-packagejson": "^2.5.22",
"stylelint": "^16.26.1",
"stylelint-config-css-modules": "^4.6.0",
"stylelint-config-recess-order": "^7.7.0",
"prettier": "^3.6.2",
"prettier-plugin-packagejson": "^2.5.19",
"stylelint": "^16.25.0",
"stylelint-config-css-modules": "^4.5.1",
"stylelint-config-recess-order": "^7.4.0",
"stylelint-config-standard": "^39.0.1",
"typescript": "^5.9.3",
"vite": "^7.3.1",
"typescript": "^5.8.3",
"vite": "^7.2.2",
"vite-plugin-conditional-import": "^0.1.7",
"vite-plugin-dynamic-import": "^1.6.0",
"vite-plugin-ejs": "^1.7.0",
"vite-plugin-pwa": "^1.2.0"
"vite-plugin-pwa": "^1.1.0"
},
"pnpm": {
"onlyBuiltDependencies": [
+3083 -3082
View File
File diff suppressed because it is too large Load Diff
+2 -3
View File
@@ -1,9 +1,9 @@
import react from '@vitejs/plugin-react';
import path from 'path';
import { defineConfig, normalizePath } from 'vite';
import { ViteEjsPlugin } from 'vite-plugin-ejs';
import { version } from './package.json';
import { createReactPlugin } from './vite.react-plugin';
export default defineConfig({
build: {
@@ -23,7 +23,6 @@ export default defineConfig({
assetFileNames: '[name].[ext]',
chunkFileNames: '[name].js',
entryFileNames: '[name].js',
sourcemapExcludeSources: false,
},
},
sourcemap: true,
@@ -35,7 +34,7 @@ export default defineConfig({
},
},
plugins: [
createReactPlugin(),
react(),
ViteEjsPlugin({
prod: process.env.NODE_ENV === 'production',
root: normalizePath(path.resolve(__dirname, './src/remote')),
Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 48 KiB

-45
View File
@@ -1,45 +0,0 @@
import { execSync } from 'child_process';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
/**
* Electron-builder afterAllArtifactBuild hook
* Runs the app stream update script only for Linux builds
* Returns the metainfo file path to be included in published artifacts
*/
// This is not a typescript file, and is called by electron-builder, so we cannot use typescript features here.
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
export default async function afterAllArtifactBuild(buildResult) {
// Check if this build includes Linux as a target
const isLinux = Array.from(buildResult.platformToTargets.keys()).some(
(platform) => platform.name === 'linux',
);
if (isLinux) {
const updateScriptPath = path.join(__dirname, 'update-app-stream.mjs');
const projectRoot = path.resolve(__dirname, '..');
const metainfoFile = path.resolve(projectRoot, 'org.jeffvli.feishin.metainfo.xml');
console.log('Running app stream update for Linux build...');
try {
execSync(`node ${updateScriptPath} --replace-if-version-missing`, {
cwd: projectRoot,
stdio: 'inherit',
});
// Return the metainfo file to be included in published artifacts
return [metainfoFile];
} catch (error) {
console.error('Failed to update app stream:', error.message);
throw error;
}
}
// Return empty array if not a Linux build
return [];
}
+11 -32
View File
@@ -3,51 +3,30 @@ import fs from 'fs';
import path from 'path';
const args = process.argv.slice(2);
// Parse flags and positional arguments
const flags = args.filter((arg) => arg.startsWith('--'));
const positionalArgs = args.filter((arg) => !arg.startsWith('--'));
const replaceIfVersionMissing = flags.includes('--replace-if-version-missing');
if (positionalArgs.length > 3) {
console.error(
'Usage: node update-app-stream.js [package-file] [date] [metainfo-file] [--replace-if-version-missing]',
);
if (args.length > 3) {
console.error('Usage: node update-app-stream.js [package-file] [date] [metainfo-file]');
process.exit(1);
}
const packageFile = positionalArgs[0] || path.resolve(process.cwd(), 'package.json');
const packageFile = args[0] || path.resolve(process.cwd(), 'package.json');
const packageContent = fs.readFileSync(packageFile, 'utf8');
const packageJson = JSON.parse(packageContent);
const version = packageJson.version;
const time = Math.floor((Date.parse(positionalArgs[1]) || Date.now()) / 1000);
const metainfoFile =
positionalArgs[2] || path.resolve(process.cwd(), 'org.jeffvli.feishin.metainfo.xml');
const time = Math.floor((Date.parse(args[1]) || Date.now()) / 1000);
const metainfoFile = args[2] || path.resolve(process.cwd(), 'org.jeffvli.feishin.metainfo.xml');
const parser = new XMLParser({ ignoreAttributes: false });
const metainfoContent = fs.readFileSync(metainfoFile, 'utf8');
const metainfo = parser.parse(metainfoContent);
const newRelease = {
'@_date': new Date(time * 1000).toISOString().split('T')[0],
'@_type': version.includes('-') ? 'development' : 'stable',
'@_version': version,
};
if (replaceIfVersionMissing) {
// Replace all releases with only the current version
metainfo.component.releases.release = [newRelease];
} else {
// Default behavior: add new release if it doesn't exist
const releaseExists =
metainfo.component.releases.release.findIndex(
(release) => release['@_version'] === version,
) !== -1;
if (!releaseExists) {
metainfo.component.releases.release.unshift(newRelease);
}
if (!metainfo.component.releases.release.find((release) => release['@_version'] === version)) {
metainfo.component.releases.release.unshift({
'@_date': new Date(time * 1000).toISOString().split('T')[0],
'@_type': version.includes('-') ? 'development' : 'stable',
'@_version': version,
});
}
const builder = new XMLBuilder({ format: true, ignoreAttributes: false, indentBy: ' ' });
+1 -99
View File
@@ -1,99 +1 @@
"use strict";
window.SERVER_URL = "${SERVER_URL}";
window.REMOTE_URL = "${REMOTE_URL}";
window.SERVER_NAME = "${SERVER_NAME}";
window.SERVER_TYPE = "${SERVER_TYPE}";
window.SERVER_LOCK = "${SERVER_LOCK}";
window.LEGACY_AUTHENTICATION = "${LEGACY_AUTHENTICATION}";
window.ANALYTICS_DISABLED = "${ANALYTICS_DISABLED}";
window.FS_GENERAL_ACCENT = "${FS_GENERAL_ACCENT}";
window.FS_GENERAL_ALBUM_BACKGROUND = "${FS_GENERAL_ALBUM_BACKGROUND}";
window.FS_GENERAL_ALBUM_BACKGROUND_BLUR = "${FS_GENERAL_ALBUM_BACKGROUND_BLUR}";
window.FS_GENERAL_ARTIST_BACKGROUND = "${FS_GENERAL_ARTIST_BACKGROUND}";
window.FS_GENERAL_ARTIST_BACKGROUND_BLUR = "${FS_GENERAL_ARTIST_BACKGROUND_BLUR}";
window.FS_GENERAL_BLUR_EXPLICIT_IMAGES = "${FS_GENERAL_BLUR_EXPLICIT_IMAGES}";
window.FS_GENERAL_COMBINED_LYRICS_AND_VISUALIZER = "${FS_GENERAL_COMBINED_LYRICS_AND_VISUALIZER}";
window.FS_GENERAL_ENABLE_GRID_MULTI_SELECT = "${FS_GENERAL_ENABLE_GRID_MULTI_SELECT}";
window.FS_GENERAL_EXTERNAL_LINKS = "${FS_GENERAL_EXTERNAL_LINKS}";
window.FS_GENERAL_FOLLOW_CURRENT_SONG = "${FS_GENERAL_FOLLOW_CURRENT_SONG}";
window.FS_GENERAL_FOLLOW_SYSTEM_THEME = "${FS_GENERAL_FOLLOW_SYSTEM_THEME}";
window.FS_GENERAL_HOME_FEATURE = "${FS_GENERAL_HOME_FEATURE}";
window.FS_GENERAL_HOME_FEATURE_STYLE = "${FS_GENERAL_HOME_FEATURE_STYLE}";
window.FS_GENERAL_LANGUAGE = "${FS_GENERAL_LANGUAGE}";
window.FS_GENERAL_LAST_FM = "${FS_GENERAL_LAST_FM}";
window.FS_GENERAL_LASTFM_API_KEY = "${FS_GENERAL_LASTFM_API_KEY}";
window.FS_GENERAL_LISTEN_BRAINZ = "${FS_GENERAL_LISTEN_BRAINZ}";
window.FS_GENERAL_MUSIC_BRAINZ = "${FS_GENERAL_MUSIC_BRAINZ}";
window.FS_GENERAL_NATIVE_ASPECT_RATIO = "${FS_GENERAL_NATIVE_ASPECT_RATIO}";
window.FS_GENERAL_PATH_REPLACE = "${FS_GENERAL_PATH_REPLACE}";
window.FS_GENERAL_PATH_REPLACE_WITH = "${FS_GENERAL_PATH_REPLACE_WITH}";
window.FS_GENERAL_PLAYERBAR_OPEN_DRAWER = "${FS_GENERAL_PLAYERBAR_OPEN_DRAWER}";
window.FS_GENERAL_PRIMARY_SHADE = "${FS_GENERAL_PRIMARY_SHADE}";
window.FS_GENERAL_QOBUZ = "${FS_GENERAL_QOBUZ}";
window.FS_GENERAL_RESUME = "${FS_GENERAL_RESUME}";
window.FS_GENERAL_SHOW_LYRICS_IN_SIDEBAR = "${FS_GENERAL_SHOW_LYRICS_IN_SIDEBAR}";
window.FS_GENERAL_SHOW_RATINGS = "${FS_GENERAL_SHOW_RATINGS}";
window.FS_GENERAL_SHOW_VISUALIZER_IN_SIDEBAR = "${FS_GENERAL_SHOW_VISUALIZER_IN_SIDEBAR}";
window.FS_GENERAL_SIDEBAR_COLLAPSED_NAVIGATION = "${FS_GENERAL_SIDEBAR_COLLAPSED_NAVIGATION}";
window.FS_GENERAL_SIDEBAR_COLLAPSE_SHARED = "${FS_GENERAL_SIDEBAR_COLLAPSE_SHARED}";
window.FS_GENERAL_SIDEBAR_PLAYLIST_FOLDERS = "${FS_GENERAL_SIDEBAR_PLAYLIST_FOLDERS}";
window.FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_SEPARATOR = "${FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_SEPARATOR}";
window.FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_TREE_INDENT = "${FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_TREE_INDENT}";
window.FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_TREE_LINE_COLOR = "${FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_TREE_LINE_COLOR}";
window.FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_VIEW = "${FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_VIEW}";
window.FS_GENERAL_SIDEBAR_PLAYLIST_LIST = "${FS_GENERAL_SIDEBAR_PLAYLIST_LIST}";
window.FS_GENERAL_SIDEBAR_PLAYLIST_MODE = "${FS_GENERAL_SIDEBAR_PLAYLIST_MODE}";
window.FS_GENERAL_SIDEBAR_PLAYLIST_SORTING = "${FS_GENERAL_SIDEBAR_PLAYLIST_SORTING}";
window.FS_GENERAL_SIDE_QUEUE_TYPE = "${FS_GENERAL_SIDE_QUEUE_TYPE}";
window.FS_GENERAL_SIDE_QUEUE_LAYOUT = "${FS_GENERAL_SIDE_QUEUE_LAYOUT}";
window.FS_GENERAL_THEME = "${FS_GENERAL_THEME}";
window.FS_GENERAL_THEME_DARK = "${FS_GENERAL_THEME_DARK}";
window.FS_GENERAL_THEME_LIGHT = "${FS_GENERAL_THEME_LIGHT}";
window.FS_GENERAL_USE_THEME_ACCENT_COLOR = "${FS_GENERAL_USE_THEME_ACCENT_COLOR}";
window.FS_GENERAL_USE_THEME_PRIMARY_SHADE = "${FS_GENERAL_USE_THEME_PRIMARY_SHADE}";
window.FS_GENERAL_ZOOM_FACTOR = "${FS_GENERAL_ZOOM_FACTOR}";
window.FS_PLAYBACK_MEDIA_SESSION = "${FS_PLAYBACK_MEDIA_SESSION}";
window.FS_PLAYBACK_WEB_AUDIO = "${FS_PLAYBACK_WEB_AUDIO}";
window.FS_PLAYBACK_AUDIO_FADE_ON_STATUS_CHANGE = "${FS_PLAYBACK_AUDIO_FADE_ON_STATUS_CHANGE}";
window.FS_PLAYBACK_PRESERVE_PITCH = "${FS_PLAYBACK_PRESERVE_PITCH}";
window.FS_PLAYBACK_SCROBBLE_ENABLED = "${FS_PLAYBACK_SCROBBLE_ENABLED}";
window.FS_PLAYBACK_SCROBBLE_NOTIFY = "${FS_PLAYBACK_SCROBBLE_NOTIFY}";
window.FS_PLAYBACK_SCROBBLE_AT_DURATION = "${FS_PLAYBACK_SCROBBLE_AT_DURATION}";
window.FS_PLAYBACK_SCROBBLE_AT_PERCENTAGE = "${FS_PLAYBACK_SCROBBLE_AT_PERCENTAGE}";
window.FS_PLAYBACK_TRANSCODE_ENABLED = "${FS_PLAYBACK_TRANSCODE_ENABLED}";
window.FS_PLAYBACK_TRANSCODE_FORMAT = "${FS_PLAYBACK_TRANSCODE_FORMAT}";
window.FS_PLAYBACK_TRANSCODE_BITRATE = "${FS_PLAYBACK_TRANSCODE_BITRATE}";
window.FS_PLAYBACK_FILTERS = "${FS_PLAYBACK_FILTERS}";
window.FS_DISCORD_ENABLED = "${FS_DISCORD_ENABLED}";
window.FS_DISCORD_CLIENT_ID = "${FS_DISCORD_CLIENT_ID}";
window.FS_DISCORD_DISPLAY_TYPE = "${FS_DISCORD_DISPLAY_TYPE}";
window.FS_DISCORD_LINK_TYPE = "${FS_DISCORD_LINK_TYPE}";
window.FS_DISCORD_SHOW_AS_LISTENING = "${FS_DISCORD_SHOW_AS_LISTENING}";
window.FS_DISCORD_SHOW_PAUSED = "${FS_DISCORD_SHOW_PAUSED}";
window.FS_DISCORD_SHOW_SERVER_IMAGE = "${FS_DISCORD_SHOW_SERVER_IMAGE}";
window.FS_DISCORD_SHOW_STATE_ICON = "${FS_DISCORD_SHOW_STATE_ICON}";
window.FS_LYRICS_FETCH = "${FS_LYRICS_FETCH}";
window.FS_LYRICS_FOLLOW = "${FS_LYRICS_FOLLOW}";
window.FS_LYRICS_DELAY_MS = "${FS_LYRICS_DELAY_MS}";
window.FS_LYRICS_PREFER_LOCAL = "${FS_LYRICS_PREFER_LOCAL}";
window.FS_LYRICS_SHOW_MATCH = "${FS_LYRICS_SHOW_MATCH}";
window.FS_LYRICS_SHOW_PROVIDER = "${FS_LYRICS_SHOW_PROVIDER}";
window.FS_LYRICS_ENABLE_AUTO_TRANSLATION = "${FS_LYRICS_ENABLE_AUTO_TRANSLATION}";
window.FS_LYRICS_TRANSLATION_API_KEY = "${FS_LYRICS_TRANSLATION_API_KEY}";
window.FS_LYRICS_TRANSLATION_TARGET_LANGUAGE = "${FS_LYRICS_TRANSLATION_TARGET_LANGUAGE}";
window.FS_LYRICS_ALIGNMENT = "${FS_LYRICS_ALIGNMENT}";
window.FS_AUTO_DJ_ENABLED = "${FS_AUTO_DJ_ENABLED}";
window.FS_AUTO_DJ_ITEM_COUNT = "${FS_AUTO_DJ_ITEM_COUNT}";
window.FS_AUTO_DJ_TIMING = "${FS_AUTO_DJ_TIMING}";
window.FS_CSS_CONTENT = "${FS_CSS_CONTENT}";
window.FS_CSS_ENABLED = "${FS_CSS_ENABLED}";
window.FS_FONT_TYPE = "${FS_FONT_TYPE}";
window.FS_FONT_BUILT_IN = "${FS_FONT_BUILT_IN}";
window.FS_FONT_SYSTEM = "${FS_FONT_SYSTEM}";
"use strict";window.SERVER_URL="${SERVER_URL}";window.SERVER_NAME="${SERVER_NAME}";window.SERVER_TYPE="${SERVER_TYPE}";window.SERVER_LOCK=${SERVER_LOCK};window.LEGACY_AUTHENTICATION=${LEGACY_AUTHENTICATION};window.ANALYTICS_DISABLED="${ANALYTICS_DISABLED}";
+12 -4
View File
@@ -1,4 +1,4 @@
import { PostProcessorModule } from 'i18next';
import { PostProcessorModule, TOptions } from 'i18next';
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
@@ -203,17 +203,25 @@ const titleCasePostProcessor: PostProcessorModule = {
type: 'postProcessor',
};
// const ignoreSentenceCaseLanguages = ['de'];
const ignoreSentenceCaseLanguages = ['de'];
const sentenceCasePostProcessor: PostProcessorModule = {
name: 'sentenceCase',
process: (value: string) => {
process: (
value: string,
_key: string,
_options: TOptions<Record<string, string>>,
translator: any,
) => {
const sentences = value.split('. ');
return sentences
.map((sentence) => {
return (
sentence.charAt(0).toLocaleUpperCase() + sentence.slice(1).toLocaleLowerCase()
sentence.charAt(0).toLocaleUpperCase() +
(!ignoreSentenceCaseLanguages.includes(translator.language)
? sentence.slice(1).toLocaleLowerCase()
: sentence.slice(1))
);
})
.join('. ');
+12 -23
View File
@@ -1,33 +1,27 @@
{
"action": {
"addToFavorites": "إضافة الى $t(entity.favorite, {\"count\": 2})",
"addToPlaylist": "إضافة الى $t(entity.playlist, {\"count\": 1})",
"addToFavorites": "إضافة الى $t(entity.favorite_other)",
"addToPlaylist": "إضافة الى $t(entity.playlist_one)",
"clearQueue": "مسح قائمة الإنتظار",
"createPlaylist": "إنشاء $t(entity.playlist, {\"count\": 1})",
"deletePlaylist": "حذف $t(entity.playlist, {\"count\": 1})",
"createPlaylist": "إنشاء $t(entity.playlist_one)",
"deletePlaylist": "حذف $t(entity.playlist_one)",
"deselectAll": "إلغاء تحديد الكل",
"editPlaylist": "تعديل $t(entity.playlist, {\"count\": 1})",
"editPlaylist": "تعديل $t(entity.playlist_one)",
"goToPage": "اذهب الى صفحة",
"moveToNext": "الذهاب الى التالي",
"moveToBottom": "الذهاب الى الأسفل",
"moveToTop": "الذهاب الى الأعلى",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "حذف من $t(entity.favorite, {\"count\": 2})",
"removeFromPlaylist": "حذف من $t(entity.playlist, {\"count\": 1})",
"removeFromFavorites": "حذف من $t(entity.favorite_other)",
"removeFromPlaylist": "حذف من $t(entity.playlist_one)",
"removeFromQueue": "حذف من قائمة الإنتظار",
"setRating": "تحديد التقييم",
"toggleSmartPlaylistEditor": "تشغيل / إطفاء وضع التعديل لـ $t(entity.smartPlaylist)",
"viewPlaylists": "إظهار $t(entity.playlist, {\"count\": 2})",
"viewPlaylists": "إظهار $t(entity.playlist_other)",
"openIn": {
"lastfm": "فتح في Last.fm",
"musicbrainz": "فتح في MusicBrainz"
},
"addOrRemoveFromSelection": "إضافة أو إزالة من الإختيارات",
"selectRangeOfItems": "اختر مجموعة من العناصر",
"goToCurrent": "الانتقال إلى العنصر الحالي",
"createRadioStation": "يخلق $t(entity.radioStation, {\"count\": 1})",
"deleteRadioStation": "يمسح $t(entity.radioStation, {\"count\": 1})",
"selectAll": "تحديد الكل"
}
},
"common": {
"action_zero": "عملية",
@@ -65,7 +59,7 @@
"configure": "تعديل",
"confirm": "تأكيد",
"create": "إنشاء",
"currentSong": "$t(entity.track, {\"count\": 1}) الحالي",
"currentSong": "$t(entity.track_one) الحالي",
"decrease": "تنقيص",
"delete": "حذف",
"descending": "تنازلي",
@@ -108,7 +102,7 @@
"path": "المسار",
"playerMustBePaused": "يجب إيقاف المشغل",
"preview": "معاينة",
"previousSong": "$t(entity.track, {\"count\": 1}) السابق",
"previousSong": "$t(entity.track_one) السابق",
"quit": "خروج",
"random": "عشوائي",
"rating": "التقييم",
@@ -123,12 +117,7 @@
"saveAndReplace": "حفظ واستبدال",
"saveAs": "حفظ بإسم",
"search": "بحث",
"setting_zero": "إعداد",
"setting_one": "",
"setting_two": "",
"setting_few": "",
"setting_many": "",
"setting_other": "",
"setting": "إعداد",
"share": "نشر",
"size": "حجم",
"sortOrder": "الترتيب",
+918 -1060
View File
File diff suppressed because it is too large Load Diff
+913 -1023
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+427 -690
View File
File diff suppressed because it is too large Load Diff
+895 -1023
View File
File diff suppressed because it is too large Load Diff
+622 -732
View File
File diff suppressed because it is too large Load Diff
+652 -947
View File
File diff suppressed because it is too large Load Diff
+63 -63
View File
@@ -12,7 +12,7 @@
"unfavorite": "حذف از موردعلاقه‌ها",
"shuffle_off": "پخش تصادفی غیر فعال",
"skip_forward": "برو جلو",
"queue_moveToTop": "جابجا کردن انتخاب شده به بالا",
"queue_moveToTop": "جابجا کردن انتخاب شده به پایین",
"queue_clear": "خالی کردن صف",
"queue_remove": "حذف انتخاب شده",
"addLast": "افزودن به پایان",
@@ -24,7 +24,7 @@
"mute": "بی‌صدا کردن",
"playbackFetchCancel": "دارد طول می‌کشد... برای لفو کردن اعلان را ببندید",
"playbackFetchInProgress": "بارگذاری قطعه‌ها…",
"queue_moveToBottom": "جابجا کردن انتخاب شده به پایین",
"queue_moveToBottom": "جابجا کردن انتخاب شده به بالا",
"addNext": "افزودن به پسین",
"favorite": "مورد علاقه",
"playSimilarSongs": "پخش آهنگ‌های همگون",
@@ -33,23 +33,23 @@
"muted": "بی‌صدا"
},
"action": {
"editPlaylist": "ویرایش $t(entity.playlist, {\"count\": 1})",
"editPlaylist": "ویرایش $t(entity.playlist_one)",
"goToPage": "برو به صفحهٔ",
"moveToTop": "انتقال به بالا",
"clearQueue": "خالی کردن صف",
"addToFavorites": "افزودن به $t(entity.favorite, {\"count\": 2})",
"addToPlaylist": "افزودن به $t(entity.playlist, {\"count\": 1})",
"createPlaylist": "ساخت $t(entity.playlist, {\"count\": 1})",
"removeFromPlaylist": "حذف از $t(entity.playlist, {\"count\": 1})",
"viewPlaylists": "نمایش $t(entity.playlist, {\"count\": 2})",
"addToFavorites": "افزودن به $t(entity.favorite_other)",
"addToPlaylist": "افزودن به $t(entity.playlist_one)",
"createPlaylist": "ساخت $t(entity.playlist_one)",
"removeFromPlaylist": "حذف از $t(entity.playlist_one)",
"viewPlaylists": "نمایش $t(entity.playlist_other)",
"refresh": "$t(common.refresh)",
"deletePlaylist": "حذف $t(entity.playlist, {\"count\": 1})",
"deletePlaylist": "حذف $t(entity.playlist_one)",
"removeFromQueue": "حذف از صف",
"deselectAll": "لغو انتخاب همه",
"moveToBottom": "انتقال به پایین",
"setRating": "تعیین امتیاز",
"toggleSmartPlaylistEditor": "تغییر ویرایشگر $t(entity.smartPlaylist)",
"removeFromFavorites": "حذف از $t(entity.favorite, {\"count\": 2})",
"removeFromFavorites": "حذف از $t(entity.favorite_other)",
"openIn": {
"lastfm": "باز کردن در Last.fm",
"musicbrainz": "باز کردن در MusicBranz"
@@ -70,21 +70,22 @@
"hotkey_rate1": "امتیاز ۱ ستاره",
"hotkey_skipForward": "برو جلو",
"disableLibraryUpdateOnStartup": "غیرفعال کردن بررسی آخرین نسخه در آغاز به کار برنامه",
"discordApplicationId_description": "the application ID for {{discord}} Rich Presence (defaults to {{defaultId}})",
"discordApplicationId_description": "the application id for {{discord}} rich presence (defaults to {{defaultId}})",
"playButtonBehavior_optionAddLast": "$t(player.addLast)",
"hotkey_playbackPlay": "پخش",
"hotkey_volumeDown": "کم کردن صدا",
"audioPlayer_description": "پخش‌کنندهٔ صدا را برای پخش انتخاب کنید",
"hotkey_globalSearch": "جست و جوی سراسری",
"disableAutomaticUpdates": "غیرفعال کردن به‌‌روزرسانی خودکار",
"exitToTray_description": "خروج از اپلیکیشن به system tray",
"replayGainMode_optionAlbum": "$t(entity.album, {\"count\": 1})",
"replayGainMode_optionAlbum": "$t(entity.album_one)",
"discordUpdateInterval_description": "فاصلهٔ بین هر به روزرسانی به ثانیه (حداقل ۱۵ ثانیه)",
"audioExclusiveMode": "حالت اختصاصی صدا",
"remotePassword": "رمز عبور کنترل از راه دور",
"language_description": "زبان اپلیکیشن را معین می‌کند $t(common.restartRequired)",
"hotkey_rate3": "امتیاز ۳ ستاره",
"font": "قلم",
"replayGainMode_optionTrack": "$t(entity.track, {\"count\": 1})",
"replayGainMode_optionTrack": "$t(entity.track_one)",
"hotkey_toggleFullScreenPlayer": "تغییر به پخش‌کنندهٔ تمام‌صفحه",
"hotkey_localSearch": "جست و جو در صفحه",
"hotkey_toggleQueue": "تغییر صف",
@@ -109,7 +110,7 @@
"customFontPath": "مسیر قلم سفارشی",
"audioPlayer": "پخش‌کنندهٔ صدا",
"hotkey_rate0": "حذف امتیاز",
"discordApplicationId": "{{discord}} application ID",
"discordApplicationId": "{{discord}} application id",
"hotkey_volumeMute": "بستن صدا",
"showSkipButton": "نمایش دکمهٔ رد کردن",
"customFontPath_description": "مسیر قلم سفارشی را برای استفاده در اپلیکیشن مشخص کنید",
@@ -132,7 +133,7 @@
"buttonSize": "اندازه‌ی دکمه‌ی پخش نوار",
"contextMenu": "پیکربندی فهرست زمینه (کلیک راست)",
"buttonSize_description": "اندازه‌ی دکمه‌های پخش نوار",
"audioExclusiveMode_description": "حالت اختصاصی خروجی را فعال می‌کند. در این حالت، سامانه معمولاً قفل است و فقط MPV می‌تواند خروجی صدا دهد",
"audioExclusiveMode_description": "حالت اختصاصی خروجی را فعال می‌کند. در این حالت، سامانه معمولاً قفل است و فقط mpv می‌تواند خروجی صدا دهد",
"clearQueryCache_description": "یک 'پاک‌سازی نرم' از فیشین. این فهرست‌های پخش و فراداده‌ی قطعه‌ها را تازه می‌کند و متن شعرهای ذخیره شده را بازنشانی می‌کند. پیکربندی‌ها، اعتبارنامه‌های سرویس‌دهنده و نگاره‌های کَش شده حفظ می‌شوند",
"clearCache_description": "یک 'پاک‌سازی سخت' فیشین. افزون بر پاک‌سازی کَش فیشین، کَش مرورگر هم تهی می‌شود (نگاره‌های ذخیره شده و باقی دارایی‌ها). اعتبارنامه‌ها و پیکربندی‌ها حفظ می‌شوند",
"contextMenu_description": "به شما اجازه می‌دهد که آیتم‌های نمایش داده شده در فهرستی که وقتی روی یک آیتم کلیک راست می‌کنید پدیدار می‌شود، را پنهان کنید. آیتم‌هایی که منتخب نیستند پنهان می‌شوند",
@@ -176,7 +177,7 @@
"backward": "به عقب",
"increase": "افزایش",
"rating": "امتیاز",
"bpm": "BPM",
"bpm": "bpm",
"refresh": "تازه‌سازی",
"unknown": "ناشناخته",
"areYouSure": "مطمئنید؟",
@@ -185,7 +186,7 @@
"left": "چپ",
"save": "ذخیره",
"right": "راست",
"currentSong": "فعلی $t(entity.track, {\"count\": 1})",
"currentSong": "فعلی $t(entity.track_one)",
"collapse": "بستن",
"trackNumber": "قطعه",
"descending": "نزولی",
@@ -238,7 +239,7 @@
"none": "هیچ",
"menu": "منو",
"restartRequired": "راه‌اندازی دوباره لازم است",
"previousSong": "$t(entity.track, {\"count\": 1}) پیشین",
"previousSong": "$t(entity.track_one) پیشین",
"noResultsFromQuery": "جست‌وجو نتیجه‌ای نداشت",
"quit": "خروج",
"expand": "گسترش",
@@ -255,8 +256,7 @@
"albumPeak": "اوج آلبوم",
"mbid": "شناسه‌ی MusicBrainz",
"reload": "بارگذاری مجدد",
"setting_one": "پیکربندی",
"setting_other": "",
"setting": "پیکربندی",
"trackGain": "گین قطعه",
"trackPeak": "اوج قطعه",
"translation": "ترجمه",
@@ -301,25 +301,25 @@
"rating": "امتیاز",
"search": "جست‌وجو",
"bitrate": "بیت‌ریت",
"genre": "$t(entity.genre, {\"count\": 1})",
"genre": "$t(entity.genre_one)",
"recentlyAdded": "به تازگی افزوده شده",
"note": "توجه",
"name": "نام",
"dateAdded": "تاریخ افزوده شدن",
"releaseDate": "تاریخ انتشار",
"albumCount": "$t(entity.album, {\"count\": 2}) عدد",
"albumCount": "$t(entity.album_other) عدد",
"path": "مسیر",
"favorited": "موردعلاقه",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"albumArtist": "$t(entity.albumArtist_one)",
"isRecentlyPlayed": "به تازگی پخش شده است",
"isFavorited": "موردعلاقه است",
"bpm": "BPM",
"bpm": "bpm",
"releaseYear": "سال انتشار",
"id": "ID",
"id": "id",
"disc": "دیسک",
"biography": "زندگی‌نامه",
"songCount": "تعداد ترانه",
"artist": "$t(entity.artist, {\"count\": 1})",
"artist": "$t(entity.artist_one)",
"duration": "مدت",
"isPublic": "عمومی است",
"random": "تصادفی",
@@ -327,23 +327,23 @@
"toYear": "تا سال",
"fromYear": "از سال",
"criticRating": "امتیاز منتقدین",
"album": "$t(entity.album, {\"count\": 1})",
"album": "$t(entity.album_one)",
"trackNumber": "قطعه",
"communityRating": "رتبه بندی جامعه",
"isCompilation": "مخلوط است"
},
"form": {
"deletePlaylist": {
"title": "حذف $t(entity.playlist, {\"count\": 1})",
"success": "$t(entity.playlist, {\"count\": 1}) حذف شد",
"input_confirm": "برای تایید، نام $t(entity.playlist, {\"count\": 1}) را وارد کنید"
"title": "حذف $t(entity.playlist_one)",
"success": "$t(entity.playlist_one) حذف شد",
"input_confirm": "برای تایید، نام $t(entity.playlist_one) را وارد کنید"
},
"createPlaylist": {
"input_description": "$t(common.description)",
"title": "ساخت $t(entity.playlist, {\"count\": 1})",
"title": "ساخت $t(entity.playlist_one)",
"input_public": "عمومی",
"input_name": "$t(common.name)",
"success": "$t(entity.playlist, {\"count\": 1}) ساخته شد",
"success": "$t(entity.playlist_one) ساخته شد",
"input_owner": "$t(common.owner)"
},
"addServer": {
@@ -360,19 +360,19 @@
"ignoreSsl": "نادیده گرفتن ssl ($t(common.restartRequired))"
},
"addToPlaylist": {
"success": "$t(entity.song, {\"count\": 2}) به {{numOfPlaylists}}$t(entity.playlist, {\"count\": 2}) افزوده شد",
"title": "افزودن به $t(entity.playlist, {\"count\": 1})",
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
"success": "$t(entity.song_other) به {{numOfPlaylists}}$t(entity.playlist_other) افزوده شد",
"title": "افزودن به $t(entity.playlist_one)",
"input_playlists": "$t(entity.playlist_other)",
"input_skipDuplicates": "پرش از تکراری‌ها"
},
"lyricSearch": {
"input_name": "$t(common.name)",
"input_artist": "$t(entity.artist, {\"count\": 1})",
"input_artist": "$t(entity.artist_one)",
"title": "جست‌وجو در متن شعر"
},
"editPlaylist": {
"title": "ویرایش $t(entity.playlist, {\"count\": 1})",
"success": "$t(entity.playlist, {\"count\": 1}) با موفقیت بروزرسانی شد",
"title": "ویرایش $t(entity.playlist_one)",
"success": "$t(entity.playlist_one) با موفقیت بروزرسانی شد",
"publicJellyfinNote": "جلی‌فین به دلیلی این‌که فهرست پخش عمومی‌ست یا خصوصی را فاش نمی‌کند. اگر می‌خواهید این عمومی باقی بماند، لطفاٌ ورودی پیش‌رو را منتخب داشته باشید"
},
"queryEditor": {
@@ -417,7 +417,7 @@
"artistWithCount_other": "{{count}} هنرمند",
"folder_one": "پوشه",
"folder_other": "پوشه‌ها",
"smartPlaylist": "$t(entity.playlist, {\"count\": 1}) هوشمند",
"smartPlaylist": "$t(entity.playlist_one) هوشمند",
"album_one": "آلبوم",
"album_other": "آلبوم‌ها",
"genreWithCount_one": "{{count}} ژانر",
@@ -431,12 +431,12 @@
},
"page": {
"albumList": {
"title": "$t(entity.album, {\"count\": 2})",
"title": "$t(entity.album_other)",
"artistAlbums": "آلبوم‌های {{artist}}",
"genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})"
"genreAlbums": "\"{{genre}}\" $t(entity.album_other)"
},
"appMenu": {
"settings": "$t(common.setting, {\"count\": 2})",
"settings": "$t(common.setting_other)",
"selectServer": "گزینش سرویس‌دهنده",
"expandSidebar": "گسترش نوار کناری",
"collapseSidebar": "فروکش نوار کناری",
@@ -451,11 +451,11 @@
"appearsOn": "مشاهده می‌شود در",
"about": "درباره‌ی {{artist}}",
"recentReleases": "عرضه‌های اخیر",
"viewAllTracks": "نمایش همه‌ی $t(entity.track, {\"count\": 2})",
"viewAllTracks": "نمایش همه‌ی $t(entity.track_other)",
"topSongsFrom": "قطعه‌های برتر از {{title}}",
"viewAll": "نمایش همه",
"viewDiscography": "نمایش کاتالوگ",
"relatedArtists": "$t(entity.artist, {\"count\": 2}) مربوطه",
"relatedArtists": "$t(entity.artist_other) مربوطه",
"topSongs": "قطعه‌های برتر"
},
"contextMenu": {
@@ -523,21 +523,21 @@
"playbackTab": "پخش"
},
"sidebar": {
"genres": "$t(entity.genre, {\"count\": 2})",
"playlists": "$t(entity.playlist, {\"count\": 2})",
"genres": "$t(entity.genre_other)",
"playlists": "$t(entity.playlist_other)",
"search": "$t(common.search)",
"albumArtists": "$t(entity.albumArtist, {\"count\": 2})",
"albums": "$t(entity.album, {\"count\": 2})",
"folders": "$t(entity.folder, {\"count\": 2})",
"artists": "$t(entity.artist, {\"count\": 2})",
"albumArtists": "$t(entity.albumArtist_other)",
"albums": "$t(entity.album_other)",
"folders": "$t(entity.folder_other)",
"artists": "$t(entity.artist_other)",
"home": "$t(common.home)",
"nowPlaying": "پخش کنونی",
"tracks": "$t(entity.track, {\"count\": 2})",
"settings": "$t(common.setting, {\"count\": 2})",
"shared": "$t(entity.playlist, {\"count\": 2}) اشتراک‌گذاری شده"
"tracks": "$t(entity.track_other)",
"settings": "$t(common.setting_other)",
"shared": "$t(entity.playlist_other) اشتراک‌گذاری شده"
},
"albumDetail": {
"moreFromArtist": "موارد بیشتر از این $t(entity.artist, {\"count\": 1})",
"moreFromArtist": "موارد بیشتر از این $t(entity.artist_one)",
"moreFromGeneric": "موارد بیشتر از {{item}}",
"released": "عرضه شده"
},
@@ -550,9 +550,9 @@
"editServerDetailsTooltip": "ویرایش ریزگان سرویس‌دهنده"
},
"genreList": {
"showAlbums": "نمایش $t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2})",
"title": "$t(entity.genre, {\"count\": 2})",
"showTracks": "نمایش $t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2})"
"showAlbums": "نمایش $t(entity.genre_one) $t(entity.album_other)",
"title": "$t(entity.genre_other)",
"showTracks": "نمایش $t(entity.genre_one) $t(entity.track_other)"
},
"globalSearch": {
"commands": {
@@ -563,15 +563,15 @@
"title": "فرمان‌ها"
},
"playlistList": {
"title": "$t(entity.playlist, {\"count\": 2})"
"title": "$t(entity.playlist_other)"
},
"trackList": {
"title": "$t(entity.track, {\"count\": 2})",
"title": "$t(entity.track_other)",
"artistTracks": "قطعه‌های {{artist}}",
"genreTracks": "$t(entity.track, {\"count\": 2}) \"{{genre}}\""
"genreTracks": "$t(entity.track_other) \"{{genre}}\""
},
"albumArtistList": {
"title": "$t(entity.albumArtist, {\"count\": 2})"
"title": "$t(entity.albumArtist_other)"
},
"itemDetail": {
"copyPath": "کپی کردن مسیر در کلیپ‌بورد",
@@ -584,11 +584,11 @@
"size": "$t(common.size)",
"lastPlayed": "آخرین بار پخش شده",
"discNumber": "دیسک",
"songCount": "$t(entity.track, {\"count\": 2})",
"songCount": "$t(entity.track_other)",
"title": "عنوان",
"trackNumber": "قطعه",
"favorite": "مورد علاقه",
"genre": "$t(entity.genre, {\"count\": 1})",
"genre": "$t(entity.genre_one)",
"comment": "دیدگاه",
"playCount": "تعداد پخش",
"rating": "امتیاز",
+643 -841
View File
File diff suppressed because it is too large Load Diff
+860 -1166
View File
File diff suppressed because it is too large Load Diff
+788 -784
View File
File diff suppressed because it is too large Load Diff
+516 -1097
View File
File diff suppressed because it is too large Load Diff
+631 -879
View File
File diff suppressed because it is too large Load Diff
+179 -550
View File
File diff suppressed because it is too large Load Diff
+46 -46
View File
@@ -1,31 +1,31 @@
{
"action": {
"createPlaylist": "$t(entity.playlist, {\"count\": 1}) 생성",
"addToFavorites": "$t(entity.favorite, {\"count\": 2})에 추가",
"addToPlaylist": "$t(entity.playlist, {\"count\": 1})에 추가",
"createPlaylist": "$t(entity.playlist_one) 생성",
"addToFavorites": "$t(entity.favorite_other)에 추가",
"addToPlaylist": "$t(entity.playlist_one)에 추가",
"clearQueue": "대기열 지우기",
"deletePlaylist": "$t(entity.playlist, {\"count\": 1}) 삭제",
"deletePlaylist": "$t(entity.playlist_one) 삭제",
"deselectAll": "모두 선택 해제",
"editPlaylist": "$t(entity.playlist, {\"count\": 1}) 편집",
"editPlaylist": "$t(entity.playlist_one) 편집",
"goToPage": "페이지 이동",
"moveToBottom": "맨 아래로 이동",
"moveToTop": "맨 위로 이동",
"moveToNext": "다음으로 이동",
"removeFromQueue": "대기열에서 제거",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "$t(entity.favorite, {\"count\": 2})에서 제거",
"removeFromPlaylist": "$t(entity.playlist, {\"count\": 1})에서 제거",
"removeFromFavorites": "$t(entity.favorite_other)에서 제거",
"removeFromPlaylist": "$t(entity.playlist_one)에서 제거",
"openIn": {
"musicbrainz": "MusicBrainz에서 보기",
"lastfm": "Last.fm에서 보기"
},
"viewPlaylists": "$t(entity.playlist, {\"count\": 2}) 보기",
"viewPlaylists": "$t(entity.playlist_other) 보기",
"setRating": "평점 지정",
"toggleSmartPlaylistEditor": "$t(entity.smartPlaylist) 편집기 펼치기",
"addOrRemoveFromSelection": "선택항목에서 추가 또는 제거",
"selectRangeOfItems": "항목의 범위 선택",
"createRadioStation": "$t(entity.radioStation, {\"count\": 1}) 생성",
"deleteRadioStation": "$t(entity.radioStation, {\"count\": 1}) 삭제",
"createRadioStation": "$t(entity.radioStation_one) 생성",
"deleteRadioStation": "$t(entity.radioStation_one) 삭제",
"selectAll": "전부 선택",
"downloadStarted": "{{count}}개 항목 다운로드 시작했습니다",
"moveUp": "위로 옮기기",
@@ -59,7 +59,7 @@
"backward": "뒤로",
"saveAs": "(으)로 저장하기",
"search": "검색",
"setting_other": "설정",
"setting": "설정",
"share": "공유",
"size": "크기",
"sortOrder": "순서",
@@ -74,7 +74,7 @@
"comingSoon": "조만간…",
"configure": "설정",
"confirm": "확인",
"currentSong": "현재 $t(entity.track, {\"count\": 1})",
"currentSong": "현재 $t(entity.track_one)",
"decrease": "감소",
"delete": "삭제",
"descending": "내림차순",
@@ -96,7 +96,7 @@
"path": "경로",
"playerMustBePaused": "플레이어가 일시정지 되어야 합니다",
"preview": "미리보기",
"previousSong": "이전곡 $t(entity.track, {\"count\": 1})",
"previousSong": "이전곡 $t(entity.track_one)",
"quit": "종료",
"refresh": "새로고침",
"reload": "리로드",
@@ -106,7 +106,7 @@
"ascending": "오름차순",
"areYouSure": "확실한가요?",
"bitrate": "비트 전송률",
"bpm": "BPM",
"bpm": "bpm",
"biography": "바이오그래피",
"center": "중앙",
"channel_other": "채널",
@@ -127,7 +127,7 @@
"filters": "필터",
"noResultsFromQuery": "쿼리 결과가 없습니다",
"note": "노트",
"ok": "Ok",
"ok": "OK",
"owner": "소유자",
"sampleRate": "샘플레이트",
"tags": "태그",
@@ -168,7 +168,7 @@
"song_other": "곡",
"play_other": "{{count}} 재생",
"playlistWithCount_other": "{{count}} 재생목록",
"smartPlaylist": "스마트 $t(entity.playlist, {\"count\": 1})",
"smartPlaylist": "스마트 $t(entity.playlist_one)",
"track_other": "트랙",
"radioStation_other": "라디오 방송국",
"radioStationWithCount_other": "{{count}}개 라디오 방송국"
@@ -214,9 +214,9 @@
"dateAdded": "추가된 날짜",
"lastPlayed": "마지막으로 재생한",
"mostPlayed": "가장 많이 재생한",
"album": "$t(entity.album, {\"count\": 1})",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"artist": "$t(entity.artist, {\"count\": 1})",
"album": "$t(entity.album_one)",
"albumArtist": "$t(entity.albumArtist_one)",
"artist": "$t(entity.artist_one)",
"communityRating": "커뮤니티 평점",
"criticRating": "비평가 평점",
"disc": "디스크",
@@ -224,12 +224,12 @@
"biography": "바이오그래피",
"channels": "$t(common.channel_other)",
"duration": "길이",
"bpm": "BPM",
"albumCount": "$t(entity.album, {\"count\": 2}) 앨범수",
"bpm": "bpm",
"albumCount": "$t(entity.album_other) 앨범수",
"comment": "코멘트",
"favorited": "즐겨찾기",
"fromYear": "시작 년도",
"genre": "$t(entity.genre, {\"count\": 1})",
"genre": "$t(entity.genre_one)",
"id": "아이디",
"isCompilation": "편집앨범 여부",
"isFavorited": "즐겨찾기 여부",
@@ -251,7 +251,7 @@
"input_name": "서버 이름",
"input_password": "비밀번호",
"input_savePassword": "비밀번호 저장하기",
"input_url": "URL",
"input_url": "url",
"error_savePassword": "비밀번호를 저장하는 도중 오류가 발생했습니다",
"ignoreCors": "CORS 무시 ($t(common.restartRequired))",
"ignoreSsl": "SSL 무시 ($t(common.restartRequired))",
@@ -262,16 +262,16 @@
},
"addToPlaylist": {
"input_skipDuplicates": "중복 건너뛰기",
"title": "$t(entity.playlist, {\"count\": 1}) 에 추가",
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
"title": "$t(entity.playlist_one) 에 추가",
"input_playlists": "$t(entity.playlist_other)",
"success": "$t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })에 $t(entity.trackWithCount, {\"count\": {{message}} })가 추가되었습니다",
"create": "$t(entity.playlist, {\"count\": 1}) {{playlist}} 생성",
"searchOrCreate": "$t(entity.playlist, {\"count\": 2}) 검색 또는 입력하여 새로 만들기"
"create": "$t(entity.playlist_one) {{playlist}} 생성",
"searchOrCreate": "$t(entity.playlist_other) 검색 또는 입력하여 새로 만들기"
},
"lyricSearch": {
"title": "가사 검색",
"input_name": "$t(common.name)",
"input_artist": "$t(entity.artist, {\"count\": 1})"
"input_artist": "$t(entity.artist_one)"
},
"queryEditor": {
"input_optionMatchAll": "모두 일치",
@@ -279,9 +279,9 @@
"title": "쿼리 편집기"
},
"editPlaylist": {
"title": "$t(entity.playlist, {\"count\": 1}) 편집",
"title": "$t(entity.playlist_one) 편집",
"publicJellyfinNote": "Jellyfin은 재생목록 공개 여부를 노출하지 않습니다. 만약 공개되길 원한다면 다음을 선택하세요",
"success": "$t(entity.playlist, {\"count\": 1}) 업데이트 되었습니다"
"success": "$t(entity.playlist_one) 업데이트 되었습니다"
},
"shareItem": {
"allowDownloading": "다운로드 허용",
@@ -298,15 +298,15 @@
"createPlaylist": {
"input_description": "$t(common.description)",
"input_name": "$t(common.name)",
"success": "$t(entity.playlist, {\"count\": 1})를 생성했습니다",
"success": "$t(entity.playlist_one)를 생성했습니다",
"input_owner": "$t(common.owner)",
"input_public": "공개",
"title": "$t(entity.playlist, {\"count\": 1}) 생성"
"title": "$t(entity.playlist_one) 생성"
},
"deletePlaylist": {
"input_confirm": "확인을 위해 $t(entity.playlist, {\"count\": 1})의 이름을 적어주세요",
"success": "$t(entity.playlist, {\"count\": 1})가 삭제되었습니다",
"title": "$t(entity.playlist, {\"count\": 1}) 삭제"
"input_confirm": "확인을 위해 $t(entity.playlist_one)의 이름을 적어주세요",
"success": "$t(entity.playlist_one)가 삭제되었습니다",
"title": "$t(entity.playlist_one) 삭제"
},
"privateMode": {
"enabled": "프라이빗 모드가 활성화되었습니다. 재생상태가 외부 서비스에 지금부터 노출되지 않습니다",
@@ -362,8 +362,8 @@
"download": "다운로드",
"numberSelected": "{{count}}개 선택됨",
"shareItem": "공유",
"goToAlbum": "$t(entity.album, {\"count\": 1})으로 이동",
"goToAlbumArtist": "$t(entity.albumArtist, {\"count\": 1})으로 이동",
"goToAlbum": "$t(entity.album_one)으로 이동",
"goToAlbumArtist": "$t(entity.albumArtist_one)으로 이동",
"showDetails": "추가정보"
},
"albumArtistDetail": {
@@ -371,17 +371,17 @@
"viewDiscography": "디스코그래피 보기",
"appearsOn": "참여 앨범",
"recentReleases": "최근 앨범",
"relatedArtists": "연관 $t(entity.artist, {\"count\": 2})",
"relatedArtists": "연관 $t(entity.artist_other)",
"topSongs": "최고의 곡들",
"topSongsFrom": "{{title}}이 포함된 최고의 곡들",
"viewAll": "전부 보이기",
"viewAllTracks": "$t(entity.track, {\"count\": 2}) 전부 보이기"
"viewAllTracks": "$t(entity.track_other) 전부 보이기"
},
"albumArtistList": {
"title": "$t(entity.albumArtist, {\"count\": 2})"
"title": "$t(entity.albumArtist_other)"
},
"albumDetail": {
"moreFromArtist": "$t(entity.artist, {\"count\": 1}) 더 보기",
"moreFromArtist": "$t(entity.artist_one) 더 보기",
"moreFromGeneric": "{{item}} 더 보기",
"released": "발매"
},
@@ -389,8 +389,8 @@
"artistAlbums": "{{artist}}의 앨범"
},
"genreList": {
"showAlbums": "$t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2}) 표시",
"showTracks": "$t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2}) 표시"
"showAlbums": "$t(entity.genre_one) $t(entity.album_other) 표시",
"showTracks": "$t(entity.genre_one) $t(entity.track_other) 표시"
},
"globalSearch": {
"commands": {
@@ -425,7 +425,7 @@
"sidebar": {
"myLibrary": "내 라이브러리",
"nowPlaying": "재생중",
"shared": "공유 $t(entity.playlist, {\"count\": 2})"
"shared": "공유 $t(entity.playlist_other)"
},
"trackList": {
"artistTracks": "{{artist}}의 음악"
@@ -458,8 +458,8 @@
"playSimilarSongs": "비슷한 곡 재생",
"previous": "이전",
"queue_clear": "재생 대기열 지우기",
"queue_moveToBottom": "선택한 곡을 가장 아래로 이동",
"queue_moveToTop": "선택한 곡을 가장 로 이동",
"queue_moveToBottom": "선택한 곡을 가장 로 이동",
"queue_moveToTop": "선택한 곡을 가장 아래로 이동",
"queue_remove": "선택한 항목 삭제",
"repeat": "반복",
"repeat_all": "모두 반복하기",
File diff suppressed because it is too large Load Diff
+457 -1214
View File
File diff suppressed because it is too large Load Diff
+906 -1026
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+390 -392
View File
@@ -1,356 +1,353 @@
{
"action": {
"addToFavorites": "Adicionar a $t(entity.favorite, {\"count\": 2})",
"addToPlaylist": "Adicionar a $t(entity.playlist, {\"count\": 1})",
"clearQueue": "Limpar fila",
"createPlaylist": "Criar $t(entity.playlist, {\"count\": 1})",
"deletePlaylist": "Apagar $t(entity.playlist, {\"count\": 1})",
"deselectAll": "Desmarcar todos",
"editPlaylist": "Editar $t(entity.playlist, {\"count\": 1})",
"goToPage": "Vá para página",
"moveToNext": "Mover para o próximo",
"moveToBottom": "Mover para baixo",
"moveToTop": "Mover para o topo",
"addToFavorites": "adicionar a $t(entity.favorite_other)",
"addToPlaylist": "adicionar a $t(entity.playlist_one)",
"clearQueue": "limpar fila",
"createPlaylist": "criar $t(entity.playlist_one)",
"deletePlaylist": "apagar $t(entity.playlist_one)",
"deselectAll": "desmarcar todos",
"editPlaylist": "editar $t(entity.playlist_one)",
"goToPage": "vá para página",
"moveToNext": "mover para o próximo",
"moveToBottom": "mover para baixo",
"moveToTop": "mover para o topo",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "Remover de $t(entity.favorite, {\"count\": 2})",
"removeFromPlaylist": "Remover da $t(entity.playlist, {\"count\": 1})",
"removeFromQueue": "Remover da fila",
"setRating": "Definir classificação",
"toggleSmartPlaylistEditor": "Alternar editor $t(entity.smartPlaylist)",
"viewPlaylists": "Ver $t(entity.playlist, {\"count\": 2})",
"removeFromFavorites": "remover de $t(entity.favorite_other)",
"removeFromPlaylist": "remover da $t(entity.playlist_one)",
"removeFromQueue": "remover da fila",
"setRating": "definir classificação",
"toggleSmartPlaylistEditor": "alternar editor $t(entity.smartPlaylist)",
"viewPlaylists": "ver $t(entity.playlist_other)",
"openIn": {
"lastfm": "Abrir em Last.fm",
"musicbrainz": "Abrir em MusicBrainz"
}
},
"common": {
"action_one": "Ação",
"action_one": "ação",
"action_many": "ações",
"action_other": "Ações",
"add": "Adicionar",
"additionalParticipants": "Participantes adicionais",
"newVersion": "Uma nova versão foi instalada ({{version}})",
"viewReleaseNotes": "Ver notas de lançamento",
"albumGain": "Ganho do álbum",
"albumPeak": "Pico do álbum",
"areYouSure": "Tem certeza?",
"ascending": "Ascendente",
"backward": "Para trás",
"biography": "Biografia",
"bitrate": "Taxa de bits",
"bpm": "Bpm",
"cancel": "Cancelar",
"center": "Centro",
"channel_one": "Canal",
"action_other": "ações",
"add": "adicionar",
"additionalParticipants": "participantes adicionais",
"newVersion": "uma nova versão foi instalada ({{version}})",
"viewReleaseNotes": "ver notas de lançamento",
"albumGain": "ganho do álbum",
"albumPeak": "pico do álbum",
"areYouSure": "tem certeza?",
"ascending": "ascendente",
"backward": "para trás",
"biography": "biografia",
"bitrate": "taxa de bits",
"bpm": "bpm",
"cancel": "cancelar",
"center": "centro",
"channel_one": "canal",
"channel_many": "canais",
"channel_other": "Canais",
"clear": "Limpar",
"close": "Fechar",
"codec": "Codec",
"collapse": "Minimizar",
"comingSoon": "Em breve…",
"configure": "Configurar",
"confirm": "Confirmar",
"create": "Criar",
"currentSong": "$t(entity.track, {\"count\": 1}) atual",
"decrease": "Diminuir",
"delete": "Apagar",
"descending": "Abaixar",
"description": "Descrição",
"disable": "Desativar",
"disc": "Disco",
"dismiss": "Liberar",
"duration": "Duração",
"edit": "Editar",
"enable": "Ativar",
"expand": "Expandir",
"favorite": "Favorito",
"filter_one": "Filtro",
"channel_other": "canais",
"clear": "limpar",
"close": "fechar",
"codec": "codec",
"collapse": "minimizar",
"comingSoon": "em breve…",
"configure": "configurar",
"confirm": "confirmar",
"create": "criar",
"currentSong": "$t(entity.track_one) atual",
"decrease": "diminuir",
"delete": "apagar",
"descending": "abaixar",
"description": "descrição",
"disable": "desativar",
"disc": "disco",
"dismiss": "liberar",
"duration": "duração",
"edit": "editar",
"enable": "ativar",
"expand": "expandir",
"favorite": "favorito",
"filter_one": "filtro",
"filter_many": "filtros",
"filter_other": "Filtros",
"filters": "Filtros",
"forceRestartRequired": "Reinicie para aplicar as alterações… feche a notificação para reiniciar",
"forward": "Para frente",
"gap": "Intervalo",
"grouping": "Agrupamento",
"home": "Início",
"increase": "Incrementar",
"left": "Esquerda",
"limit": "Limite",
"manage": "Gerir",
"maximize": "Maximizar",
"menu": "Menu",
"minimize": "Minimizar",
"modified": "Modificado",
"filter_other": "filtros",
"filters": "filtros",
"forceRestartRequired": "reinicie para aplicar as alterações… feche a notificação para reiniciar",
"forward": "para frente",
"gap": "intervalo",
"home": "início",
"increase": "incrementar",
"left": "esquerda",
"limit": "limite",
"manage": "gerir",
"maximize": "maximizar",
"menu": "menu",
"minimize": "minimizar",
"modified": "modificado",
"mbid": "ID no MusicBrainz",
"name": "Nome",
"no": "Não",
"none": "Nenhum",
"noResultsFromQuery": "A consulta não retornou resultados",
"note": "Observação",
"ok": "Ok",
"owner": "Dono",
"path": "Caminho",
"playerMustBePaused": "O player deve estar pausado",
"preview": "Pré-visualizar",
"previousSong": "Anterior $t(entity.track, {\"count\": 1})",
"quit": "Sair",
"random": "Aleatório",
"rating": "Classificação",
"refresh": "Atualizar",
"reload": "Recarregar",
"reset": "Reiniciar",
"resetToDefault": "Restaurar ao padrão",
"restartRequired": "É necessário reiniciar",
"right": "Direita",
"save": "Gravar",
"saveAndReplace": "Gravar e substituir",
"saveAs": "Gravar como",
"search": "Procurar",
"setting_one": "Configuração",
"setting_many": "",
"setting_other": "",
"share": "Partilhar",
"size": "Tamanho",
"sortOrder": "Ordem",
"tags": "Tags",
"title": "Titulo",
"trackNumber": "Faixa",
"trackGain": "Ganho da faixa",
"trackPeak": "Pico da faixa",
"translation": "Tradução",
"unknown": "Desconhecido",
"version": "Versão",
"year": "Ano",
"yes": "Sim"
"name": "nome",
"no": "não",
"none": "nenhum",
"noResultsFromQuery": "a consulta não retornou resultados",
"note": "observação",
"ok": "ok",
"owner": "dono",
"path": "caminho",
"playerMustBePaused": "o player deve estar pausado",
"preview": "pré-visualizar",
"previousSong": "anterior $t(entity.track_one)",
"quit": "sair",
"random": "aleatório",
"rating": "classificação",
"refresh": "atualizar",
"reload": "recarregar",
"reset": "reiniciar",
"resetToDefault": "restaurar ao padrão",
"restartRequired": "é necessário reiniciar",
"right": "direita",
"save": "gravar",
"saveAndReplace": "gravar e substituir",
"saveAs": "gravar como",
"search": "procurar",
"setting": "configuração",
"share": "partilhar",
"size": "tamanho",
"sortOrder": "ordem",
"tags": "tags",
"title": "titulo",
"trackNumber": "faixa",
"trackGain": "ganho da faixa",
"trackPeak": "pico da faixa",
"translation": "tradução",
"unknown": "desconhecido",
"version": "versão",
"year": "ano",
"yes": "sim"
},
"entity": {
"album_one": "Álbum",
"album_many": "Álbuns",
"album_other": "Álbuns",
"albumArtist_one": "Artista do álbum",
"albumArtist_many": "Artistas do álbum",
"albumArtist_other": "Artistas do álbum",
"album_one": "álbum",
"album_many": "álbuns",
"album_other": "álbuns",
"albumArtist_one": "artista do álbum",
"albumArtist_many": "artistas do álbum",
"albumArtist_other": "artistas do álbum",
"albumArtistCount_one": "{{count}} artista do álbum",
"albumArtistCount_many": "{{count}} artistas do álbum",
"albumArtistCount_other": "{{count}} artistas do álbum",
"albumWithCount_one": "{{count}} álbum",
"albumWithCount_many": "{{count}} álbuns",
"albumWithCount_other": "{{count}} álbuns",
"artist_one": "Artista",
"artist_many": "Artistas",
"artist_other": "Artistas",
"artist_one": "artista",
"artist_many": "artistas",
"artist_other": "artistas",
"artistWithCount_one": "{{count}} artista",
"artistWithCount_many": "{{count}} artistas",
"artistWithCount_other": "{{count}} artistas",
"favorite_one": "Favorito",
"favorite_many": "Favoritos",
"favorite_other": "Favoritos",
"folder_one": "Pasta",
"folder_many": "Pastas",
"folder_other": "Pastas",
"favorite_one": "favorito",
"favorite_many": "favoritos",
"favorite_other": "favoritos",
"folder_one": "pasta",
"folder_many": "pastas",
"folder_other": "pastas",
"folderWithCount_one": "{{count}} pasta",
"folderWithCount_many": "{{count}} pastas",
"folderWithCount_other": "{{count}} pastas",
"genre_one": "Gênero",
"genre_many": "Gêneros",
"genre_other": "Gêneros",
"genre_one": "gênero",
"genre_many": "gêneros",
"genre_other": "gêneros",
"genreWithCount_one": "{{count}} gênero",
"genreWithCount_many": "{{count}} gêneros",
"genreWithCount_other": "{{count}} gêneros",
"playlist_one": "Playlist",
"playlist_many": "Playlists",
"playlist_other": "Playlists",
"playlist_one": "playlist",
"playlist_many": "playlists",
"playlist_other": "playlists",
"play_one": "{{count}} reprodução",
"play_many": "{{count}} reproduções",
"play_other": "{{count}} reproduções",
"playlistWithCount_one": "{{count}} playlist",
"playlistWithCount_many": "{{count}} playlists",
"playlistWithCount_other": "{{count}} playlists",
"smartPlaylist": "$t(entity.playlist, {\"count\": 1}) Inteligente",
"track_one": "Faixa",
"track_many": "Faixas",
"track_other": "Faixas",
"song_one": "Música",
"song_many": "Músicas",
"song_other": "Músicas",
"smartPlaylist": "$t(entity.playlist_one) inteligente",
"track_one": "faixa",
"track_many": "faixas",
"track_other": "faixas",
"song_one": "música",
"song_many": "músicas",
"song_other": "músicas",
"trackWithCount_one": "{{count}} faixa",
"trackWithCount_many": "{{count}} faixas",
"trackWithCount_other": "{{count}} faixas"
},
"error": {
"apiRouteError": "Não é possível encaminhar a solicitação",
"audioDeviceFetchError": "Ocorreu um erro ao tentar obter dispositivos de áudio",
"authenticationFailed": "Falha na autenticação",
"badAlbum": "Está a ver este erro por que está música não é parte de algum album. um motivo comum para si estar a ver este erro é se a sua música estiver na raiz da sua pasta de músicas. o Jellyfin apenas agrupa as músicas se elas estiveram na mesma pasta",
"badValue": "Opção inválida \"{{value}}\". este valor não existe no momento",
"credentialsRequired": "Credenciais necessárias",
"endpointNotImplementedError": "Endpoint {{endpoint}} não está implementado para {{serverType}}",
"genericError": "Um erro ocorreu",
"invalidServer": "Servidor inválido",
"localFontAccessDenied": "Acesso a fontes locais rejeitado",
"loginRateError": "Muitas tentativas de login, tente novamente em alguns segundos",
"apiRouteError": "não é possível encaminhar a solicitação",
"audioDeviceFetchError": "ocorreu um erro ao tentar obter dispositivos de áudio",
"authenticationFailed": "falha na autenticação",
"badAlbum": "está a ver este erro por que está música não é parte de algum album. um motivo comum para si estar a ver este erro é se a sua música estiver na raiz da sua pasta de músicas. o Jellyfin apenas agrupa as músicas se elas estiveram na mesma pasta",
"badValue": "opção inválida \"{{value}}\". este valor não existe no momento",
"credentialsRequired": "credenciais necessárias",
"endpointNotImplementedError": "endpoint {{endpoint}} não está implementado para {{serverType}}",
"genericError": "um erro ocorreu",
"invalidServer": "servidor inválido",
"localFontAccessDenied": "acesso a fontes locais rejeitado",
"loginRateError": "muitas tentativas de login, tente novamente em alguns segundos",
"mpvRequired": "MPV necessário",
"networkError": "Ocorreu um erro na internet",
"openError": "Não foi possível abrir o ficheiro",
"playbackError": "Ocorreu um erro ao tentar reproduzir a média",
"remoteDisableError": "Ocorreu um erro ao tentar $t(common.disable) o servidor remoto",
"remoteEnableError": "Ocorreu um erro ao tentar $t(common.enable) o servidor remoto",
"remotePortError": "Ocorreu um erro ao tentar definir a porta do servidor remoto",
"remotePortWarning": "Reinicie o servidor para aplicar a nova porta",
"serverNotSelectedError": "Nenhum servidor selecionado",
"serverRequired": "Servidor necessário",
"sessionExpiredError": "A sua sessão expirou",
"systemFontError": "Ocorreu um erro ao tentar obter fontes do sistema"
"networkError": "ocorreu um erro na internet",
"openError": "não foi possível abrir o ficheiro",
"playbackError": "ocorreu um erro ao tentar reproduzir a média",
"remoteDisableError": "ocorreu um erro ao tentar $t(common.disable) o servidor remoto",
"remoteEnableError": "ocorreu um erro ao tentar $t(common.enable) o servidor remoto",
"remotePortError": "ocorreu um erro ao tentar definir a porta do servidor remoto",
"remotePortWarning": "reinicie o servidor para aplicar a nova porta",
"serverNotSelectedError": "nenhum servidor selecionado",
"serverRequired": "servidor necessário",
"sessionExpiredError": "a sua sessão expirou",
"systemFontError": "ocorreu um erro ao tentar obter fontes do sistema"
},
"filter": {
"album": "$t(entity.album, {\"count\": 1})",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"albumCount": "Número de $t(entity.album, {\"count\": 2})",
"artist": "$t(entity.artist, {\"count\": 1})",
"biography": "Bibliografia",
"bitrate": "Bitrate",
"bpm": "Bpm",
"album": "$t(entity.album_one)",
"albumArtist": "$t(entity.albumArtist_one)",
"albumCount": "número de $t(entity.album_other)",
"artist": "$t(entity.artist_one)",
"biography": "bibliografia",
"bitrate": "bitrate",
"bpm": "bpm",
"channels": "$t(common.channel_other)",
"comment": "Comentário",
"comment": "comentário",
"communityRating": "Nota da comunidade",
"criticRating": "Avaliação da crítica",
"dateAdded": "Data de adição",
"disc": "Disco",
"duration": "Duração",
"favorited": "Favoritado",
"fromYear": "A partir do ano",
"genre": "$t(entity.genre, {\"count\": 1})",
"id": "Id",
"isCompilation": "É compilação",
"isFavorited": "É favoritado",
"isPublic": "É público",
"isRated": "Possui avaliação",
"isRecentlyPlayed": "Foi tocado recentemente",
"lastPlayed": "Última tocada",
"mostPlayed": "Mais tocado",
"name": "Nome",
"note": "Nota",
"criticRating": "avaliação da crítica",
"dateAdded": "data de adição",
"disc": "disco",
"duration": "duração",
"favorited": "favoritado",
"fromYear": "a partir do ano",
"genre": "$t(entity.genre_one)",
"id": "id",
"isCompilation": "é compilação",
"isFavorited": "é favoritado",
"isPublic": "é público",
"isRated": "possui avaliação",
"isRecentlyPlayed": "foi tocado recentemente",
"lastPlayed": "última tocada",
"mostPlayed": "mais tocado",
"name": "nome",
"note": "nota",
"owner": "$t(common.owner)",
"path": "Caminho",
"playCount": "Contador de reproduções",
"random": "Aleatório",
"rating": "Avaliação",
"recentlyAdded": "Adicionado recentemente",
"recentlyPlayed": "Tocado recentemente",
"recentlyUpdated": "Atualizado recentemente",
"releaseDate": "Data de lançamento",
"releaseYear": "Ano de lançamento",
"search": "Buscar",
"songCount": "Contador de músicas",
"title": "Titulo",
"toYear": "Até o ano",
"trackNumber": "Faixa"
"path": "caminho",
"playCount": "contador de reproduções",
"random": "aleatório",
"rating": "avaliação",
"recentlyAdded": "adicionado recentemente",
"recentlyPlayed": "tocado recentemente",
"recentlyUpdated": "atualizado recentemente",
"releaseDate": "data de lançamento",
"releaseYear": "ano de lançamento",
"search": "buscar",
"songCount": "contador de músicas",
"title": "titulo",
"toYear": "até o ano",
"trackNumber": "faixa"
},
"form": {
"addServer": {
"error_savePassword": "Um erro ocorreu ao tentar gravar a palavra-passe",
"ignoreCors": "Ignorar CORS ($t(common.restartRequired))",
"ignoreSsl": "Ignorar ssl ($t(common.restartRequired))",
"input_legacyAuthentication": "Ativar autenticação legada",
"input_name": "Nome do servidor",
"input_password": "Palavra-passe",
"input_savePassword": "Gravar palavra-passe",
"input_url": "Url",
"input_username": "Nome de utilizador",
"success": "Servidor adicionado com sucesso",
"title": "Adicionar servidor"
"error_savePassword": "um erro ocorreu ao tentar gravar a palavra-passe",
"ignoreCors": "ignorar CORS ($t(common.restartRequired))",
"ignoreSsl": "ignorar ssl ($t(common.restartRequired))",
"input_legacyAuthentication": "ativar autenticação legada",
"input_name": "nome do servidor",
"input_password": "palavra-passe",
"input_savePassword": "gravar palavra-passe",
"input_url": "url",
"input_username": "nome de utilizador",
"success": "servidor adicionado com sucesso",
"title": "adicionar servidor"
},
"addToPlaylist": {
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
"input_skipDuplicates": "Pular duplicadas",
"success": "Adicionado $t(entity.trackWithCount, {\"count\": {{message}} }) para $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"title": "Adicionar à $t(entity.playlist, {\"count\": 1})"
"input_playlists": "$t(entity.playlist_other)",
"input_skipDuplicates": "pular duplicadas",
"success": "adicionado $t(entity.trackWithCount, {\"count\": {{message}} }) para $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"title": "adicionar à $t(entity.playlist_one)"
},
"createPlaylist": {
"input_description": "$t(common.description)",
"input_name": "$t(common.name)",
"input_owner": "$t(common.owner)",
"input_public": "Público",
"success": "$t(entity.playlist, {\"count\": 1}) criada com sucesso",
"title": "Criar $t(entity.playlist, {\"count\": 1})"
"input_public": "público",
"success": "$t(entity.playlist_one) criada com sucesso",
"title": "criar $t(entity.playlist_one)"
},
"deletePlaylist": {
"input_confirm": "Escreva o nome da $t(entity.playlist, {\"count\": 1}) para confirmar",
"success": "$t(entity.playlist, {\"count\": 1}) apagada com sucesso",
"title": "Apagar $t(entity.playlist, {\"count\": 1})"
"input_confirm": "escreva o nome da $t(entity.playlist_one) para confirmar",
"success": "$t(entity.playlist_one) apagada com sucesso",
"title": "apagar $t(entity.playlist_one)"
},
"editPlaylist": {
"publicJellyfinNote": "O Jellyfin por algum motivo não expõe se uma playlist é pública ou não. Se deseja que ela permaneça pública, por favor selecione a seguinte entrada",
"success": "$t(entity.playlist, {\"count\": 1}) atualizada com sucesso",
"title": "Editar $t(entity.playlist, {\"count\": 1})"
"success": "$t(entity.playlist_one) atualizada com sucesso",
"title": "editar $t(entity.playlist_one)"
},
"lyricSearch": {
"input_artist": "$t(entity.artist, {\"count\": 1})",
"input_artist": "$t(entity.artist_one)",
"input_name": "$t(common.name)",
"title": "Pesquisa de letras"
"title": "pesquisa de letras"
},
"queryEditor": {
"input_optionMatchAll": "Corresponder todos",
"input_optionMatchAny": "Corresponder qualquer um"
"input_optionMatchAll": "corresponder todos",
"input_optionMatchAny": "corresponder qualquer um"
},
"shareItem": {
"allowDownloading": "Permitir descargas",
"description": "Descrição",
"setExpiration": "Definir expiração",
"success": "Ligação de compartilhamento copiado para a área de transferência (ou clique aqui para abrir)",
"expireInvalid": "A expiração deve ser uma data futura",
"createFailed": "Falha ao criar compartilhamento (o compartilhamento está ativado?)"
"allowDownloading": "permitir descargas",
"description": "descrição",
"setExpiration": "definir expiração",
"success": "ligação de compartilhamento copiado para a área de transferência (ou clique aqui para abrir)",
"expireInvalid": "a expiração deve ser uma data futura",
"createFailed": "falha ao criar compartilhamento (o compartilhamento está ativado?)"
},
"updateServer": {
"success": "Servidor atualizado com sucesso",
"title": "Atualizar servidor"
"success": "servidor atualizado com sucesso",
"title": "atualizar servidor"
}
},
"page": {
"albumArtistDetail": {
"about": "Sobre {{artist}}",
"appearsOn": "Aparece em",
"recentReleases": "Lançamentos recentes",
"viewDiscography": "Ver discografia",
"relatedArtists": "$t(entity.artist, {\"count\": 2}) relacionados",
"topSongs": "Músicas mais tocadas",
"topSongsFrom": "Músicas mais tocadas de {{title}}",
"viewAll": "Ver tudo",
"viewAllTracks": "Ver todas as $t(entity.track, {\"count\": 2})"
"appearsOn": "aparece em",
"recentReleases": "lançamentos recentes",
"viewDiscography": "ver discografia",
"relatedArtists": "$t(entity.artist_other) relacionados",
"topSongs": "músicas mais tocadas",
"topSongsFrom": "músicas mais tocadas de {{title}}",
"viewAll": "ver tudo",
"viewAllTracks": "ver todas as $t(entity.track_other)"
},
"albumArtistList": {
"title": "$t(entity.albumArtist, {\"count\": 2})"
"title": "$t(entity.albumArtist_other)"
},
"albumDetail": {
"moreFromArtist": "Mais deste $t(entity.artist, {\"count\": 1})",
"moreFromGeneric": "Mais que {{item}}",
"released": "Lançado"
"moreFromArtist": "mais deste $t(entity.artist_one)",
"moreFromGeneric": "mais que {{item}}",
"released": "lançado"
},
"albumList": {
"artistAlbums": "Álbuns de {{artist}}",
"genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})",
"title": "$t(entity.album, {\"count\": 2})"
"artistAlbums": "álbuns de {{artist}}",
"genreAlbums": "\"{{genre}}\" $t(entity.album_other)",
"title": "$t(entity.album_other)"
},
"appMenu": {
"collapseSidebar": "Recolher barra lateral",
"expandSidebar": "Expandir barra lateral",
"goBack": "Voltar",
"goForward": "Avançar",
"manageServers": "Gerir servidores",
"openBrowserDevtools": "Abrir ferramentas do programador",
"collapseSidebar": "recolher barra lateral",
"expandSidebar": "expandir barra lateral",
"goBack": "voltar",
"goForward": "avançar",
"manageServers": "gerir servidores",
"openBrowserDevtools": "abrir ferramentas do programador",
"quit": "$t(common.quit)",
"selectServer": "Selecionar servidor",
"settings": "$t(common.setting, {\"count\": 2})",
"version": "Versão {{version}}"
"selectServer": "selecionar servidor",
"settings": "$t(common.setting_other)",
"version": "versão {{version}}"
},
"manageServers": {
"title": "Gerir servidores",
"serverDetails": "Pormenores do servidor",
"title": "gerir servidores",
"serverDetails": "pormenores do servidor",
"url": "URL",
"username": "Nome de utilizador",
"editServerDetailsTooltip": "Editar pormenores do servidor",
"removeServer": "Remover servidor"
"username": "nome de utilizador",
"editServerDetailsTooltip": "editar pormenores do servidor",
"removeServer": "remover servidor"
},
"contextMenu": {
"addFavorite": "$t(action.addToFavorites)",
@@ -361,7 +358,7 @@
"createPlaylist": "$t(action.createPlaylist)",
"deletePlaylist": "$t(action.deletePlaylist)",
"deselectAll": "$t(action.deselectAll)",
"download": "Descarregar",
"download": "descarregar",
"moveToNext": "$t(action.moveToNext)",
"moveToBottom": "$t(action.moveToBottom)",
"moveToTop": "$t(action.moveToTop)",
@@ -373,172 +370,173 @@
"removeFromQueue": "$t(action.removeFromQueue)",
"setRating": "$t(action.setRating)",
"playShuffled": "$t(player.shuffle)",
"shareItem": "Partilhar elemento",
"showDetails": "Obter informações"
"shareItem": "partilhar elemento",
"showDetails": "obter informações"
},
"fullscreenPlayer": {
"config": {
"dynamicBackground": "Fundo dinâmico",
"dynamicImageBlur": "Tamanho do desfoque da imagem",
"dynamicIsImage": "Ativar imagem de fundo",
"followCurrentLyric": "Acompanhar letra",
"lyricAlignment": "Alinhamento da letra",
"lyricOffset": "Deslocamento da letra (ms)",
"lyricGap": "Espaçamento da letra",
"lyricSize": "Tamanho da letra",
"opacity": "Opacidade",
"showLyricMatch": "Exibir correspondência da letra",
"showLyricProvider": "Exibir origem da letra",
"synchronized": "Sincronizado",
"unsynchronized": "Não sincronizado",
"useImageAspectRatio": "Usar proporção da imagem"
"dynamicBackground": "fundo dinâmico",
"dynamicImageBlur": "tamanho do desfoque da imagem",
"dynamicIsImage": "ativar imagem de fundo",
"followCurrentLyric": "acompanhar letra",
"lyricAlignment": "alinhamento da letra",
"lyricOffset": "deslocamento da letra (ms)",
"lyricGap": "espaçamento da letra",
"lyricSize": "tamanho da letra",
"opacity": "opacidade",
"showLyricMatch": "exibir correspondência da letra",
"showLyricProvider": "exibir origem da letra",
"synchronized": "sincronizado",
"unsynchronized": "não sincronizado",
"useImageAspectRatio": "usar proporção da imagem"
},
"lyrics": "Letra",
"related": "Relacionado",
"upNext": "A seguir",
"visualizer": "Visualizador",
"noLyrics": "Nenhuma letra encontrada"
"lyrics": "letra",
"related": "relacionado",
"upNext": "a seguir",
"visualizer": "visualizador",
"noLyrics": "nenhuma letra encontrada"
},
"genreList": {
"showAlbums": "Mostrar $t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2})",
"showTracks": "Mostrar $t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2})",
"title": "$t(entity.genre, {\"count\": 2})"
"showAlbums": "mostrar $t(entity.genre_one) $t(entity.album_other)",
"showTracks": "mostrar $t(entity.genre_one) $t(entity.track_other)",
"title": "$t(entity.genre_other)"
},
"globalSearch": {
"commands": {
"goToPage": "Ir à página",
"searchFor": "Procurar {{query}}",
"serverCommands": "Comandos do servidor"
"goToPage": "ir à página",
"searchFor": "procurar {{query}}",
"serverCommands": "comandos do servidor"
},
"title": "Comandos"
"title": "comandos"
},
"home": {
"explore": "Explore a sua biblioteca",
"mostPlayed": "Mais tocado",
"newlyAdded": "Lançamentos recém-adicionados",
"recentlyPlayed": "Tocado recentemente",
"explore": "explore a sua biblioteca",
"mostPlayed": "mais tocado",
"newlyAdded": "lançamentos recém-adicionados",
"recentlyPlayed": "tocado recentemente",
"title": "$t(common.home)"
},
"itemDetail": {
"copyPath": "Copiar caminho para a área de transferência",
"copiedPath": "Caminho copiado com sucesso",
"openFile": "Mostrar faixa no gestor de ficheiros"
"copyPath": "copiar caminho para a área de transferência",
"copiedPath": "caminho copiado com sucesso",
"openFile": "mostrar faixa no gestor de ficheiros"
},
"playlist": {
"reorder": "Reordenar apenas disponível quando ordenado pelo ID"
"reorder": "reordenar apenas disponível quando ordenado pelo id"
},
"playlistList": {
"title": "$t(entity.playlist, {\"count\": 2})"
"title": "$t(entity.playlist_other)"
},
"setting": {
"advanced": "Avançado",
"generalTab": "Geral",
"hotkeysTab": "Teclas de atalho",
"playbackTab": "Reprodução",
"windowTab": "Janela"
"advanced": "avançado",
"generalTab": "geral",
"hotkeysTab": "teclas de atalho",
"playbackTab": "reprodução",
"windowTab": "janela"
},
"sidebar": {
"albumArtists": "$t(entity.albumArtist, {\"count\": 2})",
"albums": "$t(entity.album, {\"count\": 2})",
"artists": "$t(entity.artist, {\"count\": 2})",
"folders": "$t(entity.folder, {\"count\": 2})",
"genres": "$t(entity.genre, {\"count\": 2})",
"albumArtists": "$t(entity.albumArtist_other)",
"albums": "$t(entity.album_other)",
"artists": "$t(entity.artist_other)",
"folders": "$t(entity.folder_other)",
"genres": "$t(entity.genre_other)",
"home": "$t(common.home)",
"myLibrary": "A minha biblioteca",
"nowPlaying": "Agora a tocar",
"playlists": "$t(entity.playlist, {\"count\": 2})",
"myLibrary": "a minha biblioteca",
"nowPlaying": "agora a tocar",
"playlists": "$t(entity.playlist_other)",
"search": "$t(common.search)",
"settings": "$t(common.setting, {\"count\": 2})",
"shared": "$t(entity.playlist, {\"count\": 2}) partilhada",
"tracks": "$t(entity.track, {\"count\": 2})"
"settings": "$t(common.setting_other)",
"shared": "$t(entity.playlist_other) partilhada",
"tracks": "$t(entity.track_other)"
},
"trackList": {
"artistTracks": "Faixas de {{artist}}",
"genreTracks": "\"{{genre}}\" $t(entity.track, {\"count\": 2})",
"title": "$t(entity.track, {\"count\": 2})"
"artistTracks": "faixas de {{artist}}",
"genreTracks": "\"{{genre}}\" $t(entity.track_other)",
"title": "$t(entity.track_other)"
}
},
"player": {
"addLast": "Adicionar no final",
"addNext": "Adicionar a seguir",
"favorite": "Favorito",
"mute": "Mudo",
"muted": "Mudo",
"next": "Próximo",
"play": "Tocar",
"playbackFetchCancel": "Isto demora um pouco... feche a notificação para cancelar",
"playbackFetchInProgress": "A carregar músicas…",
"playbackFetchNoResults": "Nenhuma música encontrada",
"playbackSpeed": "Velocidade de reprodução",
"playRandom": "Tocar aleatório",
"playSimilarSongs": "Tocar músicas similares",
"previous": "Anterior",
"queue_clear": "Limpar fila",
"queue_moveToBottom": "Mover selecionados para o fim",
"queue_moveToTop": "Mover selecionados para o topo",
"queue_remove": "Remover selecionados",
"repeat": "Repetir",
"repeat_all": "Repetir tudo",
"repeat_off": "Repetição desativada",
"shuffle": "Tocar aleatório",
"shuffle_off": "Aleatório desativado",
"skip": "Pular",
"skip_back": "Retroceder",
"skip_forward": "Avançar",
"stop": "Parar",
"toggleFullscreenPlayer": "Alternar player de ecrã cheio",
"unfavorite": "Remover favorito",
"pause": "Pausar",
"viewQueue": "Ver fila"
"addLast": "adicionar no final",
"addNext": "adicionar a seguir",
"favorite": "favorito",
"mute": "mudo",
"muted": "mudo",
"next": "próximo",
"play": "tocar",
"playbackFetchCancel": "isto demora um pouco... feche a notificação para cancelar",
"playbackFetchInProgress": "a carregar músicas…",
"playbackFetchNoResults": "nenhuma música encontrada",
"playbackSpeed": "velocidade de reprodução",
"playRandom": "tocar aleatório",
"playSimilarSongs": "tocar músicas similares",
"previous": "anterior",
"queue_clear": "limpar fila",
"queue_moveToBottom": "mover selecionados para o topo",
"queue_moveToTop": "mover selecionados para o fim",
"queue_remove": "remover selecionados",
"repeat": "repetir",
"repeat_all": "repetir tudo",
"repeat_off": "repetição desativada",
"shuffle": "tocar aleatório",
"shuffle_off": "aleatório desativado",
"skip": "pular",
"skip_back": "retroceder",
"skip_forward": "avançar",
"stop": "parar",
"toggleFullscreenPlayer": "alternar player de ecrã cheio",
"unfavorite": "remover favorito",
"pause": "pausar",
"viewQueue": "ver fila"
},
"setting": {
"accentColor": "Cor de realce",
"accentColor_description": "Define a cor de realce para a aplicação",
"albumBackground": "Imagem de fundo do álbum",
"albumBackground_description": "Adiciona uma imagem de fundo contendo a arte do álbum para a página de álbum",
"albumBackgroundBlur": "Tamanho de desfoque da imagem de fundo do álbum",
"albumBackgroundBlur_description": "Ajusta a quantidade de desfoque aplicada para a imagem de fundo do álbum",
"applicationHotkeys": "Teclas de atalho da aplicação",
"applicationHotkeys_description": "Configure as teclas de atalho da aplicação. clique na caixa de seleção para definir como tecla de atalho global (somente desktop)",
"artistConfiguration": "Configuração da página de artista de álbum",
"artistConfiguration_description": "Configure quais elementos serão mostrados, e em qual ordem, na página de artista de álbum",
"audioDevice": "Dispositivo de áudio",
"audioDevice_description": "Selecione o dispositivo de áudio usado para reprodução (somente player web)",
"audioExclusiveMode": "Modo de áudio exclusivo",
"audioExclusiveMode_description": "Ativar modo de saída exclusiva. Neste modo, o sistema é geralmente bloqueado, e apenas mpv terá saída de áudio",
"audioPlayer": "Player de áudio",
"audioPlayer_description": "Selecione o player de áudio usado para reprodução",
"buttonSize": "Tamanho do botão da barra de reprodução",
"buttonSize_description": "O tamanho dos botões da barra de reprodução",
"clearCache": "Limpar cache do navegador",
"clearCache_description": "Uma 'limpeza geral' do Feishin. Em adição a limpar o cache do Feishin, limpa o cache do navegador (imagens gravadas e outros recursos). As credenciais de servidor e as configurações serão mantidas",
"clearQueryCache": "Limpar cache do Feishin",
"clearQueryCache_description": "Uma 'limpeza leve' do Feishin. Isto irá renovar playlists, metadados de faixas, e resetar letras gravadas. As configurações, as credenciais de servidor e o cache de imagens serão mantidos",
"clearCacheSuccess": "Cache limpo com sucesso",
"contextMenu": "Configuração do menu de contexto (clique do botão direito do rato)",
"contextMenu_description": "Permite esconder elementos exibidos no menu quando clica num elemento com o botão direito. elementos não selecionados serão escondidos",
"crossfadeDuration": "Duraçao de crossfade",
"crossfadeDuration_description": "Define a duração do efeito crossfade",
"crossfadeStyle_description": "Seleciona qual estilo de crossfade usado no player de áudio",
"customCssEnable": "Ativar CSS customizado",
"customCssEnable_description": "Permite escrever CSS customizado",
"customCssNotice": "Aviso: apesar de existir alguma higienização (URL() e content: não são permitidas), o uso de CSS personalizado ainda pode representar riscos ao alterar a interface",
"customCss": "Css customizado",
"disableLibraryUpdateOnStartup": "Desativar a verificação de novas versões na inicialização",
"accentColor": "cor de realce",
"accentColor_description": "define a cor de realce para a aplicação",
"albumBackground": "imagem de fundo do álbum",
"albumBackground_description": "adiciona uma imagem de fundo contendo a arte do álbum para a página de álbum",
"albumBackgroundBlur": "tamanho de desfoque da imagem de fundo do álbum",
"albumBackgroundBlur_description": "ajusta a quantidade de desfoque aplicada para a imagem de fundo do álbum",
"applicationHotkeys": "teclas de atalho da aplicação",
"applicationHotkeys_description": "configure as teclas de atalho da aplicação. clique na caixa de seleção para definir como tecla de atalho global (somente desktop)",
"artistConfiguration": "configuração da página de artista de álbum",
"artistConfiguration_description": "configure quais elementos serão mostrados, e em qual ordem, na página de artista de álbum",
"audioDevice": "dispositivo de áudio",
"audioDevice_description": "selecione o dispositivo de áudio usado para reprodução (somente player web)",
"audioExclusiveMode": "modo de áudio exclusivo",
"audioExclusiveMode_description": "ativar modo de saída exclusiva. Neste modo, o sistema é geralmente bloqueado, e apenas mpv terá saída de áudio",
"audioPlayer": "player de áudio",
"audioPlayer_description": "selecione o player de áudio usado para reprodução",
"buttonSize": "tamanho do botão da barra de reprodução",
"buttonSize_description": "o tamanho dos botões da barra de reprodução",
"clearCache": "limpar cache do navegador",
"clearCache_description": "uma 'limpeza geral' do feishin. em adição a limpar o cache do feishin, limpa o cache do navegador (imagens gravadas e outros recursos). as credenciais de servidor e as configurações serão mantidas",
"clearQueryCache": "limpar cache do feishin",
"clearQueryCache_description": "uma 'limpeza leve' do feishin. isto irá renovar playlists, metadados de faixas, e resetar letras gravadas. as configurações, as credenciais de servidor e o cache de imagens serão mantidos",
"clearCacheSuccess": "cache limpo com sucesso",
"contextMenu": "configuração do menu de contexto (clique do botão direito do rato)",
"contextMenu_description": "permite esconder elementos exibidos no menu quando clica num elemento com o botão direito. elementos não selecionados serão escondidos",
"crossfadeDuration": "duraçao de crossfade",
"crossfadeDuration_description": "define a duração do efeito crossfade",
"crossfadeStyle_description": "seleciona qual estilo de crossfade usado no player de áudio",
"customCssEnable": "ativar css customizado",
"customCssEnable_description": "permite escrever css customizado",
"customCssNotice": "Aviso: apesar de existir alguma higienização (url() e content: não são permitidas), o uso de css personalizado ainda pode representar riscos ao alterar a interface",
"customCss": "css customizado",
"disableAutomaticUpdates": "desativar atualizações automáticas",
"disableLibraryUpdateOnStartup": "desativar a verificação de novas versões na inicialização",
"discordApplicationId": "{{discord}} ID da aplicação",
"discordIdleStatus_description": "Quando ativado, atualiza o estado enquanto o player está ocioso",
"discordUpdateInterval_description": "O tempo em segundos entre cada atualização (mínimo 15 segundos)",
"playButtonBehavior_description": "Define o comportamento padrão do botão play ao adicionar músicas à fila"
"discordIdleStatus_description": "quando ativado, atualiza o estado enquanto o player está ocioso",
"discordUpdateInterval_description": "o tempo em segundos entre cada atualização (mínimo 15 segundos)",
"playButtonBehavior_description": "define o comportamento padrão do botão play ao adicionar músicas à fila"
},
"table": {
"column": {
"discNumber": "Disco",
"discNumber": "disco",
"size": "$t(common.size)",
"title": "Titulo"
"title": "titulo"
},
"config": {
"label": {
"discNumber": "Numero do disco",
"discNumber": "numero do disco",
"titleCombined": "$t(common.title) (combinado)"
}
}
+13 -13
View File
@@ -1,19 +1,19 @@
{
"common": {
"confirm": "Confirmă",
"create": "Creează",
"biography": "Biografie",
"areYouSure": "Ești sigur?",
"no": "Nu",
"name": "Nume",
"ok": "Ok",
"note": "Notă",
"yes": "Da",
"explicit": "Explicit",
"year": "An",
"menu": "Meniu"
"confirm": "confirmă",
"create": "creează",
"biography": "biografie",
"areYouSure": "ești sigur?",
"no": "nu",
"name": "nume",
"ok": "ok",
"note": "notă",
"yes": "da",
"explicit": "explicit",
"year": "an",
"menu": "meniu"
},
"filter": {
"biography": "Biografie"
"biography": "biografie"
}
}
+575 -943
View File
File diff suppressed because it is too large Load Diff
+617 -619
View File
File diff suppressed because it is too large Load Diff
+464 -466
View File
File diff suppressed because it is too large Load Diff
+463 -464
View File
File diff suppressed because it is too large Load Diff
+354 -355
View File
@@ -1,323 +1,322 @@
{
"action": {
"editPlaylist": "Redigera $t(entity.playlist, {\"count\": 1})",
"goToPage": "Gå till sida",
"moveToTop": "Flytta till toppen",
"clearQueue": "Rensa kö",
"addToFavorites": "Lägg till $t(entity.favorite, {\"count\": 2})",
"addToPlaylist": "Lägg till $t(entity.playlist, {\"count\": 1})",
"createPlaylist": "Skapa $t(entity.playlist, {\"count\": 1})",
"removeFromPlaylist": "Ta bort från $t(entity.playlist, {\"count\": 1})",
"viewPlaylists": "Visa $t(entity.playlist, {\"count\": 2})",
"editPlaylist": "redigera $t(entity.playlist_one)",
"goToPage": "gå till sida",
"moveToTop": "flytta till toppen",
"clearQueue": "rensa kö",
"addToFavorites": "lägg till $t(entity.favorite_other)",
"addToPlaylist": "lägg till $t(entity.playlist_one)",
"createPlaylist": "skapa $t(entity.playlist_one)",
"removeFromPlaylist": "ta bort från $t(entity.playlist_one)",
"viewPlaylists": "visa $t(entity.playlist_other)",
"refresh": "$t(common.refresh)",
"deletePlaylist": "Ta bort $t(entity.playlist, {\"count\": 1})",
"removeFromQueue": "Ta bort från kö",
"deselectAll": "Avmarkera alla",
"moveToBottom": "Flytta till botten",
"setRating": "Sätt betyg",
"toggleSmartPlaylistEditor": "Växla $t(entity.smartPlaylist) redigerare",
"removeFromFavorites": "Ta bort från $t(entity.favorite, {\"count\": 2})",
"downloadStarted": "Startade nedladdning av {{count}} objekt",
"moveToNext": "Flytta till nästa",
"moveUp": "Flytta upp",
"moveDown": "Flytta ner",
"holdToMoveToTop": "Håll för att flytta till toppen",
"holdToMoveToBottom": "Håll för att flytta till botten",
"moveItems": "Flytta objekt",
"shuffle": "Slumpa",
"shuffleAll": "Slumpa alla",
"shuffleSelected": "Slumpa valda",
"viewMore": "Visa mer",
"deletePlaylist": "ta bort $t(entity.playlist_one)",
"removeFromQueue": "ta bort från kö",
"deselectAll": "avmarkera alla",
"moveToBottom": "flytta till botten",
"setRating": "sätt betyg",
"toggleSmartPlaylistEditor": "växla $t(entity.smartPlaylist) redigerare",
"removeFromFavorites": "ta bort från $t(entity.favorite_other)",
"downloadStarted": "startade nedladdning av {{count}} objekt",
"moveToNext": "flytta till nästa",
"moveUp": "flytta upp",
"moveDown": "flytta ner",
"holdToMoveToTop": "håll för att flytta till toppen",
"holdToMoveToBottom": "håll för att flytta till botten",
"moveItems": "flytta objekt",
"shuffle": "slumpa",
"shuffleAll": "slumpa alla",
"shuffleSelected": "slumpa valda",
"viewMore": "visa mer",
"openIn": {
"lastfm": "Öppna i Last.fm",
"musicbrainz": "Öppna i MusicBrainz"
},
"createRadioStation": "Skapa $t(entity.radioStation, {\"count\": 1})",
"deleteRadioStation": "Ta bort $t(entity.radioStation, {\"count\": 1})",
"addOrRemoveFromSelection": "Lägg till eller ta bort från markerade",
"selectRangeOfItems": "Välj en mängd objekt",
"selectAll": "Markera alla",
"openApplicationDirectory": "Öppna applikationskatalog"
"createRadioStation": "skapa $t(entity.radioStation_one)",
"deleteRadioStation": "ta bort $t(entity.radioStation_one)",
"addOrRemoveFromSelection": "lägg till eller ta bort från markerade",
"selectRangeOfItems": "välj en mängd objekt",
"selectAll": "markera alla",
"openApplicationDirectory": "öppna applikationskatalog"
},
"common": {
"backward": "Bakåt",
"increase": "Öka",
"rating": "Betyg",
"bpm": "Bpm",
"refresh": "Laddaom",
"unknown": "Okänd",
"areYouSure": "Är du säker?",
"edit": "Redigera",
"favorite": "Favorit",
"left": "Vänster",
"save": "Spara",
"right": "Höger",
"currentSong": "Aktuell $t(entity.track, {\"count\": 1})",
"collapse": "Kollaps",
"trackNumber": "Spår",
"descending": "Fallande",
"add": "Lägg till",
"gap": "Avstånd",
"ascending": "Stigande",
"dismiss": "Avskeda",
"year": "År",
"manage": "Hantera",
"limit": "Gräns",
"minimize": "Minimera",
"modified": "Modifierad",
"duration": "Längd",
"name": "Namn",
"maximize": "Maximera",
"decrease": "Minska",
"ok": "Ok",
"description": "Beskrivning",
"configure": "Konfigurera",
"path": "Sökväg",
"no": "Nej",
"owner": "Ägare",
"enable": "Aktivera",
"clear": "Töm",
"forward": "Framåt",
"delete": "Ta bort",
"cancel": "Avbryt",
"forceRestartRequired": "Starta om för att tillämpa ändringar... Stäng meddelandet för att starta om",
"setting_one": "Inställning",
"setting_other": "",
"version": "Version",
"title": "Titel",
"filter_one": "Filter",
"filter_other": "Filter",
"filters": "Filter",
"create": "Skapa",
"bitrate": "Bithastighet",
"saveAndReplace": "Spara och skrivöver",
"action_one": "Handling",
"action_other": "Handlingar",
"playerMustBePaused": "Spelaren måste pausas",
"confirm": "Bekräfta",
"resetToDefault": "Återställ till standard",
"home": "Hem",
"comingSoon": "Kommer snart…",
"reset": "Nollställ",
"channel_one": "Kanal",
"channel_other": "Kanaler",
"disable": "Inaktivera",
"sortOrder": "Ordning",
"none": "Ingen",
"menu": "Meny",
"restartRequired": "Omstart krävs",
"previousSong": "Föregående $t(entity.track, {\"count\": 1})",
"noResultsFromQuery": "Frågan returnerade inga resultat",
"quit": "Avsluta",
"expand": "Expandera",
"search": "Sök",
"saveAs": "Spara som",
"disc": "Skiva",
"yes": "Ja",
"random": "Slumpmässig",
"size": "Storlek",
"biography": "Biografi",
"note": "Anteckning",
"center": "Center",
"explicitStatus": "Olämplig status",
"additionalParticipants": "Ytterligare medverkare",
"newVersion": "En ny version har installerats {{version}}",
"viewReleaseNotes": "Se utgåveinformation",
"bitDepth": "Bitdjup",
"close": "Stäng",
"codec": "Kodek",
"doNotShowAgain": "Visa inte detta igen",
"view": "Visa",
"externalLinks": "Externa länkar",
"faster": "Snabbare",
"backward": "bakåt",
"increase": "öka",
"rating": "betyg",
"bpm": "bpm",
"refresh": "laddaom",
"unknown": "okänd",
"areYouSure": "är du säker?",
"edit": "redigera",
"favorite": "favorit",
"left": "vänster",
"save": "spara",
"right": "höger",
"currentSong": "aktuell $t(entity.track_one)",
"collapse": "kollaps",
"trackNumber": "spår",
"descending": "fallande",
"add": "lägg till",
"gap": "avstånd",
"ascending": "stigande",
"dismiss": "avskeda",
"year": "år",
"manage": "hantera",
"limit": "gräns",
"minimize": "minimera",
"modified": "modifierad",
"duration": "längd",
"name": "namn",
"maximize": "maximera",
"decrease": "minska",
"ok": "ok",
"description": "beskrivning",
"configure": "konfigurera",
"path": "sökväg",
"no": "nej",
"owner": "ägare",
"enable": "aktivera",
"clear": "töm",
"forward": "framåt",
"delete": "ta bort",
"cancel": "avbryt",
"forceRestartRequired": "starta om för att tillämpa ändringar... Stäng meddelandet för att starta om",
"setting": "inställning",
"version": "version",
"title": "titel",
"filter_one": "filter",
"filter_other": "filter",
"filters": "filter",
"create": "skapa",
"bitrate": "bithastighet",
"saveAndReplace": "spara och skrivöver",
"action_one": "handling",
"action_other": "handlingar",
"playerMustBePaused": "spelaren måste pausas",
"confirm": "bekräfta",
"resetToDefault": "återställ till standard",
"home": "hem",
"comingSoon": "kommer snart…",
"reset": "nollställ",
"channel_one": "kanal",
"channel_other": "kanaler",
"disable": "inaktivera",
"sortOrder": "ordning",
"none": "ingen",
"menu": "meny",
"restartRequired": "omstart krävs",
"previousSong": "föregående $t(entity.track_one)",
"noResultsFromQuery": "frågan returnerade inga resultat",
"quit": "avsluta",
"expand": "expandera",
"search": "sök",
"saveAs": "spara som",
"disc": "skiva",
"yes": "ja",
"random": "slumpmässig",
"size": "storlek",
"biography": "biografi",
"note": "anteckning",
"center": "center",
"explicitStatus": "olämplig status",
"additionalParticipants": "ytterligare medverkare",
"newVersion": "en ny version har installerats {{version}}",
"viewReleaseNotes": "se utgåveinformation",
"bitDepth": "bitdjup",
"close": "stäng",
"codec": "kodek",
"doNotShowAgain": "visa inte detta igen",
"view": "visa",
"externalLinks": "externa länkar",
"faster": "snabbare",
"mbid": "MusicBrainz ID",
"noFilters": "Inga filter konfigurerade",
"preview": "Förhandsvisa",
"private": "Privat",
"public": "Allmän",
"recordLabel": "Skivbolag",
"releaseType": "Utgåvetyp",
"reload": "Ladda om",
"sampleRate": "Samplingstakt",
"slower": "Långsammare",
"share": "Dela",
"sort": "Sortera",
"tags": "Taggar",
"translation": "Översättning",
"explicit": "Olämplig",
"clean": "Städad",
"gridRows": "Rutnätsrader",
"tableColumns": "Tabellkolumner",
"noFilters": "inga filter konfigurerade",
"preview": "förhandsvisa",
"private": "privat",
"public": "allmän",
"recordLabel": "skivbolag",
"releaseType": "utgåvetyp",
"reload": "ladda om",
"sampleRate": "samplingstakt",
"slower": "långsammare",
"share": "dela",
"sort": "sortera",
"tags": "taggar",
"translation": "översättning",
"explicit": "olämplig",
"clean": "städad",
"gridRows": "rutnätsrader",
"tableColumns": "tabellkolumner",
"itemsMore": "{{count}} fler",
"countSelected": "{{count}} markerade"
},
"error": {
"remotePortWarning": "Starta om servern för att tillämpa den nya porten",
"systemFontError": "Ett fel uppstod vid försök att hämta systemteckensnitt",
"playbackError": "Ett fel uppstod vid försök att spela upp media",
"endpointNotImplementedError": "Endpoint {{endpoint}} är inte implementerad för {{serverType}}",
"remotePortError": "Ett fel uppstod vid försök att ange serverporten",
"serverRequired": "Server krävs",
"authenticationFailed": "Autentiseringen misslyckades",
"apiRouteError": "Det går inte att dirigera begäran",
"genericError": "Ett fel uppstod",
"credentialsRequired": "Autentiseringsuppgifter som krävs",
"sessionExpiredError": "Din session har löpt ut",
"remotePortWarning": "starta om servern för att tillämpa den nya porten",
"systemFontError": "ett fel uppstod vid försök att hämta systemteckensnitt",
"playbackError": "ett fel uppstod vid försök att spela upp media",
"endpointNotImplementedError": "endpoint {{endpoint}} är inte implementerad för {{serverType}}",
"remotePortError": "ett fel uppstod vid försök att ange serverporten",
"serverRequired": "server krävs",
"authenticationFailed": "autentiseringen misslyckades",
"apiRouteError": "det går inte att dirigera begäran",
"genericError": "ett fel uppstod",
"credentialsRequired": "autentiseringsuppgifter som krävs",
"sessionExpiredError": "din session har löpt ut",
"remoteEnableError": "Ett fel uppstod vid försök att $t(common.enable) servern",
"localFontAccessDenied": "Åtkomst nekad till lokala teckensnitt",
"serverNotSelectedError": "Ingen server vald",
"remoteDisableError": "Ett fel uppstod vid försök av $t(common.disable) servern",
"localFontAccessDenied": "åtkomst nekad till lokala teckensnitt",
"serverNotSelectedError": "ingen server vald",
"remoteDisableError": "ett fel uppstod vid försök av $t(common.disable) servern",
"mpvRequired": "MPV krävs",
"audioDeviceFetchError": "Ett fel uppstod vid hämtning av ljudenheter",
"invalidServer": "Ogiltig server",
"loginRateError": "För många inloggningsförsök, försök igen om några sekunder",
"badAlbum": "Du ser denna sidan eftersom denna låten inte är en del av ett album. du ser troligtvis detta problemet för att du har en låt på toppnivån i din musikmapp. Jellyfin grupperar bara låtar om de finns i en mapp",
"badValue": "Felaktigt alternativ \"{{value}}\". detta värde existerar inte längre",
"multipleServerSaveQueueError": "Spelningskön har en eller flera låtar som inte är från den nuvarande valda servern. detta är inte stöttat",
"networkError": "En nätverksfel uppstod",
"notificationDenied": "Åtkomst till notifieringarna var nekad. inställningen har ingen verkan",
"openError": "Kunde inte öppna filen",
"settingsSyncError": "Diskrepans hittades mellan inställningarna för renderingsprocessen och huvudprocessen. starta om applikationen för att ändringarna ska tillämpas"
"audioDeviceFetchError": "ett fel uppstod vid hämtning av ljudenheter",
"invalidServer": "ogiltig server",
"loginRateError": "för många inloggningsförsök, försök igen om några sekunder",
"badAlbum": "du ser denna sidan eftersom denna låten inte är en del av ett album. du ser troligtvis detta problemet för att du har en låt på toppnivån i din musikmapp. Jellyfin grupperar bara låtar om de finns i en mapp",
"badValue": "felaktigt alternativ \"{{value}}\". detta värde existerar inte längre",
"multipleServerSaveQueueError": "spelningskön har en eller flera låtar som inte är från den nuvarande valda servern. detta är inte stöttat",
"networkError": "en nätverksfel uppstod",
"notificationDenied": "åtkomst till notifieringarna var nekad. inställningen har ingen verkan",
"openError": "kunde inte öppna filen",
"settingsSyncError": "diskrepans hittades mellan inställningarna för renderingsprocessen och huvudprocessen. starta om applikationen för att ändringarna ska tillämpas"
},
"filter": {
"mostPlayed": "Mest spelade",
"comment": "Kommentar",
"playCount": "Antal spelningar",
"recentlyUpdated": "Nyligen uppdaterad",
"mostPlayed": "mest spelade",
"comment": "kommentar",
"playCount": "antal spelningar",
"recentlyUpdated": "nyligen uppdaterad",
"channels": "$t(common.channel_other)",
"isCompilation": "Är kompilering",
"recentlyPlayed": "Nyligen spelad",
"isRated": "Är betygsatt",
"isCompilation": "är kompilering",
"recentlyPlayed": "nyligen spelad",
"isRated": "är betygsatt",
"owner": "$t(common.owner)",
"title": "Titel",
"rating": "Betyg",
"search": "Sök",
"bitrate": "Bithastighet",
"genre": "$t(entity.genre, {\"count\": 1})",
"recentlyAdded": "Nyligen tillagda",
"note": "Anteckning",
"name": "Namn",
"dateAdded": "Datum tillagt",
"releaseDate": "Utgivningsdag",
"communityRating": "Betyg från communityn",
"path": "Sökväg",
"favorited": "Favoritmärkt",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"isRecentlyPlayed": "Spelas nyligen",
"isFavorited": "Är favoritmärkt",
"bpm": "Bpm",
"releaseYear": "Utgivningsår",
"id": "Id",
"disc": "Skiva",
"biography": "Biografi",
"artist": "$t(entity.artist, {\"count\": 1})",
"duration": "Längd",
"isPublic": "Är offentlig",
"random": "Slumpmässig",
"lastPlayed": "Senast spelad",
"toYear": "Till år",
"fromYear": "Från år",
"album": "$t(entity.album, {\"count\": 1})",
"trackNumber": "Spår",
"songCount": "Sångräkning",
"criticRating": "Kritikerbetyg",
"albumCount": "$t(entity.album, {\"count\": 2}) antal",
"title": "titel",
"rating": "betyg",
"search": "sök",
"bitrate": "bithastighet",
"genre": "$t(entity.genre_one)",
"recentlyAdded": "nyligen tillagda",
"note": "anteckning",
"name": "namn",
"dateAdded": "datum tillagt",
"releaseDate": "utgivningsdag",
"communityRating": "betyg från communityn",
"path": "sökväg",
"favorited": "favoritmärkt",
"albumArtist": "$t(entity.albumArtist_one)",
"isRecentlyPlayed": "spelas nyligen",
"isFavorited": "är favoritmärkt",
"bpm": "bpm",
"releaseYear": "utgivningsår",
"id": "id",
"disc": "skiva",
"biography": "biografi",
"artist": "$t(entity.artist_one)",
"duration": "längd",
"isPublic": "är offentlig",
"random": "slumpmässig",
"lastPlayed": "senast spelad",
"toYear": "till år",
"fromYear": "från år",
"album": "$t(entity.album_one)",
"trackNumber": "spår",
"songCount": "sångräkning",
"criticRating": "kritikerbetyg",
"albumCount": "$t(entity.album_other) antal",
"explicitStatus": "$t(common.explicitStatus)"
},
"form": {
"deletePlaylist": {
"title": "Ta bort $t(entity.playlist, {\"count\": 1})",
"success": "$t(entity.playlist, {\"count\": 1}) har tagits bort",
"input_confirm": "Skriv namnet på $t(entity.playlist, {\"count\": 1}) för att bekräfta"
"title": "ta bort $t(entity.playlist_one)",
"success": "$t(entity.playlist_one) har tagits bort",
"input_confirm": "Skriv namnet på $t(entity.playlist_one) för att bekräfta"
},
"createPlaylist": {
"input_description": "$t(common.description)",
"title": "Skapa $t(entity.playlist, {\"count\": 1})",
"input_public": "Offentlig",
"title": "skapa $t(entity.playlist_one)",
"input_public": "offentlig",
"input_name": "$t(common.name)",
"success": "$t(entity.playlist, {\"count\": 1}) skapad",
"success": "$t(entity.playlist_one) skapad",
"input_owner": "$t(common.owner)"
},
"addServer": {
"title": "Lägg till server",
"input_username": "Användarnamn",
"input_url": "Länk",
"input_password": "Lösenord",
"input_legacyAuthentication": "Aktivera äldre autentisering",
"input_name": "Server namn",
"success": "Servern har lagts till",
"input_savePassword": "Spara lösenord",
"ignoreSsl": "Ignorera ssl ($t(common.restartRequired))",
"ignoreCors": "Ignorera cors ($t(common.restartRequired))",
"error_savePassword": "Ett fel uppstod när lösenordet skulle sparas",
"input_preferInstantMix": "Föredra instant mixning",
"input_preferInstantMixDescription": "Använd bara instant mixning för att få liknande låtar. användbar om du har plugin för att förändra detta beteendet"
"title": "lägg till server",
"input_username": "användarnamn",
"input_url": "länk",
"input_password": "lösenord",
"input_legacyAuthentication": "aktivera äldre autentisering",
"input_name": "server namn",
"success": "servern har lagts till",
"input_savePassword": "spara lösenord",
"ignoreSsl": "ignorera ssl ($t(common.restartRequired))",
"ignoreCors": "ignorera cors ($t(common.restartRequired))",
"error_savePassword": "ett fel uppstod när lösenordet skulle sparas",
"input_preferInstantMix": "föredra instant mixning",
"input_preferInstantMixDescription": "använd bara instant mixning för att få liknande låtar. användbar om du har plugin för att förändra detta beteendet"
},
"addToPlaylist": {
"success": "Lade till $t(entity.trackWithCount, {\"count\": {{message}} }) till $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"title": "Lägg till i $t(entity.playlist, {\"count\": 1})",
"input_skipDuplicates": "Hoppa över dubbletter",
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
"create": "Skapa $t(entity.playlist, {\"count\": 1}) {{playlist}}",
"searchOrCreate": "Sök $t(entity.playlist, {\"count\": 2}) eller skriv för att skapa en ny"
"success": "lade till $t(entity.trackWithCount, {\"count\": {{message}} }) till $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"title": "lägg till i $t(entity.playlist_one)",
"input_skipDuplicates": "hoppa över dubbletter",
"input_playlists": "$t(entity.playlist_other)",
"create": "skapa $t(entity.playlist_one) {{playlist}}",
"searchOrCreate": "sök $t(entity.playlist_other) eller skriv för att skapa en ny"
},
"updateServer": {
"title": "Uppdatera server",
"success": "Servern har uppdaterats"
"title": "uppdatera server",
"success": "servern har uppdaterats"
},
"queryEditor": {
"input_optionMatchAll": "Matcha alla",
"input_optionMatchAny": "Matcha något"
"input_optionMatchAll": "matcha alla",
"input_optionMatchAny": "matcha något"
},
"lyricSearch": {
"input_name": "$t(common.name)",
"input_artist": "$t(entity.artist, {\"count\": 1})",
"title": "Sångtext sök"
"input_artist": "$t(entity.artist_one)",
"title": "sångtext sök"
},
"editPlaylist": {
"title": "Redigera $t(entity.playlist, {\"count\": 1})",
"title": "redigera $t(entity.playlist_one)",
"publicJellyfinNote": "Jellyfin visar av någon anledning inte om en spellista är publik eller inte. Om du önskar att denna ska förbli publik, så får du ha följande indata markerade"
},
"largeFetchConfirmation": {
"title": "Lägg till objekt till kön",
"title": "lägg till objekt till kön",
"description": "Åtgärden kommer att lägga till alla objekt till den nuvarande filtrerade vyn"
},
"createRadioStation": {
"success": "Radiostation skapades",
"title": "Skapa radiostation",
"input_homepageUrl": "Hemside-URL",
"input_name": "Namn",
"input_streamUrl": "Stream url"
"success": "radiostation skapades",
"title": "skapa radiostation",
"input_homepageUrl": "hemside-URL",
"input_name": "namn",
"input_streamUrl": "stream url"
}
},
"page": {
"fullscreenPlayer": {
"config": {
"showLyricMatch": "Visa låttext matchning",
"dynamicBackground": "Dynamisk bakgrund",
"followCurrentLyric": "Följ aktuell låttext",
"opacity": "Ogenomskinlighet",
"lyricSize": "Låttext storlek",
"lyricAlignment": "Låttext justering",
"lyricGap": "Låttext mellanrum",
"synchronized": "Synkroniserad",
"showLyricProvider": "Visa sångtextleverantör",
"unsynchronized": "Osynkroniserad"
"dynamicBackground": "dynamisk bakgrund",
"followCurrentLyric": "följ aktuell låttext",
"opacity": "ogenomskinlighet",
"lyricSize": "låttext storlek",
"lyricAlignment": "låttext justering",
"lyricGap": "låttext mellanrum",
"synchronized": "synkroniserad",
"showLyricProvider": "visa sångtextleverantör",
"unsynchronized": "osynkroniserad"
},
"lyrics": "Sångtext",
"related": "Relaterad"
"lyrics": "sångtext",
"related": "relaterad"
},
"appMenu": {
"selectServer": "Välj server",
"version": "Version {{version}}",
"settings": "$t(common.setting, {\"count\": 2})",
"manageServers": "Hantera servrar",
"expandSidebar": "Expandera sidofältet",
"openBrowserDevtools": "Öppna webbläsarens utvecklingsverktyg",
"selectServer": "välj server",
"version": "version {{version}}",
"settings": "$t(common.setting_other)",
"manageServers": "hantera servrar",
"expandSidebar": "expandera sidofältet",
"openBrowserDevtools": "öppna webbläsarens utvecklingsverktyg",
"quit": "$t(common.quit)",
"goBack": "Gå tillbaka",
"goForward": "Gå framåt",
"collapseSidebar": "Växla sidofältet"
"goBack": "gå tillbaka",
"goForward": "gå framåt",
"collapseSidebar": "växla sidofältet"
},
"contextMenu": {
"addToPlaylist": "$t(action.addToPlaylist)",
@@ -336,146 +335,146 @@
"play": "$t(player.play)",
"numberSelected": "{{count}} vald",
"removeFromQueue": "$t(action.removeFromQueue)",
"download": "Ladda ner",
"download": "ladda ner",
"moveItems": "$t(action.moveItems)",
"moveToNext": "$t(action.moveToNext)",
"playSimilarSongs": "$t(player.playSimilarSongs)",
"playShuffled": "$t(player.shuffle)",
"shareItem": "Dela objekt",
"goTo": "Gå till",
"goToAlbum": "Gå till $t(entity.album, {\"count\": 1})",
"goToAlbumArtist": "Gå till $t(entity.albumArtist, {\"count\": 1})",
"showDetails": "Hämta information"
"shareItem": "dela objekt",
"goTo": "gå till",
"goToAlbum": "gå till $t(entity.album_one)",
"goToAlbumArtist": "gå till $t(entity.albumArtist_one)",
"showDetails": "hämta information"
},
"albumDetail": {
"moreFromArtist": "Mer från $t(entity.artist, {\"count\": 1})",
"moreFromGeneric": "Mer från {{item}}"
"moreFromArtist": "mer från $t(entity.artist_one)",
"moreFromGeneric": "mer från {{item}}"
},
"albumArtistList": {
"title": "$t(entity.albumArtist, {\"count\": 2})"
"title": "$t(entity.albumArtist_other)"
},
"albumList": {
"title": "$t(entity.album, {\"count\": 2})"
"title": "$t(entity.album_other)"
},
"sidebar": {
"nowPlaying": "Nu spelas"
"nowPlaying": "nu spelas"
},
"home": {
"mostPlayed": "Mest spelade",
"newlyAdded": "Nytillkomna utgåvor",
"explore": "Utforska från ditt bibliotek",
"recentlyPlayed": "Nyligen spelat"
"mostPlayed": "mest spelade",
"newlyAdded": "nytillkomna utgåvor",
"explore": "utforska från ditt bibliotek",
"recentlyPlayed": "nyligen spelat"
},
"setting": {
"playbackTab": "Uppspelning",
"generalTab": "Allmänt",
"hotkeysTab": "Snabbtangenter",
"windowTab": "Fönster"
"playbackTab": "uppspelning",
"generalTab": "allmänt",
"hotkeysTab": "snabbtangenter",
"windowTab": "fönster"
},
"globalSearch": {
"commands": {
"serverCommands": "Serverkommandon",
"goToPage": "Gå till sidan",
"searchFor": "Sök efter {{query}}"
"serverCommands": "serverkommandon",
"goToPage": "gå till sidan",
"searchFor": "sök efter {{query}}"
},
"title": "Kommandon"
"title": "kommandon"
},
"manageServers": {
"url": "URL",
"username": "Användarnamn",
"editServerDetailsTooltip": "Redigera serverinställningar",
"removeServer": "Ta bort server"
"username": "användarnamn",
"editServerDetailsTooltip": "redigera serverinställningar",
"removeServer": "ta bort server"
}
},
"entity": {
"playlist_one": "Spellista",
"playlist_other": "Spellistor",
"artist_one": "Artist",
"artist_other": "Artister",
"albumArtist_one": "Albumartist",
"albumArtist_other": "Albumartister",
"albumArtistCount_one": "{{count}} albumartist",
"albumArtistCount_other": "{{count}} albumartister",
"playlist_one": "spellista",
"playlist_other": "spellistor",
"artist_one": "artist",
"artist_other": "artister",
"albumArtist_one": "albumartist",
"albumArtist_other": "albumartister",
"albumArtistCount_one": "{{count}} Albumartist",
"albumArtistCount_other": "{{count}} Albumartister",
"albumWithCount_one": "{{count}} album",
"albumWithCount_other": "{{count}} album",
"favorite_one": "Favorit",
"favorite_other": "Favoriter",
"folder_one": "Mapp",
"folder_other": "Mappar",
"album_one": "Album",
"album_other": "Album",
"favorite_one": "favorit",
"favorite_other": "favoriter",
"folder_one": "mapp",
"folder_other": "mappar",
"album_one": "album",
"album_other": "album",
"playlistWithCount_one": "{{count}} spellista",
"playlistWithCount_other": "{{count}} spellistor",
"folderWithCount_one": "{{count}} mapp",
"folderWithCount_other": "{{count}} mappar",
"track_one": "Spår",
"track_other": "Spår",
"track_one": "spår",
"track_other": "spår",
"trackWithCount_one": "{{count}} spår",
"trackWithCount_other": "{{count}} spår",
"artistWithCount_one": "{{count}} artist",
"artistWithCount_other": "{{count}} artister",
"genre_one": "Genre",
"genre_other": "Genrer",
"genre_one": "genre",
"genre_other": "genrer",
"genreWithCount_one": "{{count}} genre",
"genreWithCount_other": "{{count}} genrer",
"play_one": "{{count}} spelning",
"play_other": "{{count}} spelningar",
"smartPlaylist": "Smart $t(entity.playlist, {\"count\": 1})",
"song_one": "Låt",
"song_other": "Låtar",
"radioStation_one": "Radiostation",
"radioStation_other": "Radiostationer",
"smartPlaylist": "smart $t(entity.playlist_one)",
"song_one": "låt",
"song_other": "låtar",
"radioStation_one": "radiostation",
"radioStation_other": "radiostationer",
"radioStationWithCount_one": "{{count}} radiostation",
"radioStationWithCount_other": "{{count}} radiostationer"
},
"player": {
"repeat_all": "Repetera alla",
"repeat": "Repetera",
"queue_remove": "Ta bort markerad",
"playRandom": "Spela slumpmässigt",
"previous": "Föregående",
"favorite": "Favorit",
"next": "Nästa",
"shuffle": "Blanda",
"playbackFetchNoResults": "Inga låtar hittades",
"playbackFetchInProgress": "Laddar låtar…",
"addNext": "Lägg till nästa",
"playbackSpeed": "Uppspelningshastighet",
"playbackFetchCancel": "Det här tar ett tag... stäng aviseringen för att avbryta",
"play": "Spela",
"repeat_off": "Repetera inaktiverad",
"queue_clear": "Rensa kö",
"muted": "Mutad",
"queue_moveToTop": "Flytta markerad till toppen",
"queue_moveToBottom": "Flytta markerad till botten",
"addLast": "Lägg till sist",
"mute": "Muta"
"repeat_all": "repetera alla",
"repeat": "repetera",
"queue_remove": "ta bort markerad",
"playRandom": "spela slumpmässigt",
"previous": "föregående",
"favorite": "favorit",
"next": "nästa",
"shuffle": "blanda",
"playbackFetchNoResults": "inga låtar hittades",
"playbackFetchInProgress": "laddar låtar…",
"addNext": "lägg till nästa",
"playbackSpeed": "uppspelningshastighet",
"playbackFetchCancel": "det här tar ett tag... stäng aviseringen för att avbryta",
"play": "spela",
"repeat_off": "repetera inaktiverad",
"queue_clear": "rensa kö",
"muted": "mutad",
"queue_moveToTop": "flytta markerad till botten",
"queue_moveToBottom": "flytta markerad till toppen",
"addLast": "lägg till sist",
"mute": "muta"
},
"datetime": {
"minuteShort": "Min",
"secondShort": "Sek",
"hourShort": "H",
"dayShort": "Dag"
"minuteShort": "min",
"secondShort": "sek",
"hourShort": "h",
"dayShort": "dag"
},
"filterOperator": {
"after": "Är efter",
"afterDate": "Är efter (datum)",
"before": "Är före",
"beforeDate": "Är före (datum)",
"contains": "Innehåller",
"endsWith": "Slutar med",
"inPlaylist": "Är inom",
"inTheLast": "Är i den sista",
"inTheRange": "Är i spannet",
"inTheRangeDate": "Är i spannet (datum)",
"is": "Är",
"isNot": "Är inte",
"isGreaterThan": "Är större än",
"isLessThan": "Är mindre än",
"matchesRegex": "Matchar regex",
"notContains": "Innehåller inte",
"notInPlaylist": "Är inte inom",
"notInTheLast": "Är inte inom den sista",
"startsWith": "Startar med"
"after": "är efter",
"afterDate": "är efter (datum)",
"before": "är före",
"beforeDate": "är före (datum)",
"contains": "innehåller",
"endsWith": "slutar med",
"inPlaylist": "är inom",
"inTheLast": "är i den sista",
"inTheRange": "är i spannet",
"inTheRangeDate": "är i spannet (datum)",
"is": "är",
"isNot": "är inte",
"isGreaterThan": "är större än",
"isLessThan": "är mindre än",
"matchesRegex": "matchar regex",
"notContains": "innehåller inte",
"notInPlaylist": "är inte inom",
"notInTheLast": "är inte inom den sista",
"startsWith": "startar med"
}
}
+103 -654
View File
File diff suppressed because it is too large Load Diff
-1
View File
@@ -1 +0,0 @@
{}
+611 -614
View File
File diff suppressed because it is too large Load Diff
+1 -604
View File
@@ -1,604 +1 @@
{
"action": {
"addToFavorites": "Додати до $t(entity.favorite, {\"count\": 2})",
"addOrRemoveFromSelection": "Додати або видалити з вибору",
"selectRangeOfItems": "Вибрати діапазон елементів",
"addToPlaylist": "Додати до $t(entity.playlist, {\"count\": 1})",
"clearQueue": "Очистити чергу",
"createPlaylist": "Створити $t(entity.playlist, {\"count\": 1})",
"createRadioStation": "Створити $t(entity.radioStation, {\"count\": 1})",
"deletePlaylist": "Видалити $t(entity.playlist, {\"count\": 1})",
"deleteRadioStation": "Видалити $t(entity.radioStation, {\"count\": 1})",
"selectAll": "Вибрати все",
"deselectAll": "Скасувати вибір усього",
"downloadStarted": "Почато завантаження {{count}} елементів",
"editPlaylist": "Редагувати $t(entity.playlist, {\"count\": 1})",
"goToPage": "Перейти на сторінку",
"moveToNext": "Перейти до наступного",
"moveToBottom": "Перемістити вниз",
"moveToTop": "Перемістити вгору",
"moveUp": "Перемістити вище",
"moveDown": "Перемістити нижче",
"holdToMoveToTop": "Утримуйте, щоб перемістити вгору",
"holdToMoveToBottom": "Утримувати, щоб перемістити вниз",
"moveItems": "Перемістити елементи",
"shuffle": "Перемішати",
"shuffleAll": "Все випадково",
"shuffleSelected": "Вибране випадково",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "Видалити з $t(entity.favorite, {\"count\": 2})",
"removeFromPlaylist": "Видалити з $t(entity.playlist, {\"count\": 1})",
"removeFromQueue": "Видалити з черги",
"setRating": "Встановити рейтинг",
"toggleSmartPlaylistEditor": "Перемикати редактор $t(entity.smartPlaylist)",
"viewPlaylists": "Показати $t(entity.playlist, {\"count\": 2})",
"viewMore": "Переглянути більше",
"openApplicationDirectory": "Відкрити каталог додатків",
"openIn": {
"lastfm": "Відкрити в Last.fm",
"musicbrainz": "Відкрити в MusicBrainz",
"listenbrainz": "Відкрити у ListenBrainz",
"qobuz": "Відкрити у Qobuz",
"spotify": "Відкрити у Spotify"
}
},
"common": {
"countSelected": "Вибрано {{count}}",
"explicitStatus": "Явний статус",
"action_one": "Дія",
"action_few": "дії",
"action_many": "дій",
"add": "Додати",
"additionalParticipants": "Додаткові учасники",
"newVersion": "Встановлено нову версію ({{version}})",
"viewReleaseNotes": "Переглянути список змін",
"albumGain": "Підсилення альбому",
"albumPeak": "Піковий рівень альбому",
"areYouSure": "Ви впевнені?",
"ascending": "Зростаючи",
"backward": "Назад",
"biography": "Біографія",
"bitDepth": "Розрядність",
"bitrate": "Бітрейт",
"bpm": "Уд/хв",
"cancel": "Скасувати",
"center": "Посередині",
"channel_one": "Канал",
"channel_few": "канали",
"channel_many": "каналів",
"clear": "Очистити",
"close": "Закрити",
"codec": "Кодек",
"collapse": "Згорнути",
"comingSoon": "Скоро…",
"configure": "Налаштувати",
"confirm": "Підтвердити",
"create": "Створити",
"currentSong": "Поточний $t(entity.track, {\"count\": 1})",
"decrease": "Знизити",
"delete": "Видалити",
"descending": "За спаданням",
"description": "Опис",
"disable": "Вимкнути",
"disc": "Диск",
"dismiss": "Відхилити",
"doNotShowAgain": "Не показувати це знову",
"duration": "Тривалість",
"view": "Показати",
"edit": "Змінити",
"enable": "Увімкнути",
"expand": "Розширити",
"example": "Приклад",
"externalLinks": "Зовнішні посилання",
"faster": "Швидше",
"favorite": "Улюблений",
"filter_one": "Фільтр",
"filter_few": "фільтри",
"filter_many": "фільтрів",
"filters": "Фільтри",
"filter_single": "Одиночний",
"filter_multiple": "Кілька",
"forceRestartRequired": "Перезапустіть, щоб застосувати зміни… закрийте повідомлення, щоб перезапустити",
"forward": "Уперед",
"gap": "Прогалина",
"grouping": "Групування",
"home": "Додому",
"increase": "Збільшити",
"left": "Ліво",
"limit": "Ліміт",
"manage": "Управління",
"maximize": "Максимізувати",
"menu": "Меню",
"minimize": "Мінімізувати",
"modified": "Відредаговано",
"mbid": "MusicBrainz ID",
"mood": "Настрій",
"name": "Назва",
"no": "Ні",
"none": "Жоден",
"noResultsFromQuery": "Запит не дав результатів",
"noFilters": "Фільтри не налаштовані",
"note": "Примітка",
"ok": "Ок",
"owner": "Власник",
"path": "Шлях",
"playerMustBePaused": "Плеєр повинен бути призупинений",
"preview": "Перегляд",
"previousSong": "Минулий $t(entity.track, {\"count\": 1})",
"private": "Приватний",
"public": "Публічний",
"quit": "Вийти",
"random": "Випадково",
"rating": "Рейтинг",
"retry": "Повторити спробу",
"recordLabel": "Лейбл звукозапису",
"releaseType": "Тип випуску",
"refresh": "Оновити",
"reload": "Перезавантажити",
"rename": "Перейменувати",
"reset": "Скинути",
"resetToDefault": "Скинути до заводських налаштувань",
"restartRequired": "Необхідний перезапуск",
"right": "Право",
"clean": "Чистo",
"sampleRate": "Частота дискретизації",
"save": "Зберегти",
"saveAndReplace": "Зберегти та замінити",
"saveAs": "Зберегти як",
"search": "Пошук",
"setting_one": "Налаштування",
"setting_few": "налаштування",
"setting_many": "налаштувань",
"slower": "Повільніше",
"share": "Поділитися",
"size": "Розмір",
"sort": "Впорядкувати",
"sortOrder": "Порядок",
"tags": "Теги",
"title": "Назва",
"trackNumber": "Трек",
"trackGain": "Підсилення треку",
"trackPeak": "Піковий рівень треку",
"translation": "Переклад",
"unknown": "Невідомий",
"version": "Версія",
"year": "Рік",
"yes": "Так",
"explicit": "Експліцитний зміст",
"gridRows": "Рядки сітки",
"tableColumns": "Стовпці таблиці",
"itemsMore": "{{count}} більше",
"numberOfResults": "{{numberOfResults}} результатів",
"newVersionAvailable": "Доступна нова версія"
},
"entity": {
"album_one": "Альбом",
"album_few": "альбоми",
"album_many": "альбомів",
"albumArtist_one": "Виконавець альбому",
"albumArtist_few": "виконавці альбому",
"albumArtist_many": "виконавців альбому",
"albumArtistCount_one": "{{count}} виконавець альбому",
"albumArtistCount_few": "{{count}} виконавці альбому",
"albumArtistCount_many": "{{count}} виконавців альбому",
"albumWithCount_one": "{{count}} альбом",
"albumWithCount_few": "{{count}} альбоми",
"albumWithCount_many": "{{count}} альбомів",
"radioStation_one": "Радіостанція",
"radioStation_few": "радіостанції",
"radioStation_many": "радіостанцій",
"radioStationWithCount_one": "{{count}} радіостанція",
"radioStationWithCount_few": "{{count}} радіостанції",
"radioStationWithCount_many": "{{count}} радіостанцій",
"artist_one": "Виконавець",
"artist_few": "виконавці",
"artist_many": "виконавців",
"artistWithCount_one": "{{count}} виконавець",
"artistWithCount_few": "{{count}} виконавці",
"artistWithCount_many": "{{count}} виконавців",
"favorite_one": "Улюблений",
"favorite_few": "улюблені",
"favorite_many": "улюблених",
"folder_one": "Папка",
"folder_few": "папки",
"folder_many": "папок",
"folderWithCount_one": "{{count}} папка",
"folderWithCount_few": "{{count}} папки",
"folderWithCount_many": "{{count}} папок",
"genre_one": "Жанр",
"genre_few": "жанри",
"genre_many": "жанрів",
"genreWithCount_one": "{{count}} жанр",
"genreWithCount_few": "{{count}} жанри",
"genreWithCount_many": "{{count}} жанрів",
"playlist_one": "Плейлист",
"playlist_few": "плейлисти",
"playlist_many": "плейлистів",
"play_one": "{{count}} відтворення",
"play_few": "{{count}} відтворення",
"play_many": "{{count}} відтворень",
"playlistWithCount_one": "{{count}} плейлист",
"playlistWithCount_few": "{{count}} плейлисти",
"playlistWithCount_many": "{{count}} плейлистів",
"smartPlaylist": "Розумний $t(entity.playlist, {\"count\": 1})",
"track_one": "Трек",
"track_few": "треки",
"track_many": "треків",
"song_one": "Пісня",
"song_few": "пісні",
"song_many": "пісень",
"trackWithCount_one": "{{count}} трек",
"trackWithCount_few": "{{count}} треки",
"trackWithCount_many": "{{count}} треків"
},
"error": {
"apiRouteError": "Неможливо виконати запит",
"audioDeviceFetchError": "Сталася помилка під час спроби отримати аудіопристрої",
"authenticationFailed": "Аутентифікація не вдалася",
"badAlbum": "Ви бачите цю сторінку, тому що ця пісня не входить до альбому. найімовірніше, ця проблема виникає, якщо у верхньому рівні вашої музичної папки знаходиться пісня. Jellyfin групує треки тільки в тому випадку, якщо вони знаходяться в папці",
"badValue": "Недійсний параметр \"{{value}}\". це значення більше не існує",
"credentialsRequired": "Необхідні дані для входу",
"endpointNotImplementedError": "Кінцева точка {{endpoint}} не реалізована для {{serverType}}",
"genericError": "Сталася помилка",
"invalidServer": "Недійсний сервер",
"localFontAccessDenied": "Відмова в доступі до локальних шрифтів",
"loginRateError": "Занадто багато спроб входу, спробуйте ще раз через кілька секунд",
"mpvRequired": "Необхідний MPV",
"multipleServerSaveQueueError": "У черзі відтворення є одна або кілька пісень, які не належать до поточного сервера. це не підтримується",
"networkError": "Сталася мережева помилка",
"noNetwork": "Сервер недоступний",
"noNetworkDescription": "Не вдалося підключитися до цього сервера",
"notificationDenied": "Дозвіл на сповіщення було відхилено. це налаштування не має впливу",
"openError": "Не вдалося відкрити файл",
"playbackError": "Сталася помилка під час спроби відтворити медіафайл",
"remoteDisableError": "Сталася помилка під час спроби $t(common.disable) віддаленого сервера",
"remoteEnableError": "Сталася помилка під час спроби $t(common.enable) віддаленого сервера",
"remotePortError": "Сталася помилка під час спроби налаштувати порт віддаленого сервера",
"remotePortWarning": "Перезапустіть сервер щоб застосувати новий порт",
"saveQueueFailed": "Не вдалося зберегти чергу",
"serverNotSelectedError": "Не вибрано жодного сервера",
"serverRequired": "Потрібен сервер",
"sessionExpiredError": "Ваша сесія закінчилася",
"systemFontError": "Сталася помилка під час спроби отримати системні шрифти",
"settingsSyncError": "Виявлено розбіжності між налаштуваннями в рендерері та основним процесом. перезапустіть програму, щоб застосувати зміни",
"invalidJson": "Недійсний JSON",
"playbackPausedDueToError": "Відтворення було призупинено через помилку"
},
"filter": {
"album": "$t(entity.album, {\"count\": 1})",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"albumCount": "Кількість $t(entity.album, {\"count\": 2})",
"artist": "$t(entity.artist, {\"count\": 1})",
"biography": "Біографія",
"bitrate": "Бітрейт",
"bpm": "Уд/хв",
"channels": "$t(common.channel, {\"count\": 2})",
"comment": "Коментар",
"communityRating": "Рейтинг спільноти",
"criticRating": "Рейтинг критиків",
"dateAdded": "Дата додавання",
"disc": "Диск",
"duration": "Тривалість",
"favorited": "Улюблене",
"fromYear": "З року",
"genre": "$t(entity.genre, {\"count\": 1})",
"id": "Id",
"isCompilation": "Є компіляцією",
"isFavorited": "Є улюбленим",
"isPublic": "Є публічним",
"isRated": "Є оціненим",
"isRecentlyPlayed": "Нещодавно відтворено",
"lastPlayed": "Останнє відтворене",
"mostPlayed": "Найбільш відтворювані",
"name": "Назва",
"note": "Примітка",
"owner": "$t(common.owner)",
"path": "Шлях",
"playCount": "Кількість відтворень",
"random": "Випадково",
"rating": "Рейтинг",
"recentlyAdded": "Нещодавно додано",
"recentlyPlayed": "Нещодавно відтворено",
"recentlyUpdated": "Нещодавно оновлено",
"releaseDate": "Дата випуску",
"releaseYear": "Рік випуску",
"search": "Шукати",
"songCount": "Кількість пісень",
"sortName": "Сортування за назвою",
"title": "Назва",
"toYear": "До року",
"trackNumber": "Трек",
"explicitStatus": "$t(common.explicitStatus)",
"matchAnd": "І",
"matchOr": "Або"
},
"datetime": {
"minuteShort": "Хв.",
"secondShort": "Сек.",
"hourShort": "Год",
"dayShort": "Дн."
},
"filterOperator": {
"after": "Є після",
"afterDate": "Після (дата)",
"before": "Є перед",
"beforeDate": "Є перед (дата)",
"contains": "Містить",
"endsWith": "Закінчується на",
"inPlaylist": "Є в",
"inTheLast": "Є в останньому",
"inTheRange": "Є в межах",
"inTheRangeDate": "Є в межах (дата)",
"is": "Є",
"isNot": "Не є",
"isGreaterThan": "Більше ніж",
"isLessThan": "Менше ніж",
"matchesRegex": "Відповідає регулярному виразу",
"notContains": "Не містить",
"notInPlaylist": "Немає в",
"notInTheLast": "Не є в останньому",
"startsWith": "Починається з"
},
"form": {
"addServer": {
"error_savePassword": "Сталася помилка під час спроби зберегти пароль",
"ignoreCors": "Ігнорувати cors ($t(common.restartRequired))",
"ignoreSsl": "Ігнорувати ssl ($t(common.restartRequired)}",
"input_legacyAuthentication": "Увімкнути застарілу автентифікацію",
"input_name": "Назва сервера",
"input_password": "Пароль",
"input_preferInstantMix": "Віддавати перевагу миттєвому міксу",
"input_preferInstantMixDescription": "Використовувати тільки миттєвий мікс щоб отримати подібні пісні. корисно, коли у вас є плагіни, які змінюють цю поведінку",
"input_preferRemoteUrl": "Віддавати перевагу публічній URL-адресі",
"input_remoteUrl": "Публічна URL-адреса",
"input_remoteUrlPlaceholder": "Опціонально: публічна URL-адреса для зовнішніх функцій",
"input_savePassword": "Зберегти пароль",
"input_url": "URL-адреса",
"input_username": "Ім'я користувача",
"success": "Сервер додано успішно",
"title": "Додати сервер"
},
"largeFetchConfirmation": {
"title": "Додати елементи до черги",
"description": "Ця дія додасть усі елементи в поточний відфільтрований перегляд"
},
"addToPlaylist": {
"create": "Створити $t(entity.playlist, {\"count\": 1}) {{playlist}}",
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
"input_skipDuplicates": "Пропустити дублікати",
"searchOrCreate": "Шукайте $t(entity.playlist, {\"count\": 2}) або пишіть, щоб створити новий",
"success": "Додано $t(entity.trackWithCount, {\"count\": {{message}} }) до $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"title": "Додати до $t(entity.playlist, {\"count\": 1})"
},
"createPlaylist": {
"input_description": "$t(common.description)",
"input_name": "$t(common.name)",
"input_owner": "$t(common.owner)",
"input_public": "Публічний",
"success": "$t(entity.playlist, {\"count\": 1}) стрворено успішно",
"title": "Створити $t(entity.playlist, {\"count\": 1})"
},
"createRadioStation": {
"success": "Радіостанція створена успішно",
"title": "Створити радіостанцію",
"input_homepageUrl": "Адреса домашньої сторінки",
"input_name": "Назва",
"input_streamUrl": "URL-адреса потоку"
},
"deletePlaylist": {
"input_confirm": "Введіть ім'я $t(entity.playlist, {\"count\": 1}) для підтвердження",
"success": "$t(entity.playlist, {\"count\": 1}) успішно видалено",
"title": "Видалити $t(entity.playlist, {\"count\": 1})"
},
"editPlaylist": {
"publicJellyfinNote": "Jellyfin з якоїсь причини не показує, чи є плейлист публічним чи ні. Якщо ви хочете, щоб він залишався публічним, виберіть варіант нижче",
"success": "$t(entity.playlist, {\"count\": 1}) успішно оновлено",
"title": "Змінити $t(entity.playlist, {\"count\": 1})"
},
"lyricsExport": {
"export": "Експортувати тексти пісень",
"input_synced": "Експортувати синхронізовані тексти пісень",
"input_offset": "$t(setting.lyricOffset)"
},
"lyricSearch": {
"input_artist": "$t(entity.artist, {\"count\": 1})",
"input_name": "$t(common.name)",
"title": "Шукати тексти пісень"
},
"queryEditor": {
"title": "Редактор запитів",
"input_optionMatchAll": "Збіг за всіма",
"input_optionMatchAny": "Збіг за будь-яким",
"addRuleGroup": "Додати групу правил",
"removeRuleGroup": "Видалити групу правил",
"resetToDefault": "Скинути до заводських налаштувань",
"clearFilters": "Очистити фільтри"
},
"saveQueue": {
"success": "Черга відтворення збережена на сервері"
},
"shareItem": {
"allowDownloading": "Дозволити завантаження",
"description": "Опис",
"setExpiration": "Встановити термін дії",
"success": "Посилання для спільного використання скопійовано в буфер обміну (натисніть тут, щоб відкрити)",
"expireInvalid": "Термін дії повинен бути в майбутньому",
"createFailed": "Не вдалося створити спільний доступ (чи ввімкнено спільний доступ?)",
"copyToClipboard": "Скопіювати до буфера обміну: Ctrl+C, enter",
"successMustClick": "Посилання успішно створено, натисніть сюди, щоб відкрити"
},
"shuffleAll": {
"title": "Відтворити випадково",
"input_genre": "$t(entity.genre, {\"count\": 1})",
"input_limit": "Скільки пісень?",
"input_minYear": "Від року",
"input_maxYear": "До року",
"input_played": "Відтворити фільтр",
"input_played_optionAll": "Всі треки",
"input_played_optionUnplayed": "Тільки не відтворені треки",
"input_played_optionPlayed": "Тільки відтворені треки"
},
"updateServer": {
"success": "Сервер успішно оновлено",
"title": "Оновити сервер"
},
"privateMode": {
"enabled": "Приватний режим увімкнено, стан відтворення тепер приховано від зовнішніх інтеграцій",
"disabled": "Приватний режим вимкнено, стан відтворення тепер видно для увімкнених зовнішніх інтеграцій",
"title": "Приватний режим"
},
"editRadioStation": {
"success": "Радіо станція успішно оновлена"
}
},
"player": {
"skip": "Пропустити"
},
"page": {
"albumArtistDetail": {
"about": "Про {{artist}}",
"appearsOn": "З'являється на",
"favoriteSongs": "Улюблені пісні",
"groupingTypeAll": "Всі типи випуску",
"groupingTypePrimary": "Основні типи випуску",
"recentReleases": "Останні випуски",
"viewDiscography": "Переглянути дискографію",
"relatedArtists": "Подібні $t(entity.artist, {\"count\": 2})",
"topSongs": "Найкращі пісні",
"topSongsCommunity": "Спільнота",
"topSongsFrom": "Найкращі пісні від {{title}}",
"topSongsPersonal": "Особисте",
"favoriteSongsFrom": "Улюблені пісні від {{title}}",
"viewAll": "Показати все",
"viewAllTracks": "Показати усі $t(entity.track, {\"count\": 2})"
},
"albumArtistList": {
"title": "$t(entity.albumArtist, {\"count\": 2})"
},
"albumDetail": {
"moreFromArtist": "Більше від цього $t(entity.artist, {\"count\": 1})",
"moreFromGeneric": "Більше від {{item}}",
"released": "Видано"
},
"albumList": {
"artistAlbums": "Альбоми виконавця {{artist}}",
"genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})",
"title": "$t(entity.album, {\"count\": 2})"
},
"radioList": {
"title": "Радіостанції"
},
"releasenotes": {
"commitsSinceStable": "Комміти від {{stable}}",
"noNewCommits": "Немає нових коммітів у цьому періоді",
"noStableReleaseToCompare": "Немає доступної стабільної версії для порівняння"
},
"favorites": {
"title": "$t(entity.favorite, {\"count\": 2})"
},
"windowBar": {
"paused": "(Призупинено) ",
"privateMode": "(Приватний режим)"
},
"appMenu": {
"collapseSidebar": "Згорнути бічну панель",
"commandPalette": "Відкрити палітру команд",
"expandSidebar": "Розгорнути бічну панель",
"goBack": "Повернутися назад",
"goForward": "Перейти вперед",
"manageServers": "Управління серверами",
"privateModeOff": "Вимкнути приватний режим",
"privateModeOn": "Увімкнути приватний режим",
"openBrowserDevtools": "Відкрити інструменти розробника",
"quit": "$t(common.quit)",
"selectServer": "Вибрати сервер",
"selectMusicFolder": "Вибрати папку з музикою",
"noMusicFolder": "Не вибрано папку з музикою",
"multipleMusicFolders": "Вибрано {{count}} папок з музикою",
"settings": "$t(common.setting, {\"count\": 2})",
"version": "Версія {{version}}"
},
"manageServers": {
"title": "Управління серверами",
"serverDetails": "Інформація про сервер",
"url": "URL-адреса",
"username": "Ім'я користувача",
"editServerDetailsTooltip": "Редагувати дані сервера",
"removeServer": "Видалити сервер"
},
"contextMenu": {
"addFavorite": "$t(action.addToFavorites)",
"addLast": "$t(player.addLast)",
"addNext": "$t(player.addNext)",
"addToFavorites": "$t(action.addToFavorites)",
"addToPlaylist": "$t(action.addToPlaylist)",
"createPlaylist": "$t(action.createPlaylist)",
"deletePlaylist": "$t(action.deletePlaylist)",
"deselectAll": "$t(action.deselectAll)",
"download": "Завантажити",
"moveItems": "$t(action.moveItems)",
"moveToNext": "$t(action.moveToNext)",
"moveToBottom": "$t(action.moveToBottom)",
"moveToTop": "$t(action.moveToTop)",
"numberSelected": "{{count}} вибрано",
"play": "$t(player.play)",
"playSimilarSongs": "$t(player.playSimilarSongs)",
"removeFromFavorites": "$t(action.removeFromFavorites)",
"removeFromPlaylist": "$t(action.removeFromPlaylist)",
"removeFromQueue": "$t(action.removeFromQueue)",
"setRating": "$t(action.setRating)",
"playShuffled": "$t(player.shuffle)",
"shareItem": "Поділитися елементом",
"goTo": "Перейти до",
"goToAlbum": "Перейти до $t(entity.album, {\"count\": 1})",
"goToAlbumArtist": "Перейти до $t(entity.albumArtist, {\"count\": 1})",
"showDetails": "Отримати інформацію"
},
"fullscreenPlayer": {
"config": {
"dynamicBackground": "Динамічний фон",
"dynamicImageBlur": "Розмір розмиття зображення",
"dynamicIsImage": "Включити фонове зображення",
"followCurrentLyric": "Слідкувати за поточним рядком",
"lyricAlignment": "Вирівнювання тексту",
"lyricOffset": "Затримка тексту (мс)",
"lyricGap": "Розмір між рядками",
"lyricSize": "Розмір тексту",
"opacity": "Непрозорість",
"showLyricMatch": "Показувати збіг тексту пісень",
"showLyricProvider": "Показувати джерело тексту пісень",
"synchronized": "Синхронізовано",
"unsynchronized": "Несинхронізовано",
"useImageAspectRatio": "Використовувати співвідношення сторін зображення"
},
"lyrics": "Текст пісні",
"related": "Пов'язані",
"upNext": "Далі",
"visualizer": "Візуалізатор",
"noLyrics": "Текст пісні не знайдено"
},
"genreList": {
"showAlbums": "Показати $t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2})",
"showTracks": "Показати $t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2})",
"title": "$t(entity.genre, {\"count\": 2})"
},
"folderList": {
"title": "$t(entity.folder, {\"count\": 2})"
},
"globalSearch": {
"commands": {
"goToPage": "Перейти до сторінки",
"searchFor": "Шукати на {{query}}",
"serverCommands": "Команди сервера"
},
"title": "Команди"
},
"home": {
"explore": "Дослідити з вашої бібліотеки",
"genres": "$t(entity.genre, {\"count\": 2})",
"mostPlayed": "Найбільш відтворені",
"newlyAdded": "Нещодавно додані релізи",
"recentlyPlayed": "Нещодавно відтворені"
}
}
}
{}
+140 -388
View File
@@ -1,28 +1,25 @@
{
"action": {
"editPlaylist": "编辑 $t(entity.playlist, {\"count\": 1})",
"editPlaylist": "编辑 $t(entity.playlist_one)",
"moveToTop": "移至顶部",
"clearQueue": "清空播放队列",
"addToFavorites": "添加到 $t(entity.favorite, {\"count\": 2})",
"addToPlaylist": "添加到 $t(entity.playlist, {\"count\": 1})",
"createPlaylist": "创建 $t(entity.playlist, {\"count\": 1})",
"removeFromPlaylist": "从 $t(entity.playlist, {\"count\": 1}) 移除",
"viewPlaylists": "查看 $t(entity.playlist, {\"count\": 2})",
"addToFavorites": "添加到 $t(entity.favorite_other)",
"addToPlaylist": "添加到 $t(entity.playlist_one)",
"createPlaylist": "创建 $t(entity.playlist_one)",
"removeFromPlaylist": "从 $t(entity.playlist_one) 移除",
"viewPlaylists": "查看 $t(entity.playlist_other)",
"refresh": "$t(common.refresh)",
"deletePlaylist": "删除 $t(entity.playlist, {\"count\": 1})",
"deletePlaylist": "删除 $t(entity.playlist_one)",
"removeFromQueue": "从播放队列中移除",
"deselectAll": "取消全选",
"moveToBottom": "移至底部",
"setRating": "评分",
"toggleSmartPlaylistEditor": "切换 $t(entity.smartPlaylist) 编辑器",
"removeFromFavorites": "从 $t(entity.favorite, {\"count\": 2}) 移除",
"removeFromFavorites": "从 $t(entity.favorite_other) 移除",
"goToPage": "前往页面",
"openIn": {
"lastfm": "在 Last.fm 中打开",
"musicbrainz": "在 MusicBrainz 中打开",
"listenbrainz": "在 ListenBrainz 中打开",
"qobuz": "在 Qobuz 中打开",
"spotify": "在 Spotify 中打开"
"musicbrainz": "在 MusicBrainz 中打开"
},
"moveToNext": "移至下一首",
"downloadStarted": "开始下载 {{count}} 个项目",
@@ -38,15 +35,14 @@
"addOrRemoveFromSelection": "在所选内容中添加或移除",
"selectRangeOfItems": "批量选择",
"selectAll": "全选",
"createRadioStation": "创建$t(entity.radioStation, {\"count\": 1})",
"deleteRadioStation": "删除$t(entity.radioStation, {\"count\": 1})",
"openApplicationDirectory": "打开应用程序目录",
"goToCurrent": "转到当前项目"
"createRadioStation": "创建$t(entity.radioStation_one)",
"deleteRadioStation": "删除$t(entity.radioStation_one)",
"openApplicationDirectory": "打开应用程序目录"
},
"common": {
"increase": "增高",
"rating": "评分",
"bpm": "BPM",
"bpm": "bpm",
"refresh": "刷新",
"unknown": "未知",
"edit": "编辑",
@@ -54,7 +50,7 @@
"left": "左",
"save": "保存",
"right": "右",
"currentSong": "当前$t(entity.track, {\"count\": 1})",
"currentSong": "当前$t(entity.track_one)",
"collapse": "折叠",
"trackNumber": "音轨编号",
"descending": "降序",
@@ -78,8 +74,8 @@
"forward": "前进",
"delete": "删除",
"cancel": "取消",
"forceRestartRequired": "重启应用使更改生效…关闭通知即可重启",
"setting_other": "设置",
"forceRestartRequired": "重启应用使更改生效…关闭通知即可重启",
"setting": "设置",
"version": "版本",
"title": "标题",
"filter_other": "筛选",
@@ -96,7 +92,7 @@
"disable": "禁用",
"menu": "菜单",
"restartRequired": "需要重启应用",
"previousSong": "上一首$t(entity.track, {\"count\": 1})",
"previousSong": "上一首$t(entity.track_one)",
"noResultsFromQuery": "未查询到匹配结果",
"quit": "退出",
"expand": "展开",
@@ -111,7 +107,7 @@
"duration": "时长",
"ok": "好",
"no": "否",
"playerMustBePaused": "播放器必须暂停",
"playerMustBePaused": "播放器必须暂停",
"channel_other": "频道",
"none": "无",
"disc": "碟片",
@@ -154,15 +150,7 @@
"tableColumns": "表格列",
"itemsMore": "{{count}} 更多",
"countSelected": "已选择{{count}}项",
"retry": "重试",
"example": "示例",
"filter_single": "单项",
"mood": "氛围",
"rename": "重命名",
"filter_multiple": "多项",
"newVersionAvailable": "新版本现已可用",
"numberOfResults": "{{numberOfResults}} 结果",
"grouping": "分组"
"retry": "重试"
},
"entity": {
"albumArtist_other": "专辑艺术家",
@@ -178,13 +166,11 @@
"favorite_other": "收藏",
"artistWithCount_other": "{{count}} 位艺术家",
"folder_other": "文件夹",
"smartPlaylist": "智能$t(entity.playlist, {\"count\": 1})",
"smartPlaylist": "智能$t(entity.playlist_one)",
"genreWithCount_other": "{{count}} 种流派",
"trackWithCount_other": "{{count}} 首曲目",
"play_other": "{{count}} 次播放",
"song_other": "歌曲",
"radioStation_other": "广播电台",
"radioStationWithCount_other": "{{count}} 个广播电台"
"song_other": "歌曲"
},
"player": {
"repeat_all": "循环全部",
@@ -201,17 +187,17 @@
"shuffle": "播放(随机)",
"playbackFetchNoResults": "未找到歌曲",
"playbackFetchInProgress": "正在加载歌曲…",
"addNext": "下一",
"addNext": "下一首播放",
"playbackFetchCancel": "请稍等…关闭通知以取消操作",
"play": "播放",
"repeat_off": "循环关闭",
"queue_clear": "清空播放队列",
"muted": "已静音",
"unfavorite": "取消收藏",
"queue_moveToTop": "将所选项移至部",
"queue_moveToBottom": "将所选项移至部",
"queue_moveToTop": "将所选项移至部",
"queue_moveToBottom": "将所选项移至部",
"shuffle_off": "禁用随机播放",
"addLast": "最后",
"addLast": "上一曲",
"mute": "静音",
"skip_forward": "向前跳过",
"playbackSpeed": "播放速度",
@@ -220,32 +206,20 @@
"viewQueue": "查看播放队列",
"saveQueueToServer": "将播放队列保存到服务器",
"restoreQueueFromServer": "从服务器恢复播放队列",
"queueType_default": "默认",
"lyrics": "歌词",
"addLastShuffled": "最后(随机)",
"addNextShuffled": "下一个(随机)",
"artistRadio": "艺术家电台",
"holdToShuffle": "按住即可随机",
"trackRadio": "追踪广播",
"sleepTimer": "睡眠定时器",
"sleepTimer_endOfSong": "当前歌曲结束时",
"sleepTimer_minutes": "{{count}} 分钟",
"sleepTimer_hours": "{{count}} 小时",
"sleepTimer_custom": "自定义",
"sleepTimer_off": "关闭",
"sleepTimer_timeRemaining": "剩余时间 {{time}}",
"sleepTimer_setCustom": "设置定时器",
"sleepTimer_cancel": "取消定时器",
"albumRadio": "专辑电台"
"queueType": "队列类型"
},
"setting": {
"crossfadeStyle_description": "选择用于音频播放器的淡入淡出风格",
"hotkey_favoriteCurrentSong": "收藏$t(common.currentSong)",
"audioExclusiveMode_description": "启用独占输出模式。在此模式下,系统通常被锁定为只有 MPV 能够输出音频",
"audioExclusiveMode_description": "启用独占输出模式。在此模式下,系统通常被锁定为只有 mpv 能够输出音频",
"disableLibraryUpdateOnStartup": "禁用启动时查询新版本",
"gaplessAudio": "无缝音频",
"audioPlayer_description": "选择用于播放的音频播放器",
"globalMediaHotkeys": "全局媒体快捷键",
"gaplessAudio_description": "调整 MPV 无缝音频设置",
"gaplessAudio_description": "调整 mpv 无缝音频设置",
"disableAutomaticUpdates": "禁用自动更新",
"followLyric_description": "滚动歌词到当前播放位置",
"audioExclusiveMode": "音频独占模式",
"font": "字体",
@@ -261,12 +235,12 @@
"followLyric": "跟随当前歌词",
"crossfadeDuration": "淡入淡出持续时间",
"audioPlayer": "音频播放器",
"discordApplicationId": "{{discord}} 应用 ID",
"discordApplicationId": "{{discord}} 应用 id",
"applicationHotkeys_description": "配置应用快捷键。勾选设为全局快捷键(仅桌面端)",
"customFontPath_description": "设置应用使用的自定义字体路径",
"gaplessAudio_optionWeak": "弱(推荐)",
"font_description": "设置应用使用的字体",
"audioDevice_description": "选择用于播放的音频设备",
"audioDevice_description": "选择用于播放的音频设备(仅 web 播放器)",
"enableRemote_description": "启用远程控制服务器,以允许其他设备控制此应用",
"remotePort_description": "设置远程服务器端口",
"hotkey_skipBackward": "向后跳过",
@@ -285,7 +259,7 @@
"scrobble": "记录播放信息",
"skipDuration_description": "设置每次按下跳过按钮将会跳过的时长",
"fontType_optionSystem": "系统字体",
"mpvExecutablePath_description": "设置 MPV 可执行文件的路径。如果留空,则使用默认路径",
"mpvExecutablePath_description": "设置 mpv 可执行文件的路径。如果留空,则使用默认路径",
"sampleRate": "采样率",
"sidePlayQueueStyle_optionAttached": "吸附",
"sidebarConfiguration": "侧边栏设定",
@@ -311,7 +285,7 @@
"remoteUsername_description": "设置远程控制服务器的用户名。如果用户名和密码都为空,则身份验证将被禁用",
"exitToTray_description": "退出应用时最小化到系统托盘",
"hotkey_favoritePreviousSong": "收藏$t(common.previousSong)",
"replayGainMode_optionAlbum": "$t(entity.album, {\"count\": 1})",
"replayGainMode_optionAlbum": "$t(entity.album_one)",
"lyricOffset": "歌词偏移(毫秒)",
"fontType_optionCustom": "自定义字体",
"themeDark_description": "应用将使用深色主题",
@@ -320,7 +294,7 @@
"language_description": "设置应用的语言($t(common.restartRequired)",
"playbackStyle_optionCrossFade": "淡入淡出",
"hotkey_rate3": "评为 3 星",
"replayGainMode_optionTrack": "$t(entity.track, {\"count\": 1})",
"replayGainMode_optionTrack": "$t(entity.track_one)",
"themeLight_description": "应用将使用浅色主题",
"hotkey_toggleFullScreenPlayer": "全屏播放",
"hotkey_localSearch": "页面内搜索",
@@ -334,7 +308,7 @@
"hotkey_toggleShuffle": "切换随机",
"theme": "主题",
"playbackStyle_description": "选择音频播放器的播放风格",
"mpvExecutablePath": "MPV 可执行文件路径",
"mpvExecutablePath": "mpv 可执行文件路径",
"hotkey_rate2": "评为 2 星",
"playButtonBehavior_description": "设置将歌曲添加到播放队列时播放按钮的默认行为",
"minimumScrobblePercentage_description": "歌曲被记录为已播放所需的最小播放百分比",
@@ -344,7 +318,7 @@
"savePlayQueue": "保存播放队列",
"minimumScrobbleSeconds_description": "歌曲被记录为已播放所需的最小播放时间",
"skipPlaylistPage_description": "打开歌单时,直接查看歌曲列表而非查看默认页面",
"fontType_description": "内置字体可以选择 Feishin 提供的字体之一。系统字体允许您选择操作系统提供的任何字体。自定义选项允许您使用自己的字体",
"fontType_description": "内置字体可以选择 feishin 提供的字体之一。系统字体允许您选择操作系统提供的任何字体。自定义选项允许您使用自己的字体",
"playButtonBehavior": "播放按钮行为",
"volumeWheelStep": "音量滚轮分度",
"sidebarPlaylistList_description": "显示或隐藏侧边栏歌单列表",
@@ -361,7 +335,7 @@
"useSystemTheme_description": "使用系统定义的浅色或深色主题",
"playButtonBehavior_optionAddNext": "$t(player.addNext)",
"lyricFetch_description": "从多个互联网源获取歌词",
"lyricFetchProvider_description": "选择要从中获取歌词的提供商",
"lyricFetchProvider_description": "选择歌词源。 歌词源顺序与查询顺序一致",
"sidePlayQueueStyle_optionDetached": "不吸附",
"hotkey_zoomOut": "缩小",
"hotkey_unfavoriteCurrentSong": "取消收藏$t(common.currentSong)",
@@ -385,20 +359,20 @@
"replayGainClipping_description": "自动降低增益以防止{{ReplayGain}}造成削波",
"replayGainPreamp": "{{ReplayGain}}前置放大(分贝)",
"replayGainClipping": "{{ReplayGain}}削波",
"discordUpdateInterval": "{{discord}} Rich Presence 更新间隔",
"discordApplicationId_description": "{{discord}} Rich Presence 应用 ID(默认为 {{defaultId}}",
"discordUpdateInterval": "{{discord}} rich presence 更新间隔",
"discordApplicationId_description": "{{discord}} rich presence 应用 id(默认为 {{defaultId}}",
"discordUpdateInterval_description": "更新间隔秒数(至少 15 秒)",
"discordRichPresence_description": "在 {{discord}} Rich Presence 中显示播放状态。图片键为:{{icon}}、{{playing}} 和 {{paused}}",
"discordRichPresence_description": "在 {{discord}} rich presence 中显示播放状态。图片键为:{{icon}}、{{playing}} 和 {{paused}}",
"accentColor": "强调色",
"accentColor_description": "设置应用的强调色",
"replayGainPreamp_description": "调整应用在{{ReplayGain}}值上的前置放大增益",
"discordIdleStatus": "显示 Rich Presence 闲置状态",
"discordIdleStatus": "显示 rich presence 闲置状态",
"clearCache": "清除浏览器缓存",
"buttonSize": "播放器栏按钮大小",
"buttonSize_description": "播放器栏按钮大小",
"clearCache_description": "Feishin的“硬清除”。除了清除Feishin的缓存,清空浏览器缓存(保存的图像和其他资源)。服务器凭据和设置会被保留",
"clearQueryCache_description": "Feishin的“软清除”。这将会刷新播放列表、元数据并重置保存的歌词。设置、服务器凭据和缓存图像会被保留",
"clearQueryCache": "清除Feishin缓存",
"clearCache_description": "feishin的“硬清除”。除了清除feishin的缓存,清空浏览器缓存(保存的图像和其他资源)。服务器凭据和设置会被保留",
"clearQueryCache_description": "feishin的“软清除”。这将会刷新播放列表、元数据并重置保存的歌词。设置、服务器凭据和缓存图像会被保留",
"clearQueryCache": "清除feishin缓存",
"externalLinks": "显示外部链接",
"externalLinks_description": "允许在艺术家/专辑页面上显示外部链接(Last.fm、MusicBrainz",
"mpvExtraParameters_help": "每行一个",
@@ -420,10 +394,10 @@
"contextMenu_description": "允许您隐藏右键单击项目时显示在菜单中的项目。未选中的项目将被隐藏",
"customCssEnable_description": "允许编写自定义 css",
"customCss": "自定义css",
"customCss_description": "自定义css内容。注意:内容和远程URL是不允许的属性。内容预览展示如下。出于安全考虑,您未设置的其它字段也会显示",
"customCss_description": "自定义css内容。注意:内容和远程url是不允许的属性。内容预览展示如下。出于安全考虑,您未设置的其它字段也会显示",
"contextMenu": "上下文菜单(右键单击)配置",
"customCssEnable": "启用自定义 css",
"customCssNotice": "警告:虽然预设了一些安全限制(不允许 URL() 和 content:),但使用自定义 css 仍然会因更改界面而带来风险",
"customCssNotice": "警告:虽然预设了一些安全限制(不允许 url() 和 content:),但使用自定义 css 仍然会因更改界面而带来风险",
"transcode_description": "可以转码为不同的格式",
"transcodeBitrate": "转码比特率",
"albumBackground": "专辑背景图片",
@@ -451,14 +425,14 @@
"lastfmApiKey": "{{lastfm}} API 密钥",
"lastfmApiKey_description": "{{lastfm}} 的 API 密钥。封面艺术图所需",
"discordServeImage": "从服务器提供 {{discord}} 图像",
"discordServeImage_description": "从服务器本身分享 {{discord}} Rich Presence 的封面艺术,仅适用于 Jellyfin 和 Navidrome。 {{discord}} 使用机器人来获取图像,因此您的服务器必须可通过公共互联网访问",
"discordServeImage_description": "从服务器本身分享 {{discord}} rich presence 的封面艺术,仅适用于 Jellyfin 和 Navidrome。 {{discord}} 使用机器人来获取图像,因此您的服务器必须可通过公共互联网访问",
"musicbrainz": "显示 MusicBrainz 链接",
"musicbrainz_description": "在艺术家/专辑页面上显示 MusicBrainz 链接(如果存在 MusicBrainz ID",
"lastfm": "显示 Last.fm 链接",
"musicbrainz_description": "在存在 MusicBrainz ID 的艺术家/专辑页面上显示 MusicBrainz 链接",
"lastfm": "显示 last.fm 链接",
"lastfm_description": "在艺术家/专辑页面上显示 Last.fm 的链接",
"preferLocalLyrics_description": "优先选择本地歌词(如有),而不是远程歌词",
"preferLocalLyrics": "首选本地歌词",
"discordPausedStatus": "暂停时显示Rich Presence",
"discordPausedStatus": "暂停时显示rich presence",
"discordPausedStatus_description": "启用后将在播放器暂停时显示状态",
"preservePitch": "保持音高",
"preservePitch_description": "在调整播放速度时保持音高",
@@ -480,16 +454,16 @@
"releaseChannel_optionLatest": "最新的",
"releaseChannel_optionBeta": "测试版",
"releaseChannel": "发布通道",
"releaseChannel_description": "选择稳定版测试版或 Alpha(夜间构建版)以启用自动更新",
"releaseChannel_description": "选择稳定版本或测试版以进行自动更新",
"mediaSession": "启用媒体会话",
"mediaSession_description": "启用媒体会话集成,在系统音量叠加层和锁屏界面显示媒体控件和元数据",
"mediaSession_description": "启用 Windows 媒体会话集成,在系统音量覆盖和锁定屏幕中显示媒体控件和元数据(仅限 Windows",
"exportImportSettings_control_description": "通过 JSON 导出和导入设置",
"exportImportSettings_control_exportText": "导出设置",
"exportImportSettings_control_importText": "导入设置",
"exportImportSettings_control_title": "导入/导出设置",
"exportImportSettings_destructiveWarning": "导入设置会破坏现有设置,请在点击下方“导入”按钮前仔细阅读以上内容!",
"exportImportSettings_importBtn": "导入设置",
"exportImportSettings_importModalTitle": "导入 Feishin 设置",
"exportImportSettings_importModalTitle": "导入 feishin 设置",
"exportImportSettings_importSuccess": "设置已成功导入!",
"exportImportSettings_notValidJSON": "传递的文件不是有效的 JSON 文件",
"exportImportSettings_offendingKeyError": "\"{{offendingKey}}\" 不正确 - {{reason}}",
@@ -510,14 +484,14 @@
"combinedLyricsAndVisualizer": "在播放器侧边栏合并歌词和可视化界面",
"autoDJ_description": "自动添加相似歌曲到队列中",
"notify_description": "歌曲变更时显示通知",
"mpvExtraParameters_description": "向MPV传递额外参数",
"mpvExtraParameters_description": "向mpv传递额外参数",
"audioFadeOnStatusChange": "音频改变时淡入淡出",
"showVisualizerInSidebar": "在播放器侧边栏显示可视化效果",
"showLyricsInSidebar": "在播放器侧边栏显示歌词",
"analyticsDisable": "退出使用情况的分析",
"artistReleaseTypeConfiguration": "艺术家发行类型设置",
"useThemeAccentColor": "使用主题强调色",
"mpvExtraParameters": "MPV额外参数",
"mpvExtraParameters": "mpv额外参数",
"showRatings": "显示星级评分",
"followCurrentSong": "跟随当前歌曲",
"logLevel": "日志等级",
@@ -543,76 +517,7 @@
"playerbarWaveformAlign": "波形对齐方式",
"playerbarWaveformBarWidth": "波形宽度",
"playerbarWaveformGap": "波形间距",
"transcode": "启用转码功能",
"useThemeAccentColor_description": "使用所选主题中定义的主色,而不是自定义强调色",
"homeFeatureStyle_optionSingle": "单项",
"autoDJ": "自动DJ",
"autoDJ_itemCount": "项目数量",
"autoDJ_itemCount_description": "启用自动 DJ 功能后,尝试添加到队列中的项目数",
"autoDJ_timing": "定时",
"autoDJ_timing_description": "自动 DJ 触发前队列中剩余的歌曲数量",
"crossfadeStyle": "交叉渐变风格",
"discordRichPresence": "{{discord}} Rich Presence",
"homeFeatureStyle_description": "控制首页特色轮播图的样式",
"homeFeatureStyle": "首页特色旋转样式",
"homeFeatureStyle_optionMultiple": "多样",
"hotkey_listNavigateToPage": "列表导航至项目页面",
"hotkey_listPlayDefault": "播放列表",
"hotkey_listPlayLast": "播放列表最后",
"hotkey_listPlayNext": "播放列表下一个",
"hotkey_listPlayNow": "播放列表现在",
"pathReplace": "文件路径替换",
"pathReplace_description": "替换服务器的默认文件路径",
"pathReplace_optionRemovePrefix": "移除前缀",
"pathReplace_optionAddPrefix": "添加前缀",
"playerFilters": "从队列中筛选歌曲",
"playerFilters_description": "根据以下条件,忽略添加到队列中的歌曲",
"artistRadioCount_description": "设置艺术家电台和曲目电台要获取的歌曲数量",
"artistRadioCount": "艺术家/曲目电台数量",
"imageResolution_optionItemCard": "项目卡",
"playerbarWaveformRadius": "波形半径",
"enableGridMultiSelect": "启用网格多选",
"enableGridMultiSelect_description": "启用后,允许在网格视图中选择多个项目。禁用后,点击网格项目图像将跳转到项目页面",
"sidebarPlaylistSorting_description": "允许在侧边栏中使用拖放操作手动对播放列表进行排序,而不是使用默认的服务器顺序",
"sidebarPlaylistSorting": "侧边栏播放列表排序",
"sidebarPlaylistListFilterRegex_description": "隐藏侧边栏中与此正则表达式匹配的播放列表",
"sidebarPlaylistListFilterRegex_placeholder": "例如:^每日精选*",
"sidebarPlaylistListFilterRegex": "播放列表筛选正则表达式",
"queryBuilder": "查询构建器",
"queryBuilderCustomFields": "自定义字段",
"analyticsEnable": "发送基于使用情况的分析",
"analyticsEnable_description": "发送匿名使用数据帮助开发者改进应用程序",
"automaticUpdates": "自动更新",
"automaticUpdates_description": "自动检查并安装更新",
"releaseChannel_optionAlpha": "alpha(每日构建版)",
"discordStateIcon": "显示播放图标",
"discordStateIcon_description": "在 Rich Presence 状态中显示一个小的播放图标。启用“暂停时显示 Rich Presence 在线状态”后,暂停图标始终显示",
"blurExplicitImages": "模糊显式图片",
"blurExplicitImages_description": "专辑和歌曲封面若被标记为不雅内容,将会进行模糊处理",
"autosave": "自动保存播放队列",
"autosave_description": "启用自动将播放队列保存到服务器的功能。此功能仅在使用 Navidrome/Subsonic 时可用,且不能使用混合播放队列。",
"autosaveCount": "自动播放队列保存频率",
"autosaveCount_description": "队列保存前需要更改多少首歌曲?1(最少)表示每次歌曲更改",
"useThemePrimaryShade": "使用主题主色调",
"useThemePrimaryShade_description": "对于主要颜色变体,请使用所选主题中定义的主色调",
"primaryShade": "主色调",
"primaryShade_description": "覆盖按钮、链接和其他主色元素使用的主色调(0-9)",
"playerItemConfiguration_description": "配置全屏播放器上显示的项目及其显示顺序",
"playerItemConfiguration": "播放器项目配置",
"listenbrainz_description": "在艺术家/专辑页面上显示 ListenBrainz 链接",
"listenbrainz": "显示 ListenBrainz 链接",
"qobuz_description": "在艺术家/专辑页面上显示 Qobuz 链接",
"qobuz": "显示 Qobuz 链接",
"spotify_description": "在艺术家/专辑页面上显示 Spotify 链接",
"spotify": "显示 Spotify 链接",
"nativeSpotify_description": "在 Spotify 应用中打开,而不是在浏览器中打开",
"nativeSpotify": "使用 Spotify 应用",
"sidePlayQueueLayout": "侧边播放队列布局",
"sidePlayQueueLayout_description": "设置附加侧边播放队列的布局",
"sidePlayQueueLayout_optionHorizontal": "水平",
"sidePlayQueueLayout_optionVertical": "垂直",
"waveformLoadingDelay": "波形加载延迟",
"waveformLoadingDelay_description": "加载波形前的延迟时间(秒)。如果在使用网页播放器时遇到卡顿现象,请增加此值。"
"transcode": "启用转码功能"
},
"error": {
"remotePortWarning": "重启服务器使新端口生效",
@@ -643,10 +548,7 @@
"noNetwork": "服务器不可用",
"noNetworkDescription": "无法连接到该服务器",
"saveQueueFailed": "播放列表保存失败",
"settingsSyncError": "渲染器设置与主进程中存在差异,请重启程序以应用更改",
"invalidJson": "无效的 JSON",
"serverLockSingleServer": "服务器锁定时,只允许一台服务器运行",
"playbackPausedDueToError": "发生错误,播放已暂停"
"settingsSyncError": "渲染器设置与主进程中存在差异,请重启程序以应用更改"
},
"filter": {
"mostPlayed": "最多播放过",
@@ -663,18 +565,18 @@
"communityRating": "社区评分",
"path": "路径",
"favorited": "已收藏",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"albumArtist": "$t(entity.albumArtist_one)",
"releaseYear": "发布年份",
"biography": "个人简介",
"songCount": "歌曲数量",
"random": "随机",
"lastPlayed": "最后播放",
"lastPlayed": "上次播放",
"toYear": "截止年份",
"fromYear": "起始年份",
"criticRating": "评论家评分",
"trackNumber": "曲目",
"bpm": "BPM",
"artist": "$t(entity.artist, {\"count\": 1})",
"bpm": "bpm",
"artist": "$t(entity.artist_one)",
"comment": "评论",
"isCompilation": "为合辑",
"isFavorited": "已收藏",
@@ -682,38 +584,34 @@
"recentlyUpdated": "最近更新",
"isRated": "已评分",
"isRecentlyPlayed": "最近播放过",
"channels": "$t(common.channel, {\"count\": 2})",
"channels": "$t(common.channel_other)",
"owner": "$t(common.owner)",
"genre": "$t(entity.genre, {\"count\": 1})",
"genre": "$t(entity.genre_one)",
"note": "注释",
"albumCount": "$t(entity.album, {\"count\": 2})数",
"id": "ID",
"albumCount": "$t(entity.album_other)数",
"id": "id",
"disc": "碟片",
"duration": "时长",
"album": "$t(entity.album, {\"count\": 1})",
"explicitStatus": "$t(common.explicitStatus)",
"sortName": "排序名称",
"matchAnd": "和",
"matchOr": "或"
"album": "$t(entity.album_one)",
"explicitStatus": "$t(common.explicitStatus)"
},
"page": {
"sidebar": {
"nowPlaying": "正在播放",
"playlists": "$t(entity.playlist, {\"count\": 2})",
"playlists": "$t(entity.playlist_other)",
"search": "$t(common.search)",
"tracks": "$t(entity.track, {\"count\": 2})",
"albums": "$t(entity.album, {\"count\": 2})",
"genres": "$t(entity.genre, {\"count\": 2})",
"folders": "$t(entity.folder, {\"count\": 2})",
"settings": "$t(common.setting, {\"count\": 2})",
"tracks": "$t(entity.track_other)",
"albums": "$t(entity.album_other)",
"genres": "$t(entity.genre_other)",
"folders": "$t(entity.folder_other)",
"settings": "$t(common.setting_other)",
"home": "$t(common.home)",
"artists": "$t(entity.artist, {\"count\": 2})",
"albumArtists": "$t(entity.albumArtist, {\"count\": 2})",
"shared": "共享$t(entity.playlist, {\"count\": 2})",
"artists": "$t(entity.artist_other)",
"albumArtists": "$t(entity.albumArtist_other)",
"shared": "共享$t(entity.playlist_other)",
"myLibrary": "我的媒体库",
"favorites": "$t(entity.favorite, {\"count\": 2})",
"radio": "$t(entity.radioStation, {\"count\": 2})",
"collections": "合集"
"favorites": "$t(entity.favorite_other)",
"radio": "$t(entity.radioStation_other)"
},
"fullscreenPlayer": {
"config": {
@@ -747,14 +645,13 @@
"openBrowserDevtools": "打开浏览器开发者工具",
"goBack": "返回",
"goForward": "前进",
"settings": "$t(common.setting, {\"count\": 2})",
"settings": "$t(common.setting_other)",
"quit": "$t(common.quit)",
"privateModeOff": "关闭私人模式",
"privateModeOn": "开启私人模式",
"multipleMusicFolders": "已选择{{count}}个媒体库",
"noMusicFolder": "未选择任何音乐库",
"selectMusicFolder": "选择媒体库",
"commandPalette": "打开命令面板"
"selectMusicFolder": "选择媒体库"
},
"home": {
"mostPlayed": "最多播放",
@@ -763,10 +660,10 @@
"recentlyPlayed": "最近播放",
"title": "$t(common.home)",
"recentlyReleased": "最近发布",
"genres": "$t(entity.genre, {\"count\": 2})"
"genres": "$t(entity.genre_other)"
},
"albumDetail": {
"moreFromArtist": "更多该$t(entity.artist, {\"count\": 1})作品",
"moreFromArtist": "更多该$t(entity.artist_one)作品",
"moreFromGeneric": "更多{{item}}作品",
"released": "已发布"
},
@@ -792,8 +689,7 @@
"discord": "Discord",
"logger": "日志记录器",
"queryBuilder": "查询构建器",
"lyricsDisplay": "歌词显示",
"playerFilters": "播放筛选器"
"lyricsDisplay": "歌词显示"
},
"globalSearch": {
"commands": {
@@ -826,48 +722,43 @@
"download": "下载",
"playShuffled": "$t(player.shuffle)",
"moveToNext": "$t(action.moveToNext)",
"goToAlbum": "转到 $t(entity.album, {\"count\": 1})",
"goToAlbumArtist": "转到 $t(entity.albumArtist, {\"count\": 1})",
"goToAlbum": "转到 $t(entity.album_one)",
"goToAlbumArtist": "转到 $t(entity.albumArtist_one)",
"moveItems": "$t(action.moveItems)",
"goTo": "前往"
},
"trackList": {
"title": "$t(entity.track, {\"count\": 2})",
"genreTracks": "\"{{genre}}\" $t(entity.track, {\"count\": 2})",
"title": "$t(entity.track_other)",
"genreTracks": "\"{{genre}}\" $t(entity.track_other)",
"artistTracks": "{{artist}} 的曲目"
},
"albumArtistList": {
"title": "$t(entity.albumArtist, {\"count\": 2})"
"title": "$t(entity.albumArtist_other)"
},
"albumList": {
"title": "$t(entity.album, {\"count\": 2})",
"title": "$t(entity.album_other)",
"artistAlbums": "{{artist}}的专辑",
"genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})"
"genreAlbums": "\"{{genre}}\" $t(entity.album_other)"
},
"genreList": {
"title": "$t(entity.genre, {\"count\": 2})",
"showAlbums": "显示$t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2})",
"showTracks": "显示$t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2})"
"title": "$t(entity.genre_other)",
"showAlbums": "显示$t(entity.genre_one) $t(entity.album_other)",
"showTracks": "显示$t(entity.genre_one) $t(entity.track_other)"
},
"playlistList": {
"title": "$t(entity.playlist, {\"count\": 2})"
"title": "$t(entity.playlist_other)"
},
"albumArtistDetail": {
"recentReleases": "最近发布",
"viewDiscography": "查看唱片目录",
"relatedArtists": "相关$t(entity.artist, {\"count\": 2})",
"relatedArtists": "相关$t(entity.artist_other)",
"topSongs": "热门歌曲",
"topSongsFrom": "{{title}}的热门歌曲",
"viewAllTracks": "查看所有$t(entity.track, {\"count\": 2})",
"viewAllTracks": "查看所有$t(entity.track_other)",
"about": "关于{{artist}}",
"appearsOn": "出现在",
"viewAll": "查看全部",
"groupingTypeAll": "所有发行类型",
"groupingTypePrimary": "首选发布类型",
"favoriteSongs": "收藏的歌曲",
"favoriteSongsFrom": "来自 {{title}} 收藏的歌曲",
"topSongsCommunity": "社区",
"topSongsPersonal": "个人"
"groupingTypeAll": "所有发行类型"
},
"itemDetail": {
"copyPath": "将路径复制到剪贴板",
@@ -886,33 +777,17 @@
"removeServer": "移除服务器"
},
"favorites": {
"title": "$t(entity.favorite, {\"count\": 2})"
"title": "$t(entity.favorite_other)"
},
"folderList": {
"title": "$t(entity.folder, {\"count\": 2})"
},
"radioList": {
"title": "广播电台"
},
"windowBar": {
"paused": "(暂停) ",
"privateMode": "(私人模式)"
},
"collections": {
"overrideExisting": "覆盖现有",
"saveAsCollection": "保存为集合"
},
"releasenotes": {
"commitsSinceStable": "自 {{stable}} 以来的提交",
"noNewCommits": "此范围内没有新的提交",
"noStableReleaseToCompare": "目前没有稳定版本可供比较"
"title": "$t(entity.folder_other)"
}
},
"form": {
"deletePlaylist": {
"title": "删除$t(entity.playlist, {\"count\": 1})",
"success": "$t(entity.playlist, {\"count\": 1})已成功删除",
"input_confirm": "输入$t(entity.playlist, {\"count\": 1})的名称进行确认"
"title": "删除$t(entity.playlist_one)",
"success": "$t(entity.playlist_one)已成功删除",
"input_confirm": "输入$t(entity.playlist_one)的名称进行确认"
},
"addServer": {
"title": "添加服务器",
@@ -925,7 +800,7 @@
"ignoreSsl": "忽略 ssl $t(common.restartRequired)",
"ignoreCors": "忽略 cors $t(common.restartRequired)",
"error_savePassword": "保存密码时出现错误",
"input_url": "URL",
"input_url": "url",
"input_preferInstantMixDescription": "仅使用即时混音来获取类似的歌曲。如果您有修改此行为的插件,则很有用",
"input_preferInstantMix": "首选即时混音",
"input_preferRemoteUrl": "首选公共 URL",
@@ -934,16 +809,16 @@
},
"addToPlaylist": {
"success": "添加$t(entity.trackWithCount, {\"count\": {{message}} })到$t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"title": "添加到$t(entity.playlist, {\"count\": 1})",
"title": "添加到$t(entity.playlist_one)",
"input_skipDuplicates": "跳过重复",
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
"create": "创建 $t(entity.playlist, {\"count\": 1}) {{playlist}}",
"searchOrCreate": "搜索 $t(entity.playlist, {\"count\": 2}) 或键入以创建一个新的"
"input_playlists": "$t(entity.playlist_other)",
"create": "创建 $t(entity.playlist_one) {{playlist}}",
"searchOrCreate": "搜索 $t(entity.playlist_other) 或键入以创建一个新的"
},
"createPlaylist": {
"title": "创建$t(entity.playlist, {\"count\": 1})",
"title": "创建$t(entity.playlist_one)",
"input_public": "公开",
"success": "已成功创建 $t(entity.playlist, {\"count\": 1})",
"success": "已成功创建 $t(entity.playlist_one)",
"input_description": "$t(common.description)",
"input_name": "$t(common.name)",
"input_owner": "$t(common.owner)"
@@ -962,14 +837,15 @@
"removeRuleGroup": "移除规则组"
},
"editPlaylist": {
"title": "编辑$t(entity.playlist, {\"count\": 1})",
"title": "编辑$t(entity.playlist_one)",
"publicJellyfinNote": "Jellyfin 出于某种原因不会显示播放列表是否公开。如果您希望保持公开,请选择以下输入",
"success": "$t(entity.playlist, {\"count\": 1})更新成功"
"success": "$t(entity.playlist_one)更新成功",
"editNote": "不建议对大型播放列表进行手动编辑,你确定接受新播放列表覆盖已有播放列表可能导致的数据丢失风险吗?"
},
"lyricSearch": {
"title": "搜索歌词",
"input_name": "$t(common.name)",
"input_artist": "$t(entity.artist, {\"count\": 1})"
"input_artist": "$t(entity.artist_one)"
},
"shareItem": {
"expireInvalid": "过期时间必须是将来的时间",
@@ -977,9 +853,7 @@
"allowDownloading": "允许下载",
"description": "描述",
"setExpiration": "设置过期时间",
"success": "共享链接已复制到剪贴板(或单击此处打开)",
"copyToClipboard": "复制到剪贴板:Ctrl+CEnter",
"successMustClick": "分享创建成功。点击此处打开"
"success": "共享链接已复制到剪贴板(或单击此处打开)"
},
"privateMode": {
"enabled": "启用私人模式,播放状态现在对外部集成隐藏",
@@ -993,9 +867,7 @@
"createRadioStation": {
"input_homepageUrl": "首页地址",
"input_name": "名称",
"input_streamUrl": "串流地址",
"success": "电台创建成功",
"title": "创建广播电台"
"input_streamUrl": "串流地址"
},
"lyricsExport": {
"export": "导出歌词",
@@ -1007,17 +879,12 @@
},
"shuffleAll": {
"title": "随机播放",
"input_genre": "$t(entity.genre, {\"count\": 1})",
"input_genre": "$t(entity.genre_one)",
"input_played_optionAll": "所有曲目",
"input_maxYear": "截止年份",
"input_minYear": "起始年份",
"input_played_optionUnplayed": "仅未播放的曲目",
"input_played_optionPlayed": "仅已播放的曲目",
"input_limit": "有多少首歌?",
"input_played": "播放筛选器"
},
"editRadioStation": {
"success": "电台更新成功"
"input_played_optionPlayed": "仅已播放的曲目"
}
},
"table": {
@@ -1051,14 +918,12 @@
"advancedSettings": "高级设置",
"autosize": "自动调整大小",
"horizontalBorders": "行边框",
"verticalBorders": "列边框",
"showHeader": "显示标题"
"verticalBorders": "列边框"
},
"view": {
"table": "表格",
"grid": "网格",
"list": "列表",
"detail": "详情"
"list": "列表"
},
"label": {
"releaseDate": "发布日期",
@@ -1066,37 +931,34 @@
"duration": "$t(common.duration)",
"dateAdded": "添加日期",
"size": "$t(common.size)",
"bpm": "$t(common.BPM)",
"bpm": "$t(common.bpm)",
"lastPlayed": "最后播放",
"trackNumber": "音轨编号",
"rowIndex": "行索引",
"rating": "$t(common.rating)",
"artist": "$t(entity.artist, {\"count\": 1})",
"album": "$t(entity.album, {\"count\": 1})",
"artist": "$t(entity.artist_one)",
"album": "$t(entity.album_one)",
"note": "$t(common.note)",
"biography": "$t(common.biography)",
"owner": "$t(common.owner)",
"path": "$t(common.path)",
"channels": "$t(common.channel, {\"count\": 2})",
"channels": "$t(common.channel_other)",
"playCount": "播放次数",
"bitrate": "$t(common.bitrate)",
"actions": "$t(common.action, {\"count\": 2})",
"genre": "$t(entity.genre, {\"count\": 1})",
"actions": "$t(common.action_other)",
"genre": "$t(entity.genre_one)",
"discNumber": "碟片编号",
"favorite": "$t(common.favorite)",
"year": "$t(common.year)",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"albumArtist": "$t(entity.albumArtist_one)",
"titleCombined": "$t(common.title)(合并)",
"codec": "$t(common.codec)",
"songCount": "$t(entity.track, {\"count\": 2})",
"albumCount": "$t(entity.album, {\"count\": 2})",
"songCount": "$t(entity.track_other)",
"albumCount": "$t(entity.album_other)",
"image": "图片",
"bitDepth": "$t(common.bitDepth)",
"sampleRate": "$t(common.sampleRate)",
"genreBadge": "$t(entity.genre, {\"count\": 1})(徽章)",
"composer": "作曲家",
"titleArtist": "$t(common.title) (艺术家)",
"albumGroup": "专辑分组"
"genreBadge": "$t(entity.genre_one)(徽章)"
}
},
"column": {
@@ -1105,22 +967,22 @@
"rating": "评分",
"favorite": "收藏",
"playCount": "播放次数",
"albumCount": "$t(entity.album, {\"count\": 2})",
"albumCount": "$t(entity.album_other)",
"releaseYear": "年份",
"lastPlayed": "最后播放",
"biography": "简介",
"releaseDate": "发布日期",
"bitrate": "比特率",
"title": "标题",
"bpm": "BPM",
"bpm": "bpm",
"dateAdded": "添加日期",
"artist": "$t(entity.artist, {\"count\": 1})",
"songCount": "$t(entity.track, {\"count\": 2})",
"artist": "$t(entity.artist_one)",
"songCount": "$t(entity.track_other)",
"trackNumber": "音轨编号",
"genre": "$t(entity.genre, {\"count\": 1})",
"genre": "$t(entity.genre_one)",
"albumArtist": "专辑艺术家",
"path": "路径",
"channels": "$t(common.channel, {\"count\": 2})",
"channels": "$t(common.channel_other)",
"discNumber": "碟片",
"size": "$t(common.size)",
"codec": "$t(common.codec)",
@@ -1136,7 +998,7 @@
},
"releaseType": {
"primary": {
"album": "$t(entity.album, {\"count\": 1})",
"album": "$t(entity.album_one)",
"broadcast": "播送",
"ep": "迷你专辑(EP",
"single": "单曲",
@@ -1151,10 +1013,7 @@
"mixtape": "混音专辑",
"remix": "再混音(Remix",
"soundtrack": "原声带",
"audioDrama": "广播剧",
"djMix": "DJ混音",
"fieldRecording": "现场录制",
"spokenWord": "访谈"
"audioDrama": "广播剧"
}
},
"filterOperator": {
@@ -1175,8 +1034,7 @@
"notContains": "不包含",
"startsWith": "以…开头",
"inTheRangeDate": "在(日期)范围内",
"notInPlaylist": "不在…中",
"notInTheLast": "不在最后"
"notInPlaylist": "不在…中"
},
"datetime": {
"minuteShort": "分",
@@ -1229,112 +1087,6 @@
"builtIn": "内置",
"colors": "颜色",
"gradient": "渐变",
"miscellaneousSettings": "杂项设置",
"options": {
"channelLayout": {
"single": "单项",
"dualCombined": "双重组合",
"dualHorizontal": "双水平",
"dualVertical": "双垂直"
},
"mode": {
"0": "[0] 离散频率",
"1": "[1] 1/24倍频程 / 240频段",
"2": "[2] 1/12 倍频程 / 120 频段",
"3": "[3] 1/8倍频程 / 80频段",
"4": "[4] 1/6倍频程 / 60频段",
"5": "[5] 1/4倍频程 / 40频段",
"6": "[6] 1/3倍频程 / 30频段",
"7": "[7] 半倍频程 / 20 频段",
"8": "[8] 全倍频程 / 10 频段",
"10": "[10] 折线图 / 面积图"
},
"colorMode": {
"gradient": "渐变",
"barIndex": "Bar-Index",
"barLevel": "Bar-Level"
},
"gradient": {
"classic": "经典",
"prism": "棱镜",
"rainbow": "彩虹",
"steelblue": "钢蓝色",
"orangered": "橙红色"
},
"frequencyScale": {
"none": "无",
"bark": "树皮鳞片",
"linear": "线性刻度",
"log": "对数刻度",
"mel": "梅尔刻度"
},
"weightingFilter": {
"none": "无",
"a": "A",
"b": "B",
"c": "C",
"d": "D",
"z": "Z"
}
},
"cyclePresets": "循环预设",
"includeAllPresets": "包含所有预设",
"ignoredPresets": "忽略预设",
"selectedPresets": "已选预设",
"randomizeNextPreset": "随机化下一个预设",
"blendTime": "混合时间",
"barSpace": "住间距",
"colorStops": "颜色停止",
"level": "等级",
"colorMode": "颜色模式",
"gradientLeft": "左侧渐变",
"gradientRight": "右侧渐变",
"fft": "FFT",
"fftSize": "FFT 大小",
"smoothing": "平滑",
"frequencyRangeAndScaling": "频率范围和缩放",
"minimumFrequency": "最低频率",
"maximumFrequency": "最大频率",
"frequencyScale": "频率尺度",
"sensitivity": "灵敏度",
"weightingFilter": "加权滤波器",
"minimumDecibels": "最低分贝",
"maximumDecibels": "最大分贝",
"linearAmplitude": "线性振幅",
"linearBoost": "线性增强",
"peakBehavior": "峰值行为",
"showPeaks": "显示峰值",
"fadePeaks": "峰值淡出",
"peakLine": "峰值线条",
"gravity": "重力",
"peakFadeTime": "峰值淡出时间(毫秒)",
"peakHoldTime": "峰值保持时间(毫秒)",
"radialSpectrum": "圆形频谱",
"radial": "径向",
"radialInvert": "径向反转",
"spinSpeed": "旋转速度",
"radius": "半径",
"reflexMirror": "反射镜",
"reflexFit": "反射贴合",
"reflexRatio": "反射比率",
"reflexAlpha": "反射Alpha",
"reflexBrightness": "反射亮度",
"mirror": "镜像",
"lowResolution": "低分辨率",
"splitGradient": "渐变分割",
"showScaleX": "显示比例尺 X",
"noteLabels": "笔记标签",
"showScaleY": "显示比例尺 Y",
"alphaBars": "Alpha 条",
"ansiBands": "ANSI 频段",
"ledBars": "LED 灯条",
"trueLeds": "真正的LED",
"lumiBars": "Lumi 条",
"outlineBars": "轮廓栏",
"roundBars": "圆条"
},
"queryBuilder": {
"standardTags": "标准标签",
"customTags": "自定义标签"
"miscellaneousSettings": "杂项设置"
}
}
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More