[kotlin][오류해결] Translation Editor 내용을 다이어로그에서 사용하려면?

Boknami·2023년 9월 4일
0

오류해결

목록 보기
2/4

R.string으로 저장해둔 text들이 번역이 안된채로 나오는 경우가 발생했다.

🤷‍♂️ 왜 사용했나?

프로젝트가 다국어를 지원하기 때문에 여러 액티비티에서 번역 텍스트가 필요했다.
UI자체가 그렇게 많이 필요하지 않았기 때문에 Translation Editor에 수작업을 통해 번역을 전부 진행했고 사실 파파고에서 해석한 정도면 어느 정도 괜찮은 퀄리티가 나오기 때문에 이렇게 한 이유도 있다.

다이어로그에서는 사용이 안돼?

 if(userId == "" || userPw == ""){
                runOnUiThread {
                val alertDialog = AlertDialog.Builder(this@signInActivity)
                .setTitle(R.string.dialog_blank)
                .setMessage(R.string.dialog_blank_txt)
                .setPositiveButton("확인") { dialog, _ -> dialog.dismiss() }
                        .create()
                    alertDialog.show()
                }
            }

R.string을 통해서 작성한 값을 가져오니 제대로 적용이 안되었다..

번역을 적용하는 로케일에 문제가 있었나 싶은 생각이 들었다.
나는 모든 액티비티들이 베이스 액티비티를 상속 받게 만들고, 베이스 액티비티에서는 저장해둔 로케일을 사용해서 해당 액티비티는 로케일에 따른 Translation Editor를 적용했는데 다이어로그에서는 이게 제대로 적용이 안되는건가 싶었다..

해결

R.string으로 바로 가져오는 게 아니고 변수에다 getString을 이용해서 가져오면 제대로 값이 가져와졌다!!

아마 액티비티가 onCreate될 때 로케일이 적용되어 해당 UI는 전부 처리가 되지만, 다이어로그는 onClick안에 있고 새로 띄워지는 UI니까 안되는 것 같았다.

이를 해결하기 위해서는 onCreate에서 로케일 적용이 되면서 만들어둔 변수에다 저장을 미리 해두고 다이어로그를 사용할 때 변수 값을 이용해서 텍스트를 적용하는 형식으로 하니 잘 나왔다!

//값 가져오기!
val title = getString(R.string.dialog_blank)
val message = getString(R.string.dialog_blank_txt)


        //로그인 처리 로직 구현하기
        binding.btnSignin.setOnClickListener{
            val userId= binding.inputId.text.toString()
            val userPw= binding.inputPw.text.toString()

            //null체크
            if(userId == "" || userPw == ""){
                runOnUiThread {
                    val alertDialog = AlertDialog.Builder(this@signInActivity)
                        .setTitle(R.string.dialog_blank)
                        .setMessage(R.string.dialog_blank_txt)
                        .setPositiveButton("확인") { dialog, _ -> dialog.dismiss() }
                        .create()
                    alertDialog.show()
                }
            }
            else {
                loginUser(userId,userPw)
            }
        }

적용된 화면

0개의 댓글