diff --git a/js/i18n.js b/js/i18n.js
index 98bf438..70827eb 100644
--- a/js/i18n.js
+++ b/js/i18n.js
@@ -7,20 +7,20 @@
// Only display names live here; full strings are lazy-loaded per language.
export const TRANSLATIONS = {
- en: { 'lang.name': 'English' },
- de: { 'lang.name': 'Deutsch' },
da: { 'lang.name': 'Dansk' },
- it: { 'lang.name': 'Italiano' },
+ de: { 'lang.name': 'Deutsch' },
+ en: { 'lang.name': 'English' },
es: { 'lang.name': 'Español' },
- pt: { 'lang.name': 'Português' },
fr: { 'lang.name': 'Français' },
- tr: { 'lang.name': 'Türkçe' },
+ it: { 'lang.name': 'Italiano' },
ja: { 'lang.name': '日本語' },
ko: { 'lang.name': '한국어' },
- uk: { 'lang.name': 'Українська' },
+ pl: { 'lang.name': 'Polski' },
+ pt: { 'lang.name': 'Português' },
ru: { 'lang.name': 'Русский' },
+ tr: { 'lang.name': 'Türkçe' },
+ uk: { 'lang.name': 'Українська' },
zh: { 'lang.name': '简体中文' },
- pl: { 'lang.name': 'Polish' },
};
// ── Module state ──────────────────────────────────────────────────────────────
diff --git a/js/i18n/ru.js b/js/i18n/ru.js
index 9de9681..b3142ee 100644
--- a/js/i18n/ru.js
+++ b/js/i18n/ru.js
@@ -8,20 +8,20 @@ export default {
"theme.light": "Светлая тема",
"theme.toggleTitle": "Переключить светлую / тёмную тему",
"theme.toggleAriaLabel": "Переключить светлую / тёмную тему",
- "dropHint.text": "Перетащите сюда файл .stl, .obj, .3mf или .step или ",
+ "dropHint.text": "Перетащите сюда файл .stl, .obj, .3mf или .step или ",
"step.dialogTitle": "Импорт STEP",
"step.modelSize": "Размер модели: {d} мм",
- "step.custom": "Пользовательское",
+ "step.custom": "Пользовательские",
"step.surfaceDeviation": "Отклонение поверхности (мм)",
- "step.normalDeviation": "Отклонение нормалей (°)",
- "step.maxEdge": "Макс. длина ребра (мм)",
+ "step.normalDeviation": "Отклонение нормали (°)",
+ "step.maxEdge": "Максимальная длина ребра (мм)",
"step.import": "Импортировать",
"step.cancel": "Отмена",
"step.coarse": "Грубое",
"step.standard": "Стандартное",
- "step.fine": "Высокое",
- "progress.stepParse": "Чтение файла STEP…",
- "progress.stepTessellate": "Тесселяция модели STEP…",
+ "step.fine": "Высокое качество",
+ "progress.stepParse": "Чтение STEP-файла…",
+ "progress.stepTessellate": "Тесселяция STEP-модели…",
"ui.wireframe": "Каркас",
"ui.perspective": "Перспективный вид",
"ui.controlsHint": "Левая кнопка: вращение · Правая кнопка: панорамирование · Колесо: масштаб",
@@ -44,9 +44,10 @@ export default {
"projection.planarXZ": "Плоская XZ",
"projection.planarYZ": "Плоская YZ",
"sections.transform": "Преобразование",
- "labels.scaleU": "Масштаб U",
- "labels.scaleV": "Масштаб V",
- "labels.scaleManualHint": "Введите значение вручную для уменьшения или увеличения масштаба",
+ "labels.textureSizeU": "Размер U (мм)",
+ "labels.textureSizeV": "Размер V (мм)",
+ "tooltips.textureSize": "Физический размер одного повторения текстуры в миллиметрах — одинаковое значение обеспечивает одинаковый физический размер рисунка на любой модели.",
+ "labels.scaleManualHint": "Введите значение в поле, чтобы уменьшить или увеличить размер",
"labels.offsetU": "Смещение U",
"labels.offsetV": "Смещение V",
"labels.rotation": "Поворот",
@@ -106,17 +107,17 @@ export default {
"precision.warningBody": "Предполагаемое количество треугольников: ~{n}. Это может замедлить работу браузера. Продолжить?",
"labels.boundaryFalloff": "Плавная граница маски ⓘ",
"tooltips.boundaryFalloff": "Постепенно уменьшает величину смещения до нуля у границ маски, предотвращая наложение треугольников на стыке текстурированных и нетекстурированных областей.",
- "sections.smoothMask": "Плавная граница маски ⓘ",
+ "sections.smoothMask": "Сглаживание маски ⓘ",
"labels.falloffDistance": "Расстояние",
- "tooltips.falloffDistance": "Ширина переходной зоны в миллиметрах. 0 = выкл.",
+ "tooltips.falloffDistance": "Ширина зоны плавного перехода в миллиметрах. 0 = отключено.",
"labels.falloffCurve": "Переход",
- "tooltips.falloffCurve": "Форма перехода от нуля до полной высоты текстуры на дистанции сглаживания.",
+ "tooltips.falloffCurve": "Форма перехода от нулевой до полной высоты текстуры в пределах зоны сглаживания маски.",
"falloffCurve.linear": "Линейный",
- "falloffCurve.linearTitle": "Постоянный наклон от края маски до полной высоты.",
+ "falloffCurve.linearTitle": "Постоянный наклон от края маски до полной высоты текстуры.",
"falloffCurve.scurve": "S-кривая",
- "falloffCurve.scurveTitle": "Плавное начало и завершение — без заметных изломов на краях перехода.",
- "falloffCurve.ease": "Мягкий",
- "falloffCurve.easeTitle": "Начинается очень плавно у края маски, затем быстрее нарастает до полной высоты.",
+ "falloffCurve.scurveTitle": "Плавное начало и завершение — без заметной границы на обоих концах перехода.",
+ "falloffCurve.ease": "Плавное нарастание",
+ "falloffCurve.easeTitle": "Начинается очень плавно у края маски, затем переходит к более крутым значениям до полной высоты.",
"labels.symmetricDisplacement": "Симметричное смещение ⓘ",
"tooltips.symmetricDisplacement": "Если включено, 50% серого соответствует отсутствию смещения; белый цвет создаёт выступ, чёрный - углубление. Это позволяет сохранить общий объём модели примерно неизменным.",
"labels.displacementPreview": "3D-предпросмотр ⓘ",
@@ -148,9 +149,9 @@ export default {
"ui.harvestFlat": "Продолжать упрощение плоских поверхностей после достижения лимита треугольников",
"ui.harvestTol": "Допуск для плоских поверхностей (мм)",
"tooltips.harvestTol": "Максимально допустимое отклонение поверхности при объединении плоских участков. Большие значения позволяют удалить больше треугольников ценой большего отклонения. Для FDM-печати значение около 0,005 мм практически незаметно.",
- "ui.preserveUntexturedHeading": "Сохранять нетекстурированные поверхности",
- "ui.preserveUntexturedDesc": "Поверхности без текстуры (нарисованная маска, угловые маски) остаются точно такими, как в исходной модели: регуляризация сетки и децимация не перемещают и не удаляют их вершины, поэтому скругления и мелкие детали остаются нетронутыми. Если одни только нетекстурированные поверхности превышают лимит треугольников, экспорт превысит лимит вместо ухудшения текстуры.",
- "ui.preserveUntextured": "Не изменять нетекстурированные поверхности",
+ "ui.preserveUntexturedHeading": "Сохранять поверхности без текстуры",
+ "ui.preserveUntexturedDesc": "Сохранять поверхности, на которые не накладывается текстура (маска окрашивания, маски угла), точно в исходном виде: регуляризация и упрощение сетки не будут перемещать или удалять их вершины, поэтому скругления и мелкие детали останутся неизменными. Если только поверхности без текстуры превышают установленный предел количества треугольников, экспорт превысит этот предел вместо ухудшения качества текстуры.",
+ "ui.preserveUntextured": "Не изменять поверхности без текстуры",
"alerts.bakeFailed": "Не удалось запечь текстуру: {msg}",
"progress.finalizing": "Завершение…",
"sections.export": "Экспорт ⓘ",
@@ -167,7 +168,7 @@ export default {
"labels.outputTriangles": "Количество треугольников",
"tooltips.outputTriangles": "Сначала сетка полностью подразделяется, затем упрощается до указанного количества треугольников",
"warnings.safetyCapHit": "⚠ При подразделении достигнут защитный лимит треугольников - результат может оказаться менее детализированным, чем соответствует выбранной длине ребра.",
- "warnings.preserveOverBudget": "⚠ Нетекстурированные поверхности сами по себе превышают лимит треугольников — они сохранены, поэтому экспорт превышает лимит.",
+ "warnings.preserveOverBudget": "⚠ Поверхности без текстуры сами по себе превышают лимит количества треугольников — они были сохранены, поэтому размер экспортируемой сетки превышает установленный лимит.",
"ui.exportStl": "Экспорт в STL",
"ui.export3mf": "Экспорт в 3MF",
"tooltips.exportStl": "Совместим практически со всеми слайсерами",
@@ -253,7 +254,7 @@ export default {
"header.loadGo": "Загрузить",
"alerts.importFailed": "Не удалось загрузить проект: {msg}",
"labels.snapSeamless": "Подогнать для бесшовного повторения ⓘ",
- "tooltips.snapSeamless": "Подбирает масштаб по оси U так, чтобы текстура целое число раз оборачивалась вокруг цилиндра или сферы без видимого шва.",
+ "tooltips.snapSeamless": "Округляет масштаб U до целого числа повторений, чтобы текстура бесшовно замыкалась вокруг цилиндра или сферы.",
"labels.cylinderAxis": "Ось цилиндра",
"ui.cylinderAutofit": "Автоподбор",
"tooltips.cylinderAutofit": "Подбирает окружность по внешним вершинам модели методом наименьших квадратов.",