首页/新闻资讯/正文详情

Flet LocaleChangeEvent 详解:监听系统语言偏好变化并响应设备区域设置

发布时间:2026/9/24 16:48:53 来源:云帆数科 栏目:资讯中心
Flet LocaleChangeEvent 详解:监听系统语言偏好变化并响应设备区域设置
前端跨平台桌面应用移动开发【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址https://gitcode.com/gh_mirrors/fl/flet点击查看免费下载本文围绕 Flet 框架中的LocaleChangeEvent事件类型展开讲解其在 Flutter 底层WidgetsBinding语言偏好回调之上构建的监听机制、locales载荷字段的语义以及如何通过Page.on_locale_change在纯 Python 应用中实时响应设备语言设置的变化。读完本文你将掌握从事件注册、载荷解析到与Locale、DeviceInfo.locales协同使用的完整实战方案。LocaleChangeEvent 是什么LocaleChangeEvent是 Flet Python SDK 中用于描述宿主平台区域设置locale偏好发生变化的事件载荷。它是一个基于标准库dataclass定义的数据类继承自泛型基类Event[Page]声明在 page.py 中dataclass class LocaleChangeEvent(Event[Page]): Event payload describing a change in the host platforms locale preferences. locales: list[Locale] The full, ordered list of locales reported by the host platform. The first item represents the highest-priority locale. 该类在整个 SDK 中作为Page.on_locale_change事件的唯一载荷类型使用是理解 Flet 多语言应用动态响应机制的核心入口。由于LocaleChangeEvent是Event的子类它还继承了事件对象通用的name、data、control等属性详见下文事件基类与通用属性一节。locales 字段按优先级排列的区域设置列表LocaleChangeEvent只有一个业务字段locales其类型为list[Locale]。根据源码注释可以明确两点语义它是完整且有序的列表包含宿主平台当前上报的全部locale 偏好而不是单个语言顺序即优先级列表第一个元素locales[0]是用户优先级最高的区域设置其后依次降低。这一点与DeviceInfo.locales的语义完全一致。在 device_info.py 中可以看到locales: list[Locale] The full system-reported supported locales of the device. This establishes the language and formatting conventions that application should, if possible, use to render their user interface. The list is ordered in order of priority, with lower-indexed locales being preferred over higher-indexed ones. The first element is the primary locale. The :attr:flet.Page.on_locale_change event is called whenever this value changes. 即应用在读取系统语言时应当优先采用locales[0]主语言其余条目作为回退fallback语言序列。二者共同构成读取当前语言与监听语言变化两条互补的 API 通路。承载对象 Locale语言、地区与脚本三要素locales列表中的每个元素都是flet.Locale值对象定义于 types.py用于选择用户语言与格式化偏好的标识符包含三个可选字段字段类型默认值说明language_codestrund主语言子标签如en英语、zh中文。大小写敏感须是 IANA 语言子标签注册表中的合法值废弃子标签会被内部规范化为首选值如iw会被规范为he。无语言子标签时使用默认值und表示未定义语言country_codeOptional[str]None国家/地区子标签如US、CN。大小写敏感废弃地区子标签同样会被规范化如DD规范为DE。可为None表示面向某语言的通用回退script_codeOptional[str]None文字script子标签如Hant繁体中文、Hans简体中文。对存在多种书写系统的语言建议显式指定同时Locale提供了两个实用的字符串化方法language_tag属性返回符合 BCP 47 规范的 Unicode 语言标识符例如en、es-419、hi-Deva-IN、zh-Hans-CN适合用作 HTTPAccept-Language头或与第三方库对接__str__()方法按language[_script][_country]顺序、以下划线连接各子标签例如zh_Hans_CN适合用于资源文件命名或展示。注意Locale.__post_init__中有一个校验逻辑language_code不能为空字符串否则抛出ValueError源码 types.py。事件如何触发从 Flutter 到 Python 的完整链路LocaleChangeEvent并非由 Python 侧主动抛出而是由 Flutter 客户端在检测到平台语言偏好变化后沿以下链路推送回 Python 端Flutter 侧监听_FletApp作为WidgetsBindingObserver注册到WidgetsBinding重写didChangeLocales(ListLocale? locales)回调page.dart。该方法由 Flutter 框架在系统语言设置变化如用户在系统设置中更换设备语言、或修改浏览器首选语言时自动调用。去重与事件触发Flutter 侧先用WidgetsBinding.instance.platformDispatcher.locales兜底获取有效 locale 列表并用ListEquality与上一次缓存做比较若完全相同则直接返回避免无效事件确有变化时才通过widget.control.triggerEvent(locale_change, {locales: ...})把序列化后的 locale 列表推送给 Python 端源码 page.dart。Python 端解析Python 事件分发层将locale_change事件反序列化构造出LocaleChangeEvent实例并把locales字段填充为解析后的list[Locale]最终调用用户在Page.on_locale_change上注册的回调。对应地Page上的声明位于 page.pyon_locale_change: Optional[EventHandler[LocaleChangeEvent]] None Called when the locale preferences/settings of the host platform have changed. For example, when the user updates device language settings or browser preferred languages. 从实现看on_locale_change接受EventHandler[LocaleChangeEvent]类型的回调即既支持无参数回调也支持接收一个LocaleChangeEvent参数的回调类型别名定义见 control_event.py。完整实战监听设备语言变化的可运行示例仓库自带的官方示例 device_locale/main.py 完整演示了on_locale_change的用法其核心流程如下import flet as ft async def main(page: ft.Page): def format_locales(locales: list[ft.Locale]) - str: Format locale list for display. return , .join(str(loc) for loc in locales) def handle_locale_change(e: ft.LocaleChangeEvent): page.add(ft.Text(fLocales changed: {format_locales(e.locales)})) page.on_locale_change handle_locale_change page.scroll ft.ScrollMode.AUTO page.horizontal_alignment ft.CrossAxisAlignment.CENTER initial_locales (await page.get_device_info()).locales page.add( ft.SafeArea( contentft.Column( controls[ ft.Text(fInitial locales: {format_locales(initial_locales)}), ft.Text( Change your system or browser language to trigger on_locale_change., colorft.Colors.BLUE, ), ] ) ) ) if __name__ __main__: ft.run(main)这个示例覆盖了三个关键实践点事件注册page.on_locale_change handle_locale_change回调签名为(e: ft.LocaleChangeEvent)通过e.locales读取新语言列表初始状态获取通过await page.get_device_info()的.locales属性拿到启动时的语言列表注意get_device_info是异步方法需要await触发方式桌面端修改系统语言、Web 端修改浏览器首选语言都会触发回调示例中用蓝色提示文字引导用户实测。运行后应用会先显示Initial locales每当你在系统/浏览器中调整语言就会追加一行Locales changed: ...例如从zh_CN切换到en_US时输出Locales changed: en_US。由于Locale.__str__使用下划线连接子标签这里展示的格式天然可读。事件基类与通用属性由于LocaleChangeEvent继承自Event泛型基类control_event.py在你的回调中除了e.locales还可以访问以下通用成员属性/方法类型说明e.namestr事件名称此处固定为locale_change对应 Flutter 侧triggerEvent的第一个参数e.dataOptional[Any]可选的事件原始载荷数据未附加额外数据时为Nonee.controlPage发出该事件的控件由于是页面级事件即为事件所属的Page实例e.pagePage便捷属性返回拥有事件源控件的页面若控件未挂载到任何页面则抛出RuntimeErrore.targetint发出该事件的控件内部 ID其中e.page在事件回调中尤为实用——你可以直接在回调里用e.page.update()、e.page.run_thread()等页面级 API 驱动 UI 刷新而无需通过闭包捕获外部变量。进阶与 LocaleConfiguration 协同的多语言方案LocaleChangeEvent负责的是监听变化这一半另一半声明应用支持哪些语言并完成解析由LocaleConfiguration承担定义于 types.py。它有两个关键字段supported_locales: list[Locale]应用支持的语言列表默认值为[Locale(en, US)]locale当前生效的 locale。值得留意的是源码中关于 locale 解析顺序的说明顺序很重要解析时按逐步放宽精确度的方式匹配优先级为语言文字国家 → 语言文字 → 语言国家 → 仅语言 → 仅国家。这意味着on_locale_change收到新列表后理想做法是把e.locales[0]与supported_locales按上述优先级匹配命中后更新页面上的locale_configuration实现运行时无缝切换语言。从框架源码结构看Locale、LocaleConfiguration、DeviceInfo.locales与LocaleChangeEvent.locales共用同一套Locale值对象与序列化格式Flutter 侧toMap()见 device_info.dart因此各 API 之间可以放心互相赋值、比较与传递。注意事项与最佳实践区分当前值与变化事件事件只携带变化后的完整列表应用启动时的初始语言应通过await page.get_device_info()的locales字段获取二者配合才能覆盖完整生命周期列表是有序的始终把locales[0]视为主语言其余作为回退序列不要自行重排或截断回调可省略事件参数EventHandler兼容无参回调若只需触发副作用如重新拉取资源可以直接注册def handler(): ...形式的函数language_tag优先用于外部对接需要向第三方服务传递语言时使用Locale.language_tagBCP 47 格式而不是str(locale)下划线格式Web 端行为浏览器切换首选语言同样会触发该事件因此你的响应逻辑应对平台无感知同一套回调在桌面、移动与 Web 端保持一致。小结LocaleChangeEvent是 Flet 中唯一承载宿主平台语言偏好变化信息的事件类型其locales字段以按优先级排列的Locale列表呈现新的语言环境事件本身由 FlutterWidgetsBindingObserver.didChangeLocales回调驱动经locale_change通道推送至 Python 端的Page.on_locale_change。配合get_device_info()读取初始语言、LocaleConfiguration声明支持语言即可在纯 Python 应用中构建完整、实时的多语言适配方案。相关参考源码与示例可通过 page.py、types.py、device_info.py 以及示例 device_locale/main.py 继续深入研读。赞分享前端跨平台桌面应用移动开发【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址https://gitcode.com/gh_mirrors/fl/flet点击查看免费下载相关推荐Flet ScreenBrightnessChangeEvent 详解监听并响应屏幕亮度变化事件Flet ScreenBrightnessChangeEvent 详解监听并响应屏幕亮度变化事件 导读 ScreenBrightnessChangeEvent前端跨平台桌面应用移动开发Kubespray 集群升级全攻略从 upgrade-cluster.yml 优雅升级到逐 Tag 多版本迁移的实战指南Kubespray 集群升级全攻略从 upgrade cluster.yml 优雅升级到逐 Tag 多版本迁移的实战指南 本文以 Kubespray 官方升级前端跨平台桌面应用移动开发Windows inside Docker区域设置多语言区域配置详解Windows inside Docker区域设置多语言区域配置详解 引言解决Docker中Windows的语言环境痛点 在容器化技术日益普及的今天将Wi虚拟化上一篇Chrome完整网页截图终极指南一键保存超长页面的完整解决方案下一篇Chrome滚动截图终极指南一键保存完整网页的完整解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Dart SDK 中 analyzer 包发布准备(Prepare a Release)完整指南:多包同步发布工作流与版本策略
Dart SDK 中 analyzer 包发布准备(Prepare a Release)完整指南:多包同步发布工作流与版本策略

