From e56dc4bf7bd8a65f3130c2f75d0d1b69d41563e5 Mon Sep 17 00:00:00 2001 From: thislight Date: Fri, 27 Sep 2024 14:15:34 +0800 Subject: [PATCH] Settings: added lang and region picker dialog --- bun.lockb | Bin 239741 -> 240104 bytes package.json | 1 + src/masto/acct.ts | 13 ++-- src/platform/i18n.tsx | 4 +- src/settings/ChooseLang.tsx | 117 +++++++++++++++++++++++++++++++++ src/settings/ChooseRegion.tsx | 110 +++++++++++++++++++++++++++++++ src/settings/Settings.tsx | 113 +++++++++++++++---------------- src/settings/i18n/en.json | 11 +++- src/settings/i18n/zh-Hans.json | 13 ++-- src/timelines/Home.tsx | 9 ++- 10 files changed, 316 insertions(+), 75 deletions(-) create mode 100644 src/settings/ChooseLang.tsx create mode 100644 src/settings/ChooseRegion.tsx diff --git a/bun.lockb b/bun.lockb index 8230f5ff44fe878835dc364611480f661f380f35..25e9097232174094867a4c68f2617eb664c3fb9d 100755 GIT binary patch delta 41211 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 { - const value = accessor(); - if (!value) { - return sessions().map((x) => ({ ...x, inf: x.account.inf })); + try { + const value = accessor(); + if (value) { + return value; + } + } catch (reason) { + console.error("useSignedInProfiles: update acct info failed", reason); } - return value; + + return sessions().map((x) => ({ ...x, inf: x.account.inf })); }, tools, ] as const; diff --git a/src/platform/i18n.tsx b/src/platform/i18n.tsx index a43a574..b31d888 100644 --- a/src/platform/i18n.tsx +++ b/src/platform/i18n.tsx @@ -20,9 +20,9 @@ async function synchronised( await navigator.locks.request(name, callback); } -export const SUPPORTED_LANGS = ["en", "zh-Hans"]; +export const SUPPORTED_LANGS = ["en", "zh-Hans"] as const; -export const SUPPORTED_REGIONS = ["en_US", "en_GB", "zh_CN"]; +export const SUPPORTED_REGIONS = ["en_US", "en_GB", "zh_CN"] as const; const DEFAULT_LANG = "en"; diff --git a/src/settings/ChooseLang.tsx b/src/settings/ChooseLang.tsx new file mode 100644 index 0000000..96a8db9 --- /dev/null +++ b/src/settings/ChooseLang.tsx @@ -0,0 +1,117 @@ +import { createMemo, For, type Component, type JSX } from "solid-js"; +import Scaffold from "../material/Scaffold"; +import { + AppBar, + Checkbox, + IconButton, + List, + ListItem, + ListItemButton, + ListItemSecondaryAction, + ListItemText, + ListSubheader, + Radio, + Switch, + Toolbar, +} from "@suid/material"; +import { Close as CloseIcon } from "@suid/icons-material"; +import iso639_1 from "iso-639-1"; +import { + autoMatchLangTag, + createTranslator, + SUPPORTED_LANGS, +} from "../platform/i18n"; +import { Title } from "../material/typography"; +import type { Template } from "@solid-primitives/i18n"; + +type ChooseLangProps = { + code?: string; + onCodeChange: (ncode?: string) => void; + onClose?: JSX.EventHandlerUnion; +}; + +const ChooseLang: Component = (props) => { + const [t] = createTranslator( + () => import("./i18n/lang-names.json"), + (code) => + import(`./i18n/${code}.json`) as Promise<{ + default: Record & { + ["lang.auto"]: Template<{ detected: string }>; + }; + }>, + ); + + const unsupportedLangCodes = createMemo(() => { + return iso639_1.getAllCodes().filter((x) => !["zh", "en"].includes(x)); + }); + + const matchedLangCode = createMemo(() => autoMatchLangTag()); + + return ( + + + + + + {t("Choose Language")} + + + } + > + + { + props.onCodeChange(props.code ? undefined : matchedLangCode()); + }} + > + + {t("lang.auto", { + detected: t(`lang.${matchedLangCode()}`) ?? matchedLangCode(), + })} + + + + + + {t("Supported")}}> + + {(code) => ( + + {t(`lang.${code}`)} + + + + + )} + + + + {t("Unsupported")}}> + + {(code) => ( + + {iso639_1.getNativeName(code)} + + )} + + + + + ); +}; + +export default ChooseLang; diff --git a/src/settings/ChooseRegion.tsx b/src/settings/ChooseRegion.tsx new file mode 100644 index 0000000..53302d8 --- /dev/null +++ b/src/settings/ChooseRegion.tsx @@ -0,0 +1,110 @@ +import { createMemo, For, type Component, type JSX } from "solid-js"; +import Scaffold from "../material/Scaffold"; +import { + AppBar, + Checkbox, + IconButton, + List, + ListItem, + ListItemButton, + ListItemSecondaryAction, + ListItemText, + ListSubheader, + Radio, + Switch, + Toolbar, +} from "@suid/material"; +import { Close as CloseIcon } from "@suid/icons-material"; +import iso639_1 from "iso-639-1"; +import { + autoMatchLangTag, + autoMatchRegion, + createTranslator, + SUPPORTED_LANGS, + SUPPORTED_REGIONS, +} from "../platform/i18n"; +import { Title } from "../material/typography"; +import type { Template } from "@solid-primitives/i18n"; + +type ChooseRegionProps = { + code?: string; + onCodeChange: (ncode?: string) => void; + onClose?: JSX.EventHandlerUnion; +}; + +const ChooseRegion: Component = (props) => { + const [t] = createTranslator( + () => import("./i18n/lang-names.json"), + (code) => + import(`./i18n/${code}.json`) as Promise<{ + default: Record & { + ["lang.auto"]: Template<{ detected: string }>; + }; + }>, + ); + + const unsupportedLangCodes = createMemo(() => { + return iso639_1.getAllCodes().filter((x) => !["zh", "en"].includes(x)); + }); + + const matchedRegionCode = createMemo(() => autoMatchRegion()); + + return ( + + + + + + {t("Choose Language")} + + + } + > + + { + props.onCodeChange(props.code ? undefined : matchedRegionCode()); + }} + > + + {t("region.auto", { + detected: t(`region.${matchedRegionCode()}`) ?? matchedRegionCode(), + })} + + + + + + + {t("Supported")}}> + + {(code) => ( + + {t(`region.${code}`)} + + + + + )} + + + + + ); +}; + +export default ChooseRegion; diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index bc35b7d..ad9f66b 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -1,4 +1,4 @@ -import { For, Show, type ParentComponent } from "solid-js"; +import { createSignal, For, Show, type ParentComponent } from "solid-js"; import Scaffold from "../material/Scaffold.js"; import { AppBar, @@ -40,10 +40,13 @@ import { useDateFnLocale, } from "../platform/i18n.jsx"; import { type Template } from "@solid-primitives/i18n"; +import BottomSheet from "../material/BottomSheet.jsx"; +import ChooseLang from "./ChooseLang.jsx"; +import ChooseRegion from "./ChooseRegion.jsx"; type Strings = { - ["lang.auto"]: Template<{detected: string}> -} & Record + ["lang.auto"]: Template<{ detected: string }>; +} & Record; const Settings: ParentComponent = () => { const [t] = createTranslator( @@ -51,7 +54,7 @@ const Settings: ParentComponent = () => { import(`./i18n/${code}.json`) as Promise<{ default: Strings; }>, - () => import(`./i18n/lang-names.json`) + () => import(`./i18n/lang-names.json`), ); const navigate = useNavigate(); const settings$ = useStore($settings); @@ -59,6 +62,8 @@ const Settings: ParentComponent = () => { needRefresh: [needRefresh], } = useRegisterSW(); const dateFnLocale = useDateFnLocale(); + const [langPickerOpen, setLangPickerOpen] = createSignal(false); + const [regionPickerOpen, setRegionPickerOpen] = createSignal(false); const [profiles] = useSignedInProfiles(); @@ -98,7 +103,7 @@ const Settings: ParentComponent = () => { {t("All Notifications")} - + @@ -114,13 +119,13 @@ const Settings: ParentComponent = () => { {t("Notifications")} - + - + {t("Sign out")} @@ -150,65 +155,55 @@ const Settings: ParentComponent = () => {
  • {t("This Application")} - + - {t("Language")} - - { - $settings.setKey( - "language", - e.currentTarget.value === "xauto" - ? undefined - : e.currentTarget.value, - ); - }} - > - - - {(code) => } - - - - + + {t("Language")} + + + + $settings.setKey("language", nval)} + onClose={[setLangPickerOpen, false]} + /> + - + - {t("Region")} - - { - $settings.setKey( - "region", - e.currentTarget.value === "xauto" - ? undefined - : e.currentTarget.value, - ); - }} - > - - - {(code) => ( - - )} - - - - + + {t("Region")} + + + + $settings.setKey("region", nval)} + onClose={[setRegionPickerOpen, false]} + /> + diff --git a/src/settings/i18n/en.json b/src/settings/i18n/en.json index 1149933..095bc04 100644 --- a/src/settings/i18n/en.json +++ b/src/settings/i18n/en.json @@ -14,12 +14,17 @@ "version": "Using v{{packageVersion}} (built on {{builtAt}}, {{buildMode}})", "Language": "Language", "Region": "Region", - "lang.auto": "Auto({{detected}})", - "region.auto": "Auto({{detected}})", + "lang.auto": "(Auto) {{detected}}", + "region.auto": "(Auto) {{detected}}", "region.en_GB": "Great Britan (English)", "region.en_US": "United States (English)", "region.zh_CN": "China Mainland (Chinese)", "datefmt": "yyyy/MM/dd", "Sign out": "Sign out", - "Notifications": "Notifications" + "Notifications": "Notifications", + + "Choose Language": "Choose Language", + "Supported": "Supported", + "Unsupported": "Unsupported", + "Choose Region": "Choose Region" } \ No newline at end of file diff --git a/src/settings/i18n/zh-Hans.json b/src/settings/i18n/zh-Hans.json index 4d046df..8fd70d1 100644 --- a/src/settings/i18n/zh-Hans.json +++ b/src/settings/i18n/zh-Hans.json @@ -1,6 +1,6 @@ { "Settings": "设置", - "Accounts": "所有账号", + "Accounts": "所有账户", "All Notifications": "所有通知", "Sign in...": "登录新账户...", "Reading": "阅读", @@ -14,12 +14,17 @@ "version": "正在使用 v{{packageVersion}} ({{builtAt}}构建, {{buildMode}})", "Language": "语言", "Region": "区域", - "lang.auto": "自动({{detected}})", - "region.auto": "自动({{detected}})", + "lang.auto": "(自动){{detected}}", + "region.auto": "(自动){{detected}}", "region.en_GB": "英国和苏格兰(英语)", "region.en_US": "美国(英语)", "region.zh_CN": "中国大陆(中文)", "datefmt": "yyyy年MM月dd日", "Sign out": "登出此账户", - "Notifications": "通知" + "Notifications": "通知", + + "Choose Language": "选择语言", + "Supported": "已支持", + "Unsupported": "尚未支持", + "Choose Region": "选择区域" } \ No newline at end of file diff --git a/src/timelines/Home.tsx b/src/timelines/Home.tsx index c09023d..b83de4d 100644 --- a/src/timelines/Home.tsx +++ b/src/timelines/Home.tsx @@ -10,7 +10,8 @@ import { children, Suspense, Match, - Switch as JsSwitch + Switch as JsSwitch, + ErrorBoundary } from "solid-js"; import { useDocumentTitle } from "../utils"; import { type mastodon } from "masto"; @@ -125,7 +126,9 @@ const TimelinePanel: Component<{ }; return ( - <> + { + return

    Oops: {String(err)}

    + }}> - +
    ); };