LC_ALL takes precedence over LC_... for the suitable category, which in turn takes precedence over LANG. From your link:
LANG
This variable shall determine the locale category for native language, local customs, and coded character set in the absence of the LC_ALL and other LC_* ( LC_COLLATE , LC_CTYPE , LC_MESSAGES , LC_MONETARY , LC_NUMERIC , LC_TIME ) environment variables. This can be used by applications to determine the language to use for error messages and instructions, collating sequences, date formats, and so on.
So LANG is used as a last resort only. Regarding LC_MESSAGES:
LC_MESSAGES
This variable shall determine the locale category for processing affirmative and negative responses and the language and cultural conventions in which messages should be written. [...] Additional semantics of this variable, if any, are implementation-defined.
Since dialogs and menu texts are program messages, they should be affected by LC_MESSAGES category, unless LC_ALL is set.