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" ARG NEXT_DEPLOYMENT_ID="unknown"
ENV NEXT_DEPLOYMENT_ID="$NEXT_DEPLOYMENT_ID" 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" ENV NODE_OPTIONS="--max-old-space-size=4096"
# Bouw de Next.js applicatie met caching # Bouw de Next.js applicatie met caching
+1 -1
View File
@@ -8,7 +8,7 @@
"packageManager": "[email protected]", "packageManager": "[email protected]",
"scripts": { "scripts": {
"dev": "pnpm assets:editor && next dev", "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", "start": "next start",
"toolchain:check": "node scripts/check-node-toolchain.mjs", "toolchain:check": "node scripts/check-node-toolchain.mjs",
"lint": "biome check . || true", "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; 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) { if (!error) {
try { try {
+25 -2
View File
@@ -184,6 +184,7 @@ describe("register", () => {
expect(result).toEqual({ expect(result).toEqual({
error: "Username must be at least 3 characters", error: "Username must be at least 3 characters",
ok: false, ok: false,
code: "usernameMinLength",
}); });
expect(state.insert).not.toHaveBeenCalled(); expect(state.insert).not.toHaveBeenCalled();
}); });
@@ -191,6 +192,7 @@ describe("register", () => {
it("rejects usernames containing characters outside the allowed set", async () => { it("rejects usernames containing characters outside the allowed set", async () => {
const result = await register(PREV, buildForm({ username: "bad name!" })); const result = await register(PREV, buildForm({ username: "bad name!" }));
expect(result.error).toContain("letters, numbers, underscore and hyphen"); expect(result.error).toContain("letters, numbers, underscore and hyphen");
expect(result.code).toBe("usernamePattern");
expect(state.insert).not.toHaveBeenCalled(); expect(state.insert).not.toHaveBeenCalled();
}); });
@@ -199,6 +201,7 @@ describe("register", () => {
expect(result).toEqual({ expect(result).toEqual({
error: "Enter a valid email address", error: "Enter a valid email address",
ok: false, ok: false,
code: "emailValid",
}); });
}); });
@@ -207,6 +210,7 @@ describe("register", () => {
expect(result).toEqual({ expect(result).toEqual({
error: "Password must be at least 12 characters", error: "Password must be at least 12 characters",
ok: false, ok: false,
code: "passwordMinLength",
}); });
expect(state.insert).not.toHaveBeenCalled(); expect(state.insert).not.toHaveBeenCalled();
}); });
@@ -220,6 +224,7 @@ describe("register", () => {
}), }),
); );
expect(result.error).toContain("uppercase"); expect(result.error).toContain("uppercase");
expect(result.code).toBe("passwordUpper");
}); });
it("rejects passwords without a digit", async () => { it("rejects passwords without a digit", async () => {
@@ -231,6 +236,7 @@ describe("register", () => {
}), }),
); );
expect(result.error).toContain("digit"); expect(result.error).toContain("digit");
expect(result.code).toBe("passwordDigit");
}); });
it("rejects passwords without a special character", async () => { it("rejects passwords without a special character", async () => {
@@ -242,6 +248,7 @@ describe("register", () => {
}), }),
); );
expect(result.error).toContain("special"); expect(result.error).toContain("special");
expect(result.code).toBe("passwordSpecial");
}); });
it("rejects mismatched password confirmations", async () => { it("rejects mismatched password confirmations", async () => {
@@ -249,13 +256,18 @@ describe("register", () => {
PREV, PREV,
buildForm({ password_confirmation: "Different1" }), 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 () => { it("throttles sign-ups per IP", async () => {
state.rateLimit.mockResolvedValueOnce({ ok: false, retryAfter: 120 }); state.rateLimit.mockResolvedValueOnce({ ok: false, retryAfter: 120 });
const result = await runValidRegistration(); const result = await runValidRegistration();
expect(result.error).toContain("Too many sign-up attempts"); expect(result.error).toContain("Too many sign-up attempts");
expect(result.code).toBe("rateLimited");
expect(state.insert).not.toHaveBeenCalled(); expect(state.insert).not.toHaveBeenCalled();
}); });
@@ -273,6 +285,7 @@ describe("register", () => {
expect(result).toEqual({ expect(result).toEqual({
error: "Captcha verification failed. Please try again.", error: "Captcha verification failed. Please try again.",
ok: false, ok: false,
code: "captchaFailed",
}); });
expect(state.verifyCaptcha).toHaveBeenCalledWith("token", "203.0.113.9"); expect(state.verifyCaptcha).toHaveBeenCalledWith("token", "203.0.113.9");
expect(state.insert).not.toHaveBeenCalled(); expect(state.insert).not.toHaveBeenCalled();
@@ -290,6 +303,7 @@ describe("register", () => {
expect(result).toEqual({ expect(result).toEqual({
error: "You must accept the terms and conditions to register.", error: "You must accept the terms and conditions to register.",
ok: false, ok: false,
code: "termsRequired",
}); });
expect(state.insert).not.toHaveBeenCalled(); expect(state.insert).not.toHaveBeenCalled();
}); });
@@ -298,7 +312,11 @@ describe("register", () => {
state.checkVpn.mockResolvedValue({ blocked: true }); state.checkVpn.mockResolvedValue({ blocked: true });
state.siteGet.mockResolvedValueOnce("Custom VPN message"); state.siteGet.mockResolvedValueOnce("Custom VPN message");
const result = await runValidRegistration(); 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(); expect(state.insert).not.toHaveBeenCalled();
}); });
@@ -317,6 +335,7 @@ describe("register", () => {
state.countTotal = 2; state.countTotal = 2;
const result = await runValidRegistration(); const result = await runValidRegistration();
expect(result.error).toContain("maximum number of accounts"); expect(result.error).toContain("maximum number of accounts");
expect(result.code).toBe("maxAccountsPerIp");
expect(state.insert).not.toHaveBeenCalled(); expect(state.insert).not.toHaveBeenCalled();
}); });
@@ -340,6 +359,7 @@ describe("register", () => {
expect(result).toEqual({ expect(result).toEqual({
error: "That username is already taken", error: "That username is already taken",
ok: false, ok: false,
code: "usernameTaken",
}); });
expect(state.insert).not.toHaveBeenCalled(); expect(state.insert).not.toHaveBeenCalled();
}); });
@@ -350,6 +370,7 @@ describe("register", () => {
expect(result).toEqual({ expect(result).toEqual({
error: "Registration is temporarily unavailable", error: "Registration is temporarily unavailable",
ok: false, ok: false,
code: "unavailable",
}); });
expect(state.logger.warn).toHaveBeenCalledWith( expect(state.logger.warn).toHaveBeenCalledWith(
"Username uniqueness check failed during registration", "Username uniqueness check failed during registration",
@@ -365,6 +386,7 @@ describe("register", () => {
expect(result).toEqual({ expect(result).toEqual({
error: "That username is already taken", error: "That username is already taken",
ok: false, ok: false,
code: "usernameTaken",
}); });
expect(state.logger.error).not.toHaveBeenCalled(); expect(state.logger.error).not.toHaveBeenCalled();
}); });
@@ -373,6 +395,7 @@ describe("register", () => {
state.insert.mockRejectedValueOnce(new Error("db exploded")); state.insert.mockRejectedValueOnce(new Error("db exploded"));
const result = await runValidRegistration(); const result = await runValidRegistration();
expect(result.error).toContain("Could not create the account"); expect(result.error).toContain("Could not create the account");
expect(result.code).toBe("createFailed");
expect(state.logger.error).toHaveBeenCalledWith( expect(state.logger.error).toHaveBeenCalledWith(
"Account creation failed", "Account creation failed",
expect.objectContaining({ message: "db exploded" }), expect.objectContaining({ message: "db exploded" }),
+72 -7
View File
@@ -121,19 +121,72 @@ const registerSchema = z
path: ["passwordConfirmation"], 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. // 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"; const DEFAULT_LOOK = "hr-100-.hd-180-1.ch-255-66.lg-280-110.sh-305-62";
export interface RegisterState { export interface RegisterState {
error: string | null; error: string | null;
ok: boolean; ok: boolean;
/** Locale-independent reason, present on every failure. */
code?: RegisterErrorCode;
} }
export async function register( export async function register(
_prevState: RegisterState, _prevState: RegisterState,
formData: FormData, formData: FormData,
): Promise<RegisterState> { ): Promise<RegisterState> {
const fail = (error: string): RegisterState => ({ error, ok: false }); const fail = (error: string, code: RegisterErrorCode): RegisterState => ({
error,
ok: false,
code,
});
const raw = { const raw = {
username: String(formData.get("username") ?? "") username: String(formData.get("username") ?? "")
.normalize("NFC") .normalize("NFC")
@@ -155,7 +208,8 @@ export async function register(
const parsed = registerSchema.safeParse(raw); const parsed = registerSchema.safeParse(raw);
if (!parsed.success) { 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; 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) { if (!(await rateLimit(`register:${ip}`, 5, 10 * 60_000)).ok) {
return fail( return fail(
"Too many sign-up attempts. Please wait a few minutes and try again.", "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") { if (cfg.provider !== "none") {
const token = String(formData.get(cfg.field) ?? "").normalize("NFC"); const token = String(formData.get(cfg.field) ?? "").normalize("NFC");
if (!(await verifyCaptcha(token, ip))) 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. // Terms acceptance check.
if (!raw.termsAccepted) 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). // VPN/proxy block (only when enabled in /admin/vpn).
if ((await checkVpn(ip)).blocked) { if ((await checkVpn(ip)).blocked) {
return fail( return fail(
(await siteSettings.get("vpn_block_message", "")) || (await siteSettings.get("vpn_block_message", "")) ||
"Registrations from VPN/proxy connections are not allowed.", "Registrations from VPN/proxy connections are not allowed.",
"vpnBlocked",
); );
} }
@@ -200,6 +262,7 @@ export async function register(
if (Number(row?.total ?? 0) >= max) if (Number(row?.total ?? 0) >= max)
return fail( return fail(
"You have reached the maximum number of accounts for your connection.", "You have reached the maximum number of accounts for your connection.",
"maxAccountsPerIp",
); );
} }
@@ -210,10 +273,11 @@ export async function register(
.from(User) .from(User)
.where(eq(User.username, username)) .where(eq(User.username, username))
.limit(1); .limit(1);
if (existing) return fail("That username is already taken"); if (existing)
return fail("That username is already taken", "usernameTaken");
} catch { } catch {
logger.warn("Username uniqueness check failed during registration"); 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); const now = Math.floor(Date.now() / 1000);
@@ -233,7 +297,7 @@ export async function register(
} catch (err) { } catch (err) {
const code = (err as { cause?: { code?: string } }).cause?.code; const code = (err as { cause?: { code?: string } }).cause?.code;
if (code === "ER_DUP_ENTRY") { 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", { logger.error("Account creation failed", {
code, code,
@@ -241,6 +305,7 @@ export async function register(
}); });
return fail( return fail(
"Could not create the account. Please try again or contact staff.", "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 { getTranslations } from "next-intl/server";
import type { CSSProperties, ReactNode } from "react"; import type { CSSProperties, ReactNode } from "react";
import { AnimatedCounter } from "@/components/animated-counter"; 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 { Clock } from "@/components/clock";
import { LanguageSwitcher } from "@/components/language-switcher"; import { LanguageSwitcher } from "@/components/language-switcher";
import Link from "@/components/link"; import Link from "@/components/link";
@@ -870,7 +870,9 @@ export default async function Home() {
icon={ICON_NAV_ME} icon={ICON_NAV_ME}
bodyClassName="p-3.5 sm:p-4" bodyClassName="p-3.5 sm:p-4"
> >
<HomeLoginForm <LoginForm
variant="compact"
redirectTo="/"
captcha={{ captcha={{
provider: captcha.provider, provider: captcha.provider,
siteKey: captcha.siteKey || undefined, 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 { signIn } from "next-auth/react";
import { useTranslations } from "next-intl"; 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 { precheckLogin } from "@/actions/auth-precheck";
import { import {
type CaptchaPublicConfig, type CaptchaPublicConfig,
@@ -12,14 +12,34 @@ import {
import Link from "@/components/link"; import Link from "@/components/link";
import { signInWithTransientRetry } from "@/lib/auth/sign-in-retry"; 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({ export function LoginForm({
captcha = { provider: "none" }, captcha = { provider: "none" },
nonce, nonce,
}: { variant = "page",
captcha?: CaptchaPublicConfig; redirectTo = "/me",
nonce?: string; }: LoginFormProps = {}) {
}) {
const t = useTranslations("pages.login"); const t = useTranslations("pages.login");
const fieldId = useId();
const [username, setUsername] = useState(""); const [username, setUsername] = useState("");
const [password, setPassword] = useState(""); const [password, setPassword] = useState("");
const [showPassword, setShowPassword] = useState(false); const [showPassword, setShowPassword] = useState(false);
@@ -28,6 +48,10 @@ export function LoginForm({
const [error, setError] = useState<string | null>(null); const [error, setError] = useState<string | null>(null);
const [pending, setPending] = useState(false); 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>) { async function onSubmit(e: FormEvent<HTMLFormElement>) {
e.preventDefault(); e.preventDefault();
setError(null); setError(null);
@@ -67,7 +91,7 @@ export function LoginForm({
); );
return; return;
} }
window.location.href = "/me"; window.location.href = redirectTo;
} catch { } catch {
setError(needs2fa ? t("errorInvalid2fa") : t("errorInvalidCredentials")); setError(needs2fa ? t("errorInvalid2fa") : t("errorInvalidCredentials"));
} finally { } finally {
@@ -79,60 +103,112 @@ export function LoginForm({
<> <>
{needs2fa && ( {needs2fa && (
<p <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)" }} style={{ color: "var(--color-text-muted)" }}
> >
{t("subtitle2fa")} {t("subtitle2fa")}
</p> </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 <input
id={`${fieldId}-username`}
name="username"
type="text"
value={username} value={username}
onChange={(e) => setUsername(e.target.value)} onChange={(e) => setUsername(e.target.value)}
placeholder={t("usernamePlaceholder")} placeholder={t("usernamePlaceholder")}
autoComplete="username" autoComplete="username"
disabled={needs2fa} 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" 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={{ style={{
backgroundColor: "var(--color-background)", backgroundColor: "var(--color-background)",
color: "var(--color-text-readable)", color: "var(--color-text-readable)",
borderColor: borderColor: needs2fa
"color-mix(in srgb, var(--color-text-muted) 25%, transparent)", ? "color-mix(in srgb, var(--color-text-muted) 15%, transparent)"
: "color-mix(in srgb, var(--color-text-muted) 25%, transparent)",
}} }}
/> />
</div> </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 <input
id={`${fieldId}-password`}
name="password"
type={showPassword ? "text" : "password"} type={showPassword ? "text" : "password"}
value={password} value={password}
onChange={(e) => setPassword(e.target.value)} onChange={(e) => setPassword(e.target.value)}
placeholder={t("passwordPlaceholder")} placeholder={t("passwordPlaceholder")}
autoComplete="current-password" autoComplete="current-password"
disabled={needs2fa} 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" 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={{ style={{
backgroundColor: "var(--color-background)", backgroundColor: "var(--color-background)",
color: "var(--color-text-readable)", color: "var(--color-text-readable)",
borderColor: borderColor: needs2fa
"color-mix(in srgb, var(--color-text-muted) 25%, transparent)", ? "color-mix(in srgb, var(--color-text-muted) 15%, transparent)"
: "color-mix(in srgb, var(--color-text-muted) 25%, transparent)",
}} }}
/> />
<button <button
type="button" type="button"
onClick={() => setShowPassword(!showPassword)} 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)" }} style={{ color: "var(--color-text-muted)" }}
tabIndex={-1} tabIndex={-1}
aria-label={showPassword ? t("hidePassword") : t("showPassword")}
aria-pressed={showPassword}
> >
{showPassword ? "Hide" : "Show"} {showPassword ? t("hidePassword") : t("showPassword")}
</button> </button>
</div> </div>
{needs2fa ? ( {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 <input
id={`${fieldId}-2fa`}
name="code"
type="text"
value={code} value={code}
onChange={(e) => setCode(e.target.value)} onChange={(e) => setCode(e.target.value)}
placeholder={t("codePlaceholder")} placeholder={t("codePlaceholder")}
@@ -153,7 +229,9 @@ export function LoginForm({
{error && ( {error && (
<p <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)" }} style={{ color: "var(--color-danger)" }}
> >
{error} {error}
@@ -163,7 +241,7 @@ export function LoginForm({
<button <button
type="submit" type="submit"
disabled={pending} 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={{ style={{
background: "var(--color-primary)", background: "var(--color-primary)",
color: "var(--color-primary-foreground)", color: "var(--color-primary-foreground)",
@@ -174,11 +252,11 @@ export function LoginForm({
{pending ? ( {pending ? (
<span className="inline-flex items-center justify-center gap-2"> <span className="inline-flex items-center justify-center gap-2">
<svg <svg
className="animate-spin h-4 w-4" className="h-4 w-4 animate-spin"
viewBox="0 0 24 24" viewBox="0 0 24 24"
fill="none" fill="none"
role="img" role="img"
aria-label="Loading" aria-label={t("pleaseWait")}
> >
<circle <circle
className="opacity-25" className="opacity-25"
@@ -204,27 +282,29 @@ export function LoginForm({
</button> </button>
</form> </form>
<p {showFooter && (
className="text-xs text-center mt-6" <p
style={{ color: "var(--color-text-muted)" }} className="mt-6 text-center text-xs"
> style={{ color: "var(--color-text-muted)" }}
{t("noAccount")}{" "}
<Link
href="/register"
className="font-extrabold hover:underline"
style={{ color: "var(--color-primary)" }}
> >
{t("createOne")} {t("noAccount")}{" "}
</Link>{" "} <Link
·{" "} href="/register"
<Link className="font-extrabold hover:underline"
href="/forgot" style={{ color: "var(--color-primary)" }}
className="font-extrabold hover:underline" >
style={{ color: "var(--color-primary)" }} {t("createOne")}
> </Link>{" "}
{t("forgotPassword")} ·{" "}
</Link> <Link
</p> 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 { signIn } from "next-auth/react";
import { useTranslations } from "next-intl"; import { useTranslations } from "next-intl";
import { useActionState, useEffect, useRef, useState } from "react"; 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 Link from "@/components/link";
import { signInWithTransientRetry } from "@/lib/auth/sign-in-retry"; import { signInWithTransientRetry } from "@/lib/auth/sign-in-retry";
@@ -16,7 +20,10 @@ interface RegisterFormProps {
nonce?: string; nonce?: string;
} }
function passwordStrength(pw: string): { function passwordStrength(
pw: string,
t: (key: string) => string,
): {
score: number; score: number;
label: string; label: string;
color: string; color: string;
@@ -28,10 +35,10 @@ function passwordStrength(pw: string): {
if (/\d/.test(pw)) score += 1; if (/\d/.test(pw)) score += 1;
if (/[^a-zA-Z0-9]/.test(pw)) score += 1; if (/[^a-zA-Z0-9]/.test(pw)) score += 1;
if (score <= 1) return { score, label: "Weak", color: "#ef4444" }; if (score <= 1) return { score, label: t("strengthWeak"), color: "#ef4444" };
if (score <= 2) return { score, label: "Fair", color: "#f59e0b" }; if (score <= 2) return { score, label: t("strengthFair"), color: "#f59e0b" };
if (score <= 3) return { score, label: "Good", color: "#22c55e" }; if (score <= 3) return { score, label: t("strengthGood"), color: "#22c55e" };
return { score: 5, label: "Strong", color: "#16a34a" }; return { score: 5, label: t("strengthStrong"), color: "#16a34a" };
} }
export function RegisterForm({ export function RegisterForm({
@@ -46,6 +53,21 @@ export function RegisterForm({
RegisterState, RegisterState,
FormData FormData
>(register, { error: null, ok: false }); >(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 [termsAccepted, setTermsAccepted] = useState(false);
const [termsError, setTermsError] = useState(false); const [termsError, setTermsError] = useState(false);
const termsRef = useRef<HTMLDivElement>(null); const termsRef = useRef<HTMLDivElement>(null);
@@ -58,7 +80,7 @@ export function RegisterForm({
); );
const autoLoginStartedRef = useRef(false); const autoLoginStartedRef = useRef(false);
const [referralCode, setReferralCode] = useState(""); 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 // The invite link is `/register?ref=<username>`; read it client-side so the
// attribution travels with the sign-up form without server state. // attribution travels with the sign-up form without server state.
@@ -186,12 +208,14 @@ export function RegisterForm({
borderRadius: "0 0 12px 12px", borderRadius: "0 0 12px 12px",
}} }}
> >
{(error || state.error) && ( {errorMessage && (
<div <div
role="alert"
aria-live="polite"
className="animate-fade-in-up p-3 rounded-lg text-sm font-semibold text-primary-foreground" className="animate-fade-in-up p-3 rounded-lg text-sm font-semibold text-primary-foreground"
style={{ backgroundColor: "var(--color-danger)" }} style={{ backgroundColor: "var(--color-danger)" }}
> >
{error || state.error} {errorMessage}
</div> </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." "rateLimit": "Too many attempts. Please wait before trying again."
}, },
"login": { "login": {
"title": "Sign in", "title": "تسجيل الدخول",
"subtitle": "Welcome back — log in to enter the hotel.", "subtitle": "سجّل الدخول للمتابعة إلى الفندق التالي.",
"subtitle2fa": "Enter the 6-digit code from your authenticator.", "subtitle2fa": "أدخل الرمز المكوّن من 6 أرقام من تطبيق المصادقة.",
"welcomeBack": "Welcome back", "welcomeBack": "أهلاً بعودتك",
"welcomeBackSub": "Sign in to continue to {hotelName}", "welcomeBackSub": "سجّل الدخول للانضمام إلى {hotelName}",
"usernamePlaceholder": "Username", "usernamePlaceholder": "اسم المستخدم",
"passwordPlaceholder": "Password", "passwordPlaceholder": "كلمة المرور",
"codePlaceholder": "2FA code", "codePlaceholder": "أدخل رمز التحقق بخطوتين",
"pleaseWait": "Please wait…", "pleaseWait": "يرجى الانتظار...",
"verify": "Verify", "verify": "تحقق",
"signIn": "Sign in", "signIn": "تسجيل الدخول",
"or": "or", "or": "أو",
"noAccount": "No account?", "noAccount": "ليس لديك حساب؟",
"createOne": "Create one", "createOne": "أنشئ حساباً",
"forgotPassword": "Forgot password?", "forgotPassword": "هل نسيت كلمة المرور؟",
"errorInvalidCredentials": "Invalid username or password", "errorInvalidCredentials": "اسم المستخدم أو كلمة المرور غير صحيحة",
"errorInvalid2fa": "Invalid 2FA code", "errorInvalid2fa": "رمز التحقق بخطوتين غير صالح",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "يرجى التحقق من بريدك الإلكتروني قبل تسجيل الدخول.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "فشل التحقق من الكابتشا. حاول مرة أخرى.",
"whoIsOnline": "Who's online", "whoIsOnline": "من متصل الآن",
"newestCitizens": "Newest citizens", "newestCitizens": "أحدث السكان",
"usersOnline": "{count} online" "usersOnline": "{count} متصل",
"username": "اسم المستخدم",
"password": "كلمة المرور",
"showPassword": "إظهار",
"hidePassword": "إخفاء"
}, },
"register": { "register": {
"title": "Create account", "title": "إنشاء حساب",
"subtitle": "Join the hotel — it only takes a moment.", "subtitle": "انضم إلى الفندق — لن يستغرق الأمر سوى لحظات.",
"username": "Username", "username": "اسم المستخدم",
"email": "Email", "email": "البريد الإلكتروني",
"password": "Password", "password": "كلمة المرور",
"confirmPassword": "Repeat password", "confirmPassword": "أعد كلمة المرور",
"usernamePlaceholder": "Username", "usernamePlaceholder": "اسم المستخدم",
"emailPlaceholder": "Email", "emailPlaceholder": "البريد الإلكتروني",
"passwordPlaceholder": "Password (min 8 chars)", "passwordPlaceholder": "كلمة المرور (12 حرفًا على الأقل)",
"confirmPasswordPlaceholder": "Repeat password", "confirmPasswordPlaceholder": "أعد كلمة المرور",
"selectOutfit": "Select your outfit", "selectOutfit": "اختر ملابسك",
"termsAccept": "I am 18+ and accept the {hotel} terms & rules.", "termsAccept": "أنا أبلغ 18 عامًا وأوافق على شروط {hotel}.",
"accepted": "Accepted & agreed", "accepted": "تم القبول والموافقة",
"showPassword": "Show", "showPassword": "إظهار",
"hidePassword": "Hide", "hidePassword": "إخفاء",
"accountDetails": "Account details", "accountDetails": "بيانات الحساب",
"credentials": "Credentials & security", "credentials": "بيانات الدخول والأمان",
"createAccount": "Create account", "createAccount": "إنشاء حساب",
"creatingAccount": "Creating account...", "creatingAccount": "جارٍ إنشاء الحساب...",
"redirecting": "Redirecting to your account...", "redirecting": "جارٍ الانتقال إلى حسابك...",
"alreadyHaveAccount": "Already have an account? Login!", "alreadyHaveAccount": "لديك حساب بالفعل؟ سجّل الدخول!",
"alreadyHaveAccountPre": "Already have an account?", "alreadyHaveAccountPre": "لديك حساب بالفعل؟",
"alreadyHaveAccountLink": "Sign in", "alreadyHaveAccountLink": "تسجيل الدخول",
"register": "Register", "register": "تسجيل",
"whoIsOnline": "Who's online", "whoIsOnline": "من متصل الآن",
"usersOnline": "{count} online", "usersOnline": "{count} متصل",
"termsError": "You must accept the terms & rules to register.", "termsError": "يجب الموافقة على الشروط للتسجيل.",
"usernameError": "Username is required.", "usernameError": "اسم المستخدم مطلوب.",
"emailError": "Valid email is required.", "emailError": "البريد الإلكتروني الصالح مطلوب.",
"passwordError": "Password must be at least 6 characters.", "passwordError": "يجب ألا تقل كلمة المرور عن 12 حرفًا",
"confirmPasswordError": "Passwords do not match.", "confirmPasswordError": "كلمتا المرور غير متطابقتين.",
"termsRequired": "You must accept the terms & rules.", "termsRequired": "يجب الموافقة على الشروط.",
"usernameRequired": "Username is required.", "usernameRequired": "اسم المستخدم مطلوب.",
"emailRequired": "Email is required.", "emailRequired": "البريد الإلكتروني مطلوب.",
"passwordRequired": "Password is required.", "passwordRequired": "كلمة المرور مطلوبة.",
"passwordsDontMatch": "Passwords do not match.", "passwordsDontMatch": "كلمتا المرور غير متطابقتين.",
"newestCitizens": "Newest citizens", "newestCitizens": "أحدث السكان",
"ageVerified": "أبلغ 18+ وأوافق على شرط العمر.", "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": "Passwords do not match.",
"captchaFailed": "فشل التحقق من الكابتشا. حاول مرة أخرى.",
"usernameTaken": "اسم المستخدم هذا مستخدم بالفعل",
"rateLimited": "محاولات تسجيل كثيرة جدًا. انتظر بضع دقائق ثم حاول مرة أخرى.",
"vpnBlocked": "التسجيل عبر اتصالات VPN أو البروكسي غير مسموح به.",
"maxAccountsPerIp": "لقد بلغت الحد الأقصى من الحسابات لاتصالك.",
"unavailable": "التسجيل غير متاح مؤقتًا.",
"createFailed": "تعذر إنشاء الحساب. حاول مرة أخرى أو تواصل مع الإدارة.",
"invalidInput": "يرجى مراجعة الحقول المميزة والمحاولة مرة أخرى."
}, },
"forgot": { "forgot": {
"title": "Reset password", "title": "Reset password",
@@ -6143,9 +6172,11 @@
"reset": { "reset": {
"title": "Set a new password", "title": "Set a new password",
"subtitle": "Choose a strong password you don't use elsewhere.", "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", "resetPassword": "Reset password",
"backToLogin": "Back to login" "backToLogin": "Back to login",
"passwordMinLength": "يجب ألا تقل كلمة المرور عن 12 حرفًا",
"tooManyAttempts": "محاولات كثيرة جدًا — حاول لاحقًا"
}, },
"verify": { "verify": {
"verifiedTitle": "You're all set", "verifiedTitle": "You're all set",
+50 -19
View File
@@ -836,14 +836,18 @@
"createOne": "Създайте такъв", "createOne": "Създайте такъв",
"forgotPassword": "Забравена парола?", "forgotPassword": "Забравена парола?",
"errorInvalidCredentials": "Невалидно потребителско име или парола", "errorInvalidCredentials": "Невалидно потребителско име или парола",
"errorInvalid2fa": "Невалиден 2FA код", "errorInvalid2fa": "Невалиден код за двустъпково удостоверяване",
"welcomeBack": "Добре дошли отново", "welcomeBack": "Добре дошли отново",
"welcomeBackSub": "Влезте, за да продължите към {hotelName}", "welcomeBackSub": "Влезте, за да продължите към {hotelName}",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Моля, потвърдете имейла си, преди да влезете.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "Проверката на капчата е неуспешна. Опитайте отново.",
"whoIsOnline": "Who's online", "whoIsOnline": "Кой е на линия",
"newestCitizens": "Newest citizens", "newestCitizens": "Най-нови граждани",
"usersOnline": "{count} online" "usersOnline": "{count} на линия",
"username": "Потребителско име",
"password": "Парола",
"showPassword": "Покажи",
"hidePassword": "Скрий"
}, },
"register": { "register": {
"title": "Създаване на акаунт", "title": "Създаване на акаунт",
@@ -854,7 +858,7 @@
"confirmPassword": "Повторете паролата", "confirmPassword": "Повторете паролата",
"usernamePlaceholder": "Потребителско име", "usernamePlaceholder": "Потребителско име",
"emailPlaceholder": "Имейл", "emailPlaceholder": "Имейл",
"passwordPlaceholder": "Парола (мин. 6 знака)", "passwordPlaceholder": "Парола (мин. 12 знака)",
"confirmPasswordPlaceholder": "Повторете паролата", "confirmPasswordPlaceholder": "Повторете паролата",
"selectOutfit": "Изберете вашето облекло", "selectOutfit": "Изберете вашето облекло",
"termsAccept": "Аз съм на 18+ и приемам условията и правилата на {hotel}.", "termsAccept": "Аз съм на 18+ и приемам условията и правилата на {hotel}.",
@@ -866,7 +870,7 @@
"termsError": "Трябва да приемете условията и правилата, за да се регистрирате.", "termsError": "Трябва да приемете условията и правилата, за да се регистрирате.",
"usernameError": "Изисква се потребителско име.", "usernameError": "Изисква се потребителско име.",
"emailError": "Изисква се валиден имейл.", "emailError": "Изисква се валиден имейл.",
"passwordError": "Паролата трябва да е поне 6 знака.", "passwordError": "Паролата трябва да е поне 12 знака",
"confirmPasswordError": "Паролите не съвпадат.", "confirmPasswordError": "Паролите не съвпадат.",
"termsRequired": "Трябва да приемете условията и правилата.", "termsRequired": "Трябва да приемете условията и правилата.",
"usernameRequired": "Изисква се потребителско име.", "usernameRequired": "Изисква се потребителско име.",
@@ -875,16 +879,41 @@
"passwordsDontMatch": "Паролите не съвпадат.", "passwordsDontMatch": "Паролите не съвпадат.",
"alreadyHaveAccountPre": "Вече имаш акаунт?", "alreadyHaveAccountPre": "Вече имаш акаунт?",
"alreadyHaveAccountLink": "Вход", "alreadyHaveAccountLink": "Вход",
"whoIsOnline": "Кой е онлайн", "whoIsOnline": "Кой е на линия",
"usersOnline": "{count} онлайн", "usersOnline": "{count} на линия",
"accepted": "Accepted & agreed", "accepted": "Прието и съгласен съм",
"showPassword": "Show", "showPassword": "Покажи",
"hidePassword": "Hide", "hidePassword": "Скрий",
"accountDetails": "Account details", "accountDetails": "Данни за профила",
"credentials": "Credentials & security", "credentials": "Данни за вход и сигурност",
"newestCitizens": "Newest citizens", "newestCitizens": "Най-нови граждани",
"ageVerified": "Над 18 годишен съм и съгласен с изискването за възраст.", "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": { "forgot": {
"title": "Нулирайте паролата", "title": "Нулирайте паролата",
@@ -898,9 +927,11 @@
"reset": { "reset": {
"title": "Задайте нова парола", "title": "Задайте нова парола",
"subtitle": "Изберете силна парола, която не използвате другаде.", "subtitle": "Изберете силна парола, която не използвате другаде.",
"passwordPlaceholder": "Нова парола (мин. 6 знака)", "passwordPlaceholder": "Нова парола (мин. 12 знака)",
"resetPassword": "Нулирайте паролата", "resetPassword": "Нулирайте паролата",
"backToLogin": "Назад към входа" "backToLogin": "Назад към входа",
"passwordMinLength": "Паролата трябва да е поне 12 знака",
"tooManyAttempts": "Твърде много опити — опитайте по-късно"
}, },
"verify": { "verify": {
"verifiedTitle": "Всичко е готово", "verifiedTitle": "Всичко е готово",
+48 -17
View File
@@ -836,14 +836,18 @@
"createOne": "Vytvořte jeden", "createOne": "Vytvořte jeden",
"forgotPassword": "Zapomněli jste heslo?", "forgotPassword": "Zapomněli jste heslo?",
"errorInvalidCredentials": "Neplatné uživatelské jméno nebo 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", "welcomeBack": "Vítej zpět",
"welcomeBackSub": "Přihlas se pro pokračování do {hotelName}", "welcomeBackSub": "Přihlas se pro pokračování do {hotelName}",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Před přihlášením ověřte svou e-mailovou adresu.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "Ověření captcha selhalo. Zkuste to znovu.",
"whoIsOnline": "Who's online", "whoIsOnline": "Kdo je online",
"newestCitizens": "Newest citizens", "newestCitizens": "Nejnovější občané",
"usersOnline": "{count} online" "usersOnline": "{count} online",
"username": "Uživatelské jméno",
"password": "Heslo",
"showPassword": "Zobrazit",
"hidePassword": "Skrýt"
}, },
"register": { "register": {
"title": "Vytvořit účet", "title": "Vytvořit účet",
@@ -854,7 +858,7 @@
"confirmPassword": "Opakujte heslo", "confirmPassword": "Opakujte heslo",
"usernamePlaceholder": "Uživatelské jméno", "usernamePlaceholder": "Uživatelské jméno",
"emailPlaceholder": "Email", "emailPlaceholder": "Email",
"passwordPlaceholder": "Heslo (min. 6 znaků)", "passwordPlaceholder": "Heslo (min. 12 znaků)",
"confirmPasswordPlaceholder": "Opakujte heslo", "confirmPasswordPlaceholder": "Opakujte heslo",
"selectOutfit": "Vyberte si oblečení", "selectOutfit": "Vyberte si oblečení",
"termsAccept": "Je mi 18+ a souhlasím s podmínkami a pravidly {hotel}.", "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.", "termsError": "Chcete-li se zaregistrovat, musíte přijmout podmínky a pravidla.",
"usernameError": "Uživatelské jméno je povinné.", "usernameError": "Uživatelské jméno je povinné.",
"emailError": "Je vyžadován platný e-mail.", "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í.", "confirmPasswordError": "Hesla se neshodují.",
"termsRequired": "Musíte přijmout podmínky a pravidla.", "termsRequired": "Musíte přijmout podmínky a pravidla.",
"usernameRequired": "Uživatelské jméno je povinné.", "usernameRequired": "Uživatelské jméno je povinné.",
@@ -877,14 +881,39 @@
"alreadyHaveAccountLink": "Přihlásit se", "alreadyHaveAccountLink": "Přihlásit se",
"whoIsOnline": "Kdo je online", "whoIsOnline": "Kdo je online",
"usersOnline": "{count} online", "usersOnline": "{count} online",
"accepted": "Accepted & agreed", "accepted": "Přijato a souhlasím",
"showPassword": "Show", "showPassword": "Zobrazit",
"hidePassword": "Hide", "hidePassword": "Skrýt",
"accountDetails": "Account details", "accountDetails": "Údaje o účtu",
"credentials": "Credentials & security", "credentials": "Přihlašovací údaje a zabezpečení",
"newestCitizens": "Newest citizens", "newestCitizens": "Nejnovější občané",
"ageVerified": "Je mi 18+ a souhlasím s věkovým požadavkem.", "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": { "forgot": {
"title": "Obnovit heslo", "title": "Obnovit heslo",
@@ -898,9 +927,11 @@
"reset": { "reset": {
"title": "Nastavte nové heslo", "title": "Nastavte nové heslo",
"subtitle": "Vyberte si silné heslo, které jinde nepoužíváte.", "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", "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": { "verify": {
"verifiedTitle": "Vše je připraveno", "verifiedTitle": "Vše je připraveno",
+47 -16
View File
@@ -839,11 +839,15 @@
"errorInvalid2fa": "Ugyldig 2FA-kode", "errorInvalid2fa": "Ugyldig 2FA-kode",
"welcomeBack": "Velkommen tilbage", "welcomeBack": "Velkommen tilbage",
"welcomeBackSub": "Log ind for at fortsætte til {hotelName}", "welcomeBackSub": "Log ind for at fortsætte til {hotelName}",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Bekræft din e-mail, før du logger ind.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "Captcha-verificering mislykkedes. Prøv igen.",
"whoIsOnline": "Who's online", "whoIsOnline": "Hvem er online",
"newestCitizens": "Newest citizens", "newestCitizens": "Nyeste borgere",
"usersOnline": "{count} online" "usersOnline": "{count} online",
"username": "Brugernavn",
"password": "Adgangskode",
"showPassword": "Vis",
"hidePassword": "Skjul"
}, },
"register": { "register": {
"title": "Opret konto", "title": "Opret konto",
@@ -854,7 +858,7 @@
"confirmPassword": "Gentag adgangskoden", "confirmPassword": "Gentag adgangskoden",
"usernamePlaceholder": "Brugernavn", "usernamePlaceholder": "Brugernavn",
"emailPlaceholder": "E-mail", "emailPlaceholder": "E-mail",
"passwordPlaceholder": "Adgangskode (min. 6 tegn)", "passwordPlaceholder": "Adgangskode (min. 12 tegn)",
"confirmPasswordPlaceholder": "Gentag adgangskoden", "confirmPasswordPlaceholder": "Gentag adgangskoden",
"selectOutfit": "Vælg dit outfit", "selectOutfit": "Vælg dit outfit",
"termsAccept": "Jeg er 18+ og accepterer vilkårene og reglerne for {hotel}.", "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.", "termsError": "Du skal acceptere vilkårene og reglerne for at registrere dig.",
"usernameError": "Brugernavn er påkrævet.", "usernameError": "Brugernavn er påkrævet.",
"emailError": "Gyldig e-mail 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.", "confirmPasswordError": "Adgangskoder stemmer ikke overens.",
"termsRequired": "Du skal acceptere vilkårene og reglerne.", "termsRequired": "Du skal acceptere vilkårene og reglerne.",
"usernameRequired": "Brugernavn er påkrævet.", "usernameRequired": "Brugernavn er påkrævet.",
@@ -877,14 +881,39 @@
"alreadyHaveAccountLink": "Log ind", "alreadyHaveAccountLink": "Log ind",
"whoIsOnline": "Hvem er online", "whoIsOnline": "Hvem er online",
"usersOnline": "{count} online", "usersOnline": "{count} online",
"accepted": "Accepted & agreed", "accepted": "Accepteret og godkendt",
"showPassword": "Show", "showPassword": "Vis",
"hidePassword": "Hide", "hidePassword": "Skjul",
"accountDetails": "Account details", "accountDetails": "Kontooplysninger",
"credentials": "Credentials & security", "credentials": "Loginoplysninger og sikkerhed",
"newestCitizens": "Newest citizens", "newestCitizens": "Nyeste borgere",
"ageVerified": "Jeg er 18+ og accepterer alderskravet.", "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": { "forgot": {
"title": "Nulstil adgangskode", "title": "Nulstil adgangskode",
@@ -898,9 +927,11 @@
"reset": { "reset": {
"title": "Indstil en ny adgangskode", "title": "Indstil en ny adgangskode",
"subtitle": "Vælg en stærk adgangskode, du ikke bruger andre steder.", "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", "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": { "verify": {
"verifiedTitle": "Du er klar", "verifiedTitle": "Du er klar",
+47 -16
View File
@@ -809,11 +809,15 @@
"errorInvalid2fa": "Ungültiger 2FA-Code", "errorInvalid2fa": "Ungültiger 2FA-Code",
"welcomeBack": "Willkommen zurück", "welcomeBack": "Willkommen zurück",
"welcomeBackSub": "Melde dich an, um zu {hotelName} zu gelangen", "welcomeBackSub": "Melde dich an, um zu {hotelName} zu gelangen",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Bitte bestätige deine E-Mail-Adresse, bevor du dich anmeldest.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "Captcha-Verifizierung fehlgeschlagen. Bitte erneut versuchen.",
"whoIsOnline": "Who's online", "whoIsOnline": "Wer ist online",
"newestCitizens": "Newest citizens", "newestCitizens": "Neueste Bürger",
"usersOnline": "{count} online" "usersOnline": "{count} online",
"username": "Benutzername",
"password": "Passwort",
"showPassword": "Anzeigen",
"hidePassword": "Verbergen"
}, },
"register": { "register": {
"title": "Konto erstellen", "title": "Konto erstellen",
@@ -824,7 +828,7 @@
"confirmPassword": "Passwort wiederholen", "confirmPassword": "Passwort wiederholen",
"usernamePlaceholder": "Benutzername", "usernamePlaceholder": "Benutzername",
"emailPlaceholder": "E-Mail", "emailPlaceholder": "E-Mail",
"passwordPlaceholder": "Passwort (min. 6 Zeichen)", "passwordPlaceholder": "Passwort (min. 12 Zeichen)",
"confirmPasswordPlaceholder": "Passwort wiederholen", "confirmPasswordPlaceholder": "Passwort wiederholen",
"selectOutfit": "Wähle dein Outfit", "selectOutfit": "Wähle dein Outfit",
"termsAccept": "Ich bin 18+ und akzeptiere die {hotel} AGB & Regeln.", "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.", "termsError": "Du musst die AGB & Regeln akzeptieren, um dich zu registrieren.",
"usernameError": "Benutzername ist erforderlich.", "usernameError": "Benutzername ist erforderlich.",
"emailError": "Eine gültige E-Mail 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.", "confirmPasswordError": "Passwörter stimmen nicht überein.",
"termsRequired": "Du musst die AGB & Regeln akzeptieren.", "termsRequired": "Du musst die AGB & Regeln akzeptieren.",
"usernameRequired": "Benutzername ist erforderlich.", "usernameRequired": "Benutzername ist erforderlich.",
@@ -847,14 +851,39 @@
"alreadyHaveAccountLink": "Anmelden", "alreadyHaveAccountLink": "Anmelden",
"whoIsOnline": "Wer ist online", "whoIsOnline": "Wer ist online",
"usersOnline": "{count} online", "usersOnline": "{count} online",
"accepted": "Accepted & agreed", "accepted": "Akzeptiert & zugestimmt",
"showPassword": "Show", "showPassword": "Anzeigen",
"hidePassword": "Hide", "hidePassword": "Verbergen",
"accountDetails": "Account details", "accountDetails": "Kontodaten",
"credentials": "Credentials & security", "credentials": "Zugangsdaten & Sicherheit",
"newestCitizens": "Newest citizens", "newestCitizens": "Neueste Bürger",
"ageVerified": "Ich bin 18+ und stimme der Altersanforderung zu.", "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": { "forgot": {
"title": "Passwort zurücksetzen", "title": "Passwort zurücksetzen",
@@ -868,9 +897,11 @@
"reset": { "reset": {
"title": "Neues Passwort festlegen", "title": "Neues Passwort festlegen",
"subtitle": "Wähle ein sicheres Passwort, das du sonst nirgendwo verwendest.", "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", "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": { "verify": {
"verifiedTitle": "Du bist startklar", "verifiedTitle": "Du bist startklar",
+49 -18
View File
@@ -839,11 +839,15 @@
"errorInvalid2fa": "Μη έγκυρος κωδικός 2FA", "errorInvalid2fa": "Μη έγκυρος κωδικός 2FA",
"welcomeBack": "Καλώς ήρθες πίσω", "welcomeBack": "Καλώς ήρθες πίσω",
"welcomeBackSub": "Συνδέσου για να συνεχίσεις στο {hotelName}", "welcomeBackSub": "Συνδέσου για να συνεχίσεις στο {hotelName}",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Επαληθεύστε το email σας πριν συνδεθείτε.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "Η επαλήθευση captcha απέτυχε. Δοκιμάστε ξανά.",
"whoIsOnline": "Who's online", "whoIsOnline": "Ποιος είναι σε σύνδεση",
"newestCitizens": "Newest citizens", "newestCitizens": "Νέοι πολίτες",
"usersOnline": "{count} online" "usersOnline": "{count} σε σύνδεση",
"username": "Όνομα χρήστη",
"password": "Κωδικός πρόσβασης",
"showPassword": "Εμφάνιση",
"hidePassword": "Απόκρυψη"
}, },
"register": { "register": {
"title": "Δημιουργία λογαριασμού", "title": "Δημιουργία λογαριασμού",
@@ -854,7 +858,7 @@
"confirmPassword": "Επαναλάβετε τον κωδικό πρόσβασης", "confirmPassword": "Επαναλάβετε τον κωδικό πρόσβασης",
"usernamePlaceholder": "Όνομα χρήστη", "usernamePlaceholder": "Όνομα χρήστη",
"emailPlaceholder": "Email", "emailPlaceholder": "Email",
"passwordPlaceholder": "Κωδικός πρόσβασης (ελάχ. 6 χαρακτήρες)", "passwordPlaceholder": "Κωδικός πρόσβασης (ελάχ. 12 χαρακτήρες)",
"confirmPasswordPlaceholder": "Επαναλάβετε τον κωδικό πρόσβασης", "confirmPasswordPlaceholder": "Επαναλάβετε τον κωδικό πρόσβασης",
"selectOutfit": "Επιλέξτε το ντύσιμό σας", "selectOutfit": "Επιλέξτε το ντύσιμό σας",
"termsAccept": "Είμαι 18+ και αποδέχομαι τους όρους και τους κανόνες του {hotel}.", "termsAccept": "Είμαι 18+ και αποδέχομαι τους όρους και τους κανόνες του {hotel}.",
@@ -866,7 +870,7 @@
"termsError": "Πρέπει να αποδεχτείτε τους όρους και τους κανόνες για να εγγραφείτε.", "termsError": "Πρέπει να αποδεχτείτε τους όρους και τους κανόνες για να εγγραφείτε.",
"usernameError": "Απαιτείται όνομα χρήστη.", "usernameError": "Απαιτείται όνομα χρήστη.",
"emailError": "Απαιτείται έγκυρο email.", "emailError": "Απαιτείται έγκυρο email.",
"passwordError": "Ο κωδικός πρόσβασης πρέπει να αποτελείται από τουλάχιστον 6 χαρακτήρες.", "passwordError": "Ο κωδικός πρόσβασης πρέπει να έχει τουλάχιστον 12 χαρακτήρες",
"confirmPasswordError": "Οι κωδικοί πρόσβασης δεν ταιριάζουν.", "confirmPasswordError": "Οι κωδικοί πρόσβασης δεν ταιριάζουν.",
"termsRequired": "Πρέπει να αποδεχτείτε τους όρους και τους κανόνες.", "termsRequired": "Πρέπει να αποδεχτείτε τους όρους και τους κανόνες.",
"usernameRequired": "Απαιτείται όνομα χρήστη.", "usernameRequired": "Απαιτείται όνομα χρήστη.",
@@ -875,16 +879,41 @@
"passwordsDontMatch": "Οι κωδικοί πρόσβασης δεν ταιριάζουν.", "passwordsDontMatch": "Οι κωδικοί πρόσβασης δεν ταιριάζουν.",
"alreadyHaveAccountPre": "Έχεις ήδη λογαριασμό;", "alreadyHaveAccountPre": "Έχεις ήδη λογαριασμό;",
"alreadyHaveAccountLink": "Σύνδεση", "alreadyHaveAccountLink": "Σύνδεση",
"whoIsOnline": "Ποιος είναι συνδεδεμένος", "whoIsOnline": "Ποιος είναι σε σύνδεση",
"usersOnline": "{count} συνδεδεμένοι", "usersOnline": "{count} σε σύνδεση",
"accepted": "Accepted & agreed", "accepted": "Αποδεκτό & συμφωνώ",
"showPassword": "Show", "showPassword": "Εμφάνιση",
"hidePassword": "Hide", "hidePassword": "Απόκρυψη",
"accountDetails": "Account details", "accountDetails": "Στοιχεία λογαριασμού",
"credentials": "Credentials & security", "credentials": "Στοιχεία σύνδεσης & ασφάλεια",
"newestCitizens": "Newest citizens", "newestCitizens": "Νέοι πολίτες",
"ageVerified": "Είμαι 18+ και αποδέχομαι την απαίτηση ηλικίας.", "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": { "forgot": {
"title": "Επαναφορά κωδικού πρόσβασης", "title": "Επαναφορά κωδικού πρόσβασης",
@@ -898,9 +927,11 @@
"reset": { "reset": {
"title": "Ορίστε νέο κωδικό πρόσβασης", "title": "Ορίστε νέο κωδικό πρόσβασης",
"subtitle": "Επιλέξτε έναν ισχυρό κωδικό πρόσβασης που δεν χρησιμοποιείτε αλλού.", "subtitle": "Επιλέξτε έναν ισχυρό κωδικό πρόσβασης που δεν χρησιμοποιείτε αλλού.",
"passwordPlaceholder": "Νέος κωδικός πρόσβασης (ελάχ. 6 χαρακτήρες)", "passwordPlaceholder": "Νέος κωδικός πρόσβασης (ελάχ. 12 χαρακτήρες)",
"resetPassword": "Επαναφορά κωδικού πρόσβασης", "resetPassword": "Επαναφορά κωδικού πρόσβασης",
"backToLogin": "Επιστροφή στην είσοδο" "backToLogin": "Επιστροφή στην είσοδο",
"passwordMinLength": "Ο κωδικός πρόσβασης πρέπει να έχει τουλάχιστον 12 χαρακτήρες",
"tooManyAttempts": "Πάρα πολλές προσπάθειες — δοκιμάστε αργότερα"
}, },
"verify": { "verify": {
"verifiedTitle": "Είστε έτοιμοι", "verifiedTitle": "Είστε έτοιμοι",
+37 -6
View File
@@ -1015,7 +1015,11 @@
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "Captcha verification failed. Please try again.",
"whoIsOnline": "Who's online", "whoIsOnline": "Who's online",
"newestCitizens": "Newest citizens", "newestCitizens": "Newest citizens",
"usersOnline": "{count} online" "usersOnline": "{count} online",
"showPassword": "Show",
"hidePassword": "Hide",
"username": "Username",
"password": "Password"
}, },
"register": { "register": {
"title": "Create account", "title": "Create account",
@@ -1026,7 +1030,7 @@
"confirmPassword": "Repeat password", "confirmPassword": "Repeat password",
"usernamePlaceholder": "Username", "usernamePlaceholder": "Username",
"emailPlaceholder": "Email", "emailPlaceholder": "Email",
"passwordPlaceholder": "Password (min 8 chars)", "passwordPlaceholder": "Password (min 12 chars)",
"confirmPasswordPlaceholder": "Repeat password", "confirmPasswordPlaceholder": "Repeat password",
"selectOutfit": "Select your outfit", "selectOutfit": "Select your outfit",
"termsAccept": "I am 18+ and accept the {hotel} terms & rules.", "termsAccept": "I am 18+ and accept the {hotel} terms & rules.",
@@ -1049,14 +1053,39 @@
"termsError": "You must accept the terms & rules to register.", "termsError": "You must accept the terms & rules to register.",
"usernameError": "Username is required.", "usernameError": "Username is required.",
"emailError": "Valid email 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.", "confirmPasswordError": "Passwords do not match.",
"termsRequired": "You must accept the terms & rules.", "termsRequired": "You must accept the terms & rules.",
"usernameRequired": "Username is required.", "usernameRequired": "Username is required.",
"emailRequired": "Email is required.", "emailRequired": "Email is required.",
"passwordRequired": "Password is required.", "passwordRequired": "Password is required.",
"passwordsDontMatch": "Passwords do not match.", "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": { "forgot": {
"title": "Reset password", "title": "Reset password",
@@ -1070,9 +1099,11 @@
"reset": { "reset": {
"title": "Set a new password", "title": "Set a new password",
"subtitle": "Choose a strong password you don't use elsewhere.", "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", "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": { "verify": {
"verifiedTitle": "You're all set", "verifiedTitle": "You're all set",
+48 -17
View File
@@ -806,14 +806,18 @@
"createOne": "Crea una", "createOne": "Crea una",
"forgotPassword": "¿Olvidaste tu contraseña?", "forgotPassword": "¿Olvidaste tu contraseña?",
"errorInvalidCredentials": "Usuario o contraseña inválidos", "errorInvalidCredentials": "Usuario o contraseña inválidos",
"errorInvalid2fa": "Código 2FA inválido", "errorInvalid2fa": "Código 2FA no válido",
"welcomeBack": "Bienvenido de nuevo", "welcomeBack": "Bienvenido de nuevo",
"welcomeBackSub": "Inicia sesión para continuar en {hotelName}", "welcomeBackSub": "Inicia sesión para continuar en {hotelName}",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Verifica tu correo electrónico antes de iniciar sesión.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "La verificación captcha falló. Inténtalo de nuevo.",
"whoIsOnline": "Who's online", "whoIsOnline": "Quién está en línea",
"newestCitizens": "Newest citizens", "newestCitizens": "Ciudadanos más recientes",
"usersOnline": "{count} online" "usersOnline": "{count} en línea",
"username": "Usuario",
"password": "Contraseña",
"showPassword": "Mostrar",
"hidePassword": "Ocultar"
}, },
"register": { "register": {
"title": "Crear cuenta", "title": "Crear cuenta",
@@ -824,7 +828,7 @@
"confirmPassword": "Repetir contraseña", "confirmPassword": "Repetir contraseña",
"usernamePlaceholder": "Usuario", "usernamePlaceholder": "Usuario",
"emailPlaceholder": "Correo electrónico", "emailPlaceholder": "Correo electrónico",
"passwordPlaceholder": "Contraseña (mín. 6 caracteres)", "passwordPlaceholder": "Contraseña (mín. 12 caracteres)",
"confirmPasswordPlaceholder": "Repetir contraseña", "confirmPasswordPlaceholder": "Repetir contraseña",
"selectOutfit": "Selecciona tu atuendo", "selectOutfit": "Selecciona tu atuendo",
"termsAccept": "Soy mayor de 18 años y acepto los términos y reglas de {hotel}.", "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.", "termsError": "Debes aceptar los términos y reglas para registrarte.",
"usernameError": "El usuario es obligatorio.", "usernameError": "El usuario es obligatorio.",
"emailError": "Se requiere un correo electrónico válido.", "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.", "confirmPasswordError": "Las contraseñas no coinciden.",
"termsRequired": "Debes aceptar los términos y reglas.", "termsRequired": "Debes aceptar los términos y reglas.",
"usernameRequired": "El usuario es obligatorio.", "usernameRequired": "El usuario es obligatorio.",
@@ -847,14 +851,39 @@
"alreadyHaveAccountLink": "Iniciar sesión", "alreadyHaveAccountLink": "Iniciar sesión",
"whoIsOnline": "Quién está en línea", "whoIsOnline": "Quién está en línea",
"usersOnline": "{count} en línea", "usersOnline": "{count} en línea",
"accepted": "Accepted & agreed", "accepted": "Aceptado y de acuerdo",
"showPassword": "Show", "showPassword": "Mostrar",
"hidePassword": "Hide", "hidePassword": "Ocultar",
"accountDetails": "Account details", "accountDetails": "Datos de la cuenta",
"credentials": "Credentials & security", "credentials": "Credenciales y seguridad",
"newestCitizens": "Newest citizens", "newestCitizens": "Ciudadanos más recientes",
"ageVerified": "Tengo 18+ y acepto el requisito de edad.", "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": { "forgot": {
"title": "Restablecer contraseña", "title": "Restablecer contraseña",
@@ -868,9 +897,11 @@
"reset": { "reset": {
"title": "Establecer una nueva contraseña", "title": "Establecer una nueva contraseña",
"subtitle": "Elige una contraseña segura que no uses en otros sitios.", "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", "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": { "verify": {
"verifiedTitle": "Todo está listo", "verifiedTitle": "Todo está listo",
+94 -63
View File
@@ -6067,69 +6067,98 @@
"rateLimit": "Too many attempts. Please wait before trying again." "rateLimit": "Too many attempts. Please wait before trying again."
}, },
"login": { "login": {
"title": "Sign in", "title": "Kirjaudu sisään",
"subtitle": "Welcome back — log in to enter the hotel.", "subtitle": "Kirjaudu sisään jatkaaksesi seuraavaan hotelliin.",
"subtitle2fa": "Enter the 6-digit code from your authenticator.", "subtitle2fa": "Syötä 6-numeroinen koodi tunnistussovelluksestasi.",
"welcomeBack": "Welcome back", "welcomeBack": "Tervetuloa takaisin",
"welcomeBackSub": "Sign in to continue to {hotelName}", "welcomeBackSub": "Kirjaudu sisään liittyäksesi hotelliin {hotelName}",
"usernamePlaceholder": "Username", "usernamePlaceholder": "Käyttäjätunnus",
"passwordPlaceholder": "Password", "passwordPlaceholder": "Salasana",
"codePlaceholder": "2FA code", "codePlaceholder": "Syötä 2FA-koodisi",
"pleaseWait": "Please wait…", "pleaseWait": "Odota hetki...",
"verify": "Verify", "verify": "Varmenna",
"signIn": "Sign in", "signIn": "Kirjaudu sisään",
"or": "or", "or": "tai",
"noAccount": "No account?", "noAccount": "Nie vielä tiliä?",
"createOne": "Create one", "createOne": "Luo tili",
"forgotPassword": "Forgot password?", "forgotPassword": "Unohditko salasanasi?",
"errorInvalidCredentials": "Invalid username or password", "errorInvalidCredentials": "Väärä käyttäjätunnus tai salasana",
"errorInvalid2fa": "Invalid 2FA code", "errorInvalid2fa": "Virheellinen 2FA-koodi",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Vahvista sähköpostiosoitteesi ennen kirjautumista.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "Captcha-varmennus epäonnistui. Yritä uudelleen.",
"whoIsOnline": "Who's online", "whoIsOnline": "Ketkä ovat paikalla",
"newestCitizens": "Newest citizens", "newestCitizens": "Uusimmat asukkaat",
"usersOnline": "{count} online" "usersOnline": "{count} paikalla",
"username": "Käyttäjätunnus",
"password": "Salasana",
"showPassword": "Näytä",
"hidePassword": "Piilota"
}, },
"register": { "register": {
"title": "Create account", "title": "Luo tili",
"subtitle": "Join the hotel — it only takes a moment.", "subtitle": "Liity hotelliin — se kestää vain hetken.",
"username": "Username", "username": "Käyttäjätunnus",
"email": "Email", "email": "Sähköposti",
"password": "Password", "password": "Salasana",
"confirmPassword": "Repeat password", "confirmPassword": "Toista salasana",
"usernamePlaceholder": "Username", "usernamePlaceholder": "Käyttäjätunnus",
"emailPlaceholder": "Email", "emailPlaceholder": "Sähköposti",
"passwordPlaceholder": "Password (min 8 chars)", "passwordPlaceholder": "Salasana (vähintään 12 merkkiä)",
"confirmPasswordPlaceholder": "Repeat password", "confirmPasswordPlaceholder": "Toista salasana",
"selectOutfit": "Select your outfit", "selectOutfit": "Valitse asustesi",
"termsAccept": "I am 18+ and accept the {hotel} terms & rules.", "termsAccept": "Olen 18-vuotias ja hyväksyn {hotel} säännöt.",
"accepted": "Accepted & agreed", "accepted": "Hyväksytty ja hyväksyn",
"showPassword": "Show", "showPassword": "Näytä",
"hidePassword": "Hide", "hidePassword": "Piilota",
"accountDetails": "Account details", "accountDetails": "Tilitiedot",
"credentials": "Credentials & security", "credentials": "Kirjautumistiedot ja turvallisuus",
"createAccount": "Create account", "createAccount": "Luo tili",
"creatingAccount": "Creating account...", "creatingAccount": "Luodaan tiliä...",
"redirecting": "Redirecting to your account...", "redirecting": "Siirrytään tilillesi...",
"alreadyHaveAccount": "Already have an account? Login!", "alreadyHaveAccount": "Onko sinulla jo tili? Kirjaudu sisään!",
"alreadyHaveAccountPre": "Already have an account?", "alreadyHaveAccountPre": "Onko sinulla jo tili?",
"alreadyHaveAccountLink": "Sign in", "alreadyHaveAccountLink": "Kirjaudu sisään",
"register": "Register", "register": "Rekisteröidy",
"whoIsOnline": "Who's online", "whoIsOnline": "Ketkä ovat paikalla",
"usersOnline": "{count} online", "usersOnline": "{count} paikalla",
"termsError": "You must accept the terms & rules to register.", "termsError": "Sinun on hyväksyttävä säännöt rekisteröityäksesi.",
"usernameError": "Username is required.", "usernameError": "Käyttäjätunnus on pakollinen.",
"emailError": "Valid email is required.", "emailError": "Kelvollinen sähköpostiosoite on pakollinen.",
"passwordError": "Password must be at least 6 characters.", "passwordError": "Salasanassa on oltava vähintään 12 merkkiä",
"confirmPasswordError": "Passwords do not match.", "confirmPasswordError": "Salasanat eivät täsmää.",
"termsRequired": "You must accept the terms & rules.", "termsRequired": "Sinun on hyväksyttävä säännöt.",
"usernameRequired": "Username is required.", "usernameRequired": "Käyttäjätunnus on pakollinen.",
"emailRequired": "Email is required.", "emailRequired": "Sähköpostiosoite on pakollinen.",
"passwordRequired": "Password is required.", "passwordRequired": "Salasana on pakollinen.",
"passwordsDontMatch": "Passwords do not match.", "passwordsDontMatch": "Salasanat eivät täsmää.",
"newestCitizens": "Newest citizens", "newestCitizens": "Uusimmat asukkaat",
"ageVerified": "Olen 18+ ja hyväksyn ikävaatimuksen.", "ageVerified": "Olen 18-vuotias ja hyväksyn ikärajan.",
"invitedBy": "Kutsuja: {username}" "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": { "forgot": {
"title": "Reset password", "title": "Reset password",
@@ -6143,9 +6172,11 @@
"reset": { "reset": {
"title": "Set a new password", "title": "Set a new password",
"subtitle": "Choose a strong password you don't use elsewhere.", "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", "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": { "verify": {
"verifiedTitle": "You're all set", "verifiedTitle": "You're all set",
+48 -17
View File
@@ -806,14 +806,18 @@
"createOne": "Créer un compte", "createOne": "Créer un compte",
"forgotPassword": "Mot de passe oublié ?", "forgotPassword": "Mot de passe oublié ?",
"errorInvalidCredentials": "Nom d'utilisateur ou mot de passe invalide", "errorInvalidCredentials": "Nom d'utilisateur ou mot de passe invalide",
"errorInvalid2fa": "Code A2F invalide", "errorInvalid2fa": "Code 2FA invalide",
"welcomeBack": "Bon retour", "welcomeBack": "Bon retour",
"welcomeBackSub": "Connecte-toi pour continuer vers {hotelName}", "welcomeBackSub": "Connecte-toi pour continuer vers {hotelName}",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Veuillez vérifier votre e-mail avant de vous connecter.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "La vérification captcha a échoué. Réessayez.",
"whoIsOnline": "Who's online", "whoIsOnline": "Qui est en ligne",
"newestCitizens": "Newest citizens", "newestCitizens": "Nouveaux citoyens",
"usersOnline": "{count} online" "usersOnline": "{count} en ligne",
"username": "Nom d'utilisateur",
"password": "Mot de passe",
"showPassword": "Afficher",
"hidePassword": "Masquer"
}, },
"register": { "register": {
"title": "Créer un compte", "title": "Créer un compte",
@@ -824,7 +828,7 @@
"confirmPassword": "Répéter le mot de passe", "confirmPassword": "Répéter le mot de passe",
"usernamePlaceholder": "Nom d'utilisateur", "usernamePlaceholder": "Nom d'utilisateur",
"emailPlaceholder": "E-mail", "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", "confirmPasswordPlaceholder": "Répéter le mot de passe",
"selectOutfit": "Sélectionnez votre tenue", "selectOutfit": "Sélectionnez votre tenue",
"termsAccept": "J'ai 18 ans ou plus et j'accepte les conditions et règles de {hotel}.", "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.", "termsError": "Vous devez accepter les conditions et règles pour vous inscrire.",
"usernameError": "Le nom d'utilisateur est requis.", "usernameError": "Le nom d'utilisateur est requis.",
"emailError": "Un e-mail valide 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.", "confirmPasswordError": "Les mots de passe ne correspondent pas.",
"termsRequired": "Vous devez accepter les conditions et règles.", "termsRequired": "Vous devez accepter les conditions et règles.",
"usernameRequired": "Le nom d'utilisateur est requis.", "usernameRequired": "Le nom d'utilisateur est requis.",
@@ -847,14 +851,39 @@
"alreadyHaveAccountLink": "Se connecter", "alreadyHaveAccountLink": "Se connecter",
"whoIsOnline": "Qui est en ligne", "whoIsOnline": "Qui est en ligne",
"usersOnline": "{count} en ligne", "usersOnline": "{count} en ligne",
"accepted": "Accepted & agreed", "accepted": "Accepté et d'accord",
"showPassword": "Show", "showPassword": "Afficher",
"hidePassword": "Hide", "hidePassword": "Masquer",
"accountDetails": "Account details", "accountDetails": "Informations du compte",
"credentials": "Credentials & security", "credentials": "Identifiants et sécurité",
"newestCitizens": "Newest citizens", "newestCitizens": "Nouveaux citoyens",
"ageVerified": "J'ai 18+ et j'accepte la condition d'âge.", "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": { "forgot": {
"title": "Réinitialiser le mot de passe", "title": "Réinitialiser le mot de passe",
@@ -868,9 +897,11 @@
"reset": { "reset": {
"title": "Définir un nouveau mot de passe", "title": "Définir un nouveau mot de passe",
"subtitle": "Choisissez un mot de passe fort que vous n'utilisez pas ailleurs.", "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", "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": { "verify": {
"verifiedTitle": "Tout est prêt", "verifiedTitle": "Tout est prêt",
+50 -19
View File
@@ -836,14 +836,18 @@
"createOne": "Stvorite jedan", "createOne": "Stvorite jedan",
"forgotPassword": "Zaboravili ste lozinku?", "forgotPassword": "Zaboravili ste lozinku?",
"errorInvalidCredentials": "Nevažeće korisničko ime ili lozinka", "errorInvalidCredentials": "Nevažeće korisničko ime ili lozinka",
"errorInvalid2fa": "Nevažeći 2FA kod", "errorInvalid2fa": "Neispravan 2FA kod",
"welcomeBack": "Dobrodošao natrag", "welcomeBack": "Dobrodošao natrag",
"welcomeBackSub": "Prijavi se za nastavak u {hotelName}", "welcomeBackSub": "Prijavi se za nastavak u {hotelName}",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Potvrdite svoju e-poštu prije prijave.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "Captcha verifikacija nije uspjela. Pokušajte ponovno.",
"whoIsOnline": "Who's online", "whoIsOnline": "Tko je na mreži",
"newestCitizens": "Newest citizens", "newestCitizens": "Najnoviji građani",
"usersOnline": "{count} online" "usersOnline": "{count} na mreži",
"username": "Korisničko ime",
"password": "Lozinka",
"showPassword": "Prikaži",
"hidePassword": "Sakrij"
}, },
"register": { "register": {
"title": "Napravi račun", "title": "Napravi račun",
@@ -854,7 +858,7 @@
"confirmPassword": "Ponovi lozinku", "confirmPassword": "Ponovi lozinku",
"usernamePlaceholder": "Korisničko ime", "usernamePlaceholder": "Korisničko ime",
"emailPlaceholder": "E-mail", "emailPlaceholder": "E-mail",
"passwordPlaceholder": "Lozinka (najmanje 6 znakova)", "passwordPlaceholder": "Lozinka (najmanje 12 znakova)",
"confirmPasswordPlaceholder": "Ponovi lozinku", "confirmPasswordPlaceholder": "Ponovi lozinku",
"selectOutfit": "Odaberite svoju odjeću", "selectOutfit": "Odaberite svoju odjeću",
"termsAccept": "Imam 18+ godina i prihvaćam odredbe i pravila hotela {hotel}.", "termsAccept": "Imam 18+ godina i prihvaćam odredbe i pravila hotela {hotel}.",
@@ -866,7 +870,7 @@
"termsError": "Za registraciju morate prihvatiti uvjete i pravila.", "termsError": "Za registraciju morate prihvatiti uvjete i pravila.",
"usernameError": "Korisničko ime je potrebno.", "usernameError": "Korisničko ime je potrebno.",
"emailError": "Potrebna je valjana adresa e-pošte.", "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.", "confirmPasswordError": "Lozinke se ne podudaraju.",
"termsRequired": "Morate prihvatiti uvjete i pravila.", "termsRequired": "Morate prihvatiti uvjete i pravila.",
"usernameRequired": "Korisničko ime je potrebno.", "usernameRequired": "Korisničko ime je potrebno.",
@@ -875,16 +879,41 @@
"passwordsDontMatch": "Lozinke se ne podudaraju.", "passwordsDontMatch": "Lozinke se ne podudaraju.",
"alreadyHaveAccountPre": "Već imaš račun?", "alreadyHaveAccountPre": "Već imaš račun?",
"alreadyHaveAccountLink": "Prijavi se", "alreadyHaveAccountLink": "Prijavi se",
"whoIsOnline": "Tko je online", "whoIsOnline": "Tko je na mreži",
"usersOnline": "{count} online", "usersOnline": "{count} na mreži",
"accepted": "Accepted & agreed", "accepted": "Prihvaćeno i suglasan sam",
"showPassword": "Show", "showPassword": "Prikaži",
"hidePassword": "Hide", "hidePassword": "Sakrij",
"accountDetails": "Account details", "accountDetails": "Podaci računa",
"credentials": "Credentials & security", "credentials": "Podaci za prijavu i sigurnost",
"newestCitizens": "Newest citizens", "newestCitizens": "Najnoviji građani",
"ageVerified": "Imam 18+ i prihvaćam uvjet dobi.", "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": { "forgot": {
"title": "Resetiraj lozinku", "title": "Resetiraj lozinku",
@@ -898,9 +927,11 @@
"reset": { "reset": {
"title": "Postavite novu lozinku", "title": "Postavite novu lozinku",
"subtitle": "Odaberite jaku lozinku koju ne koristite drugdje.", "subtitle": "Odaberite jaku lozinku koju ne koristite drugdje.",
"passwordPlaceholder": "Nova lozinka (najmanje 6 znakova)", "passwordPlaceholder": "Nova lozinka (najmanje 12 znakova)",
"resetPassword": "Resetiraj lozinku", "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": { "verify": {
"verifiedTitle": "Sve je spremno", "verifiedTitle": "Sve je spremno",
+48 -17
View File
@@ -836,14 +836,18 @@
"createOne": "Hozzon létre egyet", "createOne": "Hozzon létre egyet",
"forgotPassword": "Elfelejtetted a jelszavad?", "forgotPassword": "Elfelejtetted a jelszavad?",
"errorInvalidCredentials": "Érvénytelen felhasználónév vagy jelszó", "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", "welcomeBack": "Üdvözöllek újra",
"welcomeBackSub": "Jelentkezz be a {hotelName} folytatáshoz", "welcomeBackSub": "Jelentkezz be a {hotelName} folytatáshoz",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Kérlek, erősítsd meg az e-mail-címedet bejelentkezés előtt.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "A captcha-ellenőrzés sikertelen. Próbáld újra.",
"whoIsOnline": "Who's online", "whoIsOnline": "Ki van online",
"newestCitizens": "Newest citizens", "newestCitizens": "Legújabb lakosok",
"usersOnline": "{count} online" "usersOnline": "{count} online",
"username": "Felhasználónév",
"password": "Jelszó",
"showPassword": "Megjelenítés",
"hidePassword": "Elrejtés"
}, },
"register": { "register": {
"title": "Hozzon létre fiókot", "title": "Hozzon létre fiókot",
@@ -854,7 +858,7 @@
"confirmPassword": "Ismételje meg a jelszót", "confirmPassword": "Ismételje meg a jelszót",
"usernamePlaceholder": "Felhasználónév", "usernamePlaceholder": "Felhasználónév",
"emailPlaceholder": "E-mail", "emailPlaceholder": "E-mail",
"passwordPlaceholder": "Jelszó (minimum 6 karakter)", "passwordPlaceholder": "Jelszó (minimum 12 karakter)",
"confirmPasswordPlaceholder": "Ismételje meg a jelszót", "confirmPasswordPlaceholder": "Ismételje meg a jelszót",
"selectOutfit": "Válassza ki az öltözéké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.", "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.", "termsError": "A regisztrációhoz el kell fogadnia a feltételeket és szabályokat.",
"usernameError": "Felhasználónév megadása kötelező.", "usernameError": "Felhasználónév megadása kötelező.",
"emailError": "Érvényes e-mail-cím szükséges.", "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.", "confirmPasswordError": "A jelszavak nem egyeznek.",
"termsRequired": "El kell fogadnia a feltételeket és szabályokat.", "termsRequired": "El kell fogadnia a feltételeket és szabályokat.",
"usernameRequired": "Felhasználónév megadása kötelező.", "usernameRequired": "Felhasználónév megadása kötelező.",
@@ -877,14 +881,39 @@
"alreadyHaveAccountLink": "Bejelentkezés", "alreadyHaveAccountLink": "Bejelentkezés",
"whoIsOnline": "Ki van online", "whoIsOnline": "Ki van online",
"usersOnline": "{count} online", "usersOnline": "{count} online",
"accepted": "Accepted & agreed", "accepted": "Elfogadva és egyetértek",
"showPassword": "Show", "showPassword": "Megjelenítés",
"hidePassword": "Hide", "hidePassword": "Elrejtés",
"accountDetails": "Account details", "accountDetails": "Fiókadatok",
"credentials": "Credentials & security", "credentials": "Bejelentkezési adatok és biztonság",
"newestCitizens": "Newest citizens", "newestCitizens": "Legújabb lakosok",
"ageVerified": "18+ vagyok és elfogadom a korhatárra vonatkozó követelményt.", "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": { "forgot": {
"title": "Jelszó visszaállítása", "title": "Jelszó visszaállítása",
@@ -898,9 +927,11 @@
"reset": { "reset": {
"title": "Állítson be új jelszót", "title": "Állítson be új jelszót",
"subtitle": "Válasszon erős jelszót, amelyet máshol nem használ.", "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", "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": { "verify": {
"verifiedTitle": "Minden készen áll", "verifiedTitle": "Minden készen áll",
+42 -11
View File
@@ -979,13 +979,17 @@
"forgotPassword": "Password dimenticata?", "forgotPassword": "Password dimenticata?",
"errorInvalidCredentials": "Nome utente o password non validi", "errorInvalidCredentials": "Nome utente o password non validi",
"errorInvalid2fa": "Codice 2FA non valido", "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.", "errorCaptcha": "Verifica captcha non riuscita. Riprova.",
"welcomeBack": "Bentornato", "welcomeBack": "Bentornato",
"welcomeBackSub": "Accedi per continuare su {hotelName}", "welcomeBackSub": "Accedi per continuare su {hotelName}",
"whoIsOnline": "Chi è online", "whoIsOnline": "Chi è online",
"newestCitizens": "Nuovi cittadini", "newestCitizens": "Cittadini più recenti",
"usersOnline": "{count} online" "usersOnline": "{count} online",
"username": "Nome utente",
"password": "Password",
"showPassword": "Mostra",
"hidePassword": "Nascondi"
}, },
"register": { "register": {
"title": "Crea un account", "title": "Crea un account",
@@ -996,7 +1000,7 @@
"confirmPassword": "Ripeti la password", "confirmPassword": "Ripeti la password",
"usernamePlaceholder": "Nome utente", "usernamePlaceholder": "Nome utente",
"emailPlaceholder": "Email", "emailPlaceholder": "Email",
"passwordPlaceholder": "Password (min 6 caratteri)", "passwordPlaceholder": "Password (min 12 caratteri)",
"confirmPasswordPlaceholder": "Ripeti la password", "confirmPasswordPlaceholder": "Ripeti la password",
"selectOutfit": "Scegli il tuo outfit", "selectOutfit": "Scegli il tuo outfit",
"termsAccept": "Ho 18+ anni e accetto i termini e regole di {hotel}.", "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.", "termsError": "Devi accettare i termini e regole per registrarti.",
"usernameError": "Il nome utente è obbligatorio.", "usernameError": "Il nome utente è obbligatorio.",
"emailError": "Email valida obbligatoria.", "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.", "confirmPasswordError": "Le password non coincidono.",
"termsRequired": "Devi accettare i termini e le regole.", "termsRequired": "Devi accettare i termini e le regole.",
"usernameRequired": "Il nome utente è obbligatorio.", "usernameRequired": "Il nome utente è obbligatorio.",
@@ -1018,15 +1022,40 @@
"alreadyHaveAccountPre": "Hai già un account?", "alreadyHaveAccountPre": "Hai già un account?",
"alreadyHaveAccountLink": "Accedi", "alreadyHaveAccountLink": "Accedi",
"whoIsOnline": "Chi è online", "whoIsOnline": "Chi è online",
"newestCitizens": "Nuovi cittadini", "newestCitizens": "Cittadini più recenti",
"usersOnline": "{count} online", "usersOnline": "{count} online",
"accepted": "Accettato e confermato", "accepted": "Accettato e d'accordo",
"showPassword": "Mostra", "showPassword": "Mostra",
"hidePassword": "Nascondi", "hidePassword": "Nascondi",
"accountDetails": "Dettagli dell’account", "accountDetails": "Dati account",
"credentials": "Credenziali e sicurezza", "credentials": "Credenziali e sicurezza",
"ageVerified": "Ho 18+ e accetto il requisito di età.", "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": { "forgot": {
"title": "Reimposta password", "title": "Reimposta password",
@@ -1040,9 +1069,11 @@
"reset": { "reset": {
"title": "Imposta una nuova password", "title": "Imposta una nuova password",
"subtitle": "Scegli una password robusta che non usi altrove.", "subtitle": "Scegli una password robusta che non usi altrove.",
"passwordPlaceholder": "Nuova password (min 6 caratteri)", "passwordPlaceholder": "Nuova password (min 12 caratteri)",
"resetPassword": "Reimposta password", "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": { "verify": {
"verifiedTitle": "È tutto pronto", "verifiedTitle": "È tutto pronto",
+94 -63
View File
@@ -6067,69 +6067,98 @@
"rateLimit": "Too many attempts. Please wait before trying again." "rateLimit": "Too many attempts. Please wait before trying again."
}, },
"login": { "login": {
"title": "Sign in", "title": "ログイン",
"subtitle": "Welcome back — log in to enter the hotel.", "subtitle": "ログインして次のホテルへ進みましょう。",
"subtitle2fa": "Enter the 6-digit code from your authenticator.", "subtitle2fa": "認証アプリの6桁のコードを入力してください。",
"welcomeBack": "Welcome back", "welcomeBack": "おかえりなさい",
"welcomeBackSub": "Sign in to continue to {hotelName}", "welcomeBackSub": "ログインして {hotelName} に参加しましょう",
"usernamePlaceholder": "Username", "usernamePlaceholder": "ユーザー名",
"passwordPlaceholder": "Password", "passwordPlaceholder": "パスワード",
"codePlaceholder": "2FA code", "codePlaceholder": "2FAコードを入力",
"pleaseWait": "Please wait…", "pleaseWait": "お待ちください...",
"verify": "Verify", "verify": "確認",
"signIn": "Sign in", "signIn": "ログイン",
"or": "or", "or": "または",
"noAccount": "No account?", "noAccount": "アカウントをお持ちでない方",
"createOne": "Create one", "createOne": "アカウントを作成",
"forgotPassword": "Forgot password?", "forgotPassword": "パスワードをお忘れですか?",
"errorInvalidCredentials": "Invalid username or password", "errorInvalidCredentials": "ユーザー名またはパスワードが違います",
"errorInvalid2fa": "Invalid 2FA code", "errorInvalid2fa": "2FAコードが正しくありません",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "ログインする前にメールアドレスを認証してください。",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "認証コードの検証に失敗しました。再度お試しください。",
"whoIsOnline": "Who's online", "whoIsOnline": "オンラインの人",
"newestCitizens": "Newest citizens", "newestCitizens": "最新の住民",
"usersOnline": "{count} online" "usersOnline": "{count} 人がオンライン",
"username": "ユーザー名",
"password": "パスワード",
"showPassword": "表示",
"hidePassword": "非表示"
}, },
"register": { "register": {
"title": "Create account", "title": "アカウント作成",
"subtitle": "Join the hotel — it only takes a moment.", "subtitle": "ホテルに参加しましょう — すぐに終わります。",
"username": "Username", "username": "ユーザー名",
"email": "Email", "email": "メールアドレス",
"password": "Password", "password": "パスワード",
"confirmPassword": "Repeat password", "confirmPassword": "パスワードの確認",
"usernamePlaceholder": "Username", "usernamePlaceholder": "ユーザー名",
"emailPlaceholder": "Email", "emailPlaceholder": "メールアドレス",
"passwordPlaceholder": "Password (min 8 chars)", "passwordPlaceholder": "パスワード(12文字以上)",
"confirmPasswordPlaceholder": "Repeat password", "confirmPasswordPlaceholder": "パスワードの確認",
"selectOutfit": "Select your outfit", "selectOutfit": "アバターを選んでスタイルを設定",
"termsAccept": "I am 18+ and accept the {hotel} terms & rules.", "termsAccept": "18歳以上であり、{hotel} の規約に同意します。",
"accepted": "Accepted & agreed", "accepted": "承認して同意しました",
"showPassword": "Show", "showPassword": "表示",
"hidePassword": "Hide", "hidePassword": "非表示",
"accountDetails": "Account details", "accountDetails": "アカウント情報",
"credentials": "Credentials & security", "credentials": "ログイン情報とセキュリティ",
"createAccount": "Create account", "createAccount": "アカウントを作成",
"creatingAccount": "Creating account...", "creatingAccount": "アカウントを作成中...",
"redirecting": "Redirecting to your account...", "redirecting": "アカウント画面へ移動しています...",
"alreadyHaveAccount": "Already have an account? Login!", "alreadyHaveAccount": "すでにアカウントをお持ちですか?ログインしましょう!",
"alreadyHaveAccountPre": "Already have an account?", "alreadyHaveAccountPre": "すでにアカウントをお持ちですか?",
"alreadyHaveAccountLink": "Sign in", "alreadyHaveAccountLink": "ログイン",
"register": "Register", "register": "登録",
"whoIsOnline": "Who's online", "whoIsOnline": "オンラインの人",
"usersOnline": "{count} online", "usersOnline": "{count} 人がオンライン",
"termsError": "You must accept the terms & rules to register.", "termsError": "登録するには規約に同意する必要があります。",
"usernameError": "Username is required.", "usernameError": "ユーザー名は必須です。",
"emailError": "Valid email is required.", "emailError": "有効なメールアドレスが必要です。",
"passwordError": "Password must be at least 6 characters.", "passwordError": "パスワードは12文字以上にしてください",
"confirmPasswordError": "Passwords do not match.", "confirmPasswordError": "パスワードが一致しません。",
"termsRequired": "You must accept the terms & rules.", "termsRequired": "規約に同意する必要があります。",
"usernameRequired": "Username is required.", "usernameRequired": "ユーザー名は必須です。",
"emailRequired": "Email is required.", "emailRequired": "メールアドレスは必須です。",
"passwordRequired": "Password is required.", "passwordRequired": "パスワードは必須です。",
"passwordsDontMatch": "Passwords do not match.", "passwordsDontMatch": "パスワードが一致しません。",
"newestCitizens": "Newest citizens", "newestCitizens": "最新の住民",
"ageVerified": "18歳以上です。年齢要件に同意します。", "ageVerified": "18歳以上であり、年齢要件に同意します。",
"invitedBy": "{username} さんに招待されました" "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": { "forgot": {
"title": "Reset password", "title": "Reset password",
@@ -6143,9 +6172,11 @@
"reset": { "reset": {
"title": "Set a new password", "title": "Set a new password",
"subtitle": "Choose a strong password you don't use elsewhere.", "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", "resetPassword": "Reset password",
"backToLogin": "Back to login" "backToLogin": "Back to login",
"passwordMinLength": "パスワードは12文字以上にしてください",
"tooManyAttempts": "試行回数が多すぎます — 後で再度お試しください"
}, },
"verify": { "verify": {
"verifiedTitle": "You're all set", "verifiedTitle": "You're all set",
+45 -14
View File
@@ -1013,9 +1013,13 @@
"errorCaptcha": "Captcha-verificatie mislukt. Probeer het opnieuw.", "errorCaptcha": "Captcha-verificatie mislukt. Probeer het opnieuw.",
"welcomeBack": "Welkom terug", "welcomeBack": "Welkom terug",
"welcomeBackSub": "Log in om verder te gaan naar {hotelName}", "welcomeBackSub": "Log in om verder te gaan naar {hotelName}",
"whoIsOnline": "Who's online", "whoIsOnline": "Wie is online",
"newestCitizens": "Newest citizens", "newestCitizens": "Nieuwste burgers",
"usersOnline": "{count} online" "usersOnline": "{count} online",
"showPassword": "Toon",
"hidePassword": "Verberg",
"username": "Gebruikersnaam",
"password": "Wachtwoord"
}, },
"register": { "register": {
"title": "Account aanmaken", "title": "Account aanmaken",
@@ -1026,7 +1030,7 @@
"confirmPassword": "Wachtwoord herhalen", "confirmPassword": "Wachtwoord herhalen",
"usernamePlaceholder": "Gebruikersnaam", "usernamePlaceholder": "Gebruikersnaam",
"emailPlaceholder": "E-mail", "emailPlaceholder": "E-mail",
"passwordPlaceholder": "Wachtwoord (min 6 tekens)", "passwordPlaceholder": "Wachtwoord (min 12 tekens)",
"confirmPasswordPlaceholder": "Wachtwoord herhalen", "confirmPasswordPlaceholder": "Wachtwoord herhalen",
"selectOutfit": "Kies je outfit", "selectOutfit": "Kies je outfit",
"termsAccept": "Ik ben 18+ en accepteer de {hotel} voorwaarden & regels.", "termsAccept": "Ik ben 18+ en accepteer de {hotel} voorwaarden & regels.",
@@ -1042,21 +1046,46 @@
"termsError": "Je moet de voorwaarden & regels accepteren om te registreren.", "termsError": "Je moet de voorwaarden & regels accepteren om te registreren.",
"usernameError": "Gebruikersnaam is verplicht.", "usernameError": "Gebruikersnaam is verplicht.",
"emailError": "Een geldig e-mailadres 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.", "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.", "ageVerified": "Ik ben 18+ en ga akkoord met de leeftijdsvereiste.",
"usernameRequired": "Gebruikersnaam is verplicht.", "usernameRequired": "Gebruikersnaam is verplicht.",
"emailRequired": "E-mail is verplicht.", "emailRequired": "E-mail is verplicht.",
"passwordRequired": "Wachtwoord is verplicht.", "passwordRequired": "Wachtwoord is verplicht.",
"passwordsDontMatch": "Wachtwoorden komen niet overeen.", "passwordsDontMatch": "Wachtwoorden komen niet overeen.",
"invitedBy": "Uitgenodigd door {username}", "invitedBy": "Uitgenodigd door {username}",
"accepted": "Accepted & agreed", "accepted": "Geaccepteerd & akkoord",
"showPassword": "Show", "showPassword": "Toon",
"hidePassword": "Hide", "hidePassword": "Verberg",
"accountDetails": "Account details", "accountDetails": "Accountgegevens",
"credentials": "Credentials & security", "credentials": "Gegevens & beveiliging",
"newestCitizens": "Newest citizens" "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": { "forgot": {
"title": "Wachtwoord resetten", "title": "Wachtwoord resetten",
@@ -1070,9 +1099,11 @@
"reset": { "reset": {
"title": "Nieuw wachtwoord instellen", "title": "Nieuw wachtwoord instellen",
"subtitle": "Kies een sterk wachtwoord dat je nergens anders gebruikt.", "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", "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": { "verify": {
"verifiedTitle": "Je bent helemaal klaar", "verifiedTitle": "Je bent helemaal klaar",
+49 -18
View File
@@ -839,11 +839,15 @@
"errorInvalid2fa": "Ugyldig 2FA-kode", "errorInvalid2fa": "Ugyldig 2FA-kode",
"welcomeBack": "Velkommen tilbake", "welcomeBack": "Velkommen tilbake",
"welcomeBackSub": "Logg inn for å fortsette til {hotelName}", "welcomeBackSub": "Logg inn for å fortsette til {hotelName}",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Bekreft e-postadressen din før du logger inn.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "Captcha-verifisering mislyktes. Prøv igjen.",
"whoIsOnline": "Who's online", "whoIsOnline": "Hvem er påloggede",
"newestCitizens": "Newest citizens", "newestCitizens": "Nyeste innbyggere",
"usersOnline": "{count} online" "usersOnline": "{count} påloggede",
"username": "Brukernavn",
"password": "Passord",
"showPassword": "Vis",
"hidePassword": "Skjul"
}, },
"register": { "register": {
"title": "Opprett konto", "title": "Opprett konto",
@@ -854,7 +858,7 @@
"confirmPassword": "Gjenta passord", "confirmPassword": "Gjenta passord",
"usernamePlaceholder": "Brukernavn", "usernamePlaceholder": "Brukernavn",
"emailPlaceholder": "E-post", "emailPlaceholder": "E-post",
"passwordPlaceholder": "Passord (minst 6 tegn)", "passwordPlaceholder": "Passord (minst 12 tegn)",
"confirmPasswordPlaceholder": "Gjenta passord", "confirmPasswordPlaceholder": "Gjenta passord",
"selectOutfit": "Velg antrekket ditt", "selectOutfit": "Velg antrekket ditt",
"termsAccept": "Jeg er 18+ og godtar vilkårene og reglene for {hotel}.", "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.", "termsError": "Du må godta vilkårene og reglene for å registrere deg.",
"usernameError": "Brukernavn er påkrevd.", "usernameError": "Brukernavn er påkrevd.",
"emailError": "Gyldig e-post er nødvendig.", "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.", "confirmPasswordError": "Passord stemmer ikke.",
"termsRequired": "Du må godta vilkårene og reglene.", "termsRequired": "Du må godta vilkårene og reglene.",
"usernameRequired": "Brukernavn er påkrevd.", "usernameRequired": "Brukernavn er påkrevd.",
@@ -875,16 +879,41 @@
"passwordsDontMatch": "Passord stemmer ikke.", "passwordsDontMatch": "Passord stemmer ikke.",
"alreadyHaveAccountPre": "Har du allerede en konto?", "alreadyHaveAccountPre": "Har du allerede en konto?",
"alreadyHaveAccountLink": "Logg inn", "alreadyHaveAccountLink": "Logg inn",
"whoIsOnline": "Hvem er online", "whoIsOnline": "Hvem er påloggede",
"usersOnline": "{count} online", "usersOnline": "{count} påloggede",
"accepted": "Accepted & agreed", "accepted": "Akseptert og enig",
"showPassword": "Show", "showPassword": "Vis",
"hidePassword": "Hide", "hidePassword": "Skjul",
"accountDetails": "Account details", "accountDetails": "Kontoopplysninger",
"credentials": "Credentials & security", "credentials": "Innloggingsdetaljer og sikkerhet",
"newestCitizens": "Newest citizens", "newestCitizens": "Nyeste innbyggere",
"ageVerified": "Jeg er 18+ og godtar alderskravet.", "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": { "forgot": {
"title": "Tilbakestill passord", "title": "Tilbakestill passord",
@@ -898,9 +927,11 @@
"reset": { "reset": {
"title": "Angi et nytt passord", "title": "Angi et nytt passord",
"subtitle": "Velg et sterkt passord du ikke bruker andre steder.", "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", "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": { "verify": {
"verifiedTitle": "Du er klar", "verifiedTitle": "Du er klar",
+47 -16
View File
@@ -839,11 +839,15 @@
"errorInvalid2fa": "Nieprawidłowy kod 2FA", "errorInvalid2fa": "Nieprawidłowy kod 2FA",
"welcomeBack": "Witaj z powrotem", "welcomeBack": "Witaj z powrotem",
"welcomeBackSub": "Zaloguj się, aby kontynuować w {hotelName}", "welcomeBackSub": "Zaloguj się, aby kontynuować w {hotelName}",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Potwierdź swój e-mail przed zalogowaniem.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "Weryfikacja captcha nie powiodła się. Spróbuj ponownie.",
"whoIsOnline": "Who's online", "whoIsOnline": "Kto jest online",
"newestCitizens": "Newest citizens", "newestCitizens": "Najnowsi mieszkańcy",
"usersOnline": "{count} online" "usersOnline": "{count} online",
"username": "Nazwa użytkownika",
"password": "Hasło",
"showPassword": "Pokaż",
"hidePassword": "Ukryj"
}, },
"register": { "register": {
"title": "Utwórz konto", "title": "Utwórz konto",
@@ -854,7 +858,7 @@
"confirmPassword": "Powtórz hasło", "confirmPassword": "Powtórz hasło",
"usernamePlaceholder": "Nazwa użytkownika", "usernamePlaceholder": "Nazwa użytkownika",
"emailPlaceholder": "E-mail", "emailPlaceholder": "E-mail",
"passwordPlaceholder": "Hasło (min. 6 znaków)", "passwordPlaceholder": "Hasło (min. 12 znaków)",
"confirmPasswordPlaceholder": "Powtórz hasło", "confirmPasswordPlaceholder": "Powtórz hasło",
"selectOutfit": "Wybierz swój strój", "selectOutfit": "Wybierz swój strój",
"termsAccept": "Mam ukończone 18 lat i akceptuję warunki i zasady hotelu {hotel}.", "termsAccept": "Mam ukończone 18 lat i akceptuję warunki i zasady hotelu {hotel}.",
@@ -866,7 +870,7 @@
"termsError": "Aby się zarejestrować, musisz zaakceptować regulamin.", "termsError": "Aby się zarejestrować, musisz zaakceptować regulamin.",
"usernameError": "Nazwa użytkownika jest wymagana.", "usernameError": "Nazwa użytkownika jest wymagana.",
"emailError": "Wymagany jest prawidłowy adres e-mail.", "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ą.", "confirmPasswordError": "Hasła nie pasują.",
"termsRequired": "Musisz zaakceptować warunki i zasady.", "termsRequired": "Musisz zaakceptować warunki i zasady.",
"usernameRequired": "Nazwa użytkownika jest wymagana.", "usernameRequired": "Nazwa użytkownika jest wymagana.",
@@ -877,14 +881,39 @@
"alreadyHaveAccountLink": "Zaloguj się", "alreadyHaveAccountLink": "Zaloguj się",
"whoIsOnline": "Kto jest online", "whoIsOnline": "Kto jest online",
"usersOnline": "{count} online", "usersOnline": "{count} online",
"accepted": "Accepted & agreed", "accepted": "Zaakceptowano i zgadzam się",
"showPassword": "Show", "showPassword": "Pokaż",
"hidePassword": "Hide", "hidePassword": "Ukryj",
"accountDetails": "Account details", "accountDetails": "Dane konta",
"credentials": "Credentials & security", "credentials": "Dane logowania i bezpieczeństwo",
"newestCitizens": "Newest citizens", "newestCitizens": "Najnowsi mieszkańcy",
"ageVerified": "Mam 18+ i akceptuję wymóg wieku.", "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": { "forgot": {
"title": "Zresetuj hasło", "title": "Zresetuj hasło",
@@ -898,9 +927,11 @@
"reset": { "reset": {
"title": "Ustaw nowe hasło", "title": "Ustaw nowe hasło",
"subtitle": "Wybierz silne hasło, którego nie używasz gdzie indziej.", "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", "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": { "verify": {
"verifiedTitle": "Wszystko gotowe", "verifiedTitle": "Wszystko gotowe",
+47 -16
View File
@@ -839,11 +839,15 @@
"errorInvalid2fa": "Código 2FA inválido", "errorInvalid2fa": "Código 2FA inválido",
"welcomeBack": "Bem-vindo de volta", "welcomeBack": "Bem-vindo de volta",
"welcomeBackSub": "Entre para continuar em {hotelName}", "welcomeBackSub": "Entre para continuar em {hotelName}",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Verifique seu e-mail antes de entrar.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "A verificação captcha falhou. Tente novamente.",
"whoIsOnline": "Who's online", "whoIsOnline": "Quem está online",
"newestCitizens": "Newest citizens", "newestCitizens": "Cidadãos mais recentes",
"usersOnline": "{count} online" "usersOnline": "{count} online",
"username": "Nome de usuário",
"password": "Senha",
"showPassword": "Mostrar",
"hidePassword": "Ocultar"
}, },
"register": { "register": {
"title": "Criar conta", "title": "Criar conta",
@@ -854,7 +858,7 @@
"confirmPassword": "Repetir senha", "confirmPassword": "Repetir senha",
"usernamePlaceholder": "Nome de usuário", "usernamePlaceholder": "Nome de usuário",
"emailPlaceholder": "E-mail", "emailPlaceholder": "E-mail",
"passwordPlaceholder": "Senha (mín. 6 caracteres)", "passwordPlaceholder": "Senha (mín. 12 caracteres)",
"confirmPasswordPlaceholder": "Repetir senha", "confirmPasswordPlaceholder": "Repetir senha",
"selectOutfit": "Selecione sua roupa", "selectOutfit": "Selecione sua roupa",
"termsAccept": "Tenho mais de 18 anos e aceito os termos e regras do {hotel}.", "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.", "termsError": "Você deve aceitar os termos e regras para se registrar.",
"usernameError": "O nome de usuário é obrigatório.", "usernameError": "O nome de usuário é obrigatório.",
"emailError": "E-mail válido é 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.", "confirmPasswordError": "As senhas não coincidem.",
"termsRequired": "Você deve aceitar os termos e regras.", "termsRequired": "Você deve aceitar os termos e regras.",
"usernameRequired": "O nome de usuário é obrigatório.", "usernameRequired": "O nome de usuário é obrigatório.",
@@ -877,14 +881,39 @@
"alreadyHaveAccountLink": "Entrar", "alreadyHaveAccountLink": "Entrar",
"whoIsOnline": "Quem está online", "whoIsOnline": "Quem está online",
"usersOnline": "{count} online", "usersOnline": "{count} online",
"accepted": "Accepted & agreed", "accepted": "Aceito e concordo",
"showPassword": "Show", "showPassword": "Mostrar",
"hidePassword": "Hide", "hidePassword": "Ocultar",
"accountDetails": "Account details", "accountDetails": "Dados da conta",
"credentials": "Credentials & security", "credentials": "Credenciais e segurança",
"newestCitizens": "Newest citizens", "newestCitizens": "Cidadãos mais recentes",
"ageVerified": "Tenho 18+ e aceito o requisito de idade.", "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": { "forgot": {
"title": "Redefinir senha", "title": "Redefinir senha",
@@ -898,9 +927,11 @@
"reset": { "reset": {
"title": "Defina uma nova senha", "title": "Defina uma nova senha",
"subtitle": "Escolha uma senha forte que você não usa em outro lugar.", "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", "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": { "verify": {
"verifiedTitle": "Você está pronto", "verifiedTitle": "Você está pronto",
+48 -17
View File
@@ -836,14 +836,18 @@
"createOne": "Creați unul", "createOne": "Creați unul",
"forgotPassword": "Ai uitat parola?", "forgotPassword": "Ai uitat parola?",
"errorInvalidCredentials": "Nume de utilizator sau parolă nevalidă", "errorInvalidCredentials": "Nume de utilizator sau parolă nevalidă",
"errorInvalid2fa": "Cod 2FA nevalid", "errorInvalid2fa": "Cod 2FA invalid",
"welcomeBack": "Bine ai revenit", "welcomeBack": "Bine ai revenit",
"welcomeBackSub": "Autentifică-te pentru a continua pe {hotelName}", "welcomeBackSub": "Autentifică-te pentru a continua pe {hotelName}",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Te rugăm să îți verifici e-mailul înainte de a te autentifica.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "Verificarea captcha a eșuat. Încearcă din nou.",
"whoIsOnline": "Who's online", "whoIsOnline": "Cine este online",
"newestCitizens": "Newest citizens", "newestCitizens": "Cei mai noi locuitori",
"usersOnline": "{count} online" "usersOnline": "{count} online",
"username": "Nume de utilizator",
"password": "Parolă",
"showPassword": "Arată",
"hidePassword": "Ascunde"
}, },
"register": { "register": {
"title": "Creați cont", "title": "Creați cont",
@@ -854,7 +858,7 @@
"confirmPassword": "Repetați parola", "confirmPassword": "Repetați parola",
"usernamePlaceholder": "Nume de utilizator", "usernamePlaceholder": "Nume de utilizator",
"emailPlaceholder": "E-mail", "emailPlaceholder": "E-mail",
"passwordPlaceholder": "Parola (min 6 caractere)", "passwordPlaceholder": "Parola (min 12 caractere)",
"confirmPasswordPlaceholder": "Repetați parola", "confirmPasswordPlaceholder": "Repetați parola",
"selectOutfit": "Alege-ți ținuta", "selectOutfit": "Alege-ți ținuta",
"termsAccept": "Am peste 18 ani și accept termenii și regulile {hotel}.", "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.", "termsError": "Trebuie să acceptați termenii și regulile pentru a vă înregistra.",
"usernameError": "Numele de utilizator este obligatoriu.", "usernameError": "Numele de utilizator este obligatoriu.",
"emailError": "Este necesar un e-mail valid.", "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.", "confirmPasswordError": "Parolele nu se potrivesc.",
"termsRequired": "Trebuie să acceptați termenii și regulile.", "termsRequired": "Trebuie să acceptați termenii și regulile.",
"usernameRequired": "Numele de utilizator este obligatoriu.", "usernameRequired": "Numele de utilizator este obligatoriu.",
@@ -877,14 +881,39 @@
"alreadyHaveAccountLink": "Autentificare", "alreadyHaveAccountLink": "Autentificare",
"whoIsOnline": "Cine este online", "whoIsOnline": "Cine este online",
"usersOnline": "{count} online", "usersOnline": "{count} online",
"accepted": "Accepted & agreed", "accepted": "Acceptat și de acord",
"showPassword": "Show", "showPassword": "Arată",
"hidePassword": "Hide", "hidePassword": "Ascunde",
"accountDetails": "Account details", "accountDetails": "Datele contului",
"credentials": "Credentials & security", "credentials": "Credențiale și securitate",
"newestCitizens": "Newest citizens", "newestCitizens": "Cei mai noi locuitori",
"ageVerified": "Am 18+ și accept cerința de vârstă.", "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": { "forgot": {
"title": "Resetează parola", "title": "Resetează parola",
@@ -898,9 +927,11 @@
"reset": { "reset": {
"title": "Setați o nouă parolă", "title": "Setați o nouă parolă",
"subtitle": "Alegeți o parolă puternică pe care nu o utilizați în altă parte.", "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", "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": { "verify": {
"verifiedTitle": "Ești gata", "verifiedTitle": "Ești gata",
+50 -19
View File
@@ -834,14 +834,18 @@
"createOne": "Создать", "createOne": "Создать",
"forgotPassword": "Забыли пароль?", "forgotPassword": "Забыли пароль?",
"errorInvalidCredentials": "Неверное имя пользователя или пароль", "errorInvalidCredentials": "Неверное имя пользователя или пароль",
"errorInvalid2fa": "Недействительный код 2FA", "errorInvalid2fa": "Неверный код 2FA",
"welcomeBack": "С возвращением", "welcomeBack": "С возвращением",
"welcomeBackSub": "Войди, чтобы продолжить в {hotelName}", "welcomeBackSub": "Войди, чтобы продолжить в {hotelName}",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Подтвердите адрес электронной почты перед входом.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "Проверка captcha не пройдена. Попробуйте ещё раз.",
"whoIsOnline": "Who's online", "whoIsOnline": "Кто в сети",
"newestCitizens": "Newest citizens", "newestCitizens": "Новые жители",
"usersOnline": "{count} online" "usersOnline": "{count} в сети",
"username": "Имя пользователя",
"password": "Пароль",
"showPassword": "Показать",
"hidePassword": "Скрыть"
}, },
"register": { "register": {
"title": "Создать аккаунт", "title": "Создать аккаунт",
@@ -852,7 +856,7 @@
"confirmPassword": "Повторите пароль", "confirmPassword": "Повторите пароль",
"usernamePlaceholder": "Имя пользователя", "usernamePlaceholder": "Имя пользователя",
"emailPlaceholder": "Электронная почта", "emailPlaceholder": "Электронная почта",
"passwordPlaceholder": "Пароль (мин. 6 символов)", "passwordPlaceholder": "Пароль (мин. 12 символов)",
"confirmPasswordPlaceholder": "Повторите пароль", "confirmPasswordPlaceholder": "Повторите пароль",
"selectOutfit": "Выберите свой наряд", "selectOutfit": "Выберите свой наряд",
"termsAccept": "Мне 18+ и я принимаю условия и правила {hotel}.", "termsAccept": "Мне 18+ и я принимаю условия и правила {hotel}.",
@@ -864,7 +868,7 @@
"termsError": "Чтобы зарегистрироваться, вы должны принять условия и правила.", "termsError": "Чтобы зарегистрироваться, вы должны принять условия и правила.",
"usernameError": "Требуется имя пользователя.", "usernameError": "Требуется имя пользователя.",
"emailError": "Требуется действительный адрес электронной почты.", "emailError": "Требуется действительный адрес электронной почты.",
"passwordError": "Пароль должен содержать не менее 6 символов.", "passwordError": "Пароль должен содержать не менее 12 символов",
"confirmPasswordError": "Пароли не совпадают.", "confirmPasswordError": "Пароли не совпадают.",
"termsRequired": "Вы должны принять условия и правила.", "termsRequired": "Вы должны принять условия и правила.",
"usernameRequired": "Требуется имя пользователя.", "usernameRequired": "Требуется имя пользователя.",
@@ -873,16 +877,41 @@
"passwordsDontMatch": "Пароли не совпадают.", "passwordsDontMatch": "Пароли не совпадают.",
"alreadyHaveAccountPre": "Уже есть аккаунт?", "alreadyHaveAccountPre": "Уже есть аккаунт?",
"alreadyHaveAccountLink": "Войти", "alreadyHaveAccountLink": "Войти",
"whoIsOnline": "Кто онлайн", "whoIsOnline": "Кто в сети",
"usersOnline": "{count} онлайн", "usersOnline": "{count} в сети",
"accepted": "Accepted & agreed", "accepted": "Принято и согласен",
"showPassword": "Show", "showPassword": "Показать",
"hidePassword": "Hide", "hidePassword": "Скрыть",
"accountDetails": "Account details", "accountDetails": "Данные аккаунта",
"credentials": "Credentials & security", "credentials": "Учётные данные и безопасность",
"newestCitizens": "Newest citizens", "newestCitizens": "Новые жители",
"ageVerified": "Мне 18+ и я согласен с возрастным требованием.", "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": { "forgot": {
"title": "Сбросить пароль", "title": "Сбросить пароль",
@@ -896,9 +925,11 @@
"reset": { "reset": {
"title": "Установить новый пароль", "title": "Установить новый пароль",
"subtitle": "Выберите надежный пароль, который вы больше не используете.", "subtitle": "Выберите надежный пароль, который вы больше не используете.",
"passwordPlaceholder": "Новый пароль (мин. 6 символов)", "passwordPlaceholder": "Новый пароль (мин. 12 символов)",
"resetPassword": "Сбросить пароль", "resetPassword": "Сбросить пароль",
"backToLogin": "Назад к входу" "backToLogin": "Назад к входу",
"passwordMinLength": "Пароль должен содержать не менее 12 символов",
"tooManyAttempts": "Слишком много попыток — повторите позже"
}, },
"verify": { "verify": {
"verifiedTitle": "Всё готово", "verifiedTitle": "Всё готово",
+47 -16
View File
@@ -839,11 +839,15 @@
"errorInvalid2fa": "Neplatný kód 2FA", "errorInvalid2fa": "Neplatný kód 2FA",
"welcomeBack": "Vitaj späť", "welcomeBack": "Vitaj späť",
"welcomeBackSub": "Prihlás sa pre pokračovanie do {hotelName}", "welcomeBackSub": "Prihlás sa pre pokračovanie do {hotelName}",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Pred prihlásením overte svoju e-mailovú adresu.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "Overenie captcha zlyhalo. Skúste to znova.",
"whoIsOnline": "Who's online", "whoIsOnline": "Kto je online",
"newestCitizens": "Newest citizens", "newestCitizens": "Najnovší obyvatelia",
"usersOnline": "{count} online" "usersOnline": "{count} online",
"username": "Používateľské meno",
"password": "heslo",
"showPassword": "Zobraziť",
"hidePassword": "Skryť"
}, },
"register": { "register": {
"title": "Vytvoriť účet", "title": "Vytvoriť účet",
@@ -854,7 +858,7 @@
"confirmPassword": "Zopakujte heslo", "confirmPassword": "Zopakujte heslo",
"usernamePlaceholder": "Používateľské meno", "usernamePlaceholder": "Používateľské meno",
"emailPlaceholder": "Email", "emailPlaceholder": "Email",
"passwordPlaceholder": "Heslo (min. 6 znakov)", "passwordPlaceholder": "Heslo (min. 12 znakov)",
"confirmPasswordPlaceholder": "Zopakujte heslo", "confirmPasswordPlaceholder": "Zopakujte heslo",
"selectOutfit": "Vyberte si oblečenie", "selectOutfit": "Vyberte si oblečenie",
"termsAccept": "Mám 18+ a súhlasím so zmluvnými podmienkami a pravidlami {hotel}.", "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á.", "termsError": "Ak sa chcete zaregistrovať, musíte prijať podmienky a pravidlá.",
"usernameError": "Vyžaduje sa používateľské meno.", "usernameError": "Vyžaduje sa používateľské meno.",
"emailError": "Vyžaduje sa platný e-mail.", "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ú.", "confirmPasswordError": "Heslá sa nezhodujú.",
"termsRequired": "Musíte prijať podmienky a pravidlá.", "termsRequired": "Musíte prijať podmienky a pravidlá.",
"usernameRequired": "Vyžaduje sa používateľské meno.", "usernameRequired": "Vyžaduje sa používateľské meno.",
@@ -877,14 +881,39 @@
"alreadyHaveAccountLink": "Prihlásiť sa", "alreadyHaveAccountLink": "Prihlásiť sa",
"whoIsOnline": "Kto je online", "whoIsOnline": "Kto je online",
"usersOnline": "{count} online", "usersOnline": "{count} online",
"accepted": "Accepted & agreed", "accepted": "Prijaté a súhlasím",
"showPassword": "Show", "showPassword": "Zobraziť",
"hidePassword": "Hide", "hidePassword": "Skryť",
"accountDetails": "Account details", "accountDetails": "Údaje o účte",
"credentials": "Credentials & security", "credentials": "Prihlasovacie údaje a zabezpečenie",
"newestCitizens": "Newest citizens", "newestCitizens": "Najnovší obyvatelia",
"ageVerified": "Mám 18+ a súhlasím s vekovým požiadavkou.", "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": { "forgot": {
"title": "Obnoviť heslo", "title": "Obnoviť heslo",
@@ -898,9 +927,11 @@
"reset": { "reset": {
"title": "Nastavte si nové heslo", "title": "Nastavte si nové heslo",
"subtitle": "Zvoľte si silné heslo, ktoré inde nepoužívate.", "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", "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": { "verify": {
"verifiedTitle": "Všetko je pripravené", "verifiedTitle": "Všetko je pripravené",
+50 -19
View File
@@ -836,14 +836,18 @@
"createOne": "Направите један", "createOne": "Направите један",
"forgotPassword": "Заборавили сте лозинку?", "forgotPassword": "Заборавили сте лозинку?",
"errorInvalidCredentials": "Неважеће корисничко име или лозинка", "errorInvalidCredentials": "Неважеће корисничко име или лозинка",
"errorInvalid2fa": "Неважећи 2ФА код", "errorInvalid2fa": "Неисправан 2ФА код",
"welcomeBack": "Добродошао назад", "welcomeBack": "Добродошао назад",
"welcomeBackSub": "Пријави се да наставиш ка {hotelName}", "welcomeBackSub": "Пријави се да наставиш ка {hotelName}",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Потврдите имејл пре пријаве.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "Провера капче није успела. Покушајте поново.",
"whoIsOnline": "Who's online", "whoIsOnline": "Ко је на мрежи",
"newestCitizens": "Newest citizens", "newestCitizens": "Најновији грађани",
"usersOnline": "{count} online" "usersOnline": "{count} на мрежи",
"username": "Корисничко име",
"password": "Лозинка",
"showPassword": "Прикажи",
"hidePassword": "Сакриј"
}, },
"register": { "register": {
"title": "Креирајте налог", "title": "Креирајте налог",
@@ -854,7 +858,7 @@
"confirmPassword": "Поновите лозинку", "confirmPassword": "Поновите лозинку",
"usernamePlaceholder": "Корисничко име", "usernamePlaceholder": "Корисничко име",
"emailPlaceholder": "Емаил", "emailPlaceholder": "Емаил",
"passwordPlaceholder": "Лозинка (мин 6 знакова)", "passwordPlaceholder": "Лозинка (мин 12 знакова)",
"confirmPasswordPlaceholder": "Поновите лозинку", "confirmPasswordPlaceholder": "Поновите лозинку",
"selectOutfit": "Изаберите своју одећу", "selectOutfit": "Изаберите своју одећу",
"termsAccept": "I am 18+ and accept the {hotel} terms & rules.", "termsAccept": "I am 18+ and accept the {hotel} terms & rules.",
@@ -866,7 +870,7 @@
"termsError": "Морате прихватити услове и правила да бисте се регистровали.", "termsError": "Морате прихватити услове и правила да бисте се регистровали.",
"usernameError": "Корисничко име је обавезно.", "usernameError": "Корисничко име је обавезно.",
"emailError": "Потребан је важећи имејл.", "emailError": "Потребан је важећи имејл.",
"passwordError": "Лозинка мора имати најмање 6 знакова.", "passwordError": "Лозинка мора имати најмање 12 знакова",
"confirmPasswordError": "Лозинке се не поклапају.", "confirmPasswordError": "Лозинке се не поклапају.",
"termsRequired": "Морате прихватити услове и правила.", "termsRequired": "Морате прихватити услове и правила.",
"usernameRequired": "Корисничко име је обавезно.", "usernameRequired": "Корисничко име је обавезно.",
@@ -875,16 +879,41 @@
"passwordsDontMatch": "Лозинке се не поклапају.", "passwordsDontMatch": "Лозинке се не поклапају.",
"alreadyHaveAccountPre": "Већ имаш налог?", "alreadyHaveAccountPre": "Већ имаш налог?",
"alreadyHaveAccountLink": "Пријави се", "alreadyHaveAccountLink": "Пријави се",
"whoIsOnline": "Ко је онлајн", "whoIsOnline": "Ко је на мрежи",
"usersOnline": "{count} онлајн", "usersOnline": "{count} на мрежи",
"accepted": "Accepted & agreed", "accepted": "Прихваћено и слажем се",
"showPassword": "Show", "showPassword": "Прикажи",
"hidePassword": "Hide", "hidePassword": "Сакриј",
"accountDetails": "Account details", "accountDetails": "Подаци налога",
"credentials": "Credentials & security", "credentials": "Подаци за пријаву и безбедност",
"newestCitizens": "Newest citizens", "newestCitizens": "Најновији грађани",
"ageVerified": "Imam 18+ i prihvatam uslov starosti.", "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": { "forgot": {
"title": "Ресетујте лозинку", "title": "Ресетујте лозинку",
@@ -898,9 +927,11 @@
"reset": { "reset": {
"title": "Поставите нову лозинку", "title": "Поставите нову лозинку",
"subtitle": "Изаберите јаку лозинку коју не користите другде.", "subtitle": "Изаберите јаку лозинку коју не користите другде.",
"passwordPlaceholder": "Нова лозинка (мин 6 знакова)", "passwordPlaceholder": "Нова лозинка (мин 12 знакова)",
"resetPassword": "Ресетујте лозинку", "resetPassword": "Ресетујте лозинку",
"backToLogin": "Назад на пријаву" "backToLogin": "Назад на пријаву",
"passwordMinLength": "Лозинка мора имати најмање 12 знакова",
"tooManyAttempts": "Превише покушаја — покушајте касније"
}, },
"verify": { "verify": {
"verifiedTitle": "Све је спремно", "verifiedTitle": "Све је спремно",
+47 -16
View File
@@ -839,11 +839,15 @@
"errorInvalid2fa": "Ogiltig 2FA-kod", "errorInvalid2fa": "Ogiltig 2FA-kod",
"welcomeBack": "Välkommen tillbaka", "welcomeBack": "Välkommen tillbaka",
"welcomeBackSub": "Logga in för att fortsätta till {hotelName}", "welcomeBackSub": "Logga in för att fortsätta till {hotelName}",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Bekräfta din e-postadress innan du loggar in.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "Captcha-verifieringen misslyckades. Försök igen.",
"whoIsOnline": "Who's online", "whoIsOnline": "Vem är online",
"newestCitizens": "Newest citizens", "newestCitizens": "Nyaste medborgare",
"usersOnline": "{count} online" "usersOnline": "{count} online",
"username": "Användarnamn",
"password": "Lösenord",
"showPassword": "Visa",
"hidePassword": "Dölj"
}, },
"register": { "register": {
"title": "Skapa konto", "title": "Skapa konto",
@@ -854,7 +858,7 @@
"confirmPassword": "Upprepa lösenordet", "confirmPassword": "Upprepa lösenordet",
"usernamePlaceholder": "Användarnamn", "usernamePlaceholder": "Användarnamn",
"emailPlaceholder": "E-post", "emailPlaceholder": "E-post",
"passwordPlaceholder": "Lösenord (minst 6 tecken)", "passwordPlaceholder": "Lösenord (minst 12 tecken)",
"confirmPasswordPlaceholder": "Upprepa lösenordet", "confirmPasswordPlaceholder": "Upprepa lösenordet",
"selectOutfit": "Välj din outfit", "selectOutfit": "Välj din outfit",
"termsAccept": "Jag är 18+ och accepterar villkoren och reglerna för {hotel}.", "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.", "termsError": "Du måste acceptera villkoren och reglerna för att registrera dig.",
"usernameError": "Användarnamn krävs.", "usernameError": "Användarnamn krävs.",
"emailError": "Giltig e-postadress 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.", "confirmPasswordError": "Lösenord stämmer inte överens.",
"termsRequired": "Du måste acceptera villkoren och reglerna.", "termsRequired": "Du måste acceptera villkoren och reglerna.",
"usernameRequired": "Användarnamn krävs.", "usernameRequired": "Användarnamn krävs.",
@@ -877,14 +881,39 @@
"alreadyHaveAccountLink": "Logga in", "alreadyHaveAccountLink": "Logga in",
"whoIsOnline": "Vem är online", "whoIsOnline": "Vem är online",
"usersOnline": "{count} online", "usersOnline": "{count} online",
"accepted": "Accepted & agreed", "accepted": "Accepterat och godkänt",
"showPassword": "Show", "showPassword": "Visa",
"hidePassword": "Hide", "hidePassword": "Dölj",
"accountDetails": "Account details", "accountDetails": "Kontouppgifter",
"credentials": "Credentials & security", "credentials": "Inloggningsuppgifter och säkerhet",
"newestCitizens": "Newest citizens", "newestCitizens": "Nyaste medborgare",
"ageVerified": "Jag är 18+ och godkänner ålderskravet.", "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": { "forgot": {
"title": "Återställ lösenord", "title": "Återställ lösenord",
@@ -898,9 +927,11 @@
"reset": { "reset": {
"title": "Ange ett nytt lösenord", "title": "Ange ett nytt lösenord",
"subtitle": "Välj ett starkt lösenord som du inte använder någon annanstans.", "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", "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": { "verify": {
"verifiedTitle": "Du är redo", "verifiedTitle": "Du är redo",
+48 -17
View File
@@ -839,11 +839,15 @@
"errorInvalid2fa": "Geçersiz 2FA kodu", "errorInvalid2fa": "Geçersiz 2FA kodu",
"welcomeBack": "Tekrar hoş geldin", "welcomeBack": "Tekrar hoş geldin",
"welcomeBackSub": "{hotelName} devam etmek için giriş yap", "welcomeBackSub": "{hotelName} devam etmek için giriş yap",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Giriş yapmadan önce lütfen e-posta adresinizi doğrulayın.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "Captcha doğrulaması başarısız oldu. Tekrar deneyin.",
"whoIsOnline": "Who's online", "whoIsOnline": "Kimler çevrimiçi",
"newestCitizens": "Newest citizens", "newestCitizens": "En yeni vatandaşlar",
"usersOnline": "{count} online" "usersOnline": "{count} çevrimiçi",
"username": "Kullanıcı adı",
"password": "Şifre",
"showPassword": "Göster",
"hidePassword": "Gizle"
}, },
"register": { "register": {
"title": "Hesap oluştur", "title": "Hesap oluştur",
@@ -854,7 +858,7 @@
"confirmPassword": "Şifreyi tekrarla", "confirmPassword": "Şifreyi tekrarla",
"usernamePlaceholder": "Kullanıcı adı", "usernamePlaceholder": "Kullanıcı adı",
"emailPlaceholder": "E-posta", "emailPlaceholder": "E-posta",
"passwordPlaceholder": "Şifre (en az 6 karakter)", "passwordPlaceholder": "Şifre (en az 12 karakter)",
"confirmPasswordPlaceholder": "Şifreyi tekrarla", "confirmPasswordPlaceholder": "Şifreyi tekrarla",
"selectOutfit": "Kıyafetinizi seçin", "selectOutfit": "Kıyafetinizi seçin",
"termsAccept": "18 yaşındayım ve {hotel} şartlarını ve kurallarını kabul ediyorum.", "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.", "termsError": "Kayıt olmak için şartları ve kuralları kabul etmelisiniz.",
"usernameError": "Kullanıcı adı gerekli.", "usernameError": "Kullanıcı adı gerekli.",
"emailError": "Geçerli e-posta gereklidir.", "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.", "confirmPasswordError": "Şifreler eşleşmiyor.",
"termsRequired": "Şartları ve kuralları kabul etmelisiniz.", "termsRequired": "Şartları ve kuralları kabul etmelisiniz.",
"usernameRequired": "Kullanıcı adı gerekli.", "usernameRequired": "Kullanıcı adı gerekli.",
@@ -875,16 +879,41 @@
"passwordsDontMatch": "Şifreler eşleşmiyor.", "passwordsDontMatch": "Şifreler eşleşmiyor.",
"alreadyHaveAccountPre": "Zaten hesabın var mı?", "alreadyHaveAccountPre": "Zaten hesabın var mı?",
"alreadyHaveAccountLink": "Giriş yap", "alreadyHaveAccountLink": "Giriş yap",
"whoIsOnline": "Kim çevrimiçi", "whoIsOnline": "Kimler çevrimiçi",
"usersOnline": "{count} çevrimiçi", "usersOnline": "{count} çevrimiçi",
"accepted": "Accepted & agreed", "accepted": "Kabul edildi ve onaylıyorum",
"showPassword": "Show", "showPassword": "Göster",
"hidePassword": "Hide", "hidePassword": "Gizle",
"accountDetails": "Account details", "accountDetails": "Hesap bilgileri",
"credentials": "Credentials & security", "credentials": "Kimlik bilgileri ve güvenlik",
"newestCitizens": "Newest citizens", "newestCitizens": "En yeni vatandaşlar",
"ageVerified": "18+ yaşındayım ve yaş gereksinimini kabul ediyorum.", "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": { "forgot": {
"title": "Şifreyi sıfırla", "title": "Şifreyi sıfırla",
@@ -898,9 +927,11 @@
"reset": { "reset": {
"title": "Yeni bir şifre belirleyin", "title": "Yeni bir şifre belirleyin",
"subtitle": "Başka yerde kullanmadığınız güçlü bir şifre seçin.", "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", "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": { "verify": {
"verifiedTitle": "Artık hazırsınız", "verifiedTitle": "Artık hazırsınız",
+50 -19
View File
@@ -836,14 +836,18 @@
"createOne": "Створіть один", "createOne": "Створіть один",
"forgotPassword": "Забули пароль?", "forgotPassword": "Забули пароль?",
"errorInvalidCredentials": "Недійсне ім'я користувача або пароль", "errorInvalidCredentials": "Недійсне ім'я користувача або пароль",
"errorInvalid2fa": "Недійсний код 2FA", "errorInvalid2fa": "Невірний код 2FA",
"welcomeBack": "З поверненням", "welcomeBack": "З поверненням",
"welcomeBackSub": "Увійди, щоб продовжити в {hotelName}", "welcomeBackSub": "Увійди, щоб продовжити в {hotelName}",
"errorUnverified": "Please verify your email before signing in.", "errorUnverified": "Підтвердьте свою електронну адресу перед входом.",
"errorCaptcha": "Captcha verification failed. Please try again.", "errorCaptcha": "Перевірка captcha не вдалася. Спробуйте ще раз.",
"whoIsOnline": "Who's online", "whoIsOnline": "Хто в мережі",
"newestCitizens": "Newest citizens", "newestCitizens": "Нові мешканці",
"usersOnline": "{count} online" "usersOnline": "{count} у мережі",
"username": "Ім'я користувача",
"password": "Пароль",
"showPassword": "Показати",
"hidePassword": "Сховати"
}, },
"register": { "register": {
"title": "Створити акаунт", "title": "Створити акаунт",
@@ -854,7 +858,7 @@
"confirmPassword": "Повторіть пароль", "confirmPassword": "Повторіть пароль",
"usernamePlaceholder": "Ім'я користувача", "usernamePlaceholder": "Ім'я користувача",
"emailPlaceholder": "Електронна пошта", "emailPlaceholder": "Електронна пошта",
"passwordPlaceholder": "Пароль (мінімум 6 символів)", "passwordPlaceholder": "Пароль (мінімум 12 символів)",
"confirmPasswordPlaceholder": "Повторіть пароль", "confirmPasswordPlaceholder": "Повторіть пароль",
"selectOutfit": "Виберіть свій наряд", "selectOutfit": "Виберіть свій наряд",
"termsAccept": "Мені 18+ і я приймаю умови та правила {hotel}.", "termsAccept": "Мені 18+ і я приймаю умови та правила {hotel}.",
@@ -866,7 +870,7 @@
"termsError": "Ви повинні прийняти умови та правила, щоб зареєструватися.", "termsError": "Ви повинні прийняти умови та правила, щоб зареєструватися.",
"usernameError": "Потрібно ввести ім'я користувача.", "usernameError": "Потрібно ввести ім'я користувача.",
"emailError": "Потрібна дійсна електронна адреса.", "emailError": "Потрібна дійсна електронна адреса.",
"passwordError": "Пароль має бути не менше 6 символів.", "passwordError": "Пароль має містити щонайменше 12 символів",
"confirmPasswordError": "Паролі не збігаються.", "confirmPasswordError": "Паролі не збігаються.",
"termsRequired": "Ви повинні прийняти умови та правила.", "termsRequired": "Ви повинні прийняти умови та правила.",
"usernameRequired": "Потрібно ввести ім'я користувача.", "usernameRequired": "Потрібно ввести ім'я користувача.",
@@ -875,16 +879,41 @@
"passwordsDontMatch": "Паролі не збігаються.", "passwordsDontMatch": "Паролі не збігаються.",
"alreadyHaveAccountPre": "Вже маєш акаунт?", "alreadyHaveAccountPre": "Вже маєш акаунт?",
"alreadyHaveAccountLink": "Увійти", "alreadyHaveAccountLink": "Увійти",
"whoIsOnline": "Хто онлайн", "whoIsOnline": "Хто в мережі",
"usersOnline": "{count} онлайн", "usersOnline": "{count} у мережі",
"accepted": "Accepted & agreed", "accepted": "Прийнято та погоджуюсь",
"showPassword": "Show", "showPassword": "Показати",
"hidePassword": "Hide", "hidePassword": "Сховати",
"accountDetails": "Account details", "accountDetails": "Дані облікового запису",
"credentials": "Credentials & security", "credentials": "Облікові дані та безпека",
"newestCitizens": "Newest citizens", "newestCitizens": "Нові мешканці",
"ageVerified": "Мені 18+ і я погоджуюся з віковими вимогами.", "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": { "forgot": {
"title": "Скинути пароль", "title": "Скинути пароль",
@@ -898,9 +927,11 @@
"reset": { "reset": {
"title": "Встановіть новий пароль", "title": "Встановіть новий пароль",
"subtitle": "Виберіть надійний пароль, який більше не використовується.", "subtitle": "Виберіть надійний пароль, який більше не використовується.",
"passwordPlaceholder": "Новий пароль (мінімум 6 символів)", "passwordPlaceholder": "Новий пароль (мінімум 12 символів)",
"resetPassword": "Скинути пароль", "resetPassword": "Скинути пароль",
"backToLogin": "Назад до входу" "backToLogin": "Назад до входу",
"passwordMinLength": "Пароль має містити щонайменше 12 символів",
"tooManyAttempts": "Забагато спроб — спробуйте пізніше"
}, },
"verify": { "verify": {
"verifiedTitle": "Ви готові", "verifiedTitle": "Ви готові",