@jjlmoya/utils-games-development 1.52.0 → 1.53.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/package.json +1 -1
- package/src/entries.ts +4 -2
- package/src/tests/locale_completeness.test.ts +1 -1
- package/src/tests/tool_validation.test.ts +1 -1
- package/src/tool/localizationSanitizer/app-client.ts +270 -0
- package/src/tool/localizationSanitizer/bibliography.astro +6 -0
- package/src/tool/localizationSanitizer/bibliography.ts +14 -0
- package/src/tool/localizationSanitizer/component.astro +116 -0
- package/src/tool/localizationSanitizer/csv-parser.ts +95 -0
- package/src/tool/localizationSanitizer/csv-sanitizer.ts +98 -0
- package/src/tool/localizationSanitizer/entry.ts +28 -0
- package/src/tool/localizationSanitizer/i18n/de.ts +176 -0
- package/src/tool/localizationSanitizer/i18n/en.ts +176 -0
- package/src/tool/localizationSanitizer/i18n/es.ts +176 -0
- package/src/tool/localizationSanitizer/i18n/fr.ts +176 -0
- package/src/tool/localizationSanitizer/i18n/id.ts +176 -0
- package/src/tool/localizationSanitizer/i18n/it.ts +176 -0
- package/src/tool/localizationSanitizer/i18n/ja.ts +176 -0
- package/src/tool/localizationSanitizer/i18n/ko.ts +176 -0
- package/src/tool/localizationSanitizer/i18n/nl.ts +176 -0
- package/src/tool/localizationSanitizer/i18n/pl.ts +176 -0
- package/src/tool/localizationSanitizer/i18n/pt.ts +176 -0
- package/src/tool/localizationSanitizer/i18n/ru.ts +176 -0
- package/src/tool/localizationSanitizer/i18n/sv.ts +176 -0
- package/src/tool/localizationSanitizer/i18n/tr.ts +176 -0
- package/src/tool/localizationSanitizer/i18n/zh.ts +176 -0
- package/src/tool/localizationSanitizer/index.ts +12 -0
- package/src/tool/localizationSanitizer/json-sanitizer.ts +118 -0
- package/src/tool/localizationSanitizer/localization-sanitizer.css +634 -0
- package/src/tool/localizationSanitizer/logic.test.ts +38 -0
- package/src/tool/localizationSanitizer/logic.ts +23 -0
- package/src/tool/localizationSanitizer/seo.astro +15 -0
- package/src/tool/localizationSanitizer/types.ts +55 -0
- package/src/tool/localizationSanitizer/ui.ts +39 -0
- package/src/tools.ts +2 -1
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
2
|
+
import type { LocalizationSanitizerUI } from '../ui';
|
|
3
|
+
|
|
4
|
+
export const content: ToolLocaleContent<LocalizationSanitizerUI> = {
|
|
5
|
+
slug: 'nettoyeur-csv-localisation-godot-unity',
|
|
6
|
+
title: 'Nettoyeur CSV et JSON de Localisation pour Godot et Unity',
|
|
7
|
+
description: 'Inspectez vos fichiers de traduction CSV ou JSON pour détecter les cellules vides, les clés en double et les lignes corrompues, puis exportez une copie propre.',
|
|
8
|
+
ui: {
|
|
9
|
+
csvTab: 'Fichier CSV',
|
|
10
|
+
jsonTab: 'Fichier JSON',
|
|
11
|
+
dropTitle: 'Déposez un fichier de traduction ici',
|
|
12
|
+
dropSubtitle: 'Inspectez la structure dans votre navigateur en gardant votre fichier local.',
|
|
13
|
+
browseButton: 'Parcourir les fichiers',
|
|
14
|
+
sampleButton: 'Charger un exemple',
|
|
15
|
+
clearButton: 'Effacer',
|
|
16
|
+
inputLabel: 'Fichier de traduction',
|
|
17
|
+
formatLabel: 'Format',
|
|
18
|
+
healthLabel: 'État du fichier',
|
|
19
|
+
readyStatus: 'Prêt pour l import',
|
|
20
|
+
reviewStatus: 'Exige une vérification',
|
|
21
|
+
emptyCellsLabel: 'Cellules vides',
|
|
22
|
+
duplicateKeysLabel: 'Clés en double',
|
|
23
|
+
malformedRowsLabel: 'Lignes corrompues',
|
|
24
|
+
cleanRowsLabel: 'Lignes valides',
|
|
25
|
+
issueListTitle: 'Résultats',
|
|
26
|
+
noIssues: 'Aucun problème détecté lors de cette analyse.',
|
|
27
|
+
previewTitle: 'Aperçu de la traduction',
|
|
28
|
+
previewSubtitle: 'Les premières lignes montrent la structure normalisée qui sera exportée.',
|
|
29
|
+
exportTitle: 'Exporter le fichier propre',
|
|
30
|
+
exportSubtitle: 'Les doublons sont supprimés, les colonnes manquantes complétées et le CSV échappé.',
|
|
31
|
+
downloadButton: 'Télécharger le fichier propre',
|
|
32
|
+
copyButton: 'Copier le résultat',
|
|
33
|
+
copiedMessage: 'Résultat nettoyé copié dans le presse papiers.',
|
|
34
|
+
emptyIssue: 'Cellule de traduction vide',
|
|
35
|
+
duplicateIssue: 'Clé en double supprimée',
|
|
36
|
+
malformedIssue: 'Erreur de colonne ou de guillemet',
|
|
37
|
+
parseIssue: 'Impossible d analyser le fichier.',
|
|
38
|
+
rowLabel: 'Ligne',
|
|
39
|
+
columnLabel: 'Colonne',
|
|
40
|
+
keyLabel: 'Clé',
|
|
41
|
+
sampleFileName: 'exemple-localisation.csv',
|
|
42
|
+
privacyNote: 'Traitement local dans le navigateur',
|
|
43
|
+
waitingTitle: 'En attente d un fichier',
|
|
44
|
+
waitingSubtitle: 'Déposez un fichier CSV ou JSON pour lancer l inspection.',
|
|
45
|
+
fileTypeNote: 'CSV UTF8 ou JSON structuré',
|
|
46
|
+
},
|
|
47
|
+
seo: [
|
|
48
|
+
{ type: 'title', level: 2, text: 'Pourquoi les fichiers de localisation échouent lors de l import' },
|
|
49
|
+
{
|
|
50
|
+
type: 'paragraph',
|
|
51
|
+
html: 'Les tableaux de traduction sont faciles à éditer mais vulnérables aux erreurs de formatage. Une virgule non échappée ou une clé dupliquée peut décaler les colonnes de langue.',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
type: 'paragraph',
|
|
55
|
+
html: 'L importateur CSV de Godot et la formule Unity Localization attendent une structure stricte. Cet outil valide vos fichiers avant de les importer.',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'stats',
|
|
59
|
+
columns: 4,
|
|
60
|
+
items: [
|
|
61
|
+
{ value: 'CSV', label: 'Vérification des virgules' },
|
|
62
|
+
{ value: 'JSON', label: 'Support tableaux et objets' },
|
|
63
|
+
{ value: '0 envoi', label: 'Traitement 100% local' },
|
|
64
|
+
{ value: '1 clic', label: 'Export propre' },
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
{ type: 'title', level: 2, text: 'Ce que vérifie l outil' },
|
|
68
|
+
{
|
|
69
|
+
type: 'comparative',
|
|
70
|
+
columns: 2,
|
|
71
|
+
items: [
|
|
72
|
+
{
|
|
73
|
+
title: 'Détecté avant import',
|
|
74
|
+
description: 'Erreurs difficiles à repérer dans les grands fichiers',
|
|
75
|
+
points: ['Cellules vides', 'Clés dupliquées', 'Lignes avec colonnes manquantes ou en trop', 'Syntaxe de guillemets invalide'],
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
title: 'Normalisé pour l export',
|
|
79
|
+
description: 'Réparations automatiques sécurisées',
|
|
80
|
+
points: ['Colonnes manquantes complétées', 'Champs supplémentaires fusionnés', 'Première occurrence conservée', 'Fichier d origine reste intact'],
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
},
|
|
84
|
+
{ type: 'title', level: 2, text: 'Comment vérifier le fichier nettoyé' },
|
|
85
|
+
{
|
|
86
|
+
type: 'paragraph',
|
|
87
|
+
html: 'Le nettoyage structurel ne remplace pas la relecture linguistique. Utilisez le rapport pour compléter les traductions manquantes.',
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
type: 'table',
|
|
91
|
+
headers: ['Constat', 'Signification', 'Action requise'],
|
|
92
|
+
rows: [
|
|
93
|
+
['Cellule vide', 'Une colonne de langue est vide', 'Traduisez ou confirmez l absence de texte'],
|
|
94
|
+
['Clé en double', 'Clé utilisée plusieurs fois', 'Comparez les lignes et gardez la première'],
|
|
95
|
+
['Ligne corrompue', 'Nombre de colonnes non conforme', 'Vérifiez la ligne fusionnée'],
|
|
96
|
+
['Erreur d analyse', 'JSON invalide', 'Corrigez la syntaxe avant d importer'],
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
{ type: 'title', level: 2, text: 'Règles CSV essentielles' },
|
|
100
|
+
{
|
|
101
|
+
type: 'paragraph',
|
|
102
|
+
html: 'Les champs contenant des virgules ou guillemets doivent être entourés de guillemets doubles.',
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
type: 'tip',
|
|
106
|
+
title: 'Conservez l original',
|
|
107
|
+
html: 'Gardez toujours le fichier original du traducteur à titre de comparaison.',
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
type: 'glossary',
|
|
111
|
+
items: [
|
|
112
|
+
{ term: 'Clé de traduction', definition: 'Identifiant unique utilisé par le moteur de jeu.' },
|
|
113
|
+
{ term: 'Champ CSV', definition: 'Valeur individuelle entre deux séparateurs.' },
|
|
114
|
+
{ term: 'Échappement', definition: 'Encadrement par des guillemets pour préserver la ponctuation.' },
|
|
115
|
+
{ term: 'Locale', definition: 'Code langue et région comme fr, en ou ja.' },
|
|
116
|
+
],
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
faq: [
|
|
120
|
+
{
|
|
121
|
+
question: 'Les fichiers sont-ils envoyés sur un serveur ?',
|
|
122
|
+
answer: 'Non, toutes les opérations sont effectuées localement dans le navigateur.',
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
question: 'Que se passe-t-il si une ligne CSV contient des virgules supplémentaires ?',
|
|
126
|
+
answer: 'La ligne est signalée et les champs superflus sont fusionnés dans la dernière colonne.',
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
question: 'Comment les doublons sont-ils traités ?',
|
|
130
|
+
answer: 'La première occurrence est conservée et les suivantes sont ignorées.',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
question: 'L outil évalue-t-il la qualité linguistique ?',
|
|
134
|
+
answer: 'Non, il contrôle uniquement la conformité de la structure.',
|
|
135
|
+
},
|
|
136
|
+
],
|
|
137
|
+
howTo: [
|
|
138
|
+
{ name: 'Choisir le format', text: 'Sélectionnez CSV ou JSON.' },
|
|
139
|
+
{ name: 'Analyser les anomalies', text: 'Chargez le fichier et consultez la liste des problèmes.' },
|
|
140
|
+
{ name: 'Exporter et tester', text: 'Téléchargez la version propre et importez-la dans votre moteur.' },
|
|
141
|
+
],
|
|
142
|
+
schemas: [
|
|
143
|
+
{
|
|
144
|
+
'@context': 'https://schema.org',
|
|
145
|
+
'@type': 'SoftwareApplication',
|
|
146
|
+
name: 'Nettoyeur CSV et JSON de Localisation pour Godot et Unity',
|
|
147
|
+
applicationCategory: 'DeveloperApplication',
|
|
148
|
+
operatingSystem: 'Any',
|
|
149
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
'@context': 'https://schema.org',
|
|
153
|
+
'@type': 'FAQPage',
|
|
154
|
+
mainEntity: [{
|
|
155
|
+
'@type': 'Question',
|
|
156
|
+
name: 'Les fichiers sont-ils envoyés sur un serveur ?',
|
|
157
|
+
acceptedAnswer: { '@type': 'Answer', text: 'Non, toutes les opérations sont effectuées localement dans le navigateur.' },
|
|
158
|
+
}],
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
'@context': 'https://schema.org',
|
|
162
|
+
'@type': 'HowTo',
|
|
163
|
+
name: 'Comment nettoyer un fichier de localisation',
|
|
164
|
+
step: [
|
|
165
|
+
{ '@type': 'HowToStep', name: 'Choisir le format', text: 'Sélectionnez CSV ou JSON.' },
|
|
166
|
+
{ '@type': 'HowToStep', name: 'Analyser les anomalies', text: 'Chargez le fichier et consultez la liste des problèmes.' },
|
|
167
|
+
{ '@type': 'HowToStep', name: 'Exporter et tester', text: 'Téléchargez la version propre et importez-la dans votre moteur.' },
|
|
168
|
+
],
|
|
169
|
+
},
|
|
170
|
+
],
|
|
171
|
+
bibliography: [
|
|
172
|
+
{ name: 'Documentation ResourceImporterCSVTranslation Godot', url: 'https://docs.godotengine.org/en/stable/classes/class_resourceimportercsvtranslation.html' },
|
|
173
|
+
{ name: 'Documentation Unity Localization Import CSV', url: 'https://docs.unity3d.com/Packages/com.unity.localization@1.5/manual/CSV.html' },
|
|
174
|
+
{ name: 'Spécification RFC 4180 CSV', url: 'https://datatracker.ietf.org/doc/html/rfc4180' },
|
|
175
|
+
],
|
|
176
|
+
};
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
2
|
+
import type { LocalizationSanitizerUI } from '../ui';
|
|
3
|
+
|
|
4
|
+
export const content: ToolLocaleContent<LocalizationSanitizerUI> = {
|
|
5
|
+
slug: 'pembersih-lokalisasi-csv-godot-unity',
|
|
6
|
+
title: 'Pembersih CSV dan JSON Lokalisasi Godot dan Unity',
|
|
7
|
+
description: 'Periksa file terjemahan CSV atau JSON untuk menemukan sel kosong, kunci duplikat, dan baris rusak, lalu ekspor salinan bersih yang siap diimpor ke engine.',
|
|
8
|
+
ui: {
|
|
9
|
+
csvTab: 'File CSV',
|
|
10
|
+
jsonTab: 'File JSON',
|
|
11
|
+
dropTitle: 'Tarik file terjemahan ke sini',
|
|
12
|
+
dropSubtitle: 'Periksa struktur di browser Anda dan simpan file sumber di perangkat Anda.',
|
|
13
|
+
browseButton: 'Pilih file',
|
|
14
|
+
sampleButton: 'Muat contoh',
|
|
15
|
+
clearButton: 'Bersihkan',
|
|
16
|
+
inputLabel: 'Input file terjemahan',
|
|
17
|
+
formatLabel: 'Format',
|
|
18
|
+
healthLabel: 'Kesehatan file',
|
|
19
|
+
readyStatus: 'Siap diimpor',
|
|
20
|
+
reviewStatus: 'Perlu peninjauan',
|
|
21
|
+
emptyCellsLabel: 'Sel kosong',
|
|
22
|
+
duplicateKeysLabel: 'Kunci duplikat',
|
|
23
|
+
malformedRowsLabel: 'Baris rusak',
|
|
24
|
+
cleanRowsLabel: 'Baris bersih',
|
|
25
|
+
issueListTitle: 'Temuan',
|
|
26
|
+
noIssues: 'Tidak ada masalah ditemukan.',
|
|
27
|
+
previewTitle: 'Pratinjau terjemahan',
|
|
28
|
+
previewSubtitle: 'Baris pertama menampilkan struktur ternormalisasi yang akan diekspor.',
|
|
29
|
+
exportTitle: 'Ekspor file bersih',
|
|
30
|
+
exportSubtitle: 'Duplikat dihapus kolom hilang dilengkapi dan nilai CSV di escape.',
|
|
31
|
+
downloadButton: 'Unduh file bersih',
|
|
32
|
+
copyButton: 'Salin hasil',
|
|
33
|
+
copiedMessage: 'Hasil bersih berhasil disalin ke papan klip.',
|
|
34
|
+
emptyIssue: 'Sel terjemahan kosong',
|
|
35
|
+
duplicateIssue: 'Kunci duplikat dihapus',
|
|
36
|
+
malformedIssue: 'Ketidakcocokan kolom atau tanda kutip',
|
|
37
|
+
parseIssue: 'File tidak dapat dibaca.',
|
|
38
|
+
rowLabel: 'Baris',
|
|
39
|
+
columnLabel: 'Kolom',
|
|
40
|
+
keyLabel: 'Kunci',
|
|
41
|
+
sampleFileName: 'sampel-lokalisasi.csv',
|
|
42
|
+
privacyNote: 'Pemrosesan browser lokal',
|
|
43
|
+
waitingTitle: 'Menunggu file',
|
|
44
|
+
waitingSubtitle: 'Tarik file CSV atau JSON untuk memulai pemeriksaan.',
|
|
45
|
+
fileTypeNote: 'CSV UTF8 atau JSON terstruktur',
|
|
46
|
+
},
|
|
47
|
+
seo: [
|
|
48
|
+
{ type: 'title', level: 2, text: 'Mengapa file lokalisasi mengalami masalah saat impor engine' },
|
|
49
|
+
{
|
|
50
|
+
type: 'paragraph',
|
|
51
|
+
html: 'Tabel terjemahan mudah diedit namun sangat rentan terhadap kerusakan format. Tanda koma di dalam kalimat atau tanda kutip yang hilang dapat menggeser kolom bahasa.',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
type: 'paragraph',
|
|
55
|
+
html: 'Pengimpor CSV Godot dan paket Unity Localization membutuhkan struktur yang konsisten. Alat ini memeriksa dan merapikan file sebelum diimpor ke proyek Anda.',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'stats',
|
|
59
|
+
columns: 4,
|
|
60
|
+
items: [
|
|
61
|
+
{ value: 'CSV', label: 'Pemeriksaan koma' },
|
|
62
|
+
{ value: 'JSON', label: 'Input array dan objek' },
|
|
63
|
+
{ value: '0 unggahan', label: 'Lokal di browser' },
|
|
64
|
+
{ value: '1 klik', label: 'Ekspor bersih' },
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
{ type: 'title', level: 2, text: 'Pemeriksaan yang dilakukan' },
|
|
68
|
+
{
|
|
69
|
+
type: 'comparative',
|
|
70
|
+
columns: 2,
|
|
71
|
+
items: [
|
|
72
|
+
{
|
|
73
|
+
title: 'Dideteksi sebelum impor',
|
|
74
|
+
description: 'Masalah yang sulit terlihat pada file besar',
|
|
75
|
+
points: ['Sel terjemahan kosong', 'Kunci terjemahan duplikat', 'Baris dengan kolom kurang atau berlebih', 'Sintaks tanda kutip tidak valid'],
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
title: 'Dinormalisasi saat ekspor',
|
|
79
|
+
description: 'Perbaikan otomatis yang aman',
|
|
80
|
+
points: ['Kolom yang kurang dilengkapi', 'Kolom berlebih digabungkan ke kolom terakhir', 'Kemunculan pertama kunci dipertahankan', 'File asli tetap utuh'],
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
},
|
|
84
|
+
{ type: 'title', level: 2, text: 'Cara meninjau file yang telah dibersihkan' },
|
|
85
|
+
{
|
|
86
|
+
type: 'paragraph',
|
|
87
|
+
html: 'Pembersihan struktur tidak menggantikan tinjauan bahasa. Gunakan daftar temuan untuk melengkapi terjemahan yang belum selesai.',
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
type: 'table',
|
|
91
|
+
headers: ['Temuan', 'Arti', 'Langkah lanjutan'],
|
|
92
|
+
rows: [
|
|
93
|
+
['Sel kosong', 'Kolom bahasa tidak berisi teks', 'Terjemahkan atau konfirmasi jika disengaja'],
|
|
94
|
+
['Kunci duplikat', 'Beberapa baris memakai kunci sama', 'Bandingkan baris sebelum memakai yang pertama'],
|
|
95
|
+
['Baris rusak', 'Struktur baris tidak sesuai header', 'Periksa baris gabungan akhir'],
|
|
96
|
+
['Gagal baca', 'Struktur JSON tidak valid', 'Perbaiki sintaks sebelum diimpor'],
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
{ type: 'title', level: 2, text: 'Konvensi CSV untuk game' },
|
|
100
|
+
{
|
|
101
|
+
type: 'paragraph',
|
|
102
|
+
html: 'Aturan umum CSV: nilai dipisahkan koma, dan teks yang memuat koma harus dibungkus tanda kutip ganda.',
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
type: 'tip',
|
|
106
|
+
title: 'Simpan file asli',
|
|
107
|
+
html: 'Gunakan file bersih sebagai alat bantu dan selalu simpan salinan asli penerjemah.',
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
type: 'glossary',
|
|
111
|
+
items: [
|
|
112
|
+
{ term: 'Kunci terjemahan', definition: 'Pengenal unik yang digunakan oleh kode game.' },
|
|
113
|
+
{ term: 'Field CSV', definition: 'Nilai individu di antara pemisah koma.' },
|
|
114
|
+
{ term: 'Escaping', definition: 'Pembungkusan kutip agar tanda baca tidak dianggap pemisah.' },
|
|
115
|
+
{ term: 'Locale', definition: 'Kode bahasa dan wilayah seperti id, en, atau ja.' },
|
|
116
|
+
],
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
faq: [
|
|
120
|
+
{
|
|
121
|
+
question: 'Apakah file diunggah ke server?',
|
|
122
|
+
answer: 'Tidak, seluruh pemrosesan dilakukan secara lokal di dalam browser Anda.',
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
question: 'Apa yang terjadi jika baris CSV memiliki koma berlebih?',
|
|
126
|
+
answer: 'Baris ditandai rusak dan kolom tambahan digabungkan ke kolom terakhir.',
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
question: 'Bagaimana kunci duplikat dibersihkan?',
|
|
130
|
+
answer: 'Kemunculan pertama dipertahankan dan kemunculan berikutnya diabaikan.',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
question: 'Apakah alat ini memeriksa kualitas terjemahan?',
|
|
134
|
+
answer: 'Tidak, alat ini hanya memeriksa struktur file dan kelengkapan sel.',
|
|
135
|
+
},
|
|
136
|
+
],
|
|
137
|
+
howTo: [
|
|
138
|
+
{ name: 'Pilih format file', text: 'Pilih CSV atau JSON.' },
|
|
139
|
+
{ name: 'Periksa temuan', text: 'Tarik file dan lihat daftar kesalahan.' },
|
|
140
|
+
{ name: 'Ekspor dan uji', text: 'Unduh file bersih lalu impor ke game engine Anda.' },
|
|
141
|
+
],
|
|
142
|
+
schemas: [
|
|
143
|
+
{
|
|
144
|
+
'@context': 'https://schema.org',
|
|
145
|
+
'@type': 'SoftwareApplication',
|
|
146
|
+
name: 'Pembersih CSV dan JSON Lokalisasi Godot dan Unity',
|
|
147
|
+
applicationCategory: 'DeveloperApplication',
|
|
148
|
+
operatingSystem: 'Any',
|
|
149
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
'@context': 'https://schema.org',
|
|
153
|
+
'@type': 'FAQPage',
|
|
154
|
+
mainEntity: [{
|
|
155
|
+
'@type': 'Question',
|
|
156
|
+
name: 'Apakah file diunggah ke server?',
|
|
157
|
+
acceptedAnswer: { '@type': 'Answer', text: 'Tidak, seluruh pemrosesan dilakukan secara lokal di dalam browser Anda.' },
|
|
158
|
+
}],
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
'@context': 'https://schema.org',
|
|
162
|
+
'@type': 'HowTo',
|
|
163
|
+
name: 'Cara membersihkan file lokalisasi game',
|
|
164
|
+
step: [
|
|
165
|
+
{ '@type': 'HowToStep', name: 'Pilih format file', text: 'Pilih CSV atau JSON.' },
|
|
166
|
+
{ '@type': 'HowToStep', name: 'Periksa temuan', text: 'Tarik file dan lihat daftar kesalahan.' },
|
|
167
|
+
{ '@type': 'HowToStep', name: 'Ekspor dan uji', text: 'Unduh file bersih lalu impor ke game engine Anda.' },
|
|
168
|
+
],
|
|
169
|
+
},
|
|
170
|
+
],
|
|
171
|
+
bibliography: [
|
|
172
|
+
{ name: 'Dokumentasi Godot ResourceImporterCSVTranslation', url: 'https://docs.godotengine.org/en/stable/classes/class_resourceimportercsvtranslation.html' },
|
|
173
|
+
{ name: 'Dokumentasi Impor CSV Unity Localization', url: 'https://docs.unity3d.com/Packages/com.unity.localization@1.5/manual/CSV.html' },
|
|
174
|
+
{ name: 'Spesifikasi RFC 4180 CSV', url: 'https://datatracker.ietf.org/doc/html/rfc4180' },
|
|
175
|
+
],
|
|
176
|
+
};
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
2
|
+
import type { LocalizationSanitizerUI } from '../ui';
|
|
3
|
+
|
|
4
|
+
export const content: ToolLocaleContent<LocalizationSanitizerUI> = {
|
|
5
|
+
slug: 'pulitore-csv-localizzazione-godot-unity',
|
|
6
|
+
title: 'Pulitore CSV e JSON di Localizzazione per Godot e Unity',
|
|
7
|
+
description: 'Ispeziona i file di traduzione CSV o JSON per individuare celle vuote, chiavi duplicate e righe corrotte, quindi esporta una copia pulita pronta per l importazione.',
|
|
8
|
+
ui: {
|
|
9
|
+
csvTab: 'File CSV',
|
|
10
|
+
jsonTab: 'File JSON',
|
|
11
|
+
dropTitle: 'Trascina qui un file di traduzione',
|
|
12
|
+
dropSubtitle: 'Ispeziona la struttura nel tuo browser mantenendo il file sorgente sul tuo dispositivo.',
|
|
13
|
+
browseButton: 'Sfoglia file',
|
|
14
|
+
sampleButton: 'Carica esempio',
|
|
15
|
+
clearButton: 'Pulisci',
|
|
16
|
+
inputLabel: 'File di traduzione in ingresso',
|
|
17
|
+
formatLabel: 'Formato',
|
|
18
|
+
healthLabel: 'Stato del file',
|
|
19
|
+
readyStatus: 'Pronto per l importazione',
|
|
20
|
+
reviewStatus: 'Richiede revisione',
|
|
21
|
+
emptyCellsLabel: 'Celle vuote',
|
|
22
|
+
duplicateKeysLabel: 'Chiavi duplicate',
|
|
23
|
+
malformedRowsLabel: 'Righe corrotte',
|
|
24
|
+
cleanRowsLabel: 'Righe valide',
|
|
25
|
+
issueListTitle: 'Risultati',
|
|
26
|
+
noIssues: 'Nessun problema riscontrato in questa analisi.',
|
|
27
|
+
previewTitle: 'Anteprima di traduzione',
|
|
28
|
+
previewSubtitle: 'Le prime righe mostrano la struttura normalizzata che verrà esportata.',
|
|
29
|
+
exportTitle: 'Esporta file pulito',
|
|
30
|
+
exportSubtitle: 'I duplicati vengono rimossi, le colonne mancanti completate e i valori CSV formattati.',
|
|
31
|
+
downloadButton: 'Scarica file pulito',
|
|
32
|
+
copyButton: 'Copia risultato',
|
|
33
|
+
copiedMessage: 'Risultato pulito copiato negli appunti.',
|
|
34
|
+
emptyIssue: 'Cella di traduzione vuota',
|
|
35
|
+
duplicateIssue: 'Chiave duplicata rimossa',
|
|
36
|
+
malformedIssue: 'Errore nelle colonne o nelle virgolette',
|
|
37
|
+
parseIssue: 'Impossibile analizzare il file.',
|
|
38
|
+
rowLabel: 'Riga',
|
|
39
|
+
columnLabel: 'Colonna',
|
|
40
|
+
keyLabel: 'Chiave',
|
|
41
|
+
sampleFileName: 'esempio-localizzazione.csv',
|
|
42
|
+
privacyNote: 'Elaborazione locale nel browser',
|
|
43
|
+
waitingTitle: 'In attesa di un file',
|
|
44
|
+
waitingSubtitle: 'Trascina un file CSV o JSON per avviare l ispezione.',
|
|
45
|
+
fileTypeNote: 'CSV UTF8 o JSON strutturato',
|
|
46
|
+
},
|
|
47
|
+
seo: [
|
|
48
|
+
{ type: 'title', level: 2, text: 'Perché i file di localizzazione si corrompono durante l importazione' },
|
|
49
|
+
{
|
|
50
|
+
type: 'paragraph',
|
|
51
|
+
html: 'Le tabelle di traduzione sono semplici da modificare ma facilmente soggette a errori. Una virgola mancante di escape o una chiave duplicata possono causare lo slittamento delle colonne di lingua.',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
type: 'paragraph',
|
|
55
|
+
html: 'L importatore CSV di Godot e il pacchetto Unity Localization richiedono strutture coerenti. Questo strumento controlla e corregge i file prima di integrarli nel motore di gioco.',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'stats',
|
|
59
|
+
columns: 4,
|
|
60
|
+
items: [
|
|
61
|
+
{ value: 'CSV', label: 'Controllo virgole' },
|
|
62
|
+
{ value: 'JSON', label: 'Supporto array e oggetti' },
|
|
63
|
+
{ value: '0 invii', label: 'Solo nel browser' },
|
|
64
|
+
{ value: '1 clic', label: 'Esportazione pulita' },
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
{ type: 'title', level: 2, text: 'Cosa verifica lo strumento' },
|
|
68
|
+
{
|
|
69
|
+
type: 'comparative',
|
|
70
|
+
columns: 2,
|
|
71
|
+
items: [
|
|
72
|
+
{
|
|
73
|
+
title: 'Rilevato prima dell importazione',
|
|
74
|
+
description: 'Problemi difficili da notare nei file di grandi dimensioni',
|
|
75
|
+
points: ['Celle di traduzione vuote', 'Chiavi duplicate', 'Righe con colonne mancanti o in eccesso', 'Sintassi delle virgolette errata'],
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
title: 'Normalizzato per l esportazione',
|
|
79
|
+
description: 'Correzioni automatiche sicure',
|
|
80
|
+
points: ['Colonne mancanti riempite', 'Campi in eccesso uniti nell ultima colonna', 'Mantenuta la prima occorrenza della chiave', 'File originale inalterato'],
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
},
|
|
84
|
+
{ type: 'title', level: 2, text: 'Come verificare il file pulito' },
|
|
85
|
+
{
|
|
86
|
+
type: 'paragraph',
|
|
87
|
+
html: 'La pulizia strutturale non sostituisce la revisione linguistica. Usa l elenco dei risultati per completare le traduzioni mancate.',
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
type: 'table',
|
|
91
|
+
headers: ['Risultato', 'Significato', 'Azione consigliata'],
|
|
92
|
+
rows: [
|
|
93
|
+
['Cella vuota', 'Una colonna lingua non contiene testo', 'Traduci o conferma l assenza intenzionale'],
|
|
94
|
+
['Chiave duplicata', 'Più righe usano la stessa chiave', 'Confronta le righe prima di usare la prima'],
|
|
95
|
+
['Riga corrotta', 'Struttura non conforme all intestazione', 'Controlla la riga unita'],
|
|
96
|
+
['Errore di analisi', 'JSON non valido', 'Correggi la sintassi prima di importare'],
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
{ type: 'title', level: 2, text: 'Convenzioni CSV importanti' },
|
|
100
|
+
{
|
|
101
|
+
type: 'paragraph',
|
|
102
|
+
html: 'Regole CSV standard: i campi sono separati da virgole e i testi contenenti virgolette o virgole devono essere racchiusi tra doppi apici.',
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
type: 'tip',
|
|
106
|
+
title: 'Conserva il file originale',
|
|
107
|
+
html: 'Mantieni sempre il file di traduzione originale come riferimento prima di integrare il nuovo file.',
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
type: 'glossary',
|
|
111
|
+
items: [
|
|
112
|
+
{ term: 'Chiave di traduzione', definition: 'Identificatore univoco usato dal codice del gioco.' },
|
|
113
|
+
{ term: 'Campo CSV', definition: 'Singolo valore compreso tra delimitatori.' },
|
|
114
|
+
{ term: 'Escaping', definition: 'Uso delle virgolette per preservare la punteggiatura.' },
|
|
115
|
+
{ term: 'Locale', definition: 'Codice lingua e regione come it, en o ja.' },
|
|
116
|
+
],
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
faq: [
|
|
120
|
+
{
|
|
121
|
+
question: 'I file vengono caricati su un server?',
|
|
122
|
+
answer: 'No, l elaborazione avviene interamente in locale all interno del browser.',
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
question: 'Cosa succede se una riga CSV contiene virgole in più?',
|
|
126
|
+
answer: 'La riga viene segnalata e i campi extra vengono uniti nella colonna finale.',
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
question: 'Come vengono gestite le chiavi duplicate?',
|
|
130
|
+
answer: 'Viene conservata la prima occorrenza, mentre le successive vengono ignorate nell esportazione.',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
question: 'Lo strumento valuta la qualità della traduzione?',
|
|
134
|
+
answer: 'No, analizza solo la correttezza della struttura e la presenza di campi vuoti.',
|
|
135
|
+
},
|
|
136
|
+
],
|
|
137
|
+
howTo: [
|
|
138
|
+
{ name: 'Scegli il formato', text: 'Seleziona CSV o JSON.' },
|
|
139
|
+
{ name: 'Ispeziona i risultati', text: 'Carica il file e controlla la lista dei problemi.' },
|
|
140
|
+
{ name: 'Esporta e testa', text: 'Scarica il file pulito e importalo nel tuo motore di gioco.' },
|
|
141
|
+
],
|
|
142
|
+
schemas: [
|
|
143
|
+
{
|
|
144
|
+
'@context': 'https://schema.org',
|
|
145
|
+
'@type': 'SoftwareApplication',
|
|
146
|
+
name: 'Pulitore CSV e JSON di Localizzazione per Godot e Unity',
|
|
147
|
+
applicationCategory: 'DeveloperApplication',
|
|
148
|
+
operatingSystem: 'Any',
|
|
149
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
'@context': 'https://schema.org',
|
|
153
|
+
'@type': 'FAQPage',
|
|
154
|
+
mainEntity: [{
|
|
155
|
+
'@type': 'Question',
|
|
156
|
+
name: 'I file vengono caricati su un server?',
|
|
157
|
+
acceptedAnswer: { '@type': 'Answer', text: 'No, l elaborazione avviene interamente in locale all interno del browser.' },
|
|
158
|
+
}],
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
'@context': 'https://schema.org',
|
|
162
|
+
'@type': 'HowTo',
|
|
163
|
+
name: 'Come ripulire un file di localizzazione',
|
|
164
|
+
step: [
|
|
165
|
+
{ '@type': 'HowToStep', name: 'Scegli il formato', text: 'Seleziona CSV o JSON.' },
|
|
166
|
+
{ '@type': 'HowToStep', name: 'Ispeziona i risultati', text: 'Carica il file e controlla la lista dei problemi.' },
|
|
167
|
+
{ '@type': 'HowToStep', name: 'Esporta e testa', text: 'Scarica il file pulito e importalo nel tuo motore di gioco.' },
|
|
168
|
+
],
|
|
169
|
+
},
|
|
170
|
+
],
|
|
171
|
+
bibliography: [
|
|
172
|
+
{ name: 'Documentazione Godot ResourceImporterCSVTranslation', url: 'https://docs.godotengine.org/en/stable/classes/class_resourceimportercsvtranslation.html' },
|
|
173
|
+
{ name: 'Documentazione Unity Localization Import CSV', url: 'https://docs.unity3d.com/Packages/com.unity.localization@1.5/manual/CSV.html' },
|
|
174
|
+
{ name: 'Specifica RFC 4180 CSV', url: 'https://datatracker.ietf.org/doc/html/rfc4180' },
|
|
175
|
+
],
|
|
176
|
+
};
|