terry-staging #16

Merged
terry merged 96 commits from terry-staging into main 2026-06-05 16:33:12 +00:00
8 changed files with 62 additions and 66 deletions
Showing only changes of commit 4c684d75a3 - Show all commits

View File

@@ -47,13 +47,13 @@ export function InAppDownloadGuideProvider({
}) { }) {
const { t } = useI18n(); const { t } = useI18n();
const { showToast } = useToast(); const { showToast } = useToast();
const [open, setOpen] = useState(false); const [detail, setDetail] = useState<InAppDownloadGuideDetail | null>(null);
useEffect(() => { useEffect(() => {
const onShow = (event: Event) => { const onShow = (event: Event) => {
const ce = event as CustomEvent<InAppDownloadGuideDetail>; const ce = event as CustomEvent<InAppDownloadGuideDetail>;
if (!ce.detail) return; if (!ce.detail) return;
setOpen(true); setDetail(ce.detail);
}; };
window.addEventListener(IN_APP_DOWNLOAD_GUIDE_EVENT, onShow); window.addEventListener(IN_APP_DOWNLOAD_GUIDE_EVENT, onShow);
return () => return () =>
@@ -61,19 +61,19 @@ export function InAppDownloadGuideProvider({
}, []); }, []);
useEffect(() => { useEffect(() => {
if (!open) return; if (!detail) return;
const onKey = (event: KeyboardEvent) => { const onKey = (event: KeyboardEvent) => {
if (event.key === "Escape") setOpen(false); if (event.key === "Escape") setDetail(null);
}; };
window.addEventListener("keydown", onKey); window.addEventListener("keydown", onKey);
return () => window.removeEventListener("keydown", onKey); return () => window.removeEventListener("keydown", onKey);
}, [open]); }, [detail]);
const close = () => setOpen(false); const close = () => setDetail(null);
const handleCopyPageLink = async () => { const handleCopy = async () => {
if (typeof window === "undefined") return; if (!detail) return;
const ok = await copyTextToClipboard(window.location.href); const ok = await copyTextToClipboard(detail.url);
if (ok) { if (ok) {
showToast(t("inAppDownloadCopied")); showToast(t("inAppDownloadCopied"));
} else { } else {
@@ -89,7 +89,7 @@ export function InAppDownloadGuideProvider({
return ( return (
<> <>
{children} {children}
{open {detail
? createPortal( ? createPortal(
<div <div
role="dialog" role="dialog"
@@ -154,13 +154,19 @@ export function InAppDownloadGuideProvider({
</li> </li>
</ol> </ol>
<div className="rounded-2xl border border-white/10 bg-black/30 p-3">
<p className="break-all text-xs leading-5 text-neutral-300">
{detail.url}
</p>
</div>
<button <button
type="button" type="button"
onClick={handleCopyPageLink} onClick={handleCopy}
className="flex h-11 w-full items-center justify-center gap-2 rounded-full bg-ark-gold px-4 text-sm font-semibold text-black transition hover:bg-ark-gold2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ark-gold/80 focus-visible:ring-offset-2 focus-visible:ring-offset-[#1c1c21]" className="flex h-11 w-full items-center justify-center gap-2 rounded-full bg-ark-gold px-4 text-sm font-semibold text-black transition hover:bg-ark-gold2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ark-gold/80 focus-visible:ring-offset-2 focus-visible:ring-offset-[#1c1c21]"
> >
<Copy className="h-4 w-4" /> <Copy className="h-4 w-4" />
{t("inAppDownloadCopyPageLink")} {t("copyLink")}
</button> </button>
</div> </div>
</div> </div>

View File

@@ -266,16 +266,15 @@ export const enDict: Dict = {
backToHome: "Back to Home", backToHome: "Back to Home",
inAppDownloadTitle: "Please open in your system browser to download", inAppDownloadTitle: "Please open in your system browser to download",
inAppDownloadIntro: inAppDownloadIntro:
"Your current in-app browser cannot download files. Open this page in your system browser, then 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: inAppDownloadIntroNamed:
"{browser} cannot download files directly. Open this page in your system browser, then tap download again.", "{browser} cannot download files directly. Copy the link below and open it in your system browser the file will save directly.",
inAppDownloadStepCopy: inAppDownloadStepCopy:
'Tap the menu (top-right) and choose "Open in default browser".', 'Tap "Copy link" below — that is the direct file download URL.',
inAppDownloadStepOpen: inAppDownloadStepOpen:
"If that option is missing, tap “Copy page link” below and open it in Safari, Chrome, or another browser.", "Open your system browser (Safari, Chrome, etc.) and paste the link into the address bar.",
inAppDownloadStepDownload: inAppDownloadStepDownload:
"Once the page opens in your system browser, tap the download button again to save the file.", "The file will start downloading to your downloads folder automatically.",
inAppDownloadCopyPageLink: "Copy page link", inAppDownloadCopied: "Link copied",
inAppDownloadCopied: "Page link copied",
inAppDownloadCopyFail: "Could not copy the link, please copy it manually", inAppDownloadCopyFail: "Could not copy the link, please copy it manually",
}; };

View File

@@ -269,16 +269,14 @@ export const idDict: Dict = {
backToHome: "Kembali ke Beranda", backToHome: "Kembali ke Beranda",
inAppDownloadTitle: "Silakan buka di peramban sistem untuk mengunduh", inAppDownloadTitle: "Silakan buka di peramban sistem untuk mengunduh",
inAppDownloadIntro: inAppDownloadIntro:
"Peramban dalam aplikasi saat ini tidak dapat mengunduh berkas. Buka halaman ini di peramban sistem, 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: inAppDownloadIntroNamed:
"{browser} tidak dapat mengunduh berkas secara langsung. Buka halaman ini di peramban sistem, lalu ketuk unduh lagi.", "{browser} tidak dapat mengunduh berkas secara langsung. Salin tautan di bawah dan buka di peramban sistem — berkas akan langsung tersimpan.",
inAppDownloadStepCopy: inAppDownloadStepCopy:
'Buka menu di kanan atas dan pilih "Buka di peramban".', 'Ketuk "Salin tautan" di bawah (ini adalah URL unduhan langsung berkas).',
inAppDownloadStepOpen: inAppDownloadStepOpen:
"Jika opsi itu tidak ada, ketuk “Salin tautan halaman” di bawah lalu buka di Safari, Chrome, dll.", "Buka peramban sistem (Safari, Chrome, dll.) dan tempel tautan ke bilah alamat.",
inAppDownloadStepDownload: inAppDownloadStepDownload: "Berkas akan otomatis terunduh ke folder Unduhan.",
"Setelah halaman terbuka di peramban sistem, ketuk tombol unduh lagi untuk menyimpan berkas.", inAppDownloadCopied: "Tautan disalin",
inAppDownloadCopyPageLink: "Salin tautan halaman",
inAppDownloadCopied: "Tautan halaman disalin",
inAppDownloadCopyFail: "Tidak dapat menyalin, silakan salin secara manual", inAppDownloadCopyFail: "Tidak dapat menyalin, silakan salin secara manual",
}; };

View File

@@ -270,15 +270,14 @@ export const jaDict: Dict = {
backToHome: "ホームへ戻る", backToHome: "ホームへ戻る",
inAppDownloadTitle: "システムブラウザで開いてダウンロードしてください", inAppDownloadTitle: "システムブラウザで開いてダウンロードしてください",
inAppDownloadIntro: inAppDownloadIntro:
"現在のアプリ内ブラウザはファイルをダウンロードできません。このページをシステムブラウザで開き、もう一度ダウンロードしてください。", "現在のアプリ内ブラウザはファイルをダウンロードできません。下のリンクをコピーし、システムブラウザで開けば自動的にダウンロードされます。",
inAppDownloadIntroNamed: inAppDownloadIntroNamed:
"{browser} はファイルを直接ダウンロードできません。このページをシステムブラウザで開き、もう一度ダウンロードしてください。", "{browser} のアプリ内ブラウザではファイルをダウンロードできません。下のリンクをコピーし、システムブラウザで開けば自動的にダウンロードされます。",
inAppDownloadStepCopy: "右上のメニューを開き、「ブラウザで開く」を選びます。", inAppDownloadStepCopy:
"下の「リンクをコピー」をタップします(ファイルの直接ダウンロード URL です)。",
inAppDownloadStepOpen: inAppDownloadStepOpen:
"該当の項目がなければ、下の「ページリンクをコピー」をタップし、SafariChrome で開いてください。", "システムブラウザ(SafariChrome など)を開き、アドレスバーにリンクを貼り付けます。",
inAppDownloadStepDownload: inAppDownloadStepDownload: "ファイルは自動的にダウンロード先に保存されます。",
"システムブラウザでページが開いたら、もう一度ダウンロードボタンをタップしてファイルを保存します。", inAppDownloadCopied: "リンクをコピーしました",
inAppDownloadCopyPageLink: "ページリンクをコピー",
inAppDownloadCopied: "ページリンクをコピーしました",
inAppDownloadCopyFail: "コピーに失敗しました。手動でコピーしてください", inAppDownloadCopyFail: "コピーに失敗しました。手動でコピーしてください",
}; };

View File

@@ -265,15 +265,14 @@ export const koDict: Dict = {
backToHome: "홈으로", backToHome: "홈으로",
inAppDownloadTitle: "시스템 브라우저에서 열어 다운로드하세요", inAppDownloadTitle: "시스템 브라우저에서 열어 다운로드하세요",
inAppDownloadIntro: inAppDownloadIntro:
"현재 앱 내 브라우저는 파일을 다운로드할 수 없습니다. 시스템 브라우저에서 이 페이지를 다시 열어 다운로드 버튼을 눌러 주세요.", "현재 앱 내 브라우저는 파일을 다운로드할 수 없습니다. 아래 링크를 복사해서 시스템 브라우저에서 열면 바로 저장됩니다.",
inAppDownloadIntroNamed: inAppDownloadIntroNamed:
"{browser}는 파일을 직접 다운로드할 수 없습니다. 시스템 브라우저에서 이 페이지를 다시 열어 다운로드 버튼을 눌러 주세요.", "{browser} 앱 내 브라우저로는 파일을 다운로드할 수 없습니다. 아래 링크를 복사해서 시스템 브라우저에서 열면 바로 저장됩니다.",
inAppDownloadStepCopy: '오른쪽 위 메뉴에서 "브라우저로 열기"를 선택하세요.', inAppDownloadStepCopy:
'아래의 "링크 복사"를 누릅니다(파일 직접 다운로드 주소입니다).',
inAppDownloadStepOpen: inAppDownloadStepOpen:
"해당 옵션이 없다면 아래 “페이지 링크 복사”를 눌러 Safari Chrome 등에서 여세요.", "시스템 브라우저(Safari, Chrome 등)를 열고 주소창에 링크를 붙여 넣습니다.",
inAppDownloadStepDownload: inAppDownloadStepDownload: "파일이 자동으로 다운로드 폴더에 저장됩니다.",
"시스템 브라우저에서 페이지가 열리면 다운로드 버튼을 다시 눌러 파일을 저장하세요.", inAppDownloadCopied: "링크를 복사했습니다",
inAppDownloadCopyPageLink: "페이지 링크 복사",
inAppDownloadCopied: "페이지 링크가 복사되었습니다",
inAppDownloadCopyFail: "복사하지 못했습니다. 직접 복사해 주세요", inAppDownloadCopyFail: "복사하지 못했습니다. 직접 복사해 주세요",
}; };

View File

@@ -268,16 +268,15 @@ export const msDict: Dict = {
backToHome: "Kembali ke Laman Utama", backToHome: "Kembali ke Laman Utama",
inAppDownloadTitle: "Sila buka dalam pelayar sistem untuk muat turun", inAppDownloadTitle: "Sila buka dalam pelayar sistem untuk muat turun",
inAppDownloadIntro: inAppDownloadIntro:
"Pelayar dalam aplikasi semasa tidak dapat memuat turun fail. Buka halaman ini dalam pelayar sistem, 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: inAppDownloadIntroNamed:
"{browser} tidak dapat memuat turun fail secara langsung. Buka halaman ini dalam pelayar sistem, kemudian ketik muat turun semula.", "{browser} tidak dapat memuat turun fail secara langsung. Salin pautan di bawah dan buka dalam pelayar sistem — fail akan disimpan terus.",
inAppDownloadStepCopy: inAppDownloadStepCopy:
'Buka menu di atas kanan dan pilih "Buka dalam pelayar".', 'Ketik "Salin pautan" di bawah (ini adalah URL muat turun fail terus).',
inAppDownloadStepOpen: inAppDownloadStepOpen:
"Jika pilihan tersebut tiada, ketik “Salin pautan halaman” di bawah dan buka dalam Safari, Chrome, dll.", "Buka pelayar sistem (Safari, Chrome, dsb.) dan tampal pautan ke bar alamat.",
inAppDownloadStepDownload: inAppDownloadStepDownload:
"Selepas halaman dibuka dalam pelayar sistem, ketik butang muat turun semula untuk menyimpan fail.", "Fail akan dimuat turun secara automatik ke folder Muat Turun.",
inAppDownloadCopyPageLink: "Salin pautan halaman", inAppDownloadCopied: "Pautan disalin",
inAppDownloadCopied: "Pautan halaman disalin",
inAppDownloadCopyFail: "Tidak dapat menyalin, sila salin secara manual", inAppDownloadCopyFail: "Tidak dapat menyalin, sila salin secara manual",
}; };

View File

@@ -264,16 +264,14 @@ export const viDict: Dict = {
backToHome: "Về trang chủ", backToHome: "Về trang chủ",
inAppDownloadTitle: "Vui lòng mở bằng trình duyệt hệ thống để tải", inAppDownloadTitle: "Vui lòng mở bằng trình duyệt hệ thống để tải",
inAppDownloadIntro: inAppDownloadIntro:
"Trình duyệt trong ứng dụng hiện tại không thể tải tệp. Hãy mở trang này trong trình duyệt hệ thống 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: inAppDownloadIntroNamed:
"{browser} không thể tải tệp trực tiếp. Hãy mở trang này trong trình duyệt hệ thống rồi nhấn tải lạ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: inAppDownloadStepCopy:
'Mở menu ở góc trên bên phải và chọn "Mở trong trình duyệt".', '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: inAppDownloadStepOpen:
"Nếu không có lựa chọn đó, nhấn “Sao chép liên kết trang” bên dưới rồi mở trong Safari, Chrome,…", "Mở trình duyệt hệ thống (Safari, Chrome…) và dán liên kết vào thanh địa chỉ.",
inAppDownloadStepDownload: inAppDownloadStepDownload: "Tệp sẽ tự động tải xuống thư mục Tải về.",
"Khi trang được mở trong trình duyệt hệ thống, hãy nhấn lại nút tải để lưu tệp.", inAppDownloadCopied: "Đã sao chép liên kết",
inAppDownloadCopyPageLink: "Sao chép liên kết trang",
inAppDownloadCopied: "Đã sao chép liên kết trang",
inAppDownloadCopyFail: "Không sao chép được, vui lòng tự sao chép", inAppDownloadCopyFail: "Không sao chép được, vui lòng tự sao chép",
}; };

View File

@@ -247,15 +247,13 @@ export const zhDict: Dict = {
backToHome: "返回首页", backToHome: "返回首页",
inAppDownloadTitle: "请使用系统浏览器打开后下载", inAppDownloadTitle: "请使用系统浏览器打开后下载",
inAppDownloadIntro: inAppDownloadIntro:
"当前内置浏览器无法下载文件。请在系统浏览器打开本页面,然后再次点击下载按钮。", "当前内置浏览器无法下载文件。复制下方链接,到系统浏览器打开即可直接下载。",
inAppDownloadIntroNamed: inAppDownloadIntroNamed:
"{browser} 内置浏览器无法下载文件。请在系统浏览器打开本页面,然后再次点击下载按钮。", "{browser} 内置浏览器无法下载文件。复制下方链接,到系统浏览器打开即可直接下载。",
inAppDownloadStepCopy: "点击右上角菜单,选择「在默认浏览器中打开」。", inAppDownloadStepCopy: "点击下方「复制链接」(这是文件的直接下载地址)。",
inAppDownloadStepOpen: inAppDownloadStepOpen:
"如果没有该选项,可点击下方「复制页面链接」,再到 Safari、Chrome 等浏览器中打开。", "打开系统浏览器(Safari、Chrome 等),把链接粘贴到地址栏。",
inAppDownloadStepDownload: inAppDownloadStepDownload: "文件会自动开始下载到下载文件夹。",
"系统浏览器打开页面后,再次点击下载按钮即可把文件保存到下载文件夹。", inAppDownloadCopied: "链接已复制",
inAppDownloadCopyPageLink: "复制页面链接",
inAppDownloadCopied: "页面链接已复制",
inAppDownloadCopyFail: "复制失败,请手动复制", inAppDownloadCopyFail: "复制失败,请手动复制",
}; };