@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,165 +1,165 @@
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 = 'kalkulator-proporcji-obrazu';
7
- const title = 'Kalkulator proporcji obrazu w pikselach. Proporcje online';
8
- const description =
9
- 'Obliczaj nowe rozdzielczości obrazu, wideo i projektów stron internetowych, zachowując dokładne proporcje, aby uniknąć zniekształceń grafiki. Obsługuje formaty 16:9, 4:3, 21:9 i niestandardowe.';
10
-
11
- const faqData = [
12
- {
13
- question: 'Co to jest proporcja obrazu (Aspect Ratio)?',
14
- answer:
15
- 'Proporcja obrazu opisuje geometryczną zależność między szerokością a wysokością obrazu lub ekranu. Jest reprezentowana przez dwie liczby oddzielone dwukropkiem (np. 16:9), wskazując, jak wysokość zmienia się proporcjonalnie w stosunku do szerokości.',
16
- },
17
- {
18
- question: 'Dlaczego ważne jest zachowanie poprawnych proporcji?',
19
- answer:
20
- 'Ignorowanie proporcji obrazu powoduje, że obrazy są spłaszczone lub rozciągnięte, w filmach pojawiają się nieoczekiwane czarne pasy (letterboxing), a komponenty stron internetowych tracą swój układ na ekranach o różnych rozmiarach. Zachowanie poprawnych proporcji jest kluczem do profesjonalnego wyglądu.',
21
- },
22
- {
23
- question: 'Jak obliczyć wysokość na podstawie szerokości przy danej proporcji?',
24
- answer:
25
- 'Wzór to: Wysokość = Szerokość × (Wysokość proporcji / Szerokość proporcji). Na przykład, dla szerokości 1280px przy proporcji 16:9, wysokość wyniesie: 1280 × (9/16) = 720px.',
26
- },
27
- {
28
- question: 'Jaka jest standardowa proporcja obrazu dla filmów na YouTube?',
29
- answer:
30
- 'Standardową proporcją dla YouTube i większości nowoczesnych platform wideo jest 16:9. Odpowiada ona rozdzielczościom takim jak 1280×720 (HD), 1920×1080 (Full HD) lub 3840×2160 (4K UHD).',
31
- },
32
- {
33
- question: 'Jakie proporcje obrazu mają pionowe filmy w mediach społecznościowych?',
34
- answer:
35
- '9:16, co jest dokładnym odwróceniem formatu panoramicznego. Jest to natywna proporcja dla TikTok, Instagram Reels i YouTube Shorts, wynikająca z korzystania z telefonów komórkowych w pionie.',
36
- },
37
- ];
38
-
39
- const howToData = [
40
- {
41
- name: 'Wprowadź oryginalną proporcję',
42
- text: 'Wpisz szerokość i wysokość proporcji, którą chcesz zachować (np. 16 i 9 dla panoramy) lub wybierz jedno z gotowych ustawień.',
43
- },
44
- {
45
- name: 'Dostosuj skalę',
46
- text: 'Zmień wartość szerokości lub wysokości w sekcji "Rzeczywista skala". Narzędzie automatycznie obliczy drugą wartość, aby zachować proporcje.',
47
- },
48
- {
49
- name: 'Sprawdź podgląd',
50
- text: 'Panel podglądu pokazuje wynikowy kształt w skali proporcjonalnej, wraz z uproszczoną proporcją i obliczoną rozdzielczością.',
51
- },
52
- {
53
- name: 'Zastosuj w swoim projekcie',
54
- text: 'Skopiuj obliczone wartości, aby użyć ich w CSS (aspect-ratio: 16 / 9), przy eksporcie wideo lub w ustawieniach narzędzia projektowego.',
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: 'pl',
90
- };
91
-
92
- const ui: AspectRatioUI = {
93
- labelConfig: 'Konfiguracja',
94
- labelRatio: 'Oryginalna proporcja',
95
- labelWidth: 'Szerokość',
96
- labelHeight: 'Wysokość',
97
- labelScale: 'Rzeczywista skala',
98
- labelPixelWidth: 'Piksele (Szerokość)',
99
- labelPixelHeight: 'Piksele (Wysokość)',
100
- labelPreview: 'Podgląd proporcjonalny',
101
- labelStatus: 'Idealna proporcja',
102
- labelOffline: 'Narzędzie 100% offline',
103
- };
104
-
105
- export const content: ToolLocaleContent<AspectRatioUI> = {
106
- slug,
107
- title,
108
- description,
109
- ui,
110
- faqTitle: 'Często zadawane pytania',
111
- faq: faqData,
112
- bibliographyTitle: 'Referencje i dokumentacja',
113
- bibliography,
114
- howTo: howToData,
115
- schemas: [faqSchema, howToSchema, appSchema],
116
- seo: [
117
- {
118
- type: 'title',
119
- text: 'Co to jest proporcja obrazu?',
120
- level: 2,
121
- },
122
- {
123
- type: 'paragraph',
124
- html: 'W projektowaniu graficznym, fotografii i programowaniu frontendowym <strong>proporcja obrazu</strong> (Aspect Ratio) opisuje geometryczną zależność między szerokością a wysokością obrazu, ekranu lub kontenera. Zazwyczaj jest reprezentowana przez dwie liczby oddzielone dwukropkiem (np. <code>16:9</code>), wskazując, jak wysokość zmienia się proporcjonalnie w odpowiedzi na szerokość.',
125
- },
126
- {
127
- type: 'paragraph',
128
- html: 'Błędne zarządzanie proporcjami jest częstą przyczyną spłaszczonych zdjęć, filmów z nieoczekiwanym przycięciem (letterboxing) lub komponentów stron internetowych, które tracą swój układ przy przeglądaniu na różnych urządzeniach - od telefonów po monitory panoramiczne.',
129
- },
130
- {
131
- type: 'title',
132
- text: 'Typowe proporcje w branży',
133
- level: 3,
134
- },
135
- {
136
- type: 'paragraph',
137
- html: 'W zależności od Twojej dyscypliny będziesz stale stykać się z ograniczoną liczbą światowych standardów proporcji:',
138
- },
139
- {
140
- type: 'list',
141
- items: [
142
- '<strong>16:9 (Panorama):</strong> Absolutnie dominujący format w nowoczesnych monitorach, telewizorach, nagraniach YouTube czy standardowych rozdzielczościach wysokiej jakości (takich jak 1920×1080 lub 4K).',
143
- '<strong>9:16 (Pion):</strong> Wywodzi się z natywnego sposobu konsumpcji treści na urządzeniach mobilnych (TikTok, Instagram Reels, YouTube Shorts). Dokładnie te same proporcje co w wideo panoramicznym, ale przy fizycznym obróceniu urządzenia.',
144
- '<strong>4:3 (Klasyczny / Vintage):</strong> Spotykany w starych telewizorach i monitorach oraz w analogowych i specjalistycznych cyfrowych modelach aparatów. Jego nieco kwadratowy wygląd kieruje uwagę bezpośrednio na centralną oś kompozycji.',
145
- ],
146
- },
147
- {
148
- type: 'title',
149
- text: 'Programowanie stron i właściwość CSS aspect-ratio',
150
- level: 3,
151
- },
152
- {
153
- type: 'paragraph',
154
- html: 'Wcześniej w CSS używano skomplikowanych systemów matematycznych wykorzystujących <strong>Padding Hack</strong> (np. wstrzykiwanie <code>padding-top: 56.25%</code>) w celu zarezerwowania dynamicznej przestrzeni dla ramek iframe YouTube lub obrazów nagłówkowych, aby uniknąć problemu Cumulative Layout Shift (CLS) podczas ładowania strony.',
155
- },
156
- {
157
- type: 'paragraph',
158
- html: 'Obecnie wszystkie nowoczesne układy bezpośrednio stosują właściwości takie jak <code>aspect-ratio: 16 / 9;</code>, co pozwala uzyskać semantyczny kod i umożliwia przeglądarce automatyczne wyliczenie brakującego wymiaru na podstawie oryginalnej szerokości zdefiniowanej przez Grid lub Flexbox.',
159
- },
160
- {
161
- type: 'paragraph',
162
- html: 'Ten lokalny kalkulator pikseli przenosi możliwości projektowe na błyskawiczne obliczenia skalowania, które uchronią Twoje projekty przed katastrofalnymi błędami konfiguracji.',
163
- },
164
- ],
165
- };
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 = 'kalkulator-proporcji-obrazu';
7
+ const title = 'Kalkulator proporcji obrazu w pikselach. Proporcje online';
8
+ const description =
9
+ 'Obliczaj nowe rozdzielczości obrazu, wideo i projektów stron internetowych, zachowując dokładne proporcje, aby uniknąć zniekształceń grafiki. Obsługuje formaty 16:9, 4:3, 21:9 i niestandardowe.';
10
+
11
+ const faqData = [
12
+ {
13
+ question: 'Co to jest proporcja obrazu (Aspect Ratio)?',
14
+ answer:
15
+ 'Proporcja obrazu opisuje geometryczną zależność między szerokością a wysokością obrazu lub ekranu. Jest reprezentowana przez dwie liczby oddzielone dwukropkiem (np. 16:9), wskazując, jak wysokość zmienia się proporcjonalnie w stosunku do szerokości.',
16
+ },
17
+ {
18
+ question: 'Dlaczego ważne jest zachowanie poprawnych proporcji?',
19
+ answer:
20
+ 'Ignorowanie proporcji obrazu powoduje, że obrazy są spłaszczone lub rozciągnięte, w filmach pojawiają się nieoczekiwane czarne pasy (letterboxing), a komponenty stron internetowych tracą swój układ na ekranach o różnych rozmiarach. Zachowanie poprawnych proporcji jest kluczem do profesjonalnego wyglądu.',
21
+ },
22
+ {
23
+ question: 'Jak obliczyć wysokość na podstawie szerokości przy danej proporcji?',
24
+ answer:
25
+ 'Wzór to: Wysokość = Szerokość × (Wysokość proporcji / Szerokość proporcji). Na przykład, dla szerokości 1280px przy proporcji 16:9, wysokość wyniesie: 1280 × (9/16) = 720px.',
26
+ },
27
+ {
28
+ question: 'Jaka jest standardowa proporcja obrazu dla filmów na YouTube?',
29
+ answer:
30
+ 'Standardową proporcją dla YouTube i większości nowoczesnych platform wideo jest 16:9. Odpowiada ona rozdzielczościom takim jak 1280×720 (HD), 1920×1080 (Full HD) lub 3840×2160 (4K UHD).',
31
+ },
32
+ {
33
+ question: 'Jakie proporcje obrazu mają pionowe filmy w mediach społecznościowych?',
34
+ answer:
35
+ '9:16, co jest dokładnym odwróceniem formatu panoramicznego. Jest to natywna proporcja dla TikTok, Instagram Reels i YouTube Shorts, wynikająca z korzystania z telefonów komórkowych w pionie.',
36
+ },
37
+ ];
38
+
39
+ const howToData = [
40
+ {
41
+ name: 'Wprowadź oryginalną proporcję',
42
+ text: 'Wpisz szerokość i wysokość proporcji, którą chcesz zachować (np. 16 i 9 dla panoramy) lub wybierz jedno z gotowych ustawień.',
43
+ },
44
+ {
45
+ name: 'Dostosuj skalę',
46
+ text: 'Zmień wartość szerokości lub wysokości w sekcji "Rzeczywista skala". Narzędzie automatycznie obliczy drugą wartość, aby zachować proporcje.',
47
+ },
48
+ {
49
+ name: 'Sprawdź podgląd',
50
+ text: 'Panel podglądu pokazuje wynikowy kształt w skali proporcjonalnej, wraz z uproszczoną proporcją i obliczoną rozdzielczością.',
51
+ },
52
+ {
53
+ name: 'Zastosuj w swoim projekcie',
54
+ text: 'Skopiuj obliczone wartości, aby użyć ich w CSS (aspect-ratio: 16 / 9), przy eksporcie wideo lub w ustawieniach narzędzia projektowego.',
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: 'pl',
90
+ };
91
+
92
+ const ui: AspectRatioUI = {
93
+ labelConfig: 'Konfiguracja',
94
+ labelRatio: 'Oryginalna proporcja',
95
+ labelWidth: 'Szerokość',
96
+ labelHeight: 'Wysokość',
97
+ labelScale: 'Rzeczywista skala',
98
+ labelPixelWidth: 'Piksele (Szerokość)',
99
+ labelPixelHeight: 'Piksele (Wysokość)',
100
+ labelPreview: 'Podgląd proporcjonalny',
101
+ labelStatus: 'Idealna proporcja',
102
+ labelOffline: 'Narzędzie 100% offline',
103
+ };
104
+
105
+ export const content: ToolLocaleContent<AspectRatioUI> = {
106
+ slug,
107
+ title,
108
+ description,
109
+ ui,
110
+ faqTitle: 'Często zadawane pytania',
111
+ faq: faqData,
112
+ bibliographyTitle: 'Referencje i dokumentacja',
113
+ bibliography,
114
+ howTo: howToData,
115
+ schemas: [faqSchema, howToSchema, appSchema],
116
+ seo: [
117
+ {
118
+ type: 'title',
119
+ text: 'Co to jest proporcja obrazu?',
120
+ level: 2,
121
+ },
122
+ {
123
+ type: 'paragraph',
124
+ html: 'W projektowaniu graficznym, fotografii i programowaniu frontendowym <strong>proporcja obrazu</strong> (Aspect Ratio) opisuje geometryczną zależność między szerokością a wysokością obrazu, ekranu lub kontenera. Zazwyczaj jest reprezentowana przez dwie liczby oddzielone dwukropkiem (np. <code>16:9</code>), wskazując, jak wysokość zmienia się proporcjonalnie w odpowiedzi na szerokość.',
125
+ },
126
+ {
127
+ type: 'paragraph',
128
+ html: 'Błędne zarządzanie proporcjami jest częstą przyczyną spłaszczonych zdjęć, filmów z nieoczekiwanym przycięciem (letterboxing) lub komponentów stron internetowych, które tracą swój układ przy przeglądaniu na różnych urządzeniach - od telefonów po monitory panoramiczne.',
129
+ },
130
+ {
131
+ type: 'title',
132
+ text: 'Typowe proporcje w branży',
133
+ level: 3,
134
+ },
135
+ {
136
+ type: 'paragraph',
137
+ html: 'W zależności od Twojej dyscypliny będziesz stale stykać się z ograniczoną liczbą światowych standardów proporcji:',
138
+ },
139
+ {
140
+ type: 'list',
141
+ items: [
142
+ '<strong>16:9 (Panorama):</strong> Absolutnie dominujący format w nowoczesnych monitorach, telewizorach, nagraniach YouTube czy standardowych rozdzielczościach wysokiej jakości (takich jak 1920×1080 lub 4K).',
143
+ '<strong>9:16 (Pion):</strong> Wywodzi się z natywnego sposobu konsumpcji treści na urządzeniach mobilnych (TikTok, Instagram Reels, YouTube Shorts). Dokładnie te same proporcje co w wideo panoramicznym, ale przy fizycznym obróceniu urządzenia.',
144
+ '<strong>4:3 (Klasyczny / Vintage):</strong> Spotykany w starych telewizorach i monitorach oraz w analogowych i specjalistycznych cyfrowych modelach aparatów. Jego nieco kwadratowy wygląd kieruje uwagę bezpośrednio na centralną oś kompozycji.',
145
+ ],
146
+ },
147
+ {
148
+ type: 'title',
149
+ text: 'Programowanie stron i właściwość CSS aspect-ratio',
150
+ level: 3,
151
+ },
152
+ {
153
+ type: 'paragraph',
154
+ html: 'Wcześniej w CSS używano skomplikowanych systemów matematycznych wykorzystujących <strong>Padding Hack</strong> (np. wstrzykiwanie <code>padding-top: 56.25%</code>) w celu zarezerwowania dynamicznej przestrzeni dla ramek iframe YouTube lub obrazów nagłówkowych, aby uniknąć problemu Cumulative Layout Shift (CLS) podczas ładowania strony.',
155
+ },
156
+ {
157
+ type: 'paragraph',
158
+ html: 'Obecnie wszystkie nowoczesne układy bezpośrednio stosują właściwości takie jak <code>aspect-ratio: 16 / 9;</code>, co pozwala uzyskać semantyczny kod i umożliwia przeglądarce automatyczne wyliczenie brakującego wymiaru na podstawie oryginalnej szerokości zdefiniowanej przez Grid lub Flexbox.',
159
+ },
160
+ {
161
+ type: 'paragraph',
162
+ html: 'Ten lokalny kalkulator pikseli przenosi możliwości projektowe na błyskawiczne obliczenia skalowania, które uchronią Twoje projekty przed katastrofalnymi błędami konfiguracji.',
163
+ },
164
+ ],
165
+ };