@jjlmoya/utils-tools 1.2.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.
Files changed (180) hide show
  1. package/package.json +2 -1
  2. package/src/category/i18n/de.ts +172 -0
  3. package/src/category/i18n/id.ts +172 -0
  4. package/src/category/i18n/it.ts +172 -0
  5. package/src/category/i18n/ja.ts +172 -0
  6. package/src/category/i18n/ko.ts +172 -0
  7. package/src/category/i18n/nl.ts +172 -0
  8. package/src/category/i18n/pl.ts +172 -0
  9. package/src/category/i18n/pt.ts +172 -0
  10. package/src/category/i18n/ru.ts +172 -0
  11. package/src/category/i18n/sv.ts +172 -0
  12. package/src/category/i18n/tr.ts +172 -0
  13. package/src/category/i18n/zh.ts +172 -0
  14. package/src/category/index.ts +13 -1
  15. package/src/tests/i18n_coverage.test.ts +36 -0
  16. package/src/tests/locale_completeness.test.ts +1 -1
  17. package/src/tests/slug_language_code_format.test.ts +23 -0
  18. package/src/tests/slug_uniqueness.test.ts +81 -0
  19. package/src/tests/title_quality.test.ts +0 -1
  20. package/src/tool/date-diff-calculator/i18n/de.ts +132 -0
  21. package/src/tool/date-diff-calculator/i18n/fr.ts +1 -1
  22. package/src/tool/date-diff-calculator/i18n/id.ts +132 -0
  23. package/src/tool/date-diff-calculator/i18n/it.ts +132 -0
  24. package/src/tool/date-diff-calculator/i18n/ja.ts +132 -0
  25. package/src/tool/date-diff-calculator/i18n/ko.ts +132 -0
  26. package/src/tool/date-diff-calculator/i18n/nl.ts +132 -0
  27. package/src/tool/date-diff-calculator/i18n/pl.ts +132 -0
  28. package/src/tool/date-diff-calculator/i18n/pt.ts +132 -0
  29. package/src/tool/date-diff-calculator/i18n/ru.ts +132 -0
  30. package/src/tool/date-diff-calculator/i18n/sv.ts +132 -0
  31. package/src/tool/date-diff-calculator/i18n/tr.ts +132 -0
  32. package/src/tool/date-diff-calculator/i18n/zh.ts +132 -0
  33. package/src/tool/date-diff-calculator/index.ts +12 -0
  34. package/src/tool/drive-direct-link/i18n/de.ts +118 -0
  35. package/src/tool/drive-direct-link/i18n/id.ts +118 -0
  36. package/src/tool/drive-direct-link/i18n/it.ts +118 -0
  37. package/src/tool/drive-direct-link/i18n/ja.ts +118 -0
  38. package/src/tool/drive-direct-link/i18n/ko.ts +118 -0
  39. package/src/tool/drive-direct-link/i18n/nl.ts +118 -0
  40. package/src/tool/drive-direct-link/i18n/pl.ts +118 -0
  41. package/src/tool/drive-direct-link/i18n/pt.ts +118 -0
  42. package/src/tool/drive-direct-link/i18n/ru.ts +118 -0
  43. package/src/tool/drive-direct-link/i18n/sv.ts +118 -0
  44. package/src/tool/drive-direct-link/i18n/tr.ts +118 -0
  45. package/src/tool/drive-direct-link/i18n/zh.ts +118 -0
  46. package/src/tool/drive-direct-link/index.ts +12 -0
  47. package/src/tool/email-list-cleaner/i18n/de.ts +140 -0
  48. package/src/tool/email-list-cleaner/i18n/fr.ts +1 -1
  49. package/src/tool/email-list-cleaner/i18n/id.ts +140 -0
  50. package/src/tool/email-list-cleaner/i18n/it.ts +140 -0
  51. package/src/tool/email-list-cleaner/i18n/ja.ts +140 -0
  52. package/src/tool/email-list-cleaner/i18n/ko.ts +140 -0
  53. package/src/tool/email-list-cleaner/i18n/nl.ts +140 -0
  54. package/src/tool/email-list-cleaner/i18n/pl.ts +140 -0
  55. package/src/tool/email-list-cleaner/i18n/pt.ts +140 -0
  56. package/src/tool/email-list-cleaner/i18n/ru.ts +140 -0
  57. package/src/tool/email-list-cleaner/i18n/sv.ts +140 -0
  58. package/src/tool/email-list-cleaner/i18n/tr.ts +140 -0
  59. package/src/tool/email-list-cleaner/i18n/zh.ts +140 -0
  60. package/src/tool/email-list-cleaner/index.ts +12 -0
  61. package/src/tool/env-badge-spain/i18n/de.ts +153 -0
  62. package/src/tool/env-badge-spain/i18n/es.ts +1 -1
  63. package/src/tool/env-badge-spain/i18n/fr.ts +1 -1
  64. package/src/tool/env-badge-spain/i18n/id.ts +153 -0
  65. package/src/tool/env-badge-spain/i18n/it.ts +153 -0
  66. package/src/tool/env-badge-spain/i18n/ja.ts +153 -0
  67. package/src/tool/env-badge-spain/i18n/ko.ts +153 -0
  68. package/src/tool/env-badge-spain/i18n/nl.ts +153 -0
  69. package/src/tool/env-badge-spain/i18n/pl.ts +153 -0
  70. package/src/tool/env-badge-spain/i18n/pt.ts +153 -0
  71. package/src/tool/env-badge-spain/i18n/ru.ts +153 -0
  72. package/src/tool/env-badge-spain/i18n/sv.ts +153 -0
  73. package/src/tool/env-badge-spain/i18n/tr.ts +153 -0
  74. package/src/tool/env-badge-spain/i18n/zh.ts +153 -0
  75. package/src/tool/env-badge-spain/index.ts +12 -0
  76. package/src/tool/morse-beacon/i18n/de.ts +157 -0
  77. package/src/tool/morse-beacon/i18n/id.ts +157 -0
  78. package/src/tool/morse-beacon/i18n/it.ts +157 -0
  79. package/src/tool/morse-beacon/i18n/ja.ts +157 -0
  80. package/src/tool/morse-beacon/i18n/ko.ts +157 -0
  81. package/src/tool/morse-beacon/i18n/nl.ts +157 -0
  82. package/src/tool/morse-beacon/i18n/pl.ts +157 -0
  83. package/src/tool/morse-beacon/i18n/pt.ts +157 -0
  84. package/src/tool/morse-beacon/i18n/ru.ts +157 -0
  85. package/src/tool/morse-beacon/i18n/sv.ts +157 -0
  86. package/src/tool/morse-beacon/i18n/tr.ts +157 -0
  87. package/src/tool/morse-beacon/i18n/zh.ts +157 -0
  88. package/src/tool/morse-beacon/index.ts +13 -1
  89. package/src/tool/password-generator/i18n/de.ts +166 -0
  90. package/src/tool/password-generator/i18n/fr.ts +1 -1
  91. package/src/tool/password-generator/i18n/id.ts +166 -0
  92. package/src/tool/password-generator/i18n/it.ts +166 -0
  93. package/src/tool/password-generator/i18n/ja.ts +166 -0
  94. package/src/tool/password-generator/i18n/ko.ts +166 -0
  95. package/src/tool/password-generator/i18n/nl.ts +166 -0
  96. package/src/tool/password-generator/i18n/pl.ts +166 -0
  97. package/src/tool/password-generator/i18n/pt.ts +166 -0
  98. package/src/tool/password-generator/i18n/ru.ts +166 -0
  99. package/src/tool/password-generator/i18n/sv.ts +166 -0
  100. package/src/tool/password-generator/i18n/tr.ts +166 -0
  101. package/src/tool/password-generator/i18n/zh.ts +166 -0
  102. package/src/tool/password-generator/index.ts +13 -1
  103. package/src/tool/routes/i18n/de.ts +157 -0
  104. package/src/tool/routes/i18n/id.ts +157 -0
  105. package/src/tool/routes/i18n/it.ts +157 -0
  106. package/src/tool/routes/i18n/ja.ts +157 -0
  107. package/src/tool/routes/i18n/ko.ts +157 -0
  108. package/src/tool/routes/i18n/nl.ts +157 -0
  109. package/src/tool/routes/i18n/pl.ts +157 -0
  110. package/src/tool/routes/i18n/pt.ts +157 -0
  111. package/src/tool/routes/i18n/ru.ts +157 -0
  112. package/src/tool/routes/i18n/sv.ts +157 -0
  113. package/src/tool/routes/i18n/tr.ts +157 -0
  114. package/src/tool/routes/i18n/zh.ts +157 -0
  115. package/src/tool/routes/index.ts +13 -1
  116. package/src/tool/rule-of-three/i18n/de.ts +171 -0
  117. package/src/tool/rule-of-three/i18n/id.ts +171 -0
  118. package/src/tool/rule-of-three/i18n/it.ts +171 -0
  119. package/src/tool/rule-of-three/i18n/ja.ts +171 -0
  120. package/src/tool/rule-of-three/i18n/ko.ts +171 -0
  121. package/src/tool/rule-of-three/i18n/nl.ts +171 -0
  122. package/src/tool/rule-of-three/i18n/pl.ts +171 -0
  123. package/src/tool/rule-of-three/i18n/pt.ts +171 -0
  124. package/src/tool/rule-of-three/i18n/ru.ts +171 -0
  125. package/src/tool/rule-of-three/i18n/sv.ts +171 -0
  126. package/src/tool/rule-of-three/i18n/tr.ts +171 -0
  127. package/src/tool/rule-of-three/i18n/zh.ts +171 -0
  128. package/src/tool/rule-of-three/index.ts +13 -1
  129. package/src/tool/seo-content-optimizer/i18n/de.ts +136 -0
  130. package/src/tool/seo-content-optimizer/i18n/id.ts +136 -0
  131. package/src/tool/seo-content-optimizer/i18n/it.ts +136 -0
  132. package/src/tool/seo-content-optimizer/i18n/ja.ts +136 -0
  133. package/src/tool/seo-content-optimizer/i18n/ko.ts +136 -0
  134. package/src/tool/seo-content-optimizer/i18n/nl.ts +136 -0
  135. package/src/tool/seo-content-optimizer/i18n/pl.ts +136 -0
  136. package/src/tool/seo-content-optimizer/i18n/pt.ts +136 -0
  137. package/src/tool/seo-content-optimizer/i18n/ru.ts +136 -0
  138. package/src/tool/seo-content-optimizer/i18n/sv.ts +136 -0
  139. package/src/tool/seo-content-optimizer/i18n/tr.ts +136 -0
  140. package/src/tool/seo-content-optimizer/i18n/zh.ts +136 -0
  141. package/src/tool/seo-content-optimizer/index.ts +12 -0
  142. package/src/tool/speed-reader/i18n/de.ts +152 -0
  143. package/src/tool/speed-reader/i18n/id.ts +152 -0
  144. package/src/tool/speed-reader/i18n/it.ts +152 -0
  145. package/src/tool/speed-reader/i18n/ja.ts +152 -0
  146. package/src/tool/speed-reader/i18n/ko.ts +152 -0
  147. package/src/tool/speed-reader/i18n/nl.ts +152 -0
  148. package/src/tool/speed-reader/i18n/pl.ts +152 -0
  149. package/src/tool/speed-reader/i18n/pt.ts +152 -0
  150. package/src/tool/speed-reader/i18n/ru.ts +152 -0
  151. package/src/tool/speed-reader/i18n/sv.ts +152 -0
  152. package/src/tool/speed-reader/i18n/tr.ts +152 -0
  153. package/src/tool/speed-reader/i18n/zh.ts +152 -0
  154. package/src/tool/speed-reader/index.ts +12 -0
  155. package/src/tool/text-pixel-calculator/i18n/de.ts +133 -0
  156. package/src/tool/text-pixel-calculator/i18n/id.ts +133 -0
  157. package/src/tool/text-pixel-calculator/i18n/it.ts +133 -0
  158. package/src/tool/text-pixel-calculator/i18n/ja.ts +133 -0
  159. package/src/tool/text-pixel-calculator/i18n/ko.ts +133 -0
  160. package/src/tool/text-pixel-calculator/i18n/nl.ts +133 -0
  161. package/src/tool/text-pixel-calculator/i18n/pl.ts +133 -0
  162. package/src/tool/text-pixel-calculator/i18n/pt.ts +133 -0
  163. package/src/tool/text-pixel-calculator/i18n/ru.ts +133 -0
  164. package/src/tool/text-pixel-calculator/i18n/sv.ts +133 -0
  165. package/src/tool/text-pixel-calculator/i18n/tr.ts +133 -0
  166. package/src/tool/text-pixel-calculator/i18n/zh.ts +133 -0
  167. package/src/tool/text-pixel-calculator/index.ts +12 -0
  168. package/src/tool/whatsapp-link/i18n/de.ts +128 -0
  169. package/src/tool/whatsapp-link/i18n/id.ts +128 -0
  170. package/src/tool/whatsapp-link/i18n/it.ts +128 -0
  171. package/src/tool/whatsapp-link/i18n/ja.ts +128 -0
  172. package/src/tool/whatsapp-link/i18n/ko.ts +128 -0
  173. package/src/tool/whatsapp-link/i18n/nl.ts +128 -0
  174. package/src/tool/whatsapp-link/i18n/pl.ts +128 -0
  175. package/src/tool/whatsapp-link/i18n/pt.ts +128 -0
  176. package/src/tool/whatsapp-link/i18n/ru.ts +128 -0
  177. package/src/tool/whatsapp-link/i18n/sv.ts +128 -0
  178. package/src/tool/whatsapp-link/i18n/tr.ts +128 -0
  179. package/src/tool/whatsapp-link/i18n/zh.ts +128 -0
  180. package/src/tool/whatsapp-link/index.ts +12 -0
