@jjlmoya/utils-home 1.5.0 → 1.7.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 (103) hide show
  1. package/package.json +61 -60
  2. package/src/tests/i18n_coverage.test.ts +36 -0
  3. package/src/tests/schemas_fulfillment.test.ts +23 -0
  4. package/src/tests/slug_uniqueness.test.ts +81 -0
  5. package/src/tests/title_quality.test.ts +55 -0
  6. package/src/tool/dewPointCalculator/i18n/de.ts +178 -0
  7. package/src/tool/dewPointCalculator/i18n/en.ts +1 -1
  8. package/src/tool/dewPointCalculator/i18n/es.ts +1 -1
  9. package/src/tool/dewPointCalculator/i18n/fr.ts +1 -1
  10. package/src/tool/dewPointCalculator/i18n/id.ts +178 -0
  11. package/src/tool/dewPointCalculator/i18n/it.ts +178 -0
  12. package/src/tool/dewPointCalculator/i18n/ja.ts +178 -0
  13. package/src/tool/dewPointCalculator/i18n/ko.ts +178 -0
  14. package/src/tool/dewPointCalculator/i18n/nl.ts +178 -0
  15. package/src/tool/dewPointCalculator/i18n/pl.ts +178 -0
  16. package/src/tool/dewPointCalculator/i18n/pt.ts +178 -0
  17. package/src/tool/dewPointCalculator/i18n/ru.ts +178 -0
  18. package/src/tool/dewPointCalculator/i18n/sv.ts +178 -0
  19. package/src/tool/dewPointCalculator/i18n/tr.ts +178 -0
  20. package/src/tool/dewPointCalculator/i18n/zh.ts +178 -0
  21. package/src/tool/dewPointCalculator/index.ts +16 -6
  22. package/src/tool/heatingComparator/i18n/de.ts +340 -0
  23. package/src/tool/heatingComparator/i18n/es.ts +1 -1
  24. package/src/tool/heatingComparator/i18n/id.ts +324 -0
  25. package/src/tool/heatingComparator/i18n/it.ts +336 -0
  26. package/src/tool/heatingComparator/i18n/ja.ts +311 -0
  27. package/src/tool/heatingComparator/i18n/ko.ts +307 -0
  28. package/src/tool/heatingComparator/i18n/nl.ts +336 -0
  29. package/src/tool/heatingComparator/i18n/pl.ts +311 -0
  30. package/src/tool/heatingComparator/i18n/pt.ts +336 -0
  31. package/src/tool/heatingComparator/i18n/ru.ts +307 -0
  32. package/src/tool/heatingComparator/i18n/sv.ts +311 -0
  33. package/src/tool/heatingComparator/i18n/tr.ts +324 -0
  34. package/src/tool/heatingComparator/i18n/zh.ts +307 -0
  35. package/src/tool/heatingComparator/index.ts +13 -1
  36. package/src/tool/ledSavingCalculator/i18n/de.ts +208 -0
  37. package/src/tool/ledSavingCalculator/i18n/fr.ts +1 -1
  38. package/src/tool/ledSavingCalculator/i18n/id.ts +208 -0
  39. package/src/tool/ledSavingCalculator/i18n/it.ts +208 -0
  40. package/src/tool/ledSavingCalculator/i18n/ja.ts +208 -0
  41. package/src/tool/ledSavingCalculator/i18n/ko.ts +208 -0
  42. package/src/tool/ledSavingCalculator/i18n/nl.ts +208 -0
  43. package/src/tool/ledSavingCalculator/i18n/pl.ts +208 -0
  44. package/src/tool/ledSavingCalculator/i18n/pt.ts +208 -0
  45. package/src/tool/ledSavingCalculator/i18n/ru.ts +208 -0
  46. package/src/tool/ledSavingCalculator/i18n/sv.ts +208 -0
  47. package/src/tool/ledSavingCalculator/i18n/tr.ts +208 -0
  48. package/src/tool/ledSavingCalculator/i18n/zh.ts +208 -0
  49. package/src/tool/ledSavingCalculator/index.ts +16 -7
  50. package/src/tool/projectorCalculator/i18n/de.ts +180 -0
  51. package/src/tool/projectorCalculator/i18n/fr.ts +1 -1
  52. package/src/tool/projectorCalculator/i18n/id.ts +181 -0
  53. package/src/tool/projectorCalculator/i18n/it.ts +180 -0
  54. package/src/tool/projectorCalculator/i18n/ja.ts +180 -0
  55. package/src/tool/projectorCalculator/i18n/ko.ts +180 -0
  56. package/src/tool/projectorCalculator/i18n/nl.ts +180 -0
  57. package/src/tool/projectorCalculator/i18n/pl.ts +180 -0
  58. package/src/tool/projectorCalculator/i18n/pt.ts +180 -0
  59. package/src/tool/projectorCalculator/i18n/ru.ts +180 -0
  60. package/src/tool/projectorCalculator/i18n/sv.ts +180 -0
  61. package/src/tool/projectorCalculator/i18n/tr.ts +180 -0
  62. package/src/tool/projectorCalculator/i18n/zh.ts +180 -0
  63. package/src/tool/projectorCalculator/index.ts +15 -6
  64. package/src/tool/qrGenerator/i18n/de.ts +203 -0
  65. package/src/tool/qrGenerator/i18n/id.ts +151 -0
  66. package/src/tool/qrGenerator/i18n/it.ts +174 -0
  67. package/src/tool/qrGenerator/i18n/ja.ts +151 -0
  68. package/src/tool/qrGenerator/i18n/ko.ts +151 -0
  69. package/src/tool/qrGenerator/i18n/nl.ts +151 -0
  70. package/src/tool/qrGenerator/i18n/pl.ts +151 -0
  71. package/src/tool/qrGenerator/i18n/pt.ts +151 -0
  72. package/src/tool/qrGenerator/i18n/ru.ts +151 -0
  73. package/src/tool/qrGenerator/i18n/sv.ts +151 -0
  74. package/src/tool/qrGenerator/i18n/tr.ts +151 -0
  75. package/src/tool/qrGenerator/i18n/zh.ts +151 -0
  76. package/src/tool/qrGenerator/index.ts +17 -9
  77. package/src/tool/solarCalculator/i18n/de.ts +146 -0
  78. package/src/tool/solarCalculator/i18n/id.ts +126 -0
  79. package/src/tool/solarCalculator/i18n/it.ts +126 -0
  80. package/src/tool/solarCalculator/i18n/ja.ts +126 -0
  81. package/src/tool/solarCalculator/i18n/ko.ts +121 -0
  82. package/src/tool/solarCalculator/i18n/nl.ts +120 -0
  83. package/src/tool/solarCalculator/i18n/pl.ts +121 -0
  84. package/src/tool/solarCalculator/i18n/pt.ts +126 -0
  85. package/src/tool/solarCalculator/i18n/ru.ts +110 -0
  86. package/src/tool/solarCalculator/i18n/sv.ts +110 -0
  87. package/src/tool/solarCalculator/i18n/tr.ts +120 -0
  88. package/src/tool/solarCalculator/i18n/zh.ts +121 -0
  89. package/src/tool/solarCalculator/index.ts +17 -9
  90. package/src/tool/tariffComparator/i18n/de.ts +133 -0
  91. package/src/tool/tariffComparator/i18n/id.ts +133 -0
  92. package/src/tool/tariffComparator/i18n/it.ts +133 -0
  93. package/src/tool/tariffComparator/i18n/ja.ts +133 -0
  94. package/src/tool/tariffComparator/i18n/ko.ts +133 -0
  95. package/src/tool/tariffComparator/i18n/nl.ts +133 -0
  96. package/src/tool/tariffComparator/i18n/pl.ts +133 -0
  97. package/src/tool/tariffComparator/i18n/pt.ts +133 -0
  98. package/src/tool/tariffComparator/i18n/ru.ts +106 -0
  99. package/src/tool/tariffComparator/i18n/sv.ts +111 -0
  100. package/src/tool/tariffComparator/i18n/tr.ts +133 -0
  101. package/src/tool/tariffComparator/i18n/zh.ts +133 -0
  102. package/src/tool/tariffComparator/index.ts +16 -7
  103. 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 = 'zonnepanelen-hellingshoek-calculator';
