I ran into an example today of "tlh-KX" being used for Klingon and felt it was worth a blog.  This doesn't just apply to Klingon, but rather to any invented, special-use or not-yet-assigned language, country, or region.

I'm all for making up locales that are interesting to you, but its really a good idea to use the existing standards.  I had to figure out what to do in this case when I made "tlh-US" http://blogs.msdn.com/shawnste/archive/2006/02/17/534533.aspx.  I chose "US" for the country since I live in the US.  Having thought about it a bit more, I may have considered just "tlh" or "tlh-001" (region code 001 is The World).  I wouldn't have picked "KX" though.

If you find yourself in a position where you need a country or region code for one that doesn't exist, ISO-3166 clearly defines a "user-assigned" space for 2 letter, 3 letter and 3 number codes.  If your country/region isn't clearly defined, it is best to use a user assigned code until someone convinces ISO that a real code is needed.  In the case of "KX", we can see that there are several other codes that start with "K", and its not too hard to imagine that some country might get assigned a KX code in the future.

ISO says at http://www.iso.org/iso/en/prods-services/iso3166ma/10faq/frequently-asked-questions.html#Q09:

09: Are there any code elements available which I myself can assign in my own application of ISO 3166-1?
A: Yes. There are series of codes which the ISO 3166/MA will never use in the updating process of ISO 3166-1 and which are freely available for users. To quote from ISO 3166-1:1997, clause 8.1.3 User-assigned code elements: "If users need code elements to represent country names not included in this part of ISO 3166, the series of letters AA, QM to QZ, XA to XZ, and ZZ, and the series AAA to AAZ, QMA to QZZ, XAA to XZZ, and ZZA to ZZZ respectively and the series of numbers 900 to 999 are available."

Go ahead and build those special locales, but try not to pick something that conflicts with existing standards. 

Same thing goes for the language code.The ISO 639 standard also specifies codes for localy defined codes: http://www.loc.gov/standards/iso639-2/faq.html#26

26. Is there a mechanism for using locally defined codes?

If a user wishes to use locally defined codes for languages not covered by ISO 639-2, codes qaa through qtz are reserved for local use, including for local treatment of dialects. These codes may only be used locally, and may not be exchanged internationally.

In Klingon's case "tlh" is an assigned code, however many languages don't have codes, which is what the qaa-qtz range is for, please use it when appropriate.

'til next time,
Shawn