omni-viewer-core 0.1.0 → 0.3.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.
Files changed (45) hide show
  1. package/dist/i18n/catalog.de.d.ts +1 -0
  2. package/dist/i18n/catalog.de.js +68 -0
  3. package/dist/i18n/catalog.en.js +3 -0
  4. package/dist/i18n/catalog.fr.d.ts +1 -0
  5. package/dist/i18n/catalog.fr.js +68 -0
  6. package/dist/i18n/catalog.it.d.ts +1 -0
  7. package/dist/i18n/catalog.it.js +68 -0
  8. package/dist/i18n/catalog.ja.d.ts +1 -0
  9. package/dist/i18n/catalog.ja.js +288 -0
  10. package/dist/i18n/catalog.ko.js +372 -26
  11. package/dist/i18n/catalog.th.d.ts +1 -0
  12. package/dist/i18n/catalog.th.js +68 -0
  13. package/dist/i18n/catalog.zh-cn.d.ts +1 -0
  14. package/dist/i18n/catalog.zh-cn.js +265 -0
  15. package/dist/i18n/catalog.zh-tw.d.ts +1 -0
  16. package/dist/i18n/catalog.zh-tw.js +52 -0
  17. package/dist/i18n/index.d.ts +7 -0
  18. package/dist/i18n/index.js +35 -2
  19. package/dist/parsers/archive/index.d.ts +16 -2
  20. package/dist/parsers/archive/index.js +39 -11
  21. package/dist/parsers/archive/model.d.ts +20 -0
  22. package/dist/parsers/audio/index.d.ts +3 -0
  23. package/dist/parsers/audio/index.js +5 -0
  24. package/dist/parsers/pptx/index.d.ts +2 -1
  25. package/dist/parsers/pptx/index.js +5 -2
  26. package/dist/parsers/video/index.d.ts +3 -0
  27. package/dist/parsers/video/index.js +3 -0
  28. package/dist/styles/archive.css +1 -0
  29. package/dist/styles/audio.css +8 -0
  30. package/dist/styles/ppt.css +1 -1
  31. package/dist/viewers/archive/index.d.ts +17 -1
  32. package/dist/viewers/archive/index.js +124 -21
  33. package/dist/viewers/archive/styles.d.ts +1 -1
  34. package/dist/viewers/archive/styles.js +1 -0
  35. package/dist/viewers/audio/styles.js +8 -0
  36. package/dist/viewers/pdf/editing.d.ts +6 -4
  37. package/dist/viewers/pdf/editing.js +47 -13
  38. package/dist/viewers/pdf/index.js +11 -10
  39. package/dist/viewers/ppt/chart.js +33 -7
  40. package/dist/viewers/ppt/render.js +53 -8
  41. package/dist/viewers/ppt/styles.d.ts +1 -1
  42. package/dist/viewers/ppt/styles.js +1 -1
  43. package/package.json +2 -2
  44. package/dist/viewers/hwp/self-loading.d.ts +0 -2
  45. package/dist/viewers/hwp/self-loading.js +0 -6
