来源:M106 r1 复审点名——中文机器上首屏(实例页)仍是英中混排(页头 / New instance / Import / ALL INSTANCES / VERSION / Present on disk / Running · pid / Launch failed)。 用户的原话是「我系统语言是中文 为什么打开软件是英文」。 改了什么 - i18n:catalog/instances.rs 从 6 条死 key 补到 34 条(页头 / 列表列头 / 详情动作 / 窄窗说明 / 元信息标签与值 / 隔离档位 / 运行状态 / 四个启动阶段)。族在装配链第 2 位, 新 key 追加在本族末尾,golden 对应位置插入(不是文件末尾追加)。 - 页面:新增 pages/instances/text.rs(Texts)——页面唯一的取词入口,实例页里不再有 任何可见英文字面量;detail / demo 也改从它取。 - 阶段标签:view/instances.rs 的 Running / Launch failed / 四阶段全部走目录; **数字与分隔符不随语言变形**(运行中 · pid 1234 与 Running · pid 1234 只换前半句)。 - 顺手修掉两处「语言反向泄漏」:原版徽标此前直接画 presenter 的中文「原版」(英文界面 会漏中文),现在走 LoaderVanilla;隔离档位 isolated/shared 也从 core 的稳定 id 换成人话。 - 删掉 InstancesLastPlayed:M117 加的整句 key,从未接线,形状与「标签 + 值」的元信息卡 不符,由 InstancesMetaLastPlayed + InstancesNeverPlayed 取代。 守门(pages/instances/tests/i18n.rs + app/view/tests.rs) - 中文态无 ASCII 英文单词(品牌 Java / 技术标识 pid 白名单); - 每一条 Instances* 的两套译文必须不同(切语言时真的变); - Running 的数字与 · pid 分隔符在两套语言里逐字保留; - 页面源码里 29 条旧英文基线不许回来;每条 key 都必须被页面引用(死 key)。 出图:DevDocs/artifacts/m120/01~12(有实例 / 空态 / 运行中 × 浅深 × 中英)。
144 lines
4.6 KiB
Rust
144 lines
4.6 KiB
Rust
//! 实例页的**演示数据**(骨架期没有业务状态机,也没有业务数据)。
|
||
//!
|
||
//! 12 条,**故意比可视区高**:列表列的独立滚动条要能在截图里看见(单测钉住这条)。
|
||
//!
|
||
//! **这里的数据是夹具(用户数据),不是界面文案**:`1.20.4` / `Fabric 0.15.7` / `4 GiB` /
|
||
//! `2 hours ago` 这些是「实例清单里会长成什么样」的样本,M120 没有把它们搬进词表——它们不是
|
||
//! 界面说的那句话。界面文案(标题 / 按钮 / 元信息标签 / 空态 / 阶段)走 `catalog/instances.rs`,
|
||
//! 见 `text.rs` 与 `app/view/instances.rs`。
|
||
//!
|
||
//! 这条路径(`pages_demo` harness / 单测)**恒英文**:`pages::demo_model` 走 `Model::new`,
|
||
//! `lang` 是 `Lang::En`。产品路径不读这份数据,它画的是 presenter 快照。
|
||
|
||
/// 演示条目(骨架期没有业务数据;夹具文案,见模块文档)。
|
||
pub(crate) struct Entry {
|
||
pub(crate) name: &'static str,
|
||
pub(crate) version: &'static str,
|
||
pub(crate) loader: &'static str,
|
||
pub(crate) memory: &'static str,
|
||
pub(crate) java: &'static str,
|
||
pub(crate) mods: &'static str,
|
||
pub(crate) last_played: &'static str,
|
||
}
|
||
|
||
/// 12 条演示数据:**比可视区高**,这样列表列的独立滚动条在截图里能看见。
|
||
pub(crate) const DEMO: [Entry; 12] = [
|
||
Entry {
|
||
name: "Fabulous World",
|
||
version: "1.20.4",
|
||
loader: "Fabric 0.15.7",
|
||
memory: "4 GiB",
|
||
java: "Temurin 21",
|
||
mods: "148 mods",
|
||
last_played: "2 hours ago",
|
||
},
|
||
Entry {
|
||
name: "Skyblock Origins",
|
||
version: "1.21.1",
|
||
loader: "NeoForge 21.1.72",
|
||
memory: "6 GiB",
|
||
java: "Temurin 21",
|
||
mods: "86 mods",
|
||
last_played: "yesterday",
|
||
},
|
||
Entry {
|
||
name: "Vanilla Survival",
|
||
version: "1.21.4",
|
||
loader: "Vanilla",
|
||
memory: "2 GiB",
|
||
java: "Temurin 21",
|
||
mods: "0 mods",
|
||
last_played: "3 days ago",
|
||
},
|
||
Entry {
|
||
name: "Create: Above and Beyond",
|
||
version: "1.18.2",
|
||
loader: "Forge 40.2.0",
|
||
memory: "8 GiB",
|
||
java: "Temurin 17",
|
||
mods: "312 mods",
|
||
last_played: "last week",
|
||
},
|
||
Entry {
|
||
name: "All the Mods 9",
|
||
version: "1.20.1",
|
||
loader: "NeoForge 20.4.237",
|
||
memory: "8 GiB",
|
||
java: "Temurin 17",
|
||
mods: "412 mods",
|
||
last_played: "2 weeks ago",
|
||
},
|
||
Entry {
|
||
name: "Better MC",
|
||
version: "1.20.1",
|
||
loader: "Fabric 0.14.24",
|
||
memory: "6 GiB",
|
||
java: "Temurin 17",
|
||
mods: "264 mods",
|
||
last_played: "last month",
|
||
},
|
||
Entry {
|
||
name: "RLCraft",
|
||
version: "1.12.2",
|
||
loader: "Forge 14.23.5",
|
||
memory: "4 GiB",
|
||
java: "Zulu 8",
|
||
mods: "184 mods",
|
||
last_played: "2 months ago",
|
||
},
|
||
Entry {
|
||
name: "Origins SMP",
|
||
version: "1.20.4",
|
||
loader: "Quilt 0.24.0",
|
||
memory: "4 GiB",
|
||
java: "Temurin 21",
|
||
mods: "57 mods",
|
||
last_played: "3 months ago",
|
||
},
|
||
Entry {
|
||
name: "Redstone Lab",
|
||
version: "1.19.4",
|
||
loader: "Fabric 0.15.2",
|
||
memory: "3 GiB",
|
||
java: "Temurin 17",
|
||
mods: "34 mods",
|
||
last_played: "April 12",
|
||
},
|
||
Entry {
|
||
name: "Pixelmon Reforged",
|
||
version: "1.16.5",
|
||
loader: "Forge 36.2.34",
|
||
memory: "6 GiB",
|
||
java: "Temurin 8",
|
||
mods: "121 mods",
|
||
last_played: "March 3",
|
||
},
|
||
Entry {
|
||
name: "Techopolis 2",
|
||
version: "1.20.1",
|
||
loader: "Forge 47.2.20",
|
||
memory: "8 GiB",
|
||
java: "Temurin 17",
|
||
mods: "198 mods",
|
||
last_played: "January 28",
|
||
},
|
||
Entry {
|
||
name: "Cobblemon",
|
||
version: "1.21.1",
|
||
loader: "Fabric 0.16.9",
|
||
memory: "5 GiB",
|
||
java: "Temurin 21",
|
||
mods: "74 mods",
|
||
last_played: "January 9",
|
||
},
|
||
];
|
||
|
||
/// 演示选中的条目(第一条)。
|
||
pub(crate) const SELECTED: usize = 0;
|
||
|
||
/// 详情正文(**故意写长**:这是行宽上限的视觉证据——1180 宽窗口下也只断在 ~72 字符)。
|
||
pub(crate) const NOTE: &str = "This instance keeps its own mods, configs and saves. The launcher resolves the version chain \
|
||
(instance → mod loader → vanilla) at launch time, verifies every jar it downloaded against the mirror \
|
||
manifest, and streams progress back as structured events so the UI never has to guess. Nothing on this \
|
||
page is wired to real data yet: the layout is, the numbers are.";
|