fix(app-iced): M106 r2 —— 两处「改了行为、旧口径还在树里」(复审 p2-1 / p2-2)
p2-1(它在撒谎):`renderer/acceptance/locale.rs::Chain::line()` 还打 `ui_text=pinned-en`, 注释写着「pages/mod.rs::render 里下载页固定传 Lang::En」、`setting` 回退 `<未接线>`——M106 之后 两句同时为假,于是 `ULL_ACCEPTANCE=1` 时启动日志两行互相矛盾(旧行说「文案钉在英文」,新行说 「生效中文」)。修法:`Chain` 增 `machine`(只看平台源 + 环境变量,供 `[env] language=` 用)与 `detection`(含 `ui.language` 手选,与 App 的 `[i18n] choice=…` 同源);`host()` 真读 `SettingsBridge::load_ui_language()`,`line()` 删掉 `ui_text`、`setting` 打真实值。 实测三行现在一致: [i18n] setting=<未设置=跟随系统> platform=registry:zh-CN env=env:<未设置> -> lang=zh-CN locale=zh-CN source=registry [i18n] choice=system lang=zh-CN locale=zh-CN source=registry effective=zh-CN `locale_tests.rs` 把钉假串的那条改成「不许出现 pinned-en」的回归绊线,并新增 `i18n_line_honours_the_explicit_setting_without_rewriting_the_machine_language`。 p2-2(doc-only):`pages/model.rs` 的「只是留口,产品路径先给 Lang::En」与 `pages/download.rs` 的「产品路径现传 Lang::En,接上探测结果时只改调用点」都已被实际代码推翻(`app/state.rs` + `refresh_view` 在填、调用点已是 `model.lang`),按事实重写。顺带修掉 `fonts/cjk.rs` 里同样的 「设置层的读取点尚未接线」。 门禁:`cargo fmt --all -- --check` 退出码 0;`cargo test -p unlucky-app-iced --lib` 退出码 0 (409 passed, 0 failed)。全改动文件 ≤400 行(最大 269)。
This commit is contained in:
1 parent
89dcb6bdf3
commit
954a129e01
14 files changed
+286
-107
No files matched your search
@@ -19,8 +19,20 @@
|
||||
//! - 抓不住:加一个 `pages::Action` 变体 —— 它落进 `Action(action)` 的占位分支(打印一行
|
||||
//! `[page] 占位动作 …`),编译期不会报。这是占位期的既有设计,不是本文件能守的。
|
||||
|
||||
use unlucky_i18n::{Lang, LangChoice};
|
||||
|
||||
use crate::pages;
|
||||
use crate::ui::lang::LangState;
|
||||
|
||||
use super::*;
|
||||
|
||||
// --------------------------------------------------------------- 界面语言(M106)
|
||||
//
|
||||
// 这三个方法住在本文件而不是 `app/state.rs`:`state.rs` 贴着 400 行硬线(M104 的 `agent`、
|
||||
// M105 的 `download_draft` 都往那儿长),而 `set_language` 的唯一调用点就是本文件的
|
||||
// `pages::Message::Language` 分支——落点与调用点放一起,读的人不用来回跳。
|
||||
// 与 M93 把 appearance 那批 `App` 方法放进 `app/appearance.rs` 是同一手法。
|
||||
|
||||
impl App {
|
||||
/// 页面消息:导航走路由栈,真业务命令派发,纯视图态改本地呈现。
|
||||
pub(super) fn on_page(&mut self, message: pages::Message) -> Task<Message> {
|
||||
@@ -72,6 +84,39 @@ impl App {
|
||||
}
|
||||
}
|
||||
|
||||
impl App {
|
||||
/// 当前生效的界面语言(= 目录选择;页面文案一律由它派生)。
|
||||
pub(in crate::app) fn lang(&self) -> Lang {
|
||||
self.lang.lang()
|
||||
}
|
||||
|
||||
/// 设置页语言行要的两件:档位(画选中态)+ 生效语言(画回显)。
|
||||
pub(in crate::app) fn language(&self) -> pages::Language {
|
||||
self.lang.for_settings()
|
||||
}
|
||||
|
||||
/// 换界面语言(设置页语言行 → `pages::Message::Language`)。
|
||||
///
|
||||
/// 三件事缺一不可:①档位与结论换掉 ②视图模型重建(`view_dirty` + `refresh_view`,目录是
|
||||
/// 视图模型的一部分)③落盘(重启后保持所选语言)。字体不在这里重扫:中文档缺字体时的
|
||||
/// 判据/信号归 `i18n::font::decide` + `fonts/cjk.rs`(见报告「没验的部分」)。
|
||||
pub(in crate::app) fn set_language(&mut self, choice: LangChoice) {
|
||||
if choice == self.lang.choice() {
|
||||
return;
|
||||
}
|
||||
self.lang = LangState::of(choice);
|
||||
self.lang.log();
|
||||
if !self.bridge.persist_ui_language(choice.setting_value()) {
|
||||
eprintln!(
|
||||
"[i18n] 语言偏好没落盘(配置只读或数据根解析不出来):本次生效,重启会回到旧值"
|
||||
);
|
||||
}
|
||||
self.lang.log_cjk();
|
||||
self.view_dirty = true;
|
||||
self.refresh_view();
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use unlucky_design::color::SchemeFlavor;
|
||||
|
||||
Reference in new issue
Block a user