mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-05-31 21:08:27 +01:00
Reformat JSON using JQ with sorted keys
cat "$f" | jq -S | sponge "$f"
This commit is contained in:
@@ -1,100 +1,100 @@
|
||||
{
|
||||
"HeaderCameraUploads": "\u0622\u067e\u0644\u0648\u062f\u0647\u0627\u06cc \u062f\u0648\u0631\u0628\u06cc\u0646",
|
||||
"ValueHasBeenAddedToLibrary": "{0} has been added to your media library",
|
||||
"NameInstallFailed": "{0} installation failed",
|
||||
"CameraImageUploadedFrom": "A new camera image has been uploaded from {0}",
|
||||
"ServerNameNeedsToBeRestarted": "{0} needs to be restarted",
|
||||
"NewVersionIsAvailable": "A new version of Jellyfin Server is available for download.",
|
||||
"MessageApplicationUpdatedTo": "Jellyfin Server has been updated to {0}",
|
||||
"SubtitleDownloadFailureFromForItem": "Subtitles failed to download from {0} for {1}",
|
||||
"Latest": "\u0622\u062e\u0631\u06cc\u0646",
|
||||
"ValueSpecialEpisodeName": "\u0648\u06cc\u0698\u0647- {0}",
|
||||
"Inherit": "\u0628\u0647 \u0627\u0631\u062b \u0628\u0631\u062f\u0647",
|
||||
"Books": "\u06a9\u062a\u0627\u0628 \u0647\u0627",
|
||||
"Music": "\u0645\u0648\u0633\u06cc\u0642\u06cc",
|
||||
"Games": "\u0628\u0627\u0632\u06cc \u0647\u0627",
|
||||
"Photos": "\u0639\u06a9\u0633 \u0647\u0627",
|
||||
"MixedContent": "\u0645\u062d\u062a\u0648\u0627\u06cc \u062f\u0631\u0647\u0645",
|
||||
"MusicVideos": "\u0645\u0648\u0632\u06cc\u06a9 \u0648\u06cc\u062f\u06cc\u0648\u0647\u0627",
|
||||
"HomeVideos": "\u0648\u06cc\u062f\u06cc\u0648\u0647\u0627\u06cc \u062e\u0627\u0646\u06af\u06cc",
|
||||
"Playlists": "\u0644\u06cc\u0633\u062a \u0647\u0627\u06cc \u067e\u062e\u0634",
|
||||
"HeaderRecordingGroups": "\u06af\u0631\u0648\u0647 \u0647\u0627\u06cc \u0636\u0628\u0637",
|
||||
"HeaderContinueWatching": "\u0627\u062f\u0627\u0645\u0647 \u062a\u0645\u0627\u0634\u0627",
|
||||
"HeaderFavoriteArtists": "\u0647\u0646\u0631\u0645\u0646\u062f\u0627\u0646 \u0645\u0648\u0631\u062f \u0639\u0644\u0627\u0642\u0647",
|
||||
"HeaderFavoriteSongs": "\u0622\u0647\u0646\u06af \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0639\u0644\u0627\u0642\u0647",
|
||||
"HeaderAlbumArtists": "\u0647\u0646\u0631\u0645\u0646\u062f\u0627\u0646 \u0622\u0644\u0628\u0648\u0645",
|
||||
"HeaderFavoriteAlbums": "\u0622\u0644\u0628\u0648\u0645 \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0639\u0644\u0627\u0642\u0647",
|
||||
"HeaderFavoriteEpisodes": "\u0642\u0633\u0645\u062a \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0639\u0644\u0627\u0642\u0647",
|
||||
"HeaderFavoriteShows": "\u0633\u0631\u06cc\u0627\u0644 \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0639\u0644\u0627\u0642\u0647",
|
||||
"HeaderNextUp": "\u0628\u0639\u062f\u06cc \u0686\u06cc\u0647",
|
||||
"Favorites": "\u0645\u0648\u0631\u062f \u0639\u0644\u0627\u0642\u0647 \u0647\u0627",
|
||||
"Collections": "\u06a9\u0644\u06a9\u0633\u06cc\u0648\u0646 \u0647\u0627",
|
||||
"Channels": "\u06a9\u0627\u0646\u0627\u0644 \u0647\u0627",
|
||||
"Movies": "\u0641\u06cc\u0644\u0645 \u0647\u0627\u06cc \u0633\u06cc\u0646\u0645\u0627\u06cc\u06cc",
|
||||
"Albums": "\u0622\u0644\u0628\u0648\u0645 \u0647\u0627",
|
||||
"NameSeasonUnknown": "\u0641\u0635\u0644 \u0647\u0627\u06cc \u0646\u0627\u0634\u0646\u0627\u062e\u062a\u0647",
|
||||
"Artists": "\u0647\u0646\u0631\u0645\u0646\u062f\u0627\u0646",
|
||||
"Folders": "\u067e\u0648\u0634\u0647 \u0647\u0627",
|
||||
"Songs": "\u0622\u0647\u0646\u06af \u0647\u0627",
|
||||
"TvShows": "\u0633\u0631\u06cc\u0627\u0644 \u0647\u0627\u06cc \u062a\u0644\u0648\u06cc\u0632\u06cc\u0648\u0646\u06cc",
|
||||
"Shows": "\u0633\u0631\u06cc\u0627\u0644 \u0647\u0627",
|
||||
"Genres": "\u0698\u0627\u0646\u0631\u0647\u0627",
|
||||
"NameSeasonNumber": "\u0641\u0635\u0644 {0}",
|
||||
"AppDeviceValues": "\u0628\u0631\u0646\u0627\u0645\u0647: {0} \u060c \u062f\u0633\u062a\u06af\u0627\u0647: {1}",
|
||||
"UserDownloadingItemWithValues": "{0} \u062f\u0631 \u062d\u0627\u0644 \u062f\u0627\u0646\u0644\u0648\u062f \u0627\u0633\u062a {1}",
|
||||
"HeaderLiveTV": "\u067e\u062e\u0634 \u0632\u0646\u062f\u0647 \u062a\u0644\u0648\u06cc\u0632\u06cc\u0648\u0646",
|
||||
"ChapterNameValue": "\u0641\u0635\u0644 {0}",
|
||||
"ScheduledTaskFailedWithName": "{0} \u0646\u0627\u0645\u0648\u0641\u0642 \u0628\u0648\u062f",
|
||||
"LabelRunningTimeValue": "\u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627: {0}",
|
||||
"ScheduledTaskStartedWithName": "{0} \u0634\u0631\u0648\u0639 \u0634\u062f",
|
||||
"VersionNumber": "\u0646\u0633\u062e\u0647 {0}",
|
||||
"PluginInstalledWithName": "{0} \u0646\u0635\u0628 \u0634\u062f",
|
||||
"StartupEmbyServerIsLoading": "\u0633\u0631\u0648\u0631 Jellyfin \u062f\u0631 \u062d\u0627\u0644 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u0627\u0633\u062a. \u0644\u0637\u0641\u0627 \u06a9\u0645\u06cc \u0628\u0639\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u0644\u0627\u0634 \u06a9\u0646\u06cc\u062f.",
|
||||
"PluginUpdatedWithName": "{0} \u0622\u067e\u062f\u06cc\u062a \u0634\u062f",
|
||||
"PluginUninstalledWithName": "{0} \u062d\u0630\u0641 \u0634\u062f",
|
||||
"ItemAddedWithName": "{0} \u0628\u0647 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0627\u0641\u0632\u0648\u062f\u0647 \u0634\u062f",
|
||||
"ItemRemovedWithName": "{0} \u0627\u0632 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u062d\u0630\u0641 \u0634\u062f",
|
||||
"LabelIpAddressValue": "\u0622\u062f\u0631\u0633 \u0622\u06cc \u067e\u06cc: {0}",
|
||||
"DeviceOnlineWithName": "{0} \u0645\u062a\u0635\u0644 \u0634\u062f\u0647",
|
||||
"UserOnlineFromDevice": "{0}\u0627\u0632 {1} \u0622\u0646\u0644\u0627\u06cc\u0646 \u0645\u06cc\u0628\u0627\u0634\u062f",
|
||||
"ProviderValue": "\u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u0646\u062f\u0647: {0}",
|
||||
"SubtitlesDownloadedForItem": "\u0632\u06cc\u0631\u0646\u0648\u06cc\u0633 {0} \u062f\u0627\u0646\u0644\u0648\u062f \u0634\u062f",
|
||||
"UserCreatedWithName": "\u06a9\u0627\u0631\u0628\u0631 {0} \u0627\u06cc\u062c\u0627\u062f \u0634\u062f",
|
||||
"UserPasswordChangedWithName": "\u0631\u0645\u0632 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 {0} \u062a\u063a\u06cc\u06cc\u0631 \u06cc\u0627\u0641\u062a",
|
||||
"UserDeletedWithName": "\u06a9\u0627\u0631\u0628\u0631 {0} \u062d\u0630\u0641 \u0634\u062f",
|
||||
"UserPolicyUpdatedWithName": "\u0633\u06cc\u0627\u0633\u062a \u06a9\u0627\u0631\u0628\u0631\u06cc \u0628\u0631\u0627\u06cc {0} \u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0634\u062f",
|
||||
"MessageServerConfigurationUpdated": "\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0633\u0631\u0648\u0631 \u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0634\u062f",
|
||||
"MessageNamedServerConfigurationUpdatedWithValue": "\u067e\u06a9\u0631\u0628\u0646\u062f\u06cc \u0628\u062e\u0634 {0} \u0633\u0631\u0648\u0631 \u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0634\u062f",
|
||||
"MessageApplicationUpdated": "\u0633\u0631\u0648\u0631 Jellyfin \u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0634\u062f",
|
||||
"FailedLoginAttemptWithUserName": "\u062a\u0644\u0627\u0634 \u0628\u0631\u0627\u06cc \u0648\u0631\u0648\u062f \u0627\u0632 {0} \u0646\u0627\u0645\u0648\u0641\u0642 \u0628\u0648\u062f",
|
||||
"AuthenticationSucceededWithUserName": "{0} \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u062a\u0627\u06cc\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u0634\u062f",
|
||||
"UserOfflineFromDevice": "\u0627\u0631\u062a\u0628\u0627\u0637 {0} \u0627\u0632 {1} \u0642\u0637\u0639 \u0634\u062f",
|
||||
"DeviceOfflineWithName": "\u0627\u0631\u062a\u0628\u0627\u0637 {0} \u0642\u0637\u0639 \u0634\u062f",
|
||||
"UserStartedPlayingItemWithValues": "{0} \u0634\u0631\u0648\u0639 \u0628\u0647 \u067e\u062e\u0634 {1} \u06a9\u0631\u062f",
|
||||
"UserStoppedPlayingItemWithValues": "{0} \u067e\u062e\u0634 {1} \u0631\u0627 \u0645\u062a\u0648\u0642\u0641 \u06a9\u0631\u062f",
|
||||
"NotificationOptionPluginError": "\u062e\u0631\u0627\u0628\u06cc \u0627\u0641\u0632\u0648\u0646\u0647",
|
||||
"NotificationOptionApplicationUpdateAvailable": "\u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0648\u062c\u0648\u062f \u0627\u0633\u062a",
|
||||
"NotificationOptionApplicationUpdateInstalled": "\u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0635\u0628 \u0634\u062f",
|
||||
"NotificationOptionPluginUpdateInstalled": "\u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0627\u0641\u0632\u0648\u0646\u0647 \u0646\u0635\u0628 \u0634\u062f",
|
||||
"NotificationOptionPluginInstalled": "\u0627\u0641\u0632\u0648\u0646\u0647 \u0646\u0635\u0628 \u0634\u062f",
|
||||
"NotificationOptionPluginUninstalled": "\u0627\u0641\u0632\u0648\u0646\u0647 \u062d\u0630\u0641 \u0634\u062f",
|
||||
"NotificationOptionVideoPlayback": "\u067e\u062e\u0634 \u0648\u06cc\u062f\u06cc\u0648 \u0622\u063a\u0627\u0632 \u0634\u062f",
|
||||
"NotificationOptionAudioPlayback": "\u067e\u062e\u0634 \u0635\u062f\u0627 \u0622\u063a\u0627\u0632 \u0634\u062f",
|
||||
"NotificationOptionGamePlayback": "\u067e\u062e\u0634 \u0628\u0627\u0632\u06cc \u0622\u063a\u0627\u0632 \u0634\u062f",
|
||||
"NotificationOptionVideoPlaybackStopped": "\u067e\u062e\u0634 \u0648\u06cc\u062f\u06cc\u0648 \u0645\u062a\u0648\u0642\u0641 \u0634\u062f",
|
||||
"NotificationOptionAudioPlaybackStopped": "\u067e\u062e\u0634 \u0635\u062f\u0627 \u0645\u062a\u0648\u0642\u0641 \u0634\u062f",
|
||||
"NotificationOptionGamePlaybackStopped": "\u067e\u062e\u0634 \u0628\u0627\u0632\u06cc \u0645\u062a\u0648\u0642\u0641 \u0634\u062f",
|
||||
"NotificationOptionTaskFailed": "\u0634\u06a9\u0633\u062a \u0648\u0638\u06cc\u0641\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u06cc\u0632\u06cc \u0634\u062f\u0647",
|
||||
"NotificationOptionInstallationFailed": "\u0634\u06a9\u0633\u062a \u0646\u0635\u0628",
|
||||
"NotificationOptionNewLibraryContent": "\u0645\u062d\u062a\u0648\u0627\u06cc \u062c\u062f\u06cc\u062f \u0627\u0641\u0632\u0648\u062f\u0647 \u0634\u062f",
|
||||
"NotificationOptionCameraImageUploaded": "\u062a\u0635\u0627\u0648\u06cc\u0631 \u062f\u0648\u0631\u0628\u06cc\u0646 \u0622\u067e\u0644\u0648\u062f \u0634\u062f",
|
||||
"NotificationOptionUserLockedOut": "\u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u0633\u06cc\u0633\u062a\u0645 \u062e\u0627\u0631\u062c \u0634\u062f",
|
||||
"NotificationOptionServerRestartRequired": "\u0634\u0631\u0648\u0639 \u0645\u062c\u062f\u062f \u0633\u0631\u0648\u0631 \u0646\u06cc\u0627\u0632 \u0627\u0633\u062a",
|
||||
"UserLockedOutWithName": "\u06a9\u0627\u0631\u0628\u0631 {0} \u0627\u0632 \u0633\u06cc\u0633\u062a\u0645 \u062e\u0627\u0631\u062c \u0634\u062f",
|
||||
"SubtitleDownloadFailureForItem": "\u062f\u0627\u0646\u0644\u0648\u062f \u0632\u06cc\u0631\u0646\u0648\u06cc\u0633 \u0628\u0631\u0627\u06cc {0} \u0646\u0627\u0645\u0648\u0641\u0642 \u0628\u0648\u062f",
|
||||
"Sync": "\u0647\u0645\u06af\u0627\u0645\u0633\u0627\u0632\u06cc",
|
||||
"User": "\u06a9\u0627\u0631\u0628\u0631",
|
||||
"System": "\u0633\u06cc\u0633\u062a\u0645",
|
||||
"Application": "\u0628\u0631\u0646\u0627\u0645\u0647",
|
||||
"Plugin": "\u0627\u0641\u0632\u0648\u0646\u0647"
|
||||
"Albums": "آلبوم ها",
|
||||
"AppDeviceValues": "برنامه: {0} ، دستگاه: {1}",
|
||||
"Application": "برنامه",
|
||||
"Artists": "هنرمندان",
|
||||
"AuthenticationSucceededWithUserName": "{0} با موفقیت تایید اعتبار شد",
|
||||
"Books": "کتاب ها",
|
||||
"CameraImageUploadedFrom": "A new camera image has been uploaded from {0}",
|
||||
"Channels": "کانال ها",
|
||||
"ChapterNameValue": "فصل {0}",
|
||||
"Collections": "کلکسیون ها",
|
||||
"DeviceOfflineWithName": "ارتباط {0} قطع شد",
|
||||
"DeviceOnlineWithName": "{0} متصل شده",
|
||||
"FailedLoginAttemptWithUserName": "تلاش برای ورود از {0} ناموفق بود",
|
||||
"Favorites": "مورد علاقه ها",
|
||||
"Folders": "پوشه ها",
|
||||
"Games": "بازی ها",
|
||||
"Genres": "ژانرها",
|
||||
"HeaderAlbumArtists": "هنرمندان آلبوم",
|
||||
"HeaderCameraUploads": "آپلودهای دوربین",
|
||||
"HeaderContinueWatching": "ادامه تماشا",
|
||||
"HeaderFavoriteAlbums": "آلبوم های مورد علاقه",
|
||||
"HeaderFavoriteArtists": "هنرمندان مورد علاقه",
|
||||
"HeaderFavoriteEpisodes": "قسمت های مورد علاقه",
|
||||
"HeaderFavoriteShows": "سریال های مورد علاقه",
|
||||
"HeaderFavoriteSongs": "آهنگ های مورد علاقه",
|
||||
"HeaderLiveTV": "پخش زنده تلویزیون",
|
||||
"HeaderNextUp": "بعدی چیه",
|
||||
"HeaderRecordingGroups": "گروه های ضبط",
|
||||
"HomeVideos": "ویدیوهای خانگی",
|
||||
"Inherit": "به ارث برده",
|
||||
"ItemAddedWithName": "{0} به کتابخانه افزوده شد",
|
||||
"ItemRemovedWithName": "{0} از کتابخانه حذف شد",
|
||||
"LabelIpAddressValue": "آدرس آی پی: {0}",
|
||||
"LabelRunningTimeValue": "زمان اجرا: {0}",
|
||||
"Latest": "آخرین",
|
||||
"MessageApplicationUpdated": "سرور Jellyfin بروزرسانی شد",
|
||||
"MessageApplicationUpdatedTo": "Jellyfin Server has been updated to {0}",
|
||||
"MessageNamedServerConfigurationUpdatedWithValue": "پکربندی بخش {0} سرور بروزرسانی شد",
|
||||
"MessageServerConfigurationUpdated": "پیکربندی سرور بروزرسانی شد",
|
||||
"MixedContent": "محتوای درهم",
|
||||
"Movies": "فیلم های سینمایی",
|
||||
"Music": "موسیقی",
|
||||
"MusicVideos": "موزیک ویدیوها",
|
||||
"NameInstallFailed": "{0} installation failed",
|
||||
"NameSeasonNumber": "فصل {0}",
|
||||
"NameSeasonUnknown": "فصل های ناشناخته",
|
||||
"NewVersionIsAvailable": "A new version of Jellyfin Server is available for download.",
|
||||
"NotificationOptionApplicationUpdateAvailable": "بروزرسانی برنامه موجود است",
|
||||
"NotificationOptionApplicationUpdateInstalled": "بروزرسانی برنامه نصب شد",
|
||||
"NotificationOptionAudioPlayback": "پخش صدا آغاز شد",
|
||||
"NotificationOptionAudioPlaybackStopped": "پخش صدا متوقف شد",
|
||||
"NotificationOptionCameraImageUploaded": "تصاویر دوربین آپلود شد",
|
||||
"NotificationOptionGamePlayback": "پخش بازی آغاز شد",
|
||||
"NotificationOptionGamePlaybackStopped": "پخش بازی متوقف شد",
|
||||
"NotificationOptionInstallationFailed": "شکست نصب",
|
||||
"NotificationOptionNewLibraryContent": "محتوای جدید افزوده شد",
|
||||
"NotificationOptionPluginError": "خرابی افزونه",
|
||||
"NotificationOptionPluginInstalled": "افزونه نصب شد",
|
||||
"NotificationOptionPluginUninstalled": "افزونه حذف شد",
|
||||
"NotificationOptionPluginUpdateInstalled": "بروزرسانی افزونه نصب شد",
|
||||
"NotificationOptionServerRestartRequired": "شروع مجدد سرور نیاز است",
|
||||
"NotificationOptionTaskFailed": "شکست وظیفه برنامه ریزی شده",
|
||||
"NotificationOptionUserLockedOut": "کاربر از سیستم خارج شد",
|
||||
"NotificationOptionVideoPlayback": "پخش ویدیو آغاز شد",
|
||||
"NotificationOptionVideoPlaybackStopped": "پخش ویدیو متوقف شد",
|
||||
"Photos": "عکس ها",
|
||||
"Playlists": "لیست های پخش",
|
||||
"Plugin": "افزونه",
|
||||
"PluginInstalledWithName": "{0} نصب شد",
|
||||
"PluginUninstalledWithName": "{0} حذف شد",
|
||||
"PluginUpdatedWithName": "{0} آپدیت شد",
|
||||
"ProviderValue": "ارائه دهنده: {0}",
|
||||
"ScheduledTaskFailedWithName": "{0} ناموفق بود",
|
||||
"ScheduledTaskStartedWithName": "{0} شروع شد",
|
||||
"ServerNameNeedsToBeRestarted": "{0} needs to be restarted",
|
||||
"Shows": "سریال ها",
|
||||
"Songs": "آهنگ ها",
|
||||
"StartupEmbyServerIsLoading": "سرور Jellyfin در حال بارگیری است. لطفا کمی بعد دوباره تلاش کنید.",
|
||||
"SubtitleDownloadFailureForItem": "دانلود زیرنویس برای {0} ناموفق بود",
|
||||
"SubtitleDownloadFailureFromForItem": "Subtitles failed to download from {0} for {1}",
|
||||
"SubtitlesDownloadedForItem": "زیرنویس {0} دانلود شد",
|
||||
"Sync": "همگامسازی",
|
||||
"System": "سیستم",
|
||||
"TvShows": "سریال های تلویزیونی",
|
||||
"User": "کاربر",
|
||||
"UserCreatedWithName": "کاربر {0} ایجاد شد",
|
||||
"UserDeletedWithName": "کاربر {0} حذف شد",
|
||||
"UserDownloadingItemWithValues": "{0} در حال دانلود است {1}",
|
||||
"UserLockedOutWithName": "کاربر {0} از سیستم خارج شد",
|
||||
"UserOfflineFromDevice": "ارتباط {0} از {1} قطع شد",
|
||||
"UserOnlineFromDevice": "{0}از {1} آنلاین میباشد",
|
||||
"UserPasswordChangedWithName": "رمز برای کاربر {0} تغییر یافت",
|
||||
"UserPolicyUpdatedWithName": "سیاست کاربری برای {0} بروزرسانی شد",
|
||||
"UserStartedPlayingItemWithValues": "{0} شروع به پخش {1} کرد",
|
||||
"UserStoppedPlayingItemWithValues": "{0} پخش {1} را متوقف کرد",
|
||||
"ValueHasBeenAddedToLibrary": "{0} has been added to your media library",
|
||||
"ValueSpecialEpisodeName": "ویژه- {0}",
|
||||
"VersionNumber": "نسخه {0}"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user