@jjlmoya/utils-social 1.2.0 → 1.4.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 (120) hide show
  1. package/package.json +59 -58
  2. package/src/category/i18n/de.ts +23 -0
  3. package/src/category/i18n/id.ts +23 -0
  4. package/src/category/i18n/it.ts +23 -0
  5. package/src/category/i18n/ja.ts +23 -0
  6. package/src/category/i18n/ko.ts +23 -0
  7. package/src/category/i18n/nl.ts +23 -0
  8. package/src/category/i18n/pl.ts +23 -0
  9. package/src/category/i18n/pt.ts +23 -0
  10. package/src/category/i18n/ru.ts +23 -0
  11. package/src/category/i18n/sv.ts +23 -0
  12. package/src/category/i18n/tr.ts +23 -0
  13. package/src/category/i18n/zh.ts +23 -0
  14. package/src/category/index.ts +12 -0
  15. package/src/index.ts +8 -0
  16. package/src/tests/i18n_coverage.test.ts +36 -0
  17. package/src/tests/locale_completeness.test.ts +1 -1
  18. package/src/tests/schemas_fulfillment.test.ts +23 -0
  19. package/src/tests/slug_uniqueness.test.ts +81 -0
  20. package/src/tests/title_quality.test.ts +55 -0
  21. package/src/tool/redditFormatter/i18n/de.ts +193 -0
  22. package/src/tool/redditFormatter/i18n/en.ts +1 -1
  23. package/src/tool/redditFormatter/i18n/es.ts +1 -1
  24. package/src/tool/redditFormatter/i18n/fr.ts +1 -1
  25. package/src/tool/redditFormatter/i18n/id.ts +193 -0
  26. package/src/tool/redditFormatter/i18n/it.ts +193 -0
  27. package/src/tool/redditFormatter/i18n/ja.ts +193 -0
  28. package/src/tool/redditFormatter/i18n/ko.ts +193 -0
  29. package/src/tool/redditFormatter/i18n/nl.ts +193 -0
  30. package/src/tool/redditFormatter/i18n/pl.ts +193 -0
  31. package/src/tool/redditFormatter/i18n/pt.ts +193 -0
  32. package/src/tool/redditFormatter/i18n/ru.ts +193 -0
  33. package/src/tool/redditFormatter/i18n/sv.ts +193 -0
  34. package/src/tool/redditFormatter/i18n/tr.ts +193 -0
  35. package/src/tool/redditFormatter/i18n/zh.ts +193 -0
  36. package/src/tool/redditFormatter/index.ts +15 -7
  37. package/src/tool/safeZones/i18n/de.ts +244 -0
  38. package/src/tool/safeZones/i18n/id.ts +244 -0
  39. package/src/tool/safeZones/i18n/it.ts +244 -0
  40. package/src/tool/safeZones/i18n/ja.ts +244 -0
  41. package/src/tool/safeZones/i18n/ko.ts +244 -0
  42. package/src/tool/safeZones/i18n/nl.ts +244 -0
  43. package/src/tool/safeZones/i18n/pl.ts +244 -0
  44. package/src/tool/safeZones/i18n/pt.ts +244 -0
  45. package/src/tool/safeZones/i18n/ru.ts +244 -0
  46. package/src/tool/safeZones/i18n/sv.ts +244 -0
  47. package/src/tool/safeZones/i18n/tr.ts +244 -0
  48. package/src/tool/safeZones/i18n/zh.ts +244 -0
  49. package/src/tool/safeZones/index.ts +17 -9
  50. package/src/tool/socialImageResizer/i18n/de.ts +211 -0
  51. package/src/tool/socialImageResizer/i18n/en.ts +1 -1
  52. package/src/tool/socialImageResizer/i18n/id.ts +211 -0
  53. package/src/tool/socialImageResizer/i18n/it.ts +211 -0
  54. package/src/tool/socialImageResizer/i18n/ja.ts +211 -0
  55. package/src/tool/socialImageResizer/i18n/ko.ts +211 -0
  56. package/src/tool/socialImageResizer/i18n/nl.ts +211 -0
  57. package/src/tool/socialImageResizer/i18n/pl.ts +211 -0
  58. package/src/tool/socialImageResizer/i18n/pt.ts +211 -0
  59. package/src/tool/socialImageResizer/i18n/ru.ts +211 -0
  60. package/src/tool/socialImageResizer/i18n/sv.ts +211 -0
  61. package/src/tool/socialImageResizer/i18n/tr.ts +211 -0
  62. package/src/tool/socialImageResizer/i18n/zh.ts +211 -0
  63. package/src/tool/socialImageResizer/index.ts +16 -8
  64. package/src/tool/socialValueCalculator/i18n/de.ts +306 -0
  65. package/src/tool/socialValueCalculator/i18n/es.ts +1 -1
  66. package/src/tool/socialValueCalculator/i18n/fr.ts +1 -1
  67. package/src/tool/socialValueCalculator/i18n/id.ts +306 -0
  68. package/src/tool/socialValueCalculator/i18n/it.ts +306 -0
  69. package/src/tool/socialValueCalculator/i18n/ja.ts +306 -0
  70. package/src/tool/socialValueCalculator/i18n/ko.ts +306 -0
  71. package/src/tool/socialValueCalculator/i18n/nl.ts +306 -0
  72. package/src/tool/socialValueCalculator/i18n/pl.ts +306 -0
  73. package/src/tool/socialValueCalculator/i18n/pt.ts +306 -0
  74. package/src/tool/socialValueCalculator/i18n/ru.ts +306 -0
  75. package/src/tool/socialValueCalculator/i18n/sv.ts +306 -0
  76. package/src/tool/socialValueCalculator/i18n/tr.ts +306 -0
  77. package/src/tool/socialValueCalculator/i18n/zh.ts +306 -0
  78. package/src/tool/socialValueCalculator/index.ts +17 -9
  79. package/src/tool/tinderPhotoOptimizer/i18n/de.ts +272 -0
  80. package/src/tool/tinderPhotoOptimizer/i18n/id.ts +272 -0
  81. package/src/tool/tinderPhotoOptimizer/i18n/it.ts +272 -0
  82. package/src/tool/tinderPhotoOptimizer/i18n/ja.ts +272 -0
  83. package/src/tool/tinderPhotoOptimizer/i18n/ko.ts +272 -0
  84. package/src/tool/tinderPhotoOptimizer/i18n/nl.ts +272 -0
  85. package/src/tool/tinderPhotoOptimizer/i18n/pl.ts +272 -0
  86. package/src/tool/tinderPhotoOptimizer/i18n/pt.ts +272 -0
  87. package/src/tool/tinderPhotoOptimizer/i18n/ru.ts +272 -0
  88. package/src/tool/tinderPhotoOptimizer/i18n/sv.ts +272 -0
  89. package/src/tool/tinderPhotoOptimizer/i18n/tr.ts +272 -0
  90. package/src/tool/tinderPhotoOptimizer/i18n/zh.ts +272 -0
  91. package/src/tool/tinderPhotoOptimizer/index.ts +17 -9
  92. package/src/tool/youtubeThumbnail/i18n/de.ts +207 -0
  93. package/src/tool/youtubeThumbnail/i18n/id.ts +207 -0
  94. package/src/tool/youtubeThumbnail/i18n/it.ts +207 -0
  95. package/src/tool/youtubeThumbnail/i18n/ja.ts +207 -0
  96. package/src/tool/youtubeThumbnail/i18n/ko.ts +207 -0
  97. package/src/tool/youtubeThumbnail/i18n/nl.ts +207 -0
  98. package/src/tool/youtubeThumbnail/i18n/pl.ts +207 -0
  99. package/src/tool/youtubeThumbnail/i18n/pt.ts +207 -0
  100. package/src/tool/youtubeThumbnail/i18n/ru.ts +207 -0
  101. package/src/tool/youtubeThumbnail/i18n/sv.ts +207 -0
  102. package/src/tool/youtubeThumbnail/i18n/tr.ts +207 -0
  103. package/src/tool/youtubeThumbnail/i18n/zh.ts +207 -0
  104. package/src/tool/youtubeThumbnail/index.ts +17 -9
  105. package/src/tool/youtubeThumbnailPreviewer/i18n/de.ts +321 -0
  106. package/src/tool/youtubeThumbnailPreviewer/i18n/en.ts +1 -1
  107. package/src/tool/youtubeThumbnailPreviewer/i18n/es.ts +1 -1
  108. package/src/tool/youtubeThumbnailPreviewer/i18n/fr.ts +2 -2
  109. package/src/tool/youtubeThumbnailPreviewer/i18n/id.ts +321 -0
  110. package/src/tool/youtubeThumbnailPreviewer/i18n/it.ts +321 -0
  111. package/src/tool/youtubeThumbnailPreviewer/i18n/ja.ts +321 -0
  112. package/src/tool/youtubeThumbnailPreviewer/i18n/ko.ts +321 -0
  113. package/src/tool/youtubeThumbnailPreviewer/i18n/nl.ts +321 -0
  114. package/src/tool/youtubeThumbnailPreviewer/i18n/pl.ts +321 -0
  115. package/src/tool/youtubeThumbnailPreviewer/i18n/pt.ts +321 -0
  116. package/src/tool/youtubeThumbnailPreviewer/i18n/ru.ts +321 -0
  117. package/src/tool/youtubeThumbnailPreviewer/i18n/sv.ts +321 -0
  118. package/src/tool/youtubeThumbnailPreviewer/i18n/tr.ts +321 -0
  119. package/src/tool/youtubeThumbnailPreviewer/i18n/zh.ts +321 -0
  120. package/src/tool/youtubeThumbnailPreviewer/index.ts +24 -0
