207
© 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. App Frameworks #WWDC16 Session 232 What’s New in International User Interfaces Joaquim Lobo Silva Internationalization Software Engineer Sara Radi Internationalization Software Engineer

What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Embed Size (px)

Citation preview

Page 1: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

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

App Frameworks #WWDC16

Session 232

What’s New in International User Interfaces

Joaquim Lobo Silva Internationalization Software EngineerSara Radi Internationalization Software Engineer

Page 2: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

German Swedish Vietnamese Thai Slovak JapaneseEnglish French Italian Spanish Turkish Malay

Chinese Arabic Finnish Indonesian Korean

Czech

Dutch Greek Danish Norwegian Catalan PolishRomanian Russian Simplified Chinese Hebrew

UkrainianHungarian European Portuguese British English

Traditional Chinese Brazilian Portuguese

US English

Page 3: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

German Swedish Vietnamese Thai Slovak JapaneseEnglish French Italian Spanish Turkish Malay

Chinese Arabic Finnish Indonesian Korean

Czech

Dutch Greek Danish Norwegian Catalan PolishRomanian Russian Simplified Chinese Hebrew

UkrainianHungarian European Portuguese British English

Traditional Chinese Brazilian Portuguese

US English

Page 4: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

German Swedish Vietnamese Thai Slovak JapaneseEnglish French Italian Spanish Turkish Malay

Chinese Arabic Finnish Indonesian Korean

Czech

Dutch Greek Danish Norwegian Catalan PolishRomanian Russian Simplified Chinese Hebrew

UkrainianHungarian European Portuguese British English

Traditional Chinese Brazilian Portuguese

US English

Page 5: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Million

400

Page 6: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 7: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Images of the stores in Dubai and Abu Dhabi

Page 8: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 9: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Related Sessions

Page 10: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Related Sessions

Inclusive App Design Pacific Heights Tuesday 10:00AM

Internationalization Best Practices Mission Tuesday 9:00AM

Page 11: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 12: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 13: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 14: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Agenda

Page 15: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Agenda

Right-to-Left (RTL) User Interface Concepts and Recap

Page 16: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Agenda

Right-to-Left (RTL) User Interface Concepts and RecapHandling Images

Page 17: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Agenda

Right-to-Left (RTL) User Interface Concepts and RecapHandling ImagesEvaluating Layout Direction

Page 18: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Agenda

Right-to-Left (RTL) User Interface Concepts and RecapHandling ImagesEvaluating Layout DirectionRTL UI in watchOS

Page 19: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Agenda

Right-to-Left (RTL) User Interface Concepts and RecapHandling ImagesEvaluating Layout DirectionRTL UI in watchOS What’s New in macOS

Page 20: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Agenda

Right-to-Left (RTL) User Interface Concepts and RecapHandling ImagesEvaluating Layout DirectionRTL UI in watchOS What’s New in macOSText Support: Handling Bidirectional Text

Page 21: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

iOS

Page 22: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

RecapiOS

Page 23: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

RecapiOS

Supporting right-to-left languages• Since iOS 9

Page 24: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

RecapiOS

Supporting right-to-left languages• Since iOS 9• Standard UIKit controls adapt out of the box

Page 25: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

RecapiOS

Supporting right-to-left languages• Since iOS 9• Standard UIKit controls adapt out of the box• Auto Layout

Page 26: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

RecapiOS

Supporting right-to-left languages• Since iOS 9• Standard UIKit controls adapt out of the box• Auto Layout

- Stack View

Page 27: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

RecapiOS

Supporting right-to-left languages• Since iOS 9• Standard UIKit controls adapt out of the box• Auto Layout

- Stack View- Leading/Trailing Constraints

Page 28: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

RecapiOS

Page 29: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

RecapiOS

Some UI stays the same across layout directions

Page 30: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

RecapiOS

Some UI stays the same across layout directions

Page 31: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

RecapiOS

Some UI stays the same across layout directions• Semantic Content Attribute

Page 32: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

RecapiOS

Some UI stays the same across layout directions• Semantic Content Attribute• For determining and fine-tuning layout flow

Page 33: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

RecapiOS

Some UI stays the same across layout directions• Semantic Content Attribute• For determining and fine-tuning layout flow• enum UISemanticContentAttribute

Page 34: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

RecapiOS

Some UI stays the same across layout directions• Semantic Content Attribute• For determining and fine-tuning layout flow• enum UISemanticContentAttribute

- playback

Page 35: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

RecapiOS

