@jjlmoya/utils-developer 1.4.0 → 1.6.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 (339) hide show
  1. package/package.json +2 -1
  2. package/src/category/i18n/de.ts +34 -0
  3. package/src/category/i18n/id.ts +34 -0
  4. package/src/category/i18n/it.ts +34 -0
  5. package/src/category/i18n/ja.ts +34 -0
  6. package/src/category/i18n/ko.ts +34 -0
  7. package/src/category/i18n/nl.ts +34 -0
  8. package/src/category/i18n/pl.ts +34 -0
  9. package/src/category/i18n/pt.ts +34 -0
  10. package/src/category/i18n/ru.ts +34 -0
  11. package/src/category/i18n/sv.ts +34 -0
  12. package/src/category/i18n/tr.ts +34 -0
  13. package/src/category/i18n/zh.ts +34 -0
  14. package/src/category/index.ts +13 -1
  15. package/src/tests/faq_count.test.ts +1 -1
  16. package/src/tests/i18n_coverage.test.ts +36 -0
  17. package/src/tests/locale_completeness.test.ts +2 -2
  18. package/src/tests/slug_language_code_format.test.ts +25 -0
  19. package/src/tests/slug_uniqueness.test.ts +87 -0
  20. package/src/tool/aspectRatio/i18n/de.ts +177 -0
  21. package/src/tool/aspectRatio/i18n/id.ts +177 -0
  22. package/src/tool/aspectRatio/i18n/it.ts +177 -0
  23. package/src/tool/aspectRatio/i18n/ja.ts +178 -0
  24. package/src/tool/aspectRatio/i18n/ko.ts +178 -0
  25. package/src/tool/aspectRatio/i18n/nl.ts +178 -0
  26. package/src/tool/aspectRatio/i18n/pl.ts +177 -0
  27. package/src/tool/aspectRatio/i18n/pt.ts +177 -0
  28. package/src/tool/aspectRatio/i18n/ru.ts +177 -0
  29. package/src/tool/aspectRatio/i18n/sv.ts +177 -0
  30. package/src/tool/aspectRatio/i18n/tr.ts +177 -0
  31. package/src/tool/aspectRatio/i18n/zh.ts +178 -0
  32. package/src/tool/aspectRatio/index.ts +15 -7
  33. package/src/tool/calculadoraTiempoDatos/i18n/de.ts +150 -0
  34. package/src/tool/calculadoraTiempoDatos/i18n/id.ts +150 -0
  35. package/src/tool/calculadoraTiempoDatos/i18n/it.ts +150 -0
  36. package/src/tool/calculadoraTiempoDatos/i18n/ja.ts +151 -0
  37. package/src/tool/calculadoraTiempoDatos/i18n/ko.ts +151 -0
  38. package/src/tool/calculadoraTiempoDatos/i18n/nl.ts +150 -0
  39. package/src/tool/calculadoraTiempoDatos/i18n/pl.ts +150 -0
  40. package/src/tool/calculadoraTiempoDatos/i18n/pt.ts +150 -0
  41. package/src/tool/calculadoraTiempoDatos/i18n/ru.ts +151 -0
  42. package/src/tool/calculadoraTiempoDatos/i18n/sv.ts +150 -0
  43. package/src/tool/calculadoraTiempoDatos/i18n/tr.ts +150 -0
  44. package/src/tool/calculadoraTiempoDatos/i18n/zh.ts +151 -0
  45. package/src/tool/calculadoraTiempoDatos/index.ts +15 -7
  46. package/src/tool/colorConverter/i18n/de.ts +126 -0
  47. package/src/tool/colorConverter/i18n/id.ts +126 -0
  48. package/src/tool/colorConverter/i18n/it.ts +126 -0
  49. package/src/tool/colorConverter/i18n/ja.ts +127 -0
  50. package/src/tool/colorConverter/i18n/ko.ts +127 -0
  51. package/src/tool/colorConverter/i18n/nl.ts +126 -0
  52. package/src/tool/colorConverter/i18n/pl.ts +126 -0
  53. package/src/tool/colorConverter/i18n/pt.ts +126 -0
  54. package/src/tool/colorConverter/i18n/ru.ts +126 -0
  55. package/src/tool/colorConverter/i18n/sv.ts +126 -0
  56. package/src/tool/colorConverter/i18n/tr.ts +126 -0
  57. package/src/tool/colorConverter/i18n/zh.ts +127 -0
  58. package/src/tool/colorConverter/index.ts +15 -7
  59. package/src/tool/conversorExcelCsvHtml/i18n/de.ts +129 -0
  60. package/src/tool/conversorExcelCsvHtml/i18n/id.ts +129 -0
  61. package/src/tool/conversorExcelCsvHtml/i18n/it.ts +129 -0
  62. package/src/tool/conversorExcelCsvHtml/i18n/ja.ts +130 -0
  63. package/src/tool/conversorExcelCsvHtml/i18n/ko.ts +130 -0
  64. package/src/tool/conversorExcelCsvHtml/i18n/nl.ts +129 -0
  65. package/src/tool/conversorExcelCsvHtml/i18n/pl.ts +129 -0
  66. package/src/tool/conversorExcelCsvHtml/i18n/pt.ts +129 -0
  67. package/src/tool/conversorExcelCsvHtml/i18n/ru.ts +129 -0
  68. package/src/tool/conversorExcelCsvHtml/i18n/sv.ts +129 -0
  69. package/src/tool/conversorExcelCsvHtml/i18n/tr.ts +129 -0
  70. package/src/tool/conversorExcelCsvHtml/i18n/zh.ts +130 -0
  71. package/src/tool/conversorExcelCsvHtml/index.ts +15 -7
  72. package/src/tool/cronGenerator/i18n/de.ts +192 -0
  73. package/src/tool/cronGenerator/i18n/es.ts +1 -0
  74. package/src/tool/cronGenerator/i18n/fr.ts +2 -1
  75. package/src/tool/cronGenerator/i18n/id.ts +192 -0
  76. package/src/tool/cronGenerator/i18n/it.ts +192 -0
  77. package/src/tool/cronGenerator/i18n/ja.ts +192 -0
  78. package/src/tool/cronGenerator/i18n/ko.ts +192 -0
  79. package/src/tool/cronGenerator/i18n/nl.ts +192 -0
  80. package/src/tool/cronGenerator/i18n/pl.ts +192 -0
  81. package/src/tool/cronGenerator/i18n/pt.ts +192 -0
  82. package/src/tool/cronGenerator/i18n/ru.ts +192 -0
  83. package/src/tool/cronGenerator/i18n/sv.ts +192 -0
  84. package/src/tool/cronGenerator/i18n/tr.ts +192 -0
  85. package/src/tool/cronGenerator/i18n/zh.ts +192 -0
  86. package/src/tool/cronGenerator/index.ts +15 -7
  87. package/src/tool/cssSpecificityCalculator/i18n/de.ts +168 -0
  88. package/src/tool/cssSpecificityCalculator/i18n/id.ts +168 -0
  89. package/src/tool/cssSpecificityCalculator/i18n/it.ts +168 -0
  90. package/src/tool/cssSpecificityCalculator/i18n/ja.ts +169 -0
  91. package/src/tool/cssSpecificityCalculator/i18n/ko.ts +169 -0
  92. package/src/tool/cssSpecificityCalculator/i18n/nl.ts +168 -0
  93. package/src/tool/cssSpecificityCalculator/i18n/pl.ts +168 -0
  94. package/src/tool/cssSpecificityCalculator/i18n/pt.ts +168 -0
  95. package/src/tool/cssSpecificityCalculator/i18n/ru.ts +168 -0
  96. package/src/tool/cssSpecificityCalculator/i18n/sv.ts +168 -0
  97. package/src/tool/cssSpecificityCalculator/i18n/tr.ts +168 -0
  98. package/src/tool/cssSpecificityCalculator/i18n/zh.ts +169 -0
  99. package/src/tool/cssSpecificityCalculator/index.ts +15 -7
  100. package/src/tool/cssToInlineConverter/i18n/de.ts +160 -0
  101. package/src/tool/cssToInlineConverter/i18n/id.ts +160 -0
  102. package/src/tool/cssToInlineConverter/i18n/it.ts +160 -0
  103. package/src/tool/cssToInlineConverter/i18n/ja.ts +161 -0
  104. package/src/tool/cssToInlineConverter/i18n/ko.ts +161 -0
  105. package/src/tool/cssToInlineConverter/i18n/nl.ts +160 -0
  106. package/src/tool/cssToInlineConverter/i18n/pl.ts +160 -0
  107. package/src/tool/cssToInlineConverter/i18n/pt.ts +160 -0
  108. package/src/tool/cssToInlineConverter/i18n/ru.ts +160 -0
  109. package/src/tool/cssToInlineConverter/i18n/sv.ts +160 -0
  110. package/src/tool/cssToInlineConverter/i18n/tr.ts +160 -0
  111. package/src/tool/cssToInlineConverter/i18n/zh.ts +161 -0
  112. package/src/tool/cssToInlineConverter/index.ts +15 -7
  113. package/src/tool/duplicateCssRemover/i18n/de.ts +167 -0
  114. package/src/tool/duplicateCssRemover/i18n/id.ts +167 -0
  115. package/src/tool/duplicateCssRemover/i18n/it.ts +167 -0
  116. package/src/tool/duplicateCssRemover/i18n/ja.ts +168 -0
  117. package/src/tool/duplicateCssRemover/i18n/ko.ts +168 -0
  118. package/src/tool/duplicateCssRemover/i18n/nl.ts +167 -0
  119. package/src/tool/duplicateCssRemover/i18n/pl.ts +167 -0
  120. package/src/tool/duplicateCssRemover/i18n/pt.ts +167 -0
  121. package/src/tool/duplicateCssRemover/i18n/ru.ts +167 -0
  122. package/src/tool/duplicateCssRemover/i18n/sv.ts +167 -0
  123. package/src/tool/duplicateCssRemover/i18n/tr.ts +167 -0
  124. package/src/tool/duplicateCssRemover/i18n/zh.ts +168 -0
  125. package/src/tool/duplicateCssRemover/index.ts +15 -7
  126. package/src/tool/generadorSecurityTxt/i18n/de.ts +174 -0
  127. package/src/tool/generadorSecurityTxt/i18n/id.ts +174 -0
  128. package/src/tool/generadorSecurityTxt/i18n/it.ts +174 -0
  129. package/src/tool/generadorSecurityTxt/i18n/ja.ts +174 -0
  130. package/src/tool/generadorSecurityTxt/i18n/ko.ts +174 -0
  131. package/src/tool/generadorSecurityTxt/i18n/nl.ts +174 -0
  132. package/src/tool/generadorSecurityTxt/i18n/pl.ts +174 -0
  133. package/src/tool/generadorSecurityTxt/i18n/pt.ts +174 -0
  134. package/src/tool/generadorSecurityTxt/i18n/ru.ts +174 -0
  135. package/src/tool/generadorSecurityTxt/i18n/sv.ts +174 -0
  136. package/src/tool/generadorSecurityTxt/i18n/tr.ts +174 -0
  137. package/src/tool/generadorSecurityTxt/i18n/zh.ts +174 -0
  138. package/src/tool/generadorSecurityTxt/index.ts +15 -7
  139. package/src/tool/hashGenerator/i18n/de.ts +119 -0
  140. package/src/tool/hashGenerator/i18n/id.ts +119 -0
  141. package/src/tool/hashGenerator/i18n/it.ts +118 -0
  142. package/src/tool/hashGenerator/i18n/ja.ts +119 -0
  143. package/src/tool/hashGenerator/i18n/ko.ts +119 -0
  144. package/src/tool/hashGenerator/i18n/nl.ts +119 -0
  145. package/src/tool/hashGenerator/i18n/pl.ts +118 -0
  146. package/src/tool/hashGenerator/i18n/pt.ts +118 -0
  147. package/src/tool/hashGenerator/i18n/ru.ts +119 -0
  148. package/src/tool/hashGenerator/i18n/sv.ts +119 -0
  149. package/src/tool/hashGenerator/i18n/tr.ts +118 -0
  150. package/src/tool/hashGenerator/i18n/zh.ts +119 -0
  151. package/src/tool/hashGenerator/index.ts +15 -7
  152. package/src/tool/inspectorCertificadosSsl/i18n/de.ts +214 -0
  153. package/src/tool/inspectorCertificadosSsl/i18n/id.ts +215 -0
  154. package/src/tool/inspectorCertificadosSsl/i18n/it.ts +214 -0
  155. package/src/tool/inspectorCertificadosSsl/i18n/ja.ts +215 -0
  156. package/src/tool/inspectorCertificadosSsl/i18n/ko.ts +215 -0
  157. package/src/tool/inspectorCertificadosSsl/i18n/nl.ts +215 -0
  158. package/src/tool/inspectorCertificadosSsl/i18n/pl.ts +215 -0
  159. package/src/tool/inspectorCertificadosSsl/i18n/pt.ts +214 -0
  160. package/src/tool/inspectorCertificadosSsl/i18n/ru.ts +215 -0
  161. package/src/tool/inspectorCertificadosSsl/i18n/sv.ts +215 -0
  162. package/src/tool/inspectorCertificadosSsl/i18n/tr.ts +215 -0
  163. package/src/tool/inspectorCertificadosSsl/i18n/zh.ts +215 -0
  164. package/src/tool/inspectorCertificadosSsl/index.ts +24 -0
  165. package/src/tool/jsonFormatter/i18n/de.ts +157 -0
  166. package/src/tool/jsonFormatter/i18n/es.ts +1 -0
  167. package/src/tool/jsonFormatter/i18n/fr.ts +2 -1
  168. package/src/tool/jsonFormatter/i18n/id.ts +157 -0
  169. package/src/tool/jsonFormatter/i18n/it.ts +156 -0
  170. package/src/tool/jsonFormatter/i18n/ja.ts +157 -0
  171. package/src/tool/jsonFormatter/i18n/ko.ts +157 -0
  172. package/src/tool/jsonFormatter/i18n/nl.ts +157 -0
  173. package/src/tool/jsonFormatter/i18n/pl.ts +156 -0
  174. package/src/tool/jsonFormatter/i18n/pt.ts +156 -0
  175. package/src/tool/jsonFormatter/i18n/ru.ts +157 -0
  176. package/src/tool/jsonFormatter/i18n/sv.ts +157 -0
  177. package/src/tool/jsonFormatter/i18n/tr.ts +157 -0
  178. package/src/tool/jsonFormatter/i18n/zh.ts +157 -0
  179. package/src/tool/jsonFormatter/index.ts +15 -7
  180. package/src/tool/keycode/i18n/de.ts +161 -0
  181. package/src/tool/keycode/i18n/es.ts +1 -0
  182. package/src/tool/keycode/i18n/fr.ts +2 -1
  183. package/src/tool/keycode/i18n/id.ts +161 -0
  184. package/src/tool/keycode/i18n/it.ts +161 -0
  185. package/src/tool/keycode/i18n/ja.ts +161 -0
  186. package/src/tool/keycode/i18n/ko.ts +161 -0
  187. package/src/tool/keycode/i18n/nl.ts +161 -0
  188. package/src/tool/keycode/i18n/pl.ts +161 -0
  189. package/src/tool/keycode/i18n/pt.ts +160 -0
  190. package/src/tool/keycode/i18n/ru.ts +160 -0
  191. package/src/tool/keycode/i18n/sv.ts +160 -0
  192. package/src/tool/keycode/i18n/tr.ts +160 -0
  193. package/src/tool/keycode/i18n/zh.ts +161 -0
  194. package/src/tool/keycode/index.ts +15 -7
  195. package/src/tool/llmCostCalculator/i18n/de.ts +166 -0
  196. package/src/tool/llmCostCalculator/i18n/fr.ts +2 -1
  197. package/src/tool/llmCostCalculator/i18n/id.ts +166 -0
  198. package/src/tool/llmCostCalculator/i18n/it.ts +166 -0
  199. package/src/tool/llmCostCalculator/i18n/ja.ts +166 -0
  200. package/src/tool/llmCostCalculator/i18n/ko.ts +166 -0
  201. package/src/tool/llmCostCalculator/i18n/nl.ts +166 -0
  202. package/src/tool/llmCostCalculator/i18n/pl.ts +165 -0
  203. package/src/tool/llmCostCalculator/i18n/pt.ts +165 -0
  204. package/src/tool/llmCostCalculator/i18n/ru.ts +165 -0
  205. package/src/tool/llmCostCalculator/i18n/sv.ts +165 -0
  206. package/src/tool/llmCostCalculator/i18n/tr.ts +165 -0
  207. package/src/tool/llmCostCalculator/i18n/zh.ts +166 -0
  208. package/src/tool/llmCostCalculator/index.ts +24 -0
  209. package/src/tool/mobileMockupGenerator/i18n/de.ts +121 -0
  210. package/src/tool/mobileMockupGenerator/i18n/id.ts +121 -0
  211. package/src/tool/mobileMockupGenerator/i18n/it.ts +121 -0
  212. package/src/tool/mobileMockupGenerator/i18n/ja.ts +122 -0
  213. package/src/tool/mobileMockupGenerator/i18n/ko.ts +122 -0
  214. package/src/tool/mobileMockupGenerator/i18n/nl.ts +121 -0
  215. package/src/tool/mobileMockupGenerator/i18n/pl.ts +31 -0
  216. package/src/tool/mobileMockupGenerator/i18n/pt.ts +121 -0
  217. package/src/tool/mobileMockupGenerator/i18n/ru.ts +121 -0
  218. package/src/tool/mobileMockupGenerator/i18n/sv.ts +121 -0
  219. package/src/tool/mobileMockupGenerator/i18n/tr.ts +121 -0
  220. package/src/tool/mobileMockupGenerator/i18n/zh.ts +122 -0
  221. package/src/tool/mobileMockupGenerator/index.ts +24 -0
  222. package/src/tool/musicalTypography/i18n/de.ts +179 -0
  223. package/src/tool/musicalTypography/i18n/id.ts +179 -0
  224. package/src/tool/musicalTypography/i18n/it.ts +179 -0
  225. package/src/tool/musicalTypography/i18n/ja.ts +180 -0
  226. package/src/tool/musicalTypography/i18n/ko.ts +180 -0
  227. package/src/tool/musicalTypography/i18n/nl.ts +179 -0
  228. package/src/tool/musicalTypography/i18n/pl.ts +179 -0
  229. package/src/tool/musicalTypography/i18n/pt.ts +101 -0
  230. package/src/tool/musicalTypography/i18n/ru.ts +47 -0
  231. package/src/tool/musicalTypography/i18n/sv.ts +29 -0
  232. package/src/tool/musicalTypography/i18n/tr.ts +29 -0
  233. package/src/tool/musicalTypography/i18n/zh.ts +30 -0
  234. package/src/tool/musicalTypography/index.ts +15 -7
  235. package/src/tool/placeholderGenerator/i18n/de.ts +176 -0
  236. package/src/tool/placeholderGenerator/i18n/id.ts +176 -0
  237. package/src/tool/placeholderGenerator/i18n/it.ts +176 -0
  238. package/src/tool/placeholderGenerator/i18n/ja.ts +177 -0
  239. package/src/tool/placeholderGenerator/i18n/ko.ts +177 -0
  240. package/src/tool/placeholderGenerator/i18n/nl.ts +176 -0
  241. package/src/tool/placeholderGenerator/i18n/pl.ts +176 -0
  242. package/src/tool/placeholderGenerator/i18n/pt.ts +176 -0
  243. package/src/tool/placeholderGenerator/i18n/ru.ts +176 -0
  244. package/src/tool/placeholderGenerator/i18n/sv.ts +176 -0
  245. package/src/tool/placeholderGenerator/i18n/tr.ts +176 -0
  246. package/src/tool/placeholderGenerator/i18n/zh.ts +177 -0
  247. package/src/tool/placeholderGenerator/index.ts +24 -0
  248. package/src/tool/promptLibrary/i18n/de.ts +131 -0
  249. package/src/tool/promptLibrary/i18n/id.ts +131 -0
  250. package/src/tool/promptLibrary/i18n/it.ts +131 -0
  251. package/src/tool/promptLibrary/i18n/ja.ts +132 -0
  252. package/src/tool/promptLibrary/i18n/ko.ts +132 -0
  253. package/src/tool/promptLibrary/i18n/nl.ts +131 -0
  254. package/src/tool/promptLibrary/i18n/pl.ts +28 -0
  255. package/src/tool/promptLibrary/i18n/pt.ts +101 -0
  256. package/src/tool/promptLibrary/i18n/ru.ts +101 -0
  257. package/src/tool/promptLibrary/i18n/sv.ts +93 -0
  258. package/src/tool/promptLibrary/i18n/tr.ts +93 -0
  259. package/src/tool/promptLibrary/i18n/zh.ts +94 -0
  260. package/src/tool/promptLibrary/index.ts +24 -0
  261. package/src/tool/readabilityCalculator/i18n/de.ts +133 -0
  262. package/src/tool/readabilityCalculator/i18n/id.ts +133 -0
  263. package/src/tool/readabilityCalculator/i18n/it.ts +133 -0
  264. package/src/tool/readabilityCalculator/i18n/ja.ts +134 -0
  265. package/src/tool/readabilityCalculator/i18n/ko.ts +134 -0
  266. package/src/tool/readabilityCalculator/i18n/nl.ts +133 -0
  267. package/src/tool/readabilityCalculator/i18n/pl.ts +29 -0
  268. package/src/tool/readabilityCalculator/i18n/pt.ts +91 -0
  269. package/src/tool/readabilityCalculator/i18n/ru.ts +91 -0
  270. package/src/tool/readabilityCalculator/i18n/sv.ts +43 -0
  271. package/src/tool/readabilityCalculator/i18n/tr.ts +43 -0
  272. package/src/tool/readabilityCalculator/i18n/zh.ts +44 -0
  273. package/src/tool/readabilityCalculator/index.ts +24 -0
  274. package/src/tool/svgSanitizer/i18n/de.ts +125 -0
  275. package/src/tool/svgSanitizer/i18n/id.ts +125 -0
  276. package/src/tool/svgSanitizer/i18n/it.ts +125 -0
  277. package/src/tool/svgSanitizer/i18n/ja.ts +126 -0
  278. package/src/tool/svgSanitizer/i18n/ko.ts +126 -0
  279. package/src/tool/svgSanitizer/i18n/nl.ts +125 -0
  280. package/src/tool/svgSanitizer/i18n/pl.ts +125 -0
  281. package/src/tool/svgSanitizer/i18n/pt.ts +30 -0
  282. package/src/tool/svgSanitizer/i18n/ru.ts +126 -0
  283. package/src/tool/svgSanitizer/i18n/sv.ts +126 -0
  284. package/src/tool/svgSanitizer/i18n/tr.ts +126 -0
  285. package/src/tool/svgSanitizer/i18n/zh.ts +126 -0
  286. package/src/tool/svgSanitizer/index.ts +24 -0
  287. package/src/tool/svgToCss/i18n/de.ts +174 -0
  288. package/src/tool/svgToCss/i18n/id.ts +174 -0
  289. package/src/tool/svgToCss/i18n/it.ts +174 -0
  290. package/src/tool/svgToCss/i18n/ja.ts +175 -0
  291. package/src/tool/svgToCss/i18n/ko.ts +175 -0
  292. package/src/tool/svgToCss/i18n/nl.ts +174 -0
  293. package/src/tool/svgToCss/i18n/pl.ts +174 -0
  294. package/src/tool/svgToCss/i18n/pt.ts +174 -0
  295. package/src/tool/svgToCss/i18n/ru.ts +174 -0
  296. package/src/tool/svgToCss/i18n/sv.ts +174 -0
  297. package/src/tool/svgToCss/i18n/tr.ts +174 -0
  298. package/src/tool/svgToCss/i18n/zh.ts +175 -0
  299. package/src/tool/svgToCss/index.ts +15 -7
  300. package/src/tool/urlCleaner/i18n/de.ts +116 -0
  301. package/src/tool/urlCleaner/i18n/id.ts +116 -0
  302. package/src/tool/urlCleaner/i18n/it.ts +116 -0
  303. package/src/tool/urlCleaner/i18n/ja.ts +117 -0
  304. package/src/tool/urlCleaner/i18n/ko.ts +117 -0
  305. package/src/tool/urlCleaner/i18n/nl.ts +116 -0
  306. package/src/tool/urlCleaner/i18n/pl.ts +29 -0
  307. package/src/tool/urlCleaner/i18n/pt.ts +43 -0
  308. package/src/tool/urlCleaner/i18n/ru.ts +43 -0
  309. package/src/tool/urlCleaner/i18n/sv.ts +43 -0
  310. package/src/tool/urlCleaner/i18n/tr.ts +43 -0
  311. package/src/tool/urlCleaner/i18n/zh.ts +44 -0
  312. package/src/tool/urlCleaner/index.ts +24 -0
  313. package/src/tool/urlEncoderDecoder/i18n/de.ts +163 -0
  314. package/src/tool/urlEncoderDecoder/i18n/id.ts +163 -0
  315. package/src/tool/urlEncoderDecoder/i18n/it.ts +163 -0
  316. package/src/tool/urlEncoderDecoder/i18n/ja.ts +163 -0
  317. package/src/tool/urlEncoderDecoder/i18n/ko.ts +163 -0
  318. package/src/tool/urlEncoderDecoder/i18n/nl.ts +163 -0
  319. package/src/tool/urlEncoderDecoder/i18n/pl.ts +162 -0
  320. package/src/tool/urlEncoderDecoder/i18n/pt.ts +162 -0
  321. package/src/tool/urlEncoderDecoder/i18n/ru.ts +163 -0
  322. package/src/tool/urlEncoderDecoder/i18n/sv.ts +163 -0
  323. package/src/tool/urlEncoderDecoder/i18n/tr.ts +162 -0
  324. package/src/tool/urlEncoderDecoder/i18n/zh.ts +163 -0
  325. package/src/tool/urlEncoderDecoder/index.ts +15 -7
  326. package/src/tool/utmGenerator/i18n/de.ts +118 -0
  327. package/src/tool/utmGenerator/i18n/id.ts +118 -0
  328. package/src/tool/utmGenerator/i18n/it.ts +118 -0
  329. package/src/tool/utmGenerator/i18n/ja.ts +118 -0
  330. package/src/tool/utmGenerator/i18n/ko.ts +118 -0
  331. package/src/tool/utmGenerator/i18n/nl.ts +118 -0
  332. package/src/tool/utmGenerator/i18n/pl.ts +117 -0
  333. package/src/tool/utmGenerator/i18n/pt.ts +118 -0
  334. package/src/tool/utmGenerator/i18n/ru.ts +118 -0
  335. package/src/tool/utmGenerator/i18n/sv.ts +118 -0
  336. package/src/tool/utmGenerator/i18n/tr.ts +117 -0
  337. package/src/tool/utmGenerator/i18n/zh.ts +118 -0
  338. package/src/tool/utmGenerator/index.ts +15 -7
  339. package/src/types.ts +1 -2
