@jjlmoya/utils-diy 1.14.0 → 1.16.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 (46) hide show
  1. package/package.json +1 -1
  2. package/src/entries.ts +3 -1
  3. package/src/index.ts +2 -0
  4. package/src/tests/locale_completeness.test.ts +2 -2
  5. package/src/tests/tool_validation.test.ts +2 -2
  6. package/src/tool/pythagoreanRightAngleCalculator/component.astro +16 -11
  7. package/src/tool/pythagoreanRightAngleCalculator/i18n/de.ts +2 -0
  8. package/src/tool/pythagoreanRightAngleCalculator/i18n/es.ts +2 -0
  9. package/src/tool/pythagoreanRightAngleCalculator/i18n/fr.ts +2 -0
  10. package/src/tool/pythagoreanRightAngleCalculator/i18n/id.ts +2 -0
  11. package/src/tool/pythagoreanRightAngleCalculator/i18n/it.ts +3 -1
  12. package/src/tool/pythagoreanRightAngleCalculator/i18n/ja.ts +2 -0
  13. package/src/tool/pythagoreanRightAngleCalculator/i18n/nl.ts +2 -0
  14. package/src/tool/pythagoreanRightAngleCalculator/i18n/pl.ts +2 -0
  15. package/src/tool/pythagoreanRightAngleCalculator/i18n/pt.ts +3 -1
  16. package/src/tool/pythagoreanRightAngleCalculator/i18n/ru.ts +2 -0
  17. package/src/tool/pythagoreanRightAngleCalculator/i18n/sv.ts +2 -0
  18. package/src/tool/pythagoreanRightAngleCalculator/i18n/tr.ts +2 -0
  19. package/src/tool/pythagoreanRightAngleCalculator/i18n/zh.ts +2 -0
  20. package/src/tool/pythagoreanRightAngleCalculator/logic.ts +37 -31
  21. package/src/tool/pythagoreanRightAngleCalculator/pythagorean-right-angle-calculator.css +13 -4
  22. package/src/tool/twoStrokeMixtureCalculator/bibliography.astro +6 -0
  23. package/src/tool/twoStrokeMixtureCalculator/bibliography.ts +12 -0
  24. package/src/tool/twoStrokeMixtureCalculator/component.astro +266 -0
  25. package/src/tool/twoStrokeMixtureCalculator/entry.ts +24 -0
  26. package/src/tool/twoStrokeMixtureCalculator/i18n/de.ts +194 -0
  27. package/src/tool/twoStrokeMixtureCalculator/i18n/en.ts +194 -0
  28. package/src/tool/twoStrokeMixtureCalculator/i18n/es.ts +194 -0
  29. package/src/tool/twoStrokeMixtureCalculator/i18n/fr.ts +194 -0
  30. package/src/tool/twoStrokeMixtureCalculator/i18n/id.ts +194 -0
  31. package/src/tool/twoStrokeMixtureCalculator/i18n/it.ts +194 -0
  32. package/src/tool/twoStrokeMixtureCalculator/i18n/ja.ts +194 -0
  33. package/src/tool/twoStrokeMixtureCalculator/i18n/ko.ts +194 -0
  34. package/src/tool/twoStrokeMixtureCalculator/i18n/nl.ts +194 -0
  35. package/src/tool/twoStrokeMixtureCalculator/i18n/pl.ts +194 -0
  36. package/src/tool/twoStrokeMixtureCalculator/i18n/pt.ts +194 -0
  37. package/src/tool/twoStrokeMixtureCalculator/i18n/ru.ts +194 -0
  38. package/src/tool/twoStrokeMixtureCalculator/i18n/sv.ts +194 -0
  39. package/src/tool/twoStrokeMixtureCalculator/i18n/tr.ts +194 -0
  40. package/src/tool/twoStrokeMixtureCalculator/i18n/zh.ts +194 -0
  41. package/src/tool/twoStrokeMixtureCalculator/index.ts +11 -0
  42. package/src/tool/twoStrokeMixtureCalculator/logic.ts +92 -0
  43. package/src/tool/twoStrokeMixtureCalculator/seo.astro +15 -0
  44. package/src/tool/twoStrokeMixtureCalculator/two-stroke-fuel-mixture-calculator.css +405 -0
  45. package/src/tool/twoStrokeMixtureCalculator/ui.ts +81 -0
  46. package/src/tools.ts +2 -1
