@jjlmoya/utils-travel 1.1.0 → 1.2.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.
Files changed (86) hide show
  1. package/package.json +59 -58
  2. package/src/category/i18n/de.ts +185 -0
  3. package/src/category/i18n/fr.ts +86 -1
  4. package/src/category/i18n/id.ts +185 -0
  5. package/src/category/i18n/it.ts +185 -0
  6. package/src/category/i18n/ja.ts +181 -0
  7. package/src/category/i18n/ko.ts +181 -0
  8. package/src/category/i18n/nl.ts +185 -0
  9. package/src/category/i18n/pl.ts +181 -0
  10. package/src/category/i18n/pt.ts +181 -0
  11. package/src/category/i18n/ru.ts +181 -0
  12. package/src/category/i18n/sv.ts +181 -0
  13. package/src/category/i18n/tr.ts +181 -0
  14. package/src/category/i18n/zh.ts +181 -0
  15. package/src/category/index.ts +13 -1
  16. package/src/tests/i18n_coverage.test.ts +36 -0
  17. package/src/tests/locale_completeness.test.ts +24 -3
  18. package/src/tests/no_h1_in_components.test.ts +42 -2
  19. package/src/tests/schemas_fulfillment.test.ts +23 -0
  20. package/src/tests/slug_uniqueness.test.ts +81 -0
  21. package/src/tests/title_quality.test.ts +55 -0
  22. package/src/tool/luggage-calculator/i18n/de.ts +616 -0
  23. package/src/tool/luggage-calculator/i18n/en.ts +2 -2
  24. package/src/tool/luggage-calculator/i18n/id.ts +616 -0
  25. package/src/tool/luggage-calculator/i18n/it.ts +616 -0
  26. package/src/tool/luggage-calculator/i18n/ja.ts +616 -0
  27. package/src/tool/luggage-calculator/i18n/ko.ts +616 -0
  28. package/src/tool/luggage-calculator/i18n/nl.ts +616 -0
  29. package/src/tool/luggage-calculator/i18n/pl.ts +616 -0
  30. package/src/tool/luggage-calculator/i18n/pt.ts +616 -0
  31. package/src/tool/luggage-calculator/i18n/ru.ts +616 -0
  32. package/src/tool/luggage-calculator/i18n/sv.ts +616 -0
  33. package/src/tool/luggage-calculator/i18n/tr.ts +616 -0
  34. package/src/tool/luggage-calculator/i18n/zh.ts +616 -0
  35. package/src/tool/luggage-calculator/index.ts +13 -1
  36. package/src/tool/mini-adventures/i18n/de.ts +161 -0
  37. package/src/tool/mini-adventures/i18n/en.ts +1 -1
  38. package/src/tool/mini-adventures/i18n/es.ts +1 -1
  39. package/src/tool/mini-adventures/i18n/id.ts +161 -0
  40. package/src/tool/mini-adventures/i18n/it.ts +161 -0
  41. package/src/tool/mini-adventures/i18n/ja.ts +161 -0
  42. package/src/tool/mini-adventures/i18n/ko.ts +161 -0
  43. package/src/tool/mini-adventures/i18n/nl.ts +161 -0
  44. package/src/tool/mini-adventures/i18n/pl.ts +161 -0
  45. package/src/tool/mini-adventures/i18n/pt.ts +161 -0
  46. package/src/tool/mini-adventures/i18n/ru.ts +161 -0
  47. package/src/tool/mini-adventures/i18n/sv.ts +161 -0
  48. package/src/tool/mini-adventures/i18n/tr.ts +161 -0
  49. package/src/tool/mini-adventures/i18n/zh.ts +161 -0
  50. package/src/tool/mini-adventures/index.ts +13 -1
  51. package/src/tool/suitcase-checklist/i18n/de.ts +261 -0
  52. package/src/tool/suitcase-checklist/i18n/en.ts +1 -1
  53. package/src/tool/suitcase-checklist/i18n/es.ts +1 -1
  54. package/src/tool/suitcase-checklist/i18n/fr.ts +1 -1
  55. package/src/tool/suitcase-checklist/i18n/id.ts +261 -0
  56. package/src/tool/suitcase-checklist/i18n/it.ts +261 -0
  57. package/src/tool/suitcase-checklist/i18n/ja.ts +261 -0
  58. package/src/tool/suitcase-checklist/i18n/ko.ts +261 -0
  59. package/src/tool/suitcase-checklist/i18n/nl.ts +261 -0
  60. package/src/tool/suitcase-checklist/i18n/pl.ts +261 -0
  61. package/src/tool/suitcase-checklist/i18n/pt.ts +261 -0
  62. package/src/tool/suitcase-checklist/i18n/ru.ts +261 -0
  63. package/src/tool/suitcase-checklist/i18n/sv.ts +261 -0
  64. package/src/tool/suitcase-checklist/i18n/tr.ts +261 -0
  65. package/src/tool/suitcase-checklist/i18n/zh.ts +261 -0
  66. package/src/tool/suitcase-checklist/index.ts +13 -1
  67. package/src/tool/tip-calculator/i18n/de.ts +264 -0
  68. package/src/tool/tip-calculator/i18n/id.ts +264 -0
  69. package/src/tool/tip-calculator/i18n/it.ts +264 -0
  70. package/src/tool/tip-calculator/i18n/ja.ts +264 -0
  71. package/src/tool/tip-calculator/i18n/ko.ts +264 -0
  72. package/src/tool/tip-calculator/i18n/nl.ts +264 -0
  73. package/src/tool/tip-calculator/i18n/pl.ts +264 -0
  74. package/src/tool/tip-calculator/i18n/pt.ts +264 -0
  75. package/src/tool/tip-calculator/i18n/ru.ts +264 -0
  76. package/src/tool/tip-calculator/i18n/sv.ts +264 -0
  77. package/src/tool/tip-calculator/i18n/tr.ts +264 -0
  78. package/src/tool/tip-calculator/i18n/zh.ts +264 -0
  79. package/src/tool/tip-calculator/index.ts +13 -1
  80. package/src/tool/optimal-routes/bibliography.astro +0 -14
  81. package/src/tool/optimal-routes/component.astro +0 -439
  82. package/src/tool/optimal-routes/i18n/en.ts +0 -42
  83. package/src/tool/optimal-routes/i18n/es.ts +0 -52
  84. package/src/tool/optimal-routes/index.ts +0 -63
  85. package/src/tool/optimal-routes/lib/RouteManager.ts +0 -181
  86. package/src/tool/optimal-routes/seo.astro +0 -14
@@ -0,0 +1,264 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { TipCalculatorUI } from '../index';
4
+
5
+ const slug = 'mezhdunarodnyy-kalkulyator-chaevykh';
6
+ const title = 'Международный калькулятор чаевых';
7
+ const description = 'Рассчитайте, сколько чаевых оставить в поездках. Включает руководство по процентам и правила этикета для более чем 50 стран. Не ошибитесь при оплате!';
8
+
9
+ const ui: TipCalculatorUI = {
10
+ title: "Калькулятор чаевых",
11
+ badge: "Международный инструмент",
12
+ billLabel: "Сумма счета",
13
+ countryLabel: "Страна / Местные обычаи",
14
+ tipLabel: "Процент чаевых",
15
+ splitLabel: "Разделить счет",
16
+ summaryTip: "Итого чаевых",
17
+ summarySubtotal: "Сумма без чаевых",
18
+ summaryTotalPerson: "Итого на человека",
19
+ protocolTitle: "Этикет",
20
+ placeholderAmount: "0.00",
21
+ placeholderFilter: "Поиск страны...",
22
+ placeholderSelect: "Выберите страну",
23
+ countries: [
24
+ {
25
+ id: "usa",
26
+ name: "США и Канада",
27
+ min: 18,
28
+ max: 25,
29
+ default: 20,
30
+ culture: "Чаевые критически важны для зарплаты официантов. Ожидается от 18% до 25%. Не оставить их считается серьезным нарушением североамериканской культуры.",
31
+ },
32
+ {
33
+ id: "esp",
34
+ name: "Испания",
35
+ min: 0,
36
+ max: 10,
37
+ default: 5,
38
+ culture: "Необязательно. Принято округлять сдачу или оставлять 5-10% после ужина, если обслуживание было качественным.",
39
+ },
40
+ {
41
+ id: "jpn",
42
+ name: "Япония",
43
+ min: 0,
44
+ max: 0,
45
+ default: 0,
46
+ culture: "Без чаевых. Это считается оскорблением профессионализма. Если вы оставите деньги, скорее всего, вас догонят, чтобы их вернуть.",
47
+ },
48
+ {
49
+ id: "ita",
50
+ name: "Италия",
51
+ min: 0,
52
+ max: 10,
53
+ default: 0,
54
+ culture: "Плата 'coperto' включает обслуживание за столиком, хлеб и приборы, но это не сами чаевые. Оставить дополнительные 5-10% — жест ценный, но полностью добровольный.",
55
+ },
56
+ {
57
+ id: "fra",
58
+ name: "Франция",
59
+ min: 0,
60
+ max: 10,
61
+ default: 5,
62
+ culture: "Плата за обслуживание включена по закону. Оставляйте 'pourboire' (небольшую прибавку) только за исключительное отношение.",
63
+ },
64
+ {
65
+ id: "gbr",
66
+ name: "Великобритания",
67
+ min: 0,
68
+ max: 12.5,
69
+ default: 10,
70
+ culture: "В счет часто добавляется необязательный сбор 12,5%. Если его нет, стандартом в ресторанах считается 10%.",
71
+ },
72
+ {
73
+ id: "mex",
74
+ name: "Мексика",
75
+ min: 10,
76
+ max: 15,
77
+ default: 12,
78
+ culture: "Ожидается 'propina' в размере 10-15%. Это важная часть дохода для работников сектора.",
79
+ },
80
+ {
81
+ id: "arg",
82
+ name: "Аргентина",
83
+ min: 0,
84
+ max: 10,
85
+ default: 10,
86
+ culture: "Стандарт — 10%. Обычно их оставляют, когда обслуживание нормальное или хорошее.",
87
+ },
88
+ {
89
+ id: "bra",
90
+ name: "Бразилия",
91
+ min: 0,
92
+ max: 10,
93
+ default: 10,
94
+ culture: "Обычно 10% включаются в счет как 'Serviço'. Это необязательно, но большинство оплачивает.",
95
+ },
96
+ {
97
+ id: "deu",
98
+ name: "Германия",
99
+ min: 5,
100
+ max: 10,
101
+ default: 7,
102
+ culture: "Принято округлять сумму или добавлять 5-10%. При оплате назовите официанту общую сумму, включая чаевые.",
103
+ },
104
+ {
105
+ id: "tur",
106
+ name: "Турция",
107
+ min: 5,
108
+ max: 10,
109
+ default: 10,
110
+ culture: "В туристических зонах ожидается 10% наличными. Обычно добавить их в терминал по карте нельзя.",
111
+ },
112
+ {
113
+ id: "aus",
114
+ name: "Австралия",
115
+ min: 0,
116
+ max: 10,
117
+ default: 0,
118
+ culture: "Не ожидается. Зарплаты высокие. В элитных ресторанах можно оставить 10%.",
119
+ },
120
+ {
121
+ id: "chn",
122
+ name: "Китай",
123
+ min: 0,
124
+ max: 0,
125
+ default: 0,
126
+ culture: "Исторически чаевые не оставляют, во многих местах это запрещено или считается странным.",
127
+ },
128
+ {
129
+ id: "prt",
130
+ name: "Португалия",
131
+ min: 0,
132
+ max: 10,
133
+ default: 5,
134
+ culture: "Принято оставлять сдачу или округлять сумму. В туристических зонах 5-10% — обычное дело.",
135
+ },
136
+ {
137
+ id: "grc",
138
+ name: "Греция",
139
+ min: 0,
140
+ max: 10,
141
+ default: 5,
142
+ culture: "Обычно достаточно округлить счет. Дополнительные 5-10% приветствуются, но не обязательны.",
143
+ },
144
+ ]
145
+ };
146
+
147
+ const seo: ToolLocaleContent<TipCalculatorUI>['seo'] = [
148
+ {
149
+ type: "title",
150
+ text: "Международный гид по чаевым: этикет и проценты 2026",
151
+ level: 2,
152
+ },
153
+ {
154
+ type: "summary",
155
+ title: "Научитесь оставлять чаевые как местный житель в любой точке мира",
156
+ items: [
157
+ "Полный справочник ожидаемых процентов чаевых в основных туристических направлениях.",
158
+ "Как быстро рассчитать чаевые от суммы без налогов или от общего итога.",
159
+ "Разница между платой за обслуживание, 'coperto' и добровольными чаевыми.",
160
+ "Правила этикета для особых ситуаций: такси, отели и гиды.",
161
+ ],
162
+ },
163
+ {
164
+ type: "paragraph",
165
+ html: "Один из самых напряженных моментов любой заграничной поездки наступает, когда на стол приносят счет. Наш <strong>международный калькулятор чаевых</strong> создан, чтобы избавить вас от этой неопределенности.",
166
+ }
167
+ ];
168
+
169
+ const faq: ToolLocaleContent<TipCalculatorUI>['faq'] = [
170
+ {
171
+ question: "Обязательно ли оставлять чаевые в США?",
172
+ answer: "Юридически нет, но социально — обязательно. Зарплата официантов зависит от чаевых. Нормой считается от 18% до 25%.",
173
+ },
174
+ {
175
+ question: "В каких странах оставлять чаевые оскорбительно?",
176
+ answer: "В основном в Японии и Южной Корее. Качественный сервис считается частью профессионального долга и не требует дополнительной оплаты.",
177
+ },
178
+ {
179
+ question: "Нужно ли давать чаевые при плохом обслуживании?",
180
+ answer: "В странах, где это необязательно (Европа, Австралия), правильнее будет не оставлять ничего.",
181
+ },
182
+ {
183
+ question: "Как считаются чаевые: до или после налогов?",
184
+ answer: "В Северной Америке обычно считают от суммы до налогов. В Европе и Латинской Америке — всегда от полной суммы счета.",
185
+ },
186
+ ];
187
+
188
+ const bibliography: ToolLocaleContent<TipCalculatorUI>['bibliography'] = [
189
+ {
190
+ name: "Condé Nast Traveler: Tipping Etiquette Guide",
191
+ url: "https://www.cntraveler.com/stories/2008-11-11/etiquette-101-tipping-guide",
192
+ },
193
+ {
194
+ name: "Lonely Planet: Этикет и чаевые в Европе",
195
+ url: "https://www.lonelyplanet.com/articles/tipping-customs-europe",
196
+ },
197
+ {
198
+ name: "Western Union: Global Tipping Guide",
199
+ url: "https://www.westernunion.com/blog/en/global-tipping-guide/",
200
+ },
201
+ ];
202
+
203
+ const howTo: ToolLocaleContent<TipCalculatorUI>['howTo'] = [
204
+ {
205
+ name: "Введите сумму счета",
206
+ text: "Укажите общую сумму, указанную в чеке перед добавлением чаевых.",
207
+ },
208
+ {
209
+ name: "Выберите страну",
210
+ text: "Выберите место назначения, чтобы автоматически загрузить культурные рекомендации и стандартный процент.",
211
+ },
212
+ {
213
+ name: "Настройте и разделите",
214
+ text: "Если вас несколько человек, укажите количество людей, чтобы узнать долю каждого с учетом чаевых.",
215
+ },
216
+ ];
217
+
218
+ const faqSchema: WithContext<FAQPage> = {
219
+ '@context': 'https://schema.org',
220
+ '@type': 'FAQPage',
221
+ mainEntity: faq.map((item) => ({
222
+ '@type': 'Question',
223
+ name: item.question,
224
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
225
+ })),
226
+ };
227
+
228
+ const howToSchema: WithContext<HowTo> = {
229
+ '@context': 'https://schema.org',
230
+ '@type': 'HowTo',
231
+ name: title,
232
+ description: description,
233
+ step: howTo.map((step) => ({
234
+ '@type': 'HowToStep',
235
+ name: step.name,
236
+ text: step.text,
237
+ })),
238
+ };
239
+
240
+ const appSchema: WithContext<SoftwareApplication> = {
241
+ '@context': 'https://schema.org',
242
+ '@type': 'SoftwareApplication',
243
+ name: title,
244
+ description: description,
245
+ applicationCategory: 'FinanceApplication',
246
+ operatingSystem: 'All',
247
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
248
+ inLanguage: 'ru',
249
+ };
250
+
251
+ export const content: ToolLocaleContent<TipCalculatorUI> = {
252
+ slug,
253
+ title,
254
+ description,
255
+ ui,
256
+ seo,
257
+ faq,
258
+ faqTitle: "Часто задаваемые вопросы",
259
+ bibliography,
260
+ bibliographyTitle: "Источники и ссылки",
261
+ howTo,
262
+ howToTitle: "Как пользоваться калькулятором",
263
+ schemas: [faqSchema, howToSchema, appSchema],
264
+ };
@@ -0,0 +1,264 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { TipCalculatorUI } from '../index';
4
+
5
+ const slug = 'internationell-drickskalkylator';
6
+ const title = 'Internationell drickskalkylator';
7
+ const description = 'Beräkna hur mycket dricks du bör ge på dina resor. Inkluderar en guide för procentsatser och etikettregler för mer än 50 länder. Gör inget misstag när du betalar!';
8
+
9
+ const ui: TipCalculatorUI = {
10
+ title: "Drickskalkylator",
11
+ badge: "Internationellt dricksverktyg",
12
+ billLabel: "Fakturabelopp",
13
+ countryLabel: "Land / Lokala sedvänjor",
14
+ tipLabel: "Dricksprocent",
15
+ splitLabel: "Dela på notan",
16
+ summaryTip: "Total dricks",
17
+ summarySubtotal: "Subtotal",
18
+ summaryTotalPerson: "Totalt per person",
19
+ protocolTitle: "Etikett",
20
+ placeholderAmount: "0.00",
21
+ placeholderFilter: "Sök land...",
22
+ placeholderSelect: "Välj ett land",
23
+ countries: [
24
+ {
25
+ id: "usa",
26
+ name: "USA & Kanada",
27
+ min: 18,
28
+ max: 25,
29
+ default: 20,
30
+ culture: "Dricks är avgörande för kypares löner. Mellan 18 % och 25 % förväntas. Att inte lämna dricks anses vara ett allvarligt brott mot den nordamerikanska kulturen.",
31
+ },
32
+ {
33
+ id: "esp",
34
+ name: "Spanien",
35
+ min: 0,
36
+ max: 10,
37
+ default: 5,
38
+ culture: "Valfritt. Det är vanligt att runda upp växeln eller lämna 5–10 % på middagar om servicen har varit av bra kvalitet.",
39
+ },
40
+ {
41
+ id: "jpn",
42
+ name: "Japan",
43
+ min: 0,
44
+ max: 0,
45
+ default: 0,
46
+ culture: "Ingen dricks. Det anses vara en förolämpning mot professionalism. Om du lämnar pengar kommer de sannolikt att följa efter dig för att lämna tillbaka dem.",
47
+ },
48
+ {
49
+ id: "ita",
50
+ name: "Italien",
51
+ min: 0,
52
+ max: 10,
53
+ default: 0,
54
+ culture: "'Coperto' är en avgift för dukning, bröd och service, det är inte själva dricksen. Att lämna ytterligare 5–10 % är en uppskattad men helt valfri gest.",
55
+ },
56
+ {
57
+ id: "fra",
58
+ name: "Frankrike",
59
+ min: 0,
60
+ max: 10,
61
+ default: 5,
62
+ culture: "Service ingår enligt lag. Lämna 'pourboire' (litet extra) endast för exceptionellt bemötande.",
63
+ },
64
+ {
65
+ id: "gbr",
66
+ name: "Storbritannien",
67
+ min: 0,
68
+ max: 12.5,
69
+ default: 10,
70
+ culture: "En frivillig avgift på 12,5 % läggs ofta till på notan. Om den inte finns där är 10 % standard på restauranger.",
71
+ },
72
+ {
73
+ id: "mex",
74
+ name: "Mexiko",
75
+ min: 10,
76
+ max: 15,
77
+ default: 12,
78
+ culture: "En 'propina' på 10–15 % förväntas. Det är en viktig del av ekonomin för arbetare inom sektorn.",
79
+ },
80
+ {
81
+ id: "arg",
82
+ name: "Argentina",
83
+ min: 0,
84
+ max: 10,
85
+ default: 10,
86
+ culture: "Standarden är 10 %. Det lämnas nästan alltid ifall servicen har varit normal eller bra.",
87
+ },
88
+ {
89
+ id: "bra",
90
+ name: "Brasilien",
91
+ min: 0,
92
+ max: 10,
93
+ default: 10,
94
+ culture: "Normalt ingår en avgift på 10 % på notan som 'Serviço'. Det är valfritt men de flesta betalar.",
95
+ },
96
+ {
97
+ id: "deu",
98
+ name: "Tyskland",
99
+ min: 5,
100
+ max: 10,
101
+ default: 7,
102
+ culture: "Det är vanligt att runda upp eller lägga till 5–10 %. Berätta för kyparen det totala beloppet inkl. dricks när du betalar.",
103
+ },
104
+ {
105
+ id: "tur",
106
+ name: "Turkiet",
107
+ min: 5,
108
+ max: 10,
109
+ default: 10,
110
+ culture: "I turistområden förväntas 10 % i kontanter. Det kan vanligtvis inte läggas till på kreditkortet.",
111
+ },
112
+ {
113
+ id: "aus",
114
+ name: "Australien",
115
+ min: 0,
116
+ max: 10,
117
+ default: 0,
118
+ culture: "Förväntas inte. Lönerna är höga. På finare restauranger kan 10 % lämnas.",
119
+ },
120
+ {
121
+ id: "chn",
122
+ name: "Kina",
123
+ min: 0,
124
+ max: 0,
125
+ default: 0,
126
+ culture: "Historiskt sett lämnas ingen dricks och på många ställen är det förbjudet eller betraktas som konstigt.",
127
+ },
128
+ {
129
+ id: "prt",
130
+ name: "Portugal",
131
+ min: 0,
132
+ max: 10,
133
+ default: 5,
134
+ culture: "Det är sedvänja att lämna växeln eller runda upp. I turistområden är 5–10 % vanligt.",
135
+ },
136
+ {
137
+ id: "grc",
138
+ name: "Grekland",
139
+ min: 0,
140
+ max: 10,
141
+ default: 5,
142
+ culture: "Det räcker vanligtvis att runda upp notan. Extra 5–10 % är mycket uppskattat men inte obligatoriskt.",
143
+ },
144
+ ]
145
+ };
146
+
147
+ const seo: ToolLocaleContent<TipCalculatorUI>['seo'] = [
148
+ {
149
+ type: "title",
150
+ text: "Internationell dricksguide: Etikett och procentsatser 2026",
151
+ level: 2,
152
+ },
153
+ {
154
+ type: "summary",
155
+ title: "Lär dig lämna dricks som en lokalbo var som helst i världen",
156
+ items: [
157
+ "Komplett guide om förväntad dricksprocent på stora turistdestinationer.",
158
+ "Hur man snabbt beräknar dricksen utifrån subtotalen eller totalen inklusive skatt.",
159
+ "Skillnad mellan serviceavgifter, dukningsavgift (coperto) och frivillig dricks.",
160
+ "Etikettregler för speciella situationer: taxi, hotell och guider.",
161
+ ],
162
+ },
163
+ {
164
+ type: "paragraph",
165
+ html: "Ett av de mest stressiga ögonblicken på en internationell resa är när notan landar på bordet. Vår <strong>internationella dricks-kalkylator</strong> är utformad för att eliminera den osäkerheten.",
166
+ }
167
+ ];
168
+
169
+ const faq: ToolLocaleContent<TipCalculatorUI>['faq'] = [
170
+ {
171
+ question: "Är det obligatoriskt att lämna dricks i USA?",
172
+ answer: "Lagligt sett nej, men socialt sett ja. Servitörer är beroende av dricks för att nå upp till minimilönen. Det är normalt att lämna mellan 18 % och 25 %.",
173
+ },
174
+ {
175
+ question: "I vilka länder är det förolämpande att lämna dricks?",
176
+ answer: "Främst i Japan och Sydkorea. God service anses vara en del av plikten och kräver ingen extra ersättning.",
177
+ },
178
+ {
179
+ question: "Ska jag ge dricks om servicen var dålig?",
180
+ answer: "I länder där det är valfritt (Europa, Australien) är det mest korrekta att inte lämna någonting alls.",
181
+ },
182
+ {
183
+ question: "Beräknas dricksen före eller efter skatt?",
184
+ answer: "I Nordamerika beräknas den vanligtvis på subtotalen (före skatt). I Europa och Latinamerika beräknas den alltid på notans totalbelopp.",
185
+ },
186
+ ];
187
+
188
+ const bibliography: ToolLocaleContent<TipCalculatorUI>['bibliography'] = [
189
+ {
190
+ name: "Condé Nast Traveler: Tipping Etiquette Guide",
191
+ url: "https://www.cntraveler.com/stories/2008-11-11/etiquette-101-tipping-guide",
192
+ },
193
+ {
194
+ name: "Lonely Planet: Tipping and Etiquette in Europe",
195
+ url: "https://www.lonelyplanet.com/articles/tipping-customs-europe",
196
+ },
197
+ {
198
+ name: "Western Union: Global Tipping Guide",
199
+ url: "https://www.westernunion.com/blog/en/global-tipping-guide/",
200
+ },
201
+ ];
202
+
203
+ const howTo: ToolLocaleContent<TipCalculatorUI>['howTo'] = [
204
+ {
205
+ name: "Ange notans totalbelopp",
206
+ text: "Skriv in det totalbelopp som står på notan innan dricks läggs till.",
207
+ },
208
+ {
209
+ name: "Välj land",
210
+ text: "Välj din destination för att automatiskt ladda kulturella rekommendationer och standardprocent.",
211
+ },
212
+ {
213
+ name: "Justera och dela",
214
+ text: "Om ni är flera, ange antal personer för att veta hur mycket var och en ska betala inklusive dricks.",
215
+ },
216
+ ];
217
+
218
+ const faqSchema: WithContext<FAQPage> = {
219
+ '@context': 'https://schema.org',
220
+ '@type': 'FAQPage',
221
+ mainEntity: faq.map((item) => ({
222
+ '@type': 'Question',
223
+ name: item.question,
224
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
225
+ })),
226
+ };
227
+
228
+ const howToSchema: WithContext<HowTo> = {
229
+ '@context': 'https://schema.org',
230
+ '@type': 'HowTo',
231
+ name: title,
232
+ description: description,
233
+ step: howTo.map((step) => ({
234
+ '@type': 'HowToStep',
235
+ name: step.name,
236
+ text: step.text,
237
+ })),
238
+ };
239
+
240
+ const appSchema: WithContext<SoftwareApplication> = {
241
+ '@context': 'https://schema.org',
242
+ '@type': 'SoftwareApplication',
243
+ name: title,
244
+ description: description,
245
+ applicationCategory: 'FinanceApplication',
246
+ operatingSystem: 'All',
247
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'SEK' },
248
+ inLanguage: 'sv',
249
+ };
250
+
251
+ export const content: ToolLocaleContent<TipCalculatorUI> = {
252
+ slug,
253
+ title,
254
+ description,
255
+ ui,
256
+ seo,
257
+ faq,
258
+ faqTitle: "Vanliga frågor",
259
+ bibliography,
260
+ bibliographyTitle: "Källor och referenser",
261
+ howTo,
262
+ howToTitle: "Hur man använder kalkylatorn",
263
+ schemas: [faqSchema, howToSchema, appSchema],
264
+ };