Files
Arkie-Library-Frontend/src/locales/ja.ts
TerryM 7a33a62c8f fix: in-app browser download opens file inline
- Detect in-app WebViews (WeChat / TokenPocket / imToken / Telegram / iOS WKWebView, etc.) and show a guide modal asking the user to open the link in their system browser, with a copy-link action.
- For normal browsers, fetch the attachment as a Blob and trigger download from a same-origin object URL so the file always lands in the user's Downloads folder with the original filename, even when the browser would otherwise inline-preview the response.
- Fall back to the anchor download for files larger than 50MB (avoid loading them entirely into memory) or when fetch fails.
- Pass `sizeBytes` from known call sites so the threshold actually applies.
- Add localized strings for the guide modal in all 7 locales.

See .unipi/docs/debug/2026-06-05-in-app-browser-download-debug.md.
2026-06-05 19:06:53 +08:00

284 lines
15 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { Dict } from "./types";
export const jaDict: Dict = {
brand: "ARK ライブラリー",
mainNav: "サイトメニュー",
home: "ホーム",
all: "すべての資料",
categories: "カテゴリー",
latest: "最新",
official: "公式おすすめ",
popular: "人気",
search: "検索",
searchPlaceholder: "資料を検索...",
searchPanelPlaceholder: "資料を検索...",
searchNow: "今すぐ検索",
searchSubmit: "検索",
cancel: "キャンセル",
clear: "クリア",
searchPanelHint:
"タイトル・カテゴリー・タグ・概要・ファイル形式・本文の検索に対応",
currentTags: "利用可能なタグ",
noTagsAvailable: "現在利用可能なタグはありません。",
tagPostsTitle: "#{{tag}} 関連の資料",
noTagPosts: "このタグの資料はまだありません。",
viewAll: "すべて表示",
backToTop: "トップへ戻る",
heroTitle: "ARK 公式データベース",
heroSub:
"ARK ライブラリーを集約・整理・管理し、必要な資料をすばやく見つけてコミュニティの成長を促進します。",
categorySection: "カテゴリー",
officialSection: "公式おすすめ",
latestSection: "最新の更新",
popularSection: "人気の資料",
preview: "プレビュー",
download: "ダウンロード",
downloading: "ダウンロード中…",
downloadOk: "ダウンロード完了",
downloadFail: "ダウンロードに失敗しました。再試行してください",
longPressImageSave: "画像を長押しして保存",
saveAlbumGuideTitle: "Save to album guide",
saveAlbumGuideIntro:
"Your download has started. Follow the steps below to save the file to your album.",
saveAlbumGuideImageLabel: "Image",
saveAlbumGuideVideoLabel: "Video",
saveAlbumGuideIosStep1:
"After the download finishes, tap the browser download icon or open the Downloads folder in the Files app.",
saveAlbumGuideIosStep2: "Open the downloaded image or video file.",
saveAlbumGuideIosStep3:
"Tap the share button, then choose Save Image or Save Video to add it to Photos.",
saveAlbumGuideAndroidStep1:
"After the download finishes, tap the download notification or open Files / Downloads.",
saveAlbumGuideAndroidStep2: "Open the downloaded image or video file.",
saveAlbumGuideAndroidStep3:
"If it does not appear in Gallery automatically, use the menu to save or move it to Photos or Gallery.",
saveAlbumGuideDesktopStep1:
"After the download finishes, open it from your browser downloads list or the Downloads folder.",
saveAlbumGuideDesktopStep2:
"To keep it in a phone album, transfer it to your phone with AirDrop, cable, or cloud drive, then save it there.",
showMore: "すべて表示",
showLess: "閉じる",
share: "シェア",
langLabel: "言語",
admin: "管理画面",
login: "ログイン",
logout: "ログアウト",
email: "メールアドレス",
password: "パスワード",
dashboard: "ダッシュボード",
resources: "資料管理",
newResource: "新規資料",
save: "保存",
title: "タイトル",
description: "説明",
type: "種類",
language: "言語",
category: "カテゴリー",
status: "ステータス",
public: "公開",
downloadable: "ダウンロード可",
recommended: "おすすめ",
cover: "カバー画像 URL",
fileUrl: "ファイル URL",
externalUrl: "外部リンク",
body: "本文",
badge: "推薦バッジ",
published: "公開済み",
draft: "下書き",
archived: "アーカイブ",
noResults:
"該当する資料が見つかりません。別のキーワードを試すか、カテゴリーをご覧ください。",
copyLink: "リンクをコピー",
related: "関連資料",
total: "総資料数",
views: "閲覧",
downloads: "ダウンロード",
lang_zh_CN: "中国語",
lang_en: "英語",
lang_ja: "日本語",
lang_ko: "韓国語",
lang_vi: "ベトナム語",
lang_id: "インドネシア語",
lang_ms: "マレー語",
filterAll: "すべての種類",
sortPublished: "公開日",
type_ppt: "PPT",
type_music: "音楽",
type_video: "動画",
type_image: "画像",
type_pdf: "PDF",
type_link: "リンク",
type_text: "テキスト",
type_archive: "アーカイブ",
type_zip: "ZIP",
adminLoginTitle: "管理画面ログイン",
adminEditResource: "資料を編集",
adminVideoFileHint:
"動画ファイルMP4/WebM/MOV など)をアップロードし、種類を「動画」に設定すると、サイト上で自動再生されます(デフォルトはミュート、ユーザーが解除可能)。",
adminStatTodayNew: "本日の新規",
adminStatFavorites: "お気に入り",
adminMetricDownloads: "ダウンロード",
adminMetricFavorites: "お気に入り",
adminMetricViews: "閲覧",
edit: "編集",
backToList: "一覧へ戻る",
sortOrderLabel: "並び順",
previewUrlLabel: "プレビュー URL",
tagsCommaLabel: "タグ(カンマ区切り)",
uploadFile: "アップロード",
loading: "読み込み中…",
loadMoreFailed:
"追加の読み込みに失敗しました。接続を確認してやり直してください。",
retry: "再試行",
searchingForPost:
"投稿を検索中…古い投稿を読み込んでいます。しばらくお待ちください。",
postNotFound:
"現在のリストでこの投稿が見つかりません。削除された可能性があります。",
paginationPrev: "前へ",
paginationNext: "次へ",
listRange: "{{from}}{{to}} / 全 {{total}} 件",
pageIndicator: "{{c}} / {{p}} ページ",
resourceLangFilter: "資料の言語",
filterTagClear: "タグをクリア",
filterLanguageAll: "すべての言語",
footerAdminLogin: "管理者ログイン",
adminSearchLogs: "検索履歴",
adminMetricShares: "シェア",
adminSearchQuery: "検索キーワード",
adminSearchTime: "時刻",
adminSearchId: "ID",
favoriteAdd: "お気に入りに追加",
favoriteRemove: "お気に入りから削除",
favoriteAdded: "お気に入りに追加しました",
favoriteRemoved: "お気に入りから削除しました",
favoriteFailed: "お気に入りを更新できませんでした",
favoriteLoginRequired: "お気に入り保存にはウォレット接続が必要です",
favoritesLoginDesc:
"ウォレットを接続すると、保存した ARK 資料を表示・管理できます。",
favoritesLibraryTitle: "保存した資料",
favoritesEmptyTitle: "お気に入りはまだありません",
favoritesEmptyDesc: "資料を閲覧してハートを押すと、ここに保存されます。",
favoritesNoFilteredTitle: "一致するお気に入りがありません",
favoritesNoFilteredDesc: "検索、カテゴリ、並び順を変更してみてください。",
favoritesFilterAllCategories: "すべてのカテゴリ",
favoritesSortFavoritedAt: "最近保存",
favoritesSortPublishedAt: "新しい公開順",
favoritesSortHot: "人気資料",
favoritesSearchPlaceholder: "お気に入りを検索",
favoritesUnavailable: "利用不可",
postShownInOriginalLanguage:
"この投稿は選択した言語で提供されていないため、原語で表示します。",
favoritesClearFilters: "フィルターをクリア",
favorites: "お気に入り",
favoritesComingSoon: "近日公開",
favoritesComingSoonDesc: "ログインとお気に入り機能は開発中です。お楽しみに。",
close: "閉じる",
walletConnect: "ウォレット接続",
walletConnectedAs: "接続中のウォレット",
walletLoginAddress: "ログインアドレス",
walletDisconnect: "切断",
walletLoginTitle: "ウォレットを接続",
walletLoginDesc:
"メッセージ署名でウォレットアドレスを確認します。取引やガス代は発生しません。",
walletInjected: "ブラウザウォレット / DApp ブラウザ",
walletInjectedDesc: "このブラウザで利用可能なウォレットを使います。",
walletTokenPocketQr: "TokenPocket QR ログイン",
walletTokenPocketQrDesc:
"中国ユーザーに推奨。TokenPocket でスキャンして署名すると、このブラウザでログインが完了します。",
walletGenerateQr: "QR を生成",
walletQrUseAnotherDevice: "別の端末の TokenPocket でスキャンしてください。",
walletOpenTokenPocket: "TokenPocket を開く",
walletOpenMetaMask: "MetaMask を開く",
walletOpenImToken: "imToken を開く",
walletRainbowFallback: "MetaMask / imToken QR 予備",
walletRainbowFallbackDesc:
"MetaMask または imToken の QR が必要な場合は RainbowKit/Reown 接続を使います。",
walletOpenRainbow: "QR ログインを開く",
walletNetworkWarning:
"この予備方式は WalletConnect/Reown に依存するため、中国の一部ネットワークでは不安定な場合があります。失敗した場合はウォレット内蔵ブラウザで開いてください。",
walletSigning: "署名中…",
walletTpExpired:
"TokenPocket QR の有効期限が切れました。再生成してください。",
walletTpQrFailed: "TokenPocket QR を生成できませんでした。",
walletRainbowUnavailable: "QR ログインは現在利用できません。",
walletLoginSuccess: "ウォレットを接続しました",
walletLoginFailed: "ウォレットログインに失敗しました",
walletNoAccount:
"ウォレットからアカウントが返されませんでした。ウォレットのロックを解除してアカウントを選択し、もう一度お試しください。",
walletDisconnected: "ウォレットを切断しました",
walletNoBrowserWallet: "ブラウザウォレットが見つかりません",
walletNoBrowserWalletDesc:
"MetaMask などのブラウザウォレット拡張機能をインストールまたは有効にしてください。",
walletOpenWalletApp: "ウォレットアプリで開く",
walletOpenWalletAppDesc:
"このサイトをウォレットアプリで開き、署名してログインしてください。",
walletTokenPocket: "TokenPocket",
walletMetaMask: "MetaMask",
walletImToken: "imToken",
walletBack: "戻る",
walletChooseMethod: "ログイン方法を選択",
walletTokenPocketLogin: "TokenPocket ログイン",
walletTpMobileDesc:
"TokenPocket で署名するとこのページに戻ってログインが完了します。ウォレット内ブラウザには移動せず、現在のブラウザのままです。",
walletTpLoginBtn: "TokenPocket でログイン",
walletTpWaiting: "TokenPocket での署名を待っています…",
walletTpReopen: "TokenPocket を再度開く",
favoritesFilters: "フィルター",
favoriteSessionExpired:
"セッションの有効期限が切れました。もう一度ログインしてください。",
loadFailed: "お気に入りを読み込めませんでした。",
walletChooseDesktop:
"使用するウォレットを選択してください。デスクトップの場合は対応するブラウザ拡張機能をインストールしてください。",
walletChooseMobile: "このサイトを開くウォレットアプリを選択してください。",
walletDesktopHint:
"クリックしてもウォレットが開かない場合は、対応するブラウザ拡張機能がインストールされ有効になっているか確認してください。",
walletInstallSelected:
"{wallet} のブラウザ拡張機能が検出されません。インストールまたは有効にしてから再試行してください。",
walletDesktopHelpTitle:
"{wallet} を開こうとしました。次の手順を行ってください:",
walletDesktopHelpUnlock:
"ブラウザのツールバーからウォレット拡張機能を開き、ロックを解除します。",
walletDesktopHelpSelect:
"ウォレットにアカウントがあることを確認し、そのアカウントを選択します。",
walletDesktopHelpRetry: "ここに戻って「{wallet} に再接続」をクリックします。",
walletReconnectWallet: "{wallet} に再接続",
walletInstallWallet: "{wallet} 拡張機能をインストール",
walletConfirmAddressTitle: "この {wallet} アドレスでログインしますか?",
walletConfirmAddressDesc:
"使用する {wallet} ウォレットアドレスであることを確認してください。",
walletConfirmLogin: "ログインを確認",
walletCancelLogin: "キャンセル",
walletDesktopImTokenTitle:
"モバイル {wallet} アプリでこのサイトを開いてください",
walletDesktopImTokenDesc:
"{wallet} にはデスクトップ用ブラウザ拡張機能がありません。モバイル {wallet} アプリ内で https://arkie-library-stag.com を開いてログインしてください。",
walletOpen: "開く",
walletQrLogin: "QR ログイン",
walletMobileQrDesc:
"別のデバイスでこの QR コードをスキャンして、このブラウザにログインしてください。",
walletOtherMethods: "他のログイン方法",
walletUseCurrent: "現在のウォレットを使用",
walletOpening: "{wallet} を起動中…",
walletAppNotInstalled:
"何も起動しない場合は、アプリがインストールされていない可能性があります。",
walletDownloadApp: "{wallet} をダウンロード",
walletRetry: "再試行",
walletConnecting: "接続中…",
featureUnavailable: "未公開",
featureUnavailableDesc: "この機能はまだご利用いただけません。",
confirm: "了解",
backToHome: "ホームへ戻る",
inAppDownloadTitle: "システムブラウザで開いてダウンロードしてください",
inAppDownloadIntro:
"現在のアプリ内ブラウザはファイルをダウンロードできません。Safari や Chrome などのシステムブラウザでページを開いてから、もう一度ダウンロードしてください。",
inAppDownloadIntroNamed:
"{browser} のアプリ内ブラウザはファイルを直接ダウンロードできません。Safari や Chrome などのシステムブラウザでページを開いてから、もう一度ダウンロードしてください。",
inAppDownloadStepCopy: "下の「リンクをコピー」をタップします。",
inAppDownloadStepOpen:
"右上のメニューから「ブラウザで開く」を選び、必要に応じてリンクを貼り付けます。",
inAppDownloadStepDownload:
"システムブラウザで再度ダウンロードボタンをタップすると、ファイルがダウンロード先に保存されます。",
inAppDownloadCopied: "リンクをコピーしました",
inAppDownloadCopyFail: "コピーに失敗しました。手動でコピーしてください",
};