[Android] String Resource 유지하며 텍스트에 스타일 주기 (feat. 다국어 지원)

김방토·2025년 9월 29일
0

Android

목록 보기
10/10

회사 제품의 수출 계획이 세워지고, 당연하게도 앱의 다국어 언어 지원이 결정되었다.
그냥 단순히 손이 좀 많이 가는 작업이라고 생각했는데, 생각지도 못한 부분에서 하나씩 문제가 생겼다.

문제가 뭐였냐면

현재 앱에는 이런 디자인의 텍스트가 존재한다.
compose로 구성되어 있어 당연히 buildAnnotatedString으로 처리해놨는데, 문제는 텍스트 구성을 [정확한 분석을 위해 해당 부위를 / 3회 / 측정합니다.] 이런식으로 나누어 놓았다는 것이다.
공식문서와 같이 append를 사용해서 색상마다 끊어 놓았는데, 이걸 String Resource로 처리하려고 하니 번역이 애매해졌다.
때문에 이 문장을 끊지 않고 통째로 사용하며 강조할 부분에만 스타일을 따로 줘야 했다.

어떻게 해결했냐면

    <string name="message">정확한 분석을 위해 해당 부위를 3회 측정합니다.</string>
    <string name="message_highlighted_word">3회</string>

전체 문장과 하이라이팅 할 부분의 단어를 분리해서 각각의 리소스로 만들고!

addStyle

addStyle을 활용했다.
start와 end 인덱스를 지정해 startIndex~endIndex까지 스타일을 줄 수 있는 방법!

val highlightedWord = stringResource(R.string.message_highlighted_word)
val fullText = stringResource(R.string.message)

val highlightStart = fullText.indexOf(highlightedWord)
val highlightEnd = highlightStart + highlightedWord.length

전체 문장에서 하이라이팅 처리 할 단어의 시작 인덱스와 끝 인덱스를 찾아서

Text(
  buildAnnotatedString {
   withStyle(
    style = SpanStyle(
    fontSize = 26.sp
    )
   ) {
   append(fullText)
   
   addStyle(
     style = SpanStyle(
     color = Color.Red
     ),
     start = highlightStart,
     end = highlightEnd
   )
  }
 }
)

append로 전체 문장을 넣고, addStyle을 이용해서 해당 인덱스에만 빨간색을 주는 방식으로 처리했다!

다국어화 은근 힘드네!

다국어화는 현재진행중~_~
의외로 신경써야할게 많아서, 언어지원 되는 앱들 번역 좀 이상해도 속으로 뭐라고 하지 않기로 혼자서 반성중이다...

profile
🍅 준비된 안드로이드 개발자 📱

0개의 댓글