dsh-cait 1.1.3 → 1.1.7
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 +186 -0
- package/README.ja.md +51 -14
- package/README.md +137 -30
- package/README.zh-CN.md +51 -14
- package/client/components.js +2033 -48
- package/client/entry.js +2 -0
- package/client/helpers.js +12 -0
- package/client/locales.js +658 -8
- package/client/styles.js +111 -4
- package/client.js +2814 -58
- package/lib/aligner.js +6 -6
- package/lib/analysis.js +88 -0
- package/lib/api.js +46 -0
- package/lib/brief.js +275 -0
- package/lib/docx.js +155 -26
- package/lib/formats.js +37 -0
- package/lib/glossary.js +20 -4
- package/lib/import-export.js +212 -13
- package/lib/libraries.js +156 -0
- package/lib/library-export.js +7 -1
- package/lib/localization.js +1098 -0
- package/lib/lock.js +30 -0
- package/lib/notes.js +144 -0
- package/lib/persistence.js +54 -7
- package/lib/pptx.js +33 -1
- package/lib/pre-translate.js +62 -45
- package/lib/propagate.js +3 -0
- package/lib/qa.js +94 -4
- package/lib/replace.js +243 -0
- package/lib/review.js +131 -0
- package/lib/segment-edit.js +199 -0
- package/lib/store-utils.js +33 -6
- package/lib/store.js +507 -47
- package/lib/subtitles.js +213 -0
- package/lib/term-extract.js +105 -3
- package/lib/terms.js +4 -2
- package/lib/tm-maintenance.js +157 -0
- package/lib/tm.js +4 -1
- package/lib/tools.js +294 -0
- package/lib/xlsx.js +176 -66
- package/package.json +1 -1
package/client/locales.js
CHANGED
|
@@ -60,6 +60,14 @@
|
|
|
60
60
|
'rail.filter.pending': '待译',
|
|
61
61
|
'rail.filter.translated': '待审',
|
|
62
62
|
'rail.filter.confirmed': '已确认',
|
|
63
|
+
'rail.filter.risk': '重点审',
|
|
64
|
+
'rail.clearPretranslated': '清理预翻译',
|
|
65
|
+
'rail.clearPretranslatedHint': '清空未确认的预翻译与自动填充译文,保留人工草稿和已确认句段',
|
|
66
|
+
'modal.confirm.clearPretranslatedTitle': '清理预翻译译文?',
|
|
67
|
+
'modal.confirm.clearPretranslatedMessage': '将清空当前文档中 {count} 句未确认的预翻译译文(MT {mt}、TM {tm}、自动传播 {auto})。已确认句段和人工编辑的译文不会受影响;TM 中已保存的内容也不会删除。清理后这些句段回到未翻译状态,且无法撤销。',
|
|
68
|
+
'modal.confirm.clearPretranslatedConfirm': '清理 {count} 句',
|
|
69
|
+
'toast.pretranslatedCleared': '已清理 {count} 句预翻译译文',
|
|
70
|
+
'toast.nothingToClear': '没有可清理的未确认预翻译',
|
|
63
71
|
'rail.confirmAll': '全部确认',
|
|
64
72
|
'rail.confirmAllHint': '把当前所有「待审」句段一次性确认并写入翻译记忆',
|
|
65
73
|
'rail.confirmAllMessage': '将确认 {count} 个待审句段并写入翻译记忆,句段译文不会经过逐句复核。确定继续?',
|
|
@@ -201,6 +209,7 @@
|
|
|
201
209
|
'modal.export.targetTxt': '纯文本',
|
|
202
210
|
'modal.export.targetMd': 'Markdown',
|
|
203
211
|
'modal.export.docx': 'Word DOCX',
|
|
212
|
+
'modal.export.bilingualDocx': '双语审校稿 DOCX',
|
|
204
213
|
'modal.export.docxGroup': '保留源格式',
|
|
205
214
|
'modal.export.epub': 'EPUB 电子书',
|
|
206
215
|
'modal.export.epubGroup': '保留源排版',
|
|
@@ -210,7 +219,18 @@
|
|
|
210
219
|
'modal.export.srt': 'SRT 字幕',
|
|
211
220
|
'modal.export.vtt': 'WebVTT 字幕',
|
|
212
221
|
'modal.export.po': 'PO 本地化',
|
|
222
|
+
'modal.export.appleStrings': '.strings 字符串',
|
|
223
|
+
'modal.export.appleStringsdict': '.stringsdict 复数',
|
|
224
|
+
'modal.export.android': 'Android strings.xml',
|
|
225
|
+
'modal.export.resx': '.resx 资源',
|
|
226
|
+
'modal.export.arb': 'ARB 应用资源',
|
|
227
|
+
'modal.export.yaml': 'YAML 本地化',
|
|
228
|
+
'modal.export.properties': '.properties 属性',
|
|
213
229
|
'modal.export.xliff': 'XLIFF 1.2',
|
|
230
|
+
'modal.export.xliffReview': 'XLIFF 审校包',
|
|
231
|
+
'modal.export.reviewImport': '回填审校包',
|
|
232
|
+
'modal.export.reviewImportHint': '选择外部返回的 XLIFF 审校包,只更新能按 id 或源文对上的句段。',
|
|
233
|
+
'toast.reviewApplied': '审校包已回填 {applied} 段,{unmatched} 段未匹配',
|
|
214
234
|
'modal.export.xliff2': 'XLIFF 2.0',
|
|
215
235
|
'modal.export.sdlxliff': 'SDL XLIFF(基础)',
|
|
216
236
|
'modal.export.webGroup': '网页与结构化文本',
|
|
@@ -233,8 +253,16 @@
|
|
|
233
253
|
'modal.settings.pre.collapseBlankLines': '合并连续空行',
|
|
234
254
|
'modal.settings.tm': '翻译记忆',
|
|
235
255
|
'modal.settings.fuzzy': '模糊匹配阈值',
|
|
256
|
+
'modal.settings.fuzzyHint': '低于 70% 的匹配通常只共享虚词,改起来比重译更慢;70% 是主流 CAT 工具的默认值。',
|
|
257
|
+
'modal.settings.resetDefault': '恢复默认',
|
|
236
258
|
'modal.settings.limit': '返回匹配数',
|
|
237
259
|
'modal.settings.mt': '机器翻译',
|
|
260
|
+
'modal.settings.review': 'AI 审校模型',
|
|
261
|
+
'modal.settings.reviewInherit': '跟随翻译模型(默认)',
|
|
262
|
+
'modal.settings.reviewHint': '取消勾选后,AI 审校使用独立路由;预翻译仍使用上面的机器翻译路由。',
|
|
263
|
+
'modal.settings.reviewProvider': '审校 provider 路由',
|
|
264
|
+
'modal.settings.reviewInheritedHint': '当前与预翻译共用同一个 provider 和模型。',
|
|
265
|
+
'modal.settings.reviewCustomHint': 'AI 审校使用独立路由,预翻译不受影响。',
|
|
238
266
|
'modal.settings.provider': 'MT provider 路由',
|
|
239
267
|
'modal.settings.routeHint': 'CAIT 只保存路由名和模型;API Key 由 DSH 凭据服务解析,CAIT 不接触。',
|
|
240
268
|
'modal.settings.routeMissing': '已失效的路由',
|
|
@@ -295,6 +323,11 @@
|
|
|
295
323
|
'library.import': '导入',
|
|
296
324
|
'library.export': '导出',
|
|
297
325
|
'library.clear': '清空',
|
|
326
|
+
'tm.maintain.dedupe': '去重',
|
|
327
|
+
'tm.maintain.prune': '清理空译文',
|
|
328
|
+
'tm.maintain.dedupeHint': '将删除 {count} 条重复条目,保留最新一条。',
|
|
329
|
+
'tm.maintain.pruneHint': '将删除 {count} 条空译文条目。',
|
|
330
|
+
'tm.maintain.done': 'TM 维护完成:{count} 条',
|
|
298
331
|
'library.newLibrary': '新建库',
|
|
299
332
|
'library.rename': '重命名',
|
|
300
333
|
'library.deleteLibrary': '删除库',
|
|
@@ -338,6 +371,11 @@
|
|
|
338
371
|
'align.readError': '读取文件失败。',
|
|
339
372
|
'align.sourceLang': '源语言(可选)',
|
|
340
373
|
'align.targetLang': '目标语言(可选)',
|
|
374
|
+
'align.langHint': '可留空;例如 zh-CN、en',
|
|
375
|
+
'align.tm': '写入记忆库',
|
|
376
|
+
'align.tmHint': '对齐结果写入这个记忆库',
|
|
377
|
+
'align.tmOption': '记忆库:{name}',
|
|
378
|
+
'align.noTm': '暂无已挂载的记忆库',
|
|
341
379
|
'align.stats': '高置信 {high} · 待确认 {medium} · 可疑 {low}',
|
|
342
380
|
'align.unpairedSource': '未配对原文',
|
|
343
381
|
'align.unpairedTarget': '未配对译文',
|
|
@@ -356,13 +394,14 @@
|
|
|
356
394
|
'rail.propagateMessage': '把已有译文填到本文档中其它相同原文的句段(已确认的不会动)。',
|
|
357
395
|
'toast.propagated': '已铺满 {count} 个句段。',
|
|
358
396
|
'term.title': '术语候选',
|
|
359
|
-
'term.hint': '
|
|
397
|
+
'term.hint': '候选包含重复出现的术语和只出现一次的专名;专名需人工确认后才入库。',
|
|
360
398
|
'term.extract': '从文档提取术语',
|
|
361
|
-
'term.empty': '
|
|
399
|
+
'term.empty': '没有找到候选术语。',
|
|
362
400
|
'term.add': '加入术语库',
|
|
363
401
|
'term.added': '已加入 {added} 条术语。',
|
|
364
402
|
'term.noDoc': '先打开一个文档再提取术语。',
|
|
365
403
|
'term.inLibrary': '已有',
|
|
404
|
+
'term.proper': '专名',
|
|
366
405
|
}
|
|
367
406
|
|
|
368
407
|
const EN = {
|
|
@@ -427,6 +466,14 @@
|
|
|
427
466
|
'rail.filter.pending': 'To translate',
|
|
428
467
|
'rail.filter.translated': 'To review',
|
|
429
468
|
'rail.filter.confirmed': 'Confirmed',
|
|
469
|
+
'rail.filter.risk': 'Needs review',
|
|
470
|
+
'rail.clearPretranslated': 'Clear pretranslated',
|
|
471
|
+
'rail.clearPretranslatedHint': 'Clear unconfirmed pretranslated and auto-filled targets; manual drafts and confirmed segments are kept',
|
|
472
|
+
'modal.confirm.clearPretranslatedTitle': 'Clear pretranslated targets?',
|
|
473
|
+
'modal.confirm.clearPretranslatedMessage': 'This will clear {count} unconfirmed pretranslated target(s) in the current document (MT {mt}, TM {tm}, auto-propagated {auto}). Confirmed segments and manually edited targets are not affected, and saved TM entries are not deleted. The cleared segments return to untranslated and this cannot be undone.',
|
|
474
|
+
'modal.confirm.clearPretranslatedConfirm': 'Clear {count} segment(s)',
|
|
475
|
+
'toast.pretranslatedCleared': 'Cleared {count} pretranslated target(s)',
|
|
476
|
+
'toast.nothingToClear': 'No unconfirmed pretranslated targets to clear',
|
|
430
477
|
'rail.confirmAll': 'Confirm all',
|
|
431
478
|
'rail.confirmAllHint': 'Confirm every "To review" segment at once and write them to translation memory',
|
|
432
479
|
'rail.confirmAllMessage': 'This confirms {count} segment(s) awaiting review and writes them to translation memory, without reviewing them one by one. Continue?',
|
|
@@ -568,6 +615,7 @@
|
|
|
568
615
|
'modal.export.targetTxt': 'Plain text',
|
|
569
616
|
'modal.export.targetMd': 'Markdown',
|
|
570
617
|
'modal.export.docx': 'Word DOCX',
|
|
618
|
+
'modal.export.bilingualDocx': 'Bilingual review DOCX',
|
|
571
619
|
'modal.export.docxGroup': 'Preserve source formatting',
|
|
572
620
|
'modal.export.epub': 'EPUB ebook',
|
|
573
621
|
'modal.export.epubGroup': 'Preserve source layout',
|
|
@@ -577,7 +625,18 @@
|
|
|
577
625
|
'modal.export.srt': 'SRT subtitles',
|
|
578
626
|
'modal.export.vtt': 'WebVTT subtitles',
|
|
579
627
|
'modal.export.po': 'PO localization',
|
|
628
|
+
'modal.export.appleStrings': '.strings strings',
|
|
629
|
+
'modal.export.appleStringsdict': '.stringsdict plurals',
|
|
630
|
+
'modal.export.android': 'Android strings.xml',
|
|
631
|
+
'modal.export.resx': '.resx resources',
|
|
632
|
+
'modal.export.arb': 'ARB app resources',
|
|
633
|
+
'modal.export.yaml': 'YAML localization',
|
|
634
|
+
'modal.export.properties': '.properties',
|
|
580
635
|
'modal.export.xliff': 'XLIFF 1.2',
|
|
636
|
+
'modal.export.xliffReview': 'XLIFF review package',
|
|
637
|
+
'modal.export.reviewImport': 'Apply review package',
|
|
638
|
+
'modal.export.reviewImportHint': 'Choose an XLIFF review package. Only segments matched by id or source are updated.',
|
|
639
|
+
'toast.reviewApplied': 'Review applied: {applied} segments, {unmatched} unmatched',
|
|
581
640
|
'modal.export.xliff2': 'XLIFF 2.0',
|
|
582
641
|
'modal.export.sdlxliff': 'SDL XLIFF (basic)',
|
|
583
642
|
'modal.export.webGroup': 'Web and structured text',
|
|
@@ -600,8 +659,17 @@
|
|
|
600
659
|
'modal.settings.pre.collapseBlankLines': 'Merge consecutive blank lines',
|
|
601
660
|
'modal.settings.tm': 'Translation memory',
|
|
602
661
|
'modal.settings.fuzzy': 'Fuzzy-match threshold',
|
|
662
|
+
'modal.settings.fuzzyHint':
|
|
663
|
+
'Below 70% a match usually shares only function words, so editing it takes longer than retranslating. 70% is what mainstream CAT tools default to.',
|
|
664
|
+
'modal.settings.resetDefault': 'Reset',
|
|
603
665
|
'modal.settings.limit': 'Matches returned',
|
|
604
666
|
'modal.settings.mt': 'Machine translation',
|
|
667
|
+
'modal.settings.review': 'AI review model',
|
|
668
|
+
'modal.settings.reviewInherit': 'Follow the translation model (default)',
|
|
669
|
+
'modal.settings.reviewHint': 'Uncheck to give AI review its own route. Pre-translation keeps using the MT route above.',
|
|
670
|
+
'modal.settings.reviewProvider': 'Review provider route',
|
|
671
|
+
'modal.settings.reviewInheritedHint': 'Review currently shares the same provider and model as pre-translation.',
|
|
672
|
+
'modal.settings.reviewCustomHint': 'AI review uses a separate route; pre-translation is unaffected.',
|
|
605
673
|
'modal.settings.provider': 'MT provider route',
|
|
606
674
|
'modal.settings.routeHint': 'CAIT stores only the route and model name; DSH resolves the API key, which CAIT never sees.',
|
|
607
675
|
'modal.settings.routeMissing': 'Route no longer available',
|
|
@@ -662,6 +730,11 @@
|
|
|
662
730
|
'library.import': 'Import',
|
|
663
731
|
'library.export': 'Export',
|
|
664
732
|
'library.clear': 'Clear',
|
|
733
|
+
'tm.maintain.dedupe': 'Deduplicate',
|
|
734
|
+
'tm.maintain.prune': 'Prune empty targets',
|
|
735
|
+
'tm.maintain.dedupeHint': 'Delete {count} duplicate entries, keeping the newest.',
|
|
736
|
+
'tm.maintain.pruneHint': 'Delete {count} entries with an empty target.',
|
|
737
|
+
'tm.maintain.done': 'TM maintenance done: {count} entries',
|
|
665
738
|
'library.newLibrary': 'New library',
|
|
666
739
|
'library.rename': 'Rename',
|
|
667
740
|
'library.deleteLibrary': 'Delete library',
|
|
@@ -703,8 +776,13 @@
|
|
|
703
776
|
'align.running': 'Aligning…',
|
|
704
777
|
'align.needFiles': 'Choose both files first.',
|
|
705
778
|
'align.readError': 'Could not read that file.',
|
|
706
|
-
'align.sourceLang': 'Source language
|
|
707
|
-
'align.targetLang': 'Target language
|
|
779
|
+
'align.sourceLang': 'Source language',
|
|
780
|
+
'align.targetLang': 'Target language',
|
|
781
|
+
'align.langHint': 'Optional; for example zh-CN, en',
|
|
782
|
+
'align.tm': 'Write to memory',
|
|
783
|
+
'align.tmHint': 'Aligned pairs are written to this memory',
|
|
784
|
+
'align.tmOption': 'Memory: {name}',
|
|
785
|
+
'align.noTm': 'No mounted memory yet',
|
|
708
786
|
'align.stats': 'high {high} · to review {medium} · doubtful {low}',
|
|
709
787
|
'align.unpairedSource': 'Unpaired source',
|
|
710
788
|
'align.unpairedTarget': 'Unpaired target',
|
|
@@ -723,13 +801,14 @@
|
|
|
723
801
|
'rail.propagateMessage': 'Copy the existing translation to other segments with the same source. Confirmed segments are left alone.',
|
|
724
802
|
'toast.propagated': 'Filled {count} segment(s).',
|
|
725
803
|
'term.title': 'Terminology candidates',
|
|
726
|
-
'term.hint': '
|
|
804
|
+
'term.hint': 'Candidates include repeated terms and one-off proper names; names need a human decision before they enter the glossary.',
|
|
727
805
|
'term.extract': 'Mine terms from the document',
|
|
728
|
-
'term.empty': 'No
|
|
806
|
+
'term.empty': 'No candidate found.',
|
|
729
807
|
'term.add': 'Add to glossary',
|
|
730
808
|
'term.added': 'Added {added} term(s).',
|
|
731
809
|
'term.noDoc': 'Open a document before mining terms.',
|
|
732
810
|
'term.inLibrary': 'in library',
|
|
811
|
+
'term.proper': 'proper name',
|
|
733
812
|
}
|
|
734
813
|
|
|
735
814
|
const JA = {
|
|
@@ -794,6 +873,14 @@
|
|
|
794
873
|
'rail.filter.pending': '未翻訳',
|
|
795
874
|
'rail.filter.translated': '要確認',
|
|
796
875
|
'rail.filter.confirmed': '確認済み',
|
|
876
|
+
'rail.filter.risk': '重点確認',
|
|
877
|
+
'rail.clearPretranslated': '事前翻訳をクリア',
|
|
878
|
+
'rail.clearPretranslatedHint': '未確認の事前翻訳・自動反映の訳文を消去します。手動の下書きと確認済みセグメントは残します',
|
|
879
|
+
'modal.confirm.clearPretranslatedTitle': '事前翻訳をクリアしますか?',
|
|
880
|
+
'modal.confirm.clearPretranslatedMessage': '現在の文書で未確認の事前翻訳訳文 {count} 件(MT {mt}、TM {tm}、自動反映 {auto})を消去します。確認済みセグメントと手動編集の訳文は影響を受けず、TM に保存済みの内容も削除されません。消去後は未翻訳に戻り、元に戻せません。',
|
|
881
|
+
'modal.confirm.clearPretranslatedConfirm': '{count} 件をクリア',
|
|
882
|
+
'toast.pretranslatedCleared': '事前翻訳訳文を {count} 件クリアしました',
|
|
883
|
+
'toast.nothingToClear': 'クリアできる未確認の事前翻訳はありません',
|
|
797
884
|
'rail.confirmAll': 'まとめて確認',
|
|
798
885
|
'rail.confirmAllHint': '「要確認」の文をまとめて確認し、翻訳メモリに書き込みます',
|
|
799
886
|
'rail.confirmAllMessage': '要確認の {count} 文をまとめて確認し、翻訳メモリに書き込みます。1 文ずつ見直すことはありません。続けますか?',
|
|
@@ -935,6 +1022,7 @@
|
|
|
935
1022
|
'modal.export.targetTxt': 'プレーンテキスト',
|
|
936
1023
|
'modal.export.targetMd': 'Markdown',
|
|
937
1024
|
'modal.export.docx': 'Word DOCX',
|
|
1025
|
+
'modal.export.bilingualDocx': 'バイリンガル校閲 DOCX',
|
|
938
1026
|
'modal.export.docxGroup': '元の書式を保持',
|
|
939
1027
|
'modal.export.epub': 'EPUB 電子書',
|
|
940
1028
|
'modal.export.epubGroup': '元のレイアウトを保持',
|
|
@@ -944,7 +1032,18 @@
|
|
|
944
1032
|
'modal.export.srt': 'SRT 字幕',
|
|
945
1033
|
'modal.export.vtt': 'WebVTT 字幕',
|
|
946
1034
|
'modal.export.po': 'PO ローカライズ',
|
|
1035
|
+
'modal.export.appleStrings': '.strings 文字列',
|
|
1036
|
+
'modal.export.appleStringsdict': '.stringsdict 複数形',
|
|
1037
|
+
'modal.export.android': 'Android strings.xml',
|
|
1038
|
+
'modal.export.resx': '.resx リソース',
|
|
1039
|
+
'modal.export.arb': 'ARB アプリリソース',
|
|
1040
|
+
'modal.export.yaml': 'YAML ローカライズ',
|
|
1041
|
+
'modal.export.properties': '.properties',
|
|
947
1042
|
'modal.export.xliff': 'XLIFF 1.2',
|
|
1043
|
+
'modal.export.xliffReview': 'XLIFF 校閲パッケージ',
|
|
1044
|
+
'modal.export.reviewImport': '校閲パッケージを反映',
|
|
1045
|
+
'modal.export.reviewImportHint': '外部から返却された XLIFF を選択。id または原文が一致するセグメントだけ更新します。',
|
|
1046
|
+
'toast.reviewApplied': '校閲を反映: {applied} セグメント、未一致 {unmatched}',
|
|
948
1047
|
'modal.export.xliff2': 'XLIFF 2.0',
|
|
949
1048
|
'modal.export.sdlxliff': 'SDL XLIFF(基本)',
|
|
950
1049
|
'modal.export.webGroup': 'Web と構造化テキスト',
|
|
@@ -967,8 +1066,17 @@
|
|
|
967
1066
|
'modal.settings.pre.collapseBlankLines': '連続する空行をまとめる',
|
|
968
1067
|
'modal.settings.tm': '翻訳メモリ',
|
|
969
1068
|
'modal.settings.fuzzy': 'あいまい一致のしきい値',
|
|
1069
|
+
'modal.settings.fuzzyHint':
|
|
1070
|
+
'70% を下回る一致は機能語だけが重なることが多く、訳し直すより遅くなります。主流の CAT ツールも 70% を既定にしています。',
|
|
1071
|
+
'modal.settings.resetDefault': '既定に戻す',
|
|
970
1072
|
'modal.settings.limit': '返す一致件数',
|
|
971
1073
|
'modal.settings.mt': '機械翻訳',
|
|
1074
|
+
'modal.settings.review': 'AI レビューモデル',
|
|
1075
|
+
'modal.settings.reviewInherit': '翻訳モデルに従う(デフォルト)',
|
|
1076
|
+
'modal.settings.reviewHint': 'チェックを外すと AI レビューが独立したルートを使います。事前翻訳は上の MT ルートのままです。',
|
|
1077
|
+
'modal.settings.reviewProvider': 'レビュー用プロバイダーのルート',
|
|
1078
|
+
'modal.settings.reviewInheritedHint': '現在、レビューは事前翻訳と同じプロバイダーとモデルを共有しています。',
|
|
1079
|
+
'modal.settings.reviewCustomHint': 'AI レビューは独立したルートを使います。事前翻訳には影響しません。',
|
|
972
1080
|
'modal.settings.provider': 'MT プロバイダーのルート',
|
|
973
1081
|
'modal.settings.routeHint': 'CAIT はルート名とモデル名だけを保存します。API キーは DSH の認証情報サービスが解決し、CAIT は触れません。',
|
|
974
1082
|
'modal.settings.routeMissing': '利用できないルート',
|
|
@@ -1029,6 +1137,11 @@
|
|
|
1029
1137
|
'library.import': 'インポート',
|
|
1030
1138
|
'library.export': 'エクスポート',
|
|
1031
1139
|
'library.clear': 'クリア',
|
|
1140
|
+
'tm.maintain.dedupe': '重複排除',
|
|
1141
|
+
'tm.maintain.prune': '空訳を整理',
|
|
1142
|
+
'tm.maintain.dedupeHint': '{count} 件の重複を削除し、最新のみ残します。',
|
|
1143
|
+
'tm.maintain.pruneHint': '空の訳文を持つ {count} 件を削除します。',
|
|
1144
|
+
'tm.maintain.done': 'TM メンテナンス完了: {count} 件',
|
|
1032
1145
|
'library.newLibrary': '新しいライブラリ',
|
|
1033
1146
|
'library.rename': '名前を変更',
|
|
1034
1147
|
'library.deleteLibrary': 'ライブラリを削除',
|
|
@@ -1072,6 +1185,11 @@
|
|
|
1072
1185
|
'align.readError': 'ファイルを読み込めませんでした。',
|
|
1073
1186
|
'align.sourceLang': '原文言語(任意)',
|
|
1074
1187
|
'align.targetLang': '訳文言語(任意)',
|
|
1188
|
+
'align.langHint': '任意;例: zh-CN、en',
|
|
1189
|
+
'align.tm': '保存先メモリ',
|
|
1190
|
+
'align.tmHint': '整列結果をこのメモリに保存します',
|
|
1191
|
+
'align.tmOption': 'メモリ: {name}',
|
|
1192
|
+
'align.noTm': 'メモリ未設定',
|
|
1075
1193
|
'align.stats': '高 {high} · 要確認 {medium} · 要注意 {low}',
|
|
1076
1194
|
'align.unpairedSource': '未対応の原文',
|
|
1077
1195
|
'align.unpairedTarget': '未対応の訳文',
|
|
@@ -1090,18 +1208,550 @@
|
|
|
1090
1208
|
'rail.propagateMessage': '同じ原文の他のセグメントに既存の訳文をコピーします。確定済みは変更しません。',
|
|
1091
1209
|
'toast.propagated': '{count} 件のセグメントを埋めました。',
|
|
1092
1210
|
'term.title': '用語候補',
|
|
1093
|
-
'term.hint': '
|
|
1211
|
+
'term.hint': '繰り返し用語と一度だけ現れる固有名詞を候補にします。固有名詞は確認してから登録してください。',
|
|
1094
1212
|
'term.extract': '文書から用語を抽出',
|
|
1095
|
-
'term.empty': '
|
|
1213
|
+
'term.empty': '候補が見つかりませんでした。',
|
|
1096
1214
|
'term.add': '用語集に追加',
|
|
1097
1215
|
'term.added': '{added} 件の用語を追加しました。',
|
|
1098
1216
|
'term.noDoc': '先に文書を開いてください。',
|
|
1099
1217
|
'term.inLibrary': '登録済み',
|
|
1218
|
+
'term.proper': '固有名詞',
|
|
1100
1219
|
}
|
|
1101
1220
|
|
|
1221
|
+
// 1.1.4: brief, risk-aware QA, unconfirm and concordance. Kept in one place
|
|
1222
|
+
// so the three dictionaries cannot drift apart.
|
|
1223
|
+
Object.assign(ZH, {
|
|
1224
|
+
'panel.qa': '检查',
|
|
1225
|
+
'panel.concordance': '检索',
|
|
1226
|
+
'panel.concordancePlaceholder': '在翻译记忆中检索…',
|
|
1227
|
+
'panel.concordanceHint': '在已挂载的记忆库中检索源文或译文;点击结果写入当前句段的译文。',
|
|
1228
|
+
'panel.noConcordance': '没有检索结果。',
|
|
1229
|
+
'panel.searchConcordance': '检索',
|
|
1230
|
+
'panel.brief': '文档 brief',
|
|
1231
|
+
'panel.briefHint': '给译者和 agent 的领域、读者、语气与术语约束。',
|
|
1232
|
+
'panel.termForbidden': '禁用',
|
|
1233
|
+
'panel.termPreferred': '必用',
|
|
1234
|
+
'brief.title': '文档 brief',
|
|
1235
|
+
'brief.hint': '这些信息会注入预翻译和 agent 上下文;留空表示不限制。',
|
|
1236
|
+
'brief.domain': '领域',
|
|
1237
|
+
'brief.audience': '读者',
|
|
1238
|
+
'brief.tone': '语气',
|
|
1239
|
+
'brief.notes': '补充说明',
|
|
1240
|
+
'brief.doNotTranslate': '不要翻译',
|
|
1241
|
+
'brief.styleSample': '风格示例',
|
|
1242
|
+
'brief.save': '保存 brief',
|
|
1243
|
+
'brief.saved': 'brief 已保存',
|
|
1244
|
+
'brief.empty': '尚未填写 brief',
|
|
1245
|
+
'brief.placeholder.domain': '例如:法律、医疗、游戏',
|
|
1246
|
+
'brief.placeholder.audience': '例如:终端用户、开发者',
|
|
1247
|
+
'brief.placeholder.tone': '例如:正式、简洁、口语',
|
|
1248
|
+
'brief.placeholder.notes': '术语偏好、格式要求、背景…',
|
|
1249
|
+
'brief.placeholder.doNotTranslate': '每行一个词或短语',
|
|
1250
|
+
'brief.placeholder.styleSample': '粘贴一段期望风格的译文…',
|
|
1251
|
+
'editor.unconfirm': '撤销确认',
|
|
1252
|
+
'editor.unconfirmHint': '回到待审状态,不改动翻译记忆',
|
|
1253
|
+
'editor.undo': '撤销编辑',
|
|
1254
|
+
'editor.redo': '重做编辑',
|
|
1255
|
+
'editor.lock': '锁定',
|
|
1256
|
+
'editor.unlock': '解锁',
|
|
1257
|
+
'editor.locked': '已锁定',
|
|
1258
|
+
'toast.locked': '已锁定句段',
|
|
1259
|
+
'toast.unlocked': '已解锁句段',
|
|
1260
|
+
'editor.brief': 'Brief',
|
|
1261
|
+
'editor.risk': '风险',
|
|
1262
|
+
'qa.title': '检查',
|
|
1263
|
+
'qa.refresh': '重新检查',
|
|
1264
|
+
'qa.empty': '没有发现问题。',
|
|
1265
|
+
'qa.loading': '正在检查…',
|
|
1266
|
+
'qa.review': 'AI 审校',
|
|
1267
|
+
'qa.reviewing': '审校中…',
|
|
1268
|
+
'qa.reviewTitle': 'AI 审校建议',
|
|
1269
|
+
'qa.reviewEmpty': 'AI 没有发现需要改的句子。',
|
|
1270
|
+
'qa.reviewApply': '填入建议',
|
|
1271
|
+
'qa.high': '高',
|
|
1272
|
+
'qa.medium': '中',
|
|
1273
|
+
'qa.low': '低',
|
|
1274
|
+
'qa.jump': '跳到句段',
|
|
1275
|
+
'qa.risk': '风险',
|
|
1276
|
+
'qa.code.TERM_FORBIDDEN': '禁用术语',
|
|
1277
|
+
'qa.code.LENGTH_DRIFT': '长度异常',
|
|
1278
|
+
'qa.code.SUBTITLE_OVERLAP': '字幕重叠',
|
|
1279
|
+
'qa.fixCopy': '复制源文',
|
|
1280
|
+
'qa.fixClear': '清空译文',
|
|
1281
|
+
'qa.fixTerm': '插入术语',
|
|
1282
|
+
'toast.qaFixed': '已修复该句,可继续检查',
|
|
1283
|
+
'toast.unconfirmed': '已撤销确认,可继续编辑',
|
|
1284
|
+
'toast.briefSaved': 'brief 已保存',
|
|
1285
|
+
'toast.termForbidden': '这是禁用术语,不能插入',
|
|
1286
|
+
'editor.resources': '资源',
|
|
1287
|
+
'resources.title': '文档资源',
|
|
1288
|
+
'resources.hint': '限定这篇文档读写哪些 TM 和术语库;不勾选“继承全局”时只使用下面选中的库。',
|
|
1289
|
+
'resources.inheritTm': '继承全局 TM 挂载',
|
|
1290
|
+
'resources.inheritGlossary': '继承全局术语库挂载',
|
|
1291
|
+
'resources.tm': '翻译记忆',
|
|
1292
|
+
'resources.glossary': '术语库',
|
|
1293
|
+
'resources.defaultWrite': '默认写入',
|
|
1294
|
+
'resources.followDefault': '跟随全局默认',
|
|
1295
|
+
'resources.firstBound': '首个绑定库',
|
|
1296
|
+
'resources.none': '未绑定(不读不写)',
|
|
1297
|
+
'resources.empty': '没有可用的库。',
|
|
1298
|
+
'resources.save': '保存资源',
|
|
1299
|
+
'toast.resourcesSaved': '文档资源已保存',
|
|
1300
|
+
'editor.analysis': '分析',
|
|
1301
|
+
'analysis.title': '文档分析',
|
|
1302
|
+
'analysis.hint': '按当前文档绑定的 TM 统计;匹配率用于报价参考。',
|
|
1303
|
+
'analysis.words': '字数',
|
|
1304
|
+
'analysis.characters': '字符',
|
|
1305
|
+
'analysis.segments': '句段',
|
|
1306
|
+
'analysis.duplicates': '重复句段',
|
|
1307
|
+
'analysis.translated': '已有译文',
|
|
1308
|
+
'analysis.confirmed': '已确认',
|
|
1309
|
+
'analysis.ice': 'ICE / 上下文',
|
|
1310
|
+
'analysis.exact': '完全匹配',
|
|
1311
|
+
'analysis.fuzzy85': '85–99%',
|
|
1312
|
+
'analysis.fuzzy70': '70–84%',
|
|
1313
|
+
'analysis.new': '新句段',
|
|
1314
|
+
'analysis.matchRate': '匹配率',
|
|
1315
|
+
'analysis.leverage': '加权 leverage',
|
|
1316
|
+
'analysis.exportCsv': '导出 CSV',
|
|
1317
|
+
'analysis.exportJson': '导出 JSON',
|
|
1318
|
+
'analysis.close': '关闭',
|
|
1319
|
+
'replace.open': '查找替换',
|
|
1320
|
+
'replace.title': '查找替换',
|
|
1321
|
+
'replace.hint': '在原文或译文中查找并替换;应用前先预览影响范围。',
|
|
1322
|
+
'replace.query': '查找',
|
|
1323
|
+
'replace.queryPlaceholder': '要查找的文本',
|
|
1324
|
+
'replace.replacement': '替换为',
|
|
1325
|
+
'replace.replacementPlaceholder': '留空表示删除',
|
|
1326
|
+
'replace.scope': '范围',
|
|
1327
|
+
'replace.scope.target': '仅译文',
|
|
1328
|
+
'replace.scope.source': '仅原文',
|
|
1329
|
+
'replace.scope.both': '原文和译文',
|
|
1330
|
+
'replace.matchCase': '区分大小写',
|
|
1331
|
+
'replace.regex': '正则表达式',
|
|
1332
|
+
'replace.preview': '预览',
|
|
1333
|
+
'replace.apply': '应用替换',
|
|
1334
|
+
'replace.undo': '撤销上次替换',
|
|
1335
|
+
'replace.results': '命中 {count} 处,涉及 {segments} 个句段',
|
|
1336
|
+
'replace.truncated': '结果较多,仅显示前 200 条。',
|
|
1337
|
+
'replace.noResults': '没有命中。',
|
|
1338
|
+
'replace.field.source': '原文',
|
|
1339
|
+
'replace.field.target': '译文',
|
|
1340
|
+
'toast.replaced': '已替换 {count} 处',
|
|
1341
|
+
'toast.replaceUndone': '已撤销替换',
|
|
1342
|
+
'palette.title': '命令面板',
|
|
1343
|
+
'palette.placeholder': '输入命令…',
|
|
1344
|
+
'palette.empty': '没有匹配的命令。',
|
|
1345
|
+
'palette.footer': '↑↓ 选择 · Enter 执行 · Esc 关闭 · Ctrl+K 打开',
|
|
1346
|
+
'cmd.new': '新建文档',
|
|
1347
|
+
'cmd.newHint': '从文本或文件开始',
|
|
1348
|
+
'cmd.import': '导入文件',
|
|
1349
|
+
'cmd.export': '导出',
|
|
1350
|
+
'cmd.pretranslate': '预翻译',
|
|
1351
|
+
'cmd.replace': '查找替换',
|
|
1352
|
+
'cmd.brief': '文档 brief',
|
|
1353
|
+
'cmd.resources': '文档资源',
|
|
1354
|
+
'cmd.analysis': '文档分析',
|
|
1355
|
+
'cmd.clearPretranslated': '清理预翻译',
|
|
1356
|
+
'cmd.notes': '句段备注',
|
|
1357
|
+
'cmd.review': 'AI 审校当前文档',
|
|
1358
|
+
'editor.notes': '备注',
|
|
1359
|
+
'notes.title': '句段备注',
|
|
1360
|
+
'notes.hint': '备注只保存在本文档,不会写入 TM。',
|
|
1361
|
+
'notes.empty': '还没有备注。',
|
|
1362
|
+
'notes.placeholder': '写下审校说明、术语疑问或给 agent 的提示…',
|
|
1363
|
+
'notes.add': '添加备注',
|
|
1364
|
+
'notes.save': '保存',
|
|
1365
|
+
'notes.cancel': '取消',
|
|
1366
|
+
'notes.edit': '编辑',
|
|
1367
|
+
'notes.delete': '删除',
|
|
1368
|
+
'notes.user': '你',
|
|
1369
|
+
'toast.noteSaved': '备注已保存',
|
|
1370
|
+
'toast.noteDeleted': '备注已删除',
|
|
1371
|
+
'cmd.documents': '文档工作区',
|
|
1372
|
+
'cmd.libraries': '库管理',
|
|
1373
|
+
'cmd.align': '对齐',
|
|
1374
|
+
'cmd.settings': '设置',
|
|
1375
|
+
})
|
|
1376
|
+
Object.assign(EN, {
|
|
1377
|
+
'panel.qa': 'Checks',
|
|
1378
|
+
'panel.concordance': 'Concordance',
|
|
1379
|
+
'panel.concordancePlaceholder': 'Search translation memory…',
|
|
1380
|
+
'panel.concordanceHint': 'Search source or target across mounted memories; click a result to use its target in the current segment.',
|
|
1381
|
+
'panel.noConcordance': 'No matches.',
|
|
1382
|
+
'panel.searchConcordance': 'Search',
|
|
1383
|
+
'panel.brief': 'Document brief',
|
|
1384
|
+
'panel.briefHint': 'Domain, audience, tone and terminology guidance for translators and agents.',
|
|
1385
|
+
'panel.termForbidden': 'Forbidden',
|
|
1386
|
+
'panel.termPreferred': 'Required',
|
|
1387
|
+
'brief.title': 'Document brief',
|
|
1388
|
+
'brief.hint': 'Injected into pre-translation and agent context. Empty fields mean no constraint.',
|
|
1389
|
+
'brief.domain': 'Domain',
|
|
1390
|
+
'brief.audience': 'Audience',
|
|
1391
|
+
'brief.tone': 'Tone',
|
|
1392
|
+
'brief.notes': 'Notes',
|
|
1393
|
+
'brief.doNotTranslate': 'Do not translate',
|
|
1394
|
+
'brief.styleSample': 'Style sample',
|
|
1395
|
+
'brief.save': 'Save brief',
|
|
1396
|
+
'brief.saved': 'Brief saved',
|
|
1397
|
+
'brief.empty': 'No brief yet',
|
|
1398
|
+
'brief.placeholder.domain': 'e.g. legal, medical, games',
|
|
1399
|
+
'brief.placeholder.audience': 'e.g. end users, developers',
|
|
1400
|
+
'brief.placeholder.tone': 'e.g. formal, concise, conversational',
|
|
1401
|
+
'brief.placeholder.notes': 'Terminology preferences, formatting requirements, background…',
|
|
1402
|
+
'brief.placeholder.doNotTranslate': 'One term or phrase per line',
|
|
1403
|
+
'brief.placeholder.styleSample': 'Paste a sample of the desired style…',
|
|
1404
|
+
'editor.unconfirm': 'Unconfirm',
|
|
1405
|
+
'editor.unconfirmHint': 'Return to review without changing translation memory',
|
|
1406
|
+
'editor.undo': 'Undo edit',
|
|
1407
|
+
'editor.redo': 'Redo edit',
|
|
1408
|
+
'editor.lock': 'Lock',
|
|
1409
|
+
'editor.unlock': 'Unlock',
|
|
1410
|
+
'editor.locked': 'Locked',
|
|
1411
|
+
'toast.locked': 'Segment locked',
|
|
1412
|
+
'toast.unlocked': 'Segment unlocked',
|
|
1413
|
+
'editor.brief': 'Brief',
|
|
1414
|
+
'editor.risk': 'Risk',
|
|
1415
|
+
'qa.title': 'Checks',
|
|
1416
|
+
'qa.refresh': 'Re-run checks',
|
|
1417
|
+
'qa.empty': 'No issues found.',
|
|
1418
|
+
'qa.loading': 'Running checks…',
|
|
1419
|
+
'qa.review': 'AI review',
|
|
1420
|
+
'qa.reviewing': 'Reviewing…',
|
|
1421
|
+
'qa.reviewTitle': 'AI review suggestions',
|
|
1422
|
+
'qa.reviewEmpty': 'The model found no sentence worth changing.',
|
|
1423
|
+
'qa.reviewApply': 'Use suggestion',
|
|
1424
|
+
'qa.high': 'High',
|
|
1425
|
+
'qa.medium': 'Medium',
|
|
1426
|
+
'qa.low': 'Low',
|
|
1427
|
+
'qa.jump': 'Jump to segment',
|
|
1428
|
+
'qa.risk': 'Risk',
|
|
1429
|
+
'qa.code.TERM_FORBIDDEN': 'Forbidden term',
|
|
1430
|
+
'qa.code.LENGTH_DRIFT': 'Length drift',
|
|
1431
|
+
'qa.code.SUBTITLE_OVERLAP': 'Subtitle overlap',
|
|
1432
|
+
'qa.fixCopy': 'Copy source',
|
|
1433
|
+
'qa.fixClear': 'Clear target',
|
|
1434
|
+
'qa.fixTerm': 'Insert term',
|
|
1435
|
+
'toast.qaFixed': 'Segment fixed; checks refreshed',
|
|
1436
|
+
'toast.unconfirmed': 'Confirmation revoked; editing is enabled again',
|
|
1437
|
+
'toast.briefSaved': 'Brief saved',
|
|
1438
|
+
'toast.termForbidden': 'This is a forbidden term and cannot be inserted',
|
|
1439
|
+
'editor.resources': 'Resources',
|
|
1440
|
+
'resources.title': 'Document resources',
|
|
1441
|
+
'resources.hint': 'Limit which translation memories and glossaries this document reads and writes. Without inheritance, only the selected libraries are used.',
|
|
1442
|
+
'resources.inheritTm': 'Inherit global TM mounts',
|
|
1443
|
+
'resources.inheritGlossary': 'Inherit global glossary mounts',
|
|
1444
|
+
'resources.tm': 'Translation memories',
|
|
1445
|
+
'resources.glossary': 'Glossaries',
|
|
1446
|
+
'resources.defaultWrite': 'Default write',
|
|
1447
|
+
'resources.followDefault': 'Follow global default',
|
|
1448
|
+
'resources.firstBound': 'First bound library',
|
|
1449
|
+
'resources.none': 'None (no read, no write)',
|
|
1450
|
+
'resources.empty': 'No libraries available.',
|
|
1451
|
+
'resources.save': 'Save resources',
|
|
1452
|
+
'toast.resourcesSaved': 'Document resources saved',
|
|
1453
|
+
'editor.analysis': 'Analysis',
|
|
1454
|
+
'analysis.title': 'Document analysis',
|
|
1455
|
+
'analysis.hint': 'Counted against the memory bound to this document; match rate is a quoting aid.',
|
|
1456
|
+
'analysis.words': 'Words',
|
|
1457
|
+
'analysis.characters': 'Characters',
|
|
1458
|
+
'analysis.segments': 'Segments',
|
|
1459
|
+
'analysis.duplicates': 'Duplicate segments',
|
|
1460
|
+
'analysis.translated': 'With target',
|
|
1461
|
+
'analysis.confirmed': 'Confirmed',
|
|
1462
|
+
'analysis.ice': 'ICE / context',
|
|
1463
|
+
'analysis.exact': 'Exact',
|
|
1464
|
+
'analysis.fuzzy85': '85–99%',
|
|
1465
|
+
'analysis.fuzzy70': '70–84%',
|
|
1466
|
+
'analysis.new': 'New',
|
|
1467
|
+
'analysis.matchRate': 'Match rate',
|
|
1468
|
+
'analysis.leverage': 'Weighted leverage',
|
|
1469
|
+
'analysis.exportCsv': 'Export CSV',
|
|
1470
|
+
'analysis.exportJson': 'Export JSON',
|
|
1471
|
+
'analysis.close': 'Close',
|
|
1472
|
+
'replace.open': 'Find & replace',
|
|
1473
|
+
'replace.title': 'Find & replace',
|
|
1474
|
+
'replace.hint': 'Find and replace in source or target. Preview the impact before applying.',
|
|
1475
|
+
'replace.query': 'Find',
|
|
1476
|
+
'replace.queryPlaceholder': 'Text to find',
|
|
1477
|
+
'replace.replacement': 'Replace with',
|
|
1478
|
+
'replace.replacementPlaceholder': 'Leave empty to delete',
|
|
1479
|
+
'replace.scope': 'Scope',
|
|
1480
|
+
'replace.scope.target': 'Target only',
|
|
1481
|
+
'replace.scope.source': 'Source only',
|
|
1482
|
+
'replace.scope.both': 'Source and target',
|
|
1483
|
+
'replace.matchCase': 'Match case',
|
|
1484
|
+
'replace.regex': 'Regular expression',
|
|
1485
|
+
'replace.preview': 'Preview',
|
|
1486
|
+
'replace.apply': 'Apply replacement',
|
|
1487
|
+
'replace.undo': 'Undo last replacement',
|
|
1488
|
+
'replace.results': '{count} matches across {segments} segments',
|
|
1489
|
+
'replace.truncated': 'Too many matches; showing the first 200.',
|
|
1490
|
+
'replace.noResults': 'No matches.',
|
|
1491
|
+
'replace.field.source': 'Source',
|
|
1492
|
+
'replace.field.target': 'Target',
|
|
1493
|
+
'toast.replaced': 'Replaced {count} occurrences',
|
|
1494
|
+
'toast.replaceUndone': 'Replacement undone',
|
|
1495
|
+
'palette.title': 'Command palette',
|
|
1496
|
+
'palette.placeholder': 'Type a command…',
|
|
1497
|
+
'palette.empty': 'No matching commands.',
|
|
1498
|
+
'palette.footer': '↑↓ select · Enter run · Esc close · Ctrl+K open',
|
|
1499
|
+
'cmd.new': 'New document',
|
|
1500
|
+
'cmd.newHint': 'Start from text or a file',
|
|
1501
|
+
'cmd.import': 'Import file',
|
|
1502
|
+
'cmd.export': 'Export',
|
|
1503
|
+
'cmd.pretranslate': 'Pre-translate',
|
|
1504
|
+
'cmd.replace': 'Find & replace',
|
|
1505
|
+
'cmd.brief': 'Document brief',
|
|
1506
|
+
'cmd.resources': 'Document resources',
|
|
1507
|
+
'cmd.analysis': 'Document analysis',
|
|
1508
|
+
'cmd.clearPretranslated': 'Clear pre-translated targets',
|
|
1509
|
+
'cmd.notes': 'Segment notes',
|
|
1510
|
+
'cmd.review': 'AI review this document',
|
|
1511
|
+
'editor.notes': 'Notes',
|
|
1512
|
+
'notes.title': 'Segment notes',
|
|
1513
|
+
'notes.hint': 'Notes stay in this document and are never written to TM.',
|
|
1514
|
+
'notes.empty': 'No notes yet.',
|
|
1515
|
+
'notes.placeholder': 'Review comments, terminology questions, or hints for the agent…',
|
|
1516
|
+
'notes.add': 'Add note',
|
|
1517
|
+
'notes.save': 'Save',
|
|
1518
|
+
'notes.cancel': 'Cancel',
|
|
1519
|
+
'notes.edit': 'Edit',
|
|
1520
|
+
'notes.delete': 'Delete',
|
|
1521
|
+
'notes.user': 'You',
|
|
1522
|
+
'toast.noteSaved': 'Note saved',
|
|
1523
|
+
'toast.noteDeleted': 'Note deleted',
|
|
1524
|
+
'cmd.documents': 'Document workspace',
|
|
1525
|
+
'cmd.libraries': 'Library manager',
|
|
1526
|
+
'cmd.align': 'Alignment',
|
|
1527
|
+
'cmd.settings': 'Settings',
|
|
1528
|
+
})
|
|
1529
|
+
Object.assign(JA, {
|
|
1530
|
+
'panel.qa': 'チェック',
|
|
1531
|
+
'panel.concordance': '検索',
|
|
1532
|
+
'panel.concordancePlaceholder': '翻訳メモリを検索…',
|
|
1533
|
+
'panel.concordanceHint': 'マウント中の TM を原文・訳文で検索し、結果をクリックすると現在のセグメントの訳文に書き込みます。',
|
|
1534
|
+
'panel.noConcordance': '一致なし。',
|
|
1535
|
+
'panel.searchConcordance': '検索',
|
|
1536
|
+
'panel.brief': '文書ブリーフ',
|
|
1537
|
+
'panel.briefHint': '译者と agent のための分野・読者・トーン・用語指示。',
|
|
1538
|
+
'panel.termForbidden': '禁止',
|
|
1539
|
+
'panel.termPreferred': '必須',
|
|
1540
|
+
'brief.title': '文書ブリーフ',
|
|
1541
|
+
'brief.hint': 'この情報は事前翻訳と agent のコンテキストに渡されます。空欄は制約なし。',
|
|
1542
|
+
'brief.domain': '分野',
|
|
1543
|
+
'brief.audience': '読者',
|
|
1544
|
+
'brief.tone': 'トーン',
|
|
1545
|
+
'brief.notes': '補足',
|
|
1546
|
+
'brief.doNotTranslate': '翻訳しない語句',
|
|
1547
|
+
'brief.styleSample': 'スタイル例',
|
|
1548
|
+
'brief.save': 'ブリーフを保存',
|
|
1549
|
+
'brief.saved': 'ブリーフを保存しました',
|
|
1550
|
+
'brief.empty': 'ブリーフは未入力です',
|
|
1551
|
+
'brief.placeholder.domain': '例:法律、医療、ゲーム',
|
|
1552
|
+
'brief.placeholder.audience': '例:エンドユーザー、開発者',
|
|
1553
|
+
'brief.placeholder.tone': '例:正式、簡潔、会話的',
|
|
1554
|
+
'brief.placeholder.notes': '用語の好み、書式、背景…',
|
|
1555
|
+
'brief.placeholder.doNotTranslate': '1 行に 1 語句',
|
|
1556
|
+
'brief.placeholder.styleSample': '希望するスタイルの訳文を貼り付け…',
|
|
1557
|
+
'editor.unconfirm': '確認を取り消す',
|
|
1558
|
+
'editor.unconfirmHint': '確認だけを解除し、TM は変更しません',
|
|
1559
|
+
'editor.undo': '編集を元に戻す',
|
|
1560
|
+
'editor.redo': '編集をやり直す',
|
|
1561
|
+
'editor.lock': 'ロック',
|
|
1562
|
+
'editor.unlock': 'ロック解除',
|
|
1563
|
+
'editor.locked': 'ロック中',
|
|
1564
|
+
'toast.locked': 'セグメントをロックしました',
|
|
1565
|
+
'toast.unlocked': 'セグメントのロックを解除しました',
|
|
1566
|
+
'editor.brief': 'ブリーフ',
|
|
1567
|
+
'editor.risk': 'リスク',
|
|
1568
|
+
'qa.title': 'チェック',
|
|
1569
|
+
'qa.refresh': '再チェック',
|
|
1570
|
+
'qa.empty': '問題はありません。',
|
|
1571
|
+
'qa.loading': 'チェック中…',
|
|
1572
|
+
'qa.review': 'AI 校閲',
|
|
1573
|
+
'qa.reviewing': '校閲中…',
|
|
1574
|
+
'qa.reviewTitle': 'AI 校閲の提案',
|
|
1575
|
+
'qa.reviewEmpty': 'モデルが修正すべき文を見つけませんでした。',
|
|
1576
|
+
'qa.reviewApply': '提案を反映',
|
|
1577
|
+
'qa.high': '高',
|
|
1578
|
+
'qa.medium': '中',
|
|
1579
|
+
'qa.low': '低',
|
|
1580
|
+
'qa.jump': 'セグメントへ',
|
|
1581
|
+
'qa.risk': 'リスク',
|
|
1582
|
+
'qa.code.TERM_FORBIDDEN': '禁止用語',
|
|
1583
|
+
'qa.code.LENGTH_DRIFT': '長さの不一致',
|
|
1584
|
+
'qa.code.SUBTITLE_OVERLAP': '字幕の重なり',
|
|
1585
|
+
'qa.fixCopy': '原文をコピー',
|
|
1586
|
+
'qa.fixClear': '訳文を空にする',
|
|
1587
|
+
'qa.fixTerm': '用語を挿入',
|
|
1588
|
+
'toast.qaFixed': '修正しました。チェックを更新しました',
|
|
1589
|
+
'toast.unconfirmed': '確認を取り消しました。編集を続けられます',
|
|
1590
|
+
'toast.briefSaved': 'ブリーフを保存しました',
|
|
1591
|
+
'toast.termForbidden': '禁止用語のため挿入できません',
|
|
1592
|
+
'editor.resources': 'リソース',
|
|
1593
|
+
'resources.title': '文書リソース',
|
|
1594
|
+
'resources.hint': 'この文書が読み書きする TM と用語集を限定します。「グローバルを継承」を外すと、下で選んだライブラリだけを使います。',
|
|
1595
|
+
'resources.inheritTm': 'グローバル TM マウントを継承',
|
|
1596
|
+
'resources.inheritGlossary': 'グローバル用語集マウントを継承',
|
|
1597
|
+
'resources.tm': '翻訳メモリ',
|
|
1598
|
+
'resources.glossary': '用語集',
|
|
1599
|
+
'resources.defaultWrite': '既定の書き込み先',
|
|
1600
|
+
'resources.followDefault': 'グローバル既定に従う',
|
|
1601
|
+
'resources.firstBound': '最初のバインド先',
|
|
1602
|
+
'resources.none': '未バインド(読み書きなし)',
|
|
1603
|
+
'resources.empty': '利用できるライブラリがありません。',
|
|
1604
|
+
'resources.save': 'リソースを保存',
|
|
1605
|
+
'toast.resourcesSaved': '文書リソースを保存しました',
|
|
1606
|
+
'editor.analysis': '分析',
|
|
1607
|
+
'analysis.title': '文書分析',
|
|
1608
|
+
'analysis.hint': 'この文書に紐づく TM で集計します。マッチ率は見積もりの参考値です。',
|
|
1609
|
+
'analysis.words': '語数',
|
|
1610
|
+
'analysis.characters': '文字数',
|
|
1611
|
+
'analysis.segments': 'セグメント',
|
|
1612
|
+
'analysis.duplicates': '重複セグメント',
|
|
1613
|
+
'analysis.translated': '訳文あり',
|
|
1614
|
+
'analysis.confirmed': '確認済み',
|
|
1615
|
+
'analysis.ice': 'ICE / コンテキスト',
|
|
1616
|
+
'analysis.exact': '完全一致',
|
|
1617
|
+
'analysis.fuzzy85': '85–99%',
|
|
1618
|
+
'analysis.fuzzy70': '70–84%',
|
|
1619
|
+
'analysis.new': '新規',
|
|
1620
|
+
'analysis.matchRate': 'マッチ率',
|
|
1621
|
+
'analysis.leverage': '加重レバレッジ',
|
|
1622
|
+
'analysis.exportCsv': 'CSV を書き出す',
|
|
1623
|
+
'analysis.exportJson': 'JSON を書き出す',
|
|
1624
|
+
'analysis.close': '閉じる',
|
|
1625
|
+
'replace.open': '検索と置換',
|
|
1626
|
+
'replace.title': '検索と置換',
|
|
1627
|
+
'replace.hint': '原文または訳文を検索して置換します。適用前に影響範囲をプレビューしてください。',
|
|
1628
|
+
'replace.query': '検索',
|
|
1629
|
+
'replace.queryPlaceholder': '検索するテキスト',
|
|
1630
|
+
'replace.replacement': '置換後',
|
|
1631
|
+
'replace.replacementPlaceholder': '空欄なら削除',
|
|
1632
|
+
'replace.scope': '範囲',
|
|
1633
|
+
'replace.scope.target': '訳文のみ',
|
|
1634
|
+
'replace.scope.source': '原文のみ',
|
|
1635
|
+
'replace.scope.both': '原文と訳文',
|
|
1636
|
+
'replace.matchCase': '大文字と小文字を区別',
|
|
1637
|
+
'replace.regex': '正規表現',
|
|
1638
|
+
'replace.preview': 'プレビュー',
|
|
1639
|
+
'replace.apply': '置換を適用',
|
|
1640
|
+
'replace.undo': '直前の置換を元に戻す',
|
|
1641
|
+
'replace.results': '{count} 件、{segments} セグメント',
|
|
1642
|
+
'replace.truncated': '件数が多いため先頭 200 件のみ表示します。',
|
|
1643
|
+
'replace.noResults': '一致なし。',
|
|
1644
|
+
'replace.field.source': '原文',
|
|
1645
|
+
'replace.field.target': '訳文',
|
|
1646
|
+
'toast.replaced': '{count} 件置換しました',
|
|
1647
|
+
'toast.replaceUndone': '置換を元に戻しました',
|
|
1648
|
+
'palette.title': 'コマンドパレット',
|
|
1649
|
+
'palette.placeholder': 'コマンドを入力…',
|
|
1650
|
+
'palette.empty': '一致するコマンドがありません。',
|
|
1651
|
+
'palette.footer': '↑↓ 選択 · Enter 実行 · Esc 閉じる · Ctrl+K 開く',
|
|
1652
|
+
'cmd.new': '新規文書',
|
|
1653
|
+
'cmd.newHint': 'テキストまたはファイルから開始',
|
|
1654
|
+
'cmd.import': 'ファイルをインポート',
|
|
1655
|
+
'cmd.export': 'エクスポート',
|
|
1656
|
+
'cmd.pretranslate': '事前翻訳',
|
|
1657
|
+
'cmd.replace': '検索と置換',
|
|
1658
|
+
'cmd.brief': '文書ブリーフ',
|
|
1659
|
+
'cmd.resources': '文書リソース',
|
|
1660
|
+
'cmd.analysis': '文書分析',
|
|
1661
|
+
'cmd.clearPretranslated': '事前翻訳をクリア',
|
|
1662
|
+
'cmd.notes': 'セグメントメモ',
|
|
1663
|
+
'cmd.review': 'この文書を AI 校閲',
|
|
1664
|
+
'editor.notes': 'メモ',
|
|
1665
|
+
'notes.title': 'セグメントメモ',
|
|
1666
|
+
'notes.hint': 'メモはこの文書にのみ保存され、TM には書き込まれません。',
|
|
1667
|
+
'notes.empty': 'メモはまだありません。',
|
|
1668
|
+
'notes.placeholder': 'レビューコメント、用語の疑問、agent へのヒント…',
|
|
1669
|
+
'notes.add': 'メモを追加',
|
|
1670
|
+
'notes.save': '保存',
|
|
1671
|
+
'notes.cancel': 'キャンセル',
|
|
1672
|
+
'notes.edit': '編集',
|
|
1673
|
+
'notes.delete': '削除',
|
|
1674
|
+
'notes.user': 'あなた',
|
|
1675
|
+
'toast.noteSaved': 'メモを保存しました',
|
|
1676
|
+
'toast.noteDeleted': 'メモを削除しました',
|
|
1677
|
+
'cmd.documents': '文書ワークスペース',
|
|
1678
|
+
'cmd.libraries': 'ライブラリ管理',
|
|
1679
|
+
'cmd.align': 'アラインメント',
|
|
1680
|
+
'cmd.settings': '設定',
|
|
1681
|
+
})
|
|
1682
|
+
|
|
1102
1683
|
// UI languages offered by the in-app switch. 'auto' follows the DSH locale
|
|
1103
1684
|
// through the bound DSH translator; the other entries use the dictionaries
|
|
1104
1685
|
// above. Labels are native names, except 'auto', which is localized.
|
|
1686
|
+
Object.assign(ZH, {
|
|
1687
|
+
'editor.merge': '合并下一段',
|
|
1688
|
+
'editor.split': '拆分',
|
|
1689
|
+
'editor.mergeHint': '把当前句段和同一段落的下一句合并;合并后确认状态会重置。',
|
|
1690
|
+
'editor.splitHint': '按译文光标位置大致拆分当前句段;拆分后两侧都需要重新确认。',
|
|
1691
|
+
'toast.merged': '已合并句段',
|
|
1692
|
+
'toast.split': '已拆分句段',
|
|
1693
|
+
'modal.confirm.mergeTitle': '合并句段',
|
|
1694
|
+
'modal.confirm.merge': '合并会新建一个句段,并丢失两条原文各自的确认状态。确定继续?',
|
|
1695
|
+
'modal.confirm.splitTitle': '拆分句段',
|
|
1696
|
+
'modal.confirm.split': '拆分后两侧都会变成未确认状态,译文按比例切开。确定继续?',
|
|
1697
|
+
'editor.shift': '平移',
|
|
1698
|
+
'editor.shiftHint': '按秒平移当前文档所有字幕时间码;不能产生负时间码。',
|
|
1699
|
+
'editor.mergeCue': '合并下一条',
|
|
1700
|
+
'editor.splitCue': '按中点拆分',
|
|
1701
|
+
'toast.cuesMerged': '已合并字幕',
|
|
1702
|
+
'toast.cueSplit': '已拆分字幕',
|
|
1703
|
+
'toast.subtitlesShifted': '已平移字幕时间轴',
|
|
1704
|
+
'modal.confirm.shiftTitle': '平移字幕',
|
|
1705
|
+
'modal.confirm.shiftCue': '会平移当前文档所有字幕的时间码,且不修改译文。确定继续?',
|
|
1706
|
+
'modal.confirm.mergeCue': '合并当前字幕和下一条,时间范围取两者首尾;确定继续?',
|
|
1707
|
+
'modal.confirm.splitCue': '会在当前字幕时间范围的中点拆成两条,译文按比例切开;确定继续?',
|
|
1708
|
+
})
|
|
1709
|
+
Object.assign(EN, {
|
|
1710
|
+
'editor.merge': 'Merge next',
|
|
1711
|
+
'editor.split': 'Split',
|
|
1712
|
+
'editor.mergeHint': 'Merge this segment with the next one in the same paragraph; confirmation resets.',
|
|
1713
|
+
'editor.splitHint': 'Split at the target cursor position; both halves need confirmation again.',
|
|
1714
|
+
'toast.merged': 'Segment merged',
|
|
1715
|
+
'toast.split': 'Segment split',
|
|
1716
|
+
'modal.confirm.mergeTitle': 'Merge segments',
|
|
1717
|
+
'modal.confirm.merge': 'Merging creates a new segment and discards the confirmation state of both originals. Continue?',
|
|
1718
|
+
'modal.confirm.splitTitle': 'Split segment',
|
|
1719
|
+
'modal.confirm.split': 'Both halves become unconfirmed and the target is split proportionally. Continue?',
|
|
1720
|
+
'editor.shift': 'Shift',
|
|
1721
|
+
'editor.shiftHint': 'Shift every subtitle cue in this document by seconds; negative timecodes are rejected.',
|
|
1722
|
+
'editor.mergeCue': 'Merge next cue',
|
|
1723
|
+
'editor.splitCue': 'Split at midpoint',
|
|
1724
|
+
'toast.cuesMerged': 'Cues merged',
|
|
1725
|
+
'toast.cueSplit': 'Cue split',
|
|
1726
|
+
'toast.subtitlesShifted': 'Subtitle timeline shifted',
|
|
1727
|
+
'modal.confirm.shiftTitle': 'Shift subtitles',
|
|
1728
|
+
'modal.confirm.shiftCue': 'Every cue in this document moves by the same offset. Translations are unchanged. Continue?',
|
|
1729
|
+
'modal.confirm.mergeCue': 'Merge this cue with the next one, using the outer time range. Continue?',
|
|
1730
|
+
'modal.confirm.splitCue': 'Split this cue at its midpoint; the translation is split proportionally. Continue?',
|
|
1731
|
+
})
|
|
1732
|
+
Object.assign(JA, {
|
|
1733
|
+
'editor.merge': '次を結合',
|
|
1734
|
+
'editor.split': '分割',
|
|
1735
|
+
'editor.mergeHint': '同じ段落の次のセグメントと結合します。確認状態はリセットされます。',
|
|
1736
|
+
'editor.splitHint': '訳文のカーソル位置を目安に分割します。両側とも再確認が必要です。',
|
|
1737
|
+
'toast.merged': 'セグメントを結合しました',
|
|
1738
|
+
'toast.split': 'セグメントを分割しました',
|
|
1739
|
+
'modal.confirm.mergeTitle': 'セグメントを結合',
|
|
1740
|
+
'modal.confirm.merge': '結合すると新しいセグメントになり、元の確認状態は失われます。続行しますか?',
|
|
1741
|
+
'modal.confirm.splitTitle': 'セグメントを分割',
|
|
1742
|
+
'modal.confirm.split': '分割後は両側とも未確認になり、訳文は比率で分割されます。続行しますか?',
|
|
1743
|
+
'editor.shift': 'シフト',
|
|
1744
|
+
'editor.shiftHint': '文書内の全字幕を秒単位でシフトします。負のタイムコードは拒否されます。',
|
|
1745
|
+
'editor.mergeCue': '次のキューを結合',
|
|
1746
|
+
'editor.splitCue': '中点で分割',
|
|
1747
|
+
'toast.cuesMerged': '字幕を結合しました',
|
|
1748
|
+
'toast.cueSplit': '字幕を分割しました',
|
|
1749
|
+
'toast.subtitlesShifted': '字幕タイムラインをシフトしました',
|
|
1750
|
+
'modal.confirm.shiftTitle': '字幕をシフト',
|
|
1751
|
+
'modal.confirm.shiftCue': '文書内の全キューを同じ量だけ移動します。訳文は変更しません。続行しますか?',
|
|
1752
|
+
'modal.confirm.mergeCue': '現在のキューと次を結合し、外側の時間範囲を使います。続行しますか?',
|
|
1753
|
+
'modal.confirm.splitCue': '現在のキューの中央で二分割し、訳文を比率で分けます。続行しますか?',
|
|
1754
|
+
})
|
|
1105
1755
|
const UI_LANGS = [
|
|
1106
1756
|
['auto', ''],
|
|
1107
1757
|
['zh', '简体中文'],
|