๐ 2019.11.15 (๊ธ)
WWDC 2019 | Session : 403 | Category : Localization
๐ Creating Great Localized Experiences with Xcode 11 - WWDC 2019 - Videos - Apple Developer
Setting์์ ์ฑ ๋ง๋ค ์ธ์ด ์ค์ ์ ํ ์ ์๋ค.
-
์ฝ๋๋ก ์ธ์ด๋ฅผ ๋ฐ๊พธ๋๊ฑด ์ง์ํ์ง ์๋๋ค.
-
์ฑ์์ language option์ ์ถ๊ฐ ํ๊ณ ์ถ์ผ๋ฉด Setting์ Launch
UIApplication.shared.open(URL(string: UIApplication.openSettingURLString)!)
-
Setting์ ํตํด language๋ฅผ ๋ฐ๊พธ๋ฉด ์ฑ์ relaunch๋๋ค.
-
AppDelegate
์์ ์ํ ๊ฐ์ ๋ณต๊ตฌ ํ ์ ์๋ค.application(:shouldSaveApplicationState:) application(:shouldRestoreApplicationState:)
launguage๊ฐ ๋๊น ์์ด ์ ํ ๋ ์ ์๋๋ก controller์์ restorationIdentifier
์ ์ธํ
ํด๋ผ.
iOS13์์ Scene Delegate ์์ ์ํ๊ฐ์ restoration ํ ์ ์๋ API๊ฐ ์ถ๊ฐ ๋์๋ค.
stateRestorationActivity(for scene:)
scene state๋ฅผ encode ํด์ฃผ๋ NSUserActivity
๊ฐ์ฒด๋ฅผ returnํ๋ค.
-
์ฑ ๋ด์ ๋ชจ๋ ์ฝํ ์ธ ๋ ํ๋์ ์ธ์ด๋ก ์ผ์นํด์ผ ํ๋ค.
-
custom ์ด๋ server-side resource ๋ก๋ฉ์ ์ํด
Locale
์ด๋Bundle
API ๋ฅผ ์ฌ์ฉํด๋ผ.Local.preferredLanguages Bundle.main.preferredLocalizations Bundle.preferredLocalizations(from: availableLanguages)
Locale APIs for Language Preference
Setting์ ์ ์ ์ ์ธ์ด์ ์ง์ญ ์ค์ ์ ๋ถ๋ฌ์จ๋ค.
Locale.preferredLanguages
๋ฅผ ํ๋ฉด user preference ์ธ์ด ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ ธ์จ๋ค.
(ex. ["pa-IN", "en-IN", "hi-IN", ...]
Bundle APIs for Language Matching
ํ์ฌ ์คํ ๋๊ณ ์๋ ์ฑ์ ์ธ์ด๋ฅผ ๊ฐ์ ธ์จ๋ค.
Bundle.main.preferredLocalizations.first
์ธ๋ถ language ์ค์ ์ด ์๋ค๋ฉด, ๊ทธ ์ค์์ ์ธํ ์ ํด์ค๋ค.
let availableLanguages = Server.requestAvailableLanguages()
Bundle.preferredLocalizations(from: availableLanguages).first
localization์ ์ํ Interface Builder export๊ฐ 15๋ฐฐ ๋นจ๋ผ์ก๋ค.
์ฝ๋์์ ํ๋์ NSLocalizedString()
๋ฅผ ํธ์ถ ํ ์ ์๋ค
Deivce-specific string์ .stringdict
๋ก ์ ์๋์ด ์๋ค.
์ฌ๋ฌ๊ฐ์ ๋ค์ํ width rule๋ก ์กฐํฉ ๋ ์ ์๋ค.
Image sets, Watch complications, Apple TV image stacks, Sprite atlases, Game Center dashboards and leaderboards, Symbol sets
โ ๋ค Localization ๊ฐ๋ฅ ํด์ก๋ค!
SF system symbols, Custom symbols Localized ๊ฐ๋ฅ!
Clipping, Truncation, Layout overlapping, Right-to-Left languages
์ฌ๋ฌ ๊ฐ์ ์ธ์ด๋ฅผ ์ง์ ํ๋ค๋ฉด, ํ ์คํฐ๊ฐ ์ธ์ด ๋ณ๋ก, ๋๋ฐ์ด์ค ๋ณ๋ก ๋๋ฌด ๋ง์ ์๋๋ฆฌ์ค์ ๋ํ ํ ์คํธ๊ฐ ํ์ํ๋ค. ๊ทธ๋์ QA์์ ์๋์ผ๋ก ํ๋ ์์ ์ ์ํด ํ๋ก์ ํธ์ ํ ์คํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๊ต์ฅํ ์ค์ํ๋ค.
Xcode11์์๋ ์ด๋ฐ ํ ์คํธ๋ฅผ XCTESTPLAN๋ฅผ ํตํด ์ฝ๊ฒ ์๋ํ ํ ์ ์๋ค.
Multiple tests, Multiple configurations
Accessibility Identifier ์ ๊ณ ์ ํ๊ณ , ์์ ๋๊ณ , ์ด๋ค language์์๋ ํ ์คํธ ํ ์ ์๋ค๊ณ ๋ณด์ฅ ํ ์ ์๋ค.
myCell.accessibilityIdentifier = "myCell"
app.tabs.cells["myCell"].tap()
Multiple Configuration ์์ฑ ํ ์ ์๊ณ , ๊ฐ๊ฐ์ configuration ๋ง๋ค ๋ค๋ฅธ language๊ณผ region์ ์ค์ ํ ์ ์๋ค.
UI Testing ์น์ ์ ์ค์ ์ผ๋ก ์คํฌ๋ฆฐ์ท์ ์ง์ ํ ์ ์๋ค.
์คํด ๋งค๋์ ๋ฅผ ํตํด ์ค์ ํ ์๋ ์๋ค.
Xcode Localization Catalog
Xcode Localization Catalog๋ String๊ณผ String์ด ์๋ ๊ฒ๋ค ๋ชจ๋ ํ ๊ณณ์์ Localizing ์ฒ๋ฆฌ ํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ์์ด๋ค.
๐Screenshot์ Xcode Localization Catalog์ ์๋์ผ๋ก ํฌํจ๋ ์ ์๊ฒ ํ์๋ค.
Localization export ์Include screenshots
์ฒดํฌ ํ๋ฉด ๋จ