서론
제가 개발 중인 앱에는 다국어를 지원합니다. 총 영어(en), 일본어(ja), 터키어(tr), 스페인어(es) 총 4개의 다국어를 지원하고 있어요.
그래서 Localizable.strings로 다국어를 키-문자열 쌍으로 관리하고 있습니다.
아래에서 설명할 이유들로 Lokalise 서비스 도입을 결정했고, 이 과정에서 도입을 위한 작업을 효율적으로 개선한 경험을 공유드리려고 합니다.
기존의 다국어 관리 문제
기존 다국어 적용은 기획자가 각 클라이언트 개발자(iOS, Android, Web)에게 문자열을 전달해 줍니다.
문자열을 받으면 각자의 방식으로 키를 정의하고 관리했죠. 이로 인해 기입 실수가 발생하면 클라이언트마다 다국어가 다른 경우가 생겼습니다. (특히 일본어는 한자라서 실수가 발생해도 알아차리기 어렵더라고요;;)
게다가 새로운 언어를 추가하는 과정이 상당히 복잡했습니다.
기획자가 문자열을 주면 개발자는 기존에 코드르 분석하여 올바른 키를 찾고, 그 키에 새로운 언어 문자열을 추가해야했어요. (관리되지 않은 중복 문자열도 많았어서 문자열 비교로는 해결할 수 없었습니다 😇)
이 과정의 심각성이 Lokalise 서비스 도입에 결정적이었습니다.
Lokalise 도입 장점
Lokalise 서비스를 도입하면 다국어 관리가 편해집니다.
기획자가 Lokalise에 다국어를 키-문자열 쌍으로 직접 등록하고 PR을 생성하여 변경사항을 제안할 수 있습니다.
PR 생성 시에는 각 클라이언트의 다국어 관리 방식에 맞는 파일이 자동으로 생성되는데, iOS의 경우 Localizable.strings 파일이 생성됩니다.
개발자는 PR을 보고 수정 사항을 쉽게 파악할 수 있고, 문자열 수정이나 언어 추가 건이라면 코드 작업조차 필요 없습니다. 이로 인해 새로운 언어를 추가할 때 필요한 작업 시간이 크게 줄어듭니다. 또한 모든 클라이언트에서 동일하게 사용되는 문자열은 키도 동일하게 유지되어 장기적인 유지보수에 매우 유리합니다.
Lokalise 서비스 도입을 통해 다국어 관리 프로세스가 간소화되고, 일관성 있는 키 사용으로 유지보수 효율도 높아집니다. 특히 새로운 언어를 추가할 때 큰 도움이 되어 개발 공수를 획기적으로 줄일 수 있습니다.
Lokalise 도입을 위한 준비
Lokalise 도입을 위해서는 기획자가 Lokalise에 등록할 다국어가 정리되어야 합니다..
이를 위해 개발자가 문자열을 하나하나 정리해서 전달하면 기획자가 키를 생성하는 방식으로 적용하기로 결정했습니다. 위에서 말했듯이 각 클라이언트마다 키가 달랐기 때문이죠... 😭
추후 Lokalise 적용을 쉽게 하기 위해 화면별로 문자열을 정리하기로 협의했어요!
레거시 문자열이나 중복되는 문자열도 많았기 때문에 화면별로 분류하는건 수작업으로 진행해야 했습니다.
화면별로 사용하는 키를 정리해서 기록해두었어요.
이제 이 키에 맞는 영어, 일본어, 터키어, 스페인어 문자열을 엑셀 시트에 하나하나 기입하면 됩니다.
쉘 스크립트를 이용한 문자열 추출 효율 극대화!
이제 이 키에 맞는 영어, 일본어, 터키어, 스페인어 문자열을 엑셀 시트에 하나하나 기입하면 됩니다.
정말 막막한 작업이었습니다.
키의 개수가 약 800개였으니 3200번의 복사, 붙여넣기를 해야했습니다.
3200번 복사 붙여넣기를 하면 제 눈과 손목과 정신이 나가버릴게 뻔했기 때문에 효율적인 방법을 고민해야 했어요. (그리고 이 방법은 다른 클라이언트도 사용할 수 있으면 좋겠죠? 팀원의 눈, 손목, 정신도 소중하니까요 😅)
처음 시도한건 GPT였습니다.
4개의 Localizable.strings와 키 목록을 입력하면 다국어 문자열을 뽑아주겠구나! 생각했습니다.
영어는 생각대로 잘 추출해주었습니다. 하지만 일본어, 터키어, 스페인어는 영어를 번역한 문자열을 전달하는 경우가 있었습니다. 저는 반드시 Localizable.strings에 있는 문자열이 필요했기 때문에 GPT를 포기했습니다..
나눠서 명령도 입력해보고... 프롬프트도 n시간 수정해봤지만 중간중간에 잘못된 문자열을 주더라고요....
GPT를 포기하고 시도한건 쉘 스크립트였습니다. (조언해준 옆자리 팀원께 아주 감사했습니다.)
구해야하는 키가 있고 명확한 목표 파일이 있으니 쉘 스크립트로 문자열을 추출할 수 있었습니다.
#!/bin/bash
# File to read
file="./keys.txt"
# Read the file line by line
while IFS= read -r line
do
test=`echo $line | awk -F " " '{print $NF}'`
en=`cat Localizable-en.strings| grep $test | awk -F "=" '{print $2}'`
ja=`cat Localizable-ja.strings| grep $test | awk -F "=" '{print $2}'`
tr=`cat Localizable-tr.strings| grep $test | awk -F "=" '{print $2}'`
es=`cat Localizable-es.strings| grep $test | awk -F "=" '{print $2}'`
echo "$en;$ja;$tr;$es"
done < "$file"
대략 이런 느낌입니다.
각 언어의 Localizable 파일과 출력할 키들이 적힌 keys.txt을 하나의 폴더에 두고, 스크립트를 실행하면
영어;일본어;터키어;스페인어
이처럼 하나의 문자열로 출력을 해줍니다.
+)
쉘 스크립트 뿐만 아니라 파이썬으로도 가능했겠구나 싶네요 ㅎㅎ;
엑셀 매크로로 기입 효율 극대화!
영어, 일본어, 터키어, 스페인어를 추출했다면 이를 엑셀 시트에 기입해야 합니다.
하나하나 복붙한다면 쉘 스크립트롤 문자열 추출 효율을 올린 이유가 없습니다!
위에서 각 문자열을 세미콜론(;)으로 연결한 이유가 있겠죠? ㅎㅎ
스프레드 시트 기준으로 확장 프로그램 - 매크로 - 매크로 기록을 이용해서 원하는 작업을 단축어로 등록할 수 있습니다.
그리고 스프레드 시트에서는 문자열을 열에 기입할 때 특정 문자를 기준으로 분리할 수 있습니다.
이 두 가지 기능을 사용하면 단축어를 딸깍만 하면 "영어;일본어;터키어;스페인어"를 4개의 열에 분리해서 기입할 수 있습니다 🔥
심지어 드래그하면 한 번에 단축어 적용이 가능해서 시트당 1번의 작업만 진행하면 됩니다 ㅎㅎ
마무리
위 두 가지 효율 극대화 작업으로 저는 3200번의 단순 반복 작업을 8번의 딸깍으로 완료할 수 있었습니다. (시트가 8개였어요.)
평소에는 자동화할 시간에 직접 빠르게 끝내지라는 생각을 꽤 많이 했었는데요.
이번에는 자동화의 힘을 정말 크게 느꼈습니다.
그리고 위 방법은 안드로이드도 적용이 가능하잖아요? 이게 바로 혁신이지라는 생각이 들 정도였답니다 ㅋㅋㅎㅎ
정말 고민이 많았고 막막했던 작업을 효율적으로 완료하니 정말 뿌듯했습니다.
평소 코드를 작성할 땐 효율을 많이 생각나는데 이런 작업은 좀 돌아가는 경향이 있었는데요.
앞으로는 보다 적극적으로 자동화와 AI를 활용해야겠습니다. (바로 Claude 유료 결제 해버리기 ㅎ)
감사합니다.
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.