I have read one other thread about this happening. On that thread, no one could figure out the cause.
This started happening to me as well recently, and although I found many instances of people reporting the same issue, no one had any concrete answers.
After futzing around a bit this evening, I think I have a possible solution.
It appears that this problem is theme-based (not an issue with fonts, as others have theorized). In particular, at some point in recent software revisions (could have been 3.0, perhaps 3.1 -- all I have are 2 phones on 3.1.2 so I can't verify when), there was a change made to how the "Low Battery" message is constructed.
In particular, if you look at the SpringBoard.strings plist on a 3.1.2 phone (as located in /System/Library/CoreServices/SpringBoard.app/English.lproj/), you'll see the following:
Code:
[COLOR="Gray"][I](Correct for 3.1.2)[/I][/COLOR]
<key>LOW_BATT_MSG_LEVEL</key>
<string>[COLOR="Red"]%@[/COLOR] of battery remaining</string>
However, in a theme that I had applied, the theme author had duplicated the
entire SpringBoard.strings file & then applied modifications -- rather than just including the mods. In the theme's file, that same element appears as:
Code:
[COLOR="Gray"][I](Old format; incorrect for 3.1.2)[/I][/COLOR]
<key>LOW_BATT_MSG_LEVEL</key>
<string>[COLOR="Red"]%d%%[/COLOR] of battery remaining</string>
Based on those two snippets, it looks like at some point the message changed from just taking a numeric value (%d) to using a string value (%@). Thus, when 3.1.2 passes in a character string, the old message string in the theme is trying to interpret those bytes as a number. And wackiness ensues.
The fix:
Assuming that you're on 3.1.2 (perhaps someone else can verify for earlier versions), check your themes for SpringBoard.strings files (under <ThemeName>/Bundles/com.apple.springboard/en.lproj/), and if present look for the LOW_BATT_MSG_LEVEL key. If it's the "bad" version (%%d%...), copy the "good" version of the string into its place, and respring. I'd suggest looking in any lockscreen/slider themes first, as they nearly always include SpringBoard.strings to alter/remove the 'slide to unlock' text.
After I did that, and allowed my phone to hit the next battery warning, the text was correct -- the first time in several weeks.
I'd also recommend that you let the theme's author know of the issue, so that in future releases they can pare down the SpringBoard.strings file to just what the theme needs to modify (and thus to minimize side-effects like these in the future).
- Karl