diff --git a/app/_components/custom-room-id-form.tsx b/app/_components/custom-room-id-form.tsx index 26c885f..933fb02 100644 --- a/app/_components/custom-room-id-form.tsx +++ b/app/_components/custom-room-id-form.tsx @@ -18,17 +18,17 @@ export function CustomRoomIdForm() {
- + setCustomRoomId(e.target.value)} /> - Must start and end with a letter or number. Dashes, underscores, and spaces allowed in between. + 必须以字母或数字开头和结尾。中间允许使用连字符、下划线和空格。
diff --git a/app/globals.css b/app/globals.css index de43ddf..138f0d6 100644 --- a/app/globals.css +++ b/app/globals.css @@ -117,6 +117,7 @@ body { @apply bg-background text-foreground; + font-family: var(--font-inter), "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; } button:not(:disabled), diff --git a/app/host/_components/share-options.tsx b/app/host/_components/share-options.tsx index fc4d570..04bb02b 100644 --- a/app/host/_components/share-options.tsx +++ b/app/host/_components/share-options.tsx @@ -11,25 +11,25 @@ interface ShareOptionsProps { export function ShareOptions({ roomId }: ShareOptionsProps) { function copyRoomId() { navigator.clipboard.writeText(roomId); - toast.success("Room code copied!", { - description: "Share this code with others to let them join your room." + toast.success("房间代码已复制!", { + description: "将此代码分享给他人,让他们加入您的房间。" }); } function copyShareableLink() { const shareableUrl = `${window.location.origin}/join?room=${roomId}`; navigator.clipboard.writeText(shareableUrl); - toast.success("Shareable link copied!", { - description: "Share this link with others to let them join your room directly." + toast.success("共享链接已复制!", { + description: "将此链接分享给他人,让他们直接加入您的房间。" }); } return (
-

Room Code

+

房间代码

- {roomId || "Generating room code..."} + {roomId || "正在生成房间代码..."} @@ -41,14 +41,14 @@ export function ShareOptions({ roomId }: ShareOptionsProps) {
- or +
-

Shareable Link

+

共享链接

- {roomId ? `${window.location.origin}/join?room=${roomId}` : "Generating link..."} + {roomId ? `${window.location.origin}/join?room=${roomId}` : "正在生成链接..."} diff --git a/app/host/page.tsx b/app/host/page.tsx index 25b66c8..fcd2562 100644 --- a/app/host/page.tsx +++ b/app/host/page.tsx @@ -29,7 +29,7 @@ export default function HostPage() { }); newPeer.on("error", (err) => { - toast.error("Failed to create room", { + toast.error("创建房间失败", { description: err.message }); router.push("/"); @@ -47,8 +47,8 @@ export default function HostPage() { }; } catch (error) { console.error("Error initializing peer:", error); - toast.error("Failed to create room", { - description: "Please try again." + toast.error("创建房间失败", { + description: "请重试。" }); router.push("/"); } @@ -58,11 +58,11 @@ export default function HostPage() { if (!peer) return; if (!activeStream && connections.length > 0) { - toast.info("New viewer connected", { - description: "Click to start sharing your screen.", + toast.info("新观众已连接", { + description: "点击开始共享您的屏幕。", duration: Infinity, action: { - label: "Start Sharing", + label: "开始共享", onClick: async () => { try { const stream = await navigator.mediaDevices.getDisplayMedia({ @@ -72,8 +72,8 @@ export default function HostPage() { setActiveStream(stream); } catch (err) { console.error("Screen sharing error:", err); - toast.error("Screen sharing error", { - description: "Failed to start screen sharing. Please try again." + toast.error("屏幕共享错误", { + description: "启动屏幕共享失败。请重试。" }); } } @@ -101,8 +101,8 @@ export default function HostPage() { } setConnections([]); setRoomId(""); - toast.info("Session ended", { - description: "Your screen sharing session has been terminated." + toast.info("会话已结束", { + description: "您的屏幕共享会话已终止。" }); router.push("/"); } @@ -113,7 +113,7 @@ export default function HostPage() { @@ -121,22 +121,22 @@ export default function HostPage() { - Your Screen Sharing Room + 您的屏幕共享房间 - Share your room code or link with others to let them view your screen. To share audio as well, ensure you're using Chrome or Edge, and select the option to share a tab. + 与他人分享您的房间代码或链接,让他们查看您的屏幕。如需同时共享音频,请确保使用 Chrome 或 Edge 浏览器,并选择“共享标签页”选项。
- Current Viewers + 当前观众人数
{connections.length}
{activeStream && ( )}
diff --git a/app/join/page.tsx b/app/join/page.tsx index 07987d3..e3e8fab 100644 --- a/app/join/page.tsx +++ b/app/join/page.tsx @@ -40,8 +40,8 @@ export default function JoinPage() { function joinRoom(roomIdToJoin: string = roomId) { if (!roomIdToJoin.trim()) { - toast.error("Room code required", { - description: "Please enter a valid room code." + toast.error("需要房间代码", { + description: "请输入有效的房间代码。" }); return; } @@ -55,8 +55,8 @@ export default function JoinPage() { const connection = peer.connect(roomIdToJoin); connection.on("open", () => { - toast.success("Connected!", { - description: "Waiting for host to share their screen..." + toast.success("已连接!", { + description: "正在等待房主共享屏幕..." }); }); @@ -71,8 +71,8 @@ export default function JoinPage() { setIsConnecting(false); setRoomId(""); setActiveStream(null); - toast.error("Disconnected", { - description: "The session has been ended." + toast.error("已断开连接", { + description: "会话已结束。" }); }); }); @@ -80,8 +80,8 @@ export default function JoinPage() { peer.on("error", (err) => { console.error("Peer error:", err); setIsConnecting(false); - toast.error("Connection failed", { - description: "Could not connect to the room. Please check the room code and try again." + toast.error("连接失败", { + description: "无法连接到房间。请检查房间代码并重试。" }); }); } @@ -91,7 +91,7 @@ export default function JoinPage() { @@ -99,16 +99,16 @@ export default function JoinPage() { - Join a Room + 加入房间 - Enter the room code to join and view the shared screen + 输入房间代码以加入并查看共享屏幕 {!activeStream ? (
- setRoomId(e.target.value)} disabled={isConnecting} /> + setRoomId(e.target.value)} disabled={isConnecting} />
) : ( diff --git a/app/layout.tsx b/app/layout.tsx index 7bc51d5..062b2e1 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -2,15 +2,17 @@ import { ClarityScript } from "@/components/clarity-script"; import { Toaster } from "@/components/ui/sonner"; import type { Metadata } from "next"; import { Inter } from "next/font/google"; -import Link from "next/link"; import "./globals.css"; -const inter = Inter({ subsets: ["latin"] }); +const inter = Inter({ + subsets: ["latin"], + variable: "--font-inter" +}); export const metadata = { - title: "Screen Share - Share Your Screen Instantly", - description: "Share your screen instantly with anyone using a simple room code. No downloads or sign-ups required.", - keywords: ["screen sharing", "webrtc", "online screen share", "browser screen sharing", "free screen sharing", "share your screen", "share screen", "screen share"], + title: "屏幕共享 - 即时共享您的屏幕", + description: "使用简单的房间代码即可立即与任何人共享您的屏幕。无需下载或注册。", + keywords: ["屏幕共享", "webrtc", "在线屏幕共享", "浏览器屏幕共享", "免费屏幕共享", "共享您的屏幕", "共享屏幕", "屏幕分享"], other: { "google-site-verification": process.env.NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION || "" } @@ -18,22 +20,9 @@ export const metadata = { export default function RootLayout({ children }: { children: React.ReactNode }) { return ( - - -
- {children} -
- Built by{" "} - - Hin - - . The source code is available on{" "} - - Github - - . -
-
+ + +
{children}
diff --git a/app/page.tsx b/app/page.tsx index fc97c3c..70966af 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -9,21 +9,21 @@ export default function Home() { return (
-

Share Your Screen Instantly

-

Create a room, share the code, and start presenting to your audience in seconds.

+

立即共享您的屏幕

+

创建房间,分享代码,即可在几秒钟内向观众进行演示。

- Start Sharing + 开始共享 - Create a room and share your screen with others + 创建房间并与他人共享您的屏幕 - + @@ -32,14 +32,14 @@ export default function Home() { - Join a Room + 加入房间 - Enter a room code to view someone's screen + 输入房间代码以查看他人的屏幕 @@ -47,8 +47,8 @@ export default function Home() {
- Note - Screen sharing isn’t supported on mobile devices. Mobile users can still join a room to view screens shared by others. + 备注 + 移动设备不支持屏幕共享。移动用户仍可以加入房间观看他人共享的屏幕。
); diff --git a/package-lock.json b/package-lock.json index cd0ef06..4c4ad81 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1520,7 +1520,6 @@ "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -1531,7 +1530,6 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -1576,7 +1574,6 @@ "integrity": "sha512-D7DbgGFtsqIPIFMPJwCad9Gfi/hC0PWErRRHFnaCWoEDYi5tQUDiJCTmGUbBiLzjqAck4KcXt9Ayj0CNlIrF+w==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.16.0", "@typescript-eslint/types": "8.16.0", @@ -1797,7 +1794,6 @@ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2699,7 +2695,6 @@ "integrity": "sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", @@ -2788,7 +2783,6 @@ "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "license": "MIT", - "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -2918,7 +2912,6 @@ "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.8", @@ -5392,7 +5385,6 @@ "integrity": "sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -5543,7 +5535,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.1.tgz", "integrity": "sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -5553,7 +5544,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.1.tgz", "integrity": "sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -6392,7 +6382,6 @@ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/package.json b/package.json index c6df9a8..aafbc0f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "share-your-screen", "version": "0.1.0", - "description": "A real-time screen sharing application allowing users to easily share their screen with others with a simple code.", + "description": "一个实时屏幕共享应用程序,允许用户通过简单的代码轻松地与他人共享屏幕。", "private": true, "license": "MIT", "author": "Hin",