LoginSignup
24
24

More than 5 years have passed since last update.

Internationalization Best Practicesまとめ

Last updated at Posted at 2016-06-16

WWDC2016のInternationalization Best Practicesまとめてみました。

といっても、このセッションはタイトルの通り、What's new in ...ではないので、目新しいことはそれほど多くはなかったです。

自分にとって有用なことだけピックアップしてまとめましたので、それ以外の部分も確認したい方は動画を確認していただければと思います。

NSDateFormatter

14:00あたりから。

  • 時刻を表示したい場合、dateFormatで指定したコードは使うべきではない。
  • その代わりにtimeStyledateStyle(どちらもiOS2.0から利用可能)を設定すべき
//NG
let formatter: DateFormatter = DateFormatter()
formatter.dateFormat = "hh:mm a"

//OK
let formatter: DateFormatter = DateFormatter()
formatter.timeStyle = .shortStyle  //for 9:41 AM
formatter.timeStyle = .mediumStyle //for 9:41:19 AM
formatter.timeStyle = .longStyle   //for 9:41:19 AM PDT
formatter.timeStyle = .fullStyle   //for 9:41:19 AM Pacific Daylight Time

formatter.dateStyle = .shortStyle  //for 6/14/16
formatter.dateStyle = .mediumStyle //for Jun 14, 2016
formatter.dateStyle = .longStyle   //for June 14, 2016
formatter.dateStyle = .fullStyle   //for Tuesday, June 14, 2016
  • 上記した以外のスタイルにカスタマイズしたい場合も、setLocalizedDateFormatFromTemplate(iOS8.0から利用可能)を使うべき
//NG
let formatter: DateFormatter = DateFormatter()
formatter.dateFormat = "dd/MM"

//OK
let formatter: DateFormatter = DateFormatter()
formatter.setLocalizedDateFormatFromTemplate("yMd")   //for 6/14/2016
formatter.setLocalizedDateFormatFromTemplate("dM")    //for 6/14
formatter.setLocalizedDateFormatFromTemplate("dMMM")  //for Jun 14
formatter.setLocalizedDateFormatFromTemplate("EdMMM") //for Tus, Jun 14

NSDateComponentsFormatter

15:00あたりから。

  • ローカライズされた範囲のある日時や時間を定義する場合は以下のクラスを使うべき
    • NSDateComponent(既存クラス)
    • NSDateComponentsFormatter(既存クラス)
    • NSDateInterval(新規クラス)
    • NSDateIntervalFormatter(新規クラス)
  • 使い方は以下の通り
var components = DateComponents()
components.hour   = 4
components.minute = 25
var formatter = NSDateComponentsFormatter()
let str = formatter.string(from: components) // 4hr 25min

var components = DateInterval(start: date, duration: 3600)
var formatter = NSDateIntervalFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .short
let str = formatter.string(from: components) // 9:00 - 9:40 AM

このあたりは便利そうなので、使っていきたいですね。

PersonNameComponentsFormatter

16:00あたりから。

  • 名前を扱うためのクラスが追加されたクラス、使い方は以下の通り。
    • PersonNAmeComponents
    • PersonNameComponentsFormatter
var components = PersonNAmeComponents()
components.givenName  = "John"
components.middleName = "Adam"
components.familyName = "Appleseed"

let formatter = PersonNameComponentsFormatter()
formatter.style = .long        //John Adam Appleseed
formatter.style = .medium      //John Appleseed
formatter.style = .short       //John
formatter.style = .abbreviated //JA

PersonNameComponentsFormatterは素晴らしくて、以下のように姓名の順序を逆に渡しても、適切なpropertyにassignしてくれるとのこと。

let formatter = PersonNameComponentsFormatter()
if let components = formatter.personNameComponents(from: "John Appleseed") {
    print(components.givenName)  //John
    print(components.familyName) //Appleseed
}
if let components = formatter.personNameComponents(from: "Appleseed John") {
    print(components.givenName)  //John
    print(components.familyName) //Appleseed
}

主だった内容は以上です。

AutoLayout

18:00あたりから。
国際化対応とAutoLayoutについては、金曜日のセッション、
What's new in Auto Layoutを見てね、くらい。

Iconography

24:30あたりから。

言っていることは正しいですが、Facebookとかみたいにユーザーが数千万人以上、全世界にいるレベルのプロダクトでないと、あまり必要ないのでは?とも感じました。

  • アイコン上に文字や数字を表示するのを避けよう
  • アラビア語などのように、右から左に文字を書く文化に提供するアイコンでは、必要に応じて左右を反転させよう(アイコン上の閉じるボタンの位置など)。

参考

24
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
24