@@ -0,0 +1,172 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'verktyg',
5
+ title: 'Praktiska och Mångsidiga Onlinetvtyg',
6
+ description: 'Lös vardagsproblem med gratis online-verktyg. Ruttoptimerare, lösenordsgeneratorer, RSVP-snabbläsning och snabba kalkylverktyg.',
7
+ seo: [
8
+ {
9
+ type: 'title',
10
+ text: 'Praktiska Verktyg: Digitala Lösningar för Vardagen',
11
+ level: 2,
12
+ },
13
+ {
14
+ type: 'paragraph',
15
+ html: 'I en digital värld full av komplexa appar behöver vi ibland bara ett <strong>enkelt, snabbt och effektivt verktyg</strong>. I den här sektionen har vi samlat ett "utility belt" med <strong>gratis online-verktyg</strong> som löser omedelbara praktiska problem: från säkerheten för dina konton till optimering av dina fysiska resor.',
16
+ },
17
+ {
18
+ type: 'paragraph',
19
+ html: 'Våra applikationer är designade enligt principen om maximal nytta och minimal friktion. Inga registreringar, inga väntetider och med lokal bearbetning så att dina personuppgifter alltid är skyddade.',
20
+ },
21
+ {
22
+ type: 'title',
23
+ text: 'Säkerhet och Skydd: Generering av Starka Nycklar',
24
+ level: 2,
25
+ },
26
+ {
27
+ type: 'paragraph',
28
+ html: 'Den första försvarslinjen på internet är ett starkt lösenord. Vår <strong>lösenordsgenerator</strong> använder kryptografiska slumpmässiga algoritmer för att skapa nycklar som är omöjliga att förutsäga eller hacka med brute force. Anpassa längden och typen av tecken för att uppfylla säkerhetsstandarderna för 2026.',
29
+ },
30
+ {
31
+ type: 'title',
32
+ text: 'Logistik och Snabbmatematik: Rutter och Proportioner',
33
+ level: 2,
34
+ },
35
+ {
36
+ type: 'paragraph',
37
+ html: 'Att spara tid och bränsle är möjligt genom optimering. <strong>Ruttoptimeraren</strong> gör det möjligt att organisera flera stopp för att beräkna den mest effektiva vägen, perfekt för bud, säljare eller resenärer. Å andra sidan är vår kalkylator för <strong>tre-regeln</strong> den ultimata matematiska livräddaren för att lösa skalor, procent och proportioner på några sekunder.',
38
+ },
39
+ {
40
+ type: 'title',
41
+ text: 'Kognitiv Produktivitet: RSVP-Snabbläsning',
42
+ level: 2,
43
+ },
44
+ {
45
+ type: 'paragraph',
46
+ html: 'Informationsöverflöd kräver nya former av konsumtion. Baserat på teknologin <strong>RSVP (Rapid Serial Visual Presentation)</strong>, låter vår snabbläsare dig bearbeta texter i hastigheter över 1000 ord per minut genom att eliminera subvokalisering och fokusera din uppmärksamhet på det semantiska flödet i innehållet.',
47
+ },
48
+ {
49
+ type: 'title',
50
+ text: 'Kommunikation och Länkar: WhatsApp och SEO',
51
+ level: 2,
52
+ },
53
+ {
54
+ type: 'paragraph',
55
+ html: 'Att underlätta kontakt är avgörande för företag och frilansare. <strong>WhatsApp-länkgeneratorn</strong> gör det möjligt att skapa direkta wa.me-länkar med förkonfigurerade meddelanden. För innehållsskapare analyserar <strong>SEO-optimeraren</strong> sökordstäthet och teckengränser för att säkerställa att dina inlägg glänser i sökmotorer och sociala nätverk.',
56
+ },
57
+ {
58
+ type: 'title',
59
+ text: 'Taktiska Verktyg: Morsesignal och Nödsituationer',
60
+ level: 2,
61
+ },
62
+ {
63
+ type: 'paragraph',
64
+ html: 'Mobiltelefonen är också ett verktyg för fysisk säkerhet. <strong>Morsesignalen</strong> förvandlar din enhet till en nödsändare som använder kamerablixten, vibrationen och skärmens ljusstyrka för att sända SOS-signaler eller anpassade meddelanden enligt den internationella morsekoden.',
65
+ },
66
+ {
67
+ type: 'list',
68
+ items: [
69
+ '<strong>Multifunktionalitet:</strong> Från matematiska beräkningar till cybersäkerhet och personlig logistik.',
70
+ '<strong>Responstid:</strong> Verktyg optimerade för att laddas omedelbart på vilken mobil enhet som helst.',
71
+ '<strong>Zero Tracking:</strong> Vi sparar inte dina lösenord eller dina rutter; integritet är vår tekniska prioritet.',
72
+ '<strong>Uppdatering 2026:</strong> Efterlevnad av de senaste säkerhetsbestämmelserna och moderna webbstandarder.',
73
+ ],
74
+ },
75
+ {
76
+ type: 'tip',
77
+ title: 'Digitalt Säkerhetstips',
78
+ html: '<strong>Cyberhygien:</strong> Använd aldrig samma lösenord för två olika tjänster. Generera en unik nyckel med vårt verktyg och spara den i en pålitlig lösenordshanterare för att hålla din digitala identitet säker.',
79
+ },
80
+ {
81
+ type: 'title',
82
+ text: 'Säkerhetsutvärdering: Granskning av Komprometterade Lösenord',
83
+ level: 2,
84
+ },
85
+ {
86
+ type: 'paragraph',
87
+ html: 'Att ha ett starkt lösenord idag betyder inte att det är säkert imorgon. Om en databas hackas i en annan tjänst och du delar samma nyckel är du i riskzonen. Verktyg som lösenordsgranskning mot databaser (HIBP - Have I Been Pwned) gör det möjligt att kontrollera om dina uppgifter cirkulerar på darknet. Våra verktyg inkluderar integration med säkerhets-API:er så att du vet exakt om din nyckel någonsin har komprometterats.',
88
+ },
89
+ {
90
+ type: 'title',
91
+ text: 'Digital Ergonomi: Minska Friktion, Öka Produktivitet',
92
+ level: 2,
93
+ },
94
+ {
95
+ type: 'paragraph',
96
+ html: 'Digital friktion är osynlig men kostsam. Att skriva ett telefonnummer i rätt format för WhatsApp varje gång du vill kontakta någon är friktion. Att beräkna en rabatt manuellt är friktion. Våra verktyg eliminerar dessa upprepade mikrosteg. Ruttoptimeraren sparar dig 2 timmar i veckan om du gör leveranser. RSVP-läsaren sparar dig 3 timmar läsning per vecka. Multiplicerat med 52 veckor är det hela månader av återvunnet liv.',
97
+ },
98
+ {
99
+ type: 'title',
100
+ text: 'Artificiell Intelligens och Prediktiv Analys i Verktyg 2026',
101
+ level: 2,
102
+ },
103
+ {
104
+ type: 'paragraph',
105
+ html: 'Moderna verktyg är inte statiska; de lär sig av dig. Lösenordsgeneratorn kan föreslå säkra mönster enligt de specifika reglerna för varje plattform. Ruttoptimeraren kan lära sig dina historiska leveransmönster och förutse flaskhalsar. RSVP-läsaren kan anpassa sin hastighet till din förståelse i realtid. Dessa intelligenslager förvandlar enkla verktyg till personliga assistenter som utvecklas med dig.',
106
+ },
107
+ {
108
+ type: 'title',
109
+ text: 'Uppgiftshantering och Planering: Pomodoro och Isokroner',
110
+ level: 2,
111
+ },
112
+ {
113
+ type: 'paragraph',
114
+ html: 'Produktivitet är inte bara snabbhet; det är smart tidshantering. Vår <strong>interaktiva Pomodoro-teknik</strong> delar upp din arbetsdag i fokuserade block på 25 minuter, med beräknade pauser för optimal kognitiv återhämtning. Den <strong>isokroniska kalkylatorn</strong> visar hur lång tid dina uppgifter kommer att ta baserat på historik, vilket gör att du kan planera din dag realistiskt istället för optimistiskt.',
115
+ },
116
+ {
117
+ type: 'title',
118
+ text: 'Datavalidering och Granskning av Information',
119
+ level: 2,
120
+ },
121
+ {
122
+ type: 'paragraph',
123
+ html: 'En lista med 500 e-postadresser — hur många är äkta? Vår <strong>batch-datavaliderare</strong> verifierar format, domän och om servern accepterar e-post för den adressen. För telefonnummer valideras internationella format och geografiska nummer. I affärsapplikationer förhindrar datavalidering katastrofer: att skicka e-post till obefintliga adresser är slöseri; att ringa falska nummer är frustration.',
124
+ },
125
+ {
126
+ type: 'title',
127
+ text: 'Enhetsomvandling: Massa, Volym, Temperatur, Energi',
128
+ level: 2,
129
+ },
130
+ {
131
+ type: 'paragraph',
132
+ html: 'Omvandlingar verkar enkla tills du behöver omvandla 100 Fahrenheit till Celsius under press. Vår <strong>universella enhetsomvandlare</strong> hanterar omvandlingar av över 500 storheter: längd (meter till fot till mil), massa (kg till pund till ounce), volym (liter till gallon), temperatur (med exakt formelkorrigering), energi (joule till kalori), effekt (watt till hästkrafter). Skillnaden mellan en generisk omvandlare och en teknisk är precisionen.',
133
+ },
134
+ {
135
+ type: 'title',
136
+ text: 'Avancerad Procenträkning och Sammansatta Variationer',
137
+ level: 2,
138
+ },
139
+ {
140
+ type: 'paragraph',
141
+ html: '10 % av 100 är 10. Enkelt. Men om du ökar 100 med 10 % (vilket blir 110) och sedan ökar med ytterligare 10 %, blir resultatet 121 eller 120? Det är 121 (sammansatt variation). Vår <strong>avancerade procentkalkylator</strong> hanterar nästlade variationer, multipla rabatter och kalkylering av "marginal" kontra "påslag". En återförsäljare som köper för 100 € och lägger till 50 % påslag säljer för 150 €; om han sedan tillämpar 20 % rabatt säljer han för 120 € (inte 130 €). Skillnaden på 10 € är vad många företag förlorar på grund av felaktiga beräkningar.',
142
+ },
143
+ {
144
+ type: 'title',
145
+ text: 'Talanalys: Faktorisering, Primalitet, Delare',
146
+ level: 2,
147
+ },
148
+ {
149
+ type: 'paragraph',
150
+ html: 'En matematiker kan behöva veta om 991 är ett primtal. En kryptograf behöver faktorisera 91 (det är 7 × 13). Vår <strong>talanalysator</strong> avgör om ett tal är ett primtal, listar dess delare, faktoriserar i primtal och beräknar dess Euler-funktion (viktig i RSA-kryptografi). För matematisk utbildning eller forskning ger dessa verktyg djup numerisk information.',
151
+ },
152
+ {
153
+ type: 'title',
154
+ text: 'Enkelhet som den högsta sofistikeringen 2026',
155
+ level: 2,
156
+ },
157
+ {
158
+ type: 'paragraph',
159
+ html: 'År 2026 har "enkelt" återigen blivit premium. Vi är trötta på appar som försöker göra allt och inte gör något bra. Dessa verktyg är återgången till det väsentliga: tillbehör som gör en enda sak, men gör den med absolut precision och respekt för användaren. Varje minut du sparar med ett välutformat verktyg är en minut som du får tillbaka av ditt liv.',
160
+ },
161
+ {
162
+ type: 'stats',
163
+ columns: 2,
164
+ items: [
165
+ { value: 'Kryptografisk', label: 'Säkerhet', icon: 'mdi:shield-check' },
166
+ { value: 'RSVP', label: 'Hastighet', icon: 'mdi:speedometer' },
167
+ { value: 'Optimal', label: 'Logistik', icon: 'mdi:map-marker-path' },
168
+ { value: 'Local-First', label: 'Integritet', icon: 'mdi:lock-check' },
169
+ ],
170
+ },
171
+ ],
172
+ };
@@ -0,0 +1,172 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'araclar',
5
+ title: 'Pratik ve Çok Amaçlı Çevrimiçi Araçlar',
6
+ description: 'Günlük sorunları ücretsiz çevrimiçi araçlarla çözün. Rota optimize ediciler, şifre oluşturucular, RSVP hızlı okuma ve hızlı hesaplama yardımcı programları.',
7
+ seo: [
8
+ {
9
+ type: 'title',
10
+ text: 'Pratik Yardımcı Programlar: Günlük Yaşam İçin Dijital Çözümler',
11
+ level: 2,
12
+ },
13
+ {
14
+ type: 'paragraph',
15
+ html: 'Karmaşık uygulamalarla dolu bir dijital dünyada, bazen en çok ihtiyacımız olan şey <strong>basit, hızlı ve etkili bir araçtır</strong>. Bu bölümde, hesaplarınızın güvenliğinden fiziksel seyahatlerinizin optimizasyonuna kadar anlık pratik sorunları çözen <strong>ücretsiz çevrimiçi araçlardan</strong> oluşan bir "yardımcı kemer" derledik.',
16
+ },
17
+ {
18
+ type: 'paragraph',
19
+ html: 'Uygulamalarımız maksimum fayda ve minimum sürtünme ilkesiyle tasarlanmıştır. Kayıt yok, bekleme yok ve kişisel verilerinizin her zaman korunması için yerel işleme mevcuttur.',
20
+ },
21
+ {
22
+ type: 'title',
23
+ text: 'Güvenlik ve Koruma: Güçlü Şifre Oluşturma',
24
+ level: 2,
25
+ },
26
+ {
27
+ type: 'paragraph',
28
+ html: 'İnternetteki ilk savunma hattı güçlü bir şifredir. <strong>Şifre oluşturucumuz</strong>, kaba kuvvetle (brute force) tahmin edilmesi veya hacklenmesi imkansız anahtarlar oluşturmak için kriptografik rastgelelik algoritmaları kullanır. 2026 güvenlik standartlarını karşılamak için uzunluğu ve karakter türünü özelleştirin.',
29
+ },
30
+ {
31
+ type: 'title',
32
+ text: 'Lojistik ve Hızlı Matematik: Rotalar ve Oranlar',
33
+ level: 2,
34
+ },
35
+ {
36
+ type: 'paragraph',
37
+ html: 'Optimizasyon yoluyla zaman ve yakıt tasarrufu sağlamak mümkündür. <strong>Rota optimize edici</strong>, kuryeler, satış temsilcileri veya gezginler için ideal olan en verimli rotayı hesaplamak üzere birden fazla durak düzenlemenize olanak tanır. Öte yandan, <strong>doğru orantı (içler dışlar)</strong> hesaplayıcımız, ölçekleri, yüzdeleri ve oranları saniyeler içinde çözmek için nihai matematiksel cankurtarandır.',
38
+ },
39
+ {
40
+ type: 'title',
41
+ text: 'Bilişsel Verimlilik: RSVP Hızlı Okuma',
42
+ level: 2,
43
+ },
44
+ {
45
+ type: 'paragraph',
46
+ html: 'Bilgi bombardımanı yeni tüketim biçimleri gerektirir. <strong>RSVP (Hızlı Seri Görsel Sunum)</strong> teknolojisine dayanan hızlı okuyucumuz, iç seslendirmeyi ortadan kaldırarak ve dikkatinizi içeriğin anlamsal akışına odaklayarak metinleri dakikada 1000 kelimenin üzerindeki hızlarda işlemenize olanak tanır.',
47
+ },
48
+ {
49
+ type: 'title',
50
+ text: 'İletişim ve Bağlantılar: WhatsApp ve SEO',
51
+ level: 2,
52
+ },
53
+ {
54
+ type: 'paragraph',
55
+ html: 'İletişimi kolaylaştırmak, işletmeler ve serbest çalışanlar için hayati önem taşır. <strong>WhatsApp bağlantı oluşturucu</strong>, önceden yapılandırılmış mesajlarla doğrudan wa.me bağlantıları oluşturmanıza olanak tanır. İçerik oluşturucular için <strong>SEO optimize edici</strong>, anahtar kelime yoğunluğunu ve karakter sınırlarını analiz ederek paylaşımlarınızın arama motorlarında ve sosyal ağlarda parlamasını sağlar.',
56
+ },
57
+ {
58
+ type: 'title',
59
+ text: 'Taktiksel Yardımcı Programlar: Mors Sinyali ve Acil Durumlar',
60
+ level: 2,
61
+ },
62
+ {
63
+ type: 'paragraph',
64
+ html: 'Cep telefonu aynı zamanda fiziksel bir güvenlik aracıdır. <strong>Mors Sinyali</strong>, kamera flaşını, titreşimi ve ekran parlaklığını kullanarak uluslararası Mors kodu altında SOS sinyalleri veya özel mesajlar yaymak için terminalinizi bir acil durum vericisine dönüştürür.',
65
+ },
66
+ {
67
+ type: 'list',
68
+ items: [
69
+ '<strong>Çok Fonksiyonluluk:</strong> Matematiksel hesaplamalardan siber güvenliğe ve kişisel lojistiğe kadar.',
70
+ '<strong>Yanıt Hızı:</strong> Herhangi bir mobil cihazda anında yüklenecek şekilde optimize edilmiş araçlar.',
71
+ '<strong>Sıfır İzleme:</strong> Şifrelerinizi veya rotalarınızı kaydetmiyoruz; gizlilik bizim teknik önceliğimizdir.',
72
+ '<strong>2026 Güncellemesi:</strong> En son güvenlik düzenlemeleri ve modern web standartlarıyla uyumluluk.',
73
+ ],
74
+ },
75
+ {
76
+ type: 'tip',
77
+ title: 'Dijital Güvenlik İpucu',
78
+ html: '<strong>Siber Hijyen:</strong> İki farklı hizmet için asla aynı şifreyi kullanmayın. Dijital kimliğinizi güvende tutmak için aracımızla benzersiz bir anahtar oluşturun ve güvenilir bir şifre yöneticisine kaydedin.',
79
+ },
80
+ {
81
+ type: 'title',
82
+ text: 'Güvenlik Değerlendirmesi: İfşa Olmuş Şifre Denetimi',
83
+ level: 2,
84
+ },
85
+ {
86
+ type: 'paragraph',
87
+ html: 'Bugün güçlü bir şifreye sahip olmak, yarın güvenli olacağı anlamına gelmez. Başka bir hizmette bir veritabanı hacklenirse ve aynı anahtarı paylaşıyorsanız, risk altındasınız demektir. Veritabanlarına karşı şifre denetçisi (HIBP - Have I Been Pwned) gibi araçlar, kimlik bilgilerinizin darknet\'te dolaşıp dolaşmadığını doğrulamanıza olanak tanır. Yardımcı programlarımız, anahtarınızın daha önce ifşa olup olmadığını tam olarak bilmeniz için güvenlik API\'leri ile entegrasyon içerir.',
88
+ },
89
+ {
90
+ type: 'title',
91
+ text: 'Dijital Ergonomi: Sürtünmeyi Azaltın, Verimliliği Artırın',
92
+ level: 2,
93
+ },
94
+ {
95
+ type: 'paragraph',
96
+ html: 'Dijital sürtünme görünmezdir ancak maliyetlidir. Biriyle iletişime geçmek istediğinizde her seferinde WhatsApp için doğru formatta bir telefon numarası yazmak sürtünmedir. Bir indirimi manuel olarak hesaplamak sürtünmedir. Araçlarımız bu tekrarlayan mikro adımları ortadan kaldırır. Rota optimize edici, teslimat yapıyorsanız haftada size 2 saat kazandırır. RSVP okuyucu, haftalık 3 saatlik okuma süresi kazandırır. 52 haftayla çarpıldığında, bu hayatınızdan geri kazanılan koca aylardır.',
97
+ },
98
+ {
99
+ type: 'title',
100
+ text: '2026 Araçlarında Yapay Zeka ve Tahmin Analizi',
101
+ level: 2,
102
+ },
103
+ {
104
+ type: 'paragraph',
105
+ html: 'Modern araçlar durağan değildir; sizden öğrenirler. Şifre oluşturucu, her platformun özel düzenlemelerine göre güvenli desenler önerebilir. Rota optimize edici, geçmiş teslimat desenlerinizi öğrenebilir ve tıkanıklık noktalarını tahmin edebilir. RSVP okuyucu, hızını gerçek zamanlı olarak anlama düzeyinize göre ayarlayabilir. Bu zeka katmanları, basit yardımcı programları sizinle birlikte gelişen kişiselleştirilmiş asistanlara dönüştürür.',
106
+ },
107
+ {
108
+ type: 'title',
109
+ text: 'Görev Yönetimi ve Planlama: Pomodoro ve İzokronlar',
110
+ level: 2,
111
+ },
112
+ {
113
+ type: 'paragraph',
114
+ html: 'Verimlilik sadece hız değildir; akıllı zaman yönetimidir. <strong>Etkileşimli Pomodoro tekniğimiz</strong>, iş gününüzü 25 dakikalık odaklanmış bloklara böler ve optimum bilişsel iyileşme için hesaplanmış molalar verir. <strong>İzokronik hesaplayıcı</strong>, geçmişe dayanarak görevlerinizin ne kadar süreceğini göstererek gününüzü iyimserlik yerine gerçekçilikle planlamanıza olanak tanır.',
115
+ },
116
+ {
117
+ type: 'title',
118
+ text: 'Veri Doğrulama ve Bilgi Denetimi',
119
+ level: 2,
120
+ },
121
+ {
122
+ type: 'paragraph',
123
+ html: '500 e-posta adresinden oluşan bir liste — kaç tanesi gerçek? <strong>Toplu veri doğrulayıcımız</strong> formatı, alanı ve sunucunun o adres için e-posta kabul edip etmediğini doğrular. Telefon numaraları için uluslararası formatı ve coğrafi numarayı doğrular. İş uygulamalarında veri doğrulama felaketleri önler: var olmayan adreslere e-posta göndermek israftır; sahte numaraları aramak hayal kırıklığıdır.',
124
+ },
125
+ {
126
+ type: 'title',
127
+ text: 'Birim Dönüştürme: Kütle, Hacim, Sıcaklık, Enerji',
128
+ level: 2,
129
+ },
130
+ {
131
+ type: 'paragraph',
132
+ html: 'Dönüştürmeler, baskı altında 100 Fahrenheit\'ı Celsius\'a çevirmeniz gerekene kadar basit görünür. <strong>Evrensel birim dönüştürücümüz</strong> 500\'den fazla büyüklüğün dönüşümünü gerçekleştirir: uzunluk (metreden ayağa, mile), kütle (kg\'dan pound\'a, onsa), hacim (litreden galona), sıcaklık (tam formül düzeltmesiyle), enerji (joule\'den kaloriye), güç (watt\'tan beygir gücüne). Genel bir dönüştürücü ile teknik bir dönüştürücü arasındaki fark hassasiyettir.',
133
+ },
134
+ {
135
+ type: 'title',
136
+ text: 'Gelişmiş Yüzde Hesaplama ve Bileşik Değişimler',
137
+ level: 2,
138
+ },
139
+ {
140
+ type: 'paragraph',
141
+ html: '100\'ün %10\'u 10\'dur. Basit. Ancak 100\'ü %10 artırırsanız (sonuç 110) ve sonra bir %10 daha artırırsanız sonuç 121 mi yoksa 120 mi olur? 121\'dir (bileşik değişim). <strong>Gelişmiş yüzde hesaplayıcımız</strong> iç içe geçmiş değişimleri, çoklu indirimleri ve "marj" (margin) ile "mark-up" hesaplamalarını gerçekleştirir. 100 €\'ya alan ve %50 kâr marjı ekleyen bir perakendeci 150 €\'ya satar; eğer daha sonra %20 indirim uygularsa 120 €\'ya satar (130 € değil). 10 €\'luk fark, birçok işletmenin yanlış hesaplama nedeniyle kaybettiği tutardır.',
142
+ },
143
+ {
144
+ type: 'title',
145
+ text: 'Sayı Analizi: Faktörizasyon, Asallık, Bölenler',
146
+ level: 2,
147
+ },
148
+ {
149
+ type: 'paragraph',
150
+ html: 'Bir matematikçinin 991\'in asal olup olmadığını bilmesi gerekebilir. Bir kriptografın 91\'i çarpanlarına ayırması gerekir (7 × 13\'tür). <strong>Sayı analizörümüz</strong> bir sayının asal olup olmadığını belirler, bölenlerini listeler, asallara ayırır ve Euler fonksiyonunu (RSA kriptografisinde kritik) hesaplar. Matematik eğitimi veya araştırma için bu araçlar derin sayısal bilgiler sağlar.',
151
+ },
152
+ {
153
+ type: 'title',
154
+ text: 'En yüksek sofistikasyon olarak basitlik 2026',
155
+ level: 2,
156
+ },
157
+ {
158
+ type: 'paragraph',
159
+ html: '2026\'da "basit" olan tekrar premium oldu. Her şeyi yapmaya çalışan ve hiçbir şeyi doğru düzgün yapamayan uygulamalardan bıktık. Bu araçlar öze dönüştür: sadece bir işi yapan ama o işi mutlak hassasiyetle yapan ve kullanıcıya saygı duyan yardımcı programlar. İyi tasarlanmış bir araçla tasarruf ettiğiniz her dakika, hayatınızdan geri kazandığınız bir dakikadır.',
160
+ },
161
+ {
162
+ type: 'stats',
163
+ columns: 2,
164
+ items: [
165
+ { value: 'Kriptografik', label: 'Güvenlik', icon: 'mdi:shield-check' },
166
+ { value: 'RSVP', label: 'Hız', icon: 'mdi:speedometer' },
167
+ { value: 'Optimal', label: 'Lojistik', icon: 'mdi:map-marker-path' },
168
+ { value: 'Local-First', label: 'Gizlilik', icon: 'mdi:lock-check' },
169
+ ],
170
+ },
171
+ ],
172
+ };
@@ -0,0 +1,172 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'tools',
5
+ title: '实用且多功能的在线工具',
6
+ description: '使用免费的在线工具解决日常问题。路线优化、密码生成器、RSVP 快速阅读和快速计算工具。',
7
+ seo: [
8
+ {
9
+ type: 'title',
10
+ text: '实用工具:日常生活中的数字解决方案',
11
+ level: 2,
12
+ },
13
+ {
14
+ type: 'paragraph',
15
+ html: '在充斥着复杂应用的数字世界中,有时我们最需要的是 <strong>简单、快速且有效</strong> 的工具。在本节中,我们收集了一个“工具带”,其中包含 <strong>免费在线工具</strong>,可解决即时实际问题:从账户安全到物理旅程的优化。',
16
+ },
17
+ {
18
+ type: 'paragraph',
19
+ html: '我们的应用基于最大实用性和最小摩擦的原则设计。无需注册,无需等待,并采用本地处理,确保您的个人数据始终受到保护。',
20
+ },
21
+ {
22
+ type: 'title',
23
+ text: '安全与保护:生成强密码',
24
+ level: 2,
25
+ },
26
+ {
27
+ type: 'paragraph',
28
+ html: '互联网的第一道防线是强密码。我们的 <strong>密码生成器</strong> 使用加密随机算法,创建无法通过暴力破解预测或黑客攻击的密钥。自定义长度和字符类型,以符合 2026 年的安全标准。',
29
+ },
30
+ {
31
+ type: 'title',
32
+ text: '物流与快速数学:路线与比例',
33
+ level: 2,
34
+ },
35
+ {
36
+ type: 'paragraph',
37
+ html: '通过优化可以节省时间和燃料。<strong>路线优化器</strong> 允许组织多个停靠点,以计算最有效的行程,非常适合快递员、销售代表或旅行者。另一方面,我们的 <strong>三数法(比例计算)</strong> 计算器是解决缩放、百分比和比例的终极数学救星。',
38
+ },
39
+ {
40
+ type: 'title',
41
+ text: '认知生产力:RSVP 快速阅读',
42
+ level: 2,
43
+ },
44
+ {
45
+ type: 'paragraph',
46
+ html: '信息过载需要新的消费方式。基于 <strong>RSVP(快速序列视觉呈现)</strong> 技术,我们的快速阅读器允许您以超过每分钟 1000 词的速度处理文本,消除默读并让您专注于内容的语义流。',
47
+ },
48
+ {
49
+ type: 'title',
50
+ text: '沟通与链接:WhatsApp 和 SEO',
51
+ level: 2,
52
+ },
53
+ {
54
+ type: 'paragraph',
55
+ html: '促进联系对业务和自由职业者至关重要。<strong>WhatsApp 链接生成器</strong> 允许创建带有预配置消息的直接 wa.me 链接。对于内容创作者,<strong>SEO 优化器</strong> 分析关键词密度和字符限制,确保您的发布在搜索引擎和社交网络中脱颖而出。',
56
+ },
57
+ {
58
+ type: 'title',
59
+ text: '战术工具:摩斯电码与紧急情况',
60
+ level: 2,
61
+ },
62
+ {
63
+ type: 'paragraph',
64
+ html: '手机也是物理安全工具。<strong>摩斯电码信标</strong> 将您的终端变成紧急发射器,利用相机闪光灯、振动和屏幕亮度,根据国际摩斯电码发送 SOS 信号或自定义消息。',
65
+ },
66
+ {
67
+ type: 'list',
68
+ items: [
69
+ '<strong>多功能性:</strong> 从数学计算到网络安全和个人物流。',
70
+ '<strong>响应速度:</strong> 针对任何移动设备即时加载进行优化的工具。',
71
+ '<strong>零追踪:</strong> 我们不保存您的密码或路线;隐私是我们的技术核心。',
72
+ '<strong>2026 更新:</strong> 符合最新的安全法规和现代 Web 标准。',
73
+ ],
74
+ },
75
+ {
76
+ type: 'tip',
77
+ title: '数字安全提示',
78
+ html: '<strong>网络卫生:</strong> 绝不要在两个不同的服务中使用相同的密码。使用我们的工具生成唯一密钥并将其保存在信任的密码管理器中,以确保您的数字身份安全。',
79
+ },
80
+ {
81
+ type: 'title',
82
+ text: '安全评估:被泄露密码审计',
83
+ level: 2,
84
+ },
85
+ {
86
+ type: 'paragraph',
87
+ html: '今天拥有强密码并不意味着明天它依然安全。如果另一个服务的数据库被黑客攻击,而您使用相同的密钥,您就处于风险之中。诸如被泄露密码审计工具(HIBP - Have I Been Pwned)允许您验证您的凭据是否在暗网中流传。我们的工具集成了安全 API,以便您准确了解您的密钥是否曾被泄露。',
88
+ },
89
+ {
90
+ type: 'title',
91
+ text: '数字人体工程学:减少摩擦,提高效率',
92
+ level: 2,
93
+ },
94
+ {
95
+ type: 'paragraph',
96
+ html: '数字摩擦是无形的,但代价高昂。每次想联系某人时都在 WhatsApp 中以正确的格式编写电话号码就是一种摩擦。手动计算折扣也是一种摩擦。我们的工具消除了这些重复的微步骤。如果您从事快递工作,路线优化器每周可为您节省 2 小时。RSVP 阅读器每周可为您节省 3 小时的阅读时间。乘以 52 周,这就是整月挽回的生命。',
97
+ },
98
+ {
99
+ type: 'title',
100
+ text: '2026 年工具中的人工智能与预测分析',
101
+ level: 2,
102
+ },
103
+ {
104
+ type: 'paragraph',
105
+ html: '现代工具不是静态的;它们向您学习。密码生成器可以根据每个平台的特定规定为您建议安全模式。路线优化器可以学习您的历史配送模式并预测拥堵点。RSVP 阅读器可以根据您的理解实时调节速度。这些智能层将简单的工具转化为与您共同进化的个性化助手。',
106
+ },
107
+ {
108
+ type: 'title',
109
+ text: '任务管理与规划:番茄钟与等时计算',
110
+ level: 2,
111
+ },
112
+ {
113
+ type: 'paragraph',
114
+ html: '效率不只是速度;而是智能的时间管理。我们的 <strong>交互式番茄钟技术</strong> 将您的工作日划分为 25 分钟的专注块,并配有计算好的休息时间以实现最佳认知恢复。<strong>等时计算器</strong> 根据历史记录显示您的任务需要多长时间,让您根据现实而非乐观主义来规划一天。',
115
+ },
116
+ {
117
+ type: 'title',
118
+ text: '数据验证与信息审计',
119
+ level: 2,
120
+ },
121
+ {
122
+ type: 'paragraph',
123
+ html: '500 个电子邮件地址的列表 —— 有多少是真的?我们的 <strong>批量数据验证器</strong> 验证格式、域名以及服务器是否接受该地址的邮件。对于电话号码,它验证国际格式和地理编号。在业务应用中,数据验证可防止灾难:向不存在的地址发送邮件是浪费;拨打虚假号码则是挫折。',
124
+ },
125
+ {
126
+ type: 'title',
127
+ text: '单位换算:质量、体积、温度、能量',
128
+ level: 2,
129
+ },
130
+ {
131
+ type: 'paragraph',
132
+ html: '单位换算看似简单,直到您需要在压力下将 100 华氏度转换为摄氏度。我们的 <strong>通用单位换算器</strong> 处理超过 500 个物理量的换算:长度(米到英尺到英里)、质量(千克到磅到盎司)、体积(升到加仑)、温度(带精确公式修正)、能量(焦耳到卡路里)、功率(瓦到马力)。通用换算器与技术换算器的区别在于精度。',
133
+ },
134
+ {
135
+ type: 'title',
136
+ text: '高级百分比计算与复合变动',
137
+ level: 2,
138
+ },
139
+ {
140
+ type: 'paragraph',
141
+ html: '100 的 10% 是 10。很简单。但如果您将 100 增加 10%(结果为 110),然后再增加 10%,结果是 121 还是 120?答案是 121(复合变动)。我们的 <strong>高级百分比计算器</strong> 处理嵌套变动、多重折扣以及“利润”与“加价”的计算。以 100 欧元购买并增加 50% 加价的零售商售价为 150 欧元;如果随后应用 20% 的折扣,则售价为 120 欧元(而非 130 欧元)。这 10 欧元的差异是许多企业因计算错误而损失的金额。',
142
+ },
143
+ {
144
+ type: 'title',
145
+ text: '数字分析:因式分解、素性测试、约数',
146
+ level: 2,
147
+ },
148
+ {
149
+ type: 'paragraph',
150
+ html: '数学家可能需要知道 991 是否为质数。密码学家需要对 91 进行因式分解(即 7 × 13)。我们的 <strong>数字分析器</strong> 确定一个数是否为质数,列出其约数,进行质因数分解,并计算其欧拉函数(在 RSA 加密中至关重要)。对于数学教育或研究,这些工具提供了深层的数值信息。',
151
+ },
152
+ {
153
+ type: 'title',
154
+ text: '2026 年,简约即是最高级的精致',
155
+ level: 2,
156
+ },
157
+ {
158
+ type: 'paragraph',
159
+ html: '在 2026 年,“简约”再次成为溢价的代名词。我们厌倦了那些试图做所有事情却什么都做不好的应用。这些工具是回归本质:只做一件事,但以绝对的精度完成并尊重用户。通过设计良好的工具节省的每一分钟,都是您从生活中找回的一分钟。',
160
+ },
161
+ {
162
+ type: 'stats',
163
+ columns: 2,
164
+ items: [
165
+ { value: '加密级', label: '安全', icon: 'mdi:shield-check' },
166
+ { value: 'RSVP', label: '速度', icon: 'mdi:speedometer' },
167
+ { value: '最优', label: '物流', icon: 'mdi:map-marker-path' },
168
+ { value: '本地优先', label: '隐私', icon: 'mdi:lock-check' },
169
+ ],
170
+ },
171
+ ],
172
+ };
@@ -16,8 +16,20 @@ export const toolsCategory: ToolsCategoryEntry = {
16
16
  icon: 'mdi:toolbox',
17
17
  tools: [routes, ruleOfThree, passwordGenerator, morseBeacon, speedReader, whatsappLink, textPixelCalculator, dateDiffCalculator, emailListCleaner, envBadgeSpain, driveDirectLink, seoContentOptimizer],
18
18
  i18n: {
19
- es: () => import('./i18n/es').then((m) => m.content),
19
+ de: () => import('./i18n/de').then((m) => m.content),
20
20
  en: () => import('./i18n/en').then((m) => m.content),
21
+ es: () => import('./i18n/es').then((m) => m.content),
21
22
  fr: () => import('./i18n/fr').then((m) => m.content),
23
+ id: () => import('./i18n/id').then((m) => m.content),
24
+ it: () => import('./i18n/it').then((m) => m.content),
25
+ ja: () => import('./i18n/ja').then((m) => m.content),
26
+ ko: () => import('./i18n/ko').then((m) => m.content),
27
+ nl: () => import('./i18n/nl').then((m) => m.content),
28
+ pl: () => import('./i18n/pl').then((m) => m.content),
29
+ pt: () => import('./i18n/pt').then((m) => m.content),
30
+ ru: () => import('./i18n/ru').then((m) => m.content),
31
+ sv: () => import('./i18n/sv').then((m) => m.content),
32
+ tr: () => import('./i18n/tr').then((m) => m.content),
33
+ zh: () => import('./i18n/zh').then((m) => m.content),
22
34
  },
23
35
  };
