dsh-cait 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +410 -352
- package/LICENSE +201 -201
- package/README.ja.md +55 -14
- package/README.md +466 -423
- package/README.zh-CN.md +429 -390
- package/client/components.js +2408 -2377
- package/client/helpers.js +103 -103
- package/client/locales.js +751 -730
- package/client/rpc.js +93 -93
- package/client/styles.js +258 -258
- package/client.js +3608 -3556
- package/icon.svg +8 -8
- package/index.js +45 -45
- package/lib/api.js +223 -223
- package/lib/docx.js +392 -389
- package/lib/epub.js +355 -0
- package/lib/errors.js +8 -8
- package/lib/formats.js +972 -917
- package/lib/glossary.js +178 -178
- package/lib/html.js +271 -0
- package/lib/import-export.js +650 -605
- package/lib/libraries.js +183 -183
- package/lib/markdown.js +28 -28
- package/lib/mt.js +152 -152
- package/lib/persistence.js +341 -321
- package/lib/pptx.js +89 -89
- package/lib/preprocess.js +65 -0
- package/lib/segmenter.js +84 -84
- package/lib/similarity.js +113 -113
- package/lib/store-utils.js +342 -339
- package/lib/store.js +746 -734
- package/lib/tm.js +160 -160
- package/lib/tmx.js +85 -85
- package/lib/tools.js +472 -472
- package/lib/xlsx.js +218 -218
- package/lib/xml.js +31 -31
- package/locale/en.json +11 -11
- package/locale/zh.json +11 -11
- package/package.json +83 -83
- package/scripts/build-client.mjs +13 -13
package/client/locales.js
CHANGED
|
@@ -1,730 +1,751 @@
|
|
|
1
|
-
const ZH = {
|
|
2
|
-
'app.title': 'CAIT',
|
|
3
|
-
'app.subtitle': 'CAT 翻译工作台',
|
|
4
|
-
'nav.new': '新建',
|
|
5
|
-
'nav.import': '导入',
|
|
6
|
-
'nav.export': '导出',
|
|
7
|
-
'nav.settings': '设置',
|
|
8
|
-
'doc.switch': '文档',
|
|
9
|
-
'doc.openExisting': '打开已有文档',
|
|
10
|
-
'doc.clean': '清理已关闭文档',
|
|
11
|
-
'doc.cleanTitle': '已关闭的文档',
|
|
12
|
-
'doc.cleanHint': '这些文档已关闭但仍保存在 CAIT 中。删除后文档及其句段会被永久移除。',
|
|
13
|
-
'doc.cleanAll': '删除全部已关闭文档',
|
|
14
|
-
'doc.cleanAllMessage': '确定永久删除全部 {count} 个已关闭文档吗?该操作不可撤销。',
|
|
15
|
-
'doc.cleanEmpty': '没有已关闭的文档。',
|
|
16
|
-
'doc.delete': '删除文档',
|
|
17
|
-
'doc.deleteTitle': '删除文档',
|
|
18
|
-
'doc.deleteMessage': '确定永久删除“{name}”吗?该文档的句段也会被删除。',
|
|
19
|
-
'doc.segments': '句段',
|
|
20
|
-
'tabs.title': '打开的文档',
|
|
21
|
-
'tabs.close': '关闭文档',
|
|
22
|
-
'tabs.new': '新开页面',
|
|
23
|
-
'progress.confirmed': '已确认',
|
|
24
|
-
'status.pending': '待翻译',
|
|
25
|
-
'status.confirmed': '已确认',
|
|
26
|
-
'common.loading': '正在加载工作台…',
|
|
27
|
-
'common.retry': '重试',
|
|
28
|
-
'common.refresh': '刷新',
|
|
29
|
-
'storage.saveFailed': '保存失败:',
|
|
30
|
-
'storage.stale': '数据已在其他窗口或 agent 操作中更新;当前草稿未被覆盖。保存后可刷新同步。',
|
|
31
|
-
'error.load': '无法加载 CAIT 工作台',
|
|
32
|
-
'rail.title': '句段',
|
|
33
|
-
'rail.search': '筛选句段…',
|
|
34
|
-
'rail.empty': '没有匹配的句段',
|
|
35
|
-
'editor.segment': '句段',
|
|
36
|
-
'editor.source': '原文',
|
|
37
|
-
'editor.target': '译文',
|
|
38
|
-
'editor.targetPlaceholder': '在此输入译文…',
|
|
39
|
-
'editor.confirm': '确认并写入记忆库',
|
|
40
|
-
'editor.update': '更新译文并入库',
|
|
41
|
-
'editor.next': '下一句',
|
|
42
|
-
'editor.prev': '上一句',
|
|
43
|
-
'editor.save': '保存草稿',
|
|
44
|
-
'editor.unsaved': '未保存',
|
|
45
|
-
'editor.chars': '字符',
|
|
46
|
-
'editor.hint': '⌘/Ctrl + Enter 确认 · Alt + ↑/↓ 切换',
|
|
47
|
-
'editor.emptyTarget': '请先输入译文',
|
|
48
|
-
'editor.done': '全部句段已确认',
|
|
49
|
-
'editor.confirmedAt': '确认于',
|
|
50
|
-
'empty.title': '开始一次 CAT 翻译',
|
|
51
|
-
'empty.desc': '粘贴文本、拖入文件,或加载演示文档。CAIT 会把源文切成句段,并同时查询翻译记忆与术语库;确认译文后自动入库。',
|
|
52
|
-
'empty.paste': '粘贴文本',
|
|
53
|
-
'empty.file': '导入文件',
|
|
54
|
-
'empty.name': '文档名称(可选)',
|
|
55
|
-
'empty.textPlaceholder': '在此粘贴源文本…',
|
|
56
|
-
'empty.create': '创建文档',
|
|
57
|
-
'empty.demo': '加载演示文档',
|
|
58
|
-
'empty.demoHint': '没有素材?',
|
|
59
|
-
'empty.drop': '拖入文件,或点击选择',
|
|
60
|
-
'empty.formats': '支持 TXT · Markdown · DOCX · TMX · CSV · SRT · VTT · PO · XLIFF · HTML · JSON · RTF · XLSX · PPTX',
|
|
61
|
-
'empty.features.tm': '翻译记忆',
|
|
62
|
-
'empty.features.tmDesc': '精确 + 模糊匹配',
|
|
63
|
-
'empty.features.glossary': '术语库',
|
|
64
|
-
'empty.features.glossaryDesc': '命中高亮与提示',
|
|
65
|
-
'empty.features.mt': 'AI 翻译',
|
|
66
|
-
'empty.features.mtDesc': '可配置兼容接口',
|
|
67
|
-
'modal.new.title': '新建文档',
|
|
68
|
-
'modal.new.name': '文档名称',
|
|
69
|
-
'modal.new.namePlaceholder': '例如:产品手册',
|
|
70
|
-
'modal.new.sourceLang': '源语言',
|
|
71
|
-
'modal.new.targetLang': '目标语言',
|
|
72
|
-
'modal.new.create': '创建文档',
|
|
73
|
-
'modal.new.importing': '正在导入…',
|
|
74
|
-
'modal.new.dropHint': 'TXT · Markdown · DOCX · TMX · CSV · SRT · VTT · PO · XLIFF · HTML · JSON · RTF · XLSX · PPTX',
|
|
75
|
-
'modal.new.csvSource': 'CSV 源文列',
|
|
76
|
-
'modal.new.csvTarget': 'CSV 译文列',
|
|
77
|
-
'modal.new.csvColumnPlaceholder': '列名或列号,例如 Source / 2',
|
|
78
|
-
'modal.new.csvHint': '可选。留空时自动识别 Source/Target 表头,或使用前两列。',
|
|
79
|
-
'modal.new.sample': '没有素材?',
|
|
80
|
-
'modal.new.demo': '加载演示文档',
|
|
81
|
-
'panel.title': 'CAT 助手',
|
|
82
|
-
'panel.live': '实时',
|
|
83
|
-
'libraries.open': '管理挂载库',
|
|
84
|
-
'libraries.short': '库',
|
|
85
|
-
'libraries.title': '翻译记忆与术语库',
|
|
86
|
-
'libraries.desc': '勾选当前翻译会话要检索的库。至少保留一个 TM 和一个术语库;默认库用于新译文和新术语写入。',
|
|
87
|
-
'libraries.tm': '翻译记忆库',
|
|
88
|
-
'libraries.glossary': '术语库',
|
|
89
|
-
'libraries.entries': '条',
|
|
90
|
-
'libraries.notMounted': '未挂载',
|
|
91
|
-
'libraries.defaultTm': '默认写入',
|
|
92
|
-
'libraries.defaultGlossary': '默认新增',
|
|
93
|
-
'libraries.empty': '还没有库,先创建一个。',
|
|
94
|
-
'libraries.namePlaceholder': '库名称',
|
|
95
|
-
'libraries.create': '新建',
|
|
96
|
-
'libraries.done': '完成',
|
|
97
|
-
'libraries.created': '库已创建并自动挂载',
|
|
98
|
-
'libraries.mountSaved': '挂载设置已保存',
|
|
99
|
-
'panel.tm': '记忆库',
|
|
100
|
-
'panel.glossary': '术语库',
|
|
101
|
-
'panel.mt': 'AI 翻译',
|
|
102
|
-
'panel.currentMatches': '当前句段匹配',
|
|
103
|
-
'panel.searchResults': '搜索结果',
|
|
104
|
-
'panel.searchPlaceholder': '搜索记忆库…',
|
|
105
|
-
'panel.search': '搜索',
|
|
106
|
-
'panel.noMatches': '没有匹配结果。确认句段后会自动写入记忆库。',
|
|
107
|
-
'panel.noCurrentMatches': '当前句段暂无匹配。确认译文后即可复用。',
|
|
108
|
-
'panel.exact': '精确',
|
|
109
|
-
'panel.fuzzy': '模糊',
|
|
110
|
-
'match.exact': '精确',
|
|
111
|
-
'match.near_exact': '近似精确',
|
|
112
|
-
'match.high_fuzzy': '高模糊',
|
|
113
|
-
'match.medium_fuzzy': '中模糊',
|
|
114
|
-
'match.low_fuzzy': '低模糊',
|
|
115
|
-
'panel.apply': '应用',
|
|
116
|
-
'panel.importTmx': '导入 TMX',
|
|
117
|
-
'panel.clearTm': '清空记忆库',
|
|
118
|
-
'panel.tmHint': '确认句段时自动写入;模糊阈值可在设置中调整。',
|
|
119
|
-
'panel.termHits': '本句命中',
|
|
120
|
-
'panel.noHits': '本句暂无术语命中',
|
|
121
|
-
'panel.allTerms': '全部术语',
|
|
122
|
-
'panel.termSearch': '筛选术语…',
|
|
123
|
-
'panel.addTerm': '添加术语',
|
|
124
|
-
'panel.termSource': '术语',
|
|
125
|
-
'panel.termTarget': '译文',
|
|
126
|
-
'panel.termNote': '备注(可选)',
|
|
127
|
-
'panel.saveTerm': '保存术语',
|
|
128
|
-
'panel.cancel': '取消',
|
|
129
|
-
'panel.delete': '删除',
|
|
130
|
-
'panel.noTerms': '术语库为空。添加术语后,命中会自动高亮。',
|
|
131
|
-
'panel.importCsv': '导入 CSV/TSV',
|
|
132
|
-
'panel.clearGlossary': '清空术语库',
|
|
133
|
-
'panel.mtProvider': '提供商',
|
|
134
|
-
'panel.mtRoute': '路由',
|
|
135
|
-
'panel.mtGenerate': '生成译文建议',
|
|
136
|
-
'panel.mtGenerating': '正在生成…',
|
|
137
|
-
'panel.mtInsert': '插入译文',
|
|
138
|
-
'panel.mtCopy': '复制',
|
|
139
|
-
'panel.mtEmpty': '点击生成,获取当前句段的机器翻译建议。',
|
|
140
|
-
'panel.mtModel': '模型',
|
|
141
|
-
'panel.mtSuggestion': 'MT 建议',
|
|
142
|
-
'panel.mtSettings': '配置路由',
|
|
143
|
-
'panel.mtHint': '通过 DSH 模型路由调用,凭据由 DSH 管理。',
|
|
144
|
-
'panel.mtMockHint': '术语替换(离线)不联网,只使用术语库;在设置中选择 DSH 路由可启用真实翻译。',
|
|
145
|
-
'panel.copy': '复制',
|
|
146
|
-
'mt.mock': '术语替换(离线)',
|
|
147
|
-
'modal.export.title': '导出',
|
|
148
|
-
'modal.export.desc': '导出当前文档。双语格式保留原文与译文对照,仅译文格式适合直接交付。',
|
|
149
|
-
'modal.export.bilingual': '双语对照',
|
|
150
|
-
'modal.export.target': '仅译文',
|
|
151
|
-
'modal.export.current': '当前文档',
|
|
152
|
-
'modal.export.bilingualMd': 'Markdown 表格',
|
|
153
|
-
'modal.export.bilingualCsv': 'CSV 表格',
|
|
154
|
-
'modal.export.tmx': 'TMX 记忆交换',
|
|
155
|
-
'modal.export.targetTxt': '纯文本',
|
|
156
|
-
'modal.export.targetMd': 'Markdown',
|
|
157
|
-
'modal.export.docx': 'Word DOCX',
|
|
158
|
-
'modal.export.docxGroup': '保留源格式',
|
|
159
|
-
'modal.export.
|
|
160
|
-
'modal.export.
|
|
161
|
-
'modal.export.
|
|
162
|
-
'modal.export.
|
|
163
|
-
'modal.export.
|
|
164
|
-
'modal.export.
|
|
165
|
-
'modal.export.
|
|
166
|
-
'modal.export.
|
|
167
|
-
'modal.export.
|
|
168
|
-
'modal.export.
|
|
169
|
-
'modal.export.
|
|
170
|
-
'modal.export.
|
|
171
|
-
'modal.export.
|
|
172
|
-
'modal.export.
|
|
173
|
-
'modal.export.
|
|
174
|
-
'modal.export.
|
|
175
|
-
'modal.
|
|
176
|
-
'modal.
|
|
177
|
-
'modal.settings.
|
|
178
|
-
'modal.settings.
|
|
179
|
-
'modal.settings.
|
|
180
|
-
'modal.settings.
|
|
181
|
-
'modal.settings.
|
|
182
|
-
'modal.settings.
|
|
183
|
-
'modal.settings.
|
|
184
|
-
'modal.settings.
|
|
185
|
-
'modal.settings.
|
|
186
|
-
'modal.settings.
|
|
187
|
-
'modal.settings.
|
|
188
|
-
'modal.settings.
|
|
189
|
-
'modal.settings.
|
|
190
|
-
'modal.settings.
|
|
191
|
-
'modal.settings.
|
|
192
|
-
'modal.settings.
|
|
193
|
-
'modal.settings.
|
|
194
|
-
'modal.settings.
|
|
195
|
-
'modal.
|
|
196
|
-
'modal.
|
|
197
|
-
|
|
198
|
-
'modal.
|
|
199
|
-
|
|
200
|
-
'modal.
|
|
201
|
-
'modal.
|
|
202
|
-
'modal.confirm.
|
|
203
|
-
'
|
|
204
|
-
|
|
205
|
-
'
|
|
206
|
-
|
|
207
|
-
'
|
|
208
|
-
'
|
|
209
|
-
'
|
|
210
|
-
'toast.
|
|
211
|
-
'toast.
|
|
212
|
-
'toast.
|
|
213
|
-
'toast.
|
|
214
|
-
'toast.
|
|
215
|
-
'toast.
|
|
216
|
-
'toast.
|
|
217
|
-
'toast.
|
|
218
|
-
'toast.
|
|
219
|
-
'toast.
|
|
220
|
-
'toast.
|
|
221
|
-
'toast.
|
|
222
|
-
'toast.
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
'
|
|
227
|
-
'
|
|
228
|
-
'
|
|
229
|
-
'
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
'
|
|
234
|
-
'
|
|
235
|
-
'
|
|
236
|
-
'
|
|
237
|
-
'
|
|
238
|
-
'
|
|
239
|
-
'doc.
|
|
240
|
-
'doc.
|
|
241
|
-
'doc.
|
|
242
|
-
'doc.
|
|
243
|
-
'doc.
|
|
244
|
-
'
|
|
245
|
-
'
|
|
246
|
-
'
|
|
247
|
-
'
|
|
248
|
-
'
|
|
249
|
-
'
|
|
250
|
-
'
|
|
251
|
-
'
|
|
252
|
-
'
|
|
253
|
-
'
|
|
254
|
-
'
|
|
255
|
-
'
|
|
256
|
-
'
|
|
257
|
-
'
|
|
258
|
-
'
|
|
259
|
-
'
|
|
260
|
-
'
|
|
261
|
-
'
|
|
262
|
-
'
|
|
263
|
-
'
|
|
264
|
-
'
|
|
265
|
-
'
|
|
266
|
-
'editor.
|
|
267
|
-
'editor.
|
|
268
|
-
'editor.
|
|
269
|
-
'editor.
|
|
270
|
-
'editor.
|
|
271
|
-
'editor.
|
|
272
|
-
'editor.
|
|
273
|
-
'editor.
|
|
274
|
-
'
|
|
275
|
-
'
|
|
276
|
-
'
|
|
277
|
-
'
|
|
278
|
-
'
|
|
279
|
-
'
|
|
280
|
-
'
|
|
281
|
-
'empty.
|
|
282
|
-
'empty.
|
|
283
|
-
'empty.
|
|
284
|
-
'empty.
|
|
285
|
-
'empty.
|
|
286
|
-
'empty.
|
|
287
|
-
'empty.
|
|
288
|
-
'empty.
|
|
289
|
-
'empty.
|
|
290
|
-
'empty.
|
|
291
|
-
'
|
|
292
|
-
'
|
|
293
|
-
'
|
|
294
|
-
'
|
|
295
|
-
'
|
|
296
|
-
'
|
|
297
|
-
'
|
|
298
|
-
'modal.new.
|
|
299
|
-
'modal.new.
|
|
300
|
-
'modal.new.
|
|
301
|
-
'modal.new.
|
|
302
|
-
'modal.new.
|
|
303
|
-
'modal.new.
|
|
304
|
-
'modal.new.
|
|
305
|
-
'
|
|
306
|
-
'
|
|
307
|
-
'
|
|
308
|
-
'
|
|
309
|
-
'
|
|
310
|
-
'
|
|
311
|
-
'
|
|
312
|
-
'
|
|
313
|
-
'
|
|
314
|
-
'libraries.
|
|
315
|
-
'libraries.
|
|
316
|
-
'libraries.
|
|
317
|
-
'libraries.
|
|
318
|
-
'libraries.
|
|
319
|
-
'libraries.
|
|
320
|
-
'libraries.
|
|
321
|
-
'libraries.
|
|
322
|
-
'libraries.
|
|
323
|
-
'
|
|
324
|
-
'
|
|
325
|
-
'
|
|
326
|
-
'
|
|
327
|
-
'
|
|
328
|
-
'
|
|
329
|
-
'
|
|
330
|
-
'panel.
|
|
331
|
-
'panel.
|
|
332
|
-
'panel.
|
|
333
|
-
'panel.
|
|
334
|
-
'
|
|
335
|
-
'
|
|
336
|
-
'
|
|
337
|
-
'
|
|
338
|
-
'
|
|
339
|
-
'panel.
|
|
340
|
-
'panel.
|
|
341
|
-
'
|
|
342
|
-
'
|
|
343
|
-
'
|
|
344
|
-
'
|
|
345
|
-
'
|
|
346
|
-
'panel.
|
|
347
|
-
'panel.
|
|
348
|
-
'panel.
|
|
349
|
-
'panel.
|
|
350
|
-
'panel.
|
|
351
|
-
'panel.
|
|
352
|
-
'panel.
|
|
353
|
-
'panel.
|
|
354
|
-
'panel.
|
|
355
|
-
'panel.
|
|
356
|
-
'panel.
|
|
357
|
-
'panel.
|
|
358
|
-
'panel.
|
|
359
|
-
'panel.
|
|
360
|
-
'panel.
|
|
361
|
-
'panel.
|
|
362
|
-
'panel.
|
|
363
|
-
'panel.
|
|
364
|
-
'panel.
|
|
365
|
-
'panel.
|
|
366
|
-
'panel.
|
|
367
|
-
'panel.
|
|
368
|
-
'panel.
|
|
369
|
-
'panel.
|
|
370
|
-
'
|
|
371
|
-
'
|
|
372
|
-
'
|
|
373
|
-
'
|
|
374
|
-
'
|
|
375
|
-
'
|
|
376
|
-
'
|
|
377
|
-
'
|
|
378
|
-
'modal.export.
|
|
379
|
-
'modal.export.
|
|
380
|
-
'modal.export.
|
|
381
|
-
'modal.export.
|
|
382
|
-
'modal.export.
|
|
383
|
-
'modal.export.
|
|
384
|
-
'modal.export.
|
|
385
|
-
'modal.export.
|
|
386
|
-
'modal.export.
|
|
387
|
-
'modal.export.
|
|
388
|
-
'modal.export.
|
|
389
|
-
'modal.export.
|
|
390
|
-
'modal.export.
|
|
391
|
-
'modal.export.
|
|
392
|
-
'modal.export.
|
|
393
|
-
'modal.export.
|
|
394
|
-
'modal.export.
|
|
395
|
-
'modal.export.
|
|
396
|
-
'modal.export.
|
|
397
|
-
'modal.export.
|
|
398
|
-
'modal.export.
|
|
399
|
-
'modal.
|
|
400
|
-
'modal.
|
|
401
|
-
'modal.
|
|
402
|
-
'modal.
|
|
403
|
-
'modal.
|
|
404
|
-
'modal.
|
|
405
|
-
'modal.
|
|
406
|
-
'modal.
|
|
407
|
-
'modal.
|
|
408
|
-
'modal.settings.
|
|
409
|
-
'modal.settings.
|
|
410
|
-
'modal.settings.
|
|
411
|
-
'modal.settings.
|
|
412
|
-
'modal.settings.
|
|
413
|
-
'modal.settings.
|
|
414
|
-
'modal.settings.
|
|
415
|
-
'modal.settings.
|
|
416
|
-
'modal.settings.
|
|
417
|
-
'modal.settings.
|
|
418
|
-
'modal.settings.
|
|
419
|
-
'modal.
|
|
420
|
-
'modal.
|
|
421
|
-
|
|
422
|
-
'modal.
|
|
423
|
-
|
|
424
|
-
'modal.
|
|
425
|
-
'modal.
|
|
426
|
-
'modal.
|
|
427
|
-
'
|
|
428
|
-
'
|
|
429
|
-
'
|
|
430
|
-
'
|
|
431
|
-
'
|
|
432
|
-
'
|
|
433
|
-
'
|
|
434
|
-
'
|
|
435
|
-
|
|
436
|
-
'
|
|
437
|
-
|
|
438
|
-
'
|
|
439
|
-
'
|
|
440
|
-
'
|
|
441
|
-
'toast.
|
|
442
|
-
'toast.
|
|
443
|
-
'toast.
|
|
444
|
-
'toast.
|
|
445
|
-
'toast.
|
|
446
|
-
'toast.
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
'
|
|
451
|
-
'
|
|
452
|
-
'
|
|
453
|
-
'
|
|
454
|
-
'
|
|
455
|
-
'
|
|
456
|
-
'
|
|
457
|
-
'
|
|
458
|
-
'
|
|
459
|
-
'
|
|
460
|
-
'
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
'
|
|
465
|
-
'
|
|
466
|
-
'
|
|
467
|
-
'
|
|
468
|
-
'
|
|
469
|
-
'
|
|
470
|
-
'
|
|
471
|
-
'
|
|
472
|
-
'
|
|
473
|
-
'
|
|
474
|
-
'
|
|
475
|
-
'
|
|
476
|
-
'
|
|
477
|
-
'
|
|
478
|
-
'
|
|
479
|
-
'
|
|
480
|
-
'
|
|
481
|
-
'
|
|
482
|
-
'
|
|
483
|
-
'
|
|
484
|
-
'
|
|
485
|
-
'
|
|
486
|
-
'
|
|
487
|
-
'
|
|
488
|
-
'
|
|
489
|
-
'
|
|
490
|
-
'
|
|
491
|
-
'
|
|
492
|
-
'
|
|
493
|
-
'
|
|
494
|
-
'
|
|
495
|
-
'
|
|
496
|
-
'
|
|
497
|
-
'editor.
|
|
498
|
-
'
|
|
499
|
-
'
|
|
500
|
-
'
|
|
501
|
-
'
|
|
502
|
-
'
|
|
503
|
-
'
|
|
504
|
-
'
|
|
505
|
-
'
|
|
506
|
-
'
|
|
507
|
-
'
|
|
508
|
-
'
|
|
509
|
-
'
|
|
510
|
-
'
|
|
511
|
-
'
|
|
512
|
-
'empty.
|
|
513
|
-
'empty.
|
|
514
|
-
'empty.
|
|
515
|
-
'
|
|
516
|
-
'
|
|
517
|
-
'
|
|
518
|
-
'
|
|
519
|
-
'
|
|
520
|
-
'
|
|
521
|
-
'
|
|
522
|
-
'
|
|
523
|
-
'
|
|
524
|
-
'
|
|
525
|
-
'
|
|
526
|
-
'
|
|
527
|
-
'
|
|
528
|
-
'
|
|
529
|
-
'
|
|
530
|
-
'
|
|
531
|
-
'
|
|
532
|
-
'
|
|
533
|
-
'
|
|
534
|
-
'
|
|
535
|
-
'
|
|
536
|
-
'
|
|
537
|
-
'
|
|
538
|
-
'
|
|
539
|
-
'
|
|
540
|
-
'
|
|
541
|
-
'
|
|
542
|
-
'
|
|
543
|
-
'
|
|
544
|
-
'
|
|
545
|
-
'libraries.
|
|
546
|
-
'libraries.
|
|
547
|
-
'
|
|
548
|
-
'
|
|
549
|
-
'
|
|
550
|
-
'
|
|
551
|
-
'
|
|
552
|
-
'
|
|
553
|
-
'
|
|
554
|
-
'
|
|
555
|
-
'
|
|
556
|
-
'
|
|
557
|
-
'
|
|
558
|
-
'
|
|
559
|
-
'
|
|
560
|
-
'
|
|
561
|
-
'
|
|
562
|
-
'
|
|
563
|
-
'panel.
|
|
564
|
-
'panel.
|
|
565
|
-
'panel.
|
|
566
|
-
'panel.
|
|
567
|
-
'panel.
|
|
568
|
-
'panel.
|
|
569
|
-
'panel.
|
|
570
|
-
'panel.
|
|
571
|
-
'panel.
|
|
572
|
-
'
|
|
573
|
-
'
|
|
574
|
-
'
|
|
575
|
-
'
|
|
576
|
-
'
|
|
577
|
-
'panel.
|
|
578
|
-
'panel.
|
|
579
|
-
'panel.
|
|
580
|
-
'panel.
|
|
581
|
-
'panel.
|
|
582
|
-
'panel.
|
|
583
|
-
'panel.
|
|
584
|
-
'panel.
|
|
585
|
-
'panel.
|
|
586
|
-
'panel.
|
|
587
|
-
'panel.
|
|
588
|
-
'panel.
|
|
589
|
-
'panel.
|
|
590
|
-
'panel.
|
|
591
|
-
'panel.
|
|
592
|
-
'panel.
|
|
593
|
-
'panel.
|
|
594
|
-
'
|
|
595
|
-
'
|
|
596
|
-
'
|
|
597
|
-
'
|
|
598
|
-
'
|
|
599
|
-
'
|
|
600
|
-
'
|
|
601
|
-
'
|
|
602
|
-
'
|
|
603
|
-
'
|
|
604
|
-
'
|
|
605
|
-
'
|
|
606
|
-
'
|
|
607
|
-
'
|
|
608
|
-
'
|
|
609
|
-
'modal.export.
|
|
610
|
-
'modal.export.
|
|
611
|
-
'modal.export.
|
|
612
|
-
'modal.export.
|
|
613
|
-
'modal.export.
|
|
614
|
-
'modal.export.
|
|
615
|
-
'modal.export.
|
|
616
|
-
'modal.export.
|
|
617
|
-
'modal.export.
|
|
618
|
-
'modal.export.
|
|
619
|
-
'modal.export.
|
|
620
|
-
'modal.export.
|
|
621
|
-
'modal.export.
|
|
622
|
-
'modal.export.
|
|
623
|
-
'modal.
|
|
624
|
-
'modal.
|
|
625
|
-
'modal.
|
|
626
|
-
'modal.
|
|
627
|
-
'modal.
|
|
628
|
-
'modal.
|
|
629
|
-
'modal.
|
|
630
|
-
'modal.
|
|
631
|
-
'modal.
|
|
632
|
-
'modal.
|
|
633
|
-
'modal.
|
|
634
|
-
'modal.
|
|
635
|
-
'modal.
|
|
636
|
-
'modal.
|
|
637
|
-
'modal.
|
|
638
|
-
'modal.
|
|
639
|
-
'modal.settings.
|
|
640
|
-
'modal.settings.
|
|
641
|
-
'modal.settings.
|
|
642
|
-
'modal.settings.
|
|
643
|
-
'modal.
|
|
644
|
-
'modal.
|
|
645
|
-
|
|
646
|
-
'modal.
|
|
647
|
-
|
|
648
|
-
'modal.
|
|
649
|
-
'modal.
|
|
650
|
-
'modal.
|
|
651
|
-
'
|
|
652
|
-
'
|
|
653
|
-
'
|
|
654
|
-
'
|
|
655
|
-
'
|
|
656
|
-
'
|
|
657
|
-
'
|
|
658
|
-
'
|
|
659
|
-
'
|
|
660
|
-
'
|
|
661
|
-
'
|
|
662
|
-
'
|
|
663
|
-
'
|
|
664
|
-
'
|
|
665
|
-
'
|
|
666
|
-
|
|
667
|
-
'
|
|
668
|
-
|
|
669
|
-
'
|
|
670
|
-
'
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
if (!
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
*
|
|
716
|
-
*
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
1
|
+
const ZH = {
|
|
2
|
+
'app.title': 'CAIT',
|
|
3
|
+
'app.subtitle': 'CAT 翻译工作台',
|
|
4
|
+
'nav.new': '新建',
|
|
5
|
+
'nav.import': '导入',
|
|
6
|
+
'nav.export': '导出',
|
|
7
|
+
'nav.settings': '设置',
|
|
8
|
+
'doc.switch': '文档',
|
|
9
|
+
'doc.openExisting': '打开已有文档',
|
|
10
|
+
'doc.clean': '清理已关闭文档',
|
|
11
|
+
'doc.cleanTitle': '已关闭的文档',
|
|
12
|
+
'doc.cleanHint': '这些文档已关闭但仍保存在 CAIT 中。删除后文档及其句段会被永久移除。',
|
|
13
|
+
'doc.cleanAll': '删除全部已关闭文档',
|
|
14
|
+
'doc.cleanAllMessage': '确定永久删除全部 {count} 个已关闭文档吗?该操作不可撤销。',
|
|
15
|
+
'doc.cleanEmpty': '没有已关闭的文档。',
|
|
16
|
+
'doc.delete': '删除文档',
|
|
17
|
+
'doc.deleteTitle': '删除文档',
|
|
18
|
+
'doc.deleteMessage': '确定永久删除“{name}”吗?该文档的句段也会被删除。',
|
|
19
|
+
'doc.segments': '句段',
|
|
20
|
+
'tabs.title': '打开的文档',
|
|
21
|
+
'tabs.close': '关闭文档',
|
|
22
|
+
'tabs.new': '新开页面',
|
|
23
|
+
'progress.confirmed': '已确认',
|
|
24
|
+
'status.pending': '待翻译',
|
|
25
|
+
'status.confirmed': '已确认',
|
|
26
|
+
'common.loading': '正在加载工作台…',
|
|
27
|
+
'common.retry': '重试',
|
|
28
|
+
'common.refresh': '刷新',
|
|
29
|
+
'storage.saveFailed': '保存失败:',
|
|
30
|
+
'storage.stale': '数据已在其他窗口或 agent 操作中更新;当前草稿未被覆盖。保存后可刷新同步。',
|
|
31
|
+
'error.load': '无法加载 CAIT 工作台',
|
|
32
|
+
'rail.title': '句段',
|
|
33
|
+
'rail.search': '筛选句段…',
|
|
34
|
+
'rail.empty': '没有匹配的句段',
|
|
35
|
+
'editor.segment': '句段',
|
|
36
|
+
'editor.source': '原文',
|
|
37
|
+
'editor.target': '译文',
|
|
38
|
+
'editor.targetPlaceholder': '在此输入译文…',
|
|
39
|
+
'editor.confirm': '确认并写入记忆库',
|
|
40
|
+
'editor.update': '更新译文并入库',
|
|
41
|
+
'editor.next': '下一句',
|
|
42
|
+
'editor.prev': '上一句',
|
|
43
|
+
'editor.save': '保存草稿',
|
|
44
|
+
'editor.unsaved': '未保存',
|
|
45
|
+
'editor.chars': '字符',
|
|
46
|
+
'editor.hint': '⌘/Ctrl + Enter 确认 · Alt + ↑/↓ 切换',
|
|
47
|
+
'editor.emptyTarget': '请先输入译文',
|
|
48
|
+
'editor.done': '全部句段已确认',
|
|
49
|
+
'editor.confirmedAt': '确认于',
|
|
50
|
+
'empty.title': '开始一次 CAT 翻译',
|
|
51
|
+
'empty.desc': '粘贴文本、拖入文件,或加载演示文档。CAIT 会把源文切成句段,并同时查询翻译记忆与术语库;确认译文后自动入库。',
|
|
52
|
+
'empty.paste': '粘贴文本',
|
|
53
|
+
'empty.file': '导入文件',
|
|
54
|
+
'empty.name': '文档名称(可选)',
|
|
55
|
+
'empty.textPlaceholder': '在此粘贴源文本…',
|
|
56
|
+
'empty.create': '创建文档',
|
|
57
|
+
'empty.demo': '加载演示文档',
|
|
58
|
+
'empty.demoHint': '没有素材?',
|
|
59
|
+
'empty.drop': '拖入文件,或点击选择',
|
|
60
|
+
'empty.formats': '支持 TXT · Markdown · DOCX · EPUB · TMX · CSV · SRT · VTT · PO · XLIFF · HTML · JSON · RTF · XLSX · PPTX',
|
|
61
|
+
'empty.features.tm': '翻译记忆',
|
|
62
|
+
'empty.features.tmDesc': '精确 + 模糊匹配',
|
|
63
|
+
'empty.features.glossary': '术语库',
|
|
64
|
+
'empty.features.glossaryDesc': '命中高亮与提示',
|
|
65
|
+
'empty.features.mt': 'AI 翻译',
|
|
66
|
+
'empty.features.mtDesc': '可配置兼容接口',
|
|
67
|
+
'modal.new.title': '新建文档',
|
|
68
|
+
'modal.new.name': '文档名称',
|
|
69
|
+
'modal.new.namePlaceholder': '例如:产品手册',
|
|
70
|
+
'modal.new.sourceLang': '源语言',
|
|
71
|
+
'modal.new.targetLang': '目标语言',
|
|
72
|
+
'modal.new.create': '创建文档',
|
|
73
|
+
'modal.new.importing': '正在导入…',
|
|
74
|
+
'modal.new.dropHint': 'TXT · Markdown · DOCX · EPUB · TMX · CSV · SRT · VTT · PO · XLIFF · HTML · JSON · RTF · XLSX · PPTX',
|
|
75
|
+
'modal.new.csvSource': 'CSV 源文列',
|
|
76
|
+
'modal.new.csvTarget': 'CSV 译文列',
|
|
77
|
+
'modal.new.csvColumnPlaceholder': '列名或列号,例如 Source / 2',
|
|
78
|
+
'modal.new.csvHint': '可选。留空时自动识别 Source/Target 表头,或使用前两列。',
|
|
79
|
+
'modal.new.sample': '没有素材?',
|
|
80
|
+
'modal.new.demo': '加载演示文档',
|
|
81
|
+
'panel.title': 'CAT 助手',
|
|
82
|
+
'panel.live': '实时',
|
|
83
|
+
'libraries.open': '管理挂载库',
|
|
84
|
+
'libraries.short': '库',
|
|
85
|
+
'libraries.title': '翻译记忆与术语库',
|
|
86
|
+
'libraries.desc': '勾选当前翻译会话要检索的库。至少保留一个 TM 和一个术语库;默认库用于新译文和新术语写入。',
|
|
87
|
+
'libraries.tm': '翻译记忆库',
|
|
88
|
+
'libraries.glossary': '术语库',
|
|
89
|
+
'libraries.entries': '条',
|
|
90
|
+
'libraries.notMounted': '未挂载',
|
|
91
|
+
'libraries.defaultTm': '默认写入',
|
|
92
|
+
'libraries.defaultGlossary': '默认新增',
|
|
93
|
+
'libraries.empty': '还没有库,先创建一个。',
|
|
94
|
+
'libraries.namePlaceholder': '库名称',
|
|
95
|
+
'libraries.create': '新建',
|
|
96
|
+
'libraries.done': '完成',
|
|
97
|
+
'libraries.created': '库已创建并自动挂载',
|
|
98
|
+
'libraries.mountSaved': '挂载设置已保存',
|
|
99
|
+
'panel.tm': '记忆库',
|
|
100
|
+
'panel.glossary': '术语库',
|
|
101
|
+
'panel.mt': 'AI 翻译',
|
|
102
|
+
'panel.currentMatches': '当前句段匹配',
|
|
103
|
+
'panel.searchResults': '搜索结果',
|
|
104
|
+
'panel.searchPlaceholder': '搜索记忆库…',
|
|
105
|
+
'panel.search': '搜索',
|
|
106
|
+
'panel.noMatches': '没有匹配结果。确认句段后会自动写入记忆库。',
|
|
107
|
+
'panel.noCurrentMatches': '当前句段暂无匹配。确认译文后即可复用。',
|
|
108
|
+
'panel.exact': '精确',
|
|
109
|
+
'panel.fuzzy': '模糊',
|
|
110
|
+
'match.exact': '精确',
|
|
111
|
+
'match.near_exact': '近似精确',
|
|
112
|
+
'match.high_fuzzy': '高模糊',
|
|
113
|
+
'match.medium_fuzzy': '中模糊',
|
|
114
|
+
'match.low_fuzzy': '低模糊',
|
|
115
|
+
'panel.apply': '应用',
|
|
116
|
+
'panel.importTmx': '导入 TMX',
|
|
117
|
+
'panel.clearTm': '清空记忆库',
|
|
118
|
+
'panel.tmHint': '确认句段时自动写入;模糊阈值可在设置中调整。',
|
|
119
|
+
'panel.termHits': '本句命中',
|
|
120
|
+
'panel.noHits': '本句暂无术语命中',
|
|
121
|
+
'panel.allTerms': '全部术语',
|
|
122
|
+
'panel.termSearch': '筛选术语…',
|
|
123
|
+
'panel.addTerm': '添加术语',
|
|
124
|
+
'panel.termSource': '术语',
|
|
125
|
+
'panel.termTarget': '译文',
|
|
126
|
+
'panel.termNote': '备注(可选)',
|
|
127
|
+
'panel.saveTerm': '保存术语',
|
|
128
|
+
'panel.cancel': '取消',
|
|
129
|
+
'panel.delete': '删除',
|
|
130
|
+
'panel.noTerms': '术语库为空。添加术语后,命中会自动高亮。',
|
|
131
|
+
'panel.importCsv': '导入 CSV/TSV',
|
|
132
|
+
'panel.clearGlossary': '清空术语库',
|
|
133
|
+
'panel.mtProvider': '提供商',
|
|
134
|
+
'panel.mtRoute': '路由',
|
|
135
|
+
'panel.mtGenerate': '生成译文建议',
|
|
136
|
+
'panel.mtGenerating': '正在生成…',
|
|
137
|
+
'panel.mtInsert': '插入译文',
|
|
138
|
+
'panel.mtCopy': '复制',
|
|
139
|
+
'panel.mtEmpty': '点击生成,获取当前句段的机器翻译建议。',
|
|
140
|
+
'panel.mtModel': '模型',
|
|
141
|
+
'panel.mtSuggestion': 'MT 建议',
|
|
142
|
+
'panel.mtSettings': '配置路由',
|
|
143
|
+
'panel.mtHint': '通过 DSH 模型路由调用,凭据由 DSH 管理。',
|
|
144
|
+
'panel.mtMockHint': '术语替换(离线)不联网,只使用术语库;在设置中选择 DSH 路由可启用真实翻译。',
|
|
145
|
+
'panel.copy': '复制',
|
|
146
|
+
'mt.mock': '术语替换(离线)',
|
|
147
|
+
'modal.export.title': '导出',
|
|
148
|
+
'modal.export.desc': '导出当前文档。双语格式保留原文与译文对照,仅译文格式适合直接交付。',
|
|
149
|
+
'modal.export.bilingual': '双语对照',
|
|
150
|
+
'modal.export.target': '仅译文',
|
|
151
|
+
'modal.export.current': '当前文档',
|
|
152
|
+
'modal.export.bilingualMd': 'Markdown 表格',
|
|
153
|
+
'modal.export.bilingualCsv': 'CSV 表格',
|
|
154
|
+
'modal.export.tmx': 'TMX 记忆交换',
|
|
155
|
+
'modal.export.targetTxt': '纯文本',
|
|
156
|
+
'modal.export.targetMd': 'Markdown',
|
|
157
|
+
'modal.export.docx': 'Word DOCX',
|
|
158
|
+
'modal.export.docxGroup': '保留源格式',
|
|
159
|
+
'modal.export.epub': 'EPUB 电子书',
|
|
160
|
+
'modal.export.epubGroup': '保留源排版',
|
|
161
|
+
'modal.export.json': '文档 JSON',
|
|
162
|
+
'modal.export.subtitleGroup': '字幕',
|
|
163
|
+
'modal.export.localizationGroup': '本地化交换',
|
|
164
|
+
'modal.export.srt': 'SRT 字幕',
|
|
165
|
+
'modal.export.vtt': 'WebVTT 字幕',
|
|
166
|
+
'modal.export.po': 'PO 本地化',
|
|
167
|
+
'modal.export.xliff': 'XLIFF 1.2',
|
|
168
|
+
'modal.export.xliff2': 'XLIFF 2.0',
|
|
169
|
+
'modal.export.sdlxliff': 'SDL XLIFF(基础)',
|
|
170
|
+
'modal.export.webGroup': '网页与结构化文本',
|
|
171
|
+
'modal.export.officeGroup': '办公文档',
|
|
172
|
+
'modal.export.html': 'HTML 网页',
|
|
173
|
+
'modal.export.jsonTree': 'JSON(保留结构)',
|
|
174
|
+
'modal.export.rtf': 'RTF 富文本',
|
|
175
|
+
'modal.export.xlsx': 'Excel XLSX',
|
|
176
|
+
'modal.export.pptx': 'PowerPoint PPTX',
|
|
177
|
+
'modal.settings.title': '设置',
|
|
178
|
+
'modal.settings.ui': '界面',
|
|
179
|
+
'modal.settings.uiLanguage': '界面语言',
|
|
180
|
+
'modal.settings.uiAuto': '跟随 DSH 语言',
|
|
181
|
+
'modal.settings.uiHint': '只影响 CAIT 界面,不会改变文档的源语言和目标语言。',
|
|
182
|
+
'modal.settings.languages': '语言',
|
|
183
|
+
'modal.settings.preprocess': '预处理',
|
|
184
|
+
'modal.settings.preprocessHint': '在导入切句之前清理源文,占位符与标点不会被改写。',
|
|
185
|
+
'modal.settings.pre.normalizeWhitespace': '折叠多余空格与制表符',
|
|
186
|
+
'modal.settings.pre.stripInvisible': '移除零宽字符与控制字符',
|
|
187
|
+
'modal.settings.pre.collapseBlankLines': '合并连续空行',
|
|
188
|
+
'modal.settings.tm': '翻译记忆',
|
|
189
|
+
'modal.settings.fuzzy': '模糊匹配阈值',
|
|
190
|
+
'modal.settings.limit': '返回匹配数',
|
|
191
|
+
'modal.settings.mt': '机器翻译',
|
|
192
|
+
'modal.settings.provider': 'MT provider 路由',
|
|
193
|
+
'modal.settings.routeHint': 'CAIT 只保存路由名和模型;API Key 由 DSH 凭据服务解析,CAIT 不接触。',
|
|
194
|
+
'modal.settings.routeMissing': '已失效的路由',
|
|
195
|
+
'modal.settings.noRoutes': '未检测到可用的 DSH 模型路由,当前使用术语替换(离线)。',
|
|
196
|
+
'modal.settings.noModels': '该路由没有可用模型',
|
|
197
|
+
'modal.settings.model': '模型',
|
|
198
|
+
'modal.settings.temperature': '温度',
|
|
199
|
+
'modal.settings.save': '保存设置',
|
|
200
|
+
'modal.settings.cancel': '取消',
|
|
201
|
+
'modal.settings.mockHint': '术语替换(离线)不联网,只使用术语库。',
|
|
202
|
+
'modal.confirm.title': '确认操作',
|
|
203
|
+
'modal.confirm.clearTm':
|
|
204
|
+
'清空当前挂载的翻译记忆?未挂载库不会受影响;如要清空全部库,请在 API 调用中显式传 all: true。此操作无法撤销。',
|
|
205
|
+
'modal.confirm.clearGlossary':
|
|
206
|
+
'清空当前挂载的术语?未挂载库不会受影响;如要清空全部库,请在 API 调用中显式传 all: true。此操作无法撤销。',
|
|
207
|
+
'modal.confirm.deleteTerm': '删除术语',
|
|
208
|
+
'modal.confirm.ok': '确认',
|
|
209
|
+
'modal.confirm.cancel': '取消',
|
|
210
|
+
'toast.confirmed': '句段已确认并写入记忆库',
|
|
211
|
+
'toast.created': '文档已创建',
|
|
212
|
+
'toast.docClosed': '文档已关闭,可在“打开已有文档”中重新打开',
|
|
213
|
+
'toast.docDeleted': '文档已删除',
|
|
214
|
+
'toast.docsCleared': '已清理 {count} 个已关闭文档',
|
|
215
|
+
'toast.docAlreadyOpen': '该文档已在工作台打开',
|
|
216
|
+
'toast.imported': '导入完成',
|
|
217
|
+
'toast.draftSaved': '草稿已保存',
|
|
218
|
+
'toast.termSaved': '术语已保存',
|
|
219
|
+
'toast.termDeleted': '术语已删除',
|
|
220
|
+
'toast.tmImported': 'TMX 已导入',
|
|
221
|
+
'toast.tmxMarkupLost': 'TMX 已导入;{count} 个内联占位符/格式标签已按纯文本处理,格式信息丢失。',
|
|
222
|
+
'toast.glossaryImported': '术语已导入',
|
|
223
|
+
'toast.tmCleared': '记忆库已清空',
|
|
224
|
+
'toast.glossaryCleared': '术语库已清空',
|
|
225
|
+
'toast.settingsSaved': '设置已保存',
|
|
226
|
+
'toast.exported': '文件已导出',
|
|
227
|
+
'toast.copied': '已复制到剪贴板',
|
|
228
|
+
'toast.mtReady': '译文建议已生成',
|
|
229
|
+
'toast.error': '操作失败',
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
const EN = {
|
|
233
|
+
'app.title': 'CAIT',
|
|
234
|
+
'app.subtitle': 'CAT workbench',
|
|
235
|
+
'nav.new': 'New',
|
|
236
|
+
'nav.import': 'Import',
|
|
237
|
+
'nav.export': 'Export',
|
|
238
|
+
'nav.settings': 'Settings',
|
|
239
|
+
'doc.switch': 'Document',
|
|
240
|
+
'doc.openExisting': 'Open existing document',
|
|
241
|
+
'doc.clean': 'Clean closed documents',
|
|
242
|
+
'doc.cleanTitle': 'Closed documents',
|
|
243
|
+
'doc.cleanHint': 'These documents are closed but still stored in CAIT. Deleting one permanently removes the document and its segments.',
|
|
244
|
+
'doc.cleanAll': 'Delete all closed documents',
|
|
245
|
+
'doc.cleanAllMessage': 'Permanently delete all {count} closed documents? This cannot be undone.',
|
|
246
|
+
'doc.cleanEmpty': 'No closed documents.',
|
|
247
|
+
'doc.delete': 'Delete document',
|
|
248
|
+
'doc.deleteTitle': 'Delete document',
|
|
249
|
+
'doc.deleteMessage': 'Permanently delete “{name}”? Its segments will also be deleted.',
|
|
250
|
+
'doc.segments': 'segments',
|
|
251
|
+
'tabs.title': 'Open documents',
|
|
252
|
+
'tabs.close': 'Close document',
|
|
253
|
+
'tabs.new': 'New page',
|
|
254
|
+
'progress.confirmed': 'confirmed',
|
|
255
|
+
'status.pending': 'Pending',
|
|
256
|
+
'status.confirmed': 'Confirmed',
|
|
257
|
+
'common.loading': 'Loading workbench…',
|
|
258
|
+
'common.retry': 'Retry',
|
|
259
|
+
'common.refresh': 'Refresh',
|
|
260
|
+
'storage.saveFailed': 'Save failed: ',
|
|
261
|
+
'storage.stale': 'Data changed in another window or by an agent. Your draft is preserved; save and refresh to sync.',
|
|
262
|
+
'error.load': 'Could not load the CAIT workbench',
|
|
263
|
+
'rail.title': 'Segments',
|
|
264
|
+
'rail.search': 'Filter segments…',
|
|
265
|
+
'rail.empty': 'No matching segments',
|
|
266
|
+
'editor.segment': 'Segment',
|
|
267
|
+
'editor.source': 'Source',
|
|
268
|
+
'editor.target': 'Target',
|
|
269
|
+
'editor.targetPlaceholder': 'Type the translation…',
|
|
270
|
+
'editor.confirm': 'Confirm & add to TM',
|
|
271
|
+
'editor.update': 'Update & add to TM',
|
|
272
|
+
'editor.next': 'Next',
|
|
273
|
+
'editor.prev': 'Previous',
|
|
274
|
+
'editor.save': 'Save draft',
|
|
275
|
+
'editor.unsaved': 'unsaved',
|
|
276
|
+
'editor.chars': 'chars',
|
|
277
|
+
'editor.hint': '⌘/Ctrl + Enter confirm · Alt + ↑/↓ navigate',
|
|
278
|
+
'editor.emptyTarget': 'Enter a translation first',
|
|
279
|
+
'editor.done': 'All segments confirmed',
|
|
280
|
+
'editor.confirmedAt': 'Confirmed',
|
|
281
|
+
'empty.title': 'Start a CAT translation',
|
|
282
|
+
'empty.desc': 'Paste text, drop a file, or load the demo. CAIT splits the source into segments, queries translation memory and glossary hits, and stores each confirmed pair in TM.',
|
|
283
|
+
'empty.paste': 'Paste text',
|
|
284
|
+
'empty.file': 'Import file',
|
|
285
|
+
'empty.name': 'Document name (optional)',
|
|
286
|
+
'empty.textPlaceholder': 'Paste source text here…',
|
|
287
|
+
'empty.create': 'Create document',
|
|
288
|
+
'empty.demo': 'Load demo document',
|
|
289
|
+
'empty.demoHint': 'No material?',
|
|
290
|
+
'empty.drop': 'Drop a file, or click to choose',
|
|
291
|
+
'empty.formats': 'TXT · Markdown · DOCX · EPUB · TMX · CSV · SRT · VTT · PO · XLIFF · HTML · JSON · RTF · XLSX · PPTX',
|
|
292
|
+
'empty.features.tm': 'Translation memory',
|
|
293
|
+
'empty.features.tmDesc': 'Exact + fuzzy matching',
|
|
294
|
+
'empty.features.glossary': 'Glossary',
|
|
295
|
+
'empty.features.glossaryDesc': 'Highlighted term hits',
|
|
296
|
+
'empty.features.mt': 'AI translation',
|
|
297
|
+
'empty.features.mtDesc': 'Configurable endpoint',
|
|
298
|
+
'modal.new.title': 'New document',
|
|
299
|
+
'modal.new.name': 'Document name',
|
|
300
|
+
'modal.new.namePlaceholder': 'e.g. Product handbook',
|
|
301
|
+
'modal.new.sourceLang': 'Source language',
|
|
302
|
+
'modal.new.targetLang': 'Target language',
|
|
303
|
+
'modal.new.create': 'Create document',
|
|
304
|
+
'modal.new.importing': 'Importing…',
|
|
305
|
+
'modal.new.dropHint': 'TXT · Markdown · DOCX · EPUB · TMX · CSV · SRT · VTT · PO · XLIFF · HTML · JSON · RTF · XLSX · PPTX',
|
|
306
|
+
'modal.new.csvSource': 'CSV source column',
|
|
307
|
+
'modal.new.csvTarget': 'CSV target column',
|
|
308
|
+
'modal.new.csvColumnPlaceholder': 'Column name or number, e.g. Source / 2',
|
|
309
|
+
'modal.new.csvHint': 'Optional. Empty auto-detects Source/Target headers or uses the first two columns.',
|
|
310
|
+
'modal.new.sample': 'No material?',
|
|
311
|
+
'modal.new.demo': 'Load demo document',
|
|
312
|
+
'panel.title': 'CAT assistant',
|
|
313
|
+
'panel.live': 'live',
|
|
314
|
+
'libraries.open': 'Manage mounted libraries',
|
|
315
|
+
'libraries.short': 'Libraries',
|
|
316
|
+
'libraries.title': 'Translation memories and glossaries',
|
|
317
|
+
'libraries.desc': 'Choose which libraries this translation session searches. Keep at least one TM and one glossary mounted. Defaults receive new translations and terms.',
|
|
318
|
+
'libraries.tm': 'Translation memories',
|
|
319
|
+
'libraries.glossary': 'Glossaries',
|
|
320
|
+
'libraries.entries': 'entries',
|
|
321
|
+
'libraries.notMounted': 'not mounted',
|
|
322
|
+
'libraries.defaultTm': 'Default write',
|
|
323
|
+
'libraries.defaultGlossary': 'Default add',
|
|
324
|
+
'libraries.empty': 'No libraries yet. Create one below.',
|
|
325
|
+
'libraries.namePlaceholder': 'Library name',
|
|
326
|
+
'libraries.create': 'Create',
|
|
327
|
+
'libraries.done': 'Done',
|
|
328
|
+
'libraries.created': 'Library created and mounted',
|
|
329
|
+
'libraries.mountSaved': 'Mount settings saved',
|
|
330
|
+
'panel.tm': 'TM',
|
|
331
|
+
'panel.glossary': 'Glossary',
|
|
332
|
+
'panel.mt': 'AI translate',
|
|
333
|
+
'panel.currentMatches': 'Current segment matches',
|
|
334
|
+
'panel.searchResults': 'Search results',
|
|
335
|
+
'panel.searchPlaceholder': 'Search translation memory…',
|
|
336
|
+
'panel.search': 'Search',
|
|
337
|
+
'panel.noMatches': 'No matches. Confirmed segments are added to TM automatically.',
|
|
338
|
+
'panel.noCurrentMatches': 'No matches for this segment yet. Confirm a translation to reuse it.',
|
|
339
|
+
'panel.exact': 'exact',
|
|
340
|
+
'panel.fuzzy': 'fuzzy',
|
|
341
|
+
'match.exact': 'Exact',
|
|
342
|
+
'match.near_exact': 'Near exact',
|
|
343
|
+
'match.high_fuzzy': 'High fuzzy',
|
|
344
|
+
'match.medium_fuzzy': 'Medium fuzzy',
|
|
345
|
+
'match.low_fuzzy': 'Low fuzzy',
|
|
346
|
+
'panel.apply': 'Apply',
|
|
347
|
+
'panel.importTmx': 'Import TMX',
|
|
348
|
+
'panel.clearTm': 'Clear TM',
|
|
349
|
+
'panel.tmHint': 'Confirmed segments are stored automatically; adjust the fuzzy threshold in Settings.',
|
|
350
|
+
'panel.termHits': 'Hits in this segment',
|
|
351
|
+
'panel.noHits': 'No glossary hits in this segment',
|
|
352
|
+
'panel.allTerms': 'All terms',
|
|
353
|
+
'panel.termSearch': 'Filter terms…',
|
|
354
|
+
'panel.addTerm': 'Add term',
|
|
355
|
+
'panel.termSource': 'Term',
|
|
356
|
+
'panel.termTarget': 'Translation',
|
|
357
|
+
'panel.termNote': 'Note (optional)',
|
|
358
|
+
'panel.saveTerm': 'Save term',
|
|
359
|
+
'panel.cancel': 'Cancel',
|
|
360
|
+
'panel.delete': 'Delete',
|
|
361
|
+
'panel.noTerms': 'The glossary is empty. Hits will be highlighted automatically.',
|
|
362
|
+
'panel.importCsv': 'Import CSV/TSV',
|
|
363
|
+
'panel.clearGlossary': 'Clear glossary',
|
|
364
|
+
'panel.mtProvider': 'Provider',
|
|
365
|
+
'panel.mtRoute': 'Route',
|
|
366
|
+
'panel.mtGenerate': 'Generate suggestion',
|
|
367
|
+
'panel.mtGenerating': 'Generating…',
|
|
368
|
+
'panel.mtInsert': 'Insert translation',
|
|
369
|
+
'panel.mtCopy': 'Copy',
|
|
370
|
+
'panel.mtEmpty': 'Generate a machine-translation suggestion for the current segment.',
|
|
371
|
+
'panel.mtModel': 'Model',
|
|
372
|
+
'panel.mtSuggestion': 'MT suggestion',
|
|
373
|
+
'panel.mtSettings': 'Configure route',
|
|
374
|
+
'panel.mtHint': 'Calls through a DSH model route; credentials stay inside DSH.',
|
|
375
|
+
'panel.mtMockHint': 'Glossary substitution is offline and uses only glossary terms. Pick a DSH route in Settings for real MT.',
|
|
376
|
+
'panel.copy': 'Copy',
|
|
377
|
+
'mt.mock': 'Glossary substitution (offline)',
|
|
378
|
+
'modal.export.title': 'Export',
|
|
379
|
+
'modal.export.desc': 'Export the current document. Bilingual formats keep source and target side by side; target-only formats are ready for delivery.',
|
|
380
|
+
'modal.export.bilingual': 'Bilingual',
|
|
381
|
+
'modal.export.target': 'Target only',
|
|
382
|
+
'modal.export.current': 'Current document',
|
|
383
|
+
'modal.export.bilingualMd': 'Markdown table',
|
|
384
|
+
'modal.export.bilingualCsv': 'CSV table',
|
|
385
|
+
'modal.export.tmx': 'TMX exchange',
|
|
386
|
+
'modal.export.targetTxt': 'Plain text',
|
|
387
|
+
'modal.export.targetMd': 'Markdown',
|
|
388
|
+
'modal.export.docx': 'Word DOCX',
|
|
389
|
+
'modal.export.docxGroup': 'Preserve source formatting',
|
|
390
|
+
'modal.export.epub': 'EPUB ebook',
|
|
391
|
+
'modal.export.epubGroup': 'Preserve source layout',
|
|
392
|
+
'modal.export.json': 'Document JSON',
|
|
393
|
+
'modal.export.subtitleGroup': 'Subtitles',
|
|
394
|
+
'modal.export.localizationGroup': 'Localization exchange',
|
|
395
|
+
'modal.export.srt': 'SRT subtitles',
|
|
396
|
+
'modal.export.vtt': 'WebVTT subtitles',
|
|
397
|
+
'modal.export.po': 'PO localization',
|
|
398
|
+
'modal.export.xliff': 'XLIFF 1.2',
|
|
399
|
+
'modal.export.xliff2': 'XLIFF 2.0',
|
|
400
|
+
'modal.export.sdlxliff': 'SDL XLIFF (basic)',
|
|
401
|
+
'modal.export.webGroup': 'Web and structured text',
|
|
402
|
+
'modal.export.officeGroup': 'Office documents',
|
|
403
|
+
'modal.export.html': 'HTML page',
|
|
404
|
+
'modal.export.jsonTree': 'JSON (structure preserved)',
|
|
405
|
+
'modal.export.rtf': 'RTF rich text',
|
|
406
|
+
'modal.export.xlsx': 'Excel XLSX',
|
|
407
|
+
'modal.export.pptx': 'PowerPoint PPTX',
|
|
408
|
+
'modal.settings.title': 'Settings',
|
|
409
|
+
'modal.settings.ui': 'Interface',
|
|
410
|
+
'modal.settings.uiLanguage': 'Interface language',
|
|
411
|
+
'modal.settings.uiAuto': 'Follow DSH language',
|
|
412
|
+
'modal.settings.uiHint': 'Changes only the CAIT interface; document source and target languages are unaffected.',
|
|
413
|
+
'modal.settings.languages': 'Languages',
|
|
414
|
+
'modal.settings.preprocess': 'Preprocessing',
|
|
415
|
+
'modal.settings.preprocessHint': 'Cleans imported source text before segmentation. Placeholders and punctuation are left untouched.',
|
|
416
|
+
'modal.settings.pre.normalizeWhitespace': 'Collapse extra spaces and tabs',
|
|
417
|
+
'modal.settings.pre.stripInvisible': 'Remove zero-width and control characters',
|
|
418
|
+
'modal.settings.pre.collapseBlankLines': 'Merge consecutive blank lines',
|
|
419
|
+
'modal.settings.tm': 'Translation memory',
|
|
420
|
+
'modal.settings.fuzzy': 'Fuzzy-match threshold',
|
|
421
|
+
'modal.settings.limit': 'Matches returned',
|
|
422
|
+
'modal.settings.mt': 'Machine translation',
|
|
423
|
+
'modal.settings.provider': 'MT provider route',
|
|
424
|
+
'modal.settings.routeHint': 'CAIT stores only the route and model name; DSH resolves the API key, which CAIT never sees.',
|
|
425
|
+
'modal.settings.routeMissing': 'Route no longer available',
|
|
426
|
+
'modal.settings.noRoutes': 'No usable DSH model route was found. CAIT will use offline glossary substitution.',
|
|
427
|
+
'modal.settings.noModels': 'This route has no available models',
|
|
428
|
+
'modal.settings.model': 'Model',
|
|
429
|
+
'modal.settings.temperature': 'Temperature',
|
|
430
|
+
'modal.settings.save': 'Save settings',
|
|
431
|
+
'modal.settings.cancel': 'Cancel',
|
|
432
|
+
'modal.settings.mockHint': 'Glossary substitution is offline and only replaces glossary terms.',
|
|
433
|
+
'modal.confirm.title': 'Confirm',
|
|
434
|
+
'modal.confirm.clearTm':
|
|
435
|
+
'Clear the currently mounted translation memories? Unmounted libraries are not affected; pass all: true to the API to clear every library. This cannot be undone.',
|
|
436
|
+
'modal.confirm.clearGlossary':
|
|
437
|
+
'Clear the currently mounted glossary terms? Unmounted libraries are not affected; pass all: true to the API to clear every library. This cannot be undone.',
|
|
438
|
+
'modal.confirm.deleteTerm': 'Delete term',
|
|
439
|
+
'modal.confirm.ok': 'Confirm',
|
|
440
|
+
'modal.confirm.cancel': 'Cancel',
|
|
441
|
+
'toast.confirmed': 'Segment confirmed and written to TM',
|
|
442
|
+
'toast.created': 'Document created',
|
|
443
|
+
'toast.docClosed': 'Document closed; reopen it from Open existing document',
|
|
444
|
+
'toast.docDeleted': 'Document deleted',
|
|
445
|
+
'toast.docsCleared': 'Cleared {count} closed documents',
|
|
446
|
+
'toast.docAlreadyOpen': 'This document is already open in the workbench',
|
|
447
|
+
'toast.imported': 'Import complete',
|
|
448
|
+
'toast.draftSaved': 'Draft saved',
|
|
449
|
+
'toast.termSaved': 'Term saved',
|
|
450
|
+
'toast.termDeleted': 'Term deleted',
|
|
451
|
+
'toast.tmImported': 'TMX imported',
|
|
452
|
+
'toast.tmxMarkupLost': 'TMX imported; {count} inline placeholder/format tags were flattened to plain text.',
|
|
453
|
+
'toast.glossaryImported': 'Glossary imported',
|
|
454
|
+
'toast.tmCleared': 'Translation memory cleared',
|
|
455
|
+
'toast.glossaryCleared': 'Glossary cleared',
|
|
456
|
+
'toast.settingsSaved': 'Settings saved',
|
|
457
|
+
'toast.exported': 'File exported',
|
|
458
|
+
'toast.copied': 'Copied to clipboard',
|
|
459
|
+
'toast.mtReady': 'Suggestion ready',
|
|
460
|
+
'toast.error': 'Operation failed',
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
const JA = {
|
|
464
|
+
'app.title': 'CAIT',
|
|
465
|
+
'app.subtitle': 'CAT 翻訳ワークベンチ',
|
|
466
|
+
'nav.new': '新規',
|
|
467
|
+
'nav.import': 'インポート',
|
|
468
|
+
'nav.export': 'エクスポート',
|
|
469
|
+
'nav.settings': '設定',
|
|
470
|
+
'doc.switch': '文書',
|
|
471
|
+
'doc.openExisting': '既存の文書を開く',
|
|
472
|
+
'doc.clean': '閉じた文書を整理',
|
|
473
|
+
'doc.cleanTitle': '閉じた文書',
|
|
474
|
+
'doc.cleanHint': 'これらの文書は閉じていますが CAIT に保存されています。削除すると文書とセグメントは完全に削除されます。',
|
|
475
|
+
'doc.cleanAll': '閉じた文書をすべて削除',
|
|
476
|
+
'doc.cleanAllMessage': '閉じた {count} 件の文書を完全に削除しますか?この操作は元に戻せません。',
|
|
477
|
+
'doc.cleanEmpty': '閉じた文書はありません。',
|
|
478
|
+
'doc.delete': '文書を削除',
|
|
479
|
+
'doc.deleteTitle': '文書を削除',
|
|
480
|
+
'doc.deleteMessage': '「{name}」を完全に削除しますか?この文書のセグメントも削除されます。',
|
|
481
|
+
'doc.segments': 'セグメント',
|
|
482
|
+
'tabs.title': '開いている文書',
|
|
483
|
+
'tabs.close': '文書を閉じる',
|
|
484
|
+
'tabs.new': '新しいタブ',
|
|
485
|
+
'progress.confirmed': '確認済み',
|
|
486
|
+
'status.pending': '未翻訳',
|
|
487
|
+
'status.confirmed': '確認済み',
|
|
488
|
+
'common.loading': 'ワークベンチを読み込み中…',
|
|
489
|
+
'common.retry': '再試行',
|
|
490
|
+
'common.refresh': '更新',
|
|
491
|
+
'storage.saveFailed': '保存に失敗しました:',
|
|
492
|
+
'storage.stale': 'データは別ウィンドウまたは agent の操作で更新されました。現在の下書きは上書きされていません。保存後に更新すると同期されます。',
|
|
493
|
+
'error.load': 'CAIT ワークベンチを読み込めません',
|
|
494
|
+
'rail.title': 'セグメント',
|
|
495
|
+
'rail.search': 'セグメントを絞り込む…',
|
|
496
|
+
'rail.empty': '一致するセグメントはありません',
|
|
497
|
+
'editor.segment': 'セグメント',
|
|
498
|
+
'editor.source': '原文',
|
|
499
|
+
'editor.target': '訳文',
|
|
500
|
+
'editor.targetPlaceholder': 'ここに訳文を入力…',
|
|
501
|
+
'editor.confirm': '確認して TM に保存',
|
|
502
|
+
'editor.update': '訳文を更新して TM に保存',
|
|
503
|
+
'editor.next': '次のセグメント',
|
|
504
|
+
'editor.prev': '前のセグメント',
|
|
505
|
+
'editor.save': '下書きを保存',
|
|
506
|
+
'editor.unsaved': '未保存',
|
|
507
|
+
'editor.chars': '文字',
|
|
508
|
+
'editor.hint': '⌘/Ctrl + Enter で確認 · Alt + ↑/↓ で移動',
|
|
509
|
+
'editor.emptyTarget': '先に訳文を入力してください',
|
|
510
|
+
'editor.done': 'すべてのセグメントを確認済み',
|
|
511
|
+
'editor.confirmedAt': '確認日時',
|
|
512
|
+
'empty.title': 'CAT 翻訳を始める',
|
|
513
|
+
'empty.desc': 'テキストを貼り付けるか、ファイルをドロップするか、デモ文書を読み込みます。CAIT は原文をセグメントに分割し、翻訳メモリと用語集を同時に検索します。確認した訳文は自動的に TM に保存されます。',
|
|
514
|
+
'empty.paste': 'テキストを貼り付け',
|
|
515
|
+
'empty.file': 'ファイルをインポート',
|
|
516
|
+
'empty.name': '文書名(任意)',
|
|
517
|
+
'empty.textPlaceholder': 'ここに原文を貼り付け…',
|
|
518
|
+
'empty.create': '文書を作成',
|
|
519
|
+
'empty.demo': 'デモ文書を読み込む',
|
|
520
|
+
'empty.demoHint': '素材がありませんか?',
|
|
521
|
+
'empty.drop': 'ファイルをドロップ、またはクリックして選択',
|
|
522
|
+
'empty.formats': 'TXT · Markdown · DOCX · EPUB · TMX · CSV · SRT · VTT · PO · XLIFF · HTML · JSON · RTF · XLSX · PPTX に対応',
|
|
523
|
+
'empty.features.tm': '翻訳メモリ',
|
|
524
|
+
'empty.features.tmDesc': '完全一致+あいまい一致',
|
|
525
|
+
'empty.features.glossary': '用語集',
|
|
526
|
+
'empty.features.glossaryDesc': 'ヒットを強調表示',
|
|
527
|
+
'empty.features.mt': 'AI 翻訳',
|
|
528
|
+
'empty.features.mtDesc': '互換エンドポイントを設定可能',
|
|
529
|
+
'modal.new.title': '新規文書',
|
|
530
|
+
'modal.new.name': '文書名',
|
|
531
|
+
'modal.new.namePlaceholder': '例:製品マニュアル',
|
|
532
|
+
'modal.new.sourceLang': '原文言語',
|
|
533
|
+
'modal.new.targetLang': '訳文言語',
|
|
534
|
+
'modal.new.create': '文書を作成',
|
|
535
|
+
'modal.new.importing': 'インポート中…',
|
|
536
|
+
'modal.new.dropHint': 'TXT · Markdown · DOCX · EPUB · TMX · CSV · SRT · VTT · PO · XLIFF · HTML · JSON · RTF · XLSX · PPTX',
|
|
537
|
+
'modal.new.csvSource': 'CSV 原文列',
|
|
538
|
+
'modal.new.csvTarget': 'CSV 訳文列',
|
|
539
|
+
'modal.new.csvColumnPlaceholder': '列名または列番号(例:Source / 2)',
|
|
540
|
+
'modal.new.csvHint': '任意。空の場合は Source/Target ヘッダーを自動判定するか、先頭 2 列を使用します。',
|
|
541
|
+
'modal.new.sample': '素材がありませんか?',
|
|
542
|
+
'modal.new.demo': 'デモ文書を読み込む',
|
|
543
|
+
'panel.title': 'CAT アシスタント',
|
|
544
|
+
'panel.live': 'ライブ',
|
|
545
|
+
'libraries.open': 'マウント中のライブラリを管理',
|
|
546
|
+
'libraries.short': 'ライブラリ',
|
|
547
|
+
'libraries.title': '翻訳メモリと用語集',
|
|
548
|
+
'libraries.desc': 'この翻訳セッションで検索するライブラリを選択します。TM と用語集をそれぞれ 1 つ以上マウントしてください。既定のライブラリには新しい訳文と用語が書き込まれます。',
|
|
549
|
+
'libraries.tm': '翻訳メモリ',
|
|
550
|
+
'libraries.glossary': '用語集',
|
|
551
|
+
'libraries.entries': '件',
|
|
552
|
+
'libraries.notMounted': '未マウント',
|
|
553
|
+
'libraries.defaultTm': '既定の書き込み先',
|
|
554
|
+
'libraries.defaultGlossary': '既定の追加先',
|
|
555
|
+
'libraries.empty': 'ライブラリがまだありません。作成してください。',
|
|
556
|
+
'libraries.namePlaceholder': 'ライブラリ名',
|
|
557
|
+
'libraries.create': '作成',
|
|
558
|
+
'libraries.done': '完了',
|
|
559
|
+
'libraries.created': 'ライブラリを作成してマウントしました',
|
|
560
|
+
'libraries.mountSaved': 'マウント設定を保存しました',
|
|
561
|
+
'panel.tm': 'TM',
|
|
562
|
+
'panel.glossary': '用語集',
|
|
563
|
+
'panel.mt': 'AI 翻訳',
|
|
564
|
+
'panel.currentMatches': '現在のセグメントの一致',
|
|
565
|
+
'panel.searchResults': '検索結果',
|
|
566
|
+
'panel.searchPlaceholder': '翻訳メモリを検索…',
|
|
567
|
+
'panel.search': '検索',
|
|
568
|
+
'panel.noMatches': '一致する結果はありません。確認したセグメントは自動的に TM に保存されます。',
|
|
569
|
+
'panel.noCurrentMatches': 'このセグメントにはまだ一致がありません。訳文を確認すると再利用できます。',
|
|
570
|
+
'panel.exact': '完全一致',
|
|
571
|
+
'panel.fuzzy': 'あいまい',
|
|
572
|
+
'match.exact': '完全一致',
|
|
573
|
+
'match.near_exact': 'ほぼ完全一致',
|
|
574
|
+
'match.high_fuzzy': '高あいまい一致',
|
|
575
|
+
'match.medium_fuzzy': '中あいまい一致',
|
|
576
|
+
'match.low_fuzzy': '低あいまい一致',
|
|
577
|
+
'panel.apply': '適用',
|
|
578
|
+
'panel.importTmx': 'TMX をインポート',
|
|
579
|
+
'panel.clearTm': 'TM をクリア',
|
|
580
|
+
'panel.tmHint': 'セグメントを確認すると自動的に書き込まれます。あいまい一致のしきい値は設定で変更できます。',
|
|
581
|
+
'panel.termHits': 'このセグメントのヒット',
|
|
582
|
+
'panel.noHits': 'このセグメントには用語ヒットがありません',
|
|
583
|
+
'panel.allTerms': 'すべての用語',
|
|
584
|
+
'panel.termSearch': '用語を絞り込む…',
|
|
585
|
+
'panel.addTerm': '用語を追加',
|
|
586
|
+
'panel.termSource': '用語',
|
|
587
|
+
'panel.termTarget': '訳語',
|
|
588
|
+
'panel.termNote': 'メモ(任意)',
|
|
589
|
+
'panel.saveTerm': '用語を保存',
|
|
590
|
+
'panel.cancel': 'キャンセル',
|
|
591
|
+
'panel.delete': '削除',
|
|
592
|
+
'panel.noTerms': '用語集は空です。用語を追加するとヒットが自動で強調表示されます。',
|
|
593
|
+
'panel.importCsv': 'CSV/TSV をインポート',
|
|
594
|
+
'panel.clearGlossary': '用語集をクリア',
|
|
595
|
+
'panel.mtProvider': 'プロバイダー',
|
|
596
|
+
'panel.mtRoute': 'ルート',
|
|
597
|
+
'panel.mtGenerate': '訳文候補を生成',
|
|
598
|
+
'panel.mtGenerating': '生成中…',
|
|
599
|
+
'panel.mtInsert': '訳文を挿入',
|
|
600
|
+
'panel.mtCopy': 'コピー',
|
|
601
|
+
'panel.mtEmpty': '現在のセグメントの機械翻訳候補を生成します。',
|
|
602
|
+
'panel.mtModel': 'モデル',
|
|
603
|
+
'panel.mtSuggestion': 'MT 候補',
|
|
604
|
+
'panel.mtSettings': 'ルートを設定',
|
|
605
|
+
'panel.mtHint': 'DSH のモデルルート経由で呼び出します。認証情報は DSH が管理します。',
|
|
606
|
+
'panel.mtMockHint': '用語置換(オフライン)はネットワークを使わず、用語集の用語だけを置換します。設定で DSH ルートを選ぶと実際の翻訳が有効になります。',
|
|
607
|
+
'panel.copy': 'コピー',
|
|
608
|
+
'mt.mock': '用語置換(オフライン)',
|
|
609
|
+
'modal.export.title': 'エクスポート',
|
|
610
|
+
'modal.export.desc': '現在の文書をエクスポートします。対訳形式は原文と訳文を並べて保持し、訳文のみの形式はそのまま納品できます。',
|
|
611
|
+
'modal.export.bilingual': '対訳',
|
|
612
|
+
'modal.export.target': '訳文のみ',
|
|
613
|
+
'modal.export.current': '現在の文書',
|
|
614
|
+
'modal.export.bilingualMd': 'Markdown テーブル',
|
|
615
|
+
'modal.export.bilingualCsv': 'CSV テーブル',
|
|
616
|
+
'modal.export.tmx': 'TMX 交換',
|
|
617
|
+
'modal.export.targetTxt': 'プレーンテキスト',
|
|
618
|
+
'modal.export.targetMd': 'Markdown',
|
|
619
|
+
'modal.export.docx': 'Word DOCX',
|
|
620
|
+
'modal.export.docxGroup': '元の書式を保持',
|
|
621
|
+
'modal.export.epub': 'EPUB 電子書',
|
|
622
|
+
'modal.export.epubGroup': '元のレイアウトを保持',
|
|
623
|
+
'modal.export.json': '文書 JSON',
|
|
624
|
+
'modal.export.subtitleGroup': '字幕',
|
|
625
|
+
'modal.export.localizationGroup': 'ローカライズ交換',
|
|
626
|
+
'modal.export.srt': 'SRT 字幕',
|
|
627
|
+
'modal.export.vtt': 'WebVTT 字幕',
|
|
628
|
+
'modal.export.po': 'PO ローカライズ',
|
|
629
|
+
'modal.export.xliff': 'XLIFF 1.2',
|
|
630
|
+
'modal.export.xliff2': 'XLIFF 2.0',
|
|
631
|
+
'modal.export.sdlxliff': 'SDL XLIFF(基本)',
|
|
632
|
+
'modal.export.webGroup': 'Web と構造化テキスト',
|
|
633
|
+
'modal.export.officeGroup': 'オフィス文書',
|
|
634
|
+
'modal.export.html': 'HTML ページ',
|
|
635
|
+
'modal.export.jsonTree': 'JSON(構造を保持)',
|
|
636
|
+
'modal.export.rtf': 'RTF リッチテキスト',
|
|
637
|
+
'modal.export.xlsx': 'Excel XLSX',
|
|
638
|
+
'modal.export.pptx': 'PowerPoint PPTX',
|
|
639
|
+
'modal.settings.title': '設定',
|
|
640
|
+
'modal.settings.ui': '表示',
|
|
641
|
+
'modal.settings.uiLanguage': '表示言語',
|
|
642
|
+
'modal.settings.uiAuto': 'DSH の言語に合わせる',
|
|
643
|
+
'modal.settings.uiHint': 'CAIT の表示だけを切り替えます。文書の原文言語・訳文言語には影響しません。',
|
|
644
|
+
'modal.settings.languages': '言語',
|
|
645
|
+
'modal.settings.preprocess': '前処理',
|
|
646
|
+
'modal.settings.preprocessHint': '取り込みと分割の前に原文を整えます。プレースホルダーと句読点は変更しません。',
|
|
647
|
+
'modal.settings.pre.normalizeWhitespace': '余分な空白とタブをまとめる',
|
|
648
|
+
'modal.settings.pre.stripInvisible': 'ゼロ幅文字と制御文字を除去',
|
|
649
|
+
'modal.settings.pre.collapseBlankLines': '連続する空行をまとめる',
|
|
650
|
+
'modal.settings.tm': '翻訳メモリ',
|
|
651
|
+
'modal.settings.fuzzy': 'あいまい一致のしきい値',
|
|
652
|
+
'modal.settings.limit': '返す一致件数',
|
|
653
|
+
'modal.settings.mt': '機械翻訳',
|
|
654
|
+
'modal.settings.provider': 'MT プロバイダーのルート',
|
|
655
|
+
'modal.settings.routeHint': 'CAIT はルート名とモデル名だけを保存します。API キーは DSH の認証情報サービスが解決し、CAIT は触れません。',
|
|
656
|
+
'modal.settings.routeMissing': '利用できないルート',
|
|
657
|
+
'modal.settings.noRoutes': '利用可能な DSH モデルルートが見つかりません。用語置換(オフライン)を使用します。',
|
|
658
|
+
'modal.settings.noModels': 'このルートに利用可能なモデルがありません',
|
|
659
|
+
'modal.settings.model': 'モデル',
|
|
660
|
+
'modal.settings.temperature': '温度',
|
|
661
|
+
'modal.settings.save': '設定を保存',
|
|
662
|
+
'modal.settings.cancel': 'キャンセル',
|
|
663
|
+
'modal.settings.mockHint': '用語置換(オフライン)はネットワークを使わず、用語集の用語だけを置換します。',
|
|
664
|
+
'modal.confirm.title': '確認',
|
|
665
|
+
'modal.confirm.clearTm':
|
|
666
|
+
'現在マウント中の翻訳メモリをクリアしますか?未マウントのライブラリは影響を受けません。すべてのライブラリをクリアするには API に all: true を明示してください。この操作は元に戻せません。',
|
|
667
|
+
'modal.confirm.clearGlossary':
|
|
668
|
+
'現在マウント中の用語をクリアしますか?未マウントのライブラリは影響を受けません。すべてのライブラリをクリアするには API に all: true を明示してください。この操作は元に戻せません。',
|
|
669
|
+
'modal.confirm.deleteTerm': '用語を削除',
|
|
670
|
+
'modal.confirm.ok': '確認',
|
|
671
|
+
'modal.confirm.cancel': 'キャンセル',
|
|
672
|
+
'toast.confirmed': 'セグメントを確認して TM に保存しました',
|
|
673
|
+
'toast.created': '文書を作成しました',
|
|
674
|
+
'toast.docClosed': '文書を閉じました。「既存の文書を開く」から再度開けます',
|
|
675
|
+
'toast.docDeleted': '文書を削除しました',
|
|
676
|
+
'toast.docsCleared': '閉じた {count} 件の文書を整理しました',
|
|
677
|
+
'toast.docAlreadyOpen': 'この文書はすでにワークベンチで開いています',
|
|
678
|
+
'toast.imported': 'インポートが完了しました',
|
|
679
|
+
'toast.draftSaved': '下書きを保存しました',
|
|
680
|
+
'toast.termSaved': '用語を保存しました',
|
|
681
|
+
'toast.termDeleted': '用語を削除しました',
|
|
682
|
+
'toast.tmImported': 'TMX をインポートしました',
|
|
683
|
+
'toast.tmxMarkupLost': 'TMX をインポートしました。{count} 個のインライン プレースホルダー/書式タグはプレーンテキストとして処理され、書式情報は失われました。',
|
|
684
|
+
'toast.glossaryImported': '用語をインポートしました',
|
|
685
|
+
'toast.tmCleared': '翻訳メモリをクリアしました',
|
|
686
|
+
'toast.glossaryCleared': '用語集をクリアしました',
|
|
687
|
+
'toast.settingsSaved': '設定を保存しました',
|
|
688
|
+
'toast.exported': 'ファイルをエクスポートしました',
|
|
689
|
+
'toast.copied': 'クリップボードにコピーしました',
|
|
690
|
+
'toast.mtReady': '訳文候補を生成しました',
|
|
691
|
+
'toast.error': '操作に失敗しました',
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
// UI languages offered by the in-app switch. 'auto' follows the DSH locale
|
|
695
|
+
// through the bound DSH translator; the other entries use the dictionaries
|
|
696
|
+
// above. Labels are native names, except 'auto', which is localized.
|
|
697
|
+
const UI_LANGS = [
|
|
698
|
+
['auto', ''],
|
|
699
|
+
['zh', '简体中文'],
|
|
700
|
+
['en', 'English'],
|
|
701
|
+
['ja', '日本語'],
|
|
702
|
+
]
|
|
703
|
+
const UI_LANG_CODES = UI_LANGS.map(([code]) => code)
|
|
704
|
+
const UI_DICTS = { zh: ZH, en: EN, ja: JA }
|
|
705
|
+
|
|
706
|
+
function interpolateText(text, vars) {
|
|
707
|
+
if (!vars || typeof text !== 'string' || text.indexOf('{') < 0) return text
|
|
708
|
+
return text.replace(/\{(\w+)\}/g, (whole, name) =>
|
|
709
|
+
vars[name] === undefined || vars[name] === null ? whole : String(vars[name]),
|
|
710
|
+
)
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
/**
|
|
714
|
+
* Resolves a UI language preference to a concrete dictionary code.
|
|
715
|
+
*
|
|
716
|
+
* 'auto' means "follow the DSH locale": the DSH locale service reports the
|
|
717
|
+
* active language tag (for example 'zh', 'zh-CN' or 'en'), and we map its
|
|
718
|
+
* prefix onto one of our dictionaries. Returns '' when the preference is
|
|
719
|
+
* 'auto' and the tag is unknown, so the caller can fall back to the
|
|
720
|
+
* DSH-bound translator. (The bound translator alone is not enough: it only
|
|
721
|
+
* answers keys registered through the very same namespace, and a lookup
|
|
722
|
+
* miss silently yields the key, which used to leave 'auto' on English.)
|
|
723
|
+
*/
|
|
724
|
+
function resolveUiLang(preference, activeLocale) {
|
|
725
|
+
const value = String(preference || 'auto')
|
|
726
|
+
if (value !== 'auto') return UI_LANG_CODES.includes(value) ? value : 'auto'
|
|
727
|
+
const tag = String(activeLocale || '').trim().toLowerCase()
|
|
728
|
+
if (!tag) return ''
|
|
729
|
+
if (tag.startsWith('zh')) return 'zh'
|
|
730
|
+
if (tag.startsWith('ja')) return 'ja'
|
|
731
|
+
if (tag.startsWith('en')) return 'en'
|
|
732
|
+
return ''
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
/**
|
|
736
|
+
* Builds a translator for one UI language preference.
|
|
737
|
+
* `dshTranslate` is the DSH-bound translator (or null) used by 'auto'.
|
|
738
|
+
*/
|
|
739
|
+
function makeTranslator(preference, dshTranslate) {
|
|
740
|
+
const code = String(preference || 'auto')
|
|
741
|
+
const dict = UI_DICTS[code] || null
|
|
742
|
+
return (key, vars) => {
|
|
743
|
+
let text = dict ? dict[key] : null
|
|
744
|
+
if (!text && dshTranslate) {
|
|
745
|
+
const bound = dshTranslate(key)
|
|
746
|
+
if (bound && bound !== key) text = bound
|
|
747
|
+
}
|
|
748
|
+
if (!text) text = EN[key] || ZH[key] || key
|
|
749
|
+
return interpolateText(text, vars)
|
|
750
|
+
}
|
|
751
|
+
}
|