--- applyTo: "MainShell/Common/**/*.cs,**/*ViewModel.cs,**/*Service.cs,**/*Process*.cs" --- # Localization and Popup Instructions ## Scope These rules apply to internal program message dialogs only. Do not apply these rules to: - database alarms - PLC alarm chain - device alarm chain - AlarmAsync main alarm path ## 中文说明 这些规则仅适用于**程序内部提示弹窗**。 不适用于: - 数据库报警 - PLC 报警链路 - 设备报警主链路 - `AlarmAsync()` 等主报警链路 ## Required Popup Pattern For internal prompts: 1. define MessageKey enum value in `MainShell/Common/MessageKey.cs` 2. add mapping in `LanguageResourceHelper.ResourceKeyMap` 3. add Chinese resource in `MainShell/Language/MXJM_CN.xaml` 4. add English resource in `MainShell/Language/MXJM_EN.xaml` 5. call `LocalizedMessageBox.Show()` or `LocalizedMessageBox.ShowFormat()` ## 中文说明 程序内提示弹窗开发流程: 1. 在 `MessageKey.cs` 中定义枚举 2. 在 `LanguageResourceHelper.ResourceKeyMap` 中增加映射 3. 在 `MXJM_CN.xaml` 中补中文资源 4. 在 `MXJM_EN.xaml` 中补英文资源 5. 业务代码统一调用 `LocalizedMessageBox.Show()` 或 `ShowFormat()` ## Required Title Keys Use: - MessageKey.TitleInfo - MessageKey.TitleWarning - MessageKey.TitleError - MessageKey.TitleConfirm ## 中文说明 弹窗标题统一使用: - `MessageKey.TitleInfo` - `MessageKey.TitleWarning` - `MessageKey.TitleError` - `MessageKey.TitleConfirm` ## Formatting Rules - For parameterized messages, use `ShowFormat()` - Resource text should use placeholders such as `{0}`, `{1}` ## 中文说明 带参数的提示文案必须使用 `ShowFormat()`,资源文本使用 `{0}`、`{1}` 占位符。 ## Forbidden Patterns Do not generate: - `MwMessageBox.Show("中文")` - `MessageBox.Show("中文")` - `LocalizedMessageBox.Show("resourceKeyString")` - direct resource dictionary access for popup text ## 中文说明 禁止生成以下写法: - `MwMessageBox.Show("中文")` - `MessageBox.Show("中文")` - `LocalizedMessageBox.Show("资源key字符串")` - 直接访问资源字典获取弹窗文案 ## Migration Rule When modifying old internal prompt code, prefer migrating old MessageBox/MwMessageBox usage to LocalizedMessageBox and update: - MessageKey enum - ResourceKeyMap - Chinese resource - English resource - business code call site ## 中文说明 迁移旧代码中的程序提示时,应优先改为 `LocalizedMessageBox` 方案,并同步补齐: - MessageKey 枚举 - ResourceKeyMap 映射 - 中文资源 - 英文资源 - 业务代码调用点 ## Workflow / Process Error and Message Localization Error messages, status messages, and user-facing messages generated in: - Service layer (Service/*Service.cs) - Activity layer (MainShell/Process/Activity/*.cs) - ProcessService implementations Must follow the same localization requirements as popup dialogs: 1. Define MessageKey enum values for all error/status messages 2. Register in LanguageResourceHelper.ResourceKeyMap 3. Add translations in MXJM_CN.xaml and MXJM_EN.xaml 4. Pass MessageKey enum (not raw strings) in WorkflowContext or result objects 5. Display messages using LocalizedMessageBox from ViewModel/View layer Do not hardcode error messages or status strings in Service/Activity code. ## 中文说明 在以下位置生成的错误信息、状态提示、用户提示: - Service 层(Service/*Service.cs) - Activity 层(MainShell/Process/Activity/*.cs) - ProcessService 实现 必须遵循与弹窗相同的本地化规范: 1. 在 MessageKey 中定义所有错误/状态消息的枚举值 2. 在 LanguageResourceHelper.ResourceKeyMap 中注册 3. 在 MXJM_CN.xaml 和 MXJM_EN.xaml 中添加对应翻译 4. 在 WorkflowContext 或结果对象中传递 MessageKey 枚举值(不是原始字符串) 5. 从 ViewModel/View 层使用 LocalizedMessageBox 显示消息 不允许在 Service/Activity 代码中硬编码错误信息或状态字符串。 ## Example: Adding Workflow Error Message For a new workflow error in a Service: 1. Define in `MessageKey.cs`: ```csharp ProcessError_InvalidToolId, ProcessError_HardwareTimeout, ``` 2. Add to `LanguageResourceHelper.ResourceKeyMap`: ```csharp { MessageKey.ProcessError_InvalidToolId, "MXJM:ProcessError_InvalidToolId" }, { MessageKey.ProcessError_HardwareTimeout, "MXJM:ProcessError_HardwareTimeout" }, ``` 3. In result object, return the message key: ```csharp public MessageKey? ErrorMessageKey { get; set; } ``` 4. In Activity's AfterExecute or ViewModel, check and display: ```csharp if (result.ErrorMessageKey.HasValue) { LocalizedMessageBox.Show(result.ErrorMessageKey.Value, MessageKey.TitleError); } ``` ## 中文说明 以工作流错误为例: 1. 在 `MessageKey.cs` 中定义: ProcessError_InvalidToolId ProcessError_HardwareTimeout 2. 在 `LanguageResourceHelper.ResourceKeyMap` 中注册 3. 在 Service 返回对象中包含 MessageKey 4. 在 Activity AfterExecute 或 ViewModel 中检查并使用 LocalizedMessageBox 显示