오디션 상세 문자열 리소스화

This commit is contained in:
2025-12-01 15:19:01 +09:00
parent e9afa55aa0
commit 159a5ae8b3
11 changed files with 110 additions and 36 deletions

View File

@@ -13,6 +13,7 @@ import androidx.media3.common.util.UnstableApi
import kr.co.vividnext.sodalive.audio_content.AudioContentPlayService import kr.co.vividnext.sodalive.audio_content.AudioContentPlayService
import kr.co.vividnext.sodalive.audio_content.player.AudioContentPlayerService import kr.co.vividnext.sodalive.audio_content.player.AudioContentPlayerService
import java.io.IOException import java.io.IOException
import kr.co.vividnext.sodalive.R
@OptIn(UnstableApi::class) @OptIn(UnstableApi::class)
class AuditionApplicantMediaPlayerManager( class AuditionApplicantMediaPlayerManager(
@@ -101,7 +102,11 @@ class AuditionApplicantMediaPlayerManager(
} }
} catch (e: IOException) { } catch (e: IOException) {
e.printStackTrace() e.printStackTrace()
Toast.makeText(context, "콘텐츠를 재생하지 못했습니다.\n다시 시도해 주세요", Toast.LENGTH_SHORT).show() Toast.makeText(
context,
context.getString(R.string.screen_audition_play_error),
Toast.LENGTH_SHORT
).show()
showLoadingDialog(false) showLoadingDialog(false)
} }

View File

