•localizing with xcode 9 - apple developer•localizing with xcode 9 ... • prepare your app for...

129
#WWDC17 © 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. Sara Radi, Software Engineer Aya Siblini, Software Engineer Chris Hanson, Software Engineer Localizing with Xcode 9 Session 401 Developer Tools

Upload: others

Post on 26-May-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

#WWDC17

© 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

Sara Radi, Software Engineer Aya Siblini, Software Engineer Chris Hanson, Software Engineer

•Localizing with Xcode 9 • Session 401

Developer Tools

Page 2: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 3: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 4: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 5: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 6: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 7: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Agenda

Page 8: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Agenda

•Internationalization

Page 9: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Agenda

•Internationalization•Xcode Localization Workflow

Page 10: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Agenda

•Internationalization•Xcode Localization Workflow•Testing

Page 11: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Sara Radi, Software Engineer

•Internationalization

Page 12: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 13: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 14: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 15: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 16: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

•Strings Management •Formatting •User Interface

Page 17: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Strings Management

Page 18: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Strings Management

Prepare your strings for translation

Page 19: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Strings Management

Prepare your strings for translation

Use NSLocalizedString to load strings in code

Page 20: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Strings Management

Prepare your strings for translation

Use NSLocalizedString to load strings in code

Use localizedStringWithFormat to get a localized formatted string

Page 21: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

// Set a label's text

label.text = "Population"

// Set a label's text to a localized string

label.text = NSLocalizedString("Population", comment: "Label preceding the population value")

// Load localized string from a specific table

label.text = NSLocalizedString("Population", tableName: "Localizable", bundle: .main, value: nil, comment: "Label preceding the population value")

// Create a formatted string

let format = NSLocalizedString("%d popular languages", comment: "Number of popular languages")

label.text = String.localizedStringWithFormat(format, popularLanguages.count)

Page 22: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

// Set a label's text

label.text = "Population"

// Set a label's text to a localized string

label.text = NSLocalizedString("Population", comment: "Label preceding the population value")

// Load localized string from a specific table

label.text = NSLocalizedString("Population", tableName: "Localizable", bundle: .main, value: nil, comment: "Label preceding the population value")

// Create a formatted string

let format = NSLocalizedString("%d popular languages", comment: "Number of popular languages")

label.text = String.localizedStringWithFormat(format, popularLanguages.count)

Page 23: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

// Set a label's text

label.text = "Population"

// Set a label's text to a localized string

label.text = NSLocalizedString("Population", comment: "Label preceding the population value")

// Load localized string from a specific table

label.text = NSLocalizedString("Population", tableName: "Localizable", bundle: .main, value: nil, comment: "Label preceding the population value")

// Create a formatted string

let format = NSLocalizedString("%d popular languages", comment: "Number of popular languages")

label.text = String.localizedStringWithFormat(format, popularLanguages.count)

Page 24: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

// Set a label's text

label.text = "Population"

// Set a label's text to a localized string

label.text = NSLocalizedString("Population", comment: "Label preceding the population value")

// Load localized string from a specific table

label.text = NSLocalizedString("Population", tableName: "Localizable", bundle: .main, value: nil, comment: "Label preceding the population value")

// Create a formatted string

let format = NSLocalizedString("%d popular languages", comment: "Number of popular languages")

label.text = String.localizedStringWithFormat(format, popularLanguages.count)

Page 25: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

// Set a label's text

label.text = "Population"

// Set a label's text to a localized string

label.text = NSLocalizedString("Population", comment: "Label preceding the population value")

// Load localized string from a specific table

label.text = NSLocalizedString("Population", tableName: "Localizable", bundle: .main, value: nil, comment: "Label preceding the population value")

// Create a formatted string

let format = NSLocalizedString("%d popular languages", comment: "Number of popular languages")

label.text = String.localizedStringWithFormat(format, popularLanguages.count)

Page 26: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Strings Management

