@jjlmoya/utils-audiovisual 1.6.0 → 1.8.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 (175) hide show
  1. package/package.json +59 -58
  2. package/src/category/i18n/de.ts +198 -0
  3. package/src/category/i18n/fr.ts +1 -1
  4. package/src/category/i18n/id.ts +198 -0
  5. package/src/category/i18n/it.ts +198 -0
  6. package/src/category/i18n/ja.ts +198 -0
  7. package/src/category/i18n/ko.ts +198 -0
  8. package/src/category/i18n/nl.ts +198 -0
  9. package/src/category/i18n/pl.ts +198 -0
  10. package/src/category/i18n/pt.ts +198 -0
  11. package/src/category/i18n/ru.ts +198 -0
  12. package/src/category/i18n/sv.ts +198 -0
  13. package/src/category/i18n/tr.ts +198 -0
  14. package/src/category/i18n/zh.ts +198 -0
  15. package/src/category/index.ts +31 -3
  16. package/src/tests/i18n_coverage.test.ts +36 -0
  17. package/src/tests/schemas_fulfillment.test.ts +23 -0
  18. package/src/tests/title_quality.test.ts +55 -0
  19. package/src/tool/chromaticLens/i18n/de.ts +246 -0
  20. package/src/tool/chromaticLens/i18n/en.ts +1 -1
  21. package/src/tool/chromaticLens/i18n/es.ts +1 -1
  22. package/src/tool/chromaticLens/i18n/fr.ts +1 -1
  23. package/src/tool/chromaticLens/i18n/id.ts +246 -0
  24. package/src/tool/chromaticLens/i18n/it.ts +246 -0
  25. package/src/tool/chromaticLens/i18n/ja.ts +246 -0
  26. package/src/tool/chromaticLens/i18n/ko.ts +246 -0
  27. package/src/tool/chromaticLens/i18n/nl.ts +246 -0
  28. package/src/tool/chromaticLens/i18n/pl.ts +246 -0
  29. package/src/tool/chromaticLens/i18n/pt.ts +246 -0
  30. package/src/tool/chromaticLens/i18n/ru.ts +246 -0
  31. package/src/tool/chromaticLens/i18n/sv.ts +246 -0
  32. package/src/tool/chromaticLens/i18n/tr.ts +246 -0
  33. package/src/tool/chromaticLens/i18n/zh.ts +246 -0
  34. package/src/tool/chromaticLens/index.ts +15 -7
  35. package/src/tool/collageMaker/i18n/de.ts +233 -0
  36. package/src/tool/collageMaker/i18n/en.ts +1 -1
  37. package/src/tool/collageMaker/i18n/es.ts +1 -1
  38. package/src/tool/collageMaker/i18n/fr.ts +1 -1
  39. package/src/tool/collageMaker/i18n/id.ts +233 -0
  40. package/src/tool/collageMaker/i18n/it.ts +233 -0
  41. package/src/tool/collageMaker/i18n/ja.ts +233 -0
  42. package/src/tool/collageMaker/i18n/ko.ts +233 -0
  43. package/src/tool/collageMaker/i18n/nl.ts +233 -0
  44. package/src/tool/collageMaker/i18n/pl.ts +233 -0
  45. package/src/tool/collageMaker/i18n/pt.ts +233 -0
  46. package/src/tool/collageMaker/i18n/ru.ts +233 -0
  47. package/src/tool/collageMaker/i18n/sv.ts +233 -0
  48. package/src/tool/collageMaker/i18n/tr.ts +233 -0
  49. package/src/tool/collageMaker/i18n/zh.ts +233 -0
  50. package/src/tool/collageMaker/index.ts +15 -6
  51. package/src/tool/exifCleaner/i18n/de.ts +277 -0
  52. package/src/tool/exifCleaner/i18n/en.ts +2 -2
  53. package/src/tool/exifCleaner/i18n/es.ts +2 -2
  54. package/src/tool/exifCleaner/i18n/fr.ts +4 -4
  55. package/src/tool/exifCleaner/i18n/id.ts +277 -0
  56. package/src/tool/exifCleaner/i18n/it.ts +277 -0
  57. package/src/tool/exifCleaner/i18n/ja.ts +277 -0
  58. package/src/tool/exifCleaner/i18n/ko.ts +277 -0
  59. package/src/tool/exifCleaner/i18n/nl.ts +277 -0
  60. package/src/tool/exifCleaner/i18n/pl.ts +277 -0
  61. package/src/tool/exifCleaner/i18n/pt.ts +277 -0
  62. package/src/tool/exifCleaner/i18n/ru.ts +277 -0
  63. package/src/tool/exifCleaner/i18n/sv.ts +277 -0
  64. package/src/tool/exifCleaner/i18n/tr.ts +277 -0
  65. package/src/tool/exifCleaner/i18n/zh.ts +277 -0
  66. package/src/tool/exifCleaner/index.ts +16 -8
  67. package/src/tool/imageCompressor/i18n/de.ts +242 -0
  68. package/src/tool/imageCompressor/i18n/en.ts +2 -2
  69. package/src/tool/imageCompressor/i18n/es.ts +2 -2
  70. package/src/tool/imageCompressor/i18n/id.ts +242 -0
  71. package/src/tool/imageCompressor/i18n/it.ts +242 -0
  72. package/src/tool/imageCompressor/i18n/ja.ts +242 -0
  73. package/src/tool/imageCompressor/i18n/ko.ts +242 -0
  74. package/src/tool/imageCompressor/i18n/nl.ts +242 -0
  75. package/src/tool/imageCompressor/i18n/pl.ts +242 -0
  76. package/src/tool/imageCompressor/i18n/pt.ts +242 -0
  77. package/src/tool/imageCompressor/i18n/ru.ts +242 -0
  78. package/src/tool/imageCompressor/i18n/sv.ts +242 -0
  79. package/src/tool/imageCompressor/i18n/tr.ts +242 -0
  80. package/src/tool/imageCompressor/i18n/zh.ts +244 -0
  81. package/src/tool/imageCompressor/index.ts +15 -7
  82. package/src/tool/printQualityCalculator/i18n/de.ts +261 -0
  83. package/src/tool/printQualityCalculator/i18n/en.ts +2 -2
  84. package/src/tool/printQualityCalculator/i18n/es.ts +3 -3
  85. package/src/tool/printQualityCalculator/i18n/fr.ts +3 -3
  86. package/src/tool/printQualityCalculator/i18n/id.ts +261 -0
  87. package/src/tool/printQualityCalculator/i18n/it.ts +261 -0
  88. package/src/tool/printQualityCalculator/i18n/ja.ts +261 -0
  89. package/src/tool/printQualityCalculator/i18n/ko.ts +261 -0
  90. package/src/tool/printQualityCalculator/i18n/nl.ts +261 -0
  91. package/src/tool/printQualityCalculator/i18n/pl.ts +261 -0
  92. package/src/tool/printQualityCalculator/i18n/pt.ts +261 -0
  93. package/src/tool/printQualityCalculator/i18n/ru.ts +261 -0
  94. package/src/tool/printQualityCalculator/i18n/sv.ts +261 -0
  95. package/src/tool/printQualityCalculator/i18n/tr.ts +261 -0
  96. package/src/tool/printQualityCalculator/i18n/zh.ts +261 -0
  97. package/src/tool/printQualityCalculator/index.ts +15 -7
  98. package/src/tool/privacyBlur/i18n/de.ts +238 -0
  99. package/src/tool/privacyBlur/i18n/en.ts +1 -1
  100. package/src/tool/privacyBlur/i18n/es.ts +1 -1
  101. package/src/tool/privacyBlur/i18n/fr.ts +1 -1
  102. package/src/tool/privacyBlur/i18n/id.ts +238 -0
  103. package/src/tool/privacyBlur/i18n/it.ts +238 -0
  104. package/src/tool/privacyBlur/i18n/ja.ts +238 -0
  105. package/src/tool/privacyBlur/i18n/ko.ts +238 -0
  106. package/src/tool/privacyBlur/i18n/nl.ts +238 -0
  107. package/src/tool/privacyBlur/i18n/pl.ts +238 -0
  108. package/src/tool/privacyBlur/i18n/pt.ts +238 -0
  109. package/src/tool/privacyBlur/i18n/ru.ts +238 -0
  110. package/src/tool/privacyBlur/i18n/sv.ts +238 -0
  111. package/src/tool/privacyBlur/i18n/tr.ts +238 -0
  112. package/src/tool/privacyBlur/i18n/zh.ts +238 -0
  113. package/src/tool/privacyBlur/index.ts +15 -7
  114. package/src/tool/subtitleSync/i18n/de.ts +241 -0
  115. package/src/tool/subtitleSync/i18n/en.ts +1 -1
  116. package/src/tool/subtitleSync/i18n/es.ts +1 -1
  117. package/src/tool/subtitleSync/i18n/fr.ts +8 -8
  118. package/src/tool/subtitleSync/i18n/id.ts +241 -0
  119. package/src/tool/subtitleSync/i18n/it.ts +241 -0
  120. package/src/tool/subtitleSync/i18n/ja.ts +241 -0
  121. package/src/tool/subtitleSync/i18n/ko.ts +241 -0
  122. package/src/tool/subtitleSync/i18n/nl.ts +241 -0
  123. package/src/tool/subtitleSync/i18n/pl.ts +241 -0
  124. package/src/tool/subtitleSync/i18n/pt.ts +241 -0
  125. package/src/tool/subtitleSync/i18n/ru.ts +241 -0
  126. package/src/tool/subtitleSync/i18n/sv.ts +241 -0
  127. package/src/tool/subtitleSync/i18n/tr.ts +241 -0
  128. package/src/tool/subtitleSync/i18n/zh.ts +241 -0
  129. package/src/tool/subtitleSync/index.ts +15 -7
  130. package/src/tool/timelapseCalculator/i18n/de.ts +169 -0
  131. package/src/tool/timelapseCalculator/i18n/fr.ts +2 -2
  132. package/src/tool/timelapseCalculator/i18n/id.ts +169 -0
  133. package/src/tool/timelapseCalculator/i18n/it.ts +169 -0
  134. package/src/tool/timelapseCalculator/i18n/ja.ts +169 -0
  135. package/src/tool/timelapseCalculator/i18n/ko.ts +169 -0
  136. package/src/tool/timelapseCalculator/i18n/nl.ts +169 -0
  137. package/src/tool/timelapseCalculator/i18n/pl.ts +169 -0
  138. package/src/tool/timelapseCalculator/i18n/pt.ts +169 -0
  139. package/src/tool/timelapseCalculator/i18n/ru.ts +169 -0
  140. package/src/tool/timelapseCalculator/i18n/sv.ts +169 -0
  141. package/src/tool/timelapseCalculator/i18n/tr.ts +169 -0
  142. package/src/tool/timelapseCalculator/i18n/zh.ts +169 -0
  143. package/src/tool/timelapseCalculator/index.ts +16 -8
  144. package/src/tool/tvDistance/i18n/de.ts +223 -0
  145. package/src/tool/tvDistance/i18n/en.ts +1 -1
  146. package/src/tool/tvDistance/i18n/es.ts +1 -1
  147. package/src/tool/tvDistance/i18n/fr.ts +1 -1
  148. package/src/tool/tvDistance/i18n/id.ts +223 -0
  149. package/src/tool/tvDistance/i18n/it.ts +223 -0
  150. package/src/tool/tvDistance/i18n/ja.ts +223 -0
  151. package/src/tool/tvDistance/i18n/ko.ts +223 -0
  152. package/src/tool/tvDistance/i18n/nl.ts +223 -0
  153. package/src/tool/tvDistance/i18n/pl.ts +223 -0
  154. package/src/tool/tvDistance/i18n/pt.ts +223 -0
  155. package/src/tool/tvDistance/i18n/ru.ts +223 -0
  156. package/src/tool/tvDistance/i18n/sv.ts +223 -0
  157. package/src/tool/tvDistance/i18n/tr.ts +223 -0
  158. package/src/tool/tvDistance/i18n/zh.ts +223 -0
  159. package/src/tool/tvDistance/index.ts +15 -7
  160. package/src/tool/videoFrameExtractor/i18n/de.ts +235 -0
  161. package/src/tool/videoFrameExtractor/i18n/en.ts +1 -1
  162. package/src/tool/videoFrameExtractor/i18n/es.ts +1 -1
  163. package/src/tool/videoFrameExtractor/i18n/fr.ts +1 -1
  164. package/src/tool/videoFrameExtractor/i18n/id.ts +235 -0
  165. package/src/tool/videoFrameExtractor/i18n/it.ts +235 -0
  166. package/src/tool/videoFrameExtractor/i18n/ja.ts +235 -0
  167. package/src/tool/videoFrameExtractor/i18n/ko.ts +235 -0
  168. package/src/tool/videoFrameExtractor/i18n/nl.ts +235 -0
  169. package/src/tool/videoFrameExtractor/i18n/pl.ts +235 -0
  170. package/src/tool/videoFrameExtractor/i18n/pt.ts +235 -0
  171. package/src/tool/videoFrameExtractor/i18n/ru.ts +235 -0
  172. package/src/tool/videoFrameExtractor/i18n/sv.ts +235 -0
  173. package/src/tool/videoFrameExtractor/i18n/tr.ts +235 -0
  174. package/src/tool/videoFrameExtractor/i18n/zh.ts +235 -0
  175. package/src/tool/videoFrameExtractor/index.ts +16 -8
