Use American English spelling throughout
This commit is contained in:
@@ -7,7 +7,7 @@ import { t as translate, tNode } from "@/lib/i18n";
|
||||
import { isEnforced } from "@/lib/settingsPolicy";
|
||||
|
||||
/**
|
||||
* A swatch for each palette, drawn from the colours that palette actually
|
||||
* A swatch for each palette, drawn from the colors that palette actually
|
||||
* paints, so a card looks like what picking it does. Kept as data rather than
|
||||
* inline ternaries so a sixth palette does not mean editing a conditional in
|
||||
* three places.
|
||||
@@ -107,20 +107,20 @@ export function AppearanceSettings() {
|
||||
})}
|
||||
</div>
|
||||
<p className="hint" style={{ marginTop: 10 }}>
|
||||
{translate("Palettes named after another project are that project's work, used under its own license; the shades between their published colours are derived, and every one is checked for contrast. The accent colour below still applies over any of them.")}
|
||||
{translate("Palettes named after another project are that project's work, used under its own license; the shades between their published colors are derived, and every one is checked for contrast. The accent color below still applies over any of them.")}
|
||||
</p>
|
||||
<Switch
|
||||
checked={s.themeMessageBody}
|
||||
onChange={(v) => update({ themeMessageBody: v })}
|
||||
label={translate("Apply the theme to messages too")}
|
||||
hint={translate("Plain-text mail already follows the theme. With this on, HTML mail that brings no colours of its own does as well, instead of sitting on a white card. Messages that style themselves are left exactly as the sender designed them.")}
|
||||
hint={translate("Plain-text mail already follows the theme. With this on, HTML mail that brings no colors of its own does as well, instead of sitting on a white card. Messages that style themselves are left exactly as the sender designed them.")}
|
||||
/>
|
||||
<Switch
|
||||
checked={s.themeStyledMessages}
|
||||
disabled={!s.themeMessageBody}
|
||||
onChange={(v) => update({ themeStyledMessages: v })}
|
||||
label={translate("Apply it even to mail that styles itself")}
|
||||
hint={translate("Most marketing and receipt mail sets a colour somewhere, so the setting above leaves nearly all of it on a white card. With this on, the theme is forced over the sender's own colours: backgrounds they laid the message on are dropped, while buttons and coloured banners are kept so their text stays readable. Some mail will not survive it intact, which is why it is separate.")}
|
||||
hint={translate("Most marketing and receipt mail sets a color somewhere, so the setting above leaves nearly all of it on a white card. With this on, the theme is forced over the sender's own colors: backgrounds they laid the message on are dropped, while buttons and colored banners are kept so their text stays readable. Some mail will not survive it intact, which is why it is separate.")}
|
||||
/>
|
||||
|
||||
<h2>{translate("Accent color")}</h2>
|
||||
@@ -209,7 +209,7 @@ export function AppearanceSettings() {
|
||||
</div>
|
||||
</div>
|
||||
{/*
|
||||
Said once, where it is relevant, rather than greying the pickers out on
|
||||
Said once, where it is relevant, rather than graying the pickers out on
|
||||
a desktop: the settings are real and worth setting here for the phone
|
||||
that will read them, and a disabled control invites a hunt for whatever
|
||||
would enable it.
|
||||
|
||||
@@ -47,7 +47,7 @@ export function CalendarSettings() {
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<h2>{t("Colour categories")}</h2>
|
||||
<h2>{t("Color categories")}</h2>
|
||||
<p className="hint">{t("Outlook-style categories you can assign to events from the right-click menu or the event editor. The category name is stored on the event, so it syncs to other clients.")}</p>
|
||||
{s.eventCategories.map((c, i) => (
|
||||
<div key={c.name} className="card">
|
||||
|
||||
@@ -12,12 +12,12 @@ import { mailboxDisplayPath } from "@/lib/mailboxName";
|
||||
/*
|
||||
* Roles a folder can be given here.
|
||||
*
|
||||
* These are the three that ihasmail's own behaviour depends on and that
|
||||
* These are the three that ihasmail's own behavior depends on and that
|
||||
* Stalwart will let move. Inbox, Junk and Trash are absent on purpose: 0.16.20
|
||||
* refuses them outright -- "You are not allowed to change the role of Inbox,
|
||||
* Junk or Trash folders" -- so offering them would only produce an error.
|
||||
*
|
||||
* `label` rather than a bare string so the catalogue sees them: they are
|
||||
* `label` rather than a bare string so the catalog sees them: they are
|
||||
* translated where they render.
|
||||
*/
|
||||
const SETTABLE_ROLES: { value: Exclude<MailboxRole, null>; label: string }[] = [
|
||||
@@ -110,7 +110,7 @@ export function FoldersSettings() {
|
||||
<td>{m.unreadEmails.toLocaleString()}</td>
|
||||
<td>
|
||||
<div className="row" style={{ justifyContent: "flex-end", gap: 0 }}>
|
||||
<button className="icon-btn sm" title={t("Rename")} disabled={Boolean(m.role) && m.role !== "subscribed"} onClick={async () => { const n = await // The server's own name, never the localised one: this box writes
|
||||
<button className="icon-btn sm" title={t("Rename")} disabled={Boolean(m.role) && m.role !== "subscribed"} onClick={async () => { const n = await // The server's own name, never the localized one: this box writes
|
||||
// back whatever it is prefilled with.
|
||||
promptDialog({ title: t("Rename folder"), defaultValue: m.name }); if (n?.trim() && n !== m.name) { try { await useMail.getState().updateMailbox(m.id, { name: n.trim() }); } catch (err) { toast.error((err as Error).message); } } }}><Pencil size={16} /></button>
|
||||
<button className="icon-btn sm" title={m.isSubscribed ? t("Hide") : t("Show")} disabled={m.role === "inbox"} onClick={() => void useMail.getState().updateMailbox(m.id, { isSubscribed: !m.isSubscribed })}>{m.isSubscribed ? <EyeOff size={16} /> : <Eye size={16} />}</button>
|
||||
|
||||
@@ -25,7 +25,7 @@ export function LabelsSettings() {
|
||||
return (
|
||||
<div>
|
||||
<h1>{t("Labels")}</h1>
|
||||
<p className="lead">{t("Labels are IMAP keywords stored on your messages, so every other client sees them. Names, colours and nesting are ihasmail\u2019s own and follow your account. Nesting is display only \u2014 it rewrites nothing in the mailbox.")}</p>
|
||||
<p className="lead">{t("Labels are IMAP keywords stored on your messages, so every other client sees them. Names, colors and nesting are ihasmail\u2019s own and follow your account. Nesting is display only \u2014 it rewrites nothing in the mailbox.")}</p>
|
||||
{labels.map((l) => (
|
||||
<div key={l.keyword} className="card">
|
||||
<div className="card-head">
|
||||
|
||||
@@ -20,7 +20,7 @@ import { isEnforced } from "@/lib/settingsPolicy";
|
||||
* two similar words next to each other in a nav is how a menu becomes
|
||||
* something people hunt through: that section is credentials and access --
|
||||
* password, two-factor, app passwords, live sessions. This one is how the app
|
||||
* behaves towards the reader and towards senders.
|
||||
* behaves toward the reader and toward senders.
|
||||
*/
|
||||
export function PrivacySettings() {
|
||||
const s = useSettings((st) => st.settings);
|
||||
@@ -155,7 +155,7 @@ export function PrivacySettings() {
|
||||
/**
|
||||
* A list of domains, added one at a time and removed by their chip.
|
||||
*
|
||||
* Typed entries are normalised on the way in -- a leading `@`, stray case, a
|
||||
* Typed entries are normalized on the way in -- a leading `@`, stray case, a
|
||||
* whole address pasted instead of a domain -- because the thing being compared
|
||||
* against is a hostname, and a list holding "@Example.com " silently matches
|
||||
* nothing at all.
|
||||
|
||||
@@ -23,7 +23,7 @@ export function ShortcutsSettings() {
|
||||
<div key={group}>
|
||||
{/* Group names and descriptions are registered in English at the
|
||||
call sites -- see views/Shortcuts.tsx -- because the binding
|
||||
table is data, not markup, and the English is the catalogue
|
||||
table is data, not markup, and the English is the catalog
|
||||
key. Translating at render keeps the registration simple and
|
||||
means a binding added anywhere is translatable without the
|
||||
registrar knowing about i18n. */}
|
||||
|
||||
@@ -133,7 +133,7 @@ describe("Privacy & safety", () => {
|
||||
expect(host.textContent).toContain("Open links to these domains without asking");
|
||||
});
|
||||
|
||||
it("normalises a typed domain, so the list holds something that can match", async () => {
|
||||
it("normalizes a typed domain, so the list holds something that can match", async () => {
|
||||
await act(async () => {
|
||||
useSettings.setState({ settings: { ...DEFAULT_SETTINGS, externalLinkWarning: true } });
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user