Introducing Twine: String Management for iOS, Mac OS X, and Android Development
mobiata.com
mobiata.com
The one "downside" to gettext (at least from the OP's perspective) is that it uses the English text as the key. Personally I don't find this to be a downside at all. I hate having to make up artificial keys and then associate them with English strings. It makes programming much less natural and breaks my flow. I've never found the typo/misspelling issue to be much of an issue.
I suppose gettext also doesn't support XIB files, though it wouldn't be hard to translate back and forth between .strings and .po files...
Upon receipt of an updated .strings file for a localization, run
ibtool --strings-file updated.strings xx.lproj/existing.xib --write xx.lproj/existing.xib
which will preserve any layout changes made to xx.lproj/existing.xib
It is working out fine for a client app called Chumkee which has about a dozen localizations.