omni-viewer-core 0.12.0 → 0.13.0
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/README.md +39 -1
- package/THIRD_PARTY_NOTICES.md +8 -0
- package/dist/assets/audio-engine/audio_engine_worker.mjs +84 -0
- package/dist/i18n/catalog.de.js +9 -0
- package/dist/i18n/catalog.en.js +56 -0
- package/dist/i18n/catalog.fr.js +9 -0
- package/dist/i18n/catalog.it.js +9 -0
- package/dist/i18n/catalog.ja.js +56 -0
- package/dist/i18n/catalog.ko.js +56 -0
- package/dist/i18n/catalog.th.js +9 -0
- package/dist/i18n/catalog.zh-cn.js +54 -0
- package/dist/parsers/gguf/index.d.ts +99 -0
- package/dist/parsers/gguf/index.js +1003 -0
- package/dist/parsers/gguf/node.d.ts +5 -0
- package/dist/parsers/gguf/node.js +55 -0
- package/dist/parsers/onnx/index.d.ts +176 -0
- package/dist/parsers/onnx/index.js +1081 -0
- package/dist/registry/index.d.ts +3 -0
- package/dist/registry/index.js +10 -3
- package/dist/styles/audio.css +41 -0
- package/dist/styles/gguf.css +3 -0
- package/dist/styles/onnx.css +4 -0
- package/dist/viewers/audio/controller.d.ts +75 -1
- package/dist/viewers/audio/controller.js +124 -2
- package/dist/viewers/audio/engine.d.ts +23 -0
- package/dist/viewers/audio/engine.js +26 -0
- package/dist/viewers/audio/index.d.ts +57 -10
- package/dist/viewers/audio/index.js +450 -48
- package/dist/viewers/audio/mp3-demux.d.ts +41 -0
- package/dist/viewers/audio/mp3-demux.js +143 -0
- package/dist/viewers/audio/pyramid.d.ts +59 -0
- package/dist/viewers/audio/pyramid.js +205 -0
- package/dist/viewers/audio/self-loading.d.ts +23 -2
- package/dist/viewers/audio/self-loading.js +75 -5
- package/dist/viewers/audio/styles.js +41 -0
- package/dist/viewers/audio/wav-analyzer.d.ts +35 -0
- package/dist/viewers/audio/wav-analyzer.js +76 -0
- package/dist/viewers/audio/wav-stream.d.ts +29 -0
- package/dist/viewers/audio/wav-stream.js +144 -0
- package/dist/viewers/audio/webcodecs-decoder.d.ts +70 -0
- package/dist/viewers/audio/webcodecs-decoder.js +115 -0
- package/dist/viewers/audio/worker-engine.d.ts +37 -0
- package/dist/viewers/audio/worker-engine.js +150 -0
- package/dist/viewers/gguf/index.d.ts +27 -0
- package/dist/viewers/gguf/index.js +211 -0
- package/dist/viewers/gguf/styles.d.ts +1 -0
- package/dist/viewers/gguf/styles.js +4 -0
- package/dist/viewers/onnx/index.d.ts +18 -0
- package/dist/viewers/onnx/index.js +610 -0
- package/dist/viewers/onnx/styles.d.ts +1 -0
- package/dist/viewers/onnx/styles.js +5 -0
- package/dist/viewers/pdf/index.js +23 -0
- package/package.json +155 -35
package/README.md
CHANGED
|
@@ -15,7 +15,8 @@ models, viewers mount into a DOM element, and everything host-specific
|
|
|
15
15
|
- **Documents** — PDF, Word (DOCX and legacy DOC), HWP, PowerPoint (PPTX and
|
|
16
16
|
legacy PPT), Markdown, LaTeX (structure and math preview, not typesetting)
|
|
17
17
|
- **Data & spreadsheets** — Excel, CSV/TSV, JSON, JSONL/NDJSON, YAML, TOML,
|
|
18
|
-
Parquet, Avro, HDF5, MATLAB MAT, Safetensors, Protocol Buffers, ReqIF,
|
|
18
|
+
Parquet, Avro, HDF5, MATLAB MAT, Safetensors, GGUF, ONNX, Protocol Buffers, ReqIF,
|
|
19
|
+
SQLite
|
|
19
20
|
- **Media & graphics** — audio (waveform/spectrogram), video, images,
|
|
20
21
|
Photoshop PSD
|
|
21
22
|
- **Engineering & automotive** — CAN DBC, AUTOSAR ARXML, ASAM A2L, Vector
|
|
@@ -83,6 +84,43 @@ Node hosts can use `parseSafetensorsFile` from
|
|
|
83
84
|
with `mountSafetensorsDocument`. The legacy `Uint8Array` input remains
|
|
84
85
|
available, but it requires the host to load the complete file first.
|
|
85
86
|
|
|
87
|
+
### GGUF metadata and tensor index
|
|
88
|
+
|
|
89
|
+
GGUF parsing delegates to `@huggingface/gguf`, then normalizes its bigint and
|
|
90
|
+
large-array values into an Omni Viewer JSON-safe document. Node hosts can parse
|
|
91
|
+
a local model without loading tensor payloads and mount the result separately:
|
|
92
|
+
|
|
93
|
+
```ts
|
|
94
|
+
import { parseGgufFile } from 'omni-viewer-core/parsers/gguf/node';
|
|
95
|
+
import { mountGgufDocument } from 'omni-viewer-core/viewers/gguf';
|
|
96
|
+
|
|
97
|
+
const document = await parseGgufFile('/models/model.gguf');
|
|
98
|
+
mountGgufDocument(document, 'model.gguf', container, ctx);
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Remote hosts can use `parseGgufUri` from `omni-viewer-core/parsers/gguf`.
|
|
102
|
+
Browser and file-picker hosts can pass the common `{ fileName, data }`
|
|
103
|
+
`ViewerInput` directly to `mountGgufViewer`; the byte input is exposed to the
|
|
104
|
+
same upstream parser through an in-memory range source.
|
|
105
|
+
Tokenizer arrays are represented by bounded previews in the normalized model;
|
|
106
|
+
the viewer provides searchable tensor/metadata tables, structure preview, and
|
|
107
|
+
JSON copy. Node.js 20 or later is required.
|
|
108
|
+
|
|
109
|
+
### ONNX computation graphs
|
|
110
|
+
|
|
111
|
+
The ONNX parser reads the protobuf `ModelProto` directly without a runtime
|
|
112
|
+
dependency. Tensor payload bytes are skipped while graph topology, operators,
|
|
113
|
+
attributes, shapes, opsets, metadata, and external-data locations are retained:
|
|
114
|
+
|
|
115
|
+
```ts
|
|
116
|
+
import { mountOnnxViewer } from 'omni-viewer-core/viewers/onnx';
|
|
117
|
+
|
|
118
|
+
await mountOnnxViewer({ fileName: file.name, data: bytes }, container, ctx);
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
The viewer provides a connected computation graph with node inspection plus
|
|
122
|
+
searchable node, initializer, input/output, and model-information panels.
|
|
123
|
+
|
|
86
124
|
### Archive host integration
|
|
87
125
|
|
|
88
126
|
Archive decompression remains adapter-owned: pass an `ArchiveDecoder` to
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
This distribution includes the following third-party software.
|
|
4
4
|
|
|
5
|
+
## Hugging Face GGUF parser
|
|
6
|
+
|
|
7
|
+
- Project: `@huggingface/gguf` and `@huggingface/tasks`
|
|
8
|
+
- Copyright: Hugging Face and contributors
|
|
9
|
+
- License: MIT
|
|
10
|
+
- Use: GGUF metadata and tensor-index parsing
|
|
11
|
+
- Source: https://github.com/huggingface/huggingface.js
|
|
12
|
+
|
|
5
13
|
## PDF.js
|
|
6
14
|
|
|
7
15
|
- Project: PDF.js (`pdfjs-dist`)
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// Worker shell for the WASM audio engine. Deliberately dumb: it owns no
|
|
2
|
+
// decode logic, only the message plumbing, because everything here is outside
|
|
3
|
+
// the TypeScript build and therefore untypechecked and untested. The engine
|
|
4
|
+
// entry points it calls are the same ones viewers/audio/engine.ts calls
|
|
5
|
+
// directly on the main thread.
|
|
6
|
+
//
|
|
7
|
+
// Shipped as an asset (see scripts/build-styles.mjs) and resolved through
|
|
8
|
+
// AssetService, matching how pdf.js's worker is delivered.
|
|
9
|
+
//
|
|
10
|
+
// The module and wasm URLs arrive in the `init` message rather than being
|
|
11
|
+
// resolved relative to this file: adapters that serve the core from blob URLs
|
|
12
|
+
// (obsidian) have no usable sibling paths.
|
|
13
|
+
|
|
14
|
+
let modulePromise;
|
|
15
|
+
|
|
16
|
+
function loadModule(moduleUrl, wasmUrl) {
|
|
17
|
+
modulePromise ??= import(moduleUrl).then((mod) => mod.default({ locateFile: () => wasmUrl }));
|
|
18
|
+
return modulePromise;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function openAudio(module, bytes) {
|
|
22
|
+
const pointer = module._malloc(bytes.byteLength);
|
|
23
|
+
module.HEAPU8.set(bytes, pointer);
|
|
24
|
+
const handle = module._decode_audio(pointer, bytes.byteLength);
|
|
25
|
+
module._free(pointer);
|
|
26
|
+
if (!handle) throw new Error('audio engine: unsupported or corrupted stream');
|
|
27
|
+
return {
|
|
28
|
+
handle,
|
|
29
|
+
channels: module._audio_get_channels(handle),
|
|
30
|
+
sampleRate: module._audio_get_sample_rate(handle),
|
|
31
|
+
frames: (module._audio_get_total_frames(handle) >>> 0)
|
|
32
|
+
+ module._audio_get_total_frames_high(handle) * 2 ** 32
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function analyze(module, bytes, width) {
|
|
37
|
+
const audio = openAudio(module, bytes);
|
|
38
|
+
try {
|
|
39
|
+
const columns = Math.max(1, Math.floor(width));
|
|
40
|
+
const peaksPointer = module._generate_peaks(audio.handle, columns) >>> 0;
|
|
41
|
+
if (!peaksPointer) throw new Error('audio engine: peaks generation failed');
|
|
42
|
+
const peaks = [...new Float32Array(module.HEAPF32.buffer, peaksPointer, columns)];
|
|
43
|
+
module._free_buffer(peaksPointer);
|
|
44
|
+
return {
|
|
45
|
+
sampleRate: audio.sampleRate,
|
|
46
|
+
channels: audio.channels,
|
|
47
|
+
duration: audio.sampleRate > 0 ? audio.frames / audio.sampleRate : 0,
|
|
48
|
+
peaks
|
|
49
|
+
};
|
|
50
|
+
} finally {
|
|
51
|
+
module._free_audio(audio.handle);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function decode(module, bytes) {
|
|
56
|
+
const audio = openAudio(module, bytes);
|
|
57
|
+
try {
|
|
58
|
+
const samplesPointer = module.getValue(audio.handle, 'i32') >>> 0;
|
|
59
|
+
const length = audio.frames * audio.channels;
|
|
60
|
+
const pcm = new Float32Array(module.HEAPF32.buffer, samplesPointer, length).slice();
|
|
61
|
+
return { sampleRate: audio.sampleRate, channels: audio.channels, frames: audio.frames, pcm };
|
|
62
|
+
} finally {
|
|
63
|
+
module._free_audio(audio.handle);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
self.onmessage = async (event) => {
|
|
68
|
+
const { id, op, moduleUrl, wasmUrl, bytes, width } = event.data;
|
|
69
|
+
try {
|
|
70
|
+
const module = await loadModule(moduleUrl, wasmUrl);
|
|
71
|
+
if (op === 'analyze') {
|
|
72
|
+
self.postMessage({ id, ok: true, result: analyze(module, bytes, width) });
|
|
73
|
+
} else if (op === 'decode') {
|
|
74
|
+
const result = decode(module, bytes);
|
|
75
|
+
// The PCM is freshly copied here and never touched again, so it can
|
|
76
|
+
// be transferred instead of structured-cloned.
|
|
77
|
+
self.postMessage({ id, ok: true, result }, [result.pcm.buffer]);
|
|
78
|
+
} else {
|
|
79
|
+
throw new Error(`audio engine worker: unknown op ${String(op)}`);
|
|
80
|
+
}
|
|
81
|
+
} catch (error) {
|
|
82
|
+
self.postMessage({ id, ok: false, error: error instanceof Error ? error.message : String(error) });
|
|
83
|
+
}
|
|
84
|
+
};
|
package/dist/i18n/catalog.de.js
CHANGED
|
@@ -4,15 +4,24 @@ export const CATALOG_DE = {
|
|
|
4
4
|
'audio.title': 'Audio', 'video.title': 'Video', 'dbc.title': 'CAN-Datenbank',
|
|
5
5
|
'audio.play': 'Wiedergabe', 'audio.pause': 'Pause', 'audio.stop': 'Stopp',
|
|
6
6
|
'audio.loop': 'Schleife', 'audio.clearRegions': 'Bereiche löschen', 'audio.volume': 'Lautstärke',
|
|
7
|
+
'audio.region.start': 'Bereichsstart (s)', 'audio.region.end': 'Bereichsende (s)', 'audio.region.duration': 'Bereichslänge (s)',
|
|
7
8
|
'audio.zoom': 'Zoom', 'audio.zoomIn': 'Vergrößern', 'audio.zoomOut': 'Verkleinern', 'audio.zoomFit': 'Anpassen',
|
|
8
9
|
'audio.visualization': 'Ansicht', 'audio.vis.waveform': 'Wellenform', 'audio.vis.spectrogram': 'Spektrogramm',
|
|
10
|
+
'audio.vis.both': 'Beide', 'audio.download': 'Herunterladen',
|
|
11
|
+
'audio.spectrogramScale': 'Skala',
|
|
12
|
+
'audio.scale.linear': 'Linear', 'audio.scale.mel': 'Mel', 'audio.scale.bark': 'Bark', 'audio.scale.erb': 'ERB',
|
|
13
|
+
'audio.error.save': 'Die Audiodatei konnte nicht gespeichert werden.',
|
|
9
14
|
'audio.info.duration': 'Dauer', 'audio.info.sampleRate': 'Abtastrate', 'audio.info.channels': 'Kanäle',
|
|
15
|
+
'audio.info.channelLevels': 'L Spitze {leftPeak}, RMS {leftRms} | R Spitze {rightPeak}, RMS {rightRms}',
|
|
10
16
|
'audio.info.bitDepth': 'Bittiefe', 'audio.info.format': 'Format', 'audio.info.fileSize': 'Dateigröße',
|
|
11
17
|
'audio.loading': 'Audio wird dekodiert…',
|
|
12
18
|
'audio.status.region': 'Bereich {start} – {end} ({duration} s)',
|
|
13
19
|
'audio.status.looping': 'Bereich wird wiederholt', 'audio.status.loopTrack': 'Titel wird wiederholt',
|
|
14
20
|
'audio.fallback': 'Wellenform-Engine nicht verfügbar – der einfache Player wird verwendet.',
|
|
15
21
|
'audio.error.decode': 'Der Browser konnte diesen Audio-Codec nicht dekodieren. Verwenden Sie einen Host mit dem erforderlichen Codec oder transkodieren Sie die Datei.',
|
|
22
|
+
'audio.warning.analysisFailed': 'Die Wellenform-Voranalyse ist fehlgeschlagen — es wird auf die vollständige Browser-Dekodierung zurückgegriffen, die bei einer Datei dieser Größe langsam sein kann.',
|
|
23
|
+
'audio.warning.analysisSkipped': 'Die Wellenform-Voranalyse ist für dieses Format nicht verfügbar — es wird auf die vollständige Browser-Dekodierung zurückgegriffen, die bei einer Datei dieser Größe langsam sein kann.',
|
|
24
|
+
'audio.vis.unavailableLarge': 'Das Spektrogramm ist für große Dateien, die aus vorberechneten Spitzenwerten gerendert werden, nicht verfügbar.',
|
|
16
25
|
'video.play': 'Wiedergabe', 'video.pause': 'Pause', 'video.stop': 'Stopp',
|
|
17
26
|
'video.skipBack': '⏪ -{seconds} s', 'video.skipForward': '⏩ +{seconds} s',
|
|
18
27
|
'video.speed': 'Geschwindigkeit', 'video.zoom': 'Zoom', 'video.zoomIn': 'Vergrößern',
|
package/dist/i18n/catalog.en.js
CHANGED
|
@@ -7,15 +7,24 @@ export const CATALOG_EN = {
|
|
|
7
7
|
'audio.title': 'Audio', 'video.title': 'Video', 'dbc.title': 'CAN database',
|
|
8
8
|
'audio.play': 'Play', 'audio.pause': 'Pause', 'audio.stop': 'Stop',
|
|
9
9
|
'audio.loop': 'Loop', 'audio.clearRegions': 'Clear regions', 'audio.volume': 'Volume',
|
|
10
|
+
'audio.region.start': 'Region start (s)', 'audio.region.end': 'Region end (s)', 'audio.region.duration': 'Region length (s)',
|
|
10
11
|
'audio.zoom': 'Zoom', 'audio.zoomIn': 'Zoom in', 'audio.zoomOut': 'Zoom out', 'audio.zoomFit': 'Fit',
|
|
11
12
|
'audio.visualization': 'View', 'audio.vis.waveform': 'Waveform', 'audio.vis.spectrogram': 'Spectrogram',
|
|
13
|
+
'audio.vis.both': 'Both', 'audio.download': 'Download',
|
|
14
|
+
'audio.spectrogramScale': 'Scale',
|
|
15
|
+
'audio.scale.linear': 'Linear', 'audio.scale.mel': 'Mel', 'audio.scale.bark': 'Bark', 'audio.scale.erb': 'ERB',
|
|
16
|
+
'audio.error.save': 'Saving the audio file failed.',
|
|
12
17
|
'audio.info.duration': 'Duration', 'audio.info.sampleRate': 'Sample rate', 'audio.info.channels': 'Channels',
|
|
18
|
+
'audio.info.channelLevels': 'L peak {leftPeak}, RMS {leftRms} | R peak {rightPeak}, RMS {rightRms}',
|
|
13
19
|
'audio.info.bitDepth': 'Bit depth', 'audio.info.format': 'Format', 'audio.info.fileSize': 'File size',
|
|
14
20
|
'audio.loading': 'Decoding audio…',
|
|
15
21
|
'audio.status.region': 'Region {start} – {end} ({duration}s)',
|
|
16
22
|
'audio.status.looping': 'looping region', 'audio.status.loopTrack': 'Looping track',
|
|
17
23
|
'audio.fallback': 'Waveform engine unavailable — using the basic player.',
|
|
18
24
|
'audio.error.decode': 'The browser could not decode this audio codec. Try a host with the required codec or transcode the file.',
|
|
25
|
+
'audio.warning.analysisFailed': 'Waveform pre-analysis failed — falling back to a full browser decode, which may be slow for a file this large.',
|
|
26
|
+
'audio.warning.analysisSkipped': 'Waveform pre-analysis is unavailable for this format — falling back to a full browser decode, which may be slow for a file this large.',
|
|
27
|
+
'audio.vis.unavailableLarge': 'Spectrogram is unavailable for large files rendered from precomputed peaks.',
|
|
19
28
|
'video.play': 'Play', 'video.pause': 'Pause', 'video.stop': 'Stop',
|
|
20
29
|
'video.skipBack': '⏪ -{seconds}s', 'video.skipForward': '⏩ +{seconds}s',
|
|
21
30
|
'video.speed': 'Speed', 'video.zoom': 'Zoom', 'video.zoomIn': 'Zoom in',
|
|
@@ -59,6 +68,53 @@ export const CATALOG_EN = {
|
|
|
59
68
|
'safetensors.structure': 'Structure', 'safetensors.noData': 'No data available.',
|
|
60
69
|
'safetensors.matchingRows': '{count} matching rows',
|
|
61
70
|
'safetensors.matchingRowsLimited': '{visible} / {total} matching rows shown',
|
|
71
|
+
'gguf.title': 'GGUF', 'gguf.search': 'Search metadata and tensors…', 'gguf.copyJson': 'Copy JSON',
|
|
72
|
+
'gguf.structure': 'Structure', 'gguf.noData': 'No data available.',
|
|
73
|
+
'gguf.matchingRows': '{count} matching rows',
|
|
74
|
+
'gguf.matchingRowsLimited': '{visible} / {total} matching rows shown',
|
|
75
|
+
'gguf.summary.version': 'Version', 'gguf.summary.architecture': 'Architecture', 'gguf.summary.type': 'Type',
|
|
76
|
+
'gguf.summary.tensors': 'Tensors', 'gguf.summary.parameters': 'Parameters',
|
|
77
|
+
'gguf.summary.quantization': 'Quantization', 'gguf.summary.metadataKeys': 'Metadata keys', 'gguf.summary.status': 'Status',
|
|
78
|
+
'gguf.table.tensors': 'Tensors ({count})', 'gguf.table.metadata': 'Metadata ({count})',
|
|
79
|
+
'gguf.column.name': 'Name', 'gguf.column.dtype': 'Dtype', 'gguf.column.shape': 'Shape',
|
|
80
|
+
'gguf.column.parameters': 'Parameters', 'gguf.column.offset': 'Offset', 'gguf.column.key': 'Key',
|
|
81
|
+
'gguf.column.type': 'Type', 'gguf.column.value': 'Value',
|
|
82
|
+
'gguf.warning.invalid': 'This GGUF file is invalid or unsupported.',
|
|
83
|
+
'gguf.warning.unverifiedDtype': 'Some tensors use an unrecognized storage dtype; their payload ends could not be verified.',
|
|
84
|
+
'gguf.warning.metadataCountMismatch': 'The declared metadata count does not match the parsed metadata entries.',
|
|
85
|
+
'gguf.warning.tensorsLimited': 'Showing the first {shown} of {total} tensors to limit memory use.',
|
|
86
|
+
'gguf.warning.metadataLimited': 'Showing the first {shown} of {total} metadata entries to limit memory use.',
|
|
87
|
+
'gguf.warning.textTruncated': 'Some text was truncated by per-field limits or the normalized GGUF character budget.',
|
|
88
|
+
'onnx.title': 'ONNX model', 'onnx.search': 'Search graph, nodes, and tensors…', 'onnx.copyJson': 'Copy JSON',
|
|
89
|
+
'onnx.graph': 'Graph', 'onnx.nodes': 'Nodes', 'onnx.tensors': 'Tensors', 'onnx.io': 'Inputs & Outputs',
|
|
90
|
+
'onnx.modelInfo': 'Model Info', 'onnx.rows': '{shown} / {total} rows shown', 'onnx.noMatches': 'No rows match the current search.',
|
|
91
|
+
'onnx.selectNode': 'Select a graph node to inspect it.', 'onnx.graphLimited': 'Graph preview shows {shown} of {total} items.',
|
|
92
|
+
'onnx.summary.nodes': 'Nodes', 'onnx.summary.initializers': 'Initializers', 'onnx.summary.inputs': 'Inputs',
|
|
93
|
+
'onnx.summary.outputs': 'Outputs', 'onnx.summary.functions': 'Functions', 'onnx.summary.irVersion': 'IR version',
|
|
94
|
+
'onnx.warning.noOpset': 'The model does not declare an operator-set import.',
|
|
95
|
+
'onnx.warning.emptyGraph': 'The model graph contains no computation nodes.',
|
|
96
|
+
'onnx.warning.externalData': '{count} tensor(s) reference external data that is not loaded by this viewer.',
|
|
97
|
+
'onnx.column.index': '#', 'onnx.column.name': 'Name', 'onnx.column.operator': 'Operator', 'onnx.column.domain': 'Domain',
|
|
98
|
+
'onnx.column.overload': 'Overload', 'onnx.column.inputs': 'Inputs', 'onnx.column.outputs': 'Outputs',
|
|
99
|
+
'onnx.column.attributes': 'Attributes', 'onnx.column.type': 'Type', 'onnx.column.shape': 'Shape',
|
|
100
|
+
'onnx.column.elements': 'Elements', 'onnx.column.dataSize': 'Data size', 'onnx.column.storage': 'Storage',
|
|
101
|
+
'onnx.column.kind': 'Kind', 'onnx.column.typeShape': 'Type / Shape', 'onnx.column.description': 'Description',
|
|
102
|
+
'onnx.column.metadata': 'Metadata',
|
|
103
|
+
'onnx.storage.dense.embedded': 'Dense · embedded', 'onnx.storage.dense.external': 'Dense · external',
|
|
104
|
+
'onnx.storage.sparse.embedded': 'Sparse · embedded', 'onnx.storage.sparse.external': 'Sparse · external',
|
|
105
|
+
'onnx.kind.input': 'Input', 'onnx.kind.output': 'Output', 'onnx.kind.value': 'Value',
|
|
106
|
+
'onnx.scalar': 'scalar', 'onnx.optional': 'optional',
|
|
107
|
+
'onnx.info.graph': 'Graph', 'onnx.info.irVersion': 'IR version', 'onnx.info.modelVersion': 'Model version',
|
|
108
|
+
'onnx.info.producer': 'Producer', 'onnx.info.domain': 'Domain', 'onnx.info.opsets': 'Operator sets',
|
|
109
|
+
'onnx.info.description': 'Description', 'onnx.info.functions': 'Local functions', 'onnx.info.graphMetadata': 'Graph',
|
|
110
|
+
'onnx.inspector.inputs': 'Inputs', 'onnx.inspector.outputs': 'Outputs', 'onnx.inspector.attributes': 'Attributes',
|
|
111
|
+
'onnx.inspector.description': 'Description',
|
|
112
|
+
'onnx.graphEdgesLimited': 'Only the first {count} connections are shown.', 'onnx.moreItems': '{count} more…',
|
|
113
|
+
'onnx.unknown': 'Unknown', 'onnx.graphSummary': '{name} · {count} nodes',
|
|
114
|
+
'onnx.sparseSummary': '{type}[{shape}] · {count} non-zero',
|
|
115
|
+
'onnx.info.training': 'Training graphs', 'onnx.info.configurations': 'Device configurations',
|
|
116
|
+
'onnx.info.quantization': 'Quantization annotations', 'onnx.info.deviceConfiguration': 'Device configuration',
|
|
117
|
+
'onnx.info.pipelineStage': 'pipeline stage',
|
|
62
118
|
'proto.title': 'Protocol Buffer', 'proto.summary': '{syntax} · {package} · {messages} messages · {services} services',
|
|
63
119
|
'proto.noPackage': 'no package', 'proto.search': 'Search message, field, enum, RPC', 'proto.copyPanel': 'Copy panel',
|
|
64
120
|
'proto.panel.tree': 'Message Tree', 'proto.panel.types': 'Types', 'proto.panel.relationships': 'Relationships',
|
package/dist/i18n/catalog.fr.js
CHANGED
|
@@ -4,15 +4,24 @@ export const CATALOG_FR = {
|
|
|
4
4
|
'audio.title': 'Audio', 'video.title': 'Vidéo', 'dbc.title': 'Base de données CAN',
|
|
5
5
|
'audio.play': 'Lecture', 'audio.pause': 'Pause', 'audio.stop': 'Arrêt',
|
|
6
6
|
'audio.loop': 'Boucle', 'audio.clearRegions': 'Effacer les régions', 'audio.volume': 'Volume',
|
|
7
|
+
'audio.region.start': 'Début de la région (s)', 'audio.region.end': 'Fin de la région (s)', 'audio.region.duration': 'Durée de la région (s)',
|
|
7
8
|
'audio.zoom': 'Zoom', 'audio.zoomIn': 'Zoom avant', 'audio.zoomOut': 'Zoom arrière', 'audio.zoomFit': 'Ajuster',
|
|
8
9
|
'audio.visualization': 'Affichage', 'audio.vis.waveform': 'Forme d’onde', 'audio.vis.spectrogram': 'Spectrogramme',
|
|
10
|
+
'audio.vis.both': 'Les deux', 'audio.download': 'Télécharger',
|
|
11
|
+
'audio.spectrogramScale': 'Échelle',
|
|
12
|
+
'audio.scale.linear': 'Linéaire', 'audio.scale.mel': 'Mel', 'audio.scale.bark': 'Bark', 'audio.scale.erb': 'ERB',
|
|
13
|
+
'audio.error.save': 'L’enregistrement du fichier audio a échoué.',
|
|
9
14
|
'audio.info.duration': 'Durée', 'audio.info.sampleRate': 'Fréquence d’échantillonnage', 'audio.info.channels': 'Canaux',
|
|
15
|
+
'audio.info.channelLevels': 'L crête {leftPeak}, RMS {leftRms} | R crête {rightPeak}, RMS {rightRms}',
|
|
10
16
|
'audio.info.bitDepth': 'Profondeur de bits', 'audio.info.format': 'Format', 'audio.info.fileSize': 'Taille du fichier',
|
|
11
17
|
'audio.loading': 'Décodage de l’audio…',
|
|
12
18
|
'audio.status.region': 'Région {start} – {end} ({duration} s)',
|
|
13
19
|
'audio.status.looping': 'lecture en boucle de la région', 'audio.status.loopTrack': 'Lecture en boucle de la piste',
|
|
14
20
|
'audio.fallback': 'Moteur de forme d’onde indisponible — utilisation du lecteur de base.',
|
|
15
21
|
'audio.error.decode': 'Le navigateur n’a pas pu décoder ce codec audio. Essayez un hôte disposant du codec requis ou transcodez le fichier.',
|
|
22
|
+
'audio.warning.analysisFailed': 'L’analyse préalable de la forme d’onde a échoué — retour au décodage complet par le navigateur, qui peut être lent pour un fichier de cette taille.',
|
|
23
|
+
'audio.warning.analysisSkipped': 'L’analyse préalable de la forme d’onde n’est pas disponible pour ce format — retour au décodage complet par le navigateur, qui peut être lent pour un fichier de cette taille.',
|
|
24
|
+
'audio.vis.unavailableLarge': 'Le spectrogramme n’est pas disponible pour les fichiers volumineux rendus à partir de pics précalculés.',
|
|
16
25
|
'video.play': 'Lecture', 'video.pause': 'Pause', 'video.stop': 'Arrêt',
|
|
17
26
|
'video.skipBack': '⏪ -{seconds} s', 'video.skipForward': '⏩ +{seconds} s',
|
|
18
27
|
'video.speed': 'Vitesse', 'video.zoom': 'Zoom', 'video.zoomIn': 'Zoom avant',
|
package/dist/i18n/catalog.it.js
CHANGED
|
@@ -4,15 +4,24 @@ export const CATALOG_IT = {
|
|
|
4
4
|
'audio.title': 'Audio', 'video.title': 'Video', 'dbc.title': 'Database CAN',
|
|
5
5
|
'audio.play': 'Riproduci', 'audio.pause': 'Pausa', 'audio.stop': 'Arresta',
|
|
6
6
|
'audio.loop': 'Ripeti', 'audio.clearRegions': 'Cancella regioni', 'audio.volume': 'Volume',
|
|
7
|
+
'audio.region.start': 'Inizio regione (s)', 'audio.region.end': 'Fine regione (s)', 'audio.region.duration': 'Durata regione (s)',
|
|
7
8
|
'audio.zoom': 'Zoom', 'audio.zoomIn': 'Ingrandisci', 'audio.zoomOut': 'Riduci', 'audio.zoomFit': 'Adatta',
|
|
8
9
|
'audio.visualization': 'Vista', 'audio.vis.waveform': 'Forma d’onda', 'audio.vis.spectrogram': 'Spettrogramma',
|
|
10
|
+
'audio.vis.both': 'Entrambi', 'audio.download': 'Scarica',
|
|
11
|
+
'audio.spectrogramScale': 'Scala',
|
|
12
|
+
'audio.scale.linear': 'Lineare', 'audio.scale.mel': 'Mel', 'audio.scale.bark': 'Bark', 'audio.scale.erb': 'ERB',
|
|
13
|
+
'audio.error.save': 'Salvataggio del file audio non riuscito.',
|
|
9
14
|
'audio.info.duration': 'Durata', 'audio.info.sampleRate': 'Frequenza di campionamento', 'audio.info.channels': 'Canali',
|
|
15
|
+
'audio.info.channelLevels': 'L picco {leftPeak}, RMS {leftRms} | R picco {rightPeak}, RMS {rightRms}',
|
|
10
16
|
'audio.info.bitDepth': 'Profondità di bit', 'audio.info.format': 'Formato', 'audio.info.fileSize': 'Dimensione file',
|
|
11
17
|
'audio.loading': 'Decodifica dell’audio…',
|
|
12
18
|
'audio.status.region': 'Regione {start} – {end} ({duration} s)',
|
|
13
19
|
'audio.status.looping': 'ripetizione della regione', 'audio.status.loopTrack': 'Ripetizione del brano',
|
|
14
20
|
'audio.fallback': 'Motore della forma d’onda non disponibile — si utilizza il lettore di base.',
|
|
15
21
|
'audio.error.decode': 'Il browser non è riuscito a decodificare questo codec audio. Prova un host con il codec richiesto o transcodifica il file.',
|
|
22
|
+
'audio.warning.analysisFailed': 'L’analisi preliminare della forma d’onda non è riuscita — si torna alla decodifica completa del browser, che può essere lenta per un file di queste dimensioni.',
|
|
23
|
+
'audio.warning.analysisSkipped': 'L’analisi preliminare della forma d’onda non è disponibile per questo formato — si torna alla decodifica completa del browser, che può essere lenta per un file di queste dimensioni.',
|
|
24
|
+
'audio.vis.unavailableLarge': 'Lo spettrogramma non è disponibile per i file di grandi dimensioni renderizzati da picchi precalcolati.',
|
|
16
25
|
'video.play': 'Riproduci', 'video.pause': 'Pausa', 'video.stop': 'Arresta',
|
|
17
26
|
'video.skipBack': '⏪ -{seconds} s', 'video.skipForward': '⏩ +{seconds} s',
|
|
18
27
|
'video.speed': 'Velocità', 'video.zoom': 'Zoom', 'video.zoomIn': 'Ingrandisci',
|
package/dist/i18n/catalog.ja.js
CHANGED
|
@@ -3,15 +3,24 @@ export const CATALOG_JA = {
|
|
|
3
3
|
'audio.title': 'オーディオ', 'video.title': '動画', 'dbc.title': 'CANデータベース',
|
|
4
4
|
'audio.play': '再生', 'audio.pause': '一時停止', 'audio.stop': '停止',
|
|
5
5
|
'audio.loop': 'ループ', 'audio.clearRegions': '範囲をクリア', 'audio.volume': '音量',
|
|
6
|
+
'audio.region.start': '領域の開始 (秒)', 'audio.region.end': '領域の終了 (秒)', 'audio.region.duration': '領域の長さ (秒)',
|
|
6
7
|
'audio.zoom': 'ズーム', 'audio.zoomIn': '拡大', 'audio.zoomOut': '縮小', 'audio.zoomFit': '全体表示',
|
|
7
8
|
'audio.visualization': '表示', 'audio.vis.waveform': '波形', 'audio.vis.spectrogram': 'スペクトログラム',
|
|
9
|
+
'audio.vis.both': '両方', 'audio.download': 'ダウンロード',
|
|
10
|
+
'audio.spectrogramScale': 'スケール',
|
|
11
|
+
'audio.scale.linear': 'リニア', 'audio.scale.mel': 'メル', 'audio.scale.bark': 'バーク', 'audio.scale.erb': 'ERB',
|
|
12
|
+
'audio.error.save': 'オーディオファイルの保存に失敗しました。',
|
|
8
13
|
'audio.info.duration': '再生時間', 'audio.info.sampleRate': 'サンプルレート', 'audio.info.channels': 'チャンネル',
|
|
14
|
+
'audio.info.channelLevels': 'L ピーク {leftPeak}, RMS {leftRms} | R ピーク {rightPeak}, RMS {rightRms}',
|
|
9
15
|
'audio.info.bitDepth': 'ビット深度', 'audio.info.format': '形式', 'audio.info.fileSize': 'ファイルサイズ',
|
|
10
16
|
'audio.loading': 'オーディオをデコード中…',
|
|
11
17
|
'audio.status.region': '範囲 {start}~{end}({duration}秒)',
|
|
12
18
|
'audio.status.looping': '範囲をループ中', 'audio.status.loopTrack': 'トラックをループ中',
|
|
13
19
|
'audio.fallback': '波形エンジンを使用できないため、基本プレーヤーを使用します。',
|
|
14
20
|
'audio.error.decode': 'ブラウザーでこのオーディオコーデックをデコードできません。必要なコーデックを備えた環境を使用するか、ファイルを変換してください。',
|
|
21
|
+
'audio.warning.analysisFailed': '波形の事前解析に失敗しました。ブラウザーによる全体のデコードに切り替えます。このサイズのファイルでは時間がかかる場合があります。',
|
|
22
|
+
'audio.warning.analysisSkipped': 'この形式では波形の事前解析を利用できません。ブラウザーによる全体のデコードに切り替えます。このサイズのファイルでは時間がかかる場合があります。',
|
|
23
|
+
'audio.vis.unavailableLarge': '事前計算したピークで描画する大きなファイルではスペクトログラムを利用できません。',
|
|
15
24
|
'video.play': '再生', 'video.pause': '一時停止', 'video.stop': '停止',
|
|
16
25
|
'video.skipBack': '⏪ -{seconds}秒', 'video.skipForward': '⏩ +{seconds}秒',
|
|
17
26
|
'video.speed': '再生速度', 'video.zoom': 'ズーム', 'video.zoomIn': '拡大',
|
|
@@ -55,6 +64,53 @@ export const CATALOG_JA = {
|
|
|
55
64
|
'safetensors.structure': '構造', 'safetensors.noData': '表示できるデータがありません。',
|
|
56
65
|
'safetensors.matchingRows': '一致する行: {count}件',
|
|
57
66
|
'safetensors.matchingRowsLimited': '一致する{total}行中{visible}行を表示',
|
|
67
|
+
'gguf.title': 'GGUF', 'gguf.search': 'メタデータとテンソルを検索…', 'gguf.copyJson': 'JSONをコピー',
|
|
68
|
+
'gguf.structure': '構造', 'gguf.noData': '表示できるデータがありません。',
|
|
69
|
+
'gguf.matchingRows': '一致する行: {count}件',
|
|
70
|
+
'gguf.matchingRowsLimited': '一致する{total}行中{visible}行を表示',
|
|
71
|
+
'gguf.summary.version': 'バージョン', 'gguf.summary.architecture': 'アーキテクチャ', 'gguf.summary.type': '種類',
|
|
72
|
+
'gguf.summary.tensors': 'テンソル', 'gguf.summary.parameters': 'パラメータ',
|
|
73
|
+
'gguf.summary.quantization': '量子化', 'gguf.summary.metadataKeys': 'メタデータキー', 'gguf.summary.status': '状態',
|
|
74
|
+
'gguf.table.tensors': 'テンソル({count})', 'gguf.table.metadata': 'メタデータ({count})',
|
|
75
|
+
'gguf.column.name': '名前', 'gguf.column.dtype': 'データ型', 'gguf.column.shape': '形状',
|
|
76
|
+
'gguf.column.parameters': 'パラメータ', 'gguf.column.offset': 'オフセット', 'gguf.column.key': 'キー',
|
|
77
|
+
'gguf.column.type': '種類', 'gguf.column.value': '値',
|
|
78
|
+
'gguf.warning.invalid': '無効または未対応のGGUFファイルです。',
|
|
79
|
+
'gguf.warning.unverifiedDtype': '一部のテンソルは未認識の保存データ型を使用しているため、payloadの終端を検証できませんでした。',
|
|
80
|
+
'gguf.warning.metadataCountMismatch': '宣言されたメタデータ数と解析された項目数が一致しません。',
|
|
81
|
+
'gguf.warning.tensorsLimited': 'メモリ使用量を抑えるため、{total}個のテンソルのうち先頭{shown}個を表示します。',
|
|
82
|
+
'gguf.warning.metadataLimited': 'メモリ使用量を抑えるため、{total}個のメタデータのうち先頭{shown}個を表示します。',
|
|
83
|
+
'gguf.warning.textTruncated': 'フィールド制限またはGGUF文字数予算により、一部のテキストが省略されました。',
|
|
84
|
+
'onnx.title': 'ONNXモデル', 'onnx.search': 'グラフ、ノード、テンソルを検索…', 'onnx.copyJson': 'JSONをコピー',
|
|
85
|
+
'onnx.graph': 'グラフ', 'onnx.nodes': 'ノード', 'onnx.tensors': 'テンソル', 'onnx.io': '入出力',
|
|
86
|
+
'onnx.modelInfo': 'モデル情報', 'onnx.rows': '{total}行中{shown}行を表示', 'onnx.noMatches': '検索に一致する行がありません。',
|
|
87
|
+
'onnx.selectNode': '確認するグラフノードを選択してください。', 'onnx.graphLimited': '{total}項目中{shown}項目を表示しています。',
|
|
88
|
+
'onnx.summary.nodes': 'ノード', 'onnx.summary.initializers': '初期化テンソル', 'onnx.summary.inputs': '入力',
|
|
89
|
+
'onnx.summary.outputs': '出力', 'onnx.summary.functions': '関数', 'onnx.summary.irVersion': 'IRバージョン',
|
|
90
|
+
'onnx.warning.noOpset': 'モデルに演算子セットのインポートが宣言されていません。',
|
|
91
|
+
'onnx.warning.emptyGraph': 'モデルグラフに演算ノードがありません。',
|
|
92
|
+
'onnx.warning.externalData': '{count}個のテンソルが、このビューアーで読み込まれていない外部データを参照しています。',
|
|
93
|
+
'onnx.column.index': '#', 'onnx.column.name': '名前', 'onnx.column.operator': '演算子', 'onnx.column.domain': 'ドメイン',
|
|
94
|
+
'onnx.column.overload': 'オーバーロード', 'onnx.column.inputs': '入力', 'onnx.column.outputs': '出力',
|
|
95
|
+
'onnx.column.attributes': '属性', 'onnx.column.type': '型', 'onnx.column.shape': '形状',
|
|
96
|
+
'onnx.column.elements': '要素数', 'onnx.column.dataSize': 'データサイズ', 'onnx.column.storage': '保存形式',
|
|
97
|
+
'onnx.column.kind': '種類', 'onnx.column.typeShape': '型 / 形状', 'onnx.column.description': '説明',
|
|
98
|
+
'onnx.column.metadata': 'メタデータ',
|
|
99
|
+
'onnx.storage.dense.embedded': '密 · 内蔵', 'onnx.storage.dense.external': '密 · 外部',
|
|
100
|
+
'onnx.storage.sparse.embedded': '疎 · 内蔵', 'onnx.storage.sparse.external': '疎 · 外部',
|
|
101
|
+
'onnx.kind.input': '入力', 'onnx.kind.output': '出力', 'onnx.kind.value': '中間値',
|
|
102
|
+
'onnx.scalar': 'スカラー', 'onnx.optional': '省略可能',
|
|
103
|
+
'onnx.info.graph': 'グラフ', 'onnx.info.irVersion': 'IRバージョン', 'onnx.info.modelVersion': 'モデルバージョン',
|
|
104
|
+
'onnx.info.producer': '生成ツール', 'onnx.info.domain': 'ドメイン', 'onnx.info.opsets': '演算子セット',
|
|
105
|
+
'onnx.info.description': '説明', 'onnx.info.functions': 'ローカル関数', 'onnx.info.graphMetadata': 'グラフ',
|
|
106
|
+
'onnx.inspector.inputs': '入力', 'onnx.inspector.outputs': '出力', 'onnx.inspector.attributes': '属性',
|
|
107
|
+
'onnx.inspector.description': '説明',
|
|
108
|
+
'onnx.graphEdgesLimited': '接続は最初の{count}件のみ表示しています。', 'onnx.moreItems': 'ほか{count}件…',
|
|
109
|
+
'onnx.unknown': '不明', 'onnx.graphSummary': '{name} · {count}ノード',
|
|
110
|
+
'onnx.sparseSummary': '{type}[{shape}] · 非ゼロ{count}件',
|
|
111
|
+
'onnx.info.training': '学習グラフ', 'onnx.info.configurations': 'デバイス構成',
|
|
112
|
+
'onnx.info.quantization': '量子化注釈', 'onnx.info.deviceConfiguration': 'デバイス構成',
|
|
113
|
+
'onnx.info.pipelineStage': 'パイプライン段階',
|
|
58
114
|
'proto.title': 'Protocol Buffer', 'proto.summary': '{syntax} · {package} · メッセージ{messages}件 · サービス{services}件',
|
|
59
115
|
'proto.noPackage': 'パッケージなし', 'proto.search': 'メッセージ、フィールド、列挙型、RPCを検索', 'proto.copyPanel': 'パネルをコピー',
|
|
60
116
|
'proto.panel.tree': 'メッセージツリー', 'proto.panel.types': '型', 'proto.panel.relationships': '関係',
|
package/dist/i18n/catalog.ko.js
CHANGED
|
@@ -5,15 +5,24 @@ export const CATALOG_KO = {
|
|
|
5
5
|
'audio.title': '오디오', 'video.title': '비디오', 'dbc.title': 'CAN 데이터베이스',
|
|
6
6
|
'audio.play': '재생', 'audio.pause': '일시정지', 'audio.stop': '정지',
|
|
7
7
|
'audio.loop': '반복', 'audio.clearRegions': '구간 지우기', 'audio.volume': '음량',
|
|
8
|
+
'audio.region.start': '구간 시작 (초)', 'audio.region.end': '구간 종료 (초)', 'audio.region.duration': '구간 길이 (초)',
|
|
8
9
|
'audio.zoom': '확대/축소', 'audio.zoomIn': '확대', 'audio.zoomOut': '축소', 'audio.zoomFit': '맞춤',
|
|
9
10
|
'audio.visualization': '보기', 'audio.vis.waveform': '파형', 'audio.vis.spectrogram': '스펙트로그램',
|
|
11
|
+
'audio.vis.both': '함께 보기', 'audio.download': '다운로드',
|
|
12
|
+
'audio.spectrogramScale': '스케일',
|
|
13
|
+
'audio.scale.linear': '선형', 'audio.scale.mel': '멜', 'audio.scale.bark': '바크', 'audio.scale.erb': 'ERB',
|
|
14
|
+
'audio.error.save': '오디오 파일 저장에 실패했습니다.',
|
|
10
15
|
'audio.info.duration': '재생 시간', 'audio.info.sampleRate': '샘플레이트', 'audio.info.channels': '채널',
|
|
16
|
+
'audio.info.channelLevels': 'L 피크 {leftPeak}, RMS {leftRms} | R 피크 {rightPeak}, RMS {rightRms}',
|
|
11
17
|
'audio.info.bitDepth': '비트 깊이', 'audio.info.format': '형식', 'audio.info.fileSize': '파일 크기',
|
|
12
18
|
'audio.loading': '오디오 디코딩 중…',
|
|
13
19
|
'audio.status.region': '구간 {start} – {end} ({duration}초)',
|
|
14
20
|
'audio.status.looping': '구간 반복 중', 'audio.status.loopTrack': '전체 반복 중',
|
|
15
21
|
'audio.fallback': '파형 엔진을 사용할 수 없어 기본 플레이어로 표시합니다.',
|
|
16
22
|
'audio.error.decode': '브라우저가 이 오디오 코덱을 디코딩할 수 없습니다. 코덱을 지원하는 호스트를 사용하거나 파일을 변환해 주세요.',
|
|
23
|
+
'audio.warning.analysisFailed': '파형 사전 분석에 실패했습니다. 브라우저 전체 디코딩으로 대체되며, 이 크기의 파일에서는 느릴 수 있습니다.',
|
|
24
|
+
'audio.warning.analysisSkipped': '이 포맷은 파형 사전 분석을 사용할 수 없습니다. 브라우저 전체 디코딩으로 대체되며, 이 크기의 파일에서는 느릴 수 있습니다.',
|
|
25
|
+
'audio.vis.unavailableLarge': '미리 계산된 피크로 렌더링하는 대용량 파일에서는 스펙트로그램을 사용할 수 없습니다.',
|
|
17
26
|
'video.play': '재생', 'video.pause': '일시정지', 'video.stop': '정지',
|
|
18
27
|
'video.skipBack': '⏪ -{seconds}초', 'video.skipForward': '⏩ +{seconds}초',
|
|
19
28
|
'video.speed': '배속', 'video.zoom': '확대/축소', 'video.zoomIn': '확대',
|
|
@@ -57,6 +66,53 @@ export const CATALOG_KO = {
|
|
|
57
66
|
'safetensors.structure': '구조', 'safetensors.noData': '표시할 데이터가 없습니다.',
|
|
58
67
|
'safetensors.matchingRows': '일치하는 행 {count}개',
|
|
59
68
|
'safetensors.matchingRowsLimited': '전체 {total}행 중 일치하는 {visible}행 표시',
|
|
69
|
+
'gguf.title': 'GGUF', 'gguf.search': '메타데이터와 텐서 검색…', 'gguf.copyJson': 'JSON 복사',
|
|
70
|
+
'gguf.structure': '구조', 'gguf.noData': '표시할 데이터가 없습니다.',
|
|
71
|
+
'gguf.matchingRows': '일치하는 행 {count}개',
|
|
72
|
+
'gguf.matchingRowsLimited': '전체 {total}행 중 일치하는 {visible}행 표시',
|
|
73
|
+
'gguf.summary.version': '버전', 'gguf.summary.architecture': '아키텍처', 'gguf.summary.type': '유형',
|
|
74
|
+
'gguf.summary.tensors': '텐서', 'gguf.summary.parameters': '파라미터',
|
|
75
|
+
'gguf.summary.quantization': '양자화', 'gguf.summary.metadataKeys': '메타데이터 키', 'gguf.summary.status': '상태',
|
|
76
|
+
'gguf.table.tensors': '텐서 ({count})', 'gguf.table.metadata': '메타데이터 ({count})',
|
|
77
|
+
'gguf.column.name': '이름', 'gguf.column.dtype': '데이터 타입', 'gguf.column.shape': '형상',
|
|
78
|
+
'gguf.column.parameters': '파라미터', 'gguf.column.offset': '오프셋', 'gguf.column.key': '키',
|
|
79
|
+
'gguf.column.type': '유형', 'gguf.column.value': '값',
|
|
80
|
+
'gguf.warning.invalid': '유효하지 않거나 지원되지 않는 GGUF 파일입니다.',
|
|
81
|
+
'gguf.warning.unverifiedDtype': '일부 텐서의 저장 데이터 타입을 인식할 수 없어 payload 끝을 검증하지 못했습니다.',
|
|
82
|
+
'gguf.warning.metadataCountMismatch': '선언된 메타데이터 개수와 파싱된 항목 수가 일치하지 않습니다.',
|
|
83
|
+
'gguf.warning.tensorsLimited': '메모리 사용을 제한하기 위해 전체 {total}개 텐서 중 처음 {shown}개를 표시합니다.',
|
|
84
|
+
'gguf.warning.metadataLimited': '메모리 사용을 제한하기 위해 전체 {total}개 메타데이터 중 처음 {shown}개를 표시합니다.',
|
|
85
|
+
'gguf.warning.textTruncated': '필드별 제한 또는 GGUF 문자 예산으로 인해 일부 텍스트가 잘렸습니다.',
|
|
86
|
+
'onnx.title': 'ONNX 모델', 'onnx.search': '그래프, 노드, 텐서 검색…', 'onnx.copyJson': 'JSON 복사',
|
|
87
|
+
'onnx.graph': '그래프', 'onnx.nodes': '노드', 'onnx.tensors': '텐서', 'onnx.io': '입출력',
|
|
88
|
+
'onnx.modelInfo': '모델 정보', 'onnx.rows': '전체 {total}행 중 {shown}행 표시', 'onnx.noMatches': '검색과 일치하는 행이 없습니다.',
|
|
89
|
+
'onnx.selectNode': '살펴볼 그래프 노드를 선택하세요.', 'onnx.graphLimited': '전체 {total}개 항목 중 {shown}개를 그래프에 표시합니다.',
|
|
90
|
+
'onnx.summary.nodes': '노드', 'onnx.summary.initializers': '초기화 텐서', 'onnx.summary.inputs': '입력',
|
|
91
|
+
'onnx.summary.outputs': '출력', 'onnx.summary.functions': '함수', 'onnx.summary.irVersion': 'IR 버전',
|
|
92
|
+
'onnx.warning.noOpset': '모델에 연산자 세트 가져오기가 선언되지 않았습니다.',
|
|
93
|
+
'onnx.warning.emptyGraph': '모델 그래프에 연산 노드가 없습니다.',
|
|
94
|
+
'onnx.warning.externalData': '텐서 {count}개가 이 뷰어에서 불러오지 않은 외부 데이터를 참조합니다.',
|
|
95
|
+
'onnx.column.index': '#', 'onnx.column.name': '이름', 'onnx.column.operator': '연산자', 'onnx.column.domain': '도메인',
|
|
96
|
+
'onnx.column.overload': '오버로드', 'onnx.column.inputs': '입력', 'onnx.column.outputs': '출력',
|
|
97
|
+
'onnx.column.attributes': '속성', 'onnx.column.type': '타입', 'onnx.column.shape': '형상',
|
|
98
|
+
'onnx.column.elements': '원소 수', 'onnx.column.dataSize': '데이터 크기', 'onnx.column.storage': '저장 방식',
|
|
99
|
+
'onnx.column.kind': '종류', 'onnx.column.typeShape': '타입 / 형상', 'onnx.column.description': '설명',
|
|
100
|
+
'onnx.column.metadata': '메타데이터',
|
|
101
|
+
'onnx.storage.dense.embedded': '밀집 · 내장', 'onnx.storage.dense.external': '밀집 · 외부',
|
|
102
|
+
'onnx.storage.sparse.embedded': '희소 · 내장', 'onnx.storage.sparse.external': '희소 · 외부',
|
|
103
|
+
'onnx.kind.input': '입력', 'onnx.kind.output': '출력', 'onnx.kind.value': '중간 값',
|
|
104
|
+
'onnx.scalar': '스칼라', 'onnx.optional': '선택 입력',
|
|
105
|
+
'onnx.info.graph': '그래프', 'onnx.info.irVersion': 'IR 버전', 'onnx.info.modelVersion': '모델 버전',
|
|
106
|
+
'onnx.info.producer': '생성 도구', 'onnx.info.domain': '도메인', 'onnx.info.opsets': '연산자 세트',
|
|
107
|
+
'onnx.info.description': '설명', 'onnx.info.functions': '로컬 함수', 'onnx.info.graphMetadata': '그래프',
|
|
108
|
+
'onnx.inspector.inputs': '입력', 'onnx.inspector.outputs': '출력', 'onnx.inspector.attributes': '속성',
|
|
109
|
+
'onnx.inspector.description': '설명',
|
|
110
|
+
'onnx.graphEdgesLimited': '연결선은 처음 {count}개만 표시합니다.', 'onnx.moreItems': '외 {count}개…',
|
|
111
|
+
'onnx.unknown': '알 수 없음', 'onnx.graphSummary': '{name} · 노드 {count}개',
|
|
112
|
+
'onnx.sparseSummary': '{type}[{shape}] · 0이 아닌 값 {count}개',
|
|
113
|
+
'onnx.info.training': '학습 그래프', 'onnx.info.configurations': '장치 구성',
|
|
114
|
+
'onnx.info.quantization': '양자화 주석', 'onnx.info.deviceConfiguration': '장치 구성',
|
|
115
|
+
'onnx.info.pipelineStage': '파이프라인 단계',
|
|
60
116
|
'proto.title': 'Protocol Buffer', 'proto.summary': '{syntax} · {package} · 메시지 {messages}개 · 서비스 {services}개',
|
|
61
117
|
'proto.noPackage': '패키지 없음', 'proto.search': '메시지, 필드, enum, RPC 검색', 'proto.copyPanel': '패널 복사',
|
|
62
118
|
'proto.panel.tree': '메시지 트리', 'proto.panel.types': '타입', 'proto.panel.relationships': '관계',
|
package/dist/i18n/catalog.th.js
CHANGED
|
@@ -4,15 +4,24 @@ export const CATALOG_TH = {
|
|
|
4
4
|
'audio.title': 'เสียง', 'video.title': 'วิดีโอ', 'dbc.title': 'ฐานข้อมูล CAN',
|
|
5
5
|
'audio.play': 'เล่น', 'audio.pause': 'หยุดชั่วคราว', 'audio.stop': 'หยุด',
|
|
6
6
|
'audio.loop': 'วนซ้ำ', 'audio.clearRegions': 'ล้างช่วงที่เลือก', 'audio.volume': 'ระดับเสียง',
|
|
7
|
+
'audio.region.start': 'จุดเริ่มต้นช่วง (วินาที)', 'audio.region.end': 'จุดสิ้นสุดช่วง (วินาที)', 'audio.region.duration': 'ความยาวช่วง (วินาที)',
|
|
7
8
|
'audio.zoom': 'ซูม', 'audio.zoomIn': 'ซูมเข้า', 'audio.zoomOut': 'ซูมออก', 'audio.zoomFit': 'พอดี',
|
|
8
9
|
'audio.visualization': 'มุมมอง', 'audio.vis.waveform': 'รูปคลื่น', 'audio.vis.spectrogram': 'สเปกโตรแกรม',
|
|
10
|
+
'audio.vis.both': 'ทั้งสอง', 'audio.download': 'ดาวน์โหลด',
|
|
11
|
+
'audio.spectrogramScale': 'สเกล',
|
|
12
|
+
'audio.scale.linear': 'เชิงเส้น', 'audio.scale.mel': 'เมล', 'audio.scale.bark': 'บาร์ก', 'audio.scale.erb': 'ERB',
|
|
13
|
+
'audio.error.save': 'บันทึกไฟล์เสียงไม่สำเร็จ',
|
|
9
14
|
'audio.info.duration': 'ความยาว', 'audio.info.sampleRate': 'อัตราสุ่มตัวอย่าง', 'audio.info.channels': 'ช่องสัญญาณ',
|
|
15
|
+
'audio.info.channelLevels': 'L พีค {leftPeak}, RMS {leftRms} | R พีค {rightPeak}, RMS {rightRms}',
|
|
10
16
|
'audio.info.bitDepth': 'ความลึกบิต', 'audio.info.format': 'รูปแบบ', 'audio.info.fileSize': 'ขนาดไฟล์',
|
|
11
17
|
'audio.loading': 'กำลังถอดรหัสเสียง…',
|
|
12
18
|
'audio.status.region': 'ช่วง {start} – {end} ({duration} วินาที)',
|
|
13
19
|
'audio.status.looping': 'กำลังวนซ้ำช่วงที่เลือก', 'audio.status.loopTrack': 'กำลังวนซ้ำทั้งแทร็ก',
|
|
14
20
|
'audio.fallback': 'เครื่องมือแสดงรูปคลื่นใช้งานไม่ได้ — กำลังใช้โปรแกรมเล่นพื้นฐาน',
|
|
15
21
|
'audio.error.decode': 'เบราว์เซอร์ไม่สามารถถอดรหัสตัวแปลงสัญญาณเสียงนี้ได้ ลองใช้โฮสต์ที่มีตัวแปลงสัญญาณที่ต้องการหรือแปลงไฟล์',
|
|
22
|
+
'audio.warning.analysisFailed': 'การวิเคราะห์รูปคลื่นล่วงหน้าล้มเหลว — กำลังกลับไปใช้การถอดรหัสทั้งไฟล์ด้วยเบราว์เซอร์ ซึ่งอาจช้าสำหรับไฟล์ขนาดนี้',
|
|
23
|
+
'audio.warning.analysisSkipped': 'การวิเคราะห์รูปคลื่นล่วงหน้าไม่พร้อมใช้งานสำหรับรูปแบบนี้ — กำลังกลับไปใช้การถอดรหัสทั้งไฟล์ด้วยเบราว์เซอร์ ซึ่งอาจช้าสำหรับไฟล์ขนาดนี้',
|
|
24
|
+
'audio.vis.unavailableLarge': 'สเปกโตรแกรมไม่พร้อมใช้งานสำหรับไฟล์ขนาดใหญ่ที่แสดงผลจากค่าพีคที่คำนวณไว้ล่วงหน้า',
|
|
16
25
|
'video.play': 'เล่น', 'video.pause': 'หยุดชั่วคราว', 'video.stop': 'หยุด',
|
|
17
26
|
'video.skipBack': '⏪ -{seconds} วินาที', 'video.skipForward': '⏩ +{seconds} วินาที',
|
|
18
27
|
'video.speed': 'ความเร็ว', 'video.zoom': 'ซูม', 'video.zoomIn': 'ซูมเข้า',
|