Xcodeで複数形を含むローカライズフローの自動化
関連リンク
WWDC21 Streamline your localized strings
Localizing Strings That Contain Plurals
概要
上の資料を見て実装してみたところ、かなりハマって時間を溶かしたので勘所をメモ。
前提
で、SwiftUIでこのように実装しておく。お気づきと思いますがこれがキーになるのでタイポ厳禁。
Text("\(n) day(s) ago")
Text("\(n) day(s) ago", comment: "Days since last change of this user's rating.") // iOS 15
"Streamline"
stringsdictファイルを作る
とりあえずDevelopment Languageだけ作る。
Development Languageのstringsdictファイルが基準になるので、それがないとExportの対象にならない。
Localizable.strings
ファイルは自分で作らなくて良い。
フォーマット
指定する値のマッピングは以下の通り。
NSStringLocalizedFormatKey
はこのplist内で使われる変数のようだったので、トップレベルのキーと同じである必要はないようだった。(この辺りで混乱した。)
文字列で慣れない型を記述している感じで多分ここが一番つらい作業だと思う。
Exportする
Xcode 13からSwiftUIの文字列リテラルもExportの対象になった。便利すぎて鼻血出る。
なおXcodeのProduct -> Export Localizations...
は毎回ディレクトリの指定が面倒で人的ミスの元なので全くもってお勧めしない。コマンドラインでサクッと叩けるようにしておくと良い。Importも同様。
以下のMakefile
を参考にしてもらうと良い。
XCODEBUILD=xcodebuild
OPTION_XCODEPROJ=-project GTRatingSport.xcodeproj
OPTION_EXPORT_LOCALIZATIONS=-exportLocalizations
OPTION_IMPORT_LOCALIZATIONS=-importLocalizations
OPTION_EXPORT_LANG_EN=-exportLanguage en
OPTION_EXPORT_LANG_JA=-exportLanguage ja
PATH_LOCALIZATION_FILES_DIR=-localizationPath tmp/LocalizationFiles/
PATH_XCLOC_JA=$(PATH_LOCALIZATION_FILES_DIR)/ja.xcloc
PATH_XCLOC_EN=$(PATH_LOCALIZATION_FILES_DIR)/en.xcloc
export:
$(XCODEBUILD) $(OPTION_EXPORT_LOCALIZATIONS) $(OPTION_EXPORT_LANG_EN) $(OPTION_XCODEPROJ) $(PATH_LOCALIZATION_FILES_DIR)
$(XCODEBUILD) $(OPTION_EXPORT_LOCALIZATIONS) $(OPTION_EXPORT_LANG_JA) $(OPTION_XCODEPROJ) $(PATH_LOCALIZATION_FILES_DIR)
import:
$(XCODEBUILD) $(OPTION_IMPORT_LOCALIZATIONS) $(OPTION_XCODEPROJ) $(PATH_XCLOC_EN)
$(XCODEBUILD) $(OPTION_IMPORT_LOCALIZATIONS) $(OPTION_XCODEPROJ) $(PATH_XCLOC_JA)
xclocファイルを開いて翻訳を入れる
Xcode 13から綺麗なGUIができたのでなかなか楽しい作業。
多分大きい会社とかならここを外注する形になるのだと思う。
でもXcode 13インストールしてもらうのかな?それともxliff直接いじってもらうのかな?(この辺は無知なので割愛。)
人に依頼するときはSwiftUI.Textのcommentパラメータも活用すると便利そうなのでぜひ。
en.xcloc
ja.xcloc
両方更新できたらImport。
Importする
make import
これでLocalizable.strings
も自動で生成される。
自分でチマチマ管理しなくていいのか〜これ。スバラシイ。
所感
感じたデメリット
Xcode Templateとかもそうだけど、plistでマッピング書かせるのやめてほしさあった。
人間が読み書きするのには無理がある気がする。仕様もメタメタしてて複雑だし。
感じたメリット
SwiftUIの文字列リテラルを自動でローカライズ対象としてExportしてくれるのはすごく便利だと思った。
こうした公式手順に則っておくことでストアのスクリーンショット用の画像生成とかもできるらしいし、そういえば画像アセットのローカライズとかもあるみたいだし、まあXcode便利なんじゃないか。かなり。
plistパズルのピースがうまくハマった時は謎の達成感があった。けどまあ、この辺りもさらに良くなったら嬉しいなあ。
追記 2021/11/14
Xcode betaのバグで以下のような症状があったのですが、Xcode 13 beta 2で試したところ修正されていました。
Author And Source
この問題について(Xcodeで複数形を含むローカライズフローの自動化), 我々は、より多くの情報をここで見つけました https://qiita.com/toshi0383/items/921b781b56976a462a69著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .