【NSLocalizedString完全解説】Swiftでの多言語対応のたった20の方法

Swiftのロゴと多言語の国旗がデザインされた画像Swift
この記事は約31分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

多言語対応とは、アプリケーションが複数の言語に対応することを指します。

例えば、日本語と英語の2つの言語に対応する場合、ユーザーの設定や端末の言語設定に応じて、アプリケーションの表示言語が切り替わるようにすることが求められます。

Swiftでの多言語対応は、NSLocalizedStringを使用して実現できます。

この記事では、NSLocalizedStringの基本から応用、注意点、カスタマイズ方法まで、20のサンプルコードを交えて徹底解説します。

●Swiftとは

Swiftは、Appleが開発したプログラミング言語で、iOS、macOS、watchOS、tvOSのアプリケーション開発に用いられます。

その特徴として、高速性、セキュリティ、そして使いやすさが挙げられます。

○Swiftの基本的な特徴

Swiftは、Objective-Cの後継として誕生しました。

そのため、Objective-Cとの互換性を持ちつつ、よりモダンで安全な構文を持っています。

また、Swiftは型推論を活用することで、コードを簡潔に書くことができる点が大きな特徴として挙げられます。

○多言語対応とは

多言語対応とは、アプリケーションが複数の言語に対応する能力を指します。

特に、世界中で利用されるアプリケーションの場合、多言語対応は必須の要件となります。

Swiftでは、NSLocalizedStringを利用することで、手軽に多言語対応を実現することができます。

このコードでは、Swiftの基本的な特徴と多言語対応の重要性を紹介しています。

この例では、Swiftの背景やNSLocalizedStringの役割について説明しています。

●NSLocalizedStringの基本

NSLocalizedStringは、Swiftにおけるローカライゼーションのためのキーボード関数です。

この関数を使うことで、特定の言語に合わせて文字列を動的に表示することが可能となります。

○NSLocalizedStringの役割とは

NSLocalizedStringは、指定したキーに基づいて適切なローカライズされた文字列を取得する関数です。

具体的には、アプリケーションに組み込まれたローカライズファイル(.stringsファイル)から、現在の言語設定に合った文字列を取得します。

このコードでは、NSLocalizedStringの基本的な役割と動作原理を紹介しています。

この例では、Swiftでのローカライゼーションの要となる関数についての概要を掴むことができます。

○初めてのNSLocalizedStringの使用方法

NSLocalizedStringの基本的な使用方法は非常にシンプルです。

ここでは、”Hello”というキーに対応するローカライズされた文字列を取得するサンプルコードを紹介します。

let greeting = NSLocalizedString("Hello", comment: "挨拶としてのHello")
print(greeting)

このコードでは、”Hello”というキーでローカライズされた文字列を取得して、それを変数greetingに格納し、コンソールに出力しています。

言語設定が英語の場合、”Hello”という文字列が出力され、日本語の場合は、対応するローカライズファイルに基づいて”こんにちは”などの文字列が出力されることになります。

●NSLocalizedStringの詳細な使い方

NSLocalizedStringの使用を一歩進めるために、より具体的な使用例や、変数を含む文字列の取得方法など、多様なケースでの応用方法を解説します。

○サンプルコード1:基本的な文字列の取得

Swiftにおけるローカライズの基本的な方法を見てみましょう。

let localizedString = NSLocalizedString("Welcome", comment: "ユーザーへの歓迎メッセージ")
print(localizedString)

このコードでは、”Welcome”というキーでローカライズされた文字列を取得し、コンソールに出力しています。

ローカライズファイルに”Welcome”というキーが存在すれば、その言語の適切な文字列が表示されます。

○サンプルコード2:変数を含む文字列の取得

アプリケーション開発では、動的な文字列を扱う場面が頻繁にあります。

たとえば、ユーザー名を含む歓迎メッセージなどがそれに当たります。

下記のサンプルコードでは、変数を含む文字列のローカライズ方法を表しています。

