Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Checks that localized variants of format strings have compatible formats

branch: master


ValidateLocalizedFormatStrings checks for incompatible format strings across the localized variants of a strings file. For example, if you or your localizers accidentally localize "%@ points" to "%s mumble mumble" in some language, your later +stringWithFormat: call will crash or produce nonsense.

The types and order of format specifiers are checked. If there is more than one format specifier in a string, then all the format specifiers are required to have position indicators.

If your localizers hand edit strings files, it is not uncommon to have typos or copy/pasta that can cause crashes (one real world example left one of our files containing “%1$@“%@” when the localizer meant “%1$@”.


Currently this tool expects to be built as part of the OmniGroup project, but only to the extent that it needs a ../../Configurations directory with our configurations. This is our first foray into submodules; hopefully this will get easier as we break out source up into smaller projects (like splitting out the Configurations into their own project)


ValidateLocalizedFormatStrings /path/to/bundle


  • Doesn't handle all possible format specifiers, just the ones we hit in our apps
  • Probably should remove 'p' as a valid specifier. Localized strings should really never have pointers in them, but we currently have a few.
  • Doesn't look for strings in xibs that might be used as format specifiers -- that's kind of a crazy thing to do anyway, so don't do that.
Something went wrong with that request. Please try again.