diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/component/button/GoogleButton.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/component/button/GoogleButton.kt new file mode 100644 index 00000000..d5b2b7f1 --- /dev/null +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/component/button/GoogleButton.kt @@ -0,0 +1,63 @@ +package com.sopt.clody.presentation.ui.auth.component.button + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.sopt.clody.R +import com.sopt.clody.ui.theme.ClodyTheme + +@Composable +fun GoogleButton( + text: String, + onClick: () -> Unit, + modifier: Modifier = Modifier, +) { + Button( + onClick = onClick, + colors = ButtonDefaults.buttonColors(containerColor = ClodyTheme.colors.gray08), + shape = RoundedCornerShape(10.dp), + modifier = modifier.height(48.dp), + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center, + modifier = Modifier.fillMaxSize(), + ) { + Image( + painter = painterResource(id = R.drawable.img_google_button_logo), + contentDescription = null, + modifier = Modifier.size(24.dp), + ) + Spacer(modifier = Modifier.width(10.dp)) + Text( + text = text, + style = ClodyTheme.typography.body2SemiBold, + color = ClodyTheme.colors.gray01, + ) + } + } +} + +@Preview(showBackground = true) +@Composable +private fun GoogleButtonPreview() { + GoogleButton( + text = "Sign Up With Google", + onClick = { /*TODO*/ }, + ) +} diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/component/button/KaKaoButton.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/component/button/KaKaoButton.kt index a1fe84d0..38791744 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/auth/component/button/KaKaoButton.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/component/button/KaKaoButton.kt @@ -5,9 +5,7 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape @@ -33,10 +31,7 @@ fun KaKaoButton( onClick = onClick, colors = ButtonDefaults.buttonColors(containerColor = ClodyTheme.colors.kakaoYellow), shape = RoundedCornerShape(10.dp), - modifier = modifier - .fillMaxWidth() - .height(48.dp) - .padding(horizontal = 24.dp), + modifier = modifier.height(48.dp), ) { Row( verticalAlignment = Alignment.CenterVertically, diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/component/timepicker/BottomSheetTimePicker.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/component/timepicker/BottomSheetTimePicker.kt index 93a25fb2..657ad047 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/auth/component/timepicker/BottomSheetTimePicker.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/component/timepicker/BottomSheetTimePicker.kt @@ -73,7 +73,7 @@ fun BottomSheetTimePicker( .padding(top = 16.dp, bottom = 30.dp), ) { Text( - stringResource(id = R.string.time_picker_title), + stringResource(id = R.string.bottom_sheet_time_reminder_picker_title), style = ClodyTheme.typography.head4, color = ClodyTheme.colors.gray01, modifier = Modifier.align(Alignment.Center), @@ -143,7 +143,7 @@ fun BottomSheetTimePicker( onRemindTimeSelected(selectedPeriod, selectedHour, selectedMinute) onDismissRequest() }, - text = stringResource(R.string.time_reminder_complete_button), + text = stringResource(R.string.bottom_sheet_year_month_picker_btn_confirm), enabled = true, modifier = Modifier .fillMaxWidth() diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/guide/GuideScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/guide/GuideScreen.kt index 6611a7b8..02422827 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/auth/guide/GuideScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/guide/GuideScreen.kt @@ -3,7 +3,6 @@ package com.sopt.clody.presentation.ui.auth.guide import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.tween import androidx.compose.animation.fadeOut -import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement @@ -51,7 +50,6 @@ fun GuideRoute( GuideScreen(onNextButtonClick = navigateToHome) } -@OptIn(ExperimentalFoundationApi::class) @Composable fun GuideScreen( onNextButtonClick: () -> Unit, @@ -59,25 +57,21 @@ fun GuideScreen( val pages = listOf( BoardingPage( title = stringResource(R.string.guide_page1_title), - subtitle = stringResource(R.string.guide_page1_subtitle), description = stringResource(R.string.guide_page1_description), imageRes = R.drawable.img_guide_first, ), BoardingPage( title = stringResource(R.string.guide_page2_title), - subtitle = stringResource(R.string.guide_page2_subtitle), description = stringResource(R.string.guide_page2_description), imageRes = R.drawable.img_guide_second, ), BoardingPage( title = stringResource(R.string.guide_page3_title), - subtitle = stringResource(R.string.guide_page3_subtitle), description = stringResource(R.string.guide_page3_description), imageRes = R.drawable.img_guide_third, ), BoardingPage( title = stringResource(R.string.guide_page4_title), - subtitle = stringResource(R.string.guide_page4_subtitle), description = stringResource(R.string.guide_page4_description), imageRes = R.drawable.img_guide_fourth, ), @@ -106,9 +100,9 @@ fun GuideScreen( } }, text = if (pagerState.currentPage < pages.size - 1) { - stringResource(id = R.string.guide_next) + stringResource(id = R.string.guide_btn_next) } else { - stringResource(id = R.string.guide_start) + stringResource(id = R.string.guide_btn_start) }, enabled = true, ) @@ -140,12 +134,6 @@ fun GuideScreen( color = ClodyTheme.colors.gray01, textAlign = TextAlign.Center, ) - Text( - text = pages[page].subtitle, - style = ClodyTheme.typography.head1, - color = ClodyTheme.colors.gray01, - textAlign = TextAlign.Center, - ) Spacer(modifier = Modifier.heightForScreenPercentage(0.02f)) Text( text = pages[page].description, @@ -194,7 +182,6 @@ fun GuideScreen( data class BoardingPage( val title: String, - val subtitle: String, val description: String, val imageRes: Int, ) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/page/NicknamePage.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/page/NicknamePage.kt index a716c61f..e1f2f9c0 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/page/NicknamePage.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/page/NicknamePage.kt @@ -86,7 +86,7 @@ fun NickNamePage( focusManager.clearFocus() onCompleteClick() }, - text = stringResource(R.string.nickname_next), + text = stringResource(R.string.nickname_btn_next), enabled = nickname.isNotEmpty() && isValidNickname, ) }, diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/page/TermsOfServicePage.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/page/TermsOfServicePage.kt index 232b6af8..df40e950 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/page/TermsOfServicePage.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/page/TermsOfServicePage.kt @@ -31,6 +31,7 @@ import com.sopt.clody.presentation.utils.base.BasePreview import com.sopt.clody.presentation.utils.base.ClodyPreview import com.sopt.clody.presentation.utils.extension.heightForScreenPercentage import com.sopt.clody.ui.theme.ClodyTheme +import java.util.Locale @Composable fun TermsOfServicePage( @@ -45,6 +46,10 @@ fun TermsOfServicePage( navigateToWebView: (String) -> Unit, ) { val isAgreeButtonEnabled = serviceChecked && privacyChecked + val currentLang = Locale.getDefault().language + + val termsOfService = if (currentLang == "ko") SettingOptionUrls.TERMS_OF_SERVICE_URL.krUrl else SettingOptionUrls.TERMS_OF_SERVICE_URL.enUrl + val privacyPolicy = if (currentLang == "ko") SettingOptionUrls.PRIVACY_POLICY_URL.krUrl else SettingOptionUrls.PRIVACY_POLICY_URL.enUrl Scaffold( topBar = { @@ -68,7 +73,7 @@ fun TermsOfServicePage( .padding(horizontal = 24.dp) .padding(bottom = 28.dp), onClick = onAgreeClick, - text = stringResource(R.string.terms_next), + text = stringResource(R.string.terms_btn_next), enabled = isAgreeButtonEnabled, ) }, @@ -105,21 +110,21 @@ fun TermsOfServicePage( uncheckedImageRes = R.drawable.ic_terms_check_off_25, ) } - Spacer(modifier = Modifier.height(16.dp)) + Spacer(modifier = Modifier.height(18.dp)) HorizontalDivider(color = ClodyTheme.colors.gray07, thickness = 1.dp) Spacer(modifier = Modifier.height(16.dp)) TermsCheckboxRow( text = stringResource(R.string.terms_service_use), checked = serviceChecked, onCheckedChange = onToggleService, - onClickMore = { navigateToWebView(SettingOptionUrls.TERMS_OF_SERVICE_URL) }, + onClickMore = { navigateToWebView(termsOfService) }, ) - Spacer(modifier = Modifier.height(8.dp)) + Spacer(modifier = Modifier.height(24.dp)) TermsCheckboxRow( text = stringResource(R.string.terms_service_privacy), checked = privacyChecked, onCheckedChange = onTogglePrivacy, - onClickMore = { navigateToWebView(SettingOptionUrls.PRIVACY_POLICY_URL) }, + onClickMore = { navigateToWebView(privacyPolicy) }, ) } }, diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/timereminder/TimeReminderScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/timereminder/TimeReminderScreen.kt index e9f9f399..f2e7523a 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/auth/timereminder/TimeReminderScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/timereminder/TimeReminderScreen.kt @@ -147,13 +147,13 @@ fun TimeReminderScreen( ) { ClodyButton( onClick = onCompleteClick, - text = stringResource(id = R.string.time_reminder_complete_button), + text = stringResource(id = R.string.time_reminder_btn_complete), enabled = true, modifier = Modifier.fillMaxWidth(), ) Spacer(modifier = Modifier.height(LocalConfiguration.current.screenHeightDp.dp * 0.015f)) Text( - text = stringResource(id = R.string.time_reminder_next_setting_button), + text = stringResource(id = R.string.time_reminder_btn_skip), modifier = Modifier .clickable( onClick = onStartClick, diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/component/FailureScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/component/FailureScreen.kt index adfee414..feb23e6a 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/component/FailureScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/component/FailureScreen.kt @@ -59,7 +59,7 @@ fun FailureScreen( colors = ButtonDefaults.buttonColors(ClodyTheme.colors.mainYellow), ) { Text( - text = stringResource(R.string.failure_screen_refresh_btn), + text = stringResource(R.string.failure_screen_btn_refresh), modifier = Modifier.padding(6.dp), color = ClodyTheme.colors.gray01, style = ClodyTheme.typography.body2SemiBold, diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/component/bottomsheet/DiaryDeleteSheet.kt b/app/src/main/java/com/sopt/clody/presentation/ui/component/bottomsheet/DiaryDeleteSheet.kt index feecc8e6..4e3cb841 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/component/bottomsheet/DiaryDeleteSheet.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/component/bottomsheet/DiaryDeleteSheet.kt @@ -72,7 +72,7 @@ fun DiaryDeleteBottomSheetItem( ) Spacer(modifier = Modifier.width(8.dp)) Text( - text = stringResource(R.string.bottom_sheet_delete_button), + text = stringResource(R.string.bottom_sheet_diary_delete), style = ClodyTheme.typography.body4SemiBold, color = ClodyTheme.colors.gray01, ) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/component/dialog/FailureDialog.kt b/app/src/main/java/com/sopt/clody/presentation/ui/component/dialog/FailureDialog.kt index 6ff6a936..6c13d329 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/component/dialog/FailureDialog.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/component/dialog/FailureDialog.kt @@ -83,7 +83,7 @@ fun FailureDialog( colors = ButtonDefaults.buttonColors(ClodyTheme.colors.mainYellow), ) { Text( - text = stringResource(R.string.failure_dialog_confirm_btn), + text = stringResource(R.string.failure_dialog_btn_confirm), color = ClodyTheme.colors.gray02, style = ClodyTheme.typography.body3SemiBold, ) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/component/timepicker/YearMonthPicker.kt b/app/src/main/java/com/sopt/clody/presentation/ui/component/timepicker/YearMonthPicker.kt index f04f68eb..181cc474 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/component/timepicker/YearMonthPicker.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/component/timepicker/YearMonthPicker.kt @@ -69,7 +69,7 @@ fun YearMonthPicker( .padding(top = 16.dp, bottom = 30.dp), ) { Text( - text = stringResource(R.string.year_month_picker_title), + text = stringResource(R.string.bottom_sheet_year_month_picker_title), style = ClodyTheme.typography.body2SemiBold, color = ClodyTheme.colors.gray01, modifier = Modifier.align(Alignment.Center), @@ -133,7 +133,7 @@ fun YearMonthPicker( onYearMonthSelected(year, month) onDismissRequest() }, - text = stringResource(R.string.year_month_picker_confirm), + text = stringResource(R.string.bottom_sheet_year_month_picker_btn_confirm), enabled = true, modifier = Modifier .fillMaxWidth() diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DailyDiaryCard.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DailyDiaryCard.kt index bd1d3fce..ed6029f9 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DailyDiaryCard.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DailyDiaryCard.kt @@ -85,14 +85,14 @@ fun DailyDiaryCard( verticalAlignment = Alignment.Bottom, ) { Text( - text = stringResource(R.string.diarylist_daily_diary_day, day), + text = stringResource(R.string.diary_list_daily_diary_day, day), modifier = Modifier .padding(end = 2.dp), color = ClodyTheme.colors.gray01, style = ClodyTheme.typography.body2SemiBold, ) Text( - text = stringResource(R.string.diarylist_daily_diary_day_of_week, dayOfWeek), + text = stringResource(R.string.diary_list_daily_diary_day_of_week, dayOfWeek), color = ClodyTheme.colors.gray04, style = ClodyTheme.typography.body4Medium, ) @@ -155,7 +155,7 @@ fun ReplyDiaryButton( contentPadding = PaddingValues(0.dp), ) { Text( - text = stringResource(R.string.diarylist_check_reply), + text = stringResource(R.string.diary_list_btn_reply), modifier = Modifier .padding(horizontal = 10.dp, vertical = 2.dp), style = ClodyTheme.typography.detail1SemiBold, diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DiaryListTopAppBar.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DiaryListTopAppBar.kt index e6a80526..a2b0d8ae 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DiaryListTopAppBar.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DiaryListTopAppBar.kt @@ -50,7 +50,7 @@ fun DiaryListTopAppBar( verticalAlignment = Alignment.CenterVertically, ) { Text( - text = stringResource(R.string.diarylist_selected_year_month, selectedYear, selectedMonth), + text = stringResource(R.string.diary_list_selected_year_month, selectedYear, selectedMonth), color = ClodyTheme.colors.gray01, style = ClodyTheme.typography.head4, ) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt index 15de33b5..cc86c8f9 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt @@ -197,10 +197,10 @@ fun DiaryListScreen( if (diaryDeleteDialogState) { ClodyDialog( - titleMassage = stringResource(R.string.diary_delete_dialog_title), - descriptionMassage = stringResource(R.string.diary_delete_dialog_description), - confirmOption = stringResource(R.string.diary_delete_dialog_confirm_option), - dismissOption = stringResource(R.string.diary_delete_dialog_dismiss_option), + titleMassage = stringResource(R.string.dialog_diary_delete_title), + descriptionMassage = stringResource(R.string.dialog_diary_delete_description), + confirmOption = stringResource(R.string.dialog_diary_delete_confirm), + dismissOption = stringResource(R.string.dialog_diary_delete_dismiss), confirmAction = { onClickDiaryDelete(selectedDiaryDate.year, selectedDiaryDate.month, selectedDiaryDate.day) dismissDiaryDeleteDialog() diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/home/calendar/component/DailyDiaryListItem.kt b/app/src/main/java/com/sopt/clody/presentation/ui/home/calendar/component/DailyDiaryListItem.kt index 21192e99..267f5f12 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/home/calendar/component/DailyDiaryListItem.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/home/calendar/component/DailyDiaryListItem.kt @@ -54,7 +54,7 @@ fun DailyDiaryListItem( ) Text( text = stringResource( - id = R.string.daily_diary_day_of_week_format, + id = R.string.home_daily_diary_day_of_week, dayOfWeek.toKoreanShortLabel(), ), style = ClodyTheme.typography.body2Medium, @@ -80,7 +80,7 @@ fun DailyDiaryListItem( .padding(vertical = 44.dp), ) { Text( - text = stringResource(R.string.daily_diary_draft_message), + text = stringResource(R.string.home_daily_diary_draft_message), style = ClodyTheme.typography.body3Regular, color = ClodyTheme.colors.gray05, textAlign = TextAlign.Center, @@ -96,7 +96,7 @@ fun DailyDiaryListItem( .padding(vertical = 44.dp), ) { Text( - text = stringResource(R.string.daily_diary_empty_message), + text = stringResource(R.string.home_daily_diary_empty_message), style = ClodyTheme.typography.body3Regular, color = ClodyTheme.colors.gray05, textAlign = TextAlign.Center, diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/home/component/CloverCount.kt b/app/src/main/java/com/sopt/clody/presentation/ui/home/component/CloverCount.kt index ff1029ba..f5f76ac9 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/home/component/CloverCount.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/home/component/CloverCount.kt @@ -18,7 +18,7 @@ import com.sopt.clody.ui.theme.ClodyTheme @Composable fun CloverCount(cloverCount: Int) { - val text = stringResource(R.string.home_clover_count_format, cloverCount) + val text = stringResource(R.string.home_total_clover, cloverCount) Box( modifier = Modifier diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/home/component/DiaryStateButton.kt b/app/src/main/java/com/sopt/clody/presentation/ui/home/component/DiaryStateButton.kt index 5b921f05..37431fde 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/home/component/DiaryStateButton.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/home/component/DiaryStateButton.kt @@ -31,7 +31,7 @@ fun DiaryStateButton( hasDraft -> { ClodyButton( onClick = { onClickWriteDiary(year, month, day) }, - text = stringResource(R.string.button_continue_draft), + text = stringResource(R.string.home_btn_continue_draft), enabled = true, modifier = modifier, ) @@ -40,7 +40,7 @@ fun DiaryStateButton( isInvalidDraft -> { ClodyButton( onClick = { /* no-action */ }, - text = stringResource(R.string.button_check_reply), + text = stringResource(R.string.home_btn_check_reply), enabled = false, modifier = modifier, disabledContainerColor = ClodyTheme.colors.gray05, @@ -51,7 +51,7 @@ fun DiaryStateButton( canReply -> { ClodyReplyButton( onClick = onClickReplyDiary, - text = stringResource(R.string.button_check_reply), + text = stringResource(R.string.home_btn_check_reply), enabled = true, modifier = modifier, ) @@ -60,7 +60,7 @@ fun DiaryStateButton( canWrite -> { ClodyButton( onClick = { onClickWriteDiary(year, month, day) }, - text = stringResource(R.string.button_write_diary), + text = stringResource(R.string.home_btn_write_diary), enabled = true, modifier = modifier, ) @@ -69,7 +69,7 @@ fun DiaryStateButton( else -> { ClodyButton( onClick = { onClickWriteDiary(year, month, day) }, - text = stringResource(R.string.button_write_diary), + text = stringResource(R.string.home_btn_write_diary), enabled = false, modifier = modifier, ) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/home/component/YearAndMonthTitle.kt b/app/src/main/java/com/sopt/clody/presentation/ui/home/component/YearAndMonthTitle.kt index b9677b37..209515cd 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/home/component/YearAndMonthTitle.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/home/component/YearAndMonthTitle.kt @@ -23,7 +23,7 @@ fun YearAndMonthTitle( selectedYear: Int, selectedMonth: Int, ) { - val text = stringResource(R.string.home_year_and_month_format, selectedYear, selectedMonth) + val text = stringResource(R.string.home_year_month_format, selectedYear, selectedMonth) Column { Row( diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/home/screen/HomeScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/home/screen/HomeScreen.kt index 2ef9cf90..693a5fab 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/home/screen/HomeScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/home/screen/HomeScreen.kt @@ -172,28 +172,28 @@ fun HomeRoute( .padding(horizontal = 16.dp), ) { Text( - text = stringResource(R.string.home_draft_popup_title), + text = stringResource(R.string.bottom_sheet_home_initial_draft_title), color = ClodyTheme.colors.gray01, textAlign = TextAlign.Center, style = ClodyTheme.typography.head3, ) Spacer(modifier = Modifier.height(10.dp)) Text( - text = stringResource(R.string.home_draft_popup_description), + text = stringResource(R.string.bottom_sheet_home_initial_draft_description), color = ClodyTheme.colors.gray04, textAlign = TextAlign.Center, style = ClodyTheme.typography.body3Regular, ) Spacer(modifier = Modifier.height(4.dp)) Text( - text = stringResource(R.string.home_draft_popup_guide), + text = stringResource(R.string.bottom_sheet_home_initial_draft_guide), color = ClodyTheme.colors.gray04, textAlign = TextAlign.Center, style = ClodyTheme.typography.body3Regular, ) Spacer(modifier = Modifier.height(28.dp)) ClodyButton( - text = stringResource(R.string.home_draft_popup_accept), + text = stringResource(R.string.bottom_sheet_home_initial_draft_accept), onClick = { homeViewModel.enableDraftAlarm(context) homeViewModel.updateFirstDraftUse(false) @@ -202,7 +202,7 @@ fun HomeRoute( modifier = Modifier.fillMaxWidth(), ) Text( - text = stringResource(R.string.home_draft_popup_dismiss), + text = stringResource(R.string.bottom_sheet_home_initial_draft_skip), modifier = Modifier .clickable(onClick = { homeViewModel.updateFirstDraftUse(false) }) .padding(12.dp), @@ -221,7 +221,7 @@ fun HomeRoute( contentAlignment = Alignment.BottomCenter, content = { ClodyToastMessage( - message = stringResource(R.string.home_draft_alarm_enabled_toast), + message = stringResource(R.string.toast_home_draft_alarm_enabled), iconResId = R.drawable.ic_toast_check_on_18, backgroundColor = ClodyTheme.colors.gray04, contentColor = ClodyTheme.colors.white, @@ -237,10 +237,10 @@ fun HomeRoute( if (showContinueDraftDialog) { ClodyDialog( - titleMassage = stringResource(R.string.home_continue_draft_title), - descriptionMassage = stringResource(R.string.home_continue_draft_description), - confirmOption = stringResource(R.string.home_continue_draft_confirm), - dismissOption = stringResource(R.string.home_continue_draft_dismiss), + titleMassage = stringResource(R.string.dialog_home_continue_draft_title), + descriptionMassage = stringResource(R.string.dialog_home_continue_draft_description), + confirmOption = stringResource(R.string.dialog_home_continue_draft_confirm), + dismissOption = stringResource(R.string.dialog_home_continue_draft_dismiss), confirmAction = { homeViewModel.setShowContinueDraftDialog(false) val date = homeViewModel.selectedDate.value @@ -266,10 +266,10 @@ fun HomeRoute( if (showDiaryDeleteDialog) { ClodyDialog( - titleMassage = stringResource(R.string.home_delete_diary_title), - descriptionMassage = stringResource(R.string.home_delete_diary_description), - confirmOption = stringResource(R.string.home_delete_diary_confirm), - dismissOption = stringResource(R.string.home_delete_diary_dismiss), + titleMassage = stringResource(R.string.dialog_diary_delete_title), + descriptionMassage = stringResource(R.string.dialog_diary_delete_description), + confirmOption = stringResource(R.string.dialog_diary_delete_confirm), + dismissOption = stringResource(R.string.dialog_diary_delete_dismiss), confirmAction = { homeViewModel.deleteDailyDiary( selectedDiaryDate.year, diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/login/LoginContract.kt b/app/src/main/java/com/sopt/clody/presentation/ui/login/LoginContract.kt index 38b71267..4e7d228d 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/login/LoginContract.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/login/LoginContract.kt @@ -12,6 +12,7 @@ class LoginContract { sealed class LoginIntent { data class LoginWithKakao(val context: Context) : LoginIntent() + data class LoginWithGoogle(val context: Context) : LoginIntent() data object ClearError : LoginIntent() } diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/login/LoginScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/login/LoginScreen.kt index b9a5d4ab..3162eb97 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/login/LoginScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/login/LoginScreen.kt @@ -8,13 +8,13 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource @@ -32,6 +32,7 @@ import com.sopt.clody.presentation.utils.base.ClodyPreview import com.sopt.clody.presentation.utils.extension.heightForScreenPercentage import com.sopt.clody.presentation.utils.extension.repeatOnStarted import com.sopt.clody.ui.theme.ClodyTheme +import java.util.Locale @Composable fun LoginRoute( @@ -59,9 +60,8 @@ fun LoginRoute( LoginScreen( isLoading = state.isLoading, - onLoginClick = { - viewModel.postIntent(LoginContract.LoginIntent.LoginWithKakao(context)) - }, + onKaKaoLoginClick = { viewModel.postIntent(LoginContract.LoginIntent.LoginWithKakao(context)) }, + onGoogleLoginClick = { viewModel.postIntent(LoginContract.LoginIntent.LoginWithGoogle(context)) }, ) // 에러 메시지 추가로 다이얼로그로 처리하고 싶다면? @@ -75,10 +75,12 @@ fun LoginRoute( @Composable fun LoginScreen( isLoading: Boolean, - onLoginClick: () -> Unit, + onKaKaoLoginClick: () -> Unit, + onGoogleLoginClick: () -> Unit, ) { val systemUiController = rememberSystemUiController() val backgroundColor = ClodyTheme.colors.white + val currentLang = Locale.getDefault().language LaunchedEffect(Unit) { systemUiController.setStatusBarColor( @@ -91,10 +93,11 @@ fun LoginScreen( bottomBar = { KaKaoButton( text = stringResource(id = R.string.signup_btn_kakao), - onClick = onLoginClick, + onClick = onKaKaoLoginClick, modifier = Modifier - .fillMaxWidth() .navigationBarsPadding() + .fillMaxWidth() + .padding(horizontal = 24.dp) .padding(bottom = 40.dp), ) }, @@ -106,22 +109,11 @@ fun LoginScreen( .padding(innerPadding), horizontalAlignment = Alignment.CenterHorizontally, ) { - Spacer(modifier = Modifier.heightForScreenPercentage(0.38f)) - Image( - painter = painterResource(id = R.drawable.ic_signup_logo), - contentDescription = null, - contentScale = ContentScale.Crop, - ) - Spacer(modifier = Modifier.heightForScreenPercentage(0.02f)) - Image( - painter = painterResource(id = R.drawable.ic__signup_title), - contentDescription = null, - ) - Spacer(modifier = Modifier.heightForScreenPercentage(0.01f)) + Spacer(modifier = Modifier.heightForScreenPercentage(0.36f)) Image( - painter = painterResource(id = R.drawable.ic_signup_logotitle), - contentDescription = null, - contentScale = ContentScale.Crop, + painter = painterResource(id = R.drawable.img_splash_logo), + contentDescription = "App Logo", + modifier = Modifier.size(160.dp), ) } } @@ -137,7 +129,8 @@ fun LoginScreenPreview() { BasePreview { LoginScreen( isLoading = false, - onLoginClick = {}, + onKaKaoLoginClick = {}, + onGoogleLoginClick = {}, ) } } diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/login/LoginViewModel.kt b/app/src/main/java/com/sopt/clody/presentation/ui/login/LoginViewModel.kt index b16060ee..9f058f24 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/login/LoginViewModel.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/login/LoginViewModel.kt @@ -46,6 +46,7 @@ class LoginViewModel @AssistedInject constructor( private suspend fun handleIntent(intent: LoginContract.LoginIntent) { when (intent) { is LoginContract.LoginIntent.LoginWithKakao -> loginWithKakao(intent.context) + is LoginContract.LoginIntent.LoginWithGoogle -> loginWithGoogle(intent.context) is LoginContract.LoginIntent.ClearError -> setState { copy(errorMessage = null) } } } @@ -91,6 +92,9 @@ class LoginViewModel @AssistedInject constructor( ) } + private suspend fun loginWithGoogle(context: Context) { + } + @AssistedFactory interface Factory : AssistedViewModelFactory { override fun create(state: LoginContract.LoginState): LoginViewModel diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt index f112fc19..65efb8b1 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt @@ -152,7 +152,7 @@ fun ReplyDiaryScreen( ) { val content = replyDiaryState.content val nickname = replyDiaryState.nickname - val replyMessage = stringResource(R.string.reply_message, nickname) + val replyMessage = stringResource(R.string.reply_title, nickname) Spacer(modifier = Modifier.heightForScreenPercentage(0.02f)) Image( @@ -187,9 +187,9 @@ fun ReplyDiaryScreen( if (showDialog) { CloverDialog( onDismiss = { showDialog = false }, - titleMassage = stringResource(R.string.clover_dialog_title, replyDiaryState.nickname), - descriptionMassage = stringResource(R.string.clover_dialog_description), - confirmOption = stringResource(R.string.clover_dialog_confirm_option), + titleMassage = stringResource(R.string.dialog_reply_clover_title, replyDiaryState.nickname), + descriptionMassage = stringResource(R.string.dialog_reply_clover_description), + confirmOption = stringResource(R.string.dialog_reply_clover_confirm), confirmAction = { showDialog = false }, confirmButtonColor = ClodyTheme.colors.mainYellow, ) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/component/QuickReplyAdButton.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/component/QuickReplyAdButton.kt index 49ddc451..4db6005c 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/component/QuickReplyAdButton.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/component/QuickReplyAdButton.kt @@ -41,7 +41,7 @@ fun QuickReplyAdButton( tint = Color.Unspecified, ) Text( - text = stringResource(R.string.loading_button_watch_ad_and_get_reply), + text = stringResource(R.string.reply_loading_btn_ad_request), style = ClodyTheme.typography.body4Medium, color = ClodyTheme.colors.blue, modifier = Modifier.padding(start = 5.dp), diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt index cf221aad..5b931081 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt @@ -179,9 +179,9 @@ fun ReplyLoadingScreen( val minutes = ((remainingTime % 3600) / 60).toInt() val seconds = (remainingTime % 60).toInt() - val loadingMessage = stringResource(id = R.string.loading_message) - val nearlyDoneMessage = stringResource(id = R.string.loading_nearly_done_message) - val completeMessage = stringResource(id = R.string.loading_complete_message) + val loadingMessage = stringResource(id = R.string.reply_loading_initial_description) + val nearlyDoneMessage = stringResource(id = R.string.reply_loading_after_ad_description) + val completeMessage = stringResource(id = R.string.reply_loading_complete_description) // 메시지 분기 val textToShow = when { @@ -217,7 +217,7 @@ fun ReplyLoadingScreen( if (isComplete) AmplitudeUtils.trackEvent(eventName = AmplitudeConstraints.WAITING_DIARY_REPLY) onCompleteClick() }, - text = stringResource(R.string.loading_button_open), + text = stringResource(R.string.reply_loading_btn_open), enabled = isComplete, ) }, diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/setting/component/AccountManagementLogoutOption.kt b/app/src/main/java/com/sopt/clody/presentation/ui/setting/component/AccountManagementLogoutOption.kt index 61281c6e..927b01be 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/setting/component/AccountManagementLogoutOption.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/setting/component/AccountManagementLogoutOption.kt @@ -41,7 +41,7 @@ fun AccountManagementLogoutOption( ) Spacer(modifier = Modifier.weight(1f)) Text( - text = stringResource(R.string.account_management_logout_button), + text = stringResource(R.string.account_management_btn_logout), modifier = Modifier.clickable( onClick = { updateLogoutDialog(true) }, indication = null, diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/setting/component/AccountManagementNicknameOption.kt b/app/src/main/java/com/sopt/clody/presentation/ui/setting/component/AccountManagementNicknameOption.kt index c1bd0e37..cbc43285 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/setting/component/AccountManagementNicknameOption.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/setting/component/AccountManagementNicknameOption.kt @@ -43,7 +43,7 @@ fun AccountManagementNicknameOption( ) Spacer(modifier = Modifier.weight(1f)) Text( - text = stringResource(R.string.account_management_nickname_change_button), + text = stringResource(R.string.account_management_btn_change_nickname), modifier = Modifier.clickable( onClick = { updateNicknameChangeBottomSheet(true) }, indication = null, diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/setting/component/AccountManagementRevokeOption.kt b/app/src/main/java/com/sopt/clody/presentation/ui/setting/component/AccountManagementRevokeOption.kt index 95bad3d2..4f3a8e98 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/setting/component/AccountManagementRevokeOption.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/setting/component/AccountManagementRevokeOption.kt @@ -28,7 +28,7 @@ fun AccountManagementRevokeOption( ) Spacer(modifier = Modifier.weight(1f)) Text( - text = stringResource(R.string.account_management_revoke_button), + text = stringResource(R.string.account_management_btn_revoke), modifier = Modifier.clickable( onClick = { updateRevokeDialog(true) }, indication = null, diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/setting/component/NicknameChangeBottomSheet.kt b/app/src/main/java/com/sopt/clody/presentation/ui/setting/component/NicknameChangeBottomSheet.kt index 1caf228f..7110b7db 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/setting/component/NicknameChangeBottomSheet.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/setting/component/NicknameChangeBottomSheet.kt @@ -84,7 +84,7 @@ fun NicknameChangeBottomSheetItem( .padding(top = 8.dp), ) { Text( - text = stringResource(R.string.account_management_nickname_change_title), + text = stringResource(R.string.bottom_sheet_nickname_change_title), modifier = Modifier.align(Alignment.Center), color = ClodyTheme.colors.gray01, style = ClodyTheme.typography.body2SemiBold, @@ -163,7 +163,7 @@ fun NicknameChangeBottomSheetItem( accountManagementViewModel.changeNickname(ModifyNicknameRequestDto(name = nickname.text)) onDismiss() }, - text = stringResource(R.string.account_management_nickname_change_confirm), + text = stringResource(R.string.bottom_sheet_nickname_change_confirm), enabled = nicknameChangeState && isValidNickname, modifier = Modifier .fillMaxWidth() diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/setting/notificationsetting/component/NotificationSettingTimePicker.kt b/app/src/main/java/com/sopt/clody/presentation/ui/setting/notificationsetting/component/NotificationSettingTimePicker.kt index b7b52f80..ccf2a97c 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/setting/notificationsetting/component/NotificationSettingTimePicker.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/setting/notificationsetting/component/NotificationSettingTimePicker.kt @@ -66,7 +66,7 @@ fun NotificationSettingTimePicker( .padding(top = 16.dp, bottom = 30.dp), ) { Text( - stringResource(id = R.string.time_picker_title), + text = stringResource(R.string.bottom_sheet_notification_time_change_title), style = ClodyTheme.typography.head4, color = ClodyTheme.colors.gray01, modifier = Modifier.align(Alignment.Center), @@ -144,7 +144,7 @@ fun NotificationSettingTimePicker( ).to24HourFormat() onConfirm(selectedTime) }, - text = stringResource(R.string.notification_setting_timepicker_confirm), + text = stringResource(R.string.bottom_sheet_notification_time_change_confirm), enabled = true, modifier = Modifier .fillMaxWidth() diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/setting/notificationsetting/screen/NotificationSettingScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/setting/notificationsetting/screen/NotificationSettingScreen.kt index 2fca35b5..f0410dde 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/setting/notificationsetting/screen/NotificationSettingScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/setting/notificationsetting/screen/NotificationSettingScreen.kt @@ -85,7 +85,7 @@ fun NotificationSettingRoute( contentAlignment = Alignment.BottomCenter, ) { ClodyToastMessage( - message = stringResource(R.string.notification_setting_change_success_toast), + message = stringResource(R.string.toast_notification_setting_time_change), iconResId = R.drawable.ic_toast_check_on_18, backgroundColor = ClodyTheme.colors.gray04, contentColor = ClodyTheme.colors.white, diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/AccountManagementScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/AccountManagementScreen.kt index a7dba39a..c5be21b1 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/AccountManagementScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/AccountManagementScreen.kt @@ -174,7 +174,7 @@ fun AccountManagementScreen( contentAlignment = Alignment.BottomCenter, ) { ClodyToastMessage( - message = stringResource(R.string.account_management_nickname_change_toast), + message = stringResource(R.string.toast_account_management_nickname_change), iconResId = R.drawable.ic_toast_check_on_18, backgroundColor = ClodyTheme.colors.gray04, contentColor = ClodyTheme.colors.white, @@ -186,10 +186,10 @@ fun AccountManagementScreen( if (showLogoutDialog) { LogoutDialog( - titleMassage = stringResource(R.string.account_management_logout_dialog_title), - descriptionMassage = stringResource(R.string.account_management_logout_dialog_description), - confirmOption = stringResource(R.string.account_management_logout_dialog_confirm), - dismissOption = stringResource(R.string.account_management_logout_dialog_dismiss), + titleMassage = stringResource(R.string.dialog_logout_title), + descriptionMassage = stringResource(R.string.dialog_logout_description), + confirmOption = stringResource(R.string.dialog_logout_confirm), + dismissOption = stringResource(R.string.dialog_logout_dismiss), confirmAction = { AmplitudeUtils.trackEvent(eventName = AmplitudeConstraints.LOGOUT) accountManagementViewModel.logOutAccount() @@ -200,10 +200,10 @@ fun AccountManagementScreen( if (showRevokeDialog) { ClodyDialog( - titleMassage = stringResource(R.string.account_management_revoke_dialog_title), - descriptionMassage = stringResource(R.string.account_management_revoke_dialog_description), - confirmOption = stringResource(R.string.account_management_revoke_dialog_confirm), - dismissOption = stringResource(R.string.account_management_revoke_dialog_dismiss), + titleMassage = stringResource(R.string.dialog_revoke_title), + descriptionMassage = stringResource(R.string.dialog_revoke_description), + confirmOption = stringResource(R.string.dialog_revoke_confirm), + dismissOption = stringResource(R.string.dialog_revoke_dismiss), confirmAction = { AmplitudeUtils.trackEvent(eventName = AmplitudeConstraints.REVOKE) accountManagementViewModel.revokeAccount() diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/SettingOptionUrls.kt b/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/SettingOptionUrls.kt index 1348d8e0..68649fa2 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/SettingOptionUrls.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/SettingOptionUrls.kt @@ -1,8 +1,23 @@ package com.sopt.clody.presentation.ui.setting.screen -object SettingOptionUrls { - const val ANNOUNCEMENT_URL = "https://www.notion.so/1c7e3fedb3f48029b36cf9d76c5fb6d6?pvs=21" - const val INQUIRIES_SUGGESTIONS_URL = "https://forms.gle/WnLC7VwHacufVHiv7" - const val TERMS_OF_SERVICE_URL = "https://www.notion.so/1c7e3fedb3f4802c8db1f3056c03973f?pvs=21" - const val PRIVACY_POLICY_URL = "https://www.notion.so/1c7e3fedb3f48024a334c8116255b378?pvs=21" +enum class SettingOptionUrls( + val enUrl: String, + val krUrl: String, +) { + NOTICES_URL( + enUrl = "https://tropical-buckthorn-d17.notion.site/Notice-22ae3fedb3f480feb229e7dcc7a23887?source=copy_link", + krUrl = "https://www.notion.so/1c7e3fedb3f48029b36cf9d76c5fb6d6?pvs=21", + ), + SUPPORT_FEEDBACK_URL( + enUrl = "https://docs.google.com/forms/d/e/1FAIpQLSe1LJg6tYaWBY2ji3O1smCH1ux5ItbVyGVUQko-Mg609Xt9eg/viewform", + krUrl = "https://forms.gle/WnLC7VwHacufVHiv7", + ), + TERMS_OF_SERVICE_URL( + enUrl = "https://tropical-buckthorn-d17.notion.site/Clody-Terms-of-Use-22ae3fedb3f48092ace1fba817df8605?source=copy_link", + krUrl = "https://www.notion.so/1c7e3fedb3f4802c8db1f3056c03973f?pvs=21", + ), + PRIVACY_POLICY_URL( + enUrl = "https://tropical-buckthorn-d17.notion.site/Clody-Privacy-Policy-22ae3fedb3f4808ab8dcc8ba60ad6cd6?source=copy_link", + krUrl = "https://www.notion.so/1c7e3fedb3f48024a334c8116255b378?pvs=21", + ), } diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/SettingScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/SettingScreen.kt index d86ea0bb..f349c69e 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/SettingScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/SettingScreen.kt @@ -20,6 +20,7 @@ import com.sopt.clody.presentation.ui.setting.component.SettingVersionInfo import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils import com.sopt.clody.ui.theme.ClodyTheme +import java.util.Locale @Composable fun SettingRoute( @@ -29,6 +30,12 @@ fun SettingRoute( navigateToWebView: (String) -> Unit, settingViewModel: SettingViewModel = hiltViewModel(), ) { + val currentLang = Locale.getDefault().language + val notice = if (currentLang == "ko") SettingOptionUrls.NOTICES_URL.krUrl else SettingOptionUrls.NOTICES_URL.enUrl + val supportFeedback = if (currentLang == "ko") SettingOptionUrls.SUPPORT_FEEDBACK_URL.krUrl else SettingOptionUrls.SUPPORT_FEEDBACK_URL.enUrl + val termsOfService = if (currentLang == "ko") SettingOptionUrls.TERMS_OF_SERVICE_URL.krUrl else SettingOptionUrls.TERMS_OF_SERVICE_URL.enUrl + val privacyPolicy = if (currentLang == "ko") SettingOptionUrls.PRIVACY_POLICY_URL.krUrl else SettingOptionUrls.PRIVACY_POLICY_URL.enUrl + val versionInfo by settingViewModel::versionInfo LaunchedEffect(Unit) { @@ -37,14 +44,14 @@ fun SettingRoute( } SettingScreen( - versionInfo = versionInfo ?: stringResource(R.string.setting_version_info_failure), + versionInfo = versionInfo ?: stringResource(R.string.setting_option_app_version_info_failure), onClickBack = navigateToPrevious, onClickAccountManagement = navigateToAccountManagement, onClickNotificationSetting = navigateToNotification, - onClickAnnouncement = { navigateToWebView(SettingOptionUrls.ANNOUNCEMENT_URL) }, - onClickInquiriesSuggestions = { navigateToWebView(SettingOptionUrls.INQUIRIES_SUGGESTIONS_URL) }, - onClickTerms = { navigateToWebView(SettingOptionUrls.TERMS_OF_SERVICE_URL) }, - onClickPrivacy = { navigateToWebView(SettingOptionUrls.PRIVACY_POLICY_URL) }, + onClickNotice = { navigateToWebView(notice) }, + onClickSupportFeedback = { navigateToWebView(supportFeedback) }, + onClickTerms = { navigateToWebView(termsOfService) }, + onClickPrivacy = { navigateToWebView(privacyPolicy) }, ) } @@ -55,8 +62,8 @@ fun SettingScreen( onClickBack: () -> Unit, onClickAccountManagement: () -> Unit, onClickNotificationSetting: () -> Unit, - onClickAnnouncement: () -> Unit, - onClickInquiriesSuggestions: () -> Unit, + onClickNotice: () -> Unit, + onClickSupportFeedback: () -> Unit, onClickTerms: () -> Unit, onClickPrivacy: () -> Unit, ) { @@ -72,12 +79,9 @@ fun SettingScreen( SettingSeparateLine() - SettingOption( - option = stringResource(R.string.setting_option_notification_setting), - onClickNotificationSetting, - ) - SettingOption(option = stringResource(R.string.setting_option_announcement), onClickAnnouncement) - SettingOption(option = stringResource(R.string.setting_option_inquiries_suggestions), onClickInquiriesSuggestions) + SettingOption(option = stringResource(R.string.setting_option_notification_setting), onClickNotificationSetting) + SettingOption(option = stringResource(R.string.setting_option_announcement), onClickNotice) + SettingOption(option = stringResource(R.string.setting_option_inquiries_suggestions), onClickSupportFeedback) SettingSeparateLine() diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/splash/SplashScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/splash/SplashScreen.kt index a14ff51f..fc57d17a 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/splash/SplashScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/splash/SplashScreen.kt @@ -121,21 +121,21 @@ fun SoftUpdateDialog( ) { AlertDialog( onDismissRequest = onDismiss, - title = { Text(stringResource(R.string.soft_update_title)) }, + title = { Text(stringResource(R.string.dialog_soft_update_title)) }, text = { Text( - text = stringResource(R.string.soft_update_message, latestVersion), + text = stringResource(R.string.dialog_soft_update_description, latestVersion), textAlign = TextAlign.Center, ) }, confirmButton = { TextButton(onClick = onConfirm) { - Text(stringResource(R.string.soft_update_confirm)) + Text(stringResource(R.string.dialog_soft_update_confirm)) } }, dismissButton = { TextButton(onClick = onDismiss) { - Text(stringResource(R.string.soft_update_dismiss)) + Text(stringResource(R.string.dialog_soft_update_dismiss)) } }, ) @@ -149,18 +149,18 @@ fun HardUpdateDialog( ) { AlertDialog( onDismissRequest = {}, - title = { Text(stringResource(R.string.hard_update_title)) }, + title = { Text(stringResource(R.string.dialog_hard_update_title)) }, text = { - Text(stringResource(R.string.hard_update_message, latestVersion)) + Text(stringResource(R.string.dialog_hard_update_description, latestVersion)) }, confirmButton = { TextButton(onClick = onConfirm) { - Text(stringResource(R.string.soft_update_confirm)) + Text(stringResource(R.string.dialog_soft_update_confirm)) } }, dismissButton = { TextButton(onClick = onExit) { - Text(stringResource(R.string.hard_update_exit)) + Text(stringResource(R.string.dialog_hard_update_exit)) } }, ) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/writediary/component/bottomsheet/DeleteWriteDiaryBottomSheet.kt b/app/src/main/java/com/sopt/clody/presentation/ui/writediary/component/bottomsheet/DeleteWriteDiaryBottomSheet.kt index 890be429..30e0c758 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/writediary/component/bottomsheet/DeleteWriteDiaryBottomSheet.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/writediary/component/bottomsheet/DeleteWriteDiaryBottomSheet.kt @@ -61,7 +61,7 @@ fun DeleteWriteDiaryBottomSheet( ) Spacer(modifier = Modifier.width(8.dp)) Text( - text = stringResource(R.string.bottom_sheet_delete_button), + text = stringResource(R.string.bottom_sheet_diary_delete), style = ClodyTheme.typography.body4SemiBold, color = ClodyTheme.colors.gray01, ) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/writediary/component/button/AddDiaryEntryFAB.kt b/app/src/main/java/com/sopt/clody/presentation/ui/writediary/component/button/AddDiaryEntryFAB.kt index 9f5b16ec..9331489c 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/writediary/component/button/AddDiaryEntryFAB.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/writediary/component/button/AddDiaryEntryFAB.kt @@ -86,7 +86,7 @@ fun BoxScope.AddDiaryEntryFAB( ) Spacer(modifier = Modifier.width(10.dp)) Text( - text = stringResource(R.string.write_diary_add_entry_fab), + text = stringResource(R.string.write_diary_fab_add_entry), color = contentColor, style = ClodyTheme.typography.body2SemiBold, ) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/writediary/component/button/SendButton.kt b/app/src/main/java/com/sopt/clody/presentation/ui/writediary/component/button/SendButton.kt index 059e94e6..062120c1 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/writediary/component/button/SendButton.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/writediary/component/button/SendButton.kt @@ -35,7 +35,7 @@ fun SendButton( contentAlignment = Alignment.Center, ) { Text( - text = stringResource(R.string.write_diary_text_button), + text = stringResource(R.string.write_diary_btn_send), color = if (isPressed) ClodyTheme.colors.gray07 else ClodyTheme.colors.gray01, style = ClodyTheme.typography.body2SemiBold, ) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/writediary/screen/WriteDiaryScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/writediary/screen/WriteDiaryScreen.kt index 7ce2e175..ffe3d65d 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/writediary/screen/WriteDiaryScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/writediary/screen/WriteDiaryScreen.kt @@ -281,10 +281,10 @@ fun WriteDiaryScreen( if (showDialog) { ClodyDialog( onDismiss = onDismissDialog, - titleMassage = stringResource(R.string.write_diary_dialog_title), - descriptionMassage = stringResource(R.string.write_diary_dialog_description), - confirmOption = stringResource(R.string.write_diary_dialog_confirm_option), - dismissOption = stringResource(R.string.write_diary_dialog_dismiss_option), + titleMassage = stringResource(R.string.dialog_write_diary_title), + descriptionMassage = stringResource(R.string.dialog_write_diary_description), + confirmOption = stringResource(R.string.dialog_write_diary_confirm), + dismissOption = stringResource(R.string.dialog_write_diary_dismiss), confirmAction = onConfirmDialog, confirmButtonColor = ClodyTheme.colors.mainYellow, confirmButtonTextColor = ClodyTheme.colors.gray01, @@ -300,10 +300,10 @@ fun WriteDiaryScreen( if (showExitDialog) { ClodyDialog( - titleMassage = stringResource(R.string.temp_save_dialog_exit_title), - descriptionMassage = stringResource(R.string.temp_save_dialog_exit_description), - confirmOption = stringResource(R.string.temp_save_dialog_exit_confirm), - dismissOption = stringResource(R.string.temp_save_dialog_exit_dismiss), + titleMassage = stringResource(R.string.dialog_draft_save_title), + descriptionMassage = stringResource(R.string.dialog_draft_save_description), + confirmOption = stringResource(R.string.dialog_draft_save_confirm), + dismissOption = stringResource(R.string.dialog_draft_save_dismiss), confirmAction = onConfirmExitDialog, confirmButtonColor = ClodyTheme.colors.red, confirmButtonTextColor = ClodyTheme.colors.white, @@ -356,7 +356,7 @@ private fun ShowToastMessages( ) { if (showLimitMessage) { ClodyToastMessage( - message = stringResource(R.string.toast_limit_message), + message = stringResource(R.string.toast_write_diary_entry_limit), iconResId = R.drawable.ic_toast_error, backgroundColor = ClodyTheme.colors.gray04, contentColor = ClodyTheme.colors.white, @@ -367,7 +367,7 @@ private fun ShowToastMessages( if (showEmptyFieldsMessage) { ClodyToastMessage( - message = stringResource(R.string.toast_empty_fields_message), + message = stringResource(R.string.toast_write_diary_entry_empty), iconResId = R.drawable.ic_toast_error, backgroundColor = ClodyTheme.colors.gray04, contentColor = ClodyTheme.colors.white, diff --git a/app/src/main/res/drawable-xxhdpi/img_splash_logo.png b/app/src/main/res/drawable-ko/img_splash_logo.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/img_splash_logo.png rename to app/src/main/res/drawable-ko/img_splash_logo.png diff --git a/app/src/main/res/drawable-xhdpi/img_splash_logo.png b/app/src/main/res/drawable-xhdpi/img_splash_logo.png deleted file mode 100644 index aa7878f5..00000000 Binary files a/app/src/main/res/drawable-xhdpi/img_splash_logo.png and /dev/null differ diff --git a/app/src/main/res/drawable/img_google_button_logo.png b/app/src/main/res/drawable/img_google_button_logo.png new file mode 100644 index 00000000..dfb8a747 Binary files /dev/null and b/app/src/main/res/drawable/img_google_button_logo.png differ diff --git a/app/src/main/res/drawable/img_splash_logo.png b/app/src/main/res/drawable/img_splash_logo.png index a562faec..568df3be 100644 Binary files a/app/src/main/res/drawable/img_splash_logo.png and b/app/src/main/res/drawable/img_splash_logo.png differ diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml new file mode 100644 index 00000000..a7ea8898 --- /dev/null +++ b/app/src/main/res/values-ko/strings.xml @@ -0,0 +1,196 @@ + + + 클로디 + + + 카카오로 로그인 + Sign Up With Google + + + "Clody 이용을 위해\n약관에 동의해 주세요" + 전체 동의하기 + (필수) 서비스 이용약관 + (필수) 개인정보 처리방침 + 다음 + + + 만나서 반가워요!\n어떻게 불러 드릴까요? + 닉네임을 입력해주세요 + 다음 + + + 몇시에 감사일기\n작성 알림을 드릴까요? + %1$s %2$s시 %3$s분 + 완료 + 다음에 설정할게요 + + + 안녕하세요!\n저는 로디라고 해요 + 여러분이 써준 감사일기를 받고,\n칭찬과 응원을 담아 답장을 쓴답니다 + + 답장마다 행운의\n네잎클로버를 함께 드려요 + 하루에 받은 감사의 수가 많을수록\n색이 진한 네잎클로버를 전달해요 + + 오늘과 전날 일기만\n작성할 수 있어요 + 그전이나 다음날의 일기는 작성할 수\n없으니, 잊지 말고 기록해주세요 + + 이제 일기를 써볼까요?\n기다리고 있을게요! + 두번째 일기부터는 네잎클로버를 찾는 데\n12시간이 걸리니 조금만 기다려 주세요 + + 다음 + 시작하기 + + + 클로버 %1$d개 + %1$d년 %2$d월 + + 작성된 감사 일기가 없어요! + 임시저장된 일기가 있어요. + %1$d. %2$s + %1$s요일 + + 일기 쓰기 + 답장 확인 + 이어 쓰기 + + + 보내기 + %1$d월 %2$d일 + 신조어, 비속어, 이모지 작성은 불가능해요 + 일상 속 작은 감사함을 적어보세요 + 2~50자 까지 입력할 수 있어요. + 추가하기 + + + 로디가 열심히 답장을 쓰고 있어요 + 로디가 답장을 거의 다 써가요!\n조금만 기다려주세요 + 로디가 쓴 행운의 답장이 도착했어요! + 광고 보고 바로 답장 받기 + 열어보기 + + + %1$d월 %2$d일 + %1$s님을 위한 행운의 답장 + + + %1$s년 %2$s월 + 작성된 감사일기가 없어요 + %1$s일 + /%1$s + 답장 확인 + + + 설정 + 프로필 및 계정 관리 + 알림 설정 + 공지사항 + 문의/제안하기 + 서비스 이용 약관 + 개인정보 처리방침 + 앱 버전 + 버전 정보를 불러오는데 실패했습니다. + + + 프로필 및 계정 관리 + + 변경하기 + 로그아웃 + 계정을 삭제하시겠어요? + 회원탈퇴 + + + 알림 설정 + 일기 작성 알림 받기 + 이어쓰기 알림 받기 + 알림 시간 + %1$s %2$s시 %3$s분 + 답장 도착 알림 받기 + + + 다시 시도 + 확인 + + + 업데이트 필요 + 새로운 버전 %1$s을 사용할 수 있습니다.\n지금 업데이트하시겠습니까? + 업데이트 + 나중에 + + 필수 업데이트 + 버전 %1$s으로 업데이트가 필요합니다. + 앱 종료 + + 임시저장된 일기를 이어 쓸까요? + 답장 기한이 지나서 답장은 받을 수 없어요. + 이어쓰기 + 아니오 + + 정말 일기를 삭제할까요? + 아직 답장이 오지 않았거나 삭제하고\n다시 작성한 일기는 답장을 받을 수 없어요. + 삭제할래요 + 아니요 + + 일기를 로디에게 보낼까요? + 보낸 일기는 수정이 어려워요. + 보내기 + 취소 + + 지금까지 쓴 일기를 임시저장할까요? + 나가기를 누르면 작성 중인 내용이 모두 사라져요. + 나가기 + 임시저장 + + %1$s님을 위한 행운 도착 + 1개의 네잎클로버 획득 + 확인 + + 로그아웃 하시겠어요? + 기다릴게요, 다음에 다시 만나요! + 로그아웃 + 아니요 + + 서비스를 탈퇴하시겠어요? + 작성하신 일기와 받은 답장 및 클로버가\n 모두 삭제되며 복구할 수 없어요. + 탈퇴할래요 + 아니요 + + + 이어쓰기 알림 설정을 완료했어요. + 최대 5개까지 작성할 수 있어요. + 빈 칸을 채워야 보낼 수 있어요. + 변경을 완료했어요. + 알람 시간 설정을 완료했어요. + + + 발송 시간 변경 + 완료 + + 기한이 지나면\n로디의 답장을 받을 수 없어요! + 답장 마감 전에 일기를 이어쓸 수 있도록\n알려드리기 위해서는 알림 설정이 필요해요. + [설정 > 애플리케이션 > 클로디 > 알림 > 알림표시] + 알림 받기 + 다음에 하기 + + 삭제하기 + + 다른 날짜 보기 + 완료 + + 닉네임 변경 + 특수문자, 띄어쓰기 없이 작성해주세요 + 변경하기 + + 다른 시간 보기 + 완료 + + + 오전 + 오후 + %1$d년 + %1$d월 + 데이터를 불러오는데 실패했습니다. + 알 수 없는 오류가 발생했습니다. + 일기 삭제 중 오류가 발생했습니다. + Chrome이 설치되어 있어야 로그인이 가능합니다. + 루팅된 기기에서는 로그인할 수 없습니다. + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5dd2e564..3cfef1ae 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,221 +1,196 @@ + - 클로디 - - - - 업데이트 필요 - 새로운 버전 %1$s을 사용할 수 있습니다.\n지금 업데이트하시겠습니까? - 업데이트 - 나중에 - - - 필수 업데이트 - 버전 %1$s으로 업데이트가 필요합니다. - 앱 종료 - - - 행운을 전하는 감사일기 - 카카오로 로그인 - - - - 만나서 반가워요!\n어떻게 불러 드릴까요? - 닉네임을 입력해주세요 - 다음 - - - "Clody 이용을 위해\n약관에 동의해 주세요" - 전체 동의하기 - (필수) 서비스 이용약관 - (필수) 개인정보 처리방침 - 다음 - - - 발송 시간 변경 - - - 몇시에 감사일기\n작성 알림을 드릴까요? - 다음에 설정할게요 - 완료 - - - 안녕하세요! - 저는 로디라고 해요 - 여러분이 써준 감사일기를 받고,\n칭찬과 응원을 담아 답장을 쓴답니다 - - 답장마다 행운의 - 네잎클로버를 함께 드려요 - 하루에 받은 감사의 수가 많을수록\n색이 진한 네잎클로버를 전달해요 - - 오늘과 전날 일기만 - 작성할 수 있어요 - 그전이나 다음날의 일기는 작성할 수\n없으니, 잊지 말고 기록해주세요 - - 이제 일기를 써볼까요? - 기다리고 있을게요! - 두번째 일기부터는 네잎클로버를 찾는 데\n12시간이 걸리니 조금만 기다려 주세요 - - 다음 - 시작하기 - - - 로디가 열심히 답장을 쓰고 있어요 - 로디가 쓴 행운의 답장이 도착했어요! - 로디가 답장을 거의 다 써가요!\n조금만 기다려주세요 - 열어보기 - 확인 - 광고 보고 바로 답장 받기 - - - %1$d월 %2$d일 - %1$s님을 위한 행운의 답장 - - - %1$s님을 위한 행운 도착 - 1개의 네잎클로버 획득 - 확인 - - - 일기를 로디에게 보낼까요? - 보낸 일기는 수정이 어려워요. - 보내기 - 취소 - - - 지금까지 쓴 일기를 임시저장할까요? - 나가기를 누르면 작성 중인 내용이 모두 사라져요. - 나가기 - 임시저장 - - - 저장 - %1$d월 %2$d일 - 추가하기 - 보내기 - 일상 속 작은 감사함을 적어보세요 - 2~50자 까지 입력할 수 있어요. - - - 최대 5개까지 작성할 수 있어요. - 빈 칸을 채워야 보낼 수 있어요. - - - 신조어, 비속어, 이모지 작성은 불가능해요 - - - 정말 일기를 삭제할까요? - 아직 답장이 오지 않았거나 삭제하고\n다시 작성한 일기는 답장을 받을 수 없어요. - 삭제할래요 - 아니요 - - - %1$s년 %2$s월 - 작성된 감사일기가 없어요 - %1$s일 - /%1$s - 답장 확인 - - 임시저장된 일기가 있어요. - 작성된 감사 일기가 없어요! - %1$d. %2$s - %1$s요일 - - - 클로버 %1$d개 - %1$d년 %2$d월 - - - 이어 쓰기 - 답장 확인 - 일기 쓰기 - - - 데이터를 불러오는데 실패했습니다. - 알 수 없는 오류가 발생했습니다. - 일기 삭제 중 오류가 발생했습니다. - - - 기한이 지나면\n로디의 답장을 받을 수 없어요! - 답장 마감 전에 일기를 이어쓸 수 있도록\n알려드리기 위해서는 알림 설정이 필요해요. - [설정 > 애플리케이션 > 클로디 > 알림 > 알림표시] - 알림 받기 - 다음에 하기 - - - 이어쓰기 알림 설정을 완료했어요. - - - 임시저장된 일기를 이어 쓸까요? - 답장 기한이 지나서 답장은 받을 수 없어요. - 이어쓰기 - 아니오 - - - 정말 일기를 삭제할까요? - 아직 답장이 오지 않았거나 삭제하고\n다시 작성한 일기는 답장을 받을 수 없어요. - 삭제할래요 - 아니요 - - - 월 선택 - - - 설정 - 버전 정보를 불러오는데 실패했습니다. - 프로필 및 계정 관리 - 알림 설정 - 공지사항 - 문의/제안하기 - 서비스 이용 약관 - 개인정보 처리방침 - 앱 버전 - 버전 정보를 불러오는데 실패했습니다. - - - 프로필 및 계정 관리 - - 변경하기 - 닉네임 변경 - 특수문자, 띄어쓰기 없이 작성해주세요 - 변경하기 - 변경을 완료했어요. - 로그아웃 - 로그아웃 하시겠어요? - 기다릴게요, 다음에 다시 만나요! - 로그아웃 - 아니요 - 계정을 삭제하시겠어요? - 회원탈퇴 - 서비스를 탈퇴하시겠어요? - 작성하신 일기와 받은 답장 및 클로버가\n 모두 삭제되며 복구할 수 없어요. - 탈퇴할래요 - 아니요 - - - 알림 설정 - 일기 작성 알림 받기 - 이어쓰기 알림 받기 - 알림 시간 - 답장 도착 알림 받기 - 완료 - %1$s %2$s시 %3$s분 - 다시 시도 - 확인 - 알람 시간 설정을 완료했어요. - - - 삭제하기 - 다른 날짜 보기 - 완료 - - - 오전 - 오후 - %1$s %2$s시 %3$s분 - - %1$d년 - %1$d월 - - Chrome이 설치되어 있어야 로그인이 가능합니다. - 루팅된 기기에서는 로그인할 수 없습니다. + Clody + + + Sign Up With KaKao + Sign Up With Google + + + To use Clody,\nPlease agree to the terms\nand conditions + Agree to all + (Required) Terms of Service + (Required) Privacy Policy + Next + + + Nice to meet you!\nWhat should I call you? + Please enter your nickname + Next + + + What time would you\nlike us to remind you to write? + %2$s:%3$s %1$s + Save + Skip for now + + + Hello!\nI\'m Lody + I read your journal entries\nand reply with compliments\nand words of encouragement! + + Each reply comes\nwith a lucky four-leaf clover + The more you confide in Lody\nthe luckier your clover becomes + + You can only journal\nfor today and yesterday + Past or future dates aren\'t available,\nDon\'t miss your moment + + Ready to write\nyour first journal?\nI\'ll be waiting! + From your second journal onward,\nyour next clover will take 12 hours to grow + + Next + Get Started + + + %1$d Clovers + %2$d %1$d + + No gratitude entries yet. + There are existing entries in drafts. + %1$d. %2$s + %1$s + + Write a Journal + See my Reply + Continue Writing + + + Send + %1$d %2$d + Please avoid using slang, profanity, or emojis. + Something you\'re grateful for today. + Please enter between 2 and 100 characters. + Add + + + Lody\'s working hard on your reply! + You\'ve got a lucky reply from Lody! + Lody\'s almost done writing your reply\\njust a little longer! + Watch Ad for Instant Reply + Open Reply + + + %1$d %2$d + A lucky reply for %1$d + + + %2$s %1$s + No gratitude entries yet. + %1$s + /%1$s + Reply + + + Settings + Profile and Account + Notification + Notices + Support/Feedback + Terms of Service + Privacy Policy + Version + Fail to Fetch + + + Profile and Account + " " + Edit + Logout + Are you sure you want to delete your account? + Withdraw + + + Notification + Journal Reminder + Draft Reminder + Reminder Time + %2$s:%3$s %1$s + Reply Notification + + + Try Again + Close + + + Update Available + A new version %1$s is available. Do you want to update now? + Update + Later + + Update Required + Please update to version %1$s to continue + Exit App + + Pick up where you left off? + This journal\'s reply time has expired. + Continue + Cancel + + Delete this entry? + You won\'t receive another reply\nif you delete and rewrite your entry. + Delete + Cancel + + Ready to share\nyour journal with Lody? + Sent journals can\'t be edited. + Send + Cancel + + Want to send this later instead? + Your journal will be lost if you exit now. + Exit + Draft + + %1$s, your luck is here! + 1 Four-Leaf Clover + Done + + Log out now? + I\'ll be here, see you again soon! + Logout + Cancel + + Delete your account? + Your journals, replies, and clovers will be\\npermanently deleted and can\'t be restored. + Withdraw + Cancel + + + Continue writing reminders are now on! + Field required to send. + You can write up to 5 entries. + Save Changes + Save your reminder time + + + Change reminder time + Save + + Heads up- drafts expire\\nDon\'t miss Lody\'s reply! + To receive a reminder before the reply deadline,\nconfirm notification permissions. + [Settings > Apps > Clody > Notifications] + Turn on Notifications + Skip for now + + Delete + + View Another Day + Done + + Edit Nickname + Please write without spaces or special characters + Save + + Choose another time + Save + + + AM + PM + %1$d + %1$d + An error occurred while deleting the diary. + Chrome must be installed to log in. + Login is not available on rooted devices for security reasons. + Failed to load data. + An unexpected error has occurred.