paint-brush
Swift 지역화의 진화: 문자열에서 문자열 카탈로그로~에 의해@mniagolov
102 판독값

Swift 지역화의 진화: 문자열에서 문자열 카탈로그로

~에 의해 Maksim Niagolov8m2024/06/12
Read on Terminal Reader

너무 오래; 읽다

Swift는 지역화를 애플리케이션에 쉽게 통합할 수 있는 강력한 도구를 제공합니다. 이 가이드에서는 개발자가 이러한 기능을 완전히 활용할 수 있도록 초기 기술부터 최신 도구까지 Swift 현지화 전환에 대해 설명합니다. 현지화는 사용자 경험을 향상시키고 범위를 확장하며 국제 수준에서 소프트웨어의 성공에 큰 영향을 미칠 수 있습니다.
featured image - Swift 지역화의 진화: 문자열에서 문자열 카탈로그로
Maksim Niagolov HackerNoon profile picture

오늘날 세계는 글로벌 시장으로 변모하고 있으며 다양한 언어와 문화를 지원하는 모바일 애플리케이션의 역량은 선택이 아니라 필수입니다. 현지화는 사용자 경험을 향상시키고 범위를 확장하며 국제 수준에서 소프트웨어의 성공에 큰 영향을 미칠 수 있습니다.


iOS 개발자를 위해 Swift는 현지화를 애플리케이션에 쉽게 통합할 수 있는 강력한 도구를 제공합니다. 이 가이드에서는 개발자가 이러한 기능을 최대한 활용할 수 있도록 초기 기술부터 최신 도구까지 Swift 현지화 전환에 대해 설명합니다.


현지화의 초기 과제

처음에 Swift가 처음 소개되었을 때 Localizable.strings 파일과 NSLocalizedString 함수를 중심으로 구축된 Objective-C의 지역화 인프라를 상속했습니다. 이러한 방식으로 개발자는 지역화된 문자열을 수동으로 편집하고 이를 여러 언어 파일에서 동기화해야 했는데, 이 프로세스는 오류가 발생하기 쉽고 시간이 많이 소요됩니다.

Localizable.strings 의 기본 사항

지역화 가능 파일은 문자열이 "key" = "value" 형식으로 저장되는 간단한 키-값 쌍 파일입니다. 여기서 "key" 는 코드 식별자이고 "value"는 사용자에게 표시되는 지역화된 문자열입니다. 이 파일은 복제되어 지원되는 각 언어로 번역되어야 하며 영어의 경우 'en.lproj' , 독일어의 경우 'de.lproj' 와 같이 적절한 해당 '.lproj' 디렉터리에 넣어야 합니다.

Localizable.strings 항목 의 예 :

 "hello_world_key" = "Hello, World!";


Swift 코드에서 이 문자열은 다음과 같이 검색될 수 있습니다.

 let greeting = NSLocalizedString("hello_world_key", comment: "The default greeting")


NSLocalizedString 함수를 사용하면 Localizable.strings 의 키를 사용하여 지역화된 콘텐츠에 더 쉽게 액세스할 수 있습니다.


이 함수는 키를 가져와 대체 값을 제공하고 번역자에게 설명을 제공합니다. 코멘트를 제공하는 것은 번역가에게 번역의 정확성과 적합성을 향상시킬 수 있는 하위 텍스트를 제공하므로 매우 중요합니다.


예: 하루 중 시간을 기준으로 사용자에게 인사하기:

 func greetingBasedOnTime() -> String { let hour = Calendar.current.component(.hour, from: Date()) let key = hour < 12 ? "good_morning_key" : "good_evening_key" return NSLocalizedString(key, comment: "Greeting based on time of day") }


해당 Localizable.strings 사용하면 다음과 같은 항목이 표시됩니다.

 "good_morning_key" = "Good morning!"; "good_evening_key" = "Good evening!";


Localised와 관련된 몇 가지 과제는 다음과 같습니다. 직면할 수 있는 문자열:
1) 확장성 문제.

문자열의 수가 늘어나면 처리하기가 어려워집니다. 시간이 지남에 따라 여러 .strings 파일을 관리하는 것이 번거로워집니다.


2) 복제.

각 언어에는 별도의 파일이 필요했기 때문에 잠재적인 불일치가 발생하고 문자열을 관리하는 데 중복된 노력이 필요했습니다. 하나의 언어만 지원하면 별 문제가 안 되지만, 여러 언어를 관리해야 하는 경우에는 너무 번거로울 때가 있습니다.


