原创

echarts统计图中世界国家汉化表及汉化方式

最近项目中需要用到echarts的世界地图,同时需要将世界地图中的国家名进行汉化,在网上找了很久没有找到特全的汉化方式,因此准备基于网上朋友整理的内容,扩充下汉化表。部分翻译内容来源自:https://blog.csdn.net/u012557538/article/details/78490267
本内容基于echarts2中echarts-all.jsecharts-all.js中的国家皆在下列json中。

{
    "Afghanistan": "阿富汗",
    "Angola": "安哥拉",
    "Albania": "阿尔巴尼亚",
    "United Arab Emirates": "阿联酋",
    "Argentina": "阿根廷",
    "Armenia": "亚美尼亚",
    "French Southern and Antarctic Lands": "法属南半球和南极领地",
    "Australia": "澳大利亚",
    "Austria": "奥地利",
    "Azerbaijan": "阿塞拜疆",
    "Burundi": "布隆迪",
    "Belgium": "比利时",
    "Benin": "贝宁",
    "Burkina Faso": "布基纳法索",
    "Bangladesh": "孟加拉国",
    "Bulgaria": "保加利亚",
    "The Bahamas": "巴哈马",
    "Bosnia and Herzegovina": "波黑",
    "Belarus": "白俄罗斯",
    "Belize": "伯利兹",
    "Bermuda": "百慕大",
    "Bolivia": "玻利维亚",
    "Brazil": "巴西",
    "Brunei": "文莱",
    "Bhutan": "不丹",
    "Botswana": "博茨瓦纳",
    "Central African Republic": "中非共和国",
    "Canada": "加拿大",
    "Switzerland": "瑞士",
    "Chile": "智利",
    "China": "中国",
    "Ivory Coast": "象牙海岸",
    "Cameroon": "喀麦隆",
    "Democratic Republic of the Congo": "刚果(金)",
    "Republic of the Congo": "刚果(布)",
    "Colombia": "哥伦比亚",
    "Costa Rica": "哥斯达黎加",
    "Cuba": "古巴",
    "Northern Cyprus": "北塞浦路斯",
    "Cyprus": "塞浦路斯",
    "Czech Republic": "捷克",
    "Germany": "德国",
    "Djibouti": "吉布提",
    "Denmark": "丹麦",
    "Dominican Republic": "多米尼加共和国",
    "Algeria": "阿尔及利亚",
    "Ecuador": "厄瓜多尔",
    "Egypt": "埃及",
    "Eritrea": "厄立特里亚",
    "Spain": "西班牙",
    "Estonia": "爱沙尼亚",
    "Ethiopia": "埃塞俄比亚",
    "Finland": "芬兰",
    "Fiji": "斐",
    "Falkland Islands": "福克兰群岛",
    "France": "法国",
    "Gabon": "加蓬",
    "United Kingdom": "英国",
    "Georgia": "格鲁吉亚",
    "Ghana": "加纳",
    "Guinea": "几内亚",
    "Gambia": "冈比亚",
    "Guinea Bissau": "几内亚比绍",
    "Equatorial Guinea": "赤道几内亚",
    "Greece": "希腊",
    "Greenland": "格陵兰",
    "Guatemala": "危地马拉",
    "French Guiana": "法属圭亚那",
    "Guyana": "圭亚那",
    "Honduras": "洪都拉斯",
    "Croatia": "克罗地亚",
    "Haiti": "海地",
    "Hungary": "匈牙利",
    "Indonesia": "印度尼西亚",
    "India": "印度",
    "Ireland": "爱尔兰",
    "Iran": "伊朗",
    "Iraq": "伊拉克",
    "Iceland": "冰岛",
    "Israel": "以色列",
    "Italy": "意大利",
    "Jamaica": "牙买加",
    "Jordan": "约旦",
    "Japan": "日本",
    "Kazakhstan": "哈萨克斯坦",
    "Kenya": "肯尼亚",
    "Kyrgyzstan": "吉尔吉斯斯坦",
    "Cambodia": "柬埔寨",
    "South Korea": "韩国",
    "Kosovo": "科索沃",
    "Kuwait": "科威特",
    "Laos": "老挝",
    "Lebanon": "黎巴嫩",
    "Liberia": "利比里亚",
    "Libya": "利比亚",
    "Sri Lanka": "斯里兰卡",
    "Lesotho": "莱索托",
    "Lithuania": "立陶宛",
    "Luxembourg": "卢森堡",
    "Latvia": "拉脱维亚",
    "Morocco": "摩洛哥",
    "Moldova": "摩尔多瓦",
    "Madagascar": "马达加斯加",
    "Mexico": "墨西哥",
    "Macedonia": "马其顿",
    "Mali": "马里",
    "Myanmar": "缅甸",
    "Montenegro": "黑山",
    "Mongolia": "蒙古",
    "Mozambique": "莫桑比克",
    "Mauritania": "毛里塔尼亚",
    "Malawi": "马拉维",
    "Malaysia": "马来西亚",
    "Namibia": "纳米比亚",
    "New Caledonia": "新喀里多尼亚",
    "Niger": "尼日尔",
    "Nigeria": "尼日利亚",
    "Nicaragua": "尼加拉瓜",
    "Netherlands": "荷兰",
    "Norway": "挪威",
    "Nepal": "尼泊尔",
    "New Zealand": "新西兰",
    "Oman": "阿曼",
    "Pakistan": "巴基斯坦",
    "Panama": "巴拿马",
    "Peru": "秘鲁",
    "Philippines": "菲律宾",
    "Papua New Guinea": "巴布亚新几内亚",
    "Poland": "波兰",
    "Puerto Rico": "波多黎各",
    "North Korea": "朝鲜",
    "Portugal": "葡萄牙",
    "Paraguay": "巴拉圭",
    "Qatar": "卡塔尔",
    "Romania": "罗马尼亚",
    "Russia": "俄罗斯",
    "Rwanda": "卢旺达",
    "Western Sahara": "西撒哈拉",
    "Saudi Arabia": "沙特阿拉伯",
    "Sudan": "苏丹",
    "South Sudan": "南苏丹",
    "Senegal": "塞内加尔",
    "Solomon Islands": "所罗门群岛",
    "Sierra Leone": "塞拉利昂",
    "El Salvador": "萨尔瓦多",
    "Somaliland": "索马里兰",
    "Somalia": "索马里",
    "Republic of Serbia": "塞尔维亚",
    "Suriname": "苏里南",
    "Slovakia": "斯洛伐克",
    "Slovenia": "斯洛文尼亚",
    "Sweden": "瑞典",
    "Swaziland": "斯威士兰",
    "Syria": "叙利亚",
    "Chad": "乍得",
    "Togo": "多哥",
    "Thailand": "泰国",
    "Tajikistan": "塔吉克斯坦",
    "Turkmenistan": "土库曼斯坦",
    "East Timor": "东帝汶",
    "Trinidad and Tobago": "特里尼达和多巴哥",
    "Tunisia": "突尼斯",
    "Turkey": "土耳其",
    "United Republic of Tanzania": "坦桑尼亚",
    "Uganda": "乌干达",
    "Ukraine": "乌克兰",
    "Uruguay": "乌拉圭",
    "United States of America": "美国",
    "Uzbekistan": "乌兹别克斯坦",
    "Venezuela": "委内瑞拉",
    "Vietnam": "越南",
    "Vanuatu": "瓦努阿图",
    "West Bank": "西岸",
    "Yemen": "也门",
    "South Africa": "南非",
    "Zambia": "赞比亚",
    "Zimbabwe": "津巴布韦",
    "Singapore Rep.": "新加坡",
    "Dominican Rep.": "多米尼加",
    "Palestine": "巴勒斯坦",
    "Bahamas": "巴哈马",
    "Timor-Leste": "东帝汶",
    "Guinea-Bissau": "几内亚比绍",
    "Côte d'Ivoire": "科特迪瓦",
    "Siachen Glacier": "锡亚琴冰川",
    "Br. Indian Ocean Ter.": "英属印度洋领土",
    "Bosnia and Herz.": "波斯尼亚和黑塞哥维那",
    "Central African Rep.": "中非",
    "Dem. Rep. Congo": "刚果民主共和国",
    "Congo": "刚果",
    "N. Cyprus": "北塞浦路斯",
    "Czech Rep.": "捷克",
    "Eq. Guinea": "赤道几内亚",
    "Korea": "韩国",
    "Lao PDR": "老挝",
    "Dem. Rep. Korea": "朝鲜",
    "W. Sahara": "西撒哈拉",
    "S. Sudan": "南苏丹",
    "Solomon Is.": "所罗门群岛",
    "Serbia": "塞尔维亚",
    "Tanzania": "坦桑尼亚",
    "United States": "美国"
}

