@jjlmoya/utils-science 1.51.0 → 1.52.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 +2 -2
- package/src/category/i18n/es.ts +3 -4
- package/src/category/i18n/fr.ts +2 -2
- package/src/category/i18n/it.ts +2 -2
- package/src/category/i18n/pt.ts +2 -2
- package/src/category/index.ts +25 -25
- package/src/components/PreviewNavSidebar.astro +1 -1
- package/src/components/PreviewToolbar.astro +1 -1
- package/src/data.ts +1 -1
- package/src/env.d.ts +1 -1
- package/src/layouts/PreviewLayout.astro +1 -1
- package/src/pages/index.astro +1 -1
- package/src/tests/bibliography_wellformed_export.test.ts +46 -0
- package/src/tests/category_seo_quality.test.ts +76 -0
- package/src/tests/faq_count.test.ts +19 -19
- package/src/tests/i18n_coverage.test.ts +36 -36
- package/src/tests/mocks/astro_mock.js +1 -1
- package/src/tests/no_h1_in_components.test.ts +1 -1
- package/src/tests/script_density.test.ts +94 -94
- package/src/tests/seo_length.test.ts +24 -24
- package/src/tests/seo_parity.test.ts +5 -5
- package/src/tests/seo_translation_completeness.test.ts +76 -0
- package/src/tests/seo_wellformed_export.test.ts +65 -0
- package/src/tests/spanish_leakage.test.ts +175 -175
- package/src/tool/asteroid-impact/component.astro +251 -251
- package/src/tool/asteroid-impact/helpers.ts +17 -17
- package/src/tool/asteroid-impact/i18n/de.ts +2 -2
- package/src/tool/asteroid-impact/i18n/en.ts +2 -2
- package/src/tool/asteroid-impact/i18n/es.ts +2 -2
- package/src/tool/asteroid-impact/i18n/fr.ts +2 -2
- package/src/tool/asteroid-impact/i18n/id.ts +2 -2
- package/src/tool/asteroid-impact/i18n/it.ts +2 -2
- package/src/tool/asteroid-impact/i18n/ja.ts +2 -2
- package/src/tool/asteroid-impact/i18n/ko.ts +2 -2
- package/src/tool/asteroid-impact/i18n/nl.ts +2 -2
- package/src/tool/asteroid-impact/i18n/pl.ts +2 -2
- package/src/tool/asteroid-impact/i18n/pt.ts +2 -2
- package/src/tool/asteroid-impact/i18n/ru.ts +2 -2
- package/src/tool/asteroid-impact/i18n/sv.ts +2 -2
- package/src/tool/asteroid-impact/i18n/tr.ts +2 -2
- package/src/tool/asteroid-impact/i18n/zh.ts +2 -2
- package/src/tool/asteroid-impact/script.ts +262 -262
- package/src/tool/asteroid-impact/seo.astro +15 -15
- package/src/tool/asteroid-impact/ui.ts +69 -69
- package/src/tool/black-hole-event-horizon-simulator/i18n/de.ts +249 -241
- package/src/tool/black-hole-event-horizon-simulator/i18n/fr.ts +252 -247
- package/src/tool/black-hole-event-horizon-simulator/i18n/id.ts +259 -259
- package/src/tool/black-hole-event-horizon-simulator/i18n/it.ts +255 -252
- package/src/tool/black-hole-event-horizon-simulator/i18n/ja.ts +254 -252
- package/src/tool/black-hole-event-horizon-simulator/i18n/ko.ts +258 -258
- package/src/tool/black-hole-event-horizon-simulator/i18n/nl.ts +256 -252
- package/src/tool/black-hole-event-horizon-simulator/i18n/pl.ts +258 -258
- package/src/tool/black-hole-event-horizon-simulator/i18n/pt.ts +256 -252
- package/src/tool/black-hole-event-horizon-simulator/i18n/ru.ts +258 -258
- package/src/tool/black-hole-event-horizon-simulator/i18n/sv.ts +257 -252
- package/src/tool/black-hole-event-horizon-simulator/i18n/tr.ts +256 -251
- package/src/tool/black-hole-event-horizon-simulator/i18n/zh.ts +261 -252
- package/src/tool/cellular-renewal/component.astro +126 -126
- package/src/tool/cellular-renewal/i18n/de.ts +1 -1
- package/src/tool/cellular-renewal/i18n/en.ts +1 -1
- package/src/tool/cellular-renewal/i18n/es.ts +1 -1
- package/src/tool/cellular-renewal/i18n/fr.ts +1 -1
- package/src/tool/cellular-renewal/i18n/id.ts +1 -1
- package/src/tool/cellular-renewal/i18n/it.ts +1 -1
- package/src/tool/cellular-renewal/i18n/ja.ts +1 -1
- package/src/tool/cellular-renewal/i18n/ko.ts +1 -1
- package/src/tool/cellular-renewal/i18n/nl.ts +1 -1
- package/src/tool/cellular-renewal/i18n/pl.ts +1 -1
- package/src/tool/cellular-renewal/i18n/pt.ts +1 -1
- package/src/tool/cellular-renewal/i18n/ru.ts +1 -1
- package/src/tool/cellular-renewal/i18n/sv.ts +1 -1
- package/src/tool/cellular-renewal/i18n/tr.ts +1 -1
- package/src/tool/cellular-renewal/i18n/zh.ts +1 -1
- package/src/tool/cellular-renewal/seo.astro +15 -15
- package/src/tool/colony-counter/i18n/de.ts +1 -1
- package/src/tool/colony-counter/i18n/en.ts +1 -1
- package/src/tool/colony-counter/i18n/es.ts +1 -1
- package/src/tool/colony-counter/i18n/fr.ts +1 -1
- package/src/tool/colony-counter/i18n/id.ts +1 -1
- package/src/tool/colony-counter/i18n/it.ts +1 -1
- package/src/tool/colony-counter/i18n/ja.ts +1 -1
- package/src/tool/colony-counter/i18n/ko.ts +1 -1
- package/src/tool/colony-counter/i18n/nl.ts +1 -1
- package/src/tool/colony-counter/i18n/pl.ts +1 -1
- package/src/tool/colony-counter/i18n/pt.ts +1 -1
- package/src/tool/colony-counter/i18n/ru.ts +1 -1
- package/src/tool/colony-counter/i18n/sv.ts +1 -1
- package/src/tool/colony-counter/i18n/tr.ts +1 -1
- package/src/tool/colony-counter/i18n/zh.ts +1 -1
- package/src/tool/colony-counter/seo.astro +15 -15
- package/src/tool/conway-life-rule-lab/component.astro +1 -1
- package/src/tool/conway-life-rule-lab/i18n/de.ts +145 -141
- package/src/tool/conway-life-rule-lab/i18n/es.ts +146 -142
- package/src/tool/conway-life-rule-lab/i18n/fr.ts +146 -142
- package/src/tool/conway-life-rule-lab/i18n/id.ts +146 -145
- package/src/tool/conway-life-rule-lab/i18n/it.ts +146 -145
- package/src/tool/conway-life-rule-lab/i18n/ja.ts +146 -145
- package/src/tool/conway-life-rule-lab/i18n/ko.ts +146 -145
- package/src/tool/conway-life-rule-lab/i18n/nl.ts +147 -145
- package/src/tool/conway-life-rule-lab/i18n/pl.ts +147 -145
- package/src/tool/conway-life-rule-lab/i18n/pt.ts +147 -145
- package/src/tool/conway-life-rule-lab/i18n/ru.ts +147 -145
- package/src/tool/conway-life-rule-lab/i18n/sv.ts +147 -145
- package/src/tool/conway-life-rule-lab/i18n/tr.ts +147 -145
- package/src/tool/conway-life-rule-lab/i18n/zh.ts +147 -145
- package/src/tool/conway-life-rule-lab/logic/LifeLabRuntime.ts +2 -2
- package/src/tool/cosmic-inflation/i18n/ru.ts +105 -105
- package/src/tool/crystal-lattice-structure-finder/i18n/de.ts +217 -217
- package/src/tool/crystal-lattice-structure-finder/i18n/en.ts +1 -1
- package/src/tool/crystal-lattice-structure-finder/i18n/es.ts +217 -217
- package/src/tool/crystal-lattice-structure-finder/i18n/fr.ts +217 -217
- package/src/tool/crystal-lattice-structure-finder/i18n/id.ts +217 -217
- package/src/tool/crystal-lattice-structure-finder/i18n/it.ts +217 -217
- package/src/tool/crystal-lattice-structure-finder/i18n/ja.ts +217 -217
- package/src/tool/crystal-lattice-structure-finder/i18n/ko.ts +217 -217
- package/src/tool/crystal-lattice-structure-finder/i18n/nl.ts +217 -217
- package/src/tool/crystal-lattice-structure-finder/i18n/pl.ts +217 -217
- package/src/tool/crystal-lattice-structure-finder/i18n/pt.ts +217 -217
- package/src/tool/crystal-lattice-structure-finder/i18n/ru.ts +217 -217
- package/src/tool/crystal-lattice-structure-finder/i18n/sv.ts +217 -217
- package/src/tool/crystal-lattice-structure-finder/i18n/tr.ts +217 -217
- package/src/tool/crystal-lattice-structure-finder/i18n/zh.ts +217 -217
- package/src/tool/double-slit-decoherence/i18n/de.ts +181 -181
- package/src/tool/double-slit-decoherence/i18n/fr.ts +180 -180
- package/src/tool/double-slit-decoherence/i18n/id.ts +181 -181
- package/src/tool/double-slit-decoherence/i18n/it.ts +180 -180
- package/src/tool/double-slit-decoherence/i18n/ja.ts +181 -181
- package/src/tool/double-slit-decoherence/i18n/ko.ts +181 -181
- package/src/tool/double-slit-decoherence/i18n/nl.ts +181 -181
- package/src/tool/double-slit-decoherence/i18n/pl.ts +181 -181
- package/src/tool/double-slit-decoherence/i18n/pt.ts +178 -174
- package/src/tool/double-slit-decoherence/i18n/ru.ts +180 -180
- package/src/tool/double-slit-decoherence/i18n/sv.ts +176 -172
- package/src/tool/double-slit-decoherence/i18n/tr.ts +180 -180
- package/src/tool/double-slit-decoherence/i18n/zh.ts +181 -181
- package/src/tool/dyson-sphere-energy-capture/component.astro +253 -253
- package/src/tool/dyson-sphere-energy-capture/i18n/de.ts +194 -194
- package/src/tool/dyson-sphere-energy-capture/i18n/en.ts +6 -6
- package/src/tool/dyson-sphere-energy-capture/i18n/es.ts +6 -6
- package/src/tool/dyson-sphere-energy-capture/i18n/fr.ts +194 -194
- package/src/tool/dyson-sphere-energy-capture/i18n/id.ts +195 -195
- package/src/tool/dyson-sphere-energy-capture/i18n/it.ts +194 -194
- package/src/tool/dyson-sphere-energy-capture/i18n/ja.ts +194 -190
- package/src/tool/dyson-sphere-energy-capture/i18n/ko.ts +194 -193
- package/src/tool/dyson-sphere-energy-capture/i18n/nl.ts +197 -197
- package/src/tool/dyson-sphere-energy-capture/i18n/pl.ts +168 -166
- package/src/tool/dyson-sphere-energy-capture/i18n/pt.ts +194 -193
- package/src/tool/dyson-sphere-energy-capture/i18n/ru.ts +195 -193
- package/src/tool/dyson-sphere-energy-capture/i18n/sv.ts +195 -193
- package/src/tool/dyson-sphere-energy-capture/i18n/tr.ts +168 -166
- package/src/tool/dyson-sphere-energy-capture/i18n/zh.ts +194 -193
- package/src/tool/epidemic-sir-simulator/i18n/de.ts +347 -347
- package/src/tool/epidemic-sir-simulator/i18n/es.ts +347 -347
- package/src/tool/epidemic-sir-simulator/i18n/fr.ts +347 -347
- package/src/tool/epidemic-sir-simulator/i18n/it.ts +346 -346
- package/src/tool/epidemic-sir-simulator/i18n/nl.ts +347 -347
- package/src/tool/epidemic-sir-simulator/i18n/ru.ts +347 -347
- package/src/tool/epidemic-sir-simulator/i18n/sv.ts +347 -347
- package/src/tool/epidemic-sir-simulator/i18n/zh.ts +347 -347
- package/src/tool/exoplanet-biosignature-detector/i18n/de.ts +186 -186
- package/src/tool/exoplanet-biosignature-detector/i18n/en.ts +195 -195
- package/src/tool/exoplanet-biosignature-detector/i18n/es.ts +194 -194
- package/src/tool/exoplanet-biosignature-detector/i18n/fr.ts +183 -183
- package/src/tool/exoplanet-biosignature-detector/i18n/id.ts +193 -193
- package/src/tool/exoplanet-biosignature-detector/i18n/it.ts +194 -194
- package/src/tool/exoplanet-biosignature-detector/i18n/ja.ts +194 -194
- package/src/tool/exoplanet-biosignature-detector/i18n/ko.ts +194 -194
- package/src/tool/exoplanet-biosignature-detector/i18n/nl.ts +194 -194
- package/src/tool/exoplanet-biosignature-detector/i18n/pl.ts +144 -144
- package/src/tool/exoplanet-biosignature-detector/i18n/pt.ts +146 -146
- package/src/tool/exoplanet-biosignature-detector/i18n/ru.ts +143 -143
- package/src/tool/exoplanet-biosignature-detector/i18n/sv.ts +144 -144
- package/src/tool/exoplanet-biosignature-detector/i18n/tr.ts +145 -145
- package/src/tool/exoplanet-biosignature-detector/i18n/zh.ts +194 -194
- package/src/tool/global-albedo-snowball-simulator/component.astro +1 -1
- package/src/tool/global-albedo-snowball-simulator/i18n/de.ts +169 -169
- package/src/tool/global-albedo-snowball-simulator/i18n/fr.ts +169 -169
- package/src/tool/global-albedo-snowball-simulator/i18n/id.ts +169 -169
- package/src/tool/global-albedo-snowball-simulator/i18n/it.ts +87 -87
- package/src/tool/global-albedo-snowball-simulator/i18n/ja.ts +87 -87
- package/src/tool/global-albedo-snowball-simulator/i18n/ko.ts +169 -169
- package/src/tool/global-albedo-snowball-simulator/i18n/nl.ts +169 -169
- package/src/tool/global-albedo-snowball-simulator/i18n/pl.ts +169 -169
- package/src/tool/global-albedo-snowball-simulator/i18n/pt.ts +169 -169
- package/src/tool/global-albedo-snowball-simulator/i18n/ru.ts +165 -161
- package/src/tool/global-albedo-snowball-simulator/i18n/sv.ts +169 -169
- package/src/tool/global-albedo-snowball-simulator/i18n/tr.ts +169 -169
- package/src/tool/global-albedo-snowball-simulator/i18n/zh.ts +169 -169
- package/src/tool/lorenz-attractor/i18n/de.ts +144 -143
- package/src/tool/lorenz-attractor/i18n/fr.ts +144 -144
- package/src/tool/lorenz-attractor/i18n/id.ts +149 -149
- package/src/tool/lorenz-attractor/i18n/it.ts +149 -149
- package/src/tool/lorenz-attractor/i18n/ja.ts +149 -149
- package/src/tool/lorenz-attractor/i18n/ko.ts +149 -149
- package/src/tool/lorenz-attractor/i18n/nl.ts +149 -149
- package/src/tool/lorenz-attractor/i18n/pl.ts +149 -149
- package/src/tool/lorenz-attractor/i18n/pt.ts +142 -141
- package/src/tool/lorenz-attractor/i18n/ru.ts +149 -149
- package/src/tool/lorenz-attractor/i18n/sv.ts +149 -149
- package/src/tool/lorenz-attractor/i18n/tr.ts +149 -149
- package/src/tool/lorenz-attractor/i18n/zh.ts +149 -149
- package/src/tool/mandelbrot-fractal/i18n/de.ts +158 -158
- package/src/tool/mandelbrot-fractal/i18n/fr.ts +158 -158
- package/src/tool/mandelbrot-fractal/i18n/id.ts +159 -159
- package/src/tool/mandelbrot-fractal/i18n/it.ts +155 -151
- package/src/tool/mandelbrot-fractal/i18n/ja.ts +159 -159
- package/src/tool/mandelbrot-fractal/i18n/ko.ts +159 -159
- package/src/tool/mandelbrot-fractal/i18n/nl.ts +159 -159
- package/src/tool/mandelbrot-fractal/i18n/pl.ts +157 -153
- package/src/tool/mandelbrot-fractal/i18n/pt.ts +158 -158
- package/src/tool/mandelbrot-fractal/i18n/ru.ts +159 -159
- package/src/tool/mandelbrot-fractal/i18n/sv.ts +159 -150
- package/src/tool/mandelbrot-fractal/i18n/tr.ts +159 -159
- package/src/tool/mandelbrot-fractal/i18n/zh.ts +159 -159
- package/src/tool/microwave-detector/component.astro +238 -238
- package/src/tool/microwave-detector/i18n/de.ts +1 -1
- package/src/tool/microwave-detector/i18n/en.ts +1 -1
- package/src/tool/microwave-detector/i18n/es.ts +1 -1
- package/src/tool/microwave-detector/i18n/fr.ts +1 -1
- package/src/tool/microwave-detector/i18n/id.ts +1 -1
- package/src/tool/microwave-detector/i18n/it.ts +1 -1
- package/src/tool/microwave-detector/i18n/ja.ts +1 -1
- package/src/tool/microwave-detector/i18n/ko.ts +1 -1
- package/src/tool/microwave-detector/i18n/nl.ts +1 -1
- package/src/tool/microwave-detector/i18n/pl.ts +1 -1
- package/src/tool/microwave-detector/i18n/pt.ts +1 -1
- package/src/tool/microwave-detector/i18n/ru.ts +1 -1
- package/src/tool/microwave-detector/i18n/sv.ts +1 -1
- package/src/tool/microwave-detector/i18n/tr.ts +1 -1
- package/src/tool/microwave-detector/i18n/zh.ts +1 -1
- package/src/tool/microwave-detector/seo.astro +15 -15
- package/src/tool/natural-selection-drift/component.astro +135 -135
- package/src/tool/natural-selection-drift/i18n/de.ts +164 -160
- package/src/tool/natural-selection-drift/i18n/fr.ts +204 -204
- package/src/tool/natural-selection-drift/i18n/id.ts +156 -154
- package/src/tool/natural-selection-drift/i18n/it.ts +197 -193
- package/src/tool/natural-selection-drift/i18n/ja.ts +155 -154
- package/src/tool/natural-selection-drift/i18n/ko.ts +155 -154
- package/src/tool/natural-selection-drift/i18n/nl.ts +164 -163
- package/src/tool/natural-selection-drift/i18n/pl.ts +168 -166
- package/src/tool/natural-selection-drift/i18n/pt.ts +200 -195
- package/src/tool/natural-selection-drift/i18n/ru.ts +186 -184
- package/src/tool/natural-selection-drift/i18n/sv.ts +157 -154
- package/src/tool/natural-selection-drift/i18n/tr.ts +186 -184
- package/src/tool/natural-selection-drift/i18n/zh.ts +160 -154
- package/src/tool/natural-selection-drift/natural-selection-drift.css +563 -563
- package/src/tool/phase-diagram-critical-points/i18n/de.ts +178 -178
- package/src/tool/phase-diagram-critical-points/i18n/fr.ts +178 -178
- package/src/tool/phase-diagram-critical-points/i18n/id.ts +179 -179
- package/src/tool/phase-diagram-critical-points/i18n/it.ts +179 -179
- package/src/tool/phase-diagram-critical-points/i18n/ja.ts +179 -179
- package/src/tool/phase-diagram-critical-points/i18n/ko.ts +179 -179
- package/src/tool/phase-diagram-critical-points/i18n/nl.ts +179 -179
- package/src/tool/phase-diagram-critical-points/i18n/pl.ts +179 -179
- package/src/tool/phase-diagram-critical-points/i18n/pt.ts +179 -179
- package/src/tool/phase-diagram-critical-points/i18n/ru.ts +179 -179
- package/src/tool/phase-diagram-critical-points/i18n/sv.ts +179 -179
- package/src/tool/phase-diagram-critical-points/i18n/tr.ts +179 -179
- package/src/tool/phase-diagram-critical-points/i18n/zh.ts +179 -179
- package/src/tool/planet-atmosphere-survival/i18n/de.ts +255 -255
- package/src/tool/planet-atmosphere-survival/i18n/fr.ts +255 -255
- package/src/tool/planet-atmosphere-survival/i18n/id.ts +255 -255
- package/src/tool/planet-atmosphere-survival/i18n/it.ts +255 -255
- package/src/tool/planet-atmosphere-survival/i18n/ja.ts +255 -255
- package/src/tool/planet-atmosphere-survival/i18n/ko.ts +255 -255
- package/src/tool/planet-atmosphere-survival/i18n/nl.ts +255 -255
- package/src/tool/planet-atmosphere-survival/i18n/pl.ts +255 -255
- package/src/tool/planet-atmosphere-survival/i18n/pt.ts +255 -255
- package/src/tool/planet-atmosphere-survival/i18n/ru.ts +227 -223
- package/src/tool/planet-atmosphere-survival/i18n/sv.ts +255 -255
- package/src/tool/planet-atmosphere-survival/i18n/tr.ts +255 -255
- package/src/tool/planet-atmosphere-survival/i18n/zh.ts +255 -255
- package/src/tool/radioactive-decay/i18n/de.ts +168 -164
- package/src/tool/radioactive-decay/i18n/fr.ts +76 -75
- package/src/tool/radioactive-decay/i18n/id.ts +169 -165
- package/src/tool/radioactive-decay/i18n/it.ts +76 -74
- package/src/tool/radioactive-decay/i18n/ja.ts +168 -167
- package/src/tool/radioactive-decay/i18n/ko.ts +168 -167
- package/src/tool/radioactive-decay/i18n/nl.ts +170 -168
- package/src/tool/radioactive-decay/i18n/pl.ts +170 -168
- package/src/tool/radioactive-decay/i18n/pt.ts +169 -167
- package/src/tool/radioactive-decay/i18n/ru.ts +170 -168
- package/src/tool/radioactive-decay/i18n/sv.ts +170 -168
- package/src/tool/radioactive-decay/i18n/tr.ts +171 -168
- package/src/tool/radioactive-decay/i18n/zh.ts +171 -167
- package/src/tool/roche-limit-satellite-disruption/i18n/de.ts +241 -241
- package/src/tool/roche-limit-satellite-disruption/i18n/fr.ts +241 -241
- package/src/tool/roche-limit-satellite-disruption/i18n/id.ts +241 -241
- package/src/tool/roche-limit-satellite-disruption/i18n/it.ts +241 -241
- package/src/tool/roche-limit-satellite-disruption/i18n/ja.ts +241 -241
- package/src/tool/roche-limit-satellite-disruption/i18n/ko.ts +241 -241
- package/src/tool/roche-limit-satellite-disruption/i18n/nl.ts +241 -241
- package/src/tool/roche-limit-satellite-disruption/i18n/pl.ts +237 -229
- package/src/tool/roche-limit-satellite-disruption/i18n/pt.ts +241 -241
- package/src/tool/roche-limit-satellite-disruption/i18n/ru.ts +241 -241
- package/src/tool/roche-limit-satellite-disruption/i18n/sv.ts +241 -241
- package/src/tool/roche-limit-satellite-disruption/i18n/tr.ts +241 -241
- package/src/tool/roche-limit-satellite-disruption/i18n/zh.ts +241 -241
- package/src/tool/simulation-probability/component.astro +138 -138
- package/src/tool/simulation-probability/i18n/de.ts +1 -1
- package/src/tool/simulation-probability/i18n/en.ts +1 -1
- package/src/tool/simulation-probability/i18n/es.ts +1 -1
- package/src/tool/simulation-probability/i18n/fr.ts +1 -1
- package/src/tool/simulation-probability/i18n/id.ts +1 -1
- package/src/tool/simulation-probability/i18n/it.ts +1 -1
- package/src/tool/simulation-probability/i18n/ja.ts +1 -1
- package/src/tool/simulation-probability/i18n/ko.ts +1 -1
- package/src/tool/simulation-probability/i18n/nl.ts +1 -1
- package/src/tool/simulation-probability/i18n/pl.ts +1 -1
- package/src/tool/simulation-probability/i18n/pt.ts +1 -1
- package/src/tool/simulation-probability/i18n/ru.ts +1 -1
- package/src/tool/simulation-probability/i18n/sv.ts +1 -1
- package/src/tool/simulation-probability/i18n/tr.ts +1 -1
- package/src/tool/simulation-probability/i18n/zh.ts +1 -1
- package/src/tool/simulation-probability/seo.astro +15 -15
- package/src/tool/stellar-habitability-zone/i18n/ru.ts +189 -189
- package/src/tool/temperature-timeline/i18n/de.ts +2 -1
- package/src/tool/temperature-timeline/i18n/fr.ts +177 -177
- package/src/tool/temperature-timeline/i18n/it.ts +142 -141
- package/src/tool/temperature-timeline/i18n/pt.ts +3 -1
- package/src/tool/temperature-timeline/i18n/ru.ts +116 -114
- package/src/tool/three-body-problem/app.ts +4 -4
- package/src/tool/three-body-problem/component.astro +6 -6
- package/src/tool/twin-paradox-visualizer/i18n/de.ts +168 -168
- package/src/tool/twin-paradox-visualizer/i18n/es.ts +165 -165
- package/src/tool/twin-paradox-visualizer/i18n/fr.ts +168 -168
- package/src/tool/twin-paradox-visualizer/i18n/id.ts +168 -168
- package/src/tool/twin-paradox-visualizer/i18n/it.ts +168 -168
- package/src/tool/twin-paradox-visualizer/i18n/ja.ts +168 -168
- package/src/tool/twin-paradox-visualizer/i18n/ko.ts +168 -168
- package/src/tool/twin-paradox-visualizer/i18n/nl.ts +168 -168
- package/src/tool/twin-paradox-visualizer/i18n/pl.ts +168 -168
- package/src/tool/twin-paradox-visualizer/i18n/pt.ts +164 -160
- package/src/tool/twin-paradox-visualizer/i18n/ru.ts +168 -168
- package/src/tool/twin-paradox-visualizer/i18n/sv.ts +168 -168
- package/src/tool/twin-paradox-visualizer/i18n/tr.ts +168 -168
- package/src/tool/twin-paradox-visualizer/i18n/zh.ts +168 -168
- package/src/types.ts +1 -1
|
@@ -1,186 +1,188 @@
|
|
|
1
|
-
import { bibliography } from '../bibliography';
|
|
2
|
-
import type { NaturalSelectionLocaleContent } from '../entry';
|
|
3
|
-
|
|
4
|
-
const slug = 'simulyator-estestvennogo-otbora-i-geneticheskogo-dreyfa';
|
|
5
|
-
const title = 'Симулятор естественного отбора и генетического дрейфа';
|
|
6
|
-
const description =
|
|
7
|
-
'В реальном времени наблюдайте, как давление отбора, мутации, дрейф и размножение меняют частоты аллелей.';
|
|
8
|
-
|
|
9
|
-
const howTo = [
|
|
10
|
-
{ name: 'Задать популяцию', text: 'Выберите малую или большую популяцию, чтобы увидеть влияние размера выборки.' },
|
|
11
|
-
{ name: 'Настроить отбор и дрейф', text: 'Увеличьте давление отбора или дрейф, чтобы увидеть другие пути эволюции.' },
|
|
12
|
-
{ name: 'Наблюдать поколения', text: 'Запустите симуляцию и сравните доминантный признак, приспособленность и разнообразие.' },
|
|
13
|
-
{ name: 'Интерпретировать результаты', text: 'Используйте метрики, чтобы понять, когда побеждает адаптация, а когда преобладает случайность.' },
|
|
14
|
-
];
|
|
15
|
-
|
|
16
|
-
const faq = [
|
|
17
|
-
{
|
|
18
|
-
question: 'В чем разница между естественным отбором и генетическим дрейфом?',
|
|
19
|
-
answer: 'Естественный отбор: это неслучайный процесс, при котором полезные признаки становятся более распространенными. Генетический дрейф: это случайное изменение частот аллелей в популяции.',
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
question: 'Почему маленькие популяции меняются быстрее?',
|
|
23
|
-
answer: 'При малой численности случайные факторы оказывают более сильное влияние на следующее поколение.',
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
question: 'Может ли дрейф преодолеть отбор?',
|
|
27
|
-
answer: 'Да. Полезный признак может исчезнуть случайно, если дрейф достаточно силен.',
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
question: 'Что означает приспособленность (fitness) в симуляторе?',
|
|
31
|
-
answer: 'Приспособленность: это упрощенный показатель того, насколько хорошо популяция адаптирована к среде.',
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
question: 'Почему размер популяции так важен?',
|
|
35
|
-
answer: 'Он определяет, насколько сильно случайные колебания влияют на частоты аллелей.',
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
question: 'Когда следует использовать этот симулятор?',
|
|
39
|
-
answer: 'Когда вы хотите понять интуицию эволюции, особенно различие между отбором и дрейфом.',
|
|
40
|
-
},
|
|
41
|
-
];
|
|
42
|
-
|
|
43
|
-
export const content: NaturalSelectionLocaleContent = {
|
|
44
|
-
slug,
|
|
45
|
-
title,
|
|
46
|
-
description,
|
|
47
|
-
ui: {
|
|
48
|
-
population: 'Размер популяции',
|
|
49
|
-
generations: 'Поколения',
|
|
50
|
-
mutationRate: 'Частота мутаций',
|
|
51
|
-
selectionPressure: 'Давление отбора',
|
|
52
|
-
driftIntensity: 'Сила дрейфа',
|
|
53
|
-
alleleCount: 'Начальные аллели',
|
|
54
|
-
innovationRate: 'Частота инноваций',
|
|
55
|
-
run: 'Запустить симуляцию',
|
|
56
|
-
dominantTrait: 'Доминантный признак',
|
|
57
|
-
fitness: 'Итоговая приспособленность',
|
|
58
|
-
diversity: 'Генетическое разнообразие',
|
|
59
|
-
evolutionConsole: 'Эволюционная консоль',
|
|
60
|
-
populationLabel: 'Популяция',
|
|
61
|
-
aliveLabel: 'живых',
|
|
62
|
-
alleleCountsLabel: 'Счетчик аллелей',
|
|
63
|
-
alleleDefault: 'Аллель 1',
|
|
64
|
-
populationValueLabel: 'Популяция',
|
|
65
|
-
},
|
|
66
|
-
seo: [
|
|
67
|
-
{
|
|
68
|
-
type: 'title',
|
|
69
|
-
text: 'Естественный отбор vs. Генетический дрейф: Понять эволюцию на живой популяции',
|
|
70
|
-
level: 2,
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
type: 'paragraph',
|
|
74
|
-
html:
|
|
75
|
-
'Если вы хотите понять разницу между естественным отбором и генетическим дрейфом, этот симулятор предоставляет необходимый визуальный слой. Вместо чтения статических определений вы наблюдаете за популяцией в реальном времени.',
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
type: 'title',
|
|
79
|
-
text: 'Что означают регуляторы и почему они важны',
|
|
80
|
-
level: 3,
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
type: 'paragraph',
|
|
84
|
-
html:
|
|
85
|
-
'Естественный отбор: это неслучайная часть эволюции. Он увеличивает частоту признаков, улучшающих выживание. Генетический дрейф: случайная часть.',
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
type: 'paragraph',
|
|
89
|
-
html:
|
|
90
|
-
'Обе силы действуют одновременно: в больших популяциях обычно преобладает отбор, тогда как в малых случайность может уничтожить полезные признаки.',
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
type: 'title',
|
|
94
|
-
text: 'Как читать результаты симуляции',
|
|
95
|
-
level: 3,
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
type: 'paragraph',
|
|
99
|
-
html:
|
|
100
|
-
'Метрики в реальном времени показывают доминантный признак, генетическое разнообразие, итоговую приспособленность и состояние популяции.',
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
type: 'title',
|
|
104
|
-
text: 'Почему размер популяции меняет историю',
|
|
105
|
-
level: 3,
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
type: 'list',
|
|
109
|
-
items: [
|
|
110
|
-
'<strong>Давление отбора:</strong> Насколько сильно среда благоприятствует признаку.',
|
|
111
|
-
'<strong>Сила дрейфа:</strong> Случайный шум выборки.',
|
|
112
|
-
'<strong>Частота мутаций:</strong> Появление новых вариантов.',
|
|
113
|
-
'<strong>Число аллелей:</strong> Начальное разнообразие.',
|
|
114
|
-
'<strong>Генетическое разнообразие:</strong> Сырье для эволюции.',
|
|
115
|
-
],
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
type: 'paragraph',
|
|
119
|
-
html:
|
|
120
|
-
'Практический инструмент для понимания отбора, дрейфа и мутаций в биологических системах.',
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
type: 'title',
|
|
124
|
-
text: 'Быстрые примеры для проверки',
|
|
125
|
-
level: 3,
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
type: 'table',
|
|
129
|
-
headers: ['Цель', 'Изменение', 'Ожидаемый результат'],
|
|
130
|
-
rows: [
|
|
131
|
-
[
|
|
132
|
-
'Показать отбор',
|
|
133
|
-
'Увеличить отбор и уменьшить дрейф',
|
|
134
|
-
'Один аллель постепенно доминирует',
|
|
135
|
-
],
|
|
136
|
-
[
|
|
137
|
-
'Показать дрейф',
|
|
138
|
-
'Уменьшить популяцию и увеличить дрейф',
|
|
139
|
-
'Случайные колебания частот аллелей',
|
|
140
|
-
],
|
|
141
|
-
[
|
|
142
|
-
'Показать мутации',
|
|
143
|
-
'Увеличить частоту мутаций',
|
|
144
|
-
'Регулярно появляются новые аллели',
|
|
145
|
-
],
|
|
146
|
-
],
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
type: 'paragraph',
|
|
150
|
-
html:
|
|
151
|
-
'Сочетание наглядной визуализации и метрик упрощает понимание эволюционных процессов.',
|
|
152
|
-
},
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { NaturalSelectionLocaleContent } from '../entry';
|
|
3
|
+
|
|
4
|
+
const slug = 'simulyator-estestvennogo-otbora-i-geneticheskogo-dreyfa';
|
|
5
|
+
const title = 'Симулятор естественного отбора и генетического дрейфа';
|
|
6
|
+
const description =
|
|
7
|
+
'В реальном времени наблюдайте, как давление отбора, мутации, дрейф и размножение меняют частоты аллелей.';
|
|
8
|
+
|
|
9
|
+
const howTo = [
|
|
10
|
+
{ name: 'Задать популяцию', text: 'Выберите малую или большую популяцию, чтобы увидеть влияние размера выборки.' },
|
|
11
|
+
{ name: 'Настроить отбор и дрейф', text: 'Увеличьте давление отбора или дрейф, чтобы увидеть другие пути эволюции.' },
|
|
12
|
+
{ name: 'Наблюдать поколения', text: 'Запустите симуляцию и сравните доминантный признак, приспособленность и разнообразие.' },
|
|
13
|
+
{ name: 'Интерпретировать результаты', text: 'Используйте метрики, чтобы понять, когда побеждает адаптация, а когда преобладает случайность.' },
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
const faq = [
|
|
17
|
+
{
|
|
18
|
+
question: 'В чем разница между естественным отбором и генетическим дрейфом?',
|
|
19
|
+
answer: 'Естественный отбор: это неслучайный процесс, при котором полезные признаки становятся более распространенными. Генетический дрейф: это случайное изменение частот аллелей в популяции.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Почему маленькие популяции меняются быстрее?',
|
|
23
|
+
answer: 'При малой численности случайные факторы оказывают более сильное влияние на следующее поколение.',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
question: 'Может ли дрейф преодолеть отбор?',
|
|
27
|
+
answer: 'Да. Полезный признак может исчезнуть случайно, если дрейф достаточно силен.',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
question: 'Что означает приспособленность (fitness) в симуляторе?',
|
|
31
|
+
answer: 'Приспособленность: это упрощенный показатель того, насколько хорошо популяция адаптирована к среде.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
question: 'Почему размер популяции так важен?',
|
|
35
|
+
answer: 'Он определяет, насколько сильно случайные колебания влияют на частоты аллелей.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: 'Когда следует использовать этот симулятор?',
|
|
39
|
+
answer: 'Когда вы хотите понять интуицию эволюции, особенно различие между отбором и дрейфом.',
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
export const content: NaturalSelectionLocaleContent = {
|
|
44
|
+
slug,
|
|
45
|
+
title,
|
|
46
|
+
description,
|
|
47
|
+
ui: {
|
|
48
|
+
population: 'Размер популяции',
|
|
49
|
+
generations: 'Поколения',
|
|
50
|
+
mutationRate: 'Частота мутаций',
|
|
51
|
+
selectionPressure: 'Давление отбора',
|
|
52
|
+
driftIntensity: 'Сила дрейфа',
|
|
53
|
+
alleleCount: 'Начальные аллели',
|
|
54
|
+
innovationRate: 'Частота инноваций',
|
|
55
|
+
run: 'Запустить симуляцию',
|
|
56
|
+
dominantTrait: 'Доминантный признак',
|
|
57
|
+
fitness: 'Итоговая приспособленность',
|
|
58
|
+
diversity: 'Генетическое разнообразие',
|
|
59
|
+
evolutionConsole: 'Эволюционная консоль',
|
|
60
|
+
populationLabel: 'Популяция',
|
|
61
|
+
aliveLabel: 'живых',
|
|
62
|
+
alleleCountsLabel: 'Счетчик аллелей',
|
|
63
|
+
alleleDefault: 'Аллель 1',
|
|
64
|
+
populationValueLabel: 'Популяция',
|
|
65
|
+
},
|
|
66
|
+
seo: [
|
|
67
|
+
{
|
|
68
|
+
type: 'title',
|
|
69
|
+
text: 'Естественный отбор vs. Генетический дрейф: Понять эволюцию на живой популяции',
|
|
70
|
+
level: 2,
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
type: 'paragraph',
|
|
74
|
+
html:
|
|
75
|
+
'Если вы хотите понять разницу между естественным отбором и генетическим дрейфом, этот симулятор предоставляет необходимый визуальный слой. Вместо чтения статических определений вы наблюдаете за популяцией в реальном времени.',
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
type: 'title',
|
|
79
|
+
text: 'Что означают регуляторы и почему они важны',
|
|
80
|
+
level: 3,
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
type: 'paragraph',
|
|
84
|
+
html:
|
|
85
|
+
'Естественный отбор: это неслучайная часть эволюции. Он увеличивает частоту признаков, улучшающих выживание. Генетический дрейф: случайная часть.',
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
type: 'paragraph',
|
|
89
|
+
html:
|
|
90
|
+
'Обе силы действуют одновременно: в больших популяциях обычно преобладает отбор, тогда как в малых случайность может уничтожить полезные признаки.',
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
type: 'title',
|
|
94
|
+
text: 'Как читать результаты симуляции',
|
|
95
|
+
level: 3,
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
type: 'paragraph',
|
|
99
|
+
html:
|
|
100
|
+
'Метрики в реальном времени показывают доминантный признак, генетическое разнообразие, итоговую приспособленность и состояние популяции.',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
type: 'title',
|
|
104
|
+
text: 'Почему размер популяции меняет историю',
|
|
105
|
+
level: 3,
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
type: 'list',
|
|
109
|
+
items: [
|
|
110
|
+
'<strong>Давление отбора:</strong> Насколько сильно среда благоприятствует признаку.',
|
|
111
|
+
'<strong>Сила дрейфа:</strong> Случайный шум выборки.',
|
|
112
|
+
'<strong>Частота мутаций:</strong> Появление новых вариантов.',
|
|
113
|
+
'<strong>Число аллелей:</strong> Начальное разнообразие.',
|
|
114
|
+
'<strong>Генетическое разнообразие:</strong> Сырье для эволюции.',
|
|
115
|
+
],
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
type: 'paragraph',
|
|
119
|
+
html:
|
|
120
|
+
'Практический инструмент для понимания отбора, дрейфа и мутаций в биологических системах.',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
type: 'title',
|
|
124
|
+
text: 'Быстрые примеры для проверки',
|
|
125
|
+
level: 3,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'table',
|
|
129
|
+
headers: ['Цель', 'Изменение', 'Ожидаемый результат'],
|
|
130
|
+
rows: [
|
|
131
|
+
[
|
|
132
|
+
'Показать отбор',
|
|
133
|
+
'Увеличить отбор и уменьшить дрейф',
|
|
134
|
+
'Один аллель постепенно доминирует',
|
|
135
|
+
],
|
|
136
|
+
[
|
|
137
|
+
'Показать дрейф',
|
|
138
|
+
'Уменьшить популяцию и увеличить дрейф',
|
|
139
|
+
'Случайные колебания частот аллелей',
|
|
140
|
+
],
|
|
141
|
+
[
|
|
142
|
+
'Показать мутации',
|
|
143
|
+
'Увеличить частоту мутаций',
|
|
144
|
+
'Регулярно появляются новые аллели',
|
|
145
|
+
],
|
|
146
|
+
],
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
type: 'paragraph',
|
|
150
|
+
html:
|
|
151
|
+
'Сочетание наглядной визуализации и метрик упрощает понимание эволюционных процессов.',
|
|
152
|
+
},
|
|
153
|
+
{ type: 'paragraph', html: 'Это пояснение уточняет допущения модели и показывает, как параметры меняют результат. Изменяйте только одну величину за раз и сравнивайте несколько запусков, чтобы связать каждое различие с понятной причиной. Визуализация является учебным приближением: реальная система содержит дополнительные переменные, погрешности измерений и граничные условия. Используйте результат для понимания масштабов, постановки вопросов и сравнения сценариев. Для практического решения или научного анализа всегда проверяйте первичные данные, единицы измерения и профильные источники. Записывайте настройки, чтобы повторить расчёт и обсудить ограничения модели.' },
|
|
154
|
+
{ type: 'paragraph', html: 'Повторите расчёт с теми же настройками, а затем меняйте только один параметр за раз. Записывайте начальные значения, правила вычисления и выбранные ограничения, чтобы отличать закономерность модели от численной вариации или случайности. Результат предназначен для обучения и должен рассматриваться вместе с допущениями и ограничениями. Для реальных измерений или проектов нужны дополнительные данные и проверка специалистом.' },
|
|
153
155
|
],
|
|
154
156
|
faq,
|
|
155
|
-
bibliography,
|
|
156
|
-
howTo,
|
|
157
|
-
schemas: [
|
|
158
|
-
{
|
|
159
|
-
'@context': 'https://schema.org',
|
|
160
|
-
'@type': 'SoftwareApplication',
|
|
161
|
-
name: title,
|
|
162
|
-
description,
|
|
163
|
-
applicationCategory: 'EducationalApplication',
|
|
164
|
-
operatingSystem: 'Any',
|
|
165
|
-
},
|
|
166
|
-
{
|
|
167
|
-
'@context': 'https://schema.org',
|
|
168
|
-
'@type': 'FAQPage',
|
|
169
|
-
mainEntity: faq.map((item) => ({
|
|
170
|
-
'@type': 'Question',
|
|
171
|
-
name: item.question,
|
|
172
|
-
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
173
|
-
})),
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
'@context': 'https://schema.org',
|
|
177
|
-
'@type': 'HowTo',
|
|
178
|
-
name: title,
|
|
179
|
-
step: howTo.map((step) => ({
|
|
180
|
-
'@type': 'HowToStep',
|
|
181
|
-
name: step.name,
|
|
182
|
-
text: step.text,
|
|
183
|
-
})),
|
|
184
|
-
},
|
|
185
|
-
],
|
|
186
|
-
};
|
|
157
|
+
bibliography,
|
|
158
|
+
howTo,
|
|
159
|
+
schemas: [
|
|
160
|
+
{
|
|
161
|
+
'@context': 'https://schema.org',
|
|
162
|
+
'@type': 'SoftwareApplication',
|
|
163
|
+
name: title,
|
|
164
|
+
description,
|
|
165
|
+
applicationCategory: 'EducationalApplication',
|
|
166
|
+
operatingSystem: 'Any',
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
'@context': 'https://schema.org',
|
|
170
|
+
'@type': 'FAQPage',
|
|
171
|
+
mainEntity: faq.map((item) => ({
|
|
172
|
+
'@type': 'Question',
|
|
173
|
+
name: item.question,
|
|
174
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
175
|
+
})),
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
'@context': 'https://schema.org',
|
|
179
|
+
'@type': 'HowTo',
|
|
180
|
+
name: title,
|
|
181
|
+
step: howTo.map((step) => ({
|
|
182
|
+
'@type': 'HowToStep',
|
|
183
|
+
name: step.name,
|
|
184
|
+
text: step.text,
|
|
185
|
+
})),
|
|
186
|
+
},
|
|
187
|
+
],
|
|
188
|
+
};
|