let userName = "山田"
let localizedFormat = NSLocalizedString("Hello, %@", comment: "ユーザー名を含む挨拶")
let greetingMessage = String(format: localizedFormat, userName)
print(greetingMessage)

このコードでは、”Hello, %@”というフォーマットの文字列をローカライズし、String(format:)メソッドを使用してユーザー名を挿入しています。

この例では、”山田”というユーザー名が挿入されて”Hello, 山田”という結果が出力されます。

ローカライズを行う際に、変数を用いて動的な文字列を生成するケースは非常に一般的です。

○サンプルコード3:コメントを用いた取得方法

NSLocalizedStringの使い方の中でも特に注目すべき点は、第二引数に位置するcommentです。

このcomment部分は、開発者や翻訳者へのヒントや説明を提供するためのものです。

特定の文脈や用途に応じて正確な翻訳を行うための指針となるため、適切にコメントを記述することは非常に重要です。

ここでは、NSLocalizedStringを使用した際に、commentを用いて具体的な説明を加えたサンプルコードを紹介します。

let alertMessage = NSLocalizedString("DeleteItem", comment: "アイテムを削除する際の確認メッセージ")
print(alertMessage)

このコードでは、”DeleteItem”というキーでローカライズされた文字列を取得し、コンソールに出力しています。

commentに”アイテムを削除する際の確認メッセージ”と記述されているため、この文字列がアイテムの削除操作に関連するものであることがわかります。

翻訳者はこのコメントを参考にして、文脈に応じた適切な翻訳を行うことができます。

また、プロジェクトの他の開発者もこのコメントを見ることで、この文字列がどのような場面で使用されるのかを理解する手助けとなります。

○サンプルコード4:複数の言語ファイルを用いた取得方法

大規模なアプリケーションや、多くのローカライズ対象があるプロジェクトでは、複数の.stringsファイルを用意し、それぞれのファイルに特定のカテゴリや機能に関連する文字列をまとめることが考えられます。

例として、”Main”と”Settings”の2つの異なる.stringsファイルがあるとしましょう。

ここでは、それぞれのファイルから文字列を取得する方法を紹介します。

let mainGreeting = NSLocalizedString("Greeting", tableName: "Main", comment: "メイン画面の挨拶メッセージ")
let settingsDescription = NSLocalizedString("Description", tableName: "Settings", comment: "設定画面の説明文")
print(mainGreeting)
print(settingsDescription)

このコードでは、NSLocalizedStringtableName引数を使用して、特定の.stringsファイルから文字列を取得しています。

この例では、”Main”という名前のファイルから挨拶メッセージ、”Settings”という名前のファイルから説明文を取得しています。

●応用例とサンプルコード

Swiftでの多言語対応を更に深化させるための応用例をいくつか紹介します。

これらの応用例を実践することで、アプリの国際化・地域化をより洗練されたものにすることが可能です。

○サンプルコード5:日付や数字をローカライズ

日付や数字も地域によって表示形式が異なるため、これらをローカライズすることは非常に重要です。

SwiftではDateFormatterNumberFormatterを使用することで、これらのローカライズを実現できます。

import Foundation

let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .long
dateFormatter.timeStyle = .none
let localizedDate = dateFormatter.string(from: date)
print(localizedDate) // この例では、日付を長い形式でローカライズして表示しています。

このコードでは、現在の日付をローカライズした形式で表示しています。

DateFormatterを使うことで、ユーザーの地域設定に応じた日付形式を簡単に取得できます。

○サンプルコード6:プラッツホルダを使用したローカライズ

文字列の中に変数のようなプレースホルダを持つ場合、これをローカライズする方法を紹介します。

String.localizedStringWithFormatを使用することで、プレースホルダの部分に動的に値を挿入しながらローカライズすることができます。

let itemCount = 5
let localizedString = NSLocalizedString("%d items", comment: "アイテムの数量を示す文字列。%dの部分に数量が入ります")
let formattedString = String.localizedStringWithFormat(localizedString, itemCount)
print(formattedString) // この例では、5個のアイテムの数量をローカライズして表示しています。

このコードでは、アイテムの数量に応じてローカライズされた文字列を取得しています。

プレースホルダの%dの部分に、実際のアイテムの数量が動的に挿入されます。

○サンプルコード7:ボタンやラベルのローカライズ

Swiftで作成されたアプリケーションのUI要素、特にボタンやラベルのテキストは、多くの場合、ユーザーと直接的にやり取りをする重要な部分です。

そのため、これらのテキストも適切にローカライズすることが必要です。

ここでは、Swiftでボタンやラベルのテキストをローカライズする手法を表すサンプルコードを紹介します。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var sampleLabel: UILabel!
    @IBOutlet weak var sampleButton: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()

        // ラベルのローカライズ
        let localizedLabelText = NSLocalizedString("sampleLabelText", comment: "サンプルラベルのテキスト")
        sampleLabel.text = localizedLabelText

        // ボタンのローカライズ
        let localizedButtonText = NSLocalizedString("sampleButtonText", comment: "サンプルボタンのテキスト")
        sampleButton.setTitle(localizedButtonText, for: .normal)
    }
}

このコードでは、NSLocalizedStringを使って、ラベルとボタンのテキストをローカライズしています。

ローカライズ対象となる文字列キー(“sampleLabelText”や”sampleButtonText”)は、アプリケーションのローカライズファイル内で対応する各言語のテキストと結びつけられます。

ユーザーがアプリの言語設定を変更すると、このサンプルコードを用いてローカライズされたラベルやボタンのテキストも、適切な言語のテキストに自動的に切り替わります。

○サンプルコード8:動的な文字列のローカライズ

時には、アプリケーション内で動的に生成される文字列をローカライズする必要があります。

下記のサンプルコードでは、ユーザー名を動的に取得し、そのユーザー名を含む挨拶のメッセージをローカライズする方法を表しています。

let userName = "山田太郎" 
let greetingFormat = NSLocalizedString("Hello, %@", comment: "挨拶のメッセージ。%@の部分にユーザー名が入ります")
let greetingMessage = String(format: greetingFormat, userName)
print(greetingMessage) // この例では、「Hello, 山田太郎」という挨拶のメッセージをローカライズして表示しています。

このコードでは、String(format:)メソッドを使用して、ローカライズ済みの文字列フォーマットとユーザー名を組み合わせています。

○サンプルコード9:アラートやポップアップのローカライズ

アプリケーションのユーザーエクスペリエンスを高めるために、時折、アラートやポップアップを表示してユーザーに情報を伝えることがあります。

これらのメッセージも多言語対応させることで、異なる言語を話すユーザーにも適切な情報を提供することができます。

ここでは、Swiftでアラートのメッセージとボタンテキストをローカライズする手法を表すサンプルコードを紹介します。

import UIKit

class AlertViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func showAlertButtonTapped(_ sender: UIButton) {
        let alertTitle = NSLocalizedString("alertTitle", comment: "アラートのタイトル")
        let alertMessage = NSLocalizedString("alertMessage", comment: "アラートのメッセージ")
        let cancelButtonTitle = NSLocalizedString("cancelButton", comment: "キャンセルボタンのテキスト")

        let alert = UIAlertController(title: alertTitle, message: alertMessage, preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: cancelButtonTitle, style: .cancel, handler: nil))

        self.present(alert, animated: true, completion: nil)
    }
}

このコードでは、アラートのタイトル、メッセージ、キャンセルボタンのテキストをそれぞれローカライズしています。

アラートを表示する際に、これらのローカライズ済みテキストを使用して、現在のアプリ言語設定に合わせて正しい言語のテキストを表示します。

たとえば、アプリの言語設定が日本語の場合、ローカライズファイルに基づいて「アラートのタイトル」「アラートのメッセージ」「キャンセル」というテキストがアラートに表示されます。

同様に、他の言語の設定に応じて、適切なテキストが表示されるようになります。

このように、SwiftのNSLocalizedStringを使用することで、アラートやポップアップのテキストも簡単に多言語対応することができます。

ユーザーが異なる言語設定を持っている場合でも、彼らの言語に合わせた適切なメッセージを提供することで、より使いやすいアプリケーションを実現できます。

○サンプルコード10:アプリ内の設定画面のローカライズ

多くのアプリケーションには、ユーザーの好みやニーズに合わせて設定を変更できる設定画面が含まれています。

この設定画面の各項目や説明も多言語対応させることで、ユーザーにとってわかりやすく、使いやすい設定画面を提供することができます。

ここでは、Swiftで設定画面の項目名や説明をローカライズする手法を表すサンプルコードを紹介します。

import UIKit

class SettingsViewController: UITableViewController {

    let settingItems = [
        NSLocalizedString("settingItem1", comment: "設定項目1の名前"),
        NSLocalizedString("settingItem2", comment: "設定項目2の名前"),
        // その他の設定項目...
    ]

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return settingItems.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "settingCell", for: indexPath)
        cell.textLabel?.text = settingItems[indexPath.row]
        return cell
    }
}

このコードでは、設定画面に表示する各項目の名前をローカライズしています。

設定画面を表示する際に、これらのローカライズ済みテキストを使用して、現在のアプリ言語設定に合わせて正しい言語のテキストを表示します。

アプリの言語設定やユーザーの地域設定に応じて、設定画面の各項目の名前や説明が適切な言語で表示されます。

これにより、ユーザーは自分の言語で設定項目の内容を理解し、必要な設定を行うことができます。

●詳細な対処法

Swiftで多言語対応を実施する際、必ずしもスムーズに進行するわけではありません。

誤った実装や設定によって、期待した通りのローカライズができないことも少なくありません。

そのようなトラブルを迅速に解決するための対処法やデバッグ手法を学ぶことは、効率的なアプリ開発にとって非常に重要です。

○サンプルコード11:ローカライズされていない文字列の検出方法

アプリ内にローカライズされていない文字列が残っていると、一部のユーザーにとってわかりにくいアプリとなってしまいます。

下記のサンプルコードでは、ローカライズされていない文字列を検出する方法を紹介しています。

// NSLocalizedStringの代わりにこの関数を使用してローカライズされていない文字列を検出する
func LocalizedStringChecker(_ key: String, comment: String) -> String {
    let localizedString = NSLocalizedString(key, comment: comment)
    if localizedString == key {
        print("ローカライズされていない文字列: \(key)")
    }
    return localizedString
}

このコードでは、NSLocalizedStringと同じ動作をするLocalizedStringChecker関数を定義しています。

この関数内で、ローカライズされた文字列がキーそのものと同じ場合、そのキーがローカライズされていないことを表す警告を出力します。

アプリのデバッグフェーズでこの関数を使用することで、ローカライズの漏れを簡単に特定することができます。

○サンプルコード12:ローカライズエラーのデバッグ方法

ローカライズのプロセス中にエラーや不具合が発生した場合、その原因を特定して修正するためのデバッグが必要です。

下記のサンプルコードでは、ローカライズエラーのデバッグ方法について解説しています。

// ローカライズエラーをデバッグするための関数
func DebugLocalizationError(forKey key: String) {
    if let path = Bundle.main.path(forResource: Locale.current.identifier, ofType: "lproj"),
       let bundle = Bundle(path: path) {
        let localizedString = bundle.localizedString(forKey: key, value: nil, table: nil)
        if localizedString == key {
            print("エラー: '\(key)' に対応するローカライズ文字列が見つかりません")
        }
    } else {
        print("エラー: 現在の言語設定 '\(Locale.current.identifier)' に対応する.lprojファイルが見つかりません")
    }
}

この関数を使用することで、特定のキーに対するローカライズエラーをデバッグすることができます。

