From de042abd79980cd3c1efa83a7dd048c0e5f26af6 Mon Sep 17 00:00:00 2001 From: klaus Date: Wed, 3 Dec 2025 18:11:54 +0900 Subject: [PATCH] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=EC=97=85?= =?UTF-8?q?=EB=A1=9C=EB=93=9C=20=EB=AC=B8=EC=9E=90=EC=97=B4=20=EB=A6=AC?= =?UTF-8?q?=EC=86=8C=EC=8A=A4=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../upload/AudioContentUploadActivity.kt | 65 +++++-- .../upload/AudioContentUploadViewModel.kt | 76 +++++--- .../upload/theme/AudioContentThemeFragment.kt | 8 +- .../theme/AudioContentThemeViewModel.kt | 14 +- .../layout/activity_audio_content_upload.xml | 180 +++++++++--------- .../layout/fragment_audio_content_theme.xml | 2 +- app/src/main/res/values-en/strings.xml | 80 ++++++++ app/src/main/res/values-ja/strings.xml | 80 ++++++++ app/src/main/res/values/strings.xml | 76 ++++++++ 9 files changed, 441 insertions(+), 140 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/upload/AudioContentUploadActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/upload/AudioContentUploadActivity.kt index 4bac230e..67e50c27 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/upload/AudioContentUploadActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/upload/AudioContentUploadActivity.kt @@ -1,7 +1,6 @@ package kr.co.vividnext.sodalive.audio_content.upload import android.Manifest -import android.annotation.SuppressLint import android.app.DatePickerDialog import android.app.TimePickerDialog import android.content.Intent @@ -84,16 +83,17 @@ class AudioContentUploadActivity : BaseActivity + 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) { if (it) { - loadingDialog.show(screenWidth, "콘텐츠를 업로드 하는 중입니다.") + loadingDialog.show( + screenWidth, + getString(R.string.screen_audio_content_upload_loading_message) + ) } else { loadingDialog.dismiss() } @@ -876,7 +896,8 @@ class AudioContentUploadActivity : BaseActivity() - val toastLiveData: LiveData + private val _toastLiveData = MutableLiveData() + val toastLiveData: LiveData get() = _toastLiveData private var _isLoading = MutableLiveData(false) @@ -71,11 +73,11 @@ class AudioContentUploadViewModel( val isActiveReservationLiveData: LiveData get() = _isActiveReservationLiveData - private val _reservationDateLiveData = MutableLiveData("날짜를 선택해주세요") + private val _reservationDateLiveData = MutableLiveData("") val reservationDateLiveData: LiveData get() = _reservationDateLiveData - private val _reservationTimeLiveData = MutableLiveData("시간을 설정해주세요") + private val _reservationTimeLiveData = MutableLiveData("") val reservationTimeLiveData: LiveData get() = _reservationTimeLiveData @@ -262,12 +264,16 @@ class AudioContentUploadViewModel( } if (coverImage == null) { - _toastLiveData.postValue("커버이미지를 선택해 주세요.") + _toastLiveData.postValue( + ToastMessage(resId = R.string.audio_content_upload_error_cover_required) + ) return } if (contentFile == null) { - _toastLiveData.postValue("오디오 콘텐츠를 선택해 주세요.") + _toastLiveData.postValue( + ToastMessage(resId = R.string.audio_content_upload_error_content_required) + ) return } @@ -286,10 +292,12 @@ class AudioContentUploadViewModel( onSuccess() } else { if (it.message != null) { - _toastLiveData.postValue(it.message) + _toastLiveData.postValue( + ToastMessage(message = it.message) + ) } else { _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + ToastMessage(resId = R.string.common_error_unknown) ) } } @@ -299,7 +307,7 @@ class AudioContentUploadViewModel( _isLoading.postValue(false) it.message?.let { message -> Logger.e(message) } _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + ToastMessage(resId = R.string.common_error_unknown) ) } ) @@ -309,48 +317,64 @@ class AudioContentUploadViewModel( private fun validateData(): Boolean { if (title.isBlank()) { - _toastLiveData.postValue("제목을 입력해 주세요.") + _toastLiveData.postValue( + ToastMessage(resId = R.string.audio_content_upload_error_title_required) + ) return false } if (detail.isBlank() || detail.length < 5) { - _toastLiveData.postValue("내용을 5자 이상 입력해 주세요.") + _toastLiveData.postValue( + ToastMessage(resId = R.string.audio_content_upload_error_detail_min_length) + ) return false } if (theme == null) { - _toastLiveData.postValue("테마를 선택해 주세요.") + _toastLiveData.postValue( + ToastMessage(resId = R.string.audio_content_upload_error_theme_required) + ) return false } if (coverImageFile == null) { - _toastLiveData.postValue("커버이미지를 선택해 주세요.") + _toastLiveData.postValue( + ToastMessage(resId = R.string.audio_content_upload_error_cover_required) + ) return false } if (previewStartTime != null && previewEndTime != null) { val startTimeArray = previewStartTime!!.split(":") if (startTimeArray.size != 3) { - _toastLiveData.postValue("미리 듣기 시간 형식은 00:30:00 과 같아야 합니다") + _toastLiveData.postValue( + ToastMessage(resId = R.string.audio_content_upload_error_preview_format) + ) return false } for (time in startTimeArray) { if (time.length != 2) { - _toastLiveData.postValue("미리 듣기 시간 형식은 00:30:00 과 같아야 합니다") + _toastLiveData.postValue( + ToastMessage(resId = R.string.audio_content_upload_error_preview_format) + ) return false } } val endTimeArray = previewEndTime!!.split(":") if (endTimeArray.size != 3) { - _toastLiveData.postValue("미리 듣기 시간 형식은 00:30:00 과 같아야 합니다") + _toastLiveData.postValue( + ToastMessage(resId = R.string.audio_content_upload_error_preview_format) + ) return false } for (time in endTimeArray) { if (time.length != 2) { - _toastLiveData.postValue("미리 듣기 시간 형식은 00:30:00 과 같아야 합니다") + _toastLiveData.postValue( + ToastMessage(resId = R.string.audio_content_upload_error_preview_format) + ) return false } } @@ -359,7 +383,7 @@ class AudioContentUploadViewModel( if (timeDifference < 15000) { _toastLiveData.postValue( - "미리 듣기의 최소 시간은 15초 입니다." + ToastMessage(resId = R.string.audio_content_upload_error_preview_minimum) ) return false @@ -367,7 +391,9 @@ class AudioContentUploadViewModel( } else { if (previewStartTime != null || previewEndTime != null) { _toastLiveData.postValue( - "미리 듣기 시작 시간과 종료 시간 둘 다 입력을 하거나 둘 다 입력 하지 않아야 합니다." + ToastMessage( + resId = R.string.audio_content_upload_error_preview_both_required + ) ) return false @@ -375,12 +401,16 @@ class AudioContentUploadViewModel( } if (contentUri == null) { - _toastLiveData.postValue("오디오 콘텐츠를 선택해 주세요.") + _toastLiveData.postValue( + ToastMessage(resId = R.string.audio_content_upload_error_content_required) + ) return false } if (!isPriceFreeLiveData.value!! && price < 5) { - _toastLiveData.postValue("콘텐츠의 최소금액은 5캔 입니다.") + _toastLiveData.postValue( + ToastMessage(resId = R.string.audio_content_upload_error_minimum_price) + ) return false } @@ -388,7 +418,9 @@ class AudioContentUploadViewModel( _isActiveReservationLiveData.value!! && (releaseDate.isBlank() || releaseTime.isBlank()) ) { - _toastLiveData.postValue("예약날짜와 시간을 선택해주세요.") + _toastLiveData.postValue( + ToastMessage(resId = R.string.audio_content_upload_error_reservation_required) + ) return false } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/upload/theme/AudioContentThemeFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/upload/theme/AudioContentThemeFragment.kt index 450a368c..43c4a013 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/upload/theme/AudioContentThemeFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/upload/theme/AudioContentThemeFragment.kt @@ -91,7 +91,13 @@ class AudioContentThemeFragment( @SuppressLint("NotifyDataSetChanged") private fun bindData() { viewModel.toastLiveData.observe(viewLifecycleOwner) { - it?.let { Toast.makeText(requireActivity(), it, Toast.LENGTH_LONG).show() } + it?.let { toastMessage -> + val message = toastMessage.message + ?: toastMessage.resId?.let(::getString) + message?.let { text -> + Toast.makeText(requireActivity(), text, Toast.LENGTH_LONG).show() + } + } } viewModel.themeLiveData.observe(viewLifecycleOwner) { diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/upload/theme/AudioContentThemeViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/upload/theme/AudioContentThemeViewModel.kt index 1b700470..1f3013c5 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/upload/theme/AudioContentThemeViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/upload/theme/AudioContentThemeViewModel.kt @@ -7,11 +7,13 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.schedulers.Schedulers import kr.co.vividnext.sodalive.audio_content.AudioContentRepository import kr.co.vividnext.sodalive.base.BaseViewModel +import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.common.SharedPreferenceManager +import kr.co.vividnext.sodalive.common.ToastMessage class AudioContentThemeViewModel(private val repository: AudioContentRepository) : BaseViewModel() { - private val _toastLiveData = MutableLiveData() - val toastLiveData: LiveData + private val _toastLiveData = MutableLiveData() + val toastLiveData: LiveData get() = _toastLiveData private val _themeLiveData = MutableLiveData>() @@ -29,17 +31,19 @@ class AudioContentThemeViewModel(private val repository: AudioContentRepository) _themeLiveData.postValue(it.data!!) } else { if (it.message != null) { - _toastLiveData.postValue(it.message) + _toastLiveData.postValue(ToastMessage(message = it.message)) } else { _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + ToastMessage(resId = R.string.common_error_unknown) ) } } }, { it.message?.let { message -> Logger.e(message) } - _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + _toastLiveData.postValue( + ToastMessage(resId = R.string.common_error_unknown) + ) } ) ) diff --git a/app/src/main/res/layout/activity_audio_content_upload.xml b/app/src/main/res/layout/activity_audio_content_upload.xml index 864a5fed..06d7c7b1 100644 --- a/app/src/main/res/layout/activity_audio_content_upload.xml +++ b/app/src/main/res/layout/activity_audio_content_upload.xml @@ -37,7 +37,7 @@ android:layout_marginHorizontal="13.3dp" android:layout_marginTop="13.3dp" android:fontFamily="@font/gmarket_sans_bold" - android:text="썸네일" + android:text="@string/screen_audio_content_upload_thumbnail_label" android:textColor="@color/color_eeeeee" android:textSize="16.7sp" /> @@ -81,7 +81,7 @@ android:layout_marginHorizontal="13.3dp" android:layout_marginTop="13.3dp" android:fontFamily="@font/gmarket_sans_bold" - android:text="등록" + android:text="@string/screen_audio_content_upload_section_upload" android:textColor="@color/color_eeeeee" android:textSize="16.7sp" /> @@ -95,7 +95,7 @@ android:fontFamily="@font/gmarket_sans_medium" android:gravity="center" android:paddingVertical="8dp" - android:text="파일 선택" + android:text="@string/screen_audio_content_upload_select_file" android:textColor="@color/color_80d8ff" android:textSize="16.7sp" /> @@ -116,7 +116,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_bold" - android:text="제목" + android:text="@string/screen_audio_content_upload_title_label" android:textColor="@color/color_eeeeee" android:textSize="16.7sp" /> @@ -127,7 +127,7 @@ android:layout_marginTop="13.3dp" android:background="@drawable/bg_round_corner_6_7_222222" android:fontFamily="@font/gmarket_sans_medium" - android:hint="제목을 입력하세요." + android:hint="@string/screen_audio_content_upload_title_hint" android:importantForAutofill="no" android:inputType="textWebEditText" android:paddingHorizontal="13.3dp" @@ -157,7 +157,7 @@ android:layout_centerVertical="true" android:fontFamily="@font/gmarket_sans_bold" android:lineSpacingExtra="5sp" - android:text="내용" + android:text="@string/screen_audio_content_upload_content_label" android:textColor="@color/color_eeeeee" android:textSize="16.7sp" /> @@ -171,7 +171,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_medium" - android:text="0자" + android:text="@string/screen_audio_content_upload_char_count_format" android:textColor="@color/color_ff5c49" android:textSize="13.3sp" /> @@ -179,7 +179,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_medium" - android:text=" / 최대 500자" + android:text="@string/screen_audio_content_upload_char_limit_suffix" android:textColor="@color/color_777777" android:textSize="13.3sp" /> @@ -194,7 +194,7 @@ android:background="@drawable/bg_round_corner_6_7_222222" android:fontFamily="@font/gmarket_sans_medium" android:gravity="top" - android:hint="내용을 입력하세요" + android:hint="@string/screen_audio_content_upload_content_hint" android:importantForAutofill="no" android:inputType="textMultiLine" android:padding="20dp" @@ -216,7 +216,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_bold" - android:text="테마" + android:text="@string/screen_audio_content_upload_theme_label" android:textColor="@color/color_eeeeee" android:textSize="16.7sp" /> @@ -243,7 +243,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_bold" - android:text="테마 선택" + android:text="@string/screen_audio_content_upload_theme_select" android:textColor="@color/color_80d8ff" android:textSize="16.7sp" /> @@ -260,7 +260,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_bold" - android:text="태그" + android:text="@string/screen_audio_content_upload_tag_label" android:textColor="@color/color_eeeeee" android:textSize="16.7sp" /> @@ -271,7 +271,7 @@ android:layout_marginTop="13.3dp" android:background="@drawable/bg_round_corner_6_7_222222" android:fontFamily="@font/gmarket_sans_medium" - android:hint="예 : #연애 #커버곡 #태그" + android:hint="@string/screen_audio_content_upload_tag_hint" android:importantForAutofill="no" android:inputType="textWebEditText" android:paddingHorizontal="13.3dp" @@ -296,7 +296,7 @@ android:layout_marginHorizontal="13.3dp" android:fontFamily="@font/gmarket_sans_bold" android:lineSpacingExtra="5sp" - android:text="가격 설정" + android:text="@string/screen_audio_content_upload_price_section_title" android:textColor="@color/color_eeeeee" android:textSize="16.7sp" /> @@ -330,10 +330,10 @@ android:id="@+id/tv_price_free" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:fontFamily="@font/gmarket_sans_bold" - android:text="무료" - android:textColor="@color/color_3bb9f1" - android:textSize="14.7sp" /> + android:fontFamily="@font/gmarket_sans_bold" + android:text="@string/screen_audio_content_upload_price_free" + android:textColor="@color/color_3bb9f1" + android:textSize="14.7sp" /> + android:fontFamily="@font/gmarket_sans_bold" + android:text="@string/screen_audio_content_upload_price_paid" + android:textColor="@color/color_3bb9f1" + android:textSize="14.7sp" /> @@ -374,7 +374,7 @@ android:layout_marginTop="26.7dp" android:fontFamily="@font/gmarket_sans_bold" android:lineSpacingExtra="5sp" - android:text="소장 설정" + android:text="@string/screen_audio_content_upload_keep_section_title" android:textColor="@color/color_eeeeee" android:textSize="16.7sp" /> @@ -408,10 +408,10 @@ android:id="@+id/tv_both" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:fontFamily="@font/gmarket_sans_bold" - android:text="소장/대여" - android:textColor="@color/color_3bb9f1" - android:textSize="14.7sp" /> + android:fontFamily="@font/gmarket_sans_bold" + android:text="@string/screen_audio_content_upload_purchase_option_both" + android:textColor="@color/color_3bb9f1" + android:textSize="14.7sp" /> + android:fontFamily="@font/gmarket_sans_bold" + android:text="@string/screen_audio_content_upload_purchase_option_buy_only" + android:textColor="@color/color_3bb9f1" + android:textSize="14.7sp" /> + android:fontFamily="@font/gmarket_sans_bold" + android:text="@string/screen_audio_content_upload_purchase_option_rent_only" + android:textColor="@color/color_3bb9f1" + android:textSize="14.7sp" /> @@ -486,7 +486,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_medium" - android:text="소장 가격" + android:text="@string/screen_audio_content_upload_price_title_keep" android:textColor="@color/color_eeeeee" android:textSize="13.3sp" /> @@ -524,7 +524,7 @@ android:layout_alignParentEnd="true" android:layout_centerVertical="true" android:fontFamily="@font/gmarket_sans_medium" - android:text="캔" + android:text="@string/screen_audio_content_upload_price_unit_can" android:textColor="@color/color_777777" android:textSize="13.3sp" /> @@ -540,7 +540,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_medium" - android:text="※ 이용기간 : 대여(5일) | 소장(서비스 종료시까지)" + android:text="@string/screen_audio_content_upload_service_period_until_end" android:textColor="@color/color_777777" android:textSize="13.3sp" /> @@ -549,7 +549,7 @@ android:layout_height="wrap_content" android:layout_marginTop="3dp" android:fontFamily="@font/gmarket_sans_medium" - android:text="※ 대여가격은 소장가격의 70%로 자동 반영" + android:text="@string/screen_audio_content_upload_price_rent_rate_notice" android:textColor="@color/color_777777" android:textSize="13.3sp" /> @@ -558,7 +558,7 @@ android:layout_height="wrap_content" android:layout_marginTop="3dp" android:fontFamily="@font/gmarket_sans_medium" - android:text="※ 콘텐츠의 최소금액은 5캔 입니다" + android:text="@string/screen_audio_content_upload_price_min_notice" android:textColor="@color/color_777777" android:textSize="13.3sp" /> @@ -571,7 +571,7 @@ android:layout_marginTop="30dp" android:fontFamily="@font/gmarket_sans_bold" android:lineSpacingExtra="5sp" - android:text="한정판 설정" + android:text="@string/screen_audio_content_upload_limited_section_title" android:textColor="@color/color_eeeeee" android:textSize="16.7sp" /> @@ -605,10 +605,10 @@ android:id="@+id/tv_not_limited" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:fontFamily="@font/gmarket_sans_bold" - android:text="무제한" - android:textColor="@color/color_3bb9f1" - android:textSize="14.7sp" /> + android:fontFamily="@font/gmarket_sans_bold" + android:text="@string/screen_audio_content_upload_limited_unlimited" + android:textColor="@color/color_3bb9f1" + android:textSize="14.7sp" /> - + android:fontFamily="@font/gmarket_sans_bold" + android:text="@string/screen_audio_content_upload_limited_limited" + android:textColor="@color/color_3bb9f1" + android:textSize="14.7sp" /> + @@ -703,10 +703,10 @@ android:id="@+id/tv_available_point" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:fontFamily="@font/gmarket_sans_bold" - android:text="가능" - android:textColor="@color/color_3bb9f1" - android:textSize="14.7sp" /> + android:fontFamily="@font/gmarket_sans_bold" + android:text="@string/screen_audio_content_upload_point_available" + android:textColor="@color/color_3bb9f1" + android:textSize="14.7sp" /> - + android:fontFamily="@font/gmarket_sans_bold" + android:text="@string/screen_audio_content_upload_point_unavailable" + android:textColor="@color/color_3bb9f1" + android:textSize="14.7sp" /> + @@ -784,10 +784,10 @@ android:id="@+id/tv_preview_yes" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:fontFamily="@font/gmarket_sans_bold" - android:text="생성" - android:textColor="@color/color_3bb9f1" - android:textSize="14.7sp" /> + android:fontFamily="@font/gmarket_sans_bold" + android:text="@string/screen_audio_content_upload_preview_generate" + android:textColor="@color/color_3bb9f1" + android:textSize="14.7sp" /> + android:fontFamily="@font/gmarket_sans_bold" + android:text="@string/screen_audio_content_upload_preview_not_generate" + android:textColor="@color/color_3bb9f1" + android:textSize="14.7sp" /> @@ -832,7 +832,7 @@ android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_bold" android:lineSpacingExtra="5sp" - android:text="미리듣기 시간 설정" + android:text="@string/screen_audio_content_upload_preview_time_title" android:textColor="@color/color_eeeeee" android:textSize="16.7sp" /> @@ -841,7 +841,7 @@ android:layout_height="wrap_content" android:layout_marginTop="10dp" android:fontFamily="@font/gmarket_sans_medium" - android:text="미리듣기 시간을 직접 설정하지 않으면 콘텐츠 앞부분 15초가 자동으로 설정됩니다. 미리듣기의 시간제한은 없습니다." + android:text="@string/screen_audio_content_upload_preview_time_desc" android:textColor="@color/color_777777" android:textSize="13.3sp" /> @@ -861,7 +861,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_medium" - android:text="시작 시간" + android:text="@string/screen_audio_content_upload_preview_start_time" android:textColor="@color/color_eeeeee" android:textSize="13.3sp" /> @@ -873,7 +873,7 @@ android:background="@drawable/bg_round_corner_6_7_222222" android:fontFamily="@font/gmarket_sans_bold" android:gravity="center" - android:hint="00:00:00" + android:hint="@string/screen_audio_content_upload_preview_start_time_default" android:importantForAutofill="no" android:inputType="textWebEditText" android:paddingHorizontal="13.3dp" @@ -897,7 +897,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_medium" - android:text="종료 시간" + android:text="@string/screen_audio_content_upload_preview_end_time" android:textColor="@color/color_eeeeee" android:textSize="13.3sp" /> @@ -909,7 +909,7 @@ android:background="@drawable/bg_round_corner_6_7_222222" android:fontFamily="@font/gmarket_sans_bold" android:gravity="center" - android:hint="00:00:15" + android:hint="@string/screen_audio_content_upload_preview_end_time_default" android:importantForAutofill="no" android:inputType="textWebEditText" android:paddingHorizontal="13.3dp" @@ -938,7 +938,7 @@ android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_bold" android:lineSpacingExtra="5sp" - android:text="연령 제한" + android:text="@string/screen_audio_content_upload_age_section_title" android:textColor="@color/color_eeeeee" android:textSize="16.7sp" /> @@ -971,7 +971,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_bold" - android:text="전체 연령" + android:text="@string/screen_audio_content_upload_age_all" android:textColor="@color/color_3bb9f1" android:textSize="14.7sp" /> @@ -1000,7 +1000,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_bold" - android:text="19세 이상" + android:text="@string/screen_audio_content_upload_age_19" android:textColor="@color/color_3bb9f1" android:textSize="14.7sp" /> @@ -1011,7 +1011,7 @@ android:layout_height="wrap_content" android:layout_marginTop="13.3dp" android:fontFamily="@font/gmarket_sans_medium" - android:text="성인콘텐츠를 전체관람가로 등록할 시 발생하는 법적 책임은 회사와 상관 없이 콘텐츠를 등록한 본인에게 있습니다.\n콘텐츠 내용은 물론 제목도 19금 여부를 체크해 주시기 바랍니다." + android:text="@string/screen_audio_content_upload_age_notice" android:textColor="@color/color_dd4500" android:textSize="13.3sp" /> @@ -1029,7 +1029,7 @@ android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_bold" android:lineSpacingExtra="5sp" - android:text="댓글 가능 여부" + android:text="@string/screen_audio_content_upload_comment_section_title" android:textColor="@color/color_eeeeee" android:textSize="16.7sp" /> @@ -1062,7 +1062,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_bold" - android:text="댓글 가능" + android:text="@string/screen_audio_content_upload_comment_allow" android:textColor="@color/color_3bb9f1" android:textSize="14.7sp" /> @@ -1091,7 +1091,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_bold" - android:text="댓글 불가" + android:text="@string/screen_audio_content_upload_comment_disallow" android:textColor="@color/color_3bb9f1" android:textSize="14.7sp" /> @@ -1111,7 +1111,7 @@ android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_bold" android:lineSpacingExtra="5sp" - android:text="예약 공개" + android:text="@string/screen_audio_content_upload_reservation_section_title" android:textColor="@color/color_eeeeee" android:textSize="16.7sp" /> @@ -1144,7 +1144,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_bold" - android:text="지금 공개" + android:text="@string/screen_audio_content_upload_active_now" android:textColor="@color/color_3bb9f1" android:textSize="14.7sp" /> @@ -1173,7 +1173,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_bold" - android:text="예약 공개" + android:text="@string/screen_audio_content_upload_active_reservation" android:textColor="@color/color_3bb9f1" android:textSize="14.7sp" /> @@ -1200,7 +1200,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_medium" - android:text="예약 날짜" + android:text="@string/screen_audio_content_upload_reservation_date" android:textColor="@color/color_eeeeee" android:textSize="13.3sp" /> @@ -1230,7 +1230,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_medium" - android:text="예약 시간" + android:text="@string/screen_audio_content_upload_reservation_time" android:textColor="@color/color_eeeeee" android:textSize="13.3sp" /> @@ -1267,7 +1267,7 @@ android:background="@drawable/bg_round_corner_6_7_13181b_3bb9f1" android:fontFamily="@font/gmarket_sans_bold" android:gravity="center" - android:text="취소" + android:text="@string/screen_audio_content_upload_cancel" android:textColor="@color/color_3bb9f1" android:textSize="18.3sp" /> @@ -1280,7 +1280,7 @@ android:background="@drawable/bg_round_corner_6_7_3bb9f1" android:fontFamily="@font/gmarket_sans_bold" android:gravity="center" - android:text="등록" + android:text="@string/screen_audio_content_upload_submit" android:textColor="@color/white" android:textSize="18.3sp" /> diff --git a/app/src/main/res/layout/fragment_audio_content_theme.xml b/app/src/main/res/layout/fragment_audio_content_theme.xml index da229ffa..b3c2a9ae 100644 --- a/app/src/main/res/layout/fragment_audio_content_theme.xml +++ b/app/src/main/res/layout/fragment_audio_content_theme.xml @@ -15,7 +15,7 @@ android:layout_marginStart="26.7dp" android:layout_marginTop="26.7dp" android:fontFamily="@font/gmarket_sans_bold" - android:text="테마 선택" + android:text="@string/screen_audio_content_upload_theme_select" android:textColor="@color/white" android:textSize="18.3sp" /> diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 6a1c7b7d..a64da2df 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -837,6 +837,86 @@ All point rentals Invalid request. Couldn\'t start the player.\nPlease try again. + Upload content + Thumbnail + Upload + Select file + Title + Enter a title. + Description + %1$d chars + / Max 500 chars + Enter a description + Theme + Select theme + Tags + Ex: #romance #cover #tag + Pricing + Free + Paid + Ownership options + Buy/Rent + Buy only + Rent only + Purchase price + Rental price + cans + ※ Usage period: Rent (5 days) | Own (1 year) + ※ Usage period: Rent (5 days) | Own (until service ends) + ※ Rental price is automatically set to 70% of purchase price + ※ Minimum price is 5 cans + Limited edition + Unlimited + Limited + Enter the limited quantity + Points + Enabled + Disabled + Preview + Generate + Do not generate + Preview time + If you don’t set a preview time, the first 15 seconds will be used automatically. There is no time limit for previews. + Start time + End time + 00:00:00 + 00:00:15 + Age restriction + All ages + 19+ + If you register adult content as all-ages, you are solely responsible for any legal issues. Please ensure both the content and title are appropriately marked 19+. + Comments + Allow comments + Disable comments + Scheduled release + Release now + Schedule release + Date + Time + Select a release date + Set a release time + Cancel + Submit + Uploading content… + Uploading content + Your content is being uploaded. +We will notify you when it’s done. +The upload will continue even if you leave this page. + Invalid file. +Please choose again. + Failed to select a file. +Please try again. + Select a cover image. + Select an audio file. + Enter a title. + Enter at least 5 characters. + Select a theme. + Preview time must be in the format 00:30:00. + Preview must be at least 15 seconds. + Enter both preview start and end times or leave both empty. + Minimum price is 5 cans. + Select a release date and time. + Select audio Add new content Newest Price: High to Low diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 9b5f7744..373c7697 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -837,6 +837,86 @@ ポイントレンタル一覧 無効なリクエストです。 プレイヤーを起動できませんでした。\nもう一度お試しください。 + コンテンツ登録 + サムネイル + 登録 + ファイル選択 + タイトル + タイトルを入力してください。 + 内容 + %1$d文字 + / 最大500文字 + 内容を入力してください + テーマ + テーマを選択 + タグ + 例: #恋愛 #カバー曲 #タグ + 価格設定 + 無料 + 有料 + 購入設定 + 購入/レンタル + 購入のみ + レンタルのみ + 購入価格 + レンタル価格 + キャン + ※ 利用期間 : レンタル(5日) | 購入(利用期間1年) + ※ 利用期間 : レンタル(5日) | 購入(サービス終了まで) + ※ レンタル価格は購入価格の70%で自動設定されます + ※ コンテンツの最低価格は5キャンです + 限定版設定 + 無制限 + 限定版 + 限定数を入力してください + ポイント使用 + 利用可 + 利用不可 + プレビュー + 生成 + 生成しない + プレビュー時間設定 + プレビュー時間を設定しない場合、冒頭15秒が自動で設定されます。プレビュー時間に制限はありません。 + 開始時間 + 終了時間 + 00:00:00 + 00:00:15 + 年齢制限 + 全年齢 + 19歳以上 + 成人向けコンテンツを全年齢で登録した場合の法的責任は会社ではなく登録者本人にあります。コンテンツ内容はもちろんタイトルも19禁か確認してください。 + コメント可否 + コメント可 + コメント不可 + 予約公開 + 今すぐ公開 + 予約公開 + 予約日付 + 予約時間 + 予約日付を選択してください + 予約時間を設定してください + キャンセル + 登録 + コンテンツをアップロードしています。 + コンテンツアップロード + 登録したコンテンツをアップロード中です。 +登録完了後にお知らせします。 +このページを離れても自動で登録されます。 + 無効なファイルです。 +再度選択してください。 + ファイルの選択に失敗しました。 +もう一度お試しください。 + カバー画像を選択してください。 + オーディオコンテンツを選択してください。 + タイトルを入力してください。 + 内容を5文字以上入力してください。 + テーマを選択してください。 + プレビュー時間は 00:30:00 の形式で入力してください + プレビューの最短時間は15秒です。 + プレビュー開始時間と終了時間は両方入力するか、両方空にしてください。 + コンテンツの最低価格は5キャンです。 + 予約日付と時間を選択してください。 + オーディオを選択 新しいコンテンツを登録 最新順 価格が高い順 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5af36f4e..da2db308 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -836,6 +836,82 @@ 포인트 대여 전체 잘못된 요청입니다. 플레이어를 실행하지 못했습니다.\n다시 시도해 주세요. + 콘텐츠 등록 + 썸네일 + 등록 + 파일 선택 + 제목 + 제목을 입력하세요. + 내용 + %1$d자 + / 최대 500자 + 내용을 입력하세요 + 테마 + 테마 선택 + 태그 + 예 : #연애 #커버곡 #태그 + 가격 설정 + 무료 + 유료 + 소장 설정 + 소장/대여 + 소장만 + 대여만 + 소장 가격 + 대여 가격 + + ※ 이용기간 : 대여(5일) | 소장(이용 기간 1년) + ※ 이용기간 : 대여(5일) | 소장(서비스 종료시까지) + ※ 대여가격은 소장가격의 70%로 자동 반영 + ※ 콘텐츠의 최소금액은 5캔 입니다 + 한정판 설정 + 무제한 + 한정판 + 한정판 개수를 입력하세요 + 포인트 사용 + 가능 + 불가능 + 미리듣기 + 생성 + 생성 안 함 + 미리듣기 시간 설정 + 미리듣기 시간을 직접 설정하지 않으면 콘텐츠 앞부분 15초가 자동으로 설정됩니다. 미리듣기의 시간제한은 없습니다. + 시작 시간 + 종료 시간 + 00:00:00 + 00:00:15 + 연령 제한 + 전체 연령 + 19세 이상 + 성인콘텐츠를 전체관람가로 등록할 시 발생하는 법적 책임은 회사와 상관 없이 콘텐츠를 등록한 본인에게 있습니다.\n콘텐츠 내용은 물론 제목도 19금 여부를 체크해 주시기 바랍니다. + 댓글 가능 여부 + 댓글 가능 + 댓글 불가 + 예약 공개 + 지금 공개 + 예약 공개 + 예약 날짜 + 예약 시간 + 예약 날짜를 선택하세요 + 예약 시간을 설정하세요 + 취소 + 등록 + 콘텐츠를 업로드 하는 중입니다. + 콘텐츠 업로드 + 등록한 콘텐츠가 업로드 중입니다.\n콘텐츠 등록이 완료되면 알림을 보내드립니다.\n이 페이지를 나가도 콘텐츠는 자동으로 등록됩니다. + 잘못된 파일입니다.\n다시 선택해 주세요. + 파일 선택을 실패했습니다.\n다시 시도해 주세요. + 커버이미지를 선택해 주세요. + 오디오 콘텐츠를 선택해 주세요. + 제목을 입력해 주세요. + 내용을 5자 이상 입력해 주세요. + 테마를 선택해 주세요. + 미리 듣기 시간 형식은 00:30:00 과 같아야 합니다 + 미리 듣기의 최소 시간은 15초 입니다. + 미리 듣기 시작 시간과 종료 시간 둘 다 입력을 하거나 둘 다 입력 하지 않아야 합니다. + 콘텐츠의 최소금액은 5캔 입니다. + 예약날짜와 시간을 선택해주세요. + 오디오 선택 새로운 콘텐츠 등록하기 최신순 높은 가격순