@jjlmoya/utils-home 1.6.0 → 1.8.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.
- package/package.json +61 -60
- package/src/tests/i18n_coverage.test.ts +36 -0
- package/src/tests/schemas_fulfillment.test.ts +23 -0
- package/src/tests/slug_language_code_format.test.ts +27 -0
- package/src/tests/slug_uniqueness.test.ts +81 -0
- package/src/tests/title_quality.test.ts +55 -0
- package/src/tool/dewPointCalculator/i18n/de.ts +178 -0
- package/src/tool/dewPointCalculator/i18n/en.ts +1 -1
- package/src/tool/dewPointCalculator/i18n/es.ts +1 -1
- package/src/tool/dewPointCalculator/i18n/fr.ts +1 -1
- package/src/tool/dewPointCalculator/i18n/id.ts +178 -0
- package/src/tool/dewPointCalculator/i18n/it.ts +178 -0
- package/src/tool/dewPointCalculator/i18n/ja.ts +178 -0
- package/src/tool/dewPointCalculator/i18n/ko.ts +178 -0
- package/src/tool/dewPointCalculator/i18n/nl.ts +178 -0
- package/src/tool/dewPointCalculator/i18n/pl.ts +178 -0
- package/src/tool/dewPointCalculator/i18n/pt.ts +178 -0
- package/src/tool/dewPointCalculator/i18n/ru.ts +178 -0
- package/src/tool/dewPointCalculator/i18n/sv.ts +178 -0
- package/src/tool/dewPointCalculator/i18n/tr.ts +178 -0
- package/src/tool/dewPointCalculator/i18n/zh.ts +178 -0
- package/src/tool/dewPointCalculator/index.ts +16 -6
- package/src/tool/heatingComparator/i18n/de.ts +340 -0
- package/src/tool/heatingComparator/i18n/id.ts +324 -0
- package/src/tool/heatingComparator/i18n/it.ts +336 -0
- package/src/tool/heatingComparator/i18n/ja.ts +311 -0
- package/src/tool/heatingComparator/i18n/ko.ts +307 -0
- package/src/tool/heatingComparator/i18n/nl.ts +336 -0
- package/src/tool/heatingComparator/i18n/pl.ts +311 -0
- package/src/tool/heatingComparator/i18n/pt.ts +336 -0
- package/src/tool/heatingComparator/i18n/ru.ts +307 -0
- package/src/tool/heatingComparator/i18n/sv.ts +311 -0
- package/src/tool/heatingComparator/i18n/tr.ts +324 -0
- package/src/tool/heatingComparator/i18n/zh.ts +307 -0
- package/src/tool/heatingComparator/index.ts +13 -1
- package/src/tool/ledSavingCalculator/i18n/de.ts +208 -0
- package/src/tool/ledSavingCalculator/i18n/fr.ts +1 -1
- package/src/tool/ledSavingCalculator/i18n/id.ts +208 -0
- package/src/tool/ledSavingCalculator/i18n/it.ts +208 -0
- package/src/tool/ledSavingCalculator/i18n/ja.ts +208 -0
- package/src/tool/ledSavingCalculator/i18n/ko.ts +208 -0
- package/src/tool/ledSavingCalculator/i18n/nl.ts +208 -0
- package/src/tool/ledSavingCalculator/i18n/pl.ts +208 -0
- package/src/tool/ledSavingCalculator/i18n/pt.ts +208 -0
- package/src/tool/ledSavingCalculator/i18n/ru.ts +208 -0
- package/src/tool/ledSavingCalculator/i18n/sv.ts +208 -0
- package/src/tool/ledSavingCalculator/i18n/tr.ts +208 -0
- package/src/tool/ledSavingCalculator/i18n/zh.ts +208 -0
- package/src/tool/ledSavingCalculator/index.ts +16 -7
- package/src/tool/projectorCalculator/i18n/de.ts +180 -0
- package/src/tool/projectorCalculator/i18n/fr.ts +1 -1
- package/src/tool/projectorCalculator/i18n/id.ts +181 -0
- package/src/tool/projectorCalculator/i18n/it.ts +180 -0
- package/src/tool/projectorCalculator/i18n/ja.ts +180 -0
- package/src/tool/projectorCalculator/i18n/ko.ts +180 -0
- package/src/tool/projectorCalculator/i18n/nl.ts +180 -0
- package/src/tool/projectorCalculator/i18n/pl.ts +180 -0
- package/src/tool/projectorCalculator/i18n/pt.ts +180 -0
- package/src/tool/projectorCalculator/i18n/ru.ts +180 -0
- package/src/tool/projectorCalculator/i18n/sv.ts +180 -0
- package/src/tool/projectorCalculator/i18n/tr.ts +180 -0
- package/src/tool/projectorCalculator/i18n/zh.ts +180 -0
- package/src/tool/projectorCalculator/index.ts +15 -6
- package/src/tool/qrGenerator/i18n/de.ts +203 -0
- package/src/tool/qrGenerator/i18n/id.ts +151 -0
- package/src/tool/qrGenerator/i18n/it.ts +174 -0
- package/src/tool/qrGenerator/i18n/ja.ts +151 -0
- package/src/tool/qrGenerator/i18n/ko.ts +151 -0
- package/src/tool/qrGenerator/i18n/nl.ts +151 -0
- package/src/tool/qrGenerator/i18n/pl.ts +151 -0
- package/src/tool/qrGenerator/i18n/pt.ts +151 -0
- package/src/tool/qrGenerator/i18n/ru.ts +151 -0
- package/src/tool/qrGenerator/i18n/sv.ts +151 -0
- package/src/tool/qrGenerator/i18n/tr.ts +151 -0
- package/src/tool/qrGenerator/i18n/zh.ts +151 -0
- package/src/tool/qrGenerator/index.ts +17 -9
- package/src/tool/solarCalculator/i18n/de.ts +146 -0
- package/src/tool/solarCalculator/i18n/id.ts +126 -0
- package/src/tool/solarCalculator/i18n/it.ts +126 -0
- package/src/tool/solarCalculator/i18n/ja.ts +126 -0
- package/src/tool/solarCalculator/i18n/ko.ts +121 -0
- package/src/tool/solarCalculator/i18n/nl.ts +120 -0
- package/src/tool/solarCalculator/i18n/pl.ts +121 -0
- package/src/tool/solarCalculator/i18n/pt.ts +126 -0
- package/src/tool/solarCalculator/i18n/ru.ts +110 -0
- package/src/tool/solarCalculator/i18n/sv.ts +110 -0
- package/src/tool/solarCalculator/i18n/tr.ts +120 -0
- package/src/tool/solarCalculator/i18n/zh.ts +121 -0
- package/src/tool/solarCalculator/index.ts +17 -9
- package/src/tool/tariffComparator/i18n/de.ts +133 -0
- package/src/tool/tariffComparator/i18n/id.ts +133 -0
- package/src/tool/tariffComparator/i18n/it.ts +133 -0
- package/src/tool/tariffComparator/i18n/ja.ts +133 -0
- package/src/tool/tariffComparator/i18n/ko.ts +133 -0
- package/src/tool/tariffComparator/i18n/nl.ts +133 -0
- package/src/tool/tariffComparator/i18n/pl.ts +133 -0
- package/src/tool/tariffComparator/i18n/pt.ts +133 -0
- package/src/tool/tariffComparator/i18n/ru.ts +106 -0
- package/src/tool/tariffComparator/i18n/sv.ts +111 -0
- package/src/tool/tariffComparator/i18n/tr.ts +133 -0
- package/src/tool/tariffComparator/i18n/zh.ts +133 -0
- package/src/tool/tariffComparator/index.ts +16 -7
- package/src/types.ts +1 -1
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { SolarCalculatorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'gunes-paneli-egim-hesaplama';
|
|
6
|
+
const title = 'Güneş Paneli Eğim Hesaplayıcı';
|
|
7
|
+
const description =
|
|
8
|
+
'Bulunduğunuz enleme göre güneş panelleriniz için en iyi eğim açısını hesaplayın. Sabit ve mevsimsel kurulum değerlerini öğrenin.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Çatımın eğimi mükemmel değilse ne olur?',
|
|
13
|
+
answer:
|
|
14
|
+
'Büyük bir sorun değil. 5-10 derecelik sapmalar yıllık üretimde %3\'ten az kayba neden olur. Tam açıya odaklanmaktan çok gölgelenmeyi önlemek daha önemlidir.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'En iyi açı dünyanın her yerinde aynı mıdır?',
|
|
18
|
+
answer:
|
|
19
|
+
'Hayır. Doğrudan enleminize bağlıdır. İstanbul (~41°K) ile Oslo (~60°K) arasındaki ideal açılar farklıdır.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Paneller hangi yöne bakmalı?',
|
|
23
|
+
answer:
|
|
24
|
+
'Kuzey Yarımküre\'de her zaman Güney\'e bakmalıdır. Güney Yarımküre\'de ise Kuzey\'e.',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const howToData = [
|
|
29
|
+
{
|
|
30
|
+
name: 'Enlemi girin',
|
|
31
|
+
text: 'Enleminizi ondalık derece olarak yazın veya otomatik konum bulmayı kullanın.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'En iyi açıyı kontrol edin',
|
|
35
|
+
text: 'Yıllık en iyi açı, sabit kurulumlar için ana değerdir.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'Mevsimsel ayar (isteğe bağlı)',
|
|
39
|
+
text: 'Desteğiniz uygunsa, kış ve yaz açılarını kullanarak verimi artırı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<HowTo> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'HowTo',
|
|
56
|
+
name: title,
|
|
57
|
+
description,
|
|
58
|
+
step: howToData.map((step) => ({
|
|
59
|
+
'@type': 'HowToStep',
|
|
60
|
+
name: step.name,
|
|
61
|
+
text: step.text,
|
|
62
|
+
})),
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
66
|
+
'@context': 'https://schema.org',
|
|
67
|
+
'@type': 'SoftwareApplication',
|
|
68
|
+
name: title,
|
|
69
|
+
description,
|
|
70
|
+
applicationCategory: 'UtilityApplication',
|
|
71
|
+
operatingSystem: 'All',
|
|
72
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'TRY' },
|
|
73
|
+
inLanguage: 'tr',
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export const content: ToolLocaleContent<SolarCalculatorUI> = {
|
|
77
|
+
slug,
|
|
78
|
+
title,
|
|
79
|
+
description,
|
|
80
|
+
faqTitle: 'Sıkça Sorulan Sorular',
|
|
81
|
+
faq: faqData,
|
|
82
|
+
bibliographyTitle: 'Kaynakça',
|
|
83
|
+
bibliography: [
|
|
84
|
+
{ name: 'PVGIS Tool', url: 'https://re.jrc.ec.europa.eu/pvgis/' },
|
|
85
|
+
],
|
|
86
|
+
howTo: howToData,
|
|
87
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
88
|
+
seo: [
|
|
89
|
+
{
|
|
90
|
+
type: 'title',
|
|
91
|
+
text: 'Güneş Eğimi Bilimi',
|
|
92
|
+
level: 2,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
type: 'paragraph',
|
|
96
|
+
html: 'Panellerin güneşe dik açıyla bakması verimliliğin temelidir. Konumunuz, güneşin gökyüzündeki yerini belirler.',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
type: 'summary',
|
|
100
|
+
title: 'Verimli kurulum için anahtarlar',
|
|
101
|
+
items: [
|
|
102
|
+
'Yıllık en uygun açı temel referanstır.',
|
|
103
|
+
'Küçük sapmalar verimi çok düşürmez.',
|
|
104
|
+
'Gölge en büyük engeldir.',
|
|
105
|
+
'Kuzey yarımkürede Güney\'e yönelin.',
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
],
|
|
109
|
+
ui: {
|
|
110
|
+
labelLatitude: 'Coğrafi Enlem',
|
|
111
|
+
btnLocate: 'Konumumu bul',
|
|
112
|
+
labelOptimal: 'Yıllık En İyi Açı',
|
|
113
|
+
labelEfficiency: 'Maksimum Verim',
|
|
114
|
+
labelWinter: 'Kış',
|
|
115
|
+
labelSummer: 'Yaz',
|
|
116
|
+
hemisphereNorth: 'Kuzey Yarımküre — GÜNEY\'e yöneltin',
|
|
117
|
+
hemisphereSouth: 'Güney Yarımküre — KUZEY\'e yöneltin',
|
|
118
|
+
geoNotAvailable: 'Konum servisleri kullanılamıyor.',
|
|
119
|
+
},
|
|
120
|
+
};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { SolarCalculatorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'solar-panel-calculator';
|
|
6
|
+
const title = '太阳能电池板倾斜角计算器';
|
|
7
|
+
const description =
|
|
8
|
+
'根据您所在的地理纬度计算太阳能电池板的最佳倾斜角度。获取固定安装和季节性调整的数值。';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: '如果我屋顶的倾斜度不完美怎么办?',
|
|
13
|
+
answer:
|
|
14
|
+
'这不是大问题。5-10 度的偏差导致的年度发电量损失通常小于 3%。比起追求精确的角度,避免局部阴影遮挡更为重要。',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: '全球各地的最佳角度都一样吗?',
|
|
18
|
+
answer:
|
|
19
|
+
'不一样。它直接取决于您所在的纬度。北京(约 39°N)的最佳角度与广州(约 23°N)或悉尼(约 34°S)的都不同。',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: '电池板应该朝向哪个方向?',
|
|
23
|
+
answer:
|
|
24
|
+
'在北半球,应始终朝南(方位角 180°)。在南半球,应朝北。偏离正南/正北可能会导致显著的效率下降。',
|
|
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<HowTo> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'HowTo',
|
|
56
|
+
name: title,
|
|
57
|
+
description,
|
|
58
|
+
step: howToData.map((step) => ({
|
|
59
|
+
'@type': 'HowToStep',
|
|
60
|
+
name: step.name,
|
|
61
|
+
text: step.text,
|
|
62
|
+
})),
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
66
|
+
'@context': 'https://schema.org',
|
|
67
|
+
'@type': 'SoftwareApplication',
|
|
68
|
+
name: title,
|
|
69
|
+
description,
|
|
70
|
+
applicationCategory: 'UtilityApplication',
|
|
71
|
+
operatingSystem: 'All',
|
|
72
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'CNY' },
|
|
73
|
+
inLanguage: 'zh',
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export const content: ToolLocaleContent<SolarCalculatorUI> = {
|
|
77
|
+
slug,
|
|
78
|
+
title,
|
|
79
|
+
description,
|
|
80
|
+
faqTitle: '常见问题',
|
|
81
|
+
faq: faqData,
|
|
82
|
+
bibliographyTitle: '参考资料',
|
|
83
|
+
bibliography: [
|
|
84
|
+
{ name: 'NREL PVWatts 计算器', url: 'https://pvwatts.nrel.gov/' },
|
|
85
|
+
{ name: 'PVGIS — 欧盟太阳能计算工具', url: 'https://re.jrc.ec.europa.eu/pvgis/' },
|
|
86
|
+
],
|
|
87
|
+
howTo: howToData,
|
|
88
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
89
|
+
seo: [
|
|
90
|
+
{
|
|
91
|
+
type: 'title',
|
|
92
|
+
text: '太阳能倾斜角的科学',
|
|
93
|
+
level: 2,
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
type: 'paragraph',
|
|
97
|
+
html: '太阳能电池板的效率取决于太阳光照射的角度。了解地理几何学是将屋顶转化为高效发电站的第一步。',
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
type: 'summary',
|
|
101
|
+
title: '高效安装关键',
|
|
102
|
+
items: [
|
|
103
|
+
'全年最佳角度是固定安装的主要参考。',
|
|
104
|
+
'±5 度的偏差对年度产量的影响微乎其微。',
|
|
105
|
+
'避免阴影遮挡比追求精准角度更重要。',
|
|
106
|
+
'北半球应朝南安装。',
|
|
107
|
+
],
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
ui: {
|
|
111
|
+
labelLatitude: '地理纬度',
|
|
112
|
+
btnLocate: '检测我的位置',
|
|
113
|
+
labelOptimal: '全年最佳角度',
|
|
114
|
+
labelEfficiency: '最大效率',
|
|
115
|
+
labelWinter: '冬季',
|
|
116
|
+
labelSummer: '夏季',
|
|
117
|
+
hemisphereNorth: '北半球 — 请朝向南方',
|
|
118
|
+
hemisphereSouth: '南半球 — 请朝向北方',
|
|
119
|
+
geoNotAvailable: '当前浏览器不支持地理定位。',
|
|
120
|
+
},
|
|
121
|
+
};
|
|
@@ -7,20 +7,28 @@ import type { SolarCalculatorUI } from './ui';
|
|
|
7
7
|
|
|
8
8
|
export type SolarCalculatorLocaleContent = ToolLocaleContent<SolarCalculatorUI>;
|
|
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 solarCalculator: HomeToolEntry<SolarCalculatorUI> = {
|
|
15
11
|
id: 'solar-calculator',
|
|
16
12
|
icons: {
|
|
17
|
-
bg: 'mdi:solar-panel',
|
|
18
|
-
fg: 'mdi:
|
|
13
|
+
bg: 'mdi:solar-panel-large',
|
|
14
|
+
fg: 'mdi:angle-acute',
|
|
19
15
|
},
|
|
20
16
|
i18n: {
|
|
21
|
-
|
|
22
|
-
en: async () => en,
|
|
23
|
-
|
|
17
|
+
de: async () => (await import('./i18n/de')).content,
|
|
18
|
+
en: async () => (await import('./i18n/en')).content,
|
|
19
|
+
es: async () => (await import('./i18n/es')).content,
|
|
20
|
+
fr: async () => (await import('./i18n/fr')).content,
|
|
21
|
+
id: async () => (await import('./i18n/id')).content,
|
|
22
|
+
it: async () => (await import('./i18n/it')).content,
|
|
23
|
+
ja: async () => (await import('./i18n/ja')).content,
|
|
24
|
+
ko: async () => (await import('./i18n/ko')).content,
|
|
25
|
+
nl: async () => (await import('./i18n/nl')).content,
|
|
26
|
+
pl: async () => (await import('./i18n/pl')).content,
|
|
27
|
+
pt: async () => (await import('./i18n/pt')).content,
|
|
28
|
+
ru: async () => (await import('./i18n/ru')).content,
|
|
29
|
+
sv: async () => (await import('./i18n/sv')).content,
|
|
30
|
+
tr: async () => (await import('./i18n/tr')).content,
|
|
31
|
+
zh: async () => (await import('./i18n/zh')).content,
|
|
24
32
|
},
|
|
25
33
|
};
|
|
26
34
|
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { TariffComparatorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'stromtarif-vergleich';
|
|
6
|
+
const title = 'Stromtarif Vergleich: Festpreis vs. Dynamisch';
|
|
7
|
+
const description =
|
|
8
|
+
'Finden Sie heraus, welcher Stromtarif am besten zu Ihnen passt. Vergleichen Sie Festpreise mit dynamischen Tarifen basierend auf Ihrem Verbrauch.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Was ist besser, ein Festpreis oder ein dynamischer Tarif?',
|
|
13
|
+
answer:
|
|
14
|
+
'Festpreise bieten Planbarkeit. Dynamische Tarife (wie PVPC in Spanien) nutzen günstige Börsenpreise, sind aber volatil. Unser Rechner hilft Ihnen bei der Entscheidung.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Wie finde ich meinen Jahresverbrauch heraus?',
|
|
18
|
+
answer:
|
|
19
|
+
'Diesen Wert finden Sie auf Ihrer letzten Jahresabrechnung, angegeben in kWh.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Was ist die vertraglich vereinbarte Leistung?',
|
|
23
|
+
answer:
|
|
24
|
+
'Das ist die maximale Last (kW), die Sie gleichzeitig nutzen können. Zu hohe Werte kosten unnötig Geld, zu niedrige lassen die Sicherung rausfliegen.',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const howToData = [
|
|
29
|
+
{
|
|
30
|
+
name: 'Abrechnung prüfen',
|
|
31
|
+
text: 'Suchen Sie Ihren Jahresverbrauch in kWh und Ihre Leistung in kW.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'Werte einstellen',
|
|
35
|
+
text: 'Passen Sie die Schieberegler an Ihre realen Daten an.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'Ergebnisse vergleichen',
|
|
39
|
+
text: 'Sehen Sie die geschätzten Jahreskosten für beide Tarifmodelle.',
|
|
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<HowTo> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'HowTo',
|
|
56
|
+
name: title,
|
|
57
|
+
description,
|
|
58
|
+
step: howToData.map((step) => ({
|
|
59
|
+
'@type': 'HowToStep',
|
|
60
|
+
name: step.name,
|
|
61
|
+
text: step.text,
|
|
62
|
+
})),
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
66
|
+
'@context': 'https://schema.org',
|
|
67
|
+
'@type': 'SoftwareApplication',
|
|
68
|
+
name: title,
|
|
69
|
+
description,
|
|
70
|
+
applicationCategory: 'UtilityApplication',
|
|
71
|
+
operatingSystem: 'All',
|
|
72
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
73
|
+
inLanguage: 'de',
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export const content: ToolLocaleContent<TariffComparatorUI> = {
|
|
77
|
+
slug,
|
|
78
|
+
title,
|
|
79
|
+
description,
|
|
80
|
+
faqTitle: 'Häufig gestellte Fragen',
|
|
81
|
+
faq: faqData,
|
|
82
|
+
bibliographyTitle: 'Quellen',
|
|
83
|
+
bibliography: [
|
|
84
|
+
{ name: 'Bundesnetzagentur — Stromtarife', url: 'https://www.bundesnetzagentur.de' },
|
|
85
|
+
],
|
|
86
|
+
howTo: howToData,
|
|
87
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
88
|
+
seo: [
|
|
89
|
+
{
|
|
90
|
+
type: 'title',
|
|
91
|
+
text: 'Stromkosten verstehen und sparen',
|
|
92
|
+
level: 2,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
type: 'paragraph',
|
|
96
|
+
html: 'Die Wahl des richtigen Tarifs kann Hunderte von Euro im Jahr sparen. Vergleichen Sie basierend auf Ihrem individuellen Profil.',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
type: 'summary',
|
|
100
|
+
title: 'Entscheidungshilfen',
|
|
101
|
+
items: [
|
|
102
|
+
'Dynamische Tarife lohnen sich bei flexiblem Verbrauch.',
|
|
103
|
+
'Festpreise schützen vor Preissprüngen.',
|
|
104
|
+
'Die Leistungskostensenkung ist oft der schnellste Weg zum Sparen.',
|
|
105
|
+
],
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
ui: {
|
|
109
|
+
labelConsumption: 'Jahresverbrauch',
|
|
110
|
+
unitKwhYear: 'kWh/Jahr',
|
|
111
|
+
labelPower: 'Vertragsleistung',
|
|
112
|
+
unitKw: 'kW',
|
|
113
|
+
labelMarket: 'Dynamischer Tarif',
|
|
114
|
+
labelFree: 'Festpreis-Tarif',
|
|
115
|
+
labelAnnualEst: 'Geschätzte Jahreskosten',
|
|
116
|
+
labelPowerTerm: 'Grundpreis (Leistung)',
|
|
117
|
+
labelEnergyTerm: 'Arbeitspreis (Verbrauch)',
|
|
118
|
+
labelDashboard: 'Energie-Dashboard',
|
|
119
|
+
labelMaxPower: 'Spitzenlast',
|
|
120
|
+
labelMaxPowerEst: 'Geschätzte Spitze',
|
|
121
|
+
labelCo2: 'CO₂-Fußabdruck',
|
|
122
|
+
labelCo2Est: 'Jährliche Schätzung',
|
|
123
|
+
labelSimulator: 'Szenario-Simulator',
|
|
124
|
+
labelSolar: 'Solar-Eigenverbrauch',
|
|
125
|
+
labelSolarDesc: 'Ersparnis mit Photovoltaik simulieren (30 % Reduktion)',
|
|
126
|
+
labelShift: 'Lastverschiebung',
|
|
127
|
+
labelShiftDesc: 'In günstige Zeiten verschoben:',
|
|
128
|
+
badgeBetter: 'Günstigste Option',
|
|
129
|
+
badgeWorseYear: 'Jahr',
|
|
130
|
+
currencySign: '€',
|
|
131
|
+
monthLabels: 'Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez',
|
|
132
|
+
},
|
|
133
|
+
};
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { TariffComparatorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'perbandingan-tarif-listrik';
|
|
6
|
+
const title = 'Perbandingan Tarif Listrik: Pasar Bebas vs Teratur';
|
|
7
|
+
const description =
|
|
8
|
+
'Temukan tarif listrik mana yang paling cocok bagi Anda. Bandingkan pasar teratur dengan pasar bebas berdasarkan konsumsi Anda.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Mana yang lebih baik, tarif tetap atau dinamis?',
|
|
13
|
+
answer:
|
|
14
|
+
'Tarif tetap memberikan kepastian harga. Tarif dinamis mengikuti harga pasar grosir yang bisa sangat murah atau sangat mahal. Alat ini membantu Anda memutuskan.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Bagaimana cara mengetahui konsumsi tahunan saya?',
|
|
18
|
+
answer:
|
|
19
|
+
'Anda dapat menemukan data ini di tagihan listrik terakhir Anda, biasanya dalam kWh.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Apa itu daya yang dikontrak?',
|
|
23
|
+
answer:
|
|
24
|
+
'Ini adalah batas beban maksimum (kW) yang dapat Anda gunakan secara bersamaan.',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const howToData = [
|
|
29
|
+
{
|
|
30
|
+
name: 'Periksa tagihan',
|
|
31
|
+
text: 'Cari konsumsi tahunan (kWh) dan daya (kW) pada tagihan Anda.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'Atur nilai',
|
|
35
|
+
text: 'Geser pengatur untuk mencocokkan dengan data asli Anda.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'Bandingkan hasil',
|
|
39
|
+
text: 'Lihat perkiraan biaya tahunan untuk kedua skema tarif.',
|
|
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<HowTo> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'HowTo',
|
|
56
|
+
name: title,
|
|
57
|
+
description,
|
|
58
|
+
step: howToData.map((step) => ({
|
|
59
|
+
'@type': 'HowToStep',
|
|
60
|
+
name: step.name,
|
|
61
|
+
text: step.text,
|
|
62
|
+
})),
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
66
|
+
'@context': 'https://schema.org',
|
|
67
|
+
'@type': 'SoftwareApplication',
|
|
68
|
+
name: title,
|
|
69
|
+
description,
|
|
70
|
+
applicationCategory: 'UtilityApplication',
|
|
71
|
+
operatingSystem: 'All',
|
|
72
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'IDR' },
|
|
73
|
+
inLanguage: 'id',
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export const content: ToolLocaleContent<TariffComparatorUI> = {
|
|
77
|
+
slug,
|
|
78
|
+
title,
|
|
79
|
+
description,
|
|
80
|
+
faqTitle: 'Pertanyaan Umum',
|
|
81
|
+
faq: faqData,
|
|
82
|
+
bibliographyTitle: 'Daftar Pustaka',
|
|
83
|
+
bibliography: [
|
|
84
|
+
{ name: 'Portal Energi Nasional', url: 'https://www.esdm.go.id' },
|
|
85
|
+
],
|
|
86
|
+
howTo: howToData,
|
|
87
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
88
|
+
seo: [
|
|
89
|
+
{
|
|
90
|
+
type: 'title',
|
|
91
|
+
text: 'Hemat tagihan listrik Anda',
|
|
92
|
+
level: 2,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
type: 'paragraph',
|
|
96
|
+
html: 'Memilih tarif yang tepat dapat membantu menghemat pengeluaran. Gunakan kalkulator kami untuk simulasi.',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
type: 'summary',
|
|
100
|
+
title: 'Tips Berhemat',
|
|
101
|
+
items: [
|
|
102
|
+
'Bandingkan penawaran pasar bebas secara rutin.',
|
|
103
|
+
'Sesuaikan daya kontrak agar tidak membayar yang tidak perlu.',
|
|
104
|
+
'Gunakan listrik di jam hemat jika tarifnya berbeda.',
|
|
105
|
+
],
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
ui: {
|
|
109
|
+
labelConsumption: 'Konsumsi Tahunan',
|
|
110
|
+
unitKwhYear: 'kWh/tahun',
|
|
111
|
+
labelPower: 'Daya Kontrak',
|
|
112
|
+
unitKw: 'kW',
|
|
113
|
+
labelMarket: 'Pasar Teratur (Dinamis)',
|
|
114
|
+
labelFree: 'Pasar Bebas (Tetap)',
|
|
115
|
+
labelAnnualEst: 'Perkiraan tahunan',
|
|
116
|
+
labelPowerTerm: 'Biaya Daya (Tetap)',
|
|
117
|
+
labelEnergyTerm: 'Biaya Energi (Variabel)',
|
|
118
|
+
labelDashboard: 'Dashboard Energi',
|
|
119
|
+
labelMaxPower: 'Puncak Beban',
|
|
120
|
+
labelMaxPowerEst: 'Perkiraan puncak',
|
|
121
|
+
labelCo2: 'Jejak CO₂',
|
|
122
|
+
labelCo2Est: 'Perkiraan tahunan',
|
|
123
|
+
labelSimulator: 'Simulasi Skenario',
|
|
124
|
+
labelSolar: 'Panel Surya',
|
|
125
|
+
labelSolarDesc: 'Simulasi hemat dengan panel (reduksi 30%)',
|
|
126
|
+
labelShift: 'Geser ke Waktu Murah',
|
|
127
|
+
labelShiftDesc: 'Konsumsi yang digeser ke jam murah:',
|
|
128
|
+
badgeBetter: 'Pilihan termurah',
|
|
129
|
+
badgeWorseYear: 'tahun',
|
|
130
|
+
currencySign: 'Rp',
|
|
131
|
+
monthLabels: 'Jan,Feb,Mar,Apr,Mei,Jun,Jul,Agu,Sep,Okt,Nov,Des',
|
|
132
|
+
},
|
|
133
|
+
};
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { TariffComparatorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'confronto-tariffe-luce';
|
|
6
|
+
const title = 'Confrontatore Tariffe Luce: Mercato Libero vs Tutelato';
|
|
7
|
+
const description =
|
|
8
|
+
'Scopri quale tariffa luce ti conviene di più. Confronta il mercato tutelato vs mercato libero in base ai tuoi consumi reali.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'È meglio il mercato libero o quello tutelato?',
|
|
13
|
+
answer:
|
|
14
|
+
'Il mercato tutelato ha prezzi variabili basati sull\'andamento dell\'energia. Il mercato libero offre stabilità con prezzi fissi. Dipende dalla tua propensione al rischio.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Dove trovo il mio consumo annuo?',
|
|
18
|
+
answer:
|
|
19
|
+
'Puoi trovarlo nell\'ultima bolletta della luce, solitamente indicato come "Consumo Annuo" in kWh.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Cos\'è la potenza impegnata?',
|
|
23
|
+
answer:
|
|
24
|
+
'È il limite massimo di kW che puoi usare contemporaneamente. Per una casa standard è solitamente 3 kW.',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const howToData = [
|
|
29
|
+
{
|
|
30
|
+
name: 'Controlla la bolletta',
|
|
31
|
+
text: 'Cerca il consumo annuo (kWh) e la potenza (kW).',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'Inserisci i dati',
|
|
35
|
+
text: 'Regola i cursori con i tuoi valori reali.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'Confronta i costi',
|
|
39
|
+
text: 'Guarda la stima del costo annuo per le due opzioni.',
|
|
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<HowTo> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'HowTo',
|
|
56
|
+
name: title,
|
|
57
|
+
description,
|
|
58
|
+
step: howToData.map((step) => ({
|
|
59
|
+
'@type': 'HowToStep',
|
|
60
|
+
name: step.name,
|
|
61
|
+
text: step.text,
|
|
62
|
+
})),
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
66
|
+
'@context': 'https://schema.org',
|
|
67
|
+
'@type': 'SoftwareApplication',
|
|
68
|
+
name: title,
|
|
69
|
+
description,
|
|
70
|
+
applicationCategory: 'UtilityApplication',
|
|
71
|
+
operatingSystem: 'All',
|
|
72
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
73
|
+
inLanguage: 'it',
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export const content: ToolLocaleContent<TariffComparatorUI> = {
|
|
77
|
+
slug,
|
|
78
|
+
title,
|
|
79
|
+
description,
|
|
80
|
+
faqTitle: 'Domande Frequenti',
|
|
81
|
+
faq: faqData,
|
|
82
|
+
bibliographyTitle: 'Bibliografia',
|
|
83
|
+
bibliography: [
|
|
84
|
+
{ name: 'ARERA — Portale Offerte', url: 'https://www.arera.it' },
|
|
85
|
+
],
|
|
86
|
+
howTo: howToData,
|
|
87
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
88
|
+
seo: [
|
|
89
|
+
{
|
|
90
|
+
type: 'title',
|
|
91
|
+
text: 'Risparmiare sulla bolletta elettrica',
|
|
92
|
+
level: 2,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
type: 'paragraph',
|
|
96
|
+
html: 'Scegliere la tariffa corretta può farti risparmiare centinaia di euro. Confronta le opzioni in base al tuo profilo di consumo.',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
type: 'summary',
|
|
100
|
+
title: 'Chiavi per decidere',
|
|
101
|
+
items: [
|
|
102
|
+
'Il mercato tutelato conviene se i prezzi all\'ingrosso scendono.',
|
|
103
|
+
'Il prezzo fisso ti protegge dai rincari improvvisi.',
|
|
104
|
+
'Ridurre la potenza può abbassare i costi fissi.',
|
|
105
|
+
],
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
ui: {
|
|
109
|
+
labelConsumption: 'Consumo Annuo',
|
|
110
|
+
unitKwhYear: 'kWh/anno',
|
|
111
|
+
labelPower: 'Potenza Contrattuale',
|
|
112
|
+
unitKw: 'kW',
|
|
113
|
+
labelMarket: 'Mercato Tutelato',
|
|
114
|
+
labelFree: 'Mercato Libero (Fisso)',
|
|
115
|
+
labelAnnualEst: 'Stima costo annuo',
|
|
116
|
+
labelPowerTerm: 'Quota Potenza (Fisso)',
|
|
117
|
+
labelEnergyTerm: 'Quota Energia (Variabile)',
|
|
118
|
+
labelDashboard: 'Dashboard Energetico',
|
|
119
|
+
labelMaxPower: 'Picco di Potenza',
|
|
120
|
+
labelMaxPowerEst: 'Stima picco',
|
|
121
|
+
labelCo2: 'Impronta di CO₂',
|
|
122
|
+
labelCo2Est: 'Stima annuale',
|
|
123
|
+
labelSimulator: 'Simulatore di Scenari',
|
|
124
|
+
labelSolar: 'Autoconsumo Solare',
|
|
125
|
+
labelSolarDesc: 'Simula risparmio con pannelli (riduzione 30%)',
|
|
126
|
+
labelShift: 'Spostamento in F3',
|
|
127
|
+
labelShiftDesc: 'Consumo spostato in ore low-cost:',
|
|
128
|
+
badgeBetter: 'Opzione più economica',
|
|
129
|
+
badgeWorseYear: 'anno',
|
|
130
|
+
currencySign: '€',
|
|
131
|
+
monthLabels: 'Gen,Feb,Mar,Apr,Mag,Giu,Lug,Ago,Set,Ott,Nov,Dic',
|
|
132
|
+
},
|
|
133
|
+
};
|