具体的には、現在の言語設定に対応する.lprojファイルの有無を確認し、その後でキーに対応するローカライズ文字列の有無を確認しています。

●詳細な注意点

Swiftでの多言語対応を実施するにあたり、その過程や結果に影響を及ぼす可能性のある注意点がいくつか存在します。

これらの注意点を把握し、適切に対処することで、期待通りのローカライズが実現できるようになります。

○サンプルコード13:文字列の長さに関する注意点

異なる言語間で、同じ意味の文章や単語の長さが異なることはよくあります。

例えば、英語のフレーズが短い場合、そのフレーズを日本語に翻訳すると長くなることが考えられます。

このような場合、UI上で文字がはみ出してしまう可能性があるため、適切なレイアウト調整が必要です。

このコードでは、特定の文字列がUIの領域を超えてしまうかどうかを確認する方法を表しています。

import UIKit

// 文字列が指定したラベルに収まるか確認する関数
func isTextFitting(label: UILabel, text: String) -> Bool {
    let attributes = [NSAttributedString.Key.font: label.font]
    let textSize = text.size(withAttributes: attributes)

    return textSize.width <= label.bounds.width
}

この例では、指定されたラベルと文字列を受け取り、文字列がラベルの領域に収まるかどうかを確認しています。

収まらない場合には、フォントサイズの調整やラベルのサイズを変更するなどの対応が必要です。

○サンプルコード14:フォーマット指定子の使用に関する注意点

Swiftでの文字列フォーマットは、多くの場面で利用されますが、ローカライズの過程で誤ったフォーマット指定子を使用してしまうと、期待した表示にならない、またはクラッシュの原因となることがあります。

このため、正しいフォーマット指定子の使用が重要です。

// フォーマット指定子の使用例
let count = 3
let formattedString = String(format: NSLocalizedString("%d items", comment: "アイテム数"), count)
print(formattedString) // 英語の場合: "3 items", 日本語の場合: "アイテム3つ"など

このコードでは、アイテム数を示す整数としてのcountを、ローカライズされた文字列に組み込む方法を表しています。

%dは整数を表すフォーマット指定子であり、これによって変数の値が文字列に埋め込まれます。

●カスタマイズ方法

多言語対応を進める上で、既存のNSLocalizedStringでは対応しきれない場面や、より効率的、効果的に多言語対応を進めたい場面もあります。

ここでは、Swiftでのカスタマイズ方法をいくつか紹介します。

○サンプルコード15:カスタムローカライズ関数の作成

このコードでは、既存のNSLocalizedStringを更に拡張して、使いやすくカスタマイズした関数の作成を紹介します。

この例では、よく使う文字列のパラメータや、特定のフォーマットに即したローカライズを簡易に行うためのカスタム関数を作成しています。

import Foundation

// カスタムローカライズ関数
func local(_ key: String, _ args: CVarArg...) -> String {
    let format = NSLocalizedString(key, comment: "")
    return String(format: format, arguments: args)
}

このコードのlocal関数は、NSLocalizedStringをラップしており、可変長引数を受け取ることができます。

そのため、フォーマット指定子を含むローカライズ文字列に対しても、直感的に値を埋め込むことができます。

このカスタム関数を使用すると、次のようにコードを簡潔に書くことができます。

let item = "apple"
let price = 100
let message = local("The price of %@ is %d dollars.", item, price)
print(message)

これにより、itempriceの値が、適切にローカライズされた文字列に埋め込まれ、コンソールに出力されます。

○サンプルコード16:多言語テキストのスタイル変更

時として、異なる言語でテキストのスタイルを変えたい、というケースが出てきます。

たとえば、特定の言語ではテキストを太字にしたり、色を変更したりしたい場合などです。

下記のサンプルコードは、そのようなケースに対応する方法を表しています。

import UIKit

