# 修复内插字符串处理 - Product Requirement Document

## Overview
- **Summary**: 修复 `CSharpStringExtractor` 中处理内插字符串（$""）时，当内插表达式内部包含字符串字面量导致的解析错误问题
- **Purpose**: 解决测试用例 "should handle complex string 3" 失败的问题，该测试验证 C# 字符串表达式中递归内嵌字符串表达式的情况是否能被正确转换
- **Target Users**: 使用该 C# 字符串提取和国际化工具的开发者

## Goals
- 修复 `processStringTemplates` 方法，使其能够正确处理内插字符串内部包含字符串字面量的情况
- 确保测试用例 "should handle complex string 3" 能够通过
- 保持其他现有测试的通过状态

## Non-Goals (Out of Scope)
- 不修改其他与内插字符串处理无关的功能
- 不添加新的功能特性，仅修复现有问题

## Background & Context
- 当前问题：当处理包含嵌套字符串字面量的内插字符串时，例如 `$"是否暴击: [b]{(_damageInfo.IsCritical ? "[color=#00B000]是[/color]" : "否")}[/b]\n"`，解析器会过早终止匹配，导致转换结果错误
- 根本原因：1) 模板正则表达式在匹配内容时没有正确处理嵌套的引号；2) 在提取内插表达式 `{...}` 时没有忽略内部字符串字面量中的 `{` 和 `}` 字符

## Functional Requirements
- **FR-1**: 正确匹配包含嵌套字符串字面量的内插字符串
- **FR-2**: 在提取内插表达式变量时，正确处理内部的字符串引号
- **FR-3**: 生成正确的 `Tr.Format()` 转换结果

## Non-Functional Requirements
- **NFR-1**: 修复后不影响其他 96 个测试的通过状态
- **NFR-2**: 保持代码的类型安全和可读性

## Constraints
- **Technical**: 必须使用 TypeScript，遵循项目现有代码风格
- **Business**: 必须保持与现有代码的兼容性
- **Dependencies**: 无额外依赖，仅修改现有代码

## Assumptions
- 现有代码的其他部分功能正常
- 测试用例 "should handle complex string 3" 是正确的预期行为

## Acceptance Criteria

### AC-1: 测试用例 "should handle complex string 3" 成功通过
- **Given**: 存在测试用例测试包含嵌套字符串字面量的内插字符串
- **When**: 运行该测试用例
- **Then**: 测试用例成功通过
- **Verification**: `programmatic`
- **Notes**: 确保 convertedCode 正确生成，literals 正确提取

### AC-2: 其他所有测试保持通过
- **Given**: 修复后的代码
- **When**: 运行所有 Jest 测试
- **Then**: 所有 96 个测试保持通过
- **Verification**: `programmatic`

## Open Questions
- 无
