Android
[Android] 언어 변경
도토리흑미
2024. 4. 11. 18:43
안드로이드 앱에서 사용자가 직접 앱 내에서 언어를 변경할 수 있게 하려면
앱의 Context를 업데이트하여 새로운 로케일을 설정해야 합니다.
아래는 코틀린을 사용하여 안드로이드 앱에서 언어를 변경하는 방법입니다.
fun updateLocale(context: Context, localeToSwitchTo: Locale): ContextWrapper {
var context = context
val resources = context.resources
val configuration = resources.configuration
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
setLocaleForApi24(configuration, localeToSwitchTo)
} else {
setLocaleForApiBefore24(configuration, localeToSwitchTo)
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
context = context.createConfigurationContext(configuration)
} else {
resources.updateConfiguration(configuration, resources.displayMetrics)
}
return ContextWrapper(context)
}
@TargetApi(Build.VERSION_CODES.N)
private fun setLocaleForApi24(config: Configuration, locale: Locale) {
config.setLocale(locale)
Locale.setDefault(locale)
}
private fun setLocaleForApiBefore24(config: Configuration, locale: Locale) {
config.locale = locale
Locale.setDefault(locale)
}
앱의 언어를 변경하기 위해 ContextWrapper를 사용하는 함수를 만듭니다.
이 함수는 새로운 로케일을 설정하고, Context에 적용합니다.
다음은 액티비티에서 변경하는 예제입니다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 예를 들어, 사용자가 '한국어'로 변경하는 버튼을 클릭했다고 가정
val koreanButton: Button = findViewById(R.id.koreanButton)
koreanButton.setOnClickListener {
setLocale("ko") // 한국어로 변경
}
// 사용자가 '영어'로 변경하는 버튼을 클릭했다고 가정
val englishButton: Button = findViewById(R.id.englishButton)
englishButton.setOnClickListener {
setLocale("en") // 영어로 변경
}
}
private fun setLocale(languageCode: String) {
val locale = Locale(languageCode)
Locale.setDefault(locale)
val context: Context = updateLocale(this, locale)
val resources = context.resources
resources.updateConfiguration(resources.configuration, resources.displayMetrics)
recreate() // 액티비티를 재시작하여 변경사항 적용
}
}
위 코드는 앱 내에서 사용자가 언어를 변경할 수 있도록 하는 기본적인 방법을 보여줍니다.
실제 앱에 적용할 때는 사용자의 언어 선택을 저장하고 앱이 다시 시작될 때 이를 적용하는 로직도 추가해야 할 수 있습니다.
SharedPreferences를 사용하여 사용자의 언어 선택을 저장하고
앱이 시작될 때 해당 설정을 불러와 적용하는 방법을 고려해 보세요.