-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTranslationDictionary.cs
More file actions
246 lines (227 loc) · 14.6 KB
/
Copy pathTranslationDictionary.cs
File metadata and controls
246 lines (227 loc) · 14.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
using System;
using System.Collections.Generic;
namespace dji_cloud_tool
{
public static class TranslationDictionary
{
private static readonly Dictionary<string, (string Label, string Category, string Unit)> Translations = new()
{
// Dock Basic Info
{ "home_position_is_valid", ("Home 点有效性", "基本信息", "") },
{ "heading", ("机场朝向角", "基本信息", "°") },
{ "acc_time", ("机场累计运行时长", "基本信息", "秒") },
{ "first_power_on", ("首次上电时间", "基本信息", "ms") },
{ "activation_time", ("激活时间", "基本信息", "") },
{ "compatible_status", ("固件一致性", "基本信息", "") },
{ "firmware_version", ("固件版本", "基本信息", "") },
{ "drone_in_dock", ("飞行器是否在舱", "基本信息", "") },
{ "flighttask_step_code", ("机场任务状态", "基本信息", "") },
{ "mode_code", ("运行状态", "基本信息", "") },
{ "job_number", ("累计作业架次", "基本信息", "次") },
// Positioning & RTK
{ "latitude", ("纬度", "定位与导航", "°") },
{ "longitude", ("经度", "定位与导航", "°") },
{ "height", ("绝对高度", "定位与导航", "m") },
{ "position_state", ("搜星状态", "定位与导航", "") },
{ "position_state.is_calibration", ("是否标定", "定位与导航", "") },
{ "is_calibration", ("是否标定", "定位与导航", "") },
{ "position_state.is_fixed", ("是否收敛", "定位与导航", "") },
{ "is_fixed", ("是否收敛", "定位与导航", "") },
{ "position_state.quality", ("搜星档位", "定位与导航", "") },
{ "quality", ("搜星档位", "定位与导航", "") },
{ "position_state.gps_number", ("GPS 搜星数量", "定位与导航", "颗") },
{ "gps_number", ("GPS 搜星数量", "定位与导航", "颗") },
{ "position_state.rtk_number", ("RTK 搜星数量", "定位与导航", "颗") },
{ "rtk_number", ("RTK 搜星数量", "定位与导航", "颗") },
// Environment
{ "humidity", ("舱内湿度", "环境控制", "%RH") },
{ "temperature", ("舱内温度", "环境控制", "°C") },
{ "environment_temperature", ("环境温度", "环境控制", "°C") },
{ "wind_speed", ("风速", "环境控制", "m/s") },
{ "rainfall", ("降雨量", "环境控制", "") },
{ "cover_state", ("舱盖状态", "环境控制", "") },
{ "supplement_light_state", ("补光灯状态", "环境控制", "") },
{ "air_conditioner", ("机场空调状态信息", "环境控制", "") },
{ "air_conditioner.air_conditioner_state", ("空调模式", "环境控制", "") },
{ "air_conditioner_state", ("空调模式", "环境控制", "") },
{ "air_conditioner.switch_time", ("剩余等待可切换时间", "环境控制", "秒") },
{ "switch_time", ("剩余等待可切换时间", "环境控制", "秒") },
// Power & Battery
{ "working_voltage", ("工作电压", "电源与电池", "mV") },
{ "working_current", ("工作电流", "电源与电池", "mA") },
{ "drone_charge_state", ("飞行器充电状态", "电源与电池", "") },
{ "drone_charge_state.capacity_percent", ("飞行器电量百分比", "电源与电池", "%") },
{ "drone_charge_state.state", ("充电状态", "电源与电池", "") },
{ "backup_battery", ("机场备用电池", "电源与电池", "") },
{ "backup_battery.switch", ("备用电池开关", "电源与电池", "") },
{ "backup_battery.voltage", ("备用电池电压", "电源与电池", "mV") },
{ "backup_battery.temperature", ("备用电池温度", "电源与电池", "°C") },
{ "drone_battery_maintenance_info", ("电池保养信息", "电源与电池", "") },
{ "drone_battery_maintenance_info.maintenance_state", ("保养状态", "电源与电池", "") },
{ "drone_battery_maintenance_info.maintenance_time_left", ("电池保养剩余时间", "电源与电池", "h") },
{ "drone_battery_maintenance_info.heat_state", ("电池加热保温状态", "电源与电池", "") },
// Communication
{ "network_state", ("网络状态", "通信与连接", "") },
{ "network_state.type", ("网络类型", "通信与连接", "") },
{ "network_state.quality", ("网络质量", "通信与连接", "") },
{ "network_state.rate", ("网络速率", "通信与连接", "KB/s") },
{ "wireless_link", ("图传链路", "通信与连接", "") },
{ "wireless_link.link_workmode", ("链路工作模式", "通信与连接", "") },
{ "wireless_link.sdr_link_state", ("SDR 链路状态", "通信与连接", "") },
{ "wireless_link.sdr_quality", ("SDR 信号质量", "通信与连接", "") },
{ "wireless_link.4g_link_state", ("4G 链路状态", "通信与连接", "") },
{ "wireless_link.4g_quality", ("4G 信号质量", "通信与连接", "") },
// Security & Config
{ "emergency_stop_state", ("紧急停止按钮状态", "安全控制", "") },
{ "alarm_state", ("声光报警状态", "安全控制", "") },
{ "silent_mode", ("静音模式", "配置参数", "") },
{ "battery_store_mode", ("电池运行模式", "配置参数", "") },
{ "air_transfer_enable", ("空中回传", "配置参数", "") },
{ "user_experience_improvement", ("体验改善计划", "配置参数", "") },
{ "alternate_land_point", ("备降点设置", "配置参数", "") },
// Sub Device (Drone in Dock scenario)
{ "sub_device", ("子设备状态", "子设备", "") },
{ "sub_device.device_sn", ("子设备SN", "子设备", "") },
{ "sub_device.device_model_key", ("子设备产品型号", "子设备", "") },
{ "sub_device.device_online_status", ("子设备开机状态", "子设备", "") },
{ "sub_device.device_paired", ("子设备是否对频", "子设备", "") },
// Drone Flight Telemetry (For Drone standalone or subdevice)
{ "attitude_head", ("偏航角", "飞行姿态", "°") },
{ "attitude_roll", ("横滚角", "飞行姿态", "°") },
{ "attitude_pitch", ("俯仰角", "飞行姿态", "°") },
{ "elevation", ("相对起飞高度", "飞行姿态", "m") },
{ "vertical_speed", ("垂直速度", "飞行姿态", "m/s") },
{ "horizontal_speed", ("水平速度", "飞行姿态", "m/s") },
{ "wind_direction", ("风向", "飞行姿态", "") },
{ "home_distance", ("距离 Home 点距离", "飞行姿态", "m") },
{ "home_latitude", ("Home 点纬度", "飞行姿态", "°") },
{ "home_longitude", ("Home 点经度", "飞行姿态", "°") },
{ "gear", ("档位", "飞行姿态", "") },
{ "mode_code_reason", ("当前状态原因", "飞行姿态", "") },
{ "total_flight_distance", ("累计飞行里程", "飞行统计", "m") },
{ "total_flight_time", ("累计飞行时间", "飞行统计", "秒") },
{ "total_flight_sorties", ("累计飞行总架次", "飞行统计", "次") },
{ "low_battery_warning_threshold", ("低电量报警阈值", "配置参数", "%") },
{ "serious_low_battery_warning_threshold", ("严重低电量报警阈值", "配置参数", "%") },
{ "height_limit", ("飞行高度限制", "配置参数", "m") },
{ "obstacle_avoidance", ("避障状态", "配置参数", "") },
{ "obstacle_avoidance.horizon", ("水平避障", "配置参数", "") },
{ "obstacle_avoidance.upside", ("上视避障", "配置参数", "") },
{ "obstacle_avoidance.downside", ("下视避障", "配置参数", "") },
// Batteries
{ "battery", ("电池信息", "电源与电池", "") },
{ "battery.capacity_percent", ("电池电量百分比", "电源与电池", "%") },
{ "battery.remain_flight_time", ("剩余飞行时间", "电源与电池", "秒") },
{ "battery.return_home_power", ("返航所需电量", "电源与电池", "%") },
{ "battery.landing_power", ("强降所需电量", "电源与电池", "%") },
// Gimbal
{ "type_subtype_gimbalindex", ("云台位置角度", "负载", "") },
{ "type_subtype_gimbalindex.gimbal_pitch", ("云台俯仰角", "负载", "°") },
{ "type_subtype_gimbalindex.gimbal_roll", ("云台横滚角", "负载", "°") },
{ "type_subtype_gimbalindex.gimbal_yaw", ("云台偏航角", "负载", "°") }
};
private static readonly Dictionary<string, Dictionary<string, string>> EnumTranslations = new()
{
{ "cover_state", new() { { "0", "关闭 🔒" }, { "1", "打开 🔓" }, { "2", "半开 🧭" }, { "3", "状态异常 ⚠️" } } },
{ "air_conditioner_state", new() {
{ "0", "空闲" }, { "1", "制冷 ❄️" }, { "2", "制热 🔥" }, { "3", "除湿 💧" },
{ "4", "制冷退出" }, { "5", "制热退出" }, { "6", "除湿退出" },
{ "7", "制冷准备" }, { "8", "制热准备" }, { "9", "除湿准备" }
} },
{ "rainfall", new() { { "0", "无雨 ☀️" }, { "1", "小雨 🌧️" }, { "2", "中雨 🌧️" }, { "3", "大雨 ⛈️" } } },
{ "drone_in_dock", new() { { "0", "舱外" }, { "1", "舱内" } } },
{ "emergency_stop_state", new() { { "0", "正常 ✅" }, { "1", "急停触发 ❌" } } },
{ "alarm_state", new() { { "0", "关闭" }, { "1", "开启 🚨" } } },
{ "supplement_light_state", new() { { "0", "关闭 🌑" }, { "1", "开启 💡" } } },
{ "battery_store_mode", new() { { "1", "计划模式 (55%-60%)" }, { "2", "待命模式 (90%-95%)" } } },
{ "network_state.type", new() { { "1", "4G Dongle" }, { "2", "以太网 🌐" } } },
{ "network_state.quality", new() { { "0", "无信号" }, { "1", "差" }, { "2", "较差" }, { "3", "一般" }, { "4", "较好" }, { "5", "极好 ✅" } } },
{ "position_state.is_calibration", new() { { "0", "未标定" }, { "1", "已标定 ✅" } } },
{ "position_state.is_fixed", new() { { "0", "未收敛" }, { "1", "收敛中" }, { "2", "收敛成功 ✅" }, { "3", "收敛失败 ❌" } } },
{ "position_state.quality", new() { { "1", "1档" }, { "2", "2档" }, { "3", "3档" }, { "4", "4档" }, { "5", "5档" }, { "10", "RTK Fixed (高精定位) ✨" } } },
{ "flighttask_step_code", new() {
{ "0", "作业准备中" }, { "1", "飞行作业中" }, { "2", "作业后状态恢复" },
{ "3", "自定义飞行区更新" }, { "4", "地形障碍物更新" }, { "5", "任务空闲" },
{ "255", "飞行器异常" }, { "256", "未知状态" }
} },
{ "mode_code_dock", new() {
{ "0", "空闲中" }, { "1", "现场调试 🛠️" }, { "2", "远程调试 🌐" }, { "3", "固件升级中" }, { "4", "作业中" }
} },
{ "mode_code_drone", new() {
{ "0", "待机" }, { "1", "起飞准备" }, { "2", "起飞准备完毕" }, { "3", "手动飞行 🎮" },
{ "4", "自动起飞 🚀" }, { "5", "航线飞行 🛫" }, { "6", "全景拍照" }, { "7", "智能跟随" },
{ "8", "ADS-B 躲避" }, { "9", "自动返航 🔄" }, { "10", "自动降落 🛬" }, { "11", "强制降落 ⚠️" },
{ "12", "三桨叶降落" }, { "13", "升级中" }, { "14", "未连接" }, { "15", "APAS" },
{ "16", "虚拟摇杆" }, { "17", "指令飞行" }, { "18", "空中 RTK 收敛" }, { "19", "机场选址" }
} },
{ "wind_direction", new() {
{ "1", "正北" }, { "2", "东北" }, { "3", "东" }, { "4", "东南" },
{ "5", "南" }, { "6", "西南" }, { "7", "西" }, { "8", "西北" }
} }
};
public static (string Label, string Category, string TranslatedValue) Translate(string keyPath, string rawValue, bool isDock = true)
{
string cleanKey = keyPath;
if (cleanKey.StartsWith("data."))
{
cleanKey = cleanKey.Substring(5);
}
string label = cleanKey;
string category = "未分类";
string unit = "";
if (Translations.TryGetValue(cleanKey, out var trans))
{
label = trans.Label;
category = trans.Category;
unit = trans.Unit;
}
else
{
int lastDot = cleanKey.LastIndexOf('.');
if (lastDot >= 0)
{
string leaf = cleanKey.Substring(lastDot + 1);
if (Translations.TryGetValue(leaf, out var leafTrans))
{
label = leafTrans.Label;
category = leafTrans.Category;
unit = leafTrans.Unit;
}
}
}
string translatedVal = rawValue;
string enumLookupKey = cleanKey;
if (cleanKey == "mode_code")
{
enumLookupKey = isDock ? "mode_code_dock" : "mode_code_drone";
}
if (EnumTranslations.TryGetValue(enumLookupKey, out var enumMap))
{
if (enumMap.TryGetValue(rawValue, out var mappedStr))
{
translatedVal = mappedStr;
}
}
else
{
int lastDot = cleanKey.LastIndexOf('.');
if (lastDot >= 0)
{
string leaf = cleanKey.Substring(lastDot + 1);
if (EnumTranslations.TryGetValue(leaf, out var leafEnumMap))
{
if (leafEnumMap.TryGetValue(rawValue, out var mappedStr))
{
translatedVal = mappedStr;
}
}
}
}
if (!string.IsNullOrEmpty(unit) && double.TryParse(rawValue, out _))
{
translatedVal += " " + unit;
}
return (label, category, translatedVal);
}
}
}