시리즈 상세 화면 현지화 문자열 제공

시리즈 상세 화면의 탭과 섹션 제목을 다국어로 제공한다.
가격 표시와 요일 표기를 로케일에 맞게 보여준다.
This commit is contained in:
Yu Sung
2025-12-19 18:30:52 +09:00
parent e035e57fc2
commit 27b024f187
4 changed files with 165 additions and 108 deletions
+54
View File
@@ -269,6 +269,60 @@ enum I18n {
}
}
// 시리즈 상세 화면 관련 문자열 모음
enum SeriesDetail {
// 탭
static var home: String { pick(ko: "홈", en: "Home", ja: "ホーム") }
static var introduction: String { pick(ko: "작품소개", en: "Introduction", ja: "作品紹介") }
// 섹션 타이틀
static var keywords: String { pick(ko: "키워드", en: "Keywords", ja: "キーワード") }
static var workIntro: String { pick(ko: "작품소개", en: "Introduction", ja: "作品紹介") }
static var details: String { pick(ko: "상세정보", en: "Details", ja: "詳細情報") }
static var price: String { pick(ko: "가격", en: "Price", ja: "価格") }
// 상세 라벨
static var genre: String { pick(ko: "장르", en: "Genre", ja: "ジャンル") }
static var ageLimit: String { pick(ko: "연령제한", en: "Age rating", ja: "年齢制限") }
static var writer: String { pick(ko: "작가", en: "Writer", ja: "作家") }
static var studio: String { pick(ko: "제작사", en: "Studio", ja: "制作会社") }
static var schedule: String { pick(ko: "연재", en: "Schedule", ja: "連載") }
static var releaseDate: String { pick(ko: "출시일", en: "Release date", ja: "リリース日") }
// 가격 라벨(명사형)
static var rentLabel: String { pick(ko: "대여", en: "Rent", ja: "レンタル") }
static var buyLabel: String { pick(ko: "소장", en: "Buy", ja: "購入") }
// 값 표기
static var ageAll: String { pick(ko: "전체연령가", en: "All ages", ja: "全年齢") }
static var age19Plus: String { pick(ko: "19세 이상", en: "19+", ja: "19歳以上") }
static var random: String { pick(ko: "랜덤", en: "Random", ja: "ランダム") }
// 단위 및 포맷
static func cansUnit(_ value: Int) -> String {
pick(ko: "\(value)캔", en: "\(value) cans", ja: "\(value)缶")
}
static func daysSuffix(_ days: Int) -> String {
pick(ko: "(\(days)일)", en: "(\(days) day\(days == 1 ? "" : "s"))", ja: "(\(days)日)")
}
// 가격 범위 표기: min==max==0 -> 무료, min==max>0 -> N캔, 범위 -> (무료|min) ~ max캔
static func priceInfo(min: Int, max: Int) -> String {
if min == max {
if max == 0 {
return CreateContent.free
} else {
return cansUnit(max)
}
} else {
let left = (min == 0) ? CreateContent.free : "\(min)"
// 범위 구분자는 로케일과 무관하게 시각적 구분자 유지
return "\(left) ~ \(cansUnit(max))"
}
}
}
// 콘텐츠 구매/대여 관련 공통 액션 라벨
enum Purchase {
static var rent: String { pick(ko: "대여하기", en: "Rent", ja: "レンタルする") }