Compare commits

...
2 Commits
Author SHA1 Message Date
openhands 6bffc53779 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`.
2026-10-04 18:50:23 +02:00
openhands 3d828a61ab fix(build): build with webpack because the Turbopack build is OOM-killed
`next build` on Turbopack never completes on this app. The compiler is a
single native process whose RSS grows monotonically with no plateau:

    0.9G -> 1.6G -> 2.8G -> 5.0G -> 5.5G -> 6.2G -> killed

It still dies with 4GB of swap attached, at 12GB RSS. The build workers are
only 0.17GB each, so `experimental.cpus` is not the lever either.

A `--max-old-space-size` cap cannot help: measured with a 2GB cap, RSS still
reached 8GB, because the memory is native Turbopack (Rust) memory rather than
the V8 heap. The cap added in 1c9ddcd4 was therefore inert and only created
false confidence, so it is dropped from the build script.

Webpack builds the same 329 routes in ~95s with a ~6GB peak.

Ruled out by measurement: the 25 bundled locale files (stubbing 24 of them
from 7.1MB down to 276KB still peaked at 11GB), worker count, and the
flatten/unflatten message pipeline (600 iterations cost 6.4s and settle at
39MB of heap).

Verified: `pnpm run build` exits 0, TypeScript passes, 279/279 static pages are
generated, and the standalone output boots and serves /, /login and /register.
2026-10-04 18:50:11 +02:00
35 changed files with 1762 additions and 844 deletions

No files matched your search

+5 -1
View File
@@ -26,7 +26,11 @@ FROM migrations AS builder
ARG NEXT_DEPLOYMENT_ID="unknown"
ENV NEXT_DEPLOYMENT_ID="$NEXT_DEPLOYMENT_ID"
# Fix voor OOM Killer: dwing de Node-compiler om agressief op te ruimen bij 4GB RAM
# The build runs the webpack builder (see the `build` script in package.json).
# Turbopack's compiler is a single native process that grows past 12GB RSS on
# this 329-route app and gets OOM-killed; webpack peaks around 5GB. A
# --max-old-space-size cap does NOT help, because that memory is native
# Turbopack memory rather than the V8 heap.
ENV NODE_OPTIONS="--max-old-space-size=4096"
# Bouw de Next.js applicatie met caching
+1 -1
View File
@@ -8,7 +8,7 @@
"packageManager": "[email protected]",
"scripts": {
"dev": "pnpm assets:editor && next dev",
"build": "pnpm assets:editor && NODE_OPTIONS='--max-old-space-size=4096' next build",
"build": "pnpm assets:editor && next build --webpack",
"start": "next start",
"toolchain:check": "node scripts/check-node-toolchain.mjs",
"lint": "biome check . || true",
+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": "Ви готові",