user433579
user433579

Reputation: 1233

Localised Strings Xcode 4 ... Copy .strings file Error Validation failed

How do I define localised strings in Xcode 4?

I assumed I could just add languages to InfoPlist.strings using the "Localization" property (File inspector, right panel).

...and then type in the "key" = "value"s in each localised version.

But I can't build the project. I get this error:

Copy .strings file Error Validation failed: The data couldn't be read because it has been corrupted.

Converting the text encoding to UTF 16 doesn't fix the problem. Neither does quitting Xcode and starting it again.

Q1: How do I remedy these build errors?

By some fluke, I did once manage to get a test app to run adding a InfoPlist.strings (French) and (English). I didn't get the error on the French strings file, but I did with the English. So I left the English one alone, and just put a parameter in the French one. However, in the simulator, set to French - the parameter wasn't picked up. It reverted to the default specified in NSLocalizedString()

Q2: How do I get it working even if the build errors are remedied?

Upvotes: 68

Views: 35774

Answers (13)

Samuel Owino
Samuel Owino

Reputation: 745

In Xcode 14, there is a convenient solution for this issue.

Follow these steps to resolve it:

  1. Right-click on the affected Localizable.strings file.
  2. Select Open As and then choose ASCII Property List from the submenu.
  3. This action will prompt a popup that displays the line number and error message.

By following these steps, you can easily identify the problematic line and address the error in your Localizable.strings file.

See attached screenshots: Click on the localizable and select Open As menu

Xcode Alert Error Message

Upvotes: 1

Nico
Nico

Reputation: 1838

One should Check syntax like this

"Recharge_Data" = "Data";

1) "" should be there on proper place.

2) = should be checked.

3) ; should be there at end of statement.

Upvotes: 2

Abdalrahman Shatou
Abdalrahman Shatou

Reputation: 4748

If you use double quotation "" in your localisation, don't forget to escape them using a back slash.

Upvotes: 2

BenRW
BenRW

Reputation: 443

In my case, plutil -lint Localizable.strings didn't help because the error message it produced was "Unexpected character " at line 1" when the real error was a instead of a " on line 2340.

Upvotes: 6

Shmidt
Shmidt

Reputation: 16674

My friend did translation for me in Windows. I found, that changing encoding doesn't help, so what I did: I commented all of the strings, and then I uncommented a few and pressed cmd-B, to find out which strings had problems. Then I rewrote problem strings manually and after that it worked.

Upvotes: 0

TomTom
TomTom

Reputation: 2014

I had same the issue finding the errors within the localization file...

Just use the tool plutil in the terminal to convert the file and you will get a proper error message with the line number.

plutil -lint Localizable.strings

Response

plutil[74058:707] CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary on line 422. Parsing will be abandoned. Break on _CFPropertyListMissingSemicolon to debug. Localizable.strings: Unexpected character " at line 1

Upvotes: 101

Hemang
Hemang

Reputation: 27052

I'd the same issue for a big localized file from an hour and apply all above steps won't solve my problem, finally what I am done with is, devide localize file into some ranges (parts), say part-a, b, c ... and cut those strings from file, and keep those in a text file, build the project again, unless and until I reached to the point, where only part-k was left, I found that by mistakenly I pressed f on my keyboard..fewww! it solved. I know this is not a solution but may be help to someone like me:)

Upvotes: 0

user1607498
user1607498

Reputation: 79

I have had the same problem. I had a about 60 pages long localization file, and had just one " too many - took a while to spot that

Upvotes: 0

brian.clear
brian.clear

Reputation: 5327

yes just trawled through 500 translations

note the KISS in the second string is in Double quotes which are INSIDE another DOUBLE QUOTES ERROR

"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.";

This is OK

"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.";

as is this (replace with single quotes INSIDE THE DOUBLE)

"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.";

TIP USE a BINARY SEARCH to find the offending line.

  1. get localized files back from translator.
  2. copy all Loclaizable.strings into your project localized folders.
  3. Open XCODE
  4. Clean all - in iOS Device/all Simulators
  5. Build
  6. Copy .strings file Error Validation failed: The data couldn't be read because it has been corrupted.
  7. Open the log navigator
  8. See which of the translations is corrupt.
  9. I opened the Localizable.strings in TextWrangler At bottom in tool bar Translator had sent back UTF-16 file as

UTF-16 Little Endian Changed it back to just 'UTF-16' 10. Cleaned build/Build SAME ERROR

Somewhere in the file is

Missing semicolon?

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

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

"Extra "double quotes" inside double quotes"

WRONG

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

RIGHT

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

ALSO RIGHT

/* popup message */
"Save mix" = "Enregistrer le 'mix'age"
  • remember there may be more than one error in a file I found "KISS" in double-double quotes in two places

Upvotes: 14

Kheldar
Kheldar

Reputation: 5389

In my case, it was a problem of "quote" sign copy-pasted from a website, that was not accepted.

I should have detected that from syntax-highlighting not working, but I just read the source "quote sign, key, quote sign, equality sign, quote sign, value, quote sign... yup okay".

Upvotes: 2

MOK9
MOK9

Reputation: 375

It's a shame that XCode's syntax checker can't figure this out.

You can also copy the text into Text Wrangler (something I do after receiving a file from a translator) to check for properly quoted strings or run a regex checking for semicolons. The syntax coloring in Text Wrangler will show mis-quoted (or mis-escaped) strings where XCode's strings editor currently does not.

Upvotes: 7

Dan Bennett
Dan Bennett

Reputation: 1450

Check your file encoding. This is often caused by extended characters (like accented characters) and a non UTF encoding. In particular there is a bug in XCode 4 that if you copy accented characters into a strings file from Safari it will then save as Western Mac OS Roman.

Upvotes: 8

Tyler A.
Tyler A.

Reputation: 3068

Could be as simple as a missing semi-colon at the end of the line.

Upvotes: 239

Related Questions