6
+ const title = 'Zonnepanelen Hellingshoek Calculator';
7
+ const description =
8
+ 'Bereken de optimale hellingshoek voor uw zonnepanelen op basis van uw breedtegraad. Voor vaste installaties en seizoensgebonden aanpassingen.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Wat als mijn dak niet de perfecte hoek heeft?',
13
+ answer:
14
+ 'Dat is geen groot probleem. Het verlies bij afwijkingen van 5-10° is minder dan 3% van de jaarlijkse opbrengst. Het voorkomen van schaduw is belangrijker.',
15
+ },
16
+ {
17
+ question: 'Is de hoek overal ter wereld hetzelfde?',
18
+ answer:
19
+ 'Nee, dit hangt af van de breedtegraad. In Amsterdam (~52°N) is de ideale hoek anders dan in Madrid (~40°N).',
20
+ },
21
+ {
22
+ question: 'Welke kant moeten de panelen op staan?',
23
+ answer:
24
+ 'Op het noordelijk halfrond altijd naar het zuiden. Op het zuidelijk halfrond naar het noorden.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ {
30
+ name: 'Voer breedtegraad in',
31
+ text: 'Voer uw breedtegraad in of gebruik de locatieknop.',
32
+ },
33
+ {
34
+ name: 'Check de optimale hoek',
35
+ text: 'De jaarlijkse hoek is het belangrijkste voor vaste systemen.',
36
+ },
37
+ {
38
+ name: 'Seizoensaanpassing (optioneel)',
39
+ text: 'Gebruik de winter- en zomerhoeken voor extra rendement bij verstelbare systemen.',
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: 'nl',
74
+ };
75
+
76
+ export const content: ToolLocaleContent<SolarCalculatorUI> = {
77
+ slug,
78
+ title,
79
+ description,
80
+ faqTitle: 'Veelgestelde Vragen',
81
+ faq: faqData,
82
+ bibliographyTitle: 'Referenties',
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: 'De Wetenschap van de Zonnehoek',
92
+ level: 2,
93
+ },
94
+ {
95
+ type: 'paragraph',
96
+ html: 'De juiste hoek bepaalt hoeveel energie u echt opvraagt. Hoe meer loodrecht de zon op de panelen staat, hoe hoger de opbrengst.',
97
+ },
98
+ {
99
+ type: 'summary',
100
+ title: 'Tips voor een efficiënte installatie',
101
+ items: [
102
+ 'Jaarlijkse hoek is de basis.',
103
+ 'Kleine afwijkingen zijn niet erg.',
104
+ 'Schaduw is de grootste vijand.',
105
+ 'Richt op het zuiden op het noordelijk halfrond.',
106
+ ],
107
+ },
108
+ ],
109
+ ui: {
110
+ labelLatitude: 'Breedtegraad',
111
+ btnLocate: 'Vind mijn locatie',
112
+ labelOptimal: 'Optimale Jaarlijkse Hoek',
113
+ labelEfficiency: 'Maximale Efficiëntie',
114
+ labelWinter: 'Winter',
115
+ labelSummer: 'Zomer',
116
+ hemisphereNorth: 'Noordelijk Halfrond — Richt op ZUIDEN',
117
+ hemisphereSouth: 'Zuidelijk Halfrond — Richt op NOORDEN',
118
+ geoNotAvailable: 'Locatiebepaling niet beschikbaar.',
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 = 'kalkulator-paneli-slonecznych';
6
+ const title = 'Kalkulator Nachylenia Paneli Słonecznych';
7
+ const description =
8
+ 'Oblicz optymalny kąt nachylenia paneli słonecznych na podstawie Twojej szerokości geograficznej. Wyniki dla instalacji stałych i okresowych.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Co jeśli mój dach nie ma idealnego nachylenia?',
13
+ answer:
14
+ 'To nie problem. Straty przy odchyleniu o 5-10° są mniejsze niż 3% produkcji rocznej. Ważniejsze jest unikanie cienia niż walka o każdy stopień kąta.',
15
+ },
16
+ {
17
+ question: 'Czy optymalny kąt jest taki sam na całym świecie?',
18
+ answer:
19
+ 'Nie. Zależy od szerokości geograficznej. W Polsce (~52°N) kąt jest inny niż w Hiszpanii (~40°N) czy Australii.',
20
+ },
21
+ {
22
+ question: 'W którą stronę powinny patrzeć panele?',
23
+ answer:
24
+ 'Na półkuli północnej zawsze na południe (azymut 180°). Na południowej — na północ.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ {
30
+ name: 'Wpisz szerokość geograficzną',
31
+ text: 'Podaj szerokość w stopniach lub użyj przycisku auto-lokalizacji.',
32
+ },
33
+ {
34
+ name: 'Sprawdź kąt optymalny',
35
+ text: 'Kąt roczny to podstawa dla instalacji montowanych na stałe.',
36
+ },
37
+ {
38
+ name: 'Regulacja sezonowa (opcjonalnie)',
39
+ text: 'Jeśli masz regulowany stelaż, użyj kątów zimowych i letnich dla max. zysków.',
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: 'PLN' },
73
+ inLanguage: 'pl',
74
+ };
75
+
76
+ export const content: ToolLocaleContent<SolarCalculatorUI> = {
77
+ slug,
78
+ title,
79
+ description,
80
+ faqTitle: 'Często Zadawane Pytania',
81
+ faq: faqData,
82
+ bibliographyTitle: 'Bibliografia',
83
+ bibliography: [
84
+ { name: 'PVGIS — Europejskie narzędzie solarne', url: 'https://re.jrc.ec.europa.eu/pvgis/' },
85
+ { name: 'PVWatts Calculator', url: 'https://pvwatts.nrel.gov/' },
86
+ ],
87
+ howTo: howToData,
88
+ schemas: [faqSchema, howToSchema, appSchema],
89
+ seo: [
90
+ {
91
+ type: 'title',
92
+ text: 'Nauka o Nachyleniu Słonecznym',
93
+ level: 2,
94
+ },
95
+ {
96
+ type: 'paragraph',
97
+ html: 'Efektywność paneli zależy od tego, jak prostopadle padają na nie promienie słońca. Poznaj geometrię słońca dla swojej lokalizacji.',
98
+ },
99
+ {
100
+ type: 'summary',
101
+ title: 'Klucze do wydajnej instalacji',
102
+ items: [
103
+ 'Kąt roczny to główny punkt odniesienia.',
104
+ 'Małe odchylenia ±5° nie psują produkcji.',
105
+ 'Unikanie cienia jest absolutnie priorytetowe.',
106
+ 'Orientacja na Południe (półkula płn.).',
107
+ ],
108
+ },
109
+ ],
110
+ ui: {
111
+ labelLatitude: 'Szerokość Geograficzna',
112
+ btnLocate: 'Wykryj moją lokalizację',
113
+ labelOptimal: 'Kąt Optymalny Roczny',
114
+ labelEfficiency: 'Maks. Efektywność',
115
+ labelWinter: 'Zima',
116
+ labelSummer: 'Lato',
117
+ hemisphereNorth: 'Półkula Północna — Kieruj na POŁUDNIE',
118
+ hemisphereSouth: 'Półkula Południowa — Kieruj na PÓŁNOC',
119
+ geoNotAvailable: 'Lokalizacja niedostępna w tej przeglądarce.',
120
+ },
121
+ };
@@ -0,0 +1,126 @@
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 = 'calculadora-inclinacao-paineis';
6
+ const title = 'Calculadora de Inclinação de Painéis Solares';
7
+ const description =
8
+ 'Calcule o ângulo de inclinação ideal para os seus painéis solares com base na sua latitude. Obtenha valores para instalações fixas e ajustes sazonais.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'O que acontece se o meu telhado não tiver a inclinação perfeita?',
13
+ answer:
14
+ 'Não é um problema grave. As perdas por pequenos desvios (5-10°) são inferiores a 3% da produção anual. É mais importante evitar sombras do que obcecar-se com o ângulo exato.',
15
+ },
16
+ {
17
+ question: 'O ângulo ideal é o mesmo em todo o mundo?',
18
+ answer:
19
+ 'Não. Depende diretamente da sua latitude. Em Lisboa (~38°N) o ângulo ideal é diferente de alguém em Luanda (~8°S).',
20
+ },
21
+ {
22
+ question: 'Para onde devem olhar os painéis?',
23
+ answer:
24
+ 'No Hemisfério Norte, sempre para Sul (azimute 180°). No Hemisfério Sul, para Norte.',
25
+ },
26
+ {
27
+ question: 'Serve também para coletores de água quente solar?',
28
+ answer:
29
+ 'Sim. As fórmulas de inclinação são as mesmas para coletores térmicos e fotovoltaicos.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Introduza a latitude',
36
+ text: 'Escreva a latitude em graus decimais ou use o botão para detetar automaticamente.',
37
+ },
38
+ {
39
+ name: 'Consulte o ângulo ideal',
40
+ text: 'O ângulo ideal anual é a referência principal para instalações fixas.',
41
+ },
42
+ {
43
+ name: 'Ajuste por estação (opcional)',
44
+ text: 'Se tiver suporte regulável, use os ângulos de inverno e verão para maximizar os ganhos.',
45
+ },
46
+ ];
47
+
48
+ const faqSchema: WithContext<FAQPage> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'FAQPage',
51
+ mainEntity: faqData.map((item) => ({
52
+ '@type': 'Question',
53
+ name: item.question,
54
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
55
+ })),
56
+ };
57
+
58
+ const howToSchema: WithContext<HowTo> = {
59
+ '@context': 'https://schema.org',
60
+ '@type': 'HowTo',
61
+ name: title,
62
+ description,
63
+ step: howToData.map((step) => ({
64
+ '@type': 'HowToStep',
65
+ name: step.name,
66
+ text: step.text,
67
+ })),
68
+ };
69
+
70
+ const appSchema: WithContext<SoftwareApplication> = {
71
+ '@context': 'https://schema.org',
72
+ '@type': 'SoftwareApplication',
73
+ name: title,
74
+ description,
75
+ applicationCategory: 'UtilityApplication',
76
+ operatingSystem: 'All',
77
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
78
+ inLanguage: 'pt',
79
+ };
80
+
81
+ export const content: ToolLocaleContent<SolarCalculatorUI> = {
82
+ slug,
83
+ title,
84
+ description,
85
+ faqTitle: 'Perguntas Frequentes',
86
+ faq: faqData,
87
+ bibliographyTitle: 'Bibliografia',
88
+ bibliography: [
89
+ { name: 'PVGIS Tool', url: 'https://re.jrc.ec.europa.eu/pvgis/' },
90
+ { name: 'PVWatts Calculator', url: 'https://pvwatts.nrel.gov/' },
91
+ ],
92
+ howTo: howToData,
93
+ schemas: [faqSchema, howToSchema, appSchema],
94
+ seo: [
95
+ {
96
+ type: 'title',
97
+ text: 'A Ciência da Inclinação Solar',
98
+ level: 2,
99
+ },
100
+ {
101
+ type: 'paragraph',
102
+ html: 'A orientação e o ângulo dos painéis determinam o retorno do investimento. Um painel deve estar o mais perpendicular possível aos raios solares.',
103
+ },
104
+ {
105
+ type: 'summary',
106
+ title: 'Chaves para uma instalação eficiente',
107
+ items: [
108
+ 'O ângulo anual é o valor de referência.',
109
+ 'Pequenos desvios têm pouco impacto na produção.',
110
+ 'Evitar sombras é prioritário.',
111
+ 'Orientar a Sul no Hemisfério Norte.',
112
+ ],
113
+ },
114
+ ],
115
+ ui: {
116
+ labelLatitude: 'Latitude Geográfica',
117
+ btnLocate: 'Detetar localização',
118
+ labelOptimal: 'Ângulo Ideal Anual',
119
+ labelEfficiency: 'Eficiência Máxima',
120
+ labelWinter: 'Inverno',
121
+ labelSummer: 'Verão',
122
+ hemisphereNorth: 'Hemisfério Norte — Orientar a SUL',
123
+ hemisphereSouth: 'Hemisfério Sul — Orientar a NORTE',
124
+ geoNotAvailable: 'Geolocalização não disponível.',
125
+ },
126
+ };
@@ -0,0 +1,110 @@
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 = 'solnechnyj-kalkulyator';
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
+ 'В Северном полушарии — всегда на Юг (азимут 180°). В Южном полушарии — на Север.',
20
+ },
21
+ ];
22
+
23
+ const howToData = [
24
+ {
25
+ name: 'Введите широту',
26
+ text: 'Укажите широту вашего местоположения или используйте кнопку автоопределения.',
27
+ },
28
+ {
29
+ name: 'Проверьте угол',
30
+ text: 'Оптимальный годовой угол — основное значение для фиксированных установок.',
31
+ },
32
+ ];
33
+
34
+ const faqSchema: WithContext<FAQPage> = {
35
+ '@context': 'https://schema.org',
36
+ '@type': 'FAQPage',
37
+ mainEntity: faqData.map((item) => ({
38
+ '@type': 'Question',
39
+ name: item.question,
40
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
41
+ })),
42
+ };
43
+
44
+ const howToSchema: WithContext<HowTo> = {
45
+ '@context': 'https://schema.org',
46
+ '@type': 'HowTo',
47
+ name: title,
48
+ description,
49
+ step: howToData.map((step) => ({
50
+ '@type': 'HowToStep',
51
+ name: step.name,
52
+ text: step.text,
53
+ })),
54
+ };
55
+
56
+ const appSchema: WithContext<SoftwareApplication> = {
57
+ '@context': 'https://schema.org',
58
+ '@type': 'SoftwareApplication',
59
+ name: title,
60
+ description,
61
+ applicationCategory: 'UtilityApplication',
62
+ operatingSystem: 'All',
63
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'RUB' },
64
+ inLanguage: 'ru',
65
+ };
66
+
67
+ export const content: ToolLocaleContent<SolarCalculatorUI> = {
68
+ slug,
69
+ title,
70
+ description,
71
+ faqTitle: 'Часто задаваемые вопросы',
72
+ faq: faqData,
73
+ bibliographyTitle: 'Библиография',
74
+ bibliography: [
75
+ { name: 'PVGIS Tool — European Commission', url: 'https://re.jrc.ec.europa.eu/pvgis/' },
76
+ ],
77
+ howTo: howToData,
78
+ schemas: [faqSchema, howToSchema, appSchema],
79
+ seo: [
80
+ {
81
+ type: 'title',
82
+ text: 'Наука солнечного наклона',
83
+ level: 2,
84
+ },
85
+ {
86
+ type: 'paragraph',
87
+ html: 'Эффективность панелей напрямую зависит от угла падения солнечных лучей.',
88
+ },
89
+ {
90
+ type: 'summary',
91
+ title: 'Ключи к эффективной установке',
92
+ items: [
93
+ 'Годовой оптимальный угол — главный ориентир.',
94
+ 'Избегайте теней любой ценой.',
95
+ 'Ориентация на Юг в северных широтах.',
96
+ ],
97
+ },
98
+ ],
99
+ ui: {
100
+ labelLatitude: 'Географическая широта',
101
+ btnLocate: 'Определить мое местоположение',
102
+ labelOptimal: 'Оптимальный годовой угол',
103
+ labelEfficiency: 'Макс. эффективность',
104
+ labelWinter: 'Зима',
105
+ labelSummer: 'Лето',
106
+ hemisphereNorth: 'Северное полушарие — Ориентир на ЮГ',
107
+ hemisphereSouth: 'Южное полушарие — Ориентир на СЕВЕР',
108
+ geoNotAvailable: 'Геолокация недоступна в этом браузере.',
109
+ },
110
+ };
@@ -0,0 +1,110 @@
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 = 'solkalkylator';
6
+ const title = 'Lutningskalkylator för Solpaneler';
7
+ const description =
8
+ 'Beräkna optimal lutningsvinkel för dina solpaneler baserat på din geografiska breddgrad.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Vad händer om mitt tak inte har perfekt lutning?',
13
+ answer:
14
+ 'Det är inte ett stort problem. Förluster vid avvikelser på 5-10° är mindre än 3% av årsproduktionen. Det är viktigare att undvika skugga.',
15
+ },
16
+ {
17
+ question: 'Vilket håll ska panelerna vara vända mot?',
18
+ answer:
19
+ 'På norra halvklotet, alltid mot söder (azimut 180°). På södra halvklotet, mot norr.',
20
+ },
21
+ ];
22
+
23
+ const howToData = [
24
+ {
25
+ name: 'Ange breddgrad',
26
+ text: 'Skriv in din breddgrad eller använd knappen för att hitta din plats.',
27
+ },
28
+ {
29
+ name: 'Se optimal vinkel',
30
+ text: 'Den årliga optimala vinkeln är huvudreferensen för fasta installationer.',
31
+ },
32
+ ];
33
+
34
+ const faqSchema: WithContext<FAQPage> = {
35
+ '@context': 'https://schema.org',
36
+ '@type': 'FAQPage',
37
+ mainEntity: faqData.map((item) => ({
38
+ '@type': 'Question',
39
+ name: item.question,
40
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
41
+ })),
42
+ };
43
+
44
+ const howToSchema: WithContext<HowTo> = {
45
+ '@context': 'https://schema.org',
46
+ '@type': 'HowTo',
47
+ name: title,
48
+ description,
49
+ step: howToData.map((step) => ({
50
+ '@type': 'HowToStep',
51
+ name: step.name,
52
+ text: step.text,
53
+ })),
54
+ };
55
+
56
+ const appSchema: WithContext<SoftwareApplication> = {
57
+ '@context': 'https://schema.org',
58
+ '@type': 'SoftwareApplication',
59
+ name: title,
60
+ description,
61
+ applicationCategory: 'UtilityApplication',
62
+ operatingSystem: 'All',
63
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'SEK' },
64
+ inLanguage: 'sv',
65
+ };
66
+
67
+ export const content: ToolLocaleContent<SolarCalculatorUI> = {
68
+ slug,
69
+ title,
70
+ description,
71
+ faqTitle: 'Vanliga Frågor',
72
+ faq: faqData,
73
+ bibliographyTitle: 'Referenser',
74
+ bibliography: [
75
+ { name: 'PVGIS Tool', url: 'https://re.jrc.ec.europa.eu/pvgis/' },
76
+ ],
77
+ howTo: howToData,
78
+ schemas: [faqSchema, howToSchema, appSchema],
79
+ seo: [
80
+ {
81
+ type: 'title',
82
+ text: 'Vetenskapen bakom Sollutning',
83
+ level: 2,
84
+ },
85
+ {
86
+ type: 'paragraph',
87
+ html: 'Panelernas effektivitet beror på hur vinkelrätt solens strålar träffar dem.',
88
+ },
89
+ {
90
+ type: 'summary',
91
+ title: 'Nycklar till en effektiv installation',
92
+ items: [
93
+ 'Årlig optimal vinkel är din referens.',
94
+ 'Undvik skugga till varje pris.',
95
+ 'Riktning mot Söder på norra halvklotet.',
96
+ ],
97
+ },
98
+ ],
99
+ ui: {
100
+ labelLatitude: 'Geografisk Breddgrad',
101
+ btnLocate: 'Hitta min plats',
102
+ labelOptimal: 'Optimal Årlig Vinkel',
103
+ labelEfficiency: 'Maximal Effektivitet',
104
+ labelWinter: 'Vinter',
105
+ labelSummer: 'Sommar',
106
+ hemisphereNorth: 'Norra Halvklotet — Rikta mot SÖDER',
107
+ hemisphereSouth: 'Södra Halvklotet — Rikta mot NORR',
108
+ geoNotAvailable: 'Positionering är inte tillgänglig i denna webbläsare.',
109
+ },
110
+ };