Add Russian translations for mineral property values
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

- Add properties_ru JSON field to store translated category, crystal_system,
  luster, streak, specific_gravity, color_description
- Add translate_minerals management command using deep-translator (Google
  Translate), with a hard-coded dictionary for crystal systems
- Template: show translated values in RU mode, fall back to English if missing
- Add deep-translator to requirements.txt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-31 08:56:23 +03:00
parent 1e5453f62d
commit 0a3248daa4
5 changed files with 160 additions and 15 deletions

View File

@@ -533,16 +533,8 @@
<div class="color-row">
<div class="color-swatch"></div>
<div class="color-info">
<span class="lang-en">
{% if mineral.color_description %}
{{ mineral.color_description }}
{% else %}
Typical color
{% endif %}
</span>
{% if mineral.color_description_ru %}
<span class="lang-ru">{{ mineral.color_description_ru }}</span>
{% endif %}
<span class="lang-en">{{ mineral.color_description|default:"Typical color" }}</span>
<span class="lang-ru">{{ mineral.color_description_ru|default:mineral.properties_ru.color_description|default:mineral.color_description|default:"Типичный цвет" }}</span>
<br><span class="hex">{{ mineral.color_hex }}</span>
</div>
</div>
@@ -554,13 +546,19 @@
{% if mineral.category %}
<div class="prop-item">
<span class="prop-label"><span class="lang-en">Category</span><span class="lang-ru">Категория</span></span>
<span class="prop-value">{{ mineral.category }}</span>
<span class="prop-value">
<span class="lang-en">{{ mineral.category }}</span>
<span class="lang-ru">{{ mineral.properties_ru.category|default:mineral.category }}</span>
</span>
</div>
{% endif %}
{% if mineral.crystal_system %}
<div class="prop-item">
<span class="prop-label"><span class="lang-en">Crystal System</span><span class="lang-ru">Сингония</span></span>
<span class="prop-value">{{ mineral.crystal_system }}</span>
<span class="prop-value">
<span class="lang-en">{{ mineral.crystal_system }}</span>
<span class="lang-ru">{{ mineral.properties_ru.crystal_system|default:mineral.crystal_system }}</span>
</span>
</div>
{% endif %}
{% if mineral.mohs_hardness %}
@@ -572,19 +570,28 @@
{% if mineral.luster %}
<div class="prop-item">
<span class="prop-label"><span class="lang-en">Luster</span><span class="lang-ru">Блеск</span></span>
<span class="prop-value">{{ mineral.luster }}</span>
<span class="prop-value">
<span class="lang-en">{{ mineral.luster }}</span>
<span class="lang-ru">{{ mineral.properties_ru.luster|default:mineral.luster }}</span>
</span>
</div>
{% endif %}
{% if mineral.streak %}
<div class="prop-item">
<span class="prop-label"><span class="lang-en">Streak</span><span class="lang-ru">Черта</span></span>
<span class="prop-value">{{ mineral.streak }}</span>
<span class="prop-value">
<span class="lang-en">{{ mineral.streak }}</span>
<span class="lang-ru">{{ mineral.properties_ru.streak|default:mineral.streak }}</span>
</span>
</div>
{% endif %}
{% if mineral.specific_gravity %}
<div class="prop-item">
<span class="prop-label"><span class="lang-en">Specific Gravity</span><span class="lang-ru">Плотность</span></span>
<span class="prop-value">{{ mineral.specific_gravity }}</span>
<span class="prop-value">
<span class="lang-en">{{ mineral.specific_gravity }}</span>
<span class="lang-ru">{{ mineral.properties_ru.specific_gravity|default:mineral.specific_gravity }}</span>
</span>
</div>
{% endif %}
</div>