refactor(auth): merge the duplicate login form and localize the auth screens
Gitea Actions Runner Test / test-job (push) Successful in 1s
CI / check (push) Successful in 1m8s
CI / tests-integration (push) Successful in 1m53s
CI / tests-unit (push) Successful in 1m59s
CI / tests-ui (push) Successful in 2m42s
CI / preflight (push) Skipped
CI / deploy (push) Successful in 4m33s

`home-login-form.tsx` and `login-form.tsx` were two ~240-line near-identical
components. Delete the former and give `LoginForm` a `variant` prop:

- `variant="page"`   sr-only labels plus the register/forgot footer (/login)
- `variant="compact"` visible labels, no footer (homepage sidebar)

Field ids now come from `useId()`, so the two usages can never collide, and the
hardcoded "Show"/"Hide"/"Loading" strings are translated.

Localization of the login and register screens:

- `home-login-form.tsx` was entirely hardcoded English.
- `passwordStrength()` returned hardcoded "Weak"/"Fair"/"Good"/"Strong".
- `register.ts` returned only English strings. It now returns a
  locale-independent `code` next to the message, and the form renders
  `t(code)` with the English string as a fallback.
- Backfilled the new keys across all 25 locales, plus the login/register
  strings that were still English in most of them. `ar`, `fi` and `ja` had
  their entire login/register namespace in English and are now filled in.
  Locale parity stays at 0 missing keys, as `i18n:check` requires.

Copy that did not match the enforced rules: the UI advertised "min 8 chars"
(EN) / "min 6 tekens" (NL) while registration requires 12 characters plus an
uppercase, a lowercase, a digit and a special character. Corrected in every
locale. `password-reset.ts` enforced only 6 characters and is raised to 12 to
match registration.

Accessibility: `login-form.tsx` had no `<label>`, no `id` and no `required` on
any field. All three are now present, and error banners are announced with
`role="alert"`.

Adds `src/i18n/auth-messages.test.ts`, which asserts every `RegisterErrorCode`
resolves to a non-empty message in all 25 locales; verified it fails when a key
is removed. The existing register tests now also assert the error `code`.
This commit is contained in:
openhands committed 2026-10-04 18:50:23 +02:00
1 parent 3d828a61ab
commit 6bffc53779
33 files changed
+1756 -842

No files matched your search