Some UI stays the same across layout directions• Semantic Content Attribute• For determining and fine-tuning layout flow• enum UISemanticContentAttribute

- playback

- spatial

Page 36: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

RecapiOS

Some UI stays the same across layout directions• Semantic Content Attribute• For determining and fine-tuning layout flow• enum UISemanticContentAttribute

- playback

- spatial

- forceLeftToRight, forceRightToLeft

Page 37: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

RecapiOS

Some UI stays the same across layout directions• Semantic Content Attribute• For determining and fine-tuning layout flow• enum UISemanticContentAttribute

- playback

- spatial

- forceLeftToRight, forceRightToLeft

- unspecified

Page 38: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

RecapiOS

New UIKit Support for International User Interfaces WWDC 2015

Some UI stays the same across layout directions• Semantic Content Attribute• For determining and fine-tuning layout flow• enum UISemanticContentAttribute

- playback

- spatial

- forceLeftToRight, forceRightToLeft

- unspecified

Page 39: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS

Page 40: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS

Universal

Page 41: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS

UniversalUIImage or

Interface Builder

Page 42: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS

UniversalUIImage or

Interface Builder

Mirrored

Page 43: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS

UniversalUIImage or

Interface Builder

Mirrored

Page 44: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS

UniversalUIImage or

Interface Builder

Mirrored

imageFlippedForRightToLeftLayoutDirection()

Page 45: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS

imageFlippedForRightToLeftLayoutDirection()

Universal Mirrored DedicatedUIImage or

Interface Builder

Page 46: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS

imageFlippedForRightToLeftLayoutDirection()

Universal Mirrored DedicatedUIImage or

Interface Builder

Page 47: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS

imageFlippedForRightToLeftLayoutDirection()

Universal Mirrored DedicatedUIImage or

Interface Builder

Page 48: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS

imageFlippedForRightToLeftLayoutDirection()

Universal Mirrored DedicatedUIImage or

Interface Builder Runtime check

Page 49: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS

imageFlippedForRightToLeftLayoutDirection()

Universal Mirrored DedicatedUIImage or

Interface Builder Runtime check

Page 50: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

NEW

ImagesiOS

UIImage or Interface Builder

Universal Mirrored Dedicated

Page 51: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

NEW

ImagesiOS

Directional Image Assets

Universal Mirrored Dedicated

Page 52: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS NEW

Page 53: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS

Image Asset Directions

NEW

Page 54: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS

Image Asset Directions

NEW

Page 55: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS

Image Asset Directions• Fixed

NEW

Page 56: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS

Image Asset Directions• Fixed• Left to Right or Right to Left, Mirrors

NEW

Page 57: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS

Image Asset Directions• Fixed• Left to Right or Right to Left, Mirrors• Both (dedicated for each direction)

NEW

Page 58: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS

Image Asset Directions• Fixed• Left to Right or Right to Left, Mirrors• Both (dedicated for each direction)

Loads the correct image from the asset

NEW

Page 59: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS

Image Asset Directions• Fixed• Left to Right or Right to Left, Mirrors• Both (dedicated for each direction)

Loads the correct image from the asset• From Interface Builder

NEW

Page 60: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

ImagesiOS

Image Asset Directions• Fixed• Left to Right or Right to Left, Mirrors• Both (dedicated for each direction)

Loads the correct image from the asset• From Interface Builder• From UIImage.init(named:)

NEW

Page 61: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

DemoDirectional Images

Page 62: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Using assets in codeiOS NEW

Page 63: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Using assets in codeiOS

Register left-to-right and right-to-left counterparts

NEW

Page 64: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Using assets in codeiOS

Register left-to-right and right-to-left counterparts• For images not stored locally

NEW

Page 65: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Using assets in codeiOS

Register left-to-right and right-to-left counterparts• For images not stored locally• Associate images with trait collections

NEW

Page 66: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Using assets in codeiOS

Register left-to-right and right-to-left counterparts• For images not stored locally• Associate images with trait collections• Convenience method on UIImage for mirroring orientations

NEW

Page 67: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Using assets in codeiOS

Register left-to-right and right-to-left counterparts• For images not stored locally• Associate images with trait collections• Convenience method on UIImage for mirroring orientations

- UIImage.imageWithHorizontallyFlippedOrientation()

NEW

Page 68: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

// Registering assets at runtime

let asset = UIImageAsset()

let ltrImage = fetchRemoteImage()

let rtlImage = ltrImage.imageWithHorizontallyFlippedOrientation()

