翻訳済みと表示されたままの古い翻訳を見つけるには、変更したソースメッセージを String Catalog の項目までたどり、ビルドして、文言を比較します。すでに特定した不一致は、緑のチェックマークだけでは解消できません。
このワークフローは、既存の .xcstrings カタログを使って Xcode で Mac アプリを保守している方向けです。目的は、英語のソースを編集した後に確認が必要な翻訳を特定し、使える既存の文言を残し、修正したメッセージが実行中のアプリに反映されていることを確認することです。
ソースメッセージが変更されたとき、どうなるべきか
Apple のドキュメントによると、ソース文字列を変更すると、その翻訳にはレビューが必要であることが示されます。カタログでは、未翻訳の文字列(New)、確認が必要な文字列(Needs Review)、緑のチェックマークが付いた翻訳済みの文字列が区別されます。別の状態である Stale は、Xcode が以前に翻訳された文字列をコード内で見つけられなくなったことを意味します。String Catalog を確認する
この問題を診断する際には、用語の違いが重要です。アプリで引き続き使われているメッセージの古い翻訳は、レビューが必要な項目です。カタログの Stale 状態だけを検索すると、見逃す可能性があります。
ソース変更時の動作について Apple が説明している内容から、期待される結果は分かりますが、特定の項目がなぜ翻訳済みの状態を保ったのかまでは分かりません。そのような場合は、チェックマークだけで文言が最新だと判断せず、編集したソースとカタログの対応関係を調べてください。
翻訳を確認する前に、対象のメッセージを特定する
まず、変更したメッセージを1つ選びます。変更前と変更後の英語の文言、別途設定されている場合は検索キー、カタログ名を記録します。この簡単な比較記録は、Xcode の機能ではなく、診断に役立つ手段として推奨するものです。似た項目が複数ある場合に、具体的な確認材料になります。
たとえば、デスクトップのボタンに以前は Open item と表示され、現在は Open selected items と表示されるとします。確認すべきなのは、複数項目を選択できる場合も含めて、それぞれの翻訳が現在の選択項目を開くことを表しているかどうかです。Open という単語の翻訳を見つけるだけでは、この疑問には答えられません。
検索キーと表示される文言を区別する
Swift では、明示的な静的検索キーと、それとは別の defaultValue を指定できます。このデフォルト値は通常、開発言語のテキストであり、検索に失敗した場合に使われます。comment は翻訳者向けのコンテキストを示します。テーブルを指定しない場合、検索には Localizable が使われます。バンドルを指定しない場合、アプリのメインバンドルが検索対象になります。Swift の明示的なキーを使う文字列イニシャライザ
これらの要素を区別するには、次の例示的なメッセージ記録を使ってください。値は説明用に作成したもので、カタログファイルや実行可能なプログラムではありません。
| 要素 | 編集前 | 編集後 |
|---|---|---|
| 検索キー | selection.open |
selection.open |
| 英語のソース値 | Open item |
Open selected items |
| 翻訳者向けコンテキスト | 1つの項目を開くボタン |
現在選択されているすべての項目を開くボタン |
| カタログテーブル | Localizable |
Localizable |
この例では、メッセージが変わっても識別子は同じです。キー名だけを比較する監査では、この編集を見落とします。ソース値とコンテキストも比較してください。
Swift のローカライズ呼び出しの中には、開発言語の文言をキーとして使うものもあります。Apple は、補間を含め、String.LocalizationValue がこの方式をサポートすると説明しています。この方式では、文言を変更すると検索キーも変わる場合があります。そのため、翻訳が1つの識別子に引き続き紐づいていると決めつけず、変更前と変更後の両方の項目を確認してください。String.LocalizationValue
ビルドしてソースの場所を確認する
Xcode で Product > Build を選び、プロジェクトナビゲータで対象のカタログを選択します。Apple のドキュメントによると、ビルドするとコード内のローカライズ可能な文字列の変更がカタログに反映されます。Editor > Assistant を選び、キーを選択してソースの場所を確認します。String Catalog を使ったテキストのローカライズとバリエーション
カタログのソーステキストを、意図した編集内容と比較します。カタログにまだ Open item と表示されている場合は、まず新しいソースがその項目に反映されていない理由を調べてください。古いソースを基準に対象言語の翻訳を確認しても、元の問題は解決しません。
特にプロジェクトに複数のカタログやモジュールがある場合は、ローカライズ呼び出しのテーブルとバンドルを確認します。Apple のドキュメントでは、テーブル名を渡してカタログを選択できること、メインアプリのバンドル以外の文字列には適切なバンドルを指定できることが説明されています。また、Xcode がユーザー向けテキストを検出できるよう、ローカライズ対応 API を使うことも推奨されています。アプリのテキストを翻訳に備えて準備する
手動管理の項目については、ソースを直接確認して保守してください。Apple によると、ビルド時の同期では手動管理の文字列は更新も削除もされません。ビルドするだけで更新されるとは考えないでください。String Catalog を確認する
ソース変更の判断表を使って意味を比較する
現在のソースが反映されたら、対象言語を選び、該当する項目を調べます。Xcode ではテキストでフィルタリングしたり、状態で並べ替えたりできるため、確認が必要な項目を見つけるのに役立ちます。ステータスが翻訳済みのままでも、変更したメッセージを個別に確認してください。String Catalog を確認する
次の判断表は、自動翻訳評価ではなく、メッセージの意味を比較して作成したものです。英語の例は説明用に作成しています。ソースを編集するたびに対象言語の文言も変える必要があると決めつけず、翻訳者に何を確認してもらうかを判断するのに役立ちます。
| ソースの変更例 | 確認する内容 | レビュー時の判断 |
|---|---|---|
Open item → Open selected items |
選択範囲と単数・複数の意味 | 翻訳が引き続き操作全体を表しているか確認する。 |
Show details → Hide details |
操作の方向 | 翻訳された操作もそれに応じて変わっているか確認する。 |
Items → Items: |
句読点とラベルの配置 | 文脈に合っている場合にのみ、その文言を維持する。 |
Open のままでも、使われ方が変わる |
ラベルが別の操作を表すようになったか | ソーステキストが同じでも、コンテキストを確認する。 |
候補ごとに、以前のメッセージの意味、現在のメッセージの意味、翻訳が今伝えている内容の3点を比較します。ソースに目に見える変更があればレビュー候補になりますが、それだけで翻訳文言も変更が必要だと証明されるわけではありません。
コンテキストだけの変更も、明示的に確認してください。Apple はコメントを翻訳者向けのガイダンスとして説明していますが、取得したドキュメントからは、コメントの編集が必ず既存の翻訳を無効にするとは確認できません。英語のラベルが変わっていなくても意味が変わった場合は、自分でレビュー対象に加えてください。アプリのテキストを翻訳に備えて準備する
メッセージに数やデバイス固有のバリエーションが含まれる場合は、親行だけを確認せず、それぞれのバリエーションを展開してください。Apple のドキュメントでは、カタログ内で複数形やデバイスごとのバリエーションを扱えると説明されています。英語では、数に応じて 1 item と 2 items が必要になる場合があります。英語の文法をそのまま当てはめず、対象言語ごとに該当する形式を確認してください。String Catalog を使ったテキストのローカライズとバリエーション
使える翻訳を残しながらレビューを解決する
項目のコンテキストメニューを使い、疑わしい翻訳をレビュー対象としてマークします。既存の文言を確認した結果、そのまま使える場合は Mark as Reviewed を選び、それ以外の場合は翻訳を更新します。Apple の String Catalog ガイドでは、これらのレビュー操作が説明されています。String Catalog を確認する
変更したソースと比較する間は、既存の文言を残してください。曖昧さを減らすためだけに翻訳を消すと、役立つ比較材料がなくなります。同様に、翻訳が古いという理由だけで項目を削除するのも避けてください。まず、アプリがそのキーを引き続き使っているか確認します。
選択項目の例を翻訳者に渡す場合は、キー selection.open、Open item から Open selected items への変更、ボタンが選択された項目をすべて開くという説明を含めると役立ちます。これにより、翻訳者は具体的な操作と対象範囲を評価できます。
ここには実務上の限界があります。このワークフローのために取得した Apple のドキュメントには、翻訳済みの項目に含まれる見逃されたソース変更をすべて遡って再構築するコマンドは説明されていません。以前の文言を参照できない場合、現在のソースと現在の翻訳を確認することはできますが、不一致がいつ始まったのかを正確に特定することはできません。変更前後の比較が必要な場合は、利用できる過去のプロジェクトリビジョンまたは保存済みのソースコピーを使ってください。
Mac アプリで修正したメッセージを確認する
編集後は、実際のインターフェイスでテストします。Product > Scheme > Edit Scheme を選び、Run を選択して Options を開き、App Language で対象言語を選びます。ダイアログを閉じ、Mac の実行先を選んでアプリを実行します。Apple は、このスキームを使ったローカライズテストを説明しています。アプリ実行時にローカライズをテストする
調査のきっかけになったコントロールに戻ります。Open selected items の場合は、項目を1つ選択した場合と複数選択した場合を試します。どちらの状況でもラベルが操作を表しているか、表示された文言が編集したカタログ項目と一致しているかを確認してください。この時点で不一致があれば、検索キー、テーブル、バンドル、または該当するバリエーションを再確認します。
最後に、対象言語ごとの対応状況を明確にします。既存の文言をそのまま使える、翻訳を更新した、またはレビュー中のいずれかです。カタログの状態を判断材料として、変更したメッセージとインターフェイス上の動作を確認すれば、作業は完了です。
出典
- String Catalog を使ったテキストのローカライズとバリエーション — Apple
- String Catalog を確認する — Apple
- init(localized:defaultValue:table:bundle:locale:comment:) — Apple
- String.LocalizationValue — Apple
- アプリのテキストを翻訳に備えて準備する — Apple
- アプリ実行時にローカライズをテストする — Apple