761921684c
- Hook (useConnectionFeedback):
- Add SLOW_RTC_MS=8000 timer when entering negotiating
- Foreground-only; pending while hidden; show once per negotiation attempt
- Clear timers on connect/disconnect; reset attempt flags when leaving negotiating
- Cleanup timers on unmount
- i18n:
- Add required key ClipboardApp.rtc_slow to types
- Provide translations for zh, en, ja, es, de, fr, ko
- Docs:
- flows.zh-CN: add UI connection feedback state machine covering
join_inProgress (immediate), join_slow (3s), join_timeout (15s),
rtc_negotiating, rtc_slow (8s), rtc_connected, rtc_reconnecting, rtc_restored;
document equivalent success signals and visibility gating
- code-map.zh-CN: outline responsibilities/locations for useRoomManager (join slow/timeout)
and useConnectionFeedback (negotiation slow, reconnect/restored)
347 lines
6.7 KiB
TypeScript
347 lines
6.7 KiB
TypeScript
// types/messages.ts
|
|
|
|
export type MetaData = {
|
|
title: string;
|
|
description: string;
|
|
keywords?: string;
|
|
};
|
|
|
|
export type Meta = {
|
|
home: MetaData;
|
|
about: MetaData;
|
|
faq: MetaData;
|
|
features: MetaData;
|
|
help: MetaData;
|
|
privacy: MetaData;
|
|
terms: MetaData;
|
|
blog: MetaData;
|
|
};
|
|
|
|
export type Header = {
|
|
Home_dis: string;
|
|
Blog_dis: string;
|
|
About_dis: string;
|
|
Help_dis: string;
|
|
FAQ_dis: string;
|
|
Features_dis: string;
|
|
Terms_dis: string;
|
|
Privacy_dis: string;
|
|
};
|
|
|
|
export type Footer = {
|
|
CopyrightNotice: string;
|
|
Terms_dis: string;
|
|
Privacy_dis: string;
|
|
SupportedLanguages: string;
|
|
};
|
|
|
|
export type Privacy = {
|
|
PrivacyPolicy_dis: string;
|
|
h1: string;
|
|
h1_P: string;
|
|
h2_1: string;
|
|
h2_1_P: string;
|
|
h2_2: string;
|
|
h2_2_P: string;
|
|
h2_3: string;
|
|
h2_3_P: string;
|
|
h2_4: string;
|
|
h2_4_P: string;
|
|
h2_5: string;
|
|
h2_5_P: string;
|
|
};
|
|
|
|
export type Terms = {
|
|
TermsOfUse_dis: string;
|
|
h1: string;
|
|
h1_P: string;
|
|
h2_1: string;
|
|
h2_1_P: string;
|
|
h2_2: string;
|
|
h2_2_P: string;
|
|
h2_3: string;
|
|
h2_3_P: string;
|
|
h2_4: string;
|
|
h2_4_P: string;
|
|
h2_5: string;
|
|
h2_5_P: string;
|
|
};
|
|
|
|
export type Help = {
|
|
Help_dis: string;
|
|
h1: string;
|
|
h1_P: string;
|
|
h2_1: string;
|
|
h2_1_P1: string;
|
|
h2_1_P2: string;
|
|
h2_2: string;
|
|
h2_2_P: string;
|
|
h2_3: string;
|
|
h2_3_P: string;
|
|
};
|
|
|
|
export type About = {
|
|
h1: string;
|
|
P1: string;
|
|
P2: string;
|
|
P3: string;
|
|
P4: string;
|
|
P5: string;
|
|
};
|
|
|
|
export type HowItWorks = {
|
|
h2: string;
|
|
h2_P: string;
|
|
btn_try: string;
|
|
step1_title: string;
|
|
step1_description: string;
|
|
step2_title: string;
|
|
step2_description: string;
|
|
step3_title: string;
|
|
step3_description: string;
|
|
};
|
|
|
|
export type SystemDiagram = {
|
|
h2: string;
|
|
h2_P: string;
|
|
};
|
|
|
|
export type BlogTexts = {
|
|
list_title: string;
|
|
list_subtitle: string;
|
|
recent_posts: string;
|
|
tags: string;
|
|
read_more: string;
|
|
by: string;
|
|
post_not_found: string;
|
|
toc_title: string;
|
|
tag_title_prefix: string;
|
|
tag_subtitle_template: string; // use {tag} as placeholder
|
|
tag_empty: string;
|
|
};
|
|
|
|
export type KeyFeatures = {
|
|
h2: string;
|
|
h3_1: string;
|
|
h3_1_P: string;
|
|
h3_2: string;
|
|
h3_2_P: string;
|
|
h3_3: string;
|
|
h3_3_P: string;
|
|
h3_4: string;
|
|
h3_4_P: string;
|
|
h3_5: string;
|
|
h3_5_P: string;
|
|
h3_6: string;
|
|
h3_6_P: string;
|
|
};
|
|
|
|
export type FAQ = {
|
|
FAQ_dis: string;
|
|
question_0: string;
|
|
answer_0: string;
|
|
question_1: string;
|
|
answer_1: string;
|
|
question_2: string;
|
|
answer_2: string;
|
|
question_3: string;
|
|
answer_3: string;
|
|
question_4: string;
|
|
answer_4: string;
|
|
question_5: string;
|
|
answer_5: string;
|
|
question_6: string;
|
|
answer_6: string;
|
|
question_7: string;
|
|
answer_7: string;
|
|
question_8: string;
|
|
answer_8: string;
|
|
question_9: string;
|
|
answer_9: string;
|
|
question_10: string;
|
|
answer_10: string;
|
|
question_11: string;
|
|
answer_11: string;
|
|
question_12: string;
|
|
answer_12: string;
|
|
question_13: string;
|
|
answer_13: string;
|
|
};
|
|
|
|
export type ClipboardBtn = {
|
|
Pasted_dis: string;
|
|
Copied_dis: string;
|
|
};
|
|
|
|
export type FileUploadHandler = {
|
|
NoFileChosen_tips: string;
|
|
fileChosen_tips_template: string;
|
|
chooseFileTips: string;
|
|
dragTips: string;
|
|
chosenDiagTitle: string;
|
|
chosenDiagDescription: string;
|
|
SelectFile_dis: string;
|
|
SelectFolder_dis: string;
|
|
};
|
|
|
|
export type FileTransferButton = {
|
|
SavedToDisk_tips: string;
|
|
CurrentFileTransferring_tips: string;
|
|
OtherFileTransferring_tips: string;
|
|
download_tips: string;
|
|
PendingSave_tips: string;
|
|
Saved_dis: string;
|
|
Waiting_dis: string;
|
|
Download_dis: string;
|
|
Save_dis: string;
|
|
};
|
|
|
|
export type FileListDisplay = {
|
|
sending_dis: string;
|
|
receiving_dis: string;
|
|
finish_dis: string;
|
|
delete_dis: string;
|
|
downloadNum_dis: string;
|
|
folder_tips_template: string;
|
|
folder_dis_template: string;
|
|
PopupDialog_title: string;
|
|
PopupDialog_description: string;
|
|
chooseSavePath_tips: string;
|
|
chooseSavePath_dis: string;
|
|
};
|
|
|
|
export type RetrieveMethod = {
|
|
P: string;
|
|
RoomId_tips: string;
|
|
copyRoomId_tips: string;
|
|
url_tips: string;
|
|
copyUrl_tips: string;
|
|
scanQR_tips: string;
|
|
Copied_dis: string;
|
|
Copy_QR_dis: string;
|
|
download_QR_dis: string;
|
|
};
|
|
|
|
export type RoomCheck = {
|
|
empty_msg: string;
|
|
available_msg: string;
|
|
notAvailable_msg: string;
|
|
};
|
|
|
|
export type JoinRoom = {
|
|
EmptyMsg: string;
|
|
DuplicateMsg: string;
|
|
successMsg: string;
|
|
notExist: string;
|
|
failMsg: string;
|
|
};
|
|
|
|
export type RoomStatus = {
|
|
senderEmptyMsg: string;
|
|
receiverEmptyMsg: string;
|
|
onlyOneMsg: string;
|
|
peopleMsg_template: string;
|
|
connected_dis: string;
|
|
senderDisconnectedMsg: string;
|
|
leftRoomMsg: string;
|
|
leaveRoomBtn: string;
|
|
};
|
|
|
|
export type ClipboardAppHtml = {
|
|
senderTab: string;
|
|
retrieveTab: string;
|
|
shareTitle_dis: string;
|
|
retrieveTitle_dis: string;
|
|
RoomStatus_dis: string;
|
|
Paste_dis: string;
|
|
Copy_dis: string;
|
|
inputRoomIdprompt: string;
|
|
joinRoomBtn: string;
|
|
generateSimpleId_tips: string;
|
|
generateRandomId_tips: string;
|
|
readClipboardToRoomId: string;
|
|
enterRoomID_placeholder: string;
|
|
retrieveMethod: string;
|
|
inputRoomId_tips: string;
|
|
joinRoom_dis: string;
|
|
SyncSending_loadingText: string;
|
|
SyncSending_dis: string;
|
|
readClipboard_dis: string;
|
|
retrieveRoomId_placeholder: string;
|
|
RetrieveMethodTitle: string;
|
|
// New: cached ID utilities
|
|
saveId_dis: string;
|
|
useCachedId_dis: string;
|
|
saveId_tips: string;
|
|
useCachedId_tips: string;
|
|
};
|
|
|
|
export type ClipboardApp = {
|
|
fetchRoom_err: string;
|
|
roomCheck: RoomCheck;
|
|
channelOpen_msg: string;
|
|
waitting_tips: string;
|
|
joinRoom: JoinRoom;
|
|
pickSaveMsg: string;
|
|
pickSaveUnsupported: string;
|
|
pickSaveSuccess: string;
|
|
pickSaveError: string;
|
|
roomStatus: RoomStatus;
|
|
html: ClipboardAppHtml;
|
|
fileExistMsg?: string;
|
|
noFilesForFolderMsg?: string;
|
|
zipError?: string;
|
|
fileNotFoundMsg?: string;
|
|
confirmLeaveWhileTransferring: string;
|
|
leaveWhileTransferringSuccess: string;
|
|
// New: cache messages
|
|
saveId_success: string;
|
|
// UI connection feedback
|
|
join_inProgress: string;
|
|
join_slow: string;
|
|
join_timeout: string;
|
|
// Slow P2P negotiation hint
|
|
rtc_slow: string;
|
|
rtc_negotiating: string;
|
|
rtc_connected: string;
|
|
rtc_reconnecting: string;
|
|
rtc_restored: string;
|
|
};
|
|
|
|
export type Home = {
|
|
h1: string;
|
|
h1P: string;
|
|
h2_screenOnly: string;
|
|
h2_demo: string;
|
|
h2P_demo: string;
|
|
watch_tips: string;
|
|
youtube_tips: string;
|
|
bilibili_tips: string;
|
|
};
|
|
|
|
export type Text = {
|
|
Header: Header;
|
|
Footer: Footer;
|
|
privacy: Privacy;
|
|
terms: Terms;
|
|
help: Help;
|
|
about: About;
|
|
HowItWorks: HowItWorks;
|
|
SystemDiagram: SystemDiagram;
|
|
KeyFeatures: KeyFeatures;
|
|
faqs: FAQ;
|
|
clipboard_btn: ClipboardBtn;
|
|
fileUploadHandler: FileUploadHandler;
|
|
FileTransferButton: FileTransferButton;
|
|
FileListDisplay: FileListDisplay;
|
|
RetrieveMethod: RetrieveMethod;
|
|
ClipboardApp: ClipboardApp;
|
|
home: Home;
|
|
blog: BlogTexts;
|
|
};
|
|
|
|
export type Messages = {
|
|
meta: Meta;
|
|
text: Text;
|
|
};
|