Skip to content

Commit 1ce7670

Browse files
committed
언어선택 UI 반영 및 언어 CSV 변환 Gradle Task 추가
1 parent 5ebd990 commit 1ce7670

10 files changed

Lines changed: 1600 additions & 13 deletions

File tree

app/src/main/java/com/eatssu/android/presentation/mypage/language/LanguageSelectorScreen.kt

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import androidx.compose.foundation.layout.Column
44
import androidx.compose.foundation.layout.fillMaxSize
55
import androidx.compose.foundation.layout.padding
66
import androidx.compose.material3.Scaffold
7-
import androidx.compose.material3.Text
87
import androidx.compose.runtime.Composable
98
import androidx.compose.runtime.getValue
109
import androidx.compose.ui.Modifier
@@ -15,7 +14,7 @@ import androidx.hilt.navigation.compose.hiltViewModel
1514
import androidx.lifecycle.compose.collectAsStateWithLifecycle
1615
import com.eatssu.android.R
1716
import com.eatssu.common.enums.AppLanguage
18-
import com.eatssu.design_system.component.EatSsuRadioButtonGroup
17+
import com.eatssu.design_system.component.EatSsuRadioCheckBoxGroup
1918
import com.eatssu.design_system.component.EatSsuTopBar
2019
import com.eatssu.design_system.theme.EatssuTheme
2120

