Files
Unlucky-Launcher/crates/i18n/src/catalog/golden/tail.rs
T
AskaEth aae9a233ff fix(m198): JAVAGUARD——首屏自动扫 / 子进程回收 / 参数长度三条守卫 + 设置页正文结构断言
- 首屏自动扫:删掉 `cfg!(test)` 分叉,生产入口在测试里真跑;新增
  `the_first_hydrate_starts_a_real_scan_by_itself`(删掉那一行、或把实参翻成 `true`
  都红)。顺手删掉恒为假的 `seeded && !live`:截图种子档在上方就 return 了,编译器也
  报 "assigned but never used"。
- proc:`kill()` + `wait()` 收进 `terminate()`(三个分支共用);用例先用同一条命令
  真跑一次证明子进程起得来(`spawn().ok()?` 的空跑假绿),并新增 Linux/Android 的
  僵尸回收用例(只 kill 不 wait ⇒ `/proc/<pid>` 留成僵尸)。
- java.extra_args:`MAX_JVM_ARGS = 1024` 镜像 schema,`Refusal::JvmTooLong` + 中英
  文案 + JVM 输入框变红;App 级用例断言回执是具名的「太长」而不是通用的「写不进去」。
- 设置页正文:判据①从「数 `stack = stack.push(` 的出现次数」升级成按角色断言
  (唯一来源 section_columns、`push(` 恰一次且实参是循环变量、尾表达式、禁
  extend/chain/once/concat/append),单行折叠变异体现在会红。
2026-11-09 06:46:29 +08:00

