- Human language, as in comments
- Directives, usually for the top-level language processor that uses the particular Source
- Programming Language, the statements or syntactic constructs that we think of as the program itself
- Literals, as in data which will be manipulated by the program but which is encoded in some fashion and stored within the Source.
I will make a brief sidebar to rail against the very poor implementation of what is referred to as "internationalization". If a modern application needs to be relevant to a world-wide audience it is expected that the developers isolate all locale-specific aspects into separate "resource" files, to use localizable operating system calls that can never be evaluated on the developer's system and use character sets and string manipulation tools to support character sets display, and keyboard modes that also cannot be tested on the developer's equipment.
Internationalization should be inherent in the program development process - not scabbed-on to a final product. International test cases should always be visible to the developer and the operation and aesthetics of the product should be visible in a simple and robust manner at all times. To achieve this, the adaptive, multi-lingual keyboards on tablet computers, as well as the world-wide collaboration techniques discussed here become critically important.