@@ -0,0 +1,194 @@
1
+ import type { WithContext, FAQPage, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { TwoStrokeMixtureCalculatorUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
5
+
6
+ const slug = '2-zamanli-yakit-karisim-hesaplamasi';
7
+ const title = '2 Zamanlı Yakıt Karışım Hesaplama: Hassas Yağ ve Yatık Oranları';
8
+ const description = '2 zamanlı motorlar için hassas yağ-yakıt karışım oranlarını anında hesaplayın. Motorlu testereler, mopetler ve küçük motorlar için temel araç. 1:25, 1:33, 1:40 ve 1:50 oranlarını destekler.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: '2 zamanlı motor nedir?',
13
+ answer: '2 zamanlı bir motor, emme ve güç çevrimini iki piston strokunda birleştirerek 4 zamanlı motorlardan daha basit ve hafif olmasını sağlar. Motorlu testereler, yaprak üfleyiciler ve mopetlerde kullanılırlar. Yağlama için yakıta karıştırılmış yağa ihtiyaç duyarlar.',
14
+ },
15
+ {
16
+ question: 'Yaygın yakıt-yağ karışım oranları nelerdir?',
17
+ answer: 'Yaygın oranlar 1:25 (zengin, koruyucu), 1:33 (eski ekipmanlar), 1:40 (standart) ve 1:50\'dir (fakir, modern motorlar). Tam oran için motor kılavuzuna bakın; yanlış oran motora zarar verebilir.',
18
+ },
19
+ {
20
+ question: 'Yanlış karıştırırsam ne olur?',
21
+ answer: 'Çok fazla yağ (zengin karışım) aşırı dumana, bujilerin kirlenmesine ve düşük performansa neden olur. Çok az yağ (fakir karışım) motorun kilitlenmesine, piston hasarına ve motor arızasına yol açar.',
22
+ },
23
+ {
24
+ question: 'Ne tür yağ kullanmalıyım?',
25
+ answer: 'Ekipmanınız için derecelendirilmiş 2 zamanlı motor yağı kullanın. Premium sentetik yağlar, geleneksel yağlara göre daha iyi koruma ve daha temiz yanma sağlar. Asla 4 zamanlı motor yağı kullanmayın.',
26
+ },
27
+ {
28
+ question: 'Yakıt ve yağı nasıl karıştırırım?',
29
+ answer: 'Benzinin bir kısmını temiz bir kaba dökün, hesaplanan miktarda yağı ekleyin ve kalan benzini ilave edin. 1-2 dakika çalkalayarak iyice karıştırın. Kabın üzerine karışım tarihini yazın.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ { name: 'Oranınızı bilin', text: 'Motor kılavuzuna bakın. Yaygın oranlar: testereler (1:40 veya 1:50), mopetler (1:33), eski motosikletler (1:25). Yanlış oran motora zarar verir.' },
35
+ { name: 'Yakıt miktarını ölçün', text: 'Ne kadar benzine ihtiyacınız olduğuna karar verin. Bu araç litre, galon veya herhangi bir birimi destekler. Doğru yakıt ölçümü = doğru yağ miktarı.' },
36
+ { name: 'Gereken yağı hesaplayın', text: 'Yakıt hacmini ve oranı girin. Hesaplayıcı, mükemmel bir karışım için tam olarak ne kadar yağa (ml veya litre) ihtiyacınız olduğunu gösterir.' },
37
+ { name: 'Dikkatlice karıştırın', text: 'Benzini temiz bir kaba dökün, yağı ekleyin, sonra kalan benzini ekleyin. İyice harmanlanması için 1-2 dakika çalkalayın.' },
38
+ { name: 'Etiketleyin ve kullanın', text: 'Kabı tarih ve oranla işaretleyin. En iyi sonuç için karışımı 30 gün içinde tüketin (özellikle sentetik yağlarda).' },
39
+ ];
40
+
41
+ const faqSchema: WithContext<FAQPage> = {
42
+ '@context': 'https://schema.org',
43
+ '@type': 'FAQPage',
44
+ mainEntity: faqData.map((item) => ({
45
+ '@type': 'Question',
46
+ name: item.question,
47
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
48
+ })),
49
+ };
50
+
51
+ const howToSchema: WithContext<any> = {
52
+ '@context': 'https://schema.org',
53
+ '@type': 'HowTo',
54
+ name: title,
55
+ description,
56
+ step: howToData.map((step, i) => ({
57
+ '@type': 'HowToStep',
58
+ position: i + 1,
59
+ name: step.name,
60
+ text: step.text,
61
+ })),
62
+ };
63
+
64
+ const appSchema: WithContext<SoftwareApplication> = {
65
+ '@context': 'https://schema.org',
66
+ '@type': 'SoftwareApplication',
67
+ name: title,
68
+ description,
69
+ applicationCategory: 'UtilityApplication',
70
+ operatingSystem: 'All',
71
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
72
+ inLanguage: 'tr',
73
+ };
74
+
75
+ export const content: ToolLocaleContent<TwoStrokeMixtureCalculatorUI> = {
76
+ slug,
77
+ title,
78
+ description,
79
+ faqTitle: 'Sıkça Sorulan Sorular',
80
+ faq: faqData,
81
+ bibliography,
82
+ howTo: howToData,
83
+ schemas: [faqSchema, howToSchema, appSchema],
84
+ seo: [
85
+ { type: 'title', text: '2 Zamanlı Yakıt Karışım Hesaplama: Testere ve Mopetler için Hassas Yağ Oranları', level: 2 },
86
+ { type: 'paragraph', html: 'İki zamanlı motorların hayatta kalması için hassas bir yakıt-yağ karışımı gerekir. Yanlış karıştırırsanız motorunuzu dakikalar içinde mahvedebilirsiniz. Bu hesaplayıcı, yakıt miktarınız ve motor tipiniz için gereken tam yağ miktarını anında belirler.' },
87
+
88
+ { type: 'title', text: '2 Zamanlı Motorlar Neden Yakıtta Yağa İhtiyaç Duyar?', level: 3 },
89
+ { type: 'card', icon: 'mdi:engine', title: 'Kritik Fark', html: 'Ayrı yağ depoları olan 4 zamanlı motorların aksine, 2 zamanlı motorlar yağı doğrudan yakıta karıştırır. Her güç strokunda motor, hem enerji hem de yağlama için yakıt-yağ karışımını yakar. Ayrı bir yağ pompası yoktur; pistonları sadece karışımlı yakıt hayatta tutar.' },
90
+
91
+ { type: 'title', text: '2 Zamanlı Oran Hızlı Referans', level: 3 },
92
+ { type: 'table', headers: ['Oran', 'Yağ %', 'Kullanım Durumu', 'Motor Tipi', 'Özellikler'], rows: [
93
+ ['1:25', '%3,85', 'Maksimum Koruma', '1980 öncesi ekipmanlar, ağır yük, eski motosikletler', 'Zengin karışım: daha fazla duman, daha fazla karbon birikimi, kilitlenmeye karşı maksimum koruma'],
94
+ ['1:33', '%2,94', 'Klasik Ekipmanlar', '80-90\'ların küçük motorları, eski testereler', 'Orta zenginlik: koruma ve verimlilik dengesi'],
95
+ ['1:40', '%2,44', 'Endüstri Standardı', 'Çoğu modern testere, mopet ve küçük motorlar', 'Standart tavsiye: bugünün sentetik yağları için tasarlanmıştır'],
96
+ ['1:50', '%1,96', 'Modern Verimlilik', 'En yeni testereler, yüksek performanslı mopetler', 'Fakir karışım: daha az duman, temiz yanma, premium sentetik yağlar için']
97
+ ] },
98
+
99
+ { type: 'title', text: 'Yanlış Oranların Sonuçları', level: 3 },
100
+ { type: 'proscons', items: [
101
+ { pro: 'Çok Fazla Yağ (Zengin Karışım)', con: 'Aşırı beyaz duman, kirlenmiş bujiler, karbon birikimi, zayıf hızlanma, motor arızası' },
102
+ { pro: 'Çok Az Yağ (Fakir Karışım)', con: 'Piston saniyeler içinde kilitlenir, çizilmiş silindir duvarları, katastrofik motor hasarı' },
103
+ { pro: 'Doğru Oran', con: 'Sarsıntısız çalışma, uygun yağlama, optimum yanma, uzun motor ömrü, güvenilir marş' }
104
+ ] },
105
+
106
+ { type: 'title', text: 'Yaygın Ekipman Oranları', level: 3 },
107
+ { type: 'card', icon: 'mdi:tree', title: 'Motorlu Testereler', html: '<strong>Stihl, Husqvarna, Echo:</strong> Modern modeller genellikle 1:40 veya 1:50 gerektirir. Her zaman kılavuzunuzu kontrol edin. Eski Stihl makineleri (90\'lar ve öncesi) 1:25 veya 1:33 belirtebilir.' },
108
+ { type: 'card', icon: 'mdi:motorcycle', title: 'Mopetler ve Motosikletler', html: '<strong>Vespa, Honda, Yamaha:</strong> Çoğu eski model için 1:33, modern versiyonlar için 1:40–1:50 gerektirir. Yüksek performanslı mopetler genellikle 1:50 oranlarını belirtir.' },
109
+ { type: 'card', icon: 'mdi:tools', title: 'Yaprak Üfleyiciler', html: '<strong>Stihl, Husqvarna, DeWalt:</strong> Tipik olarak 1:50 (modern) veya 1:40 (biraz daha eski). Bu araçlar hızlı sezonluk kullanım için tasarlanmıştır, bu nedenle fakir oranlar güvenilirlikten ödün vermeden dumanı azaltır.' },
110
+
111
+ { type: 'title', text: 'Yağ Tipi Oran Kadar Önemlidir', level: 3 },
112
+ { type: 'comparative', items: [
113
+ { title: 'Geleneksel 2 Zamanlı Yağı', description: 'Ara sıra kullanım için bütçe dostu seçenek. Daha fazla duman, standart oranlar için yeterli koruma.', icon: 'mdi:beaker', points: ['Düşük maliyet', 'Görünür duman', 'Yüksek kül birikimi', '1:40 oranları için uygun'] },
114
+ { title: 'Sentetik 2 Zamanlı Yağı', description: 'Sık kullanıcılar için premium seçim. Daha temiz yanma, daha iyi koruma, daha fakir oranlara olanak tanır.', icon: 'mdi:flame', points: ['Düşük duman çıkışı', 'En iyi motor koruması', '1:50 oranlarını güvenle sağlar', 'Uzun depolama stabilitesi'], highlight: true },
115
+ { title: 'Sentetik Karışım (Yarı Sentetik)', description: 'Geleneksel ve tam sentetik arasında orta yol. Makul maliyetle iyi koruma. Yaygın üretici tavsiyesi.', icon: 'mdi:beaker-outline', points: ['Dengeli performans', 'Orta maliyet', '1:40 oranları için iyi', 'Geleneksele göre daha az duman'] }
116
+ ], columns: 3 },
117
+
118
+ { type: 'title', text: 'Adım Adım Karıştırma İşlemi', level: 3 },
119
+ { type: 'card', icon: 'mdi:check-circle', title: 'Karıştırmanın Doğru Yolu', html: '<ol style="margin: 1rem 0; padding-left: 1.5rem;"><li><strong>Özel bir kap kullanın</strong> sadece yakıt karıştırma için ayrılmış. Temiz, kuru.</li><li><strong>Benzinin yarısını</strong> önce kaba dökün.</li><li><strong>Hesaplanan yağ miktarını ekleyin</strong> (hassasiyet için bu hesaplayıcıyı kullanın).</li><li><strong>Kalan benzini ekleyin</strong> hedef hacme ulaşmak için.</li><li><strong>1-2 dakika kuvvetlice çalkalayın</strong> renk homojen olana kadar. Homojen bir karışım = eşit yağlama.</li><li><strong>Kabı etiketleyin</strong> tarih, oran ve yakıt tipi ile.</li><li><strong>30 gün içinde kullanın</strong> (sentetik yağlar bunu 60 güne çıkarır).</li></ol>' },
120
+
121
+ { type: 'title', text: 'Ekipman Kılavuzunuzdan Ne Zaman Şüphe Etmelisiniz?', level: 3 },
122
+ { type: 'tip', html: '<strong>Her zaman önce ekipman kılavuzundaki oranı doğrulayın.</strong> Bulamıyorsanız üreticinin web sitesini ziyaret edin. Asla tahmin etmeyin — yanlış oran garantiyi geçersiz kılar ve motorun kilitlenme riskini artırır. Ekipmanınız eskiyse ve kılavuz kayıpsa model numarasıyla çevrimiçi arama yapın.' },
123
+
124
+ { type: 'title', text: 'Sözlük: 2 Zamanlı Terimlerin Açıklaması', level: 3 },
125
+ { type: 'glossary', items: [
126
+ { term: 'Fakir Karışım (Lean)', definition: 'Çok az yağ içeren yakıt (1:50 gibi yüksek oran). Yetersiz yağlama nedeniyle piston kilitlenme riski.' },
127
+ { term: 'Zengin Karışım (Rich)', definition: 'Çok fazla yağ içeren yakıt (1:25 gibi düşük oran). Aşırı duman, buji kirlenmesi ve karbon birikimine neden olur.' },
128
+ { term: 'Homojen Karışım', definition: 'İyice çalkalanarak elde edilen, yakıt ve yağın her yere eşit dağıldığı karışım. Eşit yağlama için şarttır.' },
129
+ { term: 'Kilitlenme (Seizure)', definition: 'Yetersiz yağlama ve sürtünme nedeniyle pistonun silindir içinde donması. Tam motor arızasıyla sonuçlanır.' },
130
+ { term: 'Sentetik Yağ', definition: 'Geleneksel mineral yağlara göre üstün koruma, temiz yanma ve sıcaklık stabilitesi sunan laboratuvar yapımı yağ.' },
131
+ { term: '2 Zamanlı Motor', definition: 'Tam yanma döngüsünü iki piston hareketinde tamamlayan motor. 4 zamanlı motorlardan daha hafif ve basittir.' },
132
+ { term: '4 Zamanlı Motor', definition: 'Ayrı yağ karteri olan ve dört aşamalı döngüye sahip motor. Yağ kanallardan dolaşır, yakıta karışmaz.' }
133
+ ] },
134
+
135
+ { type: 'title', text: 'Bu Hesaplayıcı Nasıl Zaman ve Para Tasarrufu Sağlar?', level: 3 },
136
+ { type: 'stats', items: [
137
+ { value: '%100', label: 'Doğru hesaplamalar, ölçüm hatası yok', icon: 'mdi:check-circle' },
138
+ { value: 'Anında', label: 'Tahminle değil, saniyeler içinde tam miktarlar', icon: 'mdi:flash' },
139
+ { value: '4 Oran', label: '1:25, 1:33, 1:40, 1:50 kapsanır', icon: 'mdi:counter', trend: { value: 'Artı özel oranlar', positive: true } },
140
+ { value: 'Paylaşılabilir', label: 'Tam karışım ayarınızı URL üzerinden kopyalayın ve paylaşın', icon: 'mdi:share-variant' }
141
+ ], columns: 2 },
142
+
143
+ { type: 'title', text: 'Motoru Bitiren Yaygın Hatalar', level: 3 },
144
+ { type: 'diagnostic', variant: 'error', title: '2 Zamanlı Motorlarda 4 Zamanlı Yağı Kullanmak', icon: 'mdi:alert', badge: 'Motor Ölümü', html: '4 zamanlı yağlar bir motor bloğu içinde dolaşmak için tasarlanmıştır. 2 zamanlı tankta temiz yanmazlar ve motorunuzu saatler içinde mahvederler.' },
145
+ { type: 'diagnostic', variant: 'warning', title: 'İyice Karıştırmayı Unutmak', icon: 'mdi:alert', badge: 'Kilitlenme Riski', html: 'Eksik karıştırma nedeniyle yağ ve yakıt ayrılırsa motorunuzun parçaları yağlamasız yanacaktır. En az 1-2 dakika çalkalayın.' },
146
+ { type: 'diagnostic', variant: 'warning', title: 'Eski Yakıt Kullanmak (60 Günden Fazla)', icon: 'mdi:alert', badge: 'Sakız Birikimi', html: 'Etanol karışımlı yakıt zamanla bozulur. Eski yakıt karışımı karbüratörlerde sakız kalıntıları bırakır. Sadece 30 gün içinde kullanacağınız kadar karıştırın.' },
147
+
148
+ { type: 'title', text: 'SSS Özeti', level: 3 },
149
+ { type: 'summary', title: 'Karıştırmadan Önce', items: [
150
+ 'Tam oran için ekipman kılavuzunu kontrol edin — bu üreticinin test edilmiş özelliğidir.',
151
+ '4 zamanlı veya diğer yağları değil, 2 zamanlı yağı kullandığınızdan emin olun.',
152
+ 'Sadece yakıt karıştırma için ayrılmış temiz bir kap kullanın.',
153
+ 'Taze benzin (aylarca saklanmamış) ve uyumlu 2 zamanlı yağı kullanın.',
154
+ 'İyice karıştırın ve tarih, oran ve yakıt tipi ile etiketleyin.',
155
+ 'En iyi sonuç için karışımı 30 gün içinde kullanın.'
156
+ ] },
157
+ ],
158
+ ui: {
159
+ titleMain: '2 Zamanlı Yakıt Karışım Hesaplama',
160
+ labelFuelVolume: 'Yakıt Miktarı',
161
+ labelRatio: 'Karışım Oranı',
162
+ labelOilRequired: 'Gereken Yağ',
163
+ labelTotalMixture: 'Toplam Karışım',
164
+ labelRichness: 'Karışım Zenginliği',
165
+ labelPresets: 'Yaygın Oranlar',
166
+ labelCustomRatio: 'Özel Oran (1:X)',
167
+ btnClear: 'Temizle',
168
+ btnCopyResults: 'Sonuçları Kopyala',
169
+ btnSwitchMode: 'Modu Değiştir',
170
+ unitLiters: 'L',
171
+ unitMilliliters: 'ml',
172
+ richLean: 'Fakir (daha az yağ, kilitlenme riski)',
173
+ richBalanced: 'Dengeli (standart karışım)',
174
+ richRich: 'Zengin (daha fazla yağ, daha fazla duman, motor koruması)',
175
+ msgReady: 'Hazır',
176
+ msgMixtureReady: 'Karışım hesaplandı',
177
+ tooltipFuelVolume: 'Litre cinsinden benzin miktarını girin',
178
+ tooltipRatio: 'Oranı 25, 33, 40 veya 50 olarak girin (1:25, 1:33 vb. için)',
179
+ recipientLabel: 'Karışım Kabı',
180
+ oilPercentage: 'Yağ %',
181
+ labelVolume: 'Hacim',
182
+ labelRatioShort: 'Oran',
183
+ labelOilTip: '%2 yağ karışımı = 1:50 oranı',
184
+ labelMixingTips: 'Karıştırma İpuçları',
185
+ labelMixingTipsDesc: 'Temiz bir kapta karıştırın: önce benzin, ölçülen yağı ekleyin, sonra kalan benzini ekleyin. Homojen karışım için iyi çalkalayın. Tarih ve oranla etiketleyin.',
186
+ recipePrefix: 'Şunun için:',
187
+ recipeAt: 'yakıtın oranı:',
188
+ recipeAdd: 'tam olarak şunu ekleyin:',
189
+ recipeOfOil: '2 zamanlı yağı.',
190
+ copyTextPrefix: '2 Zamanlı Karışım',
191
+ copyTextFuel: 'yakıt',
192
+ copyTextOil: 'yağ',
193
+ },
194
+ };
@@ -0,0 +1,194 @@
1
+ import type { WithContext, FAQPage, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { TwoStrokeMixtureCalculatorUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
5
+
6
+ const slug = 'two-stroke-fuel-mixture-calculator';
7
+ const title = '2冲程燃油混合比例计算器:精准的机油燃油比';
8
+ const description = '瞬时计算精准的2冲程发动机燃油混合比例。电锯、助力车、摩托车和小型发动机必备工具。支持 1:25, 1:33, 1:40 和 1:50 比例。';
9
+
10
+ const faqData = [
11
+ {
12
+ question: '什么是2冲程发动机?',
13
+ answer: '2冲程发动机通过活塞的两次冲程完成吸气和作功循环,这使得它比4冲程发动机更简单、更轻便。它们通常用于驱动电锯、吹叶机、助力车和部分摩托车。它们需要将机油直接混合到燃油中进行润滑。',
14
+ },
15
+ {
16
+ question: '常见的燃油机油混合比例是多少?',
17
+ answer: '常见的比例有 1:25(油多,保护性强)、1:33(旧型号设备)、1:40(标准)和 1:50(油少,现代发动机)。请查看发动机手册获取准确比例——使用错误比例会损坏发动机。',
18
+ },
19
+ {
20
+ question: '如果比例混合错了会怎样?',
21
+ answer: '机油过多(浓混合气)会导致产生大量浓烟、火花塞积碳和性能下降。机油过少(稀混合气)则会导致活塞拉缸、损坏活塞,甚至发动机报废。',
22
+ },
23
+ {
24
+ question: '我应该使用什么类型的机油?',
25
+ answer: '请使用适用于您设备的2冲程专用发动机油。优质合成2冲程油比普通矿物油提供更好的保护和更清洁的燃烧。切勿使用4冲程机油——那会损坏发动机。',
26
+ },
27
+ {
28
+ question: '如何混合燃油和机油?',
29
+ answer: '先将部分汽油倒入洁净容器中,加入计算出的机油量,然后再倒入剩余的汽油。剧烈摇晃1-2分钟使之充分混合。在容器上标注混合日期。',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ { name: '确认比例', text: '查看发动机手册或设备标签。常见比例:电锯(1:40 或 1:50)、助力车(1:33)、老式摩托车(1:25)。比例错误会损毁发动机。' },
35
+ { name: '测量燃油体积', text: '确定您需要的汽油量。本工具支持升、加仑或任何体积单位。准确测量汽油量 = 准确获得机油量。' },
36
+ { name: '计算所需机油', text: '输入燃油体积和比例。计算器将准确显示达到完美混合比例所需的机油量(毫升或升)。' },
37
+ { name: '仔细混合', text: '将燃油倒入洁净容器,加入计算出的机油,再加入剩余燃油。摇晃1-2分钟直至完全融合。' },
38
+ { name: '标注并使用', text: '在容器上标明日期和混合比例。为了获得最佳效果,混合后的燃油请在30天内用完(特别是使用合成油时)。' },
39
+ ];
40
+
41
+ const faqSchema: WithContext<FAQPage> = {
42
+ '@context': 'https://schema.org',
43
+ '@type': 'FAQPage',
44
+ mainEntity: faqData.map((item) => ({
45
+ '@type': 'Question',
46
+ name: item.question,
47
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
48
+ })),
49
+ };
50
+
51
+ const howToSchema: WithContext<any> = {
52
+ '@context': 'https://schema.org',
53
+ '@type': 'HowTo',
54
+ name: title,
55
+ description,
56
+ step: howToData.map((step, i) => ({
57
+ '@type': 'HowToStep',
58
+ position: i + 1,
59
+ name: step.name,
60
+ text: step.text,
61
+ })),
62
+ };
63
+
64
+ const appSchema: WithContext<SoftwareApplication> = {
65
+ '@context': 'https://schema.org',
66
+ '@type': 'SoftwareApplication',
67
+ name: title,
68
+ description,
69
+ applicationCategory: 'UtilityApplication',
70
+ operatingSystem: 'All',
71
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
72
+ inLanguage: 'zh',
73
+ };
74
+
75
+ export const content: ToolLocaleContent<TwoStrokeMixtureCalculatorUI> = {
76
+ slug,
77
+ title,
78
+ description,
79
+ faqTitle: '常见问题',
80
+ faq: faqData,
81
+ bibliography,
82
+ howTo: howToData,
83
+ schemas: [faqSchema, howToSchema, appSchema],
84
+ seo: [
85
+ { type: 'title', text: '2冲程燃油混合计算器:电锯与助力车的精准机油比', level: 2 },
86
+ { type: 'paragraph', html: '二冲程发动机需要极其精准的燃油与机油混合比例才能正常运转。比例错误可能会在几分钟内彻底损坏发动机。本计算器可根据您的燃油体积和发动机类型瞬间确定所需的准确机油量,消除作业现场的所有猜测。' },
87
+
88
+ { type: 'title', text: '为什么2冲程发动机需要在燃油中混入机油?', level: 3 },
89
+ { type: 'card', icon: 'mdi:engine', title: '关键区别', html: '与拥有独立油底壳的4冲程发动机不同,2冲程发动机直接将机油混入燃油。在每一次作功冲程中,发动机燃烧燃油混合气,既提供动力又进行润滑。这里没有油泵,全靠混合燃油来维持活塞寿命。' },
90
+
91
+ { type: 'title', text: '2冲程混合比例快速参考', level: 3 },
92
+ { type: 'table', headers: ['比例', '机油 %', '应用场景', '发动机类型', '特点'], rows: [
93
+ ['1:25', '3.85%', '最大保护', '1980年代以前的设备、高负荷使用、复古摩托车', '油浓:烟雾较多,易积碳,但对拉缸的保护性最强'],
94
+ ['1:33', '2.94%', '经典设备', '80-90年代的小型发动机、老旧电锯', '浓度适中:在保护性与效率之间取得平衡'],
95
+ ['1:40', '2.44%', '行业标准', '大多数现代电锯、助力车、现代小型发动机', '标准推荐:专为当今的合成机油设计'],
96
+ ['1:50', '1.96%', '现代高效', '最新款电锯、高性能助力车、新型摩托车', '油稀:烟雾极少,燃烧更清洁,仅适用于优质合成油']
97
+ ] },
98
+
99
+ { type: 'title', text: '比例错误带来的后果', level: 3 },
100
+ { type: 'proscons', items: [
101
+ { pro: '机油过多(混合气浓)', con: '大量白烟、火花塞积碳污染、加速无力、发动机故障' },
102
+ { pro: '机油过少(混合气稀)', con: '数秒内活塞拉缸、气缸壁划伤、灾难性发动机损毁' },
103
+ { pro: '比例正确', con: '运行平顺、润滑充分、燃烧状态佳、延长发动机寿命、启动可靠' }
104
+ ] },
105
+
106
+ { type: 'title', text: '常见设备比例', level: 3 },
107
+ { type: 'card', icon: 'mdi:tree', title: '电锯', html: '<strong>Stihl, Husqvarna, Echo:</strong> 现代机型通常要求 1:40 或 1:50。请务必核对手册——在现代机型上使用 1:25 可能导致积碳和性能下降。90年代及以前的老款机型可能指定 1:25 或 1:33。' },
108
+ { type: 'card', icon: 'mdi:motorcycle', title: '助力车与摩托车', html: '<strong>Vespa, Honda, Yamaha:</strong> 旧型号大多要求 1:33,现代机型则为 1:40–1:50。高性能街道车辆通常指定 1:50 比例。维修手册是唯一的准确依据。' },
109
+ { type: 'card', icon: 'mdi:tools', title: '吹叶机与打草机', html: '<strong>Stihl, Husqvarna, DeWalt:</strong> 通常为 1:50(现代)或 1:40。这些工具专为快速季节性使用设计,稀比例可在不牺牲可靠性的前提下减少烟雾。' },
110
+
111
+ { type: 'title', text: '机油类型与比例同样重要', level: 3 },
112
+ { type: 'comparative', items: [
113
+ { title: '矿物2冲程机油', description: '偶尔使用的经济选择。灰分较高,烟雾较多,对标准比例提供足够保护。', icon: 'mdi:beaker', points: ['价格低廉', '烟雾明显', '积碳较多', '适用于 1:40 比例'] },
114
+ { title: '合成2冲程机油', description: '频繁使用者的优质选择。燃烧更清洁,保护性更好,允许更稀的比例。', icon: 'mdi:flame', points: ['极低烟雾排放', '最佳发动机保护', '可安全支持 1:50 比例', '储存稳定性更高'], highlight: true },
115
+ { title: '半合成机油 (Semi synthetic)', description: '矿物与全合成之间的中间选择。价格合理,保护性佳。厂家常见推荐。', icon: 'mdi:beaker-outline', points: ['性能均衡', '成本适中', '非常适合 1:40 比例', '比矿物油更少烟雾'] }
116
+ ], columns: 3 },
117
+
118
+ { type: 'title', text: '分步混合流程', level: 3 },
119
+ { type: 'card', icon: 'mdi:check-circle', title: '正确混合方法', html: '<ol style="margin: 1rem 0; padding-left: 1.5rem;"><li><strong>使用专用容器</strong>:仅用于燃油混合的洁净、干燥、有标注的容器。</li><li><strong>先倒入一半汽油</strong>:先将汽油倒入容器。</li><li><strong>加入计算出的机油量</strong>:请使用此计算器获取精准数值。</li><li><strong>倒入剩余汽油</strong>:达到目标总体积。</li><li><strong>剧烈摇晃 1–2 分钟</strong>:直到颜色均匀一致。均匀混合 = 稳定润滑。</li><li><strong>标注容器</strong>:写明日期、比例和燃油类型。</li><li><strong>30天内用完</strong>:合成油最多可延长至60天。</li></ol>' },
120
+
121
+ { type: 'title', text: '何时该怀疑您的设备手册', level: 3 },
122
+ { type: 'tip', html: '<strong>务必先核对手册。</strong> 如果找不到,请访问官网或咨询客服。切勿盲目猜测——比例错误会导致保修失效并面临拉缸风险。如果是老式机器手册丢失,请根据型号在网上搜索。' },
123
+
124
+ { type: 'title', text: '词汇表:2冲程术语解释', level: 3 },
125
+ { type: 'glossary', items: [
126
+ { term: '稀混合 (Lean)', definition: '机油比例过低(如 1:50)。由于润滑不足,存在拉缸风险。' },
127
+ { term: '浓混合 (Rich)', definition: '机油比例过高(如 1:25)。会导致大量浓烟、火花塞积碳。' },
128
+ { term: '均匀混合', definition: '燃料与机油完全融合的状态,需通过剧烈摇晃实现。对润滑至关重要。' },
129
+ { term: '拉缸 (Seizure)', definition: '因润滑不足和摩擦过热,活塞在气缸内卡死。会导致发动机彻底报废。' },
130
+ { term: '合成油', definition: '实验室研制的高性能油品,提供更强保护、更净燃烧和更好的温度稳定性。' },
131
+ { term: '2冲程发动机', definition: '活塞往复两次即完成一次作功。结构简单,重量轻。' },
132
+ { term: '4冲程发动机', definition: '拥有独立油路,机油不混入燃油。结构较复杂但效率高。' }
133
+ ] },
134
+
135
+ { type: 'title', text: '计算器如何为您省时省钱', level: 3 },
136
+ { type: 'stats', items: [
137
+ { value: '100%', label: '计算准确,无测量误差', icon: 'mdi:check-circle' },
138
+ { value: '瞬时', label: '秒出结果,无需心算猜测', icon: 'mdi:flash' },
139
+ { value: '4档比例', label: '涵盖 1:25, 1:33, 1:40, 1:50', icon: 'mdi:counter', trend: { value: '支持自定义比例', positive: true } },
140
+ { value: '可分享', label: '通过 URL 复制并分享您的精确配置', icon: 'mdi:share-variant' }
141
+ ], columns: 2 },
142
+
143
+ { type: 'title', text: '会毁掉发动机的常见错误', level: 3 },
144
+ { type: 'diagnostic', variant: 'error', title: '在2冲程机中使用4冲程机油', icon: 'mdi:alert', badge: '引擎杀手', html: '4冲程机油专为循环流动设计,不适合燃烧。在2冲程机中使用会导致严重的积碳并损毁引擎。' },
145
+ { type: 'diagnostic', variant: 'warning', title: '混合不充分', icon: 'mdi:alert', badge: '拉缸风险', html: '如果油和汽油没有完全融合,发动机部分组件会在无润滑状态下运转。请务必摇晃 1-2 分钟。' },
146
+ { type: 'diagnostic', variant: 'warning', title: '使用过期燃油(超过60天)', icon: 'mdi:alert', badge: '胶质积聚', html: '混合燃油会随时间分解。过期混合油会在化油器中留下胶质。请仅混合30天内能用完的量。' },
147
+
148
+ { type: 'title', text: '摘要', level: 3 },
149
+ { type: 'summary', title: '混合前请确认', items: [
150
+ '核对手册获取厂家指定的准确比例。',
151
+ '确保使用的是2冲程专用油,而非4冲程或其他油品。',
152
+ '使用洁净的专用盛油容器。',
153
+ '使用新鲜汽油和兼容的2冲程机油。',
154
+ '充分混合并标注日期和比例。',
155
+ '混合油请在30天内用完。'
156
+ ] },
157
+ ],
158
+ ui: {
159
+ titleMain: '2冲程燃油混合比例计算器',
160
+ labelFuelVolume: '燃油量',
161
+ labelRatio: '混合比例',
162
+ labelOilRequired: '所需机油',
163
+ labelTotalMixture: '混合总量',
164
+ labelRichness: '混合气浓度',
165
+ labelPresets: '常用比例',
166
+ labelCustomRatio: '自定义比例 (1:X)',
167
+ btnClear: '清空',
168
+ btnCopyResults: '复制结果',
169
+ btnSwitchMode: '切换模式',
170
+ unitLiters: '升',
171
+ unitMilliliters: '毫升',
172
+ richLean: '稀(油少,拉缸风险)',
173
+ richBalanced: '平衡(标准混合)',
174
+ richRich: '浓(油多,保护引擎)',
175
+ msgReady: '就绪',
176
+ msgMixtureReady: '计算完毕',
177
+ tooltipFuelVolume: '输入汽油体积(升)',
178
+ tooltipRatio: '输入比例数值(如 25, 33, 40 或 50)',
179
+ recipientLabel: '混合容器',
180
+ oilPercentage: '机油 %',
181
+ labelVolume: '体积',
182
+ labelRatioShort: '比例',
183
+ labelOilTip: '2% 机油混合 = 1:50 比例',
184
+ labelMixingTips: '混合技巧',
185
+ labelMixingTipsDesc: '使用洁净容器:先加汽油,再加计量的机油,最后补足汽油。摇晃1-2分钟直至均匀。标注日期和比例。',
186
+ recipePrefix: '对于',
187
+ recipeAt: '的燃油(比例为',
188
+ recipeAdd: '请加入',
189
+ recipeOfOil: '2冲程机油。',
190
+ copyTextPrefix: '2冲程混合',
191
+ copyTextFuel: '燃油',
192
+ copyTextOil: '机油',
193
+ },
194
+ };
@@ -0,0 +1,11 @@
1
+ import type { ToolDefinition } from '../../types';
2
+ import { twoStrokeMixtureCalculator } from './entry';
3
+ export * from './entry';
4
+ export const TWO_STROKE_MIXTURE_CALCULATOR_TOOL: ToolDefinition = {
5
+ entry: twoStrokeMixtureCalculator,
6
+ Component: () => import('./component.astro'),
7
+ SEOComponent: () => import('./seo.astro'),
8
+ BibliographyComponent: () => import('./bibliography.astro'),
9
+ };
10
+
11
+ export type { TwoStrokeMixtureCalculatorUI } from './ui';
@@ -0,0 +1,92 @@
1
+ export interface MixtureCalculation {
2
+ fuelVolume: number;
3
+ ratio: number;
4
+ oilRequired: number;
5
+ displayUnit: 'ml' | 'l';
6
+ richness: 'lean' | 'balanced' | 'rich';
7
+ totalMixture: number;
8
+ status: 'idle' | 'calculated';
9
+ message: string;
10
+ }
11
+
12
+ export interface PresetRatio {
13
+ label: string;
14
+ ratio: number;
15
+ }
16
+
17
+ function determineRichness(ratio: number): 'lean' | 'balanced' | 'rich' {
18
+ if (ratio <= 40) return 'rich';
19
+ if (ratio <= 50) return 'balanced';
20
+ return 'lean';
21
+ }
22
+
23
+ function formatOilVolume(oilMl: number): { value: number; unit: 'ml' | 'l' } {
24
+ return oilMl < 1000 ? { value: oilMl, unit: 'ml' } : { value: oilMl / 1000, unit: 'l' };
25
+ }
26
+
27
+ function createIdleResult(ui: Record<string, string>, fuelLiters: number, ratio: number): MixtureCalculation {
28
+ return {
29
+ fuelVolume: fuelLiters,
30
+ ratio,
31
+ oilRequired: 0,
32
+ displayUnit: 'ml',
33
+ richness: 'balanced',
34
+ totalMixture: 0,
35
+ status: 'idle',
36
+ message: ui.msgReady || 'Ready to calculate',
37
+ };
38
+ }
39
+
40
+ export function calculateMixture(
41
+ fuelVolumeLiters: number,
42
+ ratioValue: number,
43
+ ui: Record<string, string> = {}
44
+ ): MixtureCalculation {
45
+ const fuelLiters = parseFloat(String(fuelVolumeLiters)) || 0;
46
+ const ratio = parseFloat(String(ratioValue)) || 0;
47
+
48
+ if (fuelLiters <= 0 || ratio <= 0) {
49
+ return createIdleResult(ui, fuelLiters, ratio);
50
+ }
51
+
52
+ const oilRequiredMl = (fuelLiters * 1000) / ratio;
53
+ const { value: displayValue, unit: displayUnit } = formatOilVolume(oilRequiredMl);
54
+
55
+ return {
56
+ fuelVolume: fuelLiters,
57
+ ratio,
58
+ oilRequired: displayValue,
59
+ displayUnit,
60
+ richness: determineRichness(ratio),
61
+ totalMixture: fuelLiters + oilRequiredMl / 1000,
62
+ status: 'calculated',
63
+ message: ui.msgMixtureReady || 'Mixture calculated',
64
+ };
65
+ }
66
+
67
+ export function calculateReverseRatio(
68
+ oilVolumeMl: number,
69
+ ratioValue: number
70
+ ): { fuelRequired: number; unit: string } {
71
+ const oil = parseFloat(String(oilVolumeMl)) || 0;
72
+ const ratio = parseFloat(String(ratioValue)) || 0;
73
+
74
+ if (oil <= 0 || ratio <= 0) {
75
+ return { fuelRequired: 0, unit: 'L' };
76
+ }
77
+
78
+ const fuelRequiredMl = oil * ratio;
79
+ const fuelRequiredL = fuelRequiredMl / 1000;
80
+
81
+ return {
82
+ fuelRequired: fuelRequiredL > 1 ? fuelRequiredL : fuelRequiredMl,
83
+ unit: fuelRequiredL > 1 ? 'L' : 'ml',
84
+ };
85
+ }
86
+
87
+ export const PRESET_RATIOS: PresetRatio[] = [
88
+ { label: '1:25', ratio: 25 },
89
+ { label: '1:33', ratio: 33 },
90
+ { label: '1:40', ratio: 40 },
91
+ { label: '1:50', ratio: 50 },
92
+ ];
@@ -0,0 +1,15 @@
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { twoStrokeMixtureCalculator } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'en' } = Astro.props;
11
+ const content = await twoStrokeMixtureCalculator.i18n[locale]?.();
12
+ if (!content) return null;
13
+ ---
14
+
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}