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

LocalizationXcode4

Localization Problem Overview


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?

Localization Solutions


Solution 1 - Localization

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

Solution 2 - Localization

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

Solution 3 - Localization

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'

  1. 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

Solution 4 - Localization

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.

Solution 5 - Localization

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.

Solution 6 - Localization

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.

Solution 7 - Localization

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

Solution 8 - Localization

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

Solution 9 - Localization

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.

Solution 10 - Localization

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

Solution 11 - Localization

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:)

Solution 12 - Localization

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser433579View Question on Stackoverflow
Solution 1 - LocalizationTyler A.View Answer on Stackoverflow
Solution 2 - LocalizationTomTomView Answer on Stackoverflow
Solution 3 - Localizationbrian.clearView Answer on Stackoverflow
Solution 4 - LocalizationDan BennettView Answer on Stackoverflow
Solution 5 - LocalizationMOK9View Answer on Stackoverflow
Solution 6 - LocalizationBenRWView Answer on Stackoverflow
Solution 7 - LocalizationKheldarView Answer on Stackoverflow
Solution 8 - LocalizationAbdalrahman ShatouView Answer on Stackoverflow
Solution 9 - LocalizationNicoView Answer on Stackoverflow
Solution 10 - Localizationuser1607498View Answer on Stackoverflow
Solution 11 - LocalizationHemangView Answer on Stackoverflow
Solution 12 - LocalizationShmidtView Answer on Stackoverflow