@@ -0,0 +1 @@
1
+ export declare const CATALOG_DE: Record<string, string>;
@@ -0,0 +1,68 @@
1
+ // German messages owned by core. Missing keys intentionally fall back to the
2
+ // English source catalog in i18n/index.ts.
3
+ export const CATALOG_DE = {
4
+ 'audio.title': 'Audio', 'video.title': 'Video', 'dbc.title': 'CAN-Datenbank',
5
+ 'audio.play': 'Wiedergabe', 'audio.pause': 'Pause', 'audio.stop': 'Stopp',
6
+ 'audio.loop': 'Schleife', 'audio.clearRegions': 'Bereiche löschen', 'audio.volume': 'Lautstärke',
7
+ 'audio.zoom': 'Zoom', 'audio.zoomIn': 'Vergrößern', 'audio.zoomOut': 'Verkleinern', 'audio.zoomFit': 'Anpassen',
8
+ 'audio.visualization': 'Ansicht', 'audio.vis.waveform': 'Wellenform', 'audio.vis.spectrogram': 'Spektrogramm',
9
+ 'audio.info.duration': 'Dauer', 'audio.info.sampleRate': 'Abtastrate', 'audio.info.channels': 'Kanäle',
10
+ 'audio.info.bitDepth': 'Bittiefe', 'audio.info.format': 'Format', 'audio.info.fileSize': 'Dateigröße',
11
+ 'audio.loading': 'Audio wird dekodiert…',
12
+ 'audio.status.region': 'Bereich {start} – {end} ({duration} s)',
13
+ 'audio.status.looping': 'Bereich wird wiederholt', 'audio.status.loopTrack': 'Titel wird wiederholt',
14
+ 'audio.fallback': 'Wellenform-Engine nicht verfügbar – der einfache Player wird verwendet.',
15
+ 'audio.error.decode': 'Der Browser konnte diesen Audio-Codec nicht dekodieren. Verwenden Sie einen Host mit dem erforderlichen Codec oder transkodieren Sie die Datei.',
16
+ 'video.play': 'Wiedergabe', 'video.pause': 'Pause', 'video.stop': 'Stopp',
17
+ 'video.skipBack': '⏪ -{seconds} s', 'video.skipForward': '⏩ +{seconds} s',
18
+ 'video.speed': 'Geschwindigkeit', 'video.zoom': 'Zoom', 'video.zoomIn': 'Vergrößern',
19
+ 'video.zoomOut': 'Verkleinern', 'video.zoomFit': 'Anpassen',
20
+ 'video.info.duration': 'Dauer', 'video.info.resolution': 'Auflösung',
21
+ 'video.info.format': 'Format', 'video.info.fileSize': 'Dateigröße',
22
+ 'video.error.empty': 'Die Mediendatei ist leer.',
23
+ 'video.error.tooLarge': 'Die Datei überschreitet das Browser-Vorschaulimit von {limit}.',
24
+ 'video.error.source': 'Diese Umgebung kann keine Browser-Medienquelle erstellen.',
25
+ 'video.error.decode': 'Der Browser konnte diesen Video-Codec nicht dekodieren. Verwenden Sie einen Host mit dem erforderlichen Codec oder transkodieren Sie die Datei.',
26
+ 'arxml.title': 'AUTOSAR XML', 'a2l.title': 'ASAM A2L', 'asc.title': 'Vector ASC-Log',
27
+ 'blf.title': 'Vector BLF-Log', 'mf4.title': 'ASAM MDF 4', 'pcap.title': 'PCAP-Aufzeichnung',
28
+ 'pcapng.title': 'PCAPNG-Aufzeichnung', 'mermaid.title': 'Mermaid-Diagramm',
29
+ 'plantuml.title': 'PlantUML-Diagramm', 'shapefile.title': 'ESRI Shapefile', 'psd.title': 'Photoshop-Dokument',
30
+ 'shapefile.zoomIn': 'Vergrößern', 'shapefile.zoomOut': 'Verkleinern', 'shapefile.reset': 'Ansicht zurücksetzen',
31
+ 'shapefile.projection': 'Projektion: {name}', 'shapefile.attributes': 'Objektattribute',
32
+ 'shapefile.featureLabel': 'Objekt {id}',
33
+ 'shapefile.noSelection': 'Klicken Sie auf ein Objekt auf der Karte, um seine Attribute anzuzeigen.',
34
+ 'shapefile.noAttributes': 'Für dieses Shapefile wurde keine Attributtabelle (.dbf) bereitgestellt.',
35
+ 'shapefile.noRecord': 'Für dieses Objekt gibt es keinen passenden Attributdatensatz.',
36
+ 'shapefile.dbfFailed': 'Die Attributtabelle (.dbf) konnte nicht gelesen werden:',
37
+ 'shapefile.reprojectFailed': 'Reprojektion fehlgeschlagen – die Koordinaten werden in der nativen Projektion angezeigt.',
38
+ 'avro.title': 'Apache Avro',
39
+ 'bag.title': 'ROS bag',
40
+ 'stp.title': 'STEP-Modell',
41
+ 'db3.title': 'SQLite-Datenbank',
42
+ 'reqif.title': 'Anforderungsaustauschformat',
43
+ 'automotive.search': 'Tabellen durchsuchen…',
44
+ 'automotive.copyJson': 'JSON kopieren',
45
+ 'automotive.rawPreview': 'Rohvorschau',
46
+ 'automotive.noData': 'Keine Daten verfügbar.',
47
+ 'automotive.rowsShown': '{shown} / {total} Zeilen angezeigt',
48
+ 'mat.title': 'MATLAB MAT-Datei',
49
+ 'mat.search': 'Variablen und Metadaten durchsuchen…',
50
+ 'mat.copyJson': 'JSON kopieren',
51
+ 'mat.rawPreview': 'Rohvorschau',
52
+ 'mat.noMatches': 'Keine Zeilen entsprechen der aktuellen Suche.',
53
+ 'mat.rowsShown': '{shown} / {total} Zeilen angezeigt',
54
+ 'hwp.title': 'HWP-Dokument',
55
+ 'hwp.zoomIn': 'Vergrößern',
56
+ 'hwp.zoomOut': 'Verkleinern',
57
+ 'hwp.reset': 'Zurücksetzen',
58
+ 'hwp.pages': '{count} Seiten',
59
+ 'hwp.pageLabel': 'Seite {page}',
60
+ 'hwp.empty': 'Dieses Dokument enthält keine Seiten.',
61
+ 'hwp.loadMorePages': 'Weitere Seiten laden',
62
+ 'hwp.loading': 'HWP/HWPX wird mit rhwp geladen…',
63
+ 'diag.hwp.missing-dependency': 'Der HWP-Renderer ist auf dieser Plattform nicht installiert.',
64
+ 'diag.hwp.invalid-format': 'Diese Datei konnte nicht als HWP-Dokument gelesen werden.',
65
+ 'diag.hwp.corrupted': 'Dieses HWP-Dokument ist beschädigt oder enthält ungültige Seitendaten.',
66
+ 'diag.hwp.limit-exceeded': 'Dieses HWP-Dokument überschreitet das Limit von 50 MB.',
67
+ 'diag.hwp.page-limit': 'Vorschau eines großen Dokuments: die ersten {rendered} von {total} Seiten wurden gerendert.'
68
+ };
@@ -116,6 +116,9 @@ export const CATALOG_EN = {
116
116
  'archive.textReady': 'Rendered as plain text from the selected archive entry.',
117
117
  'archive.binaryReady': 'Rendered as a hexadecimal preview from the selected archive entry.',
118
118
  'archive.androidBinaryXmlReady': 'Decoded from Android binary XML.',
119
+ 'archive.audioReady': 'Playing the selected audio entry.',
120
+ 'archive.imageReady': 'Showing the selected image entry.',
121
+ 'archive.videoReady': 'Playing the selected video entry.',
119
122
  'archive.directoryHint': 'Directory entries do not have inline file content.',
120
123
  'archive.directoryContent': 'This entry contains child items rather than file content.',
121
124
  'archive.saveEntry': 'Save entry', 'archive.savingEntry': 'Saving entry…',
@@ -0,0 +1 @@
1
+ export declare const CATALOG_FR: Record<string, string>;
@@ -0,0 +1,68 @@
1
+ // French messages owned by core. Missing keys intentionally fall back to the
2
+ // English source catalog in i18n/index.ts.
3
+ export const CATALOG_FR = {
4
+ 'audio.title': 'Audio', 'video.title': 'Vidéo', 'dbc.title': 'Base de données CAN',
5
+ 'audio.play': 'Lecture', 'audio.pause': 'Pause', 'audio.stop': 'Arrêt',
6
+ 'audio.loop': 'Boucle', 'audio.clearRegions': 'Effacer les régions', 'audio.volume': 'Volume',
7
+ 'audio.zoom': 'Zoom', 'audio.zoomIn': 'Zoom avant', 'audio.zoomOut': 'Zoom arrière', 'audio.zoomFit': 'Ajuster',
8
+ 'audio.visualization': 'Affichage', 'audio.vis.waveform': 'Forme d’onde', 'audio.vis.spectrogram': 'Spectrogramme',
9
+ 'audio.info.duration': 'Durée', 'audio.info.sampleRate': 'Fréquence d’échantillonnage', 'audio.info.channels': 'Canaux',
10
+ 'audio.info.bitDepth': 'Profondeur de bits', 'audio.info.format': 'Format', 'audio.info.fileSize': 'Taille du fichier',
11
+ 'audio.loading': 'Décodage de l’audio…',
12
+ 'audio.status.region': 'Région {start} – {end} ({duration} s)',
13
+ 'audio.status.looping': 'lecture en boucle de la région', 'audio.status.loopTrack': 'Lecture en boucle de la piste',
14
+ 'audio.fallback': 'Moteur de forme d’onde indisponible — utilisation du lecteur de base.',
15
+ '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.',
16
+ 'video.play': 'Lecture', 'video.pause': 'Pause', 'video.stop': 'Arrêt',
17
+ 'video.skipBack': '⏪ -{seconds} s', 'video.skipForward': '⏩ +{seconds} s',
18
+ 'video.speed': 'Vitesse', 'video.zoom': 'Zoom', 'video.zoomIn': 'Zoom avant',
19
+ 'video.zoomOut': 'Zoom arrière', 'video.zoomFit': 'Ajuster',
20
+ 'video.info.duration': 'Durée', 'video.info.resolution': 'Résolution',
21
+ 'video.info.format': 'Format', 'video.info.fileSize': 'Taille du fichier',
22
+ 'video.error.empty': 'Le fichier multimédia est vide.',
23
+ 'video.error.tooLarge': 'Le fichier dépasse la limite d’aperçu du navigateur ({limit}).',
24
+ 'video.error.source': 'Cet environnement ne peut pas créer de source multimédia de navigateur.',
25
+ 'video.error.decode': 'Le navigateur n’a pas pu décoder ce codec vidéo. Essayez un hôte disposant du codec requis ou transcodez le fichier.',
26
+ 'arxml.title': 'AUTOSAR XML', 'a2l.title': 'ASAM A2L', 'asc.title': 'Journal Vector ASC',
27
+ 'blf.title': 'Journal Vector BLF', 'mf4.title': 'ASAM MDF 4', 'pcap.title': 'Capture PCAP',
28
+ 'pcapng.title': 'Capture PCAPNG', 'mermaid.title': 'Diagramme Mermaid',
29
+ 'plantuml.title': 'Diagramme PlantUML', 'shapefile.title': 'ESRI Shapefile', 'psd.title': 'Document Photoshop',
30
+ 'shapefile.zoomIn': 'Zoom avant', 'shapefile.zoomOut': 'Zoom arrière', 'shapefile.reset': 'Réinitialiser la vue',
31
+ 'shapefile.projection': 'Projection : {name}', 'shapefile.attributes': 'Attributs de l’entité',
32
+ 'shapefile.featureLabel': 'Entité {id}',
33
+ 'shapefile.noSelection': 'Cliquez sur une entité de la carte pour inspecter ses attributs.',
34
+ 'shapefile.noAttributes': 'Aucune table attributaire (.dbf) n’a été fournie pour ce shapefile.',
35
+ 'shapefile.noRecord': 'Cette entité n’a aucun enregistrement attributaire correspondant.',
36
+ 'shapefile.dbfFailed': 'La table attributaire (.dbf) n’a pas pu être lue :',
37
+ 'shapefile.reprojectFailed': 'Échec de la reprojection — les coordonnées sont affichées dans la projection native.',
38
+ 'avro.title': 'Apache Avro',
39
+ 'bag.title': 'ROS bag',
40
+ 'stp.title': 'Modèle STEP',
41
+ 'db3.title': 'Base de données SQLite',
42
+ 'reqif.title': 'Format d’échange d’exigences',
43
+ 'automotive.search': 'Rechercher dans les tables…',
44
+ 'automotive.copyJson': 'Copier le JSON',
45
+ 'automotive.rawPreview': 'Aperçu brut',
46
+ 'automotive.noData': 'Aucune donnée disponible.',
47
+ 'automotive.rowsShown': '{shown} / {total} lignes affichées',
48
+ 'mat.title': 'Fichier MATLAB MAT',
49
+ 'mat.search': 'Rechercher variables et métadonnées…',
50
+ 'mat.copyJson': 'Copier le JSON',
51
+ 'mat.rawPreview': 'Aperçu brut',
52
+ 'mat.noMatches': 'Aucune ligne ne correspond à la recherche actuelle.',
53
+ 'mat.rowsShown': '{shown} / {total} lignes affichées',
54
+ 'hwp.title': 'Document HWP',
55
+ 'hwp.zoomIn': 'Zoom avant',
56
+ 'hwp.zoomOut': 'Zoom arrière',
57
+ 'hwp.reset': 'Réinitialiser',
58
+ 'hwp.pages': '{count} pages',
59
+ 'hwp.pageLabel': 'Page {page}',
60
+ 'hwp.empty': 'Ce document ne contient aucune page.',
61
+ 'hwp.loadMorePages': 'Charger les pages suivantes',
62
+ 'hwp.loading': 'Chargement du HWP/HWPX avec rhwp…',
63
+ 'diag.hwp.missing-dependency': 'Le moteur de rendu HWP n’est pas installé sur cette plateforme.',
64
+ 'diag.hwp.invalid-format': 'Ce fichier n’a pas pu être lu en tant que document HWP.',
65
+ 'diag.hwp.corrupted': 'Ce document HWP est endommagé ou contient des données de page non valides.',
66
+ 'diag.hwp.limit-exceeded': 'Ce document HWP dépasse la limite de 50 Mo.',
67
+ 'diag.hwp.page-limit': 'Aperçu de document volumineux : {rendered} premières pages sur {total} affichées.'
68
+ };
@@ -0,0 +1 @@
1
+ export declare const CATALOG_IT: Record<string, string>;
@@ -0,0 +1,68 @@
1
+ // Italian messages owned by core. Missing keys intentionally fall back to the
2
+ // English source catalog in i18n/index.ts.
3
+ export const CATALOG_IT = {
4
+ 'audio.title': 'Audio', 'video.title': 'Video', 'dbc.title': 'Database CAN',
5
+ 'audio.play': 'Riproduci', 'audio.pause': 'Pausa', 'audio.stop': 'Arresta',
6
+ 'audio.loop': 'Ripeti', 'audio.clearRegions': 'Cancella regioni', 'audio.volume': 'Volume',
7
+ 'audio.zoom': 'Zoom', 'audio.zoomIn': 'Ingrandisci', 'audio.zoomOut': 'Riduci', 'audio.zoomFit': 'Adatta',
8
+ 'audio.visualization': 'Vista', 'audio.vis.waveform': 'Forma d’onda', 'audio.vis.spectrogram': 'Spettrogramma',
9
+ 'audio.info.duration': 'Durata', 'audio.info.sampleRate': 'Frequenza di campionamento', 'audio.info.channels': 'Canali',
10
+ 'audio.info.bitDepth': 'Profondità di bit', 'audio.info.format': 'Formato', 'audio.info.fileSize': 'Dimensione file',
11
+ 'audio.loading': 'Decodifica dell’audio…',
12
+ 'audio.status.region': 'Regione {start} – {end} ({duration} s)',
13
+ 'audio.status.looping': 'ripetizione della regione', 'audio.status.loopTrack': 'Ripetizione del brano',
14
+ 'audio.fallback': 'Motore della forma d’onda non disponibile — si utilizza il lettore di base.',
15
+ 'audio.error.decode': 'Il browser non è riuscito a decodificare questo codec audio. Prova un host con il codec richiesto o transcodifica il file.',
16
+ 'video.play': 'Riproduci', 'video.pause': 'Pausa', 'video.stop': 'Arresta',
17
+ 'video.skipBack': '⏪ -{seconds} s', 'video.skipForward': '⏩ +{seconds} s',
18
+ 'video.speed': 'Velocità', 'video.zoom': 'Zoom', 'video.zoomIn': 'Ingrandisci',
19
+ 'video.zoomOut': 'Riduci', 'video.zoomFit': 'Adatta',
20
+ 'video.info.duration': 'Durata', 'video.info.resolution': 'Risoluzione',
21
+ 'video.info.format': 'Formato', 'video.info.fileSize': 'Dimensione file',
22
+ 'video.error.empty': 'Il file multimediale è vuoto.',
23
+ 'video.error.tooLarge': 'Il file supera il limite di anteprima del browser ({limit}).',
24
+ 'video.error.source': 'Questo ambiente non può creare una sorgente multimediale del browser.',
25
+ 'video.error.decode': 'Il browser non è riuscito a decodificare questo codec video. Prova un host con il codec richiesto o transcodifica il file.',
26
+ 'arxml.title': 'AUTOSAR XML', 'a2l.title': 'ASAM A2L', 'asc.title': 'Log Vector ASC',
27
+ 'blf.title': 'Log Vector BLF', 'mf4.title': 'ASAM MDF 4', 'pcap.title': 'Cattura PCAP',
28
+ 'pcapng.title': 'Cattura PCAPNG', 'mermaid.title': 'Diagramma Mermaid',
29
+ 'plantuml.title': 'Diagramma PlantUML', 'shapefile.title': 'ESRI Shapefile', 'psd.title': 'Documento Photoshop',
30
+ 'shapefile.zoomIn': 'Ingrandisci', 'shapefile.zoomOut': 'Riduci', 'shapefile.reset': 'Reimposta vista',
31
+ 'shapefile.projection': 'Proiezione: {name}', 'shapefile.attributes': 'Attributi dell’elemento',
32
+ 'shapefile.featureLabel': 'Elemento {id}',
33
+ 'shapefile.noSelection': 'Fai clic su un elemento della mappa per esaminarne gli attributi.',
34
+ 'shapefile.noAttributes': 'Nessuna tabella degli attributi (.dbf) è stata fornita per questo shapefile.',
35
+ 'shapefile.noRecord': 'Questo elemento non ha alcun record di attributi corrispondente.',
36
+ 'shapefile.dbfFailed': 'Impossibile leggere la tabella degli attributi (.dbf):',
37
+ 'shapefile.reprojectFailed': 'Riproiezione non riuscita — le coordinate sono mostrate nella proiezione nativa.',
38
+ 'avro.title': 'Apache Avro',
39
+ 'bag.title': 'ROS bag',
40
+ 'stp.title': 'Modello STEP',
41
+ 'db3.title': 'Database SQLite',
42
+ 'reqif.title': 'Formato di scambio dei requisiti',
43
+ 'automotive.search': 'Cerca nelle tabelle…',
44
+ 'automotive.copyJson': 'Copia JSON',
45
+ 'automotive.rawPreview': 'Anteprima non elaborata',
46
+ 'automotive.noData': 'Nessun dato disponibile.',
47
+ 'automotive.rowsShown': '{shown} / {total} righe mostrate',
48
+ 'mat.title': 'File MATLAB MAT',
49
+ 'mat.search': 'Cerca variabili e metadati…',
50
+ 'mat.copyJson': 'Copia JSON',
51
+ 'mat.rawPreview': 'Anteprima non elaborata',
52
+ 'mat.noMatches': 'Nessuna riga corrisponde alla ricerca corrente.',
53
+ 'mat.rowsShown': '{shown} / {total} righe mostrate',
54
+ 'hwp.title': 'Documento HWP',
55
+ 'hwp.zoomIn': 'Ingrandisci',
56
+ 'hwp.zoomOut': 'Riduci',
57
+ 'hwp.reset': 'Reimposta',
58
+ 'hwp.pages': '{count} pagine',
59
+ 'hwp.pageLabel': 'Pagina {page}',
60
+ 'hwp.empty': 'Questo documento non ha pagine.',
61
+ 'hwp.loadMorePages': 'Carica le pagine successive',
62
+ 'hwp.loading': 'Caricamento di HWP/HWPX con rhwp…',
63
+ 'diag.hwp.missing-dependency': 'Il renderer HWP non è installato su questa piattaforma.',
64
+ 'diag.hwp.invalid-format': 'Impossibile leggere questo file come documento HWP.',
65
+ 'diag.hwp.corrupted': 'Questo documento HWP è danneggiato o contiene dati di pagina non validi.',
66
+ 'diag.hwp.limit-exceeded': 'Questo documento HWP supera il limite di 50 MB.',
67
+ 'diag.hwp.page-limit': 'Anteprima di documento grande: renderizzate le prime {rendered} pagine su {total}.'
68
+ };
@@ -0,0 +1 @@
1
+ export declare const CATALOG_JA: Record<string, string>;
@@ -0,0 +1,288 @@
1
+ // Japanese messages owned by core. Keep the key set aligned with CATALOG_EN.
2
+ export const CATALOG_JA = {
3
+ 'audio.title': 'オーディオ', 'video.title': '動画', 'dbc.title': 'CANデータベース',
4
+ 'audio.play': '再生', 'audio.pause': '一時停止', 'audio.stop': '停止',
5
+ 'audio.loop': 'ループ', 'audio.clearRegions': '範囲をクリア', 'audio.volume': '音量',
6
+ 'audio.zoom': 'ズーム', 'audio.zoomIn': '拡大', 'audio.zoomOut': '縮小', 'audio.zoomFit': '全体表示',
7
+ 'audio.visualization': '表示', 'audio.vis.waveform': '波形', 'audio.vis.spectrogram': 'スペクトログラム',
8
+ 'audio.info.duration': '再生時間', 'audio.info.sampleRate': 'サンプルレート', 'audio.info.channels': 'チャンネル',
9
+ 'audio.info.bitDepth': 'ビット深度', 'audio.info.format': '形式', 'audio.info.fileSize': 'ファイルサイズ',
10
+ 'audio.loading': 'オーディオをデコード中…',
11
+ 'audio.status.region': '範囲 {start}~{end}({duration}秒)',
12
+ 'audio.status.looping': '範囲をループ中', 'audio.status.loopTrack': 'トラックをループ中',
13
+ 'audio.fallback': '波形エンジンを使用できないため、基本プレーヤーを使用します。',
14
+ 'audio.error.decode': 'ブラウザーでこのオーディオコーデックをデコードできません。必要なコーデックを備えた環境を使用するか、ファイルを変換してください。',
15
+ 'video.play': '再生', 'video.pause': '一時停止', 'video.stop': '停止',
16
+ 'video.skipBack': '⏪ -{seconds}秒', 'video.skipForward': '⏩ +{seconds}秒',
17
+ 'video.speed': '再生速度', 'video.zoom': 'ズーム', 'video.zoomIn': '拡大',
18
+ 'video.zoomOut': '縮小', 'video.zoomFit': '全体表示',
19
+ 'video.info.duration': '再生時間', 'video.info.resolution': '解像度',
20
+ 'video.info.format': '形式', 'video.info.fileSize': 'ファイルサイズ',
21
+ 'video.error.empty': 'メディアファイルが空です。',
22
+ 'video.error.tooLarge': 'ファイルがブラウザープレビューの上限({limit})を超えています。',
23
+ 'video.error.source': 'この環境ではブラウザー用メディアソースを作成できません。',
24
+ 'video.error.decode': 'ブラウザーでこの動画コーデックをデコードできません。必要なコーデックを備えた環境を使用するか、ファイルを変換してください。',
25
+ 'arxml.title': 'AUTOSAR XML', 'a2l.title': 'ASAM A2L', 'asc.title': 'Vector ASCログ',
26
+ 'blf.title': 'Vector BLFログ', 'mf4.title': 'ASAM MDF 4', 'pcap.title': 'PCAPキャプチャ',
27
+ 'pcapng.title': 'PCAPNGキャプチャ', 'mermaid.title': 'Mermaidダイアグラム',
28
+ 'plantuml.title': 'PlantUMLダイアグラム', 'shapefile.title': 'ESRI Shapefile', 'psd.title': 'Photoshopドキュメント',
29
+ 'shapefile.zoomIn': '拡大', 'shapefile.zoomOut': '縮小', 'shapefile.reset': '表示をリセット',
30
+ 'shapefile.projection': '投影法: {name}', 'shapefile.attributes': '地物の属性',
31
+ 'shapefile.featureLabel': '地物 {id}',
32
+ 'shapefile.noSelection': '地図上の地物をクリックすると属性を確認できます。',
33
+ 'shapefile.noAttributes': 'このShapefileには属性テーブル(.dbf)がありません。',
34
+ 'shapefile.noRecord': 'この地物に対応する属性レコードがありません。',
35
+ 'shapefile.dbfFailed': '属性テーブル(.dbf)を読み込めませんでした:',
36
+ 'shapefile.reprojectFailed': '再投影に失敗したため、ネイティブ投影の座標を表示します。',
37
+ 'avro.title': 'Apache Avro', 'bag.title': 'ROS bag', 'stp.title': 'STEPモデル',
38
+ 'db3.title': 'SQLiteデータベース', 'reqif.title': '要件交換フォーマット',
39
+ 'automotive.search': 'テーブルを検索…', 'automotive.copyJson': 'JSONをコピー',
40
+ 'automotive.rawPreview': 'RAWプレビュー', 'automotive.noData': '表示できるデータがありません。',
41
+ 'automotive.rowsShown': '{total}行中{shown}行を表示',
42
+ 'mat.title': 'MATLAB MATファイル', 'mat.search': '変数とメタデータを検索…',
43
+ 'mat.copyJson': 'JSONをコピー', 'mat.rawPreview': 'RAWプレビュー',
44
+ 'mat.noMatches': '現在の検索に一致する行はありません。', 'mat.rowsShown': '{total}行中{shown}行を表示',
45
+ 'hdf5.title': 'HDF5', 'hdf5.search': 'テーブルを検索…', 'hdf5.copyJson': 'JSONをコピー',
46
+ 'hdf5.structure': '構造', 'hdf5.noData': '表示できるデータがありません。',
47
+ 'hdf5.matchingRows': '一致する行: {count}件',
48
+ 'hdf5.matchingRowsLimited': '一致する{total}行中{visible}行を表示',
49
+ 'proto.title': 'Protocol Buffer', 'proto.summary': '{syntax} · {package} · メッセージ{messages}件 · サービス{services}件',
50
+ 'proto.noPackage': 'パッケージなし', 'proto.search': 'メッセージ、フィールド、列挙型、RPCを検索', 'proto.copyPanel': 'パネルをコピー',
51
+ 'proto.panel.tree': 'メッセージツリー', 'proto.panel.types': '型', 'proto.panel.relationships': '関係',
52
+ 'proto.panel.reverse': '参照元', 'proto.panel.json': 'JSON例', 'proto.panel.breaking': '破壊的変更',
53
+ 'proto.panel.imports': 'インポート', 'proto.panel.grpc': 'gRPC', 'proto.panel.docs': 'ドキュメント',
54
+ 'proto.kind.message': 'メッセージ', 'proto.kind.enum': '列挙型', 'proto.kind.service': 'サービス', 'proto.kind.field': 'フィールド',
55
+ 'proto.kind.repeated': '反復', 'proto.kind.oneof': 'oneof', 'proto.kind.value': '値', 'proto.kind.rpc': 'RPC',
56
+ 'proto.kind.stream': 'ストリーム', 'proto.kind.import': 'インポート',
57
+ 'proto.reverseRow': '{from} が {name} を介して {to} を使用', 'proto.noReferences': '{name} への参照はありません。',
58
+ 'proto.noMessages': 'メッセージがありません。', 'proto.noDocumentation': 'ドキュメントコメントがありません。',
59
+ 'proto.noDeclarations': '宣言がありません。', 'proto.breaking.placeholder': '以前の.protoの内容をここに貼り付け',
60
+ 'proto.breaking.compare': '比較', 'proto.breaking.breaking': '破壊的',
61
+ 'proto.breaking.none': '構造比較では破壊的変更は検出されませんでした。',
62
+ 'proto.breaking.messageRemoved': 'メッセージが削除されました: {name}。',
63
+ 'proto.breaking.fieldRemoved': 'フィールドが削除されました: {message}.{field}(番号 {number})。',
64
+ 'proto.breaking.fieldChanged': '{message} のフィールド番号 {number} の名前または型が変更されました。',
65
+ 'parquet.title': 'Parquet', 'parquet.search': '行を検索…', 'parquet.raw': 'RAW', 'parquet.table': 'テーブル',
66
+ 'parquet.copyJson': 'JSONをコピー', 'parquet.exportJson': 'JSONをエクスポート',
67
+ 'parquet.loadMore': '次の{count}行を読み込む', 'parquet.loading': '読み込み中…',
68
+ 'parquet.loadFailed': '追加の行を読み込めませんでした: {message}', 'parquet.rows': '行', 'parquet.columns': '列',
69
+ 'parquet.limited': '大きなファイルのプレビュー: {total}行中{loaded}行を読み込み済み。',
70
+ 'parquet.copyCell': 'セルの値をコピー', 'parquet.copyRow': '行をJSONとしてコピー', 'parquet.copyColumn': '列の値をコピー',
71
+ 'parquet.autoFit': '列幅を自動調整', 'parquet.resize': 'ドラッグでサイズ変更 · ダブルクリックで自動調整',
72
+ 'parquet.copyTable': 'テーブルをコピー', 'parquet.copied': 'クリップボードにコピーしました',
73
+ 'word.title': 'Word文書', 'word.zoomIn': '拡大', 'word.zoomOut': '縮小',
74
+ 'word.reset': 'リセット', 'word.print': '印刷', 'word.printUnavailable': 'この環境では印刷を利用できません。',
75
+ 'word.empty': 'この文書には読み取り可能なテキストがありません。',
76
+ 'diag.word.invalid-format': 'このファイルをWord文書として読み込めませんでした。',
77
+ 'diag.word.missing-dependency': 'この環境にはDOCXレンダラーがインストールされていません。',
78
+ 'diag.word.limit-exceeded': 'このWord文書は50 MBの上限を超えています。',
79
+ 'diag.word.decompression-limit': 'このWord文書は、安全に開ける量を超える展開後データを宣言しています。',
80
+ 'diag.word.legacy-partial': '一部の旧形式のWord書式を表示できませんでした。',
81
+ 'diag.word.embedded-partial': '一部の埋め込みWordオブジェクトを表示できませんでした。', 'word.image': '埋め込み画像',
82
+ 'hwp.title': 'HWP文書', 'hwp.zoomIn': '拡大', 'hwp.zoomOut': '縮小',
83
+ 'hwp.reset': 'リセット', 'hwp.pages': '{count}ページ', 'hwp.pageLabel': '{page}ページ目',
84
+ 'hwp.empty': 'この文書にはページがありません。', 'hwp.loadMorePages': '次のページを読み込む', 'hwp.loading': 'rhwpでHWP/HWPXを読み込み中…',
85
+ 'diag.hwp.missing-dependency': 'この環境にはHWPレンダラーがインストールされていません。',
86
+ 'diag.hwp.invalid-format': 'このファイルをHWP文書として読み込めませんでした。',
87
+ 'diag.hwp.corrupted': 'このHWP文書は破損しているか、無効なページデータを含んでいます。',
88
+ 'diag.hwp.limit-exceeded': 'このHWP文書は50 MBの上限を超えています。',
89
+ 'diag.hwp.page-limit': '大きな文書のプレビュー: {total}ページ中、最初の{rendered}ページを表示しています。',
90
+ 'ppt.title': 'PowerPoint', 'ppt.previous': '前のスライド', 'ppt.next': '次のスライド',
91
+ 'ppt.jump': 'スライドへ移動', 'ppt.mode.single': '単一スライド', 'ppt.mode.continuous': '連続表示',
92
+ 'ppt.empty': 'このプレゼンテーションにはスライドがありません。',
93
+ 'diag.ppt.invalid-format': 'このファイルをPowerPointプレゼンテーションとして読み込めませんでした。',
94
+ 'diag.ppt.empty': 'このプレゼンテーションには表示可能なスライドがありません。',
95
+ 'diag.ppt.pdf-missing-dependency': 'PDFフォールバックには、この環境のPDF.jsが必要です。',
96
+ 'diag.ppt.limit-exceeded': 'このプレゼンテーションの一部だけを読み込めました。',
97
+ 'markdown.title': 'Markdown', 'markdown.preview': 'プレビュー', 'markdown.split': '分割', 'markdown.source': 'ソース',
98
+ 'markdown.render': 'レンダリング', 'markdown.copyHtml': 'HTMLをコピー', 'markdown.copySource': 'ソースをコピー',
99
+ 'markdown.undo': '元に戻す', 'markdown.redo': 'やり直す', 'markdown.ready': '準備完了',
100
+ 'markdown.rendering': 'レンダリング中', 'markdown.rendered': 'レンダリング済み', 'markdown.renderFailed': 'レンダリングに失敗しました',
101
+ 'markdown.invalid': '無効', 'markdown.modified': '変更済み', 'markdown.editable': '編集可能',
102
+ 'markdown.edited': '編集済み', 'markdown.htmlCopied': 'HTMLをコピーしました', 'markdown.sourceCopied': 'ソースをコピーしました',
103
+ 'markdown.summary': '{lines}行、{words}語', 'markdown.renderedDiagrams': 'レンダリング済み · ダイアグラム{count}件',
104
+ 'markdown.diagramFailed': 'ダイアグラムをレンダリングできません。', 'markdown.toc': '目次',
105
+ 'markdown.copyCode': 'コードをコピー', 'markdown.assetUnavailable': '画像を利用できません',
106
+ 'diag.markdown.limit-exceeded': 'Markdown文書が対応上限を超えています。',
107
+ 'archive.title': 'アーカイブ', 'archive.search': '項目を検索', 'archive.entries': '{count}項目',
108
+ 'archive.previewUnavailable': 'プレビューできません', 'archive.mediaUnsupported': 'メディアのプレビューには対応していません。',
109
+ 'archive.encrypted': 'このアーカイブは暗号化されています。', 'diag.archive.invalid-format': 'このファイルをアーカイブとして読み込めませんでした。',
110
+ 'diag.archive.limit-exceeded': 'アーカイブが対応上限を超えています。',
111
+ 'archive.preview': 'アーカイブプレビュー', 'archive.summary': '読み取り専用プレビューモードでアーカイブ構造を参照しています。',
112
+ 'archive.filter': 'フィルター', 'archive.path': 'パス', 'archive.type': '種類',
113
+ 'archive.compressedSize': '圧縮サイズ', 'archive.originalSize': '元のサイズ', 'archive.modified': '更新日時',
114
+ 'archive.files': 'ファイル', 'archive.directories': 'ディレクトリ', 'archive.visible': '表示中',
115
+ 'archive.file': 'ファイル', 'archive.directory': 'ディレクトリ', 'archive.noMatches': '一致する項目がありません。',
116
+ 'archive.entryPreview': '項目のプレビュー', 'archive.chooseFile': 'ファイルを選択', 'archive.idle': '待機中',
117
+ 'archive.selectHint': '内容を確認するアーカイブ項目を選択してください。', 'archive.noSelection': 'ファイルが選択されていません。',
118
+ 'archive.loading': '読み込み中', 'archive.loadingHint': '簡易プレビュー用にアーカイブからファイル内容を取得しています。',
119
+ 'archive.loadingContent': 'プレビューを読み込み中…', 'archive.ready': '準備完了',
120
+ 'archive.textReady': '選択したアーカイブ項目をプレーンテキストとして表示しました。',
121
+ 'archive.binaryReady': '選択したアーカイブ項目を16進数プレビューとして表示しました。',
122
+ 'archive.androidBinaryXmlReady': 'AndroidバイナリXMLからデコードしました。',
123
+ 'archive.audioReady': '選択した音声エントリを再生しています。',
124
+ 'archive.imageReady': '選択した画像エントリを表示しています。',
125
+ 'archive.videoReady': '選択した動画エントリを再生しています。',
126
+ 'archive.directoryHint': 'ディレクトリ項目にはインラインのファイル内容がありません。',
127
+ 'archive.directoryContent': 'この項目にはファイル内容ではなく子項目が含まれています。',
128
+ 'archive.saveEntry': '項目を保存', 'archive.savingEntry': '項目を保存中…',
129
+ 'archive.saveFailed': '選択した項目を保存できませんでした。',
130
+ 'diag.toml.invalid-table': 'TOMLテーブル宣言が無効です。',
131
+ 'diag.toml.invalid-assignment': 'TOMLのキーと値の代入が必要です。',
132
+ 'diag.toml.invalid-key': 'TOMLキーが無効です。',
133
+ 'diag.toml.invalid-inline-table': 'TOMLインラインテーブルの項目が無効です。',
134
+ 'diag.toml.duplicate-key': 'TOMLキーが重複しています。',
135
+ 'diag.toml.max-depth': 'TOMLのネストが深すぎます。',
136
+ 'diag.toml.node-limit': 'TOMLノードの上限に達しました。',
137
+ 'diag.toml.table-limit': 'TOMLテーブルの上限に達しました。',
138
+ 'diag.toml.array-limit': 'TOML配列の上限に達しました。',
139
+ 'diag.toml.duplicate-table': 'TOMLテーブルが重複しています。',
140
+ 'diag.toml.unclosed-value': 'TOMLの値が閉じられていません。',
141
+ 'diag.jsonl.invalid-line': '{line}行目は有効なJSONではありません。',
142
+ 'diag.jsonl.line-limit': '{line}行目がJSONLの行上限を超えています。',
143
+ 'diag.yaml.missing-dependency': 'この環境にはYAMLパーサーがインストールされていません。',
144
+ 'diag.yaml.invalid': 'このファイルをYAMLとして解析できませんでした。',
145
+ 'diag.yaml.document-limit': '最初の{count}個のYAML文書だけを解析しました。',
146
+ 'diag.yaml.node-limit': 'YAMLノードの上限に達しました。',
147
+ 'diag.yaml.depth-limit': 'YAMLのネスト深度上限に達しました。',
148
+ 'diag.yaml.alias-limit': 'YAMLエイリアスの上限に達しました。',
149
+ 'structured.tree': 'ツリー', 'structured.flat': 'フラット', 'structured.json': 'JSON', 'structured.raw': 'RAW', 'structured.expandAll': 'すべて展開',
150
+ 'structured.collapseAll': 'すべて折りたたむ', 'structured.expand': '展開', 'structured.collapse': '折りたたむ',
151
+ 'structured.search': '検索', 'structured.copy': 'コピー', 'structured.copyPath': 'パス',
152
+ 'structured.copyValue': '値', 'structured.copyJson': 'JSON',
153
+ 'structured.source': 'ソース', 'structured.sourceDescription': '編集可能な元のテキスト',
154
+ 'structured.treeDescription': '構造化プレビュー',
155
+ 'toml.treeView': 'TOML', 'yaml.treeView': 'YAML', 'jsonl.title': 'JSON Lines',
156
+ 'jsonl.loadMore': 'さらに読み込む', 'jsonl.loadAll': 'すべて読み込む', 'jsonl.save': '保存',
157
+ 'jsonl.editUnavailable': '編集には完全なファイルが必要です。', 'diag.jsonl.load-failed': 'JSON Linesデータを追加で読み込めませんでした。',
158
+ 'jsonl.add': '行を追加', 'jsonl.delete': '選択項目を削除', 'jsonl.edit': '編集', 'jsonl.apply': '適用',
159
+ 'jsonl.cancel': 'キャンセル', 'jsonl.preview': '検索と選択は読み込み済みのプレビューだけに適用されます。',
160
+ 'jsonl.showMore': 'さらに5,000行を表示', 'jsonl.invalidSave': '保存する前に無効な編集行を修正してください。',
161
+ 'jsonl.rowValid': '{line}行目、有効なJSON', 'jsonl.rowInvalid': '{line}行目、無効なJSON',
162
+ 'diag.limit-exceeded.rows': '行数の上限に達したため、最初の{count}行だけを解析しました。',
163
+ 'diag.limit-exceeded.input': 'ファイルが対応する最大サイズ({maxBytes}バイト)を超えています。',
164
+ 'diag.limit-exceeded.decompressed': 'アーカイブの展開後データが対応上限({maxBytes}バイト)を超えています。',
165
+ 'diag.aborted': '解析がキャンセルされました。',
166
+ 'diag.csv.ragged-rows': '{count}行の列数が異なるため、補完または切り詰められました。',
167
+ 'diag.limit-exceeded.nodes': 'ノード数の上限に達したため、最初の{count}ノードだけを解析しました。',
168
+ 'diag.json.invalid': 'このファイルをJSONとして解析できませんでした。',
169
+ 'diag.json.invalid-token': 'JSONに予期しない文字があります。ここで解析を停止しました。',
170
+ 'diag.json.unexpected-eof': 'JSONが予期せず終了しました。',
171
+ 'diag.json.unterminated-string': '入力の末尾までに文字列が閉じられていません。',
172
+ 'diag.json.duplicate-key': 'キー「{key}」が重複しています。両方の項目を保持します。',
173
+ 'diag.json.trailing-content': 'JSON値の後にある余分な内容を無視しました。',
174
+ 'diag.json.max-depth': 'ネストが深すぎるため、深度上限で解析を停止しました。',
175
+ 'diag.json.invalid-escape': '文字列のエスケープシーケンスが無効です。',
176
+ 'diag.json.invalid-unicode-escape': '\\uエスケープが無効です。4桁の16進数が必要です。',
177
+ 'diag.json.control-char': '文字列にエスケープされていない制御文字があります。',
178
+ 'diag.limit-exceeded.cells': 'セル数の上限に達したため、最初の{count}セルだけを解析しました。',
179
+ 'diag.excel.invalid-format': 'このファイルをスプレッドシートとして読み込めませんでした。',
180
+ 'diag.excel.password-required': 'このスプレッドシートはパスワードで保護されています。',
181
+ 'diag.excel.empty-workbook': 'ワークブックにデータがありません。',
182
+ 'diag.excel.missing-dependency': 'この環境ではスプレッドシートエンジンを読み込めませんでした。',
183
+ 'common.rows': '{count}行', 'common.columns': '{count}列',
184
+ 'common.page': '{page} / {pages}ページ', 'common.prevPage': '前のページ', 'common.nextPage': '次のページ',
185
+ 'common.rowsMatched': '{total}行中{matched}行が一致', 'common.copied': 'クリップボードにコピーしました',
186
+ 'common.noClipboard': 'この環境ではコピーを利用できません',
187
+ 'common.copyTooLarge': 'クリップボードにコピーするには大きすぎます({size}バイト)。代わりにファイルへエクスポートしてください。',
188
+ 'common.noFileSave': 'この環境ではファイルを保存できません', 'common.saved': '{name}を保存しました',
189
+ 'common.savedToOriginal': '保存しました', 'common.saveFailed': '保存に失敗しました',
190
+ 'common.unsaved': '未保存の変更', 'common.noWriteback': '元のファイルには保存できません。ファイルのエクスポートを使用してください。',
191
+ 'csv.delimiter': '区切り文字', 'csv.delimiter.auto': '自動検出',
192
+ 'csv.delimiter.comma': 'カンマ(,)', 'csv.delimiter.semicolon': 'セミコロン(;)',
193
+ 'csv.delimiter.tab': 'タブ', 'csv.delimiter.pipe': 'パイプ(|)',
194
+ 'csv.copyTsv': 'TSVとしてコピー', 'csv.copyJson': 'JSONとしてコピー', 'csv.exportFile': 'エクスポート',
195
+ 'csv.exportFile.hint': '現在の検索結果と並べ替え結果を新しいファイルに保存',
196
+ 'csv.editUnavailable': '編集には完全に解析されたファイルが必要です',
197
+ 'csv.addRow': '行を追加', 'csv.addColumn': '列を追加', 'csv.insertRowBelow': '下に行を挿入',
198
+ 'csv.deleteRow': '行を削除', 'csv.insertColumnLeft': '左に列を挿入', 'csv.insertColumnRight': '右に列を挿入',
199
+ 'csv.deleteColumn': '列を削除', 'csv.undo': '元に戻す', 'csv.redo': 'やり直す',
200
+ 'csv.save': '保存', 'csv.saveAs': '名前を付けて保存', 'csv.statistics': '統計',
201
+ 'csv.rawView': 'RAW', 'csv.tableView': 'テーブル', 'csv.sort.hint': 'クリックして並べ替え',
202
+ 'csv.header.hint': 'クリックで並べ替え · ダブルクリックで名前を変更',
203
+ 'csv.resizeColumn': 'ドラッグでサイズ変更 · ダブルクリックでリセット',
204
+ 'csv.search': '検索', 'csv.noMatches': '読み込み済みの範囲に一致する行はありません。',
205
+ 'csv.rowNumbers': '行番号', 'csv.pageSize': '1ページあたりの行数',
206
+ 'csv.stats.compact.count': 'n={count}', 'csv.stats.compact.nulls': 'null {percent}',
207
+ 'csv.stats.compact.numeric': 'μ{mean} · {min}~{max}', 'csv.stats.count': '件数',
208
+ 'csv.stats.nulls': 'Null', 'csv.stats.mean': '平均', 'csv.stats.min': '最小', 'csv.stats.max': '最大',
209
+ 'csv.empty': 'このファイルには行がありません。',
210
+ 'excel.tableView': 'スプレッドシート', 'excel.sheet': 'シート', 'excel.search': 'シート内を検索…',
211
+ 'excel.viewMode': '表示', 'excel.tableViewLabel': 'テーブル', 'excel.gridView': 'グリッド', 'excel.rawView': 'RAW',
212
+ 'excel.gridTruncated': '大きなシートのため、最初の{count}行だけを表示しています。',
213
+ 'excel.tableViewToggle': 'テーブル表示', 'excel.copyTsv': 'TSVとしてコピー', 'excel.copyJson': 'JSONとしてコピー',
214
+ 'excel.export': 'XLSXをエクスポート', 'excel.matchedCells': '一致するセル: {count}件',
215
+ 'excel.sortHint': 'クリックで並べ替え · ダブルクリックで名前を変更',
216
+ 'excel.resizeColumn': 'ドラッグでサイズ変更 · ダブルクリックでリセット',
217
+ 'excel.editHint': 'ダブルクリックして編集', 'excel.editUnavailable': '編集には完全に解析されたスプレッドシートが必要です。',
218
+ 'excel.undo': '元に戻す', 'excel.redo': 'やり直す', 'excel.insertRowBelow': '下に行を挿入',
219
+ 'excel.deleteRow': '行を削除', 'excel.empty': 'このシートにはセルがありません。',
220
+ 'json.treeView': 'JSON', 'json.view.tree': 'ツリー', 'json.view.source': 'ソース',
221
+ 'json.save': '保存', 'json.saveAs': '名前を付けて保存', 'json.editor.title': 'エディター',
222
+ 'json.editor.description': 'ソーステキストを編集して操作を適用', 'json.preview.title': 'プレビュー',
223
+ 'json.preview.description': '構文強調表示されたJSON', 'json.form.verbatim': '元の形式',
224
+ 'json.form.pretty': '整形', 'json.form.minified': '圧縮', 'json.expandAll': 'すべて展開',
225
+ 'json.collapseAll': 'すべて折りたたむ', 'json.expandNode': '展開', 'json.collapseNode': '折りたたむ',
226
+ 'json.search': '検索', 'json.matchInfo': '{current} / {total}', 'json.noMatches': '一致なし',
227
+ 'json.prevMatch': '前の一致', 'json.nextMatch': '次の一致', 'json.copyPath': 'パス',
228
+ 'json.copyValue': '値', 'json.stats': '{total}ノード · 深度{depth}', 'json.empty': '空',
229
+ 'json.tool.format': '整形', 'json.tool.minify': '圧縮', 'json.tool.sort': 'キーを並べ替え',
230
+ 'json.tool.validate': '検証', 'json.tool.escape': 'エスケープ', 'json.tool.unescape': 'エスケープ解除',
231
+ 'json.tool.base64Encode': 'Base64 →', 'json.tool.base64Decode': 'Base64 ←',
232
+ 'json.tool.toCsv': '→ CSV', 'json.tool.toXml': '→ XML', 'json.tool.toYaml': '→ YAML',
233
+ 'json.tool.formatted': '整形しました', 'json.tool.minified': '圧縮しました', 'json.tool.sorted': 'キーを並べ替えました',
234
+ 'json.tool.escaped': 'エスケープしました', 'json.tool.unescaped': 'エスケープを解除しました',
235
+ 'json.tool.base64Encoded': 'Base64にエンコードしました', 'json.tool.base64Decoded': 'Base64をデコードしました',
236
+ 'json.tool.valid': '有効なJSON: {summary}', 'json.tool.invalid': '無効なJSON',
237
+ 'json.tool.applied': 'エディターに適用しました', 'json.tool.failed': '操作に失敗しました',
238
+ 'json.tool.unescapeFailed': 'テキストのエスケープを解除できませんでした',
239
+ 'json.tool.base64Failed': 'テキストは有効なBase64ではありません',
240
+ 'json.tool.csvRequiresObjects': 'CSVにはオブジェクトまたはオブジェクトの配列が必要です',
241
+ 'json.tool.csvOutput': 'CSV出力', 'json.tool.xmlOutput': 'XML出力', 'json.tool.yamlOutput': 'YAML出力',
242
+ 'json.result.copy': 'コピー', 'json.result.replace': 'エディターを置換', 'json.result.close': '閉じる',
243
+ 'pdf.title': 'PDF', 'pdf.loading': 'PDFを読み込み中…', 'pdf.loadFailed': 'このPDFを読み込めません。',
244
+ 'pdf.pages': 'ページ', 'pdf.goToPage': 'ページへ移動', 'pdf.zoomIn': '拡大', 'pdf.zoomOut': '縮小',
245
+ 'pdf.viewOptions': '表示オプション', 'pdf.fitWidth': '幅に合わせる', 'pdf.fitHeight': '高さに合わせる',
246
+ 'pdf.singlePage': '単一ページ', 'pdf.twoPagesOdd': '見開き(奇数ページを左)',
247
+ 'pdf.twoPagesEven': '見開き(偶数ページを左)', 'pdf.matchTheme': 'テーマの色に合わせる',
248
+ 'pdf.resetPages': 'ページをリセット', 'pdf.annotationText': 'テキストを追加',
249
+ 'pdf.annotationSize': 'テキストサイズ', 'pdf.annotationColor': 'テキストの色',
250
+ 'pdf.save': '保存', 'pdf.saveAs': '名前を付けて保存', 'pdf.merge': 'PDFを結合',
251
+ 'pdf.merging': 'PDFを結合中…', 'pdf.mergeComplete': 'PDFを結合しました。変更を保持するには保存してください。',
252
+ 'pdf.mergeFailed': 'このPDFを結合できません。', 'pdf.signature': '署名', 'pdf.signatureColor': '署名の色',
253
+ 'pdf.signatureClear': 'クリア', 'pdf.signatureUse': '署名を使用',
254
+ 'pdf.signaturePlace': 'ページをクリックして署名を配置してください。',
255
+ 'pdf.highlight': 'ハイライト', 'pdf.highlightColor': 'ハイライトの色',
256
+ 'pdf.highlightSelect': 'ハイライトするテキストを選択してください。',
257
+ 'pdf.markupOptions': 'テキストマークアップのオプション', 'pdf.underline': '下線',
258
+ 'pdf.underlineColor': '下線の色', 'pdf.strikeout': '取り消し線', 'pdf.strikeoutColor': '取り消し線の色',
259
+ 'pdf.cancel': 'キャンセル', 'pdf.textPlace': 'ページをクリックしてテキストを配置してください。',
260
+ 'pdf.deletePage': 'ページを削除', 'pdf.deleteAnnotation': '注釈を削除', 'pdf.password': 'パスワード',
261
+ 'pdf.passwordRequired': 'このPDFにはパスワードが必要です。',
262
+ 'pdf.passwordIncorrect': 'パスワードが正しくありません。もう一度お試しください。',
263
+ 'pdf.passwordSubmit': '開く', 'pdf.editingUnavailable': 'この環境ではPDFを編集できません',
264
+ 'pdf.noFilePick': 'この環境では結合するファイルを選択できません',
265
+ 'image.title': '画像', 'image.loading': '画像を読み込み中…', 'image.loadFailed': 'この画像を表示できません。',
266
+ 'image.status': 'ズーム{zoom}%、回転{rotation}度', 'image.zoomIn': '拡大', 'image.zoomOut': '縮小',
267
+ 'image.fit': '全体表示', 'image.rotate': '90°回転', 'image.flipH': '左右反転', 'image.flipV': '上下反転',
268
+ 'image.grid': 'グリッド', 'image.reset': 'リセット', 'image.filter': 'フィルター',
269
+ 'image.preset.original': 'オリジナル', 'image.preset.bright': '明るく', 'image.preset.dark': '暗く',
270
+ 'image.preset.vintage': 'ビンテージ', 'image.preset.bw': '白黒',
271
+ 'diag.image.invalid-format': 'このファイルを画像としてデコードできませんでした。',
272
+ 'diag.image.corrupted': '画像データが破損しているため、完全にデコードできませんでした。',
273
+ 'diag.image.animated-first-frame': 'アニメーション画像の最初のフレームだけを表示しています。',
274
+ 'diag.image.svg-external-blocked': '安全のため、このSVGの外部参照をブロックしました。',
275
+ 'diag.image.limit-exceeded.pixels': '画像が大きすぎるため、縮小プレビューを表示しています。',
276
+ 'diag.image.limit-exceeded.canvas': 'この環境で編集またはエクスポートするには画像が大きすぎます。',
277
+ 'image.tool.removeBackground': '背景を削除',
278
+ 'image.tool.removeBackground.unavailable': 'この環境では背景を削除できません',
279
+ 'image.bgRemoval.working': '背景を削除中…', 'image.bgRemoval.failed': '背景の削除に失敗しました。',
280
+ 'image.tool.detectSprites': 'スプライトを検出',
281
+ 'image.tool.detectSprites.unavailable': 'この環境ではスプライト検出を利用できません',
282
+ 'image.spriteDetection.working': 'スプライトを検出中…', 'image.spriteDetection.failed': 'スプライトの検出に失敗しました。',
283
+ 'image.saveAsPng': 'PNGとして保存', 'image.saveAsPng.note': '編集した画像はPNG(.png)として保存されます。',
284
+ 'fallback.title.text': 'テキストプレビュー', 'fallback.title.hex': '16進数プレビュー',
285
+ 'fallback.truncated': 'プレビューは先頭{bytes}バイトまでに切り詰められました。',
286
+ 'fallback.reason.missing-dependency': 'この環境では完全なビューアーを読み込めませんでした。',
287
+ 'fallback.reason.unsupported': 'このファイル形式に対応するビューアーがありません。'
288
+ };