// Register the images in the asset

asset.register(ltrImage, with: UITraitCollection(layoutDirection: .leftToRight))

asset.register(rtlImage, with: UITraitCollection(layoutDirection: .rightToLeft))

// Set the image on an image view

imageView.image = asset.image(with: imageView.traitCollection)

Page 69: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

// Registering assets at runtime

let asset = UIImageAsset()

let ltrImage = fetchRemoteImage()

let rtlImage = ltrImage.imageWithHorizontallyFlippedOrientation()

// Register the images in the asset

asset.register(ltrImage, with: UITraitCollection(layoutDirection: .leftToRight))

asset.register(rtlImage, with: UITraitCollection(layoutDirection: .rightToLeft))

// Set the image on an image view

imageView.image = asset.image(with: imageView.traitCollection)

Page 70: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

// Registering assets at runtime

let asset = UIImageAsset()

let ltrImage = fetchRemoteImage()

let rtlImage = ltrImage.imageWithHorizontallyFlippedOrientation()

// Register the images in the asset

asset.register(ltrImage, with: UITraitCollection(layoutDirection: .leftToRight))

asset.register(rtlImage, with: UITraitCollection(layoutDirection: .rightToLeft))

// Set the image on an image view

imageView.image = asset.image(with: imageView.traitCollection)

Page 71: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

// Registering assets at runtime

let asset = UIImageAsset()

let ltrImage = fetchRemoteImage()

let rtlImage = ltrImage.imageWithHorizontallyFlippedOrientation()

// Register the images in the asset

asset.register(ltrImage, with: UITraitCollection(layoutDirection: .leftToRight))

asset.register(rtlImage, with: UITraitCollection(layoutDirection: .rightToLeft))

// Set the image on an image view

imageView.image = asset.image(with: imageView.traitCollection)

Page 72: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

// Registering assets at runtime

let asset = UIImageAsset()

let ltrImage = fetchRemoteImage()

let rtlImage = ltrImage.imageWithHorizontallyFlippedOrientation()

// Register the images in the asset

asset.register(ltrImage, with: UITraitCollection(layoutDirection: .leftToRight))

asset.register(rtlImage, with: UITraitCollection(layoutDirection: .rightToLeft))

// Set the image on an image view

imageView.image = asset.image(with: imageView.traitCollection)

Page 73: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

// Registering assets at runtime

let asset = UIImageAsset()

let ltrImage = fetchRemoteImage()

let rtlImage = ltrImage.imageWithHorizontallyFlippedOrientation()

// Register the images in the asset

asset.register(ltrImage, with: UITraitCollection(layoutDirection: .leftToRight))

asset.register(rtlImage, with: UITraitCollection(layoutDirection: .rightToLeft))

// Set the image on an image view

imageView.image = asset.image(with: imageView.traitCollection)

Page 74: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Directional imagesiOS NEW

Page 75: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Directional imagesiOS

Same familiar asset mechanism

NEW

Page 76: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Directional imagesiOS

Same familiar asset mechanismNew traitUITraitEnvironmentLayoutDirection

NEW

Page 77: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Directional imagesiOS

Same familiar asset mechanismNew traitUITraitEnvironmentLayoutDirection

• Affects layout evaluation with Semantic Content Attribute

NEW

Page 78: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Directional imagesiOS

Same familiar asset mechanismNew traitUITraitEnvironmentLayoutDirection

• Affects layout evaluation with Semantic Content Attribute

Layout

NEW

Page 79: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Directional imagesiOS

Same familiar asset mechanismNew traitUITraitEnvironmentLayoutDirection

• Affects layout evaluation with Semantic Content Attribute

Semantic Content Attribute

Layout

NEW

Page 80: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Directional imagesiOS

Same familiar asset mechanismNew traitUITraitEnvironmentLayoutDirection

• Affects layout evaluation with Semantic Content Attribute

App Environment

Semantic Content Attribute

Layout

NEW

Page 81: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Directional imagesiOS

Same familiar asset mechanismNew traitUITraitEnvironmentLayoutDirection

• Affects layout evaluation with Semantic Content Attribute

App Environment

Semantic Content Attribute

Layout

NEW

Page 82: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Directional imagesiOS

Same familiar asset mechanismNew traitUITraitEnvironmentLayoutDirection

• Affects layout evaluation with Semantic Content Attribute

UIView.effectiveUserInterfaceLayoutDirection

App Environment

Semantic Content Attribute

Layout

NEW