@@ -0,0 +1,122 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { MobileMockupGeneratorUI } from '../ui';
4
+
5
+ const slug = 'mobile-mockup-generator';
6
+ const title = '移动演示图生成器。iPhone 和 Google Pixel';
7
+ const description = '为 App Store 和 Google Play 创建专业演示。带有自定义背景、全景布局和批量高分辨率导出的 iPhone 和 Pixel 演示图。';
8
+
9
+ const faqData = [
10
+ { question: '这些截图对 App Store 和 Google Play 有效吗?', answer: '是的,生成的图像符合应用商店的宽高比和质量要求。只需在导出前选择正确的设备(iOS 用 iPhone,Android 用 Pixel)即可。' },
11
+ { question: '我可以使用自己的自定义背景吗?', answer: '当然可以。除了我们的高级渐变库外,您还可以从计算机上传任何图像作为演示图的背景环境。' },
12
+ { question: '商用是否免费?', answer: '是的,您可以将生成的演示图用于商业项目、作品集或演示,无需费用且无水印。' },
13
+ { question: '我的截图是否保存在任何服务器上?', answer: '否。生成器 100% 在您的浏览器中本地运行。您的私人图像永远不会离开您的计算机。' },
14
+ ];
15
+
16
+ const howToData = [
17
+ { name: '上传截图', text: '拖动或选择您想要呈现的移动应用程序的屏幕截图。' },
18
+ { name: '选择设备', text: '根据目标商店选择智能手机型号(iOS 用 iPhone 15 Pro Max 或 Android 用 Google Pixel 8)。' },
19
+ { name: '自定义环境', text: '调整背景、设备角度,添加营销文本并选择组合布局。' },
20
+ { name: '以高清方式下载', text: '以高分辨率 WebP 格式导出所有结果,准备上传到应用商店。' },
21
+ ];
22
+
23
+ const faqSchema: WithContext<FAQPage> = {
24
+ '@context': 'https://schema.org',
25
+ '@type': 'FAQPage',
26
+ mainEntity: faqData.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })),
27
+ };
28
+
29
+ const howToSchema: WithContext<HowToThing> = {
30
+ '@context': 'https://schema.org',
31
+ '@type': 'HowTo',
32
+ name: title,
33
+ description,
34
+ step: howToData.map((step, i) => ({ '@type': 'HowToStep', position: i + 1, name: step.name, text: step.text })),
35
+ };
36
+
37
+ const appSchema: WithContext<SoftwareApplication> = {
38
+ '@context': 'https://schema.org',
39
+ '@type': 'SoftwareApplication',
40
+ name: title,
41
+ description,
42
+ applicationCategory: 'DesignApplication',
43
+ operatingSystem: 'All',
44
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
45
+ inLanguage: 'zh',
46
+ };
47
+
48
+ const ui: MobileMockupGeneratorUI = {
49
+ labelUpload: '上传截图',
50
+ dropHint: '将图像拖到此处',
51
+ dropFormats: 'PNG、JPG 或 WEBP',
52
+ btnMassReplace: '批量替换',
53
+ massReplaceHint: '替换当前图像同时保留您的预设和文本。非常适合快速迭代。',
54
+ labelSettings: '全局设置',
55
+ labelDevice: '设备',
56
+ labelFont: '字体',
57
+ labelBackground: '背景',
58
+ titleSwapColors: '交换颜色',
59
+ labelAngle: '角度',
60
+ labelSafeArea: '安全区(上/下)',
61
+ labelSafeAreaColor: '区域颜色',
62
+ emptyTitle: '还没有图像',
63
+ emptySubtitle: '上传您的截图开始设计',
64
+ btnClearAll: '清除画布',
65
+ btnExport: '导出全部 (.zip)',
66
+ cardTitleDuplicate: '复制场景',
67
+ cardTitleReplace: '替换当前屏幕截图',
68
+ cardSectionLayouts: '主布局',
69
+ cardSectionBranding: '品牌和文本',
70
+ cardTitleResetText: '重置文本',
71
+ cardLabelColor: '颜色',
72
+ cardTextPlaceholder: '在此输入文本...',
73
+ cardSectionDevice: '设备布局',
74
+ cardTitleResetDevice: '重置位置',
75
+ cardSectionScene: '道具和背景',
76
+ cardBtnSpecialBg: '特殊背景',
77
+ cardBtnDeleteScene: '删除场景',
78
+ cardRangeLabelSize: '大小',
79
+ cardRangeLabelX: 'X 轴',
80
+ cardRangeLabelY: 'Y 轴',
81
+ cardRangeLabelRotation: '旋转',
82
+ cardRangeLabelScale: '缩放',
83
+ presetClassic: '经典',
84
+ presetMobileBottom: '移动底部',
85
+ presetMobileTop: '移动顶部',
86
+ presetFocus: '焦点',
87
+ presetDynamic: '动态',
88
+ presetSplitLeft: '左分割',
89
+ presetSplitRight: '右分割',
90
+ presetImageLeft: '左图像',
91
+ presetImageRight: '右图像',
92
+ confirmClear: '确定要删除所有演示图吗?',
93
+ processingExport: '处理中...',
94
+ exportDone: '完成!',
95
+ };
96
+
97
+ export const content: ToolLocaleContent<MobileMockupGeneratorUI> = {
98
+ slug,
99
+ title,
100
+ description,
101
+ ui,
102
+ faqTitle: '常见问题',
103
+ faq: faqData,
104
+ bibliographyTitle: '参考资料',
105
+ bibliography: [
106
+ { name: 'Apple App Store 截图要求', url: 'https://developer.apple.com/help/app-store-connect/reference/screenshot-specifications' },
107
+ { name: 'Google Play 截图要求', url: 'https://support.google.com/googleplay/android-developer/answer/9866151' },
108
+ ],
109
+ howTo: howToData,
110
+ schemas: [faqSchema, howToSchema, appSchema],
111
+ seo: [
112
+ { type: 'title', text: '将您的屏幕截图提升到新的水平', level: 2 },
113
+ { type: 'paragraph', html: '不要仅限于简单的屏幕截图。我们的演示工具使开发人员和设计师能够创建高影响力的视觉资产,而无需 Photoshop 或 Figma。' },
114
+ { type: 'title', text: '主布局的威力', level: 3 },
115
+ { type: 'grid', columns: 2 },
116
+ { type: 'card', title: 'App Store 和 Google Play', html: '<p>优化您的转化率。iPhone 15 Pro Max 和 Pixel 8 演示图是应用商店列表的世界标准。</p>' },
117
+ { type: 'card', title: 'Pitch Deck 和营销', html: '<p>以权威方式呈现您的想法。非常适合投资者演讲、社交媒体活动和专业 UI/UX 设计作品集。</p>' },
118
+ { type: 'title', text: '专业工作流程', level: 3 },
119
+ { type: 'tip', html: '使用"左分割"和"右分割"预设来创建连续的演示图,在 Instagram 轮播或 App Store 屏幕截图中从一个图像滑到另一个。' },
120
+ ],
121
+ };
122
+
@@ -9,6 +9,18 @@ export type MobileMockupGeneratorLocaleContent = ToolLocaleContent<MobileMockupG
9
9
  import { content as es } from './i18n/es';
