Okay so I found a workable solution to this. It's a little inelegant but it works.
The ISO 639-1 (2 character language) code can be found as the TwoLetterISORegionName property on the RegionInfo object in the System.Globalization namespace.
The ISO 4217 (3 character currency) code can be found on the ISOCurrenySymbol property on the same object.
To create a region info, use:
new RegionInfo(Int32)
where the int is the culture identifier
To Generate a list of culture identifiers it is quite simple to use
System.Globalization.CultureInfo.GetCultures(CULTURETYPE)
where CULTURETYPE is either the enum or respective number for various culture types (just be sure to choose one that doesn't contain neutral cultures as these do not map correctly). This returns an array of CultureInfo objects, each of which contains an LCID property. This property can be used to construct the respective RegionInfo and you can take what you need from there.