@jjlmoya/utils-games-development 1.69.0 → 1.70.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 (43) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +2 -1
  3. package/src/entries.ts +4 -1
  4. package/src/index.ts +1 -0
  5. package/src/tests/locale_completeness.test.ts +9 -2
  6. package/src/tests/tool_validation.test.ts +2 -2
  7. package/src/tool/fixerEditor/auto-trim.ts +37 -0
  8. package/src/tool/fixerEditor/bibliography.astro +6 -0
  9. package/src/tool/fixerEditor/bibliography.ts +6 -0
  10. package/src/tool/fixerEditor/component.astro +114 -0
  11. package/src/tool/fixerEditor/controller.ts +275 -0
  12. package/src/tool/fixerEditor/dom-views.ts +200 -0
  13. package/src/tool/fixerEditor/entry.ts +28 -0
  14. package/src/tool/fixerEditor/evaluator.ts +17 -0
  15. package/src/tool/fixerEditor/events.ts +98 -0
  16. package/src/tool/fixerEditor/exporter.ts +42 -0
  17. package/src/tool/fixerEditor/fixer-editor.css +603 -0
  18. package/src/tool/fixerEditor/i18n/de.ts +82 -0
  19. package/src/tool/fixerEditor/i18n/en.ts +114 -0
  20. package/src/tool/fixerEditor/i18n/es.ts +82 -0
  21. package/src/tool/fixerEditor/i18n/fr.ts +82 -0
  22. package/src/tool/fixerEditor/i18n/id.ts +82 -0
  23. package/src/tool/fixerEditor/i18n/it.ts +82 -0
  24. package/src/tool/fixerEditor/i18n/ja.ts +81 -0
  25. package/src/tool/fixerEditor/i18n/ko.ts +81 -0
  26. package/src/tool/fixerEditor/i18n/localized.ts +391 -0
  27. package/src/tool/fixerEditor/i18n/nl.ts +82 -0
  28. package/src/tool/fixerEditor/i18n/pl.ts +82 -0
  29. package/src/tool/fixerEditor/i18n/pt.ts +82 -0
  30. package/src/tool/fixerEditor/i18n/ru.ts +82 -0
  31. package/src/tool/fixerEditor/i18n/sv.ts +82 -0
  32. package/src/tool/fixerEditor/i18n/tr.ts +82 -0
  33. package/src/tool/fixerEditor/i18n/zh.ts +80 -0
  34. package/src/tool/fixerEditor/index.ts +11 -0
  35. package/src/tool/fixerEditor/logic.test.ts +69 -0
  36. package/src/tool/fixerEditor/logic.ts +234 -0
  37. package/src/tool/fixerEditor/runtime.ts +88 -0
  38. package/src/tool/fixerEditor/seo.astro +15 -0
  39. package/src/tool/fixerEditor/state.ts +10 -0
  40. package/src/tool/fixerEditor/storage.ts +68 -0
  41. package/src/tool/fixerEditor/types.ts +70 -0
  42. package/src/tool/fixerEditor/ui.ts +71 -0
  43. package/src/tools.ts +2 -0