@@ -63,13 +62,13 @@ fun LanguageSelectorContent(
6362
.fillMaxSize()
6463
.padding(horizontal = 24.dp)
6564
) {
66-
Text(
67-
text = stringResource(R.string.language_select_description),
68-
style = EatssuTheme.typography.body2,
69-
modifier = Modifier.padding(vertical = 20.dp)
70-
)
65+
// Text(
66+
// text = stringResource(R.string.language_select_description),
67+
// style = EatssuTheme.typography.body2,
68+
// modifier = Modifier.padding(vertical = 20.dp)
69+
// )
7170

72-
EatSsuRadioButtonGroup(
71+
EatSsuRadioCheckBoxGroup(
7372
options = languageOptions,
7473
selectedOption = selectedOption,
7574
onOptionSelected = { selected ->

app/src/main/res/values-en/strings.xml

Lines changed: 307 additions & 0 deletions
Large diffs are not rendered by default.

app/src/main/res/values-ja/strings.xml

Lines changed: 307 additions & 0 deletions
Large diffs are not rendered by default.

app/src/main/res/values-vi/strings.xml

Lines changed: 307 additions & 0 deletions
Large diffs are not rendered by default.

build.gradle.kts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,11 @@ buildscript {
1515
dependencies {
1616
classpath(libs.oss.licenses.plugin)
1717
}
18-
}
18+
}
19+
20+
tasks.register<Exec>("generateLocalizedStrings") {
21+
group = "localization"
22+
description =
23+
"language.csv 파일을 통해 res/values-* 위치에 양식에 맞게 strings.xml 파일을 생성합니다. csv에 기존 strings.xml에 매칭되는 값이 없는 경우 한글 값이 들어갑니다."
24+
commandLine("python3", "scripts/generate_android_strings.py")
25+
}

core/common/src/main/java/com/eatssu/common/enums/AppLanguage.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ enum class AppLanguage(
1111
val nativeDisplayName: String
1212
) {
1313
// SYSTEM("", "System Default", "시스템 언어"), // 다국어 재활성화 시 주석 해제
14-
KOREAN("ko", "Korean", "한국어");
15-
// ENGLISH("en", "English", "English"), // 다국어 재활성화 시 주석 해제
16-
// JAPANESE("ja", "Japanese", "日本語"), // 다국어 재활성화 시 주석 해제
14+
KOREAN("ko", "Korean", "한국어"),
15+
ENGLISH("en", "English", "English"), // 다국어 재활성화 시 주석 해제
16+
JAPANESE("ja", "Japanese", "日本語"); // 다국어 재활성화 시 주석 해제
1717
// CHINESE("zh", "Chinese", "中文"), // 다국어 재활성화 시 주석 해제
1818
// VIETNAMESE("vi", "Vietnamese", "Tiếng Việt"); // 다국어 재활성화 시 주석 해제
1919

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package com.eatssu.design_system.component
2+
3+
import androidx.compose.foundation.border
4+
import androidx.compose.foundation.clickable
5+
import androidx.compose.foundation.layout.Box
6+
import androidx.compose.foundation.layout.Row
7+
import androidx.compose.foundation.layout.Spacer
8+
import androidx.compose.foundation.layout.fillMaxWidth
9+
import androidx.compose.foundation.layout.height
10+
import androidx.compose.foundation.layout.padding
11+
import androidx.compose.foundation.layout.size
12+
import androidx.compose.foundation.lazy.LazyColumn
13+
import androidx.compose.foundation.lazy.items
14+
import androidx.compose.foundation.shape.CircleShape
15+
import androidx.compose.material3.MaterialTheme
16+
import androidx.compose.material3.Text
17+
import androidx.compose.runtime.Composable
18+
import androidx.compose.ui.Alignment
19+
import androidx.compose.ui.Modifier
20+
import androidx.compose.ui.tooling.preview.Preview
21+
import androidx.compose.ui.unit.dp
22+
import com.eatssu.design_system.theme.CheckedColor
23+
import com.eatssu.design_system.theme.Gray400
24+
25+
@Composable
26+
fun EatSsuRadioCheckBox(
27+
text: String,
28+
isSelected: Boolean,
29+
onSelect: () -> Unit
30+
) {
31+
32+
Row(
33+
modifier = Modifier
34+
.fillMaxWidth()
35+
.clickable { onSelect() }
36+
.padding(15.dp),
37+
verticalAlignment = Alignment.CenterVertically
38+
) {
39+
Text(
40+
text = text,
41+
color = MaterialTheme.colorScheme.onSurface,
42+
style = com.eatssu.design_system.theme.EatssuTheme.typography.body2
43+
)
44+
45+
Spacer(Modifier.weight(1f))
46+
if (!isSelected) {
47+
Box(
48+
modifier = Modifier
49+
.size(18.dp)
50+
.border(width = 2.dp, shape = CircleShape, color = Gray400)
51+
)
52+
} else {
53+
Box(
54+
modifier = Modifier
55+
.size(18.dp)
56+
.border(width = 5.dp, shape = CircleShape, color = CheckedColor)
57+
)
58+
}
59+
}
60+
}
61+
62+
@Composable
63+
fun EatSsuRadioCheckBoxGroup(
64+
options: List<String>,
65+
selectedOption: String,
66+
onOptionSelected: (String) -> Unit
67+
) {
68+
LazyColumn(modifier = Modifier.fillMaxWidth()) {
69+
items(options, key = { it }) { option ->
70+
val isSelected = option == selectedOption
71+
EatSsuRadioCheckBox(
72+
text = option,
73+
isSelected = isSelected,
74+
onSelect = { onOptionSelected(option) }
75+
)
76+
Spacer(modifier = Modifier.height(8.dp))
77+
}
78+
}
79+
}
80+
81+
82+
@Composable
83+
@Preview
84+
fun LanguageSelectionPreview() {
85+
val languages = listOf("한국어", "English", "JP")
86+
87+
com.eatssu.design_system.theme.EatssuTheme {
88+
EatSsuRadioCheckBoxGroup(
89+
options = languages,
90+
selectedOption = languages[0],
91+
onOptionSelected = {}
92+
)
93+
}
94+
}

core/design-system/src/main/java/com/eatssu/design_system/theme/Color.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,6 @@ val WarningBr = Color(0xFFFFE0A3)
4242

4343
val Danger = Color(0xFFDE3412)
4444
val DangerBg = Color(0xFFFDEFEC)
45-
val DangerBr = Color(0xFFFCDFD9)
45+
val DangerBr = Color(0xFFFCDFD9)
46+
47+
val CheckedColor = Color(0xFF66D4C2)

0 commit comments

Comments
 (0)