Wanlau commited on
Commit
45c240b
·
1 Parent(s): a4ef31a

i18n.en_US

Browse files
Files changed (6) hide show
  1. .gitignore +1 -0
  2. NDplot.py +23 -23
  3. app.py +83 -89
  4. i18n/i18n.py +30 -0
  5. i18n/locale/en_US.json +70 -0
  6. i18n/locale/zh_CN.json +70 -0
.gitignore CHANGED
@@ -1,2 +1,3 @@
1
  __pycache__/*
 
2
  .vscode/*
 
1
  __pycache__/*
2
+ i18n/__pycache__/*
3
  .vscode/*
NDplot.py CHANGED
@@ -9,7 +9,7 @@ import matplotlib.pyplot as plt
9
  from matplotlib.patches import Patch
10
 
11
  ## the synthesis methods: Mass Spectroscopy, Radioactive Decay, Light Particles, Fission, Fusion, Spallation, Projectile Fragmentation, and Transfer/Deep Inelastic Scattering
12
- colors_synthesisMethods = {
13
  "MS" : (0, 0, 0),
14
  "RD" : (0, 255, 255),
15
  "LP" : (255, 165, 0),
@@ -20,7 +20,7 @@ colors_synthesisMethods = {
20
  "UN" : (127, 0, 127)
21
  }
22
 
23
- names_synthesisMethods = {
24
  "MS" : "Mass Spectroscopy",
25
  "RD" : "Radioactive Decay",
26
  "LP" : "Light Particles",
@@ -31,7 +31,7 @@ names_synthesisMethods = {
31
  "UN" : "Transfer/Deep Inelastic"
32
  }
33
 
34
- colors_halflife = {
35
  "l100ns": (247, 189, 222),
36
  "100ns" : (255, 198, 165),
37
  "1us" : (255, 231, 198),
@@ -54,7 +54,7 @@ colors_halflife = {
54
  "UN" : (224, 224, 224)
55
  }
56
 
57
- legends_halflife = {
58
  "l100ns": "<100ns",
59
  "100ns" : "100ns ~ 1us",
60
  "1us" : "1us ~ 10us",
@@ -77,7 +77,7 @@ legends_halflife = {
77
  "UN" : "UNKNOWN"
78
  }
79
 
80
- colors_DecayModes = {
81
  "P" : (255, 148, 115),
82
  "N" : (156, 123, 189),
83
  "A" : (255, 255, 66),
@@ -89,7 +89,7 @@ colors_DecayModes = {
89
  "UNKNOWN":(224, 224, 224)
90
  }
91
 
92
- legends_DecayModes = {
93
  "P" : "Proton",
94
  "N" : "Neutron",
95
  "A" : "Alaph",
@@ -277,8 +277,8 @@ def nucildesChartPlotPLTColor(color_data, mode, z_min, n_min ,z_max, n_max):
277
  if (row["z"] >= z_min and row["z"] <= z_max) and (row["n"] >= n_min and row["n"] <= n_max):
278
  ypos = row["z"] - z_min
279
  xpos = row["n"] - n_min
280
- if row["type"] in colors_halflife:
281
- color_data[ypos][xpos] = np.array(colors_halflife[row["type"]])
282
 
283
  ## 据衰变模式上色
284
  elif mode == 1:
@@ -290,16 +290,16 @@ def nucildesChartPlotPLTColor(color_data, mode, z_min, n_min ,z_max, n_max):
290
  if (row["z"] >= z_min and row["z"] <= z_max) and (row["n"] >= n_min and row["n"] <= n_max):
291
  ypos = row["z"] - z_min
292
  xpos = row["n"] - n_min
293
- if row["type"] in colors_DecayModes:
294
- color_data[ypos][xpos] = np.array(colors_DecayModes[row["type"]])
295
  elif row["type"] in ("2B-", "β⁻"):
296
- color_data[ypos][xpos] = np.array(colors_DecayModes["B-"])
297
  elif row["type"] in ("2P", "3P"):
298
- color_data[ypos][xpos] = np.array(colors_DecayModes["P"])
299
  elif row["type"] in ("2N"):
300
- color_data[ypos][xpos] = np.array(colors_DecayModes["N"])
301
  else:
302
- color_data[ypos][xpos] = np.array(colors_DecayModes["UNKNOWN"])
303
 
304
  ## 据合成方法上色
305
  elif mode == 2:
@@ -310,29 +310,29 @@ def nucildesChartPlotPLTColor(color_data, mode, z_min, n_min ,z_max, n_max):
310
  if (row["z"] >= z_min and row["z"] <= z_max) and (row["n"] >= n_min and row["n"] <= n_max):
311
  ypos = row["z"] - z_min
312
  xpos = row["n"] - n_min
313
- if row["type"] in colors_synthesisMethods:
314
- color_data[ypos][xpos] = np.array(colors_synthesisMethods[row["type"]])
315
 
316
  return color_data
317
 
318
  def legendHandlesGet(plot_mode):
319
  handles = []
320
  if plot_mode == 0:
321
- for hl_tag in colors_halflife:
322
  if hl_tag == "ST":
323
  pass
324
  elif hl_tag == "1e15s":
325
- handles.append(Patch(facecolor=np.array(colors_halflife[hl_tag])/255., label=">1e15s or Stable"))
326
  else:
327
- handles.append(Patch(facecolor=np.array(colors_halflife[hl_tag])/255., label=legends_halflife[hl_tag]))
328
 
329
  elif plot_mode == 1:
330
- for decay_mode in colors_DecayModes:
331
- handles.append(Patch(facecolor=np.array(colors_DecayModes[decay_mode])/255., label=legends_DecayModes[decay_mode]))
332
 
333
  elif plot_mode == 2:
334
- for synthesis_method in colors_synthesisMethods:
335
- handles.append(Patch(facecolor=np.array(colors_synthesisMethods[synthesis_method])/255., label=names_synthesisMethods[synthesis_method]))
336
 
337
  return handles
338
 
 
9
  from matplotlib.patches import Patch
10
 
11
  ## the synthesis methods: Mass Spectroscopy, Radioactive Decay, Light Particles, Fission, Fusion, Spallation, Projectile Fragmentation, and Transfer/Deep Inelastic Scattering
12
+ COLORS_SYNTHESISMETHODS = {
13
  "MS" : (0, 0, 0),
14
  "RD" : (0, 255, 255),
15
  "LP" : (255, 165, 0),
 
20
  "UN" : (127, 0, 127)
21
  }
22
 
23
+ NAMES_SYNTHESISMETHODS = {
24
  "MS" : "Mass Spectroscopy",
25
  "RD" : "Radioactive Decay",
26
  "LP" : "Light Particles",
 
31
  "UN" : "Transfer/Deep Inelastic"
32
  }
33
 
34
+ COLORS_HALFLIFE = {
35
  "l100ns": (247, 189, 222),
36
  "100ns" : (255, 198, 165),
37
  "1us" : (255, 231, 198),
 
54
  "UN" : (224, 224, 224)
55
  }
56
 
57
+ LEGENDS_HALFLIFE = {
58
  "l100ns": "<100ns",
59
  "100ns" : "100ns ~ 1us",
60
  "1us" : "1us ~ 10us",
 
77
  "UN" : "UNKNOWN"
78
  }
79
 
80
+ COLORS_DECAYMODES = {
81
  "P" : (255, 148, 115),
82
  "N" : (156, 123, 189),
83
  "A" : (255, 255, 66),
 
89
  "UNKNOWN":(224, 224, 224)
90
  }
91
 
92
+ LEGENDS_DECAYMODES = {
93
  "P" : "Proton",
94
  "N" : "Neutron",
95
  "A" : "Alaph",
 
277
  if (row["z"] >= z_min and row["z"] <= z_max) and (row["n"] >= n_min and row["n"] <= n_max):
278
  ypos = row["z"] - z_min
279
  xpos = row["n"] - n_min
280
+ if row["type"] in COLORS_HALFLIFE:
281
+ color_data[ypos][xpos] = np.array(COLORS_HALFLIFE[row["type"]])
282
 
283
  ## 据衰变模式上色
284
  elif mode == 1:
 
290
  if (row["z"] >= z_min and row["z"] <= z_max) and (row["n"] >= n_min and row["n"] <= n_max):
291
  ypos = row["z"] - z_min
292
  xpos = row["n"] - n_min
293
+ if row["type"] in COLORS_DECAYMODES:
294
+ color_data[ypos][xpos] = np.array(COLORS_DECAYMODES[row["type"]])
295
  elif row["type"] in ("2B-", "β⁻"):
296
+ color_data[ypos][xpos] = np.array(COLORS_DECAYMODES["B-"])
297
  elif row["type"] in ("2P", "3P"):
298
+ color_data[ypos][xpos] = np.array(COLORS_DECAYMODES["P"])
299
  elif row["type"] in ("2N"):
300
+ color_data[ypos][xpos] = np.array(COLORS_DECAYMODES["N"])
301
  else:
302
+ color_data[ypos][xpos] = np.array(COLORS_DECAYMODES["UNKNOWN"])
303
 
304
  ## 据合成方法上色
305
  elif mode == 2:
 
310
  if (row["z"] >= z_min and row["z"] <= z_max) and (row["n"] >= n_min and row["n"] <= n_max):
311
  ypos = row["z"] - z_min
312
  xpos = row["n"] - n_min
313
+ if row["type"] in COLORS_SYNTHESISMETHODS:
314
+ color_data[ypos][xpos] = np.array(COLORS_SYNTHESISMETHODS[row["type"]])
315
 
316
  return color_data
317
 
318
  def legendHandlesGet(plot_mode):
319
  handles = []
320
  if plot_mode == 0:
321
+ for hl_tag in COLORS_HALFLIFE:
322
  if hl_tag == "ST":
323
  pass
324
  elif hl_tag == "1e15s":
325
+ handles.append(Patch(facecolor=np.array(COLORS_HALFLIFE[hl_tag])/255., label=">1e15s or Stable"))
326
  else:
327
+ handles.append(Patch(facecolor=np.array(COLORS_HALFLIFE[hl_tag])/255., label=LEGENDS_HALFLIFE[hl_tag]))
328
 
329
  elif plot_mode == 1:
330
+ for decay_mode in COLORS_DECAYMODES:
331
+ handles.append(Patch(facecolor=np.array(COLORS_DECAYMODES[decay_mode])/255., label=LEGENDS_DECAYMODES[decay_mode]))
332
 
333
  elif plot_mode == 2:
334
+ for synthesis_method in COLORS_SYNTHESISMETHODS:
335
+ handles.append(Patch(facecolor=np.array(COLORS_SYNTHESISMETHODS[synthesis_method])/255., label=NAMES_SYNTHESISMETHODS[synthesis_method]))
336
 
337
  return handles
338
 
app.py CHANGED
@@ -1,10 +1,18 @@
1
- import gradio as gr
2
- import pandas as pd
3
  import json
 
4
  from tempfile import NamedTemporaryFile
5
 
 
 
 
6
  import NDfilter
7
  import NDplot
 
 
 
 
 
 
8
 
9
  ## 核素筛选
10
  def process_filters(Z_min, Z_max, Z_oe_idx, N_min, N_max, N_oe_idx, A_min, A_max, A_oe_idx, hl_enable_idx, hl_min, hl_min_unit, hl_max, hl_max_unit, dm_enable_idx, decay_modes):
@@ -23,10 +31,10 @@ def process_filters(Z_min, Z_max, Z_oe_idx, N_min, N_max, N_oe_idx, A_min, A_max
23
 
24
  # 结果处理
25
  if len(filtered_data) == 0:
26
- result_text = "没有找到符合条件的核素"
27
  result_file_path = None
28
  else:
29
- result_text = f"找到 {len(filtered_data)} 个符合条件的核素"
30
  with NamedTemporaryFile(suffix=".json", delete=False, mode='w') as file:
31
  json.dump(filtered_data, file, indent=2)
32
  result_file_path = file.name
@@ -49,7 +57,7 @@ def process_search(mode_idx, nom, z, n, a, preview_mode, file_type):
49
 
50
  ## 结果处理
51
  if result == None:
52
- result_text = "没有找到此核素"
53
  result_dataframe = None
54
  result_file_path = None
55
  else:
@@ -57,8 +65,8 @@ def process_search(mode_idx, nom, z, n, a, preview_mode, file_type):
57
  name = result["name"]
58
  result_text = f"{name}"
59
  if len(result["levels"]) == 0:
60
- result_text = result_text + "\n此核素无数据"
61
- result_text = result_text + "\n\nnndc页面:\n\ngetdataset:\n" + f"https://www.nndc.bnl.gov/nudat3/getdataset.jsp?nucleus={name}&unc=NDS"
62
  ## temp
63
  with open ("data/haveDecayPage.json",'r', encoding='utf-8') as file:
64
  haveDecayPage = json.load(file)
@@ -157,67 +165,59 @@ with open (nuclides_data_path,'r', encoding='utf-8') as file:
157
  ## 半衰期单位转换字典
158
  HL_UNITS = {"fs": 1e-15, "ps": 1e-12, "ns": 1e-9, "us": 1e-6, "ms": 1e-3, "s": 1, "m": 60, "h": 3600, "d": 86400, "y": 31557600, "ky": 31557600e3, "My": 31557600e6, "Gy": 31557600e9}
159
 
160
- with gr.Blocks(title="核数据工具") as demo:
161
- gr.Markdown("""
162
- ## 核数据工具
163
- 可能是用来处理核数据的相关工具??
164
-
165
- 目前功能有:核素筛选、核素查找、核素图绘制。
166
- """)
167
 
168
- with gr.Tab("核素筛选"):
169
- gr.Markdown("""
170
- ## 核素筛选
171
- 可以通过质子数(Z)、中子数(N)、质量数(A)以及母核半衰期、衰变模式等进行筛选
172
- """)
173
  with gr.Row():
174
  with gr.Column(scale=1):
175
- gr.Markdown("根据质子数(Z)、中子数(N)、质量数(A)进行筛选")
176
  with gr.Column(scale=4):
177
  with gr.Row():
178
  with gr.Column(min_width=240):
179
- gr.Markdown("质子数(Z)")
180
- Z_min = gr.Number(label="最小值", precision=0)
181
- Z_max = gr.Number(label="最大值", precision=0)
182
- Z_oe = gr.Dropdown(["任意", "奇Z", "偶Z"], label="奇偶", type="index", interactive=True)
183
  with gr.Column(min_width=240):
184
- gr.Markdown("中子数(N)")
185
- N_min = gr.Number(label="最小值", precision=0)
186
- N_max = gr.Number(label="最大值", precision=0)
187
- N_oe = gr.Dropdown(["任意", "奇N", "偶N"], label="奇偶", type="index", interactive=True)
188
  with gr.Column(min_width=240):
189
- gr.Markdown("质量数(A)")
190
- A_min = gr.Number(label="最小值", precision=0)
191
- A_max = gr.Number(label="最大值", precision=0)
192
- A_oe = gr.Dropdown(["任意", "奇A", "偶A"], label="奇偶", type="index", interactive=True)
193
 
194
  with gr.Row():
195
  with gr.Column(scale=1):
196
- gr.Markdown("根据母核半衰期进行筛选")
197
  with gr.Column(scale=4):
198
  with gr.Row():
199
- hl_enable = gr.Radio(["不使用", "使用"], value="不使用", type="index", show_label=False)
200
- hl_min = gr.Number(label="最小值", minimum=0.)
201
- hl_min_unit = gr.Dropdown(["fs", "ps", "ns", "us", "ms", "s", "m", "h", "d", "y", "ky", "My", "Gy", "Stable"], value="fs", interactive=True)
202
- hl_max = gr.Number(label="最大值", minimum=0.)
203
- hl_max_unit = gr.Dropdown(["fs", "ps", "ns", "us", "ms", "s", "m", "h", "d", "y", "ky", "My", "Gy", "Stable"], value="Stable", interactive=True)
204
 
205
  with gr.Row():
206
  with gr.Column(scale=1):
207
- gr.Markdown("根据衰变模式进行筛选")
208
  with gr.Column(scale=4):
209
  with gr.Row():
210
- dm_enable_idx = gr.Radio(["不使用", "筛选包含所有以下所选衰变模式的核素(and)", "筛选包含任意以下所选衰变模式的核素(or)"], value="不使用", type="index", interactive=True, show_label=False)
211
  with gr.Row():
212
- decayModes = gr.CheckboxGroup(['B-', 'N', '2N', 'B-N', 'P', 'B-A', 'B-2N', 'B-3N', '2P', 'EC', 'A', 'B-4N', 'EC+B+', 'ECA', 'ECP', 'IT', 'EC2P', 'EC3P', 'ECAP', '3P', '2B-', 'ECSF', '14C', 'B-SF', '24NE', 'SF', '20O', '20NE', '25NE', '28MG', 'NE', '22NE', 'SI', 'MG', '34SI'], label="decayModes", interactive=True)
213
 
214
  with gr.Row():
215
- submit_btn = gr.Button("筛选", variant="primary")
216
- reset_btn = gr.Button("重置条件", variant="primary")
217
 
218
  with gr.Row():
219
- result_text = gr.Textbox(label="筛选结果", interactive=False, show_copy_button=True)
220
- result_file = gr.File(label="结果文件", interactive=False)
221
 
222
  inputs = [
223
  Z_min, Z_max, Z_oe,
@@ -234,33 +234,33 @@ with gr.Blocks(title="核数据工具") as demo:
234
  )
235
 
236
  reset_btn.click(
237
- fn=lambda: [None,None,"任意"]*3 + ["不使用", None, "fs", None, "Stable"] + ["不使用", []],
238
  outputs=inputs
239
  )
240
 
241
 
242
- with gr.Tab("核素查找"):
243
- gr.Markdown("## 核素查找")
244
  with gr.Row():
245
  with gr.Column(scale=3):
246
- searchingMode = gr.Radio(["核素名称", "质子数(Z)、中子数(N)", "质子数(Z)、质量数(A)", "中子数(N)、质量数(A)"], value="核素名称", label="查找模式", interactive=True, type="index")
247
- gr.Markdown("### 根据核素名称查找")
248
- nuclide_in = gr.Textbox(value=None, info="请输入由质量数及元素名称所组成的核素名称,示例:232Th、232TH、th232、232-Th、th-232等。\n只要不太离谱就能识别……大概?")
249
- gr.Markdown("### 根据质子数(Z)、中子数(N)、质量数(A)查找")
250
  with gr.Row():
251
- Z_in = gr.Number(value=0, label="质子数(Z)", precision=0, interactive=False)
252
- N_in = gr.Number(value=0, label="中子数(N)", precision=0, interactive=False)
253
- A_in = gr.Number(value=0, label="质量数(A)", precision=0, interactive=False)
254
- previewMode = gr.Radio(["紧凑", "常规"], value="紧凑", type="index", label="预览模式")
255
- outputFileType = gr.Radio(["json", "csv"], value="json", type="index", label="导出文件格式")
256
  with gr.Row():
257
- submit_btn2 = gr.Button("查找", variant="primary")
258
- reset_btn2 = gr.Button("重置条件", variant="primary")
259
 
260
  with gr.Column(scale=2):
261
  result_text2 = gr.Textbox(interactive=False, show_label=False)
262
- preview_df = gr.Dataframe(label="数据预览", interactive=False)
263
- result_file2 = gr.File(interactive=False)
264
 
265
  searchingMode.change(
266
  fn=update_inputs2,
@@ -286,41 +286,35 @@ with gr.Blocks(title="核数据工具") as demo:
286
  outputs=[nuclide_in, Z_in, N_in, A_in]
287
  )
288
 
289
- with gr.Tab("核素图绘制"):
290
- gr.Markdown("""
291
- ## 核素图绘制
292
-
293
- 可根据半衰期、衰变模式、合成方法等分类模式绘制核素图。
294
-
295
- 部分代码参考了Ming-Hao-Zhang的[Nuclei-Chart-Generator](https://github.com/Ming-Hao-Zhang/Nuclei-Chart-Generator)
296
- """)
297
  with gr.Row():
298
  with gr.Column(scale=3):
299
- img_preview = gr.Plot(label="图片预览")
300
  with gr.Column(scale=2):
301
- plot_mode = gr.Radio(["寿命", "衰变模式", "合成方法"], value="寿命", label="核素分类模式", type="index")
302
- text_mode = gr.Radio(["无", "元素名称", "核素名称", "详细信息"], value="无", label="显示信息", type="index")
303
- have_legend_idx = gr.Radio(["显示图例", "隐藏图例"], value="显示图例", label="图例", type="index")
304
- file_type3 = gr.Radio(["svg", "png"], value="svg", label="导出格式", info="png为位图格式,svg为矢量图格式。\n显示详细信息时,受分辨率限制,png格式将会失真。如需高清晰度图像,请使用svg。")
305
-
306
- with gr.Accordion(open=False, label="更多选项") as filter3:
307
- gr.Markdown("根据质子数(Z)、中子数(N)筛选 (未启用)")
308
- using_filter = gr.Radio(["不使用", "使用"], value="不使用", show_label=False, type='index', interactive=False)
309
  with gr.Row():
310
  with gr.Column(min_width=120):
311
- gr.Markdown("质子数(Z)")
312
- Z_min = gr.Number(label="最小值", precision=0, interactive=False)
313
- Z_max = gr.Number(label="最大值", precision=0, interactive=False)
314
  with gr.Column(min_width=120):
315
- gr.Markdown("中子数(N)")
316
- N_min = gr.Number(label="最小值", precision=0, interactive=False)
317
- N_max = gr.Number(label="最大值", precision=0, interactive=False)
318
 
319
  with gr.Row():
320
- submit_btn3 = gr.Button("绘制", variant="primary")
321
- reset_btn3 = gr.Button("重置条件", variant="primary")
322
 
323
- result_file3 = gr.File(interactive=False)
324
 
325
  using_filter.change(
326
  fn=update_inputs3,
@@ -329,7 +323,7 @@ with gr.Blocks(title="核数据工具") as demo:
329
  )
330
 
331
  filter3.collapse(
332
- fn=lambda: "不使用",
333
  outputs= using_filter
334
  )
335
 
@@ -342,7 +336,7 @@ with gr.Blocks(title="核数据工具") as demo:
342
  )
343
 
344
  reset_btn3.click(
345
- fn=lambda: ["寿命", "无", "显示图例", "svg", "不使用"] + [None]*4,
346
  outputs=inputs3
347
  )
348
 
 
 
 
1
  import json
2
+ import logging
3
  from tempfile import NamedTemporaryFile
4
 
5
+ import gradio as gr
6
+ import pandas as pd
7
+
8
  import NDfilter
9
  import NDplot
10
+ from i18n.i18n import I18nAuto
11
+
12
+ logger = logging.getLogger(__name__)
13
+ logger.setLevel("INFO")
14
+ i18n = I18nAuto()
15
+ logger.info(i18n)
16
 
17
  ## 核素筛选
18
  def process_filters(Z_min, Z_max, Z_oe_idx, N_min, N_max, N_oe_idx, A_min, A_max, A_oe_idx, hl_enable_idx, hl_min, hl_min_unit, hl_max, hl_max_unit, dm_enable_idx, decay_modes):
 
31
 
32
  # 结果处理
33
  if len(filtered_data) == 0:
34
+ result_text = i18n("没有找到符合条件的核素")
35
  result_file_path = None
36
  else:
37
+ result_text = i18n("找到符合条件核素数目:") + str(len(filtered_data))
38
  with NamedTemporaryFile(suffix=".json", delete=False, mode='w') as file:
39
  json.dump(filtered_data, file, indent=2)
40
  result_file_path = file.name
 
57
 
58
  ## 结果处理
59
  if result == None:
60
+ result_text = i18n("没有找到此核素")
61
  result_dataframe = None
62
  result_file_path = None
63
  else:
 
65
  name = result["name"]
66
  result_text = f"{name}"
67
  if len(result["levels"]) == 0:
68
+ result_text = result_text + i18n("\n此核素无数据")
69
+ result_text = result_text + "\n\n" + i18n("NNDC页面:") + "\n\ngetdataset:\n" + f"https://www.nndc.bnl.gov/nudat3/getdataset.jsp?nucleus={name}&unc=NDS"
70
  ## temp
71
  with open ("data/haveDecayPage.json",'r', encoding='utf-8') as file:
72
  haveDecayPage = json.load(file)
 
165
  ## 半衰期单位转换字典
166
  HL_UNITS = {"fs": 1e-15, "ps": 1e-12, "ns": 1e-9, "us": 1e-6, "ms": 1e-3, "s": 1, "m": 60, "h": 3600, "d": 86400, "y": 31557600, "ky": 31557600e3, "My": 31557600e6, "Gy": 31557600e9}
167
 
168
+ with gr.Blocks(title=i18n("核数据工具")) as demo:
169
+ gr.Markdown(i18n("**核数据工具** <br> 可能是用来处理核数据的相关工具?? <br> 目前功能有:核素筛选、核素查找、核素图绘制。"))
 
 
 
 
 
170
 
171
+ with gr.Tab(i18n("核素筛选")):
172
+ gr.Markdown(i18n("**核素筛选** <br> 可以通过质子数(Z)、中子数(N)、质量数(A)以及母核半衰期、衰变模式等进行筛选"))
 
 
 
173
  with gr.Row():
174
  with gr.Column(scale=1):
175
+ gr.Markdown(i18n("根据质子数(Z)、中子数(N)、质量数(A)进行筛选"))
176
  with gr.Column(scale=4):
177
  with gr.Row():
178
  with gr.Column(min_width=240):
179
+ gr.Markdown(i18n("质子数(Z)"))
180
+ Z_min = gr.Number(label=i18n("最小值"), precision=0)
181
+ Z_max = gr.Number(label=i18n("最大值"), precision=0)
182
+ Z_oe = gr.Dropdown([i18n("任意"), i18n("奇Z"), i18n("偶Z")], label=i18n("奇偶"), type="index", interactive=True)
183
  with gr.Column(min_width=240):
184
+ gr.Markdown(i18n("中子数(N)"))
185
+ N_min = gr.Number(label=i18n("最小值"), precision=0)
186
+ N_max = gr.Number(label=i18n("最大值"), precision=0)
187
+ N_oe = gr.Dropdown([i18n("任意"), i18n("奇N"), i18n("偶N")], label=i18n("奇偶"), type="index", interactive=True)
188
  with gr.Column(min_width=240):
189
+ gr.Markdown(i18n("质量数(A)"))
190
+ A_min = gr.Number(label=i18n("最小值"), precision=0)
191
+ A_max = gr.Number(label=i18n("最大值"), precision=0)
192
+ A_oe = gr.Dropdown([i18n("任意"), i18n("奇A"), i18n("偶A")], label=i18n("奇偶"), type="index", interactive=True)
193
 
194
  with gr.Row():
195
  with gr.Column(scale=1):
196
+ gr.Markdown(i18n("根据母核半衰期进行筛选"))
197
  with gr.Column(scale=4):
198
  with gr.Row():
199
+ hl_enable = gr.Radio([i18n("不使用"), i18n("使用")], value=i18n("不使用"), type="index", show_label=False)
200
+ hl_min = gr.Number(label=i18n("最小值"), minimum=0.)
201
+ hl_min_unit = gr.Dropdown(["fs", "ps", "ns", "us", "ms", "s", "m", "h", "d", "y", "ky", "My", "Gy", "Stable"], value="fs", interactive=True, label=" ")
202
+ hl_max = gr.Number(label=i18n("最大值"), minimum=0.)
203
+ hl_max_unit = gr.Dropdown(["fs", "ps", "ns", "us", "ms", "s", "m", "h", "d", "y", "ky", "My", "Gy", "Stable"], value="Stable", interactive=True, label=" ")
204
 
205
  with gr.Row():
206
  with gr.Column(scale=1):
207
+ gr.Markdown(i18n("根据衰变模式进行筛选"))
208
  with gr.Column(scale=4):
209
  with gr.Row():
210
+ dm_enable_idx = gr.Radio([i18n("不使用"), i18n("筛选包含所有以下所选衰变模式的核素(and)"), i18n("筛选包含任意以下所选衰变模式的核素(or)")], value=i18n("不使用"), type="index", interactive=True, show_label=False)
211
  with gr.Row():
212
+ decayModes = gr.CheckboxGroup(['B-', 'N', '2N', 'B-N', 'P', 'B-A', 'B-2N', 'B-3N', '2P', 'EC', 'A', 'B-4N', 'EC+B+', 'ECA', 'ECP', 'IT', 'EC2P', 'EC3P', 'ECAP', '3P', '2B-', 'ECSF', '14C', 'B-SF', '24NE', 'SF', '20O', '20NE', '25NE', '28MG', 'NE', '22NE', 'SI', 'MG', '34SI'], label=i18n("衰变模式"), interactive=True)
213
 
214
  with gr.Row():
215
+ submit_btn = gr.Button(i18n("筛选"), variant="primary")
216
+ reset_btn = gr.Button(i18n("重置条件"), variant="primary")
217
 
218
  with gr.Row():
219
+ result_text = gr.Textbox(label=i18n("筛选结果"), interactive=False, show_copy_button=True)
220
+ result_file = gr.File(label=i18n("结果文件"), interactive=False)
221
 
222
  inputs = [
223
  Z_min, Z_max, Z_oe,
 
234
  )
235
 
236
  reset_btn.click(
237
+ fn=lambda: [None,None,i18n("任意")]*3 + [i18n("不使用"), None, "fs", None, "Stable"] + [i18n("不使用"), []],
238
  outputs=inputs
239
  )
240
 
241
 
242
+ with gr.Tab(i18n("核素查找")):
243
+ gr.Markdown(i18n("**核素查找**"))
244
  with gr.Row():
245
  with gr.Column(scale=3):
246
+ searchingMode = gr.Radio([i18n("核素名称"), i18n("质子数(Z)、中子数(N)"), i18n("质子数(Z)、质量数(A)"), i18n("中子数(N)、质量数(A)")], value=i18n("核素名称"), label=i18n("查找模式"), interactive=True, type="index")
247
+ gr.Markdown(i18n("**根据核素名称查找**"))
248
+ nuclide_in = gr.Textbox(value=None, show_label=False, info=i18n("请输入由质量数及元素名称所组成的核素名称,示例:232Th、232TH、th232、232-Th、th-232等。\n只要不太离谱就能识别……大概?"))
249
+ gr.Markdown(i18n("**根据质子数(Z)、中子数(N)、质量数(A)查找**"))
250
  with gr.Row():
251
+ Z_in = gr.Number(value=0, label=i18n("质子数(Z)"), precision=0, interactive=False)
252
+ N_in = gr.Number(value=0, label=i18n("中子数(N)"), precision=0, interactive=False)
253
+ A_in = gr.Number(value=0, label=i18n("质量数(A)"), precision=0, interactive=False)
254
+ previewMode = gr.Radio([i18n("紧凑"), i18n("常规")], value=i18n("紧凑"), type="index", label=i18n("预览模式"))
255
+ outputFileType = gr.Radio(["json", "csv"], value="json", type="index", label=i18n("导出文件格式"))
256
  with gr.Row():
257
+ submit_btn2 = gr.Button(i18n("查找"), variant="primary")
258
+ reset_btn2 = gr.Button(i18n("重置条件"), variant="primary")
259
 
260
  with gr.Column(scale=2):
261
  result_text2 = gr.Textbox(interactive=False, show_label=False)
262
+ preview_df = gr.Dataframe(label=i18n("数据预览"), interactive=False)
263
+ result_file2 = gr.File(label=i18n("结果文件"), interactive=False)
264
 
265
  searchingMode.change(
266
  fn=update_inputs2,
 
286
  outputs=[nuclide_in, Z_in, N_in, A_in]
287
  )
288
 
289
+ with gr.Tab(i18n("核素图绘制")):
290
+ gr.Markdown(i18n("**核素图绘制** <br> 可根据半衰期、衰变模式、合成方法等分类模式绘制核素图。 <br>部分代码参考了Ming-Hao-Zhang的[Nuclei-Chart-Generator](https://github.com/Ming-Hao-Zhang/Nuclei-Chart-Generator)"))
 
 
 
 
 
 
291
  with gr.Row():
292
  with gr.Column(scale=3):
293
+ img_preview = gr.Plot(label=i18n("图片预览"))
294
  with gr.Column(scale=2):
295
+ plot_mode = gr.Radio([i18n("寿命"), i18n("衰变模式"), i18n("合成方法")], value=i18n("寿命"), label=i18n("核素分类模式"), type="index")
296
+ text_mode = gr.Radio([i18n("无"), i18n("元素名称"), i18n("核素名称"), i18n("详细信息")], value=i18n("无"), label=i18n("显示信息"), type="index")
297
+ have_legend_idx = gr.Radio([i18n("显示图例"), i18n("隐藏图例")], value=i18n("显示图例"), label=i18n("图例"), type="index")
298
+ file_type3 = gr.Radio(["svg", "png"], value="svg", label=i18n("导出格式"), info=i18n("png为位图格式,svg为矢量图格式。\n显示详细信息时,受分辨率限制,png格式将会失真。如需高清晰度图像,请使用svg。"))
299
+
300
+ with gr.Accordion(open=False, label=i18n("更多选项")) as filter3:
301
+ gr.Markdown(i18n("根据质子数(Z)、中子数(N)筛选 (未启用)"))
302
+ using_filter = gr.Radio([i18n("不使用"), i18n("使用")], value=i18n("不使用"), show_label=False, type='index', interactive=False)
303
  with gr.Row():
304
  with gr.Column(min_width=120):
305
+ gr.Markdown(i18n("质子数(Z)"))
306
+ Z_min = gr.Number(label=i18n("最小值"), precision=0, interactive=False)
307
+ Z_max = gr.Number(label=i18n("最大值"), precision=0, interactive=False)
308
  with gr.Column(min_width=120):
309
+ gr.Markdown(i18n("中子数(N)"))
310
+ N_min = gr.Number(label=i18n("最小值"), precision=0, interactive=False)
311
+ N_max = gr.Number(label=i18n("最大值"), precision=0, interactive=False)
312
 
313
  with gr.Row():
314
+ submit_btn3 = gr.Button(i18n("绘制"), variant="primary")
315
+ reset_btn3 = gr.Button(i18n("重置条件"), variant="primary")
316
 
317
+ result_file3 = gr.File(label=i18n("结果文件"), interactive=False)
318
 
319
  using_filter.change(
320
  fn=update_inputs3,
 
323
  )
324
 
325
  filter3.collapse(
326
+ fn=lambda: i18n("不使用"),
327
  outputs= using_filter
328
  )
329
 
 
336
  )
337
 
338
  reset_btn3.click(
339
+ fn=lambda: [i18n("寿命"), i18n("无"), i18n("显示图例"), "svg", i18n("不使用")] + [None]*4,
340
  outputs=inputs3
341
  )
342
 
i18n/i18n.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import locale
3
+ import os
4
+
5
+
6
+ ## codes form the repository Retrieval-based-Voice-Conversion-WebUI
7
+ ## URL: https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI
8
+ def load_language_list(language):
9
+ with open(f"./i18n/locale/{language}.json", "r", encoding="utf-8") as f:
10
+ language_list = json.load(f)
11
+ return language_list
12
+
13
+
14
+ class I18nAuto:
15
+ def __init__(self, language=None):
16
+ if language in ["Auto", None]:
17
+ language = locale.getdefaultlocale()[
18
+ 0
19
+ ] # getlocale can't identify the system's language ((None, None))
20
+ if not os.path.exists(f"./i18n/locale/{language}.json"):
21
+ language = "en_US"
22
+ language = "en_US" ##测试
23
+ self.language = language
24
+ self.language_map = load_language_list(language)
25
+
26
+ def __call__(self, key):
27
+ return self.language_map.get(key, key)
28
+
29
+ def __repr__(self):
30
+ return "Use Language: " + self.language
i18n/locale/en_US.json ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "\n此核素无数据": "\nThis nuclide has no data",
3
+ "**核数据工具** <br> 可能是用来处理核数据的相关工具?? <br> 目前功能有:核素筛选、核素查找、核素图绘制。": "**NuclearDataTools** <br> Tools for nuclear data processing?? <br> Current features: nuclide filter, nuclide search, nuclide chart plot.",
4
+ "**核素图绘制** <br> 可根据半衰期、衰变模式、合成方法等分类模式绘制核素图。 <br>部分代码参考了Ming-Hao-Zhang的[Nuclei-Chart-Generator](https://github.com/Ming-Hao-Zhang/Nuclei-Chart-Generator)": "**Nuclide Chart Plot** <br> The nuclide chart can be plotted based on classification modes such as half-life, decay mode, and synthesis method. <br> Part of the code references Ming-Hao-Zhang's [Nuclei-Chart-Generator].(https://github.com/Ming-Hao-Zhang/Nuclei-Chart-Generator)",
5
+ "**核素查找**": "**Nuclide Search**",
6
+ "**核素筛选** <br> 可以通过质子数(Z)、中子数(N)、质量数(A)以及母核半衰期、衰变模式等进行筛选": "**Nuclide Filter** <br> Filtering is available by proton number (Z), neutron number (N), mass number (A), parent nuclide half-life, decay mode, and other criteria.",
7
+ "**根据核素名称查找**": "**Search by nuclide name**",
8
+ "**根据质子数(Z)、中子数(N)、质量数(A)查找**": "**Search by proton number (Z), neutron number (N), and mass number (A)**",
9
+ "NNDC页面:": "Page on NNDC:",
10
+ "png为位图格式,svg为矢量图格式。\n显示详细信息时,受分辨率限制,png格式将会失真。如需高清晰度图像,请使用svg。": "PNG is a bitmap format, SVG is a vector format.\nWhen displaying detailed information, PNG images may appear distorted due to resolution limitations. For high-definition images, please use SVG.",
11
+ "不使用": "disabled",
12
+ "中子数(N)": "Neutron number (N)",
13
+ "中子数(N)、质量数(A)": "Neutron number (N), mass number (A)",
14
+ "任意": "Any",
15
+ "使用": "enabled",
16
+ "偶A": "Even A",
17
+ "偶N": "Even N",
18
+ "偶Z": "Even Z",
19
+ "元素名称": "Element name",
20
+ "合成方法": "Synthesis method",
21
+ "图例": "Legend",
22
+ "图片预览": "Image preview",
23
+ "奇A": "Odd A",
24
+ "奇N": "Odd N",
25
+ "奇Z": "Odd Z",
26
+ "奇偶": "Odd-even",
27
+ "导出文件格式": "File output format",
28
+ "导出格式": "Output format",
29
+ "寿命": "Half-life",
30
+ "常规": "Normal",
31
+ "找到符合条件核素数目:": "Matching nuclides count: ",
32
+ "数据预览": "Data preview",
33
+ "无": "None",
34
+ "显示信息": "Information display",
35
+ "显示图例": "Legend show",
36
+ "更多选项": "Options",
37
+ "最大值": "Maximum",
38
+ "最小值": "Minimum",
39
+ "查找": "Search",
40
+ "查找模式": "Searching mode",
41
+ "核数据工具": "NuclearDataTools",
42
+ "核素分类模式": "Classification mode",
43
+ "核素名称": "Nuclide name",
44
+ "核素图绘制": "Nuclide Chart Plot",
45
+ "核素查找": "Nuclide Search",
46
+ "核素筛选": "Nuclide Filter",
47
+ "根据母核半衰期进行筛选": "Filter by parent nuclide half-life",
48
+ "根据衰变模式进行筛选": "Filter by decay mode",
49
+ "根据质子数(Z)、中子数(N)、质量数(A)进行筛选": "Filter by proton number (Z), neutron number (N), and mass number (A)",
50
+ "根据质子数(Z)、中子数(N)筛选 (未启用)": "Filter by proton number (Z), and neutron number (N) (Disabled)",
51
+ "没有找到此核素": "No nuclide found",
52
+ "没有找到符合条件的核素": "No matching nuclides found",
53
+ "筛选": "Filter",
54
+ "筛选包含任意以下所选衰变模式的核素(or)": "Filter for nuclides containing any of the selected decay modes (OR)",
55
+ "筛选包含所有以下所选衰变模式的核素(and)": "Filter for nuclides containing all of the selected decay modes (AND)",
56
+ "筛选结果": "Filtering result",
57
+ "紧凑": "Compact",
58
+ "结果文件": "File of result",
59
+ "绘制": "Plot",
60
+ "衰变模式": "Decay mode",
61
+ "详细信息": "Detailed information",
62
+ "请输入由质量数及元素名称所组成的核素名称,示例:232Th、232TH、th232、232-Th、th-232等。\n只要不太离谱就能识别……大概?": "Please enter the nuclide name consisting of the mass number and element name. Ex: 232Th or 232TH or th232 or 232-Th or th-232 ...\nIt can recognize as long as it's not too far off... probably?",
63
+ "质子数(Z)": "Proton number (Z)",
64
+ "质子数(Z)、中子数(N)": "Proton number (Z), neutron number (N)",
65
+ "质子数(Z)、质量数(A)": "Proton number (Z), mass number (A)",
66
+ "质量数(A)": "Mass number (A)",
67
+ "重置条件": "Reset conditions",
68
+ "隐藏图例": "Legend hide",
69
+ "预览模式": "Preview mode"
70
+ }
i18n/locale/zh_CN.json ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "\n此核素无数据": "\n此核素无数据",
3
+ "**核数据工具** <br> 可能是用来处理核数据的相关工具?? <br> 目前功能有:核素筛选、核素查找、核素图绘制。": "**核数据工具** <br> 可能是用来处理核数据的相关工具?? <br> 目前功能有:核素筛选、核素查找、核素图绘制。",
4
+ "**核素图绘制** <br> 可根据半衰期、衰变模式、合成方法等分类模式绘制核素图。 <br>部分代码参考了Ming-Hao-Zhang的[Nuclei-Chart-Generator](https://github.com/Ming-Hao-Zhang/Nuclei-Chart-Generator)": "**核素图绘制** <br> 可根据半衰期、衰变模式、合成方法等分类模式绘制核素图。 <br>部分代码参考了Ming-Hao-Zhang的[Nuclei-Chart-Generator](https://github.com/Ming-Hao-Zhang/Nuclei-Chart-Generator)",
5
+ "**核素查找**": "**核素查找**",
6
+ "**核素筛选** <br> 可以通过质子数(Z)、中子数(N)、质量数(A)以及母核半衰期、衰变模式等进行筛选": "**核素筛选** <br> 可以通过质子数(Z)、中子数(N)、质量数(A)以及母核半衰期、衰变模式等进行筛选",
7
+ "**根据核素名称查找**": "**根据核素名称查找**",
8
+ "**根据质子数(Z)、中子数(N)、质量数(A)查找**": "**根据质子数(Z)、中子数(N)、质量数(A)查找**",
9
+ "NNDC页面:": "NNDC页面:",
10
+ "png为位图格式,svg为矢量图格式。\n显示详细信息时,受分辨率限制,png格式将会失真。如需高清晰度图像,请使用svg。": "png为位图格式,svg为矢量图格式。\n显示详细信息时,受分辨率限制,png格式将会失真。如需高清晰度图像,请使用svg。",
11
+ "不使用": "不使用",
12
+ "中子数(N)": "中子数(N)",
13
+ "中子数(N)、质量数(A)": "中子数(N)、质量数(A)",
14
+ "任意": "任意",
15
+ "使用": "使用",
16
+ "偶A": "偶A",
17
+ "偶N": "偶N",
18
+ "偶Z": "偶Z",
19
+ "元素名称": "元素名称",
20
+ "合成方法": "合成方法",
21
+ "图例": "图例",
22
+ "图片预览": "图片预览",
23
+ "奇A": "奇A",
24
+ "奇N": "奇N",
25
+ "奇Z": "奇Z",
26
+ "奇偶": "奇偶",
27
+ "导出文件格式": "导出文件格式",
28
+ "导出格式": "导出格式",
29
+ "寿命": "寿命",
30
+ "常规": "常规",
31
+ "找到符合条件核素数目:": "找到符合条件核素数目:",
32
+ "数据预览": "数据预览",
33
+ "无": "无",
34
+ "显示信息": "显示信息",
35
+ "显示图例": "显示图例",
36
+ "更多选项": "更多选项",
37
+ "最大值": "最大值",
38
+ "最小值": "最小值",
39
+ "查找": "查找",
40
+ "查找模式": "查找模式",
41
+ "核数据工具": "核数据工具",
42
+ "核素分类模式": "核素分类模式",
43
+ "核素名称": "核素名称",
44
+ "核素图绘制": "核素图绘制",
45
+ "核素查找": "核素查找",
46
+ "核素筛选": "核素筛选",
47
+ "根据母核半衰期进行筛选": "根据母核半衰期进行筛选",
48
+ "根据衰变模式进行筛选": "根据衰变模式进行筛选",
49
+ "根据质子数(Z)、中子数(N)、质量数(A)进行筛选": "根据质子数(Z)、中子数(N)、质量数(A)进行筛选",
50
+ "根据质子数(Z)、中子数(N)筛选 (未启用)": "根据质子数(Z)、中子数(N)筛选 (未启用)",
51
+ "没有找到此核素": "没有找到此核素",
52
+ "没有找到符合条件的核素": "没有找到符合条件的核素",
53
+ "筛选": "筛选",
54
+ "筛选包含任意以下所选衰变模式的核素(or)": "筛选包含任意以下所选衰变模式的核素(or)",
55
+ "筛选包含所有以下所选衰变模式的核素(and)": "筛选包含所有以下所选衰变模式的核素(and)",
56
+ "筛选结果": "筛选结果",
57
+ "紧凑": "紧凑",
58
+ "结果文件": "结果文件",
59
+ "绘制": "绘制",
60
+ "衰变模式": "衰变模式",
61
+ "详细信息": "详细信息",
62
+ "请输入由质量数及元素名称所组成的核素名称,示例:232Th、232TH、th232、232-Th、th-232等。\n只要不太离谱就能识别……大概?": "请输入由质量数及元素名称所组成的核素名称,示例:232Th、232TH、th232、232-Th、th-232等。\n只要不太离谱就能识别……大概?",
63
+ "质子数(Z)": "质子数(Z)",
64
+ "质子数(Z)、中子数(N)": "质子数(Z)、中子数(N)",
65
+ "质子数(Z)、质量数(A)": "质子数(Z)、质量数(A)",
66
+ "质量数(A)": "质量数(A)",
67
+ "重置条件": "重置条件",
68
+ "隐藏图例": "隐藏图例",
69
+ "预览模式": "预览模式"
70
+ }