Ssul's Blog

IOS 앱개발 String Catalog로 한국어, 영어 (다국어)동시설정(swiftui) 본문

dev/기능구현

IOS 앱개발 String Catalog로 한국어, 영어 (다국어)동시설정(swiftui)

Ssul 2025. 4. 2. 22:39

2025년 새해 계획 중 하나가, 두달에 하나의 앱을 개발하는 것이었다.

벌써 4월이 시작되었지만, 아직 첫번째 앱. 열심히 분발해서 6개의 앱을 완성해보자!!

애플개발자 계정 본전은 뽑아야지 ㅜㅜ

 

첫번째 앱을 개발하면서, 미국/유럽 등 영어권 시장부터 출시하면 어떨까 생각하게 되었다.

근데 이미 개발을 한참 진행 했더니.... 전부다 한글인 상황.

이거 하나하나 다 영어로 번역해야 하는가...

 

1. 아이폰 앱 중에서 영어와 한국어 두개 이상의 언어를 지원하는 앱들은 어떻게 하는 것일까?

이미지 추가-Add Image

마이페이지-My Page

처럼 결국 무조건 해석해서 두개를 넣는 것은 당연할 것 같은데.... 그런 궁금증을 가지고 검색을 시작했다.

 

우선 결론은 String Catalog와 String File 둘중에 하나를 쓰면 된다.

String File이 원래 전통적인 방식이었지만, String Catalog가 나오면서 legacy가 되었다.

 

나 역시 첫 검색에 걸렸던 String File내용을 습득한 후, 프로젝트에서 추가를 하려고 하였다. 그랫더니

lecacy가 되어 있는 String File

그래서 String Catalog를 사용해보기로 하였다. 사실 더 편하기도 하다.

나처럼 이미 한글로 많이 진행된 프로젝트라면 String Catalog 사용하시길 개인적으로 추천한다.

 

 

2. String Catalog를 사용하여 다국어 지원 앱 만들기

2-1. String Catalog추가

Xcode > 프로젝트 폴더 > 커맨드+N > String Catalog 추가

 

2-2. localization에 한국어 추가(일본어도 추가하려면 하시면 됩니다)

왼쪽상단 프로젝트 클릭 > 가운데 프로젝트 클릭 > Info탭 클릭 > Localizations에서 +눌러서 Korean추가

 

이렇게하고, 생성된 Localizable.xcstrings를 클릭해보면

이렇게 Korean이 추가 되어 있는것을 볼수 있다

 

2-3. Run(cmd+K)하기

빌드를 하는 순간, 내가 사용했던 주요 단어들이 Key값으로 자동 가져온다

예를 들면 Text("홈"), Text("이미지 추가")에서

홈, 이미지 추가가 키값이 되는것

 

2-4. 언어별로 설정해주기

Localizable.xcstrings파일에서 English를 확인해보면

Key값만 있다. 그럼 오른편에 영어로 기록하면 된다

한글에서 영어로 바뀐것을 확인할 수 있다.

 

3. 기타 꿀팁들

3-1. 안불러와지는 값들 불러오기

Text("이미지 추가")의 형태는 빌드시 자동으로 Localizable.xcstrings에 key값으로 들어오지만,

TabButton(
                isSelected: selectedTab == .home,
                title: "홈",
                systemName: selectedTab == .home ? "house.fill" : "house",
                accentColor: accentColor,
                action: { withAnimation(.easeInOut(duration: 0.2)) { selectedTab = .home } }
            )

이런 형태의 title: "홈"은 key값으로 자동으로 안불러온다.

 

이럴경우 String(localized: "홈"),으로 해주면 잘 불러오게 된다

TabButton(
                isSelected: selectedTab == .home,
                title: String(localized: "홈"),
                systemName: selectedTab == .home ? "house.fill" : "house",
                accentColor: accentColor,
                action: { withAnimation(.easeInOut(duration: 0.2)) { selectedTab = .home } }
            )

 

3-2. 이걸 언제 하나하나 다 해석해서 넣는가? AI로 한방에 처리하자

커서로 ios프로젝트 파일을 오픈.

Localizable.xcstrings을 열어보면, 아래와 같이 되어있다.

{
  "sourceLanguage" : "en",
  "strings" : {
    "마이페이지" : {

    },
    "이미지 추가" : {

    },
    "로그아웃" : {

    },
    "홈" : {
      "localizations" : {
        "en" : {
          "stringUnit" : {
            "state" : "translated",
            "value" : "Home"
          }
        },
        "ko" : {
          "stringUnit" : {
            "state" : "needs_review",
            "value" : "홈"
          }
        }
      }
    },
    ....
    ]

현재 홈 키 값만 Home(EN), 홈(KO)로 입력을 했고, 다른 것들은 입력하지 않아서 저렇게 되어 있는 것이다.

그럼 어떻게 하면 되는가? 커서에 명령을 하면 된다.

홈부분 드래그하고, 붙여넣고 명령

수정된 Localizable.xcstrings파일을 저장.

그리고 다시 빌드하면, 나의 앱은 영어버전도, 한글버전도 가능하게 된다.

 

3-3. 변수가 섞여 있을 경우

Text("선택된 카테고리: \(viewModel.selectedCategories.count)개")

아래와 같이 적용하면 된다

 

Text(String(format: String(localized: "선택된 카테고리: %lld개"), viewModel.selectedCategories.count))