From 4a115e29711afe7b55c3e6596ea6c561a49bf733 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Thu, 11 Jun 2026 11:25:12 +0800 Subject: [PATCH 01/70] New translations zh-hans.json (Japanese) [ci skip] --- locales/ja-JP.json | 301 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 301 insertions(+) create mode 100644 locales/ja-JP.json diff --git a/locales/ja-JP.json b/locales/ja-JP.json new file mode 100644 index 0000000..e0df894 --- /dev/null +++ b/locales/ja-JP.json @@ -0,0 +1,301 @@ +{ + "locale": { + "nativeName": "中文简体", + "englishName": "Chinese (Simplified)" + }, + "commands": { + "start_description": "显示使用说明", + "apkinfo_description": "解析当前或回复的 APK/APKS/APKM/XAPK 文件", + "upload_description": "上传大型 Android 包解析" + }, + "bot": { + "start": "你好,我可以帮你解析 APK、APKS、APKM 和 XAPK。\n\n私聊使用\n直接发送或转发 APK、APKS、APKM 或 XAPK 文件,我会自动解析。\n也可以发送 APK 下载链接,我会尝试用 HTTP Range 只下载少量元数据来解析。\n\n群组和频道\n直接发送 Android 包文件,或把 /apkinfo 写在文件消息里、APK 链接旁边。\n也可以回复含 Android 包文件的消息,再发送 /apkinfo。\n\n大文件\n超过 20MB 的文件,可以使用 /upload 打开网页上传入口。", + "apk_not_found": "我没有找到可解析的 APK、APKS、APKM、XAPK 文件或 APK 链接。你可以直接发送或转发 Android 包文件、发送 APK 下载链接,或者把 /apkinfo 写在同一条文件消息或链接消息里;如果是回复解析,也请确认你回复的那条消息本身就是 Android 包文件或 APK 链接。需要注意的是,群组里的转发文件有时不会把文件对象完整发给 bot,这种情况下我无法从 Telegram 重新取回它,建议直接在群里发送文件、发送 APK 下载链接,或私聊 bot 再转发文件。若群组开启了 Privacy Mode,请优先使用 /apkinfo@bot_username。", + "apk_too_large": "这个文件超过 Telegram 官方 Bot API 当前可下载的 20MB 限制。请使用下方按钮打开网页上传入口,直接上传到 Worker 解析。", + "upload_entry": "打开网页上传入口后选择 APK、APKS、APKM 或 XAPK 文件即可解析。这个入口绕过 Telegram Bot API 的 20MB 文件下载限制,但仍会受到 Cloudflare Worker 请求体和内存限制影响。", + "parse_failed": "解析 Android 包失败:{message}", + "open_full_report": "打开完整报告", + "open_upload_page": "上传大文件", + "source_channel": "频道消息", + "source_forwarded": "转发消息", + "source_private": "私聊消息", + "source_group": "群组消息", + "source_web_upload": "网页上传", + "source_link_preview": "链接预览", + "source_default": "Telegram 消息" + }, + "upload": { + "page_title": "上传 Android 包解析", + "heading": "上传 Android 包解析", + "intro": "直接把 APK、APKS、APKM 或 XAPK 上传到 Worker 解析,适合超过 Telegram Bot API 20MB 下载限制的文件。", + "file_label": "Android 包文件", + "language_label": "报告语言", + "submit": "开始解析", + "busy": "正在上传并解析...", + "progress_label": "上传进度", + "progress_preparing": "准备上传...", + "progress_complete": "上传完成,正在生成报告...", + "network_error": "上传失败,请检查网络后重试。", + "max_hint": "当前入口建议上传不超过 {maxSize} 的文件。", + "choose_file": "请选择 .apk、.apks、.apkm 或 .xapk 文件。", + "invalid_file": "请上传 .apk、.apks、.apkm 或 .xapk 文件。", + "too_large": "文件超过当前 Worker 上传解析上限:{maxSize}。", + "parse_failed": "解析 Android 包失败:{message}" + }, + "summary": { + "completed": "APK 解析完成", + "app_name": "应用名: {appName}", + "package_name": "包名: {packageName}", + "version_name": "versionName: {versionName}", + "version_code": "versionCode: {versionCode}", + "sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", + "permissions_count": "权限数量: {count}", + "native_library_count": "原生库数量: {count}", + "component_count": "组件数量: {count}", + "meta_data_count": "meta-data 数量: {count}", + "sdk_markers": "SDK 标记: {value}", + "features": "特性: {value}", + "open_report_hint": "完整报告请使用下方按钮打开。", + "sdk_summary_native": "原生库 {count}", + "sdk_summary_components": "组件 {count}" + }, + "report": { + "fallback_title": "APK 报告", + "error_title": "报告加载失败", + "missing_path": "缺少 report path 参数。", + "views": "浏览 {count}", + "meta_fallback": "APK 解析报告" + }, + "telegraph": { + "page_title": "{appName} APK 信息", + "apk_summary": "APK 摘要", + "file_info": "文件信息", + "native_libraries": "原生库", + "build_features": "构建特性", + "permissions": "权限", + "components": "组件", + "application_meta_data": "Application Meta-Data", + "native_sdk_markers": "原生库 SDK 标记", + "marked_sdks": "已标记的 SDK", + "app_icon": "应用图标", + "line_app": "应用: {value}", + "line_package_name": "包名: {value}", + "line_icon": "图标: {value}", + "icon_detected": "已解析", + "icon_detected_with_path": "已解析 ({path})", + "icon_missing": "未解析到", + "line_version": "版本: {versionName} ({versionCode})", + "line_sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", + "line_stats": "统计: 权限 {permissions} · 原生库 {nativeLibraries} · 组件 {components} · meta-data {metaData}", + "line_file_name": "文件名: {value}", + "line_file_size": "文件大小: {value}", + "line_message_source": "消息来源: {value}", + "line_analyzed_at": "分析时间: {value}", + "report_compacted_notice": "报告内容超过 Telegraph 单页限制,已自动切换为精简版:统计仍基于完整 APK,列表仅展示前若干项。", + "no_build_features": "未识别到构建特性。", + "no_native_libraries": "未发现原生库。", + "no_permissions": "未声明权限。", + "no_component": "未声明 {title}。", + "no_application_meta_data": "未声明 application 级 meta-data。", + "alias_target": "alias -> {target}", + "resource_resolved": "resolved from string resource", + "resource_reference": "resource reference", + "feature_detected": "已检测到", + "feature_kotlin": "Kotlin", + "feature_compose": "Compose", + "feature_gradle": "Gradle", + "feature_agp": "Android Gradle Plugin", + "feature_app_metadata_version": "App Metadata Version", + "unknown": "未知" + }, + "errors": { + "unknown": "未知错误", + "telegram_missing_file_path": "Telegram 没有返回可下载的 file_path", + "telegram_file_download_failed": "Telegram 文件下载失败 ({status})", + "telegram_api_request_failed": "Telegram API {method} 请求失败 ({status})", + "telegram_api_result_failed": "Telegram API {method} 返回失败", + "telegraph_invalid_path": "Telegraph 页面路径无效", + "telegraph_fetch_failed": "Telegraph 页面获取失败 ({status})", + "telegraph_fetch_failed_generic": "Telegraph 页面获取失败", + "telegraph_api_failed": "Telegraph API {method} 请求失败 ({status})", + "telegraph_api_result_failed": "Telegraph API {method} 返回失败" + }, + "webui": { + "title": "LibChecker WebUI", + "subtitle": "在线分析 APK/APKS/APKM/XAPK", + "modeLabel": "模式", + "modeAnalyze": "分析", + "modeCompare": "对比", + "themeLabel": "主题", + "themeDark": "深色", + "themeLight": "浅色", + "themeSystem": "系统", + "languageLabel": "语言", + "exportJson": "导出 JSON", + "clear": "清空", + "filePrompt": "选择或拖入", + "fileIdle": "未选择文件", + "localNote": "文件只在当前浏览器中解析", + "analyze": "开始分析", + "analyzing": "分析中", + "progressReady": "等待文件", + "progressReading": "读取文件", + "progressParsing": "解析 Manifest、资源与 DEX 标记", + "progressDone": "分析完成", + "historyTitle": "历史记录", + "historyNote": "保存在当前浏览器中,点击记录可重新打开结果", + "historyEmpty": "还没有历史记录", + "historyOpen": "打开历史记录", + "historyOpening": "正在打开报告...", + "historyDelete": "删除", + "historyExpand": "展开历史", + "historyCollapse": "收起历史", + "clearHistory": "清空历史", + "historyItemMeta": "{version} · Target SDK {targetSdk}", + "historyFileMeta": "{file} · {size} · {date}", + "emptyTitle": "等待文件", + "emptyBody": "分析完成后会在这里展示摘要、SDK 标记、组件、权限、签名和元数据", + "tabSummary": "摘要", + "tabSdk": "SDK", + "tabNative": "原生库", + "tabComponents": "组件", + "tabPermissions": "权限", + "tabSignatures": "签名", + "tabMeta": "元数据", + "tabRaw": "JSON", + "noFile": "请选择 APK、APKS、APKM、XAPK 或 LCAPPS 文件", + "invalidFile": "请上传 .apk、.apks、.apkm、.xapk 或 .lcapps 文件", + "lcappsTitle": "选择应用", + "lcappsSubtitle": "{name} · {count} 个应用", + "lcappsSearch": "搜索应用或包名", + "lcappsLoading": "正在读取应用列表", + "lcappsClose": "关闭", + "lcappsReopen": "重新打开应用列表", + "lcappsReopenWithApp": "重新打开 {app} 的应用列表", + "lcappsNoMatches": "没有匹配的应用", + "lcappsReadFailed": "读取 .lcapps 文件失败", + "lcappsInvalidZip": ".lcapps 文件不是有效的 ZIP 压缩包", + "lcappsUnsupportedZip64": "当前浏览器暂不支持 ZIP64 格式的 .lcapps 文件", + "lcappsMissingJson": ".lcapps 文件中没有找到应用 JSON", + "lcappsInvalidJson": ".lcapps 文件中的应用 JSON 无法解析", + "lcappsUnsupportedCompression": ".lcapps 文件包含当前浏览器不支持的压缩方式", + "lcappsEmpty": ".lcapps 文件中没有可展示的应用", + "unsupportedDecompression": "当前浏览器不支持 DecompressionStream,无法在本地解压文件", + "unknownError": "未知错误", + "workerFailed": "分析进程启动失败", + "appName": "应用名", + "packageName": "包名", + "versionName": "versionName", + "versionCode": "versionCode", + "targetSdk": "Target SDK", + "minSdk": "Min SDK", + "compileSdk": "Compile SDK", + "fileName": "文件名", + "fileSize": "文件大小", + "analyzedAt": "分析时间", + "duration": "耗时", + "terminalSystem": "终端系统", + "permissions": "权限", + "nativeLibraries": "原生库", + "components": "组件", + "signatures": "签名", + "metaData": "元数据", + "buildFeatures": "构建特性", + "noBuildFeatures": "未识别到构建特性", + "noNativeLibraries": "未发现原生库", + "noSdkMarkers": "未匹配到 SDK 标记", + "noComponents": "未声明组件", + "noPermissions": "未声明权限", + "noSignatures": "未发现签名证书", + "noMetaData": "未声明 application 级元数据", + "summary": "摘要", + "sdkNative": "原生库 SDK 标记", + "sdkComponents": "组件 SDK 标记", + "activities": "Activity", + "services": "Service", + "receivers": "Receiver", + "providers": "Provider", + "exported": "exported", + "notExported": "not exported", + "enabled": "enabled", + "disabled": "disabled", + "unknown": "未知", + "permission": "权限", + "process": "进程", + "authorities": "authorities", + "actions": "actions", + "targetActivity": "targetActivity", + "sdk": "SDK", + "abi": "ABI", + "path": "路径", + "size": "大小", + "value": "值", + "resource": "资源", + "detectedRule": "标记规则", + "ruleDevTeam": "开发团队", + "ruleContributors": "贡献者", + "ruleSource": "来源", + "ruleUuid": "UUID", + "signatureSchemes": "签名方案", + "signatureCertificate": "签名证书 {index}", + "signatureVersion": "版本", + "signatureSerialNumber": "序列号", + "signatureIssuer": "发行人", + "signatureSubject": "主题", + "signatureValidFrom": "有效期始", + "signatureValidTo": "有效期至", + "signaturePublicKeyFormat": "公钥格式", + "signaturePublicKeyAlgorithm": "公钥算法", + "signaturePublicKeyExponent": "公钥指数", + "signaturePublicKeyModulusSize": "模数大小", + "signaturePublicKeyModulus": "模数", + "signaturePublicKeyY": "公钥值Y", + "signaturePublicKeyType": "公钥类型", + "signatureAlgorithmName": "签名算法", + "signatureAlgorithmOid": "签名算法 OID", + "signatureMd5": "MD5", + "signatureSha1": "SHA1", + "signatureSha256": "SHA256", + "signatureCharString": "CharString", + "signatureSourceEntry": "来源条目", + "signatureDerLength": "证书大小", + "rawNotice": "JSON 视图默认省略较大的 data URI", + "selectedFile": "{name} · {size}", + "completedIn": "{seconds}s", + "localFile": "本地文件", + "archiveDistributionTitle": "子 APK 分布", + "archiveDistributionSummary": "{count} 个子 APK · {size}", + "archiveDistributionPercent": "占比", + "archiveAnalyzedEntry": "主包", + "compareSlotLeft": "左侧文件", + "compareSlotRight": "右侧文件", + "compareSlotNote": "拖入文件,或从历史记录选择", + "compareDropPrompt": "点击上传或拖入文件", + "compareSlotEmpty": "未选择文件", + "compareSlotEmptyHint": "上传一个文件,或选择一条历史记录", + "compareSlotReady": "{name} · {size}", + "compareHistoryLabel": "历史记录", + "compareHistoryPlaceholder": "选择历史记录", + "compareClearLeft": "清空左侧", + "compareClearRight": "清空右侧", + "compareSourceHistory": "历史记录", + "compareSourceUpload": "本地上传", + "comparePackageMismatch": "包名不同的对比", + "compareAwaitingPair": "再选择一个文件后开始对比", + "compareChangeCount": "差异项", + "compareBasicInfo": "基础信息", + "compareDifferences": "差异明细", + "compareNoDifferences": "未发现差异", + "compareField": "字段", + "compareLeft": "左侧", + "compareRight": "右侧", + "compareOnlyLeft": "仅左侧", + "compareOnlyRight": "仅右侧", + "compareAdded": "新增", + "compareDeleted": "删除", + "compareChanged": "改变", + "compareMoved": "移动", + "compareNoItems": "无", + "compareMoreItems": "还有 {count} 项未展示" + } +} From abd17a642a9d8f846003329aedfe4082d0b699a7 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Thu, 11 Jun 2026 11:25:13 +0800 Subject: [PATCH 02/70] New translations zh-hans.json (Korean) [ci skip] --- locales/ko-KR.json | 301 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 301 insertions(+) create mode 100644 locales/ko-KR.json diff --git a/locales/ko-KR.json b/locales/ko-KR.json new file mode 100644 index 0000000..e0df894 --- /dev/null +++ b/locales/ko-KR.json @@ -0,0 +1,301 @@ +{ + "locale": { + "nativeName": "中文简体", + "englishName": "Chinese (Simplified)" + }, + "commands": { + "start_description": "显示使用说明", + "apkinfo_description": "解析当前或回复的 APK/APKS/APKM/XAPK 文件", + "upload_description": "上传大型 Android 包解析" + }, + "bot": { + "start": "你好,我可以帮你解析 APK、APKS、APKM 和 XAPK。\n\n私聊使用\n直接发送或转发 APK、APKS、APKM 或 XAPK 文件,我会自动解析。\n也可以发送 APK 下载链接,我会尝试用 HTTP Range 只下载少量元数据来解析。\n\n群组和频道\n直接发送 Android 包文件,或把 /apkinfo 写在文件消息里、APK 链接旁边。\n也可以回复含 Android 包文件的消息,再发送 /apkinfo。\n\n大文件\n超过 20MB 的文件,可以使用 /upload 打开网页上传入口。", + "apk_not_found": "我没有找到可解析的 APK、APKS、APKM、XAPK 文件或 APK 链接。你可以直接发送或转发 Android 包文件、发送 APK 下载链接,或者把 /apkinfo 写在同一条文件消息或链接消息里;如果是回复解析,也请确认你回复的那条消息本身就是 Android 包文件或 APK 链接。需要注意的是,群组里的转发文件有时不会把文件对象完整发给 bot,这种情况下我无法从 Telegram 重新取回它,建议直接在群里发送文件、发送 APK 下载链接,或私聊 bot 再转发文件。若群组开启了 Privacy Mode,请优先使用 /apkinfo@bot_username。", + "apk_too_large": "这个文件超过 Telegram 官方 Bot API 当前可下载的 20MB 限制。请使用下方按钮打开网页上传入口,直接上传到 Worker 解析。", + "upload_entry": "打开网页上传入口后选择 APK、APKS、APKM 或 XAPK 文件即可解析。这个入口绕过 Telegram Bot API 的 20MB 文件下载限制,但仍会受到 Cloudflare Worker 请求体和内存限制影响。", + "parse_failed": "解析 Android 包失败:{message}", + "open_full_report": "打开完整报告", + "open_upload_page": "上传大文件", + "source_channel": "频道消息", + "source_forwarded": "转发消息", + "source_private": "私聊消息", + "source_group": "群组消息", + "source_web_upload": "网页上传", + "source_link_preview": "链接预览", + "source_default": "Telegram 消息" + }, + "upload": { + "page_title": "上传 Android 包解析", + "heading": "上传 Android 包解析", + "intro": "直接把 APK、APKS、APKM 或 XAPK 上传到 Worker 解析,适合超过 Telegram Bot API 20MB 下载限制的文件。", + "file_label": "Android 包文件", + "language_label": "报告语言", + "submit": "开始解析", + "busy": "正在上传并解析...", + "progress_label": "上传进度", + "progress_preparing": "准备上传...", + "progress_complete": "上传完成,正在生成报告...", + "network_error": "上传失败,请检查网络后重试。", + "max_hint": "当前入口建议上传不超过 {maxSize} 的文件。", + "choose_file": "请选择 .apk、.apks、.apkm 或 .xapk 文件。", + "invalid_file": "请上传 .apk、.apks、.apkm 或 .xapk 文件。", + "too_large": "文件超过当前 Worker 上传解析上限:{maxSize}。", + "parse_failed": "解析 Android 包失败:{message}" + }, + "summary": { + "completed": "APK 解析完成", + "app_name": "应用名: {appName}", + "package_name": "包名: {packageName}", + "version_name": "versionName: {versionName}", + "version_code": "versionCode: {versionCode}", + "sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", + "permissions_count": "权限数量: {count}", + "native_library_count": "原生库数量: {count}", + "component_count": "组件数量: {count}", + "meta_data_count": "meta-data 数量: {count}", + "sdk_markers": "SDK 标记: {value}", + "features": "特性: {value}", + "open_report_hint": "完整报告请使用下方按钮打开。", + "sdk_summary_native": "原生库 {count}", + "sdk_summary_components": "组件 {count}" + }, + "report": { + "fallback_title": "APK 报告", + "error_title": "报告加载失败", + "missing_path": "缺少 report path 参数。", + "views": "浏览 {count}", + "meta_fallback": "APK 解析报告" + }, + "telegraph": { + "page_title": "{appName} APK 信息", + "apk_summary": "APK 摘要", + "file_info": "文件信息", + "native_libraries": "原生库", + "build_features": "构建特性", + "permissions": "权限", + "components": "组件", + "application_meta_data": "Application Meta-Data", + "native_sdk_markers": "原生库 SDK 标记", + "marked_sdks": "已标记的 SDK", + "app_icon": "应用图标", + "line_app": "应用: {value}", + "line_package_name": "包名: {value}", + "line_icon": "图标: {value}", + "icon_detected": "已解析", + "icon_detected_with_path": "已解析 ({path})", + "icon_missing": "未解析到", + "line_version": "版本: {versionName} ({versionCode})", + "line_sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", + "line_stats": "统计: 权限 {permissions} · 原生库 {nativeLibraries} · 组件 {components} · meta-data {metaData}", + "line_file_name": "文件名: {value}", + "line_file_size": "文件大小: {value}", + "line_message_source": "消息来源: {value}", + "line_analyzed_at": "分析时间: {value}", + "report_compacted_notice": "报告内容超过 Telegraph 单页限制,已自动切换为精简版:统计仍基于完整 APK,列表仅展示前若干项。", + "no_build_features": "未识别到构建特性。", + "no_native_libraries": "未发现原生库。", + "no_permissions": "未声明权限。", + "no_component": "未声明 {title}。", + "no_application_meta_data": "未声明 application 级 meta-data。", + "alias_target": "alias -> {target}", + "resource_resolved": "resolved from string resource", + "resource_reference": "resource reference", + "feature_detected": "已检测到", + "feature_kotlin": "Kotlin", + "feature_compose": "Compose", + "feature_gradle": "Gradle", + "feature_agp": "Android Gradle Plugin", + "feature_app_metadata_version": "App Metadata Version", + "unknown": "未知" + }, + "errors": { + "unknown": "未知错误", + "telegram_missing_file_path": "Telegram 没有返回可下载的 file_path", + "telegram_file_download_failed": "Telegram 文件下载失败 ({status})", + "telegram_api_request_failed": "Telegram API {method} 请求失败 ({status})", + "telegram_api_result_failed": "Telegram API {method} 返回失败", + "telegraph_invalid_path": "Telegraph 页面路径无效", + "telegraph_fetch_failed": "Telegraph 页面获取失败 ({status})", + "telegraph_fetch_failed_generic": "Telegraph 页面获取失败", + "telegraph_api_failed": "Telegraph API {method} 请求失败 ({status})", + "telegraph_api_result_failed": "Telegraph API {method} 返回失败" + }, + "webui": { + "title": "LibChecker WebUI", + "subtitle": "在线分析 APK/APKS/APKM/XAPK", + "modeLabel": "模式", + "modeAnalyze": "分析", + "modeCompare": "对比", + "themeLabel": "主题", + "themeDark": "深色", + "themeLight": "浅色", + "themeSystem": "系统", + "languageLabel": "语言", + "exportJson": "导出 JSON", + "clear": "清空", + "filePrompt": "选择或拖入", + "fileIdle": "未选择文件", + "localNote": "文件只在当前浏览器中解析", + "analyze": "开始分析", + "analyzing": "分析中", + "progressReady": "等待文件", + "progressReading": "读取文件", + "progressParsing": "解析 Manifest、资源与 DEX 标记", + "progressDone": "分析完成", + "historyTitle": "历史记录", + "historyNote": "保存在当前浏览器中,点击记录可重新打开结果", + "historyEmpty": "还没有历史记录", + "historyOpen": "打开历史记录", + "historyOpening": "正在打开报告...", + "historyDelete": "删除", + "historyExpand": "展开历史", + "historyCollapse": "收起历史", + "clearHistory": "清空历史", + "historyItemMeta": "{version} · Target SDK {targetSdk}", + "historyFileMeta": "{file} · {size} · {date}", + "emptyTitle": "等待文件", + "emptyBody": "分析完成后会在这里展示摘要、SDK 标记、组件、权限、签名和元数据", + "tabSummary": "摘要", + "tabSdk": "SDK", + "tabNative": "原生库", + "tabComponents": "组件", + "tabPermissions": "权限", + "tabSignatures": "签名", + "tabMeta": "元数据", + "tabRaw": "JSON", + "noFile": "请选择 APK、APKS、APKM、XAPK 或 LCAPPS 文件", + "invalidFile": "请上传 .apk、.apks、.apkm、.xapk 或 .lcapps 文件", + "lcappsTitle": "选择应用", + "lcappsSubtitle": "{name} · {count} 个应用", + "lcappsSearch": "搜索应用或包名", + "lcappsLoading": "正在读取应用列表", + "lcappsClose": "关闭", + "lcappsReopen": "重新打开应用列表", + "lcappsReopenWithApp": "重新打开 {app} 的应用列表", + "lcappsNoMatches": "没有匹配的应用", + "lcappsReadFailed": "读取 .lcapps 文件失败", + "lcappsInvalidZip": ".lcapps 文件不是有效的 ZIP 压缩包", + "lcappsUnsupportedZip64": "当前浏览器暂不支持 ZIP64 格式的 .lcapps 文件", + "lcappsMissingJson": ".lcapps 文件中没有找到应用 JSON", + "lcappsInvalidJson": ".lcapps 文件中的应用 JSON 无法解析", + "lcappsUnsupportedCompression": ".lcapps 文件包含当前浏览器不支持的压缩方式", + "lcappsEmpty": ".lcapps 文件中没有可展示的应用", + "unsupportedDecompression": "当前浏览器不支持 DecompressionStream,无法在本地解压文件", + "unknownError": "未知错误", + "workerFailed": "分析进程启动失败", + "appName": "应用名", + "packageName": "包名", + "versionName": "versionName", + "versionCode": "versionCode", + "targetSdk": "Target SDK", + "minSdk": "Min SDK", + "compileSdk": "Compile SDK", + "fileName": "文件名", + "fileSize": "文件大小", + "analyzedAt": "分析时间", + "duration": "耗时", + "terminalSystem": "终端系统", + "permissions": "权限", + "nativeLibraries": "原生库", + "components": "组件", + "signatures": "签名", + "metaData": "元数据", + "buildFeatures": "构建特性", + "noBuildFeatures": "未识别到构建特性", + "noNativeLibraries": "未发现原生库", + "noSdkMarkers": "未匹配到 SDK 标记", + "noComponents": "未声明组件", + "noPermissions": "未声明权限", + "noSignatures": "未发现签名证书", + "noMetaData": "未声明 application 级元数据", + "summary": "摘要", + "sdkNative": "原生库 SDK 标记", + "sdkComponents": "组件 SDK 标记", + "activities": "Activity", + "services": "Service", + "receivers": "Receiver", + "providers": "Provider", + "exported": "exported", + "notExported": "not exported", + "enabled": "enabled", + "disabled": "disabled", + "unknown": "未知", + "permission": "权限", + "process": "进程", + "authorities": "authorities", + "actions": "actions", + "targetActivity": "targetActivity", + "sdk": "SDK", + "abi": "ABI", + "path": "路径", + "size": "大小", + "value": "值", + "resource": "资源", + "detectedRule": "标记规则", + "ruleDevTeam": "开发团队", + "ruleContributors": "贡献者", + "ruleSource": "来源", + "ruleUuid": "UUID", + "signatureSchemes": "签名方案", + "signatureCertificate": "签名证书 {index}", + "signatureVersion": "版本", + "signatureSerialNumber": "序列号", + "signatureIssuer": "发行人", + "signatureSubject": "主题", + "signatureValidFrom": "有效期始", + "signatureValidTo": "有效期至", + "signaturePublicKeyFormat": "公钥格式", + "signaturePublicKeyAlgorithm": "公钥算法", + "signaturePublicKeyExponent": "公钥指数", + "signaturePublicKeyModulusSize": "模数大小", + "signaturePublicKeyModulus": "模数", + "signaturePublicKeyY": "公钥值Y", + "signaturePublicKeyType": "公钥类型", + "signatureAlgorithmName": "签名算法", + "signatureAlgorithmOid": "签名算法 OID", + "signatureMd5": "MD5", + "signatureSha1": "SHA1", + "signatureSha256": "SHA256", + "signatureCharString": "CharString", + "signatureSourceEntry": "来源条目", + "signatureDerLength": "证书大小", + "rawNotice": "JSON 视图默认省略较大的 data URI", + "selectedFile": "{name} · {size}", + "completedIn": "{seconds}s", + "localFile": "本地文件", + "archiveDistributionTitle": "子 APK 分布", + "archiveDistributionSummary": "{count} 个子 APK · {size}", + "archiveDistributionPercent": "占比", + "archiveAnalyzedEntry": "主包", + "compareSlotLeft": "左侧文件", + "compareSlotRight": "右侧文件", + "compareSlotNote": "拖入文件,或从历史记录选择", + "compareDropPrompt": "点击上传或拖入文件", + "compareSlotEmpty": "未选择文件", + "compareSlotEmptyHint": "上传一个文件,或选择一条历史记录", + "compareSlotReady": "{name} · {size}", + "compareHistoryLabel": "历史记录", + "compareHistoryPlaceholder": "选择历史记录", + "compareClearLeft": "清空左侧", + "compareClearRight": "清空右侧", + "compareSourceHistory": "历史记录", + "compareSourceUpload": "本地上传", + "comparePackageMismatch": "包名不同的对比", + "compareAwaitingPair": "再选择一个文件后开始对比", + "compareChangeCount": "差异项", + "compareBasicInfo": "基础信息", + "compareDifferences": "差异明细", + "compareNoDifferences": "未发现差异", + "compareField": "字段", + "compareLeft": "左侧", + "compareRight": "右侧", + "compareOnlyLeft": "仅左侧", + "compareOnlyRight": "仅右侧", + "compareAdded": "新增", + "compareDeleted": "删除", + "compareChanged": "改变", + "compareMoved": "移动", + "compareNoItems": "无", + "compareMoreItems": "还有 {count} 项未展示" + } +} From 6fb62a26225ce358297820dde1e3d962ce34fe9a Mon Sep 17 00:00:00 2001 From: Absinthe Date: Thu, 11 Jun 2026 11:25:14 +0800 Subject: [PATCH 03/70] New translations zh-hans.json (Chinese Simplified) [ci skip] --- locales/zh-CN.json | 301 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 301 insertions(+) create mode 100644 locales/zh-CN.json diff --git a/locales/zh-CN.json b/locales/zh-CN.json new file mode 100644 index 0000000..e0df894 --- /dev/null +++ b/locales/zh-CN.json @@ -0,0 +1,301 @@ +{ + "locale": { + "nativeName": "中文简体", + "englishName": "Chinese (Simplified)" + }, + "commands": { + "start_description": "显示使用说明", + "apkinfo_description": "解析当前或回复的 APK/APKS/APKM/XAPK 文件", + "upload_description": "上传大型 Android 包解析" + }, + "bot": { + "start": "你好,我可以帮你解析 APK、APKS、APKM 和 XAPK。\n\n私聊使用\n直接发送或转发 APK、APKS、APKM 或 XAPK 文件,我会自动解析。\n也可以发送 APK 下载链接,我会尝试用 HTTP Range 只下载少量元数据来解析。\n\n群组和频道\n直接发送 Android 包文件,或把 /apkinfo 写在文件消息里、APK 链接旁边。\n也可以回复含 Android 包文件的消息,再发送 /apkinfo。\n\n大文件\n超过 20MB 的文件,可以使用 /upload 打开网页上传入口。", + "apk_not_found": "我没有找到可解析的 APK、APKS、APKM、XAPK 文件或 APK 链接。你可以直接发送或转发 Android 包文件、发送 APK 下载链接,或者把 /apkinfo 写在同一条文件消息或链接消息里;如果是回复解析,也请确认你回复的那条消息本身就是 Android 包文件或 APK 链接。需要注意的是,群组里的转发文件有时不会把文件对象完整发给 bot,这种情况下我无法从 Telegram 重新取回它,建议直接在群里发送文件、发送 APK 下载链接,或私聊 bot 再转发文件。若群组开启了 Privacy Mode,请优先使用 /apkinfo@bot_username。", + "apk_too_large": "这个文件超过 Telegram 官方 Bot API 当前可下载的 20MB 限制。请使用下方按钮打开网页上传入口,直接上传到 Worker 解析。", + "upload_entry": "打开网页上传入口后选择 APK、APKS、APKM 或 XAPK 文件即可解析。这个入口绕过 Telegram Bot API 的 20MB 文件下载限制,但仍会受到 Cloudflare Worker 请求体和内存限制影响。", + "parse_failed": "解析 Android 包失败:{message}", + "open_full_report": "打开完整报告", + "open_upload_page": "上传大文件", + "source_channel": "频道消息", + "source_forwarded": "转发消息", + "source_private": "私聊消息", + "source_group": "群组消息", + "source_web_upload": "网页上传", + "source_link_preview": "链接预览", + "source_default": "Telegram 消息" + }, + "upload": { + "page_title": "上传 Android 包解析", + "heading": "上传 Android 包解析", + "intro": "直接把 APK、APKS、APKM 或 XAPK 上传到 Worker 解析,适合超过 Telegram Bot API 20MB 下载限制的文件。", + "file_label": "Android 包文件", + "language_label": "报告语言", + "submit": "开始解析", + "busy": "正在上传并解析...", + "progress_label": "上传进度", + "progress_preparing": "准备上传...", + "progress_complete": "上传完成,正在生成报告...", + "network_error": "上传失败,请检查网络后重试。", + "max_hint": "当前入口建议上传不超过 {maxSize} 的文件。", + "choose_file": "请选择 .apk、.apks、.apkm 或 .xapk 文件。", + "invalid_file": "请上传 .apk、.apks、.apkm 或 .xapk 文件。", + "too_large": "文件超过当前 Worker 上传解析上限:{maxSize}。", + "parse_failed": "解析 Android 包失败:{message}" + }, + "summary": { + "completed": "APK 解析完成", + "app_name": "应用名: {appName}", + "package_name": "包名: {packageName}", + "version_name": "versionName: {versionName}", + "version_code": "versionCode: {versionCode}", + "sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", + "permissions_count": "权限数量: {count}", + "native_library_count": "原生库数量: {count}", + "component_count": "组件数量: {count}", + "meta_data_count": "meta-data 数量: {count}", + "sdk_markers": "SDK 标记: {value}", + "features": "特性: {value}", + "open_report_hint": "完整报告请使用下方按钮打开。", + "sdk_summary_native": "原生库 {count}", + "sdk_summary_components": "组件 {count}" + }, + "report": { + "fallback_title": "APK 报告", + "error_title": "报告加载失败", + "missing_path": "缺少 report path 参数。", + "views": "浏览 {count}", + "meta_fallback": "APK 解析报告" + }, + "telegraph": { + "page_title": "{appName} APK 信息", + "apk_summary": "APK 摘要", + "file_info": "文件信息", + "native_libraries": "原生库", + "build_features": "构建特性", + "permissions": "权限", + "components": "组件", + "application_meta_data": "Application Meta-Data", + "native_sdk_markers": "原生库 SDK 标记", + "marked_sdks": "已标记的 SDK", + "app_icon": "应用图标", + "line_app": "应用: {value}", + "line_package_name": "包名: {value}", + "line_icon": "图标: {value}", + "icon_detected": "已解析", + "icon_detected_with_path": "已解析 ({path})", + "icon_missing": "未解析到", + "line_version": "版本: {versionName} ({versionCode})", + "line_sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", + "line_stats": "统计: 权限 {permissions} · 原生库 {nativeLibraries} · 组件 {components} · meta-data {metaData}", + "line_file_name": "文件名: {value}", + "line_file_size": "文件大小: {value}", + "line_message_source": "消息来源: {value}", + "line_analyzed_at": "分析时间: {value}", + "report_compacted_notice": "报告内容超过 Telegraph 单页限制,已自动切换为精简版:统计仍基于完整 APK,列表仅展示前若干项。", + "no_build_features": "未识别到构建特性。", + "no_native_libraries": "未发现原生库。", + "no_permissions": "未声明权限。", + "no_component": "未声明 {title}。", + "no_application_meta_data": "未声明 application 级 meta-data。", + "alias_target": "alias -> {target}", + "resource_resolved": "resolved from string resource", + "resource_reference": "resource reference", + "feature_detected": "已检测到", + "feature_kotlin": "Kotlin", + "feature_compose": "Compose", + "feature_gradle": "Gradle", + "feature_agp": "Android Gradle Plugin", + "feature_app_metadata_version": "App Metadata Version", + "unknown": "未知" + }, + "errors": { + "unknown": "未知错误", + "telegram_missing_file_path": "Telegram 没有返回可下载的 file_path", + "telegram_file_download_failed": "Telegram 文件下载失败 ({status})", + "telegram_api_request_failed": "Telegram API {method} 请求失败 ({status})", + "telegram_api_result_failed": "Telegram API {method} 返回失败", + "telegraph_invalid_path": "Telegraph 页面路径无效", + "telegraph_fetch_failed": "Telegraph 页面获取失败 ({status})", + "telegraph_fetch_failed_generic": "Telegraph 页面获取失败", + "telegraph_api_failed": "Telegraph API {method} 请求失败 ({status})", + "telegraph_api_result_failed": "Telegraph API {method} 返回失败" + }, + "webui": { + "title": "LibChecker WebUI", + "subtitle": "在线分析 APK/APKS/APKM/XAPK", + "modeLabel": "模式", + "modeAnalyze": "分析", + "modeCompare": "对比", + "themeLabel": "主题", + "themeDark": "深色", + "themeLight": "浅色", + "themeSystem": "系统", + "languageLabel": "语言", + "exportJson": "导出 JSON", + "clear": "清空", + "filePrompt": "选择或拖入", + "fileIdle": "未选择文件", + "localNote": "文件只在当前浏览器中解析", + "analyze": "开始分析", + "analyzing": "分析中", + "progressReady": "等待文件", + "progressReading": "读取文件", + "progressParsing": "解析 Manifest、资源与 DEX 标记", + "progressDone": "分析完成", + "historyTitle": "历史记录", + "historyNote": "保存在当前浏览器中,点击记录可重新打开结果", + "historyEmpty": "还没有历史记录", + "historyOpen": "打开历史记录", + "historyOpening": "正在打开报告...", + "historyDelete": "删除", + "historyExpand": "展开历史", + "historyCollapse": "收起历史", + "clearHistory": "清空历史", + "historyItemMeta": "{version} · Target SDK {targetSdk}", + "historyFileMeta": "{file} · {size} · {date}", + "emptyTitle": "等待文件", + "emptyBody": "分析完成后会在这里展示摘要、SDK 标记、组件、权限、签名和元数据", + "tabSummary": "摘要", + "tabSdk": "SDK", + "tabNative": "原生库", + "tabComponents": "组件", + "tabPermissions": "权限", + "tabSignatures": "签名", + "tabMeta": "元数据", + "tabRaw": "JSON", + "noFile": "请选择 APK、APKS、APKM、XAPK 或 LCAPPS 文件", + "invalidFile": "请上传 .apk、.apks、.apkm、.xapk 或 .lcapps 文件", + "lcappsTitle": "选择应用", + "lcappsSubtitle": "{name} · {count} 个应用", + "lcappsSearch": "搜索应用或包名", + "lcappsLoading": "正在读取应用列表", + "lcappsClose": "关闭", + "lcappsReopen": "重新打开应用列表", + "lcappsReopenWithApp": "重新打开 {app} 的应用列表", + "lcappsNoMatches": "没有匹配的应用", + "lcappsReadFailed": "读取 .lcapps 文件失败", + "lcappsInvalidZip": ".lcapps 文件不是有效的 ZIP 压缩包", + "lcappsUnsupportedZip64": "当前浏览器暂不支持 ZIP64 格式的 .lcapps 文件", + "lcappsMissingJson": ".lcapps 文件中没有找到应用 JSON", + "lcappsInvalidJson": ".lcapps 文件中的应用 JSON 无法解析", + "lcappsUnsupportedCompression": ".lcapps 文件包含当前浏览器不支持的压缩方式", + "lcappsEmpty": ".lcapps 文件中没有可展示的应用", + "unsupportedDecompression": "当前浏览器不支持 DecompressionStream,无法在本地解压文件", + "unknownError": "未知错误", + "workerFailed": "分析进程启动失败", + "appName": "应用名", + "packageName": "包名", + "versionName": "versionName", + "versionCode": "versionCode", + "targetSdk": "Target SDK", + "minSdk": "Min SDK", + "compileSdk": "Compile SDK", + "fileName": "文件名", + "fileSize": "文件大小", + "analyzedAt": "分析时间", + "duration": "耗时", + "terminalSystem": "终端系统", + "permissions": "权限", + "nativeLibraries": "原生库", + "components": "组件", + "signatures": "签名", + "metaData": "元数据", + "buildFeatures": "构建特性", + "noBuildFeatures": "未识别到构建特性", + "noNativeLibraries": "未发现原生库", + "noSdkMarkers": "未匹配到 SDK 标记", + "noComponents": "未声明组件", + "noPermissions": "未声明权限", + "noSignatures": "未发现签名证书", + "noMetaData": "未声明 application 级元数据", + "summary": "摘要", + "sdkNative": "原生库 SDK 标记", + "sdkComponents": "组件 SDK 标记", + "activities": "Activity", + "services": "Service", + "receivers": "Receiver", + "providers": "Provider", + "exported": "exported", + "notExported": "not exported", + "enabled": "enabled", + "disabled": "disabled", + "unknown": "未知", + "permission": "权限", + "process": "进程", + "authorities": "authorities", + "actions": "actions", + "targetActivity": "targetActivity", + "sdk": "SDK", + "abi": "ABI", + "path": "路径", + "size": "大小", + "value": "值", + "resource": "资源", + "detectedRule": "标记规则", + "ruleDevTeam": "开发团队", + "ruleContributors": "贡献者", + "ruleSource": "来源", + "ruleUuid": "UUID", + "signatureSchemes": "签名方案", + "signatureCertificate": "签名证书 {index}", + "signatureVersion": "版本", + "signatureSerialNumber": "序列号", + "signatureIssuer": "发行人", + "signatureSubject": "主题", + "signatureValidFrom": "有效期始", + "signatureValidTo": "有效期至", + "signaturePublicKeyFormat": "公钥格式", + "signaturePublicKeyAlgorithm": "公钥算法", + "signaturePublicKeyExponent": "公钥指数", + "signaturePublicKeyModulusSize": "模数大小", + "signaturePublicKeyModulus": "模数", + "signaturePublicKeyY": "公钥值Y", + "signaturePublicKeyType": "公钥类型", + "signatureAlgorithmName": "签名算法", + "signatureAlgorithmOid": "签名算法 OID", + "signatureMd5": "MD5", + "signatureSha1": "SHA1", + "signatureSha256": "SHA256", + "signatureCharString": "CharString", + "signatureSourceEntry": "来源条目", + "signatureDerLength": "证书大小", + "rawNotice": "JSON 视图默认省略较大的 data URI", + "selectedFile": "{name} · {size}", + "completedIn": "{seconds}s", + "localFile": "本地文件", + "archiveDistributionTitle": "子 APK 分布", + "archiveDistributionSummary": "{count} 个子 APK · {size}", + "archiveDistributionPercent": "占比", + "archiveAnalyzedEntry": "主包", + "compareSlotLeft": "左侧文件", + "compareSlotRight": "右侧文件", + "compareSlotNote": "拖入文件,或从历史记录选择", + "compareDropPrompt": "点击上传或拖入文件", + "compareSlotEmpty": "未选择文件", + "compareSlotEmptyHint": "上传一个文件,或选择一条历史记录", + "compareSlotReady": "{name} · {size}", + "compareHistoryLabel": "历史记录", + "compareHistoryPlaceholder": "选择历史记录", + "compareClearLeft": "清空左侧", + "compareClearRight": "清空右侧", + "compareSourceHistory": "历史记录", + "compareSourceUpload": "本地上传", + "comparePackageMismatch": "包名不同的对比", + "compareAwaitingPair": "再选择一个文件后开始对比", + "compareChangeCount": "差异项", + "compareBasicInfo": "基础信息", + "compareDifferences": "差异明细", + "compareNoDifferences": "未发现差异", + "compareField": "字段", + "compareLeft": "左侧", + "compareRight": "右侧", + "compareOnlyLeft": "仅左侧", + "compareOnlyRight": "仅右侧", + "compareAdded": "新增", + "compareDeleted": "删除", + "compareChanged": "改变", + "compareMoved": "移动", + "compareNoItems": "无", + "compareMoreItems": "还有 {count} 项未展示" + } +} From c7fa0e7a56680f6986d250881f7bb9c8a5b3e0d2 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Thu, 11 Jun 2026 11:25:15 +0800 Subject: [PATCH 04/70] New translations zh-hans.json (Chinese Traditional) [ci skip] --- locales/zh-TW.json | 301 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 301 insertions(+) create mode 100644 locales/zh-TW.json diff --git a/locales/zh-TW.json b/locales/zh-TW.json new file mode 100644 index 0000000..e0df894 --- /dev/null +++ b/locales/zh-TW.json @@ -0,0 +1,301 @@ +{ + "locale": { + "nativeName": "中文简体", + "englishName": "Chinese (Simplified)" + }, + "commands": { + "start_description": "显示使用说明", + "apkinfo_description": "解析当前或回复的 APK/APKS/APKM/XAPK 文件", + "upload_description": "上传大型 Android 包解析" + }, + "bot": { + "start": "你好,我可以帮你解析 APK、APKS、APKM 和 XAPK。\n\n私聊使用\n直接发送或转发 APK、APKS、APKM 或 XAPK 文件,我会自动解析。\n也可以发送 APK 下载链接,我会尝试用 HTTP Range 只下载少量元数据来解析。\n\n群组和频道\n直接发送 Android 包文件,或把 /apkinfo 写在文件消息里、APK 链接旁边。\n也可以回复含 Android 包文件的消息,再发送 /apkinfo。\n\n大文件\n超过 20MB 的文件,可以使用 /upload 打开网页上传入口。", + "apk_not_found": "我没有找到可解析的 APK、APKS、APKM、XAPK 文件或 APK 链接。你可以直接发送或转发 Android 包文件、发送 APK 下载链接,或者把 /apkinfo 写在同一条文件消息或链接消息里;如果是回复解析,也请确认你回复的那条消息本身就是 Android 包文件或 APK 链接。需要注意的是,群组里的转发文件有时不会把文件对象完整发给 bot,这种情况下我无法从 Telegram 重新取回它,建议直接在群里发送文件、发送 APK 下载链接,或私聊 bot 再转发文件。若群组开启了 Privacy Mode,请优先使用 /apkinfo@bot_username。", + "apk_too_large": "这个文件超过 Telegram 官方 Bot API 当前可下载的 20MB 限制。请使用下方按钮打开网页上传入口,直接上传到 Worker 解析。", + "upload_entry": "打开网页上传入口后选择 APK、APKS、APKM 或 XAPK 文件即可解析。这个入口绕过 Telegram Bot API 的 20MB 文件下载限制,但仍会受到 Cloudflare Worker 请求体和内存限制影响。", + "parse_failed": "解析 Android 包失败:{message}", + "open_full_report": "打开完整报告", + "open_upload_page": "上传大文件", + "source_channel": "频道消息", + "source_forwarded": "转发消息", + "source_private": "私聊消息", + "source_group": "群组消息", + "source_web_upload": "网页上传", + "source_link_preview": "链接预览", + "source_default": "Telegram 消息" + }, + "upload": { + "page_title": "上传 Android 包解析", + "heading": "上传 Android 包解析", + "intro": "直接把 APK、APKS、APKM 或 XAPK 上传到 Worker 解析,适合超过 Telegram Bot API 20MB 下载限制的文件。", + "file_label": "Android 包文件", + "language_label": "报告语言", + "submit": "开始解析", + "busy": "正在上传并解析...", + "progress_label": "上传进度", + "progress_preparing": "准备上传...", + "progress_complete": "上传完成,正在生成报告...", + "network_error": "上传失败,请检查网络后重试。", + "max_hint": "当前入口建议上传不超过 {maxSize} 的文件。", + "choose_file": "请选择 .apk、.apks、.apkm 或 .xapk 文件。", + "invalid_file": "请上传 .apk、.apks、.apkm 或 .xapk 文件。", + "too_large": "文件超过当前 Worker 上传解析上限:{maxSize}。", + "parse_failed": "解析 Android 包失败:{message}" + }, + "summary": { + "completed": "APK 解析完成", + "app_name": "应用名: {appName}", + "package_name": "包名: {packageName}", + "version_name": "versionName: {versionName}", + "version_code": "versionCode: {versionCode}", + "sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", + "permissions_count": "权限数量: {count}", + "native_library_count": "原生库数量: {count}", + "component_count": "组件数量: {count}", + "meta_data_count": "meta-data 数量: {count}", + "sdk_markers": "SDK 标记: {value}", + "features": "特性: {value}", + "open_report_hint": "完整报告请使用下方按钮打开。", + "sdk_summary_native": "原生库 {count}", + "sdk_summary_components": "组件 {count}" + }, + "report": { + "fallback_title": "APK 报告", + "error_title": "报告加载失败", + "missing_path": "缺少 report path 参数。", + "views": "浏览 {count}", + "meta_fallback": "APK 解析报告" + }, + "telegraph": { + "page_title": "{appName} APK 信息", + "apk_summary": "APK 摘要", + "file_info": "文件信息", + "native_libraries": "原生库", + "build_features": "构建特性", + "permissions": "权限", + "components": "组件", + "application_meta_data": "Application Meta-Data", + "native_sdk_markers": "原生库 SDK 标记", + "marked_sdks": "已标记的 SDK", + "app_icon": "应用图标", + "line_app": "应用: {value}", + "line_package_name": "包名: {value}", + "line_icon": "图标: {value}", + "icon_detected": "已解析", + "icon_detected_with_path": "已解析 ({path})", + "icon_missing": "未解析到", + "line_version": "版本: {versionName} ({versionCode})", + "line_sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", + "line_stats": "统计: 权限 {permissions} · 原生库 {nativeLibraries} · 组件 {components} · meta-data {metaData}", + "line_file_name": "文件名: {value}", + "line_file_size": "文件大小: {value}", + "line_message_source": "消息来源: {value}", + "line_analyzed_at": "分析时间: {value}", + "report_compacted_notice": "报告内容超过 Telegraph 单页限制,已自动切换为精简版:统计仍基于完整 APK,列表仅展示前若干项。", + "no_build_features": "未识别到构建特性。", + "no_native_libraries": "未发现原生库。", + "no_permissions": "未声明权限。", + "no_component": "未声明 {title}。", + "no_application_meta_data": "未声明 application 级 meta-data。", + "alias_target": "alias -> {target}", + "resource_resolved": "resolved from string resource", + "resource_reference": "resource reference", + "feature_detected": "已检测到", + "feature_kotlin": "Kotlin", + "feature_compose": "Compose", + "feature_gradle": "Gradle", + "feature_agp": "Android Gradle Plugin", + "feature_app_metadata_version": "App Metadata Version", + "unknown": "未知" + }, + "errors": { + "unknown": "未知错误", + "telegram_missing_file_path": "Telegram 没有返回可下载的 file_path", + "telegram_file_download_failed": "Telegram 文件下载失败 ({status})", + "telegram_api_request_failed": "Telegram API {method} 请求失败 ({status})", + "telegram_api_result_failed": "Telegram API {method} 返回失败", + "telegraph_invalid_path": "Telegraph 页面路径无效", + "telegraph_fetch_failed": "Telegraph 页面获取失败 ({status})", + "telegraph_fetch_failed_generic": "Telegraph 页面获取失败", + "telegraph_api_failed": "Telegraph API {method} 请求失败 ({status})", + "telegraph_api_result_failed": "Telegraph API {method} 返回失败" + }, + "webui": { + "title": "LibChecker WebUI", + "subtitle": "在线分析 APK/APKS/APKM/XAPK", + "modeLabel": "模式", + "modeAnalyze": "分析", + "modeCompare": "对比", + "themeLabel": "主题", + "themeDark": "深色", + "themeLight": "浅色", + "themeSystem": "系统", + "languageLabel": "语言", + "exportJson": "导出 JSON", + "clear": "清空", + "filePrompt": "选择或拖入", + "fileIdle": "未选择文件", + "localNote": "文件只在当前浏览器中解析", + "analyze": "开始分析", + "analyzing": "分析中", + "progressReady": "等待文件", + "progressReading": "读取文件", + "progressParsing": "解析 Manifest、资源与 DEX 标记", + "progressDone": "分析完成", + "historyTitle": "历史记录", + "historyNote": "保存在当前浏览器中,点击记录可重新打开结果", + "historyEmpty": "还没有历史记录", + "historyOpen": "打开历史记录", + "historyOpening": "正在打开报告...", + "historyDelete": "删除", + "historyExpand": "展开历史", + "historyCollapse": "收起历史", + "clearHistory": "清空历史", + "historyItemMeta": "{version} · Target SDK {targetSdk}", + "historyFileMeta": "{file} · {size} · {date}", + "emptyTitle": "等待文件", + "emptyBody": "分析完成后会在这里展示摘要、SDK 标记、组件、权限、签名和元数据", + "tabSummary": "摘要", + "tabSdk": "SDK", + "tabNative": "原生库", + "tabComponents": "组件", + "tabPermissions": "权限", + "tabSignatures": "签名", + "tabMeta": "元数据", + "tabRaw": "JSON", + "noFile": "请选择 APK、APKS、APKM、XAPK 或 LCAPPS 文件", + "invalidFile": "请上传 .apk、.apks、.apkm、.xapk 或 .lcapps 文件", + "lcappsTitle": "选择应用", + "lcappsSubtitle": "{name} · {count} 个应用", + "lcappsSearch": "搜索应用或包名", + "lcappsLoading": "正在读取应用列表", + "lcappsClose": "关闭", + "lcappsReopen": "重新打开应用列表", + "lcappsReopenWithApp": "重新打开 {app} 的应用列表", + "lcappsNoMatches": "没有匹配的应用", + "lcappsReadFailed": "读取 .lcapps 文件失败", + "lcappsInvalidZip": ".lcapps 文件不是有效的 ZIP 压缩包", + "lcappsUnsupportedZip64": "当前浏览器暂不支持 ZIP64 格式的 .lcapps 文件", + "lcappsMissingJson": ".lcapps 文件中没有找到应用 JSON", + "lcappsInvalidJson": ".lcapps 文件中的应用 JSON 无法解析", + "lcappsUnsupportedCompression": ".lcapps 文件包含当前浏览器不支持的压缩方式", + "lcappsEmpty": ".lcapps 文件中没有可展示的应用", + "unsupportedDecompression": "当前浏览器不支持 DecompressionStream,无法在本地解压文件", + "unknownError": "未知错误", + "workerFailed": "分析进程启动失败", + "appName": "应用名", + "packageName": "包名", + "versionName": "versionName", + "versionCode": "versionCode", + "targetSdk": "Target SDK", + "minSdk": "Min SDK", + "compileSdk": "Compile SDK", + "fileName": "文件名", + "fileSize": "文件大小", + "analyzedAt": "分析时间", + "duration": "耗时", + "terminalSystem": "终端系统", + "permissions": "权限", + "nativeLibraries": "原生库", + "components": "组件", + "signatures": "签名", + "metaData": "元数据", + "buildFeatures": "构建特性", + "noBuildFeatures": "未识别到构建特性", + "noNativeLibraries": "未发现原生库", + "noSdkMarkers": "未匹配到 SDK 标记", + "noComponents": "未声明组件", + "noPermissions": "未声明权限", + "noSignatures": "未发现签名证书", + "noMetaData": "未声明 application 级元数据", + "summary": "摘要", + "sdkNative": "原生库 SDK 标记", + "sdkComponents": "组件 SDK 标记", + "activities": "Activity", + "services": "Service", + "receivers": "Receiver", + "providers": "Provider", + "exported": "exported", + "notExported": "not exported", + "enabled": "enabled", + "disabled": "disabled", + "unknown": "未知", + "permission": "权限", + "process": "进程", + "authorities": "authorities", + "actions": "actions", + "targetActivity": "targetActivity", + "sdk": "SDK", + "abi": "ABI", + "path": "路径", + "size": "大小", + "value": "值", + "resource": "资源", + "detectedRule": "标记规则", + "ruleDevTeam": "开发团队", + "ruleContributors": "贡献者", + "ruleSource": "来源", + "ruleUuid": "UUID", + "signatureSchemes": "签名方案", + "signatureCertificate": "签名证书 {index}", + "signatureVersion": "版本", + "signatureSerialNumber": "序列号", + "signatureIssuer": "发行人", + "signatureSubject": "主题", + "signatureValidFrom": "有效期始", + "signatureValidTo": "有效期至", + "signaturePublicKeyFormat": "公钥格式", + "signaturePublicKeyAlgorithm": "公钥算法", + "signaturePublicKeyExponent": "公钥指数", + "signaturePublicKeyModulusSize": "模数大小", + "signaturePublicKeyModulus": "模数", + "signaturePublicKeyY": "公钥值Y", + "signaturePublicKeyType": "公钥类型", + "signatureAlgorithmName": "签名算法", + "signatureAlgorithmOid": "签名算法 OID", + "signatureMd5": "MD5", + "signatureSha1": "SHA1", + "signatureSha256": "SHA256", + "signatureCharString": "CharString", + "signatureSourceEntry": "来源条目", + "signatureDerLength": "证书大小", + "rawNotice": "JSON 视图默认省略较大的 data URI", + "selectedFile": "{name} · {size}", + "completedIn": "{seconds}s", + "localFile": "本地文件", + "archiveDistributionTitle": "子 APK 分布", + "archiveDistributionSummary": "{count} 个子 APK · {size}", + "archiveDistributionPercent": "占比", + "archiveAnalyzedEntry": "主包", + "compareSlotLeft": "左侧文件", + "compareSlotRight": "右侧文件", + "compareSlotNote": "拖入文件,或从历史记录选择", + "compareDropPrompt": "点击上传或拖入文件", + "compareSlotEmpty": "未选择文件", + "compareSlotEmptyHint": "上传一个文件,或选择一条历史记录", + "compareSlotReady": "{name} · {size}", + "compareHistoryLabel": "历史记录", + "compareHistoryPlaceholder": "选择历史记录", + "compareClearLeft": "清空左侧", + "compareClearRight": "清空右侧", + "compareSourceHistory": "历史记录", + "compareSourceUpload": "本地上传", + "comparePackageMismatch": "包名不同的对比", + "compareAwaitingPair": "再选择一个文件后开始对比", + "compareChangeCount": "差异项", + "compareBasicInfo": "基础信息", + "compareDifferences": "差异明细", + "compareNoDifferences": "未发现差异", + "compareField": "字段", + "compareLeft": "左侧", + "compareRight": "右侧", + "compareOnlyLeft": "仅左侧", + "compareOnlyRight": "仅右侧", + "compareAdded": "新增", + "compareDeleted": "删除", + "compareChanged": "改变", + "compareMoved": "移动", + "compareNoItems": "无", + "compareMoreItems": "还有 {count} 项未展示" + } +} From b0b6ba2748332cb448ed3eedb6b7fcf9079c0977 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Thu, 11 Jun 2026 11:31:02 +0800 Subject: [PATCH 05/70] New translations en.json (Japanese) [ci skip] --- locales/ja-JP.json | 478 ++++++++++++++++++++++----------------------- 1 file changed, 239 insertions(+), 239 deletions(-) diff --git a/locales/ja-JP.json b/locales/ja-JP.json index e0df894..2858a5c 100644 --- a/locales/ja-JP.json +++ b/locales/ja-JP.json @@ -1,216 +1,216 @@ { "locale": { - "nativeName": "中文简体", - "englishName": "Chinese (Simplified)" + "nativeName": "English", + "englishName": "English" }, "commands": { - "start_description": "显示使用说明", - "apkinfo_description": "解析当前或回复的 APK/APKS/APKM/XAPK 文件", - "upload_description": "上传大型 Android 包解析" + "start_description": "Show usage instructions", + "apkinfo_description": "Analyze the current or replied APK/APKS/APKM/XAPK file", + "upload_description": "Upload a large Android package for analysis" }, "bot": { - "start": "你好,我可以帮你解析 APK、APKS、APKM 和 XAPK。\n\n私聊使用\n直接发送或转发 APK、APKS、APKM 或 XAPK 文件,我会自动解析。\n也可以发送 APK 下载链接,我会尝试用 HTTP Range 只下载少量元数据来解析。\n\n群组和频道\n直接发送 Android 包文件,或把 /apkinfo 写在文件消息里、APK 链接旁边。\n也可以回复含 Android 包文件的消息,再发送 /apkinfo。\n\n大文件\n超过 20MB 的文件,可以使用 /upload 打开网页上传入口。", - "apk_not_found": "我没有找到可解析的 APK、APKS、APKM、XAPK 文件或 APK 链接。你可以直接发送或转发 Android 包文件、发送 APK 下载链接,或者把 /apkinfo 写在同一条文件消息或链接消息里;如果是回复解析,也请确认你回复的那条消息本身就是 Android 包文件或 APK 链接。需要注意的是,群组里的转发文件有时不会把文件对象完整发给 bot,这种情况下我无法从 Telegram 重新取回它,建议直接在群里发送文件、发送 APK 下载链接,或私聊 bot 再转发文件。若群组开启了 Privacy Mode,请优先使用 /apkinfo@bot_username。", - "apk_too_large": "这个文件超过 Telegram 官方 Bot API 当前可下载的 20MB 限制。请使用下方按钮打开网页上传入口,直接上传到 Worker 解析。", - "upload_entry": "打开网页上传入口后选择 APK、APKS、APKM 或 XAPK 文件即可解析。这个入口绕过 Telegram Bot API 的 20MB 文件下载限制,但仍会受到 Cloudflare Worker 请求体和内存限制影响。", - "parse_failed": "解析 Android 包失败:{message}", - "open_full_report": "打开完整报告", - "open_upload_page": "上传大文件", - "source_channel": "频道消息", - "source_forwarded": "转发消息", - "source_private": "私聊消息", - "source_group": "群组消息", - "source_web_upload": "网页上传", - "source_link_preview": "链接预览", - "source_default": "Telegram 消息" + "start": "Hi! Send or forward an APK, APKS, APKM, or XAPK file and I'll analyze it automatically. You can also send an APK download link, and I'll try to parse it with HTTP Range by downloading only a small amount of metadata. In groups and channels, you can send an Android package directly, put /apkinfo in the file message or next to the APK link, or reply to a message containing an Android package with /apkinfo. For files larger than 20 MB, use /upload to open the web upload entry.", + "apk_not_found": "I couldn't find a parsable APK, APKS, APKM, XAPK file, or APK link. You can send or forward an Android package file directly, send an APK download link, or put /apkinfo in the same file/link message. If you're replying to analyze, make sure the replied message itself is an Android package file or APK link. In groups, forwarded files may not always include a complete file object for the bot, so I may be unable to retrieve them again from Telegram. In that case, please send the file directly in the group, send an APK download link, or forward it to me in a private chat. If Privacy Mode is enabled in the group, prefer using /apkinfo@bot_username.", + "apk_too_large": "This file exceeds Telegram Bot API's current 20 MB download limit. Use the button below to open the web upload entry and upload it directly to the Worker for analysis.", + "upload_entry": "Open the web upload entry, choose an APK, APKS, APKM, or XAPK file, and it will be parsed directly by the Worker. This bypasses Telegram Bot API's 20 MB file download limit, but Cloudflare Worker request body and memory limits still apply.", + "parse_failed": "Failed to parse Android package: {message}", + "open_full_report": "Open Full Report", + "open_upload_page": "Upload Large File", + "source_channel": "Channel Message", + "source_forwarded": "Forwarded Message", + "source_private": "Private Chat Message", + "source_group": "Group Message", + "source_web_upload": "Web Upload", + "source_link_preview": "Link Preview", + "source_default": "Telegram Message" }, "upload": { - "page_title": "上传 Android 包解析", - "heading": "上传 Android 包解析", - "intro": "直接把 APK、APKS、APKM 或 XAPK 上传到 Worker 解析,适合超过 Telegram Bot API 20MB 下载限制的文件。", - "file_label": "Android 包文件", - "language_label": "报告语言", - "submit": "开始解析", - "busy": "正在上传并解析...", - "progress_label": "上传进度", - "progress_preparing": "准备上传...", - "progress_complete": "上传完成,正在生成报告...", - "network_error": "上传失败,请检查网络后重试。", - "max_hint": "当前入口建议上传不超过 {maxSize} 的文件。", - "choose_file": "请选择 .apk、.apks、.apkm 或 .xapk 文件。", - "invalid_file": "请上传 .apk、.apks、.apkm 或 .xapk 文件。", - "too_large": "文件超过当前 Worker 上传解析上限:{maxSize}。", - "parse_failed": "解析 Android 包失败:{message}" + "page_title": "Upload Android Package for Analysis", + "heading": "Upload Android Package for Analysis", + "intro": "Upload an APK, APKS, APKM, or XAPK directly to the Worker. This is intended for files larger than Telegram Bot API's 20 MB download limit.", + "file_label": "Android Package File", + "language_label": "Report Language", + "submit": "Analyze", + "busy": "Uploading and analyzing...", + "progress_label": "Upload Progress", + "progress_preparing": "Preparing upload...", + "progress_complete": "Upload complete. Generating report...", + "network_error": "Upload failed. Please check your connection and try again.", + "max_hint": "This entry currently recommends files up to {maxSize}.", + "choose_file": "Choose an .apk, .apks, .apkm, or .xapk file.", + "invalid_file": "Please upload an .apk, .apks, .apkm, or .xapk file.", + "too_large": "The file exceeds the current Worker upload analysis limit: {maxSize}.", + "parse_failed": "Failed to parse Android package: {message}" }, "summary": { - "completed": "APK 解析完成", - "app_name": "应用名: {appName}", - "package_name": "包名: {packageName}", - "version_name": "versionName: {versionName}", - "version_code": "versionCode: {versionCode}", + "completed": "APK Analysis Complete", + "app_name": "App Name: {appName}", + "package_name": "Package Name: {packageName}", + "version_name": "Version Name: {versionName}", + "version_code": "Version Code: {versionCode}", "sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", - "permissions_count": "权限数量: {count}", - "native_library_count": "原生库数量: {count}", - "component_count": "组件数量: {count}", - "meta_data_count": "meta-data 数量: {count}", - "sdk_markers": "SDK 标记: {value}", - "features": "特性: {value}", - "open_report_hint": "完整报告请使用下方按钮打开。", - "sdk_summary_native": "原生库 {count}", - "sdk_summary_components": "组件 {count}" + "permissions_count": "Permissions: {count}", + "native_library_count": "Native Libraries: {count}", + "component_count": "Components: {count}", + "meta_data_count": "Meta-Data: {count}", + "sdk_markers": "SDK Markers: {value}", + "features": "Features: {value}", + "open_report_hint": "Use the button below to open the full report.", + "sdk_summary_native": "Native Libraries {count}", + "sdk_summary_components": "Components {count}" }, "report": { - "fallback_title": "APK 报告", - "error_title": "报告加载失败", - "missing_path": "缺少 report path 参数。", - "views": "浏览 {count}", - "meta_fallback": "APK 解析报告" + "fallback_title": "APK Report", + "error_title": "Failed to Load Report", + "missing_path": "Missing report path parameter.", + "views": "Views {count}", + "meta_fallback": "APK Analysis Report" }, "telegraph": { - "page_title": "{appName} APK 信息", - "apk_summary": "APK 摘要", - "file_info": "文件信息", - "native_libraries": "原生库", - "build_features": "构建特性", - "permissions": "权限", - "components": "组件", + "page_title": "{appName} APK Info", + "apk_summary": "APK Summary", + "file_info": "File Info", + "native_libraries": "Native Libraries", + "build_features": "Build Features", + "permissions": "Permissions", + "components": "Components", "application_meta_data": "Application Meta-Data", - "native_sdk_markers": "原生库 SDK 标记", - "marked_sdks": "已标记的 SDK", - "app_icon": "应用图标", - "line_app": "应用: {value}", - "line_package_name": "包名: {value}", - "line_icon": "图标: {value}", - "icon_detected": "已解析", - "icon_detected_with_path": "已解析 ({path})", - "icon_missing": "未解析到", - "line_version": "版本: {versionName} ({versionCode})", + "native_sdk_markers": "Native Library SDK Markers", + "marked_sdks": "Marked SDKs", + "app_icon": "App Icon", + "line_app": "App: {value}", + "line_package_name": "Package Name: {value}", + "line_icon": "Icon: {value}", + "icon_detected": "Detected", + "icon_detected_with_path": "Detected ({path})", + "icon_missing": "Not detected", + "line_version": "Version: {versionName} ({versionCode})", "line_sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", - "line_stats": "统计: 权限 {permissions} · 原生库 {nativeLibraries} · 组件 {components} · meta-data {metaData}", - "line_file_name": "文件名: {value}", - "line_file_size": "文件大小: {value}", - "line_message_source": "消息来源: {value}", - "line_analyzed_at": "分析时间: {value}", - "report_compacted_notice": "报告内容超过 Telegraph 单页限制,已自动切换为精简版:统计仍基于完整 APK,列表仅展示前若干项。", - "no_build_features": "未识别到构建特性。", - "no_native_libraries": "未发现原生库。", - "no_permissions": "未声明权限。", - "no_component": "未声明 {title}。", - "no_application_meta_data": "未声明 application 级 meta-data。", + "line_stats": "Stats: Permissions {permissions} · Native Libraries {nativeLibraries} · Components {components} · Meta-Data {metaData}", + "line_file_name": "File Name: {value}", + "line_file_size": "File Size: {value}", + "line_message_source": "Message Source: {value}", + "line_analyzed_at": "Analyzed At: {value}", + "report_compacted_notice": "The report exceeded Telegraph's single-page content limit, so a compact version was generated automatically. Stats still use the full APK, while lists only show the first items.", + "no_build_features": "No build features detected.", + "no_native_libraries": "No native libraries found.", + "no_permissions": "No permissions declared.", + "no_component": "No {title} declared.", + "no_application_meta_data": "No application-level meta-data declared.", "alias_target": "alias -> {target}", "resource_resolved": "resolved from string resource", "resource_reference": "resource reference", - "feature_detected": "已检测到", + "feature_detected": "Detected", "feature_kotlin": "Kotlin", "feature_compose": "Compose", "feature_gradle": "Gradle", "feature_agp": "Android Gradle Plugin", "feature_app_metadata_version": "App Metadata Version", - "unknown": "未知" + "unknown": "Unknown" }, "errors": { - "unknown": "未知错误", - "telegram_missing_file_path": "Telegram 没有返回可下载的 file_path", - "telegram_file_download_failed": "Telegram 文件下载失败 ({status})", - "telegram_api_request_failed": "Telegram API {method} 请求失败 ({status})", - "telegram_api_result_failed": "Telegram API {method} 返回失败", - "telegraph_invalid_path": "Telegraph 页面路径无效", - "telegraph_fetch_failed": "Telegraph 页面获取失败 ({status})", - "telegraph_fetch_failed_generic": "Telegraph 页面获取失败", - "telegraph_api_failed": "Telegraph API {method} 请求失败 ({status})", - "telegraph_api_result_failed": "Telegraph API {method} 返回失败" + "unknown": "Unknown error", + "telegram_missing_file_path": "Telegram did not return a downloadable file_path", + "telegram_file_download_failed": "Telegram file download failed ({status})", + "telegram_api_request_failed": "Telegram API {method} request failed ({status})", + "telegram_api_result_failed": "Telegram API {method} returned an error", + "telegraph_invalid_path": "Invalid Telegraph page path", + "telegraph_fetch_failed": "Failed to fetch Telegraph page ({status})", + "telegraph_fetch_failed_generic": "Failed to fetch Telegraph page", + "telegraph_api_failed": "Telegraph API {method} request failed ({status})", + "telegraph_api_result_failed": "Telegraph API {method} returned an error" }, "webui": { "title": "LibChecker WebUI", - "subtitle": "在线分析 APK/APKS/APKM/XAPK", - "modeLabel": "模式", - "modeAnalyze": "分析", - "modeCompare": "对比", - "themeLabel": "主题", - "themeDark": "深色", - "themeLight": "浅色", - "themeSystem": "系统", - "languageLabel": "语言", - "exportJson": "导出 JSON", - "clear": "清空", - "filePrompt": "选择或拖入", - "fileIdle": "未选择文件", - "localNote": "文件只在当前浏览器中解析", - "analyze": "开始分析", - "analyzing": "分析中", - "progressReady": "等待文件", - "progressReading": "读取文件", - "progressParsing": "解析 Manifest、资源与 DEX 标记", - "progressDone": "分析完成", - "historyTitle": "历史记录", - "historyNote": "保存在当前浏览器中,点击记录可重新打开结果", - "historyEmpty": "还没有历史记录", - "historyOpen": "打开历史记录", - "historyOpening": "正在打开报告...", - "historyDelete": "删除", - "historyExpand": "展开历史", - "historyCollapse": "收起历史", - "clearHistory": "清空历史", + "subtitle": "APK/APKS/APKM/XAPK Analyzer in Browser", + "modeLabel": "Mode", + "modeAnalyze": "Analyze", + "modeCompare": "Compare", + "themeLabel": "Theme", + "themeDark": "Dark", + "themeLight": "Light", + "themeSystem": "System", + "languageLabel": "Language", + "exportJson": "Export JSON", + "clear": "Clear", + "filePrompt": "Choose or drop", + "fileIdle": "No file selected", + "localNote": "The file is analyzed in this browser.", + "analyze": "Analyze", + "analyzing": "Analyzing", + "progressReady": "Waiting for file", + "progressReading": "Reading file", + "progressParsing": "Parsing manifest, resources, and DEX markers", + "progressDone": "Analysis complete", + "historyTitle": "History", + "historyNote": "Saved in this browser. Click an item to reopen the report.", + "historyEmpty": "No history yet.", + "historyOpen": "Open history item", + "historyOpening": "Opening report...", + "historyDelete": "Delete", + "historyExpand": "Expand History", + "historyCollapse": "Collapse History", + "clearHistory": "Clear History", "historyItemMeta": "{version} · Target SDK {targetSdk}", "historyFileMeta": "{file} · {size} · {date}", - "emptyTitle": "等待文件", - "emptyBody": "分析完成后会在这里展示摘要、SDK 标记、组件、权限、签名和元数据", - "tabSummary": "摘要", + "emptyTitle": "Waiting for file", + "emptyBody": "The report will show summary, SDK markers, components, permissions, signatures, and meta-data.", + "tabSummary": "Summary", "tabSdk": "SDK", - "tabNative": "原生库", - "tabComponents": "组件", - "tabPermissions": "权限", - "tabSignatures": "签名", - "tabMeta": "元数据", + "tabNative": "Native", + "tabComponents": "Components", + "tabPermissions": "Permissions", + "tabSignatures": "Signatures", + "tabMeta": "Meta-Data", "tabRaw": "JSON", - "noFile": "请选择 APK、APKS、APKM、XAPK 或 LCAPPS 文件", - "invalidFile": "请上传 .apk、.apks、.apkm、.xapk 或 .lcapps 文件", - "lcappsTitle": "选择应用", - "lcappsSubtitle": "{name} · {count} 个应用", - "lcappsSearch": "搜索应用或包名", - "lcappsLoading": "正在读取应用列表", - "lcappsClose": "关闭", - "lcappsReopen": "重新打开应用列表", - "lcappsReopenWithApp": "重新打开 {app} 的应用列表", - "lcappsNoMatches": "没有匹配的应用", - "lcappsReadFailed": "读取 .lcapps 文件失败", - "lcappsInvalidZip": ".lcapps 文件不是有效的 ZIP 压缩包", - "lcappsUnsupportedZip64": "当前浏览器暂不支持 ZIP64 格式的 .lcapps 文件", - "lcappsMissingJson": ".lcapps 文件中没有找到应用 JSON", - "lcappsInvalidJson": ".lcapps 文件中的应用 JSON 无法解析", - "lcappsUnsupportedCompression": ".lcapps 文件包含当前浏览器不支持的压缩方式", - "lcappsEmpty": ".lcapps 文件中没有可展示的应用", - "unsupportedDecompression": "当前浏览器不支持 DecompressionStream,无法在本地解压文件", - "unknownError": "未知错误", - "workerFailed": "分析进程启动失败", - "appName": "应用名", - "packageName": "包名", + "noFile": "Choose an APK, APKS, APKM, XAPK, or LCAPPS file.", + "invalidFile": "Please upload an .apk, .apks, .apkm, .xapk, or .lcapps file.", + "lcappsTitle": "Choose App", + "lcappsSubtitle": "{name} · {count} apps", + "lcappsSearch": "Search apps or package names", + "lcappsLoading": "Reading app list", + "lcappsClose": "Close", + "lcappsReopen": "Reopen app list", + "lcappsReopenWithApp": "Reopen {app} app list", + "lcappsNoMatches": "No matching apps", + "lcappsReadFailed": "Failed to read the .lcapps file.", + "lcappsInvalidZip": "The .lcapps file is not a valid ZIP archive.", + "lcappsUnsupportedZip64": "This browser does not support ZIP64 .lcapps files yet.", + "lcappsMissingJson": "No app JSON was found in the .lcapps file.", + "lcappsInvalidJson": "The app JSON in the .lcapps file could not be parsed.", + "lcappsUnsupportedCompression": "The .lcapps file uses a compression method this browser cannot read.", + "lcappsEmpty": "The .lcapps file does not contain any displayable apps.", + "unsupportedDecompression": "This browser does not support DecompressionStream, so the file cannot be decompressed locally.", + "unknownError": "Unknown error.", + "workerFailed": "Failed to start the analyzer worker.", + "appName": "App Name", + "packageName": "Package Name", "versionName": "versionName", "versionCode": "versionCode", "targetSdk": "Target SDK", "minSdk": "Min SDK", "compileSdk": "Compile SDK", - "fileName": "文件名", - "fileSize": "文件大小", - "analyzedAt": "分析时间", - "duration": "耗时", - "terminalSystem": "终端系统", - "permissions": "权限", - "nativeLibraries": "原生库", - "components": "组件", - "signatures": "签名", - "metaData": "元数据", - "buildFeatures": "构建特性", - "noBuildFeatures": "未识别到构建特性", - "noNativeLibraries": "未发现原生库", - "noSdkMarkers": "未匹配到 SDK 标记", - "noComponents": "未声明组件", - "noPermissions": "未声明权限", - "noSignatures": "未发现签名证书", - "noMetaData": "未声明 application 级元数据", - "summary": "摘要", - "sdkNative": "原生库 SDK 标记", - "sdkComponents": "组件 SDK 标记", + "fileName": "File Name", + "fileSize": "File Size", + "analyzedAt": "Analyzed At", + "duration": "Duration", + "terminalSystem": "Terminal System", + "permissions": "Permissions", + "nativeLibraries": "Native Libraries", + "components": "Components", + "signatures": "Signatures", + "metaData": "Meta-Data", + "buildFeatures": "Build Features", + "noBuildFeatures": "No build features detected.", + "noNativeLibraries": "No native libraries found.", + "noSdkMarkers": "No SDK markers matched.", + "noComponents": "No components declared.", + "noPermissions": "No permissions declared.", + "noSignatures": "No signature certificates found.", + "noMetaData": "No application-level meta-data declared.", + "summary": "Summary", + "sdkNative": "Native Library SDK Markers", + "sdkComponents": "Component SDK Markers", "activities": "Activity", "services": "Service", "receivers": "Receiver", @@ -219,83 +219,83 @@ "notExported": "not exported", "enabled": "enabled", "disabled": "disabled", - "unknown": "未知", - "permission": "权限", - "process": "进程", + "unknown": "Unknown", + "permission": "Permission", + "process": "Process", "authorities": "authorities", "actions": "actions", "targetActivity": "targetActivity", "sdk": "SDK", "abi": "ABI", - "path": "路径", - "size": "大小", - "value": "值", - "resource": "资源", - "detectedRule": "标记规则", - "ruleDevTeam": "开发团队", - "ruleContributors": "贡献者", - "ruleSource": "来源", + "path": "Path", + "size": "Size", + "value": "Value", + "resource": "Resource", + "detectedRule": "Matched Rule", + "ruleDevTeam": "Developer", + "ruleContributors": "Contributors", + "ruleSource": "Source", "ruleUuid": "UUID", - "signatureSchemes": "签名方案", - "signatureCertificate": "签名证书 {index}", - "signatureVersion": "版本", - "signatureSerialNumber": "序列号", - "signatureIssuer": "发行人", - "signatureSubject": "主题", - "signatureValidFrom": "有效期始", - "signatureValidTo": "有效期至", - "signaturePublicKeyFormat": "公钥格式", - "signaturePublicKeyAlgorithm": "公钥算法", - "signaturePublicKeyExponent": "公钥指数", - "signaturePublicKeyModulusSize": "模数大小", - "signaturePublicKeyModulus": "模数", - "signaturePublicKeyY": "公钥值Y", - "signaturePublicKeyType": "公钥类型", - "signatureAlgorithmName": "签名算法", - "signatureAlgorithmOid": "签名算法 OID", + "signatureSchemes": "Signing Schemes", + "signatureCertificate": "Signature Certificate {index}", + "signatureVersion": "Version", + "signatureSerialNumber": "Serial Number", + "signatureIssuer": "Issuer", + "signatureSubject": "Subject", + "signatureValidFrom": "Valid From", + "signatureValidTo": "Valid To", + "signaturePublicKeyFormat": "Public Key Format", + "signaturePublicKeyAlgorithm": "Public Key Algorithm", + "signaturePublicKeyExponent": "Public Key Exponent", + "signaturePublicKeyModulusSize": "Modulus Size", + "signaturePublicKeyModulus": "Modulus", + "signaturePublicKeyY": "Public Key Y", + "signaturePublicKeyType": "Public Key Type", + "signatureAlgorithmName": "Signature Algorithm", + "signatureAlgorithmOid": "Signature Algorithm OID", "signatureMd5": "MD5", "signatureSha1": "SHA1", "signatureSha256": "SHA256", "signatureCharString": "CharString", - "signatureSourceEntry": "来源条目", - "signatureDerLength": "证书大小", - "rawNotice": "JSON 视图默认省略较大的 data URI", + "signatureSourceEntry": "Source Entry", + "signatureDerLength": "Certificate Size", + "rawNotice": "The JSON view omits large data URIs by default.", "selectedFile": "{name} · {size}", "completedIn": "{seconds}s", - "localFile": "本地文件", - "archiveDistributionTitle": "子 APK 分布", - "archiveDistributionSummary": "{count} 个子 APK · {size}", - "archiveDistributionPercent": "占比", - "archiveAnalyzedEntry": "主包", - "compareSlotLeft": "左侧文件", - "compareSlotRight": "右侧文件", - "compareSlotNote": "拖入文件,或从历史记录选择", - "compareDropPrompt": "点击上传或拖入文件", - "compareSlotEmpty": "未选择文件", - "compareSlotEmptyHint": "上传一个文件,或选择一条历史记录", + "localFile": "Local file", + "archiveDistributionTitle": "Split APK Distribution", + "archiveDistributionSummary": "{count} split APKs · {size}", + "archiveDistributionPercent": "Share", + "archiveAnalyzedEntry": "main", + "compareSlotLeft": "Left File", + "compareSlotRight": "Right File", + "compareSlotNote": "Drop a file, or choose from history.", + "compareDropPrompt": "Click to upload or drop file", + "compareSlotEmpty": "No file selected", + "compareSlotEmptyHint": "Upload a file, or choose one history item.", "compareSlotReady": "{name} · {size}", - "compareHistoryLabel": "历史记录", - "compareHistoryPlaceholder": "选择历史记录", - "compareClearLeft": "清空左侧", - "compareClearRight": "清空右侧", - "compareSourceHistory": "历史记录", - "compareSourceUpload": "本地上传", - "comparePackageMismatch": "包名不同的对比", - "compareAwaitingPair": "再选择一个文件后开始对比", - "compareChangeCount": "差异项", - "compareBasicInfo": "基础信息", - "compareDifferences": "差异明细", - "compareNoDifferences": "未发现差异", - "compareField": "字段", - "compareLeft": "左侧", - "compareRight": "右侧", - "compareOnlyLeft": "仅左侧", - "compareOnlyRight": "仅右侧", - "compareAdded": "新增", - "compareDeleted": "删除", - "compareChanged": "改变", - "compareMoved": "移动", - "compareNoItems": "无", - "compareMoreItems": "还有 {count} 项未展示" + "compareHistoryLabel": "History", + "compareHistoryPlaceholder": "Choose from history", + "compareClearLeft": "Clear left", + "compareClearRight": "Clear right", + "compareSourceHistory": "History", + "compareSourceUpload": "Local upload", + "comparePackageMismatch": "Comparing different package names", + "compareAwaitingPair": "Choose one more file to start comparing.", + "compareChangeCount": "Changed Items", + "compareBasicInfo": "Basic Info", + "compareDifferences": "Differences", + "compareNoDifferences": "No differences found.", + "compareField": "Field", + "compareLeft": "Left", + "compareRight": "Right", + "compareOnlyLeft": "Left Only", + "compareOnlyRight": "Right Only", + "compareAdded": "Added", + "compareDeleted": "Deleted", + "compareChanged": "Changed", + "compareMoved": "Moved", + "compareNoItems": "None", + "compareMoreItems": "{count} more items hidden" } } From d29c33d5ec03bc791a3df7f39bc22b10caa931de Mon Sep 17 00:00:00 2001 From: Absinthe Date: Thu, 11 Jun 2026 11:31:03 +0800 Subject: [PATCH 06/70] New translations en.json (Korean) [ci skip] --- locales/ko-KR.json | 478 ++++++++++++++++++++++----------------------- 1 file changed, 239 insertions(+), 239 deletions(-) diff --git a/locales/ko-KR.json b/locales/ko-KR.json index e0df894..2858a5c 100644 --- a/locales/ko-KR.json +++ b/locales/ko-KR.json @@ -1,216 +1,216 @@ { "locale": { - "nativeName": "中文简体", - "englishName": "Chinese (Simplified)" + "nativeName": "English", + "englishName": "English" }, "commands": { - "start_description": "显示使用说明", - "apkinfo_description": "解析当前或回复的 APK/APKS/APKM/XAPK 文件", - "upload_description": "上传大型 Android 包解析" + "start_description": "Show usage instructions", + "apkinfo_description": "Analyze the current or replied APK/APKS/APKM/XAPK file", + "upload_description": "Upload a large Android package for analysis" }, "bot": { - "start": "你好,我可以帮你解析 APK、APKS、APKM 和 XAPK。\n\n私聊使用\n直接发送或转发 APK、APKS、APKM 或 XAPK 文件,我会自动解析。\n也可以发送 APK 下载链接,我会尝试用 HTTP Range 只下载少量元数据来解析。\n\n群组和频道\n直接发送 Android 包文件,或把 /apkinfo 写在文件消息里、APK 链接旁边。\n也可以回复含 Android 包文件的消息,再发送 /apkinfo。\n\n大文件\n超过 20MB 的文件,可以使用 /upload 打开网页上传入口。", - "apk_not_found": "我没有找到可解析的 APK、APKS、APKM、XAPK 文件或 APK 链接。你可以直接发送或转发 Android 包文件、发送 APK 下载链接,或者把 /apkinfo 写在同一条文件消息或链接消息里;如果是回复解析,也请确认你回复的那条消息本身就是 Android 包文件或 APK 链接。需要注意的是,群组里的转发文件有时不会把文件对象完整发给 bot,这种情况下我无法从 Telegram 重新取回它,建议直接在群里发送文件、发送 APK 下载链接,或私聊 bot 再转发文件。若群组开启了 Privacy Mode,请优先使用 /apkinfo@bot_username。", - "apk_too_large": "这个文件超过 Telegram 官方 Bot API 当前可下载的 20MB 限制。请使用下方按钮打开网页上传入口,直接上传到 Worker 解析。", - "upload_entry": "打开网页上传入口后选择 APK、APKS、APKM 或 XAPK 文件即可解析。这个入口绕过 Telegram Bot API 的 20MB 文件下载限制,但仍会受到 Cloudflare Worker 请求体和内存限制影响。", - "parse_failed": "解析 Android 包失败:{message}", - "open_full_report": "打开完整报告", - "open_upload_page": "上传大文件", - "source_channel": "频道消息", - "source_forwarded": "转发消息", - "source_private": "私聊消息", - "source_group": "群组消息", - "source_web_upload": "网页上传", - "source_link_preview": "链接预览", - "source_default": "Telegram 消息" + "start": "Hi! Send or forward an APK, APKS, APKM, or XAPK file and I'll analyze it automatically. You can also send an APK download link, and I'll try to parse it with HTTP Range by downloading only a small amount of metadata. In groups and channels, you can send an Android package directly, put /apkinfo in the file message or next to the APK link, or reply to a message containing an Android package with /apkinfo. For files larger than 20 MB, use /upload to open the web upload entry.", + "apk_not_found": "I couldn't find a parsable APK, APKS, APKM, XAPK file, or APK link. You can send or forward an Android package file directly, send an APK download link, or put /apkinfo in the same file/link message. If you're replying to analyze, make sure the replied message itself is an Android package file or APK link. In groups, forwarded files may not always include a complete file object for the bot, so I may be unable to retrieve them again from Telegram. In that case, please send the file directly in the group, send an APK download link, or forward it to me in a private chat. If Privacy Mode is enabled in the group, prefer using /apkinfo@bot_username.", + "apk_too_large": "This file exceeds Telegram Bot API's current 20 MB download limit. Use the button below to open the web upload entry and upload it directly to the Worker for analysis.", + "upload_entry": "Open the web upload entry, choose an APK, APKS, APKM, or XAPK file, and it will be parsed directly by the Worker. This bypasses Telegram Bot API's 20 MB file download limit, but Cloudflare Worker request body and memory limits still apply.", + "parse_failed": "Failed to parse Android package: {message}", + "open_full_report": "Open Full Report", + "open_upload_page": "Upload Large File", + "source_channel": "Channel Message", + "source_forwarded": "Forwarded Message", + "source_private": "Private Chat Message", + "source_group": "Group Message", + "source_web_upload": "Web Upload", + "source_link_preview": "Link Preview", + "source_default": "Telegram Message" }, "upload": { - "page_title": "上传 Android 包解析", - "heading": "上传 Android 包解析", - "intro": "直接把 APK、APKS、APKM 或 XAPK 上传到 Worker 解析,适合超过 Telegram Bot API 20MB 下载限制的文件。", - "file_label": "Android 包文件", - "language_label": "报告语言", - "submit": "开始解析", - "busy": "正在上传并解析...", - "progress_label": "上传进度", - "progress_preparing": "准备上传...", - "progress_complete": "上传完成,正在生成报告...", - "network_error": "上传失败,请检查网络后重试。", - "max_hint": "当前入口建议上传不超过 {maxSize} 的文件。", - "choose_file": "请选择 .apk、.apks、.apkm 或 .xapk 文件。", - "invalid_file": "请上传 .apk、.apks、.apkm 或 .xapk 文件。", - "too_large": "文件超过当前 Worker 上传解析上限:{maxSize}。", - "parse_failed": "解析 Android 包失败:{message}" + "page_title": "Upload Android Package for Analysis", + "heading": "Upload Android Package for Analysis", + "intro": "Upload an APK, APKS, APKM, or XAPK directly to the Worker. This is intended for files larger than Telegram Bot API's 20 MB download limit.", + "file_label": "Android Package File", + "language_label": "Report Language", + "submit": "Analyze", + "busy": "Uploading and analyzing...", + "progress_label": "Upload Progress", + "progress_preparing": "Preparing upload...", + "progress_complete": "Upload complete. Generating report...", + "network_error": "Upload failed. Please check your connection and try again.", + "max_hint": "This entry currently recommends files up to {maxSize}.", + "choose_file": "Choose an .apk, .apks, .apkm, or .xapk file.", + "invalid_file": "Please upload an .apk, .apks, .apkm, or .xapk file.", + "too_large": "The file exceeds the current Worker upload analysis limit: {maxSize}.", + "parse_failed": "Failed to parse Android package: {message}" }, "summary": { - "completed": "APK 解析完成", - "app_name": "应用名: {appName}", - "package_name": "包名: {packageName}", - "version_name": "versionName: {versionName}", - "version_code": "versionCode: {versionCode}", + "completed": "APK Analysis Complete", + "app_name": "App Name: {appName}", + "package_name": "Package Name: {packageName}", + "version_name": "Version Name: {versionName}", + "version_code": "Version Code: {versionCode}", "sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", - "permissions_count": "权限数量: {count}", - "native_library_count": "原生库数量: {count}", - "component_count": "组件数量: {count}", - "meta_data_count": "meta-data 数量: {count}", - "sdk_markers": "SDK 标记: {value}", - "features": "特性: {value}", - "open_report_hint": "完整报告请使用下方按钮打开。", - "sdk_summary_native": "原生库 {count}", - "sdk_summary_components": "组件 {count}" + "permissions_count": "Permissions: {count}", + "native_library_count": "Native Libraries: {count}", + "component_count": "Components: {count}", + "meta_data_count": "Meta-Data: {count}", + "sdk_markers": "SDK Markers: {value}", + "features": "Features: {value}", + "open_report_hint": "Use the button below to open the full report.", + "sdk_summary_native": "Native Libraries {count}", + "sdk_summary_components": "Components {count}" }, "report": { - "fallback_title": "APK 报告", - "error_title": "报告加载失败", - "missing_path": "缺少 report path 参数。", - "views": "浏览 {count}", - "meta_fallback": "APK 解析报告" + "fallback_title": "APK Report", + "error_title": "Failed to Load Report", + "missing_path": "Missing report path parameter.", + "views": "Views {count}", + "meta_fallback": "APK Analysis Report" }, "telegraph": { - "page_title": "{appName} APK 信息", - "apk_summary": "APK 摘要", - "file_info": "文件信息", - "native_libraries": "原生库", - "build_features": "构建特性", - "permissions": "权限", - "components": "组件", + "page_title": "{appName} APK Info", + "apk_summary": "APK Summary", + "file_info": "File Info", + "native_libraries": "Native Libraries", + "build_features": "Build Features", + "permissions": "Permissions", + "components": "Components", "application_meta_data": "Application Meta-Data", - "native_sdk_markers": "原生库 SDK 标记", - "marked_sdks": "已标记的 SDK", - "app_icon": "应用图标", - "line_app": "应用: {value}", - "line_package_name": "包名: {value}", - "line_icon": "图标: {value}", - "icon_detected": "已解析", - "icon_detected_with_path": "已解析 ({path})", - "icon_missing": "未解析到", - "line_version": "版本: {versionName} ({versionCode})", + "native_sdk_markers": "Native Library SDK Markers", + "marked_sdks": "Marked SDKs", + "app_icon": "App Icon", + "line_app": "App: {value}", + "line_package_name": "Package Name: {value}", + "line_icon": "Icon: {value}", + "icon_detected": "Detected", + "icon_detected_with_path": "Detected ({path})", + "icon_missing": "Not detected", + "line_version": "Version: {versionName} ({versionCode})", "line_sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", - "line_stats": "统计: 权限 {permissions} · 原生库 {nativeLibraries} · 组件 {components} · meta-data {metaData}", - "line_file_name": "文件名: {value}", - "line_file_size": "文件大小: {value}", - "line_message_source": "消息来源: {value}", - "line_analyzed_at": "分析时间: {value}", - "report_compacted_notice": "报告内容超过 Telegraph 单页限制,已自动切换为精简版:统计仍基于完整 APK,列表仅展示前若干项。", - "no_build_features": "未识别到构建特性。", - "no_native_libraries": "未发现原生库。", - "no_permissions": "未声明权限。", - "no_component": "未声明 {title}。", - "no_application_meta_data": "未声明 application 级 meta-data。", + "line_stats": "Stats: Permissions {permissions} · Native Libraries {nativeLibraries} · Components {components} · Meta-Data {metaData}", + "line_file_name": "File Name: {value}", + "line_file_size": "File Size: {value}", + "line_message_source": "Message Source: {value}", + "line_analyzed_at": "Analyzed At: {value}", + "report_compacted_notice": "The report exceeded Telegraph's single-page content limit, so a compact version was generated automatically. Stats still use the full APK, while lists only show the first items.", + "no_build_features": "No build features detected.", + "no_native_libraries": "No native libraries found.", + "no_permissions": "No permissions declared.", + "no_component": "No {title} declared.", + "no_application_meta_data": "No application-level meta-data declared.", "alias_target": "alias -> {target}", "resource_resolved": "resolved from string resource", "resource_reference": "resource reference", - "feature_detected": "已检测到", + "feature_detected": "Detected", "feature_kotlin": "Kotlin", "feature_compose": "Compose", "feature_gradle": "Gradle", "feature_agp": "Android Gradle Plugin", "feature_app_metadata_version": "App Metadata Version", - "unknown": "未知" + "unknown": "Unknown" }, "errors": { - "unknown": "未知错误", - "telegram_missing_file_path": "Telegram 没有返回可下载的 file_path", - "telegram_file_download_failed": "Telegram 文件下载失败 ({status})", - "telegram_api_request_failed": "Telegram API {method} 请求失败 ({status})", - "telegram_api_result_failed": "Telegram API {method} 返回失败", - "telegraph_invalid_path": "Telegraph 页面路径无效", - "telegraph_fetch_failed": "Telegraph 页面获取失败 ({status})", - "telegraph_fetch_failed_generic": "Telegraph 页面获取失败", - "telegraph_api_failed": "Telegraph API {method} 请求失败 ({status})", - "telegraph_api_result_failed": "Telegraph API {method} 返回失败" + "unknown": "Unknown error", + "telegram_missing_file_path": "Telegram did not return a downloadable file_path", + "telegram_file_download_failed": "Telegram file download failed ({status})", + "telegram_api_request_failed": "Telegram API {method} request failed ({status})", + "telegram_api_result_failed": "Telegram API {method} returned an error", + "telegraph_invalid_path": "Invalid Telegraph page path", + "telegraph_fetch_failed": "Failed to fetch Telegraph page ({status})", + "telegraph_fetch_failed_generic": "Failed to fetch Telegraph page", + "telegraph_api_failed": "Telegraph API {method} request failed ({status})", + "telegraph_api_result_failed": "Telegraph API {method} returned an error" }, "webui": { "title": "LibChecker WebUI", - "subtitle": "在线分析 APK/APKS/APKM/XAPK", - "modeLabel": "模式", - "modeAnalyze": "分析", - "modeCompare": "对比", - "themeLabel": "主题", - "themeDark": "深色", - "themeLight": "浅色", - "themeSystem": "系统", - "languageLabel": "语言", - "exportJson": "导出 JSON", - "clear": "清空", - "filePrompt": "选择或拖入", - "fileIdle": "未选择文件", - "localNote": "文件只在当前浏览器中解析", - "analyze": "开始分析", - "analyzing": "分析中", - "progressReady": "等待文件", - "progressReading": "读取文件", - "progressParsing": "解析 Manifest、资源与 DEX 标记", - "progressDone": "分析完成", - "historyTitle": "历史记录", - "historyNote": "保存在当前浏览器中,点击记录可重新打开结果", - "historyEmpty": "还没有历史记录", - "historyOpen": "打开历史记录", - "historyOpening": "正在打开报告...", - "historyDelete": "删除", - "historyExpand": "展开历史", - "historyCollapse": "收起历史", - "clearHistory": "清空历史", + "subtitle": "APK/APKS/APKM/XAPK Analyzer in Browser", + "modeLabel": "Mode", + "modeAnalyze": "Analyze", + "modeCompare": "Compare", + "themeLabel": "Theme", + "themeDark": "Dark", + "themeLight": "Light", + "themeSystem": "System", + "languageLabel": "Language", + "exportJson": "Export JSON", + "clear": "Clear", + "filePrompt": "Choose or drop", + "fileIdle": "No file selected", + "localNote": "The file is analyzed in this browser.", + "analyze": "Analyze", + "analyzing": "Analyzing", + "progressReady": "Waiting for file", + "progressReading": "Reading file", + "progressParsing": "Parsing manifest, resources, and DEX markers", + "progressDone": "Analysis complete", + "historyTitle": "History", + "historyNote": "Saved in this browser. Click an item to reopen the report.", + "historyEmpty": "No history yet.", + "historyOpen": "Open history item", + "historyOpening": "Opening report...", + "historyDelete": "Delete", + "historyExpand": "Expand History", + "historyCollapse": "Collapse History", + "clearHistory": "Clear History", "historyItemMeta": "{version} · Target SDK {targetSdk}", "historyFileMeta": "{file} · {size} · {date}", - "emptyTitle": "等待文件", - "emptyBody": "分析完成后会在这里展示摘要、SDK 标记、组件、权限、签名和元数据", - "tabSummary": "摘要", + "emptyTitle": "Waiting for file", + "emptyBody": "The report will show summary, SDK markers, components, permissions, signatures, and meta-data.", + "tabSummary": "Summary", "tabSdk": "SDK", - "tabNative": "原生库", - "tabComponents": "组件", - "tabPermissions": "权限", - "tabSignatures": "签名", - "tabMeta": "元数据", + "tabNative": "Native", + "tabComponents": "Components", + "tabPermissions": "Permissions", + "tabSignatures": "Signatures", + "tabMeta": "Meta-Data", "tabRaw": "JSON", - "noFile": "请选择 APK、APKS、APKM、XAPK 或 LCAPPS 文件", - "invalidFile": "请上传 .apk、.apks、.apkm、.xapk 或 .lcapps 文件", - "lcappsTitle": "选择应用", - "lcappsSubtitle": "{name} · {count} 个应用", - "lcappsSearch": "搜索应用或包名", - "lcappsLoading": "正在读取应用列表", - "lcappsClose": "关闭", - "lcappsReopen": "重新打开应用列表", - "lcappsReopenWithApp": "重新打开 {app} 的应用列表", - "lcappsNoMatches": "没有匹配的应用", - "lcappsReadFailed": "读取 .lcapps 文件失败", - "lcappsInvalidZip": ".lcapps 文件不是有效的 ZIP 压缩包", - "lcappsUnsupportedZip64": "当前浏览器暂不支持 ZIP64 格式的 .lcapps 文件", - "lcappsMissingJson": ".lcapps 文件中没有找到应用 JSON", - "lcappsInvalidJson": ".lcapps 文件中的应用 JSON 无法解析", - "lcappsUnsupportedCompression": ".lcapps 文件包含当前浏览器不支持的压缩方式", - "lcappsEmpty": ".lcapps 文件中没有可展示的应用", - "unsupportedDecompression": "当前浏览器不支持 DecompressionStream,无法在本地解压文件", - "unknownError": "未知错误", - "workerFailed": "分析进程启动失败", - "appName": "应用名", - "packageName": "包名", + "noFile": "Choose an APK, APKS, APKM, XAPK, or LCAPPS file.", + "invalidFile": "Please upload an .apk, .apks, .apkm, .xapk, or .lcapps file.", + "lcappsTitle": "Choose App", + "lcappsSubtitle": "{name} · {count} apps", + "lcappsSearch": "Search apps or package names", + "lcappsLoading": "Reading app list", + "lcappsClose": "Close", + "lcappsReopen": "Reopen app list", + "lcappsReopenWithApp": "Reopen {app} app list", + "lcappsNoMatches": "No matching apps", + "lcappsReadFailed": "Failed to read the .lcapps file.", + "lcappsInvalidZip": "The .lcapps file is not a valid ZIP archive.", + "lcappsUnsupportedZip64": "This browser does not support ZIP64 .lcapps files yet.", + "lcappsMissingJson": "No app JSON was found in the .lcapps file.", + "lcappsInvalidJson": "The app JSON in the .lcapps file could not be parsed.", + "lcappsUnsupportedCompression": "The .lcapps file uses a compression method this browser cannot read.", + "lcappsEmpty": "The .lcapps file does not contain any displayable apps.", + "unsupportedDecompression": "This browser does not support DecompressionStream, so the file cannot be decompressed locally.", + "unknownError": "Unknown error.", + "workerFailed": "Failed to start the analyzer worker.", + "appName": "App Name", + "packageName": "Package Name", "versionName": "versionName", "versionCode": "versionCode", "targetSdk": "Target SDK", "minSdk": "Min SDK", "compileSdk": "Compile SDK", - "fileName": "文件名", - "fileSize": "文件大小", - "analyzedAt": "分析时间", - "duration": "耗时", - "terminalSystem": "终端系统", - "permissions": "权限", - "nativeLibraries": "原生库", - "components": "组件", - "signatures": "签名", - "metaData": "元数据", - "buildFeatures": "构建特性", - "noBuildFeatures": "未识别到构建特性", - "noNativeLibraries": "未发现原生库", - "noSdkMarkers": "未匹配到 SDK 标记", - "noComponents": "未声明组件", - "noPermissions": "未声明权限", - "noSignatures": "未发现签名证书", - "noMetaData": "未声明 application 级元数据", - "summary": "摘要", - "sdkNative": "原生库 SDK 标记", - "sdkComponents": "组件 SDK 标记", + "fileName": "File Name", + "fileSize": "File Size", + "analyzedAt": "Analyzed At", + "duration": "Duration", + "terminalSystem": "Terminal System", + "permissions": "Permissions", + "nativeLibraries": "Native Libraries", + "components": "Components", + "signatures": "Signatures", + "metaData": "Meta-Data", + "buildFeatures": "Build Features", + "noBuildFeatures": "No build features detected.", + "noNativeLibraries": "No native libraries found.", + "noSdkMarkers": "No SDK markers matched.", + "noComponents": "No components declared.", + "noPermissions": "No permissions declared.", + "noSignatures": "No signature certificates found.", + "noMetaData": "No application-level meta-data declared.", + "summary": "Summary", + "sdkNative": "Native Library SDK Markers", + "sdkComponents": "Component SDK Markers", "activities": "Activity", "services": "Service", "receivers": "Receiver", @@ -219,83 +219,83 @@ "notExported": "not exported", "enabled": "enabled", "disabled": "disabled", - "unknown": "未知", - "permission": "权限", - "process": "进程", + "unknown": "Unknown", + "permission": "Permission", + "process": "Process", "authorities": "authorities", "actions": "actions", "targetActivity": "targetActivity", "sdk": "SDK", "abi": "ABI", - "path": "路径", - "size": "大小", - "value": "值", - "resource": "资源", - "detectedRule": "标记规则", - "ruleDevTeam": "开发团队", - "ruleContributors": "贡献者", - "ruleSource": "来源", + "path": "Path", + "size": "Size", + "value": "Value", + "resource": "Resource", + "detectedRule": "Matched Rule", + "ruleDevTeam": "Developer", + "ruleContributors": "Contributors", + "ruleSource": "Source", "ruleUuid": "UUID", - "signatureSchemes": "签名方案", - "signatureCertificate": "签名证书 {index}", - "signatureVersion": "版本", - "signatureSerialNumber": "序列号", - "signatureIssuer": "发行人", - "signatureSubject": "主题", - "signatureValidFrom": "有效期始", - "signatureValidTo": "有效期至", - "signaturePublicKeyFormat": "公钥格式", - "signaturePublicKeyAlgorithm": "公钥算法", - "signaturePublicKeyExponent": "公钥指数", - "signaturePublicKeyModulusSize": "模数大小", - "signaturePublicKeyModulus": "模数", - "signaturePublicKeyY": "公钥值Y", - "signaturePublicKeyType": "公钥类型", - "signatureAlgorithmName": "签名算法", - "signatureAlgorithmOid": "签名算法 OID", + "signatureSchemes": "Signing Schemes", + "signatureCertificate": "Signature Certificate {index}", + "signatureVersion": "Version", + "signatureSerialNumber": "Serial Number", + "signatureIssuer": "Issuer", + "signatureSubject": "Subject", + "signatureValidFrom": "Valid From", + "signatureValidTo": "Valid To", + "signaturePublicKeyFormat": "Public Key Format", + "signaturePublicKeyAlgorithm": "Public Key Algorithm", + "signaturePublicKeyExponent": "Public Key Exponent", + "signaturePublicKeyModulusSize": "Modulus Size", + "signaturePublicKeyModulus": "Modulus", + "signaturePublicKeyY": "Public Key Y", + "signaturePublicKeyType": "Public Key Type", + "signatureAlgorithmName": "Signature Algorithm", + "signatureAlgorithmOid": "Signature Algorithm OID", "signatureMd5": "MD5", "signatureSha1": "SHA1", "signatureSha256": "SHA256", "signatureCharString": "CharString", - "signatureSourceEntry": "来源条目", - "signatureDerLength": "证书大小", - "rawNotice": "JSON 视图默认省略较大的 data URI", + "signatureSourceEntry": "Source Entry", + "signatureDerLength": "Certificate Size", + "rawNotice": "The JSON view omits large data URIs by default.", "selectedFile": "{name} · {size}", "completedIn": "{seconds}s", - "localFile": "本地文件", - "archiveDistributionTitle": "子 APK 分布", - "archiveDistributionSummary": "{count} 个子 APK · {size}", - "archiveDistributionPercent": "占比", - "archiveAnalyzedEntry": "主包", - "compareSlotLeft": "左侧文件", - "compareSlotRight": "右侧文件", - "compareSlotNote": "拖入文件,或从历史记录选择", - "compareDropPrompt": "点击上传或拖入文件", - "compareSlotEmpty": "未选择文件", - "compareSlotEmptyHint": "上传一个文件,或选择一条历史记录", + "localFile": "Local file", + "archiveDistributionTitle": "Split APK Distribution", + "archiveDistributionSummary": "{count} split APKs · {size}", + "archiveDistributionPercent": "Share", + "archiveAnalyzedEntry": "main", + "compareSlotLeft": "Left File", + "compareSlotRight": "Right File", + "compareSlotNote": "Drop a file, or choose from history.", + "compareDropPrompt": "Click to upload or drop file", + "compareSlotEmpty": "No file selected", + "compareSlotEmptyHint": "Upload a file, or choose one history item.", "compareSlotReady": "{name} · {size}", - "compareHistoryLabel": "历史记录", - "compareHistoryPlaceholder": "选择历史记录", - "compareClearLeft": "清空左侧", - "compareClearRight": "清空右侧", - "compareSourceHistory": "历史记录", - "compareSourceUpload": "本地上传", - "comparePackageMismatch": "包名不同的对比", - "compareAwaitingPair": "再选择一个文件后开始对比", - "compareChangeCount": "差异项", - "compareBasicInfo": "基础信息", - "compareDifferences": "差异明细", - "compareNoDifferences": "未发现差异", - "compareField": "字段", - "compareLeft": "左侧", - "compareRight": "右侧", - "compareOnlyLeft": "仅左侧", - "compareOnlyRight": "仅右侧", - "compareAdded": "新增", - "compareDeleted": "删除", - "compareChanged": "改变", - "compareMoved": "移动", - "compareNoItems": "无", - "compareMoreItems": "还有 {count} 项未展示" + "compareHistoryLabel": "History", + "compareHistoryPlaceholder": "Choose from history", + "compareClearLeft": "Clear left", + "compareClearRight": "Clear right", + "compareSourceHistory": "History", + "compareSourceUpload": "Local upload", + "comparePackageMismatch": "Comparing different package names", + "compareAwaitingPair": "Choose one more file to start comparing.", + "compareChangeCount": "Changed Items", + "compareBasicInfo": "Basic Info", + "compareDifferences": "Differences", + "compareNoDifferences": "No differences found.", + "compareField": "Field", + "compareLeft": "Left", + "compareRight": "Right", + "compareOnlyLeft": "Left Only", + "compareOnlyRight": "Right Only", + "compareAdded": "Added", + "compareDeleted": "Deleted", + "compareChanged": "Changed", + "compareMoved": "Moved", + "compareNoItems": "None", + "compareMoreItems": "{count} more items hidden" } } From 5ec5144b21091db32e438a49a0bd553bcc8e8bf0 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Thu, 11 Jun 2026 11:31:04 +0800 Subject: [PATCH 07/70] New translations en.json (Chinese Simplified) [ci skip] --- locales/zh-CN.json | 478 ++++++++++++++++++++++----------------------- 1 file changed, 239 insertions(+), 239 deletions(-) diff --git a/locales/zh-CN.json b/locales/zh-CN.json index e0df894..2858a5c 100644 --- a/locales/zh-CN.json +++ b/locales/zh-CN.json @@ -1,216 +1,216 @@ { "locale": { - "nativeName": "中文简体", - "englishName": "Chinese (Simplified)" + "nativeName": "English", + "englishName": "English" }, "commands": { - "start_description": "显示使用说明", - "apkinfo_description": "解析当前或回复的 APK/APKS/APKM/XAPK 文件", - "upload_description": "上传大型 Android 包解析" + "start_description": "Show usage instructions", + "apkinfo_description": "Analyze the current or replied APK/APKS/APKM/XAPK file", + "upload_description": "Upload a large Android package for analysis" }, "bot": { - "start": "你好,我可以帮你解析 APK、APKS、APKM 和 XAPK。\n\n私聊使用\n直接发送或转发 APK、APKS、APKM 或 XAPK 文件,我会自动解析。\n也可以发送 APK 下载链接,我会尝试用 HTTP Range 只下载少量元数据来解析。\n\n群组和频道\n直接发送 Android 包文件,或把 /apkinfo 写在文件消息里、APK 链接旁边。\n也可以回复含 Android 包文件的消息,再发送 /apkinfo。\n\n大文件\n超过 20MB 的文件,可以使用 /upload 打开网页上传入口。", - "apk_not_found": "我没有找到可解析的 APK、APKS、APKM、XAPK 文件或 APK 链接。你可以直接发送或转发 Android 包文件、发送 APK 下载链接,或者把 /apkinfo 写在同一条文件消息或链接消息里;如果是回复解析,也请确认你回复的那条消息本身就是 Android 包文件或 APK 链接。需要注意的是,群组里的转发文件有时不会把文件对象完整发给 bot,这种情况下我无法从 Telegram 重新取回它,建议直接在群里发送文件、发送 APK 下载链接,或私聊 bot 再转发文件。若群组开启了 Privacy Mode,请优先使用 /apkinfo@bot_username。", - "apk_too_large": "这个文件超过 Telegram 官方 Bot API 当前可下载的 20MB 限制。请使用下方按钮打开网页上传入口,直接上传到 Worker 解析。", - "upload_entry": "打开网页上传入口后选择 APK、APKS、APKM 或 XAPK 文件即可解析。这个入口绕过 Telegram Bot API 的 20MB 文件下载限制,但仍会受到 Cloudflare Worker 请求体和内存限制影响。", - "parse_failed": "解析 Android 包失败:{message}", - "open_full_report": "打开完整报告", - "open_upload_page": "上传大文件", - "source_channel": "频道消息", - "source_forwarded": "转发消息", - "source_private": "私聊消息", - "source_group": "群组消息", - "source_web_upload": "网页上传", - "source_link_preview": "链接预览", - "source_default": "Telegram 消息" + "start": "Hi! Send or forward an APK, APKS, APKM, or XAPK file and I'll analyze it automatically. You can also send an APK download link, and I'll try to parse it with HTTP Range by downloading only a small amount of metadata. In groups and channels, you can send an Android package directly, put /apkinfo in the file message or next to the APK link, or reply to a message containing an Android package with /apkinfo. For files larger than 20 MB, use /upload to open the web upload entry.", + "apk_not_found": "I couldn't find a parsable APK, APKS, APKM, XAPK file, or APK link. You can send or forward an Android package file directly, send an APK download link, or put /apkinfo in the same file/link message. If you're replying to analyze, make sure the replied message itself is an Android package file or APK link. In groups, forwarded files may not always include a complete file object for the bot, so I may be unable to retrieve them again from Telegram. In that case, please send the file directly in the group, send an APK download link, or forward it to me in a private chat. If Privacy Mode is enabled in the group, prefer using /apkinfo@bot_username.", + "apk_too_large": "This file exceeds Telegram Bot API's current 20 MB download limit. Use the button below to open the web upload entry and upload it directly to the Worker for analysis.", + "upload_entry": "Open the web upload entry, choose an APK, APKS, APKM, or XAPK file, and it will be parsed directly by the Worker. This bypasses Telegram Bot API's 20 MB file download limit, but Cloudflare Worker request body and memory limits still apply.", + "parse_failed": "Failed to parse Android package: {message}", + "open_full_report": "Open Full Report", + "open_upload_page": "Upload Large File", + "source_channel": "Channel Message", + "source_forwarded": "Forwarded Message", + "source_private": "Private Chat Message", + "source_group": "Group Message", + "source_web_upload": "Web Upload", + "source_link_preview": "Link Preview", + "source_default": "Telegram Message" }, "upload": { - "page_title": "上传 Android 包解析", - "heading": "上传 Android 包解析", - "intro": "直接把 APK、APKS、APKM 或 XAPK 上传到 Worker 解析,适合超过 Telegram Bot API 20MB 下载限制的文件。", - "file_label": "Android 包文件", - "language_label": "报告语言", - "submit": "开始解析", - "busy": "正在上传并解析...", - "progress_label": "上传进度", - "progress_preparing": "准备上传...", - "progress_complete": "上传完成,正在生成报告...", - "network_error": "上传失败,请检查网络后重试。", - "max_hint": "当前入口建议上传不超过 {maxSize} 的文件。", - "choose_file": "请选择 .apk、.apks、.apkm 或 .xapk 文件。", - "invalid_file": "请上传 .apk、.apks、.apkm 或 .xapk 文件。", - "too_large": "文件超过当前 Worker 上传解析上限:{maxSize}。", - "parse_failed": "解析 Android 包失败:{message}" + "page_title": "Upload Android Package for Analysis", + "heading": "Upload Android Package for Analysis", + "intro": "Upload an APK, APKS, APKM, or XAPK directly to the Worker. This is intended for files larger than Telegram Bot API's 20 MB download limit.", + "file_label": "Android Package File", + "language_label": "Report Language", + "submit": "Analyze", + "busy": "Uploading and analyzing...", + "progress_label": "Upload Progress", + "progress_preparing": "Preparing upload...", + "progress_complete": "Upload complete. Generating report...", + "network_error": "Upload failed. Please check your connection and try again.", + "max_hint": "This entry currently recommends files up to {maxSize}.", + "choose_file": "Choose an .apk, .apks, .apkm, or .xapk file.", + "invalid_file": "Please upload an .apk, .apks, .apkm, or .xapk file.", + "too_large": "The file exceeds the current Worker upload analysis limit: {maxSize}.", + "parse_failed": "Failed to parse Android package: {message}" }, "summary": { - "completed": "APK 解析完成", - "app_name": "应用名: {appName}", - "package_name": "包名: {packageName}", - "version_name": "versionName: {versionName}", - "version_code": "versionCode: {versionCode}", + "completed": "APK Analysis Complete", + "app_name": "App Name: {appName}", + "package_name": "Package Name: {packageName}", + "version_name": "Version Name: {versionName}", + "version_code": "Version Code: {versionCode}", "sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", - "permissions_count": "权限数量: {count}", - "native_library_count": "原生库数量: {count}", - "component_count": "组件数量: {count}", - "meta_data_count": "meta-data 数量: {count}", - "sdk_markers": "SDK 标记: {value}", - "features": "特性: {value}", - "open_report_hint": "完整报告请使用下方按钮打开。", - "sdk_summary_native": "原生库 {count}", - "sdk_summary_components": "组件 {count}" + "permissions_count": "Permissions: {count}", + "native_library_count": "Native Libraries: {count}", + "component_count": "Components: {count}", + "meta_data_count": "Meta-Data: {count}", + "sdk_markers": "SDK Markers: {value}", + "features": "Features: {value}", + "open_report_hint": "Use the button below to open the full report.", + "sdk_summary_native": "Native Libraries {count}", + "sdk_summary_components": "Components {count}" }, "report": { - "fallback_title": "APK 报告", - "error_title": "报告加载失败", - "missing_path": "缺少 report path 参数。", - "views": "浏览 {count}", - "meta_fallback": "APK 解析报告" + "fallback_title": "APK Report", + "error_title": "Failed to Load Report", + "missing_path": "Missing report path parameter.", + "views": "Views {count}", + "meta_fallback": "APK Analysis Report" }, "telegraph": { - "page_title": "{appName} APK 信息", - "apk_summary": "APK 摘要", - "file_info": "文件信息", - "native_libraries": "原生库", - "build_features": "构建特性", - "permissions": "权限", - "components": "组件", + "page_title": "{appName} APK Info", + "apk_summary": "APK Summary", + "file_info": "File Info", + "native_libraries": "Native Libraries", + "build_features": "Build Features", + "permissions": "Permissions", + "components": "Components", "application_meta_data": "Application Meta-Data", - "native_sdk_markers": "原生库 SDK 标记", - "marked_sdks": "已标记的 SDK", - "app_icon": "应用图标", - "line_app": "应用: {value}", - "line_package_name": "包名: {value}", - "line_icon": "图标: {value}", - "icon_detected": "已解析", - "icon_detected_with_path": "已解析 ({path})", - "icon_missing": "未解析到", - "line_version": "版本: {versionName} ({versionCode})", + "native_sdk_markers": "Native Library SDK Markers", + "marked_sdks": "Marked SDKs", + "app_icon": "App Icon", + "line_app": "App: {value}", + "line_package_name": "Package Name: {value}", + "line_icon": "Icon: {value}", + "icon_detected": "Detected", + "icon_detected_with_path": "Detected ({path})", + "icon_missing": "Not detected", + "line_version": "Version: {versionName} ({versionCode})", "line_sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", - "line_stats": "统计: 权限 {permissions} · 原生库 {nativeLibraries} · 组件 {components} · meta-data {metaData}", - "line_file_name": "文件名: {value}", - "line_file_size": "文件大小: {value}", - "line_message_source": "消息来源: {value}", - "line_analyzed_at": "分析时间: {value}", - "report_compacted_notice": "报告内容超过 Telegraph 单页限制,已自动切换为精简版:统计仍基于完整 APK,列表仅展示前若干项。", - "no_build_features": "未识别到构建特性。", - "no_native_libraries": "未发现原生库。", - "no_permissions": "未声明权限。", - "no_component": "未声明 {title}。", - "no_application_meta_data": "未声明 application 级 meta-data。", + "line_stats": "Stats: Permissions {permissions} · Native Libraries {nativeLibraries} · Components {components} · Meta-Data {metaData}", + "line_file_name": "File Name: {value}", + "line_file_size": "File Size: {value}", + "line_message_source": "Message Source: {value}", + "line_analyzed_at": "Analyzed At: {value}", + "report_compacted_notice": "The report exceeded Telegraph's single-page content limit, so a compact version was generated automatically. Stats still use the full APK, while lists only show the first items.", + "no_build_features": "No build features detected.", + "no_native_libraries": "No native libraries found.", + "no_permissions": "No permissions declared.", + "no_component": "No {title} declared.", + "no_application_meta_data": "No application-level meta-data declared.", "alias_target": "alias -> {target}", "resource_resolved": "resolved from string resource", "resource_reference": "resource reference", - "feature_detected": "已检测到", + "feature_detected": "Detected", "feature_kotlin": "Kotlin", "feature_compose": "Compose", "feature_gradle": "Gradle", "feature_agp": "Android Gradle Plugin", "feature_app_metadata_version": "App Metadata Version", - "unknown": "未知" + "unknown": "Unknown" }, "errors": { - "unknown": "未知错误", - "telegram_missing_file_path": "Telegram 没有返回可下载的 file_path", - "telegram_file_download_failed": "Telegram 文件下载失败 ({status})", - "telegram_api_request_failed": "Telegram API {method} 请求失败 ({status})", - "telegram_api_result_failed": "Telegram API {method} 返回失败", - "telegraph_invalid_path": "Telegraph 页面路径无效", - "telegraph_fetch_failed": "Telegraph 页面获取失败 ({status})", - "telegraph_fetch_failed_generic": "Telegraph 页面获取失败", - "telegraph_api_failed": "Telegraph API {method} 请求失败 ({status})", - "telegraph_api_result_failed": "Telegraph API {method} 返回失败" + "unknown": "Unknown error", + "telegram_missing_file_path": "Telegram did not return a downloadable file_path", + "telegram_file_download_failed": "Telegram file download failed ({status})", + "telegram_api_request_failed": "Telegram API {method} request failed ({status})", + "telegram_api_result_failed": "Telegram API {method} returned an error", + "telegraph_invalid_path": "Invalid Telegraph page path", + "telegraph_fetch_failed": "Failed to fetch Telegraph page ({status})", + "telegraph_fetch_failed_generic": "Failed to fetch Telegraph page", + "telegraph_api_failed": "Telegraph API {method} request failed ({status})", + "telegraph_api_result_failed": "Telegraph API {method} returned an error" }, "webui": { "title": "LibChecker WebUI", - "subtitle": "在线分析 APK/APKS/APKM/XAPK", - "modeLabel": "模式", - "modeAnalyze": "分析", - "modeCompare": "对比", - "themeLabel": "主题", - "themeDark": "深色", - "themeLight": "浅色", - "themeSystem": "系统", - "languageLabel": "语言", - "exportJson": "导出 JSON", - "clear": "清空", - "filePrompt": "选择或拖入", - "fileIdle": "未选择文件", - "localNote": "文件只在当前浏览器中解析", - "analyze": "开始分析", - "analyzing": "分析中", - "progressReady": "等待文件", - "progressReading": "读取文件", - "progressParsing": "解析 Manifest、资源与 DEX 标记", - "progressDone": "分析完成", - "historyTitle": "历史记录", - "historyNote": "保存在当前浏览器中,点击记录可重新打开结果", - "historyEmpty": "还没有历史记录", - "historyOpen": "打开历史记录", - "historyOpening": "正在打开报告...", - "historyDelete": "删除", - "historyExpand": "展开历史", - "historyCollapse": "收起历史", - "clearHistory": "清空历史", + "subtitle": "APK/APKS/APKM/XAPK Analyzer in Browser", + "modeLabel": "Mode", + "modeAnalyze": "Analyze", + "modeCompare": "Compare", + "themeLabel": "Theme", + "themeDark": "Dark", + "themeLight": "Light", + "themeSystem": "System", + "languageLabel": "Language", + "exportJson": "Export JSON", + "clear": "Clear", + "filePrompt": "Choose or drop", + "fileIdle": "No file selected", + "localNote": "The file is analyzed in this browser.", + "analyze": "Analyze", + "analyzing": "Analyzing", + "progressReady": "Waiting for file", + "progressReading": "Reading file", + "progressParsing": "Parsing manifest, resources, and DEX markers", + "progressDone": "Analysis complete", + "historyTitle": "History", + "historyNote": "Saved in this browser. Click an item to reopen the report.", + "historyEmpty": "No history yet.", + "historyOpen": "Open history item", + "historyOpening": "Opening report...", + "historyDelete": "Delete", + "historyExpand": "Expand History", + "historyCollapse": "Collapse History", + "clearHistory": "Clear History", "historyItemMeta": "{version} · Target SDK {targetSdk}", "historyFileMeta": "{file} · {size} · {date}", - "emptyTitle": "等待文件", - "emptyBody": "分析完成后会在这里展示摘要、SDK 标记、组件、权限、签名和元数据", - "tabSummary": "摘要", + "emptyTitle": "Waiting for file", + "emptyBody": "The report will show summary, SDK markers, components, permissions, signatures, and meta-data.", + "tabSummary": "Summary", "tabSdk": "SDK", - "tabNative": "原生库", - "tabComponents": "组件", - "tabPermissions": "权限", - "tabSignatures": "签名", - "tabMeta": "元数据", + "tabNative": "Native", + "tabComponents": "Components", + "tabPermissions": "Permissions", + "tabSignatures": "Signatures", + "tabMeta": "Meta-Data", "tabRaw": "JSON", - "noFile": "请选择 APK、APKS、APKM、XAPK 或 LCAPPS 文件", - "invalidFile": "请上传 .apk、.apks、.apkm、.xapk 或 .lcapps 文件", - "lcappsTitle": "选择应用", - "lcappsSubtitle": "{name} · {count} 个应用", - "lcappsSearch": "搜索应用或包名", - "lcappsLoading": "正在读取应用列表", - "lcappsClose": "关闭", - "lcappsReopen": "重新打开应用列表", - "lcappsReopenWithApp": "重新打开 {app} 的应用列表", - "lcappsNoMatches": "没有匹配的应用", - "lcappsReadFailed": "读取 .lcapps 文件失败", - "lcappsInvalidZip": ".lcapps 文件不是有效的 ZIP 压缩包", - "lcappsUnsupportedZip64": "当前浏览器暂不支持 ZIP64 格式的 .lcapps 文件", - "lcappsMissingJson": ".lcapps 文件中没有找到应用 JSON", - "lcappsInvalidJson": ".lcapps 文件中的应用 JSON 无法解析", - "lcappsUnsupportedCompression": ".lcapps 文件包含当前浏览器不支持的压缩方式", - "lcappsEmpty": ".lcapps 文件中没有可展示的应用", - "unsupportedDecompression": "当前浏览器不支持 DecompressionStream,无法在本地解压文件", - "unknownError": "未知错误", - "workerFailed": "分析进程启动失败", - "appName": "应用名", - "packageName": "包名", + "noFile": "Choose an APK, APKS, APKM, XAPK, or LCAPPS file.", + "invalidFile": "Please upload an .apk, .apks, .apkm, .xapk, or .lcapps file.", + "lcappsTitle": "Choose App", + "lcappsSubtitle": "{name} · {count} apps", + "lcappsSearch": "Search apps or package names", + "lcappsLoading": "Reading app list", + "lcappsClose": "Close", + "lcappsReopen": "Reopen app list", + "lcappsReopenWithApp": "Reopen {app} app list", + "lcappsNoMatches": "No matching apps", + "lcappsReadFailed": "Failed to read the .lcapps file.", + "lcappsInvalidZip": "The .lcapps file is not a valid ZIP archive.", + "lcappsUnsupportedZip64": "This browser does not support ZIP64 .lcapps files yet.", + "lcappsMissingJson": "No app JSON was found in the .lcapps file.", + "lcappsInvalidJson": "The app JSON in the .lcapps file could not be parsed.", + "lcappsUnsupportedCompression": "The .lcapps file uses a compression method this browser cannot read.", + "lcappsEmpty": "The .lcapps file does not contain any displayable apps.", + "unsupportedDecompression": "This browser does not support DecompressionStream, so the file cannot be decompressed locally.", + "unknownError": "Unknown error.", + "workerFailed": "Failed to start the analyzer worker.", + "appName": "App Name", + "packageName": "Package Name", "versionName": "versionName", "versionCode": "versionCode", "targetSdk": "Target SDK", "minSdk": "Min SDK", "compileSdk": "Compile SDK", - "fileName": "文件名", - "fileSize": "文件大小", - "analyzedAt": "分析时间", - "duration": "耗时", - "terminalSystem": "终端系统", - "permissions": "权限", - "nativeLibraries": "原生库", - "components": "组件", - "signatures": "签名", - "metaData": "元数据", - "buildFeatures": "构建特性", - "noBuildFeatures": "未识别到构建特性", - "noNativeLibraries": "未发现原生库", - "noSdkMarkers": "未匹配到 SDK 标记", - "noComponents": "未声明组件", - "noPermissions": "未声明权限", - "noSignatures": "未发现签名证书", - "noMetaData": "未声明 application 级元数据", - "summary": "摘要", - "sdkNative": "原生库 SDK 标记", - "sdkComponents": "组件 SDK 标记", + "fileName": "File Name", + "fileSize": "File Size", + "analyzedAt": "Analyzed At", + "duration": "Duration", + "terminalSystem": "Terminal System", + "permissions": "Permissions", + "nativeLibraries": "Native Libraries", + "components": "Components", + "signatures": "Signatures", + "metaData": "Meta-Data", + "buildFeatures": "Build Features", + "noBuildFeatures": "No build features detected.", + "noNativeLibraries": "No native libraries found.", + "noSdkMarkers": "No SDK markers matched.", + "noComponents": "No components declared.", + "noPermissions": "No permissions declared.", + "noSignatures": "No signature certificates found.", + "noMetaData": "No application-level meta-data declared.", + "summary": "Summary", + "sdkNative": "Native Library SDK Markers", + "sdkComponents": "Component SDK Markers", "activities": "Activity", "services": "Service", "receivers": "Receiver", @@ -219,83 +219,83 @@ "notExported": "not exported", "enabled": "enabled", "disabled": "disabled", - "unknown": "未知", - "permission": "权限", - "process": "进程", + "unknown": "Unknown", + "permission": "Permission", + "process": "Process", "authorities": "authorities", "actions": "actions", "targetActivity": "targetActivity", "sdk": "SDK", "abi": "ABI", - "path": "路径", - "size": "大小", - "value": "值", - "resource": "资源", - "detectedRule": "标记规则", - "ruleDevTeam": "开发团队", - "ruleContributors": "贡献者", - "ruleSource": "来源", + "path": "Path", + "size": "Size", + "value": "Value", + "resource": "Resource", + "detectedRule": "Matched Rule", + "ruleDevTeam": "Developer", + "ruleContributors": "Contributors", + "ruleSource": "Source", "ruleUuid": "UUID", - "signatureSchemes": "签名方案", - "signatureCertificate": "签名证书 {index}", - "signatureVersion": "版本", - "signatureSerialNumber": "序列号", - "signatureIssuer": "发行人", - "signatureSubject": "主题", - "signatureValidFrom": "有效期始", - "signatureValidTo": "有效期至", - "signaturePublicKeyFormat": "公钥格式", - "signaturePublicKeyAlgorithm": "公钥算法", - "signaturePublicKeyExponent": "公钥指数", - "signaturePublicKeyModulusSize": "模数大小", - "signaturePublicKeyModulus": "模数", - "signaturePublicKeyY": "公钥值Y", - "signaturePublicKeyType": "公钥类型", - "signatureAlgorithmName": "签名算法", - "signatureAlgorithmOid": "签名算法 OID", + "signatureSchemes": "Signing Schemes", + "signatureCertificate": "Signature Certificate {index}", + "signatureVersion": "Version", + "signatureSerialNumber": "Serial Number", + "signatureIssuer": "Issuer", + "signatureSubject": "Subject", + "signatureValidFrom": "Valid From", + "signatureValidTo": "Valid To", + "signaturePublicKeyFormat": "Public Key Format", + "signaturePublicKeyAlgorithm": "Public Key Algorithm", + "signaturePublicKeyExponent": "Public Key Exponent", + "signaturePublicKeyModulusSize": "Modulus Size", + "signaturePublicKeyModulus": "Modulus", + "signaturePublicKeyY": "Public Key Y", + "signaturePublicKeyType": "Public Key Type", + "signatureAlgorithmName": "Signature Algorithm", + "signatureAlgorithmOid": "Signature Algorithm OID", "signatureMd5": "MD5", "signatureSha1": "SHA1", "signatureSha256": "SHA256", "signatureCharString": "CharString", - "signatureSourceEntry": "来源条目", - "signatureDerLength": "证书大小", - "rawNotice": "JSON 视图默认省略较大的 data URI", + "signatureSourceEntry": "Source Entry", + "signatureDerLength": "Certificate Size", + "rawNotice": "The JSON view omits large data URIs by default.", "selectedFile": "{name} · {size}", "completedIn": "{seconds}s", - "localFile": "本地文件", - "archiveDistributionTitle": "子 APK 分布", - "archiveDistributionSummary": "{count} 个子 APK · {size}", - "archiveDistributionPercent": "占比", - "archiveAnalyzedEntry": "主包", - "compareSlotLeft": "左侧文件", - "compareSlotRight": "右侧文件", - "compareSlotNote": "拖入文件,或从历史记录选择", - "compareDropPrompt": "点击上传或拖入文件", - "compareSlotEmpty": "未选择文件", - "compareSlotEmptyHint": "上传一个文件,或选择一条历史记录", + "localFile": "Local file", + "archiveDistributionTitle": "Split APK Distribution", + "archiveDistributionSummary": "{count} split APKs · {size}", + "archiveDistributionPercent": "Share", + "archiveAnalyzedEntry": "main", + "compareSlotLeft": "Left File", + "compareSlotRight": "Right File", + "compareSlotNote": "Drop a file, or choose from history.", + "compareDropPrompt": "Click to upload or drop file", + "compareSlotEmpty": "No file selected", + "compareSlotEmptyHint": "Upload a file, or choose one history item.", "compareSlotReady": "{name} · {size}", - "compareHistoryLabel": "历史记录", - "compareHistoryPlaceholder": "选择历史记录", - "compareClearLeft": "清空左侧", - "compareClearRight": "清空右侧", - "compareSourceHistory": "历史记录", - "compareSourceUpload": "本地上传", - "comparePackageMismatch": "包名不同的对比", - "compareAwaitingPair": "再选择一个文件后开始对比", - "compareChangeCount": "差异项", - "compareBasicInfo": "基础信息", - "compareDifferences": "差异明细", - "compareNoDifferences": "未发现差异", - "compareField": "字段", - "compareLeft": "左侧", - "compareRight": "右侧", - "compareOnlyLeft": "仅左侧", - "compareOnlyRight": "仅右侧", - "compareAdded": "新增", - "compareDeleted": "删除", - "compareChanged": "改变", - "compareMoved": "移动", - "compareNoItems": "无", - "compareMoreItems": "还有 {count} 项未展示" + "compareHistoryLabel": "History", + "compareHistoryPlaceholder": "Choose from history", + "compareClearLeft": "Clear left", + "compareClearRight": "Clear right", + "compareSourceHistory": "History", + "compareSourceUpload": "Local upload", + "comparePackageMismatch": "Comparing different package names", + "compareAwaitingPair": "Choose one more file to start comparing.", + "compareChangeCount": "Changed Items", + "compareBasicInfo": "Basic Info", + "compareDifferences": "Differences", + "compareNoDifferences": "No differences found.", + "compareField": "Field", + "compareLeft": "Left", + "compareRight": "Right", + "compareOnlyLeft": "Left Only", + "compareOnlyRight": "Right Only", + "compareAdded": "Added", + "compareDeleted": "Deleted", + "compareChanged": "Changed", + "compareMoved": "Moved", + "compareNoItems": "None", + "compareMoreItems": "{count} more items hidden" } } From cf758a98d43e65ed1ed50d1174940635e631eacf Mon Sep 17 00:00:00 2001 From: Absinthe Date: Thu, 11 Jun 2026 11:31:06 +0800 Subject: [PATCH 08/70] New translations en.json (Chinese Traditional) [ci skip] --- locales/zh-TW.json | 478 ++++++++++++++++++++++----------------------- 1 file changed, 239 insertions(+), 239 deletions(-) diff --git a/locales/zh-TW.json b/locales/zh-TW.json index e0df894..2858a5c 100644 --- a/locales/zh-TW.json +++ b/locales/zh-TW.json @@ -1,216 +1,216 @@ { "locale": { - "nativeName": "中文简体", - "englishName": "Chinese (Simplified)" + "nativeName": "English", + "englishName": "English" }, "commands": { - "start_description": "显示使用说明", - "apkinfo_description": "解析当前或回复的 APK/APKS/APKM/XAPK 文件", - "upload_description": "上传大型 Android 包解析" + "start_description": "Show usage instructions", + "apkinfo_description": "Analyze the current or replied APK/APKS/APKM/XAPK file", + "upload_description": "Upload a large Android package for analysis" }, "bot": { - "start": "你好,我可以帮你解析 APK、APKS、APKM 和 XAPK。\n\n私聊使用\n直接发送或转发 APK、APKS、APKM 或 XAPK 文件,我会自动解析。\n也可以发送 APK 下载链接,我会尝试用 HTTP Range 只下载少量元数据来解析。\n\n群组和频道\n直接发送 Android 包文件,或把 /apkinfo 写在文件消息里、APK 链接旁边。\n也可以回复含 Android 包文件的消息,再发送 /apkinfo。\n\n大文件\n超过 20MB 的文件,可以使用 /upload 打开网页上传入口。", - "apk_not_found": "我没有找到可解析的 APK、APKS、APKM、XAPK 文件或 APK 链接。你可以直接发送或转发 Android 包文件、发送 APK 下载链接,或者把 /apkinfo 写在同一条文件消息或链接消息里;如果是回复解析,也请确认你回复的那条消息本身就是 Android 包文件或 APK 链接。需要注意的是,群组里的转发文件有时不会把文件对象完整发给 bot,这种情况下我无法从 Telegram 重新取回它,建议直接在群里发送文件、发送 APK 下载链接,或私聊 bot 再转发文件。若群组开启了 Privacy Mode,请优先使用 /apkinfo@bot_username。", - "apk_too_large": "这个文件超过 Telegram 官方 Bot API 当前可下载的 20MB 限制。请使用下方按钮打开网页上传入口,直接上传到 Worker 解析。", - "upload_entry": "打开网页上传入口后选择 APK、APKS、APKM 或 XAPK 文件即可解析。这个入口绕过 Telegram Bot API 的 20MB 文件下载限制,但仍会受到 Cloudflare Worker 请求体和内存限制影响。", - "parse_failed": "解析 Android 包失败:{message}", - "open_full_report": "打开完整报告", - "open_upload_page": "上传大文件", - "source_channel": "频道消息", - "source_forwarded": "转发消息", - "source_private": "私聊消息", - "source_group": "群组消息", - "source_web_upload": "网页上传", - "source_link_preview": "链接预览", - "source_default": "Telegram 消息" + "start": "Hi! Send or forward an APK, APKS, APKM, or XAPK file and I'll analyze it automatically. You can also send an APK download link, and I'll try to parse it with HTTP Range by downloading only a small amount of metadata. In groups and channels, you can send an Android package directly, put /apkinfo in the file message or next to the APK link, or reply to a message containing an Android package with /apkinfo. For files larger than 20 MB, use /upload to open the web upload entry.", + "apk_not_found": "I couldn't find a parsable APK, APKS, APKM, XAPK file, or APK link. You can send or forward an Android package file directly, send an APK download link, or put /apkinfo in the same file/link message. If you're replying to analyze, make sure the replied message itself is an Android package file or APK link. In groups, forwarded files may not always include a complete file object for the bot, so I may be unable to retrieve them again from Telegram. In that case, please send the file directly in the group, send an APK download link, or forward it to me in a private chat. If Privacy Mode is enabled in the group, prefer using /apkinfo@bot_username.", + "apk_too_large": "This file exceeds Telegram Bot API's current 20 MB download limit. Use the button below to open the web upload entry and upload it directly to the Worker for analysis.", + "upload_entry": "Open the web upload entry, choose an APK, APKS, APKM, or XAPK file, and it will be parsed directly by the Worker. This bypasses Telegram Bot API's 20 MB file download limit, but Cloudflare Worker request body and memory limits still apply.", + "parse_failed": "Failed to parse Android package: {message}", + "open_full_report": "Open Full Report", + "open_upload_page": "Upload Large File", + "source_channel": "Channel Message", + "source_forwarded": "Forwarded Message", + "source_private": "Private Chat Message", + "source_group": "Group Message", + "source_web_upload": "Web Upload", + "source_link_preview": "Link Preview", + "source_default": "Telegram Message" }, "upload": { - "page_title": "上传 Android 包解析", - "heading": "上传 Android 包解析", - "intro": "直接把 APK、APKS、APKM 或 XAPK 上传到 Worker 解析,适合超过 Telegram Bot API 20MB 下载限制的文件。", - "file_label": "Android 包文件", - "language_label": "报告语言", - "submit": "开始解析", - "busy": "正在上传并解析...", - "progress_label": "上传进度", - "progress_preparing": "准备上传...", - "progress_complete": "上传完成,正在生成报告...", - "network_error": "上传失败,请检查网络后重试。", - "max_hint": "当前入口建议上传不超过 {maxSize} 的文件。", - "choose_file": "请选择 .apk、.apks、.apkm 或 .xapk 文件。", - "invalid_file": "请上传 .apk、.apks、.apkm 或 .xapk 文件。", - "too_large": "文件超过当前 Worker 上传解析上限:{maxSize}。", - "parse_failed": "解析 Android 包失败:{message}" + "page_title": "Upload Android Package for Analysis", + "heading": "Upload Android Package for Analysis", + "intro": "Upload an APK, APKS, APKM, or XAPK directly to the Worker. This is intended for files larger than Telegram Bot API's 20 MB download limit.", + "file_label": "Android Package File", + "language_label": "Report Language", + "submit": "Analyze", + "busy": "Uploading and analyzing...", + "progress_label": "Upload Progress", + "progress_preparing": "Preparing upload...", + "progress_complete": "Upload complete. Generating report...", + "network_error": "Upload failed. Please check your connection and try again.", + "max_hint": "This entry currently recommends files up to {maxSize}.", + "choose_file": "Choose an .apk, .apks, .apkm, or .xapk file.", + "invalid_file": "Please upload an .apk, .apks, .apkm, or .xapk file.", + "too_large": "The file exceeds the current Worker upload analysis limit: {maxSize}.", + "parse_failed": "Failed to parse Android package: {message}" }, "summary": { - "completed": "APK 解析完成", - "app_name": "应用名: {appName}", - "package_name": "包名: {packageName}", - "version_name": "versionName: {versionName}", - "version_code": "versionCode: {versionCode}", + "completed": "APK Analysis Complete", + "app_name": "App Name: {appName}", + "package_name": "Package Name: {packageName}", + "version_name": "Version Name: {versionName}", + "version_code": "Version Code: {versionCode}", "sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", - "permissions_count": "权限数量: {count}", - "native_library_count": "原生库数量: {count}", - "component_count": "组件数量: {count}", - "meta_data_count": "meta-data 数量: {count}", - "sdk_markers": "SDK 标记: {value}", - "features": "特性: {value}", - "open_report_hint": "完整报告请使用下方按钮打开。", - "sdk_summary_native": "原生库 {count}", - "sdk_summary_components": "组件 {count}" + "permissions_count": "Permissions: {count}", + "native_library_count": "Native Libraries: {count}", + "component_count": "Components: {count}", + "meta_data_count": "Meta-Data: {count}", + "sdk_markers": "SDK Markers: {value}", + "features": "Features: {value}", + "open_report_hint": "Use the button below to open the full report.", + "sdk_summary_native": "Native Libraries {count}", + "sdk_summary_components": "Components {count}" }, "report": { - "fallback_title": "APK 报告", - "error_title": "报告加载失败", - "missing_path": "缺少 report path 参数。", - "views": "浏览 {count}", - "meta_fallback": "APK 解析报告" + "fallback_title": "APK Report", + "error_title": "Failed to Load Report", + "missing_path": "Missing report path parameter.", + "views": "Views {count}", + "meta_fallback": "APK Analysis Report" }, "telegraph": { - "page_title": "{appName} APK 信息", - "apk_summary": "APK 摘要", - "file_info": "文件信息", - "native_libraries": "原生库", - "build_features": "构建特性", - "permissions": "权限", - "components": "组件", + "page_title": "{appName} APK Info", + "apk_summary": "APK Summary", + "file_info": "File Info", + "native_libraries": "Native Libraries", + "build_features": "Build Features", + "permissions": "Permissions", + "components": "Components", "application_meta_data": "Application Meta-Data", - "native_sdk_markers": "原生库 SDK 标记", - "marked_sdks": "已标记的 SDK", - "app_icon": "应用图标", - "line_app": "应用: {value}", - "line_package_name": "包名: {value}", - "line_icon": "图标: {value}", - "icon_detected": "已解析", - "icon_detected_with_path": "已解析 ({path})", - "icon_missing": "未解析到", - "line_version": "版本: {versionName} ({versionCode})", + "native_sdk_markers": "Native Library SDK Markers", + "marked_sdks": "Marked SDKs", + "app_icon": "App Icon", + "line_app": "App: {value}", + "line_package_name": "Package Name: {value}", + "line_icon": "Icon: {value}", + "icon_detected": "Detected", + "icon_detected_with_path": "Detected ({path})", + "icon_missing": "Not detected", + "line_version": "Version: {versionName} ({versionCode})", "line_sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", - "line_stats": "统计: 权限 {permissions} · 原生库 {nativeLibraries} · 组件 {components} · meta-data {metaData}", - "line_file_name": "文件名: {value}", - "line_file_size": "文件大小: {value}", - "line_message_source": "消息来源: {value}", - "line_analyzed_at": "分析时间: {value}", - "report_compacted_notice": "报告内容超过 Telegraph 单页限制,已自动切换为精简版:统计仍基于完整 APK,列表仅展示前若干项。", - "no_build_features": "未识别到构建特性。", - "no_native_libraries": "未发现原生库。", - "no_permissions": "未声明权限。", - "no_component": "未声明 {title}。", - "no_application_meta_data": "未声明 application 级 meta-data。", + "line_stats": "Stats: Permissions {permissions} · Native Libraries {nativeLibraries} · Components {components} · Meta-Data {metaData}", + "line_file_name": "File Name: {value}", + "line_file_size": "File Size: {value}", + "line_message_source": "Message Source: {value}", + "line_analyzed_at": "Analyzed At: {value}", + "report_compacted_notice": "The report exceeded Telegraph's single-page content limit, so a compact version was generated automatically. Stats still use the full APK, while lists only show the first items.", + "no_build_features": "No build features detected.", + "no_native_libraries": "No native libraries found.", + "no_permissions": "No permissions declared.", + "no_component": "No {title} declared.", + "no_application_meta_data": "No application-level meta-data declared.", "alias_target": "alias -> {target}", "resource_resolved": "resolved from string resource", "resource_reference": "resource reference", - "feature_detected": "已检测到", + "feature_detected": "Detected", "feature_kotlin": "Kotlin", "feature_compose": "Compose", "feature_gradle": "Gradle", "feature_agp": "Android Gradle Plugin", "feature_app_metadata_version": "App Metadata Version", - "unknown": "未知" + "unknown": "Unknown" }, "errors": { - "unknown": "未知错误", - "telegram_missing_file_path": "Telegram 没有返回可下载的 file_path", - "telegram_file_download_failed": "Telegram 文件下载失败 ({status})", - "telegram_api_request_failed": "Telegram API {method} 请求失败 ({status})", - "telegram_api_result_failed": "Telegram API {method} 返回失败", - "telegraph_invalid_path": "Telegraph 页面路径无效", - "telegraph_fetch_failed": "Telegraph 页面获取失败 ({status})", - "telegraph_fetch_failed_generic": "Telegraph 页面获取失败", - "telegraph_api_failed": "Telegraph API {method} 请求失败 ({status})", - "telegraph_api_result_failed": "Telegraph API {method} 返回失败" + "unknown": "Unknown error", + "telegram_missing_file_path": "Telegram did not return a downloadable file_path", + "telegram_file_download_failed": "Telegram file download failed ({status})", + "telegram_api_request_failed": "Telegram API {method} request failed ({status})", + "telegram_api_result_failed": "Telegram API {method} returned an error", + "telegraph_invalid_path": "Invalid Telegraph page path", + "telegraph_fetch_failed": "Failed to fetch Telegraph page ({status})", + "telegraph_fetch_failed_generic": "Failed to fetch Telegraph page", + "telegraph_api_failed": "Telegraph API {method} request failed ({status})", + "telegraph_api_result_failed": "Telegraph API {method} returned an error" }, "webui": { "title": "LibChecker WebUI", - "subtitle": "在线分析 APK/APKS/APKM/XAPK", - "modeLabel": "模式", - "modeAnalyze": "分析", - "modeCompare": "对比", - "themeLabel": "主题", - "themeDark": "深色", - "themeLight": "浅色", - "themeSystem": "系统", - "languageLabel": "语言", - "exportJson": "导出 JSON", - "clear": "清空", - "filePrompt": "选择或拖入", - "fileIdle": "未选择文件", - "localNote": "文件只在当前浏览器中解析", - "analyze": "开始分析", - "analyzing": "分析中", - "progressReady": "等待文件", - "progressReading": "读取文件", - "progressParsing": "解析 Manifest、资源与 DEX 标记", - "progressDone": "分析完成", - "historyTitle": "历史记录", - "historyNote": "保存在当前浏览器中,点击记录可重新打开结果", - "historyEmpty": "还没有历史记录", - "historyOpen": "打开历史记录", - "historyOpening": "正在打开报告...", - "historyDelete": "删除", - "historyExpand": "展开历史", - "historyCollapse": "收起历史", - "clearHistory": "清空历史", + "subtitle": "APK/APKS/APKM/XAPK Analyzer in Browser", + "modeLabel": "Mode", + "modeAnalyze": "Analyze", + "modeCompare": "Compare", + "themeLabel": "Theme", + "themeDark": "Dark", + "themeLight": "Light", + "themeSystem": "System", + "languageLabel": "Language", + "exportJson": "Export JSON", + "clear": "Clear", + "filePrompt": "Choose or drop", + "fileIdle": "No file selected", + "localNote": "The file is analyzed in this browser.", + "analyze": "Analyze", + "analyzing": "Analyzing", + "progressReady": "Waiting for file", + "progressReading": "Reading file", + "progressParsing": "Parsing manifest, resources, and DEX markers", + "progressDone": "Analysis complete", + "historyTitle": "History", + "historyNote": "Saved in this browser. Click an item to reopen the report.", + "historyEmpty": "No history yet.", + "historyOpen": "Open history item", + "historyOpening": "Opening report...", + "historyDelete": "Delete", + "historyExpand": "Expand History", + "historyCollapse": "Collapse History", + "clearHistory": "Clear History", "historyItemMeta": "{version} · Target SDK {targetSdk}", "historyFileMeta": "{file} · {size} · {date}", - "emptyTitle": "等待文件", - "emptyBody": "分析完成后会在这里展示摘要、SDK 标记、组件、权限、签名和元数据", - "tabSummary": "摘要", + "emptyTitle": "Waiting for file", + "emptyBody": "The report will show summary, SDK markers, components, permissions, signatures, and meta-data.", + "tabSummary": "Summary", "tabSdk": "SDK", - "tabNative": "原生库", - "tabComponents": "组件", - "tabPermissions": "权限", - "tabSignatures": "签名", - "tabMeta": "元数据", + "tabNative": "Native", + "tabComponents": "Components", + "tabPermissions": "Permissions", + "tabSignatures": "Signatures", + "tabMeta": "Meta-Data", "tabRaw": "JSON", - "noFile": "请选择 APK、APKS、APKM、XAPK 或 LCAPPS 文件", - "invalidFile": "请上传 .apk、.apks、.apkm、.xapk 或 .lcapps 文件", - "lcappsTitle": "选择应用", - "lcappsSubtitle": "{name} · {count} 个应用", - "lcappsSearch": "搜索应用或包名", - "lcappsLoading": "正在读取应用列表", - "lcappsClose": "关闭", - "lcappsReopen": "重新打开应用列表", - "lcappsReopenWithApp": "重新打开 {app} 的应用列表", - "lcappsNoMatches": "没有匹配的应用", - "lcappsReadFailed": "读取 .lcapps 文件失败", - "lcappsInvalidZip": ".lcapps 文件不是有效的 ZIP 压缩包", - "lcappsUnsupportedZip64": "当前浏览器暂不支持 ZIP64 格式的 .lcapps 文件", - "lcappsMissingJson": ".lcapps 文件中没有找到应用 JSON", - "lcappsInvalidJson": ".lcapps 文件中的应用 JSON 无法解析", - "lcappsUnsupportedCompression": ".lcapps 文件包含当前浏览器不支持的压缩方式", - "lcappsEmpty": ".lcapps 文件中没有可展示的应用", - "unsupportedDecompression": "当前浏览器不支持 DecompressionStream,无法在本地解压文件", - "unknownError": "未知错误", - "workerFailed": "分析进程启动失败", - "appName": "应用名", - "packageName": "包名", + "noFile": "Choose an APK, APKS, APKM, XAPK, or LCAPPS file.", + "invalidFile": "Please upload an .apk, .apks, .apkm, .xapk, or .lcapps file.", + "lcappsTitle": "Choose App", + "lcappsSubtitle": "{name} · {count} apps", + "lcappsSearch": "Search apps or package names", + "lcappsLoading": "Reading app list", + "lcappsClose": "Close", + "lcappsReopen": "Reopen app list", + "lcappsReopenWithApp": "Reopen {app} app list", + "lcappsNoMatches": "No matching apps", + "lcappsReadFailed": "Failed to read the .lcapps file.", + "lcappsInvalidZip": "The .lcapps file is not a valid ZIP archive.", + "lcappsUnsupportedZip64": "This browser does not support ZIP64 .lcapps files yet.", + "lcappsMissingJson": "No app JSON was found in the .lcapps file.", + "lcappsInvalidJson": "The app JSON in the .lcapps file could not be parsed.", + "lcappsUnsupportedCompression": "The .lcapps file uses a compression method this browser cannot read.", + "lcappsEmpty": "The .lcapps file does not contain any displayable apps.", + "unsupportedDecompression": "This browser does not support DecompressionStream, so the file cannot be decompressed locally.", + "unknownError": "Unknown error.", + "workerFailed": "Failed to start the analyzer worker.", + "appName": "App Name", + "packageName": "Package Name", "versionName": "versionName", "versionCode": "versionCode", "targetSdk": "Target SDK", "minSdk": "Min SDK", "compileSdk": "Compile SDK", - "fileName": "文件名", - "fileSize": "文件大小", - "analyzedAt": "分析时间", - "duration": "耗时", - "terminalSystem": "终端系统", - "permissions": "权限", - "nativeLibraries": "原生库", - "components": "组件", - "signatures": "签名", - "metaData": "元数据", - "buildFeatures": "构建特性", - "noBuildFeatures": "未识别到构建特性", - "noNativeLibraries": "未发现原生库", - "noSdkMarkers": "未匹配到 SDK 标记", - "noComponents": "未声明组件", - "noPermissions": "未声明权限", - "noSignatures": "未发现签名证书", - "noMetaData": "未声明 application 级元数据", - "summary": "摘要", - "sdkNative": "原生库 SDK 标记", - "sdkComponents": "组件 SDK 标记", + "fileName": "File Name", + "fileSize": "File Size", + "analyzedAt": "Analyzed At", + "duration": "Duration", + "terminalSystem": "Terminal System", + "permissions": "Permissions", + "nativeLibraries": "Native Libraries", + "components": "Components", + "signatures": "Signatures", + "metaData": "Meta-Data", + "buildFeatures": "Build Features", + "noBuildFeatures": "No build features detected.", + "noNativeLibraries": "No native libraries found.", + "noSdkMarkers": "No SDK markers matched.", + "noComponents": "No components declared.", + "noPermissions": "No permissions declared.", + "noSignatures": "No signature certificates found.", + "noMetaData": "No application-level meta-data declared.", + "summary": "Summary", + "sdkNative": "Native Library SDK Markers", + "sdkComponents": "Component SDK Markers", "activities": "Activity", "services": "Service", "receivers": "Receiver", @@ -219,83 +219,83 @@ "notExported": "not exported", "enabled": "enabled", "disabled": "disabled", - "unknown": "未知", - "permission": "权限", - "process": "进程", + "unknown": "Unknown", + "permission": "Permission", + "process": "Process", "authorities": "authorities", "actions": "actions", "targetActivity": "targetActivity", "sdk": "SDK", "abi": "ABI", - "path": "路径", - "size": "大小", - "value": "值", - "resource": "资源", - "detectedRule": "标记规则", - "ruleDevTeam": "开发团队", - "ruleContributors": "贡献者", - "ruleSource": "来源", + "path": "Path", + "size": "Size", + "value": "Value", + "resource": "Resource", + "detectedRule": "Matched Rule", + "ruleDevTeam": "Developer", + "ruleContributors": "Contributors", + "ruleSource": "Source", "ruleUuid": "UUID", - "signatureSchemes": "签名方案", - "signatureCertificate": "签名证书 {index}", - "signatureVersion": "版本", - "signatureSerialNumber": "序列号", - "signatureIssuer": "发行人", - "signatureSubject": "主题", - "signatureValidFrom": "有效期始", - "signatureValidTo": "有效期至", - "signaturePublicKeyFormat": "公钥格式", - "signaturePublicKeyAlgorithm": "公钥算法", - "signaturePublicKeyExponent": "公钥指数", - "signaturePublicKeyModulusSize": "模数大小", - "signaturePublicKeyModulus": "模数", - "signaturePublicKeyY": "公钥值Y", - "signaturePublicKeyType": "公钥类型", - "signatureAlgorithmName": "签名算法", - "signatureAlgorithmOid": "签名算法 OID", + "signatureSchemes": "Signing Schemes", + "signatureCertificate": "Signature Certificate {index}", + "signatureVersion": "Version", + "signatureSerialNumber": "Serial Number", + "signatureIssuer": "Issuer", + "signatureSubject": "Subject", + "signatureValidFrom": "Valid From", + "signatureValidTo": "Valid To", + "signaturePublicKeyFormat": "Public Key Format", + "signaturePublicKeyAlgorithm": "Public Key Algorithm", + "signaturePublicKeyExponent": "Public Key Exponent", + "signaturePublicKeyModulusSize": "Modulus Size", + "signaturePublicKeyModulus": "Modulus", + "signaturePublicKeyY": "Public Key Y", + "signaturePublicKeyType": "Public Key Type", + "signatureAlgorithmName": "Signature Algorithm", + "signatureAlgorithmOid": "Signature Algorithm OID", "signatureMd5": "MD5", "signatureSha1": "SHA1", "signatureSha256": "SHA256", "signatureCharString": "CharString", - "signatureSourceEntry": "来源条目", - "signatureDerLength": "证书大小", - "rawNotice": "JSON 视图默认省略较大的 data URI", + "signatureSourceEntry": "Source Entry", + "signatureDerLength": "Certificate Size", + "rawNotice": "The JSON view omits large data URIs by default.", "selectedFile": "{name} · {size}", "completedIn": "{seconds}s", - "localFile": "本地文件", - "archiveDistributionTitle": "子 APK 分布", - "archiveDistributionSummary": "{count} 个子 APK · {size}", - "archiveDistributionPercent": "占比", - "archiveAnalyzedEntry": "主包", - "compareSlotLeft": "左侧文件", - "compareSlotRight": "右侧文件", - "compareSlotNote": "拖入文件,或从历史记录选择", - "compareDropPrompt": "点击上传或拖入文件", - "compareSlotEmpty": "未选择文件", - "compareSlotEmptyHint": "上传一个文件,或选择一条历史记录", + "localFile": "Local file", + "archiveDistributionTitle": "Split APK Distribution", + "archiveDistributionSummary": "{count} split APKs · {size}", + "archiveDistributionPercent": "Share", + "archiveAnalyzedEntry": "main", + "compareSlotLeft": "Left File", + "compareSlotRight": "Right File", + "compareSlotNote": "Drop a file, or choose from history.", + "compareDropPrompt": "Click to upload or drop file", + "compareSlotEmpty": "No file selected", + "compareSlotEmptyHint": "Upload a file, or choose one history item.", "compareSlotReady": "{name} · {size}", - "compareHistoryLabel": "历史记录", - "compareHistoryPlaceholder": "选择历史记录", - "compareClearLeft": "清空左侧", - "compareClearRight": "清空右侧", - "compareSourceHistory": "历史记录", - "compareSourceUpload": "本地上传", - "comparePackageMismatch": "包名不同的对比", - "compareAwaitingPair": "再选择一个文件后开始对比", - "compareChangeCount": "差异项", - "compareBasicInfo": "基础信息", - "compareDifferences": "差异明细", - "compareNoDifferences": "未发现差异", - "compareField": "字段", - "compareLeft": "左侧", - "compareRight": "右侧", - "compareOnlyLeft": "仅左侧", - "compareOnlyRight": "仅右侧", - "compareAdded": "新增", - "compareDeleted": "删除", - "compareChanged": "改变", - "compareMoved": "移动", - "compareNoItems": "无", - "compareMoreItems": "还有 {count} 项未展示" + "compareHistoryLabel": "History", + "compareHistoryPlaceholder": "Choose from history", + "compareClearLeft": "Clear left", + "compareClearRight": "Clear right", + "compareSourceHistory": "History", + "compareSourceUpload": "Local upload", + "comparePackageMismatch": "Comparing different package names", + "compareAwaitingPair": "Choose one more file to start comparing.", + "compareChangeCount": "Changed Items", + "compareBasicInfo": "Basic Info", + "compareDifferences": "Differences", + "compareNoDifferences": "No differences found.", + "compareField": "Field", + "compareLeft": "Left", + "compareRight": "Right", + "compareOnlyLeft": "Left Only", + "compareOnlyRight": "Right Only", + "compareAdded": "Added", + "compareDeleted": "Deleted", + "compareChanged": "Changed", + "compareMoved": "Moved", + "compareNoItems": "None", + "compareMoreItems": "{count} more items hidden" } } From 296607f728b164ebb85e116910497e93c6304be3 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Sat, 13 Jun 2026 00:15:14 +0800 Subject: [PATCH 09/70] New translations en.json (Japanese) [ci skip] --- locales/ja-JP.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/locales/ja-JP.json b/locales/ja-JP.json index 2858a5c..cf5204b 100644 --- a/locales/ja-JP.json +++ b/locales/ja-JP.json @@ -153,6 +153,8 @@ "clearHistory": "Clear History", "historyItemMeta": "{version} · Target SDK {targetSdk}", "historyFileMeta": "{file} · {size} · {date}", + "historyVersionName": "Version Name", + "historyVersionCode": "Version Code", "emptyTitle": "Waiting for file", "emptyBody": "The report will show summary, SDK markers, components, permissions, signatures, and meta-data.", "tabSummary": "Summary", @@ -187,6 +189,8 @@ "packageName": "Package Name", "versionName": "versionName", "versionCode": "versionCode", + "heroVersionName": "Version Name", + "heroVersionCode": "Version Code", "targetSdk": "Target SDK", "minSdk": "Min SDK", "compileSdk": "Compile SDK", From 2876f50a7c8ab84cc8c31541b41aa82d7fe4877c Mon Sep 17 00:00:00 2001 From: Absinthe Date: Sat, 13 Jun 2026 00:15:15 +0800 Subject: [PATCH 10/70] New translations en.json (Korean) [ci skip] --- locales/ko-KR.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/locales/ko-KR.json b/locales/ko-KR.json index 2858a5c..cf5204b 100644 --- a/locales/ko-KR.json +++ b/locales/ko-KR.json @@ -153,6 +153,8 @@ "clearHistory": "Clear History", "historyItemMeta": "{version} · Target SDK {targetSdk}", "historyFileMeta": "{file} · {size} · {date}", + "historyVersionName": "Version Name", + "historyVersionCode": "Version Code", "emptyTitle": "Waiting for file", "emptyBody": "The report will show summary, SDK markers, components, permissions, signatures, and meta-data.", "tabSummary": "Summary", @@ -187,6 +189,8 @@ "packageName": "Package Name", "versionName": "versionName", "versionCode": "versionCode", + "heroVersionName": "Version Name", + "heroVersionCode": "Version Code", "targetSdk": "Target SDK", "minSdk": "Min SDK", "compileSdk": "Compile SDK", From b5c2035c5d7790ab51c8a208a5b0020b64e9fce0 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Sat, 13 Jun 2026 00:15:17 +0800 Subject: [PATCH 11/70] New translations en.json (Chinese Simplified) [ci skip] --- locales/zh-CN.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/locales/zh-CN.json b/locales/zh-CN.json index 2858a5c..cf5204b 100644 --- a/locales/zh-CN.json +++ b/locales/zh-CN.json @@ -153,6 +153,8 @@ "clearHistory": "Clear History", "historyItemMeta": "{version} · Target SDK {targetSdk}", "historyFileMeta": "{file} · {size} · {date}", + "historyVersionName": "Version Name", + "historyVersionCode": "Version Code", "emptyTitle": "Waiting for file", "emptyBody": "The report will show summary, SDK markers, components, permissions, signatures, and meta-data.", "tabSummary": "Summary", @@ -187,6 +189,8 @@ "packageName": "Package Name", "versionName": "versionName", "versionCode": "versionCode", + "heroVersionName": "Version Name", + "heroVersionCode": "Version Code", "targetSdk": "Target SDK", "minSdk": "Min SDK", "compileSdk": "Compile SDK", From bb08a256ae0dc011d17f842cb45a71d3b8fbd3da Mon Sep 17 00:00:00 2001 From: Absinthe Date: Sat, 13 Jun 2026 00:15:18 +0800 Subject: [PATCH 12/70] New translations en.json (Chinese Traditional) [ci skip] --- locales/zh-TW.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/locales/zh-TW.json b/locales/zh-TW.json index 2858a5c..cf5204b 100644 --- a/locales/zh-TW.json +++ b/locales/zh-TW.json @@ -153,6 +153,8 @@ "clearHistory": "Clear History", "historyItemMeta": "{version} · Target SDK {targetSdk}", "historyFileMeta": "{file} · {size} · {date}", + "historyVersionName": "Version Name", + "historyVersionCode": "Version Code", "emptyTitle": "Waiting for file", "emptyBody": "The report will show summary, SDK markers, components, permissions, signatures, and meta-data.", "tabSummary": "Summary", @@ -187,6 +189,8 @@ "packageName": "Package Name", "versionName": "versionName", "versionCode": "versionCode", + "heroVersionName": "Version Name", + "heroVersionCode": "Version Code", "targetSdk": "Target SDK", "minSdk": "Min SDK", "compileSdk": "Compile SDK", From fba9059601ff886af28ddb6d6cf74705c5c0cb36 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 11:44:57 +0800 Subject: [PATCH 13/70] New translations en.json (Japanese) [ci skip] --- locales/ja_JP.json | 305 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 305 insertions(+) create mode 100644 locales/ja_JP.json diff --git a/locales/ja_JP.json b/locales/ja_JP.json new file mode 100644 index 0000000..cf5204b --- /dev/null +++ b/locales/ja_JP.json @@ -0,0 +1,305 @@ +{ + "locale": { + "nativeName": "English", + "englishName": "English" + }, + "commands": { + "start_description": "Show usage instructions", + "apkinfo_description": "Analyze the current or replied APK/APKS/APKM/XAPK file", + "upload_description": "Upload a large Android package for analysis" + }, + "bot": { + "start": "Hi! Send or forward an APK, APKS, APKM, or XAPK file and I'll analyze it automatically. You can also send an APK download link, and I'll try to parse it with HTTP Range by downloading only a small amount of metadata. In groups and channels, you can send an Android package directly, put /apkinfo in the file message or next to the APK link, or reply to a message containing an Android package with /apkinfo. For files larger than 20 MB, use /upload to open the web upload entry.", + "apk_not_found": "I couldn't find a parsable APK, APKS, APKM, XAPK file, or APK link. You can send or forward an Android package file directly, send an APK download link, or put /apkinfo in the same file/link message. If you're replying to analyze, make sure the replied message itself is an Android package file or APK link. In groups, forwarded files may not always include a complete file object for the bot, so I may be unable to retrieve them again from Telegram. In that case, please send the file directly in the group, send an APK download link, or forward it to me in a private chat. If Privacy Mode is enabled in the group, prefer using /apkinfo@bot_username.", + "apk_too_large": "This file exceeds Telegram Bot API's current 20 MB download limit. Use the button below to open the web upload entry and upload it directly to the Worker for analysis.", + "upload_entry": "Open the web upload entry, choose an APK, APKS, APKM, or XAPK file, and it will be parsed directly by the Worker. This bypasses Telegram Bot API's 20 MB file download limit, but Cloudflare Worker request body and memory limits still apply.", + "parse_failed": "Failed to parse Android package: {message}", + "open_full_report": "Open Full Report", + "open_upload_page": "Upload Large File", + "source_channel": "Channel Message", + "source_forwarded": "Forwarded Message", + "source_private": "Private Chat Message", + "source_group": "Group Message", + "source_web_upload": "Web Upload", + "source_link_preview": "Link Preview", + "source_default": "Telegram Message" + }, + "upload": { + "page_title": "Upload Android Package for Analysis", + "heading": "Upload Android Package for Analysis", + "intro": "Upload an APK, APKS, APKM, or XAPK directly to the Worker. This is intended for files larger than Telegram Bot API's 20 MB download limit.", + "file_label": "Android Package File", + "language_label": "Report Language", + "submit": "Analyze", + "busy": "Uploading and analyzing...", + "progress_label": "Upload Progress", + "progress_preparing": "Preparing upload...", + "progress_complete": "Upload complete. Generating report...", + "network_error": "Upload failed. Please check your connection and try again.", + "max_hint": "This entry currently recommends files up to {maxSize}.", + "choose_file": "Choose an .apk, .apks, .apkm, or .xapk file.", + "invalid_file": "Please upload an .apk, .apks, .apkm, or .xapk file.", + "too_large": "The file exceeds the current Worker upload analysis limit: {maxSize}.", + "parse_failed": "Failed to parse Android package: {message}" + }, + "summary": { + "completed": "APK Analysis Complete", + "app_name": "App Name: {appName}", + "package_name": "Package Name: {packageName}", + "version_name": "Version Name: {versionName}", + "version_code": "Version Code: {versionCode}", + "sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", + "permissions_count": "Permissions: {count}", + "native_library_count": "Native Libraries: {count}", + "component_count": "Components: {count}", + "meta_data_count": "Meta-Data: {count}", + "sdk_markers": "SDK Markers: {value}", + "features": "Features: {value}", + "open_report_hint": "Use the button below to open the full report.", + "sdk_summary_native": "Native Libraries {count}", + "sdk_summary_components": "Components {count}" + }, + "report": { + "fallback_title": "APK Report", + "error_title": "Failed to Load Report", + "missing_path": "Missing report path parameter.", + "views": "Views {count}", + "meta_fallback": "APK Analysis Report" + }, + "telegraph": { + "page_title": "{appName} APK Info", + "apk_summary": "APK Summary", + "file_info": "File Info", + "native_libraries": "Native Libraries", + "build_features": "Build Features", + "permissions": "Permissions", + "components": "Components", + "application_meta_data": "Application Meta-Data", + "native_sdk_markers": "Native Library SDK Markers", + "marked_sdks": "Marked SDKs", + "app_icon": "App Icon", + "line_app": "App: {value}", + "line_package_name": "Package Name: {value}", + "line_icon": "Icon: {value}", + "icon_detected": "Detected", + "icon_detected_with_path": "Detected ({path})", + "icon_missing": "Not detected", + "line_version": "Version: {versionName} ({versionCode})", + "line_sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", + "line_stats": "Stats: Permissions {permissions} · Native Libraries {nativeLibraries} · Components {components} · Meta-Data {metaData}", + "line_file_name": "File Name: {value}", + "line_file_size": "File Size: {value}", + "line_message_source": "Message Source: {value}", + "line_analyzed_at": "Analyzed At: {value}", + "report_compacted_notice": "The report exceeded Telegraph's single-page content limit, so a compact version was generated automatically. Stats still use the full APK, while lists only show the first items.", + "no_build_features": "No build features detected.", + "no_native_libraries": "No native libraries found.", + "no_permissions": "No permissions declared.", + "no_component": "No {title} declared.", + "no_application_meta_data": "No application-level meta-data declared.", + "alias_target": "alias -> {target}", + "resource_resolved": "resolved from string resource", + "resource_reference": "resource reference", + "feature_detected": "Detected", + "feature_kotlin": "Kotlin", + "feature_compose": "Compose", + "feature_gradle": "Gradle", + "feature_agp": "Android Gradle Plugin", + "feature_app_metadata_version": "App Metadata Version", + "unknown": "Unknown" + }, + "errors": { + "unknown": "Unknown error", + "telegram_missing_file_path": "Telegram did not return a downloadable file_path", + "telegram_file_download_failed": "Telegram file download failed ({status})", + "telegram_api_request_failed": "Telegram API {method} request failed ({status})", + "telegram_api_result_failed": "Telegram API {method} returned an error", + "telegraph_invalid_path": "Invalid Telegraph page path", + "telegraph_fetch_failed": "Failed to fetch Telegraph page ({status})", + "telegraph_fetch_failed_generic": "Failed to fetch Telegraph page", + "telegraph_api_failed": "Telegraph API {method} request failed ({status})", + "telegraph_api_result_failed": "Telegraph API {method} returned an error" + }, + "webui": { + "title": "LibChecker WebUI", + "subtitle": "APK/APKS/APKM/XAPK Analyzer in Browser", + "modeLabel": "Mode", + "modeAnalyze": "Analyze", + "modeCompare": "Compare", + "themeLabel": "Theme", + "themeDark": "Dark", + "themeLight": "Light", + "themeSystem": "System", + "languageLabel": "Language", + "exportJson": "Export JSON", + "clear": "Clear", + "filePrompt": "Choose or drop", + "fileIdle": "No file selected", + "localNote": "The file is analyzed in this browser.", + "analyze": "Analyze", + "analyzing": "Analyzing", + "progressReady": "Waiting for file", + "progressReading": "Reading file", + "progressParsing": "Parsing manifest, resources, and DEX markers", + "progressDone": "Analysis complete", + "historyTitle": "History", + "historyNote": "Saved in this browser. Click an item to reopen the report.", + "historyEmpty": "No history yet.", + "historyOpen": "Open history item", + "historyOpening": "Opening report...", + "historyDelete": "Delete", + "historyExpand": "Expand History", + "historyCollapse": "Collapse History", + "clearHistory": "Clear History", + "historyItemMeta": "{version} · Target SDK {targetSdk}", + "historyFileMeta": "{file} · {size} · {date}", + "historyVersionName": "Version Name", + "historyVersionCode": "Version Code", + "emptyTitle": "Waiting for file", + "emptyBody": "The report will show summary, SDK markers, components, permissions, signatures, and meta-data.", + "tabSummary": "Summary", + "tabSdk": "SDK", + "tabNative": "Native", + "tabComponents": "Components", + "tabPermissions": "Permissions", + "tabSignatures": "Signatures", + "tabMeta": "Meta-Data", + "tabRaw": "JSON", + "noFile": "Choose an APK, APKS, APKM, XAPK, or LCAPPS file.", + "invalidFile": "Please upload an .apk, .apks, .apkm, .xapk, or .lcapps file.", + "lcappsTitle": "Choose App", + "lcappsSubtitle": "{name} · {count} apps", + "lcappsSearch": "Search apps or package names", + "lcappsLoading": "Reading app list", + "lcappsClose": "Close", + "lcappsReopen": "Reopen app list", + "lcappsReopenWithApp": "Reopen {app} app list", + "lcappsNoMatches": "No matching apps", + "lcappsReadFailed": "Failed to read the .lcapps file.", + "lcappsInvalidZip": "The .lcapps file is not a valid ZIP archive.", + "lcappsUnsupportedZip64": "This browser does not support ZIP64 .lcapps files yet.", + "lcappsMissingJson": "No app JSON was found in the .lcapps file.", + "lcappsInvalidJson": "The app JSON in the .lcapps file could not be parsed.", + "lcappsUnsupportedCompression": "The .lcapps file uses a compression method this browser cannot read.", + "lcappsEmpty": "The .lcapps file does not contain any displayable apps.", + "unsupportedDecompression": "This browser does not support DecompressionStream, so the file cannot be decompressed locally.", + "unknownError": "Unknown error.", + "workerFailed": "Failed to start the analyzer worker.", + "appName": "App Name", + "packageName": "Package Name", + "versionName": "versionName", + "versionCode": "versionCode", + "heroVersionName": "Version Name", + "heroVersionCode": "Version Code", + "targetSdk": "Target SDK", + "minSdk": "Min SDK", + "compileSdk": "Compile SDK", + "fileName": "File Name", + "fileSize": "File Size", + "analyzedAt": "Analyzed At", + "duration": "Duration", + "terminalSystem": "Terminal System", + "permissions": "Permissions", + "nativeLibraries": "Native Libraries", + "components": "Components", + "signatures": "Signatures", + "metaData": "Meta-Data", + "buildFeatures": "Build Features", + "noBuildFeatures": "No build features detected.", + "noNativeLibraries": "No native libraries found.", + "noSdkMarkers": "No SDK markers matched.", + "noComponents": "No components declared.", + "noPermissions": "No permissions declared.", + "noSignatures": "No signature certificates found.", + "noMetaData": "No application-level meta-data declared.", + "summary": "Summary", + "sdkNative": "Native Library SDK Markers", + "sdkComponents": "Component SDK Markers", + "activities": "Activity", + "services": "Service", + "receivers": "Receiver", + "providers": "Provider", + "exported": "exported", + "notExported": "not exported", + "enabled": "enabled", + "disabled": "disabled", + "unknown": "Unknown", + "permission": "Permission", + "process": "Process", + "authorities": "authorities", + "actions": "actions", + "targetActivity": "targetActivity", + "sdk": "SDK", + "abi": "ABI", + "path": "Path", + "size": "Size", + "value": "Value", + "resource": "Resource", + "detectedRule": "Matched Rule", + "ruleDevTeam": "Developer", + "ruleContributors": "Contributors", + "ruleSource": "Source", + "ruleUuid": "UUID", + "signatureSchemes": "Signing Schemes", + "signatureCertificate": "Signature Certificate {index}", + "signatureVersion": "Version", + "signatureSerialNumber": "Serial Number", + "signatureIssuer": "Issuer", + "signatureSubject": "Subject", + "signatureValidFrom": "Valid From", + "signatureValidTo": "Valid To", + "signaturePublicKeyFormat": "Public Key Format", + "signaturePublicKeyAlgorithm": "Public Key Algorithm", + "signaturePublicKeyExponent": "Public Key Exponent", + "signaturePublicKeyModulusSize": "Modulus Size", + "signaturePublicKeyModulus": "Modulus", + "signaturePublicKeyY": "Public Key Y", + "signaturePublicKeyType": "Public Key Type", + "signatureAlgorithmName": "Signature Algorithm", + "signatureAlgorithmOid": "Signature Algorithm OID", + "signatureMd5": "MD5", + "signatureSha1": "SHA1", + "signatureSha256": "SHA256", + "signatureCharString": "CharString", + "signatureSourceEntry": "Source Entry", + "signatureDerLength": "Certificate Size", + "rawNotice": "The JSON view omits large data URIs by default.", + "selectedFile": "{name} · {size}", + "completedIn": "{seconds}s", + "localFile": "Local file", + "archiveDistributionTitle": "Split APK Distribution", + "archiveDistributionSummary": "{count} split APKs · {size}", + "archiveDistributionPercent": "Share", + "archiveAnalyzedEntry": "main", + "compareSlotLeft": "Left File", + "compareSlotRight": "Right File", + "compareSlotNote": "Drop a file, or choose from history.", + "compareDropPrompt": "Click to upload or drop file", + "compareSlotEmpty": "No file selected", + "compareSlotEmptyHint": "Upload a file, or choose one history item.", + "compareSlotReady": "{name} · {size}", + "compareHistoryLabel": "History", + "compareHistoryPlaceholder": "Choose from history", + "compareClearLeft": "Clear left", + "compareClearRight": "Clear right", + "compareSourceHistory": "History", + "compareSourceUpload": "Local upload", + "comparePackageMismatch": "Comparing different package names", + "compareAwaitingPair": "Choose one more file to start comparing.", + "compareChangeCount": "Changed Items", + "compareBasicInfo": "Basic Info", + "compareDifferences": "Differences", + "compareNoDifferences": "No differences found.", + "compareField": "Field", + "compareLeft": "Left", + "compareRight": "Right", + "compareOnlyLeft": "Left Only", + "compareOnlyRight": "Right Only", + "compareAdded": "Added", + "compareDeleted": "Deleted", + "compareChanged": "Changed", + "compareMoved": "Moved", + "compareNoItems": "None", + "compareMoreItems": "{count} more items hidden" + } +} From 287ad669e56b5bb1b6591bfef7ee6f2d6c228476 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 11:44:58 +0800 Subject: [PATCH 14/70] New translations en.json (Korean) [ci skip] --- locales/ko_KR.json | 305 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 305 insertions(+) create mode 100644 locales/ko_KR.json diff --git a/locales/ko_KR.json b/locales/ko_KR.json new file mode 100644 index 0000000..cf5204b --- /dev/null +++ b/locales/ko_KR.json @@ -0,0 +1,305 @@ +{ + "locale": { + "nativeName": "English", + "englishName": "English" + }, + "commands": { + "start_description": "Show usage instructions", + "apkinfo_description": "Analyze the current or replied APK/APKS/APKM/XAPK file", + "upload_description": "Upload a large Android package for analysis" + }, + "bot": { + "start": "Hi! Send or forward an APK, APKS, APKM, or XAPK file and I'll analyze it automatically. You can also send an APK download link, and I'll try to parse it with HTTP Range by downloading only a small amount of metadata. In groups and channels, you can send an Android package directly, put /apkinfo in the file message or next to the APK link, or reply to a message containing an Android package with /apkinfo. For files larger than 20 MB, use /upload to open the web upload entry.", + "apk_not_found": "I couldn't find a parsable APK, APKS, APKM, XAPK file, or APK link. You can send or forward an Android package file directly, send an APK download link, or put /apkinfo in the same file/link message. If you're replying to analyze, make sure the replied message itself is an Android package file or APK link. In groups, forwarded files may not always include a complete file object for the bot, so I may be unable to retrieve them again from Telegram. In that case, please send the file directly in the group, send an APK download link, or forward it to me in a private chat. If Privacy Mode is enabled in the group, prefer using /apkinfo@bot_username.", + "apk_too_large": "This file exceeds Telegram Bot API's current 20 MB download limit. Use the button below to open the web upload entry and upload it directly to the Worker for analysis.", + "upload_entry": "Open the web upload entry, choose an APK, APKS, APKM, or XAPK file, and it will be parsed directly by the Worker. This bypasses Telegram Bot API's 20 MB file download limit, but Cloudflare Worker request body and memory limits still apply.", + "parse_failed": "Failed to parse Android package: {message}", + "open_full_report": "Open Full Report", + "open_upload_page": "Upload Large File", + "source_channel": "Channel Message", + "source_forwarded": "Forwarded Message", + "source_private": "Private Chat Message", + "source_group": "Group Message", + "source_web_upload": "Web Upload", + "source_link_preview": "Link Preview", + "source_default": "Telegram Message" + }, + "upload": { + "page_title": "Upload Android Package for Analysis", + "heading": "Upload Android Package for Analysis", + "intro": "Upload an APK, APKS, APKM, or XAPK directly to the Worker. This is intended for files larger than Telegram Bot API's 20 MB download limit.", + "file_label": "Android Package File", + "language_label": "Report Language", + "submit": "Analyze", + "busy": "Uploading and analyzing...", + "progress_label": "Upload Progress", + "progress_preparing": "Preparing upload...", + "progress_complete": "Upload complete. Generating report...", + "network_error": "Upload failed. Please check your connection and try again.", + "max_hint": "This entry currently recommends files up to {maxSize}.", + "choose_file": "Choose an .apk, .apks, .apkm, or .xapk file.", + "invalid_file": "Please upload an .apk, .apks, .apkm, or .xapk file.", + "too_large": "The file exceeds the current Worker upload analysis limit: {maxSize}.", + "parse_failed": "Failed to parse Android package: {message}" + }, + "summary": { + "completed": "APK Analysis Complete", + "app_name": "App Name: {appName}", + "package_name": "Package Name: {packageName}", + "version_name": "Version Name: {versionName}", + "version_code": "Version Code: {versionCode}", + "sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", + "permissions_count": "Permissions: {count}", + "native_library_count": "Native Libraries: {count}", + "component_count": "Components: {count}", + "meta_data_count": "Meta-Data: {count}", + "sdk_markers": "SDK Markers: {value}", + "features": "Features: {value}", + "open_report_hint": "Use the button below to open the full report.", + "sdk_summary_native": "Native Libraries {count}", + "sdk_summary_components": "Components {count}" + }, + "report": { + "fallback_title": "APK Report", + "error_title": "Failed to Load Report", + "missing_path": "Missing report path parameter.", + "views": "Views {count}", + "meta_fallback": "APK Analysis Report" + }, + "telegraph": { + "page_title": "{appName} APK Info", + "apk_summary": "APK Summary", + "file_info": "File Info", + "native_libraries": "Native Libraries", + "build_features": "Build Features", + "permissions": "Permissions", + "components": "Components", + "application_meta_data": "Application Meta-Data", + "native_sdk_markers": "Native Library SDK Markers", + "marked_sdks": "Marked SDKs", + "app_icon": "App Icon", + "line_app": "App: {value}", + "line_package_name": "Package Name: {value}", + "line_icon": "Icon: {value}", + "icon_detected": "Detected", + "icon_detected_with_path": "Detected ({path})", + "icon_missing": "Not detected", + "line_version": "Version: {versionName} ({versionCode})", + "line_sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", + "line_stats": "Stats: Permissions {permissions} · Native Libraries {nativeLibraries} · Components {components} · Meta-Data {metaData}", + "line_file_name": "File Name: {value}", + "line_file_size": "File Size: {value}", + "line_message_source": "Message Source: {value}", + "line_analyzed_at": "Analyzed At: {value}", + "report_compacted_notice": "The report exceeded Telegraph's single-page content limit, so a compact version was generated automatically. Stats still use the full APK, while lists only show the first items.", + "no_build_features": "No build features detected.", + "no_native_libraries": "No native libraries found.", + "no_permissions": "No permissions declared.", + "no_component": "No {title} declared.", + "no_application_meta_data": "No application-level meta-data declared.", + "alias_target": "alias -> {target}", + "resource_resolved": "resolved from string resource", + "resource_reference": "resource reference", + "feature_detected": "Detected", + "feature_kotlin": "Kotlin", + "feature_compose": "Compose", + "feature_gradle": "Gradle", + "feature_agp": "Android Gradle Plugin", + "feature_app_metadata_version": "App Metadata Version", + "unknown": "Unknown" + }, + "errors": { + "unknown": "Unknown error", + "telegram_missing_file_path": "Telegram did not return a downloadable file_path", + "telegram_file_download_failed": "Telegram file download failed ({status})", + "telegram_api_request_failed": "Telegram API {method} request failed ({status})", + "telegram_api_result_failed": "Telegram API {method} returned an error", + "telegraph_invalid_path": "Invalid Telegraph page path", + "telegraph_fetch_failed": "Failed to fetch Telegraph page ({status})", + "telegraph_fetch_failed_generic": "Failed to fetch Telegraph page", + "telegraph_api_failed": "Telegraph API {method} request failed ({status})", + "telegraph_api_result_failed": "Telegraph API {method} returned an error" + }, + "webui": { + "title": "LibChecker WebUI", + "subtitle": "APK/APKS/APKM/XAPK Analyzer in Browser", + "modeLabel": "Mode", + "modeAnalyze": "Analyze", + "modeCompare": "Compare", + "themeLabel": "Theme", + "themeDark": "Dark", + "themeLight": "Light", + "themeSystem": "System", + "languageLabel": "Language", + "exportJson": "Export JSON", + "clear": "Clear", + "filePrompt": "Choose or drop", + "fileIdle": "No file selected", + "localNote": "The file is analyzed in this browser.", + "analyze": "Analyze", + "analyzing": "Analyzing", + "progressReady": "Waiting for file", + "progressReading": "Reading file", + "progressParsing": "Parsing manifest, resources, and DEX markers", + "progressDone": "Analysis complete", + "historyTitle": "History", + "historyNote": "Saved in this browser. Click an item to reopen the report.", + "historyEmpty": "No history yet.", + "historyOpen": "Open history item", + "historyOpening": "Opening report...", + "historyDelete": "Delete", + "historyExpand": "Expand History", + "historyCollapse": "Collapse History", + "clearHistory": "Clear History", + "historyItemMeta": "{version} · Target SDK {targetSdk}", + "historyFileMeta": "{file} · {size} · {date}", + "historyVersionName": "Version Name", + "historyVersionCode": "Version Code", + "emptyTitle": "Waiting for file", + "emptyBody": "The report will show summary, SDK markers, components, permissions, signatures, and meta-data.", + "tabSummary": "Summary", + "tabSdk": "SDK", + "tabNative": "Native", + "tabComponents": "Components", + "tabPermissions": "Permissions", + "tabSignatures": "Signatures", + "tabMeta": "Meta-Data", + "tabRaw": "JSON", + "noFile": "Choose an APK, APKS, APKM, XAPK, or LCAPPS file.", + "invalidFile": "Please upload an .apk, .apks, .apkm, .xapk, or .lcapps file.", + "lcappsTitle": "Choose App", + "lcappsSubtitle": "{name} · {count} apps", + "lcappsSearch": "Search apps or package names", + "lcappsLoading": "Reading app list", + "lcappsClose": "Close", + "lcappsReopen": "Reopen app list", + "lcappsReopenWithApp": "Reopen {app} app list", + "lcappsNoMatches": "No matching apps", + "lcappsReadFailed": "Failed to read the .lcapps file.", + "lcappsInvalidZip": "The .lcapps file is not a valid ZIP archive.", + "lcappsUnsupportedZip64": "This browser does not support ZIP64 .lcapps files yet.", + "lcappsMissingJson": "No app JSON was found in the .lcapps file.", + "lcappsInvalidJson": "The app JSON in the .lcapps file could not be parsed.", + "lcappsUnsupportedCompression": "The .lcapps file uses a compression method this browser cannot read.", + "lcappsEmpty": "The .lcapps file does not contain any displayable apps.", + "unsupportedDecompression": "This browser does not support DecompressionStream, so the file cannot be decompressed locally.", + "unknownError": "Unknown error.", + "workerFailed": "Failed to start the analyzer worker.", + "appName": "App Name", + "packageName": "Package Name", + "versionName": "versionName", + "versionCode": "versionCode", + "heroVersionName": "Version Name", + "heroVersionCode": "Version Code", + "targetSdk": "Target SDK", + "minSdk": "Min SDK", + "compileSdk": "Compile SDK", + "fileName": "File Name", + "fileSize": "File Size", + "analyzedAt": "Analyzed At", + "duration": "Duration", + "terminalSystem": "Terminal System", + "permissions": "Permissions", + "nativeLibraries": "Native Libraries", + "components": "Components", + "signatures": "Signatures", + "metaData": "Meta-Data", + "buildFeatures": "Build Features", + "noBuildFeatures": "No build features detected.", + "noNativeLibraries": "No native libraries found.", + "noSdkMarkers": "No SDK markers matched.", + "noComponents": "No components declared.", + "noPermissions": "No permissions declared.", + "noSignatures": "No signature certificates found.", + "noMetaData": "No application-level meta-data declared.", + "summary": "Summary", + "sdkNative": "Native Library SDK Markers", + "sdkComponents": "Component SDK Markers", + "activities": "Activity", + "services": "Service", + "receivers": "Receiver", + "providers": "Provider", + "exported": "exported", + "notExported": "not exported", + "enabled": "enabled", + "disabled": "disabled", + "unknown": "Unknown", + "permission": "Permission", + "process": "Process", + "authorities": "authorities", + "actions": "actions", + "targetActivity": "targetActivity", + "sdk": "SDK", + "abi": "ABI", + "path": "Path", + "size": "Size", + "value": "Value", + "resource": "Resource", + "detectedRule": "Matched Rule", + "ruleDevTeam": "Developer", + "ruleContributors": "Contributors", + "ruleSource": "Source", + "ruleUuid": "UUID", + "signatureSchemes": "Signing Schemes", + "signatureCertificate": "Signature Certificate {index}", + "signatureVersion": "Version", + "signatureSerialNumber": "Serial Number", + "signatureIssuer": "Issuer", + "signatureSubject": "Subject", + "signatureValidFrom": "Valid From", + "signatureValidTo": "Valid To", + "signaturePublicKeyFormat": "Public Key Format", + "signaturePublicKeyAlgorithm": "Public Key Algorithm", + "signaturePublicKeyExponent": "Public Key Exponent", + "signaturePublicKeyModulusSize": "Modulus Size", + "signaturePublicKeyModulus": "Modulus", + "signaturePublicKeyY": "Public Key Y", + "signaturePublicKeyType": "Public Key Type", + "signatureAlgorithmName": "Signature Algorithm", + "signatureAlgorithmOid": "Signature Algorithm OID", + "signatureMd5": "MD5", + "signatureSha1": "SHA1", + "signatureSha256": "SHA256", + "signatureCharString": "CharString", + "signatureSourceEntry": "Source Entry", + "signatureDerLength": "Certificate Size", + "rawNotice": "The JSON view omits large data URIs by default.", + "selectedFile": "{name} · {size}", + "completedIn": "{seconds}s", + "localFile": "Local file", + "archiveDistributionTitle": "Split APK Distribution", + "archiveDistributionSummary": "{count} split APKs · {size}", + "archiveDistributionPercent": "Share", + "archiveAnalyzedEntry": "main", + "compareSlotLeft": "Left File", + "compareSlotRight": "Right File", + "compareSlotNote": "Drop a file, or choose from history.", + "compareDropPrompt": "Click to upload or drop file", + "compareSlotEmpty": "No file selected", + "compareSlotEmptyHint": "Upload a file, or choose one history item.", + "compareSlotReady": "{name} · {size}", + "compareHistoryLabel": "History", + "compareHistoryPlaceholder": "Choose from history", + "compareClearLeft": "Clear left", + "compareClearRight": "Clear right", + "compareSourceHistory": "History", + "compareSourceUpload": "Local upload", + "comparePackageMismatch": "Comparing different package names", + "compareAwaitingPair": "Choose one more file to start comparing.", + "compareChangeCount": "Changed Items", + "compareBasicInfo": "Basic Info", + "compareDifferences": "Differences", + "compareNoDifferences": "No differences found.", + "compareField": "Field", + "compareLeft": "Left", + "compareRight": "Right", + "compareOnlyLeft": "Left Only", + "compareOnlyRight": "Right Only", + "compareAdded": "Added", + "compareDeleted": "Deleted", + "compareChanged": "Changed", + "compareMoved": "Moved", + "compareNoItems": "None", + "compareMoreItems": "{count} more items hidden" + } +} From 8d365abc3b563334abdd43b89516691fedd0fa5f Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 11:44:59 +0800 Subject: [PATCH 15/70] New translations en.json (Chinese Simplified) [ci skip] --- locales/zh-Hans.json | 482 ++++++++++++++++++++++--------------------- 1 file changed, 243 insertions(+), 239 deletions(-) diff --git a/locales/zh-Hans.json b/locales/zh-Hans.json index e0df894..cf5204b 100644 --- a/locales/zh-Hans.json +++ b/locales/zh-Hans.json @@ -1,216 +1,220 @@ { "locale": { - "nativeName": "中文简体", - "englishName": "Chinese (Simplified)" + "nativeName": "English", + "englishName": "English" }, "commands": { - "start_description": "显示使用说明", - "apkinfo_description": "解析当前或回复的 APK/APKS/APKM/XAPK 文件", - "upload_description": "上传大型 Android 包解析" + "start_description": "Show usage instructions", + "apkinfo_description": "Analyze the current or replied APK/APKS/APKM/XAPK file", + "upload_description": "Upload a large Android package for analysis" }, "bot": { - "start": "你好,我可以帮你解析 APK、APKS、APKM 和 XAPK。\n\n私聊使用\n直接发送或转发 APK、APKS、APKM 或 XAPK 文件,我会自动解析。\n也可以发送 APK 下载链接,我会尝试用 HTTP Range 只下载少量元数据来解析。\n\n群组和频道\n直接发送 Android 包文件,或把 /apkinfo 写在文件消息里、APK 链接旁边。\n也可以回复含 Android 包文件的消息,再发送 /apkinfo。\n\n大文件\n超过 20MB 的文件,可以使用 /upload 打开网页上传入口。", - "apk_not_found": "我没有找到可解析的 APK、APKS、APKM、XAPK 文件或 APK 链接。你可以直接发送或转发 Android 包文件、发送 APK 下载链接,或者把 /apkinfo 写在同一条文件消息或链接消息里;如果是回复解析,也请确认你回复的那条消息本身就是 Android 包文件或 APK 链接。需要注意的是,群组里的转发文件有时不会把文件对象完整发给 bot,这种情况下我无法从 Telegram 重新取回它,建议直接在群里发送文件、发送 APK 下载链接,或私聊 bot 再转发文件。若群组开启了 Privacy Mode,请优先使用 /apkinfo@bot_username。", - "apk_too_large": "这个文件超过 Telegram 官方 Bot API 当前可下载的 20MB 限制。请使用下方按钮打开网页上传入口,直接上传到 Worker 解析。", - "upload_entry": "打开网页上传入口后选择 APK、APKS、APKM 或 XAPK 文件即可解析。这个入口绕过 Telegram Bot API 的 20MB 文件下载限制,但仍会受到 Cloudflare Worker 请求体和内存限制影响。", - "parse_failed": "解析 Android 包失败:{message}", - "open_full_report": "打开完整报告", - "open_upload_page": "上传大文件", - "source_channel": "频道消息", - "source_forwarded": "转发消息", - "source_private": "私聊消息", - "source_group": "群组消息", - "source_web_upload": "网页上传", - "source_link_preview": "链接预览", - "source_default": "Telegram 消息" + "start": "Hi! Send or forward an APK, APKS, APKM, or XAPK file and I'll analyze it automatically. You can also send an APK download link, and I'll try to parse it with HTTP Range by downloading only a small amount of metadata. In groups and channels, you can send an Android package directly, put /apkinfo in the file message or next to the APK link, or reply to a message containing an Android package with /apkinfo. For files larger than 20 MB, use /upload to open the web upload entry.", + "apk_not_found": "I couldn't find a parsable APK, APKS, APKM, XAPK file, or APK link. You can send or forward an Android package file directly, send an APK download link, or put /apkinfo in the same file/link message. If you're replying to analyze, make sure the replied message itself is an Android package file or APK link. In groups, forwarded files may not always include a complete file object for the bot, so I may be unable to retrieve them again from Telegram. In that case, please send the file directly in the group, send an APK download link, or forward it to me in a private chat. If Privacy Mode is enabled in the group, prefer using /apkinfo@bot_username.", + "apk_too_large": "This file exceeds Telegram Bot API's current 20 MB download limit. Use the button below to open the web upload entry and upload it directly to the Worker for analysis.", + "upload_entry": "Open the web upload entry, choose an APK, APKS, APKM, or XAPK file, and it will be parsed directly by the Worker. This bypasses Telegram Bot API's 20 MB file download limit, but Cloudflare Worker request body and memory limits still apply.", + "parse_failed": "Failed to parse Android package: {message}", + "open_full_report": "Open Full Report", + "open_upload_page": "Upload Large File", + "source_channel": "Channel Message", + "source_forwarded": "Forwarded Message", + "source_private": "Private Chat Message", + "source_group": "Group Message", + "source_web_upload": "Web Upload", + "source_link_preview": "Link Preview", + "source_default": "Telegram Message" }, "upload": { - "page_title": "上传 Android 包解析", - "heading": "上传 Android 包解析", - "intro": "直接把 APK、APKS、APKM 或 XAPK 上传到 Worker 解析,适合超过 Telegram Bot API 20MB 下载限制的文件。", - "file_label": "Android 包文件", - "language_label": "报告语言", - "submit": "开始解析", - "busy": "正在上传并解析...", - "progress_label": "上传进度", - "progress_preparing": "准备上传...", - "progress_complete": "上传完成,正在生成报告...", - "network_error": "上传失败,请检查网络后重试。", - "max_hint": "当前入口建议上传不超过 {maxSize} 的文件。", - "choose_file": "请选择 .apk、.apks、.apkm 或 .xapk 文件。", - "invalid_file": "请上传 .apk、.apks、.apkm 或 .xapk 文件。", - "too_large": "文件超过当前 Worker 上传解析上限:{maxSize}。", - "parse_failed": "解析 Android 包失败:{message}" + "page_title": "Upload Android Package for Analysis", + "heading": "Upload Android Package for Analysis", + "intro": "Upload an APK, APKS, APKM, or XAPK directly to the Worker. This is intended for files larger than Telegram Bot API's 20 MB download limit.", + "file_label": "Android Package File", + "language_label": "Report Language", + "submit": "Analyze", + "busy": "Uploading and analyzing...", + "progress_label": "Upload Progress", + "progress_preparing": "Preparing upload...", + "progress_complete": "Upload complete. Generating report...", + "network_error": "Upload failed. Please check your connection and try again.", + "max_hint": "This entry currently recommends files up to {maxSize}.", + "choose_file": "Choose an .apk, .apks, .apkm, or .xapk file.", + "invalid_file": "Please upload an .apk, .apks, .apkm, or .xapk file.", + "too_large": "The file exceeds the current Worker upload analysis limit: {maxSize}.", + "parse_failed": "Failed to parse Android package: {message}" }, "summary": { - "completed": "APK 解析完成", - "app_name": "应用名: {appName}", - "package_name": "包名: {packageName}", - "version_name": "versionName: {versionName}", - "version_code": "versionCode: {versionCode}", + "completed": "APK Analysis Complete", + "app_name": "App Name: {appName}", + "package_name": "Package Name: {packageName}", + "version_name": "Version Name: {versionName}", + "version_code": "Version Code: {versionCode}", "sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", - "permissions_count": "权限数量: {count}", - "native_library_count": "原生库数量: {count}", - "component_count": "组件数量: {count}", - "meta_data_count": "meta-data 数量: {count}", - "sdk_markers": "SDK 标记: {value}", - "features": "特性: {value}", - "open_report_hint": "完整报告请使用下方按钮打开。", - "sdk_summary_native": "原生库 {count}", - "sdk_summary_components": "组件 {count}" + "permissions_count": "Permissions: {count}", + "native_library_count": "Native Libraries: {count}", + "component_count": "Components: {count}", + "meta_data_count": "Meta-Data: {count}", + "sdk_markers": "SDK Markers: {value}", + "features": "Features: {value}", + "open_report_hint": "Use the button below to open the full report.", + "sdk_summary_native": "Native Libraries {count}", + "sdk_summary_components": "Components {count}" }, "report": { - "fallback_title": "APK 报告", - "error_title": "报告加载失败", - "missing_path": "缺少 report path 参数。", - "views": "浏览 {count}", - "meta_fallback": "APK 解析报告" + "fallback_title": "APK Report", + "error_title": "Failed to Load Report", + "missing_path": "Missing report path parameter.", + "views": "Views {count}", + "meta_fallback": "APK Analysis Report" }, "telegraph": { - "page_title": "{appName} APK 信息", - "apk_summary": "APK 摘要", - "file_info": "文件信息", - "native_libraries": "原生库", - "build_features": "构建特性", - "permissions": "权限", - "components": "组件", + "page_title": "{appName} APK Info", + "apk_summary": "APK Summary", + "file_info": "File Info", + "native_libraries": "Native Libraries", + "build_features": "Build Features", + "permissions": "Permissions", + "components": "Components", "application_meta_data": "Application Meta-Data", - "native_sdk_markers": "原生库 SDK 标记", - "marked_sdks": "已标记的 SDK", - "app_icon": "应用图标", - "line_app": "应用: {value}", - "line_package_name": "包名: {value}", - "line_icon": "图标: {value}", - "icon_detected": "已解析", - "icon_detected_with_path": "已解析 ({path})", - "icon_missing": "未解析到", - "line_version": "版本: {versionName} ({versionCode})", + "native_sdk_markers": "Native Library SDK Markers", + "marked_sdks": "Marked SDKs", + "app_icon": "App Icon", + "line_app": "App: {value}", + "line_package_name": "Package Name: {value}", + "line_icon": "Icon: {value}", + "icon_detected": "Detected", + "icon_detected_with_path": "Detected ({path})", + "icon_missing": "Not detected", + "line_version": "Version: {versionName} ({versionCode})", "line_sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", - "line_stats": "统计: 权限 {permissions} · 原生库 {nativeLibraries} · 组件 {components} · meta-data {metaData}", - "line_file_name": "文件名: {value}", - "line_file_size": "文件大小: {value}", - "line_message_source": "消息来源: {value}", - "line_analyzed_at": "分析时间: {value}", - "report_compacted_notice": "报告内容超过 Telegraph 单页限制,已自动切换为精简版:统计仍基于完整 APK,列表仅展示前若干项。", - "no_build_features": "未识别到构建特性。", - "no_native_libraries": "未发现原生库。", - "no_permissions": "未声明权限。", - "no_component": "未声明 {title}。", - "no_application_meta_data": "未声明 application 级 meta-data。", + "line_stats": "Stats: Permissions {permissions} · Native Libraries {nativeLibraries} · Components {components} · Meta-Data {metaData}", + "line_file_name": "File Name: {value}", + "line_file_size": "File Size: {value}", + "line_message_source": "Message Source: {value}", + "line_analyzed_at": "Analyzed At: {value}", + "report_compacted_notice": "The report exceeded Telegraph's single-page content limit, so a compact version was generated automatically. Stats still use the full APK, while lists only show the first items.", + "no_build_features": "No build features detected.", + "no_native_libraries": "No native libraries found.", + "no_permissions": "No permissions declared.", + "no_component": "No {title} declared.", + "no_application_meta_data": "No application-level meta-data declared.", "alias_target": "alias -> {target}", "resource_resolved": "resolved from string resource", "resource_reference": "resource reference", - "feature_detected": "已检测到", + "feature_detected": "Detected", "feature_kotlin": "Kotlin", "feature_compose": "Compose", "feature_gradle": "Gradle", "feature_agp": "Android Gradle Plugin", "feature_app_metadata_version": "App Metadata Version", - "unknown": "未知" + "unknown": "Unknown" }, "errors": { - "unknown": "未知错误", - "telegram_missing_file_path": "Telegram 没有返回可下载的 file_path", - "telegram_file_download_failed": "Telegram 文件下载失败 ({status})", - "telegram_api_request_failed": "Telegram API {method} 请求失败 ({status})", - "telegram_api_result_failed": "Telegram API {method} 返回失败", - "telegraph_invalid_path": "Telegraph 页面路径无效", - "telegraph_fetch_failed": "Telegraph 页面获取失败 ({status})", - "telegraph_fetch_failed_generic": "Telegraph 页面获取失败", - "telegraph_api_failed": "Telegraph API {method} 请求失败 ({status})", - "telegraph_api_result_failed": "Telegraph API {method} 返回失败" + "unknown": "Unknown error", + "telegram_missing_file_path": "Telegram did not return a downloadable file_path", + "telegram_file_download_failed": "Telegram file download failed ({status})", + "telegram_api_request_failed": "Telegram API {method} request failed ({status})", + "telegram_api_result_failed": "Telegram API {method} returned an error", + "telegraph_invalid_path": "Invalid Telegraph page path", + "telegraph_fetch_failed": "Failed to fetch Telegraph page ({status})", + "telegraph_fetch_failed_generic": "Failed to fetch Telegraph page", + "telegraph_api_failed": "Telegraph API {method} request failed ({status})", + "telegraph_api_result_failed": "Telegraph API {method} returned an error" }, "webui": { "title": "LibChecker WebUI", - "subtitle": "在线分析 APK/APKS/APKM/XAPK", - "modeLabel": "模式", - "modeAnalyze": "分析", - "modeCompare": "对比", - "themeLabel": "主题", - "themeDark": "深色", - "themeLight": "浅色", - "themeSystem": "系统", - "languageLabel": "语言", - "exportJson": "导出 JSON", - "clear": "清空", - "filePrompt": "选择或拖入", - "fileIdle": "未选择文件", - "localNote": "文件只在当前浏览器中解析", - "analyze": "开始分析", - "analyzing": "分析中", - "progressReady": "等待文件", - "progressReading": "读取文件", - "progressParsing": "解析 Manifest、资源与 DEX 标记", - "progressDone": "分析完成", - "historyTitle": "历史记录", - "historyNote": "保存在当前浏览器中,点击记录可重新打开结果", - "historyEmpty": "还没有历史记录", - "historyOpen": "打开历史记录", - "historyOpening": "正在打开报告...", - "historyDelete": "删除", - "historyExpand": "展开历史", - "historyCollapse": "收起历史", - "clearHistory": "清空历史", + "subtitle": "APK/APKS/APKM/XAPK Analyzer in Browser", + "modeLabel": "Mode", + "modeAnalyze": "Analyze", + "modeCompare": "Compare", + "themeLabel": "Theme", + "themeDark": "Dark", + "themeLight": "Light", + "themeSystem": "System", + "languageLabel": "Language", + "exportJson": "Export JSON", + "clear": "Clear", + "filePrompt": "Choose or drop", + "fileIdle": "No file selected", + "localNote": "The file is analyzed in this browser.", + "analyze": "Analyze", + "analyzing": "Analyzing", + "progressReady": "Waiting for file", + "progressReading": "Reading file", + "progressParsing": "Parsing manifest, resources, and DEX markers", + "progressDone": "Analysis complete", + "historyTitle": "History", + "historyNote": "Saved in this browser. Click an item to reopen the report.", + "historyEmpty": "No history yet.", + "historyOpen": "Open history item", + "historyOpening": "Opening report...", + "historyDelete": "Delete", + "historyExpand": "Expand History", + "historyCollapse": "Collapse History", + "clearHistory": "Clear History", "historyItemMeta": "{version} · Target SDK {targetSdk}", "historyFileMeta": "{file} · {size} · {date}", - "emptyTitle": "等待文件", - "emptyBody": "分析完成后会在这里展示摘要、SDK 标记、组件、权限、签名和元数据", - "tabSummary": "摘要", + "historyVersionName": "Version Name", + "historyVersionCode": "Version Code", + "emptyTitle": "Waiting for file", + "emptyBody": "The report will show summary, SDK markers, components, permissions, signatures, and meta-data.", + "tabSummary": "Summary", "tabSdk": "SDK", - "tabNative": "原生库", - "tabComponents": "组件", - "tabPermissions": "权限", - "tabSignatures": "签名", - "tabMeta": "元数据", + "tabNative": "Native", + "tabComponents": "Components", + "tabPermissions": "Permissions", + "tabSignatures": "Signatures", + "tabMeta": "Meta-Data", "tabRaw": "JSON", - "noFile": "请选择 APK、APKS、APKM、XAPK 或 LCAPPS 文件", - "invalidFile": "请上传 .apk、.apks、.apkm、.xapk 或 .lcapps 文件", - "lcappsTitle": "选择应用", - "lcappsSubtitle": "{name} · {count} 个应用", - "lcappsSearch": "搜索应用或包名", - "lcappsLoading": "正在读取应用列表", - "lcappsClose": "关闭", - "lcappsReopen": "重新打开应用列表", - "lcappsReopenWithApp": "重新打开 {app} 的应用列表", - "lcappsNoMatches": "没有匹配的应用", - "lcappsReadFailed": "读取 .lcapps 文件失败", - "lcappsInvalidZip": ".lcapps 文件不是有效的 ZIP 压缩包", - "lcappsUnsupportedZip64": "当前浏览器暂不支持 ZIP64 格式的 .lcapps 文件", - "lcappsMissingJson": ".lcapps 文件中没有找到应用 JSON", - "lcappsInvalidJson": ".lcapps 文件中的应用 JSON 无法解析", - "lcappsUnsupportedCompression": ".lcapps 文件包含当前浏览器不支持的压缩方式", - "lcappsEmpty": ".lcapps 文件中没有可展示的应用", - "unsupportedDecompression": "当前浏览器不支持 DecompressionStream,无法在本地解压文件", - "unknownError": "未知错误", - "workerFailed": "分析进程启动失败", - "appName": "应用名", - "packageName": "包名", + "noFile": "Choose an APK, APKS, APKM, XAPK, or LCAPPS file.", + "invalidFile": "Please upload an .apk, .apks, .apkm, .xapk, or .lcapps file.", + "lcappsTitle": "Choose App", + "lcappsSubtitle": "{name} · {count} apps", + "lcappsSearch": "Search apps or package names", + "lcappsLoading": "Reading app list", + "lcappsClose": "Close", + "lcappsReopen": "Reopen app list", + "lcappsReopenWithApp": "Reopen {app} app list", + "lcappsNoMatches": "No matching apps", + "lcappsReadFailed": "Failed to read the .lcapps file.", + "lcappsInvalidZip": "The .lcapps file is not a valid ZIP archive.", + "lcappsUnsupportedZip64": "This browser does not support ZIP64 .lcapps files yet.", + "lcappsMissingJson": "No app JSON was found in the .lcapps file.", + "lcappsInvalidJson": "The app JSON in the .lcapps file could not be parsed.", + "lcappsUnsupportedCompression": "The .lcapps file uses a compression method this browser cannot read.", + "lcappsEmpty": "The .lcapps file does not contain any displayable apps.", + "unsupportedDecompression": "This browser does not support DecompressionStream, so the file cannot be decompressed locally.", + "unknownError": "Unknown error.", + "workerFailed": "Failed to start the analyzer worker.", + "appName": "App Name", + "packageName": "Package Name", "versionName": "versionName", "versionCode": "versionCode", + "heroVersionName": "Version Name", + "heroVersionCode": "Version Code", "targetSdk": "Target SDK", "minSdk": "Min SDK", "compileSdk": "Compile SDK", - "fileName": "文件名", - "fileSize": "文件大小", - "analyzedAt": "分析时间", - "duration": "耗时", - "terminalSystem": "终端系统", - "permissions": "权限", - "nativeLibraries": "原生库", - "components": "组件", - "signatures": "签名", - "metaData": "元数据", - "buildFeatures": "构建特性", - "noBuildFeatures": "未识别到构建特性", - "noNativeLibraries": "未发现原生库", - "noSdkMarkers": "未匹配到 SDK 标记", - "noComponents": "未声明组件", - "noPermissions": "未声明权限", - "noSignatures": "未发现签名证书", - "noMetaData": "未声明 application 级元数据", - "summary": "摘要", - "sdkNative": "原生库 SDK 标记", - "sdkComponents": "组件 SDK 标记", + "fileName": "File Name", + "fileSize": "File Size", + "analyzedAt": "Analyzed At", + "duration": "Duration", + "terminalSystem": "Terminal System", + "permissions": "Permissions", + "nativeLibraries": "Native Libraries", + "components": "Components", + "signatures": "Signatures", + "metaData": "Meta-Data", + "buildFeatures": "Build Features", + "noBuildFeatures": "No build features detected.", + "noNativeLibraries": "No native libraries found.", + "noSdkMarkers": "No SDK markers matched.", + "noComponents": "No components declared.", + "noPermissions": "No permissions declared.", + "noSignatures": "No signature certificates found.", + "noMetaData": "No application-level meta-data declared.", + "summary": "Summary", + "sdkNative": "Native Library SDK Markers", + "sdkComponents": "Component SDK Markers", "activities": "Activity", "services": "Service", "receivers": "Receiver", @@ -219,83 +223,83 @@ "notExported": "not exported", "enabled": "enabled", "disabled": "disabled", - "unknown": "未知", - "permission": "权限", - "process": "进程", + "unknown": "Unknown", + "permission": "Permission", + "process": "Process", "authorities": "authorities", "actions": "actions", "targetActivity": "targetActivity", "sdk": "SDK", "abi": "ABI", - "path": "路径", - "size": "大小", - "value": "值", - "resource": "资源", - "detectedRule": "标记规则", - "ruleDevTeam": "开发团队", - "ruleContributors": "贡献者", - "ruleSource": "来源", + "path": "Path", + "size": "Size", + "value": "Value", + "resource": "Resource", + "detectedRule": "Matched Rule", + "ruleDevTeam": "Developer", + "ruleContributors": "Contributors", + "ruleSource": "Source", "ruleUuid": "UUID", - "signatureSchemes": "签名方案", - "signatureCertificate": "签名证书 {index}", - "signatureVersion": "版本", - "signatureSerialNumber": "序列号", - "signatureIssuer": "发行人", - "signatureSubject": "主题", - "signatureValidFrom": "有效期始", - "signatureValidTo": "有效期至", - "signaturePublicKeyFormat": "公钥格式", - "signaturePublicKeyAlgorithm": "公钥算法", - "signaturePublicKeyExponent": "公钥指数", - "signaturePublicKeyModulusSize": "模数大小", - "signaturePublicKeyModulus": "模数", - "signaturePublicKeyY": "公钥值Y", - "signaturePublicKeyType": "公钥类型", - "signatureAlgorithmName": "签名算法", - "signatureAlgorithmOid": "签名算法 OID", + "signatureSchemes": "Signing Schemes", + "signatureCertificate": "Signature Certificate {index}", + "signatureVersion": "Version", + "signatureSerialNumber": "Serial Number", + "signatureIssuer": "Issuer", + "signatureSubject": "Subject", + "signatureValidFrom": "Valid From", + "signatureValidTo": "Valid To", + "signaturePublicKeyFormat": "Public Key Format", + "signaturePublicKeyAlgorithm": "Public Key Algorithm", + "signaturePublicKeyExponent": "Public Key Exponent", + "signaturePublicKeyModulusSize": "Modulus Size", + "signaturePublicKeyModulus": "Modulus", + "signaturePublicKeyY": "Public Key Y", + "signaturePublicKeyType": "Public Key Type", + "signatureAlgorithmName": "Signature Algorithm", + "signatureAlgorithmOid": "Signature Algorithm OID", "signatureMd5": "MD5", "signatureSha1": "SHA1", "signatureSha256": "SHA256", "signatureCharString": "CharString", - "signatureSourceEntry": "来源条目", - "signatureDerLength": "证书大小", - "rawNotice": "JSON 视图默认省略较大的 data URI", + "signatureSourceEntry": "Source Entry", + "signatureDerLength": "Certificate Size", + "rawNotice": "The JSON view omits large data URIs by default.", "selectedFile": "{name} · {size}", "completedIn": "{seconds}s", - "localFile": "本地文件", - "archiveDistributionTitle": "子 APK 分布", - "archiveDistributionSummary": "{count} 个子 APK · {size}", - "archiveDistributionPercent": "占比", - "archiveAnalyzedEntry": "主包", - "compareSlotLeft": "左侧文件", - "compareSlotRight": "右侧文件", - "compareSlotNote": "拖入文件,或从历史记录选择", - "compareDropPrompt": "点击上传或拖入文件", - "compareSlotEmpty": "未选择文件", - "compareSlotEmptyHint": "上传一个文件,或选择一条历史记录", + "localFile": "Local file", + "archiveDistributionTitle": "Split APK Distribution", + "archiveDistributionSummary": "{count} split APKs · {size}", + "archiveDistributionPercent": "Share", + "archiveAnalyzedEntry": "main", + "compareSlotLeft": "Left File", + "compareSlotRight": "Right File", + "compareSlotNote": "Drop a file, or choose from history.", + "compareDropPrompt": "Click to upload or drop file", + "compareSlotEmpty": "No file selected", + "compareSlotEmptyHint": "Upload a file, or choose one history item.", "compareSlotReady": "{name} · {size}", - "compareHistoryLabel": "历史记录", - "compareHistoryPlaceholder": "选择历史记录", - "compareClearLeft": "清空左侧", - "compareClearRight": "清空右侧", - "compareSourceHistory": "历史记录", - "compareSourceUpload": "本地上传", - "comparePackageMismatch": "包名不同的对比", - "compareAwaitingPair": "再选择一个文件后开始对比", - "compareChangeCount": "差异项", - "compareBasicInfo": "基础信息", - "compareDifferences": "差异明细", - "compareNoDifferences": "未发现差异", - "compareField": "字段", - "compareLeft": "左侧", - "compareRight": "右侧", - "compareOnlyLeft": "仅左侧", - "compareOnlyRight": "仅右侧", - "compareAdded": "新增", - "compareDeleted": "删除", - "compareChanged": "改变", - "compareMoved": "移动", - "compareNoItems": "无", - "compareMoreItems": "还有 {count} 项未展示" + "compareHistoryLabel": "History", + "compareHistoryPlaceholder": "Choose from history", + "compareClearLeft": "Clear left", + "compareClearRight": "Clear right", + "compareSourceHistory": "History", + "compareSourceUpload": "Local upload", + "comparePackageMismatch": "Comparing different package names", + "compareAwaitingPair": "Choose one more file to start comparing.", + "compareChangeCount": "Changed Items", + "compareBasicInfo": "Basic Info", + "compareDifferences": "Differences", + "compareNoDifferences": "No differences found.", + "compareField": "Field", + "compareLeft": "Left", + "compareRight": "Right", + "compareOnlyLeft": "Left Only", + "compareOnlyRight": "Right Only", + "compareAdded": "Added", + "compareDeleted": "Deleted", + "compareChanged": "Changed", + "compareMoved": "Moved", + "compareNoItems": "None", + "compareMoreItems": "{count} more items hidden" } } From 5c811ba16483bf37d19bb62e3be34bbdd334a125 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 11:45:00 +0800 Subject: [PATCH 16/70] New translations en.json (Chinese Traditional) [ci skip] --- locales/zh-Hant.json | 305 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 305 insertions(+) create mode 100644 locales/zh-Hant.json diff --git a/locales/zh-Hant.json b/locales/zh-Hant.json new file mode 100644 index 0000000..cf5204b --- /dev/null +++ b/locales/zh-Hant.json @@ -0,0 +1,305 @@ +{ + "locale": { + "nativeName": "English", + "englishName": "English" + }, + "commands": { + "start_description": "Show usage instructions", + "apkinfo_description": "Analyze the current or replied APK/APKS/APKM/XAPK file", + "upload_description": "Upload a large Android package for analysis" + }, + "bot": { + "start": "Hi! Send or forward an APK, APKS, APKM, or XAPK file and I'll analyze it automatically. You can also send an APK download link, and I'll try to parse it with HTTP Range by downloading only a small amount of metadata. In groups and channels, you can send an Android package directly, put /apkinfo in the file message or next to the APK link, or reply to a message containing an Android package with /apkinfo. For files larger than 20 MB, use /upload to open the web upload entry.", + "apk_not_found": "I couldn't find a parsable APK, APKS, APKM, XAPK file, or APK link. You can send or forward an Android package file directly, send an APK download link, or put /apkinfo in the same file/link message. If you're replying to analyze, make sure the replied message itself is an Android package file or APK link. In groups, forwarded files may not always include a complete file object for the bot, so I may be unable to retrieve them again from Telegram. In that case, please send the file directly in the group, send an APK download link, or forward it to me in a private chat. If Privacy Mode is enabled in the group, prefer using /apkinfo@bot_username.", + "apk_too_large": "This file exceeds Telegram Bot API's current 20 MB download limit. Use the button below to open the web upload entry and upload it directly to the Worker for analysis.", + "upload_entry": "Open the web upload entry, choose an APK, APKS, APKM, or XAPK file, and it will be parsed directly by the Worker. This bypasses Telegram Bot API's 20 MB file download limit, but Cloudflare Worker request body and memory limits still apply.", + "parse_failed": "Failed to parse Android package: {message}", + "open_full_report": "Open Full Report", + "open_upload_page": "Upload Large File", + "source_channel": "Channel Message", + "source_forwarded": "Forwarded Message", + "source_private": "Private Chat Message", + "source_group": "Group Message", + "source_web_upload": "Web Upload", + "source_link_preview": "Link Preview", + "source_default": "Telegram Message" + }, + "upload": { + "page_title": "Upload Android Package for Analysis", + "heading": "Upload Android Package for Analysis", + "intro": "Upload an APK, APKS, APKM, or XAPK directly to the Worker. This is intended for files larger than Telegram Bot API's 20 MB download limit.", + "file_label": "Android Package File", + "language_label": "Report Language", + "submit": "Analyze", + "busy": "Uploading and analyzing...", + "progress_label": "Upload Progress", + "progress_preparing": "Preparing upload...", + "progress_complete": "Upload complete. Generating report...", + "network_error": "Upload failed. Please check your connection and try again.", + "max_hint": "This entry currently recommends files up to {maxSize}.", + "choose_file": "Choose an .apk, .apks, .apkm, or .xapk file.", + "invalid_file": "Please upload an .apk, .apks, .apkm, or .xapk file.", + "too_large": "The file exceeds the current Worker upload analysis limit: {maxSize}.", + "parse_failed": "Failed to parse Android package: {message}" + }, + "summary": { + "completed": "APK Analysis Complete", + "app_name": "App Name: {appName}", + "package_name": "Package Name: {packageName}", + "version_name": "Version Name: {versionName}", + "version_code": "Version Code: {versionCode}", + "sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", + "permissions_count": "Permissions: {count}", + "native_library_count": "Native Libraries: {count}", + "component_count": "Components: {count}", + "meta_data_count": "Meta-Data: {count}", + "sdk_markers": "SDK Markers: {value}", + "features": "Features: {value}", + "open_report_hint": "Use the button below to open the full report.", + "sdk_summary_native": "Native Libraries {count}", + "sdk_summary_components": "Components {count}" + }, + "report": { + "fallback_title": "APK Report", + "error_title": "Failed to Load Report", + "missing_path": "Missing report path parameter.", + "views": "Views {count}", + "meta_fallback": "APK Analysis Report" + }, + "telegraph": { + "page_title": "{appName} APK Info", + "apk_summary": "APK Summary", + "file_info": "File Info", + "native_libraries": "Native Libraries", + "build_features": "Build Features", + "permissions": "Permissions", + "components": "Components", + "application_meta_data": "Application Meta-Data", + "native_sdk_markers": "Native Library SDK Markers", + "marked_sdks": "Marked SDKs", + "app_icon": "App Icon", + "line_app": "App: {value}", + "line_package_name": "Package Name: {value}", + "line_icon": "Icon: {value}", + "icon_detected": "Detected", + "icon_detected_with_path": "Detected ({path})", + "icon_missing": "Not detected", + "line_version": "Version: {versionName} ({versionCode})", + "line_sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", + "line_stats": "Stats: Permissions {permissions} · Native Libraries {nativeLibraries} · Components {components} · Meta-Data {metaData}", + "line_file_name": "File Name: {value}", + "line_file_size": "File Size: {value}", + "line_message_source": "Message Source: {value}", + "line_analyzed_at": "Analyzed At: {value}", + "report_compacted_notice": "The report exceeded Telegraph's single-page content limit, so a compact version was generated automatically. Stats still use the full APK, while lists only show the first items.", + "no_build_features": "No build features detected.", + "no_native_libraries": "No native libraries found.", + "no_permissions": "No permissions declared.", + "no_component": "No {title} declared.", + "no_application_meta_data": "No application-level meta-data declared.", + "alias_target": "alias -> {target}", + "resource_resolved": "resolved from string resource", + "resource_reference": "resource reference", + "feature_detected": "Detected", + "feature_kotlin": "Kotlin", + "feature_compose": "Compose", + "feature_gradle": "Gradle", + "feature_agp": "Android Gradle Plugin", + "feature_app_metadata_version": "App Metadata Version", + "unknown": "Unknown" + }, + "errors": { + "unknown": "Unknown error", + "telegram_missing_file_path": "Telegram did not return a downloadable file_path", + "telegram_file_download_failed": "Telegram file download failed ({status})", + "telegram_api_request_failed": "Telegram API {method} request failed ({status})", + "telegram_api_result_failed": "Telegram API {method} returned an error", + "telegraph_invalid_path": "Invalid Telegraph page path", + "telegraph_fetch_failed": "Failed to fetch Telegraph page ({status})", + "telegraph_fetch_failed_generic": "Failed to fetch Telegraph page", + "telegraph_api_failed": "Telegraph API {method} request failed ({status})", + "telegraph_api_result_failed": "Telegraph API {method} returned an error" + }, + "webui": { + "title": "LibChecker WebUI", + "subtitle": "APK/APKS/APKM/XAPK Analyzer in Browser", + "modeLabel": "Mode", + "modeAnalyze": "Analyze", + "modeCompare": "Compare", + "themeLabel": "Theme", + "themeDark": "Dark", + "themeLight": "Light", + "themeSystem": "System", + "languageLabel": "Language", + "exportJson": "Export JSON", + "clear": "Clear", + "filePrompt": "Choose or drop", + "fileIdle": "No file selected", + "localNote": "The file is analyzed in this browser.", + "analyze": "Analyze", + "analyzing": "Analyzing", + "progressReady": "Waiting for file", + "progressReading": "Reading file", + "progressParsing": "Parsing manifest, resources, and DEX markers", + "progressDone": "Analysis complete", + "historyTitle": "History", + "historyNote": "Saved in this browser. Click an item to reopen the report.", + "historyEmpty": "No history yet.", + "historyOpen": "Open history item", + "historyOpening": "Opening report...", + "historyDelete": "Delete", + "historyExpand": "Expand History", + "historyCollapse": "Collapse History", + "clearHistory": "Clear History", + "historyItemMeta": "{version} · Target SDK {targetSdk}", + "historyFileMeta": "{file} · {size} · {date}", + "historyVersionName": "Version Name", + "historyVersionCode": "Version Code", + "emptyTitle": "Waiting for file", + "emptyBody": "The report will show summary, SDK markers, components, permissions, signatures, and meta-data.", + "tabSummary": "Summary", + "tabSdk": "SDK", + "tabNative": "Native", + "tabComponents": "Components", + "tabPermissions": "Permissions", + "tabSignatures": "Signatures", + "tabMeta": "Meta-Data", + "tabRaw": "JSON", + "noFile": "Choose an APK, APKS, APKM, XAPK, or LCAPPS file.", + "invalidFile": "Please upload an .apk, .apks, .apkm, .xapk, or .lcapps file.", + "lcappsTitle": "Choose App", + "lcappsSubtitle": "{name} · {count} apps", + "lcappsSearch": "Search apps or package names", + "lcappsLoading": "Reading app list", + "lcappsClose": "Close", + "lcappsReopen": "Reopen app list", + "lcappsReopenWithApp": "Reopen {app} app list", + "lcappsNoMatches": "No matching apps", + "lcappsReadFailed": "Failed to read the .lcapps file.", + "lcappsInvalidZip": "The .lcapps file is not a valid ZIP archive.", + "lcappsUnsupportedZip64": "This browser does not support ZIP64 .lcapps files yet.", + "lcappsMissingJson": "No app JSON was found in the .lcapps file.", + "lcappsInvalidJson": "The app JSON in the .lcapps file could not be parsed.", + "lcappsUnsupportedCompression": "The .lcapps file uses a compression method this browser cannot read.", + "lcappsEmpty": "The .lcapps file does not contain any displayable apps.", + "unsupportedDecompression": "This browser does not support DecompressionStream, so the file cannot be decompressed locally.", + "unknownError": "Unknown error.", + "workerFailed": "Failed to start the analyzer worker.", + "appName": "App Name", + "packageName": "Package Name", + "versionName": "versionName", + "versionCode": "versionCode", + "heroVersionName": "Version Name", + "heroVersionCode": "Version Code", + "targetSdk": "Target SDK", + "minSdk": "Min SDK", + "compileSdk": "Compile SDK", + "fileName": "File Name", + "fileSize": "File Size", + "analyzedAt": "Analyzed At", + "duration": "Duration", + "terminalSystem": "Terminal System", + "permissions": "Permissions", + "nativeLibraries": "Native Libraries", + "components": "Components", + "signatures": "Signatures", + "metaData": "Meta-Data", + "buildFeatures": "Build Features", + "noBuildFeatures": "No build features detected.", + "noNativeLibraries": "No native libraries found.", + "noSdkMarkers": "No SDK markers matched.", + "noComponents": "No components declared.", + "noPermissions": "No permissions declared.", + "noSignatures": "No signature certificates found.", + "noMetaData": "No application-level meta-data declared.", + "summary": "Summary", + "sdkNative": "Native Library SDK Markers", + "sdkComponents": "Component SDK Markers", + "activities": "Activity", + "services": "Service", + "receivers": "Receiver", + "providers": "Provider", + "exported": "exported", + "notExported": "not exported", + "enabled": "enabled", + "disabled": "disabled", + "unknown": "Unknown", + "permission": "Permission", + "process": "Process", + "authorities": "authorities", + "actions": "actions", + "targetActivity": "targetActivity", + "sdk": "SDK", + "abi": "ABI", + "path": "Path", + "size": "Size", + "value": "Value", + "resource": "Resource", + "detectedRule": "Matched Rule", + "ruleDevTeam": "Developer", + "ruleContributors": "Contributors", + "ruleSource": "Source", + "ruleUuid": "UUID", + "signatureSchemes": "Signing Schemes", + "signatureCertificate": "Signature Certificate {index}", + "signatureVersion": "Version", + "signatureSerialNumber": "Serial Number", + "signatureIssuer": "Issuer", + "signatureSubject": "Subject", + "signatureValidFrom": "Valid From", + "signatureValidTo": "Valid To", + "signaturePublicKeyFormat": "Public Key Format", + "signaturePublicKeyAlgorithm": "Public Key Algorithm", + "signaturePublicKeyExponent": "Public Key Exponent", + "signaturePublicKeyModulusSize": "Modulus Size", + "signaturePublicKeyModulus": "Modulus", + "signaturePublicKeyY": "Public Key Y", + "signaturePublicKeyType": "Public Key Type", + "signatureAlgorithmName": "Signature Algorithm", + "signatureAlgorithmOid": "Signature Algorithm OID", + "signatureMd5": "MD5", + "signatureSha1": "SHA1", + "signatureSha256": "SHA256", + "signatureCharString": "CharString", + "signatureSourceEntry": "Source Entry", + "signatureDerLength": "Certificate Size", + "rawNotice": "The JSON view omits large data URIs by default.", + "selectedFile": "{name} · {size}", + "completedIn": "{seconds}s", + "localFile": "Local file", + "archiveDistributionTitle": "Split APK Distribution", + "archiveDistributionSummary": "{count} split APKs · {size}", + "archiveDistributionPercent": "Share", + "archiveAnalyzedEntry": "main", + "compareSlotLeft": "Left File", + "compareSlotRight": "Right File", + "compareSlotNote": "Drop a file, or choose from history.", + "compareDropPrompt": "Click to upload or drop file", + "compareSlotEmpty": "No file selected", + "compareSlotEmptyHint": "Upload a file, or choose one history item.", + "compareSlotReady": "{name} · {size}", + "compareHistoryLabel": "History", + "compareHistoryPlaceholder": "Choose from history", + "compareClearLeft": "Clear left", + "compareClearRight": "Clear right", + "compareSourceHistory": "History", + "compareSourceUpload": "Local upload", + "comparePackageMismatch": "Comparing different package names", + "compareAwaitingPair": "Choose one more file to start comparing.", + "compareChangeCount": "Changed Items", + "compareBasicInfo": "Basic Info", + "compareDifferences": "Differences", + "compareNoDifferences": "No differences found.", + "compareField": "Field", + "compareLeft": "Left", + "compareRight": "Right", + "compareOnlyLeft": "Left Only", + "compareOnlyRight": "Right Only", + "compareAdded": "Added", + "compareDeleted": "Deleted", + "compareChanged": "Changed", + "compareMoved": "Moved", + "compareNoItems": "None", + "compareMoreItems": "{count} more items hidden" + } +} From 44907f1d1b739cf4cb6db6426a49620fa896c42a Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 11:47:10 +0800 Subject: [PATCH 17/70] New translations en.json (Chinese Simplified) [ci skip] --- locales/zh-Hans.json | 486 +++++++++++++++++++++---------------------- 1 file changed, 243 insertions(+), 243 deletions(-) diff --git a/locales/zh-Hans.json b/locales/zh-Hans.json index cf5204b..00b38ab 100644 --- a/locales/zh-Hans.json +++ b/locales/zh-Hans.json @@ -1,220 +1,220 @@ { "locale": { - "nativeName": "English", - "englishName": "English" + "nativeName": "中文简体", + "englishName": "Chinese (Simplified)" }, "commands": { - "start_description": "Show usage instructions", - "apkinfo_description": "Analyze the current or replied APK/APKS/APKM/XAPK file", - "upload_description": "Upload a large Android package for analysis" + "start_description": "显示使用说明", + "apkinfo_description": "解析当前或回复的 APK/APKS/APKM/XAPK 文件", + "upload_description": "上传大型 Android 包解析" }, "bot": { - "start": "Hi! Send or forward an APK, APKS, APKM, or XAPK file and I'll analyze it automatically. You can also send an APK download link, and I'll try to parse it with HTTP Range by downloading only a small amount of metadata. In groups and channels, you can send an Android package directly, put /apkinfo in the file message or next to the APK link, or reply to a message containing an Android package with /apkinfo. For files larger than 20 MB, use /upload to open the web upload entry.", - "apk_not_found": "I couldn't find a parsable APK, APKS, APKM, XAPK file, or APK link. You can send or forward an Android package file directly, send an APK download link, or put /apkinfo in the same file/link message. If you're replying to analyze, make sure the replied message itself is an Android package file or APK link. In groups, forwarded files may not always include a complete file object for the bot, so I may be unable to retrieve them again from Telegram. In that case, please send the file directly in the group, send an APK download link, or forward it to me in a private chat. If Privacy Mode is enabled in the group, prefer using /apkinfo@bot_username.", - "apk_too_large": "This file exceeds Telegram Bot API's current 20 MB download limit. Use the button below to open the web upload entry and upload it directly to the Worker for analysis.", - "upload_entry": "Open the web upload entry, choose an APK, APKS, APKM, or XAPK file, and it will be parsed directly by the Worker. This bypasses Telegram Bot API's 20 MB file download limit, but Cloudflare Worker request body and memory limits still apply.", - "parse_failed": "Failed to parse Android package: {message}", - "open_full_report": "Open Full Report", - "open_upload_page": "Upload Large File", - "source_channel": "Channel Message", - "source_forwarded": "Forwarded Message", - "source_private": "Private Chat Message", - "source_group": "Group Message", - "source_web_upload": "Web Upload", - "source_link_preview": "Link Preview", - "source_default": "Telegram Message" + "start": "你好,我可以帮你解析 APK、APKS、APKM 和 XAPK。\n\n私聊使用\n直接发送或转发 APK、APKS、APKM 或 XAPK 文件,我会自动解析。\n也可以发送 APK 下载链接,我会尝试用 HTTP Range 只下载少量元数据来解析。\n\n群组和频道\n直接发送 Android 包文件,或把 /apkinfo 写在文件消息里、APK 链接旁边。\n也可以回复含 Android 包文件的消息,再发送 /apkinfo。\n\n大文件\n超过 20MB 的文件,可以使用 /upload 打开网页上传入口。", + "apk_not_found": "我没有找到可解析的 APK、APKS、APKM、XAPK 文件或 APK 链接。你可以直接发送或转发 Android 包文件、发送 APK 下载链接,或者把 /apkinfo 写在同一条文件消息或链接消息里;如果是回复解析,也请确认你回复的那条消息本身就是 Android 包文件或 APK 链接。需要注意的是,群组里的转发文件有时不会把文件对象完整发给 bot,这种情况下我无法从 Telegram 重新取回它,建议直接在群里发送文件、发送 APK 下载链接,或私聊 bot 再转发文件。若群组开启了 Privacy Mode,请优先使用 /apkinfo@bot_username。", + "apk_too_large": "这个文件超过 Telegram 官方 Bot API 当前可下载的 20MB 限制。请使用下方按钮打开网页上传入口,直接上传到 Worker 解析。", + "upload_entry": "打开网页上传入口后选择 APK、APKS、APKM 或 XAPK 文件即可解析。这个入口绕过 Telegram Bot API 的 20MB 文件下载限制,但仍会受到 Cloudflare Worker 请求体和内存限制影响。", + "parse_failed": "解析 Android 包失败:{message}", + "open_full_report": "打开完整报告", + "open_upload_page": "上传大文件", + "source_channel": "频道消息", + "source_forwarded": "转发消息", + "source_private": "私聊消息", + "source_group": "群组消息", + "source_web_upload": "网页上传", + "source_link_preview": "链接预览", + "source_default": "Telegram 消息" }, "upload": { - "page_title": "Upload Android Package for Analysis", - "heading": "Upload Android Package for Analysis", - "intro": "Upload an APK, APKS, APKM, or XAPK directly to the Worker. This is intended for files larger than Telegram Bot API's 20 MB download limit.", - "file_label": "Android Package File", - "language_label": "Report Language", - "submit": "Analyze", - "busy": "Uploading and analyzing...", - "progress_label": "Upload Progress", - "progress_preparing": "Preparing upload...", - "progress_complete": "Upload complete. Generating report...", - "network_error": "Upload failed. Please check your connection and try again.", - "max_hint": "This entry currently recommends files up to {maxSize}.", - "choose_file": "Choose an .apk, .apks, .apkm, or .xapk file.", - "invalid_file": "Please upload an .apk, .apks, .apkm, or .xapk file.", - "too_large": "The file exceeds the current Worker upload analysis limit: {maxSize}.", - "parse_failed": "Failed to parse Android package: {message}" + "page_title": "上传 Android 包解析", + "heading": "上传 Android 包解析", + "intro": "直接把 APK、APKS、APKM 或 XAPK 上传到 Worker 解析,适合超过 Telegram Bot API 20MB 下载限制的文件。", + "file_label": "Android 包文件", + "language_label": "报告语言", + "submit": "开始解析", + "busy": "正在上传并解析...", + "progress_label": "上传进度", + "progress_preparing": "准备上传...", + "progress_complete": "上传完成,正在生成报告...", + "network_error": "上传失败,请检查网络后重试。", + "max_hint": "当前入口建议上传不超过 {maxSize} 的文件。", + "choose_file": "请选择 .apk、.apks、.apkm 或 .xapk 文件。", + "invalid_file": "请上传 .apk、.apks、.apkm 或 .xapk 文件。", + "too_large": "文件超过当前 Worker 上传解析上限:{maxSize}。", + "parse_failed": "解析 Android 包失败:{message}" }, "summary": { - "completed": "APK Analysis Complete", - "app_name": "App Name: {appName}", - "package_name": "Package Name: {packageName}", - "version_name": "Version Name: {versionName}", - "version_code": "Version Code: {versionCode}", + "completed": "APK 解析完成", + "app_name": "应用名: {appName}", + "package_name": "包名: {packageName}", + "version_name": "versionName: {versionName}", + "version_code": "versionCode: {versionCode}", "sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", - "permissions_count": "Permissions: {count}", - "native_library_count": "Native Libraries: {count}", - "component_count": "Components: {count}", - "meta_data_count": "Meta-Data: {count}", - "sdk_markers": "SDK Markers: {value}", - "features": "Features: {value}", - "open_report_hint": "Use the button below to open the full report.", - "sdk_summary_native": "Native Libraries {count}", - "sdk_summary_components": "Components {count}" + "permissions_count": "权限数量: {count}", + "native_library_count": "原生库数量: {count}", + "component_count": "组件数量: {count}", + "meta_data_count": "meta-data 数量: {count}", + "sdk_markers": "SDK 标记: {value}", + "features": "特性: {value}", + "open_report_hint": "完整报告请使用下方按钮打开。", + "sdk_summary_native": "原生库 {count}", + "sdk_summary_components": "组件 {count}" }, "report": { - "fallback_title": "APK Report", - "error_title": "Failed to Load Report", - "missing_path": "Missing report path parameter.", - "views": "Views {count}", - "meta_fallback": "APK Analysis Report" + "fallback_title": "APK 报告", + "error_title": "报告加载失败", + "missing_path": "缺少 report path 参数。", + "views": "浏览 {count}", + "meta_fallback": "APK 解析报告" }, "telegraph": { - "page_title": "{appName} APK Info", - "apk_summary": "APK Summary", - "file_info": "File Info", - "native_libraries": "Native Libraries", - "build_features": "Build Features", - "permissions": "Permissions", - "components": "Components", + "page_title": "{appName} APK 信息", + "apk_summary": "APK 摘要", + "file_info": "文件信息", + "native_libraries": "原生库", + "build_features": "构建特性", + "permissions": "权限", + "components": "组件", "application_meta_data": "Application Meta-Data", - "native_sdk_markers": "Native Library SDK Markers", - "marked_sdks": "Marked SDKs", - "app_icon": "App Icon", - "line_app": "App: {value}", - "line_package_name": "Package Name: {value}", - "line_icon": "Icon: {value}", - "icon_detected": "Detected", - "icon_detected_with_path": "Detected ({path})", - "icon_missing": "Not detected", - "line_version": "Version: {versionName} ({versionCode})", + "native_sdk_markers": "原生库 SDK 标记", + "marked_sdks": "已标记的 SDK", + "app_icon": "应用图标", + "line_app": "应用: {value}", + "line_package_name": "包名: {value}", + "line_icon": "图标: {value}", + "icon_detected": "已解析", + "icon_detected_with_path": "已解析 ({path})", + "icon_missing": "未解析到", + "line_version": "版本: {versionName} ({versionCode})", "line_sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", - "line_stats": "Stats: Permissions {permissions} · Native Libraries {nativeLibraries} · Components {components} · Meta-Data {metaData}", - "line_file_name": "File Name: {value}", - "line_file_size": "File Size: {value}", - "line_message_source": "Message Source: {value}", - "line_analyzed_at": "Analyzed At: {value}", - "report_compacted_notice": "The report exceeded Telegraph's single-page content limit, so a compact version was generated automatically. Stats still use the full APK, while lists only show the first items.", - "no_build_features": "No build features detected.", - "no_native_libraries": "No native libraries found.", - "no_permissions": "No permissions declared.", - "no_component": "No {title} declared.", - "no_application_meta_data": "No application-level meta-data declared.", + "line_stats": "统计: 权限 {permissions} · 原生库 {nativeLibraries} · 组件 {components} · meta-data {metaData}", + "line_file_name": "文件名: {value}", + "line_file_size": "文件大小: {value}", + "line_message_source": "消息来源: {value}", + "line_analyzed_at": "分析时间: {value}", + "report_compacted_notice": "报告内容超过 Telegraph 单页限制,已自动切换为精简版:统计仍基于完整 APK,列表仅展示前若干项。", + "no_build_features": "未识别到构建特性。", + "no_native_libraries": "未发现原生库。", + "no_permissions": "未声明权限。", + "no_component": "未声明 {title}。", + "no_application_meta_data": "未声明 application 级 meta-data。", "alias_target": "alias -> {target}", "resource_resolved": "resolved from string resource", "resource_reference": "resource reference", - "feature_detected": "Detected", + "feature_detected": "已检测到", "feature_kotlin": "Kotlin", "feature_compose": "Compose", "feature_gradle": "Gradle", "feature_agp": "Android Gradle Plugin", "feature_app_metadata_version": "App Metadata Version", - "unknown": "Unknown" + "unknown": "未知" }, "errors": { - "unknown": "Unknown error", - "telegram_missing_file_path": "Telegram did not return a downloadable file_path", - "telegram_file_download_failed": "Telegram file download failed ({status})", - "telegram_api_request_failed": "Telegram API {method} request failed ({status})", - "telegram_api_result_failed": "Telegram API {method} returned an error", - "telegraph_invalid_path": "Invalid Telegraph page path", - "telegraph_fetch_failed": "Failed to fetch Telegraph page ({status})", - "telegraph_fetch_failed_generic": "Failed to fetch Telegraph page", - "telegraph_api_failed": "Telegraph API {method} request failed ({status})", - "telegraph_api_result_failed": "Telegraph API {method} returned an error" + "unknown": "未知错误", + "telegram_missing_file_path": "Telegram 没有返回可下载的 file_path", + "telegram_file_download_failed": "Telegram 文件下载失败 ({status})", + "telegram_api_request_failed": "Telegram API {method} 请求失败 ({status})", + "telegram_api_result_failed": "Telegram API {method} 返回失败", + "telegraph_invalid_path": "Telegraph 页面路径无效", + "telegraph_fetch_failed": "Telegraph 页面获取失败 ({status})", + "telegraph_fetch_failed_generic": "Telegraph 页面获取失败", + "telegraph_api_failed": "Telegraph API {method} 请求失败 ({status})", + "telegraph_api_result_failed": "Telegraph API {method} 返回失败" }, "webui": { "title": "LibChecker WebUI", - "subtitle": "APK/APKS/APKM/XAPK Analyzer in Browser", - "modeLabel": "Mode", - "modeAnalyze": "Analyze", - "modeCompare": "Compare", - "themeLabel": "Theme", - "themeDark": "Dark", - "themeLight": "Light", - "themeSystem": "System", - "languageLabel": "Language", - "exportJson": "Export JSON", - "clear": "Clear", - "filePrompt": "Choose or drop", - "fileIdle": "No file selected", - "localNote": "The file is analyzed in this browser.", - "analyze": "Analyze", - "analyzing": "Analyzing", - "progressReady": "Waiting for file", - "progressReading": "Reading file", - "progressParsing": "Parsing manifest, resources, and DEX markers", - "progressDone": "Analysis complete", - "historyTitle": "History", - "historyNote": "Saved in this browser. Click an item to reopen the report.", - "historyEmpty": "No history yet.", - "historyOpen": "Open history item", - "historyOpening": "Opening report...", - "historyDelete": "Delete", - "historyExpand": "Expand History", - "historyCollapse": "Collapse History", - "clearHistory": "Clear History", + "subtitle": "在线分析 APK/APKS/APKM/XAPK", + "modeLabel": "模式", + "modeAnalyze": "分析", + "modeCompare": "对比", + "themeLabel": "主题", + "themeDark": "深色", + "themeLight": "浅色", + "themeSystem": "系统", + "languageLabel": "语言", + "exportJson": "导出 JSON", + "clear": "清空", + "filePrompt": "选择或拖入", + "fileIdle": "未选择文件", + "localNote": "文件只在当前浏览器中解析", + "analyze": "开始分析", + "analyzing": "分析中", + "progressReady": "等待文件", + "progressReading": "读取文件", + "progressParsing": "解析 Manifest、资源与 DEX 标记", + "progressDone": "分析完成", + "historyTitle": "历史记录", + "historyNote": "保存在当前浏览器中,点击记录可重新打开结果", + "historyEmpty": "还没有历史记录", + "historyOpen": "打开历史记录", + "historyOpening": "正在打开报告...", + "historyDelete": "删除", + "historyExpand": "展开历史", + "historyCollapse": "收起历史", + "clearHistory": "清空历史", "historyItemMeta": "{version} · Target SDK {targetSdk}", "historyFileMeta": "{file} · {size} · {date}", - "historyVersionName": "Version Name", - "historyVersionCode": "Version Code", - "emptyTitle": "Waiting for file", - "emptyBody": "The report will show summary, SDK markers, components, permissions, signatures, and meta-data.", - "tabSummary": "Summary", + "historyVersionName": "版本名称", + "historyVersionCode": "版本号", + "emptyTitle": "等待文件", + "emptyBody": "分析完成后会在这里展示摘要、SDK 标记、组件、权限、签名和元数据", + "tabSummary": "摘要", "tabSdk": "SDK", - "tabNative": "Native", - "tabComponents": "Components", - "tabPermissions": "Permissions", - "tabSignatures": "Signatures", - "tabMeta": "Meta-Data", + "tabNative": "原生库", + "tabComponents": "组件", + "tabPermissions": "权限", + "tabSignatures": "签名", + "tabMeta": "元数据", "tabRaw": "JSON", - "noFile": "Choose an APK, APKS, APKM, XAPK, or LCAPPS file.", - "invalidFile": "Please upload an .apk, .apks, .apkm, .xapk, or .lcapps file.", - "lcappsTitle": "Choose App", - "lcappsSubtitle": "{name} · {count} apps", - "lcappsSearch": "Search apps or package names", - "lcappsLoading": "Reading app list", - "lcappsClose": "Close", - "lcappsReopen": "Reopen app list", - "lcappsReopenWithApp": "Reopen {app} app list", - "lcappsNoMatches": "No matching apps", - "lcappsReadFailed": "Failed to read the .lcapps file.", - "lcappsInvalidZip": "The .lcapps file is not a valid ZIP archive.", - "lcappsUnsupportedZip64": "This browser does not support ZIP64 .lcapps files yet.", - "lcappsMissingJson": "No app JSON was found in the .lcapps file.", - "lcappsInvalidJson": "The app JSON in the .lcapps file could not be parsed.", - "lcappsUnsupportedCompression": "The .lcapps file uses a compression method this browser cannot read.", - "lcappsEmpty": "The .lcapps file does not contain any displayable apps.", - "unsupportedDecompression": "This browser does not support DecompressionStream, so the file cannot be decompressed locally.", - "unknownError": "Unknown error.", - "workerFailed": "Failed to start the analyzer worker.", - "appName": "App Name", - "packageName": "Package Name", + "noFile": "请选择 APK、APKS、APKM、XAPK 或 LCAPPS 文件", + "invalidFile": "请上传 .apk、.apks、.apkm、.xapk 或 .lcapps 文件", + "lcappsTitle": "选择应用", + "lcappsSubtitle": "{name} · {count} 个应用", + "lcappsSearch": "搜索应用或包名", + "lcappsLoading": "正在读取应用列表", + "lcappsClose": "关闭", + "lcappsReopen": "重新打开应用列表", + "lcappsReopenWithApp": "重新打开 {app} 的应用列表", + "lcappsNoMatches": "没有匹配的应用", + "lcappsReadFailed": "读取 .lcapps 文件失败", + "lcappsInvalidZip": ".lcapps 文件不是有效的 ZIP 压缩包", + "lcappsUnsupportedZip64": "当前浏览器暂不支持 ZIP64 格式的 .lcapps 文件", + "lcappsMissingJson": ".lcapps 文件中没有找到应用 JSON", + "lcappsInvalidJson": ".lcapps 文件中的应用 JSON 无法解析", + "lcappsUnsupportedCompression": ".lcapps 文件包含当前浏览器不支持的压缩方式", + "lcappsEmpty": ".lcapps 文件中没有可展示的应用", + "unsupportedDecompression": "当前浏览器不支持 DecompressionStream,无法在本地解压文件", + "unknownError": "未知错误", + "workerFailed": "分析进程启动失败", + "appName": "应用名", + "packageName": "包名", "versionName": "versionName", "versionCode": "versionCode", - "heroVersionName": "Version Name", - "heroVersionCode": "Version Code", + "heroVersionName": "版本名称", + "heroVersionCode": "版本号", "targetSdk": "Target SDK", "minSdk": "Min SDK", "compileSdk": "Compile SDK", - "fileName": "File Name", - "fileSize": "File Size", - "analyzedAt": "Analyzed At", - "duration": "Duration", - "terminalSystem": "Terminal System", - "permissions": "Permissions", - "nativeLibraries": "Native Libraries", - "components": "Components", - "signatures": "Signatures", - "metaData": "Meta-Data", - "buildFeatures": "Build Features", - "noBuildFeatures": "No build features detected.", - "noNativeLibraries": "No native libraries found.", - "noSdkMarkers": "No SDK markers matched.", - "noComponents": "No components declared.", - "noPermissions": "No permissions declared.", - "noSignatures": "No signature certificates found.", - "noMetaData": "No application-level meta-data declared.", - "summary": "Summary", - "sdkNative": "Native Library SDK Markers", - "sdkComponents": "Component SDK Markers", + "fileName": "文件名", + "fileSize": "文件大小", + "analyzedAt": "分析时间", + "duration": "耗时", + "terminalSystem": "终端系统", + "permissions": "权限", + "nativeLibraries": "原生库", + "components": "组件", + "signatures": "签名", + "metaData": "元数据", + "buildFeatures": "构建特性", + "noBuildFeatures": "未识别到构建特性", + "noNativeLibraries": "未发现原生库", + "noSdkMarkers": "未匹配到 SDK 标记", + "noComponents": "未声明组件", + "noPermissions": "未声明权限", + "noSignatures": "未发现签名证书", + "noMetaData": "未声明 application 级元数据", + "summary": "摘要", + "sdkNative": "原生库 SDK 标记", + "sdkComponents": "组件 SDK 标记", "activities": "Activity", "services": "Service", "receivers": "Receiver", @@ -223,83 +223,83 @@ "notExported": "not exported", "enabled": "enabled", "disabled": "disabled", - "unknown": "Unknown", - "permission": "Permission", - "process": "Process", + "unknown": "未知", + "permission": "权限", + "process": "进程", "authorities": "authorities", "actions": "actions", "targetActivity": "targetActivity", "sdk": "SDK", "abi": "ABI", - "path": "Path", - "size": "Size", - "value": "Value", - "resource": "Resource", - "detectedRule": "Matched Rule", - "ruleDevTeam": "Developer", - "ruleContributors": "Contributors", - "ruleSource": "Source", + "path": "路径", + "size": "大小", + "value": "值", + "resource": "资源", + "detectedRule": "标记规则", + "ruleDevTeam": "开发团队", + "ruleContributors": "贡献者", + "ruleSource": "来源", "ruleUuid": "UUID", - "signatureSchemes": "Signing Schemes", - "signatureCertificate": "Signature Certificate {index}", - "signatureVersion": "Version", - "signatureSerialNumber": "Serial Number", - "signatureIssuer": "Issuer", - "signatureSubject": "Subject", - "signatureValidFrom": "Valid From", - "signatureValidTo": "Valid To", - "signaturePublicKeyFormat": "Public Key Format", - "signaturePublicKeyAlgorithm": "Public Key Algorithm", - "signaturePublicKeyExponent": "Public Key Exponent", - "signaturePublicKeyModulusSize": "Modulus Size", - "signaturePublicKeyModulus": "Modulus", - "signaturePublicKeyY": "Public Key Y", - "signaturePublicKeyType": "Public Key Type", - "signatureAlgorithmName": "Signature Algorithm", - "signatureAlgorithmOid": "Signature Algorithm OID", + "signatureSchemes": "签名方案", + "signatureCertificate": "签名证书 {index}", + "signatureVersion": "版本", + "signatureSerialNumber": "序列号", + "signatureIssuer": "发行人", + "signatureSubject": "主题", + "signatureValidFrom": "有效期始", + "signatureValidTo": "有效期至", + "signaturePublicKeyFormat": "公钥格式", + "signaturePublicKeyAlgorithm": "公钥算法", + "signaturePublicKeyExponent": "公钥指数", + "signaturePublicKeyModulusSize": "模数大小", + "signaturePublicKeyModulus": "模数", + "signaturePublicKeyY": "公钥值Y", + "signaturePublicKeyType": "公钥类型", + "signatureAlgorithmName": "签名算法", + "signatureAlgorithmOid": "签名算法 OID", "signatureMd5": "MD5", "signatureSha1": "SHA1", "signatureSha256": "SHA256", "signatureCharString": "CharString", - "signatureSourceEntry": "Source Entry", - "signatureDerLength": "Certificate Size", - "rawNotice": "The JSON view omits large data URIs by default.", + "signatureSourceEntry": "来源条目", + "signatureDerLength": "证书大小", + "rawNotice": "JSON 视图默认省略较大的 data URI", "selectedFile": "{name} · {size}", "completedIn": "{seconds}s", - "localFile": "Local file", - "archiveDistributionTitle": "Split APK Distribution", - "archiveDistributionSummary": "{count} split APKs · {size}", - "archiveDistributionPercent": "Share", - "archiveAnalyzedEntry": "main", - "compareSlotLeft": "Left File", - "compareSlotRight": "Right File", - "compareSlotNote": "Drop a file, or choose from history.", - "compareDropPrompt": "Click to upload or drop file", - "compareSlotEmpty": "No file selected", - "compareSlotEmptyHint": "Upload a file, or choose one history item.", + "localFile": "本地文件", + "archiveDistributionTitle": "子 APK 分布", + "archiveDistributionSummary": "{count} 个子 APK · {size}", + "archiveDistributionPercent": "占比", + "archiveAnalyzedEntry": "主包", + "compareSlotLeft": "左侧文件", + "compareSlotRight": "右侧文件", + "compareSlotNote": "拖入文件,或从历史记录选择", + "compareDropPrompt": "点击上传或拖入文件", + "compareSlotEmpty": "未选择文件", + "compareSlotEmptyHint": "上传一个文件,或选择一条历史记录", "compareSlotReady": "{name} · {size}", - "compareHistoryLabel": "History", - "compareHistoryPlaceholder": "Choose from history", - "compareClearLeft": "Clear left", - "compareClearRight": "Clear right", - "compareSourceHistory": "History", - "compareSourceUpload": "Local upload", - "comparePackageMismatch": "Comparing different package names", - "compareAwaitingPair": "Choose one more file to start comparing.", - "compareChangeCount": "Changed Items", - "compareBasicInfo": "Basic Info", - "compareDifferences": "Differences", - "compareNoDifferences": "No differences found.", - "compareField": "Field", - "compareLeft": "Left", - "compareRight": "Right", - "compareOnlyLeft": "Left Only", - "compareOnlyRight": "Right Only", - "compareAdded": "Added", - "compareDeleted": "Deleted", - "compareChanged": "Changed", - "compareMoved": "Moved", - "compareNoItems": "None", - "compareMoreItems": "{count} more items hidden" + "compareHistoryLabel": "历史记录", + "compareHistoryPlaceholder": "选择历史记录", + "compareClearLeft": "清空左侧", + "compareClearRight": "清空右侧", + "compareSourceHistory": "历史记录", + "compareSourceUpload": "本地上传", + "comparePackageMismatch": "包名不同的对比", + "compareAwaitingPair": "再选择一个文件后开始对比", + "compareChangeCount": "差异项", + "compareBasicInfo": "基础信息", + "compareDifferences": "差异明细", + "compareNoDifferences": "未发现差异", + "compareField": "字段", + "compareLeft": "左侧", + "compareRight": "右侧", + "compareOnlyLeft": "仅左侧", + "compareOnlyRight": "仅右侧", + "compareAdded": "新增", + "compareDeleted": "删除", + "compareChanged": "改变", + "compareMoved": "移动", + "compareNoItems": "无", + "compareMoreItems": "还有 {count} 项未展示" } } From 2143419dd17f0e3cb7724d687816dc21bc04744b Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 12:12:46 +0800 Subject: [PATCH 18/70] New translations en.json (Japanese) [ci skip] --- locales/ja_JP.json | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/locales/ja_JP.json b/locales/ja_JP.json index cf5204b..2858641 100644 --- a/locales/ja_JP.json +++ b/locales/ja_JP.json @@ -121,7 +121,6 @@ "telegraph_api_result_failed": "Telegraph API {method} returned an error" }, "webui": { - "title": "LibChecker WebUI", "subtitle": "APK/APKS/APKM/XAPK Analyzer in Browser", "modeLabel": "Mode", "modeAnalyze": "Analyze", @@ -151,20 +150,16 @@ "historyExpand": "Expand History", "historyCollapse": "Collapse History", "clearHistory": "Clear History", - "historyItemMeta": "{version} · Target SDK {targetSdk}", - "historyFileMeta": "{file} · {size} · {date}", "historyVersionName": "Version Name", "historyVersionCode": "Version Code", "emptyTitle": "Waiting for file", "emptyBody": "The report will show summary, SDK markers, components, permissions, signatures, and meta-data.", "tabSummary": "Summary", - "tabSdk": "SDK", "tabNative": "Native", "tabComponents": "Components", "tabPermissions": "Permissions", "tabSignatures": "Signatures", "tabMeta": "Meta-Data", - "tabRaw": "JSON", "noFile": "Choose an APK, APKS, APKM, XAPK, or LCAPPS file.", "invalidFile": "Please upload an .apk, .apks, .apkm, .xapk, or .lcapps file.", "lcappsTitle": "Choose App", @@ -187,13 +182,8 @@ "workerFailed": "Failed to start the analyzer worker.", "appName": "App Name", "packageName": "Package Name", - "versionName": "versionName", - "versionCode": "versionCode", "heroVersionName": "Version Name", "heroVersionCode": "Version Code", - "targetSdk": "Target SDK", - "minSdk": "Min SDK", - "compileSdk": "Compile SDK", "fileName": "File Name", "fileSize": "File Size", "analyzedAt": "Analyzed At", @@ -215,22 +205,9 @@ "summary": "Summary", "sdkNative": "Native Library SDK Markers", "sdkComponents": "Component SDK Markers", - "activities": "Activity", - "services": "Service", - "receivers": "Receiver", - "providers": "Provider", - "exported": "exported", - "notExported": "not exported", - "enabled": "enabled", - "disabled": "disabled", "unknown": "Unknown", "permission": "Permission", "process": "Process", - "authorities": "authorities", - "actions": "actions", - "targetActivity": "targetActivity", - "sdk": "SDK", - "abi": "ABI", "path": "Path", "size": "Size", "value": "Value", @@ -239,7 +216,6 @@ "ruleDevTeam": "Developer", "ruleContributors": "Contributors", "ruleSource": "Source", - "ruleUuid": "UUID", "signatureSchemes": "Signing Schemes", "signatureCertificate": "Signature Certificate {index}", "signatureVersion": "Version", @@ -257,15 +233,9 @@ "signaturePublicKeyType": "Public Key Type", "signatureAlgorithmName": "Signature Algorithm", "signatureAlgorithmOid": "Signature Algorithm OID", - "signatureMd5": "MD5", - "signatureSha1": "SHA1", - "signatureSha256": "SHA256", - "signatureCharString": "CharString", "signatureSourceEntry": "Source Entry", "signatureDerLength": "Certificate Size", "rawNotice": "The JSON view omits large data URIs by default.", - "selectedFile": "{name} · {size}", - "completedIn": "{seconds}s", "localFile": "Local file", "archiveDistributionTitle": "Split APK Distribution", "archiveDistributionSummary": "{count} split APKs · {size}", @@ -277,7 +247,6 @@ "compareDropPrompt": "Click to upload or drop file", "compareSlotEmpty": "No file selected", "compareSlotEmptyHint": "Upload a file, or choose one history item.", - "compareSlotReady": "{name} · {size}", "compareHistoryLabel": "History", "compareHistoryPlaceholder": "Choose from history", "compareClearLeft": "Clear left", From 28cebb9fcb7f5a706c99600ab4fb6cbc0943305a Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 12:12:47 +0800 Subject: [PATCH 19/70] New translations en.json (Korean) [ci skip] --- locales/ko_KR.json | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/locales/ko_KR.json b/locales/ko_KR.json index cf5204b..2858641 100644 --- a/locales/ko_KR.json +++ b/locales/ko_KR.json @@ -121,7 +121,6 @@ "telegraph_api_result_failed": "Telegraph API {method} returned an error" }, "webui": { - "title": "LibChecker WebUI", "subtitle": "APK/APKS/APKM/XAPK Analyzer in Browser", "modeLabel": "Mode", "modeAnalyze": "Analyze", @@ -151,20 +150,16 @@ "historyExpand": "Expand History", "historyCollapse": "Collapse History", "clearHistory": "Clear History", - "historyItemMeta": "{version} · Target SDK {targetSdk}", - "historyFileMeta": "{file} · {size} · {date}", "historyVersionName": "Version Name", "historyVersionCode": "Version Code", "emptyTitle": "Waiting for file", "emptyBody": "The report will show summary, SDK markers, components, permissions, signatures, and meta-data.", "tabSummary": "Summary", - "tabSdk": "SDK", "tabNative": "Native", "tabComponents": "Components", "tabPermissions": "Permissions", "tabSignatures": "Signatures", "tabMeta": "Meta-Data", - "tabRaw": "JSON", "noFile": "Choose an APK, APKS, APKM, XAPK, or LCAPPS file.", "invalidFile": "Please upload an .apk, .apks, .apkm, .xapk, or .lcapps file.", "lcappsTitle": "Choose App", @@ -187,13 +182,8 @@ "workerFailed": "Failed to start the analyzer worker.", "appName": "App Name", "packageName": "Package Name", - "versionName": "versionName", - "versionCode": "versionCode", "heroVersionName": "Version Name", "heroVersionCode": "Version Code", - "targetSdk": "Target SDK", - "minSdk": "Min SDK", - "compileSdk": "Compile SDK", "fileName": "File Name", "fileSize": "File Size", "analyzedAt": "Analyzed At", @@ -215,22 +205,9 @@ "summary": "Summary", "sdkNative": "Native Library SDK Markers", "sdkComponents": "Component SDK Markers", - "activities": "Activity", - "services": "Service", - "receivers": "Receiver", - "providers": "Provider", - "exported": "exported", - "notExported": "not exported", - "enabled": "enabled", - "disabled": "disabled", "unknown": "Unknown", "permission": "Permission", "process": "Process", - "authorities": "authorities", - "actions": "actions", - "targetActivity": "targetActivity", - "sdk": "SDK", - "abi": "ABI", "path": "Path", "size": "Size", "value": "Value", @@ -239,7 +216,6 @@ "ruleDevTeam": "Developer", "ruleContributors": "Contributors", "ruleSource": "Source", - "ruleUuid": "UUID", "signatureSchemes": "Signing Schemes", "signatureCertificate": "Signature Certificate {index}", "signatureVersion": "Version", @@ -257,15 +233,9 @@ "signaturePublicKeyType": "Public Key Type", "signatureAlgorithmName": "Signature Algorithm", "signatureAlgorithmOid": "Signature Algorithm OID", - "signatureMd5": "MD5", - "signatureSha1": "SHA1", - "signatureSha256": "SHA256", - "signatureCharString": "CharString", "signatureSourceEntry": "Source Entry", "signatureDerLength": "Certificate Size", "rawNotice": "The JSON view omits large data URIs by default.", - "selectedFile": "{name} · {size}", - "completedIn": "{seconds}s", "localFile": "Local file", "archiveDistributionTitle": "Split APK Distribution", "archiveDistributionSummary": "{count} split APKs · {size}", @@ -277,7 +247,6 @@ "compareDropPrompt": "Click to upload or drop file", "compareSlotEmpty": "No file selected", "compareSlotEmptyHint": "Upload a file, or choose one history item.", - "compareSlotReady": "{name} · {size}", "compareHistoryLabel": "History", "compareHistoryPlaceholder": "Choose from history", "compareClearLeft": "Clear left", From 60f4c71b51d01deda10ddf1ff3dfbfef90431636 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 12:12:49 +0800 Subject: [PATCH 20/70] New translations en.json (Chinese Simplified) [ci skip] --- locales/zh-Hans.json | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/locales/zh-Hans.json b/locales/zh-Hans.json index 00b38ab..8ec211d 100644 --- a/locales/zh-Hans.json +++ b/locales/zh-Hans.json @@ -121,7 +121,6 @@ "telegraph_api_result_failed": "Telegraph API {method} 返回失败" }, "webui": { - "title": "LibChecker WebUI", "subtitle": "在线分析 APK/APKS/APKM/XAPK", "modeLabel": "模式", "modeAnalyze": "分析", @@ -151,20 +150,16 @@ "historyExpand": "展开历史", "historyCollapse": "收起历史", "clearHistory": "清空历史", - "historyItemMeta": "{version} · Target SDK {targetSdk}", - "historyFileMeta": "{file} · {size} · {date}", "historyVersionName": "版本名称", "historyVersionCode": "版本号", "emptyTitle": "等待文件", "emptyBody": "分析完成后会在这里展示摘要、SDK 标记、组件、权限、签名和元数据", "tabSummary": "摘要", - "tabSdk": "SDK", "tabNative": "原生库", "tabComponents": "组件", "tabPermissions": "权限", "tabSignatures": "签名", "tabMeta": "元数据", - "tabRaw": "JSON", "noFile": "请选择 APK、APKS、APKM、XAPK 或 LCAPPS 文件", "invalidFile": "请上传 .apk、.apks、.apkm、.xapk 或 .lcapps 文件", "lcappsTitle": "选择应用", @@ -187,13 +182,8 @@ "workerFailed": "分析进程启动失败", "appName": "应用名", "packageName": "包名", - "versionName": "versionName", - "versionCode": "versionCode", "heroVersionName": "版本名称", "heroVersionCode": "版本号", - "targetSdk": "Target SDK", - "minSdk": "Min SDK", - "compileSdk": "Compile SDK", "fileName": "文件名", "fileSize": "文件大小", "analyzedAt": "分析时间", @@ -215,22 +205,9 @@ "summary": "摘要", "sdkNative": "原生库 SDK 标记", "sdkComponents": "组件 SDK 标记", - "activities": "Activity", - "services": "Service", - "receivers": "Receiver", - "providers": "Provider", - "exported": "exported", - "notExported": "not exported", - "enabled": "enabled", - "disabled": "disabled", "unknown": "未知", "permission": "权限", "process": "进程", - "authorities": "authorities", - "actions": "actions", - "targetActivity": "targetActivity", - "sdk": "SDK", - "abi": "ABI", "path": "路径", "size": "大小", "value": "值", @@ -239,7 +216,6 @@ "ruleDevTeam": "开发团队", "ruleContributors": "贡献者", "ruleSource": "来源", - "ruleUuid": "UUID", "signatureSchemes": "签名方案", "signatureCertificate": "签名证书 {index}", "signatureVersion": "版本", @@ -257,15 +233,9 @@ "signaturePublicKeyType": "公钥类型", "signatureAlgorithmName": "签名算法", "signatureAlgorithmOid": "签名算法 OID", - "signatureMd5": "MD5", - "signatureSha1": "SHA1", - "signatureSha256": "SHA256", - "signatureCharString": "CharString", "signatureSourceEntry": "来源条目", "signatureDerLength": "证书大小", "rawNotice": "JSON 视图默认省略较大的 data URI", - "selectedFile": "{name} · {size}", - "completedIn": "{seconds}s", "localFile": "本地文件", "archiveDistributionTitle": "子 APK 分布", "archiveDistributionSummary": "{count} 个子 APK · {size}", @@ -277,7 +247,6 @@ "compareDropPrompt": "点击上传或拖入文件", "compareSlotEmpty": "未选择文件", "compareSlotEmptyHint": "上传一个文件,或选择一条历史记录", - "compareSlotReady": "{name} · {size}", "compareHistoryLabel": "历史记录", "compareHistoryPlaceholder": "选择历史记录", "compareClearLeft": "清空左侧", From 7a8686b9747be12ae76a1ca5ad4918266256cac5 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 12:12:50 +0800 Subject: [PATCH 21/70] New translations en.json (Chinese Traditional) [ci skip] --- locales/zh-Hant.json | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/locales/zh-Hant.json b/locales/zh-Hant.json index cf5204b..2858641 100644 --- a/locales/zh-Hant.json +++ b/locales/zh-Hant.json @@ -121,7 +121,6 @@ "telegraph_api_result_failed": "Telegraph API {method} returned an error" }, "webui": { - "title": "LibChecker WebUI", "subtitle": "APK/APKS/APKM/XAPK Analyzer in Browser", "modeLabel": "Mode", "modeAnalyze": "Analyze", @@ -151,20 +150,16 @@ "historyExpand": "Expand History", "historyCollapse": "Collapse History", "clearHistory": "Clear History", - "historyItemMeta": "{version} · Target SDK {targetSdk}", - "historyFileMeta": "{file} · {size} · {date}", "historyVersionName": "Version Name", "historyVersionCode": "Version Code", "emptyTitle": "Waiting for file", "emptyBody": "The report will show summary, SDK markers, components, permissions, signatures, and meta-data.", "tabSummary": "Summary", - "tabSdk": "SDK", "tabNative": "Native", "tabComponents": "Components", "tabPermissions": "Permissions", "tabSignatures": "Signatures", "tabMeta": "Meta-Data", - "tabRaw": "JSON", "noFile": "Choose an APK, APKS, APKM, XAPK, or LCAPPS file.", "invalidFile": "Please upload an .apk, .apks, .apkm, .xapk, or .lcapps file.", "lcappsTitle": "Choose App", @@ -187,13 +182,8 @@ "workerFailed": "Failed to start the analyzer worker.", "appName": "App Name", "packageName": "Package Name", - "versionName": "versionName", - "versionCode": "versionCode", "heroVersionName": "Version Name", "heroVersionCode": "Version Code", - "targetSdk": "Target SDK", - "minSdk": "Min SDK", - "compileSdk": "Compile SDK", "fileName": "File Name", "fileSize": "File Size", "analyzedAt": "Analyzed At", @@ -215,22 +205,9 @@ "summary": "Summary", "sdkNative": "Native Library SDK Markers", "sdkComponents": "Component SDK Markers", - "activities": "Activity", - "services": "Service", - "receivers": "Receiver", - "providers": "Provider", - "exported": "exported", - "notExported": "not exported", - "enabled": "enabled", - "disabled": "disabled", "unknown": "Unknown", "permission": "Permission", "process": "Process", - "authorities": "authorities", - "actions": "actions", - "targetActivity": "targetActivity", - "sdk": "SDK", - "abi": "ABI", "path": "Path", "size": "Size", "value": "Value", @@ -239,7 +216,6 @@ "ruleDevTeam": "Developer", "ruleContributors": "Contributors", "ruleSource": "Source", - "ruleUuid": "UUID", "signatureSchemes": "Signing Schemes", "signatureCertificate": "Signature Certificate {index}", "signatureVersion": "Version", @@ -257,15 +233,9 @@ "signaturePublicKeyType": "Public Key Type", "signatureAlgorithmName": "Signature Algorithm", "signatureAlgorithmOid": "Signature Algorithm OID", - "signatureMd5": "MD5", - "signatureSha1": "SHA1", - "signatureSha256": "SHA256", - "signatureCharString": "CharString", "signatureSourceEntry": "Source Entry", "signatureDerLength": "Certificate Size", "rawNotice": "The JSON view omits large data URIs by default.", - "selectedFile": "{name} · {size}", - "completedIn": "{seconds}s", "localFile": "Local file", "archiveDistributionTitle": "Split APK Distribution", "archiveDistributionSummary": "{count} split APKs · {size}", @@ -277,7 +247,6 @@ "compareDropPrompt": "Click to upload or drop file", "compareSlotEmpty": "No file selected", "compareSlotEmptyHint": "Upload a file, or choose one history item.", - "compareSlotReady": "{name} · {size}", "compareHistoryLabel": "History", "compareHistoryPlaceholder": "Choose from history", "compareClearLeft": "Clear left", From b94acd5b39b2a17c4b550985f6132dc6cb42798d Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 15:33:49 +0800 Subject: [PATCH 22/70] New translations en.json (Japanese) [ci skip] --- locales/ja_JP.json | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/locales/ja_JP.json b/locales/ja_JP.json index 2858641..3bd598e 100644 --- a/locales/ja_JP.json +++ b/locales/ja_JP.json @@ -134,10 +134,28 @@ "clear": "Clear", "filePrompt": "Choose or drop", "fileIdle": "No file selected", - "localNote": "The file is analyzed in this browser.", + "localNote": "Files stay local. Links are fetched server-side.", + "linkPrompt": "Or type a download link", + "linkInputLabel": "Download link", + "linkPlaceholder": "https://example.com/app.apk", + "linkAnalyze": "Analyze link", + "linkNote": "Range metadata is used when the server supports it.", + "linkIdle": "HTTP/HTTPS", + "linkReady": "Ready", + "linkFetching": "Fetching", + "linkDone": "Done", + "linkFailed": "Failed", + "runtimeLogOpen": "Show logs", + "runtimeLogTitle": "Runtime logs", + "runtimeLogSubtitle": "Current page session only.", + "runtimeLogExport": "Export logs", + "runtimeLogClose": "Close logs", + "runtimeLogEmpty": "No logs yet.", + "runtimeLogVersionLabel": "WebUI version {version}", "analyze": "Analyze", "analyzing": "Analyzing", "progressReady": "Waiting for file", + "progressDownloading": "Fetching APK metadata", "progressReading": "Reading file", "progressParsing": "Parsing manifest, resources, and DEX markers", "progressDone": "Analysis complete", @@ -162,6 +180,7 @@ "tabMeta": "Meta-Data", "noFile": "Choose an APK, APKS, APKM, XAPK, or LCAPPS file.", "invalidFile": "Please upload an .apk, .apks, .apkm, .xapk, or .lcapps file.", + "invalidLink": "Enter an HTTP/HTTPS APK download link.", "lcappsTitle": "Choose App", "lcappsSubtitle": "{name} · {count} apps", "lcappsSearch": "Search apps or package names", From 6f90095686bdf5194756dcda54ef77f1b6f9b25f Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 15:33:51 +0800 Subject: [PATCH 23/70] New translations en.json (Korean) [ci skip] --- locales/ko_KR.json | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/locales/ko_KR.json b/locales/ko_KR.json index 2858641..3bd598e 100644 --- a/locales/ko_KR.json +++ b/locales/ko_KR.json @@ -134,10 +134,28 @@ "clear": "Clear", "filePrompt": "Choose or drop", "fileIdle": "No file selected", - "localNote": "The file is analyzed in this browser.", + "localNote": "Files stay local. Links are fetched server-side.", + "linkPrompt": "Or type a download link", + "linkInputLabel": "Download link", + "linkPlaceholder": "https://example.com/app.apk", + "linkAnalyze": "Analyze link", + "linkNote": "Range metadata is used when the server supports it.", + "linkIdle": "HTTP/HTTPS", + "linkReady": "Ready", + "linkFetching": "Fetching", + "linkDone": "Done", + "linkFailed": "Failed", + "runtimeLogOpen": "Show logs", + "runtimeLogTitle": "Runtime logs", + "runtimeLogSubtitle": "Current page session only.", + "runtimeLogExport": "Export logs", + "runtimeLogClose": "Close logs", + "runtimeLogEmpty": "No logs yet.", + "runtimeLogVersionLabel": "WebUI version {version}", "analyze": "Analyze", "analyzing": "Analyzing", "progressReady": "Waiting for file", + "progressDownloading": "Fetching APK metadata", "progressReading": "Reading file", "progressParsing": "Parsing manifest, resources, and DEX markers", "progressDone": "Analysis complete", @@ -162,6 +180,7 @@ "tabMeta": "Meta-Data", "noFile": "Choose an APK, APKS, APKM, XAPK, or LCAPPS file.", "invalidFile": "Please upload an .apk, .apks, .apkm, .xapk, or .lcapps file.", + "invalidLink": "Enter an HTTP/HTTPS APK download link.", "lcappsTitle": "Choose App", "lcappsSubtitle": "{name} · {count} apps", "lcappsSearch": "Search apps or package names", From 0ed3218d019e48129e6c65402486026fe04a4f70 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 15:33:52 +0800 Subject: [PATCH 24/70] New translations en.json (Chinese Simplified) [ci skip] --- locales/zh-Hans.json | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/locales/zh-Hans.json b/locales/zh-Hans.json index 8ec211d..74cbb0f 100644 --- a/locales/zh-Hans.json +++ b/locales/zh-Hans.json @@ -134,10 +134,28 @@ "clear": "清空", "filePrompt": "选择或拖入", "fileIdle": "未选择文件", - "localNote": "文件只在当前浏览器中解析", + "localNote": "文件本地解析,链接由服务端获取", + "linkPrompt": "或键入下载链接", + "linkInputLabel": "下载链接", + "linkPlaceholder": "https://example.com/app.apk", + "linkAnalyze": "解析链接", + "linkNote": "服务器支持时会使用 Range 元数据解析", + "linkIdle": "HTTP/HTTPS", + "linkReady": "已就绪", + "linkFetching": "获取中", + "linkDone": "完成", + "linkFailed": "失败", + "runtimeLogOpen": "显示日志", + "runtimeLogTitle": "运行日志", + "runtimeLogSubtitle": "仅保留当前页面会话", + "runtimeLogExport": "导出日志", + "runtimeLogClose": "关闭日志", + "runtimeLogEmpty": "暂无日志", + "runtimeLogVersionLabel": "WebUI 版本 {version}", "analyze": "开始分析", "analyzing": "分析中", "progressReady": "等待文件", + "progressDownloading": "获取 APK 元数据", "progressReading": "读取文件", "progressParsing": "解析 Manifest、资源与 DEX 标记", "progressDone": "分析完成", @@ -162,6 +180,7 @@ "tabMeta": "元数据", "noFile": "请选择 APK、APKS、APKM、XAPK 或 LCAPPS 文件", "invalidFile": "请上传 .apk、.apks、.apkm、.xapk 或 .lcapps 文件", + "invalidLink": "请输入 HTTP/HTTPS APK 下载链接", "lcappsTitle": "选择应用", "lcappsSubtitle": "{name} · {count} 个应用", "lcappsSearch": "搜索应用或包名", From 0137cd60683adbf3065bb278a1651a9accdd2a78 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 15:33:53 +0800 Subject: [PATCH 25/70] New translations en.json (Chinese Traditional) [ci skip] --- locales/zh-Hant.json | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/locales/zh-Hant.json b/locales/zh-Hant.json index 2858641..3bd598e 100644 --- a/locales/zh-Hant.json +++ b/locales/zh-Hant.json @@ -134,10 +134,28 @@ "clear": "Clear", "filePrompt": "Choose or drop", "fileIdle": "No file selected", - "localNote": "The file is analyzed in this browser.", + "localNote": "Files stay local. Links are fetched server-side.", + "linkPrompt": "Or type a download link", + "linkInputLabel": "Download link", + "linkPlaceholder": "https://example.com/app.apk", + "linkAnalyze": "Analyze link", + "linkNote": "Range metadata is used when the server supports it.", + "linkIdle": "HTTP/HTTPS", + "linkReady": "Ready", + "linkFetching": "Fetching", + "linkDone": "Done", + "linkFailed": "Failed", + "runtimeLogOpen": "Show logs", + "runtimeLogTitle": "Runtime logs", + "runtimeLogSubtitle": "Current page session only.", + "runtimeLogExport": "Export logs", + "runtimeLogClose": "Close logs", + "runtimeLogEmpty": "No logs yet.", + "runtimeLogVersionLabel": "WebUI version {version}", "analyze": "Analyze", "analyzing": "Analyzing", "progressReady": "Waiting for file", + "progressDownloading": "Fetching APK metadata", "progressReading": "Reading file", "progressParsing": "Parsing manifest, resources, and DEX markers", "progressDone": "Analysis complete", @@ -162,6 +180,7 @@ "tabMeta": "Meta-Data", "noFile": "Choose an APK, APKS, APKM, XAPK, or LCAPPS file.", "invalidFile": "Please upload an .apk, .apks, .apkm, .xapk, or .lcapps file.", + "invalidLink": "Enter an HTTP/HTTPS APK download link.", "lcappsTitle": "Choose App", "lcappsSubtitle": "{name} · {count} apps", "lcappsSearch": "Search apps or package names", From 3a851c4eb1e8da199b127135a6e63311a29511f2 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 17:50:15 +0800 Subject: [PATCH 26/70] New translations en.json (Japanese) [ci skip] --- locales/ja_JP.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/locales/ja_JP.json b/locales/ja_JP.json index 3bd598e..ad04c17 100644 --- a/locales/ja_JP.json +++ b/locales/ja_JP.json @@ -110,6 +110,16 @@ }, "errors": { "unknown": "Unknown error", + "request_body_too_large": "Request body is too large.", + "invalid_json_request_body": "Invalid JSON request body.", + "invalid_download_url": "Only HTTP/HTTPS APK download links are supported.", + "remote_package_container_nested_manifest_unavailable": "This link points to an APKM/APKS/XAPK package. The selected inner APK ({selectedApkEntry}) is {selectedApkCompression}-compressed, so link preview cannot read AndroidManifest.xml without downloading the full package. Upload the file or provide a direct APK link.", + "manifest_missing": "The APK is missing AndroidManifest.xml.", + "remote_range_unsupported": "This link does not support HTTP Range, so it cannot be parsed without a full download. Upload the file or use a direct APK link that supports Range requests.", + "central_directory_error": "The ZIP central directory could not be read. The file may be invalid or unsupported.", + "manifest_error": "AndroidManifest.xml could not be read from this package.", + "remote_fetch_failed": "Failed to fetch the remote APK link. Check the link and try again.", + "url_analysis_failed": "Failed to parse this APK link.", "telegram_missing_file_path": "Telegram did not return a downloadable file_path", "telegram_file_download_failed": "Telegram file download failed ({status})", "telegram_api_request_failed": "Telegram API {method} request failed ({status})", @@ -158,6 +168,7 @@ "progressDownloading": "Fetching APK metadata", "progressReading": "Reading file", "progressParsing": "Parsing manifest, resources, and DEX markers", + "progressFailed": "Analysis failed", "progressDone": "Analysis complete", "historyTitle": "History", "historyNote": "Saved in this browser. Click an item to reopen the report.", From 2f6b93c90c33f67805d939abae715ce551ac10ef Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 17:50:17 +0800 Subject: [PATCH 27/70] New translations en.json (Korean) [ci skip] --- locales/ko_KR.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/locales/ko_KR.json b/locales/ko_KR.json index 3bd598e..ad04c17 100644 --- a/locales/ko_KR.json +++ b/locales/ko_KR.json @@ -110,6 +110,16 @@ }, "errors": { "unknown": "Unknown error", + "request_body_too_large": "Request body is too large.", + "invalid_json_request_body": "Invalid JSON request body.", + "invalid_download_url": "Only HTTP/HTTPS APK download links are supported.", + "remote_package_container_nested_manifest_unavailable": "This link points to an APKM/APKS/XAPK package. The selected inner APK ({selectedApkEntry}) is {selectedApkCompression}-compressed, so link preview cannot read AndroidManifest.xml without downloading the full package. Upload the file or provide a direct APK link.", + "manifest_missing": "The APK is missing AndroidManifest.xml.", + "remote_range_unsupported": "This link does not support HTTP Range, so it cannot be parsed without a full download. Upload the file or use a direct APK link that supports Range requests.", + "central_directory_error": "The ZIP central directory could not be read. The file may be invalid or unsupported.", + "manifest_error": "AndroidManifest.xml could not be read from this package.", + "remote_fetch_failed": "Failed to fetch the remote APK link. Check the link and try again.", + "url_analysis_failed": "Failed to parse this APK link.", "telegram_missing_file_path": "Telegram did not return a downloadable file_path", "telegram_file_download_failed": "Telegram file download failed ({status})", "telegram_api_request_failed": "Telegram API {method} request failed ({status})", @@ -158,6 +168,7 @@ "progressDownloading": "Fetching APK metadata", "progressReading": "Reading file", "progressParsing": "Parsing manifest, resources, and DEX markers", + "progressFailed": "Analysis failed", "progressDone": "Analysis complete", "historyTitle": "History", "historyNote": "Saved in this browser. Click an item to reopen the report.", From 4af105b6a27a08f60a8a1cb733fb48e7797fc822 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 17:50:18 +0800 Subject: [PATCH 28/70] New translations en.json (Chinese Simplified) [ci skip] --- locales/zh-Hans.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/locales/zh-Hans.json b/locales/zh-Hans.json index 74cbb0f..5b928e6 100644 --- a/locales/zh-Hans.json +++ b/locales/zh-Hans.json @@ -110,6 +110,16 @@ }, "errors": { "unknown": "未知错误", + "request_body_too_large": "请求体过大。", + "invalid_json_request_body": "请求体不是有效的 JSON。", + "invalid_download_url": "仅支持 HTTP/HTTPS APK 下载链接。", + "remote_package_container_nested_manifest_unavailable": "这个链接指向 APKM/APKS/XAPK 容器。选中的内层 APK({selectedApkEntry})使用 {selectedApkCompression} 压缩,链接预览无法在不完整下载的情况下读取 AndroidManifest.xml。请上传文件,或提供直接 APK 下载链接。", + "manifest_missing": "APK 中缺少 AndroidManifest.xml。", + "remote_range_unsupported": "这个链接不支持 HTTP Range,无法在不完整下载的情况下解析。请上传文件,或使用支持 Range 请求的直接 APK 链接。", + "central_directory_error": "无法读取 ZIP 中央目录,文件可能无效或暂不支持。", + "manifest_error": "无法从这个包中读取 AndroidManifest.xml。", + "remote_fetch_failed": "获取远程 APK 链接失败,请检查链接后重试。", + "url_analysis_failed": "解析这个 APK 链接失败。", "telegram_missing_file_path": "Telegram 没有返回可下载的 file_path", "telegram_file_download_failed": "Telegram 文件下载失败 ({status})", "telegram_api_request_failed": "Telegram API {method} 请求失败 ({status})", @@ -158,6 +168,7 @@ "progressDownloading": "获取 APK 元数据", "progressReading": "读取文件", "progressParsing": "解析 Manifest、资源与 DEX 标记", + "progressFailed": "分析失败", "progressDone": "分析完成", "historyTitle": "历史记录", "historyNote": "保存在当前浏览器中,点击记录可重新打开结果", From 95c41215a73fff56e6374d085b56e759a2a5ffad Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 17:50:19 +0800 Subject: [PATCH 29/70] New translations en.json (Chinese Traditional) [ci skip] --- locales/zh-Hant.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/locales/zh-Hant.json b/locales/zh-Hant.json index 3bd598e..ad04c17 100644 --- a/locales/zh-Hant.json +++ b/locales/zh-Hant.json @@ -110,6 +110,16 @@ }, "errors": { "unknown": "Unknown error", + "request_body_too_large": "Request body is too large.", + "invalid_json_request_body": "Invalid JSON request body.", + "invalid_download_url": "Only HTTP/HTTPS APK download links are supported.", + "remote_package_container_nested_manifest_unavailable": "This link points to an APKM/APKS/XAPK package. The selected inner APK ({selectedApkEntry}) is {selectedApkCompression}-compressed, so link preview cannot read AndroidManifest.xml without downloading the full package. Upload the file or provide a direct APK link.", + "manifest_missing": "The APK is missing AndroidManifest.xml.", + "remote_range_unsupported": "This link does not support HTTP Range, so it cannot be parsed without a full download. Upload the file or use a direct APK link that supports Range requests.", + "central_directory_error": "The ZIP central directory could not be read. The file may be invalid or unsupported.", + "manifest_error": "AndroidManifest.xml could not be read from this package.", + "remote_fetch_failed": "Failed to fetch the remote APK link. Check the link and try again.", + "url_analysis_failed": "Failed to parse this APK link.", "telegram_missing_file_path": "Telegram did not return a downloadable file_path", "telegram_file_download_failed": "Telegram file download failed ({status})", "telegram_api_request_failed": "Telegram API {method} request failed ({status})", @@ -158,6 +168,7 @@ "progressDownloading": "Fetching APK metadata", "progressReading": "Reading file", "progressParsing": "Parsing manifest, resources, and DEX markers", + "progressFailed": "Analysis failed", "progressDone": "Analysis complete", "historyTitle": "History", "historyNote": "Saved in this browser. Click an item to reopen the report.", From 0fb35d42153ad0e33dcb13c1d81e92d9ce090edc Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 19:02:30 +0800 Subject: [PATCH 30/70] New translations en.json (Japanese) [ci skip] --- locales/ja_JP.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/locales/ja_JP.json b/locales/ja_JP.json index ad04c17..622792a 100644 --- a/locales/ja_JP.json +++ b/locales/ja_JP.json @@ -148,6 +148,7 @@ "linkPrompt": "Or type a download link", "linkInputLabel": "Download link", "linkPlaceholder": "https://example.com/app.apk", + "linkClear": "Clear link", "linkAnalyze": "Analyze link", "linkNote": "Range metadata is used when the server supports it.", "linkIdle": "HTTP/HTTPS", @@ -178,6 +179,9 @@ "historyDelete": "Delete", "historyExpand": "Expand History", "historyCollapse": "Collapse History", + "historyViewLabel": "History view", + "historyViewList": "List", + "historyViewGrid": "Grid", "clearHistory": "Clear History", "historyVersionName": "Version Name", "historyVersionCode": "Version Code", From f8c36b13a004c7f4dcac10bfcdee62f4a1407308 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 19:02:31 +0800 Subject: [PATCH 31/70] New translations en.json (Korean) [ci skip] --- locales/ko_KR.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/locales/ko_KR.json b/locales/ko_KR.json index ad04c17..622792a 100644 --- a/locales/ko_KR.json +++ b/locales/ko_KR.json @@ -148,6 +148,7 @@ "linkPrompt": "Or type a download link", "linkInputLabel": "Download link", "linkPlaceholder": "https://example.com/app.apk", + "linkClear": "Clear link", "linkAnalyze": "Analyze link", "linkNote": "Range metadata is used when the server supports it.", "linkIdle": "HTTP/HTTPS", @@ -178,6 +179,9 @@ "historyDelete": "Delete", "historyExpand": "Expand History", "historyCollapse": "Collapse History", + "historyViewLabel": "History view", + "historyViewList": "List", + "historyViewGrid": "Grid", "clearHistory": "Clear History", "historyVersionName": "Version Name", "historyVersionCode": "Version Code", From 8ea98f5a1a2d3c985ce6836c899308c2760b34f0 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 19:02:33 +0800 Subject: [PATCH 32/70] New translations en.json (Chinese Simplified) [ci skip] --- locales/zh-Hans.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/locales/zh-Hans.json b/locales/zh-Hans.json index 5b928e6..3606128 100644 --- a/locales/zh-Hans.json +++ b/locales/zh-Hans.json @@ -148,6 +148,7 @@ "linkPrompt": "或键入下载链接", "linkInputLabel": "下载链接", "linkPlaceholder": "https://example.com/app.apk", + "linkClear": "清空链接", "linkAnalyze": "解析链接", "linkNote": "服务器支持时会使用 Range 元数据解析", "linkIdle": "HTTP/HTTPS", @@ -178,6 +179,9 @@ "historyDelete": "删除", "historyExpand": "展开历史", "historyCollapse": "收起历史", + "historyViewLabel": "历史记录视图", + "historyViewList": "列表", + "historyViewGrid": "网格", "clearHistory": "清空历史", "historyVersionName": "版本名称", "historyVersionCode": "版本号", From 4d3566a7fbf95f4b8104ae31d7c1235b4a37f8af Mon Sep 17 00:00:00 2001 From: Absinthe Date: Mon, 15 Jun 2026 19:02:37 +0800 Subject: [PATCH 33/70] New translations en.json (Chinese Traditional) [ci skip] --- locales/zh-Hant.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/locales/zh-Hant.json b/locales/zh-Hant.json index ad04c17..622792a 100644 --- a/locales/zh-Hant.json +++ b/locales/zh-Hant.json @@ -148,6 +148,7 @@ "linkPrompt": "Or type a download link", "linkInputLabel": "Download link", "linkPlaceholder": "https://example.com/app.apk", + "linkClear": "Clear link", "linkAnalyze": "Analyze link", "linkNote": "Range metadata is used when the server supports it.", "linkIdle": "HTTP/HTTPS", @@ -178,6 +179,9 @@ "historyDelete": "Delete", "historyExpand": "Expand History", "historyCollapse": "Collapse History", + "historyViewLabel": "History view", + "historyViewList": "List", + "historyViewGrid": "Grid", "clearHistory": "Clear History", "historyVersionName": "Version Name", "historyVersionCode": "Version Code", From ce99a902da534dd98cc2d430e24874b0f85abd51 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Tue, 16 Jun 2026 00:30:11 +0800 Subject: [PATCH 34/70] New translations en.json (Japanese) [ci skip] --- locales/ja_JP.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/locales/ja_JP.json b/locales/ja_JP.json index 622792a..63f179d 100644 --- a/locales/ja_JP.json +++ b/locales/ja_JP.json @@ -144,7 +144,7 @@ "clear": "Clear", "filePrompt": "Choose or drop", "fileIdle": "No file selected", - "localNote": "Files stay local. Links are fetched server-side.", + "localNote": "*Local files. Links read needed data.", "linkPrompt": "Or type a download link", "linkInputLabel": "Download link", "linkPlaceholder": "https://example.com/app.apk", @@ -166,7 +166,14 @@ "analyze": "Analyze", "analyzing": "Analyzing", "progressReady": "Waiting for file", + "progressPreparingLink": "Preparing link analysis", "progressDownloading": "Fetching APK metadata", + "progressRemoteMetadata": "Checking remote file metadata", + "progressZipTail": "Reading ZIP directory tail", + "progressCentralDirectory": "Parsing ZIP central directory", + "progressApkMetadata": "Reading APK metadata", + "progressSdkAnnotation": "Matching SDK markers", + "progressReportBuild": "Building report", "progressReading": "Reading file", "progressParsing": "Parsing manifest, resources, and DEX markers", "progressFailed": "Analysis failed", From fa0df8b942c39f4e230e09878151af55039ce6f4 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Tue, 16 Jun 2026 00:30:13 +0800 Subject: [PATCH 35/70] New translations en.json (Korean) [ci skip] --- locales/ko_KR.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/locales/ko_KR.json b/locales/ko_KR.json index 622792a..63f179d 100644 --- a/locales/ko_KR.json +++ b/locales/ko_KR.json @@ -144,7 +144,7 @@ "clear": "Clear", "filePrompt": "Choose or drop", "fileIdle": "No file selected", - "localNote": "Files stay local. Links are fetched server-side.", + "localNote": "*Local files. Links read needed data.", "linkPrompt": "Or type a download link", "linkInputLabel": "Download link", "linkPlaceholder": "https://example.com/app.apk", @@ -166,7 +166,14 @@ "analyze": "Analyze", "analyzing": "Analyzing", "progressReady": "Waiting for file", + "progressPreparingLink": "Preparing link analysis", "progressDownloading": "Fetching APK metadata", + "progressRemoteMetadata": "Checking remote file metadata", + "progressZipTail": "Reading ZIP directory tail", + "progressCentralDirectory": "Parsing ZIP central directory", + "progressApkMetadata": "Reading APK metadata", + "progressSdkAnnotation": "Matching SDK markers", + "progressReportBuild": "Building report", "progressReading": "Reading file", "progressParsing": "Parsing manifest, resources, and DEX markers", "progressFailed": "Analysis failed", From 967decc6d8b4dd8a8c643f9df1698d1d833001a7 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Tue, 16 Jun 2026 00:30:14 +0800 Subject: [PATCH 36/70] New translations en.json (Chinese Simplified) [ci skip] --- locales/zh-Hans.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/locales/zh-Hans.json b/locales/zh-Hans.json index 3606128..4cf518a 100644 --- a/locales/zh-Hans.json +++ b/locales/zh-Hans.json @@ -144,7 +144,7 @@ "clear": "清空", "filePrompt": "选择或拖入", "fileIdle": "未选择文件", - "localNote": "文件本地解析,链接由服务端获取", + "localNote": "*文件在本地解析,链接仅读取必要数据", "linkPrompt": "或键入下载链接", "linkInputLabel": "下载链接", "linkPlaceholder": "https://example.com/app.apk", @@ -166,7 +166,14 @@ "analyze": "开始分析", "analyzing": "分析中", "progressReady": "等待文件", + "progressPreparingLink": "准备链接解析", "progressDownloading": "获取 APK 元数据", + "progressRemoteMetadata": "检查远端文件元数据", + "progressZipTail": "读取 ZIP 尾部目录", + "progressCentralDirectory": "解析 ZIP 中央目录", + "progressApkMetadata": "读取 APK 元数据", + "progressSdkAnnotation": "匹配 SDK 标记", + "progressReportBuild": "生成报告", "progressReading": "读取文件", "progressParsing": "解析 Manifest、资源与 DEX 标记", "progressFailed": "分析失败", From ce0eec8c8b01196d108a0d782865b556c2ee0a99 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Tue, 16 Jun 2026 00:30:16 +0800 Subject: [PATCH 37/70] New translations en.json (Chinese Traditional) [ci skip] --- locales/zh-Hant.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/locales/zh-Hant.json b/locales/zh-Hant.json index 622792a..63f179d 100644 --- a/locales/zh-Hant.json +++ b/locales/zh-Hant.json @@ -144,7 +144,7 @@ "clear": "Clear", "filePrompt": "Choose or drop", "fileIdle": "No file selected", - "localNote": "Files stay local. Links are fetched server-side.", + "localNote": "*Local files. Links read needed data.", "linkPrompt": "Or type a download link", "linkInputLabel": "Download link", "linkPlaceholder": "https://example.com/app.apk", @@ -166,7 +166,14 @@ "analyze": "Analyze", "analyzing": "Analyzing", "progressReady": "Waiting for file", + "progressPreparingLink": "Preparing link analysis", "progressDownloading": "Fetching APK metadata", + "progressRemoteMetadata": "Checking remote file metadata", + "progressZipTail": "Reading ZIP directory tail", + "progressCentralDirectory": "Parsing ZIP central directory", + "progressApkMetadata": "Reading APK metadata", + "progressSdkAnnotation": "Matching SDK markers", + "progressReportBuild": "Building report", "progressReading": "Reading file", "progressParsing": "Parsing manifest, resources, and DEX markers", "progressFailed": "Analysis failed", From d987eb717822832d82ec596156e71b109c56a54e Mon Sep 17 00:00:00 2001 From: Absinthe Date: Wed, 8 Jul 2026 19:34:21 +0800 Subject: [PATCH 38/70] New translations en.json (Japanese) [ci skip] --- locales/ja_JP.json | 49 ---------------------------------------------- 1 file changed, 49 deletions(-) diff --git a/locales/ja_JP.json b/locales/ja_JP.json index 63f179d..4e4ac0d 100644 --- a/locales/ja_JP.json +++ b/locales/ja_JP.json @@ -59,55 +59,6 @@ "sdk_summary_native": "Native Libraries {count}", "sdk_summary_components": "Components {count}" }, - "report": { - "fallback_title": "APK Report", - "error_title": "Failed to Load Report", - "missing_path": "Missing report path parameter.", - "views": "Views {count}", - "meta_fallback": "APK Analysis Report" - }, - "telegraph": { - "page_title": "{appName} APK Info", - "apk_summary": "APK Summary", - "file_info": "File Info", - "native_libraries": "Native Libraries", - "build_features": "Build Features", - "permissions": "Permissions", - "components": "Components", - "application_meta_data": "Application Meta-Data", - "native_sdk_markers": "Native Library SDK Markers", - "marked_sdks": "Marked SDKs", - "app_icon": "App Icon", - "line_app": "App: {value}", - "line_package_name": "Package Name: {value}", - "line_icon": "Icon: {value}", - "icon_detected": "Detected", - "icon_detected_with_path": "Detected ({path})", - "icon_missing": "Not detected", - "line_version": "Version: {versionName} ({versionCode})", - "line_sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", - "line_stats": "Stats: Permissions {permissions} · Native Libraries {nativeLibraries} · Components {components} · Meta-Data {metaData}", - "line_file_name": "File Name: {value}", - "line_file_size": "File Size: {value}", - "line_message_source": "Message Source: {value}", - "line_analyzed_at": "Analyzed At: {value}", - "report_compacted_notice": "The report exceeded Telegraph's single-page content limit, so a compact version was generated automatically. Stats still use the full APK, while lists only show the first items.", - "no_build_features": "No build features detected.", - "no_native_libraries": "No native libraries found.", - "no_permissions": "No permissions declared.", - "no_component": "No {title} declared.", - "no_application_meta_data": "No application-level meta-data declared.", - "alias_target": "alias -> {target}", - "resource_resolved": "resolved from string resource", - "resource_reference": "resource reference", - "feature_detected": "Detected", - "feature_kotlin": "Kotlin", - "feature_compose": "Compose", - "feature_gradle": "Gradle", - "feature_agp": "Android Gradle Plugin", - "feature_app_metadata_version": "App Metadata Version", - "unknown": "Unknown" - }, "errors": { "unknown": "Unknown error", "request_body_too_large": "Request body is too large.", From 7a3b0fcb0cf4f5a9374f7e18d3edd76794a310fe Mon Sep 17 00:00:00 2001 From: Absinthe Date: Wed, 8 Jul 2026 19:34:23 +0800 Subject: [PATCH 39/70] New translations en.json (Korean) [ci skip] --- locales/ko_KR.json | 49 ---------------------------------------------- 1 file changed, 49 deletions(-) diff --git a/locales/ko_KR.json b/locales/ko_KR.json index 63f179d..4e4ac0d 100644 --- a/locales/ko_KR.json +++ b/locales/ko_KR.json @@ -59,55 +59,6 @@ "sdk_summary_native": "Native Libraries {count}", "sdk_summary_components": "Components {count}" }, - "report": { - "fallback_title": "APK Report", - "error_title": "Failed to Load Report", - "missing_path": "Missing report path parameter.", - "views": "Views {count}", - "meta_fallback": "APK Analysis Report" - }, - "telegraph": { - "page_title": "{appName} APK Info", - "apk_summary": "APK Summary", - "file_info": "File Info", - "native_libraries": "Native Libraries", - "build_features": "Build Features", - "permissions": "Permissions", - "components": "Components", - "application_meta_data": "Application Meta-Data", - "native_sdk_markers": "Native Library SDK Markers", - "marked_sdks": "Marked SDKs", - "app_icon": "App Icon", - "line_app": "App: {value}", - "line_package_name": "Package Name: {value}", - "line_icon": "Icon: {value}", - "icon_detected": "Detected", - "icon_detected_with_path": "Detected ({path})", - "icon_missing": "Not detected", - "line_version": "Version: {versionName} ({versionCode})", - "line_sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", - "line_stats": "Stats: Permissions {permissions} · Native Libraries {nativeLibraries} · Components {components} · Meta-Data {metaData}", - "line_file_name": "File Name: {value}", - "line_file_size": "File Size: {value}", - "line_message_source": "Message Source: {value}", - "line_analyzed_at": "Analyzed At: {value}", - "report_compacted_notice": "The report exceeded Telegraph's single-page content limit, so a compact version was generated automatically. Stats still use the full APK, while lists only show the first items.", - "no_build_features": "No build features detected.", - "no_native_libraries": "No native libraries found.", - "no_permissions": "No permissions declared.", - "no_component": "No {title} declared.", - "no_application_meta_data": "No application-level meta-data declared.", - "alias_target": "alias -> {target}", - "resource_resolved": "resolved from string resource", - "resource_reference": "resource reference", - "feature_detected": "Detected", - "feature_kotlin": "Kotlin", - "feature_compose": "Compose", - "feature_gradle": "Gradle", - "feature_agp": "Android Gradle Plugin", - "feature_app_metadata_version": "App Metadata Version", - "unknown": "Unknown" - }, "errors": { "unknown": "Unknown error", "request_body_too_large": "Request body is too large.", From 74e971f4f2356440017fbf5375780c96208dff3e Mon Sep 17 00:00:00 2001 From: Absinthe Date: Wed, 8 Jul 2026 19:34:24 +0800 Subject: [PATCH 40/70] New translations en.json (Chinese Simplified) [ci skip] --- locales/zh-Hans.json | 49 -------------------------------------------- 1 file changed, 49 deletions(-) diff --git a/locales/zh-Hans.json b/locales/zh-Hans.json index 4cf518a..4845f39 100644 --- a/locales/zh-Hans.json +++ b/locales/zh-Hans.json @@ -59,55 +59,6 @@ "sdk_summary_native": "原生库 {count}", "sdk_summary_components": "组件 {count}" }, - "report": { - "fallback_title": "APK 报告", - "error_title": "报告加载失败", - "missing_path": "缺少 report path 参数。", - "views": "浏览 {count}", - "meta_fallback": "APK 解析报告" - }, - "telegraph": { - "page_title": "{appName} APK 信息", - "apk_summary": "APK 摘要", - "file_info": "文件信息", - "native_libraries": "原生库", - "build_features": "构建特性", - "permissions": "权限", - "components": "组件", - "application_meta_data": "Application Meta-Data", - "native_sdk_markers": "原生库 SDK 标记", - "marked_sdks": "已标记的 SDK", - "app_icon": "应用图标", - "line_app": "应用: {value}", - "line_package_name": "包名: {value}", - "line_icon": "图标: {value}", - "icon_detected": "已解析", - "icon_detected_with_path": "已解析 ({path})", - "icon_missing": "未解析到", - "line_version": "版本: {versionName} ({versionCode})", - "line_sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", - "line_stats": "统计: 权限 {permissions} · 原生库 {nativeLibraries} · 组件 {components} · meta-data {metaData}", - "line_file_name": "文件名: {value}", - "line_file_size": "文件大小: {value}", - "line_message_source": "消息来源: {value}", - "line_analyzed_at": "分析时间: {value}", - "report_compacted_notice": "报告内容超过 Telegraph 单页限制,已自动切换为精简版:统计仍基于完整 APK,列表仅展示前若干项。", - "no_build_features": "未识别到构建特性。", - "no_native_libraries": "未发现原生库。", - "no_permissions": "未声明权限。", - "no_component": "未声明 {title}。", - "no_application_meta_data": "未声明 application 级 meta-data。", - "alias_target": "alias -> {target}", - "resource_resolved": "resolved from string resource", - "resource_reference": "resource reference", - "feature_detected": "已检测到", - "feature_kotlin": "Kotlin", - "feature_compose": "Compose", - "feature_gradle": "Gradle", - "feature_agp": "Android Gradle Plugin", - "feature_app_metadata_version": "App Metadata Version", - "unknown": "未知" - }, "errors": { "unknown": "未知错误", "request_body_too_large": "请求体过大。", From 53f88cfa4141265c99d7283f6357504ab8b94da5 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Wed, 8 Jul 2026 19:34:26 +0800 Subject: [PATCH 41/70] New translations en.json (Chinese Traditional) [ci skip] --- locales/zh-Hant.json | 49 -------------------------------------------- 1 file changed, 49 deletions(-) diff --git a/locales/zh-Hant.json b/locales/zh-Hant.json index 63f179d..4e4ac0d 100644 --- a/locales/zh-Hant.json +++ b/locales/zh-Hant.json @@ -59,55 +59,6 @@ "sdk_summary_native": "Native Libraries {count}", "sdk_summary_components": "Components {count}" }, - "report": { - "fallback_title": "APK Report", - "error_title": "Failed to Load Report", - "missing_path": "Missing report path parameter.", - "views": "Views {count}", - "meta_fallback": "APK Analysis Report" - }, - "telegraph": { - "page_title": "{appName} APK Info", - "apk_summary": "APK Summary", - "file_info": "File Info", - "native_libraries": "Native Libraries", - "build_features": "Build Features", - "permissions": "Permissions", - "components": "Components", - "application_meta_data": "Application Meta-Data", - "native_sdk_markers": "Native Library SDK Markers", - "marked_sdks": "Marked SDKs", - "app_icon": "App Icon", - "line_app": "App: {value}", - "line_package_name": "Package Name: {value}", - "line_icon": "Icon: {value}", - "icon_detected": "Detected", - "icon_detected_with_path": "Detected ({path})", - "icon_missing": "Not detected", - "line_version": "Version: {versionName} ({versionCode})", - "line_sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", - "line_stats": "Stats: Permissions {permissions} · Native Libraries {nativeLibraries} · Components {components} · Meta-Data {metaData}", - "line_file_name": "File Name: {value}", - "line_file_size": "File Size: {value}", - "line_message_source": "Message Source: {value}", - "line_analyzed_at": "Analyzed At: {value}", - "report_compacted_notice": "The report exceeded Telegraph's single-page content limit, so a compact version was generated automatically. Stats still use the full APK, while lists only show the first items.", - "no_build_features": "No build features detected.", - "no_native_libraries": "No native libraries found.", - "no_permissions": "No permissions declared.", - "no_component": "No {title} declared.", - "no_application_meta_data": "No application-level meta-data declared.", - "alias_target": "alias -> {target}", - "resource_resolved": "resolved from string resource", - "resource_reference": "resource reference", - "feature_detected": "Detected", - "feature_kotlin": "Kotlin", - "feature_compose": "Compose", - "feature_gradle": "Gradle", - "feature_agp": "Android Gradle Plugin", - "feature_app_metadata_version": "App Metadata Version", - "unknown": "Unknown" - }, "errors": { "unknown": "Unknown error", "request_body_too_large": "Request body is too large.", From a149a01a483fe08b74c44dcd14b988a156fe25eb Mon Sep 17 00:00:00 2001 From: Absinthe Date: Wed, 8 Jul 2026 20:56:17 +0800 Subject: [PATCH 42/70] New translations en.json (Japanese) [ci skip] --- locales/ja_JP.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/locales/ja_JP.json b/locales/ja_JP.json index 4e4ac0d..d5c99ad 100644 --- a/locales/ja_JP.json +++ b/locales/ja_JP.json @@ -57,7 +57,8 @@ "features": "Features: {value}", "open_report_hint": "Use the button below to open the full report.", "sdk_summary_native": "Native Libraries {count}", - "sdk_summary_components": "Components {count}" + "sdk_summary_components": "Components {count}", + "sdk_summary_more": "+{count} more" }, "errors": { "unknown": "Unknown error", From 8973fb9a31a62d3430cd8f3e3b323c62a469a94a Mon Sep 17 00:00:00 2001 From: Absinthe Date: Wed, 8 Jul 2026 20:56:19 +0800 Subject: [PATCH 43/70] New translations en.json (Korean) [ci skip] --- locales/ko_KR.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/locales/ko_KR.json b/locales/ko_KR.json index 4e4ac0d..d5c99ad 100644 --- a/locales/ko_KR.json +++ b/locales/ko_KR.json @@ -57,7 +57,8 @@ "features": "Features: {value}", "open_report_hint": "Use the button below to open the full report.", "sdk_summary_native": "Native Libraries {count}", - "sdk_summary_components": "Components {count}" + "sdk_summary_components": "Components {count}", + "sdk_summary_more": "+{count} more" }, "errors": { "unknown": "Unknown error", From 392c8302b485f697d3c01f06bc69b5feba448fbd Mon Sep 17 00:00:00 2001 From: Absinthe Date: Wed, 8 Jul 2026 20:56:20 +0800 Subject: [PATCH 44/70] New translations en.json (Chinese Simplified) [ci skip] --- locales/zh-Hans.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/locales/zh-Hans.json b/locales/zh-Hans.json index 4845f39..7127cfa 100644 --- a/locales/zh-Hans.json +++ b/locales/zh-Hans.json @@ -57,7 +57,8 @@ "features": "特性: {value}", "open_report_hint": "完整报告请使用下方按钮打开。", "sdk_summary_native": "原生库 {count}", - "sdk_summary_components": "组件 {count}" + "sdk_summary_components": "组件 {count}", + "sdk_summary_more": "另有 {count} 个" }, "errors": { "unknown": "未知错误", From 8f11645c0b50c4fb2bc4babcfc3df39d7388cd95 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Wed, 8 Jul 2026 20:56:21 +0800 Subject: [PATCH 45/70] New translations en.json (Chinese Traditional) [ci skip] --- locales/zh-Hant.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/locales/zh-Hant.json b/locales/zh-Hant.json index 4e4ac0d..d5c99ad 100644 --- a/locales/zh-Hant.json +++ b/locales/zh-Hant.json @@ -57,7 +57,8 @@ "features": "Features: {value}", "open_report_hint": "Use the button below to open the full report.", "sdk_summary_native": "Native Libraries {count}", - "sdk_summary_components": "Components {count}" + "sdk_summary_components": "Components {count}", + "sdk_summary_more": "+{count} more" }, "errors": { "unknown": "Unknown error", From f621193f2ef60e1c624418d2dd489de0c7b95f74 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Thu, 9 Jul 2026 16:06:38 +0800 Subject: [PATCH 46/70] New translations en.json (Japanese) [ci skip] --- locales/ja_JP.json | 59 ++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 33 deletions(-) diff --git a/locales/ja_JP.json b/locales/ja_JP.json index d5c99ad..0503058 100644 --- a/locales/ja_JP.json +++ b/locales/ja_JP.json @@ -5,43 +5,23 @@ }, "commands": { "start_description": "Show usage instructions", - "apkinfo_description": "Analyze the current or replied APK/APKS/APKM/XAPK file", - "upload_description": "Upload a large Android package for analysis" + "apkinfo_description": "Analyze the current or replied APK download link", + "upload_description": "Open the WebUI upload page" }, "bot": { - "start": "Hi! Send or forward an APK, APKS, APKM, or XAPK file and I'll analyze it automatically. You can also send an APK download link, and I'll try to parse it with HTTP Range by downloading only a small amount of metadata. In groups and channels, you can send an Android package directly, put /apkinfo in the file message or next to the APK link, or reply to a message containing an Android package with /apkinfo. For files larger than 20 MB, use /upload to open the web upload entry.", - "apk_not_found": "I couldn't find a parsable APK, APKS, APKM, XAPK file, or APK link. You can send or forward an Android package file directly, send an APK download link, or put /apkinfo in the same file/link message. If you're replying to analyze, make sure the replied message itself is an Android package file or APK link. In groups, forwarded files may not always include a complete file object for the bot, so I may be unable to retrieve them again from Telegram. In that case, please send the file directly in the group, send an APK download link, or forward it to me in a private chat. If Privacy Mode is enabled in the group, prefer using /apkinfo@bot_username.", - "apk_too_large": "This file exceeds Telegram Bot API's current 20 MB download limit. Use the button below to open the web upload entry and upload it directly to the Worker for analysis.", - "upload_entry": "Open the web upload entry, choose an APK, APKS, APKM, or XAPK file, and it will be parsed directly by the Worker. This bypasses Telegram Bot API's 20 MB file download limit, but Cloudflare Worker request body and memory limits still apply.", + "start": "Hi! Send an APK download link and I'll try to parse it with HTTP Range by downloading only a small amount of metadata. In groups and channels, put /apkinfo next to the APK link or reply to a message containing an APK link with /apkinfo. For local APK, APKS, APKM, or XAPK files, use /upload to open the WebUI and analyze them in your browser.", + "apk_not_found": "I couldn't find a parsable APK download link. Send an APK link, put /apkinfo next to the APK link, or reply to a message containing an APK link with /apkinfo. For local APK, APKS, APKM, or XAPK files, use /upload and upload them in the WebUI.", + "upload_entry": "Open the WebUI, choose an APK, APKS, APKM, or XAPK file, and analyze it locally in your browser.", "parse_failed": "Failed to parse Android package: {message}", "open_full_report": "Open Full Report", - "open_upload_page": "Upload Large File", + "open_upload_page": "Open WebUI", "source_channel": "Channel Message", "source_forwarded": "Forwarded Message", "source_private": "Private Chat Message", "source_group": "Group Message", - "source_web_upload": "Web Upload", "source_link_preview": "Link Preview", "source_default": "Telegram Message" }, - "upload": { - "page_title": "Upload Android Package for Analysis", - "heading": "Upload Android Package for Analysis", - "intro": "Upload an APK, APKS, APKM, or XAPK directly to the Worker. This is intended for files larger than Telegram Bot API's 20 MB download limit.", - "file_label": "Android Package File", - "language_label": "Report Language", - "submit": "Analyze", - "busy": "Uploading and analyzing...", - "progress_label": "Upload Progress", - "progress_preparing": "Preparing upload...", - "progress_complete": "Upload complete. Generating report...", - "network_error": "Upload failed. Please check your connection and try again.", - "max_hint": "This entry currently recommends files up to {maxSize}.", - "choose_file": "Choose an .apk, .apks, .apkm, or .xapk file.", - "invalid_file": "Please upload an .apk, .apks, .apkm, or .xapk file.", - "too_large": "The file exceeds the current Worker upload analysis limit: {maxSize}.", - "parse_failed": "Failed to parse Android package: {message}" - }, "summary": { "completed": "APK Analysis Complete", "app_name": "App Name: {appName}", @@ -65,9 +45,9 @@ "request_body_too_large": "Request body is too large.", "invalid_json_request_body": "Invalid JSON request body.", "invalid_download_url": "Only HTTP/HTTPS APK download links are supported.", - "remote_package_container_nested_manifest_unavailable": "This link points to an APKM/APKS/XAPK package. The selected inner APK ({selectedApkEntry}) is {selectedApkCompression}-compressed, so link preview cannot read AndroidManifest.xml without downloading the full package. Upload the file or provide a direct APK link.", + "remote_package_container_nested_manifest_unavailable": "This link points to an APKM/APKS/XAPK package. The selected inner APK ({selectedApkEntry}) is {selectedApkCompression}-compressed, so link preview cannot read AndroidManifest.xml without downloading the full package. Upload the file in the WebUI or provide a direct APK link.", "manifest_missing": "The APK is missing AndroidManifest.xml.", - "remote_range_unsupported": "This link does not support HTTP Range, so it cannot be parsed without a full download. Upload the file or use a direct APK link that supports Range requests.", + "remote_range_unsupported": "This link does not support HTTP Range, so it cannot be parsed without a full download. Upload the file in the WebUI or use a direct APK link that supports Range requests.", "central_directory_error": "The ZIP central directory could not be read. The file may be invalid or unsupported.", "manifest_error": "AndroidManifest.xml could not be read from this package.", "remote_fetch_failed": "Failed to fetch the remote APK link. Check the link and try again.", @@ -76,11 +56,9 @@ "telegram_file_download_failed": "Telegram file download failed ({status})", "telegram_api_request_failed": "Telegram API {method} request failed ({status})", "telegram_api_result_failed": "Telegram API {method} returned an error", - "telegraph_invalid_path": "Invalid Telegraph page path", - "telegraph_fetch_failed": "Failed to fetch Telegraph page ({status})", - "telegraph_fetch_failed_generic": "Failed to fetch Telegraph page", - "telegraph_api_failed": "Telegraph API {method} request failed ({status})", - "telegraph_api_result_failed": "Telegraph API {method} returned an error" + "report_data_invalid_ref": "Invalid report link.", + "report_data_not_found": "Report data was not found.", + "report_data_bucket_missing": "Report storage is not configured." }, "webui": { "subtitle": "APK/APKS/APKM/XAPK Analyzer in Browser", @@ -93,6 +71,21 @@ "themeSystem": "System", "languageLabel": "Language", "exportJson": "Export JSON", + "reportShare": "Share report", + "reportShareTitle": "LibChecker report", + "reportShareText": "LibChecker report for {appName}", + "reportSharePreparing": "Preparing share link...", + "reportShareReady": "Ready to share.", + "reportShareShared": "Shared.", + "reportShareCopied": "Link copied.", + "reportShareFailed": "Share failed.", + "reportShareDialogTitle": "Share report", + "reportShareDialogSubtitle": "Copy the public report link or send it with system share.", + "reportShareClose": "Close share dialog", + "reportShareLinkLabel": "Report link", + "reportShareCopy": "Copy link", + "reportShareSystem": "System share", + "reportShareNoLink": "Link unavailable", "clear": "Clear", "filePrompt": "Choose or drop", "fileIdle": "No file selected", From f8c5ef888c11f49a6e734695940134bde8d249d8 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Thu, 9 Jul 2026 16:06:39 +0800 Subject: [PATCH 47/70] New translations en.json (Korean) [ci skip] --- locales/ko_KR.json | 59 ++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 33 deletions(-) diff --git a/locales/ko_KR.json b/locales/ko_KR.json index d5c99ad..0503058 100644 --- a/locales/ko_KR.json +++ b/locales/ko_KR.json @@ -5,43 +5,23 @@ }, "commands": { "start_description": "Show usage instructions", - "apkinfo_description": "Analyze the current or replied APK/APKS/APKM/XAPK file", - "upload_description": "Upload a large Android package for analysis" + "apkinfo_description": "Analyze the current or replied APK download link", + "upload_description": "Open the WebUI upload page" }, "bot": { - "start": "Hi! Send or forward an APK, APKS, APKM, or XAPK file and I'll analyze it automatically. You can also send an APK download link, and I'll try to parse it with HTTP Range by downloading only a small amount of metadata. In groups and channels, you can send an Android package directly, put /apkinfo in the file message or next to the APK link, or reply to a message containing an Android package with /apkinfo. For files larger than 20 MB, use /upload to open the web upload entry.", - "apk_not_found": "I couldn't find a parsable APK, APKS, APKM, XAPK file, or APK link. You can send or forward an Android package file directly, send an APK download link, or put /apkinfo in the same file/link message. If you're replying to analyze, make sure the replied message itself is an Android package file or APK link. In groups, forwarded files may not always include a complete file object for the bot, so I may be unable to retrieve them again from Telegram. In that case, please send the file directly in the group, send an APK download link, or forward it to me in a private chat. If Privacy Mode is enabled in the group, prefer using /apkinfo@bot_username.", - "apk_too_large": "This file exceeds Telegram Bot API's current 20 MB download limit. Use the button below to open the web upload entry and upload it directly to the Worker for analysis.", - "upload_entry": "Open the web upload entry, choose an APK, APKS, APKM, or XAPK file, and it will be parsed directly by the Worker. This bypasses Telegram Bot API's 20 MB file download limit, but Cloudflare Worker request body and memory limits still apply.", + "start": "Hi! Send an APK download link and I'll try to parse it with HTTP Range by downloading only a small amount of metadata. In groups and channels, put /apkinfo next to the APK link or reply to a message containing an APK link with /apkinfo. For local APK, APKS, APKM, or XAPK files, use /upload to open the WebUI and analyze them in your browser.", + "apk_not_found": "I couldn't find a parsable APK download link. Send an APK link, put /apkinfo next to the APK link, or reply to a message containing an APK link with /apkinfo. For local APK, APKS, APKM, or XAPK files, use /upload and upload them in the WebUI.", + "upload_entry": "Open the WebUI, choose an APK, APKS, APKM, or XAPK file, and analyze it locally in your browser.", "parse_failed": "Failed to parse Android package: {message}", "open_full_report": "Open Full Report", - "open_upload_page": "Upload Large File", + "open_upload_page": "Open WebUI", "source_channel": "Channel Message", "source_forwarded": "Forwarded Message", "source_private": "Private Chat Message", "source_group": "Group Message", - "source_web_upload": "Web Upload", "source_link_preview": "Link Preview", "source_default": "Telegram Message" }, - "upload": { - "page_title": "Upload Android Package for Analysis", - "heading": "Upload Android Package for Analysis", - "intro": "Upload an APK, APKS, APKM, or XAPK directly to the Worker. This is intended for files larger than Telegram Bot API's 20 MB download limit.", - "file_label": "Android Package File", - "language_label": "Report Language", - "submit": "Analyze", - "busy": "Uploading and analyzing...", - "progress_label": "Upload Progress", - "progress_preparing": "Preparing upload...", - "progress_complete": "Upload complete. Generating report...", - "network_error": "Upload failed. Please check your connection and try again.", - "max_hint": "This entry currently recommends files up to {maxSize}.", - "choose_file": "Choose an .apk, .apks, .apkm, or .xapk file.", - "invalid_file": "Please upload an .apk, .apks, .apkm, or .xapk file.", - "too_large": "The file exceeds the current Worker upload analysis limit: {maxSize}.", - "parse_failed": "Failed to parse Android package: {message}" - }, "summary": { "completed": "APK Analysis Complete", "app_name": "App Name: {appName}", @@ -65,9 +45,9 @@ "request_body_too_large": "Request body is too large.", "invalid_json_request_body": "Invalid JSON request body.", "invalid_download_url": "Only HTTP/HTTPS APK download links are supported.", - "remote_package_container_nested_manifest_unavailable": "This link points to an APKM/APKS/XAPK package. The selected inner APK ({selectedApkEntry}) is {selectedApkCompression}-compressed, so link preview cannot read AndroidManifest.xml without downloading the full package. Upload the file or provide a direct APK link.", + "remote_package_container_nested_manifest_unavailable": "This link points to an APKM/APKS/XAPK package. The selected inner APK ({selectedApkEntry}) is {selectedApkCompression}-compressed, so link preview cannot read AndroidManifest.xml without downloading the full package. Upload the file in the WebUI or provide a direct APK link.", "manifest_missing": "The APK is missing AndroidManifest.xml.", - "remote_range_unsupported": "This link does not support HTTP Range, so it cannot be parsed without a full download. Upload the file or use a direct APK link that supports Range requests.", + "remote_range_unsupported": "This link does not support HTTP Range, so it cannot be parsed without a full download. Upload the file in the WebUI or use a direct APK link that supports Range requests.", "central_directory_error": "The ZIP central directory could not be read. The file may be invalid or unsupported.", "manifest_error": "AndroidManifest.xml could not be read from this package.", "remote_fetch_failed": "Failed to fetch the remote APK link. Check the link and try again.", @@ -76,11 +56,9 @@ "telegram_file_download_failed": "Telegram file download failed ({status})", "telegram_api_request_failed": "Telegram API {method} request failed ({status})", "telegram_api_result_failed": "Telegram API {method} returned an error", - "telegraph_invalid_path": "Invalid Telegraph page path", - "telegraph_fetch_failed": "Failed to fetch Telegraph page ({status})", - "telegraph_fetch_failed_generic": "Failed to fetch Telegraph page", - "telegraph_api_failed": "Telegraph API {method} request failed ({status})", - "telegraph_api_result_failed": "Telegraph API {method} returned an error" + "report_data_invalid_ref": "Invalid report link.", + "report_data_not_found": "Report data was not found.", + "report_data_bucket_missing": "Report storage is not configured." }, "webui": { "subtitle": "APK/APKS/APKM/XAPK Analyzer in Browser", @@ -93,6 +71,21 @@ "themeSystem": "System", "languageLabel": "Language", "exportJson": "Export JSON", + "reportShare": "Share report", + "reportShareTitle": "LibChecker report", + "reportShareText": "LibChecker report for {appName}", + "reportSharePreparing": "Preparing share link...", + "reportShareReady": "Ready to share.", + "reportShareShared": "Shared.", + "reportShareCopied": "Link copied.", + "reportShareFailed": "Share failed.", + "reportShareDialogTitle": "Share report", + "reportShareDialogSubtitle": "Copy the public report link or send it with system share.", + "reportShareClose": "Close share dialog", + "reportShareLinkLabel": "Report link", + "reportShareCopy": "Copy link", + "reportShareSystem": "System share", + "reportShareNoLink": "Link unavailable", "clear": "Clear", "filePrompt": "Choose or drop", "fileIdle": "No file selected", From 0be51a8958b14701b077da06fbcb9894605f6531 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Thu, 9 Jul 2026 16:06:41 +0800 Subject: [PATCH 48/70] New translations en.json (Chinese Simplified) [ci skip] --- locales/zh-Hans.json | 59 +++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 33 deletions(-) diff --git a/locales/zh-Hans.json b/locales/zh-Hans.json index 7127cfa..663644f 100644 --- a/locales/zh-Hans.json +++ b/locales/zh-Hans.json @@ -5,43 +5,23 @@ }, "commands": { "start_description": "显示使用说明", - "apkinfo_description": "解析当前或回复的 APK/APKS/APKM/XAPK 文件", - "upload_description": "上传大型 Android 包解析" + "apkinfo_description": "解析当前或回复的 APK 下载链接", + "upload_description": "打开 WebUI 上传页" }, "bot": { - "start": "你好,我可以帮你解析 APK、APKS、APKM 和 XAPK。\n\n私聊使用\n直接发送或转发 APK、APKS、APKM 或 XAPK 文件,我会自动解析。\n也可以发送 APK 下载链接,我会尝试用 HTTP Range 只下载少量元数据来解析。\n\n群组和频道\n直接发送 Android 包文件,或把 /apkinfo 写在文件消息里、APK 链接旁边。\n也可以回复含 Android 包文件的消息,再发送 /apkinfo。\n\n大文件\n超过 20MB 的文件,可以使用 /upload 打开网页上传入口。", - "apk_not_found": "我没有找到可解析的 APK、APKS、APKM、XAPK 文件或 APK 链接。你可以直接发送或转发 Android 包文件、发送 APK 下载链接,或者把 /apkinfo 写在同一条文件消息或链接消息里;如果是回复解析,也请确认你回复的那条消息本身就是 Android 包文件或 APK 链接。需要注意的是,群组里的转发文件有时不会把文件对象完整发给 bot,这种情况下我无法从 Telegram 重新取回它,建议直接在群里发送文件、发送 APK 下载链接,或私聊 bot 再转发文件。若群组开启了 Privacy Mode,请优先使用 /apkinfo@bot_username。", - "apk_too_large": "这个文件超过 Telegram 官方 Bot API 当前可下载的 20MB 限制。请使用下方按钮打开网页上传入口,直接上传到 Worker 解析。", - "upload_entry": "打开网页上传入口后选择 APK、APKS、APKM 或 XAPK 文件即可解析。这个入口绕过 Telegram Bot API 的 20MB 文件下载限制,但仍会受到 Cloudflare Worker 请求体和内存限制影响。", + "start": "你好,我可以帮你解析 APK 下载链接。\n\n发送 APK 下载链接后,我会尝试用 HTTP Range 只下载少量元数据来解析。\n\n群组和频道\n把 /apkinfo 写在 APK 链接旁边,或回复含 APK 链接的消息再发送 /apkinfo。\n\n本地文件\nAPK、APKS、APKM 或 XAPK 文件请使用 /upload 打开 WebUI,在浏览器本地解析。", + "apk_not_found": "我没有找到可解析的 APK 下载链接。你可以发送 APK 下载链接,把 /apkinfo 写在 APK 链接旁边,或回复含 APK 链接的消息再发送 /apkinfo。本地 APK、APKS、APKM 或 XAPK 文件请使用 /upload 到 WebUI 上传解析。", + "upload_entry": "打开 WebUI 后选择 APK、APKS、APKM 或 XAPK 文件即可在浏览器本地解析。", "parse_failed": "解析 Android 包失败:{message}", "open_full_report": "打开完整报告", - "open_upload_page": "上传大文件", + "open_upload_page": "打开 WebUI", "source_channel": "频道消息", "source_forwarded": "转发消息", "source_private": "私聊消息", "source_group": "群组消息", - "source_web_upload": "网页上传", "source_link_preview": "链接预览", "source_default": "Telegram 消息" }, - "upload": { - "page_title": "上传 Android 包解析", - "heading": "上传 Android 包解析", - "intro": "直接把 APK、APKS、APKM 或 XAPK 上传到 Worker 解析,适合超过 Telegram Bot API 20MB 下载限制的文件。", - "file_label": "Android 包文件", - "language_label": "报告语言", - "submit": "开始解析", - "busy": "正在上传并解析...", - "progress_label": "上传进度", - "progress_preparing": "准备上传...", - "progress_complete": "上传完成,正在生成报告...", - "network_error": "上传失败,请检查网络后重试。", - "max_hint": "当前入口建议上传不超过 {maxSize} 的文件。", - "choose_file": "请选择 .apk、.apks、.apkm 或 .xapk 文件。", - "invalid_file": "请上传 .apk、.apks、.apkm 或 .xapk 文件。", - "too_large": "文件超过当前 Worker 上传解析上限:{maxSize}。", - "parse_failed": "解析 Android 包失败:{message}" - }, "summary": { "completed": "APK 解析完成", "app_name": "应用名: {appName}", @@ -65,9 +45,9 @@ "request_body_too_large": "请求体过大。", "invalid_json_request_body": "请求体不是有效的 JSON。", "invalid_download_url": "仅支持 HTTP/HTTPS APK 下载链接。", - "remote_package_container_nested_manifest_unavailable": "这个链接指向 APKM/APKS/XAPK 容器。选中的内层 APK({selectedApkEntry})使用 {selectedApkCompression} 压缩,链接预览无法在不完整下载的情况下读取 AndroidManifest.xml。请上传文件,或提供直接 APK 下载链接。", + "remote_package_container_nested_manifest_unavailable": "这个链接指向 APKM/APKS/XAPK 容器。选中的内层 APK({selectedApkEntry})使用 {selectedApkCompression} 压缩,链接预览无法在不完整下载的情况下读取 AndroidManifest.xml。请在 WebUI 上传文件,或提供直接 APK 下载链接。", "manifest_missing": "APK 中缺少 AndroidManifest.xml。", - "remote_range_unsupported": "这个链接不支持 HTTP Range,无法在不完整下载的情况下解析。请上传文件,或使用支持 Range 请求的直接 APK 链接。", + "remote_range_unsupported": "这个链接不支持 HTTP Range,无法在不完整下载的情况下解析。请在 WebUI 上传文件,或使用支持 Range 请求的直接 APK 链接。", "central_directory_error": "无法读取 ZIP 中央目录,文件可能无效或暂不支持。", "manifest_error": "无法从这个包中读取 AndroidManifest.xml。", "remote_fetch_failed": "获取远程 APK 链接失败,请检查链接后重试。", @@ -76,11 +56,9 @@ "telegram_file_download_failed": "Telegram 文件下载失败 ({status})", "telegram_api_request_failed": "Telegram API {method} 请求失败 ({status})", "telegram_api_result_failed": "Telegram API {method} 返回失败", - "telegraph_invalid_path": "Telegraph 页面路径无效", - "telegraph_fetch_failed": "Telegraph 页面获取失败 ({status})", - "telegraph_fetch_failed_generic": "Telegraph 页面获取失败", - "telegraph_api_failed": "Telegraph API {method} 请求失败 ({status})", - "telegraph_api_result_failed": "Telegraph API {method} 返回失败" + "report_data_invalid_ref": "报告链接无效", + "report_data_not_found": "没有找到报告数据", + "report_data_bucket_missing": "报告存储未配置" }, "webui": { "subtitle": "在线分析 APK/APKS/APKM/XAPK", @@ -93,6 +71,21 @@ "themeSystem": "系统", "languageLabel": "语言", "exportJson": "导出 JSON", + "reportShare": "分享报告", + "reportShareTitle": "LibChecker 报告", + "reportShareText": "{appName} 的 LibChecker 报告", + "reportSharePreparing": "正在准备分享链接...", + "reportShareReady": "可以分享了", + "reportShareShared": "已分享", + "reportShareCopied": "链接已复制", + "reportShareFailed": "分享失败", + "reportShareDialogTitle": "分享报告", + "reportShareDialogSubtitle": "复制公开报告链接,或调用系统分享发送给别人", + "reportShareClose": "关闭分享弹窗", + "reportShareLinkLabel": "报告链接", + "reportShareCopy": "复制链接", + "reportShareSystem": "系统分享", + "reportShareNoLink": "链接不可用", "clear": "清空", "filePrompt": "选择或拖入", "fileIdle": "未选择文件", From 33ca36a7bea156556efe24759f579a95af5a1e88 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Thu, 9 Jul 2026 16:06:42 +0800 Subject: [PATCH 49/70] New translations en.json (Chinese Traditional) [ci skip] --- locales/zh-Hant.json | 59 +++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 33 deletions(-) diff --git a/locales/zh-Hant.json b/locales/zh-Hant.json index d5c99ad..0503058 100644 --- a/locales/zh-Hant.json +++ b/locales/zh-Hant.json @@ -5,43 +5,23 @@ }, "commands": { "start_description": "Show usage instructions", - "apkinfo_description": "Analyze the current or replied APK/APKS/APKM/XAPK file", - "upload_description": "Upload a large Android package for analysis" + "apkinfo_description": "Analyze the current or replied APK download link", + "upload_description": "Open the WebUI upload page" }, "bot": { - "start": "Hi! Send or forward an APK, APKS, APKM, or XAPK file and I'll analyze it automatically. You can also send an APK download link, and I'll try to parse it with HTTP Range by downloading only a small amount of metadata. In groups and channels, you can send an Android package directly, put /apkinfo in the file message or next to the APK link, or reply to a message containing an Android package with /apkinfo. For files larger than 20 MB, use /upload to open the web upload entry.", - "apk_not_found": "I couldn't find a parsable APK, APKS, APKM, XAPK file, or APK link. You can send or forward an Android package file directly, send an APK download link, or put /apkinfo in the same file/link message. If you're replying to analyze, make sure the replied message itself is an Android package file or APK link. In groups, forwarded files may not always include a complete file object for the bot, so I may be unable to retrieve them again from Telegram. In that case, please send the file directly in the group, send an APK download link, or forward it to me in a private chat. If Privacy Mode is enabled in the group, prefer using /apkinfo@bot_username.", - "apk_too_large": "This file exceeds Telegram Bot API's current 20 MB download limit. Use the button below to open the web upload entry and upload it directly to the Worker for analysis.", - "upload_entry": "Open the web upload entry, choose an APK, APKS, APKM, or XAPK file, and it will be parsed directly by the Worker. This bypasses Telegram Bot API's 20 MB file download limit, but Cloudflare Worker request body and memory limits still apply.", + "start": "Hi! Send an APK download link and I'll try to parse it with HTTP Range by downloading only a small amount of metadata. In groups and channels, put /apkinfo next to the APK link or reply to a message containing an APK link with /apkinfo. For local APK, APKS, APKM, or XAPK files, use /upload to open the WebUI and analyze them in your browser.", + "apk_not_found": "I couldn't find a parsable APK download link. Send an APK link, put /apkinfo next to the APK link, or reply to a message containing an APK link with /apkinfo. For local APK, APKS, APKM, or XAPK files, use /upload and upload them in the WebUI.", + "upload_entry": "Open the WebUI, choose an APK, APKS, APKM, or XAPK file, and analyze it locally in your browser.", "parse_failed": "Failed to parse Android package: {message}", "open_full_report": "Open Full Report", - "open_upload_page": "Upload Large File", + "open_upload_page": "Open WebUI", "source_channel": "Channel Message", "source_forwarded": "Forwarded Message", "source_private": "Private Chat Message", "source_group": "Group Message", - "source_web_upload": "Web Upload", "source_link_preview": "Link Preview", "source_default": "Telegram Message" }, - "upload": { - "page_title": "Upload Android Package for Analysis", - "heading": "Upload Android Package for Analysis", - "intro": "Upload an APK, APKS, APKM, or XAPK directly to the Worker. This is intended for files larger than Telegram Bot API's 20 MB download limit.", - "file_label": "Android Package File", - "language_label": "Report Language", - "submit": "Analyze", - "busy": "Uploading and analyzing...", - "progress_label": "Upload Progress", - "progress_preparing": "Preparing upload...", - "progress_complete": "Upload complete. Generating report...", - "network_error": "Upload failed. Please check your connection and try again.", - "max_hint": "This entry currently recommends files up to {maxSize}.", - "choose_file": "Choose an .apk, .apks, .apkm, or .xapk file.", - "invalid_file": "Please upload an .apk, .apks, .apkm, or .xapk file.", - "too_large": "The file exceeds the current Worker upload analysis limit: {maxSize}.", - "parse_failed": "Failed to parse Android package: {message}" - }, "summary": { "completed": "APK Analysis Complete", "app_name": "App Name: {appName}", @@ -65,9 +45,9 @@ "request_body_too_large": "Request body is too large.", "invalid_json_request_body": "Invalid JSON request body.", "invalid_download_url": "Only HTTP/HTTPS APK download links are supported.", - "remote_package_container_nested_manifest_unavailable": "This link points to an APKM/APKS/XAPK package. The selected inner APK ({selectedApkEntry}) is {selectedApkCompression}-compressed, so link preview cannot read AndroidManifest.xml without downloading the full package. Upload the file or provide a direct APK link.", + "remote_package_container_nested_manifest_unavailable": "This link points to an APKM/APKS/XAPK package. The selected inner APK ({selectedApkEntry}) is {selectedApkCompression}-compressed, so link preview cannot read AndroidManifest.xml without downloading the full package. Upload the file in the WebUI or provide a direct APK link.", "manifest_missing": "The APK is missing AndroidManifest.xml.", - "remote_range_unsupported": "This link does not support HTTP Range, so it cannot be parsed without a full download. Upload the file or use a direct APK link that supports Range requests.", + "remote_range_unsupported": "This link does not support HTTP Range, so it cannot be parsed without a full download. Upload the file in the WebUI or use a direct APK link that supports Range requests.", "central_directory_error": "The ZIP central directory could not be read. The file may be invalid or unsupported.", "manifest_error": "AndroidManifest.xml could not be read from this package.", "remote_fetch_failed": "Failed to fetch the remote APK link. Check the link and try again.", @@ -76,11 +56,9 @@ "telegram_file_download_failed": "Telegram file download failed ({status})", "telegram_api_request_failed": "Telegram API {method} request failed ({status})", "telegram_api_result_failed": "Telegram API {method} returned an error", - "telegraph_invalid_path": "Invalid Telegraph page path", - "telegraph_fetch_failed": "Failed to fetch Telegraph page ({status})", - "telegraph_fetch_failed_generic": "Failed to fetch Telegraph page", - "telegraph_api_failed": "Telegraph API {method} request failed ({status})", - "telegraph_api_result_failed": "Telegraph API {method} returned an error" + "report_data_invalid_ref": "Invalid report link.", + "report_data_not_found": "Report data was not found.", + "report_data_bucket_missing": "Report storage is not configured." }, "webui": { "subtitle": "APK/APKS/APKM/XAPK Analyzer in Browser", @@ -93,6 +71,21 @@ "themeSystem": "System", "languageLabel": "Language", "exportJson": "Export JSON", + "reportShare": "Share report", + "reportShareTitle": "LibChecker report", + "reportShareText": "LibChecker report for {appName}", + "reportSharePreparing": "Preparing share link...", + "reportShareReady": "Ready to share.", + "reportShareShared": "Shared.", + "reportShareCopied": "Link copied.", + "reportShareFailed": "Share failed.", + "reportShareDialogTitle": "Share report", + "reportShareDialogSubtitle": "Copy the public report link or send it with system share.", + "reportShareClose": "Close share dialog", + "reportShareLinkLabel": "Report link", + "reportShareCopy": "Copy link", + "reportShareSystem": "System share", + "reportShareNoLink": "Link unavailable", "clear": "Clear", "filePrompt": "Choose or drop", "fileIdle": "No file selected", From 20e82cf0832256c520c10b8629b22cf18b9dcaaf Mon Sep 17 00:00:00 2001 From: Absinthe Date: Fri, 10 Jul 2026 00:06:31 +0800 Subject: [PATCH 50/70] New translations en.json (Japanese) [ci skip] --- locales/ja_JP.json | 1 + 1 file changed, 1 insertion(+) diff --git a/locales/ja_JP.json b/locales/ja_JP.json index 0503058..c40296f 100644 --- a/locales/ja_JP.json +++ b/locales/ja_JP.json @@ -171,6 +171,7 @@ "heroVersionName": "Version Name", "heroVersionCode": "Version Code", "fileName": "File Name", + "downloadUrl": "Download Link", "fileSize": "File Size", "analyzedAt": "Analyzed At", "duration": "Duration", From 68e89d2cab11db25aa774f1f5419d402afa1f1c8 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Fri, 10 Jul 2026 00:06:32 +0800 Subject: [PATCH 51/70] New translations en.json (Korean) [ci skip] --- locales/ko_KR.json | 1 + 1 file changed, 1 insertion(+) diff --git a/locales/ko_KR.json b/locales/ko_KR.json index 0503058..c40296f 100644 --- a/locales/ko_KR.json +++ b/locales/ko_KR.json @@ -171,6 +171,7 @@ "heroVersionName": "Version Name", "heroVersionCode": "Version Code", "fileName": "File Name", + "downloadUrl": "Download Link", "fileSize": "File Size", "analyzedAt": "Analyzed At", "duration": "Duration", From 2ab754f57e6347b57673457616b6762cecf95df4 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Fri, 10 Jul 2026 00:06:34 +0800 Subject: [PATCH 52/70] New translations en.json (Chinese Simplified) [ci skip] --- locales/zh-Hans.json | 1 + 1 file changed, 1 insertion(+) diff --git a/locales/zh-Hans.json b/locales/zh-Hans.json index 663644f..c0d15eb 100644 --- a/locales/zh-Hans.json +++ b/locales/zh-Hans.json @@ -171,6 +171,7 @@ "heroVersionName": "版本名称", "heroVersionCode": "版本号", "fileName": "文件名", + "downloadUrl": "下载链接", "fileSize": "文件大小", "analyzedAt": "分析时间", "duration": "耗时", From 094c267d9b61d94c30d43ec38ef83b19952e0ecc Mon Sep 17 00:00:00 2001 From: Absinthe Date: Fri, 10 Jul 2026 00:06:35 +0800 Subject: [PATCH 53/70] New translations en.json (Chinese Traditional) [ci skip] --- locales/zh-Hant.json | 1 + 1 file changed, 1 insertion(+) diff --git a/locales/zh-Hant.json b/locales/zh-Hant.json index 0503058..c40296f 100644 --- a/locales/zh-Hant.json +++ b/locales/zh-Hant.json @@ -171,6 +171,7 @@ "heroVersionName": "Version Name", "heroVersionCode": "Version Code", "fileName": "File Name", + "downloadUrl": "Download Link", "fileSize": "File Size", "analyzedAt": "Analyzed At", "duration": "Duration", From 25e7fb4167b54947dae5da9df3d9c26e0e2e4e76 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Wed, 15 Jul 2026 11:40:12 +0800 Subject: [PATCH 54/70] New translations en.json (Japanese) [ci skip] --- locales/ja_JP.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/locales/ja_JP.json b/locales/ja_JP.json index c40296f..91d4afe 100644 --- a/locales/ja_JP.json +++ b/locales/ja_JP.json @@ -168,6 +168,8 @@ "workerFailed": "Failed to start the analyzer worker.", "appName": "App Name", "packageName": "Package Name", + "versionName": "Version Name", + "versionCode": "Version Code", "heroVersionName": "Version Name", "heroVersionCode": "Version Code", "fileName": "File Name", @@ -192,6 +194,10 @@ "summary": "Summary", "sdkNative": "Native Library SDK Markers", "sdkComponents": "Component SDK Markers", + "sdkNativeLibraryCountOne": "{count} library name", + "sdkNativeLibraryCountMany": "{count} library names", + "sdkNativeFileCountOne": "{count} file", + "sdkNativeFileCountMany": "{count} files", "unknown": "Unknown", "permission": "Permission", "process": "Process", From f5a7eeb8dff1563344640d1383c57b078dd497b1 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Wed, 15 Jul 2026 11:40:14 +0800 Subject: [PATCH 55/70] New translations en.json (Chinese Simplified) [ci skip] --- locales/zh-Hans.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/locales/zh-Hans.json b/locales/zh-Hans.json index c0d15eb..e5f6350 100644 --- a/locales/zh-Hans.json +++ b/locales/zh-Hans.json @@ -168,6 +168,8 @@ "workerFailed": "分析进程启动失败", "appName": "应用名", "packageName": "包名", + "versionName": "版本名称", + "versionCode": "版本号", "heroVersionName": "版本名称", "heroVersionCode": "版本号", "fileName": "文件名", @@ -192,6 +194,10 @@ "summary": "摘要", "sdkNative": "原生库 SDK 标记", "sdkComponents": "组件 SDK 标记", + "sdkNativeLibraryCountOne": "{count} 个库名", + "sdkNativeLibraryCountMany": "{count} 个库名", + "sdkNativeFileCountOne": "{count} 个文件", + "sdkNativeFileCountMany": "{count} 个文件", "unknown": "未知", "permission": "权限", "process": "进程", From 9ad520766ac8a9476405c347a137b533d0d356a7 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Wed, 15 Jul 2026 11:40:15 +0800 Subject: [PATCH 56/70] New translations en.json (Chinese Traditional) [ci skip] --- locales/zh-Hant.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/locales/zh-Hant.json b/locales/zh-Hant.json index c40296f..91d4afe 100644 --- a/locales/zh-Hant.json +++ b/locales/zh-Hant.json @@ -168,6 +168,8 @@ "workerFailed": "Failed to start the analyzer worker.", "appName": "App Name", "packageName": "Package Name", + "versionName": "Version Name", + "versionCode": "Version Code", "heroVersionName": "Version Name", "heroVersionCode": "Version Code", "fileName": "File Name", @@ -192,6 +194,10 @@ "summary": "Summary", "sdkNative": "Native Library SDK Markers", "sdkComponents": "Component SDK Markers", + "sdkNativeLibraryCountOne": "{count} library name", + "sdkNativeLibraryCountMany": "{count} library names", + "sdkNativeFileCountOne": "{count} file", + "sdkNativeFileCountMany": "{count} files", "unknown": "Unknown", "permission": "Permission", "process": "Process", From e8cd30d0a82f022898ede716590bf3fd1a6b65c3 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Wed, 15 Jul 2026 12:46:59 +0800 Subject: [PATCH 57/70] New translations en.json (Japanese) [ci skip] --- locales/ja_JP.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/locales/ja_JP.json b/locales/ja_JP.json index 91d4afe..d98ced2 100644 --- a/locales/ja_JP.json +++ b/locales/ja_JP.json @@ -1,8 +1,4 @@ { - "locale": { - "nativeName": "English", - "englishName": "English" - }, "commands": { "start_description": "Show usage instructions", "apkinfo_description": "Analyze the current or replied APK download link", From 246e597b2eb45a740bfbc35c0f54105e0c260991 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Wed, 15 Jul 2026 12:47:00 +0800 Subject: [PATCH 58/70] New translations en.json (Chinese Simplified) [ci skip] --- locales/zh-Hans.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/locales/zh-Hans.json b/locales/zh-Hans.json index e5f6350..42a7107 100644 --- a/locales/zh-Hans.json +++ b/locales/zh-Hans.json @@ -1,8 +1,4 @@ { - "locale": { - "nativeName": "中文简体", - "englishName": "Chinese (Simplified)" - }, "commands": { "start_description": "显示使用说明", "apkinfo_description": "解析当前或回复的 APK 下载链接", From caa543798599b996972141ebdb25e328acf2b2b7 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Wed, 15 Jul 2026 12:47:01 +0800 Subject: [PATCH 59/70] New translations en.json (Chinese Traditional) [ci skip] --- locales/zh-Hant.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/locales/zh-Hant.json b/locales/zh-Hant.json index 91d4afe..d98ced2 100644 --- a/locales/zh-Hant.json +++ b/locales/zh-Hant.json @@ -1,8 +1,4 @@ { - "locale": { - "nativeName": "English", - "englishName": "English" - }, "commands": { "start_description": "Show usage instructions", "apkinfo_description": "Analyze the current or replied APK download link", From 45c14971b9bf4434f6dee10dbc77f0e0fd79d928 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Wed, 15 Jul 2026 13:16:40 +0800 Subject: [PATCH 60/70] New translations en.json (Japanese) [ci skip] --- locales/ja.json | 263 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 263 insertions(+) create mode 100644 locales/ja.json diff --git a/locales/ja.json b/locales/ja.json new file mode 100644 index 0000000..c9c77c6 --- /dev/null +++ b/locales/ja.json @@ -0,0 +1,263 @@ +{ + "commands": { + "start_description": "使い方を表示", + "apkinfo_description": "現在または返信先の APK ダウンロードリンクを解析", + "upload_description": "WebUI のアップロードページを開く" + }, + "bot": { + "start": "APK のダウンロードリンクを解析できます。\n\nAPK のダウンロードリンクを送信すると、HTTP Range を使って少量のメタデータだけをダウンロードし、解析を試みます。\n\nグループとチャンネル\nAPK リンクの横に /apkinfo を入力するか、APK リンクを含むメッセージに返信して /apkinfo を送信してください。\n\nローカルファイル\nAPK、APKS、APKM、XAPK ファイルは /upload で WebUI を開き、ブラウザー内でローカル解析してください。", + "apk_not_found": "解析可能な APK ダウンロードリンクが見つかりませんでした。APK リンクを送信するか、APK リンクの横に /apkinfo を入力するか、APK リンクを含むメッセージに返信して /apkinfo を送信してください。ローカルの APK、APKS、APKM、XAPK ファイルは /upload から WebUI にアップロードしてください。", + "upload_entry": "WebUI を開いて APK、APKS、APKM、XAPK ファイルを選択すると、ブラウザー内でローカル解析できます。", + "parse_failed": "Android パッケージの解析に失敗しました:{message}", + "open_full_report": "詳細レポートを開く", + "open_upload_page": "WebUI を開く", + "source_channel": "チャンネルメッセージ", + "source_forwarded": "転送メッセージ", + "source_private": "プライベートチャット", + "source_group": "グループメッセージ", + "source_link_preview": "リンクプレビュー", + "source_default": "Telegram メッセージ" + }, + "summary": { + "completed": "APK の解析が完了しました", + "app_name": "アプリ名:{appName}", + "package_name": "パッケージ名:{packageName}", + "version_name": "バージョン名:{versionName}", + "version_code": "バージョンコード:{versionCode}", + "sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", + "permissions_count": "権限:{count}", + "native_library_count": "ネイティブライブラリ:{count}", + "component_count": "コンポーネント:{count}", + "meta_data_count": "メタデータ:{count}", + "sdk_markers": "SDK マーカー:{value}", + "features": "機能:{value}", + "open_report_hint": "下のボタンから詳細レポートを開いてください。", + "sdk_summary_native": "ネイティブライブラリ {count}", + "sdk_summary_components": "コンポーネント {count}", + "sdk_summary_more": "ほか {count} 件" + }, + "errors": { + "unknown": "不明なエラー", + "request_body_too_large": "リクエスト本文が大きすぎます。", + "invalid_json_request_body": "リクエスト本文が有効な JSON ではありません。", + "invalid_download_url": "HTTP/HTTPS の APK ダウンロードリンクのみ対応しています。", + "remote_package_container_nested_manifest_unavailable": "このリンクは APKM/APKS/XAPK パッケージを指しています。選択された内部 APK({selectedApkEntry})は {selectedApkCompression} で圧縮されているため、リンクプレビューではパッケージ全体をダウンロードせずに AndroidManifest.xml を読み取れません。WebUI にファイルをアップロードするか、APK への直接リンクを指定してください。", + "manifest_missing": "APK に AndroidManifest.xml がありません。", + "remote_range_unsupported": "このリンクは HTTP Range に対応していないため、ファイル全体をダウンロードせずに解析できません。WebUI にファイルをアップロードするか、Range リクエストに対応した APK への直接リンクを使用してください。", + "central_directory_error": "ZIP の中央ディレクトリを読み取れませんでした。ファイルが無効か、対応していない可能性があります。", + "manifest_error": "このパッケージから AndroidManifest.xml を読み取れませんでした。", + "remote_fetch_failed": "リモート APK リンクを取得できませんでした。リンクを確認してもう一度お試しください。", + "url_analysis_failed": "この APK リンクを解析できませんでした。", + "telegram_missing_file_path": "Telegram からダウンロード可能な file_path が返されませんでした", + "telegram_file_download_failed": "Telegram ファイルのダウンロードに失敗しました ({status})", + "telegram_api_request_failed": "Telegram API {method} リクエストに失敗しました ({status})", + "telegram_api_result_failed": "Telegram API {method} からエラーが返されました", + "report_data_invalid_ref": "レポートリンクが無効です", + "report_data_not_found": "レポートデータが見つかりませんでした", + "report_data_bucket_missing": "レポートストレージが設定されていません" + }, + "webui": { + "subtitle": "ブラウザーで APK/APKS/APKM/XAPK を解析", + "modeLabel": "モード", + "modeAnalyze": "解析", + "modeCompare": "比較", + "themeLabel": "テーマ", + "themeDark": "ダーク", + "themeLight": "ライト", + "themeSystem": "システム", + "languageLabel": "言語", + "exportJson": "JSON をエクスポート", + "reportShare": "レポートを共有", + "reportShareTitle": "LibChecker レポート", + "reportShareText": "{appName} の LibChecker レポート", + "reportSharePreparing": "共有リンクを準備しています...", + "reportShareReady": "共有できます", + "reportShareShared": "共有しました", + "reportShareCopied": "リンクをコピーしました", + "reportShareFailed": "共有に失敗しました", + "reportShareDialogTitle": "レポートを共有", + "reportShareDialogSubtitle": "公開レポートのリンクをコピーするか、システム共有で送信します", + "reportShareClose": "共有ダイアログを閉じる", + "reportShareLinkLabel": "レポートリンク", + "reportShareCopy": "リンクをコピー", + "reportShareSystem": "システム共有", + "reportShareNoLink": "リンクを利用できません", + "clear": "クリア", + "filePrompt": "選択またはドロップ", + "fileIdle": "ファイルが選択されていません", + "localNote": "*ローカルファイルは端末内で解析し、リンクからは必要なデータのみ読み取ります", + "linkPrompt": "またはダウンロードリンクを入力", + "linkInputLabel": "ダウンロードリンク", + "linkPlaceholder": "https://example.com/app.apk", + "linkClear": "リンクをクリア", + "linkAnalyze": "リンクを解析", + "linkNote": "サーバーが対応している場合は Range メタデータを使用します", + "linkIdle": "HTTP/HTTPS", + "linkReady": "準備完了", + "linkFetching": "取得中", + "linkDone": "完了", + "linkFailed": "失敗", + "runtimeLogOpen": "ログを表示", + "runtimeLogTitle": "ランタイムログ", + "runtimeLogSubtitle": "現在のページセッションのみ", + "runtimeLogExport": "ログをエクスポート", + "runtimeLogClose": "ログを閉じる", + "runtimeLogEmpty": "ログはまだありません", + "runtimeLogVersionLabel": "WebUI バージョン {version}", + "analyze": "解析", + "analyzing": "解析中", + "progressReady": "ファイルを待機中", + "progressPreparingLink": "リンク解析を準備中", + "progressDownloading": "APK メタデータを取得中", + "progressRemoteMetadata": "リモートファイルのメタデータを確認中", + "progressZipTail": "ZIP ディレクトリ末尾を読み取り中", + "progressCentralDirectory": "ZIP 中央ディレクトリを解析中", + "progressApkMetadata": "APK メタデータを読み取り中", + "progressSdkAnnotation": "SDK マーカーを照合中", + "progressReportBuild": "レポートを作成中", + "progressReading": "ファイルを読み取り中", + "progressParsing": "マニフェスト、リソース、DEX マーカーを解析中", + "progressFailed": "解析に失敗しました", + "progressDone": "解析が完了しました", + "historyTitle": "履歴", + "historyNote": "このブラウザーに保存されます。項目をクリックするとレポートを再表示できます", + "historyEmpty": "履歴はまだありません", + "historyOpen": "履歴項目を開く", + "historyOpening": "レポートを開いています...", + "historyDelete": "削除", + "historyExpand": "履歴を展開", + "historyCollapse": "履歴を折りたたむ", + "historyViewLabel": "履歴の表示形式", + "historyViewList": "リスト", + "historyViewGrid": "グリッド", + "clearHistory": "履歴をクリア", + "historyVersionName": "バージョン名", + "historyVersionCode": "バージョンコード", + "emptyTitle": "ファイルを待機中", + "emptyBody": "レポートには概要、SDK マーカー、コンポーネント、権限、署名、メタデータが表示されます", + "tabSummary": "概要", + "tabNative": "ネイティブ", + "tabComponents": "コンポーネント", + "tabPermissions": "権限", + "tabSignatures": "署名", + "tabMeta": "メタデータ", + "noFile": "APK、APKS、APKM、XAPK、LCAPPS ファイルを選択してください", + "invalidFile": ".apk、.apks、.apkm、.xapk、.lcapps ファイルをアップロードしてください", + "invalidLink": "HTTP/HTTPS の APK ダウンロードリンクを入力してください", + "lcappsTitle": "アプリを選択", + "lcappsSubtitle": "{name} · {count} 個のアプリ", + "lcappsSearch": "アプリまたはパッケージ名を検索", + "lcappsLoading": "アプリ一覧を読み取り中", + "lcappsClose": "閉じる", + "lcappsReopen": "アプリ一覧を再度開く", + "lcappsReopenWithApp": "{app} のアプリ一覧を再度開く", + "lcappsNoMatches": "一致するアプリがありません", + "lcappsReadFailed": ".lcapps ファイルを読み取れませんでした", + "lcappsInvalidZip": ".lcapps ファイルは有効な ZIP アーカイブではありません", + "lcappsUnsupportedZip64": "このブラウザーは ZIP64 形式の .lcapps ファイルにまだ対応していません", + "lcappsMissingJson": ".lcapps ファイルにアプリの JSON がありません", + "lcappsInvalidJson": ".lcapps ファイル内のアプリ JSON を解析できませんでした", + "lcappsUnsupportedCompression": ".lcapps ファイルはこのブラウザーで読み取れない圧縮方式を使用しています", + "lcappsEmpty": ".lcapps ファイルに表示可能なアプリがありません", + "unsupportedDecompression": "このブラウザーは DecompressionStream に対応していないため、ファイルをローカルで展開できません", + "unknownError": "不明なエラー", + "workerFailed": "解析 Worker を起動できませんでした", + "appName": "アプリ名", + "packageName": "パッケージ名", + "versionName": "バージョン名", + "versionCode": "バージョンコード", + "heroVersionName": "バージョン名", + "heroVersionCode": "バージョンコード", + "fileName": "ファイル名", + "downloadUrl": "ダウンロードリンク", + "fileSize": "ファイルサイズ", + "analyzedAt": "解析日時", + "duration": "所要時間", + "terminalSystem": "端末システム", + "permissions": "権限", + "nativeLibraries": "ネイティブライブラリ", + "components": "コンポーネント", + "signatures": "署名", + "metaData": "メタデータ", + "buildFeatures": "ビルド機能", + "noBuildFeatures": "ビルド機能は検出されませんでした", + "noNativeLibraries": "ネイティブライブラリが見つかりませんでした", + "noSdkMarkers": "一致する SDK マーカーがありません", + "noComponents": "コンポーネントは宣言されていません", + "noPermissions": "権限は宣言されていません", + "noSignatures": "署名証明書が見つかりませんでした", + "noMetaData": "アプリケーションレベルのメタデータは宣言されていません", + "summary": "概要", + "sdkNative": "ネイティブライブラリの SDK マーカー", + "sdkComponents": "コンポーネントの SDK マーカー", + "sdkNativeLibraryCountOne": "ライブラリ名 {count} 件", + "sdkNativeLibraryCountMany": "ライブラリ名 {count} 件", + "sdkNativeFileCountOne": "{count} ファイル", + "sdkNativeFileCountMany": "{count} ファイル", + "unknown": "不明", + "permission": "権限", + "process": "プロセス", + "path": "パス", + "size": "サイズ", + "value": "値", + "resource": "リソース", + "detectedRule": "一致したルール", + "ruleDevTeam": "開発者", + "ruleContributors": "コントリビューター", + "ruleSource": "ソース", + "signatureSchemes": "署名方式", + "signatureCertificate": "署名証明書 {index}", + "signatureVersion": "バージョン", + "signatureSerialNumber": "シリアル番号", + "signatureIssuer": "発行者", + "signatureSubject": "サブジェクト", + "signatureValidFrom": "有効期間の開始", + "signatureValidTo": "有効期間の終了", + "signaturePublicKeyFormat": "公開鍵形式", + "signaturePublicKeyAlgorithm": "公開鍵アルゴリズム", + "signaturePublicKeyExponent": "公開鍵の指数", + "signaturePublicKeyModulusSize": "モジュラスサイズ", + "signaturePublicKeyModulus": "モジュラス", + "signaturePublicKeyY": "公開鍵 Y", + "signaturePublicKeyType": "公開鍵タイプ", + "signatureAlgorithmName": "署名アルゴリズム", + "signatureAlgorithmOid": "署名アルゴリズム OID", + "signatureSourceEntry": "ソースエントリ", + "signatureDerLength": "証明書サイズ", + "rawNotice": "JSON ビューでは大きな data URI がデフォルトで省略されます", + "localFile": "ローカルファイル", + "archiveDistributionTitle": "分割 APK の構成", + "archiveDistributionSummary": "分割 APK {count} 個 · {size}", + "archiveDistributionPercent": "割合", + "archiveAnalyzedEntry": "メイン", + "compareSlotLeft": "左のファイル", + "compareSlotRight": "右のファイル", + "compareSlotNote": "ファイルをドロップするか、履歴から選択してください", + "compareDropPrompt": "クリックしてアップロードするか、ファイルをドロップ", + "compareSlotEmpty": "ファイルが選択されていません", + "compareSlotEmptyHint": "ファイルをアップロードするか、履歴項目を選択してください", + "compareHistoryLabel": "履歴", + "compareHistoryPlaceholder": "履歴から選択", + "compareClearLeft": "左をクリア", + "compareClearRight": "右をクリア", + "compareSourceHistory": "履歴", + "compareSourceUpload": "ローカルアップロード", + "comparePackageMismatch": "異なるパッケージ名を比較しています", + "compareAwaitingPair": "比較を開始するには、もう 1 つファイルを選択してください", + "compareChangeCount": "変更項目", + "compareBasicInfo": "基本情報", + "compareDifferences": "差分", + "compareNoDifferences": "差分はありません", + "compareField": "フィールド", + "compareLeft": "左", + "compareRight": "右", + "compareOnlyLeft": "左のみ", + "compareOnlyRight": "右のみ", + "compareAdded": "追加", + "compareDeleted": "削除", + "compareChanged": "変更", + "compareMoved": "移動", + "compareNoItems": "なし", + "compareMoreItems": "ほか {count} 件を非表示" + } +} From f61c7638b656320955b1ad8d6ac8d0d22517a44d Mon Sep 17 00:00:00 2001 From: Absinthe Date: Wed, 15 Jul 2026 13:16:42 +0800 Subject: [PATCH 61/70] New translations en.json (Chinese Traditional) [ci skip] --- locales/zh-Hant.json | 496 +++++++++++++++++++++---------------------- 1 file changed, 248 insertions(+), 248 deletions(-) diff --git a/locales/zh-Hant.json b/locales/zh-Hant.json index d98ced2..b11ca48 100644 --- a/locales/zh-Hant.json +++ b/locales/zh-Hant.json @@ -1,263 +1,263 @@ { "commands": { - "start_description": "Show usage instructions", - "apkinfo_description": "Analyze the current or replied APK download link", - "upload_description": "Open the WebUI upload page" + "start_description": "顯示使用說明", + "apkinfo_description": "解析目前或回覆中的 APK 下載連結", + "upload_description": "開啟 WebUI 上傳頁面" }, "bot": { - "start": "Hi! Send an APK download link and I'll try to parse it with HTTP Range by downloading only a small amount of metadata. In groups and channels, put /apkinfo next to the APK link or reply to a message containing an APK link with /apkinfo. For local APK, APKS, APKM, or XAPK files, use /upload to open the WebUI and analyze them in your browser.", - "apk_not_found": "I couldn't find a parsable APK download link. Send an APK link, put /apkinfo next to the APK link, or reply to a message containing an APK link with /apkinfo. For local APK, APKS, APKM, or XAPK files, use /upload and upload them in the WebUI.", - "upload_entry": "Open the WebUI, choose an APK, APKS, APKM, or XAPK file, and analyze it locally in your browser.", - "parse_failed": "Failed to parse Android package: {message}", - "open_full_report": "Open Full Report", - "open_upload_page": "Open WebUI", - "source_channel": "Channel Message", - "source_forwarded": "Forwarded Message", - "source_private": "Private Chat Message", - "source_group": "Group Message", - "source_link_preview": "Link Preview", - "source_default": "Telegram Message" + "start": "你好,我可以協助解析 APK 下載連結。\n\n傳送 APK 下載連結後,我會嘗試使用 HTTP Range,僅下載少量中繼資料進行解析。\n\n群組和頻道\n將 /apkinfo 放在 APK 連結旁,或回覆包含 APK 連結的訊息後傳送 /apkinfo。\n\n本機檔案\nAPK、APKS、APKM 或 XAPK 檔案請使用 /upload 開啟 WebUI,在瀏覽器中進行本機解析。", + "apk_not_found": "找不到可解析的 APK 下載連結。請傳送 APK 連結、將 /apkinfo 放在 APK 連結旁,或回覆包含 APK 連結的訊息後傳送 /apkinfo。本機 APK、APKS、APKM 或 XAPK 檔案請使用 /upload 到 WebUI 上傳解析。", + "upload_entry": "開啟 WebUI 後選擇 APK、APKS、APKM 或 XAPK 檔案,即可在瀏覽器中進行本機解析。", + "parse_failed": "解析 Android 套件失敗:{message}", + "open_full_report": "開啟完整報告", + "open_upload_page": "開啟 WebUI", + "source_channel": "頻道訊息", + "source_forwarded": "轉寄訊息", + "source_private": "私人聊天訊息", + "source_group": "群組訊息", + "source_link_preview": "連結預覽", + "source_default": "Telegram 訊息" }, "summary": { - "completed": "APK Analysis Complete", - "app_name": "App Name: {appName}", - "package_name": "Package Name: {packageName}", - "version_name": "Version Name: {versionName}", - "version_code": "Version Code: {versionCode}", + "completed": "APK 解析完成", + "app_name": "應用程式名稱:{appName}", + "package_name": "套件名稱:{packageName}", + "version_name": "版本名稱:{versionName}", + "version_code": "版本代碼:{versionCode}", "sdk": "SDK: Target {targetSdk} / Min {minSdk} / Compile {compileSdk}", - "permissions_count": "Permissions: {count}", - "native_library_count": "Native Libraries: {count}", - "component_count": "Components: {count}", - "meta_data_count": "Meta-Data: {count}", - "sdk_markers": "SDK Markers: {value}", - "features": "Features: {value}", - "open_report_hint": "Use the button below to open the full report.", - "sdk_summary_native": "Native Libraries {count}", - "sdk_summary_components": "Components {count}", - "sdk_summary_more": "+{count} more" + "permissions_count": "權限數量:{count}", + "native_library_count": "原生程式庫數量:{count}", + "component_count": "元件數量:{count}", + "meta_data_count": "中繼資料數量:{count}", + "sdk_markers": "SDK 標記:{value}", + "features": "特性:{value}", + "open_report_hint": "請使用下方按鈕開啟完整報告。", + "sdk_summary_native": "原生程式庫 {count}", + "sdk_summary_components": "元件 {count}", + "sdk_summary_more": "另有 {count} 個" }, "errors": { - "unknown": "Unknown error", - "request_body_too_large": "Request body is too large.", - "invalid_json_request_body": "Invalid JSON request body.", - "invalid_download_url": "Only HTTP/HTTPS APK download links are supported.", - "remote_package_container_nested_manifest_unavailable": "This link points to an APKM/APKS/XAPK package. The selected inner APK ({selectedApkEntry}) is {selectedApkCompression}-compressed, so link preview cannot read AndroidManifest.xml without downloading the full package. Upload the file in the WebUI or provide a direct APK link.", - "manifest_missing": "The APK is missing AndroidManifest.xml.", - "remote_range_unsupported": "This link does not support HTTP Range, so it cannot be parsed without a full download. Upload the file in the WebUI or use a direct APK link that supports Range requests.", - "central_directory_error": "The ZIP central directory could not be read. The file may be invalid or unsupported.", - "manifest_error": "AndroidManifest.xml could not be read from this package.", - "remote_fetch_failed": "Failed to fetch the remote APK link. Check the link and try again.", - "url_analysis_failed": "Failed to parse this APK link.", - "telegram_missing_file_path": "Telegram did not return a downloadable file_path", - "telegram_file_download_failed": "Telegram file download failed ({status})", - "telegram_api_request_failed": "Telegram API {method} request failed ({status})", - "telegram_api_result_failed": "Telegram API {method} returned an error", - "report_data_invalid_ref": "Invalid report link.", - "report_data_not_found": "Report data was not found.", - "report_data_bucket_missing": "Report storage is not configured." + "unknown": "未知錯誤", + "request_body_too_large": "請求本文過大。", + "invalid_json_request_body": "請求本文不是有效的 JSON。", + "invalid_download_url": "僅支援 HTTP/HTTPS APK 下載連結。", + "remote_package_container_nested_manifest_unavailable": "此連結指向 APKM/APKS/XAPK 容器。所選的內層 APK({selectedApkEntry})使用 {selectedApkCompression} 壓縮,因此連結預覽無法在不下載完整套件的情況下讀取 AndroidManifest.xml。請在 WebUI 上傳檔案,或提供直接 APK 下載連結。", + "manifest_missing": "APK 中缺少 AndroidManifest.xml。", + "remote_range_unsupported": "此連結不支援 HTTP Range,無法在不完整下載的情況下解析。請在 WebUI 上傳檔案,或使用支援 Range 請求的直接 APK 連結。", + "central_directory_error": "無法讀取 ZIP 中央目錄,檔案可能無效或尚未支援。", + "manifest_error": "無法從此套件讀取 AndroidManifest.xml。", + "remote_fetch_failed": "取得遠端 APK 連結失敗,請檢查連結後再試一次。", + "url_analysis_failed": "解析此 APK 連結失敗。", + "telegram_missing_file_path": "Telegram 未傳回可下載的 file_path", + "telegram_file_download_failed": "Telegram 檔案下載失敗 ({status})", + "telegram_api_request_failed": "Telegram API {method} 請求失敗 ({status})", + "telegram_api_result_failed": "Telegram API {method} 傳回錯誤", + "report_data_invalid_ref": "報告連結無效", + "report_data_not_found": "找不到報告資料", + "report_data_bucket_missing": "尚未設定報告儲存空間" }, "webui": { - "subtitle": "APK/APKS/APKM/XAPK Analyzer in Browser", - "modeLabel": "Mode", - "modeAnalyze": "Analyze", - "modeCompare": "Compare", - "themeLabel": "Theme", - "themeDark": "Dark", - "themeLight": "Light", - "themeSystem": "System", - "languageLabel": "Language", - "exportJson": "Export JSON", - "reportShare": "Share report", - "reportShareTitle": "LibChecker report", - "reportShareText": "LibChecker report for {appName}", - "reportSharePreparing": "Preparing share link...", - "reportShareReady": "Ready to share.", - "reportShareShared": "Shared.", - "reportShareCopied": "Link copied.", - "reportShareFailed": "Share failed.", - "reportShareDialogTitle": "Share report", - "reportShareDialogSubtitle": "Copy the public report link or send it with system share.", - "reportShareClose": "Close share dialog", - "reportShareLinkLabel": "Report link", - "reportShareCopy": "Copy link", - "reportShareSystem": "System share", - "reportShareNoLink": "Link unavailable", - "clear": "Clear", - "filePrompt": "Choose or drop", - "fileIdle": "No file selected", - "localNote": "*Local files. Links read needed data.", - "linkPrompt": "Or type a download link", - "linkInputLabel": "Download link", + "subtitle": "在瀏覽器中分析 APK/APKS/APKM/XAPK", + "modeLabel": "模式", + "modeAnalyze": "分析", + "modeCompare": "比較", + "themeLabel": "主題", + "themeDark": "深色", + "themeLight": "淺色", + "themeSystem": "系統", + "languageLabel": "語言", + "exportJson": "匯出 JSON", + "reportShare": "分享報告", + "reportShareTitle": "LibChecker 報告", + "reportShareText": "{appName} 的 LibChecker 報告", + "reportSharePreparing": "正在準備分享連結...", + "reportShareReady": "已可分享", + "reportShareShared": "已分享", + "reportShareCopied": "已複製連結", + "reportShareFailed": "分享失敗", + "reportShareDialogTitle": "分享報告", + "reportShareDialogSubtitle": "複製公開報告連結,或透過系統分享傳送", + "reportShareClose": "關閉分享對話框", + "reportShareLinkLabel": "報告連結", + "reportShareCopy": "複製連結", + "reportShareSystem": "系統分享", + "reportShareNoLink": "連結無法使用", + "clear": "清除", + "filePrompt": "選擇或拖放", + "fileIdle": "尚未選擇檔案", + "localNote": "*本機檔案在裝置內分析,連結僅讀取必要資料", + "linkPrompt": "或輸入下載連結", + "linkInputLabel": "下載連結", "linkPlaceholder": "https://example.com/app.apk", - "linkClear": "Clear link", - "linkAnalyze": "Analyze link", - "linkNote": "Range metadata is used when the server supports it.", + "linkClear": "清除連結", + "linkAnalyze": "分析連結", + "linkNote": "伺服器支援時會使用 Range 中繼資料進行解析", "linkIdle": "HTTP/HTTPS", - "linkReady": "Ready", - "linkFetching": "Fetching", - "linkDone": "Done", - "linkFailed": "Failed", - "runtimeLogOpen": "Show logs", - "runtimeLogTitle": "Runtime logs", - "runtimeLogSubtitle": "Current page session only.", - "runtimeLogExport": "Export logs", - "runtimeLogClose": "Close logs", - "runtimeLogEmpty": "No logs yet.", - "runtimeLogVersionLabel": "WebUI version {version}", - "analyze": "Analyze", - "analyzing": "Analyzing", - "progressReady": "Waiting for file", - "progressPreparingLink": "Preparing link analysis", - "progressDownloading": "Fetching APK metadata", - "progressRemoteMetadata": "Checking remote file metadata", - "progressZipTail": "Reading ZIP directory tail", - "progressCentralDirectory": "Parsing ZIP central directory", - "progressApkMetadata": "Reading APK metadata", - "progressSdkAnnotation": "Matching SDK markers", - "progressReportBuild": "Building report", - "progressReading": "Reading file", - "progressParsing": "Parsing manifest, resources, and DEX markers", - "progressFailed": "Analysis failed", - "progressDone": "Analysis complete", - "historyTitle": "History", - "historyNote": "Saved in this browser. Click an item to reopen the report.", - "historyEmpty": "No history yet.", - "historyOpen": "Open history item", - "historyOpening": "Opening report...", - "historyDelete": "Delete", - "historyExpand": "Expand History", - "historyCollapse": "Collapse History", - "historyViewLabel": "History view", - "historyViewList": "List", - "historyViewGrid": "Grid", - "clearHistory": "Clear History", - "historyVersionName": "Version Name", - "historyVersionCode": "Version Code", - "emptyTitle": "Waiting for file", - "emptyBody": "The report will show summary, SDK markers, components, permissions, signatures, and meta-data.", - "tabSummary": "Summary", - "tabNative": "Native", - "tabComponents": "Components", - "tabPermissions": "Permissions", - "tabSignatures": "Signatures", - "tabMeta": "Meta-Data", - "noFile": "Choose an APK, APKS, APKM, XAPK, or LCAPPS file.", - "invalidFile": "Please upload an .apk, .apks, .apkm, .xapk, or .lcapps file.", - "invalidLink": "Enter an HTTP/HTTPS APK download link.", - "lcappsTitle": "Choose App", - "lcappsSubtitle": "{name} · {count} apps", - "lcappsSearch": "Search apps or package names", - "lcappsLoading": "Reading app list", - "lcappsClose": "Close", - "lcappsReopen": "Reopen app list", - "lcappsReopenWithApp": "Reopen {app} app list", - "lcappsNoMatches": "No matching apps", - "lcappsReadFailed": "Failed to read the .lcapps file.", - "lcappsInvalidZip": "The .lcapps file is not a valid ZIP archive.", - "lcappsUnsupportedZip64": "This browser does not support ZIP64 .lcapps files yet.", - "lcappsMissingJson": "No app JSON was found in the .lcapps file.", - "lcappsInvalidJson": "The app JSON in the .lcapps file could not be parsed.", - "lcappsUnsupportedCompression": "The .lcapps file uses a compression method this browser cannot read.", - "lcappsEmpty": "The .lcapps file does not contain any displayable apps.", - "unsupportedDecompression": "This browser does not support DecompressionStream, so the file cannot be decompressed locally.", - "unknownError": "Unknown error.", - "workerFailed": "Failed to start the analyzer worker.", - "appName": "App Name", - "packageName": "Package Name", - "versionName": "Version Name", - "versionCode": "Version Code", - "heroVersionName": "Version Name", - "heroVersionCode": "Version Code", - "fileName": "File Name", - "downloadUrl": "Download Link", - "fileSize": "File Size", - "analyzedAt": "Analyzed At", - "duration": "Duration", - "terminalSystem": "Terminal System", - "permissions": "Permissions", - "nativeLibraries": "Native Libraries", - "components": "Components", - "signatures": "Signatures", - "metaData": "Meta-Data", - "buildFeatures": "Build Features", - "noBuildFeatures": "No build features detected.", - "noNativeLibraries": "No native libraries found.", - "noSdkMarkers": "No SDK markers matched.", - "noComponents": "No components declared.", - "noPermissions": "No permissions declared.", - "noSignatures": "No signature certificates found.", - "noMetaData": "No application-level meta-data declared.", - "summary": "Summary", - "sdkNative": "Native Library SDK Markers", - "sdkComponents": "Component SDK Markers", - "sdkNativeLibraryCountOne": "{count} library name", - "sdkNativeLibraryCountMany": "{count} library names", - "sdkNativeFileCountOne": "{count} file", - "sdkNativeFileCountMany": "{count} files", - "unknown": "Unknown", - "permission": "Permission", - "process": "Process", - "path": "Path", - "size": "Size", - "value": "Value", - "resource": "Resource", - "detectedRule": "Matched Rule", - "ruleDevTeam": "Developer", - "ruleContributors": "Contributors", - "ruleSource": "Source", - "signatureSchemes": "Signing Schemes", - "signatureCertificate": "Signature Certificate {index}", - "signatureVersion": "Version", - "signatureSerialNumber": "Serial Number", - "signatureIssuer": "Issuer", - "signatureSubject": "Subject", - "signatureValidFrom": "Valid From", - "signatureValidTo": "Valid To", - "signaturePublicKeyFormat": "Public Key Format", - "signaturePublicKeyAlgorithm": "Public Key Algorithm", - "signaturePublicKeyExponent": "Public Key Exponent", - "signaturePublicKeyModulusSize": "Modulus Size", - "signaturePublicKeyModulus": "Modulus", - "signaturePublicKeyY": "Public Key Y", - "signaturePublicKeyType": "Public Key Type", - "signatureAlgorithmName": "Signature Algorithm", - "signatureAlgorithmOid": "Signature Algorithm OID", - "signatureSourceEntry": "Source Entry", - "signatureDerLength": "Certificate Size", - "rawNotice": "The JSON view omits large data URIs by default.", - "localFile": "Local file", - "archiveDistributionTitle": "Split APK Distribution", - "archiveDistributionSummary": "{count} split APKs · {size}", - "archiveDistributionPercent": "Share", - "archiveAnalyzedEntry": "main", - "compareSlotLeft": "Left File", - "compareSlotRight": "Right File", - "compareSlotNote": "Drop a file, or choose from history.", - "compareDropPrompt": "Click to upload or drop file", - "compareSlotEmpty": "No file selected", - "compareSlotEmptyHint": "Upload a file, or choose one history item.", - "compareHistoryLabel": "History", - "compareHistoryPlaceholder": "Choose from history", - "compareClearLeft": "Clear left", - "compareClearRight": "Clear right", - "compareSourceHistory": "History", - "compareSourceUpload": "Local upload", - "comparePackageMismatch": "Comparing different package names", - "compareAwaitingPair": "Choose one more file to start comparing.", - "compareChangeCount": "Changed Items", - "compareBasicInfo": "Basic Info", - "compareDifferences": "Differences", - "compareNoDifferences": "No differences found.", - "compareField": "Field", - "compareLeft": "Left", - "compareRight": "Right", - "compareOnlyLeft": "Left Only", - "compareOnlyRight": "Right Only", - "compareAdded": "Added", - "compareDeleted": "Deleted", - "compareChanged": "Changed", - "compareMoved": "Moved", - "compareNoItems": "None", - "compareMoreItems": "{count} more items hidden" + "linkReady": "已就緒", + "linkFetching": "正在取得", + "linkDone": "完成", + "linkFailed": "失敗", + "runtimeLogOpen": "顯示記錄", + "runtimeLogTitle": "執行階段記錄", + "runtimeLogSubtitle": "僅保留目前頁面工作階段", + "runtimeLogExport": "匯出記錄", + "runtimeLogClose": "關閉記錄", + "runtimeLogEmpty": "尚無記錄", + "runtimeLogVersionLabel": "WebUI 版本 {version}", + "analyze": "開始分析", + "analyzing": "分析中", + "progressReady": "等待檔案", + "progressPreparingLink": "準備連結分析", + "progressDownloading": "取得 APK 中繼資料", + "progressRemoteMetadata": "檢查遠端檔案中繼資料", + "progressZipTail": "讀取 ZIP 尾端目錄", + "progressCentralDirectory": "解析 ZIP 中央目錄", + "progressApkMetadata": "讀取 APK 中繼資料", + "progressSdkAnnotation": "比對 SDK 標記", + "progressReportBuild": "建立報告", + "progressReading": "讀取檔案", + "progressParsing": "解析 Manifest、資源與 DEX 標記", + "progressFailed": "分析失敗", + "progressDone": "分析完成", + "historyTitle": "歷史紀錄", + "historyNote": "儲存在此瀏覽器中,按一下項目即可重新開啟報告", + "historyEmpty": "尚無歷史紀錄", + "historyOpen": "開啟歷史紀錄項目", + "historyOpening": "正在開啟報告...", + "historyDelete": "刪除", + "historyExpand": "展開歷史紀錄", + "historyCollapse": "收合歷史紀錄", + "historyViewLabel": "歷史紀錄檢視", + "historyViewList": "清單", + "historyViewGrid": "格狀", + "clearHistory": "清除歷史紀錄", + "historyVersionName": "版本名稱", + "historyVersionCode": "版本代碼", + "emptyTitle": "等待檔案", + "emptyBody": "報告會顯示摘要、SDK 標記、元件、權限、簽章和中繼資料", + "tabSummary": "摘要", + "tabNative": "原生程式庫", + "tabComponents": "元件", + "tabPermissions": "權限", + "tabSignatures": "簽章", + "tabMeta": "中繼資料", + "noFile": "請選擇 APK、APKS、APKM、XAPK 或 LCAPPS 檔案", + "invalidFile": "請上傳 .apk、.apks、.apkm、.xapk 或 .lcapps 檔案", + "invalidLink": "請輸入 HTTP/HTTPS APK 下載連結", + "lcappsTitle": "選擇應用程式", + "lcappsSubtitle": "{name} · {count} 個應用程式", + "lcappsSearch": "搜尋應用程式或套件名稱", + "lcappsLoading": "正在讀取應用程式清單", + "lcappsClose": "關閉", + "lcappsReopen": "重新開啟應用程式清單", + "lcappsReopenWithApp": "重新開啟 {app} 的應用程式清單", + "lcappsNoMatches": "沒有相符的應用程式", + "lcappsReadFailed": "讀取 .lcapps 檔案失敗", + "lcappsInvalidZip": ".lcapps 檔案不是有效的 ZIP 封存檔", + "lcappsUnsupportedZip64": "此瀏覽器尚不支援 ZIP64 格式的 .lcapps 檔案", + "lcappsMissingJson": ".lcapps 檔案中找不到應用程式 JSON", + "lcappsInvalidJson": "無法解析 .lcapps 檔案中的應用程式 JSON", + "lcappsUnsupportedCompression": ".lcapps 檔案使用此瀏覽器無法讀取的壓縮方式", + "lcappsEmpty": ".lcapps 檔案中沒有可顯示的應用程式", + "unsupportedDecompression": "此瀏覽器不支援 DecompressionStream,因此無法在本機解壓縮檔案", + "unknownError": "未知錯誤", + "workerFailed": "無法啟動分析 Worker", + "appName": "應用程式名稱", + "packageName": "套件名稱", + "versionName": "版本名稱", + "versionCode": "版本代碼", + "heroVersionName": "版本名稱", + "heroVersionCode": "版本代碼", + "fileName": "檔案名稱", + "downloadUrl": "下載連結", + "fileSize": "檔案大小", + "analyzedAt": "分析時間", + "duration": "耗時", + "terminalSystem": "終端系統", + "permissions": "權限", + "nativeLibraries": "原生程式庫", + "components": "元件", + "signatures": "簽章", + "metaData": "中繼資料", + "buildFeatures": "建置特性", + "noBuildFeatures": "未偵測到建置特性", + "noNativeLibraries": "找不到原生程式庫", + "noSdkMarkers": "沒有相符的 SDK 標記", + "noComponents": "未宣告元件", + "noPermissions": "未宣告權限", + "noSignatures": "找不到簽章憑證", + "noMetaData": "未宣告應用程式層級的中繼資料", + "summary": "摘要", + "sdkNative": "原生程式庫 SDK 標記", + "sdkComponents": "元件 SDK 標記", + "sdkNativeLibraryCountOne": "{count} 個程式庫名稱", + "sdkNativeLibraryCountMany": "{count} 個程式庫名稱", + "sdkNativeFileCountOne": "{count} 個檔案", + "sdkNativeFileCountMany": "{count} 個檔案", + "unknown": "未知", + "permission": "權限", + "process": "程序", + "path": "路徑", + "size": "大小", + "value": "值", + "resource": "資源", + "detectedRule": "相符規則", + "ruleDevTeam": "開發團隊", + "ruleContributors": "貢獻者", + "ruleSource": "來源", + "signatureSchemes": "簽章配置", + "signatureCertificate": "簽章憑證 {index}", + "signatureVersion": "版本", + "signatureSerialNumber": "序號", + "signatureIssuer": "簽發者", + "signatureSubject": "主體", + "signatureValidFrom": "有效期起始", + "signatureValidTo": "有效期結束", + "signaturePublicKeyFormat": "公開金鑰格式", + "signaturePublicKeyAlgorithm": "公開金鑰演算法", + "signaturePublicKeyExponent": "公開金鑰指數", + "signaturePublicKeyModulusSize": "模數大小", + "signaturePublicKeyModulus": "模數", + "signaturePublicKeyY": "公開金鑰 Y 值", + "signaturePublicKeyType": "公開金鑰類型", + "signatureAlgorithmName": "簽章演算法", + "signatureAlgorithmOid": "簽章演算法 OID", + "signatureSourceEntry": "來源項目", + "signatureDerLength": "憑證大小", + "rawNotice": "JSON 檢視預設省略大型 data URI", + "localFile": "本機檔案", + "archiveDistributionTitle": "分割 APK 分布", + "archiveDistributionSummary": "{count} 個分割 APK · {size}", + "archiveDistributionPercent": "占比", + "archiveAnalyzedEntry": "主 APK", + "compareSlotLeft": "左側檔案", + "compareSlotRight": "右側檔案", + "compareSlotNote": "拖放檔案,或從歷史紀錄中選擇", + "compareDropPrompt": "按一下上傳或拖放檔案", + "compareSlotEmpty": "尚未選擇檔案", + "compareSlotEmptyHint": "上傳檔案,或選擇一筆歷史紀錄", + "compareHistoryLabel": "歷史紀錄", + "compareHistoryPlaceholder": "從歷史紀錄中選擇", + "compareClearLeft": "清除左側", + "compareClearRight": "清除右側", + "compareSourceHistory": "歷史紀錄", + "compareSourceUpload": "本機上傳", + "comparePackageMismatch": "正在比較不同的套件名稱", + "compareAwaitingPair": "再選擇一個檔案即可開始比較", + "compareChangeCount": "變更項目", + "compareBasicInfo": "基本資訊", + "compareDifferences": "差異", + "compareNoDifferences": "找不到差異", + "compareField": "欄位", + "compareLeft": "左側", + "compareRight": "右側", + "compareOnlyLeft": "僅左側", + "compareOnlyRight": "僅右側", + "compareAdded": "新增", + "compareDeleted": "刪除", + "compareChanged": "已變更", + "compareMoved": "已移動", + "compareNoItems": "無", + "compareMoreItems": "另有 {count} 個項目未顯示" } } From 0ec658ea6bed83e8a4f6638c973792ebb2fc5515 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Wed, 15 Jul 2026 22:32:47 +0800 Subject: [PATCH 62/70] New translations en.json (Japanese) [ci skip] --- locales/ja.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/locales/ja.json b/locales/ja.json index c9c77c6..dd7bdb1 100644 --- a/locales/ja.json +++ b/locales/ja.json @@ -176,6 +176,22 @@ "terminalSystem": "端末システム", "permissions": "権限", "nativeLibraries": "ネイティブライブラリ", + "elfDetailsButton": "{name} の ELF 詳細を表示", + "elfDetailsLoading": "ELF の詳細を読み込んでいます…", + "elfDetailsUnavailableTitle": "完全な ELF 詳細を表示できません", + "elfDetailsSourceUnavailable": "このライブラリを調べるには、元のローカルファイルを再解析してください。", + "elfDetailsUnavailable": "このライブラリを対応する ELF ファイルとして解析できませんでした。", + "elfHeader": "ELF ヘッダー", + "elfProgramHeaders": "プログラムヘッダー", + "elfSectionHeaders": "セクションヘッダー", + "elfDynamicLinks": "動的リンク", + "elfSymbols": "シンボル", + "elfNotes": "ノート", + "elfNoEntries": "項目はありません。", + "elfDetailsTruncated": "{total} 件中 {count} 件を表示しています。", + "elfNeededLibraries": "必要なライブラリ", + "elfClass": "ELF クラス", + "elfPageAlignment": "ページアラインメント", "components": "コンポーネント", "signatures": "署名", "metaData": "メタデータ", From 199750b1896eb246c17e7fede324626fe65596e1 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Wed, 15 Jul 2026 22:32:49 +0800 Subject: [PATCH 63/70] New translations en.json (Chinese Simplified) [ci skip] --- locales/zh-Hans.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/locales/zh-Hans.json b/locales/zh-Hans.json index 42a7107..a0c2744 100644 --- a/locales/zh-Hans.json +++ b/locales/zh-Hans.json @@ -176,6 +176,22 @@ "terminalSystem": "终端系统", "permissions": "权限", "nativeLibraries": "原生库", + "elfDetailsButton": "查看 {name} 的 ELF 详情", + "elfDetailsLoading": "正在读取 ELF 详情…", + "elfDetailsUnavailableTitle": "无法查看完整 ELF 详情", + "elfDetailsSourceUnavailable": "请重新分析原始本地文件以检查此原生库。", + "elfDetailsUnavailable": "无法将此原生库解析为受支持的 ELF 文件。", + "elfHeader": "ELF 文件头", + "elfProgramHeaders": "程序头", + "elfSectionHeaders": "节头", + "elfDynamicLinks": "动态链接", + "elfSymbols": "符号", + "elfNotes": "Note 信息", + "elfNoEntries": "未发现条目。", + "elfDetailsTruncated": "显示 {total} 个条目中的 {count} 个。", + "elfNeededLibraries": "依赖库", + "elfClass": "ELF 位数", + "elfPageAlignment": "页面对齐", "components": "组件", "signatures": "签名", "metaData": "元数据", From 8677ca457c07b131b9ffb051d9fb29be2e9aa357 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Wed, 15 Jul 2026 22:32:50 +0800 Subject: [PATCH 64/70] New translations en.json (Chinese Traditional) [ci skip] --- locales/zh-Hant.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/locales/zh-Hant.json b/locales/zh-Hant.json index b11ca48..9111fc9 100644 --- a/locales/zh-Hant.json +++ b/locales/zh-Hant.json @@ -176,6 +176,22 @@ "terminalSystem": "終端系統", "permissions": "權限", "nativeLibraries": "原生程式庫", + "elfDetailsButton": "檢視 {name} 的 ELF 詳情", + "elfDetailsLoading": "正在讀取 ELF 詳情…", + "elfDetailsUnavailableTitle": "無法檢視完整 ELF 詳情", + "elfDetailsSourceUnavailable": "請重新分析原始本機檔案以檢查此原生程式庫。", + "elfDetailsUnavailable": "無法將此原生程式庫解析為支援的 ELF 檔案。", + "elfHeader": "ELF 檔案標頭", + "elfProgramHeaders": "程式標頭", + "elfSectionHeaders": "節區標頭", + "elfDynamicLinks": "動態連結", + "elfSymbols": "符號", + "elfNotes": "Note 資訊", + "elfNoEntries": "找不到項目。", + "elfDetailsTruncated": "顯示 {total} 個項目中的 {count} 個。", + "elfNeededLibraries": "相依程式庫", + "elfClass": "ELF 位元數", + "elfPageAlignment": "頁面對齊", "components": "元件", "signatures": "簽章", "metaData": "中繼資料", From 3d661faeeb2824a3166b78281e53106c154903ed Mon Sep 17 00:00:00 2001 From: Absinthe Date: Thu, 16 Jul 2026 17:44:09 +0800 Subject: [PATCH 65/70] New translations en.json (Japanese) [ci skip] --- locales/ja.json | 1 + 1 file changed, 1 insertion(+) diff --git a/locales/ja.json b/locales/ja.json index dd7bdb1..6a2b4ca 100644 --- a/locales/ja.json +++ b/locales/ja.json @@ -192,6 +192,7 @@ "elfNeededLibraries": "必要なライブラリ", "elfClass": "ELF クラス", "elfPageAlignment": "ページアラインメント", + "elfZipAlignmentCompressed": "圧縮済み / 対象外", "components": "コンポーネント", "signatures": "署名", "metaData": "メタデータ", From ee1fd4a5aed769cd426a5bd1369fe68085b06b44 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Thu, 16 Jul 2026 17:44:11 +0800 Subject: [PATCH 66/70] New translations en.json (Chinese Simplified) [ci skip] --- locales/zh-Hans.json | 1 + 1 file changed, 1 insertion(+) diff --git a/locales/zh-Hans.json b/locales/zh-Hans.json index a0c2744..8937fd7 100644 --- a/locales/zh-Hans.json +++ b/locales/zh-Hans.json @@ -192,6 +192,7 @@ "elfNeededLibraries": "依赖库", "elfClass": "ELF 位数", "elfPageAlignment": "页面对齐", + "elfZipAlignmentCompressed": "已压缩 / 不适用", "components": "组件", "signatures": "签名", "metaData": "元数据", From 8b83208e409b30e0616a37b75866c2f96990ffee Mon Sep 17 00:00:00 2001 From: Absinthe Date: Thu, 16 Jul 2026 17:44:12 +0800 Subject: [PATCH 67/70] New translations en.json (Chinese Traditional) [ci skip] --- locales/zh-Hant.json | 1 + 1 file changed, 1 insertion(+) diff --git a/locales/zh-Hant.json b/locales/zh-Hant.json index 9111fc9..b77811f 100644 --- a/locales/zh-Hant.json +++ b/locales/zh-Hant.json @@ -192,6 +192,7 @@ "elfNeededLibraries": "相依程式庫", "elfClass": "ELF 位元數", "elfPageAlignment": "頁面對齊", + "elfZipAlignmentCompressed": "已壓縮 / 不適用", "components": "元件", "signatures": "簽章", "metaData": "中繼資料", From 5407ea545cff4fe7fb4a9f649ceca508673405d9 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Thu, 16 Jul 2026 19:30:31 +0800 Subject: [PATCH 68/70] New translations en.json (Japanese) [ci skip] --- locales/ja.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/locales/ja.json b/locales/ja.json index 6a2b4ca..da3fd09 100644 --- a/locales/ja.json +++ b/locales/ja.json @@ -82,6 +82,19 @@ "reportShareCopy": "リンクをコピー", "reportShareSystem": "システム共有", "reportShareNoLink": "リンクを利用できません", + "pwaGuideEyebrow": "デスクトップショートカット", + "pwaGuideTitle": "右クリックメニューから直接解析", + "pwaGuideBody": "LibChecker WebUI をインストールすると、Finder またはエクスプローラーから APK、APKS、APKM、XAPK ファイルを直接開けます。", + "pwaGuideInstall": "アプリをインストール", + "pwaGuideDismiss": "インストールガイドを閉じる", + "pwaGuideManual": "インストール案内が表示されない場合は、Chrome または Edge のアドレスバーにあるインストールアイコンか、ブラウザーメニューの「LibChecker WebUI をインストール」を使用してください。", + "pwaGuideFirstOpenNote": "初回のみ、ブラウザーがファイルアクセスの確認を求めます。", + "pwaGuideStepInstall": "LibChecker WebUI をインストール", + "pwaGuideStepOpen": "「このアプリケーションで開く」から LibChecker WebUI を選択", + "pwaGuideStepAnalyze": "パッケージをローカルで解析", + "pwaGuideMenuOpenWith": "LibChecker WebUI で開く", + "pwaGuideSceneDone": "レポートが完成", + "pwaFileOpenFailed": "システムメニューから Android パッケージを開けませんでした。", "clear": "クリア", "filePrompt": "選択またはドロップ", "fileIdle": "ファイルが選択されていません", From d0455590b5a7fbabe728090c68d54ef8aa7bdb41 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Thu, 16 Jul 2026 19:30:33 +0800 Subject: [PATCH 69/70] New translations en.json (Chinese Simplified) [ci skip] --- locales/zh-Hans.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/locales/zh-Hans.json b/locales/zh-Hans.json index 8937fd7..c12a787 100644 --- a/locales/zh-Hans.json +++ b/locales/zh-Hans.json @@ -82,6 +82,19 @@ "reportShareCopy": "复制链接", "reportShareSystem": "系统分享", "reportShareNoLink": "链接不可用", + "pwaGuideEyebrow": "桌面快捷操作", + "pwaGuideTitle": "从右键菜单直接分析", + "pwaGuideBody": "安装 LibChecker WebUI 后,即可在 Finder 或文件资源管理器中直接用它打开 APK、APKS、APKM 或 XAPK 文件。", + "pwaGuideInstall": "安装", + "pwaGuideDismiss": "关闭安装指引", + "pwaGuideManual": "没有出现安装提示?请点击 Chrome 或 Edge 地址栏中的安装图标,或从浏览器菜单选择「安装 LibChecker WebUI」。", + "pwaGuideFirstOpenNote": "首次使用时,浏览器会请求确认文件访问权限。", + "pwaGuideStepInstall": "安装 LibChecker WebUI", + "pwaGuideStepOpen": "在「打开方式」中选择 LibChecker WebUI", + "pwaGuideStepAnalyze": "在本地分析安装包", + "pwaGuideMenuOpenWith": "使用 LibChecker WebUI 打开", + "pwaGuideSceneDone": "报告已生成", + "pwaFileOpenFailed": "无法从系统菜单打开这个 Android 安装包。", "clear": "清空", "filePrompt": "选择或拖入", "fileIdle": "未选择文件", From cdb407f6d7f0a67b088e095912cdff84d46e5f1d Mon Sep 17 00:00:00 2001 From: Absinthe Date: Thu, 16 Jul 2026 19:30:34 +0800 Subject: [PATCH 70/70] New translations en.json (Chinese Traditional) [ci skip] --- locales/zh-Hant.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/locales/zh-Hant.json b/locales/zh-Hant.json index b77811f..61e882a 100644 --- a/locales/zh-Hant.json +++ b/locales/zh-Hant.json @@ -82,6 +82,19 @@ "reportShareCopy": "複製連結", "reportShareSystem": "系統分享", "reportShareNoLink": "連結無法使用", + "pwaGuideEyebrow": "桌面快速操作", + "pwaGuideTitle": "從右鍵選單直接分析", + "pwaGuideBody": "安裝 LibChecker WebUI 後,即可在 Finder 或檔案總管中直接用它開啟 APK、APKS、APKM 或 XAPK 檔案。", + "pwaGuideInstall": "安裝應用程式", + "pwaGuideDismiss": "關閉安裝指引", + "pwaGuideManual": "沒有出現安裝提示?請按一下 Chrome 或 Edge 網址列中的安裝圖示,或從瀏覽器選單選擇「安裝 LibChecker WebUI」。", + "pwaGuideFirstOpenNote": "首次使用時,瀏覽器會要求確認檔案存取權限。", + "pwaGuideStepInstall": "安裝 LibChecker WebUI", + "pwaGuideStepOpen": "在「開啟方式」中選擇 LibChecker WebUI", + "pwaGuideStepAnalyze": "在本機分析安裝包", + "pwaGuideMenuOpenWith": "使用 LibChecker WebUI 開啟", + "pwaGuideSceneDone": "報告已建立", + "pwaFileOpenFailed": "無法從系統選單開啟這個 Android 安裝包。", "clear": "清除", "filePrompt": "選擇或拖放", "fileIdle": "尚未選擇檔案",