0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

String Catalogへの移行の備忘録

Last updated at Posted at 2025-01-29

目的

アプリ内の文言管理で元々多言語対応も可能なようLocalizable.stringsを用いていたが、SwiftUIへの移行タイミングでString Catalog(xcstrings)に移行する方針となったため移行に際しての手順と手間取った事柄の解決手順を備忘録として残す。

移行手順

Localizable.stringsの右クリックメニューからMigrate to String Catalogを選択する
Localizable.stringsがLocalizable.xcstringsに変換される。

Localizable.stringsは自動的に削除されるがSwiftGenとの紐付けがされているためそれを解除する。

文字列の呼び出し方

各文言にKeyが設定され、Text("Key")といった形式で簡潔に呼び出すことができる。
stringsからxcstringsへの移行でKeyも移行されるため、少しの修正でそのまま利用できるが移行を行ったプロジェクトではいくつか問題が発生した。

問題1:Keyがそのまま表示される

Bundleの指定をしなかったことが原因。
BundleがnilだとmainのBundleが指定されてしまうので、リソース取得のため別途指定の必要があった。
その他リソース用にBundleアクセス用のクラスが作成されていたのでそれを利用するようExtensionに追加を行った

問題2:ベタ書きの文言

SwiftUI移行中ということもあり、Preview下以外にPreview用のViewを用意してベタ書きのTextを表示をしている部分やText("・")のように記号1文字のみTextで表示している部分などが自動的にKeyと見なされてしまいxcstringsにKeyが登録されてしまった。

一時的な措置としてText(verbatim:"・")といった書き方に変更することでxcstringsに登録されなくなり、想定されたKeyと文言のみファイルに登録されている状態となった。

自動で登録されてしまったものはそのままの状態ではxcstringsの-ボタンで削除できないが、インスペクタからManagedをAutomatically→Manuallyに変更すると削除できる。

問題3:変数を含む文言が変換後そのままでは扱えない

元々のstringsでは文言中のパラメータの指定子は型に関わらず%@で統一されていたが、xcstringsに移行後は型によって形式を変更する必要があった。
またstringsではKeyにパラメータ指定子は含まれなかったため、Keyに指定子を入れ込む必要があった。

このため、各文言の使用箇所を確認してパラメータの型を確認した上でKeyと文言に正しい指定子を入れて動作を確認するという手間がかかり今回発生した問題では最も時間がかかった。

StringCatalog_arg.png

指定子
String %@
Int %lld
Int8 %d
Int16 %d
Int32 %d
Int64 %lld
Float %f
Float32 %f
Float64 %lf
CGFloat %lf
Double %lf

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?