Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Localization(국제화, 현지화) #81

Closed
MoSonLee opened this issue Sep 6, 2022 · 0 comments
Closed

Localization(국제화, 현지화) #81

MoSonLee opened this issue Sep 6, 2022 · 0 comments

Comments

@MoSonLee
Copy link
Owner

MoSonLee commented Sep 6, 2022

Localization

  • 하드웨어, 소프트웨어 등의 제품을 언어, 문화권이 다른 환경에서 사용할 수 있도록 지원하는 서비스
  • 이를 지원할 경우 일반적으로 사용자가 선택한 기기의 기본 언어 따라 국제화가 이러우짐
    • 추가 기능 구현을 통해, 사용자가 선택한 기기의 기본 언어와 상관 없이 앱에서 사용할 언어를 선택 할 수 있음
    • iOS 13 이상부터 사용자가 기기의 기본 언어와 관계 없이 앱에서 선호하는 언어 선택이 가능해 다국어 사용자가 앱에서 쉽게 언어 간 전환이 가능함
    • iOS12 전엔 시스템 전체 언어를 변경하는 것만 가능
    • 시간대, 숫자, 화폐 단위의 표현 차이, 선호 레이아웃, 선호 프로모션 등에서 차이가 발생 가능
    • 단지 언어 뿐만 아니라 문화/환경적 측면도 고려할 필요가 있음

Apple의 국제화 시스템

  • Apple API를 활용해 날짜, 길이, 무게, 가격 및 통화 기호와 같이 사용자에게 표시되거나 동적으로 생성되는 값을 모든 지역에 올바르게 표현할 수 있게 구현
  • 앱에서 사용되는 언어
    • Localization.strings를 작성해 각 나라와 지역에 맞는 고정 텍스트를 제공할 수 있음
    • InfoPlist.strings를 작성해 각 나라와 지역에 맞는 권한 문구 출력
    • plural.stringsdict를 작성해 각 나라와 지역에 맞는 표현 단위 등을 출력 가능
  • 앱스토어의 메타 데이터
    • 앱의 현지화와 상관없이 앱스토어 제품 페이지의 메타데이터 내용을 현지화시킬 수 있음
      • 단 앱의 기본 언어 설정의 경우 프로젝트에서 메세지 설정 파일 대응이 된 국가중에 선택이 가능함
    • 앱의 기본 언어 설정
      • 앱 설치 후 최초 앱 실행시 기본적으로 설정 될 언어값
      • 예를 들어 한국어와 영어를 대응한 경우 앱의 기본 언어를 영어 또는 한국어로만 설정 가능

국제화

  • 앱이 특정 국가나 지역에 종속되지 않도록 호환성을 통해 앱을 설계하는 과정
  • 언어 번역뿐만 아니라 국가별 쓰기 방향의 차이(LTR, RTL), 숫자, 화폐, 날짜 등의 표기 방법, 시간대를 고려해 앱을 설계하는 과정
  • 예를 들어 사용자가 여행을 하면 국가에 따라 표준 시간대, 날짜가 달라짐 -> 이런 변화를 감지하고 타임 스탬프를 처리할 수 있는 것
  • 이런 설계와 코드를 통해 앱이 localized(현지화) 될 수 있음
  • l18N
    • Internationalization의 첫글자와 마지막 글자, i 와 n 사이에 알파벳이 18개가 있다는 의미

현지화

  • L10N
  • Localization의 첫글자와 마지막 글자. l과 n 사이에 알파뱃이 10개가 있다는 뜻
  • 그 국가와 지역에 맞게 앱을 번역하고 리소스 작업을 하는 등 적합하게 구현하는 과정
  • 예를 들어 날짜와 시간을 표현할 때 그 나라(한국, 대만, 미국, 유럽 등)에 맞는 형식으로 표현하는 것

Localization.strings


- Project -> Localizations -> +를 통해 지원할 언어를 선택할 수 있음

image


  • code로 추가 설정
    • Localizable.strings파일 생성

image


image


  • default로 이름이 Localizable임
  • 생성한 Localizable.strings의 인스펙터 영역에서 Localize 버튼을 통해 기본 다국어를 생성 할 수 있음

image


image


  • 이런 식의 양식을 통해 생성
  • 세미클론을 잊지말고 작성해야함
  • 매번 이름을 작성하는건 너무 레어한 코드이므로 extension을 통해 개선 가능함

extension String {
    var localized: String {
        return NSLocalizedString(self, comment: "")
    }
    
    func localized(with: String) -> String {
        return String(format: self.localized, with)
    }
    
    func localized(number: Int) -> String {
        return String(format: self.localized, number)
    }
}
  • 앱 이름 or 하드웨어 or 개인정보 보호 권한 문구의 경우 Localizable.strings 파일로 지원이 불가능함
  • Apple API에 의해 정의된 Key를 통해 구현
    • Info -> Open as Source Code를 통해 확인이 가능함

image


<?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>CFBundleDisplayName</key>
	<string>앱 아이콘 이름</string>
	<key>NSLocationWhenInUseUsageDescription</key>
	<string>권한에 대한 설명</string>
	<key>UIApplicationSceneManifest</key>
	<dict>
		<key>UIApplicationSupportsMultipleScenes</key>
		<false/>
		<key>UISceneConfigurations</key>
		<dict>
			<key>UIWindowSceneSessionRoleApplication</key>
			<array>
				<dict>
					<key>UISceneConfigurationName</key>
					<string>Default Configuration</string>
					<key>UISceneDelegateClassName</key>
					<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
					<key>UISceneStoryboardFile</key>
					<string>Main</string>
				</dict>
			</array>
		</dict>
	</dict>
</dict>
</plist>
  • source code를 열면 위와 같이 작성된 걸 볼 수 있음

DebugLocalizable

  • Scheme 설정
    • Xcode > Product > Scheme > Edit Scheme

image


  • 여기서 설정이 가능함
@MoSonLee MoSonLee closed this as completed Sep 6, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant