add language selection to the settings page

This commit is contained in:
daniel31x13 2024-05-28 17:10:25 -04:00
parent deb6ed7ec8
commit f921ecaa96
3 changed files with 26 additions and 1 deletions

View File

@ -5,6 +5,7 @@ import removeFile from "@/lib/api/storage/removeFile";
import createFile from "@/lib/api/storage/createFile"; import createFile from "@/lib/api/storage/createFile";
import createFolder from "@/lib/api/storage/createFolder"; import createFolder from "@/lib/api/storage/createFolder";
import sendChangeEmailVerificationRequest from "@/lib/api/sendChangeEmailVerificationRequest"; import sendChangeEmailVerificationRequest from "@/lib/api/sendChangeEmailVerificationRequest";
import { i18n } from "next-i18next.config";
const emailEnabled = const emailEnabled =
process.env.EMAIL_FROM && process.env.EMAIL_SERVER ? true : false; process.env.EMAIL_FROM && process.env.EMAIL_SERVER ? true : false;
@ -204,6 +205,7 @@ export default async function updateUserById(
collectionOrder: data.collectionOrder.filter( collectionOrder: data.collectionOrder.filter(
(value, index, self) => self.indexOf(value) === index (value, index, self) => self.indexOf(value) === index
), ),
locale: i18n.locales.includes(data.locale) ? data.locale : "en",
archiveAsScreenshot: data.archiveAsScreenshot, archiveAsScreenshot: data.archiveAsScreenshot,
archiveAsPDF: data.archiveAsPDF, archiveAsPDF: data.archiveAsPDF,
archiveAsWaybackMachine: data.archiveAsWaybackMachine, archiveAsWaybackMachine: data.archiveAsWaybackMachine,

View File

@ -24,7 +24,7 @@ const getServerSideProps: GetServerSideProps = async (ctx) => {
if (user) { if (user) {
return { return {
props: { props: {
...(await serverSideTranslations(user.locale, ["common"])), ...(await serverSideTranslations(user.locale ?? "en", ["common"])),
}, },
}; };
} }

View File

@ -14,6 +14,7 @@ import Checkbox from "@/components/Checkbox";
import { dropdownTriggerer } from "@/lib/client/utils"; import { dropdownTriggerer } from "@/lib/client/utils";
import EmailChangeVerificationModal from "@/components/ModalContent/EmailChangeVerificationModal"; import EmailChangeVerificationModal from "@/components/ModalContent/EmailChangeVerificationModal";
import Button from "@/components/ui/Button"; import Button from "@/components/ui/Button";
import { i18n } from "next-i18next.config";
const emailEnabled = process.env.NEXT_PUBLIC_EMAIL_PROVIDER; const emailEnabled = process.env.NEXT_PUBLIC_EMAIL_PROVIDER;
@ -200,6 +201,28 @@ export default function Account() {
/> />
</div> </div>
) : undefined} ) : undefined}
<div>
<p className="mb-2">Language</p>
<select
onChange={(e) => {
setUser({ ...user, locale: e.target.value });
}}
className="select border border-neutral-content focus:outline-none focus:border-primary duration-100 w-full bg-base-200 rounded-[0.375rem] min-h-0 h-[2.625rem] leading-4 p-2"
>
{i18n.locales.map((locale) => (
<option
key={locale}
value={locale}
selected={user.locale === locale}
>
{new Intl.DisplayNames(locale, { type: "language" }).of(
locale
) || ""}
</option>
))}
</select>
</div>
</div> </div>
<div className="sm:row-span-2 sm:justify-self-center my-3"> <div className="sm:row-span-2 sm:justify-self-center my-3">