213 lines
26 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//! 金表的**后半段的前半截**(`InstancesLaunchReset` 之后、到 M197 的 Java 域结束)。
//!
//! 为什么拆:`golden.rs` 在 M157 加了 19 行启动参数文案后到 416 行,越过 400 行硬线;
//! 拆分口径与仓库其它 `-p1/-p2` 一致——**纯搬移、一行不改**,顺序即 `Key::ALL` 的后半段。
//! 拼装与断言在 `golden.rs` 的 [`rows`] 与 `catalog/tests.rs`。
//!
//! **M197 起本段只到 Java 域结束**:M197 往 `settings_java_entries` 追加了 68 行,加上 dev 侧
//! 其它 mission 后加的行会涨到 470+(越过 400 行硬线),于是把 **M174 助手域起的那半截**
//! 纯搬移到 [`super::tail_ai`](链序:`golden` → `tail` → `tail_ai` → `tail2`)。
//! 搬移只改位置:其余每一行逐字节原样(含其它 mission 后加的行)。
pub(super) const ROWS: &[(&str, &str, &str)] = &[
("LoaderVanilla", "Vanilla", "原版"),
("LaunchOutcomeNormal", "Finished normally", "正常结束"),
("LaunchOutcomeCrash", "The game crashed", "游戏崩溃"),
("LaunchOutcomeSilent", "Suspected silent failure: exit code 0, but the game never really started", "疑似静默失败:退出码 0,但游戏没真正跑起来"),
("LaunchFailedWithCode", "Launch failed (exit {code}): {reason}", "启动失败(退出码 {code}):{reason}"),
("LaunchStageVersionManifest", "Reading the version file", "读版本文件"),
("LaunchStageInheritance", "Resolving the inheritance chain", "解析继承链"),
("LaunchStageInstanceConfig", "Reading the instance settings", "读实例设置"),
("LaunchStageIsolation", "Preparing the isolated game folder", "准备隔离游戏目录"),
("LaunchStageIdentity", "Preparing the account", "准备账户"),
("LaunchStageSpawn", "Starting the game process", "启动游戏进程"),
("LaunchStageFailed", "Launch failed · {stage}: {detail}", "启动失败 · {stage}:{detail}"),
("LaunchToastEnded", "{outcome} · {seconds}s", "{outcome} · {seconds} 秒"),
("LaunchMsaNotConfigured", "Microsoft sign-in is not configured: it needs an Azure public client id (the login flow itself is implemented). Build with ULL_MSA_CLIENT_ID=<id>, or set that environment variable before launching.", "微软登录未配置:缺少 Azure 公共客户端 id(登录功能已实现,只差这一项配置)。构建时注入:ULL_MSA_CLIENT_ID=<id> cargo build;或启动前设置同名环境变量 ULL_MSA_CLIENT_ID=<id>。"),
("FontCjkNeedsDownload", "No Chinese font found on this system. Download an open-source (OFL) Chinese font?", "系统里没找到中文字体。要下载一套开源(OFL)中文字体吗?"),
("FontCjkDownloading", "Downloading Chinese font… {percent}%", "正在下载中文字体… {percent}%"),
("FontCjkDownloadFailed", "Chinese font download failed; the interface stays in English.", "中文字体下载失败,界面暂时保持英文。"),
("FontCjkReady", "Chinese font ready: {family}", "中文字体已就绪:{family}"),
("SettingsLanguage", "Language", "界面语言"),
("SettingsLanguageHint", "Switches the interface language. Chinese text needs a Chinese font.", "切换界面语言。显示中文需要中文字体。"),
("SettingsLogsFolder", "Log folder", "日志文件夹"),
("SettingsLogsFolderHint", "What explains a crash lives here: the launcher's own runtime log (launcher.log, rolled over at 1 MiB with one old copy kept) and one jsonl per game session under logs/game/. Sessions from older versions (data/agent/sessions) are still read, not moved.", "解释一次崩溃要看的东西都在这:启动器自己的运行日志(launcher.log,满 1 MiB 滚动一次、只留一份旧档)与每次游戏会话的 jsonl(logs/game/)。旧版本留下的会话(data/agent/sessions)仍然读得出来,不会被搬动。"),
("SettingsLogsCopy", "Copy path", "复制路径"),
("SettingsLogsUnknown", "Data directory not resolved — restart the launcher from its own folder", "数据根没解析出来——从启动器所在目录重新启动试试"),
("SettingsAppearanceCorner", "Window corners", "窗口圆角"),
("SettingsAppearanceCornerSystem", "Follow system", "跟随系统"),
("SettingsAppearanceCornerSquare", "Square", "直角"),
("SettingsAppearanceCornerHint", "On Windows 11 and Server 2025 we ask the system for rounded corners; Windows 10 keeps square corners. On macOS and Linux the desktop's own rules apply. We never draw corners ourselves.", "Windows 11 与 Windows Server 2025 上我们请求系统处理外框圆角;Windows 10 保持直角;macOS 与 Linux 交给桌面合成器自己的规则;我们不自己画圆角。"),
("SettingsAppearanceCornerSuspended", "Not in effect right now: window transparency is below 100%. Setting it back to 100% restores the rounded corners.", "当前因整窗透明度不生效:把整窗透明度调回 100% 圆角即恢复。"),
// M180:外观分组补齐(`catalog/settings/appearance.rs` 的第二批,M116 圆角那 5 条之后)。
// 位置就是装配链里那个域的位置——`settings_appearance_entries` 在 `settings_java_entries` 之前,
// 所以这 40 行必须落在 `SettingsAppearanceCornerSuspended` 与 `SettingsJavaScan` 之间
// (顺序 = `Key::ALL`;为排到文件尾而重排别人的族会让 `split_keeps_every_translation` 整片红)。
("SettingsAppearanceWindowOpacity", "Window transparency", "整窗透明度"),
("SettingsAppearanceWindowOpacityHint", "Applies to the whole window. Floor {floor}; 1.00 = fully opaque.", "作用于整个窗口。下限 {floor};1.00 = 完全不透明。"),
("SettingsAppearancePanelOpacity", "Panel transparency", "面板透明度"),
("SettingsAppearancePanelOpacityHint", "Only the panel/card layer. Floor {floor}; independent of window transparency.", "只作用于面板 / 卡片这一层。下限 {floor};与整窗透明度互不影响。"),
("SettingsAppearancePanelOpacityForcedValue", "100% (forced from {requested})", "100%(强制,原请求值 {requested})"),
("SettingsAppearancePanelOpacityForcedHint", "Software renderer: panels and glass stay fully opaque (window transparency still works).", "软件渲染:面板与玻璃效果恒为不透明(整窗透明度仍然有效)。"),
("SettingsAppearanceBackgroundImage", "Background image", "背景图"),
("SettingsAppearanceOff", "Off", "关"),
("SettingsAppearanceOn", "On", "开"),
("SettingsAppearanceImagePath", "Image path", "图片路径"),
("SettingsAppearancePaletteLevel", "Colours: {level}", "配色:{level}"),
("SettingsAppearanceBgFill", "Fill", "填充方式"),
("SettingsAppearanceBgFillCover", "Cover", "铺满"),
("SettingsAppearanceBgFillContain", "Contain", "完整显示"),
("SettingsAppearanceBgFillTile", "Tile", "平铺"),
("SettingsAppearanceBgDim", "Dim", "暗化"),
("SettingsAppearanceBgDimHint", "Blends the image toward the panel colour so text stays readable. Max {max}.", "把背景图往面板底色上退,让文字读得清。上限 {max}。"),
("SettingsAppearancePaletteSource", "Colour source", "配色来源"),
("SettingsAppearancePaletteBackground", "Background", "取自背景图"),
("SettingsAppearancePaletteWallpaper", "Wallpaper", "取自壁纸"),
("SettingsAppearancePalettePreset", "Preset", "内置色卡"),
("SettingsAppearanceBgReadFailed", "Background image could not be read: {reason}", "背景图读不出来:{reason}"),
("SettingsAppearanceBgDecodeFailed", "Background image could not be decoded ({reason}; this build decodes PNG, JPEG and BMP)", "背景图解不开({reason};这个构建只支持 PNG、JPEG 与 BMP)"),
("SettingsAppearanceBgTooLarge", "Background image is too large to decode: {width}×{height} (limit {limit} px per edge)", "背景图太大,解不开:{width}×{height}(每边上限 {limit} 像素)"),
("SettingsAppearanceBgSmallTile", "Small image ({width}×{height}): tiles are scaled up so the window stays covered (max {max} tiles, no gaps).", "图片很小({width}×{height}):图块会被放大,保证窗口铺满(最多 {max} 块,不留缝)。"),
("SettingsAppearancePaletteBgUndecodable", "Background image could not be read; colours fall back.", "背景图读不出来,配色回落到下一级。"),
("SettingsAppearancePaletteBgTooSmall", "Background image is too small to sample; colours fall back.", "背景图太小,取不了色,配色回落到下一级。"),
("SettingsAppearancePaletteBgBadDimensions", "Background image data looks inconsistent; colours fall back.", "背景图数据前后不一致,配色回落到下一级。"),
("SettingsAppearancePaletteBgNoOpaquePixels", "Background image is almost fully transparent; colours fall back.", "背景图几乎全透明,配色回落到下一级。"),
("SettingsAppearancePaletteBgLowChroma", "Background image is too monochrome to tint from; colours fall back.", "背景图太单调(彩度不足),取不出配色,回落到下一级。"),
("SettingsAppearancePaletteBgContrast", "Background image colours would be unreadable; colours fall back.", "按背景图取的颜色读不清,配色回落到下一级。"),
("SettingsAppearancePaletteWallpaperUndecodable", "Desktop wallpaper could not be read.", "桌面壁纸读不出来。"),
("SettingsAppearancePaletteWallpaperTooSmall", "Desktop wallpaper is too small to sample.", "桌面壁纸太小,取不了色。"),
("SettingsAppearancePaletteWallpaperBadDimensions", "Desktop wallpaper data looks inconsistent.", "桌面壁纸数据前后不一致。"),
("SettingsAppearancePaletteWallpaperNoOpaquePixels", "Desktop wallpaper is almost fully transparent.", "桌面壁纸几乎全透明。"),
("SettingsAppearancePaletteWallpaperLowChroma", "Desktop wallpaper is too monochrome to tint from.", "桌面壁纸太单调(彩度不足),取不出配色。"),
("SettingsAppearancePaletteWallpaperContrast", "Desktop wallpaper colours would be unreadable; colours fall back.", "按桌面壁纸取的颜色读不清,配色回落到下一级。"),
("SettingsAppearancePalettePresetContrast", "The built-in card needed a small contrast correction.", "内置色卡做了一点对比度修正。"),
("SettingsAppearancePaletteAdjusted", "A few colours were nudged for readability.", "有几个颜色为了可读性做了微调。"),
// M175:设置页「Java」分组(`catalog/settings/java.rs` 的 `settings_java_entries`)。
// 位置就是装配链里那个域的位置:`settings_java_entries` 在 `settings_appearance_entries` 之后、
// `settings_download_entries`(空)与 `settings_ai_entries`(M174)之前,所以这几行必须落在
// `SettingsAppearanceCornerSuspended` 与 `SettingsGroupAssistant` 之间(顺序 = `Key::ALL`)。
("SettingsJavaScan", "Scan now", "立即扫描"),
("SettingsJavaScanningStart", "Scanning…", "正在扫描…"),
("SettingsJavaScanning", "Scanning… {done}/{total}", "正在扫描… {done}/{total}"),
("SettingsJavaCancelling", "Cancelling…", "正在取消…"),
("SettingsJavaCancel", "Cancel", "取消"),
("SettingsJavaCancelled", "The scan was cancelled; the list below is from the previous run.", "扫描已取消;下面的列表还是上一次的结果。"),
("SettingsJavaScanDone", "{count} JDK found", "找到 {count} 个 JDK"),
("SettingsJavaNeverScanned", "Not scanned yet", "还没扫描过"),
("SettingsJavaNeverScannedBody", "The list is still empty. The launcher scans once by itself when the settings page opens; press Scan now to look again right away.", "列表还是空的。打开设置页时启动器会自己扫一次;也可以点「立即扫描」立刻再扫一遍。"),
("SettingsJavaEmptyTitle", "No Java runtime found", "未检测到 Java 运行时"),
("SettingsJavaEmptyBody", "Nothing matched. Add the path of a JDK you already unpacked below, or install one with ull java install 21 on the command line.", "没找到任何 JDK。可以在下面手动加上你自己解压的那份,或者用命令行 ull java install 21 装一个。"),
("SettingsJavaDefault", "Default", "默认"),
("SettingsJavaSetDefault", "Use as default", "设为默认"),
("SettingsJavaFits", "Meets the current instance requirement", "满足当前实例的要求"),
("SettingsJavaTooOld", "Below the requirement: this instance needs Java {minimum}+", "低于要求:当前实例需要 Java {minimum} 及以上"),
("SettingsJavaDefaultSet", "Default JDK is now {path}", "默认 JDK 已设为 {path}"),
("SettingsJavaSourceManaged", "installed by this launcher", "本启动器安装"),
("SettingsJavaSourceEnv", "JAVA_HOME (environment variable)", "JAVA_HOME(环境变量)"),
("SettingsJavaSourcePath", "on PATH", "PATH 上"),
("SettingsJavaSourceSystem", "system install", "系统安装"),
("SettingsJavaSourceManual", "added by you", "手动添加"),
("SettingsJavaAdd", "Add a JDK path", "手动添加 JDK 路径"),
("SettingsJavaAddPlaceholder", "C:\\Program Files\\Java\\jdk-21", "例:C:\\Program Files\\Java\\jdk-21"),
("SettingsJavaAddHint", "A JDK folder or its java executable. We run java -version on it; anything that cannot answer is refused.", "JDK 目录或它的 java 可执行文件。会真跑一次 java -version;答不出话的一律拒绝。"),
("SettingsJavaAddAction", "Add", "添加"),
("SettingsJavaAdded", "Added {path}", "已添加 {path}"),
("SettingsJavaMemory", "Default memory (MB)", "默认内存(MB)"),
("SettingsJavaMemoryHint", "Whole megabytes, {min}–{max}. Instances without their own override follow this value.", "整数 MB,范围 {min}~{max}。没有实例级覆盖的实例都用它。"),
("SettingsJavaLayerGlobal", "In effect: {mb} MB, from the global default.", "生效:{mb} MB,来自全局默认值。"),
("SettingsJavaLayerInstance", "In effect: {mb} MB, set by instance {instance}. Changing the global value below will not affect that instance.", "生效:{mb} MB,由实例 {instance} 覆盖。改下面的全局值不会影响它。"),
("SettingsJavaJvm", "Extra JVM arguments", "额外 JVM 参数"),
("SettingsJavaJvmPlaceholder", "-XX:+UseG1GC -Dfile.encoding=UTF-8", "例:-XX:+UseG1GC -Dfile.encoding=UTF-8"),
("SettingsJavaJvmHint", "Separated by spaces, quotes allowed. Appended to the command line of every launch; an instance's own JVM arguments come after it.", "按空白分隔,支持引号。会拼到每次启动的命令行上;实例自己的 JVM 参数排在它后面。"),
("SettingsJavaJvmSaved", "Saved value: {value}", "已保存的值:{value}"),
("SettingsJavaJvmSavedNone", "No extra JVM arguments are saved yet.", "还没有保存任何额外参数。"),
("SettingsJavaSave", "Save", "保存"),
("SettingsJavaSaved", "Saved and read back from disk. The next launch uses the new value.", "已保存,并从磁盘读回确认。下次启动就用新值。"),
("SettingsJavaUnsaved", "There are unsaved changes.", "有未保存的改动。"),
("SettingsJavaRefused", "Not saved: {reason}", "未保存:{reason}"),
("SettingsJavaSkipNotDirty", "there was nothing to change, so no file was written", "没有任何改动,因此没有写文件"),
("SettingsJavaSkipReadOnly", "the settings file is read-only: a newer launcher wrote it, or it is marked untrusted", "配置文件只读:它被更新版本的启动器写过,或被标记为不可信"),
("SettingsJavaSkipUnreadable", "the settings file is untrusted, so it is treated as read-only", "配置文件不可信,因此按只读处理"),
("SettingsJavaNoStorage", "No settings file is available in this run, so nothing can be scanned or saved.", "这一次运行没有可用的设置文件,扫描与保存都做不了。"),
("SettingsJavaReasonMemoryEmpty", "the memory field is empty", "内存没填"),
("SettingsJavaReasonMemoryNotNumber", "the memory must be a whole number of MB", "内存必须是整数 MB"),
("SettingsJavaReasonMemoryRange", "the memory is outside the allowed range", "内存超出允许范围"),
("SettingsJavaReasonJvmQuotes", "the JVM arguments have an unclosed quote", "JVM 参数里有没配对的引号"),
("SettingsJavaReasonJvmTooLong", "the JVM arguments are longer than the settings file allows (1024 characters)", "JVM 参数超过配置文件允许的长度(1024 字符)"),
("SettingsJavaReasonAddEmpty", "the path is empty", "路径是空的"),
("SettingsJavaReasonAddMissing", "nothing exists at that path", "那个路径上什么都没有"),
("SettingsJavaReasonAddNotJava", "there is no java executable at that path", "那个路径里没有 java 可执行文件"),
("SettingsJavaReasonAddNoVersion", "java -version did not answer there, so it is not a usable JDK", "在那里跑不出 java -version,不是一份能用的 JDK"),
("SettingsJavaReasonAddTooLong", "the path is too long to be a JDK location", "路径太长,不像是一个 JDK 位置"),
("SettingsJavaReasonAddWriteFailed", "the JDK is fine, but the list file could not be written (disk or permission)", "这份 JDK 没问题,但名单文件写不进去(磁盘或权限)"),
("SettingsJavaReasonAddDuplicate", "that JDK is already in the list", "这份 JDK 已经在列表里了"),
("SettingsJavaReasonWriteFailed", "the settings file could not be written (disk full, no permission, or the value was rejected)", "设置写不进去(磁盘满、没权限,或这个值被拒绝)"),
("SettingsJavaTooNew", "Above the requirement: this instance can only use Java {maximum} or older (the old loader cannot read newer class files)", "高于要求:当前实例只能用 Java {maximum} 及以下(老加载器吃不了新 class 文件)"),
// M197:Java 分组的「下载一个 JDK」与三个设置键(`catalog/settings/java.rs` 里同一批追加)。
("SettingsJavaDownloadTitle", "Download a JDK", "下载一个 JDK"),
("SettingsJavaDownloadHint", "Downloads go through the built-in mirror table: in China the campus mirrors are tried first (Temurin over Tsinghua TUNA), and GitHub-hosted archives are fetched through gh-proxy. Every archive is verified against its SHA-256 before it is unpacked.", "下载走内置镜像表:国内先试院校镜像(Temurin 走清华 TUNA),GitHub 上的归档套 gh-proxy。落盘前一律按 SHA-256 校验。"),
("SettingsJavaDownloadLts", "LTS", "长期支持版(LTS)"),
("SettingsJavaDownloadBaseline", "Recommended baseline", "推荐基准版本"),
("SettingsJavaDownloadVendors", "Vendors: {vendors}", "发行版:{vendors}"),
("SettingsJavaDownloadNoVendor", "No vendor publishes this major version on this platform.", "这个平台上没有发行版发这个大版本。"),
("SettingsJavaDownloadAction", "Install", "安装"),
("SettingsJavaDownloadReinstall", "Install again", "重装"),
("SettingsJavaDownloadInstalled", "Already installed: {path}", "已安装:{path}"),
("SettingsJavaDownloadNeeded", "The current instance needs {requirement}.", "当前实例需要 {requirement}。"),
("SettingsJavaDownloadFits", "Usable by the current instance", "当前实例可用"),
("SettingsJavaDownloadTooLow", "The current instance needs Java {minimum} or newer, so installing this one will not start it.", "当前实例需要 Java {minimum} 及以上 —— 装这一档也起不来。"),
("SettingsJavaDownloadTooHigh", "The current instance can only use Java {maximum} or older, so installing this one will not start it.", "当前实例只能用 Java {maximum} 及以下 —— 装这一档也起不来。"),
("SettingsJavaDownloadRecommended", "Recommended for the current instance", "为当前实例推荐这一档"),
("SettingsJavaDownloadBusy", "Installing Java {major}…", "正在安装 Java {major}…"),
("SettingsJavaDownloadPhasePreparing", "Looking up the release…", "正在查版本…"),
("SettingsJavaDownloadPhaseDownloading", "Downloading {percent}% ({done} of {total})", "下载中 {percent}%({done} / {total})"),
("SettingsJavaDownloadPhaseVerifying", "Verifying the archive…", "正在校验归档…"),
("SettingsJavaDownloadPhaseExtracting", "Unpacking…", "正在解压…"),
("SettingsJavaDownloadSource", "Source: {source}", "来源:{source}"),
("SettingsJavaDownloadRetry", "{source} failed ({reason}); retry {attempt} in {seconds}s", "{source} 失败({reason});{seconds} 秒后重试第 {attempt} 次"),
("SettingsJavaDownloadSwitch", "Switching source: {from} → {to}", "换源:{from} → {to}"),
("SettingsJavaDownloadDone", "Java {major} ({vendor}) is ready at {root} · source {source}", "Java {major}({vendor})已就绪:{root} · 来源 {source}"),
("SettingsJavaDownloadDoneReused", "Java {major} ({vendor}) was already installed at {root}; nothing was downloaded.", "Java {major}({vendor})之前已经装好:{root},这一次没有下载。"),
("SettingsJavaDownloadFailed", "Java {major} could not be installed; the last source tried was {source}. The full reason is in the log.", "Java {major} 没装成;最后试到的源是 {source}。完整原因在日志里。"),
("SettingsJavaDownloadFailedNoSource", "Java {major} could not be installed: the version lookup itself failed. The full reason is in the log.", "Java {major} 没装成:查版本这一步就失败了。完整原因在日志里。"),
("SettingsJavaDownloadFailedHint", "Check the network, or change the vendor order below.", "先查网络,或者改下面的发行版顺序。"),
("SettingsJavaDownloadTriedHeader", "Sources tried:", "试过的源:"),
("SettingsJavaDownloadTried", "{source}: {reason}", "{source}:{reason}"),
("SettingsJavaDownloadRefused", "Not started: {reason}", "没开始:{reason}"),
("SettingsJavaReasonDownloadBusy", "another JDK install is already running", "已经有一个 JDK 在装了"),
("SettingsJavaReasonDownloadUnknownMajor", "that major version is not in the catalog", "目录里没有这个大版本"),
("SettingsJavaReasonDownloadNoVendor", "no vendor publishes that major version here", "没有发行版在这里发这个大版本"),
("SettingsJavaReasonRootUnresolved", "the JDK install folder cannot be resolved on this system", "这台机器上解析不出 JDK 安装目录"),
("SettingsJavaSourceReasonNotFound", "this mirror does not have that file (404)", "这个镜像没有这个文件(404)"),
("SettingsJavaSourceReasonServer", "the server answered with a 5xx / 429 error", "服务器报错 5xx / 429"),
("SettingsJavaSourceReasonTimeout", "the request timed out", "请求超时"),
("SettingsJavaSourceReasonNetwork", "the connection failed", "连不上"),
("SettingsJavaSourceReasonIntegrity", "the checksum did not match", "校验不符"),
("SettingsJavaSourceReasonIo", "a local disk error", "本地磁盘错误"),
("SettingsJavaSourceReasonOther", "the request was rejected", "请求被拒"),
("SettingsJavaInstallRoot", "JDK install folder", "JDK 安装目录"),
("SettingsJavaInstallRootPlaceholder", "D:\\Java", "例:D:\\Java"),
("SettingsJavaInstallRootHint", "Leave it empty to follow the data mode: portable keeps JDKs inside the launcher folder, standard uses the system Java folder. A path here overrides both, and JDKs land in <root>/<vendor>/<version>/.", "留空 = 跟数据目录模式走:portable 放在启动器目录里,standard 放在系统 Java 目录。填了它覆盖前两者,JDK 落在 <root>/<发行方>/<版本>/。"),
("SettingsJavaInstallRootEffective", "In effect: {mode} · {path}", "生效:{mode} · {path}"),
("SettingsJavaInstallRootLayerSetting", "this comes from java.installRoot", "这一项来自 java.installRoot"),
("SettingsJavaInstallRootLayerDataMode", "this comes from core.data_mode ({mode})", "这一项来自 core.data_mode({mode})"),
("SettingsJavaInstallRootUnresolved", "The system Java folder cannot be resolved here. Type a folder above, or set core.data_mode back to portable.", "这台机器上解析不出系统标准 Java 目录。在上面填一个目录,或把 core.data_mode 改回 portable。"),
("SettingsJavaVendorPriority", "Vendor order", "发行版顺序"),
("SettingsJavaVendorOrderEffective", "In effect: {order}", "生效顺序:{order}"),
("SettingsJavaVendorOrderLayerSetting", "this comes from java.vendorPriority", "这一项来自 java.vendorPriority"),
("SettingsJavaVendorOrderLayerRegion", "this comes from the built-in order for your region ({region})", "这一项来自内置的地区默认序({region})"),
("SettingsJavaRegionDomestic", "China", "国内"),
("SettingsJavaRegionGlobal", "rest of the world", "国外"),
("SettingsJavaVendorUp", "Up", "上移"),
("SettingsJavaVendorDown", "Down", "下移"),
("SettingsJavaVendorReset", "Reset to the region default", "恢复地区默认序"),
("SettingsJavaVendorSupports", "ships {majors}", "发 {majors}"),
("SettingsJavaAutoInstall", "Recommend a JDK when none is found", "缺 JDK 时推荐一档"),
("SettingsJavaAutoInstallHint", "On: the catalog below marks the version the current instance needs, and a freshly installed JDK becomes the default when no default is set yet. Nothing is downloaded on its own — you press Install. Off: nothing is marked and you pick everything yourself.", "开:下面的目录会按当前实例的要求标出该装哪一档,装完之后若还没有默认 JDK 就自动设为默认。不会自己开始下载 —— 点「安装」才会下。关:什么也不标,全部自己挑。"),
("SettingsJavaAutoInstallOn", "on", "开"),
("SettingsJavaAutoInstallOff", "off", "关"),
("SettingsJavaPrefsSave", "Save", "保存"),
("SettingsJavaPrefsSaved", "Saved and read back from disk: all three keys are in the settings file.", "已保存并从磁盘读回:三个键都进配置文件了。"),
("SettingsJavaPrefsUnsaved", "There are unsaved changes in this section.", "这一段有未保存的改动。"),
("SettingsJavaReasonInstallRootTooLong", "the folder path is too long", "目录路径太长"),
];