mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Merge branch 'origin/master'
This commit is contained in:
commit
0850a1555b
20 changed files with 455 additions and 430 deletions
420
package-lock.json
generated
420
package-lock.json
generated
|
@ -19,7 +19,6 @@
|
|||
"@fontsource/noto-sans-tc": "5.0.19",
|
||||
"@jellyfin/libass-wasm": "4.2.1",
|
||||
"@jellyfin/sdk": "0.0.0-unstable.202407020501",
|
||||
"@loadable/component": "5.16.4",
|
||||
"@mui/icons-material": "5.15.19",
|
||||
"@mui/material": "5.15.19",
|
||||
"@mui/x-data-grid": "7.6.1",
|
||||
|
@ -81,7 +80,7 @@
|
|||
"@typescript-eslint/eslint-plugin": "5.62.0",
|
||||
"@typescript-eslint/parser": "5.62.0",
|
||||
"@uupaa/dynamic-import-polyfill": "1.0.2",
|
||||
"@vitest/coverage-v8": "2.0.1",
|
||||
"@vitest/coverage-v8": "2.0.2",
|
||||
"autoprefixer": "10.4.19",
|
||||
"babel-loader": "9.1.3",
|
||||
"babel-plugin-dynamic-import-polyfill": "1.0.0",
|
||||
|
@ -110,7 +109,7 @@
|
|||
"postcss-loader": "8.1.1",
|
||||
"postcss-preset-env": "9.6.0",
|
||||
"postcss-scss": "4.0.9",
|
||||
"sass": "1.77.6",
|
||||
"sass": "1.77.7",
|
||||
"sass-loader": "14.2.1",
|
||||
"source-map-loader": "5.0.0",
|
||||
"speed-measure-webpack-plugin": "1.5.0",
|
||||
|
@ -122,7 +121,7 @@
|
|||
"stylelint-scss": "5.3.2",
|
||||
"ts-loader": "9.5.1",
|
||||
"typescript": "5.5.3",
|
||||
"vitest": "2.0.1",
|
||||
"vitest": "2.0.2",
|
||||
"webpack": "5.92.1",
|
||||
"webpack-bundle-analyzer": "4.10.2",
|
||||
"webpack-cli": "5.1.4",
|
||||
|
@ -3991,18 +3990,6 @@
|
|||
"axios": "^1.3.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@jest/schemas": {
|
||||
"version": "29.6.3",
|
||||
"resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
|
||||
"integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@sinclair/typebox": "^0.27.8"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/gen-mapping": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
|
||||
|
@ -4124,27 +4111,6 @@
|
|||
"integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@loadable/component": {
|
||||
"version": "5.16.4",
|
||||
"resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.16.4.tgz",
|
||||
"integrity": "sha512-fJWxx9b5WHX90QKmizo9B+es2so8DnBthI1mbflwCoOyvzEwxiZ/SVDCTtXEnHG72/kGBdzr297SSIekYtzSOQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.12.18",
|
||||
"hoist-non-react-statics": "^3.3.1",
|
||||
"react-is": "^16.12.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/gregberge"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "^16.3.0 || ^17.0.0 || ^18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@mapbox/node-pre-gyp": {
|
||||
"version": "1.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz",
|
||||
|
@ -4768,12 +4734,6 @@
|
|||
"win32"
|
||||
]
|
||||
},
|
||||
"node_modules/@sinclair/typebox": {
|
||||
"version": "0.27.8",
|
||||
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
|
||||
"integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@sindresorhus/merge-streams": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz",
|
||||
|
@ -5541,9 +5501,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"node_modules/@vitest/coverage-v8": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.0.1.tgz",
|
||||
"integrity": "sha512-ACcSlJtWlravv0QyJSCO9rvm06msj6x0HooXouB0NXKG6PGxUN5VX4X8QEATfTMGsJlZLqWvq0dEY9W1V0rcSw==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.0.2.tgz",
|
||||
"integrity": "sha512-iA8eb4PMid3bMc++gfQSTvYE1QL//fC8pz+rKsTUDBFjdDiy/gH45hvpqyDu5K7FHhvgG0GNNCJzTMMSFKhoxg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
|
@ -5556,41 +5516,55 @@
|
|||
"istanbul-reports": "^3.1.7",
|
||||
"magic-string": "^0.30.10",
|
||||
"magicast": "^0.3.4",
|
||||
"picocolors": "^1.0.1",
|
||||
"std-env": "^3.7.0",
|
||||
"strip-literal": "^2.1.0",
|
||||
"test-exclude": "^7.0.1"
|
||||
"test-exclude": "^7.0.1",
|
||||
"tinyrainbow": "^1.2.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vitest": "2.0.1"
|
||||
"vitest": "2.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/expect": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.1.tgz",
|
||||
"integrity": "sha512-yw70WL3ZwzbI2O3MOXYP2Shf4vqVkS3q5FckLJ6lhT9VMMtDyWdofD53COZcoeuHwsBymdOZp99r5bOr5g+oeA==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.2.tgz",
|
||||
"integrity": "sha512-nKAvxBYqcDugYZ4nJvnm5OR8eDJdgWjk4XM9owQKUjzW70q0icGV2HVnQOyYsp906xJaBDUXw0+9EHw2T8e0mQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitest/spy": "2.0.1",
|
||||
"@vitest/utils": "2.0.1",
|
||||
"chai": "^5.1.1"
|
||||
"@vitest/spy": "2.0.2",
|
||||
"@vitest/utils": "2.0.2",
|
||||
"chai": "^5.1.1",
|
||||
"tinyrainbow": "^1.2.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/pretty-format": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.3.tgz",
|
||||
"integrity": "sha512-URM4GLsB2xD37nnTyvf6kfObFafxmycCL8un3OC9gaCs5cti2u+5rJdIflZ2fUJUen4NbvF6jCufwViAFLvz1g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"tinyrainbow": "^1.2.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/runner": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.1.tgz",
|
||||
"integrity": "sha512-XfcSXOGGxgR2dQ466ZYqf0ZtDLLDx9mZeQcKjQDLQ9y6Cmk2Wl7wxMuhiYK4Fo1VxCtLcFEGW2XpcfMuiD1Maw==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.2.tgz",
|
||||
"integrity": "sha512-OCh437Vi8Wdbif1e0OvQcbfM3sW4s2lpmOjAE7qfLrpzJX2M7J1IQlNvEcb/fu6kaIB9n9n35wS0G2Q3en5kHg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitest/utils": "2.0.1",
|
||||
"@vitest/utils": "2.0.2",
|
||||
"pathe": "^1.1.2"
|
||||
},
|
||||
"funding": {
|
||||
|
@ -5598,24 +5572,37 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@vitest/snapshot": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.1.tgz",
|
||||
"integrity": "sha512-rst79a4Q+J5vrvHRapdfK4BdqpMH0eF58jVY1vYeBo/1be+nkyenGI5SCSohmjf6MkCkI20/yo5oG+0R8qrAnA==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.2.tgz",
|
||||
"integrity": "sha512-Yc2ewhhZhx+0f9cSUdfzPRcsM6PhIb+S43wxE7OG0kTxqgqzo8tHkXFuFlndXeDMp09G3sY/X5OAo/RfYydf1g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitest/pretty-format": "2.0.2",
|
||||
"magic-string": "^0.30.10",
|
||||
"pathe": "^1.1.2",
|
||||
"pretty-format": "^29.7.0"
|
||||
"pathe": "^1.1.2"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/snapshot/node_modules/@vitest/pretty-format": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.2.tgz",
|
||||
"integrity": "sha512-SBCyOXfGVvddRd9r2PwoVR0fonQjh9BMIcBMlSzbcNwFfGr6ZhOhvBzurjvi2F4ryut2HcqiFhNeDVGwru8tLg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"tinyrainbow": "^1.2.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/spy": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.1.tgz",
|
||||
"integrity": "sha512-NLkdxbSefAtJN56GtCNcB4GiHFb5i9q1uh4V229lrlTZt2fnwsTyjLuWIli1xwK2fQspJJmHXHyWx0Of3KTXWA==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.2.tgz",
|
||||
"integrity": "sha512-MgwJ4AZtCgqyp2d7WcQVE8aNG5vQ9zu9qMPYQHjsld/QVsrvg78beNrXdO4HYkP0lDahCO3P4F27aagIag+SGQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
|
@ -5626,16 +5613,29 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@vitest/utils": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.1.tgz",
|
||||
"integrity": "sha512-STH+2fHZxlveh1mpU4tKzNgRk7RZJyr6kFGJYCI5vocdfqfPsQrgVC6k7dBWHfin5QNB4TLvRS0Ckly3Dt1uWw==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.2.tgz",
|
||||
"integrity": "sha512-pxCY1v7kmOCWYWjzc0zfjGTA3Wmn8PKnlPvSrsA643P1NHl1fOyXj2Q9SaNlrlFE+ivCsxM80Ov3AR82RmHCWQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"diff-sequences": "^29.6.3",
|
||||
"@vitest/pretty-format": "2.0.2",
|
||||
"estree-walker": "^3.0.3",
|
||||
"loupe": "^3.1.1",
|
||||
"pretty-format": "^29.7.0"
|
||||
"tinyrainbow": "^1.2.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/utils/node_modules/@vitest/pretty-format": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.2.tgz",
|
||||
"integrity": "sha512-SBCyOXfGVvddRd9r2PwoVR0fonQjh9BMIcBMlSzbcNwFfGr6ZhOhvBzurjvi2F4ryut2HcqiFhNeDVGwru8tLg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"tinyrainbow": "^1.2.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
|
@ -8583,16 +8583,6 @@
|
|||
"integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/diff-sequences": {
|
||||
"version": "29.6.3",
|
||||
"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
|
||||
"integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/dir-glob": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
|
||||
|
@ -17321,38 +17311,6 @@
|
|||
"renderkid": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/pretty-format": {
|
||||
"version": "29.7.0",
|
||||
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
|
||||
"integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jest/schemas": "^29.6.3",
|
||||
"ansi-styles": "^5.0.0",
|
||||
"react-is": "^18.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/pretty-format/node_modules/ansi-styles": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
|
||||
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/pretty-format/node_modules/react-is": {
|
||||
"version": "18.2.0",
|
||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
|
||||
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/process-nextick-args": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
||||
|
@ -18337,9 +18295,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"node_modules/sass": {
|
||||
"version": "1.77.6",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz",
|
||||
"integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==",
|
||||
"version": "1.77.7",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.77.7.tgz",
|
||||
"integrity": "sha512-9ywH75cO+rLjbrZ6en3Gp8qAMwPGBapFtlsMJoDTkcMU/bSe5a6cjKVUn5Jr4Gzg5GbP3HE8cm+02pLCgcoMow==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
|
@ -22327,6 +22285,16 @@
|
|||
"node": "^18.0.0 || >=20.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/tinyrainbow": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz",
|
||||
"integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/tinyspy": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.0.tgz",
|
||||
|
@ -23333,16 +23301,16 @@
|
|||
}
|
||||
},
|
||||
"node_modules/vite-node": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.1.tgz",
|
||||
"integrity": "sha512-nVd6kyhPAql0s+xIVJzuF+RSRH8ZimNrm6U8ZvTA4MXv8CHI17TFaQwRaFiK75YX6XeFqZD4IoAaAfi9OR1XvQ==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.2.tgz",
|
||||
"integrity": "sha512-w4vkSz1Wo+NIQg8pjlEn0jQbcM/0D+xVaYjhw3cvarTanLLBh54oNiRbsT8PNK5GfuST0IlVXjsNRoNlqvY/fw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"cac": "^6.7.14",
|
||||
"debug": "^4.3.5",
|
||||
"pathe": "^1.1.2",
|
||||
"picocolors": "^1.0.1",
|
||||
"tinyrainbow": "^1.2.0",
|
||||
"vite": "^5.0.0"
|
||||
},
|
||||
"bin": {
|
||||
|
@ -23356,29 +23324,30 @@
|
|||
}
|
||||
},
|
||||
"node_modules/vitest": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.1.tgz",
|
||||
"integrity": "sha512-PBPvNXRJiywtI9NmbnEqHIhcXlk8mB0aKf6REQIaYGY4JtWF1Pg8Am+N0vAuxdg/wUSlxPSVJr8QdjwcVxc2Hg==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.2.tgz",
|
||||
"integrity": "sha512-WlpZ9neRIjNBIOQwBYfBSr0+of5ZCbxT2TVGKW4Lv0c8+srCFIiRdsP7U009t8mMn821HQ4XKgkx5dVWpyoyLw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@ampproject/remapping": "^2.3.0",
|
||||
"@vitest/expect": "2.0.1",
|
||||
"@vitest/runner": "2.0.1",
|
||||
"@vitest/snapshot": "2.0.1",
|
||||
"@vitest/spy": "2.0.1",
|
||||
"@vitest/utils": "2.0.1",
|
||||
"@vitest/expect": "2.0.2",
|
||||
"@vitest/pretty-format": "^2.0.2",
|
||||
"@vitest/runner": "2.0.2",
|
||||
"@vitest/snapshot": "2.0.2",
|
||||
"@vitest/spy": "2.0.2",
|
||||
"@vitest/utils": "2.0.2",
|
||||
"chai": "^5.1.1",
|
||||
"debug": "^4.3.5",
|
||||
"execa": "^8.0.1",
|
||||
"magic-string": "^0.30.10",
|
||||
"pathe": "^1.1.2",
|
||||
"picocolors": "^1.0.1",
|
||||
"std-env": "^3.7.0",
|
||||
"tinybench": "^2.8.0",
|
||||
"tinypool": "^1.0.0",
|
||||
"tinyrainbow": "^1.2.0",
|
||||
"vite": "^5.0.0",
|
||||
"vite-node": "2.0.1",
|
||||
"vite-node": "2.0.2",
|
||||
"why-is-node-running": "^2.2.2"
|
||||
},
|
||||
"bin": {
|
||||
|
@ -23393,8 +23362,8 @@
|
|||
"peerDependencies": {
|
||||
"@edge-runtime/vm": "*",
|
||||
"@types/node": "^18.0.0 || >=20.0.0",
|
||||
"@vitest/browser": "2.0.1",
|
||||
"@vitest/ui": "2.0.1",
|
||||
"@vitest/browser": "2.0.2",
|
||||
"@vitest/ui": "2.0.2",
|
||||
"happy-dom": "*",
|
||||
"jsdom": "*"
|
||||
},
|
||||
|
@ -26896,15 +26865,6 @@
|
|||
"integrity": "sha512-7XKn8zi6u4EJsV2iSy0Pti52b9tT+sSip9nAbO41Cb0QSqhgIBjvbIFZzSIOXAFuUKKaV+PwGhhN6LysvfrI6A==",
|
||||
"requires": {}
|
||||
},
|
||||
"@jest/schemas": {
|
||||
"version": "29.6.3",
|
||||
"resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
|
||||
"integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@sinclair/typebox": "^0.27.8"
|
||||
}
|
||||
},
|
||||
"@jridgewell/gen-mapping": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
|
||||
|
@ -26986,16 +26946,6 @@
|
|||
"integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==",
|
||||
"dev": true
|
||||
},
|
||||
"@loadable/component": {
|
||||
"version": "5.16.4",
|
||||
"resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.16.4.tgz",
|
||||
"integrity": "sha512-fJWxx9b5WHX90QKmizo9B+es2so8DnBthI1mbflwCoOyvzEwxiZ/SVDCTtXEnHG72/kGBdzr297SSIekYtzSOQ==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.12.18",
|
||||
"hoist-non-react-statics": "^3.3.1",
|
||||
"react-is": "^16.12.0"
|
||||
}
|
||||
},
|
||||
"@mapbox/node-pre-gyp": {
|
||||
"version": "1.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz",
|
||||
|
@ -27337,12 +27287,6 @@
|
|||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@sinclair/typebox": {
|
||||
"version": "0.27.8",
|
||||
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
|
||||
"integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
|
||||
"dev": true
|
||||
},
|
||||
"@sindresorhus/merge-streams": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz",
|
||||
|
@ -27943,9 +27887,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"@vitest/coverage-v8": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.0.1.tgz",
|
||||
"integrity": "sha512-ACcSlJtWlravv0QyJSCO9rvm06msj6x0HooXouB0NXKG6PGxUN5VX4X8QEATfTMGsJlZLqWvq0dEY9W1V0rcSw==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.0.2.tgz",
|
||||
"integrity": "sha512-iA8eb4PMid3bMc++gfQSTvYE1QL//fC8pz+rKsTUDBFjdDiy/gH45hvpqyDu5K7FHhvgG0GNNCJzTMMSFKhoxg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@ampproject/remapping": "^2.3.0",
|
||||
|
@ -27957,63 +27901,95 @@
|
|||
"istanbul-reports": "^3.1.7",
|
||||
"magic-string": "^0.30.10",
|
||||
"magicast": "^0.3.4",
|
||||
"picocolors": "^1.0.1",
|
||||
"std-env": "^3.7.0",
|
||||
"strip-literal": "^2.1.0",
|
||||
"test-exclude": "^7.0.1"
|
||||
"test-exclude": "^7.0.1",
|
||||
"tinyrainbow": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"@vitest/expect": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.1.tgz",
|
||||
"integrity": "sha512-yw70WL3ZwzbI2O3MOXYP2Shf4vqVkS3q5FckLJ6lhT9VMMtDyWdofD53COZcoeuHwsBymdOZp99r5bOr5g+oeA==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.2.tgz",
|
||||
"integrity": "sha512-nKAvxBYqcDugYZ4nJvnm5OR8eDJdgWjk4XM9owQKUjzW70q0icGV2HVnQOyYsp906xJaBDUXw0+9EHw2T8e0mQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@vitest/spy": "2.0.1",
|
||||
"@vitest/utils": "2.0.1",
|
||||
"chai": "^5.1.1"
|
||||
"@vitest/spy": "2.0.2",
|
||||
"@vitest/utils": "2.0.2",
|
||||
"chai": "^5.1.1",
|
||||
"tinyrainbow": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"@vitest/pretty-format": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.3.tgz",
|
||||
"integrity": "sha512-URM4GLsB2xD37nnTyvf6kfObFafxmycCL8un3OC9gaCs5cti2u+5rJdIflZ2fUJUen4NbvF6jCufwViAFLvz1g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"tinyrainbow": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"@vitest/runner": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.1.tgz",
|
||||
"integrity": "sha512-XfcSXOGGxgR2dQ466ZYqf0ZtDLLDx9mZeQcKjQDLQ9y6Cmk2Wl7wxMuhiYK4Fo1VxCtLcFEGW2XpcfMuiD1Maw==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.2.tgz",
|
||||
"integrity": "sha512-OCh437Vi8Wdbif1e0OvQcbfM3sW4s2lpmOjAE7qfLrpzJX2M7J1IQlNvEcb/fu6kaIB9n9n35wS0G2Q3en5kHg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@vitest/utils": "2.0.1",
|
||||
"@vitest/utils": "2.0.2",
|
||||
"pathe": "^1.1.2"
|
||||
}
|
||||
},
|
||||
"@vitest/snapshot": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.1.tgz",
|
||||
"integrity": "sha512-rst79a4Q+J5vrvHRapdfK4BdqpMH0eF58jVY1vYeBo/1be+nkyenGI5SCSohmjf6MkCkI20/yo5oG+0R8qrAnA==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.2.tgz",
|
||||
"integrity": "sha512-Yc2ewhhZhx+0f9cSUdfzPRcsM6PhIb+S43wxE7OG0kTxqgqzo8tHkXFuFlndXeDMp09G3sY/X5OAo/RfYydf1g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@vitest/pretty-format": "2.0.2",
|
||||
"magic-string": "^0.30.10",
|
||||
"pathe": "^1.1.2",
|
||||
"pretty-format": "^29.7.0"
|
||||
"pathe": "^1.1.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"@vitest/pretty-format": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.2.tgz",
|
||||
"integrity": "sha512-SBCyOXfGVvddRd9r2PwoVR0fonQjh9BMIcBMlSzbcNwFfGr6ZhOhvBzurjvi2F4ryut2HcqiFhNeDVGwru8tLg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"tinyrainbow": "^1.2.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@vitest/spy": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.1.tgz",
|
||||
"integrity": "sha512-NLkdxbSefAtJN56GtCNcB4GiHFb5i9q1uh4V229lrlTZt2fnwsTyjLuWIli1xwK2fQspJJmHXHyWx0Of3KTXWA==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.2.tgz",
|
||||
"integrity": "sha512-MgwJ4AZtCgqyp2d7WcQVE8aNG5vQ9zu9qMPYQHjsld/QVsrvg78beNrXdO4HYkP0lDahCO3P4F27aagIag+SGQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"tinyspy": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"@vitest/utils": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.1.tgz",
|
||||
"integrity": "sha512-STH+2fHZxlveh1mpU4tKzNgRk7RZJyr6kFGJYCI5vocdfqfPsQrgVC6k7dBWHfin5QNB4TLvRS0Ckly3Dt1uWw==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.2.tgz",
|
||||
"integrity": "sha512-pxCY1v7kmOCWYWjzc0zfjGTA3Wmn8PKnlPvSrsA643P1NHl1fOyXj2Q9SaNlrlFE+ivCsxM80Ov3AR82RmHCWQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"diff-sequences": "^29.6.3",
|
||||
"@vitest/pretty-format": "2.0.2",
|
||||
"estree-walker": "^3.0.3",
|
||||
"loupe": "^3.1.1",
|
||||
"pretty-format": "^29.7.0"
|
||||
"tinyrainbow": "^1.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@vitest/pretty-format": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.2.tgz",
|
||||
"integrity": "sha512-SBCyOXfGVvddRd9r2PwoVR0fonQjh9BMIcBMlSzbcNwFfGr6ZhOhvBzurjvi2F4ryut2HcqiFhNeDVGwru8tLg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"tinyrainbow": "^1.2.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@webassemblyjs/ast": {
|
||||
|
@ -30133,12 +30109,6 @@
|
|||
"integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
|
||||
"dev": true
|
||||
},
|
||||
"diff-sequences": {
|
||||
"version": "29.6.3",
|
||||
"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
|
||||
"integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
|
||||
"dev": true
|
||||
},
|
||||
"dir-glob": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
|
||||
|
@ -36321,31 +36291,6 @@
|
|||
"renderkid": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"pretty-format": {
|
||||
"version": "29.7.0",
|
||||
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
|
||||
"integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@jest/schemas": "^29.6.3",
|
||||
"ansi-styles": "^5.0.0",
|
||||
"react-is": "^18.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-styles": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
|
||||
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
|
||||
"dev": true
|
||||
},
|
||||
"react-is": {
|
||||
"version": "18.2.0",
|
||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
|
||||
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"process-nextick-args": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
||||
|
@ -37058,9 +37003,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"sass": {
|
||||
"version": "1.77.6",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz",
|
||||
"integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==",
|
||||
"version": "1.77.7",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.77.7.tgz",
|
||||
"integrity": "sha512-9ywH75cO+rLjbrZ6en3Gp8qAMwPGBapFtlsMJoDTkcMU/bSe5a6cjKVUn5Jr4Gzg5GbP3HE8cm+02pLCgcoMow==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"chokidar": ">=3.0.0 <4.0.0",
|
||||
|
@ -40070,6 +40015,12 @@
|
|||
"integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==",
|
||||
"dev": true
|
||||
},
|
||||
"tinyrainbow": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz",
|
||||
"integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==",
|
||||
"dev": true
|
||||
},
|
||||
"tinyspy": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.0.tgz",
|
||||
|
@ -40781,41 +40732,42 @@
|
|||
}
|
||||
},
|
||||
"vite-node": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.1.tgz",
|
||||
"integrity": "sha512-nVd6kyhPAql0s+xIVJzuF+RSRH8ZimNrm6U8ZvTA4MXv8CHI17TFaQwRaFiK75YX6XeFqZD4IoAaAfi9OR1XvQ==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.2.tgz",
|
||||
"integrity": "sha512-w4vkSz1Wo+NIQg8pjlEn0jQbcM/0D+xVaYjhw3cvarTanLLBh54oNiRbsT8PNK5GfuST0IlVXjsNRoNlqvY/fw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"cac": "^6.7.14",
|
||||
"debug": "^4.3.5",
|
||||
"pathe": "^1.1.2",
|
||||
"picocolors": "^1.0.1",
|
||||
"tinyrainbow": "^1.2.0",
|
||||
"vite": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"vitest": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.1.tgz",
|
||||
"integrity": "sha512-PBPvNXRJiywtI9NmbnEqHIhcXlk8mB0aKf6REQIaYGY4JtWF1Pg8Am+N0vAuxdg/wUSlxPSVJr8QdjwcVxc2Hg==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.2.tgz",
|
||||
"integrity": "sha512-WlpZ9neRIjNBIOQwBYfBSr0+of5ZCbxT2TVGKW4Lv0c8+srCFIiRdsP7U009t8mMn821HQ4XKgkx5dVWpyoyLw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@ampproject/remapping": "^2.3.0",
|
||||
"@vitest/expect": "2.0.1",
|
||||
"@vitest/runner": "2.0.1",
|
||||
"@vitest/snapshot": "2.0.1",
|
||||
"@vitest/spy": "2.0.1",
|
||||
"@vitest/utils": "2.0.1",
|
||||
"@vitest/expect": "2.0.2",
|
||||
"@vitest/pretty-format": "^2.0.2",
|
||||
"@vitest/runner": "2.0.2",
|
||||
"@vitest/snapshot": "2.0.2",
|
||||
"@vitest/spy": "2.0.2",
|
||||
"@vitest/utils": "2.0.2",
|
||||
"chai": "^5.1.1",
|
||||
"debug": "^4.3.5",
|
||||
"execa": "^8.0.1",
|
||||
"magic-string": "^0.30.10",
|
||||
"pathe": "^1.1.2",
|
||||
"picocolors": "^1.0.1",
|
||||
"std-env": "^3.7.0",
|
||||
"tinybench": "^2.8.0",
|
||||
"tinypool": "^1.0.0",
|
||||
"tinyrainbow": "^1.2.0",
|
||||
"vite": "^5.0.0",
|
||||
"vite-node": "2.0.1",
|
||||
"vite-node": "2.0.2",
|
||||
"why-is-node-running": "^2.2.2"
|
||||
},
|
||||
"dependencies": {
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
"@typescript-eslint/eslint-plugin": "5.62.0",
|
||||
"@typescript-eslint/parser": "5.62.0",
|
||||
"@uupaa/dynamic-import-polyfill": "1.0.2",
|
||||
"@vitest/coverage-v8": "2.0.1",
|
||||
"@vitest/coverage-v8": "2.0.2",
|
||||
"autoprefixer": "10.4.19",
|
||||
"babel-loader": "9.1.3",
|
||||
"babel-plugin-dynamic-import-polyfill": "1.0.0",
|
||||
|
@ -50,7 +50,7 @@
|
|||
"postcss-loader": "8.1.1",
|
||||
"postcss-preset-env": "9.6.0",
|
||||
"postcss-scss": "4.0.9",
|
||||
"sass": "1.77.6",
|
||||
"sass": "1.77.7",
|
||||
"sass-loader": "14.2.1",
|
||||
"source-map-loader": "5.0.0",
|
||||
"speed-measure-webpack-plugin": "1.5.0",
|
||||
|
@ -62,7 +62,7 @@
|
|||
"stylelint-scss": "5.3.2",
|
||||
"ts-loader": "9.5.1",
|
||||
"typescript": "5.5.3",
|
||||
"vitest": "2.0.1",
|
||||
"vitest": "2.0.2",
|
||||
"webpack": "5.92.1",
|
||||
"webpack-bundle-analyzer": "4.10.2",
|
||||
"webpack-cli": "5.1.4",
|
||||
|
@ -81,7 +81,6 @@
|
|||
"@fontsource/noto-sans-tc": "5.0.19",
|
||||
"@jellyfin/libass-wasm": "4.2.1",
|
||||
"@jellyfin/sdk": "0.0.0-unstable.202407020501",
|
||||
"@loadable/component": "5.16.4",
|
||||
"@mui/icons-material": "5.15.19",
|
||||
"@mui/material": "5.15.19",
|
||||
"@mui/x-data-grid": "7.6.1",
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
import loadable from '@loadable/component';
|
||||
import { History } from '@remix-run/router';
|
||||
import { QueryClientProvider } from '@tanstack/react-query';
|
||||
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
|
||||
|
@ -8,26 +7,17 @@ import { ApiProvider } from 'hooks/useApi';
|
|||
import { WebConfigProvider } from 'hooks/useWebConfig';
|
||||
import { queryClient } from 'utils/query/queryClient';
|
||||
|
||||
const StableAppRouter = loadable(() => import('./apps/stable/AppRouter'));
|
||||
const RootAppRouter = loadable(() => import('./RootAppRouter'));
|
||||
import RootAppRouter from 'RootAppRouter';
|
||||
|
||||
const RootApp = ({ history }: Readonly<{ history: History }>) => {
|
||||
const layoutMode = localStorage.getItem('layout');
|
||||
const isExperimentalLayout = layoutMode === 'experimental';
|
||||
|
||||
return (
|
||||
<QueryClientProvider client={queryClient}>
|
||||
<ApiProvider>
|
||||
<WebConfigProvider>
|
||||
{isExperimentalLayout ?
|
||||
<RootAppRouter history={history} /> :
|
||||
<StableAppRouter history={history} />
|
||||
}
|
||||
</WebConfigProvider>
|
||||
</ApiProvider>
|
||||
<ReactQueryDevtools initialIsOpen={false} />
|
||||
</QueryClientProvider>
|
||||
);
|
||||
};
|
||||
const RootApp = ({ history }: Readonly<{ history: History }>) => (
|
||||
<QueryClientProvider client={queryClient}>
|
||||
<ApiProvider>
|
||||
<WebConfigProvider>
|
||||
<RootAppRouter history={history} />
|
||||
</WebConfigProvider>
|
||||
</ApiProvider>
|
||||
<ReactQueryDevtools initialIsOpen={false} />
|
||||
</QueryClientProvider>
|
||||
);
|
||||
|
||||
export default RootApp;
|
||||
|
|
|
@ -4,21 +4,26 @@ import React from 'react';
|
|||
import {
|
||||
RouterProvider,
|
||||
createHashRouter,
|
||||
Outlet
|
||||
Outlet,
|
||||
useLocation
|
||||
} from 'react-router-dom';
|
||||
|
||||
import { EXPERIMENTAL_APP_ROUTES } from 'apps/experimental/routes/routes';
|
||||
import AppHeader from 'components/AppHeader';
|
||||
import Backdrop from 'components/Backdrop';
|
||||
import { useLegacyRouterSync } from 'hooks/useLegacyRouterSync';
|
||||
import { DASHBOARD_APP_ROUTES } from 'apps/dashboard/routes/routes';
|
||||
import { DASHBOARD_APP_PATHS, DASHBOARD_APP_ROUTES } from 'apps/dashboard/routes/routes';
|
||||
import UserThemeProvider from 'themes/UserThemeProvider';
|
||||
import { STABLE_APP_ROUTES } from 'apps/stable/routes/routes';
|
||||
|
||||
const layoutMode = localStorage.getItem('layout');
|
||||
const isExperimentalLayout = layoutMode === 'experimental';
|
||||
|
||||
const router = createHashRouter([
|
||||
{
|
||||
element: <RootAppLayout />,
|
||||
children: [
|
||||
...EXPERIMENTAL_APP_ROUTES,
|
||||
...(isExperimentalLayout ? EXPERIMENTAL_APP_ROUTES : STABLE_APP_ROUTES),
|
||||
...DASHBOARD_APP_ROUTES
|
||||
]
|
||||
}
|
||||
|
@ -35,10 +40,14 @@ export default function RootAppRouter({ history }: Readonly<{ history: History}>
|
|||
* NOTE: The app will crash if these get removed from the DOM.
|
||||
*/
|
||||
function RootAppLayout() {
|
||||
const location = useLocation();
|
||||
const isNewLayoutPath = Object.values(DASHBOARD_APP_PATHS)
|
||||
.some(path => location.pathname.startsWith(`/${path}`));
|
||||
|
||||
return (
|
||||
<UserThemeProvider>
|
||||
<Backdrop />
|
||||
<AppHeader isHidden />
|
||||
<AppHeader isHidden={isExperimentalLayout || isNewLayoutPath} />
|
||||
|
||||
<Outlet />
|
||||
</UserThemeProvider>
|
||||
|
|
|
@ -13,23 +13,20 @@ import { useApi } from 'hooks/useApi';
|
|||
|
||||
import AppTabs from './components/AppTabs';
|
||||
import AppDrawer from './components/drawer/AppDrawer';
|
||||
import { DASHBOARD_APP_PATHS } from './routes/routes';
|
||||
|
||||
import './AppOverrides.scss';
|
||||
|
||||
interface AppLayoutProps {
|
||||
drawerlessPaths: string[]
|
||||
}
|
||||
const DRAWERLESS_PATHS = [ DASHBOARD_APP_PATHS.MetadataManager ];
|
||||
|
||||
const AppLayout: FC<AppLayoutProps> = ({
|
||||
drawerlessPaths
|
||||
}) => {
|
||||
export const Component: FC = () => {
|
||||
const [ isDrawerActive, setIsDrawerActive ] = useState(false);
|
||||
const location = useLocation();
|
||||
const { user } = useApi();
|
||||
|
||||
const isMediumScreen = useMediaQuery((t: Theme) => t.breakpoints.up('md'));
|
||||
const isDrawerAvailable = Boolean(user)
|
||||
&& !drawerlessPaths.some(path => location.pathname.startsWith(`/${path}`));
|
||||
&& !DRAWERLESS_PATHS.some(path => location.pathname.startsWith(`/${path}`));
|
||||
const isDrawerOpen = isDrawerActive && isDrawerAvailable;
|
||||
|
||||
const onToggleDrawer = useCallback(() => {
|
||||
|
@ -86,5 +83,3 @@ const AppLayout: FC<AppLayoutProps> = ({
|
|||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export default AppLayout;
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
import React from 'react';
|
||||
import { RouteObject } from 'react-router-dom';
|
||||
import AppLayout from '../AppLayout';
|
||||
import ConnectionRequired from 'components/ConnectionRequired';
|
||||
import { ASYNC_ADMIN_ROUTES } from './_asyncRoutes';
|
||||
import { toAsyncPageRoute } from 'components/router/AsyncRoute';
|
||||
import { toViewManagerPageRoute } from 'components/router/LegacyRoute';
|
||||
import { LEGACY_ADMIN_ROUTES } from './_legacyRoutes';
|
||||
import ServerContentPage from 'components/ServerContentPage';
|
||||
import ErrorBoundary from '../../../components/router/ErrorBoundary';
|
||||
import ErrorBoundary from 'components/router/ErrorBoundary';
|
||||
|
||||
export const DASHBOARD_APP_PATHS = {
|
||||
Dashboard: 'dashboard',
|
||||
|
@ -20,7 +19,7 @@ export const DASHBOARD_APP_ROUTES: RouteObject[] = [
|
|||
element: <ConnectionRequired isAdminRequired />,
|
||||
children: [
|
||||
{
|
||||
element: <AppLayout drawerlessPaths={[ DASHBOARD_APP_PATHS.MetadataManager ]} />,
|
||||
lazy: () => import('../AppLayout'),
|
||||
children: [
|
||||
{
|
||||
path: DASHBOARD_APP_PATHS.Dashboard,
|
||||
|
|
|
@ -15,7 +15,7 @@ import AppDrawer, { isDrawerPath } from './components/drawers/AppDrawer';
|
|||
|
||||
import './AppOverrides.scss';
|
||||
|
||||
const AppLayout = () => {
|
||||
export const Component = () => {
|
||||
const [ isDrawerActive, setIsDrawerActive ] = useState(false);
|
||||
const { user } = useApi();
|
||||
const location = useLocation();
|
||||
|
@ -76,5 +76,3 @@ const AppLayout = () => {
|
|||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export default AppLayout;
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
import { AsyncRoute, AsyncRouteType } from '../../../../components/router/AsyncRoute';
|
||||
|
||||
export const ASYNC_USER_ROUTES: AsyncRoute[] = [
|
||||
{ path: 'home.html', page: 'home', type: AsyncRouteType.Experimental },
|
||||
{ path: 'quickconnect', page: 'quickConnect' },
|
||||
{ path: 'search.html', page: 'search' },
|
||||
{ path: 'userprofile.html', page: 'user/userprofile' },
|
||||
{ path: 'home.html', page: 'home', type: AsyncRouteType.Experimental },
|
||||
{ path: 'movies.html', page: 'movies', type: AsyncRouteType.Experimental },
|
||||
{ path: 'tv.html', page: 'shows', type: AsyncRouteType.Experimental },
|
||||
{ path: 'music.html', page: 'music', type: AsyncRouteType.Experimental },
|
||||
|
|
|
@ -2,14 +2,13 @@ import React, { useCallback, useEffect, useMemo, useRef } from 'react';
|
|||
import { useSearchParams } from 'react-router-dom';
|
||||
|
||||
import globalize from '../../../scripts/globalize';
|
||||
import LibraryMenu from '../../../scripts/libraryMenu';
|
||||
import { clearBackdrop } from '../../../components/backdrop/backdrop';
|
||||
import layoutManager from '../../../components/layoutManager';
|
||||
import * as mainTabsManager from '../../../components/maintabsmanager';
|
||||
import Page from '../../../components/Page';
|
||||
|
||||
import '../../../elements/emby-tabs/emby-tabs';
|
||||
import '../../../elements/emby-button/emby-button';
|
||||
import '../../../elements/emby-scroller/emby-scroller';
|
||||
import Page from '../../../components/Page';
|
||||
|
||||
type OnResumeOptions = {
|
||||
autoFocus?: boolean;
|
||||
|
@ -29,12 +28,14 @@ const Home = () => {
|
|||
const [ searchParams ] = useSearchParams();
|
||||
const initialTabIndex = parseInt(searchParams.get('tab') ?? '0', 10);
|
||||
|
||||
const libraryMenu = useMemo(async () => ((await import('../../../scripts/libraryMenu')).default), []);
|
||||
const mainTabsManager = useMemo(() => import('../../../components/maintabsmanager'), []);
|
||||
const tabController = useRef<ControllerProps | null>();
|
||||
const tabControllers = useMemo<ControllerProps[]>(() => [], []);
|
||||
const element = useRef<HTMLDivElement>(null);
|
||||
|
||||
const setTitle = () => {
|
||||
LibraryMenu.setTitle(null);
|
||||
const setTitle = async () => {
|
||||
(await libraryMenu).setTitle(null);
|
||||
};
|
||||
|
||||
const getTabs = () => {
|
||||
|
@ -78,18 +79,6 @@ const Home = () => {
|
|||
});
|
||||
}, [ tabControllers ]);
|
||||
|
||||
const onViewDestroy = useCallback(() => {
|
||||
if (tabControllers) {
|
||||
tabControllers.forEach(function (t) {
|
||||
if (t.destroy) {
|
||||
t.destroy();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
tabController.current = null;
|
||||
}, [ tabControllers ]);
|
||||
|
||||
const loadTab = useCallback((index: number, previousIndex: number | null) => {
|
||||
getTabController(index).then((controller) => {
|
||||
const refresh = !controller.refreshed;
|
||||
|
@ -118,19 +107,23 @@ const Home = () => {
|
|||
loadTab(newIndex, previousIndex);
|
||||
}, [ loadTab, tabControllers ]);
|
||||
|
||||
const onResume = useCallback(() => {
|
||||
setTitle();
|
||||
const onSetTabs = useCallback(async () => {
|
||||
(await mainTabsManager).setTabs(element.current, initialTabIndex, getTabs, getTabContainers, null, onTabChange, false);
|
||||
}, [ initialTabIndex, mainTabsManager, onTabChange ]);
|
||||
|
||||
const onResume = useCallback(async () => {
|
||||
void setTitle();
|
||||
clearBackdrop();
|
||||
|
||||
const currentTabController = tabController.current;
|
||||
|
||||
if (!currentTabController) {
|
||||
mainTabsManager.selectedTabIndex(initialTabIndex);
|
||||
(await mainTabsManager).selectedTabIndex(initialTabIndex);
|
||||
} else if (currentTabController?.onResume) {
|
||||
currentTabController.onResume({});
|
||||
}
|
||||
(document.querySelector('.skinHeader') as HTMLDivElement).classList.add('noHomeButtonHeader');
|
||||
}, [ initialTabIndex ]);
|
||||
}, [ initialTabIndex, mainTabsManager ]);
|
||||
|
||||
const onPause = useCallback(() => {
|
||||
const currentTabController = tabController.current;
|
||||
|
@ -141,13 +134,13 @@ const Home = () => {
|
|||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
mainTabsManager.setTabs(element.current, initialTabIndex, getTabs, getTabContainers, null, onTabChange, false);
|
||||
void onSetTabs();
|
||||
|
||||
onResume();
|
||||
void onResume();
|
||||
return () => {
|
||||
onPause();
|
||||
};
|
||||
}, [ initialTabIndex, onPause, onResume, onTabChange, onViewDestroy ]);
|
||||
}, [ onPause, onResume, onSetTabs ]);
|
||||
|
||||
return (
|
||||
<div ref={element}>
|
||||
|
|
|
@ -8,8 +8,6 @@ import { toViewManagerPageRoute } from 'components/router/LegacyRoute';
|
|||
import { toRedirectRoute } from 'components/router/Redirect';
|
||||
import ErrorBoundary from 'components/router/ErrorBoundary';
|
||||
|
||||
import AppLayout from '../AppLayout';
|
||||
|
||||
import { ASYNC_USER_ROUTES } from './asyncRoutes';
|
||||
import { LEGACY_PUBLIC_ROUTES, LEGACY_USER_ROUTES } from './legacyRoutes';
|
||||
import VideoPage from './video';
|
||||
|
@ -17,7 +15,7 @@ import VideoPage from './video';
|
|||
export const EXPERIMENTAL_APP_ROUTES: RouteObject[] = [
|
||||
{
|
||||
path: '/*',
|
||||
element: <AppLayout />,
|
||||
lazy: () => import('../AppLayout'),
|
||||
children: [
|
||||
{
|
||||
/* User routes: Any child route of this layout is authenticated */
|
||||
|
|
|
@ -1,43 +0,0 @@
|
|||
import { History } from '@remix-run/router';
|
||||
import React from 'react';
|
||||
import { Outlet, RouterProvider, createHashRouter, useLocation } from 'react-router-dom';
|
||||
|
||||
import { useLegacyRouterSync } from 'hooks/useLegacyRouterSync';
|
||||
import { STABLE_APP_ROUTES } from './routes/routes';
|
||||
import Backdrop from 'components/Backdrop';
|
||||
import AppHeader from 'components/AppHeader';
|
||||
import { DASHBOARD_APP_PATHS, DASHBOARD_APP_ROUTES } from 'apps/dashboard/routes/routes';
|
||||
import UserThemeProvider from 'themes/UserThemeProvider';
|
||||
|
||||
const router = createHashRouter([{
|
||||
element: <StableAppLayout />,
|
||||
children: [
|
||||
...STABLE_APP_ROUTES,
|
||||
...DASHBOARD_APP_ROUTES
|
||||
]
|
||||
}]);
|
||||
|
||||
export default function StableAppRouter({ history }: Readonly<{ history: History }>) {
|
||||
useLegacyRouterSync({ router, history });
|
||||
|
||||
return <RouterProvider router={router} />;
|
||||
}
|
||||
|
||||
/**
|
||||
* Layout component that renders legacy components required on all pages.
|
||||
* NOTE: The app will crash if these get removed from the DOM.
|
||||
*/
|
||||
function StableAppLayout() {
|
||||
const location = useLocation();
|
||||
const isNewLayoutPath = Object.values(DASHBOARD_APP_PATHS)
|
||||
.some(path => location.pathname.startsWith(`/${path}`));
|
||||
|
||||
return (
|
||||
<UserThemeProvider>
|
||||
<Backdrop />
|
||||
<AppHeader isHidden={isNewLayoutPath} />
|
||||
|
||||
<Outlet />
|
||||
</UserThemeProvider>
|
||||
);
|
||||
}
|
|
@ -16,7 +16,7 @@ import { LEGACY_PUBLIC_ROUTES, LEGACY_USER_ROUTES } from './legacyRoutes';
|
|||
export const STABLE_APP_ROUTES: RouteObject[] = [
|
||||
{
|
||||
path: '/*',
|
||||
element: <AppLayout />,
|
||||
Component: AppLayout,
|
||||
children: [
|
||||
{
|
||||
/* User routes */
|
||||
|
|
|
@ -158,6 +158,7 @@ button::-moz-focus-inner {
|
|||
color: #fff;
|
||||
background: rgb(51, 136, 204);
|
||||
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.cardImageContainer {
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
.itemLinearProgress {
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
position: absolute !important;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
border-radius: 100px;
|
||||
|
|
|
@ -29,12 +29,18 @@ const importPage = (page: string, type: AsyncRouteType) => {
|
|||
}
|
||||
};
|
||||
|
||||
export const toAsyncPageRoute = ({ path, page, type = AsyncRouteType.Stable }: AsyncRoute): RouteObject => ({
|
||||
export const toAsyncPageRoute = ({
|
||||
path,
|
||||
lazy: async () => {
|
||||
const { default: Component } = await importPage(page ?? path, type);
|
||||
return {
|
||||
Component
|
||||
};
|
||||
}
|
||||
});
|
||||
page,
|
||||
type = AsyncRouteType.Stable
|
||||
}: AsyncRoute): RouteObject => {
|
||||
return {
|
||||
path,
|
||||
lazy: async () => {
|
||||
const { default: Page } = await importPage(page ?? path, type);
|
||||
return {
|
||||
Component: Page
|
||||
};
|
||||
}
|
||||
};
|
||||
};
|
||||
|
|
|
@ -71,7 +71,7 @@
|
|||
"AllowHWTranscodingHelp": "Дазвольце цюнэру перакадзіраваць патокі на ляту. Гэта можа дапамагчы паменшыць перакадзіраванне, неабходнае серверу.",
|
||||
"AllowFfmpegThrottlingHelp": "Калі перакадзіраванне або рэмукс будзе дастаткова далёка ад бягучай пазіцыі прайгравання, прыпыніце працэс, каб ён спажываў менш рэсурсаў. Гэта найбольш карысна пры праглядзе без частага пошуку. Выключыце гэта, калі ўзнікнуць праблемы з прайграваннем.",
|
||||
"AllowOnTheFlySubtitleExtractionHelp": "Убудаваныя субтытры можна атрымаць з відэа і даставіць кліентам у выглядзе звычайнага тэксту, каб прадухіліць перакадзіраванне відэа. У некаторых сістэмах гэта можа заняць шмат часу і прывесці да спынення прайгравання відэа падчас працэсу здабывання. Адключыце гэта, каб убудаваныя субтытры запісваліся пры перакадзіраванні відэа, калі яны не падтрымліваюцца кліенцкай прыладай.",
|
||||
"AllowRemoteAccessHelp": "Калі не пазначыць, усе аддаленыя злучэнні будуць заблакіраваны.",
|
||||
"AllowRemoteAccessHelp": "Калі не пазначыць, усе аддаленыя падлучэнні будуць заблакіраваны.",
|
||||
"AllowTonemappingHelp": "Адлюстраванне тонаў можа пераўтварыць дынамічны дыяпазон відэа з HDR у SDR, захоўваючы дэталі выявы і колеры, якія з'яўляюцца вельмі важнай інфармацыяй для прадстаўлення арыгінальнай сцэны. У цяперашні час працуе толькі з відэа 10bit HDR10, HLG і DoVi. Для гэтага патрабуецца адпаведнае асяроддзе выканання GPGPU.",
|
||||
"AlwaysPlaySubtitles": "Заўсёды граць",
|
||||
"ApiKeysCaption": "Спіс уключаных на дадзены момант ключоў API",
|
||||
|
@ -83,8 +83,8 @@
|
|||
"AllEpisodes": "Усе эпізоды",
|
||||
"AllChannels": "Усе каналы",
|
||||
"AddToFavorites": "Дадаць у абранае",
|
||||
"AllowedRemoteAddressesHelp": "Спіс IP-адрасоў або запісаў IP/сеткавай маскі, для сетак, якім будзе дазволена падключацца аддалена. Калі пакінуць пустым, будуць дазволены ўсе аддаленыя адрасы.",
|
||||
"AllowRemoteAccess": "Дазволіць аддаленыя падключэнні да гэтага сервера",
|
||||
"AllowedRemoteAddressesHelp": "Спіс IP-адрасоў або запісаў IP/сеткавай маскі, для сетак, якім будзе дазволена падлучацца аддалена. Калі пакінуць пустым, будуць дазволены ўсе аддаленыя адрасы.",
|
||||
"AllowRemoteAccess": "Дазволіць аддаленыя падлучэнні да гэтага сервера",
|
||||
"Arranger": "Аранжыроўшчык",
|
||||
"AllComplexFormats": "Усе складаныя фарматы (ASS, SSA, VobSub, PGS, SUB, IDX, ...)",
|
||||
"AlbumArtist": "Выканаўца альбома",
|
||||
|
@ -105,7 +105,7 @@
|
|||
"ButtonSpace": "Прабел",
|
||||
"AsManyAsPossible": "Як мага больш",
|
||||
"ButtonPause": "Паўза",
|
||||
"ButtonNextTrack": "Наступны трэк",
|
||||
"ButtonNextTrack": "Наступная дарожка",
|
||||
"Audio": "Аўдыё",
|
||||
"ButtonGotIt": "Зразумела",
|
||||
"ButtonSignIn": "Увайсці",
|
||||
|
@ -129,7 +129,7 @@
|
|||
"ButtonManualLogin": "Уваход уручную",
|
||||
"AskAdminToCreateLibrary": "Папрасіце адміністратара стварыць бібліятэку.",
|
||||
"Backdrops": "Заднікі",
|
||||
"ButtonUseQuickConnect": "Выкарыстоўваць Quick Connect",
|
||||
"ButtonUseQuickConnect": "Выкарыстаць Quick Connect",
|
||||
"Casual": "Паўсядзённы",
|
||||
"ButtonChangeServer": "Змяніць сервер",
|
||||
"AspectRatio": "Суадносіны бакоў",
|
||||
|
@ -138,7 +138,7 @@
|
|||
"ButtonBack": "Назад",
|
||||
"ButtonOpen": "Адчыніць",
|
||||
"ButtonRevoke": "Адклікаць",
|
||||
"ButtonPreviousTrack": "Папярэдні трэк",
|
||||
"ButtonPreviousTrack": "Папярэдняя дарожка",
|
||||
"ButtonSend": "Адправіць",
|
||||
"ButtonPlayer": "Прайгравальнік",
|
||||
"ButtonParentalControl": "Бацькоўскі кантроль",
|
||||
|
@ -172,7 +172,7 @@
|
|||
"ButtonTrailer": "Трэйлер",
|
||||
"ButtonUninstall": "Выдаліць",
|
||||
"ButtonWebsite": "Вэб-сайт",
|
||||
"Bwdif": "BWDIF",
|
||||
"Bwdif": "Bob Weaver DeInterlacing Filter (BWDIF)",
|
||||
"CancelRecording": "Адмяніць запіс",
|
||||
"CancelSeries": "Адмяніць серыял",
|
||||
"Categories": "Катэгорыі",
|
||||
|
@ -224,7 +224,7 @@
|
|||
"LabelSize": "Памер",
|
||||
"LabelSkipBackLength": "Даўжыня пасу назад",
|
||||
"LabelSyncPlayPlaybackDiff": "Розніца ў часе прайгравання",
|
||||
"LabelTrackNumber": "Нумар трэка",
|
||||
"LabelTrackNumber": "Нумар дарожкі",
|
||||
"LabelTranscodes": "Перакадзіруе",
|
||||
"LabelTriggerType": "Тып трыгера",
|
||||
"LabelMetadataPath": "Шлях метададзеных",
|
||||
|
@ -280,7 +280,7 @@
|
|||
"ValueMinutes": "{0} хвілін",
|
||||
"ValueOneSeries": "1 серыя",
|
||||
"ValueSeriesCount": "{0} серый",
|
||||
"Writer": "Пісьменнік",
|
||||
"Writer": "Сцэнарыст",
|
||||
"HeaderSelectFallbackFontPath": "Выберыце шлях да папкі рэзервовага шрыфта",
|
||||
"LabelFallbackFontPath": "Шлях да папкі рэзервовага шрыфта",
|
||||
"AspectRatioFill": "Запоўніць",
|
||||
|
@ -289,7 +289,7 @@
|
|||
"Digital": "Лічбавы",
|
||||
"Director": "Рэжысёр",
|
||||
"Directors": "Рэжысёры",
|
||||
"Disconnect": "Адключыцца",
|
||||
"Disconnect": "Адлучыцца",
|
||||
"Display": "Дысплей",
|
||||
"EnableBlurHashHelp": "Выявы, якія яшчэ загружаюцца, будуць адлюстроўвацца з унікальным запаўняльнікам.",
|
||||
"EnableFasterAnimationsHelp": "Выкарыстоўваць хуткія анімацыі і пераходы.",
|
||||
|
@ -347,7 +347,7 @@
|
|||
"Controls": "Элементы кіравання",
|
||||
"LabelRefreshMode": "Рэжым абнаўлення",
|
||||
"LabelSendNotificationToUsers": "Адправіць апавяшчэнне на",
|
||||
"LabelSkipIfAudioTrackPresent": "Прапусціць, калі аўдыё дарожка па змаўчанні адпавядае мове спампоўкі",
|
||||
"LabelSkipIfAudioTrackPresent": "Прапусціць, калі аўдыёдарожка па змаўчанні адпавядае мове спампоўкі",
|
||||
"LabelSkipIfGraphicalSubsPresent": "Прапусціць, калі відэа ўжо змяшчае ўбудаваныя субтытры",
|
||||
"LabelSkipIfGraphicalSubsPresentHelp": "Захаванне тэкставых версій субтытраў прывядзе да больш эфектыўнай дастаўкі і знізіць верагоднасць перакадзіравання відэа.",
|
||||
"LabelSortBy": "Сартаваць па",
|
||||
|
@ -402,7 +402,7 @@
|
|||
"EnableExternalVideoPlayersHelp": "Меню знешняга прайгравальніка будзе паказана пры запуску прайгравання відэа.",
|
||||
"EnablePhotosHelp": "Выявы будуць выяўляцца і адлюстроўвацца разам з іншымі медыяфайламі.",
|
||||
"EnableRewatchingNextUp": "Уключыць паўторны прагляд у наступным",
|
||||
"EnableRewatchingNextUpHelp": "Уключыць паказ ужо прагледжаных серый у раздзелах \"Наступнае\".",
|
||||
"EnableRewatchingNextUpHelp": "Уключыць паказ ужо прагледжаных эпізодаў у раздзелах \"Наступнае\".",
|
||||
"EnableStreamLoopingHelp": "Уключыце гэта, калі жывыя трансляцыі ўтрымліваюць толькі некалькі секунд даных і іх трэба пастаянна запытваць. Уключэнне гэтага, калі гэта не патрэбна, можа выклікаць праблемы.",
|
||||
"EnableThemeSongsHelp": "Прайгравайце тэматычныя песні ў фонавым рэжыме падчас прагляду бібліятэкі.",
|
||||
"EnableThemeVideosHelp": "Прайграванне тэматычных відэа ў фонавым рэжыме падчас прагляду бібліятэкі.",
|
||||
|
@ -455,7 +455,7 @@
|
|||
"LearnHowYouCanContribute": "Даведайцеся, як вы можаце ўнесці свой уклад.",
|
||||
"NoSubtitlesHelp": "Субтытры не загружаюцца па змаўчанні. Іх усё яшчэ можна ўключыць уручную падчас прайгравання.",
|
||||
"OnApplicationStartup": "Пры запуску прыкладання",
|
||||
"OptionAllowBrowsingLiveTv": "Дазволіць доступ да ТБ",
|
||||
"OptionAllowBrowsingLiveTv": "Дазволіць доступ да тэлеканалаў",
|
||||
"OptionAllowContentDownload": "Дазволіць загрузку мультымедыя",
|
||||
"OptionCaptionInfoExSamsung": "CaptionInfoEx ( Samsung )",
|
||||
"OptionCommunityRating": "Рэйтынг супольнасці",
|
||||
|
@ -540,7 +540,7 @@
|
|||
"ThumbCard": "Эскіз-карта",
|
||||
"Thursday": "Чацвер",
|
||||
"TonemappingRangeHelp": "Выберыце выхадны каляровы дыяпазон. Аўто - гэта тое ж самае, што і дыяпазон уводу.",
|
||||
"TrackCount": "{0} трэкаў",
|
||||
"TrackCount": "{0} дарожак",
|
||||
"Trailers": "Трэйлеры",
|
||||
"Transcoding": "Перакадзіроўка",
|
||||
"TV": "ТБ",
|
||||
|
@ -589,7 +589,7 @@
|
|||
"H264CrfHelp": "\"Каэфіцыент пастаяннай хуткасці\" (CRF) - гэта налада якасці па змаўчанні для праграмных кадавальнікаў x264 і x265. Вы можаце ўсталяваць значэнні ад 0 да 51, дзе больш нізкія значэнні прывядуць да лепшай якасці (за кошт большага памеру файла). Разумныя значэнні знаходзяцца паміж 18 і 28. Значэнне па змаўчанні для x264 роўна 23, а для x265 - 28, так што вы можаце выкарыстоўваць гэта як адпраўную кропку. Апаратныя кадавальнікі не выкарыстоўваюць гэтыя параметры.",
|
||||
"HDPrograms": "HD-праграмы",
|
||||
"AnamorphicVideoNotSupported": "Анаморфнае відэа не падтрымліваецца",
|
||||
"SecondaryAudioNotSupported": "Другасныя гукавыя дарожкі не падтрымліваюцца",
|
||||
"SecondaryAudioNotSupported": "Дадатковыя аўдыёдарожкі не падтрымліваюцца",
|
||||
"RefFramesNotSupported": "Апорныя кадры не падтрымліваюцца",
|
||||
"VideoBitDepthNotSupported": "Разраднасць відэа не падтрымліваецца",
|
||||
"HardwareAccelerationWarning": "Уключэнне апаратнага паскарэння можа выклікаць нестабільнасць у некаторых асяроддзях. Пераканайцеся, што ваша аперацыйная сістэма і відэадрайверы цалкам абноўлены. Калі ў вас узніклі цяжкасці з прайграваннем відэа пасля ўключэння, вам трэба будзе змяніць наладу назад на \"Няма\".",
|
||||
|
@ -613,7 +613,7 @@
|
|||
"HeaderIdentifyItemHelp": "Увядзіце адзін або некалькі крытэрыяў пошуку. Выдаліце крытэрыі, каб павялічыць вынікі пошуку.",
|
||||
"HeaderKodiMetadataHelp": "Каб уключыць або выключыць метададзеныя NFO, адрэдагуйце бібліятэку і знайдзіце раздзел «Захоўвальнікі метададзеных».",
|
||||
"HeaderLatestEpisodes": "Нядаўна дададзеныя эпізоды",
|
||||
"HeaderLiveTvTunerSetup": "Налада ТБ-цюнэра ў прамым эфіры",
|
||||
"HeaderLiveTvTunerSetup": "Налады цюнэра тэлеканалаў",
|
||||
"HeaderLoginFailure": "Памылка ўваходу",
|
||||
"HeaderMedia": "Медыя",
|
||||
"HeaderNewApiKey": "Новы ключ API",
|
||||
|
@ -649,7 +649,7 @@
|
|||
"HeaderSeriesStatus": "Статус серыі",
|
||||
"HeaderServerAddressSettings": "Налады адраса сервера",
|
||||
"HeaderServerSettings": "Налады сервера",
|
||||
"HeaderSetupLibrary": "Наладзьце медыятэкі",
|
||||
"HeaderSetupLibrary": "Наладзьце свае медыятэкі",
|
||||
"HeaderSubtitleAppearance": "Знешні выгляд субтытраў",
|
||||
"HeaderSubtitleDownloads": "Спампоўка субтытраў",
|
||||
"HeaderSubtitleProfile": "Профіль субтытраў",
|
||||
|
@ -660,7 +660,7 @@
|
|||
"HeaderSyncPlayPlaybackSettings": "Прайграванне",
|
||||
"HeaderSyncPlayTimeSyncSettings": "Сінхранізацыя часу",
|
||||
"HeaderSystemDlnaProfiles": "Сістэмныя профілі",
|
||||
"HeaderTracks": "Трэкі",
|
||||
"HeaderTracks": "Дарожкі",
|
||||
"HeaderTranscodingProfile": "Профіль транскадавання",
|
||||
"HeaderTranscodingProfileHelp": "Дадайце профілі перакадзіравання, каб паказаць, якія фарматы трэба выкарыстоўваць, калі патрабуецца перакадзіраванне.",
|
||||
"HeaderUser": "Карыстальнік",
|
||||
|
@ -668,10 +668,10 @@
|
|||
"HeaderVideoQuality": "Якасць відэа",
|
||||
"HeaderVideoTypes": "Тыпы відэа",
|
||||
"Hide": "Схаваць",
|
||||
"Home": "Галоўны",
|
||||
"Home": "Галоўная",
|
||||
"HomeVideosPhotos": "Хатнія відэа і фота",
|
||||
"Horizontal": "Гарызантальны",
|
||||
"HttpsRequiresCert": "Каб уключыць бяспечныя злучэнні, вам трэба будзе прадаставіць надзейны сертыфікат SSL, напрыклад Let's Encrypt. Калі ласка, падайце сертыфікат або адключыце бяспечныя злучэнні.",
|
||||
"HttpsRequiresCert": "Каб уключыць бяспечныя падлучэння, вам спатрэбіцца прадаставіць надзейны SSL-сертыфікат, напрыклад, Let's Encrypt. Калі ласка, або прадастаўце сертыфікат, або адлучыце бяспечныя злучэнні.",
|
||||
"IgnoreDtsHelp": "Адключэнне гэтай опцыі можа вырашыць некаторыя праблемы, напрыклад. адсутнічае аўдыё на каналах з асобнымі аўдыя і відэаплынямі.",
|
||||
"ItemCount": "{0} элементаў",
|
||||
"ItemDetails": "Дэталі прадмета",
|
||||
|
@ -684,7 +684,7 @@
|
|||
"LabelAlbumArtists": "Выканаўцы альбома",
|
||||
"LabelAlbumArtMaxWidth": "Максімальная шырыня вокладкі альбома",
|
||||
"LabelAllowedRemoteAddressesMode": "Рэжым фільтра аддаленага IP-адраса",
|
||||
"LabelAppNameExample": "Прыклад: Sickbeard, Sonarr",
|
||||
"LabelAppNameExample": "Чытэльнае імя для ідэнтыфікацыі ключоў API. Гэты параметр не паўплывае на функцыянальнасць.",
|
||||
"LabelArtists": "Выканаўцы",
|
||||
"LabelArtistsHelp": "Раздзяляйце некалькіх выканаўцаў кропкай з коскай.",
|
||||
"LabelAudioBitDepth": "Глыбіня аўдыё ў бітах",
|
||||
|
@ -769,7 +769,7 @@
|
|||
"LabelPasswordRecoveryPinCode": "PIN-код",
|
||||
"LabelPasswordResetProvider": "Пастаўшчык скіду пароля",
|
||||
"LabelPersonRoleHelp": "Прыклад: кіроўца грузавіка з марожаным",
|
||||
"LabelPlayDefaultAudioTrack": "Прайграванне аўдыё дарожкі па змаўчанні незалежна ад мовы",
|
||||
"LabelPlayDefaultAudioTrack": "Прайграванне аўдыёдарожкі па змаўчанні незалежна ад мовы",
|
||||
"LabelPlayerDimensions": "Памеры плэера",
|
||||
"LabelPleaseRestart": "Змены ўступяць у сілу пасля ручной перазагрузкі вэб-кліента.",
|
||||
"LabelPostProcessor": "Прыкладанне для пост-апрацоўкі",
|
||||
|
@ -855,7 +855,7 @@
|
|||
"ColorSpace": "Каляровая прастора",
|
||||
"ColorTransfer": "Колераперадача",
|
||||
"CommunityRating": "Рэйтынг супольнасці",
|
||||
"Connect": "Падключыцца",
|
||||
"Connect": "Падлучыцца",
|
||||
"ContinueWatching": "Працягнуць прагляд",
|
||||
"Continuing": "Працягваецца",
|
||||
"CopyStreamURL": "Скапіраваць URL патоку",
|
||||
|
@ -961,7 +961,7 @@
|
|||
"LabelAccessEnd": "Час заканчэння",
|
||||
"ListPaging": "{0}-{1} з {2}",
|
||||
"LiveBroadcasts": "Прамыя трансляцыі",
|
||||
"LiveTV": "Прамы эфір",
|
||||
"LiveTV": "Тэлеканалы",
|
||||
"MaxParentalRatingHelp": "Кантэнт з больш высокім рэйтынгам будзе схаваны ад гэтага карыстальніка.",
|
||||
"MediaInfoBitrate": "Бітрэйт",
|
||||
"MediaInfoChannels": "Каналы",
|
||||
|
@ -1074,7 +1074,7 @@
|
|||
"LabelCustomDeviceDisplayNameHelp": "Увядзіце карыстальніцкае імя для адлюстравання або пакіньце пустым, каб выкарыстоўваць імя, паведамленае прыладай.",
|
||||
"LabelCustomRating": "Індывідуальны рэйтынг",
|
||||
"LabelDateAddedBehaviorHelp": "Калі прысутнічае значэнне метададзеных, яно заўсёды будзе выкарыстоўвацца перад любым з гэтых варыянтаў.",
|
||||
"MixedMoviesShows": "Змешаныя фільмы і шоу",
|
||||
"MixedMoviesShows": "Змешаныя фільмы і серыялы",
|
||||
"LabelDidlMode": "Рэжым DIDL",
|
||||
"Mixer": "Міксер",
|
||||
"LabelDisplayOrder": "Парадак адлюстравання",
|
||||
|
@ -1105,7 +1105,7 @@
|
|||
"LabelFormat": "Фармат",
|
||||
"OptionAllowLinkSharingHelp": "Абагульваюцца толькі вэб-старонкі, якія змяшчаюць медыя-інфармацыю. Мультымедыйныя файлы ніколі не абагульваюцца публічна. Абагульванне абмежавана па часе і скончыцца праз {0} дзён.",
|
||||
"LabelInNetworkSignInWithEasyPassword": "Уключыць уваход у сетку з майго Easy PIN-кода",
|
||||
"OptionAllowManageLiveTv": "Дазволіць кіраванне запісам ТБ",
|
||||
"OptionAllowManageLiveTv": "Дазволіць кіраванне запісам тэлеканалаў",
|
||||
"OptionAllowMediaPlayback": "Дазволіць прайграванне мультымедыя",
|
||||
"LabelKodiMetadataDateFormat": "Фармат даты выпуску",
|
||||
"OptionAllowMediaPlaybackTranscodingHelp": "Абмежаванне доступу да перакадзіравання можа прывесці да збояў прайгравання ў кліентах з-за непадтрымоўваных фарматаў мультымедыя.",
|
||||
|
@ -1148,7 +1148,7 @@
|
|||
"LabelSyncPlayHaltPlaybackDescription": "І ігнаруйце бягучыя абнаўленні спісаў прайгравання",
|
||||
"OptionEnableForAllTuners": "Уключыць для ўсіх цюнэраў",
|
||||
"OptionEstimateContentLength": "Ацаніце даўжыню змесціва пры перакадзіраванні",
|
||||
"OptionForceRemoteSourceTranscoding": "Прымусовае перакадзіраванне аддаленых медыякрыніц, такіх як Live TV",
|
||||
"OptionForceRemoteSourceTranscoding": "Прымусовае перакадзіраванне аддаленых медыякрыніц, такіх як тэлеканалы",
|
||||
"OptionHasThemeVideo": "Тэматычнае відэа",
|
||||
"OptionHideUser": "Схаваць гэтага карыстальніка з экранаў уваходу",
|
||||
"OptionHlsSegmentedSubtitles": "HLS сегментаваныя субтытры",
|
||||
|
@ -1249,7 +1249,7 @@
|
|||
"RefreshMetadata": "Абнавіць метададзеныя",
|
||||
"Play": "Прайграць",
|
||||
"RefreshQueued": "Абнавіць у чарзе.",
|
||||
"RememberAudioSelectionsHelp": "Паспрабуйце ўсталяваць аўдыё дарожку, якая найбольш адпавядае апошняму відэа.",
|
||||
"RememberAudioSelectionsHelp": "Паспрабуйце ўсталяваць аўдыёдарожку, якая найбольш адпавядае апошняму відэа.",
|
||||
"RememberSubtitleSelectionsHelp": "Паспрабуйце ўсталяваць дарожку субтытраў, якая найбольш адпавядае апошняму відэа.",
|
||||
"Remixer": "Рэміксер",
|
||||
"RepeatAll": "Паўтарыце ўсё",
|
||||
|
@ -1318,7 +1318,7 @@
|
|||
"TheseSettingsAffectSubtitlesOnThisDevice": "Гэтыя налады ўплываюць на субтытры на гэтай прыладзе",
|
||||
"Thumb": "Эскіз",
|
||||
"TonemappingAlgorithmHelp": "Тональнае адлюстраванне можна дакладна наладзіць. Калі вы не знаёмыя з гэтымі параметрамі, проста захавайце стандартныя. Рэкамендаванае значэнне - \"BT.2390\".",
|
||||
"Track": "Трэк",
|
||||
"Track": "Дарожка",
|
||||
"TypeOptionPluralBook": "Кнігі",
|
||||
"UninstallPluginConfirmation": "Вы ўпэўнены, што хочаце выдаліць {0}?",
|
||||
"UseDoubleRateDeinterlacing": "Падвоіць частату кадраў пры дэінтэрлейсінгу",
|
||||
|
@ -1437,7 +1437,7 @@
|
|||
"SubtitleVerticalPositionHelp": "Нумар радка, дзе з'яўляецца тэкст. Дадатныя лічбы паказваюць зверху ўніз. Адмоўныя лічбы паказваюць знізу ўверх.",
|
||||
"HideWatchedContentFromLatestMedia": "Схаваць прагледжанае змесціва з \"Нядаўна дададзеных медыя\"",
|
||||
"MessageRenameMediaFolder": "Перайменаванне медыятэкі прывядзе да страты ўсіх метададзеных, будзьце асцярожныя.",
|
||||
"LabelMaxDaysForNextUpHelp": "Усталюйце максімальную колькасць дзён, на працягу якіх шоу павінна заставацца ў спісе \"Далей\", без яго прагляду.",
|
||||
"LabelMaxDaysForNextUpHelp": "Усталюйце максімальную колькасць дзён, на працягу якіх серыя павінна заставацца ў спісе \"Наступны\", без прагляду.",
|
||||
"MessageTheFollowingLocationWillBeRemovedFromLibrary": "Наступныя медыя-месцы будуць выдалены з вашай бібліятэкі",
|
||||
"Metadata": "Метададзеныя",
|
||||
"MinutesAfter": "хвілін пасля",
|
||||
|
@ -1474,7 +1474,7 @@
|
|||
"HeaderCancelSeries": "Адмена серыі",
|
||||
"HeaderCodecProfileHelp": "Профілі кодэкаў паказваюць абмежаванні прылады пры прайграванні пэўных кодэкаў. Калі дзейнічае абмежаванне, мультымедыя будзе перакадзіравана, нават калі кодэк настроены для прамога прайгравання.",
|
||||
"HeaderConfirmPluginInstallation": "Пацвердзіце ўстаноўку плагіна",
|
||||
"HeaderConnectionFailure": "Збой злучэння",
|
||||
"HeaderConnectionFailure": "Збой падлучэння",
|
||||
"HeaderContainerProfile": "Профіль кантэйнера",
|
||||
"HeaderContainerProfileHelp": "Профілі кантэйнераў паказваюць абмежаванні прылады пры прайграванні пэўных фарматаў. Калі дзейнічае абмежаванне, медыяфайл будзе перакадзіраваны, нават калі фармат настроены для прамога прайгравання.",
|
||||
"HeaderDefaultRecordingSettings": "Налады запісу па змаўчанні",
|
||||
|
@ -1518,7 +1518,7 @@
|
|||
"HeaderXmlDocumentAttributes": "Атрыбуты дакумента XML",
|
||||
"HeaderXmlSettings": "Налады XML",
|
||||
"Kids": "Дзеці",
|
||||
"KnownProxiesHelp": "Спіс IP-адрасоў або імёнаў хастоў вядомых проксі, падзеленых коскамі, якія выкарыстоўваюцца пры падключэнні да вашага асобніка Jellyfin. Гэта неабходна для належнага выкарыстання загалоўкаў \"X-Forwarded-For\". Патрабуецца перазагрузка пасля захавання.",
|
||||
"KnownProxiesHelp": "Спіс IP-адрасоў або імёнаў хастоў вядомых проксі, падзеленых коскамі, якія выкарыстоўваюцца пры падлучэнні да вашага асобніка Jellyfin. Гэта неабходна для належнага выкарыстання загалоўкаў \"X-Forwarded-For\". Патрабуецца перазагрузка пасля захавання.",
|
||||
"LabelAbortedByServerShutdown": "(Спынена адключэннем сервера)",
|
||||
"LabelAccessDay": "Дзень тыдня",
|
||||
"LabelAccessStart": "Час пачатку",
|
||||
|
@ -1625,7 +1625,7 @@
|
|||
"MessageNoAvailablePlugins": "Няма даступных плагінаў.",
|
||||
"MessageNoCollectionsAvailable": "Калекцыі дазваляюць карыстацца персаналізаванымі групамі фільмаў, серыялаў і альбомаў. Націсніце кнопку \"+\", каб пачаць ствараць калекцыі.",
|
||||
"MessageNoMovieSuggestionsAvailable": "Зараз няма прапаноў па фільмах. Пачніце глядзець і ацэньваць свае фільмы, а потым вярніцеся да прагляду рэкамендацый.",
|
||||
"MessageNoNextUpItems": "Нічога не знойдзена. Пачніце глядзець свае шоу!",
|
||||
"MessageNoNextUpItems": "Нічога не знойдзена. Пачніце глядзець свае серыялы!",
|
||||
"MessageNoPluginConfiguration": "Гэты плагін не мае налад для наладжвання.",
|
||||
"MessagePluginInstallError": "Пры ўсталёўцы плагіна адбылася памылка.",
|
||||
"NextChapter": "Наступная глава",
|
||||
|
@ -1636,14 +1636,14 @@
|
|||
"OptionEmbedSubtitles": "Убудаваць у кантэйнер",
|
||||
"OptionEnableAccessToAllChannels": "Уключыць доступ да ўсіх каналаў",
|
||||
"OptionEnableAccessToAllLibraries": "Дазволіць доступ да ўсіх бібліятэк",
|
||||
"OptionEnableExternalContentInSuggestionsHelp": "Дазволіць уключэнне інтэрнэт-трэйлераў і жывых тэлепраграм у прапанаваны кантэнт.",
|
||||
"OptionEnableExternalContentInSuggestionsHelp": "Дазволіць уключэнне інтэрнэт-трэйлераў і тэлепраграмы ў прапанаваны кантэнт.",
|
||||
"OptionEnableM2tsMode": "Уключыць рэжым M2TS",
|
||||
"OptionEveryday": "Кожны дзень",
|
||||
"OptionExtractChapterImage": "Уключыць выманне выявы раздзела",
|
||||
"OptionParentalRating": "Бацькоўскі рэйтынг",
|
||||
"OptionPlainStorageFolders": "Адлюстраваць усе папкі як звычайныя папкі для захоўвання",
|
||||
"PlaybackErrorNoCompatibleStream": "Гэты кліент несумяшчальны з мультымедыя, і сервер не дасылае сумяшчальны фармат медыя.",
|
||||
"RememberAudioSelections": "Усталяваць гукавую дарожку на аснове папярэдняга элемента",
|
||||
"RememberAudioSelections": "Усталяваць аўдыёдарожку на аснове папярэдняга элемента",
|
||||
"Rewind": "Перамотка назад",
|
||||
"SyncPlayAccessHelp": "Функцыя SyncPlay дазваляе сінхранізаваць прайграванне з іншымі прыладамі. Выберыце ўзровень доступу гэтага карыстальніка да SyncPlay.",
|
||||
"SystemDlnaProfilesHelp": "Сістэмныя профілі даступныя толькі для чытання. Змены ў сістэмным профілі будуць захаваны ў новым карыстальніцкім профілі.",
|
||||
|
@ -1656,13 +1656,13 @@
|
|||
"ValueAlbumCount": "{0} альбомаў",
|
||||
"ValueAudioCodec": "Аўдыякодэк: {0}",
|
||||
"WriteAccessRequired": "Jellyfin патрабуе доступу для запісу ў гэту папку. Забяспечце доступ для запісу і паўтарыце спробу.",
|
||||
"Writers": "Пісьменнікі",
|
||||
"Writers": "Сцэнарысты",
|
||||
"XmlDocumentAttributeListHelp": "Гэтыя атрыбуты прымяняюцца да каранёвага элемента кожнага адказу XML.",
|
||||
"XmlTvKidsCategoriesHelp": "Праграмы з гэтымі катэгорыямі будуць адлюстроўвацца як праграмы для дзяцей. Раздзяляйце некалькі знакамі '|'.",
|
||||
"XmlTvMovieCategoriesHelp": "Праграмы з гэтымі катэгорыямі будуць адлюстроўвацца як фільмы. Раздзяляйце некалькі знакамі '|'.",
|
||||
"XmlTvNewsCategoriesHelp": "Праграмы з гэтымі катэгорыямі будуць адлюстроўвацца як праграмы навін. Раздзяляйце некалькі знакамі '|'.",
|
||||
"XmlTvPathHelp": "Шлях да файла XMLTV. Jellyfin будзе чытаць гэты файл і перыядычна правяраць яго на наяўнасць абнаўленняў. Вы несяце адказнасць за стварэнне і абнаўленне файла.",
|
||||
"Yadif": "YADIF",
|
||||
"Yadif": "Yet Another DeInterlacing Filter (YADIF)",
|
||||
"LabelDirectStreamingInfo": "Інфармацыя пра прамую трансляцыю",
|
||||
"LabelOriginalMediaInfo": "Арыгінальная інфармацыя аб медыя",
|
||||
"LabelSyncPlayInfo": "Інфармацыя SyncPlay",
|
||||
|
@ -1705,7 +1705,7 @@
|
|||
"Short": "Кароткаметражка",
|
||||
"HeaderPerformance": "Прадукцыйнасць",
|
||||
"LabelParallelImageEncodingLimit": "Ліміт паралельнага кадавання выявы",
|
||||
"LabelParallelImageEncodingLimitHelp": "Максімальная колькасць кадавання малюнкаў, якія могуць працаваць паралельна. Пры ўсталёўцы 0 вы выбіраеце ліміт на аснове спецыфікацый вашай сістэмы.",
|
||||
"LabelParallelImageEncodingLimitHelp": "Максімальная колькасць кадавання малюнкаў, якія могуць працаваць паралельна. Пры ўсталёўцы 0 будзе вызначана абмежаванне на аснове колькасці ядраў вашай сістэмы.",
|
||||
"LabelEnableAudioVbr": "Уключыць кадыроўку гуку VBR",
|
||||
"LabelEnableAudioVbrHelp": "Пераменны бітрэйт забяспечвае лепшае суадносіны якасці да сярэдняга, але ў некаторых рэдкіх выпадках можа выклікаць праблемы з буферызацыяй і сумяшчальнасцю.",
|
||||
"TonemappingModeHelp": "Выберыце рэжым танальнага адлюстравання. Калі вы бачыце, што блікі блякнуць, паспрабуйце пераключыцца ў рэжым RGB.",
|
||||
|
@ -1714,7 +1714,7 @@
|
|||
"EnableAudioNormalizationHelp": "Нармалізацыя гуку дадасць пастаяннае ўзмацненне, каб падтрымліваць сярэдняе значэнне на жаданым узроўні (-18 дБ).",
|
||||
"EnableAudioNormalization": "Нармалізацыя гуку",
|
||||
"LabelEnableLUFSScan": "Уключыць сканаванне LUFS",
|
||||
"LabelEnableLUFSScanHelp": "Кліенты могуць нармалізаваць прайграванне гуку, каб атрымаць аднолькавую гучнасць на ўсіх трэках. Гэта зробіць сканаванне бібліятэк больш працяглым і зойме больш рэсурсаў.",
|
||||
"LabelEnableLUFSScanHelp": "Кліенты могуць нармалізаваць прайграванне гуку, каб атрымаць аднолькавую гучнасць на ўсіх дарожках. Гэта зробіць сканаванне бібліятэк больш працяглым і зойме больш рэсурсаў.",
|
||||
"Studio": "Студыя",
|
||||
"MenuOpen": "Адкрыць меню",
|
||||
"MenuClose": "Зачыніць меню",
|
||||
|
@ -1759,8 +1759,8 @@
|
|||
"LogLevel.Warning": "Папярэджанне",
|
||||
"LogLevel.Error": "Памылка",
|
||||
"LabelTrackGain": "Узмацненне дарожкі",
|
||||
"GoHome": "Дадому",
|
||||
"SelectAudioNormalizationHelp": "Узмацненне трэка - рэгулюе гучнасць кожнага трэка, каб яны прайграваліся з аднолькавай гучнасцю. Узмацненне альбома - рэгулюе гучнасць толькі ўсіх трэкаў у альбоме, захоўваючы дынамічны дыяпазон альбома.",
|
||||
"GoHome": "На галоўную",
|
||||
"SelectAudioNormalizationHelp": "Узмацненне дарожкі - рэгулюе гучнасць кожнай дарожкі, каб яны прайграваліся з аднолькавай гучнасцю. Узмацненне альбома - рэгулюе гучнасць толькі ўсіх дарожак у альбоме, захоўваючы дынамічны дыяпазон альбома.",
|
||||
"SearchResultsEmpty": "Выбачайце! Няма вынікаў для \"{0}\"",
|
||||
"UnknownError": "Адбылася невядомая памылка.",
|
||||
"LabelIsHearingImpaired": "Для людзей з парушэннем слыху (SDH)",
|
||||
|
@ -1788,5 +1788,98 @@
|
|||
"LabelQscale": "Qscale",
|
||||
"HeaderAllRecordings": "Усе запісы",
|
||||
"DeleteName": "Выдаліць {0}",
|
||||
"EnableSmoothScroll": "Уключыць плаўную пракрутку"
|
||||
"EnableSmoothScroll": "Уключыць плаўную пракрутку",
|
||||
"ConfirmDeleteSeries": "Выдаленне гэтага серыялу прывядзе да выдалення ЎСІХ {0} эпізодаў як з файлавай сістэмы, так і з вашай медыятэкі. Вы ўпэўнены, што хочаце працягнуць?",
|
||||
"ConfirmDeleteLyrics": "Выдаленне гэтых тэкстаў песен прывядзе да іх выдалення як з файлавай сістэмы, так і з вашай медыятэкі. Вы ўпэўнены, што хочаце працягнуць?",
|
||||
"EnableTrueHdHelp": "Уключайце, толькі калі ваша прылада падтрымлівае TrueHD або падлучана да сумяшчальнага аўдыяпрыёмніка, у адваротным выпадку гэта можа прывесці да збою прайгравання.",
|
||||
"EnableDtsHelp": "Уключайце, толькі калі ваша прылада падтрымлівае DTS або падлучана да сумяшчальнага аўдыяпрыёмніка, у адваротным выпадку гэта можа прывесці да збою прайгравання.",
|
||||
"CoverArtist": "Аўтар вокладкі",
|
||||
"ErrorDeletingLyrics": "Адбылася памылка пры выдаленні тэксту песні з сервера. Калі ласка, пераканайцеся, што ў Jellyfin ёсць доступ на запіс да тэчкі мультымедыі, і паўторыце спробу.",
|
||||
"HeaderVideoAdvanced": "Пашыранае відэа",
|
||||
"LabelSelectPreferredTranscodeVideoCodec": "Пераважны кодэк для перакадавання відэа",
|
||||
"LabelSelectPreferredTranscodeVideoAudioCodec": "Пераважны аўдыёкодэк для перакадавання пры прайграванні відэа",
|
||||
"PlaybackError.FATAL_HLS_ERROR": "У патоку HLS была выяўленая фатальная памылка.",
|
||||
"PlaybackError.MEDIA_NOT_SUPPORTED": "Не атрымалася прайграць файл, паколькі гэты кліент не падтрымлівае мультымедыйны файл.",
|
||||
"PlaylistError.CreateFailed": "Памылка стварэння плэйліста",
|
||||
"PlaylistPublic": "Дазволіць публічны доступ",
|
||||
"LimitSupportedVideoResolutionHelp": "Выкарыстоўвайце \"Максімальнае дазволенае раздзяленне перакадзіравання відэа\" ў якасці максімальнага падтрымоўванага раздзялення відэа.",
|
||||
"PlaybackError.ASS_RENDER_ERROR": "У праграме візуалізацыі субтытраў ASS / SSA была выяўленая памылка.",
|
||||
"PlaybackError.MEDIA_DECODE_ERROR": "Збой прайгравання адбыўся з-за памылкі пры дэкадаванні мультымедыі.",
|
||||
"PlaybackError.NETWORK_ERROR": "Збой прайгравання адбыўся з-за сеткавай памылкі.",
|
||||
"PlaylistPublicDescription": "Дазволіць прагляд гэтага плэйліста любому карыстальніку, які ўвайшоў у сістэму.",
|
||||
"HeaderNoLyrics": "Тэксты песень не знойдзены",
|
||||
"Illustrator": "Ілюстратар",
|
||||
"LabelServerVersion": "Версія сервера",
|
||||
"PlaybackError.SERVER_ERROR": "Прайграванне не атрымалася з-за памылкі сервера.",
|
||||
"LabelWebVersion": "Вэб-версія",
|
||||
"LibraryScanFanoutConcurrency": "Абмежаванне задач паралельнага сканавання бібліятэкі",
|
||||
"Penciller": "Чарцёжнік",
|
||||
"AllowContentWithTagsHelp": "Паказвайце толькі мультымедыйныя файлы, якія змяшчаюць хоць бы адзін з названых тэгаў.",
|
||||
"Author": "Аўтар",
|
||||
"Creator": "Стваральнік",
|
||||
"DeleteLyrics": "Выдаліць тэкст песні",
|
||||
"Inker": "Мастак",
|
||||
"Letterer": "Пісьменнік",
|
||||
"PlaybackError.NotAllowed": "Прайграванне гэтай мультымедыі забаронена.",
|
||||
"PlaybackError.RateLimitExceeded": "У дадзены момант прайграванне гэтая мультымедыі немагчыма з-за абмежаванняў хуткасці.",
|
||||
"PlaybackError.NO_MEDIA_ERROR": "Немагчыма знайсці сапраўдную крыніцу мультымедыі для прайгравання.",
|
||||
"EnableTrueHd": "Уключыць TrueHD",
|
||||
"AlternateDVD": "Альтэрнатыўны DVD",
|
||||
"Alternate": "Альтэрнатыўны",
|
||||
"Colorist": "Каларыст",
|
||||
"Editor": "Рэдактар",
|
||||
"EnableDts": "Уключыць DTS (DCA)",
|
||||
"HeaderDeleteSeries": "Выдаліць серыял",
|
||||
"HeaderDeleteLyrics": "Выдаліць тэкст песні",
|
||||
"LabelAllowContentWithTags": "Дазволіць элементы з тэгамі",
|
||||
"Lyrics": "Тэкст песні",
|
||||
"LibraryScanFanoutConcurrencyHelp": "Максімальную колькасць паралельных задач пры сканаванні бібліятэкі. Пры ўсталёўцы значэння 0 будзе абрана абмежаванне, заснаванае на колькасці ядраў у вашай сістэме. УВАГА: занадта вялікае значэнне можа прывесці да праблем з сеткавымі файлавымі сістэмамі; пры ўзнікненні праблем паменшыце гэта значэнне.",
|
||||
"PlaylistError.AddFailed": "Памылка пры даданні ў плэйліст",
|
||||
"PlaybackError.PLAYER_ERROR": "Прайграванне не атрымалася з-за фатальнай памылкі прайгравальніка.",
|
||||
"Regional": "Абласны",
|
||||
"HeaderLyricDownloads": "Спампоўка тэкстаў песен",
|
||||
"LabelBuildVersion": "Версія зборкі",
|
||||
"Lyric": "Тэкст песні",
|
||||
"LimitSupportedVideoResolution": "Абмежаваць максімальную падтрымліваемую раздзяляльнасць відэа",
|
||||
"SavePassword": "Захаваць пароль",
|
||||
"SelectPreferredTranscodeVideoCodecHelp": "Выберыце пераважны відэакодэк для перакадзіравання. Калі пераважны кодэк не падтрымліваецца, сервер будзе выкарыстоўваць наступны найлепшы даступны кодэк.",
|
||||
"SelectPreferredTranscodeVideoAudioCodecHelp": "Выберыце пераважны аўдыякодэк для перакадзіравання відэакантэнту. Калі пераважны кодэк не падтрымліваецца, сервер будзе выкарыстоўваць наступны лепшы даступны кодэк.",
|
||||
"ViewLyrics": "Прагляд тэкстаў песень",
|
||||
"SaveLyricsIntoMediaFoldersHelp": "Захоўванне тэкстаў песен побач з аўдыяфайламі дазволіць ім лягчэй кіраваць.",
|
||||
"Translator": "Перакладчык",
|
||||
"SaveLyricsIntoMediaFolders": "Захоўвайце тэксты песень у папках мультымедыі",
|
||||
"LabelEncodingFormatOptions": "Параметры фармату кадавання",
|
||||
"AllowVideoToolboxTonemappingHelp": "Адлюстраванне тонаў з апаратным паскарэннем забяспечваецца VideoToolbox. Ён працуе з большасцю фарматаў HDR, уключаючы HDR10, HDR10+ і HLG, але не працуе з Dolby Vision Profile 5. Ён мае больш высокі прыярытэт, чым іншыя рэалізацыі Metal.",
|
||||
"EnableVideoToolboxTonemapping": "Уключыць тонавае адлюстраванне VideoToolbox",
|
||||
"Trickplay": "Trickplay",
|
||||
"EncodingFormatHelp": "Выберыце кадзіроўку відэа, у якую вы хочаце перакадаваць Jellyfin. Jellyfin будзе выкарыстоўваць праграмнае кадзіраванне, калі апаратнае паскарэнне недаступна для абранага фармату. Кадаванне H264 заўсёды будзе ўключана.",
|
||||
"LabelTrickplayAccelEncoding": "Уключыць апаратнае паскарэнне кадавання MJPEG",
|
||||
"LabelTrickplayAccel": "Уключыць апаратнае дэкадаванне",
|
||||
"LabelTrickplayAccelEncodingHelp": "Гэты параметр зараз даступны толькі для QSV і VAAPI, ён не ўплывае на іншыя метады апаратнага паскарэння.",
|
||||
"NonBlockingScan": "Без блакіроўкі - стварэнне чаргі, потым вяртанне",
|
||||
"LabelScanBehavior": "Паводзіны сканавання",
|
||||
"BlockingScan": "Блакаванне - стварэнне чэргаў, блакуе сканаванне да поўнага завяршэння",
|
||||
"LabelScanBehaviorHelp": "Па змаўчанні выкарыстоўваецца рэжым без блакавання, пры якім медыяфайлы будуць дададзеныя ў бібліятэку да завяршэння стварэння trick play. Блакаванне гарантуе, што файлы trickplay будуць створаны да дадання медыяфайлаў у бібліятэку, але значна павялічыць час сканавання.",
|
||||
"PriorityHigh": "Высокі",
|
||||
"PriorityNormal": "Нармальны",
|
||||
"PriorityBelowNormal": "Ніжэй за норму",
|
||||
"PriorityAboveNormal": "Вышэй за норму",
|
||||
"PriorityIdle": "Бяздзейны",
|
||||
"LabelProcessPriority": "Прыярытэт працэсу",
|
||||
"LabelProcessPriorityHelp": "Калі ўсталяваць гэта значэнне ніжэй або вышэй, то будзе залежаць ад таго, як працэсар расставіць прыярытэты для працэсу генерацыі trickplay у фармаце ffmpeg ў адносінах да іншых працэсаў. Калі вы заўважылі запаволенне пры стварэнні малюнкаў trickplay, але не хочаце цалкам спыняць іх генерацыю, паспрабуйце паменшыць гэта значэнне, а таксама колькасць патокаў.",
|
||||
"LabelImageInterval": "Інтэрвал паміж выявамі",
|
||||
"LabelImageIntervalHelp": "Інтэрвал часу (мс) паміж кожнай новай trickplay выявай.",
|
||||
"OptionExtractTrickplayImage": "Уключыць выманне trickplay відарысаў",
|
||||
"LabelExtractTrickplayDuringLibraryScan": "Здабываць trickplay выявы пры сканаванні бібліятэкі",
|
||||
"LabelWidthResolutionsHelp": "Падзелены коскамі спіс значэнняў шырыні (px), пры якіх будуць стварацца выявы trickplay. Усе выявы павінны быць згенераваныя прапарцыйна зыходнаму малюнку, таму пры шырыні 320 пікселяў ў відэа з дазволам 16:9 атрымаецца каля 320x180.",
|
||||
"LabelQscaleHelp": "Шкала якасці малюнкаў, якія выводзяцца з дапамогай ffmpeg, дзе 2 адпавядае самаму высокаму якасці, а 31 - самаму нізкаму.",
|
||||
"LabelTrickplayThreads": "Патокі FFmpeg",
|
||||
"LabelTrickplayThreadsHelp": "Колькасць патокаў, якія трэба перадаць аргументу \"-патокі\" ffmpeg.",
|
||||
"ExtractTrickplayImagesHelp": "Выявы Trickplay падобныя на выявы раздзелаў, за выключэннем таго, што яны ахопліваюць увесь кантэнт і выкарыстоўваюцца для папярэдняга прагляду падчас прагляду відэа.",
|
||||
"LabelExtractTrickplayDuringLibraryScanHelp": "Стварэнне малюнкаў trickplay, калі відэа імпартуецца падчас сканавання бібліятэкі. У адваротным выпадку яны будуць вынятыя падчас запланаванага задання trickplay. Калі для параметру генерацыя абрана значэнне неблокирующее, гэта не паўплывае на час, неабходнае для завяршэння сканавання бібліятэкі.",
|
||||
"LabelTileHeightHelp": "Максімальная колькасць малюнкаў на плітку ў кірунку Y.",
|
||||
"LabelWidthResolutions": "Дазвол па шырыні",
|
||||
"LabelTileWidth": "Шырыня пліткі",
|
||||
"LabelTileWidthHelp": "Максімальная колькасць малюнкаў на плітку ў напрамку X.",
|
||||
"LabelTileHeight": "Вышыня пліткі"
|
||||
}
|
||||
|
|
|
@ -1897,5 +1897,7 @@
|
|||
"HeaderVideoAdvanced": "Erweitertes Video",
|
||||
"Alternate": "Alternative",
|
||||
"AlternateDVD": "Alternative DVD",
|
||||
"Regional": "Regional"
|
||||
"Regional": "Regional",
|
||||
"LabelSelectPreferredTranscodeVideoCodec": "Bevorzugter transkodierter Videocodec",
|
||||
"SelectPreferredTranscodeVideoCodecHelp": "Wähle den bevorzugten Videocodec für die Transkodierung aus. Wenn der bevorzugte Codec nicht unterstützt wird, verwendet der Server den nächstbesten verfügbaren Codec."
|
||||
}
|
||||
|
|
|
@ -1897,5 +1897,7 @@
|
|||
"SaveLyricsIntoMediaFoldersHelp": "Storing lyrics next to audio files will allow them to be more easily managed.",
|
||||
"Alternate": "Alternate",
|
||||
"AlternateDVD": "Alternate DVD",
|
||||
"Regional": "Regional"
|
||||
"Regional": "Regional",
|
||||
"SelectPreferredTranscodeVideoCodecHelp": "Select the preferred video codec to transcode to. If the preferred codec is not supported, the server will use the next best available codec.",
|
||||
"LabelSelectPreferredTranscodeVideoCodec": "Preferred transcode video codec"
|
||||
}
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
"ButtonQuickStartGuide": "Panduan cepat",
|
||||
"ButtonSignOut": "Sign out",
|
||||
"HeaderEasyPinCode": "Kode PIN Mudah",
|
||||
"HeaderSetupLibrary": "Atur pustaka media Anda",
|
||||
"HeaderSetupLibrary": "Siapkan perpustakaan media Anda",
|
||||
"LabelContentType": "Tipe konten",
|
||||
"LabelCountry": "Negara",
|
||||
"LabelCountry": "Negara/Regional",
|
||||
"LabelFinish": "Selesai",
|
||||
"LabelLanguage": "Bahasa",
|
||||
"LabelSaveLocalMetadata": "Simpan artwork dan metadata ke dalam folder media",
|
||||
|
@ -122,7 +122,7 @@
|
|||
"AspectRatio": "Rasio perbandingan",
|
||||
"Ascending": "Urutan naik",
|
||||
"AsManyAsPossible": "Sebanyak mungkin",
|
||||
"Art": "Clearart",
|
||||
"Art": "ClearArt",
|
||||
"AroundTime": "Sekitar {0}",
|
||||
"Anytime": "Kapanpun",
|
||||
"AnyLanguage": "Bahasa apapun",
|
||||
|
@ -156,7 +156,7 @@
|
|||
"AddedOnValue": "{0} Ditambahkan",
|
||||
"AllowFfmpegThrottling": "Transcode Dibatas (Throttle)",
|
||||
"AllowOnTheFlySubtitleExtractionHelp": "Subtitel yang disematkan dapat diekstrak dari video dan dikirim ke klien dalam teks biasa, untuk membantu mencegah transcoding video. Pada beberapa sistem, ini dapat memakan waktu lama dan menyebabkan pemutaran video terhenti selama proses ekstraksi. Nonaktifkan ini untuk menyematkan subtitle yang disematkan dengan transcoding video ketika mereka tidak didukung secara native oleh perangkat klien.",
|
||||
"ButtonSyncPlay": "SyncPlay",
|
||||
"ButtonSyncPlay": "Syncplay",
|
||||
"EnablePhotosHelp": "Gambar akan terdeteksi dan ditampilkan bersama file media lainnya.",
|
||||
"EnablePhotos": "Menampilkan foto",
|
||||
"EnableNextVideoInfoOverlayHelp": "Di akhir video, tampilkan info tentang video berikutnya yang akan muncul di daftar putar saat ini.",
|
||||
|
@ -175,7 +175,7 @@
|
|||
"EditImages": "Edit Gambar",
|
||||
"Edit": "Sunting",
|
||||
"EasyPasswordHelp": "Kode PIN Mudah Anda akan digunakan untuk akses offline di klien terdukung dan untuk masuk ke jaringan dengan mudah.",
|
||||
"DropShadow": "Drop Shadow",
|
||||
"DropShadow": "DropShadow",
|
||||
"DrmChannelsNotImported": "Saluran dengan DRM tidak akan diimpor.",
|
||||
"DownloadsValue": "{0} unduhan",
|
||||
"Download": "Unduh",
|
||||
|
@ -242,7 +242,7 @@
|
|||
"OptionDisableUserHelp": "Server tidak akan mengizinkan koneksi apa pun dari pengguna ini. Koneksi yang ada akan tiba-tiba berakhir.",
|
||||
"OptionAllowUserToManageServer": "Izinkan pengguna ini untuk mengelola server",
|
||||
"MessageUnableToConnectToServer": "Kami tidak dapat terhubung ke server yang dipilih sekarang. Harap pastikan itu berjalan dan coba lagi.",
|
||||
"MessagePluginInstallDisclaimer": "Plugin yang dibuat oleh anggota komunitas adalah cara terbaik untuk meningkatkan pengalaman Anda dengan fitur dan manfaat tambahan. Sebelum menginstal, perhatikan efeknya pada server Anda, seperti pemindaian perpustakaan yang lebih lama, pemrosesan latar belakang tambahan, dan penurunan stabilitas sistem.",
|
||||
"MessagePluginInstallDisclaimer": "PERINGATAN: Memasang plugin pihak ketiga memiliki risiko. Ini mungkin berisi kode yang tidak stabil atau berbahaya, dan dapat berubah kapan saja. Hanya instal plugin dari penulis yang Anda percayai, dan harap perhatikan potensi dampak yang mungkin ditimbulkannya, termasuk permintaan layanan eksternal, pemindaian perpustakaan yang lebih lama, atau pemrosesan latar belakang tambahan.",
|
||||
"MessagePluginConfigurationRequiresLocalAccess": "Untuk mengatur plugin ini, silakan masuk ke server lokal Anda secara langsung.",
|
||||
"MessagePlayAccessRestricted": "Pemutaran konten ini saat ini dibatasi. Silakan hubungi administrator server Anda untuk informasi lebih lanjut.",
|
||||
"MessageNoServersAvailable": "Tidak ada server yang ditemukan menggunakan penemuan server otomatis.",
|
||||
|
@ -296,22 +296,22 @@
|
|||
"LabelFormat": "Format",
|
||||
"LabelForgotPasswordUsernameHelp": "Masukkan nama pengguna Anda, jika Anda mengingatnya.",
|
||||
"LabelFont": "Font",
|
||||
"LabelFolder": "Folder",
|
||||
"LabelFolder": "Map",
|
||||
"LabelFileOrUrl": "File atau URL",
|
||||
"LabelFailed": "Gagal",
|
||||
"HeaderChannelAccess": "Akses Saluran",
|
||||
"HeaderCastAndCrew": "Pemeran & Kru",
|
||||
"HeaderCancelSeries": "Batalkan Serial",
|
||||
"HeaderCancelRecording": "Batalkan Perekaman",
|
||||
"HeaderBranding": "Branding",
|
||||
"HeaderBranding": "Merek",
|
||||
"HeaderBlockItemsWithNoRating": "Blokir item dengan informasi peringkat yang tidak ada atau tidak dikenal",
|
||||
"HeaderAudioSettings": "Pengaturan Audio",
|
||||
"HeaderAudioBooks": "Buku Audio",
|
||||
"HeaderAppearsOn": "Muncul Di",
|
||||
"HeaderApp": "Aplikasi",
|
||||
"ApiKeysCaption": "Daftar API keys yang saat ini diaktifkan",
|
||||
"HeaderApiKeys": "API Keys",
|
||||
"HeaderApiKey": "API Key",
|
||||
"HeaderApiKeys": "Kunci API",
|
||||
"HeaderApiKey": "Kunci API",
|
||||
"HeaderAllowMediaDeletionFrom": "Izinkan Penghapusan Media Dari",
|
||||
"HeaderAlert": "Peringatan",
|
||||
"HeaderAdmin": "Administrasi",
|
||||
|
@ -363,7 +363,7 @@
|
|||
"ErrorAddingMediaPathToVirtualFolder": "Terjadi kesalahan saat menambahkan lokasi media. Harap pastikan lokasi valid dan Jellyfin memiliki akses ke lokasi itu.",
|
||||
"ErrorAddingListingsToSchedulesDirect": "Terjadi kesalahan saat menambahkan daftar ke akun Jadwal Langsung Anda. Jadwal Langsung hanya mengizinkan jumlah daftar terbatas per akun. Anda mungkin perlu masuk ke situs web Jadwal Langsung dan menghapus daftar orang lain dari akun Anda sebelum melanjutkan.",
|
||||
"Episodes": "Semua episode",
|
||||
"Episode": "Episode",
|
||||
"Episode": "Episod",
|
||||
"EndsAtValue": "Berakhir pada {0}",
|
||||
"Ended": "Berakhir",
|
||||
"EnableDetailsBannerHelp": "Tampilkan gambar spanduk di bagian atas halaman detail item.",
|
||||
|
@ -434,7 +434,7 @@
|
|||
"LabelAudioBitDepth": "Kedalaman bit audio",
|
||||
"LabelArtistsHelp": "Pisahkan beberapa artis dengan titik koma.",
|
||||
"LabelArtists": "Artis",
|
||||
"LabelAppNameExample": "Contoh : Sickbeard, Sonarr",
|
||||
"LabelAppNameExample": "Nama yang dapat dibaca untuk mengidentifikasi kunci API. Pengaturan ini tidak akan mempengaruhi fungsionalitas.",
|
||||
"LabelAppName": "Nama aplikasi",
|
||||
"LabelAllowedRemoteAddressesMode": "Mode filter alamat IP jarak jauh",
|
||||
"LabelAllowedRemoteAddresses": "Filter alamat IP jarak jauh",
|
||||
|
@ -833,7 +833,7 @@
|
|||
"LabelTranscodingThreadCountHelp": "Pilih jumlah maksimum utas yang akan digunakan saat transcoding. Mengurangi jumlah utas akan menurunkan penggunaan CPU tetapi mungkin tidak mengonversi cukup cepat untuk pengalaman pemutaran yang lancar.",
|
||||
"LabelTranscodingThreadCount": "Jumlah utas transcoding",
|
||||
"LabelTranscodingProgress": "Proses transcoding",
|
||||
"LabelTranscodingFramerate": "Transcoding framerate",
|
||||
"LabelTranscodingFramerate": "Transkode kecepatan bingkai",
|
||||
"LabelTranscodes": "Transcode",
|
||||
"LabelTrackNumber": "Nomor jejak",
|
||||
"LabelTitle": "Judul",
|
||||
|
@ -1037,9 +1037,9 @@
|
|||
"EnableTonemapping": "Aktifkan pemetaan pola",
|
||||
"EnableBlurHash": "Aktifkan tempat untuk gambar buram",
|
||||
"ClearQueue": "Hapus antrian",
|
||||
"Bwdif": "BWDIF",
|
||||
"Bwdif": "Bob Weaver DeInterlacing Filter",
|
||||
"ButtonCast": "Putar ke perangkat",
|
||||
"AllowTonemappingHelp": "Tone-mapping dapat mengubah jangkauan dinamis video dari HDR ke SDR dengan tetap mempertahankan detail dan warna gambar, yang merupakan informasi yang sangat penting untuk merepresentasikan pemandangan aslinya. Saat ini hanya berfungsi dengan video 10bit HDR10,HLG dan DoVi. Fitur ini membutuhkan runtime OpenCL atau CUDA yang sesuai.",
|
||||
"AllowTonemappingHelp": "Pemetaan warna kulit dapat mengubah rentang dinamis video dari HDR ke SDR dengan tetap mempertahankan detail dan warna gambar, yang merupakan informasi yang sangat penting untuk mewakili pemandangan aslinya. Saat ini hanya berfungsi dengan video 10bit HDR10, HLG, dan DoVi. Ini memerlukan runtime GPGPU yang sesuai.",
|
||||
"HeaderPortRanges": "Pengaturan Proxy dan Firewall",
|
||||
"HeaderUninstallPlugin": "Copot Plugin",
|
||||
"LabelTonemappingAlgorithm": "Pilih algoritma Tone Mapping untuk digunakan",
|
||||
|
@ -1074,7 +1074,7 @@
|
|||
"LabelEnableIP6": "Aktifkan IPv6",
|
||||
"LabelEnableIP4Help": "Aktifkan fungsionalitas IPv4.",
|
||||
"LabelEnableIP4": "Aktifkan IPv4",
|
||||
"MessagePasswordResetForUsers": "Kata sandi pengguna berikut telah disetel ulang. Mereka sekarang dapat masuk dengan kode Easy PIN yang digunakan untuk melakukan reset.",
|
||||
"MessagePasswordResetForUsers": "Kata sandi pengguna berikut telah disetel ulang. Mereka sekarang dapat masuk dengan kode PIN yang digunakan untuk melakukan penyetelan ulang.",
|
||||
"MessageNoTrailersFound": "Pasang saluran cuplikan untuk menyempurnakan pengalaman film Anda dengan menambahkan perpustakaan cuplikan internet.",
|
||||
"LabelDropSubtitleHere": "Taruh subtitle di sini, atau klik untuk mencari.",
|
||||
"LabelDashboardTheme": "Tema Dasbor Server",
|
||||
|
@ -1098,7 +1098,7 @@
|
|||
"LabelSelectAudioChannels": "Channel",
|
||||
"LabelAllowedAudioChannels": "Channel Audio Maksimum yang Diizinkan",
|
||||
"AllowHevcEncoding": "Izinkan encoding dalam format HEVC",
|
||||
"PreferFmp4HlsContainerHelp": "Pilih fMP4 sebagai container default untuk HLS, sehingga memungkinkan streaming langsung konten HEVC di perangkat yang didukung.",
|
||||
"PreferFmp4HlsContainerHelp": "Lebih suka menggunakan fMP4 sebagai wadah default untuk HLS, sehingga memungkinkan streaming langsung konten HEVC dan AV1 pada perangkat yang didukung.",
|
||||
"PreferFmp4HlsContainer": "Pilih fMP4-HLS Media Container",
|
||||
"LabelSyncPlayInfo": "Info SyncPlay",
|
||||
"LabelOriginalMediaInfo": "Info media asli",
|
||||
|
@ -1115,7 +1115,7 @@
|
|||
"MessageNoMovieSuggestionsAvailable": "Tidak ada saran film yang tersedia saat ini. Mulailah menonton dan menilai film Anda, lalu kembali untuk melihat rekomendasi Anda.",
|
||||
"LabelPlaybackInfo": "Informasi Pemutaran",
|
||||
"OptionBluray": "BD",
|
||||
"DirectPlayHelp": "File sumber sepenuhnya kompatibel dengan klien ini, dan sesi ini menerima file tersebut tanpa modifikasi.",
|
||||
"DirectPlayHelp": "File sumber sepenuhnya kompatibel dengan klien ini dan sesi ini menerima file tersebut tanpa modifikasi.",
|
||||
"Cursive": "Kursif",
|
||||
"Console": "Konsol",
|
||||
"Conductor": "Konduktor",
|
||||
|
@ -1168,13 +1168,13 @@
|
|||
"AspectRatioFill": "Mengisi",
|
||||
"EnableFallbackFontHelp": "Aktifkan font alternatif khusus. Ini dapat menghindari masalah rendering subtitle yang salah.",
|
||||
"EnableFallbackFont": "Aktifkan fallback fonts",
|
||||
"LabelFallbackFontPathHelp": "Tentukan jalur yang berisi font fallback untuk merender subtitle ASS/SSA. Ukuran font total maksimum yang diizinkan adalah 20 MB. Format font yang ringan dan ramah web seperti woff2 direkomendasikan.",
|
||||
"LabelFallbackFontPathHelp": "Font ini digunakan oleh beberapa klien untuk merender subtitle. Silakan merujuk ke dokumentasi untuk informasi lebih lanjut.",
|
||||
"LabelFallbackFontPath": "Jalur folder font cadangan",
|
||||
"HeaderSelectFallbackFontPathHelp": "Telusuri atau masukkan jalur folder font fallback yang akan digunakan untuk merender subtitle ASS/SSA.",
|
||||
"HeaderSelectFallbackFontPath": "Pilih Jalur Folder Font Fallback",
|
||||
"Yesterday": "Kemarin",
|
||||
"Yes": "Ya",
|
||||
"Yadif": "YADIF",
|
||||
"Yadif": "Yet Another DeInterlacing Filter",
|
||||
"XmlTvSportsCategoriesHelp": "Program dengan kategori ini akan ditampilkan sebagai program olahraga. Pisahkan beberapa dengan '|'.",
|
||||
"XmlTvNewsCategoriesHelp": "Program dengan kategori ini akan ditampilkan sebagai program berita. Pisahkan beberapa dengan '|'.",
|
||||
"XmlTvKidsCategoriesHelp": "Program dengan kategori ini akan ditampilkan sebagai program untuk anak-anak. Pisahkan beberapa dengan '|'.",
|
||||
|
@ -1386,7 +1386,7 @@
|
|||
"QuickConnectInvalidCode": "Kode Quick Connect tidak valid",
|
||||
"QuickConnectDescription": "Untuk masuk dengan Quick Connect, pilih tombol 'Quick Connect' pada perangkat yang Anda gunakan untuk masuk dan masukkan kode yang ditampilkan di bawah ini.",
|
||||
"QuickConnectDeactivated": "Quick Connect dinonaktifkan sebelum permintaan login dapat disetujui",
|
||||
"QuickConnectAuthorizeSuccess": "Permintaan diotorisasi",
|
||||
"QuickConnectAuthorizeSuccess": "Anda telah berhasil mengautentikasi perangkat Anda!",
|
||||
"QuickConnectAuthorizeFail": "Kode Quick Connect tidak diketahui",
|
||||
"QuickConnectAuthorizeCode": "Masukkan kode {0} untuk login",
|
||||
"QuickConnectActivationSuccessful": "Berhasil diaktifkan",
|
||||
|
@ -1648,7 +1648,7 @@
|
|||
"LabelSyncPlaySettingsMaxDelaySpeedToSyncHelp": "Penundaan pemutaran maksimum (dalam ms) setelah itu SkipToSync digunakan sebagai ganti SpeedToSync.",
|
||||
"LabelSyncPlaySettingsSyncCorrectionHelp": "Aktifkan sinkronisasi pemutaran aktif dengan mempercepat media atau dengan mencari posisi yang diperkirakan. Nonaktifkan ini jika terjadi kegagapan yang parah.",
|
||||
"LabelSyncPlaySettingsSyncCorrection": "Koreksi Sinkronisasi",
|
||||
"EnableEnhancedNvdecDecoderHelp": "Ujicoba implementasi NVDEC, jangan aktifkan opsi ini kecuali mengalami masalah sewaktu dekoding.",
|
||||
"EnableEnhancedNvdecDecoderHelp": "Implementasi NVDEC yang ditingkatkan, nonaktifkan opsi ini untuk menggunakan CUVID jika Anda mengalami kesalahan decoding.",
|
||||
"MediaInfoBlPresentFlag": "Bendera preset DV bl",
|
||||
"MediaInfoElPresentFlag": "Bendera prasetel DV el",
|
||||
"MediaInfoRpuPresentFlag": "Bendera preset DV rpu",
|
||||
|
@ -1660,10 +1660,10 @@
|
|||
"MediaInfoVideoRangeType": "Jenis rentang video",
|
||||
"LabelVideoRangeType": "Jenis rentang video",
|
||||
"VideoRangeTypeNotSupported": "Jenis jangkauan video tidak didukung",
|
||||
"LabelVppTonemappingContrastHelp": "Terapkan penguatan kontras dalam pemetaan nada VPP. Nilai yang direkomendasikan dan default adalah 1.2 dan 1.",
|
||||
"LabelVppTonemappingContrastHelp": "Terapkan penguatan kontras dalam pemetaan nada VPP. Nilai yang direkomendasikan dan default adalah 1.",
|
||||
"LabelVppTonemappingContrast": "Penguatan kontras pemetaan VPP Tone",
|
||||
"LabelVppTonemappingBrightness": "Penguatan kecerahan pemetaan VPP Tone",
|
||||
"LabelVppTonemappingBrightnessHelp": "Terapkan penguatan kecerahan dalam pemetaan nada VPP. Nilai yang disarankan dan nilai default adalah 0.",
|
||||
"LabelVppTonemappingBrightnessHelp": "Terapkan peningkatan kecerahan dalam pemetaan nada VPP. Nilai yang direkomendasikan dan default adalah 16 dan 0.",
|
||||
"EnableSplashScreen": "Aktifkan layar pembuka",
|
||||
"MediaInfoDvBlSignalCompatibilityId": "ID kompatibilitas sinyal DV bl",
|
||||
"ScreenResolution": "Resolusi Layar",
|
||||
|
@ -1685,7 +1685,7 @@
|
|||
"AllowSubtitleManagement": "Izinkan user untuk mengubah tarakir",
|
||||
"AllowSegmentDeletionHelp": "Hapus bagian lama setelah terunduh oleh pengguna. Fitur ini akan mencegah penyimpanan file teralihsandikan ke dalam penyimpanan. Matikan fitur ini jika terjadi masalah dalam pemutaran.",
|
||||
"AllowContentWithTagsHelp": "Hanya tampilkan media dengan setidaknya satu tag ditentukan.",
|
||||
"AirPlay": "AirPlay",
|
||||
"AirPlay": "Airplay",
|
||||
"HeaderDeleteSeries": "Hapus Serial",
|
||||
"LabelDate": "Tanggal",
|
||||
"LabelDeveloper": "Pengembang",
|
||||
|
@ -1858,5 +1858,34 @@
|
|||
"AllowAv1Encoding": "Izinkan pengkodean dalam format AV1",
|
||||
"MachineTranslated": "Diterjemahkan oleh mesin",
|
||||
"LabelImageInterval": "Interval Gambar",
|
||||
"LimitSupportedVideoResolution": "Batasi resolusi video maksimum yang didukung"
|
||||
"LimitSupportedVideoResolution": "Batasi resolusi video maksimum yang didukung",
|
||||
"Letterer": "Penulis surat",
|
||||
"HearingImpairedShort": "HI/SDH",
|
||||
"ForeignPartsOnly": "Paksa/Bagian Asing saja",
|
||||
"LabelScanBehavior": "Perilaku Pemindaian",
|
||||
"ChannelResolutionSD": "SD",
|
||||
"ChannelResolutionSDPAL": "SD (PAL)",
|
||||
"ChannelResolutionHD": "HD",
|
||||
"ChannelResolutionFullHD": "Full HD",
|
||||
"ChannelResolutionUHD4K": "UHD (4K)",
|
||||
"Inker": "Tinta",
|
||||
"HeaderDummyChapter": "Bab Gambar",
|
||||
"Colorist": "Warna",
|
||||
"CoverArtist": "Artis Sampul",
|
||||
"Penciller": "Pensil",
|
||||
"LabelWebVersion": "Versi Web",
|
||||
"LabelTrackGain": "Lacak Trek",
|
||||
"LabelTileHeightHelp": "Jumlah maksimum gambar per kotak dalam arah Y.",
|
||||
"LabelTileWidth": "Lebar Kotak",
|
||||
"LabelJpegQuality": "Kualitas JPEG",
|
||||
"LabelQscale": "Skala Q",
|
||||
"LabelQscaleHelp": "Skala kualitas gambar yang dihasilkan oleh ffmpeg, dengan 2 sebagai kualitas tertinggi dan 31 sebagai kualitas terendah.",
|
||||
"LabelJpegQualityHelp": "Kualitas kompresi JPEG untuk gambar tipuan.",
|
||||
"LabelTrickplayThreads": "Utas FFmpeg",
|
||||
"LabelTileHeight": "Tinggi Kotak",
|
||||
"LabelTrickplayThreadsHelp": "Jumlah thread yang akan diteruskan ke argumen '-threads' di ffmpeg.",
|
||||
"OptionExtractTrickplayImage": "Aktifkan ekstraksi gambar trickplay",
|
||||
"ExtractTrickplayImagesHelp": "Gambar Trickplay mirip dengan gambar bab, hanya saja gambar tersebut mencakup keseluruhan konten dan digunakan untuk menampilkan pratinjau saat menelusuri video.",
|
||||
"LabelExtractTrickplayDuringLibraryScan": "Ekstrak gambar trickplay selama pemindaian perpustakaan",
|
||||
"LabelExtractTrickplayDuringLibraryScanHelp": "Hasilkan gambar trik saat video diimpor selama pemindaian perpustakaan. Jika tidak, gambar tersebut akan diekstraksi selama tugas terjadwal gambar trickplay. Jika pembuatan diatur ke non-pemblokiran, hal ini tidak akan memengaruhi waktu yang diperlukan untuk menyelesaikan pemindaian perpustakaan."
|
||||
}
|
||||
|
|
|
@ -1893,5 +1893,7 @@
|
|||
"SelectPreferredTranscodeVideoAudioCodecHelp": "Виберіть бажаний аудіокодек для перекодування відеоконтенту. Якщо вибраний кодек не підтримується, сервер використовуватиме наступний найкращий доступний кодек.",
|
||||
"Alternate": "Альтернатива",
|
||||
"Regional": "Регіональне",
|
||||
"AlternateDVD": "Альтернативний DVD"
|
||||
"AlternateDVD": "Альтернативний DVD",
|
||||
"SelectPreferredTranscodeVideoCodecHelp": "Виберіть бажаний відеокодек для перекодування. Якщо вибраний кодек не підтримується, сервер використає наступний найкращий доступний кодек.",
|
||||
"LabelSelectPreferredTranscodeVideoCodec": "Бажаний відеокодек для перекодування"
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue