@jjlmoya/utils-home 1.17.0 → 1.23.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 +1 -1
- package/src/category/i18n/de.ts +10 -10
- package/src/category/i18n/en.ts +8 -8
- package/src/category/i18n/es.ts +2 -2
- package/src/category/i18n/fr.ts +15 -15
- package/src/category/i18n/id.ts +8 -8
- package/src/category/i18n/it.ts +7 -7
- package/src/category/i18n/nl.ts +8 -8
- package/src/category/i18n/pl.ts +10 -10
- package/src/category/i18n/pt.ts +8 -8
- package/src/category/i18n/ru.ts +10 -10
- package/src/category/i18n/sv.ts +8 -8
- package/src/category/i18n/tr.ts +4 -4
- package/src/category/i18n/zh.ts +8 -8
- package/src/entries.ts +4 -1
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/no_en_dash.test.ts +70 -0
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/dewPointCalculator/bibliography.ts +2 -2
- package/src/tool/dewPointCalculator/i18n/de.ts +5 -5
- package/src/tool/dewPointCalculator/i18n/en.ts +6 -6
- package/src/tool/dewPointCalculator/i18n/es.ts +5 -5
- package/src/tool/dewPointCalculator/i18n/fr.ts +6 -6
- package/src/tool/dewPointCalculator/i18n/id.ts +5 -5
- package/src/tool/dewPointCalculator/i18n/it.ts +5 -5
- package/src/tool/dewPointCalculator/i18n/ja.ts +4 -4
- package/src/tool/dewPointCalculator/i18n/ko.ts +4 -4
- package/src/tool/dewPointCalculator/i18n/nl.ts +5 -5
- package/src/tool/dewPointCalculator/i18n/pl.ts +5 -5
- package/src/tool/dewPointCalculator/i18n/pt.ts +5 -5
- package/src/tool/dewPointCalculator/i18n/ru.ts +11 -11
- package/src/tool/dewPointCalculator/i18n/sv.ts +5 -5
- package/src/tool/dewPointCalculator/i18n/tr.ts +4 -4
- package/src/tool/dewPointCalculator/i18n/zh.ts +5 -5
- package/src/tool/heatingComparator/i18n/de.ts +8 -8
- package/src/tool/heatingComparator/i18n/en.ts +1 -1
- package/src/tool/heatingComparator/i18n/es.ts +1 -1
- package/src/tool/heatingComparator/i18n/fr.ts +7 -7
- package/src/tool/heatingComparator/i18n/id.ts +1 -1
- package/src/tool/heatingComparator/i18n/it.ts +1 -1
- package/src/tool/heatingComparator/i18n/nl.ts +1 -1
- package/src/tool/heatingComparator/i18n/pl.ts +1 -1
- package/src/tool/heatingComparator/i18n/pt.ts +1 -1
- package/src/tool/heatingComparator/i18n/ru.ts +12 -12
- package/src/tool/heatingComparator/i18n/sv.ts +4 -4
- package/src/tool/heatingComparator/i18n/zh.ts +6 -6
- package/src/tool/ledSavingCalculator/bibliography.ts +3 -3
- package/src/tool/ledSavingCalculator/i18n/de.ts +4 -4
- package/src/tool/ledSavingCalculator/i18n/en.ts +4 -4
- package/src/tool/ledSavingCalculator/i18n/es.ts +4 -4
- package/src/tool/ledSavingCalculator/i18n/fr.ts +8 -8
- package/src/tool/ledSavingCalculator/i18n/id.ts +3 -3
- package/src/tool/ledSavingCalculator/i18n/it.ts +4 -4
- package/src/tool/ledSavingCalculator/i18n/ja.ts +3 -3
- package/src/tool/ledSavingCalculator/i18n/ko.ts +2 -2
- package/src/tool/ledSavingCalculator/i18n/nl.ts +3 -3
- package/src/tool/ledSavingCalculator/i18n/pl.ts +3 -3
- package/src/tool/ledSavingCalculator/i18n/pt.ts +3 -3
- package/src/tool/ledSavingCalculator/i18n/ru.ts +6 -6
- package/src/tool/ledSavingCalculator/i18n/sv.ts +3 -3
- package/src/tool/ledSavingCalculator/i18n/tr.ts +3 -3
- package/src/tool/ledSavingCalculator/i18n/zh.ts +4 -4
- package/src/tool/projectorCalculator/bibliography.ts +3 -3
- package/src/tool/projectorCalculator/i18n/de.ts +2 -2
- package/src/tool/projectorCalculator/i18n/en.ts +1 -1
- package/src/tool/projectorCalculator/i18n/es.ts +2 -2
- package/src/tool/projectorCalculator/i18n/fr.ts +4 -4
- package/src/tool/projectorCalculator/i18n/id.ts +2 -2
- package/src/tool/projectorCalculator/i18n/it.ts +2 -2
- package/src/tool/projectorCalculator/i18n/ja.ts +2 -2
- package/src/tool/projectorCalculator/i18n/ko.ts +2 -2
- package/src/tool/projectorCalculator/i18n/nl.ts +2 -2
- package/src/tool/projectorCalculator/i18n/pl.ts +3 -3
- package/src/tool/projectorCalculator/i18n/pt.ts +2 -2
- package/src/tool/projectorCalculator/i18n/ru.ts +5 -5
- package/src/tool/projectorCalculator/i18n/sv.ts +2 -2
- package/src/tool/projectorCalculator/i18n/tr.ts +2 -2
- package/src/tool/projectorCalculator/i18n/zh.ts +4 -4
- package/src/tool/qrGenerator/bibliography.ts +1 -1
- package/src/tool/qrGenerator/i18n/en.ts +1 -1
- package/src/tool/qrGenerator/i18n/fr.ts +1 -1
- package/src/tool/solarCalculator/bibliography.ts +2 -2
- package/src/tool/solarCalculator/i18n/de.ts +2 -2
- package/src/tool/solarCalculator/i18n/en.ts +5 -5
- package/src/tool/solarCalculator/i18n/es.ts +3 -3
- package/src/tool/solarCalculator/i18n/fr.ts +6 -6
- package/src/tool/solarCalculator/i18n/id.ts +2 -2
- package/src/tool/solarCalculator/i18n/it.ts +2 -2
- package/src/tool/solarCalculator/i18n/ja.ts +2 -2
- package/src/tool/solarCalculator/i18n/ko.ts +2 -2
- package/src/tool/solarCalculator/i18n/nl.ts +2 -2
- package/src/tool/solarCalculator/i18n/pl.ts +3 -3
- package/src/tool/solarCalculator/i18n/pt.ts +2 -2
- package/src/tool/solarCalculator/i18n/ru.ts +5 -5
- package/src/tool/solarCalculator/i18n/sv.ts +2 -2
- package/src/tool/solarCalculator/i18n/tr.ts +2 -2
- package/src/tool/solarCalculator/i18n/zh.ts +3 -3
- package/src/tool/tariffComparator/bibliography.ts +1 -1
- package/src/tool/tariffComparator/i18n/en.ts +3 -3
- package/src/tool/tariffComparator/i18n/es.ts +3 -3
- package/src/tool/tariffComparator/i18n/fr.ts +6 -6
- package/src/tool/tariffComparator/i18n/pl.ts +1 -1
- package/src/tool/tariffComparator/i18n/zh.ts +1 -1
- package/src/tool/wifiRangeSimulator/bibliography.astro +14 -0
- package/src/tool/wifiRangeSimulator/bibliography.ts +14 -0
- package/src/tool/wifiRangeSimulator/component.astro +170 -0
- package/src/tool/wifiRangeSimulator/entry.ts +29 -0
- package/src/tool/wifiRangeSimulator/i18n/de.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/en.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/es.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/fr.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/id.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/it.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/ja.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/ko.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/nl.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/pl.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/pt.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/ru.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/sv.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/tr.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/zh.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n-utils.ts +14 -0
- package/src/tool/wifiRangeSimulator/index.ts +8 -0
- package/src/tool/wifiRangeSimulator/logic.ts +220 -0
- package/src/tool/wifiRangeSimulator/seo.astro +15 -0
- package/src/tool/wifiRangeSimulator/sketch-actions.ts +168 -0
- package/src/tool/wifiRangeSimulator/sketch-events.ts +138 -0
- package/src/tool/wifiRangeSimulator/sketch-render-dash.ts +170 -0
- package/src/tool/wifiRangeSimulator/sketch-render-device.ts +42 -0
- package/src/tool/wifiRangeSimulator/sketch-render.ts +155 -0
- package/src/tool/wifiRangeSimulator/sketch-state.ts +186 -0
- package/src/tool/wifiRangeSimulator/sketch.ts +100 -0
- package/src/tool/wifiRangeSimulator/ui.ts +69 -0
- package/src/tool/wifiRangeSimulator/wifi-range-simulator.css +583 -0
- package/src/tools.ts +2 -0
package/src/category/i18n/pt.ts
CHANGED
|
@@ -16,7 +16,7 @@ export const content: CategoryLocaleContent = {
|
|
|
16
16
|
},
|
|
17
17
|
{
|
|
18
18
|
type: 'paragraph',
|
|
19
|
-
html: 'Uma casa eficiente não é um luxo
|
|
19
|
+
html: 'Uma casa eficiente não é um luxo: é uma decisão técnica. A diferença entre um agregado familiar com uma fatura de eletricidade descontrolada e um com consumo monitorizado raramente reside no preço da tarifa: reside em saber exatamente quanto consome cada dispositivo, quando faz sentido autogerar energia e onde ocorrem as perdas.',
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
type: 'title',
|
|
@@ -25,7 +25,7 @@ export const content: CategoryLocaleContent = {
|
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
type: 'paragraph',
|
|
28
|
-
html: 'As instalações fotovoltaicas residenciais têm um retorno real do investimento que depende de três variáveis: a irradiação no seu local, o ângulo de inclinação dos painéis e o seu consumo horário. Um painel inclinado 10° abaixo do ideal pode perder <strong>15
|
|
28
|
+
html: 'As instalações fotovoltaicas residenciais têm um retorno real do investimento que depende de três variáveis: a irradiação no seu local, o ângulo de inclinação dos painéis e o seu consumo horário. Um painel inclinado 10° abaixo do ideal pode perder <strong>15-20% da produção anual</strong>. A nossa calculadora solar indica-lhe o ângulo exato e a estimativa de geração mensal.',
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
type: 'paragraph',
|
|
@@ -42,7 +42,7 @@ export const content: CategoryLocaleContent = {
|
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
44
|
type: 'paragraph',
|
|
45
|
-
html: 'Escolher a tarifa de eletricidade correta é igualmente importante. Os contratos de mercado com preço fixo podem ser vantajosos para consumidores com hábitos regulares; as tarifas indexadas flutuam com o mercado grossista e recompensam quem desloca o consumo para as horas de vazio. Comparar ambas as opções com os seus dados de consumo reais pode fazer uma diferença de <strong>100
|
|
45
|
+
html: 'Escolher a tarifa de eletricidade correta é igualmente importante. Os contratos de mercado com preço fixo podem ser vantajosos para consumidores com hábitos regulares; as tarifas indexadas flutuam com o mercado grossista e recompensam quem desloca o consumo para as horas de vazio. Comparar ambas as opções com os seus dados de consumo reais pode fazer uma diferença de <strong>100-300 € por ano</strong>.',
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
type: 'title',
|
|
@@ -51,7 +51,7 @@ export const content: CategoryLocaleContent = {
|
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
type: 'paragraph',
|
|
54
|
-
html: 'A humidade relativa sustentada acima de 70% leva à condensação em pontes térmicas, ao crescimento de bolor e à deterioração estrutural. A temperatura do ponto de orvalho
|
|
54
|
+
html: 'A humidade relativa sustentada acima de 70% leva à condensação em pontes térmicas, ao crescimento de bolor e à deterioração estrutural. A temperatura do ponto de orvalho: o valor no qual o vapor de água no ar condensa: é a métrica principal. Se a superfície da sua parede interior estiver abaixo desse ponto, a condensação formar-se-á independentemente de poder vê-la ou não.',
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
57
|
type: 'paragraph',
|
|
@@ -64,7 +64,7 @@ export const content: CategoryLocaleContent = {
|
|
|
64
64
|
},
|
|
65
65
|
{
|
|
66
66
|
type: 'paragraph',
|
|
67
|
-
html: 'Um projetor não se coloca "onde calhar". O rácio de projeção (throw ratio)
|
|
67
|
+
html: 'Um projetor não se coloca "onde calhar". O rácio de projeção (throw ratio): a relação entre a distância de projeção e a largura da imagem: determina exatamente quão atrás precisa de posicionar a unidade para alcançar o tamanho de ecrã desejado. Um erro de posicionamento de 50 cm pode significar uma imagem 20 cm mais pequena, ou forçar um zoom digital que reduz a resolução efetiva.',
|
|
68
68
|
},
|
|
69
69
|
{
|
|
70
70
|
type: 'paragraph',
|
|
@@ -77,12 +77,12 @@ export const content: CategoryLocaleContent = {
|
|
|
77
77
|
},
|
|
78
78
|
{
|
|
79
79
|
type: 'paragraph',
|
|
80
|
-
html: 'A casa moderna integra tecnologia em todos os níveis: redes Wi-Fi, dispositivos IoT, acesso baseado em códigos QR. O gerador de códigos QR permite-lhe criar atalhos para o seu Wi-Fi doméstico, cartões de contacto, URLs de dispositivos inteligentes ou qualquer informação que queira partilhar facilmente com convidados ou entre dispositivos
|
|
80
|
+
html: 'A casa moderna integra tecnologia em todos os níveis: redes Wi-Fi, dispositivos IoT, acesso baseado em códigos QR. O gerador de códigos QR permite-lhe criar atalhos para o seu Wi-Fi doméstico, cartões de contacto, URLs de dispositivos inteligentes ou qualquer informação que queira partilhar facilmente com convidados ou entre dispositivos: sem precisar de digitar.',
|
|
81
81
|
},
|
|
82
82
|
{
|
|
83
83
|
type: 'list',
|
|
84
84
|
items: [
|
|
85
|
-
'<strong>Poupança quantificável:</strong> Cada ferramenta devolve números concretos
|
|
85
|
+
'<strong>Poupança quantificável:</strong> Cada ferramenta devolve números concretos: euros poupados por ano, kWh gerados por mês, graus de inclinação ideais. Sem estimativas vagas.',
|
|
86
86
|
'<strong>Sem necessidade de instalação:</strong> Calculadoras online que correm diretamente no navegador, sem necessidade de aplicações ou contas.',
|
|
87
87
|
'<strong>Baseado em normas técnicas:</strong> Fórmulas psicrométricas (ASHRAE), ótica de projeção, radiação solar por latitude e regulamentos elétricos relevantes.',
|
|
88
88
|
'<strong>Útil antes de comprar:</strong> Valide decisões de compra antes de se comprometer. Os painéis solares compensam no seu telhado? Quanto é que os LEDs poupam realmente? Calcule primeiro.',
|
|
@@ -95,7 +95,7 @@ export const content: CategoryLocaleContent = {
|
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
97
|
type: 'paragraph',
|
|
98
|
-
html: 'As melhorias na eficiência energética doméstica têm um ROI concreto. Uma instalação fotovoltaica bem dimensionada pode pagar-se em 6
|
|
98
|
+
html: 'As melhorias na eficiência energética doméstica têm um ROI concreto. Uma instalação fotovoltaica bem dimensionada pode pagar-se em 6-9 anos com os preços atuais da eletricidade. Uma substituição total por LEDs numa casa média paga-se em menos de 2 anos. Uma tarifa bem escolhida poupa dinheiro desde o primeiro mês. O ponto de partida é sempre o mesmo: <strong>medir antes de agir</strong>.',
|
|
99
99
|
},
|
|
100
100
|
{
|
|
101
101
|
type: 'paragraph',
|
package/src/category/i18n/ru.ts
CHANGED
|
@@ -12,11 +12,11 @@ export const content: CategoryLocaleContent = {
|
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
14
|
type: 'paragraph',
|
|
15
|
-
html: 'Большинство решений в быту принимается интуитивно:
|
|
15
|
+
html: 'Большинство решений в быту принимается интуитивно: "Думаю, этих солнечных панелей хватит", "замена лампочек должна что-то сэкономить". На самом деле пятиминутный расчет может сэкономить вам сотни евро в год или уберечь от дорогостоящего ремонта. Наши инструменты основаны на <strong>реальной физике</strong>: солнечное излучение по широте, измеренная потребляемая мощность, психрометрия влажного воздуха, проекционная оптика.',
|
|
16
16
|
},
|
|
17
17
|
{
|
|
18
18
|
type: 'paragraph',
|
|
19
|
-
html: 'Эффективный
|
|
19
|
+
html: 'Эффективный дом: это не роскошь, а техническое решение. Разница между домохозяйством с бесконтрольно растущими счетами за электричество и домом с контролируемым потреблением редко заключается в цене тарифа: она в точном знании того, сколько потребляет каждое устройство, когда имеет смысл вырабатывать энергию самостоятельно и где происходят потери.',
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
type: 'title',
|
|
@@ -25,11 +25,11 @@ export const content: CategoryLocaleContent = {
|
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
type: 'paragraph',
|
|
28
|
-
html: 'Домашние фотоэлектрические установки имеют реальную окупаемость, которая зависит от трех переменных: уровня инсоляции в вашем регионе, угла наклона панелей и вашего почасового потребления. Панель, установленная под углом на 10° ниже оптимального, может терять <strong>15
|
|
28
|
+
html: 'Домашние фотоэлектрические установки имеют реальную окупаемость, которая зависит от трех переменных: уровня инсоляции в вашем регионе, угла наклона панелей и вашего почасового потребления. Панель, установленная под углом на 10° ниже оптимального, может терять <strong>15-20% годовой выработки</strong>. Наш солнечный калькулятор даст вам точный угол и оценку ежемесячной генерации.',
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
type: 'paragraph',
|
|
32
|
-
html: 'Оптимальная ориентация и наклон солнечной панели зависят от широты. В континентальной Европе идеальный угол варьируется от 30° до 40° в зависимости от сезона. Оптимизация под общую годовую
|
|
32
|
+
html: 'Оптимальная ориентация и наклон солнечной панели зависят от широты. В континентальной Европе идеальный угол варьируется от 30° до 40° в зависимости от сезона. Оптимизация под общую годовую выработку: это не то же самое, что оптимизация для зимних месяцев, когда спрос на электроэнергию максимален.',
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
type: 'title',
|
|
@@ -38,11 +38,11 @@ export const content: CategoryLocaleContent = {
|
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
40
|
type: 'paragraph',
|
|
41
|
-
html: 'Переход с галогенных ламп на светодиодные (LED)
|
|
41
|
+
html: 'Переход с галогенных ламп на светодиодные (LED): это не просто "использование меньшего количества ватт". Это понимание того, что светодиод мощностью 9 Вт заменяет 60-ваттную галогенную лампу, обеспечивая тот же световой поток (800 люмен), что дает <strong>сокращение потребления на 85%</strong>. Умножив это на годовое время работы и цену за кВт·ч, можно рассчитать экономию до копейки. Наш калькулятор делает именно это.',
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
44
|
type: 'paragraph',
|
|
45
|
-
html: 'Выбор правильного тарифа на электроэнергию не менее важен. Контракты с фиксированной ценой могут быть выгодны потребителям с регулярными привычками; индексируемые тарифы колеблются вместе с оптовым рынком и поощряют тех, кто переносит потребление на часы вне пиковой нагрузки. Сравнение обоих вариантов с вашими реальными данными о потреблении может дать разницу в <strong>100
|
|
45
|
+
html: 'Выбор правильного тарифа на электроэнергию не менее важен. Контракты с фиксированной ценой могут быть выгодны потребителям с регулярными привычками; индексируемые тарифы колеблются вместе с оптовым рынком и поощряют тех, кто переносит потребление на часы вне пиковой нагрузки. Сравнение обоих вариантов с вашими реальными данными о потреблении может дать разницу в <strong>100-300 € в год</strong>.',
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
type: 'title',
|
|
@@ -51,7 +51,7 @@ export const content: CategoryLocaleContent = {
|
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
type: 'paragraph',
|
|
54
|
-
html: 'Поддержание относительной влажности выше 70% приводит к конденсации на тепловых мостиках, росту плесени и разрушению конструкций. Температура точки
|
|
54
|
+
html: 'Поддержание относительной влажности выше 70% приводит к конденсации на тепловых мостиках, росту плесени и разрушению конструкций. Температура точки росы: значение, при котором водяной пар в воздухе конденсируется: является ключевым показателем. Если температура поверхности вашей внутренней стены ниже этой точки, конденсат будет образовываться независимо от того, видите вы его или нет.',
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
57
|
type: 'paragraph',
|
|
@@ -64,7 +64,7 @@ export const content: CategoryLocaleContent = {
|
|
|
64
64
|
},
|
|
65
65
|
{
|
|
66
66
|
type: 'paragraph',
|
|
67
|
-
html: 'Проектор не ставят
|
|
67
|
+
html: 'Проектор не ставят "куда получится". Проекционное отношение (throw ratio): зависимость между расстоянием до экрана и шириной изображения: точно определяет, насколько далеко нужно расположить устройство, чтобы получить желаемый размер экрана. Ошибка в установке на 50 см может привести к уменьшению изображения на 20 см или вынудить использовать цифровой зум, снижающий четкость.',
|
|
68
68
|
},
|
|
69
69
|
{
|
|
70
70
|
type: 'paragraph',
|
|
@@ -82,7 +82,7 @@ export const content: CategoryLocaleContent = {
|
|
|
82
82
|
{
|
|
83
83
|
type: 'list',
|
|
84
84
|
items: [
|
|
85
|
-
'<strong>Количественная экономия:</strong> Каждый инструмент возвращает конкретные
|
|
85
|
+
'<strong>Количественная экономия:</strong> Каждый инструмент возвращает конкретные цифры: сэкономленные евро в год, выработанные кВт·ч в месяц, оптимальные углы наклона. Никаких туманных оценок.',
|
|
86
86
|
'<strong>Не требует установки:</strong> Онлайн-калькуляторы, которые работают прямо в браузере, не нужны приложения или учетные записи.',
|
|
87
87
|
'<strong>Основано на технических стандартах:</strong> Психрометрические формулы (ASHRAE), проекционная оптика, солнечная радиация по широте и соответствующие электротехнические нормы.',
|
|
88
88
|
'<strong>Полезно перед покупкой:</strong> Проверяйте решения о покупке, прежде чем их принимать. Окупятся ли солнечные панели на вашей крыше? Сколько на самом деле экономят светодиоды? Сначала посчитайте.',
|
|
@@ -95,7 +95,7 @@ export const content: CategoryLocaleContent = {
|
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
97
|
type: 'paragraph',
|
|
98
|
-
html: 'Улучшения энергоэффективности дома имеют конкретный ROI (окупаемость). Правильно подобранная фотоэлектрическая установка может окупиться за 6
|
|
98
|
+
html: 'Улучшения энергоэффективности дома имеют конкретный ROI (окупаемость). Правильно подобранная фотоэлектрическая установка может окупиться за 6-9 лет при нынешних ценах на электроэнергию. Полная замена ламп на светодиодные в среднем доме окупается менее чем за 2 года. Грамотно выбранный тариф экономит деньги с первого месяца. Начальная точка всегда одна и та же: <strong>измеряйте, прежде чем действовать</strong>.',
|
|
99
99
|
},
|
|
100
100
|
{
|
|
101
101
|
type: 'paragraph',
|
package/src/category/i18n/sv.ts
CHANGED
|
@@ -16,7 +16,7 @@ export const content: CategoryLocaleContent = {
|
|
|
16
16
|
},
|
|
17
17
|
{
|
|
18
18
|
type: 'paragraph',
|
|
19
|
-
html: 'Ett effektivt hem är inte en lyx
|
|
19
|
+
html: 'Ett effektivt hem är inte en lyx: det är ett tekniskt beslut. Skillnaden mellan ett hushåll med en skenande elräkning och ett med kontrollerad förbrukning beror sällan på tariffpriset: det handlar om att veta exakt hur mycket varje enhet förbrukar, när det är vettigt att generera egen energi och var förlusterna uppstår.',
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
type: 'title',
|
|
@@ -25,7 +25,7 @@ export const content: CategoryLocaleContent = {
|
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
type: 'paragraph',
|
|
28
|
-
html: 'Fotovoltaiska installationer för bostäder har en verklig avkastning på investeringen som beror på tre variabler: instrålningen på din plats, panelernas lutningsvinkel och din förbrukning per timme. En panel som lutar 10° under det optimala kan förlora <strong>15
|
|
28
|
+
html: 'Fotovoltaiska installationer för bostäder har en verklig avkastning på investeringen som beror på tre variabler: instrålningen på din plats, panelernas lutningsvinkel och din förbrukning per timme. En panel som lutar 10° under det optimala kan förlora <strong>15-20 % av den årliga produktionen</strong>. Vår solkalkylator ger dig den exakta vinkeln och en uppskattning av den månatliga generationen.',
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
type: 'paragraph',
|
|
@@ -42,7 +42,7 @@ export const content: CategoryLocaleContent = {
|
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
44
|
type: 'paragraph',
|
|
45
|
-
html: 'Att välja rätt eltariff är lika viktigt. Fastprisavtal kan vara fördelaktiga för konsumenter med regelbundna vanor; rörliga tariffer fluktuerar med grossistmarknaden och belönar dem som flyttar sin förbrukning till lågtidstimmar. Att jämföra båda alternativen med dina faktiska förbrukningsdata kan göra en skillnad på <strong>100
|
|
45
|
+
html: 'Att välja rätt eltariff är lika viktigt. Fastprisavtal kan vara fördelaktiga för konsumenter med regelbundna vanor; rörliga tariffer fluktuerar med grossistmarknaden och belönar dem som flyttar sin förbrukning till lågtidstimmar. Att jämföra båda alternativen med dina faktiska förbrukningsdata kan göra en skillnad på <strong>100-300 € per år</strong>.',
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
type: 'title',
|
|
@@ -51,7 +51,7 @@ export const content: CategoryLocaleContent = {
|
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
type: 'paragraph',
|
|
54
|
-
html: 'Ihållande relativ luftfuktighet över 70 % leder till kondens vid köldbryggor, mögeltillväxt och strukturell försämring. Daggpunktstemperaturen
|
|
54
|
+
html: 'Ihållande relativ luftfuktighet över 70 % leder till kondens vid köldbryggor, mögeltillväxt och strukturell försämring. Daggpunktstemperaturen: det värde vid vilket vattenånga i luften kondenserar: är nyckeltalet. Om ytan på din innervägg är under den punkten kommer kondens att bildas oavsett om du kan se den eller inte.',
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
57
|
type: 'paragraph',
|
|
@@ -64,7 +64,7 @@ export const content: CategoryLocaleContent = {
|
|
|
64
64
|
},
|
|
65
65
|
{
|
|
66
66
|
type: 'paragraph',
|
|
67
|
-
html: 'En projektor placeras inte "var den än får plats". Projektionsförhållandet (throw ratio)
|
|
67
|
+
html: 'En projektor placeras inte "var den än får plats". Projektionsförhållandet (throw ratio): förhållandet mellan projektionsavstånd och bildbredd: avgör exakt hur långt bak du behöver placera enheten för att uppnå önskad skärmstorlek. Ett placeringsfel på 50 cm kan innebära en 20 cm mindre bild, eller tvinga fram en digital zoom som minskar den effektiva upplösningen.',
|
|
68
68
|
},
|
|
69
69
|
{
|
|
70
70
|
type: 'paragraph',
|
|
@@ -77,12 +77,12 @@ export const content: CategoryLocaleContent = {
|
|
|
77
77
|
},
|
|
78
78
|
{
|
|
79
79
|
type: 'paragraph',
|
|
80
|
-
html: 'Det moderna hemmet integrerar teknik på alla nivåer: Wi-Fi-nätverk, IoT-enheter, QR-kodsbaserad åtkomst. QR-kodgeneratorn låter dig skapa genvägar till ditt hem-Wi-Fi, kontaktkort, URL:er till smarta enheter eller all information du enkelt vill dela med gäster eller mellan enheter
|
|
80
|
+
html: 'Det moderna hemmet integrerar teknik på alla nivåer: Wi-Fi-nätverk, IoT-enheter, QR-kodsbaserad åtkomst. QR-kodgeneratorn låter dig skapa genvägar till ditt hem-Wi-Fi, kontaktkort, URL:er till smarta enheter eller all information du enkelt vill dela med gäster eller mellan enheter: utan att behöva skriva.',
|
|
81
81
|
},
|
|
82
82
|
{
|
|
83
83
|
type: 'list',
|
|
84
84
|
items: [
|
|
85
|
-
'<strong>Kvantifierbara besparingar:</strong> Varje verktyg levererar konkreta siffror
|
|
85
|
+
'<strong>Kvantifierbara besparingar:</strong> Varje verktyg levererar konkreta siffror: sparade euro per år, genererade kWh per månad, optimala lutningsvinklar. Inga vaga uppskattningar.',
|
|
86
86
|
'<strong>Ingen installation krävs:</strong> Onlinekalkylatorer som körs direkt i webbläsaren, inga appar eller konton krävs.',
|
|
87
87
|
'<strong>Baserat på tekniska standarder:</strong> Psykrometriska formler (ASHRAE), projektionsoptik, solinstrålning per breddgrad och relevanta elföreskrifter.',
|
|
88
88
|
'<strong>Användbart innan du köper:</strong> Validera köpbeslut innan du binder dig. Lönar sig solpaneler på ditt tak? Hur mycket sparar LED-lampor egentligen? Räkna först.',
|
|
@@ -95,7 +95,7 @@ export const content: CategoryLocaleContent = {
|
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
97
|
type: 'paragraph',
|
|
98
|
-
html: 'Förbättringar av hemets energieffektivitet har en konkret ROI. En väl dimensionerad solcellsanläggning kan betala sig själv på 6
|
|
98
|
+
html: 'Förbättringar av hemets energieffektivitet har en konkret ROI. En väl dimensionerad solcellsanläggning kan betala sig själv på 6-9 år med nuvarande elpriser. Ett fullständigt byte till LED i ett genomsnittligt hem betalar sig på under 2 år. En väl vald tariff sparar pengar från första månaden. Startpunkten är alltid densamma: <strong>mät innan du agerar</strong>.',
|
|
99
99
|
},
|
|
100
100
|
{
|
|
101
101
|
type: 'paragraph',
|
package/src/category/i18n/tr.ts
CHANGED
|
@@ -42,7 +42,7 @@ export const content: CategoryLocaleContent = {
|
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
44
|
type: 'paragraph',
|
|
45
|
-
html: 'Doğru elektrik tarifesini seçmek de bir o kadar önemlidir. Sabit fiyatlı piyasa sözleşmeleri, düzenli alışkanlıkları olan tüketiciler için avantajlı olabilir; endeksli tarifeler toptan satış piyasasıyla dalgalanır ve tüketimini yoğun olmayan saatlere kaydıranları ödüllendirir. Her iki seçeneği de gerçek tüketim verilerinizle karşılaştırmak, <strong>yılda 100
|
|
45
|
+
html: 'Doğru elektrik tarifesini seçmek de bir o kadar önemlidir. Sabit fiyatlı piyasa sözleşmeleri, düzenli alışkanlıkları olan tüketiciler için avantajlı olabilir; endeksli tarifeler toptan satış piyasasıyla dalgalanır ve tüketimini yoğun olmayan saatlere kaydıranları ödüllendirir. Her iki seçeneği de gerçek tüketim verilerinizle karşılaştırmak, <strong>yılda 100-300 €</strong> fark yaratabilir.',
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
type: 'title',
|
|
@@ -64,7 +64,7 @@ export const content: CategoryLocaleContent = {
|
|
|
64
64
|
},
|
|
65
65
|
{
|
|
66
66
|
type: 'paragraph',
|
|
67
|
-
html: 'Bir projektör "nereye sığarsa oraya" yerleştirilmez. Yansıtma oranı (throw ratio)
|
|
67
|
+
html: 'Bir projektör "nereye sığarsa oraya" yerleştirilmez. Yansıtma oranı (throw ratio): yansıtma mesafesi ile görüntü genişliği arasındaki ilişki: istediğiniz ekran boyutuna ulaşmak için üniteyi tam olarak ne kadar geriye yerleştirmeniz gerektiğini belirler. 50 cm\'lik bir yerleştirme hatası, görüntünün 20 cm daha küçük olması veya efektif çözünürlüğü azaltan bir dijital zoom kullanımına zorlanmak anlamına gelebilir.',
|
|
68
68
|
},
|
|
69
69
|
{
|
|
70
70
|
type: 'paragraph',
|
|
@@ -77,12 +77,12 @@ export const content: CategoryLocaleContent = {
|
|
|
77
77
|
},
|
|
78
78
|
{
|
|
79
79
|
type: 'paragraph',
|
|
80
|
-
html: 'Modern ev, teknolojiyi her düzeyde entegre eder: Wi-Fi ağları, IoT cihazları, QR kod tabanlı erişim. QR kod oluşturucu, ev Wi-Fi ağınıza kısayollar, kartvizitler, akıllı cihaz URL\'leri veya misafirlerle ya da cihazlar arasında kolayca paylaşmak istediğiniz her türlü bilgiyi
|
|
80
|
+
html: 'Modern ev, teknolojiyi her düzeyde entegre eder: Wi-Fi ağları, IoT cihazları, QR kod tabanlı erişim. QR kod oluşturucu, ev Wi-Fi ağınıza kısayollar, kartvizitler, akıllı cihaz URL\'leri veya misafirlerle ya da cihazlar arasında kolayca paylaşmak istediğiniz her türlü bilgiyi: yazma gerektirmeden: oluşturmanıza olanak tanır.',
|
|
81
81
|
},
|
|
82
82
|
{
|
|
83
83
|
type: 'list',
|
|
84
84
|
items: [
|
|
85
|
-
'<strong>Ölçülebilir tasarruf:</strong> Her araç somut rakamlar verir
|
|
85
|
+
'<strong>Ölçülebilir tasarruf:</strong> Her araç somut rakamlar verir: yılda kaç euro tasarruf edildiği, ayda kaç kWh üretildiği, optimal eğim açıları. Belirsiz tahminler yok.',
|
|
86
86
|
'<strong>Kurulum gerekmez:</strong> Doğrudan tarayıcıda çalışan çevrimiçi hesaplayıcılar, uygulama veya hesap gerekmez.',
|
|
87
87
|
'<strong>Teknik standartlara dayalı:</strong> Psikrometrik formüller (ASHRAE), projeksiyon optiği, enleme göre güneş radyasyonu ve ilgili elektrik yönetmelikleri.',
|
|
88
88
|
'<strong>Satın almadan önce faydalı:</strong> Satın alma kararlarını taahhüt altına girmeden önce doğrulayın. Güneş panelleri çatınızda kendisini amorti eder mi? LED\'ler gerçekte ne kadar tasarruf sağlar? Önce hesaplayın.',
|
package/src/category/i18n/zh.ts
CHANGED
|
@@ -12,7 +12,7 @@ export const content: CategoryLocaleContent = {
|
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
14
|
type: 'paragraph',
|
|
15
|
-
html: '
|
|
15
|
+
html: '大多数关于家居的决定都是凭直觉做出的:"我觉得这些太阳能板应该够了","换灯泡应该能省点钱"。事实是,五分钟的计算每年可以为您节省数百欧元,或者避开昂贵的返工。我们的工具基于<strong>真实的物理学</strong>:按纬度计算的太阳能辐射、实测瓦数消耗、湿空气焓湿学、投射光学等。',
|
|
16
16
|
},
|
|
17
17
|
{
|
|
18
18
|
type: 'paragraph',
|
|
@@ -25,7 +25,7 @@ export const content: CategoryLocaleContent = {
|
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
type: 'paragraph',
|
|
28
|
-
html: '家用光伏安装具有真实的投资回报率,这取决于三个变量:您所在位置的太阳辐射量、电池板的倾斜角度以及您的每小时耗电量。倾斜角比最佳角度低 10°,可能会导致<strong>年发电量损失 15
|
|
28
|
+
html: '家用光伏安装具有真实的投资回报率,这取决于三个变量:您所在位置的太阳辐射量、电池板的倾斜角度以及您的每小时耗电量。倾斜角比最佳角度低 10°,可能会导致<strong>年发电量损失 15-20%</strong>。我们的太阳能计算器可为您提供精确的角度和月度发电估算。',
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
type: 'paragraph',
|
|
@@ -38,11 +38,11 @@ export const content: CategoryLocaleContent = {
|
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
40
|
type: 'paragraph',
|
|
41
|
-
html: '将卤素灯更换为 LED
|
|
41
|
+
html: '将卤素灯更换为 LED 不仅仅是"降低瓦数"。这意味着要明白一个 9 W 的 LED 在提供相同光通量(800 流明)的同时取代了 60 W 的卤素灯,从而实现<strong>能耗降低 85%</strong>。乘以年运行时间和每度电单价,节省的费用可以量化到分。我们的计算器正是为此设计的。',
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
44
|
type: 'paragraph',
|
|
45
|
-
html: '选择合适的电费方案同样重要。固定价格合同可能对生活习惯规律的消费者有利;指数挂钩型电价随批发市场波动,奖励那些能将用电转移到非高峰时段的用户。将两种方案与您的实际用电数据进行比较,<strong>每年可能产生 100
|
|
45
|
+
html: '选择合适的电费方案同样重要。固定价格合同可能对生活习惯规律的消费者有利;指数挂钩型电价随批发市场波动,奖励那些能将用电转移到非高峰时段的用户。将两种方案与您的实际用电数据进行比较,<strong>每年可能产生 100-300 欧元的差异</strong>。',
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
type: 'title',
|
|
@@ -51,7 +51,7 @@ export const content: CategoryLocaleContent = {
|
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
type: 'paragraph',
|
|
54
|
-
html: '长期处于 70%
|
|
54
|
+
html: '长期处于 70% 以上的相对湿度会导致热桥处产生冷凝水,引发霉菌滋生和结构劣变。露点温度:: 即空气中水蒸气开始凝结的温度值:: 是关键指标。如果您的内墙表面温度低于该点,无论您是否看得见,都会产生冷凝水。',
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
57
|
type: 'paragraph',
|
|
@@ -64,7 +64,7 @@ export const content: CategoryLocaleContent = {
|
|
|
64
64
|
},
|
|
65
65
|
{
|
|
66
66
|
type: 'paragraph',
|
|
67
|
-
html: '
|
|
67
|
+
html: '投影仪不能"随处安放"。投射比(投射距离与画面宽度的关系)决定了您需要将机器向后放置多远才能达到理想的屏幕尺寸。50 厘米的安装误差可能意味着图像小了 20 厘米,或者被迫使用降低有效分辨率的数字缩放。',
|
|
68
68
|
},
|
|
69
69
|
{
|
|
70
70
|
type: 'paragraph',
|
|
@@ -82,7 +82,7 @@ export const content: CategoryLocaleContent = {
|
|
|
82
82
|
{
|
|
83
83
|
type: 'list',
|
|
84
84
|
items: [
|
|
85
|
-
'<strong>可量化的节省:</strong>
|
|
85
|
+
'<strong>可量化的节省:</strong> 每个工具都会返回具体的数字:: 每年的节省费用、每月的发电量、最佳倾斜角度。没有模糊的估算。',
|
|
86
86
|
'<strong>无需安装:</strong> 在浏览器中直接运行的在线计算器,无需下载 App 或注册账户。',
|
|
87
87
|
'<strong>基于技术标准:</strong> 使用焓湿学公式 (ASHRAE)、投射光学、按纬度计算的太阳辐射以及相关的电气法规。',
|
|
88
88
|
'<strong>购前验证:</strong> 在投入成本前验证决策。您家屋顶装太阳能板划算吗?LED 到底能省多少钱?先算一算。',
|
|
@@ -95,7 +95,7 @@ export const content: CategoryLocaleContent = {
|
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
97
|
type: 'paragraph',
|
|
98
|
-
html: '家居节能改进具有具体的投资回报率 (ROI)。一个配置合理的光伏系统在当前电价下 6
|
|
98
|
+
html: '家居节能改进具有具体的投资回报率 (ROI)。一个配置合理的光伏系统在当前电价下 6-9 年内即可收回成本。普通家庭全面更换 LED 灯具在不到 2 年内即可回本。选对电费方案从第一个月起就能省钱。起点总是一样的:<strong>先测量,后行动</strong>。',
|
|
99
99
|
},
|
|
100
100
|
{
|
|
101
101
|
type: 'paragraph',
|
package/src/entries.ts
CHANGED
|
@@ -12,6 +12,8 @@ export { solarCalculator } from './tool/solarCalculator/entry';
|
|
|
12
12
|
export type { SolarCalculatorLocaleContent } from './tool/solarCalculator/entry';
|
|
13
13
|
export { tariffComparator } from './tool/tariffComparator/entry';
|
|
14
14
|
export type { TariffComparatorLocaleContent } from './tool/tariffComparator/entry';
|
|
15
|
+
export { wifiRangeSimulator } from './tool/wifiRangeSimulator/entry';
|
|
16
|
+
export type { WifiRangeSimulatorLocaleContent } from './tool/wifiRangeSimulator/entry';
|
|
15
17
|
export { homeCategory } from './category';
|
|
16
18
|
import { dewPointCalculator } from './tool/dewPointCalculator/entry';
|
|
17
19
|
import { heatingComparator } from './tool/heatingComparator/entry';
|
|
@@ -20,4 +22,5 @@ import { projectorCalculator } from './tool/projectorCalculator/entry';
|
|
|
20
22
|
import { qrGenerator } from './tool/qrGenerator/entry';
|
|
21
23
|
import { solarCalculator } from './tool/solarCalculator/entry';
|
|
22
24
|
import { tariffComparator } from './tool/tariffComparator/entry';
|
|
23
|
-
|
|
25
|
+
import { wifiRangeSimulator } from './tool/wifiRangeSimulator/entry';
|
|
26
|
+
export const ALL_ENTRIES = [dewPointCalculator, heatingComparator, ledSavingCalculator, projectorCalculator, qrGenerator, solarCalculator, tariffComparator, wifiRangeSimulator];
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
|
|
5
|
+
function getFiles(dir: string): string[] {
|
|
6
|
+
const results: string[] = [];
|
|
7
|
+
if (!fs.existsSync(dir)) {
|
|
8
|
+
return results;
|
|
9
|
+
}
|
|
10
|
+
const list = fs.readdirSync(dir);
|
|
11
|
+
for (const file of list) {
|
|
12
|
+
const fullPath = path.join(dir, file);
|
|
13
|
+
const stat = fs.statSync(fullPath);
|
|
14
|
+
if (stat && stat.isDirectory()) {
|
|
15
|
+
if (file !== 'tests' && file !== 'node_modules' && file !== '.astro') {
|
|
16
|
+
results.push(...getFiles(fullPath));
|
|
17
|
+
}
|
|
18
|
+
} else {
|
|
19
|
+
results.push(fullPath);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return results;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function isContentFile(filePath: string): boolean {
|
|
26
|
+
return /\\i18n\\/.test(filePath) || filePath.endsWith('bibliography.ts');
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const srcDir = path.join(process.cwd(), 'src');
|
|
30
|
+
const scriptsDir = path.join(process.cwd(), 'scripts');
|
|
31
|
+
const filesToTest = [
|
|
32
|
+
...getFiles(srcDir).filter(isContentFile),
|
|
33
|
+
...getFiles(scriptsDir).filter(isContentFile),
|
|
34
|
+
];
|
|
35
|
+
|
|
36
|
+
const aiTypographyGarbage = [
|
|
37
|
+
'\u2013',
|
|
38
|
+
'\u2014',
|
|
39
|
+
'\u2026',
|
|
40
|
+
'\u201C',
|
|
41
|
+
'\u201D',
|
|
42
|
+
'\u2018',
|
|
43
|
+
'\u2019',
|
|
44
|
+
'\u00AB',
|
|
45
|
+
'\u00BB',
|
|
46
|
+
'\u200B',
|
|
47
|
+
'\u201E',
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
describe('Typography Garbage Character Validation', () => {
|
|
51
|
+
filesToTest.forEach((filePath) => {
|
|
52
|
+
const relativePath = path.relative(process.cwd(), filePath);
|
|
53
|
+
it(`should not contain typography garbage characters in ${relativePath}`, () => {
|
|
54
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
55
|
+
const hasAiPatterns = aiTypographyGarbage.some(char => content.includes(char));
|
|
56
|
+
expect(hasAiPatterns).toBe(false);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it(`should not contain space before colon in ${relativePath}`, () => {
|
|
60
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
61
|
+
const spaceBeforeColon = / : /.test(content);
|
|
62
|
+
expect(spaceBeforeColon).toBe(false);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it(`should not contain double hyphen in ${relativePath}`, () => {
|
|
66
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
67
|
+
expect(content).not.toContain('--');
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
});
|
|
@@ -4,8 +4,8 @@ import { homeCategory } from '../data';
|
|
|
4
4
|
|
|
5
5
|
describe('Tool Validation Suite', () => {
|
|
6
6
|
describe('Library Registration', () => {
|
|
7
|
-
it('should have
|
|
8
|
-
expect(ALL_TOOLS.length).toBe(
|
|
7
|
+
it('should have 8 tools in ALL_TOOLS', () => {
|
|
8
|
+
expect(ALL_TOOLS.length).toBe(8);
|
|
9
9
|
});
|
|
10
10
|
|
|
11
11
|
it('homeCategory should be defined', () => {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export const bibliography = [
|
|
2
2
|
{
|
|
3
|
-
name: 'Magnus Approximation of the Dew-Point
|
|
3
|
+
name: 'Magnus Approximation of the Dew-Point: Meteorological Applications (2011)',
|
|
4
4
|
url: 'https://es.scribd.com/document/331352069/dew-point',
|
|
5
5
|
},
|
|
6
6
|
{
|
|
7
|
-
name: 'Guide to Meteorological Instruments and Methods of Observation
|
|
7
|
+
name: 'Guide to Meteorological Instruments and Methods of Observation: WMO (2021)',
|
|
8
8
|
url: 'https://community.wmo.int/site/knowledge-hub/programmes-and-initiatives/instruments-and-methods-of-observation-programme-imop/guide-instruments-and-methods-of-observation-wmo-no-8',
|
|
9
9
|
},
|
|
10
10
|
];
|
|
@@ -94,13 +94,13 @@ export const content: ToolLocaleContent<DewPointCalculatorUI> = {
|
|
|
94
94
|
},
|
|
95
95
|
{
|
|
96
96
|
type: 'paragraph',
|
|
97
|
-
html: 'Der Taupunkt markiert die Temperatur, bei der Luftfeuchtigkeit zu Wasser wird. In Wohnräumen ist dieser Wert entscheidend für die Vermeidung von Bauschäden. Wenn die Temperatur einer Oberfläche (z. B. einer schlecht gedämmten Außenwand) unter den Taupunkt sinkt, entsteht Kondenswasser
|
|
97
|
+
html: 'Der Taupunkt markiert die Temperatur, bei der Luftfeuchtigkeit zu Wasser wird. In Wohnräumen ist dieser Wert entscheidend für die Vermeidung von Bauschäden. Wenn die Temperatur einer Oberfläche (z. B. einer schlecht gedämmten Außenwand) unter den Taupunkt sinkt, entsteht Kondenswasser - der ideale Nährboden für <em>Aspergillus</em> und andere gesundheitsschädliche Pilze.',
|
|
98
98
|
},
|
|
99
99
|
{
|
|
100
100
|
type: 'stats',
|
|
101
101
|
items: [
|
|
102
102
|
{ value: '> 5°C', label: 'Sicherer Bereich', icon: 'mdi:shield-check' },
|
|
103
|
-
{ value: '40
|
|
103
|
+
{ value: '40-60%', label: 'Ideale Feuchte', icon: 'mdi:water-percent' },
|
|
104
104
|
{ value: '< 1°C', label: 'Akute Gefahr', icon: 'mdi:alert' },
|
|
105
105
|
],
|
|
106
106
|
columns: 3,
|
|
@@ -130,7 +130,7 @@ export const content: ToolLocaleContent<DewPointCalculatorUI> = {
|
|
|
130
130
|
},
|
|
131
131
|
{
|
|
132
132
|
type: 'paragraph',
|
|
133
|
-
html: '<strong>Geringes Risiko (Diff. > 5°C):</strong> Die Wände sind sicher. <strong>Mittleres Risiko (3
|
|
133
|
+
html: '<strong>Geringes Risiko (Diff. > 5°C):</strong> Die Wände sind sicher. <strong>Mittleres Risiko (3-5°C):</strong> Achten Sie auf Ecken und Wärmebrücken. <strong>Hohes Risiko (1-3°C):</strong> Kondensation an Scheiben wahrscheinlich - sofort lüften. <strong>Akute Gefahr (< 1°C):</strong> Aktive Kondensation mit sofortigem Risiko für schwarzen Schimmel.',
|
|
134
134
|
},
|
|
135
135
|
{
|
|
136
136
|
type: 'diagnostic',
|
|
@@ -161,8 +161,8 @@ export const content: ToolLocaleContent<DewPointCalculatorUI> = {
|
|
|
161
161
|
riskHigh: 'Hohes Risiko',
|
|
162
162
|
riskExtreme: 'Akute Gefahr',
|
|
163
163
|
riskLowDesc: 'Differenz > 5°C. Wände sind sicher.',
|
|
164
|
-
riskMediumDesc: 'Differenz 3
|
|
165
|
-
riskHighDesc: 'Differenz 1
|
|
164
|
+
riskMediumDesc: 'Differenz 3-5°C. Ecken prüfen.',
|
|
165
|
+
riskHighDesc: 'Differenz 1-3°C. Sofort lüften!',
|
|
166
166
|
riskExtremeDesc: 'Differenz < 1°C. Aktive Kondensation.',
|
|
167
167
|
},
|
|
168
168
|
};
|
|
@@ -22,7 +22,7 @@ const faqData = [
|
|
|
22
22
|
{
|
|
23
23
|
question: 'How can I reduce humidity at home?',
|
|
24
24
|
answer:
|
|
25
|
-
'The most effective method is ventilation
|
|
25
|
+
'The most effective method is ventilation: especially after showering or cooking: and using dehumidifiers. Maintaining a constant temperature also helps the air retain more vapour without condensing.',
|
|
26
26
|
},
|
|
27
27
|
{
|
|
28
28
|
question: 'Is condensation mould dangerous?',
|
|
@@ -99,13 +99,13 @@ export const content: ToolLocaleContent<DewPointCalculatorUI> = {
|
|
|
99
99
|
},
|
|
100
100
|
{
|
|
101
101
|
type: 'paragraph',
|
|
102
|
-
html: 'The dew point is the temperature to which air must cool for water vapour to condense into liquid water. In a home, this concept marks the boundary between a healthy house and one with structural moisture problems. When the temperature of a surface (such as a poorly insulated wall) falls below the dew point, water droplets appear
|
|
102
|
+
html: 'The dew point is the temperature to which air must cool for water vapour to condense into liquid water. In a home, this concept marks the boundary between a healthy house and one with structural moisture problems. When the temperature of a surface (such as a poorly insulated wall) falls below the dew point, water droplets appear: the ideal breeding ground for <em>Aspergillus</em> and other harmful fungi.',
|
|
103
103
|
},
|
|
104
104
|
{
|
|
105
105
|
type: 'stats',
|
|
106
106
|
items: [
|
|
107
107
|
{ value: '> 5°C', label: 'Safe Difference', icon: 'mdi:shield-check' },
|
|
108
|
-
{ value: '40
|
|
108
|
+
{ value: '40-60%', label: 'Ideal Humidity', icon: 'mdi:water-percent' },
|
|
109
109
|
{ value: '< 1°C', label: 'Extreme Danger', icon: 'mdi:alert' },
|
|
110
110
|
],
|
|
111
111
|
columns: 3,
|
|
@@ -135,7 +135,7 @@ export const content: ToolLocaleContent<DewPointCalculatorUI> = {
|
|
|
135
135
|
},
|
|
136
136
|
{
|
|
137
137
|
type: 'paragraph',
|
|
138
|
-
html: '<strong>Low Risk (difference > 5°C):</strong> The air is far from saturation. Your walls are safe. <strong>Medium Risk (3
|
|
138
|
+
html: '<strong>Low Risk (difference > 5°C):</strong> The air is far from saturation. Your walls are safe. <strong>Medium Risk (3-5°C):</strong> Watch corners and thermal bridges. <strong>High Risk (1-3°C):</strong> Condensation likely on glass and cold zones: ventilate immediately. <strong>Extreme Danger (< 1°C):</strong> Active condensation with imminent risk of black mould growth.',
|
|
139
139
|
},
|
|
140
140
|
{
|
|
141
141
|
type: 'diagnostic',
|
|
@@ -166,8 +166,8 @@ export const content: ToolLocaleContent<DewPointCalculatorUI> = {
|
|
|
166
166
|
riskHigh: 'High Risk',
|
|
167
167
|
riskExtreme: 'Extreme Danger',
|
|
168
168
|
riskLowDesc: 'Difference > 5°C. Surfaces are safe.',
|
|
169
|
-
riskMediumDesc: 'Difference 3
|
|
170
|
-
riskHighDesc: 'Difference 1
|
|
169
|
+
riskMediumDesc: 'Difference 3-5°C. Watch the corners.',
|
|
170
|
+
riskHighDesc: 'Difference 1-3°C. Ventilate immediately.',
|
|
171
171
|
riskExtremeDesc: 'Difference < 1°C. Active condensation.',
|
|
172
172
|
},
|
|
173
173
|
};
|
|
@@ -99,13 +99,13 @@ export const content: ToolLocaleContent<DewPointCalculatorUI> = {
|
|
|
99
99
|
},
|
|
100
100
|
{
|
|
101
101
|
type: 'paragraph',
|
|
102
|
-
html: 'El punto de rocío es la temperatura a la cual el aire debe enfriarse para que el vapor de agua se condense en agua líquida. En el contexto de una vivienda, este concepto marca la frontera entre una casa sana y una con problemas estructurales de humedad. Cuando la temperatura de una superficie (como una pared mal aislada) cae por debajo del punto de rocío, aparecen gotas de agua
|
|
102
|
+
html: 'El punto de rocío es la temperatura a la cual el aire debe enfriarse para que el vapor de agua se condense en agua líquida. En el contexto de una vivienda, este concepto marca la frontera entre una casa sana y una con problemas estructurales de humedad. Cuando la temperatura de una superficie (como una pared mal aislada) cae por debajo del punto de rocío, aparecen gotas de agua: el caldo de cultivo ideal para el <em>Aspergillus</em> y otros hongos nocivos.',
|
|
103
103
|
},
|
|
104
104
|
{
|
|
105
105
|
type: 'stats',
|
|
106
106
|
items: [
|
|
107
107
|
{ value: '> 5°C', label: 'Diferencia Segura', icon: 'mdi:shield-check' },
|
|
108
|
-
{ value: '40
|
|
108
|
+
{ value: '40-60%', label: 'Humedad Ideal', icon: 'mdi:water-percent' },
|
|
109
109
|
{ value: '< 1°C', label: 'Peligro Extremo', icon: 'mdi:alert' },
|
|
110
110
|
],
|
|
111
111
|
columns: 3,
|
|
@@ -135,7 +135,7 @@ export const content: ToolLocaleContent<DewPointCalculatorUI> = {
|
|
|
135
135
|
},
|
|
136
136
|
{
|
|
137
137
|
type: 'paragraph',
|
|
138
|
-
html: '<strong>Riesgo Bajo (diferencia > 5°C):</strong> El aire está lejos de saturarse. Tus paredes están seguras. <strong>Riesgo Medio (3
|
|
138
|
+
html: '<strong>Riesgo Bajo (diferencia > 5°C):</strong> El aire está lejos de saturarse. Tus paredes están seguras. <strong>Riesgo Medio (3-5°C):</strong> Vigila las esquinas y los puentes térmicos. <strong>Riesgo Alto (1-3°C):</strong> Condensación probable en cristales y zonas frías: ventila inmediatamente. <strong>Peligro Extremo (< 1°C):</strong> Condensación activa con riesgo inmediato de proliferación de moho negro.',
|
|
139
139
|
},
|
|
140
140
|
{
|
|
141
141
|
type: 'diagnostic',
|
|
@@ -166,8 +166,8 @@ export const content: ToolLocaleContent<DewPointCalculatorUI> = {
|
|
|
166
166
|
riskHigh: 'Riesgo Alto',
|
|
167
167
|
riskExtreme: 'Peligro Extremo',
|
|
168
168
|
riskLowDesc: 'Diferencia > 5°C. Superficies seguras.',
|
|
169
|
-
riskMediumDesc: 'Diferencia 3
|
|
170
|
-
riskHighDesc: 'Diferencia 1
|
|
169
|
+
riskMediumDesc: 'Diferencia 3-5°C. Vigila las esquinas.',
|
|
170
|
+
riskHighDesc: 'Diferencia 1-3°C. Ventila inmediatamente.',
|
|
171
171
|
riskExtremeDesc: 'Diferencia < 1°C. Condensación activa.',
|
|
172
172
|
},
|
|
173
173
|
};
|