로컬라이징 문자열 정비
탭, 상세, 설정 화면 텍스트를 I18n 키로 교체 신규 캐릭터 전체보기 등 문자열 번역을 추가
This commit is contained in:
@@ -246,13 +246,13 @@
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "- Company name: SodaLive Co., Ltd.\\n\\n- Representative: Jae Hyung Lee\\n\\n- Address: 5th Fl., 563A, 10 Hwangsaeul-ro 335beon-gil, Bundang-gu, Seongnam-si, Gyeonggi-do\\n\\n- Business registration number: 870-81-03220\\n\\n- Mail-order business report: 2024-SeongnamBundangB-1012\\n\\n- Customer center: 02.2055.1477 (Hours 10:00~19:00)\\n\\n- Representative email: sodalive.official@gmail.com"
|
||||
"value" : "- Company name: SodaLive Co., Ltd.\n\n- Representative: Jae Hyung Lee\n\n- Address: 5th Fl., 563A, 10 Hwangsaeul-ro 335beon-gil, Bundang-gu, Seongnam-si, Gyeonggi-do\n\n- Business registration number: 870-81-03220\n\n- Mail-order business report: 2024-SeongnamBundangB-1012\n\n- Customer center: 02.2055.1477 (Hours 10:00~19:00)\n\n- Representative email: sodalive.official@gmail.com"
|
||||
}
|
||||
},
|
||||
"ja" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "- 会社名 : 株式会社ソダライブ\\n\\n- 代表者 : イ・ジェヒョン\\n\\n- 住所 : 京畿道 城南市 盆唐区 ファンセウル路335番キル10 5階 563A号\\n\\n- 事業者登録番号 : 870-81-03220\\n\\n- 通信販売業申告 : 第2024-城南盆唐B-1012号\\n\\n- カスタマーセンター : 02.2055.1477 (利用時間 10:00~19:00)\\n\\n- 代表メール : sodalive.official@gmail.com"
|
||||
"value" : "- 会社名 : 株式会社ソダライブ\n\n- 代表者 : イ・ジェヒョン\n\n- 住所 : 京畿道 城南市 盆唐区 ファンセウル路335番キル10 5階 563A号\n\n- 事業者登録番号 : 870-81-03220\n\n- 通信販売業申告 : 第2024-城南盆唐B-1012号\n\n- カスタマーセンター : 02.2055.1477 (利用時間 10:00~19:00)\n\n- 代表メール : sodalive.official@gmail.com"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4049,22 +4049,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"목" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Thu"
|
||||
}
|
||||
},
|
||||
"ja" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "木"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"모든 기기에서 로그아웃" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
@@ -4113,6 +4097,22 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"목" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Thu"
|
||||
}
|
||||
},
|
||||
"ja" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "木"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"무료" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
@@ -5089,6 +5089,22 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"설정" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Settings"
|
||||
}
|
||||
},
|
||||
"ja" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "設定"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"설정완료" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
@@ -5569,6 +5585,22 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"신규 캐릭터 전체보기" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "View all new characters"
|
||||
}
|
||||
},
|
||||
"ja" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "新規キャラクターをすべて見る"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"신작" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
@@ -6753,38 +6785,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"이벤트" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Events"
|
||||
}
|
||||
},
|
||||
"ja" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "イベント"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"일" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Sun"
|
||||
}
|
||||
},
|
||||
"ja" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "日"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"이메일을 입력하세요" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
@@ -6833,6 +6833,22 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"이벤트" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Events"
|
||||
}
|
||||
},
|
||||
"ja" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "イベント"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"이벤트 참여하기" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
@@ -7009,6 +7025,22 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"일" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Sun"
|
||||
}
|
||||
},
|
||||
"ja" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "日"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"일간 랭킹" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
@@ -8497,6 +8529,22 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"캐릭터 정보" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Character info"
|
||||
}
|
||||
},
|
||||
"ja" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "キャラクター情報"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"캔 충전" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
@@ -9715,4 +9763,4 @@
|
||||
}
|
||||
},
|
||||
"version" : "1.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ struct CharacterView: View {
|
||||
title: "신규 캐릭터",
|
||||
items: viewModel.newCharacters,
|
||||
isShowRank: false,
|
||||
trailingTitle: "전체보기",
|
||||
trailingTitle: I18n.Common.viewAll,
|
||||
onTapTrailing: {
|
||||
onSelectNewCharacterAll()
|
||||
},
|
||||
|
||||
@@ -25,8 +25,8 @@ struct CharacterDetailView: View {
|
||||
|
||||
var title: String {
|
||||
switch self {
|
||||
case .detail: return "상세"
|
||||
case .gallery: return "갤러리"
|
||||
case .detail: return I18n.Tab.detail
|
||||
case .gallery: return I18n.Tab.gallery
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -34,7 +34,7 @@ struct CharacterDetailView: View {
|
||||
var body: some View {
|
||||
BaseView(isLoading: $viewModel.isLoading) {
|
||||
VStack(spacing: 0) {
|
||||
DetailNavigationBar(title: "캐릭터 정보") {
|
||||
DetailNavigationBar(title: String(localized: "캐릭터 정보")) {
|
||||
if presentationMode.wrappedValue.isPresented {
|
||||
presentationMode.wrappedValue.dismiss()
|
||||
} else {
|
||||
|
||||
@@ -18,7 +18,7 @@ struct NewCharacterListView: View {
|
||||
BaseView(isLoading: $viewModel.isLoading) {
|
||||
VStack(spacing: 8) {
|
||||
// Toolbar
|
||||
DetailNavigationBar(title: "신규 캐릭터 전체보기")
|
||||
DetailNavigationBar(title: String(localized: "신규 캐릭터 전체보기"))
|
||||
|
||||
VStack(alignment: .leading, spacing: 12) {
|
||||
// 전체 n개
|
||||
|
||||
@@ -21,9 +21,9 @@ struct ChatTabView: View {
|
||||
|
||||
var title: String {
|
||||
switch self {
|
||||
case .character: return "캐릭터"
|
||||
case .original: return "작품별"
|
||||
case .talk: return "톡"
|
||||
case .character: return I18n.Tab.character
|
||||
case .original: return I18n.Tab.work
|
||||
case .talk: return I18n.Tab.talk
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ struct OriginalWorkDetailView: View {
|
||||
|
||||
HStack(spacing: 0) {
|
||||
SeriesDetailTabView(
|
||||
title: "캐릭터",
|
||||
title: I18n.Tab.character,
|
||||
width: screenSize().width / 2,
|
||||
isSelected: viewModel.currentTab == .character
|
||||
) {
|
||||
@@ -63,7 +63,7 @@ struct OriginalWorkDetailView: View {
|
||||
}
|
||||
|
||||
SeriesDetailTabView(
|
||||
title: "작품정보",
|
||||
title: I18n.Tab.workInfo,
|
||||
width: screenSize().width / 2,
|
||||
isSelected: viewModel.currentTab == .info
|
||||
) {
|
||||
|
||||
@@ -12,6 +12,8 @@ import Foundation
|
||||
// 기준 언어 선택은 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: "確認") }
|
||||
@@ -38,8 +40,12 @@ enum I18n {
|
||||
enum Tab {
|
||||
// 탭/도메인
|
||||
static var character: String { pick(ko: "캐릭터", en: "Character", ja: "キャラクター") }
|
||||
static var work: String { pick(ko: "작품", en: "Work", 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: "ギャラリー") }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ struct SettingsView: View {
|
||||
BaseView(isLoading: $viewModel.isLoading) {
|
||||
GeometryReader { geo in
|
||||
VStack(spacing: 0) {
|
||||
DetailNavigationBar(title: "설정")
|
||||
DetailNavigationBar(title: String(localized: "설정"))
|
||||
|
||||
ScrollView(.vertical, showsIndicators: false) {
|
||||
VStack(spacing: 0) {
|
||||
|
||||
Reference in New Issue
Block a user