编程语言编译器语言运行时标准库开发工具 【免费下载链接】sdk The Dart SDK, including the VM, JS and Wasm compilers, analysis, core libraries, and more. 项目地址: https://gitcode.com/gh_mirrors/sdk1/sdk 点击查看 免费下载 analyzer 包发布并不是一个孤… · 2026/9/24 16:48:53

Kornia LoFTR 实战指南:免检测器的 Transformer 特征匹配与几何估计
Kornia LoFTR 实战指南:免检测器的 Transformer 特征匹配与几何估计

计算机视觉人工智能深度学习图像处理 【免费下载链接】kornia 🐍 Geometric Computer Vision Library for Spatial AI 项目地址: https://gitcode.com/gh_mirrors/ko/kornia 点击查看 免费下载 LoFTR 是 Kornia 提供的一套免检测器(detector… · 2026/9/24 16:48:53

CAXA-3D绘图教程
CAXA-3D绘图教程

添加孔类长方体选择”孔类孔类长方体”,按F10 键&#xff0c;启动三维球,点击<空格键>使三维球呈白色&#xff0c;让三维球定位在孔类长方体低边设置(到面与点间)位置到实体面板上。底座直口绘制构造辅助元素点击确认全选两条线&#xff0c;取消作为构造辅助元素完成后&a… · 2026/9/24 16:48:53

