diff --git a/src/components/messageStream/utils/downloadFile.ts b/src/components/messageStream/utils/downloadFile.ts index a1787ff..326d604 100644 --- a/src/components/messageStream/utils/downloadFile.ts +++ b/src/components/messageStream/utils/downloadFile.ts @@ -55,7 +55,7 @@ export async function downloadFile( if (typeof window !== "undefined" && isInAppBrowser()) { window.dispatchEvent( new CustomEvent(IN_APP_DOWNLOAD_GUIDE_EVENT, { - detail: { url, filename: safeFilename }, + detail: { url: toAbsoluteUrl(url), filename: safeFilename }, }), ); return; @@ -90,6 +90,16 @@ export async function downloadFile( triggerDownload(url, safeFilename); } +function toAbsoluteUrl(url: string): string { + if (/^https?:\/\//i.test(url)) return url; + if (typeof window === "undefined") return url; + try { + return new URL(url, window.location.origin).toString(); + } catch { + return url; + } +} + function triggerDownload(url: string, filename: string) { const a = document.createElement("a"); a.href = url; diff --git a/src/locales/en.ts b/src/locales/en.ts index dd01afb..ef79b74 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -266,14 +266,15 @@ export const enDict: Dict = { backToHome: "Back to Home", inAppDownloadTitle: "Please open in your system browser to download", inAppDownloadIntro: - "Your current in-app browser cannot download files. Open the page in your system browser (Safari, Chrome, etc.) and tap download again.", + "Your current in-app browser cannot download files. Copy the link below and open it in your system browser — the file will save directly.", inAppDownloadIntroNamed: - "{browser} cannot download files directly. Open the page in your system browser (Safari, Chrome, etc.) and tap download again.", - inAppDownloadStepCopy: "Tap “Copy link” below.", + "{browser} cannot download files directly. Copy the link below and open it in your system browser — the file will save directly.", + inAppDownloadStepCopy: + 'Tap "Copy link" below — that is the direct file download URL.', inAppDownloadStepOpen: - "Open the menu (top-right), choose “Open in browser”, and paste the link if needed.", + "Open your system browser (Safari, Chrome, etc.) and paste the link into the address bar.", inAppDownloadStepDownload: - "Tap the download button on the page — the file will save to your downloads.", + "The file will start downloading to your downloads folder automatically.", inAppDownloadCopied: "Link copied", inAppDownloadCopyFail: "Could not copy the link, please copy it manually", }; diff --git a/src/locales/id.ts b/src/locales/id.ts index 568bc52..583f9b0 100644 --- a/src/locales/id.ts +++ b/src/locales/id.ts @@ -269,14 +269,14 @@ export const idDict: Dict = { backToHome: "Kembali ke Beranda", inAppDownloadTitle: "Silakan buka di peramban sistem untuk mengunduh", inAppDownloadIntro: - "Peramban dalam aplikasi saat ini tidak dapat mengunduh berkas. Buka halaman ini di peramban sistem (Safari, Chrome, dll.) lalu ketuk unduh lagi.", + "Peramban dalam aplikasi saat ini tidak dapat mengunduh berkas. Salin tautan di bawah dan buka di peramban sistem — berkas akan langsung tersimpan.", inAppDownloadIntroNamed: - "{browser} tidak dapat mengunduh berkas secara langsung. Buka halaman ini di peramban sistem (Safari, Chrome, dll.) lalu ketuk unduh lagi.", - inAppDownloadStepCopy: "Ketuk “Salin tautan” di bawah.", + "{browser} tidak dapat mengunduh berkas secara langsung. Salin tautan di bawah dan buka di peramban sistem — berkas akan langsung tersimpan.", + inAppDownloadStepCopy: + 'Ketuk "Salin tautan" di bawah (ini adalah URL unduhan langsung berkas).', inAppDownloadStepOpen: - "Buka menu di kanan atas, pilih “Buka di peramban”, tempelkan tautan jika diperlukan.", - inAppDownloadStepDownload: - "Di peramban sistem, ketuk lagi tombol unduh dan berkas akan tersimpan.", + "Buka peramban sistem (Safari, Chrome, dll.) dan tempel tautan ke bilah alamat.", + inAppDownloadStepDownload: "Berkas akan otomatis terunduh ke folder Unduhan.", inAppDownloadCopied: "Tautan disalin", inAppDownloadCopyFail: "Tidak dapat menyalin, silakan salin secara manual", }; diff --git a/src/locales/ja.ts b/src/locales/ja.ts index c96b231..2a7943c 100644 --- a/src/locales/ja.ts +++ b/src/locales/ja.ts @@ -270,14 +270,14 @@ export const jaDict: Dict = { backToHome: "ホームへ戻る", inAppDownloadTitle: "システムブラウザで開いてダウンロードしてください", inAppDownloadIntro: - "現在のアプリ内ブラウザはファイルをダウンロードできません。Safari や Chrome などのシステムブラウザでページを開いてから、もう一度ダウンロードしてください。", + "現在のアプリ内ブラウザではファイルをダウンロードできません。下のリンクをコピーし、システムブラウザで開けば自動的にダウンロードされます。", inAppDownloadIntroNamed: - "{browser} のアプリ内ブラウザはファイルを直接ダウンロードできません。Safari や Chrome などのシステムブラウザでページを開いてから、もう一度ダウンロードしてください。", - inAppDownloadStepCopy: "下の「リンクをコピー」をタップします。", + "{browser} のアプリ内ブラウザではファイルをダウンロードできません。下のリンクをコピーし、システムブラウザで開けば自動的にダウンロードされます。", + inAppDownloadStepCopy: + "下の「リンクをコピー」をタップします(ファイルの直接ダウンロード URL です)。", inAppDownloadStepOpen: - "右上のメニューから「ブラウザで開く」を選び、必要に応じてリンクを貼り付けます。", - inAppDownloadStepDownload: - "システムブラウザで再度ダウンロードボタンをタップすると、ファイルがダウンロード先に保存されます。", + "システムブラウザ(Safari、Chrome など)を開き、アドレスバーにリンクを貼り付けます。", + inAppDownloadStepDownload: "ファイルは自動的にダウンロード先に保存されます。", inAppDownloadCopied: "リンクをコピーしました", inAppDownloadCopyFail: "コピーに失敗しました。手動でコピーしてください", }; diff --git a/src/locales/ko.ts b/src/locales/ko.ts index d2eaaad..4e5b395 100644 --- a/src/locales/ko.ts +++ b/src/locales/ko.ts @@ -265,14 +265,14 @@ export const koDict: Dict = { backToHome: "홈으로", inAppDownloadTitle: "시스템 브라우저에서 열어 다운로드하세요", inAppDownloadIntro: - "현재 앱 내 브라우저는 파일을 다운로드할 수 없습니다. Safari나 Chrome 등 시스템 브라우저에서 페이지를 연 다음 다시 다운로드해 주세요.", + "현재 앱 내 브라우저로는 파일을 다운로드할 수 없습니다. 아래 링크를 복사해서 시스템 브라우저에서 열면 바로 저장됩니다.", inAppDownloadIntroNamed: - "{browser} 앱 내 브라우저는 파일을 직접 다운로드할 수 없습니다. Safari나 Chrome 등 시스템 브라우저에서 페이지를 연 다음 다시 다운로드해 주세요.", - inAppDownloadStepCopy: "아래의 “링크 복사”를 누릅니다.", + "{browser} 앱 내 브라우저로는 파일을 다운로드할 수 없습니다. 아래 링크를 복사해서 시스템 브라우저에서 열면 바로 저장됩니다.", + inAppDownloadStepCopy: + '아래의 "링크 복사"를 누릅니다(파일 직접 다운로드 주소입니다).', inAppDownloadStepOpen: - "오른쪽 위 메뉴에서 “브라우저로 열기”를 선택하고 필요하면 링크를 붙여 넣습니다.", - inAppDownloadStepDownload: - "시스템 브라우저에서 다운로드 버튼을 다시 누르면 파일이 저장됩니다.", + "시스템 브라우저(Safari, Chrome 등)를 열고 주소창에 링크를 붙여 넣습니다.", + inAppDownloadStepDownload: "파일이 자동으로 다운로드 폴더에 저장됩니다.", inAppDownloadCopied: "링크를 복사했습니다", inAppDownloadCopyFail: "복사하지 못했습니다. 직접 복사해 주세요", }; diff --git a/src/locales/ms.ts b/src/locales/ms.ts index b7a8f62..f3761fc 100644 --- a/src/locales/ms.ts +++ b/src/locales/ms.ts @@ -268,14 +268,15 @@ export const msDict: Dict = { backToHome: "Kembali ke Laman Utama", inAppDownloadTitle: "Sila buka dalam pelayar sistem untuk muat turun", inAppDownloadIntro: - "Pelayar dalam aplikasi semasa tidak dapat memuat turun fail. Buka halaman ini dalam pelayar sistem (Safari, Chrome, dsb.), kemudian ketik muat turun semula.", + "Pelayar dalam aplikasi semasa tidak dapat memuat turun fail. Salin pautan di bawah dan buka dalam pelayar sistem — fail akan disimpan terus.", inAppDownloadIntroNamed: - "{browser} tidak dapat memuat turun fail secara langsung. Buka halaman ini dalam pelayar sistem (Safari, Chrome, dsb.), kemudian ketik muat turun semula.", - inAppDownloadStepCopy: "Ketik “Salin pautan” di bawah.", + "{browser} tidak dapat memuat turun fail secara langsung. Salin pautan di bawah dan buka dalam pelayar sistem — fail akan disimpan terus.", + inAppDownloadStepCopy: + 'Ketik "Salin pautan" di bawah (ini adalah URL muat turun fail terus).', inAppDownloadStepOpen: - "Buka menu di atas kanan, pilih “Buka dalam pelayar”, tampal pautan jika perlu.", + "Buka pelayar sistem (Safari, Chrome, dsb.) dan tampal pautan ke bar alamat.", inAppDownloadStepDownload: - "Dalam pelayar sistem, ketik butang muat turun semula dan fail akan disimpan.", + "Fail akan dimuat turun secara automatik ke folder Muat Turun.", inAppDownloadCopied: "Pautan disalin", inAppDownloadCopyFail: "Tidak dapat menyalin, sila salin secara manual", }; diff --git a/src/locales/vi.ts b/src/locales/vi.ts index e0c3a57..3e1d376 100644 --- a/src/locales/vi.ts +++ b/src/locales/vi.ts @@ -264,14 +264,14 @@ export const viDict: Dict = { backToHome: "Về trang chủ", inAppDownloadTitle: "Vui lòng mở bằng trình duyệt hệ thống để tải", inAppDownloadIntro: - "Trình duyệt trong ứng dụng hiện tại không thể tải tệp. Hãy mở trang trong trình duyệt hệ thống (Safari, Chrome…) rồi nhấn tải lại.", + "Trình duyệt trong ứng dụng hiện tại không thể tải tệp. Sao chép liên kết bên dưới và mở trong trình duyệt hệ thống — tệp sẽ tự động tải về.", inAppDownloadIntroNamed: - "{browser} không thể tải tệp trực tiếp. Hãy mở trang trong trình duyệt hệ thống (Safari, Chrome…) rồi nhấn tải lại.", - inAppDownloadStepCopy: "Nhấn “Sao chép liên kết” bên dưới.", + "{browser} không thể tải tệp trực tiếp. Sao chép liên kết bên dưới và mở trong trình duyệt hệ thống — tệp sẽ tự động tải về.", + inAppDownloadStepCopy: + 'Nhấn "Sao chép liên kết" bên dưới (đây là URL tải tệp trực tiếp).', inAppDownloadStepOpen: - "Mở menu ở góc trên bên phải, chọn “Mở bằng trình duyệt”, dán liên kết nếu cần.", - inAppDownloadStepDownload: - "Trong trình duyệt hệ thống, nhấn lại nút tải để lưu tệp.", + "Mở trình duyệt hệ thống (Safari, Chrome…) và dán liên kết vào thanh địa chỉ.", + inAppDownloadStepDownload: "Tệp sẽ tự động tải xuống thư mục Tải về.", inAppDownloadCopied: "Đã sao chép liên kết", inAppDownloadCopyFail: "Không sao chép được, vui lòng tự sao chép", }; diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index e947052..356c09d 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -247,14 +247,13 @@ export const zhDict: Dict = { backToHome: "返回首页", inAppDownloadTitle: "请使用系统浏览器打开后下载", inAppDownloadIntro: - "当前内置浏览器无法直接下载文件,请在系统浏览器(Safari、Chrome 等)中打开页面后再点击下载。", + "当前内置浏览器无法下载文件。复制下方链接,到系统浏览器打开即可直接下载。", inAppDownloadIntroNamed: - "{browser} 内置浏览器无法直接下载文件,请在系统浏览器(Safari、Chrome 等)中打开页面后再点击下载。", - inAppDownloadStepCopy: "点击下方「复制链接」。", + "{browser} 内置浏览器无法下载文件。复制下方链接,到系统浏览器打开即可直接下载。", + inAppDownloadStepCopy: "点击下方「复制链接」(这是文件的直接下载地址)。", inAppDownloadStepOpen: - "点右上角菜单,选择「在浏览器中打开」,如需要请把刚才复制的链接粘贴进地址栏。", - inAppDownloadStepDownload: - "在系统浏览器中再次点击下载按钮,文件会保存到下载文件夹。", + "打开系统浏览器(Safari、Chrome 等),把链接粘贴到地址栏。", + inAppDownloadStepDownload: "文件会自动开始下载到下载文件夹。", inAppDownloadCopied: "链接已复制", inAppDownloadCopyFail: "复制失败,请手动复制", };