10
10
  import { content as en } from './i18n/en';
11
11
  import { content as fr } from './i18n/fr';
12
+ import { content as de } from './i18n/de';
13
+ import { content as id } from './i18n/id';
14
+ import { content as it } from './i18n/it';
15
+ import { content as ja } from './i18n/ja';
16
+ import { content as ko } from './i18n/ko';
17
+ import { content as nl } from './i18n/nl';
18
+ import { content as pl } from './i18n/pl';
19
+ import { content as pt } from './i18n/pt';
20
+ import { content as ru } from './i18n/ru';
21
+ import { content as sv } from './i18n/sv';
22
+ import { content as tr } from './i18n/tr';
23
+ import { content as zh } from './i18n/zh';
12
24
 
13
25
  export const mobileMockupGenerator: DeveloperToolEntry<MobileMockupGeneratorUI> = {
14
26
  id: 'mobile-mockup-generator',
@@ -20,6 +32,18 @@ export const mobileMockupGenerator: DeveloperToolEntry<MobileMockupGeneratorUI>
20
32
  es: async () => es,
21
33
  en: async () => en,
22
34
  fr: async () => fr,
35
+ de: async () => de,
36
+ id: async () => id,
37
+ it: async () => it,
38
+ ja: async () => ja,
39
+ ko: async () => ko,
40
+ nl: async () => nl,
41
+ pl: async () => pl,
42
+ pt: async () => pt,
43
+ ru: async () => ru,
44
+ sv: async () => sv,
45
+ tr: async () => tr,
46
+ zh: async () => zh,
23
47
  },