fr.lproj/Localizable.strings

/* Title label's text */ "International Facts" = "Faits Internationaux";

/* Label prompting a user to choose a territory */ "Territory" = "Territoire";

Page 27: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Strings Management Static analyzer

Page 28: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Strings Management Static analyzer

Thread Sanitizer and Static Analysis WWDC 2016

– (UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIndentifier:@"Cell" forIndexPath:indexPath];

cell.textLable.text = @"Details";

return cell; }

Page 29: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

•Strings Management •Formatting •User Interface

Page 30: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 31: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 32: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Formatters Date and time

let formatter = DateFormatter() formatter.dateFormat = "EEEE, MMMM d, yyyy" let str = formatter.string(from: date)

Page 33: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Formatters Date and time

let formatter = DateFormatter() formatter.dateFormat = "EEEE, MMMM d, yyyy" let str = formatter.string(from: date)

Page 34: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Formatters Date and time

let formatter = DateFormatter() formatter.dateStyle = .full let str = formatter.string(from: date)

let formatter = DateFormatter() formatter.dateFormat = "EEEE, MMMM d, yyyy" let str = formatter.string(from: date)

Page 35: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 36: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Formatters

DateFormatter

DateComponentsFormatter

DateIntervalFormatter

PersonNameComponentsFormatter

NumberFormatter

Measurements and Units WWDC 2016

Internationalization Best Practices WWDC 2016

ByteCountFormatter

EnergyFormatter

LengthFormatter

MassFormatter

MeasurementFormatter

Page 37: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

•Strings Management •Formatting •User Interface

Page 38: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

User Interface Base internationalization

Page 39: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Localized Resources Structure

Page 40: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Localized Resources Structure

Project

Page 41: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Localized Resources Structure

Base.lproj

Project

Page 42: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Localized Resources Structure

en.lprojru.lproj Base.lproj

Project

Page 43: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Localized Resources Structure

ImageMain.storyboardLaunch.xib

en.lprojru.lproj Base.lproj

Project

Page 44: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Localized Resources Structure

Launch.stringsMain.stringsdict Launch.strings Main.strings ImageMain.storyboardLaunch.xib

en.lprojru.lproj Base.lproj

Project

Page 45: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

User Interface Auto Layout

What‘s New in Auto Layout WWDC 2016

Auto Layout Techniques in Interface Builder WWDC 2016

Page 46: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

User Interface Localization warnings

NEW

Page 47: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

User Interface Pseudolocalization

Default Lorem Ipsum•Double Length Lorem Ipsum Lorem Ipsum

Accented Latin L̊o̥r̀ëm̧ I̧p̊şu̥m̧

