nice ideas folks. I can explain how is the internals. When I started to work on opensubtitles, I decided using ISO639 (3 character codes) would be enough, so we got full support of this (and today I know, it is not really perfect). Look here:
http://www-01.sil.org/iso639-3/codes.asp
Well, we are using also ISO639-2 codes (stored in the same table), and when something is missing, I just add code. For example for Portuguese (Brasil) I made pb | pob. Thats how I solve it.
I can create more "languages" (Espanol Latin America) and create codes for it, but here comes more troubles:
1. useragents (programs using OS) update very very slowly their internals
2. searching would be not perfect (1 subtitle can be only in one language)
What you propose is to have ISO639 code and ISO3166 code (custom extended). Let's say I could make it (but thats really big change for me, but I think possible to do), but then Portuguese and pt-br must be changed too (or at least it should be changed), similar with Chinese...and we are back in problem 1 (useragents take changes very very slowly, POB would not work, because it will be pt_br, not pb_br.
We need, that if user search:
pt - will return all portuguese subtitles
pt_pt - will return Portugal Portuguese subs
pr_br - will return Brazil Portuguese subs
Adding another language in my table is not a problem, but I am not sure, if it will have more cons or more pros, because as I said, one subtitle with this approach can have just one language.