@jjlmoya/utils-developer 1.30.0 → 1.32.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 (187) hide show
  1. package/package.json +70 -70
  2. package/src/category/i18n/en.ts +1 -1
  3. package/src/category/i18n/es.ts +1 -1
  4. package/src/category/index.ts +2 -1
  5. package/src/category/seo.astro +1 -1
  6. package/src/components/PreviewNavSidebar.astro +1 -1
  7. package/src/components/PreviewToolbar.astro +1 -1
  8. package/src/data.ts +1 -1
  9. package/src/entries.ts +2 -0
  10. package/src/env.d.ts +1 -1
  11. package/src/index.ts +1 -0
  12. package/src/layouts/PreviewLayout.astro +1 -1
  13. package/src/pages/[locale]/[slug].astro +161 -161
  14. package/src/pages/index.astro +1 -1
  15. package/src/tests/bibliography_wellformed_export.test.ts +46 -0
  16. package/src/tests/category_seo_quality.test.ts +76 -0
  17. package/src/tests/entry_contract.test.ts +8 -2
  18. package/src/tests/faq_count.test.ts +1 -1
  19. package/src/tests/i18n_coverage.test.ts +2 -6
  20. package/src/tests/inverted_punctuation.test.ts +113 -113
  21. package/src/tests/locale_completeness.test.ts +1 -1
  22. package/src/tests/mocks/astro_mock.js +1 -1
  23. package/src/tests/no_h1_in_components.test.ts +1 -1
  24. package/src/tests/promote_this_website_i18n.test.ts +33 -0
  25. package/src/tests/seo_translation_completeness.test.ts +69 -0
  26. package/src/tests/seo_wellformed_export.test.ts +65 -0
  27. package/src/tests/slug_language_code_format.test.ts +25 -25
  28. package/src/tests/slug_uniqueness.test.ts +86 -86
  29. package/src/tests/tool_validation.test.ts +16 -16
  30. package/src/tool/aspectRatio/i18n/de.ts +164 -164
  31. package/src/tool/aspectRatio/i18n/ja.ts +1 -1
  32. package/src/tool/aspectRatio/i18n/ko.ts +1 -1
  33. package/src/tool/aspectRatio/i18n/pl.ts +164 -164
  34. package/src/tool/aspectRatio/i18n/ru.ts +164 -164
  35. package/src/tool/aspectRatio/i18n/zh.ts +165 -165
  36. package/src/tool/aspectRatio/seo.astro +15 -15
  37. package/src/tool/calculadoraTiempoDatos/i18n/de.ts +143 -143
  38. package/src/tool/calculadoraTiempoDatos/i18n/ja.ts +1 -1
  39. package/src/tool/calculadoraTiempoDatos/i18n/ko.ts +1 -1
  40. package/src/tool/calculadoraTiempoDatos/i18n/pl.ts +143 -143
  41. package/src/tool/calculadoraTiempoDatos/i18n/ru.ts +144 -144
  42. package/src/tool/calculadoraTiempoDatos/i18n/sv.ts +143 -143
  43. package/src/tool/calculadoraTiempoDatos/i18n/zh.ts +144 -144
  44. package/src/tool/calculadoraTiempoDatos/seo.astro +15 -15
  45. package/src/tool/colorConverter/i18n/de.ts +120 -120
  46. package/src/tool/colorConverter/i18n/ja.ts +1 -1
  47. package/src/tool/colorConverter/i18n/ko.ts +1 -1
  48. package/src/tool/colorConverter/i18n/ru.ts +120 -120
  49. package/src/tool/colorConverter/i18n/zh.ts +1 -1
  50. package/src/tool/colorConverter/seo.astro +15 -15
  51. package/src/tool/conversorExcelCsvHtml/i18n/ja.ts +1 -1
  52. package/src/tool/conversorExcelCsvHtml/i18n/ko.ts +1 -1
  53. package/src/tool/conversorExcelCsvHtml/i18n/pl.ts +124 -124
  54. package/src/tool/conversorExcelCsvHtml/i18n/ru.ts +124 -124
  55. package/src/tool/conversorExcelCsvHtml/i18n/zh.ts +125 -125
  56. package/src/tool/conversorExcelCsvHtml/seo.astro +15 -15
  57. package/src/tool/cronGenerator/i18n/ja.ts +1 -1
  58. package/src/tool/cronGenerator/i18n/ko.ts +1 -1
  59. package/src/tool/cronGenerator/i18n/zh.ts +183 -183
  60. package/src/tool/cronGenerator/seo.astro +15 -15
  61. package/src/tool/cssSpecificityCalculator/i18n/ja.ts +1 -1
  62. package/src/tool/cssSpecificityCalculator/i18n/ko.ts +1 -1
  63. package/src/tool/cssSpecificityCalculator/i18n/zh.ts +1 -1
  64. package/src/tool/cssSpecificityCalculator/seo.astro +15 -15
  65. package/src/tool/cssToInlineConverter/i18n/ja.ts +1 -1
  66. package/src/tool/cssToInlineConverter/i18n/ko.ts +1 -1
  67. package/src/tool/cssToInlineConverter/i18n/zh.ts +1 -1
  68. package/src/tool/cssToInlineConverter/seo.astro +15 -15
  69. package/src/tool/dualOsIconPreview/assets/day-check.webp +0 -0
  70. package/src/tool/dualOsIconPreview/assets/fast-task.webp +0 -0
  71. package/src/tool/dualOsIconPreview/assets/fortune-cookie.webp +0 -0
  72. package/src/tool/dualOsIconPreview/assets/lexi-crash.webp +0 -0
  73. package/src/tool/dualOsIconPreview/assets/pizzametrics.webp +0 -0
  74. package/src/tool/dualOsIconPreview/assets/sauce-lab.webp +0 -0
  75. package/src/tool/dualOsIconPreview/assets/vesp.webp +0 -0
  76. package/src/tool/dualOsIconPreview/bibliography.astro +6 -0
  77. package/src/tool/dualOsIconPreview/bibliography.ts +7 -0
  78. package/src/tool/dualOsIconPreview/component.astro +117 -0
  79. package/src/tool/dualOsIconPreview/controller.ts +157 -0
  80. package/src/tool/dualOsIconPreview/dom-views.ts +82 -0
  81. package/src/tool/dualOsIconPreview/dual-ios-android-app-icon-preview.css +861 -0
  82. package/src/tool/dualOsIconPreview/entry.ts +31 -0
  83. package/src/tool/dualOsIconPreview/evaluator.ts +20 -0
  84. package/src/tool/dualOsIconPreview/i18n/de.ts +56 -0
  85. package/src/tool/dualOsIconPreview/i18n/en.ts +46 -0
  86. package/src/tool/dualOsIconPreview/i18n/es.ts +56 -0
  87. package/src/tool/dualOsIconPreview/i18n/fr.ts +56 -0
  88. package/src/tool/dualOsIconPreview/i18n/id.ts +56 -0
  89. package/src/tool/dualOsIconPreview/i18n/it.ts +56 -0
  90. package/src/tool/dualOsIconPreview/i18n/ja.ts +56 -0
  91. package/src/tool/dualOsIconPreview/i18n/ko.ts +56 -0
  92. package/src/tool/dualOsIconPreview/i18n/nl.ts +56 -0
  93. package/src/tool/dualOsIconPreview/i18n/pl.ts +56 -0
  94. package/src/tool/dualOsIconPreview/i18n/pt.ts +56 -0
  95. package/src/tool/dualOsIconPreview/i18n/ru.ts +56 -0
  96. package/src/tool/dualOsIconPreview/i18n/sv.ts +56 -0
  97. package/src/tool/dualOsIconPreview/i18n/tr.ts +43 -0
  98. package/src/tool/dualOsIconPreview/i18n/zh.ts +43 -0
  99. package/src/tool/dualOsIconPreview/index.ts +11 -0
  100. package/src/tool/dualOsIconPreview/logic.test.ts +63 -0
  101. package/src/tool/dualOsIconPreview/logic.ts +135 -0
  102. package/src/tool/dualOsIconPreview/seo.astro +15 -0
  103. package/src/tool/dualOsIconPreview/storage.ts +18 -0
  104. package/src/tool/dualOsIconPreview/ui.ts +52 -0
  105. package/src/tool/duplicateCssRemover/i18n/ja.ts +1 -1
  106. package/src/tool/duplicateCssRemover/i18n/ko.ts +1 -1
  107. package/src/tool/duplicateCssRemover/i18n/zh.ts +1 -1
  108. package/src/tool/duplicateCssRemover/seo.astro +15 -15
  109. package/src/tool/generadorSecurityTxt/i18n/ja.ts +1 -1
  110. package/src/tool/generadorSecurityTxt/i18n/ko.ts +1 -1
  111. package/src/tool/generadorSecurityTxt/i18n/zh.ts +1 -1
  112. package/src/tool/generadorSecurityTxt/seo.astro +15 -15
  113. package/src/tool/hashGenerator/i18n/ja.ts +1 -1
  114. package/src/tool/hashGenerator/i18n/ko.ts +1 -1
  115. package/src/tool/hashGenerator/seo.astro +15 -15
  116. package/src/tool/inspectorCertificadosSsl/i18n/ja.ts +1 -1
  117. package/src/tool/inspectorCertificadosSsl/i18n/ko.ts +1 -1
  118. package/src/tool/inspectorCertificadosSsl/i18n/zh.ts +1 -1
  119. package/src/tool/inspectorCertificadosSsl/seo.astro +15 -15
  120. package/src/tool/jsonFormatter/seo.astro +15 -15
  121. package/src/tool/jwtDecoder/i18n/es.ts +248 -248
  122. package/src/tool/jwtDecoder/i18n/fr.ts +248 -248
  123. package/src/tool/jwtDecoder/i18n/tr.ts +248 -248
  124. package/src/tool/keycode/seo.astro +15 -15
  125. package/src/tool/llmCostCalculator/i18n/fr.ts +149 -149
  126. package/src/tool/llmCostCalculator/i18n/ja.ts +1 -1
  127. package/src/tool/llmCostCalculator/i18n/ko.ts +1 -1
  128. package/src/tool/llmCostCalculator/seo.astro +15 -15
  129. package/src/tool/mobileMockupGenerator/i18n/ja.ts +1 -1
  130. package/src/tool/mobileMockupGenerator/i18n/ko.ts +1 -1
  131. package/src/tool/mobileMockupGenerator/i18n/zh.ts +1 -1
  132. package/src/tool/mobileMockupGenerator/seo.astro +15 -15
  133. package/src/tool/musicalTypography/i18n/ja.ts +1 -1
  134. package/src/tool/musicalTypography/i18n/ko.ts +1 -1
  135. package/src/tool/musicalTypography/i18n/zh.ts +1 -1
  136. package/src/tool/musicalTypography/seo.astro +15 -15
  137. package/src/tool/placeholderGenerator/i18n/ja.ts +1 -1
  138. package/src/tool/placeholderGenerator/i18n/ko.ts +1 -1
  139. package/src/tool/placeholderGenerator/i18n/zh.ts +1 -1
  140. package/src/tool/placeholderGenerator/seo.astro +15 -15
  141. package/src/tool/promoteThisWebsite/entry.ts +13 -0
  142. package/src/tool/promoteThisWebsite/i18n/de.ts +95 -0
  143. package/src/tool/promoteThisWebsite/i18n/fr.ts +95 -0
  144. package/src/tool/promoteThisWebsite/i18n/id.ts +95 -0
  145. package/src/tool/promoteThisWebsite/i18n/it.ts +95 -0
  146. package/src/tool/promoteThisWebsite/i18n/ja.ts +95 -0
  147. package/src/tool/promoteThisWebsite/i18n/ko.ts +95 -0
  148. package/src/tool/promoteThisWebsite/i18n/nl.ts +95 -0
  149. package/src/tool/promoteThisWebsite/i18n/pl.ts +95 -0
  150. package/src/tool/promoteThisWebsite/i18n/pt.ts +95 -0
  151. package/src/tool/promoteThisWebsite/i18n/ru.ts +95 -0
  152. package/src/tool/promoteThisWebsite/i18n/sv.ts +95 -0
  153. package/src/tool/promoteThisWebsite/i18n/tr.ts +95 -0
  154. package/src/tool/promoteThisWebsite/i18n/zh.ts +95 -0
  155. package/src/tool/promptLibrary/i18n/ja.ts +1 -1
  156. package/src/tool/promptLibrary/i18n/ko.ts +1 -1
  157. package/src/tool/promptLibrary/i18n/zh.ts +1 -1
  158. package/src/tool/promptLibrary/seo.astro +15 -15
  159. package/src/tool/readabilityCalculator/i18n/ja.ts +1 -1
  160. package/src/tool/readabilityCalculator/i18n/ko.ts +1 -1
  161. package/src/tool/readabilityCalculator/i18n/zh.ts +1 -1
  162. package/src/tool/readabilityCalculator/seo.astro +15 -15
  163. package/src/tool/serpPixelSimulator/entry.ts +30 -30
  164. package/src/tool/serpPixelSimulator/i18n/en.ts +211 -211
  165. package/src/tool/serpPixelSimulator/i18n/fr.ts +214 -214
  166. package/src/tool/serpPixelSimulator/i18n/ru.ts +214 -214
  167. package/src/tool/serpPixelSimulator/logic.ts +18 -18
  168. package/src/tool/serpPixelSimulator/serp-pixel-simulator.css +195 -195
  169. package/src/tool/svgSanitizer/i18n/ja.ts +1 -1
  170. package/src/tool/svgSanitizer/i18n/ko.ts +1 -1
  171. package/src/tool/svgSanitizer/seo.astro +15 -15
  172. package/src/tool/svgToCss/i18n/ja.ts +1 -1
  173. package/src/tool/svgToCss/i18n/ko.ts +1 -1
  174. package/src/tool/svgToCss/seo.astro +15 -15
  175. package/src/tool/urlCleaner/i18n/ja.ts +1 -1
  176. package/src/tool/urlCleaner/i18n/ko.ts +1 -1
  177. package/src/tool/urlCleaner/i18n/zh.ts +1 -1
  178. package/src/tool/urlCleaner/seo.astro +15 -15
  179. package/src/tool/urlEncoderDecoder/i18n/es.ts +146 -146
  180. package/src/tool/urlEncoderDecoder/i18n/ko.ts +1 -1
  181. package/src/tool/urlEncoderDecoder/seo.astro +15 -15
  182. package/src/tool/utmGenerator/i18n/ja.ts +1 -1
  183. package/src/tool/utmGenerator/i18n/ko.ts +1 -1
  184. package/src/tool/utmGenerator/i18n/zh.ts +1 -1
  185. package/src/tool/utmGenerator/seo.astro +15 -15
  186. package/src/tools.ts +2 -1
  187. package/src/types.ts +1 -1
