Jetpack Compose 사용 중 Locale 설정

huihun·2023년 10월 27일

UniA 프로젝트

  • 프로젝트 중 과제에 대한 Task를 CRUD를 하는 창이 필요했고 해당 창에서 년, 월, 일을 설정해야 하는 요구사항이 발생
  • 해당 프로젝트는 외국인 대상으로 기획된 앱이어서 기본 국가 설정이 영어로 나와야하는 상황

DatePicker 상황 인식

  • 해당 사진처럼 headline이 Locale 설정에 픽스된 상황이었습니다.
  • headline을 composable을 이용해서 커스텀할 수 있지만 Locale 설정을 통해 안에 들어간 모든 언어를 영어로 바꾸려고 했습니다.

DatePicker

  • Material3에 포함된 Composable으로 캘린더 형식이나 Input 창을 통해서 날짜를 선택할 수 있는 Screen
  • 구현체 안에 따로 format에 대한 locale 설정을 하는 구문이 없는 것을 통해 dateFormatter 또는 내부 Container에 존재할 것으로 생각되어 찾아보았습니다.

DatePickerHeadline

  • 결과적으로 defaultLocale 설정을 통해서 format의 언어 설정을 한다는 것을 확인할 수 있었습니다.

defaultLocale

  • 해당 구현체에서 LocalConfiguration을 변경해야 locale을 확정할 수 있는 것을 확인하였습니다.
  • LocalConfiguration을 수정하기 위해 MainAcitivity에서 context를 바꾸기로 했습니다.

override fun attachBaseContext(newBase: Context?) {
        super.attachBaseContext(
            newBase?.let {
                it.createConfigurationContext(
                    it.resources.configuration.apply {
                        setLocale(Locale.ENGLISH)
                    }
                )
            } ?: newBase
        )
    }
  • MainActivity에서 attachBaseContext를 override해주고 createConfigurationContext를 이용하여 Locale 설정을 픽스하여 수정하였습니다

0개의 댓글