fix(report): 사용자 차단 다이얼로그 문구를 국제화한다
This commit is contained in:
@@ -896,6 +896,83 @@ enum I18n {
|
|||||||
static var fetchLiveInfoFailed: String { pick(ko: "라이브 정보를 가져오지 못했습니다.\n다시 시도해 주세요.", en: "Failed to fetch live information.\nPlease try again.", ja: "ライブ情報を取得できませんでした。\nもう一度お試しください。") }
|
static var fetchLiveInfoFailed: String { pick(ko: "라이브 정보를 가져오지 못했습니다.\n다시 시도해 주세요.", en: "Failed to fetch live information.\nPlease try again.", ja: "ライブ情報を取得できませんでした。\nもう一度お試しください。") }
|
||||||
static var userBlocked: String { pick(ko: "차단하였습니다.", en: "User has been blocked.", ja: "ブロックしました。") }
|
static var userBlocked: String { pick(ko: "차단하였습니다.", en: "User has been blocked.", ja: "ブロックしました。") }
|
||||||
static var userUnblocked: String { pick(ko: "차단이 해제 되었습니다.", en: "User has been unblocked.", ja: "ブロックを解除しました。") }
|
static var userUnblocked: String { pick(ko: "차단이 해제 되었습니다.", en: "User has been unblocked.", ja: "ブロックを解除しました。") }
|
||||||
|
static var blockDialogTitle: String { pick(ko: "사용자 차단", en: "Block User", ja: "ユーザーブロック") }
|
||||||
|
static func blockConfirmQuestion(_ nickname: String) -> String {
|
||||||
|
pick(
|
||||||
|
ko: "\(nickname)님을 차단하시겠습니까?",
|
||||||
|
en: "Do you want to block \(nickname)?",
|
||||||
|
ja: "\(nickname)さんをブロックしますか?"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
static func blockCreatorNotice(_ nickname: String) -> String {
|
||||||
|
pick(
|
||||||
|
ko: """
|
||||||
|
사용자를 차단하면 해당 사용자는 아래 기능이 제한됩니다.
|
||||||
|
|
||||||
|
- 내 채널 접근 제한
|
||||||
|
- 내가 개설한 라이브 입장 불가
|
||||||
|
- 내가 등록한 콘텐츠 접근 불가
|
||||||
|
- 나에게 메시지 보내기 불가
|
||||||
|
- \(nickname)님이 작성한 댓글보기 제한
|
||||||
|
- \(nickname)님의 라이브 채팅보기 제한
|
||||||
|
""",
|
||||||
|
en: """
|
||||||
|
If you block this user, the following features will be restricted for that user.
|
||||||
|
|
||||||
|
- Access to my channel restricted
|
||||||
|
- Cannot enter live streams I created
|
||||||
|
- Cannot access content I registered
|
||||||
|
- Cannot send me messages
|
||||||
|
- Restricted from viewing comments written by \(nickname)
|
||||||
|
- Restricted from viewing \(nickname)'s live chats
|
||||||
|
""",
|
||||||
|
ja: """
|
||||||
|
このユーザーをブロックすると、以下の機能がそのユーザーに対して制限されます。
|
||||||
|
|
||||||
|
- 私のチャンネルへのアクセス制限
|
||||||
|
- 私が開設したライブへの入場不可
|
||||||
|
- 私が登録したコンテンツへのアクセス不可
|
||||||
|
- 私へのメッセージ送信不可
|
||||||
|
- \(nickname)さんが作成したコメントの閲覧制限
|
||||||
|
- \(nickname)さんのライブチャット閲覧制限
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
}
|
||||||
|
static func blockListenerNotice(_ nickname: String) -> String {
|
||||||
|
pick(
|
||||||
|
ko: """
|
||||||
|
사용자를 차단하면 아래 기능이 제한됩니다.
|
||||||
|
|
||||||
|
- \(nickname)님의 채널 접근 제한
|
||||||
|
- \(nickname)님의 콘텐츠 보기 제한
|
||||||
|
- \(nickname)님의 라이브 보기 제한
|
||||||
|
- \(nickname)님에게 메시지 보내기 제한
|
||||||
|
- \(nickname)님이 작성한 댓글보기 제한
|
||||||
|
- \(nickname)님의 라이브 채팅보기 제한
|
||||||
|
""",
|
||||||
|
en: """
|
||||||
|
If you block this user, the following features will be restricted.
|
||||||
|
|
||||||
|
- Access to \(nickname)'s channel restricted
|
||||||
|
- Restricted from viewing \(nickname)'s content
|
||||||
|
- Restricted from viewing \(nickname)'s live streams
|
||||||
|
- Restricted from sending messages to \(nickname)
|
||||||
|
- Restricted from viewing comments written by \(nickname)
|
||||||
|
- Restricted from viewing \(nickname)'s live chats
|
||||||
|
""",
|
||||||
|
ja: """
|
||||||
|
このユーザーをブロックすると、以下の機能が制限されます。
|
||||||
|
|
||||||
|
- \(nickname)さんのチャンネルへのアクセス制限
|
||||||
|
- \(nickname)さんのコンテンツ閲覧制限
|
||||||
|
- \(nickname)さんのライブ閲覧制限
|
||||||
|
- \(nickname)さんへのメッセージ送信制限
|
||||||
|
- \(nickname)さんが作成したコメントの閲覧制限
|
||||||
|
- \(nickname)さんのライブチャット閲覧制限
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
}
|
||||||
|
static var blockAction: String { pick(ko: "차단", en: "Block", ja: "ブロック") }
|
||||||
static var shareLinkCreateFailed: String { pick(ko: "공유링크를 생성하지 못했습니다.\n다시 시도해 주세요.", en: "Failed to create a share link.\nPlease try again.", ja: "共有リンクを作成できませんでした。\nもう一度お試しください。") }
|
static var shareLinkCreateFailed: String { pick(ko: "공유링크를 생성하지 못했습니다.\n다시 시도해 주세요.", en: "Failed to create a share link.\nPlease try again.", ja: "共有リンクを作成できませんでした。\nもう一度お試しください。") }
|
||||||
|
|
||||||
static var cheersDeleteTitle: String { pick(ko: "응원글 삭제", en: "Delete Cheer", ja: "応援削除") }
|
static var cheersDeleteTitle: String { pick(ko: "응원글 삭제", en: "Delete Cheer", ja: "応援削除") }
|
||||||
|
|||||||
@@ -14,15 +14,11 @@ struct UserBlockConfirmDialogView: View {
|
|||||||
let nickname: String
|
let nickname: String
|
||||||
let confirmAction: () -> Void
|
let confirmAction: () -> Void
|
||||||
|
|
||||||
let notice = """
|
var notice: String {
|
||||||
사용자를 차단하면 사용자는 아래 기능이 제한됩니다.
|
UserDefaults.string(forKey: .role) == MemberRole.CREATOR.rawValue
|
||||||
|
? I18n.MemberChannel.blockCreatorNotice(nickname)
|
||||||
- 내가 개설한 라이브 입장 불가
|
: I18n.MemberChannel.blockListenerNotice(nickname)
|
||||||
- 나에게 메시지 보내기 불가
|
}
|
||||||
- 내 채널의 팬Talk 작성불가
|
|
||||||
"""
|
|
||||||
|
|
||||||
let notice2 = "- 사용자를 차단하면 '차단한 사용자의 라이브 중 채팅'이 보이지 않습니다."
|
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
ZStack {
|
ZStack {
|
||||||
@@ -32,16 +28,16 @@ struct UserBlockConfirmDialogView: View {
|
|||||||
.onTapGesture { isShowing = false }
|
.onTapGesture { isShowing = false }
|
||||||
|
|
||||||
VStack(spacing: 13.3) {
|
VStack(spacing: 13.3) {
|
||||||
Text("사용자 차단")
|
Text(I18n.MemberChannel.blockDialogTitle)
|
||||||
.appFont(size: 16.7, weight: .medium)
|
.appFont(size: 16.7, weight: .medium)
|
||||||
.foregroundColor(.white)
|
.foregroundColor(.white)
|
||||||
|
|
||||||
Text("\(nickname)님을 차단하시겠습니까?")
|
Text(I18n.MemberChannel.blockConfirmQuestion(nickname))
|
||||||
.appFont(size: 13.3, weight: .medium)
|
.appFont(size: 13.3, weight: .medium)
|
||||||
.foregroundColor(.white)
|
.foregroundColor(.white)
|
||||||
|
|
||||||
HStack(spacing: 0) {
|
HStack(spacing: 0) {
|
||||||
Text(UserDefaults.string(forKey: .role) == MemberRole.CREATOR.rawValue ? notice : notice2)
|
Text(notice)
|
||||||
.appFont(size: 13.3, weight: .medium)
|
.appFont(size: 13.3, weight: .medium)
|
||||||
.foregroundColor(.white)
|
.foregroundColor(.white)
|
||||||
|
|
||||||
@@ -51,14 +47,14 @@ struct UserBlockConfirmDialogView: View {
|
|||||||
HStack(spacing: 26.7) {
|
HStack(spacing: 26.7) {
|
||||||
Spacer()
|
Spacer()
|
||||||
|
|
||||||
Text("취소")
|
Text(I18n.Common.cancel)
|
||||||
.appFont(size: 13.3, weight: .medium)
|
.appFont(size: 13.3, weight: .medium)
|
||||||
.foregroundColor(Color.button)
|
.foregroundColor(Color.button)
|
||||||
.onTapGesture {
|
.onTapGesture {
|
||||||
isShowing = false
|
isShowing = false
|
||||||
}
|
}
|
||||||
|
|
||||||
Text("차단")
|
Text(I18n.MemberChannel.blockAction)
|
||||||
.appFont(size: 13.3, weight: .medium)
|
.appFont(size: 13.3, weight: .medium)
|
||||||
.foregroundColor(Color.button)
|
.foregroundColor(Color.button)
|
||||||
.onTapGesture {
|
.onTapGesture {
|
||||||
|
|||||||
21
docs/20260225_사용자차단다이얼로그문구수정.md
Normal file
21
docs/20260225_사용자차단다이얼로그문구수정.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# 2026-02-25 사용자 차단 다이얼로그 문구 수정
|
||||||
|
|
||||||
|
## 구현 체크리스트
|
||||||
|
- [x] 사용자 차단 다이얼로그 문구 위치 확인 및 분기 방식 점검
|
||||||
|
- [x] `role == CREATOR` 문구를 요구사항 기준으로 교체
|
||||||
|
- [x] `role != CREATOR` 문구를 요구사항 기준으로 교체
|
||||||
|
- [x] 사용자 차단 다이얼로그 문구 국제화(`I18n.MemberChannel`) 적용
|
||||||
|
- [x] 진단/빌드 검증 수행 및 결과 기록
|
||||||
|
|
||||||
|
## 검증 기록
|
||||||
|
- 무엇/왜/어떻게: 사용자 요청에 따라 사용자 차단 다이얼로그의 역할별 안내 문구를 유지하면서 `I18n.MemberChannel` 기반으로 국제화 적용했다. `UserBlockConfirmDialogView`는 하드코딩 문자열 대신 국제화 키를 사용하고, 닉네임 치환이 필요한 문구는 `I18n` 함수로 분리했다.
|
||||||
|
- 실행 명령: `lsp_diagnostics` (`SodaLive/Sources/I18n/I18n.swift`, `SodaLive/Sources/Report/UserBlockConfirmDialogView.swift`)
|
||||||
|
- 결과: SourceKit 인덱싱 한계로 외부 심볼(`LanguageHeaderProvider`, `MemberRole`, `appFont`, `screenSize`, `Color.gray22`) 미해석 오류가 보고되어 신뢰 가능한 정적 진단이 어려움. 실제 컴파일 검증은 `xcodebuild` 성공으로 확인.
|
||||||
|
- 실행 명령: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build -quiet`
|
||||||
|
- 결과: 성공 (경고만 존재, 빌드 완료)
|
||||||
|
- 실행 명령: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build -quiet`
|
||||||
|
- 결과: 성공 (경고만 존재, 빌드 완료)
|
||||||
|
- 실행 명령: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" test -quiet`
|
||||||
|
- 결과: 실패 (`Scheme SodaLive is not currently configured for the test action.`)
|
||||||
|
- 실행 명령: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" test -quiet`
|
||||||
|
- 결과: 실패 (`Scheme SodaLive-dev is not currently configured for the test action.`)
|
||||||
Reference in New Issue
Block a user