@@ -0,0 +1,211 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { SocialImageResizerUI } from '../ui';
4
+
5
+ const slug = 'andra-storlek-bilder-sociala-medier';
6
+ const title = 'Social Media Image Resizer: Beskär & Ändra storlek för varje plattform';
7
+ const description =
8
+ 'Ändra storlek och beskär dina foton för Instagram, TikTok, YouTube och mer. Smart beskärning med uppdaterade officiella mått för 2026.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Kommer bildkvaliteten att försämras vid storleksändring?',
13
+ answer:
14
+ 'Nej, vi använder utjämningsalgoritmer av hög kvalitet. Det rekommenderas att ladda upp en originalbild med en upplösning som är lika med eller större än målformatet.',
15
+ },
16
+ {
17
+ question: 'Är det säkert att ladda upp mina foton här?',
18
+ answer:
19
+ 'Helt säkert. Bearbetningen sker lokalt i din webbläsare med hjälp av Canvas API. Dina bilder skickas aldrig till någon server.',
20
+ },
21
+ {
22
+ question: 'Vilka format stöds?',
23
+ answer:
24
+ 'Vi stödjer uppladdning av JPG, PNG, WebP och AVIF. Nedladdningar optimeras som högkvalitativa JPG-filer för maximal kompatibilitet.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ {
30
+ name: 'Ladda upp din bild',
31
+ text: 'Dra din fil eller sök på din enhet för att starta processen.',
32
+ },
33
+ {
34
+ name: 'Välj format',
35
+ text: 'Välj den sociala nätverkstjänst och typ av publicering du behöver från sidomenyn.',
36
+ },
37
+ {
38
+ name: 'Justera och ladda ner',
39
+ text: 'Rama in ditt foto genom att dra det och använd zoom för en perfekt beskärning. När du är klar klickar du på ladda ner.',
40
+ },
41
+ ];
42
+
43
+ const faqSchema: WithContext<FAQPage> = {
44
+ '@context': 'https://schema.org',
45
+ '@type': 'FAQPage',
46
+ mainEntity: faqData.map((item) => ({
47
+ '@type': 'Question',
48
+ name: item.question,
49
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
50
+ })),
51
+ };
52
+
53
+ const howToSchema: WithContext<HowToThing> = {
54
+ '@context': 'https://schema.org',
55
+ '@type': 'HowTo',
56
+ name: title,
57
+ description,
58
+ step: howToData.map((step, i) => ({
59
+ '@type': 'HowToStep',
60
+ position: i + 1,
61
+ name: step.name,
62
+ text: step.text,
63
+ })),
64
+ };
65
+
66
+ const appSchema: WithContext<SoftwareApplication> = {
67
+ '@context': 'https://schema.org',
68
+ '@type': 'SoftwareApplication',
69
+ name: title,
70
+ description,
71
+ applicationCategory: 'UtilityApplication',
72
+ operatingSystem: 'All',
73
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'SEK' },
74
+ inLanguage: 'sv',
75
+ };
76
+
77
+ export const content: ToolLocaleContent<SocialImageResizerUI> = {
78
+ slug,
79
+ title,
80
+ description,
81
+ faqTitle: 'Vanliga frågor',
82
+ faq: faqData,
83
+ bibliographyTitle: 'Referenser',
84
+ bibliography: [
85
+ {
86
+ name: 'MDN Web Docs: Canvas API',
87
+ url: 'https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API',
88
+ },
89
+ {
90
+ name: 'Sprout Social: Guide för bildstorlekar på sociala medier 2026',
91
+ url: 'https://sproutsocial.com/insights/social-media-image-sizes-guide/',
92
+ },
93
+ ],
94
+ howTo: howToData,
95
+ schemas: [faqSchema, howToSchema, appSchema],
96
+ seo: [
97
+ {
98
+ type: 'title',
99
+ text: 'Social Media Image Resizer för varje plattform',
100
+ level: 2,
101
+ },
102
+ {
103
+ type: 'paragraph',
104
+ html: 'I dagens digitala ekosystem är det första intrycket visuellt. Varje socialt nätverk arbetar under specifika algoritmer som prioriterar innehåll som är inbyggt anpassat till dess proportioner. Vår bildstorleksändrare för sociala medier är inte bara ett tekniskt verktyg – det är din partner för att säkerställa att ditt budskap når fram utan oönskad beskärning eller kvalitetsförlust.',
105
+ },
106
+ {
107
+ type: 'paragraph',
108
+ html: 'Oavsett om du behöver konvertera ett landskapsfoto till ett slående vertikalt format för Instagram Stories eller anpassa en design för en komplex YouTube-banner, använder vårt verktyg ett smart beskärningssystem som låter dig placera och skala din bild med precision direkt i din webbläsare.',
109
+ },
110
+ {
111
+ type: 'title',
112
+ text: 'Officiella bildstorlekar för sociala medier 2026',
113
+ level: 3,
114
+ },
115
+ {
116
+ type: 'grid',
117
+ columns: [
118
+ { title: 'Instagram — Kvadratiskt inlägg', body: '1080 × 1080 px · Ratio 1:1' },
119
+ { title: 'Instagram — Vertikalt inlägg', body: '1080 × 1350 px · Ratio 4:5' },
120
+ { title: 'TikTok / Reels — Vertikalt', body: '1080 × 1920 px · Ratio 9:16' },
121
+ { title: 'YouTube — Miniatyrbild', body: '1280 × 720 px · Ratio 16:9' },
122
+ { title: 'YouTube — Kanalbanner', body: '2560 × 1440 px · Ratio 16:9' },
123
+ { title: 'X (Twitter) — Standardinlägg', body: '1200 × 675 px · Ratio 16:9' },
124
+ { title: 'LinkedIn — Profilomslag', body: '1584 × 396 px · Ratio 4:1' },
125
+ ],
126
+ },
127
+ {
128
+ type: 'grid',
129
+ columns: [
130
+ {
131
+ title: 'Instagram',
132
+ body: 'Det kvadratiska 1:1-formatet förblir en klassiker, men det vertikala 4:5-formatet tar upp mer skärmyta och genererar upp till 30 % mer engagemang i nyhetsflödet.',
133
+ },
134
+ {
135
+ title: 'Short Form innehåll',
136
+ body: 'För TikTok och Reels är standarden 9:16. Detta uppslukande format kräver att motivet är perfekt centrerat för att undvika att täckas av appens gränssnitt.',
137
+ },
138
+ {
139
+ title: 'Visuellt engagemang',
140
+ body: 'Från miniatyrbilder till banners, varje bild spelar en viktig roll för klickfrekvensen. Exakt beskärning säkerställer att text och nyckelelement alltid är läsbara.',
141
+ },
142
+ {
143
+ title: 'Professionell profilering',
144
+ body: 'På professionella nätverk som LinkedIn innebär skärpa auktoritet. Rubriker kräver specifika förhållanden för att undvika att se pixliga ut på högupplösta skärmar.',
145
+ },
146
+ ],
147
+ },
148
+ {
149
+ type: 'title',
150
+ text: 'Varför bildförhållandet är viktigt',
151
+ level: 3,
152
+ },
153
+ {
154
+ type: 'paragraph',
155
+ html: 'Bildförhållande (aspect ratio) är det proportionella förhållandet mellan en bilds bredd och höjd. Om man ignorerar det tvingas plattformar att zooma in eller lägga till svarta fält, vilket skadar estetiken och den organiska räckvidden.',
156
+ },
157
+ {
158
+ type: 'list',
159
+ items: [
160
+ 'Förhindrar att text eller logotyper särs av app-ikoner.',
161
+ 'Behåller optimal pixeltäthet utan att förvränga eller sträcka ut originalbilden.',
162
+ 'Sparar tid genom att samla alla officiella mått i ett enda webbverktyg.',
163
+ 'Förbättrar laddhastigheten genom att generera filer med exakt storlek och mått.',
164
+ ],
165
+ },
166
+ {
167
+ type: 'tip',
168
+ title: 'Kompositionstips',
169
+ html: '<p>När du använder vår manuella dra-funktion, försök placera bildens huvudmotiv vid en av stödlinjernas skärningspunkter. Detta skapar mer dynamiska och professionella kompositioner för dina sociala medier.</p>',
170
+ },
171
+ {
172
+ type: 'title',
173
+ text: 'Steg för en perfekt beskärning',
174
+ level: 3,
175
+ },
176
+ {
177
+ type: 'list',
178
+ items: [
179
+ 'Välj format: Välj plattform och typ av inlägg från sidomenyn.',
180
+ 'Ladda upp bilden: Dra din fil eller använd filväljaren för att importera din bild.',
181
+ 'Justera ramen: Dra fotot inom det synliga området och använd zoom för precision.',
182
+ 'Snabb export: Klicka på ladda ner för att få din bild klar att publiceras.',
183
+ ],
184
+ },
185
+ {
186
+ type: 'title',
187
+ text: 'Integritet och lokal bearbetning',
188
+ level: 3,
189
+ },
190
+ {
191
+ type: 'paragraph',
192
+ html: 'Din integritet är total. Detta verktyg bearbetar bilder lokalt i din webbläsare med hjälp av Canvas API. Dina bilder laddas aldrig upp till någon extern server, vilket garanterar fullständig säkerhet och omedelbar snabbhet.',
193
+ },
194
+ {
195
+ type: 'title',
196
+ text: 'Professionell optimering för sociala medier',
197
+ level: 3,
198
+ },
199
+ {
200
+ type: 'paragraph',
201
+ html: 'Att anpassa ditt visuella innehåll professionellt är en direkt tillväxtstrategi. Vårt verktyg förenklar arbetsflödet för kreatörer och community managers, så att varje inlägg ser perfekt ut på alla enheter.',
202
+ },
203
+ ],
204
+ ui: {
205
+ sidebarTitle: 'Sociala format',
206
+ uploadTitle: 'Ladda upp bild',
207
+ uploadSubtitle: 'Dra ditt foto hit eller klicka för att välja',
208
+ btnReset: 'Återställ',
209
+ btnDownload: 'Ladda ner bild',
210
+ },
211
+ };
@@ -0,0 +1,211 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { SocialImageResizerUI } from '../ui';
4
+
5
+ const slug = 'sosyal-medya-resim-boyutlandirici';
6
+ const title = 'Sosyal Medya Resim Boyutlandırıcı: Her Platform İçin Kırp ve Boyutlandır';
7
+ const description =
8
+ 'Instagram, TikTok, YouTube ve daha fazlası için fotoğraflarınızı boyutlandırın ve kırpın. 2026 için güncellenmiş resmi boyutlarla akıllı kırpma.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Boyutlandırma sırasında görüntü kalitesi kaybolur mu?',
13
+ answer:
14
+ 'Hayır, yüksek kaliteli yumuşatma algoritmaları kullanıyoruz. Hedef formata eşit veya bu formattan daha büyük çözünürlüğe sahip orijinal bir resim yüklemeniz önerilir.',
15
+ },
16
+ {
17
+ question: 'Fotoğraflarımı buraya yüklemek güvenli mi?',
18
+ answer:
19
+ 'Tamamen. İşleme, Canvas API kullanılarak tarayıcınızda yerel olarak yapılır. Fotoğraflarınız asla herhangi bir sunucuya gönderilmez.',
20
+ },
21
+ {
22
+ question: 'Hangi formatlar destekleniyor?',
23
+ answer:
24
+ 'Yükleme için JPG, PNG, WebP ve AVIF formatlarını destekliyoruz. İndirmeler, maksimum uyumluluk için yüksek kaliteli JPG olarak optimize edilir.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ {
30
+ name: 'Resminizi yükleyin',
31
+ text: 'İşlemi başlatmak için dosyanızı sürükleyin veya cihazınıza göz atın.',
32
+ },
33
+ {
34
+ name: 'Formatı seçin',
35
+ text: 'Yan menüden ihtiyacınız olan sosyal ağı ve yayın türünü seçin.',
36
+ },
37
+ {
38
+ name: 'Ayarla ve indir',
39
+ text: 'Fotoğrafınızı sürükleyerek çerçeveleyin ve mükemmel bir kırpma için yakınlaştırmayı kullanın. Bittiğinde indire tıklayın.',
40
+ },
41
+ ];
42
+
43
+ const faqSchema: WithContext<FAQPage> = {
44
+ '@context': 'https://schema.org',
45
+ '@type': 'FAQPage',
46
+ mainEntity: faqData.map((item) => ({
47
+ '@type': 'Question',
48
+ name: item.question,
49
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
50
+ })),
51
+ };
52
+
53
+ const howToSchema: WithContext<HowToThing> = {
54
+ '@context': 'https://schema.org',
55
+ '@type': 'HowTo',
56
+ name: title,
57
+ description,
58
+ step: howToData.map((step, i) => ({
59
+ '@type': 'HowToStep',
60
+ position: i + 1,
61
+ name: step.name,
62
+ text: step.text,
63
+ })),
64
+ };
65
+
66
+ const appSchema: WithContext<SoftwareApplication> = {
67
+ '@context': 'https://schema.org',
68
+ '@type': 'SoftwareApplication',
69
+ name: title,
70
+ description,
71
+ applicationCategory: 'UtilityApplication',
72
+ operatingSystem: 'All',
73
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'TRY' },
74
+ inLanguage: 'tr',
75
+ };
76
+
77
+ export const content: ToolLocaleContent<SocialImageResizerUI> = {
78
+ slug,
79
+ title,
80
+ description,
81
+ faqTitle: 'Sıkça Sorulan Sorular',
82
+ faq: faqData,
83
+ bibliographyTitle: 'Referanslar',
84
+ bibliography: [
85
+ {
86
+ name: 'MDN Web Docs: Canvas API',
87
+ url: 'https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API',
88
+ },
89
+ {
90
+ name: 'Sprout Social: Sosyal Medya Resim Boyutları Kılavuzu 2026',
91
+ url: 'https://sproutsocial.com/insights/social-media-image-sizes-guide/',
92
+ },
93
+ ],
94
+ howTo: howToData,
95
+ schemas: [faqSchema, howToSchema, appSchema],
96
+ seo: [
97
+ {
98
+ type: 'title',
99
+ text: 'Her Platform İçin Sosyal Medya Resim Boyutlandırıcı',
100
+ level: 2,
101
+ },
102
+ {
103
+ type: 'paragraph',
104
+ html: "Günümüzün dijital ekosisteminde ilk izlenimler görseldir. Her sosyal ağ, kendi oranlarına doğal olarak uyarlanmış içeriğe öncelik veren belirli algoritmalar altında çalışır. Sosyal medya resim boyutlandırıcımız sadece teknik bir araç değil; mesajınızın istenmeyen kırpmalar veya kalite kaybı olmadan ulaşmasını sağlamak için müttefikinizdir.",
105
+ },
106
+ {
107
+ type: 'paragraph',
108
+ html: 'İster bir manzara fotoğrafını Instagram Hikayeleri için çarpıcı bir dikey resme dönüştürmeniz, ister bir tasarımı karmaşık bir YouTube banner\'ına uyarlamanız gereksin, aracımız resminizi doğrudan tarayıcınızda hassasiyetle konumlandırmanıza ve ölçeklendirmenize olanak tanıyan akıllı bir kırpma sistemi kullanır.',
109
+ },
110
+ {
111
+ type: 'title',
112
+ text: 'Resmi Sosyal Medya Resim Boyutları 2026',
113
+ level: 3,
114
+ },
115
+ {
116
+ type: 'grid',
117
+ columns: [
118
+ { title: 'Instagram — Kare Gönderi', body: '1080 × 1080 px · Oran 1:1' },
119
+ { title: 'Instagram — Dikey Gönderi', body: '1080 × 1350 px · Oran 4:5' },
120
+ { title: 'TikTok / Reels — Dikey', body: '1080 × 1920 px · Oran 9:16' },
121
+ { title: 'YouTube — Küçük Resim', body: '1280 × 720 px · Oran 16:9' },
122
+ { title: 'YouTube — Kanal Banner\'ı', body: '2560 × 1440 px · Oran 16:9' },
123
+ { title: 'X (Twitter) — Standart Gönderi', body: '1200 × 675 px · Oran 16:9' },
124
+ { title: 'LinkedIn — Profil Kapağı', body: '1584 × 396 px · Oran 4:1' },
125
+ ],
126
+ },
127
+ {
128
+ type: 'grid',
129
+ columns: [
130
+ {
131
+ title: 'Instagram',
132
+ body: '1:1 kare formatı bir klasik olmaya devam ediyor, ancak 4:5 dikey format daha fazla ekran alanı kaplıyor ve haber akışında %30\'a kadar daha fazla etkileşim sağlıyor.',
133
+ },
134
+ {
135
+ title: 'Kısa Format İçerik',
136
+ body: 'TikTok ve Reels için standart 9:16\'dır. Bu sürükleyici format, odak noktasının uygulama arayüzü tarafından kapatılmasını önlemek için mükemmel şekilde hizalanmasını gerektirir.',
137
+ },
138
+ {
139
+ title: 'Görsel Etkileşim',
140
+ body: 'Küçük resimlerden bannerlara kadar her varlık, tıklama oranında belirli bir ağırlık taşır. Hassas kırpma, metnin ve anahtar öğelerin her zaman okunabilir olmasını sağlar.',
141
+ },
142
+ {
143
+ title: 'Profesyonel Markalaşma',
144
+ body: 'LinkedIn gibi profesyonel ağlarda netlik, otoritedir. Üstbilgiler, yüksek yoğunluklu ekranlarda pikselli görünmemek için belirli oranlar gerektirir.',
145
+ },
146
+ ],
147
+ },
148
+ {
149
+ type: 'title',
150
+ text: 'En Boy Oranı Neden Önemlidir?',
151
+ level: 3,
152
+ },
153
+ {
154
+ type: 'paragraph',
155
+ html: 'En boy oranı, bir görüntünün genişliği ile yüksekliği arasındaki orantılı ilişkidir. Bunu görmezden gelmek, platformları yakınlaştırmaya veya siyah çubuklar eklemeye zorlar, bu da estetiği ve organik erişimi olumsuz etkiler.',
156
+ },
157
+ {
158
+ type: 'list',
159
+ items: [
160
+ 'Metinlerin veya logoların yerel uygulama simgeleri tarafından kesilmesini önler.',
161
+ 'Orijinal fotoğrafı bozmadan veya germeden optimum piksel yoğunluğunu korur.',
162
+ 'Tüm resmi ölçüleri tek bir web aracında merkezileştirerek zaman kazandırır.',
163
+ 'Tam ağırlık ve boyutlarda dosyalar oluşturarak yükleme hızını iyileştirir.',
164
+ ],
165
+ },
166
+ {
167
+ type: 'tip',
168
+ title: 'Kompozisyon İpucu',
169
+ html: '<p>Manuel sürükleme özelliğimizi kullanırken, fotoğrafınızın ana konusunu ızgaranın kesişme noktalarından birine yerleştirmeyi deneyin. Bu, sosyal ağlarınız için daha dinamik ve profesyonel kompozisyonlar oluşturur.</p>',
170
+ },
171
+ {
172
+ type: 'title',
173
+ text: 'Mükemmel Bir Kırpma İçin Adımlar',
174
+ level: 3,
175
+ },
176
+ {
177
+ type: 'list',
178
+ items: [
179
+ 'Formatınızı seçin: Yan menüden platformu ve yayın türünü seçin.',
180
+ 'Resmi yükleyin: Dosyanızı sürükleyin veya fotoğrafınızı içe aktarmak için dosya seçiciyi kullanın.',
181
+ 'Çerçeveyi ayarlayın: Fotoğrafı görünür alan içinde sürükleyin ve hassasiyet için yakınlaştırmayı kullanın.',
182
+ 'Anında dışa aktarma: Resminizi yayınlanmaya hazır hale getirmek için indire tıklayın.',
183
+ ],
184
+ },
185
+ {
186
+ type: 'title',
187
+ text: 'Gizlilik ve Yerel İşleme',
188
+ level: 3,
189
+ },
190
+ {
191
+ type: 'paragraph',
192
+ html: 'Gizliliğiniz mutlaktır. Bu boyutlandırıcı, Canvas API kullanarak tarayıcınızda resimleri yerel olarak işler. Fotoğraflarınız asla harici bir sunucuya yüklenmez, tam güvenlik ve anında işlem hızı garanti edilir.',
193
+ },
194
+ {
195
+ type: 'title',
196
+ text: 'Sosyal Medya İçin Profesyonel Optimizasyon',
197
+ level: 3,
198
+ },
199
+ {
200
+ type: 'paragraph',
201
+ html: 'Görsel içeriğinizi profesyonelce uyarlamak doğrudan bir büyüme stratejisidir. Aracımız, içerik üreticileri ve topluluk yöneticileri için iş akışını basitleştirerek her gönderinin her cihazda ve platformda mükemmel görünmesini sağlar.',
202
+ },
203
+ ],
204
+ ui: {
205
+ sidebarTitle: 'Sosyal Formatlar',
206
+ uploadTitle: 'Resim Yükle',
207
+ uploadSubtitle: 'Fotoğrafınızı buraya sürükleyin veya göz atmak için tıklayın',
208
+ btnReset: 'Sıfırla',
209
+ btnDownload: 'Resmi İndir',
210
+ },
211
+ };
@@ -0,0 +1,211 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { SocialImageResizerUI } from '../ui';
4
+
5
+ const slug = 'social-media-image-resizer';
6
+ const title = '社交媒体图像调整工具:适用于各个平台的剪裁与缩放';
7
+ const description =
8
+ '为 Instagram、TikTok、YouTube 等平台调整照片尺寸并剪裁。基于 2026 年最新官方尺寸的智能剪裁。';
9
+
10
+ const faqData = [
11
+ {
12
+ question: '调整尺寸会损失图像质量吗?',
13
+ answer:
14
+ '不会,我们使用高质量的平滑算法。建议上传分辨率等于或大于目标格式的原始图像。',
15
+ },
16
+ {
17
+ question: '在这里上传我的照片安全吗?',
18
+ answer:
19
+ '完全安全。处理过程通过 Canvas API 在您的浏览器本地完成。您的照片永远不会发送到任何服务器。',
20
+ },
21
+ {
22
+ question: '支持哪些格式?',
23
+ answer:
24
+ '我们支持上传 JPG、PNG、WebP 和 AVIF 格式。下载时会优化为高质量 JPG,以确保最佳兼容性。',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ {
30
+ name: '上传您的图像',
31
+ text: '拖动文件或浏览您的设备以开始处理。',
32
+ },
33
+ {
34
+ name: '选择格式',
35
+ text: '从侧边菜单中选择您需要的社交网络和发布类型。',
36
+ },
37
+ {
38
+ name: '调整并下载',
39
+ text: '通过拖动照片来调整构图,并使用缩放功能进行完美剪裁。完成后,点击下载。',
40
+ },
41
+ ];
42
+
43
+ const faqSchema: WithContext<FAQPage> = {
44
+ '@context': 'https://schema.org',
45
+ '@type': 'FAQPage',
46
+ mainEntity: faqData.map((item) => ({
47
+ '@type': 'Question',
48
+ name: item.question,
49
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
50
+ })),
51
+ };
52
+
53
+ const howToSchema: WithContext<HowToThing> = {
54
+ '@context': 'https://schema.org',
55
+ '@type': 'HowTo',
56
+ name: title,
57
+ description,
58
+ step: howToData.map((step, i) => ({
59
+ '@type': 'HowToStep',
60
+ position: i + 1,
61
+ name: step.name,
62
+ text: step.text,
63
+ })),
64
+ };
65
+
66
+ const appSchema: WithContext<SoftwareApplication> = {
67
+ '@context': 'https://schema.org',
68
+ '@type': 'SoftwareApplication',
69
+ name: title,
70
+ description,
71
+ applicationCategory: 'UtilityApplication',
72
+ operatingSystem: 'All',
73
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'CNY' },
74
+ inLanguage: 'zh',
75
+ };
76
+
77
+ export const content: ToolLocaleContent<SocialImageResizerUI> = {
78
+ slug,
79
+ title,
80
+ description,
81
+ faqTitle: '常见问题',
82
+ faq: faqData,
83
+ bibliographyTitle: '参考资料',
84
+ bibliography: [
85
+ {
86
+ name: 'MDN Web Docs: Canvas API',
87
+ url: 'https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API',
88
+ },
89
+ {
90
+ name: 'Sprout Social: 2026 社交媒体图像尺寸指南',
91
+ url: 'https://sproutsocial.com/insights/social-media-image-sizes-guide/',
92
+ },
93
+ ],
94
+ howTo: howToData,
95
+ schemas: [faqSchema, howToSchema, appSchema],
96
+ seo: [
97
+ {
98
+ type: 'title',
99
+ text: '适用于各个平台的社交媒体图像调整工具',
100
+ level: 2,
101
+ },
102
+ {
103
+ type: 'paragraph',
104
+ html: '在当今的数字生态系统中,第一印象是由视觉决定的。每个社交网络都运行在特定的算法下,这些算法优先考虑原生适应其比例的内容。我们的社交媒体图像调整工具不仅仅是一个技术工具,它是您的盟友,确保您的信息在没有意外剪裁或质量损失的情况下送达。',
105
+ },
106
+ {
107
+ type: 'paragraph',
108
+ html: '无论您是需要将横向照片转换为引人注目的 Instagram Stories 垂直照片,还是调整设计以适应复杂的 YouTube 橫幅,我们的实用工具都使用智能剪裁系统,让您直接在浏览器中精确地调整图像的位置和缩放比例。',
109
+ },
110
+ {
111
+ type: 'title',
112
+ text: '2026 官方社交媒体图像尺寸',
113
+ level: 3,
114
+ },
115
+ {
116
+ type: 'grid',
117
+ columns: [
118
+ { title: 'Instagram — 正方形帖子', body: '1080 × 1080 px · 比例 1:1' },
119
+ { title: 'Instagram — 垂直帖子', body: '1080 × 1350 px · 比例 4:5' },
120
+ { title: 'TikTok / Reels — 垂直', body: '1080 × 1920 px · 比例 9:16' },
121
+ { title: 'YouTube — 缩略图', body: '1280 × 720 px · 比例 16:9' },
122
+ { title: 'YouTube — 频道横幅', body: '2560 × 1440 px · 比例 16:9' },
123
+ { title: 'X (Twitter) — 标准帖子', body: '1200 × 675 px · 比例 16:9' },
124
+ { title: 'LinkedIn — 个人资料封面', body: '1584 × 396 px · 比例 4:1' },
125
+ ],
126
+ },
127
+ {
128
+ type: 'grid',
129
+ columns: [
130
+ {
131
+ title: 'Instagram',
132
+ body: '1:1 正方形格式仍然是经典,但 4:5 垂直格式占据更多屏幕空间,在动态消息中产生的互动量最高可增加 30%。',
133
+ },
134
+ {
135
+ title: '短视频内容',
136
+ body: '对于 TikTok 和 Reels,标准是 9:16。这种沉浸式格式要求焦点完美对齐,以避免被应用界面遮挡。',
137
+ },
138
+ {
139
+ title: '视觉互动',
140
+ body: '从缩略图到横幅,每个素材在点击率中都占有特定权重。精确的剪裁确保文字和关键元素始终清晰可读。',
141
+ },
142
+ {
143
+ title: '专业化品牌建设',
144
+ body: '在 LinkedIn 等专业网络上,清晰度意味着权威。页眉需要特定的比例,以避免在高密度屏幕上出现像素化。',
145
+ },
146
+ ],
147
+ },
148
+ {
149
+ type: 'title',
150
+ text: '为什么纵横比很重要',
151
+ level: 3,
152
+ },
153
+ {
154
+ type: 'paragraph',
155
+ html: '纵横比是图像宽度和高度之间的比例关系。忽略它会迫使平台进行缩放或添加黑边,这会损害美感和有机触达。',
156
+ },
157
+ {
158
+ type: 'list',
159
+ items: [
160
+ '防止文字或徽标被应用原生图标切断。',
161
+ '保持最佳像素密度,而不扭曲或拉伸原始照片。',
162
+ '通过在单个 Web 工具中集中所有官方测量值来节省时间。',
163
+ '通过生成具有精确大小和尺寸的文件来提高加载速度。',
164
+ ],
165
+ },
166
+ {
167
+ type: 'tip',
168
+ title: '构图技巧',
169
+ html: '<p>使用我们的手动拖动功能时,尝试将照片的主要主体放在网格的交叉点之一。这可以为您的社交网络创建更具活力和专业感的构图。</p>',
170
+ },
171
+ {
172
+ type: 'title',
173
+ text: '完美剪裁的步骤',
174
+ level: 3,
175
+ },
176
+ {
177
+ type: 'list',
178
+ items: [
179
+ '选择您的格式:从侧边菜单中选择平台和发布类型。',
180
+ '上传图像:拖动文件或使用文件选择器导入照片。',
181
+ '调整框架:在可见区域内拖动照片,并使用缩放功能进行精确调整。',
182
+ '即时导出:点击下载,获取准备好发布的图像。',
183
+ ],
184
+ },
185
+ {
186
+ type: 'title',
187
+ text: '隐私和本地处理',
188
+ level: 3,
189
+ },
190
+ {
191
+ type: 'paragraph',
192
+ html: '您的隐私是绝对的。此调整工具使用 Canvas API 在您的浏览器本地处理图像。您的照片永远不会上传到任何外部服务器,保证了完整的安全性和即时的处理速度。',
193
+ },
194
+ {
195
+ type: 'title',
196
+ text: '社交媒体专业化优化',
197
+ level: 3,
198
+ },
199
+ {
200
+ type: 'paragraph',
201
+ html: '专业地调整您的视觉内容是一种直接的增长策略。我们的工具简化了创作者和社区经理的工作流程,确保每条帖子在任何设备和平台上都看起来很完美。',
202
+ },
203
+ ],
204
+ ui: {
205
+ sidebarTitle: '社交格式',
206
+ uploadTitle: '上传图像',
207
+ uploadSubtitle: '将照片拖到此处或点击浏览',
208
+ btnReset: '重置',
209
+ btnDownload: '下载图像',
210
+ },
211
+ };
@@ -7,20 +7,28 @@ import SocialImageResizerBibliography from './bibliography.astro';
7
7
  import type { SocialImageResizerUI } from './ui';
