Files
sodalive-ios/SodaLive/Sources/I18n/I18n.swift
Yu Sung 8efa89d564 콘텐츠 작성 및 라이브 메뉴 다국어화
콘텐츠 등록 화면 텍스트와 버튼을 I18n 기반 번역 문자열로 교체

룰렛 설정과 미션 메뉴 버튼 라벨을 다국어 문자열로 통일

신규 텍스트를 String Catalog에 추가하여 네비게이션 타이틀 번역
2025-12-17 18:47:46 +09:00

118 lines
5.7 KiB
Swift

//
// I18n.swift
// SodaLive
//
// Created by Junie (AI) on 2025/12/17.
//
import Foundation
// MARK: - I18n
// String Catalog i18n.
// LanguageHeaderProvider.current("ko"|"en"|"ja").
enum I18n {
enum Common {
static var viewAll: String { pick(ko: "전체보기", en: "View all", ja: "すべて見る") }
//
static var apply: String { pick(ko: "적용", en: "Apply", ja: "適用") }
static var confirm: String { pick(ko: "확인", en: "Confirm", ja: "確認") }
static var cancel: String { pick(ko: "취소", en: "Cancel", ja: "キャンセル") }
//
static var settings: String { pick(ko: "설정", en: "Settings", ja: "設定") }
static var commonError: String { pick(ko: "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다.", en: "Settings", ja: "設定") }
static var roulette1: String { pick(ko: "룰렛 1", en: "Roulette 1", ja: "ルーレット1") }
static var roulette2: String { pick(ko: "룰렛 2", en: "Roulette 2", ja: "ルーレット2") }
static var roulette3: String { pick(ko: "룰렛 3", en: "Roulette 3", ja: "ルーレット3") }
}
enum MissionMenu {
static var menu1: String { pick(ko: "메뉴 1", en: "Menu 1", ja: "メニュー1") }
static var menu2: String { pick(ko: "메뉴 2", en: "Menu 2", ja: "メニュー2") }
static var menu3: String { pick(ko: "메뉴 3", en: "Menu 3", ja: "メニュー3") }
}
enum CreateContent {
static var selectFile: String { pick(ko: "파일 선택", en: "Select file", ja: "ファイル選択") }
static var selectTheme: String { pick(ko: "테마 선택", en: "Select theme", ja: "テーマを選択") }
static var uploadContentDescriptionHint: String { pick(ko: "내용을 입력하세요", en: "Enter a description", ja: "内容を入力してください") }
// /
static var free: String { pick(ko: "무료", en: "Free", ja: "無料") }
static var paid: String { pick(ko: "유료", en: "Paid", ja: "有料") }
static var purchaseBoth: String { pick(ko: "소장/대여", en: "Buy/Rent", ja: "購入/レンタル") }
static var purchaseBuyOnly: String { pick(ko: "소장만", en: "Buy only", ja: "購入のみ") }
static var purchaseRentOnly: String { pick(ko: "대여만", en: "Rent only", ja: "レンタルのみ") }
static var unlimited: String { pick(ko: "무제한", en: "Unlimited", ja: "無制限") }
static var limitedEdition: String { pick(ko: "한정판", en: "Limited", ja: "限定版") }
//
static var available: String { pick(ko: "가능", en: "Available", ja: "可能") }
static var unavailable: String { pick(ko: "불가능", en: "Unavailable", ja: "不可") }
//
static var generate: String { pick(ko: "생성", en: "Generate", ja: "生成") }
static var doNotGenerate: String { pick(ko: "생성 안 함", en: "Do not generate", ja: "生成しない") }
//
static var allAges: String { pick(ko: "전체 연령", en: "All ages", ja: "全年齢") }
static var over19: String { pick(ko: "19세 이상", en: "19+", ja: "19歳以上") }
//
static var commentAllowed: String { pick(ko: "댓글 가능", en: "Comments allowed", ja: "コメント可") }
static var commentNotAllowed: String { pick(ko: "댓글 불가", en: "Comments not allowed", ja: "コメント不可") }
//
static var publishNow: String { pick(ko: "지금 공개", en: "Publish now", ja: "今すぐ公開") }
static var publishReserved: String { pick(ko: "예약 공개", en: "Scheduled", ja: "予約公開") }
}
enum Category {
static var all: String { pick(ko: "전체", en: "All", ja: "すべて") }
}
enum RankingSort {
// /
static var revenue: String { pick(ko: "매출", en: "Revenue", ja: "売上高") }
static var salesVolume: String { pick(ko: "판매량", en: "Sales", ja: "販売量") }
static var comments: String { pick(ko: "댓글", en: "Comments", ja: "コメント") }
static var likes: String { pick(ko: "좋아요", en: "Likes", ja: "いいね") }
}
enum Tab {
// /
static var character: String { pick(ko: "캐릭터", en: "Character", ja: "キャラクター") }
static var work: String { pick(ko: "작품별", en: "Works", ja: "作品別") }
static var talk: String { pick(ko: "", en: "Talk", ja: "トーク") }
static var workInfo: String { pick(ko: "작품정보", en: "Work info", ja: "作品情報") }
static var detail: String { pick(ko: "상세", en: "Details", ja: "詳細") }
static var gallery: String { pick(ko: "갤러리", en: "Gallery", ja: "ギャラリー") }
}
}
// MARK: -
@inline(__always)
private func pick(ko: String, en: String, ja: String) -> String {
switch LanguageHeaderProvider.current {
case "ko": return ko
case "ja": return ja
default: return en
}
}
/*
(ViewModel, Service Text ):
// ViewModel
let title = I18n.Common.all
// View (Text UI )
let menuLabel = I18n.Common.settings
: Text("...") String Catalog .
*/