@jjlmoya/utils-nature 1.23.0 → 1.25.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 (65) hide show
  1. package/package.json +2 -2
  2. package/src/category/i18n/es.ts +1 -1
  3. package/src/category/i18n/fr.ts +110 -110
  4. package/src/category/i18n/it.ts +1 -1
  5. package/src/category/i18n/pl.ts +1 -1
  6. package/src/category/i18n/pt.ts +1 -1
  7. package/src/category/i18n/ru.ts +110 -110
  8. package/src/category/seo.astro +1 -1
  9. package/src/components/PreviewNavSidebar.astro +1 -1
  10. package/src/components/PreviewToolbar.astro +1 -1
  11. package/src/data.ts +1 -1
  12. package/src/env.d.ts +1 -1
  13. package/src/layouts/PreviewLayout.astro +117 -117
  14. package/src/pages/[locale]/[slug].astro +164 -164
  15. package/src/pages/index.astro +1 -1
  16. package/src/tests/category_seo_quality.test.ts +74 -0
  17. package/src/tests/faq_count.test.ts +19 -19
  18. package/src/tests/mocks/astro_mock.js +1 -1
  19. package/src/tests/no_en_dash.test.ts +71 -71
  20. package/src/tests/no_h1_in_components.test.ts +1 -1
  21. package/src/tests/seo_length.test.ts +23 -23
  22. package/src/tests/seo_parity.test.ts +2 -2
  23. package/src/tests/seo_translation_completeness.test.ts +18 -12
  24. package/src/tests/spanish_leakage.test.ts +175 -175
  25. package/src/tool/cricketThermometer/i18n/de.ts +169 -169
  26. package/src/tool/cricketThermometer/i18n/en.ts +169 -169
  27. package/src/tool/cricketThermometer/i18n/es.ts +169 -169
  28. package/src/tool/cricketThermometer/i18n/fr.ts +169 -169
  29. package/src/tool/cricketThermometer/i18n/id.ts +169 -169
  30. package/src/tool/cricketThermometer/i18n/it.ts +169 -169
  31. package/src/tool/cricketThermometer/i18n/ja.ts +169 -169
  32. package/src/tool/cricketThermometer/i18n/ko.ts +169 -169
  33. package/src/tool/cricketThermometer/i18n/nl.ts +169 -169
  34. package/src/tool/cricketThermometer/i18n/pl.ts +169 -169
  35. package/src/tool/cricketThermometer/i18n/pt.ts +169 -169
  36. package/src/tool/cricketThermometer/i18n/ru.ts +169 -169
  37. package/src/tool/cricketThermometer/i18n/sv.ts +169 -169
  38. package/src/tool/cricketThermometer/i18n/tr.ts +169 -169
  39. package/src/tool/cricketThermometer/i18n/zh.ts +169 -169
  40. package/src/tool/cricketThermometer/seo.astro +15 -15
  41. package/src/tool/digitalCarbon/i18n/de.ts +229 -229
  42. package/src/tool/digitalCarbon/i18n/fr.ts +229 -229
  43. package/src/tool/digitalCarbon/i18n/ru.ts +229 -229
  44. package/src/tool/digitalCarbon/seo.astro +15 -15
  45. package/src/tool/rainHarvester/i18n/de.ts +167 -167
  46. package/src/tool/rainHarvester/i18n/en.ts +167 -167
  47. package/src/tool/rainHarvester/i18n/es.ts +167 -167
  48. package/src/tool/rainHarvester/i18n/fr.ts +167 -167
  49. package/src/tool/rainHarvester/i18n/id.ts +167 -167
  50. package/src/tool/rainHarvester/i18n/it.ts +167 -167
  51. package/src/tool/rainHarvester/i18n/ja.ts +167 -167
  52. package/src/tool/rainHarvester/i18n/ko.ts +167 -167
  53. package/src/tool/rainHarvester/i18n/nl.ts +167 -167
  54. package/src/tool/rainHarvester/i18n/pl.ts +167 -167
  55. package/src/tool/rainHarvester/i18n/pt.ts +167 -167
  56. package/src/tool/rainHarvester/i18n/ru.ts +167 -167
  57. package/src/tool/rainHarvester/i18n/sv.ts +167 -167
  58. package/src/tool/rainHarvester/i18n/tr.ts +167 -167
  59. package/src/tool/rainHarvester/i18n/zh.ts +167 -167
  60. package/src/tool/rainHarvester/seo.astro +15 -15
  61. package/src/tool/seedCalculator/i18n/fr.ts +197 -197
  62. package/src/tool/seedCalculator/i18n/pl.ts +197 -197
  63. package/src/tool/seedCalculator/i18n/ru.ts +197 -197
  64. package/src/tool/seedCalculator/seo.astro +15 -15
  65. package/src/types.ts +1 -1
@@ -1,167 +1,167 @@
1
- import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
- import { bibliography } from '../bibliography';
3
- import type { RainHarvesterLocaleContent } from '../index';
4
-
5
- const slug = 'rainwater-calculator';
6
- const title = '빗물 수집 계산기';
7
- const description = '지붕에서 수집할 수 있는 빗물의 양을 계산하고 적절한 저장 탱크 용량을 산정해 보세요.';
8
-
9
- const faqData = [
10
- {
11
- question: '지붕에서 실제로 얼마나 많은 물을 모을 수 있나요?',
12
- answer: '일반적인 규칙은 지붕 면적 1제곱미터당 강수량 1밀리미터당 약 1리터의 물을 모을 수 있다는 것입니다. 다만 증발이나 여과 과정에서 발생하는 손실을 "유출 계수"로 조정해야 합니다.',
13
- },
14
- {
15
- question: '유출 계수란 무엇인가요?',
16
- answer: '지붕 재질에 따라 물이 얼마나 손실되는지를 나타내는 백분율입니다. 금속이나 기와 지붕은 효율이 매우 높지만(0.85-0.95), 자갈이나 흙 지붕은 효율이 훨씬 낮습니다(0.1-0.3).',
17
- },
18
- {
19
- question: '저장 탱크의 크기는 어떻게 결정하나요?',
20
- answer: '한 달 동안 예상되는 최대 강수량을 계산하고 이를 예상 월간 소비량과 비교해야 합니다. 탱크가 너무 작으면 폭우 시 넘쳐흐르고, 너무 크면 불필요한 비용이 발생합니다.',
21
- },
22
- {
23
- question: '수집된 빗물을 마셔도 안전한가요?',
24
- answer: '직접 마시는 것은 안전하지 않습니다. 빗물에는 먼지, 새의 배설물, 공기 중의 입자가 포함되어 있습니다. 식용으로 사용하려면 침전 필터, 활성탄, UV 광선 또는 염소를 이용한 소독 과정을 거쳐야 합니다.',
25
- },
26
- ];
27
-
28
- const howToData = [
29
- {
30
- name: '수평 면적 측정하기',
31
- text: '지붕 바닥의 가로와 세로 길이를 측정합니다(경사면의 넓이가 아니라 바닥에 투영되는 넓이 기준).',
32
- },
33
- {
34
- name: '지역 강수량 확인하기',
35
- text: '기상청 홈페이지 등을 통해 해당 지역의 연간 또는 월간 평균 강수량(mm)을 확인합니다.',
36
- },
37
- {
38
- name: '재질 효율 적용하기',
39
- text: '계산기에서 지붕 재질을 선택하여 흡수나 열로 인해 손실될 물의 양을 차감합니다.',
40
- },
41
- {
42
- name: '필요한 용량 계산하기',
43
- text: '연간 리터 결과를 바탕으로 가뭄 시기에 대비해 전체 수확량의 최소 20-30%를 저장할 수 있는 탱크를 선택합니다.',
44
- },
45
- ];
46
-
47
- const faqSchema: WithContext<FAQPage> = {
48
- '@context': 'https://schema.org',
49
- '@type': 'FAQPage',
50
- mainEntity: faqData.map((item) => ({
51
- '@type': 'Question',
52
- name: item.question,
53
- acceptedAnswer: { '@type': 'Answer', text: item.answer },
54
- })),
55
- };
56
-
57
- const howToSchema: WithContext<HowTo> = {
58
- '@context': 'https://schema.org',
59
- '@type': 'HowTo',
60
- name: title,
61
- description,
62
- step: howToData.map((step, i) => ({
63
- '@type': 'HowToStep',
64
- position: i + 1,
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: 'ko',
79
- };
80
-
81
- export const content: RainHarvesterLocaleContent = {
82
- slug,
83
- title,
84
- description,
85
- ui: {
86
- headInputs: '지붕 설정',
87
- headResults: '수집 잠재량',
88
- labelArea: '지붕 면적',
89
- labelRainfall: '연간 강수량',
90
- labelMaterial: '지붕 재질',
91
- unitM2: 'm²',
92
- unitMm: 'mm',
93
- unitLiters: '리터',
94
- helpRainfall: '잘 모르시나요? 구글에 "(해당 도시명) 연평균 강수량"을 검색해 보세요.',
95
- efficiencyTitle: '효율 계수',
96
- efficiencyNote: '필터 및 증발로 인한 10%의 손실이 적용됩니다.',
97
- resultTitle: '연간 수집 잠재량',
98
- equivalenciesTitle: '실질적 활용 예시',
99
- labelFlushes: '변기 물 내림 횟수',
100
- labelShowers: '샤워 횟수(10분 기준)',
101
- labelGarden: '정원 물 주기',
102
- gardenArea: '(50m²)',
103
- materialMetal: '금속 / 유약 기와',
104
- materialClay: '전통 기와 / 점토',
105
- materialConcrete: '콘크리트 / 아스팔트',
106
- materialGravel: '자갈 / 녹색 지붕',
107
- },
108
- seo: [
109
- {
110
- type: 'title',
111
- text: '빗물 수집: 자급자족과 지속 가능성',
112
- level: 2,
113
- },
114
- {
115
- type: 'paragraph',
116
- html: '많은 주택 소유자들이 자신의 지붕이 가진 잠재력을 알지 못합니다. 표준 지붕은 매년 수천 리터의 물을 무료로 모을 수 있습니다. 이 도구는 그 잠재력을 수치화하여 여러분이 정확히 얼마나 많은 물을 "수확"할 수 있는지 계산하고 저장에 필요한 이상적인 탱크 크기를 결정할 수 있게 해줍니다.',
117
- },
118
- {
119
- type: 'title',
120
- text: '계산 로직',
121
- level: 3,
122
- },
123
- {
124
- type: 'paragraph',
125
- html: '빗물 수집을 위한 기본 공식은 간단하지만 강력합니다.',
126
- },
127
- {
128
- type: 'paragraph',
129
- html: '<code style="display:block;padding:1rem;background:var(-bg-alt);border-radius:0.5rem;margin:1rem 0;font-family:monospace;">용량 = 면적 × 강수량 × 유출 계수 × 필터 효율</code>',
130
- },
131
- {
132
- type: 'list',
133
- items: [
134
- '<strong>면적:</strong> 지붕 투영 면적(가로 × 세로).',
135
- '<strong>강수량:</strong> 밀리미터 단위의 강우량.',
136
- '<strong>계수:</strong> 지붕에서 흡수 등으로 손실되는 물의 양.',
137
- '<strong>효율:</strong> 탱크 도달 전 필터에서 발생하는 손실(약 10%).',
138
- ],
139
- },
140
- {
141
- type: 'title',
142
- text: '왜 빗물을 수집하나요?',
143
- level: 3,
144
- },
145
- {
146
- type: 'list',
147
- items: [
148
- '<strong>절약:</strong> 수도 요금을 크게 줄일 수 있습니다.',
149
- '<strong>원예:</strong> 식물은 염소나 석회가 없는 물을 좋아합니다.',
150
- '<strong>회복력:</strong> 단수 시 비상용 물을 확보할 수 있습니다.',
151
- ],
152
- },
153
- {
154
- type: 'title',
155
- text: '탱크 용량 산정',
156
- level: 2,
157
- },
158
- {
159
- type: 'paragraph',
160
- html: '가장 흔한 실수는 예산에만 맞춰 탱크를 사는 것입니다. 너무 작으면 넘쳐서 물을 낭비하게 되고, 너무 크면 불필요한 비용을 쓰게 됩니다. 일반적인 규칙은 해당 지역 평균 강수량의 <strong>3개월분</strong>을 저장할 수 있는 용량을 확보하여 건기를 대비하는 것입니다.',
161
- },
162
- ],
163
- faq: faqData,
164
- howTo: howToData,
165
- bibliography,
166
- schemas: [faqSchema, howToSchema, appSchema],
167
- };
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
3
+ import type { RainHarvesterLocaleContent } from '../index';
4
+
5
+ const slug = 'rainwater-calculator';
6
+ const title = '빗물 수집 계산기';
7
+ const description = '지붕에서 수집할 수 있는 빗물의 양을 계산하고 적절한 저장 탱크 용량을 산정해 보세요.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: '지붕에서 실제로 얼마나 많은 물을 모을 수 있나요?',
12
+ answer: '일반적인 규칙은 지붕 면적 1제곱미터당 강수량 1밀리미터당 약 1리터의 물을 모을 수 있다는 것입니다. 다만 증발이나 여과 과정에서 발생하는 손실을 "유출 계수"로 조정해야 합니다.',
13
+ },
14
+ {
15
+ question: '유출 계수란 무엇인가요?',
16
+ answer: '지붕 재질에 따라 물이 얼마나 손실되는지를 나타내는 백분율입니다. 금속이나 기와 지붕은 효율이 매우 높지만(0.85-0.95), 자갈이나 흙 지붕은 효율이 훨씬 낮습니다(0.1-0.3).',
17
+ },
18
+ {
19
+ question: '저장 탱크의 크기는 어떻게 결정하나요?',
20
+ answer: '한 달 동안 예상되는 최대 강수량을 계산하고 이를 예상 월간 소비량과 비교해야 합니다. 탱크가 너무 작으면 폭우 시 넘쳐흐르고, 너무 크면 불필요한 비용이 발생합니다.',
21
+ },
22
+ {
23
+ question: '수집된 빗물을 마셔도 안전한가요?',
24
+ answer: '직접 마시는 것은 안전하지 않습니다. 빗물에는 먼지, 새의 배설물, 공기 중의 입자가 포함되어 있습니다. 식용으로 사용하려면 침전 필터, 활성탄, UV 광선 또는 염소를 이용한 소독 과정을 거쳐야 합니다.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ {
30
+ name: '수평 면적 측정하기',
31
+ text: '지붕 바닥의 가로와 세로 길이를 측정합니다(경사면의 넓이가 아니라 바닥에 투영되는 넓이 기준).',
32
+ },
33
+ {
34
+ name: '지역 강수량 확인하기',
35
+ text: '기상청 홈페이지 등을 통해 해당 지역의 연간 또는 월간 평균 강수량(mm)을 확인합니다.',
36
+ },
37
+ {
38
+ name: '재질 효율 적용하기',
39
+ text: '계산기에서 지붕 재질을 선택하여 흡수나 열로 인해 손실될 물의 양을 차감합니다.',
40
+ },
41
+ {
42
+ name: '필요한 용량 계산하기',
43
+ text: '연간 리터 결과를 바탕으로 가뭄 시기에 대비해 전체 수확량의 최소 20-30%를 저장할 수 있는 탱크를 선택합니다.',
44
+ },
45
+ ];
46
+
47
+ const faqSchema: WithContext<FAQPage> = {
48
+ '@context': 'https://schema.org',
49
+ '@type': 'FAQPage',
50
+ mainEntity: faqData.map((item) => ({
51
+ '@type': 'Question',
52
+ name: item.question,
53
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
54
+ })),
55
+ };
56
+
57
+ const howToSchema: WithContext<HowTo> = {
58
+ '@context': 'https://schema.org',
59
+ '@type': 'HowTo',
60
+ name: title,
61
+ description,
62
+ step: howToData.map((step, i) => ({
63
+ '@type': 'HowToStep',
64
+ position: i + 1,
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: 'ko',
79
+ };
80
+
81
+ export const content: RainHarvesterLocaleContent = {
82
+ slug,
83
+ title,
84
+ description,
85
+ ui: {
86
+ headInputs: '지붕 설정',
87
+ headResults: '수집 잠재량',
88
+ labelArea: '지붕 면적',
89
+ labelRainfall: '연간 강수량',
90
+ labelMaterial: '지붕 재질',
91
+ unitM2: 'm²',
92
+ unitMm: 'mm',
93
+ unitLiters: '리터',
94
+ helpRainfall: '잘 모르시나요? 구글에 "(해당 도시명) 연평균 강수량"을 검색해 보세요.',
95
+ efficiencyTitle: '효율 계수',
96
+ efficiencyNote: '필터 및 증발로 인한 10%의 손실이 적용됩니다.',
97
+ resultTitle: '연간 수집 잠재량',
98
+ equivalenciesTitle: '실질적 활용 예시',
99
+ labelFlushes: '변기 물 내림 횟수',
100
+ labelShowers: '샤워 횟수(10분 기준)',
101
+ labelGarden: '정원 물 주기',
102
+ gardenArea: '(50m²)',
103
+ materialMetal: '금속 / 유약 기와',
104
+ materialClay: '전통 기와 / 점토',
105
+ materialConcrete: '콘크리트 / 아스팔트',
106
+ materialGravel: '자갈 / 녹색 지붕',
107
+ },
108
+ seo: [
109
+ {
110
+ type: 'title',
111
+ text: '빗물 수집: 자급자족과 지속 가능성',
112
+ level: 2,
113
+ },
114
+ {
115
+ type: 'paragraph',
116
+ html: '많은 주택 소유자들이 자신의 지붕이 가진 잠재력을 알지 못합니다. 표준 지붕은 매년 수천 리터의 물을 무료로 모을 수 있습니다. 이 도구는 그 잠재력을 수치화하여 여러분이 정확히 얼마나 많은 물을 "수확"할 수 있는지 계산하고 저장에 필요한 이상적인 탱크 크기를 결정할 수 있게 해줍니다.',
117
+ },
118
+ {
119
+ type: 'title',
120
+ text: '계산 로직',
121
+ level: 3,
122
+ },
123
+ {
124
+ type: 'paragraph',
125
+ html: '빗물 수집을 위한 기본 공식은 간단하지만 강력합니다.',
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: '<code style="display:block;padding:1rem;background:var(-bg-alt);border-radius:0.5rem;margin:1rem 0;font-family:monospace;">용량 = 면적 × 강수량 × 유출 계수 × 필터 효율</code>',
130
+ },
131
+ {
132
+ type: 'list',
133
+ items: [
134
+ '<strong>면적:</strong> 지붕 투영 면적(가로 × 세로).',
135
+ '<strong>강수량:</strong> 밀리미터 단위의 강우량.',
136
+ '<strong>계수:</strong> 지붕에서 흡수 등으로 손실되는 물의 양.',
137
+ '<strong>효율:</strong> 탱크 도달 전 필터에서 발생하는 손실(약 10%).',
138
+ ],
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: '왜 빗물을 수집하나요?',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ items: [
148
+ '<strong>절약:</strong> 수도 요금을 크게 줄일 수 있습니다.',
149
+ '<strong>원예:</strong> 식물은 염소나 석회가 없는 물을 좋아합니다.',
150
+ '<strong>회복력:</strong> 단수 시 비상용 물을 확보할 수 있습니다.',
151
+ ],
152
+ },
153
+ {
154
+ type: 'title',
155
+ text: '탱크 용량 산정',
156
+ level: 2,
157
+ },
158
+ {
159
+ type: 'paragraph',
160
+ html: '가장 흔한 실수는 예산에만 맞춰 탱크를 사는 것입니다. 너무 작으면 넘쳐서 물을 낭비하게 되고, 너무 크면 불필요한 비용을 쓰게 됩니다. 일반적인 규칙은 해당 지역 평균 강수량의 <strong>3개월분</strong>을 저장할 수 있는 용량을 확보하여 건기를 대비하는 것입니다.',
161
+ },
162
+ ],
163
+ faq: faqData,
164
+ howTo: howToData,
165
+ bibliography,
166
+ schemas: [faqSchema, howToSchema, appSchema],
167
+ };