feat: 全面替换硬编码文本并修复编译错误
- 替换多个视图中的硬编码文本为本地化字符串,增强多语言支持。 - 修复编译错误,包括删除重复文件和修复作用域问题。 - 更新本地化文件,新增40+个本地化键值对,确保文本正确显示。 - 添加语言切换测试区域,验证文本实时更新功能。
This commit is contained in:
@@ -41,7 +41,7 @@ struct FeedListFeature {
|
||||
case detailDismissed
|
||||
// 新增:点赞相关Action
|
||||
case likeDynamic(Int, Int, Int, Int) // dynamicId, uid, likedUid, worldId
|
||||
case likeResponse(TaskResult<LikeDynamicResponse>, dynamicId: Int)
|
||||
case likeResponse(TaskResult<LikeDynamicResponse>, dynamicId: Int, loadingId: UUID?)
|
||||
// 预留后续 Action
|
||||
}
|
||||
|
||||
@@ -172,63 +172,74 @@ struct FeedListFeature {
|
||||
)
|
||||
|
||||
return .run { [apiService] send in
|
||||
let loadingId = await APILoadingManager.shared.startLoading(
|
||||
shouldShowLoading: request.shouldShowLoading,
|
||||
shouldShowError: request.shouldShowError
|
||||
)
|
||||
do {
|
||||
let response: LikeDynamicResponse = try await apiService.request(request)
|
||||
await send(.likeResponse(.success(response), dynamicId: dynamicId))
|
||||
await send(.likeResponse(.success(response), dynamicId: dynamicId, loadingId: loadingId))
|
||||
} catch {
|
||||
await send(.likeResponse(.failure(error), dynamicId: dynamicId))
|
||||
await send(.likeResponse(.failure(error), dynamicId: dynamicId, loadingId: loadingId))
|
||||
}
|
||||
}
|
||||
|
||||
case let .likeResponse(.success(response), dynamicId):
|
||||
case let .likeResponse(.success(response), dynamicId, loadingId):
|
||||
state.likeLoadingDynamicIds.remove(dynamicId)
|
||||
if let data = response.data, let success = data.success, success {
|
||||
if let index = state.moments.firstIndex(where: { $0.dynamicId == dynamicId }) {
|
||||
let currentMoment = state.moments[index]
|
||||
let newLikeState = !currentMoment.isLike
|
||||
let updatedMoment = MomentsInfo(
|
||||
dynamicId: currentMoment.dynamicId,
|
||||
uid: currentMoment.uid,
|
||||
nick: currentMoment.nick,
|
||||
avatar: currentMoment.avatar,
|
||||
type: currentMoment.type,
|
||||
content: currentMoment.content,
|
||||
likeCount: data.likeCount ?? currentMoment.likeCount,
|
||||
isLike: newLikeState,
|
||||
commentCount: currentMoment.commentCount,
|
||||
publishTime: currentMoment.publishTime,
|
||||
worldId: currentMoment.worldId,
|
||||
status: currentMoment.status,
|
||||
playCount: currentMoment.playCount,
|
||||
dynamicResList: currentMoment.dynamicResList,
|
||||
gender: currentMoment.gender,
|
||||
squareTop: currentMoment.squareTop,
|
||||
topicTop: currentMoment.topicTop,
|
||||
newUser: currentMoment.newUser,
|
||||
defUser: currentMoment.defUser,
|
||||
scene: currentMoment.scene,
|
||||
userVipInfoVO: currentMoment.userVipInfoVO,
|
||||
headwearPic: currentMoment.headwearPic,
|
||||
headwearEffect: currentMoment.headwearEffect,
|
||||
headwearType: currentMoment.headwearType,
|
||||
headwearName: currentMoment.headwearName,
|
||||
headwearId: currentMoment.headwearId,
|
||||
experLevelPic: currentMoment.experLevelPic,
|
||||
charmLevelPic: currentMoment.charmLevelPic,
|
||||
isCustomWord: currentMoment.isCustomWord,
|
||||
labelList: currentMoment.labelList
|
||||
)
|
||||
state.moments[index] = updatedMoment
|
||||
if let loadingId = loadingId {
|
||||
if let data = response.data, let success = data.success, success {
|
||||
Task { @MainActor in
|
||||
APILoadingManager.shared.finishLoading(loadingId)
|
||||
}
|
||||
if let index = state.moments.firstIndex(where: { $0.dynamicId == dynamicId }) {
|
||||
let currentMoment = state.moments[index]
|
||||
let newLikeState = !currentMoment.isLike
|
||||
let updatedMoment = MomentsInfo(
|
||||
dynamicId: currentMoment.dynamicId,
|
||||
uid: currentMoment.uid,
|
||||
nick: currentMoment.nick,
|
||||
avatar: currentMoment.avatar,
|
||||
type: currentMoment.type,
|
||||
content: currentMoment.content,
|
||||
likeCount: data.likeCount ?? currentMoment.likeCount,
|
||||
isLike: newLikeState,
|
||||
commentCount: currentMoment.commentCount,
|
||||
publishTime: currentMoment.publishTime,
|
||||
worldId: currentMoment.worldId,
|
||||
status: currentMoment.status,
|
||||
playCount: currentMoment.playCount,
|
||||
dynamicResList: currentMoment.dynamicResList,
|
||||
gender: currentMoment.gender,
|
||||
squareTop: currentMoment.squareTop,
|
||||
topicTop: currentMoment.topicTop,
|
||||
newUser: currentMoment.newUser,
|
||||
defUser: currentMoment.defUser,
|
||||
scene: currentMoment.scene,
|
||||
userVipInfoVO: currentMoment.userVipInfoVO,
|
||||
headwearPic: currentMoment.headwearPic,
|
||||
headwearEffect: currentMoment.headwearEffect,
|
||||
headwearType: currentMoment.headwearType,
|
||||
headwearName: currentMoment.headwearName,
|
||||
headwearId: currentMoment.headwearId,
|
||||
experLevelPic: currentMoment.experLevelPic,
|
||||
charmLevelPic: currentMoment.charmLevelPic,
|
||||
isCustomWord: currentMoment.isCustomWord,
|
||||
labelList: currentMoment.labelList
|
||||
)
|
||||
state.moments[index] = updatedMoment
|
||||
}
|
||||
} else {
|
||||
let errorMessage = response.message.isEmpty ? "点赞失败,请重试" : response.message
|
||||
setAPILoadingErrorSync(loadingId, errorMessage: errorMessage)
|
||||
}
|
||||
} else {
|
||||
let errorMessage = response.message.isEmpty ? "点赞失败,请重试" : response.message
|
||||
setAPILoadingErrorSync(UUID(), errorMessage: errorMessage)
|
||||
}
|
||||
return .none
|
||||
|
||||
case let .likeResponse(.failure(error), dynamicId):
|
||||
case let .likeResponse(.failure(error), dynamicId, loadingId):
|
||||
state.likeLoadingDynamicIds.remove(dynamicId)
|
||||
setAPILoadingErrorSync(UUID(), errorMessage: error.localizedDescription)
|
||||
if let loadingId = loadingId {
|
||||
setAPILoadingErrorSync(loadingId, errorMessage: error.localizedDescription)
|
||||
}
|
||||
return .none
|
||||
}
|
||||
}
|
||||
@@ -242,4 +253,4 @@ enum Feed: Equatable, Identifiable {
|
||||
case .placeholder(let id): return id
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user