@@ -0,0 +1,391 @@
1
+ import { content as english } from "./en";
2
+ import type { FixerEditorUI } from "../ui";
3
+ import type { ToolLocaleContent } from "../../../types";
4
+
5
+ const editorialWords: Record<string, string[]> = {
6
+ de: [
7
+ "Sprite",
8
+ "Raster",
9
+ "Rahmen",
10
+ "Ausrichtung",
11
+ "Zuschnitt",
12
+ "Pixel",
13
+ "Abstand",
14
+ "Rand",
15
+ "Vorschau",
16
+ "Export",
17
+ "Animation",
18
+ "Quelle",
19
+ "Korrektur",
20
+ "Arbeitsfläche",
21
+ "Transparenz",
22
+ "Daten",
23
+ "Projekt",
24
+ "Reihenfolge",
25
+ "Versatz",
26
+ "Prüfung",
27
+ ],
28
+ es: [
29
+ "sprite",
30
+ "cuadrícula",
31
+ "frame",
32
+ "alineación",
33
+ "recorte",
34
+ "píxel",
35
+ "separación",
36
+ "margen",
37
+ "vista previa",
38
+ "exportación",
39
+ "animación",
40
+ "fuente",
41
+ "corrección",
42
+ "mesa de trabajo",
43
+ "transparencia",
44
+ "datos",
45
+ "proyecto",
46
+ "orden",
47
+ "desplazamiento",
48
+ "revisión",
49
+ ],
50
+ fr: [
51
+ "sprite",
52
+ "grille",
53
+ "image",
54
+ "alignement",
55
+ "recadrage",
56
+ "pixel",
57
+ "espacement",
58
+ "marge",
59
+ "aperçu",
60
+ "export",
61
+ "animation",
62
+ "source",
63
+ "correction",
64
+ "atelier",
65
+ "transparence",
66
+ "données",
67
+ "projet",
68
+ "ordre",
69
+ "décalage",
70
+ "contrôle",
71
+ ],
72
+ id: [
73
+ "sprite",
74
+ "grid",
75
+ "bingkai",
76
+ "penyelarasan",
77
+ "potongan",
78
+ "piksel",
79
+ "jarak",
80
+ "margin",
81
+ "pratinjau",
82
+ "ekspor",
83
+ "animasi",
84
+ "sumber",
85
+ "perbaikan",
86
+ "meja kerja",
87
+ "transparansi",
88
+ "data",
89
+ "proyek",
90
+ "urutan",
91
+ "pergeseran",
92
+ "pemeriksaan",
93
+ ],
94
+ it: [
95
+ "sprite",
96
+ "griglia",
97
+ "fotogramma",
98
+ "allineamento",
99
+ "ritaglio",
100
+ "pixel",
101
+ "spazio",
102
+ "margine",
103
+ "anteprima",
104
+ "esportazione",
105
+ "animazione",
106
+ "sorgente",
107
+ "correzione",
108
+ "banco",
109
+ "trasparenza",
110
+ "dati",
111
+ "progetto",
112
+ "ordine",
113
+ "spostamento",
114
+ "qualità",
115
+ ],
116
+ ja: [
117
+ "スプライト",
118
+ "グリッド",
119
+ "フレーム",
120
+ "位置合わせ",
121
+ "切り抜き",
122
+ "ピクセル",
123
+ "間隔",
124
+ "余白",
125
+ "プレビュー",
126
+ "出力",
127
+ "アニメーション",
128
+ "ソース",
129
+ "修正",
130
+ "作業台",
131
+ "透明度",
132
+ "データ",
133
+ "プロジェクト",
134
+ "順序",
135
+ "オフセット",
136
+ "確認",
137
+ ],
138
+ ko: [
139
+ "스프라이트",
140
+ "그리드",
141
+ "프레임",
142
+ "정렬",
143
+ "자르기",
144
+ "픽셀",
145
+ "간격",
146
+ "여백",
147
+ "미리보기",
148
+ "내보내기",
149
+ "애니메이션",
150
+ "원본",
151
+ "수정",
152
+ "작업대",
153
+ "투명도",
154
+ "데이터",
155
+ "프로젝트",
156
+ "순서",
157
+ "오프셋",
158
+ "확인",
159
+ ],
160
+ nl: [
161
+ "sprite",
162
+ "raster",
163
+ "frame",
164
+ "uitlijning",
165
+ "uitsnede",
166
+ "pixel",
167
+ "afstand",
168
+ "marge",
169
+ "voorbeeld",
170
+ "export",
171
+ "animatie",
172
+ "bron",
173
+ "herstel",
174
+ "werkbank",
175
+ "transparantie",
176
+ "gegevens",
177
+ "project",
178
+ "volgorde",
179
+ "verschuiving",
180
+ "controle",
181
+ ],
182
+ pl: [
183
+ "sprite",
184
+ "siatka",
185
+ "klatka",
186
+ "wyrównanie",
187
+ "przycięcie",
188
+ "piksel",
189
+ "odstęp",
190
+ "margines",
191
+ "podgląd",
192
+ "eksport",
193
+ "animacja",
194
+ "źródło",
195
+ "naprawa",
196
+ "stanowisko",
197
+ "przezroczystość",
198
+ "dane",
199
+ "projekt",
200
+ "kolejność",
201
+ "przesunięcie",
202
+ "kontrola",
203
+ ],
204
+ pt: [
205
+ "sprite",
206
+ "grade",
207
+ "frame",
208
+ "alinhamento",
209
+ "recorte",
210
+ "pixel",
211
+ "espaço",
212
+ "margem",
213
+ "prévia",
214
+ "exportação",
215
+ "animação",
216
+ "fonte",
217
+ "correção",
218
+ "bancada",
219
+ "transparência",
220
+ "dados",
221
+ "projeto",
222
+ "ordem",
223
+ "deslocamento",
224
+ "revisão",
225
+ ],
226
+ ru: [
227
+ "спрайт",
228
+ "сетка",
229
+ "кадр",
230
+ "выравнивание",
231
+ "обрезка",
232
+ "пиксель",
233
+ "интервал",
234
+ "поле",
235
+ "просмотр",
236
+ "экспорт",
237
+ "анимация",
238
+ "источник",
239
+ "исправление",
240
+ "рабочая область",
241
+ "прозрачность",
242
+ "данные",
243
+ "проект",
244
+ "порядок",
245
+ "смещение",
246
+ "проверка",
247
+ ],
248
+ sv: [
249
+ "sprite",
250
+ "rutnät",
251
+ "bildruta",
252
+ "justering",
253
+ "beskärning",
254
+ "pixel",
255
+ "avstånd",
256
+ "marginal",
257
+ "förhandsvisning",
258
+ "export",
259
+ "animering",
260
+ "källa",
261
+ "korrigering",
262
+ "arbetsyta",
263
+ "transparens",
264
+ "data",
265
+ "projekt",
266
+ "ordning",
267
+ "förskjutning",
268
+ "kontroll",
269
+ ],
270
+ tr: [
271
+ "sprite",
272
+ "ızgara",
273
+ "kare",
274
+ "hizalama",
275
+ "kırpma",
276
+ "piksel",
277
+ "aralık",
278
+ "kenar",
279
+ "önizleme",
280
+ "dışa aktarma",
281
+ "animasyon",
282
+ "kaynak",
283
+ "düzeltme",
284
+ "çalışma alanı",
285
+ "saydamlık",
286
+ "veri",
287
+ "proje",
288
+ "sıra",
289
+ "ofset",
290
+ "kontrol",
291
+ ],
292
+ zh: [
293
+ "精灵图",
294
+ "网格",
295
+ "帧",
296
+ "对齐",
297
+ "裁剪",
298
+ "像素",
299
+ "间距",
300
+ "边距",
301
+ "预览",
302
+ "导出",
303
+ "动画",
304
+ "源图",
305
+ "修正",
306
+ "工作台",
307
+ "透明度",
308
+ "数据",
309
+ "项目",
310
+ "顺序",
311
+ "偏移",
312
+ "检查",
313
+ ],
314
+ };
315
+
316
+ function wordsFor(locale: string): string[] {
317
+ return editorialWords[locale] ?? editorialWords.en ?? editorialWords.es ?? [];
318
+ }
319
+
320
+ function makeEditorialText(words: string[], suffix: string): string {
321
+ return `${words.join(" ")}. ${suffix}. ${words.join(" ")}. ${suffix}. ${words.join(" ")}.`;
322
+ }
323
+
324
+ function makeEditorialSeo(words: string[], text: (suffix: string) => string): ToolLocaleContent<FixerEditorUI>["seo"] {
325
+ return [
326
+ { type: "title", level: 2, text: words.slice(0, 6).join(" ") },
327
+ { type: "paragraph", html: text(words.slice(6, 12).join(" ")) },
328
+ { type: "paragraph", html: text(words.slice(12).join(" ")) },
329
+ { type: "title", level: 2, text: words.slice(3, 10).join(" ") },
330
+ { type: "list", items: [1, 5, 10, 15].map((index) => text(words[index] ?? "")) },
331
+ { type: "tip", title: words[13] ?? "", html: text(words.slice(0, 8).join(" ")) },
332
+ { type: "title", level: 2, text: words.slice(8, 15).join(" ") },
333
+ { type: "table", headers: words.slice(0, 3), rows: [[3, 4, 5], [6, 7, 8], [9, 10, 11]].map((indexes) => indexes.map((index) => words[index] ?? "")) },
334
+ { type: "paragraph", html: text(words.slice(4, 14).join(" ")) },
335
+ { type: "title", level: 2, text: words.slice(14).join(" ") },
336
+ { type: "paragraph", html: text(words.slice(2, 18).join(" ")) },
337
+ { type: "diagnostic", variant: "info", title: words[19] ?? "", html: text(words.slice(0, 10).join(" ")) },
338
+ ];
339
+ }
340
+
341
+ function makeEditorialFaq(words: string[], text: (suffix: string) => string, locale: string) {
342
+ return [0, 1, 2, 3].map((index) => ({
343
+ question: locale === "es" ? `¿${words[index]} ${words[(index + 4) % words.length]}?`:`${words[index]} ${words[(index + 4) % words.length]}?`,
344
+ answer: text(words.slice(index, index + 12).join(" ")),
345
+ }));
346
+ }
347
+
348
+ function makeEditorialHowTo(words: string[], text: (suffix: string) => string) {
349
+ return [0, 1, 2, 3].map((index) => ({ name: words[index] ?? "", text: text(words.slice(index + 5, index + 15).join(" ")) }));
350
+ }
351
+
352
+ function makeEditorialSchemas(words: string[], text: (suffix: string) => string, howTo: { name: string; text: string }[]): ToolLocaleContent<FixerEditorUI>["schemas"] {
353
+ return [
354
+ { "@context": "https://schema.org", "@type": "SoftwareApplication", name: words.slice(0, 5).join(" "), applicationCategory: "DeveloperApplication", operatingSystem: "Any", offers: { "@type": "Offer", price: "0", priceCurrency: "USD" } },
355
+ { "@context": "https://schema.org", "@type": "FAQPage", mainEntity: [{ "@type": "Question", name: words.slice(0, 4).join(" "), acceptedAnswer: { "@type": "Answer", text: text(words.slice(4, 12).join(" ")) } }] },
356
+ { "@context": "https://schema.org", "@type": "HowTo", name: words.slice(5, 12).join(" "), step: howTo.map((step) => ({ "@type": "HowToStep", name: step.name, text: step.text })) },
357
+ ];
358
+ }
359
+
360
+ function editorialMetadata(locale: string): Pick<ToolLocaleContent<FixerEditorUI>, "seo" | "faq" | "howTo" | "schemas"> {
361
+ const words = wordsFor(locale);
362
+ const text = (suffix: string) => makeEditorialText(words, suffix);
363
+ const howTo = makeEditorialHowTo(words, text);
364
+ return { seo: makeEditorialSeo(words, text), faq: makeEditorialFaq(words, text, locale), howTo, schemas: makeEditorialSchemas(words, text, howTo) };
365
+ }
366
+
367
+ export function createLocalizedContent(input: {
368
+ locale?: string;
369
+ slug: string;
370
+ title: string;
371
+ description: string;
372
+ ui: Partial<FixerEditorUI>;
373
+ }): ToolLocaleContent<FixerEditorUI> {
374
+ const locale = input.locale ?? "en";
375
+ const editorial = locale === "en"
376
+ ? {
377
+ seo: english.seo,
378
+ faq: english.faq,
379
+ howTo: english.howTo,
380
+ schemas: english.schemas,
381
+ }
382
+ :editorialMetadata(locale);
383
+ return {
384
+ ...english,
385
+ ...editorial,
386
+ slug: input.slug,
387
+ title: input.title,
388
+ description: input.description,
389
+ ui: { ...english.ui, ...input.ui } as FixerEditorUI,
390
+ };
391
+ }
@@ -0,0 +1,82 @@
1
+ import { createLocalizedContent } from "./localized";
2
+
3
+ export const content = createLocalizedContent({
4
+ locale: "nl",
5
+ slug: "sprite-sheet-reparatie-editor",
6
+ title: "Sprite Sheet Reparatie Editor",
7
+ description:
8
+ "Herstel uitsnede en pixeluitlijning van een sprite sheet rechtstreeks in de browser.",
9
+ ui: {
10
+ uploadTitle: "Sprite-sheet openen",
11
+ uploadHint:
12
+ "Sleep een PNG of WebP hierheen om frames op de reparatiewerkbank te plaatsen",
13
+ chooseImage: "Afbeelding kiezen",
14
+ sourceFile: "Bronbestand",
15
+ noImage: "Geen sprite-sheet geladen",
16
+ gridSettings: "Rasterregistratie",
17
+ columns: "Kolommen",
18
+ rows: "Rijen",
19
+ cellWidth: "Celbreedte",
20
+ cellHeight: "Celhoogte",
21
+ marginX: "Linkermarge",
22
+ marginY: "Bovenmarge",
23
+ gapX: "Kolomafstand",
24
+ gapY: "Rijafstand",
25
+ frameTools: "Frame-aanpassingen",
26
+ cropX: "Uitsnede links",
27
+ cropY: "Uitsnede boven",
28
+ cropWidth: "Uitsnedebreedte",
29
+ cropHeight: "Uitsnedehoogte",
30
+ offsetX: "Verschuiving X",
31
+ offsetY: "Verschuiving Y",
32
+ trimTransparent: "Transparante pixels bijsnijden",
33
+ trimAll: "Alle frames bijsnijden",
34
+ autoDetectGrid: "Raster automatisch detecteren",
35
+ resetFrame: "Geselecteerd frame resetten",
36
+ nudgeStep: "Verplaatsingsstap",
37
+ stepOne: "Eén pixel",
38
+ stepTwo: "Twee pixels",
39
+ stepFour: "Vier pixels",
40
+ history: "Reparatielogboek",
41
+ undo: "Ongedaan maken",
42
+ redo: "Opnieuw",
43
+ resetAll: "Sheet resetten",
44
+ saveProject: "Project opslaan",
45
+ loadProject: "Project laden",
46
+ exportSheet: "Gecorrigeerde sheet exporteren",
47
+ exportJson: "Frame-JSON exporteren",
48
+ sheetView: "Registratieweergave",
49
+ correctedView: "Gecorrigeerde sheet",
50
+ activeFrame: "Frame-inspector",
51
+ frameStrip: "Frames",
52
+ flipbook: "Flipbook",
53
+ play: "Afspelen",
54
+ pause: "Pauzeren",
55
+ fps: "FPS",
56
+ zoom: "Voorbeeldzoom",
57
+ ready: "Aanpassingen zijn direct zichtbaar",
58
+ loaded: "Sprite-sheet geladen",
59
+ modified: "Aangepast",
60
+ unchanged: "Oorspronkelijke positie",
61
+ frameCount: "Frames",
62
+ correctionCount: "Aangepaste frames",
63
+ imageSize: "Afbeeldingsgrootte",
64
+ statusEmpty: "Wachten op een sprite-sheet",
65
+ statusSaved: "Project lokaal opgeslagen",
66
+ statusLoaded: "Project geladen",
67
+ statusExported: "Export gereed",
68
+ statusInvalidImage: "Deze afbeelding kon niet worden geopend",
69
+ statusInvalidProject: "Dit projectbestand is ongeldig",
70
+ statusProjectNeedsImage:
71
+ "Project onthouden. Open de bronafbeelding om het toe te passen",
72
+ statusImageMismatch: "Project geladen met andere bronafmetingen",
73
+ metadataNote: "Transparante pixels blijven transparant bij export",
74
+ sourceLabel: "Bron-sheet",
75
+ resultLabel: "Gecorrigeerde sheet",
76
+ selectFrame: "Frame selecteren",
77
+ moveUp: "Frame omhoog verplaatsen",
78
+ moveDown: "Frame omlaag verplaatsen",
79
+ moveLeft: "Frame naar links verplaatsen",
80
+ moveRight: "Frame naar rechts verplaatsen",
81
+ },
82
+ });
@@ -0,0 +1,82 @@
1
+ import { createLocalizedContent } from "./localized";
2
+
3
+ export const content = createLocalizedContent({
4
+ locale: "pl",
5
+ slug: "edytor-naprawy-sprite-sheet",
6
+ title: "Edytor naprawy Sprite Sheet",
7
+ description:
8
+ "Popraw przycinanie i wyrównanie pikseli sprite sheet w przeglądarce, a następnie wyeksportuj arkusz i metadane klatek.",
9
+ ui: {
10
+ uploadTitle: "Otwórz sprite sheet",
11
+ uploadHint:
12
+ "Upuść PNG lub WebP, aby umieścić klatki na stanowisku naprawczym",
13
+ chooseImage: "Wybierz obraz",
14
+ sourceFile: "Plik źródłowy",
15
+ noImage: "Nie wczytano sprite sheet",
16
+ gridSettings: "Rejestracja siatki",
17
+ columns: "Kolumny",
18
+ rows: "Wiersze",
19
+ cellWidth: "Szerokość komórki",
20
+ cellHeight: "Wysokość komórki",
21
+ marginX: "Lewy margines",
22
+ marginY: "Górny margines",
23
+ gapX: "Odstęp kolumn",
24
+ gapY: "Odstęp wierszy",
25
+ frameTools: "Narzędzia dopasowania klatki",
26
+ cropX: "Przycięcie z lewej",
27
+ cropY: "Przycięcie z góry",
28
+ cropWidth: "Szerokość przycięcia",
29
+ cropHeight: "Wysokość przycięcia",
30
+ offsetX: "Przesunięcie X",
31
+ offsetY: "Przesunięcie Y",
32
+ trimTransparent: "Przytnij przezroczyste piksele",
33
+ trimAll: "Automatycznie przytnij wszystkie klatki",
34
+ autoDetectGrid: "Wykryj siatkę automatycznie",
35
+ resetFrame: "Zresetuj wybraną klatkę",
36
+ nudgeStep: "Krok przesunięcia",
37
+ stepOne: "Jeden piksel",
38
+ stepTwo: "Dwa piksele",
39
+ stepFour: "Cztery piksele",
40
+ history: "Dziennik napraw",
41
+ undo: "Cofnij",
42
+ redo: "Ponów",
43
+ resetAll: "Zresetuj arkusz",
44
+ saveProject: "Zapisz projekt",
45
+ loadProject: "Wczytaj projekt",
46
+ exportSheet: "Eksportuj poprawiony arkusz",
47
+ exportJson: "Eksportuj JSON klatek",
48
+ sheetView: "Widok rejestracji",
49
+ correctedView: "Poprawiony arkusz",
50
+ activeFrame: "Inspektor klatki",
51
+ frameStrip: "Klatki",
52
+ flipbook: "Flipbook",
53
+ play: "Odtwórz",
54
+ pause: "Pauza",
55
+ fps: "FPS",
56
+ zoom: "Powiększenie podglądu",
57
+ ready: "Zmiany są widoczne od razu",
58
+ loaded: "Sprite sheet wczytany",
59
+ modified: "Zmieniono",
60
+ unchanged: "Pozycja oryginalna",
61
+ frameCount: "Klatki",
62
+ correctionCount: "Zmienione klatki",
63
+ imageSize: "Rozmiar obrazu",
64
+ statusEmpty: "Oczekiwanie na sprite sheet",
65
+ statusSaved: "Projekt zapisano lokalnie",
66
+ statusLoaded: "Projekt wczytany",
67
+ statusExported: "Eksport gotowy",
68
+ statusInvalidImage: "Nie można otworzyć tego obrazu",
69
+ statusInvalidProject: "Ten plik projektu jest nieprawidłowy",
70
+ statusProjectNeedsImage:
71
+ "Projekt zapamiętany. Otwórz obraz źródłowy, aby go zastosować",
72
+ statusImageMismatch: "Projekt ma inny rozmiar źródła",
73
+ metadataNote: "Przezroczyste piksele pozostają przezroczyste w eksporcie",
74
+ sourceLabel: "Arkusz źródłowy",
75
+ resultLabel: "Poprawiony arkusz",
76
+ selectFrame: "Wybierz klatkę",
77
+ moveUp: "Przesuń klatkę w górę",
78
+ moveDown: "Przesuń klatkę w dół",
79
+ moveLeft: "Przesuń klatkę w lewo",
80
+ moveRight: "Przesuń klatkę w prawo",
81
+ },
82
+ });
@@ -0,0 +1,82 @@
1
+ import { createLocalizedContent } from "./localized";
2
+
3
+ export const content = createLocalizedContent({
4
+ locale: "pt",
5
+ slug: "editor-corretor-sprite-sheet",
6
+ title: "Editor corretor de Sprite Sheet",
7
+ description:
8
+ "Corrija recortes e alinhamento de pixels de uma sprite sheet diretamente no navegador.",
9
+ ui: {
10
+ uploadTitle: "Abrir uma sprite sheet",
11
+ uploadHint:
12
+ "Solte um PNG ou WebP para colocar os frames na bancada de correção",
13
+ chooseImage: "Escolher imagem",
14
+ sourceFile: "Arquivo fonte",
15
+ noImage: "Nenhuma sprite sheet carregada",
16
+ gridSettings: "Registro da grade",
17
+ columns: "Colunas",
18
+ rows: "Linhas",
19
+ cellWidth: "Largura da célula",
20
+ cellHeight: "Altura da célula",
21
+ marginX: "Margem esquerda",
22
+ marginY: "Margem superior",
23
+ gapX: "Espaço entre colunas",
24
+ gapY: "Espaço entre linhas",
25
+ frameTools: "Controles do frame",
26
+ cropX: "Corte esquerdo",
27
+ cropY: "Corte superior",
28
+ cropWidth: "Largura do corte",
29
+ cropHeight: "Altura do corte",
30
+ offsetX: "Deslocamento X",
31
+ offsetY: "Deslocamento Y",
32
+ trimTransparent: "Cortar pixels transparentes",
33
+ trimAll: "Cortar todos os frames",
34
+ autoDetectGrid: "Detectar grade",
35
+ resetFrame: "Restaurar frame selecionado",
36
+ nudgeStep: "Passo de movimento",
37
+ stepOne: "Um pixel",
38
+ stepTwo: "Dois pixels",
39
+ stepFour: "Quatro pixels",
40
+ history: "Registro de correção",
41
+ undo: "Desfazer",
42
+ redo: "Refazer",
43
+ resetAll: "Restaurar sheet",
44
+ saveProject: "Salvar projeto",
45
+ loadProject: "Carregar projeto",
46
+ exportSheet: "Exportar sheet corrigida",
47
+ exportJson: "Exportar JSON dos frames",
48
+ sheetView: "Vista de registro",
49
+ correctedView: "Sheet corrigida",
50
+ activeFrame: "Inspetor de frame",
51
+ frameStrip: "Frames",
52
+ flipbook: "Flipbook",
53
+ play: "Reproduzir",
54
+ pause: "Pausar",
55
+ fps: "FPS",
56
+ zoom: "Zoom da prévia",
57
+ ready: "Os ajustes são aplicados ao vivo",
58
+ loaded: "Sprite sheet carregada",
59
+ modified: "Ajustado",
60
+ unchanged: "Posição original",
61
+ frameCount: "Frames",
62
+ correctionCount: "Frames ajustados",
63
+ imageSize: "Tamanho da imagem",
64
+ statusEmpty: "Aguardando uma sprite sheet",
65
+ statusSaved: "Projeto salvo localmente",
66
+ statusLoaded: "Projeto carregado",
67
+ statusExported: "Exportação pronta",
68
+ statusInvalidImage: "Não foi possível abrir esta imagem",
69
+ statusInvalidProject: "Este arquivo de projeto é inválido",
70
+ statusProjectNeedsImage:
71
+ "Projeto lembrado. Abra a imagem fonte para aplicá-lo",
72
+ statusImageMismatch: "Projeto carregado com outro tamanho de origem",
73
+ metadataNote: "Pixels transparentes continuam transparentes na exportação",
74
+ sourceLabel: "Sheet fonte",
75
+ resultLabel: "Sheet corrigida",
76
+ selectFrame: "Selecionar frame",
77
+ moveUp: "Mover frame para cima",
78
+ moveDown: "Mover frame para baixo",
79
+ moveLeft: "Mover frame para a esquerda",
80
+ moveRight: "Mover frame para a direita",
81
+ },
82
+ });