fix(ui): 홈/메인 문자열 리소스화 및 영·일 번역 추가

This commit is contained in:
2025-11-28 18:40:42 +09:00
parent 6e3edd1e96
commit 2740522f05
9 changed files with 162 additions and 196 deletions

View File

@@ -8,7 +8,6 @@ import android.widget.Toast
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import kr.co.vividnext.sodalive.audio_content.series.SeriesListAdapter
import kr.co.vividnext.sodalive.audio_content.series.detail.SeriesDetailActivity import kr.co.vividnext.sodalive.audio_content.series.detail.SeriesDetailActivity
import kr.co.vividnext.sodalive.base.BaseFragment import kr.co.vividnext.sodalive.base.BaseFragment
import kr.co.vividnext.sodalive.common.Constants import kr.co.vividnext.sodalive.common.Constants
@@ -61,7 +60,7 @@ class SeriesMainDayOfWeekFragment : BaseFragment<FragmentSeriesMainDayOfWeekBind
} }
private fun setupDayOfWeekDay() { private fun setupDayOfWeekDay() {
val dayOfWeekAdapter = DayOfWeekAdapter(screenWidth = screenWidth) { val dayOfWeekAdapter = DayOfWeekAdapter(requireContext()) {
adapter.clear() adapter.clear()
viewModel.dayOfWeek = it viewModel.dayOfWeek = it
} }
@@ -73,7 +72,7 @@ class SeriesMainDayOfWeekFragment : BaseFragment<FragmentSeriesMainDayOfWeekBind
false false
) { ) {
override fun canScrollVertically() = false override fun canScrollVertically() = false
override fun canScrollHorizontally() = false override fun canScrollHorizontally() = true
} }
rvDayOfWeek.layoutManager = layoutManager rvDayOfWeek.layoutManager = layoutManager

View File

