mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-04-20 00:55:13 +01:00
Compare commits
105 Commits
master
...
explicit-l
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8dbec6f4f5 | ||
|
|
f6709a69e7 | ||
|
|
4cdd8c8233 | ||
|
|
6e60634c9f | ||
|
|
12c5d6b636 | ||
|
|
b617c62f8e | ||
|
|
035b5895b0 | ||
|
|
22da5187c8 | ||
|
|
5804d6840c | ||
|
|
b50ce1ad6b | ||
|
|
481ee03f35 | ||
|
|
d91adb5d54 | ||
|
|
ef7f138a4e | ||
|
|
2e8d9a311b | ||
|
|
4c5a3fbff3 | ||
|
|
636908fc4d | ||
|
|
997362fc97 | ||
|
|
c5147341e3 | ||
|
|
ca33bcebf0 | ||
|
|
d32f487e8e | ||
|
|
fb65f8f853 | ||
|
|
2a0b90e385 | ||
|
|
dde70fd8a2 | ||
|
|
98d1d0cb35 | ||
|
|
ba76a8f3ad | ||
|
|
8cd5652157 | ||
|
|
8aff4227d9 | ||
|
|
026f7472cb | ||
|
|
daca285568 | ||
|
|
fbb9a0b2c7 | ||
|
|
29b3aa8543 | ||
|
|
94f3725208 | ||
|
|
0ee81e87be | ||
|
|
c491a918c2 | ||
|
|
1e7e46cb82 | ||
|
|
5ae444d96d | ||
|
|
ee7ad83427 | ||
|
|
921d7d3364 | ||
|
|
f8e012582a | ||
|
|
def5956cd1 | ||
|
|
abfbaca336 | ||
|
|
6566188e45 | ||
|
|
078f9584ed | ||
|
|
ee34c75386 | ||
|
|
e8150428b6 | ||
|
|
4b38e35bbb | ||
|
|
435bb14bb2 | ||
|
|
2e5ced5098 | ||
|
|
f4a846aa4d | ||
|
|
7c1063177f | ||
|
|
5878b1ffc5 | ||
|
|
3c3c2aee0d | ||
|
|
511223aac4 | ||
|
|
3b2d64995a | ||
|
|
13c4517a66 | ||
|
|
177b6464ca | ||
|
|
5a9a8363f4 | ||
|
|
49efd68fc7 | ||
|
|
90a8a26c6e | ||
|
|
002c83e6f5 | ||
|
|
7222910b05 | ||
|
|
097cb87f6f | ||
|
|
91c3b1617e | ||
|
|
8f71922734 | ||
|
|
d140630208 | ||
|
|
63a3e55297 | ||
|
|
c2e5081d64 | ||
|
|
4187c6f620 | ||
|
|
e7dbb3afec | ||
|
|
f994dd6211 | ||
|
|
da254ee968 | ||
|
|
4ad3141875 | ||
|
|
b5f0199a25 | ||
|
|
6bf88c049e | ||
|
|
40a33da2a5 | ||
|
|
3596fc0693 | ||
|
|
93824dad97 | ||
|
|
e5656af1f2 | ||
|
|
c127c10458 | ||
|
|
7d1824ea27 | ||
|
|
2966d27c97 | ||
|
|
618ec4543e | ||
|
|
0e4031ae52 | ||
|
|
442af96ed9 | ||
|
|
a305204cfa | ||
|
|
75f472e6a7 | ||
|
|
cc32e8f7cb | ||
|
|
14b3085ff1 | ||
|
|
5691eee4f1 | ||
|
|
1520a697ad | ||
|
|
81b8b0ca4a | ||
|
|
ac3fa3c376 | ||
|
|
7a1c1cd342 | ||
|
|
70c32a26fa | ||
|
|
2b94bb54aa | ||
|
|
0a6e8146be | ||
|
|
305b0fdca3 | ||
|
|
d738386fe2 | ||
|
|
ca830d5be7 | ||
|
|
a5bc4524d8 | ||
|
|
175ee12bbc | ||
|
|
a725220c21 | ||
|
|
a245605152 | ||
|
|
f4a53209f4 | ||
|
|
877251bcae |
@@ -3,7 +3,7 @@
|
|||||||
"isRoot": true,
|
"isRoot": true,
|
||||||
"tools": {
|
"tools": {
|
||||||
"dotnet-ef": {
|
"dotnet-ef": {
|
||||||
"version": "10.0.6",
|
"version": "9.0.11",
|
||||||
"commands": [
|
"commands": [
|
||||||
"dotnet-ef"
|
"dotnet-ef"
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,31 +1,17 @@
|
|||||||
{
|
{
|
||||||
"name": "Development Jellyfin Server",
|
"name": "Development Jellyfin Server",
|
||||||
"image": "mcr.microsoft.com/devcontainers/dotnet:10.0-noble",
|
"image": "mcr.microsoft.com/devcontainers/dotnet:9.0-bookworm",
|
||||||
"service": "app",
|
"service": "app",
|
||||||
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
|
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
|
||||||
// restores nuget packages, installs the dotnet workloads and installs the dev https certificate
|
// restores nuget packages, installs the dotnet workloads and installs the dev https certificate
|
||||||
"postStartCommand": "sudo dotnet restore; sudo dotnet workload update; sudo dotnet dev-certs https --trust; sudo bash \"./.devcontainer/install-ffmpeg.sh\"",
|
"postStartCommand": "sudo dotnet restore; sudo dotnet workload update; sudo dotnet dev-certs https --trust; sudo bash \"./.devcontainer/install-ffmpeg.sh\"",
|
||||||
// The previous way of installing extensions via the vs command dont work on selfhosted devcontainers
|
// reads the extensions list and installs them
|
||||||
"customizations": {
|
"postAttachCommand": "cat .vscode/extensions.json | jq -r .recommendations[] | xargs -n 1 code --install-extension",
|
||||||
"vscode": {
|
|
||||||
"extensions": [
|
|
||||||
"ms-dotnettools.csharp",
|
|
||||||
"editorconfig.editorconfig",
|
|
||||||
"github.vscode-github-actions",
|
|
||||||
"ms-dotnettools.vscode-dotnet-runtime",
|
|
||||||
"ms-dotnettools.csdevkit",
|
|
||||||
"alexcvzz.vscode-sqlite",
|
|
||||||
"streetsidesoftware.code-spell-checker",
|
|
||||||
"eamodio.gitlens",
|
|
||||||
"redhat.vscode-xml"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"features": {
|
"features": {
|
||||||
"ghcr.io/devcontainers/features/dotnet:2": {
|
"ghcr.io/devcontainers/features/dotnet:2": {
|
||||||
"version": "none",
|
"version": "none",
|
||||||
"dotnetRuntimeVersions": "10.0",
|
"dotnetRuntimeVersions": "9.0",
|
||||||
"aspNetCoreRuntimeVersions": "10.0"
|
"aspNetCoreRuntimeVersions": "9.0"
|
||||||
},
|
},
|
||||||
"ghcr.io/devcontainers-extra/features/apt-packages:1": {
|
"ghcr.io/devcontainers-extra/features/apt-packages:1": {
|
||||||
"preserve_apt_list": false,
|
"preserve_apt_list": false,
|
||||||
|
|||||||
@@ -379,9 +379,6 @@ dotnet_diagnostic.CA1720.severity = suggestion
|
|||||||
# disable warning CA1724: Type names should not match namespaces
|
# disable warning CA1724: Type names should not match namespaces
|
||||||
dotnet_diagnostic.CA1724.severity = suggestion
|
dotnet_diagnostic.CA1724.severity = suggestion
|
||||||
|
|
||||||
# disable warning CA1873: Avoid potentially expensive logging
|
|
||||||
dotnet_diagnostic.CA1873.severity = suggestion
|
|
||||||
|
|
||||||
# disable warning CA1805: Do not initialize unnecessarily
|
# disable warning CA1805: Do not initialize unnecessarily
|
||||||
dotnet_diagnostic.CA1805.severity = suggestion
|
dotnet_diagnostic.CA1805.severity = suggestion
|
||||||
|
|
||||||
@@ -403,10 +400,6 @@ dotnet_diagnostic.CA1861.severity = suggestion
|
|||||||
# disable warning CA2000: Dispose objects before losing scope
|
# disable warning CA2000: Dispose objects before losing scope
|
||||||
dotnet_diagnostic.CA2000.severity = suggestion
|
dotnet_diagnostic.CA2000.severity = suggestion
|
||||||
|
|
||||||
# TODO: Reevaluate when false positives are fixed: https://github.com/dotnet/roslyn-analyzers/issues/7699
|
|
||||||
# disable warning CA2025: Do not pass 'IDisposable' instances into unawaited tasks
|
|
||||||
dotnet_diagnostic.CA2025.severity = suggestion
|
|
||||||
|
|
||||||
# disable warning CA2253: Named placeholders should not be numeric values
|
# disable warning CA2253: Named placeholders should not be numeric values
|
||||||
dotnet_diagnostic.CA2253.severity = suggestion
|
dotnet_diagnostic.CA2253.severity = suggestion
|
||||||
|
|
||||||
|
|||||||
15
.github/CODEOWNERS
vendored
15
.github/CODEOWNERS
vendored
@@ -1,11 +1,4 @@
|
|||||||
# Joshua must review all changes to bump_version and any files it touches
|
# Joshua must review all changes to deployment and build.sh
|
||||||
bump_version @joshuaboniface
|
.ci/* @joshuaboniface
|
||||||
.github/ISSUE_TEMPLATE @joshuaboniface
|
deployment/* @joshuaboniface
|
||||||
MediaBrowser.Common/MediaBrowser.Common.csproj @joshuaboniface
|
build.sh @joshuaboniface
|
||||||
Jellyfin.Data/Jellyfin.Data.csproj @joshuaboniface
|
|
||||||
MediaBrowser.Controller/MediaBrowser.Controller.csproj @joshuaboniface
|
|
||||||
MediaBrowser.Model/MediaBrowser.Model.csproj @joshuaboniface
|
|
||||||
Emby.Naming/Emby.Naming.csproj @joshuaboniface
|
|
||||||
src/Jellyfin.Extensions/Jellyfin.Extensions.csproj @joshuaboniface
|
|
||||||
# Core must approve all changes within the repo config
|
|
||||||
.github/ @jellyfin/core
|
|
||||||
|
|||||||
14
.github/ISSUE_TEMPLATE/issue report.yml
vendored
14
.github/ISSUE_TEMPLATE/issue report.yml
vendored
@@ -87,9 +87,7 @@ body:
|
|||||||
label: Jellyfin Server version
|
label: Jellyfin Server version
|
||||||
description: What version of Jellyfin are you using?
|
description: What version of Jellyfin are you using?
|
||||||
options:
|
options:
|
||||||
- 10.11.8
|
- 10.10.0+
|
||||||
- 10.11.7
|
|
||||||
- 10.11.6
|
|
||||||
- Master
|
- Master
|
||||||
- Unstable
|
- Unstable
|
||||||
- Older*
|
- Older*
|
||||||
@@ -138,14 +136,13 @@ body:
|
|||||||
- **FFmpeg Version**: [e.g. 5.1.2-Jellyfin]
|
- **FFmpeg Version**: [e.g. 5.1.2-Jellyfin]
|
||||||
- **Playback**: [Direct Play, Remux, Direct Stream, Transcode]
|
- **Playback**: [Direct Play, Remux, Direct Stream, Transcode]
|
||||||
- **Hardware Acceleration**: [e.g. none, VAAPI, NVENC, etc.]
|
- **Hardware Acceleration**: [e.g. none, VAAPI, NVENC, etc.]
|
||||||
- **CPU Model**: [e.g. AMD Ryzen 5 9600X, Intel Core i7-8565U, etc.]
|
|
||||||
- **GPU Model**: [e.g. none, UHD630, GTX1050, etc.]
|
- **GPU Model**: [e.g. none, UHD630, GTX1050, etc.]
|
||||||
- **Installed Plugins**: [e.g. none, Fanart, Anime, etc.]
|
- **Installed Plugins**: [e.g. none, Fanart, Anime, etc.]
|
||||||
- **Reverse Proxy**: [e.g. none, nginx, apache, etc.]
|
- **Reverse Proxy**: [e.g. none, nginx, apache, etc.]
|
||||||
- **Base URL**: [e.g. none, yes: /example]
|
- **Base URL**: [e.g. none, yes: /example]
|
||||||
- **Networking**: [e.g. Host, Bridge/NAT]
|
- **Networking**: [e.g. Host, Bridge/NAT]
|
||||||
- **Jellyfin Data Storage & Filesystem**: [e.g. local SATA SSD - ext4, local HDD - NTFS]
|
- **Jellyfin Data Storage**: [e.g. local SATA SSD, local HDD]
|
||||||
- **Media Storage & Filesystem**: [e.g. Local HDD - ext4, SMB Share]
|
- **Media Storage**: [e.g. Local HDD, SMB Share]
|
||||||
- **External Integrations**: [e.g. Jellystat, Jellyseerr]
|
- **External Integrations**: [e.g. Jellystat, Jellyseerr]
|
||||||
value: |
|
value: |
|
||||||
- OS:
|
- OS:
|
||||||
@@ -156,14 +153,13 @@ body:
|
|||||||
- FFmpeg Version:
|
- FFmpeg Version:
|
||||||
- Playback Method:
|
- Playback Method:
|
||||||
- Hardware Acceleration:
|
- Hardware Acceleration:
|
||||||
- CPU Model:
|
|
||||||
- GPU Model:
|
- GPU Model:
|
||||||
- Plugins:
|
- Plugins:
|
||||||
- Reverse Proxy:
|
- Reverse Proxy:
|
||||||
- Base URL:
|
- Base URL:
|
||||||
- Networking:
|
- Networking:
|
||||||
- Jellyfin Data Storage & Filesystem:
|
- Jellyfin Data Storage:
|
||||||
- Media Storage & Filesystem:
|
- Media Storage:
|
||||||
- External Integrations:
|
- External Integrations:
|
||||||
render: markdown
|
render: markdown
|
||||||
validations:
|
validations:
|
||||||
|
|||||||
19
.github/workflows/ci-codeql-analysis.yml
vendored
19
.github/workflows/ci-codeql-analysis.yml
vendored
@@ -8,10 +8,6 @@ on:
|
|||||||
schedule:
|
schedule:
|
||||||
- cron: '24 2 * * 4'
|
- cron: '24 2 * * 4'
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
security-events: write
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
analyze:
|
analyze:
|
||||||
name: Analyze
|
name: Analyze
|
||||||
@@ -24,21 +20,18 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||||
|
|
||||||
- name: Setup .NET
|
- name: Setup .NET
|
||||||
uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5.2.0
|
uses: actions/setup-dotnet@2016bd2012dba4e32de620c46fe006a3ac9f0602 # v5.0.1
|
||||||
with:
|
with:
|
||||||
dotnet-version: '10.0.x'
|
dotnet-version: '9.0.x'
|
||||||
|
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
|
uses: github/codeql-action/init@fe4161a26a8629af62121b670040955b330f9af2 # v4.31.6
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
queries: +security-extended
|
queries: +security-extended
|
||||||
|
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
|
uses: github/codeql-action/autobuild@fe4161a26a8629af62121b670040955b330f9af2 # v4.31.6
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
|
uses: github/codeql-action/analyze@fe4161a26a8629af62121b670040955b330f9af2 # v4.31.6
|
||||||
|
|||||||
22
.github/workflows/ci-compat.yml
vendored
22
.github/workflows/ci-compat.yml
vendored
@@ -11,22 +11,22 @@ jobs:
|
|||||||
permissions: read-all
|
permissions: read-all
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.pull_request.head.sha }}
|
ref: ${{ github.event.pull_request.head.sha }}
|
||||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
|
|
||||||
- name: Setup .NET
|
- name: Setup .NET
|
||||||
uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5.2.0
|
uses: actions/setup-dotnet@2016bd2012dba4e32de620c46fe006a3ac9f0602 # v5.0.1
|
||||||
with:
|
with:
|
||||||
dotnet-version: '10.0.x'
|
dotnet-version: '9.0.x'
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
dotnet build Jellyfin.Server -o ./out
|
dotnet build Jellyfin.Server -o ./out
|
||||||
|
|
||||||
- name: Upload Head
|
- name: Upload Head
|
||||||
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
|
||||||
with:
|
with:
|
||||||
name: abi-head
|
name: abi-head
|
||||||
retention-days: 14
|
retention-days: 14
|
||||||
@@ -40,16 +40,16 @@ jobs:
|
|||||||
permissions: read-all
|
permissions: read-all
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.pull_request.head.sha }}
|
ref: ${{ github.event.pull_request.head.sha }}
|
||||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Setup .NET
|
- name: Setup .NET
|
||||||
uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5.2.0
|
uses: actions/setup-dotnet@2016bd2012dba4e32de620c46fe006a3ac9f0602 # v5.0.1
|
||||||
with:
|
with:
|
||||||
dotnet-version: '10.0.x'
|
dotnet-version: '9.0.x'
|
||||||
|
|
||||||
- name: Checkout common ancestor
|
- name: Checkout common ancestor
|
||||||
env:
|
env:
|
||||||
@@ -65,7 +65,7 @@ jobs:
|
|||||||
dotnet build Jellyfin.Server -o ./out
|
dotnet build Jellyfin.Server -o ./out
|
||||||
|
|
||||||
- name: Upload Head
|
- name: Upload Head
|
||||||
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
|
||||||
with:
|
with:
|
||||||
name: abi-base
|
name: abi-base
|
||||||
retention-days: 14
|
retention-days: 14
|
||||||
@@ -85,13 +85,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Download abi-head
|
- name: Download abi-head
|
||||||
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
||||||
with:
|
with:
|
||||||
name: abi-head
|
name: abi-head
|
||||||
path: abi-head
|
path: abi-head
|
||||||
|
|
||||||
- name: Download abi-base
|
- name: Download abi-base
|
||||||
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
||||||
with:
|
with:
|
||||||
name: abi-base
|
name: abi-base
|
||||||
path: abi-base
|
path: abi-base
|
||||||
@@ -106,7 +106,7 @@ jobs:
|
|||||||
{
|
{
|
||||||
echo 'body<<EOF'
|
echo 'body<<EOF'
|
||||||
for file in Jellyfin.Data.dll MediaBrowser.Common.dll MediaBrowser.Controller.dll MediaBrowser.Model.dll Emby.Naming.dll Jellyfin.Extensions.dll Jellyfin.MediaEncoding.Keyframes.dll Jellyfin.Database.Implementations.dll; do
|
for file in Jellyfin.Data.dll MediaBrowser.Common.dll MediaBrowser.Controller.dll MediaBrowser.Model.dll Emby.Naming.dll Jellyfin.Extensions.dll Jellyfin.MediaEncoding.Keyframes.dll Jellyfin.Database.Implementations.dll; do
|
||||||
COMPAT_OUTPUT="$( { apicompat --left ./abi-base/${file} --right ./abi-head/${file}; } 2>&1 || true )"
|
COMPAT_OUTPUT="$( { apicompat --left ./abi-base/${file} --right ./abi-head/${file}; } 2>&1 )"
|
||||||
if [ "APICompat ran successfully without finding any breaking changes." != "${COMPAT_OUTPUT}" ]; then
|
if [ "APICompat ran successfully without finding any breaking changes." != "${COMPAT_OUTPUT}" ]; then
|
||||||
printf "\n${file}\n${COMPAT_OUTPUT}\n"
|
printf "\n${file}\n${COMPAT_OUTPUT}\n"
|
||||||
fi
|
fi
|
||||||
|
|||||||
271
.github/workflows/ci-openapi.yml
vendored
Normal file
271
.github/workflows/ci-openapi.yml
vendored
Normal file
@@ -0,0 +1,271 @@
|
|||||||
|
name: OpenAPI
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
permissions: {}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
openapi-head:
|
||||||
|
name: OpenAPI - HEAD
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions: read-all
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.pull_request.head.sha }}
|
||||||
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
|
- name: Setup .NET
|
||||||
|
uses: actions/setup-dotnet@2016bd2012dba4e32de620c46fe006a3ac9f0602 # v5.0.1
|
||||||
|
with:
|
||||||
|
dotnet-version: '9.0.x'
|
||||||
|
- name: Generate openapi.json
|
||||||
|
run: dotnet test tests/Jellyfin.Server.Integration.Tests/Jellyfin.Server.Integration.Tests.csproj -c Release --filter "Jellyfin.Server.Integration.Tests.OpenApiSpecTests"
|
||||||
|
- name: Upload openapi.json
|
||||||
|
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
|
||||||
|
with:
|
||||||
|
name: openapi-head
|
||||||
|
retention-days: 14
|
||||||
|
if-no-files-found: error
|
||||||
|
path: tests/Jellyfin.Server.Integration.Tests/bin/Release/net9.0/openapi.json
|
||||||
|
|
||||||
|
openapi-base:
|
||||||
|
name: OpenAPI - BASE
|
||||||
|
if: ${{ github.base_ref != '' }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions: read-all
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.pull_request.head.sha }}
|
||||||
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Checkout common ancestor
|
||||||
|
env:
|
||||||
|
HEAD_REF: ${{ github.head_ref }}
|
||||||
|
run: |
|
||||||
|
git remote add upstream https://github.com/${{ github.event.pull_request.base.repo.full_name }}
|
||||||
|
git -c protocol.version=2 fetch --prune --progress --no-recurse-submodules upstream +refs/heads/*:refs/remotes/upstream/* +refs/tags/*:refs/tags/*
|
||||||
|
ANCESTOR_REF=$(git merge-base upstream/${{ github.base_ref }} origin/$HEAD_REF)
|
||||||
|
git checkout --progress --force $ANCESTOR_REF
|
||||||
|
- name: Setup .NET
|
||||||
|
uses: actions/setup-dotnet@2016bd2012dba4e32de620c46fe006a3ac9f0602 # v5.0.1
|
||||||
|
with:
|
||||||
|
dotnet-version: '9.0.x'
|
||||||
|
- name: Generate openapi.json
|
||||||
|
run: dotnet test tests/Jellyfin.Server.Integration.Tests/Jellyfin.Server.Integration.Tests.csproj -c Release --filter "Jellyfin.Server.Integration.Tests.OpenApiSpecTests"
|
||||||
|
- name: Upload openapi.json
|
||||||
|
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
|
||||||
|
with:
|
||||||
|
name: openapi-base
|
||||||
|
retention-days: 14
|
||||||
|
if-no-files-found: error
|
||||||
|
path: tests/Jellyfin.Server.Integration.Tests/bin/Release/net9.0/openapi.json
|
||||||
|
|
||||||
|
openapi-diff:
|
||||||
|
permissions:
|
||||||
|
pull-requests: write # to create or update comment (peter-evans/create-or-update-comment)
|
||||||
|
|
||||||
|
name: OpenAPI - Difference
|
||||||
|
if: ${{ github.event_name == 'pull_request' }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs:
|
||||||
|
- openapi-head
|
||||||
|
- openapi-base
|
||||||
|
steps:
|
||||||
|
- name: Download openapi-head
|
||||||
|
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
||||||
|
with:
|
||||||
|
name: openapi-head
|
||||||
|
path: openapi-head
|
||||||
|
- name: Download openapi-base
|
||||||
|
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
||||||
|
with:
|
||||||
|
name: openapi-base
|
||||||
|
path: openapi-base
|
||||||
|
- name: Workaround openapi-diff issue
|
||||||
|
run: |
|
||||||
|
sed -i 's/"allOf"/"oneOf"/g' openapi-head/openapi.json
|
||||||
|
sed -i 's/"allOf"/"oneOf"/g' openapi-base/openapi.json
|
||||||
|
- name: Calculate OpenAPI difference
|
||||||
|
uses: docker://openapitools/openapi-diff
|
||||||
|
continue-on-error: true
|
||||||
|
with:
|
||||||
|
args: --fail-on-changed --markdown openapi-changes.md openapi-base/openapi.json openapi-head/openapi.json
|
||||||
|
- id: read-diff
|
||||||
|
name: Read openapi-diff output
|
||||||
|
run: |
|
||||||
|
# Read and fix markdown
|
||||||
|
body=$(cat openapi-changes.md)
|
||||||
|
# Write to workflow summary
|
||||||
|
echo "$body" >> $GITHUB_STEP_SUMMARY
|
||||||
|
# Set ApiChanged var
|
||||||
|
if [ "$body" != '' ]; then
|
||||||
|
echo "ApiChanged=1" >> "$GITHUB_OUTPUT"
|
||||||
|
else
|
||||||
|
echo "ApiChanged=0" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
# Add header/footer for diff comment
|
||||||
|
echo '<!--openapi-diff-workflow-comment-->' > openapi-changes-reply.md
|
||||||
|
echo "<details>" >> openapi-changes-reply.md
|
||||||
|
echo "<summary>Changes in OpenAPI specification found. Expand to see details.</summary>" >> openapi-changes-reply.md
|
||||||
|
echo "" >> openapi-changes-reply.md
|
||||||
|
echo "$body" >> openapi-changes-reply.md
|
||||||
|
echo "" >> openapi-changes-reply.md
|
||||||
|
echo "</details>" >> openapi-changes-reply.md
|
||||||
|
- name: Find difference comment
|
||||||
|
uses: peter-evans/find-comment@b30e6a3c0ed37e7c023ccd3f1db5c6c0b0c23aad # v4.0.0
|
||||||
|
id: find-comment
|
||||||
|
with:
|
||||||
|
issue-number: ${{ github.event.pull_request.number }}
|
||||||
|
direction: last
|
||||||
|
body-includes: openapi-diff-workflow-comment
|
||||||
|
- name: Reply or edit difference comment (changed)
|
||||||
|
uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0
|
||||||
|
if: ${{ steps.read-diff.outputs.ApiChanged == '1' }}
|
||||||
|
with:
|
||||||
|
issue-number: ${{ github.event.pull_request.number }}
|
||||||
|
comment-id: ${{ steps.find-comment.outputs.comment-id }}
|
||||||
|
edit-mode: replace
|
||||||
|
body-path: openapi-changes-reply.md
|
||||||
|
- name: Edit difference comment (unchanged)
|
||||||
|
uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0
|
||||||
|
if: ${{ steps.read-diff.outputs.ApiChanged == '0' && steps.find-comment.outputs.comment-id != '' }}
|
||||||
|
with:
|
||||||
|
issue-number: ${{ github.event.pull_request.number }}
|
||||||
|
comment-id: ${{ steps.find-comment.outputs.comment-id }}
|
||||||
|
edit-mode: replace
|
||||||
|
body: |
|
||||||
|
<!--openapi-diff-workflow-comment-->
|
||||||
|
|
||||||
|
No changes to OpenAPI specification found. See history of this comment for previous changes.
|
||||||
|
|
||||||
|
publish-unstable:
|
||||||
|
name: OpenAPI - Publish Unstable Spec
|
||||||
|
if: ${{ github.event_name != 'pull_request' && !startsWith(github.ref, 'refs/tags/v') && contains(github.repository_owner, 'jellyfin') }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs:
|
||||||
|
- openapi-head
|
||||||
|
steps:
|
||||||
|
- name: Set unstable dated version
|
||||||
|
id: version
|
||||||
|
run: |-
|
||||||
|
echo "JELLYFIN_VERSION=$(date +'%Y%m%d%H%M%S')" >> $GITHUB_ENV
|
||||||
|
- name: Download openapi-head
|
||||||
|
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
||||||
|
with:
|
||||||
|
name: openapi-head
|
||||||
|
path: openapi-head
|
||||||
|
- name: Upload openapi.json (unstable) to repository server
|
||||||
|
uses: appleboy/scp-action@ff85246acaad7bdce478db94a363cd2bf7c90345 # v1.0.0
|
||||||
|
with:
|
||||||
|
host: "${{ secrets.REPO_HOST }}"
|
||||||
|
username: "${{ secrets.REPO_USER }}"
|
||||||
|
key: "${{ secrets.REPO_KEY }}"
|
||||||
|
source: openapi-head/openapi.json
|
||||||
|
strip_components: 1
|
||||||
|
target: "/srv/incoming/openapi/unstable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}"
|
||||||
|
- name: Move openapi.json (unstable) into place
|
||||||
|
uses: appleboy/ssh-action@823bd89e131d8d508129f9443cad5855e9ba96f0 # v1.2.4
|
||||||
|
with:
|
||||||
|
host: "${{ secrets.REPO_HOST }}"
|
||||||
|
username: "${{ secrets.REPO_USER }}"
|
||||||
|
key: "${{ secrets.REPO_KEY }}"
|
||||||
|
debug: false
|
||||||
|
script_stop: false
|
||||||
|
script: |
|
||||||
|
if ! test -d /run/workflows; then
|
||||||
|
sudo mkdir -p /run/workflows
|
||||||
|
sudo chown ${{ secrets.REPO_USER }} /run/workflows
|
||||||
|
fi
|
||||||
|
(
|
||||||
|
flock -x -w 300 200 || exit 1
|
||||||
|
TGT_DIR="/srv/repository/main/openapi"
|
||||||
|
LAST_SPEC="$( ls -lt ${TGT_DIR}/unstable/ | grep 'jellyfin-openapi' | head -1 | awk '{ print $NF }' )"
|
||||||
|
# If new and previous spec don't differ (diff retcode 0), remove incoming and finish
|
||||||
|
if diff /srv/incoming/openapi/unstable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}/openapi.json ${TGT_DIR}/unstable/${LAST_SPEC} &>/dev/null; then
|
||||||
|
rm -r /srv/incoming/openapi/unstable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
# Move new spec into place
|
||||||
|
sudo mv /srv/incoming/openapi/unstable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}/openapi.json ${TGT_DIR}/unstable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}.json
|
||||||
|
# Delete previous jellyfin-openapi-unstable_previous.json
|
||||||
|
sudo rm ${TGT_DIR}/jellyfin-openapi-unstable_previous.json
|
||||||
|
# Move current jellyfin-openapi-unstable.json symlink to jellyfin-openapi-unstable_previous.json
|
||||||
|
sudo mv ${TGT_DIR}/jellyfin-openapi-unstable.json ${TGT_DIR}/jellyfin-openapi-unstable_previous.json
|
||||||
|
# Create new jellyfin-openapi-unstable.json symlink
|
||||||
|
sudo ln -s unstable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}.json ${TGT_DIR}/jellyfin-openapi-unstable.json
|
||||||
|
# Check that the previous openapi unstable spec link is correct
|
||||||
|
if [[ "$( readlink ${TGT_DIR}/jellyfin-openapi-unstable_previous.json )" != "unstable/${LAST_SPEC}" ]]; then
|
||||||
|
sudo rm ${TGT_DIR}/jellyfin-openapi-unstable_previous.json
|
||||||
|
sudo ln -s unstable/${LAST_SPEC} ${TGT_DIR}/jellyfin-openapi-unstable_previous.json
|
||||||
|
fi
|
||||||
|
) 200>/run/workflows/openapi-unstable.lock
|
||||||
|
|
||||||
|
publish-stable:
|
||||||
|
name: OpenAPI - Publish Stable Spec
|
||||||
|
if: ${{ startsWith(github.ref, 'refs/tags/v') && contains(github.repository_owner, 'jellyfin') }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs:
|
||||||
|
- openapi-head
|
||||||
|
steps:
|
||||||
|
- name: Set version number
|
||||||
|
id: version
|
||||||
|
run: |-
|
||||||
|
echo "JELLYFIN_VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
|
||||||
|
- name: Download openapi-head
|
||||||
|
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
||||||
|
with:
|
||||||
|
name: openapi-head
|
||||||
|
path: openapi-head
|
||||||
|
- name: Upload openapi.json (stable) to repository server
|
||||||
|
uses: appleboy/scp-action@ff85246acaad7bdce478db94a363cd2bf7c90345 # v1.0.0
|
||||||
|
with:
|
||||||
|
host: "${{ secrets.REPO_HOST }}"
|
||||||
|
username: "${{ secrets.REPO_USER }}"
|
||||||
|
key: "${{ secrets.REPO_KEY }}"
|
||||||
|
source: openapi-head/openapi.json
|
||||||
|
strip_components: 1
|
||||||
|
target: "/srv/incoming/openapi/stable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}"
|
||||||
|
- name: Move openapi.json (stable) into place
|
||||||
|
uses: appleboy/ssh-action@823bd89e131d8d508129f9443cad5855e9ba96f0 # v1.2.4
|
||||||
|
with:
|
||||||
|
host: "${{ secrets.REPO_HOST }}"
|
||||||
|
username: "${{ secrets.REPO_USER }}"
|
||||||
|
key: "${{ secrets.REPO_KEY }}"
|
||||||
|
debug: false
|
||||||
|
script_stop: false
|
||||||
|
script: |
|
||||||
|
if ! test -d /run/workflows; then
|
||||||
|
sudo mkdir -p /run/workflows
|
||||||
|
sudo chown ${{ secrets.REPO_USER }} /run/workflows
|
||||||
|
fi
|
||||||
|
(
|
||||||
|
flock -x -w 300 200 || exit 1
|
||||||
|
TGT_DIR="/srv/repository/main/openapi"
|
||||||
|
LAST_SPEC="$( ls -lt ${TGT_DIR}/stable/ | grep 'jellyfin-openapi' | head -1 | awk '{ print $NF }' )"
|
||||||
|
# If new and previous spec don't differ (diff retcode 0), remove incoming and finish
|
||||||
|
if diff /srv/incoming/openapi/stable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}/openapi.json ${TGT_DIR}/stable/${LAST_SPEC} &>/dev/null; then
|
||||||
|
rm -r /srv/incoming/openapi/stable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
# Move new spec into place
|
||||||
|
sudo mv /srv/incoming/openapi/stable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}/openapi.json ${TGT_DIR}/stable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}.json
|
||||||
|
# Delete previous jellyfin-openapi-stable_previous.json
|
||||||
|
sudo rm ${TGT_DIR}/jellyfin-openapi-stable_previous.json
|
||||||
|
# Move current jellyfin-openapi-stable.json symlink to jellyfin-openapi-stable_previous.json
|
||||||
|
sudo mv ${TGT_DIR}/jellyfin-openapi-stable.json ${TGT_DIR}/jellyfin-openapi-stable_previous.json
|
||||||
|
# Create new jellyfin-openapi-stable.json symlink
|
||||||
|
sudo ln -s stable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}.json ${TGT_DIR}/jellyfin-openapi-stable.json
|
||||||
|
# Check that the previous openapi stable spec link is correct
|
||||||
|
if [[ "$( readlink ${TGT_DIR}/jellyfin-openapi-stable_previous.json )" != "stable/${LAST_SPEC}" ]]; then
|
||||||
|
sudo rm ${TGT_DIR}/jellyfin-openapi-stable_previous.json
|
||||||
|
sudo ln -s stable/${LAST_SPEC} ${TGT_DIR}/jellyfin-openapi-stable_previous.json
|
||||||
|
fi
|
||||||
|
) 200>/run/workflows/openapi-stable.lock
|
||||||
8
.github/workflows/ci-tests.yml
vendored
8
.github/workflows/ci-tests.yml
vendored
@@ -9,7 +9,7 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
SDK_VERSION: "10.0.x"
|
SDK_VERSION: "9.0.x"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
run-tests:
|
run-tests:
|
||||||
@@ -20,9 +20,9 @@ jobs:
|
|||||||
|
|
||||||
runs-on: "${{ matrix.os }}"
|
runs-on: "${{ matrix.os }}"
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||||
|
|
||||||
- uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5.2.0
|
- uses: actions/setup-dotnet@2016bd2012dba4e32de620c46fe006a3ac9f0602 # v5.0.1
|
||||||
with:
|
with:
|
||||||
dotnet-version: ${{ env.SDK_VERSION }}
|
dotnet-version: ${{ env.SDK_VERSION }}
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ jobs:
|
|||||||
--verbosity minimal
|
--verbosity minimal
|
||||||
|
|
||||||
- name: Merge code coverage results
|
- name: Merge code coverage results
|
||||||
uses: danielpalme/ReportGenerator-GitHub-Action@7ae927204961589fcb0b0be245c51fbbc87cbca2 # v5.5.5
|
uses: danielpalme/ReportGenerator-GitHub-Action@ee0ae774f6d3afedcbd1683c1ab21b83670bdf8e # v5.5.1
|
||||||
with:
|
with:
|
||||||
reports: "**/coverage.cobertura.xml"
|
reports: "**/coverage.cobertura.xml"
|
||||||
targetdir: "merged/"
|
targetdir: "merged/"
|
||||||
|
|||||||
11
.github/workflows/commands.yml
vendored
11
.github/workflows/commands.yml
vendored
@@ -24,7 +24,7 @@ jobs:
|
|||||||
reactions: '+1'
|
reactions: '+1'
|
||||||
|
|
||||||
- name: Checkout the latest code
|
- name: Checkout the latest code
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.JF_BOT_TOKEN }}
|
token: ${{ secrets.JF_BOT_TOKEN }}
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -36,23 +36,20 @@ jobs:
|
|||||||
|
|
||||||
rename:
|
rename:
|
||||||
name: Rename
|
name: Rename
|
||||||
if: contains(github.event.comment.body, '@jellyfin-bot rename')
|
if: contains(github.event.comment.body, '@jellyfin-bot rename') && github.event.comment.author_association == 'MEMBER'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: pull in script
|
- name: pull in script
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||||
with:
|
with:
|
||||||
repository: jellyfin/jellyfin-triage-script
|
repository: jellyfin/jellyfin-triage-script
|
||||||
|
|
||||||
- name: install python
|
- name: install python
|
||||||
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
|
||||||
with:
|
with:
|
||||||
python-version: '3.14'
|
python-version: '3.14'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
|
|
||||||
- name: install python packages
|
- name: install python packages
|
||||||
run: pip install -r rename/requirements.txt
|
run: pip install -r rename/requirements.txt
|
||||||
|
|
||||||
- name: run rename script
|
- name: run rename script
|
||||||
run: python3 rename.py
|
run: python3 rename.py
|
||||||
working-directory: ./rename
|
working-directory: ./rename
|
||||||
|
|||||||
2
.github/workflows/issue-stale.yml
vendored
2
.github/workflows/issue-stale.yml
vendored
@@ -16,7 +16,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: ${{ contains(github.repository, 'jellyfin/') }}
|
if: ${{ contains(github.repository, 'jellyfin/') }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0
|
- uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v10.1.1
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.JF_BOT_TOKEN }}
|
repo-token: ${{ secrets.JF_BOT_TOKEN }}
|
||||||
ascending: true
|
ascending: true
|
||||||
|
|||||||
7
.github/workflows/issue-template-check.yml
vendored
7
.github/workflows/issue-template-check.yml
vendored
@@ -10,19 +10,16 @@ jobs:
|
|||||||
issues: write
|
issues: write
|
||||||
steps:
|
steps:
|
||||||
- name: pull in script
|
- name: pull in script
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||||
with:
|
with:
|
||||||
repository: jellyfin/jellyfin-triage-script
|
repository: jellyfin/jellyfin-triage-script
|
||||||
|
|
||||||
- name: install python
|
- name: install python
|
||||||
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
|
||||||
with:
|
with:
|
||||||
python-version: '3.14'
|
python-version: '3.14'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
|
|
||||||
- name: install python packages
|
- name: install python packages
|
||||||
run: pip install -r main-repo-triage/requirements.txt
|
run: pip install -r main-repo-triage/requirements.txt
|
||||||
|
|
||||||
- name: check and comment issue
|
- name: check and comment issue
|
||||||
working-directory: ./main-repo-triage
|
working-directory: ./main-repo-triage
|
||||||
run: python3 single_issue_gha.py
|
run: python3 single_issue_gha.py
|
||||||
|
|||||||
44
.github/workflows/openapi-generate.yml
vendored
44
.github/workflows/openapi-generate.yml
vendored
@@ -1,44 +0,0 @@
|
|||||||
name: OpenAPI Generate
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
ref:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
repository:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
artifact:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
main:
|
|
||||||
name: Main
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout Repository
|
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
||||||
with:
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
|
|
||||||
- name: Configure .NET
|
|
||||||
uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5.2.0
|
|
||||||
with:
|
|
||||||
dotnet-version: '10.0.x'
|
|
||||||
|
|
||||||
- name: Create File
|
|
||||||
run: dotnet test tests/Jellyfin.Server.Integration.Tests/Jellyfin.Server.Integration.Tests.csproj -c Release --filter Jellyfin.Server.Integration.Tests.OpenApiSpecTests
|
|
||||||
|
|
||||||
- name: Upload Artifact
|
|
||||||
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
||||||
with:
|
|
||||||
name: ${{ inputs.artifact }}
|
|
||||||
path: tests/Jellyfin.Server.Integration.Tests/bin/Release/net10.0/openapi.json
|
|
||||||
retention-days: 14
|
|
||||||
if-no-files-found: error
|
|
||||||
140
.github/workflows/openapi-merge.yml
vendored
140
.github/workflows/openapi-merge.yml
vendored
@@ -1,140 +0,0 @@
|
|||||||
name: OpenAPI Publish
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
tags:
|
|
||||||
- 'v*'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish-openapi:
|
|
||||||
name: OpenAPI - Publish Artifact
|
|
||||||
uses: ./.github/workflows/openapi-generate.yml
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
with:
|
|
||||||
ref: ${{ github.sha }}
|
|
||||||
repository: ${{ github.repository }}
|
|
||||||
artifact: openapi-head
|
|
||||||
|
|
||||||
publish-unstable:
|
|
||||||
name: OpenAPI - Publish Unstable Spec
|
|
||||||
if: ${{ github.event_name != 'pull_request' && !startsWith(github.ref, 'refs/tags/v') && contains(github.repository_owner, 'jellyfin') }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs:
|
|
||||||
- publish-openapi
|
|
||||||
steps:
|
|
||||||
- name: Set unstable dated version
|
|
||||||
id: version
|
|
||||||
run: |-
|
|
||||||
echo "JELLYFIN_VERSION=$(date +'%Y%m%d%H%M%S')" >> $GITHUB_ENV
|
|
||||||
- name: Download openapi-head
|
|
||||||
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
||||||
with:
|
|
||||||
name: openapi-head
|
|
||||||
path: openapi-head
|
|
||||||
- name: Upload openapi.json (unstable) to repository server
|
|
||||||
uses: appleboy/scp-action@ff85246acaad7bdce478db94a363cd2bf7c90345 # v1.0.0
|
|
||||||
with:
|
|
||||||
host: "${{ secrets.REPO_HOST }}"
|
|
||||||
username: "${{ secrets.REPO_USER }}"
|
|
||||||
key: "${{ secrets.REPO_KEY }}"
|
|
||||||
source: openapi-head/openapi.json
|
|
||||||
strip_components: 1
|
|
||||||
target: "/srv/incoming/openapi/unstable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}"
|
|
||||||
- name: Move openapi.json (unstable) into place
|
|
||||||
uses: appleboy/ssh-action@0ff4204d59e8e51228ff73bce53f80d53301dee2 # v1.2.5
|
|
||||||
with:
|
|
||||||
host: "${{ secrets.REPO_HOST }}"
|
|
||||||
username: "${{ secrets.REPO_USER }}"
|
|
||||||
key: "${{ secrets.REPO_KEY }}"
|
|
||||||
debug: false
|
|
||||||
script: |
|
|
||||||
if ! test -d /run/workflows; then
|
|
||||||
sudo mkdir -p /run/workflows
|
|
||||||
sudo chown ${{ secrets.REPO_USER }} /run/workflows
|
|
||||||
fi
|
|
||||||
(
|
|
||||||
flock -x -w 300 200 || exit 1
|
|
||||||
TGT_DIR="/srv/repository/main/openapi"
|
|
||||||
LAST_SPEC="$( ls -lt ${TGT_DIR}/unstable/ | grep 'jellyfin-openapi' | head -1 | awk '{ print $NF }' )"
|
|
||||||
# If new and previous spec don't differ (diff retcode 0), remove incoming and finish
|
|
||||||
if diff /srv/incoming/openapi/unstable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}/openapi.json ${TGT_DIR}/unstable/${LAST_SPEC} &>/dev/null; then
|
|
||||||
rm -r /srv/incoming/openapi/unstable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
# Move new spec into place
|
|
||||||
sudo mv /srv/incoming/openapi/unstable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}/openapi.json ${TGT_DIR}/unstable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}.json
|
|
||||||
# Delete previous jellyfin-openapi-unstable_previous.json
|
|
||||||
sudo rm ${TGT_DIR}/jellyfin-openapi-unstable_previous.json
|
|
||||||
# Move current jellyfin-openapi-unstable.json symlink to jellyfin-openapi-unstable_previous.json
|
|
||||||
sudo mv ${TGT_DIR}/jellyfin-openapi-unstable.json ${TGT_DIR}/jellyfin-openapi-unstable_previous.json
|
|
||||||
# Create new jellyfin-openapi-unstable.json symlink
|
|
||||||
sudo ln -s unstable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}.json ${TGT_DIR}/jellyfin-openapi-unstable.json
|
|
||||||
# Check that the previous openapi unstable spec link is correct
|
|
||||||
if [[ "$( readlink ${TGT_DIR}/jellyfin-openapi-unstable_previous.json )" != "unstable/${LAST_SPEC}" ]]; then
|
|
||||||
sudo rm ${TGT_DIR}/jellyfin-openapi-unstable_previous.json
|
|
||||||
sudo ln -s unstable/${LAST_SPEC} ${TGT_DIR}/jellyfin-openapi-unstable_previous.json
|
|
||||||
fi
|
|
||||||
) 200>/run/workflows/openapi-unstable.lock
|
|
||||||
|
|
||||||
publish-stable:
|
|
||||||
name: OpenAPI - Publish Stable Spec
|
|
||||||
if: ${{ startsWith(github.ref, 'refs/tags/v') && contains(github.repository_owner, 'jellyfin') }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs:
|
|
||||||
- publish-openapi
|
|
||||||
steps:
|
|
||||||
- name: Set version number
|
|
||||||
id: version
|
|
||||||
run: |-
|
|
||||||
echo "JELLYFIN_VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
|
|
||||||
- name: Download openapi-head
|
|
||||||
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
||||||
with:
|
|
||||||
name: openapi-head
|
|
||||||
path: openapi-head
|
|
||||||
- name: Upload openapi.json (stable) to repository server
|
|
||||||
uses: appleboy/scp-action@ff85246acaad7bdce478db94a363cd2bf7c90345 # v1.0.0
|
|
||||||
with:
|
|
||||||
host: "${{ secrets.REPO_HOST }}"
|
|
||||||
username: "${{ secrets.REPO_USER }}"
|
|
||||||
key: "${{ secrets.REPO_KEY }}"
|
|
||||||
source: openapi-head/openapi.json
|
|
||||||
strip_components: 1
|
|
||||||
target: "/srv/incoming/openapi/stable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}"
|
|
||||||
- name: Move openapi.json (stable) into place
|
|
||||||
uses: appleboy/ssh-action@0ff4204d59e8e51228ff73bce53f80d53301dee2 # v1.2.5
|
|
||||||
with:
|
|
||||||
host: "${{ secrets.REPO_HOST }}"
|
|
||||||
username: "${{ secrets.REPO_USER }}"
|
|
||||||
key: "${{ secrets.REPO_KEY }}"
|
|
||||||
debug: false
|
|
||||||
script: |
|
|
||||||
if ! test -d /run/workflows; then
|
|
||||||
sudo mkdir -p /run/workflows
|
|
||||||
sudo chown ${{ secrets.REPO_USER }} /run/workflows
|
|
||||||
fi
|
|
||||||
(
|
|
||||||
flock -x -w 300 200 || exit 1
|
|
||||||
TGT_DIR="/srv/repository/main/openapi"
|
|
||||||
LAST_SPEC="$( ls -lt ${TGT_DIR}/stable/ | grep 'jellyfin-openapi' | head -1 | awk '{ print $NF }' )"
|
|
||||||
# If new and previous spec don't differ (diff retcode 0), remove incoming and finish
|
|
||||||
if diff /srv/incoming/openapi/stable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}/openapi.json ${TGT_DIR}/stable/${LAST_SPEC} &>/dev/null; then
|
|
||||||
rm -r /srv/incoming/openapi/stable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
# Move new spec into place
|
|
||||||
sudo mv /srv/incoming/openapi/stable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}/openapi.json ${TGT_DIR}/stable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}.json
|
|
||||||
# Delete previous jellyfin-openapi-stable_previous.json
|
|
||||||
sudo rm ${TGT_DIR}/jellyfin-openapi-stable_previous.json
|
|
||||||
# Move current jellyfin-openapi-stable.json symlink to jellyfin-openapi-stable_previous.json
|
|
||||||
sudo mv ${TGT_DIR}/jellyfin-openapi-stable.json ${TGT_DIR}/jellyfin-openapi-stable_previous.json
|
|
||||||
# Create new jellyfin-openapi-stable.json symlink
|
|
||||||
sudo ln -s stable/jellyfin-openapi-${{ env.JELLYFIN_VERSION }}.json ${TGT_DIR}/jellyfin-openapi-stable.json
|
|
||||||
# Check that the previous openapi stable spec link is correct
|
|
||||||
if [[ "$( readlink ${TGT_DIR}/jellyfin-openapi-stable_previous.json )" != "stable/${LAST_SPEC}" ]]; then
|
|
||||||
sudo rm ${TGT_DIR}/jellyfin-openapi-stable_previous.json
|
|
||||||
sudo ln -s stable/${LAST_SPEC} ${TGT_DIR}/jellyfin-openapi-stable_previous.json
|
|
||||||
fi
|
|
||||||
) 200>/run/workflows/openapi-stable.lock
|
|
||||||
80
.github/workflows/openapi-pull-request.yml
vendored
80
.github/workflows/openapi-pull-request.yml
vendored
@@ -1,80 +0,0 @@
|
|||||||
name: OpenAPI Check
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ancestor:
|
|
||||||
name: Common Ancestor
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
outputs:
|
|
||||||
base_ref: ${{ steps.ancestor.outputs.base_ref }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout Repository
|
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
||||||
with:
|
|
||||||
ref: ${{ github.event.pull_request.head.sha }}
|
|
||||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: Search History
|
|
||||||
id: ancestor
|
|
||||||
run: |
|
|
||||||
git remote add upstream https://github.com/${{ github.event.pull_request.base.repo.full_name }}
|
|
||||||
git fetch --prune --progress --no-recurse-submodules upstream +refs/heads/*:refs/remotes/upstream/* +refs/tags/*:refs/tags/*
|
|
||||||
|
|
||||||
ANCESTOR_REF=$(git merge-base upstream/${{ github.base_ref }} HEAD)
|
|
||||||
|
|
||||||
echo "ref: ${ANCESTOR_REF}"
|
|
||||||
|
|
||||||
echo "base_ref=${ANCESTOR_REF}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
head:
|
|
||||||
name: Head Artifact
|
|
||||||
uses: ./.github/workflows/openapi-generate.yml
|
|
||||||
with:
|
|
||||||
ref: ${{ github.event.pull_request.head.sha }}
|
|
||||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
|
||||||
artifact: openapi-head
|
|
||||||
|
|
||||||
base:
|
|
||||||
name: Base Artifact
|
|
||||||
uses: ./.github/workflows/openapi-generate.yml
|
|
||||||
needs:
|
|
||||||
- ancestor
|
|
||||||
with:
|
|
||||||
ref: ${{ needs.ancestor.outputs.base_ref }}
|
|
||||||
repository: ${{ github.event.pull_request.base.repo.full_name }}
|
|
||||||
artifact: openapi-base
|
|
||||||
|
|
||||||
diff:
|
|
||||||
name: Generate Report
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs:
|
|
||||||
- head
|
|
||||||
- base
|
|
||||||
steps:
|
|
||||||
- name: Download Head
|
|
||||||
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
||||||
with:
|
|
||||||
name: openapi-head
|
|
||||||
path: openapi-head
|
|
||||||
- name: Download Base
|
|
||||||
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
||||||
with:
|
|
||||||
name: openapi-base
|
|
||||||
path: openapi-base
|
|
||||||
- name: Detect Changes
|
|
||||||
id: openapi-diff
|
|
||||||
run: |
|
|
||||||
sed -i 's:allOf:oneOf:g' openapi-head/openapi.json
|
|
||||||
sed -i 's:allOf:oneOf:g' openapi-base/openapi.json
|
|
||||||
|
|
||||||
mkdir -p /tmp/openapi-report
|
|
||||||
mv openapi-head/openapi.json /tmp/openapi-report/head.json
|
|
||||||
mv openapi-base/openapi.json /tmp/openapi-report/base.json
|
|
||||||
|
|
||||||
docker run -v /tmp/openapi-report:/data openapitools/openapi-diff:2.1.6 /data/base.json /data/head.json --state -l ERROR --markdown /data/openapi-report.md
|
|
||||||
- name: Upload Artifact
|
|
||||||
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
||||||
with:
|
|
||||||
name: openapi-report
|
|
||||||
path: /tmp/openapi-report/openapi-report.md
|
|
||||||
59
.github/workflows/openapi-workflow-run.yml
vendored
59
.github/workflows/openapi-workflow-run.yml
vendored
@@ -1,59 +0,0 @@
|
|||||||
name: OpenAPI Report
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_run:
|
|
||||||
workflows:
|
|
||||||
- OpenAPI Check
|
|
||||||
types:
|
|
||||||
- completed
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
metadata:
|
|
||||||
name: Generate Metadata
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
|
||||||
outputs:
|
|
||||||
pr_number: ${{ steps.pr_number.outputs.pr_number }}
|
|
||||||
steps:
|
|
||||||
- name: Get Pull Request Number
|
|
||||||
id: pr_number
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
|
|
||||||
run: |
|
|
||||||
API_RESPONSE=$(gh pr list --repo "${GITHUB_REPOSITORY}" --search "${HEAD_SHA}" --state open --json number)
|
|
||||||
PR_NUMBER=$(echo "${API_RESPONSE}" | jq '.[0].number')
|
|
||||||
|
|
||||||
echo "repository: ${GITHUB_REPOSITORY}"
|
|
||||||
echo "sha: ${HEAD_SHA}"
|
|
||||||
echo "response: ${API_RESPONSE}"
|
|
||||||
echo "pr: ${PR_NUMBER}"
|
|
||||||
|
|
||||||
echo "pr_number=${PR_NUMBER}" >> "${GITHUB_OUTPUT}"
|
|
||||||
|
|
||||||
comment:
|
|
||||||
name: Pull Request Comment
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
|
||||||
needs:
|
|
||||||
- metadata
|
|
||||||
permissions:
|
|
||||||
pull-requests: write
|
|
||||||
actions: read
|
|
||||||
contents: read
|
|
||||||
steps:
|
|
||||||
- name: Download OpenAPI Report
|
|
||||||
id: download_report
|
|
||||||
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
||||||
with:
|
|
||||||
name: openapi-report
|
|
||||||
path: openapi-report
|
|
||||||
run-id: ${{ github.event.workflow_run.id }}
|
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
- name: Push Comment
|
|
||||||
uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.JF_BOT_TOKEN }}
|
|
||||||
file-path: ${{ steps.download_report.outputs.download-path }}/openapi-report.md
|
|
||||||
pr-number: ${{ needs.metadata.outputs.pr_number }}
|
|
||||||
comment-tag: openapi-report
|
|
||||||
1
.github/workflows/project-automation.yml
vendored
1
.github/workflows/project-automation.yml
vendored
@@ -21,7 +21,6 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
project: Current Release
|
project: Current Release
|
||||||
action: delete
|
action: delete
|
||||||
column: In progress
|
|
||||||
repo-token: ${{ secrets.JF_BOT_TOKEN }}
|
repo-token: ${{ secrets.JF_BOT_TOKEN }}
|
||||||
|
|
||||||
- name: Add to 'Release Next' project
|
- name: Add to 'Release Next' project
|
||||||
|
|||||||
2
.github/workflows/pull-request-stale.yaml
vendored
2
.github/workflows/pull-request-stale.yaml
vendored
@@ -15,7 +15,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: ${{ contains(github.repository, 'jellyfin/') }}
|
if: ${{ contains(github.repository, 'jellyfin/') }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0
|
- uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v10.1.1
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.JF_BOT_TOKEN }}
|
repo-token: ${{ secrets.JF_BOT_TOKEN }}
|
||||||
ascending: true
|
ascending: true
|
||||||
|
|||||||
6
.github/workflows/release-bump-version.yaml
vendored
6
.github/workflows/release-bump-version.yaml
vendored
@@ -28,12 +28,12 @@ jobs:
|
|||||||
timeoutSeconds: 3600
|
timeoutSeconds: 3600
|
||||||
|
|
||||||
- name: Setup YQ
|
- name: Setup YQ
|
||||||
uses: chrisdickinson/setup-yq@fa3192edd79d6eb0e4e12de8dde3a0c26f2b853b # latest
|
uses: chrisdickinson/setup-yq@latest
|
||||||
with:
|
with:
|
||||||
yq-version: v4.9.8
|
yq-version: v4.9.8
|
||||||
|
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||||
with:
|
with:
|
||||||
ref: ${{ env.TAG_BRANCH }}
|
ref: ${{ env.TAG_BRANCH }}
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ jobs:
|
|||||||
NEXT_VERSION: ${{ github.event.inputs.NEXT_VERSION }}
|
NEXT_VERSION: ${{ github.event.inputs.NEXT_VERSION }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||||
with:
|
with:
|
||||||
ref: ${{ env.TAG_BRANCH }}
|
ref: ${{ env.TAG_BRANCH }}
|
||||||
|
|
||||||
|
|||||||
6
.vscode/launch.json
vendored
6
.vscode/launch.json
vendored
@@ -6,7 +6,7 @@
|
|||||||
"type": "coreclr",
|
"type": "coreclr",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"preLaunchTask": "build",
|
"preLaunchTask": "build",
|
||||||
"program": "${workspaceFolder}/Jellyfin.Server/bin/Debug/net10.0/jellyfin.dll",
|
"program": "${workspaceFolder}/Jellyfin.Server/bin/Debug/net9.0/jellyfin.dll",
|
||||||
"args": [],
|
"args": [],
|
||||||
"cwd": "${workspaceFolder}/Jellyfin.Server",
|
"cwd": "${workspaceFolder}/Jellyfin.Server",
|
||||||
"console": "internalConsole",
|
"console": "internalConsole",
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
"type": "coreclr",
|
"type": "coreclr",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"preLaunchTask": "build",
|
"preLaunchTask": "build",
|
||||||
"program": "${workspaceFolder}/Jellyfin.Server/bin/Debug/net10.0/jellyfin.dll",
|
"program": "${workspaceFolder}/Jellyfin.Server/bin/Debug/net9.0/jellyfin.dll",
|
||||||
"args": ["--nowebclient"],
|
"args": ["--nowebclient"],
|
||||||
"cwd": "${workspaceFolder}/Jellyfin.Server",
|
"cwd": "${workspaceFolder}/Jellyfin.Server",
|
||||||
"console": "internalConsole",
|
"console": "internalConsole",
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
"type": "coreclr",
|
"type": "coreclr",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"preLaunchTask": "build",
|
"preLaunchTask": "build",
|
||||||
"program": "${workspaceFolder}/Jellyfin.Server/bin/Debug/net10.0/jellyfin.dll",
|
"program": "${workspaceFolder}/Jellyfin.Server/bin/Debug/net9.0/jellyfin.dll",
|
||||||
"args": ["--nowebclient", "--ffmpeg", "/usr/lib/jellyfin-ffmpeg/ffmpeg"],
|
"args": ["--nowebclient", "--ffmpeg", "/usr/lib/jellyfin-ffmpeg/ffmpeg"],
|
||||||
"cwd": "${workspaceFolder}/Jellyfin.Server",
|
"cwd": "${workspaceFolder}/Jellyfin.Server",
|
||||||
"console": "internalConsole",
|
"console": "internalConsole",
|
||||||
|
|||||||
@@ -164,7 +164,6 @@
|
|||||||
- [XVicarious](https://github.com/XVicarious)
|
- [XVicarious](https://github.com/XVicarious)
|
||||||
- [YouKnowBlom](https://github.com/YouKnowBlom)
|
- [YouKnowBlom](https://github.com/YouKnowBlom)
|
||||||
- [ZachPhelan](https://github.com/ZachPhelan)
|
- [ZachPhelan](https://github.com/ZachPhelan)
|
||||||
- [ZeusCraft10](https://github.com/ZeusCraft10)
|
|
||||||
- [KristupasSavickas](https://github.com/KristupasSavickas)
|
- [KristupasSavickas](https://github.com/KristupasSavickas)
|
||||||
- [Pusta](https://github.com/pusta)
|
- [Pusta](https://github.com/pusta)
|
||||||
- [nielsvanvelzen](https://github.com/nielsvanvelzen)
|
- [nielsvanvelzen](https://github.com/nielsvanvelzen)
|
||||||
@@ -207,12 +206,7 @@
|
|||||||
- [theshoeshiner](https://github.com/theshoeshiner)
|
- [theshoeshiner](https://github.com/theshoeshiner)
|
||||||
- [TokerX](https://github.com/TokerX)
|
- [TokerX](https://github.com/TokerX)
|
||||||
- [GeneMarks](https://github.com/GeneMarks)
|
- [GeneMarks](https://github.com/GeneMarks)
|
||||||
- [Kirill Nikiforov](https://github.com/allmazz)
|
|
||||||
- [bjorntp](https://github.com/bjorntp)
|
|
||||||
- [martenumberto](https://github.com/martenumberto)
|
- [martenumberto](https://github.com/martenumberto)
|
||||||
- [ZeusCraft10](https://github.com/ZeusCraft10)
|
|
||||||
- [MarcoCoreDuo](https://github.com/MarcoCoreDuo)
|
|
||||||
- [LiHRaM](https://github.com/LiHRaM)
|
|
||||||
|
|
||||||
# Emby Contributors
|
# Emby Contributors
|
||||||
|
|
||||||
@@ -289,4 +283,3 @@
|
|||||||
- [Martin Reuter](https://github.com/reuterma24)
|
- [Martin Reuter](https://github.com/reuterma24)
|
||||||
- [Michael McElroy](https://github.com/mcmcelro)
|
- [Michael McElroy](https://github.com/mcmcelro)
|
||||||
- [Soumyadip Auddy](https://github.com/SoumyadipAuddy)
|
- [Soumyadip Auddy](https://github.com/SoumyadipAuddy)
|
||||||
- [DerMaddis](https://github.com/dermaddis)
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<!-- Run "dotnet list package (dash,dash)outdated" to see the latest versions of each package.-->
|
<!-- Run "dotnet list package (dash,dash)outdated" to see the latest versions of each package.-->
|
||||||
<ItemGroup Label="Package Dependencies">
|
<ItemGroup Label="Package Dependencies">
|
||||||
<PackageVersion Include="AsyncKeyedLock" Version="8.0.2" />
|
<PackageVersion Include="AsyncKeyedLock" Version="7.1.8" />
|
||||||
<PackageVersion Include="AutoFixture.AutoMoq" Version="4.18.1" />
|
<PackageVersion Include="AutoFixture.AutoMoq" Version="4.18.1" />
|
||||||
<PackageVersion Include="AutoFixture.Xunit2" Version="4.18.1" />
|
<PackageVersion Include="AutoFixture.Xunit2" Version="4.18.1" />
|
||||||
<PackageVersion Include="AutoFixture" Version="4.18.1" />
|
<PackageVersion Include="AutoFixture" Version="4.18.1" />
|
||||||
@@ -13,8 +13,8 @@
|
|||||||
<PackageVersion Include="BlurHashSharp.SkiaSharp" Version="1.4.0-pre.1" />
|
<PackageVersion Include="BlurHashSharp.SkiaSharp" Version="1.4.0-pre.1" />
|
||||||
<PackageVersion Include="BlurHashSharp" Version="1.4.0-pre.1" />
|
<PackageVersion Include="BlurHashSharp" Version="1.4.0-pre.1" />
|
||||||
<PackageVersion Include="CommandLineParser" Version="2.9.1" />
|
<PackageVersion Include="CommandLineParser" Version="2.9.1" />
|
||||||
<PackageVersion Include="coverlet.collector" Version="10.0.0" />
|
<PackageVersion Include="coverlet.collector" Version="6.0.4" />
|
||||||
<PackageVersion Include="Diacritics" Version="4.1.4" />
|
<PackageVersion Include="Diacritics" Version="4.0.17" />
|
||||||
<PackageVersion Include="DiscUtils.Udf" Version="0.16.13" />
|
<PackageVersion Include="DiscUtils.Udf" Version="0.16.13" />
|
||||||
<PackageVersion Include="DotNet.Glob" Version="3.1.3" />
|
<PackageVersion Include="DotNet.Glob" Version="3.1.3" />
|
||||||
<PackageVersion Include="FsCheck.Xunit" Version="3.3.2" />
|
<PackageVersion Include="FsCheck.Xunit" Version="3.3.2" />
|
||||||
@@ -22,32 +22,37 @@
|
|||||||
<PackageVersion Include="ICU4N.Transliterator" Version="60.1.0-alpha.356" />
|
<PackageVersion Include="ICU4N.Transliterator" Version="60.1.0-alpha.356" />
|
||||||
<PackageVersion Include="IDisposableAnalyzers" Version="4.0.8" />
|
<PackageVersion Include="IDisposableAnalyzers" Version="4.0.8" />
|
||||||
<PackageVersion Include="Ignore" Version="0.2.1" />
|
<PackageVersion Include="Ignore" Version="0.2.1" />
|
||||||
<PackageVersion Include="Jellyfin.XmlTv" Version="10.12.0-pre1" />
|
<PackageVersion Include="Jellyfin.XmlTv" Version="10.8.0" />
|
||||||
<PackageVersion Include="libse" Version="4.0.12" />
|
<PackageVersion Include="libse" Version="4.0.12" />
|
||||||
<PackageVersion Include="LrcParser" Version="2025.623.0" />
|
<PackageVersion Include="LrcParser" Version="2025.623.0" />
|
||||||
<PackageVersion Include="MetaBrainz.MusicBrainz" Version="8.0.1" />
|
<PackageVersion Include="MetaBrainz.MusicBrainz" Version="6.1.0" />
|
||||||
<PackageVersion Include="Microsoft.AspNetCore.Authorization" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.AspNetCore.Authorization" Version="9.0.11" />
|
||||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.11" />
|
||||||
<PackageVersion Include="Microsoft.CodeAnalysis.BannedApiAnalyzers" Version="4.14.0" />
|
<PackageVersion Include="Microsoft.CodeAnalysis.BannedApiAnalyzers" Version="4.14.0" />
|
||||||
<PackageVersion Include="Microsoft.CodeAnalysis.Common" Version="5.3.0" />
|
<PackageVersion Include="Microsoft.CodeAnalysis.Common" Version="4.14.0" />
|
||||||
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="5.3.0" />
|
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.14.0" />
|
||||||
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="5.3.0" />
|
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.11.0" />
|
||||||
<PackageVersion Include="Microsoft.Data.Sqlite" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.Data.Sqlite" Version="9.0.11" />
|
||||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.11" />
|
||||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="9.0.11" />
|
||||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.11" />
|
||||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.11" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Caching.Abstractions" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.Extensions.Caching.Abstractions" Version="9.0.11" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="9.0.11" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="9.0.11" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="9.0.11" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="9.0.11" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="9.0.11" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.11" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Http" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.11" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Logging" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="9.0.11" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Options" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="9.0.11" />
|
||||||
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.4.0" />
|
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="9.0.11" />
|
||||||
|
<PackageVersion Include="Microsoft.Extensions.Http" Version="9.0.11" />
|
||||||
|
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.11" />
|
||||||
|
<PackageVersion Include="Microsoft.Extensions.Logging" Version="9.0.11" />
|
||||||
|
<PackageVersion Include="Microsoft.Extensions.Options" Version="9.0.11" />
|
||||||
|
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
|
||||||
<PackageVersion Include="MimeTypes" Version="2.5.2" />
|
<PackageVersion Include="MimeTypes" Version="2.5.2" />
|
||||||
<PackageVersion Include="Morestachio" Version="5.0.1.631" />
|
<PackageVersion Include="Morestachio" Version="5.0.1.631" />
|
||||||
<PackageVersion Include="Moq" Version="4.18.4" />
|
<PackageVersion Include="Moq" Version="4.18.4" />
|
||||||
@@ -57,11 +62,11 @@
|
|||||||
<PackageVersion Include="prometheus-net.AspNetCore" Version="8.2.1" />
|
<PackageVersion Include="prometheus-net.AspNetCore" Version="8.2.1" />
|
||||||
<PackageVersion Include="prometheus-net.DotNetRuntime" Version="4.4.1" />
|
<PackageVersion Include="prometheus-net.DotNetRuntime" Version="4.4.1" />
|
||||||
<PackageVersion Include="prometheus-net" Version="8.2.1" />
|
<PackageVersion Include="prometheus-net" Version="8.2.1" />
|
||||||
<PackageVersion Include="Polly" Version="8.6.6" />
|
<PackageVersion Include="Polly" Version="8.6.5" />
|
||||||
<PackageVersion Include="Serilog.AspNetCore" Version="10.0.0" />
|
<PackageVersion Include="Serilog.AspNetCore" Version="9.0.0" />
|
||||||
<PackageVersion Include="Serilog.Enrichers.Thread" Version="4.0.0" />
|
<PackageVersion Include="Serilog.Enrichers.Thread" Version="4.0.0" />
|
||||||
<PackageVersion Include="Serilog.Expressions" Version="5.0.0" />
|
<PackageVersion Include="Serilog.Expressions" Version="5.0.0" />
|
||||||
<PackageVersion Include="Serilog.Settings.Configuration" Version="10.0.0" />
|
<PackageVersion Include="Serilog.Settings.Configuration" Version="9.0.0" />
|
||||||
<PackageVersion Include="Serilog.Sinks.Async" Version="2.1.0" />
|
<PackageVersion Include="Serilog.Sinks.Async" Version="2.1.0" />
|
||||||
<PackageVersion Include="Serilog.Sinks.Console" Version="6.1.1" />
|
<PackageVersion Include="Serilog.Sinks.Console" Version="6.1.1" />
|
||||||
<PackageVersion Include="Serilog.Sinks.File" Version="7.0.0" />
|
<PackageVersion Include="Serilog.Sinks.File" Version="7.0.0" />
|
||||||
@@ -69,22 +74,26 @@
|
|||||||
<PackageVersion Include="SerilogAnalyzer" Version="0.15.0" />
|
<PackageVersion Include="SerilogAnalyzer" Version="0.15.0" />
|
||||||
<PackageVersion Include="SharpFuzz" Version="2.2.0" />
|
<PackageVersion Include="SharpFuzz" Version="2.2.0" />
|
||||||
<!-- Pinned to 3.116.1 because https://github.com/jellyfin/jellyfin/pull/14255 -->
|
<!-- Pinned to 3.116.1 because https://github.com/jellyfin/jellyfin/pull/14255 -->
|
||||||
<PackageVersion Include="SkiaSharp" Version="[3.116.1]" />
|
<PackageVersion Include="SkiaSharp" Version="3.116.1" />
|
||||||
<PackageVersion Include="SkiaSharp.HarfBuzz" Version="[3.116.1]" />
|
<PackageVersion Include="SkiaSharp.HarfBuzz" Version="3.116.1" />
|
||||||
<PackageVersion Include="SkiaSharp.NativeAssets.Linux" Version="[3.116.1]" />
|
<PackageVersion Include="SkiaSharp.NativeAssets.Linux" Version="3.116.1" />
|
||||||
<PackageVersion Include="SmartAnalyzers.MultithreadingAnalyzer" Version="1.1.31" />
|
<PackageVersion Include="SmartAnalyzers.MultithreadingAnalyzer" Version="1.1.31" />
|
||||||
<PackageVersion Include="StyleCop.Analyzers" Version="1.2.0-beta.556" />
|
<PackageVersion Include="StyleCop.Analyzers" Version="1.2.0-beta.556" />
|
||||||
<PackageVersion Include="Svg.Skia" Version="3.4.1" />
|
<PackageVersion Include="Svg.Skia" Version="3.2.1" />
|
||||||
<PackageVersion Include="Swashbuckle.AspNetCore.ReDoc" Version="10.1.7" />
|
<PackageVersion Include="Swashbuckle.AspNetCore.ReDoc" Version="6.5.0" />
|
||||||
<PackageVersion Include="Swashbuckle.AspNetCore" Version="10.1.7" />
|
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.2.3" />
|
||||||
<PackageVersion Include="System.Text.Json" Version="10.0.6" />
|
<PackageVersion Include="System.Globalization" Version="4.3.0" />
|
||||||
|
<PackageVersion Include="System.Linq.Async" Version="6.0.3" />
|
||||||
|
<PackageVersion Include="System.Text.Encoding.CodePages" Version="9.0.11" />
|
||||||
|
<PackageVersion Include="System.Text.Json" Version="9.0.11" />
|
||||||
|
<PackageVersion Include="System.Threading.Tasks.Dataflow" Version="9.0.11" />
|
||||||
<PackageVersion Include="TagLibSharp" Version="2.3.0" />
|
<PackageVersion Include="TagLibSharp" Version="2.3.0" />
|
||||||
<PackageVersion Include="z440.atl.core" Version="7.12.0" />
|
<PackageVersion Include="z440.atl.core" Version="7.9.0" />
|
||||||
<PackageVersion Include="TMDbLib" Version="3.0.0" />
|
<PackageVersion Include="TMDbLib" Version="2.3.0" />
|
||||||
<PackageVersion Include="UTF.Unknown" Version="2.6.0" />
|
<PackageVersion Include="UTF.Unknown" Version="2.6.0" />
|
||||||
<PackageVersion Include="Xunit.Priority" Version="1.1.6" />
|
<PackageVersion Include="Xunit.Priority" Version="1.1.6" />
|
||||||
<PackageVersion Include="xunit.runner.visualstudio" Version="2.8.2" />
|
<PackageVersion Include="xunit.runner.visualstudio" Version="2.8.2" />
|
||||||
<PackageVersion Include="Xunit.SkippableFact" Version="1.5.61" />
|
<PackageVersion Include="Xunit.SkippableFact" Version="1.5.23" />
|
||||||
<PackageVersion Include="xunit" Version="2.9.3" />
|
<PackageVersion Include="xunit" Version="2.9.3" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,75 +0,0 @@
|
|||||||
using System.Text.RegularExpressions;
|
|
||||||
|
|
||||||
namespace Emby.Naming.Book
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Helper class to retrieve basic metadata from a book filename.
|
|
||||||
/// </summary>
|
|
||||||
public static class BookFileNameParser
|
|
||||||
{
|
|
||||||
private const string NameMatchGroup = "name";
|
|
||||||
private const string IndexMatchGroup = "index";
|
|
||||||
private const string YearMatchGroup = "year";
|
|
||||||
private const string SeriesNameMatchGroup = "seriesName";
|
|
||||||
|
|
||||||
private static readonly Regex[] _nameMatches =
|
|
||||||
[
|
|
||||||
// seriesName (seriesYear) #index (of count) (year) where only seriesName and index are required
|
|
||||||
new Regex(@"^(?<seriesName>.+?)((\s\((?<seriesYear>[0-9]{4})\))?)\s#(?<index>[0-9]+)((\s\(of\s(?<count>[0-9]+)\))?)((\s\((?<year>[0-9]{4})\))?)$"),
|
|
||||||
new Regex(@"^(?<name>.+?)\s\((?<seriesName>.+?),\s#(?<index>[0-9]+)\)((\s\((?<year>[0-9]{4})\))?)$"),
|
|
||||||
new Regex(@"^(?<index>[0-9]+)\s\-\s(?<name>.+?)((\s\((?<year>[0-9]{4})\))?)$"),
|
|
||||||
new Regex(@"(?<name>.*)\((?<year>[0-9]{4})\)"),
|
|
||||||
// last resort matches the whole string as the name
|
|
||||||
new Regex(@"(?<name>.*)")
|
|
||||||
];
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Parse a filename name to retrieve the book name, series name, index, and year.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="name">Book filename to parse for information.</param>
|
|
||||||
/// <returns>Returns <see cref="BookFileNameParserResult"/> object.</returns>
|
|
||||||
public static BookFileNameParserResult Parse(string? name)
|
|
||||||
{
|
|
||||||
var result = new BookFileNameParserResult();
|
|
||||||
|
|
||||||
if (name == null)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var regex in _nameMatches)
|
|
||||||
{
|
|
||||||
var match = regex.Match(name);
|
|
||||||
|
|
||||||
if (!match.Success)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (match.Groups.TryGetValue(NameMatchGroup, out Group? nameGroup) && nameGroup.Success)
|
|
||||||
{
|
|
||||||
result.Name = nameGroup.Value.Trim();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (match.Groups.TryGetValue(IndexMatchGroup, out Group? indexGroup) && indexGroup.Success && int.TryParse(indexGroup.Value, out var index))
|
|
||||||
{
|
|
||||||
result.Index = index;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (match.Groups.TryGetValue(YearMatchGroup, out Group? yearGroup) && yearGroup.Success && int.TryParse(yearGroup.Value, out var year))
|
|
||||||
{
|
|
||||||
result.Year = year;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (match.Groups.TryGetValue(SeriesNameMatchGroup, out Group? seriesGroup) && seriesGroup.Success)
|
|
||||||
{
|
|
||||||
result.SeriesName = seriesGroup.Value.Trim();
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
using System;
|
|
||||||
|
|
||||||
namespace Emby.Naming.Book
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Data object used to pass metadata parsed from a book filename.
|
|
||||||
/// </summary>
|
|
||||||
public class BookFileNameParserResult
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="BookFileNameParserResult"/> class.
|
|
||||||
/// </summary>
|
|
||||||
public BookFileNameParserResult()
|
|
||||||
{
|
|
||||||
Name = null;
|
|
||||||
Index = null;
|
|
||||||
Year = null;
|
|
||||||
SeriesName = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the name of the book.
|
|
||||||
/// </summary>
|
|
||||||
public string? Name { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the book index.
|
|
||||||
/// </summary>
|
|
||||||
public int? Index { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the publication year.
|
|
||||||
/// </summary>
|
|
||||||
public int? Year { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the series name.
|
|
||||||
/// </summary>
|
|
||||||
public string? SeriesName { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -152,8 +152,8 @@ namespace Emby.Naming.Common
|
|||||||
|
|
||||||
CleanStrings =
|
CleanStrings =
|
||||||
[
|
[
|
||||||
@"^\s*(?<cleaned>.+?)[ _\,\.\(\)\[\]\-](3d|sbs|tab|hsbs|htab|mvc|HDR|HDC|UHD|UltraHD|4k|ac3|dts|custom|dc|divx|divx5|dsr|dsrip|dutch|dvd|dvdrip|dvdscr|dvdscreener|screener|dvdivx|cam|fragment|fs|hdtv|hdrip|hdtvrip|internal|limited|multi|subs|ntsc|ogg|ogm|pal|pdtv|proper|repack|rerip|retail|cd[1-9]|r5|bd5|bd|se|svcd|swedish|german|read.nfo|nfofix|unrated|ws|telesync|ts|telecine|tc|brrip|bdrip|480p|480i|576p|576i|720p|720i|1080p|1080i|2160p|hrhd|hrhdtv|hddvd|bluray|blu-ray|x264|x265|h264|h265|xvid|xvidvd|xxx|www.www|AAC|DTS)(?=[ _\,\.\(\)\[\]\-]|$)",
|
@"^\s*(?<cleaned>.+?)[ _\,\.\(\)\[\]\-](3d|sbs|tab|hsbs|htab|mvc|HDR|HDC|UHD|UltraHD|4k|ac3|dts|custom|dc|divx|divx5|dsr|dsrip|dutch|dvd|dvdrip|dvdscr|dvdscreener|screener|dvdivx|cam|fragment|fs|hdtv|hdrip|hdtvrip|internal|limited|multi|subs|ntsc|ogg|ogm|pal|pdtv|proper|repack|rerip|retail|cd[1-9]|r5|bd5|bd|se|svcd|swedish|german|read.nfo|nfofix|unrated|ws|telesync|ts|telecine|tc|brrip|bdrip|480p|480i|576p|576i|720p|720i|1080p|1080i|2160p|hrhd|hrhdtv|hddvd|bluray|blu-ray|x264|x265|h264|h265|xvid|xvidvd|xxx|www.www|AAC|DTS|\[.*\])([ _\,\.\(\)\[\]\-]|$)",
|
||||||
@"^\s*(?<cleaned>.+?)((\s*\[[^\]]+\]\s*)+)(\.[^\s]+)?$",
|
@"^(?<cleaned>.+?)(\[.*\])",
|
||||||
@"^\s*(?<cleaned>.+?)\WE[0-9]+(-|~)E?[0-9]+(\W|$)",
|
@"^\s*(?<cleaned>.+?)\WE[0-9]+(-|~)E?[0-9]+(\W|$)",
|
||||||
@"^\s*\[[^\]]+\](?!\.\w+$)\s*(?<cleaned>.+)",
|
@"^\s*\[[^\]]+\](?!\.\w+$)\s*(?<cleaned>.+)",
|
||||||
@"^\s*(?<cleaned>.+?)\s+-\s+[0-9]+\s*$",
|
@"^\s*(?<cleaned>.+?)\s+-\s+[0-9]+\s*$",
|
||||||
@@ -225,7 +225,6 @@ namespace Emby.Naming.Common
|
|||||||
".afc",
|
".afc",
|
||||||
".amf",
|
".amf",
|
||||||
".aif",
|
".aif",
|
||||||
".aifc",
|
|
||||||
".aiff",
|
".aiff",
|
||||||
".alac",
|
".alac",
|
||||||
".amr",
|
".amr",
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net10.0</TargetFramework>
|
<TargetFramework>net9.0</TargetFramework>
|
||||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||||
<PublishRepositoryUrl>true</PublishRepositoryUrl>
|
<PublishRepositoryUrl>true</PublishRepositoryUrl>
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Authors>Jellyfin Contributors</Authors>
|
<Authors>Jellyfin Contributors</Authors>
|
||||||
<PackageId>Jellyfin.Naming</PackageId>
|
<PackageId>Jellyfin.Naming</PackageId>
|
||||||
<VersionPrefix>10.12.0</VersionPrefix>
|
<VersionPrefix>10.11.4</VersionPrefix>
|
||||||
<RepositoryUrl>https://github.com/jellyfin/jellyfin</RepositoryUrl>
|
<RepositoryUrl>https://github.com/jellyfin/jellyfin</RepositoryUrl>
|
||||||
<PackageLicenseExpression>GPL-3.0-only</PackageLicenseExpression>
|
<PackageLicenseExpression>GPL-3.0-only</PackageLicenseExpression>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|||||||
@@ -17,13 +17,6 @@ namespace Emby.Naming.TV
|
|||||||
[GeneratedRegex(@"((?<a>[^\._]{2,})[\._]*)|([\._](?<b>[^\._]{2,}))")]
|
[GeneratedRegex(@"((?<a>[^\._]{2,})[\._]*)|([\._](?<b>[^\._]{2,}))")]
|
||||||
private static partial Regex SeriesNameRegex();
|
private static partial Regex SeriesNameRegex();
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Regex that matches titles with year in parentheses. Captures the title (which may be
|
|
||||||
/// numeric) before the year, i.e. turns "1923 (2022)" into "1923".
|
|
||||||
/// </summary>
|
|
||||||
[GeneratedRegex(@"(?<title>.+?)\s*\(\d{4}\)")]
|
|
||||||
private static partial Regex TitleWithYearRegex();
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Resolve information about series from path.
|
/// Resolve information about series from path.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -34,20 +27,6 @@ namespace Emby.Naming.TV
|
|||||||
{
|
{
|
||||||
string seriesName = Path.GetFileName(path);
|
string seriesName = Path.GetFileName(path);
|
||||||
|
|
||||||
// First check if the filename matches a title with year pattern (handles numeric titles)
|
|
||||||
if (!string.IsNullOrEmpty(seriesName))
|
|
||||||
{
|
|
||||||
var titleWithYearMatch = TitleWithYearRegex().Match(seriesName);
|
|
||||||
if (titleWithYearMatch.Success)
|
|
||||||
{
|
|
||||||
seriesName = titleWithYearMatch.Groups["title"].Value.Trim();
|
|
||||||
return new SeriesInfo(path)
|
|
||||||
{
|
|
||||||
Name = seriesName
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SeriesPathParserResult result = SeriesPathParser.Parse(options, path);
|
SeriesPathParserResult result = SeriesPathParser.Parse(options, path);
|
||||||
if (result.Success)
|
if (result.Success)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ public static class TvParserHelpers
|
|||||||
/// <param name="status">The status string.</param>
|
/// <param name="status">The status string.</param>
|
||||||
/// <param name="enumValue">The <see cref="SeriesStatus"/>.</param>
|
/// <param name="enumValue">The <see cref="SeriesStatus"/>.</param>
|
||||||
/// <returns>Returns true if parsing was successful.</returns>
|
/// <returns>Returns true if parsing was successful.</returns>
|
||||||
public static bool TryParseSeriesStatus(string? status, out SeriesStatus? enumValue)
|
public static bool TryParseSeriesStatus(string status, out SeriesStatus? enumValue)
|
||||||
{
|
{
|
||||||
if (Enum.TryParse(status, true, out SeriesStatus seriesStatus))
|
if (Enum.TryParse(status, true, out SeriesStatus seriesStatus))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ namespace Emby.Naming.Video
|
|||||||
var match = expression.Match(name);
|
var match = expression.Match(name);
|
||||||
if (match.Success && match.Groups.TryGetValue("cleaned", out var cleaned))
|
if (match.Success && match.Groups.TryGetValue("cleaned", out var cleaned))
|
||||||
{
|
{
|
||||||
newName = cleaned.Value.Trim();
|
newName = cleaned.Value;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
@@ -137,27 +136,19 @@ namespace Emby.Naming.Video
|
|||||||
|
|
||||||
if (videos.Count > 1)
|
if (videos.Count > 1)
|
||||||
{
|
{
|
||||||
var groups = videos
|
var groups = videos.GroupBy(x => ResolutionRegex().IsMatch(x.Files[0].FileNameWithoutExtension)).ToList();
|
||||||
.Select(x => (filename: x.Files[0].FileNameWithoutExtension.ToString(), value: x))
|
|
||||||
.Select(x => (x.filename, resolutionMatch: ResolutionRegex().Match(x.filename), x.value))
|
|
||||||
.GroupBy(x => x.resolutionMatch.Success)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
videos.Clear();
|
videos.Clear();
|
||||||
|
|
||||||
StringComparer comparer = StringComparer.Create(CultureInfo.InvariantCulture, CompareOptions.NumericOrdering);
|
|
||||||
foreach (var group in groups)
|
foreach (var group in groups)
|
||||||
{
|
{
|
||||||
if (group.Key)
|
if (group.Key)
|
||||||
{
|
{
|
||||||
videos.InsertRange(0, group
|
videos.InsertRange(0, group
|
||||||
.OrderByDescending(x => x.resolutionMatch.Value, comparer)
|
.OrderByDescending(x => ResolutionRegex().Match(x.Files[0].FileNameWithoutExtension.ToString()).Value, new AlphanumericComparator())
|
||||||
.ThenBy(x => x.filename, comparer)
|
.ThenBy(x => x.Files[0].FileNameWithoutExtension.ToString(), new AlphanumericComparator()));
|
||||||
.Select(x => x.value));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
videos.AddRange(group.OrderBy(x => x.filename, comparer).Select(x => x.value));
|
videos.AddRange(group.OrderBy(x => x.Files[0].FileNameWithoutExtension.ToString(), new AlphanumericComparator()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -217,8 +208,6 @@ namespace Emby.Naming.Video
|
|||||||
// The CleanStringParser should have removed common keywords etc.
|
// The CleanStringParser should have removed common keywords etc.
|
||||||
return testFilename.IsEmpty
|
return testFilename.IsEmpty
|
||||||
|| testFilename[0] == '-'
|
|| testFilename[0] == '-'
|
||||||
|| testFilename[0] == '_'
|
|
||||||
|| testFilename[0] == '.'
|
|
||||||
|| CheckMultiVersionRegex().IsMatch(testFilename);
|
|| CheckMultiVersionRegex().IsMatch(testFilename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net10.0</TargetFramework>
|
<TargetFramework>net9.0</TargetFramework>
|
||||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|||||||
@@ -39,24 +39,22 @@ namespace Emby.Server.Implementations.Cryptography
|
|||||||
{
|
{
|
||||||
if (string.Equals(hash.Id, "PBKDF2", StringComparison.Ordinal))
|
if (string.Equals(hash.Id, "PBKDF2", StringComparison.Ordinal))
|
||||||
{
|
{
|
||||||
var iterations = GetIterationsParameter(hash);
|
|
||||||
return hash.Hash.SequenceEqual(
|
return hash.Hash.SequenceEqual(
|
||||||
Rfc2898DeriveBytes.Pbkdf2(
|
Rfc2898DeriveBytes.Pbkdf2(
|
||||||
password,
|
password,
|
||||||
hash.Salt,
|
hash.Salt,
|
||||||
iterations,
|
int.Parse(hash.Parameters["iterations"], CultureInfo.InvariantCulture),
|
||||||
HashAlgorithmName.SHA1,
|
HashAlgorithmName.SHA1,
|
||||||
32));
|
32));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (string.Equals(hash.Id, "PBKDF2-SHA512", StringComparison.Ordinal))
|
if (string.Equals(hash.Id, "PBKDF2-SHA512", StringComparison.Ordinal))
|
||||||
{
|
{
|
||||||
var iterations = GetIterationsParameter(hash);
|
|
||||||
return hash.Hash.SequenceEqual(
|
return hash.Hash.SequenceEqual(
|
||||||
Rfc2898DeriveBytes.Pbkdf2(
|
Rfc2898DeriveBytes.Pbkdf2(
|
||||||
password,
|
password,
|
||||||
hash.Salt,
|
hash.Salt,
|
||||||
iterations,
|
int.Parse(hash.Parameters["iterations"], CultureInfo.InvariantCulture),
|
||||||
HashAlgorithmName.SHA512,
|
HashAlgorithmName.SHA512,
|
||||||
DefaultOutputLength));
|
DefaultOutputLength));
|
||||||
}
|
}
|
||||||
@@ -64,27 +62,6 @@ namespace Emby.Server.Implementations.Cryptography
|
|||||||
throw new NotSupportedException($"Can't verify hash with id: {hash.Id}");
|
throw new NotSupportedException($"Can't verify hash with id: {hash.Id}");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Extracts and validates the iterations parameter from a password hash.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="hash">The password hash containing parameters.</param>
|
|
||||||
/// <returns>The number of iterations.</returns>
|
|
||||||
/// <exception cref="FormatException">Thrown when iterations parameter is missing or invalid.</exception>
|
|
||||||
private static int GetIterationsParameter(PasswordHash hash)
|
|
||||||
{
|
|
||||||
if (!hash.Parameters.TryGetValue("iterations", out var iterationsStr))
|
|
||||||
{
|
|
||||||
throw new FormatException($"Password hash with id '{hash.Id}' is missing required 'iterations' parameter.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!int.TryParse(iterationsStr, CultureInfo.InvariantCulture, out var iterations))
|
|
||||||
{
|
|
||||||
throw new FormatException($"Password hash with id '{hash.Id}' has invalid 'iterations' parameter: '{iterationsStr}'.");
|
|
||||||
}
|
|
||||||
|
|
||||||
return iterations;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public byte[] GenerateSalt()
|
public byte[] GenerateSalt()
|
||||||
=> GenerateSalt(DefaultSaltLength);
|
=> GenerateSalt(DefaultSaltLength);
|
||||||
|
|||||||
@@ -1019,15 +1019,6 @@ namespace Emby.Server.Implementations.Dto
|
|||||||
{
|
{
|
||||||
dto.AlbumId = albumParent.Id;
|
dto.AlbumId = albumParent.Id;
|
||||||
dto.AlbumPrimaryImageTag = GetTagAndFillBlurhash(dto, albumParent, ImageType.Primary);
|
dto.AlbumPrimaryImageTag = GetTagAndFillBlurhash(dto, albumParent, ImageType.Primary);
|
||||||
if (albumParent.LUFS.HasValue)
|
|
||||||
{
|
|
||||||
// -18 LUFS reference, same as ReplayGain 2.0, compatible with ReplayGain 1.0
|
|
||||||
dto.AlbumNormalizationGain = -18f - albumParent.LUFS;
|
|
||||||
}
|
|
||||||
else if (albumParent.NormalizationGain.HasValue)
|
|
||||||
{
|
|
||||||
dto.AlbumNormalizationGain = albumParent.NormalizationGain;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (options.ContainsField(ItemFields.MediaSourceCount))
|
// if (options.ContainsField(ItemFields.MediaSourceCount))
|
||||||
@@ -1060,16 +1051,16 @@ namespace Emby.Server.Implementations.Dto
|
|||||||
|
|
||||||
// Include artists that are not in the database yet, e.g., just added via metadata editor
|
// Include artists that are not in the database yet, e.g., just added via metadata editor
|
||||||
// var foundArtists = artistItems.Items.Select(i => i.Item1.Name).ToList();
|
// var foundArtists = artistItems.Items.Select(i => i.Item1.Name).ToList();
|
||||||
var artistsLookup = _libraryManager.GetArtists([.. hasArtist.Artists.Where(e => !string.IsNullOrWhiteSpace(e))]);
|
dto.ArtistItems = _libraryManager.GetArtists([.. hasArtist.Artists.Where(e => !string.IsNullOrWhiteSpace(e))])
|
||||||
|
.Where(e => e.Value.Length > 0)
|
||||||
dto.ArtistItems = hasArtist.Artists
|
.Select(i =>
|
||||||
.Where(name => !string.IsNullOrWhiteSpace(name))
|
{
|
||||||
.Distinct()
|
return new NameGuidPair
|
||||||
.Select(name => artistsLookup.TryGetValue(name, out var artists) && artists.Length > 0
|
{
|
||||||
? new NameGuidPair { Name = name, Id = artists[0].Id }
|
Name = i.Key,
|
||||||
: null)
|
Id = i.Value.First().Id
|
||||||
.Where(item => item is not null)
|
};
|
||||||
.ToArray();
|
}).Where(i => i is not null).ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item is IHasAlbumArtist hasAlbumArtist)
|
if (item is IHasAlbumArtist hasAlbumArtist)
|
||||||
@@ -1094,16 +1085,31 @@ namespace Emby.Server.Implementations.Dto
|
|||||||
// })
|
// })
|
||||||
// .ToList();
|
// .ToList();
|
||||||
|
|
||||||
var albumArtistsLookup = _libraryManager.GetArtists([.. hasAlbumArtist.AlbumArtists.Where(e => !string.IsNullOrWhiteSpace(e))]);
|
|
||||||
|
|
||||||
dto.AlbumArtists = hasAlbumArtist.AlbumArtists
|
dto.AlbumArtists = hasAlbumArtist.AlbumArtists
|
||||||
.Where(name => !string.IsNullOrWhiteSpace(name))
|
// .Except(foundArtists, new DistinctNameComparer())
|
||||||
.Distinct()
|
.Select(i =>
|
||||||
.Select(name => albumArtistsLookup.TryGetValue(name, out var albumArtists) && albumArtists.Length > 0
|
{
|
||||||
? new NameGuidPair { Name = name, Id = albumArtists[0].Id }
|
// This should not be necessary but we're seeing some cases of it
|
||||||
: null)
|
if (string.IsNullOrEmpty(i))
|
||||||
.Where(item => item is not null)
|
{
|
||||||
.ToArray();
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var artist = _libraryManager.GetArtist(i, new DtoOptions(false)
|
||||||
|
{
|
||||||
|
EnableImages = false
|
||||||
|
});
|
||||||
|
if (artist is not null)
|
||||||
|
{
|
||||||
|
return new NameGuidPair
|
||||||
|
{
|
||||||
|
Name = artist.Name,
|
||||||
|
Id = artist.Id
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}).Where(i => i is not null).ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add video info
|
// Add video info
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
<PackageReference Include="Microsoft.Data.Sqlite" />
|
<PackageReference Include="Microsoft.Data.Sqlite" />
|
||||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Caching.Memory" />
|
<PackageReference Include="Microsoft.Extensions.Caching.Memory" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" />
|
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" />
|
||||||
<PackageReference Include="prometheus-net.DotNetRuntime" />
|
<PackageReference Include="prometheus-net.DotNetRuntime" />
|
||||||
@@ -38,7 +39,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net10.0</TargetFramework>
|
<TargetFramework>net9.0</TargetFramework>
|
||||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|||||||
@@ -60,7 +60,6 @@ namespace Emby.Server.Implementations.IO
|
|||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
|
|
||||||
appLifetime.ApplicationStarted.Register(Start);
|
appLifetime.ApplicationStarted.Register(Start);
|
||||||
appLifetime.ApplicationStopping.Register(Stop);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
@@ -353,12 +352,6 @@ namespace Emby.Server.Implementations.IO
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var fileInfo = _fileSystem.GetFileSystemInfo(path);
|
|
||||||
if (DotIgnoreIgnoreRule.IsIgnored(fileInfo, null))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ignore certain files, If the parent of an ignored path has a change event, ignore that too
|
// Ignore certain files, If the parent of an ignored path has a change event, ignore that too
|
||||||
foreach (var i in _tempIgnoredPaths.Keys)
|
foreach (var i in _tempIgnoredPaths.Keys)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -267,11 +267,8 @@ namespace Emby.Server.Implementations.Images
|
|||||||
{
|
{
|
||||||
var image = item.GetImageInfo(type, 0);
|
var image = item.GetImageInfo(type, 0);
|
||||||
|
|
||||||
if (image is null)
|
if (image is not null)
|
||||||
{
|
{
|
||||||
return GetItemsWithImages(item).Count is not 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!image.IsLocalFile)
|
if (!image.IsLocalFile)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@@ -286,6 +283,7 @@ namespace Emby.Server.Implementations.Images
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ namespace Emby.Server.Implementations.Images
|
|||||||
includeItemTypes = new[] { BaseItemKind.Series };
|
includeItemTypes = new[] { BaseItemKind.Series };
|
||||||
break;
|
break;
|
||||||
case CollectionType.music:
|
case CollectionType.music:
|
||||||
includeItemTypes = new[] { BaseItemKind.MusicArtist }; // Music albums usually don't have dedicated backdrops, so use artist instead
|
includeItemTypes = new[] { BaseItemKind.MusicAlbum };
|
||||||
break;
|
break;
|
||||||
case CollectionType.musicvideos:
|
case CollectionType.musicvideos:
|
||||||
includeItemTypes = new[] { BaseItemKind.MusicVideo };
|
includeItemTypes = new[] { BaseItemKind.MusicVideo };
|
||||||
@@ -98,11 +98,5 @@ namespace Emby.Server.Implementations.Images
|
|||||||
|
|
||||||
return base.CreateImage(item, itemsWithImages, outputPath, imageType, imageIndex);
|
return base.CreateImage(item, itemsWithImages, outputPath, imageType, imageIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override bool HasChangedByDate(BaseItem item, ItemImageInfo image)
|
|
||||||
{
|
|
||||||
var age = DateTime.UtcNow - image.DateModified;
|
|
||||||
return age.TotalDays > 7;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,20 +31,6 @@ namespace Emby.Server.Implementations.Library
|
|||||||
"**/*.sample.?????",
|
"**/*.sample.?????",
|
||||||
"**/sample/*",
|
"**/sample/*",
|
||||||
|
|
||||||
// Avoid adding Hungarian sample files
|
|
||||||
// https://github.com/jellyfin/jellyfin/issues/16237
|
|
||||||
"**/minta.?",
|
|
||||||
"**/minta.??",
|
|
||||||
"**/minta.???", // Matches minta.mkv
|
|
||||||
"**/minta.????", // Matches minta.webm
|
|
||||||
"**/minta.?????",
|
|
||||||
"**/*.minta.?",
|
|
||||||
"**/*.minta.??",
|
|
||||||
"**/*.minta.???",
|
|
||||||
"**/*.minta.????",
|
|
||||||
"**/*.minta.?????",
|
|
||||||
"**/minta/*",
|
|
||||||
|
|
||||||
// Directories
|
// Directories
|
||||||
"**/metadata/**",
|
"**/metadata/**",
|
||||||
"**/metadata",
|
"**/metadata",
|
||||||
@@ -64,10 +50,6 @@ namespace Emby.Server.Implementations.Library
|
|||||||
"**/lost+found",
|
"**/lost+found",
|
||||||
"**/subs/**",
|
"**/subs/**",
|
||||||
"**/subs",
|
"**/subs",
|
||||||
"**/.snapshots/**",
|
|
||||||
"**/.snapshots",
|
|
||||||
"**/.snapshot/**",
|
|
||||||
"**/.snapshot",
|
|
||||||
|
|
||||||
// Trickplay files
|
// Trickplay files
|
||||||
"**/*.trickplay",
|
"**/*.trickplay",
|
||||||
|
|||||||
@@ -2144,7 +2144,7 @@ namespace Emby.Server.Implementations.Library
|
|||||||
|
|
||||||
item.ValidateImages();
|
item.ValidateImages();
|
||||||
|
|
||||||
await _itemRepository.SaveImagesAsync(item).ConfigureAwait(false);
|
_itemRepository.SaveImages(item);
|
||||||
|
|
||||||
RegisterItem(item);
|
RegisterItem(item);
|
||||||
}
|
}
|
||||||
@@ -2202,12 +2202,6 @@ namespace Emby.Server.Implementations.Library
|
|||||||
public Task UpdateItemAsync(BaseItem item, BaseItem parent, ItemUpdateType updateReason, CancellationToken cancellationToken)
|
public Task UpdateItemAsync(BaseItem item, BaseItem parent, ItemUpdateType updateReason, CancellationToken cancellationToken)
|
||||||
=> UpdateItemsAsync([item], parent, updateReason, cancellationToken);
|
=> UpdateItemsAsync([item], parent, updateReason, cancellationToken);
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public async Task ReattachUserDataAsync(BaseItem item, CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
await _itemRepository.ReattachUserDataAsync(item, cancellationToken).ConfigureAwait(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task RunMetadataSavers(BaseItem item, ItemUpdateType updateReason)
|
public async Task RunMetadataSavers(BaseItem item, ItemUpdateType updateReason)
|
||||||
{
|
{
|
||||||
if (item.IsFileProtocol)
|
if (item.IsFileProtocol)
|
||||||
@@ -2289,7 +2283,7 @@ namespace Emby.Server.Implementations.Library
|
|||||||
|
|
||||||
if (item is null)
|
if (item is null)
|
||||||
{
|
{
|
||||||
return [];
|
return new List<Folder>();
|
||||||
}
|
}
|
||||||
|
|
||||||
return GetCollectionFoldersInternal(item, allUserRootChildren);
|
return GetCollectionFoldersInternal(item, allUserRootChildren);
|
||||||
@@ -3201,7 +3195,19 @@ namespace Emby.Server.Implementations.Library
|
|||||||
var rootFolderPath = _configurationManager.ApplicationPaths.DefaultUserViewsPath;
|
var rootFolderPath = _configurationManager.ApplicationPaths.DefaultUserViewsPath;
|
||||||
var virtualFolderPath = Path.Combine(rootFolderPath, virtualFolderName);
|
var virtualFolderPath = Path.Combine(rootFolderPath, virtualFolderName);
|
||||||
|
|
||||||
CreateShortcut(virtualFolderPath, pathInfo);
|
var shortcutFilename = Path.GetFileNameWithoutExtension(path);
|
||||||
|
|
||||||
|
var lnk = Path.Combine(virtualFolderPath, shortcutFilename + ShortcutFileExtension);
|
||||||
|
|
||||||
|
while (File.Exists(lnk))
|
||||||
|
{
|
||||||
|
shortcutFilename += "1";
|
||||||
|
lnk = Path.Combine(virtualFolderPath, shortcutFilename + ShortcutFileExtension);
|
||||||
|
}
|
||||||
|
|
||||||
|
_fileSystem.CreateShortcut(lnk, _appHost.ReverseVirtualPath(path));
|
||||||
|
|
||||||
|
RemoveContentTypeOverrides(path);
|
||||||
|
|
||||||
if (saveLibraryOptions)
|
if (saveLibraryOptions)
|
||||||
{
|
{
|
||||||
@@ -3366,24 +3372,5 @@ namespace Emby.Server.Implementations.Library
|
|||||||
|
|
||||||
return item is UserRootFolder || item.IsVisibleStandalone(user);
|
return item is UserRootFolder || item.IsVisibleStandalone(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CreateShortcut(string virtualFolderPath, MediaPathInfo pathInfo)
|
|
||||||
{
|
|
||||||
var path = pathInfo.Path;
|
|
||||||
var rootFolderPath = _configurationManager.ApplicationPaths.DefaultUserViewsPath;
|
|
||||||
|
|
||||||
var shortcutFilename = Path.GetFileNameWithoutExtension(path);
|
|
||||||
|
|
||||||
var lnk = Path.Combine(virtualFolderPath, shortcutFilename + ShortcutFileExtension);
|
|
||||||
|
|
||||||
while (File.Exists(lnk))
|
|
||||||
{
|
|
||||||
shortcutFilename += "1";
|
|
||||||
lnk = Path.Combine(virtualFolderPath, shortcutFilename + ShortcutFileExtension);
|
|
||||||
}
|
|
||||||
|
|
||||||
_fileSystem.CreateShortcut(lnk, _appHost.ReverseVirtualPath(path));
|
|
||||||
RemoveContentTypeOverrides(path);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,27 +37,17 @@ namespace Emby.Server.Implementations.Library
|
|||||||
while (attributeIndex > -1 && attributeIndex < maxIndex)
|
while (attributeIndex > -1 && attributeIndex < maxIndex)
|
||||||
{
|
{
|
||||||
var attributeEnd = attributeIndex + attribute.Length;
|
var attributeEnd = attributeIndex + attribute.Length;
|
||||||
if (attributeIndex > 0)
|
if (attributeIndex > 0
|
||||||
|
&& str[attributeIndex - 1] == '['
|
||||||
|
&& (str[attributeEnd] == '=' || str[attributeEnd] == '-'))
|
||||||
{
|
{
|
||||||
var attributeOpener = str[attributeIndex - 1];
|
var closingIndex = str[attributeEnd..].IndexOf(']');
|
||||||
var attributeCloser = attributeOpener switch
|
|
||||||
{
|
|
||||||
'[' => ']',
|
|
||||||
'(' => ')',
|
|
||||||
'{' => '}',
|
|
||||||
_ => '\0'
|
|
||||||
};
|
|
||||||
if (attributeCloser != '\0' && (str[attributeEnd] == '=' || str[attributeEnd] == '-'))
|
|
||||||
{
|
|
||||||
var closingIndex = str[attributeEnd..].IndexOf(attributeCloser);
|
|
||||||
|
|
||||||
// Must be at least 1 character before the closing bracket.
|
// Must be at least 1 character before the closing bracket.
|
||||||
if (closingIndex > 1)
|
if (closingIndex > 1)
|
||||||
{
|
{
|
||||||
return str[(attributeEnd + 1)..(attributeEnd + closingIndex)].Trim().ToString();
|
return str[(attributeEnd + 1)..(attributeEnd + closingIndex)].Trim().ToString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
str = str[attributeEnd..];
|
str = str[attributeEnd..];
|
||||||
attributeIndex = str.IndexOf(attribute, StringComparison.OrdinalIgnoreCase);
|
attributeIndex = str.IndexOf(attribute, StringComparison.OrdinalIgnoreCase);
|
||||||
|
|||||||
@@ -5,18 +5,18 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Emby.Naming.Book;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Resolvers;
|
using MediaBrowser.Controller.Resolvers;
|
||||||
|
using MediaBrowser.Model.Entities;
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.Library.Resolvers.Books
|
namespace Emby.Server.Implementations.Library.Resolvers.Books
|
||||||
{
|
{
|
||||||
public class BookResolver : ItemResolver<Book>
|
public class BookResolver : ItemResolver<Book>
|
||||||
{
|
{
|
||||||
private readonly string[] _validExtensions = { ".azw", ".azw3", ".cb7", ".cbr", ".cbt", ".cbz", ".epub", ".mobi", ".pdf", ".m4b", ".m4a", ".aac", ".flac", ".mp3", ".opus" };
|
private readonly string[] _validExtensions = { ".azw", ".azw3", ".cb7", ".cbr", ".cbt", ".cbz", ".epub", ".mobi", ".pdf" };
|
||||||
|
|
||||||
protected override Book Resolve(ItemResolveArgs args)
|
protected override Book Resolve(ItemResolveArgs args)
|
||||||
{
|
{
|
||||||
@@ -35,24 +35,19 @@ namespace Emby.Server.Implementations.Library.Resolvers.Books
|
|||||||
|
|
||||||
var extension = Path.GetExtension(args.Path.AsSpan());
|
var extension = Path.GetExtension(args.Path.AsSpan());
|
||||||
|
|
||||||
if (!_validExtensions.Contains(extension, StringComparison.OrdinalIgnoreCase))
|
if (_validExtensions.Contains(extension, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
return null;
|
// It's a book
|
||||||
}
|
|
||||||
|
|
||||||
var result = BookFileNameParser.Parse(Path.GetFileNameWithoutExtension(args.Path));
|
|
||||||
|
|
||||||
return new Book
|
return new Book
|
||||||
{
|
{
|
||||||
Path = args.Path,
|
Path = args.Path,
|
||||||
Name = result.Name ?? string.Empty,
|
IsInMixedFolder = true
|
||||||
IndexNumber = result.Index,
|
|
||||||
ProductionYear = result.Year,
|
|
||||||
SeriesName = result.SeriesName ?? Path.GetFileName(Path.GetDirectoryName(args.Path)),
|
|
||||||
IsInMixedFolder = true,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private Book GetBook(ItemResolveArgs args)
|
private Book GetBook(ItemResolveArgs args)
|
||||||
{
|
{
|
||||||
var bookFiles = args.FileSystemChildren.Where(f =>
|
var bookFiles = args.FileSystemChildren.Where(f =>
|
||||||
@@ -64,22 +59,15 @@ namespace Emby.Server.Implementations.Library.Resolvers.Books
|
|||||||
StringComparison.OrdinalIgnoreCase);
|
StringComparison.OrdinalIgnoreCase);
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
// directory is only considered a book when it contains exactly one supported file
|
// Don't return a Book if there is more (or less) than one document in the directory
|
||||||
// other library structures with multiple books to a directory will get picked up as individual files
|
|
||||||
if (bookFiles.Count != 1)
|
if (bookFiles.Count != 1)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
var result = BookFileNameParser.Parse(Path.GetFileName(args.Path));
|
|
||||||
|
|
||||||
return new Book
|
return new Book
|
||||||
{
|
{
|
||||||
Path = bookFiles[0].FullName,
|
Path = bookFiles[0].FullName
|
||||||
Name = result.Name ?? string.Empty,
|
|
||||||
IndexNumber = result.Index,
|
|
||||||
ProductionYear = result.Year,
|
|
||||||
SeriesName = result.SeriesName ?? string.Empty,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ namespace Emby.Server.Implementations.Library
|
|||||||
results = results.GetRange(query.StartIndex.Value, totalRecordCount - query.StartIndex.Value);
|
results = results.GetRange(query.StartIndex.Value, totalRecordCount - query.StartIndex.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (query.Limit.HasValue && query.Limit.Value > 0)
|
if (query.Limit.HasValue)
|
||||||
{
|
{
|
||||||
results = results.GetRange(0, Math.Min(query.Limit.Value, results.Count));
|
results = results.GetRange(0, Math.Min(query.Limit.Value, results.Count));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,10 +50,6 @@ public class ArtistsValidator
|
|||||||
public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
|
public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var names = _itemRepo.GetAllArtistNames();
|
var names = _itemRepo.GetAllArtistNames();
|
||||||
var existingArtistIds = _libraryManager.GetItemIds(new InternalItemsQuery
|
|
||||||
{
|
|
||||||
IncludeItemTypes = [BaseItemKind.MusicArtist]
|
|
||||||
}).ToHashSet();
|
|
||||||
|
|
||||||
var numComplete = 0;
|
var numComplete = 0;
|
||||||
var count = names.Count;
|
var count = names.Count;
|
||||||
@@ -63,14 +59,9 @@ public class ArtistsValidator
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var item = _libraryManager.GetArtist(name);
|
var item = _libraryManager.GetArtist(name);
|
||||||
var isNew = !existingArtistIds.Contains(item.Id);
|
|
||||||
var neverRefreshed = item.DateLastRefreshed == default;
|
|
||||||
|
|
||||||
if (isNew || neverRefreshed)
|
|
||||||
{
|
|
||||||
await item.RefreshMetadata(cancellationToken).ConfigureAwait(false);
|
await item.RefreshMetadata(cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
catch (OperationCanceledException)
|
catch (OperationCanceledException)
|
||||||
{
|
{
|
||||||
// Don't clutter the log
|
// Don't clutter the log
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
{
|
{
|
||||||
"Albums": "аальбомқәа",
|
"Albums": "аальбомқәа"
|
||||||
"AppDeviceValues": "Апп: {0}, Априбор: {1}",
|
|
||||||
"Application": "Апрограмма"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -135,7 +135,5 @@
|
|||||||
"TaskExtractMediaSegments": "Media Segment Skandeer",
|
"TaskExtractMediaSegments": "Media Segment Skandeer",
|
||||||
"TaskExtractMediaSegmentsDescription": "Onttrek of verkry mediasegmente van MediaSegment-geaktiveerde inproppe.",
|
"TaskExtractMediaSegmentsDescription": "Onttrek of verkry mediasegmente van MediaSegment-geaktiveerde inproppe.",
|
||||||
"TaskMoveTrickplayImages": "Migreer Trickplay Beeldligging",
|
"TaskMoveTrickplayImages": "Migreer Trickplay Beeldligging",
|
||||||
"TaskMoveTrickplayImagesDescription": "Skuif ontstaande trickplay lêers volgens die biblioteekinstellings.",
|
"TaskMoveTrickplayImagesDescription": "Skuif ontstaande trickplay lêers volgens die biblioteekinstellings."
|
||||||
"CleanupUserDataTask": "Gebruikers data skoon maak taak",
|
|
||||||
"CleanupUserDataTaskDescription": "Maak alle gebruikers data (kykstatus, gunstelingstatus, ens.) skoon van media wat nie meer vir ten minste 90 dae teenwoordig is nie."
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,13 +2,13 @@
|
|||||||
"Albums": "ألبومات",
|
"Albums": "ألبومات",
|
||||||
"AppDeviceValues": "تطبيق: {0}, جهاز: {1}",
|
"AppDeviceValues": "تطبيق: {0}, جهاز: {1}",
|
||||||
"Application": "تطبيق",
|
"Application": "تطبيق",
|
||||||
"Artists": "فنانون",
|
"Artists": "الفنانون",
|
||||||
"AuthenticationSucceededWithUserName": "نجحت عملية التوثيق بـ {0}",
|
"AuthenticationSucceededWithUserName": "نجحت عملية التوثيق بـ {0}",
|
||||||
"Books": "الكتب",
|
"Books": "الكتب",
|
||||||
"CameraImageUploadedFrom": "رُفعت صورة الكاميرا الجديدة من {0}",
|
"CameraImageUploadedFrom": "رُفعت صورة الكاميرا الجديدة من {0}",
|
||||||
"Channels": "القنوات",
|
"Channels": "القنوات",
|
||||||
"ChapterNameValue": "الفصل {0}",
|
"ChapterNameValue": "الفصل {0}",
|
||||||
"Collections": "مجموعات",
|
"Collections": "المجموعات",
|
||||||
"DeviceOfflineWithName": "قُطِع الاتصال ب{0}",
|
"DeviceOfflineWithName": "قُطِع الاتصال ب{0}",
|
||||||
"DeviceOnlineWithName": "{0} متصل",
|
"DeviceOnlineWithName": "{0} متصل",
|
||||||
"FailedLoginAttemptWithUserName": "محاولة تسجيل الدخول فاشلة من {0}",
|
"FailedLoginAttemptWithUserName": "محاولة تسجيل الدخول فاشلة من {0}",
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
"Folders": "المجلدات",
|
"Folders": "المجلدات",
|
||||||
"Genres": "التصنيفات",
|
"Genres": "التصنيفات",
|
||||||
"HeaderAlbumArtists": "فناني الألبوم",
|
"HeaderAlbumArtists": "فناني الألبوم",
|
||||||
"HeaderContinueWatching": "متابعة المشاهدة",
|
"HeaderContinueWatching": "إستئناف المشاهدة",
|
||||||
"HeaderFavoriteAlbums": "الألبومات المفضلة",
|
"HeaderFavoriteAlbums": "الألبومات المفضلة",
|
||||||
"HeaderFavoriteArtists": "الفنانون المفضلون",
|
"HeaderFavoriteArtists": "الفنانون المفضلون",
|
||||||
"HeaderFavoriteEpisodes": "الحلقات المفضلة",
|
"HeaderFavoriteEpisodes": "الحلقات المفضلة",
|
||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "العروض",
|
"Shows": "العروض",
|
||||||
"Songs": "الأغاني",
|
"Songs": "الأغاني",
|
||||||
"StartupEmbyServerIsLoading": "يتم تحميل خادم Jellyfin . الرجاء المحاولة بعد قليل.",
|
"StartupEmbyServerIsLoading": "يتم تحميل خادم Jellyfin . الرجاء المحاولة بعد قليل.",
|
||||||
|
"SubtitleDownloadFailureForItem": "عملية إنزال الترجمة فشلت لـ{0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "فشل تحميل الترجمات من {0} ل {1}",
|
"SubtitleDownloadFailureFromForItem": "فشل تحميل الترجمات من {0} ل {1}",
|
||||||
"Sync": "مزامنة",
|
"Sync": "مزامنة",
|
||||||
"System": "النظام",
|
"System": "النظام",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"Playlists": "Плэй-лісты",
|
"Playlists": "Плэй-лісты",
|
||||||
"Latest": "Апошняе",
|
"Latest": "Апошняе",
|
||||||
"LabelIpAddressValue": "IP-адрас: {0}",
|
"LabelIpAddressValue": "IP-адрас: {0}",
|
||||||
"ItemAddedWithName": "{0} дададзены ў бібліятэку",
|
"ItemAddedWithName": "{0} даданы ў бібліятэку",
|
||||||
"MessageApplicationUpdated": "Сервер Jellyfin абноўлены",
|
"MessageApplicationUpdated": "Сервер Jellyfin абноўлены",
|
||||||
"NotificationOptionApplicationUpdateInstalled": "Абнаўленне праграмы ўсталявана",
|
"NotificationOptionApplicationUpdateInstalled": "Абнаўленне праграмы ўсталявана",
|
||||||
"PluginInstalledWithName": "{0} быў усталяваны",
|
"PluginInstalledWithName": "{0} быў усталяваны",
|
||||||
@@ -14,9 +14,9 @@
|
|||||||
"Channels": "Каналы",
|
"Channels": "Каналы",
|
||||||
"ChapterNameValue": "Раздзел {0}",
|
"ChapterNameValue": "Раздзел {0}",
|
||||||
"Collections": "Калекцыі",
|
"Collections": "Калекцыі",
|
||||||
"Default": "Прадвызначана",
|
"Default": "Па змаўчанні",
|
||||||
"FailedLoginAttemptWithUserName": "Няўдалая спроба ўваходу з {0}",
|
"FailedLoginAttemptWithUserName": "Няўдалая спроба ўваходу з {0}",
|
||||||
"Folders": "Папкі",
|
"Folders": "Тэчкі",
|
||||||
"Favorites": "Абранае",
|
"Favorites": "Абранае",
|
||||||
"External": "Знешні",
|
"External": "Знешні",
|
||||||
"Genres": "Жанры",
|
"Genres": "Жанры",
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
"User": "Карыстальнік",
|
"User": "Карыстальнік",
|
||||||
"UserDeletedWithName": "Карыстальнік {0} быў выдалены",
|
"UserDeletedWithName": "Карыстальнік {0} быў выдалены",
|
||||||
"UserDownloadingItemWithValues": "{0} спампоўваецца {1}",
|
"UserDownloadingItemWithValues": "{0} спампоўваецца {1}",
|
||||||
"TaskOptimizeDatabase": "Аптымізацыя базы даных",
|
"TaskOptimizeDatabase": "Аптымізаваць базу дадзеных",
|
||||||
"Artists": "Выканаўцы",
|
"Artists": "Выканаўцы",
|
||||||
"UserOfflineFromDevice": "{0} адлучыўся ад {1}",
|
"UserOfflineFromDevice": "{0} адлучыўся ад {1}",
|
||||||
"UserPolicyUpdatedWithName": "Палітыка карыстальніка абноўлена для {0}",
|
"UserPolicyUpdatedWithName": "Палітыка карыстальніка абноўлена для {0}",
|
||||||
@@ -59,8 +59,8 @@
|
|||||||
"TaskCleanLogsDescription": "Выдаляе файлы журналу, якім больш за {0} дзён.",
|
"TaskCleanLogsDescription": "Выдаляе файлы журналу, якім больш за {0} дзён.",
|
||||||
"TaskUpdatePluginsDescription": "Спампоўвае і ўсталёўвае абнаўленні для плагінаў, якія сканфігураваныя на аўтаматычнае абнаўленне.",
|
"TaskUpdatePluginsDescription": "Спампоўвае і ўсталёўвае абнаўленні для плагінаў, якія сканфігураваныя на аўтаматычнае абнаўленне.",
|
||||||
"TaskRefreshChannelsDescription": "Абнаўляе інфармацыю аб інтэрнэт-канале.",
|
"TaskRefreshChannelsDescription": "Абнаўляе інфармацыю аб інтэрнэт-канале.",
|
||||||
"TaskDownloadMissingSubtitlesDescription": "Шукае ў інтэрнэце адсутныя субцітры на аснове канфігурацыі метаданых.",
|
"TaskDownloadMissingSubtitlesDescription": "Шукае ў інтэрнэце адсутныя субцітры на аснове канфігурацыі метададзеных.",
|
||||||
"TaskOptimizeDatabaseDescription": "Сціскае базу даных і вызваляе вольную прастору. Выкананне гэтай задачы пасля сканіравання бібліятэкі або іншых змяненняў, якія мадыфікуюць базу даных, можа палепшыць прадукцыйнасць.",
|
"TaskOptimizeDatabaseDescription": "Ушчыльняе базу дадзеных і скарачае вольную прастору. Выкананне гэтай задачы пасля сканавання бібліятэкі або ўнясення іншых зменаў, якія прадугледжваюць мадыфікацыю базы дадзеных, можа палепшыць выдайнасць.",
|
||||||
"TaskKeyframeExtractor": "Экстрактар ключавых кадраў",
|
"TaskKeyframeExtractor": "Экстрактар ключавых кадраў",
|
||||||
"TasksApplicationCategory": "Праграма",
|
"TasksApplicationCategory": "Праграма",
|
||||||
"AppDeviceValues": "Праграма: {0}, Прылада: {1}",
|
"AppDeviceValues": "Праграма: {0}, Прылада: {1}",
|
||||||
@@ -81,8 +81,8 @@
|
|||||||
"NotificationOptionInstallationFailed": "Збой усталёўкі",
|
"NotificationOptionInstallationFailed": "Збой усталёўкі",
|
||||||
"NewVersionIsAvailable": "Новая версія сервера Jellyfin даступная для cпампоўкі.",
|
"NewVersionIsAvailable": "Новая версія сервера Jellyfin даступная для cпампоўкі.",
|
||||||
"NotificationOptionCameraImageUploaded": "Выява камеры запампавана",
|
"NotificationOptionCameraImageUploaded": "Выява камеры запампавана",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Прайграванне аўдыя спынена",
|
"NotificationOptionAudioPlaybackStopped": "Прайграванне аўдыё спынена",
|
||||||
"NotificationOptionAudioPlayback": "Прайграванне аўдыя пачалося",
|
"NotificationOptionAudioPlayback": "Прайграванне аўдыё пачалося",
|
||||||
"NotificationOptionNewLibraryContent": "Дададзены новы кантэнт",
|
"NotificationOptionNewLibraryContent": "Дададзены новы кантэнт",
|
||||||
"NotificationOptionPluginError": "Збой плагіна",
|
"NotificationOptionPluginError": "Збой плагіна",
|
||||||
"NotificationOptionPluginUninstalled": "Плагін выдалены",
|
"NotificationOptionPluginUninstalled": "Плагін выдалены",
|
||||||
@@ -95,7 +95,7 @@
|
|||||||
"ServerNameNeedsToBeRestarted": "{0} патрабуе перазапуску",
|
"ServerNameNeedsToBeRestarted": "{0} патрабуе перазапуску",
|
||||||
"Shows": "Шоу",
|
"Shows": "Шоу",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server загружаецца. Калі ласка, паўтарыце спробу крыху пазней.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server загружаецца. Калі ласка, паўтарыце спробу крыху пазней.",
|
||||||
"SubtitleDownloadFailureFromForItem": "Субцітры для {1} не ўдалося спампаваць з {0}",
|
"SubtitleDownloadFailureFromForItem": "Не атрымалася спампаваць субтытры з {0} для {1}",
|
||||||
"TvShows": "Тэлепраграма",
|
"TvShows": "Тэлепраграма",
|
||||||
"Undefined": "Нявызначана",
|
"Undefined": "Нявызначана",
|
||||||
"UserLockedOutWithName": "Карыстальнік {0} быў заблакіраваны",
|
"UserLockedOutWithName": "Карыстальнік {0} быў заблакіраваны",
|
||||||
@@ -104,7 +104,7 @@
|
|||||||
"UserStartedPlayingItemWithValues": "{0} прайграваецца {1} на {2}",
|
"UserStartedPlayingItemWithValues": "{0} прайграваецца {1} на {2}",
|
||||||
"UserStoppedPlayingItemWithValues": "{0} скончыў прайграванне {1} на {2}",
|
"UserStoppedPlayingItemWithValues": "{0} скончыў прайграванне {1} на {2}",
|
||||||
"ValueHasBeenAddedToLibrary": "{0} быў дададзены ў вашу медыятэку",
|
"ValueHasBeenAddedToLibrary": "{0} быў дададзены ў вашу медыятэку",
|
||||||
"ValueSpecialEpisodeName": "Спецвыпуск - {0}",
|
"ValueSpecialEpisodeName": "Спецэпізод - {0}",
|
||||||
"VersionNumber": "Версія {0}",
|
"VersionNumber": "Версія {0}",
|
||||||
"TasksMaintenanceCategory": "Абслугоўванне",
|
"TasksMaintenanceCategory": "Абслугоўванне",
|
||||||
"TasksLibraryCategory": "Бібліятэка",
|
"TasksLibraryCategory": "Бібліятэка",
|
||||||
@@ -114,7 +114,7 @@
|
|||||||
"TaskCleanCacheDescription": "Выдаляе файлы кэша, якія больш не патрэбныя сістэме.",
|
"TaskCleanCacheDescription": "Выдаляе файлы кэша, якія больш не патрэбныя сістэме.",
|
||||||
"TaskRefreshChapterImages": "Вынуць выявы раздзелаў",
|
"TaskRefreshChapterImages": "Вынуць выявы раздзелаў",
|
||||||
"TaskRefreshLibrary": "Сканаваць бібліятэку",
|
"TaskRefreshLibrary": "Сканаваць бібліятэку",
|
||||||
"TaskRefreshLibraryDescription": "Сканіруе вашу медыятэку на наяўнасць новых файлаў і абнаўляе метаданыя.",
|
"TaskRefreshLibraryDescription": "Скануе вашу медыятэку на наяўнасць новых файлаў і абнаўляе метададзеныя.",
|
||||||
"TaskCleanLogs": "Ачысціць журнал",
|
"TaskCleanLogs": "Ачысціць журнал",
|
||||||
"TaskRefreshPeople": "Абнавіць выканаўцаў",
|
"TaskRefreshPeople": "Абнавіць выканаўцаў",
|
||||||
"TaskRefreshPeopleDescription": "Абнаўленне метаданых для акцёраў і рэжысёраў у вашай медыятэцы.",
|
"TaskRefreshPeopleDescription": "Абнаўленне метаданых для акцёраў і рэжысёраў у вашай медыятэцы.",
|
||||||
@@ -123,10 +123,10 @@
|
|||||||
"TaskCleanTranscodeDescription": "Выдаляе перакадзіраваныя файлы, старэйшыя за адзін дзень.",
|
"TaskCleanTranscodeDescription": "Выдаляе перакадзіраваныя файлы, старэйшыя за адзін дзень.",
|
||||||
"TaskRefreshChannels": "Абнавіць каналы",
|
"TaskRefreshChannels": "Абнавіць каналы",
|
||||||
"TaskDownloadMissingSubtitles": "Спампаваць адсутныя субцітры",
|
"TaskDownloadMissingSubtitles": "Спампаваць адсутныя субцітры",
|
||||||
"TaskKeyframeExtractorDescription": "Выдае ключавыя кадры з відэафайлаў для стварэння больш дакладных плэй-лістоў HLS. Гэта задача можа выконвацца доўга.",
|
"TaskKeyframeExtractorDescription": "Выдае ключавыя кадры з відэафайлаў для стварэння больш дакладных плэй-лістоў HLS. Гэта задача можа працягнуцца шмат часу.",
|
||||||
"TaskRefreshTrickplayImages": "Стварыць выявы Trickplay",
|
"TaskRefreshTrickplayImages": "Стварыць выявы Trickplay",
|
||||||
"TaskRefreshTrickplayImagesDescription": "Стварае перадпрагляды відэаролікаў для Trickplay у падключаных бібліятэках.",
|
"TaskRefreshTrickplayImagesDescription": "Стварае перадпрагляды відэаролікаў для Trickplay у падключаных бібліятэках.",
|
||||||
"TaskCleanCollectionsAndPlaylists": "Ачысціць калекцыі і плэй-лісты",
|
"TaskCleanCollectionsAndPlaylists": "Ачысціце калекцыі і плэй-лісты",
|
||||||
"TaskCleanCollectionsAndPlaylistsDescription": "Выдаляе элементы з калекцый і плэй-лістоў, якія больш не існуюць.",
|
"TaskCleanCollectionsAndPlaylistsDescription": "Выдаляе элементы з калекцый і плэй-лістоў, якія больш не існуюць.",
|
||||||
"TaskAudioNormalizationDescription": "Скануе файлы на прадмет нармалізацыі гуку.",
|
"TaskAudioNormalizationDescription": "Скануе файлы на прадмет нармалізацыі гуку.",
|
||||||
"TaskAudioNormalization": "Нармалізацыя гуку",
|
"TaskAudioNormalization": "Нармалізацыя гуку",
|
||||||
@@ -136,6 +136,6 @@
|
|||||||
"TaskDownloadMissingLyricsDescription": "Спампоўвае тэксты для песняў",
|
"TaskDownloadMissingLyricsDescription": "Спампоўвае тэксты для песняў",
|
||||||
"TaskExtractMediaSegments": "Сканіраванне медыя-сегмента",
|
"TaskExtractMediaSegments": "Сканіраванне медыя-сегмента",
|
||||||
"TaskMoveTrickplayImages": "Перанесці месцазнаходжанне выявы Trickplay",
|
"TaskMoveTrickplayImages": "Перанесці месцазнаходжанне выявы Trickplay",
|
||||||
"CleanupUserDataTask": "Задача па ачыстцы даных карыстальніка",
|
"CleanupUserDataTask": "Задача па ачыстцы дадзеных карыстальніка",
|
||||||
"CleanupUserDataTaskDescription": "Ачышчае ўсе даныя карыстальніка (стан прагляду, абранае і г.д.) для медыяфайлаў, што адсутнічаюць больш за 90 дзён."
|
"CleanupUserDataTaskDescription": "Ачысьціць усе дадзеныя карыстальніка (стан прагляду, абранае і г.д.) для медыяфайлаў, што адсутнічаюць больш за 90 дзён."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
"Favorites": "Любими",
|
"Favorites": "Любими",
|
||||||
"Folders": "Папки",
|
"Folders": "Папки",
|
||||||
"Genres": "Жанрове",
|
"Genres": "Жанрове",
|
||||||
"HeaderAlbumArtists": "Изпълнители на албума",
|
"HeaderAlbumArtists": "Изпълнители на албуми",
|
||||||
"HeaderContinueWatching": "Продължаване на гледането",
|
"HeaderContinueWatching": "Продължаване на гледането",
|
||||||
"HeaderFavoriteAlbums": "Любими албуми",
|
"HeaderFavoriteAlbums": "Любими албуми",
|
||||||
"HeaderFavoriteArtists": "Любими изпълнители",
|
"HeaderFavoriteArtists": "Любими изпълнители",
|
||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Сериали",
|
"Shows": "Сериали",
|
||||||
"Songs": "Песни",
|
"Songs": "Песни",
|
||||||
"StartupEmbyServerIsLoading": "Сървърът зарежда. Моля, опитайте отново след малко.",
|
"StartupEmbyServerIsLoading": "Сървърът зарежда. Моля, опитайте отново след малко.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Неуспешно изтегляне на субтитри за {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Субтитрите за {1} от {0} не можаха да бъдат изтеглени",
|
"SubtitleDownloadFailureFromForItem": "Субтитрите за {1} от {0} не можаха да бъдат изтеглени",
|
||||||
"Sync": "Синхронизиране",
|
"Sync": "Синхронизиране",
|
||||||
"System": "Система",
|
"System": "Система",
|
||||||
|
|||||||
@@ -1,141 +0,0 @@
|
|||||||
{
|
|
||||||
"Albums": "Albumi",
|
|
||||||
"Artists": "Umjetnici",
|
|
||||||
"Books": "Knjige",
|
|
||||||
"Channels": "Kanalima",
|
|
||||||
"Collections": "Zbirke",
|
|
||||||
"Default": "Zadano",
|
|
||||||
"Favorites": "Omiljeni",
|
|
||||||
"Folders": "Mape",
|
|
||||||
"Genres": "Žanrovi",
|
|
||||||
"HeaderAlbumArtists": "Umjetnici albuma",
|
|
||||||
"HeaderContinueWatching": "Nastavi gledati",
|
|
||||||
"Movies": "Filmovi",
|
|
||||||
"MusicVideos": "Muzički spotovi",
|
|
||||||
"Photos": "Slike",
|
|
||||||
"Playlists": "Plejliste",
|
|
||||||
"Shows": "Pokazuje",
|
|
||||||
"Songs": "Pjesme",
|
|
||||||
"ValueSpecialEpisodeName": "Posebno - {0}",
|
|
||||||
"AppDeviceValues": "Aplikacija: {0}, Uređaj: {1}",
|
|
||||||
"Application": "Prijava",
|
|
||||||
"AuthenticationSucceededWithUserName": "{0} uspješno autentificirano",
|
|
||||||
"CameraImageUploadedFrom": "Nova slika s kamere je postavljena sa {0}",
|
|
||||||
"ChapterNameValue": "Poglavlje {0}",
|
|
||||||
"DeviceOfflineWithName": "{0} se odspojio",
|
|
||||||
"DeviceOnlineWithName": "{0} je povezan",
|
|
||||||
"External": "Vanjsko",
|
|
||||||
"FailedLoginAttemptWithUserName": "Neuspjeli pokušaj prijave sa {0}",
|
|
||||||
"Forced": "Prisilno",
|
|
||||||
"HeaderFavoriteAlbums": "Omiljeni albumi",
|
|
||||||
"HeaderFavoriteArtists": "Omiljeni umjetnici",
|
|
||||||
"HeaderFavoriteEpisodes": "Omiljene epizode",
|
|
||||||
"HeaderFavoriteShows": "Omiljene emisije",
|
|
||||||
"HeaderFavoriteSongs": "Omiljene pjesme",
|
|
||||||
"HeaderLiveTV": "TV uživo",
|
|
||||||
"HeaderNextUp": "Slijedi",
|
|
||||||
"HeaderRecordingGroups": "Grupe za snimanje",
|
|
||||||
"HearingImpaired": "Oštećen sluh",
|
|
||||||
"HomeVideos": "Kućni videozapisi",
|
|
||||||
"Inherit": "Nasljedi",
|
|
||||||
"ItemAddedWithName": "{0} je dodan u biblioteku",
|
|
||||||
"ItemRemovedWithName": "{0} je uklonjen iz biblioteke",
|
|
||||||
"LabelIpAddressValue": "IP adresa: {0}",
|
|
||||||
"LabelRunningTimeValue": "Trajanje: {0}",
|
|
||||||
"Latest": "Posljednje dodano",
|
|
||||||
"MessageApplicationUpdated": "Jellyfin Server je ažuriran",
|
|
||||||
"MessageApplicationUpdatedTo": "Jellyfin Server je ažuriran na {0}",
|
|
||||||
"MessageNamedServerConfigurationUpdatedWithValue": "Sekcija za konfiguraciju servera {0} je ažurirana",
|
|
||||||
"MessageServerConfigurationUpdated": "Konfiguracija servera je ažurirana",
|
|
||||||
"MixedContent": "Miješani sadržaj",
|
|
||||||
"Music": "Muzika",
|
|
||||||
"NameInstallFailed": "{0} instalacija je propala",
|
|
||||||
"NameSeasonNumber": "Sezona {0}",
|
|
||||||
"NameSeasonUnknown": "Sezona nepoznata",
|
|
||||||
"NewVersionIsAvailable": "Dostupna je nova verzija Jellyfin Servera za preuzimanje.",
|
|
||||||
"NotificationOptionApplicationUpdateAvailable": "Dostupno ažuriranje aplikacije",
|
|
||||||
"NotificationOptionApplicationUpdateInstalled": "Ažuriranje aplikacije instalirano",
|
|
||||||
"NotificationOptionAudioPlayback": "Pokrenuto je reproduciranje zvuka",
|
|
||||||
"NotificationOptionAudioPlaybackStopped": "Zaustavljeno je reproduciranje zvuka",
|
|
||||||
"NotificationOptionCameraImageUploaded": "Učitana slika s kamere",
|
|
||||||
"NotificationOptionInstallationFailed": "Neuspjeh instalacije",
|
|
||||||
"NotificationOptionNewLibraryContent": "Dodan novi sadržaj",
|
|
||||||
"NotificationOptionPluginError": "Neuspjeh dodatka",
|
|
||||||
"NotificationOptionPluginInstalled": "Dodatak je instaliran",
|
|
||||||
"NotificationOptionPluginUninstalled": "Dodatak je deinstaliran",
|
|
||||||
"NotificationOptionPluginUpdateInstalled": "Ažuriranje dodatka je instalirano",
|
|
||||||
"NotificationOptionServerRestartRequired": "Potreban je ponovni pokret servera",
|
|
||||||
"NotificationOptionTaskFailed": "Neuspjeh zakazane zadatke",
|
|
||||||
"NotificationOptionUserLockedOut": "Korisnik je zaključan",
|
|
||||||
"NotificationOptionVideoPlayback": "Pokrenuto je reproduciranje videa",
|
|
||||||
"NotificationOptionVideoPlaybackStopped": "Reprodukcija videa je zaustavljena",
|
|
||||||
"Plugin": "Plugin",
|
|
||||||
"PluginInstalledWithName": "{0} je instaliran",
|
|
||||||
"PluginUninstalledWithName": "{0} je deinstaliran",
|
|
||||||
"PluginUpdatedWithName": "{0} je ažurirano",
|
|
||||||
"ProviderValue": "Pružatelj: {0}",
|
|
||||||
"ScheduledTaskFailedWithName": "{0} nije uspjelo",
|
|
||||||
"ScheduledTaskStartedWithName": "{0} počelo",
|
|
||||||
"ServerNameNeedsToBeRestarted": "{0} treba ponovo pokrenuti",
|
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server se učitava. Molimo pokušajte ponovo za kratko vrijeme.",
|
|
||||||
"SubtitleDownloadFailureFromForItem": "Podtitlovi nisu uspjeli preuzeti sa {0} za {1}",
|
|
||||||
"Sync": "Sinkronizacija",
|
|
||||||
"System": "Sistem",
|
|
||||||
"TvShows": "TV serije",
|
|
||||||
"Undefined": "Nedefinirano",
|
|
||||||
"User": "Korisnik",
|
|
||||||
"UserCreatedWithName": "Korisnik {0} je kreiran",
|
|
||||||
"UserDeletedWithName": "Korisnik {0} je izbrisan",
|
|
||||||
"UserDownloadingItemWithValues": "{0} preuzima {1}",
|
|
||||||
"UserLockedOutWithName": "Korisnik {0} je zaključan",
|
|
||||||
"UserOfflineFromDevice": "{0} se odspojio od {1}",
|
|
||||||
"UserOnlineFromDevice": "{0} je online od {1}",
|
|
||||||
"UserPasswordChangedWithName": "Lozinka je promijenjena za korisnika {0}",
|
|
||||||
"UserPolicyUpdatedWithName": "Pravila za korisnike su ažurirana za {0}",
|
|
||||||
"UserStartedPlayingItemWithValues": "{0} igra protiv {1} na {2}",
|
|
||||||
"UserStoppedPlayingItemWithValues": "{0} je završio igru protiv {1} na {2}",
|
|
||||||
"ValueHasBeenAddedToLibrary": "{0} je dodan u vašu medijsku biblioteku",
|
|
||||||
"VersionNumber": "Verzija {0}",
|
|
||||||
"TasksMaintenanceCategory": "Održavanje",
|
|
||||||
"TasksLibraryCategory": "Biblioteka",
|
|
||||||
"TasksApplicationCategory": "Prijava",
|
|
||||||
"TasksChannelsCategory": "Internetski kanali",
|
|
||||||
"TaskCleanActivityLog": "Očisti dnevnik aktivnosti",
|
|
||||||
"TaskCleanActivityLogDescription": "Brisanje unosa u dnevnik aktivnosti starijih od konfigurisane starosti.",
|
|
||||||
"TaskCleanCache": "Očistite direktorij keša",
|
|
||||||
"TaskCleanCacheDescription": "Brisanje keš datoteka koje sistemu više nisu potrebne.",
|
|
||||||
"TaskRefreshChapterImages": "Izvadi slike iz poglavlja",
|
|
||||||
"TaskRefreshChapterImagesDescription": "Stvara minijature za videozapise koji imaju poglavlja.",
|
|
||||||
"TaskAudioNormalization": "Normalizacija zvuka",
|
|
||||||
"TaskAudioNormalizationDescription": "Skeneriše datoteke radi podataka za normalizaciju zvuka.",
|
|
||||||
"TaskRefreshLibrary": "Skenerisati medijsku biblioteku",
|
|
||||||
"TaskRefreshLibraryDescription": "Skenerira vašu medijsku biblioteku na nove datoteke i osvježava metapodatke.",
|
|
||||||
"TaskCleanLogs": "Očisti direktorij dnevnika",
|
|
||||||
"TaskCleanLogsDescription": "Brisanje dnevničkih datoteka starijih od {0} dana.",
|
|
||||||
"TaskRefreshPeople": "Osvježite ljude",
|
|
||||||
"TaskRefreshPeopleDescription": "Ažurira metapodatke za glumce i režisere u vašoj medijskoj biblioteci.",
|
|
||||||
"TaskRefreshTrickplayImages": "Generirajte Trickplay slike",
|
|
||||||
"TaskRefreshTrickplayImagesDescription": "Stvara pregled trik-igara za videozapise u omogućenim bibliotekama.",
|
|
||||||
"TaskUpdatePlugins": "Ažuriraj dodatke",
|
|
||||||
"TaskUpdatePluginsDescription": "Preuzima i instalira ažuriranja dodataka koji su konfigurisani da se automatski ažuriraju.",
|
|
||||||
"TaskCleanTranscode": "Očisti Transcode direktorij",
|
|
||||||
"TaskCleanTranscodeDescription": "Brisanje transkodiranih datoteka starijih od jednog dana.",
|
|
||||||
"TaskRefreshChannels": "Osvježi kanale",
|
|
||||||
"TaskRefreshChannelsDescription": "Osvježava informacije o internetskom kanalu.",
|
|
||||||
"TaskDownloadMissingLyrics": "Preuzmi nedostajuće tekstove",
|
|
||||||
"TaskDownloadMissingLyricsDescription": "Preuzmi tekstove pjesama",
|
|
||||||
"TaskDownloadMissingSubtitles": "Preuzmite nedostajuće titlove",
|
|
||||||
"TaskDownloadMissingSubtitlesDescription": "Pretražuje internet u potrazi za nedostajućim titlovima na osnovu konfiguracije metapodataka.",
|
|
||||||
"TaskOptimizeDatabase": "Optimizirajte bazu podataka",
|
|
||||||
"TaskOptimizeDatabaseDescription": "Komprimira bazu podataka i čisti slobodan prostor. Pokretanje ovog zadatka nakon skeniranja biblioteke ili izvođenja drugih promjena koje podrazumijevaju izmjene baze podataka može poboljšati performanse.",
|
|
||||||
"TaskKeyframeExtractor": "Izvađač ključnih sličica",
|
|
||||||
"TaskKeyframeExtractorDescription": "Izvlači ključne okvire iz video datoteka kako bi kreirao preciznije HLS playliste. Ovaj zadatak može trajati dugo.",
|
|
||||||
"TaskCleanCollectionsAndPlaylists": "Očistite kolekcije i playliste",
|
|
||||||
"TaskCleanCollectionsAndPlaylistsDescription": "Uklanja stavke iz kolekcija i playlista koje više ne postoje.",
|
|
||||||
"TaskExtractMediaSegments": "Analiza medijskog segmenta",
|
|
||||||
"TaskExtractMediaSegmentsDescription": "Izvlači ili dobija medijske segmente iz dodataka koji podržavaju MediaSegment.",
|
|
||||||
"TaskMoveTrickplayImages": "Migracija lokacije slike Trickplay",
|
|
||||||
"TaskMoveTrickplayImagesDescription": "Premješta postojeće datoteke trik-igara prema postavkama biblioteke.",
|
|
||||||
"CleanupUserDataTask": "Zadatak čišćenja korisničkih podataka",
|
|
||||||
"CleanupUserDataTaskDescription": "Čisti sve korisničke podatke (stanje praćenja, status omiljenog itd.) sa medija koji više nije prisutan najmanje 90 dana."
|
|
||||||
}
|
|
||||||
@@ -63,8 +63,8 @@
|
|||||||
"Photos": "Fotos",
|
"Photos": "Fotos",
|
||||||
"Playlists": "Llistes de reproducció",
|
"Playlists": "Llistes de reproducció",
|
||||||
"Plugin": "Complement",
|
"Plugin": "Complement",
|
||||||
"PluginInstalledWithName": "S'ha instal·lat {0}",
|
"PluginInstalledWithName": "{0} ha estat instal·lat",
|
||||||
"PluginUninstalledWithName": "S'ha desinstal·lat {0}",
|
"PluginUninstalledWithName": "S'ha instal·lat {0}",
|
||||||
"PluginUpdatedWithName": "S'ha actualitzat {0}",
|
"PluginUpdatedWithName": "S'ha actualitzat {0}",
|
||||||
"ProviderValue": "Proveïdor: {0}",
|
"ProviderValue": "Proveïdor: {0}",
|
||||||
"ScheduledTaskFailedWithName": "{0} ha fallat",
|
"ScheduledTaskFailedWithName": "{0} ha fallat",
|
||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Sèries",
|
"Shows": "Sèries",
|
||||||
"Songs": "Cançons",
|
"Songs": "Cançons",
|
||||||
"StartupEmbyServerIsLoading": "El servidor de Jellyfin s'està carregant. Proveu-ho de nou en una estona.",
|
"StartupEmbyServerIsLoading": "El servidor de Jellyfin s'està carregant. Proveu-ho de nou en una estona.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Els subtítols per a {1} no s'han pogut baixar de {0}",
|
"SubtitleDownloadFailureFromForItem": "Els subtítols per a {1} no s'han pogut baixar de {0}",
|
||||||
"Sync": "Sincronitza",
|
"Sync": "Sincronitza",
|
||||||
"System": "Sistema",
|
"System": "Sistema",
|
||||||
@@ -104,7 +105,7 @@
|
|||||||
"TaskCleanLogsDescription": "Esborra els registres que tinguin més de {0} dies.",
|
"TaskCleanLogsDescription": "Esborra els registres que tinguin més de {0} dies.",
|
||||||
"TaskCleanLogs": "Neteja dels registres",
|
"TaskCleanLogs": "Neteja dels registres",
|
||||||
"TaskRefreshLibraryDescription": "Escaneja les mediateques, a la cerca de fitxers nous i refresca les metadades.",
|
"TaskRefreshLibraryDescription": "Escaneja les mediateques, a la cerca de fitxers nous i refresca les metadades.",
|
||||||
"TaskRefreshLibrary": "Escaneja la mediateca",
|
"TaskRefreshLibrary": "Escaneig de les mediateques",
|
||||||
"TaskRefreshChapterImagesDescription": "Creació de les miniatures dels vídeos que tinguin capítols.",
|
"TaskRefreshChapterImagesDescription": "Creació de les miniatures dels vídeos que tinguin capítols.",
|
||||||
"TaskRefreshChapterImages": "Extracció de les imatges dels capítols",
|
"TaskRefreshChapterImages": "Extracció de les imatges dels capítols",
|
||||||
"TaskCleanCacheDescription": "Eliminació de la memòria cau no necessària per al servidor.",
|
"TaskCleanCacheDescription": "Eliminació de la memòria cau no necessària per al servidor.",
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Seriály",
|
"Shows": "Seriály",
|
||||||
"Songs": "Skladby",
|
"Songs": "Skladby",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server je spouštěn. Zkuste to prosím v brzké době znovu.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server je spouštěn. Zkuste to prosím v brzké době znovu.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Stahování titulků selhalo pro {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Stažení titulků pro {1} z {0} selhalo",
|
"SubtitleDownloadFailureFromForItem": "Stažení titulků pro {1} z {0} selhalo",
|
||||||
"Sync": "Synchronizace",
|
"Sync": "Synchronizace",
|
||||||
"System": "Systém",
|
"System": "Systém",
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
"CameraImageUploadedFrom": "Mae delwedd camera newydd wedi'i lanlwytho o {0}",
|
"CameraImageUploadedFrom": "Mae delwedd camera newydd wedi'i lanlwytho o {0}",
|
||||||
"Books": "Llyfrau",
|
"Books": "Llyfrau",
|
||||||
"AuthenticationSucceededWithUserName": "{0} wedi’i ddilysu’n llwyddiannus",
|
"AuthenticationSucceededWithUserName": "{0} wedi’i ddilysu’n llwyddiannus",
|
||||||
"Artists": "Crewyr",
|
"Artists": "Artistiaid",
|
||||||
"AppDeviceValues": "Ap: {0}, Dyfais: {1}",
|
"AppDeviceValues": "Ap: {0}, Dyfais: {1}",
|
||||||
"Albums": "Albwmau",
|
"Albums": "Albwmau",
|
||||||
"Genres": "Genres",
|
"Genres": "Genres",
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
"NotificationOptionAudioPlayback": "Dechreuwyd chwarae sain",
|
"NotificationOptionAudioPlayback": "Dechreuwyd chwarae sain",
|
||||||
"MessageServerConfigurationUpdated": "Mae gosodiadau gweinydd wedi'i ddiweddaru",
|
"MessageServerConfigurationUpdated": "Mae gosodiadau gweinydd wedi'i ddiweddaru",
|
||||||
"MessageNamedServerConfigurationUpdatedWithValue": "Mae adran gosodiadau gweinydd {0} wedi'i diweddaru",
|
"MessageNamedServerConfigurationUpdatedWithValue": "Mae adran gosodiadau gweinydd {0} wedi'i diweddaru",
|
||||||
"FailedLoginAttemptWithUserName": "Cais mewngofnodi wedi methu o {0}",
|
"FailedLoginAttemptWithUserName": "Cais mewngofnodi wedi methu gan {0}",
|
||||||
"ValueHasBeenAddedToLibrary": "{0} wedi'i hychwanegu at eich llyfrgell gyfryngau",
|
"ValueHasBeenAddedToLibrary": "{0} wedi'i hychwanegu at eich llyfrgell gyfryngau",
|
||||||
"UserStoppedPlayingItemWithValues": "{0} wedi gorffen chwarae {1} ar {2}",
|
"UserStoppedPlayingItemWithValues": "{0} wedi gorffen chwarae {1} ar {2}",
|
||||||
"UserStartedPlayingItemWithValues": "{0} yn chwarae {1} ar {2}",
|
"UserStartedPlayingItemWithValues": "{0} yn chwarae {1} ar {2}",
|
||||||
@@ -123,14 +123,5 @@
|
|||||||
"TaskRefreshChapterImages": "Echdynnu Lluniau Pennod",
|
"TaskRefreshChapterImages": "Echdynnu Lluniau Pennod",
|
||||||
"TaskCleanCacheDescription": "Dileu ffeiliau cache nad oes eu hangen ar y system mwyach.",
|
"TaskCleanCacheDescription": "Dileu ffeiliau cache nad oes eu hangen ar y system mwyach.",
|
||||||
"TaskCleanCache": "Gwaghau Ffolder Cache",
|
"TaskCleanCache": "Gwaghau Ffolder Cache",
|
||||||
"HearingImpaired": "Nam ar y clyw",
|
"HearingImpaired": "Nam ar y clyw"
|
||||||
"TaskAudioNormalization": "Gwastatau Sain",
|
|
||||||
"TaskAudioNormalizationDescription": "Yn sganio ffeiliau am ddata gwastatau sain.",
|
|
||||||
"TaskRefreshTrickplayImages": "Creuwch lluniau Trickplay",
|
|
||||||
"TaskRefreshTrickplayImagesDescription": "Creu rhagolygon Trickplay ar gyfer fideos mewn llyfrgelloedd gweithredol.",
|
|
||||||
"TaskDownloadMissingLyrics": "Lawrlwytho geiriau coll",
|
|
||||||
"TaskDownloadMissingLyricsDescription": "Lawrlwytho geiriau caneuon",
|
|
||||||
"TaskCleanCollectionsAndPlaylists": "Glanhau casgliadau a rhestrau chwarae",
|
|
||||||
"TaskCleanCollectionsAndPlaylistsDescription": "Dileu eitemau o gasgliadau a rhestrau chwarae sydd ddim yn bodoli bellach.",
|
|
||||||
"TaskExtractMediaSegments": "Sganio Darnau Cyfryngau"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Serier",
|
"Shows": "Serier",
|
||||||
"Songs": "Sange",
|
"Songs": "Sange",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin er i gang med at starte. Prøv igen om et øjeblik.",
|
"StartupEmbyServerIsLoading": "Jellyfin er i gang med at starte. Prøv igen om et øjeblik.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Fejlet i download af undertekster for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Undertekster kunne ikke hentes fra {0} til {1}",
|
"SubtitleDownloadFailureFromForItem": "Undertekster kunne ikke hentes fra {0} til {1}",
|
||||||
"Sync": "Synkroniser",
|
"Sync": "Synkroniser",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
|
|||||||
@@ -9,9 +9,9 @@
|
|||||||
"Channels": "Kanäle",
|
"Channels": "Kanäle",
|
||||||
"ChapterNameValue": "Kapitel {0}",
|
"ChapterNameValue": "Kapitel {0}",
|
||||||
"Collections": "Sammlungen",
|
"Collections": "Sammlungen",
|
||||||
"DeviceOfflineWithName": "{0} ist offline",
|
"DeviceOfflineWithName": "{0} hat die Verbindung getrennt",
|
||||||
"DeviceOnlineWithName": "{0} ist online",
|
"DeviceOnlineWithName": "{0} ist verbunden",
|
||||||
"FailedLoginAttemptWithUserName": "Anmeldung von {0} fehlgeschlagen",
|
"FailedLoginAttemptWithUserName": "Fehlgeschlagener Anmeldeversuch von {0}",
|
||||||
"Favorites": "Favoriten",
|
"Favorites": "Favoriten",
|
||||||
"Folders": "Verzeichnisse",
|
"Folders": "Verzeichnisse",
|
||||||
"Genres": "Genres",
|
"Genres": "Genres",
|
||||||
@@ -19,9 +19,9 @@
|
|||||||
"HeaderContinueWatching": "Weiterschauen",
|
"HeaderContinueWatching": "Weiterschauen",
|
||||||
"HeaderFavoriteAlbums": "Lieblingsalben",
|
"HeaderFavoriteAlbums": "Lieblingsalben",
|
||||||
"HeaderFavoriteArtists": "Lieblingsinterpreten",
|
"HeaderFavoriteArtists": "Lieblingsinterpreten",
|
||||||
"HeaderFavoriteEpisodes": "Lieblingsfolgen",
|
"HeaderFavoriteEpisodes": "Lieblingsepisoden",
|
||||||
"HeaderFavoriteShows": "Lieblingsserien",
|
"HeaderFavoriteShows": "Lieblingsserien",
|
||||||
"HeaderFavoriteSongs": "Lieblingssongs",
|
"HeaderFavoriteSongs": "Lieblingslieder",
|
||||||
"HeaderLiveTV": "Live TV",
|
"HeaderLiveTV": "Live TV",
|
||||||
"HeaderNextUp": "Als Nächstes",
|
"HeaderNextUp": "Als Nächstes",
|
||||||
"HeaderRecordingGroups": "Aufnahme-Gruppen",
|
"HeaderRecordingGroups": "Aufnahme-Gruppen",
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
"NewVersionIsAvailable": "Eine neue Jellyfin-Serverversion steht zum Download bereit.",
|
"NewVersionIsAvailable": "Eine neue Jellyfin-Serverversion steht zum Download bereit.",
|
||||||
"NotificationOptionApplicationUpdateAvailable": "Anwendungsaktualisierung verfügbar",
|
"NotificationOptionApplicationUpdateAvailable": "Anwendungsaktualisierung verfügbar",
|
||||||
"NotificationOptionApplicationUpdateInstalled": "Anwendungsaktualisierung installiert",
|
"NotificationOptionApplicationUpdateInstalled": "Anwendungsaktualisierung installiert",
|
||||||
"NotificationOptionAudioPlayback": "Audio wird abgespielt",
|
"NotificationOptionAudioPlayback": "Audiowiedergabe gestartet",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Audiowiedergabe gestoppt",
|
"NotificationOptionAudioPlaybackStopped": "Audiowiedergabe gestoppt",
|
||||||
"NotificationOptionCameraImageUploaded": "Foto hochgeladen",
|
"NotificationOptionCameraImageUploaded": "Foto hochgeladen",
|
||||||
"NotificationOptionInstallationFailed": "Installation fehlgeschlagen",
|
"NotificationOptionInstallationFailed": "Installation fehlgeschlagen",
|
||||||
@@ -57,8 +57,8 @@
|
|||||||
"NotificationOptionPluginUpdateInstalled": "Pluginaktualisierung installiert",
|
"NotificationOptionPluginUpdateInstalled": "Pluginaktualisierung installiert",
|
||||||
"NotificationOptionServerRestartRequired": "Serverneustart notwendig",
|
"NotificationOptionServerRestartRequired": "Serverneustart notwendig",
|
||||||
"NotificationOptionTaskFailed": "Geplante Aufgabe fehlgeschlagen",
|
"NotificationOptionTaskFailed": "Geplante Aufgabe fehlgeschlagen",
|
||||||
"NotificationOptionUserLockedOut": "Benutzer gesperrt",
|
"NotificationOptionUserLockedOut": "Benutzer ausgeschlossen",
|
||||||
"NotificationOptionVideoPlayback": "Video wird abgespielt",
|
"NotificationOptionVideoPlayback": "Videowiedergabe gestartet",
|
||||||
"NotificationOptionVideoPlaybackStopped": "Videowiedergabe gestoppt",
|
"NotificationOptionVideoPlaybackStopped": "Videowiedergabe gestoppt",
|
||||||
"Photos": "Fotos",
|
"Photos": "Fotos",
|
||||||
"Playlists": "Wiedergabelisten",
|
"Playlists": "Wiedergabelisten",
|
||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Serien",
|
"Shows": "Serien",
|
||||||
"Songs": "Lieder",
|
"Songs": "Lieder",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin-Server lädt. Bitte versuche es gleich noch einmal.",
|
"StartupEmbyServerIsLoading": "Jellyfin-Server lädt. Bitte versuche es gleich noch einmal.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Download der Untertitel fehlgeschlagen für {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Untertitel von {0} für {1} konnten nicht heruntergeladen werden",
|
"SubtitleDownloadFailureFromForItem": "Untertitel von {0} für {1} konnten nicht heruntergeladen werden",
|
||||||
"Sync": "Synchronisation",
|
"Sync": "Synchronisation",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
@@ -81,7 +82,7 @@
|
|||||||
"UserCreatedWithName": "Benutzer {0} wurde erstellt",
|
"UserCreatedWithName": "Benutzer {0} wurde erstellt",
|
||||||
"UserDeletedWithName": "Benutzer {0} wurde gelöscht",
|
"UserDeletedWithName": "Benutzer {0} wurde gelöscht",
|
||||||
"UserDownloadingItemWithValues": "{0} lädt {1} herunter",
|
"UserDownloadingItemWithValues": "{0} lädt {1} herunter",
|
||||||
"UserLockedOutWithName": "Benutzer {0} wurde gesperrt",
|
"UserLockedOutWithName": "Benutzer {0} wurde ausgeschlossen",
|
||||||
"UserOfflineFromDevice": "{0} wurde getrennt von {1}",
|
"UserOfflineFromDevice": "{0} wurde getrennt von {1}",
|
||||||
"UserOnlineFromDevice": "{0} ist online von {1}",
|
"UserOnlineFromDevice": "{0} ist online von {1}",
|
||||||
"UserPasswordChangedWithName": "Das Passwort für Benutzer {0} wurde geändert",
|
"UserPasswordChangedWithName": "Das Passwort für Benutzer {0} wurde geändert",
|
||||||
@@ -96,25 +97,25 @@
|
|||||||
"TaskRefreshChannelsDescription": "Aktualisiert Internet-Kanal-Informationen.",
|
"TaskRefreshChannelsDescription": "Aktualisiert Internet-Kanal-Informationen.",
|
||||||
"TaskRefreshChannels": "Kanäle aktualisieren",
|
"TaskRefreshChannels": "Kanäle aktualisieren",
|
||||||
"TaskCleanTranscodeDescription": "Löscht Transkodierungsdateien, die älter als einen Tag sind.",
|
"TaskCleanTranscodeDescription": "Löscht Transkodierungsdateien, die älter als einen Tag sind.",
|
||||||
"TaskCleanTranscode": "Transkodierungsverzeichnis leeren",
|
"TaskCleanTranscode": "Transkodierungs-Verzeichnis aufräumen",
|
||||||
"TaskUpdatePluginsDescription": "Lädt Updates für Plugins herunter, welche für automatische Updates konfiguriert sind und installiert diese.",
|
"TaskUpdatePluginsDescription": "Lädt Updates für Plugins herunter, welche für automatische Updates konfiguriert sind und installiert diese.",
|
||||||
"TaskUpdatePlugins": "Plugins aktualisieren",
|
"TaskUpdatePlugins": "Plugins aktualisieren",
|
||||||
"TaskRefreshPeopleDescription": "Aktualisiert Metadaten für Schauspieler und Regisseure in deinen Bibliotheken.",
|
"TaskRefreshPeopleDescription": "Aktualisiert Metadaten für Schauspieler und Regisseure in deinen Bibliotheken.",
|
||||||
"TaskRefreshPeople": "Personen aktualisieren",
|
"TaskRefreshPeople": "Personen aktualisieren",
|
||||||
"TaskCleanLogsDescription": "Lösche Log-Dateien, die älter als {0} Tage sind.",
|
"TaskCleanLogsDescription": "Lösche Log-Dateien, die älter als {0} Tage sind.",
|
||||||
"TaskCleanLogs": "Protokollverzeichnis leeren",
|
"TaskCleanLogs": "Log-Verzeichnis aufräumen",
|
||||||
"TaskRefreshLibraryDescription": "Durchsucht deine Medienbibliothek nach neuen Dateien und aktualisiert Metadaten.",
|
"TaskRefreshLibraryDescription": "Durchsucht alle Bibliotheken nach neu hinzugefügten Dateien und aktualisiert Metadaten.",
|
||||||
"TaskRefreshLibrary": "Medien-Bibliothek scannen",
|
"TaskRefreshLibrary": "Medien-Bibliothek scannen",
|
||||||
"TaskRefreshChapterImagesDescription": "Erstellt Vorschaubilder für Videokapitel.",
|
"TaskRefreshChapterImagesDescription": "Erstellt Vorschaubilder für Videos, die Kapitel besitzen.",
|
||||||
"TaskRefreshChapterImages": "Kapitelvorschauen erstellen",
|
"TaskRefreshChapterImages": "Kapitel-Bilder extrahieren",
|
||||||
"TaskCleanCacheDescription": "Löscht Cache-Dateien, die vom System nicht mehr benötigt werden.",
|
"TaskCleanCacheDescription": "Löscht vom System nicht mehr benötigte Zwischenspeicherdateien.",
|
||||||
"TaskCleanCache": "Cache-Verzeichnis leeren",
|
"TaskCleanCache": "Zwischenspeicher-Verzeichnis aufräumen",
|
||||||
"TasksChannelsCategory": "Internet-Kanäle",
|
"TasksChannelsCategory": "Internet-Kanäle",
|
||||||
"TasksApplicationCategory": "Anwendung",
|
"TasksApplicationCategory": "Anwendung",
|
||||||
"TasksLibraryCategory": "Bibliothek",
|
"TasksLibraryCategory": "Bibliothek",
|
||||||
"TasksMaintenanceCategory": "Wartung",
|
"TasksMaintenanceCategory": "Wartung",
|
||||||
"TaskCleanActivityLogDescription": "Löscht Aktivitätsprotokolleinträge, die älter als das konfigurierte Alter sind.",
|
"TaskCleanActivityLogDescription": "Löscht Aktivitätsprotokolleinträge, die älter als das konfigurierte Alter sind.",
|
||||||
"TaskCleanActivityLog": "Aktivitätsverlauf bereinigen",
|
"TaskCleanActivityLog": "Aktivitätsprotokolle aufräumen",
|
||||||
"Undefined": "Undefiniert",
|
"Undefined": "Undefiniert",
|
||||||
"Forced": "Erzwungen",
|
"Forced": "Erzwungen",
|
||||||
"Default": "Standard",
|
"Default": "Standard",
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Σειρές",
|
"Shows": "Σειρές",
|
||||||
"Songs": "Τραγούδια",
|
"Songs": "Τραγούδια",
|
||||||
"StartupEmbyServerIsLoading": "Ο διακομιστής Jellyfin φορτώνει. Περιμένετε λίγο και δοκιμάστε ξανά.",
|
"StartupEmbyServerIsLoading": "Ο διακομιστής Jellyfin φορτώνει. Περιμένετε λίγο και δοκιμάστε ξανά.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Οι υπότιτλοι απέτυχαν να κατέβουν για {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Αποτυχίες μεταφόρτωσης υποτίτλων από {0} για {1}",
|
"SubtitleDownloadFailureFromForItem": "Αποτυχίες μεταφόρτωσης υποτίτλων από {0} για {1}",
|
||||||
"Sync": "Συγχρονισμός",
|
"Sync": "Συγχρονισμός",
|
||||||
"System": "Σύστημα",
|
"System": "Σύστημα",
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Shows",
|
"Shows": "Shows",
|
||||||
"Songs": "Songs",
|
"Songs": "Songs",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server is loading. Please try again shortly.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server is loading. Please try again shortly.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Subtitles failed to download from {0} for {1}",
|
"SubtitleDownloadFailureFromForItem": "Subtitles failed to download from {0} for {1}",
|
||||||
"Sync": "Sync",
|
"Sync": "Sync",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
"HeaderFavoriteAlbums": "Álbumes favoritos",
|
"HeaderFavoriteAlbums": "Álbumes favoritos",
|
||||||
"HeaderFavoriteArtists": "Artistas favoritos",
|
"HeaderFavoriteArtists": "Artistas favoritos",
|
||||||
"HeaderFavoriteEpisodes": "Capítulos favoritos",
|
"HeaderFavoriteEpisodes": "Capítulos favoritos",
|
||||||
"HeaderFavoriteShows": "Series favoritas",
|
"HeaderFavoriteShows": "Programas favoritos",
|
||||||
"HeaderFavoriteSongs": "Canciones favoritas",
|
"HeaderFavoriteSongs": "Canciones favoritas",
|
||||||
"HeaderLiveTV": "TV en vivo",
|
"HeaderLiveTV": "TV en vivo",
|
||||||
"HeaderNextUp": "Siguiente",
|
"HeaderNextUp": "Siguiente",
|
||||||
@@ -70,9 +70,10 @@
|
|||||||
"ScheduledTaskFailedWithName": "{0} falló",
|
"ScheduledTaskFailedWithName": "{0} falló",
|
||||||
"ScheduledTaskStartedWithName": "{0} iniciado",
|
"ScheduledTaskStartedWithName": "{0} iniciado",
|
||||||
"ServerNameNeedsToBeRestarted": "{0} necesita ser reiniciado",
|
"ServerNameNeedsToBeRestarted": "{0} necesita ser reiniciado",
|
||||||
"Shows": "Series",
|
"Shows": "Programas",
|
||||||
"Songs": "Canciones",
|
"Songs": "Canciones",
|
||||||
"StartupEmbyServerIsLoading": "El servidor Jellyfin se está cargando. Vuelve a intentarlo en breve.",
|
"StartupEmbyServerIsLoading": "El servidor Jellyfin se está cargando. Vuelve a intentarlo en breve.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Falló la descarga de subtitulos desde {0} para {1}",
|
"SubtitleDownloadFailureFromForItem": "Falló la descarga de subtitulos desde {0} para {1}",
|
||||||
"Sync": "Sincronizar",
|
"Sync": "Sincronizar",
|
||||||
"System": "Sistema",
|
"System": "Sistema",
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
"ItemAddedWithName": "{0} fue agregado a la biblioteca",
|
"ItemAddedWithName": "{0} fue agregado a la biblioteca",
|
||||||
"ItemRemovedWithName": "{0} fue removido de la biblioteca",
|
"ItemRemovedWithName": "{0} fue removido de la biblioteca",
|
||||||
"LabelIpAddressValue": "Dirección IP: {0}",
|
"LabelIpAddressValue": "Dirección IP: {0}",
|
||||||
"LabelRunningTimeValue": "Tiempo corriendo: {0}",
|
"LabelRunningTimeValue": "Tiempo de reproducción: {0}",
|
||||||
"Latest": "Recientes",
|
"Latest": "Recientes",
|
||||||
"MessageApplicationUpdated": "El servidor Jellyfin ha sido actualizado",
|
"MessageApplicationUpdated": "El servidor Jellyfin ha sido actualizado",
|
||||||
"MessageApplicationUpdatedTo": "El servidor Jellyfin ha sido actualizado a {0}",
|
"MessageApplicationUpdatedTo": "El servidor Jellyfin ha sido actualizado a {0}",
|
||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Programas",
|
"Shows": "Programas",
|
||||||
"Songs": "Canciones",
|
"Songs": "Canciones",
|
||||||
"StartupEmbyServerIsLoading": "El servidor Jellyfin está cargando. Por favor, intente de nuevo pronto.",
|
"StartupEmbyServerIsLoading": "El servidor Jellyfin está cargando. Por favor, intente de nuevo pronto.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Falló la descarga de subtítulos para {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Falló la descarga de subtítulos desde {0} para {1}",
|
"SubtitleDownloadFailureFromForItem": "Falló la descarga de subtítulos desde {0} para {1}",
|
||||||
"Sync": "Sincronizar",
|
"Sync": "Sincronizar",
|
||||||
"System": "Sistema",
|
"System": "Sistema",
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Series",
|
"Shows": "Series",
|
||||||
"Songs": "Canciones",
|
"Songs": "Canciones",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server se está cargando. Vuelve a intentarlo en breve.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server se está cargando. Vuelve a intentarlo en breve.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Error al descargar subtítulos para {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Fallo en la descarga de subtítulos desde {0} para {1}",
|
"SubtitleDownloadFailureFromForItem": "Fallo en la descarga de subtítulos desde {0} para {1}",
|
||||||
"Sync": "Sincronizar",
|
"Sync": "Sincronizar",
|
||||||
"System": "Sistema",
|
"System": "Sistema",
|
||||||
|
|||||||
@@ -72,7 +72,7 @@
|
|||||||
"NotificationOptionApplicationUpdateAvailable": "Rakenduse uuendus on saadaval",
|
"NotificationOptionApplicationUpdateAvailable": "Rakenduse uuendus on saadaval",
|
||||||
"NewVersionIsAvailable": "Jellyfin serveri uus versioon on allalaadimiseks saadaval.",
|
"NewVersionIsAvailable": "Jellyfin serveri uus versioon on allalaadimiseks saadaval.",
|
||||||
"NameSeasonUnknown": "Tundmatu hooaeg",
|
"NameSeasonUnknown": "Tundmatu hooaeg",
|
||||||
"NameSeasonNumber": "{0}. hooaeg",
|
"NameSeasonNumber": "Hooaeg {0}",
|
||||||
"NameInstallFailed": "{0} paigaldamine nurjus",
|
"NameInstallFailed": "{0} paigaldamine nurjus",
|
||||||
"MusicVideos": "Muusikavideod",
|
"MusicVideos": "Muusikavideod",
|
||||||
"Music": "Muusika",
|
"Music": "Muusika",
|
||||||
@@ -133,9 +133,9 @@
|
|||||||
"TaskDownloadMissingLyrics": "Hangi puuduvad laulusõnad",
|
"TaskDownloadMissingLyrics": "Hangi puuduvad laulusõnad",
|
||||||
"TaskDownloadMissingLyricsDescription": "Laulusõnade allalaadimine",
|
"TaskDownloadMissingLyricsDescription": "Laulusõnade allalaadimine",
|
||||||
"TaskMoveTrickplayImagesDescription": "Liigutab trickplay pildid meediakogu sätete kohaselt.",
|
"TaskMoveTrickplayImagesDescription": "Liigutab trickplay pildid meediakogu sätete kohaselt.",
|
||||||
"TaskExtractMediaSegments": "Skaneeri meedialõike",
|
"TaskExtractMediaSegments": "Skaneeri meediasegmente",
|
||||||
"TaskExtractMediaSegmentsDescription": "Eraldab või võtab meedialõigud MediaSegment'i toega pluginatest.",
|
"TaskExtractMediaSegmentsDescription": "Eraldab või võtab meediasegmendid MediaSegment'i lubavatest pluginatest.",
|
||||||
"TaskMoveTrickplayImages": "Muuda trickplay piltide asukoht",
|
"TaskMoveTrickplayImages": "Muuda trickplay piltide asukoht",
|
||||||
"CleanupUserDataTask": "Puhasta kasutajaandmed",
|
"CleanupUserDataTask": "Puhasta kasutajaandmed",
|
||||||
"CleanupUserDataTaskDescription": "Puhastab kõik kasutajaandmed (vaatamise olek, lemmikute olek jne) meediast, mida pole enam vähemalt 90 päeva saadaval olnud."
|
"CleanupUserDataTaskDescription": "Puhastab kõik kasutajaandmed (vaatamise olek, lemmikute olek jne) meediast, mis pole enam vähemalt 90 päeva saadaval olnud."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "سریالها",
|
"Shows": "سریالها",
|
||||||
"Songs": "موسیقیها",
|
"Songs": "موسیقیها",
|
||||||
"StartupEmbyServerIsLoading": "سرور Jellyfin در حال بارگیری است. لطفا کمی بعد دوباره تلاش کنید.",
|
"StartupEmbyServerIsLoading": "سرور Jellyfin در حال بارگیری است. لطفا کمی بعد دوباره تلاش کنید.",
|
||||||
|
"SubtitleDownloadFailureForItem": "دانلود زیرنویس برای {0} ناموفق بود",
|
||||||
"SubtitleDownloadFailureFromForItem": "بارگیری زیرنویس برای {1} از {0} شکست خورد",
|
"SubtitleDownloadFailureFromForItem": "بارگیری زیرنویس برای {1} از {0} شکست خورد",
|
||||||
"Sync": "همگامسازی",
|
"Sync": "همگامسازی",
|
||||||
"System": "سیستم",
|
"System": "سیستم",
|
||||||
|
|||||||
@@ -39,8 +39,8 @@
|
|||||||
"Channels": "Kanavat",
|
"Channels": "Kanavat",
|
||||||
"CameraImageUploadedFrom": "Uusi kameran kuva on sirretty lähteestä {0}",
|
"CameraImageUploadedFrom": "Uusi kameran kuva on sirretty lähteestä {0}",
|
||||||
"Books": "Kirjat",
|
"Books": "Kirjat",
|
||||||
"AuthenticationSucceededWithUserName": "{0} todennus onnistunut",
|
"AuthenticationSucceededWithUserName": "{0} on todennettu",
|
||||||
"Artists": "Artistit",
|
"Artists": "Esittäjät",
|
||||||
"Application": "Sovellus",
|
"Application": "Sovellus",
|
||||||
"AppDeviceValues": "Sovellus: {0}, Laite: {1}",
|
"AppDeviceValues": "Sovellus: {0}, Laite: {1}",
|
||||||
"Albums": "Albumit",
|
"Albums": "Albumit",
|
||||||
|
|||||||
@@ -14,9 +14,5 @@
|
|||||||
"DeviceOnlineWithName": "{0} er sambundið",
|
"DeviceOnlineWithName": "{0} er sambundið",
|
||||||
"Favorites": "Yndis",
|
"Favorites": "Yndis",
|
||||||
"Folders": "Mappur",
|
"Folders": "Mappur",
|
||||||
"Forced": "Kravt",
|
"Forced": "Kravt"
|
||||||
"FailedLoginAttemptWithUserName": "Miseydnað innritanarroynd frá {0}",
|
|
||||||
"HeaderFavoriteEpisodes": "Yndispartar",
|
|
||||||
"HeaderFavoriteSongs": "Yndissangir",
|
|
||||||
"LabelIpAddressValue": "IP atsetur: {0}"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Séries",
|
"Shows": "Séries",
|
||||||
"Songs": "Chansons",
|
"Songs": "Chansons",
|
||||||
"StartupEmbyServerIsLoading": "Serveur Jellyfin en cours de chargement. Réessayez dans quelques instants.",
|
"StartupEmbyServerIsLoading": "Serveur Jellyfin en cours de chargement. Réessayez dans quelques instants.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Échec du téléchargement des sous-titres depuis {0} pour {1}",
|
"SubtitleDownloadFailureFromForItem": "Échec du téléchargement des sous-titres depuis {0} pour {1}",
|
||||||
"Sync": "Synchroniser",
|
"Sync": "Synchroniser",
|
||||||
"System": "Système",
|
"System": "Système",
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Séries",
|
"Shows": "Séries",
|
||||||
"Songs": "Chansons",
|
"Songs": "Chansons",
|
||||||
"StartupEmbyServerIsLoading": "Le serveur Jellyfin est en cours de chargement. Veuillez réessayer dans quelques instants.",
|
"StartupEmbyServerIsLoading": "Le serveur Jellyfin est en cours de chargement. Veuillez réessayer dans quelques instants.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Le téléchargement des sous-titres pour {0} a échoué.",
|
||||||
"SubtitleDownloadFailureFromForItem": "Échec du téléchargement des sous-titres depuis {0} pour {1}",
|
"SubtitleDownloadFailureFromForItem": "Échec du téléchargement des sous-titres depuis {0} pour {1}",
|
||||||
"Sync": "Synchroniser",
|
"Sync": "Synchroniser",
|
||||||
"System": "Système",
|
"System": "Système",
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"Collections": "Sammlungen",
|
"Collections": "Sammlungen",
|
||||||
"DeviceOfflineWithName": "{0} wurde getrennt",
|
"DeviceOfflineWithName": "{0} wurde getrennt",
|
||||||
"DeviceOnlineWithName": "{0} ist verbunden",
|
"DeviceOnlineWithName": "{0} ist verbunden",
|
||||||
"FailedLoginAttemptWithUserName": "Fählgschlagene Ameldeversuech vo {0}",
|
"FailedLoginAttemptWithUserName": "Fehlgeschlagener Anmeldeversuch von {0}",
|
||||||
"Favorites": "Favorite",
|
"Favorites": "Favorite",
|
||||||
"Folders": "Ordner",
|
"Folders": "Ordner",
|
||||||
"Genres": "Genre",
|
"Genres": "Genre",
|
||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Serie",
|
"Shows": "Serie",
|
||||||
"Songs": "Lieder",
|
"Songs": "Lieder",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server ladt. Bitte grad noeinisch probiere.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server ladt. Bitte grad noeinisch probiere.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Ondertetle vo {0} för {1} hend ned chönne abeglade wärde",
|
"SubtitleDownloadFailureFromForItem": "Ondertetle vo {0} för {1} hend ned chönne abeglade wärde",
|
||||||
"Sync": "Synchronisation",
|
"Sync": "Synchronisation",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "סדרות",
|
"Shows": "סדרות",
|
||||||
"Songs": "שירים",
|
"Songs": "שירים",
|
||||||
"StartupEmbyServerIsLoading": "שרת Jellyfin בתהליך טעינה. נא לנסות שוב בקרוב.",
|
"StartupEmbyServerIsLoading": "שרת Jellyfin בתהליך טעינה. נא לנסות שוב בקרוב.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "הורדת כתוביות מ־{0} עבור {1} נכשלה",
|
"SubtitleDownloadFailureFromForItem": "הורדת כתוביות מ־{0} עבור {1} נכשלה",
|
||||||
"Sync": "סנכרון",
|
"Sync": "סנכרון",
|
||||||
"System": "מערכת",
|
"System": "מערכת",
|
||||||
|
|||||||
@@ -1,27 +1 @@
|
|||||||
{
|
{}
|
||||||
"Books": "ספרים",
|
|
||||||
"NameSeasonNumber": "עונה {0}",
|
|
||||||
"Channels": "ערוצים",
|
|
||||||
"Movies": "סרטים",
|
|
||||||
"Music": "מוזיקה",
|
|
||||||
"Collections": "אוספים",
|
|
||||||
"Albums": "אלבומים",
|
|
||||||
"Application": "אפליקציה",
|
|
||||||
"Artists": "אמנים",
|
|
||||||
"ChapterNameValue": "פרק {0}",
|
|
||||||
"External": "חיצונית",
|
|
||||||
"Favorites": "מועדפים",
|
|
||||||
"Folders": "תיקיות",
|
|
||||||
"Genres": "ז'אנרים",
|
|
||||||
"HeaderAlbumArtists": "אמני אלבומים",
|
|
||||||
"HeaderContinueWatching": "להמשיך לצפות",
|
|
||||||
"HeaderFavoriteAlbums": "אלבומים אהובים",
|
|
||||||
"HeaderFavoriteArtists": "אמנים אהובים",
|
|
||||||
"HeaderFavoriteEpisodes": "פרקים אהובים",
|
|
||||||
"HeaderFavoriteShows": "תוכניות אהובות",
|
|
||||||
"HeaderFavoriteSongs": "שירים אהובים",
|
|
||||||
"HeaderLiveTV": "טלוויזיה בשידור חי",
|
|
||||||
"HeaderNextUp": "הבא",
|
|
||||||
"HearingImpaired": "ללקויי שמיעה",
|
|
||||||
"HomeVideos": "סרטונים ביתיים"
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -127,14 +127,7 @@
|
|||||||
"TaskRefreshTrickplayImages": "ट्रिकप्लै चित्रों को सृजन करे",
|
"TaskRefreshTrickplayImages": "ट्रिकप्लै चित्रों को सृजन करे",
|
||||||
"TaskRefreshTrickplayImagesDescription": "नियत संग्रहों में चलचित्रों का ट्रीकप्लै दर्शनों को सृजन करे.",
|
"TaskRefreshTrickplayImagesDescription": "नियत संग्रहों में चलचित्रों का ट्रीकप्लै दर्शनों को सृजन करे.",
|
||||||
"TaskAudioNormalization": "श्रव्य सामान्यीकरण",
|
"TaskAudioNormalization": "श्रव्य सामान्यीकरण",
|
||||||
"TaskAudioNormalizationDescription": "श्रव्य सामान्यीकरण के लिए फाइलें अन्वेषण करें।",
|
"TaskAudioNormalizationDescription": "श्रव्य सामान्यीकरण के लिए फाइलें अन्वेषण करें",
|
||||||
"TaskDownloadMissingLyrics": "लापता गानों के बोल डाउनलोड करेँ",
|
"TaskDownloadMissingLyrics": "लापता गानों के बोल डाउनलोड करेँ",
|
||||||
"TaskDownloadMissingLyricsDescription": "गानों के बोल डाउनलोड करता है",
|
"TaskDownloadMissingLyricsDescription": "गानों के बोल डाउनलोड करता है"
|
||||||
"TaskExtractMediaSegments": "मीडिया सेगमेंट स्कैन",
|
|
||||||
"TaskExtractMediaSegmentsDescription": "मीडियासेगमेंट सक्षम प्लगइन्स से मीडिया सेगमेंट निकालता है या प्राप्त करता है।",
|
|
||||||
"TaskMoveTrickplayImages": "ट्रिकप्ले छवि स्थान माइग्रेट करें",
|
|
||||||
"TaskMoveTrickplayImagesDescription": "लाइब्रेरी सेटिंग्स के अनुसार मौजूदा ट्रिकप्ले फ़ाइलों को स्थानांतरित करता है।",
|
|
||||||
"TaskCleanCollectionsAndPlaylistsDescription": "संग्रहों और प्लेलिस्टों से उन आइटमों को हटाता है जो अब मौजूद नहीं हैं।",
|
|
||||||
"TaskCleanCollectionsAndPlaylists": "संग्रह और प्लेलिस्ट साफ़ करें",
|
|
||||||
"CleanupUserDataTask": "यूज़र डेटा सफाई कार्य"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
"CameraImageUploadedFrom": "Nova fotografija sa kamere je učitana iz {0}",
|
"CameraImageUploadedFrom": "Nova fotografija sa kamere je učitana iz {0}",
|
||||||
"Channels": "Kanali",
|
"Channels": "Kanali",
|
||||||
"ChapterNameValue": "Poglavlje {0}",
|
"ChapterNameValue": "Poglavlje {0}",
|
||||||
"Collections": "Zbirke",
|
"Collections": "Kolekcije",
|
||||||
"DeviceOfflineWithName": "{0} je prekinuo vezu",
|
"DeviceOfflineWithName": "{0} je prekinuo vezu",
|
||||||
"DeviceOnlineWithName": "{0} je povezan",
|
"DeviceOnlineWithName": "{0} je povezan",
|
||||||
"FailedLoginAttemptWithUserName": "Neuspješan pokušaj prijave od {0}",
|
"FailedLoginAttemptWithUserName": "Neuspješan pokušaj prijave od {0}",
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
"HeaderFavoriteShows": "Omiljene serije",
|
"HeaderFavoriteShows": "Omiljene serije",
|
||||||
"HeaderFavoriteSongs": "Omiljene pjesme",
|
"HeaderFavoriteSongs": "Omiljene pjesme",
|
||||||
"HeaderLiveTV": "TV uživo",
|
"HeaderLiveTV": "TV uživo",
|
||||||
"HeaderNextUp": "Sljedeće na redu",
|
"HeaderNextUp": "Slijedi",
|
||||||
"HeaderRecordingGroups": "Grupa snimka",
|
"HeaderRecordingGroups": "Grupa snimka",
|
||||||
"HomeVideos": "Kućni video",
|
"HomeVideos": "Kućni video",
|
||||||
"Inherit": "Naslijedi",
|
"Inherit": "Naslijedi",
|
||||||
@@ -70,13 +70,14 @@
|
|||||||
"ScheduledTaskFailedWithName": "{0} neuspjelo",
|
"ScheduledTaskFailedWithName": "{0} neuspjelo",
|
||||||
"ScheduledTaskStartedWithName": "{0} pokrenuto",
|
"ScheduledTaskStartedWithName": "{0} pokrenuto",
|
||||||
"ServerNameNeedsToBeRestarted": "{0} treba ponovno pokrenuti",
|
"ServerNameNeedsToBeRestarted": "{0} treba ponovno pokrenuti",
|
||||||
"Shows": "Emisije",
|
"Shows": "Serije",
|
||||||
"Songs": "Pjesme",
|
"Songs": "Pjesme",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin server se učitava. Pokušajte ponovo uskoro.",
|
"StartupEmbyServerIsLoading": "Jellyfin server se učitava. Pokušajte ponovo uskoro.",
|
||||||
"SubtitleDownloadFailureFromForItem": "Titlovi nisu uspješno preuzeti od {0} za {1}",
|
"SubtitleDownloadFailureForItem": "Titlovi prijevoda nisu preuzeti za {0}",
|
||||||
|
"SubtitleDownloadFailureFromForItem": "Prijevod nije uspješno preuzet od {0} za {1}",
|
||||||
"Sync": "Sinkronizacija",
|
"Sync": "Sinkronizacija",
|
||||||
"System": "Sustav",
|
"System": "Sustav",
|
||||||
"TvShows": "TV emisije",
|
"TvShows": "Serije",
|
||||||
"User": "Korisnik",
|
"User": "Korisnik",
|
||||||
"UserCreatedWithName": "Korisnik {0} je kreiran",
|
"UserCreatedWithName": "Korisnik {0} je kreiran",
|
||||||
"UserDeletedWithName": "Korisnik {0} je obrisan",
|
"UserDeletedWithName": "Korisnik {0} je obrisan",
|
||||||
@@ -88,26 +89,26 @@
|
|||||||
"UserPolicyUpdatedWithName": "Pravila za korisnika ažurirana su za {0}",
|
"UserPolicyUpdatedWithName": "Pravila za korisnika ažurirana su za {0}",
|
||||||
"UserStartedPlayingItemWithValues": "{0} je pokrenuo reprodukciju {1} na {2}",
|
"UserStartedPlayingItemWithValues": "{0} je pokrenuo reprodukciju {1} na {2}",
|
||||||
"UserStoppedPlayingItemWithValues": "{0} je završio reprodukciju {1} na {2}",
|
"UserStoppedPlayingItemWithValues": "{0} je završio reprodukciju {1} na {2}",
|
||||||
"ValueHasBeenAddedToLibrary": "{0} je dodano u biblioteku medija",
|
"ValueHasBeenAddedToLibrary": "{0} je dodano u medijsku biblioteku",
|
||||||
"ValueSpecialEpisodeName": "Posebno – {0}",
|
"ValueSpecialEpisodeName": "Posebno - {0}",
|
||||||
"VersionNumber": "Verzija {0}",
|
"VersionNumber": "Verzija {0}",
|
||||||
"TaskRefreshLibraryDescription": "Skenira biblioteku medija radi novih datoteka i osvježava metapodatke.",
|
"TaskRefreshLibraryDescription": "Skenira medijsku biblioteku radi novih datoteka i osvježava metapodatke.",
|
||||||
"TaskRefreshLibrary": "Skeniraj biblioteku medija",
|
"TaskRefreshLibrary": "Skeniraj medijsku biblioteku",
|
||||||
"TaskRefreshChapterImagesDescription": "Kreira sličice za videozapise koji imaju poglavlja.",
|
"TaskRefreshChapterImagesDescription": "Kreira sličice za videozapise koji imaju poglavlja.",
|
||||||
"TaskRefreshChapterImages": "Izdvoji slike poglavlja",
|
"TaskRefreshChapterImages": "Izdvoji slike poglavlja",
|
||||||
"TaskCleanCacheDescription": "Briše nepotrebne datoteke iz predmemorije.",
|
"TaskCleanCacheDescription": "Briše nepotrebne datoteke iz predmemorije.",
|
||||||
"TaskCleanCache": "Očisti mapu predmemorije",
|
"TaskCleanCache": "Očisti mapu predmemorije",
|
||||||
"TasksApplicationCategory": "Aplikacija",
|
"TasksApplicationCategory": "Aplikacija",
|
||||||
"TasksMaintenanceCategory": "Održavanje",
|
"TasksMaintenanceCategory": "Održavanje",
|
||||||
"TaskDownloadMissingSubtitlesDescription": "Pretraži internet za nedsotajućim titlovima ne osnovi konfiguracije metapodataka.",
|
"TaskDownloadMissingSubtitlesDescription": "Pretraži Internet za prijevodima koji nedostaju prema konfiguraciji metapodataka.",
|
||||||
"TaskDownloadMissingSubtitles": "Preuzmi nedostajuće titlove",
|
"TaskDownloadMissingSubtitles": "Preuzmi prijevod koji nedostaje",
|
||||||
"TaskRefreshChannelsDescription": "Osvježava informacije Internet kanala.",
|
"TaskRefreshChannelsDescription": "Osvježava informacije Internet kanala.",
|
||||||
"TaskRefreshChannels": "Osvježi kanale",
|
"TaskRefreshChannels": "Osvježi kanale",
|
||||||
"TaskCleanTranscodeDescription": "Briše transkodirane datoteke starije od jednog dana.",
|
"TaskCleanTranscodeDescription": "Briše transkodirane datoteke starije od jednog dana.",
|
||||||
"TaskCleanTranscode": "Očisti mapu transkodiranja",
|
"TaskCleanTranscode": "Očisti mapu transkodiranja",
|
||||||
"TaskUpdatePluginsDescription": "Preuzima i instalira ažuriranja za dodatke koji su konfigurirani da se ažuriraju automatski.",
|
"TaskUpdatePluginsDescription": "Preuzima i instalira ažuriranja za dodatke koji su konfigurirani da se ažuriraju automatski.",
|
||||||
"TaskUpdatePlugins": "Ažuriraj dodatke",
|
"TaskUpdatePlugins": "Ažuriraj dodatke",
|
||||||
"TaskRefreshPeopleDescription": "Ažurira metapodatke za glumce i redatelje u biblioteci medija.",
|
"TaskRefreshPeopleDescription": "Ažurira metapodatke za glumce i redatelje u medijskoj biblioteci.",
|
||||||
"TaskRefreshPeople": "Osvježi osobe",
|
"TaskRefreshPeople": "Osvježi osobe",
|
||||||
"TaskCleanLogsDescription": "Briše zapise dnevnika koji su stariji od {0} dana.",
|
"TaskCleanLogsDescription": "Briše zapise dnevnika koji su stariji od {0} dana.",
|
||||||
"TaskCleanLogs": "Očisti mapu dnevnika zapisa",
|
"TaskCleanLogs": "Očisti mapu dnevnika zapisa",
|
||||||
@@ -119,7 +120,7 @@
|
|||||||
"Forced": "Forsirani",
|
"Forced": "Forsirani",
|
||||||
"Default": "Zadano",
|
"Default": "Zadano",
|
||||||
"TaskOptimizeDatabase": "Optimiziraj bazu podataka",
|
"TaskOptimizeDatabase": "Optimiziraj bazu podataka",
|
||||||
"External": "Eksterni",
|
"External": "Vanjski",
|
||||||
"TaskKeyframeExtractorDescription": "Izvlačenje ključnih okvira iz videozapisa za stvaranje objektivnije HLS liste za reprodukciju. Pokretanje ovog zadatka može potrajati.",
|
"TaskKeyframeExtractorDescription": "Izvlačenje ključnih okvira iz videozapisa za stvaranje objektivnije HLS liste za reprodukciju. Pokretanje ovog zadatka može potrajati.",
|
||||||
"TaskKeyframeExtractor": "Izvoditelj ključnog okvira",
|
"TaskKeyframeExtractor": "Izvoditelj ključnog okvira",
|
||||||
"TaskOptimizeDatabaseDescription": "Sažima bazu podataka i uklanja prazan prostor. Pokretanje ovog zadatka, može poboljšati performanse nakon provođenja indeksiranja biblioteke ili provođenja drugih promjena koje utječu na bazu podataka.",
|
"TaskOptimizeDatabaseDescription": "Sažima bazu podataka i uklanja prazan prostor. Pokretanje ovog zadatka, može poboljšati performanse nakon provođenja indeksiranja biblioteke ili provođenja drugih promjena koje utječu na bazu podataka.",
|
||||||
@@ -135,7 +136,7 @@
|
|||||||
"TaskDownloadMissingLyricsDescription": "Preuzmi tekstove pjesama",
|
"TaskDownloadMissingLyricsDescription": "Preuzmi tekstove pjesama",
|
||||||
"TaskExtractMediaSegmentsDescription": "Izvlači ili pribavlja dijelove medija iz omogućenih media pluginova.",
|
"TaskExtractMediaSegmentsDescription": "Izvlači ili pribavlja dijelove medija iz omogućenih media pluginova.",
|
||||||
"TaskMoveTrickplayImages": "Premjesti mjesto slika brzog pregledavanja",
|
"TaskMoveTrickplayImages": "Premjesti mjesto slika brzog pregledavanja",
|
||||||
"TaskMoveTrickplayImagesDescription": "Premješta postojeće datoteke brzog pregledavanja u postavke biblioteke.",
|
"TaskMoveTrickplayImagesDescription": "Premješta postojeće datoteke brzog pregledavanja prema postavkama biblioteke.",
|
||||||
"CleanupUserDataTask": "Zadatak čišćenja korisničkih podataka",
|
"CleanupUserDataTask": "Zadatak čišćenja korisničkih podataka",
|
||||||
"CleanupUserDataTaskDescription": "Briše sve korisničke podatke (stanje gledanja, status favorita itd.) s medija koji više nisu prisutni najmanje 90 dana."
|
"CleanupUserDataTaskDescription": "Briše sve korisničke podatke (stanje gledanja, status favorita itd.) s medija koji više nisu prisutni najmanje 90 dana."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,7 +55,7 @@
|
|||||||
"NotificationOptionPluginInstalled": "Bővítmény telepítve",
|
"NotificationOptionPluginInstalled": "Bővítmény telepítve",
|
||||||
"NotificationOptionPluginUninstalled": "Bővítmény eltávolítva",
|
"NotificationOptionPluginUninstalled": "Bővítmény eltávolítva",
|
||||||
"NotificationOptionPluginUpdateInstalled": "Bővítményfrissítés telepítve",
|
"NotificationOptionPluginUpdateInstalled": "Bővítményfrissítés telepítve",
|
||||||
"NotificationOptionServerRestartRequired": "A szerver újraindítása szükséges",
|
"NotificationOptionServerRestartRequired": "A kiszolgáló újraindítása szükséges",
|
||||||
"NotificationOptionTaskFailed": "Hiba az ütemezett feladatban",
|
"NotificationOptionTaskFailed": "Hiba az ütemezett feladatban",
|
||||||
"NotificationOptionUserLockedOut": "Felhasználó tiltva",
|
"NotificationOptionUserLockedOut": "Felhasználó tiltva",
|
||||||
"NotificationOptionVideoPlayback": "Videólejátszás elkezdve",
|
"NotificationOptionVideoPlayback": "Videólejátszás elkezdve",
|
||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Sorozatok",
|
"Shows": "Sorozatok",
|
||||||
"Songs": "Számok",
|
"Songs": "Számok",
|
||||||
"StartupEmbyServerIsLoading": "A Jellyfin kiszolgáló betöltődik. Próbálja újra hamarosan.",
|
"StartupEmbyServerIsLoading": "A Jellyfin kiszolgáló betöltődik. Próbálja újra hamarosan.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Nem sikerült a felirat letöltése innen: {0}, ehhez: {1}",
|
"SubtitleDownloadFailureFromForItem": "Nem sikerült a felirat letöltése innen: {0}, ehhez: {1}",
|
||||||
"Sync": "Szinkronizálás",
|
"Sync": "Szinkronizálás",
|
||||||
"System": "Rendszer",
|
"System": "Rendszer",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"AppDeviceValues": "App: {0}, Dispositivo: {1}",
|
"AppDeviceValues": "App: {0}, Dispositivo: {1}",
|
||||||
"Application": "Applicazione",
|
"Application": "Applicazione",
|
||||||
"Artists": "Artisti",
|
"Artists": "Artisti",
|
||||||
"AuthenticationSucceededWithUserName": "{0} autenticato correttamente",
|
"AuthenticationSucceededWithUserName": "{0} autenticato con successo",
|
||||||
"Books": "Libri",
|
"Books": "Libri",
|
||||||
"CameraImageUploadedFrom": "È stata caricata una nuova fotografia da {0}",
|
"CameraImageUploadedFrom": "È stata caricata una nuova fotografia da {0}",
|
||||||
"Channels": "Canali",
|
"Channels": "Canali",
|
||||||
@@ -11,36 +11,36 @@
|
|||||||
"Collections": "Collezioni",
|
"Collections": "Collezioni",
|
||||||
"DeviceOfflineWithName": "{0} si è disconnesso",
|
"DeviceOfflineWithName": "{0} si è disconnesso",
|
||||||
"DeviceOnlineWithName": "{0} è connesso",
|
"DeviceOnlineWithName": "{0} è connesso",
|
||||||
"FailedLoginAttemptWithUserName": "Tentativo di accesso non riuscito da {0}",
|
"FailedLoginAttemptWithUserName": "Tentativo di accesso fallito da {0}",
|
||||||
"Favorites": "Preferiti",
|
"Favorites": "Preferiti",
|
||||||
"Folders": "Cartelle",
|
"Folders": "Cartelle",
|
||||||
"Genres": "Generi",
|
"Genres": "Generi",
|
||||||
"HeaderAlbumArtists": "Artisti dell'album",
|
"HeaderAlbumArtists": "Artisti dell'album",
|
||||||
"HeaderContinueWatching": "Continua a guardare",
|
"HeaderContinueWatching": "Continua a guardare",
|
||||||
"HeaderFavoriteAlbums": "Album preferiti",
|
"HeaderFavoriteAlbums": "Album Preferiti",
|
||||||
"HeaderFavoriteArtists": "Artisti preferiti",
|
"HeaderFavoriteArtists": "Artisti Preferiti",
|
||||||
"HeaderFavoriteEpisodes": "Episodi preferiti",
|
"HeaderFavoriteEpisodes": "Episodi Preferiti",
|
||||||
"HeaderFavoriteShows": "Serie TV preferite",
|
"HeaderFavoriteShows": "Serie TV Preferite",
|
||||||
"HeaderFavoriteSongs": "Brani preferiti",
|
"HeaderFavoriteSongs": "Brani Preferiti",
|
||||||
"HeaderLiveTV": "Diretta TV",
|
"HeaderLiveTV": "Diretta TV",
|
||||||
"HeaderNextUp": "Prossimo",
|
"HeaderNextUp": "Prossimo",
|
||||||
"HeaderRecordingGroups": "Gruppi di registrazione",
|
"HeaderRecordingGroups": "Gruppi di Registrazione",
|
||||||
"HomeVideos": "Video personali",
|
"HomeVideos": "Video Personali",
|
||||||
"Inherit": "Eredita",
|
"Inherit": "Eredita",
|
||||||
"ItemAddedWithName": "{0} è stato aggiunto alla libreria",
|
"ItemAddedWithName": "{0} è stato aggiunto alla libreria",
|
||||||
"ItemRemovedWithName": "{0} è stato rimosso dalla libreria",
|
"ItemRemovedWithName": "{0} è stato rimosso dalla libreria",
|
||||||
"LabelIpAddressValue": "Indirizzo IP: {0}",
|
"LabelIpAddressValue": "Indirizzo IP: {0}",
|
||||||
"LabelRunningTimeValue": "Durata: {0}",
|
"LabelRunningTimeValue": "Durata: {0}",
|
||||||
"Latest": "Novità",
|
"Latest": "Novità",
|
||||||
"MessageApplicationUpdated": "Jellyfin Server è stato aggiornato",
|
"MessageApplicationUpdated": "Il Server Jellyfin è stato aggiornato",
|
||||||
"MessageApplicationUpdatedTo": "Jellyfin Server è stato aggiornato a {0}",
|
"MessageApplicationUpdatedTo": "Jellyfin Server è stato aggiornato a {0}",
|
||||||
"MessageNamedServerConfigurationUpdatedWithValue": "La sezione {0} della configurazione server è stata aggiornata",
|
"MessageNamedServerConfigurationUpdatedWithValue": "La sezione {0} della configurazione server è stata aggiornata",
|
||||||
"MessageServerConfigurationUpdated": "La configurazione del server è stata aggiornata",
|
"MessageServerConfigurationUpdated": "La configurazione del server è stata aggiornata",
|
||||||
"MixedContent": "Contenuto misto",
|
"MixedContent": "Contenuto misto",
|
||||||
"Movies": "Film",
|
"Movies": "Film",
|
||||||
"Music": "Musica",
|
"Music": "Musica",
|
||||||
"MusicVideos": "Video musicali",
|
"MusicVideos": "Video Musicali",
|
||||||
"NameInstallFailed": "{0} installazione non riuscita",
|
"NameInstallFailed": "{0} installazione fallita",
|
||||||
"NameSeasonNumber": "Stagione {0}",
|
"NameSeasonNumber": "Stagione {0}",
|
||||||
"NameSeasonUnknown": "Stagione sconosciuta",
|
"NameSeasonUnknown": "Stagione sconosciuta",
|
||||||
"NewVersionIsAvailable": "Una nuova versione di Jellyfin Server è disponibile per il download.",
|
"NewVersionIsAvailable": "Una nuova versione di Jellyfin Server è disponibile per il download.",
|
||||||
@@ -49,37 +49,38 @@
|
|||||||
"NotificationOptionAudioPlayback": "La riproduzione audio è iniziata",
|
"NotificationOptionAudioPlayback": "La riproduzione audio è iniziata",
|
||||||
"NotificationOptionAudioPlaybackStopped": "La riproduzione audio è stata interrotta",
|
"NotificationOptionAudioPlaybackStopped": "La riproduzione audio è stata interrotta",
|
||||||
"NotificationOptionCameraImageUploaded": "Immagine fotocamera caricata",
|
"NotificationOptionCameraImageUploaded": "Immagine fotocamera caricata",
|
||||||
"NotificationOptionInstallationFailed": "Installazione non riuscita",
|
"NotificationOptionInstallationFailed": "Installazione fallita",
|
||||||
"NotificationOptionNewLibraryContent": "Nuovo contenuto aggiunto",
|
"NotificationOptionNewLibraryContent": "Nuovo contenuto aggiunto",
|
||||||
"NotificationOptionPluginError": "Errore del plugin",
|
"NotificationOptionPluginError": "Errore del plugin",
|
||||||
"NotificationOptionPluginInstalled": "Plugin installato",
|
"NotificationOptionPluginInstalled": "Plugin installato",
|
||||||
"NotificationOptionPluginUninstalled": "Plugin disinstallato",
|
"NotificationOptionPluginUninstalled": "Plugin disinstallato",
|
||||||
"NotificationOptionPluginUpdateInstalled": "Aggiornamento plugin installato",
|
"NotificationOptionPluginUpdateInstalled": "Aggiornamento plugin installato",
|
||||||
"NotificationOptionServerRestartRequired": "Riavvio del server necessario",
|
"NotificationOptionServerRestartRequired": "Riavvio del server necessario",
|
||||||
"NotificationOptionTaskFailed": "Operazione pianificata non riuscita",
|
"NotificationOptionTaskFailed": "Operazione pianificata fallita",
|
||||||
"NotificationOptionUserLockedOut": "Utente bloccato",
|
"NotificationOptionUserLockedOut": "Utente bloccato",
|
||||||
"NotificationOptionVideoPlayback": "Riproduzione video iniziata",
|
"NotificationOptionVideoPlayback": "Riproduzione video iniziata",
|
||||||
"NotificationOptionVideoPlaybackStopped": "Riproduzione video interrotta",
|
"NotificationOptionVideoPlaybackStopped": "Riproduzione video interrotta",
|
||||||
"Photos": "Foto",
|
"Photos": "Foto",
|
||||||
"Playlists": "Scalette",
|
"Playlists": "Playlist",
|
||||||
"Plugin": "Plugin",
|
"Plugin": "Plugin",
|
||||||
"PluginInstalledWithName": "{0} è stato installato",
|
"PluginInstalledWithName": "{0} è stato Installato",
|
||||||
"PluginUninstalledWithName": "{0} è stato disinstallato",
|
"PluginUninstalledWithName": "{0} è stato disinstallato",
|
||||||
"PluginUpdatedWithName": "{0} è stato aggiornato",
|
"PluginUpdatedWithName": "{0} è stato aggiornato",
|
||||||
"ProviderValue": "Provider: {0}",
|
"ProviderValue": "Provider: {0}",
|
||||||
"ScheduledTaskFailedWithName": "{0} non riuscito",
|
"ScheduledTaskFailedWithName": "{0} fallito",
|
||||||
"ScheduledTaskStartedWithName": "{0} avviato",
|
"ScheduledTaskStartedWithName": "{0} avviato",
|
||||||
"ServerNameNeedsToBeRestarted": "{0} deve essere riavviato",
|
"ServerNameNeedsToBeRestarted": "{0} deve essere riavviato",
|
||||||
"Shows": "Serie TV",
|
"Shows": "Serie TV",
|
||||||
"Songs": "Brani",
|
"Songs": "Brani",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server si sta avviando. Riprova più tardi.",
|
"StartupEmbyServerIsLoading": "Jellyfin server si sta avviando. Per favore riprova più tardi.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Impossibile scaricare i sottotitoli per {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Impossibile scaricare i sottotitoli da {0} per {1}",
|
"SubtitleDownloadFailureFromForItem": "Impossibile scaricare i sottotitoli da {0} per {1}",
|
||||||
"Sync": "Sincronizza",
|
"Sync": "Sincronizza",
|
||||||
"System": "Sistema",
|
"System": "Sistema",
|
||||||
"TvShows": "Serie TV",
|
"TvShows": "Serie TV",
|
||||||
"User": "Utente",
|
"User": "Utente",
|
||||||
"UserCreatedWithName": "L'utente {0} è stato creato",
|
"UserCreatedWithName": "L'utente {0} è stato creato",
|
||||||
"UserDeletedWithName": "L'utente {0} è stato eliminato",
|
"UserDeletedWithName": "L'utente {0} è stato rimosso",
|
||||||
"UserDownloadingItemWithValues": "{0} sta scaricando {1}",
|
"UserDownloadingItemWithValues": "{0} sta scaricando {1}",
|
||||||
"UserLockedOutWithName": "L'utente {0} è stato bloccato",
|
"UserLockedOutWithName": "L'utente {0} è stato bloccato",
|
||||||
"UserOfflineFromDevice": "{0} si è disconnesso da {1}",
|
"UserOfflineFromDevice": "{0} si è disconnesso da {1}",
|
||||||
@@ -114,20 +115,20 @@
|
|||||||
"TasksLibraryCategory": "Libreria",
|
"TasksLibraryCategory": "Libreria",
|
||||||
"TasksMaintenanceCategory": "Manutenzione",
|
"TasksMaintenanceCategory": "Manutenzione",
|
||||||
"TaskCleanActivityLog": "Attività di Registro Completate",
|
"TaskCleanActivityLog": "Attività di Registro Completate",
|
||||||
"TaskCleanActivityLogDescription": "Elimina le voci del registro delle attività più vecchie dell'età configurata.",
|
"TaskCleanActivityLogDescription": "Elimina le voci del registro delle attività più vecchie dell’età configurata.",
|
||||||
"Undefined": "Non specificato",
|
"Undefined": "Non Definito",
|
||||||
"Forced": "Forzato",
|
"Forced": "Forzato",
|
||||||
"Default": "Predefinito",
|
"Default": "Predefinito",
|
||||||
"TaskOptimizeDatabaseDescription": "Compatta database e tronca spazi liberi. Eseguire questa azione dopo la scansione o dopo aver fatto altre modifiche inerenti il database potrebbe aumentarne le prestazioni.",
|
"TaskOptimizeDatabaseDescription": "Compatta database e tronca spazi liberi. Eseguire questa azione dopo la scansione o dopo aver fatto altre modifiche inerenti il database potrebbe aumentarne le prestazioni.",
|
||||||
"TaskOptimizeDatabase": "Ottimizza database",
|
"TaskOptimizeDatabase": "Ottimizza database",
|
||||||
"TaskKeyframeExtractor": "Estrattore di Keyframe",
|
"TaskKeyframeExtractor": "Estrattore di Keyframe",
|
||||||
"TaskKeyframeExtractorDescription": "Estrae i keyframe dai video per creare migliori scalette HLS. Questa procedura potrebbe richiedere molto tempo.",
|
"TaskKeyframeExtractorDescription": "Estrae i keyframe dai video per creare migliori playlist HLS. Questa procedura potrebbe richiedere molto tempo.",
|
||||||
"External": "Esterno",
|
"External": "Esterno",
|
||||||
"HearingImpaired": "Non udenti",
|
"HearingImpaired": "Non Udenti",
|
||||||
"TaskRefreshTrickplayImages": "Genera immagini Trickplay",
|
"TaskRefreshTrickplayImages": "Genera immagini Trickplay",
|
||||||
"TaskRefreshTrickplayImagesDescription": "Crea anteprime trickplay per i video nelle librerie abilitate.",
|
"TaskRefreshTrickplayImagesDescription": "Crea anteprime trickplay per i video nelle librerie abilitate.",
|
||||||
"TaskCleanCollectionsAndPlaylists": "Ripulisci le collezioni e le scalette",
|
"TaskCleanCollectionsAndPlaylists": "Ripulire le collezioni e le playlist",
|
||||||
"TaskCleanCollectionsAndPlaylistsDescription": "Rimuove gli elementi dalle collezioni e dalle scalette che non esistono più.",
|
"TaskCleanCollectionsAndPlaylistsDescription": "Rimuove gli elementi dalle collezioni e dalle playlist che non esistono più.",
|
||||||
"TaskAudioNormalization": "Normalizzazione dell'audio",
|
"TaskAudioNormalization": "Normalizzazione dell'audio",
|
||||||
"TaskAudioNormalizationDescription": "Scansiona i file alla ricerca dei dati per la normalizzazione dell'audio.",
|
"TaskAudioNormalizationDescription": "Scansiona i file alla ricerca dei dati per la normalizzazione dell'audio.",
|
||||||
"TaskDownloadMissingLyricsDescription": "Scarica testi per le canzoni",
|
"TaskDownloadMissingLyricsDescription": "Scarica testi per le canzoni",
|
||||||
|
|||||||
@@ -43,32 +43,32 @@
|
|||||||
"NameInstallFailed": "{0}のインストールに失敗しました",
|
"NameInstallFailed": "{0}のインストールに失敗しました",
|
||||||
"NameSeasonNumber": "シーズン {0}",
|
"NameSeasonNumber": "シーズン {0}",
|
||||||
"NameSeasonUnknown": "シーズン不明",
|
"NameSeasonUnknown": "シーズン不明",
|
||||||
"NewVersionIsAvailable": "新しいバージョンの Jellyfin Server がダウンロードできます。",
|
"NewVersionIsAvailable": "新しいバージョンの Jellyfin Server がダウンロード可能です。",
|
||||||
"NotificationOptionApplicationUpdateAvailable": "アプリケーションの更新があります",
|
"NotificationOptionApplicationUpdateAvailable": "アプリケーションの更新があります",
|
||||||
"NotificationOptionApplicationUpdateInstalled": "アプリケーションは最新です",
|
"NotificationOptionApplicationUpdateInstalled": "アプリケーションは最新です",
|
||||||
"NotificationOptionAudioPlayback": "オーディオの再生を開始",
|
"NotificationOptionAudioPlayback": "オーディオの再生を開始",
|
||||||
"NotificationOptionAudioPlaybackStopped": "オーディオの再生を停止",
|
"NotificationOptionAudioPlaybackStopped": "オーディオの再生をストップしました",
|
||||||
"NotificationOptionCameraImageUploaded": "カメライメージがアップロードされました",
|
"NotificationOptionCameraImageUploaded": "カメライメージがアップロードされました",
|
||||||
"NotificationOptionInstallationFailed": "インストール失敗",
|
"NotificationOptionInstallationFailed": "インストール失敗",
|
||||||
"NotificationOptionNewLibraryContent": "新しいコンテンツを追加しました",
|
"NotificationOptionNewLibraryContent": "新しいコンテンツを追加しました",
|
||||||
"NotificationOptionPluginError": "プラグインに障害が発生しました",
|
"NotificationOptionPluginError": "プラグインに障害が発生しました",
|
||||||
"NotificationOptionPluginInstalled": "プラグインをインストールしました",
|
"NotificationOptionPluginInstalled": "プラグインがインストールされました",
|
||||||
"NotificationOptionPluginUninstalled": "プラグインをアンインストールしました",
|
"NotificationOptionPluginUninstalled": "プラグインがアンインストールされました",
|
||||||
"NotificationOptionPluginUpdateInstalled": "プラグインのアップデートをインストールしました",
|
"NotificationOptionPluginUpdateInstalled": "プラグインのアップデートをインストールしました",
|
||||||
"NotificationOptionServerRestartRequired": "サーバーを再起動してください",
|
"NotificationOptionServerRestartRequired": "サーバーを再起動してください",
|
||||||
"NotificationOptionTaskFailed": "スケジュールされていたタスクの失敗",
|
"NotificationOptionTaskFailed": "スケジュールされていたタスクの失敗",
|
||||||
"NotificationOptionUserLockedOut": "ユーザーはロックされています",
|
"NotificationOptionUserLockedOut": "ユーザーはロックされています",
|
||||||
"NotificationOptionVideoPlayback": "ビデオの再生を開始",
|
"NotificationOptionVideoPlayback": "ビデオの再生を開始しました",
|
||||||
"NotificationOptionVideoPlaybackStopped": "ビデオの再生を停止",
|
"NotificationOptionVideoPlaybackStopped": "ビデオを停止しました",
|
||||||
"Photos": "フォト",
|
"Photos": "フォト",
|
||||||
"Playlists": "プレイリスト",
|
"Playlists": "プレイリスト",
|
||||||
"Plugin": "プラグイン",
|
"Plugin": "プラグイン",
|
||||||
"PluginInstalledWithName": "{0} をインストールしました",
|
"PluginInstalledWithName": "{0} がインストールされました",
|
||||||
"PluginUninstalledWithName": "{0} をアンインストールしました",
|
"PluginUninstalledWithName": "{0} がアンインストールされました",
|
||||||
"PluginUpdatedWithName": "{0} を更新しました",
|
"PluginUpdatedWithName": "{0} が更新されました",
|
||||||
"ProviderValue": "プロバイダ: {0}",
|
"ProviderValue": "プロバイダ: {0}",
|
||||||
"ScheduledTaskFailedWithName": "{0} が失敗しました",
|
"ScheduledTaskFailedWithName": "{0} が失敗しました",
|
||||||
"ScheduledTaskStartedWithName": "{0} を開始",
|
"ScheduledTaskStartedWithName": "{0} が開始されました",
|
||||||
"ServerNameNeedsToBeRestarted": "{0} を再起動してください",
|
"ServerNameNeedsToBeRestarted": "{0} を再起動してください",
|
||||||
"Shows": "番組",
|
"Shows": "番組",
|
||||||
"Songs": "曲",
|
"Songs": "曲",
|
||||||
|
|||||||
@@ -9,46 +9,46 @@
|
|||||||
"Artists": "არტისტი",
|
"Artists": "არტისტი",
|
||||||
"AuthenticationSucceededWithUserName": "{0} -ის ავთენტიკაცია წარმატებულია",
|
"AuthenticationSucceededWithUserName": "{0} -ის ავთენტიკაცია წარმატებულია",
|
||||||
"Books": "წიგნები",
|
"Books": "წიგნები",
|
||||||
"Forced": "იძულებითი",
|
"Forced": "ძალით",
|
||||||
"Inherit": "მემკვიდრეობით",
|
"Inherit": "მემკვიდრეობით",
|
||||||
"Latest": "უახლესი",
|
"Latest": "უახლესი",
|
||||||
"Movies": "ფილმები",
|
"Movies": "ფილმები",
|
||||||
"Music": "მუსიკა",
|
"Music": "მუსიკა",
|
||||||
"Photos": "ფოტოები",
|
"Photos": "ფოტოები",
|
||||||
"Playlists": "დასაკრავი სიები",
|
"Playlists": "დასაკრავი სიები",
|
||||||
"Plugin": "მოდული",
|
"Plugin": "დამატება",
|
||||||
"Shows": "სერიალები",
|
"Shows": "სერიალები",
|
||||||
"Songs": "სიმღერები",
|
"Songs": "სიმღერები",
|
||||||
"Sync": "სინქრონიზაცია",
|
"Sync": "სინქრონიზაცია",
|
||||||
"System": "სისტემა",
|
"System": "სისტემა",
|
||||||
"Undefined": "განუსაზღვრელი",
|
"Undefined": "აღუწერელი",
|
||||||
"User": "მომხმარებელი",
|
"User": "მომხმარებელი",
|
||||||
"TasksMaintenanceCategory": "რემონტი",
|
"TasksMaintenanceCategory": "რემონტი",
|
||||||
"TasksLibraryCategory": "ბიბლიოთეკა",
|
"TasksLibraryCategory": "ბიბლიოთეკა",
|
||||||
"ChapterNameValue": "თავი {0}",
|
"ChapterNameValue": "თავი {0}",
|
||||||
"HeaderContinueWatching": "ყურების გაგრძელება",
|
"HeaderContinueWatching": "ყურების გაგრძელება",
|
||||||
"HeaderFavoriteArtists": "რჩეული შემსრულებლები",
|
"HeaderFavoriteArtists": "რჩეული შემსრულებლები",
|
||||||
"DeviceOfflineWithName": "{0} გამოეთიშა",
|
"DeviceOfflineWithName": "{0} გაითიშა",
|
||||||
"External": "გარე",
|
"External": "გარე",
|
||||||
"HeaderFavoriteEpisodes": "რჩეული ეპიზოდები",
|
"HeaderFavoriteEpisodes": "რჩეული ეპიზოდები",
|
||||||
"HeaderFavoriteSongs": "რჩეული სიმღერები",
|
"HeaderFavoriteSongs": "რჩეული სიმღერები",
|
||||||
"HeaderRecordingGroups": "ჩამწერი ჯგუფები",
|
"HeaderRecordingGroups": "ჩამწერი ჯგუფები",
|
||||||
"HearingImpaired": "სმენადაქვეითებული",
|
"HearingImpaired": "სმენადაქვეითებული",
|
||||||
"LabelRunningTimeValue": "ხანგრძლივობა: {0}",
|
"LabelRunningTimeValue": "გაშვებულობის დრო: {0}",
|
||||||
"MessageApplicationUpdatedTo": "Jellyfin-ის სერვერი განახლდა {0}-ზე",
|
"MessageApplicationUpdatedTo": "Jellyfin-ის სერვერი განახლდა {0}-ზე",
|
||||||
"MessageNamedServerConfigurationUpdatedWithValue": "სერვერის კონფიგურაციის სექცია {0} განახლდა",
|
"MessageNamedServerConfigurationUpdatedWithValue": "სერვერის კონფიგურაციის სექცია {0} განახლდა",
|
||||||
"MixedContent": "შერეული შემცველობა",
|
"MixedContent": "შერეული შემცველობა",
|
||||||
"MusicVideos": "მუსიკალური ვიდეოები",
|
"MusicVideos": "მუსიკის ვიდეოები",
|
||||||
"NotificationOptionInstallationFailed": "დაყენების შეცდომა",
|
"NotificationOptionInstallationFailed": "დაყენების შეცდომა",
|
||||||
"NotificationOptionApplicationUpdateInstalled": "აპლიკაციის განახლება დაყენებულია",
|
"NotificationOptionApplicationUpdateInstalled": "აპლიკაციის განახლება დაყენებულია",
|
||||||
"NotificationOptionAudioPlayback": "აუდიოს დაკვრა დაწყებულია",
|
"NotificationOptionAudioPlayback": "აუდიოს დაკვრა დაწყებულია",
|
||||||
"NotificationOptionCameraImageUploaded": "კამერის გამოსახულება ატვირთულია",
|
"NotificationOptionCameraImageUploaded": "კამერის გამოსახულება ატვირთულია",
|
||||||
"NotificationOptionVideoPlaybackStopped": "ვიდეოს დაკვრა გაჩერებულია",
|
"NotificationOptionVideoPlaybackStopped": "ვიდეოს დაკვრა გაჩერებულია",
|
||||||
"PluginUninstalledWithName": "{0} წაიშალა",
|
"PluginUninstalledWithName": "{0} წაიშალა",
|
||||||
"ScheduledTaskStartedWithName": "{0} დაიწყო",
|
"ScheduledTaskStartedWithName": "{0} გაეშვა",
|
||||||
"VersionNumber": "ვერსია {0}",
|
"VersionNumber": "ვერსია {0}",
|
||||||
"TasksChannelsCategory": "ინტერნეტ-არხები",
|
"TasksChannelsCategory": "ინტერნეტ-არხები",
|
||||||
"ValueSpecialEpisodeName": "დამატებითი - {0}",
|
"ValueSpecialEpisodeName": "სპეციალური - {0}",
|
||||||
"TaskRefreshChannelsDescription": "ინტერნეტ-არხის ინფორმაციის განახლება.",
|
"TaskRefreshChannelsDescription": "ინტერნეტ-არხის ინფორმაციის განახლება.",
|
||||||
"Channels": "არხები",
|
"Channels": "არხები",
|
||||||
"Collections": "კოლექციები",
|
"Collections": "კოლექციები",
|
||||||
@@ -56,31 +56,31 @@
|
|||||||
"Favorites": "რჩეულები",
|
"Favorites": "რჩეულები",
|
||||||
"Folders": "საქაღალდეები",
|
"Folders": "საქაღალდეები",
|
||||||
"HeaderFavoriteShows": "რჩეული სერიალები",
|
"HeaderFavoriteShows": "რჩეული სერიალები",
|
||||||
"HeaderLiveTV": "ლაივ ტელევიზია",
|
"HeaderLiveTV": "ცოცხალი TV",
|
||||||
"HeaderNextUp": "შემდეგი",
|
"HeaderNextUp": "შემდეგი ზემოთ",
|
||||||
"HomeVideos": "სახლის ვიდეოები",
|
"HomeVideos": "სახლის ვიდეოები",
|
||||||
"NameSeasonNumber": "სეზონი {0}",
|
"NameSeasonNumber": "სეზონი {0}",
|
||||||
"NameSeasonUnknown": "სეზონი უცნობია",
|
"NameSeasonUnknown": "სეზონი უცნობია",
|
||||||
"NotificationOptionPluginError": "მოდულის შეცდომა",
|
"NotificationOptionPluginError": "დამატების შეცდომა",
|
||||||
"NotificationOptionPluginInstalled": "მოდული დაყენებულია",
|
"NotificationOptionPluginInstalled": "დამატება დაყენებულია",
|
||||||
"NotificationOptionPluginUninstalled": "მოდული წაიშალა",
|
"NotificationOptionPluginUninstalled": "დამატება წაიშალა",
|
||||||
"ProviderValue": "მომწოდებელი: {0}",
|
"ProviderValue": "მომწოდებელი: {0}",
|
||||||
"ScheduledTaskFailedWithName": "{0} ვერ შესრულდა",
|
"ScheduledTaskFailedWithName": "{0} ავარიულია",
|
||||||
"TvShows": "სატელევიზიო სერიალები",
|
"TvShows": "TV სერიალები",
|
||||||
"TaskRefreshPeople": "ხალხის განახლება",
|
"TaskRefreshPeople": "ხალხის განახლება",
|
||||||
"TaskUpdatePlugins": "მოდულების განახლება",
|
"TaskUpdatePlugins": "დამატებების განახლება",
|
||||||
"TaskRefreshChannels": "არხების განახლება",
|
"TaskRefreshChannels": "არხების განახლება",
|
||||||
"TaskOptimizeDatabase": "მონაცემთა ბაზის ოპტიმიზაცია",
|
"TaskOptimizeDatabase": "ბაზების ოპტიმიზაცია",
|
||||||
"TaskKeyframeExtractor": "საკვანძო კადრის გამომღები",
|
"TaskKeyframeExtractor": "საკვანძო კადრის გამომღები",
|
||||||
"DeviceOnlineWithName": "{0} დაკავშირდა",
|
"DeviceOnlineWithName": "{0} შეერთებულია",
|
||||||
"LabelIpAddressValue": "IP მისამართი: {0}",
|
"LabelIpAddressValue": "IP მისამართი: {0}",
|
||||||
"NameInstallFailed": "{0}-ის დაყენების შეცდომა",
|
"NameInstallFailed": "{0}-ის დაყენების შეცდომა",
|
||||||
"NotificationOptionApplicationUpdateAvailable": "ხელმისაწვდომია აპლიკაციის განახლება",
|
"NotificationOptionApplicationUpdateAvailable": "ხელმისაწვდომია აპლიკაციის განახლება",
|
||||||
"NotificationOptionAudioPlaybackStopped": "აუდიოს დაკვრა გაჩერებულია",
|
"NotificationOptionAudioPlaybackStopped": "აუდიოს დაკვრა გაჩერებულია",
|
||||||
"NotificationOptionNewLibraryContent": "ახალი შემცველობა დამატებულია",
|
"NotificationOptionNewLibraryContent": "ახალი შემცველობა დამატებულია",
|
||||||
"NotificationOptionPluginUpdateInstalled": "მოდულიs განახლება დაყენებულია",
|
"NotificationOptionPluginUpdateInstalled": "დამატების განახლება დაყენებულია",
|
||||||
"NotificationOptionServerRestartRequired": "საჭიროა სერვერის გადატვირთვა",
|
"NotificationOptionServerRestartRequired": "სერვერის გადატვირთვა აუცილებელია",
|
||||||
"NotificationOptionTaskFailed": "გეგმიური დავალების შეცდომა",
|
"NotificationOptionTaskFailed": "დაგეგმილი ამოცანის შეცდომა",
|
||||||
"NotificationOptionUserLockedOut": "მომხმარებელი დაიბლოკა",
|
"NotificationOptionUserLockedOut": "მომხმარებელი დაიბლოკა",
|
||||||
"NotificationOptionVideoPlayback": "ვიდეოს დაკვრა დაწყებულია",
|
"NotificationOptionVideoPlayback": "ვიდეოს დაკვრა დაწყებულია",
|
||||||
"PluginInstalledWithName": "{0} დაყენებულია",
|
"PluginInstalledWithName": "{0} დაყენებულია",
|
||||||
@@ -91,51 +91,39 @@
|
|||||||
"TaskRefreshLibrary": "მედიის ბიბლიოთეკის სკანირება",
|
"TaskRefreshLibrary": "მედიის ბიბლიოთეკის სკანირება",
|
||||||
"TaskCleanLogs": "ჟურნალის საქაღალდის გასუფთავება",
|
"TaskCleanLogs": "ჟურნალის საქაღალდის გასუფთავება",
|
||||||
"TaskCleanTranscode": "ტრანსკოდირების საქაღალდის გასუფთავება",
|
"TaskCleanTranscode": "ტრანსკოდირების საქაღალდის გასუფთავება",
|
||||||
"TaskDownloadMissingSubtitles": "მიუწვდომელი სუბტიტრების გადმოწერა",
|
"TaskDownloadMissingSubtitles": "ნაკლული სუბტიტრების გადმოწერა",
|
||||||
"UserDownloadingItemWithValues": "{0} -ი {1}-ს იწერს",
|
"UserDownloadingItemWithValues": "{0} -ი {0}-ს იწერს",
|
||||||
"FailedLoginAttemptWithUserName": "შესვლის წარუმატებელი მცდელობა {0}-დან",
|
"FailedLoginAttemptWithUserName": "{0}-დან შემოსვლის შეცდომა",
|
||||||
"MessageApplicationUpdated": "Jellyfin-ის სერვერი განახლდა",
|
"MessageApplicationUpdated": "Jellyfin-ის სერვერი განახლდა",
|
||||||
"MessageServerConfigurationUpdated": "სერვერის კონფიგურაცია განახლდა",
|
"MessageServerConfigurationUpdated": "სერვერის კონფიგურაცია განახლდა",
|
||||||
"ServerNameNeedsToBeRestarted": "საჭიროა {0}-ის გადატვირთვა",
|
"ServerNameNeedsToBeRestarted": "საჭიროა {0}-ის გადატვირთვა",
|
||||||
"UserCreatedWithName": "მომხმარებელი {0} შეიქმნა",
|
"UserCreatedWithName": "მომხმარებელი {0} შეიქმნა",
|
||||||
"UserDeletedWithName": "მომხმარებელი {0} წაშლილია",
|
"UserDeletedWithName": "მომხმარებელი {0} წაშლილია",
|
||||||
"UserOnlineFromDevice": "{0}-ი დაკავშირდა {1}-დან",
|
"UserOnlineFromDevice": "{0}-ი ხაზზეა {1}-დან",
|
||||||
"UserOfflineFromDevice": "{0}-ი {1}-დან გაეთიშა",
|
"UserOfflineFromDevice": "{0}-ი {1}-დან გაითიშა",
|
||||||
"ItemAddedWithName": "{0} ჩამატებულია ბიბლიოთეკაში",
|
"ItemAddedWithName": "{0} ჩამატებულია ბიბლიოთეკაში",
|
||||||
"ItemRemovedWithName": "{0} წაშლილია ბიბლიოთეკიდან",
|
"ItemRemovedWithName": "{0} წაშლილია ბიბლიოთეკიდან",
|
||||||
"UserLockedOutWithName": "მომხმარებელი {0} დაბლოკილია",
|
"UserLockedOutWithName": "მომხმარებელი {0} დაბლოკილია",
|
||||||
"UserStartedPlayingItemWithValues": "{0} უყურებს {1}-ს {2}-ზე",
|
"UserStartedPlayingItemWithValues": "{0} თამაშობს {1}-ს {2}-ზე",
|
||||||
"UserPasswordChangedWithName": "მომხმარებელი {0}-სთვის პაროლი შეიცვალა",
|
"UserPasswordChangedWithName": "მომხმარებლისთვის {0} პაროლი შეცვლილია",
|
||||||
"UserPolicyUpdatedWithName": "{0}-ის მომხმარებლის პოლიტიკა განახლდა",
|
"UserPolicyUpdatedWithName": "{0}-ის მომხმარებლის პოლიტიკა განახლდა",
|
||||||
"UserStoppedPlayingItemWithValues": "{0}-მა დაასრულა {1}-ის ყურება {2}-ზე",
|
"UserStoppedPlayingItemWithValues": "{0}-მა დაამთავრა {1}-ის დაკვრა {2}-ზე",
|
||||||
"TaskRefreshChapterImagesDescription": "თავების მქონე ვიდეოებისთვის მინიატურების შექმნა.",
|
"TaskRefreshChapterImagesDescription": "თავების მქონე ვიდეოებისთვის მინიატურების შექმნა.",
|
||||||
"TaskKeyframeExtractorDescription": "უფრო ზუსტი HLS დასაკრავი სიებისითვის ვიდეოდან საკვანძო გადრების ამოღება. შეიძლება საკმაო დრო დასჭირდეს.",
|
"TaskKeyframeExtractorDescription": "უფრო ზუსტი HLS დასაკრავი სიებისითვის ვიდეოდან საკვანძო გადრების ამოღება. შეიძლება საკმაო დრო დასჭირდეს.",
|
||||||
"NewVersionIsAvailable": "გადმოსაწერად ხელმისაწვდომია Jellyfin -ის ახალი ვერსია.",
|
"NewVersionIsAvailable": "გადმოსაწერად ხელმისაწვდომია Jellyfin -ის ახალი ვერსია.",
|
||||||
"CameraImageUploadedFrom": "ახალი კამერის გამოსახულება ატვირთულია {0}-დან",
|
"CameraImageUploadedFrom": "ახალი კამერის გამოსახულება ატვირთულია {0}-დან",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin სერვერი იტვირთება. მოგვიანებით სცადეთ.",
|
"StartupEmbyServerIsLoading": "Jellyfin სერვერი იტვირთება. მოგვიანებით სცადეთ.",
|
||||||
"SubtitleDownloadFailureFromForItem": "{0}-დან {1}-სთვის სუბტიტრების გადმოწერა ვერ შესრულდა",
|
"SubtitleDownloadFailureFromForItem": "{0}-დან {1}-სთვის სუბტიტრების გადმოწერის შეცდომა",
|
||||||
"ValueHasBeenAddedToLibrary": "{0} დაემატა თქვენს მედიის ბიბლიოთეკას",
|
"ValueHasBeenAddedToLibrary": "{0} დაემატა თქვენს მედიის ბიბლიოთეკას",
|
||||||
"TaskCleanActivityLogDescription": "შლის მითითებულ ასაკზე ძველ ჟურნალის ჩანაწერებს.",
|
"TaskCleanActivityLogDescription": "მითითებულ ასაკზე ძველი ჟურნალის ჩანაწერების წაშლა.",
|
||||||
"TaskCleanCacheDescription": "შლის სისტემისთვის არასაჭირო ქეშის ფაილებს.",
|
"TaskCleanCacheDescription": "სისტემისთვის არასაჭირო ქეშის ფაილების წაშლა.",
|
||||||
"TaskRefreshLibraryDescription": "ეძებს ახალ ფაილებს თქვენს მედიის ბიბლიოთეკაში და ანახლებს მეტამონაცემებს.",
|
"TaskRefreshLibraryDescription": "თქვენი მედია ბიბლიოთეკაში ახალი ფაილების ძებნა და მეტამონაცემების განახლება.",
|
||||||
"TaskCleanLogsDescription": "{0} დღეზე ძველი ჟურნალის ფაილების წაშლა.",
|
"TaskCleanLogsDescription": "{0} დღეზე ძველი ჟურნალის ფაილების წაშლა.",
|
||||||
"TaskRefreshPeopleDescription": "თქვენს მედიის ბიბლიოთეკაში მსახიობების და რეჟისორების მეტამონაცემების განახლება.",
|
"TaskRefreshPeopleDescription": "თქვენს მედიის ბიბლიოთეკაში მსახიობების და რეჟისორების მეტამონაცემების განახლება.",
|
||||||
"TaskUpdatePluginsDescription": "ავტომატურად განახლებადად მონიშნული მოდულების განახლებების გადმოწერა და დაყენება.",
|
"TaskUpdatePluginsDescription": "ავტომატურად განახლებადად მონიშნული დამატებების განახლებების გადმოწერა და დაყენება.",
|
||||||
"TaskCleanTranscodeDescription": "ერთ დღეზე უფრო ძველი ტრანსკოდირების ფაილების წაშლა.",
|
"TaskCleanTranscodeDescription": "ერთ დღეზე უფრო ძველი ტრანსკოდირების ფაილების წაშლა.",
|
||||||
"TaskDownloadMissingSubtitlesDescription": "ეძებს ბიბლიოთეკაში მიუწვდომელ სუბტიტრებს ინტერნეტში მეტამონაცემებზე დაყრდნობით.",
|
"TaskDownloadMissingSubtitlesDescription": "მეტამონაცემებზე დაყრდნობით ინტერნეტში ნაკლული სუბტიტრების ძებნა.",
|
||||||
"TaskOptimizeDatabaseDescription": "კუმშავს მონაცემთა ბაზას ადგილის გათავისუფლებლად. ამ ამოცანის ბიბლიოთეკის სკანირების ან ნებისმიერი ცვლილების, რომელიც ბაზაში რამეს აკეთებს, გაშვებას შეუძლია ბაზის წარმადობა გაზარდოს.",
|
"TaskOptimizeDatabaseDescription": "ბაზს შეკუშვა და ადგილის გათავისუფლება. ამ ამოცანის ბიბლიოთეკის სკანირების ან ნებისმიერი ცვლილების, რომელიც ბაზაში რამეს აკეთებს, გაშვებას შეუძლია ბაზის წარმადობა გაზარდოს.",
|
||||||
"TaskRefreshTrickplayImagesDescription": "ქმნის trickplay წინასწარ ხედებს ვიდეოებისთვის დაშვებულ ბიბლიოთეკებში.",
|
"TaskRefreshTrickplayImagesDescription": "ქმნის trickplay წინასწარ ხედებს ვიდეოებისთვის ჩართულ ბიბლიოთეკებში.",
|
||||||
"TaskRefreshTrickplayImages": "Trickplay სურათების გენერირება",
|
"TaskRefreshTrickplayImages": "Trickplay სურათების გენერირება"
|
||||||
"TaskAudioNormalization": "აუდიოს ნორმალიზება",
|
|
||||||
"TaskAudioNormalizationDescription": "აანალიზებს ფაილებს აუდიოს ნორმალიზაციისთვის.",
|
|
||||||
"TaskDownloadMissingLyrics": "მიუწვდომელი ლირიკების ჩამოტვირთვა",
|
|
||||||
"TaskDownloadMissingLyricsDescription": "ჩამოტვირთავს ამჟამად ბიბლიოთეკაში არარსებულ ლირიკებს სიმღერებისთვის",
|
|
||||||
"TaskCleanCollectionsAndPlaylists": "კოლექციების და დასაკრავი სიების გასუფთავება",
|
|
||||||
"TaskCleanCollectionsAndPlaylistsDescription": "შლის არარსებულ ერთეულებს კოლექციებიდან და დასაკრავი სიებიდან.",
|
|
||||||
"TaskExtractMediaSegments": "მედია სეგმენტების სკანირება",
|
|
||||||
"TaskExtractMediaSegmentsDescription": "მედია სეგმენტების სკანირება მხარდაჭერილი მოდულებისთვის.",
|
|
||||||
"TaskMoveTrickplayImages": "Trickplay სურათების მიგრაცია",
|
|
||||||
"TaskMoveTrickplayImagesDescription": "გადააქვს trickplay ფაილები ბიბლიოთეკის პარამეტრებზე დაყრდნობით.",
|
|
||||||
"CleanupUserDataTask": "მომხმარებლების მონაცემების გასუფთავება",
|
|
||||||
"CleanupUserDataTaskDescription": "ასუფთავებს მომხმარებლების მონაცემებს (ყურების სტატუსი, ფავორიტები ანდ ა.შ) მედია ელემენტებისთვის რომლების 90 დღეზე მეტია აღარ არსებობენ."
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Körsetımder",
|
"Shows": "Körsetımder",
|
||||||
"Songs": "Äuender",
|
"Songs": "Äuender",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server jüktelude. Ärekettı köp ūzamai qaitalañyz.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server jüktelude. Ärekettı köp ūzamai qaitalañyz.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Субтитрлер {0} үшін жүктеліп алынуы сәтсіз",
|
||||||
"SubtitleDownloadFailureFromForItem": "{1} üşın subtitrlerdı {0} közınen jüktep alu sätsız",
|
"SubtitleDownloadFailureFromForItem": "{1} üşın subtitrlerdı {0} közınen jüktep alu sätsız",
|
||||||
"Sync": "Ündestıru",
|
"Sync": "Ündestıru",
|
||||||
"System": "Jüie",
|
"System": "Jüie",
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "시리즈",
|
"Shows": "시리즈",
|
||||||
"Songs": "노래",
|
"Songs": "노래",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin 서버를 불러오고 있습니다. 잠시 후에 다시 시도하십시오.",
|
"StartupEmbyServerIsLoading": "Jellyfin 서버를 불러오고 있습니다. 잠시 후에 다시 시도하십시오.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "{0}에서 {1} 자막 다운로드에 실패했습니다",
|
"SubtitleDownloadFailureFromForItem": "{0}에서 {1} 자막 다운로드에 실패했습니다",
|
||||||
"Sync": "동기화",
|
"Sync": "동기화",
|
||||||
"System": "시스템",
|
"System": "시스템",
|
||||||
@@ -135,7 +136,5 @@
|
|||||||
"TaskMoveTrickplayImages": "트릭플레이 이미지 위치 마이그레이션",
|
"TaskMoveTrickplayImages": "트릭플레이 이미지 위치 마이그레이션",
|
||||||
"TaskMoveTrickplayImagesDescription": "추출된 트릭플레이 이미지를 라이브러리 설정에 따라 이동합니다.",
|
"TaskMoveTrickplayImagesDescription": "추출된 트릭플레이 이미지를 라이브러리 설정에 따라 이동합니다.",
|
||||||
"TaskDownloadMissingLyrics": "누락된 가사 다운로드",
|
"TaskDownloadMissingLyrics": "누락된 가사 다운로드",
|
||||||
"TaskDownloadMissingLyricsDescription": "가사 다운로드",
|
"TaskDownloadMissingLyricsDescription": "가사 다운로드"
|
||||||
"CleanupUserDataTask": "사용자 데이터 정리 작업",
|
|
||||||
"CleanupUserDataTaskDescription": "최소 90일 이상 존재하지 않는 미디어에 대한 사용자 데이터(시청 상태, 즐겨찾기 등)를 정리합니다."
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Laidos",
|
"Shows": "Laidos",
|
||||||
"Songs": "Kūriniai",
|
"Songs": "Kūriniai",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server kraunasi. Netrukus pabandykite dar kartą.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server kraunasi. Netrukus pabandykite dar kartą.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "{1} subtitrai buvo nesėkmingai parsiųsti iš {0}",
|
"SubtitleDownloadFailureFromForItem": "{1} subtitrai buvo nesėkmingai parsiųsti iš {0}",
|
||||||
"Sync": "Sinchronizuoti",
|
"Sync": "Sinchronizuoti",
|
||||||
"System": "Sistema",
|
"System": "Sistema",
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
"Albums": "Pukaemi",
|
|
||||||
"AppDeviceValues": "Taupānga: {0}, Pūrere: {1}",
|
|
||||||
"Application": "Taupānga",
|
|
||||||
"Artists": "Kaiwaiata",
|
|
||||||
"AuthenticationSucceededWithUserName": "{0} has been successfully authenticated",
|
|
||||||
"Books": "Ngā pukapuka",
|
|
||||||
"CameraImageUploadedFrom": "Kua tuku ake he whakaahua kāmera hou mai i {0}"
|
|
||||||
}
|
|
||||||
@@ -2,12 +2,12 @@
|
|||||||
"AppDeviceValues": "അപ്ലിക്കേഷൻ: {0}, ഉപകരണം: {1}",
|
"AppDeviceValues": "അപ്ലിക്കേഷൻ: {0}, ഉപകരണം: {1}",
|
||||||
"Application": "അപ്ലിക്കേഷൻ",
|
"Application": "അപ്ലിക്കേഷൻ",
|
||||||
"AuthenticationSucceededWithUserName": "{0} വിജയകരമായി പ്രാമാണീകരിച്ചു",
|
"AuthenticationSucceededWithUserName": "{0} വിജയകരമായി പ്രാമാണീകരിച്ചു",
|
||||||
"CameraImageUploadedFrom": "{0} എന്നതിൽ നിന്ന് ഒരു പുതിയ ക്യാമറ ചിത്രം അപ്ലോഡുചെയ്തു",
|
"CameraImageUploadedFrom": "Camera 0 from എന്നതിൽ നിന്ന് ഒരു പുതിയ ക്യാമറ ചിത്രം അപ്ലോഡുചെയ്തു",
|
||||||
"ChapterNameValue": "അധ്യായം {0}",
|
"ChapterNameValue": "അധ്യായം {0}",
|
||||||
"DeviceOfflineWithName": "{0} വിച്ഛേദിച്ചു",
|
"DeviceOfflineWithName": "{0} വിച്ഛേദിച്ചു",
|
||||||
"DeviceOnlineWithName": "{0} ബന്ധിപ്പിച്ചു",
|
"DeviceOnlineWithName": "{0} ബന്ധിപ്പിച്ചു",
|
||||||
"FailedLoginAttemptWithUserName": "{0}ൽ നിന്നുള്ള പ്രവേശന ശ്രമം പരാജയപ്പെട്ടു",
|
"FailedLoginAttemptWithUserName": "{0}ൽ നിന്നുള്ള പ്രവേശന ശ്രമം പരാജയപ്പെട്ടു",
|
||||||
"Forced": "നിർബന്ധിതമായി",
|
"Forced": "നിർബന്ധിച്ചു",
|
||||||
"HeaderFavoriteAlbums": "പ്രിയപ്പെട്ട ആൽബങ്ങൾ",
|
"HeaderFavoriteAlbums": "പ്രിയപ്പെട്ട ആൽബങ്ങൾ",
|
||||||
"HeaderFavoriteArtists": "പ്രിയപ്പെട്ട കലാകാരന്മാർ",
|
"HeaderFavoriteArtists": "പ്രിയപ്പെട്ട കലാകാരന്മാർ",
|
||||||
"HeaderFavoriteEpisodes": "പ്രിയപ്പെട്ട എപ്പിസോഡുകൾ",
|
"HeaderFavoriteEpisodes": "പ്രിയപ്പെട്ട എപ്പിസോഡുകൾ",
|
||||||
@@ -114,7 +114,7 @@
|
|||||||
"Artists": "കലാകാരന്മാർ",
|
"Artists": "കലാകാരന്മാർ",
|
||||||
"Shows": "ഷോകൾ",
|
"Shows": "ഷോകൾ",
|
||||||
"Default": "സ്ഥിരസ്ഥിതി",
|
"Default": "സ്ഥിരസ്ഥിതി",
|
||||||
"Favorites": "പ്രിയപ്പെട്ടവ",
|
"Favorites": "പ്രിയങ്കരങ്ങൾ",
|
||||||
"Books": "പുസ്തകങ്ങൾ",
|
"Books": "പുസ്തകങ്ങൾ",
|
||||||
"Genres": "വിഭാഗങ്ങൾ",
|
"Genres": "വിഭാഗങ്ങൾ",
|
||||||
"Channels": "ചാനലുകൾ",
|
"Channels": "ചാനലുകൾ",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"HeaderNextUp": "Дараа нь",
|
"HeaderNextUp": "Дараа нь",
|
||||||
"HeaderContinueWatching": "Үргэлжлүүлэн үзэх",
|
"HeaderContinueWatching": "Үргэлжлүүлэн үзэх",
|
||||||
"Songs": "Дуунууд",
|
"Songs": "Дуунууд",
|
||||||
"Playlists": "Тоглуулах жагсаалтууд",
|
"Playlists": "Playlist-ууд",
|
||||||
"Movies": "Кинонууд",
|
"Movies": "Кинонууд",
|
||||||
"Latest": "Сүүлийн үеийн",
|
"Latest": "Сүүлийн үеийн",
|
||||||
"Genres": "Төрлүүд",
|
"Genres": "Төрлүүд",
|
||||||
@@ -71,7 +71,7 @@
|
|||||||
"Forced": "Хүчээр",
|
"Forced": "Хүчээр",
|
||||||
"HeaderAlbumArtists": "Цомгийн уран бүтээлчид",
|
"HeaderAlbumArtists": "Цомгийн уран бүтээлчид",
|
||||||
"HeaderFavoriteAlbums": "Дуртай цомгууд",
|
"HeaderFavoriteAlbums": "Дуртай цомгууд",
|
||||||
"HeaderLiveTV": "Шууд ТВ",
|
"HeaderLiveTV": "Шууд",
|
||||||
"HeaderRecordingGroups": "Бичлэгийн бүлгүүд",
|
"HeaderRecordingGroups": "Бичлэгийн бүлгүүд",
|
||||||
"HearingImpaired": "Сонсголын бэрхшээлтэй",
|
"HearingImpaired": "Сонсголын бэрхшээлтэй",
|
||||||
"HomeVideos": "Үндсэн дүрсүүд",
|
"HomeVideos": "Үндсэн дүрсүүд",
|
||||||
@@ -109,7 +109,7 @@
|
|||||||
"ScheduledTaskStartedWithName": "{0}-г эхлүүлэв",
|
"ScheduledTaskStartedWithName": "{0}-г эхлүүлэв",
|
||||||
"ServerNameNeedsToBeRestarted": "{0}-г дахин асаана уу",
|
"ServerNameNeedsToBeRestarted": "{0}-г дахин асаана уу",
|
||||||
"Shows": "Шоу",
|
"Shows": "Шоу",
|
||||||
"Sync": "Синхрончлох",
|
"Sync": "Дахин",
|
||||||
"System": "Систем",
|
"System": "Систем",
|
||||||
"TvShows": "ТВ нэвтрүүлгүүд",
|
"TvShows": "ТВ нэвтрүүлгүүд",
|
||||||
"Undefined": "Танисангүй",
|
"Undefined": "Танисангүй",
|
||||||
|
|||||||
@@ -132,10 +132,5 @@
|
|||||||
"TaskDownloadMissingLyrics": "उपलब्ध नसलेली गीतपट्टी (Lyrics) डाउनलोड करा",
|
"TaskDownloadMissingLyrics": "उपलब्ध नसलेली गीतपट्टी (Lyrics) डाउनलोड करा",
|
||||||
"TaskAudioNormalization": "ऑडिओ सामान्यीकरण",
|
"TaskAudioNormalization": "ऑडिओ सामान्यीकरण",
|
||||||
"TaskAudioNormalizationDescription": "ऑडिओ सामान्यीकरणाचा डाटा स्कॅन करतो.",
|
"TaskAudioNormalizationDescription": "ऑडिओ सामान्यीकरणाचा डाटा स्कॅन करतो.",
|
||||||
"TaskDownloadMissingLyricsDescription": "गाण्यांची गीतपट्टी (Lyrics) डाउनलोड करतो",
|
"TaskDownloadMissingLyricsDescription": "गाण्यांची गीतपट्टी (Lyrics) डाउनलोड करतो"
|
||||||
"TaskExtractMediaSegmentsDescription": "सक्रिय असलेल्या प्लगिनमधून मीडिया विभाग प्राप्त करते.",
|
|
||||||
"TaskMoveTrickplayImagesDescription": "लायब्ररीच्या सेटिंग्जप्रमाणे आधीपासून अस्तित्वात असलेल्या ट्रिकप्ले फाइल्सचे स्थान बदलते.",
|
|
||||||
"TaskCleanCollectionsAndPlaylistsDescription": "जे संग्रह आणि प्लेलिस्ट आता अस्तित्वात नाहीत, त्यांमधील घटक हटवते.",
|
|
||||||
"CleanupUserDataTask": "वापरकर्ता डेटाची स्वच्छता प्रक्रिया",
|
|
||||||
"CleanupUserDataTaskDescription": "९० दिवसांहून अधिक काळ अनुपस्थित असलेल्या माध्यमांवरील सर्व वापरकर्ता माहिती (जसे पाहण्याची स्थिती, आवडी इ.) हटवते."
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Tayangan",
|
"Shows": "Tayangan",
|
||||||
"Songs": "Lagu-lagu",
|
"Songs": "Lagu-lagu",
|
||||||
"StartupEmbyServerIsLoading": "Pelayan Jellyfin sedang dimuatkan. Sila cuba sebentar lagi.",
|
"StartupEmbyServerIsLoading": "Pelayan Jellyfin sedang dimuatkan. Sila cuba sebentar lagi.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Muat turun sarikata gagal dari {0} untuk {1}",
|
"SubtitleDownloadFailureFromForItem": "Muat turun sarikata gagal dari {0} untuk {1}",
|
||||||
"Sync": "Segerak",
|
"Sync": "Segerak",
|
||||||
"System": "Sistem",
|
"System": "Sistem",
|
||||||
|
|||||||
@@ -126,7 +126,5 @@
|
|||||||
"TaskRefreshTrickplayImages": "ထရစ်ခ်ပလေး ပုံများကို ထုတ်မည်",
|
"TaskRefreshTrickplayImages": "ထရစ်ခ်ပလေး ပုံများကို ထုတ်မည်",
|
||||||
"TaskKeyframeExtractor": "ကီးဖရိန်များကို ထုတ်နုတ်ခြင်း",
|
"TaskKeyframeExtractor": "ကီးဖရိန်များကို ထုတ်နုတ်ခြင်း",
|
||||||
"TaskCleanCollectionsAndPlaylists": "စုစည်းမှုများနှင့် အစဉ်လိုက်ပြသမှုများကို ရှင်းလင်းမည်",
|
"TaskCleanCollectionsAndPlaylists": "စုစည်းမှုများနှင့် အစဉ်လိုက်ပြသမှုများကို ရှင်းလင်းမည်",
|
||||||
"HearingImpaired": "အကြားအာရုံ ချို့တဲ့သူ",
|
"HearingImpaired": "အကြားအာရုံ ချို့တဲ့သူ"
|
||||||
"TaskDownloadMissingLyrics": "ကျန်နေသောသီချင်းစာသားများအား ဒေါင်းလုတ်ဆွဲပါ",
|
|
||||||
"TaskDownloadMissingLyricsDescription": "သီချင်းများအတွက် သီချင်းစာသား ဒေါင်းလုတ်ဆွဲပါ"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Serier",
|
"Shows": "Serier",
|
||||||
"Songs": "Sanger",
|
"Songs": "Sanger",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server laster. Prøv igjen snart.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server laster. Prøv igjen snart.",
|
||||||
|
"SubtitleDownloadFailureForItem": "En feil oppstå under nedlasting av undertekster for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Kunne ikke laste ned undertekster fra {0} for {1}",
|
"SubtitleDownloadFailureFromForItem": "Kunne ikke laste ned undertekster fra {0} for {1}",
|
||||||
"Sync": "Synkroniser",
|
"Sync": "Synkroniser",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"Albums": "Albums",
|
||||||
"AppDeviceValues": "App: {0}, Apparaat: {1}",
|
"AppDeviceValues": "App: {0}, Apparaat: {1}",
|
||||||
"Application": "Applicatie",
|
"Application": "Applicatie",
|
||||||
"Artists": "Artiesten",
|
"Artists": "Artiesten",
|
||||||
@@ -13,18 +14,19 @@
|
|||||||
"FailedLoginAttemptWithUserName": "Mislukte aanmeldpoging van {0}",
|
"FailedLoginAttemptWithUserName": "Mislukte aanmeldpoging van {0}",
|
||||||
"Favorites": "Favorieten",
|
"Favorites": "Favorieten",
|
||||||
"Folders": "Mappen",
|
"Folders": "Mappen",
|
||||||
|
"Genres": "Genres",
|
||||||
"HeaderAlbumArtists": "Albumartiesten",
|
"HeaderAlbumArtists": "Albumartiesten",
|
||||||
"HeaderContinueWatching": "Verder kijken",
|
"HeaderContinueWatching": "Verderkijken",
|
||||||
"HeaderFavoriteAlbums": "Favoriete albums",
|
"HeaderFavoriteAlbums": "Favoriete albums",
|
||||||
"HeaderFavoriteArtists": "Favoriete artiesten",
|
"HeaderFavoriteArtists": "Favoriete artiesten",
|
||||||
"HeaderFavoriteEpisodes": "Favoriete afleveringen",
|
"HeaderFavoriteEpisodes": "Favoriete afleveringen",
|
||||||
"HeaderFavoriteShows": "Favoriete series",
|
"HeaderFavoriteShows": "Favoriete series",
|
||||||
"HeaderFavoriteSongs": "Favoriete nummers",
|
"HeaderFavoriteSongs": "Favoriete nummers",
|
||||||
"HeaderLiveTV": "Live-tv",
|
"HeaderLiveTV": "Live-tv",
|
||||||
"HeaderNextUp": "Volgende",
|
"HeaderNextUp": "Als volgende",
|
||||||
"HeaderRecordingGroups": "Opnamegroepen",
|
"HeaderRecordingGroups": "Opnamegroepen",
|
||||||
"HomeVideos": "Homevideo's",
|
"HomeVideos": "Homevideo's",
|
||||||
"Inherit": "Overnemen",
|
"Inherit": "Erven",
|
||||||
"ItemAddedWithName": "{0} is toegevoegd aan de bibliotheek",
|
"ItemAddedWithName": "{0} is toegevoegd aan de bibliotheek",
|
||||||
"ItemRemovedWithName": "{0} is verwijderd uit de bibliotheek",
|
"ItemRemovedWithName": "{0} is verwijderd uit de bibliotheek",
|
||||||
"LabelIpAddressValue": "IP-adres: {0}",
|
"LabelIpAddressValue": "IP-adres: {0}",
|
||||||
@@ -71,6 +73,7 @@
|
|||||||
"Shows": "Series",
|
"Shows": "Series",
|
||||||
"Songs": "Nummers",
|
"Songs": "Nummers",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server is aan het laden. Probeer het later opnieuw.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server is aan het laden. Probeer het later opnieuw.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Downloaden van ondertiteling voor {0} is mislukt",
|
||||||
"SubtitleDownloadFailureFromForItem": "Ondertiteling kon niet gedownload worden van {0} voor {1}",
|
"SubtitleDownloadFailureFromForItem": "Ondertiteling kon niet gedownload worden van {0} voor {1}",
|
||||||
"Sync": "Synchronisatie",
|
"Sync": "Synchronisatie",
|
||||||
"System": "Systeem",
|
"System": "Systeem",
|
||||||
@@ -114,7 +117,7 @@
|
|||||||
"TaskCleanActivityLogDescription": "Verwijdert activiteitenlogs ouder dan de ingestelde leeftijd.",
|
"TaskCleanActivityLogDescription": "Verwijdert activiteitenlogs ouder dan de ingestelde leeftijd.",
|
||||||
"TaskCleanActivityLog": "Activiteitenlogboek legen",
|
"TaskCleanActivityLog": "Activiteitenlogboek legen",
|
||||||
"Undefined": "Niet gedefinieerd",
|
"Undefined": "Niet gedefinieerd",
|
||||||
"Forced": "Geforceerd",
|
"Forced": "Gedwongen",
|
||||||
"Default": "Standaard",
|
"Default": "Standaard",
|
||||||
"TaskOptimizeDatabaseDescription": "Comprimeert de database en trimt vrije ruimte. Het uitvoeren van deze taak kan de prestaties verbeteren, na het scannen van de bibliotheek of andere aanpassingen die invloed hebben op de database.",
|
"TaskOptimizeDatabaseDescription": "Comprimeert de database en trimt vrije ruimte. Het uitvoeren van deze taak kan de prestaties verbeteren, na het scannen van de bibliotheek of andere aanpassingen die invloed hebben op de database.",
|
||||||
"TaskOptimizeDatabase": "Database optimaliseren",
|
"TaskOptimizeDatabase": "Database optimaliseren",
|
||||||
@@ -135,7 +138,5 @@
|
|||||||
"TaskMoveTrickplayImagesDescription": "Verplaatst bestaande trickplay-bestanden op basis van de bibliotheekinstellingen.",
|
"TaskMoveTrickplayImagesDescription": "Verplaatst bestaande trickplay-bestanden op basis van de bibliotheekinstellingen.",
|
||||||
"TaskExtractMediaSegments": "Scannen op mediasegmenten",
|
"TaskExtractMediaSegments": "Scannen op mediasegmenten",
|
||||||
"CleanupUserDataTaskDescription": "Wist alle gebruikersgegevens (kijkstatus, favorieten, etc.) van media die al minstens 90 dagen niet meer aanwezig zijn.",
|
"CleanupUserDataTaskDescription": "Wist alle gebruikersgegevens (kijkstatus, favorieten, etc.) van media die al minstens 90 dagen niet meer aanwezig zijn.",
|
||||||
"CleanupUserDataTask": "Opruimtaak gebruikersdata",
|
"CleanupUserDataTask": "Opruimtaak gebruikersdata"
|
||||||
"Albums": "Albums",
|
|
||||||
"Genres": "Genres"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
{}
|
|
||||||
@@ -134,8 +134,6 @@
|
|||||||
"TaskCleanCollectionsAndPlaylistsDescription": "ਕਲੈਕਸ਼ਨਾਂ ਅਤੇ ਪਲੇਲਿਸਟਾਂ ਵਿੱਚੋਂ ਉਹ ਆਈਟਮ ਹਟਾਉਂਦਾ ਹੈ ਜੋ ਹੁਣ ਮੌਜੂਦ ਨਹੀਂ ਹਨ।",
|
"TaskCleanCollectionsAndPlaylistsDescription": "ਕਲੈਕਸ਼ਨਾਂ ਅਤੇ ਪਲੇਲਿਸਟਾਂ ਵਿੱਚੋਂ ਉਹ ਆਈਟਮ ਹਟਾਉਂਦਾ ਹੈ ਜੋ ਹੁਣ ਮੌਜੂਦ ਨਹੀਂ ਹਨ।",
|
||||||
"TaskCleanCollectionsAndPlaylists": "ਕਲੈਕਸ਼ਨਾਂ ਅਤੇ ਪਲੇਲਿਸਟਾਂ ਨੂੰ ਸਾਫ ਕਰੋ",
|
"TaskCleanCollectionsAndPlaylists": "ਕਲੈਕਸ਼ਨਾਂ ਅਤੇ ਪਲੇਲਿਸਟਾਂ ਨੂੰ ਸਾਫ ਕਰੋ",
|
||||||
"TaskAudioNormalization": "ਆਵਾਜ਼ ਸਧਾਰਣੀਕਰਨ",
|
"TaskAudioNormalization": "ਆਵਾਜ਼ ਸਧਾਰਣੀਕਰਨ",
|
||||||
"TaskRefreshTrickplayImagesDescription": "ਵੀਡੀਓ ਲਈ ਟ੍ਰਿਕਪਲੇ ਪ੍ਰੀਵਿਊ ਬਣਾਉਂਦਾ ਹੈ (ਜੇ ਲਾਇਬ੍ਰੇਰੀ ਵਿੱਚ ਚੁਣਿਆ ਗਿਆ ਹੈ)।",
|
"TaskRefreshTrickplayImagesDescription": "ਚਲ ਰਹੀ ਲਾਇਬ੍ਰੇਰੀਆਂ ਵਿੱਚ ਵੀਡੀਓਜ਼ ਲਈ ਟ੍ਰਿਕਪਲੇ ਪ੍ਰੀਵਿਊ ਬਣਾਉਂਦਾ ਹੈ।",
|
||||||
"TaskKeyframeExtractorDescription": "ਕੀ-ਫ੍ਰੇਮਜ਼ ਨੂੰ ਵੀਡੀਓ ਫਾਈਲਾਂ ਵਿੱਚੋਂ ਨਿਕਾਲਦਾ ਹੈ ਤਾਂ ਜੋ ਹੋਰ ਜ਼ਿਆਦਾ ਸਟਿਕ ਹੋਣ ਵਾਲੀਆਂ HLS ਪਲੇਲਿਸਟਾਂ ਬਣਾਈਆਂ ਜਾ ਸਕਣ। ਇਹ ਕੰਮ ਲੰਬੇ ਸਮੇਂ ਤੱਕ ਚੱਲ ਸਕਦਾ ਹੈ।",
|
"TaskKeyframeExtractorDescription": "ਕੀ-ਫ੍ਰੇਮਜ਼ ਨੂੰ ਵੀਡੀਓ ਫਾਈਲਾਂ ਵਿੱਚੋਂ ਨਿਕਾਲਦਾ ਹੈ ਤਾਂ ਜੋ ਹੋਰ ਜ਼ਿਆਦਾ ਸਟਿਕ ਹੋਣ ਵਾਲੀਆਂ HLS ਪਲੇਲਿਸਟਾਂ ਬਣਾਈਆਂ ਜਾ ਸਕਣ। ਇਹ ਕੰਮ ਲੰਬੇ ਸਮੇਂ ਤੱਕ ਚੱਲ ਸਕਦਾ ਹੈ।"
|
||||||
"CleanupUserDataTaskDescription": "ਘੱਟੋ-ਘੱਟ 90 ਦਿਨਾਂ ਤੋਂ ਮੌਜੂਦ ਨਾ ਹੋਣ ਵਾਲੇ ਮੀਡੀਆ ਤੋਂ ਸਾਰੇ ਉਪਭੋਗਤਾ ਡੇਟਾ (ਵਾਚ ਸਟੇਟ, ਮਨਪਸੰਦ ਸਟੇਟਸ ਆਦਿ) ਨੂੰ ਸਾਫ਼ ਕਰਦਾ ਹੈ।",
|
|
||||||
"CleanupUserDataTask": "ਯੂਜ਼ਰ ਡਾਟਾ ਸਾਫ਼ ਕਰਨ ਦਾ ਕੰਮ"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Seriale",
|
"Shows": "Seriale",
|
||||||
"Songs": "Utwory",
|
"Songs": "Utwory",
|
||||||
"StartupEmbyServerIsLoading": "Trwa wczytywanie serwera Jellyfin. Spróbuj ponownie za chwilę.",
|
"StartupEmbyServerIsLoading": "Trwa wczytywanie serwera Jellyfin. Spróbuj ponownie za chwilę.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Pobieranie napisów dla {0} zakończone niepowodzeniem",
|
||||||
"SubtitleDownloadFailureFromForItem": "Nieudane pobieranie napisów z {0} dla {1}",
|
"SubtitleDownloadFailureFromForItem": "Nieudane pobieranie napisów z {0} dla {1}",
|
||||||
"Sync": "Synchronizacja",
|
"Sync": "Synchronizacja",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
@@ -124,8 +125,8 @@
|
|||||||
"TaskKeyframeExtractorDescription": "Wyodrębnia klatki kluczowe z plików wideo w celu utworzenia bardziej precyzyjnych list odtwarzania HLS. To zadanie może trwać przez długi czas.",
|
"TaskKeyframeExtractorDescription": "Wyodrębnia klatki kluczowe z plików wideo w celu utworzenia bardziej precyzyjnych list odtwarzania HLS. To zadanie może trwać przez długi czas.",
|
||||||
"TaskKeyframeExtractor": "Ekstraktor klatek kluczowych",
|
"TaskKeyframeExtractor": "Ekstraktor klatek kluczowych",
|
||||||
"HearingImpaired": "Niedosłyszący",
|
"HearingImpaired": "Niedosłyszący",
|
||||||
"TaskRefreshTrickplayImages": "Generuj obrazy Trickplay",
|
"TaskRefreshTrickplayImages": "Generuj obrazy trickplay",
|
||||||
"TaskRefreshTrickplayImagesDescription": "Tworzy podglądy Trickplay dla filmów we włączonych bibliotekach.",
|
"TaskRefreshTrickplayImagesDescription": "Tworzy podglądy trickplay dla filmów we włączonych bibliotekach.",
|
||||||
"TaskCleanCollectionsAndPlaylistsDescription": "Usuwa elementy z kolekcji i list odtwarzania, które już nie istnieją.",
|
"TaskCleanCollectionsAndPlaylistsDescription": "Usuwa elementy z kolekcji i list odtwarzania, które już nie istnieją.",
|
||||||
"TaskCleanCollectionsAndPlaylists": "Oczyść kolekcje i listy odtwarzania",
|
"TaskCleanCollectionsAndPlaylists": "Oczyść kolekcje i listy odtwarzania",
|
||||||
"TaskAudioNormalization": "Normalizacja dźwięku",
|
"TaskAudioNormalization": "Normalizacja dźwięku",
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
"Collections": "Barrels",
|
"Collections": "Barrels",
|
||||||
"ItemAddedWithName": "{0} is now with yer treasure",
|
"ItemAddedWithName": "{0} is now with yer treasure",
|
||||||
"Default": "Normal-like",
|
"Default": "Normal-like",
|
||||||
"FailedLoginAttemptWithUserName": "Ye failed to enter from {0}",
|
"FailedLoginAttemptWithUserName": "Ye failed to get in, try from {0}",
|
||||||
"Favorites": "Finest Loot",
|
"Favorites": "Finest Loot",
|
||||||
"ItemRemovedWithName": "{0} was taken from yer treasure",
|
"ItemRemovedWithName": "{0} was taken from yer treasure",
|
||||||
"LabelIpAddressValue": "Ship's coordinates: {0}",
|
"LabelIpAddressValue": "Ship's coordinates: {0}",
|
||||||
@@ -113,10 +113,5 @@
|
|||||||
"TaskCleanCache": "Sweep the Cache Chest",
|
"TaskCleanCache": "Sweep the Cache Chest",
|
||||||
"TaskRefreshChapterImages": "Claim chapter portraits",
|
"TaskRefreshChapterImages": "Claim chapter portraits",
|
||||||
"TaskRefreshChapterImagesDescription": "Paints wee portraits fer videos that own chapters.",
|
"TaskRefreshChapterImagesDescription": "Paints wee portraits fer videos that own chapters.",
|
||||||
"TaskRefreshLibrary": "Scan the Treasure Trove",
|
"TaskRefreshLibrary": "Scan the Treasure Trove"
|
||||||
"TasksChannelsCategory": "Channels o' thy Internet",
|
|
||||||
"TaskRefreshTrickplayImages": "Summon the picture tricks",
|
|
||||||
"TaskRefreshTrickplayImagesDescription": "Summons picture trick previews for videos in ye enabled book roost",
|
|
||||||
"TaskUpdatePlugins": "Resummon yer Plugins",
|
|
||||||
"TaskCleanTranscode": "Swab Ye Transcode Directory"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Séries",
|
"Shows": "Séries",
|
||||||
"Songs": "Músicas",
|
"Songs": "Músicas",
|
||||||
"StartupEmbyServerIsLoading": "O Servidor Jellyfin está carregando. Por favor, tente novamente mais tarde.",
|
"StartupEmbyServerIsLoading": "O Servidor Jellyfin está carregando. Por favor, tente novamente mais tarde.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Download de legendas falhou para {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Houve um problema ao baixar as legendas de {0} para {1}",
|
"SubtitleDownloadFailureFromForItem": "Houve um problema ao baixar as legendas de {0} para {1}",
|
||||||
"Sync": "Sincronizar",
|
"Sync": "Sincronizar",
|
||||||
"System": "Sistema",
|
"System": "Sistema",
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
"Artists": "Artistas",
|
"Artists": "Artistas",
|
||||||
"AuthenticationSucceededWithUserName": "{0} autenticado com sucesso",
|
"AuthenticationSucceededWithUserName": "{0} autenticado com sucesso",
|
||||||
"Books": "Livros",
|
"Books": "Livros",
|
||||||
"CameraImageUploadedFrom": "Uma nova imagem da câmara foi enviada a partir de {0}",
|
"CameraImageUploadedFrom": "Uma nova imagem de câmara foi enviada a partir de {0}",
|
||||||
"Channels": "Canais",
|
"Channels": "Canais",
|
||||||
"ChapterNameValue": "Capítulo {0}",
|
"ChapterNameValue": "Capítulo {0}",
|
||||||
"Collections": "Coleções",
|
"Collections": "Coleções",
|
||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Séries",
|
"Shows": "Séries",
|
||||||
"Songs": "Músicas",
|
"Songs": "Músicas",
|
||||||
"StartupEmbyServerIsLoading": "O servidor Jellyfin está a iniciar. Tente novamente mais tarde.",
|
"StartupEmbyServerIsLoading": "O servidor Jellyfin está a iniciar. Tente novamente mais tarde.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Falha na transferência de legendas a partir de {0} para {1}",
|
"SubtitleDownloadFailureFromForItem": "Falha na transferência de legendas a partir de {0} para {1}",
|
||||||
"Sync": "Sincronização",
|
"Sync": "Sincronização",
|
||||||
"System": "Sistema",
|
"System": "Sistema",
|
||||||
@@ -124,8 +125,8 @@
|
|||||||
"TaskKeyframeExtractor": "Extrator de Quadros-chave",
|
"TaskKeyframeExtractor": "Extrator de Quadros-chave",
|
||||||
"External": "Externo",
|
"External": "Externo",
|
||||||
"HearingImpaired": "Surdo",
|
"HearingImpaired": "Surdo",
|
||||||
"TaskRefreshTrickplayImages": "Gerar imagens de trickplay",
|
"TaskRefreshTrickplayImages": "Gerar imagens de truques",
|
||||||
"TaskRefreshTrickplayImagesDescription": "Cria pré-visualizações de trickplay para vídeos nas bibliotecas ativadas.",
|
"TaskRefreshTrickplayImagesDescription": "Cria vizualizações de truques para videos nas librarias ativas.",
|
||||||
"TaskCleanCollectionsAndPlaylistsDescription": "Remove itens de coleções e listas de reprodução que já não existem.",
|
"TaskCleanCollectionsAndPlaylistsDescription": "Remove itens de coleções e listas de reprodução que já não existem.",
|
||||||
"TaskCleanCollectionsAndPlaylists": "Limpar coleções e listas de reprodução",
|
"TaskCleanCollectionsAndPlaylists": "Limpar coleções e listas de reprodução",
|
||||||
"TaskAudioNormalizationDescription": "Analisa os ficheiros para obter dados de normalização de áudio.",
|
"TaskAudioNormalizationDescription": "Analisa os ficheiros para obter dados de normalização de áudio.",
|
||||||
|
|||||||
@@ -124,8 +124,8 @@
|
|||||||
"HearingImpaired": "Problemas auditivos",
|
"HearingImpaired": "Problemas auditivos",
|
||||||
"TaskKeyframeExtractor": "Extrator de quadro-chave",
|
"TaskKeyframeExtractor": "Extrator de quadro-chave",
|
||||||
"TaskKeyframeExtractorDescription": "Retira frames chave do video para criar listas HLS precisas. Esta tarefa pode correr durante algum tempo.",
|
"TaskKeyframeExtractorDescription": "Retira frames chave do video para criar listas HLS precisas. Esta tarefa pode correr durante algum tempo.",
|
||||||
"TaskRefreshTrickplayImages": "Gerar imagens de trickplay",
|
"TaskRefreshTrickplayImages": "Gerar miniaturas de vídeo",
|
||||||
"TaskRefreshTrickplayImagesDescription": "Cria pré-visualizações de trickplay para vídeos nas bibliotecas ativadas.",
|
"TaskRefreshTrickplayImagesDescription": "Cria miniaturas de vídeo para vídeos nas bibliotecas definidas.",
|
||||||
"TaskCleanCollectionsAndPlaylistsDescription": "Remove itens de coleções e listas de reprodução que já não existem.",
|
"TaskCleanCollectionsAndPlaylistsDescription": "Remove itens de coleções e listas de reprodução que já não existem.",
|
||||||
"TaskCleanCollectionsAndPlaylists": "Limpar coleções e listas de reprodução",
|
"TaskCleanCollectionsAndPlaylists": "Limpar coleções e listas de reprodução",
|
||||||
"TaskAudioNormalizationDescription": "Analisa os ficheiros para obter dados de normalização de áudio.",
|
"TaskAudioNormalizationDescription": "Analisa os ficheiros para obter dados de normalização de áudio.",
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Сериалы",
|
"Shows": "Сериалы",
|
||||||
"Songs": "Композиции",
|
"Songs": "Композиции",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server загружается. Повторите попытку в ближайшее время.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server загружается. Повторите попытку в ближайшее время.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Субтитры к {0} не удалось загрузить",
|
||||||
"SubtitleDownloadFailureFromForItem": "Субтитры к {1} не удалось загрузить с {0}",
|
"SubtitleDownloadFailureFromForItem": "Субтитры к {1} не удалось загрузить с {0}",
|
||||||
"Sync": "Синхронизация",
|
"Sync": "Синхронизация",
|
||||||
"System": "Система",
|
"System": "Система",
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Seriály",
|
"Shows": "Seriály",
|
||||||
"Songs": "Skladby",
|
"Songs": "Skladby",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server sa spúšťa. Prosím, skúste to o chvíľu znova.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server sa spúšťa. Prosím, skúste to o chvíľu znova.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Sťahovanie titulkov pre {0} zlyhalo",
|
||||||
"SubtitleDownloadFailureFromForItem": "Sťahovanie titulkov z {0} pre {1} zlyhalo",
|
"SubtitleDownloadFailureFromForItem": "Sťahovanie titulkov z {0} pre {1} zlyhalo",
|
||||||
"Sync": "Synchronizácia",
|
"Sync": "Synchronizácia",
|
||||||
"System": "Systém",
|
"System": "Systém",
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"Shows": "Serije",
|
"Shows": "Serije",
|
||||||
"Songs": "Pesmi",
|
"Songs": "Pesmi",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin strežnik se zaganja. Poskusite ponovno kasneje.",
|
"StartupEmbyServerIsLoading": "Jellyfin strežnik se zaganja. Poskusite ponovno kasneje.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Neuspešen prenos podnapisov iz {0} za {1}",
|
"SubtitleDownloadFailureFromForItem": "Neuspešen prenos podnapisov iz {0} za {1}",
|
||||||
"Sync": "Sinhroniziraj",
|
"Sync": "Sinhroniziraj",
|
||||||
"System": "Sistem",
|
"System": "Sistem",
|
||||||
|
|||||||
@@ -73,10 +73,11 @@
|
|||||||
"Shows": "Serier",
|
"Shows": "Serier",
|
||||||
"Songs": "Låtar",
|
"Songs": "Låtar",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server arbetar. Pröva igen snart.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server arbetar. Pröva igen snart.",
|
||||||
|
"SubtitleDownloadFailureForItem": "Nerladdning av undertexter för {0} misslyckades",
|
||||||
"SubtitleDownloadFailureFromForItem": "Undertexter kunde inte laddas ner från {0} till {1}",
|
"SubtitleDownloadFailureFromForItem": "Undertexter kunde inte laddas ner från {0} till {1}",
|
||||||
"Sync": "Synk",
|
"Sync": "Synk",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
"TvShows": "Tv-serier",
|
"TvShows": "TV-serier",
|
||||||
"User": "Användare",
|
"User": "Användare",
|
||||||
"UserCreatedWithName": "Användaren {0} har skapats",
|
"UserCreatedWithName": "Användaren {0} har skapats",
|
||||||
"UserDeletedWithName": "Användaren {0} har tagits bort",
|
"UserDeletedWithName": "Användaren {0} har tagits bort",
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
{}
|
|
||||||
@@ -135,7 +135,5 @@
|
|||||||
"TaskExtractMediaSegments": "การสแกนส่วนของสื่อมีเดีย",
|
"TaskExtractMediaSegments": "การสแกนส่วนของสื่อมีเดีย",
|
||||||
"TaskMoveTrickplayImagesDescription": "ย้ายไฟล์ Trickplay ตามการตั้งค่าของไลบรารี",
|
"TaskMoveTrickplayImagesDescription": "ย้ายไฟล์ Trickplay ตามการตั้งค่าของไลบรารี",
|
||||||
"TaskExtractMediaSegmentsDescription": "แยกหรือดึงส่วนของสื่อจากปลั๊กอินที่เปิดใช้งาน MediaSegment",
|
"TaskExtractMediaSegmentsDescription": "แยกหรือดึงส่วนของสื่อจากปลั๊กอินที่เปิดใช้งาน MediaSegment",
|
||||||
"TaskMoveTrickplayImages": "ย้ายตำแหน่งเก็บภาพตัวอย่าง Trickplay",
|
"TaskMoveTrickplayImages": "ย้ายตำแหน่งเก็บภาพตัวอย่าง Trickplay"
|
||||||
"CleanupUserDataTask": "ส่วนงานล้างข้อมูลผู้ใช้",
|
|
||||||
"CleanupUserDataTaskDescription": "ล้างข้อมูลผู้ใช้ทั้งหมด (สถานะการรับชม สถานะรายการโปรด ฯลฯ) จากสื่อที่ไม่ได้ใช้งานแล้วอย่างน้อย 90 วัน"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
"ItemAddedWithName": "{0} kütüphaneye eklendi",
|
"ItemAddedWithName": "{0} kütüphaneye eklendi",
|
||||||
"ItemRemovedWithName": "{0} kütüphaneden silindi",
|
"ItemRemovedWithName": "{0} kütüphaneden silindi",
|
||||||
"LabelIpAddressValue": "IP adresi: {0}",
|
"LabelIpAddressValue": "IP adresi: {0}",
|
||||||
"LabelRunningTimeValue": "Oynatma süresi: {0}",
|
"LabelRunningTimeValue": "Çalışma süresi: {0}",
|
||||||
"Latest": "En son",
|
"Latest": "En son",
|
||||||
"MessageApplicationUpdated": "Jellyfin Sunucusu güncellendi",
|
"MessageApplicationUpdated": "Jellyfin Sunucusu güncellendi",
|
||||||
"MessageApplicationUpdatedTo": "Jellyfin Sunucusu {0} sürümüne güncellendi",
|
"MessageApplicationUpdatedTo": "Jellyfin Sunucusu {0} sürümüne güncellendi",
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
"MusicVideos": "Müzik Videoları",
|
"MusicVideos": "Müzik Videoları",
|
||||||
"NameInstallFailed": "{0} kurulumu başarısız",
|
"NameInstallFailed": "{0} kurulumu başarısız",
|
||||||
"NameSeasonNumber": "{0}. Sezon",
|
"NameSeasonNumber": "{0}. Sezon",
|
||||||
"NameSeasonUnknown": "Sezon Bilinmiyor",
|
"NameSeasonUnknown": "Bilinmeyen Sezon",
|
||||||
"NewVersionIsAvailable": "Jellyfin Sunucusunun yeni bir sürümü indirmek için hazır.",
|
"NewVersionIsAvailable": "Jellyfin Sunucusunun yeni bir sürümü indirmek için hazır.",
|
||||||
"NotificationOptionApplicationUpdateAvailable": "Uygulama güncellemesi mevcut",
|
"NotificationOptionApplicationUpdateAvailable": "Uygulama güncellemesi mevcut",
|
||||||
"NotificationOptionApplicationUpdateInstalled": "Uygulama güncellemesi yüklendi",
|
"NotificationOptionApplicationUpdateInstalled": "Uygulama güncellemesi yüklendi",
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
"NotificationOptionPluginUpdateInstalled": "Eklenti güncellemesi yüklendi",
|
"NotificationOptionPluginUpdateInstalled": "Eklenti güncellemesi yüklendi",
|
||||||
"NotificationOptionServerRestartRequired": "Sunucunun yeniden başlatılması gerekiyor",
|
"NotificationOptionServerRestartRequired": "Sunucunun yeniden başlatılması gerekiyor",
|
||||||
"NotificationOptionTaskFailed": "Zamanlanmış görev hatası",
|
"NotificationOptionTaskFailed": "Zamanlanmış görev hatası",
|
||||||
"NotificationOptionUserLockedOut": "Kullanıcı hesabı kilitlendi",
|
"NotificationOptionUserLockedOut": "Kullanıcı kilitlendi",
|
||||||
"NotificationOptionVideoPlayback": "Video oynatma başladı",
|
"NotificationOptionVideoPlayback": "Video oynatma başladı",
|
||||||
"NotificationOptionVideoPlaybackStopped": "Video oynatma durduruldu",
|
"NotificationOptionVideoPlaybackStopped": "Video oynatma durduruldu",
|
||||||
"Photos": "Fotoğraflar",
|
"Photos": "Fotoğraflar",
|
||||||
@@ -73,7 +73,8 @@
|
|||||||
"Shows": "Diziler",
|
"Shows": "Diziler",
|
||||||
"Songs": "Şarkılar",
|
"Songs": "Şarkılar",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Sunucusu yükleniyor. Lütfen kısa süre sonra tekrar deneyin.",
|
"StartupEmbyServerIsLoading": "Jellyfin Sunucusu yükleniyor. Lütfen kısa süre sonra tekrar deneyin.",
|
||||||
"SubtitleDownloadFailureFromForItem": "{1} için altyazılar {0} sağlayıcısından indirilemedi",
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
|
"SubtitleDownloadFailureFromForItem": "{1} için alt yazılar {0} sağlayıcısından indirilemedi",
|
||||||
"Sync": "Eşzamanlama",
|
"Sync": "Eşzamanlama",
|
||||||
"System": "Sistem",
|
"System": "Sistem",
|
||||||
"TvShows": "Diziler",
|
"TvShows": "Diziler",
|
||||||
@@ -81,7 +82,7 @@
|
|||||||
"UserCreatedWithName": "{0} kullanıcısı oluşturuldu",
|
"UserCreatedWithName": "{0} kullanıcısı oluşturuldu",
|
||||||
"UserDeletedWithName": "{0} kullanıcısı silindi",
|
"UserDeletedWithName": "{0} kullanıcısı silindi",
|
||||||
"UserDownloadingItemWithValues": "{0} kullanıcısı {1} medyasını indiriyor",
|
"UserDownloadingItemWithValues": "{0} kullanıcısı {1} medyasını indiriyor",
|
||||||
"UserLockedOutWithName": "{0} adlı kullanıcı hesabı kilitlendi",
|
"UserLockedOutWithName": "{0} adlı kullanıcı kilitlendi",
|
||||||
"UserOfflineFromDevice": "{0} kullanıcısının {1} ile bağlantısı kesildi",
|
"UserOfflineFromDevice": "{0} kullanıcısının {1} ile bağlantısı kesildi",
|
||||||
"UserOnlineFromDevice": "{0} kullanıcısı {1} ile çevrimiçi",
|
"UserOnlineFromDevice": "{0} kullanıcısı {1} ile çevrimiçi",
|
||||||
"UserPasswordChangedWithName": "{0} kullanıcısının parolası değiştirildi",
|
"UserPasswordChangedWithName": "{0} kullanıcısının parolası değiştirildi",
|
||||||
@@ -97,8 +98,8 @@
|
|||||||
"TasksLibraryCategory": "Kütüphane",
|
"TasksLibraryCategory": "Kütüphane",
|
||||||
"TasksMaintenanceCategory": "Bakım",
|
"TasksMaintenanceCategory": "Bakım",
|
||||||
"TaskRefreshPeopleDescription": "Medya kütüphanenizdeki videoların oyuncu ve yönetmen bilgilerini günceller.",
|
"TaskRefreshPeopleDescription": "Medya kütüphanenizdeki videoların oyuncu ve yönetmen bilgilerini günceller.",
|
||||||
"TaskDownloadMissingSubtitlesDescription": "Meta veri yapılandırmasına dayalı olarak eksik altyazılar için internette arama yapar.",
|
"TaskDownloadMissingSubtitlesDescription": "Meta veri yapılandırmasına dayalı olarak eksik alt yazılar için internette arama yapar.",
|
||||||
"TaskDownloadMissingSubtitles": "Eksik altyazıları indir",
|
"TaskDownloadMissingSubtitles": "Eksik alt yazıları indir",
|
||||||
"TaskRefreshChannelsDescription": "Internet kanal bilgilerini yenile.",
|
"TaskRefreshChannelsDescription": "Internet kanal bilgilerini yenile.",
|
||||||
"TaskRefreshChannels": "Kanalları Yenile",
|
"TaskRefreshChannels": "Kanalları Yenile",
|
||||||
"TaskCleanTranscodeDescription": "Bir günden daha eski kod dönüştürme dosyalarını siler.",
|
"TaskCleanTranscodeDescription": "Bir günden daha eski kod dönüştürme dosyalarını siler.",
|
||||||
@@ -124,15 +125,15 @@
|
|||||||
"TaskKeyframeExtractor": "Ana Kare Çıkarıcı",
|
"TaskKeyframeExtractor": "Ana Kare Çıkarıcı",
|
||||||
"External": "Harici",
|
"External": "Harici",
|
||||||
"HearingImpaired": "Duyma Engelli",
|
"HearingImpaired": "Duyma Engelli",
|
||||||
"TaskRefreshTrickplayImages": "Hızlı Önizleme Görsellerini Oluştur",
|
"TaskRefreshTrickplayImages": "Trickplay Görselleri Oluştur",
|
||||||
"TaskRefreshTrickplayImagesDescription": "Etkin kütüphanelerdeki videolar için hızlı önizleme görselleri oluşturur.",
|
"TaskRefreshTrickplayImagesDescription": "Etkin kütüphanelerdeki videolar için trickplay önizlemeleri oluşturur.",
|
||||||
"TaskCleanCollectionsAndPlaylistsDescription": "Artık var olmayan koleksiyon ve çalma listelerindeki ögeleri kaldırır.",
|
"TaskCleanCollectionsAndPlaylistsDescription": "Artık var olmayan koleksiyon ve çalma listelerindeki ögeleri kaldırır.",
|
||||||
"TaskCleanCollectionsAndPlaylists": "Koleksiyonları ve çalma listelerini temizleyin",
|
"TaskCleanCollectionsAndPlaylists": "Koleksiyonları ve çalma listelerini temizleyin",
|
||||||
"TaskAudioNormalizationDescription": "Ses normalleştirme verileri için dosyaları tarar.",
|
"TaskAudioNormalizationDescription": "Ses normalleştirme verileri için dosyaları tarar.",
|
||||||
"TaskAudioNormalization": "Ses Normalleştirme",
|
"TaskAudioNormalization": "Ses Normalleştirme",
|
||||||
"TaskExtractMediaSegments": "Medya Segmenti Tarama",
|
"TaskExtractMediaSegments": "Medya Segmenti Tarama",
|
||||||
"TaskMoveTrickplayImages": "Hızlı Önizleme Görsel Konumunu Taşıma",
|
"TaskMoveTrickplayImages": "Trickplay Görsel Konumunu Taşıma",
|
||||||
"TaskMoveTrickplayImagesDescription": "Mevcut hızlı önizleme dosyalarını kütüphane ayarlarına göre taşır.",
|
"TaskMoveTrickplayImagesDescription": "Mevcut trickplay dosyalarını kütüphane ayarlarına göre taşır.",
|
||||||
"TaskDownloadMissingLyrics": "Eksik şarkı sözlerini indir",
|
"TaskDownloadMissingLyrics": "Eksik şarkı sözlerini indir",
|
||||||
"TaskDownloadMissingLyricsDescription": "Şarkı sözlerini indirir",
|
"TaskDownloadMissingLyricsDescription": "Şarkı sözlerini indirir",
|
||||||
"TaskExtractMediaSegmentsDescription": "MediaSegment özelliği etkin olan eklentilerden medya segmentlerini çıkarır veya alır.",
|
"TaskExtractMediaSegmentsDescription": "MediaSegment özelliği etkin olan eklentilerden medya segmentlerini çıkarır veya alır.",
|
||||||
|
|||||||
@@ -124,17 +124,17 @@
|
|||||||
"TaskKeyframeExtractor": "Екстрактор ключових кадрів",
|
"TaskKeyframeExtractor": "Екстрактор ключових кадрів",
|
||||||
"External": "Зовнішній",
|
"External": "Зовнішній",
|
||||||
"HearingImpaired": "З порушеннями слуху",
|
"HearingImpaired": "З порушеннями слуху",
|
||||||
"TaskRefreshTrickplayImagesDescription": "Створює прев'ю-зображення для відео у ввімкнених медіатеках.",
|
"TaskRefreshTrickplayImagesDescription": "Створює trickplay-зображення для відео у ввімкнених медіатеках.",
|
||||||
"TaskRefreshTrickplayImages": "Створити Прев'ю-зображення",
|
"TaskRefreshTrickplayImages": "Створити Trickplay-зображення",
|
||||||
"TaskCleanCollectionsAndPlaylists": "Очистити колекції і списки відтворення",
|
"TaskCleanCollectionsAndPlaylists": "Очистити колекції і списки відтворення",
|
||||||
"TaskCleanCollectionsAndPlaylistsDescription": "Видаляє елементи з колекцій і списків відтворення, які більше не існують.",
|
"TaskCleanCollectionsAndPlaylistsDescription": "Видаляє елементи з колекцій і списків відтворення, які більше не існують.",
|
||||||
"TaskAudioNormalizationDescription": "Сканує файли на наявність даних для нормалізації звуку.",
|
"TaskAudioNormalizationDescription": "Сканує файли на наявність даних для нормалізації звуку.",
|
||||||
"TaskAudioNormalization": "Нормалізація аудіо",
|
"TaskAudioNormalization": "Нормалізація аудіо",
|
||||||
"TaskDownloadMissingLyrics": "Завантажити відсутні тексти пісень",
|
"TaskDownloadMissingLyrics": "Завантажити відсутні тексти пісень",
|
||||||
"TaskDownloadMissingLyricsDescription": "Завантаження текстів пісень",
|
"TaskDownloadMissingLyricsDescription": "Завантаження текстів пісень",
|
||||||
"TaskMoveTrickplayImagesDescription": "Переміщує наявні прев'ю-зображення відповідно до налаштувань медіатеки.",
|
"TaskMoveTrickplayImagesDescription": "Переміщує наявні Trickplay-зображення відповідно до налаштувань медіатеки.",
|
||||||
"TaskExtractMediaSegments": "Сканування медіа-сегментів",
|
"TaskExtractMediaSegments": "Сканування медіа-сегментів",
|
||||||
"TaskMoveTrickplayImages": "Змінити місце розташування прев'ю-зображень",
|
"TaskMoveTrickplayImages": "Змінити місце розташування Trickplay-зображень",
|
||||||
"TaskExtractMediaSegmentsDescription": "Витягує або отримує медіа-сегменти з плагінів з підтримкою MediaSegment.",
|
"TaskExtractMediaSegmentsDescription": "Витягує або отримує медіа-сегменти з плагінів з підтримкою MediaSegment.",
|
||||||
"CleanupUserDataTask": "Завдання очищення даних користувача",
|
"CleanupUserDataTask": "Завдання очищення даних користувача",
|
||||||
"CleanupUserDataTaskDescription": "Очищає всі дані користувача (стан перегляду, статус обраного тощо) з медіа, які перестали бути доступними щонайменше 90 днів тому."
|
"CleanupUserDataTaskDescription": "Очищає всі дані користувача (стан перегляду, статус обраного тощо) з медіа, які перестали бути доступними щонайменше 90 днів тому."
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user