Browse Source

feat(i18n): bilingual earth marker city names

Co-authored-by: Cursor <cursoragent@cursor.com>
master
peijunlei 2 weeks ago
parent
commit
0ba02a1278
  1. 136
      public/themes/dist_static/static/js/earth.js

136
public/themes/dist_static/static/js/earth.js

@ -6,6 +6,11 @@ var location_default = "data:image/svg+xml,%3csvg%20viewBox='0%200%2030%2041.184
//#endregion //#endregion
//#region js/earth.js //#region js/earth.js
(function() { (function() {
const getUiLang = window.getUiLang || (() => (location.pathname.split("/")[1] === "en" ? "en" : "zh"));
const t = window.t || ((k) => k);
function markerName(data) {
return getUiLang() === "en" ? (data.nameEn || data.nameZh) : (data.nameZh || data.nameEn);
}
const canvas = document.getElementById("earth-canvas"); const canvas = document.getElementById("earth-canvas");
if (!canvas || !window.THREE) return; if (!canvas || !window.THREE) return;
const container = canvas.parentElement; const container = canvas.parentElement;
@ -56,207 +61,248 @@ var location_default = "data:image/svg+xml,%3csvg%20viewBox='0%200%2030%2041.184
scene.add(earth); scene.add(earth);
const markersData = [ const markersData = [
{ {
name: "上海",
nameZh: "上海",
nameEn: "Shanghai",
lat: 31.2304, lat: 31.2304,
lon: 121.4737 lon: 121.4737
}, },
{ {
name: "东京",
nameZh: "东京",
nameEn: "Tokyo",
lat: 35.6762, lat: 35.6762,
lon: 139.6503 lon: 139.6503
}, },
{ {
name: "伊斯坦布尔",
nameZh: "伊斯坦布尔",
nameEn: "Istanbul",
lat: 41.0082, lat: 41.0082,
lon: 28.9784 lon: 28.9784
}, },
{ {
name: "伦敦",
nameZh: "伦敦",
nameEn: "London",
lat: 51.5074, lat: 51.5074,
lon: -.1278 lon: -.1278
}, },
{ {
name: "加尔各答",
nameZh: "加尔各答",
nameEn: "Kolkata",
lat: 22.5726, lat: 22.5726,
lon: 88.3639 lon: 88.3639
}, },
{ {
name: "北京",
nameZh: "北京",
nameEn: "Beijing",
lat: 39.9042, lat: 39.9042,
lon: 116.4074 lon: 116.4074
}, },
{ {
name: "华沙",
nameZh: "华沙",
nameEn: "Warsaw",
lat: 52.2297, lat: 52.2297,
lon: 21.0122 lon: 21.0122
}, },
{ {
name: "南京",
nameZh: "南京",
nameEn: "Nanjing",
lat: 32.0603, lat: 32.0603,
lon: 118.7969 lon: 118.7969
}, },
{ {
name: "吉隆坡",
nameZh: "吉隆坡",
nameEn: "Kuala Lumpur",
lat: 3.139, lat: 3.139,
lon: 101.6869 lon: 101.6869
}, },
{ {
name: "圣保罗",
nameZh: "圣保罗",
nameEn: "São Paulo",
lat: -23.5505, lat: -23.5505,
lon: -46.6333 lon: -46.6333
}, },
{ {
name: "圣安东尼奥",
nameZh: "圣安东尼奥",
nameEn: "San Antonio",
lat: 29.4241, lat: 29.4241,
lon: -98.4936 lon: -98.4936
}, },
{ {
name: "墨西哥城",
nameZh: "墨西哥城",
nameEn: "Mexico City",
lat: 19.4326, lat: 19.4326,
lon: -99.1332 lon: -99.1332
}, },
{ {
name: "多伦多",
nameZh: "多伦多",
nameEn: "Toronto",
lat: 43.6532, lat: 43.6532,
lon: -79.3832 lon: -79.3832
}, },
{ {
name: "奥克兰",
nameZh: "奥克兰",
nameEn: "Auckland",
lat: -36.8485, lat: -36.8485,
lon: 174.7633 lon: 174.7633
}, },
{ {
name: "孟买",
nameZh: "孟买",
nameEn: "Mumbai",
lat: 19.076, lat: 19.076,
lon: 72.8777 lon: 72.8777
}, },
{ {
name: "安地比斯",
nameZh: "安地比斯",
nameEn: "Antibes",
lat: 43.5804, lat: 43.5804,
lon: 7.1251 lon: 7.1251
}, },
{ {
name: "山景城",
nameZh: "山景城",
nameEn: "Mountain View",
lat: 37.3861, lat: 37.3861,
lon: -122.0839 lon: -122.0839
}, },
{ {
name: "巴黎",
nameZh: "巴黎",
nameEn: "Paris",
lat: 48.8566, lat: 48.8566,
lon: 2.3522 lon: 2.3522
}, },
{ {
name: "布宜诺斯艾利斯",
nameZh: "布宜诺斯艾利斯",
nameEn: "Buenos Aires",
lat: -34.6037, lat: -34.6037,
lon: -58.3816 lon: -58.3816
}, },
{ {
name: "开普敦",
nameZh: "开普敦",
nameEn: "Cape Town",
lat: -33.9249, lat: -33.9249,
lon: 18.4241 lon: 18.4241
}, },
{ {
name: "悉尼",
nameZh: "悉尼",
nameEn: "Sydney",
lat: -33.8688, lat: -33.8688,
lon: 151.2093 lon: 151.2093
}, },
{ {
name: "新加坡",
nameZh: "新加坡",
nameEn: "Singapore",
lat: 1.3521, lat: 1.3521,
lon: 103.8198 lon: 103.8198
}, },
{ {
name: "新德里",
nameZh: "新德里",
nameEn: "New Delhi",
lat: 28.6139, lat: 28.6139,
lon: 77.209 lon: 77.209
}, },
{ {
name: "曼谷",
nameZh: "曼谷",
nameEn: "Bangkok",
lat: 13.7563, lat: 13.7563,
lon: 100.5018 lon: 100.5018
}, },
{ {
name: "法兰克福",
nameZh: "法兰克福",
nameEn: "Frankfurt",
lat: 50.1109, lat: 50.1109,
lon: 8.6821 lon: 8.6821
}, },
{ {
name: "波哥大",
nameZh: "波哥大",
nameEn: "Bogotá",
lat: 4.711, lat: 4.711,
lon: -74.0721 lon: -74.0721
}, },
{ {
name: "深圳",
nameZh: "深圳",
nameEn: "Shenzhen",
lat: 22.5431, lat: 22.5431,
lon: 114.0579 lon: 114.0579
}, },
{ {
name: "牛津",
nameZh: "牛津",
nameEn: "Oxford",
lat: 51.752, lat: 51.752,
lon: -1.2577 lon: -1.2577
}, },
{ {
name: "特拉维夫",
nameZh: "特拉维夫",
nameEn: "Tel Aviv",
lat: 32.0853, lat: 32.0853,
lon: 34.7818 lon: 34.7818
}, },
{ {
name: "科伦坡",
nameZh: "科伦坡",
nameEn: "Colombo",
lat: 6.9271, lat: 6.9271,
lon: 79.8612 lon: 79.8612
}, },
{ {
name: "米兰",
nameZh: "米兰",
nameEn: "Milan",
lat: 45.4642, lat: 45.4642,
lon: 9.19 lon: 9.19
}, },
{ {
name: "纽约",
nameZh: "纽约",
nameEn: "New York",
lat: 40.7128, lat: 40.7128,
lon: -74.006 lon: -74.006
}, },
{ {
name: "莫斯科",
nameZh: "莫斯科",
nameEn: "Moscow",
lat: 55.7558, lat: 55.7558,
lon: 37.6173 lon: 37.6173
}, },
{ {
name: "达卡",
nameZh: "达卡",
nameEn: "Dhaka",
lat: 23.8103, lat: 23.8103,
lon: 90.4125 lon: 90.4125
}, },
{ {
name: "迪拜",
nameZh: "迪拜",
nameEn: "Dubai",
lat: 25.2048, lat: 25.2048,
lon: 55.2708 lon: 55.2708
}, },
{ {
name: "邦加罗尔",
nameZh: "邦加罗尔",
nameEn: "Bengaluru",
lat: 12.9716, lat: 12.9716,
lon: 77.5946 lon: 77.5946
}, },
{ {
name: "金奈",
nameZh: "金奈",
nameEn: "Chennai",
lat: 13.0827, lat: 13.0827,
lon: 80.2707 lon: 80.2707
}, },
{ {
name: "雅加达",
nameZh: "雅加达",
nameEn: "Jakarta",
lat: -6.2088, lat: -6.2088,
lon: 106.8456 lon: 106.8456
}, },
{ {
name: "首尔",
nameZh: "首尔",
nameEn: "Seoul",
lat: 37.5665, lat: 37.5665,
lon: 126.978 lon: 126.978
}, },
{ {
name: "香港",
nameZh: "香港",
nameEn: "Hong Kong",
lat: 22.3193, lat: 22.3193,
lon: 114.1694 lon: 114.1694
}, },
{ {
name: "全球总部福州",
nameZh: "全球总部福州",
nameEn: "Global HQ Fuzhou",
lat: 26.0745, lat: 26.0745,
lon: 119.2965 lon: 119.2965
} }
@ -295,7 +341,7 @@ var location_default = "data:image/svg+xml,%3csvg%20viewBox='0%200%2030%2041.184
markersData.forEach((data) => { markersData.forEach((data) => {
const position = latLonToVector3(data.lat, data.lon, .5); const position = latLonToVector3(data.lat, data.lon, .5);
let marker; let marker;
if (data.name === "全球总部福州") {
if (data.nameZh === "全球总部福州") {
marker = new THREE.Mesh(fuzhouMarkerGeometry, fuzhouMarkerMaterial); marker = new THREE.Mesh(fuzhouMarkerGeometry, fuzhouMarkerMaterial);
fuzhouMarkerMesh = marker; fuzhouMarkerMesh = marker;
} else marker = new THREE.Mesh(defaultMarkerGeometry, defaultMarkerMaterial); } else marker = new THREE.Mesh(defaultMarkerGeometry, defaultMarkerMaterial);
@ -303,7 +349,7 @@ var location_default = "data:image/svg+xml,%3csvg%20viewBox='0%200%2030%2041.184
const normal = position.clone().normalize(); const normal = position.clone().normalize();
marker.position.add(normal.multiplyScalar(.01)); marker.position.add(normal.multiplyScalar(.01));
marker.renderOrder = 1; marker.renderOrder = 1;
marker.userData = { name: data.name };
marker.userData = { name: markerName(data), nameZh: data.nameZh };
earth.add(marker); earth.add(marker);
markerMeshes.push(marker); markerMeshes.push(marker);
}); });
@ -325,7 +371,7 @@ var location_default = "data:image/svg+xml,%3csvg%20viewBox='0%200%2030%2041.184
tooltip.classList.add("tooltip-arrow"); tooltip.classList.add("tooltip-arrow");
container.appendChild(tooltip); container.appendChild(tooltip);
const fuzhouTooltip = tooltip.cloneNode(true); const fuzhouTooltip = tooltip.cloneNode(true);
fuzhouTooltip.innerHTML = "全球总部<br>福州";
fuzhouTooltip.innerHTML = t("earth.hq_fuzhou_html");
container.appendChild(fuzhouTooltip); container.appendChild(fuzhouTooltip);
const raycaster = new THREE.Raycaster(); const raycaster = new THREE.Raycaster();
const mouse = new THREE.Vector2(); const mouse = new THREE.Vector2();
@ -338,7 +384,7 @@ var location_default = "data:image/svg+xml,%3csvg%20viewBox='0%200%2030%2041.184
if (intersects.length > 0) { if (intersects.length > 0) {
const object = intersects[0].object; const object = intersects[0].object;
const name = object.userData.name; const name = object.userData.name;
if (name !== "全球总部福州") {
if (object.userData.nameZh !== "全球总部福州") {
tooltip.textContent = name; tooltip.textContent = name;
tooltip.style.display = "block"; tooltip.style.display = "block";
const vector = object.position.clone(); const vector = object.position.clone();

Loading…
Cancel
Save