私のXcodeはv10で、iOS 12をターゲットにしたSiriKitのカスタムインテントを開発しています。
Xcode 10では、カスタムインテントは.intentdefinitionファイルで設計されており、インテントフレーズの独自のパラメーター、インテントのタイトル、およびSiriそのインテントのショートカット)を定義できます。プロジェクトのビルド.intentdefinitionファイルを使用すると、XcodeはそのインテントのINIntent派生クラスを自動的に生成します。
私の問題は、インテントのタイトルがシステムの言語で一般的に表示されるように英語以外の言語をサポートするために> Siri&ユーザーがカスタムインテントのショートカットを操作できるときに検索することです。 .intentdefinitionファイルにローカライズされたインテントタイトルを提供する必要があります。
ファイルインスペクターで.intentdefinitionファイルに別の言語を追加して、プロジェクトをビルドしようとすると、次のようになります。
duplicate output file '/Users/.../IntentDefinitionGenerated/Intents/MyCustomIntent.Swift' on task: IntentDefinitionCodegen /Users/.../ru.lproj/Intents.intentdefinition
これはXcodeが.lproj
フォルダー内の複数の.intentdefinitionファイルを参照し、それぞれに同じ名前のクラスを生成しようとするために発生している可能性があります。
IOS 12用に.intentdefinitionファイルをローカライズするにはどうすればよいですか?
インテント定義ファイルはすでにローカライズされているようです(Xcodeがru.lproj
フォルダー)なので、「ソースのコンパイル」ビルドフェーズでファイルのコピーが2つあることが問題である可能性があります。
ここに行く:
Project -> App target -> Build Phases -> Compile Sources
重複するエントリを探します。重複が見つかった場合は、コピーの1つを削除します
Editor > Validate Settings…
重複を見つける
ビルドをクリーンアップすることもできます
@ desmond-humeと同じ問題がありました。私の場合、「Base」が利用可能になる前にローカライズがすでに含まれている古いxcodeプロジェクトがあります。最初の.intentdefinitionファイルは、ベースローカリゼーションとして追加する必要があります。そこから、さらにローカリゼーションを追加できます。Xcodeは、ローカリゼーションごとに.stringsファイルのみを追加します。
ベースのローカリゼーションがない場合、Xcodeはローカリゼーションごとに新しい.intentdefinitionを追加し、「複数のコマンドが生成する...」エラーを引き起こします。
チェックボックスを使用して、メインプロジェクト設定の下にベースローカリゼーションを追加できます。一部の古いプロジェクト(私のような)もこの問題に遭遇する可能性があります: iOS-ベースのローカリゼーションペインの使用は常に空です
私は最近アプリのインテントをローカライズしましたが、元のローカライズ後に、別のインテントを追加しました。
Xcode 10.2.1では、少なくとも確認しましたが、プロジェクトの最上位を選択すると、「ローカライズ用にエクスポート」オプションがあります。出力を保存するように求められます。出力を調査すると、サポートする言語ごとに.xclocフォルダーが表示されます。 「ローカライズされたコンテンツ」の下の.xliffを掘り下げて開きます。
そこにあなたはアイテムの宝庫を見つけ、あなたは探しています、そしてあなたは「ターゲット」を持っていないアイテムを探しています
Appleのエンジニアがこれを示しましたが、編集してから再インポートする必要があるため、私はこのプロセスに不満がありました。ファイルを翻訳者に送信し、.xliffを取り戻します。
Intentsの煩わしさは、任意のIDを使用し、読みやすいものではないという事実です。
欠けている翻訳を見つけるための簡単な方法は(まだ)見つかりません。お役に立てれば!