From 57a425e14c37ef3822322a3e82f631ed2e3185b7 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Thu, 26 Sep 2024 17:13:29 +0530 Subject: [PATCH 01/61] [mob] Run discovery forcefully when ml is toggled --- mobile/lib/services/machine_learning/ml_service.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/mobile/lib/services/machine_learning/ml_service.dart b/mobile/lib/services/machine_learning/ml_service.dart index b384c7286e..c643bd20ff 100644 --- a/mobile/lib/services/machine_learning/ml_service.dart +++ b/mobile/lib/services/machine_learning/ml_service.dart @@ -117,6 +117,7 @@ class MLService { try { if (force) { _mlControllerStatus = true; + MagicCacheService.instance.queueUpdate('forced run'); } if (_cannotRunMLFunction() && !force) return; _isRunningML = true; From 2c0f2d43e7db63dbaf09685b3573b72d3aebf3ba Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 08:15:56 +0530 Subject: [PATCH 02/61] Allow flex --- .../new/photos/services/ml/cluster.ts | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/web/packages/new/photos/services/ml/cluster.ts b/web/packages/new/photos/services/ml/cluster.ts index 4cd7e6850f..5e9229358f 100644 --- a/web/packages/new/photos/services/ml/cluster.ts +++ b/web/packages/new/photos/services/ml/cluster.ts @@ -1,3 +1,4 @@ +import { assertionFailed } from "@/base/assert"; import { newNonSecureID } from "@/base/id-worker"; import log from "@/base/log"; import { ensure } from "@/utils/ensure"; @@ -196,26 +197,29 @@ function* enumerateFaces(faceIndices: FaceIndex[]) { * * Sorting faces temporally is meant as a heuristic for better clusters. */ -const sortFacesNewestOnesFirst = ( - faces: ClusterFace[], - localFiles: EnteFile[], -) => { +const sortFacesNewestOnesFirst = (faces: ClusterFace[], localFiles: EnteFile[]) => { const localFileByID = new Map(localFiles.map((f) => [f.id, f])); const fileForFaceID = new Map( faces.map(({ faceID }) => [ faceID, - ensure(localFileByID.get(ensure(fileIDFromFaceID(faceID)))), + localFileByID.get(ensure(fileIDFromFaceID(faceID))), ]), ); - const fileForFace = ({ faceID }: { faceID: string }) => - ensure(fileForFaceID.get(faceID)); + // In unexpected scenarios, we might run clustering without having the + // corresponding EnteFile available locally. This shouldn't happen, so log + // an warning, but meanwhile let the clustering proceed by assigning such + // files an arbitrary creationTime. + const sortTimeForFace = ({ faceID }: { faceID: string }) => { + const file = fileForFaceID.get(faceID); + if (!file) { + assertionFailed(`Did not find a local file for faceID ${faceID}`); + return 0; + } + return file.metadata.creationTime; + }; - return faces.sort( - (a, b) => - fileForFace(b).metadata.creationTime - - fileForFace(a).metadata.creationTime, - ); + return faces.sort((a, b) => sortTimeForFace(b) - sortTimeForFace(a)); }; /** From 57ea097a5df424496856b229a32bf098e1a1f17d Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 08:21:58 +0530 Subject: [PATCH 03/61] Use new nomenclature --- .../new/photos/services/ml/cluster.ts | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/web/packages/new/photos/services/ml/cluster.ts b/web/packages/new/photos/services/ml/cluster.ts index 5e9229358f..c0d81173b9 100644 --- a/web/packages/new/photos/services/ml/cluster.ts +++ b/web/packages/new/photos/services/ml/cluster.ts @@ -197,7 +197,10 @@ function* enumerateFaces(faceIndices: FaceIndex[]) { * * Sorting faces temporally is meant as a heuristic for better clusters. */ -const sortFacesNewestOnesFirst = (faces: ClusterFace[], localFiles: EnteFile[]) => { +const sortFacesNewestOnesFirst = ( + faces: ClusterFace[], + localFiles: EnteFile[], +) => { const localFileByID = new Map(localFiles.map((f) => [f.id, f])); const fileForFaceID = new Map( faces.map(({ faceID }) => [ @@ -344,22 +347,22 @@ export const reconcileClusters = async ( const clusterByID = new Map(clusters.map((c) => [c.id, c])); // Get the existing remote cluster groups. - const cgroupEntities = await savedCGroups(); + const cgroups = await savedCGroups(); // Find the cgroups that have changed since we started. - const changedCGroupEntities = cgroupEntities - .map((cgroupEntity) => { - for (const oldCluster of cgroupEntity.data.assigned) { + const changedCGroups = cgroups + .map((cgroup) => { + for (const oldCluster of cgroup.data.assigned) { // The clustering algorithm does not remove any existing faces, it // can only add new ones to the cluster. So we can use the count as // an indication if something changed. const newCluster = ensure(clusterByID.get(oldCluster.id)); if (oldCluster.faces.length != newCluster.faces.length) { return { - ...cgroupEntity, + ...cgroup, data: { - ...cgroupEntity.data, - assigned: cgroupEntity.data.assigned.map(({ id }) => + ...cgroup.data, + assigned: cgroup.data.assigned.map(({ id }) => ensure(clusterByID.get(id)), ), }, @@ -371,19 +374,15 @@ export const reconcileClusters = async ( .filter((g) => !!g); // Update remote if needed. - if (changedCGroupEntities.length) { - await updateOrCreateUserEntities( - "cgroup", - changedCGroupEntities, - masterKey, - ); - log.info(`Updated ${changedCGroupEntities.length} remote cgroups`); + if (changedCGroups.length) { + await updateOrCreateUserEntities("cgroup", changedCGroups, masterKey); + log.info(`Updated ${changedCGroups.length} remote cgroups`); } // Find which clusters are part of remote cgroups. const isRemoteClusterID = new Set(); - for (const cgroupEntity of cgroupEntities) { - for (const cluster of cgroupEntity.data.assigned) + for (const cgroup of cgroups) { + for (const cluster of cgroup.data.assigned) isRemoteClusterID.add(cluster.id); } From 27a0d7707e891b383cd7db0c3997c96c3e0457c2 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 08:39:29 +0530 Subject: [PATCH 04/61] Return the count of items indexed --- web/packages/new/photos/services/ml/worker.ts | 58 ++++++++++++------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index b9156e4106..ce460d3610 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -109,7 +109,13 @@ export class MLWorker { private liveQ: IndexableItem[] = []; private idleTimeout: ReturnType | undefined; private idleDuration = idleDurationStart; /* unit: seconds */ - private onNextIdles: (() => void)[] = []; + /** Resolvers for pending promises returned from calls to {@link index}. */ + private onNextIdles: ((count: number) => void)[] = []; + /** + * Number of items processed since the last time {@link onNextIdles} was + * drained. + */ + private countSinceLastIdle = 0; /** * Initialize a new {@link MLWorker}. @@ -140,9 +146,12 @@ export class MLWorker { * During a backfill, we first attempt to fetch ML data for files which * don't have that data locally. If on fetching we find what we need, we * save it locally. Otherwise we index them. + * + * @return The count of items processed since the last last time we were + * idle. */ index() { - const nextIdle = new Promise((resolve) => + const nextIdle = new Promise((resolve) => this.onNextIdles.push(resolve), ); this.wakeUp(); @@ -225,17 +234,23 @@ export class MLWorker { // Use the liveQ if present, otherwise get the next batch to backfill. const items = liveQ.length ? liveQ : await this.backfillQ(); - const allSuccess = await indexNextBatch( - items, - ensure(this.electron), - this.delegate, - ); - if (allSuccess) { - // Everything is running smoothly. Reset the idle duration. - this.idleDuration = idleDurationStart; - // And tick again. - scheduleTick(); - return; + this.countSinceLastIdle += items.length; + + // If there is items remaining, + if (items.length > 0) { + // Index them. + const allSuccess = await indexNextBatch( + items, + ensure(this.electron), + this.delegate, + ); + if (allSuccess) { + // Everything is running smoothly. Reset the idle duration. + this.idleDuration = idleDurationStart; + // And tick again. + scheduleTick(); + return; + } } // We come here in three scenarios - either there is nothing left to do, @@ -255,8 +270,10 @@ export class MLWorker { // Resolve any awaiting promises returned from `index`. const onNextIdles = this.onNextIdles; + const countSinceLastIdle = this.countSinceLastIdle; this.onNextIdles = []; - onNextIdles.forEach((f) => f()); + this.countSinceLastIdle = 0; + onNextIdles.forEach((f) => f(countSinceLastIdle)); } /** Return the next batch of items to backfill (if any). */ @@ -321,13 +338,13 @@ export class MLWorker { expose(MLWorker); /** - * Find out files which need to be indexed. Then index the next batch of them. + * Index the given batch of items. * - * Returns `false` to indicate that either an error occurred, or there are no - * more files to process, or that we cannot currently process files. + * Returns `false` to indicate that either an error occurred, or that we cannot + * currently process files since we don't have network connectivity. * - * Which means that when it returns true, all is well and there are more - * things pending to process, so we should chug along at full speed. + * Which means that when it returns true, all is well and if there are more + * things pending to process, we should chug along at full speed. */ const indexNextBatch = async ( items: IndexableItem[], @@ -342,9 +359,6 @@ const indexNextBatch = async ( return false; } - // Nothing to do. - if (items.length == 0) return false; - // Keep track if any of the items failed. let allSuccess = true; From 4d4b3f8bef90f4ab4ce29f5a16bec7920f929112 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 10:06:56 +0530 Subject: [PATCH 05/61] Notify about live uploads --- web/packages/new/photos/services/ml/index.ts | 21 +++++++++++-------- .../new/photos/services/ml/worker-types.ts | 13 ++++++++++++ web/packages/new/photos/services/ml/worker.ts | 6 ++++++ 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index ddb88dd69c..f7cc7a9a17 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -107,7 +107,7 @@ const worker = () => const createComlinkWorker = async () => { const electron = ensureElectron(); - const delegate = { workerDidUpdateStatus }; + const delegate = { workerDidUpdateStatus, workerDidUnawaitedIndex }; // Obtain a message port from the Electron layer. const messagePort = await createMLWorker(electron); @@ -313,14 +313,20 @@ export const mlSync = async () => { // Dependency order for the sync // - // files -> faces -> cgroups -> clusters + // files -> faces -> cgroups -> clusters -> people // - const w = await worker(); - // Fetch indexes, or index locally if needed. - await w.index(); + await (await worker()).index(); + await updateClustersAndPeople(); + + _state.isSyncing = false; +}; + +const workerDidUnawaitedIndex = () => void updateClustersAndPeople(); + +const updateClustersAndPeople = async () => { // TODO-Cluster if (await wipClusterEnable()) { const masterKey = await masterKeyFromSession(); @@ -329,12 +335,9 @@ export const mlSync = async () => { await pullUserEntities("cgroup", masterKey); // Generate or update local clusters. - await w.clusterFaces(masterKey); + await (await worker()).clusterFaces(masterKey); } - await updatePeople(); - - _state.isSyncing = false; }; /** diff --git a/web/packages/new/photos/services/ml/worker-types.ts b/web/packages/new/photos/services/ml/worker-types.ts index b12598d52b..16153b3b2b 100644 --- a/web/packages/new/photos/services/ml/worker-types.ts +++ b/web/packages/new/photos/services/ml/worker-types.ts @@ -13,6 +13,19 @@ export interface MLWorkerDelegate { * indicating the indexing or clustering status to be updated. */ workerDidUpdateStatus: () => void; + /** + * Called when the worker indexes some files, but then notices that the main + * thread was not awaiting the indexing (e.g. it was not initiated by the + * main thread during a sync, but happened because of a live upload). + * + * In such cases, it uses this method to inform the main thread that some + * files were indexed, so that it can update any dependent state (e.g. + * clusters). + * + * It doesn't always call this because otherwise the main thread would need + * some extra code to avoid updating the dependent state twice. + */ + workerDidUnawaitedIndex: () => void; } /** diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index ce460d3610..42ee2a439f 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -274,6 +274,12 @@ export class MLWorker { this.onNextIdles = []; this.countSinceLastIdle = 0; onNextIdles.forEach((f) => f(countSinceLastIdle)); + + // If no one was waiting, then let the main thread know via a different + // channel so that it can update the clusters and people. + if (onNextIdles.length == 0 && countSinceLastIdle > 0) { + this.delegate?.workerDidUnawaitedIndex(); + } } /** Return the next batch of items to backfill (if any). */ From 924f5ce19bfc5dfc23b3638e6f716957fe827a93 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 10:14:53 +0530 Subject: [PATCH 06/61] Keep people first --- web/packages/new/photos/services/ml/people.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/web/packages/new/photos/services/ml/people.ts b/web/packages/new/photos/services/ml/people.ts index 6ad95d3fad..827d78acca 100644 --- a/web/packages/new/photos/services/ml/people.ts +++ b/web/packages/new/photos/services/ml/people.ts @@ -247,10 +247,12 @@ export const reconstructPeople = async (): Promise => { }; }); - return cgroupPeople - .concat(clusterPeople) - .filter((c) => !!c) - .sort((a, b) => b.fileIDs.length - a.fileIDs.length); + const sorted = (ps: Interim) => + ps + .filter((c) => !!c) + .sort((a, b) => b.fileIDs.length - a.fileIDs.length); + + return sorted(cgroupPeople).concat(sorted(clusterPeople)); }; /** From 71369bf5c9f8c4f1279e8825736838c100ed681f Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 10:29:33 +0530 Subject: [PATCH 07/61] State --- .../components/Gallery/PeopleHeader.tsx | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/web/packages/new/photos/components/Gallery/PeopleHeader.tsx b/web/packages/new/photos/components/Gallery/PeopleHeader.tsx index 616ae53acd..347f4e3748 100644 --- a/web/packages/new/photos/components/Gallery/PeopleHeader.tsx +++ b/web/packages/new/photos/components/Gallery/PeopleHeader.tsx @@ -31,6 +31,34 @@ import { NameInputDialog } from "../NameInputDialog"; import type { GalleryBarImplProps } from "./BarImpl"; import { GalleryItemsHeaderAdapter, GalleryItemsSummary } from "./ListHeader"; +/** + * UI state backing the gallery when it is in "people" mode. + * + * This may be different from the actual underlying state since there might be + * unsynced data (hidden or deleted that have not yet been synced with remote) + * that should be taken into account for the UI state. + */ +export interface GalleryPeopleState { + /** + * The ID of the currently selected person. + * + * We do not have an empty state currently, so this is guaranteed to be + * present whenever the gallery is in the "people" mode. + */ + activePersonID: string; + /** + * The currently selected person. + * + * This is a convenience property that contains a direct reference to the + * active {@link Person} from amongst {@link people}. + */ + activePerson: Person; + /** + * The list of people to show. + */ + people: Person[]; +} + type PeopleHeaderProps = Pick & { person: Person; appContext: NewAppContextPhotos; From 9235e41855e41fb177dfb530b890e30a1de36e6e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 10:46:34 +0530 Subject: [PATCH 08/61] Prepare to allow filtering people at the gallery layer --- web/apps/photos/src/pages/gallery.tsx | 49 ++++++++++++++++--- .../components/Gallery/PeopleHeader.tsx | 2 +- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/web/apps/photos/src/pages/gallery.tsx b/web/apps/photos/src/pages/gallery.tsx index 32adaf4d61..e36537c131 100644 --- a/web/apps/photos/src/pages/gallery.tsx +++ b/web/apps/photos/src/pages/gallery.tsx @@ -5,6 +5,7 @@ import log from "@/base/log"; import type { Collection } from "@/media/collection"; import { SearchResultsHeader } from "@/new/photos/components/Gallery"; import type { GalleryBarMode } from "@/new/photos/components/Gallery/BarImpl"; +import { GalleryPeopleState } from "@/new/photos/components/Gallery/PeopleHeader"; import { SearchBar, type SearchBarProps, @@ -526,9 +527,14 @@ export default function Gallery() { ); }, [collections, activeCollectionID]); - const filteredData = useMemoSingleThreaded(async (): Promise< - EnteFile[] - > => { + // The derived UI state when we are in "people" mode. + // TODO: Move this to a reducer/store. + type DerivedState1 = { + filteredData: EnteFile[]; + galleryPeopleState: GalleryPeopleState | undefined; + }; + + const derived1: DerivedState1 = useMemoSingleThreaded(async () => { if ( !files || !user || @@ -536,17 +542,19 @@ export default function Gallery() { !hiddenFiles || !archivedCollections ) { - return; + return { filteredData: [], galleryPeopleState: undefined }; } if (activeCollectionID === TRASH_SECTION && !selectedSearchOption) { - return getUniqueFiles([ + const filteredData = getUniqueFiles([ ...trashedFiles, ...files.filter((file) => tempDeletedFileIds?.has(file.id)), ]); + return { filteredData, galleryPeopleState: undefined }; } let filteredFiles: EnteFile[] = []; + let galleryPeopleState: GalleryPeopleState; if (selectedSearchOption) { filteredFiles = await filterSearchableFiles( selectedSearchOption.suggestion, @@ -565,6 +573,11 @@ export default function Gallery() { return true; }), ); + galleryPeopleState = { + activePerson, + activePersonID, + people, + }; } else { const baseFiles = barMode == "hidden-albums" ? hiddenFiles : files; filteredFiles = getUniqueFiles( @@ -630,10 +643,10 @@ export default function Gallery() { } const sortAsc = activeCollection?.pubMagicMetadata?.data?.asc ?? false; if (sortAsc) { - return sortFiles(filteredFiles, true); - } else { - return filteredFiles; + filteredFiles = sortFiles(filteredFiles, true); } + + return { filteredData: filteredFiles, galleryPeopleState }; }, [ barMode, files, @@ -649,6 +662,26 @@ export default function Gallery() { activePersonID, ]); + const { filteredData, galleryPeopleState } = derived1; + + // Calling setState during rendering is frowned upon for good reasons, but + // it is not verboten, and it has documented semantics: + // + // > React will discard the currently rendering component's output and + // > immediately attempt to render it again with the new state. + // > + // > https://react.dev/reference/react/useState + // + // That said, we should try to refactor this code to use a reducer or some + // other store so that this is not needed. + if (barMode == "people" && !galleryPeopleState) { + log.info( + "Resetting gallery to all section since people mode is no longer valid", + ); + setBarMode("albums"); + setActiveCollectionID(ALL_SECTION); + } + const selectAll = (e: KeyboardEvent) => { // ignore ctrl/cmd + a if the user is typing in a text field if ( diff --git a/web/packages/new/photos/components/Gallery/PeopleHeader.tsx b/web/packages/new/photos/components/Gallery/PeopleHeader.tsx index 347f4e3748..ad6e71925f 100644 --- a/web/packages/new/photos/components/Gallery/PeopleHeader.tsx +++ b/web/packages/new/photos/components/Gallery/PeopleHeader.tsx @@ -32,7 +32,7 @@ import type { GalleryBarImplProps } from "./BarImpl"; import { GalleryItemsHeaderAdapter, GalleryItemsSummary } from "./ListHeader"; /** - * UI state backing the gallery when it is in "people" mode. + * Derived UI state backing the gallery when it is in "people" mode. * * This may be different from the actual underlying state since there might be * unsynced data (hidden or deleted that have not yet been synced with remote) From a37ff3cf57a59b30d4fdff1f300f3d0026f19780 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 10:53:28 +0530 Subject: [PATCH 09/61] Workarounds --- web/apps/photos/src/pages/gallery.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/web/apps/photos/src/pages/gallery.tsx b/web/apps/photos/src/pages/gallery.tsx index e36537c131..71c69d40d9 100644 --- a/web/apps/photos/src/pages/gallery.tsx +++ b/web/apps/photos/src/pages/gallery.tsx @@ -662,7 +662,10 @@ export default function Gallery() { activePersonID, ]); - const { filteredData, galleryPeopleState } = derived1; + const { filteredData, galleryPeopleState } = derived1 ?? { + filteredData: [], + galleryPeopleState: undefined, + }; // Calling setState during rendering is frowned upon for good reasons, but // it is not verboten, and it has documented semantics: @@ -674,7 +677,7 @@ export default function Gallery() { // // That said, we should try to refactor this code to use a reducer or some // other store so that this is not needed. - if (barMode == "people" && !galleryPeopleState) { + if (barMode == "people" && galleryPeopleState?.people.length === 0) { log.info( "Resetting gallery to all section since people mode is no longer valid", ); From e70f9b5ccdb028eed75c376f209b92a477754353 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 11:03:30 +0530 Subject: [PATCH 10/61] Ignore temp deleted etc --- web/apps/photos/src/pages/gallery.tsx | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/web/apps/photos/src/pages/gallery.tsx b/web/apps/photos/src/pages/gallery.tsx index 71c69d40d9..02e1fe97d7 100644 --- a/web/apps/photos/src/pages/gallery.tsx +++ b/web/apps/photos/src/pages/gallery.tsx @@ -560,23 +560,36 @@ export default function Gallery() { selectedSearchOption.suggestion, ); } else if (barMode == "people") { + let filteredPeople = people; + if (tempDeletedFileIds?.size ?? tempHiddenFileIds?.size) { + // Prune the in-memory temp updates from the actual state to + // obtain the UI state. + filteredPeople = people + .map((p) => ({ + ...p, + fileIDs: p.fileIDs.filter( + (id) => + !tempDeletedFileIds?.has(id) && + !tempHiddenFileIds?.has(id), + ), + })) + .filter((p) => p.fileIDs.length > 0); + } const activePerson = ensure( - people.find((p) => p.id == activePersonID) ?? people[0], + filteredPeople.find((p) => p.id == activePersonID) ?? + filteredPeople[0], ); const pfSet = new Set(activePerson.fileIDs); filteredFiles = getUniqueFiles( files.filter(({ id }) => { if (!pfSet.has(id)) return false; - // TODO-Cluster - // if (tempDeletedFileIds?.has(id)) return false; - // if (tempHiddenFileIds?.has(id)) return false; return true; }), ); galleryPeopleState = { activePerson, activePersonID, - people, + people: filteredPeople, }; } else { const baseFiles = barMode == "hidden-albums" ? hiddenFiles : files; From 7644900bd8fb63e9475722db93ade73967a4c3e0 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 11:16:05 +0530 Subject: [PATCH 11/61] Use --- .../Collections/GalleryBarAndListHeader.tsx | 12 ++++------ web/apps/photos/src/pages/gallery.tsx | 23 +++++++++++-------- .../new/photos/components/Gallery/BarImpl.tsx | 19 +++++++-------- 3 files changed, 25 insertions(+), 29 deletions(-) diff --git a/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx b/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx index 0e9c83dde4..882879e7ba 100644 --- a/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx +++ b/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx @@ -9,7 +9,6 @@ import { type CollectionsSortBy, type CollectionSummaries, } from "@/new/photos/types/collection"; -import { ensure } from "@/utils/ensure"; import { includes } from "@/utils/type-guards"; import { getData, @@ -95,7 +94,7 @@ export const GalleryBarAndListHeader: React.FC = ({ setActiveCollectionID, hiddenCollectionSummaries, people, - activePersonID, + activePerson, onSelectPerson, setCollectionNamerAttributes, setPhotoListHeader, @@ -173,10 +172,7 @@ export const GalleryBarAndListHeader: React.FC = ({ /> ) : ( p.id == activePersonID) ?? - people[0], - )} + person={activePerson} {...{ onSelectPerson, appContext }} /> ), @@ -190,7 +186,7 @@ export const GalleryBarAndListHeader: React.FC = ({ activeCollectionID, isActiveCollectionDownloadInProgress, people, - activePersonID, + activePerson, ]); if (shouldBeHidden) { @@ -205,7 +201,7 @@ export const GalleryBarAndListHeader: React.FC = ({ onChangeMode, activeCollectionID, people, - activePersonID, + activePerson, onSelectPerson, collectionsSortBy, }} diff --git a/web/apps/photos/src/pages/gallery.tsx b/web/apps/photos/src/pages/gallery.tsx index 02e1fe97d7..fb516fe35b 100644 --- a/web/apps/photos/src/pages/gallery.tsx +++ b/web/apps/photos/src/pages/gallery.tsx @@ -575,11 +575,10 @@ export default function Gallery() { })) .filter((p) => p.fileIDs.length > 0); } - const activePerson = ensure( + const activePerson = filteredPeople.find((p) => p.id == activePersonID) ?? - filteredPeople[0], - ); - const pfSet = new Set(activePerson.fileIDs); + filteredPeople[0]; + const pfSet = new Set(activePerson?.fileIDs ?? []); filteredFiles = getUniqueFiles( files.filter(({ id }) => { if (!pfSet.has(id)) return false; @@ -728,8 +727,11 @@ export default function Gallery() { count: 0, collectionID: activeCollectionID, context: - barMode == "people" && activePersonID - ? { mode: "people" as const, personID: activePersonID } + barMode == "people" && galleryPeopleState?.activePersonID + ? { + mode: "people" as const, + personID: galleryPeopleState.activePersonID, + } : { mode: "albums" as const, collectionID: ensure(activeCollectionID), @@ -1107,7 +1109,7 @@ export default function Gallery() { // when the user clicks the "People" header in the search empty state (it // is guaranteed that this header will only be shown if there is at // least one person). - setActivePersonID(person?.id ?? ensure(people[0]).id); + setActivePersonID(person?.id ?? galleryPeopleState?.people[0]?.id); setBarMode("people"); }; @@ -1219,8 +1221,9 @@ export default function Gallery() { activeCollectionID, setActiveCollectionID, hiddenCollectionSummaries, - people, - activePersonID, + people: galleryPeopleState?.people, + activePersonID: galleryPeopleState?.activePersonID, + activePerson: galleryPeopleState?.activePerson, onSelectPerson: handleSelectPerson, setCollectionNamerAttributes, setPhotoListHeader, @@ -1296,7 +1299,7 @@ export default function Gallery() { setTempDeletedFileIds={setTempDeletedFileIds} setIsPhotoSwipeOpen={setIsPhotoSwipeOpen} activeCollectionID={activeCollectionID} - activePersonID={activePersonID} + activePersonID={galleryPeopleState?.activePersonID} enableDownload={true} fileToCollectionsMap={fileToCollectionsMap} collectionNameMap={collectionNameMap} diff --git a/web/packages/new/photos/components/Gallery/BarImpl.tsx b/web/packages/new/photos/components/Gallery/BarImpl.tsx index 80a65e8dde..c71ee1fc62 100644 --- a/web/packages/new/photos/components/Gallery/BarImpl.tsx +++ b/web/packages/new/photos/components/Gallery/BarImpl.tsx @@ -94,11 +94,11 @@ export interface GalleryBarImplProps { */ people: Person[]; /** - * The ID of the currently selected person. + * The currently selected person. * * Required if mode is "people". */ - activePersonID: string | undefined; + activePerson: Person | undefined; /** * Called when the selection should be moved to a new person in the bar, or * reset to the default state (when {@link person} is `undefined`). @@ -116,7 +116,7 @@ export const GalleryBarImpl: React.FC = ({ collectionsSortBy, onChangeCollectionsSortBy, people, - activePersonID, + activePerson, onSelectPerson, }) => { const isMobile = useIsMobileWidth(); @@ -194,11 +194,11 @@ export const GalleryBarImpl: React.FC = ({ ); break; case "people": - i = people.findIndex(({ id }) => id == activePersonID); + i = people.findIndex(({ id }) => id == activePerson?.id); break; } if (i != -1) listRef.current.scrollToItem(i, "smart"); - }, [mode, collectionSummaries, activeCollectionID, people, activePersonID]); + }, [mode, collectionSummaries, activeCollectionID, people, activePerson]); const itemData = useMemo( () => @@ -210,12 +210,9 @@ export const GalleryBarImpl: React.FC = ({ onSelectCollectionID, } : { - type: "people", + type: "people" as const, people, - activePerson: ensure( - people.find((p) => p.id == activePersonID) ?? - people[0], - ), + activePerson: ensure(activePerson), onSelectPerson, }, [ @@ -224,7 +221,7 @@ export const GalleryBarImpl: React.FC = ({ activeCollectionID, onSelectCollectionID, people, - activePersonID, + activePerson, onSelectPerson, ], ); From 393878a52edac8f347d2912c2ae7cd247e197d0f Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 11:33:42 +0530 Subject: [PATCH 12/61] More workarounds --- web/apps/photos/src/pages/gallery.tsx | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/web/apps/photos/src/pages/gallery.tsx b/web/apps/photos/src/pages/gallery.tsx index fb516fe35b..881c28ac91 100644 --- a/web/apps/photos/src/pages/gallery.tsx +++ b/web/apps/photos/src/pages/gallery.tsx @@ -528,7 +528,9 @@ export default function Gallery() { }, [collections, activeCollectionID]); // The derived UI state when we are in "people" mode. - // TODO: Move this to a reducer/store. + // + // TODO: This spawns even more workarounds below. Move this to a + // reducer/store. type DerivedState1 = { filteredData: EnteFile[]; galleryPeopleState: GalleryPeopleState | undefined; @@ -697,6 +699,13 @@ export default function Gallery() { setActiveCollectionID(ALL_SECTION); } + // Derived1 is async, leading to even more workarounds. + const resolvedBarMode = galleryPeopleState + ? barMode + : barMode == "people" + ? "albums" + : barMode; + const selectAll = (e: KeyboardEvent) => { // ignore ctrl/cmd + a if the user is typing in a text field if ( @@ -1193,7 +1202,7 @@ export default function Gallery() { marginBottom: "12px", }} > - {barMode == "hidden-albums" ? ( + {resolvedBarMode == "hidden-albums" ? ( @@ -1214,7 +1223,7 @@ export default function Gallery() { )} Date: Fri, 27 Sep 2024 11:46:01 +0530 Subject: [PATCH 13/61] Another --- web/apps/photos/src/pages/gallery.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/web/apps/photos/src/pages/gallery.tsx b/web/apps/photos/src/pages/gallery.tsx index 881c28ac91..a3c3a78937 100644 --- a/web/apps/photos/src/pages/gallery.tsx +++ b/web/apps/photos/src/pages/gallery.tsx @@ -736,13 +736,14 @@ export default function Gallery() { count: 0, collectionID: activeCollectionID, context: - barMode == "people" && galleryPeopleState?.activePersonID + resolvedBarMode == "people" && + galleryPeopleState?.activePersonID ? { mode: "people" as const, personID: galleryPeopleState.activePersonID, } : { - mode: "albums" as const, + mode: resolvedBarMode as "albums" | "hidden-albums", collectionID: ensure(activeCollectionID), }, }; From e2e374fbf4c4a75ce71cabe58a59b90db495d494 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 12:25:53 +0530 Subject: [PATCH 14/61] wip checkpoint --- .../new/photos/components/PeopleList.tsx | 70 +++++++++++++++++++ web/packages/new/photos/services/ml/index.ts | 33 +++++++-- 2 files changed, 98 insertions(+), 5 deletions(-) diff --git a/web/packages/new/photos/components/PeopleList.tsx b/web/packages/new/photos/components/PeopleList.tsx index 1f9862f308..07157b5622 100644 --- a/web/packages/new/photos/components/PeopleList.tsx +++ b/web/packages/new/photos/components/PeopleList.tsx @@ -6,6 +6,7 @@ import { Skeleton, Typography, styled } from "@mui/material"; import { t } from "i18next"; import React, { useEffect, useState } from "react"; import { UnstyledButton } from "./mui-custom"; +import type { CGroup } from "../services/user-entity"; export interface SearchPeopleListProps { people: Person[]; @@ -66,6 +67,75 @@ const SearchPeopleButton = styled(UnstyledButton)( `, ); +export interface CGroupPeopleListProps { + /** + * List of cgroup people to show. + * + * The current types don't reflect this, but these are all guaranteed to be + * {@link Person}s with type "cgroup" + */ + people: Person[]; + /** + * Called when the user selects a person in the list. + */ + onSelectPerson: (person: Person) => void; +} + +/** + * Show the list of faces in the given file that are not linked to a a specific + * cgroup ("people"). + */ +export const CGroupPeopleList: React.FC = ({ + people, + onSelectPerson, +}) => { + const isMobileWidth = useIsMobileWidth(); + return ( + 3 ? "center" : "start" }} + > + {people.slice(0, isMobileWidth ? 6 : 7).map((person) => ( + onSelectPerson(person)} + > + + + ))} + + ); +}; + +const SearchPeopleContainer = styled("div")` + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 5px; + margin-block-start: 12px; + margin-block-end: 15px; +`; + +const SearchPeopleButton = styled(UnstyledButton)( + ({ theme }) => ` + width: 87px; + height: 87px; + border-radius: 50%; + overflow: hidden; + & > img { + width: 100%; + height: 100%; + } + :hover { + outline: 1px solid ${theme.colors.stroke.faint}; + outline-offset: 2px; + } +`, +); + const FaceChipContainer = styled("div")` display: flex; flex-wrap: wrap; diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index f7cc7a9a17..9330cf1e4c 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -593,14 +593,37 @@ export const clipMatches = ( worker().then((w) => w.clipMatches(searchPhrase)); /** - * Return the IDs of all the faces in the given {@link enteFile} that are not - * associated with a person cluster. + * Return the list of faces found in the given {@link enteFile}. + * + * Each item is returned as a (faceID, personID) tuple, where the faceID is the + * ID of the face, and the personID is the id of the corresponding person that + * this face is associated to (if any). */ -export const unidentifiedFaceIDs = async ( +export const peopleIDsAndOtherFaceIDsInFile = async ( enteFile: EnteFile, -): Promise => { +): Promise<[string, string | undefined][]> => { const index = await getFaceIndex(enteFile.id); - return index?.faces.map((f) => f.faceID) ?? []; + if (!index) return []; + + const people = _state.peopleSnapshot ?? []; + + const faceIDToPersonID = new Map(); + for (const person of people) { + let faceIDs: string[]; + if (person.type == "cgroup") { + faceIDs = person.cgroup.data.assigned.map((c) => c.faces).flat(); + } else { + faceIDs = person.cluster.faces; + } + for (const faceID of faceIDs) { + faceIDToPersonID.set(faceID, person.id); + } + } + + return index.faces.map(({ faceID }) => [ + faceID, + faceIDToPersonID.get(faceID), + ]); }; /** From 7a60b1e15ebc4f3629b1829b2334c38f3ce0c881 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 12:34:41 +0530 Subject: [PATCH 15/61] wip checkpoint --- .../components/PhotoViewer/FileInfo/index.tsx | 20 ++++++++++++++++++- web/packages/new/photos/services/ml/index.ts | 2 +- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx index 20157caab7..a8c5957ba9 100644 --- a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx @@ -16,13 +16,14 @@ import { UnidentifiedFaces } from "@/new/photos/components/PeopleList"; import { PhotoDateTimePicker } from "@/new/photos/components/PhotoDateTimePicker"; import { photoSwipeZIndex } from "@/new/photos/components/PhotoViewer"; import { tagNumericValue, type RawExifTags } from "@/new/photos/services/exif"; -import { isMLEnabled } from "@/new/photos/services/ml"; +import { annotatedFaceIDsForFile, isMLEnabled } from "@/new/photos/services/ml"; import { EnteFile } from "@/new/photos/types/file"; import { formattedByteSize } from "@/new/photos/utils/units"; import CopyButton from "@ente/shared/components/CodeBlock/CopyButton"; import { FlexWrapper } from "@ente/shared/components/Container"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; import { getPublicMagicMetadataSync } from "@ente/shared/file-metadata"; +import useMemoSingleThreaded from "@ente/shared/hooks/useMemoSingleThreaded"; import { formatDate, formatTime } from "@ente/shared/time/format"; import CalendarTodayIcon from "@mui/icons-material/CalendarToday"; import CameraOutlined from "@mui/icons-material/CameraOutlined"; @@ -106,6 +107,23 @@ export const FileInfo: React.FC = ({ return exif?.parsed?.location; }, [file, exif]); + const [annotatedPeopleFaceIDs, otherFaceIDs] = + useMemoSingleThreaded(async () => { + if (!file) return [[], []]; + const annotatedFaceIDs = await annotatedFaceIDsForFile(file); + return annotatedFaceIDs.reduce( + ([people, other], item) => { + if (item[1]) { + people.push(item); + } else { + other.push(item[0]); + } + return [people, other]; + }, + [[], []], + ); + }, [file]); + useEffect(() => { setExifInfo(parseExifInfo(exif)); }, [exif]); diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 9330cf1e4c..70d6762349 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -599,7 +599,7 @@ export const clipMatches = ( * ID of the face, and the personID is the id of the corresponding person that * this face is associated to (if any). */ -export const peopleIDsAndOtherFaceIDsInFile = async ( +export const annotatedFaceIDsForFile = async ( enteFile: EnteFile, ): Promise<[string, string | undefined][]> => { const index = await getFaceIndex(enteFile.id); From 4e04739d546ea3510f14346037c6d56c310598e3 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 12:54:17 +0530 Subject: [PATCH 16/61] wip checkpoint --- .../components/PhotoViewer/FileInfo/index.tsx | 32 ++++++------ .../new/photos/components/PeopleList.tsx | 43 ++++------------ web/packages/new/photos/services/ml/index.ts | 49 ++++++++++++++----- 3 files changed, 63 insertions(+), 61 deletions(-) diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx index a8c5957ba9..bfd86e0db3 100644 --- a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx @@ -16,7 +16,7 @@ import { UnidentifiedFaces } from "@/new/photos/components/PeopleList"; import { PhotoDateTimePicker } from "@/new/photos/components/PhotoDateTimePicker"; import { photoSwipeZIndex } from "@/new/photos/components/PhotoViewer"; import { tagNumericValue, type RawExifTags } from "@/new/photos/services/exif"; -import { annotatedFaceIDsForFile, isMLEnabled } from "@/new/photos/services/ml"; +import { annotatedFaceIDsForFile, AnnotatedFacesForFile, getAnnotatedFacesForFile, getFacesForFile, isMLEnabled } from "@/new/photos/services/ml"; import { EnteFile } from "@/new/photos/types/file"; import { formattedByteSize } from "@/new/photos/utils/units"; import CopyButton from "@ente/shared/components/CodeBlock/CopyButton"; @@ -98,6 +98,7 @@ export const FileInfo: React.FC = ({ const [exifInfo, setExifInfo] = useState(); const [openRawExif, setOpenRawExif] = useState(false); + const [annotatedFaces, setAnnotatedFaces] = useState(); const location = useMemo(() => { if (file) { @@ -107,23 +108,19 @@ export const FileInfo: React.FC = ({ return exif?.parsed?.location; }, [file, exif]); - const [annotatedPeopleFaceIDs, otherFaceIDs] = - useMemoSingleThreaded(async () => { - if (!file) return [[], []]; - const annotatedFaceIDs = await annotatedFaceIDsForFile(file); - return annotatedFaceIDs.reduce( - ([people, other], item) => { - if (item[1]) { - people.push(item); - } else { - other.push(item[0]); - } - return [people, other]; - }, - [[], []], - ); + + useEffect(() => { + let didCancel = false; + + void (async () => { + const result = await getAnnotatedFacesForFile(file); + !didCancel && setAnnotatedFaces(result); + })(); + + return () => { didCancel = true;} }, [file]); + useEffect(() => { setExifInfo(parseExifInfo(exif)); }, [exif]); @@ -287,7 +284,8 @@ export const FileInfo: React.FC = ({ {isMLEnabled() && ( <> - {/* TODO-Cluster */} + {annotatedFaces?.annotatedFaceIDs.length && + // {/* TODO-Cluster */} )} diff --git a/web/packages/new/photos/components/PeopleList.tsx b/web/packages/new/photos/components/PeopleList.tsx index 07157b5622..3553ed78aa 100644 --- a/web/packages/new/photos/components/PeopleList.tsx +++ b/web/packages/new/photos/components/PeopleList.tsx @@ -1,12 +1,11 @@ import { useIsMobileWidth } from "@/base/hooks"; -import { faceCrop, unidentifiedFaceIDs } from "@/new/photos/services/ml"; +import { faceCrop, type AnnotatedFaceID } from "@/new/photos/services/ml"; import type { Person } from "@/new/photos/services/ml/people"; import type { EnteFile } from "@/new/photos/types/file"; import { Skeleton, Typography, styled } from "@mui/material"; import { t } from "i18next"; import React, { useEffect, useState } from "react"; import { UnstyledButton } from "./mui-custom"; -import type { CGroup } from "../services/user-entity"; export interface SearchPeopleListProps { people: Person[]; @@ -67,28 +66,21 @@ const SearchPeopleButton = styled(UnstyledButton)( `, ); -export interface CGroupPeopleListProps { +export interface AnnotatedFacePeopleListProps { + annotatedFaceIDs: AnnotatedFaceID[]; /** - * List of cgroup people to show. - * - * The current types don't reflect this, but these are all guaranteed to be - * {@link Person}s with type "cgroup" + * Called when the user selects a face in the list. */ - people: Person[]; - /** - * Called when the user selects a person in the list. - */ - onSelectPerson: (person: Person) => void; + onSelectFace: (annotatedFaceID: AnnotatedFaceID) => void; } /** - * Show the list of faces in the given file that are not linked to a a specific - * cgroup ("people"). + * Show the list of faces in the given file that are associated with a specific + * person. */ -export const CGroupPeopleList: React.FC = ({ - people, - onSelectPerson, -}) => { +export const AnnotatedFacePeopleList: React.FC< + AnnotatedFacePeopleListProps +> = ({ annotatedFaceIDs, onSelectFace }) => { const isMobileWidth = useIsMobileWidth(); return ( = ({ }) => { const [faceIDs, setFaceIDs] = useState([]); - useEffect(() => { - let didCancel = false; - - const go = async () => { - const faceIDs = await unidentifiedFaceIDs(enteFile); - !didCancel && setFaceIDs(faceIDs); - }; - - void go(); - - return () => { - didCancel = true; - }; - }, [enteFile]); - if (faceIDs.length == 0) return <>; return ( diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 70d6762349..bc7db78572 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -592,18 +592,39 @@ export const clipMatches = ( ): Promise => worker().then((w) => w.clipMatches(searchPhrase)); +/** A face ID annotated with the ID of the person to which it is associated. */ +export interface AnnotatedFaceID { + faceID: string; + personID: string; +} + +/** + * List of faces found in a file + * + * It is actually a pair of lists, one annotated by the person ids, and one with + * just the face ids. + */ +export interface AnnotatedFacesForFile { + /** + * A list of {@link AnnotatedFaceID}s for all faces in the file that are + * also associated with a {@link Person}. + */ + annotatedFaceIDs: AnnotatedFaceID[]; + /* A list of the remaining face (ids). */ + otherFaceIDs: string[]; +} + /** * Return the list of faces found in the given {@link enteFile}. - * - * Each item is returned as a (faceID, personID) tuple, where the faceID is the - * ID of the face, and the personID is the id of the corresponding person that - * this face is associated to (if any). */ -export const annotatedFaceIDsForFile = async ( +export const getAnnotatedFacesForFile = async ( enteFile: EnteFile, -): Promise<[string, string | undefined][]> => { +): Promise => { + const annotatedFaceIDs: AnnotatedFaceID[] = []; + const otherFaceIDs: string[] = []; + const index = await getFaceIndex(enteFile.id); - if (!index) return []; + if (!index) return { annotatedFaceIDs, otherFaceIDs }; const people = _state.peopleSnapshot ?? []; @@ -620,10 +641,16 @@ export const annotatedFaceIDsForFile = async ( } } - return index.faces.map(({ faceID }) => [ - faceID, - faceIDToPersonID.get(faceID), - ]); + for (const { faceID } of index.faces) { + const personID = faceIDToPersonID.get(faceID); + if (personID) { + annotatedFaceIDs.push({ faceID, personID }); + } else { + otherFaceIDs.push(faceID); + } + } + + return { annotatedFaceIDs, otherFaceIDs }; }; /** From 2827a166dccc0a1bd1d689db563ed1641e4b089e Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 13:23:17 +0530 Subject: [PATCH 17/61] people list checkpoint --- .../components/PhotoViewer/FileInfo/index.tsx | 55 +++++-- .../new/photos/components/PeopleList.tsx | 153 +++++++++--------- 2 files changed, 118 insertions(+), 90 deletions(-) diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx index bfd86e0db3..ead1211fdc 100644 --- a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx @@ -12,18 +12,25 @@ import { type ParsedMetadataDate, } from "@/media/file-metadata"; import { FileType } from "@/media/file-type"; -import { UnidentifiedFaces } from "@/new/photos/components/PeopleList"; +import { + AnnotatedFacePeopleList, + UnclusteredFaceList, +} from "@/new/photos/components/PeopleList"; import { PhotoDateTimePicker } from "@/new/photos/components/PhotoDateTimePicker"; import { photoSwipeZIndex } from "@/new/photos/components/PhotoViewer"; import { tagNumericValue, type RawExifTags } from "@/new/photos/services/exif"; -import { annotatedFaceIDsForFile, AnnotatedFacesForFile, getAnnotatedFacesForFile, getFacesForFile, isMLEnabled } from "@/new/photos/services/ml"; +import { + AnnotatedFacesForFile, + getAnnotatedFacesForFile, + isMLEnabled, + type AnnotatedFaceID, +} from "@/new/photos/services/ml"; import { EnteFile } from "@/new/photos/types/file"; import { formattedByteSize } from "@/new/photos/utils/units"; import CopyButton from "@ente/shared/components/CodeBlock/CopyButton"; import { FlexWrapper } from "@ente/shared/components/Container"; import EnteSpinner from "@ente/shared/components/EnteSpinner"; import { getPublicMagicMetadataSync } from "@ente/shared/file-metadata"; -import useMemoSingleThreaded from "@ente/shared/hooks/useMemoSingleThreaded"; import { formatDate, formatTime } from "@ente/shared/time/format"; import CalendarTodayIcon from "@mui/icons-material/CalendarToday"; import CameraOutlined from "@mui/icons-material/CameraOutlined"; @@ -98,7 +105,9 @@ export const FileInfo: React.FC = ({ const [exifInfo, setExifInfo] = useState(); const [openRawExif, setOpenRawExif] = useState(false); - const [annotatedFaces, setAnnotatedFaces] = useState(); + const [annotatedFaces, setAnnotatedFaces] = useState< + AnnotatedFacesForFile | undefined + >(); const location = useMemo(() => { if (file) { @@ -108,18 +117,20 @@ export const FileInfo: React.FC = ({ return exif?.parsed?.location; }, [file, exif]); + useEffect(() => { + if (!file) return; - useEffect(() => { - let didCancel = false; + let didCancel = false; - void (async () => { - const result = await getAnnotatedFacesForFile(file); - !didCancel && setAnnotatedFaces(result); - })(); - - return () => { didCancel = true;} - }, [file]); + void (async () => { + const result = await getAnnotatedFacesForFile(file); + !didCancel && setAnnotatedFaces(result); + })(); + return () => { + didCancel = true; + }; + }, [file]); useEffect(() => { setExifInfo(parseExifInfo(exif)); @@ -144,6 +155,10 @@ export const FileInfo: React.FC = ({ getMapDisableConfirmationDialog(() => updateMapEnabled(false)), ); + const handleSelectFace = (annotatedFaceID: AnnotatedFaceID) => { + console.log(annotatedFaceID); + }; + return ( @@ -282,11 +297,17 @@ export const FileInfo: React.FC = ({ )} - {isMLEnabled() && ( + {isMLEnabled() && annotatedFaces && ( <> - {annotatedFaces?.annotatedFaceIDs.length && - // {/* TODO-Cluster */} - + + )} diff --git a/web/packages/new/photos/components/PeopleList.tsx b/web/packages/new/photos/components/PeopleList.tsx index 3553ed78aa..8ced5627e2 100644 --- a/web/packages/new/photos/components/PeopleList.tsx +++ b/web/packages/new/photos/components/PeopleList.tsx @@ -1,4 +1,5 @@ import { useIsMobileWidth } from "@/base/hooks"; +import { pt } from "@/base/i18n"; import { faceCrop, type AnnotatedFaceID } from "@/new/photos/services/ml"; import type { Person } from "@/new/photos/services/ml/people"; import type { EnteFile } from "@/new/photos/types/file"; @@ -25,7 +26,7 @@ export const SearchPeopleList: React.FC = ({ sx={{ justifyContent: people.length > 3 ? "center" : "start" }} > {people.slice(0, isMobileWidth ? 6 : 7).map((person) => ( - onSelectPerson(person)} > @@ -34,7 +35,7 @@ export const SearchPeopleList: React.FC = ({ enteFile={person.displayFaceFile} placeholderDimension={87} /> - + ))} ); @@ -49,7 +50,7 @@ const SearchPeopleContainer = styled("div")` margin-block-end: 15px; `; -const SearchPeopleButton = styled(UnstyledButton)( +const SearchPersonButton = styled(UnstyledButton)( ({ theme }) => ` width: 87px; height: 87px; @@ -67,6 +68,13 @@ const SearchPeopleButton = styled(UnstyledButton)( ); export interface AnnotatedFacePeopleListProps { + /** + * The {@link EnteFile} whose information we are showing. + */ + enteFile: EnteFile; + /** + * The list of faces in the file that are associated with a person. + */ annotatedFaceIDs: AnnotatedFaceID[]; /** * Called when the user selects a face in the list. @@ -80,41 +88,43 @@ export interface AnnotatedFacePeopleListProps { */ export const AnnotatedFacePeopleList: React.FC< AnnotatedFacePeopleListProps -> = ({ annotatedFaceIDs, onSelectFace }) => { - const isMobileWidth = useIsMobileWidth(); +> = ({ enteFile, annotatedFaceIDs, onSelectFace }) => { + if (annotatedFaceIDs.length == 0) return <>; + return ( - 3 ? "center" : "start" }} - > - {people.slice(0, isMobileWidth ? 6 : 7).map((person) => ( - onSelectPerson(person)} - > - - - ))} - + <> + + {t("people")} + + + {annotatedFaceIDs.map((annotatedFaceID) => ( + onSelectFace(annotatedFaceID)} + > + + + ))} + + ); }; -const SearchPeopleContainer = styled("div")` +const AnnotatedFacePeopleContainer = styled("div")` display: flex; flex-wrap: wrap; align-items: center; gap: 5px; - margin-block-start: 12px; - margin-block-end: 15px; `; -const SearchPeopleButton = styled(UnstyledButton)( +const AnnotatedFaceButton = styled(UnstyledButton)( ({ theme }) => ` - width: 87px; - height: 87px; + width: 112px; + height: 112px; border-radius: 50%; overflow: hidden; & > img { @@ -128,7 +138,48 @@ const SearchPeopleButton = styled(UnstyledButton)( `, ); -const FaceChipContainer = styled("div")` +export interface UnclusteredFaceListProps { + /** + * The {@link EnteFile} whose information we are showing. + */ + enteFile: EnteFile; + /** + * The list of faces in the file that are not associated with a person. + */ + faceIDs: string[]; +} + +/** + * Show the list of faces in the given file that are not associated with a + * specific person. + */ +export const UnclusteredFaceList: React.FC = ({ + enteFile, + faceIDs, +}) => { + if (faceIDs.length == 0) return <>; + + return ( + <> + + {pt("Other faces")} + {/*t("UNIDENTIFIED_FACES") TODO-Cluster */} + + + {faceIDs.map((faceID) => ( + + + + ))} + + + ); +}; + +const UnclusteredFacesContainer = styled("div")` display: flex; flex-wrap: wrap; justify-content: center; @@ -138,63 +189,19 @@ const FaceChipContainer = styled("div")` overflow: auto; `; -const FaceChip = styled("div")<{ clickable?: boolean }>` +const UnclusteredFace = styled("div")` width: 112px; height: 112px; margin: 5px; border-radius: 50%; overflow: hidden; position: relative; - cursor: ${({ clickable }) => (clickable ? "pointer" : "normal")}; & > img { width: 100%; height: 100%; } `; -export interface PhotoPeopleListProps { - file: EnteFile; - onSelect?: (person: Person, index: number) => void; -} - -export function PhotoPeopleList() { - return <>; -} - -interface UnidentifiedFacesProps { - enteFile: EnteFile; -} - -/** - * Show the list of faces in the given file that are not linked to a specific - * person ("face cluster"). - */ -export const UnidentifiedFaces: React.FC = ({ - enteFile, -}) => { - const [faceIDs, setFaceIDs] = useState([]); - - if (faceIDs.length == 0) return <>; - - return ( - <> - - {t("UNIDENTIFIED_FACES")} - - - {faceIDs.map((faceID) => ( - - - - ))} - - - ); -}; - interface FaceCropImageViewProps { /** The ID of the face to display. */ faceID: string; From 8a953cab88fd44d5a37342555ffad16cbfb8e739 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 13:33:03 +0530 Subject: [PATCH 18/61] Fix alignment etc --- .../new/photos/components/PeopleList.tsx | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/web/packages/new/photos/components/PeopleList.tsx b/web/packages/new/photos/components/PeopleList.tsx index 8ced5627e2..ba7711af59 100644 --- a/web/packages/new/photos/components/PeopleList.tsx +++ b/web/packages/new/photos/components/PeopleList.tsx @@ -96,7 +96,7 @@ export const AnnotatedFacePeopleList: React.FC< {t("people")} - + {annotatedFaceIDs.map((annotatedFaceID) => ( ))} - + ); }; -const AnnotatedFacePeopleContainer = styled("div")` +const FileFaceList = styled("div")` display: flex; flex-wrap: wrap; + justify-content: center; align-items: center; gap: 5px; + margin: 5px; `; const AnnotatedFaceButton = styled(UnstyledButton)( @@ -165,7 +167,7 @@ export const UnclusteredFaceList: React.FC = ({ {pt("Other faces")} {/*t("UNIDENTIFIED_FACES") TODO-Cluster */} - + {faceIDs.map((faceID) => ( = ({ /> ))} - + ); }; -const UnclusteredFacesContainer = styled("div")` - display: flex; - flex-wrap: wrap; - justify-content: center; - align-items: center; - margin-top: 5px; - margin-bottom: 5px; - overflow: auto; -`; - const UnclusteredFace = styled("div")` width: 112px; height: 112px; margin: 5px; border-radius: 50%; overflow: hidden; - position: relative; & > img { width: 100%; height: 100%; From 57d245d9e04378fa978555a419d2b27353618f9d Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 13:54:09 +0530 Subject: [PATCH 19/61] Select person --- web/apps/photos/src/components/PhotoFrame.tsx | 5 ++++- .../src/components/PhotoViewer/FileInfo/index.tsx | 12 ++++++++++-- web/apps/photos/src/components/PhotoViewer/index.tsx | 9 ++++++--- web/apps/photos/src/pages/gallery.tsx | 6 ++++++ 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/web/apps/photos/src/components/PhotoFrame.tsx b/web/apps/photos/src/components/PhotoFrame.tsx index 59bb80b954..ccf0908a2b 100644 --- a/web/apps/photos/src/components/PhotoFrame.tsx +++ b/web/apps/photos/src/components/PhotoFrame.tsx @@ -8,7 +8,7 @@ import { PHOTOS_PAGES } from "@ente/shared/constants/pages"; import { CustomError } from "@ente/shared/error"; import useMemoSingleThreaded from "@ente/shared/hooks/useMemoSingleThreaded"; import { styled } from "@mui/material"; -import PhotoViewer from "components/PhotoViewer"; +import PhotoViewer, { type PhotoViewerProps } from "components/PhotoViewer"; import { useRouter } from "next/router"; import { GalleryContext } from "pages/gallery"; import PhotoSwipe from "photoswipe"; @@ -72,6 +72,7 @@ interface Props { isInHiddenSection?: boolean; setFilesDownloadProgressAttributesCreator?: SetFilesDownloadProgressAttributesCreator; selectable?: boolean; + onSelectPerson?: PhotoViewerProps["onSelectPerson"]; } const PhotoFrame = ({ @@ -95,6 +96,7 @@ const PhotoFrame = ({ isInHiddenSection, setFilesDownloadProgressAttributesCreator, selectable, + onSelectPerson, }: Props) => { const [open, setOpen] = useState(false); const [currentIndex, setCurrentIndex] = useState(0); @@ -580,6 +582,7 @@ const PhotoFrame = ({ setFilesDownloadProgressAttributesCreator={ setFilesDownloadProgressAttributesCreator } + onSelectPerson={onSelectPerson} /> ); diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx index ead1211fdc..a528aa1c2e 100644 --- a/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx @@ -69,7 +69,7 @@ export interface FileInfoExif { parsed: ParsedMetadata | undefined; } -interface FileInfoProps { +export interface FileInfoProps { showInfo: boolean; handleCloseInfo: () => void; closePhotoViewer: () => void; @@ -81,6 +81,10 @@ interface FileInfoProps { fileToCollectionsMap?: Map; collectionNameMap?: Map; showCollectionChips: boolean; + /** + * Called when the user selects a person in the file info panel. + */ + onSelectPerson?: ((personID: string) => void) | undefined; } export const FileInfo: React.FC = ({ @@ -95,6 +99,7 @@ export const FileInfo: React.FC = ({ collectionNameMap, showCollectionChips, closePhotoViewer, + onSelectPerson, }) => { const { mapEnabled, updateMapEnabled, setDialogBoxAttributesV2 } = useContext(AppContext); @@ -156,7 +161,10 @@ export const FileInfo: React.FC = ({ ); const handleSelectFace = (annotatedFaceID: AnnotatedFaceID) => { - console.log(annotatedFaceID); + if (onSelectPerson) { + onSelectPerson(annotatedFaceID.personID); + closePhotoViewer(); + } }; return ( diff --git a/web/apps/photos/src/components/PhotoViewer/index.tsx b/web/apps/photos/src/components/PhotoViewer/index.tsx index 10d2f310e2..b15f1e3f44 100644 --- a/web/apps/photos/src/components/PhotoViewer/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/index.tsx @@ -48,7 +48,7 @@ import { SetFilesDownloadProgressAttributesCreator } from "types/gallery"; import { pauseVideo, playVideo } from "utils/photoFrame"; import { PublicCollectionGalleryContext } from "utils/publicCollectionGallery"; import { getTrashFileMessage } from "utils/ui"; -import { FileInfo, type FileInfoExif } from "./FileInfo"; +import { FileInfo, type FileInfoExif, type FileInfoProps } from "./FileInfo"; import ImageEditorOverlay from "./ImageEditorOverlay"; import CircularProgressWithLabel from "./styledComponents/CircularProgressWithLabel"; import { ConversionFailedNotification } from "./styledComponents/ConversionFailedNotification"; @@ -98,7 +98,8 @@ const CaptionContainer = styled("div")(({ theme }) => ({ backgroundColor: theme.colors.backdrop.faint, backdropFilter: `blur(${theme.colors.blur.base})`, })); -interface Iprops { + +export interface PhotoViewerProps { isOpen: boolean; items: any[]; currentIndex?: number; @@ -115,9 +116,10 @@ interface Iprops { fileToCollectionsMap: Map; collectionNameMap: Map; setFilesDownloadProgressAttributesCreator: SetFilesDownloadProgressAttributesCreator; + onSelectPerson?: FileInfoProps["onSelectPerson"]; } -function PhotoViewer(props: Iprops) { +function PhotoViewer(props: PhotoViewerProps) { const galleryContext = useContext(GalleryContext); const appContext = useContext(AppContext); const publicCollectionGalleryContext = useContext( @@ -969,6 +971,7 @@ function PhotoViewer(props: Iprops) { refreshPhotoswipe={refreshPhotoswipe} fileToCollectionsMap={props.fileToCollectionsMap} collectionNameMap={props.collectionNameMap} + onSelectPerson={props.onSelectPerson} /> { + setActivePersonID(personID); + setBarMode("people"); + }; + if (!collectionSummaries || !filteredData) { return
; } @@ -1321,6 +1326,7 @@ export default function Gallery() { setFilesDownloadProgressAttributesCreator } selectable={true} + onSelectPerson={handleSelectFileInfoPerson} /> )} {selected.count > 0 && From 7bdbaec4432287d75e7c2c01f5ed85a640881bfe Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 14:01:44 +0530 Subject: [PATCH 20/61] Unconditionally enable for internal --- web/packages/new/photos/services/ml/index.ts | 26 +++++++------------ web/packages/new/photos/services/ml/people.ts | 3 --- 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index bc7db78572..6de92a6205 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -5,7 +5,6 @@ import { isDesktop } from "@/base/app"; import { blobCache } from "@/base/blob-cache"; import { ensureElectron } from "@/base/electron"; -import { isDevBuild } from "@/base/env"; import log from "@/base/log"; import { masterKeyFromSession } from "@/base/session-store"; import type { Electron } from "@/base/types/ipc"; @@ -327,16 +326,17 @@ export const mlSync = async () => { const workerDidUnawaitedIndex = () => void updateClustersAndPeople(); const updateClustersAndPeople = async () => { - // TODO-Cluster - if (await wipClusterEnable()) { - const masterKey = await masterKeyFromSession(); + if (!(await isInternalUser())) return; - // Fetch existing cgroups from remote. - await pullUserEntities("cgroup", masterKey); + const masterKey = await masterKeyFromSession(); - // Generate or update local clusters. - await (await worker()).clusterFaces(masterKey); - } + // Fetch existing cgroups from remote. + await pullUserEntities("cgroup", masterKey); + + // Generate or update local clusters. + await (await worker()).clusterFaces(masterKey); + + // Update the people shown in the UI. await updatePeople(); }; @@ -364,14 +364,6 @@ export const indexNewUpload = (enteFile: EnteFile, uploadItem: UploadItem) => { void worker().then((w) => w.onUpload(enteFile, uploadItem)); }; -/** - * WIP! Don't enable, dragon eggs are hatching here. - * TODO-Cluster - */ -export const wipClusterEnable = async (): Promise => - (!!process.env.NEXT_PUBLIC_ENTE_WIP_CL && isDevBuild) || - (await isInternalUser()); - export type MLStatus = | { phase: "disabled" /* The ML remote flag is off */ } | { diff --git a/web/packages/new/photos/services/ml/people.ts b/web/packages/new/photos/services/ml/people.ts index 827d78acca..79e9152b86 100644 --- a/web/packages/new/photos/services/ml/people.ts +++ b/web/packages/new/photos/services/ml/people.ts @@ -1,4 +1,3 @@ -import { wipClusterEnable } from "."; import type { EnteFile } from "../../types/file"; import { getLocalFiles } from "../files"; import { savedCGroups, type CGroup } from "../user-entity"; @@ -138,8 +137,6 @@ export type Person = ( * reference. */ export const reconstructPeople = async (): Promise => { - if (!(await wipClusterEnable())) return []; - const files = await getLocalFiles("normal"); const fileByID = new Map(files.map((f) => [f.id, f])); From 01f31c352b90044f36880e78c825b8b6c86a1846 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 16:47:35 +0530 Subject: [PATCH 21/61] Support face crops --- .../new/photos/components/ItemCards.tsx | 61 ++++++++++++++++--- web/packages/new/photos/services/download.ts | 12 ++++ 2 files changed, 66 insertions(+), 7 deletions(-) diff --git a/web/packages/new/photos/components/ItemCards.tsx b/web/packages/new/photos/components/ItemCards.tsx index 95aab19609..9a5de57b20 100644 --- a/web/packages/new/photos/components/ItemCards.tsx +++ b/web/packages/new/photos/components/ItemCards.tsx @@ -6,6 +6,7 @@ import downloadManager from "@/new/photos/services/download"; import { type EnteFile } from "@/new/photos/types/file"; import { styled } from "@mui/material"; import React, { useEffect, useState } from "react"; +import { faceCrop } from "../services/ml"; interface ItemCardProps { /** @@ -16,11 +17,17 @@ interface ItemCardProps { * Optional file whose thumbnail (if any) should be should be shown. */ coverFile?: EnteFile | undefined; + /** + * Optional ID of a specific face within {@link coverFile} to show. + * + * Precondition: {@link faceID} must be an ID of a face that belongs to the + * given {@link coverFile}. + */ + coverFaceID?: string | undefined; /** * Optional boolean indicating if the user is currently scrolling. * - * This is used as a hint by the cover file downloader to prioritize - * downloads. + * This is used as a hint by the file downloader to prioritize downloads. */ isScrolling?: boolean; /** @@ -28,25 +35,65 @@ interface ItemCardProps { */ onClick?: () => void; } + /** * A generic card that can be be used to represent collections, files, people - * anything that (usually) has an associated "cover photo". + * + * Usually, we provide it a {@link coverFile} prop to set the file whose + * thumbnail should be shown in the card. However, an additional + * {@link coverFaceID} prop can be used to show the face crop for that specific + * face within the cover file. + * + * Note that while the common use case is to use this with a cover photo (and an + * additional cover faceID), both of these are optional and the item card can + * also be used as a static component without an associated cover image by + * covering it with an opaque overlay. */ export const ItemCard: React.FC> = ({ TileComponent, coverFile, + coverFaceID, isScrolling, onClick, children, }) => { - const [coverImageURL, setCoverImageURL] = useState(""); + const [coverImageURL, setCoverImageURL] = useState(); useEffect(() => { if (!coverFile) return; - void downloadManager - .getThumbnailForPreview(coverFile, isScrolling) - .then((url) => url && setCoverImageURL(url)); - }, [coverFile, isScrolling]); + + let didCancel = false; + let thisObjectURL: string | undefined; + + const go = async () => { + if (coverFaceID) { + const blob = await faceCrop(coverFaceID, coverFile); + if (!didCancel) { + thisObjectURL = blob + ? URL.createObjectURL(blob) + : undefined; + setCoverImageURL(thisObjectURL); + } + } else { + const url = await downloadManager.getThumbnailForPreview( + coverFile, + isScrolling, + ); + if (!didCancel) { + thisObjectURL = url; + setCoverImageURL(thisObjectURL); + } + } + }; + + void go(); + + return () => { + didCancel = true; + if (thisObjectURL) URL.revokeObjectURL(thisObjectURL); + }; + }, [coverFile, coverFaceID, isScrolling]); return ( diff --git a/web/packages/new/photos/services/download.ts b/web/packages/new/photos/services/download.ts index 4d76e29ac2..a126fdf724 100644 --- a/web/packages/new/photos/services/download.ts +++ b/web/packages/new/photos/services/download.ts @@ -144,6 +144,18 @@ class DownloadManagerImpl { return thumb; } + /** + * Resolves with an object URL that points to the file's thumbnail. + * + * The thumbnail will be downloaded (unless {@link localOnly} is true) and + * cached. + * + * The optional {@link localOnly} parameter can be set to indicate that this + * is being called as part of a scroll, so the downloader should not attempt + * to download the file but should instead fulfill the request from the + * cache. This avoids an unbounded flurry of requests on scroll, only + * downloading when the position has quiescized. + */ async getThumbnailForPreview( file: EnteFile, localOnly = false, From 4bb6aa2b39a133d340f41bfad49ccdecfee1835c Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 16:48:18 +0530 Subject: [PATCH 22/61] Use --- web/packages/new/photos/components/Gallery/BarImpl.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/web/packages/new/photos/components/Gallery/BarImpl.tsx b/web/packages/new/photos/components/Gallery/BarImpl.tsx index c71ee1fc62..089e8df0e2 100644 --- a/web/packages/new/photos/components/Gallery/BarImpl.tsx +++ b/web/packages/new/photos/components/Gallery/BarImpl.tsx @@ -583,6 +583,7 @@ const PersonCard: React.FC = ({ onSelectPerson(person)} > {person.name && } From 370d4af0085e39cb55f02a96a6b23eb6d33daaed Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 17:02:51 +0530 Subject: [PATCH 23/61] Thumbnails shouldn't be revoked So make the face crops behave the same too --- .../new/photos/components/ItemCards.tsx | 33 +++++-------------- .../new/photos/components/PeopleList.tsx | 15 ++++----- web/packages/new/photos/services/download.ts | 5 ++- web/packages/new/photos/services/ml/index.ts | 28 ++++++++++++++-- 4 files changed, 44 insertions(+), 37 deletions(-) diff --git a/web/packages/new/photos/components/ItemCards.tsx b/web/packages/new/photos/components/ItemCards.tsx index 9a5de57b20..8c73fb3ad6 100644 --- a/web/packages/new/photos/components/ItemCards.tsx +++ b/web/packages/new/photos/components/ItemCards.tsx @@ -64,34 +64,19 @@ export const ItemCard: React.FC> = ({ if (!coverFile) return; let didCancel = false; - let thisObjectURL: string | undefined; - const go = async () => { - if (coverFaceID) { - const blob = await faceCrop(coverFaceID, coverFile); - if (!didCancel) { - thisObjectURL = blob - ? URL.createObjectURL(blob) - : undefined; - setCoverImageURL(thisObjectURL); - } - } else { - const url = await downloadManager.getThumbnailForPreview( - coverFile, - isScrolling, - ); - if (!didCancel) { - thisObjectURL = url; - setCoverImageURL(thisObjectURL); - } - } - }; - - void go(); + if (coverFaceID) { + void faceCrop(coverFaceID, coverFile).then( + (url) => !didCancel && setCoverImageURL(url), + ); + } else { + void downloadManager + .getThumbnailForPreview(coverFile, isScrolling) + .then((url) => !didCancel && setCoverImageURL(url)); + } return () => { didCancel = true; - if (thisObjectURL) URL.revokeObjectURL(thisObjectURL); }; }, [coverFile, coverFaceID, isScrolling]); diff --git a/web/packages/new/photos/components/PeopleList.tsx b/web/packages/new/photos/components/PeopleList.tsx index ba7711af59..ac41dc7deb 100644 --- a/web/packages/new/photos/components/PeopleList.tsx +++ b/web/packages/new/photos/components/PeopleList.tsx @@ -216,25 +216,22 @@ const FaceCropImageView: React.FC = ({ enteFile, placeholderDimension, }) => { - const [objectURL, setObjectURL] = useState(); + const [url, setURL] = useState(); useEffect(() => { let didCancel = false; - let thisObjectURL: string | undefined; - void faceCrop(faceID, enteFile).then((blob) => { - if (blob && !didCancel) - setObjectURL((thisObjectURL = URL.createObjectURL(blob))); - }); + void faceCrop(faceID, enteFile).then( + (url) => !didCancel && setURL(url), + ); return () => { didCancel = true; - if (thisObjectURL) URL.revokeObjectURL(thisObjectURL); }; }, [faceID, enteFile]); - return objectURL ? ( - + return url ? ( + ) : ( >(); + + /** + * Cached object URLs to face crops that we have previously vended out. + * + * The cache is only cleared on logout. + */ + faceCropObjectURLCache = new Map(); } /** State shared by the functions in this module. See {@link MLState}. */ @@ -187,6 +194,9 @@ export const logoutML = async () => { // execution contexts], it gets called first in the logout sequence, and // then this function (`logoutML`) gets called at a later point in time. + [..._state.faceCropObjectURLCache.values()].forEach((url) => + URL.revokeObjectURL(url), + ); _state = new MLState(); await clearMLDB(); }; @@ -646,7 +656,10 @@ export const getAnnotatedFacesForFile = async ( }; /** - * Return the cached face crop for the given face, regenerating it if needed. + * Return a URL to the face crop for the given face, regenerating it if needed. + * + * The resultant URL is cached (both the object URL itself, and the underlying + * file crop blob used to generete it). * * @param faceID The id of the face whose face crop we want. * @@ -662,8 +675,17 @@ export const faceCrop = async (faceID: string, enteFile: EnteFile) => { await inFlight; - const cache = await blobCache("face-crops"); - return cache.get(faceID); + let url = _state.faceCropObjectURLCache.get(faceID); + if (!url) { + const cache = await blobCache("face-crops"); + const blob = await cache.get(faceID); + if (blob) { + url = URL.createObjectURL(blob); + if (url) _state.faceCropObjectURLCache.set(faceID, url); + } + } + + return url; }; /** From eafc8fc4cbca64b41180ea3b14554e32b9c0e126 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 17:11:47 +0530 Subject: [PATCH 24/61] Fix logout --- web/apps/photos/src/pages/gallery.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/apps/photos/src/pages/gallery.tsx b/web/apps/photos/src/pages/gallery.tsx index 86a3b88e02..8d617af009 100644 --- a/web/apps/photos/src/pages/gallery.tsx +++ b/web/apps/photos/src/pages/gallery.tsx @@ -562,11 +562,11 @@ export default function Gallery() { selectedSearchOption.suggestion, ); } else if (barMode == "people") { - let filteredPeople = people; + let filteredPeople = people ?? []; if (tempDeletedFileIds?.size ?? tempHiddenFileIds?.size) { // Prune the in-memory temp updates from the actual state to // obtain the UI state. - filteredPeople = people + filteredPeople = (people ?? []) .map((p) => ({ ...p, fileIDs: p.fileIDs.filter( From 5b73eee14c9f49c9f44e387af5b93e85645da1d2 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 18:01:03 +0530 Subject: [PATCH 25/61] Don't show bar controls in people section --- web/packages/new/photos/components/Gallery/BarImpl.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/packages/new/photos/components/Gallery/BarImpl.tsx b/web/packages/new/photos/components/Gallery/BarImpl.tsx index 089e8df0e2..ce1153d8bd 100644 --- a/web/packages/new/photos/components/Gallery/BarImpl.tsx +++ b/web/packages/new/photos/components/Gallery/BarImpl.tsx @@ -226,7 +226,7 @@ export const GalleryBarImpl: React.FC = ({ ], ); - const controls1 = isMobile && ( + const controls1 = isMobile && mode != "people" && ( = ({ ); - const controls2 = !isMobile && ( + const controls2 = !isMobile && mode != "people" && ( Date: Fri, 27 Sep 2024 18:05:49 +0530 Subject: [PATCH 26/61] wip empty state --- web/apps/photos/src/pages/gallery.tsx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/web/apps/photos/src/pages/gallery.tsx b/web/apps/photos/src/pages/gallery.tsx index 8d617af009..05a3b03577 100644 --- a/web/apps/photos/src/pages/gallery.tsx +++ b/web/apps/photos/src/pages/gallery.tsx @@ -1132,6 +1132,12 @@ export default function Gallery() { return
; } + const showEmptySectionState = + !isInSearchMode && + !isFirstLoad && + !files?.length && + !hiddenFiles?.length; + return ( setOpenWhatsNew(false)} /> - {!isInSearchMode && - !isFirstLoad && - !files?.length && - !hiddenFiles?.length && - activeCollectionID === ALL_SECTION ? ( + {showEmptySectionState && activeCollectionID === ALL_SECTION ? ( + ) : showEmptySectionState && resolvedBarMode == "people" ? ( +
Empty
) : ( Date: Fri, 27 Sep 2024 18:23:50 +0530 Subject: [PATCH 27/61] wip checkpoint people empty state --- .../Collections/GalleryBarAndListHeader.tsx | 4 +- web/apps/photos/src/pages/gallery.tsx | 70 ++++++------------- .../new/photos/components/Gallery/BarImpl.tsx | 12 ++-- .../components/Gallery/PeopleHeader.tsx | 15 ++-- 4 files changed, 32 insertions(+), 69 deletions(-) diff --git a/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx b/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx index 882879e7ba..e34768d212 100644 --- a/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx +++ b/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx @@ -170,11 +170,13 @@ export const GalleryBarAndListHeader: React.FC = ({ } onCollectionCast={() => setOpenAlbumCastDialog(true)} /> - ) : ( + ) : activePerson ? ( + ) : ( + <> ), itemType: ITEM_TYPE.HEADER, height: 68, diff --git a/web/apps/photos/src/pages/gallery.tsx b/web/apps/photos/src/pages/gallery.tsx index 05a3b03577..3cbf5ef0cd 100644 --- a/web/apps/photos/src/pages/gallery.tsx +++ b/web/apps/photos/src/pages/gallery.tsx @@ -565,8 +565,9 @@ export default function Gallery() { let filteredPeople = people ?? []; if (tempDeletedFileIds?.size ?? tempHiddenFileIds?.size) { // Prune the in-memory temp updates from the actual state to - // obtain the UI state. - filteredPeople = (people ?? []) + // obtain the UI state. Kept inside an preflight check to so + // that the common path remains fast. + filteredPeople = filteredPeople .map((p) => ({ ...p, fileIDs: p.fileIDs.filter( @@ -579,6 +580,8 @@ export default function Gallery() { } const activePerson = filteredPeople.find((p) => p.id == activePersonID) ?? + // We don't have an "All" pseudo-album in people mode currently, + // so default to the first person in the list. filteredPeople[0]; const pfSet = new Set(activePerson?.fileIDs ?? []); filteredFiles = getUniqueFiles( @@ -589,7 +592,6 @@ export default function Gallery() { ); galleryPeopleState = { activePerson, - activePersonID, people: filteredPeople, }; } else { @@ -681,31 +683,6 @@ export default function Gallery() { galleryPeopleState: undefined, }; - // Calling setState during rendering is frowned upon for good reasons, but - // it is not verboten, and it has documented semantics: - // - // > React will discard the currently rendering component's output and - // > immediately attempt to render it again with the new state. - // > - // > https://react.dev/reference/react/useState - // - // That said, we should try to refactor this code to use a reducer or some - // other store so that this is not needed. - if (barMode == "people" && galleryPeopleState?.people.length === 0) { - log.info( - "Resetting gallery to all section since people mode is no longer valid", - ); - setBarMode("albums"); - setActiveCollectionID(ALL_SECTION); - } - - // Derived1 is async, leading to even more workarounds. - const resolvedBarMode = galleryPeopleState - ? barMode - : barMode == "people" - ? "albums" - : barMode; - const selectAll = (e: KeyboardEvent) => { // ignore ctrl/cmd + a if the user is typing in a text field if ( @@ -736,14 +713,13 @@ export default function Gallery() { count: 0, collectionID: activeCollectionID, context: - resolvedBarMode == "people" && - galleryPeopleState?.activePersonID + barMode == "people" && galleryPeopleState?.activePerson?.id ? { mode: "people" as const, - personID: galleryPeopleState.activePersonID, + personID: galleryPeopleState.activePerson.id, } : { - mode: resolvedBarMode as "albums" | "hidden-albums", + mode: barMode as "albums" | "hidden-albums", collectionID: ensure(activeCollectionID), }, }; @@ -1114,12 +1090,7 @@ export default function Gallery() { }; const handleSelectPerson = (person: Person | undefined) => { - // The person bar currently does not have an "all" mode, so default to - // the first person when no specific person is provided. This can happen - // when the user clicks the "People" header in the search empty state (it - // is guaranteed that this header will only be shown if there is at - // least one person). - setActivePersonID(person?.id ?? galleryPeopleState?.people[0]?.id); + setActivePersonID(person?.id); setBarMode("people"); }; @@ -1214,7 +1185,7 @@ export default function Gallery() { marginBottom: "12px", }} > - {resolvedBarMode == "hidden-albums" ? ( + {barMode == "hidden-albums" ? ( @@ -1235,15 +1206,14 @@ export default function Gallery() { {showEmptySectionState && activeCollectionID === ALL_SECTION ? ( - ) : showEmptySectionState && resolvedBarMode == "people" ? ( + ) : showEmptySectionState && + barMode == "people" && + !galleryPeopleState?.activePerson ? (
Empty
) : ( )} = ({ : { type: "people" as const, people, - activePerson: ensure(activePerson), + activePerson, onSelectPerson, }, [ @@ -404,7 +402,7 @@ type ItemData = | { type: "people"; people: Person[]; - activePerson: Person; + activePerson: Person | undefined; onSelectPerson: (person: Person) => void; }; @@ -570,7 +568,7 @@ const ActiveIndicator = styled("div")` interface PersonCardProps { person: Person; - activePerson: Person; + activePerson: Person | undefined; onSelectPerson: (person: Person) => void; } @@ -588,6 +586,6 @@ const PersonCard: React.FC = ({ > {person.name && }
- {activePerson.id === person.id && } + {activePerson?.id === person.id && } ); diff --git a/web/packages/new/photos/components/Gallery/PeopleHeader.tsx b/web/packages/new/photos/components/Gallery/PeopleHeader.tsx index ad6e71925f..8f13eb60c5 100644 --- a/web/packages/new/photos/components/Gallery/PeopleHeader.tsx +++ b/web/packages/new/photos/components/Gallery/PeopleHeader.tsx @@ -40,19 +40,12 @@ import { GalleryItemsHeaderAdapter, GalleryItemsSummary } from "./ListHeader"; */ export interface GalleryPeopleState { /** - * The ID of the currently selected person. + * The currently selected person, if any. * - * We do not have an empty state currently, so this is guaranteed to be - * present whenever the gallery is in the "people" mode. + * Whenever this is present, it is guaranteed to be one of the items from + * within {@link people}. */ - activePersonID: string; - /** - * The currently selected person. - * - * This is a convenience property that contains a direct reference to the - * active {@link Person} from amongst {@link people}. - */ - activePerson: Person; + activePerson: Person | undefined; /** * The list of people to show. */ From 2f27ae7b1933511ec3a00cd40c2f4040cbacc1ab Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 18:37:16 +0530 Subject: [PATCH 28/61] Empty state --- web/apps/photos/src/pages/gallery.tsx | 19 +++++++++---------- .../new/photos/components/Gallery/index.tsx | 10 ++++++++++ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/web/apps/photos/src/pages/gallery.tsx b/web/apps/photos/src/pages/gallery.tsx index 3cbf5ef0cd..4723ddd02c 100644 --- a/web/apps/photos/src/pages/gallery.tsx +++ b/web/apps/photos/src/pages/gallery.tsx @@ -3,7 +3,7 @@ import { NavbarBase } from "@/base/components/Navbar"; import { useIsMobileWidth } from "@/base/hooks"; import log from "@/base/log"; import type { Collection } from "@/media/collection"; -import { SearchResultsHeader } from "@/new/photos/components/Gallery"; +import { PeopleEmptyState, SearchResultsHeader } from "@/new/photos/components/Gallery"; import type { GalleryBarMode } from "@/new/photos/components/Gallery/BarImpl"; import { GalleryPeopleState } from "@/new/photos/components/Gallery/PeopleHeader"; import { @@ -1103,12 +1103,6 @@ export default function Gallery() { return
; } - const showEmptySectionState = - !isInSearchMode && - !isFirstLoad && - !files?.length && - !hiddenFiles?.length; - return ( setOpenWhatsNew(false)} /> - {showEmptySectionState && activeCollectionID === ALL_SECTION ? ( + {!isInSearchMode && + !isFirstLoad && + !files?.length && + !hiddenFiles?.length && + activeCollectionID === ALL_SECTION ? ( - ) : showEmptySectionState && + ) : !isInSearchMode && + !isFirstLoad && barMode == "people" && !galleryPeopleState?.activePerson ? ( -
Empty
+ ) : ( = ({ /> ); + +export const PeopleEmptyState: React.FC = () => ( + + + {pt("People will appear here once indexing completes")} + + +); From 72c93a170317effcc8c440cb454cc78d6704aab2 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 18:44:53 +0530 Subject: [PATCH 29/61] Tweak styling --- web/packages/new/photos/components/Gallery/BarImpl.tsx | 5 ++++- web/packages/new/photos/components/Gallery/index.tsx | 8 +++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/web/packages/new/photos/components/Gallery/BarImpl.tsx b/web/packages/new/photos/components/Gallery/BarImpl.tsx index 21ca50f357..a3db5a1e5e 100644 --- a/web/packages/new/photos/components/Gallery/BarImpl.tsx +++ b/web/packages/new/photos/components/Gallery/BarImpl.tsx @@ -250,7 +250,10 @@ export const GalleryBarImpl: React.FC = ({ ); return ( - + // Hide the bottom border if we're showing the empty state for people. + {controls1} diff --git a/web/packages/new/photos/components/Gallery/index.tsx b/web/packages/new/photos/components/Gallery/index.tsx index 5ac9cda5b9..ddf14e4dea 100644 --- a/web/packages/new/photos/components/Gallery/index.tsx +++ b/web/packages/new/photos/components/Gallery/index.tsx @@ -45,7 +45,13 @@ export const SearchResultsHeader: React.FC = ({ export const PeopleEmptyState: React.FC = () => ( - + From cc262aad0ca8ebea5201176ca21eba3de46b8e17 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 19:06:32 +0530 Subject: [PATCH 30/61] New semantics --- web/packages/new/photos/services/ml/index.ts | 23 ++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index a970173d1e..aeecff8f47 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -87,6 +87,9 @@ class MLState { /** * Snapshot of the {@link Person}s returned by the {@link peopleSnapshot} * function. + * + * It will be `undefined` only if ML is disabled. Otherwise, it will be an + * empty array even if the snapshot is pending its first sync. */ peopleSnapshot: Person[] | undefined; @@ -186,6 +189,7 @@ export const isMLSupported = isDesktop; */ export const initML = () => { _state.isMLEnabled = isMLEnabledLocal(); + resetPeopleSnapshot(); }; export const logoutML = async () => { @@ -222,6 +226,7 @@ export const enableML = async () => { setIsMLEnabledLocal(true); _state.isMLEnabled = true; setInterimScheduledStatus(); + resetPeopleSnapshot(); // Trigger updates, but don't wait for them to finish. void updateMLStatusSnapshot().then(mlSync); }; @@ -239,6 +244,7 @@ export const disableML = async () => { _state.isSyncing = false; await terminateMLWorker(); triggerStatusUpdate(); + resetPeopleSnapshot(); }; /** @@ -544,16 +550,25 @@ export const peopleSubscribe = (onChange: () => void): (() => void) => { }; }; +/** + * If ML is enabled, set the people snapshot to an empty array to indicate that + * ML is enabled, but we're still reading in the set of people. + * + * Otherwise, if ML is disabled, set the people snapshot to `undefined`. + */ +const resetPeopleSnapshot = () => + setPeopleSnapshot(_state.isMLEnabled ? [] : undefined); + /** * Return the last known, cached {@link people}. * * This, along with {@link peopleSnapshot}, is meant to be used as arguments to * React's {@link useSyncExternalStore}. * - * A return value of `undefined` indicates that we're either still loading the - * initial list of people, or that the user has ML disabled and thus doesn't - * have any people (this is distinct from the case where the user has ML enabled - * but doesn't have any named "person" clusters so far). + * A return value of `undefined` indicates that ML is disabled. In all other + * cases, the list will be either empty (if we're either still loading the + * initial list of people, or if the user doesn't have any people), or, well, + * non-empty. */ export const peopleSnapshot = () => _state.peopleSnapshot; From 2aaa23312b35e5f12228242c0af25eab1a601a36 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 19:15:12 +0530 Subject: [PATCH 31/61] Both buttons --- .../Collections/GalleryBarAndListHeader.tsx | 2 + web/apps/photos/src/pages/gallery.tsx | 10 ++++- .../new/photos/components/Gallery/BarImpl.tsx | 44 +++++++++++++------ 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx b/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx index e34768d212..af963430c5 100644 --- a/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx +++ b/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx @@ -86,6 +86,7 @@ type CollectionsProps = Omit< */ export const GalleryBarAndListHeader: React.FC = ({ shouldHide, + showPeopleSectionButton, mode, onChangeMode, collectionSummaries, @@ -199,6 +200,7 @@ export const GalleryBarAndListHeader: React.FC = ({ <> ; } + // `people` will be undefined only when ML is disabled, otherwise it'll be + // an empty array (even if people are loading). + const showPeopleSectionButton = people !== undefined; + return ( = ({ + showPeopleSectionButton, mode, onChangeMode, collectionSummaries, @@ -255,7 +260,9 @@ export const GalleryBarImpl: React.FC = ({ sx={people.length ? {} : { borderBlockEndColor: "transparent" }} > - + {controls1} @@ -312,33 +319,44 @@ export const Row2 = styled(Box)` `; const ModeIndicator: React.FC< - Pick -> = ({ mode, onChangeMode }) => { + Pick< + GalleryBarImplProps, + "showPeopleSectionButton" | "mode" | "onChangeMode" + > +> = ({ showPeopleSectionButton, mode, onChangeMode }) => { // Mode switcher is not shown in the hidden albums section. if (mode == "hidden-albums") { return {t("hidden_albums")}; } - // Show the static mode indicator with only the "Albums" title unless we - // come here with the people mode already set. This is because we don't - // currently have an empty state for the People mode when ML is not enabled. - if (mode == "albums") { + // Show the static mode indicator with only the "Albums" title if we have + // not been asked to show the people button (there are no other sections to + // switch to in such a case). + if (!showPeopleSectionButton) { return {t("albums")}; } return ( - onChangeMode("albums")}> + onChangeMode("albums")} + > {t("albums")} - - {t("people")} + + onChangeMode("people")} + > + {t("people")} + ); }; -const AlbumModeButton = styled(UnstyledButton)( - ({ theme }) => ` - p { color: ${theme.colors.text.muted} } +const ModeButton = styled(UnstyledButton)<{ $active: boolean }>( + ({ $active, theme }) => ` + p { color: ${$active ? theme.colors.text.base : theme.colors.text.muted} } p:hover { color: ${theme.colors.text.base} } `, ); From 99ba5a31d39bd2d7d6cb5cf1abd49a2d0f47963d Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 19:27:48 +0530 Subject: [PATCH 32/61] Fix warning --- .../new/photos/components/Gallery/BarImpl.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/web/packages/new/photos/components/Gallery/BarImpl.tsx b/web/packages/new/photos/components/Gallery/BarImpl.tsx index b076e9eecd..ac8ec9920d 100644 --- a/web/packages/new/photos/components/Gallery/BarImpl.tsx +++ b/web/packages/new/photos/components/Gallery/BarImpl.tsx @@ -339,13 +339,13 @@ const ModeIndicator: React.FC< return ( onChangeMode("albums")} > {t("albums")} onChangeMode("people")} > {t("people")} @@ -354,9 +354,11 @@ const ModeIndicator: React.FC< ); }; -const ModeButton = styled(UnstyledButton)<{ $active: boolean }>( - ({ $active, theme }) => ` - p { color: ${$active ? theme.colors.text.base : theme.colors.text.muted} } +const ModeButton = styled(UnstyledButton, { + shouldForwardProp: (propName) => propName != "active", +})<{ active: boolean }>( + ({ active, theme }) => ` + p { color: ${active ? theme.colors.text.base : theme.colors.text.muted} } p:hover { color: ${theme.colors.text.base} } `, ); From d7e2330f20068fa27cdcc41cb466999cbb5b36e0 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 27 Sep 2024 20:29:14 +0530 Subject: [PATCH 33/61] Fix render loop --- .../src/components/Collections/GalleryBarAndListHeader.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx b/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx index af963430c5..3fe4db7fed 100644 --- a/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx +++ b/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx @@ -188,7 +188,6 @@ export const GalleryBarAndListHeader: React.FC = ({ toShowCollectionSummaries, activeCollectionID, isActiveCollectionDownloadInProgress, - people, activePerson, ]); From da8326229c3743bfae147aa80c2f262bc6cfbca1 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 09:32:25 +0530 Subject: [PATCH 34/61] [web] Redirect to password input on no-email-MFA + new tab Fixes the following bug report, for a user who has email verification disabled: > and about verify in new tab... > it happens when u r at password page after entering email and opening ente.auth.io in new tab opens the verify page instead of password --- web/apps/photos/src/pages/index.tsx | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/web/apps/photos/src/pages/index.tsx b/web/apps/photos/src/pages/index.tsx index 635685b7e3..201a514a2e 100644 --- a/web/apps/photos/src/pages/index.tsx +++ b/web/apps/photos/src/pages/index.tsx @@ -1,5 +1,6 @@ import { Login } from "@/accounts/components/Login"; import { SignUp } from "@/accounts/components/SignUp"; +import type { SRPAttributes } from "@/accounts/types/srp"; import log from "@/base/log"; import { albumsAppOrigin, customAPIHost } from "@/base/origins"; import { DevSettings } from "@/new/photos/components/DevSettings"; @@ -89,7 +90,26 @@ export default function LandingPage() { if (key && token) { await router.push(PAGES.GALLERY); } else if (user?.email) { - await router.push(PAGES.VERIFY); + // The user had previously entered their email on the login screen + // but closed the tab before proceeding (or opened a us in a new tab + // at this point). + // + // In such cases, we'll have an email present. + // + // Where to go next depends on whether they have enabled email + // verification or not. + // + // The login page would have fetched and saved SRP attributes, so we + // can see if they are present and indicate the email verification + // is not required. Otherwise, move to the verification page. + const srpAttributes: SRPAttributes = getData( + LS_KEYS.SRP_ATTRIBUTES, + ); + if (srpAttributes && !srpAttributes.isEmailMFAEnabled) { + await router.push(PAGES.CREDENTIALS); + } else { + await router.push(PAGES.VERIFY); + } } await initLocalForage(); setLoading(false); From 6d969ab72a6505c3c646ce1bc530edf2e9980dd5 Mon Sep 17 00:00:00 2001 From: omove <61330514+omove@users.noreply.github.com> Date: Sat, 28 Sep 2024 00:05:59 -0400 Subject: [PATCH 35/61] [auth] fix x64 install on arm64 Windows Inno Setup's 'x64' option only allows install on x64 Windows, changing to 'x64compatible' allows x64 installation on arm64 and x64 Windows. --- auth/windows/packaging/exe/inno_setup.iss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/auth/windows/packaging/exe/inno_setup.iss b/auth/windows/packaging/exe/inno_setup.iss index 5906ecbd0e..653f293264 100644 --- a/auth/windows/packaging/exe/inno_setup.iss +++ b/auth/windows/packaging/exe/inno_setup.iss @@ -16,8 +16,8 @@ SetupIconFile={{SETUP_ICON_FILE}} WizardStyle=modern ;PrivilegesRequired={{PRIVILEGES_REQUIRED}} PrivilegesRequiredOverridesAllowed=dialog -ArchitecturesAllowed=x64 -ArchitecturesInstallIn64BitMode=x64 +ArchitecturesAllowed=x64compatible +ArchitecturesInstallIn64BitMode=x64compatible UninstallDisplayIcon={app}\auth.exe [Languages] From 08f84c9cf8f27501dfeb218ec374f4e05a32488a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 09:54:51 +0530 Subject: [PATCH 36/61] Also handle for auth --- web/apps/photos/src/pages/index.tsx | 22 +--------------------- web/packages/accounts/pages/verify.tsx | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/web/apps/photos/src/pages/index.tsx b/web/apps/photos/src/pages/index.tsx index 201a514a2e..635685b7e3 100644 --- a/web/apps/photos/src/pages/index.tsx +++ b/web/apps/photos/src/pages/index.tsx @@ -1,6 +1,5 @@ import { Login } from "@/accounts/components/Login"; import { SignUp } from "@/accounts/components/SignUp"; -import type { SRPAttributes } from "@/accounts/types/srp"; import log from "@/base/log"; import { albumsAppOrigin, customAPIHost } from "@/base/origins"; import { DevSettings } from "@/new/photos/components/DevSettings"; @@ -90,26 +89,7 @@ export default function LandingPage() { if (key && token) { await router.push(PAGES.GALLERY); } else if (user?.email) { - // The user had previously entered their email on the login screen - // but closed the tab before proceeding (or opened a us in a new tab - // at this point). - // - // In such cases, we'll have an email present. - // - // Where to go next depends on whether they have enabled email - // verification or not. - // - // The login page would have fetched and saved SRP attributes, so we - // can see if they are present and indicate the email verification - // is not required. Otherwise, move to the verification page. - const srpAttributes: SRPAttributes = getData( - LS_KEYS.SRP_ATTRIBUTES, - ); - if (srpAttributes && !srpAttributes.isEmailMFAEnabled) { - await router.push(PAGES.CREDENTIALS); - } else { - await router.push(PAGES.VERIFY); - } + await router.push(PAGES.VERIFY); } await initLocalForage(); setLoading(false); diff --git a/web/packages/accounts/pages/verify.tsx b/web/packages/accounts/pages/verify.tsx index 1fd0d094e1..f56aa57d49 100644 --- a/web/packages/accounts/pages/verify.tsx +++ b/web/packages/accounts/pages/verify.tsx @@ -42,7 +42,7 @@ import { import { unstashRedirect } from "../services/redirect"; import { configureSRP } from "../services/srp"; import type { PageProps } from "../types/page"; -import type { SRPSetupAttributes } from "../types/srp"; +import type { SRPAttributes, SRPSetupAttributes } from "../types/srp"; const Page: React.FC = ({ appContext }) => { const { logout, showNavBar, setDialogBoxAttributesV2 } = appContext; @@ -69,7 +69,26 @@ const Page: React.FC = ({ appContext }) => { ) { router.push(PAGES.CREDENTIALS); } else { - setEmail(user.email); + // The user might have email verification disabled, but after + // previously entering their email on the login screen, they + // might've closed the tab before proceeding (or opened a us in + // a new tab at this point). + // + // In such cases, we'll end up here with an email present. + // + // To distinguish this scenario from the normal email + // verification flow, we can check to see the SRP attributes + // (the login page would've fetched and saved them). If they are + // present and indicate that email verification is not required, + // redirect to the password verification page. + const srpAttributes: SRPAttributes = getData( + LS_KEYS.SRP_ATTRIBUTES, + ); + if (srpAttributes && !srpAttributes.isEmailMFAEnabled) { + router.push(PAGES.CREDENTIALS); + } else { + setEmail(user.email); + } } }; main(); From 1eb5eaece95a060bb742a34f53142d3070db57b6 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 10:08:11 +0530 Subject: [PATCH 37/61] Freshness check --- web/packages/accounts/pages/verify.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/web/packages/accounts/pages/verify.tsx b/web/packages/accounts/pages/verify.tsx index f56aa57d49..924d210b08 100644 --- a/web/packages/accounts/pages/verify.tsx +++ b/web/packages/accounts/pages/verify.tsx @@ -33,6 +33,7 @@ import { t } from "i18next"; import { useRouter } from "next/router"; import { useEffect, useState } from "react"; import { Trans } from "react-i18next"; +import { getSRPAttributes } from "../api/srp"; import { putAttributes, sendOtt, verifyOtt } from "../api/user"; import { PAGES } from "../constants/pages"; import { @@ -85,7 +86,18 @@ const Page: React.FC = ({ appContext }) => { LS_KEYS.SRP_ATTRIBUTES, ); if (srpAttributes && !srpAttributes.isEmailMFAEnabled) { - router.push(PAGES.CREDENTIALS); + // Fetch the latest SRP attributes instead of relying on the + // potentially stale stored values. This is an infrequent scenario + // path, so extra API calls are fine. + const latestSRPAttributes = await getSRPAttributes(email); + if ( + latestSRPAttributes && + !latestSRPAttributes.isEmailMFAEnabled + ) { + router.push(PAGES.CREDENTIALS); + } else { + setEmail(user.email); + } } else { setEmail(user.email); } From 3288f3250b0af5d531bc1d2d142d47f6a6e74f30 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 10:14:49 +0530 Subject: [PATCH 38/61] Extract --- web/packages/accounts/pages/verify.tsx | 87 ++++++++++++++------------ 1 file changed, 46 insertions(+), 41 deletions(-) diff --git a/web/packages/accounts/pages/verify.tsx b/web/packages/accounts/pages/verify.tsx index 924d210b08..98a54adf8e 100644 --- a/web/packages/accounts/pages/verify.tsx +++ b/web/packages/accounts/pages/verify.tsx @@ -59,48 +59,11 @@ const Page: React.FC = ({ appContext }) => { useEffect(() => { const main = async () => { const user: User = getData(LS_KEYS.USER); - const keyAttributes: KeyAttributes = getData( - LS_KEYS.KEY_ATTRIBUTES, - ); - if (!user?.email) { - router.push("/"); - } else if ( - keyAttributes?.encryptedKey && - (user.token || user.encryptedToken) - ) { - router.push(PAGES.CREDENTIALS); + const redirect = await redirectionIfNeeded(user); + if (redirect) { + router.push(redirect); } else { - // The user might have email verification disabled, but after - // previously entering their email on the login screen, they - // might've closed the tab before proceeding (or opened a us in - // a new tab at this point). - // - // In such cases, we'll end up here with an email present. - // - // To distinguish this scenario from the normal email - // verification flow, we can check to see the SRP attributes - // (the login page would've fetched and saved them). If they are - // present and indicate that email verification is not required, - // redirect to the password verification page. - const srpAttributes: SRPAttributes = getData( - LS_KEYS.SRP_ATTRIBUTES, - ); - if (srpAttributes && !srpAttributes.isEmailMFAEnabled) { - // Fetch the latest SRP attributes instead of relying on the - // potentially stale stored values. This is an infrequent scenario - // path, so extra API calls are fine. - const latestSRPAttributes = await getSRPAttributes(email); - if ( - latestSRPAttributes && - !latestSRPAttributes.isEmailMFAEnabled - ) { - router.push(PAGES.CREDENTIALS); - } else { - setEmail(user.email); - } - } else { - setEmail(user.email); - } + setEmail(user.email); } }; main(); @@ -284,3 +247,45 @@ const Page: React.FC = ({ appContext }) => { }; export default Page; + +/** + * A function called during page load to see if a redirection is required + * + * @returns The slug to redirect to, if needed. + */ +const redirectionIfNeeded = async (user: User | undefined) => { + const email = user?.email; + if (!email) { + return "/"; + } + + const keyAttributes: KeyAttributes = getData(LS_KEYS.KEY_ATTRIBUTES); + + if (keyAttributes?.encryptedKey && (user.token || user.encryptedToken)) { + return PAGES.CREDENTIALS; + } + + // The user might have email verification disabled, but after previously + // entering their email on the login screen, they might've closed the tab + // before proceeding (or opened a us in a new tab at this point). + // + // In such cases, we'll end up here with an email present. + // + // To distinguish this scenario from the normal email verification flow, we + // can check to see the SRP attributes (the login page would've fetched and + // saved them). If they are present and indicate that email verification is + // not required, redirect to the password verification page. + + const srpAttributes: SRPAttributes = getData(LS_KEYS.SRP_ATTRIBUTES); + if (srpAttributes && !srpAttributes.isEmailMFAEnabled) { + // Fetch the latest SRP attributes instead of relying on the potentially + // stale stored values. This is an infrequent scenario path, so extra + // API calls are fine. + const latestSRPAttributes = await getSRPAttributes(email); + if (latestSRPAttributes && !latestSRPAttributes.isEmailMFAEnabled) { + return PAGES.CREDENTIALS; + } + } + + return undefined; +}; From f255ded0b647631721ffccb4772149a6fe1c8baa Mon Sep 17 00:00:00 2001 From: vishnukvmd Date: Fri, 27 Sep 2024 23:07:32 -0700 Subject: [PATCH 39/61] [docs] Update ML article --- docs/docs/photos/features/machine-learning.md | 42 +++++++++---------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/docs/docs/photos/features/machine-learning.md b/docs/docs/photos/features/machine-learning.md index 1b4355592f..640fe0f535 100644 --- a/docs/docs/photos/features/machine-learning.md +++ b/docs/docs/photos/features/machine-learning.md @@ -7,45 +7,41 @@ description: # Machine learning -> [!NOTE] -> -> This document describes a beta feature that will be present in an upcoming -> release. - Ente supports on-device machine learning. This allows you to use the latest advances in AI in a privacy preserving manner. -- You can search for your photos by the **faces** of the people in them. Ente +- You can search for your photos by the **Faces** of the people in them. Ente will show you all the faces in a photo, and will also try to group similar faces together to create clusters of people so that you can give them names, and quickly find all photos with a given person in them. - You can search for your photos by typing natural language descriptions of them. For example, you can search for "night", "by the seaside", or "the red - motorcycle next to a fountain". Within the app, this ability is sometimes - referred to as **magic search**. + motorcycle next to a fountain". Within the app, this ability is referred to + as **Magic search**. -- We will build on this foundation to add more forms of advanced search. +You can enable face recognition and magic search in the app's preferences on +either the mobile app or the desktop app. -You can enable face and magic search in the app's preferences on either the -mobile app or the desktop app. +On mobile, this is available under `General > Advanced > Machine learning`. -If you have a big library, we recommend enabling this on the desktop app first, -because it can index your existing photos faster (The app needs to download your -originals to index them which can happen faster over WiFi, and indexing is also -faster on your computer as compared to your mobile device). +On desktop, this is available under `Preferences > Machine learning`. -Once your existing photos have been indexed, then you can use either. The mobile -app is fast enough to easily and seamlessly index the new photos that you take. +--- + +The app needs to download your original photos to index them. This is faster +over WiFi. Indexing is also faster on your computer as compared to your mobile +device. > [!TIP] > -> Even for the initial indexing, you don't necessarily need the desktop app, it -> just will be a bit faster. +> If you have a large library on Ente, we recommend enabling this feature on the +> desktop app first, because it can index your existing photos faster. Once your +> existing photos have been indexed, then you can use either. The mobile app is +> fast enough to index new photos as they are being backed up. The indexes are synced across all your devices automatically using the same -end-to-end encypted security that we use for syncing your photos. +end-to-end encrypted security that we use for syncing your photos. -Note that the desktop app does not currently support viewing and modifying the -automatically generated face groupings, that is only supported by the mobile -app. +Note that the desktop app does not currently support modifying the face +groupings, that is only supported by the mobile app. From 08cf14a72b4d6fa1467089cce56b01c37d106348 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Sat, 28 Sep 2024 14:14:08 +0530 Subject: [PATCH 40/61] [mob] Minor improvement in magicSearch cache refresh --- mobile/lib/services/machine_learning/ml_service.dart | 3 +-- mobile/lib/services/magic_cache_service.dart | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/mobile/lib/services/machine_learning/ml_service.dart b/mobile/lib/services/machine_learning/ml_service.dart index c643bd20ff..c09b6874bd 100644 --- a/mobile/lib/services/machine_learning/ml_service.dart +++ b/mobile/lib/services/machine_learning/ml_service.dart @@ -117,7 +117,6 @@ class MLService { try { if (force) { _mlControllerStatus = true; - MagicCacheService.instance.queueUpdate('forced run'); } if (_cannotRunMLFunction() && !force) return; _isRunningML = true; @@ -134,7 +133,7 @@ class MLService { } if (_mlControllerStatus == true) { // refresh discover section - MagicCacheService.instance.updateCache().ignore(); + MagicCacheService.instance.updateCache(forced: force).ignore(); } await indexAllImages(); if ((await MLDataDB.instance.getUnclusteredFaceCount()) > 0) { diff --git a/mobile/lib/services/magic_cache_service.dart b/mobile/lib/services/magic_cache_service.dart index 3178e8c4ca..ecb4c4629f 100644 --- a/mobile/lib/services/magic_cache_service.dart +++ b/mobile/lib/services/magic_cache_service.dart @@ -205,7 +205,7 @@ class MagicCacheService { queueUpdate("Prompts data updated"); } else if (lastMagicCacheUpdateTime < DateTime.now() - .subtract(const Duration(days: 1)) + .subtract(const Duration(hours: 12)) .millisecondsSinceEpoch) { queueUpdate("Cache is old"); } From 8629212584940fd61956160eea7e8b4cdcd2758e Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Sat, 28 Sep 2024 14:18:21 +0530 Subject: [PATCH 41/61] [mob] Allow video upload with empty thumbnail --- mobile/lib/utils/file_uploader_util.dart | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/mobile/lib/utils/file_uploader_util.dart b/mobile/lib/utils/file_uploader_util.dart index 6106307fd2..d06234bcf6 100644 --- a/mobile/lib/utils/file_uploader_util.dart +++ b/mobile/lib/utils/file_uploader_util.dart @@ -342,7 +342,8 @@ Future _getMediaUploadDataFromAppCache(EnteFile file) async { Map? dimensions; if (file.fileType == FileType.image) { dimensions = await getImageHeightAndWith(imagePath: localPath); - } else { + } else if (thumbnailData != null) { + // the thumbnail null check is to ensure that we are able to generate thum // for video, we need to use the thumbnail data with any max width/height final thumbnailFilePath = await VideoThumbnail.thumbnailFile( video: localPath, @@ -406,14 +407,19 @@ Future getThumbnailFromInAppCacheFile(EnteFile file) async { return null; } if (file.fileType == FileType.video) { - final thumbnailFilePath = await VideoThumbnail.thumbnailFile( - video: localFile.path, - imageFormat: ImageFormat.JPEG, - thumbnailPath: (await getTemporaryDirectory()).path, - maxWidth: thumbnailLargeSize, - quality: 80, - ); - localFile = File(thumbnailFilePath!); + try { + final thumbnailFilePath = await VideoThumbnail.thumbnailFile( + video: localFile.path, + imageFormat: ImageFormat.JPEG, + thumbnailPath: (await getTemporaryDirectory()).path, + maxWidth: thumbnailLargeSize, + quality: 80, + ); + localFile = File(thumbnailFilePath!); + } catch (e) { + _logger.warning('Failed to generate video thumbnail', e); + return null; + } } var thumbnailData = await localFile.readAsBytes(); int compressionAttempts = 0; From b6059273fb022a6aa291e9dd8309ebd6ee2dc320 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Sat, 28 Sep 2024 10:27:04 +0000 Subject: [PATCH 42/61] New Crowdin translations by GitHub Action --- .../base/locales/da-DK/translation.json | 652 ++++++++++++++++++ .../base/locales/it-IT/translation.json | 2 +- .../base/locales/pl-PL/translation.json | 2 +- .../base/locales/pt-BR/translation.json | 2 +- .../base/locales/zh-CN/translation.json | 2 +- 5 files changed, 656 insertions(+), 4 deletions(-) create mode 100644 web/packages/base/locales/da-DK/translation.json diff --git a/web/packages/base/locales/da-DK/translation.json b/web/packages/base/locales/da-DK/translation.json new file mode 100644 index 0000000000..a2df95ea52 --- /dev/null +++ b/web/packages/base/locales/da-DK/translation.json @@ -0,0 +1,652 @@ +{ + "HERO_SLIDE_1_TITLE": "", + "HERO_SLIDE_1": "", + "HERO_SLIDE_2_TITLE": "", + "HERO_SLIDE_2": "", + "HERO_SLIDE_3_TITLE": "", + "HERO_SLIDE_3": "", + "login": "", + "sign_up": "", + "NEW_USER": "", + "EXISTING_USER": "", + "ENTER_NAME": "", + "PUBLIC_UPLOADER_NAME_MESSAGE": "", + "ENTER_EMAIL": "", + "EMAIL_ERROR": "", + "REQUIRED": "", + "EMAIL_SENT": "", + "CHECK_INBOX": "", + "ENTER_OTT": "", + "RESEND_MAIL": "", + "VERIFY": "", + "UNKNOWN_ERROR": "", + "INVALID_CODE": "", + "EXPIRED_CODE": "", + "SENDING": "", + "SENT": "", + "password": "", + "link_password_description": "", + "unlock": "", + "SET_PASSPHRASE": "", + "VERIFY_PASSPHRASE": "", + "INCORRECT_PASSPHRASE": "", + "ENTER_ENC_PASSPHRASE": "", + "PASSPHRASE_DISCLAIMER": "", + "WELCOME_TO_ENTE_HEADING": "", + "WELCOME_TO_ENTE_SUBHEADING": "", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "", + "PASSPHRASE_HINT": "", + "CONFIRM_PASSPHRASE": "", + "REFERRAL_CODE_HINT": "", + "REFERRAL_INFO": "", + "PASSPHRASE_MATCH_ERROR": "", + "create_albums": "", + "CREATE_COLLECTION": "", + "enter_album_name": "", + "CLOSE_OPTION": "", + "enter_file_name": "", + "CLOSE": "", + "NO": "", + "NOTHING_HERE": "", + "upload": "", + "import": "", + "add_photos": "", + "add_more_photos": "", + "add_photos_count_one": "", + "add_photos_count": "", + "select_photos": "", + "FILE_UPLOAD": "", + "UPLOAD_STAGE_MESSAGE": { + "0": "", + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "FILE_NOT_UPLOADED_LIST": "", + "INITIAL_LOAD_DELAY_WARNING": "", + "USER_DOES_NOT_EXIST": "", + "NO_ACCOUNT": "", + "ACCOUNT_EXISTS": "", + "CREATE": "", + "download": "", + "download_album": "", + "download_favorites": "", + "download_uncategorized": "", + "download_hidden_items": "", + "download_key": "", + "copy_key": "", + "toggle_fullscreen_key": "", + "zoom_in_out_key": "", + "previous_key": "", + "next_key": "", + "title_photos": "", + "title_auth": "", + "title_accounts": "", + "UPLOAD_FIRST_PHOTO": "", + "IMPORT_YOUR_FOLDERS": "", + "UPLOAD_DROPZONE_MESSAGE": "", + "WATCH_FOLDER_DROPZONE_MESSAGE": "", + "TRASH_FILES_TITLE": "", + "TRASH_FILE_TITLE": "", + "DELETE_FILES_TITLE": "", + "DELETE_FILES_MESSAGE": "", + "DELETE": "", + "DELETE_OPTION": "", + "FAVORITE_OPTION": "", + "UNFAVORITE_OPTION": "", + "MULTI_FOLDER_UPLOAD": "", + "UPLOAD_STRATEGY_CHOICE": "", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "", + "OR": "", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "", + "SESSION_EXPIRED_MESSAGE": "", + "SESSION_EXPIRED": "", + "PASSWORD_GENERATION_FAILED": "", + "CHANGE_PASSWORD": "", + "password_changed_elsewhere": "", + "password_changed_elsewhere_message": "", + "GO_BACK": "", + "RECOVERY_KEY": "", + "SAVE_LATER": "", + "SAVE": "", + "RECOVERY_KEY_DESCRIPTION": "", + "RECOVER_KEY_GENERATION_FAILED": "", + "KEY_NOT_STORED_DISCLAIMER": "", + "FORGOT_PASSWORD": "", + "RECOVER_ACCOUNT": "", + "RECOVERY_KEY_HINT": "", + "RECOVER": "", + "NO_RECOVERY_KEY": "", + "INCORRECT_RECOVERY_KEY": "", + "SORRY": "", + "NO_RECOVERY_KEY_MESSAGE": "", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", + "CONTACT_SUPPORT": "", + "REQUEST_FEATURE": "", + "SUPPORT": "", + "CONFIRM": "", + "cancel": "", + "LOGOUT": "", + "delete_account": "", + "delete_account_manually_message": "", + "LOGOUT_MESSAGE": "", + "CHANGE_EMAIL": "", + "ok": "", + "success": "", + "error": "", + "OFFLINE_MSG": "", + "install": "", + "install_mobile_app": "", + "download_app": "", + "download_app_message": "", + "EXPORT": "", + "SUBSCRIPTION": "", + "SUBSCRIBE": "", + "MANAGEMENT_PORTAL": "", + "MANAGE_FAMILY_PORTAL": "", + "LEAVE_FAMILY_PLAN": "", + "LEAVE": "", + "LEAVE_FAMILY_CONFIRM": "", + "CHOOSE_PLAN": "", + "MANAGE_PLAN": "", + "CURRENT_USAGE": "", + "TWO_MONTHS_FREE": "", + "POPULAR": "", + "free_plan_option": "", + "free_plan_description": "", + "active": "", + "subscription_info_free": "", + "subscription_info_family": "", + "subscription_info_expired": "", + "subscription_info_renewal_cancelled": "", + "subscription_info_storage_quota_exceeded": "", + "subscription_status_renewal_active": "", + "subscription_status_renewal_cancelled": "", + "add_on_valid_till": "", + "subscription_expired": "", + "storage_quota_exceeded": "", + "SUBSCRIPTION_PURCHASE_SUCCESS": "", + "SUBSCRIPTION_PURCHASE_CANCELLED": "", + "SUBSCRIPTION_PURCHASE_FAILED": "", + "SUBSCRIPTION_UPDATE_FAILED": "", + "UPDATE_PAYMENT_METHOD_MESSAGE": "", + "STRIPE_AUTHENTICATION_FAILED": "", + "UPDATE_PAYMENT_METHOD": "", + "MONTHLY": "", + "YEARLY": "", + "MONTH_SHORT": "", + "YEAR": "", + "update_subscription_title": "", + "UPDATE_SUBSCRIPTION_MESSAGE": "", + "UPDATE_SUBSCRIPTION": "", + "CANCEL_SUBSCRIPTION": "", + "CANCEL_SUBSCRIPTION_MESSAGE": "", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "", + "SUBSCRIPTION_CANCEL_FAILED": "", + "SUBSCRIPTION_CANCEL_SUCCESS": "", + "REACTIVATE_SUBSCRIPTION": "", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "", + "SUBSCRIPTION_ACTIVATE_FAILED": "", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "", + "MAIL_TO_MANAGE_SUBSCRIPTION": "", + "rename": "", + "rename_file": "", + "rename_album": "", + "delete_album": "", + "delete_album_title": "", + "delete_album_message": "", + "delete_photos": "", + "keep_photos": "", + "share_album": "", + "SHARE_WITH_SELF": "", + "ALREADY_SHARED": "", + "SHARING_BAD_REQUEST_ERROR": "", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "", + "CREATE_ALBUM_FAILED": "", + "search": "", + "search_results": "", + "no_results": "", + "search_hint": "", + "album": "", + "date": "", + "description": "", + "file_type": "", + "magic": "", + "photos_count_zero": "", + "photos_count_one": "", + "photos_count": "", + "TERMS_AND_CONDITIONS": "", + "SELECTED": "", + "people": "", + "indexing_scheduled": "", + "indexing_photos": "", + "indexing_fetching": "", + "indexing_people": "", + "indexing_done": "", + "UNIDENTIFIED_FACES": "", + "OBJECTS": "", + "TEXT": "", + "INFO": "", + "INFO_OPTION": "", + "file_name": "", + "CAPTION_PLACEHOLDER": "", + "location": "", + "SHOW_ON_MAP": "", + "MAP": "", + "MAP_SETTINGS": "", + "ENABLE_MAPS": "", + "ENABLE_MAP": "", + "DISABLE_MAPS": "", + "ENABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP": "", + "DETAILS": "", + "view_exif": "", + "no_exif": "", + "exif": "", + "ISO": "", + "TWO_FACTOR": "", + "TWO_FACTOR_AUTHENTICATION": "", + "TWO_FACTOR_QR_INSTRUCTION": "", + "ENTER_CODE_MANUALLY": "", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "", + "SCAN_QR_CODE": "", + "ENABLE_TWO_FACTOR": "", + "enable": "", + "enabled": "", + "LOST_DEVICE": "", + "INCORRECT_CODE": "", + "TWO_FACTOR_INFO": "", + "DISABLE_TWO_FACTOR_LABEL": "", + "UPDATE_TWO_FACTOR_LABEL": "", + "disable": "", + "reconfigure": "", + "UPDATE_TWO_FACTOR": "", + "UPDATE_TWO_FACTOR_MESSAGE": "", + "UPDATE": "", + "DISABLE_TWO_FACTOR": "", + "DISABLE_TWO_FACTOR_MESSAGE": "", + "TWO_FACTOR_DISABLE_FAILED": "", + "EXPORT_DATA": "", + "select_folder": "", + "select_zips": "", + "faq": "", + "takeout_hint": "", + "DESTINATION": "", + "START": "", + "LAST_EXPORT_TIME": "", + "EXPORT_AGAIN": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "", + "SEND_OTT": "", + "EMAIl_ALREADY_OWNED": "", + "ETAGS_BLOCKED": "", + "LIVE_PHOTOS_DETECTED": "", + "RETRY_FAILED": "", + "FAILED_UPLOADS": "", + "failed_uploads_hint": "", + "SKIPPED_FILES": "", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", + "UNSUPPORTED_FILES": "", + "SUCCESSFUL_UPLOADS": "", + "SKIPPED_INFO": "", + "UNSUPPORTED_INFO": "", + "BLOCKED_UPLOADS": "", + "INPROGRESS_METADATA_EXTRACTION": "", + "INPROGRESS_UPLOADS": "", + "TOO_LARGE_UPLOADS": "", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "", + "TOO_LARGE_INFO": "", + "THUMBNAIL_GENERATION_FAILED_INFO": "", + "select_album": "", + "upload_to_album": "", + "add_to_album": "", + "move_to_album": "", + "unhide_to_album": "", + "restore_to_album": "", + "section_all": "", + "section_uncategorized": "", + "section_archive": "", + "section_hidden": "", + "section_trash": "", + "favorites": "", + "archive": "", + "archive_album": "", + "unarchive": "", + "unarchive_album": "", + "hide_collection": "", + "unhide_collection": "", + "MOVE": "", + "ADD": "", + "REMOVE": "", + "YES_REMOVE": "", + "REMOVE_FROM_COLLECTION": "", + "MOVE_TO_TRASH": "", + "TRASH_FILES_MESSAGE": "", + "TRASH_FILE_MESSAGE": "", + "DELETE_PERMANENTLY": "", + "RESTORE": "", + "empty_trash": "", + "empty_trash_title": "", + "empty_trash_message": "", + "leave_album": "", + "leave_shared_album_title": "", + "leave_shared_album_message": "", + "leave_shared_album": "", + "NOT_FILE_OWNER": "", + "CONFIRM_SELF_REMOVE_MESSAGE": "", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "", + "sort_by_creation_time_ascending": "", + "sort_by_updation_time_descending": "", + "sort_by_name": "", + "FIX_CREATION_TIME": "", + "FIX_CREATION_TIME_IN_PROGRESS": "", + "CREATION_TIME_UPDATED": "", + "UPDATE_CREATION_TIME_NOT_STARTED": "", + "UPDATE_CREATION_TIME_COMPLETED": "", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "", + "CAPTION_CHARACTER_LIMIT": "", + "DATE_TIME_ORIGINAL": "", + "DATE_TIME_DIGITIZED": "", + "METADATA_DATE": "", + "CUSTOM_TIME": "", + "REOPEN_PLAN_SELECTOR_MODAL": "", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "", + "sharing_details": "", + "modify_sharing": "", + "ADD_COLLABORATORS": "", + "ADD_NEW_EMAIL": "", + "shared_with_people_count_zero": "", + "shared_with_people_count_one": "", + "shared_with_people_count": "", + "participants_count_zero": "", + "participants_count_one": "", + "participants_count": "", + "ADD_VIEWERS": "", + "CHANGE_PERMISSIONS_TO_VIEWER": "", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "", + "CONVERT_TO_VIEWER": "", + "CONVERT_TO_COLLABORATOR": "", + "CHANGE_PERMISSION": "", + "REMOVE_PARTICIPANT": "", + "CONFIRM_REMOVE": "", + "MANAGE": "", + "ADDED_AS": "", + "COLLABORATOR_RIGHTS": "", + "REMOVE_PARTICIPANT_HEAD": "", + "OWNER": "", + "COLLABORATORS": "", + "ADD_MORE": "", + "VIEWERS": "", + "OR_ADD_EXISTING": "", + "REMOVE_PARTICIPANT_MESSAGE": "", + "NOT_FOUND": "", + "LINK_EXPIRED": "", + "LINK_EXPIRED_MESSAGE": "", + "MANAGE_LINK": "", + "LINK_TOO_MANY_REQUESTS": "", + "FILE_DOWNLOAD": "", + "link_password_lock": "", + "PUBLIC_COLLECT": "", + "LINK_DEVICE_LIMIT": "", + "NO_DEVICE_LIMIT": "", + "LINK_EXPIRY": "", + "NEVER": "", + "DISABLE_FILE_DOWNLOAD": "", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "", + "SHARED_USING": "", + "SHARING_REFERRAL_CODE": "", + "LIVE": "", + "DISABLE_PASSWORD": "", + "DISABLE_PASSWORD_MESSAGE": "", + "PASSWORD_LOCK": "", + "LOCK": "", + "file": "", + "folder": "", + "google_takeout": "", + "DEDUPLICATE_FILES": "", + "NO_DUPLICATES_FOUND": "", + "FILES": "", + "EACH": "", + "DEDUPLICATE_BASED_ON_SIZE": "", + "STOP_ALL_UPLOADS_MESSAGE": "", + "STOP_UPLOADS_HEADER": "", + "YES_STOP_UPLOADS": "", + "STOP_DOWNLOADS_HEADER": "", + "YES_STOP_DOWNLOADS": "", + "STOP_ALL_DOWNLOADS_MESSAGE": "", + "albums": "", + "albums_count_one": "", + "albums_count": "", + "all_albums": "", + "all_hidden_albums": "", + "hidden_albums": "", + "hidden_items": "", + "ENTER_TWO_FACTOR_OTP": "", + "CREATE_ACCOUNT": "", + "COPIED": "", + "WATCH_FOLDERS": "", + "upgrade_now": "", + "renew_now": "", + "STORAGE": "", + "USED": "", + "YOU": "", + "FAMILY": "", + "FREE": "", + "OF": "", + "WATCHED_FOLDERS": "", + "NO_FOLDERS_ADDED": "", + "FOLDERS_AUTOMATICALLY_MONITORED": "", + "UPLOAD_NEW_FILES_TO_ENTE": "", + "REMOVE_DELETED_FILES_FROM_ENTE": "", + "ADD_FOLDER": "", + "STOP_WATCHING": "", + "STOP_WATCHING_FOLDER": "", + "STOP_WATCHING_DIALOG_MESSAGE": "", + "YES_STOP": "", + "CHANGE_FOLDER": "", + "FAMILY_PLAN": "", + "debug_logs": "", + "DOWNLOAD_LOGS": "", + "DOWNLOAD_LOGS_MESSAGE": "", + "WEAK_DEVICE": "", + "drag_and_drop_hint": "", + "AUTHENTICATE": "", + "UPLOADED_TO_SINGLE_COLLECTION": "", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "", + "NEVERMIND": "", + "UPDATE_AVAILABLE": "", + "UPDATE_INSTALLABLE_MESSAGE": "", + "INSTALL_NOW": "", + "INSTALL_ON_NEXT_LAUNCH": "", + "UPDATE_AVAILABLE_MESSAGE": "", + "DOWNLOAD_AND_INSTALL": "", + "IGNORE_THIS_VERSION": "", + "TODAY": "", + "YESTERDAY": "", + "NAME_PLACEHOLDER": "", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", + "CHOSE_THEME": "", + "more_details": "", + "ml_search": "", + "ml_search_description": "", + "ml_search_footnote": "", + "indexing": "", + "processed": "", + "indexing_status_running": "", + "indexing_status_fetching": "", + "indexing_status_scheduled": "", + "indexing_status_done": "", + "ml_search_disable": "", + "ml_search_disable_confirm": "", + "ml_consent": "", + "ml_consent_title": "", + "ml_consent_description": "", + "ml_consent_confirmation": "", + "labs": "", + "YOURS": "", + "passphrase_strength_weak": "", + "passphrase_strength_moderate": "", + "passphrase_strength_strong": "", + "preferences": "", + "language": "", + "advanced": "", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "", + "SUBSCRIPTION_VERIFICATION_ERROR": "", + "storage_unit": { + "b": "", + "kb": "", + "mb": "", + "gb": "", + "tb": "" + }, + "AFTER_TIME": { + "HOUR": "", + "DAY": "", + "WEEK": "", + "MONTH": "", + "YEAR": "" + }, + "COPY_LINK": "", + "DONE": "", + "LINK_SHARE_TITLE": "", + "REMOVE_LINK": "", + "CREATE_PUBLIC_SHARING": "", + "PUBLIC_LINK_CREATED": "", + "PUBLIC_LINK_ENABLED": "", + "COLLECT_PHOTOS": "", + "PUBLIC_COLLECT_SUBTEXT": "", + "STOP_EXPORT": "", + "EXPORT_PROGRESS": "", + "MIGRATING_EXPORT": "", + "RENAMING_COLLECTION_FOLDERS": "", + "TRASHING_DELETED_FILES": "", + "TRASHING_DELETED_COLLECTIONS": "", + "CONTINUOUS_EXPORT": "", + "PENDING_ITEMS": "", + "EXPORT_STARTING": "", + "delete_account_reason_label": "", + "delete_account_reason_placeholder": "", + "delete_reason": { + "missing_feature": "", + "behaviour": "", + "found_another_service": "", + "not_listed": "" + }, + "delete_account_feedback_label": "", + "delete_account_feedback_placeholder": "", + "delete_account_confirm_checkbox_label": "", + "delete_account_confirm": "", + "delete_account_confirm_message": "", + "feedback_required": "", + "feedback_required_found_another_service": "", + "RECOVER_TWO_FACTOR": "", + "at": "", + "AUTH_NEXT": "", + "AUTH_DOWNLOAD_MOBILE_APP": "", + "HIDE": "", + "UNHIDE": "", + "sort_by": "", + "newest_first": "", + "oldest_first": "", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "", + "pin_album": "", + "unpin_album": "", + "DOWNLOAD_COMPLETE": "", + "DOWNLOADING_COLLECTION": "", + "DOWNLOAD_FAILED": "", + "DOWNLOAD_PROGRESS": "", + "CHRISTMAS": "", + "CHRISTMAS_EVE": "", + "NEW_YEAR": "", + "NEW_YEAR_EVE": "", + "IMAGE": "", + "VIDEO": "", + "LIVE_PHOTO": "", + "editor": { + "crop": "" + }, + "CONVERT": "", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "", + "BRIGHTNESS": "", + "CONTRAST": "", + "SATURATION": "", + "BLUR": "", + "INVERT_COLORS": "", + "ASPECT_RATIO": "", + "SQUARE": "", + "ROTATE_LEFT": "", + "ROTATE_RIGHT": "", + "FLIP_VERTICALLY": "", + "FLIP_HORIZONTALLY": "", + "DOWNLOAD_EDITED": "", + "SAVE_A_COPY_TO_ENTE": "", + "RESTORE_ORIGINAL": "", + "TRANSFORM": "", + "COLORS": "", + "FLIP": "", + "ROTATION": "", + "RESET": "", + "PHOTO_EDITOR": "", + "FASTER_UPLOAD": "", + "FASTER_UPLOAD_DESCRIPTION": "", + "cast_album_to_tv": "", + "enter_cast_pin_code": "", + "pair_device_to_tv": "", + "tv_not_found": "", + "cast_auto_pair": "", + "cast_auto_pair_description": "", + "choose_device_from_browser": "", + "cast_auto_pair_failed": "", + "pair_with_pin": "", + "pair_with_pin_description": "", + "visit_cast_url": "", + "FREEHAND": "", + "APPLY_CROP": "", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "", + "passkeys": "", + "passkey_fetch_failed": "", + "manage_passkey": "", + "delete_passkey": "", + "delete_passkey_confirmation": "", + "rename_passkey": "", + "add_passkey": "", + "enter_passkey_name": "", + "passkeys_description": "", + "CREATED_AT": "", + "passkey_add_failed": "", + "passkey_login_failed": "", + "passkey_login_invalid_url": "", + "passkey_login_already_claimed_session": "", + "passkey_login_generic_error": "", + "passkey_login_credential_hint": "", + "passkeys_not_supported": "", + "try_again": "", + "check_status": "", + "passkey_login_instructions": "", + "passkey_login": "", + "passkey": "", + "passkey_verify_description": "", + "waiting_for_verification": "", + "verification_still_pending": "", + "passkey_verified": "", + "redirecting_back_to_app": "", + "redirect_close_instructions": "", + "redirect_again": "", + "autogenerated_first_album_name": "", + "autogenerated_default_album_name": "", + "developer_settings": "", + "server_endpoint": "", + "more_information": "", + "save": "" +} diff --git a/web/packages/base/locales/it-IT/translation.json b/web/packages/base/locales/it-IT/translation.json index 57596a5920..b00e775e2c 100644 --- a/web/packages/base/locales/it-IT/translation.json +++ b/web/packages/base/locales/it-IT/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "Nome del file", "CLOSE": "Chiudi", "NO": "No", - "NOTHING_HERE": "", + "NOTHING_HERE": "Non c'e ancora niente qui", "upload": "Carica", "import": "Importa", "add_photos": "Aggiungi foto", diff --git a/web/packages/base/locales/pl-PL/translation.json b/web/packages/base/locales/pl-PL/translation.json index 05de0ab560..2ebafcb095 100644 --- a/web/packages/base/locales/pl-PL/translation.json +++ b/web/packages/base/locales/pl-PL/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "Nazwa pliku", "CLOSE": "Zamknij", "NO": "Nie", - "NOTHING_HERE": "", + "NOTHING_HERE": "Nic tu jeszcze nie ma", "upload": "Prześlij", "import": "Importuj", "add_photos": "Dodaj zdjęcia", diff --git a/web/packages/base/locales/pt-BR/translation.json b/web/packages/base/locales/pt-BR/translation.json index af2910ed90..ca8c8230b6 100644 --- a/web/packages/base/locales/pt-BR/translation.json +++ b/web/packages/base/locales/pt-BR/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "Nome do arquivo", "CLOSE": "Fechar", "NO": "Não", - "NOTHING_HERE": "", + "NOTHING_HERE": "Nada aqui ainda", "upload": "Enviar", "import": "Importar", "add_photos": "Adicionar fotos", diff --git a/web/packages/base/locales/zh-CN/translation.json b/web/packages/base/locales/zh-CN/translation.json index 48b90a3d81..fab485ba23 100644 --- a/web/packages/base/locales/zh-CN/translation.json +++ b/web/packages/base/locales/zh-CN/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "文件名", "CLOSE": "关闭", "NO": "否", - "NOTHING_HERE": "", + "NOTHING_HERE": "这里什么也没有", "upload": "上传", "import": "导入", "add_photos": "添加照片", From 5d210ab740b1797302704138014ea3e922b1bf74 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 16:02:41 +0530 Subject: [PATCH 43/61] Rename --- web/apps/photos/src/components/PhotoList/index.tsx | 2 +- web/packages/base/locales/ar-SA/translation.json | 2 +- web/packages/base/locales/bg-BG/translation.json | 2 +- web/packages/base/locales/ca-ES/translation.json | 2 +- web/packages/base/locales/da-DK/translation.json | 2 +- web/packages/base/locales/de-DE/translation.json | 2 +- web/packages/base/locales/el-GR/translation.json | 2 +- web/packages/base/locales/en-US/translation.json | 2 +- web/packages/base/locales/es-ES/translation.json | 2 +- web/packages/base/locales/et-EE/translation.json | 2 +- web/packages/base/locales/fa-IR/translation.json | 2 +- web/packages/base/locales/fi-FI/translation.json | 2 +- web/packages/base/locales/fr-FR/translation.json | 2 +- web/packages/base/locales/gu-IN/translation.json | 2 +- web/packages/base/locales/hi-IN/translation.json | 2 +- web/packages/base/locales/id-ID/translation.json | 2 +- web/packages/base/locales/is-IS/translation.json | 2 +- web/packages/base/locales/it-IT/translation.json | 2 +- web/packages/base/locales/ja-JP/translation.json | 2 +- web/packages/base/locales/km-KH/translation.json | 2 +- web/packages/base/locales/ko-KR/translation.json | 2 +- web/packages/base/locales/nl-NL/translation.json | 2 +- web/packages/base/locales/pl-PL/translation.json | 2 +- web/packages/base/locales/pt-BR/translation.json | 2 +- web/packages/base/locales/pt-PT/translation.json | 2 +- web/packages/base/locales/ru-RU/translation.json | 2 +- web/packages/base/locales/sv-SE/translation.json | 2 +- web/packages/base/locales/ta-IN/translation.json | 2 +- web/packages/base/locales/te-IN/translation.json | 2 +- web/packages/base/locales/th-TH/translation.json | 2 +- web/packages/base/locales/ti-ER/translation.json | 2 +- web/packages/base/locales/tr-TR/translation.json | 2 +- web/packages/base/locales/zh-CN/translation.json | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/web/apps/photos/src/components/PhotoList/index.tsx b/web/apps/photos/src/components/PhotoList/index.tsx index 2b879faf9a..e9777a8166 100644 --- a/web/apps/photos/src/components/PhotoList/index.tsx +++ b/web/apps/photos/src/components/PhotoList/index.tsx @@ -510,7 +510,7 @@ export function PhotoList({ itemType: ITEM_TYPE.OTHER, item: ( -
{t("NOTHING_HERE")}
+
{t("nothing_here")}
), id: "empty-list-banner", diff --git a/web/packages/base/locales/ar-SA/translation.json b/web/packages/base/locales/ar-SA/translation.json index 14e8241547..a135ad9350 100644 --- a/web/packages/base/locales/ar-SA/translation.json +++ b/web/packages/base/locales/ar-SA/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "إسم الملف", "CLOSE": "إغلاق", "NO": "لا", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "تحميل", "import": "استيراد", "add_photos": "إضافة صور", diff --git a/web/packages/base/locales/bg-BG/translation.json b/web/packages/base/locales/bg-BG/translation.json index 8d89f0718c..68f072f480 100644 --- a/web/packages/base/locales/bg-BG/translation.json +++ b/web/packages/base/locales/bg-BG/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "", "CLOSE": "", "NO": "", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "", "import": "", "add_photos": "", diff --git a/web/packages/base/locales/ca-ES/translation.json b/web/packages/base/locales/ca-ES/translation.json index a2df95ea52..fdee208028 100644 --- a/web/packages/base/locales/ca-ES/translation.json +++ b/web/packages/base/locales/ca-ES/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "", "CLOSE": "", "NO": "", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "", "import": "", "add_photos": "", diff --git a/web/packages/base/locales/da-DK/translation.json b/web/packages/base/locales/da-DK/translation.json index a2df95ea52..fdee208028 100644 --- a/web/packages/base/locales/da-DK/translation.json +++ b/web/packages/base/locales/da-DK/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "", "CLOSE": "", "NO": "", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "", "import": "", "add_photos": "", diff --git a/web/packages/base/locales/de-DE/translation.json b/web/packages/base/locales/de-DE/translation.json index 8d4db06fe8..95464c072d 100644 --- a/web/packages/base/locales/de-DE/translation.json +++ b/web/packages/base/locales/de-DE/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "Dateiname", "CLOSE": "Schließen", "NO": "Nein", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "Hochladen", "import": "Importieren", "add_photos": "Fotos hinzufügen", diff --git a/web/packages/base/locales/el-GR/translation.json b/web/packages/base/locales/el-GR/translation.json index 999ebaa9c2..08fee60b8b 100644 --- a/web/packages/base/locales/el-GR/translation.json +++ b/web/packages/base/locales/el-GR/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "Όνομα αρχείου", "CLOSE": "Κλείσιμο", "NO": "Όχι", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "Μεταφόρτωση", "import": "Εισαγωγή", "add_photos": "Προσθήκη φωτογραφιών", diff --git a/web/packages/base/locales/en-US/translation.json b/web/packages/base/locales/en-US/translation.json index 6e6ac74575..70ace0caa9 100644 --- a/web/packages/base/locales/en-US/translation.json +++ b/web/packages/base/locales/en-US/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "File name", "CLOSE": "Close", "NO": "No", - "NOTHING_HERE": "Nothing here yet", + "nothing_here": "Nothing here yet", "upload": "Upload", "import": "Import", "add_photos": "Add photos", diff --git a/web/packages/base/locales/es-ES/translation.json b/web/packages/base/locales/es-ES/translation.json index 36a5f58457..59fc933628 100644 --- a/web/packages/base/locales/es-ES/translation.json +++ b/web/packages/base/locales/es-ES/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "Nombre del archivo", "CLOSE": "Cerrar", "NO": "No", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "Cargar", "import": "Importar", "add_photos": "Añadir fotos", diff --git a/web/packages/base/locales/et-EE/translation.json b/web/packages/base/locales/et-EE/translation.json index a2df95ea52..fdee208028 100644 --- a/web/packages/base/locales/et-EE/translation.json +++ b/web/packages/base/locales/et-EE/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "", "CLOSE": "", "NO": "", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "", "import": "", "add_photos": "", diff --git a/web/packages/base/locales/fa-IR/translation.json b/web/packages/base/locales/fa-IR/translation.json index 2b2266a34d..7ba86a1f52 100644 --- a/web/packages/base/locales/fa-IR/translation.json +++ b/web/packages/base/locales/fa-IR/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "", "CLOSE": "", "NO": "", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "", "import": "", "add_photos": "", diff --git a/web/packages/base/locales/fi-FI/translation.json b/web/packages/base/locales/fi-FI/translation.json index 22ef432c06..b9fa414876 100644 --- a/web/packages/base/locales/fi-FI/translation.json +++ b/web/packages/base/locales/fi-FI/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "Tiedoston nimi", "CLOSE": "Sulje", "NO": "Ei", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "Lataa", "import": "Tuo", "add_photos": "Lisää kuvia", diff --git a/web/packages/base/locales/fr-FR/translation.json b/web/packages/base/locales/fr-FR/translation.json index d749ec9aaf..3997b3d313 100644 --- a/web/packages/base/locales/fr-FR/translation.json +++ b/web/packages/base/locales/fr-FR/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "Nom du fichier", "CLOSE": "Fermer", "NO": "Non", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "Charger", "import": "Importer", "add_photos": "Ajouter des photos", diff --git a/web/packages/base/locales/gu-IN/translation.json b/web/packages/base/locales/gu-IN/translation.json index a2df95ea52..fdee208028 100644 --- a/web/packages/base/locales/gu-IN/translation.json +++ b/web/packages/base/locales/gu-IN/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "", "CLOSE": "", "NO": "", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "", "import": "", "add_photos": "", diff --git a/web/packages/base/locales/hi-IN/translation.json b/web/packages/base/locales/hi-IN/translation.json index a2df95ea52..fdee208028 100644 --- a/web/packages/base/locales/hi-IN/translation.json +++ b/web/packages/base/locales/hi-IN/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "", "CLOSE": "", "NO": "", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "", "import": "", "add_photos": "", diff --git a/web/packages/base/locales/id-ID/translation.json b/web/packages/base/locales/id-ID/translation.json index 51189f1ede..b5067b1649 100644 --- a/web/packages/base/locales/id-ID/translation.json +++ b/web/packages/base/locales/id-ID/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "Nama file", "CLOSE": "Tutup", "NO": "Tidak", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "Unggah", "import": "Impor", "add_photos": "Tambahkan foto", diff --git a/web/packages/base/locales/is-IS/translation.json b/web/packages/base/locales/is-IS/translation.json index 1e940d36f3..2ebaaf781e 100644 --- a/web/packages/base/locales/is-IS/translation.json +++ b/web/packages/base/locales/is-IS/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "", "CLOSE": "Loka", "NO": "Nei", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "Hlaða upp", "import": "", "add_photos": "", diff --git a/web/packages/base/locales/it-IT/translation.json b/web/packages/base/locales/it-IT/translation.json index b00e775e2c..dbafb1201e 100644 --- a/web/packages/base/locales/it-IT/translation.json +++ b/web/packages/base/locales/it-IT/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "Nome del file", "CLOSE": "Chiudi", "NO": "No", - "NOTHING_HERE": "Non c'e ancora niente qui", + "nothing_here": "Non c'e ancora niente qui", "upload": "Carica", "import": "Importa", "add_photos": "Aggiungi foto", diff --git a/web/packages/base/locales/ja-JP/translation.json b/web/packages/base/locales/ja-JP/translation.json index a2df95ea52..fdee208028 100644 --- a/web/packages/base/locales/ja-JP/translation.json +++ b/web/packages/base/locales/ja-JP/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "", "CLOSE": "", "NO": "", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "", "import": "", "add_photos": "", diff --git a/web/packages/base/locales/km-KH/translation.json b/web/packages/base/locales/km-KH/translation.json index a2df95ea52..fdee208028 100644 --- a/web/packages/base/locales/km-KH/translation.json +++ b/web/packages/base/locales/km-KH/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "", "CLOSE": "", "NO": "", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "", "import": "", "add_photos": "", diff --git a/web/packages/base/locales/ko-KR/translation.json b/web/packages/base/locales/ko-KR/translation.json index 57ec280f84..3131d2720d 100644 --- a/web/packages/base/locales/ko-KR/translation.json +++ b/web/packages/base/locales/ko-KR/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "파일 이름", "CLOSE": "닫기", "NO": "아니오", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "업로드", "import": "가져오기", "add_photos": "사진 추가", diff --git a/web/packages/base/locales/nl-NL/translation.json b/web/packages/base/locales/nl-NL/translation.json index 0b55aa1705..0c3d61c978 100644 --- a/web/packages/base/locales/nl-NL/translation.json +++ b/web/packages/base/locales/nl-NL/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "Bestandsnaam", "CLOSE": "Sluiten", "NO": "Nee", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "Uploaden", "import": "Importeren", "add_photos": "Foto's toevoegen", diff --git a/web/packages/base/locales/pl-PL/translation.json b/web/packages/base/locales/pl-PL/translation.json index 2ebafcb095..f739fdbcee 100644 --- a/web/packages/base/locales/pl-PL/translation.json +++ b/web/packages/base/locales/pl-PL/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "Nazwa pliku", "CLOSE": "Zamknij", "NO": "Nie", - "NOTHING_HERE": "Nic tu jeszcze nie ma", + "nothing_here": "Nic tu jeszcze nie ma", "upload": "Prześlij", "import": "Importuj", "add_photos": "Dodaj zdjęcia", diff --git a/web/packages/base/locales/pt-BR/translation.json b/web/packages/base/locales/pt-BR/translation.json index ca8c8230b6..e9f13052a0 100644 --- a/web/packages/base/locales/pt-BR/translation.json +++ b/web/packages/base/locales/pt-BR/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "Nome do arquivo", "CLOSE": "Fechar", "NO": "Não", - "NOTHING_HERE": "Nada aqui ainda", + "nothing_here": "Nada aqui ainda", "upload": "Enviar", "import": "Importar", "add_photos": "Adicionar fotos", diff --git a/web/packages/base/locales/pt-PT/translation.json b/web/packages/base/locales/pt-PT/translation.json index 8ee320de07..899772b07b 100644 --- a/web/packages/base/locales/pt-PT/translation.json +++ b/web/packages/base/locales/pt-PT/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "Nome do ficheiro", "CLOSE": "Fechar", "NO": "Não", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "", "import": "Importar", "add_photos": "Adicionar fotos", diff --git a/web/packages/base/locales/ru-RU/translation.json b/web/packages/base/locales/ru-RU/translation.json index 028da64e5c..b6e4d1031c 100644 --- a/web/packages/base/locales/ru-RU/translation.json +++ b/web/packages/base/locales/ru-RU/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "Имя файла", "CLOSE": "Закрыть", "NO": "Нет", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "Загрузить", "import": "Импорт", "add_photos": "Добавить фотографии", diff --git a/web/packages/base/locales/sv-SE/translation.json b/web/packages/base/locales/sv-SE/translation.json index f8861c9945..b169c0c5de 100644 --- a/web/packages/base/locales/sv-SE/translation.json +++ b/web/packages/base/locales/sv-SE/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "Filnamn", "CLOSE": "Stäng", "NO": "Nej", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "Ladda upp", "import": "Importera", "add_photos": "Lägg till foton", diff --git a/web/packages/base/locales/ta-IN/translation.json b/web/packages/base/locales/ta-IN/translation.json index a2df95ea52..fdee208028 100644 --- a/web/packages/base/locales/ta-IN/translation.json +++ b/web/packages/base/locales/ta-IN/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "", "CLOSE": "", "NO": "", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "", "import": "", "add_photos": "", diff --git a/web/packages/base/locales/te-IN/translation.json b/web/packages/base/locales/te-IN/translation.json index a2df95ea52..fdee208028 100644 --- a/web/packages/base/locales/te-IN/translation.json +++ b/web/packages/base/locales/te-IN/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "", "CLOSE": "", "NO": "", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "", "import": "", "add_photos": "", diff --git a/web/packages/base/locales/th-TH/translation.json b/web/packages/base/locales/th-TH/translation.json index a2df95ea52..fdee208028 100644 --- a/web/packages/base/locales/th-TH/translation.json +++ b/web/packages/base/locales/th-TH/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "", "CLOSE": "", "NO": "", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "", "import": "", "add_photos": "", diff --git a/web/packages/base/locales/ti-ER/translation.json b/web/packages/base/locales/ti-ER/translation.json index a2df95ea52..fdee208028 100644 --- a/web/packages/base/locales/ti-ER/translation.json +++ b/web/packages/base/locales/ti-ER/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "", "CLOSE": "", "NO": "", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "", "import": "", "add_photos": "", diff --git a/web/packages/base/locales/tr-TR/translation.json b/web/packages/base/locales/tr-TR/translation.json index faa930266e..6010661a01 100644 --- a/web/packages/base/locales/tr-TR/translation.json +++ b/web/packages/base/locales/tr-TR/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "Dosya adı", "CLOSE": "Kapat", "NO": "Hayır", - "NOTHING_HERE": "", + "nothing_here": "", "upload": "", "import": "", "add_photos": "", diff --git a/web/packages/base/locales/zh-CN/translation.json b/web/packages/base/locales/zh-CN/translation.json index fab485ba23..d42a470104 100644 --- a/web/packages/base/locales/zh-CN/translation.json +++ b/web/packages/base/locales/zh-CN/translation.json @@ -48,7 +48,7 @@ "enter_file_name": "文件名", "CLOSE": "关闭", "NO": "否", - "NOTHING_HERE": "这里什么也没有", + "nothing_here": "这里什么也没有", "upload": "上传", "import": "导入", "add_photos": "添加照片", From 77f5d21dad2fe0425078ffac79a670fb5a43a3d2 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 16:04:38 +0530 Subject: [PATCH 44/61] Rename --- web/apps/photos/src/components/UserNameInputDialog.tsx | 2 +- web/packages/base/locales/ar-SA/translation.json | 2 +- web/packages/base/locales/bg-BG/translation.json | 2 +- web/packages/base/locales/ca-ES/translation.json | 2 +- web/packages/base/locales/da-DK/translation.json | 2 +- web/packages/base/locales/de-DE/translation.json | 2 +- web/packages/base/locales/el-GR/translation.json | 2 +- web/packages/base/locales/en-US/translation.json | 2 +- web/packages/base/locales/es-ES/translation.json | 2 +- web/packages/base/locales/et-EE/translation.json | 2 +- web/packages/base/locales/fa-IR/translation.json | 2 +- web/packages/base/locales/fi-FI/translation.json | 2 +- web/packages/base/locales/fr-FR/translation.json | 2 +- web/packages/base/locales/gu-IN/translation.json | 2 +- web/packages/base/locales/hi-IN/translation.json | 2 +- web/packages/base/locales/id-ID/translation.json | 2 +- web/packages/base/locales/is-IS/translation.json | 2 +- web/packages/base/locales/it-IT/translation.json | 2 +- web/packages/base/locales/ja-JP/translation.json | 2 +- web/packages/base/locales/km-KH/translation.json | 2 +- web/packages/base/locales/ko-KR/translation.json | 2 +- web/packages/base/locales/nl-NL/translation.json | 2 +- web/packages/base/locales/pl-PL/translation.json | 2 +- web/packages/base/locales/pt-BR/translation.json | 2 +- web/packages/base/locales/pt-PT/translation.json | 2 +- web/packages/base/locales/ru-RU/translation.json | 2 +- web/packages/base/locales/sv-SE/translation.json | 2 +- web/packages/base/locales/ta-IN/translation.json | 2 +- web/packages/base/locales/te-IN/translation.json | 2 +- web/packages/base/locales/th-TH/translation.json | 2 +- web/packages/base/locales/ti-ER/translation.json | 2 +- web/packages/base/locales/tr-TR/translation.json | 2 +- web/packages/base/locales/zh-CN/translation.json | 2 +- web/packages/new/photos/components/Gallery/PeopleHeader.tsx | 4 ++-- 34 files changed, 35 insertions(+), 35 deletions(-) diff --git a/web/apps/photos/src/components/UserNameInputDialog.tsx b/web/apps/photos/src/components/UserNameInputDialog.tsx index 8a709afa29..242fd357df 100644 --- a/web/apps/photos/src/components/UserNameInputDialog.tsx +++ b/web/apps/photos/src/components/UserNameInputDialog.tsx @@ -21,7 +21,7 @@ export default function UserNameInputDialog({ } /> - {t("ENTER_NAME")} + {t("enter_name")} diff --git a/web/packages/base/locales/ar-SA/translation.json b/web/packages/base/locales/ar-SA/translation.json index a135ad9350..cc63f3933e 100644 --- a/web/packages/base/locales/ar-SA/translation.json +++ b/web/packages/base/locales/ar-SA/translation.json @@ -9,7 +9,7 @@ "sign_up": "تسجيل", "NEW_USER": "جديد في Ente", "EXISTING_USER": "مستخدم موجود", - "ENTER_NAME": "أدخل الاسم", + "enter_name": "أدخل الاسم", "PUBLIC_UPLOADER_NAME_MESSAGE": "أضف اسما حتى يتمكن أصدقاؤك من معرفة من يشكرون على هذه الصور الرائعة!", "ENTER_EMAIL": "أدخل عنوان البريد الإلكتروني", "EMAIL_ERROR": "أدخل بريد إلكتروني صالح", diff --git a/web/packages/base/locales/bg-BG/translation.json b/web/packages/base/locales/bg-BG/translation.json index 68f072f480..eac7894454 100644 --- a/web/packages/base/locales/bg-BG/translation.json +++ b/web/packages/base/locales/bg-BG/translation.json @@ -9,7 +9,7 @@ "sign_up": "", "NEW_USER": "", "EXISTING_USER": "", - "ENTER_NAME": "", + "enter_name": "", "PUBLIC_UPLOADER_NAME_MESSAGE": "", "ENTER_EMAIL": "", "EMAIL_ERROR": "", diff --git a/web/packages/base/locales/ca-ES/translation.json b/web/packages/base/locales/ca-ES/translation.json index fdee208028..cd6f5e4fcc 100644 --- a/web/packages/base/locales/ca-ES/translation.json +++ b/web/packages/base/locales/ca-ES/translation.json @@ -9,7 +9,7 @@ "sign_up": "", "NEW_USER": "", "EXISTING_USER": "", - "ENTER_NAME": "", + "enter_name": "", "PUBLIC_UPLOADER_NAME_MESSAGE": "", "ENTER_EMAIL": "", "EMAIL_ERROR": "", diff --git a/web/packages/base/locales/da-DK/translation.json b/web/packages/base/locales/da-DK/translation.json index fdee208028..cd6f5e4fcc 100644 --- a/web/packages/base/locales/da-DK/translation.json +++ b/web/packages/base/locales/da-DK/translation.json @@ -9,7 +9,7 @@ "sign_up": "", "NEW_USER": "", "EXISTING_USER": "", - "ENTER_NAME": "", + "enter_name": "", "PUBLIC_UPLOADER_NAME_MESSAGE": "", "ENTER_EMAIL": "", "EMAIL_ERROR": "", diff --git a/web/packages/base/locales/de-DE/translation.json b/web/packages/base/locales/de-DE/translation.json index 95464c072d..8126c83fd7 100644 --- a/web/packages/base/locales/de-DE/translation.json +++ b/web/packages/base/locales/de-DE/translation.json @@ -9,7 +9,7 @@ "sign_up": "Registrieren", "NEW_USER": "Neu bei Ente", "EXISTING_USER": "Existierender Benutzer", - "ENTER_NAME": "Name eingeben", + "enter_name": "Name eingeben", "PUBLIC_UPLOADER_NAME_MESSAGE": "Füge einen Namen hinzu, damit deine Freunde wissen, wem sie für diese tollen Fotos zu danken haben!", "ENTER_EMAIL": "E-Mail-Adresse eingeben", "EMAIL_ERROR": "Geben Sie eine gültige E-Mail-Adresse ein", diff --git a/web/packages/base/locales/el-GR/translation.json b/web/packages/base/locales/el-GR/translation.json index 08fee60b8b..fd583ece06 100644 --- a/web/packages/base/locales/el-GR/translation.json +++ b/web/packages/base/locales/el-GR/translation.json @@ -9,7 +9,7 @@ "sign_up": "Εγγραφή", "NEW_USER": "Νέος/α στο Ente", "EXISTING_USER": "Υπάρχων χρήστης", - "ENTER_NAME": "Εισάγετε όνομα", + "enter_name": "Εισάγετε όνομα", "PUBLIC_UPLOADER_NAME_MESSAGE": "Προσθέστε ένα όνομα, ώστε οι φίλοι σας να γνωρίζουν ποιον να ευχαριστήσουν για αυτές τις υπέροχες φωτογραφίες!", "ENTER_EMAIL": "Εισάγετε διεύθυνση ηλ. ταχυδρομείου", "EMAIL_ERROR": "Εισάγετε μία έγκυρη διεύθυνση ηλ. ταχυδρομείου", diff --git a/web/packages/base/locales/en-US/translation.json b/web/packages/base/locales/en-US/translation.json index 70ace0caa9..13a22b0f7d 100644 --- a/web/packages/base/locales/en-US/translation.json +++ b/web/packages/base/locales/en-US/translation.json @@ -9,7 +9,7 @@ "sign_up": "Signup", "NEW_USER": "New to Ente", "EXISTING_USER": "Existing user", - "ENTER_NAME": "Enter name", + "enter_name": "Enter name", "PUBLIC_UPLOADER_NAME_MESSAGE": "Add a name so that your friends know who to thank for these great photos!", "ENTER_EMAIL": "Enter email address", "EMAIL_ERROR": "Enter a valid email", diff --git a/web/packages/base/locales/es-ES/translation.json b/web/packages/base/locales/es-ES/translation.json index 59fc933628..a96d249d7b 100644 --- a/web/packages/base/locales/es-ES/translation.json +++ b/web/packages/base/locales/es-ES/translation.json @@ -9,7 +9,7 @@ "sign_up": "Registro", "NEW_USER": "Nuevo en Ente", "EXISTING_USER": "Usuario existente", - "ENTER_NAME": "Introducir nombre", + "enter_name": "Introducir nombre", "PUBLIC_UPLOADER_NAME_MESSAGE": "¡Añade un nombre para que tus amigos sepan a quién dar las gracias por estas fotos geniales!", "ENTER_EMAIL": "Introducir email", "EMAIL_ERROR": "Introduce un email válido", diff --git a/web/packages/base/locales/et-EE/translation.json b/web/packages/base/locales/et-EE/translation.json index fdee208028..cd6f5e4fcc 100644 --- a/web/packages/base/locales/et-EE/translation.json +++ b/web/packages/base/locales/et-EE/translation.json @@ -9,7 +9,7 @@ "sign_up": "", "NEW_USER": "", "EXISTING_USER": "", - "ENTER_NAME": "", + "enter_name": "", "PUBLIC_UPLOADER_NAME_MESSAGE": "", "ENTER_EMAIL": "", "EMAIL_ERROR": "", diff --git a/web/packages/base/locales/fa-IR/translation.json b/web/packages/base/locales/fa-IR/translation.json index 7ba86a1f52..63090345e6 100644 --- a/web/packages/base/locales/fa-IR/translation.json +++ b/web/packages/base/locales/fa-IR/translation.json @@ -9,7 +9,7 @@ "sign_up": "", "NEW_USER": "", "EXISTING_USER": "", - "ENTER_NAME": "", + "enter_name": "", "PUBLIC_UPLOADER_NAME_MESSAGE": "", "ENTER_EMAIL": "", "EMAIL_ERROR": "", diff --git a/web/packages/base/locales/fi-FI/translation.json b/web/packages/base/locales/fi-FI/translation.json index b9fa414876..b917b45fe4 100644 --- a/web/packages/base/locales/fi-FI/translation.json +++ b/web/packages/base/locales/fi-FI/translation.json @@ -9,7 +9,7 @@ "sign_up": "Rekisteröidy", "NEW_USER": "Uusi Ente-käyttäjä", "EXISTING_USER": "Jo valmiiksi olemassaoleva käyttäjä", - "ENTER_NAME": "Lisää nimi", + "enter_name": "Lisää nimi", "PUBLIC_UPLOADER_NAME_MESSAGE": "Lisää nimi, jotta ystäväsi tietävät, ketä kiittää näistä hienoista kuvista!", "ENTER_EMAIL": "Syötä sähköpostiosoite", "EMAIL_ERROR": "Syötä voimassa oleva sähköpostiosoite", diff --git a/web/packages/base/locales/fr-FR/translation.json b/web/packages/base/locales/fr-FR/translation.json index 3997b3d313..798b030411 100644 --- a/web/packages/base/locales/fr-FR/translation.json +++ b/web/packages/base/locales/fr-FR/translation.json @@ -9,7 +9,7 @@ "sign_up": "Inscription", "NEW_USER": "Nouveau sur Ente", "EXISTING_USER": "Utilisateur existant", - "ENTER_NAME": "Saisir un nom", + "enter_name": "Saisir un nom", "PUBLIC_UPLOADER_NAME_MESSAGE": "Ajouter un nom afin que vos amis sachent qui remercier pour ces magnifiques photos!", "ENTER_EMAIL": "Saisir l'adresse e-mail", "EMAIL_ERROR": "Saisir un e-mail valide", diff --git a/web/packages/base/locales/gu-IN/translation.json b/web/packages/base/locales/gu-IN/translation.json index fdee208028..cd6f5e4fcc 100644 --- a/web/packages/base/locales/gu-IN/translation.json +++ b/web/packages/base/locales/gu-IN/translation.json @@ -9,7 +9,7 @@ "sign_up": "", "NEW_USER": "", "EXISTING_USER": "", - "ENTER_NAME": "", + "enter_name": "", "PUBLIC_UPLOADER_NAME_MESSAGE": "", "ENTER_EMAIL": "", "EMAIL_ERROR": "", diff --git a/web/packages/base/locales/hi-IN/translation.json b/web/packages/base/locales/hi-IN/translation.json index fdee208028..cd6f5e4fcc 100644 --- a/web/packages/base/locales/hi-IN/translation.json +++ b/web/packages/base/locales/hi-IN/translation.json @@ -9,7 +9,7 @@ "sign_up": "", "NEW_USER": "", "EXISTING_USER": "", - "ENTER_NAME": "", + "enter_name": "", "PUBLIC_UPLOADER_NAME_MESSAGE": "", "ENTER_EMAIL": "", "EMAIL_ERROR": "", diff --git a/web/packages/base/locales/id-ID/translation.json b/web/packages/base/locales/id-ID/translation.json index b5067b1649..57e64beb55 100644 --- a/web/packages/base/locales/id-ID/translation.json +++ b/web/packages/base/locales/id-ID/translation.json @@ -9,7 +9,7 @@ "sign_up": "Daftar", "NEW_USER": "Baru di Ente", "EXISTING_USER": "Pengguna yang sudah ada", - "ENTER_NAME": "Masukkan nama", + "enter_name": "Masukkan nama", "PUBLIC_UPLOADER_NAME_MESSAGE": "Tambahkan nama agar teman Anda tahu kepada siapa harus berterima kasih atas foto-foto hebat ini!", "ENTER_EMAIL": "Masukkan alamat email", "EMAIL_ERROR": "Masukkan email yang sah", diff --git a/web/packages/base/locales/is-IS/translation.json b/web/packages/base/locales/is-IS/translation.json index 2ebaaf781e..88fc382a08 100644 --- a/web/packages/base/locales/is-IS/translation.json +++ b/web/packages/base/locales/is-IS/translation.json @@ -9,7 +9,7 @@ "sign_up": "", "NEW_USER": "", "EXISTING_USER": "", - "ENTER_NAME": "", + "enter_name": "", "PUBLIC_UPLOADER_NAME_MESSAGE": "", "ENTER_EMAIL": "", "EMAIL_ERROR": "", diff --git a/web/packages/base/locales/it-IT/translation.json b/web/packages/base/locales/it-IT/translation.json index dbafb1201e..bf8f2cae2a 100644 --- a/web/packages/base/locales/it-IT/translation.json +++ b/web/packages/base/locales/it-IT/translation.json @@ -9,7 +9,7 @@ "sign_up": "Registrati", "NEW_USER": "Prima volta con Ente", "EXISTING_USER": "Accedi", - "ENTER_NAME": "Inserisci il nome", + "enter_name": "Inserisci il nome", "PUBLIC_UPLOADER_NAME_MESSAGE": "Aggiungi un nome in modo che i tuoi amici sappiano chi ringraziare per queste fantastiche foto!", "ENTER_EMAIL": "Inserisci l'indirizzo email", "EMAIL_ERROR": "Inserisci un indirizzo email valido", diff --git a/web/packages/base/locales/ja-JP/translation.json b/web/packages/base/locales/ja-JP/translation.json index fdee208028..cd6f5e4fcc 100644 --- a/web/packages/base/locales/ja-JP/translation.json +++ b/web/packages/base/locales/ja-JP/translation.json @@ -9,7 +9,7 @@ "sign_up": "", "NEW_USER": "", "EXISTING_USER": "", - "ENTER_NAME": "", + "enter_name": "", "PUBLIC_UPLOADER_NAME_MESSAGE": "", "ENTER_EMAIL": "", "EMAIL_ERROR": "", diff --git a/web/packages/base/locales/km-KH/translation.json b/web/packages/base/locales/km-KH/translation.json index fdee208028..cd6f5e4fcc 100644 --- a/web/packages/base/locales/km-KH/translation.json +++ b/web/packages/base/locales/km-KH/translation.json @@ -9,7 +9,7 @@ "sign_up": "", "NEW_USER": "", "EXISTING_USER": "", - "ENTER_NAME": "", + "enter_name": "", "PUBLIC_UPLOADER_NAME_MESSAGE": "", "ENTER_EMAIL": "", "EMAIL_ERROR": "", diff --git a/web/packages/base/locales/ko-KR/translation.json b/web/packages/base/locales/ko-KR/translation.json index 3131d2720d..5c1d83bac3 100644 --- a/web/packages/base/locales/ko-KR/translation.json +++ b/web/packages/base/locales/ko-KR/translation.json @@ -9,7 +9,7 @@ "sign_up": "회원가입", "NEW_USER": "Ente 의 새소식", "EXISTING_USER": "기존 회원 로그인", - "ENTER_NAME": "이름 입력", + "enter_name": "이름 입력", "PUBLIC_UPLOADER_NAME_MESSAGE": "친구들이 이 멋진 사진에 대해 고마워할 수 있도록 이름을 추가하세요!", "ENTER_EMAIL": "이메일 주소를 입력하세요", "EMAIL_ERROR": "올바른 이메일을 입력하세요", diff --git a/web/packages/base/locales/nl-NL/translation.json b/web/packages/base/locales/nl-NL/translation.json index 0c3d61c978..3288143a12 100644 --- a/web/packages/base/locales/nl-NL/translation.json +++ b/web/packages/base/locales/nl-NL/translation.json @@ -9,7 +9,7 @@ "sign_up": "Registreren", "NEW_USER": "Nieuw bij Ente", "EXISTING_USER": "Bestaande gebruiker", - "ENTER_NAME": "Naam invoeren", + "enter_name": "Naam invoeren", "PUBLIC_UPLOADER_NAME_MESSAGE": "Voeg een naam toe zodat je vrienden weten wie ze moeten bedanken voor deze geweldige foto's!", "ENTER_EMAIL": "Vul e-mailadres in", "EMAIL_ERROR": "Vul een geldig e-mailadres in", diff --git a/web/packages/base/locales/pl-PL/translation.json b/web/packages/base/locales/pl-PL/translation.json index f739fdbcee..fca6cd02c7 100644 --- a/web/packages/base/locales/pl-PL/translation.json +++ b/web/packages/base/locales/pl-PL/translation.json @@ -9,7 +9,7 @@ "sign_up": "Zarejestruj się", "NEW_USER": "Nowy/a do Ente", "EXISTING_USER": "Istniejący użytkownik", - "ENTER_NAME": "Wprowadź nazwę", + "enter_name": "Wprowadź nazwę", "PUBLIC_UPLOADER_NAME_MESSAGE": "Dodaj imię, aby Twoi znajomi wiedzieli, kto będzie mógł podziękować za te wspaniałe zdjęcia!", "ENTER_EMAIL": "Wprowadź adres e-mail", "EMAIL_ERROR": "Wprowadź prawidłowy adres e-mail", diff --git a/web/packages/base/locales/pt-BR/translation.json b/web/packages/base/locales/pt-BR/translation.json index e9f13052a0..0c4cb2ad1f 100644 --- a/web/packages/base/locales/pt-BR/translation.json +++ b/web/packages/base/locales/pt-BR/translation.json @@ -9,7 +9,7 @@ "sign_up": "Registrar", "NEW_USER": "Novo no Ente", "EXISTING_USER": "Usuário existente", - "ENTER_NAME": "Insira o nome", + "enter_name": "Insira o nome", "PUBLIC_UPLOADER_NAME_MESSAGE": "Adicione um nome para que os seus amigos saibam a quem agradecer por estas ótimas fotos!", "ENTER_EMAIL": "Insira o endereço de e-mail", "EMAIL_ERROR": "Inserir um endereço de e-mail válido", diff --git a/web/packages/base/locales/pt-PT/translation.json b/web/packages/base/locales/pt-PT/translation.json index 899772b07b..d7e9330c0d 100644 --- a/web/packages/base/locales/pt-PT/translation.json +++ b/web/packages/base/locales/pt-PT/translation.json @@ -9,7 +9,7 @@ "sign_up": "Registar", "NEW_USER": "Novo no Ente", "EXISTING_USER": "Utilizador existente", - "ENTER_NAME": "Insira o nome", + "enter_name": "Insira o nome", "PUBLIC_UPLOADER_NAME_MESSAGE": "Adicione um nome para que os seus amigos saibam a quem agradecer por estas ótimas fotos!", "ENTER_EMAIL": "Insira o endereço de email", "EMAIL_ERROR": "Inserir um endereço de email válido", diff --git a/web/packages/base/locales/ru-RU/translation.json b/web/packages/base/locales/ru-RU/translation.json index b6e4d1031c..f7168cb0e4 100644 --- a/web/packages/base/locales/ru-RU/translation.json +++ b/web/packages/base/locales/ru-RU/translation.json @@ -9,7 +9,7 @@ "sign_up": "Регистрация", "NEW_USER": "Новенький в Ente", "EXISTING_USER": "Существующий пользователь", - "ENTER_NAME": "Введите имя", + "enter_name": "Введите имя", "PUBLIC_UPLOADER_NAME_MESSAGE": "Добавьте имя, чтобы ваши друзья знали, кого благодарить за эти замечательные фотографии!", "ENTER_EMAIL": "Введите адрес электронной почты", "EMAIL_ERROR": "Введите действительный адрес электронной почты", diff --git a/web/packages/base/locales/sv-SE/translation.json b/web/packages/base/locales/sv-SE/translation.json index b169c0c5de..e146c87e71 100644 --- a/web/packages/base/locales/sv-SE/translation.json +++ b/web/packages/base/locales/sv-SE/translation.json @@ -9,7 +9,7 @@ "sign_up": "Registrera dig", "NEW_USER": "Ny hos Ente", "EXISTING_USER": "Befintlig användare", - "ENTER_NAME": "Ange namn", + "enter_name": "Ange namn", "PUBLIC_UPLOADER_NAME_MESSAGE": "Lägg till ett namn så att dina vänner vet vem de ska tacka för dessa fantastiska bilder!", "ENTER_EMAIL": "Ange e-postadress", "EMAIL_ERROR": "Ange en giltig e-postadress", diff --git a/web/packages/base/locales/ta-IN/translation.json b/web/packages/base/locales/ta-IN/translation.json index fdee208028..cd6f5e4fcc 100644 --- a/web/packages/base/locales/ta-IN/translation.json +++ b/web/packages/base/locales/ta-IN/translation.json @@ -9,7 +9,7 @@ "sign_up": "", "NEW_USER": "", "EXISTING_USER": "", - "ENTER_NAME": "", + "enter_name": "", "PUBLIC_UPLOADER_NAME_MESSAGE": "", "ENTER_EMAIL": "", "EMAIL_ERROR": "", diff --git a/web/packages/base/locales/te-IN/translation.json b/web/packages/base/locales/te-IN/translation.json index fdee208028..cd6f5e4fcc 100644 --- a/web/packages/base/locales/te-IN/translation.json +++ b/web/packages/base/locales/te-IN/translation.json @@ -9,7 +9,7 @@ "sign_up": "", "NEW_USER": "", "EXISTING_USER": "", - "ENTER_NAME": "", + "enter_name": "", "PUBLIC_UPLOADER_NAME_MESSAGE": "", "ENTER_EMAIL": "", "EMAIL_ERROR": "", diff --git a/web/packages/base/locales/th-TH/translation.json b/web/packages/base/locales/th-TH/translation.json index fdee208028..cd6f5e4fcc 100644 --- a/web/packages/base/locales/th-TH/translation.json +++ b/web/packages/base/locales/th-TH/translation.json @@ -9,7 +9,7 @@ "sign_up": "", "NEW_USER": "", "EXISTING_USER": "", - "ENTER_NAME": "", + "enter_name": "", "PUBLIC_UPLOADER_NAME_MESSAGE": "", "ENTER_EMAIL": "", "EMAIL_ERROR": "", diff --git a/web/packages/base/locales/ti-ER/translation.json b/web/packages/base/locales/ti-ER/translation.json index fdee208028..cd6f5e4fcc 100644 --- a/web/packages/base/locales/ti-ER/translation.json +++ b/web/packages/base/locales/ti-ER/translation.json @@ -9,7 +9,7 @@ "sign_up": "", "NEW_USER": "", "EXISTING_USER": "", - "ENTER_NAME": "", + "enter_name": "", "PUBLIC_UPLOADER_NAME_MESSAGE": "", "ENTER_EMAIL": "", "EMAIL_ERROR": "", diff --git a/web/packages/base/locales/tr-TR/translation.json b/web/packages/base/locales/tr-TR/translation.json index 6010661a01..7eebcb7354 100644 --- a/web/packages/base/locales/tr-TR/translation.json +++ b/web/packages/base/locales/tr-TR/translation.json @@ -9,7 +9,7 @@ "sign_up": "Hesap aç", "NEW_USER": "Yeni ente kullanıcısı", "EXISTING_USER": "Mevcut kullanıcı", - "ENTER_NAME": "İsim gir", + "enter_name": "İsim gir", "PUBLIC_UPLOADER_NAME_MESSAGE": "Arkadaşlarının bu harika fotoğraflar için kime teşekkür etmeleri gerektiğini bilmeleri için bir isim ekle!", "ENTER_EMAIL": "E-posta adresini girin", "EMAIL_ERROR": "Geçerli bir e-posta gir", diff --git a/web/packages/base/locales/zh-CN/translation.json b/web/packages/base/locales/zh-CN/translation.json index d42a470104..b6b7fb4ff4 100644 --- a/web/packages/base/locales/zh-CN/translation.json +++ b/web/packages/base/locales/zh-CN/translation.json @@ -9,7 +9,7 @@ "sign_up": "注册", "NEW_USER": "初来 Ente", "EXISTING_USER": "现有用户", - "ENTER_NAME": "输入名字", + "enter_name": "输入名字", "PUBLIC_UPLOADER_NAME_MESSAGE": "请添加一个名字,以便您的朋友知晓该感谢谁拍摄了这些精美的照片!", "ENTER_EMAIL": "请输入电子邮件地址", "EMAIL_ERROR": "请输入有效的电子邮件", diff --git a/web/packages/new/photos/components/Gallery/PeopleHeader.tsx b/web/packages/new/photos/components/Gallery/PeopleHeader.tsx index 8f13eb60c5..af3acb555d 100644 --- a/web/packages/new/photos/components/Gallery/PeopleHeader.tsx +++ b/web/packages/new/photos/components/Gallery/PeopleHeader.tsx @@ -173,7 +173,7 @@ const CGroupPersonOptions: React.FC = ({ open={openAddNameInput} onClose={() => setOpenAddNameInput(false)} title={pt("Rename person")} - placeholder={t("ENTER_NAME") /* TODO-Cluster */} + placeholder={t("enter_name") /* TODO-Cluster */} initialValue={cgroup.data.name ?? ""} submitButtonTitle={t("rename")} onSubmit={renamePersonUsingName} @@ -232,7 +232,7 @@ const ClusterPersonOptions: React.FC = ({ open={openNameInput} onClose={() => setOpenNameInput(false)} title={pt("Add person")} - placeholder={t("ENTER_NAME") /* TODO-Cluster */} + placeholder={t("enter_name") /* TODO-Cluster */} initialValue={""} submitButtonTitle={t("ADD")} onSubmit={addPersonWithName} From 6e23e5e453172ec9d2d0735ebb233fe2dee62981 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 16:06:24 +0530 Subject: [PATCH 45/61] Cons --- .../new/photos/components/Gallery/PeopleHeader.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/web/packages/new/photos/components/Gallery/PeopleHeader.tsx b/web/packages/new/photos/components/Gallery/PeopleHeader.tsx index af3acb555d..018e428494 100644 --- a/web/packages/new/photos/components/Gallery/PeopleHeader.tsx +++ b/web/packages/new/photos/components/Gallery/PeopleHeader.tsx @@ -172,8 +172,8 @@ const CGroupPersonOptions: React.FC = ({ setOpenAddNameInput(false)} - title={pt("Rename person")} - placeholder={t("enter_name") /* TODO-Cluster */} + title={pt("Rename person") /* TODO-Cluster pt()'s */} + placeholder={t("enter_name")} initialValue={cgroup.data.name ?? ""} submitButtonTitle={t("rename")} onSubmit={renamePersonUsingName} @@ -231,8 +231,8 @@ const ClusterPersonOptions: React.FC = ({ setOpenNameInput(false)} - title={pt("Add person")} - placeholder={t("enter_name") /* TODO-Cluster */} + title={pt("Add person") /* TODO-Cluster */} + placeholder={t("enter_name")} initialValue={""} submitButtonTitle={t("ADD")} onSubmit={addPersonWithName} From 636cd1395cba8c671cc591ed3f097a0e613b5245 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 16:08:16 +0530 Subject: [PATCH 46/61] Rename --- .../src/components/pages/gallery/SelectedFileOptions.tsx | 6 +++--- web/packages/base/locales/ar-SA/translation.json | 2 +- web/packages/base/locales/bg-BG/translation.json | 2 +- web/packages/base/locales/ca-ES/translation.json | 2 +- web/packages/base/locales/da-DK/translation.json | 2 +- web/packages/base/locales/de-DE/translation.json | 2 +- web/packages/base/locales/el-GR/translation.json | 2 +- web/packages/base/locales/en-US/translation.json | 2 +- web/packages/base/locales/es-ES/translation.json | 2 +- web/packages/base/locales/et-EE/translation.json | 2 +- web/packages/base/locales/fa-IR/translation.json | 2 +- web/packages/base/locales/fi-FI/translation.json | 2 +- web/packages/base/locales/fr-FR/translation.json | 2 +- web/packages/base/locales/gu-IN/translation.json | 2 +- web/packages/base/locales/hi-IN/translation.json | 2 +- web/packages/base/locales/id-ID/translation.json | 2 +- web/packages/base/locales/is-IS/translation.json | 2 +- web/packages/base/locales/it-IT/translation.json | 2 +- web/packages/base/locales/ja-JP/translation.json | 2 +- web/packages/base/locales/km-KH/translation.json | 2 +- web/packages/base/locales/ko-KR/translation.json | 2 +- web/packages/base/locales/nl-NL/translation.json | 2 +- web/packages/base/locales/pl-PL/translation.json | 2 +- web/packages/base/locales/pt-BR/translation.json | 2 +- web/packages/base/locales/pt-PT/translation.json | 2 +- web/packages/base/locales/ru-RU/translation.json | 2 +- web/packages/base/locales/sv-SE/translation.json | 2 +- web/packages/base/locales/ta-IN/translation.json | 2 +- web/packages/base/locales/te-IN/translation.json | 2 +- web/packages/base/locales/th-TH/translation.json | 2 +- web/packages/base/locales/ti-ER/translation.json | 2 +- web/packages/base/locales/tr-TR/translation.json | 2 +- web/packages/base/locales/zh-CN/translation.json | 2 +- web/packages/new/photos/components/Gallery/PeopleHeader.tsx | 2 +- 34 files changed, 36 insertions(+), 36 deletions(-) diff --git a/web/apps/photos/src/components/pages/gallery/SelectedFileOptions.tsx b/web/apps/photos/src/components/pages/gallery/SelectedFileOptions.tsx index b9f133a2d0..fe4d4ffdaa 100644 --- a/web/apps/photos/src/components/pages/gallery/SelectedFileOptions.tsx +++ b/web/apps/photos/src/components/pages/gallery/SelectedFileOptions.tsx @@ -191,7 +191,7 @@ const SelectedFileOptions = ({ - + @@ -225,7 +225,7 @@ const SelectedFileOptions = ({ - + @@ -328,7 +328,7 @@ const SelectedFileOptions = ({ - + diff --git a/web/packages/base/locales/ar-SA/translation.json b/web/packages/base/locales/ar-SA/translation.json index cc63f3933e..e6c7d10002 100644 --- a/web/packages/base/locales/ar-SA/translation.json +++ b/web/packages/base/locales/ar-SA/translation.json @@ -324,7 +324,7 @@ "hide_collection": "إخفاء الألبوم", "unhide_collection": "إلغاء إخفاء الألبوم", "MOVE": "نقل", - "ADD": "إضافة", + "add": "إضافة", "REMOVE": "ازالة", "YES_REMOVE": "نعم، إزالة", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/bg-BG/translation.json b/web/packages/base/locales/bg-BG/translation.json index eac7894454..18ae3b70e6 100644 --- a/web/packages/base/locales/bg-BG/translation.json +++ b/web/packages/base/locales/bg-BG/translation.json @@ -324,7 +324,7 @@ "hide_collection": "", "unhide_collection": "", "MOVE": "", - "ADD": "", + "add": "", "REMOVE": "", "YES_REMOVE": "", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/ca-ES/translation.json b/web/packages/base/locales/ca-ES/translation.json index cd6f5e4fcc..010470dcee 100644 --- a/web/packages/base/locales/ca-ES/translation.json +++ b/web/packages/base/locales/ca-ES/translation.json @@ -324,7 +324,7 @@ "hide_collection": "", "unhide_collection": "", "MOVE": "", - "ADD": "", + "add": "", "REMOVE": "", "YES_REMOVE": "", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/da-DK/translation.json b/web/packages/base/locales/da-DK/translation.json index cd6f5e4fcc..010470dcee 100644 --- a/web/packages/base/locales/da-DK/translation.json +++ b/web/packages/base/locales/da-DK/translation.json @@ -324,7 +324,7 @@ "hide_collection": "", "unhide_collection": "", "MOVE": "", - "ADD": "", + "add": "", "REMOVE": "", "YES_REMOVE": "", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/de-DE/translation.json b/web/packages/base/locales/de-DE/translation.json index 8126c83fd7..772e693748 100644 --- a/web/packages/base/locales/de-DE/translation.json +++ b/web/packages/base/locales/de-DE/translation.json @@ -324,7 +324,7 @@ "hide_collection": "Album ausblenden", "unhide_collection": "Album wieder einblenden", "MOVE": "Verschieben", - "ADD": "Hinzufügen", + "add": "Hinzufügen", "REMOVE": "Entfernen", "YES_REMOVE": "Ja, entfernen", "REMOVE_FROM_COLLECTION": "Aus Album entfernen", diff --git a/web/packages/base/locales/el-GR/translation.json b/web/packages/base/locales/el-GR/translation.json index fd583ece06..794e601544 100644 --- a/web/packages/base/locales/el-GR/translation.json +++ b/web/packages/base/locales/el-GR/translation.json @@ -324,7 +324,7 @@ "hide_collection": "Απόκρυψη άλμπουμ", "unhide_collection": "Επανεμφάνιση άλμπουμ", "MOVE": "Μετακίνηση", - "ADD": "Προσθήκη", + "add": "Προσθήκη", "REMOVE": "Αφαίρεση", "YES_REMOVE": "Ναι, αφαίρεση", "REMOVE_FROM_COLLECTION": "Αφαίρεση από το άλμπουμ", diff --git a/web/packages/base/locales/en-US/translation.json b/web/packages/base/locales/en-US/translation.json index 13a22b0f7d..9df1c62e42 100644 --- a/web/packages/base/locales/en-US/translation.json +++ b/web/packages/base/locales/en-US/translation.json @@ -324,7 +324,7 @@ "hide_collection": "Hide album", "unhide_collection": "Unhide album", "MOVE": "Move", - "ADD": "Add", + "add": "Add", "REMOVE": "Remove", "YES_REMOVE": "Yes, remove", "REMOVE_FROM_COLLECTION": "Remove from album", diff --git a/web/packages/base/locales/es-ES/translation.json b/web/packages/base/locales/es-ES/translation.json index a96d249d7b..4d320aa417 100644 --- a/web/packages/base/locales/es-ES/translation.json +++ b/web/packages/base/locales/es-ES/translation.json @@ -324,7 +324,7 @@ "hide_collection": "", "unhide_collection": "", "MOVE": "Mover", - "ADD": "Añadir", + "add": "Añadir", "REMOVE": "Eliminar", "YES_REMOVE": "Sí, eliminar", "REMOVE_FROM_COLLECTION": "Eliminar del álbum", diff --git a/web/packages/base/locales/et-EE/translation.json b/web/packages/base/locales/et-EE/translation.json index cd6f5e4fcc..010470dcee 100644 --- a/web/packages/base/locales/et-EE/translation.json +++ b/web/packages/base/locales/et-EE/translation.json @@ -324,7 +324,7 @@ "hide_collection": "", "unhide_collection": "", "MOVE": "", - "ADD": "", + "add": "", "REMOVE": "", "YES_REMOVE": "", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/fa-IR/translation.json b/web/packages/base/locales/fa-IR/translation.json index 63090345e6..da7bbdb1c6 100644 --- a/web/packages/base/locales/fa-IR/translation.json +++ b/web/packages/base/locales/fa-IR/translation.json @@ -324,7 +324,7 @@ "hide_collection": "", "unhide_collection": "", "MOVE": "", - "ADD": "", + "add": "", "REMOVE": "", "YES_REMOVE": "", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/fi-FI/translation.json b/web/packages/base/locales/fi-FI/translation.json index b917b45fe4..dc15ae7c3c 100644 --- a/web/packages/base/locales/fi-FI/translation.json +++ b/web/packages/base/locales/fi-FI/translation.json @@ -324,7 +324,7 @@ "hide_collection": "", "unhide_collection": "", "MOVE": "", - "ADD": "", + "add": "", "REMOVE": "", "YES_REMOVE": "", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/fr-FR/translation.json b/web/packages/base/locales/fr-FR/translation.json index 798b030411..2b3107171b 100644 --- a/web/packages/base/locales/fr-FR/translation.json +++ b/web/packages/base/locales/fr-FR/translation.json @@ -324,7 +324,7 @@ "hide_collection": "Masquer l'album", "unhide_collection": "Dévoiler l'album", "MOVE": "Déplacer", - "ADD": "Ajouter", + "add": "Ajouter", "REMOVE": "Retirer", "YES_REMOVE": "Oui, retirer", "REMOVE_FROM_COLLECTION": "Retirer de l'album", diff --git a/web/packages/base/locales/gu-IN/translation.json b/web/packages/base/locales/gu-IN/translation.json index cd6f5e4fcc..010470dcee 100644 --- a/web/packages/base/locales/gu-IN/translation.json +++ b/web/packages/base/locales/gu-IN/translation.json @@ -324,7 +324,7 @@ "hide_collection": "", "unhide_collection": "", "MOVE": "", - "ADD": "", + "add": "", "REMOVE": "", "YES_REMOVE": "", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/hi-IN/translation.json b/web/packages/base/locales/hi-IN/translation.json index cd6f5e4fcc..010470dcee 100644 --- a/web/packages/base/locales/hi-IN/translation.json +++ b/web/packages/base/locales/hi-IN/translation.json @@ -324,7 +324,7 @@ "hide_collection": "", "unhide_collection": "", "MOVE": "", - "ADD": "", + "add": "", "REMOVE": "", "YES_REMOVE": "", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/id-ID/translation.json b/web/packages/base/locales/id-ID/translation.json index 57e64beb55..866614410b 100644 --- a/web/packages/base/locales/id-ID/translation.json +++ b/web/packages/base/locales/id-ID/translation.json @@ -324,7 +324,7 @@ "hide_collection": "Sembunyikan album", "unhide_collection": "", "MOVE": "Pindahkan", - "ADD": "Tambah", + "add": "Tambah", "REMOVE": "Hapus", "YES_REMOVE": "Ya, hapus", "REMOVE_FROM_COLLECTION": "Hapus dari album", diff --git a/web/packages/base/locales/is-IS/translation.json b/web/packages/base/locales/is-IS/translation.json index 88fc382a08..42d0475f30 100644 --- a/web/packages/base/locales/is-IS/translation.json +++ b/web/packages/base/locales/is-IS/translation.json @@ -324,7 +324,7 @@ "hide_collection": "", "unhide_collection": "", "MOVE": "", - "ADD": "", + "add": "", "REMOVE": "", "YES_REMOVE": "", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/it-IT/translation.json b/web/packages/base/locales/it-IT/translation.json index bf8f2cae2a..5f420c8ffb 100644 --- a/web/packages/base/locales/it-IT/translation.json +++ b/web/packages/base/locales/it-IT/translation.json @@ -324,7 +324,7 @@ "hide_collection": "Nascondi album", "unhide_collection": "Rimuovi album dai nascosti", "MOVE": "Sposta", - "ADD": "Aggiungi", + "add": "Aggiungi", "REMOVE": "Rimuovi", "YES_REMOVE": "Sì, rimuovi", "REMOVE_FROM_COLLECTION": "Rimuovi dall'album", diff --git a/web/packages/base/locales/ja-JP/translation.json b/web/packages/base/locales/ja-JP/translation.json index cd6f5e4fcc..010470dcee 100644 --- a/web/packages/base/locales/ja-JP/translation.json +++ b/web/packages/base/locales/ja-JP/translation.json @@ -324,7 +324,7 @@ "hide_collection": "", "unhide_collection": "", "MOVE": "", - "ADD": "", + "add": "", "REMOVE": "", "YES_REMOVE": "", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/km-KH/translation.json b/web/packages/base/locales/km-KH/translation.json index cd6f5e4fcc..010470dcee 100644 --- a/web/packages/base/locales/km-KH/translation.json +++ b/web/packages/base/locales/km-KH/translation.json @@ -324,7 +324,7 @@ "hide_collection": "", "unhide_collection": "", "MOVE": "", - "ADD": "", + "add": "", "REMOVE": "", "YES_REMOVE": "", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/ko-KR/translation.json b/web/packages/base/locales/ko-KR/translation.json index 5c1d83bac3..664ca51db2 100644 --- a/web/packages/base/locales/ko-KR/translation.json +++ b/web/packages/base/locales/ko-KR/translation.json @@ -324,7 +324,7 @@ "hide_collection": "", "unhide_collection": "", "MOVE": "", - "ADD": "", + "add": "", "REMOVE": "", "YES_REMOVE": "", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/nl-NL/translation.json b/web/packages/base/locales/nl-NL/translation.json index 3288143a12..f12d17c9cb 100644 --- a/web/packages/base/locales/nl-NL/translation.json +++ b/web/packages/base/locales/nl-NL/translation.json @@ -324,7 +324,7 @@ "hide_collection": "Verberg album", "unhide_collection": "Album zichtbaar maken", "MOVE": "Verplaatsen", - "ADD": "Toevoegen", + "add": "Toevoegen", "REMOVE": "Verwijderen", "YES_REMOVE": "Ja, verwijderen", "REMOVE_FROM_COLLECTION": "Verwijderen uit album", diff --git a/web/packages/base/locales/pl-PL/translation.json b/web/packages/base/locales/pl-PL/translation.json index fca6cd02c7..f495d1ba1a 100644 --- a/web/packages/base/locales/pl-PL/translation.json +++ b/web/packages/base/locales/pl-PL/translation.json @@ -324,7 +324,7 @@ "hide_collection": "Ukryj album", "unhide_collection": "Odkryj album", "MOVE": "Przenieś", - "ADD": "Dodaj", + "add": "Dodaj", "REMOVE": "Usuń", "YES_REMOVE": "Tak, usuń", "REMOVE_FROM_COLLECTION": "Usuń z albumu", diff --git a/web/packages/base/locales/pt-BR/translation.json b/web/packages/base/locales/pt-BR/translation.json index 0c4cb2ad1f..c7b94be023 100644 --- a/web/packages/base/locales/pt-BR/translation.json +++ b/web/packages/base/locales/pt-BR/translation.json @@ -324,7 +324,7 @@ "hide_collection": "Ocultar álbum", "unhide_collection": "Reexibir álbum", "MOVE": "Mover", - "ADD": "Adicionar", + "add": "Adicionar", "REMOVE": "Remover", "YES_REMOVE": "Sim, remover", "REMOVE_FROM_COLLECTION": "Remover do álbum", diff --git a/web/packages/base/locales/pt-PT/translation.json b/web/packages/base/locales/pt-PT/translation.json index d7e9330c0d..e10aa06e23 100644 --- a/web/packages/base/locales/pt-PT/translation.json +++ b/web/packages/base/locales/pt-PT/translation.json @@ -324,7 +324,7 @@ "hide_collection": "", "unhide_collection": "", "MOVE": "", - "ADD": "", + "add": "", "REMOVE": "", "YES_REMOVE": "", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/ru-RU/translation.json b/web/packages/base/locales/ru-RU/translation.json index f7168cb0e4..ee5f8b210b 100644 --- a/web/packages/base/locales/ru-RU/translation.json +++ b/web/packages/base/locales/ru-RU/translation.json @@ -324,7 +324,7 @@ "hide_collection": "Скрыть альбом", "unhide_collection": "Показать альбом", "MOVE": "Подвиньте", - "ADD": "Добавь", + "add": "Добавь", "REMOVE": "Удалять", "YES_REMOVE": "Да, удалить", "REMOVE_FROM_COLLECTION": "Удалить из альбома", diff --git a/web/packages/base/locales/sv-SE/translation.json b/web/packages/base/locales/sv-SE/translation.json index e146c87e71..4a8bf3bcf6 100644 --- a/web/packages/base/locales/sv-SE/translation.json +++ b/web/packages/base/locales/sv-SE/translation.json @@ -324,7 +324,7 @@ "hide_collection": "Dölj album", "unhide_collection": "", "MOVE": "Flytta", - "ADD": "Lägg till", + "add": "Lägg till", "REMOVE": "", "YES_REMOVE": "", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/ta-IN/translation.json b/web/packages/base/locales/ta-IN/translation.json index cd6f5e4fcc..010470dcee 100644 --- a/web/packages/base/locales/ta-IN/translation.json +++ b/web/packages/base/locales/ta-IN/translation.json @@ -324,7 +324,7 @@ "hide_collection": "", "unhide_collection": "", "MOVE": "", - "ADD": "", + "add": "", "REMOVE": "", "YES_REMOVE": "", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/te-IN/translation.json b/web/packages/base/locales/te-IN/translation.json index cd6f5e4fcc..010470dcee 100644 --- a/web/packages/base/locales/te-IN/translation.json +++ b/web/packages/base/locales/te-IN/translation.json @@ -324,7 +324,7 @@ "hide_collection": "", "unhide_collection": "", "MOVE": "", - "ADD": "", + "add": "", "REMOVE": "", "YES_REMOVE": "", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/th-TH/translation.json b/web/packages/base/locales/th-TH/translation.json index cd6f5e4fcc..010470dcee 100644 --- a/web/packages/base/locales/th-TH/translation.json +++ b/web/packages/base/locales/th-TH/translation.json @@ -324,7 +324,7 @@ "hide_collection": "", "unhide_collection": "", "MOVE": "", - "ADD": "", + "add": "", "REMOVE": "", "YES_REMOVE": "", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/ti-ER/translation.json b/web/packages/base/locales/ti-ER/translation.json index cd6f5e4fcc..010470dcee 100644 --- a/web/packages/base/locales/ti-ER/translation.json +++ b/web/packages/base/locales/ti-ER/translation.json @@ -324,7 +324,7 @@ "hide_collection": "", "unhide_collection": "", "MOVE": "", - "ADD": "", + "add": "", "REMOVE": "", "YES_REMOVE": "", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/tr-TR/translation.json b/web/packages/base/locales/tr-TR/translation.json index 7eebcb7354..8ea1eae51d 100644 --- a/web/packages/base/locales/tr-TR/translation.json +++ b/web/packages/base/locales/tr-TR/translation.json @@ -324,7 +324,7 @@ "hide_collection": "", "unhide_collection": "", "MOVE": "", - "ADD": "", + "add": "", "REMOVE": "", "YES_REMOVE": "", "REMOVE_FROM_COLLECTION": "", diff --git a/web/packages/base/locales/zh-CN/translation.json b/web/packages/base/locales/zh-CN/translation.json index b6b7fb4ff4..cd1eebd744 100644 --- a/web/packages/base/locales/zh-CN/translation.json +++ b/web/packages/base/locales/zh-CN/translation.json @@ -324,7 +324,7 @@ "hide_collection": "隐藏相册", "unhide_collection": "取消隐藏相册", "MOVE": "移动", - "ADD": "添加", + "add": "添加", "REMOVE": "移除", "YES_REMOVE": "是,移除", "REMOVE_FROM_COLLECTION": "从相册中移除", diff --git a/web/packages/new/photos/components/Gallery/PeopleHeader.tsx b/web/packages/new/photos/components/Gallery/PeopleHeader.tsx index 018e428494..371490e6cc 100644 --- a/web/packages/new/photos/components/Gallery/PeopleHeader.tsx +++ b/web/packages/new/photos/components/Gallery/PeopleHeader.tsx @@ -234,7 +234,7 @@ const ClusterPersonOptions: React.FC = ({ title={pt("Add person") /* TODO-Cluster */} placeholder={t("enter_name")} initialValue={""} - submitButtonTitle={t("ADD")} + submitButtonTitle={t("add")} onSubmit={addPersonWithName} /> From a97ca411d7a1f0bbeb659ad5436f5123b88921b7 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 16:12:45 +0530 Subject: [PATCH 47/61] Rename --- .../src/components/PhotoViewer/ImageEditorOverlay/index.tsx | 2 +- web/packages/base/locales/ar-SA/translation.json | 2 +- web/packages/base/locales/bg-BG/translation.json | 2 +- web/packages/base/locales/ca-ES/translation.json | 2 +- web/packages/base/locales/da-DK/translation.json | 2 +- web/packages/base/locales/de-DE/translation.json | 2 +- web/packages/base/locales/el-GR/translation.json | 2 +- web/packages/base/locales/en-US/translation.json | 2 +- web/packages/base/locales/es-ES/translation.json | 2 +- web/packages/base/locales/et-EE/translation.json | 2 +- web/packages/base/locales/fa-IR/translation.json | 2 +- web/packages/base/locales/fi-FI/translation.json | 2 +- web/packages/base/locales/fr-FR/translation.json | 2 +- web/packages/base/locales/gu-IN/translation.json | 2 +- web/packages/base/locales/hi-IN/translation.json | 2 +- web/packages/base/locales/id-ID/translation.json | 2 +- web/packages/base/locales/is-IS/translation.json | 2 +- web/packages/base/locales/it-IT/translation.json | 2 +- web/packages/base/locales/ja-JP/translation.json | 2 +- web/packages/base/locales/km-KH/translation.json | 2 +- web/packages/base/locales/ko-KR/translation.json | 2 +- web/packages/base/locales/nl-NL/translation.json | 2 +- web/packages/base/locales/pl-PL/translation.json | 2 +- web/packages/base/locales/pt-BR/translation.json | 2 +- web/packages/base/locales/pt-PT/translation.json | 2 +- web/packages/base/locales/ru-RU/translation.json | 2 +- web/packages/base/locales/sv-SE/translation.json | 2 +- web/packages/base/locales/ta-IN/translation.json | 2 +- web/packages/base/locales/te-IN/translation.json | 2 +- web/packages/base/locales/th-TH/translation.json | 2 +- web/packages/base/locales/ti-ER/translation.json | 2 +- web/packages/base/locales/tr-TR/translation.json | 2 +- web/packages/base/locales/zh-CN/translation.json | 2 +- web/packages/new/photos/components/Gallery/PeopleHeader.tsx | 2 +- 34 files changed, 34 insertions(+), 34 deletions(-) diff --git a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx index b63c6c0c22..5674984e8e 100644 --- a/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/ImageEditorOverlay/index.tsx @@ -658,7 +658,7 @@ const ImageEditorOverlay = (props: IProps) => { /> - + = ({ ), close: { text: t("cancel") }, proceed: { - text: t("RESET"), + text: t("reset"), action: doDeletePerson, }, buttonDirection: "row", From 6bea1fa0f552b474dfa9a97e6395ea8f590e285f Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 16:20:10 +0530 Subject: [PATCH 48/61] Rename --- web/apps/photos/src/components/ExportFinished.tsx | 2 +- web/apps/photos/src/components/ExportInProgress.tsx | 2 +- web/apps/photos/src/components/ExportPendingList.tsx | 2 +- web/apps/photos/src/components/FilesDownloadProgress.tsx | 2 +- web/apps/photos/src/components/FixCreationTime.tsx | 2 +- web/apps/photos/src/components/PhotoViewer/index.tsx | 2 +- .../photos/src/components/Upload/UploadProgress/footer.tsx | 2 +- .../photos/src/components/Upload/UploadProgress/index.tsx | 2 +- .../photos/src/components/pages/gallery/PlanSelector.tsx | 2 +- web/apps/photos/src/utils/ui/index.tsx | 4 ++-- web/packages/base/locales/ar-SA/translation.json | 6 +++--- web/packages/base/locales/bg-BG/translation.json | 6 +++--- web/packages/base/locales/ca-ES/translation.json | 6 +++--- web/packages/base/locales/da-DK/translation.json | 6 +++--- web/packages/base/locales/de-DE/translation.json | 6 +++--- web/packages/base/locales/el-GR/translation.json | 6 +++--- web/packages/base/locales/en-US/translation.json | 6 +++--- web/packages/base/locales/es-ES/translation.json | 6 +++--- web/packages/base/locales/et-EE/translation.json | 6 +++--- web/packages/base/locales/fa-IR/translation.json | 6 +++--- web/packages/base/locales/fi-FI/translation.json | 6 +++--- web/packages/base/locales/fr-FR/translation.json | 6 +++--- web/packages/base/locales/gu-IN/translation.json | 6 +++--- web/packages/base/locales/hi-IN/translation.json | 6 +++--- web/packages/base/locales/id-ID/translation.json | 6 +++--- web/packages/base/locales/is-IS/translation.json | 6 +++--- web/packages/base/locales/it-IT/translation.json | 6 +++--- web/packages/base/locales/ja-JP/translation.json | 6 +++--- web/packages/base/locales/km-KH/translation.json | 6 +++--- web/packages/base/locales/ko-KR/translation.json | 6 +++--- web/packages/base/locales/nl-NL/translation.json | 6 +++--- web/packages/base/locales/pl-PL/translation.json | 6 +++--- web/packages/base/locales/pt-BR/translation.json | 6 +++--- web/packages/base/locales/pt-PT/translation.json | 6 +++--- web/packages/base/locales/ru-RU/translation.json | 6 +++--- web/packages/base/locales/sv-SE/translation.json | 6 +++--- web/packages/base/locales/ta-IN/translation.json | 6 +++--- web/packages/base/locales/te-IN/translation.json | 6 +++--- web/packages/base/locales/th-TH/translation.json | 6 +++--- web/packages/base/locales/ti-ER/translation.json | 6 +++--- web/packages/base/locales/tr-TR/translation.json | 6 +++--- web/packages/base/locales/zh-CN/translation.json | 6 +++--- 42 files changed, 107 insertions(+), 107 deletions(-) diff --git a/web/apps/photos/src/components/ExportFinished.tsx b/web/apps/photos/src/components/ExportFinished.tsx index 9ff74ec016..73ed119200 100644 --- a/web/apps/photos/src/components/ExportFinished.tsx +++ b/web/apps/photos/src/components/ExportFinished.tsx @@ -66,7 +66,7 @@ export default function ExportFinished(props: Props) { )} {(!step || step == "completed-with-errors") && ( diff --git a/web/apps/photos/src/components/PhotoViewer/index.tsx b/web/apps/photos/src/components/PhotoViewer/index.tsx index b15f1e3f44..95eeeb6f01 100644 --- a/web/apps/photos/src/components/PhotoViewer/index.tsx +++ b/web/apps/photos/src/components/PhotoViewer/index.tsx @@ -814,7 +814,7 @@ function PhotoViewer(props: PhotoViewerProps) { ) : ( ))} diff --git a/web/apps/photos/src/components/Upload/UploadProgress/index.tsx b/web/apps/photos/src/components/Upload/UploadProgress/index.tsx index 8b12298760..a2259c9c2a 100644 --- a/web/apps/photos/src/components/Upload/UploadProgress/index.tsx +++ b/web/apps/photos/src/components/Upload/UploadProgress/index.tsx @@ -57,7 +57,7 @@ export default function UploadProgress({ action: props.cancelUploads, }, close: { - text: t("NO"), + text: t("no"), variant: "secondary", action: () => {}, }, diff --git a/web/apps/photos/src/components/pages/gallery/PlanSelector.tsx b/web/apps/photos/src/components/pages/gallery/PlanSelector.tsx index 0d6725a1a1..fe3c8f8cb6 100644 --- a/web/apps/photos/src/components/pages/gallery/PlanSelector.tsx +++ b/web/apps/photos/src/components/pages/gallery/PlanSelector.tsx @@ -162,7 +162,7 @@ function PlanSelectorCard(props: PlanSelectorCardProps) { appContext.setDialogMessage({ title: t("OPEN_PLAN_SELECTOR_MODAL_FAILED"), content: t("UNKNOWN_ERROR"), - close: { text: t("CLOSE"), variant: "secondary" }, + close: { text: t("close"), variant: "secondary" }, proceed: { text: t("REOPEN_PLAN_SELECTOR_MODAL"), variant: "accent", diff --git a/web/apps/photos/src/utils/ui/index.tsx b/web/apps/photos/src/utils/ui/index.tsx index 0e8d72e8f6..ecd25edb64 100644 --- a/web/apps/photos/src/utils/ui/index.tsx +++ b/web/apps/photos/src/utils/ui/index.tsx @@ -20,7 +20,7 @@ export const getDownloadAppMessage = (): DialogBoxAttributes => { variant: "accent", }, close: { - text: t("CLOSE"), + text: t("close"), }, }; }; @@ -182,7 +182,7 @@ export const getEditorCloseConfirmationMessage = ( content: t("CONFIRM_EDITOR_CLOSE_DESCRIPTION"), proceed: { action: doClose, - text: t("CLOSE"), + text: t("close"), variant: "critical", }, close: { text: t("cancel") }, diff --git a/web/packages/base/locales/ar-SA/translation.json b/web/packages/base/locales/ar-SA/translation.json index 22b62de0a8..2e40fac137 100644 --- a/web/packages/base/locales/ar-SA/translation.json +++ b/web/packages/base/locales/ar-SA/translation.json @@ -44,10 +44,10 @@ "create_albums": "إنشاء ألبومات", "CREATE_COLLECTION": "ألبوم جديد", "enter_album_name": "اسم الألبوم", - "CLOSE_OPTION": "إغلاق (Esc)", + "close_key": "إغلاق (Esc)", "enter_file_name": "إسم الملف", - "CLOSE": "إغلاق", - "NO": "لا", + "close": "إغلاق", + "no": "لا", "nothing_here": "", "upload": "تحميل", "import": "استيراد", diff --git a/web/packages/base/locales/bg-BG/translation.json b/web/packages/base/locales/bg-BG/translation.json index 89d7e5de9f..43a3dc5b5b 100644 --- a/web/packages/base/locales/bg-BG/translation.json +++ b/web/packages/base/locales/bg-BG/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "", "enter_album_name": "", - "CLOSE_OPTION": "", + "close_key": "", "enter_file_name": "", - "CLOSE": "", - "NO": "", + "close": "", + "no": "", "nothing_here": "", "upload": "", "import": "", diff --git a/web/packages/base/locales/ca-ES/translation.json b/web/packages/base/locales/ca-ES/translation.json index 87f615726b..29219ec407 100644 --- a/web/packages/base/locales/ca-ES/translation.json +++ b/web/packages/base/locales/ca-ES/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "", "enter_album_name": "", - "CLOSE_OPTION": "", + "close_key": "", "enter_file_name": "", - "CLOSE": "", - "NO": "", + "close": "", + "no": "", "nothing_here": "", "upload": "", "import": "", diff --git a/web/packages/base/locales/da-DK/translation.json b/web/packages/base/locales/da-DK/translation.json index 87f615726b..29219ec407 100644 --- a/web/packages/base/locales/da-DK/translation.json +++ b/web/packages/base/locales/da-DK/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "", "enter_album_name": "", - "CLOSE_OPTION": "", + "close_key": "", "enter_file_name": "", - "CLOSE": "", - "NO": "", + "close": "", + "no": "", "nothing_here": "", "upload": "", "import": "", diff --git a/web/packages/base/locales/de-DE/translation.json b/web/packages/base/locales/de-DE/translation.json index fb353d105d..7ac86d7a7d 100644 --- a/web/packages/base/locales/de-DE/translation.json +++ b/web/packages/base/locales/de-DE/translation.json @@ -44,10 +44,10 @@ "create_albums": "Alben erstellen", "CREATE_COLLECTION": "Neues Album", "enter_album_name": "Albumname", - "CLOSE_OPTION": "Schließen (Esc)", + "close_key": "Schließen (Esc)", "enter_file_name": "Dateiname", - "CLOSE": "Schließen", - "NO": "Nein", + "close": "Schließen", + "no": "Nein", "nothing_here": "", "upload": "Hochladen", "import": "Importieren", diff --git a/web/packages/base/locales/el-GR/translation.json b/web/packages/base/locales/el-GR/translation.json index 35480cecdd..dd4b704078 100644 --- a/web/packages/base/locales/el-GR/translation.json +++ b/web/packages/base/locales/el-GR/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "Νέο άλμπουμ", "enter_album_name": "Όνομα άλμπουμ", - "CLOSE_OPTION": "Κλείσιμο (Esc)", + "close_key": "Κλείσιμο (Esc)", "enter_file_name": "Όνομα αρχείου", - "CLOSE": "Κλείσιμο", - "NO": "Όχι", + "close": "Κλείσιμο", + "no": "Όχι", "nothing_here": "", "upload": "Μεταφόρτωση", "import": "Εισαγωγή", diff --git a/web/packages/base/locales/en-US/translation.json b/web/packages/base/locales/en-US/translation.json index f88d024826..e64ebd3cca 100644 --- a/web/packages/base/locales/en-US/translation.json +++ b/web/packages/base/locales/en-US/translation.json @@ -44,10 +44,10 @@ "create_albums": "Create albums", "CREATE_COLLECTION": "New album", "enter_album_name": "Album name", - "CLOSE_OPTION": "Close (Esc)", + "close_key": "Close (Esc)", "enter_file_name": "File name", - "CLOSE": "Close", - "NO": "No", + "close": "Close", + "no": "No", "nothing_here": "Nothing here yet", "upload": "Upload", "import": "Import", diff --git a/web/packages/base/locales/es-ES/translation.json b/web/packages/base/locales/es-ES/translation.json index 328a28481a..1af45fa7e7 100644 --- a/web/packages/base/locales/es-ES/translation.json +++ b/web/packages/base/locales/es-ES/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "Nuevo álbum", "enter_album_name": "Nombre del álbum", - "CLOSE_OPTION": "Cerrar (Esc)", + "close_key": "Cerrar (Esc)", "enter_file_name": "Nombre del archivo", - "CLOSE": "Cerrar", - "NO": "No", + "close": "Cerrar", + "no": "No", "nothing_here": "", "upload": "Cargar", "import": "Importar", diff --git a/web/packages/base/locales/et-EE/translation.json b/web/packages/base/locales/et-EE/translation.json index 87f615726b..29219ec407 100644 --- a/web/packages/base/locales/et-EE/translation.json +++ b/web/packages/base/locales/et-EE/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "", "enter_album_name": "", - "CLOSE_OPTION": "", + "close_key": "", "enter_file_name": "", - "CLOSE": "", - "NO": "", + "close": "", + "no": "", "nothing_here": "", "upload": "", "import": "", diff --git a/web/packages/base/locales/fa-IR/translation.json b/web/packages/base/locales/fa-IR/translation.json index c78c9dc039..14bf634f2a 100644 --- a/web/packages/base/locales/fa-IR/translation.json +++ b/web/packages/base/locales/fa-IR/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "", "enter_album_name": "", - "CLOSE_OPTION": "", + "close_key": "", "enter_file_name": "", - "CLOSE": "", - "NO": "", + "close": "", + "no": "", "nothing_here": "", "upload": "", "import": "", diff --git a/web/packages/base/locales/fi-FI/translation.json b/web/packages/base/locales/fi-FI/translation.json index 03e0e1b321..bec523f1ea 100644 --- a/web/packages/base/locales/fi-FI/translation.json +++ b/web/packages/base/locales/fi-FI/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "Uusi albumi", "enter_album_name": "Albumin nimi", - "CLOSE_OPTION": "Sulje (Esc)", + "close_key": "Sulje (Esc)", "enter_file_name": "Tiedoston nimi", - "CLOSE": "Sulje", - "NO": "Ei", + "close": "Sulje", + "no": "Ei", "nothing_here": "", "upload": "Lataa", "import": "Tuo", diff --git a/web/packages/base/locales/fr-FR/translation.json b/web/packages/base/locales/fr-FR/translation.json index fec844544f..82fce31577 100644 --- a/web/packages/base/locales/fr-FR/translation.json +++ b/web/packages/base/locales/fr-FR/translation.json @@ -44,10 +44,10 @@ "create_albums": "Créer des albums", "CREATE_COLLECTION": "Nouvel album", "enter_album_name": "Nom de l'album", - "CLOSE_OPTION": "Fermer (Échap)", + "close_key": "Fermer (Échap)", "enter_file_name": "Nom du fichier", - "CLOSE": "Fermer", - "NO": "Non", + "close": "Fermer", + "no": "Non", "nothing_here": "", "upload": "Charger", "import": "Importer", diff --git a/web/packages/base/locales/gu-IN/translation.json b/web/packages/base/locales/gu-IN/translation.json index 87f615726b..29219ec407 100644 --- a/web/packages/base/locales/gu-IN/translation.json +++ b/web/packages/base/locales/gu-IN/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "", "enter_album_name": "", - "CLOSE_OPTION": "", + "close_key": "", "enter_file_name": "", - "CLOSE": "", - "NO": "", + "close": "", + "no": "", "nothing_here": "", "upload": "", "import": "", diff --git a/web/packages/base/locales/hi-IN/translation.json b/web/packages/base/locales/hi-IN/translation.json index 87f615726b..29219ec407 100644 --- a/web/packages/base/locales/hi-IN/translation.json +++ b/web/packages/base/locales/hi-IN/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "", "enter_album_name": "", - "CLOSE_OPTION": "", + "close_key": "", "enter_file_name": "", - "CLOSE": "", - "NO": "", + "close": "", + "no": "", "nothing_here": "", "upload": "", "import": "", diff --git a/web/packages/base/locales/id-ID/translation.json b/web/packages/base/locales/id-ID/translation.json index 470af00b6d..ba1263447f 100644 --- a/web/packages/base/locales/id-ID/translation.json +++ b/web/packages/base/locales/id-ID/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "Album baru", "enter_album_name": "Nama album", - "CLOSE_OPTION": "Tutup (Esc)", + "close_key": "Tutup (Esc)", "enter_file_name": "Nama file", - "CLOSE": "Tutup", - "NO": "Tidak", + "close": "Tutup", + "no": "Tidak", "nothing_here": "", "upload": "Unggah", "import": "Impor", diff --git a/web/packages/base/locales/is-IS/translation.json b/web/packages/base/locales/is-IS/translation.json index cc54f9fb1e..5bc73346e5 100644 --- a/web/packages/base/locales/is-IS/translation.json +++ b/web/packages/base/locales/is-IS/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "", "enter_album_name": "", - "CLOSE_OPTION": "", + "close_key": "", "enter_file_name": "", - "CLOSE": "Loka", - "NO": "Nei", + "close": "Loka", + "no": "Nei", "nothing_here": "", "upload": "Hlaða upp", "import": "", diff --git a/web/packages/base/locales/it-IT/translation.json b/web/packages/base/locales/it-IT/translation.json index 1cabbbe2d0..afd6dcc802 100644 --- a/web/packages/base/locales/it-IT/translation.json +++ b/web/packages/base/locales/it-IT/translation.json @@ -44,10 +44,10 @@ "create_albums": "Crea album", "CREATE_COLLECTION": "Nuovo album", "enter_album_name": "Nome album", - "CLOSE_OPTION": "Chiudi (Esc)", + "close_key": "Chiudi (Esc)", "enter_file_name": "Nome del file", - "CLOSE": "Chiudi", - "NO": "No", + "close": "Chiudi", + "no": "No", "nothing_here": "Non c'e ancora niente qui", "upload": "Carica", "import": "Importa", diff --git a/web/packages/base/locales/ja-JP/translation.json b/web/packages/base/locales/ja-JP/translation.json index 87f615726b..29219ec407 100644 --- a/web/packages/base/locales/ja-JP/translation.json +++ b/web/packages/base/locales/ja-JP/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "", "enter_album_name": "", - "CLOSE_OPTION": "", + "close_key": "", "enter_file_name": "", - "CLOSE": "", - "NO": "", + "close": "", + "no": "", "nothing_here": "", "upload": "", "import": "", diff --git a/web/packages/base/locales/km-KH/translation.json b/web/packages/base/locales/km-KH/translation.json index 87f615726b..29219ec407 100644 --- a/web/packages/base/locales/km-KH/translation.json +++ b/web/packages/base/locales/km-KH/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "", "enter_album_name": "", - "CLOSE_OPTION": "", + "close_key": "", "enter_file_name": "", - "CLOSE": "", - "NO": "", + "close": "", + "no": "", "nothing_here": "", "upload": "", "import": "", diff --git a/web/packages/base/locales/ko-KR/translation.json b/web/packages/base/locales/ko-KR/translation.json index 31719dd32c..112aff2af5 100644 --- a/web/packages/base/locales/ko-KR/translation.json +++ b/web/packages/base/locales/ko-KR/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "새 앨범", "enter_album_name": "앨범 이름", - "CLOSE_OPTION": "닫기 (Esc)", + "close_key": "닫기 (Esc)", "enter_file_name": "파일 이름", - "CLOSE": "닫기", - "NO": "아니오", + "close": "닫기", + "no": "아니오", "nothing_here": "", "upload": "업로드", "import": "가져오기", diff --git a/web/packages/base/locales/nl-NL/translation.json b/web/packages/base/locales/nl-NL/translation.json index ba377b3988..c504b91ecc 100644 --- a/web/packages/base/locales/nl-NL/translation.json +++ b/web/packages/base/locales/nl-NL/translation.json @@ -44,10 +44,10 @@ "create_albums": "Albums aanmaken", "CREATE_COLLECTION": "Nieuw album", "enter_album_name": "Albumnaam", - "CLOSE_OPTION": "Sluiten (Esc)", + "close_key": "Sluiten (Esc)", "enter_file_name": "Bestandsnaam", - "CLOSE": "Sluiten", - "NO": "Nee", + "close": "Sluiten", + "no": "Nee", "nothing_here": "", "upload": "Uploaden", "import": "Importeren", diff --git a/web/packages/base/locales/pl-PL/translation.json b/web/packages/base/locales/pl-PL/translation.json index 63f7a02886..4040b28df5 100644 --- a/web/packages/base/locales/pl-PL/translation.json +++ b/web/packages/base/locales/pl-PL/translation.json @@ -44,10 +44,10 @@ "create_albums": "Utwórz albumy", "CREATE_COLLECTION": "Nowy album", "enter_album_name": "Nazwa albumu", - "CLOSE_OPTION": "Zamknij (Esc)", + "close_key": "Zamknij (Esc)", "enter_file_name": "Nazwa pliku", - "CLOSE": "Zamknij", - "NO": "Nie", + "close": "Zamknij", + "no": "Nie", "nothing_here": "Nic tu jeszcze nie ma", "upload": "Prześlij", "import": "Importuj", diff --git a/web/packages/base/locales/pt-BR/translation.json b/web/packages/base/locales/pt-BR/translation.json index 071e5619dc..75d21753ce 100644 --- a/web/packages/base/locales/pt-BR/translation.json +++ b/web/packages/base/locales/pt-BR/translation.json @@ -44,10 +44,10 @@ "create_albums": "Criar álbuns", "CREATE_COLLECTION": "Novo álbum", "enter_album_name": "Nome do álbum", - "CLOSE_OPTION": "Fechar (Esc)", + "close_key": "Fechar (Esc)", "enter_file_name": "Nome do arquivo", - "CLOSE": "Fechar", - "NO": "Não", + "close": "Fechar", + "no": "Não", "nothing_here": "Nada aqui ainda", "upload": "Enviar", "import": "Importar", diff --git a/web/packages/base/locales/pt-PT/translation.json b/web/packages/base/locales/pt-PT/translation.json index 855b522141..d75db09d8d 100644 --- a/web/packages/base/locales/pt-PT/translation.json +++ b/web/packages/base/locales/pt-PT/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "Novo álbum", "enter_album_name": "Nome do álbum", - "CLOSE_OPTION": "Fechar (Esc)", + "close_key": "Fechar (Esc)", "enter_file_name": "Nome do ficheiro", - "CLOSE": "Fechar", - "NO": "Não", + "close": "Fechar", + "no": "Não", "nothing_here": "", "upload": "", "import": "Importar", diff --git a/web/packages/base/locales/ru-RU/translation.json b/web/packages/base/locales/ru-RU/translation.json index a2eb324b86..591b3dd0af 100644 --- a/web/packages/base/locales/ru-RU/translation.json +++ b/web/packages/base/locales/ru-RU/translation.json @@ -44,10 +44,10 @@ "create_albums": "Создать альбомы", "CREATE_COLLECTION": "Новый альбом", "enter_album_name": "Название альбома", - "CLOSE_OPTION": "Закрыть (Esc)", + "close_key": "Закрыть (Esc)", "enter_file_name": "Имя файла", - "CLOSE": "Закрыть", - "NO": "Нет", + "close": "Закрыть", + "no": "Нет", "nothing_here": "", "upload": "Загрузить", "import": "Импорт", diff --git a/web/packages/base/locales/sv-SE/translation.json b/web/packages/base/locales/sv-SE/translation.json index 5756e8678d..ae4d291cd4 100644 --- a/web/packages/base/locales/sv-SE/translation.json +++ b/web/packages/base/locales/sv-SE/translation.json @@ -44,10 +44,10 @@ "create_albums": "Skapa album", "CREATE_COLLECTION": "Nytt album", "enter_album_name": "Albumnamn", - "CLOSE_OPTION": "Stäng (Esc)", + "close_key": "Stäng (Esc)", "enter_file_name": "Filnamn", - "CLOSE": "Stäng", - "NO": "Nej", + "close": "Stäng", + "no": "Nej", "nothing_here": "", "upload": "Ladda upp", "import": "Importera", diff --git a/web/packages/base/locales/ta-IN/translation.json b/web/packages/base/locales/ta-IN/translation.json index 87f615726b..29219ec407 100644 --- a/web/packages/base/locales/ta-IN/translation.json +++ b/web/packages/base/locales/ta-IN/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "", "enter_album_name": "", - "CLOSE_OPTION": "", + "close_key": "", "enter_file_name": "", - "CLOSE": "", - "NO": "", + "close": "", + "no": "", "nothing_here": "", "upload": "", "import": "", diff --git a/web/packages/base/locales/te-IN/translation.json b/web/packages/base/locales/te-IN/translation.json index 87f615726b..29219ec407 100644 --- a/web/packages/base/locales/te-IN/translation.json +++ b/web/packages/base/locales/te-IN/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "", "enter_album_name": "", - "CLOSE_OPTION": "", + "close_key": "", "enter_file_name": "", - "CLOSE": "", - "NO": "", + "close": "", + "no": "", "nothing_here": "", "upload": "", "import": "", diff --git a/web/packages/base/locales/th-TH/translation.json b/web/packages/base/locales/th-TH/translation.json index 87f615726b..29219ec407 100644 --- a/web/packages/base/locales/th-TH/translation.json +++ b/web/packages/base/locales/th-TH/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "", "enter_album_name": "", - "CLOSE_OPTION": "", + "close_key": "", "enter_file_name": "", - "CLOSE": "", - "NO": "", + "close": "", + "no": "", "nothing_here": "", "upload": "", "import": "", diff --git a/web/packages/base/locales/ti-ER/translation.json b/web/packages/base/locales/ti-ER/translation.json index 87f615726b..29219ec407 100644 --- a/web/packages/base/locales/ti-ER/translation.json +++ b/web/packages/base/locales/ti-ER/translation.json @@ -44,10 +44,10 @@ "create_albums": "", "CREATE_COLLECTION": "", "enter_album_name": "", - "CLOSE_OPTION": "", + "close_key": "", "enter_file_name": "", - "CLOSE": "", - "NO": "", + "close": "", + "no": "", "nothing_here": "", "upload": "", "import": "", diff --git a/web/packages/base/locales/tr-TR/translation.json b/web/packages/base/locales/tr-TR/translation.json index 3c25e52fa9..4a9f11a64e 100644 --- a/web/packages/base/locales/tr-TR/translation.json +++ b/web/packages/base/locales/tr-TR/translation.json @@ -44,10 +44,10 @@ "create_albums": "Albüm oluştur", "CREATE_COLLECTION": "Yeni albüm", "enter_album_name": "Albüm adı", - "CLOSE_OPTION": "Kapat (Esc)", + "close_key": "Kapat (Esc)", "enter_file_name": "Dosya adı", - "CLOSE": "Kapat", - "NO": "Hayır", + "close": "Kapat", + "no": "Hayır", "nothing_here": "", "upload": "", "import": "", diff --git a/web/packages/base/locales/zh-CN/translation.json b/web/packages/base/locales/zh-CN/translation.json index 595d856a88..817c4de95f 100644 --- a/web/packages/base/locales/zh-CN/translation.json +++ b/web/packages/base/locales/zh-CN/translation.json @@ -44,10 +44,10 @@ "create_albums": "创建相册", "CREATE_COLLECTION": "新建相册", "enter_album_name": "相册名称", - "CLOSE_OPTION": "关闭 (或按Esc键)", + "close_key": "关闭 (或按Esc键)", "enter_file_name": "文件名", - "CLOSE": "关闭", - "NO": "否", + "close": "关闭", + "no": "否", "nothing_here": "这里什么也没有", "upload": "上传", "import": "导入", From 27a34a08f43f952319eff579a44860d2ffd42ee3 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 16:15:56 +0530 Subject: [PATCH 49/61] Rename --- web/apps/photos/src/pages/index.tsx | 12 ++++++------ web/packages/base/locales/ar-SA/translation.json | 12 ++++++------ web/packages/base/locales/bg-BG/translation.json | 12 ++++++------ web/packages/base/locales/ca-ES/translation.json | 12 ++++++------ web/packages/base/locales/da-DK/translation.json | 12 ++++++------ web/packages/base/locales/de-DE/translation.json | 12 ++++++------ web/packages/base/locales/el-GR/translation.json | 12 ++++++------ web/packages/base/locales/en-US/translation.json | 12 ++++++------ web/packages/base/locales/es-ES/translation.json | 12 ++++++------ web/packages/base/locales/et-EE/translation.json | 12 ++++++------ web/packages/base/locales/fa-IR/translation.json | 12 ++++++------ web/packages/base/locales/fi-FI/translation.json | 12 ++++++------ web/packages/base/locales/fr-FR/translation.json | 12 ++++++------ web/packages/base/locales/gu-IN/translation.json | 12 ++++++------ web/packages/base/locales/hi-IN/translation.json | 12 ++++++------ web/packages/base/locales/id-ID/translation.json | 12 ++++++------ web/packages/base/locales/is-IS/translation.json | 12 ++++++------ web/packages/base/locales/it-IT/translation.json | 12 ++++++------ web/packages/base/locales/ja-JP/translation.json | 12 ++++++------ web/packages/base/locales/km-KH/translation.json | 12 ++++++------ web/packages/base/locales/ko-KR/translation.json | 12 ++++++------ web/packages/base/locales/nl-NL/translation.json | 12 ++++++------ web/packages/base/locales/pl-PL/translation.json | 12 ++++++------ web/packages/base/locales/pt-BR/translation.json | 12 ++++++------ web/packages/base/locales/pt-PT/translation.json | 12 ++++++------ web/packages/base/locales/ru-RU/translation.json | 12 ++++++------ web/packages/base/locales/sv-SE/translation.json | 12 ++++++------ web/packages/base/locales/ta-IN/translation.json | 12 ++++++------ web/packages/base/locales/te-IN/translation.json | 12 ++++++------ web/packages/base/locales/th-TH/translation.json | 12 ++++++------ web/packages/base/locales/ti-ER/translation.json | 12 ++++++------ web/packages/base/locales/tr-TR/translation.json | 12 ++++++------ web/packages/base/locales/zh-CN/translation.json | 12 ++++++------ 33 files changed, 198 insertions(+), 198 deletions(-) diff --git a/web/apps/photos/src/pages/index.tsx b/web/apps/photos/src/pages/index.tsx index 635685b7e3..b38cb55b5b 100644 --- a/web/apps/photos/src/pages/index.tsx +++ b/web/apps/photos/src/pages/index.tsx @@ -318,9 +318,9 @@ const Slideshow: React.FC = () => { /images/onboarding-lock/3x.png 3x" /> - + - {t("HERO_SLIDE_1")} + {t("intro_slide_1")} @@ -330,9 +330,9 @@ const Slideshow: React.FC = () => { /images/onboarding-safe/3x.png 3x" /> - + - {t("HERO_SLIDE_2")} + {t("intro_slide_2")} @@ -343,9 +343,9 @@ const Slideshow: React.FC = () => { /images/onboarding-sync/3x.png 3x" /> - + - {t("HERO_SLIDE_3")} + {t("intro_slide_3")} diff --git a/web/packages/base/locales/ar-SA/translation.json b/web/packages/base/locales/ar-SA/translation.json index 2e40fac137..b3289fc665 100644 --- a/web/packages/base/locales/ar-SA/translation.json +++ b/web/packages/base/locales/ar-SA/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "
نسخ احتياطية خاصة
لذكرياتك
", - "HERO_SLIDE_1": "تشفير من طرف إلى طرف بشكل افتراضي", - "HERO_SLIDE_2_TITLE": "
يتم تخزينها بأمان
في ملجأ للطوارئ
", - "HERO_SLIDE_2": "مصممة لتدوم", - "HERO_SLIDE_3_TITLE": "
متاح
في كل مكان
", - "HERO_SLIDE_3": "أندرويد، آي أو إس، ويب، سطح المكتب", + "intro_slide_1_title": "
نسخ احتياطية خاصة
لذكرياتك
", + "intro_slide_1": "تشفير من طرف إلى طرف بشكل افتراضي", + "intro_slide_2_title": "
يتم تخزينها بأمان
في ملجأ للطوارئ
", + "intro_slide_2": "مصممة لتدوم", + "intro_slide_3_title": "
متاح
في كل مكان
", + "intro_slide_3": "أندرويد، آي أو إس، ويب، سطح المكتب", "login": "تسجيل الدخول", "sign_up": "تسجيل", "NEW_USER": "جديد في Ente", diff --git a/web/packages/base/locales/bg-BG/translation.json b/web/packages/base/locales/bg-BG/translation.json index 43a3dc5b5b..0c59e395ba 100644 --- a/web/packages/base/locales/bg-BG/translation.json +++ b/web/packages/base/locales/bg-BG/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "
Личен бекъп
на твоите спомени
", - "HERO_SLIDE_1": "Криптиран от край до край по подразбиране", - "HERO_SLIDE_2_TITLE": "", - "HERO_SLIDE_2": "", - "HERO_SLIDE_3_TITLE": "", - "HERO_SLIDE_3": "", + "intro_slide_1_title": "
Личен бекъп
на твоите спомени
", + "intro_slide_1": "Криптиран от край до край по подразбиране", + "intro_slide_2_title": "", + "intro_slide_2": "", + "intro_slide_3_title": "", + "intro_slide_3": "", "login": "", "sign_up": "", "NEW_USER": "", diff --git a/web/packages/base/locales/ca-ES/translation.json b/web/packages/base/locales/ca-ES/translation.json index 29219ec407..121b20d8ab 100644 --- a/web/packages/base/locales/ca-ES/translation.json +++ b/web/packages/base/locales/ca-ES/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "", - "HERO_SLIDE_1": "", - "HERO_SLIDE_2_TITLE": "", - "HERO_SLIDE_2": "", - "HERO_SLIDE_3_TITLE": "", - "HERO_SLIDE_3": "", + "intro_slide_1_title": "", + "intro_slide_1": "", + "intro_slide_2_title": "", + "intro_slide_2": "", + "intro_slide_3_title": "", + "intro_slide_3": "", "login": "", "sign_up": "", "NEW_USER": "", diff --git a/web/packages/base/locales/da-DK/translation.json b/web/packages/base/locales/da-DK/translation.json index 29219ec407..121b20d8ab 100644 --- a/web/packages/base/locales/da-DK/translation.json +++ b/web/packages/base/locales/da-DK/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "", - "HERO_SLIDE_1": "", - "HERO_SLIDE_2_TITLE": "", - "HERO_SLIDE_2": "", - "HERO_SLIDE_3_TITLE": "", - "HERO_SLIDE_3": "", + "intro_slide_1_title": "", + "intro_slide_1": "", + "intro_slide_2_title": "", + "intro_slide_2": "", + "intro_slide_3_title": "", + "intro_slide_3": "", "login": "", "sign_up": "", "NEW_USER": "", diff --git a/web/packages/base/locales/de-DE/translation.json b/web/packages/base/locales/de-DE/translation.json index 7ac86d7a7d..3520207962 100644 --- a/web/packages/base/locales/de-DE/translation.json +++ b/web/packages/base/locales/de-DE/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "
Private Sicherungen
für deine Erinnerungen
", - "HERO_SLIDE_1": "Standardmäßig Ende-zu-Ende verschlüsselt", - "HERO_SLIDE_2_TITLE": "
Sicher gespeichert
in einem Luftschutzbunker
", - "HERO_SLIDE_2": "Entwickelt, um zu überleben", - "HERO_SLIDE_3_TITLE": "
Überall
verfügbar
", - "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "intro_slide_1_title": "
Private Sicherungen
für deine Erinnerungen
", + "intro_slide_1": "Standardmäßig Ende-zu-Ende verschlüsselt", + "intro_slide_2_title": "
Sicher gespeichert
in einem Luftschutzbunker
", + "intro_slide_2": "Entwickelt, um zu überleben", + "intro_slide_3_title": "
Überall
verfügbar
", + "intro_slide_3": "Android, iOS, Web, Desktop", "login": "Anmelden", "sign_up": "Registrieren", "NEW_USER": "Neu bei Ente", diff --git a/web/packages/base/locales/el-GR/translation.json b/web/packages/base/locales/el-GR/translation.json index dd4b704078..a192345d9e 100644 --- a/web/packages/base/locales/el-GR/translation.json +++ b/web/packages/base/locales/el-GR/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "
Ιδιωτικά αντίγραφα ασφαλείας
για τις αναμνήσεις σας
", - "HERO_SLIDE_1": "Από προεπιλογή κρυπτογραφημένο από άκρο σε άκρο", - "HERO_SLIDE_2_TITLE": "", - "HERO_SLIDE_2": "Σχεδιάστηκε για να επιζήσει", - "HERO_SLIDE_3_TITLE": "
Διαθέσιμο
παντού
", - "HERO_SLIDE_3": "", + "intro_slide_1_title": "
Ιδιωτικά αντίγραφα ασφαλείας
για τις αναμνήσεις σας
", + "intro_slide_1": "Από προεπιλογή κρυπτογραφημένο από άκρο σε άκρο", + "intro_slide_2_title": "", + "intro_slide_2": "Σχεδιάστηκε για να επιζήσει", + "intro_slide_3_title": "
Διαθέσιμο
παντού
", + "intro_slide_3": "", "login": "Σύνδεση", "sign_up": "Εγγραφή", "NEW_USER": "Νέος/α στο Ente", diff --git a/web/packages/base/locales/en-US/translation.json b/web/packages/base/locales/en-US/translation.json index e64ebd3cca..6d7993ce39 100644 --- a/web/packages/base/locales/en-US/translation.json +++ b/web/packages/base/locales/en-US/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "
Private backups
for your memories
", - "HERO_SLIDE_1": "End-to-end encrypted by default", - "HERO_SLIDE_2_TITLE": "
Safely stored
at a fallout shelter
", - "HERO_SLIDE_2": "Designed to outlive", - "HERO_SLIDE_3_TITLE": "
Available
everywhere
", - "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "intro_slide_1_title": "
Private backups
for your memories
", + "intro_slide_1": "End-to-end encrypted by default", + "intro_slide_2_title": "
Safely stored
at a fallout shelter
", + "intro_slide_2": "Designed to outlive", + "intro_slide_3_title": "
Available
everywhere
", + "intro_slide_3": "Android, iOS, Web, Desktop", "login": "Login", "sign_up": "Signup", "NEW_USER": "New to Ente", diff --git a/web/packages/base/locales/es-ES/translation.json b/web/packages/base/locales/es-ES/translation.json index 1af45fa7e7..d9c8d9e88b 100644 --- a/web/packages/base/locales/es-ES/translation.json +++ b/web/packages/base/locales/es-ES/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "
Copias de seguridad privadas
para su recuerdos
", - "HERO_SLIDE_1": "Encriptado de extremo a extremo por defecto", - "HERO_SLIDE_2_TITLE": "
Almacenado de forma segura
en un refugio de llenos
", - "HERO_SLIDE_2": "Diseñado para superar", - "HERO_SLIDE_3_TITLE": "
Disponible
en todas partes
", - "HERO_SLIDE_3": "Android, iOS, web, computadora", + "intro_slide_1_title": "
Copias de seguridad privadas
para su recuerdos
", + "intro_slide_1": "Encriptado de extremo a extremo por defecto", + "intro_slide_2_title": "
Almacenado de forma segura
en un refugio de llenos
", + "intro_slide_2": "Diseñado para superar", + "intro_slide_3_title": "
Disponible
en todas partes
", + "intro_slide_3": "Android, iOS, web, computadora", "login": "Conectar", "sign_up": "Registro", "NEW_USER": "Nuevo en Ente", diff --git a/web/packages/base/locales/et-EE/translation.json b/web/packages/base/locales/et-EE/translation.json index 29219ec407..121b20d8ab 100644 --- a/web/packages/base/locales/et-EE/translation.json +++ b/web/packages/base/locales/et-EE/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "", - "HERO_SLIDE_1": "", - "HERO_SLIDE_2_TITLE": "", - "HERO_SLIDE_2": "", - "HERO_SLIDE_3_TITLE": "", - "HERO_SLIDE_3": "", + "intro_slide_1_title": "", + "intro_slide_1": "", + "intro_slide_2_title": "", + "intro_slide_2": "", + "intro_slide_3_title": "", + "intro_slide_3": "", "login": "", "sign_up": "", "NEW_USER": "", diff --git a/web/packages/base/locales/fa-IR/translation.json b/web/packages/base/locales/fa-IR/translation.json index 14bf634f2a..e746793cec 100644 --- a/web/packages/base/locales/fa-IR/translation.json +++ b/web/packages/base/locales/fa-IR/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "", - "HERO_SLIDE_1": "", - "HERO_SLIDE_2_TITLE": "", - "HERO_SLIDE_2": "", - "HERO_SLIDE_3_TITLE": "", - "HERO_SLIDE_3": "", + "intro_slide_1_title": "", + "intro_slide_1": "", + "intro_slide_2_title": "", + "intro_slide_2": "", + "intro_slide_3_title": "", + "intro_slide_3": "", "login": "", "sign_up": "", "NEW_USER": "", diff --git a/web/packages/base/locales/fi-FI/translation.json b/web/packages/base/locales/fi-FI/translation.json index bec523f1ea..8e4097da1f 100644 --- a/web/packages/base/locales/fi-FI/translation.json +++ b/web/packages/base/locales/fi-FI/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "
Yksityiset varmuuskopiot
muistoillesi
", - "HERO_SLIDE_1": "Päästä päähän -salaus käytössä oletuksena", - "HERO_SLIDE_2_TITLE": "
Turvallisesti varastoitu
väestönsuojan tiloissa
", - "HERO_SLIDE_2": "", - "HERO_SLIDE_3_TITLE": "
Saatavilla
kaikkialla
", - "HERO_SLIDE_3": "Android, iOS, Web, Tietokone", + "intro_slide_1_title": "
Yksityiset varmuuskopiot
muistoillesi
", + "intro_slide_1": "Päästä päähän -salaus käytössä oletuksena", + "intro_slide_2_title": "
Turvallisesti varastoitu
väestönsuojan tiloissa
", + "intro_slide_2": "", + "intro_slide_3_title": "
Saatavilla
kaikkialla
", + "intro_slide_3": "Android, iOS, Web, Tietokone", "login": "Kirjaudu sisään", "sign_up": "Rekisteröidy", "NEW_USER": "Uusi Ente-käyttäjä", diff --git a/web/packages/base/locales/fr-FR/translation.json b/web/packages/base/locales/fr-FR/translation.json index 82fce31577..51cf802de6 100644 --- a/web/packages/base/locales/fr-FR/translation.json +++ b/web/packages/base/locales/fr-FR/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "
Sauvegardes privées
pour vos souvenirs
", - "HERO_SLIDE_1": "Chiffrement de bout en bout par défaut", - "HERO_SLIDE_2_TITLE": "
Sécurisé
dans un abri antiatomique
", - "HERO_SLIDE_2": "Conçu pour survivre", - "HERO_SLIDE_3_TITLE": "
Disponible
en tout lieu
", - "HERO_SLIDE_3": "Android, iOS, Web, Ordinateur", + "intro_slide_1_title": "
Sauvegardes privées
pour vos souvenirs
", + "intro_slide_1": "Chiffrement de bout en bout par défaut", + "intro_slide_2_title": "
Sécurisé
dans un abri antiatomique
", + "intro_slide_2": "Conçu pour survivre", + "intro_slide_3_title": "
Disponible
en tout lieu
", + "intro_slide_3": "Android, iOS, Web, Ordinateur", "login": "Connexion", "sign_up": "Inscription", "NEW_USER": "Nouveau sur Ente", diff --git a/web/packages/base/locales/gu-IN/translation.json b/web/packages/base/locales/gu-IN/translation.json index 29219ec407..121b20d8ab 100644 --- a/web/packages/base/locales/gu-IN/translation.json +++ b/web/packages/base/locales/gu-IN/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "", - "HERO_SLIDE_1": "", - "HERO_SLIDE_2_TITLE": "", - "HERO_SLIDE_2": "", - "HERO_SLIDE_3_TITLE": "", - "HERO_SLIDE_3": "", + "intro_slide_1_title": "", + "intro_slide_1": "", + "intro_slide_2_title": "", + "intro_slide_2": "", + "intro_slide_3_title": "", + "intro_slide_3": "", "login": "", "sign_up": "", "NEW_USER": "", diff --git a/web/packages/base/locales/hi-IN/translation.json b/web/packages/base/locales/hi-IN/translation.json index 29219ec407..121b20d8ab 100644 --- a/web/packages/base/locales/hi-IN/translation.json +++ b/web/packages/base/locales/hi-IN/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "", - "HERO_SLIDE_1": "", - "HERO_SLIDE_2_TITLE": "", - "HERO_SLIDE_2": "", - "HERO_SLIDE_3_TITLE": "", - "HERO_SLIDE_3": "", + "intro_slide_1_title": "", + "intro_slide_1": "", + "intro_slide_2_title": "", + "intro_slide_2": "", + "intro_slide_3_title": "", + "intro_slide_3": "", "login": "", "sign_up": "", "NEW_USER": "", diff --git a/web/packages/base/locales/id-ID/translation.json b/web/packages/base/locales/id-ID/translation.json index ba1263447f..7c28012954 100644 --- a/web/packages/base/locales/id-ID/translation.json +++ b/web/packages/base/locales/id-ID/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "
Cadangan pribadi
untuk kenanganmu
", - "HERO_SLIDE_1": "Dirancang dengan enkripsi ujung ke ujung", - "HERO_SLIDE_2_TITLE": "
Tersimpan aman
di tempat pengungsian
", - "HERO_SLIDE_2": "Dibuat untuk melestarikan", - "HERO_SLIDE_3_TITLE": "
Tersedia
di mana saja
", - "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "intro_slide_1_title": "
Cadangan pribadi
untuk kenanganmu
", + "intro_slide_1": "Dirancang dengan enkripsi ujung ke ujung", + "intro_slide_2_title": "
Tersimpan aman
di tempat pengungsian
", + "intro_slide_2": "Dibuat untuk melestarikan", + "intro_slide_3_title": "
Tersedia
di mana saja
", + "intro_slide_3": "Android, iOS, Web, Desktop", "login": "Masuk", "sign_up": "Daftar", "NEW_USER": "Baru di Ente", diff --git a/web/packages/base/locales/is-IS/translation.json b/web/packages/base/locales/is-IS/translation.json index 5bc73346e5..a7deacaaf5 100644 --- a/web/packages/base/locales/is-IS/translation.json +++ b/web/packages/base/locales/is-IS/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "", - "HERO_SLIDE_1": "", - "HERO_SLIDE_2_TITLE": "", - "HERO_SLIDE_2": "", - "HERO_SLIDE_3_TITLE": "", - "HERO_SLIDE_3": "", + "intro_slide_1_title": "", + "intro_slide_1": "", + "intro_slide_2_title": "", + "intro_slide_2": "", + "intro_slide_3_title": "", + "intro_slide_3": "", "login": "", "sign_up": "", "NEW_USER": "", diff --git a/web/packages/base/locales/it-IT/translation.json b/web/packages/base/locales/it-IT/translation.json index afd6dcc802..5c12e16eca 100644 --- a/web/packages/base/locales/it-IT/translation.json +++ b/web/packages/base/locales/it-IT/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "
Backup privati
dei tuoi ricordi
", - "HERO_SLIDE_1": "Crittografia end-to-end", - "HERO_SLIDE_2_TITLE": "
Salvati in modo sicuro
in un rifugio antiatomico
", - "HERO_SLIDE_2": "Progettato per sopravvivere", - "HERO_SLIDE_3_TITLE": "
Disponibile
ovunque
", - "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "intro_slide_1_title": "
Backup privati
dei tuoi ricordi
", + "intro_slide_1": "Crittografia end-to-end", + "intro_slide_2_title": "
Salvati in modo sicuro
in un rifugio antiatomico
", + "intro_slide_2": "Progettato per sopravvivere", + "intro_slide_3_title": "
Disponibile
ovunque
", + "intro_slide_3": "Android, iOS, Web, Desktop", "login": "Accedi", "sign_up": "Registrati", "NEW_USER": "Prima volta con Ente", diff --git a/web/packages/base/locales/ja-JP/translation.json b/web/packages/base/locales/ja-JP/translation.json index 29219ec407..121b20d8ab 100644 --- a/web/packages/base/locales/ja-JP/translation.json +++ b/web/packages/base/locales/ja-JP/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "", - "HERO_SLIDE_1": "", - "HERO_SLIDE_2_TITLE": "", - "HERO_SLIDE_2": "", - "HERO_SLIDE_3_TITLE": "", - "HERO_SLIDE_3": "", + "intro_slide_1_title": "", + "intro_slide_1": "", + "intro_slide_2_title": "", + "intro_slide_2": "", + "intro_slide_3_title": "", + "intro_slide_3": "", "login": "", "sign_up": "", "NEW_USER": "", diff --git a/web/packages/base/locales/km-KH/translation.json b/web/packages/base/locales/km-KH/translation.json index 29219ec407..121b20d8ab 100644 --- a/web/packages/base/locales/km-KH/translation.json +++ b/web/packages/base/locales/km-KH/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "", - "HERO_SLIDE_1": "", - "HERO_SLIDE_2_TITLE": "", - "HERO_SLIDE_2": "", - "HERO_SLIDE_3_TITLE": "", - "HERO_SLIDE_3": "", + "intro_slide_1_title": "", + "intro_slide_1": "", + "intro_slide_2_title": "", + "intro_slide_2": "", + "intro_slide_3_title": "", + "intro_slide_3": "", "login": "", "sign_up": "", "NEW_USER": "", diff --git a/web/packages/base/locales/ko-KR/translation.json b/web/packages/base/locales/ko-KR/translation.json index 112aff2af5..a922b1b073 100644 --- a/web/packages/base/locales/ko-KR/translation.json +++ b/web/packages/base/locales/ko-KR/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "
당신의 추억을 위한
비공개 백업
", - "HERO_SLIDE_1": "종단간 암호화를 기본적으로 지원합니다", - "HERO_SLIDE_2_TITLE": "
낙진 대피소에
안전하게 보관됨
", - "HERO_SLIDE_2": "장기 보존을 위해 설계되었습니다", - "HERO_SLIDE_3_TITLE": "
모든 기기에서
사용 가능
", - "HERO_SLIDE_3": "안드로이드, iOS, 웹, 데스크탑", + "intro_slide_1_title": "
당신의 추억을 위한
비공개 백업
", + "intro_slide_1": "종단간 암호화를 기본적으로 지원합니다", + "intro_slide_2_title": "
낙진 대피소에
안전하게 보관됨
", + "intro_slide_2": "장기 보존을 위해 설계되었습니다", + "intro_slide_3_title": "
모든 기기에서
사용 가능
", + "intro_slide_3": "안드로이드, iOS, 웹, 데스크탑", "login": "로그인", "sign_up": "회원가입", "NEW_USER": "Ente 의 새소식", diff --git a/web/packages/base/locales/nl-NL/translation.json b/web/packages/base/locales/nl-NL/translation.json index c504b91ecc..0315cb19fa 100644 --- a/web/packages/base/locales/nl-NL/translation.json +++ b/web/packages/base/locales/nl-NL/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "
Privé back-ups
voor uw herinneringen
", - "HERO_SLIDE_1": "Standaard end-to-end versleuteld", - "HERO_SLIDE_2_TITLE": "
Veilig opgeslagen
in een kernbunker
", - "HERO_SLIDE_2": "Ontworpen om levenslang mee te gaan", - "HERO_SLIDE_3_TITLE": "
Overal
beschikbaar
", - "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "intro_slide_1_title": "
Privé back-ups
voor uw herinneringen
", + "intro_slide_1": "Standaard end-to-end versleuteld", + "intro_slide_2_title": "
Veilig opgeslagen
in een kernbunker
", + "intro_slide_2": "Ontworpen om levenslang mee te gaan", + "intro_slide_3_title": "
Overal
beschikbaar
", + "intro_slide_3": "Android, iOS, Web, Desktop", "login": "Inloggen", "sign_up": "Registreren", "NEW_USER": "Nieuw bij Ente", diff --git a/web/packages/base/locales/pl-PL/translation.json b/web/packages/base/locales/pl-PL/translation.json index 4040b28df5..430c31c7b1 100644 --- a/web/packages/base/locales/pl-PL/translation.json +++ b/web/packages/base/locales/pl-PL/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "
Prywatne kopie zapasowe
dla Twoich wspomnień
", - "HERO_SLIDE_1": "Domyślnie zaszyfrowane metodą end-to-end", - "HERO_SLIDE_2_TITLE": "
Bezpiecznie przechowywane
w awaryjnym schronieniu
", - "HERO_SLIDE_2": "Zaprojektowane do przetrwania", - "HERO_SLIDE_3_TITLE": "
Dostępne
wszędzie
", - "HERO_SLIDE_3": "Android, iOS, Strona Internetowa, Aplikacja Komputerowa", + "intro_slide_1_title": "
Prywatne kopie zapasowe
dla Twoich wspomnień
", + "intro_slide_1": "Domyślnie zaszyfrowane metodą end-to-end", + "intro_slide_2_title": "
Bezpiecznie przechowywane
w awaryjnym schronieniu
", + "intro_slide_2": "Zaprojektowane do przetrwania", + "intro_slide_3_title": "
Dostępne
wszędzie
", + "intro_slide_3": "Android, iOS, Strona Internetowa, Aplikacja Komputerowa", "login": "Zaloguj się", "sign_up": "Zarejestruj się", "NEW_USER": "Nowy/a do Ente", diff --git a/web/packages/base/locales/pt-BR/translation.json b/web/packages/base/locales/pt-BR/translation.json index 75d21753ce..02859e976d 100644 --- a/web/packages/base/locales/pt-BR/translation.json +++ b/web/packages/base/locales/pt-BR/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "
Backups privados
para as suas memórias
", - "HERO_SLIDE_1": "Criptografia de ponta a ponta por padrão", - "HERO_SLIDE_2_TITLE": "
Armazenado com segurança
em um abrigo avançado
", - "HERO_SLIDE_2": "Feito para ter longevidade", - "HERO_SLIDE_3_TITLE": "
Disponível
em qualquer lugar
", - "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "intro_slide_1_title": "
Backups privados
para as suas memórias
", + "intro_slide_1": "Criptografia de ponta a ponta por padrão", + "intro_slide_2_title": "
Armazenado com segurança
em um abrigo avançado
", + "intro_slide_2": "Feito para ter longevidade", + "intro_slide_3_title": "
Disponível
em qualquer lugar
", + "intro_slide_3": "Android, iOS, Web, Desktop", "login": "Entrar", "sign_up": "Registrar", "NEW_USER": "Novo no Ente", diff --git a/web/packages/base/locales/pt-PT/translation.json b/web/packages/base/locales/pt-PT/translation.json index d75db09d8d..0329705083 100644 --- a/web/packages/base/locales/pt-PT/translation.json +++ b/web/packages/base/locales/pt-PT/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "
Backups privados
para as suas memórias
", - "HERO_SLIDE_1": "", - "HERO_SLIDE_2_TITLE": "", - "HERO_SLIDE_2": "", - "HERO_SLIDE_3_TITLE": "
Disponível
em qualquer lugar
", - "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "intro_slide_1_title": "
Backups privados
para as suas memórias
", + "intro_slide_1": "", + "intro_slide_2_title": "", + "intro_slide_2": "", + "intro_slide_3_title": "
Disponível
em qualquer lugar
", + "intro_slide_3": "Android, iOS, Web, Desktop", "login": "Entrar", "sign_up": "Registar", "NEW_USER": "Novo no Ente", diff --git a/web/packages/base/locales/ru-RU/translation.json b/web/packages/base/locales/ru-RU/translation.json index 591b3dd0af..fbf5a405ee 100644 --- a/web/packages/base/locales/ru-RU/translation.json +++ b/web/packages/base/locales/ru-RU/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "
Приватные резервные копии
для ваших воспоминаний
", - "HERO_SLIDE_1": "Сквозное шифрование по умолчанию", - "HERO_SLIDE_2_TITLE": "
Надежно хранится
в убежище от радиоактивных осадков
", - "HERO_SLIDE_2": "Созданный для того, чтобы пережить", - "HERO_SLIDE_3_TITLE": "
Доступно
везде
", - "HERO_SLIDE_3": "Android, iOS, Веб, ПК", + "intro_slide_1_title": "
Приватные резервные копии
для ваших воспоминаний
", + "intro_slide_1": "Сквозное шифрование по умолчанию", + "intro_slide_2_title": "
Надежно хранится
в убежище от радиоактивных осадков
", + "intro_slide_2": "Созданный для того, чтобы пережить", + "intro_slide_3_title": "
Доступно
везде
", + "intro_slide_3": "Android, iOS, Веб, ПК", "login": "Войти", "sign_up": "Регистрация", "NEW_USER": "Новенький в Ente", diff --git a/web/packages/base/locales/sv-SE/translation.json b/web/packages/base/locales/sv-SE/translation.json index ae4d291cd4..ee7399a443 100644 --- a/web/packages/base/locales/sv-SE/translation.json +++ b/web/packages/base/locales/sv-SE/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "
Privata säkerhetskopior
för dina minnen
", - "HERO_SLIDE_1": "Totalsträckskryptering som standard", - "HERO_SLIDE_2_TITLE": "", - "HERO_SLIDE_2": "Utformad för att överleva", - "HERO_SLIDE_3_TITLE": "
Tillgänglig
överallt
", - "HERO_SLIDE_3": "Android, iOS, webb, skrivbord", + "intro_slide_1_title": "
Privata säkerhetskopior
för dina minnen
", + "intro_slide_1": "Totalsträckskryptering som standard", + "intro_slide_2_title": "", + "intro_slide_2": "Utformad för att överleva", + "intro_slide_3_title": "
Tillgänglig
överallt
", + "intro_slide_3": "Android, iOS, webb, skrivbord", "login": "Logga in", "sign_up": "Registrera dig", "NEW_USER": "Ny hos Ente", diff --git a/web/packages/base/locales/ta-IN/translation.json b/web/packages/base/locales/ta-IN/translation.json index 29219ec407..121b20d8ab 100644 --- a/web/packages/base/locales/ta-IN/translation.json +++ b/web/packages/base/locales/ta-IN/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "", - "HERO_SLIDE_1": "", - "HERO_SLIDE_2_TITLE": "", - "HERO_SLIDE_2": "", - "HERO_SLIDE_3_TITLE": "", - "HERO_SLIDE_3": "", + "intro_slide_1_title": "", + "intro_slide_1": "", + "intro_slide_2_title": "", + "intro_slide_2": "", + "intro_slide_3_title": "", + "intro_slide_3": "", "login": "", "sign_up": "", "NEW_USER": "", diff --git a/web/packages/base/locales/te-IN/translation.json b/web/packages/base/locales/te-IN/translation.json index 29219ec407..121b20d8ab 100644 --- a/web/packages/base/locales/te-IN/translation.json +++ b/web/packages/base/locales/te-IN/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "", - "HERO_SLIDE_1": "", - "HERO_SLIDE_2_TITLE": "", - "HERO_SLIDE_2": "", - "HERO_SLIDE_3_TITLE": "", - "HERO_SLIDE_3": "", + "intro_slide_1_title": "", + "intro_slide_1": "", + "intro_slide_2_title": "", + "intro_slide_2": "", + "intro_slide_3_title": "", + "intro_slide_3": "", "login": "", "sign_up": "", "NEW_USER": "", diff --git a/web/packages/base/locales/th-TH/translation.json b/web/packages/base/locales/th-TH/translation.json index 29219ec407..121b20d8ab 100644 --- a/web/packages/base/locales/th-TH/translation.json +++ b/web/packages/base/locales/th-TH/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "", - "HERO_SLIDE_1": "", - "HERO_SLIDE_2_TITLE": "", - "HERO_SLIDE_2": "", - "HERO_SLIDE_3_TITLE": "", - "HERO_SLIDE_3": "", + "intro_slide_1_title": "", + "intro_slide_1": "", + "intro_slide_2_title": "", + "intro_slide_2": "", + "intro_slide_3_title": "", + "intro_slide_3": "", "login": "", "sign_up": "", "NEW_USER": "", diff --git a/web/packages/base/locales/ti-ER/translation.json b/web/packages/base/locales/ti-ER/translation.json index 29219ec407..121b20d8ab 100644 --- a/web/packages/base/locales/ti-ER/translation.json +++ b/web/packages/base/locales/ti-ER/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "", - "HERO_SLIDE_1": "", - "HERO_SLIDE_2_TITLE": "", - "HERO_SLIDE_2": "", - "HERO_SLIDE_3_TITLE": "", - "HERO_SLIDE_3": "", + "intro_slide_1_title": "", + "intro_slide_1": "", + "intro_slide_2_title": "", + "intro_slide_2": "", + "intro_slide_3_title": "", + "intro_slide_3": "", "login": "", "sign_up": "", "NEW_USER": "", diff --git a/web/packages/base/locales/tr-TR/translation.json b/web/packages/base/locales/tr-TR/translation.json index 4a9f11a64e..4b5d5bcc9a 100644 --- a/web/packages/base/locales/tr-TR/translation.json +++ b/web/packages/base/locales/tr-TR/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "", - "HERO_SLIDE_1": "", - "HERO_SLIDE_2_TITLE": "", - "HERO_SLIDE_2": "", - "HERO_SLIDE_3_TITLE": "", - "HERO_SLIDE_3": "", + "intro_slide_1_title": "", + "intro_slide_1": "", + "intro_slide_2_title": "", + "intro_slide_2": "", + "intro_slide_3_title": "", + "intro_slide_3": "", "login": "Giriş yap", "sign_up": "Hesap aç", "NEW_USER": "Yeni ente kullanıcısı", diff --git a/web/packages/base/locales/zh-CN/translation.json b/web/packages/base/locales/zh-CN/translation.json index 817c4de95f..088d23a00a 100644 --- a/web/packages/base/locales/zh-CN/translation.json +++ b/web/packages/base/locales/zh-CN/translation.json @@ -1,10 +1,10 @@ { - "HERO_SLIDE_1_TITLE": "
私人备份
为您的回忆
", - "HERO_SLIDE_1": "默认端到端加密", - "HERO_SLIDE_2_TITLE": "
安全地存放
在一个掩护所中
", - "HERO_SLIDE_2": "经久耐用", - "HERO_SLIDE_3_TITLE": "
可用于
各处
", - "HERO_SLIDE_3": "安卓, iOS, 网页端, 桌面端", + "intro_slide_1_title": "
私人备份
为您的回忆
", + "intro_slide_1": "默认端到端加密", + "intro_slide_2_title": "
安全地存放
在一个掩护所中
", + "intro_slide_2": "经久耐用", + "intro_slide_3_title": "
可用于
各处
", + "intro_slide_3": "安卓, iOS, 网页端, 桌面端", "login": "登录", "sign_up": "注册", "NEW_USER": "初来 Ente", From 53c706fba790c5235f6a8c882af2ff248a9b0106 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 16:26:51 +0530 Subject: [PATCH 50/61] Rename --- web/apps/auth/src/pages/auth.tsx | 2 +- web/apps/photos/src/components/Sidebar/index.tsx | 6 +++--- web/packages/base/locales/ar-SA/translation.json | 4 ++-- web/packages/base/locales/bg-BG/translation.json | 4 ++-- web/packages/base/locales/ca-ES/translation.json | 4 ++-- web/packages/base/locales/da-DK/translation.json | 4 ++-- web/packages/base/locales/de-DE/translation.json | 4 ++-- web/packages/base/locales/el-GR/translation.json | 4 ++-- web/packages/base/locales/en-US/translation.json | 4 ++-- web/packages/base/locales/es-ES/translation.json | 4 ++-- web/packages/base/locales/et-EE/translation.json | 4 ++-- web/packages/base/locales/fa-IR/translation.json | 4 ++-- web/packages/base/locales/fi-FI/translation.json | 4 ++-- web/packages/base/locales/fr-FR/translation.json | 4 ++-- web/packages/base/locales/gu-IN/translation.json | 4 ++-- web/packages/base/locales/hi-IN/translation.json | 4 ++-- web/packages/base/locales/id-ID/translation.json | 4 ++-- web/packages/base/locales/is-IS/translation.json | 4 ++-- web/packages/base/locales/it-IT/translation.json | 4 ++-- web/packages/base/locales/ja-JP/translation.json | 4 ++-- web/packages/base/locales/km-KH/translation.json | 4 ++-- web/packages/base/locales/ko-KR/translation.json | 4 ++-- web/packages/base/locales/nl-NL/translation.json | 4 ++-- web/packages/base/locales/pl-PL/translation.json | 4 ++-- web/packages/base/locales/pt-BR/translation.json | 4 ++-- web/packages/base/locales/pt-PT/translation.json | 4 ++-- web/packages/base/locales/ru-RU/translation.json | 4 ++-- web/packages/base/locales/sv-SE/translation.json | 4 ++-- web/packages/base/locales/ta-IN/translation.json | 4 ++-- web/packages/base/locales/te-IN/translation.json | 4 ++-- web/packages/base/locales/th-TH/translation.json | 4 ++-- web/packages/base/locales/ti-ER/translation.json | 4 ++-- web/packages/base/locales/tr-TR/translation.json | 4 ++-- web/packages/base/locales/zh-CN/translation.json | 4 ++-- 34 files changed, 68 insertions(+), 68 deletions(-) diff --git a/web/apps/auth/src/pages/auth.tsx b/web/apps/auth/src/pages/auth.tsx index 15b64f6447..1360ee1cec 100644 --- a/web/apps/auth/src/pages/auth.tsx +++ b/web/apps/auth/src/pages/auth.tsx @@ -158,7 +158,7 @@ const AuthNavbar: React.FC = () => { startIcon={} onClick={logout} > - {t("LOGOUT")} + {t("logout")} diff --git a/web/apps/photos/src/components/Sidebar/index.tsx b/web/apps/photos/src/components/Sidebar/index.tsx index 71670f404f..5c385fa787 100644 --- a/web/apps/photos/src/components/Sidebar/index.tsx +++ b/web/apps/photos/src/components/Sidebar/index.tsx @@ -634,9 +634,9 @@ const ExitSection: React.FC = () => { const confirmLogout = () => { setDialogMessage({ - title: t("LOGOUT_MESSAGE"), + title: t("logout_message"), proceed: { - text: t("LOGOUT"), + text: t("logout"), action: logout, variant: "critical", }, @@ -649,7 +649,7 @@ const ExitSection: React.FC = () => { Bitte sende eine E-Mail an {{emailID}} mit deiner registrierten E-Mail-Adresse.

Deine Anfrage wird innerhalb von 72 Stunden bearbeitet.

", - "LOGOUT_MESSAGE": "Sind sie sicher, dass sie sich ausloggen möchten?", "CHANGE_EMAIL": "E-Mail-Adresse ändern", "ok": "OK", "success": "Erfolgreich", diff --git a/web/packages/base/locales/el-GR/translation.json b/web/packages/base/locales/el-GR/translation.json index a192345d9e..d45170ea9b 100644 --- a/web/packages/base/locales/el-GR/translation.json +++ b/web/packages/base/locales/el-GR/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "Υποστήριξη", "CONFIRM": "Επιβεβαίωση", "cancel": "Ακύρωση", - "LOGOUT": "Αποσυνδέση", + "logout": "Αποσυνδέση", + "logout_message": "Είστε σίγουροι ότι θέλετε να αποσυνδεθείτε;", "delete_account": "Διαγραφή λογαριασμού", "delete_account_manually_message": "", - "LOGOUT_MESSAGE": "Είστε σίγουροι ότι θέλετε να αποσυνδεθείτε;", "CHANGE_EMAIL": "Αλλαγή διεύθυνσης ηλ. ταχυδρομείου", "ok": "ΟΚ", "success": "Επιτυχία", diff --git a/web/packages/base/locales/en-US/translation.json b/web/packages/base/locales/en-US/translation.json index 6d7993ce39..301d61476d 100644 --- a/web/packages/base/locales/en-US/translation.json +++ b/web/packages/base/locales/en-US/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "Support", "CONFIRM": "Confirm", "cancel": "Cancel", - "LOGOUT": "Logout", + "logout": "Logout", + "logout_message": "Are you sure you want to logout?", "delete_account": "Delete account", "delete_account_manually_message": "

Please send an email to {{emailID}} from your registered email address.

Your request will be processed within 72 hours.

", - "LOGOUT_MESSAGE": "Are you sure you want to logout?", "CHANGE_EMAIL": "Change email", "ok": "OK", "success": "Success", diff --git a/web/packages/base/locales/es-ES/translation.json b/web/packages/base/locales/es-ES/translation.json index d9c8d9e88b..262938070c 100644 --- a/web/packages/base/locales/es-ES/translation.json +++ b/web/packages/base/locales/es-ES/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "Soporte", "CONFIRM": "Confirmar", "cancel": "Cancelar", - "LOGOUT": "Cerrar sesión", + "logout": "Cerrar sesión", + "logout_message": "Seguro que quiere cerrar la sesión?", "delete_account": "Eliminar cuenta", "delete_account_manually_message": "

Por favor, envíe un email a {{emailID}} desde su dirección de correo electrónico registrada

Su solicitud será procesada en 72 horas.

", - "LOGOUT_MESSAGE": "Seguro que quiere cerrar la sesión?", "CHANGE_EMAIL": "Cambiar email", "ok": "OK", "success": "Completado", diff --git a/web/packages/base/locales/et-EE/translation.json b/web/packages/base/locales/et-EE/translation.json index 121b20d8ab..6c099e06e3 100644 --- a/web/packages/base/locales/et-EE/translation.json +++ b/web/packages/base/locales/et-EE/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "", "CONFIRM": "", "cancel": "", - "LOGOUT": "", + "logout": "", + "logout_message": "", "delete_account": "", "delete_account_manually_message": "", - "LOGOUT_MESSAGE": "", "CHANGE_EMAIL": "", "ok": "", "success": "", diff --git a/web/packages/base/locales/fa-IR/translation.json b/web/packages/base/locales/fa-IR/translation.json index e746793cec..8c70f82f12 100644 --- a/web/packages/base/locales/fa-IR/translation.json +++ b/web/packages/base/locales/fa-IR/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "", "CONFIRM": "", "cancel": "", - "LOGOUT": "", + "logout": "", + "logout_message": "", "delete_account": "", "delete_account_manually_message": "", - "LOGOUT_MESSAGE": "", "CHANGE_EMAIL": "", "ok": "", "success": "", diff --git a/web/packages/base/locales/fi-FI/translation.json b/web/packages/base/locales/fi-FI/translation.json index 8e4097da1f..0d6ba301d5 100644 --- a/web/packages/base/locales/fi-FI/translation.json +++ b/web/packages/base/locales/fi-FI/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "", "CONFIRM": "", "cancel": "", - "LOGOUT": "", + "logout": "", + "logout_message": "", "delete_account": "", "delete_account_manually_message": "", - "LOGOUT_MESSAGE": "", "CHANGE_EMAIL": "", "ok": "", "success": "", diff --git a/web/packages/base/locales/fr-FR/translation.json b/web/packages/base/locales/fr-FR/translation.json index 51cf802de6..0ec519af3b 100644 --- a/web/packages/base/locales/fr-FR/translation.json +++ b/web/packages/base/locales/fr-FR/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "Support", "CONFIRM": "Confirmer", "cancel": "Annuler", - "LOGOUT": "Déconnexion", + "logout": "Déconnexion", + "logout_message": "Voulez-vous vraiment vous déconnecter?", "delete_account": "Supprimer le compte", "delete_account_manually_message": "

Veuillez envoyer un e-mail à {{emailID}}depuis Votre adresse enregistrée.

Votre demande sera traitée dans les 72 heures.

", - "LOGOUT_MESSAGE": "Voulez-vous vraiment vous déconnecter?", "CHANGE_EMAIL": "Modifier l'e-mail", "ok": "Ok", "success": "Parfait", diff --git a/web/packages/base/locales/gu-IN/translation.json b/web/packages/base/locales/gu-IN/translation.json index 121b20d8ab..6c099e06e3 100644 --- a/web/packages/base/locales/gu-IN/translation.json +++ b/web/packages/base/locales/gu-IN/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "", "CONFIRM": "", "cancel": "", - "LOGOUT": "", + "logout": "", + "logout_message": "", "delete_account": "", "delete_account_manually_message": "", - "LOGOUT_MESSAGE": "", "CHANGE_EMAIL": "", "ok": "", "success": "", diff --git a/web/packages/base/locales/hi-IN/translation.json b/web/packages/base/locales/hi-IN/translation.json index 121b20d8ab..6c099e06e3 100644 --- a/web/packages/base/locales/hi-IN/translation.json +++ b/web/packages/base/locales/hi-IN/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "", "CONFIRM": "", "cancel": "", - "LOGOUT": "", + "logout": "", + "logout_message": "", "delete_account": "", "delete_account_manually_message": "", - "LOGOUT_MESSAGE": "", "CHANGE_EMAIL": "", "ok": "", "success": "", diff --git a/web/packages/base/locales/id-ID/translation.json b/web/packages/base/locales/id-ID/translation.json index 7c28012954..33ac565b7e 100644 --- a/web/packages/base/locales/id-ID/translation.json +++ b/web/packages/base/locales/id-ID/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "Dukungan", "CONFIRM": "Konfirmasi", "cancel": "Batal", - "LOGOUT": "Keluar akun", + "logout": "Keluar akun", + "logout_message": "Apakah kamu yakin ingin keluar akun?", "delete_account": "", "delete_account_manually_message": "", - "LOGOUT_MESSAGE": "Apakah kamu yakin ingin keluar akun?", "CHANGE_EMAIL": "Ubah email", "ok": "OK", "success": "Berhasil", diff --git a/web/packages/base/locales/is-IS/translation.json b/web/packages/base/locales/is-IS/translation.json index a7deacaaf5..99abef9da7 100644 --- a/web/packages/base/locales/is-IS/translation.json +++ b/web/packages/base/locales/is-IS/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "", "CONFIRM": "Staðfesta", "cancel": "Hætta við", - "LOGOUT": "Útskrá", + "logout": "Útskrá", + "logout_message": "Ertu viss um að þú viljir skrá þig út?", "delete_account": "Eyða aðgangi", "delete_account_manually_message": "", - "LOGOUT_MESSAGE": "Ertu viss um að þú viljir skrá þig út?", "CHANGE_EMAIL": "Breyta netfangi", "ok": "Í lagi", "success": "Tókst", diff --git a/web/packages/base/locales/it-IT/translation.json b/web/packages/base/locales/it-IT/translation.json index 5c12e16eca..7e3106a0f2 100644 --- a/web/packages/base/locales/it-IT/translation.json +++ b/web/packages/base/locales/it-IT/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "Supporto", "CONFIRM": "Conferma", "cancel": "Annulla", - "LOGOUT": "Disconnettiti", + "logout": "Disconnettiti", + "logout_message": "Sei sicuro di volerti disconnettere?", "delete_account": "Elimina account", "delete_account_manually_message": "

Per favore invia una email a {{emailID}} dal tuo indirizzo email registrato.

La tua richiesta verrà elaborata entro 72 ore.

", - "LOGOUT_MESSAGE": "Sei sicuro di volerti disconnettere?", "CHANGE_EMAIL": "Cambia email", "ok": "OK", "success": "Operazione riuscita", diff --git a/web/packages/base/locales/ja-JP/translation.json b/web/packages/base/locales/ja-JP/translation.json index 121b20d8ab..6c099e06e3 100644 --- a/web/packages/base/locales/ja-JP/translation.json +++ b/web/packages/base/locales/ja-JP/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "", "CONFIRM": "", "cancel": "", - "LOGOUT": "", + "logout": "", + "logout_message": "", "delete_account": "", "delete_account_manually_message": "", - "LOGOUT_MESSAGE": "", "CHANGE_EMAIL": "", "ok": "", "success": "", diff --git a/web/packages/base/locales/km-KH/translation.json b/web/packages/base/locales/km-KH/translation.json index 121b20d8ab..6c099e06e3 100644 --- a/web/packages/base/locales/km-KH/translation.json +++ b/web/packages/base/locales/km-KH/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "", "CONFIRM": "", "cancel": "", - "LOGOUT": "", + "logout": "", + "logout_message": "", "delete_account": "", "delete_account_manually_message": "", - "LOGOUT_MESSAGE": "", "CHANGE_EMAIL": "", "ok": "", "success": "", diff --git a/web/packages/base/locales/ko-KR/translation.json b/web/packages/base/locales/ko-KR/translation.json index a922b1b073..cbd6c497de 100644 --- a/web/packages/base/locales/ko-KR/translation.json +++ b/web/packages/base/locales/ko-KR/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "", "CONFIRM": "확인", "cancel": "취소", - "LOGOUT": "로그아웃", + "logout": "로그아웃", + "logout_message": "정말로 로그아웃 하시겠습니까?", "delete_account": "계정 삭제", "delete_account_manually_message": "

회원가입에 사용한 이메일을 통해 {{emailID}} (으)로 메일을 보내주세요.

귀하의 요청은 72시간 내로 처리됩니다.

", - "LOGOUT_MESSAGE": "정말로 로그아웃 하시겠습니까?", "CHANGE_EMAIL": "이메일 주소 변경", "ok": "확인", "success": "성공", diff --git a/web/packages/base/locales/nl-NL/translation.json b/web/packages/base/locales/nl-NL/translation.json index 0315cb19fa..8231f26c40 100644 --- a/web/packages/base/locales/nl-NL/translation.json +++ b/web/packages/base/locales/nl-NL/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "Ondersteuning", "CONFIRM": "Bevestigen", "cancel": "Annuleren", - "LOGOUT": "Uitloggen", + "logout": "Uitloggen", + "logout_message": "Weet u zeker dat u wilt uitloggen?", "delete_account": "Account verwijderen", "delete_account_manually_message": "

Stuur een e-mail naar {{emailID}} vanaf uw geregistreerde e-mailadres.

Uw aanvraag wordt binnen 72 uur verwerkt.

", - "LOGOUT_MESSAGE": "Weet u zeker dat u wilt uitloggen?", "CHANGE_EMAIL": "E-mail wijzigen", "ok": "Oké", "success": "Succes", diff --git a/web/packages/base/locales/pl-PL/translation.json b/web/packages/base/locales/pl-PL/translation.json index 430c31c7b1..81a756c8cf 100644 --- a/web/packages/base/locales/pl-PL/translation.json +++ b/web/packages/base/locales/pl-PL/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "Wsparcie Techniczne", "CONFIRM": "Potwierdź", "cancel": "Anuluj", - "LOGOUT": "Wyloguj się", + "logout": "Wyloguj się", + "logout_message": "Czy na pewno chcesz się wylogować?", "delete_account": "Usuń konto", "delete_account_manually_message": "

Prosimy wysłać wiadomość e-mail na {{emailID}} z Twojego zarejestrowanego adresu e-mail.

Twoja prośba zostanie przetworzona w ciągu 72 godzin.

", - "LOGOUT_MESSAGE": "Czy na pewno chcesz się wylogować?", "CHANGE_EMAIL": "Zmień adres e-mail", "ok": "OK", "success": "Sukces", diff --git a/web/packages/base/locales/pt-BR/translation.json b/web/packages/base/locales/pt-BR/translation.json index 02859e976d..0db29af369 100644 --- a/web/packages/base/locales/pt-BR/translation.json +++ b/web/packages/base/locales/pt-BR/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "Suporte", "CONFIRM": "Confirmar", "cancel": "Cancelar", - "LOGOUT": "Encerrar sessão", + "logout": "Encerrar sessão", + "logout_message": "Você tem certeza que deseja encerrar a sessão?", "delete_account": "Excluir conta", "delete_account_manually_message": "

Por favor, envie um e-mail para {{emailID}} a partir do seu endereço de e-mail registrado.

Seu pedido será processado dentro de 72 horas.

", - "LOGOUT_MESSAGE": "Você tem certeza que deseja encerrar a sessão?", "CHANGE_EMAIL": "Mudar e-mail", "ok": "Aceitar", "success": "Bem-sucedido", diff --git a/web/packages/base/locales/pt-PT/translation.json b/web/packages/base/locales/pt-PT/translation.json index 0329705083..7647869452 100644 --- a/web/packages/base/locales/pt-PT/translation.json +++ b/web/packages/base/locales/pt-PT/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "", "CONFIRM": "", "cancel": "", - "LOGOUT": "", + "logout": "", + "logout_message": "", "delete_account": "", "delete_account_manually_message": "", - "LOGOUT_MESSAGE": "", "CHANGE_EMAIL": "", "ok": "", "success": "", diff --git a/web/packages/base/locales/ru-RU/translation.json b/web/packages/base/locales/ru-RU/translation.json index fbf5a405ee..7f02fff414 100644 --- a/web/packages/base/locales/ru-RU/translation.json +++ b/web/packages/base/locales/ru-RU/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "Поддержка", "CONFIRM": "Подтвердить", "cancel": "Отменить", - "LOGOUT": "Выйти", + "logout": "Выйти", + "logout_message": "Вы уверены, что хотите выйти?", "delete_account": "Удалить аккаунт", "delete_account_manually_message": "

Пожалуйста, отправьте письмо по адресу {{emailID}} с вашего зарегистрированного адреса электронной почты.

Ваш запрос будет обработан в течение 72 часов

", - "LOGOUT_MESSAGE": "Вы уверены, что хотите выйти?", "CHANGE_EMAIL": "Изменить адрес электронной почты", "ok": "ОК", "success": "Успешно", diff --git a/web/packages/base/locales/sv-SE/translation.json b/web/packages/base/locales/sv-SE/translation.json index ee7399a443..1b2833b26f 100644 --- a/web/packages/base/locales/sv-SE/translation.json +++ b/web/packages/base/locales/sv-SE/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "Support", "CONFIRM": "Bekräfta", "cancel": "Avbryt", - "LOGOUT": "Logga ut", + "logout": "Logga ut", + "logout_message": "Är du säker på att du vill logga ut?", "delete_account": "Radera konto", "delete_account_manually_message": "", - "LOGOUT_MESSAGE": "Är du säker på att du vill logga ut?", "CHANGE_EMAIL": "Ändra e-postadress", "ok": "OK", "success": "", diff --git a/web/packages/base/locales/ta-IN/translation.json b/web/packages/base/locales/ta-IN/translation.json index 121b20d8ab..6c099e06e3 100644 --- a/web/packages/base/locales/ta-IN/translation.json +++ b/web/packages/base/locales/ta-IN/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "", "CONFIRM": "", "cancel": "", - "LOGOUT": "", + "logout": "", + "logout_message": "", "delete_account": "", "delete_account_manually_message": "", - "LOGOUT_MESSAGE": "", "CHANGE_EMAIL": "", "ok": "", "success": "", diff --git a/web/packages/base/locales/te-IN/translation.json b/web/packages/base/locales/te-IN/translation.json index 121b20d8ab..6c099e06e3 100644 --- a/web/packages/base/locales/te-IN/translation.json +++ b/web/packages/base/locales/te-IN/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "", "CONFIRM": "", "cancel": "", - "LOGOUT": "", + "logout": "", + "logout_message": "", "delete_account": "", "delete_account_manually_message": "", - "LOGOUT_MESSAGE": "", "CHANGE_EMAIL": "", "ok": "", "success": "", diff --git a/web/packages/base/locales/th-TH/translation.json b/web/packages/base/locales/th-TH/translation.json index 121b20d8ab..6c099e06e3 100644 --- a/web/packages/base/locales/th-TH/translation.json +++ b/web/packages/base/locales/th-TH/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "", "CONFIRM": "", "cancel": "", - "LOGOUT": "", + "logout": "", + "logout_message": "", "delete_account": "", "delete_account_manually_message": "", - "LOGOUT_MESSAGE": "", "CHANGE_EMAIL": "", "ok": "", "success": "", diff --git a/web/packages/base/locales/ti-ER/translation.json b/web/packages/base/locales/ti-ER/translation.json index 121b20d8ab..6c099e06e3 100644 --- a/web/packages/base/locales/ti-ER/translation.json +++ b/web/packages/base/locales/ti-ER/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "", "CONFIRM": "", "cancel": "", - "LOGOUT": "", + "logout": "", + "logout_message": "", "delete_account": "", "delete_account_manually_message": "", - "LOGOUT_MESSAGE": "", "CHANGE_EMAIL": "", "ok": "", "success": "", diff --git a/web/packages/base/locales/tr-TR/translation.json b/web/packages/base/locales/tr-TR/translation.json index 4b5d5bcc9a..bf24854586 100644 --- a/web/packages/base/locales/tr-TR/translation.json +++ b/web/packages/base/locales/tr-TR/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "Destek", "CONFIRM": "Onayla", "cancel": "İptal", - "LOGOUT": "Çıkış yap", + "logout": "Çıkış yap", + "logout_message": "Çıkış yapmak istediğine emin misin?", "delete_account": "Hesabı sil", "delete_account_manually_message": "

Lütfen kaydolduğun e-posta adresinden {{emailID}} adresine bir e-posta gönder.

İsteğin 72 saat içinde işleme alınacaktır.

", - "LOGOUT_MESSAGE": "Çıkış yapmak istediğine emin misin?", "CHANGE_EMAIL": "E-posta adresini değiştir", "ok": "Tamam", "success": "Başarılı", diff --git a/web/packages/base/locales/zh-CN/translation.json b/web/packages/base/locales/zh-CN/translation.json index 088d23a00a..fc355c7284 100644 --- a/web/packages/base/locales/zh-CN/translation.json +++ b/web/packages/base/locales/zh-CN/translation.json @@ -129,10 +129,10 @@ "SUPPORT": "支持", "CONFIRM": "确认", "cancel": "取消", - "LOGOUT": "退出登录", + "logout": "退出登录", + "logout_message": "你确定要退出登录吗?", "delete_account": "删除账户", "delete_account_manually_message": "

请从您注册的电子邮件地址发送一封电子邮件到 {{emailID}}

。您的请求将在72小时内处理。

", - "LOGOUT_MESSAGE": "你确定要退出登录吗?", "CHANGE_EMAIL": "更换邮箱", "ok": "确定", "success": "成功", From 5c41e8ad3cc5040359e05d2d01b7af3f53d536fb Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 16:28:19 +0530 Subject: [PATCH 51/61] Rename --- web/apps/photos/src/components/Sidebar/index.tsx | 2 +- web/packages/accounts/pages/recover.tsx | 2 +- web/packages/base/locales/ar-SA/translation.json | 4 ++-- web/packages/base/locales/bg-BG/translation.json | 4 ++-- web/packages/base/locales/ca-ES/translation.json | 4 ++-- web/packages/base/locales/da-DK/translation.json | 4 ++-- web/packages/base/locales/de-DE/translation.json | 4 ++-- web/packages/base/locales/el-GR/translation.json | 4 ++-- web/packages/base/locales/en-US/translation.json | 4 ++-- web/packages/base/locales/es-ES/translation.json | 4 ++-- web/packages/base/locales/et-EE/translation.json | 4 ++-- web/packages/base/locales/fa-IR/translation.json | 4 ++-- web/packages/base/locales/fi-FI/translation.json | 4 ++-- web/packages/base/locales/fr-FR/translation.json | 4 ++-- web/packages/base/locales/gu-IN/translation.json | 4 ++-- web/packages/base/locales/hi-IN/translation.json | 4 ++-- web/packages/base/locales/id-ID/translation.json | 4 ++-- web/packages/base/locales/is-IS/translation.json | 4 ++-- web/packages/base/locales/it-IT/translation.json | 4 ++-- web/packages/base/locales/ja-JP/translation.json | 4 ++-- web/packages/base/locales/km-KH/translation.json | 4 ++-- web/packages/base/locales/ko-KR/translation.json | 4 ++-- web/packages/base/locales/nl-NL/translation.json | 4 ++-- web/packages/base/locales/pl-PL/translation.json | 4 ++-- web/packages/base/locales/pt-BR/translation.json | 4 ++-- web/packages/base/locales/pt-PT/translation.json | 4 ++-- web/packages/base/locales/ru-RU/translation.json | 4 ++-- web/packages/base/locales/sv-SE/translation.json | 4 ++-- web/packages/base/locales/ta-IN/translation.json | 4 ++-- web/packages/base/locales/te-IN/translation.json | 4 ++-- web/packages/base/locales/th-TH/translation.json | 4 ++-- web/packages/base/locales/ti-ER/translation.json | 4 ++-- web/packages/base/locales/tr-TR/translation.json | 4 ++-- web/packages/base/locales/zh-CN/translation.json | 4 ++-- 34 files changed, 66 insertions(+), 66 deletions(-) diff --git a/web/apps/photos/src/components/Sidebar/index.tsx b/web/apps/photos/src/components/Sidebar/index.tsx index 5c385fa787..045b46d1b2 100644 --- a/web/apps/photos/src/components/Sidebar/index.tsx +++ b/web/apps/photos/src/components/Sidebar/index.tsx @@ -606,7 +606,7 @@ const HelpSection: React.FC = () => { {t("SUPPORT")} + {t("support")} } variant="secondary" /> diff --git a/web/packages/accounts/pages/recover.tsx b/web/packages/accounts/pages/recover.tsx index 757a1af60d..531f37763f 100644 --- a/web/packages/accounts/pages/recover.tsx +++ b/web/packages/accounts/pages/recover.tsx @@ -99,7 +99,7 @@ const Page: React.FC = ({ appContext }) => { const showNoRecoveryKeyMessage = () => setDialogBoxAttributesV2({ - title: t("SORRY"), + title: t("sorry"), close: {}, content: t("NO_RECOVERY_KEY_MESSAGE"), }); diff --git a/web/packages/base/locales/ar-SA/translation.json b/web/packages/base/locales/ar-SA/translation.json index d07084f7c3..4435a73efa 100644 --- a/web/packages/base/locales/ar-SA/translation.json +++ b/web/packages/base/locales/ar-SA/translation.json @@ -121,12 +121,12 @@ "RECOVER": "استعادة", "NO_RECOVERY_KEY": "ما من مفتاح استعادة؟", "INCORRECT_RECOVERY_KEY": "مفتاح استعادة غير صحيح", - "SORRY": "عذرا", + "sorry": "عذرا", "NO_RECOVERY_KEY_MESSAGE": "بسبب طبيعة نظام التشفير التام بين الطرفين، لا يمكن فك تشفير بياناتك دون كلمة المرور أو مفتاح الاسترداد الخاص بك", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "CONTACT_SUPPORT": "الاتصال بالدعم", "REQUEST_FEATURE": "طلب ميزة", - "SUPPORT": "الدعم", + "support": "الدعم", "CONFIRM": "تأكيد", "cancel": "إلغاء", "logout": "تسجيل الخروج", diff --git a/web/packages/base/locales/bg-BG/translation.json b/web/packages/base/locales/bg-BG/translation.json index 195298cf91..5f76b82fd7 100644 --- a/web/packages/base/locales/bg-BG/translation.json +++ b/web/packages/base/locales/bg-BG/translation.json @@ -121,12 +121,12 @@ "RECOVER": "", "NO_RECOVERY_KEY": "", "INCORRECT_RECOVERY_KEY": "", - "SORRY": "", + "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "CONTACT_SUPPORT": "", "REQUEST_FEATURE": "", - "SUPPORT": "", + "support": "", "CONFIRM": "", "cancel": "", "logout": "", diff --git a/web/packages/base/locales/ca-ES/translation.json b/web/packages/base/locales/ca-ES/translation.json index 6c099e06e3..387d4a757f 100644 --- a/web/packages/base/locales/ca-ES/translation.json +++ b/web/packages/base/locales/ca-ES/translation.json @@ -121,12 +121,12 @@ "RECOVER": "", "NO_RECOVERY_KEY": "", "INCORRECT_RECOVERY_KEY": "", - "SORRY": "", + "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "CONTACT_SUPPORT": "", "REQUEST_FEATURE": "", - "SUPPORT": "", + "support": "", "CONFIRM": "", "cancel": "", "logout": "", diff --git a/web/packages/base/locales/da-DK/translation.json b/web/packages/base/locales/da-DK/translation.json index 6c099e06e3..387d4a757f 100644 --- a/web/packages/base/locales/da-DK/translation.json +++ b/web/packages/base/locales/da-DK/translation.json @@ -121,12 +121,12 @@ "RECOVER": "", "NO_RECOVERY_KEY": "", "INCORRECT_RECOVERY_KEY": "", - "SORRY": "", + "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "CONTACT_SUPPORT": "", "REQUEST_FEATURE": "", - "SUPPORT": "", + "support": "", "CONFIRM": "", "cancel": "", "logout": "", diff --git a/web/packages/base/locales/de-DE/translation.json b/web/packages/base/locales/de-DE/translation.json index b021ac9dbd..df6baa9ee4 100644 --- a/web/packages/base/locales/de-DE/translation.json +++ b/web/packages/base/locales/de-DE/translation.json @@ -121,12 +121,12 @@ "RECOVER": "Wiederherstellen", "NO_RECOVERY_KEY": "Kein Wiederherstellungsschlüssel?", "INCORRECT_RECOVERY_KEY": "Falscher Wiederherstellungs-Schlüssel", - "SORRY": "Entschuldigung", + "sorry": "Entschuldigung", "NO_RECOVERY_KEY_MESSAGE": "Aufgrund unseres Ende-zu-Ende-Verschlüsselungsprotokolls können Ihre Daten nicht ohne Ihr Passwort oder Ihren Wiederherstellungsschlüssel entschlüsselt werden", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Bitte sende eine E-Mail an {{emailID}} von deiner registrierten E-Mail-Adresse", "CONTACT_SUPPORT": "Support kontaktieren", "REQUEST_FEATURE": "Feature anfragen", - "SUPPORT": "Support", + "support": "Support", "CONFIRM": "Bestätigen", "cancel": "Abbrechen", "logout": "Ausloggen", diff --git a/web/packages/base/locales/el-GR/translation.json b/web/packages/base/locales/el-GR/translation.json index d45170ea9b..db38cebb40 100644 --- a/web/packages/base/locales/el-GR/translation.json +++ b/web/packages/base/locales/el-GR/translation.json @@ -121,12 +121,12 @@ "RECOVER": "Ανάκτηση", "NO_RECOVERY_KEY": "Χωρίς κλειδί ανάκτησης;", "INCORRECT_RECOVERY_KEY": "Εσφαλμένο κλειδί ανάκτησης", - "SORRY": "Συγνώμη", + "sorry": "Συγνώμη", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Παρακαλώ αφήστε ένα μήνυμα ηλ. ταχυδρομείου στο {{emailID}} από την καταχωρημένη διεύθυνση σας", "CONTACT_SUPPORT": "Επικοινωνήστε με την υποστήριξη", "REQUEST_FEATURE": "Αίτηση Λειτουργίας", - "SUPPORT": "Υποστήριξη", + "support": "Υποστήριξη", "CONFIRM": "Επιβεβαίωση", "cancel": "Ακύρωση", "logout": "Αποσυνδέση", diff --git a/web/packages/base/locales/en-US/translation.json b/web/packages/base/locales/en-US/translation.json index 301d61476d..119e43d63f 100644 --- a/web/packages/base/locales/en-US/translation.json +++ b/web/packages/base/locales/en-US/translation.json @@ -121,12 +121,12 @@ "RECOVER": "Recover", "NO_RECOVERY_KEY": "No recovery key?", "INCORRECT_RECOVERY_KEY": "Incorrect recovery key", - "SORRY": "Sorry", + "sorry": "Sorry", "NO_RECOVERY_KEY_MESSAGE": "Due to the nature of our end-to-end encryption protocol, your data cannot be decrypted without your password or recovery key", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Please drop an email to {{emailID}} from your registered email address", "CONTACT_SUPPORT": "Contact support", "REQUEST_FEATURE": "Request Feature", - "SUPPORT": "Support", + "support": "Support", "CONFIRM": "Confirm", "cancel": "Cancel", "logout": "Logout", diff --git a/web/packages/base/locales/es-ES/translation.json b/web/packages/base/locales/es-ES/translation.json index 262938070c..3a26923a78 100644 --- a/web/packages/base/locales/es-ES/translation.json +++ b/web/packages/base/locales/es-ES/translation.json @@ -121,12 +121,12 @@ "RECOVER": "Recuperar", "NO_RECOVERY_KEY": "No hay clave de recuperación?", "INCORRECT_RECOVERY_KEY": "Clave de recuperación incorrecta", - "SORRY": "Lo sentimos", + "sorry": "Lo sentimos", "NO_RECOVERY_KEY_MESSAGE": "Debido a la naturaleza de nuestro protocolo de cifrado de extremo a extremo, sus datos no pueden ser descifrados sin su contraseña o clave de recuperación", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Por favor, envíe un email a {{emailID}} desde su dirección de correo electrónico registrada", "CONTACT_SUPPORT": "Contacta con soporte", "REQUEST_FEATURE": "Solicitar una función", - "SUPPORT": "Soporte", + "support": "Soporte", "CONFIRM": "Confirmar", "cancel": "Cancelar", "logout": "Cerrar sesión", diff --git a/web/packages/base/locales/et-EE/translation.json b/web/packages/base/locales/et-EE/translation.json index 6c099e06e3..387d4a757f 100644 --- a/web/packages/base/locales/et-EE/translation.json +++ b/web/packages/base/locales/et-EE/translation.json @@ -121,12 +121,12 @@ "RECOVER": "", "NO_RECOVERY_KEY": "", "INCORRECT_RECOVERY_KEY": "", - "SORRY": "", + "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "CONTACT_SUPPORT": "", "REQUEST_FEATURE": "", - "SUPPORT": "", + "support": "", "CONFIRM": "", "cancel": "", "logout": "", diff --git a/web/packages/base/locales/fa-IR/translation.json b/web/packages/base/locales/fa-IR/translation.json index 8c70f82f12..5954be95ea 100644 --- a/web/packages/base/locales/fa-IR/translation.json +++ b/web/packages/base/locales/fa-IR/translation.json @@ -121,12 +121,12 @@ "RECOVER": "", "NO_RECOVERY_KEY": "", "INCORRECT_RECOVERY_KEY": "", - "SORRY": "", + "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "CONTACT_SUPPORT": "", "REQUEST_FEATURE": "", - "SUPPORT": "", + "support": "", "CONFIRM": "", "cancel": "", "logout": "", diff --git a/web/packages/base/locales/fi-FI/translation.json b/web/packages/base/locales/fi-FI/translation.json index 0d6ba301d5..f0477660c4 100644 --- a/web/packages/base/locales/fi-FI/translation.json +++ b/web/packages/base/locales/fi-FI/translation.json @@ -121,12 +121,12 @@ "RECOVER": "", "NO_RECOVERY_KEY": "", "INCORRECT_RECOVERY_KEY": "", - "SORRY": "", + "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "CONTACT_SUPPORT": "", "REQUEST_FEATURE": "", - "SUPPORT": "", + "support": "", "CONFIRM": "", "cancel": "", "logout": "", diff --git a/web/packages/base/locales/fr-FR/translation.json b/web/packages/base/locales/fr-FR/translation.json index 0ec519af3b..3f9986bc38 100644 --- a/web/packages/base/locales/fr-FR/translation.json +++ b/web/packages/base/locales/fr-FR/translation.json @@ -121,12 +121,12 @@ "RECOVER": "Récupérer", "NO_RECOVERY_KEY": "Pas de clé de récupération?", "INCORRECT_RECOVERY_KEY": "Clé de récupération non valide", - "SORRY": "Désolé", + "sorry": "Désolé", "NO_RECOVERY_KEY_MESSAGE": "En raison de notre protocole de chiffrement de bout en bout, vos données ne peuvent être décryptées sans votre mot de passe ou clé de récupération", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Veuillez envoyer un e-mail à {{emailID}} depuis votre adresse enregistrée", "CONTACT_SUPPORT": "Contacter le support", "REQUEST_FEATURE": "Soumettre une idée", - "SUPPORT": "Support", + "support": "Support", "CONFIRM": "Confirmer", "cancel": "Annuler", "logout": "Déconnexion", diff --git a/web/packages/base/locales/gu-IN/translation.json b/web/packages/base/locales/gu-IN/translation.json index 6c099e06e3..387d4a757f 100644 --- a/web/packages/base/locales/gu-IN/translation.json +++ b/web/packages/base/locales/gu-IN/translation.json @@ -121,12 +121,12 @@ "RECOVER": "", "NO_RECOVERY_KEY": "", "INCORRECT_RECOVERY_KEY": "", - "SORRY": "", + "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "CONTACT_SUPPORT": "", "REQUEST_FEATURE": "", - "SUPPORT": "", + "support": "", "CONFIRM": "", "cancel": "", "logout": "", diff --git a/web/packages/base/locales/hi-IN/translation.json b/web/packages/base/locales/hi-IN/translation.json index 6c099e06e3..387d4a757f 100644 --- a/web/packages/base/locales/hi-IN/translation.json +++ b/web/packages/base/locales/hi-IN/translation.json @@ -121,12 +121,12 @@ "RECOVER": "", "NO_RECOVERY_KEY": "", "INCORRECT_RECOVERY_KEY": "", - "SORRY": "", + "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "CONTACT_SUPPORT": "", "REQUEST_FEATURE": "", - "SUPPORT": "", + "support": "", "CONFIRM": "", "cancel": "", "logout": "", diff --git a/web/packages/base/locales/id-ID/translation.json b/web/packages/base/locales/id-ID/translation.json index 33ac565b7e..c7218cd62a 100644 --- a/web/packages/base/locales/id-ID/translation.json +++ b/web/packages/base/locales/id-ID/translation.json @@ -121,12 +121,12 @@ "RECOVER": "Pulihkan", "NO_RECOVERY_KEY": "Tidak punya kunci pemulihan?", "INCORRECT_RECOVERY_KEY": "Kunci pemulihan salah", - "SORRY": "Maaf", + "sorry": "Maaf", "NO_RECOVERY_KEY_MESSAGE": "Karena sifat protokol enkripsi ujung ke ujung kami, data kamu tidak dapat didekripsi tanpa sandi atau kunci pemulihan kamu", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Silakan kirimkan email ke {{emailID}} dari alamat email terdaftar kamu", "CONTACT_SUPPORT": "Hubungi dukungan", "REQUEST_FEATURE": "Minta Fitur", - "SUPPORT": "Dukungan", + "support": "Dukungan", "CONFIRM": "Konfirmasi", "cancel": "Batal", "logout": "Keluar akun", diff --git a/web/packages/base/locales/is-IS/translation.json b/web/packages/base/locales/is-IS/translation.json index 99abef9da7..80162d35c6 100644 --- a/web/packages/base/locales/is-IS/translation.json +++ b/web/packages/base/locales/is-IS/translation.json @@ -121,12 +121,12 @@ "RECOVER": "Endurheimta", "NO_RECOVERY_KEY": "Enginn endurheimtunarlykill?", "INCORRECT_RECOVERY_KEY": "", - "SORRY": "Fyrirgefðu", + "sorry": "Fyrirgefðu", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "CONTACT_SUPPORT": "", "REQUEST_FEATURE": "", - "SUPPORT": "", + "support": "", "CONFIRM": "Staðfesta", "cancel": "Hætta við", "logout": "Útskrá", diff --git a/web/packages/base/locales/it-IT/translation.json b/web/packages/base/locales/it-IT/translation.json index 7e3106a0f2..6a35985e24 100644 --- a/web/packages/base/locales/it-IT/translation.json +++ b/web/packages/base/locales/it-IT/translation.json @@ -121,12 +121,12 @@ "RECOVER": "Recupera", "NO_RECOVERY_KEY": "Nessuna chiave di recupero?", "INCORRECT_RECOVERY_KEY": "Chiave di recupero errata", - "SORRY": "Siamo spiacenti", + "sorry": "Siamo spiacenti", "NO_RECOVERY_KEY_MESSAGE": "A causa della natura del nostro protocollo di crittografia end-to-end, i tuoi dati non possono essere decifrati senza la tua password o chiave di ripristino", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Per favore invia un'email a {{emailID}} dal tuo indirizzo email registrato", "CONTACT_SUPPORT": "Contatta il supporto", "REQUEST_FEATURE": "Richiedi una funzionalità", - "SUPPORT": "Supporto", + "support": "Supporto", "CONFIRM": "Conferma", "cancel": "Annulla", "logout": "Disconnettiti", diff --git a/web/packages/base/locales/ja-JP/translation.json b/web/packages/base/locales/ja-JP/translation.json index 6c099e06e3..387d4a757f 100644 --- a/web/packages/base/locales/ja-JP/translation.json +++ b/web/packages/base/locales/ja-JP/translation.json @@ -121,12 +121,12 @@ "RECOVER": "", "NO_RECOVERY_KEY": "", "INCORRECT_RECOVERY_KEY": "", - "SORRY": "", + "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "CONTACT_SUPPORT": "", "REQUEST_FEATURE": "", - "SUPPORT": "", + "support": "", "CONFIRM": "", "cancel": "", "logout": "", diff --git a/web/packages/base/locales/km-KH/translation.json b/web/packages/base/locales/km-KH/translation.json index 6c099e06e3..387d4a757f 100644 --- a/web/packages/base/locales/km-KH/translation.json +++ b/web/packages/base/locales/km-KH/translation.json @@ -121,12 +121,12 @@ "RECOVER": "", "NO_RECOVERY_KEY": "", "INCORRECT_RECOVERY_KEY": "", - "SORRY": "", + "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "CONTACT_SUPPORT": "", "REQUEST_FEATURE": "", - "SUPPORT": "", + "support": "", "CONFIRM": "", "cancel": "", "logout": "", diff --git a/web/packages/base/locales/ko-KR/translation.json b/web/packages/base/locales/ko-KR/translation.json index cbd6c497de..cf3b0cc956 100644 --- a/web/packages/base/locales/ko-KR/translation.json +++ b/web/packages/base/locales/ko-KR/translation.json @@ -121,12 +121,12 @@ "RECOVER": "", "NO_RECOVERY_KEY": "", "INCORRECT_RECOVERY_KEY": "", - "SORRY": "", + "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "CONTACT_SUPPORT": "", "REQUEST_FEATURE": "", - "SUPPORT": "", + "support": "", "CONFIRM": "확인", "cancel": "취소", "logout": "로그아웃", diff --git a/web/packages/base/locales/nl-NL/translation.json b/web/packages/base/locales/nl-NL/translation.json index 8231f26c40..a8efd462d4 100644 --- a/web/packages/base/locales/nl-NL/translation.json +++ b/web/packages/base/locales/nl-NL/translation.json @@ -121,12 +121,12 @@ "RECOVER": "Herstellen", "NO_RECOVERY_KEY": "Geen herstelsleutel?", "INCORRECT_RECOVERY_KEY": "Onjuiste herstelsleutel", - "SORRY": "Sorry", + "sorry": "Sorry", "NO_RECOVERY_KEY_MESSAGE": "Door de aard van ons end-to-end encryptieprotocol kunnen je gegevens niet worden ontsleuteld zonder je wachtwoord of herstelsleutel", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Stuur een e-mail naar {{emailID}} vanaf het door jou geregistreerde e-mailadres", "CONTACT_SUPPORT": "Klantenservice", "REQUEST_FEATURE": "Vraag nieuwe functie aan", - "SUPPORT": "Ondersteuning", + "support": "Ondersteuning", "CONFIRM": "Bevestigen", "cancel": "Annuleren", "logout": "Uitloggen", diff --git a/web/packages/base/locales/pl-PL/translation.json b/web/packages/base/locales/pl-PL/translation.json index 81a756c8cf..a397f3b238 100644 --- a/web/packages/base/locales/pl-PL/translation.json +++ b/web/packages/base/locales/pl-PL/translation.json @@ -121,12 +121,12 @@ "RECOVER": "Odzyskaj", "NO_RECOVERY_KEY": "Brak klucza odzyskiwania?", "INCORRECT_RECOVERY_KEY": "Nieprawidłowy klucz odzyskiwania", - "SORRY": "Przepraszamy", + "sorry": "Przepraszamy", "NO_RECOVERY_KEY_MESSAGE": "Ze względu na charakter naszego protokołu szyfrowania end-to-end, Twoje dane nie mogą być odszyfrowane bez hasła lub klucza odzyskiwania", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Wyślij wiadomość e-mail na {{emailID}} z zarejestrowanego adresu e-mail", "CONTACT_SUPPORT": "Skontaktuj się z pomocą techniczną", "REQUEST_FEATURE": "Zaproponuj Funkcję", - "SUPPORT": "Wsparcie Techniczne", + "support": "Wsparcie Techniczne", "CONFIRM": "Potwierdź", "cancel": "Anuluj", "logout": "Wyloguj się", diff --git a/web/packages/base/locales/pt-BR/translation.json b/web/packages/base/locales/pt-BR/translation.json index 0db29af369..e84820b44e 100644 --- a/web/packages/base/locales/pt-BR/translation.json +++ b/web/packages/base/locales/pt-BR/translation.json @@ -121,12 +121,12 @@ "RECOVER": "Recuperar", "NO_RECOVERY_KEY": "Não possui a chave de recuperação?", "INCORRECT_RECOVERY_KEY": "Chave de recuperação incorreta", - "SORRY": "Desculpe", + "sorry": "Desculpe", "NO_RECOVERY_KEY_MESSAGE": "Devido à natureza do nosso protocolo de criptografia de ponta a ponta, seus dados não podem ser descriptografados sem sua senha ou chave de recuperação", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Por favor, envie um e-mail para {{emailID}} a partir do seu endereço de e-mail registrado", "CONTACT_SUPPORT": "Falar com o suporte", "REQUEST_FEATURE": "Solicitar recurso", - "SUPPORT": "Suporte", + "support": "Suporte", "CONFIRM": "Confirmar", "cancel": "Cancelar", "logout": "Encerrar sessão", diff --git a/web/packages/base/locales/pt-PT/translation.json b/web/packages/base/locales/pt-PT/translation.json index 7647869452..bc98d9b08b 100644 --- a/web/packages/base/locales/pt-PT/translation.json +++ b/web/packages/base/locales/pt-PT/translation.json @@ -121,12 +121,12 @@ "RECOVER": "", "NO_RECOVERY_KEY": "", "INCORRECT_RECOVERY_KEY": "", - "SORRY": "", + "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "CONTACT_SUPPORT": "", "REQUEST_FEATURE": "", - "SUPPORT": "", + "support": "", "CONFIRM": "", "cancel": "", "logout": "", diff --git a/web/packages/base/locales/ru-RU/translation.json b/web/packages/base/locales/ru-RU/translation.json index 7f02fff414..b6110c8338 100644 --- a/web/packages/base/locales/ru-RU/translation.json +++ b/web/packages/base/locales/ru-RU/translation.json @@ -121,12 +121,12 @@ "RECOVER": "Восстановить", "NO_RECOVERY_KEY": "Нет ключа восстановления?", "INCORRECT_RECOVERY_KEY": "Неправильный ключ восстановления", - "SORRY": "Извините", + "sorry": "Извините", "NO_RECOVERY_KEY_MESSAGE": "Из-за природы нашего сквозного протокола шифрования ваши данные не могут быть расшифрованы без вашего пароля или ключа восстановления", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Пожалуйста, отправьте электронное письмо на адрес {{emailID}} с вашего зарегистрированного адреса электронной почты", "CONTACT_SUPPORT": "Связаться с поддержкой", "REQUEST_FEATURE": "Запросить функцию", - "SUPPORT": "Поддержка", + "support": "Поддержка", "CONFIRM": "Подтвердить", "cancel": "Отменить", "logout": "Выйти", diff --git a/web/packages/base/locales/sv-SE/translation.json b/web/packages/base/locales/sv-SE/translation.json index 1b2833b26f..0a74923080 100644 --- a/web/packages/base/locales/sv-SE/translation.json +++ b/web/packages/base/locales/sv-SE/translation.json @@ -121,12 +121,12 @@ "RECOVER": "Återställ", "NO_RECOVERY_KEY": "Ingen återställningsnyckel?", "INCORRECT_RECOVERY_KEY": "Felaktig återställningsnyckel", - "SORRY": "", + "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "CONTACT_SUPPORT": "", "REQUEST_FEATURE": "", - "SUPPORT": "Support", + "support": "Support", "CONFIRM": "Bekräfta", "cancel": "Avbryt", "logout": "Logga ut", diff --git a/web/packages/base/locales/ta-IN/translation.json b/web/packages/base/locales/ta-IN/translation.json index 6c099e06e3..387d4a757f 100644 --- a/web/packages/base/locales/ta-IN/translation.json +++ b/web/packages/base/locales/ta-IN/translation.json @@ -121,12 +121,12 @@ "RECOVER": "", "NO_RECOVERY_KEY": "", "INCORRECT_RECOVERY_KEY": "", - "SORRY": "", + "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "CONTACT_SUPPORT": "", "REQUEST_FEATURE": "", - "SUPPORT": "", + "support": "", "CONFIRM": "", "cancel": "", "logout": "", diff --git a/web/packages/base/locales/te-IN/translation.json b/web/packages/base/locales/te-IN/translation.json index 6c099e06e3..387d4a757f 100644 --- a/web/packages/base/locales/te-IN/translation.json +++ b/web/packages/base/locales/te-IN/translation.json @@ -121,12 +121,12 @@ "RECOVER": "", "NO_RECOVERY_KEY": "", "INCORRECT_RECOVERY_KEY": "", - "SORRY": "", + "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "CONTACT_SUPPORT": "", "REQUEST_FEATURE": "", - "SUPPORT": "", + "support": "", "CONFIRM": "", "cancel": "", "logout": "", diff --git a/web/packages/base/locales/th-TH/translation.json b/web/packages/base/locales/th-TH/translation.json index 6c099e06e3..387d4a757f 100644 --- a/web/packages/base/locales/th-TH/translation.json +++ b/web/packages/base/locales/th-TH/translation.json @@ -121,12 +121,12 @@ "RECOVER": "", "NO_RECOVERY_KEY": "", "INCORRECT_RECOVERY_KEY": "", - "SORRY": "", + "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "CONTACT_SUPPORT": "", "REQUEST_FEATURE": "", - "SUPPORT": "", + "support": "", "CONFIRM": "", "cancel": "", "logout": "", diff --git a/web/packages/base/locales/ti-ER/translation.json b/web/packages/base/locales/ti-ER/translation.json index 6c099e06e3..387d4a757f 100644 --- a/web/packages/base/locales/ti-ER/translation.json +++ b/web/packages/base/locales/ti-ER/translation.json @@ -121,12 +121,12 @@ "RECOVER": "", "NO_RECOVERY_KEY": "", "INCORRECT_RECOVERY_KEY": "", - "SORRY": "", + "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "CONTACT_SUPPORT": "", "REQUEST_FEATURE": "", - "SUPPORT": "", + "support": "", "CONFIRM": "", "cancel": "", "logout": "", diff --git a/web/packages/base/locales/tr-TR/translation.json b/web/packages/base/locales/tr-TR/translation.json index bf24854586..fcbff8082d 100644 --- a/web/packages/base/locales/tr-TR/translation.json +++ b/web/packages/base/locales/tr-TR/translation.json @@ -121,12 +121,12 @@ "RECOVER": "Kurtar", "NO_RECOVERY_KEY": "Kurtarma anahtarı yok mu?", "INCORRECT_RECOVERY_KEY": "Kurtarma anahtarı yanlış", - "SORRY": "Üzgünüz", + "sorry": "Üzgünüz", "NO_RECOVERY_KEY_MESSAGE": "Uçtan uca şifreleme protokolümüzün doğası gereği, verilerin parolan veya kurtarma anahtarın olmadan çözülemez", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Lütfen kaydolduğun e-posta adresinden {{emailID}} adresine bir e-posta bırak", "CONTACT_SUPPORT": "Destek ile iletişime geç", "REQUEST_FEATURE": "Özellik İste", - "SUPPORT": "Destek", + "support": "Destek", "CONFIRM": "Onayla", "cancel": "İptal", "logout": "Çıkış yap", diff --git a/web/packages/base/locales/zh-CN/translation.json b/web/packages/base/locales/zh-CN/translation.json index fc355c7284..c95de5da6f 100644 --- a/web/packages/base/locales/zh-CN/translation.json +++ b/web/packages/base/locales/zh-CN/translation.json @@ -121,12 +121,12 @@ "RECOVER": "恢复", "NO_RECOVERY_KEY": "没有恢复密钥?", "INCORRECT_RECOVERY_KEY": "不正确的恢复密钥", - "SORRY": "抱歉", + "sorry": "抱歉", "NO_RECOVERY_KEY_MESSAGE": "由于我们端到端加密协议的性质,如果没有您的密码或恢复密钥,您的数据将无法解密", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "请用您注册Ente账户的电子邮箱发一封邮件给 {{emailID}}", "CONTACT_SUPPORT": "联系支持", "REQUEST_FEATURE": "功能建议", - "SUPPORT": "支持", + "support": "支持", "CONFIRM": "确认", "cancel": "取消", "logout": "退出登录", From c453c7dc81449ef68a5d674a814abd65eccbfca3 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 16:30:31 +0530 Subject: [PATCH 52/61] Remove unused --- web/packages/base/locales/en-US/translation.json | 1 - 1 file changed, 1 deletion(-) diff --git a/web/packages/base/locales/en-US/translation.json b/web/packages/base/locales/en-US/translation.json index 119e43d63f..f4f6388548 100644 --- a/web/packages/base/locales/en-US/translation.json +++ b/web/packages/base/locales/en-US/translation.json @@ -127,7 +127,6 @@ "CONTACT_SUPPORT": "Contact support", "REQUEST_FEATURE": "Request Feature", "support": "Support", - "CONFIRM": "Confirm", "cancel": "Cancel", "logout": "Logout", "logout_message": "Are you sure you want to logout?", From 60b9d1e43f6262fe6c03bb213063ec4899726e34 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 16:31:16 +0530 Subject: [PATCH 53/61] Rename --- web/apps/photos/src/components/Sidebar/index.tsx | 4 ++-- web/packages/accounts/pages/two-factor/recover.tsx | 2 +- web/packages/base/locales/ar-SA/translation.json | 10 +++++----- web/packages/base/locales/bg-BG/translation.json | 10 +++++----- web/packages/base/locales/ca-ES/translation.json | 10 +++++----- web/packages/base/locales/da-DK/translation.json | 10 +++++----- web/packages/base/locales/de-DE/translation.json | 10 +++++----- web/packages/base/locales/el-GR/translation.json | 10 +++++----- web/packages/base/locales/en-US/translation.json | 10 +++++----- web/packages/base/locales/es-ES/translation.json | 10 +++++----- web/packages/base/locales/et-EE/translation.json | 10 +++++----- web/packages/base/locales/fa-IR/translation.json | 10 +++++----- web/packages/base/locales/fi-FI/translation.json | 10 +++++----- web/packages/base/locales/fr-FR/translation.json | 10 +++++----- web/packages/base/locales/gu-IN/translation.json | 10 +++++----- web/packages/base/locales/hi-IN/translation.json | 10 +++++----- web/packages/base/locales/id-ID/translation.json | 10 +++++----- web/packages/base/locales/is-IS/translation.json | 10 +++++----- web/packages/base/locales/it-IT/translation.json | 10 +++++----- web/packages/base/locales/ja-JP/translation.json | 10 +++++----- web/packages/base/locales/km-KH/translation.json | 10 +++++----- web/packages/base/locales/ko-KR/translation.json | 10 +++++----- web/packages/base/locales/nl-NL/translation.json | 10 +++++----- web/packages/base/locales/pl-PL/translation.json | 10 +++++----- web/packages/base/locales/pt-BR/translation.json | 10 +++++----- web/packages/base/locales/pt-PT/translation.json | 10 +++++----- web/packages/base/locales/ru-RU/translation.json | 10 +++++----- web/packages/base/locales/sv-SE/translation.json | 10 +++++----- web/packages/base/locales/ta-IN/translation.json | 10 +++++----- web/packages/base/locales/te-IN/translation.json | 10 +++++----- web/packages/base/locales/th-TH/translation.json | 10 +++++----- web/packages/base/locales/ti-ER/translation.json | 10 +++++----- web/packages/base/locales/tr-TR/translation.json | 10 +++++----- web/packages/base/locales/zh-CN/translation.json | 10 +++++----- web/packages/shared/components/RecoveryKey.tsx | 6 +++--- 35 files changed, 166 insertions(+), 166 deletions(-) diff --git a/web/apps/photos/src/components/Sidebar/index.tsx b/web/apps/photos/src/components/Sidebar/index.tsx index 045b46d1b2..259c29852f 100644 --- a/web/apps/photos/src/components/Sidebar/index.tsx +++ b/web/apps/photos/src/components/Sidebar/index.tsx @@ -506,7 +506,7 @@ const UtilitySection: React.FC = ({ closeSidebar }) => { {isInternalUserViaEmailCheck() && ( { <> = ({ appContext, twoFactorType }) => { dialogClose?: DialogBoxAttributesV2["close"], ) => { appContext.setDialogBoxAttributesV2({ - title: t("CONTACT_SUPPORT"), + title: t("contact_support"), close: dialogClose ?? {}, content: ( {{emailID}} von deiner registrierten E-Mail-Adresse", - "CONTACT_SUPPORT": "Support kontaktieren", - "REQUEST_FEATURE": "Feature anfragen", + "contact_support": "Support kontaktieren", + "request_feature": "Feature anfragen", "support": "Support", "CONFIRM": "Bestätigen", "cancel": "Abbrechen", diff --git a/web/packages/base/locales/el-GR/translation.json b/web/packages/base/locales/el-GR/translation.json index db38cebb40..39c7c2b9da 100644 --- a/web/packages/base/locales/el-GR/translation.json +++ b/web/packages/base/locales/el-GR/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "", "password_changed_elsewhere_message": "Παρακαλώ συνδεθείτε ξανά σε αυτήν τη συσκευή για να χρησιμοποιήσετε το νέο σας κωδικό πρόσβασης για αυθεντικοποίηση.", "GO_BACK": "Επιστροφή", - "RECOVERY_KEY": "Κλειδί ανάκτησης", - "SAVE_LATER": "Κάντε το αργότερα", - "SAVE": "Αποθήκευση Κλειδιού", + "recovery_key": "Κλειδί ανάκτησης", + "do_this_later": "Κάντε το αργότερα", + "save_key": "Αποθήκευση Κλειδιού", "RECOVERY_KEY_DESCRIPTION": "Εάν ξεχάσετε τον κωδικό πρόσβασής σας, ο μόνος τρόπος για να ανακτήσετε τα δεδομένα σας είναι με αυτό το κλειδί.", "RECOVER_KEY_GENERATION_FAILED": "Δεν ήταν δυνατή η δημιουργία κωδικού ανάκτησης, παρακαλώ προσπαθήστε ξανά", "KEY_NOT_STORED_DISCLAIMER": "Δεν αποθηκεύουμε αυτό το κλειδί, οπότε παρακαλώ αποθηκεύστε αυτό το κλειδί σε μια ασφαλή τοποθεσία", @@ -124,8 +124,8 @@ "sorry": "Συγνώμη", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Παρακαλώ αφήστε ένα μήνυμα ηλ. ταχυδρομείου στο {{emailID}} από την καταχωρημένη διεύθυνση σας", - "CONTACT_SUPPORT": "Επικοινωνήστε με την υποστήριξη", - "REQUEST_FEATURE": "Αίτηση Λειτουργίας", + "contact_support": "Επικοινωνήστε με την υποστήριξη", + "request_feature": "Αίτηση Λειτουργίας", "support": "Υποστήριξη", "CONFIRM": "Επιβεβαίωση", "cancel": "Ακύρωση", diff --git a/web/packages/base/locales/en-US/translation.json b/web/packages/base/locales/en-US/translation.json index f4f6388548..70e2b93a31 100644 --- a/web/packages/base/locales/en-US/translation.json +++ b/web/packages/base/locales/en-US/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "Password changed elsewhere", "password_changed_elsewhere_message": "Please login again on this device to use your new password to authenticate.", "GO_BACK": "Go back", - "RECOVERY_KEY": "Recovery key", - "SAVE_LATER": "Do this later", - "SAVE": "Save Key", + "recovery_key": "Recovery key", + "do_this_later": "Do this later", + "save_key": "Save Key", "RECOVERY_KEY_DESCRIPTION": "If you forget your password, the only way you can recover your data is with this key.", "RECOVER_KEY_GENERATION_FAILED": "Recovery code could not be generated, please try again", "KEY_NOT_STORED_DISCLAIMER": "We don't store this key, so please save this in a safe place", @@ -124,8 +124,8 @@ "sorry": "Sorry", "NO_RECOVERY_KEY_MESSAGE": "Due to the nature of our end-to-end encryption protocol, your data cannot be decrypted without your password or recovery key", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Please drop an email to {{emailID}} from your registered email address", - "CONTACT_SUPPORT": "Contact support", - "REQUEST_FEATURE": "Request Feature", + "contact_support": "Contact support", + "request_feature": "Request Feature", "support": "Support", "cancel": "Cancel", "logout": "Logout", diff --git a/web/packages/base/locales/es-ES/translation.json b/web/packages/base/locales/es-ES/translation.json index 3a26923a78..c6e6d1f89f 100644 --- a/web/packages/base/locales/es-ES/translation.json +++ b/web/packages/base/locales/es-ES/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "", "password_changed_elsewhere_message": "", "GO_BACK": "Retroceder", - "RECOVERY_KEY": "Clave de recuperación", - "SAVE_LATER": "Hacer más tarde", - "SAVE": "Guardar Clave", + "recovery_key": "Clave de recuperación", + "do_this_later": "Hacer más tarde", + "save_key": "Guardar Clave", "RECOVERY_KEY_DESCRIPTION": "Si olvida su contraseña, la única forma de recuperar sus datos es con esta clave.", "RECOVER_KEY_GENERATION_FAILED": "El código de recuperación no pudo ser generado, por favor inténtalo de nuevo", "KEY_NOT_STORED_DISCLAIMER": "No almacenamos esta clave, así que por favor guarde esto en un lugar seguro", @@ -124,8 +124,8 @@ "sorry": "Lo sentimos", "NO_RECOVERY_KEY_MESSAGE": "Debido a la naturaleza de nuestro protocolo de cifrado de extremo a extremo, sus datos no pueden ser descifrados sin su contraseña o clave de recuperación", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Por favor, envíe un email a {{emailID}} desde su dirección de correo electrónico registrada", - "CONTACT_SUPPORT": "Contacta con soporte", - "REQUEST_FEATURE": "Solicitar una función", + "contact_support": "Contacta con soporte", + "request_feature": "Solicitar una función", "support": "Soporte", "CONFIRM": "Confirmar", "cancel": "Cancelar", diff --git a/web/packages/base/locales/et-EE/translation.json b/web/packages/base/locales/et-EE/translation.json index 387d4a757f..60770c311c 100644 --- a/web/packages/base/locales/et-EE/translation.json +++ b/web/packages/base/locales/et-EE/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "", "password_changed_elsewhere_message": "", "GO_BACK": "", - "RECOVERY_KEY": "", - "SAVE_LATER": "", - "SAVE": "", + "recovery_key": "", + "do_this_later": "", + "save_key": "", "RECOVERY_KEY_DESCRIPTION": "", "RECOVER_KEY_GENERATION_FAILED": "", "KEY_NOT_STORED_DISCLAIMER": "", @@ -124,8 +124,8 @@ "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", - "CONTACT_SUPPORT": "", - "REQUEST_FEATURE": "", + "contact_support": "", + "request_feature": "", "support": "", "CONFIRM": "", "cancel": "", diff --git a/web/packages/base/locales/fa-IR/translation.json b/web/packages/base/locales/fa-IR/translation.json index 5954be95ea..7d4a0714ef 100644 --- a/web/packages/base/locales/fa-IR/translation.json +++ b/web/packages/base/locales/fa-IR/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "", "password_changed_elsewhere_message": "", "GO_BACK": "", - "RECOVERY_KEY": "", - "SAVE_LATER": "", - "SAVE": "", + "recovery_key": "", + "do_this_later": "", + "save_key": "", "RECOVERY_KEY_DESCRIPTION": "", "RECOVER_KEY_GENERATION_FAILED": "", "KEY_NOT_STORED_DISCLAIMER": "", @@ -124,8 +124,8 @@ "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", - "CONTACT_SUPPORT": "", - "REQUEST_FEATURE": "", + "contact_support": "", + "request_feature": "", "support": "", "CONFIRM": "", "cancel": "", diff --git a/web/packages/base/locales/fi-FI/translation.json b/web/packages/base/locales/fi-FI/translation.json index f0477660c4..77fd5d3149 100644 --- a/web/packages/base/locales/fi-FI/translation.json +++ b/web/packages/base/locales/fi-FI/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "", "password_changed_elsewhere_message": "", "GO_BACK": "", - "RECOVERY_KEY": "", - "SAVE_LATER": "", - "SAVE": "", + "recovery_key": "", + "do_this_later": "", + "save_key": "", "RECOVERY_KEY_DESCRIPTION": "", "RECOVER_KEY_GENERATION_FAILED": "", "KEY_NOT_STORED_DISCLAIMER": "", @@ -124,8 +124,8 @@ "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", - "CONTACT_SUPPORT": "", - "REQUEST_FEATURE": "", + "contact_support": "", + "request_feature": "", "support": "", "CONFIRM": "", "cancel": "", diff --git a/web/packages/base/locales/fr-FR/translation.json b/web/packages/base/locales/fr-FR/translation.json index 3f9986bc38..54bc8784d7 100644 --- a/web/packages/base/locales/fr-FR/translation.json +++ b/web/packages/base/locales/fr-FR/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "Mot de passe modifié ailleurs", "password_changed_elsewhere_message": "Veuillez vous reconnecter sur cet appareil pour utiliser votre nouveau mot de passe pour vous authentifier.", "GO_BACK": "Retour", - "RECOVERY_KEY": "Clé de récupération", - "SAVE_LATER": "Plus tard", - "SAVE": "Sauvegarder la clé", + "recovery_key": "Clé de récupération", + "do_this_later": "Plus tard", + "save_key": "Sauvegarder la clé", "RECOVERY_KEY_DESCRIPTION": "Si vous oubliez votre mot de passe, la seule façon de récupérer vos données sera grâce à cette clé.", "RECOVER_KEY_GENERATION_FAILED": "Le code de récupération ne peut être généré, veuillez réessayer", "KEY_NOT_STORED_DISCLAIMER": "Nous ne stockons pas cette clé, veuillez donc la sauvegarder dans un endroit sûr", @@ -124,8 +124,8 @@ "sorry": "Désolé", "NO_RECOVERY_KEY_MESSAGE": "En raison de notre protocole de chiffrement de bout en bout, vos données ne peuvent être décryptées sans votre mot de passe ou clé de récupération", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Veuillez envoyer un e-mail à {{emailID}} depuis votre adresse enregistrée", - "CONTACT_SUPPORT": "Contacter le support", - "REQUEST_FEATURE": "Soumettre une idée", + "contact_support": "Contacter le support", + "request_feature": "Soumettre une idée", "support": "Support", "CONFIRM": "Confirmer", "cancel": "Annuler", diff --git a/web/packages/base/locales/gu-IN/translation.json b/web/packages/base/locales/gu-IN/translation.json index 387d4a757f..60770c311c 100644 --- a/web/packages/base/locales/gu-IN/translation.json +++ b/web/packages/base/locales/gu-IN/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "", "password_changed_elsewhere_message": "", "GO_BACK": "", - "RECOVERY_KEY": "", - "SAVE_LATER": "", - "SAVE": "", + "recovery_key": "", + "do_this_later": "", + "save_key": "", "RECOVERY_KEY_DESCRIPTION": "", "RECOVER_KEY_GENERATION_FAILED": "", "KEY_NOT_STORED_DISCLAIMER": "", @@ -124,8 +124,8 @@ "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", - "CONTACT_SUPPORT": "", - "REQUEST_FEATURE": "", + "contact_support": "", + "request_feature": "", "support": "", "CONFIRM": "", "cancel": "", diff --git a/web/packages/base/locales/hi-IN/translation.json b/web/packages/base/locales/hi-IN/translation.json index 387d4a757f..60770c311c 100644 --- a/web/packages/base/locales/hi-IN/translation.json +++ b/web/packages/base/locales/hi-IN/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "", "password_changed_elsewhere_message": "", "GO_BACK": "", - "RECOVERY_KEY": "", - "SAVE_LATER": "", - "SAVE": "", + "recovery_key": "", + "do_this_later": "", + "save_key": "", "RECOVERY_KEY_DESCRIPTION": "", "RECOVER_KEY_GENERATION_FAILED": "", "KEY_NOT_STORED_DISCLAIMER": "", @@ -124,8 +124,8 @@ "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", - "CONTACT_SUPPORT": "", - "REQUEST_FEATURE": "", + "contact_support": "", + "request_feature": "", "support": "", "CONFIRM": "", "cancel": "", diff --git a/web/packages/base/locales/id-ID/translation.json b/web/packages/base/locales/id-ID/translation.json index c7218cd62a..df18a7317a 100644 --- a/web/packages/base/locales/id-ID/translation.json +++ b/web/packages/base/locales/id-ID/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "", "password_changed_elsewhere_message": "", "GO_BACK": "Kembali", - "RECOVERY_KEY": "Kunci pemulihan", - "SAVE_LATER": "Lakukan lain kali", - "SAVE": "Simpan Kunci", + "recovery_key": "Kunci pemulihan", + "do_this_later": "Lakukan lain kali", + "save_key": "Simpan Kunci", "RECOVERY_KEY_DESCRIPTION": "Jika Anda lupa kata sandi, satu-satunya cara memulihkan data Anda adalah dengan kunci ini.", "RECOVER_KEY_GENERATION_FAILED": "Tidak dapat menghasilkan kode pemulihan, silakan coba lagi", "KEY_NOT_STORED_DISCLAIMER": "Kami tidak menyimpan kunci ini, jadi harap simpan kunci ini dengan aman", @@ -124,8 +124,8 @@ "sorry": "Maaf", "NO_RECOVERY_KEY_MESSAGE": "Karena sifat protokol enkripsi ujung ke ujung kami, data kamu tidak dapat didekripsi tanpa sandi atau kunci pemulihan kamu", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Silakan kirimkan email ke {{emailID}} dari alamat email terdaftar kamu", - "CONTACT_SUPPORT": "Hubungi dukungan", - "REQUEST_FEATURE": "Minta Fitur", + "contact_support": "Hubungi dukungan", + "request_feature": "Minta Fitur", "support": "Dukungan", "CONFIRM": "Konfirmasi", "cancel": "Batal", diff --git a/web/packages/base/locales/is-IS/translation.json b/web/packages/base/locales/is-IS/translation.json index 80162d35c6..344bbc20a5 100644 --- a/web/packages/base/locales/is-IS/translation.json +++ b/web/packages/base/locales/is-IS/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "", "password_changed_elsewhere_message": "", "GO_BACK": "Fara til baka", - "RECOVERY_KEY": "", - "SAVE_LATER": "Gera þetta seinna", - "SAVE": "Vista Lykil", + "recovery_key": "", + "do_this_later": "Gera þetta seinna", + "save_key": "Vista Lykil", "RECOVERY_KEY_DESCRIPTION": "", "RECOVER_KEY_GENERATION_FAILED": "", "KEY_NOT_STORED_DISCLAIMER": "", @@ -124,8 +124,8 @@ "sorry": "Fyrirgefðu", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", - "CONTACT_SUPPORT": "", - "REQUEST_FEATURE": "", + "contact_support": "", + "request_feature": "", "support": "", "CONFIRM": "Staðfesta", "cancel": "Hætta við", diff --git a/web/packages/base/locales/it-IT/translation.json b/web/packages/base/locales/it-IT/translation.json index 6a35985e24..9329734579 100644 --- a/web/packages/base/locales/it-IT/translation.json +++ b/web/packages/base/locales/it-IT/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "Password cambiata altrove", "password_changed_elsewhere_message": "Effettua nuovamente il login su questo dispositivo per utilizzare la nuova password per autenticarti.", "GO_BACK": "Torna indietro", - "RECOVERY_KEY": "Chiave di recupero", - "SAVE_LATER": "Fallo più tardi", - "SAVE": "Salva Chiave", + "recovery_key": "Chiave di recupero", + "do_this_later": "Fallo più tardi", + "save_key": "Salva Chiave", "RECOVERY_KEY_DESCRIPTION": "Se dimentichi la tua password, l'unico modo per recuperare i tuoi dati è con questa chiave.", "RECOVER_KEY_GENERATION_FAILED": "Impossibile generare il codice di recupero, riprova", "KEY_NOT_STORED_DISCLAIMER": "Non memorizziamo questa chiave, quindi salvala in un luogo sicuro", @@ -124,8 +124,8 @@ "sorry": "Siamo spiacenti", "NO_RECOVERY_KEY_MESSAGE": "A causa della natura del nostro protocollo di crittografia end-to-end, i tuoi dati non possono essere decifrati senza la tua password o chiave di ripristino", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Per favore invia un'email a {{emailID}} dal tuo indirizzo email registrato", - "CONTACT_SUPPORT": "Contatta il supporto", - "REQUEST_FEATURE": "Richiedi una funzionalità", + "contact_support": "Contatta il supporto", + "request_feature": "Richiedi una funzionalità", "support": "Supporto", "CONFIRM": "Conferma", "cancel": "Annulla", diff --git a/web/packages/base/locales/ja-JP/translation.json b/web/packages/base/locales/ja-JP/translation.json index 387d4a757f..60770c311c 100644 --- a/web/packages/base/locales/ja-JP/translation.json +++ b/web/packages/base/locales/ja-JP/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "", "password_changed_elsewhere_message": "", "GO_BACK": "", - "RECOVERY_KEY": "", - "SAVE_LATER": "", - "SAVE": "", + "recovery_key": "", + "do_this_later": "", + "save_key": "", "RECOVERY_KEY_DESCRIPTION": "", "RECOVER_KEY_GENERATION_FAILED": "", "KEY_NOT_STORED_DISCLAIMER": "", @@ -124,8 +124,8 @@ "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", - "CONTACT_SUPPORT": "", - "REQUEST_FEATURE": "", + "contact_support": "", + "request_feature": "", "support": "", "CONFIRM": "", "cancel": "", diff --git a/web/packages/base/locales/km-KH/translation.json b/web/packages/base/locales/km-KH/translation.json index 387d4a757f..60770c311c 100644 --- a/web/packages/base/locales/km-KH/translation.json +++ b/web/packages/base/locales/km-KH/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "", "password_changed_elsewhere_message": "", "GO_BACK": "", - "RECOVERY_KEY": "", - "SAVE_LATER": "", - "SAVE": "", + "recovery_key": "", + "do_this_later": "", + "save_key": "", "RECOVERY_KEY_DESCRIPTION": "", "RECOVER_KEY_GENERATION_FAILED": "", "KEY_NOT_STORED_DISCLAIMER": "", @@ -124,8 +124,8 @@ "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", - "CONTACT_SUPPORT": "", - "REQUEST_FEATURE": "", + "contact_support": "", + "request_feature": "", "support": "", "CONFIRM": "", "cancel": "", diff --git a/web/packages/base/locales/ko-KR/translation.json b/web/packages/base/locales/ko-KR/translation.json index cf3b0cc956..0f60907c82 100644 --- a/web/packages/base/locales/ko-KR/translation.json +++ b/web/packages/base/locales/ko-KR/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "", "password_changed_elsewhere_message": "", "GO_BACK": "뒤로 가기", - "RECOVERY_KEY": "키 복구하기", - "SAVE_LATER": "나중에 저장하기", - "SAVE": "키 저장하기", + "recovery_key": "키 복구하기", + "do_this_later": "나중에 저장하기", + "save_key": "키 저장하기", "RECOVERY_KEY_DESCRIPTION": "암호 분실시, 오직 이 키를 이용해야만 데이터를 복구할 수 있습니다.", "RECOVER_KEY_GENERATION_FAILED": "", "KEY_NOT_STORED_DISCLAIMER": "", @@ -124,8 +124,8 @@ "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", - "CONTACT_SUPPORT": "", - "REQUEST_FEATURE": "", + "contact_support": "", + "request_feature": "", "support": "", "CONFIRM": "확인", "cancel": "취소", diff --git a/web/packages/base/locales/nl-NL/translation.json b/web/packages/base/locales/nl-NL/translation.json index a8efd462d4..0a1349e316 100644 --- a/web/packages/base/locales/nl-NL/translation.json +++ b/web/packages/base/locales/nl-NL/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "Wachtwoord elders gewijzigd", "password_changed_elsewhere_message": "Log opnieuw in op dit apparaat om uw nieuwe wachtwoord te gebruiken om te verifiëren.", "GO_BACK": "Ga terug", - "RECOVERY_KEY": "Herstelsleutel", - "SAVE_LATER": "Doe dit later", - "SAVE": "Sleutel opslaan", + "recovery_key": "Herstelsleutel", + "do_this_later": "Doe dit later", + "save_key": "Sleutel opslaan", "RECOVERY_KEY_DESCRIPTION": "Als je je wachtwoord vergeet, kun je alleen met deze sleutel je gegevens herstellen.", "RECOVER_KEY_GENERATION_FAILED": "Herstelcode kon niet worden gegenereerd, probeer het opnieuw", "KEY_NOT_STORED_DISCLAIMER": "We slaan deze sleutel niet op, bewaar dit op een veilige plaats", @@ -124,8 +124,8 @@ "sorry": "Sorry", "NO_RECOVERY_KEY_MESSAGE": "Door de aard van ons end-to-end encryptieprotocol kunnen je gegevens niet worden ontsleuteld zonder je wachtwoord of herstelsleutel", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Stuur een e-mail naar {{emailID}} vanaf het door jou geregistreerde e-mailadres", - "CONTACT_SUPPORT": "Klantenservice", - "REQUEST_FEATURE": "Vraag nieuwe functie aan", + "contact_support": "Klantenservice", + "request_feature": "Vraag nieuwe functie aan", "support": "Ondersteuning", "CONFIRM": "Bevestigen", "cancel": "Annuleren", diff --git a/web/packages/base/locales/pl-PL/translation.json b/web/packages/base/locales/pl-PL/translation.json index a397f3b238..573cc3d019 100644 --- a/web/packages/base/locales/pl-PL/translation.json +++ b/web/packages/base/locales/pl-PL/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "Hasło zostało zmienione gdzie indziej", "password_changed_elsewhere_message": "Zaloguj się ponownie na tym urządzeniu, aby użyć nowego hasła, aby się uwierzytelnić.", "GO_BACK": "Cofnij się", - "RECOVERY_KEY": "Klucz odzyskiwania", - "SAVE_LATER": "Zrób to później", - "SAVE": "Zapisz Klucz", + "recovery_key": "Klucz odzyskiwania", + "do_this_later": "Zrób to później", + "save_key": "Zapisz Klucz", "RECOVERY_KEY_DESCRIPTION": "Jeśli zapomnisz swojego hasła, jedynym sposobem na odzyskanie Twoich danych jest ten klucz.", "RECOVER_KEY_GENERATION_FAILED": "Nie można wygenerować kodu odzyskiwania, spróbuj ponownie", "KEY_NOT_STORED_DISCLAIMER": "Nie przechowujemy tego klucza, prosimy zapisać to w bezpiecznym miejscu", @@ -124,8 +124,8 @@ "sorry": "Przepraszamy", "NO_RECOVERY_KEY_MESSAGE": "Ze względu na charakter naszego protokołu szyfrowania end-to-end, Twoje dane nie mogą być odszyfrowane bez hasła lub klucza odzyskiwania", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Wyślij wiadomość e-mail na {{emailID}} z zarejestrowanego adresu e-mail", - "CONTACT_SUPPORT": "Skontaktuj się z pomocą techniczną", - "REQUEST_FEATURE": "Zaproponuj Funkcję", + "contact_support": "Skontaktuj się z pomocą techniczną", + "request_feature": "Zaproponuj Funkcję", "support": "Wsparcie Techniczne", "CONFIRM": "Potwierdź", "cancel": "Anuluj", diff --git a/web/packages/base/locales/pt-BR/translation.json b/web/packages/base/locales/pt-BR/translation.json index e84820b44e..782a2c52b9 100644 --- a/web/packages/base/locales/pt-BR/translation.json +++ b/web/packages/base/locales/pt-BR/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "Senha alterada em outro lugar", "password_changed_elsewhere_message": "Por favor, inicie sessão novamente neste dispositivo para usar sua nova senha para autenticar.", "GO_BACK": "Voltar", - "RECOVERY_KEY": "Chave de recuperação", - "SAVE_LATER": "Fazer isso mais tarde", - "SAVE": "Salvar Chave", + "recovery_key": "Chave de recuperação", + "do_this_later": "Fazer isso mais tarde", + "save_key": "Salvar Chave", "RECOVERY_KEY_DESCRIPTION": "Caso você esqueça sua senha, a única maneira de recuperar seus dados é com essa chave.", "RECOVER_KEY_GENERATION_FAILED": "Não foi possível gerar o código de recuperação, tente novamente", "KEY_NOT_STORED_DISCLAIMER": "Não armazenamos essa chave, por favor, salve essa chave de palavras em um lugar seguro", @@ -124,8 +124,8 @@ "sorry": "Desculpe", "NO_RECOVERY_KEY_MESSAGE": "Devido à natureza do nosso protocolo de criptografia de ponta a ponta, seus dados não podem ser descriptografados sem sua senha ou chave de recuperação", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Por favor, envie um e-mail para {{emailID}} a partir do seu endereço de e-mail registrado", - "CONTACT_SUPPORT": "Falar com o suporte", - "REQUEST_FEATURE": "Solicitar recurso", + "contact_support": "Falar com o suporte", + "request_feature": "Solicitar recurso", "support": "Suporte", "CONFIRM": "Confirmar", "cancel": "Cancelar", diff --git a/web/packages/base/locales/pt-PT/translation.json b/web/packages/base/locales/pt-PT/translation.json index bc98d9b08b..f5f077ad6f 100644 --- a/web/packages/base/locales/pt-PT/translation.json +++ b/web/packages/base/locales/pt-PT/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "", "password_changed_elsewhere_message": "", "GO_BACK": "", - "RECOVERY_KEY": "", - "SAVE_LATER": "", - "SAVE": "", + "recovery_key": "", + "do_this_later": "", + "save_key": "", "RECOVERY_KEY_DESCRIPTION": "", "RECOVER_KEY_GENERATION_FAILED": "", "KEY_NOT_STORED_DISCLAIMER": "", @@ -124,8 +124,8 @@ "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", - "CONTACT_SUPPORT": "", - "REQUEST_FEATURE": "", + "contact_support": "", + "request_feature": "", "support": "", "CONFIRM": "", "cancel": "", diff --git a/web/packages/base/locales/ru-RU/translation.json b/web/packages/base/locales/ru-RU/translation.json index b6110c8338..293f7e174f 100644 --- a/web/packages/base/locales/ru-RU/translation.json +++ b/web/packages/base/locales/ru-RU/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "Пароль изменен в другом месте", "password_changed_elsewhere_message": "Пожалуйста, войдите снова на этом устройстве, чтобы использовать новый пароль для аутентификации.", "GO_BACK": "Вернуться назад", - "RECOVERY_KEY": "Ключ восстановления", - "SAVE_LATER": "Сделать позже", - "SAVE": "Сохранить ключ", + "recovery_key": "Ключ восстановления", + "do_this_later": "Сделать позже", + "save_key": "Сохранить ключ", "RECOVERY_KEY_DESCRIPTION": "Если вы забыли свой пароль, то восстановить данные можно только с помощью этого ключа.", "RECOVER_KEY_GENERATION_FAILED": "Не удалось сгенерировать код восстановления, пожалуйста, повторите попытку", "KEY_NOT_STORED_DISCLAIMER": "Мы не храним этот ключ, поэтому, пожалуйста, сохраните его в надежном месте", @@ -124,8 +124,8 @@ "sorry": "Извините", "NO_RECOVERY_KEY_MESSAGE": "Из-за природы нашего сквозного протокола шифрования ваши данные не могут быть расшифрованы без вашего пароля или ключа восстановления", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Пожалуйста, отправьте электронное письмо на адрес {{emailID}} с вашего зарегистрированного адреса электронной почты", - "CONTACT_SUPPORT": "Связаться с поддержкой", - "REQUEST_FEATURE": "Запросить функцию", + "contact_support": "Связаться с поддержкой", + "request_feature": "Запросить функцию", "support": "Поддержка", "CONFIRM": "Подтвердить", "cancel": "Отменить", diff --git a/web/packages/base/locales/sv-SE/translation.json b/web/packages/base/locales/sv-SE/translation.json index 0a74923080..276e940364 100644 --- a/web/packages/base/locales/sv-SE/translation.json +++ b/web/packages/base/locales/sv-SE/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "", "password_changed_elsewhere_message": "", "GO_BACK": "", - "RECOVERY_KEY": "Återställningsnyckel", - "SAVE_LATER": "", - "SAVE": "Spara nyckel", + "recovery_key": "Återställningsnyckel", + "do_this_later": "", + "save_key": "Spara nyckel", "RECOVERY_KEY_DESCRIPTION": "", "RECOVER_KEY_GENERATION_FAILED": "", "KEY_NOT_STORED_DISCLAIMER": "", @@ -124,8 +124,8 @@ "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", - "CONTACT_SUPPORT": "", - "REQUEST_FEATURE": "", + "contact_support": "", + "request_feature": "", "support": "Support", "CONFIRM": "Bekräfta", "cancel": "Avbryt", diff --git a/web/packages/base/locales/ta-IN/translation.json b/web/packages/base/locales/ta-IN/translation.json index 387d4a757f..60770c311c 100644 --- a/web/packages/base/locales/ta-IN/translation.json +++ b/web/packages/base/locales/ta-IN/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "", "password_changed_elsewhere_message": "", "GO_BACK": "", - "RECOVERY_KEY": "", - "SAVE_LATER": "", - "SAVE": "", + "recovery_key": "", + "do_this_later": "", + "save_key": "", "RECOVERY_KEY_DESCRIPTION": "", "RECOVER_KEY_GENERATION_FAILED": "", "KEY_NOT_STORED_DISCLAIMER": "", @@ -124,8 +124,8 @@ "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", - "CONTACT_SUPPORT": "", - "REQUEST_FEATURE": "", + "contact_support": "", + "request_feature": "", "support": "", "CONFIRM": "", "cancel": "", diff --git a/web/packages/base/locales/te-IN/translation.json b/web/packages/base/locales/te-IN/translation.json index 387d4a757f..60770c311c 100644 --- a/web/packages/base/locales/te-IN/translation.json +++ b/web/packages/base/locales/te-IN/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "", "password_changed_elsewhere_message": "", "GO_BACK": "", - "RECOVERY_KEY": "", - "SAVE_LATER": "", - "SAVE": "", + "recovery_key": "", + "do_this_later": "", + "save_key": "", "RECOVERY_KEY_DESCRIPTION": "", "RECOVER_KEY_GENERATION_FAILED": "", "KEY_NOT_STORED_DISCLAIMER": "", @@ -124,8 +124,8 @@ "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", - "CONTACT_SUPPORT": "", - "REQUEST_FEATURE": "", + "contact_support": "", + "request_feature": "", "support": "", "CONFIRM": "", "cancel": "", diff --git a/web/packages/base/locales/th-TH/translation.json b/web/packages/base/locales/th-TH/translation.json index 387d4a757f..60770c311c 100644 --- a/web/packages/base/locales/th-TH/translation.json +++ b/web/packages/base/locales/th-TH/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "", "password_changed_elsewhere_message": "", "GO_BACK": "", - "RECOVERY_KEY": "", - "SAVE_LATER": "", - "SAVE": "", + "recovery_key": "", + "do_this_later": "", + "save_key": "", "RECOVERY_KEY_DESCRIPTION": "", "RECOVER_KEY_GENERATION_FAILED": "", "KEY_NOT_STORED_DISCLAIMER": "", @@ -124,8 +124,8 @@ "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", - "CONTACT_SUPPORT": "", - "REQUEST_FEATURE": "", + "contact_support": "", + "request_feature": "", "support": "", "CONFIRM": "", "cancel": "", diff --git a/web/packages/base/locales/ti-ER/translation.json b/web/packages/base/locales/ti-ER/translation.json index 387d4a757f..60770c311c 100644 --- a/web/packages/base/locales/ti-ER/translation.json +++ b/web/packages/base/locales/ti-ER/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "", "password_changed_elsewhere_message": "", "GO_BACK": "", - "RECOVERY_KEY": "", - "SAVE_LATER": "", - "SAVE": "", + "recovery_key": "", + "do_this_later": "", + "save_key": "", "RECOVERY_KEY_DESCRIPTION": "", "RECOVER_KEY_GENERATION_FAILED": "", "KEY_NOT_STORED_DISCLAIMER": "", @@ -124,8 +124,8 @@ "sorry": "", "NO_RECOVERY_KEY_MESSAGE": "", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", - "CONTACT_SUPPORT": "", - "REQUEST_FEATURE": "", + "contact_support": "", + "request_feature": "", "support": "", "CONFIRM": "", "cancel": "", diff --git a/web/packages/base/locales/tr-TR/translation.json b/web/packages/base/locales/tr-TR/translation.json index fcbff8082d..bc031de5b2 100644 --- a/web/packages/base/locales/tr-TR/translation.json +++ b/web/packages/base/locales/tr-TR/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "Parola başka bir yerde değiştirildi", "password_changed_elsewhere_message": "Lütfen yeni parolanı kullanarak kimlik doğrulaması yapmak için bu cihazda tekrar oturum aç.", "GO_BACK": "Geri dön", - "RECOVERY_KEY": "Kurtarma anahtarı", - "SAVE_LATER": "Sonra yap", - "SAVE": "Anahtarı kaydet", + "recovery_key": "Kurtarma anahtarı", + "do_this_later": "Sonra yap", + "save_key": "Anahtarı kaydet", "RECOVERY_KEY_DESCRIPTION": "Eğer parolanı unutursan, verilerini kurtarabileceğin tek yol bu anahtardır.", "RECOVER_KEY_GENERATION_FAILED": "Kurtarma kodu oluşturulamadı, lütfen tekrar dene", "KEY_NOT_STORED_DISCLAIMER": "Bu anahtarı saklamıyoruz, bu nedenle lütfen güvenli bir yerde sakla", @@ -124,8 +124,8 @@ "sorry": "Üzgünüz", "NO_RECOVERY_KEY_MESSAGE": "Uçtan uca şifreleme protokolümüzün doğası gereği, verilerin parolan veya kurtarma anahtarın olmadan çözülemez", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Lütfen kaydolduğun e-posta adresinden {{emailID}} adresine bir e-posta bırak", - "CONTACT_SUPPORT": "Destek ile iletişime geç", - "REQUEST_FEATURE": "Özellik İste", + "contact_support": "Destek ile iletişime geç", + "request_feature": "Özellik İste", "support": "Destek", "CONFIRM": "Onayla", "cancel": "İptal", diff --git a/web/packages/base/locales/zh-CN/translation.json b/web/packages/base/locales/zh-CN/translation.json index c95de5da6f..9797cbbf8e 100644 --- a/web/packages/base/locales/zh-CN/translation.json +++ b/web/packages/base/locales/zh-CN/translation.json @@ -109,9 +109,9 @@ "password_changed_elsewhere": "密码已在别处更改", "password_changed_elsewhere_message": "请在此设备上再次登录以使用您的新密码进行身份验证。", "GO_BACK": "返回", - "RECOVERY_KEY": "恢复密钥", - "SAVE_LATER": "稍后再做", - "SAVE": "保存密钥", + "recovery_key": "恢复密钥", + "do_this_later": "稍后再做", + "save_key": "保存密钥", "RECOVERY_KEY_DESCRIPTION": "如果您忘记了密码,恢复数据的唯一方法就是使用此密钥。", "RECOVER_KEY_GENERATION_FAILED": "无法生成恢复代码,请重试", "KEY_NOT_STORED_DISCLAIMER": "我们不存储此密钥,因此请将其保存在安全的地方", @@ -124,8 +124,8 @@ "sorry": "抱歉", "NO_RECOVERY_KEY_MESSAGE": "由于我们端到端加密协议的性质,如果没有您的密码或恢复密钥,您的数据将无法解密", "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "请用您注册Ente账户的电子邮箱发一封邮件给 {{emailID}}", - "CONTACT_SUPPORT": "联系支持", - "REQUEST_FEATURE": "功能建议", + "contact_support": "联系支持", + "request_feature": "功能建议", "support": "支持", "CONFIRM": "确认", "cancel": "取消", diff --git a/web/packages/shared/components/RecoveryKey.tsx b/web/packages/shared/components/RecoveryKey.tsx index 53f8f2050f..6f10023942 100644 --- a/web/packages/shared/components/RecoveryKey.tsx +++ b/web/packages/shared/components/RecoveryKey.tsx @@ -68,7 +68,7 @@ function RecoveryKey({ somethingWentWrong, ...props }: Props) { fullWidth > - {t("RECOVERY_KEY")} + {t("recovery_key")} {t("RECOVERY_KEY_DESCRIPTION")} @@ -81,10 +81,10 @@ function RecoveryKey({ somethingWentWrong, ...props }: Props) { From 7fdb8a6dae25ce26c5e27dfd953730241a14692f Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Sat, 28 Sep 2024 11:18:59 +0000 Subject: [PATCH 54/61] New Crowdin translations by GitHub Action --- web/packages/base/locales/ar-SA/translation.json | 1 - web/packages/base/locales/bg-BG/translation.json | 1 - web/packages/base/locales/ca-ES/translation.json | 1 - web/packages/base/locales/da-DK/translation.json | 1 - web/packages/base/locales/de-DE/translation.json | 1 - web/packages/base/locales/el-GR/translation.json | 1 - web/packages/base/locales/es-ES/translation.json | 1 - web/packages/base/locales/et-EE/translation.json | 1 - web/packages/base/locales/fa-IR/translation.json | 1 - web/packages/base/locales/fi-FI/translation.json | 1 - web/packages/base/locales/fr-FR/translation.json | 1 - web/packages/base/locales/gu-IN/translation.json | 1 - web/packages/base/locales/hi-IN/translation.json | 1 - web/packages/base/locales/id-ID/translation.json | 1 - web/packages/base/locales/is-IS/translation.json | 1 - web/packages/base/locales/it-IT/translation.json | 1 - web/packages/base/locales/ja-JP/translation.json | 1 - web/packages/base/locales/km-KH/translation.json | 1 - web/packages/base/locales/ko-KR/translation.json | 1 - web/packages/base/locales/nl-NL/translation.json | 1 - web/packages/base/locales/pl-PL/translation.json | 1 - web/packages/base/locales/pt-BR/translation.json | 1 - web/packages/base/locales/pt-PT/translation.json | 1 - web/packages/base/locales/ru-RU/translation.json | 1 - web/packages/base/locales/sv-SE/translation.json | 3 +-- web/packages/base/locales/ta-IN/translation.json | 1 - web/packages/base/locales/te-IN/translation.json | 1 - web/packages/base/locales/th-TH/translation.json | 1 - web/packages/base/locales/ti-ER/translation.json | 1 - web/packages/base/locales/tr-TR/translation.json | 1 - web/packages/base/locales/zh-CN/translation.json | 1 - 31 files changed, 1 insertion(+), 32 deletions(-) diff --git a/web/packages/base/locales/ar-SA/translation.json b/web/packages/base/locales/ar-SA/translation.json index 4d56d1b68a..839221eafe 100644 --- a/web/packages/base/locales/ar-SA/translation.json +++ b/web/packages/base/locales/ar-SA/translation.json @@ -127,7 +127,6 @@ "contact_support": "الاتصال بالدعم", "request_feature": "طلب ميزة", "support": "الدعم", - "CONFIRM": "تأكيد", "cancel": "إلغاء", "logout": "تسجيل الخروج", "logout_message": "هل أنت متأكد من أنك تريد تسجيل الخروج؟", diff --git a/web/packages/base/locales/bg-BG/translation.json b/web/packages/base/locales/bg-BG/translation.json index ad6eb64544..0fa8cd3784 100644 --- a/web/packages/base/locales/bg-BG/translation.json +++ b/web/packages/base/locales/bg-BG/translation.json @@ -127,7 +127,6 @@ "contact_support": "", "request_feature": "", "support": "", - "CONFIRM": "", "cancel": "", "logout": "", "logout_message": "", diff --git a/web/packages/base/locales/ca-ES/translation.json b/web/packages/base/locales/ca-ES/translation.json index 60770c311c..41201c66d5 100644 --- a/web/packages/base/locales/ca-ES/translation.json +++ b/web/packages/base/locales/ca-ES/translation.json @@ -127,7 +127,6 @@ "contact_support": "", "request_feature": "", "support": "", - "CONFIRM": "", "cancel": "", "logout": "", "logout_message": "", diff --git a/web/packages/base/locales/da-DK/translation.json b/web/packages/base/locales/da-DK/translation.json index 60770c311c..41201c66d5 100644 --- a/web/packages/base/locales/da-DK/translation.json +++ b/web/packages/base/locales/da-DK/translation.json @@ -127,7 +127,6 @@ "contact_support": "", "request_feature": "", "support": "", - "CONFIRM": "", "cancel": "", "logout": "", "logout_message": "", diff --git a/web/packages/base/locales/de-DE/translation.json b/web/packages/base/locales/de-DE/translation.json index 56fb6d9284..ced0ae23a3 100644 --- a/web/packages/base/locales/de-DE/translation.json +++ b/web/packages/base/locales/de-DE/translation.json @@ -127,7 +127,6 @@ "contact_support": "Support kontaktieren", "request_feature": "Feature anfragen", "support": "Support", - "CONFIRM": "Bestätigen", "cancel": "Abbrechen", "logout": "Ausloggen", "logout_message": "Sind sie sicher, dass sie sich ausloggen möchten?", diff --git a/web/packages/base/locales/el-GR/translation.json b/web/packages/base/locales/el-GR/translation.json index 39c7c2b9da..77837bc637 100644 --- a/web/packages/base/locales/el-GR/translation.json +++ b/web/packages/base/locales/el-GR/translation.json @@ -127,7 +127,6 @@ "contact_support": "Επικοινωνήστε με την υποστήριξη", "request_feature": "Αίτηση Λειτουργίας", "support": "Υποστήριξη", - "CONFIRM": "Επιβεβαίωση", "cancel": "Ακύρωση", "logout": "Αποσυνδέση", "logout_message": "Είστε σίγουροι ότι θέλετε να αποσυνδεθείτε;", diff --git a/web/packages/base/locales/es-ES/translation.json b/web/packages/base/locales/es-ES/translation.json index c6e6d1f89f..00167838fa 100644 --- a/web/packages/base/locales/es-ES/translation.json +++ b/web/packages/base/locales/es-ES/translation.json @@ -127,7 +127,6 @@ "contact_support": "Contacta con soporte", "request_feature": "Solicitar una función", "support": "Soporte", - "CONFIRM": "Confirmar", "cancel": "Cancelar", "logout": "Cerrar sesión", "logout_message": "Seguro que quiere cerrar la sesión?", diff --git a/web/packages/base/locales/et-EE/translation.json b/web/packages/base/locales/et-EE/translation.json index 60770c311c..41201c66d5 100644 --- a/web/packages/base/locales/et-EE/translation.json +++ b/web/packages/base/locales/et-EE/translation.json @@ -127,7 +127,6 @@ "contact_support": "", "request_feature": "", "support": "", - "CONFIRM": "", "cancel": "", "logout": "", "logout_message": "", diff --git a/web/packages/base/locales/fa-IR/translation.json b/web/packages/base/locales/fa-IR/translation.json index 7d4a0714ef..553f25f16e 100644 --- a/web/packages/base/locales/fa-IR/translation.json +++ b/web/packages/base/locales/fa-IR/translation.json @@ -127,7 +127,6 @@ "contact_support": "", "request_feature": "", "support": "", - "CONFIRM": "", "cancel": "", "logout": "", "logout_message": "", diff --git a/web/packages/base/locales/fi-FI/translation.json b/web/packages/base/locales/fi-FI/translation.json index 77fd5d3149..f49794ef69 100644 --- a/web/packages/base/locales/fi-FI/translation.json +++ b/web/packages/base/locales/fi-FI/translation.json @@ -127,7 +127,6 @@ "contact_support": "", "request_feature": "", "support": "", - "CONFIRM": "", "cancel": "", "logout": "", "logout_message": "", diff --git a/web/packages/base/locales/fr-FR/translation.json b/web/packages/base/locales/fr-FR/translation.json index 54bc8784d7..b39fc0513b 100644 --- a/web/packages/base/locales/fr-FR/translation.json +++ b/web/packages/base/locales/fr-FR/translation.json @@ -127,7 +127,6 @@ "contact_support": "Contacter le support", "request_feature": "Soumettre une idée", "support": "Support", - "CONFIRM": "Confirmer", "cancel": "Annuler", "logout": "Déconnexion", "logout_message": "Voulez-vous vraiment vous déconnecter?", diff --git a/web/packages/base/locales/gu-IN/translation.json b/web/packages/base/locales/gu-IN/translation.json index 60770c311c..41201c66d5 100644 --- a/web/packages/base/locales/gu-IN/translation.json +++ b/web/packages/base/locales/gu-IN/translation.json @@ -127,7 +127,6 @@ "contact_support": "", "request_feature": "", "support": "", - "CONFIRM": "", "cancel": "", "logout": "", "logout_message": "", diff --git a/web/packages/base/locales/hi-IN/translation.json b/web/packages/base/locales/hi-IN/translation.json index 60770c311c..41201c66d5 100644 --- a/web/packages/base/locales/hi-IN/translation.json +++ b/web/packages/base/locales/hi-IN/translation.json @@ -127,7 +127,6 @@ "contact_support": "", "request_feature": "", "support": "", - "CONFIRM": "", "cancel": "", "logout": "", "logout_message": "", diff --git a/web/packages/base/locales/id-ID/translation.json b/web/packages/base/locales/id-ID/translation.json index df18a7317a..7cc9eabc0c 100644 --- a/web/packages/base/locales/id-ID/translation.json +++ b/web/packages/base/locales/id-ID/translation.json @@ -127,7 +127,6 @@ "contact_support": "Hubungi dukungan", "request_feature": "Minta Fitur", "support": "Dukungan", - "CONFIRM": "Konfirmasi", "cancel": "Batal", "logout": "Keluar akun", "logout_message": "Apakah kamu yakin ingin keluar akun?", diff --git a/web/packages/base/locales/is-IS/translation.json b/web/packages/base/locales/is-IS/translation.json index 344bbc20a5..e712369fd3 100644 --- a/web/packages/base/locales/is-IS/translation.json +++ b/web/packages/base/locales/is-IS/translation.json @@ -127,7 +127,6 @@ "contact_support": "", "request_feature": "", "support": "", - "CONFIRM": "Staðfesta", "cancel": "Hætta við", "logout": "Útskrá", "logout_message": "Ertu viss um að þú viljir skrá þig út?", diff --git a/web/packages/base/locales/it-IT/translation.json b/web/packages/base/locales/it-IT/translation.json index 9329734579..7ba18ce17d 100644 --- a/web/packages/base/locales/it-IT/translation.json +++ b/web/packages/base/locales/it-IT/translation.json @@ -127,7 +127,6 @@ "contact_support": "Contatta il supporto", "request_feature": "Richiedi una funzionalità", "support": "Supporto", - "CONFIRM": "Conferma", "cancel": "Annulla", "logout": "Disconnettiti", "logout_message": "Sei sicuro di volerti disconnettere?", diff --git a/web/packages/base/locales/ja-JP/translation.json b/web/packages/base/locales/ja-JP/translation.json index 60770c311c..41201c66d5 100644 --- a/web/packages/base/locales/ja-JP/translation.json +++ b/web/packages/base/locales/ja-JP/translation.json @@ -127,7 +127,6 @@ "contact_support": "", "request_feature": "", "support": "", - "CONFIRM": "", "cancel": "", "logout": "", "logout_message": "", diff --git a/web/packages/base/locales/km-KH/translation.json b/web/packages/base/locales/km-KH/translation.json index 60770c311c..41201c66d5 100644 --- a/web/packages/base/locales/km-KH/translation.json +++ b/web/packages/base/locales/km-KH/translation.json @@ -127,7 +127,6 @@ "contact_support": "", "request_feature": "", "support": "", - "CONFIRM": "", "cancel": "", "logout": "", "logout_message": "", diff --git a/web/packages/base/locales/ko-KR/translation.json b/web/packages/base/locales/ko-KR/translation.json index 0f60907c82..cf536867fb 100644 --- a/web/packages/base/locales/ko-KR/translation.json +++ b/web/packages/base/locales/ko-KR/translation.json @@ -127,7 +127,6 @@ "contact_support": "", "request_feature": "", "support": "", - "CONFIRM": "확인", "cancel": "취소", "logout": "로그아웃", "logout_message": "정말로 로그아웃 하시겠습니까?", diff --git a/web/packages/base/locales/nl-NL/translation.json b/web/packages/base/locales/nl-NL/translation.json index 0a1349e316..dc0197a84d 100644 --- a/web/packages/base/locales/nl-NL/translation.json +++ b/web/packages/base/locales/nl-NL/translation.json @@ -127,7 +127,6 @@ "contact_support": "Klantenservice", "request_feature": "Vraag nieuwe functie aan", "support": "Ondersteuning", - "CONFIRM": "Bevestigen", "cancel": "Annuleren", "logout": "Uitloggen", "logout_message": "Weet u zeker dat u wilt uitloggen?", diff --git a/web/packages/base/locales/pl-PL/translation.json b/web/packages/base/locales/pl-PL/translation.json index 573cc3d019..9463235f55 100644 --- a/web/packages/base/locales/pl-PL/translation.json +++ b/web/packages/base/locales/pl-PL/translation.json @@ -127,7 +127,6 @@ "contact_support": "Skontaktuj się z pomocą techniczną", "request_feature": "Zaproponuj Funkcję", "support": "Wsparcie Techniczne", - "CONFIRM": "Potwierdź", "cancel": "Anuluj", "logout": "Wyloguj się", "logout_message": "Czy na pewno chcesz się wylogować?", diff --git a/web/packages/base/locales/pt-BR/translation.json b/web/packages/base/locales/pt-BR/translation.json index 782a2c52b9..a7493b2f95 100644 --- a/web/packages/base/locales/pt-BR/translation.json +++ b/web/packages/base/locales/pt-BR/translation.json @@ -127,7 +127,6 @@ "contact_support": "Falar com o suporte", "request_feature": "Solicitar recurso", "support": "Suporte", - "CONFIRM": "Confirmar", "cancel": "Cancelar", "logout": "Encerrar sessão", "logout_message": "Você tem certeza que deseja encerrar a sessão?", diff --git a/web/packages/base/locales/pt-PT/translation.json b/web/packages/base/locales/pt-PT/translation.json index f5f077ad6f..9ab29e1de4 100644 --- a/web/packages/base/locales/pt-PT/translation.json +++ b/web/packages/base/locales/pt-PT/translation.json @@ -127,7 +127,6 @@ "contact_support": "", "request_feature": "", "support": "", - "CONFIRM": "", "cancel": "", "logout": "", "logout_message": "", diff --git a/web/packages/base/locales/ru-RU/translation.json b/web/packages/base/locales/ru-RU/translation.json index 293f7e174f..9aefe0a128 100644 --- a/web/packages/base/locales/ru-RU/translation.json +++ b/web/packages/base/locales/ru-RU/translation.json @@ -127,7 +127,6 @@ "contact_support": "Связаться с поддержкой", "request_feature": "Запросить функцию", "support": "Поддержка", - "CONFIRM": "Подтвердить", "cancel": "Отменить", "logout": "Выйти", "logout_message": "Вы уверены, что хотите выйти?", diff --git a/web/packages/base/locales/sv-SE/translation.json b/web/packages/base/locales/sv-SE/translation.json index 276e940364..d75e8c0d08 100644 --- a/web/packages/base/locales/sv-SE/translation.json +++ b/web/packages/base/locales/sv-SE/translation.json @@ -126,8 +126,7 @@ "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", "contact_support": "", "request_feature": "", - "support": "Support", - "CONFIRM": "Bekräfta", + "support": "", "cancel": "Avbryt", "logout": "Logga ut", "logout_message": "Är du säker på att du vill logga ut?", diff --git a/web/packages/base/locales/ta-IN/translation.json b/web/packages/base/locales/ta-IN/translation.json index 60770c311c..41201c66d5 100644 --- a/web/packages/base/locales/ta-IN/translation.json +++ b/web/packages/base/locales/ta-IN/translation.json @@ -127,7 +127,6 @@ "contact_support": "", "request_feature": "", "support": "", - "CONFIRM": "", "cancel": "", "logout": "", "logout_message": "", diff --git a/web/packages/base/locales/te-IN/translation.json b/web/packages/base/locales/te-IN/translation.json index 60770c311c..41201c66d5 100644 --- a/web/packages/base/locales/te-IN/translation.json +++ b/web/packages/base/locales/te-IN/translation.json @@ -127,7 +127,6 @@ "contact_support": "", "request_feature": "", "support": "", - "CONFIRM": "", "cancel": "", "logout": "", "logout_message": "", diff --git a/web/packages/base/locales/th-TH/translation.json b/web/packages/base/locales/th-TH/translation.json index 60770c311c..41201c66d5 100644 --- a/web/packages/base/locales/th-TH/translation.json +++ b/web/packages/base/locales/th-TH/translation.json @@ -127,7 +127,6 @@ "contact_support": "", "request_feature": "", "support": "", - "CONFIRM": "", "cancel": "", "logout": "", "logout_message": "", diff --git a/web/packages/base/locales/ti-ER/translation.json b/web/packages/base/locales/ti-ER/translation.json index 60770c311c..41201c66d5 100644 --- a/web/packages/base/locales/ti-ER/translation.json +++ b/web/packages/base/locales/ti-ER/translation.json @@ -127,7 +127,6 @@ "contact_support": "", "request_feature": "", "support": "", - "CONFIRM": "", "cancel": "", "logout": "", "logout_message": "", diff --git a/web/packages/base/locales/tr-TR/translation.json b/web/packages/base/locales/tr-TR/translation.json index bc031de5b2..e572e3098e 100644 --- a/web/packages/base/locales/tr-TR/translation.json +++ b/web/packages/base/locales/tr-TR/translation.json @@ -127,7 +127,6 @@ "contact_support": "Destek ile iletişime geç", "request_feature": "Özellik İste", "support": "Destek", - "CONFIRM": "Onayla", "cancel": "İptal", "logout": "Çıkış yap", "logout_message": "Çıkış yapmak istediğine emin misin?", diff --git a/web/packages/base/locales/zh-CN/translation.json b/web/packages/base/locales/zh-CN/translation.json index 9797cbbf8e..6ddafa5823 100644 --- a/web/packages/base/locales/zh-CN/translation.json +++ b/web/packages/base/locales/zh-CN/translation.json @@ -127,7 +127,6 @@ "contact_support": "联系支持", "request_feature": "功能建议", "support": "支持", - "CONFIRM": "确认", "cancel": "取消", "logout": "退出登录", "logout_message": "你确定要退出登录吗?", From 5a5e046192c279708287a9ce9699b609a440c3f0 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 17:22:03 +0530 Subject: [PATCH 55/61] Fix hidden sync with existing mobile app --- web/packages/new/photos/services/ml/people.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/web/packages/new/photos/services/ml/people.ts b/web/packages/new/photos/services/ml/people.ts index 79e9152b86..dbf67ec3d9 100644 --- a/web/packages/new/photos/services/ml/people.ts +++ b/web/packages/new/photos/services/ml/people.ts @@ -174,6 +174,10 @@ export const reconstructPeople = async (): Promise => { // in the UI. if (isHidden) return undefined; + // Older versions of the mobile app marked hidden cgroups by setting + // their name to an empty string. + if (!name) return undefined; + // Person faces from all the clusters assigned to this cgroup, sorted by // their score. const faces = assigned From e2c0aed2e4fdb2f8e8d6438457b4d286a04487ae Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 17:22:44 +0530 Subject: [PATCH 56/61] Remove early exit threshold It did not appear to be obviously helping the speed (or hurting the quality), so remove it to reduce the number of concepts at play. --- web/packages/new/photos/services/ml/cluster.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/web/packages/new/photos/services/ml/cluster.ts b/web/packages/new/photos/services/ml/cluster.ts index c0d81173b9..50c53bcc8e 100644 --- a/web/packages/new/photos/services/ml/cluster.ts +++ b/web/packages/new/photos/services/ml/cluster.ts @@ -301,10 +301,6 @@ const clusterBatchLinear = async ( if (csim > nnCosineSimilarity && csim >= threshold) { nnIndex = j; nnCosineSimilarity = csim; - - // If we've find something above our early exit threshold, stop - // looking for a better match (A way to speed up clustering). - if (csim >= 0.9) break; } } From eb4d77bd24c95399e4f9f2076cbe84baa5411496 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 17:37:33 +0530 Subject: [PATCH 57/61] Un-ff --- web/packages/new/photos/services/ml/index.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index aeecff8f47..0c841e643d 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -14,7 +14,6 @@ import type { EnteFile } from "@/new/photos/types/file"; import { ensure } from "@/utils/ensure"; import { throttled } from "@/utils/promise"; import { proxy, transfer } from "comlink"; -import { isInternalUser } from "../feature-flags"; import { getRemoteFlag, updateRemoteFlag } from "../remote-store"; import { setSearchPeople } from "../search"; import type { UploadItem } from "../upload/types"; @@ -342,8 +341,6 @@ export const mlSync = async () => { const workerDidUnawaitedIndex = () => void updateClustersAndPeople(); const updateClustersAndPeople = async () => { - if (!(await isInternalUser())) return; - const masterKey = await masterKeyFromSession(); // Fetch existing cgroups from remote. From 66fad15743cd985e07b06e5e80a1fa4448e9a8e7 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 17:41:54 +0530 Subject: [PATCH 58/61] Add CHANGELOG entry --- desktop/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/desktop/CHANGELOG.md b/desktop/CHANGELOG.md index 27ed96ab16..0f4b211411 100644 --- a/desktop/CHANGELOG.md +++ b/desktop/CHANGELOG.md @@ -2,6 +2,7 @@ ## v1.7.5 (Unreleased) +- Face grouping (beta). - Directly upload to selected album on drag and drop. - Include shared files in export. - . From a2841a8af203dee3dd6643a880116e0ec71a46ef Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 18:24:21 +0530 Subject: [PATCH 59/61] Use most recent face as the auto-cover --- web/packages/new/photos/services/ml/people.ts | 49 +++++++++++-------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/web/packages/new/photos/services/ml/people.ts b/web/packages/new/photos/services/ml/people.ts index dbf67ec3d9..ef30e36707 100644 --- a/web/packages/new/photos/services/ml/people.ts +++ b/web/packages/new/photos/services/ml/people.ts @@ -161,6 +161,20 @@ export const reconstructPeople = async (): Promise => { } } + // Return annotated "person faces" corresponding to the given face ids, + // sorting them by the creation time of the file they belong to. + // + // Within the same file, sort by the face score. + const personFacesSortedNewestFirst = (faceIDs: string[]) => + faceIDs + .map((faceID) => personFaceByID.get(faceID)) + .filter((pf) => !!pf) + .sort((a, b) => { + const at = a.file.metadata.creationTime; + const bt = b.file.metadata.creationTime; + return bt == at ? b.score - a.score : bt - at; + }); + // Help out tsc. type Interim = (Person | undefined)[]; @@ -179,17 +193,14 @@ export const reconstructPeople = async (): Promise => { if (!name) return undefined; // Person faces from all the clusters assigned to this cgroup, sorted by - // their score. - const faces = assigned - .map(({ faces }) => - faces.map((id) => personFaceByID.get(id)).filter((f) => !!f), - ) - .flat() - .sort((a, b) => b.score - a.score); + // recency (then score). + const faces = personFacesSortedNewestFirst( + assigned.map(({ faces }) => faces).flat(), + ); // Ignore this cgroup if we don't have visible faces left in it. - const highestScoringFace = faces[0]; - if (!highestScoringFace) return undefined; + const mostRecentFace = faces[0]; + if (!mostRecentFace) return undefined; // IDs of the files containing this face. const fileIDs = [...new Set(faces.map((f) => f.file.id))]; @@ -208,8 +219,8 @@ export const reconstructPeople = async (): Promise => { displayFaceID = avatarFaceID; displayFaceFile = avatarFile; } else { - displayFaceID = highestScoringFace.faceID; - displayFaceFile = highestScoringFace.file; + displayFaceID = mostRecentFace.faceID; + displayFaceFile = mostRecentFace.file; } return { @@ -226,25 +237,23 @@ export const reconstructPeople = async (): Promise => { // Convert local-only clusters to people. const localClusters = await savedFaceClusters(); const clusterPeople: Interim = localClusters.map((cluster) => { - const faces = cluster.faces - .map((id) => personFaceByID.get(id)) - .filter((f) => !!f); + const faces = personFacesSortedNewestFirst(cluster.faces); + + // Ignore this cluster if we don't have visible faces left in it. + const mostRecentFace = faces[0]; + if (!mostRecentFace) return undefined; // Ignore clusters with too few visible faces. if (faces.length < 10) return undefined; - const topFace = faces.reduce((top, face) => - top.score > face.score ? top : face, - ); - return { type: "cluster", cluster, id: cluster.id, name: undefined, fileIDs: [...new Set(faces.map((f) => f.file.id))], - displayFaceID: topFace.faceID, - displayFaceFile: topFace.file, + displayFaceID: mostRecentFace.faceID, + displayFaceFile: mostRecentFace.file, }; }); From 9515cf70f58dc770c9308d4e91b29010e5aac8f1 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 18:54:54 +0530 Subject: [PATCH 60/61] photosd-v1.7.5 (#3514) --- desktop/CHANGELOG.md | 6 +++--- desktop/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/desktop/CHANGELOG.md b/desktop/CHANGELOG.md index 0f4b211411..82e4966f6e 100644 --- a/desktop/CHANGELOG.md +++ b/desktop/CHANGELOG.md @@ -1,11 +1,11 @@ # CHANGELOG -## v1.7.5 (Unreleased) +## v1.7.5 - Face grouping (beta). -- Directly upload to selected album on drag and drop. - Include shared files in export. -- . +- Directly upload to selected album on drag and drop. +- Improve heuristics for clubbing a photo and video into a live photo. ## v1.7.4 diff --git a/desktop/package.json b/desktop/package.json index 77b014b9e6..172bde56c8 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -1,6 +1,6 @@ { "name": "ente", - "version": "1.7.5-beta", + "version": "1.7.5", "private": true, "description": "Desktop client for Ente Photos", "repository": "github:ente-io/photos-desktop", From c8468efd20fa09b759be8e9de00b4bd270dd61e5 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 28 Sep 2024 19:21:49 +0530 Subject: [PATCH 61/61] [desktop] Start next release cycle --- desktop/CHANGELOG.md | 4 ++++ desktop/package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/desktop/CHANGELOG.md b/desktop/CHANGELOG.md index 82e4966f6e..227c909512 100644 --- a/desktop/CHANGELOG.md +++ b/desktop/CHANGELOG.md @@ -1,5 +1,9 @@ # CHANGELOG +## v1.7.6 (Unreleased) + +- . + ## v1.7.5 - Face grouping (beta). diff --git a/desktop/package.json b/desktop/package.json index 172bde56c8..683d74a2db 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -1,6 +1,6 @@ { "name": "ente", - "version": "1.7.5", + "version": "1.7.6-beta", "private": true, "description": "Desktop client for Ente Photos", "repository": "github:ente-io/photos-desktop",