web-dev-qa-db-ja.com

ローカライズされた文字列Xcode 4 ... .stringsファイルのコピーエラー検証に失敗しました

Xcode 4でローカライズされた文字列を定義するにはどうすればよいですか?

「Localization」プロパティ(ファイルインスペクター、右パネル)を使用して、InfoPlist.stringsに言語を追加できると仮定しました。

...次に、各ローカライズバージョンで「キー」=「値」を入力します。

しかし、プロジェクトをビルドすることはできません。私はこのエラーを受け取ります:

.stringsファイルのコピーエラー検証に失敗しました:データが破損しているため、データを読み取ることができませんでした。

テキストエンコーディングをUTF 16に変換しても問題は解決しません。 Xcodeを終了して再起動することもありません。

Q1:ビルドエラーを修正するにはどうすればよいですか?

いくつかの冗談で、InfoPlist.strings(フランス語)と(英語)を追加して実行するテストアプリを取得することができました。フランス語の文字列ファイルではエラーが発生しませんでしたが、英語ではエラーが発生しました。だから、私は英語のものだけを残し、フランス語のものにパラメータを置くだけです。ただし、シミュレーターでは、フランス語に設定されています-パラメーターは選択されませんでした。 NSLocalizedString()で指定されたデフォルトに戻しました

Q2:ビルドエラーが修正された場合でも、どのように機能させることができますか?

65
user433579

行の終わりにセミコロンが欠落しているのと同じくらい簡単です。

237
Tyler A.

ローカライズファイル内でエラーを見つけるのと同じ問題がありました...

ターミナルでplutilツールを使用してファイルを変換すると、行番号を含む適切なエラーメッセージが表示されます。

plutil -lint Localizable.strings

応答

plutil [74058:707] CFPropertyListCreateFromXMLData():古いスタイルのplistパーサー:422行目の辞書にセミコロンがありません。解析は中止されます。 _CFPropertyListMissingSemicolonでブレークしてデバッグします。 Localizable.strings:行1の予期しない文字 "

98
TomTom

はい、500件の翻訳をたどりました

2番目の文字列のKISSは、別の二重引用符エラーの内側にある二重引用符で囲まれています

"Before using KISS Remixer, you must agree to the terms and conditions of use." = "Vor der Nutzung des Remixers "KISS" müssen Sie die Allgemeinen Geschäftsbedingungen akzeptieren.";

これで結構です

"Before using KISS Remixer, you must agree to the terms and conditions of use." = "Vor der Nutzung des Remixers KISS müssen Sie die Allgemeinen Geschäftsbedingungen akzeptieren.";

これはそのまま(二重内の単一引用符に置き換えてください)

"Before using KISS Remixer, you must agree to the terms and conditions of use." = "Vor der Nutzung des Remixers 'KISS' müssen Sie die Allgemeinen Geschäftsbedingungen akzeptieren.";

ヒントバイナリ検索を使用して、問題のある行を見つけます。

  1. 翻訳者からローカライズされたファイルを取得します。
  2. すべてのLoclaizable.stringsをプロジェクトのローカライズされたフォルダーにコピーします。
  3. XCODEを開く
  4. すべて削除-iOSデバイス/すべてのシミュレーターで
  5. 構築する
  6. .stringsファイルのコピーエラー検証に失敗しました:データが破損しているため、データを読み取ることができませんでした。
  7. ログナビゲーターを開く
  8. どの翻訳が破損しているかを確認します。
  9. TextWranglerでLocalizable.stringsを開きました。ツールバーの下部にあるTranslatorはUTF-16ファイルを

UTF-16リトルエンディアンは、それを「UTF-16」に戻しました。10.ビルド/ビルドの同じエラーを削除しました。

ファイルのどこかにあります

セミコロンがありませんか?

/* popup message */
"Save mix" = "Enregistrer le mixage";

/* popup message */
"Save mix" = "Enregistrer le mixage"

「二重引用符内の追加の「二重引用符」」

違う

/* popup message */
"Save mix" = "Enregistrer le "mix" age"

/* popup message */
"Save mix" = "Enregistrer le mixage"

また右

/* popup message */
"Save mix" = "Enregistrer le 'mix'age"
  • 2つの場所で二重引用符で「KISS」を見つけたファイルに複数のエラーがある可能性があることに注意してください
14
brian.clear

ファイルのエンコードを確認してください。これは多くの場合、拡張文字(アクセント記号付き文字など)と非UTFエンコードが原因です。特に、XCode 4にはバグがあり、アクセント記号付きの文字をSafariから文字列ファイルにコピーすると、Western Mac OS Romanとして保存されます。

8
Dan Bennett

XCodeの構文チェッカーがこれを理解できないのは残念です。

また、テキストをText Wrangler(翻訳者からファイルを受け取った後に行うこと)にコピーして、適切に引用された文字列をチェックしたり、セミコロンの正規表現チェックを実行することもできます。 Text Wranglerの構文の色分けは、XCodeの文字列エディターでは現在表示されていない引用符で囲まれた(またはエスケープされていない)文字列を表示します。

7
MOK9

私の場合、 plutil -lint Localizable.stringsは、生成したエラーメッセージが「Unexpected character " at line 1 "実際のエラーがの代わりに"行2340で。

4
BenRW

私の場合、それはウェブサイトからコピー&ペーストされた「引用」記号の問題であり、受け入れられませんでした。

シンタックスハイライトが機能しないことを検出する必要がありましたが、「引用符、キー、引用符、等号、引用符、値、引用符...」というソースを読みました。

2
Kheldar

ローカライズで二重引用符「」を使用する場合は、バックスラッシュを使用してエスケープすることを忘れないでください。

2

このような構文を確認する必要があります

"Recharge_Data" = "Data";

1)「」は適切な場所にある必要があります。

2)=チェックする必要があります。

3);ステートメントの最後にある必要があります。

1
Nico

私は1時間から大きなローカライズされたファイルに対して同じ問題を抱えており、上記のすべての手順を適用しても問題は解決しません。 、c ...そしてファイルからそれらの文字列を切り取り、テキストファイルにそれらを保持し、part-kだけが残っているポイントに到達するまでプロジェクトを再度ビルドします。間違って押したことがわかりました- fキーボードで..fewww!解決しました。私はこれが解決策ではないことを知っていますが、私のような人の助けになるかもしれません:)

0
Hemang

友達がWindowsで翻訳してくれました。エンコーディングの変更は役に立たないことがわかったので、私がやったこと:すべての文字列をコメントし、コメントを外してcmd-Bを押して、どの文字列に問題があるかを見つけました。次に、問題の文字列を手動で書き直した後、それが機能しました。

0
Shmidt

私も同じ問題を抱えています。約60ページのローカリゼーションファイルがあり、「多すぎます-見つけるのに時間がかかりました」

0
user1607498