mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-22 06:25:41 +00:00
feat(settings): admin-gated User Management tab via Navidrome REST API
Adds a dedicated Settings tab for managing Navidrome users (list, create, edit, delete). Only visible to admins — gated by `/auth/login` probe on mount. Uses Navidrome's native /api/user endpoints instead of Subsonic (getUsers.view etc. return only the caller on Navidrome). All HTTP calls go through new Rust commands to bypass WebView CORS. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -467,6 +467,34 @@ export const deTranslation = {
|
||||
testBtn: 'Verbindung testen',
|
||||
testingBtn: 'Teste…',
|
||||
serverCompatible: 'Kompatibel mit: Navidrome · Gonic · Airsonic · Subsonic',
|
||||
userMgmtTitle: 'Benutzerverwaltung',
|
||||
userMgmtDesc: 'Benutzer auf diesem Server verwalten. Erfordert Admin-Rechte.',
|
||||
userMgmtNoAdmin: 'Du brauchst Admin-Rechte, um Benutzer auf diesem Server zu verwalten.',
|
||||
userMgmtLoadError: 'Benutzer konnten nicht geladen werden.',
|
||||
userMgmtEmpty: 'Keine Benutzer gefunden.',
|
||||
userMgmtYouBadge: 'Du',
|
||||
userMgmtAdminBadge: 'Admin',
|
||||
userMgmtAddUser: 'Benutzer hinzufügen',
|
||||
userMgmtAddUserTitle: 'Neuen Benutzer anlegen',
|
||||
userMgmtEditUserTitle: 'Benutzer bearbeiten',
|
||||
userMgmtUsername: 'Benutzername',
|
||||
userMgmtName: 'Anzeigename',
|
||||
userMgmtEmail: 'E-Mail',
|
||||
userMgmtPassword: 'Passwort',
|
||||
userMgmtPasswordEditHint: 'Neues Passwort eingeben, um es zu ändern.',
|
||||
userMgmtRoleAdmin: 'Admin',
|
||||
userMgmtSave: 'Speichern',
|
||||
userMgmtCancel: 'Abbrechen',
|
||||
userMgmtDelete: 'Löschen',
|
||||
userMgmtEdit: 'Bearbeiten',
|
||||
userMgmtConfirmDelete: 'Benutzer „{{username}}" löschen? Das kann nicht rückgängig gemacht werden.',
|
||||
userMgmtCreateError: 'Benutzer konnte nicht angelegt werden.',
|
||||
userMgmtUpdateError: 'Benutzer konnte nicht aktualisiert werden.',
|
||||
userMgmtDeleteError: 'Benutzer konnte nicht gelöscht werden.',
|
||||
userMgmtCreated: 'Benutzer angelegt.',
|
||||
userMgmtUpdated: 'Benutzer aktualisiert.',
|
||||
userMgmtDeleted: 'Benutzer gelöscht.',
|
||||
userMgmtValidationMissing: 'Benutzername, Anzeigename und Passwort sind erforderlich.',
|
||||
audiomuseTitle: 'AudioMuse-AI (Navidrome)',
|
||||
audiomuseDesc:
|
||||
'Aktivieren, wenn dieser Server das <pluginLink>AudioMuse-AI-Navidrome-Plugin</pluginLink> nutzt. Schaltet Instant Mix pro Titel frei und nutzt ähnliche Künstler vom Server statt Last.fm auf Künstlerseiten.',
|
||||
@@ -627,6 +655,7 @@ export const deTranslation = {
|
||||
randomNavSplitDesc: '"Zufallsmix" und "Zufallsalben" als separate Sidebar-Einträge statt als "Mix erstellen"-Hub anzeigen.',
|
||||
tabInput: 'Eingabe',
|
||||
tabServer: 'Server',
|
||||
tabUsers: 'Benutzer',
|
||||
shortcutsReset: 'Auf Standard zurücksetzen',
|
||||
shortcutListening: 'Taste drücken…',
|
||||
shortcutUnbound: '—',
|
||||
|
||||
@@ -469,6 +469,34 @@ export const enTranslation = {
|
||||
testBtn: 'Test Connection',
|
||||
testingBtn: 'Testing…',
|
||||
serverCompatible: 'Compatible with: Navidrome · Gonic · Airsonic · Subsonic',
|
||||
userMgmtTitle: 'User Management',
|
||||
userMgmtDesc: 'Manage users on this server. Requires admin privileges.',
|
||||
userMgmtNoAdmin: 'You need admin privileges to manage users on this server.',
|
||||
userMgmtLoadError: 'Failed to load users.',
|
||||
userMgmtEmpty: 'No users found.',
|
||||
userMgmtYouBadge: 'You',
|
||||
userMgmtAdminBadge: 'Admin',
|
||||
userMgmtAddUser: 'Add User',
|
||||
userMgmtAddUserTitle: 'Add New User',
|
||||
userMgmtEditUserTitle: 'Edit User',
|
||||
userMgmtUsername: 'Username',
|
||||
userMgmtName: 'Display Name',
|
||||
userMgmtEmail: 'Email',
|
||||
userMgmtPassword: 'Password',
|
||||
userMgmtPasswordEditHint: 'Enter a new password to update it.',
|
||||
userMgmtRoleAdmin: 'Admin',
|
||||
userMgmtSave: 'Save',
|
||||
userMgmtCancel: 'Cancel',
|
||||
userMgmtDelete: 'Delete',
|
||||
userMgmtEdit: 'Edit',
|
||||
userMgmtConfirmDelete: 'Delete user "{{username}}"? This cannot be undone.',
|
||||
userMgmtCreateError: 'Failed to create user.',
|
||||
userMgmtUpdateError: 'Failed to update user.',
|
||||
userMgmtDeleteError: 'Failed to delete user.',
|
||||
userMgmtCreated: 'User created.',
|
||||
userMgmtUpdated: 'User updated.',
|
||||
userMgmtDeleted: 'User deleted.',
|
||||
userMgmtValidationMissing: 'Username, display name and password are required.',
|
||||
audiomuseTitle: 'AudioMuse-AI (Navidrome)',
|
||||
audiomuseDesc:
|
||||
'Turn on if this server has the <pluginLink>AudioMuse-AI Navidrome plugin</pluginLink> configured. Enables Instant Mix from tracks and uses server-side similar artists instead of Last.fm on artist pages.',
|
||||
@@ -629,6 +657,7 @@ export const enTranslation = {
|
||||
randomNavSplitDesc: 'Show "Random Mix" and "Random Albums" as separate sidebar entries instead of the "Build a Mix" hub.',
|
||||
tabInput: 'Input',
|
||||
tabServer: 'Server',
|
||||
tabUsers: 'Users',
|
||||
tabSystem: 'System',
|
||||
tabGeneral: 'General',
|
||||
ratingsSectionTitle: 'Ratings',
|
||||
|
||||
@@ -460,6 +460,34 @@ export const esTranslation = {
|
||||
testBtn: 'Probar Conexión',
|
||||
testingBtn: 'Probando…',
|
||||
serverCompatible: 'Compatible con: Navidrome · Gonic · Airsonic · Subsonic',
|
||||
userMgmtTitle: 'Gestión de usuarios',
|
||||
userMgmtDesc: 'Administra los usuarios de este servidor. Requiere privilegios de administrador.',
|
||||
userMgmtNoAdmin: 'Necesitas privilegios de administrador para gestionar usuarios en este servidor.',
|
||||
userMgmtLoadError: 'No se pudieron cargar los usuarios.',
|
||||
userMgmtEmpty: 'No se encontraron usuarios.',
|
||||
userMgmtYouBadge: 'Tú',
|
||||
userMgmtAdminBadge: 'Admin',
|
||||
userMgmtAddUser: 'Añadir usuario',
|
||||
userMgmtAddUserTitle: 'Nuevo usuario',
|
||||
userMgmtEditUserTitle: 'Editar usuario',
|
||||
userMgmtUsername: 'Nombre de usuario',
|
||||
userMgmtName: 'Nombre visible',
|
||||
userMgmtEmail: 'Correo electrónico',
|
||||
userMgmtPassword: 'Contraseña',
|
||||
userMgmtPasswordEditHint: 'Introduce una nueva contraseña para actualizarla.',
|
||||
userMgmtRoleAdmin: 'Admin',
|
||||
userMgmtSave: 'Guardar',
|
||||
userMgmtCancel: 'Cancelar',
|
||||
userMgmtDelete: 'Eliminar',
|
||||
userMgmtEdit: 'Editar',
|
||||
userMgmtConfirmDelete: '¿Eliminar el usuario «{{username}}»? Esta acción no se puede deshacer.',
|
||||
userMgmtCreateError: 'No se pudo crear el usuario.',
|
||||
userMgmtUpdateError: 'No se pudo actualizar el usuario.',
|
||||
userMgmtDeleteError: 'No se pudo eliminar el usuario.',
|
||||
userMgmtCreated: 'Usuario creado.',
|
||||
userMgmtUpdated: 'Usuario actualizado.',
|
||||
userMgmtDeleted: 'Usuario eliminado.',
|
||||
userMgmtValidationMissing: 'Se requieren nombre de usuario, nombre visible y contraseña.',
|
||||
audiomuseTitle: 'AudioMuse-AI (Navidrome)',
|
||||
audiomuseDesc:
|
||||
'Activa si este servidor tiene el plugin <pluginLink>AudioMuse-AI Navidrome</pluginLink> configurado. Habilita Mezcla Instantánea desde pistas y usa artistas similares del servidor en lugar de Last.fm en páginas de artistas.',
|
||||
@@ -620,6 +648,7 @@ export const esTranslation = {
|
||||
randomNavSplitDesc: 'Mostrar "Mezcla Aleatoria" y "Álbumes Aleatorios" como entradas separadas en la barra lateral en lugar del hub "Crear Mezcla".',
|
||||
tabInput: 'Entrada',
|
||||
tabServer: 'Servidor',
|
||||
tabUsers: 'Usuarios',
|
||||
tabSystem: 'Sistema',
|
||||
tabGeneral: 'General',
|
||||
ratingsSectionTitle: 'Calificaciones',
|
||||
|
||||
@@ -457,6 +457,34 @@ export const frTranslation = {
|
||||
testBtn: 'Tester la connexion',
|
||||
testingBtn: 'Test en cours…',
|
||||
serverCompatible: 'Compatible avec : Navidrome · Gonic · Airsonic · Subsonic',
|
||||
userMgmtTitle: 'Gestion des utilisateurs',
|
||||
userMgmtDesc: 'Gérer les utilisateurs sur ce serveur. Nécessite des privilèges administrateur.',
|
||||
userMgmtNoAdmin: 'Vous devez être administrateur pour gérer les utilisateurs sur ce serveur.',
|
||||
userMgmtLoadError: 'Impossible de charger les utilisateurs.',
|
||||
userMgmtEmpty: 'Aucun utilisateur trouvé.',
|
||||
userMgmtYouBadge: 'Vous',
|
||||
userMgmtAdminBadge: 'Admin',
|
||||
userMgmtAddUser: 'Ajouter un utilisateur',
|
||||
userMgmtAddUserTitle: 'Nouvel utilisateur',
|
||||
userMgmtEditUserTitle: 'Modifier l’utilisateur',
|
||||
userMgmtUsername: 'Nom d’utilisateur',
|
||||
userMgmtName: 'Nom affiché',
|
||||
userMgmtEmail: 'E-mail',
|
||||
userMgmtPassword: 'Mot de passe',
|
||||
userMgmtPasswordEditHint: 'Saisir un nouveau mot de passe pour le modifier.',
|
||||
userMgmtRoleAdmin: 'Admin',
|
||||
userMgmtSave: 'Enregistrer',
|
||||
userMgmtCancel: 'Annuler',
|
||||
userMgmtDelete: 'Supprimer',
|
||||
userMgmtEdit: 'Modifier',
|
||||
userMgmtConfirmDelete: 'Supprimer l’utilisateur « {{username}} » ? Action irréversible.',
|
||||
userMgmtCreateError: 'Impossible de créer l’utilisateur.',
|
||||
userMgmtUpdateError: 'Impossible de mettre à jour l’utilisateur.',
|
||||
userMgmtDeleteError: 'Impossible de supprimer l’utilisateur.',
|
||||
userMgmtCreated: 'Utilisateur créé.',
|
||||
userMgmtUpdated: 'Utilisateur mis à jour.',
|
||||
userMgmtDeleted: 'Utilisateur supprimé.',
|
||||
userMgmtValidationMissing: 'Nom d’utilisateur, nom affiché et mot de passe sont requis.',
|
||||
audiomuseTitle: 'AudioMuse-AI (Navidrome)',
|
||||
audiomuseDesc:
|
||||
'Activez si ce serveur utilise le <pluginLink>plugin Navidrome AudioMuse-AI</pluginLink>. Active le mix instantané depuis un morceau et affiche les artistes similaires côté serveur au lieu de Last.fm sur les pages artiste.',
|
||||
@@ -615,6 +643,7 @@ export const frTranslation = {
|
||||
randomNavSplitDesc: 'Afficher "Mix Aléatoire" et "Albums Aléatoires" comme entrées séparées dans la barre latérale plutôt que le hub "Créer un Mix".',
|
||||
tabInput: 'Entrée',
|
||||
tabServer: 'Serveur',
|
||||
tabUsers: 'Utilisateurs',
|
||||
shortcutsReset: 'Réinitialiser',
|
||||
shortcutListening: 'Appuyez sur une touche…',
|
||||
shortcutUnbound: '—',
|
||||
|
||||
@@ -457,6 +457,34 @@ export const nbTranslation = {
|
||||
testBtn: 'Test tilkobling',
|
||||
testingBtn: 'Tester…',
|
||||
serverCompatible: 'Kompatibel med: Navidrome · Gonic · Airsonic · Subsonic',
|
||||
userMgmtTitle: 'Brukeradministrasjon',
|
||||
userMgmtDesc: 'Administrer brukere på denne serveren. Krever admin-rettigheter.',
|
||||
userMgmtNoAdmin: 'Du trenger admin-rettigheter for å administrere brukere på denne serveren.',
|
||||
userMgmtLoadError: 'Kunne ikke laste brukere.',
|
||||
userMgmtEmpty: 'Ingen brukere funnet.',
|
||||
userMgmtYouBadge: 'Deg',
|
||||
userMgmtAdminBadge: 'Admin',
|
||||
userMgmtAddUser: 'Legg til bruker',
|
||||
userMgmtAddUserTitle: 'Ny bruker',
|
||||
userMgmtEditUserTitle: 'Rediger bruker',
|
||||
userMgmtUsername: 'Brukernavn',
|
||||
userMgmtName: 'Visningsnavn',
|
||||
userMgmtEmail: 'E-post',
|
||||
userMgmtPassword: 'Passord',
|
||||
userMgmtPasswordEditHint: 'Skriv inn et nytt passord for å oppdatere det.',
|
||||
userMgmtRoleAdmin: 'Admin',
|
||||
userMgmtSave: 'Lagre',
|
||||
userMgmtCancel: 'Avbryt',
|
||||
userMgmtDelete: 'Slett',
|
||||
userMgmtEdit: 'Rediger',
|
||||
userMgmtConfirmDelete: 'Slett brukeren «{{username}}»? Dette kan ikke angres.',
|
||||
userMgmtCreateError: 'Kunne ikke opprette bruker.',
|
||||
userMgmtUpdateError: 'Kunne ikke oppdatere bruker.',
|
||||
userMgmtDeleteError: 'Kunne ikke slette bruker.',
|
||||
userMgmtCreated: 'Bruker opprettet.',
|
||||
userMgmtUpdated: 'Bruker oppdatert.',
|
||||
userMgmtDeleted: 'Bruker slettet.',
|
||||
userMgmtValidationMissing: 'Brukernavn, visningsnavn og passord er påkrevd.',
|
||||
audiomuseTitle: 'AudioMuse-AI (Navidrome)',
|
||||
audiomuseDesc:
|
||||
'Slå på hvis denne serveren bruker <pluginLink>AudioMuse-AI Navidrome-plugin</pluginLink>. Aktiverer Instant Mix fra spor og henter lignende artister fra serveren i stedet for Last.fm på artistsider.',
|
||||
@@ -614,6 +642,7 @@ export const nbTranslation = {
|
||||
randomNavSplitDesc: 'Vis "Tilfeldig miks" og "Tilfeldige album" som separate sidefeltsoppføringer i stedet for "Lag en miks"-huben.',
|
||||
tabShortcuts: 'Snarveier',
|
||||
tabServer: 'Tjener',
|
||||
tabUsers: 'Brukere',
|
||||
tabSystem: 'System',
|
||||
tabGeneral: 'Generelt',
|
||||
ratingsSectionTitle: 'Vurderinger',
|
||||
|
||||
@@ -456,6 +456,34 @@ export const nlTranslation = {
|
||||
testBtn: 'Verbinding testen',
|
||||
testingBtn: 'Testen…',
|
||||
serverCompatible: 'Compatibel met: Navidrome · Gonic · Airsonic · Subsonic',
|
||||
userMgmtTitle: 'Gebruikersbeheer',
|
||||
userMgmtDesc: 'Beheer gebruikers op deze server. Vereist admin-rechten.',
|
||||
userMgmtNoAdmin: 'Je hebt admin-rechten nodig om gebruikers op deze server te beheren.',
|
||||
userMgmtLoadError: 'Kon gebruikers niet laden.',
|
||||
userMgmtEmpty: 'Geen gebruikers gevonden.',
|
||||
userMgmtYouBadge: 'Jij',
|
||||
userMgmtAdminBadge: 'Admin',
|
||||
userMgmtAddUser: 'Gebruiker toevoegen',
|
||||
userMgmtAddUserTitle: 'Nieuwe gebruiker',
|
||||
userMgmtEditUserTitle: 'Gebruiker bewerken',
|
||||
userMgmtUsername: 'Gebruikersnaam',
|
||||
userMgmtName: 'Weergavenaam',
|
||||
userMgmtEmail: 'E-mail',
|
||||
userMgmtPassword: 'Wachtwoord',
|
||||
userMgmtPasswordEditHint: 'Voer een nieuw wachtwoord in om het bij te werken.',
|
||||
userMgmtRoleAdmin: 'Admin',
|
||||
userMgmtSave: 'Opslaan',
|
||||
userMgmtCancel: 'Annuleren',
|
||||
userMgmtDelete: 'Verwijderen',
|
||||
userMgmtEdit: 'Bewerken',
|
||||
userMgmtConfirmDelete: 'Gebruiker "{{username}}" verwijderen? Dit kan niet ongedaan worden gemaakt.',
|
||||
userMgmtCreateError: 'Aanmaken van gebruiker mislukt.',
|
||||
userMgmtUpdateError: 'Bijwerken van gebruiker mislukt.',
|
||||
userMgmtDeleteError: 'Verwijderen van gebruiker mislukt.',
|
||||
userMgmtCreated: 'Gebruiker aangemaakt.',
|
||||
userMgmtUpdated: 'Gebruiker bijgewerkt.',
|
||||
userMgmtDeleted: 'Gebruiker verwijderd.',
|
||||
userMgmtValidationMissing: 'Gebruikersnaam, weergavenaam en wachtwoord zijn vereist.',
|
||||
audiomuseTitle: 'AudioMuse-AI (Navidrome)',
|
||||
audiomuseDesc:
|
||||
'Zet aan als deze server de <pluginLink>AudioMuse-AI Navidrome-plugin</pluginLink> gebruikt. Schakelt Instant Mix per nummer in en toont vergelijkbare artiesten van de server i.p.v. Last.fm op artiestpagina’s.',
|
||||
@@ -614,6 +642,7 @@ export const nlTranslation = {
|
||||
randomNavSplitDesc: 'Toon "Willekeurige mix" en "Willekeurige albums" als afzonderlijke zijbalkitems in plaats van de "Mix samenstellen"-hub.',
|
||||
tabInput: 'Invoer',
|
||||
tabServer: 'Server',
|
||||
tabUsers: 'Gebruikers',
|
||||
shortcutsReset: 'Standaard herstellen',
|
||||
shortcutListening: 'Druk op een toets…',
|
||||
shortcutUnbound: '—',
|
||||
|
||||
@@ -474,6 +474,34 @@ export const ruTranslation = {
|
||||
testBtn: 'Проверить',
|
||||
testingBtn: 'Проверка…',
|
||||
serverCompatible: 'Совместимость: Navidrome · Gonic · Airsonic · Subsonic',
|
||||
userMgmtTitle: 'Управление пользователями',
|
||||
userMgmtDesc: 'Управляйте пользователями этого сервера. Требуются права администратора.',
|
||||
userMgmtNoAdmin: 'Для управления пользователями на этом сервере нужны права администратора.',
|
||||
userMgmtLoadError: 'Не удалось загрузить пользователей.',
|
||||
userMgmtEmpty: 'Пользователи не найдены.',
|
||||
userMgmtYouBadge: 'Вы',
|
||||
userMgmtAdminBadge: 'Админ',
|
||||
userMgmtAddUser: 'Добавить пользователя',
|
||||
userMgmtAddUserTitle: 'Новый пользователь',
|
||||
userMgmtEditUserTitle: 'Изменить пользователя',
|
||||
userMgmtUsername: 'Имя пользователя',
|
||||
userMgmtName: 'Отображаемое имя',
|
||||
userMgmtEmail: 'E-mail',
|
||||
userMgmtPassword: 'Пароль',
|
||||
userMgmtPasswordEditHint: 'Введите новый пароль, чтобы изменить его.',
|
||||
userMgmtRoleAdmin: 'Админ',
|
||||
userMgmtSave: 'Сохранить',
|
||||
userMgmtCancel: 'Отмена',
|
||||
userMgmtDelete: 'Удалить',
|
||||
userMgmtEdit: 'Изменить',
|
||||
userMgmtConfirmDelete: 'Удалить пользователя «{{username}}»? Действие нельзя отменить.',
|
||||
userMgmtCreateError: 'Не удалось создать пользователя.',
|
||||
userMgmtUpdateError: 'Не удалось обновить пользователя.',
|
||||
userMgmtDeleteError: 'Не удалось удалить пользователя.',
|
||||
userMgmtCreated: 'Пользователь создан.',
|
||||
userMgmtUpdated: 'Пользователь обновлён.',
|
||||
userMgmtDeleted: 'Пользователь удалён.',
|
||||
userMgmtValidationMissing: 'Требуются имя пользователя, отображаемое имя и пароль.',
|
||||
audiomuseTitle: 'AudioMuse-AI (Navidrome)',
|
||||
audiomuseDesc:
|
||||
'Включите, если на этом сервере настроен <pluginLink>плагин AudioMuse-AI для Navidrome</pluginLink>. Появится Instant Mix для треков, а на странице исполнителя похожие будут браться с сервера вместо Last.fm.',
|
||||
@@ -642,6 +670,7 @@ export const ruTranslation = {
|
||||
randomNavSplitDesc: 'Показывать «Случайный микс» и «Случайные альбомы» как отдельные пункты боковой панели вместо хаба «Собрать микс».',
|
||||
tabInput: 'Ввод',
|
||||
tabServer: 'Сервер',
|
||||
tabUsers: 'Пользователи',
|
||||
tabSystem: 'Система',
|
||||
tabGeneral: 'Общие',
|
||||
ratingsSectionTitle: 'Рейтинги',
|
||||
|
||||
@@ -452,6 +452,34 @@ export const zhTranslation = {
|
||||
testBtn: '测试连接',
|
||||
testingBtn: '正在测试…',
|
||||
serverCompatible: '兼容:Navidrome · Gonic · Airsonic · Subsonic',
|
||||
userMgmtTitle: '用户管理',
|
||||
userMgmtDesc: '管理此服务器上的用户。需要管理员权限。',
|
||||
userMgmtNoAdmin: '需要管理员权限才能管理此服务器上的用户。',
|
||||
userMgmtLoadError: '加载用户失败。',
|
||||
userMgmtEmpty: '未找到用户。',
|
||||
userMgmtYouBadge: '您',
|
||||
userMgmtAdminBadge: '管理员',
|
||||
userMgmtAddUser: '添加用户',
|
||||
userMgmtAddUserTitle: '新建用户',
|
||||
userMgmtEditUserTitle: '编辑用户',
|
||||
userMgmtUsername: '用户名',
|
||||
userMgmtName: '显示名称',
|
||||
userMgmtEmail: '电子邮箱',
|
||||
userMgmtPassword: '密码',
|
||||
userMgmtPasswordEditHint: '输入新密码以更新。',
|
||||
userMgmtRoleAdmin: '管理员',
|
||||
userMgmtSave: '保存',
|
||||
userMgmtCancel: '取消',
|
||||
userMgmtDelete: '删除',
|
||||
userMgmtEdit: '编辑',
|
||||
userMgmtConfirmDelete: '删除用户 "{{username}}"?此操作无法撤销。',
|
||||
userMgmtCreateError: '创建用户失败。',
|
||||
userMgmtUpdateError: '更新用户失败。',
|
||||
userMgmtDeleteError: '删除用户失败。',
|
||||
userMgmtCreated: '用户已创建。',
|
||||
userMgmtUpdated: '用户已更新。',
|
||||
userMgmtDeleted: '用户已删除。',
|
||||
userMgmtValidationMissing: '用户名、显示名称和密码均为必填项。',
|
||||
audiomuseTitle: 'AudioMuse-AI(Navidrome)',
|
||||
audiomuseDesc:
|
||||
'若此服务器已配置 <pluginLink>AudioMuse-AI Navidrome 插件</pluginLink>请开启。可从曲目启动即时混音,并在艺人页使用服务器返回的相似艺人,而非 Last.fm。',
|
||||
@@ -610,6 +638,7 @@ export const zhTranslation = {
|
||||
randomNavSplitDesc: '在侧边栏中将"随机混音"和"随机专辑"显示为独立条目,而非"创建混音"合并入口。',
|
||||
tabInput: '输入',
|
||||
tabServer: '服务器',
|
||||
tabUsers: '用户',
|
||||
tabSystem: '系统',
|
||||
tabGeneral: '通用',
|
||||
ratingsSectionTitle: '评分',
|
||||
|
||||
Reference in New Issue
Block a user