From 4a115e29711afe7b55c3e6596ea6c561a49bf733 Mon Sep 17 00:00:00 2001 From: Absinthe Date: Thu, 11 Jun 2026 11:25:12 +0800 Subject: [PATCH 01/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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/53] 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",