@@ -1,166 +1,166 @@
1
1
  import { bibliography } from '../bibliography';
2
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
3
- import type { ToolLocaleContent } from '../../../types';
4
- import type { AspectRatioUI } from '../ui';
5
-
6
- const slug = 'aspect-ratio-calculator';
7
- const title = '像素宽高比计算器。在线比例换算';
8
- const description =
9
- '计算新的图像、视频和网页设计分辨率,同时保持精确的比例,避免图形失真。支持 16:9、4:3、21:9 和自定义格式。';
10
-
11
- const faqData = [
12
- {
13
- question: '什么是宽高比(Aspect Ratio)?',
14
- answer:
15
- '宽高比描述了图像或屏幕宽度与高度之间的几何关系。它通常用冒号分隔的两个数字表示(如 16:9),显示高度随宽度按比例变化的方式。',
16
- },
17
- {
18
- question: '为什么保持正确比例很重要?',
19
- answer:
20
- '忽视宽高比会导致图像被压缩或拉伸、视频中出现意外的黑边(letterboxing),以及网页组件在不同屏幕尺寸下布局错乱。保持正确的比例是专业展示的关键。',
21
- },
22
- {
23
- question: '如何根据给定比例通过宽度计算高度?',
24
- answer:
25
- '计算公式为:高度 = 宽度 × (比例高度 / 比例宽度)。例如,宽度为 1280px 且比例为 16:9 时,高度为:1280 × (9/16) = 720px。',
26
- },
27
- {
28
- question: 'YouTube 视频的标准宽高比是多少?',
29
- answer:
30
- '16:9 是 YouTube 和大多数现代视频平台的标准比例。它对应于 1280×720 (HD)、1920×1080 (Full HD) 或 3840×2160 (4K UHD) 等分辨率。',
31
- },
32
- {
33
- question: '垂直社交媒体视频使用什么宽高比?',
34
- answer:
35
- '9:16,这恰好是宽屏格式的反转。它是 TikTok、Instagram Reels 和 YouTube Shorts 的原生比例,源于用户垂直握持手机观看内容。',
36
- },
37
- ];
38
-
39
- const howToData = [
40
- {
41
- name: '输入原始比例',
42
- text: '输入您想要保持的比例的宽度和高度值(例如宽屏输入 16 和 9),或者选择一个预设。',
43
- },
44
- {
45
- name: '调整缩放',
46
- text: '在"实际缩放"部分更改宽度或高度值。工具将自动计算对应的数值以保持比例。',
47
- },
48
- {
49
- name: '查看预览',
50
- text: '预览面板以等比例展示结果形状,并附带简化的比例和计算出的分辨率。',
51
- },
52
- {
53
- name: '应用到项目中',
54
- text: '复制计算出的数值,用于您的 CSS (aspect-ratio: 16 / 9)、视频导出或设计工具的设置中。',
55
- },
56
- ];
57
-
58
- const faqSchema: WithContext<FAQPage> = {
59
- '@context': 'https://schema.org',
60
- '@type': 'FAQPage',
61
- mainEntity: faqData.map((item) => ({
62
- '@type': 'Question',
63
- name: item.question,
64
- acceptedAnswer: { '@type': 'Answer', text: item.answer },
65
- })),
66
- };
67
-
68
- const howToSchema: WithContext<HowToThing> = {
69
- '@context': 'https://schema.org',
70
- '@type': 'HowTo',
71
- name: title,
72
- description,
73
- step: howToData.map((step, i) => ({
74
- '@type': 'HowToStep',
75
- position: i + 1,
76
- name: step.name,
77
- text: step.text,
78
- })),
79
- };
80
-
81
- const appSchema: WithContext<SoftwareApplication> = {
82
- '@context': 'https://schema.org',
83
- '@type': 'SoftwareApplication',
84
- name: title,
85
- description,
86
- applicationCategory: 'UtilityApplication',
87
- operatingSystem: 'All',
88
- offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
89
- inLanguage: 'zh',
90
- };
91
-
92
- const ui: AspectRatioUI = {
93
- labelConfig: '配置',
94
- labelRatio: '原始比例',
95
- labelWidth: '宽度',
96
- labelHeight: '高度',
97
- labelScale: '实际缩放',
98
- labelPixelWidth: '像素(宽)',
99
- labelPixelHeight: '像素(高)',
100
- labelPreview: '等比预览',
101
- labelStatus: '完美比例',
102
- labelOffline: '100% 离线工具',
103
- };
104
-
105
- export const content: ToolLocaleContent<AspectRatioUI> = {
106
- slug,
107
- title,
108
- description,
109
- ui,
110
- faqTitle: '常见问题',
111
- faq: faqData,
112
- bibliographyTitle: '参考资料与文档',
113
- bibliography,
114
- howTo: howToData,
115
- schemas: [faqSchema, howToSchema, appSchema],
116
- seo: [
117
- {
118
- type: 'title',
119
- text: '什么是宽高比?',
120
- level: 2,
121
- },
122
- {
123
- type: 'paragraph',
124
- html: '在图形设计、摄影和前端开发中,<strong>宽高比</strong>(Aspect Ratio)描述了图像、屏幕或容器宽度与高度之间的几何关系。它通常用冒号分隔的两个数字表示(如 <code>16:9</code>),显示高度如何随宽度成比例增加。',
125
- },
126
- {
127
- type: 'paragraph',
128
- html: '宽高比处理不当是导致照片被压缩、视频出现意外裁剪(黑边)或网页组件在从手机到超宽显示器等不同设备上显示错乱的常见原因。',
129
- },
130
- {
131
- type: 'title',
132
- text: '行业常用比例',
133
- level: 3,
134
- },
135
- {
136
- type: 'paragraph',
137
- html: '根据您的专业领域,您会经常接触到一些全球标准比例:',
138
- },
139
- {
140
- type: 'list',
141
- items: [
142
- '<strong>16:9(宽屏):</strong> 现代显示器、电视、YouTube 录制或标准高清分辨率(如 1920×1080 或 4K)的绝对主流格式。',
143
- '<strong>9:16(垂直):</strong> 源自移动端的原生内容消费(TikTok、Instagram Reels、YouTube Shorts)。与宽屏视频比例完全相同,但设备处于物理旋转状态。',
144
- '<strong>4:3(经典 / 复古):</strong> 见于旧电视和显示器,或者某些模拟及专用数字相机。其接近正方形的外观将注意力直接吸引到构图的中心轴上。',
145
- ],
146
- },
147
- {
148
- type: 'title',
149
- text: '网页开发与 CSS aspect-ratio 属性',
150
- level: 3,
151
- },
152
- {
153
- type: 'paragraph',
154
- html: '以前在 CSS 中,为了避免页面加载时严重的内容偏移(CLS),开发者不得不使用 <strong>Padding Hack</strong>(例如设置 <code>padding-top: 56.25%</code>)等复杂的数学方法来为 YouTube iframe 或封面图预留动态空间。',
155
- },
156
- {
157
- type: 'paragraph',
158
- html: '如今,所有现代布局都直接应用 <code>aspect-ratio: 16 / 9;</code> 等属性,从而实现语义化代码,并允许浏览器根据 Grid 或 Flexbox 定义的原始宽度自动推导出缺失的维度。',
159
- },
160
- {
161
- type: 'paragraph',
162
- html: '此本地像素计算器将设计决策权交给即时缩放计算,从而保护您的渲染效果免受灾难性配置错误的影响。',
163
- },
164
- ],
165
- };
166
-
2
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
3
+ import type { ToolLocaleContent } from '../../../types';
4
+ import type { AspectRatioUI } from '../ui';
5
+
6
+ const slug = 'aspect-ratio-calculator';
7
+ const title = '像素宽高比计算器。在线比例换算';
8
+ const description =
9
+ '计算新的图像、视频和网页设计分辨率,同时保持精确的比例,避免图形失真。支持 16:9、4:3、21:9 和自定义格式。';
10
+
11
+ const faqData = [
12
+ {
13
+ question: '什么是宽高比(Aspect Ratio)?',
14
+ answer:
15
+ '宽高比描述了图像或屏幕宽度与高度之间的几何关系。它通常用冒号分隔的两个数字表示(如 16:9),显示高度随宽度按比例变化的方式。',
16
+ },
17
+ {
18
+ question: '为什么保持正确比例很重要?',
19
+ answer:
20
+ '忽视宽高比会导致图像被压缩或拉伸、视频中出现意外的黑边(letterboxing),以及网页组件在不同屏幕尺寸下布局错乱。保持正确的比例是专业展示的关键。',
21
+ },
22
+ {
23
+ question: '如何根据给定比例通过宽度计算高度?',
24
+ answer:
25
+ '计算公式为:高度 = 宽度 × (比例高度 / 比例宽度)。例如,宽度为 1280px 且比例为 16:9 时,高度为:1280 × (9/16) = 720px。',
26
+ },
27
+ {
28
+ question: 'YouTube 视频的标准宽高比是多少?',
29
+ answer:
30
+ '16:9 是 YouTube 和大多数现代视频平台的标准比例。它对应于 1280×720 (HD)、1920×1080 (Full HD) 或 3840×2160 (4K UHD) 等分辨率。',
31
+ },
32
+ {
33
+ question: '垂直社交媒体视频使用什么宽高比?',
34
+ answer:
35
+ '9:16,这恰好是宽屏格式的反转。它是 TikTok、Instagram Reels 和 YouTube Shorts 的原生比例,源于用户垂直握持手机观看内容。',
36
+ },
37
+ ];
38
+
39
+ const howToData = [
40
+ {
41
+ name: '输入原始比例',
42
+ text: '输入您想要保持的比例的宽度和高度值(例如宽屏输入 16 和 9),或者选择一个预设。',
43
+ },
44
+ {
45
+ name: '调整缩放',
46
+ text: '在"实际缩放"部分更改宽度或高度值。工具将自动计算对应的数值以保持比例。',
47
+ },
48
+ {
49
+ name: '查看预览',
50
+ text: '预览面板以等比例展示结果形状,并附带简化的比例和计算出的分辨率。',
51
+ },
52
+ {
53
+ name: '应用到项目中',
54
+ text: '复制计算出的数值,用于您的 CSS (aspect-ratio: 16 / 9)、视频导出或设计工具的设置中。',
55
+ },
56
+ ];
57
+
58
+ const faqSchema: WithContext<FAQPage> = {
59
+ '@context': 'https://schema.org',
60
+ '@type': 'FAQPage',
61
+ mainEntity: faqData.map((item) => ({
62
+ '@type': 'Question',
63
+ name: item.question,
64
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
65
+ })),
66
+ };
67
+
68
+ const howToSchema: WithContext<HowToThing> = {
69
+ '@context': 'https://schema.org',
70
+ '@type': 'HowTo',
71
+ name: title,
72
+ description,
73
+ step: howToData.map((step, i) => ({
74
+ '@type': 'HowToStep',
75
+ position: i + 1,
76
+ name: step.name,
77
+ text: step.text,
78
+ })),
79
+ };
80
+
81
+ const appSchema: WithContext<SoftwareApplication> = {
82
+ '@context': 'https://schema.org',
83
+ '@type': 'SoftwareApplication',
84
+ name: title,
85
+ description,
86
+ applicationCategory: 'UtilityApplication',
87
+ operatingSystem: 'All',
88
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
89
+ inLanguage: 'zh',
90
+ };
91
+
92
+ const ui: AspectRatioUI = {
93
+ labelConfig: '配置',
94
+ labelRatio: '原始比例',
95
+ labelWidth: '宽度',
96
+ labelHeight: '高度',
97
+ labelScale: '实际缩放',
98
+ labelPixelWidth: '像素(宽)',
99
+ labelPixelHeight: '像素(高)',
100
+ labelPreview: '等比预览',
101
+ labelStatus: '完美比例',
102
+ labelOffline: '100% 离线工具',
103
+ };
104
+
105
+ export const content: ToolLocaleContent<AspectRatioUI> = {
106
+ slug,
107
+ title,
108
+ description,
109
+ ui,
110
+ faqTitle: '常见问题',
111
+ faq: faqData,
112
+ bibliographyTitle: '参考资料与文档',
113
+ bibliography,
114
+ howTo: howToData,
115
+ schemas: [faqSchema, howToSchema, appSchema],
116
+ seo: [
117
+ {
118
+ type: 'title',
119
+ text: '什么是宽高比?',
120
+ level: 2,
121
+ },
122
+ {
123
+ type: 'paragraph',
124
+ html: '在图形设计、摄影和前端开发中,<strong>宽高比</strong>(Aspect Ratio)描述了图像、屏幕或容器宽度与高度之间的几何关系。它通常用冒号分隔的两个数字表示(如 <code>16:9</code>),显示高度如何随宽度成比例增加。',
125
+ },
126
+ {
127
+ type: 'paragraph',
128
+ html: '宽高比处理不当是导致照片被压缩、视频出现意外裁剪(黑边)或网页组件在从手机到超宽显示器等不同设备上显示错乱的常见原因。',
129
+ },
130
+ {
131
+ type: 'title',
132
+ text: '行业常用比例',
133
+ level: 3,
134
+ },
135
+ {
136
+ type: 'paragraph',
137
+ html: '根据您的专业领域,您会经常接触到一些全球标准比例:',
138
+ },
139
+ {
140
+ type: 'list',
141
+ items: [
142
+ '<strong>16:9(宽屏):</strong> 现代显示器、电视、YouTube 录制或标准高清分辨率(如 1920×1080 或 4K)的绝对主流格式。',
143
+ '<strong>9:16(垂直):</strong> 源自移动端的原生内容消费(TikTok、Instagram Reels、YouTube Shorts)。与宽屏视频比例完全相同,但设备处于物理旋转状态。',
144
+ '<strong>4:3(经典 / 复古):</strong> 见于旧电视和显示器,或者某些模拟及专用数字相机。其接近正方形的外观将注意力直接吸引到构图的中心轴上。',
145
+ ],
146
+ },
147
+ {
148
+ type: 'title',
149
+ text: '网页开发与 CSS aspect-ratio 属性',
150
+ level: 3,
151
+ },
152
+ {
153
+ type: 'paragraph',
154
+ html: '以前在 CSS 中,为了避免页面加载时严重的内容偏移(CLS),开发者不得不使用 <strong>Padding Hack</strong>(例如设置 <code>padding-top: 56.25%</code>)等复杂的数学方法来为 YouTube iframe 或封面图预留动态空间。',
155
+ },
156
+ {
157
+ type: 'paragraph',
158
+ html: '如今,所有现代布局都直接应用 <code>aspect-ratio: 16 / 9;</code> 等属性,从而实现语义化代码,并允许浏览器根据 Grid 或 Flexbox 定义的原始宽度自动推导出缺失的维度。',
159
+ },
160
+ {
161
+ type: 'paragraph',
162
+ html: '此本地像素计算器将设计决策权交给即时缩放计算,从而保护您的渲染效果免受灾难性配置错误的影响。',
163
+ },
164
+ ],
165
+ };
166
+
@@ -1,15 +1,15 @@
1
- ---
2
- import { SEORenderer } from '@jjlmoya/utils-shared';
3
- import { aspectRatio } from './index';
4
- import type { KnownLocale } from '../../types';
5
-
6
- interface Props {
7
- locale?: KnownLocale;
8
- }
9
-
10
- const { locale = 'es' } = Astro.props;
11
- const content = await aspectRatio.i18n[locale]?.();
12
- if (!content) return null;
13
- ---
14
-
15
- {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { aspectRatio } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'es' } = Astro.props;
11
+ const content = await aspectRatio.i18n[locale]?.();
12
+ if (!content) return null;
13
+ ---
14
+
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}