web-dev-qa-db-ja.com

Localizable.stringsファイル.. xcode4

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

39
MonsterK

ここでは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がアプリに表示されたときにのみ、実行時に現れます。ただし、ビルドプロセスでセミコロンがチェックされた場合は便利です。ファイルを編集するときに追加するのを忘れがちです。

95
McCygnus

アップルごと:

テスト中に問題が発生し、文字列を取得するための関数とマクロが常に(変換された値ではなく)同じキーを返すことがわかった場合、文字列ファイルで/ usr/bin/plutilツールを実行します。文字列ファイルは、本質的に特別な方法でフォーマットされたプロパティリストファイルです。 -lintオプションを指定してplutilを実行すると、文字列が正しく取得されないようにする隠し文字やその他のエラーを発見できます。

コンソールウィンドウを起動し、プロジェクトフォルダーに移動して、次の操作を行います。

/usr/bin/plutil -lint ja.lproj/Localizable.strings

(明らかに正しい言語フォルダー名を置き換えます)。これにより、問題の正確な場所がわかります。

65
Ser Pounce

.stringsファイルのすべての行はセミコロンで終わる必要があります。それは私のために働いた。

18
Muhammad_Awaab

ローカライゼーションをApple Notesからインポートした後、今日同じ問題が発生しました。原因は本当に微妙でした。標準の二重引用符は斜めの二重引用符と交換されていました。

斜めの二重引用符:”

標準二重引用符: "

7
Nigel

私はこの同じエラーに苦しんでいて、いくつかの同様の問題を抱えていましたが、詳細は異なりました。まず最初に、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などのテキストエディターでこれを行う必要があります。

3
Brian Webster

Xcode 10.1では、セミコロンが1つ欠けていると、次のエラーでコンパイルが停止します。

Localizable.strings:読み取りに失敗しました:入力データが無効な形式であったため、プロパティリストを解析できませんでした

ところで、ファイルの内容のほとんどを一時的に削除することで、エラーがファイルに一般的なものか(エンコードの問題)、1つ以上の行に固有のものかを確認できます。その後、エラーが戻るまでコンテンツを段階的に追加して、問題を特定できます。

2
arlomedia

私の問題は、私が忘れていたことでした;のいずれかの行

0
Vlad Pulichev

次の形式で文字列を宣言していることを確認してください。

"YOUR_STRING_LABEL" = "Your message";

注:忘れないでください引用符( ")、等号(=)および末尾のセミコロン(;)

0
Chintan Shah

この問題がありました。私の修正?ファイルの先頭に改行を追加します。奇妙だが、それは私のために働いた。

だから、これを持っている私のファイルの先頭に:

/* comment */
"LOCAL_APP_GRADE" = "Basic"

私がしなければなりませんでした:

[newline]
/* comment */
"LOCAL_APP_GRADE" = "Basic"

(書式を正しく取得できない-「改行」と入力せずに、単にReturnキーを押してください!)

0
tactusben

おそらく次のようなものがあります: "Bla" = "bla" ;;

重複に注意してください。シンボル。それがある場合は、適切にコンパイルされますが、実行時に失敗します。

0
Ricardo

これに関連して-文字列をLocalizable.stringsに手動でマージする場合は注意してください-NSLocalizedString()マクロから両方の文字列をコピー/貼り付けて、Localizable.stringsエントリが次の形式になるようにしました。

"KEY" = "STRING", @"COMMENT STRING COPIED ACROSS ALSO, IN ERROR";

ビット,@"xxx"ビルド時にエラーが発生しました:

読み取りに失敗しました:データが正しい形式ではないため、データを読み取ることができませんでした。

この場合、@"は、これを行った場所を特定するのに役立ちました。

0
Rob Glassey

これは、stringsファイルの読み取りエラーの標準メッセージのようです。

私の場合、それは等号ではなく(習慣のjson力)コロンでした:

"key1" = "String1";
"key2" : "String2";
"key3" = "String3";

それを=に変更し、すべて正常に機能しました。

0
gfpacheco