0Pricing
Swift Academy · レッスン

String Catalogとローカライズ文字列

最新のString Catalogでテキストをローカライズします。

「String Catalogとローカライズ文字列」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

そもそもなぜローカライズするのか

ローカライズ(l10n)とは、アプリのテキストをユーザーの言語で表示することです。国際化(i18n)とは、ローカライズできるようにコードを構成することです。最初のステップは、ユーザー向けの文字列をハードコードするのをやめ、リソースカタログから取得することです。

// Hardcoded — bad for localization
// let title = "Welcome"

// Localized — looked up by key
let title = String(localized: "Welcome")

String Catalog

最新のXcodeプロジェクトでは、String Catalog(.xcstringsファイル)を使用します。これはJSONを基盤とする単一のファイルで、ローカライズ可能なすべてのキー、言語ごとの翻訳、コメントや複数形などのメタデータを一覧にします。Xcodeはコードからキーを自動抽出できます。

// Localizable.xcstrings holds entries like:
// key: "Welcome"
//   en: "Welcome"
//   tr: "Hos geldiniz"
//   ja: "Yokoso"

String(localized:)

コード内では、String(localized:)が実行時にキーを現在のロケールの翻訳へ解決します。渡したリテラルは、キーと開発言語でのフォールバックの両方として機能します。

let greeting = String(localized: "Welcome back")
let cancel = String(localized: "Cancel")
print(greeting)

翻訳者向けのコメントを追加する

Runのような単独の単語は、「実行する」と「ジョギングする」のどちらも意味する場合があります。comment:パラメータで翻訳者にコンテキストを伝えると、適切な表現を選んでもらえます。コメントは自動的にString Catalogに取り込まれます。

let runLabel = String(
    localized: "Run",
    comment: "Button that executes the user's code")

値を埋め込む

ローカライズされた文字列に実行時の値を埋め込めます。Swiftは各埋め込みをフォーマットプレースホルダーに変換するため、翻訳者は順序を入れ替えられます。言語によって、主語と数値を置く位置は異なります。

let name = "Mira"
let count = 3
let msg = String(localized: "\(name) has \(count) new messages")
print(msg)

SwiftUIでのLocalizedStringKey

SwiftUIでは、String(localized:)を直接呼び出すことはほとんどありません。テキストを受け取る多くのビューがLocalizedStringKeyを受け取るため、通常の文字列リテラルは自動的にローカライズされます。

// In SwiftUI — the literal is a LocalizedStringKey
// Text("Welcome back")        // auto-localized
// Button("Save") { save() }   // auto-localized
let key: LocalizedStringKey = "Welcome back"
_ = key

意図しないローカライズを避ける

SwiftUIはリテラルをキーとして扱うため、動的なString変数はローカライズされませんverbatim:を使用してください。

let userInput = "hello"
// Text(userInput)            // NOT a localization key
// Text(verbatim: userInput)  // explicitly raw, never localized
let verbatimKey = userInput
_ = verbatimKey

テーブルを指定する

大規模なアプリでは、文字列を複数のカタログ(テーブル)に分割します。特定のテーブルとバンドルを指定でき、フレームワークやSwiftパッケージ内に文字列を含めて配布する場合に不可欠です。

let onboardingTitle = String(
    localized: "Get Started",
    table: "Onboarding",
    bundle: .main)

LocalizedStringResource

LocalizedStringResourceは、ローカライズ可能な文字列を、後で保存して解決できる値として表します。プロセス間でも使用できるため、App Intentsやウィジェットに便利です。実際の検索は表示時まで遅延されます。

let resource = LocalizedStringResource("Order shipped")
// Resolve later, possibly in another locale context
let resolved = String(localized: resource)
print(resolved)

デフォルトのローカライズ

翻訳がない場合は、プロジェクトの開発言語がフォールバックとして使われます。コードに記述した文字列リテラルは原言語の値として扱われるため、コードの読みやすさを保ったまま、welcome_screen_titleのような生のキーをユーザーに表示せずに済みます。

// If only 'en' is translated and device is set to 'fr',
// the development-language value is shown as fallback.
let fallback = String(localized: "Settings")
print(fallback)

実用的な検索例

ここまでをまとめると、完全にローカライズされ、コンテキストが付与され、値が埋め込まれたメッセージを返す関数を作成できます。どのUIでもそのまま使用できます。

func welcomeMessage(for user: String) -> String {
    return String(
        localized: "Welcome, \(user)!",
        comment: "Greeting shown after sign-in")
}
print(welcomeMessage(for: "Ada"))

クイックチェック

SwiftUIがテキストをローカライズするかどうかをどのように判断するか、思い出してください。

まとめ

ローカライズされたテキストの基盤を構築しました。

  • 翻訳をString Catalog(.xcstrings)に保存します。
  • String(localized:)で文字列を検索し、翻訳者向けにcomment:を追加します。
  • SwiftUIでは、リテラルがLocalizedStringKeyになって自動的にローカライズされますが、変数はそうなりません。
  • フレームワークにはtable:/bundle:を、遅延解決にはLocalizedStringResourceを使用します。

よくある質問

「String Catalogとローカライズ文字列」レッスンは無料ですか?

はい。「String Catalogとローカライズ文字列」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「String Catalogとローカライズ文字列」で何を学びますか?

最新のString Catalogでテキストをローカライズします。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「String Catalogとローカライズ文字列」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. String Catalogとローカライズ文字列
  2. 複数形とStringsdict
  3. ロケール対応の書式設定
  4. 右から左への言語とレイアウト方向
← Swift Academyに戻る