Page 83: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Directional imagesiOS

Same familiar asset mechanismNew traitUITraitEnvironmentLayoutDirection

• Affects layout evaluation with Semantic Content Attribute

UIView.effectiveUserInterfaceLayoutDirection

UIView.userInterfaceLayoutDirection(for:relativeTo:)

NEW

Page 84: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

SummaryiOS

Page 85: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

SummaryiOS

Directional Image Assets

Page 86: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

SummaryiOS

Directional Image Assets• Ready for use with Interface Builder and UIImage

Page 87: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

SummaryiOS

Directional Image Assets• Ready for use with Interface Builder and UIImage• Ability to register remote images as part of assets

Page 88: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

SummaryiOS

Directional Image Assets• Ready for use with Interface Builder and UIImage• Ability to register remote images as part of assets• imageFlippedForRightToLeftLayoutDirection() deprecated in iOS 10

Page 89: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

SummaryiOS

Directional Image Assets• Ready for use with Interface Builder and UIImage• Ability to register remote images as part of assets• imageFlippedForRightToLeftLayoutDirection() deprecated in iOS 10

Convenience property on UIView for effective layout direction

Page 90: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

SummaryiOS

Directional Image Assets• Ready for use with Interface Builder and UIImage• Ability to register remote images as part of assets• imageFlippedForRightToLeftLayoutDirection() deprecated in iOS 10

Convenience property on UIView for effective layout directionClass method on UIView for evaluating directionality in your app

Page 91: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

watchOS

Page 92: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

watchOS

Page 93: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

watchOS

Supporting right-to-left languages

Page 94: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

watchOS

Supporting right-to-left languages• Since watchOS 2.1

Page 95: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

watchOS

Supporting right-to-left languages• Since watchOS 2.1• All WatchKit elements

Page 96: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

watchOS

Supporting right-to-left languages• Since watchOS 2.1• All WatchKit elements• API similar to iOS

Page 97: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

watchOS

Supporting right-to-left languages• Since watchOS 2.1• All WatchKit elements• API similar to iOS• Design concepts similar to iOS

Page 98: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 99: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 100: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 101: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

WatchKitwatchOS

Page 102: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

WatchKitwatchOS

All Interface Objects

Page 103: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

WatchKitwatchOS

All Interface Objects• Direction and alignment flip automatically

Page 104: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

WatchKitwatchOS

All Interface Objects• Direction and alignment flip automatically

- Horizontal Interface Groups

Page 105: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

WatchKitwatchOS

All Interface Objects• Direction and alignment flip automatically

- Horizontal Interface Groups- Object alignment

Page 106: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

WatchKitwatchOS

All Interface Objects• Direction and alignment flip automatically

- Horizontal Interface Groups- Object alignment

Page 107: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

WatchKitwatchOS

All Interface Objects• Direction and alignment flip automatically

- Horizontal Interface Groups- Object alignment

• WKSemanticContentAttribute

Page 108: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

WatchKitwatchOS

All Interface Objects• Direction and alignment flip automatically

- Horizontal Interface Groups- Object alignment

• WKSemanticContentAttribute- Playback, Spatial, ForceLeftToRight,

ForceRightToLeft, Unspecified

Page 109: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

WatchKitwatchOS

All Interface Objects• Direction and alignment flip automatically

- Horizontal Interface Groups- Object alignment

• WKSemanticContentAttribute- Playback, Spatial, ForceLeftToRight,

ForceRightToLeft, Unspecified

// Using WKInterfaceSemanticContentAttribute

playControlsGroup.setSemanticContentAttribute(.playback)

Page 110: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Layout Direction in watchOS

// Query the directionality for any other UI work

let direction = WKInterfaceDevice.interfaceLayoutDirection(for: .Playback)

if direction == .LeftToRight {

// ...

} else {

// ...

}

Page 111: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Layout Direction in watchOS

// Query the directionality for any other UI work

let direction = WKInterfaceDevice.interfaceLayoutDirection(for: .Playback)

if direction == .LeftToRight {

// ...

} else {

// ...

}

Page 112: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Layout Direction in watchOS

// Query the directionality for any other UI work

let direction = WKInterfaceDevice.interfaceLayoutDirection(for: .Playback)

if direction == .LeftToRight {

// ...

} else {

// ...

}

Page 113: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

SummarywatchOS

Page 114: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

SummarywatchOS

Same principles as iOS

Page 115: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

SummarywatchOS

Same principles as iOSWatchKit elements adapt out of the box