24
48
  };
25
49
 
@@ -0,0 +1,179 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { MusicalTypographyUI } from '../ui';
4
+
5
+ const slug = 'musikalische-typografie';
6
+ const title = 'Musikalische Typografieskala. Modularer Skalenrechner';
7
+ const description =
8
+ 'Kostenloses Online-Werkzeug zur Erstellung harmonischer visueller Hierarchien mit modularen Skalen auf Basis musikalischer Proportionen. Erzeugt fertige CSS-Variablen für dein Webdesign.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Was ist eine typografische Modularskala?',
13
+ answer:
14
+ 'Eine Methode zur Bestimmung von Schriftgrößen auf Basis eines konstanten mathematischen Verhältnisses. Wie in der Musik, wo Noten harmonische Beziehungen haben, erzeugt die Modularskala eine ausgewogene und vorhersehbare visuelle Hierarchie.',
15
+ },
16
+ {
17
+ question: 'Warum musikalische Intervalle im Design verwenden?',
18
+ answer:
19
+ 'Musikalische Intervalle sind Proportionen, die das menschliche Gehirn als harmonisch wahrnimmt. Auf Textgrößen angewendet entsteht eine visuelle Struktur, die sich richtig und professionell anfühlt, anstatt Größen willkürlich zu wählen.',
20
+ },
21
+ {
22
+ question: 'Was ist der Goldene Schnitt in der Typografie?',
23
+ answer:
24
+ 'Es ist das Verhältnis 1,618, bekannt als Goldener Schnitt. Er erzeugt sehr dramatische und elegante Skalen, bei denen jede Hierarchiestufe exponentiell wächst. Perfekt für Portfolios oder kunstorientierte Websites.',
25
+ },
26
+ {
27
+ question: 'Wie setze ich die Skala in meiner CSS-Datei ein?',
28
+ answer:
29
+ 'Das Werkzeug erzeugt CSS-Variablen (Tokens) im Format :root { --step-N: Xrem; }. Kopiere sie in deine Haupt-CSS-Datei und verwende sie mit var(--step-N), um typografische Konsistenz auf der gesamten Website zu wahren.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Basisgröße festlegen',
36
+ text: 'Gib die Schriftgröße für deinen Fließtext ein (üblicherweise 16px), die als Grundton deiner Skala dient.',
37
+ },
38
+ {
39
+ name: 'Intervall wählen',
40
+ text: 'Wähle eine musikalische Proportion, um festzulegen, wie viel Abstand zwischen den verschiedenen Überschriftsebenen liegt.',
41
+ },
42
+ {
43
+ name: 'Hierarchie vorschauen',
44
+ text: 'Beobachte in Echtzeit, wie sich die typografischen Ebenen verhalten, und prüfe, ob die visuelle Harmonie zu deinem Projekt passt.',
45
+ },
46
+ {
47
+ name: 'Code exportieren',
48
+ text: 'Klicke auf CSS-Variablen kopieren, um den Block zu erhalten, der direkt in deinen Workflow eingefügt werden kann.',
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowToThing> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step, i) => ({
68
+ '@type': 'HowToStep',
69
+ position: i + 1,
70
+ name: step.name,
71
+ text: step.text,
72
+ })),
73
+ };
74
+
75
+ const appSchema: WithContext<SoftwareApplication> = {
76
+ '@context': 'https://schema.org',
77
+ '@type': 'SoftwareApplication',
78
+ name: title,
79
+ description,
80
+ applicationCategory: 'DesignApplication',
81
+ operatingSystem: 'All',
82
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
83
+ inLanguage: 'de',
84
+ };
85
+
86
+ const ui: MusicalTypographyUI = {
87
+ labelConfig: 'Konfiguration',
88
+ labelBaseSize: 'Basisgröße (px)',
89
+ hintBaseSize: 'Die Schriftgröße deines Fließtexts (üblicherweise 16px).',
90
+ labelRatio: 'Musikalische Skala (Ratio)',
91
+ hintRatio: 'Bestimmt, wie stark die Größe pro Schritt wächst.',
92
+ labelCalculated: 'Berechnete Werte',
93
+ labelPreview: 'Vorschau',
94
+ btnCopyCss: 'CSS-Variablen kopieren',
95
+ feedbackCopied: 'Variablen in die Zwischenablage kopiert!',
96
+ previewText: 'Musikalische Typografie',
97
+ previewSubtext: 'Eine perfekte harmonische Skala für dein Design.',
98
+ ratioSecundaMenor: 'Kleine Sekunde',
99
+ ratioSegundaMayor: 'Große Sekunde',
100
+ ratioTerceraMenor: 'Kleine Terz',
101
+ ratioTerceraMayor: 'Große Terz',
102
+ ratioCuartaPerfecta: 'Reine Quarte',
103
+ ratioCuartaAumentada: 'Übermäßige Quarte',
104
+ ratioQuintaPerfecta: 'Reine Quinte',
105
+ ratioProporcionAurea: 'Goldener Schnitt',
106
+ ratioSextaMayor: 'Große Sexte',
107
+ ratioSeptimaMenor: 'Kleine Septime',
108
+ ratioSeptimaMayor: 'Große Septime',
109
+ ratioOctava: 'Oktave',
110
+ };
111
+
112
+ export const content: ToolLocaleContent<MusicalTypographyUI> = {
113
+ slug,
114
+ title,
115
+ description,
116
+ ui,
117
+ faqTitle: 'Häufig gestellte Fragen',
118
+ faq: faqData,
119
+ bibliographyTitle: 'Quellen',
120
+ bibliography: [
121
+ {
122
+ name: 'Bringhurst, R. The Elements of Typographic Style',
123
+ url: 'https://en.wikipedia.org/wiki/The_Elements_of_Typographic_Style',
124
+ },
125
+ {
126
+ name: 'Brown, T. More Meaningful Typography. A List Apart',
127
+ url: 'https://alistapart.com/article/more-meaningful-typography/',
128
+ },
129
+ {
130
+ name: 'Physics of Music. Musical Intervals and Scales',
131
+ url: 'https://es.scribd.com/document/199729396/Physics-of-Music-Notes',
132
+ },
133
+ ],
134
+ howTo: howToData,
135
+ schemas: [faqSchema, howToSchema, appSchema],
136
+ seo: [
137
+ {
138
+ type: 'title',
139
+ text: 'Die unsichtbare Harmonie im Webdesign',
140
+ level: 2,
141
+ },
142
+ {
143
+ type: 'paragraph',
144
+ html: 'Die <strong>Musikalische Typografieskala</strong> überträgt die Mathematik musikalischer Intervalle auf das typografische Design. Wie eine Komposition von präzisen Proportionen geleitet wird, profitiert auch ein solides visuelles Design von einer mathematischen Struktur, die alle Größen miteinander verbindet.',
145
+ },
146
+ {
147
+ type: 'title',
148
+ text: 'Wie die Modularskala funktioniert',
149
+ level: 3,
150
+ },
151
+ {
152
+ type: 'grid',
153
+ columns: 2,
154
+ },
155
+ {
156
+ type: 'card',
157
+ title: 'Die Formel',
158
+ html: '<p>Die Progression ist einfach: <code>Größe = Basis × Ratio<sup>n</sup></code>. Stufe 0 ist dein Grundtext. Stufe 1 ist ein kleiner Untertitel. Stufe 4 oder 5 könnte dein Haupt-H1 sein. Die gleiche Multiplikationskonstante (der Ratio) stellt sicher, dass alle Beziehungen konsistent bleiben.</p>',
159
+ },
160
+ {
161
+ type: 'card',
162
+ title: 'Warum "Musikalisch"',
163
+ html: '<p>Die Pythagoreer entdeckten, dass das Teilen einer Saite in einfache Proportionen (1:2, 2:3, 3:4) Konsonanz erzeugt. Diese Intervalle – Oktave, reine Quinte und reine Quarte – sind genau die typografischen Ratios. Du komponierst visuelle Musik.</p>',
164
+ },
165
+ {
166
+ type: 'title',
167
+ text: 'Den richtigen Ratio wählen',
168
+ level: 3,
169
+ },
170
+ {
171
+ type: 'tip',
172
+ html: 'Für dichte Oberflächen (Dashboards, Tabellen) eignen sich kleine Ratios wie <code>1,125</code> oder <code>1,2</code>. Für redaktionelle oder Portfolio-Seiten bieten sich ausdrucksstärkere Ratios wie <code>1,5</code> oder <code>1,618</code> an.',
173
+ },
174
+ {
175
+ type: 'paragraph',
176
+ html: 'Beschränke die Skala nicht auf <code>font-size</code>. Dieselben CSS-Variablen funktionieren auch für <code>margin</code>, <code>padding</code> und <code>gap</code>. Wenn Weißraum derselben mathematischen Progression wie der Text folgt, erreicht das Design einen Grad an Kohäsion, den alle spüren, aber kaum jemand benennen kann.',
177
+ },
178
+ ],
179
+ };
@@ -0,0 +1,179 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { MusicalTypographyUI } from '../ui';
4
+
5
+ const slug = 'tipografi-musikal';
6
+ const title = 'Skala Tipografi Musikal. Kalkulator Skala Modular';
7
+ const description =
8
+ 'Alat online gratis untuk menciptakan hierarki visual yang harmonis menggunakan skala modular berbasis proporsi musikal. Menghasilkan variabel CSS siap pakai untuk desain web Anda.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Apa itu skala modular tipografi?',
13
+ answer:
14
+ 'Ini adalah metode untuk menentukan ukuran font berdasarkan rasio matematis yang konstan. Seperti dalam musik, di mana nada-nada memiliki hubungan harmonis, skala modular menciptakan hierarki visual yang seimbang dan mudah diprediksi.',
15
+ },
16
+ {
17
+ question: 'Mengapa menggunakan interval musikal untuk desain?',
18
+ answer:
19
+ 'Interval musikal adalah proporsi yang otak manusia persepsikan sebagai harmonis. Menerapkannya pada ukuran teks menghasilkan struktur visual yang terasa tepat dan profesional, bukan sekadar memilih ukuran secara acak.',
20
+ },
21
+ {
22
+ question: 'Apa itu Rasio Emas dalam tipografi?',
23
+ answer:
24
+ 'Ini adalah proporsi 1,618, yang dikenal sebagai Penampang Emas. Proporsi ini menciptakan skala yang dramatis dan elegan, di mana setiap langkah hierarki tumbuh secara eksponensial. Ideal untuk portofolio atau situs berorientasi seni.',
25
+ },
26
+ {
27
+ question: 'Bagaimana cara menerapkan skala ke file CSS saya?',
28
+ answer:
29
+ 'Alat ini menghasilkan variabel CSS (token) dalam format :root { --step-N: Xrem; }. Salin ke file CSS utama Anda dan gunakan dengan var(--step-N) untuk menjaga konsistensi tipografi di seluruh situs.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Tentukan ukuran dasar',
36
+ text: 'Masukkan ukuran font untuk teks paragraf Anda (biasanya 16px) yang akan menjadi nada dasar skala Anda.',
37
+ },
38
+ {
39
+ name: 'Pilih interval',
40
+ text: 'Pilih proporsi musikal untuk menentukan seberapa jauh jarak antara level heading yang berbeda.',
41
+ },
42
+ {
43
+ name: 'Pratinjau hierarki',
44
+ text: 'Amati bagaimana level tipografi berperilaku secara real-time untuk memastikan harmoni visual sesuai dengan proyek Anda.',
45
+ },
46
+ {
47
+ name: 'Ekspor kode',
48
+ text: 'Klik Salin Variabel CSS untuk mendapatkan blok siap tempel langsung ke alur kerja Anda.',
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowToThing> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step, i) => ({
68
+ '@type': 'HowToStep',
69
+ position: i + 1,
70
+ name: step.name,
71
+ text: step.text,
72
+ })),
73
+ };
74
+
75
+ const appSchema: WithContext<SoftwareApplication> = {
76
+ '@context': 'https://schema.org',
77
+ '@type': 'SoftwareApplication',
78
+ name: title,
79
+ description,
80
+ applicationCategory: 'DesignApplication',
81
+ operatingSystem: 'All',
82
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
83
+ inLanguage: 'id',
84
+ };
85
+
86
+ const ui: MusicalTypographyUI = {
87
+ labelConfig: 'Konfigurasi',
88
+ labelBaseSize: 'Ukuran Dasar (px)',
89
+ hintBaseSize: 'Ukuran teks paragraf Anda (biasanya 16px).',
90
+ labelRatio: 'Skala Musikal (Rasio)',
91
+ hintRatio: 'Menentukan seberapa besar ukuran tumbuh di setiap langkah.',
92
+ labelCalculated: 'Nilai Terkalkulasi',
93
+ labelPreview: 'Pratinjau',
94
+ btnCopyCss: 'Salin Variabel CSS',
95
+ feedbackCopied: 'Variabel disalin ke clipboard!',
96
+ previewText: 'Tipografi Musikal',
97
+ previewSubtext: 'Skala harmonis sempurna untuk desain Anda.',
98
+ ratioSecundaMenor: 'Second Minor',
99
+ ratioSegundaMayor: 'Second Mayor',
100
+ ratioTerceraMenor: 'Terts Minor',
101
+ ratioTerceraMayor: 'Terts Mayor',
102
+ ratioCuartaPerfecta: 'Kuart Sempurna',
103
+ ratioCuartaAumentada: 'Kuart Augmentasi',
104
+ ratioQuintaPerfecta: 'Kuint Sempurna',
105
+ ratioProporcionAurea: 'Rasio Emas',
106
+ ratioSextaMayor: 'Sekst Mayor',
107
+ ratioSeptimaMenor: 'Septim Minor',
108
+ ratioSeptimaMayor: 'Septim Mayor',
109
+ ratioOctava: 'Oktaf',
110
+ };
111
+
112
+ export const content: ToolLocaleContent<MusicalTypographyUI> = {
113
+ slug,
114
+ title,
115
+ description,
116
+ ui,
117
+ faqTitle: 'Pertanyaan yang Sering Diajukan',
118
+ faq: faqData,
119
+ bibliographyTitle: 'Referensi',
120
+ bibliography: [
121
+ {
122
+ name: 'Bringhurst, R. The Elements of Typographic Style',
123
+ url: 'https://en.wikipedia.org/wiki/The_Elements_of_Typographic_Style',
124
+ },
125
+ {
126
+ name: 'Brown, T. More Meaningful Typography. A List Apart',
127
+ url: 'https://alistapart.com/article/more-meaningful-typography/',
128
+ },
129
+ {
130
+ name: 'Physics of Music. Musical Intervals and Scales',
131
+ url: 'https://es.scribd.com/document/199729396/Physics-of-Music-Notes',
132
+ },
133
+ ],
134
+ howTo: howToData,
135
+ schemas: [faqSchema, howToSchema, appSchema],
136
+ seo: [
137
+ {
138
+ type: 'title',
139
+ text: 'Harmoni tersembunyi dalam desain web',
140
+ level: 2,
141
+ },
142
+ {
143
+ type: 'paragraph',
144
+ html: '<strong>Skala Tipografi Musikal</strong> menerapkan matematika interval musikal pada desain tipografi. Seperti sebuah komposisi musik yang diatur oleh proporsi yang presisi, desain visual yang kuat juga mendapat manfaat dari struktur matematis yang menghubungkan semua ukuran satu sama lain.',
145
+ },
146
+ {
147
+ type: 'title',
148
+ text: 'Cara kerja skala modular',
149
+ level: 3,
150
+ },
151
+ {
152
+ type: 'grid',
153
+ columns: 2,
154
+ },
155
+ {
156
+ type: 'card',
157
+ title: 'Rumusnya',
158
+ html: '<p>Progresinya sederhana: <code>Ukuran = Dasar × Rasio<sup>n</sup></code>. Langkah 0 adalah teks dasar Anda. Langkah 1 adalah subjudul kecil. Langkah 4 atau 5 bisa menjadi H1 utama Anda. Konstanta pengali yang sama memastikan semua hubungan tetap konsisten.</p>',
159
+ },
160
+ {
161
+ type: 'card',
162
+ title: 'Mengapa "Musikal"',
163
+ html: '<p>Kaum Pythagoras menemukan bahwa membagi senar dalam proporsi sederhana (1:2, 2:3, 3:4) menghasilkan bunyi yang konsonan. Interval-interval ini — oktaf, kuint sempurna, dan kuart sempurna — adalah persis rasio tipografi yang digunakan. Anda sedang menggubah musik visual.</p>',
164
+ },
165
+ {
166
+ type: 'title',
167
+ text: 'Memilih rasio yang tepat',
168
+ level: 3,
169
+ },
170
+ {
171
+ type: 'tip',
172
+ html: 'Untuk antarmuka padat (dasbor, tabel), gunakan rasio kecil seperti <code>1,125</code> atau <code>1,2</code>. Untuk situs editorial atau portofolio, gunakan rasio yang lebih ekspresif seperti <code>1,5</code> atau <code>1,618</code>.',
173
+ },
174
+ {
175
+ type: 'paragraph',
176
+ html: 'Jangan batasi skala hanya untuk <code>font-size</code>. Variabel CSS yang sama bekerja untuk <code>margin</code>, <code>padding</code>, dan <code>gap</code>. Ketika whitespace mengikuti progresi matematis yang sama dengan teks, desain mencapai tingkat kohesi yang dirasakan semua orang namun jarang bisa dijelaskan.',
177
+ },
178
+ ],
179
+ };