@@ -0,0 +1,36 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { ALL_TOOLS } from '../tools';
3
+
4
+ const EXPECTED_LOCALES = [
5
+ 'de', 'en', 'es', 'fr', 'id', 'it', 'ja', 'ko', 'nl', 'pl', 'pt', 'ru', 'sv', 'tr', 'zh'
6
+ ];
7
+
8
+ describe('I18n Coverage Validation', () => {
9
+ it('all tools should be registered', () => {
10
+ expect(ALL_TOOLS.length).toBeGreaterThan(0);
11
+ });
12
+
13
+ ALL_TOOLS.forEach(({ entry }: { entry: any }) => {
14
+ describe(`Tool: ${entry.id}`, () => {
15
+ it('should have all 15 required locales', () => {
16
+ const registeredLocales = Object.keys(entry.i18n);
17
+ EXPECTED_LOCALES.forEach((locale) => {
18
+ expect(
19
+ registeredLocales,
20
+ `Tool "${entry.id}" is missing locale "${locale}"`,
21
+ ).toContain(locale);
22
+ });
23
+ });
24
+
25
+ it('all locale loaders should be functions', () => {
26
+ EXPECTED_LOCALES.forEach((locale) => {
27
+ const loader = entry.i18n[locale as keyof typeof entry.i18n];
28
+ expect(
29
+ typeof loader,
30
+ `Tool "${entry.id}" locale "${locale}" loader is not a function`,
31
+ ).toBe('function');
32
+ });
33
+ });
34
+ });
35
+ });
36
+ });
@@ -35,7 +35,7 @@ describe('Locale Completeness Validation', () => {
35
35
  });