Page 116: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

SummarywatchOS

Same principles as iOSWatchKit elements adapt out of the boxAdapt any custom elements or artwork

Page 117: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

SummarywatchOS

Same principles as iOSWatchKit elements adapt out of the boxAdapt any custom elements or artworkUse Semantic Content Attribute to determine layout direction

Page 118: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

macOS

Page 119: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

System Level Controls

Page 120: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Menu barSystem Level Controls

Page 121: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 122: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 123: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 124: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 125: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 126: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

WindowsSystem Level Controls

Page 127: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 128: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 129: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

App Level Controls

Page 130: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

NSTableViewApp Level Controls

Page 131: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 132: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

NSCollectionViewApp Level Controls

Page 133: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 134: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

NSScrollViewApp Level Controls

Page 135: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 136: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 137: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 138: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

dir=LTR

Page 139: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 140: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

dir=RTL

Page 141: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

API

Page 142: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

WebKitmacOS NEW

Page 143: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

WebKitmacOS NEW

// Default: WKUserInterfaceDirectionPolicyContentvar userInterfaceDirectionPolicy: WKUserInterfaceDirectionPolicy

enum- content

- system

Page 144: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

AppKitmacOS

Page 145: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

AppKitmacOS

All controls flip automatically

Page 146: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

AppKitmacOS

All controls flip automatically• Use StackView and GridView when you can

Page 147: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

AppKitmacOS

All controls flip automatically• Use StackView and GridView when you can • Use Auto Layout

Page 148: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

AppKitmacOS

All controls flip automatically• Use StackView and GridView when you can • Use Auto Layout

What’s New in Auto Layout Presidio Friday 3:00PM

Mysteries of Auto Layout WWDC 2015

Page 149: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

AppKitmacOS

All controls flip automatically• Use StackView and GridView when you can • Use Auto Layout

Direction and alignment flip automatically for nibs, xibs and storyboards in Base localization

What’s New in Auto Layout Presidio Friday 3:00PM

Mysteries of Auto Layout WWDC 2015

Page 150: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

NSView layout directionmacOS

Page 151: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

NSView layout directionmacOS

Page 152: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

NSViewmacOS

Page 153: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

NSViewmacOS

Get and set the user interface layout direction of a view

Page 154: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

NSViewmacOS

Get and set the user interface layout direction of a viewThe default value is set to NSApp.userInterfaceLayoutDirection

Page 155: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

NSViewmacOS

Get and set the user interface layout direction of a viewThe default value is set to NSApp.userInterfaceLayoutDirection

// Get and set the user interface layout directionpublic var userInterfaceLayoutDirection: NSUserInterfaceLayoutDirection

Page 156: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

NSImageRepmacOS NEW

Page 157: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

NSImageRepmacOS NEW

Use Asset Catalogs

Page 158: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

NSImageRepmacOS NEW

Use Asset CatalogsIf assets are obtained externally (server, etc.)

// Default: NSImageLayoutDirectionUnspecifiedpublic var layoutDirection: NSImageLayoutDirection

enum- leftToRight

- rightToLeft

Page 159: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Creating imagesmacOS

Page 160: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Creating imagesmacOS

Register left-to-right and right-to-left counterparts

let image = NSImage(data: LTRData)

image.representations.first.layoutDirection = .leftToRight

let rtlImage = NSImageRep(data: RTLData)

rtlImage.layoutDirection = .rightToLeft

// Adds the specific image representation to the receiver

image.addRepresentation(rtlImage)

Page 161: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Creating imagesmacOS

Register left-to-right and right-to-left counterparts

let image = NSImage(data: LTRData)

image.representations.first.layoutDirection = .leftToRight

let rtlImage = NSImageRep(data: RTLData)

rtlImage.layoutDirection = .rightToLeft

// Adds the specific image representation to the receiver

image.addRepresentation(rtlImage)

Page 162: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

NSTextField and text alignment macOS NEW

Page 163: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

NSTextField and text alignment macOS

New convenience initializers

NEW

Page 164: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

NSTextField and text alignment macOS

New convenience initializersDefault alignment is Natural

// Creates a non-wrapping, non editable, non selectable text field.

public convenience init(labelWithString stringValue: String)

// Creates a wrapping, non editable, selectable text field.

public convenience init(wrappingLabelWithString stringValue: String)

NEW

Page 165: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

NSButtonmacOS NEW

Page 166: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

NSButtonmacOS

