i18n 国际化
IDE 国际化系统的实现和扩展。
概述
PyriteIDE 使用类型化的 i18n 键系统。IDE 端和 SDK 端共享相同的键定义。
架构
i18n_key.dart (Dart 枚举)
│
│ 生成
▼
i18n_keys.py (Python 枚举)
│
│ 贡献
▼
IDE 运行时键定义
Dart 端
lib/core/i18n/i18n_key.dart 定义所有键:
enum I18nKey {
navFiles,
navDevices,
navGit,
navPlugins,
navSettings,
// ...
}Python 端
pyrite-sdk/src/pyrite_sdk/api/data/i18n_keys.py 自动生成:
class I18nKey(Enum):
NAV_FILES = "NAV_FILES"
NAV_DEVICES = "NAV_DEVICES"
# ...键属性
每个键有:
.key— 字符串键名.fallback— 默认文本(Dart)fallback_messages()— 自动生成的回退字典(Python)
使用方式
IDE 端(Dart)
// 在 Consumer Widget 中
UseText(I18nKey.navFiles)
// 在 StateNotifier 中
translate(ref, I18nKey.navFiles)
// 在 Consumer Widget 中(非 UseText)
translateForWidget(ref, I18nKey.navFiles)SDK 端(Python)
from pyrite_sdk.api.data import I18nKey
self.i18n.contribute("en", {
I18nKey.NAV_FILES.key: "Files",
})扩展键
- 在
i18n_key.dart添加枚举值 - 运行
dart run build_runner build重新生成 - 确认
i18n_keys.py自动更新 - 在语言包插件中添加翻译
注意事项
- 不要在 UI 代码中硬编码文本
- Fallback 文本在键定义中,不在
UseText参数 UseText继承父级DefaultTextStyle颜色MenuAction.title是String,需在构建时翻译StatusBarButton.label是Object,可直接使用I18nKey