mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-22 06:25:41 +00:00
feat(users): show last-access timestamp per user
Maps Navidrome's lastAccessAt onto NdUser and renders it in the User Management row as a localized relative time (Intl.RelativeTimeFormat with the current i18n language). Tooltip carries the absolute timestamp. Navidrome returns 0001-01-01 for never-accessed users — detected and shown as the localized "Never" label. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -489,6 +489,7 @@ export const deTranslation = {
|
||||
userMgmtLibrariesValidation: 'Mindestens eine Bibliothek auswählen.',
|
||||
userMgmtLibrariesUpdateError: 'Benutzer gespeichert, aber Bibliothekszuweisung fehlgeschlagen',
|
||||
userMgmtNoLibraries: 'Keine Bibliotheken zugewiesen',
|
||||
userMgmtNeverSeen: 'Nie',
|
||||
userMgmtSave: 'Speichern',
|
||||
userMgmtCancel: 'Abbrechen',
|
||||
userMgmtDelete: 'Löschen',
|
||||
|
||||
@@ -491,6 +491,7 @@ export const enTranslation = {
|
||||
userMgmtLibrariesValidation: 'Select at least one library.',
|
||||
userMgmtLibrariesUpdateError: 'User saved, but library assignment failed',
|
||||
userMgmtNoLibraries: 'No libraries assigned',
|
||||
userMgmtNeverSeen: 'Never',
|
||||
userMgmtSave: 'Save',
|
||||
userMgmtCancel: 'Cancel',
|
||||
userMgmtDelete: 'Delete',
|
||||
|
||||
@@ -482,6 +482,7 @@ export const esTranslation = {
|
||||
userMgmtLibrariesValidation: 'Selecciona al menos una biblioteca.',
|
||||
userMgmtLibrariesUpdateError: 'Usuario guardado, pero la asignación de bibliotecas falló',
|
||||
userMgmtNoLibraries: 'Sin bibliotecas asignadas',
|
||||
userMgmtNeverSeen: 'Nunca',
|
||||
userMgmtSave: 'Guardar',
|
||||
userMgmtCancel: 'Cancelar',
|
||||
userMgmtDelete: 'Eliminar',
|
||||
|
||||
@@ -479,6 +479,7 @@ export const frTranslation = {
|
||||
userMgmtLibrariesValidation: 'Sélectionnez au moins une bibliothèque.',
|
||||
userMgmtLibrariesUpdateError: 'Utilisateur enregistré, mais l\u2019attribution des bibliothèques a échoué',
|
||||
userMgmtNoLibraries: 'Aucune bibliothèque attribuée',
|
||||
userMgmtNeverSeen: 'Jamais',
|
||||
userMgmtSave: 'Enregistrer',
|
||||
userMgmtCancel: 'Annuler',
|
||||
userMgmtDelete: 'Supprimer',
|
||||
|
||||
@@ -479,6 +479,7 @@ export const nbTranslation = {
|
||||
userMgmtLibrariesValidation: 'Velg minst ett bibliotek.',
|
||||
userMgmtLibrariesUpdateError: 'Brukeren ble lagret, men bibliotekstilordning mislyktes',
|
||||
userMgmtNoLibraries: 'Ingen biblioteker tilordnet',
|
||||
userMgmtNeverSeen: 'Aldri',
|
||||
userMgmtSave: 'Lagre',
|
||||
userMgmtCancel: 'Avbryt',
|
||||
userMgmtDelete: 'Slett',
|
||||
|
||||
@@ -478,6 +478,7 @@ export const nlTranslation = {
|
||||
userMgmtLibrariesValidation: 'Selecteer ten minste één bibliotheek.',
|
||||
userMgmtLibrariesUpdateError: 'Gebruiker opgeslagen, maar bibliotheektoewijzing mislukt',
|
||||
userMgmtNoLibraries: 'Geen bibliotheken toegewezen',
|
||||
userMgmtNeverSeen: 'Nooit',
|
||||
userMgmtSave: 'Opslaan',
|
||||
userMgmtCancel: 'Annuleren',
|
||||
userMgmtDelete: 'Verwijderen',
|
||||
|
||||
@@ -496,6 +496,7 @@ export const ruTranslation = {
|
||||
userMgmtLibrariesValidation: 'Выберите хотя бы одну библиотеку.',
|
||||
userMgmtLibrariesUpdateError: 'Пользователь сохранён, но не удалось назначить библиотеки',
|
||||
userMgmtNoLibraries: 'Библиотеки не назначены',
|
||||
userMgmtNeverSeen: 'Никогда',
|
||||
userMgmtSave: 'Сохранить',
|
||||
userMgmtCancel: 'Отмена',
|
||||
userMgmtDelete: 'Удалить',
|
||||
|
||||
@@ -474,6 +474,7 @@ export const zhTranslation = {
|
||||
userMgmtLibrariesValidation: '请至少选择一个音乐库。',
|
||||
userMgmtLibrariesUpdateError: '用户已保存,但音乐库分配失败',
|
||||
userMgmtNoLibraries: '未分配音乐库',
|
||||
userMgmtNeverSeen: '从未',
|
||||
userMgmtSave: '保存',
|
||||
userMgmtCancel: '取消',
|
||||
userMgmtDelete: '删除',
|
||||
|
||||
Reference in New Issue
Block a user