XLIFFを使ったSwiftUIアプリのローカライズ
SwiftUIアプリをローカライズする際に、XLIFFファイルをエクスポート・インポートして編集する方法を解説します。
基本的なローカライズ
準備
- XcodeでSwiftUIの新規プロジェクトを作ります。
- 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