diff --git a/.env.example b/.env.example index 61c94ca..ce50312 100644 --- a/.env.example +++ b/.env.example @@ -5,4 +5,5 @@ NEXT_PUBLIC_NezhaFetchInterval=5000 NEXT_PUBLIC_ShowFlag=true NEXT_PUBLIC_DisableCartoon=false NEXT_PUBLIC_ShowTag=true -NEXT_PUBLIC_ShowNetTransfer=false \ No newline at end of file +NEXT_PUBLIC_ShowNetTransfer=false +NEXT_PUBLIC_ForceUseSvgFlag=false \ No newline at end of file diff --git a/README.md b/README.md index 50a23fb..896ae0a 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ | NEXT_PUBLIC_DisableCartoon | 是否禁用卡通人物 | **默认**:false | | NEXT_PUBLIC_ShowTag | 是否显示标签 | **默认**:false | | NEXT_PUBLIC_ShowNetTransfer | 是否显示流量信息 | **默认**:false | +| NEXT_PUBLIC_ForceUseSvgFlag | 是否强制使用SVG显示旗帜 | **默认**:false | #### 多语言支持 diff --git a/components/ServerCard.tsx b/components/ServerCard.tsx index 7d8688a..f028720 100644 --- a/components/ServerCard.tsx +++ b/components/ServerCard.tsx @@ -9,9 +9,9 @@ import { PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; +import getEnv from "@/lib/env-entry"; import { cn, formatBytes, formatNezhaInfo } from "@/lib/utils"; import { useLocale, useTranslations } from "next-intl"; -import { env } from "next-runtime-env"; import { useRouter } from "next/navigation"; export default function ServerCard({ @@ -24,9 +24,9 @@ export default function ServerCard({ const { id, name, country_code, online, cpu, up, down, mem, stg, ...props } = formatNezhaInfo(serverInfo); - const showFlag = env("NEXT_PUBLIC_ShowFlag") === "true"; + const showFlag = getEnv("NEXT_PUBLIC_ShowFlag") === "true"; - const showNetTransfer = env("NEXT_PUBLIC_ShowNetTransfer") === "true"; + const showNetTransfer = getEnv("NEXT_PUBLIC_ShowNetTransfer") === "true"; const locale = useLocale(); diff --git a/components/ServerFlag.tsx b/components/ServerFlag.tsx index 9f8d90b..74bb09b 100644 --- a/components/ServerFlag.tsx +++ b/components/ServerFlag.tsx @@ -1,10 +1,19 @@ +import getEnv from "@/lib/env-entry"; import getUnicodeFlagIcon from "country-flag-icons/unicode"; import { useEffect, useState } from "react"; export default function ServerFlag({ country_code }: { country_code: string }) { const [supportsEmojiFlags, setSupportsEmojiFlags] = useState(false); + const useSvgFlag = getEnv("NEXT_PUBLIC_ForceUseSvgFlag") === "true"; + useEffect(() => { + if (useSvgFlag) { + // 如果环境变量要求直接使用 SVG,则无需检查 Emoji 支持 + setSupportsEmojiFlags(false); + return; + } + const checkEmojiSupport = () => { const canvas = document.createElement("canvas"); const ctx = canvas.getContext("2d"); @@ -20,7 +29,7 @@ export default function ServerFlag({ country_code }: { country_code: string }) { }; checkEmojiSupport(); - }, []); + }, [useSvgFlag]); // 将 `useSvgFlag` 作为依赖,当其变化时重新触发 if (!country_code) return null; @@ -30,7 +39,7 @@ export default function ServerFlag({ country_code }: { country_code: string }) { return ( - {!supportsEmojiFlags ? ( + {useSvgFlag || !supportsEmojiFlags ? ( ) : ( getUnicodeFlagIcon(country_code) diff --git a/docker/.env.example b/docker/.env.example index 61c94ca..ce50312 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -5,4 +5,5 @@ NEXT_PUBLIC_NezhaFetchInterval=5000 NEXT_PUBLIC_ShowFlag=true NEXT_PUBLIC_DisableCartoon=false NEXT_PUBLIC_ShowTag=true -NEXT_PUBLIC_ShowNetTransfer=false \ No newline at end of file +NEXT_PUBLIC_ShowNetTransfer=false +NEXT_PUBLIC_ForceUseSvgFlag=false \ No newline at end of file