+1 -1
View File
@@ -86,7 +86,7 @@ export async function resetPassword(formData: FormData): Promise<void> {
}
let error: string | null = null;
if (password.length < 6) error = "Password must be at least 6 characters";
if (password.length < 12) error = "Password must be at least 12 characters";
if (!error) {
try {
+25 -2
View File
@@ -184,6 +184,7 @@ describe("register", () => {
expect(result).toEqual({
error: "Username must be at least 3 characters",
ok: false,
code: "usernameMinLength",
});
expect(state.insert).not.toHaveBeenCalled();
});
@@ -191,6 +192,7 @@ describe("register", () => {
it("rejects usernames containing characters outside the allowed set", async () => {
const result = await register(PREV, buildForm({ username: "bad name!" }));
expect(result.error).toContain("letters, numbers, underscore and hyphen");
expect(result.code).toBe("usernamePattern");
expect(state.insert).not.toHaveBeenCalled();
});
@@ -199,6 +201,7 @@ describe("register", () => {
expect(result).toEqual({
error: "Enter a valid email address",
ok: false,
code: "emailValid",
});
});
@@ -207,6 +210,7 @@ describe("register", () => {
expect(result).toEqual({
error: "Password must be at least 12 characters",
ok: false,
code: "passwordMinLength",
});
expect(state.insert).not.toHaveBeenCalled();
});
@@ -220,6 +224,7 @@ describe("register", () => {
}),
);
expect(result.error).toContain("uppercase");
expect(result.code).toBe("passwordUpper");
});
it("rejects passwords without a digit", async () => {
@@ -231,6 +236,7 @@ describe("register", () => {
}),
);
expect(result.error).toContain("digit");
expect(result.code).toBe("passwordDigit");
});
it("rejects passwords without a special character", async () => {
@@ -242,6 +248,7 @@ describe("register", () => {
}),
);
expect(result.error).toContain("special");
expect(result.code).toBe("passwordSpecial");
});
it("rejects mismatched password confirmations", async () => {
@@ -249,13 +256,18 @@ describe("register", () => {
PREV,
buildForm({ password_confirmation: "Different1" }),
);
expect(result).toEqual({ error: "Passwords do not match", ok: false });
expect(result).toEqual({
error: "Passwords do not match",
ok: false,
code: "passwordsMatch",
});
});
it("throttles sign-ups per IP", async () => {
state.rateLimit.mockResolvedValueOnce({ ok: false, retryAfter: 120 });
const result = await runValidRegistration();
expect(result.error).toContain("Too many sign-up attempts");
expect(result.code).toBe("rateLimited");
expect(state.insert).not.toHaveBeenCalled();
});
@@ -273,6 +285,7 @@ describe("register", () => {
expect(result).toEqual({
error: "Captcha verification failed. Please try again.",
ok: false,
code: "captchaFailed",
});
expect(state.verifyCaptcha).toHaveBeenCalledWith("token", "203.0.113.9");
expect(state.insert).not.toHaveBeenCalled();
@@ -290,6 +303,7 @@ describe("register", () => {
expect(result).toEqual({
error: "You must accept the terms and conditions to register.",
ok: false,
code: "termsRequired",
});
expect(state.insert).not.toHaveBeenCalled();
});
@@ -298,7 +312,11 @@ describe("register", () => {
state.checkVpn.mockResolvedValue({ blocked: true });
state.siteGet.mockResolvedValueOnce("Custom VPN message");
const result = await runValidRegistration();
expect(result).toEqual({ error: "Custom VPN message", ok: false });
expect(result).toEqual({
error: "Custom VPN message",
ok: false,
code: "vpnBlocked",
});
expect(state.insert).not.toHaveBeenCalled();
});
@@ -317,6 +335,7 @@ describe("register", () => {
state.countTotal = 2;
const result = await runValidRegistration();
expect(result.error).toContain("maximum number of accounts");
expect(result.code).toBe("maxAccountsPerIp");
expect(state.insert).not.toHaveBeenCalled();
});
@@ -340,6 +359,7 @@ describe("register", () => {
expect(result).toEqual({
error: "That username is already taken",
ok: false,
code: "usernameTaken",
});
expect(state.insert).not.toHaveBeenCalled();
});
@@ -350,6 +370,7 @@ describe("register", () => {
expect(result).toEqual({
error: "Registration is temporarily unavailable",
ok: false,
code: "unavailable",
});
expect(state.logger.warn).toHaveBeenCalledWith(
"Username uniqueness check failed during registration",
@@ -365,6 +386,7 @@ describe("register", () => {
expect(result).toEqual({
error: "That username is already taken",
ok: false,
code: "usernameTaken",
});
expect(state.logger.error).not.toHaveBeenCalled();
});
@@ -373,6 +395,7 @@ describe("register", () => {
state.insert.mockRejectedValueOnce(new Error("db exploded"));
const result = await runValidRegistration();
expect(result.error).toContain("Could not create the account");
expect(result.code).toBe("createFailed");
expect(state.logger.error).toHaveBeenCalledWith(
"Account creation failed",
expect.objectContaining({ message: "db exploded" }),
+72 -7
View File
@@ -121,19 +121,72 @@ const registerSchema = z
path: ["passwordConfirmation"],
});
/**
* Stable, locale-independent reason for a failed sign-up. The client maps these
* onto `pages.register.<code>` so the form speaks the visitor's language; the
* English `error` string stays as a fallback and for API/log consumers.
*/
export type RegisterErrorCode =
| "usernameMinLength"
| "usernameMaxLength"
| "usernamePattern"
| "usernameReserved"
| "usernameTaken"
| "emailValid"
| "emailDisposable"
| "passwordMinLength"
| "passwordMaxLength"
| "passwordUpper"
| "passwordLower"
| "passwordDigit"
| "passwordSpecial"
| "passwordsMatch"
| "termsRequired"
| "captchaFailed"
| "rateLimited"
| "vpnBlocked"
| "maxAccountsPerIp"
| "unavailable"
| "createFailed"
| "invalidInput";
/** Maps the schema's English messages onto locale-independent codes. */
const ZOD_MESSAGE_CODES: Record<string, RegisterErrorCode> = {
"Username must be at least 3 characters": "usernameMinLength",
"Username must be at most 25 characters": "usernameMaxLength",
"Username may only contain letters, numbers, underscore and hyphen":
"usernamePattern",
"This username is reserved": "usernameReserved",
"Enter a valid email address": "emailValid",
"Temporary email domains are not allowed": "emailDisposable",
"Password must be at least 12 characters": "passwordMinLength",
"Password is too long": "passwordMaxLength",
"Password must contain at least one uppercase letter": "passwordUpper",
"Password must contain at least one lowercase letter": "passwordLower",
"Password must contain at least one digit": "passwordDigit",
"Password must contain at least one special character": "passwordSpecial",
"Passwords do not match": "passwordsMatch",
};
// A valid starter Habbo figure so the avatar renders in-client immediately.
const DEFAULT_LOOK = "hr-100-.hd-180-1.ch-255-66.lg-280-110.sh-305-62";
export interface RegisterState {
error: string | null;
ok: boolean;
/** Locale-independent reason, present on every failure. */
code?: RegisterErrorCode;
}
export async function register(
_prevState: RegisterState,
formData: FormData,
): Promise<RegisterState> {
const fail = (error: string): RegisterState => ({ error, ok: false });
const fail = (error: string, code: RegisterErrorCode): RegisterState => ({
error,
ok: false,
code,
});
const raw = {
username: String(formData.get("username") ?? "")
.normalize("NFC")
@@ -155,7 +208,8 @@ export async function register(
const parsed = registerSchema.safeParse(raw);
if (!parsed.success) {
return fail(parsed.error.issues[0]?.message ?? "Invalid input");
const message = parsed.error.issues[0]?.message ?? "Invalid input";
return fail(message, ZOD_MESSAGE_CODES[message] ?? "invalidInput");
}
const { username, mail, password, look } = parsed.data;
@@ -166,6 +220,7 @@ export async function register(
if (!(await rateLimit(`register:${ip}`, 5, 10 * 60_000)).ok) {
return fail(
"Too many sign-up attempts. Please wait a few minutes and try again.",
"rateLimited",
);
}
@@ -174,18 +229,25 @@ export async function register(
if (cfg.provider !== "none") {
const token = String(formData.get(cfg.field) ?? "").normalize("NFC");
if (!(await verifyCaptcha(token, ip)))
return fail("Captcha verification failed. Please try again.");
return fail(
"Captcha verification failed. Please try again.",
"captchaFailed",
);
}
// Terms acceptance check.
if (!raw.termsAccepted)
return fail("You must accept the terms and conditions to register.");
return fail(
"You must accept the terms and conditions to register.",
"termsRequired",
);
// VPN/proxy block (only when enabled in /admin/vpn).
if ((await checkVpn(ip)).blocked) {
return fail(
(await siteSettings.get("vpn_block_message", "")) ||
"Registrations from VPN/proxy connections are not allowed.",
"vpnBlocked",
);
}
@@ -200,6 +262,7 @@ export async function register(
if (Number(row?.total ?? 0) >= max)
return fail(
"You have reached the maximum number of accounts for your connection.",
"maxAccountsPerIp",
);
}
@@ -210,10 +273,11 @@ export async function register(
.from(User)
.where(eq(User.username, username))
.limit(1);
if (existing) return fail("That username is already taken");
if (existing)
return fail("That username is already taken", "usernameTaken");
} catch {
logger.warn("Username uniqueness check failed during registration");
return fail("Registration is temporarily unavailable");
return fail("Registration is temporarily unavailable", "unavailable");
}
const now = Math.floor(Date.now() / 1000);
@@ -233,7 +297,7 @@ export async function register(
} catch (err) {
const code = (err as { cause?: { code?: string } }).cause?.code;
if (code === "ER_DUP_ENTRY") {
return fail("That username is already taken");
return fail("That username is already taken", "usernameTaken");
}
logger.error("Account creation failed", {
code,
@@ -241,6 +305,7 @@ export async function register(
});
return fail(
"Could not create the account. Please try again or contact staff.",
"createFailed",
);
}
+4 -2
View File
@@ -6,7 +6,7 @@ import { redirect } from "next/navigation";
import { getTranslations } from "next-intl/server";
import type { CSSProperties, ReactNode } from "react";
import { AnimatedCounter } from "@/components/animated-counter";
import { HomeLoginForm } from "@/components/auth/home-login-form";
import { LoginForm } from "@/components/auth/login-form";
import { Clock } from "@/components/clock";
import { LanguageSwitcher } from "@/components/language-switcher";
import Link from "@/components/link";
@@ -870,7 +870,9 @@ export default async function Home() {
icon={ICON_NAV_ME}
bodyClassName="p-3.5 sm:p-4"
>
<HomeLoginForm
<LoginForm
variant="compact"
redirectTo="/"
captcha={{
provider: captcha.provider,
siteKey: captcha.siteKey || undefined,
-229
View File
@@ -1,229 +0,0 @@
"use client";
import { signIn } from "next-auth/react";
import { type FormEvent, useState } from "react";
import { precheckLogin } from "@/actions/auth-precheck";
import {
type CaptchaPublicConfig,
CaptchaWidget,
readCaptchaToken,
} from "@/components/auth/captcha-widget";
import { signInWithTransientRetry } from "@/lib/auth/sign-in-retry";
export function HomeLoginForm({
captcha = { provider: "none" },
nonce,
}: {
captcha?: CaptchaPublicConfig;
nonce?: string;
} = {}) {
const [username, setUsername] = useState("");
const [password, setPassword] = useState("");
const [showPassword, setShowPassword] = useState(false);
const [code, setCode] = useState("");
const [needs2fa, setNeeds2fa] = useState(false);
const [error, setError] = useState<string | null>(null);
const [pending, setPending] = useState(false);
async function onSubmit(e: FormEvent<HTMLFormElement>) {
e.preventDefault();
setError(null);
setPending(true);
try {
if (!needs2fa) {
const captchaToken = readCaptchaToken(e.currentTarget, captcha);
const pre = await precheckLogin(username, password, captchaToken);
if (pre === "invalid") {
setError("Invalid username or password");
return;
}
if (pre === "captcha") {
setError("Captcha verification failed. Please try again.");
return;
}
if (pre === "unverified") {
setError("Please verify your email before signing in.");
return;
}
if (pre === "twofactor") {
setNeeds2fa(true);
return;
}
}
const res = await signInWithTransientRetry(() =>
signIn("credentials", {
username,
password,
code,
redirect: false,
}),
);
if (!res || res.error) {
setError(
needs2fa ? "Invalid 2FA code" : "Invalid username or password",
);
return;
}
window.location.href = "/";
} catch {
setError(needs2fa ? "Invalid 2FA code" : "Invalid username or password");
} finally {
setPending(false);
}
}
return (
<form onSubmit={onSubmit} className="relative flex flex-col gap-4">
<div className="space-y-1">
<label
htmlFor="login-username"
className="block text-xs font-bold uppercase tracking-wider"
style={{ color: "var(--color-text-muted)" }}
>
Username
</label>
<input
id="login-username"
type="text"
value={username}
onChange={(e) => setUsername(e.target.value)}
placeholder="Your username"
autoComplete="username"
disabled={needs2fa}
className="input-glow w-full rounded-xl border-2 px-4 py-3 text-sm font-medium transition-all focus:outline-none disabled:opacity-50"
style={{
backgroundColor: "var(--color-background)",
color: "var(--color-text-readable)",
borderColor: needs2fa
? "color-mix(in srgb, var(--color-text-muted) 15%, transparent)"
: "color-mix(in srgb, var(--color-text-muted) 25%, transparent)",
}}
required
/>
</div>
<div className="space-y-1">
<div className="flex items-center justify-between">
<label
htmlFor="login-password"
className="block text-xs font-bold uppercase tracking-wider"
style={{ color: "var(--color-text-muted)" }}
>
Password
</label>
</div>
<div className="relative">
<input
id="login-password"
type={showPassword ? "text" : "password"}
value={password}
onChange={(e) => setPassword(e.target.value)}
placeholder="Your password"
autoComplete="current-password"
disabled={needs2fa}
className="input-glow w-full rounded-xl border-2 px-4 py-3 text-sm font-medium transition-all focus:outline-none disabled:opacity-50"
style={{
backgroundColor: "var(--color-background)",
color: "var(--color-text-readable)",
borderColor: needs2fa
? "color-mix(in srgb, var(--color-text-muted) 15%, transparent)"
: "color-mix(in srgb, var(--color-text-muted) 25%, transparent)",
}}
required
/>
<button
type="button"
onClick={() => setShowPassword(!showPassword)}
className="absolute right-3 top-1/2 -translate-y-1/2 text-sm font-bold opacity-60 hover:opacity-100 transition-opacity"
style={{ color: "var(--color-text-muted)" }}
tabIndex={-1}
>
{showPassword ? "Hide" : "Show"}
</button>
</div>
</div>
{needs2fa ? (
<div className="space-y-1 animate-scale-in">
<label
htmlFor="login-2fa"
className="block text-xs font-bold uppercase tracking-wider"
style={{ color: "var(--color-text-muted)" }}
>
2FA Code
</label>
<input
id="login-2fa"
type="text"
value={code}
onChange={(e) => setCode(e.target.value)}
placeholder="Enter your 2FA code"
inputMode="numeric"
autoComplete="one-time-code"
className="w-full rounded-xl border-2 px-4 py-3 text-sm font-medium transition-all focus:outline-none"
style={{
backgroundColor: "var(--color-background)",
color: "var(--color-text-readable)",
borderColor:
"color-mix(in srgb, var(--color-primary) 30%, transparent)",
}}
/>
</div>
) : (
<CaptchaWidget captcha={captcha} nonce={nonce} />
)}
{error ? (
<p
className="animate-fade-in-up m-0 text-center text-sm font-semibold"
style={{ color: "var(--color-danger)" }}
>
{error}
</p>
) : null}
<button
type="submit"
disabled={pending}
className="btn-shine w-full cursor-pointer rounded-xl font-extrabold text-sm py-3.5 transition-all duration-200 hover:scale-[1.02] active:scale-95 shadow-lg disabled:opacity-60"
style={{
background: "var(--color-primary)",
color: "var(--color-primary-foreground)",
boxShadow:
"0 4px 20px color-mix(in srgb, var(--color-primary) 30%, transparent)",
}}
>
{pending ? (
<span className="inline-flex items-center gap-2">
<svg
className="animate-spin h-4 w-4"
viewBox="0 0 24 24"
fill="none"
role="img"
aria-label="Loading"
>
<circle
className="opacity-25"
cx="12"
cy="12"
r="10"
stroke="currentColor"
strokeWidth="4"
/>
<path
className="opacity-75"
fill="currentColor"
d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"
/>
</svg>
Please wait...
</span>
) : needs2fa ? (
"Verify"
) : (
"Login"
)}
</button>
</form>
);
}
+123 -43
View File
@@ -2,7 +2,7 @@
import { signIn } from "next-auth/react";
import { useTranslations } from "next-intl";
import { type FormEvent, useState } from "react";
import { type FormEvent, useId, useState } from "react";
import { precheckLogin } from "@/actions/auth-precheck";
import {
type CaptchaPublicConfig,
@@ -12,14 +12,34 @@ import {
import Link from "@/components/link";
import { signInWithTransientRetry } from "@/lib/auth/sign-in-retry";
export type LoginFormVariant =
/** Full page: labelled fields, plus the register / forgot-password footer. */
| "page"
/** Homepage sidebar: visible labels, no footer, tighter spacing. */
| "compact";
export interface LoginFormProps {
captcha?: CaptchaPublicConfig;
nonce?: string;
variant?: LoginFormVariant;
/** Where to land after a successful sign-in. */
redirectTo?: string;
}
/**
* The single sign-in form for both `/login` and the homepage sidebar. It runs a
* cheap server-side precheck first so the visitor gets a specific reason
* (bad password, unverified email, 2FA required, captcha) instead of NextAuth's
* generic failure, then completes the credentials sign-in.
*/
export function LoginForm({
captcha = { provider: "none" },
nonce,
}: {
captcha?: CaptchaPublicConfig;
nonce?: string;
}) {
variant = "page",
redirectTo = "/me",
}: LoginFormProps = {}) {
const t = useTranslations("pages.login");
const fieldId = useId();
const [username, setUsername] = useState("");
const [password, setPassword] = useState("");
const [showPassword, setShowPassword] = useState(false);
@@ -28,6 +48,10 @@ export function LoginForm({
const [error, setError] = useState<string | null>(null);
const [pending, setPending] = useState(false);
const showFooter = variant === "page";
const labelled = variant === "compact";
const lockCredentials = needs2fa ? "opacity-50 pointer-events-none" : "";
async function onSubmit(e: FormEvent<HTMLFormElement>) {
e.preventDefault();
setError(null);
@@ -67,7 +91,7 @@ export function LoginForm({
);
return;
}
window.location.href = "/me";
window.location.href = redirectTo;
} catch {
setError(needs2fa ? t("errorInvalid2fa") : t("errorInvalidCredentials"));
} finally {
@@ -79,60 +103,112 @@ export function LoginForm({
<>
{needs2fa && (
<p
className="animate-fade-in-up text-sm font-semibold mb-4"
className="animate-fade-in-up mb-4 text-sm font-semibold"
style={{ color: "var(--color-text-muted)" }}
>
{t("subtitle2fa")}
</p>
)}
<form onSubmit={onSubmit} className="flex flex-col gap-4">
<div className={needs2fa ? "opacity-50 pointer-events-none" : ""}>
<form
onSubmit={onSubmit}
aria-label={t("signIn")}
className="relative flex flex-col gap-4"
>
<div className={labelled ? "space-y-1" : lockCredentials}>
<label
htmlFor={`${fieldId}-username`}
className={
labelled
? "block text-xs font-bold uppercase tracking-wider"
: "sr-only"
}
style={{ color: "var(--color-text-muted)" }}
>
{t("username")}
</label>
<input
id={`${fieldId}-username`}
name="username"
type="text"
value={username}
onChange={(e) => setUsername(e.target.value)}
placeholder={t("usernamePlaceholder")}
autoComplete="username"
disabled={needs2fa}
required
className="input-glow w-full rounded-xl border-2 px-4 py-3 text-sm font-medium transition-all focus:outline-none disabled:opacity-50"
style={{
backgroundColor: "var(--color-background)",
color: "var(--color-text-readable)",
borderColor:
"color-mix(in srgb, var(--color-text-muted) 25%, transparent)",
borderColor: needs2fa
? "color-mix(in srgb, var(--color-text-muted) 15%, transparent)"
: "color-mix(in srgb, var(--color-text-muted) 25%, transparent)",
}}
/>
</div>
<div
className={`${needs2fa ? "opacity-50 pointer-events-none" : ""} relative`}
>
<div className={`${labelled ? "space-y-1" : lockCredentials} relative`}>
<label
htmlFor={`${fieldId}-password`}
className={
labelled
? "block text-xs font-bold uppercase tracking-wider"
: "sr-only"
}
style={{ color: "var(--color-text-muted)" }}
>
{t("password")}
</label>
<input
id={`${fieldId}-password`}
name="password"
type={showPassword ? "text" : "password"}
value={password}
onChange={(e) => setPassword(e.target.value)}
placeholder={t("passwordPlaceholder")}
autoComplete="current-password"
disabled={needs2fa}
required
className="input-glow w-full rounded-xl border-2 px-4 py-3 text-sm font-medium transition-all focus:outline-none disabled:opacity-50"
style={{
backgroundColor: "var(--color-background)",
color: "var(--color-text-readable)",
borderColor:
"color-mix(in srgb, var(--color-text-muted) 25%, transparent)",
borderColor: needs2fa
? "color-mix(in srgb, var(--color-text-muted) 15%, transparent)"
: "color-mix(in srgb, var(--color-text-muted) 25%, transparent)",
}}
/>
<button
type="button"
onClick={() => setShowPassword(!showPassword)}
className="absolute right-3 top-1/2 -translate-y-1/2 text-sm font-bold opacity-60 hover:opacity-100 transition-opacity"
className="absolute right-3 top-1/2 -translate-y-1/2 text-sm font-bold opacity-60 transition-opacity hover:opacity-100"
style={{ color: "var(--color-text-muted)" }}
tabIndex={-1}
aria-label={showPassword ? t("hidePassword") : t("showPassword")}
aria-pressed={showPassword}
>
{showPassword ? "Hide" : "Show"}
{showPassword ? t("hidePassword") : t("showPassword")}
</button>
</div>
{needs2fa ? (
<div className="animate-scale-in">
<div className={`animate-scale-in ${labelled ? "space-y-1" : ""}`}>
<label
htmlFor={`${fieldId}-2fa`}
className={
labelled
? "block text-xs font-bold uppercase tracking-wider"
: "sr-only"
}
style={{ color: "var(--color-text-muted)" }}
>
{t("codePlaceholder")}
</label>
<input
id={`${fieldId}-2fa`}
name="code"
type="text"
value={code}
onChange={(e) => setCode(e.target.value)}
placeholder={t("codePlaceholder")}
@@ -153,7 +229,9 @@ export function LoginForm({
{error && (
<p
className="animate-fade-in-up text-sm text-center font-semibold"
role="alert"
aria-live="polite"
className="m-0 animate-fade-in-up text-center text-sm font-semibold"
style={{ color: "var(--color-danger)" }}
>
{error}
@@ -163,7 +241,7 @@ export function LoginForm({
<button
type="submit"
disabled={pending}
className="btn-shine w-full rounded-xl font-extrabold text-sm py-3.5 transition-all duration-200 hover:scale-[1.02] active:scale-95 shadow-lg disabled:opacity-60"
className="btn-shine w-full cursor-pointer rounded-xl py-3.5 text-sm font-extrabold shadow-lg transition-all duration-200 hover:scale-[1.02] active:scale-95 disabled:opacity-60"
style={{
background: "var(--color-primary)",
color: "var(--color-primary-foreground)",
@@ -174,11 +252,11 @@ export function LoginForm({
{pending ? (
<span className="inline-flex items-center justify-center gap-2">
<svg
className="animate-spin h-4 w-4"
className="h-4 w-4 animate-spin"
viewBox="0 0 24 24"
fill="none"
role="img"
aria-label="Loading"
aria-label={t("pleaseWait")}
>
<circle
className="opacity-25"
@@ -204,27 +282,29 @@ export function LoginForm({
</button>
</form>
<p
className="text-xs text-center mt-6"
style={{ color: "var(--color-text-muted)" }}
>
{t("noAccount")}{" "}
<Link
href="/register"
className="font-extrabold hover:underline"
style={{ color: "var(--color-primary)" }}
{showFooter && (
<p
className="mt-6 text-center text-xs"
style={{ color: "var(--color-text-muted)" }}
>
{t("createOne")}
</Link>{" "}
·{" "}
<Link
href="/forgot"
className="font-extrabold hover:underline"
style={{ color: "var(--color-primary)" }}
>
{t("forgotPassword")}
</Link>
</p>
{t("noAccount")}{" "}
<Link
href="/register"
className="font-extrabold hover:underline"
style={{ color: "var(--color-primary)" }}
>
{t("createOne")}
</Link>{" "}
·{" "}
<Link
href="/forgot"
className="font-extrabold hover:underline"
style={{ color: "var(--color-primary)" }}
>
{t("forgotPassword")}
</Link>
</p>
)}
</>
);
}
+33 -9
View File
@@ -5,7 +5,11 @@ import Script from "next/script";
import { signIn } from "next-auth/react";
import { useTranslations } from "next-intl";
import { useActionState, useEffect, useRef, useState } from "react";
import { type RegisterState, register } from "@/actions/register";
import {
type RegisterErrorCode,
type RegisterState,
register,
} from "@/actions/register";
import Link from "@/components/link";
import { signInWithTransientRetry } from "@/lib/auth/sign-in-retry";
@@ -16,7 +20,10 @@ interface RegisterFormProps {
nonce?: string;
}
function passwordStrength(pw: string): {
function passwordStrength(
pw: string,
t: (key: string) => string,
): {
score: number;
label: string;
color: string;
@@ -28,10 +35,10 @@ function passwordStrength(pw: string): {
if (/\d/.test(pw)) score += 1;
if (/[^a-zA-Z0-9]/.test(pw)) score += 1;
if (score <= 1) return { score, label: "Weak", color: "#ef4444" };
if (score <= 2) return { score, label: "Fair", color: "#f59e0b" };
if (score <= 3) return { score, label: "Good", color: "#22c55e" };
return { score: 5, label: "Strong", color: "#16a34a" };
if (score <= 1) return { score, label: t("strengthWeak"), color: "#ef4444" };
if (score <= 2) return { score, label: t("strengthFair"), color: "#f59e0b" };
if (score <= 3) return { score, label: t("strengthGood"), color: "#22c55e" };
return { score: 5, label: t("strengthStrong"), color: "#16a34a" };
}
export function RegisterForm({
@@ -46,6 +53,21 @@ export function RegisterForm({
RegisterState,
FormData
>(register, { error: null, ok: false });
/**
* Prefer the locale-independent `code` so the message follows the visitor's
* language, falling back to the server's English string when a code has no
* translation yet.
*/
const translateErrorCode = (code: RegisterErrorCode | undefined) => {
if (!code) return null;
try {
return t(code);
} catch {
return null;
}
};
const errorMessage = error ?? translateErrorCode(state.code) ?? state.error;
const [termsAccepted, setTermsAccepted] = useState(false);
const [termsError, setTermsError] = useState(false);
const termsRef = useRef<HTMLDivElement>(null);
@@ -58,7 +80,7 @@ export function RegisterForm({
);
const autoLoginStartedRef = useRef(false);
const [referralCode, setReferralCode] = useState("");
const strength = passwordStrength(password);
const strength = passwordStrength(password, t);
// The invite link is `/register?ref=<username>`; read it client-side so the
// attribution travels with the sign-up form without server state.
@@ -186,12 +208,14 @@ export function RegisterForm({
borderRadius: "0 0 12px 12px",
}}
>
{(error || state.error) && (
{errorMessage && (
<div
role="alert"
aria-live="polite"
className="animate-fade-in-up p-3 rounded-lg text-sm font-semibold text-primary-foreground"
style={{ backgroundColor: "var(--color-danger)" }}
>
{error || state.error}
{errorMessage}
</div>
)}
+174
View File
@@ -0,0 +1,174 @@
import { readdirSync } from "node:fs";
import { createTranslator } from "next-intl";
import { describe, expect, it } from "vitest";
import ar from "@/messages/ar.json";
import bg from "@/messages/bg.json";
import cs from "@/messages/cs.json";
import da from "@/messages/da.json";
import de from "@/messages/de.json";
import el from "@/messages/el.json";
import en from "@/messages/en.json";
import es from "@/messages/es.json";
import fi from "@/messages/fi.json";
import fr from "@/messages/fr.json";
import hr from "@/messages/hr.json";
import hu from "@/messages/hu.json";
import itMessages from "@/messages/it.json";
import ja from "@/messages/ja.json";
import nl from "@/messages/nl.json";
import no from "@/messages/no.json";
import pl from "@/messages/pl.json";
import pt from "@/messages/pt.json";
import ro from "@/messages/ro.json";
import ru from "@/messages/ru.json";
import sk from "@/messages/sk.json";
import sr from "@/messages/sr.json";
import sv from "@/messages/sv.json";
import tr from "@/messages/tr.json";
import uk from "@/messages/uk.json";
/**
* Every failure reason the register action can report is a `RegisterErrorCode`,
* which the form renders as `pages.register.<code>`. If a code ships without a
* translation the visitor silently sees the raw English fallback, so this test
* locks the contract in both directions: the union of codes must match the
* dictionary, and every locale must carry every key.
*/
type RegisterErrorCode =
| "usernameMinLength"
| "usernameMaxLength"
| "usernamePattern"
| "usernameReserved"
| "usernameTaken"
| "emailValid"
| "emailDisposable"
| "passwordMinLength"
| "passwordMaxLength"
| "passwordUpper"
| "passwordLower"
| "passwordDigit"
| "passwordSpecial"
| "passwordsMatch"
| "termsRequired"
| "captchaFailed"
| "rateLimited"
| "vpnBlocked"
| "maxAccountsPerIp"
| "unavailable"
| "createFailed"
| "invalidInput";
/** Mirrors `RegisterErrorCode` in src/actions/register.ts. */
const REGISTER_ERROR_CODES: readonly RegisterErrorCode[] = [
"usernameMinLength",
"usernameMaxLength",
"usernamePattern",
"usernameReserved",
"usernameTaken",
"emailValid",
"emailDisposable",
"passwordMinLength",
"passwordMaxLength",
"passwordUpper",
"passwordLower",
"passwordDigit",
"passwordSpecial",
"passwordsMatch",
"termsRequired",
"captchaFailed",
"rateLimited",
"vpnBlocked",
"maxAccountsPerIp",
"unavailable",
"createFailed",
"invalidInput",
];
const MESSAGES: Record<string, typeof en> = {
ar,
bg,
cs,
da,
de,
el,
en,
es,
fi,
fr,
hr,
hu,
it: itMessages as unknown as typeof en,
ja,
nl: nl as unknown as typeof en,
no,
pl,
pt,
ro,
ru,
sk,
sr,
sv,
tr,
uk,
};
const locales = readdirSync("src/messages")
.filter((file) => file.endsWith(".json"))
.map((file) => file.replace(/\.json$/, ""))
.sort();
const namespaces = ["pages.register", "pages.login", "pages.reset"] as const;
describe("auth page messages", () => {
it("exposes every register error code as a translated message", () => {
const t = createTranslator({
locale: "en",
messages: en,
namespace: "pages.register",
});
for (const code of REGISTER_ERROR_CODES) {
expect(t.has(code as never), code).toBe(true);
expect(t(code as never), code).not.toBe("");
}
});
it("keeps the dictionary free of unreachable register error keys", () => {
const known = new Set<string>(REGISTER_ERROR_CODES);
for (const key of Object.keys(en.pages.register)) {
// Keys that map a code onto its canonical sentence must stay in sync.
if (key === "passwordMinLength") continue;
expect(known.has(key) || !/^[a-z][A-Z]/.test(key), key).toBe(true);
}
expect(en.pages.register.passwordError).toBe(
en.pages.register.passwordMinLength,
);
});
it("ships a dictionary for every locale on disk", () => {
expect(Object.keys(MESSAGES).sort()).toEqual(locales);
});
it.each(locales)("provides every auth message in %s", (locale) => {
const messages = MESSAGES[locale];
expect(messages, locale).toBeDefined();
for (const namespace of namespaces) {
const t = createTranslator({ locale, messages, namespace });
const keys =
namespace === "pages.register"
? REGISTER_ERROR_CODES
: namespace === "pages.login"
? ([
"username",
"password",
"showPassword",
"hidePassword",
] as const)
: (["passwordMinLength", "tooManyAttempts"] as const);
for (const key of keys) {
expect(t.has(key as never), `${namespace}.${key}`).toBe(true);
expect(t(key as never), `${namespace}.${key}`).not.toBe("");
}
}
});
});
+94 -63
View File
@@ -6067,69 +6067,98 @@
"rateLimit": "Too many attempts. Please wait before trying again."
},
"login": {
"title": "Sign in",
"subtitle": "Welcome back — log in to enter the hotel.",
"subtitle2fa": "Enter the 6-digit code from your authenticator.",
"welcomeBack": "Welcome back",
"welcomeBackSub": "Sign in to continue to {hotelName}",
"usernamePlaceholder": "Username",
"passwordPlaceholder": "Password",
"codePlaceholder": "2FA code",
"pleaseWait": "Please wait…",
"verify": "Verify",
"signIn": "Sign in",
"or": "or",
"noAccount": "No account?",
"createOne": "Create one",
"forgotPassword": "Forgot password?",
"errorInvalidCredentials": "Invalid username or password",
"errorInvalid2fa": "Invalid 2FA code",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"title": "تسجيل الدخول",
"subtitle": "سجّل الدخول للمتابعة إلى الفندق التالي.",
"subtitle2fa": "أدخل الرمز المكوّن من 6 أرقام من تطبيق المصادقة.",
"welcomeBack": "أهلاً بعودتك",
"welcomeBackSub": "سجّل الدخول للانضمام إلى {hotelName}",
"usernamePlaceholder": "اسم المستخدم",
"passwordPlaceholder": "كلمة المرور",
"codePlaceholder": "أدخل رمز التحقق بخطوتين",
"pleaseWait": "يرجى الانتظار...",
"verify": "تحقق",
"signIn": "تسجيل الدخول",
"or": "أو",
"noAccount": "ليس لديك حساب؟",
"createOne": "أنشئ حساباً",
"forgotPassword": "هل نسيت كلمة المرور؟",
"errorInvalidCredentials": "اسم المستخدم أو كلمة المرور غير صحيحة",
"errorInvalid2fa": "رمز التحقق بخطوتين غير صالح",
"errorUnverified": "يرجى التحقق من بريدك الإلكتروني قبل تسجيل الدخول.",
"errorCaptcha": "فشل التحقق من الكابتشا. حاول مرة أخرى.",
"whoIsOnline": "من متصل الآن",
"newestCitizens": "أحدث السكان",
"usersOnline": "{count} متصل",
"username": "اسم المستخدم",
"password": "كلمة المرور",
"showPassword": "إظهار",
"hidePassword": "إخفاء"
},
"register": {
"title": "Create account",
"subtitle": "Join the hotel — it only takes a moment.",
"username": "Username",
"email": "Email",
"password": "Password",
"confirmPassword": "Repeat password",
"usernamePlaceholder": "Username",
"emailPlaceholder": "Email",
"passwordPlaceholder": "Password (min 8 chars)",
"confirmPasswordPlaceholder": "Repeat password",
"selectOutfit": "Select your outfit",
"termsAccept": "I am 18+ and accept the {hotel} terms & rules.",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"createAccount": "Create account",
"creatingAccount": "Creating account...",
"redirecting": "Redirecting to your account...",
"alreadyHaveAccount": "Already have an account? Login!",
"alreadyHaveAccountPre": "Already have an account?",
"alreadyHaveAccountLink": "Sign in",
"register": "Register",
"whoIsOnline": "Who's online",
"usersOnline": "{count} online",
"termsError": "You must accept the terms & rules to register.",
"usernameError": "Username is required.",
"emailError": "Valid email is required.",
"passwordError": "Password must be at least 6 characters.",
"confirmPasswordError": "Passwords do not match.",
"termsRequired": "You must accept the terms & rules.",
"usernameRequired": "Username is required.",
"emailRequired": "Email is required.",
"passwordRequired": "Password is required.",
"passwordsDontMatch": "Passwords do not match.",
"newestCitizens": "Newest citizens",
"ageVerified": "أبلغ 18+ وأوافق على شرط العمر.",
"invitedBy": "بدعوة من {username}"
"title": "إنشاء حساب",
"subtitle": "انضم إلى الفندق — لن يستغرق الأمر سوى لحظات.",
"username": "اسم المستخدم",
"email": "البريد الإلكتروني",
"password": "كلمة المرور",
"confirmPassword": "أعد كلمة المرور",
"usernamePlaceholder": "اسم المستخدم",
"emailPlaceholder": "البريد الإلكتروني",
"passwordPlaceholder": "كلمة المرور (12 حرفًا على الأقل)",
"confirmPasswordPlaceholder": "أعد كلمة المرور",
"selectOutfit": "اختر ملابسك",
"termsAccept": "أنا أبلغ 18 عامًا وأوافق على شروط {hotel}.",
"accepted": "تم القبول والموافقة",
"showPassword": "إظهار",
"hidePassword": "إخفاء",
"accountDetails": "بيانات الحساب",
"credentials": "بيانات الدخول والأمان",
"createAccount": "إنشاء حساب",
"creatingAccount": "جارٍ إنشاء الحساب...",
"redirecting": "جارٍ الانتقال إلى حسابك...",
"alreadyHaveAccount": "لديك حساب بالفعل؟ سجّل الدخول!",
"alreadyHaveAccountPre": "لديك حساب بالفعل؟",
"alreadyHaveAccountLink": "تسجيل الدخول",
"register": "تسجيل",
"whoIsOnline": "من متصل الآن",
"usersOnline": "{count} متصل",
"termsError": "يجب الموافقة على الشروط للتسجيل.",
"usernameError": "اسم المستخدم مطلوب.",
"emailError": "البريد الإلكتروني الصالح مطلوب.",
"passwordError": "يجب ألا تقل كلمة المرور عن 12 حرفًا",
"confirmPasswordError": "كلمتا المرور غير متطابقتين.",
"termsRequired": "يجب الموافقة على الشروط.",
"usernameRequired": "اسم المستخدم مطلوب.",
"emailRequired": "البريد الإلكتروني مطلوب.",
"passwordRequired": "كلمة المرور مطلوبة.",
"passwordsDontMatch": "كلمتا المرور غير متطابقتين.",
"newestCitizens": "أحدث السكان",
"ageVerified": "أنا أبلغ 18 عامًا وأوافق على شرط السن.",
"invitedBy": "دعوة من {username}",
"strengthWeak": "ضعيف",
"strengthFair": "مقبول",
"strengthGood": "جيد",
"strengthStrong": "قوي",
"passwordMinLength": "يجب ألا تقل كلمة المرور عن 12 حرفًا",
"passwordUpper": "يجب أن تحتوي كلمة المرور على حرف كبير واحد على الأقل",
"passwordLower": "يجب أن تحتوي كلمة المرور على حرف صغير واحد على الأقل",
"passwordDigit": "يجب أن تحتوي كلمة المرور على رقم واحد على الأقل",
"passwordSpecial": "يجب أن تحتوي كلمة المرور على رمز خاص واحد على الأقل",
"passwordMaxLength": "كلمة المرور طويلة جدًا",
"usernameMinLength": "يجب ألا يقل اسم المستخدم عن 3 أحرف",
"usernameMaxLength": "يجب ألا يزيد اسم المستخدم عن 25 حرفًا",
"usernamePattern": "لا يمكن أن يحتوي اسم المستخدم إلا على حروف وأرقام وشرطة سفلية وشرطة",
"usernameReserved": "اسم المستخدم هذا محجوز",
"emailValid": "أدخل بريدًا إلكترونيًا صالحًا",
"emailDisposable": "نطاقات البريد المؤقتة غير مسموح بها",
"passwordsMatch": "Passwords do not match.",
"captchaFailed": "فشل التحقق من الكابتشا. حاول مرة أخرى.",
"usernameTaken": "اسم المستخدم هذا مستخدم بالفعل",
"rateLimited": "محاولات تسجيل كثيرة جدًا. انتظر بضع دقائق ثم حاول مرة أخرى.",
"vpnBlocked": "التسجيل عبر اتصالات VPN أو البروكسي غير مسموح به.",
"maxAccountsPerIp": "لقد بلغت الحد الأقصى من الحسابات لاتصالك.",
"unavailable": "التسجيل غير متاح مؤقتًا.",
"createFailed": "تعذر إنشاء الحساب. حاول مرة أخرى أو تواصل مع الإدارة.",
"invalidInput": "يرجى مراجعة الحقول المميزة والمحاولة مرة أخرى."
},
"forgot": {
"title": "Reset password",
@@ -6143,9 +6172,11 @@
"reset": {
"title": "Set a new password",
"subtitle": "Choose a strong password you don't use elsewhere.",
"passwordPlaceholder": "New password (min 6 chars)",
"passwordPlaceholder": "New password (min 12 chars)",
"resetPassword": "Reset password",
"backToLogin": "Back to login"
"backToLogin": "Back to login",
"passwordMinLength": "يجب ألا تقل كلمة المرور عن 12 حرفًا",
"tooManyAttempts": "محاولات كثيرة جدًا — حاول لاحقًا"
},
"verify": {
"verifiedTitle": "You're all set",
+50 -19
View File
@@ -836,14 +836,18 @@
"createOne": "Създайте такъв",
"forgotPassword": "Забравена парола?",
"errorInvalidCredentials": "Невалидно потребителско име или парола",
"errorInvalid2fa": "Невалиден 2FA код",
"errorInvalid2fa": "Невалиден код за двустъпково удостоверяване",
"welcomeBack": "Добре дошли отново",
"welcomeBackSub": "Влезте, за да продължите към {hotelName}",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"errorUnverified": "Моля, потвърдете имейла си, преди да влезете.",
"errorCaptcha": "Проверката на капчата е неуспешна. Опитайте отново.",
"whoIsOnline": "Кой е на линия",
"newestCitizens": "Най-нови граждани",
"usersOnline": "{count} на линия",
"username": "Потребителско име",
"password": "Парола",
"showPassword": "Покажи",
"hidePassword": "Скрий"
},
"register": {
"title": "Създаване на акаунт",
@@ -854,7 +858,7 @@
"confirmPassword": "Повторете паролата",
"usernamePlaceholder": "Потребителско име",
"emailPlaceholder": "Имейл",
"passwordPlaceholder": "Парола (мин. 6 знака)",
"passwordPlaceholder": "Парола (мин. 12 знака)",
"confirmPasswordPlaceholder": "Повторете паролата",
"selectOutfit": "Изберете вашето облекло",
"termsAccept": "Аз съм на 18+ и приемам условията и правилата на {hotel}.",
@@ -866,7 +870,7 @@
"termsError": "Трябва да приемете условията и правилата, за да се регистрирате.",
"usernameError": "Изисква се потребителско име.",
"emailError": "Изисква се валиден имейл.",
"passwordError": "Паролата трябва да е поне 6 знака.",
"passwordError": "Паролата трябва да е поне 12 знака",
"confirmPasswordError": "Паролите не съвпадат.",
"termsRequired": "Трябва да приемете условията и правилата.",
"usernameRequired": "Изисква се потребителско име.",
@@ -875,16 +879,41 @@
"passwordsDontMatch": "Паролите не съвпадат.",
"alreadyHaveAccountPre": "Вече имаш акаунт?",
"alreadyHaveAccountLink": "Вход",
"whoIsOnline": "Кой е онлайн",
"usersOnline": "{count} онлайн",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens",
"whoIsOnline": "Кой е на линия",
"usersOnline": "{count} на линия",
"accepted": "Прието и съгласен съм",
"showPassword": "Покажи",
"hidePassword": "Скрий",
"accountDetails": "Данни за профила",
"credentials": "Данни за вход и сигурност",
"newestCitizens": "Най-нови граждани",
"ageVerified": "Над 18 годишен съм и съгласен с изискването за възраст.",
"invitedBy": "Поканен от {username}"
"invitedBy": "Поканен от {username}",
"strengthWeak": "Слаба",
"strengthFair": "Средна",
"strengthGood": "Добра",
"strengthStrong": "Силна",
"passwordMinLength": "Паролата трябва да е поне 12 знака",
"passwordUpper": "Паролата трябва да съдържа поне една главна буква",
"passwordLower": "Паролата трябва да съдържа поне една малка буква",
"passwordDigit": "Паролата трябва да съдържа поне една цифра",
"passwordSpecial": "Паролата трябва да съдържа поне един специален символ",
"passwordMaxLength": "Паролата е твърде дълга",
"usernameMinLength": "Потребителското име трябва да е поне 3 знака",
"usernameMaxLength": "Потребителското име може да е най-много 25 знака",
"usernamePattern": "Потребителското име може да съдържа само букви, цифри, долна черта и тире",
"usernameReserved": "Това потребителско име е запазено",
"emailValid": "Въведете валиден имейл адрес",
"emailDisposable": "Временните имейл домейни не са разрешени",
"passwordsMatch": "Паролите не съвпадат.",
"captchaFailed": "Проверката на капчата е неуспешна. Опитайте отново.",
"usernameTaken": "Това потребителско име вече е заето",
"rateLimited": "Твърде много опити за регистрация. Изчакайте няколко минути и опитайте отново.",
"vpnBlocked": "Регистрацията през VPN/прокси връзки не е разрешена.",
"maxAccountsPerIp": "Достигнахте максималния брой акаунти за вашата връзка.",
"unavailable": "Регистрацията е временно недостъпна.",
"createFailed": "Акаунтът не можа да бъде създаден. Опитайте отново или се свържете с екипа.",
"invalidInput": "Моля, прегледайте отбелязаните полета и опитайте отново."
},
"forgot": {
"title": "Нулирайте паролата",
@@ -898,9 +927,11 @@
"reset": {
"title": "Задайте нова парола",
"subtitle": "Изберете силна парола, която не използвате другаде.",
"passwordPlaceholder": "Нова парола (мин. 6 знака)",
"passwordPlaceholder": "Нова парола (мин. 12 знака)",
"resetPassword": "Нулирайте паролата",
"backToLogin": "Назад към входа"
"backToLogin": "Назад към входа",
"passwordMinLength": "Паролата трябва да е поне 12 знака",
"tooManyAttempts": "Твърде много опити — опитайте по-късно"
},
"verify": {
"verifiedTitle": "Всичко е готово",
+48 -17
View File
@@ -836,14 +836,18 @@
"createOne": "Vytvořte jeden",
"forgotPassword": "Zapomněli jste heslo?",
"errorInvalidCredentials": "Neplatné uživatelské jméno nebo heslo",
"errorInvalid2fa": "Neplatný kód 2FA",
"errorInvalid2fa": "Neplatný kód dvoufázového ověření",
"welcomeBack": "Vítej zpět",
"welcomeBackSub": "Přihlas se pro pokračování do {hotelName}",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"errorUnverified": "Před přihlášením ověřte svou e-mailovou adresu.",
"errorCaptcha": "Ověření captcha selhalo. Zkuste to znovu.",
"whoIsOnline": "Kdo je online",
"newestCitizens": "Nejnovější občané",
"usersOnline": "{count} online",
"username": "Uživatelské jméno",
"password": "Heslo",
"showPassword": "Zobrazit",
"hidePassword": "Skrýt"
},
"register": {
"title": "Vytvořit účet",
@@ -854,7 +858,7 @@
"confirmPassword": "Opakujte heslo",
"usernamePlaceholder": "Uživatelské jméno",
"emailPlaceholder": "Email",
"passwordPlaceholder": "Heslo (min. 6 znaků)",
"passwordPlaceholder": "Heslo (min. 12 znaků)",
"confirmPasswordPlaceholder": "Opakujte heslo",
"selectOutfit": "Vyberte si oblečení",
"termsAccept": "Je mi 18+ a souhlasím s podmínkami a pravidly {hotel}.",
@@ -866,7 +870,7 @@
"termsError": "Chcete-li se zaregistrovat, musíte přijmout podmínky a pravidla.",
"usernameError": "Uživatelské jméno je povinné.",
"emailError": "Je vyžadován platný e-mail.",
"passwordError": "Heslo musí mít alespoň 6 znaků.",
"passwordError": "Heslo musí mít alespoň 12 znaků",
"confirmPasswordError": "Hesla se neshodují.",
"termsRequired": "Musíte přijmout podmínky a pravidla.",
"usernameRequired": "Uživatelské jméno je povinné.",
@@ -877,14 +881,39 @@
"alreadyHaveAccountLink": "Přihlásit se",
"whoIsOnline": "Kdo je online",
"usersOnline": "{count} online",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens",
"accepted": "Přijato a souhlasím",
"showPassword": "Zobrazit",
"hidePassword": "Skrýt",
"accountDetails": "Údaje o účtu",
"credentials": "Přihlašovací údaje a zabezpečení",
"newestCitizens": "Nejnovější občané",
"ageVerified": "Je mi 18+ a souhlasím s věkovým požadavkem.",
"invitedBy": "Pozván uživatelem {username}"
"invitedBy": "Pozván uživatelem {username}",
"strengthWeak": "Slabé",
"strengthFair": "Ucházející",
"strengthGood": "Dobré",
"strengthStrong": "Silné",
"passwordMinLength": "Heslo musí mít alespoň 12 znaků",
"passwordUpper": "Heslo musí obsahovat alespoň jedno velké písmeno",
"passwordLower": "Heslo musí obsahovat alespoň jedno malé písmeno",
"passwordDigit": "Heslo musí obsahovat alespoň jednu číslici",
"passwordSpecial": "Heslo musí obsahovat alespoň jeden speciální znak",
"passwordMaxLength": "Heslo je příliš dlouhé",
"usernameMinLength": "Uživatelské jméno musí mít alespoň 3 znaky",
"usernameMaxLength": "Uživatelské jméno může mít nejvýše 25 znaků",
"usernamePattern": "Uživatelské jméno může obsahovat pouze písmena, číslice, podtržítko a pomlčku",
"usernameReserved": "Toto uživatelské jméno je rezervováno",
"emailValid": "Zadejte platnou e-mailovou adresu",
"emailDisposable": "Dočasné e-mailové domény nejsou povoleny",
"passwordsMatch": "Hesla se neshodují.",
"captchaFailed": "Ověření captcha selhalo. Zkuste to znovu.",
"usernameTaken": "Toto uživatelské jméno je již obsazené",
"rateLimited": "Příliš mnoho pokusů o registraci. Počkejte několik minut a zkuste to znovu.",
"vpnBlocked": "Registrace přes připojení VPN/proxy není povolena.",
"maxAccountsPerIp": "Dosáhli jste maximálního počtu účtů pro vaše připojení.",
"unavailable": "Registrace je dočasně nedostupná.",
"createFailed": "Účet se nepodařilo vytvořit. Zkuste to znovu nebo kontaktujte personál.",
"invalidInput": "Zkontrolujte označená pole a zkuste to znovu."
},
"forgot": {
"title": "Obnovit heslo",
@@ -898,9 +927,11 @@
"reset": {
"title": "Nastavte nové heslo",
"subtitle": "Vyberte si silné heslo, které jinde nepoužíváte.",
"passwordPlaceholder": "Nové heslo (min. 6 znaků)",
"passwordPlaceholder": "Nové heslo (min. 12 znaků)",
"resetPassword": "Obnovit heslo",
"backToLogin": "Zpět k přihlášení"
"backToLogin": "Zpět k přihlášení",
"passwordMinLength": "Heslo musí mít alespoň 12 znaků",
"tooManyAttempts": "Příliš mnoho pokusů — zkuste to později"
},
"verify": {
"verifiedTitle": "Vše je připraveno",
+47 -16
View File
@@ -839,11 +839,15 @@
"errorInvalid2fa": "Ugyldig 2FA-kode",
"welcomeBack": "Velkommen tilbage",
"welcomeBackSub": "Log ind for at fortsætte til {hotelName}",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"errorUnverified": "Bekræft din e-mail, før du logger ind.",
"errorCaptcha": "Captcha-verificering mislykkedes. Prøv igen.",
"whoIsOnline": "Hvem er online",
"newestCitizens": "Nyeste borgere",
"usersOnline": "{count} online",
"username": "Brugernavn",
"password": "Adgangskode",
"showPassword": "Vis",
"hidePassword": "Skjul"
},
"register": {
"title": "Opret konto",
@@ -854,7 +858,7 @@
"confirmPassword": "Gentag adgangskoden",
"usernamePlaceholder": "Brugernavn",
"emailPlaceholder": "E-mail",
"passwordPlaceholder": "Adgangskode (min. 6 tegn)",
"passwordPlaceholder": "Adgangskode (min. 12 tegn)",
"confirmPasswordPlaceholder": "Gentag adgangskoden",
"selectOutfit": "Vælg dit outfit",
"termsAccept": "Jeg er 18+ og accepterer vilkårene og reglerne for {hotel}.",
@@ -866,7 +870,7 @@
"termsError": "Du skal acceptere vilkårene og reglerne for at registrere dig.",
"usernameError": "Brugernavn er påkrævet.",
"emailError": "Gyldig e-mail er påkrævet.",
"passwordError": "Adgangskoden skal være på mindst 6 tegn.",
"passwordError": "Adgangskoden skal være på mindst 12 tegn",
"confirmPasswordError": "Adgangskoder stemmer ikke overens.",
"termsRequired": "Du skal acceptere vilkårene og reglerne.",
"usernameRequired": "Brugernavn er påkrævet.",
@@ -877,14 +881,39 @@
"alreadyHaveAccountLink": "Log ind",
"whoIsOnline": "Hvem er online",
"usersOnline": "{count} online",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens",
"accepted": "Accepteret og godkendt",
"showPassword": "Vis",
"hidePassword": "Skjul",
"accountDetails": "Kontooplysninger",
"credentials": "Loginoplysninger og sikkerhed",
"newestCitizens": "Nyeste borgere",
"ageVerified": "Jeg er 18+ og accepterer alderskravet.",
"invitedBy": "Inviteret af {username}"
"invitedBy": "Inviteret af {username}",
"strengthWeak": "Svag",
"strengthFair": "Middelmådig",
"strengthGood": "God",
"strengthStrong": "Stærk",
"passwordMinLength": "Adgangskoden skal være på mindst 12 tegn",
"passwordUpper": "Adgangskoden skal indeholde mindst ét stort bogstav",
"passwordLower": "Adgangskoden skal indeholde mindst ét lille bogstav",
"passwordDigit": "Adgangskoden skal indeholde mindst ét tal",
"passwordSpecial": "Adgangskoden skal indeholde mindst ét specialtegn",
"passwordMaxLength": "Adgangskoden er for lang",
"usernameMinLength": "Brugernavnet skal være på mindst 3 tegn",
"usernameMaxLength": "Brugernavnet må højst være på 25 tegn",
"usernamePattern": "Brugernavnet må kun indeholde bogstaver, tal, understreg og bindestreg",
"usernameReserved": "Dette brugernavn er reserveret",
"emailValid": "Indtast en gyldig e-mailadresse",
"emailDisposable": "Midlertidige e-maildomæner er ikke tilladt",
"passwordsMatch": "Adgangskoder stemmer ikke overens.",
"captchaFailed": "Captcha-verificering mislykkedes. Prøv igen.",
"usernameTaken": "Det brugernavn er allerede taget",
"rateLimited": "For mange registreringsforsøg. Vent et par minutter, og prøv igen.",
"vpnBlocked": "Registrering via VPN/proxy-forbindelser er ikke tilladt.",
"maxAccountsPerIp": "Du har nået det maksimale antal konti for din forbindelse.",
"unavailable": "Registrering er midlertidigt utilgængelig.",
"createFailed": "Kontoen kunne ikke oprettes. Prøv igen, eller kontakt personalet.",
"invalidInput": "Kontrollér de markerede felter, og prøv igen."
},
"forgot": {
"title": "Nulstil adgangskode",
@@ -898,9 +927,11 @@
"reset": {
"title": "Indstil en ny adgangskode",
"subtitle": "Vælg en stærk adgangskode, du ikke bruger andre steder.",
"passwordPlaceholder": "Ny adgangskode (min. 6 tegn)",
"passwordPlaceholder": "Ny adgangskode (min. 12 tegn)",
"resetPassword": "Nulstil adgangskode",
"backToLogin": "Tilbage til login"
"backToLogin": "Tilbage til login",
"passwordMinLength": "Adgangskoden skal være på mindst 12 tegn",
"tooManyAttempts": "For mange forsøg — prøv igen senere"
},
"verify": {
"verifiedTitle": "Du er klar",
+47 -16
View File
@@ -809,11 +809,15 @@
"errorInvalid2fa": "Ungültiger 2FA-Code",
"welcomeBack": "Willkommen zurück",
"welcomeBackSub": "Melde dich an, um zu {hotelName} zu gelangen",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"errorUnverified": "Bitte bestätige deine E-Mail-Adresse, bevor du dich anmeldest.",
"errorCaptcha": "Captcha-Verifizierung fehlgeschlagen. Bitte erneut versuchen.",
"whoIsOnline": "Wer ist online",
"newestCitizens": "Neueste Bürger",
"usersOnline": "{count} online",
"username": "Benutzername",
"password": "Passwort",
"showPassword": "Anzeigen",
"hidePassword": "Verbergen"
},
"register": {
"title": "Konto erstellen",
@@ -824,7 +828,7 @@
"confirmPassword": "Passwort wiederholen",
"usernamePlaceholder": "Benutzername",
"emailPlaceholder": "E-Mail",
"passwordPlaceholder": "Passwort (min. 6 Zeichen)",
"passwordPlaceholder": "Passwort (min. 12 Zeichen)",
"confirmPasswordPlaceholder": "Passwort wiederholen",
"selectOutfit": "Wähle dein Outfit",
"termsAccept": "Ich bin 18+ und akzeptiere die {hotel} AGB & Regeln.",
@@ -836,7 +840,7 @@
"termsError": "Du musst die AGB & Regeln akzeptieren, um dich zu registrieren.",
"usernameError": "Benutzername ist erforderlich.",
"emailError": "Eine gültige E-Mail ist erforderlich.",
"passwordError": "Das Passwort muss mindestens 6 Zeichen lang sein.",
"passwordError": "Das Passwort muss mindestens 12 Zeichen lang sein",
"confirmPasswordError": "Passwörter stimmen nicht überein.",
"termsRequired": "Du musst die AGB & Regeln akzeptieren.",
"usernameRequired": "Benutzername ist erforderlich.",
@@ -847,14 +851,39 @@
"alreadyHaveAccountLink": "Anmelden",
"whoIsOnline": "Wer ist online",
"usersOnline": "{count} online",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens",
"accepted": "Akzeptiert & zugestimmt",
"showPassword": "Anzeigen",
"hidePassword": "Verbergen",
"accountDetails": "Kontodaten",
"credentials": "Zugangsdaten & Sicherheit",
"newestCitizens": "Neueste Bürger",
"ageVerified": "Ich bin 18+ und stimme der Altersanforderung zu.",
"invitedBy": "Eingeladen von {username}"
"invitedBy": "Eingeladen von {username}",
"strengthWeak": "Schwach",
"strengthFair": "Mittel",
"strengthGood": "Gut",
"strengthStrong": "Stark",
"passwordMinLength": "Das Passwort muss mindestens 12 Zeichen lang sein",
"passwordUpper": "Das Passwort muss mindestens einen Großbuchstaben enthalten",
"passwordLower": "Das Passwort muss mindestens einen Kleinbuchstaben enthalten",
"passwordDigit": "Das Passwort muss mindestens eine Ziffer enthalten",
"passwordSpecial": "Das Passwort muss mindestens ein Sonderzeichen enthalten",
"passwordMaxLength": "Das Passwort ist zu lang",
"usernameMinLength": "Der Benutzername muss mindestens 3 Zeichen lang sein",
"usernameMaxLength": "Der Benutzername darf höchstens 25 Zeichen lang sein",
"usernamePattern": "Der Benutzername darf nur Buchstaben, Ziffern, Unterstrich und Bindestrich enthalten",
"usernameReserved": "Dieser Benutzername ist reserviert",
"emailValid": "Gib eine gültige E-Mail-Adresse ein",
"emailDisposable": "Temporäre E-Mail-Domains sind nicht erlaubt",
"passwordsMatch": "Passwörter stimmen nicht überein.",
"captchaFailed": "Captcha-Verifizierung fehlgeschlagen. Bitte erneut versuchen.",
"usernameTaken": "Dieser Benutzername ist bereits vergeben",
"rateLimited": "Zu viele Registrierungsversuche. Bitte warte ein paar Minuten und versuche es erneut.",
"vpnBlocked": "Registrierungen über VPN-/Proxy-Verbindungen sind nicht erlaubt.",
"maxAccountsPerIp": "Du hast die maximale Anzahl an Konten für deine Verbindung erreicht.",
"unavailable": "Die Registrierung ist vorübergehend nicht verfügbar.",
"createFailed": "Das Konto konnte nicht erstellt werden. Versuche es erneut oder wende dich an das Personal.",
"invalidInput": "Bitte prüfe die markierten Felder und versuche es erneut."
},
"forgot": {
"title": "Passwort zurücksetzen",
@@ -868,9 +897,11 @@
"reset": {
"title": "Neues Passwort festlegen",
"subtitle": "Wähle ein sicheres Passwort, das du sonst nirgendwo verwendest.",
"passwordPlaceholder": "Neues Passwort (min. 6 Zeichen)",
"passwordPlaceholder": "Neues Passwort (min. 12 Zeichen)",
"resetPassword": "Passwort zurücksetzen",
"backToLogin": "Zurück zur Anmeldung"
"backToLogin": "Zurück zur Anmeldung",
"passwordMinLength": "Das Passwort muss mindestens 12 Zeichen lang sein",
"tooManyAttempts": "Zu viele Versuche — bitte später erneut probieren"
},
"verify": {
"verifiedTitle": "Du bist startklar",
+49 -18
View File
@@ -839,11 +839,15 @@
"errorInvalid2fa": "Μη έγκυρος κωδικός 2FA",
"welcomeBack": "Καλώς ήρθες πίσω",
"welcomeBackSub": "Συνδέσου για να συνεχίσεις στο {hotelName}",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"errorUnverified": "Επαληθεύστε το email σας πριν συνδεθείτε.",
"errorCaptcha": "Η επαλήθευση captcha απέτυχε. Δοκιμάστε ξανά.",
"whoIsOnline": "Ποιος είναι σε σύνδεση",
"newestCitizens": "Νέοι πολίτες",
"usersOnline": "{count} σε σύνδεση",
"username": "Όνομα χρήστη",
"password": "Κωδικός πρόσβασης",
"showPassword": "Εμφάνιση",
"hidePassword": "Απόκρυψη"
},
"register": {
"title": "Δημιουργία λογαριασμού",
@@ -854,7 +858,7 @@
"confirmPassword": "Επαναλάβετε τον κωδικό πρόσβασης",
"usernamePlaceholder": "Όνομα χρήστη",
"emailPlaceholder": "Email",
"passwordPlaceholder": "Κωδικός πρόσβασης (ελάχ. 6 χαρακτήρες)",
"passwordPlaceholder": "Κωδικός πρόσβασης (ελάχ. 12 χαρακτήρες)",
"confirmPasswordPlaceholder": "Επαναλάβετε τον κωδικό πρόσβασης",
"selectOutfit": "Επιλέξτε το ντύσιμό σας",
"termsAccept": "Είμαι 18+ και αποδέχομαι τους όρους και τους κανόνες του {hotel}.",
@@ -866,7 +870,7 @@
"termsError": "Πρέπει να αποδεχτείτε τους όρους και τους κανόνες για να εγγραφείτε.",
"usernameError": "Απαιτείται όνομα χρήστη.",
"emailError": "Απαιτείται έγκυρο email.",
"passwordError": "Ο κωδικός πρόσβασης πρέπει να αποτελείται από τουλάχιστον 6 χαρακτήρες.",
"passwordError": "Ο κωδικός πρόσβασης πρέπει να έχει τουλάχιστον 12 χαρακτήρες",
"confirmPasswordError": "Οι κωδικοί πρόσβασης δεν ταιριάζουν.",
"termsRequired": "Πρέπει να αποδεχτείτε τους όρους και τους κανόνες.",
"usernameRequired": "Απαιτείται όνομα χρήστη.",
@@ -875,16 +879,41 @@
"passwordsDontMatch": "Οι κωδικοί πρόσβασης δεν ταιριάζουν.",
"alreadyHaveAccountPre": "Έχεις ήδη λογαριασμό;",
"alreadyHaveAccountLink": "Σύνδεση",
"whoIsOnline": "Ποιος είναι συνδεδεμένος",
"usersOnline": "{count} συνδεδεμένοι",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens",
"whoIsOnline": "Ποιος είναι σε σύνδεση",
"usersOnline": "{count} σε σύνδεση",
"accepted": "Αποδεκτό & συμφωνώ",
"showPassword": "Εμφάνιση",
"hidePassword": "Απόκρυψη",
"accountDetails": "Στοιχεία λογαριασμού",
"credentials": "Στοιχεία σύνδεσης & ασφάλεια",
"newestCitizens": "Νέοι πολίτες",
"ageVerified": "Είμαι 18+ και αποδέχομαι την απαίτηση ηλικίας.",
"invitedBy": "Προσκλήθηκε από {username}"
"invitedBy": "Προσκλήθηκε από {username}",
"strengthWeak": "Ασθενές",
"strengthFair": "Μέτριο",
"strengthGood": "Καλό",
"strengthStrong": "Δυνατό",
"passwordMinLength": "Ο κωδικός πρόσβασης πρέπει να έχει τουλάχιστον 12 χαρακτήρες",
"passwordUpper": "Ο κωδικός πρόσβασης πρέπει να περιέχει τουλάχιστον ένα κεφαλαίο γράμμα",
"passwordLower": "Ο κωδικός πρόσβασης πρέπει να περιέχει τουλάχιστον ένα πεζό γράμμα",
"passwordDigit": "Ο κωδικός πρόσβασης πρέπει να περιέχει τουλάχιστον ένα ψηφίο",
"passwordSpecial": "Ο κωδικός πρόσβασης πρέπει να περιέχει τουλάχιστον έναν ειδικό χαρακτήρα",
"passwordMaxLength": "Ο κωδικός πρόσβασης είναι πολύ μεγάλος",
"usernameMinLength": "Το όνομα χρήστη πρέπει να έχει τουλάχιστον 3 χαρακτήρες",
"usernameMaxLength": "Το όνομα χρήστη μπορεί να έχει έως 25 χαρακτήρες",
"usernamePattern": "Το όνομα χρήστη μπορεί να περιέχει μόνο γράμματα, ψηφία, κάτω παύλα και παύλα",
"usernameReserved": "Αυτό το όνομα χρήστη είναι δεσμευμένο",
"emailValid": "Εισαγάγετε μια έγκυρη διεύθυνση email",
"emailDisposable": "Τα προσωρινά email domains δεν επιτρέπονται",
"passwordsMatch": "Οι κωδικοί πρόσβασης δεν ταιριάζουν.",
"captchaFailed": "Η επαλήθευση captcha απέτυχε. Δοκιμάστε ξανά.",
"usernameTaken": "Αυτό το όνομα χρήστη χρησιμοποιείται ήδη",
"rateLimited": "Πάρα πολλές προσπάθειες εγγραφής. Περίμενε λίγα λεπτά και δοκίμασε ξανά.",
"vpnBlocked": "Οι εγγραφές μέσω VPN/proxy δεν επιτρέπονται.",
"maxAccountsPerIp": "Έφτασες τον μέγιστο αριθμό λογαριασμών για τη σύνδεσή σου.",
"unavailable": "Η εγγραφή δεν είναι προσωρινά διαθέσιμη.",
"createFailed": "Δεν ήταν δυνατή η δημιουργία του λογαριασμού. Δοκίμασε ξανά ή επικοινώνησε με το προσωπικό.",
"invalidInput": "Ελέγξτε τα επισημασμένα πεδία και δοκιμάστε ξανά."
},
"forgot": {
"title": "Επαναφορά κωδικού πρόσβασης",
@@ -898,9 +927,11 @@
"reset": {
"title": "Ορίστε νέο κωδικό πρόσβασης",
"subtitle": "Επιλέξτε έναν ισχυρό κωδικό πρόσβασης που δεν χρησιμοποιείτε αλλού.",
"passwordPlaceholder": "Νέος κωδικός πρόσβασης (ελάχ. 6 χαρακτήρες)",
"passwordPlaceholder": "Νέος κωδικός πρόσβασης (ελάχ. 12 χαρακτήρες)",
"resetPassword": "Επαναφορά κωδικού πρόσβασης",
"backToLogin": "Επιστροφή στην είσοδο"
"backToLogin": "Επιστροφή στην είσοδο",
"passwordMinLength": "Ο κωδικός πρόσβασης πρέπει να έχει τουλάχιστον 12 χαρακτήρες",
"tooManyAttempts": "Πάρα πολλές προσπάθειες — δοκιμάστε αργότερα"
},
"verify": {
"verifiedTitle": "Είστε έτοιμοι",
+37 -6
View File
@@ -1015,7 +1015,11 @@
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"usersOnline": "{count} online",
"showPassword": "Show",
"hidePassword": "Hide",
"username": "Username",
"password": "Password"
},
"register": {
"title": "Create account",
@@ -1026,7 +1030,7 @@
"confirmPassword": "Repeat password",
"usernamePlaceholder": "Username",
"emailPlaceholder": "Email",
"passwordPlaceholder": "Password (min 8 chars)",
"passwordPlaceholder": "Password (min 12 chars)",
"confirmPasswordPlaceholder": "Repeat password",
"selectOutfit": "Select your outfit",
"termsAccept": "I am 18+ and accept the {hotel} terms & rules.",
@@ -1049,14 +1053,39 @@
"termsError": "You must accept the terms & rules to register.",
"usernameError": "Username is required.",
"emailError": "Valid email is required.",
"passwordError": "Password must be at least 6 characters.",
"passwordError": "Password must be at least 12 characters",
"confirmPasswordError": "Passwords do not match.",
"termsRequired": "You must accept the terms & rules.",
"usernameRequired": "Username is required.",
"emailRequired": "Email is required.",
"passwordRequired": "Password is required.",
"passwordsDontMatch": "Passwords do not match.",
"invitedBy": "Invited by {username}"
"invitedBy": "Invited by {username}",
"strengthWeak": "Weak",
"strengthFair": "Fair",
"strengthGood": "Good",
"strengthStrong": "Strong",
"passwordMinLength": "Password must be at least 12 characters",
"passwordUpper": "Password must contain at least one uppercase letter",
"passwordLower": "Password must contain at least one lowercase letter",
"passwordDigit": "Password must contain at least one digit",
"passwordSpecial": "Password must contain at least one special character",
"passwordMaxLength": "Password is too long",
"usernameMinLength": "Username must be at least 3 characters",
"usernameMaxLength": "Username must be at most 25 characters",
"usernamePattern": "Username may only contain letters, numbers, underscore and hyphen",
"usernameReserved": "This username is reserved",
"emailValid": "Enter a valid email address",
"emailDisposable": "Temporary email domains are not allowed",
"passwordsMatch": "Passwords do not match",
"usernameTaken": "That username is already taken",
"captchaFailed": "Captcha verification failed. Please try again.",
"rateLimited": "Too many sign-up attempts. Please wait a few minutes and try again.",
"vpnBlocked": "Registrations from VPN/proxy connections are not allowed.",
"maxAccountsPerIp": "You have reached the maximum number of accounts for your connection.",
"unavailable": "Registration is temporarily unavailable.",
"createFailed": "Could not create the account. Please try again or contact staff.",
"invalidInput": "Please check the highlighted fields and try again."
},
"forgot": {
"title": "Reset password",
@@ -1070,9 +1099,11 @@
"reset": {
"title": "Set a new password",
"subtitle": "Choose a strong password you don't use elsewhere.",
"passwordPlaceholder": "New password (min 6 chars)",
"passwordPlaceholder": "New password (min 12 chars)",
"resetPassword": "Reset password",
"backToLogin": "Back to login"
"backToLogin": "Back to login",
"passwordMinLength": "Password must be at least 12 characters",
"tooManyAttempts": "Too many attempts — try again later"
},
"verify": {
"verifiedTitle": "You're all set",
+48 -17
View File
@@ -806,14 +806,18 @@
"createOne": "Crea una",
"forgotPassword": "¿Olvidaste tu contraseña?",
"errorInvalidCredentials": "Usuario o contraseña inválidos",
"errorInvalid2fa": "Código 2FA inválido",
"errorInvalid2fa": "Código 2FA no válido",
"welcomeBack": "Bienvenido de nuevo",
"welcomeBackSub": "Inicia sesión para continuar en {hotelName}",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"errorUnverified": "Verifica tu correo electrónico antes de iniciar sesión.",
"errorCaptcha": "La verificación captcha falló. Inténtalo de nuevo.",
"whoIsOnline": "Quién está en línea",
"newestCitizens": "Ciudadanos más recientes",
"usersOnline": "{count} en línea",
"username": "Usuario",
"password": "Contraseña",
"showPassword": "Mostrar",
"hidePassword": "Ocultar"
},
"register": {
"title": "Crear cuenta",
@@ -824,7 +828,7 @@
"confirmPassword": "Repetir contraseña",
"usernamePlaceholder": "Usuario",
"emailPlaceholder": "Correo electrónico",
"passwordPlaceholder": "Contraseña (mín. 6 caracteres)",
"passwordPlaceholder": "Contraseña (mín. 12 caracteres)",
"confirmPasswordPlaceholder": "Repetir contraseña",
"selectOutfit": "Selecciona tu atuendo",
"termsAccept": "Soy mayor de 18 años y acepto los términos y reglas de {hotel}.",
@@ -836,7 +840,7 @@
"termsError": "Debes aceptar los términos y reglas para registrarte.",
"usernameError": "El usuario es obligatorio.",
"emailError": "Se requiere un correo electrónico válido.",
"passwordError": "La contraseña debe tener al menos 6 caracteres.",
"passwordError": "La contraseña debe tener al menos 12 caracteres",
"confirmPasswordError": "Las contraseñas no coinciden.",
"termsRequired": "Debes aceptar los términos y reglas.",
"usernameRequired": "El usuario es obligatorio.",
@@ -847,14 +851,39 @@
"alreadyHaveAccountLink": "Iniciar sesión",
"whoIsOnline": "Quién está en línea",
"usersOnline": "{count} en línea",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens",
"accepted": "Aceptado y de acuerdo",
"showPassword": "Mostrar",
"hidePassword": "Ocultar",
"accountDetails": "Datos de la cuenta",
"credentials": "Credenciales y seguridad",
"newestCitizens": "Ciudadanos más recientes",
"ageVerified": "Tengo 18+ y acepto el requisito de edad.",
"invitedBy": "Invitado por {username}"
"invitedBy": "Invitado por {username}",
"strengthWeak": "Débil",
"strengthFair": "Aceptable",
"strengthGood": "Buena",
"strengthStrong": "Fuerte",
"passwordMinLength": "La contraseña debe tener al menos 12 caracteres",
"passwordUpper": "La contraseña debe contener al menos una mayúscula",
"passwordLower": "La contraseña debe contener al menos una minúscula",
"passwordDigit": "La contraseña debe contener al menos un dígito",
"passwordSpecial": "La contraseña debe contener al menos un carácter especial",
"passwordMaxLength": "La contraseña es demasiado larga",
"usernameMinLength": "El usuario debe tener al menos 3 caracteres",
"usernameMaxLength": "El usuario puede tener como máximo 25 caracteres",
"usernamePattern": "El usuario solo puede contener letras, números, guion bajo y guion",
"usernameReserved": "Ese nombre de usuario está reservado",
"emailValid": "Introduce una dirección de correo válida",
"emailDisposable": "No se permiten dominios de correo temporales",
"passwordsMatch": "Las contraseñas no coinciden.",
"captchaFailed": "La verificación captcha falló. Inténtalo de nuevo.",
"usernameTaken": "Ese nombre de usuario ya está en uso",
"rateLimited": "Demasiados intentos de registro. Espera unos minutos e inténtalo de nuevo.",
"vpnBlocked": "No se permiten registros mediante conexiones VPN/proxy.",
"maxAccountsPerIp": "Has alcanzado el máximo de cuentas para tu conexión.",
"unavailable": "El registro no está disponible temporalmente.",
"createFailed": "No se pudo crear la cuenta. Inténtalo de nuevo o contacta con el personal.",
"invalidInput": "Revisa los campos marcados e inténtalo de nuevo."
},
"forgot": {
"title": "Restablecer contraseña",
@@ -868,9 +897,11 @@
"reset": {
"title": "Establecer una nueva contraseña",
"subtitle": "Elige una contraseña segura que no uses en otros sitios.",
"passwordPlaceholder": "Nueva contraseña (mín. 6 caracteres)",
"passwordPlaceholder": "Nueva contraseña (mín. 12 caracteres)",
"resetPassword": "Restablecer contraseña",
"backToLogin": "Volver al inicio de sesión"
"backToLogin": "Volver al inicio de sesión",
"passwordMinLength": "La contraseña debe tener al menos 12 caracteres",
"tooManyAttempts": "Demasiados intentos — inténtalo más tarde"
},
"verify": {
"verifiedTitle": "Todo está listo",
+94 -63
View File
@@ -6067,69 +6067,98 @@
"rateLimit": "Too many attempts. Please wait before trying again."
},
"login": {
"title": "Sign in",
"subtitle": "Welcome back — log in to enter the hotel.",
"subtitle2fa": "Enter the 6-digit code from your authenticator.",
"welcomeBack": "Welcome back",
"welcomeBackSub": "Sign in to continue to {hotelName}",
"usernamePlaceholder": "Username",
"passwordPlaceholder": "Password",
"codePlaceholder": "2FA code",
"pleaseWait": "Please wait…",
"verify": "Verify",
"signIn": "Sign in",
"or": "or",
"noAccount": "No account?",
"createOne": "Create one",
"forgotPassword": "Forgot password?",
"errorInvalidCredentials": "Invalid username or password",
"errorInvalid2fa": "Invalid 2FA code",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"title": "Kirjaudu sisään",
"subtitle": "Kirjaudu sisään jatkaaksesi seuraavaan hotelliin.",
"subtitle2fa": "Syötä 6-numeroinen koodi tunnistussovelluksestasi.",
"welcomeBack": "Tervetuloa takaisin",
"welcomeBackSub": "Kirjaudu sisään liittyäksesi hotelliin {hotelName}",
"usernamePlaceholder": "Käyttäjätunnus",
"passwordPlaceholder": "Salasana",
"codePlaceholder": "Syötä 2FA-koodisi",
"pleaseWait": "Odota hetki...",
"verify": "Varmenna",
"signIn": "Kirjaudu sisään",
"or": "tai",
"noAccount": "Nie vielä tiliä?",
"createOne": "Luo tili",
"forgotPassword": "Unohditko salasanasi?",
"errorInvalidCredentials": "Väärä käyttäjätunnus tai salasana",
"errorInvalid2fa": "Virheellinen 2FA-koodi",
"errorUnverified": "Vahvista sähköpostiosoitteesi ennen kirjautumista.",
"errorCaptcha": "Captcha-varmennus epäonnistui. Yritä uudelleen.",
"whoIsOnline": "Ketkä ovat paikalla",
"newestCitizens": "Uusimmat asukkaat",
"usersOnline": "{count} paikalla",
"username": "Käyttäjätunnus",
"password": "Salasana",
"showPassword": "Näytä",
"hidePassword": "Piilota"
},
"register": {
"title": "Create account",
"subtitle": "Join the hotel — it only takes a moment.",
"username": "Username",
"email": "Email",
"password": "Password",
"confirmPassword": "Repeat password",
"usernamePlaceholder": "Username",
"emailPlaceholder": "Email",
"passwordPlaceholder": "Password (min 8 chars)",
"confirmPasswordPlaceholder": "Repeat password",
"selectOutfit": "Select your outfit",
"termsAccept": "I am 18+ and accept the {hotel} terms & rules.",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"createAccount": "Create account",
"creatingAccount": "Creating account...",
"redirecting": "Redirecting to your account...",
"alreadyHaveAccount": "Already have an account? Login!",
"alreadyHaveAccountPre": "Already have an account?",
"alreadyHaveAccountLink": "Sign in",
"register": "Register",
"whoIsOnline": "Who's online",
"usersOnline": "{count} online",
"termsError": "You must accept the terms & rules to register.",
"usernameError": "Username is required.",
"emailError": "Valid email is required.",
"passwordError": "Password must be at least 6 characters.",
"confirmPasswordError": "Passwords do not match.",
"termsRequired": "You must accept the terms & rules.",
"usernameRequired": "Username is required.",
"emailRequired": "Email is required.",
"passwordRequired": "Password is required.",
"passwordsDontMatch": "Passwords do not match.",
"newestCitizens": "Newest citizens",
"ageVerified": "Olen 18+ ja hyväksyn ikävaatimuksen.",
"invitedBy": "Kutsuja: {username}"
"title": "Luo tili",
"subtitle": "Liity hotelliin — se kestää vain hetken.",
"username": "Käyttäjätunnus",
"email": "Sähköposti",
"password": "Salasana",
"confirmPassword": "Toista salasana",
"usernamePlaceholder": "Käyttäjätunnus",
"emailPlaceholder": "Sähköposti",
"passwordPlaceholder": "Salasana (vähintään 12 merkkiä)",
"confirmPasswordPlaceholder": "Toista salasana",
"selectOutfit": "Valitse asustesi",
"termsAccept": "Olen 18-vuotias ja hyväksyn {hotel} säännöt.",
"accepted": "Hyväksytty ja hyväksyn",
"showPassword": "Näytä",
"hidePassword": "Piilota",
"accountDetails": "Tilitiedot",
"credentials": "Kirjautumistiedot ja turvallisuus",
"createAccount": "Luo tili",
"creatingAccount": "Luodaan tiliä...",
"redirecting": "Siirrytään tilillesi...",
"alreadyHaveAccount": "Onko sinulla jo tili? Kirjaudu sisään!",
"alreadyHaveAccountPre": "Onko sinulla jo tili?",
"alreadyHaveAccountLink": "Kirjaudu sisään",
"register": "Rekisteröidy",
"whoIsOnline": "Ketkä ovat paikalla",
"usersOnline": "{count} paikalla",
"termsError": "Sinun on hyväksyttävä säännöt rekisteröityäksesi.",
"usernameError": "Käyttäjätunnus on pakollinen.",
"emailError": "Kelvollinen sähköpostiosoite on pakollinen.",
"passwordError": "Salasanassa on oltava vähintään 12 merkkiä",
"confirmPasswordError": "Salasanat eivät täsmää.",
"termsRequired": "Sinun on hyväksyttävä säännöt.",
"usernameRequired": "Käyttäjätunnus on pakollinen.",
"emailRequired": "Sähköpostiosoite on pakollinen.",
"passwordRequired": "Salasana on pakollinen.",
"passwordsDontMatch": "Salasanat eivät täsmää.",
"newestCitizens": "Uusimmat asukkaat",
"ageVerified": "Olen 18-vuotias ja hyväksyn ikärajan.",
"invitedBy": "Kutsuja: {username}",
"strengthWeak": "Heikko",
"strengthFair": "Tyydyttävä",
"strengthGood": "Hyvä",
"strengthStrong": "Vahva",
"passwordMinLength": "Salasanassa on oltava vähintään 12 merkkiä",
"passwordUpper": "Salasanassa on oltava vähintään yksi iso kirjain",
"passwordLower": "Salasanassa on oltava vähintään yksi pieni kirjain",
"passwordDigit": "Salasanassa on oltava vähintään yksi numero",
"passwordSpecial": "Salasanassa on oltava vähintään yksi erikoismerkki",
"passwordMaxLength": "Salasana on liian pitkä",
"usernameMinLength": "Käyttäjätunnus on oltava vähintään 3 merkkiä",
"usernameMaxLength": "Käyttäjätunnus saa olla korkeintaan 25 merkkiä",
"usernamePattern": "Käyttäjätunnus voi sisältää vain kirjaimia, numeroita, alaviivan ja viivan",
"usernameReserved": "Tämä käyttäjätunnus on varattu",
"emailValid": "Anna kelvollinen sähköpostiosoite",
"emailDisposable": "Väliaikaisia sähköpostiosoitteita ei sallita",
"passwordsMatch": "Passwords do not match.",
"captchaFailed": "Captcha-varmennus epäonnistui. Yritä uudelleen.",
"usernameTaken": "Tämä käyttäjätunnus on jo käytössä",
"rateLimited": "Liikaa rekisteröintiyrityksiä. Odota muutama minuutti ja yritä uudelleen.",
"vpnBlocked": "Rekisteröityminen VPN/proxy-yhteyksien kautta ei ole sallittua.",
"maxAccountsPerIp": "Olet saavuttanut yhteytesi enimmäismäärän tilejä.",
"unavailable": "Rekisteröityminen ei ole väliaikaisesti käytettävissä.",
"createFailed": "Tiliä ei voitu luoda. Yritä uudelleen tai ota yhteyttä henkilökuntaan.",
"invalidInput": "Tarkista korostetut kentät ja yritä uudelleen."
},
"forgot": {
"title": "Reset password",
@@ -6143,9 +6172,11 @@
"reset": {
"title": "Set a new password",
"subtitle": "Choose a strong password you don't use elsewhere.",
"passwordPlaceholder": "New password (min 6 chars)",
"passwordPlaceholder": "New password (min 12 chars)",
"resetPassword": "Reset password",
"backToLogin": "Back to login"
"backToLogin": "Back to login",
"passwordMinLength": "Salasanassa on oltava vähintään 12 merkkiä",
"tooManyAttempts": "Liikaa yrityksiä — yritä myöhemmin uudelleen"
},
"verify": {
"verifiedTitle": "You're all set",
+48 -17
View File
@@ -806,14 +806,18 @@
"createOne": "Créer un compte",
"forgotPassword": "Mot de passe oublié ?",
"errorInvalidCredentials": "Nom d'utilisateur ou mot de passe invalide",
"errorInvalid2fa": "Code A2F invalide",
"errorInvalid2fa": "Code 2FA invalide",
"welcomeBack": "Bon retour",
"welcomeBackSub": "Connecte-toi pour continuer vers {hotelName}",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"errorUnverified": "Veuillez vérifier votre e-mail avant de vous connecter.",
"errorCaptcha": "La vérification captcha a échoué. Réessayez.",
"whoIsOnline": "Qui est en ligne",
"newestCitizens": "Nouveaux citoyens",
"usersOnline": "{count} en ligne",
"username": "Nom d'utilisateur",
"password": "Mot de passe",
"showPassword": "Afficher",
"hidePassword": "Masquer"
},
"register": {
"title": "Créer un compte",
@@ -824,7 +828,7 @@
"confirmPassword": "Répéter le mot de passe",
"usernamePlaceholder": "Nom d'utilisateur",
"emailPlaceholder": "E-mail",
"passwordPlaceholder": "Mot de passe (min 6 car.)",
"passwordPlaceholder": "Mot de passe (min 12 car.)",
"confirmPasswordPlaceholder": "Répéter le mot de passe",
"selectOutfit": "Sélectionnez votre tenue",
"termsAccept": "J'ai 18 ans ou plus et j'accepte les conditions et règles de {hotel}.",
@@ -836,7 +840,7 @@
"termsError": "Vous devez accepter les conditions et règles pour vous inscrire.",
"usernameError": "Le nom d'utilisateur est requis.",
"emailError": "Un e-mail valide est requis.",
"passwordError": "Le mot de passe doit contenir au moins 6 caractères.",
"passwordError": "Le mot de passe doit contenir au moins 12 caractères",
"confirmPasswordError": "Les mots de passe ne correspondent pas.",
"termsRequired": "Vous devez accepter les conditions et règles.",
"usernameRequired": "Le nom d'utilisateur est requis.",
@@ -847,14 +851,39 @@
"alreadyHaveAccountLink": "Se connecter",
"whoIsOnline": "Qui est en ligne",
"usersOnline": "{count} en ligne",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens",
"accepted": "Accepté et d'accord",
"showPassword": "Afficher",
"hidePassword": "Masquer",
"accountDetails": "Informations du compte",
"credentials": "Identifiants et sécurité",
"newestCitizens": "Nouveaux citoyens",
"ageVerified": "J'ai 18+ et j'accepte la condition d'âge.",
"invitedBy": "Invité par {username}"
"invitedBy": "Invité par {username}",
"strengthWeak": "Faible",
"strengthFair": "Moyen",
"strengthGood": "Bon",
"strengthStrong": "Fort",
"passwordMinLength": "Le mot de passe doit contenir au moins 12 caractères",
"passwordUpper": "Le mot de passe doit contenir au moins une majuscule",
"passwordLower": "Le mot de passe doit contenir au moins une minuscule",
"passwordDigit": "Le mot de passe doit contenir au moins un chiffre",
"passwordSpecial": "Le mot de passe doit contenir au moins un caractère spécial",
"passwordMaxLength": "Le mot de passe est trop long",
"usernameMinLength": "Le nom d'utilisateur doit contenir au moins 3 caractères",
"usernameMaxLength": "Le nom d'utilisateur ne peut pas dépasser 25 caractères",
"usernamePattern": "Le nom d'utilisateur ne peut contenir que des lettres, chiffres, tirets bas et tirets",
"usernameReserved": "Ce nom d'utilisateur est réservé",
"emailValid": "Saisissez une adresse e-mail valide",
"emailDisposable": "Les domaines e-mail temporaires ne sont pas autorisés",
"passwordsMatch": "Les mots de passe ne correspondent pas.",
"captchaFailed": "La vérification captcha a échoué. Réessayez.",
"usernameTaken": "Ce nom d'utilisateur est déjà pris",
"rateLimited": "Trop de tentatives d'inscription. Patientez quelques minutes et réessayez.",
"vpnBlocked": "Les inscriptions via une connexion VPN/proxy ne sont pas autorisées.",
"maxAccountsPerIp": "Vous avez atteint le nombre maximal de comptes pour votre connexion.",
"unavailable": "L'inscription est temporairement indisponible.",
"createFailed": "Impossible de créer le compte. Réessayez ou contactez le personnel.",
"invalidInput": "Veuillez vérifier les champs en surbrillance et réessayer."
},
"forgot": {
"title": "Réinitialiser le mot de passe",
@@ -868,9 +897,11 @@
"reset": {
"title": "Définir un nouveau mot de passe",
"subtitle": "Choisissez un mot de passe fort que vous n'utilisez pas ailleurs.",
"passwordPlaceholder": "Nouveau mot de passe (min 6 car.)",
"passwordPlaceholder": "Nouveau mot de passe (min 12 car.)",
"resetPassword": "Réinitialiser le mot de passe",
"backToLogin": "Retour à la connexion"
"backToLogin": "Retour à la connexion",
"passwordMinLength": "Le mot de passe doit contenir au moins 12 caractères",
"tooManyAttempts": "Trop de tentatives — réessayez plus tard"
},
"verify": {
"verifiedTitle": "Tout est prêt",
+50 -19
View File
@@ -836,14 +836,18 @@
"createOne": "Stvorite jedan",
"forgotPassword": "Zaboravili ste lozinku?",
"errorInvalidCredentials": "Nevažeće korisničko ime ili lozinka",
"errorInvalid2fa": "Nevažeći 2FA kod",
"errorInvalid2fa": "Neispravan 2FA kod",
"welcomeBack": "Dobrodošao natrag",
"welcomeBackSub": "Prijavi se za nastavak u {hotelName}",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"errorUnverified": "Potvrdite svoju e-poštu prije prijave.",
"errorCaptcha": "Captcha verifikacija nije uspjela. Pokušajte ponovno.",
"whoIsOnline": "Tko je na mreži",
"newestCitizens": "Najnoviji građani",
"usersOnline": "{count} na mreži",
"username": "Korisničko ime",
"password": "Lozinka",
"showPassword": "Prikaži",
"hidePassword": "Sakrij"
},
"register": {
"title": "Napravi račun",
@@ -854,7 +858,7 @@
"confirmPassword": "Ponovi lozinku",
"usernamePlaceholder": "Korisničko ime",
"emailPlaceholder": "E-mail",
"passwordPlaceholder": "Lozinka (najmanje 6 znakova)",
"passwordPlaceholder": "Lozinka (najmanje 12 znakova)",
"confirmPasswordPlaceholder": "Ponovi lozinku",
"selectOutfit": "Odaberite svoju odjeću",
"termsAccept": "Imam 18+ godina i prihvaćam odredbe i pravila hotela {hotel}.",
@@ -866,7 +870,7 @@
"termsError": "Za registraciju morate prihvatiti uvjete i pravila.",
"usernameError": "Korisničko ime je potrebno.",
"emailError": "Potrebna je valjana adresa e-pošte.",
"passwordError": "Lozinka mora imati najmanje 6 znakova.",
"passwordError": "Lozinka mora imati najmanje 12 znakova.",
"confirmPasswordError": "Lozinke se ne podudaraju.",
"termsRequired": "Morate prihvatiti uvjete i pravila.",
"usernameRequired": "Korisničko ime je potrebno.",
@@ -875,16 +879,41 @@
"passwordsDontMatch": "Lozinke se ne podudaraju.",
"alreadyHaveAccountPre": "Već imaš račun?",
"alreadyHaveAccountLink": "Prijavi se",
"whoIsOnline": "Tko je online",
"usersOnline": "{count} online",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens",
"whoIsOnline": "Tko je na mreži",
"usersOnline": "{count} na mreži",
"accepted": "Prihvaćeno i suglasan sam",
"showPassword": "Prikaži",
"hidePassword": "Sakrij",
"accountDetails": "Podaci računa",
"credentials": "Podaci za prijavu i sigurnost",
"newestCitizens": "Najnoviji građani",
"ageVerified": "Imam 18+ i prihvaćam uvjet dobi.",
"invitedBy": "Pozvao {username}"
"invitedBy": "Pozvao {username}",
"strengthWeak": "Slaba",
"strengthFair": "Osrednja",
"strengthGood": "Dobra",
"strengthStrong": "Jaka",
"passwordMinLength": "Lozinka mora imati najmanje 12 znakova",
"passwordUpper": "Lozinka mora sadržavati najmanje jedno veliko slovo",
"passwordLower": "Lozinka mora sadržavati najmanje jedno malo slovo",
"passwordDigit": "Lozinka mora sadržavati najmanje jednu znamenku",
"passwordSpecial": "Lozinka mora sadržavati najmanje jedan poseban znak",
"passwordMaxLength": "Lozinka je preduga",
"usernameMinLength": "Korisničko ime mora imati najmanje 3 znaka",
"usernameMaxLength": "Korisničko ime smije imati najviše 25 znakova",
"usernamePattern": "Korisničko ime smije sadržavati samo slova, brojeve, podvlaku i crticu",
"usernameReserved": "Ovo korisničko ime je rezervirano",
"emailValid": "Unesite valjanu adresu e-pošte",
"emailDisposable": "Privremene domene e-pošte nisu dopuštene",
"passwordsMatch": "Lozinke se ne podudaraju.",
"captchaFailed": "Captcha verifikacija nije uspjela. Pokušajte ponovno.",
"usernameTaken": "Ovo korisničko ime je već zauzeto",
"rateLimited": "Previše pokušaja registracije. Pričekajte nekoliko minuta i pokušajte ponovno.",
"vpnBlocked": "Registracija putem VPN/proxy veza nije dopuštena.",
"maxAccountsPerIp": "Dosegnuli ste najveći broj računa za svoju vezu.",
"unavailable": "Registracija je privremeno nedostupna.",
"createFailed": "Račun nije mogao biti stvoren. Pokušajte ponovno ili se obratite osoblju.",
"invalidInput": "Provjerite označena polja i pokušajte ponovno."
},
"forgot": {
"title": "Resetiraj lozinku",
@@ -898,9 +927,11 @@
"reset": {
"title": "Postavite novu lozinku",
"subtitle": "Odaberite jaku lozinku koju ne koristite drugdje.",
"passwordPlaceholder": "Nova lozinka (najmanje 6 znakova)",
"passwordPlaceholder": "Nova lozinka (najmanje 12 znakova)",
"resetPassword": "Resetiraj lozinku",
"backToLogin": "Natrag na prijavu"
"backToLogin": "Natrag na prijavu",
"passwordMinLength": "Lozinka mora imati najmanje 12 znakova",
"tooManyAttempts": "Previše pokušaja — pokušajte kasnije"
},
"verify": {
"verifiedTitle": "Sve je spremno",
+48 -17
View File
@@ -836,14 +836,18 @@
"createOne": "Hozzon létre egyet",
"forgotPassword": "Elfelejtetted a jelszavad?",
"errorInvalidCredentials": "Érvénytelen felhasználónév vagy jelszó",
"errorInvalid2fa": "Érvénytelen 2FA kód",
"errorInvalid2fa": "Érvénytelen 2FA-kód",
"welcomeBack": "Üdvözöllek újra",
"welcomeBackSub": "Jelentkezz be a {hotelName} folytatáshoz",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"errorUnverified": "Kérlek, erősítsd meg az e-mail-címedet bejelentkezés előtt.",
"errorCaptcha": "A captcha-ellenőrzés sikertelen. Próbáld újra.",
"whoIsOnline": "Ki van online",
"newestCitizens": "Legújabb lakosok",
"usersOnline": "{count} online",
"username": "Felhasználónév",
"password": "Jelszó",
"showPassword": "Megjelenítés",
"hidePassword": "Elrejtés"
},
"register": {
"title": "Hozzon létre fiókot",
@@ -854,7 +858,7 @@
"confirmPassword": "Ismételje meg a jelszót",
"usernamePlaceholder": "Felhasználónév",
"emailPlaceholder": "E-mail",
"passwordPlaceholder": "Jelszó (minimum 6 karakter)",
"passwordPlaceholder": "Jelszó (minimum 12 karakter)",
"confirmPasswordPlaceholder": "Ismételje meg a jelszót",
"selectOutfit": "Válassza ki az öltözékét",
"termsAccept": "18 évesnél idősebb vagyok, és elfogadom a {hotel} feltételeit és szabályait.",
@@ -866,7 +870,7 @@
"termsError": "A regisztrációhoz el kell fogadnia a feltételeket és szabályokat.",
"usernameError": "Felhasználónév megadása kötelező.",
"emailError": "Érvényes e-mail-cím szükséges.",
"passwordError": "A jelszónak legalább 6 karakterből kell állnia.",
"passwordError": "A jelszónak legalább 12 karakter hosszúnak kell lennie",
"confirmPasswordError": "A jelszavak nem egyeznek.",
"termsRequired": "El kell fogadnia a feltételeket és szabályokat.",
"usernameRequired": "Felhasználónév megadása kötelező.",
@@ -877,14 +881,39 @@
"alreadyHaveAccountLink": "Bejelentkezés",
"whoIsOnline": "Ki van online",
"usersOnline": "{count} online",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens",
"accepted": "Elfogadva és egyetértek",
"showPassword": "Megjelenítés",
"hidePassword": "Elrejtés",
"accountDetails": "Fiókadatok",
"credentials": "Bejelentkezési adatok és biztonság",
"newestCitizens": "Legújabb lakosok",
"ageVerified": "18+ vagyok és elfogadom a korhatárra vonatkozó követelményt.",
"invitedBy": "Meghívta: {username}"
"invitedBy": "Meghívta: {username}",
"strengthWeak": "Gyenge",
"strengthFair": "Közepes",
"strengthGood": "Jó",
"strengthStrong": "Erős",
"passwordMinLength": "A jelszónak legalább 12 karakter hosszúnak kell lennie",
"passwordUpper": "A jelszónak legalább egy nagybetűt kell tartalmaznia",
"passwordLower": "A jelszónak legalább egy kisbetűt kell tartalmaznia",
"passwordDigit": "A jelszónak legalább egy számjegyet kell tartalmaznia",
"passwordSpecial": "A jelszónak legalább egy speciális karaktert kell tartalmaznia",
"passwordMaxLength": "A jelszó túl hosszú",
"usernameMinLength": "A felhasználónévnek legalább 3 karakter hosszúnak kell lennie",
"usernameMaxLength": "A felhasználónév legfeljebb 25 karakter lehet",
"usernamePattern": "A felhasználónév csak betűket, számokat, alájlást és kötőjelet tartalmazhat",
"usernameReserved": "Ez a felhasználónév foglalt",
"emailValid": "Adj meg egy érvényes e-mail-címet",
"emailDisposable": "Ideiglenes e-mail-domainek nem engedélyezettek",
"passwordsMatch": "A jelszavak nem egyeznek.",
"captchaFailed": "A captcha-ellenőrzés sikertelen. Próbáld újra.",
"usernameTaken": "Ez a felhasználónév már használatban van",
"rateLimited": "Túl sok regisztrációs kísérlet. Várj néhány percet, és próbáld újra.",
"vpnBlocked": "VPN/proxy kapcsolatokon keresztüli regisztráció nem engedélyezett.",
"maxAccountsPerIp": "Elérted a kapcsolatodhoz tartozó fiókok maximális számát.",
"unavailable": "A regisztráció átmenetileg nem érhető el.",
"createFailed": "A fiókot nem sikerült létrehozni. Próbáld újra, vagy fordulj a munkatársakhoz.",
"invalidInput": "Nézd át a kiemelt mezőket, és próbáld újra."
},
"forgot": {
"title": "Jelszó visszaállítása",
@@ -898,9 +927,11 @@
"reset": {
"title": "Állítson be új jelszót",
"subtitle": "Válasszon erős jelszót, amelyet máshol nem használ.",
"passwordPlaceholder": "Új jelszó (minimum 6 karakter)",
"passwordPlaceholder": "Új jelszó (minimum 12 karakter)",
"resetPassword": "Jelszó visszaállítása",
"backToLogin": "Vissza a bejelentkezéshez"
"backToLogin": "Vissza a bejelentkezéshez",
"passwordMinLength": "A jelszónak legalább 12 karakter hosszúnak kell lennie",
"tooManyAttempts": "Túl sok próbálkozás — próbáld később"
},
"verify": {
"verifiedTitle": "Minden készen áll",
+42 -11
View File
@@ -979,13 +979,17 @@
"forgotPassword": "Password dimenticata?",
"errorInvalidCredentials": "Nome utente o password non validi",
"errorInvalid2fa": "Codice 2FA non valido",
"errorUnverified": "Verifica la tua email prima di accedere.",
"errorUnverified": "Verifica il tuo indirizzo email prima di accedere.",
"errorCaptcha": "Verifica captcha non riuscita. Riprova.",
"welcomeBack": "Bentornato",
"welcomeBackSub": "Accedi per continuare su {hotelName}",
"whoIsOnline": "Chi è online",
"newestCitizens": "Nuovi cittadini",
"usersOnline": "{count} online"
"newestCitizens": "Cittadini più recenti",
"usersOnline": "{count} online",
"username": "Nome utente",
"password": "Password",
"showPassword": "Mostra",
"hidePassword": "Nascondi"
},
"register": {
"title": "Crea un account",
@@ -996,7 +1000,7 @@
"confirmPassword": "Ripeti la password",
"usernamePlaceholder": "Nome utente",
"emailPlaceholder": "Email",
"passwordPlaceholder": "Password (min 6 caratteri)",
"passwordPlaceholder": "Password (min 12 caratteri)",
"confirmPasswordPlaceholder": "Ripeti la password",
"selectOutfit": "Scegli il tuo outfit",
"termsAccept": "Ho 18+ anni e accetto i termini e regole di {hotel}.",
@@ -1008,7 +1012,7 @@
"termsError": "Devi accettare i termini e regole per registrarti.",
"usernameError": "Il nome utente è obbligatorio.",
"emailError": "Email valida obbligatoria.",
"passwordError": "La password deve essere di almeno 6 caratteri.",
"passwordError": "La password deve contenere almeno 12 caratteri",
"confirmPasswordError": "Le password non coincidono.",
"termsRequired": "Devi accettare i termini e le regole.",
"usernameRequired": "Il nome utente è obbligatorio.",
@@ -1018,15 +1022,40 @@
"alreadyHaveAccountPre": "Hai già un account?",
"alreadyHaveAccountLink": "Accedi",
"whoIsOnline": "Chi è online",
"newestCitizens": "Nuovi cittadini",
"newestCitizens": "Cittadini più recenti",
"usersOnline": "{count} online",
"accepted": "Accettato e confermato",
"accepted": "Accettato e d'accordo",
"showPassword": "Mostra",
"hidePassword": "Nascondi",
"accountDetails": "Dettagli dell’account",
"accountDetails": "Dati account",
"credentials": "Credenziali e sicurezza",
"ageVerified": "Ho 18+ e accetto il requisito di età.",
"invitedBy": "Invitato da {username}"
"invitedBy": "Invitato da {username}",
"strengthWeak": "Debole",
"strengthFair": "Discreta",
"strengthGood": "Buona",
"strengthStrong": "Forte",
"passwordMinLength": "La password deve contenere almeno 12 caratteri",
"passwordUpper": "La password deve contenere almeno una lettera maiuscola",
"passwordLower": "La password deve contenere almeno una lettera minuscola",
"passwordDigit": "La password deve contenere almeno una cifra",
"passwordSpecial": "La password deve contenere almeno un carattere speciale",
"passwordMaxLength": "La password è troppo lunga",
"usernameMinLength": "Il nome utente deve contenere almeno 3 caratteri",
"usernameMaxLength": "Il nome utente può contenere al massimo 25 caratteri",
"usernamePattern": "Il nome utente può contenere solo lettere, numeri, underscore e trattino",
"usernameReserved": "Questo nome utente è riservato",
"emailValid": "Inserisci un indirizzo email valido",
"emailDisposable": "I domini email temporanei non sono consentiti",
"passwordsMatch": "Le password non coincidono.",
"captchaFailed": "Verifica captcha non riuscita. Riprova.",
"usernameTaken": "Questo nome utente è già in uso",
"rateLimited": "Troppi tentativi di registrazione. Attendi qualche minuto e riprova.",
"vpnBlocked": "Le registrazioni tramite connessioni VPN/proxy non sono consentite.",
"maxAccountsPerIp": "Hai raggiunto il numero massimo di account per la tua connessione.",
"unavailable": "La registrazione è temporaneamente non disponibile.",
"createFailed": "Impossibile creare l'account. Riprova o contatta lo staff.",
"invalidInput": "Controlla i campi evidenziati e riprova."
},
"forgot": {
"title": "Reimposta password",
@@ -1040,9 +1069,11 @@
"reset": {
"title": "Imposta una nuova password",
"subtitle": "Scegli una password robusta che non usi altrove.",
"passwordPlaceholder": "Nuova password (min 6 caratteri)",
"passwordPlaceholder": "Nuova password (min 12 caratteri)",
"resetPassword": "Reimposta password",
"backToLogin": "Torna all'accesso"
"backToLogin": "Torna all'accesso",
"passwordMinLength": "La password deve contenere almeno 12 caratteri",
"tooManyAttempts": "Troppi tentativi — riprova più tardi"
},
"verify": {
"verifiedTitle": "È tutto pronto",
+94 -63
View File
@@ -6067,69 +6067,98 @@
"rateLimit": "Too many attempts. Please wait before trying again."
},
"login": {
"title": "Sign in",
"subtitle": "Welcome back — log in to enter the hotel.",
"subtitle2fa": "Enter the 6-digit code from your authenticator.",
"welcomeBack": "Welcome back",
"welcomeBackSub": "Sign in to continue to {hotelName}",
"usernamePlaceholder": "Username",
"passwordPlaceholder": "Password",
"codePlaceholder": "2FA code",
"pleaseWait": "Please wait…",
"verify": "Verify",
"signIn": "Sign in",
"or": "or",
"noAccount": "No account?",
"createOne": "Create one",
"forgotPassword": "Forgot password?",
"errorInvalidCredentials": "Invalid username or password",
"errorInvalid2fa": "Invalid 2FA code",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"title": "ログイン",
"subtitle": "ログインして次のホテルへ進みましょう。",
"subtitle2fa": "認証アプリの6桁のコードを入力してください。",
"welcomeBack": "おかえりなさい",
"welcomeBackSub": "ログインして {hotelName} に参加しましょう",
"usernamePlaceholder": "ユーザー名",
"passwordPlaceholder": "パスワード",
"codePlaceholder": "2FAコードを入力",
"pleaseWait": "お待ちください...",
"verify": "確認",
"signIn": "ログイン",
"or": "または",
"noAccount": "アカウントをお持ちでない方",
"createOne": "アカウントを作成",
"forgotPassword": "パスワードをお忘れですか?",
"errorInvalidCredentials": "ユーザー名またはパスワードが違います",
"errorInvalid2fa": "2FAコードが正しくありません",
"errorUnverified": "ログインする前にメールアドレスを認証してください。",
"errorCaptcha": "認証コードの検証に失敗しました。再度お試しください。",
"whoIsOnline": "オンラインの人",
"newestCitizens": "最新の住民",
"usersOnline": "{count} 人がオンライン",
"username": "ユーザー名",
"password": "パスワード",
"showPassword": "表示",
"hidePassword": "非表示"
},
"register": {
"title": "Create account",
"subtitle": "Join the hotel — it only takes a moment.",
"username": "Username",
"email": "Email",
"password": "Password",
"confirmPassword": "Repeat password",
"usernamePlaceholder": "Username",
"emailPlaceholder": "Email",
"passwordPlaceholder": "Password (min 8 chars)",
"confirmPasswordPlaceholder": "Repeat password",
"selectOutfit": "Select your outfit",
"termsAccept": "I am 18+ and accept the {hotel} terms & rules.",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"createAccount": "Create account",
"creatingAccount": "Creating account...",
"redirecting": "Redirecting to your account...",
"alreadyHaveAccount": "Already have an account? Login!",
"alreadyHaveAccountPre": "Already have an account?",
"alreadyHaveAccountLink": "Sign in",
"register": "Register",
"whoIsOnline": "Who's online",
"usersOnline": "{count} online",
"termsError": "You must accept the terms & rules to register.",
"usernameError": "Username is required.",
"emailError": "Valid email is required.",
"passwordError": "Password must be at least 6 characters.",
"confirmPasswordError": "Passwords do not match.",
"termsRequired": "You must accept the terms & rules.",
"usernameRequired": "Username is required.",
"emailRequired": "Email is required.",
"passwordRequired": "Password is required.",
"passwordsDontMatch": "Passwords do not match.",
"newestCitizens": "Newest citizens",
"ageVerified": "18歳以上です。年齢要件に同意します。",
"invitedBy": "{username} さんに招待されました"
"title": "アカウント作成",
"subtitle": "ホテルに参加しましょう — すぐに終わります。",
"username": "ユーザー名",
"email": "メールアドレス",
"password": "パスワード",
"confirmPassword": "パスワードの確認",
"usernamePlaceholder": "ユーザー名",
"emailPlaceholder": "メールアドレス",
"passwordPlaceholder": "パスワード(12文字以上)",
"confirmPasswordPlaceholder": "パスワードの確認",
"selectOutfit": "アバターを選んでスタイルを設定",
"termsAccept": "18歳以上であり、{hotel} の規約に同意します。",
"accepted": "承認して同意しました",
"showPassword": "表示",
"hidePassword": "非表示",
"accountDetails": "アカウント情報",
"credentials": "ログイン情報とセキュリティ",
"createAccount": "アカウントを作成",
"creatingAccount": "アカウントを作成中...",
"redirecting": "アカウント画面へ移動しています...",
"alreadyHaveAccount": "すでにアカウントをお持ちですか?ログインしましょう!",
"alreadyHaveAccountPre": "すでにアカウントをお持ちですか?",
"alreadyHaveAccountLink": "ログイン",
"register": "登録",
"whoIsOnline": "オンラインの人",
"usersOnline": "{count} 人がオンライン",
"termsError": "登録するには規約に同意する必要があります。",
"usernameError": "ユーザー名は必須です。",
"emailError": "有効なメールアドレスが必要です。",
"passwordError": "パスワードは12文字以上にしてください",
"confirmPasswordError": "パスワードが一致しません。",
"termsRequired": "規約に同意する必要があります。",
"usernameRequired": "ユーザー名は必須です。",
"emailRequired": "メールアドレスは必須です。",
"passwordRequired": "パスワードは必須です。",
"passwordsDontMatch": "パスワードが一致しません。",
"newestCitizens": "最新の住民",
"ageVerified": "18歳以上であり、年齢要件に同意します。",
"invitedBy": "{username} からの招待",
"strengthWeak": "弱",
"strengthFair": "普通",
"strengthGood": "良",
"strengthStrong": "強",
"passwordMinLength": "パスワードは12文字以上にしてください",
"passwordUpper": "パスワードには大文字を1文字以上含めてください",
"passwordLower": "パスワードには小文字を1文字以上含めてください",
"passwordDigit": "パスワードには数字を1文字以上含めてください",
"passwordSpecial": "パスワードには記号を1文字以上含めてください",
"passwordMaxLength": "パスワードが長すぎます",
"usernameMinLength": "ユーザー名は3文字以上にしてください",
"usernameMaxLength": "ユーザー名は25文字以内にしてください",
"usernamePattern": "ユーザー名には英数字・アンダースコア・ハイフンのみ使用できます",
"usernameReserved": "そのユーザー名は予約されています",
"emailValid": "有効なメールアドレスを入力してください",
"emailDisposable": "一時的なメールアドレスドメインは使用できません",
"passwordsMatch": "Passwords do not match.",
"captchaFailed": "認証コードの検証に失敗しました。再度お試しください。",
"usernameTaken": "そのユーザー名はすでに使用されています",
"rateLimited": "登録の試行が多すぎます。数分待ってから再度お試しください。",
"vpnBlocked": "VPN/プロキシ経由の登録は許可されていません。",
"maxAccountsPerIp": "この接続で作成できるアカウント数の上限に達しました。",
"unavailable": "現在、登録を一時停止しています。",
"createFailed": "アカウントを作成できませんでした。再度お試しいただくか、スタッフにご連絡ください。",
"invalidInput": "強調された項目を確認して、もう一度お試しください。"
},
"forgot": {
"title": "Reset password",
@@ -6143,9 +6172,11 @@
"reset": {
"title": "Set a new password",
"subtitle": "Choose a strong password you don't use elsewhere.",
"passwordPlaceholder": "New password (min 6 chars)",
"passwordPlaceholder": "New password (min 12 chars)",
"resetPassword": "Reset password",
"backToLogin": "Back to login"
"backToLogin": "Back to login",
"passwordMinLength": "パスワードは12文字以上にしてください",
"tooManyAttempts": "試行回数が多すぎます — 後で再度お試しください"
},
"verify": {
"verifiedTitle": "You're all set",
+45 -14
View File
@@ -1013,9 +1013,13 @@
"errorCaptcha": "Captcha-verificatie mislukt. Probeer het opnieuw.",
"welcomeBack": "Welkom terug",
"welcomeBackSub": "Log in om verder te gaan naar {hotelName}",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"whoIsOnline": "Wie is online",
"newestCitizens": "Nieuwste burgers",
"usersOnline": "{count} online",
"showPassword": "Toon",
"hidePassword": "Verberg",
"username": "Gebruikersnaam",
"password": "Wachtwoord"
},
"register": {
"title": "Account aanmaken",
@@ -1026,7 +1030,7 @@
"confirmPassword": "Wachtwoord herhalen",
"usernamePlaceholder": "Gebruikersnaam",
"emailPlaceholder": "E-mail",
"passwordPlaceholder": "Wachtwoord (min 6 tekens)",
"passwordPlaceholder": "Wachtwoord (min 12 tekens)",
"confirmPasswordPlaceholder": "Wachtwoord herhalen",
"selectOutfit": "Kies je outfit",
"termsAccept": "Ik ben 18+ en accepteer de {hotel} voorwaarden & regels.",
@@ -1042,21 +1046,46 @@
"termsError": "Je moet de voorwaarden & regels accepteren om te registreren.",
"usernameError": "Gebruikersnaam is verplicht.",
"emailError": "Een geldig e-mailadres is verplicht.",
"passwordError": "Wachtwoord moet minimaal 6 tekens bevatten.",
"passwordError": "Wachtwoord moet minimaal 12 tekens lang zijn",
"confirmPasswordError": "Wachtwoorden komen niet overeen.",
"termsRequired": "Je moet de voorwaarden & regels accepteren.",
"termsRequired": "Je moet de voorwaarden accepteren.",
"ageVerified": "Ik ben 18+ en ga akkoord met de leeftijdsvereiste.",
"usernameRequired": "Gebruikersnaam is verplicht.",
"emailRequired": "E-mail is verplicht.",
"passwordRequired": "Wachtwoord is verplicht.",
"passwordsDontMatch": "Wachtwoorden komen niet overeen.",
"invitedBy": "Uitgenodigd door {username}",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens"
"accepted": "Geaccepteerd & akkoord",
"showPassword": "Toon",
"hidePassword": "Verberg",
"accountDetails": "Accountgegevens",
"credentials": "Gegevens & beveiliging",
"newestCitizens": "Nieuwste burgers",
"strengthWeak": "Zwak",
"strengthFair": "Redelijk",
"strengthGood": "Goed",
"strengthStrong": "Sterk",
"passwordMinLength": "Wachtwoord moet minimaal 12 tekens lang zijn",
"passwordUpper": "Wachtwoord moet minstens één hoofdletter bevatten",
"passwordLower": "Wachtwoord moet minstens één kleine letter bevatten",
"passwordDigit": "Wachtwoord moet minstens één cijfer bevatten",
"passwordSpecial": "Wachtwoord moet minstens één speciaal teken bevatten",
"passwordMaxLength": "Wachtwoord is te lang",
"usernameMinLength": "Gebruikersnaam moet minimaal 3 tekens lang zijn",
"usernameMaxLength": "Gebruikersnaam mag maximaal 25 tekens lang zijn",
"usernamePattern": "Gebruikersnaam mag alleen letters, cijfers, underscore en streepje bevatten",
"usernameReserved": "Deze gebruikersnaam is gereserveerd",
"emailValid": "Voer een geldig e-mailadres in",
"emailDisposable": "Tijdelijke e-maildomeinen zijn niet toegestaan",
"passwordsMatch": "Wachtwoorden komen niet overeen",
"usernameTaken": "Deze gebruikersnaam is al in gebruik",
"captchaFailed": "Captcha-verificatie mislukt. Probeer het opnieuw.",
"rateLimited": "Te veel registratiepogingen. Wacht een paar minuten en probeer het opnieuw.",
"vpnBlocked": "Registraties via VPN/proxy-verbindingen zijn niet toegestaan.",
"maxAccountsPerIp": "Je hebt het maximale aantal accounts voor je verbinding bereikt.",
"unavailable": "Registratie is tijdelijk niet beschikbaar.",
"createFailed": "Het account kon niet worden aangemaakt. Probeer het opnieuw of neem contact op met het personeel.",
"invalidInput": "Controleer de gemarkeerde velden en probeer het opnieuw."
},
"forgot": {
"title": "Wachtwoord resetten",
@@ -1070,9 +1099,11 @@
"reset": {
"title": "Nieuw wachtwoord instellen",
"subtitle": "Kies een sterk wachtwoord dat je nergens anders gebruikt.",
"passwordPlaceholder": "Nieuw wachtwoord (min 6 tekens)",
"passwordPlaceholder": "Nieuw wachtwoord (min 12 tekens)",
"resetPassword": "Wachtwoord resetten",
"backToLogin": "Terug naar inloggen"
"backToLogin": "Terug naar inloggen",
"passwordMinLength": "Wachtwoord moet minimaal 12 tekens lang zijn",
"tooManyAttempts": "Te veel pogingen — probeer het later opnieuw"
},
"verify": {
"verifiedTitle": "Je bent helemaal klaar",
+49 -18
View File
@@ -839,11 +839,15 @@
"errorInvalid2fa": "Ugyldig 2FA-kode",
"welcomeBack": "Velkommen tilbake",
"welcomeBackSub": "Logg inn for å fortsette til {hotelName}",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"errorUnverified": "Bekreft e-postadressen din før du logger inn.",
"errorCaptcha": "Captcha-verifisering mislyktes. Prøv igjen.",
"whoIsOnline": "Hvem er påloggede",
"newestCitizens": "Nyeste innbyggere",
"usersOnline": "{count} påloggede",
"username": "Brukernavn",
"password": "Passord",
"showPassword": "Vis",
"hidePassword": "Skjul"
},
"register": {
"title": "Opprett konto",
@@ -854,7 +858,7 @@
"confirmPassword": "Gjenta passord",
"usernamePlaceholder": "Brukernavn",
"emailPlaceholder": "E-post",
"passwordPlaceholder": "Passord (minst 6 tegn)",
"passwordPlaceholder": "Passord (minst 12 tegn)",
"confirmPasswordPlaceholder": "Gjenta passord",
"selectOutfit": "Velg antrekket ditt",
"termsAccept": "Jeg er 18+ og godtar vilkårene og reglene for {hotel}.",
@@ -866,7 +870,7 @@
"termsError": "Du må godta vilkårene og reglene for å registrere deg.",
"usernameError": "Brukernavn er påkrevd.",
"emailError": "Gyldig e-post er nødvendig.",
"passwordError": "Passordet må være på minst 6 tegn.",
"passwordError": "Passordet må være på minst 12 tegn.",
"confirmPasswordError": "Passord stemmer ikke.",
"termsRequired": "Du må godta vilkårene og reglene.",
"usernameRequired": "Brukernavn er påkrevd.",
@@ -875,16 +879,41 @@
"passwordsDontMatch": "Passord stemmer ikke.",
"alreadyHaveAccountPre": "Har du allerede en konto?",
"alreadyHaveAccountLink": "Logg inn",
"whoIsOnline": "Hvem er online",
"usersOnline": "{count} online",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens",
"whoIsOnline": "Hvem er påloggede",
"usersOnline": "{count} påloggede",
"accepted": "Akseptert og enig",
"showPassword": "Vis",
"hidePassword": "Skjul",
"accountDetails": "Kontoopplysninger",
"credentials": "Innloggingsdetaljer og sikkerhet",
"newestCitizens": "Nyeste innbyggere",
"ageVerified": "Jeg er 18+ og godtar alderskravet.",
"invitedBy": "Invitert av {username}"
"invitedBy": "Invitert av {username}",
"strengthWeak": "Svak",
"strengthFair": "Middels",
"strengthGood": "God",
"strengthStrong": "Sterk",
"passwordMinLength": "Passordet må være minst 12 tegn",
"passwordUpper": "Passordet må inneholde minst én stor bokstav",
"passwordLower": "Passordet må inneholde minst én liten bokstav",
"passwordDigit": "Passordet må inneholde minst ett siffer",
"passwordSpecial": "Passordet må inneholde minst ett spesialtegn",
"passwordMaxLength": "Passordet er for langt",
"usernameMinLength": "Brukernavnet må være minst 3 tegn",
"usernameMaxLength": "Brukernavnet kan være maks 25 tegn",
"usernamePattern": "Brukernavnet kan bare inneholde bokstaver, sifre, understrek og bindestrek",
"usernameReserved": "Dette brukernavnet er reservert",
"emailValid": "Oppgi en gyldig e-postadresse",
"emailDisposable": "Midlertidige e-postdomener er ikke tillatt",
"passwordsMatch": "Passord stemmer ikke.",
"captchaFailed": "Captcha-verifisering mislyktes. Prøv igjen.",
"usernameTaken": "Dette brukernavnet er allerede tatt",
"rateLimited": "For mange registreringsforsøk. Vent et par minutter og prøv igjen.",
"vpnBlocked": "Registrering via VPN/proxy-tilkoblinger er ikke tillatt.",
"maxAccountsPerIp": "Du har nådd maksimalt antall kontoer for tilkoblingen din.",
"unavailable": "Registrering er midlertidig utilgjengelig.",
"createFailed": "Kontoen kunne ikke opprettes. Prøv igjen, eller kontakt personalet.",
"invalidInput": "Kontroller de markerte feltene og prøv igjen."
},
"forgot": {
"title": "Tilbakestill passord",
@@ -898,9 +927,11 @@
"reset": {
"title": "Angi et nytt passord",
"subtitle": "Velg et sterkt passord du ikke bruker andre steder.",
"passwordPlaceholder": "Nytt passord (minst 6 tegn)",
"passwordPlaceholder": "Nytt passord (minst 12 tegn)",
"resetPassword": "Tilbakestill passord",
"backToLogin": "Tilbake til innlogging"
"backToLogin": "Tilbake til innlogging",
"passwordMinLength": "Passordet må være minst 12 tegn",
"tooManyAttempts": "For mange forsøk — prøv igjen senere"
},
"verify": {
"verifiedTitle": "Du er klar",
+47 -16
View File
@@ -839,11 +839,15 @@
"errorInvalid2fa": "Nieprawidłowy kod 2FA",
"welcomeBack": "Witaj z powrotem",
"welcomeBackSub": "Zaloguj się, aby kontynuować w {hotelName}",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"errorUnverified": "Potwierdź swój e-mail przed zalogowaniem.",
"errorCaptcha": "Weryfikacja captcha nie powiodła się. Spróbuj ponownie.",
"whoIsOnline": "Kto jest online",
"newestCitizens": "Najnowsi mieszkańcy",
"usersOnline": "{count} online",
"username": "Nazwa użytkownika",
"password": "Hasło",
"showPassword": "Pokaż",
"hidePassword": "Ukryj"
},
"register": {
"title": "Utwórz konto",
@@ -854,7 +858,7 @@
"confirmPassword": "Powtórz hasło",
"usernamePlaceholder": "Nazwa użytkownika",
"emailPlaceholder": "E-mail",
"passwordPlaceholder": "Hasło (min. 6 znaków)",
"passwordPlaceholder": "Hasło (min. 12 znaków)",
"confirmPasswordPlaceholder": "Powtórz hasło",
"selectOutfit": "Wybierz swój strój",
"termsAccept": "Mam ukończone 18 lat i akceptuję warunki i zasady hotelu {hotel}.",
@@ -866,7 +870,7 @@
"termsError": "Aby się zarejestrować, musisz zaakceptować regulamin.",
"usernameError": "Nazwa użytkownika jest wymagana.",
"emailError": "Wymagany jest prawidłowy adres e-mail.",
"passwordError": "Hasło musi mieć co najmniej 6 znaków.",
"passwordError": "Hasło musi mieć co najmniej 12 znaków",
"confirmPasswordError": "Hasła nie pasują.",
"termsRequired": "Musisz zaakceptować warunki i zasady.",
"usernameRequired": "Nazwa użytkownika jest wymagana.",
@@ -877,14 +881,39 @@
"alreadyHaveAccountLink": "Zaloguj się",
"whoIsOnline": "Kto jest online",
"usersOnline": "{count} online",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens",
"accepted": "Zaakceptowano i zgadzam się",
"showPassword": "Pokaż",
"hidePassword": "Ukryj",
"accountDetails": "Dane konta",
"credentials": "Dane logowania i bezpieczeństwo",
"newestCitizens": "Najnowsi mieszkańcy",
"ageVerified": "Mam 18+ i akceptuję wymóg wieku.",
"invitedBy": "Zaproszony przez {username}"
"invitedBy": "Zaproszony przez {username}",
"strengthWeak": "Słabe",
"strengthFair": "Średnie",
"strengthGood": "Dobre",
"strengthStrong": "Silne",
"passwordMinLength": "Hasło musi mieć co najmniej 12 znaków",
"passwordUpper": "Hasło musi zawierać co najmniej jedną wielką literę",
"passwordLower": "Hasło musi zawierać co najmniej jedną małą literę",
"passwordDigit": "Hasło musi zawierać co najmniej jedną cyfrę",
"passwordSpecial": "Hasło musi zawierać co najmniej jeden znak specjalny",
"passwordMaxLength": "Hasło jest za długie",
"usernameMinLength": "Nazwa użytkownika musi mieć co najmniej 3 znaki",
"usernameMaxLength": "Nazwa użytkownika może mieć maksymalnie 25 znaków",
"usernamePattern": "Nazwa użytkownika może zawierać tylko litery, cyfry, podkreślenie i myślnik",
"usernameReserved": "Ta nazwa użytkownika jest zarezerwowana",
"emailValid": "Podaj prawidłowy adres e-mail",
"emailDisposable": "Tymczasowe domeny e-mail nie są dozwolone",
"passwordsMatch": "Hasła nie pasują.",
"captchaFailed": "Weryfikacja captcha nie powiodła się. Spróbuj ponownie.",
"usernameTaken": "Ta nazwa użytkownika jest już zajęta",
"rateLimited": "Zbyt wiele prób rejestracji. Odczekaj kilka minut i spróbuj ponownie.",
"vpnBlocked": "Rejestracja przez połączenia VPN/proxy jest niedozwolona.",
"maxAccountsPerIp": "Osiągnięto maksymalną liczbę kont dla Twojego połączenia.",
"unavailable": "Rejestracja jest tymczasowo niedostępna.",
"createFailed": "Nie udało się utworzyć konta. Spróbuj ponownie lub skontaktuj się z obsługą.",
"invalidInput": "Sprawdź zaznaczone pola i spróbuj ponownie."
},
"forgot": {
"title": "Zresetuj hasło",
@@ -898,9 +927,11 @@
"reset": {
"title": "Ustaw nowe hasło",
"subtitle": "Wybierz silne hasło, którego nie używasz gdzie indziej.",
"passwordPlaceholder": "Nowe hasło (min. 6 znaków)",
"passwordPlaceholder": "Nowe hasło (min. 12 znaków)",
"resetPassword": "Zresetuj hasło",
"backToLogin": "Powrót do logowania"
"backToLogin": "Powrót do logowania",
"passwordMinLength": "Hasło musi mieć co najmniej 12 znaków",
"tooManyAttempts": "Zbyt wiele prób — spróbuj później"
},
"verify": {
"verifiedTitle": "Wszystko gotowe",
+47 -16
View File
@@ -839,11 +839,15 @@
"errorInvalid2fa": "Código 2FA inválido",
"welcomeBack": "Bem-vindo de volta",
"welcomeBackSub": "Entre para continuar em {hotelName}",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"errorUnverified": "Verifique seu e-mail antes de entrar.",
"errorCaptcha": "A verificação captcha falhou. Tente novamente.",
"whoIsOnline": "Quem está online",
"newestCitizens": "Cidadãos mais recentes",
"usersOnline": "{count} online",
"username": "Nome de usuário",
"password": "Senha",
"showPassword": "Mostrar",
"hidePassword": "Ocultar"
},
"register": {
"title": "Criar conta",
@@ -854,7 +858,7 @@
"confirmPassword": "Repetir senha",
"usernamePlaceholder": "Nome de usuário",
"emailPlaceholder": "E-mail",
"passwordPlaceholder": "Senha (mín. 6 caracteres)",
"passwordPlaceholder": "Senha (mín. 12 caracteres)",
"confirmPasswordPlaceholder": "Repetir senha",
"selectOutfit": "Selecione sua roupa",
"termsAccept": "Tenho mais de 18 anos e aceito os termos e regras do {hotel}.",
@@ -866,7 +870,7 @@
"termsError": "Você deve aceitar os termos e regras para se registrar.",
"usernameError": "O nome de usuário é obrigatório.",
"emailError": "E-mail válido é obrigatório.",
"passwordError": "A senha deve ter pelo menos 6 caracteres.",
"passwordError": "A senha deve ter pelo menos 12 caracteres",
"confirmPasswordError": "As senhas não coincidem.",
"termsRequired": "Você deve aceitar os termos e regras.",
"usernameRequired": "O nome de usuário é obrigatório.",
@@ -877,14 +881,39 @@
"alreadyHaveAccountLink": "Entrar",
"whoIsOnline": "Quem está online",
"usersOnline": "{count} online",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens",
"accepted": "Aceito e concordo",
"showPassword": "Mostrar",
"hidePassword": "Ocultar",
"accountDetails": "Dados da conta",
"credentials": "Credenciais e segurança",
"newestCitizens": "Cidadãos mais recentes",
"ageVerified": "Tenho 18+ e aceito o requisito de idade.",
"invitedBy": "Convidado por {username}"
"invitedBy": "Convidado por {username}",
"strengthWeak": "Fraca",
"strengthFair": "Razoável",
"strengthGood": "Boa",
"strengthStrong": "Forte",
"passwordMinLength": "A senha deve ter pelo menos 12 caracteres",
"passwordUpper": "A senha deve conter pelo menos uma letra maiúscula",
"passwordLower": "A senha deve conter pelo menos uma letra minúscula",
"passwordDigit": "A senha deve conter pelo menos um dígito",
"passwordSpecial": "A senha deve conter pelo menos um caractere especial",
"passwordMaxLength": "A senha é longa demais",
"usernameMinLength": "O nome de usuário deve ter pelo menos 3 caracteres",
"usernameMaxLength": "O nome de usuário pode ter no máximo 25 caracteres",
"usernamePattern": "O nome de usuário só pode conter letras, números, sublinhado e hífen",
"usernameReserved": "Esse nome de usuário é reservado",
"emailValid": "Digite um endereço de e-mail válido",
"emailDisposable": "Domínios de e-mail temporários não são permitidos",
"passwordsMatch": "As senhas não coincidem.",
"captchaFailed": "A verificação captcha falhou. Tente novamente.",
"usernameTaken": "Esse nome de usuário já está em uso",
"rateLimited": "Muitas tentativas de cadastro. Aguarde alguns minutos e tente novamente.",
"vpnBlocked": "Cadastros via conexões VPN/proxy não são permitidos.",
"maxAccountsPerIp": "Você atingiu o limite máximo de contas para a sua conexão.",
"unavailable": "O cadastro está temporariamente indisponível.",
"createFailed": "Não foi possível criar a conta. Tente novamente ou fale com a equipe.",
"invalidInput": "Confira os campos destacados e tente novamente."
},
"forgot": {
"title": "Redefinir senha",
@@ -898,9 +927,11 @@
"reset": {
"title": "Defina uma nova senha",
"subtitle": "Escolha uma senha forte que você não usa em outro lugar.",
"passwordPlaceholder": "Nova senha (mínimo 6 caracteres)",
"passwordPlaceholder": "Nova senha (mínimo 12 caracteres)",
"resetPassword": "Redefinir senha",
"backToLogin": "Voltar ao login"
"backToLogin": "Voltar ao login",
"passwordMinLength": "A senha deve ter pelo menos 12 caracteres",
"tooManyAttempts": "Muitas tentativas — tente mais tarde"
},
"verify": {
"verifiedTitle": "Você está pronto",
+48 -17
View File
@@ -836,14 +836,18 @@
"createOne": "Creați unul",
"forgotPassword": "Ai uitat parola?",
"errorInvalidCredentials": "Nume de utilizator sau parolă nevalidă",
"errorInvalid2fa": "Cod 2FA nevalid",
"errorInvalid2fa": "Cod 2FA invalid",
"welcomeBack": "Bine ai revenit",
"welcomeBackSub": "Autentifică-te pentru a continua pe {hotelName}",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"errorUnverified": "Te rugăm să îți verifici e-mailul înainte de a te autentifica.",
"errorCaptcha": "Verificarea captcha a eșuat. Încearcă din nou.",
"whoIsOnline": "Cine este online",
"newestCitizens": "Cei mai noi locuitori",
"usersOnline": "{count} online",
"username": "Nume de utilizator",
"password": "Parolă",
"showPassword": "Arată",
"hidePassword": "Ascunde"
},
"register": {
"title": "Creați cont",
@@ -854,7 +858,7 @@
"confirmPassword": "Repetați parola",
"usernamePlaceholder": "Nume de utilizator",
"emailPlaceholder": "E-mail",
"passwordPlaceholder": "Parola (min 6 caractere)",
"passwordPlaceholder": "Parola (min 12 caractere)",
"confirmPasswordPlaceholder": "Repetați parola",
"selectOutfit": "Alege-ți ținuta",
"termsAccept": "Am peste 18 ani și accept termenii și regulile {hotel}.",
@@ -866,7 +870,7 @@
"termsError": "Trebuie să acceptați termenii și regulile pentru a vă înregistra.",
"usernameError": "Numele de utilizator este obligatoriu.",
"emailError": "Este necesar un e-mail valid.",
"passwordError": "Parola trebuie să aibă cel puțin 6 caractere.",
"passwordError": "Parola trebuie să aibă cel puțin 12 caractere",
"confirmPasswordError": "Parolele nu se potrivesc.",
"termsRequired": "Trebuie să acceptați termenii și regulile.",
"usernameRequired": "Numele de utilizator este obligatoriu.",
@@ -877,14 +881,39 @@
"alreadyHaveAccountLink": "Autentificare",
"whoIsOnline": "Cine este online",
"usersOnline": "{count} online",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens",
"accepted": "Acceptat și de acord",
"showPassword": "Arată",
"hidePassword": "Ascunde",
"accountDetails": "Datele contului",
"credentials": "Credențiale și securitate",
"newestCitizens": "Cei mai noi locuitori",
"ageVerified": "Am 18+ și accept cerința de vârstă.",
"invitedBy": "Invitat de {username}"
"invitedBy": "Invitat de {username}",
"strengthWeak": "Slabă",
"strengthFair": "Medie",
"strengthGood": "Bună",
"strengthStrong": "Puternică",
"passwordMinLength": "Parola trebuie să aibă cel puțin 12 caractere",
"passwordUpper": "Parola trebuie să conțină cel puțin o literă mare",
"passwordLower": "Parola trebuie să conțină cel puțin o literă mică",
"passwordDigit": "Parola trebuie să conțină cel puțin o cifră",
"passwordSpecial": "Parola trebuie să conțină cel puțin un caracter special",
"passwordMaxLength": "Parola este prea lungă",
"usernameMinLength": "Numele de utilizator trebuie să aibă cel puțin 3 caractere",
"usernameMaxLength": "Numele de utilizator poate avea cel mult 25 de caractere",
"usernamePattern": "Numele de utilizator poate conține doar litere, cifre, linie de subliniere și linie",
"usernameReserved": "Acest nume de utilizator este rezervat",
"emailValid": "Introdu o adresă de e-mail validă",
"emailDisposable": "Domeniile de e-mail temporare nu sunt permise",
"passwordsMatch": "Parolele nu se potrivesc.",
"captchaFailed": "Verificarea captcha a eșuat. Încearcă din nou.",
"usernameTaken": "Acest nume de utilizator este deja folosit",
"rateLimited": "Prea multe încercări de înregistrare. Așteaptă câteva minute și încearcă din nou.",
"vpnBlocked": "Înregistrările prin conexiuni VPN/proxy nu sunt permise.",
"maxAccountsPerIp": "Ai atins numărul maxim de conturi pentru conexiunea ta.",
"unavailable": "Înregistrarea este temporar indisponibilă.",
"createFailed": "Contul nu a putut fi creat. Încearcă din nou sau contactează personalul.",
"invalidInput": "Verifică câmpurile evidențiate și încearcă din nou."
},
"forgot": {
"title": "Resetează parola",
@@ -898,9 +927,11 @@
"reset": {
"title": "Setați o nouă parolă",
"subtitle": "Alegeți o parolă puternică pe care nu o utilizați în altă parte.",
"passwordPlaceholder": "Parolă nouă (min 6 caractere)",
"passwordPlaceholder": "Parolă nouă (min 12 caractere)",
"resetPassword": "Resetează parola",
"backToLogin": "Înapoi la autentificare"
"backToLogin": "Înapoi la autentificare",
"passwordMinLength": "Parola trebuie să aibă cel puțin 12 caractere",
"tooManyAttempts": "Prea multe încercări — încearcă mai târziu"
},
"verify": {
"verifiedTitle": "Ești gata",
+50 -19
View File
@@ -834,14 +834,18 @@
"createOne": "Создать",
"forgotPassword": "Забыли пароль?",
"errorInvalidCredentials": "Неверное имя пользователя или пароль",
"errorInvalid2fa": "Недействительный код 2FA",
"errorInvalid2fa": "Неверный код 2FA",
"welcomeBack": "С возвращением",
"welcomeBackSub": "Войди, чтобы продолжить в {hotelName}",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"errorUnverified": "Подтвердите адрес электронной почты перед входом.",
"errorCaptcha": "Проверка captcha не пройдена. Попробуйте ещё раз.",
"whoIsOnline": "Кто в сети",
"newestCitizens": "Новые жители",
"usersOnline": "{count} в сети",
"username": "Имя пользователя",
"password": "Пароль",
"showPassword": "Показать",
"hidePassword": "Скрыть"
},
"register": {
"title": "Создать аккаунт",
@@ -852,7 +856,7 @@
"confirmPassword": "Повторите пароль",
"usernamePlaceholder": "Имя пользователя",
"emailPlaceholder": "Электронная почта",
"passwordPlaceholder": "Пароль (мин. 6 символов)",
"passwordPlaceholder": "Пароль (мин. 12 символов)",
"confirmPasswordPlaceholder": "Повторите пароль",
"selectOutfit": "Выберите свой наряд",
"termsAccept": "Мне 18+ и я принимаю условия и правила {hotel}.",
@@ -864,7 +868,7 @@
"termsError": "Чтобы зарегистрироваться, вы должны принять условия и правила.",
"usernameError": "Требуется имя пользователя.",
"emailError": "Требуется действительный адрес электронной почты.",
"passwordError": "Пароль должен содержать не менее 6 символов.",
"passwordError": "Пароль должен содержать не менее 12 символов",
"confirmPasswordError": "Пароли не совпадают.",
"termsRequired": "Вы должны принять условия и правила.",
"usernameRequired": "Требуется имя пользователя.",
@@ -873,16 +877,41 @@
"passwordsDontMatch": "Пароли не совпадают.",
"alreadyHaveAccountPre": "Уже есть аккаунт?",
"alreadyHaveAccountLink": "Войти",
"whoIsOnline": "Кто онлайн",
"usersOnline": "{count} онлайн",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens",
"whoIsOnline": "Кто в сети",
"usersOnline": "{count} в сети",
"accepted": "Принято и согласен",
"showPassword": "Показать",
"hidePassword": "Скрыть",
"accountDetails": "Данные аккаунта",
"credentials": "Учётные данные и безопасность",
"newestCitizens": "Новые жители",
"ageVerified": "Мне 18+ и я согласен с возрастным требованием.",
"invitedBy": "Приглашён пользователем {username}"
"invitedBy": "Приглашён пользователем {username}",
"strengthWeak": "Слабый",
"strengthFair": "Средний",
"strengthGood": "Хороший",
"strengthStrong": "Надёжный",
"passwordMinLength": "Пароль должен содержать не менее 12 символов",
"passwordUpper": "Пароль должен содержать хотя бы одну заглавную букву",
"passwordLower": "Пароль должен содержать хотя бы одну строчную букву",
"passwordDigit": "Пароль должен содержать хотя бы одну цифру",
"passwordSpecial": "Пароль должен содержать хотя бы один специальный символ",
"passwordMaxLength": "Пароль слишком длинный",
"usernameMinLength": "Имя пользователя должно содержать не менее 3 символов",
"usernameMaxLength": "Имя пользователя может содержать не более 25 символов",
"usernamePattern": "Имя пользователя может содержать только буквы, цифры, подчёркивание и дефис",
"usernameReserved": "Это имя пользователя зарезервировано",
"emailValid": "Введите корректный адрес электронной почты",
"emailDisposable": "Временные домены электронной почты запрещены",
"passwordsMatch": "Пароли не совпадают.",
"captchaFailed": "Проверка captcha не пройдена. Попробуйте ещё раз.",
"usernameTaken": "Это имя пользователя уже занято",
"rateLimited": "Слишком много попыток регистрации. Подождите несколько минут и повторите попытку.",
"vpnBlocked": "Регистрация через VPN/прокси-соединения запрещена.",
"maxAccountsPerIp": "Вы достигли максимального числа аккаунтов для вашего подключения.",
"unavailable": "Регистрация временно недоступна.",
"createFailed": "Не удалось создать аккаунт. Повторите попытку или обратитесь к сотрудникам.",
"invalidInput": "Проверьте выделенные поля и повторите попытку."
},
"forgot": {
"title": "Сбросить пароль",
@@ -896,9 +925,11 @@
"reset": {
"title": "Установить новый пароль",
"subtitle": "Выберите надежный пароль, который вы больше не используете.",
"passwordPlaceholder": "Новый пароль (мин. 6 символов)",
"passwordPlaceholder": "Новый пароль (мин. 12 символов)",
"resetPassword": "Сбросить пароль",
"backToLogin": "Назад к входу"
"backToLogin": "Назад к входу",
"passwordMinLength": "Пароль должен содержать не менее 12 символов",
"tooManyAttempts": "Слишком много попыток — повторите позже"
},
"verify": {
"verifiedTitle": "Всё готово",
+47 -16
View File
@@ -839,11 +839,15 @@
"errorInvalid2fa": "Neplatný kód 2FA",
"welcomeBack": "Vitaj späť",
"welcomeBackSub": "Prihlás sa pre pokračovanie do {hotelName}",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"errorUnverified": "Pred prihlásením overte svoju e-mailovú adresu.",
"errorCaptcha": "Overenie captcha zlyhalo. Skúste to znova.",
"whoIsOnline": "Kto je online",
"newestCitizens": "Najnovší obyvatelia",
"usersOnline": "{count} online",
"username": "Používateľské meno",
"password": "heslo",
"showPassword": "Zobraziť",
"hidePassword": "Skryť"
},
"register": {
"title": "Vytvoriť účet",
@@ -854,7 +858,7 @@
"confirmPassword": "Zopakujte heslo",
"usernamePlaceholder": "Používateľské meno",
"emailPlaceholder": "Email",
"passwordPlaceholder": "Heslo (min. 6 znakov)",
"passwordPlaceholder": "Heslo (min. 12 znakov)",
"confirmPasswordPlaceholder": "Zopakujte heslo",
"selectOutfit": "Vyberte si oblečenie",
"termsAccept": "Mám 18+ a súhlasím so zmluvnými podmienkami a pravidlami {hotel}.",
@@ -866,7 +870,7 @@
"termsError": "Ak sa chcete zaregistrovať, musíte prijať podmienky a pravidlá.",
"usernameError": "Vyžaduje sa používateľské meno.",
"emailError": "Vyžaduje sa platný e-mail.",
"passwordError": "Heslo musí mať aspoň 6 znakov.",
"passwordError": "Heslo musí mať aspoň 12 znakov",
"confirmPasswordError": "Heslá sa nezhodujú.",
"termsRequired": "Musíte prijať podmienky a pravidlá.",
"usernameRequired": "Vyžaduje sa používateľské meno.",
@@ -877,14 +881,39 @@
"alreadyHaveAccountLink": "Prihlásiť sa",
"whoIsOnline": "Kto je online",
"usersOnline": "{count} online",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens",
"accepted": "Prijaté a súhlasím",
"showPassword": "Zobraziť",
"hidePassword": "Skryť",
"accountDetails": "Údaje o účte",
"credentials": "Prihlasovacie údaje a zabezpečenie",
"newestCitizens": "Najnovší obyvatelia",
"ageVerified": "Mám 18+ a súhlasím s vekovým požiadavkou.",
"invitedBy": "Pozvaný používateľom {username}"
"invitedBy": "Pozvaný používateľom {username}",
"strengthWeak": "Slabé",
"strengthFair": "Priemerné",
"strengthGood": "Dobré",
"strengthStrong": "Silné",
"passwordMinLength": "Heslo musí mať aspoň 12 znakov",
"passwordUpper": "Heslo musí obsahovať aspoň jedno veľké písmeno",
"passwordLower": "Heslo musí obsahovať aspoň jedno malé písmeno",
"passwordDigit": "Heslo musí obsahovať aspoň jednu číslicu",
"passwordSpecial": "Heslo musí obsahovať aspoň jeden špeciálny znak",
"passwordMaxLength": "Heslo je príliš dlhé",
"usernameMinLength": "Používateľské meno musí mať aspoň 3 znaky",
"usernameMaxLength": "Používateľské meno môže mať najviac 25 znakov",
"usernamePattern": "Používateľské meno môže obsahovať iba písmená, číslice, podčiarknutie a pomlčku",
"usernameReserved": "Toto používateľské meno je rezervované",
"emailValid": "Zadajte platnú e-mailovú adresu",
"emailDisposable": "Dočasné e-mailové domény nie sú povolené",
"passwordsMatch": "Heslá sa nezhodujú.",
"captchaFailed": "Overenie captcha zlyhalo. Skúste to znova.",
"usernameTaken": "Toto používateľské meno je už obsadené",
"rateLimited": "Príliš veľa pokusov o registráciu. Počkajte niekoľko minút a skúste to znova.",
"vpnBlocked": "Registrácia cez pripojenia VPN/proxy nie je povolená.",
"maxAccountsPerIp": "Dosiahli ste maximálny počet účtov pre vaše pripojenie.",
"unavailable": "Registrácia je dočasne nedostupná.",
"createFailed": "Účet sa nepodarilo vytvoriť. Skúste to znova alebo kontaktujte personál.",
"invalidInput": "Skontrolujte označené políčka a skúste to znova."
},
"forgot": {
"title": "Obnoviť heslo",
@@ -898,9 +927,11 @@
"reset": {
"title": "Nastavte si nové heslo",
"subtitle": "Zvoľte si silné heslo, ktoré inde nepoužívate.",
"passwordPlaceholder": "Nové heslo (min. 6 znakov)",
"passwordPlaceholder": "Nové heslo (min. 12 znakov)",
"resetPassword": "Obnoviť heslo",
"backToLogin": "Späť na prihlásenie"
"backToLogin": "Späť na prihlásenie",
"passwordMinLength": "Heslo musí mať aspoň 12 znakov",
"tooManyAttempts": "Príliš veľa pokusov — skúste to neskôr"
},
"verify": {
"verifiedTitle": "Všetko je pripravené",
+50 -19
View File
@@ -836,14 +836,18 @@
"createOne": "Направите један",
"forgotPassword": "Заборавили сте лозинку?",
"errorInvalidCredentials": "Неважеће корисничко име или лозинка",
"errorInvalid2fa": "Неважећи 2ФА код",
"errorInvalid2fa": "Неисправан 2ФА код",
"welcomeBack": "Добродошао назад",
"welcomeBackSub": "Пријави се да наставиш ка {hotelName}",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"errorUnverified": "Потврдите имејл пре пријаве.",
"errorCaptcha": "Провера капче није успела. Покушајте поново.",
"whoIsOnline": "Ко је на мрежи",
"newestCitizens": "Најновији грађани",
"usersOnline": "{count} на мрежи",
"username": "Корисничко име",
"password": "Лозинка",
"showPassword": "Прикажи",
"hidePassword": "Сакриј"
},
"register": {
"title": "Креирајте налог",
@@ -854,7 +858,7 @@
"confirmPassword": "Поновите лозинку",
"usernamePlaceholder": "Корисничко име",
"emailPlaceholder": "Емаил",
"passwordPlaceholder": "Лозинка (мин 6 знакова)",
"passwordPlaceholder": "Лозинка (мин 12 знакова)",
"confirmPasswordPlaceholder": "Поновите лозинку",
"selectOutfit": "Изаберите своју одећу",
"termsAccept": "I am 18+ and accept the {hotel} terms & rules.",
@@ -866,7 +870,7 @@
"termsError": "Морате прихватити услове и правила да бисте се регистровали.",
"usernameError": "Корисничко име је обавезно.",
"emailError": "Потребан је важећи имејл.",
"passwordError": "Лозинка мора имати најмање 6 знакова.",
"passwordError": "Лозинка мора имати најмање 12 знакова",
"confirmPasswordError": "Лозинке се не поклапају.",
"termsRequired": "Морате прихватити услове и правила.",
"usernameRequired": "Корисничко име је обавезно.",
@@ -875,16 +879,41 @@
"passwordsDontMatch": "Лозинке се не поклапају.",
"alreadyHaveAccountPre": "Већ имаш налог?",
"alreadyHaveAccountLink": "Пријави се",
"whoIsOnline": "Ко је онлајн",
"usersOnline": "{count} онлајн",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens",
"whoIsOnline": "Ко је на мрежи",
"usersOnline": "{count} на мрежи",
"accepted": "Прихваћено и слажем се",
"showPassword": "Прикажи",
"hidePassword": "Сакриј",
"accountDetails": "Подаци налога",
"credentials": "Подаци за пријаву и безбедност",
"newestCitizens": "Најновији грађани",
"ageVerified": "Imam 18+ i prihvatam uslov starosti.",
"invitedBy": "Pozvao {username}"
"invitedBy": "Pozvao {username}",
"strengthWeak": "Слаба",
"strengthFair": "Средња",
"strengthGood": "Добра",
"strengthStrong": "Јака",
"passwordMinLength": "Лозинка мора имати најмање 12 знакова",
"passwordUpper": "Лозинка мора садржати најмање једно велико слово",
"passwordLower": "Лозинка мора садржати најмање једно мало слово",
"passwordDigit": "Лозинка мора садржати најмање једну цифру",
"passwordSpecial": "Лозинка мора садржати најмање један специјални знак",
"passwordMaxLength": "Лозинка је предуга",
"usernameMinLength": "Корисничко име мора имати најмање 3 знака",
"usernameMaxLength": "Корисничко име сме имати највише 25 знакова",
"usernamePattern": "Корисничко име сме садржати само слова, бројеве, подцрту и црту",
"usernameReserved": "Ово корисничко име је резервисано",
"emailValid": "Унесите исправан имејл адресу",
"emailDisposable": "Привремени домени имејла нису дозвољени",
"passwordsMatch": "Лозинке се не поклапају.",
"captchaFailed": "Провера капче није успела. Покушајте поново.",
"usernameTaken": "Ово корисничко име је већ заузето",
"rateLimited": "Превише покушаја регистрације. Сачекајте неколико минута и покушајте поново.",
"vpnBlocked": "Регистрација преко VPN/proxy веза није дозвољена.",
"maxAccountsPerIp": "Достигли сте највећи број налога за своју везу.",
"unavailable": "Регистрација је привремено недоступна.",
"createFailed": "Налог није могао да се направи. Покушајте поново или се обратите особљу.",
"invalidInput": "Проверите означена поља и покушајте поново."
},
"forgot": {
"title": "Ресетујте лозинку",
@@ -898,9 +927,11 @@
"reset": {
"title": "Поставите нову лозинку",
"subtitle": "Изаберите јаку лозинку коју не користите другде.",
"passwordPlaceholder": "Нова лозинка (мин 6 знакова)",
"passwordPlaceholder": "Нова лозинка (мин 12 знакова)",
"resetPassword": "Ресетујте лозинку",
"backToLogin": "Назад на пријаву"
"backToLogin": "Назад на пријаву",
"passwordMinLength": "Лозинка мора имати најмање 12 знакова",
"tooManyAttempts": "Превише покушаја — покушајте касније"
},
"verify": {
"verifiedTitle": "Све је спремно",
+47 -16
View File
@@ -839,11 +839,15 @@
"errorInvalid2fa": "Ogiltig 2FA-kod",
"welcomeBack": "Välkommen tillbaka",
"welcomeBackSub": "Logga in för att fortsätta till {hotelName}",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"errorUnverified": "Bekräfta din e-postadress innan du loggar in.",
"errorCaptcha": "Captcha-verifieringen misslyckades. Försök igen.",
"whoIsOnline": "Vem är online",
"newestCitizens": "Nyaste medborgare",
"usersOnline": "{count} online",
"username": "Användarnamn",
"password": "Lösenord",
"showPassword": "Visa",
"hidePassword": "Dölj"
},
"register": {
"title": "Skapa konto",
@@ -854,7 +858,7 @@
"confirmPassword": "Upprepa lösenordet",
"usernamePlaceholder": "Användarnamn",
"emailPlaceholder": "E-post",
"passwordPlaceholder": "Lösenord (minst 6 tecken)",
"passwordPlaceholder": "Lösenord (minst 12 tecken)",
"confirmPasswordPlaceholder": "Upprepa lösenordet",
"selectOutfit": "Välj din outfit",
"termsAccept": "Jag är 18+ och accepterar villkoren och reglerna för {hotel}.",
@@ -866,7 +870,7 @@
"termsError": "Du måste acceptera villkoren och reglerna för att registrera dig.",
"usernameError": "Användarnamn krävs.",
"emailError": "Giltig e-postadress krävs.",
"passwordError": "Lösenordet måste bestå av minst 6 tecken.",
"passwordError": "Lösenordet måste bestå av minst 12 tecken.",
"confirmPasswordError": "Lösenord stämmer inte överens.",
"termsRequired": "Du måste acceptera villkoren och reglerna.",
"usernameRequired": "Användarnamn krävs.",
@@ -877,14 +881,39 @@
"alreadyHaveAccountLink": "Logga in",
"whoIsOnline": "Vem är online",
"usersOnline": "{count} online",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens",
"accepted": "Accepterat och godkänt",
"showPassword": "Visa",
"hidePassword": "Dölj",
"accountDetails": "Kontouppgifter",
"credentials": "Inloggningsuppgifter och säkerhet",
"newestCitizens": "Nyaste medborgare",
"ageVerified": "Jag är 18+ och godkänner ålderskravet.",
"invitedBy": "Inbjuden av {username}"
"invitedBy": "Inbjuden av {username}",
"strengthWeak": "Svag",
"strengthFair": "Medel",
"strengthGood": "God",
"strengthStrong": "Stark",
"passwordMinLength": "Lösenordet måste vara minst 12 tecken",
"passwordUpper": "Lösenordet måste innehålla minst en stor bokstav",
"passwordLower": "Lösenordet måste innehålla minst en liten bokstav",
"passwordDigit": "Lösenordet måste innehålla minst en siffra",
"passwordSpecial": "Lösenordet måste innehålla minst ett specialtecken",
"passwordMaxLength": "Lösenordet är för långt",
"usernameMinLength": "Användarnamnet måste vara minst 3 tecken",
"usernameMaxLength": "Användarnamnet får vara högst 25 tecken",
"usernamePattern": "Användarnamnet får bara innehålla bokstäver, siffror, understreck och bindestreck",
"usernameReserved": "Det användarnamnet är reserverat",
"emailValid": "Ange en giltig e-postadress",
"emailDisposable": "Tillfälliga e-postdomäner är inte tillåtna",
"passwordsMatch": "Lösenord stämmer inte överens.",
"captchaFailed": "Captcha-verifieringen misslyckades. Försök igen.",
"usernameTaken": "Det användarnamnet är redan upptaget",
"rateLimited": "För många registreringsförsök. Vänta några minuter och försök igen.",
"vpnBlocked": "Registrering via VPN/proxy-anslutningar är inte tillåten.",
"maxAccountsPerIp": "Du har nått maxantalet konton för din anslutning.",
"unavailable": "Registreringen är tillfälligt otillgänglig.",
"createFailed": "Kontot kunde inte skapas. Försök igen eller kontakta personalen.",
"invalidInput": "Kontrollera de markerade fälten och försök igen."
},
"forgot": {
"title": "Återställ lösenord",
@@ -898,9 +927,11 @@
"reset": {
"title": "Ange ett nytt lösenord",
"subtitle": "Välj ett starkt lösenord som du inte använder någon annanstans.",
"passwordPlaceholder": "Nytt lösenord (minst 6 tecken)",
"passwordPlaceholder": "Nytt lösenord (minst 12 tecken)",
"resetPassword": "Återställ lösenord",
"backToLogin": "Tillbaka till inloggning"
"backToLogin": "Tillbaka till inloggning",
"passwordMinLength": "Lösenordet måste vara minst 12 tecken",
"tooManyAttempts": "För många försök — försök igen senare"
},
"verify": {
"verifiedTitle": "Du är redo",
+48 -17
View File
@@ -839,11 +839,15 @@
"errorInvalid2fa": "Geçersiz 2FA kodu",
"welcomeBack": "Tekrar hoş geldin",
"welcomeBackSub": "{hotelName} devam etmek için giriş yap",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"errorUnverified": "Giriş yapmadan önce lütfen e-posta adresinizi doğrulayın.",
"errorCaptcha": "Captcha doğrulaması başarısız oldu. Tekrar deneyin.",
"whoIsOnline": "Kimler çevrimiçi",
"newestCitizens": "En yeni vatandaşlar",
"usersOnline": "{count} çevrimiçi",
"username": "Kullanıcı adı",
"password": "Şifre",
"showPassword": "Göster",
"hidePassword": "Gizle"
},
"register": {
"title": "Hesap oluştur",
@@ -854,7 +858,7 @@
"confirmPassword": "Şifreyi tekrarla",
"usernamePlaceholder": "Kullanıcı adı",
"emailPlaceholder": "E-posta",
"passwordPlaceholder": "Şifre (en az 6 karakter)",
"passwordPlaceholder": "Şifre (en az 12 karakter)",
"confirmPasswordPlaceholder": "Şifreyi tekrarla",
"selectOutfit": "Kıyafetinizi seçin",
"termsAccept": "18 yaşındayım ve {hotel} şartlarını ve kurallarını kabul ediyorum.",
@@ -866,7 +870,7 @@
"termsError": "Kayıt olmak için şartları ve kuralları kabul etmelisiniz.",
"usernameError": "Kullanıcı adı gerekli.",
"emailError": "Geçerli e-posta gereklidir.",
"passwordError": "Şifre en az 6 karakter olmalıdır.",
"passwordError": "Şifre en az 12 karakter olmalıdır.",
"confirmPasswordError": "Şifreler eşleşmiyor.",
"termsRequired": "Şartları ve kuralları kabul etmelisiniz.",
"usernameRequired": "Kullanıcı adı gerekli.",
@@ -875,16 +879,41 @@
"passwordsDontMatch": "Şifreler eşleşmiyor.",
"alreadyHaveAccountPre": "Zaten hesabın var mı?",
"alreadyHaveAccountLink": "Giriş yap",
"whoIsOnline": "Kim çevrimiçi",
"whoIsOnline": "Kimler çevrimiçi",
"usersOnline": "{count} çevrimiçi",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens",
"accepted": "Kabul edildi ve onaylıyorum",
"showPassword": "Göster",
"hidePassword": "Gizle",
"accountDetails": "Hesap bilgileri",
"credentials": "Kimlik bilgileri ve güvenlik",
"newestCitizens": "En yeni vatandaşlar",
"ageVerified": "18+ yaşındayım ve yaş gereksinimini kabul ediyorum.",
"invitedBy": "{username} tarafından davet edildi"
"invitedBy": "{username} tarafından davet edildi",
"strengthWeak": "Zayıf",
"strengthFair": "Orta",
"strengthGood": "İyi",
"strengthStrong": "Güçlü",
"passwordMinLength": "Şifre en az 12 karakter olmalıdır",
"passwordUpper": "Şifre en az bir büyük harf içermelidir",
"passwordLower": "Şifre en az bir küçük harf içermelidir",
"passwordDigit": "Şifre en az bir rakam içermelidir",
"passwordSpecial": "Şifre en az bir özel karakter içermelidir",
"passwordMaxLength": "Şifre çok uzun",
"usernameMinLength": "Kullanıcı adı en az 3 karakter olmalıdır",
"usernameMaxLength": "Kullanıcı adı en fazla 25 karakter olabilir",
"usernamePattern": "Kullanıcı adı yalnızca harf, rakam, alt çizgi ve tire içerebilir",
"usernameReserved": "Bu kullanıcı adı ayrılmış",
"emailValid": "Geçerli bir e-posta adresi girin",
"emailDisposable": "Geçici e-posta alan adlarına izin verilmez",
"passwordsMatch": "Şifreler eşleşmiyor.",
"captchaFailed": "Captcha doğrulaması başarısız oldu. Tekrar deneyin.",
"usernameTaken": "Bu kullanıcı adı zaten kullanılıyor",
"rateLimited": "Çok fazla kayıt denemesi yaptınız. Birkaç dakika bekleyip tekrar deneyin.",
"vpnBlocked": "VPN/proxy bağlantıları üzerinden kayıt yapılamaz.",
"maxAccountsPerIp": "Bağlantınız için azami hesap sayısına ulaştınız.",
"unavailable": "Kayıt geçici olarak kullanılamıyor.",
"createFailed": "Hesap oluşturulamadı. Tekrar deneyin veya personelle iletişime geçin.",
"invalidInput": "Lütfen işaretli alanları kontrol edip tekrar deneyin."
},
"forgot": {
"title": "Şifreyi sıfırla",
@@ -898,9 +927,11 @@
"reset": {
"title": "Yeni bir şifre belirleyin",
"subtitle": "Başka yerde kullanmadığınız güçlü bir şifre seçin.",
"passwordPlaceholder": "Yeni şifre (en az 6 karakter)",
"passwordPlaceholder": "Yeni şifre (en az 12 karakter)",
"resetPassword": "Şifreyi sıfırla",
"backToLogin": "Girişe geri dön"
"backToLogin": "Girişe geri dön",
"passwordMinLength": "Şifre en az 12 karakter olmalıdır",
"tooManyAttempts": "Çok fazla deneme — daha sonra tekrar deneyin"
},
"verify": {
"verifiedTitle": "Artık hazırsınız",
+50 -19
View File
@@ -836,14 +836,18 @@
"createOne": "Створіть один",
"forgotPassword": "Забули пароль?",
"errorInvalidCredentials": "Недійсне ім'я користувача або пароль",
"errorInvalid2fa": "Недійсний код 2FA",
"errorInvalid2fa": "Невірний код 2FA",
"welcomeBack": "З поверненням",
"welcomeBackSub": "Увійди, щоб продовжити в {hotelName}",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens",
"usersOnline": "{count} online"
"errorUnverified": "Підтвердьте свою електронну адресу перед входом.",
"errorCaptcha": "Перевірка captcha не вдалася. Спробуйте ще раз.",
"whoIsOnline": "Хто в мережі",
"newestCitizens": "Нові мешканці",
"usersOnline": "{count} у мережі",
"username": "Ім'я користувача",
"password": "Пароль",
"showPassword": "Показати",
"hidePassword": "Сховати"
},
"register": {
"title": "Створити акаунт",
@@ -854,7 +858,7 @@
"confirmPassword": "Повторіть пароль",
"usernamePlaceholder": "Ім'я користувача",
"emailPlaceholder": "Електронна пошта",
"passwordPlaceholder": "Пароль (мінімум 6 символів)",
"passwordPlaceholder": "Пароль (мінімум 12 символів)",
"confirmPasswordPlaceholder": "Повторіть пароль",
"selectOutfit": "Виберіть свій наряд",
"termsAccept": "Мені 18+ і я приймаю умови та правила {hotel}.",
@@ -866,7 +870,7 @@
"termsError": "Ви повинні прийняти умови та правила, щоб зареєструватися.",
"usernameError": "Потрібно ввести ім'я користувача.",
"emailError": "Потрібна дійсна електронна адреса.",
"passwordError": "Пароль має бути не менше 6 символів.",
"passwordError": "Пароль має містити щонайменше 12 символів",
"confirmPasswordError": "Паролі не збігаються.",
"termsRequired": "Ви повинні прийняти умови та правила.",
"usernameRequired": "Потрібно ввести ім'я користувача.",
@@ -875,16 +879,41 @@
"passwordsDontMatch": "Паролі не збігаються.",
"alreadyHaveAccountPre": "Вже маєш акаунт?",
"alreadyHaveAccountLink": "Увійти",
"whoIsOnline": "Хто онлайн",
"usersOnline": "{count} онлайн",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens",
"whoIsOnline": "Хто в мережі",
"usersOnline": "{count} у мережі",
"accepted": "Прийнято та погоджуюсь",
"showPassword": "Показати",
"hidePassword": "Сховати",
"accountDetails": "Дані облікового запису",
"credentials": "Облікові дані та безпека",
"newestCitizens": "Нові мешканці",
"ageVerified": "Мені 18+ і я погоджуюся з віковими вимогами.",
"invitedBy": "Запросив користувач {username}"
"invitedBy": "Запросив користувач {username}",
"strengthWeak": "Слабкий",
"strengthFair": "Середній",
"strengthGood": "Добрий",
"strengthStrong": "Надійний",
"passwordMinLength": "Пароль має містити щонайменше 12 символів",
"passwordUpper": "Пароль має містити хоча б одну велику літеру",
"passwordLower": "Пароль має містити хоча б одну малу літеру",
"passwordDigit": "Пароль має містити хоча б одну цифру",
"passwordSpecial": "Пароль має містити хоча б один спеціальний символ",
"passwordMaxLength": "Пароль задовго довгий",
"usernameMinLength": "Ім'я користувача має містити щонайменше 3 символи",
"usernameMaxLength": "Ім'я користувача може містити щонайбільше 25 символів",
"usernamePattern": "Ім'я користувача може містити лише літери, цифри, підкреслення та дефіс",
"usernameReserved": "Це ім'я користувача зарезервовано",
"emailValid": "Введіть коректну адресу електронної пошти",
"emailDisposable": "Тимчасові домени електронної пошти заборонені",
"passwordsMatch": "Паролі не збігаються.",
"captchaFailed": "Перевірка captcha не вдалася. Спробуйте ще раз.",
"usernameTaken": "Це ім'я користувача вже зайняте",
"rateLimited": "Забагато спроб реєстрації. Зачекайте кілька хвилин і спробуйте ще раз.",
"vpnBlocked": "Реєстрація через VPN/проксі-з'єднання заборонена.",
"maxAccountsPerIp": "Ви досягли максимальної кількості облікових записів для вашого з'єднання.",
"unavailable": "Реєстрація тимчасово недоступна.",
"createFailed": "Не вдалося створити обліковий запис. Спробуйте ще раз або зверніться до персоналу.",
"invalidInput": "Перевірте виділені поля та спробуйте ще раз."
},
"forgot": {
"title": "Скинути пароль",
@@ -898,9 +927,11 @@
"reset": {
"title": "Встановіть новий пароль",
"subtitle": "Виберіть надійний пароль, який більше не використовується.",
"passwordPlaceholder": "Новий пароль (мінімум 6 символів)",
"passwordPlaceholder": "Новий пароль (мінімум 12 символів)",
"resetPassword": "Скинути пароль",
"backToLogin": "Назад до входу"
"backToLogin": "Назад до входу",
"passwordMinLength": "Пароль має містити щонайменше 12 символів",
"tooManyAttempts": "Забагато спроб — спробуйте пізніше"
},
"verify": {
"verifiedTitle": "Ви готові",