Every string within my code uses NSLocalizedString(). I keep going back and forth whether or not I should do one xib for all languages or a xib for each language. I had played around with creating a xib for each language, but then I reverted back to the single xib because I had too many changes to make to the layouts. You really have to have a solid grip on your layout and not to change it too much between releases.
If you're lucky enough to have a flexible layout that can deal with different font sizes without your app looking like crap, then the single xib approach seems more ideal to me. You can still type your text in IB, but then you have to have code to replace the text at runtime.
There are benefits to both techniques of course.
In the web applications my company makes, we use a single page with bindings for localized strings. That technique works well, but HTML has more flexible rendering of layouts than xibs do.
A friend of mine made a program for the Mac called
Fuzzy Clock and he has it localized to about 72 languages. I even think Pig Latin is one of them!
He just has a different Localizable.strings file for each language, but uses a single nib file.