mirror of
https://github.com/bulwarkmail/webmail.git
synced 2026-11-05 00:14:18 +00:00
fix: keep the found server on Change, focus the field that needs input, and make Sign in the main button once a password is typed
This commit is contained in:
@@ -81,6 +81,17 @@ describe('the desktop app, with a server of one\'s own', () => {
|
||||
expect(screen.queryByTestId('login-server-trouble')).toBeNull();
|
||||
}, 30_000);
|
||||
|
||||
it('makes "Sign in" the main button once a password is typed', async () => {
|
||||
render(<LoginPage />);
|
||||
const button = await browserButton();
|
||||
const submit = email().closest('form')!.querySelector<HTMLButtonElement>('button[type=submit]')!;
|
||||
expect(button.className).toContain('bg-primary');
|
||||
expect(submit.className).not.toContain('bg-primary');
|
||||
fireEvent.change(document.getElementById('password')!, { target: { value: 'secret' } });
|
||||
await waitFor(() => expect(submit.className).toContain('bg-primary'));
|
||||
expect(button.className).not.toContain('bg-primary');
|
||||
}, 30_000);
|
||||
|
||||
it('asks for the address under its field when the browser button is pressed first', async () => {
|
||||
render(<LoginPage />);
|
||||
fireEvent.click(await browserButton());
|
||||
|
||||
@@ -139,10 +139,76 @@ describe('sign-in to a server of one\'s own', () => {
|
||||
fireEvent.submit(form());
|
||||
expect(await screen.findByTestId('login-server-error')).toHaveTextContent('server_invalid');
|
||||
expect(serverField()).toHaveAttribute('aria-invalid', 'true');
|
||||
// Marked red, not only for screen readers.
|
||||
expect(serverField()!.className).toContain('aria-invalid:border-destructive');
|
||||
await waitFor(() => expect(document.activeElement).toBe(serverField()));
|
||||
expect(login).not.toHaveBeenCalled();
|
||||
}, 30_000);
|
||||
|
||||
it('Change keeps the server in use and doesn\'t say it wasn\'t found', async () => {
|
||||
configOverrides.value = { jmapServerUrl: 'https://default.example.com' };
|
||||
render(<LoginPage />);
|
||||
await typeAddress('sam@example.net');
|
||||
fireEvent.click(await screen.findByTestId('login-server-change', {}, { timeout: 5000 }));
|
||||
await waitFor(() => expect(serverField()).not.toBeNull());
|
||||
expect(serverField()!.value).toBe('default.example.com');
|
||||
expect(screen.queryByTestId('login-server-not-found')).toBeNull();
|
||||
expect(screen.getByTestId('login-server-change-hint')).toHaveTextContent('server_change_hint');
|
||||
await waitFor(() => expect(document.activeElement).toBe(serverField()));
|
||||
}, 30_000);
|
||||
|
||||
it('focuses the server field when it opens after the user left the address field', async () => {
|
||||
render(<LoginPage />);
|
||||
await waitFor(() => expect(email()).not.toBeNull(), { timeout: 10000 });
|
||||
fireEvent.change(email(), { target: { value: 'sam@example.net' } });
|
||||
// Tab went on to the (still empty) password field before the lookup ended.
|
||||
(document.getElementById('password') as HTMLInputElement).focus();
|
||||
await waitFor(() => expect(serverField()).not.toBeNull(), { timeout: 5000 });
|
||||
await waitFor(() => expect(document.activeElement).toBe(serverField()));
|
||||
}, 30_000);
|
||||
|
||||
it('leaves focus in the address field while the user is still typing there', async () => {
|
||||
render(<LoginPage />);
|
||||
await waitFor(() => expect(email()).not.toBeNull(), { timeout: 10000 });
|
||||
email().focus();
|
||||
fireEvent.change(email(), { target: { value: 'sam@example.net' } });
|
||||
await waitFor(() => expect(serverField()).not.toBeNull(), { timeout: 5000 });
|
||||
expect(document.activeElement).toBe(email());
|
||||
}, 30_000);
|
||||
|
||||
it('a wrong password focuses the password field with its text selected', async () => {
|
||||
found['example.org'] = 'https://mail.example.org';
|
||||
login.mockImplementation(async () => {
|
||||
useAuthStore.setState({ error: 'invalid_credentials', isLoading: false });
|
||||
return false;
|
||||
});
|
||||
render(<LoginPage />);
|
||||
await typeAddress('sam@example.org');
|
||||
const button = form().querySelector<HTMLButtonElement>('button[type=submit]')!;
|
||||
button.focus();
|
||||
fireEvent.submit(form());
|
||||
const password = document.getElementById('password') as HTMLInputElement;
|
||||
await waitFor(() => expect(document.activeElement).toBe(password));
|
||||
expect(password.selectionStart).toBe(0);
|
||||
expect(password.selectionEnd).toBe('secret'.length);
|
||||
expect(password.className).toContain('aria-invalid:border-destructive');
|
||||
login.mockImplementation(async () => false);
|
||||
}, 30_000);
|
||||
|
||||
it('keeps the access token behind "Other ways to sign in"', async () => {
|
||||
configOverrides.value = { loginShowTokenLogin: true };
|
||||
render(<LoginPage />);
|
||||
const toggle = await screen.findByTestId('login-token-toggle', {}, { timeout: 10000 });
|
||||
const other = screen.getByTestId('login-other-ways');
|
||||
expect(other.tagName).toBe('DETAILS');
|
||||
expect(other).toContainElement(toggle);
|
||||
expect(other.querySelector('summary')).toHaveTextContent('other_ways');
|
||||
fireEvent.click(toggle);
|
||||
// The way back to the password is in sight, not folded away.
|
||||
await waitFor(() => expect(screen.queryByTestId('login-other-ways')).toBeNull());
|
||||
expect(screen.getByTestId('login-token-toggle')).toHaveTextContent('password_toggle');
|
||||
}, 30_000);
|
||||
|
||||
it('says plainly that Gmail can\'t be reached, and asks nothing', async () => {
|
||||
render(<LoginPage />);
|
||||
await typeAddress('sam@gmail.com');
|
||||
|
||||
@@ -310,6 +310,10 @@ function LoginPageContent() {
|
||||
const customServerMode = !hasServerList && allowCustomJmapEndpoint;
|
||||
const canLookUpServer = customServerMode && !IS_LITE;
|
||||
const [serverEditing, setServerEditing] = useState(false);
|
||||
// Change on a found server: another one is wanted, nothing failed.
|
||||
const [serverChanging, setServerChanging] = useState(false);
|
||||
// Asks for focus in the server field once it is on screen (the field mounts in the next render).
|
||||
const [serverFocusRequest, setServerFocusRequest] = useState(0);
|
||||
const [serverLookup, setServerLookup] = useState<{ domain: string; status: "looking" | "found" | "failed"; url: string | null } | null>(null);
|
||||
const [serverError, setServerError] = useState<ServerFieldError>(null);
|
||||
const [emailNeeded, setEmailNeeded] = useState(false);
|
||||
@@ -400,6 +404,7 @@ function LoginPageContent() {
|
||||
const justRemovedSuggestion = useRef(false);
|
||||
const totpInputRef = useRef<HTMLInputElement>(null);
|
||||
const tokenInputRef = useRef<HTMLInputElement>(null);
|
||||
const passwordInputRef = useRef<HTMLInputElement>(null);
|
||||
const prevError = useRef<string | null>(null);
|
||||
const themeMenuRef = useRef<HTMLDivElement>(null);
|
||||
const themeButtonRef = useRef<HTMLButtonElement>(null);
|
||||
@@ -510,6 +515,23 @@ function LoginPageContent() {
|
||||
return () => clearTimeout(timer);
|
||||
}, [typedDomain, typedAddress, unsupportedMailProvider, serverLookup?.domain, lookUpServer]);
|
||||
|
||||
useEffect(() => {
|
||||
if (serverFocusRequest) serverInputRef.current?.focus();
|
||||
}, [serverFocusRequest]);
|
||||
|
||||
// The field opens by itself when the lookup found nothing, usually after the user
|
||||
// already left the address field. Focus goes there, unless they are typing elsewhere.
|
||||
const serverFieldOpenedByLookup = canLookUpServer && lookupForAddress?.status === "failed" && !configuredServerUrl && !unsupportedMailProvider;
|
||||
useEffect(() => {
|
||||
if (!serverFieldOpenedByLookup) return;
|
||||
const active = document.activeElement;
|
||||
if (active && active.id === "username") return;
|
||||
if (active instanceof HTMLInputElement || active instanceof HTMLTextAreaElement) {
|
||||
if (!(active.id === "password" && !active.value)) return;
|
||||
}
|
||||
serverInputRef.current?.focus();
|
||||
}, [serverFieldOpenedByLookup, typedDomain]);
|
||||
|
||||
/**
|
||||
* The server to sign in to in custom-server mode, looked up now if need be.
|
||||
* Null after it opened the field and said what is missing there.
|
||||
@@ -529,7 +551,7 @@ function LoginPageContent() {
|
||||
}
|
||||
setServerEditing(true);
|
||||
setServerError(serverFieldOpen && jmapEndpoint.trim() ? "invalid" : "needed");
|
||||
setTimeout(() => serverInputRef.current?.focus(), 0);
|
||||
setServerFocusRequest((n) => n + 1);
|
||||
return null;
|
||||
};
|
||||
|
||||
@@ -582,6 +604,19 @@ function LoginPageContent() {
|
||||
prevError.current = error;
|
||||
}, [error]);
|
||||
|
||||
// A wrong password or token: focus that field with its text selected, ready to type again.
|
||||
useEffect(() => {
|
||||
if (error === "invalid_credentials" && !totpBlamed) {
|
||||
passwordInputRef.current?.focus();
|
||||
passwordInputRef.current?.select();
|
||||
} else if (error === "invalid_token") {
|
||||
tokenInputRef.current?.focus();
|
||||
tokenInputRef.current?.select();
|
||||
}
|
||||
// Only on a new error, not when the code field changes.
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [error]);
|
||||
|
||||
// Auto-show and focus TOTP field when server requires it
|
||||
useEffect(() => {
|
||||
if (error === 'totp_required') {
|
||||
@@ -1232,6 +1267,10 @@ function LoginPageContent() {
|
||||
};
|
||||
|
||||
const browserSignInShown = browserSignInAvailable() && desktopSignInEnabled;
|
||||
// Once a password (or token) is typed, "Sign in" is what the user means: it becomes the
|
||||
// main button and "Sign in with your browser" the other way.
|
||||
const formSignInPreferred = signInWithToken ? accessToken.trim() !== "" : formData.password !== "";
|
||||
const browserSignInPrimary = browserSignInShown && !formSignInPreferred;
|
||||
|
||||
const handleSubmit = async (e: React.FormEvent) => {
|
||||
e.preventDefault();
|
||||
@@ -1413,7 +1452,10 @@ function LoginPageContent() {
|
||||
<div className="space-y-3">
|
||||
<Button
|
||||
type="button"
|
||||
className="w-full h-11 font-medium text-[0.9375rem] bg-primary hover:bg-primary/90 transition-all duration-200 rounded-xl shadow-md shadow-primary/15 hover:shadow-lg hover:shadow-primary/20"
|
||||
variant={browserSignInPrimary ? undefined : "outline"}
|
||||
className={browserSignInPrimary
|
||||
? "w-full h-11 font-medium text-[0.9375rem] bg-primary hover:bg-primary/90 transition-all duration-200 rounded-xl shadow-md shadow-primary/15 hover:shadow-lg hover:shadow-primary/20"
|
||||
: "w-full h-11 font-medium text-[0.9375rem] rounded-xl border-border/60 hover:bg-muted/50"}
|
||||
onClick={handleBrowserSignIn}
|
||||
disabled={desktopWaiting || isLoading}
|
||||
data-testid="desktop-browser-sign-in"
|
||||
@@ -2052,8 +2094,10 @@ function LoginPageContent() {
|
||||
onEdit={() => {
|
||||
setJmapEndpoint(autoServer ? serverHostLabel(autoServer) : "");
|
||||
setServerEditing(true);
|
||||
setTimeout(() => serverInputRef.current?.focus(), 0);
|
||||
setServerChanging(true);
|
||||
setServerFocusRequest((n) => n + 1);
|
||||
}}
|
||||
changing={serverChanging}
|
||||
provider={unsupportedMailProvider}
|
||||
error={serverError}
|
||||
showTrouble={!IS_DESKTOP_BUILD}
|
||||
@@ -2071,11 +2115,12 @@ function LoginPageContent() {
|
||||
</label>
|
||||
<div className="relative">
|
||||
<Input
|
||||
ref={passwordInputRef}
|
||||
id="password"
|
||||
type={showPassword ? "text" : "password"}
|
||||
value={formData.password}
|
||||
onChange={(e) => setFormData({ ...formData, password: e.target.value })}
|
||||
className="h-11 px-3.5 pe-11 bg-muted/40 border-border/60 rounded-xl focus:bg-background focus:border-primary/50 transition-all duration-200"
|
||||
className="h-11 px-3.5 pe-11 bg-muted/40 border-border/60 rounded-xl focus:bg-background focus:border-primary/50 transition-all duration-200 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20"
|
||||
placeholder={t("password_placeholder")}
|
||||
required={!liteSsoRequired && !signInWithToken}
|
||||
autoComplete="current-password"
|
||||
@@ -2168,20 +2213,31 @@ function LoginPageContent() {
|
||||
</div>
|
||||
)}
|
||||
|
||||
{loginShowTokenLogin && !isMobileHandoff && !liteSsoRequired && (
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => {
|
||||
clearError();
|
||||
setTokenMode(!signInWithToken);
|
||||
setTimeout(() => (signInWithToken ? inputRef : tokenInputRef).current?.focus(), 50);
|
||||
}}
|
||||
className="flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors"
|
||||
>
|
||||
<KeyRound className="w-3.5 h-3.5" />
|
||||
{signInWithToken ? t("password_toggle") : t("token_toggle")}
|
||||
</button>
|
||||
)}
|
||||
{loginShowTokenLogin && !isMobileHandoff && !liteSsoRequired && (() => {
|
||||
const tokenToggle = (
|
||||
<button
|
||||
type="button"
|
||||
data-testid="login-token-toggle"
|
||||
onClick={() => {
|
||||
clearError();
|
||||
setTokenMode(!signInWithToken);
|
||||
setTimeout(() => (signInWithToken ? inputRef : tokenInputRef).current?.focus(), 50);
|
||||
}}
|
||||
className="flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors"
|
||||
>
|
||||
<KeyRound className="w-3.5 h-3.5" />
|
||||
{signInWithToken ? t("password_toggle") : t("token_toggle")}
|
||||
</button>
|
||||
);
|
||||
// Few people have a token: the way back to the password stays in sight,
|
||||
// the way to a token waits behind "Other ways to sign in".
|
||||
return signInWithToken ? tokenToggle : (
|
||||
<details className="text-xs text-muted-foreground" data-testid="login-other-ways">
|
||||
<summary className="cursor-pointer hover:text-foreground w-fit">{tLogin("other_ways")}</summary>
|
||||
<div className="mt-2 ps-1">{tokenToggle}</div>
|
||||
</details>
|
||||
);
|
||||
})()}
|
||||
|
||||
{/* Remember me, for the password and the SSO buttons below */}
|
||||
{showRememberMe && rememberMeBox}
|
||||
@@ -2189,8 +2245,9 @@ function LoginPageContent() {
|
||||
|
||||
<Button
|
||||
type="submit"
|
||||
variant={browserSignInShown ? "outline" : undefined}
|
||||
className={browserSignInShown
|
||||
data-testid="login-submit"
|
||||
variant={browserSignInPrimary ? "outline" : undefined}
|
||||
className={browserSignInPrimary
|
||||
? "w-full h-11 font-medium text-[0.9375rem] rounded-xl border-border/60 hover:bg-muted/50"
|
||||
: "w-full h-11 font-medium text-[0.9375rem] bg-primary hover:bg-primary/90 transition-all duration-200 rounded-xl shadow-md shadow-primary/15 hover:shadow-lg hover:shadow-primary/20"}
|
||||
disabled={isLoading || (liteSsoRequired && oauthLoading)}
|
||||
|
||||
@@ -35,6 +35,8 @@ interface LoginServerFieldProps {
|
||||
value: string;
|
||||
onChange: (value: string) => void;
|
||||
onEdit: () => void;
|
||||
/** The user pressed Change on a server that was found: they want another one, nothing went wrong. */
|
||||
changing?: boolean;
|
||||
/** A provider Bulwark can't reach (Gmail, Outlook.com, iCloud Mail), by name. */
|
||||
provider: string | null;
|
||||
error: ServerFieldError;
|
||||
@@ -49,13 +51,15 @@ interface LoginServerFieldProps {
|
||||
* field only opens when nothing was found or the user wants another one.
|
||||
*/
|
||||
export const LoginServerField = forwardRef<HTMLInputElement, LoginServerFieldProps>(function LoginServerField(
|
||||
{ lookup, server, editing, value, onChange, onEdit, provider, error, showTrouble, disabled },
|
||||
{ lookup, server, editing, value, onChange, onEdit, changing, provider, error, showTrouble, disabled },
|
||||
ref,
|
||||
) {
|
||||
const t = useTranslations("uxs_login");
|
||||
const id = useId();
|
||||
const hintId = `${id}-hint`;
|
||||
const errorId = `${id}-error`;
|
||||
// After Change the lookup's result no longer matters: the user picks another server.
|
||||
const notFound = lookup === "failed" && !provider && !changing;
|
||||
|
||||
const providerNote = provider && (
|
||||
<div role="status" data-testid="login-provider-unsupported" className="p-3 rounded-xl border border-warning/30 bg-warning/5 flex items-start gap-2.5 text-sm text-foreground leading-relaxed">
|
||||
@@ -112,16 +116,21 @@ export const LoginServerField = forwardRef<HTMLInputElement, LoginServerFieldPro
|
||||
spellCheck={false}
|
||||
value={value}
|
||||
onChange={(e) => onChange(e.target.value)}
|
||||
className="h-11 px-3.5 bg-muted/40 border-border/60 rounded-xl focus:bg-background focus:border-primary/50 transition-all duration-200"
|
||||
className="h-11 px-3.5 bg-muted/40 border-border/60 rounded-xl focus:bg-background focus:border-primary/50 transition-all duration-200 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20"
|
||||
placeholder={t("server_placeholder")}
|
||||
aria-invalid={error ? true : undefined}
|
||||
aria-describedby={[error ? errorId : null, lookup === "failed" && !provider ? hintId : null].filter(Boolean).join(" ") || undefined}
|
||||
aria-describedby={[error ? errorId : null, notFound || changing ? hintId : null].filter(Boolean).join(" ") || undefined}
|
||||
/>
|
||||
{lookup === "failed" && !provider && !error && (
|
||||
{notFound && !error && (
|
||||
<p id={hintId} className="text-xs text-muted-foreground leading-snug" data-testid="login-server-not-found">
|
||||
{t("server_not_found")}
|
||||
</p>
|
||||
)}
|
||||
{changing && !provider && !error && (
|
||||
<p id={hintId} className="text-xs text-muted-foreground leading-snug" data-testid="login-server-change-hint">
|
||||
{t("server_change_hint")}
|
||||
</p>
|
||||
)}
|
||||
{error && (
|
||||
<p id={errorId} role="alert" className="text-xs text-destructive leading-snug" data-testid="login-server-error">
|
||||
{error === "invalid" ? t("server_invalid") : t("server_needed")}
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "جارٍ البحث عن خادم بريدك…",
|
||||
"server_found": "خادم البريد: {server}",
|
||||
"server_change": "تغيير",
|
||||
"server_change_hint": "اكتب عنوان خادم آخر.",
|
||||
"server_not_found": "لم نعثر على خادم البريد لهذا العنوان. أدخله هنا، مثل mail.example.com.",
|
||||
"server_needed": "أدخل عنوان خادم بريدك.",
|
||||
"server_invalid": "هذا ليس عنوان خادم. اكتبه بهذا الشكل: mail.example.com.",
|
||||
"email_needed": "أدخل عنوان بريدك الإلكتروني أولاً.",
|
||||
"other_ways": "طرق أخرى لتسجيل الدخول",
|
||||
"trouble": "هل تواجه مشكلة؟",
|
||||
"trouble_cors": "يجب أن يسمح خادم بريدك بتسجيل الدخول من هذا الموقع. إذا فشل تسجيل الدخول، فاطلب من مسؤول خادم بريدك السماح بذلك.",
|
||||
"provider_unsupported": "لا يوفّر {provider} بروتوكول JMAP الذي يتواصل به Bulwark مع خوادم البريد، لذلك لا يستطيع Bulwark الاتصال به مباشرة بعد."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "S'està cercant el teu servidor de correu…",
|
||||
"server_found": "Servidor de correu: {server}",
|
||||
"server_change": "Canvia",
|
||||
"server_change_hint": "Escriviu una altra adreça de servidor.",
|
||||
"server_not_found": "No hem trobat el servidor de correu d'aquesta adreça. Escriu-lo aquí, per exemple mail.example.com.",
|
||||
"server_needed": "Escriu l'adreça del teu servidor de correu.",
|
||||
"server_invalid": "Això no és l'adreça d'un servidor. Escriu-la com mail.example.com.",
|
||||
"email_needed": "Primer escriu la teva adreça electrònica.",
|
||||
"other_ways": "Altres maneres d'iniciar la sessió",
|
||||
"trouble": "Tens problemes?",
|
||||
"trouble_cors": "El teu servidor de correu ha de permetre iniciar sessió des d'aquest lloc web. Si no funciona, demana a qui gestiona el servidor que ho permeti.",
|
||||
"provider_unsupported": "{provider} no ofereix JMAP, la manera com Bulwark parla amb els servidors de correu, així que Bulwark encara no s'hi pot connectar directament."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "Hledáme váš poštovní server…",
|
||||
"server_found": "Poštovní server: {server}",
|
||||
"server_change": "Změnit",
|
||||
"server_change_hint": "Zadejte adresu jiného serveru.",
|
||||
"server_not_found": "Pro tuto adresu jsme poštovní server nenašli. Zadejte ho sem, například mail.example.com.",
|
||||
"server_needed": "Zadejte adresu svého poštovního serveru.",
|
||||
"server_invalid": "Tohle není adresa serveru. Napište ji jako mail.example.com.",
|
||||
"email_needed": "Nejdřív zadejte svou e-mailovou adresu.",
|
||||
"other_ways": "Další způsoby přihlášení",
|
||||
"trouble": "Nedaří se to?",
|
||||
"trouble_cors": "Váš poštovní server musí povolit přihlašování z tohoto webu. Pokud přihlášení selže, požádejte správce poštovního serveru, aby to povolil.",
|
||||
"provider_unsupported": "{provider} nenabízí JMAP, způsob, jakým Bulwark komunikuje s poštovními servery, takže se k němu Bulwark zatím nemůže připojit přímo."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "Leder efter din mailserver…",
|
||||
"server_found": "Mailserver: {server}",
|
||||
"server_change": "Skift",
|
||||
"server_change_hint": "Skriv en anden serveradresse.",
|
||||
"server_not_found": "Vi kunne ikke finde mailserveren til denne adresse. Skriv den her, for eksempel mail.example.com.",
|
||||
"server_needed": "Skriv adressen på din mailserver.",
|
||||
"server_invalid": "Det er ikke en serveradresse. Skriv den som mail.example.com.",
|
||||
"email_needed": "Skriv først din e-mailadresse.",
|
||||
"other_ways": "Andre måder at logge ind på",
|
||||
"trouble": "Problemer?",
|
||||
"trouble_cors": "Din mailserver skal tillade login fra dette websted. Hvis login mislykkes, så bed den, der driver din mailserver, om at tillade det.",
|
||||
"provider_unsupported": "{provider} tilbyder ikke JMAP, den måde Bulwark taler med mailservere på, så Bulwark kan endnu ikke forbinde direkte til det."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "Ihr Mailserver wird gesucht…",
|
||||
"server_found": "Mailserver: {server}",
|
||||
"server_change": "Ändern",
|
||||
"server_change_hint": "Geben Sie eine andere Serveradresse ein.",
|
||||
"server_not_found": "Für diese Adresse wurde kein Mailserver gefunden. Geben Sie ihn hier ein, zum Beispiel mail.example.com.",
|
||||
"server_needed": "Geben Sie die Adresse Ihres Mailservers ein.",
|
||||
"server_invalid": "Das ist keine Serveradresse. Schreiben Sie sie wie mail.example.com.",
|
||||
"email_needed": "Geben Sie zuerst Ihre E-Mail-Adresse ein.",
|
||||
"other_ways": "Andere Anmeldewege",
|
||||
"trouble": "Probleme?",
|
||||
"trouble_cors": "Ihr Mailserver muss Anmeldungen von dieser Website erlauben. Wenn die Anmeldung nicht klappt, bitten Sie die Betreiber Ihres Mailservers, das zu erlauben.",
|
||||
"provider_unsupported": "{provider} bietet kein JMAP an, die Art, wie Bulwark mit Mailservern spricht. Deshalb kann sich Bulwark noch nicht direkt damit verbinden."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "Looking for your mail server…",
|
||||
"server_found": "Mail server: {server}",
|
||||
"server_change": "Change",
|
||||
"server_change_hint": "Type another server address.",
|
||||
"server_not_found": "We couldn't find the mail server for this address. Enter it here, for example mail.example.com.",
|
||||
"server_needed": "Enter the address of your mail server.",
|
||||
"server_invalid": "This isn't a server address. Type it like mail.example.com.",
|
||||
"email_needed": "Enter your email address first.",
|
||||
"other_ways": "Other ways to sign in",
|
||||
"trouble": "Having trouble?",
|
||||
"trouble_cors": "Your mail server has to allow sign-ins from this website. If signing in fails, ask whoever runs your mail server to allow it.",
|
||||
"provider_unsupported": "{provider} doesn't offer JMAP, the way Bulwark talks to mail servers, so Bulwark can't connect to it directly yet."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "Buscando tu servidor de correo…",
|
||||
"server_found": "Servidor de correo: {server}",
|
||||
"server_change": "Cambiar",
|
||||
"server_change_hint": "Escribe otra dirección de servidor.",
|
||||
"server_not_found": "No encontramos el servidor de correo de esta dirección. Escríbelo aquí, por ejemplo mail.example.com.",
|
||||
"server_needed": "Escribe la dirección de tu servidor de correo.",
|
||||
"server_invalid": "Esto no es la dirección de un servidor. Escríbela como mail.example.com.",
|
||||
"email_needed": "Primero escribe tu dirección de correo.",
|
||||
"other_ways": "Otras formas de iniciar sesión",
|
||||
"trouble": "¿Tienes problemas?",
|
||||
"trouble_cors": "Tu servidor de correo tiene que permitir iniciar sesión desde este sitio web. Si no funciona, pide a quien gestiona tu servidor de correo que lo permita.",
|
||||
"provider_unsupported": "{provider} no ofrece JMAP, la forma en que Bulwark habla con los servidores de correo, así que Bulwark todavía no puede conectarse directamente."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "Otsime sinu meiliserverit…",
|
||||
"server_found": "Meiliserver: {server}",
|
||||
"server_change": "Muuda",
|
||||
"server_change_hint": "Sisestage mõne teise serveri aadress.",
|
||||
"server_not_found": "Sellele aadressile ei leitud meiliserverit. Sisesta see siia, näiteks mail.example.com.",
|
||||
"server_needed": "Sisesta oma meiliserveri aadress.",
|
||||
"server_invalid": "See ei ole serveri aadress. Kirjuta see nagu mail.example.com.",
|
||||
"email_needed": "Sisesta kõigepealt oma e-posti aadress.",
|
||||
"other_ways": "Muud sisselogimise viisid",
|
||||
"trouble": "Probleeme?",
|
||||
"trouble_cors": "Sinu meiliserver peab lubama sisselogimist sellelt veebisaidilt. Kui sisselogimine ei õnnestu, palu meiliserveri haldajal see lubada.",
|
||||
"provider_unsupported": "{provider} ei paku JMAP-i, mille kaudu Bulwark meiliserveritega suhtleb, seega ei saa Bulwark sellega veel otse ühendust luua."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "در حال یافتن سرور ایمیل شما…",
|
||||
"server_found": "سرور ایمیل: {server}",
|
||||
"server_change": "تغییر",
|
||||
"server_change_hint": "نشانی سرور دیگری را بنویسید.",
|
||||
"server_not_found": "سرور ایمیل این نشانی پیدا نشد. آن را اینجا وارد کنید، مثلاً mail.example.com.",
|
||||
"server_needed": "نشانی سرور ایمیل خود را وارد کنید.",
|
||||
"server_invalid": "این نشانی سرور نیست. آن را مثل mail.example.com بنویسید.",
|
||||
"email_needed": "اول نشانی ایمیل خود را وارد کنید.",
|
||||
"other_ways": "راههای دیگر ورود",
|
||||
"trouble": "مشکل دارید؟",
|
||||
"trouble_cors": "سرور ایمیل شما باید ورود از این وبسایت را مجاز کند. اگر ورود انجام نشد، از مسئول سرور ایمیل بخواهید آن را مجاز کند.",
|
||||
"provider_unsupported": "{provider} از JMAP، روشی که Bulwark با سرورهای ایمیل صحبت میکند، پشتیبانی نمیکند؛ پس Bulwark هنوز نمیتواند مستقیم به آن وصل شود."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "Recherche de votre serveur de messagerie…",
|
||||
"server_found": "Serveur de messagerie : {server}",
|
||||
"server_change": "Modifier",
|
||||
"server_change_hint": "Saisissez l'adresse d'un autre serveur.",
|
||||
"server_not_found": "Nous n'avons pas trouvé le serveur de messagerie de cette adresse. Saisissez-le ici, par exemple mail.example.com.",
|
||||
"server_needed": "Saisissez l'adresse de votre serveur de messagerie.",
|
||||
"server_invalid": "Ce n'est pas une adresse de serveur. Écrivez-la comme mail.example.com.",
|
||||
"email_needed": "Saisissez d'abord votre adresse e-mail.",
|
||||
"other_ways": "Autres façons de se connecter",
|
||||
"trouble": "Un problème ?",
|
||||
"trouble_cors": "Votre serveur de messagerie doit autoriser les connexions depuis ce site. Si la connexion échoue, demandez à la personne qui gère votre serveur de l'autoriser.",
|
||||
"provider_unsupported": "{provider} ne propose pas JMAP, la façon dont Bulwark communique avec les serveurs de messagerie, donc Bulwark ne peut pas encore s'y connecter directement."
|
||||
|
||||
@@ -7189,10 +7189,12 @@
|
||||
"server_looking": "מחפשים את שרת הדואר שלך…",
|
||||
"server_found": "שרת דואר: {server}",
|
||||
"server_change": "שינוי",
|
||||
"server_change_hint": "הקלידו כתובת של שרת אחר.",
|
||||
"server_not_found": "לא מצאנו את שרת הדואר של הכתובת הזו. הזינו אותו כאן, למשל mail.example.com.",
|
||||
"server_needed": "הזינו את הכתובת של שרת הדואר שלכם.",
|
||||
"server_invalid": "זו לא כתובת של שרת. כתבו אותה כמו mail.example.com.",
|
||||
"email_needed": "הזינו קודם את כתובת הדוא״ל שלכם.",
|
||||
"other_ways": "דרכים אחרות להתחבר",
|
||||
"trouble": "נתקלתם בבעיה?",
|
||||
"trouble_cors": "שרת הדואר שלכם צריך לאפשר כניסה מהאתר הזה. אם הכניסה נכשלת, בקשו ממי שמפעיל את שרת הדואר לאפשר זאת.",
|
||||
"provider_unsupported": "{provider} לא מציע JMAP, הדרך שבה Bulwark מדבר עם שרתי דואר, ולכן Bulwark עדיין לא יכול להתחבר אליו ישירות."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "A levelezőszerver keresése…",
|
||||
"server_found": "Levelezőszerver: {server}",
|
||||
"server_change": "Módosítás",
|
||||
"server_change_hint": "Írjon be egy másik szervercímet.",
|
||||
"server_not_found": "Ehhez a címhez nem találtunk levelezőszervert. Írja be ide, például mail.example.com.",
|
||||
"server_needed": "Írja be a levelezőszervere címét.",
|
||||
"server_invalid": "Ez nem szervercím. Így írja: mail.example.com.",
|
||||
"email_needed": "Először írja be az e-mail-címét.",
|
||||
"other_ways": "Más bejelentkezési módok",
|
||||
"trouble": "Probléma van?",
|
||||
"trouble_cors": "A levelezőszervernek engedélyeznie kell a bejelentkezést erről a webhelyről. Ha a bejelentkezés nem sikerül, kérje meg a levelezőszerver üzemeltetőjét, hogy engedélyezze.",
|
||||
"provider_unsupported": "A(z) {provider} nem kínál JMAP-ot, azt a módot, ahogyan a Bulwark a levelezőszerverekkel beszél, ezért a Bulwark még nem tud közvetlenül csatlakozni hozzá."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "Ricerca del tuo server di posta…",
|
||||
"server_found": "Server di posta: {server}",
|
||||
"server_change": "Cambia",
|
||||
"server_change_hint": "Scrivi l'indirizzo di un altro server.",
|
||||
"server_not_found": "Non abbiamo trovato il server di posta di questo indirizzo. Inseriscilo qui, per esempio mail.example.com.",
|
||||
"server_needed": "Inserisci l'indirizzo del tuo server di posta.",
|
||||
"server_invalid": "Questo non è l'indirizzo di un server. Scrivilo come mail.example.com.",
|
||||
"email_needed": "Inserisci prima il tuo indirizzo email.",
|
||||
"other_ways": "Altri modi per accedere",
|
||||
"trouble": "Problemi?",
|
||||
"trouble_cors": "Il tuo server di posta deve consentire l'accesso da questo sito. Se l'accesso non riesce, chiedi a chi gestisce il server di posta di consentirlo.",
|
||||
"provider_unsupported": "{provider} non offre JMAP, il modo in cui Bulwark parla con i server di posta, quindi Bulwark non può ancora collegarsi direttamente."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "メールサーバーを探しています…",
|
||||
"server_found": "メールサーバー: {server}",
|
||||
"server_change": "変更",
|
||||
"server_change_hint": "別のサーバーのアドレスを入力してください。",
|
||||
"server_not_found": "このアドレスのメールサーバーが見つかりませんでした。ここに入力してください(例: mail.example.com)。",
|
||||
"server_needed": "メールサーバーのアドレスを入力してください。",
|
||||
"server_invalid": "サーバーのアドレスではありません。mail.example.com のように入力してください。",
|
||||
"email_needed": "まずメールアドレスを入力してください。",
|
||||
"other_ways": "その他のサインイン方法",
|
||||
"trouble": "うまくいかない場合",
|
||||
"trouble_cors": "メールサーバーがこのウェブサイトからのサインインを許可している必要があります。サインインできない場合は、メールサーバーの管理者に許可を依頼してください。",
|
||||
"provider_unsupported": "{provider} は Bulwark がメールサーバーとやり取りする方式である JMAP に対応していないため、Bulwark はまだ直接接続できません。"
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "메일 서버를 찾고 있어요…",
|
||||
"server_found": "메일 서버: {server}",
|
||||
"server_change": "변경",
|
||||
"server_change_hint": "다른 서버 주소를 입력하세요.",
|
||||
"server_not_found": "이 주소의 메일 서버를 찾지 못했어요. 여기에 입력하세요. 예: mail.example.com",
|
||||
"server_needed": "메일 서버 주소를 입력하세요.",
|
||||
"server_invalid": "서버 주소가 아니에요. mail.example.com처럼 입력하세요.",
|
||||
"email_needed": "먼저 이메일 주소를 입력하세요.",
|
||||
"other_ways": "다른 로그인 방법",
|
||||
"trouble": "문제가 있나요?",
|
||||
"trouble_cors": "메일 서버가 이 웹사이트에서의 로그인을 허용해야 해요. 로그인이 안 되면 메일 서버 관리자에게 허용해 달라고 요청하세요.",
|
||||
"provider_unsupported": "{provider}은(는) Bulwark가 메일 서버와 통신하는 방식인 JMAP을 제공하지 않아서, Bulwark가 아직 직접 연결할 수 없어요."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "Meklējam jūsu pasta serveri…",
|
||||
"server_found": "Pasta serveris: {server}",
|
||||
"server_change": "Mainīt",
|
||||
"server_change_hint": "Ierakstiet citu servera adresi.",
|
||||
"server_not_found": "Šai adresei pasta serveri neatradām. Ievadiet to šeit, piemēram, mail.example.com.",
|
||||
"server_needed": "Ievadiet sava pasta servera adresi.",
|
||||
"server_invalid": "Tā nav servera adrese. Rakstiet to kā mail.example.com.",
|
||||
"email_needed": "Vispirms ievadiet savu e-pasta adresi.",
|
||||
"other_ways": "Citi pierakstīšanās veidi",
|
||||
"trouble": "Neizdodas?",
|
||||
"trouble_cors": "Jūsu pasta serverim jāatļauj pieteikšanās no šīs vietnes. Ja pieteikties neizdodas, palūdziet pasta servera uzturētājam to atļaut.",
|
||||
"provider_unsupported": "{provider} nepiedāvā JMAP, veidu, kā Bulwark sazinās ar pasta serveriem, tāpēc Bulwark tam vēl nevar pieslēgties tieši."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "Таны шуудангийн серверийг хайж байна…",
|
||||
"server_found": "Шуудангийн сервер: {server}",
|
||||
"server_change": "Өөрчлөх",
|
||||
"server_change_hint": "Өөр серверийн хаяг бичнэ үү.",
|
||||
"server_not_found": "Энэ хаягийн шуудангийн сервер олдсонгүй. Энд оруулна уу, жишээ нь mail.example.com.",
|
||||
"server_needed": "Шуудангийн серверийнхээ хаягийг оруулна уу.",
|
||||
"server_invalid": "Энэ серверийн хаяг биш байна. mail.example.com гэх мэтээр бичнэ үү.",
|
||||
"email_needed": "Эхлээд имэйл хаягаа оруулна уу.",
|
||||
"other_ways": "Нэвтрэх бусад арга",
|
||||
"trouble": "Асуудал гарч байна уу?",
|
||||
"trouble_cors": "Таны шуудангийн сервер энэ вэб сайтаас нэвтрэхийг зөвшөөрөх ёстой. Нэвтэрч чадахгүй бол шуудангийн серверээ хариуцдаг хүнээс зөвшөөрөхийг хүснэ үү.",
|
||||
"provider_unsupported": "{provider} нь Bulwark шуудангийн сервертэй харилцдаг JMAP-ыг санал болгодоггүй тул Bulwark одоогоор түүнтэй шууд холбогдож чадахгүй."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "Leter etter e-postserveren din…",
|
||||
"server_found": "E-postserver: {server}",
|
||||
"server_change": "Endre",
|
||||
"server_change_hint": "Skriv inn en annen serveradresse.",
|
||||
"server_not_found": "Vi fant ikke e-postserveren for denne adressen. Skriv den inn her, for eksempel mail.example.com.",
|
||||
"server_needed": "Skriv inn adressen til e-postserveren din.",
|
||||
"server_invalid": "Dette er ikke en serveradresse. Skriv den som mail.example.com.",
|
||||
"email_needed": "Skriv inn e-postadressen din først.",
|
||||
"other_ways": "Andre måter å logge på",
|
||||
"trouble": "Problemer?",
|
||||
"trouble_cors": "E-postserveren din må tillate pålogging fra dette nettstedet. Hvis påloggingen mislykkes, be den som drifter e-postserveren om å tillate det.",
|
||||
"provider_unsupported": "{provider} tilbyr ikke JMAP, måten Bulwark snakker med e-postservere på, så Bulwark kan ikke koble seg direkte til det ennå."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "Je mailserver wordt gezocht…",
|
||||
"server_found": "Mailserver: {server}",
|
||||
"server_change": "Wijzigen",
|
||||
"server_change_hint": "Typ een ander serveradres.",
|
||||
"server_not_found": "We hebben de mailserver voor dit adres niet gevonden. Vul hem hier in, bijvoorbeeld mail.example.com.",
|
||||
"server_needed": "Vul het adres van je mailserver in.",
|
||||
"server_invalid": "Dit is geen serveradres. Schrijf het zoals mail.example.com.",
|
||||
"email_needed": "Vul eerst je e-mailadres in.",
|
||||
"other_ways": "Andere manieren om in te loggen",
|
||||
"trouble": "Lukt het niet?",
|
||||
"trouble_cors": "Je mailserver moet aanmelden vanaf deze website toestaan. Lukt aanmelden niet, vraag dan wie je mailserver beheert om het toe te staan.",
|
||||
"provider_unsupported": "{provider} biedt geen JMAP, de manier waarop Bulwark met mailservers praat, dus Bulwark kan er nog niet rechtstreeks mee verbinden."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "Szukamy Twojego serwera poczty…",
|
||||
"server_found": "Serwer poczty: {server}",
|
||||
"server_change": "Zmień",
|
||||
"server_change_hint": "Wpisz adres innego serwera.",
|
||||
"server_not_found": "Nie znaleźliśmy serwera poczty dla tego adresu. Wpisz go tutaj, na przykład mail.example.com.",
|
||||
"server_needed": "Wpisz adres swojego serwera poczty.",
|
||||
"server_invalid": "To nie jest adres serwera. Wpisz go jak mail.example.com.",
|
||||
"email_needed": "Najpierw wpisz swój adres e-mail.",
|
||||
"other_ways": "Inne sposoby logowania",
|
||||
"trouble": "Masz problem?",
|
||||
"trouble_cors": "Twój serwer poczty musi zezwalać na logowanie z tej witryny. Jeśli logowanie się nie udaje, poproś osobę, która zarządza serwerem poczty, o zezwolenie.",
|
||||
"provider_unsupported": "{provider} nie oferuje JMAP, czyli sposobu, w jaki Bulwark rozmawia z serwerami poczty, więc Bulwark nie może jeszcze połączyć się z nim bezpośrednio."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "A procurar o seu servidor de e-mail…",
|
||||
"server_found": "Servidor de e-mail: {server}",
|
||||
"server_change": "Alterar",
|
||||
"server_change_hint": "Escreva outro endereço de servidor.",
|
||||
"server_not_found": "Não encontrámos o servidor de e-mail deste endereço. Escreva-o aqui, por exemplo mail.example.com.",
|
||||
"server_needed": "Escreva o endereço do seu servidor de e-mail.",
|
||||
"server_invalid": "Isto não é o endereço de um servidor. Escreva-o como mail.example.com.",
|
||||
"email_needed": "Escreva primeiro o seu endereço de e-mail.",
|
||||
"other_ways": "Outras formas de iniciar sessão",
|
||||
"trouble": "Tem problemas?",
|
||||
"trouble_cors": "O seu servidor de e-mail tem de permitir inícios de sessão a partir deste site. Se não conseguir entrar, peça a quem gere o servidor de e-mail que o permita.",
|
||||
"provider_unsupported": "{provider} não oferece JMAP, a forma como o Bulwark fala com os servidores de e-mail, por isso o Bulwark ainda não se consegue ligar diretamente."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "Căutăm serverul tău de e-mail…",
|
||||
"server_found": "Server de e-mail: {server}",
|
||||
"server_change": "Schimbă",
|
||||
"server_change_hint": "Scrieți adresa altui server.",
|
||||
"server_not_found": "Nu am găsit serverul de e-mail pentru această adresă. Introdu-l aici, de exemplu mail.example.com.",
|
||||
"server_needed": "Introdu adresa serverului tău de e-mail.",
|
||||
"server_invalid": "Aceasta nu este adresa unui server. Scrie-o ca mail.example.com.",
|
||||
"email_needed": "Introdu mai întâi adresa ta de e-mail.",
|
||||
"other_ways": "Alte moduri de conectare",
|
||||
"trouble": "Ai probleme?",
|
||||
"trouble_cors": "Serverul tău de e-mail trebuie să permită autentificarea de pe acest site. Dacă autentificarea nu reușește, cere celui care administrează serverul să o permită.",
|
||||
"provider_unsupported": "{provider} nu oferă JMAP, modul în care Bulwark comunică cu serverele de e-mail, așa că Bulwark nu se poate conecta încă direct la el."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "Ищем ваш почтовый сервер…",
|
||||
"server_found": "Почтовый сервер: {server}",
|
||||
"server_change": "Изменить",
|
||||
"server_change_hint": "Введите адрес другого сервера.",
|
||||
"server_not_found": "Мы не нашли почтовый сервер для этого адреса. Введите его здесь, например mail.example.com.",
|
||||
"server_needed": "Введите адрес вашего почтового сервера.",
|
||||
"server_invalid": "Это не адрес сервера. Напишите его как mail.example.com.",
|
||||
"email_needed": "Сначала введите адрес электронной почты.",
|
||||
"other_ways": "Другие способы входа",
|
||||
"trouble": "Не получается?",
|
||||
"trouble_cors": "Ваш почтовый сервер должен разрешать вход с этого сайта. Если войти не удаётся, попросите того, кто обслуживает ваш почтовый сервер, разрешить это.",
|
||||
"provider_unsupported": "{provider} не поддерживает JMAP, способ, которым Bulwark общается с почтовыми серверами, поэтому Bulwark пока не может подключиться к нему напрямую."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "Hľadáme váš poštový server…",
|
||||
"server_found": "Poštový server: {server}",
|
||||
"server_change": "Zmeniť",
|
||||
"server_change_hint": "Zadajte adresu iného servera.",
|
||||
"server_not_found": "Pre túto adresu sme poštový server nenašli. Zadajte ho sem, napríklad mail.example.com.",
|
||||
"server_needed": "Zadajte adresu svojho poštového servera.",
|
||||
"server_invalid": "Toto nie je adresa servera. Napíšte ju ako mail.example.com.",
|
||||
"email_needed": "Najprv zadajte svoju e-mailovú adresu.",
|
||||
"other_ways": "Ďalšie spôsoby prihlásenia",
|
||||
"trouble": "Nedarí sa?",
|
||||
"trouble_cors": "Váš poštový server musí povoliť prihlasovanie z tejto webovej stránky. Ak prihlásenie zlyhá, požiadajte správcu poštového servera, aby to povolil.",
|
||||
"provider_unsupported": "{provider} neponúka JMAP, spôsob, akým Bulwark komunikuje s poštovými servermi, takže sa k nemu Bulwark zatiaľ nemôže pripojiť priamo."
|
||||
|
||||
@@ -7196,10 +7196,12 @@
|
||||
"server_looking": "กำลังค้นหาเซิร์ฟเวอร์อีเมลของคุณ…",
|
||||
"server_found": "เซิร์ฟเวอร์อีเมล: {server}",
|
||||
"server_change": "เปลี่ยน",
|
||||
"server_change_hint": "พิมพ์ที่อยู่ของเซิร์ฟเวอร์อื่น",
|
||||
"server_not_found": "ไม่พบเซิร์ฟเวอร์อีเมลของที่อยู่นี้ ป้อนที่นี่ เช่น mail.example.com",
|
||||
"server_needed": "ป้อนที่อยู่เซิร์ฟเวอร์อีเมลของคุณ",
|
||||
"server_invalid": "นี่ไม่ใช่ที่อยู่เซิร์ฟเวอร์ ให้พิมพ์แบบ mail.example.com",
|
||||
"email_needed": "ป้อนที่อยู่อีเมลของคุณก่อน",
|
||||
"other_ways": "วิธีลงชื่อเข้าใช้อื่นๆ",
|
||||
"trouble": "มีปัญหาใช่ไหม",
|
||||
"trouble_cors": "เซิร์ฟเวอร์อีเมลของคุณต้องอนุญาตให้ลงชื่อเข้าใช้จากเว็บไซต์นี้ หากลงชื่อเข้าใช้ไม่ได้ ให้ขอผู้ดูแลเซิร์ฟเวอร์อีเมลอนุญาต",
|
||||
"provider_unsupported": "{provider} ไม่รองรับ JMAP ซึ่งเป็นวิธีที่ Bulwark ใช้คุยกับเซิร์ฟเวอร์อีเมล Bulwark จึงยังเชื่อมต่อโดยตรงไม่ได้"
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "Posta sunucunuz aranıyor…",
|
||||
"server_found": "Posta sunucusu: {server}",
|
||||
"server_change": "Değiştir",
|
||||
"server_change_hint": "Başka bir sunucu adresi yazın.",
|
||||
"server_not_found": "Bu adresin posta sunucusunu bulamadık. Buraya girin, örneğin mail.example.com.",
|
||||
"server_needed": "Posta sunucunuzun adresini girin.",
|
||||
"server_invalid": "Bu bir sunucu adresi değil. mail.example.com gibi yazın.",
|
||||
"email_needed": "Önce e-posta adresinizi girin.",
|
||||
"other_ways": "Diğer oturum açma yolları",
|
||||
"trouble": "Sorun mu var?",
|
||||
"trouble_cors": "Posta sunucunuzun bu web sitesinden oturum açmaya izin vermesi gerekir. Oturum açılamazsa posta sunucunuzu yöneten kişiden buna izin vermesini isteyin.",
|
||||
"provider_unsupported": "{provider}, Bulwark'ın posta sunucularıyla konuştuğu yol olan JMAP'i sunmuyor, bu yüzden Bulwark henüz ona doğrudan bağlanamıyor."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "Шукаємо ваш поштовий сервер…",
|
||||
"server_found": "Поштовий сервер: {server}",
|
||||
"server_change": "Змінити",
|
||||
"server_change_hint": "Введіть адресу іншого сервера.",
|
||||
"server_not_found": "Ми не знайшли поштовий сервер для цієї адреси. Введіть його тут, наприклад mail.example.com.",
|
||||
"server_needed": "Введіть адресу свого поштового сервера.",
|
||||
"server_invalid": "Це не адреса сервера. Напишіть її як mail.example.com.",
|
||||
"email_needed": "Спершу введіть свою адресу електронної пошти.",
|
||||
"other_ways": "Інші способи входу",
|
||||
"trouble": "Не виходить?",
|
||||
"trouble_cors": "Ваш поштовий сервер має дозволяти вхід із цього сайту. Якщо увійти не вдається, попросіть того, хто обслуговує поштовий сервер, дозволити це.",
|
||||
"provider_unsupported": "{provider} не підтримує JMAP, спосіб, у який Bulwark спілкується з поштовими серверами, тому Bulwark поки не може підключитися до нього напряму."
|
||||
|
||||
@@ -7200,10 +7200,12 @@
|
||||
"server_looking": "Đang tìm máy chủ thư của bạn…",
|
||||
"server_found": "Máy chủ thư: {server}",
|
||||
"server_change": "Đổi",
|
||||
"server_change_hint": "Nhập địa chỉ máy chủ khác.",
|
||||
"server_not_found": "Không tìm thấy máy chủ thư cho địa chỉ này. Nhập vào đây, ví dụ mail.example.com.",
|
||||
"server_needed": "Nhập địa chỉ máy chủ thư của bạn.",
|
||||
"server_invalid": "Đây không phải địa chỉ máy chủ. Hãy viết như mail.example.com.",
|
||||
"email_needed": "Hãy nhập địa chỉ email trước.",
|
||||
"other_ways": "Cách đăng nhập khác",
|
||||
"trouble": "Gặp sự cố?",
|
||||
"trouble_cors": "Máy chủ thư của bạn phải cho phép đăng nhập từ trang web này. Nếu đăng nhập không được, hãy nhờ người quản lý máy chủ thư cho phép.",
|
||||
"provider_unsupported": "{provider} không hỗ trợ JMAP, cách Bulwark trao đổi với máy chủ thư, nên Bulwark chưa thể kết nối trực tiếp."
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "正在尋找你的郵件伺服器…",
|
||||
"server_found": "郵件伺服器:{server}",
|
||||
"server_change": "變更",
|
||||
"server_change_hint": "請輸入另一個伺服器位址。",
|
||||
"server_not_found": "找不到這個地址的郵件伺服器。請在這裡輸入,例如 mail.example.com。",
|
||||
"server_needed": "請輸入你的郵件伺服器位址。",
|
||||
"server_invalid": "這不是伺服器位址。請依 mail.example.com 的格式輸入。",
|
||||
"email_needed": "請先輸入你的電子郵件地址。",
|
||||
"other_ways": "其他登入方式",
|
||||
"trouble": "遇到問題?",
|
||||
"trouble_cors": "你的郵件伺服器必須允許從這個網站登入。如果無法登入,請負責郵件伺服器的人允許。",
|
||||
"provider_unsupported": "{provider} 不支援 JMAP(Bulwark 與郵件伺服器溝通的方式),所以 Bulwark 目前還無法直接連線。"
|
||||
|
||||
@@ -7188,10 +7188,12 @@
|
||||
"server_looking": "正在查找你的邮件服务器…",
|
||||
"server_found": "邮件服务器:{server}",
|
||||
"server_change": "更改",
|
||||
"server_change_hint": "请输入另一个服务器地址。",
|
||||
"server_not_found": "没有找到这个地址的邮件服务器。请在这里输入,例如 mail.example.com。",
|
||||
"server_needed": "请输入你的邮件服务器地址。",
|
||||
"server_invalid": "这不是服务器地址。请按 mail.example.com 这样的格式输入。",
|
||||
"email_needed": "请先输入你的邮箱地址。",
|
||||
"other_ways": "其他登录方式",
|
||||
"trouble": "遇到问题?",
|
||||
"trouble_cors": "你的邮件服务器需要允许从这个网站登录。如果登录失败,请让管理邮件服务器的人允许。",
|
||||
"provider_unsupported": "{provider} 不支持 JMAP(Bulwark 与邮件服务器通信的方式),所以 Bulwark 暂时无法直接连接它。"
|
||||
|
||||
Reference in New Issue
Block a user