// 言語に応じてテキストスタイルを変更する関数
func stylizeText(_ text: String, language: String) -> NSAttributedString {
    var attributes: [NSAttributedString.Key: Any] = [:]

    switch language {
    case "ja":
        attributes[.font] = UIFont.boldSystemFont(ofSize: 20)
        attributes[.foregroundColor] = UIColor.red
    case "en":
        attributes[.font] = UIFont.systemFont(ofSize: 18)
        attributes[.foregroundColor] = UIColor.blue
    default:
        attributes[.font] = UIFont.systemFont(ofSize: 18)
        attributes[.foregroundColor] = UIColor.black
    }

    return NSAttributedString(string: text, attributes: attributes)
}

このコードでは、stylizeText関数にテキストと言語コードを渡すことで、言語に応じてテキストのスタイルを変更できます。

この例では日本語のテキストは赤色と太字、英語のテキストは青色と標準のフォントで表示するようにしています。

これによって、多言語でのUI表示において、それぞれの言語や地域に合わせた最適な表示が可能となり、ユーザーエクスペリエンスの向上が期待できます。

○サンプルコード17:ローカライズリソースの外部管理

プロジェクトが大規模になると、多言語対応のリソースを一つの場所で管理するのが難しくなることがあります。

このコードでは、外部のサービスやツールを使用してローカライズリソースを管理する方法を紹介します。

この例では、外部のJSONファイルを使用してローカライズリソースを管理しています。

まず、次のような形式のJSONファイルを考えます。

{
    "ja": {
        "welcome": "ようこそ",
        "thanks": "ありがとう"
    },
    "en": {
        "welcome": "Welcome",
        "thanks": "Thank you"
    }
}

次に、SwiftでこのJSONファイルを読み込み、適切な言語リソースを取得する方法を紹介します。

import Foundation

class LocalizeManager {
    static let shared = LocalizeManager()
    private var data: [String: [String: String]]?

    private init() {
        if let url = Bundle.main.url(forResource: "localization", withExtension: "json"),
           let data = try? Data(contentsOf: url),
           let decoded = try? JSONDecoder().decode([String: [String: String]].self, from: data) {
            self.data = decoded
        }
    }

    func localizedString(for key: String) -> String {
        let languageCode = Locale.current.languageCode ?? "en"
        return data?[languageCode]?[key] ?? key
    }
}

このLocalizeManagerクラスはシングルトンパターンを使用しています。

初期化時にlocalization.jsonを読み込み、指定されたキーに対応するローカライズされた文字列を返すlocalizedString関数を提供しています。

これを使用すると、次のようにローカライズされた文字列を取得することができます。

let welcomeText = LocalizeManager.shared.localizedString(for: "welcome")
print(welcomeText)

上記のコードを実行すると、現在のロケールに合わせた「ようこそ」または「Welcome」といった文字列がコンソールに出力されます。

この方法を採用することで、ローカライズリソースを外部で一元管理し、プロジェクトの柔軟性とスケーラビリティを向上させることが可能です。

○サンプルコード18:動的に言語を切り替える方法

アプリケーション内で動的に言語を切り替えるニーズは高まっています。

特に多国籍のユーザーをターゲットとするアプリでは、ユーザーがアプリ内で好きな言語に切り替えることが求められます。

このコードでは、アプリ実行中に言語を動的に切り替える方法を示します。

まず、アプリの設定を変更するための関数を用意します。

func setAppLanguage(_ language: String) {
    UserDefaults.standard.set([language], forKey: "AppleLanguages")
    UserDefaults.standard.synchronize()
}

この関数は、指定された言語コードをAppleLanguagesキーに保存します。

これにより、アプリを再起動すると、新しく設定された言語でアプリが表示されます。

例として、アプリを日本語に切り替える場合は、次のように使用します。

setAppLanguage("ja")

言語を切り替えた後、アプリを再起動することで、指定された言語での表示が反映されます。

この方法を利用することで、ユーザー自身の手で言語を切り替えることができるようになります。

●追加のヒント