36
36
  });
37
37
 
38
- it('should have 12 tools registered', () => {
38
+ it('all 12 tools registered', () => {
39
39
  expect(ALL_TOOLS.length).toBe(12);
40
40
  });
41
41
  });
@@ -0,0 +1,23 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { ALL_TOOLS } from '../tools';
3
+ import type { ToolLocaleContent } from '../types';
4
+
5
+ describe('Slug Language Code Format Validation', () => {
6
+ ALL_TOOLS.forEach((tool) => {
7
+ describe(`Tool: ${tool.entry.id}`, () => {
8
+ it('slug should not end with 2-letter language codes like -ja, -ru, -ko', async () => {
9
+ const locales = Object.keys(tool.entry.i18n);
10
+
11
+ for (const locale of locales) {
12
+ const loader = tool.entry.i18n[locale as keyof typeof tool.entry.i18n];
13
+ const content = (await loader?.()) as ToolLocaleContent;
14
+
15
+ expect(
16
+ content.slug,
17
+ `Tool "${tool.entry.id}" locale "${locale}" slug ("${content.slug}") cannot end with a 2-letter language code (e.g., -ja, -ru, -ko).`,
18
+ ).not.toMatch(/-[a-z]{2}$/);
19
+ }
20
+ });
21
+ });
22
+ });
23
+ });