@@ -0,0 +1,233 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { CollageMakerUI, CollageMakerLocaleContent } from '../index';
3
+
4
+ const slug = 'pembuat-kolase-foto-online-gratis-komposisi-profesional';
5
+ const title = 'Pembuat Kolase Online: Desain komposisi profesional';
6
+ const description = 'Buat kolase foto gratis dalam hitungan detik. Pilih dari berbagai tata letak, sesuaikan tepi, dan unduh dalam kualitas tinggi tanpa watermark.';
7
+
8
+ const ui: CollageMakerUI = {
9
+ dropTitle: "Seret gambar ke sini",
10
+ dropSub: "atau {link} - min. 2, maks. 9",
11
+ dropLink: "pilih file",
12
+ imgsLoaded: "Gambar dimuat",
13
+ layoutLabel: "Tata Letak",
14
+ settingsLabel: "Pengaturan",
15
+ borderLabel: "Tepi",
16
+ borderColorLabel: "Warna tepi",
17
+ bgColorLabel: "Latar Belakang",
18
+ downloadBtn: "Unduh",
19
+ previewTitle: "Pratinjau",
20
+ needsImgs: "Anda butuh {n} gambar",
21
+ errorMin: "Anda butuh setidaknya 2 gambar",
22
+ errorMax: "Maksimal 9 gambar diizinkan",
23
+ errorLoad: "Kesalahan memuat gambar",
24
+ faqTitle: "Pertanyaan yang Sering Diajukan",
25
+ bibliographyTitle: "Referensi"
26
+ };
27
+
28
+ const faq: CollageMakerLocaleContent['faq'] = [
29
+ {
30
+ question: "Bagaimana cara mengubah urutan foto?",
31
+ answer: "Foto diletakkan di kolase mengikuti urutan saat foto tersebut muncul di daftar gambar yang dimuat. Anda dapat menghapus satu foto dan mengunggahnya kembali untuk menyesuaikan posisinya.",
32
+ },
33
+ {
34
+ question: "Format output apa yang dimiliki kolase?",
35
+ answer: "Kolase diunduh dalam format WebP resolusi tinggi, ideal untuk dibagikan di jejaring sosial tanpa kehilangan ketajaman.",
36
+ },
37
+ ];
38
+
39
+ const howTo: CollageMakerLocaleContent['howTo'] = [
40
+ {
41
+ name: "Unggah foto Anda",
42
+ text: "Pilih antara 2 dan 9 gambar dari file explorer Anda.",
43
+ },
44
+ {
45
+ name: "Pilih tata letak",
46
+ text: "Pilih kisi yang paling sesuai dengan jumlah foto yang telah Anda unggah.",
47
+ },
48
+ {
49
+ name: "Sesuaikan gaya",
50
+ text: "Sesuaikan ketebalan dan warna tepi untuk memberikan hasil akhir yang profesional.",
51
+ },
52
+ {
53
+ name: "Unduh dan bagikan",
54
+ text: "Tekan tombol buat dan unduh komposisi akhir Anda secara instan.",
55
+ },
56
+ ];
57
+
58
+ const bibliography: CollageMakerLocaleContent['bibliography'] = [
59
+ {
60
+ name: "Komposisi Fotografi: Seni Kolase",
61
+ url: "https://id.wikipedia.org/wiki/Kolase",
62
+ },
63
+ ];
64
+
65
+ const seo: CollageMakerLocaleContent['seo'] = [
66
+ {
67
+ type: 'summary',
68
+ title: 'Pembuat Kolase Online Profesional',
69
+ items: [
70
+ 'Berbagai tata letak dan kisi yang telah ditentukan',
71
+ 'Kustomisasi tepi dan warna latar belakang',
72
+ 'Resolusi tinggi 1200px siap untuk jejaring sosial',
73
+ 'Pemrosesan instan tanpa batas penggunaan'
74
+ ]
75
+ },
76
+ { type: 'title', text: 'Desain Kolase: Komposisi yang Bercerita', level: 2 },
77
+ { type: 'paragraph', html: 'Kolase lebih dari sekadar campuran foto; ini adalah narasi visual yang mengomunikasikan emosi dan konteks. Alat kami memungkinkan Anda membuat komposisi geometris profesional untuk Instagram, Facebook, Pinterest, atau proyek pribadi tanpa perlu Photoshop atau perangkat lunak mahal.' },
78
+
79
+ { type: 'stats', items: [
80
+ { value: '2-9', label: 'Gambar per Kolase', icon: 'mdi:image-multiple' },
81
+ { value: '1200px', label: 'Resolusi HD', icon: 'mdi:video-high-definition' },
82
+ { value: 'Instan', label: 'Pembuatan', icon: 'mdi:lightning-bolt' }
83
+ ], columns: 3 },
84
+
85
+ { type: 'title', text: 'Komposisi Visual: Prinsip Desain', level: 3 },
86
+ { type: 'paragraph', html: 'Komposisi adalah seni mengatur elemen visual sedemikian rupa sehingga memandu mata pemirsa dan mengomunikasikan maksud. Kolase yang baik menyeimbangkan:' },
87
+ { type: 'list', items: [
88
+ '<strong>Keseimbangan:</strong> Distribusi berat visual (gambar terang vs gelap, besar vs kecil).',
89
+ '<strong>Alur Visual:</strong> Mata harus menelusuri komposisi secara alami, tanpa titik mati.',
90
+ '<strong>Kontras:</strong> Variasi warna, ukuran, dan bentuk yang menarik perhatian.',
91
+ '<strong>Kesatuan:</strong> Koherensi tematik - gambar harus \"berbicara bersama\" tentang cerita yang sama.'
92
+ ], icon: 'mdi:check' },
93
+
94
+ { type: 'card', title: 'Desain Cerdas dan Adaptif', html: 'Sistem kami secara otomatis menghitung distribusi ruang yang optimal berdasarkan jumlah foto. 2 gambar = kisi simetris; 5 gambar = distribusi asimetris yang seimbang. Setiap kisi dirancang untuk memaksimalkan dampak visual.' },
95
+
96
+ { type: 'comparative', items: [
97
+ {
98
+ title: 'Untuk Jejaring Sosial',
99
+ description: 'Instagram, TikTok, Facebook - format persegi',
100
+ icon: 'mdi:share-all',
101
+ points: [
102
+ '1200px sangat cocok untuk feed Instagram',
103
+ 'Format persegi menghindari pemotongan saat memposting',
104
+ 'Tepi yang dapat disesuaikan untuk branding'
105
+ ],
106
+ highlight: true
107
+ },
108
+ {
109
+ title: 'Untuk Portofolio',
110
+ description: 'Etalase visual untuk fotografer dan desainer',
111
+ icon: 'mdi:briefcase-outline',
112
+ points: [
113
+ 'Tunjukkan berbagai sudut proyek',
114
+ 'Narasi visual yang kohesif',
115
+ 'Pencetakan buku digital profesional'
116
+ ]
117
+ },
118
+ {
119
+ title: 'Untuk Hadiah Pribadi',
120
+ description: 'Cetakan, bingkai, dan album digital',
121
+ icon: 'mdi:gift-outline',
122
+ points: [
123
+ 'Kenangan acara (pernikahan, perjalanan)',
124
+ 'Resolusi tinggi siap cetak',
125
+ 'Desain instan tanpa usaha manual'
126
+ ]
127
+ }
128
+ ], columns: 3 },
129
+
130
+ { type: 'title', text: 'Kustomisasi: Tepi dan Warna', level: 3 },
131
+ { type: 'table', headers: ['Elemen', 'Efek Visual', 'Rekomendasi'], rows: [
132
+ ['Tepi Putih', 'Bersih, minimalis, modern', 'Jejaring sosial, portofolio digital'],
133
+ ['Tepi Hitam', 'Dramatis, profesional, artistik', 'Fotografi seni, mode, kemewahan'],
134
+ ['Tepi Netral (abu-abu)', 'Serbaguna, akademis, korporat', 'Bisnis, pendidikan, netralitas'],
135
+ ['Tanpa Tepi', 'Fusi, kontinuitas, imersif', 'Latar belakang seragam, foto yang mengalir']
136
+ ] },
137
+
138
+ { type: 'proscons', items: [
139
+ {
140
+ pro: 'Desain profesional yang telah ditentukan - tidak butuh pengetahuan komposisi',
141
+ con: 'Opsi terbatas pada kisi yang telah ditetapkan'
142
+ },
143
+ {
144
+ pro: 'Resolusi 1200px siap untuk jejaring sosial tanpa penskalaan ulang',
145
+ con: 'Tidak sekustomisasi Photoshop'
146
+ },
147
+ {
148
+ pro: 'Pemrosesan lokal 100% - privasi, kecepatan, tanpa batas',
149
+ con: 'Memerlukan browser modern'
150
+ },
151
+ {
152
+ pro: 'Sepenuhnya gratis, tanpa watermark, tanpa iklan',
153
+ con: 'Tidak ada opsi pengeditan individual (pemotongan, rotasi)'
154
+ }
155
+ ], proTitle: 'Keunggulan', conTitle: 'Batasan' },
156
+
157
+ { type: 'diagnostic', variant: 'success', title: 'Siap untuk Jejaring Sosial', icon: 'mdi:check-circle-outline', badge: 'Teroptimasi', html: '1200x1200px adalah resolusi ideal untuk Instagram. Ini mendukung rasio aspek apa pun, tetapi output persegi memaksimalkan dampak feed, menghilangkan pemotongan otomatis, dan terlihat sama bagusnya di desktop, tablet, dan seluler.' },
158
+
159
+ { type: 'glossary', items: [
160
+ {
161
+ term: 'Komposisi Visual',
162
+ definition: 'Seni mengatur elemen (warna, bentuk, ruang) untuk memandu mata pemirsa dan mengomunikasikan maksud emosional.'
163
+ },
164
+ {
165
+ term: 'Aturan Sepertiga',
166
+ definition: 'Prinsip komposisi: membagi gambar menjadi 9 area yang sama (3x3). Posisikan subjek pada garis persimpangan untuk dampak maksimal.'
167
+ },
168
+ {
169
+ term: 'Kisi Simetris',
170
+ definition: 'Pembagian ruang yang sama. Menenangkan, tertib. Ideal untuk pasangan foto atau jumlah genap.'
171
+ },
172
+ {
173
+ term: 'Kisi Asimetris',
174
+ definition: 'Pembagian tidak sama. Dinamis, menarik, visual. Ideal untuk 5+ foto dengan variasi ukuran.'
175
+ },
176
+ {
177
+ term: 'Keseimbangan Visual',
178
+ definition: 'Ekuilibrium perseptual dari berat visual. Gambar terang + gelap = seimbang; besar + kecil = seimbang.'
179
+ }
180
+ ] },
181
+
182
+ { type: 'message', title: 'Narasi Visual Instan', ariaLabel: 'Informasi tentang komposisi dan kolase', html: 'Setiap kolase bercerita. Desainer otomatis kami memastikan cerita visual Anda seimbang, profesional, dan siap untuk dunia. Tanpa perlu menunggu desainer grafis melakukan pekerjaannya.' },
183
+
184
+ { type: 'title', text: 'Buat, Bagikan, Inspirasi', level: 3 },
185
+ { type: 'paragraph', html: 'Kolase yang dibuat dengan baik adalah perbedaan antara postingan yang mudah dilupakan dan postingan yang diingat serta dibagikan oleh pengikut Anda. Gunakan komposisi cerdas agar cerita visual Anda berdampak.' }
186
+ ];
187
+
188
+ const faqSchema: WithContext<FAQPage> = {
189
+ '@context': 'https://schema.org',
190
+ '@type': 'FAQPage',
191
+ mainEntity: faq.map((item) => ({
192
+ '@type': 'Question',
193
+ name: item.question,
194
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
195
+ })),
196
+ };
197
+
198
+ const howToSchema: WithContext<HowTo> = {
199
+ '@context': 'https://schema.org',
200
+ '@type': 'HowTo',
201
+ name: title,
202
+ description,
203
+ step: howTo.map((step) => ({
204
+ '@type': 'HowToStep',
205
+ name: step.name,
206
+ text: step.text,
207
+ })),
208
+ };
209
+
210
+ const appSchema: WithContext<SoftwareApplication> = {
211
+ '@context': 'https://schema.org',
212
+ '@type': 'SoftwareApplication',
213
+ name: title,
214
+ description,
215
+ applicationCategory: 'UtilitiesApplication',
216
+ operatingSystem: 'Web',
217
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
218
+ inLanguage: 'id',
219
+ };
220
+
221
+ export const content: CollageMakerLocaleContent = {
222
+ slug,
223
+ title,
224
+ description,
225
+ ui,
226
+ seo,
227
+ faqTitle: "Pertanyaan yang Sering Diajukan",
228
+ faq,
229
+ bibliographyTitle: "Referensi",
230
+ bibliography,
231
+ howTo,
232
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
233
+ };
@@ -0,0 +1,233 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { CollageMakerUI, CollageMakerLocaleContent } from '../index';
3
+
4
+ const slug = 'crea-collage-foto-online-gratis-composizioni-professionali';
5
+ const title = 'Creatore di Collage Online: Progetta composizioni professionali';
6
+ const description = 'Crea collage di foto gratuitamente in pochi secondi. Scegli tra vari layout, regola i bordi e scarica in alta qualità senza filigrane.';
7
+
8
+ const ui: CollageMakerUI = {
9
+ dropTitle: "Trascina le immagini qui",
10
+ dropSub: "o {link} - min. 2, max. 9",
11
+ dropLink: "seleziona i file",
12
+ imgsLoaded: "Immagini caricate",
13
+ layoutLabel: "Layout",
14
+ settingsLabel: "Impostazioni",
15
+ borderLabel: "Bordo",
16
+ borderColorLabel: "Colore bordo",
17
+ bgColorLabel: "Sfondo",
18
+ downloadBtn: "Scarica",
19
+ previewTitle: "Anteprima",
20
+ needsImgs: "Hai bisogno di {n} immagini",
21
+ errorMin: "Hai bisogno di almeno 2 immagini",
22
+ errorMax: "Massimo 9 immagini consentite",
23
+ errorLoad: "Errore durante il caricamento delle immagini",
24
+ faqTitle: "Domande Frequenti",
25
+ bibliographyTitle: "Riferimenti"
26
+ };
27
+
28
+ const faq: CollageMakerLocaleContent['faq'] = [
29
+ {
30
+ question: "Come posso cambiare l'ordine delle foto?",
31
+ answer: "Le foto vengono posizionate nel collage seguendo l'ordine in cui appaiono nell'elenco delle immagini caricate. Puoi rimuoverne una e caricarla di nuovo per regolarne la posizione.",
32
+ },
33
+ {
34
+ question: "Qual è il formato di output del collage?",
35
+ answer: "Il collage viene scaricato in formato WebP ad alta risoluzione, ideale per la condivisione sui social network senza perdere nitidezza.",
36
+ },
37
+ ];
38
+
39
+ const howTo: CollageMakerLocaleContent['howTo'] = [
40
+ {
41
+ name: "Carica le tue foto",
42
+ text: "Seleziona da 2 a 9 immagini dal tuo explorer di file.",
43
+ },
44
+ {
45
+ name: "Scegli un layout",
46
+ text: "Seleziona la griglia che meglio si adatta al numero di foto che hai caricato.",
47
+ },
48
+ {
49
+ name: "Personalizza lo stile",
50
+ text: "Regola lo spessore e il colore del bordo per dare un tocco professionale.",
51
+ },
52
+ {
53
+ name: "Scarica e condividi",
54
+ text: "Premi il pulsante di creazione e scarica istantaneamente la tua composizione finale.",
55
+ },
56
+ ];
57
+
58
+ const bibliography: CollageMakerLocaleContent['bibliography'] = [
59
+ {
60
+ name: "Composizione Fotografica: L'Arte del Collage",
61
+ url: "https://it.wikipedia.org/wiki/Collage",
62
+ },
63
+ ];
64
+
65
+ const seo: CollageMakerLocaleContent['seo'] = [
66
+ {
67
+ type: 'summary',
68
+ title: 'Creatore di Collage Online Professionale',
69
+ items: [
70
+ 'Molteplici layout e griglie predefinite',
71
+ 'Personalizzazione di bordi e colori di sfondo',
72
+ 'Alta risoluzione a 1200px pronta per i social network',
73
+ 'Elaborazione istantanea senza limiti d\'uso'
74
+ ]
75
+ },
76
+ { type: 'title', text: 'Design del Collage: Composizioni che raccontano storie', level: 2 },
77
+ { type: 'paragraph', html: 'Un collage è più di un semplice mix di foto; è una narrazione visiva che comunica emozioni e contesto. Il nostro strumento ti consente di creare composizioni geometriche professionali per Instagram, Facebook, Pinterest o progetti personali senza la necessità di Photoshop o software costosi.' },
78
+
79
+ { type: 'stats', items: [
80
+ { value: '2-9', label: 'Immagini per Collage', icon: 'mdi:image-multiple' },
81
+ { value: '1200px', label: 'Risoluzione HD', icon: 'mdi:video-high-definition' },
82
+ { value: 'Istantanea', label: 'Generazione', icon: 'mdi:lightning-bolt' }
83
+ ], columns: 3 },
84
+
85
+ { type: 'title', text: 'Composizione Visiva: Principi di Design', level: 3 },
86
+ { type: 'paragraph', html: 'La composizione è l\'arte di organizzare gli elementi visivi in modo da guidare l\'occhio dello spettatore e comunicare un\'intenzione. Un buon collage bilancia:' },
87
+ { type: 'list', items: [
88
+ '<strong>Equilibrio:</strong> Distribuzione visiva del peso (immagini chiare vs scure, grandi vs piccole).',
89
+ '<strong>Flusso Visivo:</strong> L\'occhio dovrebbe attraversare la composizione in modo naturale, senza punti morti.',
90
+ '<strong>Contrasto:</strong> Variazioni di colore, dimensioni e forma che attirano l\'attenzione.',
91
+ '<strong>Unità:</strong> Coerenza tematica - le immagini devono \"parlare insieme\" della stessa storia.'
92
+ ], icon: 'mdi:check' },
93
+
94
+ { type: 'card', title: 'Design Intelligenti e Adattivi', html: 'Il nostro sistema calcola automaticamente la distribuzione ottimale dello spazio in base al numero di foto. 2 immagini = griglia simmetrica; 5 immagini = distribuzione asimmetrica bilanciata. Ogni griglia è progettata per massimizzare l\'impatto visivo.' },
95
+
96
+ { type: 'comparative', items: [
97
+ {
98
+ title: 'Per i Social Network',
99
+ description: 'Instagram, TikTok, Facebook - formati quadrati',
100
+ icon: 'mdi:share-all',
101
+ points: [
102
+ 'Il formato a 1200px è perfetto per il feed di Instagram',
103
+ 'Il formato quadrato evita il ritaglio durante la pubblicazione',
104
+ 'Bordi personalizzabili per il branding'
105
+ ],
106
+ highlight: true
107
+ },
108
+ {
109
+ title: 'Per i Portfolio',
110
+ description: 'Vetrine visive per fotografi e designer',
111
+ icon: 'mdi:briefcase-outline',
112
+ points: [
113
+ 'Mostra più angolazioni di un progetto',
114
+ 'Narrativa visiva coerente',
115
+ 'Stampa di book digitali professionali'
116
+ ]
117
+ },
118
+ {
119
+ title: 'Per Regali Personali',
120
+ description: 'Stampe, cornici e album digitali',
121
+ icon: 'mdi:gift-outline',
122
+ points: [
123
+ 'Ricordi di eventi (matrimoni, viaggi)',
124
+ 'Alta risoluzione pronta per la stampa',
125
+ 'Design istantaneo senza sforzo manuale'
126
+ ]
127
+ }
128
+ ], columns: 3 },
129
+
130
+ { type: 'title', text: 'Personalizzazione: Bordi e Colori', level: 3 },
131
+ { type: 'table', headers: ['Elemento', 'Effetto Visivo', 'Raccomandazione'], rows: [
132
+ ['Bordo Bianco', 'Pulito, minimalista, moderno', 'Social network, portfolio digitali'],
133
+ ['Bordo Nero', 'Drammatico, professionale, artistico', 'Fotografia d\'arte, moda, lusso'],
134
+ ['Bordo Neutro (grigio)', 'Versatile, accademico, aziendale', 'Affari, istruzione, neutralità'],
135
+ ['Senza Bordo', 'Fusione, continuità, immersivo', 'Sfondo uniforme, foto fluide']
136
+ ] },
137
+
138
+ { type: 'proscons', items: [
139
+ {
140
+ pro: 'Design professionali predefiniti - non è necessaria alcuna conoscenza della composizione',
141
+ con: 'Opzioni limitate alle griglie prestabilite'
142
+ },
143
+ {
144
+ pro: 'Risoluzione a 1200px pronta per i social network senza ridimensionamento',
145
+ con: 'Non personalizzabile come Photoshop'
146
+ },
147
+ {
148
+ pro: 'Elaborazione 100% locale - privacy, velocità, senza limiti',
149
+ con: 'Richiede un browser moderno'
150
+ },
151
+ {
152
+ pro: 'Totalmente gratuito, senza filigrane, senza pubblicità',
153
+ con: 'Nessuna opzione di modifica individuale (ritaglio, rotazione)'
154
+ }
155
+ ], proTitle: 'Vantaggi', conTitle: 'Limitazioni' },
156
+
157
+ { type: 'diagnostic', variant: 'success', title: 'Pronto per i Social Network', icon: 'mdi:check-circle-outline', badge: 'Ottimizzato', html: '1200x1200px è la risoluzione ideale per Instagram. Supporta qualsiasi rapporto d\'aspetto, ma l\'output quadrato massimizza l\'impatto nel feed, elimina il ritaglio automatico e rende bene su desktop, tablet e mobile.' },
158
+
159
+ { type: 'glossary', items: [
160
+ {
161
+ term: 'Composizione Visiva',
162
+ definition: 'L\'arte di organizzare gli elementi (colore, forma, spazio) per guidare l\'occhio dello spettatore e comunicare un\'intenzione emotiva.'
163
+ },
164
+ {
165
+ term: 'Regola dei Terzi',
166
+ definition: 'Principio di composizione: divide l\'immagine in 9 aree uguali (3x3). Posiziona i soggetti sulle linee di intersezione per il massimo impatto.'
167
+ },
168
+ {
169
+ term: 'Griglia Simmetrica',
170
+ definition: 'Suddivisioni uguali dello spazio. Rassicurante, ordinata. Ideale per coppie di foto o numeri pari.'
171
+ },
172
+ {
173
+ term: 'Griglia Asimmetrica',
174
+ definition: 'Suddivisioni irregolari. Dinamica, interessante, visiva. Ideale per 5 o più foto con varietà di dimensioni.'
175
+ },
176
+ {
177
+ term: 'Equilibrio Visivo',
178
+ definition: 'Equilibrio percettivo del peso visivo. Immagine chiara + scura = equilibrio; grande + piccola = equilibrio.'
179
+ }
180
+ ] },
181
+
182
+ { type: 'message', title: 'Narrativa Visiva Istantanea', ariaLabel: 'Informazioni sulla composizione e sui collage', html: 'Ogni collage racconta una storia. Il nostro designer automatico assicura che le tue storie visive siano equilibrate, professionali e pronte per il mondo, senza dover aspettare il lavoro di un grafico.' },
183
+
184
+ { type: 'title', text: 'Crea, Condividi, Ispira', level: 3 },
185
+ { type: 'paragraph', html: 'Un collage ben fatto è ciò che fa la differenza tra un post dimenticabile e uno che i tuoi follower ricorderanno e condivideranno. Usa la composizione intelligente per dare impatto alle tue storie visive.' }
186
+ ];
187
+
188
+ const faqSchema: WithContext<FAQPage> = {
189
+ '@context': 'https://schema.org',
190
+ '@type': 'FAQPage',
191
+ mainEntity: faq.map((item) => ({
192
+ '@type': 'Question',
193
+ name: item.question,
194
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
195
+ })),
196
+ };
197
+
198
+ const howToSchema: WithContext<HowTo> = {
199
+ '@context': 'https://schema.org',
200
+ '@type': 'HowTo',
201
+ name: title,
202
+ description,
203
+ step: howTo.map((step) => ({
204
+ '@type': 'HowToStep',
205
+ name: step.name,
206
+ text: step.text,
207
+ })),
208
+ };
209
+
210
+ const appSchema: WithContext<SoftwareApplication> = {
211
+ '@context': 'https://schema.org',
212
+ '@type': 'SoftwareApplication',
213
+ name: title,
214
+ description,
215
+ applicationCategory: 'UtilitiesApplication',
216
+ operatingSystem: 'Web',
217
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
218
+ inLanguage: 'it',
219
+ };
220
+
221
+ export const content: CollageMakerLocaleContent = {
222
+ slug,
223
+ title,
224
+ description,
225
+ ui,
226
+ seo,
227
+ faqTitle: "Domande Frequenti",
228
+ faq,
229
+ bibliographyTitle: "Riferimenti",
230
+ bibliography,
231
+ howTo,
232
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
233
+ };