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",
})

扩展键

  1. i18n_key.dart 添加枚举值
  2. 运行 dart run build_runner build 重新生成
  3. 确认 i18n_keys.py 自动更新
  4. 在语言包插件中添加翻译

注意事项

  • 不要在 UI 代码中硬编码文本
  • Fallback 文本在键定义中,不在 UseText 参数
  • UseText 继承父级 DefaultTextStyle 颜色
  • MenuAction.titleString,需在构建时翻译
  • StatusBarButton.labelObject,可直接使用 I18nKey

On this page