I've started using ICU for enabling C code for translation. During this process, I've found ICU to be a little less friendly to a C programmer than it could be. I've used Eclipse and language translation enabling that is available for Java for some time and have come to appreciate the ability to have messages/string generated from the keys if a message doesn't yet exist. This allows the developer to build their code and their resource bundles somewhat independently and dramatically reduces the amount of error checking that has to occur in the application code.
I think being programmer friendly is a key part of being accepted and used. If I only have to code an open/close and wrapper a hard coded string with a function call, I'm much more inclined to enable my code for translation than if I have to do an open, test for errors, prepare to get a string, get a string, check for errors, close.