3) 맥락 부족.

그러나 주석은 NSLocalizedString에 추가될 수 있습니다. 주석이 번역자가 문맥을 완전히 이해하는 데 항상 도움이 되지는 않더라도 번역이 부정확해질 수 있습니다. 개발자는 종종 너무 게으른 나머지 제대로 작성하지 못합니다.

복수화를 위해 stringsdict 로 전환

stringsdict 파일의 도입으로 Swift 현지화에 상당한 개선이 이루어졌으며 주로 복수화 문제를 해결했습니다. 주된 원인은 복수의 언어가 다르게 형성된다는 점이며, 영어에는 효과적일 수 있는 것이 러시아어나 아랍어와 같은 다른 언어에는 효과적이지 않을 수도 있다는 것입니다.


stringsdict 가 도입되기 전에는 관리하기가 매우 어려웠습니다. stringsdict 사용하면 프로그래머는 "1개", "몇 개", "다수" 및 "기타"와 같은 범주에 대한 규칙을 결정할 수 있으며, 이는 언어 간 번역에서 동일한 수준의 정확성을 보장합니다.


stringsdict 파일 이해

Stringsdict 파일은 숫자 값에 따라 지역화된 문자열을 생성하는 데 사용되는 XML 속성 목록입니다. 언어마다 복수형 처리에 대한 규칙이 다르기 때문에 이 기능은 복수형을 올바르게 처리하기 위한 것입니다.

stringsdict 파일 의 구조 :

stringsdict 파일 샘플에는 복수형으로 변환해야 하는 모든 문자열 항목이 포함되어 있습니다. 각 항목은 사용자가 서로 다른 복수 범주를 나타내는 하나 이상의 하위 키를 정의하는 키와 사전으로 구성됩니다.


 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>numberOfSongs</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@songs@</string> <key>songs</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>One song</string> <key>other</key> <string>%d songs</string> </dict> </dict> </dict> </plist>


복수화를 위해 stringsdict 사용하는 예

사용자가 읽은 기사 수를 표시하는 애플리케이션이 있다고 가정해 보겠습니다. 화면에는 읽은 기사 수의 올바른 복수형을 나타내는 메시지가 표시되어야 합니다.


영어 및 폴란드어용 Localizable.stringsdict :

 <!-- English --> <key>article_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@articles@</string> <key>articles</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>One article</string> <key>other</key> <string>%d articles</string> </dict> </dict> <!-- Polish --> <key>article_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@articles@</string> <key>articles</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>Jeden artykuł</string> <key>few</key> <string>%d artykuły</string> <key>many</key> <string>%d artykułów</string> <key>other</key> <string>%d artykułu</string> </dict> </dict>


여기에서 폴란드어 현지화는 다양한 숫자 컨텍스트를 올바르게 표현하기 위해 여러 복수 범주(1개, 소수, 다수, 기타)를 사용해야 하는 일부 언어에서 복수형의 복잡성을 명확하게 보여줍니다.


신속한 구현:

NSLocalizedString 호출할 때 파일에 정의된 키를 참조하기만 하면 stringsdict 항목을 코드에서 활용할 수 있습니다.

 let count = getArticleCount() let formatString = NSLocalizedString("article_count", comment: "Count of articles read by a user") let message = String(format: formatString, count)

이 접근 방식을 사용하면 지원되는 언어의 문법과 일치하도록 출력 문자열을 적응적으로 수정할 수 있습니다. 이 모든 것이 단 한 줄의 코드로 이루어집니다.


stringsdict 의 장점

  • 효율성: 이는 현지화 파일을 관리하고 수정하는 데 소요되는 시간과 노력을 절약하는 데 도움이 됩니다.
  • 정확성: 개발 환경 내에서 더 많은 컨텍스트가 직접 제공되는 경우 단어 번역의 정확성을 높이는 데 도움이 됩니다.
  • 유연성: 현지화된 콘텐츠에 대한 실시간 및 동적 조정을 지원합니다.

문자열 카탈로그를 사용한 최신 지역화 기술

Xcode 15에 도입된 새로운 기능 중 하나는 개발자가 iOS 및 macOS 애플리케이션을 이전보다 훨씬 쉽게 지역화할 수 있도록 돕는 문자열 카탈로그입니다. Localizable.stringsstringsdict 문자열을 저장하고 구성하는 데 유용한 리소스였지만 문자열 카탈로그는 지역화된 문자열을 관리하는 데 훨씬 더 응집력이 있고 UI 친화적입니다.


