
Use of integer identifiers is the best way to screw the localization in the software.
What does 3456 means? Do you really think it is good to write translate(MY_MESSAGE_OPENING_FILE)
No, never - never - never - never - never use such "constant" or "integer" identifiers.
Always use natural text.
I am not sure I fully understand this, but definitely I disagree with the idea that messages should never be integer identifiers. There is a principle in the database world that primary keys to records should be meaningless where the meaning can change over time. Imagine a text identifier "Close your hatch now" and over time, the very concept of "hatch" becomes meaningless - yet for all time the source code is condemned to have the original, now meaningless if not downright confusing identifier "Close your hatch now". In the windows world messages are generally numbers and there is considerable value in being able to search the web/documentation for error -23756472536476523 instead of some local language string which will only turn up comments in one language. Any text compiled into a program is essentially a constant exactly like any integer. Therefore the same rules apply equally to Generally I think the idea of compiling any meaningful text whatsoever into object code is questionable from a theoretical basis and is usually just a hangover from when gettext/translate was a quick and dirty way to largely automate the localisation of existing mono-lingual programs - by simply wrapping all quoted text with a call to translate.