Call the app by its name in every sentence that names it (#406)
APP_NAME renames an instance, but only the sign-in page, the title bar and
a few headings used it. Two dozen sentences wrote "ihasmail" into
themselves, so a renamed instance still told people to keep an ihasmail
tab open and offered to open mail links "in ihasmail".
Those sentences now take the name as {app}, which also lets a translator
put it where their language wants it. brand.ts grew useAppName() for
components and currentAppName() for the few places that build strings
outside React.
Left as they are: the Files folder "ihasmail", the Sieve script
"ihasmail" and ihasmail.org. Those name things a person can go and look
at, and renaming them would rename real data.
All nine catalogues keep their translations: the name inside each one
became the placeholder. Three of the strings had no translation before
and still fall back to English.
A test walks the sources and the catalogues so a new sentence can't
hard-code the name again.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { useSettings } from "@/store/settings";
|
||||
import { useAppName } from "@/lib/brand";
|
||||
import { PALETTES, effectiveMode, type Mode, type PaletteId } from "@/lib/palette";
|
||||
import { Switch, useIsTouch } from "@/ui/misc";
|
||||
import { SWIPE_CHOICES, type SwipeAction } from "@/lib/input/swipe";
|
||||
@@ -75,6 +76,7 @@ const ACCENTS = [
|
||||
];
|
||||
|
||||
export function AppearanceSettings() {
|
||||
const appName = useAppName();
|
||||
const s = useSettings((st) => st.settings);
|
||||
const update = useSettings((st) => st.update);
|
||||
const prefersDark = Boolean(window.matchMedia?.("(prefers-color-scheme: dark)").matches);
|
||||
@@ -84,7 +86,7 @@ export function AppearanceSettings() {
|
||||
return (
|
||||
<div>
|
||||
<h1>{translate("Appearance")}</h1>
|
||||
<p className="lead">{translate("Make ihasmail yours.")}</p>
|
||||
<p className="lead">{translate("Make {app} yours.", { app: appName })}</p>
|
||||
<h2>{translate("Theme")}</h2>
|
||||
<div className="mode-switch" role="group" aria-label={translate("Light or dark")}>
|
||||
{MODES.map((m) => (
|
||||
@@ -178,7 +180,7 @@ export function AppearanceSettings() {
|
||||
</p>
|
||||
)}
|
||||
<p className="hint">
|
||||
{translate("Only languages ihasmail has been translated into appear here, so this list grows as translations land rather than ahead of them — a language offered without strings behind it would leave the page claiming to be in a language it is not.")}
|
||||
{translate("Only languages {app} has been translated into appear here, so this list grows as translations land rather than ahead of them — a language offered without strings behind it would leave the page claiming to be in a language it is not.", { app: appName })}
|
||||
</p>
|
||||
<p className="hint">
|
||||
|
||||
|
||||
Reference in New Issue
Block a user