@@ -11,6 +11,7 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import kr.co.vividnext.sodalive.databinding.FragmentAuditionApplyDialogBinding import kr.co.vividnext.sodalive.databinding.FragmentAuditionApplyDialogBinding
import kr.co.vividnext.sodalive.R
class AuditionApplyDialogFragment( class AuditionApplyDialogFragment(
private val fileName: String, private val fileName: String,
@@ -59,13 +60,13 @@ class AuditionApplyDialogFragment(
if (phoneNumber.isBlank() || phoneNumber.length != 11) { if (phoneNumber.isBlank() || phoneNumber.length != 11) {
Toast.makeText( Toast.makeText(
activity, activity,
"잘못된 연락처 입니다.\n다시 입력해 주세요.", getString(R.string.dialog_audition_apply_error_invalid_phone),
Toast.LENGTH_LONG Toast.LENGTH_LONG
).show() ).show()
} else if (!binding.tvAgree.isSelected) { } else if (!binding.tvAgree.isSelected) {
Toast.makeText( Toast.makeText(
activity, activity,
"연락처 수집 및 활용에 동의하셔야 오디션 지원이 가능합니다.", getString(R.string.dialog_audition_apply_error_need_agreement),
Toast.LENGTH_LONG Toast.LENGTH_LONG
).show() ).show()
} else { } else {

View File

@@ -7,8 +7,6 @@ import android.view.View
import android.widget.Toast import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import coil.load
import coil.transform.RoundedCornersTransformation
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.bumptech.glide.load.MultiTransformation import com.bumptech.glide.load.MultiTransformation
import com.bumptech.glide.load.resource.bitmap.CenterCrop import com.bumptech.glide.load.resource.bitmap.CenterCrop
@@ -19,6 +17,7 @@ import kr.co.vividnext.sodalive.audition.role.AuditionRoleDetailActivity
import kr.co.vividnext.sodalive.base.BaseActivity import kr.co.vividnext.sodalive.base.BaseActivity
import kr.co.vividnext.sodalive.common.Constants import kr.co.vividnext.sodalive.common.Constants
import kr.co.vividnext.sodalive.common.LoadingDialog import kr.co.vividnext.sodalive.common.LoadingDialog
import kr.co.vividnext.sodalive.common.ToastMessage
import kr.co.vividnext.sodalive.databinding.ActivityAuditionDetailBinding import kr.co.vividnext.sodalive.databinding.ActivityAuditionDetailBinding
import kr.co.vividnext.sodalive.extensions.dpToPx import kr.co.vividnext.sodalive.extensions.dpToPx
import org.koin.android.ext.android.inject import org.koin.android.ext.android.inject
@@ -40,7 +39,7 @@ class AuditionDetailActivity : BaseActivity<ActivityAuditionDetailBinding>(
if (auditionId <= 0) { if (auditionId <= 0) {
Toast.makeText( Toast.makeText(
applicationContext, applicationContext,
"잘못된 요청입니다.\n다시 시도해 주세요.", getString(R.string.screen_audition_error_invalid_request),
Toast.LENGTH_LONG Toast.LENGTH_LONG
).show() ).show()
@@ -60,7 +59,7 @@ class AuditionDetailActivity : BaseActivity<ActivityAuditionDetailBinding>(
isOpenInformation = !isOpenInformation isOpenInformation = !isOpenInformation
if (isOpenInformation) { if (isOpenInformation) {
binding.tvInformation.maxLines = Int.MAX_VALUE binding.tvInformation.maxLines = Int.MAX_VALUE
binding.tvOpen.text = "접기" binding.tvOpen.text = getString(R.string.screen_audition_detail_collapse)
binding.tvOpen.setCompoundDrawablesWithIntrinsicBounds( binding.tvOpen.setCompoundDrawablesWithIntrinsicBounds(
R.drawable.ic_live_detail_top, R.drawable.ic_live_detail_top,
0, 0,
@@ -69,7 +68,7 @@ class AuditionDetailActivity : BaseActivity<ActivityAuditionDetailBinding>(
) )
} else { } else {
binding.tvInformation.maxLines = 3 binding.tvInformation.maxLines = 3
binding.tvOpen.text = "펼치기" binding.tvOpen.text = getString(R.string.screen_audition_detail_expand)
binding.tvOpen.setCompoundDrawablesWithIntrinsicBounds( binding.tvOpen.setCompoundDrawablesWithIntrinsicBounds(
R.drawable.ic_live_detail_bottom, R.drawable.ic_live_detail_bottom,
0, 0,
@@ -125,8 +124,13 @@ class AuditionDetailActivity : BaseActivity<ActivityAuditionDetailBinding>(
} }
private fun bindData() { private fun bindData() {
viewModel.toastLiveData.observe(this) { viewModel.toastLiveData.observe(this) { toastMessage ->
it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() } toastMessage?.let {
val message = it.message ?: it.resId?.let(::getString)
message?.let { text ->
Toast.makeText(applicationContext, text, Toast.LENGTH_LONG).show()
}
}
} }
viewModel.isLoading.observe(this) { viewModel.isLoading.observe(this) {

View File

@@ -60,11 +60,11 @@ class AuditionDetailRoleAdapter(
if (item.isComplete) { if (item.isComplete) {
binding.blackCover.visibility = View.VISIBLE binding.blackCover.visibility = View.VISIBLE
binding.tvStatus.text = "모집완료" binding.tvStatus.text = context.getString(R.string.screen_audition_status_closed)
binding.tvStatus.setBackgroundResource(R.drawable.bg_round_corner_13_3_909090) binding.tvStatus.setBackgroundResource(R.drawable.bg_round_corner_13_3_909090)
} else { } else {
binding.blackCover.visibility = View.GONE binding.blackCover.visibility = View.GONE
binding.tvStatus.text = "모집중" binding.tvStatus.text = context.getString(R.string.screen_audition_status_open)
binding.tvStatus.setBackgroundResource(R.drawable.bg_round_corner_13_3_3bb9f1) binding.tvStatus.setBackgroundResource(R.drawable.bg_round_corner_13_3_3bb9f1)
} }

View File

@@ -7,13 +7,15 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers import io.reactivex.rxjava3.schedulers.Schedulers
import kr.co.vividnext.sodalive.audition.AuditionRepository import kr.co.vividnext.sodalive.audition.AuditionRepository
import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.common.ToastMessage
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.R
class AuditionDetailViewModel( class AuditionDetailViewModel(
private val repository: AuditionRepository private val repository: AuditionRepository
) : BaseViewModel() { ) : BaseViewModel() {
private val _toastLiveData = MutableLiveData<String?>() private val _toastLiveData = MutableLiveData<ToastMessage?>()
val toastLiveData: LiveData<String?> val toastLiveData: LiveData<ToastMessage?>
get() = _toastLiveData get() = _toastLiveData
private var _isLoading = MutableLiveData(false) private var _isLoading = MutableLiveData(false)
@@ -39,10 +41,10 @@ class AuditionDetailViewModel(
_auditionDetailLiveData.value = it.data _auditionDetailLiveData.value = it.data
} else { } else {
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(it.message) _toastLiveData.postValue(ToastMessage(message = it.message))
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." ToastMessage(resId = R.string.common_error_unknown)
) )
} }
@@ -56,7 +58,9 @@ class AuditionDetailViewModel(
{ {
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(
ToastMessage(resId = R.string.common_error_unknown)
)
if (onFailure != null) { if (onFailure != null) {
onFailure() onFailure()
} }

View File

@@ -47,7 +47,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="15dp" android:layout_marginTop="15dp"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="오디션 정보" android:text="@string/screen_audition_detail_info_title"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" android:textSize="14.7sp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
@@ -75,7 +75,7 @@
android:drawablePadding="6.7dp" android:drawablePadding="6.7dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center" android:gravity="center"
android:text="펼치기" android:text="@string/screen_audition_detail_expand"
android:textColor="@color/color_bbbbbb" android:textColor="@color/color_bbbbbb"
android:textSize="12sp" android:textSize="12sp"
app:drawableStartCompat="@drawable/ic_live_detail_bottom" app:drawableStartCompat="@drawable/ic_live_detail_bottom"
@@ -89,7 +89,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="18dp" android:layout_marginTop="18dp"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="오디션 캐릭터" android:text="@string/screen_audition_detail_roles_title"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" /> android:textSize="14.7sp" />

View File

@@ -23,7 +23,7 @@
android:layout_marginTop="33.3dp" android:layout_marginTop="33.3dp"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center" android:gravity="center"
android:text="오디션 지원방식" android:text="@string/dialog_audition_method_title"
android:textColor="@color/color_bbbbbb" android:textColor="@color/color_bbbbbb"
android:textSize="18.3sp" android:textSize="18.3sp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
@@ -60,7 +60,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="파일 업로드" android:text="@string/dialog_audition_method_upload"
android:textColor="@color/color_3bb9f1" android:textColor="@color/color_3bb9f1"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
</LinearLayout> </LinearLayout>
@@ -86,7 +86,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="바로 녹음" android:text="@string/dialog_audition_method_record"
android:textColor="@color/color_3bb9f1" android:textColor="@color/color_3bb9f1"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
</LinearLayout> </LinearLayout>
@@ -97,7 +97,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="13.3dp" android:layout_marginTop="13.3dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="※ 파일은 mp3, aac만 업로드 가능" android:text="@string/dialog_audition_method_note"
android:textColor="@color/color_777777" android:textColor="@color/color_777777"
android:textSize="12sp" android:textSize="12sp"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"

View File

@@ -21,7 +21,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="오디션 지원" android:text="@string/dialog_audition_apply_title"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="18.3sp" /> android:textSize="18.3sp" />
@@ -39,7 +39,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="녹음파일" android:text="@string/dialog_audition_apply_audio_file_title"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="16.7sp" /> android:textSize="16.7sp" />
@@ -72,7 +72,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="15dp" android:layout_marginTop="15dp"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="연락처" android:text="@string/dialog_audition_apply_phone_title"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="16.7sp" /> android:textSize="16.7sp" />
@@ -83,7 +83,7 @@
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:background="@drawable/bg_round_corner_5_3_13181b" android:background="@drawable/bg_round_corner_5_3_13181b"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:hint="합격시 연락받을 연락처를 남겨주세요" android:hint="@string/dialog_audition_apply_phone_hint"
android:importantForAutofill="no" android:importantForAutofill="no"
android:inputType="numberSigned" android:inputType="numberSigned"
android:maxEms="12" android:maxEms="12"
@@ -113,13 +113,13 @@
<TextView <TextView
android:id="@+id/tv_agree" android:id="@+id/tv_agree"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="13.3dp" android:layout_marginStart="13.3dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:lineSpacingMultiplier="1.25" android:lineSpacingMultiplier="1.25"
android:text="보이스온 오디오 드라마 오디션 합격시 개인 연락을 위한 개인 정보(연락처) 수집 및 활용에 동의합니다.\n오디션 지원자는 개인정보 수집 및 활용 동의에 거부할 권리가 있으며 비동의시 오디션 지원은 취소 됩니다." android:text="@string/dialog_audition_apply_agreement"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" /> android:textSize="13.3sp" />
</LinearLayout> </LinearLayout>
<TextView <TextView
@@ -131,7 +131,7 @@
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center" android:gravity="center"
android:paddingVertical="13.3dp" android:paddingVertical="13.3dp"
android:text="오디션 지원하기" android:text="@string/dialog_audition_apply_submit"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="13.3sp" /> android:textSize="13.3sp" />
</LinearLayout> </LinearLayout>

View File

@@ -192,6 +192,26 @@
<string name="screen_audition_total_count">Total %1$d</string> <string name="screen_audition_total_count">Total %1$d</string>
<string name="screen_audition_how_to_use">How to use VoiceOn audition</string> <string name="screen_audition_how_to_use">How to use VoiceOn audition</string>
<string name="screen_audition_how_to_use_more">See details&gt;</string> <string name="screen_audition_how_to_use_more">See details&gt;</string>
<string name="screen_audition_error_invalid_request">Invalid request.\nPlease try again.</string>
<string name="screen_audition_detail_info_title">Audition info</string>
<string name="screen_audition_detail_roles_title">Audition roles</string>
<string name="screen_audition_detail_expand">Expand</string>
<string name="screen_audition_detail_collapse">Collapse</string>
<string name="screen_audition_status_open">Open</string>
<string name="screen_audition_status_closed">Closed</string>
<string name="dialog_audition_method_title">How to apply</string>
<string name="dialog_audition_method_upload">Upload file</string>
<string name="dialog_audition_method_record">Record now</string>
<string name="dialog_audition_method_note">※ Only mp3 or aac files can be uploaded</string>
<string name="dialog_audition_apply_title">Apply for audition</string>
<string name="dialog_audition_apply_audio_file_title">Recording file</string>
<string name="dialog_audition_apply_phone_title">Contact</string>
<string name="dialog_audition_apply_phone_hint">Leave a contact number for results</string>
<string name="dialog_audition_apply_agreement">I agree to the collection and use of my personal contact information for notification if I pass the VoiceOn audio drama audition.\nYou may refuse to consent, but the audition application will be canceled if you do not agree.</string>
<string name="dialog_audition_apply_submit">Submit audition application</string>
<string name="dialog_audition_apply_error_invalid_phone">Invalid contact number.\nPlease try again.</string>
<string name="dialog_audition_apply_error_need_agreement">You must agree to the collection and use of contact information to apply for the audition.</string>
<string name="screen_audition_play_error">Could not play the content.\nPlease try again.</string>
<!-- Settings / Notices / Events --> <!-- Settings / Notices / Events -->
<string name="screen_settings_title">Settings</string> <string name="screen_settings_title">Settings</string>

View File

@@ -192,6 +192,26 @@
<string name="screen_audition_total_count">合計 %1$d件</string> <string name="screen_audition_total_count">合計 %1$d件</string>
<string name="screen_audition_how_to_use">ボイスオンオーディションの利用方法</string> <string name="screen_audition_how_to_use">ボイスオンオーディションの利用方法</string>
<string name="screen_audition_how_to_use_more">詳しく&gt;</string> <string name="screen_audition_how_to_use_more">詳しく&gt;</string>
<string name="screen_audition_error_invalid_request">不正なリクエストです。\nもう一度お試しください。</string>
<string name="screen_audition_detail_info_title">オーディション情報</string>
<string name="screen_audition_detail_roles_title">オーディションキャラクター</string>
<string name="screen_audition_detail_expand">展開</string>
<string name="screen_audition_detail_collapse">閉じる</string>
<string name="screen_audition_status_open">募集中</string>
<string name="screen_audition_status_closed">募集終了</string>
<string name="dialog_audition_method_title">オーディション応募方法</string>
<string name="dialog_audition_method_upload">ファイルアップロード</string>
<string name="dialog_audition_method_record">すぐ録音</string>
<string name="dialog_audition_method_note">※ファイルはmp3, aacのみアップロード可能</string>
<string name="dialog_audition_apply_title">オーディション応募</string>
<string name="dialog_audition_apply_audio_file_title">録音ファイル</string>
<string name="dialog_audition_apply_phone_title">連絡先</string>
<string name="dialog_audition_apply_phone_hint">合格時に連絡を受ける電話番号を入力してください</string>
<string name="dialog_audition_apply_agreement">ボイスオンオーディオドラマオーディション合格時の連絡のため、連絡先の収集・利用に同意します。\nオーディション応募者は同意を拒否する権利がありますが、同意しない場合応募はキャンセルされます。</string>
<string name="dialog_audition_apply_submit">オーディションに応募する</string>
<string name="dialog_audition_apply_error_invalid_phone">正しくない連絡先です。\nもう一度入力してください。</string>
<string name="dialog_audition_apply_error_need_agreement">連絡先の収集および利用に同意する必要があります。</string>
<string name="screen_audition_play_error">コンテンツを再生できませんでした。\nもう一度お試しください</string>
<!-- Settings / Notices / Events --> <!-- Settings / Notices / Events -->
<string name="screen_settings_title">設定</string> <string name="screen_settings_title">設定</string>

View File

@@ -191,6 +191,26 @@
<string name="screen_audition_total_count">총 %1$d개</string> <string name="screen_audition_total_count">총 %1$d개</string>
<string name="screen_audition_how_to_use">보이스온 오디션 이용방법</string> <string name="screen_audition_how_to_use">보이스온 오디션 이용방법</string>
<string name="screen_audition_how_to_use_more">자세히&gt;</string> <string name="screen_audition_how_to_use_more">자세히&gt;</string>
<string name="screen_audition_error_invalid_request">잘못된 요청입니다.\n다시 시도해 주세요.</string>
<string name="screen_audition_detail_info_title">오디션 정보</string>
<string name="screen_audition_detail_roles_title">오디션 캐릭터</string>
<string name="screen_audition_detail_expand">펼치기</string>
<string name="screen_audition_detail_collapse">접기</string>
<string name="screen_audition_status_open">모집중</string>
<string name="screen_audition_status_closed">모집완료</string>
<string name="dialog_audition_method_title">오디션 지원방식</string>
<string name="dialog_audition_method_upload">파일 업로드</string>
<string name="dialog_audition_method_record">바로 녹음</string>
<string name="dialog_audition_method_note">※ 파일은 mp3, aac만 업로드 가능</string>
<string name="dialog_audition_apply_title">오디션 지원</string>
<string name="dialog_audition_apply_audio_file_title">녹음파일</string>
<string name="dialog_audition_apply_phone_title">연락처</string>
<string name="dialog_audition_apply_phone_hint">합격 시 연락받을 연락처를 남겨주세요</string>
<string name="dialog_audition_apply_agreement">보이스온 오디오 드라마 오디션 합격 시 개인 연락을 위한 개인 정보(연락처) 수집 및 활용에 동의합니다.\n오디션 지원자는 개인정보 수집 및 활용 동의에 거부할 권리가 있으며 비동의 시 오디션 지원은 취소됩니다.</string>
<string name="dialog_audition_apply_submit">오디션 지원하기</string>
<string name="dialog_audition_apply_error_invalid_phone">잘못된 연락처 입니다.\n다시 입력해 주세요.</string>
<string name="dialog_audition_apply_error_need_agreement">연락처 수집 및 활용에 동의하셔야 오디션 지원이 가능합니다.</string>
<string name="screen_audition_play_error">콘텐츠를 재생하지 못했습니다.\n다시 시도해 주세요</string>
<!-- Settings / Notices / Events --> <!-- Settings / Notices / Events -->
<string name="screen_settings_title">설정</string> <string name="screen_settings_title">설정</string>