POSIX 2001 や 2008 では [A-Z] とかは C locale だけで定義されてるらしい
LANG か LC_ALL か LC_COLLATE が C では無いのでは?
と書こうとしたらもう解決してたorz

[[:lower:]] とかならいろんな locale で使えるらしい