Für mich läuft das unter "IETF language tag". (Einen gleichnamigen Artikel gibt es z.B. in der der englischen Wikipedia.)
Standardisiert sind die in der Dokumenten-Reihe BCP 47; das entspricht zurzeit RFC 5646, RFC 5645 und RFC 4647. Davon ist das erste (RFC 5646) vermutlich an interessantesten für dich.
So ein Tag besteht aus einem oder mehreren Subtags, die hauptsächlich aus bestehenden Normen genommen werden.
Der erste Teil ist der Sprach-Subtag; der kommt natürlich nicht aus ISO 3166-1 (Länder) sondern aus ISO 639 (Sprachen). Bei Deutschland und Deutsch ist das Kürzel gleich, aber es gibt zum Beispiel kein Länderkennzeichen "en" in ISO 3166-1!
Sprach-Subtags können sowohl zweistellig (aus ISO 639-1, z.B. "de" für Deutsch) oder dreistellig (aus ISO 639-2, z.B. "gsw" für Schweizerdeutsch/Alemannisch) sein. Sie werden per Konvention ganz klein geschrieben.
Du kannst auch - wie in deinen Beispielen - einen Regions-Subtag hinzufügen; das sind im Allgemeinen Länderkürzel aus ISO-3166-1 wie DE für Deutschland oder GB für das Vereinigte Königreich. (Beachte hier, dass nicht die Internet-TLDs benutzt werden; das wäre ja UK für das Vereinigte Königreich.) Diese werden per Konvention ganz groß geschrieben. Es gibt aber auch dreistellig nummerische Regions-Subtags für länderübergreifende Regionen wie 419 für Lateinamerika; damit kann man z.B. es-419 für "lateinamerikanisches Spanisch" kennzeichnen, falls das für eine bestimmte Anwendung sinnvoll sein sollte.
Außerdem kann es noch weitere Subtags geben, etwa für Schrift und Rechtschreibung.
Beispielsweise kann Serbisch entweder in lateinischer oder in kyrillischer Schrift geschrieben werden; das kann man dann durch sr-Latn oder sr-Cyrl kennzeichnen. Diese Tags kommen aus ISO 15924, haben vier Buchstaben und werden per Konvention mit großem Anfangsbuchstaben und danach klein geschrieben.
Oder man kann z.B. "Deutsch nach alter/herkömmlicher/bewährter Rechtschreibung" (de-1901) von "Deutsch nach neuer Rechtschreibung" (de-1996) unterscheiden. Die Subtags "1901" und "1996" sind übrigens nicht willkürlich ausgedacht sondern in der "language subtag registry" registriert worden: http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry . Diese Art Subtag läuft unter "Varianten-Subtag" (englisch: variant subtag). Andere Varianten werden z.B. für Dialekte einer Sprache benutzt oder für Aussprachevarianten wie Ekavisch und Ijekavisch im Serbischen.
Die Einzelteile gibt es, wie gesagt, in der Language Subtag Registry; die Regeln, wie du die Subtags zu einem Language-Tag zusammenbauen kannst, stehen in RFC 5646.
Viel Erfolg!