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": "Подбирает окружность по внешним вершинам модели методом наименьших квадратов.",