Affixed Strings [#Lorem Ipsum#]

Right to Left muspI meroL

NEW

Page 48: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

•Demo •Prepare your app for localization

Aya Siblini, Software Engineer

Page 49: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Summary

Page 50: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Summary

Use standard APIs to handle the complexity of data formatting

Page 51: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Summary

Use standard APIs to handle the complexity of data formatting

Use base internationalization and Auto Layout

Page 52: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Summary

Use standard APIs to handle the complexity of data formatting

Use base internationalization and Auto Layout

Validate your strings and UI

Page 53: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Sara Radi, Software Engineer

•Localization Workflow

Page 54: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Localization

Page 55: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Localization Process

Page 56: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Source Code

Localization Process

Page 57: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Source Code

Localization Process

Resources

Page 58: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

French Russian Spanish

Source Code

Localization Process

Export

Resources

Page 59: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Localized Resources

French Russian Spanish

Source Code

Localization Process

Export

Resources

Import

Page 60: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Localized Resources

Source Code

Localization Process

French Russian Spanish

Export

Import

Resources

Page 61: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Localized Resources

Source Code

Localization Process

French Russian Spanish

Export

Import

Resources

Page 62: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Export

Import

Resources

Localization Process NEW

Source Code

French Russian Spanish

Localized Resources

Page 63: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

NEWStringsdict

Page 64: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

•Handling Plurals •Adaptive Strings •Localization Export and Import •Other Resources

Page 65: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Stringsdict Plurals

if popularLanguages.count == 1 {

label.text = String.localizedStringWithFormat(NSLocalizedString("1 popular language", comment: "The list contains only one language"))

} else {

label.text = String.localizedStringWithFormat(NSLocalizedString("%d popular languages", comment: "The list contains more than one language"), popularLanguages.count)

}

Page 66: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Stringsdict Plurals

if popularLanguages.count == 1 {

label.text = String.localizedStringWithFormat(NSLocalizedString("1 popular language", comment: "The list contains only one language"))

} else {

label.text = String.localizedStringWithFormat(NSLocalizedString("%d popular languages", comment: "The list contains more than one language"), popularLanguages.count)

}

Page 67: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Stringsdict Plurals

if popularLanguages.count == 1 {

label.text = String.localizedStringWithFormat(NSLocalizedString("1 popular language", comment: "The list contains only one language"))

} else {

label.text = String.localizedStringWithFormat(NSLocalizedString("%d popular languages", comment: "The list contains more than one language"), popularLanguages.count)

}

Page 68: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Stringsdict Plurals

Page 69: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

English •1 popular language •

•2 popular languages …•5 popular languages

Stringsdict Plurals

Page 70: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

English •1 popular language •

•2 popular languages …•5 popular languages

Russian•Распространенных языков: 1 •Распространенных языков: 2 …•Распространенных языков: 5

Stringsdict Plurals

Page 71: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Stringsdict Plurals

label.text = String.localizedStringWithFormat(NSLocalizedString("%d popular languages", comment: "The list contains more than one language"), popularLanguages.count)

Page 72: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Stringsdict Plurals

label.text = String.localizedStringWithFormat(NSLocalizedString("%d popular languages", comment: "The list contains more than one language"), popularLanguages.count)

Page 73: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Stringsdict Plurals

label.text = String.localizedStringWithFormat(NSLocalizedString("%d popular languages", comment: "The list contains more than one language"), popularLanguages.count)

Page 74: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Stringsdict Plurals

Page 75: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Russian •Распространенных языков: 1 •

•Распространенных языков: 2 •ular languages …•Распространенных языков: 5

Stringsdict Plurals

Page 76: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Russian •Распространенных языков: 1 •

•Распространенных языков: 2 •ular languages …•Распространенных языков: 5

Russian•1 распространенный язык •2 распространенных языка

…•5 распространенных языков

Stringsdict Plurals

Page 77: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

•Handling Plurals •Adaptive Strings •Localization Export and Import •Handling Other Resources

Page 78: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 79: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 80: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 81: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 82: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 83: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 84: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Stringsdict Adaptive Strings NEW

Page 85: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Stringsdict Adaptive Strings NEW

label.text = NSLocalizedString("GDP", comment: "A territory's GDP (Gross Domestic Product)")

Page 86: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Stringsdict Adaptive Strings NEW

label.text = NSLocalizedString("GDP", comment: "A territory's GDP (Gross Domestic Product)")

let widthFormattedString = string.variantFittingPresentationWidth(20)

Page 87: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Stringsdict Adaptive Strings NEW

label.text = NSLocalizedString("GDP", comment: "A territory's GDP (Gross Domestic Product)")

let widthFormattedString = string.variantFittingPresentationWidth(20)

Page 88: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 89: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 90: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 91: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 92: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 93: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs
Page 94: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

•Handling Plurals •Adaptive Strings •Localization Export and Import •Other Resources

Page 95: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Export XLIFF

Page 96: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Import XLIFF

Page 97: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

•Handling Plurals •Adaptive Strings •Localization Export and Import •Other Resources

Page 98: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Other Resources

Page 99: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Other Resources

Page 100: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Other Resources

Page 101: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

•Demo •Localization export and import

Chris Hanson, Software Engineer

Page 102: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Summary

Page 103: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Summary

Use stringsdict for plurals and width variants

Page 104: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Summary

Use stringsdict for plurals and width variants

Export XLIFF for localization

Page 105: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Summary

Use stringsdict for plurals and width variants

Export XLIFF for localization

Import localized XLIFF

Page 106: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Summary

Use stringsdict for plurals and width variants

Export XLIFF for localization

Import localized XLIFF

Localize non-string resources in Xcode

Page 107: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Summary

Use stringsdict for plurals and width variants

Export XLIFF for localization

Import localized XLIFF

Localize non-string resources in Xcode

Page 108: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Aya Siblini, Software Engineer

•Testing

Page 109: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Testing XCTest

NEW

Page 110: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Testing XCTest

NEW

Page 111: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Testing UI testing

Page 112: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Testing UI testing

app.tables.cells.staticTexts["Territory"].tap()

Page 113: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Testing UI testing

app.tables.cells.staticTexts["Territory"].tap()

Page 114: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Testing UI testing

app.tables.cells.staticTexts["Territory"].tap()

app.tables.cells["territoryTableCell"].tap()

Use accessibilityIdentifier

Page 115: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Testing UI testing

app.tables.cells.staticTexts["Territory"].tap()

app.tables.cells["territoryTableCell"].tap()

Use accessibilityIdentifier

Page 116: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

button.accessibilityIdentifier = "startButton"

Testing UI testing

Set accessibilityIdentifier

Page 117: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Testing UI testing

Page 118: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Testing UI testing

Use accessibility identifiers

Use XCTAttachment to collect screenshots

Get full coverage of UI for all localizations

What’s New in Testing Hall 2 Thursday 3:10PM

Engineering for Testability Hall 3 Friday 1:50PM

NEW

Page 119: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

•Demo •Testing

Aya Siblini, Software Engineer

Page 120: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Summary

Page 121: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Summary

Prepare your app for localization

Page 122: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Summary

Prepare your app for localization

Validate your app’s readiness

Page 123: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Summary

Prepare your app for localization

Validate your app’s readiness

Export localizable content to be translated

Page 124: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Summary

Prepare your app for localization

Validate your app’s readiness

Export localizable content to be translated

Import localized content

Page 125: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Summary

Prepare your app for localization

Validate your app’s readiness

Export localizable content to be translated

Import localized content

Use XCTest to test your localized app

Page 126: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

More Informationhttps://developer.apple.com/wwdc17/401

Page 127: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Related Sessions

Advances in TVMLKit Grand Ballroom B Tuesday 11:20AM

What’s New in Testing Hall 2 Thursday 3:10PM

Localizing Content for Swift Playgrounds Grand Ballroom A Thursday 3:10PM

Auto Layout Techniques in Interface Builder Hall 3 Friday 9:00AM

The Keys to a Better Text Input Experience Grand Ballroom B Friday 11:00AM

Building Apps with Dynamic Type Executive Ballroom Friday 1:50PM

Engineering for Testability Hall 3 Friday 1:50PM

Localization Best Practices on tvOS WWDC 2017 Video

Page 128: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs

Labs

Introduction to Interface Builder Lab Technology Lab E Tue 12:00PM-3:10PM

Internationalization Lab Technology Lab I Tue 1:50PM-4:10PM

Advanced Interface Builder and Auto Layout Lab Technology Lab K Wed 3:10PM-6:00PM

Internationalization Lab Technology Lab I Fri 9:00AM-1:50PM

Advanced Interface Builder and Auto Layout Lab Technology Lab K Fri 12:00PM-1:50PM

Page 129: •Localizing with Xcode 9 - Apple Developer•Localizing with Xcode 9 ... • Prepare your app for localization Aya Siblini, Software Engineer. Summary . Summary Use standard APIs