🐷

XLIFFを使ったSwiftUIアプリのローカライズ

2022/11/10に公開

SwiftUIアプリをローカライズする際に、XLIFFファイルをエクスポート・インポートして編集する方法を解説します。

基本的なローカライズ

準備

  1. XcodeでSwiftUIの新規プロジェクトを作ります。
  2. ContentViewを以下のように編集し、"Hello"を翻訳します。
struct ContentView: View {
    var body: some View {
        Text("Hello")
    }
}

*古いプロジェクトではBuild SettingsからUse Compiler to Extract Swift StringsがYesになっていることを確認してください。

エクスポート

PROJECTのLocalizationにローカライズしたい言語を追加します。

メニューバーのProduct > Export Localizations…からDesktopなど好きなところにエクスポートします。

XLIFFを編集する

エクスポートしたフォルダのja.xclocをダブルクリックするとXcodeで編集できます。(Xcode13以降)
Finderでxclocを右クリックしてパッケージの内容を表示すると、xliffファイルなども確認できます。
ちなみにXcodeで編集してもいいのですが、Xliff Editorが使いやすくておすすめです。

インポートする

エクスポートした際と同じようにメニューバーのProduct > Import Localizations…からja.xclocインポートすると、.stringsファイルがつくられます。
この時にローカライズされてないテキストがあると警告が表示されます。

ここまでが基本的なローカライズの方法です。

ローカライズされないケースを把握する

以下のようなコードはエクスポートした際にHelloが含まれません。(Helloがローカライズされません)

struct ContentView: View {
    let hello = "Hello"
    var body: some View {
        Text(hello)
    }
}

これは、変数helloがLocalizedStringKeyではなくStringになっているので、以下のように型をつけるとローカライズされます。

let hello: LocalizedStringKey = "Hello"

もしくはString(localized:_)のイニシャライザを使ってもローカライズされます。

let hello = String(localized: "Hello")

*こちらはiOS 15以降からなので、iOS 14以前ではNSLocalizedStringを使えます。

逆に、ローカライズしたくない時はTextのinit(verbatim:)イニシャライザを使うとローカライズされません。アプリ名などローカライズさせたくないところに使えます。

Text(verbatim: "Hello")

tableやcommentを活用する

TextやStringのイニシャライザのtableやcommentを利用すことで、同じような種類のテキストをまとめたり、後でローカライズする際のメモや、ローカライザーに伝えたいことを追加したりできます。

let book = String(localized: "Book", comment: "本という意味のBook")
let bookButtonTitle = String(localized: "Book", table: "Buttons", comment: "予約すると意味のBook")

このようにすると、同じ意味のテキストも後からわかりやすくなるのと、Buttons.stringsにボタンのテキストをまとめたりできます。

Discussion