使用效果及方式:
file

部分js

// https://blog.csdn.net/u012557538/article/details/78490267
var nameMap = {
    // 上面那个json
};
for(let key in nameMap) {
    nameMap[key.toLowerCase()] = nameMap[key];
}

然后在echarts中使用

tooltip: {
    show: true,
    label: {
        show: true,
    },
    hideDelay: 3000,
    alwaysShowContent: true,
    trigger: 'item',
    backgroundColor: 'rgba(0,0,0,0.0)',
    textStyle: {
        color: 'white',
        align: 'center',
        baseline: 'middle',
        fontSize: '16px',

    },
    enterable: true,
    formatter: function(params, ticket, callback) {
        let res = '';
        let param = params[1].toLowerCase();
        // 返回汉化后的国家名
        return nameMap[param.toLowerCase()] || param;
    }
},

最后,再教大家一个小技巧:如何从echarts中提取所有国家名

就如本例中的echarts-all.js为例,首先在js中搜索“world_geo”,这个就是包含世界国家的内容,如图
file

后面的features: [{xxx}] 即为国家列表,我们需要单独将它复制出来,以phpstorm为例,数据定位到features后的“[”前面,按俩下 “ctrl + w”即可选中“[]”列表中的数据,如下图
file
然后复制一下,打开笔记本(notepad++),然后整理成如下代码

var c = [{......}]

var nameMap = {};
for(var i in c){
    nameMap[c[i].properties.name]="";
}    
console.log(JSON.stringify(nameMap));

然后随便打开一个网页,通过F12切换到console栏,将上述整理的代码复制进去,按下回车
file
喏,红框框里面的就是所有的国家名,剩下的就是汉化了。因为网上已经有朋友整理了一部分(https://blog.csdn.net/u012557538/article/details/78490267)。
所以我们可以直接在这个基础上完善一下。首先将上方红框中的内容复制,然后依照上方链接中的例子,编写以下代码

var newNameMap = {
    "Afghanistan": "",
    "Angola": "",
    ...
    "Zimbabwe": ""
};
var nameMap = {
    'Singapore Rep.':'新加坡',
    'Dominican Rep.':'多米尼加',
    ...
    'Zimbabwe':'津巴布韦'
};
$.extend(newNameMap, nameMap);
console.log(JSON.stringify(newNameMap))

按照上面那种方式,复制到console面板中执行,如图
file
这就是最全版的世界国家内容,剩下的就是找出其他未汉化的国家名,手动去汉化。
(为了方便观看,请先将json格式化一下)
我是在notepad++中操作的,如图,ctrl+f打开查找面板,选择正则方式查找,然后输入正则表达式后搜索出未被汉化的国家名,再去网上翻译一下即可。
file

PS:此方法不限于该文章所示的场景,其他任何一个需要从js中提取数据的需求,都可以使用该方法

最后打个广告,如果你觉得这篇文章对你有用,可以关注我的技术公众号:码一码,你的关注和转发是对我最大的支持,O(∩_∩)O

正文到此结束