Remove Discord and Google OAuth verification from CMS
- Remove Discord + Google OAuth providers from NextAuth config - Remove social login buttons (Discord/Google) from login form - Delete link-discord.ts action and discord-verify-form.tsx component - Simplify verify page to email-only verification flow - Remove connections settings page and its link from settings - Clean env.ts, .env, .env.example of Discord/Google client vars - Remove discordUrl social icon from register, login, and homepage - Clean translation files: remove continueWithDiscord, continueWithGoogle, connections keys
This commit is contained in:
1 parent
f7f6e09174
commit
7f8d083763
36 files changed
+34
-994
No files matched your search
@@ -47,12 +47,6 @@ RCON_PORT=3001
|
|||||||
# Falls back to NEXT_PUBLIC_APP_URL/imaging when only the app URL is set.
|
# Falls back to NEXT_PUBLIC_APP_URL/imaging when only the app URL is set.
|
||||||
# NEXT_PUBLIC_IMAGER_URL=https://epicnabbo.nl/imaging
|
# NEXT_PUBLIC_IMAGER_URL=https://epicnabbo.nl/imaging
|
||||||
|
|
||||||
# Optional OAuth (enabled when both id+secret are set)
|
|
||||||
DISCORD_CLIENT_ID=
|
|
||||||
DISCORD_CLIENT_SECRET=
|
|
||||||
GOOGLE_CLIENT_ID=
|
|
||||||
GOOGLE_CLIENT_SECRET=
|
|
||||||
|
|
||||||
# Preferred email provider (HTTP API). Used before SMTP when set.
|
# Preferred email provider (HTTP API). Used before SMTP when set.
|
||||||
RESEND_API_KEY=
|
RESEND_API_KEY=
|
||||||
|
|
||||||
|
|||||||
@@ -1,66 +0,0 @@
|
|||||||
"use server";
|
|
||||||
|
|
||||||
import { auth } from "@/lib/auth";
|
|
||||||
import { logger } from "@/lib/logger";
|
|
||||||
import { prisma } from "@/lib/prisma";
|
|
||||||
|
|
||||||
export async function linkDiscordId(discordId: string): Promise<string | null> {
|
|
||||||
const session = await auth();
|
|
||||||
if (!session?.user?.id) return "Not logged in";
|
|
||||||
|
|
||||||
const userId = Number(session.user.id);
|
|
||||||
if (!discordId || !/^\d{17,20}$/.test(discordId.trim())) {
|
|
||||||
return "Invalid Discord ID format";
|
|
||||||
}
|
|
||||||
|
|
||||||
const discordIdClean = discordId.trim();
|
|
||||||
|
|
||||||
try {
|
|
||||||
const existing = await prisma.socialAccounts.findUnique({
|
|
||||||
where: {
|
|
||||||
provider_providerId: {
|
|
||||||
provider: "discord",
|
|
||||||
providerId: discordIdClean,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
select: { userId: true },
|
|
||||||
});
|
|
||||||
if (existing && Number(existing.userId) !== userId) {
|
|
||||||
return "This Discord ID is already linked to another account";
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
return "Failed to check Discord ID";
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
await prisma.socialAccounts.upsert({
|
|
||||||
where: {
|
|
||||||
provider_providerId: {
|
|
||||||
provider: "discord",
|
|
||||||
providerId: discordIdClean,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
create: {
|
|
||||||
userId: BigInt(userId),
|
|
||||||
provider: "discord",
|
|
||||||
providerId: discordIdClean,
|
|
||||||
createdAt: new Date(),
|
|
||||||
updatedAt: new Date(),
|
|
||||||
},
|
|
||||||
update: { userId: BigInt(userId), updatedAt: new Date() },
|
|
||||||
});
|
|
||||||
|
|
||||||
await prisma.user.update({
|
|
||||||
where: { id: userId },
|
|
||||||
data: { mailVerified: "1" },
|
|
||||||
});
|
|
||||||
|
|
||||||
return null;
|
|
||||||
} catch (e) {
|
|
||||||
logger.error("Failed to link Discord account", {
|
|
||||||
module: "link-discord",
|
|
||||||
error: (e as Error).message,
|
|
||||||
});
|
|
||||||
return "Failed to link Discord account";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -129,11 +129,5 @@ export async function register(
|
|||||||
return "Could not create the account (is the username unique?)";
|
return "Could not create the account (is the username unique?)";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasEmail) {
|
redirect("/login?registered=1");
|
||||||
redirect("/login?registered=1");
|
|
||||||
} else {
|
|
||||||
const { signIn } = await import("@/lib/auth");
|
|
||||||
await signIn("credentials", { username, password, redirect: false });
|
|
||||||
redirect("/verify?method=discord");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -73,11 +73,7 @@ export default async function LoginPage() {
|
|||||||
<div className="flex items-center gap-1.5 rounded-lg px-2 py-1" style={{
|
<div className="flex items-center gap-1.5 rounded-lg px-2 py-1" style={{
|
||||||
background: "color-mix(in srgb, var(--color-text-muted) 4%, transparent)",
|
background: "color-mix(in srgb, var(--color-text-muted) 4%, transparent)",
|
||||||
}}>
|
}}>
|
||||||
{discordUrl && (
|
|
||||||
<Link href={discordUrl} target="_blank" rel="noopener noreferrer" className="p-1.5 rounded-lg transition-all duration-200 hover:scale-110 hover:brightness-125" style={{ background: "color-mix(in srgb, #5865F2 12%, transparent)" }}>
|
|
||||||
<Image src="/assets/images/icons/discord.png" alt="Discord" width={18} height={18} unoptimized />
|
|
||||||
</Link>
|
|
||||||
)}
|
|
||||||
<LanguageSwitcher />
|
<LanguageSwitcher />
|
||||||
<div className="w-px h-5" style={{ background: "color-mix(in srgb, var(--color-text-muted) 12%, transparent)" }} />
|
<div className="w-px h-5" style={{ background: "color-mix(in srgb, var(--color-text-muted) 12%, transparent)" }} />
|
||||||
<Clock />
|
<Clock />
|
||||||
|
|||||||
@@ -99,11 +99,7 @@ export default async function Home() {
|
|||||||
<div className="flex items-center gap-1.5 rounded-lg px-2 py-1" style={{
|
<div className="flex items-center gap-1.5 rounded-lg px-2 py-1" style={{
|
||||||
background: "color-mix(in srgb, var(--color-text-muted) 4%, transparent)",
|
background: "color-mix(in srgb, var(--color-text-muted) 4%, transparent)",
|
||||||
}}>
|
}}>
|
||||||
{discordUrl && (
|
|
||||||
<Link href={discordUrl} target="_blank" rel="noopener noreferrer" className="p-1.5 rounded-lg transition-all duration-200 hover:scale-110 hover:brightness-125" style={{ background: "color-mix(in srgb, #5865F2 12%, transparent)" }}>
|
|
||||||
<Image src="/assets/images/icons/discord.png" alt="Discord" width={18} height={18} unoptimized />
|
|
||||||
</Link>
|
|
||||||
)}
|
|
||||||
<LanguageSwitcher />
|
<LanguageSwitcher />
|
||||||
<div className="w-px h-5" style={{ background: "color-mix(in srgb, var(--color-text-muted) 12%, transparent)" }} />
|
<div className="w-px h-5" style={{ background: "color-mix(in srgb, var(--color-text-muted) 12%, transparent)" }} />
|
||||||
<Clock />
|
<Clock />
|
||||||
|
|||||||
@@ -73,11 +73,7 @@ export default async function RegisterPage() {
|
|||||||
<div className="flex items-center gap-1.5 rounded-lg px-2 py-1" style={{
|
<div className="flex items-center gap-1.5 rounded-lg px-2 py-1" style={{
|
||||||
background: "color-mix(in srgb, var(--color-text-muted) 4%, transparent)",
|
background: "color-mix(in srgb, var(--color-text-muted) 4%, transparent)",
|
||||||
}}>
|
}}>
|
||||||
{discordUrl && (
|
|
||||||
<Link href={discordUrl} target="_blank" rel="noopener noreferrer" className="p-1.5 rounded-lg transition-all duration-200 hover:scale-110 hover:brightness-125" style={{ background: "color-mix(in srgb, #5865F2 12%, transparent)" }}>
|
|
||||||
<Image src="/assets/images/icons/discord.png" alt="Discord" width={18} height={18} unoptimized />
|
|
||||||
</Link>
|
|
||||||
)}
|
|
||||||
<LanguageSwitcher />
|
<LanguageSwitcher />
|
||||||
<div className="w-px h-5" style={{ background: "color-mix(in srgb, var(--color-text-muted) 12%, transparent)" }} />
|
<div className="w-px h-5" style={{ background: "color-mix(in srgb, var(--color-text-muted) 12%, transparent)" }} />
|
||||||
<Clock />
|
<Clock />
|
||||||
|
|||||||
@@ -1,137 +0,0 @@
|
|||||||
import Link from "next/link";
|
|
||||||
import { redirect } from "next/navigation";
|
|
||||||
import { getTranslations } from "next-intl/server";
|
|
||||||
import { ContentCard } from "@/components/public/ui";
|
|
||||||
import { env } from "@/env";
|
|
||||||
import { auth } from "@/lib/auth";
|
|
||||||
import { prisma } from "@/lib/prisma";
|
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
|
||||||
|
|
||||||
// Social providers we can link. `available` reflects whether the OAuth app
|
|
||||||
// credentials are configured (mirrors src/lib/auth.ts, which only registers a
|
|
||||||
// provider when both its id + secret env vars are set). When unavailable the
|
|
||||||
// connect button is disabled so we don't bounce the user to a 404 sign-in URL.
|
|
||||||
const PROVIDERS = [
|
|
||||||
{
|
|
||||||
key: "discord",
|
|
||||||
label: "Discord",
|
|
||||||
icon: "🎮",
|
|
||||||
available: Boolean(env.DISCORD_CLIENT_ID && env.DISCORD_CLIENT_SECRET),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: "google",
|
|
||||||
label: "Google",
|
|
||||||
icon: "🔵",
|
|
||||||
available: Boolean(env.GOOGLE_CLIENT_ID && env.GOOGLE_CLIENT_SECRET),
|
|
||||||
},
|
|
||||||
] as const;
|
|
||||||
|
|
||||||
export default async function ConnectionsPage() {
|
|
||||||
const t = await getTranslations("pages.connections");
|
|
||||||
const session = await auth();
|
|
||||||
if (!session?.user?.id) redirect("/login");
|
|
||||||
|
|
||||||
const id = Number(session.user.id);
|
|
||||||
|
|
||||||
// social_accounts is a CMS-only table that may not exist in every install
|
|
||||||
// (it has no bundled migration). Fall back to "nothing linked" on any error so
|
|
||||||
// the page still renders the generic connect buttons.
|
|
||||||
let linked: Set<string> = new Set();
|
|
||||||
let lookupFailed = false;
|
|
||||||
try {
|
|
||||||
const rows = await prisma.socialAccounts.findMany({
|
|
||||||
where: { userId: BigInt(id) },
|
|
||||||
select: { provider: true },
|
|
||||||
});
|
|
||||||
linked = new Set(rows.map((r) => r.provider.toLowerCase()));
|
|
||||||
} catch {
|
|
||||||
lookupFailed = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// After connecting/erroring, NextAuth bounces back here so we land on a known page.
|
|
||||||
const callbackUrl = "/settings/connections";
|
|
||||||
|
|
||||||
return (
|
|
||||||
<main
|
|
||||||
style={{
|
|
||||||
display: "grid",
|
|
||||||
gap: "1.5rem",
|
|
||||||
maxWidth: 620,
|
|
||||||
margin: "0 auto",
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<p className="muted" style={{ margin: 0 }}>
|
|
||||||
<Link href="/settings">{t("backToSettings")}</Link>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<ContentCard icon="🔗" title={t("title")} subtitle={t("subtitle")}>
|
|
||||||
<p className="muted" style={{ marginTop: 0 }}>
|
|
||||||
{t("matchByEmail")} <strong>{session.user.name}</strong>.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
{lookupFailed ? (
|
|
||||||
<p className="muted" style={{ marginBottom: 0 }}>
|
|
||||||
{t("lookupFailed")}
|
|
||||||
</p>
|
|
||||||
) : null}
|
|
||||||
</ContentCard>
|
|
||||||
|
|
||||||
<div className="card-grid sm-2">
|
|
||||||
{PROVIDERS.map((p) => {
|
|
||||||
const isLinked = linked.has(p.key);
|
|
||||||
return (
|
|
||||||
<ContentCard
|
|
||||||
key={p.key}
|
|
||||||
icon={p.icon}
|
|
||||||
title={p.label}
|
|
||||||
subtitle={
|
|
||||||
!p.available
|
|
||||||
? t("statusUnavailable")
|
|
||||||
: isLinked
|
|
||||||
? t("statusConnected")
|
|
||||||
: t("statusNotConnected")
|
|
||||||
}
|
|
||||||
>
|
|
||||||
{isLinked ? (
|
|
||||||
<span
|
|
||||||
className="btn btn-outline"
|
|
||||||
style={{ cursor: "default", pointerEvents: "none" }}
|
|
||||||
aria-disabled="true"
|
|
||||||
>
|
|
||||||
{t("connected")}
|
|
||||||
</span>
|
|
||||||
) : p.available ? (
|
|
||||||
// Plain link into NextAuth's built-in sign-in handler. Re-using
|
|
||||||
// the same OAuth flow as /login binds the provider to the
|
|
||||||
// matching hotel account (see auth.ts signIn callback).
|
|
||||||
<a
|
|
||||||
className="btn btn-primary"
|
|
||||||
href={`/api/auth/signin/${p.key}?callbackUrl=${encodeURIComponent(callbackUrl)}`}
|
|
||||||
>
|
|
||||||
{t("connectProvider", { provider: p.label })}
|
|
||||||
</a>
|
|
||||||
) : (
|
|
||||||
<span
|
|
||||||
className="btn"
|
|
||||||
style={{
|
|
||||||
cursor: "not-allowed",
|
|
||||||
opacity: 0.55,
|
|
||||||
pointerEvents: "none",
|
|
||||||
}}
|
|
||||||
aria-disabled="true"
|
|
||||||
>
|
|
||||||
{t("unavailable")}
|
|
||||||
</span>
|
|
||||||
)}
|
|
||||||
</ContentCard>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p className="muted" style={{ margin: 0 }}>
|
|
||||||
{t("footerNote")}
|
|
||||||
</p>
|
|
||||||
</main>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -127,19 +127,7 @@ export default async function SettingsPage() {
|
|||||||
</Link>
|
</Link>
|
||||||
</ContentCard>
|
</ContentCard>
|
||||||
|
|
||||||
<ContentCard
|
</div>
|
||||||
icon="🔗"
|
|
||||||
title={t("connectionsTitle")}
|
|
||||||
subtitle={t("connectionsSubtitle")}
|
|
||||||
>
|
|
||||||
<p className="muted" style={{ marginTop: 0 }}>
|
|
||||||
{t("connectionsDescription")}
|
|
||||||
</p>
|
|
||||||
<Link href="/settings/connections" className="btn btn-outline">
|
|
||||||
{t("manageConnections")}
|
|
||||||
</Link>
|
|
||||||
</ContentCard>
|
|
||||||
</div>
|
|
||||||
</main>
|
</main>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1,14 +1,12 @@
|
|||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { getTranslations } from "next-intl/server";
|
import { getTranslations } from "next-intl/server";
|
||||||
import { isValidVerificationToken } from "@/actions/email-verify";
|
import { isValidVerificationToken } from "@/actions/email-verify";
|
||||||
import { DiscordVerifyForm } from "@/components/auth/discord-verify-form";
|
|
||||||
import { ContentCard, EmptyState } from "@/components/public/ui";
|
import { ContentCard, EmptyState } from "@/components/public/ui";
|
||||||
import { auth } from "@/lib/auth";
|
|
||||||
import { prisma } from "@/lib/prisma";
|
import { prisma } from "@/lib/prisma";
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
export const dynamic = "force-dynamic";
|
||||||
|
|
||||||
type Status = "verified" | "already" | "invalid" | "unavailable" | "discord";
|
type Status = "verified" | "already" | "invalid" | "unavailable";
|
||||||
|
|
||||||
export default async function VerifyPage({
|
export default async function VerifyPage({
|
||||||
searchParams,
|
searchParams,
|
||||||
@@ -16,36 +14,15 @@ export default async function VerifyPage({
|
|||||||
searchParams: Promise<{
|
searchParams: Promise<{
|
||||||
token?: string;
|
token?: string;
|
||||||
email?: string;
|
email?: string;
|
||||||
method?: string;
|
|
||||||
linked?: string;
|
|
||||||
}>;
|
}>;
|
||||||
}) {
|
}) {
|
||||||
const t = await getTranslations("pages.verify");
|
const t = await getTranslations("pages.verify");
|
||||||
const {
|
const { token = "", email = "" } = await searchParams;
|
||||||
token = "",
|
|
||||||
email = "",
|
|
||||||
method = "",
|
|
||||||
linked = "",
|
|
||||||
} = await searchParams;
|
|
||||||
const normalisedEmail = email.trim().toLowerCase();
|
const normalisedEmail = email.trim().toLowerCase();
|
||||||
|
|
||||||
let status: Status = "invalid";
|
let status: Status = "invalid";
|
||||||
let discordAlreadyLinked = false;
|
|
||||||
|
|
||||||
if (method === "discord" || linked === "1") {
|
if (normalisedEmail && token) {
|
||||||
status = "discord";
|
|
||||||
const session = await auth();
|
|
||||||
if (session?.user?.id) {
|
|
||||||
const userId = Number(session.user.id);
|
|
||||||
try {
|
|
||||||
const linkedRow = await prisma.socialAccounts.findFirst({
|
|
||||||
where: { userId: BigInt(userId), provider: "discord" },
|
|
||||||
select: { id: true },
|
|
||||||
});
|
|
||||||
discordAlreadyLinked = !!linkedRow;
|
|
||||||
} catch {}
|
|
||||||
}
|
|
||||||
} else if (normalisedEmail && token) {
|
|
||||||
const ok = await isValidVerificationToken(normalisedEmail, token);
|
const ok = await isValidVerificationToken(normalisedEmail, token);
|
||||||
if (ok) {
|
if (ok) {
|
||||||
try {
|
try {
|
||||||
@@ -128,44 +105,6 @@ export default async function VerifyPage({
|
|||||||
</div>
|
</div>
|
||||||
</ContentCard>
|
</ContentCard>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{status === "discord" && (
|
|
||||||
<ContentCard
|
|
||||||
icon="🎮"
|
|
||||||
title="Verifieer via Discord"
|
|
||||||
subtitle="Koppel je Discord account"
|
|
||||||
>
|
|
||||||
{linked === "1" && (
|
|
||||||
<div
|
|
||||||
className="rounded-md p-4 text-center mb-4"
|
|
||||||
style={{ backgroundColor: "#14532d", color: "white" }}
|
|
||||||
>
|
|
||||||
<p className="text-lg font-bold mb-1">Gelinkt!</p>
|
|
||||||
<p className="text-sm opacity-90">
|
|
||||||
Je Discord account is gekoppeld. Je kunt nu verder.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
{discordAlreadyLinked ? (
|
|
||||||
<div
|
|
||||||
className="rounded-md p-4 text-center"
|
|
||||||
style={{ backgroundColor: "#14532d", color: "white" }}
|
|
||||||
>
|
|
||||||
<p className="text-lg font-bold mb-1">Al geverifieerd!</p>
|
|
||||||
<p className="text-sm opacity-90">
|
|
||||||
Je Discord account is al gekoppeld aan dit account.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
) : (
|
|
||||||
<DiscordVerifyForm />
|
|
||||||
)}
|
|
||||||
<div style={{ textAlign: "center", marginTop: "1rem" }}>
|
|
||||||
<Link href="/" className="btn btn-primary">
|
|
||||||
Naar home
|
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
</ContentCard>
|
|
||||||
)}
|
|
||||||
</main>
|
</main>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1,94 +0,0 @@
|
|||||||
"use client";
|
|
||||||
|
|
||||||
import { useState } from "react";
|
|
||||||
import { linkDiscordId } from "@/actions/link-discord";
|
|
||||||
|
|
||||||
export function DiscordVerifyForm() {
|
|
||||||
const [discordId, setDiscordId] = useState("");
|
|
||||||
const [error, setError] = useState<string | null>(null);
|
|
||||||
const [isPending, setIsPending] = useState(false);
|
|
||||||
const [success, setSuccess] = useState(false);
|
|
||||||
|
|
||||||
async function handleSubmit(e: React.FormEvent) {
|
|
||||||
e.preventDefault();
|
|
||||||
setError(null);
|
|
||||||
setSuccess(false);
|
|
||||||
setIsPending(true);
|
|
||||||
try {
|
|
||||||
const result = await linkDiscordId(discordId);
|
|
||||||
if (result === null) {
|
|
||||||
setSuccess(true);
|
|
||||||
} else {
|
|
||||||
setError(result);
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
setError("Er is een fout opgetreden");
|
|
||||||
} finally {
|
|
||||||
setIsPending(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (success) {
|
|
||||||
return (
|
|
||||||
<div
|
|
||||||
className="rounded-md p-4 text-center"
|
|
||||||
style={{ backgroundColor: "#14532d", color: "white" }}
|
|
||||||
>
|
|
||||||
<p className="text-lg font-bold mb-1">Geverifieerd!</p>
|
|
||||||
<p className="text-sm opacity-90">
|
|
||||||
Je Discord account is gekoppeld en je account is geverifieerd.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<form onSubmit={handleSubmit} className="flex flex-col gap-3">
|
|
||||||
{error && (
|
|
||||||
<div
|
|
||||||
className="p-3 rounded-md text-sm"
|
|
||||||
style={{ backgroundColor: "#ef4444", color: "white" }}
|
|
||||||
>
|
|
||||||
{error}
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
<p
|
|
||||||
className="text-sm"
|
|
||||||
style={{
|
|
||||||
color: "var(--color-text-muted-readable, var(--color-text-muted))",
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
Open Discord, ga naar{" "}
|
|
||||||
<strong>Instellingen → Geavanceerd → Ontwikkelaarsmodus</strong> (aan).
|
|
||||||
Klik met rechts op je eigen naam en kies <strong>ID kopiëren</strong>.
|
|
||||||
Plak dat hier:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<div className="flex gap-2">
|
|
||||||
<input
|
|
||||||
type="text"
|
|
||||||
placeholder="Plak je Discord ID hier"
|
|
||||||
value={discordId}
|
|
||||||
onChange={(e) => setDiscordId(e.target.value)}
|
|
||||||
className="flex-1 focus:ring-0 border-4 rounded text-sm px-3 py-2"
|
|
||||||
style={{
|
|
||||||
backgroundColor: "var(--color-background)",
|
|
||||||
color: "var(--color-text-readable, var(--color-text))",
|
|
||||||
borderColor:
|
|
||||||
"color-mix(in srgb, var(--color-text-muted) 25%, transparent)",
|
|
||||||
}}
|
|
||||||
required
|
|
||||||
/>
|
|
||||||
<button
|
|
||||||
type="submit"
|
|
||||||
disabled={isPending}
|
|
||||||
className="rounded px-4 py-2 text-white font-semibold whitespace-nowrap"
|
|
||||||
style={{ backgroundColor: "#5865F2", border: "2px solid #7983F5" }}
|
|
||||||
>
|
|
||||||
{isPending ? "Bezig..." : "Verifiëren"}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -167,52 +167,7 @@ export function LoginForm({
|
|||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
{!needs2fa && (
|
|
||||||
<>
|
|
||||||
<div className="flex items-center gap-3 my-5">
|
|
||||||
<span className="flex-1 h-px" style={{ background: "color-mix(in srgb, var(--color-text-muted) 15%, transparent)" }} />
|
|
||||||
<span className="text-xs font-bold uppercase tracking-widest" style={{ color: "var(--color-text-muted)" }}>
|
|
||||||
{t("or")}
|
|
||||||
</span>
|
|
||||||
<span className="flex-1 h-px" style={{ background: "color-mix(in srgb, var(--color-text-muted) 15%, transparent)" }} />
|
|
||||||
</div>
|
|
||||||
<div className="flex flex-col gap-3">
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
onClick={() => signIn("discord", { callbackUrl: "/" })}
|
|
||||||
className="w-full rounded-xl font-bold text-sm py-3 transition-all hover:scale-[1.02] active:scale-95 flex items-center justify-center gap-2.5"
|
|
||||||
style={{
|
|
||||||
background: "#5865F2",
|
|
||||||
color: "#ffffff",
|
|
||||||
border: "none",
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor">
|
|
||||||
<path d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028 14.09 14.09 0 0 0 1.226-1.994.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.095 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.095 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z"/>
|
|
||||||
</svg>
|
|
||||||
{t("continueWithDiscord")}
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
onClick={() => signIn("google", { callbackUrl: "/" })}
|
|
||||||
className="w-full rounded-xl font-bold text-sm py-3 transition-all hover:scale-[1.02] active:scale-95 flex items-center justify-center gap-2.5 border-2"
|
|
||||||
style={{
|
|
||||||
borderColor: "color-mix(in srgb, var(--color-text-muted) 20%, transparent)",
|
|
||||||
color: "var(--color-text-readable)",
|
|
||||||
background: "transparent",
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<svg width="18" height="18" viewBox="0 0 24 24" fill="none">
|
|
||||||
<path d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z" fill="#4285F4"/>
|
|
||||||
<path d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z" fill="#34A853"/>
|
|
||||||
<path d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z" fill="#FBBC05"/>
|
|
||||||
<path d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z" fill="#EA4335"/>
|
|
||||||
</svg>
|
|
||||||
{t("continueWithGoogle")}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
|
|
||||||
<p
|
<p
|
||||||
className="text-xs text-center mt-6"
|
className="text-xs text-center mt-6"
|
||||||
|
|||||||
@@ -166,12 +166,7 @@ export function RegisterForm({
|
|||||||
borderColor: "color-mix(in srgb, var(--color-text-muted) 25%, transparent)",
|
borderColor: "color-mix(in srgb, var(--color-text-muted) 25%, transparent)",
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<p
|
|
||||||
className="text-xs mt-1"
|
|
||||||
style={{ color: "var(--color-text-muted)" }}
|
|
||||||
>
|
|
||||||
Geen e-mail? Je kunt later via Discord verifiëren.
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
+1
-5
@@ -39,11 +39,7 @@ const schema = z.object({
|
|||||||
AUTH_SECRET: z.string().min(1).optional(),
|
AUTH_SECRET: z.string().min(1).optional(),
|
||||||
// Laravel APP_KEY (base64:...) — needed to read existing 2FA secrets.
|
// Laravel APP_KEY (base64:...) — needed to read existing 2FA secrets.
|
||||||
APP_KEY: z.string().optional(),
|
APP_KEY: z.string().optional(),
|
||||||
// Optional OAuth providers (enabled only when both id+secret are set).
|
|
||||||
DISCORD_CLIENT_ID: z.string().optional(),
|
|
||||||
DISCORD_CLIENT_SECRET: z.string().optional(),
|
|
||||||
GOOGLE_CLIENT_ID: z.string().optional(),
|
|
||||||
GOOGLE_CLIENT_SECRET: z.string().optional(),
|
|
||||||
// Mirrors Laravel config('habbo.site.convert_passwords') — enables md5->argon2id.
|
// Mirrors Laravel config('habbo.site.convert_passwords') — enables md5->argon2id.
|
||||||
CONVERT_PASSWORDS: z
|
CONVERT_PASSWORDS: z
|
||||||
.string()
|
.string()
|
||||||
|
|||||||
+1
-133
@@ -1,7 +1,5 @@
|
|||||||
import NextAuth from "next-auth";
|
import NextAuth from "next-auth";
|
||||||
import Credentials from "next-auth/providers/credentials";
|
import Credentials from "next-auth/providers/credentials";
|
||||||
import Discord from "next-auth/providers/discord";
|
|
||||||
import Google from "next-auth/providers/google";
|
|
||||||
import { env } from "@/env";
|
import { env } from "@/env";
|
||||||
import { LaravelEncrypter } from "@/lib/auth/laravel-encrypter";
|
import { LaravelEncrypter } from "@/lib/auth/laravel-encrypter";
|
||||||
import { getCachedJwtVersion } from "@/lib/auth/jwt-version-cache";
|
import { getCachedJwtVersion } from "@/lib/auth/jwt-version-cache";
|
||||||
@@ -144,67 +142,8 @@ export const { handlers, signIn, signOut, auth } = NextAuth({
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
// OAuth providers — enabled only when both id + secret are configured.
|
|
||||||
...(env.DISCORD_CLIENT_ID && env.DISCORD_CLIENT_SECRET
|
|
||||||
? [
|
|
||||||
Discord({
|
|
||||||
clientId: env.DISCORD_CLIENT_ID,
|
|
||||||
clientSecret: env.DISCORD_CLIENT_SECRET,
|
|
||||||
}),
|
|
||||||
]
|
|
||||||
: []),
|
|
||||||
...(env.GOOGLE_CLIENT_ID && env.GOOGLE_CLIENT_SECRET
|
|
||||||
? [
|
|
||||||
Google({
|
|
||||||
clientId: env.GOOGLE_CLIENT_ID,
|
|
||||||
clientSecret: env.GOOGLE_CLIENT_SECRET,
|
|
||||||
}),
|
|
||||||
]
|
|
||||||
: []),
|
|
||||||
],
|
],
|
||||||
callbacks: {
|
callbacks: {
|
||||||
async signIn({ user, account }) {
|
|
||||||
if (account?.provider === "credentials") return true;
|
|
||||||
|
|
||||||
const requireLink = await siteSettings.getBool(
|
|
||||||
"oauth_require_link",
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
|
|
||||||
// Always allow explicitly linked accounts.
|
|
||||||
if (account?.provider === "discord" && account.providerAccountId) {
|
|
||||||
try {
|
|
||||||
const linked = await prisma.socialAccounts.findUnique({
|
|
||||||
where: {
|
|
||||||
provider_providerId: {
|
|
||||||
provider: "discord",
|
|
||||||
providerId: account.providerAccountId,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
select: { userId: true },
|
|
||||||
});
|
|
||||||
if (linked) return true;
|
|
||||||
} catch {
|
|
||||||
return "/login?error=Unavailable";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Email-based binding: only allowed when oauth_require_link is disabled
|
|
||||||
// AND the matched account does NOT have 2FA enabled (account takeover guard).
|
|
||||||
if (!requireLink && user.email) {
|
|
||||||
try {
|
|
||||||
const dbUser = await prisma.user.findFirst({
|
|
||||||
where: { mail: user.email, twoFactorConfirmedAt: null },
|
|
||||||
select: { id: true },
|
|
||||||
});
|
|
||||||
if (dbUser) return true;
|
|
||||||
} catch {
|
|
||||||
return "/login?error=Unavailable";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return "/login?error=NoAccount";
|
|
||||||
},
|
|
||||||
async jwt({ token, user, account }) {
|
async jwt({ token, user, account }) {
|
||||||
if (user) {
|
if (user) {
|
||||||
token.jwtVersion =
|
token.jwtVersion =
|
||||||
@@ -216,81 +155,10 @@ export const { handlers, signIn, signOut, auth } = NextAuth({
|
|||||||
|
|
||||||
if (user && account?.provider === "credentials") {
|
if (user && account?.provider === "credentials") {
|
||||||
token.rank = (user as { rank?: number }).rank;
|
token.rank = (user as { rank?: number }).rank;
|
||||||
|
token.sub = String((user as { id?: string }).id);
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
|
|
||||||
// OAuth account linking only when establishing a session — not on
|
|
||||||
// every subsequent request (avoids siteSettings + DB on each hit).
|
|
||||||
if (user || account) {
|
|
||||||
const requireLink = await siteSettings.getBool(
|
|
||||||
"oauth_require_link",
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
|
|
||||||
// Try Discord ID via SocialAccounts (always allowed, even when requireLink is true).
|
|
||||||
if (
|
|
||||||
!token.sub &&
|
|
||||||
account?.provider === "discord" &&
|
|
||||||
account.providerAccountId
|
|
||||||
) {
|
|
||||||
try {
|
|
||||||
const linked = await prisma.socialAccounts.findUnique({
|
|
||||||
where: {
|
|
||||||
provider_providerId: {
|
|
||||||
provider: "discord",
|
|
||||||
providerId: account.providerAccountId,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
if (linked) {
|
|
||||||
const dbUser = await prisma.user.findUnique({
|
|
||||||
where: { id: Number(linked.userId) },
|
|
||||||
select: {
|
|
||||||
id: true,
|
|
||||||
rank: true,
|
|
||||||
username: true,
|
|
||||||
websiteJwtVersion: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
if (dbUser) {
|
|
||||||
token.sub = String(dbUser.id);
|
|
||||||
token.rank = dbUser.rank;
|
|
||||||
token.name = dbUser.username;
|
|
||||||
token.jwtVersion = dbUser.websiteJwtVersion;
|
|
||||||
token.jwtCheckedAt = Date.now();
|
|
||||||
return token;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
// leave token as-is on lookup failure
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Email-based binding: only when requireLink is off AND account has no 2FA.
|
|
||||||
if (!requireLink && user?.email && !token.sub) {
|
|
||||||
try {
|
|
||||||
const dbUser = await prisma.user.findFirst({
|
|
||||||
where: { mail: user.email, twoFactorConfirmedAt: null },
|
|
||||||
select: {
|
|
||||||
id: true,
|
|
||||||
rank: true,
|
|
||||||
username: true,
|
|
||||||
websiteJwtVersion: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
if (dbUser) {
|
|
||||||
token.sub = String(dbUser.id);
|
|
||||||
token.rank = dbUser.rank;
|
|
||||||
token.name = dbUser.username;
|
|
||||||
token.jwtVersion = dbUser.websiteJwtVersion;
|
|
||||||
token.jwtCheckedAt = Date.now();
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
// leave token as-is on lookup failure
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Re-check jwt version at most once per minute (memory/Redis cached).
|
// Re-check jwt version at most once per minute (memory/Redis cached).
|
||||||
if (token.sub && !token.invalid) {
|
if (token.sub && !token.invalid) {
|
||||||
const lastCheck =
|
const lastCheck =
|
||||||
|
|||||||
+1
-18
@@ -708,12 +708,7 @@
|
|||||||
"securityTitle": "сигурност",
|
"securityTitle": "сигурност",
|
||||||
"securitySubtitle": "Двуфакторна автентификация",
|
"securitySubtitle": "Двуфакторна автентификация",
|
||||||
"securityDescription": "Добавете втори слой на защита към вашия акаунт.",
|
"securityDescription": "Добавете втори слой на защита към вашия акаунт.",
|
||||||
"twoFactorLink": "Двуфакторна автентификация",
|
"twoFactorLink": "Двуфакторна автентификация"},
|
||||||
"connectionsTitle": "Свързани акаунти",
|
|
||||||
"connectionsSubtitle": "Влезте с едно кликване",
|
|
||||||
"connectionsDescription": "Свържете Discord или Google с хотелския си акаунт.",
|
|
||||||
"manageConnections": "Управление на връзките"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Настройки",
|
"backToSettings": "← Настройки",
|
||||||
"title": "Двуфакторна автентификация",
|
"title": "Двуфакторна автентификация",
|
||||||
@@ -735,20 +730,10 @@
|
|||||||
"enableIntro": "Добавете втори слой на сигурност с приложение за удостоверяване.",
|
"enableIntro": "Добавете втори слой на сигурност с приложение за удостоверяване.",
|
||||||
"enable": "Активирайте 2FA"
|
"enable": "Активирайте 2FA"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Настройки",
|
|
||||||
"title": "Свързани акаунти",
|
"title": "Свързани акаунти",
|
||||||
"subtitle": "Свържете социален акаунт, за да можете да влезете с едно щракване",
|
"subtitle": "Свържете социален акаунт, за да можете да влезете с едно щракване",
|
||||||
"matchByEmail": "Свързваме го с вашия хотелски акаунт по имейл, така че използвайте посочения адрес:",
|
|
||||||
"lookupFailed": "В момента не можахме да прочетем свързаните ви акаунти. Все още можете да се свържете по-долу — състоянието ви ще се покаже, след като стане налично.",
|
|
||||||
"statusUnavailable": "Не се предлага в този хотел.",
|
|
||||||
"statusConnected": "Свързан — влезте с този акаунт.",
|
|
||||||
"statusNotConnected": "Не е свързан.",
|
|
||||||
"connected": "Свързан",
|
"connected": "Свързан",
|
||||||
"connectProvider": "Свържете {provider}",
|
|
||||||
"unavailable": "Недостъпен",
|
"unavailable": "Недостъпен",
|
||||||
"footerNote": "Свързването ви отвежда до доставчика за упълномощаване и след това обратно тук. Ако имейлът на вашия социален акаунт не съвпада с хотелски акаунт, ще бъдете върнати на екрана за вход с бележка."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "влезте",
|
"title": "влезте",
|
||||||
"subtitle": "Добре дошли отново — влезте, за да влезете в хотела.",
|
"subtitle": "Добре дошли отново — влезте, за да влезете в хотела.",
|
||||||
@@ -760,8 +745,6 @@
|
|||||||
"verify": "Проверете",
|
"verify": "Проверете",
|
||||||
"signIn": "влезте",
|
"signIn": "влезте",
|
||||||
"or": "или",
|
"or": "или",
|
||||||
"continueWithDiscord": "Продължете с Discord",
|
|
||||||
"continueWithGoogle": "Продължете с Google",
|
|
||||||
"noAccount": "Нямате акаунт?",
|
"noAccount": "Нямате акаунт?",
|
||||||
"createOne": "Създайте такъв",
|
"createOne": "Създайте такъв",
|
||||||
"forgotPassword": "Забравена парола?",
|
"forgotPassword": "Забравена парола?",
|
||||||
|
|||||||
+1
-18
@@ -708,12 +708,7 @@
|
|||||||
"securityTitle": "Bezpečnost",
|
"securityTitle": "Bezpečnost",
|
||||||
"securitySubtitle": "Dvoufaktorová autentizace",
|
"securitySubtitle": "Dvoufaktorová autentizace",
|
||||||
"securityDescription": "Přidejte do svého účtu druhou vrstvu ochrany.",
|
"securityDescription": "Přidejte do svého účtu druhou vrstvu ochrany.",
|
||||||
"twoFactorLink": "Dvoufaktorová autentizace",
|
"twoFactorLink": "Dvoufaktorová autentizace"},
|
||||||
"connectionsTitle": "Propojené účty",
|
|
||||||
"connectionsSubtitle": "Přihlaste se jedním kliknutím",
|
|
||||||
"connectionsDescription": "Propojte Discord nebo Google se svým hotelovým účtem.",
|
|
||||||
"manageConnections": "Správa připojení"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Nastavení",
|
"backToSettings": "← Nastavení",
|
||||||
"title": "Dvoufaktorová autentizace",
|
"title": "Dvoufaktorová autentizace",
|
||||||
@@ -735,20 +730,10 @@
|
|||||||
"enableIntro": "Přidejte druhou vrstvu zabezpečení pomocí ověřovací aplikace.",
|
"enableIntro": "Přidejte druhou vrstvu zabezpečení pomocí ověřovací aplikace.",
|
||||||
"enable": "Povolit 2FA"
|
"enable": "Povolit 2FA"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Nastavení",
|
|
||||||
"title": "Propojené účty",
|
"title": "Propojené účty",
|
||||||
"subtitle": "Propojte sociální účet, abyste se mohli přihlásit jedním kliknutím",
|
"subtitle": "Propojte sociální účet, abyste se mohli přihlásit jedním kliknutím",
|
||||||
"matchByEmail": "Přiřadíme jej k vašemu hotelovému účtu prostřednictvím e-mailu, použijte tedy uvedenou adresu:",
|
|
||||||
"lookupFailed": "Vaše propojené účty jsme teď nemohli přečíst. Stále se můžete připojit níže – váš stav se zobrazí, jakmile bude k dispozici.",
|
|
||||||
"statusUnavailable": "V tomto hotelu není k dispozici.",
|
|
||||||
"statusConnected": "Připojeno – přihlaste se pomocí tohoto účtu.",
|
|
||||||
"statusNotConnected": "Nepřipojeno.",
|
|
||||||
"connected": "Připojeno",
|
"connected": "Připojeno",
|
||||||
"connectProvider": "Připojit {provider}",
|
|
||||||
"unavailable": "Není k dispozici",
|
"unavailable": "Není k dispozici",
|
||||||
"footerNote": "Po připojení se dostanete k poskytovateli k autorizaci a poté zpět sem. Pokud e-mail vašeho účtu na sociální síti neodpovídá účtu hotelu, vrátíte se na přihlašovací obrazovku s poznámkou."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Přihlaste se",
|
"title": "Přihlaste se",
|
||||||
"subtitle": "Vítejte zpět – přihlaste se pro vstup do hotelu.",
|
"subtitle": "Vítejte zpět – přihlaste se pro vstup do hotelu.",
|
||||||
@@ -760,8 +745,6 @@
|
|||||||
"verify": "Ověřte",
|
"verify": "Ověřte",
|
||||||
"signIn": "Přihlaste se",
|
"signIn": "Přihlaste se",
|
||||||
"or": "nebo",
|
"or": "nebo",
|
||||||
"continueWithDiscord": "Pokračujte s Discordem",
|
|
||||||
"continueWithGoogle": "Pokračujte s Googlem",
|
|
||||||
"noAccount": "Žádný účet?",
|
"noAccount": "Žádný účet?",
|
||||||
"createOne": "Vytvořte jeden",
|
"createOne": "Vytvořte jeden",
|
||||||
"forgotPassword": "Zapomněli jste heslo?",
|
"forgotPassword": "Zapomněli jste heslo?",
|
||||||
|
|||||||
+1
-18
@@ -708,12 +708,7 @@
|
|||||||
"securityTitle": "Sikkerhed",
|
"securityTitle": "Sikkerhed",
|
||||||
"securitySubtitle": "To-faktor autentificering",
|
"securitySubtitle": "To-faktor autentificering",
|
||||||
"securityDescription": "Tilføj et ekstra beskyttelseslag til din konto.",
|
"securityDescription": "Tilføj et ekstra beskyttelseslag til din konto.",
|
||||||
"twoFactorLink": "To-faktor autentificering",
|
"twoFactorLink": "To-faktor autentificering"},
|
||||||
"connectionsTitle": "Tilknyttede konti",
|
|
||||||
"connectionsSubtitle": "Log ind med et enkelt klik",
|
|
||||||
"connectionsDescription": "Link Discord eller Google til din hotelkonto.",
|
|
||||||
"manageConnections": "Administrer forbindelser"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Indstillinger",
|
"backToSettings": "← Indstillinger",
|
||||||
"title": "To-faktor autentificering",
|
"title": "To-faktor autentificering",
|
||||||
@@ -735,20 +730,10 @@
|
|||||||
"enableIntro": "Tilføj et ekstra sikkerhedslag med en godkendelsesapp.",
|
"enableIntro": "Tilføj et ekstra sikkerhedslag med en godkendelsesapp.",
|
||||||
"enable": "Aktiver 2FA"
|
"enable": "Aktiver 2FA"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Indstillinger",
|
|
||||||
"title": "Tilknyttede konti",
|
"title": "Tilknyttede konti",
|
||||||
"subtitle": "Link en social konto, så du kan logge ind med et enkelt klik",
|
"subtitle": "Link en social konto, så du kan logge ind med et enkelt klik",
|
||||||
"matchByEmail": "Vi matcher den til din hotelkonto via e-mail, så brug den registrerede adresse:",
|
|
||||||
"lookupFailed": "Vi kunne ikke læse dine linkede konti lige nu. Du kan stadig oprette forbindelse nedenfor - din status vises, når den er tilgængelig.",
|
|
||||||
"statusUnavailable": "Ikke tilgængelig på dette hotel.",
|
|
||||||
"statusConnected": "Forbundet — log ind med denne konto.",
|
|
||||||
"statusNotConnected": "Ikke forbundet.",
|
|
||||||
"connected": "Forbundet",
|
"connected": "Forbundet",
|
||||||
"connectProvider": "Tilslut {provider}",
|
|
||||||
"unavailable": "Ikke tilgængelig",
|
"unavailable": "Ikke tilgængelig",
|
||||||
"footerNote": "Tilslutning fører dig til udbyderen for at godkende og derefter tilbage hertil. Hvis din sociale kontos e-mail ikke matcher en hotelkonto, vil du blive returneret til login-skærmen med en note."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Log ind",
|
"title": "Log ind",
|
||||||
"subtitle": "Velkommen tilbage - log ind for at komme ind på hotellet.",
|
"subtitle": "Velkommen tilbage - log ind for at komme ind på hotellet.",
|
||||||
@@ -760,8 +745,6 @@
|
|||||||
"verify": "Bekræft",
|
"verify": "Bekræft",
|
||||||
"signIn": "Log ind",
|
"signIn": "Log ind",
|
||||||
"or": "eller",
|
"or": "eller",
|
||||||
"continueWithDiscord": "Fortsæt med Discord",
|
|
||||||
"continueWithGoogle": "Fortsæt med Google",
|
|
||||||
"noAccount": "Ingen konto?",
|
"noAccount": "Ingen konto?",
|
||||||
"createOne": "Opret en",
|
"createOne": "Opret en",
|
||||||
"forgotPassword": "Glemt adgangskode?",
|
"forgotPassword": "Glemt adgangskode?",
|
||||||
|
|||||||
+1
-18
@@ -663,12 +663,7 @@
|
|||||||
"securityTitle": "Sicherheit",
|
"securityTitle": "Sicherheit",
|
||||||
"securitySubtitle": "Zwei-Faktor-Authentifizierung",
|
"securitySubtitle": "Zwei-Faktor-Authentifizierung",
|
||||||
"securityDescription": "Füge deinem Konto eine zweite Sicherheitsebene hinzu.",
|
"securityDescription": "Füge deinem Konto eine zweite Sicherheitsebene hinzu.",
|
||||||
"twoFactorLink": "Zwei-Faktor-Authentifizierung",
|
"twoFactorLink": "Zwei-Faktor-Authentifizierung"},
|
||||||
"connectionsTitle": "Verbundene Konten",
|
|
||||||
"connectionsSubtitle": "Mit einem Klick anmelden",
|
|
||||||
"connectionsDescription": "Verbinde Discord oder Google mit deinem Hotelkonto.",
|
|
||||||
"manageConnections": "Verbindungen verwalten"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Einstellungen",
|
"backToSettings": "← Einstellungen",
|
||||||
"title": "Zwei-Faktor-Authentifizierung",
|
"title": "Zwei-Faktor-Authentifizierung",
|
||||||
@@ -690,20 +685,10 @@
|
|||||||
"enableIntro": "Füge eine zweite Sicherheitsebene mit einer Authenticator-App hinzu.",
|
"enableIntro": "Füge eine zweite Sicherheitsebene mit einer Authenticator-App hinzu.",
|
||||||
"enable": "2FA aktivieren"
|
"enable": "2FA aktivieren"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Einstellungen",
|
|
||||||
"title": "Verbundene Konten",
|
"title": "Verbundene Konten",
|
||||||
"subtitle": "Verknüpfe ein Social-Media-Konto, damit du dich mit einem Klick anmelden kannst",
|
"subtitle": "Verknüpfe ein Social-Media-Konto, damit du dich mit einem Klick anmelden kannst",
|
||||||
"matchByEmail": "Wir gleichen es mit deinem Hotelkonto per E-Mail ab. Verwende daher die hinterlegte Adresse:",
|
|
||||||
"lookupFailed": "Wir konnten deine verknüpften Konten momentan nicht auslesen. Du kannst dich unten trotzdem verbinden — dein Status wird angezeigt, sobald er verfügbar ist.",
|
|
||||||
"statusUnavailable": "In diesem Hotel nicht verfügbar.",
|
|
||||||
"statusConnected": "Verbunden — mit diesem Konto anmelden.",
|
|
||||||
"statusNotConnected": "Nicht verbunden.",
|
|
||||||
"connected": "Verbunden",
|
"connected": "Verbunden",
|
||||||
"connectProvider": "{provider} verbinden",
|
|
||||||
"unavailable": "Nicht verfügbar",
|
"unavailable": "Nicht verfügbar",
|
||||||
"footerNote": "Beim Verbinden wirst du zum Anbieter weitergeleitet, um zu autorisieren, und dann hierher zurückgebracht. Wenn die E-Mail deines Social-Media-Kontos nicht mit einem Hotelkonto übereinstimmt, wirst du mit einem Hinweis zum Anmeldebildschirm zurückgeleitet."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Anmelden",
|
"title": "Anmelden",
|
||||||
"subtitle": "Willkommen zurück — melde dich an, um das Hotel zu betreten.",
|
"subtitle": "Willkommen zurück — melde dich an, um das Hotel zu betreten.",
|
||||||
@@ -715,8 +700,6 @@
|
|||||||
"verify": "Verifizieren",
|
"verify": "Verifizieren",
|
||||||
"signIn": "Anmelden",
|
"signIn": "Anmelden",
|
||||||
"or": "oder",
|
"or": "oder",
|
||||||
"continueWithDiscord": "Weiter mit Discord",
|
|
||||||
"continueWithGoogle": "Weiter mit Google",
|
|
||||||
"noAccount": "Noch kein Konto?",
|
"noAccount": "Noch kein Konto?",
|
||||||
"createOne": "Konto erstellen",
|
"createOne": "Konto erstellen",
|
||||||
"forgotPassword": "Passwort vergessen?",
|
"forgotPassword": "Passwort vergessen?",
|
||||||
|
|||||||
+1
-18
@@ -708,12 +708,7 @@
|
|||||||
"securityTitle": "Ασφάλεια",
|
"securityTitle": "Ασφάλεια",
|
||||||
"securitySubtitle": "Έλεγχος ταυτότητας δύο παραγόντων",
|
"securitySubtitle": "Έλεγχος ταυτότητας δύο παραγόντων",
|
||||||
"securityDescription": "Προσθέστε ένα δεύτερο επίπεδο προστασίας στον λογαριασμό σας.",
|
"securityDescription": "Προσθέστε ένα δεύτερο επίπεδο προστασίας στον λογαριασμό σας.",
|
||||||
"twoFactorLink": "Έλεγχος ταυτότητας δύο παραγόντων",
|
"twoFactorLink": "Έλεγχος ταυτότητας δύο παραγόντων"},
|
||||||
"connectionsTitle": "Συνδεδεμένοι λογαριασμοί",
|
|
||||||
"connectionsSubtitle": "Συνδεθείτε με ένα κλικ",
|
|
||||||
"connectionsDescription": "Συνδέστε το Discord ή το Google με τον λογαριασμό του ξενοδοχείου σας.",
|
|
||||||
"manageConnections": "Διαχειριστείτε τις συνδέσεις"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Ρυθμίσεις",
|
"backToSettings": "← Ρυθμίσεις",
|
||||||
"title": "Έλεγχος ταυτότητας δύο παραγόντων",
|
"title": "Έλεγχος ταυτότητας δύο παραγόντων",
|
||||||
@@ -735,20 +730,10 @@
|
|||||||
"enableIntro": "Προσθέστε ένα δεύτερο επίπεδο ασφάλειας με μια εφαρμογή ελέγχου ταυτότητας.",
|
"enableIntro": "Προσθέστε ένα δεύτερο επίπεδο ασφάλειας με μια εφαρμογή ελέγχου ταυτότητας.",
|
||||||
"enable": "Ενεργοποίηση 2FA"
|
"enable": "Ενεργοποίηση 2FA"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Ρυθμίσεις",
|
|
||||||
"title": "Συνδεδεμένοι λογαριασμοί",
|
"title": "Συνδεδεμένοι λογαριασμοί",
|
||||||
"subtitle": "Συνδέστε έναν λογαριασμό κοινωνικής δικτύωσης για να μπορείτε να συνδεθείτε με ένα κλικ",
|
"subtitle": "Συνδέστε έναν λογαριασμό κοινωνικής δικτύωσης για να μπορείτε να συνδεθείτε με ένα κλικ",
|
||||||
"matchByEmail": "Το αντιστοιχίζουμε στον λογαριασμό του ξενοδοχείου σας μέσω e-mail, επομένως χρησιμοποιήστε τη διεύθυνση στο αρχείο:",
|
|
||||||
"lookupFailed": "Δεν μπορέσαμε να διαβάσουμε τους συνδεδεμένους λογαριασμούς σας αυτήν τη στιγμή. Μπορείτε ακόμα να συνδεθείτε παρακάτω — η κατάστασή σας θα εμφανιστεί μόλις είναι διαθέσιμη.",
|
|
||||||
"statusUnavailable": "Δεν είναι διαθέσιμο σε αυτό το ξενοδοχείο.",
|
|
||||||
"statusConnected": "Συνδεδεμένο — συνδεθείτε με αυτόν τον λογαριασμό.",
|
|
||||||
"statusNotConnected": "Δεν είναι συνδεδεμένο.",
|
|
||||||
"connected": "Συνδεδεμένος",
|
"connected": "Συνδεδεμένος",
|
||||||
"connectProvider": "Σύνδεση {provider}",
|
|
||||||
"unavailable": "Μη διαθέσιμο",
|
"unavailable": "Μη διαθέσιμο",
|
||||||
"footerNote": "Η σύνδεση σάς μεταφέρει στον πάροχο για εξουσιοδότηση και μετά πάλι εδώ. Εάν το e-mail του λογαριασμού σας κοινωνικής δικτύωσης δεν ταιριάζει με έναν λογαριασμό ξενοδοχείου, θα επιστρέψετε στην οθόνη σύνδεσης με μια σημείωση."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Συνδεθείτε",
|
"title": "Συνδεθείτε",
|
||||||
"subtitle": "Καλώς ήρθατε πίσω — συνδεθείτε για να μπείτε στο ξενοδοχείο.",
|
"subtitle": "Καλώς ήρθατε πίσω — συνδεθείτε για να μπείτε στο ξενοδοχείο.",
|
||||||
@@ -760,8 +745,6 @@
|
|||||||
"verify": "Επαλήθευση",
|
"verify": "Επαλήθευση",
|
||||||
"signIn": "Συνδεθείτε",
|
"signIn": "Συνδεθείτε",
|
||||||
"or": "ή",
|
"or": "ή",
|
||||||
"continueWithDiscord": "Συνεχίστε με το Discord",
|
|
||||||
"continueWithGoogle": "Συνεχίστε με την Google",
|
|
||||||
"noAccount": "Δεν υπάρχει λογαριασμός;",
|
"noAccount": "Δεν υπάρχει λογαριασμός;",
|
||||||
"createOne": "Δημιουργήστε ένα",
|
"createOne": "Δημιουργήστε ένα",
|
||||||
"forgotPassword": "Ξεχάσατε τον κωδικό πρόσβασης;",
|
"forgotPassword": "Ξεχάσατε τον κωδικό πρόσβασης;",
|
||||||
|
|||||||
+1
-22
@@ -862,12 +862,7 @@
|
|||||||
"securityTitle": "Security",
|
"securityTitle": "Security",
|
||||||
"securitySubtitle": "Two-factor authentication",
|
"securitySubtitle": "Two-factor authentication",
|
||||||
"securityDescription": "Add a second layer of protection to your account.",
|
"securityDescription": "Add a second layer of protection to your account.",
|
||||||
"twoFactorLink": "Two-factor authentication",
|
"twoFactorLink": "Two-factor authentication"},
|
||||||
"connectionsTitle": "Connected accounts",
|
|
||||||
"connectionsSubtitle": "Sign in with one click",
|
|
||||||
"connectionsDescription": "Link Discord or Google to your hotel account.",
|
|
||||||
"manageConnections": "Manage connections"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Settings",
|
"backToSettings": "← Settings",
|
||||||
"title": "Two-factor authentication",
|
"title": "Two-factor authentication",
|
||||||
@@ -889,20 +884,6 @@
|
|||||||
"enableIntro": "Add a second layer of security with an authenticator app.",
|
"enableIntro": "Add a second layer of security with an authenticator app.",
|
||||||
"enable": "Enable 2FA"
|
"enable": "Enable 2FA"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Settings",
|
|
||||||
"title": "Connected accounts",
|
|
||||||
"subtitle": "Link a social account so you can sign in with one click",
|
|
||||||
"matchByEmail": "We match it to your hotel account by e-mail, so use the address on file:",
|
|
||||||
"lookupFailed": "We couldn't read your linked accounts right now. You can still connect below — your status will show once it's available.",
|
|
||||||
"statusUnavailable": "Not available on this hotel.",
|
|
||||||
"statusConnected": "Connected — sign in with this account.",
|
|
||||||
"statusNotConnected": "Not connected.",
|
|
||||||
"connected": "Connected",
|
|
||||||
"connectProvider": "Connect {provider}",
|
|
||||||
"unavailable": "Unavailable",
|
|
||||||
"footerNote": "Connecting takes you to the provider to authorise, then back here. If your social account's e-mail doesn't match a hotel account, you'll be returned to the login screen with a note."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Sign in",
|
"title": "Sign in",
|
||||||
"subtitle": "Welcome back — log in to enter the hotel.",
|
"subtitle": "Welcome back — log in to enter the hotel.",
|
||||||
@@ -916,8 +897,6 @@
|
|||||||
"verify": "Verify",
|
"verify": "Verify",
|
||||||
"signIn": "Sign in",
|
"signIn": "Sign in",
|
||||||
"or": "or",
|
"or": "or",
|
||||||
"continueWithDiscord": "Continue with Discord",
|
|
||||||
"continueWithGoogle": "Continue with Google",
|
|
||||||
"noAccount": "No account?",
|
"noAccount": "No account?",
|
||||||
"createOne": "Create one",
|
"createOne": "Create one",
|
||||||
"forgotPassword": "Forgot password?",
|
"forgotPassword": "Forgot password?",
|
||||||
|
|||||||
+1
-18
@@ -663,12 +663,7 @@
|
|||||||
"securityTitle": "Seguridad",
|
"securityTitle": "Seguridad",
|
||||||
"securitySubtitle": "Autenticación de dos factores",
|
"securitySubtitle": "Autenticación de dos factores",
|
||||||
"securityDescription": "Añade una segunda capa de protección a tu cuenta.",
|
"securityDescription": "Añade una segunda capa de protección a tu cuenta.",
|
||||||
"twoFactorLink": "Autenticación de dos factores",
|
"twoFactorLink": "Autenticación de dos factores"},
|
||||||
"connectionsTitle": "Cuentas conectadas",
|
|
||||||
"connectionsSubtitle": "Inicia sesión con un solo clic",
|
|
||||||
"connectionsDescription": "Vincula Discord o Google a tu cuenta del hotel.",
|
|
||||||
"manageConnections": "Gestionar conexiones"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Configuración",
|
"backToSettings": "← Configuración",
|
||||||
"title": "Autenticación de dos factores",
|
"title": "Autenticación de dos factores",
|
||||||
@@ -690,20 +685,10 @@
|
|||||||
"enableIntro": "Añade una segunda capa de seguridad con una aplicación de autenticación.",
|
"enableIntro": "Añade una segunda capa de seguridad con una aplicación de autenticación.",
|
||||||
"enable": "Activar 2FA"
|
"enable": "Activar 2FA"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Configuración",
|
|
||||||
"title": "Cuentas conectadas",
|
"title": "Cuentas conectadas",
|
||||||
"subtitle": "Vincula una cuenta social para iniciar sesión con un clic",
|
"subtitle": "Vincula una cuenta social para iniciar sesión con un clic",
|
||||||
"matchByEmail": "La vinculamos a tu cuenta del hotel por correo electrónico, así que usa la dirección registrada:",
|
|
||||||
"lookupFailed": "No pudimos leer tus cuentas vinculadas ahora mismo. Aún puedes conectar abajo — tu estado se mostrará cuando esté disponible.",
|
|
||||||
"statusUnavailable": "No disponible en este hotel.",
|
|
||||||
"statusConnected": "Conectado — inicia sesión con esta cuenta.",
|
|
||||||
"statusNotConnected": "No conectado.",
|
|
||||||
"connected": "Conectado",
|
"connected": "Conectado",
|
||||||
"connectProvider": "Conectar {provider}",
|
|
||||||
"unavailable": "No disponible",
|
"unavailable": "No disponible",
|
||||||
"footerNote": "Conectar te lleva al proveedor para autorizar, y luego de vuelta aquí. Si el correo electrónico de tu cuenta social no coincide con una cuenta del hotel, serás redirigido a la pantalla de inicio de sesión con una nota."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Iniciar sesión",
|
"title": "Iniciar sesión",
|
||||||
"subtitle": "Bienvenido de nuevo — inicia sesión para entrar al hotel.",
|
"subtitle": "Bienvenido de nuevo — inicia sesión para entrar al hotel.",
|
||||||
@@ -715,8 +700,6 @@
|
|||||||
"verify": "Verificar",
|
"verify": "Verificar",
|
||||||
"signIn": "Iniciar sesión",
|
"signIn": "Iniciar sesión",
|
||||||
"or": "o",
|
"or": "o",
|
||||||
"continueWithDiscord": "Continuar con Discord",
|
|
||||||
"continueWithGoogle": "Continuar con Google",
|
|
||||||
"noAccount": "¿No tienes cuenta?",
|
"noAccount": "¿No tienes cuenta?",
|
||||||
"createOne": "Crea una",
|
"createOne": "Crea una",
|
||||||
"forgotPassword": "¿Olvidaste tu contraseña?",
|
"forgotPassword": "¿Olvidaste tu contraseña?",
|
||||||
|
|||||||
+1
-18
@@ -663,12 +663,7 @@
|
|||||||
"securityTitle": "Sécurité",
|
"securityTitle": "Sécurité",
|
||||||
"securitySubtitle": "Authentification à deux facteurs",
|
"securitySubtitle": "Authentification à deux facteurs",
|
||||||
"securityDescription": "Ajoutez une deuxième couche de protection à votre compte.",
|
"securityDescription": "Ajoutez une deuxième couche de protection à votre compte.",
|
||||||
"twoFactorLink": "Authentification à deux facteurs",
|
"twoFactorLink": "Authentification à deux facteurs"},
|
||||||
"connectionsTitle": "Comptes connectés",
|
|
||||||
"connectionsSubtitle": "Connectez-vous en un clic",
|
|
||||||
"connectionsDescription": "Associez Discord ou Google à votre compte hôtel.",
|
|
||||||
"manageConnections": "Gérer les connexions"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Paramètres",
|
"backToSettings": "← Paramètres",
|
||||||
"title": "Authentification à deux facteurs",
|
"title": "Authentification à deux facteurs",
|
||||||
@@ -690,20 +685,10 @@
|
|||||||
"enableIntro": "Ajoutez une deuxième couche de sécurité avec une application d'authentification.",
|
"enableIntro": "Ajoutez une deuxième couche de sécurité avec une application d'authentification.",
|
||||||
"enable": "Activer l'A2F"
|
"enable": "Activer l'A2F"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Paramètres",
|
|
||||||
"title": "Comptes connectés",
|
"title": "Comptes connectés",
|
||||||
"subtitle": "Associez un compte social pour vous connecter en un clic",
|
"subtitle": "Associez un compte social pour vous connecter en un clic",
|
||||||
"matchByEmail": "Nous le faisons correspondre à votre compte hôtel par e-mail, donc utilisez l'adresse enregistrée :",
|
|
||||||
"lookupFailed": "Nous n'avons pas pu lire vos comptes liés pour le moment. Vous pouvez toujours vous connecter ci-dessous — votre statut apparaîtra dès qu'il sera disponible.",
|
|
||||||
"statusUnavailable": "Non disponible sur cet hôtel.",
|
|
||||||
"statusConnected": "Connecté — connectez-vous avec ce compte.",
|
|
||||||
"statusNotConnected": "Non connecté.",
|
|
||||||
"connected": "Connecté",
|
"connected": "Connecté",
|
||||||
"connectProvider": "Connecter {provider}",
|
|
||||||
"unavailable": "Indisponible",
|
"unavailable": "Indisponible",
|
||||||
"footerNote": "La connexion vous redirige vers le fournisseur pour autoriser, puis vous revient ici. Si l'e-mail de votre compte social ne correspond pas à un compte hôtel, vous serez redirigé vers l'écran de connexion avec une note."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Connexion",
|
"title": "Connexion",
|
||||||
"subtitle": "Bon retour — connectez-vous pour entrer dans l'hôtel.",
|
"subtitle": "Bon retour — connectez-vous pour entrer dans l'hôtel.",
|
||||||
@@ -715,8 +700,6 @@
|
|||||||
"verify": "Vérifier",
|
"verify": "Vérifier",
|
||||||
"signIn": "Se connecter",
|
"signIn": "Se connecter",
|
||||||
"or": "ou",
|
"or": "ou",
|
||||||
"continueWithDiscord": "Continuer avec Discord",
|
|
||||||
"continueWithGoogle": "Continuer avec Google",
|
|
||||||
"noAccount": "Pas de compte ?",
|
"noAccount": "Pas de compte ?",
|
||||||
"createOne": "Créer un compte",
|
"createOne": "Créer un compte",
|
||||||
"forgotPassword": "Mot de passe oublié ?",
|
"forgotPassword": "Mot de passe oublié ?",
|
||||||
|
|||||||
+1
-18
@@ -708,12 +708,7 @@
|
|||||||
"securityTitle": "Sigurnost",
|
"securityTitle": "Sigurnost",
|
||||||
"securitySubtitle": "Dvofaktorska autentifikacija",
|
"securitySubtitle": "Dvofaktorska autentifikacija",
|
||||||
"securityDescription": "Dodajte drugi sloj zaštite svom računu.",
|
"securityDescription": "Dodajte drugi sloj zaštite svom računu.",
|
||||||
"twoFactorLink": "Dvofaktorska autentifikacija",
|
"twoFactorLink": "Dvofaktorska autentifikacija"},
|
||||||
"connectionsTitle": "Povezani računi",
|
|
||||||
"connectionsSubtitle": "Prijavite se jednim klikom",
|
|
||||||
"connectionsDescription": "Povežite Discord ili Google sa svojim hotelskim računom.",
|
|
||||||
"manageConnections": "Upravljanje vezama"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Postavke",
|
"backToSettings": "← Postavke",
|
||||||
"title": "Dvofaktorska autentifikacija",
|
"title": "Dvofaktorska autentifikacija",
|
||||||
@@ -735,20 +730,10 @@
|
|||||||
"enableIntro": "Dodajte drugi sloj sigurnosti pomoću aplikacije za autentifikaciju.",
|
"enableIntro": "Dodajte drugi sloj sigurnosti pomoću aplikacije za autentifikaciju.",
|
||||||
"enable": "Omogućite 2FA"
|
"enable": "Omogućite 2FA"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Postavke",
|
|
||||||
"title": "Povezani računi",
|
"title": "Povezani računi",
|
||||||
"subtitle": "Povežite društveni račun kako biste se mogli prijaviti jednim klikom",
|
"subtitle": "Povežite društveni račun kako biste se mogli prijaviti jednim klikom",
|
||||||
"matchByEmail": "Spajamo je s vašim hotelskim računom putem e-pošte, stoga koristite adresu u evidenciji:",
|
|
||||||
"lookupFailed": "Trenutačno nismo mogli pročitati vaše povezane račune. I dalje se možete povezati u nastavku — vaš će se status prikazati kada bude dostupan.",
|
|
||||||
"statusUnavailable": "Nije dostupno u ovom hotelu.",
|
|
||||||
"statusConnected": "Povezano — prijavite se ovim računom.",
|
|
||||||
"statusNotConnected": "Nije povezano.",
|
|
||||||
"connected": "Povezan",
|
"connected": "Povezan",
|
||||||
"connectProvider": "Poveži {provider}",
|
|
||||||
"unavailable": "Nedostupan",
|
"unavailable": "Nedostupan",
|
||||||
"footerNote": "Povezivanje vas vodi do davatelja usluga za autorizaciju, a zatim natrag ovdje. Ako e-pošta vašeg računa na društvenoj mreži ne odgovara hotelskom računu, vratit ćete se na zaslon za prijavu s porukom."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Prijavite se",
|
"title": "Prijavite se",
|
||||||
"subtitle": "Dobrodošli nazad — prijavite se za ulazak u hotel.",
|
"subtitle": "Dobrodošli nazad — prijavite se za ulazak u hotel.",
|
||||||
@@ -760,8 +745,6 @@
|
|||||||
"verify": "Potvrdi",
|
"verify": "Potvrdi",
|
||||||
"signIn": "Prijavite se",
|
"signIn": "Prijavite se",
|
||||||
"or": "ili",
|
"or": "ili",
|
||||||
"continueWithDiscord": "Nastavite s Discordom",
|
|
||||||
"continueWithGoogle": "Nastavite s Googleom",
|
|
||||||
"noAccount": "Nemate račun?",
|
"noAccount": "Nemate račun?",
|
||||||
"createOne": "Stvorite jedan",
|
"createOne": "Stvorite jedan",
|
||||||
"forgotPassword": "Zaboravili ste lozinku?",
|
"forgotPassword": "Zaboravili ste lozinku?",
|
||||||
|
|||||||
+1
-18
@@ -708,12 +708,7 @@
|
|||||||
"securityTitle": "Biztonság",
|
"securityTitle": "Biztonság",
|
||||||
"securitySubtitle": "Kéttényezős hitelesítés",
|
"securitySubtitle": "Kéttényezős hitelesítés",
|
||||||
"securityDescription": "Adjon hozzá egy második védelmi réteget fiókjához.",
|
"securityDescription": "Adjon hozzá egy második védelmi réteget fiókjához.",
|
||||||
"twoFactorLink": "Kéttényezős hitelesítés",
|
"twoFactorLink": "Kéttényezős hitelesítés"},
|
||||||
"connectionsTitle": "Kapcsolt fiókok",
|
|
||||||
"connectionsSubtitle": "Jelentkezzen be egyetlen kattintással",
|
|
||||||
"connectionsDescription": "Kapcsolja össze a Discordot vagy a Google-t szállodai fiókjával.",
|
|
||||||
"manageConnections": "Kapcsolatok kezelése"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Beállítások",
|
"backToSettings": "← Beállítások",
|
||||||
"title": "Kéttényezős hitelesítés",
|
"title": "Kéttényezős hitelesítés",
|
||||||
@@ -735,20 +730,10 @@
|
|||||||
"enableIntro": "Adjon hozzá egy második biztonsági réteget egy hitelesítő alkalmazással.",
|
"enableIntro": "Adjon hozzá egy második biztonsági réteget egy hitelesítő alkalmazással.",
|
||||||
"enable": "2FA engedélyezése"
|
"enable": "2FA engedélyezése"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Beállítások",
|
|
||||||
"title": "Kapcsolt fiókok",
|
"title": "Kapcsolt fiókok",
|
||||||
"subtitle": "Kapcsoljon össze egy közösségi fiókot, hogy egyetlen kattintással bejelentkezhessen",
|
"subtitle": "Kapcsoljon össze egy közösségi fiókot, hogy egyetlen kattintással bejelentkezhessen",
|
||||||
"matchByEmail": "E-mailben egyeztetjük szállodai fiókjával, ezért használja a fájlban szereplő címet:",
|
|
||||||
"lookupFailed": "Jelenleg nem tudtuk olvasni az összekapcsolt fiókokat. Az alábbiakban továbbra is csatlakozhat – állapota akkor jelenik meg, ha elérhető lesz.",
|
|
||||||
"statusUnavailable": "Nem elérhető ebben a szállodában.",
|
|
||||||
"statusConnected": "Csatlakozva – jelentkezzen be ezzel a fiókkal.",
|
|
||||||
"statusNotConnected": "Nincs csatlakoztatva.",
|
|
||||||
"connected": "Csatlakozva",
|
"connected": "Csatlakozva",
|
||||||
"connectProvider": "Csatlakozás a következőhöz: {provider}",
|
|
||||||
"unavailable": "Nem elérhető",
|
"unavailable": "Nem elérhető",
|
||||||
"footerNote": "A csatlakozás a szolgáltatóhoz viszi az engedélyezést, majd vissza ide. Ha közösségi fiókod e-mail-címe nem egyezik a szállodai fiókkal, akkor egy megjegyzéssel visszakerül a bejelentkezési képernyőre."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Jelentkezzen be",
|
"title": "Jelentkezzen be",
|
||||||
"subtitle": "Üdvözöljük újra – jelentkezzen be a szállodába való belépéshez.",
|
"subtitle": "Üdvözöljük újra – jelentkezzen be a szállodába való belépéshez.",
|
||||||
@@ -760,8 +745,6 @@
|
|||||||
"verify": "Ellenőrizze",
|
"verify": "Ellenőrizze",
|
||||||
"signIn": "Jelentkezzen be",
|
"signIn": "Jelentkezzen be",
|
||||||
"or": "vagy",
|
"or": "vagy",
|
||||||
"continueWithDiscord": "Folytatás a Discorddal",
|
|
||||||
"continueWithGoogle": "Folytassa a Google-lal",
|
|
||||||
"noAccount": "Nincs fiók?",
|
"noAccount": "Nincs fiók?",
|
||||||
"createOne": "Hozzon létre egyet",
|
"createOne": "Hozzon létre egyet",
|
||||||
"forgotPassword": "Elfelejtetted a jelszavad?",
|
"forgotPassword": "Elfelejtetted a jelszavad?",
|
||||||
|
|||||||
+1
-18
@@ -817,12 +817,7 @@
|
|||||||
"securityTitle": "Sicurezza",
|
"securityTitle": "Sicurezza",
|
||||||
"securitySubtitle": "Autenticazione a due fattori",
|
"securitySubtitle": "Autenticazione a due fattori",
|
||||||
"securityDescription": "Aggiungi un ulteriore livello di protezione al tuo account.",
|
"securityDescription": "Aggiungi un ulteriore livello di protezione al tuo account.",
|
||||||
"twoFactorLink": "Autenticazione a due fattori",
|
"twoFactorLink": "Autenticazione a due fattori"},
|
||||||
"connectionsTitle": "Account collegati",
|
|
||||||
"connectionsSubtitle": "Accedi con un clic",
|
|
||||||
"connectionsDescription": "Collega Discord o Google al tuo account dell'hotel.",
|
|
||||||
"manageConnections": "Gestisci collegamenti"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Impostazioni",
|
"backToSettings": "← Impostazioni",
|
||||||
"title": "Autenticazione a due fattori",
|
"title": "Autenticazione a due fattori",
|
||||||
@@ -844,20 +839,10 @@
|
|||||||
"enableIntro": "Aggiungi un livello di sicurezza in più con un'app di autenticazione.",
|
"enableIntro": "Aggiungi un livello di sicurezza in più con un'app di autenticazione.",
|
||||||
"enable": "Attiva 2FA"
|
"enable": "Attiva 2FA"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Impostazioni",
|
|
||||||
"title": "Account collegati",
|
"title": "Account collegati",
|
||||||
"subtitle": "Collega un account social per poter accedere con un clic",
|
"subtitle": "Collega un account social per poter accedere con un clic",
|
||||||
"matchByEmail": "Lo abbiniamo al tuo account dell'hotel tramite e-mail, quindi usa l'indirizzo registrato:",
|
|
||||||
"lookupFailed": "Al momento non riusciamo a leggere i tuoi account collegati. Puoi comunque collegarne uno qui sotto: lo stato verrà mostrato non appena disponibile.",
|
|
||||||
"statusUnavailable": "Non disponibile su questo hotel.",
|
|
||||||
"statusConnected": "Collegato — accedi con questo account.",
|
|
||||||
"statusNotConnected": "Non collegato.",
|
|
||||||
"connected": "Collegato",
|
"connected": "Collegato",
|
||||||
"connectProvider": "Collega {provider}",
|
|
||||||
"unavailable": "Non disponibile",
|
"unavailable": "Non disponibile",
|
||||||
"footerNote": "Il collegamento ti porta al provider per l'autorizzazione, poi ti riporta qui. Se l'e-mail del tuo account social non corrisponde a un account dell'hotel, verrai riportato alla schermata di accesso con una nota."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Accedi",
|
"title": "Accedi",
|
||||||
"subtitle": "Bentornato — accedi per entrare nell'hotel.",
|
"subtitle": "Bentornato — accedi per entrare nell'hotel.",
|
||||||
@@ -869,8 +854,6 @@
|
|||||||
"verify": "Verifica",
|
"verify": "Verifica",
|
||||||
"signIn": "Accedi",
|
"signIn": "Accedi",
|
||||||
"or": "oppure",
|
"or": "oppure",
|
||||||
"continueWithDiscord": "Continua con Discord",
|
|
||||||
"continueWithGoogle": "Continua con Google",
|
|
||||||
"noAccount": "Non hai un account?",
|
"noAccount": "Non hai un account?",
|
||||||
"createOne": "Creane uno",
|
"createOne": "Creane uno",
|
||||||
"forgotPassword": "Password dimenticata?",
|
"forgotPassword": "Password dimenticata?",
|
||||||
|
|||||||
+1
-18
@@ -862,12 +862,7 @@
|
|||||||
"securityTitle": "Beveiliging",
|
"securityTitle": "Beveiliging",
|
||||||
"securitySubtitle": "Twee factor authenticatie",
|
"securitySubtitle": "Twee factor authenticatie",
|
||||||
"securityDescription": "Voeg een extra beveiligingslaag toe aan je account.",
|
"securityDescription": "Voeg een extra beveiligingslaag toe aan je account.",
|
||||||
"twoFactorLink": "Twee factor authenticatie",
|
"twoFactorLink": "Twee factor authenticatie"},
|
||||||
"connectionsTitle": "Gekoppelde accounts",
|
|
||||||
"connectionsSubtitle": "Inloggen met één klik",
|
|
||||||
"connectionsDescription": "Koppel Discord of Google aan je hotelaccount.",
|
|
||||||
"manageConnections": "Koppelingen beheren"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Instellingen",
|
"backToSettings": "← Instellingen",
|
||||||
"title": "Twee factor authenticatie",
|
"title": "Twee factor authenticatie",
|
||||||
@@ -889,20 +884,10 @@
|
|||||||
"enableIntro": "Voeg een extra beveiligingslaag toe met een authenticator-app.",
|
"enableIntro": "Voeg een extra beveiligingslaag toe met een authenticator-app.",
|
||||||
"enable": "2FA inschakelen"
|
"enable": "2FA inschakelen"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Instellingen",
|
|
||||||
"title": "Gekoppelde accounts",
|
"title": "Gekoppelde accounts",
|
||||||
"subtitle": "Koppel een sociaal account zodat je met één klik kunt inloggen",
|
"subtitle": "Koppel een sociaal account zodat je met één klik kunt inloggen",
|
||||||
"matchByEmail": "We koppelen het aan je hotelaccount op basis van e-mail, gebruik dus het volgende adres:",
|
|
||||||
"lookupFailed": "We konden je gekoppelde accounts nu niet uitlezen. Je kunt hieronder nog steeds koppelen — je status wordt getoond zodra deze beschikbaar is.",
|
|
||||||
"statusUnavailable": "Niet beschikbaar in dit hotel.",
|
|
||||||
"statusConnected": "Gekoppeld — log in met dit account.",
|
|
||||||
"statusNotConnected": "Niet gekoppeld.",
|
|
||||||
"connected": "Gekoppeld",
|
"connected": "Gekoppeld",
|
||||||
"connectProvider": "{provider} koppelen",
|
|
||||||
"unavailable": "Niet beschikbaar",
|
"unavailable": "Niet beschikbaar",
|
||||||
"footerNote": "Koppelen brengt je naar de provider om te autoriseren en daarna terug hierheen. Als het e-mailadres van je sociale account niet overeenkomt met een hotelaccount, word je teruggestuurd naar het inlogscherm met een melding."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Inloggen",
|
"title": "Inloggen",
|
||||||
"subtitle": "Welkom terug — log in om het hotel te betreden.",
|
"subtitle": "Welkom terug — log in om het hotel te betreden.",
|
||||||
@@ -914,8 +899,6 @@
|
|||||||
"verify": "Verifiëren",
|
"verify": "Verifiëren",
|
||||||
"signIn": "Inloggen",
|
"signIn": "Inloggen",
|
||||||
"or": "of",
|
"or": "of",
|
||||||
"continueWithDiscord": "Doorgaan met Discord",
|
|
||||||
"continueWithGoogle": "Doorgaan met Google",
|
|
||||||
"noAccount": "Nog geen account?",
|
"noAccount": "Nog geen account?",
|
||||||
"createOne": "Account aanmaken",
|
"createOne": "Account aanmaken",
|
||||||
"forgotPassword": "Wachtwoord vergeten?",
|
"forgotPassword": "Wachtwoord vergeten?",
|
||||||
|
|||||||
+1
-18
@@ -708,12 +708,7 @@
|
|||||||
"securityTitle": "Sikkerhet",
|
"securityTitle": "Sikkerhet",
|
||||||
"securitySubtitle": "To-faktor autentisering",
|
"securitySubtitle": "To-faktor autentisering",
|
||||||
"securityDescription": "Legg til et ekstra lag med beskyttelse til kontoen din.",
|
"securityDescription": "Legg til et ekstra lag med beskyttelse til kontoen din.",
|
||||||
"twoFactorLink": "To-faktor autentisering",
|
"twoFactorLink": "To-faktor autentisering"},
|
||||||
"connectionsTitle": "Tilknyttede kontoer",
|
|
||||||
"connectionsSubtitle": "Logg på med ett klikk",
|
|
||||||
"connectionsDescription": "Koble Discord eller Google til hotellkontoen din.",
|
|
||||||
"manageConnections": "Administrer tilkoblinger"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Innstillinger",
|
"backToSettings": "← Innstillinger",
|
||||||
"title": "To-faktor autentisering",
|
"title": "To-faktor autentisering",
|
||||||
@@ -735,20 +730,10 @@
|
|||||||
"enableIntro": "Legg til et ekstra lag med sikkerhet med en autentiseringsapp.",
|
"enableIntro": "Legg til et ekstra lag med sikkerhet med en autentiseringsapp.",
|
||||||
"enable": "Aktiver 2FA"
|
"enable": "Aktiver 2FA"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Innstillinger",
|
|
||||||
"title": "Tilknyttede kontoer",
|
"title": "Tilknyttede kontoer",
|
||||||
"subtitle": "Koble til en sosial konto slik at du kan logge på med ett klikk",
|
"subtitle": "Koble til en sosial konto slik at du kan logge på med ett klikk",
|
||||||
"matchByEmail": "Vi matcher den til hotellkontoen din via e-post, så bruk adressen som er registrert:",
|
|
||||||
"lookupFailed": "Vi kunne ikke lese de tilknyttede kontoene dine akkurat nå. Du kan fortsatt koble til nedenfor – statusen din vises når den er tilgjengelig.",
|
|
||||||
"statusUnavailable": "Ikke tilgjengelig på dette hotellet.",
|
|
||||||
"statusConnected": "Tilkoblet – logg på med denne kontoen.",
|
|
||||||
"statusNotConnected": "Ikke tilkoblet.",
|
|
||||||
"connected": "Tilkoblet",
|
"connected": "Tilkoblet",
|
||||||
"connectProvider": "Koble til {provider}",
|
|
||||||
"unavailable": "Utilgjengelig",
|
"unavailable": "Utilgjengelig",
|
||||||
"footerNote": "Tilkobling tar deg til leverandøren for å godkjenne, og deretter tilbake hit. Hvis e-posten til den sosiale kontoen din ikke samsvarer med en hotellkonto, blir du returnert til påloggingsskjermen med en merknad."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Logg på",
|
"title": "Logg på",
|
||||||
"subtitle": "Velkommen tilbake – logg inn for å komme inn på hotellet.",
|
"subtitle": "Velkommen tilbake – logg inn for å komme inn på hotellet.",
|
||||||
@@ -760,8 +745,6 @@
|
|||||||
"verify": "Bekreft",
|
"verify": "Bekreft",
|
||||||
"signIn": "Logg på",
|
"signIn": "Logg på",
|
||||||
"or": "eller",
|
"or": "eller",
|
||||||
"continueWithDiscord": "Fortsett med Discord",
|
|
||||||
"continueWithGoogle": "Fortsett med Google",
|
|
||||||
"noAccount": "Ingen konto?",
|
"noAccount": "Ingen konto?",
|
||||||
"createOne": "Lag en",
|
"createOne": "Lag en",
|
||||||
"forgotPassword": "Glemt passord?",
|
"forgotPassword": "Glemt passord?",
|
||||||
|
|||||||
+1
-18
@@ -708,12 +708,7 @@
|
|||||||
"securityTitle": "Bezpieczeństwo",
|
"securityTitle": "Bezpieczeństwo",
|
||||||
"securitySubtitle": "Uwierzytelnianie dwuskładnikowe",
|
"securitySubtitle": "Uwierzytelnianie dwuskładnikowe",
|
||||||
"securityDescription": "Dodaj drugą warstwę ochrony do swojego konta.",
|
"securityDescription": "Dodaj drugą warstwę ochrony do swojego konta.",
|
||||||
"twoFactorLink": "Uwierzytelnianie dwuskładnikowe",
|
"twoFactorLink": "Uwierzytelnianie dwuskładnikowe"},
|
||||||
"connectionsTitle": "Połączone konta",
|
|
||||||
"connectionsSubtitle": "Zaloguj się jednym kliknięciem",
|
|
||||||
"connectionsDescription": "Połącz Discord lub Google ze swoim kontem hotelowym.",
|
|
||||||
"manageConnections": "Zarządzaj połączeniami"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Ustawienia",
|
"backToSettings": "← Ustawienia",
|
||||||
"title": "Uwierzytelnianie dwuskładnikowe",
|
"title": "Uwierzytelnianie dwuskładnikowe",
|
||||||
@@ -735,20 +730,10 @@
|
|||||||
"enableIntro": "Dodaj drugą warstwę zabezpieczeń za pomocą aplikacji uwierzytelniającej.",
|
"enableIntro": "Dodaj drugą warstwę zabezpieczeń za pomocą aplikacji uwierzytelniającej.",
|
||||||
"enable": "Włącz 2FA"
|
"enable": "Włącz 2FA"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Ustawienia",
|
|
||||||
"title": "Połączone konta",
|
"title": "Połączone konta",
|
||||||
"subtitle": "Połącz konto społecznościowe, aby móc zalogować się jednym kliknięciem",
|
"subtitle": "Połącz konto społecznościowe, aby móc zalogować się jednym kliknięciem",
|
||||||
"matchByEmail": "Dopasowujemy go do Twojego konta hotelowego przez e-mail, więc użyj adresu zapisanego w pliku:",
|
|
||||||
"lookupFailed": "Nie mogliśmy teraz odczytać Twoich połączonych kont. Nadal możesz się połączyć poniżej — Twój status wyświetli się, gdy będzie dostępny.",
|
|
||||||
"statusUnavailable": "Niedostępne w tym hotelu.",
|
|
||||||
"statusConnected": "Połączono — zaloguj się na to konto.",
|
|
||||||
"statusNotConnected": "Nie podłączony.",
|
|
||||||
"connected": "Połączono",
|
"connected": "Połączono",
|
||||||
"connectProvider": "Połącz {provider}",
|
|
||||||
"unavailable": "Niedostępne",
|
"unavailable": "Niedostępne",
|
||||||
"footerNote": "Po nawiązaniu połączenia przejdziesz do dostawcy w celu autoryzacji, a następnie wrócisz tutaj. Jeśli adres e-mail Twojego konta społecznościowego nie jest zgodny z kontem hotelowym, nastąpi powrót do ekranu logowania z notatką."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Zaloguj się",
|
"title": "Zaloguj się",
|
||||||
"subtitle": "Witamy ponownie — zaloguj się, aby wejść do hotelu.",
|
"subtitle": "Witamy ponownie — zaloguj się, aby wejść do hotelu.",
|
||||||
@@ -760,8 +745,6 @@
|
|||||||
"verify": "Zweryfikuj",
|
"verify": "Zweryfikuj",
|
||||||
"signIn": "Zaloguj się",
|
"signIn": "Zaloguj się",
|
||||||
"or": "lub",
|
"or": "lub",
|
||||||
"continueWithDiscord": "Kontynuuj z Discordem",
|
|
||||||
"continueWithGoogle": "Kontynuuj z Google",
|
|
||||||
"noAccount": "Nie masz konta?",
|
"noAccount": "Nie masz konta?",
|
||||||
"createOne": "Utwórz jeden",
|
"createOne": "Utwórz jeden",
|
||||||
"forgotPassword": "Zapomniałeś hasła?",
|
"forgotPassword": "Zapomniałeś hasła?",
|
||||||
|
|||||||
+1
-18
@@ -708,12 +708,7 @@
|
|||||||
"securityTitle": "Segurança",
|
"securityTitle": "Segurança",
|
||||||
"securitySubtitle": "Autenticação de dois fatores",
|
"securitySubtitle": "Autenticação de dois fatores",
|
||||||
"securityDescription": "Adicione uma segunda camada de proteção à sua conta.",
|
"securityDescription": "Adicione uma segunda camada de proteção à sua conta.",
|
||||||
"twoFactorLink": "Autenticação de dois fatores",
|
"twoFactorLink": "Autenticação de dois fatores"},
|
||||||
"connectionsTitle": "Contas conectadas",
|
|
||||||
"connectionsSubtitle": "Faça login com um clique",
|
|
||||||
"connectionsDescription": "Vincule o Discord ou o Google à sua conta do hotel.",
|
|
||||||
"manageConnections": "Gerenciar conexões"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Configurações",
|
"backToSettings": "← Configurações",
|
||||||
"title": "Autenticação de dois fatores",
|
"title": "Autenticação de dois fatores",
|
||||||
@@ -735,20 +730,10 @@
|
|||||||
"enableIntro": "Adicione uma segunda camada de segurança com um aplicativo autenticador.",
|
"enableIntro": "Adicione uma segunda camada de segurança com um aplicativo autenticador.",
|
||||||
"enable": "Habilitar 2FA"
|
"enable": "Habilitar 2FA"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Configurações",
|
|
||||||
"title": "Contas conectadas",
|
"title": "Contas conectadas",
|
||||||
"subtitle": "Vincule uma conta social para poder fazer login com um clique",
|
"subtitle": "Vincule uma conta social para poder fazer login com um clique",
|
||||||
"matchByEmail": "Nós o associamos à sua conta do hotel por e-mail, então use o endereço registrado:",
|
|
||||||
"lookupFailed": "Não foi possível ler suas contas vinculadas no momento. Você ainda pode se conectar abaixo – seu status será exibido assim que estiver disponível.",
|
|
||||||
"statusUnavailable": "Não disponível neste hotel.",
|
|
||||||
"statusConnected": "Conectado – faça login com esta conta.",
|
|
||||||
"statusNotConnected": "Não conectado.",
|
|
||||||
"connected": "Conectado",
|
"connected": "Conectado",
|
||||||
"connectProvider": "Conectar {provider}",
|
|
||||||
"unavailable": "Indisponível",
|
"unavailable": "Indisponível",
|
||||||
"footerNote": "A conexão leva você ao provedor para autorizar e depois volta aqui. Se o e-mail da sua conta social não corresponder à conta do hotel, você retornará à tela de login com uma nota."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Faça login",
|
"title": "Faça login",
|
||||||
"subtitle": "Bem-vindo de volta – faça login para entrar no hotel.",
|
"subtitle": "Bem-vindo de volta – faça login para entrar no hotel.",
|
||||||
@@ -760,8 +745,6 @@
|
|||||||
"verify": "Verifique",
|
"verify": "Verifique",
|
||||||
"signIn": "Faça login",
|
"signIn": "Faça login",
|
||||||
"or": "ou",
|
"or": "ou",
|
||||||
"continueWithDiscord": "Continuar com discórdia",
|
|
||||||
"continueWithGoogle": "Continuar com o Google",
|
|
||||||
"noAccount": "Sem conta?",
|
"noAccount": "Sem conta?",
|
||||||
"createOne": "Crie um",
|
"createOne": "Crie um",
|
||||||
"forgotPassword": "Esqueceu a senha?",
|
"forgotPassword": "Esqueceu a senha?",
|
||||||
|
|||||||
+1
-18
@@ -708,12 +708,7 @@
|
|||||||
"securityTitle": "Securitate",
|
"securityTitle": "Securitate",
|
||||||
"securitySubtitle": "Autentificare cu doi factori",
|
"securitySubtitle": "Autentificare cu doi factori",
|
||||||
"securityDescription": "Adăugați un al doilea nivel de protecție contului dvs.",
|
"securityDescription": "Adăugați un al doilea nivel de protecție contului dvs.",
|
||||||
"twoFactorLink": "Autentificare cu doi factori",
|
"twoFactorLink": "Autentificare cu doi factori"},
|
||||||
"connectionsTitle": "Conturi conectate",
|
|
||||||
"connectionsSubtitle": "Conectați-vă cu un singur clic",
|
|
||||||
"connectionsDescription": "Conectați Discord sau Google la contul dvs. de hotel.",
|
|
||||||
"manageConnections": "Gestionați conexiunile"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Setări",
|
"backToSettings": "← Setări",
|
||||||
"title": "Autentificare cu doi factori",
|
"title": "Autentificare cu doi factori",
|
||||||
@@ -735,20 +730,10 @@
|
|||||||
"enableIntro": "Adăugați un al doilea nivel de securitate cu o aplicație de autentificare.",
|
"enableIntro": "Adăugați un al doilea nivel de securitate cu o aplicație de autentificare.",
|
||||||
"enable": "Activați 2FA"
|
"enable": "Activați 2FA"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Setări",
|
|
||||||
"title": "Conturi conectate",
|
"title": "Conturi conectate",
|
||||||
"subtitle": "Conectați un cont social pentru a vă putea conecta cu un singur clic",
|
"subtitle": "Conectați un cont social pentru a vă putea conecta cu un singur clic",
|
||||||
"matchByEmail": "Îl potrivim prin e-mail cu contul dvs. de hotel, așa că utilizați adresa din dosar:",
|
|
||||||
"lookupFailed": "Nu am putut citi conturile dvs. conectate în acest moment. Vă puteți conecta în continuare mai jos — starea dvs. se va afișa odată ce va fi disponibil.",
|
|
||||||
"statusUnavailable": "Nu este disponibil la acest hotel.",
|
|
||||||
"statusConnected": "Conectat — conectați-vă cu acest cont.",
|
|
||||||
"statusNotConnected": "Nu este conectat.",
|
|
||||||
"connected": "Conectat",
|
"connected": "Conectat",
|
||||||
"connectProvider": "Conectați {provider}",
|
|
||||||
"unavailable": "Indisponibil",
|
"unavailable": "Indisponibil",
|
||||||
"footerNote": "Conectarea vă duce la furnizor pentru a autoriza, apoi înapoi aici. Dacă adresa de e-mail a contului dvs. social nu se potrivește cu un cont de hotel, veți fi returnat la ecranul de conectare cu o notă."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Conectați-vă",
|
"title": "Conectați-vă",
|
||||||
"subtitle": "Bine ați revenit - conectați-vă pentru a intra în hotel.",
|
"subtitle": "Bine ați revenit - conectați-vă pentru a intra în hotel.",
|
||||||
@@ -760,8 +745,6 @@
|
|||||||
"verify": "Verificați",
|
"verify": "Verificați",
|
||||||
"signIn": "Conectați-vă",
|
"signIn": "Conectați-vă",
|
||||||
"or": "sau",
|
"or": "sau",
|
||||||
"continueWithDiscord": "Continuați cu Discord",
|
|
||||||
"continueWithGoogle": "Continuați cu Google",
|
|
||||||
"noAccount": "Fără cont?",
|
"noAccount": "Fără cont?",
|
||||||
"createOne": "Creați unul",
|
"createOne": "Creați unul",
|
||||||
"forgotPassword": "Ai uitat parola?",
|
"forgotPassword": "Ai uitat parola?",
|
||||||
|
|||||||
+1
-20
@@ -708,12 +708,7 @@
|
|||||||
"securityTitle": "Безопасность",
|
"securityTitle": "Безопасность",
|
||||||
"securitySubtitle": "Двухфакторная аутентификация",
|
"securitySubtitle": "Двухфакторная аутентификация",
|
||||||
"securityDescription": "Добавьте в аккаунт второй уровень защиты.",
|
"securityDescription": "Добавьте в аккаунт второй уровень защиты.",
|
||||||
"twoFactorLink": "Двухфакторная аутентификация",
|
"twoFactorLink": "Двухфакторная аутентификация"},
|
||||||
"connectionsTitle": "Связанные аккаунты",
|
|
||||||
"connectionsSubtitle": "Войти одним щелчком мыши",
|
|
||||||
"connectionsDescription": "Привяжите Discord или Google к аккаунту отеля.",
|
|
||||||
"manageConnections": "Управление подключениями"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Настройки",
|
"backToSettings": "← Настройки",
|
||||||
"title": "Двухфакторная аутентификация",
|
"title": "Двухфакторная аутентификация",
|
||||||
@@ -735,20 +730,8 @@
|
|||||||
"enableIntro": "Добавьте второй уровень безопасности с помощью приложения-аутентификатора.",
|
"enableIntro": "Добавьте второй уровень безопасности с помощью приложения-аутентификатора.",
|
||||||
"enable": "Включить 2FA"
|
"enable": "Включить 2FA"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Настройки",
|
|
||||||
"title": "Связанные аккаунты",
|
"title": "Связанные аккаунты",
|
||||||
"subtitle": "Привяжите аккаунт в соцсетях, чтобы войти в систему одним щелчком мыши",
|
"subtitle": "Привяжите аккаунт в соцсетях, чтобы войти в систему одним щелчком мыши",
|
||||||
"matchByEmail": "We match it to your hotel account by e-mail, so use the address on file:",
|
|
||||||
"lookupFailed": "We couldn't read your linked accounts right now. You can still connect below — your status will show once it's available.",
|
|
||||||
"statusUnavailable": "Not available on this hotel.",
|
|
||||||
"statusConnected": "Connected — sign in with this account.",
|
|
||||||
"statusNotConnected": "Not connected.",
|
|
||||||
"connected": "Connected",
|
|
||||||
"connectProvider": "Connect {provider}",
|
|
||||||
"unavailable": "Unavailable",
|
|
||||||
"footerNote": "Connecting takes you to the provider to authorise, then back here. If your social account's e-mail doesn't match a hotel account, you'll be returned to the login screen with a note."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Sign in",
|
"title": "Sign in",
|
||||||
"subtitle": "С возвращением! Войдите в систему, чтобы войти в отель.",
|
"subtitle": "С возвращением! Войдите в систему, чтобы войти в отель.",
|
||||||
@@ -760,8 +743,6 @@
|
|||||||
"verify": "Подтвердить",
|
"verify": "Подтвердить",
|
||||||
"signIn": "Войти",
|
"signIn": "Войти",
|
||||||
"or": "или",
|
"or": "или",
|
||||||
"continueWithDiscord": "Продолжить с Discord",
|
|
||||||
"continueWithGoogle": "Продолжить с помощью Google",
|
|
||||||
"noAccount": "Нет аккаунта?",
|
"noAccount": "Нет аккаунта?",
|
||||||
"createOne": "Создать",
|
"createOne": "Создать",
|
||||||
"forgotPassword": "Забыли пароль?",
|
"forgotPassword": "Забыли пароль?",
|
||||||
|
|||||||
+1
-18
@@ -708,12 +708,7 @@
|
|||||||
"securityTitle": "Bezpečnosť",
|
"securityTitle": "Bezpečnosť",
|
||||||
"securitySubtitle": "Dvojfaktorové overenie",
|
"securitySubtitle": "Dvojfaktorové overenie",
|
||||||
"securityDescription": "Pridajte do svojho účtu druhú vrstvu ochrany.",
|
"securityDescription": "Pridajte do svojho účtu druhú vrstvu ochrany.",
|
||||||
"twoFactorLink": "Dvojfaktorové overenie",
|
"twoFactorLink": "Dvojfaktorové overenie"},
|
||||||
"connectionsTitle": "Prepojené účty",
|
|
||||||
"connectionsSubtitle": "Prihláste sa jedným kliknutím",
|
|
||||||
"connectionsDescription": "Prepojte Discord alebo Google so svojím hotelovým účtom.",
|
|
||||||
"manageConnections": "Spravujte pripojenia"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Nastavenia",
|
"backToSettings": "← Nastavenia",
|
||||||
"title": "Dvojfaktorové overenie",
|
"title": "Dvojfaktorové overenie",
|
||||||
@@ -735,20 +730,10 @@
|
|||||||
"enableIntro": "Pridajte druhú vrstvu zabezpečenia pomocou autentifikačnej aplikácie.",
|
"enableIntro": "Pridajte druhú vrstvu zabezpečenia pomocou autentifikačnej aplikácie.",
|
||||||
"enable": "Povoliť 2FA"
|
"enable": "Povoliť 2FA"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Nastavenia",
|
|
||||||
"title": "Prepojené účty",
|
"title": "Prepojené účty",
|
||||||
"subtitle": "Prepojte sociálny účet, aby ste sa mohli prihlásiť jedným kliknutím",
|
"subtitle": "Prepojte sociálny účet, aby ste sa mohli prihlásiť jedným kliknutím",
|
||||||
"matchByEmail": "Priradíme ho k vášmu hotelovému účtu prostredníctvom e-mailu, takže použite evidovanú adresu:",
|
|
||||||
"lookupFailed": "Vaše prepojené účty sa nám momentálne nepodarilo prečítať. Stále sa môžete pripojiť nižšie – váš stav sa zobrazí, keď bude k dispozícii.",
|
|
||||||
"statusUnavailable": "Nie je k dispozícii v tomto hoteli.",
|
|
||||||
"statusConnected": "Pripojené – prihláste sa pomocou tohto účtu.",
|
|
||||||
"statusNotConnected": "Nepripojené.",
|
|
||||||
"connected": "Pripojené",
|
"connected": "Pripojené",
|
||||||
"connectProvider": "Pripojiť {provider}",
|
|
||||||
"unavailable": "nedostupné",
|
"unavailable": "nedostupné",
|
||||||
"footerNote": "Po pripojení sa dostanete k poskytovateľovi na autorizáciu a potom späť sem. Ak sa e-mail vášho účtu na sociálnej sieti nezhoduje s účtom hotela, vrátite sa na prihlasovaciu obrazovku s poznámkou."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Prihláste sa",
|
"title": "Prihláste sa",
|
||||||
"subtitle": "Vitajte späť — prihláste sa pre vstup do hotela.",
|
"subtitle": "Vitajte späť — prihláste sa pre vstup do hotela.",
|
||||||
@@ -760,8 +745,6 @@
|
|||||||
"verify": "Overiť",
|
"verify": "Overiť",
|
||||||
"signIn": "Prihláste sa",
|
"signIn": "Prihláste sa",
|
||||||
"or": "alebo",
|
"or": "alebo",
|
||||||
"continueWithDiscord": "Pokračujte s Discordom",
|
|
||||||
"continueWithGoogle": "Pokračujte so službou Google",
|
|
||||||
"noAccount": "Žiadny účet?",
|
"noAccount": "Žiadny účet?",
|
||||||
"createOne": "Vytvorte si ho",
|
"createOne": "Vytvorte si ho",
|
||||||
"forgotPassword": "Zabudli ste heslo?",
|
"forgotPassword": "Zabudli ste heslo?",
|
||||||
|
|||||||
+1
-18
@@ -708,12 +708,7 @@
|
|||||||
"securityTitle": "Безбедност",
|
"securityTitle": "Безбедност",
|
||||||
"securitySubtitle": "Two-factor authentication",
|
"securitySubtitle": "Two-factor authentication",
|
||||||
"securityDescription": "Додајте други слој заштите свом налогу.",
|
"securityDescription": "Додајте други слој заштите свом налогу.",
|
||||||
"twoFactorLink": "Two-factor authentication",
|
"twoFactorLink": "Two-factor authentication"},
|
||||||
"connectionsTitle": "Повезани налози",
|
|
||||||
"connectionsSubtitle": "Пријавите се једним кликом",
|
|
||||||
"connectionsDescription": "Link Discord or Google to your hotel account.",
|
|
||||||
"manageConnections": "Управљајте везама"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Подешавања",
|
"backToSettings": "← Подешавања",
|
||||||
"title": "Двофакторска аутентификација",
|
"title": "Двофакторска аутентификација",
|
||||||
@@ -735,20 +730,10 @@
|
|||||||
"enableIntro": "Додајте други ниво безбедности помоћу апликације за аутентификацију.",
|
"enableIntro": "Додајте други ниво безбедности помоћу апликације за аутентификацију.",
|
||||||
"enable": "Омогући 2ФА"
|
"enable": "Омогући 2ФА"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Подешавања",
|
|
||||||
"title": "Повезани налози",
|
"title": "Повезани налози",
|
||||||
"subtitle": "Повежите друштвени налог да бисте се могли пријавити једним кликом",
|
"subtitle": "Повежите друштвени налог да бисте се могли пријавити једним кликом",
|
||||||
"matchByEmail": "Повезујемо га са вашим хотелским налогом путем е-поште, па користите адресу у евиденцији:",
|
|
||||||
"lookupFailed": "We couldn't read your linked accounts right now. Још увек можете да се повежете испод — ваш статус ће се приказати када буде доступан.",
|
|
||||||
"statusUnavailable": "Није доступно у овом хотелу.",
|
|
||||||
"statusConnected": "Повезано — пријавите се са овим налогом.",
|
|
||||||
"statusNotConnected": "Није повезан.",
|
|
||||||
"connected": "Повезано",
|
"connected": "Повезано",
|
||||||
"connectProvider": "Повежите {provider}",
|
|
||||||
"unavailable": "Недоступно",
|
"unavailable": "Недоступно",
|
||||||
"footerNote": "Повезивање вас води до провајдера за ауторизацију, а затим назад овде. Ако се е-пошта вашег друштвеног налога не подудара са хотелским налогом, бићете враћени на екран за пријаву са напоменом."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Пријавите се",
|
"title": "Пријавите се",
|
||||||
"subtitle": "Добродошли назад — пријавите се да бисте ушли у хотел.",
|
"subtitle": "Добродошли назад — пријавите се да бисте ушли у хотел.",
|
||||||
@@ -760,8 +745,6 @@
|
|||||||
"verify": "Верифи",
|
"verify": "Верифи",
|
||||||
"signIn": "Пријавите се",
|
"signIn": "Пријавите се",
|
||||||
"or": "или",
|
"or": "или",
|
||||||
"continueWithDiscord": "Наставите са Дисцорд-ом",
|
|
||||||
"continueWithGoogle": "Наставите са Гоогле-ом",
|
|
||||||
"noAccount": "Немате налог?",
|
"noAccount": "Немате налог?",
|
||||||
"createOne": "Направите један",
|
"createOne": "Направите један",
|
||||||
"forgotPassword": "Заборавили сте лозинку?",
|
"forgotPassword": "Заборавили сте лозинку?",
|
||||||
|
|||||||
+1
-18
@@ -708,12 +708,7 @@
|
|||||||
"securityTitle": "Säkerhet",
|
"securityTitle": "Säkerhet",
|
||||||
"securitySubtitle": "Tvåfaktorsautentisering",
|
"securitySubtitle": "Tvåfaktorsautentisering",
|
||||||
"securityDescription": "Lägg till ett andra lager av skydd till ditt konto.",
|
"securityDescription": "Lägg till ett andra lager av skydd till ditt konto.",
|
||||||
"twoFactorLink": "Tvåfaktorsautentisering",
|
"twoFactorLink": "Tvåfaktorsautentisering"},
|
||||||
"connectionsTitle": "Anslutna konton",
|
|
||||||
"connectionsSubtitle": "Logga in med ett klick",
|
|
||||||
"connectionsDescription": "Länka Discord eller Google till ditt hotellkonto.",
|
|
||||||
"manageConnections": "Hantera anslutningar"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Inställningar",
|
"backToSettings": "← Inställningar",
|
||||||
"title": "Tvåfaktorsautentisering",
|
"title": "Tvåfaktorsautentisering",
|
||||||
@@ -735,20 +730,10 @@
|
|||||||
"enableIntro": "Lägg till ett andra lager av säkerhet med en autentiseringsapp.",
|
"enableIntro": "Lägg till ett andra lager av säkerhet med en autentiseringsapp.",
|
||||||
"enable": "Aktivera 2FA"
|
"enable": "Aktivera 2FA"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Inställningar",
|
|
||||||
"title": "Anslutna konton",
|
"title": "Anslutna konton",
|
||||||
"subtitle": "Länka ett socialt konto så att du kan logga in med ett klick",
|
"subtitle": "Länka ett socialt konto så att du kan logga in med ett klick",
|
||||||
"matchByEmail": "Vi matchar det med ditt hotellkonto via e-post, så använd adressen i filen:",
|
|
||||||
"lookupFailed": "Vi kunde inte läsa dina länkade konton just nu. Du kan fortfarande ansluta nedan – din status visas när den är tillgänglig.",
|
|
||||||
"statusUnavailable": "Inte tillgängligt på detta hotell.",
|
|
||||||
"statusConnected": "Ansluten – logga in med det här kontot.",
|
|
||||||
"statusNotConnected": "Ej ansluten.",
|
|
||||||
"connected": "Ansluten",
|
"connected": "Ansluten",
|
||||||
"connectProvider": "Anslut {provider}",
|
|
||||||
"unavailable": "Ej tillgänglig",
|
"unavailable": "Ej tillgänglig",
|
||||||
"footerNote": "Anslutning tar dig till leverantören för att auktorisera och sedan tillbaka hit. Om ditt sociala kontos e-post inte stämmer överens med ett hotellkonto kommer du att återvända till inloggningsskärmen med en anteckning."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Logga in",
|
"title": "Logga in",
|
||||||
"subtitle": "Välkommen tillbaka — logga in för att komma in på hotellet.",
|
"subtitle": "Välkommen tillbaka — logga in för att komma in på hotellet.",
|
||||||
@@ -760,8 +745,6 @@
|
|||||||
"verify": "Verifiera",
|
"verify": "Verifiera",
|
||||||
"signIn": "Logga in",
|
"signIn": "Logga in",
|
||||||
"or": "eller",
|
"or": "eller",
|
||||||
"continueWithDiscord": "Fortsätt med Discord",
|
|
||||||
"continueWithGoogle": "Fortsätt med Google",
|
|
||||||
"noAccount": "Inget konto?",
|
"noAccount": "Inget konto?",
|
||||||
"createOne": "Skapa en",
|
"createOne": "Skapa en",
|
||||||
"forgotPassword": "Glömt lösenordet?",
|
"forgotPassword": "Glömt lösenordet?",
|
||||||
|
|||||||
+1
-18
@@ -708,12 +708,7 @@
|
|||||||
"securityTitle": "Güvenlik",
|
"securityTitle": "Güvenlik",
|
||||||
"securitySubtitle": "İki faktörlü kimlik doğrulama",
|
"securitySubtitle": "İki faktörlü kimlik doğrulama",
|
||||||
"securityDescription": "Hesabınıza ikinci bir koruma katmanı ekleyin.",
|
"securityDescription": "Hesabınıza ikinci bir koruma katmanı ekleyin.",
|
||||||
"twoFactorLink": "İki faktörlü kimlik doğrulama",
|
"twoFactorLink": "İki faktörlü kimlik doğrulama"},
|
||||||
"connectionsTitle": "Bağlı hesaplar",
|
|
||||||
"connectionsSubtitle": "Tek tıklamayla oturum açın",
|
|
||||||
"connectionsDescription": "Discord veya Google'ı otel hesabınıza bağlayın.",
|
|
||||||
"manageConnections": "Bağlantıları yönet"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Ayarlar",
|
"backToSettings": "← Ayarlar",
|
||||||
"title": "İki faktörlü kimlik doğrulama",
|
"title": "İki faktörlü kimlik doğrulama",
|
||||||
@@ -735,20 +730,10 @@
|
|||||||
"enableIntro": "Kimlik doğrulama uygulamasıyla ikinci bir güvenlik katmanı ekleyin.",
|
"enableIntro": "Kimlik doğrulama uygulamasıyla ikinci bir güvenlik katmanı ekleyin.",
|
||||||
"enable": "2FA'yı etkinleştir"
|
"enable": "2FA'yı etkinleştir"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Ayarlar",
|
|
||||||
"title": "Bağlı hesaplar",
|
"title": "Bağlı hesaplar",
|
||||||
"subtitle": "Tek tıklamayla oturum açabilmek için bir sosyal hesap bağlayın",
|
"subtitle": "Tek tıklamayla oturum açabilmek için bir sosyal hesap bağlayın",
|
||||||
"matchByEmail": "Bunu e-posta yoluyla otel hesabınızla eşleştiriyoruz, bu nedenle kayıtlı adresi kullanın:",
|
|
||||||
"lookupFailed": "Bağlı hesaplarınızı şu anda okuyamıyoruz. Aşağıdan hâlâ bağlanabilirsiniz; durumunuz uygun olduğunda gösterilecektir.",
|
|
||||||
"statusUnavailable": "Bu otelde mevcut değil.",
|
|
||||||
"statusConnected": "Bağlandı — bu hesapla oturum açın.",
|
|
||||||
"statusNotConnected": "Bağlı değil.",
|
|
||||||
"connected": "Bağlı",
|
"connected": "Bağlı",
|
||||||
"connectProvider": "{provider} bağlayın",
|
|
||||||
"unavailable": "Kullanılamıyor",
|
"unavailable": "Kullanılamıyor",
|
||||||
"footerNote": "Bağlanmak sizi yetkilendirmek için sağlayıcıya götürür, ardından buraya geri döner. Sosyal hesabınızın e-postası bir otel hesabıyla eşleşmiyorsa bir notla giriş ekranına geri döneceksiniz."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Oturum aç",
|
"title": "Oturum aç",
|
||||||
"subtitle": "Tekrar hoş geldiniz; otele girmek için oturum açın.",
|
"subtitle": "Tekrar hoş geldiniz; otele girmek için oturum açın.",
|
||||||
@@ -760,8 +745,6 @@
|
|||||||
"verify": "Doğrula",
|
"verify": "Doğrula",
|
||||||
"signIn": "Oturum aç",
|
"signIn": "Oturum aç",
|
||||||
"or": "veya",
|
"or": "veya",
|
||||||
"continueWithDiscord": "Discord'a devam et",
|
|
||||||
"continueWithGoogle": "Google ile devam et",
|
|
||||||
"noAccount": "Hesabın yok mu?",
|
"noAccount": "Hesabın yok mu?",
|
||||||
"createOne": "Bir tane oluştur",
|
"createOne": "Bir tane oluştur",
|
||||||
"forgotPassword": "Şifrenizi mi unuttunuz?",
|
"forgotPassword": "Şifrenizi mi unuttunuz?",
|
||||||
|
|||||||
+1
-18
@@ -708,12 +708,7 @@
|
|||||||
"securityTitle": "Безпека",
|
"securityTitle": "Безпека",
|
||||||
"securitySubtitle": "Двофакторна аутентифікація",
|
"securitySubtitle": "Двофакторна аутентифікація",
|
||||||
"securityDescription": "Додайте другий рівень захисту до свого облікового запису.",
|
"securityDescription": "Додайте другий рівень захисту до свого облікового запису.",
|
||||||
"twoFactorLink": "Двофакторна аутентифікація",
|
"twoFactorLink": "Двофакторна аутентифікація"},
|
||||||
"connectionsTitle": "Підключені облікові записи",
|
|
||||||
"connectionsSubtitle": "Увійдіть в один клік",
|
|
||||||
"connectionsDescription": "Прив’яжіть Discord або Google до свого облікового запису готелю.",
|
|
||||||
"manageConnections": "Керуйте підключеннями"
|
|
||||||
},
|
|
||||||
"settings2fa": {
|
"settings2fa": {
|
||||||
"backToSettings": "← Налаштування",
|
"backToSettings": "← Налаштування",
|
||||||
"title": "Двофакторна аутентифікація",
|
"title": "Двофакторна аутентифікація",
|
||||||
@@ -735,20 +730,10 @@
|
|||||||
"enableIntro": "Додайте другий рівень безпеки за допомогою програми автентифікації.",
|
"enableIntro": "Додайте другий рівень безпеки за допомогою програми автентифікації.",
|
||||||
"enable": "Увімкніть 2FA"
|
"enable": "Увімкніть 2FA"
|
||||||
},
|
},
|
||||||
"connections": {
|
|
||||||
"backToSettings": "← Налаштування",
|
|
||||||
"title": "Підключені облікові записи",
|
"title": "Підключені облікові записи",
|
||||||
"subtitle": "Зв’яжіть обліковий запис у соціальній мережі, щоб увійти одним клацанням миші",
|
"subtitle": "Зв’яжіть обліковий запис у соціальній мережі, щоб увійти одним клацанням миші",
|
||||||
"matchByEmail": "Ми зв’яжемо його з вашим обліковим записом готелю електронною поштою, тому використовуйте адресу в файлі:",
|
|
||||||
"lookupFailed": "Нам зараз не вдалося прочитати ваші зв’язані облікові записи. Ви все ще можете підключитися нижче — ваш статус з’явиться, коли він стане доступним.",
|
|
||||||
"statusUnavailable": "Недоступно в цьому готелі.",
|
|
||||||
"statusConnected": "Підключено — увійдіть за допомогою цього облікового запису.",
|
|
||||||
"statusNotConnected": "Не підключено.",
|
|
||||||
"connected": "Підключено",
|
"connected": "Підключено",
|
||||||
"connectProvider": "Підключити {provider}",
|
|
||||||
"unavailable": "Недоступний",
|
"unavailable": "Недоступний",
|
||||||
"footerNote": "Після підключення ви перейдете до постачальника для авторизації, а потім повернетеся сюди. Якщо адреса електронної пошти вашого соціального облікового запису не збігається з обліковим записом готелю, ви повернетеся на екран входу з приміткою."
|
|
||||||
},
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Увійдіть",
|
"title": "Увійдіть",
|
||||||
"subtitle": "Ласкаво просимо назад — увійдіть, щоб увійти в готель.",
|
"subtitle": "Ласкаво просимо назад — увійдіть, щоб увійти в готель.",
|
||||||
@@ -760,8 +745,6 @@
|
|||||||
"verify": "Підтвердити",
|
"verify": "Підтвердити",
|
||||||
"signIn": "Увійдіть",
|
"signIn": "Увійдіть",
|
||||||
"or": "або",
|
"or": "або",
|
||||||
"continueWithDiscord": "Продовжуйте з Discord",
|
|
||||||
"continueWithGoogle": "Продовжуйте з Google",
|
|
||||||
"noAccount": "Немає облікового запису?",
|
"noAccount": "Немає облікового запису?",
|
||||||
"createOne": "Створіть один",
|
"createOne": "Створіть один",
|
||||||
"forgotPassword": "Забули пароль?",
|
"forgotPassword": "Забули пароль?",
|
||||||
|
|||||||
Reference in new issue
Block a user