Swiftの多言語対応では、基本的なNSLocalizedStringを中心とした方法以外にも、さまざまな方法やツールが存在します。

これらのツールやライブラリを利用することで、より効率的かつ高度な多言語対応が可能となります。

ここでは、第三者のライブラリやNSLocalizedString以外の方法をいくつか紹介します。

○サンプルコード19:第三者ライブラリを使用した多言語対応

第三者のライブラリを使用することで、高度な多言語対応や、より効率的な作業が可能となります。

このコードでは、有名な「SwiftyLocalize」ライブラリを使った多言語対応の例を紹介します。

この例では、SwiftyLocalizeを使ってローカライズを実施しています。

まず、CocoaPodsやCarthageなどを使用して「SwiftyLocalize」ライブラリをプロジェクトに追加します。

次に、SwiftyLocalizeの基本的な使用方法を次のサンプルコードで紹介します。

import SwiftyLocalize

let welcomeText = SwiftyLocalize.localizedString("welcome_key")
print(welcomeText)

上記のコードでは、指定されたキーに対応するローカライズされた文字列を取得し、コンソールに出力しています。

SwiftyLocalizeライブラリを使用することで、より効率的に、かつ高度な多言語対応が実現できます。

○サンプルコード20:NSLocalizedString以外の多言語対応方法

NSLocalizedStringは非常に一般的なローカライズ方法ですが、それ以外にもいくつかの方法があります。

このコードでは、Property Listを使用したローカライズの方法を示します。

まず、次のような形式のProperty Listファイルを作成します。

<dict>
    <key>ja</key>
    <dict>
        <key>welcome</key>
        <string>ようこそ</string>
        <key>thanks</key>
        <string>ありがとう</string>
    </dict>
    <key>en</key>
    <dict>
        <key>welcome</key>
        <string>Welcome</string>
        <key>thanks</key>
        <string>Thank you</string>
    </dict>
</dict>

次に、SwiftでこのProperty Listファイルを読み込み、ローカライズされた文字列を取得する方法を紹介します。

import Foundation

class PlistLocalizeManager {
    static let shared = PlistLocalizeManager()
    private var data: [String: [String: String]]?

    private init() {
        if let path = Bundle.main.path(forResource: "Localize", ofType: "plist"),
           let dict = NSDictionary(contentsOfFile: path) as? [String: [String: String]] {
            data = dict
        }
    }

    func localizedString(for key: String) -> String {
        let languageCode = Locale.current.languageCode ?? "en"
        return data?[languageCode]?[key] ?? key
    }
}

上記のPlistLocalizeManagerクラスは、指定されたキーに対応するローカライズされた文字列をProperty Listファイルから取得する機能を提供しています。

まとめ

Swiftでの多言語対応は、グローバルに展開するアプリケーションを作成する上で非常に重要なスキルとなります。

この記事では、基本的なNSLocalizedStringを中心に、多言語対応の実装方法、注意点、カスタマイズ方法など、詳細なサンプルコードとともにその方法を解説しました。

また、第三者のライブラリやNSLocalizedString以外のローカライズ手法も取り上げ、さまざまなシチュエーションに応じた最適な方法を選択できる知識を提供しました。

特に、プロジェクトの規模や要件に応じて適切なローカライズ手法を選択することは、効率的な開発と高品質なアプリの提供につながります。

最後に、多言語対応の実施は、単に言語の違いを吸収するだけでなく、文化や地域の特性を考慮することも重要です。

実際のユーザー体験を考慮し、それぞれの言語や地域のユーザーに適切なコンテンツやUIを提供することで、グローバルな市場での成功を目指しましょう。

Swiftのプログラミングにおいて、多言語対応は欠かせないスキルの一つです。

今後も技術の進化や新しい方法が登場する可能性がありますので、常に最新の情報やベストプラクティスを追求することが大切です。

この記事が、あなたのSwiftでの多言語対応の実践に役立つ情報となることを願っています。