从长春到首尔:靓范医生井明院长受邀出席JUVELOOK韩国溯源会,“首发”授牌背后是行业认可
从长春到首尔:靓范医生井明院长受邀出席JUVELOOK韩国溯源会,“首发”授牌背后是行业认可

导语&#xff1a;9月19日至21日&#xff0c;靓范医生无创技术院长井明受邀赴韩国首尔&#xff0c;出席韩国VAIM旗下再生注射产品JUVELOOK全球溯源会。一家起源长春的连锁轻医美机构出现在厂商的首批名单里——这封“邀请函”的分量&#xff0c;值得展开说说。 一、一张邀请函的… · 2026/9/24 17:29:26

Redis 系列 · 第 04 篇——部署实操:内网高可用集群
Redis 系列 · 第 04 篇——部署实操:内网高可用集群

从源码编译到哨兵 / Cluster 集群落地 目 录 一、导读与节点规划 二、源码编译安装 2.1 安装编译依赖 2.2 下载解压并编译 2.3 目录与配置就绪 2.4 主从通用配置 三、主从复制部署 3.1 配置从节点 3.2 启动与验证 四、哨兵高可用部署 4.1 配置哨兵 4.2 启动哨兵 4.3 故障转移验… · 2026/9/24 17:29:19

Linux Gstreamer深度解析之gst_audio_decoder_allocate_output_buffer调用流程与实战(三十七)
Linux Gstreamer深度解析之gst_audio_decoder_allocate_output_buffer调用流程与实战(三十七)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》作者 博主新书推荐&#xff1a;《Android系统多媒体进阶实战》&#x1f680; Android Audio工程师专栏地址&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; Android多媒体专栏地址&a… · 2026/9/24 17:29:19

