Xcode4では(これまでv4.0.1を使用し、昨日v4.0.2をダウンロードしました。)Localizable.stringファイルを作成し、プロジェクトをコンパイルしました。 (ご存知のように、私のソースコードはNSLocalizedStringマクロ関数を使用しています。)
しかし、私のプロジェクトはLocalizable.stringファイルでコンパイルされません。このファイルのすべてのコードをコメントに変更すると(このように-> //)、プロジェクトは完全にコンパイルされます。
その結果、問題はLocalizable.stringファイルにあります。 Googleで検索したところ、UTF-8ファイル(Localizable.string)がUTF-16に変更されていることがわかりました。そして、私はこれを試しましたが...この方法もうまくいきませんでした。
この瞬間、多くの人々がLocalizable.stringファイルを使用しようとしています。しかし、彼らは私ができないこの問題を解決するかもしれません。この問題に関する質問はあまり多くないからです。
================================================= =============
Localizable.stringファイルで、
「LOCAL_APP_GRADE」=「基本」
「LOCAL_APP_LAST_UPDATED_DATE」=「2011/04/20」
"LOCAL_MAIN_MENU_TITLE" = "メインメニュー"
私のソースコードでは、
NSLocalizedString( @"LOCAL_MAIN_MENU_TITLE", @"" );
エラーメッセージ、
.stringsファイルのコピーエラーの検証に失敗しました:データが破損しているため、データを読み取ることができませんでした。
ここではXcode 4を想定しています。ファイルインスペクタの各Localization.stringファイルのエンコーディングについて何が表示されているかを再確認してください。このエラーが発生したとき、ファイルの1つがUTF-16ではなくMac Romanとして読み取られていたことが原因でした。エンコーディングを変更すると、警告は消えました。最初に私を夢中にさせたのは、警告がXcode 4でのみ発生していたことでした。Xcode3はそれを与えませんでした。
.stringファイルのフォーマットにも問題があります。すべての行はセミコロンで終わる必要があります。
"LOCAL_APP_GRADE" = "Basic";
"LOCAL_APP_LAST_UPDATED_DATE" = "2011/04/20";
"LOCAL_MAIN_MENU_TITLE" = "Main Menu";
しかし、これが警告の原因だとは思わない。少なくとも私はそれについて警告を見たことがない。通常、メインメニューではなくLOCAL_MAIN_MENU_TITLEがアプリに表示されたときにのみ、実行時に現れます。ただし、ビルドプロセスでセミコロンがチェックされた場合は便利です。ファイルを編集するときに追加するのを忘れがちです。
アップルごと:
テスト中に問題が発生し、文字列を取得するための関数とマクロが常に(変換された値ではなく)同じキーを返すことがわかった場合、文字列ファイルで/ usr/bin/plutilツールを実行します。文字列ファイルは、本質的に特別な方法でフォーマットされたプロパティリストファイルです。 -lintオプションを指定してplutilを実行すると、文字列が正しく取得されないようにする隠し文字やその他のエラーを発見できます。
コンソールウィンドウを起動し、プロジェクトフォルダーに移動して、次の操作を行います。
/usr/bin/plutil -lint ja.lproj/Localizable.strings
(明らかに正しい言語フォルダー名を置き換えます)。これにより、問題の正確な場所がわかります。
.stringsファイルのすべての行はセミコロンで終わる必要があります。それは私のために働いた。
ローカライゼーションをApple Notesからインポートした後、今日同じ問題が発生しました。原因は本当に微妙でした。標準の二重引用符は斜めの二重引用符と交換されていました。
斜めの二重引用符:”
標準二重引用符: "
私はこの同じエラーに苦しんでいて、いくつかの同様の問題を抱えていましたが、詳細は異なりました。まず最初に、Xcodeの内部の「builtin-copyStrings」ツールはリトルエンディアンまたはビッグエンディアンのUTF-16ファイルを処理できるように見えますが、実際にはビッグエンディアンのみを処理します。私の理論では、Xcode 3では使用されなかった追加の検証手順(おそらくplutilコマンドラインユーティリティを使用)を実行し、ビッグエンディアンUTF-16以外のツールではbarfsを実行します。しかし、完全にはわかりません。
2番目のトリックは、文字列ファイルがno BOM(Byte Order Marker)で保存されていることを確認する必要があることです。私はBBEditで.stringsファイルをいくつか編集しましたが、最終的にBOMをファイルに保存することになり、Xcode 4が適切に接続できるようになりました。 Xcode自体には、ファイルからBOMを削除する方法がないようです。そのため、BBEditやTextWranglerなどのテキストエディターでこれを行う必要があります。
Xcode 10.1では、セミコロンが1つ欠けていると、次のエラーでコンパイルが停止します。
Localizable.strings:読み取りに失敗しました:入力データが無効な形式であったため、プロパティリストを解析できませんでした
ところで、ファイルの内容のほとんどを一時的に削除することで、エラーがファイルに一般的なものか(エンコードの問題)、1つ以上の行に固有のものかを確認できます。その後、エラーが戻るまでコンテンツを段階的に追加して、問題を特定できます。
私の問題は、私が忘れていたことでした;
のいずれかの行
次の形式で文字列を宣言していることを確認してください。
"YOUR_STRING_LABEL" = "Your message";
注:忘れないでください引用符( ")、等号(=)および末尾のセミコロン(;)。
この問題がありました。私の修正?ファイルの先頭に改行を追加します。奇妙だが、それは私のために働いた。
だから、これを持っている私のファイルの先頭に:
/* comment */
"LOCAL_APP_GRADE" = "Basic"
私がしなければなりませんでした:
[newline]
/* comment */
"LOCAL_APP_GRADE" = "Basic"
(書式を正しく取得できない-「改行」と入力せずに、単にReturnキーを押してください!)
おそらく次のようなものがあります: "Bla" = "bla" ;;
重複に注意してください。シンボル。それがある場合は、適切にコンパイルされますが、実行時に失敗します。
これに関連して-文字列をLocalizable.stringsに手動でマージする場合は注意してください-NSLocalizedString()マクロから両方の文字列をコピー/貼り付けて、Localizable.stringsエントリが次の形式になるようにしました。
"KEY" = "STRING", @"COMMENT STRING COPIED ACROSS ALSO, IN ERROR";
ビット,@"xxx"
ビルド時にエラーが発生しました:
読み取りに失敗しました:データが正しい形式ではないため、データを読み取ることができませんでした。
この場合、@"
は、これを行った場所を特定するのに役立ちました。
これは、stringsファイルの読み取りエラーの標準メッセージのようです。
私の場合、それは等号ではなく(習慣のjson力)コロンでした:
"key1" = "String1";
"key2" : "String2";
"key3" = "String3";
それを=
に変更し、すべて正常に機能しました。