8
8
  export type SocialImageResizerLocaleContent = ToolLocaleContent<SocialImageResizerUI>;
9
9
 
10
- import { content as es } from './i18n/es';
11
- import { content as en } from './i18n/en';
12
- import { content as fr } from './i18n/fr';
13
-
14
10
  export const socialImageResizer: SocialToolEntry<SocialImageResizerUI> = {
15
11
  id: 'social-image-resizer',
16
12
  icons: {
17
- bg: 'mdi:image-size-select-large',
13
+ bg: 'mdi:image-edit-outline',
18
14
  fg: 'mdi:crop',
19
15
  },
20
16
  i18n: {
21
- es: async () => es,
22
- en: async () => en,
23
- fr: async () => fr,
17
+ es: () => import('./i18n/es').then((m) => m.content),
18
+ en: () => import('./i18n/en').then((m) => m.content),
19
+ fr: () => import('./i18n/fr').then((m) => m.content),
20
+ de: () => import('./i18n/de').then((m) => m.content),
21
+ id: () => import('./i18n/id').then((m) => m.content),
22
+ it: () => import('./i18n/it').then((m) => m.content),
23
+ ja: () => import('./i18n/ja').then((m) => m.content),
24
+ ko: () => import('./i18n/ko').then((m) => m.content),
25
+ nl: () => import('./i18n/nl').then((m) => m.content),
26
+ pl: () => import('./i18n/pl').then((m) => m.content),
27
+ pt: () => import('./i18n/pt').then((m) => m.content),
28
+ ru: () => import('./i18n/ru').then((m) => m.content),
29
+ sv: () => import('./i18n/sv').then((m) => m.content),
30
+ tr: () => import('./i18n/tr').then((m) => m.content),
31
+ zh: () => import('./i18n/zh').then((m) => m.content),
24
32
  },
25
33
  };
26
34