diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx
index e4bce9a93a..9d2444e8aa 100644
--- a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx
+++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx
@@ -64,7 +64,7 @@ export default function EmailShare({
onClick={openManageEmailShare}
label={
collection.sharees.length === 1
- ? t(collection.sharees[0]?.email)
+ ? collection.sharees[0]?.email
: null
}
endIcon={}
diff --git a/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx b/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx
index 027f6bd8c1..5e524fe8b3 100644
--- a/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx
+++ b/web/apps/photos/src/components/Upload/UploadTypeSelector.tsx
@@ -1,4 +1,5 @@
import { FocusVisibleButton } from "@/new/photos/components/FocusVisibleButton";
+import { pt } from "@/next/i18n";
import DialogTitleWithCloseButton, {
DialogTitleWithCloseButtonSm,
dialogCloseHandler,
@@ -202,7 +203,6 @@ const TakeoutOptions: React.FC> = ({
onSelect,
onClose,
}) => {
- // TODO(MR): Move these to localized strings when finalized.
return (
<>
@@ -218,7 +218,7 @@ const TakeoutOptions: React.FC> = ({
disableRipple
onClick={() => onSelect("folders")}
>
- {t("Select folder")}
+ {pt("Select folder")}
> = ({
disableRipple
onClick={() => onSelect("zips")}
>
- {t("Select zips")}
+ {pt("Select zips")}
> = ({
fullWidth
disableRipple
>
- {t("FAQ")}
+ {pt("FAQ")}
- Unzip all zips into the same folder and upload that. Or
- upload the zips directly. See FAQ for details.
+ {pt(
+ "Unzip all zips into the same folder and upload that. Or upload the zips directly. See FAQ for details.",
+ )}
diff --git a/web/apps/photos/src/services/export/index.ts b/web/apps/photos/src/services/export/index.ts
index 38f73a4240..754c3dc980 100644
--- a/web/apps/photos/src/services/export/index.ts
+++ b/web/apps/photos/src/services/export/index.ts
@@ -1329,7 +1329,7 @@ const readOnDiskFileExportRecordIDs = async (
*
* @param allFiles The list of files to export.
*
- * @param exportRecord The export record containing bookeeping for the export.
+ * @param exportRecord The export record containing bookkeeping for the export.
*
* @paramd diskFileRecordIDs (Optional) The export record IDs of files from
* amongst {@link allFiles} that already exist on disk. If provided (e.g. when
diff --git a/web/packages/next/i18n.ts b/web/packages/next/i18n.ts
index da63bc8c51..cec28add94 100644
--- a/web/packages/next/i18n.ts
+++ b/web/packages/next/i18n.ts
@@ -262,6 +262,21 @@ export const setLocaleInUse = async (locale: SupportedLocale) => {
return i18n.changeLanguage(locale);
};
+/**
+ * A no-op marker for strings that, for various reasons, pending addition to the
+ * translation dataset.
+ *
+ * This function does nothing, it just returns back the passed it string
+ * verbatim. It is only kept as a way for us to keep track of strings which
+ * we've not yet added to the list of strings that should be translated (e.g.
+ * perhaps we're awaiting feedback on the copy).
+ *
+ * It is the sibling of the {@link t} function provided by i18next.
+ *
+ * See also: {@link ut}.
+ */
+export const pt = (s: string) => s;
+
/**
* A no-op marker for strings that, for various reasons, are not translated.
*
@@ -271,5 +286,7 @@ export const setLocaleInUse = async (locale: SupportedLocale) => {
* still are user visible.
*
* It is the sibling of the {@link t} function provided by i18next.
+ *
+ * See also: {@link pt}.
*/
export const ut = (s: string) => s;