はじめに
文字列のハードコーディング対策として、extension
を使っていた。
しかし、一般的にLocalizable.strings
を利用するようなので、比較したものを記録しておく。
ハードコーディング対策の比較
extension
String+.swift
import Foundation
extension String {
static var articleTitle: String { "記事タイトル" }
static var articleAuthor: String { "kasiwa" }
static var articleBody: String { "記事本文記事本文記事本文記事本文記事本文記事本文記事本文" }
static var articleCreatedAt: String { "2023/05/06" }
}
ViewController.swift
import UIKit
final class ViewController: UIViewController {
@IBOutlet private var articleTitle: UILabel!
@IBOutlet private var articleCreatedAt: UILabel!
@IBOutlet private var articleBody: UILabel!
@IBOutlet private var articleAuthor: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
articleTitle.text = String.articleTitle
articleCreatedAt.text = String.articleCreatedAt
articleBody.text = String.articleBody
articleAuthor.text = String.articleAuthor
}
}
Localizable.strings
Localizable.strings
"ArticleTitle" = "記事タイトル";
"ArticleAuthor" = "kasiwa";
"ArticleBody" = "記事本文記事本文記事本文記事本文記事本文記事本文記事本文";
"ArticleCreatedAt" = "2023/05/06";
ViewController.swift
import UIKit
final class ViewController: UIViewController {
@IBOutlet private var articleTitle: UILabel!
@IBOutlet private var articleCreatedAt: UILabel!
@IBOutlet private var articleBody: UILabel!
@IBOutlet private var articleAuthor: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
articleTitle.text = NSLocalizedString("ArticleTitle", comment: "")
articleCreatedAt.text = NSLocalizedString("ArticleCreatedAt", comment: "")
articleBody.text = NSLocalizedString("ArticleBody", comment: "")
articleAuthor.text = NSLocalizedString("ArticleAuthor", comment: "")
}
}
プレビュー
おわりに
個人的には、extension
でハードコーティング対策を行う方が書きやすい。
Localizable.strings
は国ごとにファイルが分かれており、ローカライズ対応がしやすいというのはメリットかもしれない。
また、Localizable.strings
に対して、R.Swift
を使うと、コード内での取り回しが良くなるらしい。
後日、これも検証したい。
参考リンク
[iOS] ゼロから始める!簡単!多言語対応!
SwiftUIで多言語化に対応してプレビューで確認する
[iPhone] 多言語対応、Localizationの設定