279基于SpringBoot4+Vue3的同城跑腿代办服务平台、同城跑腿平台、跑腿代办小程序、同城取送代办系统、跑腿订单管理系统;AI 智能助手、数据可视化工作台、跑腿员入驻审核;毕业设计、课程设计
279基于SpringBoot4+Vue3的同城跑腿代办服务平台、同城跑腿平台、跑腿代办小程序、同城取送代办系统、跑腿订单管理系统;AI 智能助手、数据可视化工作台、跑腿员入驻审核;毕业设计、课程设计

✅博主简介&#xff1a;Java全栈开发工程师&#xff08;bishecoder&#xff09;&#xff0c;精通Java开发、系统设计、项目实战。 ✅技术栈&#xff1a;SpringBoot、Vue、React、Node.js、Nest.js、uni-app等 ✅技术擅长&#xff1a;定制项目、修改代码、编写文档、技术指导等。… · 2026/9/24 17:29:19

DEIM 改进系列(九):Mamba 状态空间改进——把 neck 通路从“单点卷积“升级为“序列扫描“
DEIM 改进系列(九):Mamba 状态空间改进——把 neck 通路从“单点卷积“升级为“序列扫描“

DEIM 的 neck lateral 通路&#xff08;融合前投影&#xff09;原始实现是 11 卷积——逐像素独立处理&#xff0c;没有序列上下文&#xff1b;而 Mamba 这类状态空间模型用线性复杂度的序列扫描&#xff0c;天然具备长程上下文建模能力。针对这条"只看单点、不看邻居&quo… · 2026/9/24 17:29:00

咨询公司新产品开发指南
咨询公司新产品开发指南

本文档为《全球知名咨询公司新产品开发指南》&#xff0c;适配制造业&#xff08;如电子、消费产品等&#xff09;的产品研发部门&#xff08;产品设计 / 研发管理岗&#xff09;、市场部门&#xff08;市场调研 / 品牌营销岗&#xff09;、销售部门&#xff08;销售管理 / 区域… · 2026/9/24 17:29:00

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介&#xff1a;这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源&#xff0c;围绕YOLOv8实现渔船作业监控系统&#xff0c;可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件&#xff0c;约24.21MB&#xff0c;以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介&#xff1a;面向时间序列数据建模的一维卷积神经网络完整实现&#xff0c;适合深度学习入门者及需要快速验证时序模型的研究者&#xff0c;能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小&#xff0c;只有3KB&#xff0c;内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L&#xff0c;而是舌尖上的L最近在几个方言群和语音教学社群里&#xff0c;反复看到有人发一句&#xff1a;“也说字母L&#xff1a;柔软的长舌”。初看以为是英语发音课笔记&#xff0c;点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码