문자열 카탈로그에서 강조해야 할 주요 측면은 다음과 같습니다.

  • 시각적 편집기: 기존의 간단한 일반 텍스트 파일과 달리 문자열 카탈로그는 Xcode의 시각적 편집기를 사용하여 편집되므로 현지화된 문자열을 추가, 수정 또는 삭제하기가 더 쉽습니다.


  • 인라인 문서화: 개발자는 문자열 카탈로그 내에서 설명과 컨텍스트를 직접 제공할 수 있으므로 번역의 명확성과 정확성이 크게 향상됩니다.


  • 동적 지역화: Strings Catalog는 동적 지역화를 지원하므로 개발자는 애플리케이션을 종료하지 않고도 지역화된 문자열을 변경할 수 있으며 이는 테스트 및 반복 개발에 이상적입니다.


  • 고급 복수화 및 적응: 또한 UI 요소 및 장치 유형에 따라 변형이 있는 복수형 및 텍스트에 대한 보다 정밀한 제어를 제공하여 stringsdict 의 일부 단점을 극복합니다.


신속한 구현:

메시징 애플리케이션에서 사용자가 읽지 않은 메시지 수를 사용자에게 알려야 한다고 가정해 보겠습니다. 알림은 수신된 메시지 수를 표시하여 동적이어야 하며 콘텐츠 유형에 따라 조정되어야 합니다.


단계별 설정:

  1. 문자열 카탈로그 생성: 프로젝트에 새 문자열 카탈로그를 추가합니다. 그러면 .stringcatalog 파일이 생성됩니다.


  2. 항목 추가: 편집기를 사용하여 현지화해야 하는 각 문자열에 대한 항목을 추가합니다. 그런 다음 각 항목에 대해 키, 기본값, 복수형 규칙 또는 적응형 매개변수를 지정합니다.


  3. 콘텐츠 현지화: 복수형에 대한 다양한 형식 지정, 장치 유형에 대한 적응 등을 지정하여 지원되는 각 언어에 대한 번역을 제공합니다.


  4. 코드로 구현: Swift 코드에서 지역화된 식별자를 사용하여 이러한 문자열을 참조하세요.


 <!-- String Catalog Entry --> <key>unread_messages_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@messages@</string> <key>messages</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>You have one unread message.</string> <key>other</key> <string>You have %d unread messages.</string> </dict> </dict>


다음과 같이 이 문자열에 액세스할 수 있습니다.

 let unreadCount = fetchUnreadMessagesCount() let message = NSLocalizedString("unread_messages_count", value: "You have \(unreadCount) unread messages.", comment: "Notify about unread messages") print(message)



문자열 카탈로그의 이점

  • 효율성: 현지화 파일 관리에 필요한 시간과 노력을 절약합니다.


  • 정확성: 개발 환경에서 더욱 직접적인 추가 컨텍스트를 제공하여 정확성을 향상시킵니다.


  • 유연성: 현지화된 콘텐츠에 대한 실시간 및 동적 업데이트를 지원하며 이는 빠른 개발 주기에 특히 유용합니다.

도전과제

문자열 카탈로그는 상당한 개선을 제공하지만 동시에 과제도 따릅니다. 첫째, 학습 곡선입니다. 새로운 시스템이나 무언가를 만드는 방법에 익숙해지는 데는 시간이 걸립니다. 개발자가 직면할 수 있는 또 다른 잠재적인 문제는 기존 지역화 파일이 이미 생성되어 사용 중인 기존 프로젝트에 문자열 카탈로그를 통합하는 데 필요한 시간 및 조정과 관련이 있습니다.

결론

Swift의 문자열 카탈로그는 강력할 뿐만 아니라 유연하고 사용자 친화적인 도구를 제공하는 현지화 기술의 최신 추가 개선 사항입니다. 개발 수명주기의 일부로 기술을 추가함으로써 팀은 현지화 프로세스의 효율성과 품질을 대폭 향상시킬 수 있습니다. 따라서 더 나은 글로벌 제품이 만들어질 것입니다.


저는 Swift 현지화 도구의 최신 개발 내용으로 이 기사를 지속적으로 업데이트할 것입니다. 제가 빠뜨린 내용이 있거나 제가 말한 내용에 대해 생각이 있으신 경우 아래 댓글 상자에서 공유하실 수 있습니다. 더 흥미로운 정보와 최신 소식을 보려면 저를 팔로우하세요!