mirror of
https://github.com/immich-app/immich
synced 2025-11-07 17:27:20 +00:00
feat(web): s (#9663)
This commit is contained in:
parent
ae21781442
commit
f6f82a5662
10 changed files with 25 additions and 22 deletions
|
|
@ -7,6 +7,7 @@
|
|||
import { getShortDateRange } from '$lib/utils/date-time';
|
||||
import AlbumCover from '$lib/components/album-page/album-cover.svelte';
|
||||
import CircleIconButton from '$lib/components/elements/buttons/circle-icon-button.svelte';
|
||||
import { s } from '$lib/utils';
|
||||
|
||||
export let album: AlbumResponseDto;
|
||||
export let showOwner = false;
|
||||
|
|
@ -65,7 +66,7 @@
|
|||
{#if showItemCount}
|
||||
<p>
|
||||
{album.assetCount.toLocaleString($locale)}
|
||||
{album.assetCount === 1 ? `item` : `items`}
|
||||
item{s(album.assetCount)}
|
||||
</p>
|
||||
{/if}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
import { NotificationType, notificationController } from '../shared-components/notification/notification';
|
||||
import FaceThumbnail from './face-thumbnail.svelte';
|
||||
import PeopleList from './people-list.svelte';
|
||||
import { s } from '$lib/utils';
|
||||
|
||||
export let assetIds: string[];
|
||||
export let personAssets: PersonResponseDto;
|
||||
|
|
@ -76,7 +77,7 @@
|
|||
await reassignFaces({ id: data.id, assetFaceUpdateDto: { data: selectedPeople } });
|
||||
|
||||
notificationController.show({
|
||||
message: `Re-assigned ${assetIds.length} asset${assetIds.length > 1 ? 's' : ''} to a new person`,
|
||||
message: `Re-assigned ${assetIds.length} asset${s(assetIds.length)} to a new person`,
|
||||
type: NotificationType.Info,
|
||||
});
|
||||
} catch (error) {
|
||||
|
|
@ -96,7 +97,7 @@
|
|||
if (selectedPerson) {
|
||||
await reassignFaces({ id: selectedPerson.id, assetFaceUpdateDto: { data: selectedPeople } });
|
||||
notificationController.show({
|
||||
message: `Re-assigned ${assetIds.length} asset${assetIds.length > 1 ? 's' : ''} to ${
|
||||
message: `Re-assigned ${assetIds.length} asset${s(assetIds.length)} to ${
|
||||
selectedPerson.name || 'an existing person'
|
||||
}`,
|
||||
type: NotificationType.Info,
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
import type { ValidateLibraryImportPathResponseDto } from '@immich/sdk';
|
||||
import { NotificationType, notificationController } from '../shared-components/notification/notification';
|
||||
import CircleIconButton from '$lib/components/elements/buttons/circle-icon-button.svelte';
|
||||
import { s } from '$lib/utils';
|
||||
|
||||
export let library: LibraryResponseDto;
|
||||
|
||||
|
|
@ -56,14 +57,9 @@
|
|||
type: NotificationType.Info,
|
||||
});
|
||||
}
|
||||
} else if (failedPaths === 1) {
|
||||
notificationController.show({
|
||||
message: `${failedPaths} path failed validation`,
|
||||
type: NotificationType.Warning,
|
||||
});
|
||||
} else {
|
||||
notificationController.show({
|
||||
message: `${failedPaths} paths failed validation`,
|
||||
message: `${failedPaths} path${s(failedPaths)} failed validation`,
|
||||
type: NotificationType.Warning,
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
import { mdiDeleteOutline, mdiImageRemoveOutline } from '@mdi/js';
|
||||
import MenuOption from '../../shared-components/context-menu/menu-option.svelte';
|
||||
import { getAssetControlContext } from '../asset-select-control-bar.svelte';
|
||||
import { s } from '$lib/utils';
|
||||
|
||||
export let album: AlbumResponseDto;
|
||||
export let onRemove: ((assetIds: string[]) => void) | undefined;
|
||||
|
|
@ -33,7 +34,7 @@
|
|||
const count = results.filter(({ success }) => success).length;
|
||||
notificationController.show({
|
||||
type: NotificationType.Info,
|
||||
message: `Removed ${count} asset${count === 1 ? '' : 's'}`,
|
||||
message: `Removed ${count} asset${s(count)}`,
|
||||
});
|
||||
|
||||
clearSelect();
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
import ConfirmDialogue from '../shared-components/confirm-dialogue.svelte';
|
||||
import { showDeleteModal } from '$lib/stores/preferences.store';
|
||||
import Checkbox from '$lib/components/elements/checkbox.svelte';
|
||||
import { s } from '$lib/utils';
|
||||
|
||||
export let size: number;
|
||||
|
||||
|
|
@ -23,7 +24,7 @@
|
|||
|
||||
<ConfirmDialogue
|
||||
id="permanently-delete-asset-modal"
|
||||
title="Permanently delete asset{size > 1 ? 's' : ''}"
|
||||
title="Permanently delete asset{s(size)}"
|
||||
confirmText="Delete"
|
||||
onConfirm={handleConfirm}
|
||||
onClose={() => dispatch('cancel')}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
import { uploadExecutionQueue } from '$lib/utils/file-uploader';
|
||||
import CircleIconButton from '../elements/buttons/circle-icon-button.svelte';
|
||||
import { mdiCog, mdiWindowMinimize, mdiCancel, mdiCloudUploadOutline } from '@mdi/js';
|
||||
import { s } from '$lib/utils';
|
||||
|
||||
let showDetail = false;
|
||||
let showOptions = false;
|
||||
|
|
@ -36,7 +37,7 @@
|
|||
on:outroend={() => {
|
||||
if ($errorCounter > 0) {
|
||||
notificationController.show({
|
||||
message: `Upload completed with ${$errorCounter} error${$errorCounter > 1 ? 's' : ''}, refresh the page to see new upload assets.`,
|
||||
message: `Upload completed with ${$errorCounter} error${s($errorCounter)}, refresh the page to see new upload assets.`,
|
||||
type: NotificationType.Warning,
|
||||
});
|
||||
} else if ($successCounter > 0) {
|
||||
|
|
@ -47,7 +48,7 @@
|
|||
}
|
||||
if ($duplicateCounter > 0) {
|
||||
notificationController.show({
|
||||
message: `Skipped ${$duplicateCounter} duplicate asset${$duplicateCounter > 1 ? 's' : ''}`,
|
||||
message: `Skipped ${$duplicateCounter} duplicate asset${s($duplicateCounter)}`,
|
||||
type: NotificationType.Warning,
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue