@jjlmoya/utils-diy 1.3.0 → 1.4.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 -1
- package/src/category/i18n/de.ts +12 -0
- package/src/category/i18n/id.ts +12 -0
- package/src/category/i18n/it.ts +12 -0
- package/src/category/i18n/ja.ts +12 -0
- package/src/category/i18n/ko.ts +12 -0
- package/src/category/i18n/nl.ts +12 -0
- package/src/category/i18n/pl.ts +12 -0
- package/src/category/i18n/pt.ts +12 -0
- package/src/category/i18n/ru.ts +12 -0
- package/src/category/i18n/sv.ts +12 -0
- package/src/category/i18n/tr.ts +12 -0
- package/src/category/i18n/zh.ts +12 -0
- package/src/category/index.ts +13 -1
- package/src/tests/faq_count.test.ts +1 -1
- package/src/tests/i18n_coverage.test.ts +36 -0
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/seo_length.test.ts +3 -0
- package/src/tests/slug_uniqueness.test.ts +58 -0
- package/src/tool/balusterCalculator/i18n/de.ts +264 -0
- package/src/tool/balusterCalculator/i18n/id.ts +264 -0
- package/src/tool/balusterCalculator/i18n/it.ts +264 -0
- package/src/tool/balusterCalculator/i18n/ja.ts +264 -0
- package/src/tool/balusterCalculator/i18n/ko.ts +264 -0
- package/src/tool/balusterCalculator/i18n/nl.ts +264 -0
- package/src/tool/balusterCalculator/i18n/pl.ts +264 -0
- package/src/tool/balusterCalculator/i18n/pt.ts +264 -0
- package/src/tool/balusterCalculator/i18n/ru.ts +264 -0
- package/src/tool/balusterCalculator/i18n/sv.ts +264 -0
- package/src/tool/balusterCalculator/i18n/tr.ts +264 -0
- package/src/tool/balusterCalculator/i18n/zh.ts +264 -0
- package/src/tool/balusterCalculator/index.ts +15 -7
- package/src/tool/clayCalculator/i18n/de.ts +183 -0
- package/src/tool/clayCalculator/i18n/id.ts +183 -0
- package/src/tool/clayCalculator/i18n/it.ts +183 -0
- package/src/tool/clayCalculator/i18n/ja.ts +182 -0
- package/src/tool/clayCalculator/i18n/ko.ts +183 -0
- package/src/tool/clayCalculator/i18n/nl.ts +183 -0
- package/src/tool/clayCalculator/i18n/pl.ts +183 -0
- package/src/tool/clayCalculator/i18n/pt.ts +183 -0
- package/src/tool/clayCalculator/i18n/ru.ts +183 -0
- package/src/tool/clayCalculator/i18n/sv.ts +183 -0
- package/src/tool/clayCalculator/i18n/tr.ts +183 -0
- package/src/tool/clayCalculator/i18n/zh.ts +183 -0
- package/src/tool/clayCalculator/index.ts +15 -7
- package/src/tool/concreteCalculator/i18n/de.ts +201 -0
- package/src/tool/concreteCalculator/i18n/id.ts +201 -0
- package/src/tool/concreteCalculator/i18n/it.ts +201 -0
- package/src/tool/concreteCalculator/i18n/ja.ts +201 -0
- package/src/tool/concreteCalculator/i18n/ko.ts +201 -0
- package/src/tool/concreteCalculator/i18n/nl.ts +201 -0
- package/src/tool/concreteCalculator/i18n/pl.ts +201 -0
- package/src/tool/concreteCalculator/i18n/pt.ts +201 -0
- package/src/tool/concreteCalculator/i18n/ru.ts +201 -0
- package/src/tool/concreteCalculator/i18n/sv.ts +201 -0
- package/src/tool/concreteCalculator/i18n/tr.ts +201 -0
- package/src/tool/concreteCalculator/i18n/zh.ts +201 -0
- package/src/tool/concreteCalculator/index.ts +17 -5
- package/src/tool/cutOptimizer/i18n/de.ts +178 -0
- package/src/tool/cutOptimizer/i18n/id.ts +178 -0
- package/src/tool/cutOptimizer/i18n/it.ts +178 -0
- package/src/tool/cutOptimizer/i18n/ja.ts +178 -0
- package/src/tool/cutOptimizer/i18n/ko.ts +178 -0
- package/src/tool/cutOptimizer/i18n/nl.ts +178 -0
- package/src/tool/cutOptimizer/i18n/pl.ts +178 -0
- package/src/tool/cutOptimizer/i18n/pt.ts +178 -0
- package/src/tool/cutOptimizer/i18n/ru.ts +178 -0
- package/src/tool/cutOptimizer/i18n/sv.ts +178 -0
- package/src/tool/cutOptimizer/i18n/tr.ts +178 -0
- package/src/tool/cutOptimizer/i18n/zh.ts +178 -0
- package/src/tool/cutOptimizer/index.ts +17 -5
- package/src/tool/drillCalculator/i18n/de.ts +137 -0
- package/src/tool/drillCalculator/i18n/id.ts +137 -0
- package/src/tool/drillCalculator/i18n/it.ts +137 -0
- package/src/tool/drillCalculator/i18n/ja.ts +137 -0
- package/src/tool/drillCalculator/i18n/ko.ts +137 -0
- package/src/tool/drillCalculator/i18n/nl.ts +137 -0
- package/src/tool/drillCalculator/i18n/pl.ts +137 -0
- package/src/tool/drillCalculator/i18n/pt.ts +137 -0
- package/src/tool/drillCalculator/i18n/ru.ts +137 -0
- package/src/tool/drillCalculator/i18n/sv.ts +137 -0
- package/src/tool/drillCalculator/i18n/tr.ts +137 -0
- package/src/tool/drillCalculator/i18n/zh.ts +137 -0
- package/src/tool/drillCalculator/index.ts +17 -5
- package/src/tool/drillSharpener/i18n/de.ts +120 -0
- package/src/tool/drillSharpener/i18n/id.ts +120 -0
- package/src/tool/drillSharpener/i18n/it.ts +120 -0
- package/src/tool/drillSharpener/i18n/ja.ts +120 -0
- package/src/tool/drillSharpener/i18n/ko.ts +120 -0
- package/src/tool/drillSharpener/i18n/nl.ts +120 -0
- package/src/tool/drillSharpener/i18n/pl.ts +120 -0
- package/src/tool/drillSharpener/i18n/pt.ts +120 -0
- package/src/tool/drillSharpener/i18n/ru.ts +120 -0
- package/src/tool/drillSharpener/i18n/sv.ts +120 -0
- package/src/tool/drillSharpener/i18n/tr.ts +120 -0
- package/src/tool/drillSharpener/i18n/zh.ts +120 -0
- package/src/tool/drillSharpener/index.ts +17 -5
- package/src/tool/epoxyCalculator/i18n/de.ts +118 -0
- package/src/tool/epoxyCalculator/i18n/id.ts +118 -0
- package/src/tool/epoxyCalculator/i18n/it.ts +118 -0
- package/src/tool/epoxyCalculator/i18n/ja.ts +118 -0
- package/src/tool/epoxyCalculator/i18n/ko.ts +118 -0
- package/src/tool/epoxyCalculator/i18n/nl.ts +118 -0
- package/src/tool/epoxyCalculator/i18n/pl.ts +118 -0
- package/src/tool/epoxyCalculator/i18n/pt.ts +118 -0
- package/src/tool/epoxyCalculator/i18n/ru.ts +118 -0
- package/src/tool/epoxyCalculator/i18n/sv.ts +118 -0
- package/src/tool/epoxyCalculator/i18n/tr.ts +118 -0
- package/src/tool/epoxyCalculator/i18n/zh.ts +118 -0
- package/src/tool/epoxyCalculator/index.ts +15 -7
- package/src/tool/furnitureFit/i18n/de.ts +113 -0
- package/src/tool/furnitureFit/i18n/id.ts +113 -0
- package/src/tool/furnitureFit/i18n/it.ts +113 -0
- package/src/tool/furnitureFit/i18n/ja.ts +113 -0
- package/src/tool/furnitureFit/i18n/ko.ts +113 -0
- package/src/tool/furnitureFit/i18n/nl.ts +113 -0
- package/src/tool/furnitureFit/i18n/pl.ts +113 -0
- package/src/tool/furnitureFit/i18n/pt.ts +113 -0
- package/src/tool/furnitureFit/i18n/ru.ts +113 -0
- package/src/tool/furnitureFit/i18n/sv.ts +113 -0
- package/src/tool/furnitureFit/i18n/tr.ts +113 -0
- package/src/tool/furnitureFit/i18n/zh.ts +113 -0
- package/src/tool/furnitureFit/index.ts +17 -5
- package/src/tool/mortarCalculator/i18n/de.ts +129 -0
- package/src/tool/mortarCalculator/i18n/id.ts +129 -0
- package/src/tool/mortarCalculator/i18n/it.ts +129 -0
- package/src/tool/mortarCalculator/i18n/ja.ts +129 -0
- package/src/tool/mortarCalculator/i18n/ko.ts +129 -0
- package/src/tool/mortarCalculator/i18n/nl.ts +129 -0
- package/src/tool/mortarCalculator/i18n/pl.ts +129 -0
- package/src/tool/mortarCalculator/i18n/pt.ts +129 -0
- package/src/tool/mortarCalculator/i18n/ru.ts +129 -0
- package/src/tool/mortarCalculator/i18n/sv.ts +129 -0
- package/src/tool/mortarCalculator/i18n/tr.ts +129 -0
- package/src/tool/mortarCalculator/i18n/zh.ts +129 -0
- package/src/tool/mortarCalculator/index.ts +17 -5
- package/src/tool/passepartoutCalculator/i18n/de.ts +108 -0
- package/src/tool/passepartoutCalculator/i18n/id.ts +108 -0
- package/src/tool/passepartoutCalculator/i18n/it.ts +108 -0
- package/src/tool/passepartoutCalculator/i18n/ja.ts +108 -0
- package/src/tool/passepartoutCalculator/i18n/ko.ts +108 -0
- package/src/tool/passepartoutCalculator/i18n/nl.ts +108 -0
- package/src/tool/passepartoutCalculator/i18n/pl.ts +108 -0
- package/src/tool/passepartoutCalculator/i18n/pt.ts +108 -0
- package/src/tool/passepartoutCalculator/i18n/ru.ts +108 -0
- package/src/tool/passepartoutCalculator/i18n/sv.ts +108 -0
- package/src/tool/passepartoutCalculator/i18n/tr.ts +108 -0
- package/src/tool/passepartoutCalculator/i18n/zh.ts +108 -0
- package/src/tool/passepartoutCalculator/index.ts +17 -5
- package/src/tool/stairCalculator/i18n/de.ts +144 -0
- package/src/tool/stairCalculator/i18n/id.ts +144 -0
- package/src/tool/stairCalculator/i18n/it.ts +144 -0
- package/src/tool/stairCalculator/i18n/ja.ts +144 -0
- package/src/tool/stairCalculator/i18n/ko.ts +144 -0
- package/src/tool/stairCalculator/i18n/nl.ts +144 -0
- package/src/tool/stairCalculator/i18n/pl.ts +144 -0
- package/src/tool/stairCalculator/i18n/pt.ts +144 -0
- package/src/tool/stairCalculator/i18n/ru.ts +144 -0
- package/src/tool/stairCalculator/i18n/sv.ts +144 -0
- package/src/tool/stairCalculator/i18n/tr.ts +144 -0
- package/src/tool/stairCalculator/i18n/zh.ts +144 -0
- package/src/tool/stairCalculator/index.ts +17 -5
- package/src/tool/thermalExpansionCalculator/i18n/de.ts +132 -0
- package/src/tool/thermalExpansionCalculator/i18n/id.ts +130 -0
- package/src/tool/thermalExpansionCalculator/i18n/it.ts +130 -0
- package/src/tool/thermalExpansionCalculator/i18n/ja.ts +130 -0
- package/src/tool/thermalExpansionCalculator/i18n/ko.ts +130 -0
- package/src/tool/thermalExpansionCalculator/i18n/nl.ts +130 -0
- package/src/tool/thermalExpansionCalculator/i18n/pl.ts +130 -0
- package/src/tool/thermalExpansionCalculator/i18n/pt.ts +130 -0
- package/src/tool/thermalExpansionCalculator/i18n/ru.ts +130 -0
- package/src/tool/thermalExpansionCalculator/i18n/sv.ts +130 -0
- package/src/tool/thermalExpansionCalculator/i18n/tr.ts +130 -0
- package/src/tool/thermalExpansionCalculator/i18n/zh.ts +130 -0
- package/src/tool/thermalExpansionCalculator/index.ts +17 -5
- package/src/tool/voltageDropCalculator/i18n/de.ts +112 -0
- package/src/tool/voltageDropCalculator/i18n/id.ts +110 -0
- package/src/tool/voltageDropCalculator/i18n/it.ts +110 -0
- package/src/tool/voltageDropCalculator/i18n/ja.ts +110 -0
- package/src/tool/voltageDropCalculator/i18n/ko.ts +110 -0
- package/src/tool/voltageDropCalculator/i18n/nl.ts +110 -0
- package/src/tool/voltageDropCalculator/i18n/pl.ts +110 -0
- package/src/tool/voltageDropCalculator/i18n/pt.ts +110 -0
- package/src/tool/voltageDropCalculator/i18n/ru.ts +110 -0
- package/src/tool/voltageDropCalculator/i18n/sv.ts +110 -0
- package/src/tool/voltageDropCalculator/i18n/tr.ts +110 -0
- package/src/tool/voltageDropCalculator/i18n/zh.ts +110 -0
- package/src/tool/voltageDropCalculator/index.ts +17 -5
- package/src/types.ts +1 -1
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { CutOptimizerUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'optimizator-raskroya';
|
|
6
|
+
const title = 'Оптимизатор раскроя полотна и досок';
|
|
7
|
+
const description =
|
|
8
|
+
'Бесплатный калькулятор для оптимизации раскроя дерева, металла или труб. Минимизируйте отходы с помощью алгоритмов Bin Packing 1D и 2D. Идеально для столярных работ, металлообработки и ремонта.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Что такое 1D оптимизатор раскроя?',
|
|
13
|
+
answer:
|
|
14
|
+
'Это инструмент, использующий математические алгоритмы (такие как задача об упаковке в контейнеры - Bin Packing Problem), чтобы определить, как вырезать более мелкие детали из стандартной длинной заготовки (рейка, профиль, труба) с минимально возможными отходами.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Почему нужно учитывать толщину реза (Kerf)?',
|
|
18
|
+
answer:
|
|
19
|
+
'Каждый раз, когда пила прорезает материал, расходуется несколько миллиметров (обычно от 2 до 4 мм в зависимости от диска). Если не учитывать это пространство, последние детали в вашем списке окажутся короче, чем планировалось.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Можно ли смешивать детали разной длины?',
|
|
23
|
+
answer:
|
|
24
|
+
'Да, наш калькулятор принимает любые комбинации длины и количества. Алгоритм оценит все возможные комбинации и отдаст приоритет максимальному использованию имеющегося материала.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Как сохранить план раскроя?',
|
|
28
|
+
answer:
|
|
29
|
+
'После завершения оптимизации вы можете распечатать страницу или сделать снимок экрана визуальной схемы. Это послужит физическим руководством в мастерской, чтобы не перепутать порядок резов.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: 'Определите исходный материал (Stock)',
|
|
36
|
+
text: 'Введите общую длину имеющейся рейки или профиля (например, 2400 мм или 6000 мм).',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Настройте толщину диска (Kerf)',
|
|
40
|
+
text: 'Установите количество миллиметров, которые пила удаляет при каждом проходе, чтобы расчет был точным до миллиметра.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Составьте список деталей',
|
|
44
|
+
text: 'Введите длину и количество каждой детали, необходимой для вашего проекта.',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'Запустите оптимизацию',
|
|
48
|
+
text: 'Получите наиболее эффективную схему раскроя и точный процент образующихся отходов.',
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
53
|
+
'@context': 'https://schema.org',
|
|
54
|
+
'@type': 'FAQPage',
|
|
55
|
+
mainEntity: faqData.map((item) => ({
|
|
56
|
+
'@type': 'Question',
|
|
57
|
+
name: item.question,
|
|
58
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
59
|
+
})),
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'HowTo',
|
|
65
|
+
name: title,
|
|
66
|
+
description,
|
|
67
|
+
step: howToData.map((step, i) => ({
|
|
68
|
+
'@type': 'HowToStep',
|
|
69
|
+
position: i + 1,
|
|
70
|
+
name: step.name,
|
|
71
|
+
text: step.text,
|
|
72
|
+
})),
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
76
|
+
'@context': 'https://schema.org',
|
|
77
|
+
'@type': 'SoftwareApplication',
|
|
78
|
+
name: title,
|
|
79
|
+
description,
|
|
80
|
+
applicationCategory: 'UtilityApplication',
|
|
81
|
+
operatingSystem: 'All',
|
|
82
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
83
|
+
inLanguage: 'ru',
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const content: ToolLocaleContent<CutOptimizerUI> = {
|
|
87
|
+
slug,
|
|
88
|
+
title,
|
|
89
|
+
description,
|
|
90
|
+
faqTitle: 'Часто задаваемые вопросы',
|
|
91
|
+
faq: faqData,
|
|
92
|
+
bibliographyTitle: 'Технические справочники',
|
|
93
|
+
bibliography: [
|
|
94
|
+
{
|
|
95
|
+
name: 'Cutting Stock Problem: Wikipedia',
|
|
96
|
+
url: 'https://en.wikipedia.org/wiki/Cutting_stock_problem',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'Bin Packing Problem: Wolfram MathWorld',
|
|
100
|
+
url: 'https://mathworld.wolfram.com/BinPackingProblem.html',
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
howTo: howToData,
|
|
104
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
105
|
+
seo: [
|
|
106
|
+
{
|
|
107
|
+
type: 'title',
|
|
108
|
+
text: 'Полное руководство по оптимизации раскроя',
|
|
109
|
+
level: 2,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
type: 'paragraph',
|
|
113
|
+
html: 'Оптимизация раскроя, технически известная как <strong>задача о раскрое материала (Cutting Stock Problem)</strong>, является одной из самых интересных логистических задач в промышленном проектировании. Для проекта из 20 деталей и 5 заготовок существуют миллионы возможных комбинаций. Компьютерный алгоритм может найти оптимальное решение за миллисекунды, сокращая обычные отходы с 15% до менее чем 5%.',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: 'title',
|
|
117
|
+
text: 'Линейный 1D раскрой и раскрой щитов 2D',
|
|
118
|
+
level: 3,
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
type: 'card',
|
|
122
|
+
icon: 'mdi:arrow-expand-horizontal',
|
|
123
|
+
title: 'Линейный раскрой для реек и профилей',
|
|
124
|
+
html: '<p>В <strong>линейном раскрое (1D)</strong> оптимизация происходит только в одном измерении: длине. Ширина материала считается постоянной. Идеально подходит для пиломатериалов (рейки, балки), металлических и алюминиевых профилей, труб ПВХ или медных труб, а также шпилек.</p>',
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
type: 'card',
|
|
128
|
+
icon: 'mdi:view-grid',
|
|
129
|
+
title: 'Раскрой щитов для досок и листов',
|
|
130
|
+
html: '<p>В <strong>раскрое щитов (2D)</strong> учитываются два измерения: ширина и длина. Инструмент использует алгоритмы гильотинного типа, где каждый рез идет от края до края. Идеально подходит для древесных плит (МДФ, ДСП), фанеры, стекла, оргстекла и металлических листов.</p>',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
type: 'title',
|
|
134
|
+
text: 'Критический фактор: Толщина реза (Kerf)',
|
|
135
|
+
level: 3,
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
type: 'paragraph',
|
|
139
|
+
html: '<strong>Kerf</strong> — это материал, который удаляется при каждом резе. Стандартный диск настольной пилы расходует от 3,0 до 3,2 мм на один рез. Ручная циркулярная пила расходует 1,5–2,5 мм. Лазерная резка оргстекла — всего 0,1–0,3 мм. Игнорирование толщины реза в проекте с 10 резами на рейках длиной 2400 мм может привести к потере от 30 до 32 мм полезного материала.',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
type: 'title',
|
|
143
|
+
text: 'Алгоритм Best Fit Decreasing',
|
|
144
|
+
level: 3,
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: 'card',
|
|
148
|
+
icon: 'mdi:chip',
|
|
149
|
+
title: 'Как работает оптимизатор изнутри',
|
|
150
|
+
html: '<p>Ядро оптимизатора использует стратегию <strong>Best Fit Decreasing (BFD)</strong>: сначала сортируются все детали от самой длинной к самой короткой (большие детали сложнее разместить). Затем для каждой детали ищется существующий остаток, в который она помещается с минимальным лишним зазором. Только если деталь не помещается ни в один остаток, берется новая заготовка. Этот процесс сокращает отходы на порядки по сравнению со случайным выбором.</p>',
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
ui: {
|
|
154
|
+
modeLinearLabel: 'Линейный (Заготовки)',
|
|
155
|
+
modePanelLabel: 'Панельный (Щиты)',
|
|
156
|
+
configTitle: 'Настройка материала',
|
|
157
|
+
labelStockLength: 'Длина материала (мм)',
|
|
158
|
+
labelStockWidth: 'Ширина материала (мм)',
|
|
159
|
+
labelKerf: 'Толщина диска / Kerf (мм)',
|
|
160
|
+
cutsTitle: 'Список резов',
|
|
161
|
+
placeholderLength: 'Длина',
|
|
162
|
+
placeholderWidth: 'Ширина',
|
|
163
|
+
placeholderQty: 'Кол-во',
|
|
164
|
+
btnRemoveTitle: 'Удалить',
|
|
165
|
+
statStockUsed: 'Использовано материала',
|
|
166
|
+
statTotalCuts: 'Всего резов',
|
|
167
|
+
statWaste: 'Всего отходов',
|
|
168
|
+
statEfficiency: 'Эффективность',
|
|
169
|
+
vizTitle: 'Визуализация раскроя',
|
|
170
|
+
emptyState: 'Добавьте детали и нажмите расчет, чтобы увидеть план раскроя.',
|
|
171
|
+
noValidCuts: 'Не удалось создать корректный раскрой. Проверьте размеры.',
|
|
172
|
+
noValidPanels: 'Не удалось создать корректные щиты. Убедитесь, что детали помещаются на щите.',
|
|
173
|
+
stockLabel: 'Материал',
|
|
174
|
+
panelLabel: 'Панель',
|
|
175
|
+
wasteLabel: 'Отходы:',
|
|
176
|
+
effLabel: 'Эфф:',
|
|
177
|
+
},
|
|
178
|
+
};
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { CutOptimizerUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'kapoptimering';
|
|
6
|
+
const title = 'Kapoptimering för reglar och skivor';
|
|
7
|
+
const description =
|
|
8
|
+
'Gratis kalkylator för att optimera kapning av trä, metall eller rör. Minimera spillet med 1D- och 2D-bin packing-algoritmer. Idealisk för snickeri, metallarbete och renovering.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Vad är kapoptimering 1D?',
|
|
13
|
+
answer:
|
|
14
|
+
'Det är ett verktyg som använder matematiska algoritmer (som Bin Packing Problem) för att fastställa hur mindre delar kan kapas ur en längre standardlängd (regel, profil, rör) med minsta möjliga spill.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Varför inkludera sågklingans tjocklek (Kerf)?',
|
|
18
|
+
answer:
|
|
19
|
+
'Varje gång sågen kapar materialet försvinner några millimeter (vanligtvis mellan 2 mm och 4 mm beroende på klingan). Om du inte räknar med detta utrymme kommer de sista delarna i din lista att bli kortare än planerat.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Kan jag blanda delar med olika längder?',
|
|
23
|
+
answer:
|
|
24
|
+
'Ja, vår kalkylator accepterar valfri kombination av längder och antal. Algoritmen utvärderar alla möjliga kombinationer och prioriterar maximalt utnyttjande av lagermaterialet.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Hur sparar jag min kapningsplan?',
|
|
28
|
+
answer:
|
|
29
|
+
'När optimeringen har utförts kan du skriva ut sidan eller ta en skärmdump av det visuella schemat. Detta fungerar som en fysisk guide i verkstaden så att du inte blandar ihop ordningen på kappen.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: 'Definiera basmaterialet (Stock)',
|
|
36
|
+
text: 'Ange den totala längden på den tillgängliga regeln eller profilen (t.ex. 2400 mm eller 6000 mm).',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Ställ in klingans tjocklek (Kerf)',
|
|
40
|
+
text: 'Justera de millimetrar som sågen tar bort vid varje kapning så att beräkningen blir millimeterprecision.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Lista de önskade delarna',
|
|
44
|
+
text: 'Skriv längden och antalet av varje del som du behöver för ditt projekt.',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'Kör optimeringen',
|
|
48
|
+
text: 'Få det mest effektiva kapschemat och den exakta procentandelen spill som skapas.',
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
53
|
+
'@context': 'https://schema.org',
|
|
54
|
+
'@type': 'FAQPage',
|
|
55
|
+
mainEntity: faqData.map((item) => ({
|
|
56
|
+
'@type': 'Question',
|
|
57
|
+
name: item.question,
|
|
58
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
59
|
+
})),
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'HowTo',
|
|
65
|
+
name: title,
|
|
66
|
+
description,
|
|
67
|
+
step: howToData.map((step, i) => ({
|
|
68
|
+
'@type': 'HowToStep',
|
|
69
|
+
position: i + 1,
|
|
70
|
+
name: step.name,
|
|
71
|
+
text: step.text,
|
|
72
|
+
})),
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
76
|
+
'@context': 'https://schema.org',
|
|
77
|
+
'@type': 'SoftwareApplication',
|
|
78
|
+
name: title,
|
|
79
|
+
description,
|
|
80
|
+
applicationCategory: 'UtilityApplication',
|
|
81
|
+
operatingSystem: 'All',
|
|
82
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
83
|
+
inLanguage: 'sv',
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const content: ToolLocaleContent<CutOptimizerUI> = {
|
|
87
|
+
slug,
|
|
88
|
+
title,
|
|
89
|
+
description,
|
|
90
|
+
faqTitle: 'Vanliga frågor',
|
|
91
|
+
faq: faqData,
|
|
92
|
+
bibliographyTitle: 'Tekniska referenser',
|
|
93
|
+
bibliography: [
|
|
94
|
+
{
|
|
95
|
+
name: 'Cutting Stock Problem: Wikipedia',
|
|
96
|
+
url: 'https://en.wikipedia.org/wiki/Cutting_stock_problem',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'Bin Packing Problem: Wolfram MathWorld',
|
|
100
|
+
url: 'https://mathworld.wolfram.com/BinPackingProblem.html',
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
howTo: howToData,
|
|
104
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
105
|
+
seo: [
|
|
106
|
+
{
|
|
107
|
+
type: 'title',
|
|
108
|
+
text: 'Den ultimata guiden för kapoptimering',
|
|
109
|
+
level: 2,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
type: 'paragraph',
|
|
113
|
+
html: 'Kapoptimering, tekniskt känt som <strong>Cutting Stock Problem</strong>, är en av de mest fascinerande logistiska utmaningarna inom industriteknik. För ett projekt med 20 delar och 5 lagerstänger finns det miljontals möjliga kombinationer. En datoralgoritm kan hitta den optimala lösningen på millisekunder och minska det vanliga spillet från 15 % till mindre än 5 %.',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: 'title',
|
|
117
|
+
text: 'Linjär 1D-kapning och 2D-skivoptimering',
|
|
118
|
+
level: 3,
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
type: 'card',
|
|
122
|
+
icon: 'mdi:arrow-expand-horizontal',
|
|
123
|
+
title: 'Linjär kapning för reglar och profiler',
|
|
124
|
+
html: '<p>Vid <strong>linjär kapning (1D)</strong> sker optimeringen i endast en dimension: längden. Materialets bredd antas vara konstant. Det är idealiskt för trävirke (reglar, bjälkar), metall- och aluminiumprofiler, rör av PVC eller koppar samt gängstänger.</p>',
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
type: 'card',
|
|
128
|
+
icon: 'mdi:view-grid',
|
|
129
|
+
title: 'Skivoptimering för skivor och plåt',
|
|
130
|
+
html: '<p>Vid <strong>skivoptimering (2D)</strong> hanteras två dimensioner: bredd och längd. Verktyget använder giljotinliknande algoritmer där varje kapning går från kant till kant. Idealiskt för skivmaterial (MDF, spånskiva), plywood, glas, plexiglas och metallplåt.</p>',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
type: 'title',
|
|
134
|
+
text: 'Den kritiska faktorn: Sågklingans tjocklek (Kerf)',
|
|
135
|
+
level: 3,
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
type: 'paragraph',
|
|
139
|
+
html: '<strong>Kerf</strong> är materialet som försvinner vid varje kapning. En standardklinga för bordssåg förbrukar mellan 3,0 mm och 3,2 mm per kapning. En handcirkelsåg förbrukar 1,5 till 2,5 mm. En laserskärning i plexiglas förbrukar knappt 0,1 till 0,3 mm. Att ignorera kerf i ett projekt med 10 kapningar i reglar på 2400 mm kan göra att du förlorar mellan 30 mm och 32 mm användbart material.',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
type: 'title',
|
|
143
|
+
text: 'Best Fit Decreasing-algoritmen',
|
|
144
|
+
level: 3,
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: 'card',
|
|
148
|
+
icon: 'mdi:chip',
|
|
149
|
+
title: 'Så fungerar optimeraren på insidan',
|
|
150
|
+
html: '<p>Kärnan i optimeraren använder strategin <strong>Best Fit Decreasing (BFD)</strong>: först sorteras alla delar från största till minsta längd (stora delar är svårare att få plats med). Sedan letar den för varje del efter det befintliga spillstycket där den får plats med minsta möjliga återstående del. Endast om den inte får plats i något spillstycke används en ny råvara. Denna process minskar spillet markant jämfört med slumpmässigt val.</p>',
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
ui: {
|
|
154
|
+
modeLinearLabel: 'Linjär (Längder)',
|
|
155
|
+
modePanelLabel: 'Panel (Skivor)',
|
|
156
|
+
configTitle: 'Materialkonfiguration',
|
|
157
|
+
labelStockLength: 'Materiallängd (mm)',
|
|
158
|
+
labelStockWidth: 'Materialbredd (mm)',
|
|
159
|
+
labelKerf: 'Bladtjocklek / Kerf (mm)',
|
|
160
|
+
cutsTitle: 'Kaplista',
|
|
161
|
+
placeholderLength: 'Längd',
|
|
162
|
+
placeholderWidth: 'Bredd',
|
|
163
|
+
placeholderQty: 'Antal',
|
|
164
|
+
btnRemoveTitle: 'Ta bort',
|
|
165
|
+
statStockUsed: 'Använt material',
|
|
166
|
+
statTotalCuts: 'Totalt antal kapningar',
|
|
167
|
+
statWaste: 'Totalt spill',
|
|
168
|
+
statEfficiency: 'Effektivitet',
|
|
169
|
+
vizTitle: 'Kapningsvisualisering',
|
|
170
|
+
emptyState: 'Lägg till kapningar och tryck på beräkna för att se kapningsplanen.',
|
|
171
|
+
noValidCuts: 'Kunde inte generera giltiga kapningar. Kontrollera måtten.',
|
|
172
|
+
noValidPanels: 'Kunde inte generera giltiga skivor. Kontrollera att delarna får plats på skivan.',
|
|
173
|
+
stockLabel: 'Material',
|
|
174
|
+
panelLabel: 'Panel',
|
|
175
|
+
wasteLabel: 'Spill:',
|
|
176
|
+
effLabel: 'Effekt:',
|
|
177
|
+
},
|
|
178
|
+
};
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { CutOptimizerUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'kesim-optimizasyonu';
|
|
6
|
+
const title = 'Çıta ve Panel Kesim Optimizasyonu';
|
|
7
|
+
const description =
|
|
8
|
+
'Ahşap, metal veya boru kesimlerini optimize etmek için ücretsiz hesaplayıcı. 1D ve 2D Bin Packing algoritmalarıyla atığı en aza indirin. Marangozluk, metalurji ve tadilatlar için idealdir.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: '1D kesim optimizasyonu nedir?',
|
|
13
|
+
answer:
|
|
14
|
+
'Standart uzun bir parçadan (çıta, profil, boru) mümkün olan en az atıkla daha küçük parçaların nasıl kesileceğini belirlemek için matematiksel algoritmalar (Bin Packing Problem gibi) kullanan bir araçtır.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Kesim kalınlığını (Kerf) neden dahil etmeliyiz?',
|
|
18
|
+
answer:
|
|
19
|
+
'Testere malzemeyi her kestiğinde, (testere bıçağına bağlı olarak normalde 2 mm ile 4 mm arasında) birkaç milimetre yok olur. Bu boşluğu hesaplamazsanız, listenizdeki son parçalar planlanandan daha kısa olacaktır.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Farklı uzunluktaki parçaları karıştırabilir miyim?',
|
|
23
|
+
answer:
|
|
24
|
+
'Evet, hesaplayıcımız her türlü uzunluk ve miktar kombinasyonunu kabul eder. Algoritma tüm olası kombinasyonları değerlendirecek ve stok malzemesinin maksimum kullanımına öncelik verecektir.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Kesim planımı nasıl kaydederim?',
|
|
28
|
+
answer:
|
|
29
|
+
'Optimize edildikten sonra, sayfayı yazdırabilir veya görsel şemanın ekran görüntüsünü alabilirsiniz. Bu, atölyede kesim sırasını karıştırmamanız için fiziksel bir rehber görevi görecektir.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: 'Temel Malzemeyi Tanımlayın (Stok)',
|
|
36
|
+
text: 'Mevcut çıta veya profilin toplam uzunluğunu girin (örneğin 2400 mm veya 6000 mm).',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Bıçak Kalınlığını Ayarlayın (Kerf)',
|
|
40
|
+
text: 'Hesaplamanın milimetrik olması için testerenin her adımda yok ettiği milimetre miktarını ayarlayın.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'İstenen Parçaları Listeleyin',
|
|
44
|
+
text: 'Projeniz için ihtiyacınız olan her bir parçanın uzunluğunu ve miktarını yazın.',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'Optimizasyonu Çalıştırın',
|
|
48
|
+
text: 'En verimli kesim şemasını ve oluşan atığın tam yüzdesini elde edin.',
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
53
|
+
'@context': 'https://schema.org',
|
|
54
|
+
'@type': 'FAQPage',
|
|
55
|
+
mainEntity: faqData.map((item) => ({
|
|
56
|
+
'@type': 'Question',
|
|
57
|
+
name: item.question,
|
|
58
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
59
|
+
})),
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'HowTo',
|
|
65
|
+
name: title,
|
|
66
|
+
description,
|
|
67
|
+
step: howToData.map((step, i) => ({
|
|
68
|
+
'@type': 'HowToStep',
|
|
69
|
+
position: i + 1,
|
|
70
|
+
name: step.name,
|
|
71
|
+
text: step.text,
|
|
72
|
+
})),
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
76
|
+
'@context': 'https://schema.org',
|
|
77
|
+
'@type': 'SoftwareApplication',
|
|
78
|
+
name: title,
|
|
79
|
+
description,
|
|
80
|
+
applicationCategory: 'UtilityApplication',
|
|
81
|
+
operatingSystem: 'All',
|
|
82
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
83
|
+
inLanguage: 'tr',
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const content: ToolLocaleContent<CutOptimizerUI> = {
|
|
87
|
+
slug,
|
|
88
|
+
title,
|
|
89
|
+
description,
|
|
90
|
+
faqTitle: 'Sıkça Sorulan Sorular',
|
|
91
|
+
faq: faqData,
|
|
92
|
+
bibliographyTitle: 'Teknik Referanslar',
|
|
93
|
+
bibliography: [
|
|
94
|
+
{
|
|
95
|
+
name: 'Cutting Stock Problem: Wikipedia',
|
|
96
|
+
url: 'https://en.wikipedia.org/wiki/Cutting_stock_problem',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'Bin Packing Problem: Wolfram MathWorld',
|
|
100
|
+
url: 'https://mathworld.wolfram.com/BinPackingProblem.html',
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
howTo: howToData,
|
|
104
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
105
|
+
seo: [
|
|
106
|
+
{
|
|
107
|
+
type: 'title',
|
|
108
|
+
text: 'Kesim Optimizasyonu Kesin Kılavuzu',
|
|
109
|
+
level: 2,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
type: 'paragraph',
|
|
113
|
+
html: 'Teknik olarak <strong>Stok Kesme Problemi (Cutting Stock Problem)</strong> olarak bilinen kesim optimizasyonu, endüstri mühendisliğindeki en büyüleyici lojistik zorluklardan biridir. 20 parçalı ve 5 stok çubuklu bir proje için milyonlarca olası kombinasyon vardır. Bir bilgisayar algoritması milisaniyeler içinde en uygun çözümü bulabilir ve olağan %15 atığı %5\'in altına indirebilir.',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: 'title',
|
|
117
|
+
text: 'Lineer 1D Kesim ve 2D Panel Kesimi',
|
|
118
|
+
level: 3,
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
type: 'card',
|
|
122
|
+
icon: 'mdi:arrow-expand-horizontal',
|
|
123
|
+
title: 'Çıtalar ve Profiller İçin Lineer Kesim',
|
|
124
|
+
html: '<p><strong>Lineer kesimde (1D)</strong>, optimizasyon sadece tek bir boyutta gerçekleşir: uzunluk. Malzemenin genişliğinin sabit olduğu varsayılır. Boyutsal kereste (çıtalar, kirişler), metal ve alüminyum profiller, PVC veya bakır borular ve saplamalar için idealdir.</p>',
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
type: 'card',
|
|
128
|
+
icon: 'mdi:view-grid',
|
|
129
|
+
title: 'Paneller ve Levhalar İçin Panel Kesimi',
|
|
130
|
+
html: '<p><strong>Panel kesiminde (2D)</strong>, genişlik ve uzunluk olmak üzere iki boyut yönetilir. Araç, her kesimin kenardan kenara gittiği giyotin tipi algoritmalar kullanır. Türev paneller (MDF, sunta), kontrplak, cam, pleksi ve metal levhalar için idealdir.</p>',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
type: 'title',
|
|
134
|
+
text: 'Kritik Faktör: Kesim Kalınlığı (Kerf)',
|
|
135
|
+
level: 3,
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
type: 'paragraph',
|
|
139
|
+
html: '<strong>Kerf</strong>, her kesimde yok olan malzemedir. Standart bir tezgah testere bıçağı, kesim başına 3,0 mm ile 3,2 mm arasında tüketir. El tipi daire testere 1,5 ile 2,5 mm tüketir. Pleksi üzerindeki lazer kesim sadece 0,1 ile 0,3 mm\'dir. 2400 mm\'lik çıtalarda 10 kesimlik bir projede kerf\'i görmezden gelmek, 30 mm ile 32 mm arasında yararlı malzeme kaybetmenize neden olabilir.',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
type: 'title',
|
|
143
|
+
text: 'Best Fit Decreasing Algoritması',
|
|
144
|
+
level: 3,
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: 'card',
|
|
148
|
+
icon: 'mdi:chip',
|
|
149
|
+
title: 'Optimizasyon Aracının İç Kapasitesi',
|
|
150
|
+
html: '<p>Optimizasyon aracının çekirdeği <strong>Best Fit Decreasing (BFD)</strong> stratejisini kullanır: önce tüm parçaları en büyükten en küçük uzunluğa göre sıralar (büyük parçaların sığdırılması daha zordur). Ardından, her parça için, en az artığı bırakacak şekilde sığabileceği mevcut artığı arar. Sadece hiçbirine sığmazsa yeni bir ham çubuk açar. Bu süreç, rastgele seçime kıyasla atığı bir büyüklük mertebesinde azaltır.</p>',
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
ui: {
|
|
154
|
+
modeLinearLabel: 'Lineer (Çubuklar)',
|
|
155
|
+
modePanelLabel: 'Panel (Levhalar)',
|
|
156
|
+
configTitle: 'Malzeme Yapılandırması',
|
|
157
|
+
labelStockLength: 'Malzeme Uzunluğu (mm)',
|
|
158
|
+
labelStockWidth: 'Malzeme Genişliği (mm)',
|
|
159
|
+
labelKerf: 'Bıçak Kalınlığı / Kerf (mm)',
|
|
160
|
+
cutsTitle: 'Kesim Listesi',
|
|
161
|
+
placeholderLength: 'Boy',
|
|
162
|
+
placeholderWidth: 'En',
|
|
163
|
+
placeholderQty: 'Adet',
|
|
164
|
+
btnRemoveTitle: 'Sil',
|
|
165
|
+
statStockUsed: 'Kullanılan Malzeme',
|
|
166
|
+
statTotalCuts: 'Toplam Kesim',
|
|
167
|
+
statWaste: 'Toplam Atık',
|
|
168
|
+
statEfficiency: 'Verimlilik',
|
|
169
|
+
vizTitle: 'Kesim Görselleştirme',
|
|
170
|
+
emptyState: 'Kesimleri ekleyin ve kesim planını görmek için hesapla düğmesine basın.',
|
|
171
|
+
noValidCuts: 'Geçerli kesimler oluşturulamadı. Ölçüleri kontrol edin.',
|
|
172
|
+
noValidPanels: 'Geçerli paneller oluşturulamadı. Parçaların levhaya sığdığından emin olun.',
|
|
173
|
+
stockLabel: 'Malzeme',
|
|
174
|
+
panelLabel: 'Panel',
|
|
175
|
+
wasteLabel: 'Atık:',
|
|
176
|
+
effLabel: 'Ver:',
|
|
177
|
+
},
|
|
178
|
+
};
|