Yeah, most errors occur somewhere in a library that you use (because libraries typically do the actual heavy lifting) and in the vast majority of cases, it will give you a (English) string describing what went wrong.
If you can just slap that string into the final error message (or at least into logging), that is so much easier and more helpful than pretending you could possibly assign an error code to each such error case.
This is why error codes exist. Localize the message all you want, but keep the error code or id.
Well codes are very simplified and not able to depict the extent of all messages
Yeah, most errors occur somewhere in a library that you use (because libraries typically do the actual heavy lifting) and in the vast majority of cases, it will give you a (English) string describing what went wrong.
If you can just slap that string into the final error message (or at least into logging), that is so much easier and more helpful than pretending you could possibly assign an error code to each such error case.
Error codes for complex things are an invention of proprietary software companies trying to hide what they are doing from you