티스토리 뷰

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를 사용하여 사용자의 언어 선택을 저장하고

앱이 시작될 때 해당 설정을 불러와 적용하는 방법을 고려해 보세요.