Button with an image will flip position automatically Checkbox position will flip position automatically Radio button position will flip position automatically

public convenience init(title: String, image: NSImage, target: AnyObject?, action: Selector?)

public convenience init(checkboxWithTitle title: String, target: AnyObject?, action: Selector?)

public convenience init(radioButtonWithTitle title: String, target: AnyObject?, action: Selector?)

NEW

Page 167: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

DemomacOS

Page 168: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Displaying Bidi Text

Page 169: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 170: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

English UI

Page 171: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

English UI

Mixed Content

Page 172: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Things to Remember…

Page 173: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Things to Remember…

Alignment and directionality are different

Page 174: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Things to Remember…

Alignment and directionality are different

Right aligned text

Page 175: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Things to Remember…

Alignment and directionality are different

Right aligned text RTL writing direction

Page 176: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Things to Remember…

Alignment and directionality are different Alignment and base writing direction are natural by default

Right aligned text RTL writing direction

Page 177: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Text Directionality

Page 178: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Text Directionality

http://unicode.org/reports/tr9/

Page 179: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Text Directionality

All unicode characters are either

http://unicode.org/reports/tr9/

Page 180: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Text Directionality

All unicode characters are either

http://unicode.org/reports/tr9/

Strong LTR (L) Latin,

Page 181: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Text Directionality

All unicode characters are either

http://unicode.org/reports/tr9/

Strong LTR (L) Latin,

Strong RTL (R) العربية, עברית

Page 182: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Text Directionality

All unicode characters are either

http://unicode.org/reports/tr9/

Strong LTR (L) Latin,

Strong RTL (R) العربية, עברית

Neutral/Weak (N) spaces, punctuation…

Page 183: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Text Directionality

All unicode characters are either

Base writing direction is determined by the first strong character

http://unicode.org/reports/tr9/

Strong LTR (L) Latin,

Strong RTL (R) العربية, עברית

Neutral/Weak (N) spaces, punctuation…

Page 184: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Text Directionality

!

Page 185: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Text Directionality

has the highest score!%@ !

Page 186: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Text Directionality

has the highest score!Aya !

Page 187: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Text Directionality

has the highest score!!

Page 188: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Text Directionality

has the highest score!اية

Page 189: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Text Directionality

has the highest score!اية

Page 190: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Text Directionality

has the highest score!اية

Page 191: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Text Directionality

has the highest score!اية

Page 192: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Isolates Support NEW

Page 193: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Isolates Support

Unicode introduced Isolates support

NEW

Page 194: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Isolates Support

Unicode introduced Isolates support Allows some text to be isolated and have the directionality of its first strong character

NEW

Page 195: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Isolates Support

Unicode introduced Isolates support Allows some text to be isolated and have the directionality of its first strong characterDoesn’t affect surrounding text

NEW

Page 196: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Isolates Support

Unicode introduced Isolates support Allows some text to be isolated and have the directionality of its first strong characterDoesn’t affect surrounding text Using localizedStringWithFormat: will isolate %@ automatically

public class func localizedStringWithFormat (_ format: NSString, _ args: CVarArg...)

format -> Self

NEW

Page 197: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

DemoBidi Text

Page 198: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Summary

Page 199: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Summary

Directional Image Assets

Page 200: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Summary

Directional Image AssetsNew API on iOS, watchOS, and macOS

Page 201: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Summary

Directional Image AssetsNew API on iOS, watchOS, and macOSAuto Layout

Page 202: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Summary

Directional Image AssetsNew API on iOS, watchOS, and macOSAuto Layout Improved text support with Isolates

Page 203: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean
Page 204: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

More Information

https://developer.apple.com/wwdc16/232

Page 205: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Related Sessions

Inclusive App Design Pacific Heights Tuesday 10:00AM

What’s New in Cocoa Nob Hill Tuesday 11:00AM

Typography and Fonts Presidio Wednesday 9:00AM

What’s New in International User Interfaces Nob Hill Friday 9:00AM

What’s New in Auto Layout Presidio Friday 3:00PM

Measurements and Units Nob Hill Friday 4:00PM

Localizing with Xcode 6 WWDC 2014

Page 206: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean

Interface Builder and Auto Layout Lab Developer Tools Lab C Friday 9:00AM

Internationalization Lab FrameworksLab C Friday 2:00PM

Labs

Page 207: What’s New in International User Interfaces · German Swedish Vietnamese Thai Slovak Japanese English French Italian Spanish Turkish Malay Chinese Arabic Finnish Indonesian Korean