For language independent implementation, here is (hopefully) up to date JSON with all the regions (at least ones available for my own account in early 2020). As other answers agree there is no programmatic way to achieve this, so only way to go is manually building a map of region names and respective friendly names.
{
"ap-northeast-1": "Asia Pacific (Tokyo)",
"ap-northeast-2": "Asia Pacific (Seoul)",
"ap-southeast-1": "Asia Pacific (Singapore)",
"ap-southeast-2": "Asia Pacific (Sydney)",
"ap-south-1": "Asia Pacific (Mumbai)",
"eu-central-1": "EU (Frankfurt)",
"eu-north-1": "Europe (Stockholm)",
"eu-west-1": "EU (Ireland)",
"eu-west-2": "Europe (London)",
"eu-west-3": "Europe (Paris)",
"us-east-1": "US East (N. Virginia)",
"us-east-2": "US East (Ohio)",
"us-west-1": "US West (N. California)",
"us-west-2": "US West (Oregon)",
"sa-east-1": "South America (Sao Paulo)",
"ca-central-1": "Canada (Central)"
}
For instance, ruby implementation would look like
require 'json'
require 'aws-sdk-ec2'
data = JSON.load File.read 'regions.json'
all_regions = Aws::EC2::Client.new.describe_regions.regions
all_regions.each { |r| puts "#{data[r.region_name]} - #{r.region_name}" }