@@ -1,14 +1,16 @@
package kr.co.vividnext.sodalive.home package kr.co.vividnext.sodalive.home
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.databinding.ItemDayOfWeekBinding import kr.co.vividnext.sodalive.databinding.ItemDayOfWeekBinding
import java.util.Calendar import java.util.Calendar
class DayOfWeekAdapter( class DayOfWeekAdapter(
private val screenWidth: Int, private val context: Context,
private val onClickItem: (SeriesPublishedDaysOfWeek) -> Unit, private val onClickItem: (SeriesPublishedDaysOfWeek) -> Unit,
) : RecyclerView.Adapter<DayOfWeekAdapter.ViewHolder>() { ) : RecyclerView.Adapter<DayOfWeekAdapter.ViewHolder>() {
@@ -20,17 +22,6 @@ class DayOfWeekAdapter(
binding.tvDayOfWeek.text = dayOfWeek.dayOfWeekStr binding.tvDayOfWeek.text = dayOfWeek.dayOfWeekStr
binding.tvDayOfWeek.isSelected = dayOfWeek.dayOfWeek == selectedDayOfWeek binding.tvDayOfWeek.isSelected = dayOfWeek.dayOfWeek == selectedDayOfWeek
val lp = binding.tvDayOfWeek.layoutParams
lp.height = screenWidth * 38 / 400
if (dayOfWeek.dayOfWeek == SeriesPublishedDaysOfWeek.RANDOM) {
lp.width = screenWidth * 54 / 400
} else {
lp.width = screenWidth * 38 / 400
}
binding.tvDayOfWeek.layoutParams = lp
binding.root.setOnClickListener { binding.root.setOnClickListener {
onClickItem(dayOfWeek.dayOfWeek) onClickItem(dayOfWeek.dayOfWeek)
selectedDayOfWeek = dayOfWeek.dayOfWeek selectedDayOfWeek = dayOfWeek.dayOfWeek
@@ -42,14 +33,14 @@ class DayOfWeekAdapter(
private var selectedDayOfWeek = SeriesPublishedDaysOfWeek.RANDOM private var selectedDayOfWeek = SeriesPublishedDaysOfWeek.RANDOM
private val dayOfWeekItems = listOf( private val dayOfWeekItems = listOf(
DayOfWeek(dayOfWeekStr = "", dayOfWeek = SeriesPublishedDaysOfWeek.MON), DayOfWeek(dayOfWeekStr = context.getString(R.string.day_mon_short), dayOfWeek = SeriesPublishedDaysOfWeek.MON),
DayOfWeek(dayOfWeekStr = "", dayOfWeek = SeriesPublishedDaysOfWeek.TUE), DayOfWeek(dayOfWeekStr = context.getString(R.string.day_tue_short), dayOfWeek = SeriesPublishedDaysOfWeek.TUE),
DayOfWeek(dayOfWeekStr = "", dayOfWeek = SeriesPublishedDaysOfWeek.WED), DayOfWeek(dayOfWeekStr = context.getString(R.string.day_wed_short), dayOfWeek = SeriesPublishedDaysOfWeek.WED),
DayOfWeek(dayOfWeekStr = "", dayOfWeek = SeriesPublishedDaysOfWeek.THU), DayOfWeek(dayOfWeekStr = context.getString(R.string.day_thu_short), dayOfWeek = SeriesPublishedDaysOfWeek.THU),
DayOfWeek(dayOfWeekStr = "", dayOfWeek = SeriesPublishedDaysOfWeek.FRI), DayOfWeek(dayOfWeekStr = context.getString(R.string.day_fri_short), dayOfWeek = SeriesPublishedDaysOfWeek.FRI),
DayOfWeek(dayOfWeekStr = "", dayOfWeek = SeriesPublishedDaysOfWeek.SAT), DayOfWeek(dayOfWeekStr = context.getString(R.string.day_sat_short), dayOfWeek = SeriesPublishedDaysOfWeek.SAT),
DayOfWeek(dayOfWeekStr = "", dayOfWeek = SeriesPublishedDaysOfWeek.SUN), DayOfWeek(dayOfWeekStr = context.getString(R.string.day_sun_short), dayOfWeek = SeriesPublishedDaysOfWeek.SUN),
DayOfWeek(dayOfWeekStr = "랜덤", dayOfWeek = SeriesPublishedDaysOfWeek.RANDOM), DayOfWeek(dayOfWeekStr = context.getString(R.string.day_random), dayOfWeek = SeriesPublishedDaysOfWeek.RANDOM),
) )
// 요일 숫자에 맞춰 배열 // 요일 숫자에 맞춰 배열

View File

@@ -6,9 +6,6 @@ import android.graphics.Rect
import android.os.Bundle import android.os.Bundle
import android.os.Handler import android.os.Handler
import android.os.Looper import android.os.Looper
import android.text.SpannableString
import android.text.Spanned
import android.text.style.ForegroundColorSpan
import android.view.Gravity import android.view.Gravity
import android.view.View import android.view.View
import android.widget.LinearLayout import android.widget.LinearLayout
@@ -199,20 +196,6 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
} }
private fun setupLiveView() { private fun setupLiveView() {
val spSectionTitle = SpannableString(binding.tvLiveTitle.text)
spSectionTitle.setSpan(
ForegroundColorSpan(
ContextCompat.getColor(
requireContext(),
R.color.color_3bb9f1
)
),
0,
2,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
binding.tvLiveTitle.text = spSectionTitle
liveAdapter = HomeLiveAdapter { liveAdapter = HomeLiveAdapter {
if (SharedPreferenceManager.token.isNotBlank()) { if (SharedPreferenceManager.token.isNotBlank()) {
val detailFragment = LiveRoomDetailFragment( val detailFragment = LiveRoomDetailFragment(
@@ -282,20 +265,6 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
} }
fun setupSectionCreator() { fun setupSectionCreator() {
val spSectionTitle = SpannableString(binding.tvFamousCreatorTitle.text)
spSectionTitle.setSpan(
ForegroundColorSpan(
ContextCompat.getColor(
requireContext(),
R.color.color_3bb9f1
)
),
0,
2,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
binding.tvFamousCreatorTitle.text = spSectionTitle
creatorRankingAdapter = CreatorRankingAdapter( creatorRankingAdapter = CreatorRankingAdapter(
onClickItem = { onClickItem = {
if (SharedPreferenceManager.token.isNotBlank()) { if (SharedPreferenceManager.token.isNotBlank()) {
@@ -372,20 +341,6 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
} }
private fun setupLatestContent() { private fun setupLatestContent() {
val spSectionTitle = SpannableString(binding.tvNewContent.text)
spSectionTitle.setSpan(
ForegroundColorSpan(
ContextCompat.getColor(
requireContext(),
R.color.color_3bb9f1
)
),
0,
2,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
binding.tvNewContent.text = spSectionTitle
latestContentThemeAdapter = HomeContentThemeAdapter { latestContentThemeAdapter = HomeContentThemeAdapter {
viewModel.getLatestContentByTheme(theme = it) viewModel.getLatestContentByTheme(theme = it)
} }
@@ -583,20 +538,6 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
} }
private fun setupOriginalSeries() { private fun setupOriginalSeries() {
val spSectionTitle = SpannableString(binding.tvSeriesOriginal.text)
spSectionTitle.setSpan(
ForegroundColorSpan(
ContextCompat.getColor(
requireContext(),
R.color.color_3bb9f1
)
),
0,
2,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
binding.tvSeriesOriginal.text = spSectionTitle
originalSeriesAdapter = HomeSeriesAdapter { originalSeriesAdapter = HomeSeriesAdapter {
if (SharedPreferenceManager.token.isNotBlank()) { if (SharedPreferenceManager.token.isNotBlank()) {
startActivity( startActivity(
@@ -698,20 +639,6 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
} }
private fun setupSeriesDayOfWeek() { private fun setupSeriesDayOfWeek() {
val spSectionTitle = SpannableString(binding.tvSeriesDayOfWeek.text)
spSectionTitle.setSpan(
ForegroundColorSpan(
ContextCompat.getColor(
requireContext(),
R.color.color_3bb9f1
)
),
0,
3,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
binding.tvSeriesDayOfWeek.text = spSectionTitle
seriesDayOfWeekAdapter = HomeSeriesAdapter { seriesDayOfWeekAdapter = HomeSeriesAdapter {
if (SharedPreferenceManager.token.isNotBlank()) { if (SharedPreferenceManager.token.isNotBlank()) {
startActivity( startActivity(
@@ -767,7 +694,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
} }
} }
val dayOfWeekAdapter = DayOfWeekAdapter(screenWidth = screenWidth) { val dayOfWeekAdapter = DayOfWeekAdapter(requireContext()) {
viewModel.getDayOfWeekSeriesList(it) viewModel.getDayOfWeekSeriesList(it)
} }
@@ -778,7 +705,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
false false
) { ) {
override fun canScrollVertically() = false override fun canScrollVertically() = false
override fun canScrollHorizontally() = false override fun canScrollHorizontally() = true
} }
rvDayOfWeek.layoutManager = layoutManager rvDayOfWeek.layoutManager = layoutManager
@@ -889,20 +816,6 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
} }
private fun setupWeelyChart() { private fun setupWeelyChart() {
val spSectionTitle = SpannableString(binding.tvWeeklyChart.text)
spSectionTitle.setSpan(
ForegroundColorSpan(
ContextCompat.getColor(
requireContext(),
R.color.color_3bb9f1
)
),
0,
2,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
binding.tvWeeklyChart.text = spSectionTitle
// 정렬 선택 RecyclerView 설정 // 정렬 선택 RecyclerView 설정
val sortAdapter = ContentRankingSortAdapter { val sortAdapter = ContentRankingSortAdapter {
viewModel.getContentRanking(it) viewModel.getContentRanking(it)
@@ -1009,20 +922,6 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
} }
private fun setupRecommendChannel() { private fun setupRecommendChannel() {
val spSectionTitle = SpannableString(binding.tvRecommendChannel.text)
spSectionTitle.setSpan(
ForegroundColorSpan(
ContextCompat.getColor(
requireContext(),
R.color.color_3bb9f1
)
),
0,
2,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
binding.tvRecommendChannel.text = spSectionTitle
recommendChannelAdapter = HomeRecommendChannelAdapter( recommendChannelAdapter = HomeRecommendChannelAdapter(
onClickCreatorProfile = { onClickCreatorProfile = {
if (SharedPreferenceManager.token.isNotBlank()) { if (SharedPreferenceManager.token.isNotBlank()) {
@@ -1093,20 +992,6 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
} }
private fun setupFreeContent() { private fun setupFreeContent() {
val spSectionTitle = SpannableString(binding.tvFreeContent.text)
spSectionTitle.setSpan(
ForegroundColorSpan(
ContextCompat.getColor(
requireContext(),
R.color.color_3bb9f1
)
),
0,
2,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
binding.tvFreeContent.text = spSectionTitle
homeFreeContentAdapter = HomeContentAdapter { homeFreeContentAdapter = HomeContentAdapter {
if (SharedPreferenceManager.token.isNotBlank()) { if (SharedPreferenceManager.token.isNotBlank()) {
startActivity( startActivity(
@@ -1168,20 +1053,6 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
} }
private fun setupPointContent() { private fun setupPointContent() {
val spSectionTitle = SpannableString(binding.tvPointContent.text)
spSectionTitle.setSpan(
ForegroundColorSpan(
ContextCompat.getColor(
requireContext(),
R.color.color_3bb9f1
)
),
0,
3,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
binding.tvPointContent.text = spSectionTitle
homePointContentAdapter = HomeContentAdapter { homePointContentAdapter = HomeContentAdapter {
if (SharedPreferenceManager.token.isNotBlank()) { if (SharedPreferenceManager.token.isNotBlank()) {
startActivity( startActivity(
@@ -1400,7 +1271,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
LivePaymentDialog( LivePaymentDialog(
activity = requireActivity(), activity = requireActivity(),
layoutInflater = layoutInflater, layoutInflater = layoutInflater,
title = "유료 라이브 입장", title = getString(R.string.live_paid_title),
startDateTime = if (hours >= 1) { startDateTime = if (hours >= 1) {
dateFormat.format(beginDate) dateFormat.format(beginDate)
} else { } else {
@@ -1411,19 +1282,19 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
} else { } else {
null null
}, },
desc = "${it.price}캔을 차감하고\n라이브에 입장 하시겠습니까?", desc = getString(R.string.live_paid_desc, it.price),
desc2 = if (hours >= 1) { desc2 = if (hours >= 1) {
"라이브를 시작한 지 ${hours}시간 ${mins}분이 지났습니다. 라이브에 입장 후 30분 이내에 라이브가 종료될 수도 있습니다." getString(R.string.live_paid_warning, hours, mins)
} else { } else {
null null
}, },
confirmButtonTitle = "결제 후 입장", confirmButtonTitle = getString(R.string.live_paid_confirm),
confirmButtonClick = { confirmButtonClick = {
handler.postDelayed({ handler.postDelayed({
liveViewModel.enterRoom(roomId, onEnterRoomSuccess) liveViewModel.enterRoom(roomId, onEnterRoomSuccess)
}, 300) }, 300)
}, },
cancelButtonTitle = "취소", cancelButtonTitle = getString(R.string.cancel),
cancelButtonClick = {} cancelButtonClick = {}
).show(screenWidth) ).show(screenWidth)
} }
@@ -1442,12 +1313,11 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
SodaDialog( SodaDialog(
activity = requireActivity(), activity = requireActivity(),
layoutInflater = layoutInflater, layoutInflater = layoutInflater,
title = "본인인증", title = getString(R.string.auth_title),
desc = "보이스온의 오픈월드 캐릭터톡은\n청소년 보호를 위해 본인인증한\n성인만 이용이 가능합니다.\n" + desc = getString(R.string.auth_desc),
"캐릭터톡 서비스를 이용하시려면\n본인인증을 하고 이용해주세요.", confirmButtonTitle = getString(R.string.auth_go),
confirmButtonTitle = "본인인증 하러가기",
confirmButtonClick = { startAuthFlow() }, confirmButtonClick = { startAuthFlow() },
cancelButtonTitle = "취소", cancelButtonTitle = getString(R.string.cancel),
cancelButtonClick = {}, cancelButtonClick = {},
descGravity = Gravity.CENTER descGravity = Gravity.CENTER
).show(screenWidth) ).show(screenWidth)

View File

@@ -377,7 +377,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
private fun setupBottomTabLayout() { private fun setupBottomTabLayout() {
setupTab( setupTab(
binding = binding.tabHome, binding = binding.tabHome,
title = "", title = getString(R.string.tab_home),
imageSrc = R.drawable.ic_tabbar_home, imageSrc = R.drawable.ic_tabbar_home,
colorStateList = ContextCompat.getColorStateList( colorStateList = ContextCompat.getColorStateList(
applicationContext, applicationContext,
@@ -388,7 +388,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
setupTab( setupTab(
binding = binding.tabChat, binding = binding.tabChat,
title = "채팅", title = getString(R.string.tab_chat),
imageSrc = R.drawable.ic_tabbar_chat, imageSrc = R.drawable.ic_tabbar_chat,
colorStateList = ContextCompat.getColorStateList( colorStateList = ContextCompat.getColorStateList(
applicationContext, applicationContext,
@@ -399,7 +399,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
setupTab( setupTab(
binding = binding.tabLive, binding = binding.tabLive,
title = "라이브", title = getString(R.string.tab_live),
imageSrc = R.drawable.ic_tabbar_live, imageSrc = R.drawable.ic_tabbar_live,
colorStateList = ContextCompat.getColorStateList( colorStateList = ContextCompat.getColorStateList(
applicationContext, applicationContext,
@@ -410,7 +410,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
setupTab( setupTab(
binding = binding.tabMy, binding = binding.tabMy,
title = "마이", title = getString(R.string.tab_my),
imageSrc = R.drawable.ic_tabbar_my, imageSrc = R.drawable.ic_tabbar_my,
colorStateList = ContextCompat.getColorStateList( colorStateList = ContextCompat.getColorStateList(
applicationContext, applicationContext,

View File

@@ -78,7 +78,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp" android:layout_marginHorizontal="24dp"
android:fontFamily="@font/pretendard_bold" android:fontFamily="@font/pretendard_bold"
android:text="지금 라이브 중" android:text="@string/live_now"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="24sp" /> android:textSize="24sp" />
@@ -105,7 +105,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp" android:layout_marginHorizontal="24dp"
android:fontFamily="@font/pretendard_bold" android:fontFamily="@font/pretendard_bold"
android:text="인기 크리에이터" android:text="@string/famous_creator"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="24sp" /> android:textSize="24sp" />
@@ -136,7 +136,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/pretendard_bold" android:fontFamily="@font/pretendard_bold"
android:text="최신 콘텐츠" android:text="@string/latest_content"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="24sp" /> android:textSize="24sp" />
@@ -147,7 +147,7 @@
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:fontFamily="@font/pretendard_regular" android:fontFamily="@font/pretendard_regular"
android:text="전체보기" android:text="@string/view_all"
android:textColor="@color/color_607d8b" /> android:textColor="@color/color_607d8b" />
</RelativeLayout> </RelativeLayout>
@@ -213,7 +213,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:fontFamily="@font/pretendard_bold" android:fontFamily="@font/pretendard_bold"
android:text="오직 보이스온에서만" android:text="@string/voiceon_original_only"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="24sp" /> android:textSize="24sp" />
@@ -222,7 +222,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/pretendard_regular" android:fontFamily="@font/pretendard_regular"
android:text="전체보기" android:text="@string/view_all"
android:textColor="#90A4AE" android:textColor="#90A4AE"
android:textSize="14sp" /> android:textSize="14sp" />
</LinearLayout> </LinearLayout>
@@ -266,7 +266,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:fontFamily="@font/pretendard_bold" android:fontFamily="@font/pretendard_bold"
android:text="요일별 시리즈" android:text="@string/series_by_weekday"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="24sp" /> android:textSize="24sp" />
@@ -275,7 +275,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/pretendard_regular" android:fontFamily="@font/pretendard_regular"
android:text="전체보기" android:text="@string/view_all"
android:textColor="#90A4AE" android:textColor="#90A4AE"
android:textSize="14sp" /> android:textSize="14sp" />
</LinearLayout> </LinearLayout>
@@ -319,7 +319,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:fontFamily="@font/pretendard_bold" android:fontFamily="@font/pretendard_bold"
android:text="인기 캐릭터 채팅" android:text="@string/popular_character_chat"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="24sp" /> android:textSize="24sp" />
@@ -328,7 +328,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/pretendard_regular" android:fontFamily="@font/pretendard_regular"
android:text="전체보기" android:text="@string/view_all"
android:textColor="#90A4AE" android:textColor="#90A4AE"
android:textSize="14sp" /> android:textSize="14sp" />
</LinearLayout> </LinearLayout>
@@ -356,7 +356,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp" android:layout_marginHorizontal="24dp"
android:fontFamily="@font/pretendard_bold" android:fontFamily="@font/pretendard_bold"
android:text="보온 주간 차트" android:text="@string/weekly_chart"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="24sp" /> android:textSize="24sp" />
@@ -393,7 +393,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp" android:layout_marginHorizontal="24dp"
android:fontFamily="@font/pretendard_bold" android:fontFamily="@font/pretendard_bold"
android:text="추천 채널" android:text="@string/recommend_channel"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="24sp" /> android:textSize="24sp" />
@@ -427,7 +427,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:fontFamily="@font/pretendard_bold" android:fontFamily="@font/pretendard_bold"
android:text="무료 콘텐츠" android:text="@string/free_content"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="24sp" /> android:textSize="24sp" />
@@ -436,7 +436,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/pretendard_regular" android:fontFamily="@font/pretendard_regular"
android:text="전체보기" android:text="@string/view_all"
android:textColor="#90A4AE" android:textColor="#90A4AE"
android:textSize="14sp" /> android:textSize="14sp" />
</LinearLayout> </LinearLayout>
@@ -472,7 +472,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:fontFamily="@font/pretendard_bold" android:fontFamily="@font/pretendard_bold"
android:text="포인트 대여 콘텐츠" android:text="@string/point_rental_content"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="24sp" /> android:textSize="24sp" />
@@ -481,7 +481,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/pretendard_regular" android:fontFamily="@font/pretendard_regular"
android:text="전체보기" android:text="@string/view_all"
android:textColor="#90A4AE" android:textColor="#90A4AE"
android:textSize="14sp" /> android:textSize="14sp" />
</LinearLayout> </LinearLayout>
@@ -517,7 +517,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:fontFamily="@font/pretendard_bold" android:fontFamily="@font/pretendard_bold"
android:text="추천 콘텐츠" android:text="@string/recommend_content"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="24sp" /> android:textSize="24sp" />
@@ -543,14 +543,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp" android:layout_marginHorizontal="24dp"
android:fontFamily="@font/pretendard_regular" android:fontFamily="@font/pretendard_regular"
android:text=" android:text="@string/company_info"
- 회사명 : 주식회사 소다라이브\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"
android:textColor="@color/color_777777" android:textColor="@color/color_777777"
android:textSize="11sp" android:textSize="11sp"
app:animDuration="500" app:animDuration="500"
@@ -558,8 +551,8 @@
app:ellipsizeTextColor="@color/color_777777" app:ellipsizeTextColor="@color/color_777777"
app:expandType="layout" app:expandType="layout"
app:isExpanded="false" app:isExpanded="false"
app:readLessText="간략히" app:readLessText="@string/read_less"
app:readMoreText="더보기" app:readMoreText="@string/read_more"
app:textMode="line" /> app:textMode="line" />
</LinearLayout> </LinearLayout>
</androidx.core.widget.NestedScrollView> </androidx.core.widget.NestedScrollView>
@@ -588,7 +581,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/pretendard_bold" android:fontFamily="@font/pretendard_bold"
android:text="콘텐츠 업로드" android:text="@string/action_upload_content"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="13.3sp" /> android:textSize="13.3sp" />
</LinearLayout> </LinearLayout>

View File

@@ -13,6 +13,8 @@
android:background="@drawable/bg_selectable_day_of_week" android:background="@drawable/bg_selectable_day_of_week"
android:fontFamily="@font/pretendard_regular" android:fontFamily="@font/pretendard_regular"
android:gravity="center" android:gravity="center"
android:paddingHorizontal="10dp"
android:paddingVertical="6dp"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="18sp" android:textSize="18sp"
tools:text="월" /> tools:text="월" />

View File

@@ -57,4 +57,41 @@
<string name="login_google_failed">Could not sign in with Google. Please try again.</string> <string name="login_google_failed">Could not sign in with Google. Please try again.</string>
<string name="login_failed">Could not sign in. Please try again.</string> <string name="login_failed">Could not sign in. Please try again.</string>
<string name="login_kakao_failed">Could not sign in with Kakao. Please try again.</string> <string name="login_kakao_failed">Could not sign in with Kakao. Please try again.</string>
<!-- Main / Home -->
<string name="tab_home">Home</string>
<string name="tab_chat">Chat</string>
<string name="tab_live">Live</string>
<string name="tab_my">My</string>
<string name="live_now">Live now</string>
<string name="famous_creator">Popular creators</string>
<string name="latest_content">Latest content</string>
<string name="view_all">View all</string>
<string name="voiceon_original_only">Only on VoiceOn</string>
<string name="series_by_weekday">Series by weekday</string>
<string name="popular_character_chat">Popular character chat</string>
<string name="weekly_chart">Bo-on weekly chart</string>
<string name="recommend_channel">Recommended channels</string>
<string name="free_content">Free content</string>
<string name="point_rental_content">Point rental content</string>
<string name="recommend_content">Recommended content</string>
<string name="read_more">Read more</string>
<string name="read_less">Read less</string>
<string name="action_upload_content">Upload content</string>
<string name="company_info">- Company: SodaLive Inc.\n\n- CEO: Jaehyung Lee\n\n- Address: 5F #563A, 10, Hwangsaeul-ro 335beon-gil, Bundang-gu, Seongnam-si, Gyeonggi-do\n\n- Business Registration No.: 870-81-03220\n\n- Mail-Order Sales Report: No. 2024-SeongnamBundangB-1012\n\n- Customer Center: 02-2055-1477 (10:00~19:00)\n\n- Contact Email: sodalive.official@gmail.com</string>
<string name="live_paid_title">Paid live entry</string>
<string name="live_paid_desc">Spend %1$d cans and\nenter the live?</string>
<string name="live_paid_warning">The live started %1$d hour(s) %2$d minute(s) ago. It may end within 30 minutes after you enter.</string>
<string name="live_paid_confirm">Enter after payment</string>
<string name="auth_title">Identity verification</string>
<string name="auth_desc">VoiceOn open-world character chat is available only to verified adults to protect youth.\nPlease verify your identity to use the service.</string>
<string name="auth_go">Verify now</string>
<string name="day_mon_short">Mon</string>
<string name="day_tue_short">Tue</string>
<string name="day_wed_short">Wed</string>
<string name="day_thu_short">Thu</string>
<string name="day_fri_short">Fri</string>
<string name="day_sat_short">Sat</string>
<string name="day_sun_short">Sun</string>
<string name="day_random">Random</string>
</resources> </resources>

View File

@@ -57,4 +57,41 @@
<string name="login_google_failed">Googleでログインできませんでした。もう一度お試しください。</string> <string name="login_google_failed">Googleでログインできませんでした。もう一度お試しください。</string>
<string name="login_failed">ログインできませんでした。もう一度お試しください。</string> <string name="login_failed">ログインできませんでした。もう一度お試しください。</string>
<string name="login_kakao_failed">Kakaoアカウントでログインできませんでした。もう一度お試しください。</string> <string name="login_kakao_failed">Kakaoアカウントでログインできませんでした。もう一度お試しください。</string>
<!-- Main / Home -->
<string name="tab_home">ホーム</string>
<string name="tab_chat">チャット</string>
<string name="tab_live">ライブ</string>
<string name="tab_my">マイ</string>
<string name="live_now">ライブ配信中</string>
<string name="famous_creator">人気クリエイター</string>
<string name="latest_content">最新コンテンツ</string>
<string name="view_all">すべて見る</string>
<string name="voiceon_original_only">ボイスオン限定</string>
<string name="series_by_weekday">曜日別シリーズ</string>
<string name="popular_character_chat">人気キャラクターチャット</string>
<string name="weekly_chart">ボオン週間チャート</string>
<string name="recommend_channel">おすすめチャンネル</string>
<string name="free_content">無料コンテンツ</string>
<string name="point_rental_content">ポイントレンタルコンテンツ</string>
<string name="recommend_content">おすすめコンテンツ</string>
<string name="read_more">もっと見る</string>
<string name="read_less">折りたたむ</string>
<string name="action_upload_content">コンテンツをアップロード</string>
<string name="company_info">- 会社名: 株式会社ソダライブ\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</string>
<string name="live_paid_title">有料ライブ入場</string>
<string name="live_paid_desc">%1$dCANを消費して\nライブに入場しますか</string>
<string name="live_paid_warning">ライブ開始から%1$d時間%2$d分経過しています。入場後30分以内に終了する場合があります。</string>
<string name="live_paid_confirm">決済して入場</string>
<string name="auth_title">本人認証</string>
<string name="auth_desc">ボイスオンのオープンワールドキャラクタートークは、青少年保護のため本人認証済みの成人のみ利用できます。\n利用するには本人認証を行ってください。</string>
<string name="auth_go">本人認証へ進む</string>
<string name="day_mon_short"></string>
<string name="day_tue_short"></string>
<string name="day_wed_short"></string>
<string name="day_thu_short"></string>
<string name="day_fri_short"></string>
<string name="day_sat_short"></string>
<string name="day_sun_short"></string>
<string name="day_random">ランダム</string>
</resources> </resources>

View File

@@ -56,4 +56,41 @@
<string name="login_google_failed">구글 로그인을 하지 못했습니다. 다시 시도해 주세요</string> <string name="login_google_failed">구글 로그인을 하지 못했습니다. 다시 시도해 주세요</string>
<string name="login_failed">로그인을 하지 못했습니다. 다시 시도해 주세요</string> <string name="login_failed">로그인을 하지 못했습니다. 다시 시도해 주세요</string>
<string name="login_kakao_failed">카카오 계정으로 로그인 하지 못했습니다. 다시 시도해 주세요</string> <string name="login_kakao_failed">카카오 계정으로 로그인 하지 못했습니다. 다시 시도해 주세요</string>
<!-- Main / Home -->
<string name="tab_home"></string>
<string name="tab_chat">채팅</string>
<string name="tab_live">라이브</string>
<string name="tab_my">마이</string>
<string name="live_now">지금 라이브 중</string>
<string name="famous_creator">인기 크리에이터</string>
<string name="latest_content">최신 콘텐츠</string>
<string name="view_all">전체보기</string>
<string name="voiceon_original_only">오직 보이스온에서만</string>
<string name="series_by_weekday">요일별 시리즈</string>
<string name="popular_character_chat">인기 캐릭터 채팅</string>
<string name="weekly_chart">보온 주간 차트</string>
<string name="recommend_channel">추천 채널</string>
<string name="free_content">무료 콘텐츠</string>
<string name="point_rental_content">포인트 대여 콘텐츠</string>
<string name="recommend_content">추천 콘텐츠</string>
<string name="read_more">더보기</string>
<string name="read_less">간략히</string>
<string name="action_upload_content">콘텐츠 업로드</string>
<string name="company_info">- 회사명 : 주식회사 소다라이브\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</string>
<string name="live_paid_title">유료 라이브 입장</string>
<string name="live_paid_desc">%1$d캔을 차감하고\n라이브에 입장 하시겠습니까?</string>
<string name="live_paid_warning">라이브를 시작한 지 %1$d시간 %2$d분이 지났습니다. 라이브에 입장 후 30분 이내에 라이브가 종료될 수도 있습니다.</string>
<string name="live_paid_confirm">결제 후 입장</string>
<string name="auth_title">본인인증</string>
<string name="auth_desc">보이스온의 오픈월드 캐릭터톡은\n청소년 보호를 위해 본인인증한\n성인만 이용이 가능합니다.\n캐릭터톡 서비스를 이용하시려면\n본인인증을 하고 이용해주세요.</string>
<string name="auth_go">본인인증 하러가기</string>
<string name="day_mon_short"></string>
<string name="day_tue_short"></string>
<string name="day_wed_short"></string>
<string name="day_thu_short"></string>
<string name="day_fri_short"></string>
<string name="day_sat_short"></string>
<string name="day_sun_short"></string>
<string name="day_random">랜덤</string>
</resources> </resources>