I made a mistake with my localisation coding and I assumed that NSLocalizedString used the form NSLocalizedString(key,value) when in fact it uses NSLocalizedString(keyValue,comment). Rather than go back and redo my coding so that it would work I created a new program called CocoaLocalizer to do this hard work for me. This program creates better comments than genstrings as it allows you to import comments from an external file with the same keys, and it also displays the ‘default value’ in the comment so you can see what you’re translating from. Additionally it allows you to ‘merge’ another .strings file (though it misses the comments in that at the moment) into the one it generates. Also the application checks both the keys and values to make sure they don’t clash with existing values and displays a ‘nice’ error for this.

It also works with NSLocalizedString done in the default way as well (i.e. NSLocalizedString(keyValue, comment) and with that it just uses the extra comment from the comment.strings file as another comment.

This program has a Cocoa interface and isn’t a command line application and it requires Mac OS X 10.6 Snow Leopard.

It can be downloaded from the applications Sourceforge project page at:

Posted in Software and tagged , , .


  1. How do you use this exactly? I mean in the file i created i found lines like this:
    /* Default Value: ‘Edit’ */
    “Edit” = “Edit”;

    what should I modify? the first or second value?

  2. ok forget the previous posts i figured it out.
    first problem:
    “feat-finished-blurb” = “%1$@’s %2$@ %3$@ has finished.”
    i need some examples of this ;D there are only parameters here!

  3. ok this is getting hard without a way to see a string in its context… i’m translating what i can and wait for it to be implemented. once that’s done i will be able to identify the only english strings remaining. i can’t see an easier way… what do you think?

  4. Sorry I’ve been busy, and I haven’t been very active on the project lately. I will try and take a look at this and get it integrated into the application.

Leave a Reply

Your email address will not be published. Required fields are marked *