@jjlmoya/utils-tools 1.1.0 → 1.3.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 (185) 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_uniqueness.test.ts +81 -0
  18. package/src/tests/title_quality.test.ts +0 -1
  19. package/src/tool/date-diff-calculator/i18n/de.ts +132 -0
  20. package/src/tool/date-diff-calculator/i18n/fr.ts +1 -1
  21. package/src/tool/date-diff-calculator/i18n/id.ts +132 -0
  22. package/src/tool/date-diff-calculator/i18n/it.ts +132 -0
  23. package/src/tool/date-diff-calculator/i18n/ja.ts +132 -0
  24. package/src/tool/date-diff-calculator/i18n/ko.ts +132 -0
  25. package/src/tool/date-diff-calculator/i18n/nl.ts +132 -0
  26. package/src/tool/date-diff-calculator/i18n/pl.ts +132 -0
  27. package/src/tool/date-diff-calculator/i18n/pt.ts +132 -0
  28. package/src/tool/date-diff-calculator/i18n/ru.ts +132 -0
  29. package/src/tool/date-diff-calculator/i18n/sv.ts +132 -0
  30. package/src/tool/date-diff-calculator/i18n/tr.ts +132 -0
  31. package/src/tool/date-diff-calculator/i18n/zh.ts +132 -0
  32. package/src/tool/date-diff-calculator/index.ts +12 -0
  33. package/src/tool/drive-direct-link/i18n/de.ts +118 -0
  34. package/src/tool/drive-direct-link/i18n/id.ts +118 -0
  35. package/src/tool/drive-direct-link/i18n/it.ts +118 -0
  36. package/src/tool/drive-direct-link/i18n/ja.ts +118 -0
  37. package/src/tool/drive-direct-link/i18n/ko.ts +118 -0
  38. package/src/tool/drive-direct-link/i18n/nl.ts +118 -0
  39. package/src/tool/drive-direct-link/i18n/pl.ts +118 -0
  40. package/src/tool/drive-direct-link/i18n/pt.ts +118 -0
  41. package/src/tool/drive-direct-link/i18n/ru.ts +118 -0
  42. package/src/tool/drive-direct-link/i18n/sv.ts +118 -0
  43. package/src/tool/drive-direct-link/i18n/tr.ts +118 -0
  44. package/src/tool/drive-direct-link/i18n/zh.ts +118 -0
  45. package/src/tool/drive-direct-link/index.ts +12 -0
  46. package/src/tool/email-list-cleaner/i18n/de.ts +140 -0
  47. package/src/tool/email-list-cleaner/i18n/es.ts +1 -1
  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/es.ts +1 -1
  78. package/src/tool/morse-beacon/i18n/id.ts +157 -0
  79. package/src/tool/morse-beacon/i18n/it.ts +157 -0
  80. package/src/tool/morse-beacon/i18n/ja.ts +157 -0
  81. package/src/tool/morse-beacon/i18n/ko.ts +157 -0
  82. package/src/tool/morse-beacon/i18n/nl.ts +157 -0
  83. package/src/tool/morse-beacon/i18n/pl.ts +157 -0
  84. package/src/tool/morse-beacon/i18n/pt.ts +157 -0
  85. package/src/tool/morse-beacon/i18n/ru.ts +157 -0
  86. package/src/tool/morse-beacon/i18n/sv.ts +157 -0
  87. package/src/tool/morse-beacon/i18n/tr.ts +157 -0
  88. package/src/tool/morse-beacon/i18n/zh.ts +157 -0
  89. package/src/tool/morse-beacon/index.ts +13 -1
  90. package/src/tool/password-generator/i18n/de.ts +166 -0
  91. package/src/tool/password-generator/i18n/fr.ts +1 -1
  92. package/src/tool/password-generator/i18n/id.ts +166 -0
  93. package/src/tool/password-generator/i18n/it.ts +166 -0
  94. package/src/tool/password-generator/i18n/ja.ts +166 -0
  95. package/src/tool/password-generator/i18n/ko.ts +166 -0
  96. package/src/tool/password-generator/i18n/nl.ts +166 -0
  97. package/src/tool/password-generator/i18n/pl.ts +166 -0
  98. package/src/tool/password-generator/i18n/pt.ts +166 -0
  99. package/src/tool/password-generator/i18n/ru.ts +166 -0
  100. package/src/tool/password-generator/i18n/sv.ts +166 -0
  101. package/src/tool/password-generator/i18n/tr.ts +166 -0
  102. package/src/tool/password-generator/i18n/zh.ts +166 -0
  103. package/src/tool/password-generator/index.ts +13 -1
  104. package/src/tool/routes/i18n/de.ts +157 -0
  105. package/src/tool/routes/i18n/es.ts +1 -1
  106. package/src/tool/routes/i18n/id.ts +157 -0
  107. package/src/tool/routes/i18n/it.ts +157 -0
  108. package/src/tool/routes/i18n/ja.ts +157 -0
  109. package/src/tool/routes/i18n/ko.ts +157 -0
  110. package/src/tool/routes/i18n/nl.ts +157 -0
  111. package/src/tool/routes/i18n/pl.ts +157 -0
  112. package/src/tool/routes/i18n/pt.ts +157 -0
  113. package/src/tool/routes/i18n/ru.ts +157 -0
  114. package/src/tool/routes/i18n/sv.ts +157 -0
  115. package/src/tool/routes/i18n/tr.ts +157 -0
  116. package/src/tool/routes/i18n/zh.ts +157 -0
  117. package/src/tool/routes/index.ts +13 -1
  118. package/src/tool/rule-of-three/i18n/de.ts +171 -0
  119. package/src/tool/rule-of-three/i18n/en.ts +1 -1
  120. package/src/tool/rule-of-three/i18n/id.ts +171 -0
  121. package/src/tool/rule-of-three/i18n/it.ts +171 -0
  122. package/src/tool/rule-of-three/i18n/ja.ts +171 -0
  123. package/src/tool/rule-of-three/i18n/ko.ts +171 -0
  124. package/src/tool/rule-of-three/i18n/nl.ts +171 -0
  125. package/src/tool/rule-of-three/i18n/pl.ts +171 -0
  126. package/src/tool/rule-of-three/i18n/pt.ts +171 -0
  127. package/src/tool/rule-of-three/i18n/ru.ts +171 -0
  128. package/src/tool/rule-of-three/i18n/sv.ts +171 -0
  129. package/src/tool/rule-of-three/i18n/tr.ts +171 -0
  130. package/src/tool/rule-of-three/i18n/zh.ts +171 -0
  131. package/src/tool/rule-of-three/index.ts +13 -1
  132. package/src/tool/seo-content-optimizer/i18n/de.ts +136 -0
  133. package/src/tool/seo-content-optimizer/i18n/id.ts +136 -0
  134. package/src/tool/seo-content-optimizer/i18n/it.ts +136 -0
  135. package/src/tool/seo-content-optimizer/i18n/ja.ts +136 -0
  136. package/src/tool/seo-content-optimizer/i18n/ko.ts +136 -0
  137. package/src/tool/seo-content-optimizer/i18n/nl.ts +136 -0
  138. package/src/tool/seo-content-optimizer/i18n/pl.ts +136 -0
  139. package/src/tool/seo-content-optimizer/i18n/pt.ts +136 -0
  140. package/src/tool/seo-content-optimizer/i18n/ru.ts +136 -0
  141. package/src/tool/seo-content-optimizer/i18n/sv.ts +136 -0
  142. package/src/tool/seo-content-optimizer/i18n/tr.ts +136 -0
  143. package/src/tool/seo-content-optimizer/i18n/zh.ts +136 -0
  144. package/src/tool/seo-content-optimizer/index.ts +12 -0
  145. package/src/tool/speed-reader/i18n/de.ts +152 -0
  146. package/src/tool/speed-reader/i18n/es.ts +1 -1
  147. package/src/tool/speed-reader/i18n/id.ts +152 -0
  148. package/src/tool/speed-reader/i18n/it.ts +152 -0
  149. package/src/tool/speed-reader/i18n/ja.ts +152 -0
  150. package/src/tool/speed-reader/i18n/ko.ts +152 -0
  151. package/src/tool/speed-reader/i18n/nl.ts +152 -0
  152. package/src/tool/speed-reader/i18n/pl.ts +152 -0
  153. package/src/tool/speed-reader/i18n/pt.ts +152 -0
  154. package/src/tool/speed-reader/i18n/ru.ts +152 -0
  155. package/src/tool/speed-reader/i18n/sv.ts +152 -0
  156. package/src/tool/speed-reader/i18n/tr.ts +152 -0
  157. package/src/tool/speed-reader/i18n/zh.ts +152 -0
  158. package/src/tool/speed-reader/index.ts +12 -0
  159. package/src/tool/text-pixel-calculator/i18n/de.ts +133 -0
  160. package/src/tool/text-pixel-calculator/i18n/id.ts +133 -0
  161. package/src/tool/text-pixel-calculator/i18n/it.ts +133 -0
  162. package/src/tool/text-pixel-calculator/i18n/ja.ts +133 -0
  163. package/src/tool/text-pixel-calculator/i18n/ko.ts +133 -0
  164. package/src/tool/text-pixel-calculator/i18n/nl.ts +133 -0
  165. package/src/tool/text-pixel-calculator/i18n/pl.ts +133 -0
  166. package/src/tool/text-pixel-calculator/i18n/pt.ts +133 -0
  167. package/src/tool/text-pixel-calculator/i18n/ru.ts +133 -0
  168. package/src/tool/text-pixel-calculator/i18n/sv.ts +133 -0
  169. package/src/tool/text-pixel-calculator/i18n/tr.ts +133 -0
  170. package/src/tool/text-pixel-calculator/i18n/zh.ts +133 -0
  171. package/src/tool/text-pixel-calculator/index.ts +12 -0
  172. package/src/tool/whatsapp-link/i18n/de.ts +128 -0
  173. package/src/tool/whatsapp-link/i18n/es.ts +1 -1
  174. package/src/tool/whatsapp-link/i18n/id.ts +128 -0
  175. package/src/tool/whatsapp-link/i18n/it.ts +128 -0
  176. package/src/tool/whatsapp-link/i18n/ja.ts +128 -0
  177. package/src/tool/whatsapp-link/i18n/ko.ts +128 -0
  178. package/src/tool/whatsapp-link/i18n/nl.ts +128 -0
  179. package/src/tool/whatsapp-link/i18n/pl.ts +128 -0
  180. package/src/tool/whatsapp-link/i18n/pt.ts +128 -0
  181. package/src/tool/whatsapp-link/i18n/ru.ts +128 -0
  182. package/src/tool/whatsapp-link/i18n/sv.ts +128 -0
  183. package/src/tool/whatsapp-link/i18n/tr.ts +128 -0
  184. package/src/tool/whatsapp-link/i18n/zh.ts +128 -0
  185. package/src/tool/whatsapp-link/index.ts +12 -0
@@ -0,0 +1,81 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { ALL_TOOLS } from '../tools';
3
+ import type { ToolLocaleContent } from '../types';
4
+
5
+ const sharingLocales = ['ja', 'ko', 'zh'];
6
+
7
+ interface ValidateParams {
8
+ toolId: string;
9
+ locale: string;
10
+ content: ToolLocaleContent;
11
+ enSlug: string;
12
+ slugs: Map<string, string>;
13
+ }
14
+
15
+ const validateLocaleSlug = ({
16
+ toolId,
17
+ locale,
18
+ content,
19
+ enSlug,
20
+ slugs,
21
+ }: ValidateParams) => {
22
+ expect(
23
+ content.slug,
24
+ `Tool "${toolId}" locale "${locale}" has an invalid slug ("${content.slug}"). Slugs must be transliterated (only a-z, 0-9, and -).`,
25
+ ).toMatch(/^[a-z0-9-]+$/);
26
+
27
+ if (locale === 'en') {
28
+ return;
29
+ }
30
+
31
+ if (sharingLocales.includes(locale)) {
32
+ expect(
33
+ content.slug,
34
+ `Tool "${toolId}" locale "${locale}" must use the same slug as "en" ("${enSlug}").`,
35
+ ).toBe(enSlug);
36
+ } else {
37
+ expect(
38
+ content.slug,
39
+ `Tool "${toolId}" locale "${locale}" has the same slug as "en" ("${enSlug}"). Cada slug tiene que estar en su propia idioma`,
40
+ ).not.toBe(enSlug);
41
+
42
+ if (slugs.has(content.slug)) {
43
+ const previousLocale = slugs.get(content.slug);
44
+ expect(
45
+ false,
46
+ `Tool "${toolId}" locales "${locale}" and "${previousLocale}" share the same slug ("${content.slug}"). Cada slug tiene que estar en su propia idioma`,
47
+ ).toBe(true);
48
+ }
49
+ slugs.set(content.slug, locale);
50
+ }
51
+ };
52
+
53
+ describe('Slug Localization and Uniqueness Validation', () => {
54
+ ALL_TOOLS.forEach((tool) => {
55
+ describe(`Tool: ${tool.entry.id}`, () => {
56
+ it('every locale should have a unique, translated slug', async () => {
57
+ const slugs = new Map<string, string>();
58
+ const locales = Object.keys(tool.entry.i18n);
59
+
60
+ let enSlug = '';
61
+ if (locales.includes('en')) {
62
+ const enLoader = tool.entry.i18n['en' as keyof typeof tool.entry.i18n];
63
+ const enContent = (await enLoader?.()) as ToolLocaleContent;
64
+ enSlug = enContent.slug;
65
+ }
66
+
67
+ for (const locale of locales) {
68
+ const loader = tool.entry.i18n[locale as keyof typeof tool.entry.i18n];
69
+ const content = (await loader?.()) as ToolLocaleContent;
70
+ validateLocaleSlug({
71
+ toolId: tool.entry.id,
72
+ locale,
73
+ content,
74
+ enSlug,
75
+ slugs,
76
+ });
77
+ }
78
+ });
79
+ });
80
+ });
81
+ });
@@ -41,7 +41,6 @@ describe('Project Titles - Separator Validation', () => {
41
41
  let match;
42
42
  while ((match = pattern.exec(content)) !== null) {
43
43
  const title = match[1];
44
- if (!title) continue;
45
44
  if (title.includes('|') || title.includes('-')) {
46
45
  findings.push(title);
47
46
  }
@@ -0,0 +1,132 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { DateDiffCalculatorUI } from '../ui';
4
+
5
+ const faqData = [
6
+ {
7
+ question: 'Ist dieser Datumsdifferenzrechner kostenlos?',
8
+ answer: 'Ja, es ist ein 100 % kostenloses Tool, das von jedem Browser aus ohne Registrierung oder Downloads zugänglich ist.',
9
+ },
10
+ {
11
+ question: 'Wie werden Schaltjahre in der Gesamtzeit berücksichtigt?',
12
+ answer: 'Das Tool verwendet die Standard-JavaScript-Chronologie (UTC), die Schaltjahre und die variable Anzahl von Tagen in jedem Monat automatisch berücksichtigt, um ein exaktes Ergebnis zu liefern.',
13
+ },
14
+ {
15
+ question: 'Kann ich auch die Differenz zwischen Stunden und Minuten berechnen?',
16
+ answer: 'Ja. In den Eingabefeldern können Sie die genaue Zeit auswählen. Das Ergebnis liefert Ihnen eine Aufteilung in Tage, Stunden, Minuten und Sekunden sowie kumulierte Summen.',
17
+ },
18
+ {
19
+ question: 'Werden meine Datumseingaben an einen Server gesendet?',
20
+ answer: 'Nein. Die gesamte Verarbeitung erfolgt lokal in Ihrem Browser. Wir speichern oder empfangen keine Informationen über die von Ihnen berechneten Daten.',
21
+ },
22
+ ];
23
+
24
+ const howToData = [
25
+ { name: 'Startdatum auswählen', text: 'Geben Sie das Startdatum und die Uhrzeit ein oder klicken Sie auf „Heute“, um sie sofort festzulegen.' },
26
+ { name: 'Enddatum auswählen', text: 'Definieren Sie den Zielzeitpunkt. Verwenden Sie „Jetzt“, um die bis zu diesem exakten Moment verstrichene Zeit zu messen.' },
27
+ { name: 'Ergebnisse ablesen', text: 'Überprüfen Sie die Aufteilung in Tage, Stunden, Minuten und Sekunden sowie die kumulierten Summen für Wochen und Stunden.' },
28
+ ];
29
+
30
+ const faqSchema: WithContext<FAQPage> = {
31
+ '@context': 'https://schema.org',
32
+ '@type': 'FAQPage',
33
+ mainEntity: faqData.map((item) => ({
34
+ '@type': 'Question',
35
+ name: item.question,
36
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
37
+ })),
38
+ };
39
+
40
+ const howToSchema: WithContext<HowTo> = {
41
+ '@context': 'https://schema.org',
42
+ '@type': 'HowTo',
43
+ name: 'So berechnen Sie die Differenz zwischen zwei Datumsangaben',
44
+ step: howToData.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
45
+ };
46
+
47
+ const appSchema: WithContext<SoftwareApplication> = {
48
+ '@context': 'https://schema.org',
49
+ '@type': 'SoftwareApplication',
50
+ name: 'Datumsdifferenz-Rechner',
51
+ applicationCategory: 'UtilitiesApplication',
52
+ operatingSystem: 'Web',
53
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
54
+ description: 'Berechnen Sie genau, wie viel Zeit zwischen zwei Daten vergangen ist oder wie lange es noch bis zu einem Ereignis dauert. Ergebnisse in Tagen, Stunden und Minuten.',
55
+ };
56
+
57
+ const ui: DateDiffCalculatorUI = {
58
+ startLabel: 'Startdatum',
59
+ endLabel: 'Enddatum',
60
+ nowBtn: 'Jetzt',
61
+ todayBtn: 'Heute',
62
+ tomorrowBtn: 'Morgen',
63
+ daysLabel: 'Tage',
64
+ hoursLabel: 'Stunden',
65
+ minsLabel: 'Min',
66
+ secsLabel: 'Sek',
67
+ weeksLabel: 'Gesamtwochen',
68
+ totalHoursLabel: 'Gesamtstunden',
69
+ totalMinsLabel: 'Gesamtminuten',
70
+ elapsed: 'Verstrichene Zeit',
71
+ past: 'Zeit in der Vergangenheit',
72
+ invalidDates: 'Ungültige Daten',
73
+ };
74
+
75
+ export const content: ToolLocaleContent<DateDiffCalculatorUI> = {
76
+ slug: 'datumsdifferenz-rechner',
77
+ title: 'Datumsdifferenz Rechner',
78
+ description: 'Berechnen Sie genau, wie viel Zeit zwischen zwei Daten vergangen ist oder wie lange es noch bis zu einem Ereignis dauert. Kostenloses Tool mit Ergebnissen in Tagen, Stunden und Minuten.',
79
+ ui,
80
+ faqTitle: 'Häufig gestellte Fragen',
81
+ faq: faqData,
82
+ howTo: howToData,
83
+ bibliographyTitle: 'Referenzen',
84
+ bibliography: [
85
+ { name: 'Time and Date: Weltuhr und Zeitzonen-Konverter', url: 'https://www.timeanddate.com/worldclock/' },
86
+ { name: 'Wikipedia: Geschichte des gregorianischen Kalenders', url: 'https://de.wikipedia.org/wiki/Gregorianischer_Kalender' },
87
+ { name: 'Wikipedia: Eisenhower-Matrix und Zeitmanagement', url: 'https://de.wikipedia.org/wiki/Zeitmanagement#Die_ Eisenhower-Methode' },
88
+ ],
89
+ schemas: [faqSchema, howToSchema, appSchema],
90
+ seo: [
91
+ { type: 'title', level: 2, text: 'Datumsdifferenzrechner mit Tagen, Stunden und Minuten' },
92
+ {
93
+ type: 'paragraph',
94
+ html: 'Die Berechnung der <strong>Differenz zwischen zwei Daten</strong> ist eine der am häufigsten unterschätzten Aufgaben sowohl im Alltag als auch im beruflichen Umfeld. Egal, ob Sie eine Produkteinführung planen, das exakte Alter einer Person berechnen oder die verbleibende Zeit bis zu einem besonderen Ereignis messen – ein präzises Werkzeug ist für ein effizientes Zeitmanagement unerlässlich.',
95
+ },
96
+ { type: 'title', level: 3, text: 'Wofür wird der Datumsdifferenzrechner verwendet?' },
97
+ {
98
+ type: 'paragraph',
99
+ html: 'Die Nützlichkeit dieses Tools erstreckt sich auf viele Bereiche. Im Berufsleben nutzen es Projektmanager, um Abgabefristen festzulegen und den Fortschritt von Meilensteinen zu verfolgen. In rechtlichen und administrativen Kontexten ist es für die Berechnung von Verjährungsfristen oder Vertragslaufzeiten von Bedeutung.',
100
+ },
101
+ {
102
+ type: 'list',
103
+ items: [
104
+ '<strong>Veranstaltungsplanung:</strong> Wissen Sie, wie viele Wochen und Tage bis zu einer Hochzeit, Konferenz oder Reise verbleiben.',
105
+ '<strong>Projektmanagement:</strong> Berechnen Sie die verstrichene Zeit vom Beginn einer Phase bis zu ihrem Abschluss.',
106
+ '<strong>Finanzen:</strong> Bestimmen Sie die Anzahl der Tage für Zinsberechnungen oder Rechnungsfälligkeiten.',
107
+ '<strong>Personalwesen:</strong> Messen Sie die Betriebszugehörigkeit von Mitarbeitern oder angesammelte Urlaubstage.',
108
+ '<strong>Gesundheit:</strong> Verfolgen Sie den Fortschritt einer Behandlung oder die Erholungszeit nach einem Eingriff.',
109
+ ],
110
+ },
111
+ { type: 'title', level: 3, text: 'Zeitwahrnehmung und digitale Präzision' },
112
+ {
113
+ type: 'paragraph',
114
+ html: 'Oft neigen wir dazu, die Zeit zu runden. Wir sagen „etwa ein Monat“, wenn es tatsächlich noch 27 Tage und 14 Stunden sind. Durch die Verwendung eines digitalen Rechners eliminieren wir die Subjektivität und erhalten klare Daten für eine fundierte Entscheidungsfindung.',
115
+ },
116
+ { type: 'title', level: 3, text: 'Kalendertage versus Arbeitstage' },
117
+ {
118
+ type: 'paragraph',
119
+ html: 'Dieses Tool berechnet <strong>Kalendertage</strong>, einschließlich Wochenenden und Feiertagen. Für astronomische und allgemeine zivile Berechnungen wird die Zeit kontinuierlich gemessen. Wenn Sie Projektzeiten schätzen müssen, denken Sie daran, dass die angezeigten Tage den vollen realen Kalender darstellen.',
120
+ },
121
+ { type: 'title', level: 3, text: 'Die Auswirkung der Zeit auf die Produktivität' },
122
+ {
123
+ type: 'paragraph',
124
+ html: 'Das Parkinsonsche Gesetz besagt, dass Arbeit sich in genau dem Maße ausdehnt, wie Zeit für ihre Erledigung zur Verfügung steht. Durch die Visualisierung, wie viele Stunden und Minuten bis zu einer Frist verbleiben, neigen Teams dazu, ihre Bemühungen zu optimieren und konzentriert zu bleiben.',
125
+ },
126
+ {
127
+ type: 'tip',
128
+ title: 'Zukünftige und vergangene Daten',
129
+ html: 'Sie können den Rechner sowohl für zukünftige als auch für vergangene Daten verwenden. Wenn das Enddatum vor dem Startdatum liegt, erkennt das System automatisch, dass es sich um in der Vergangenheit verstrichene Zeit handelt, und bewahrt die Präzision der absoluten Differenzwerte.',
130
+ },
131
+ ],
132
+ };
@@ -73,7 +73,7 @@ const ui: DateDiffCalculatorUI = {
73
73
  };
74
74
 
75
75
  export const content: ToolLocaleContent<DateDiffCalculatorUI> = {
76
- slug: 'calculateur-difference-dates',
76
+ slug: 'calculatrice-difference-dates',
77
77
  title: 'Calculateur de Différence de Dates',
78
78
  description: 'Calculez exactement combien de temps s\'est écoulé entre deux dates ou combien il reste avant un événement. Outil gratuit avec résultats en jours, heures et minutes.',
79
79
  ui,
@@ -0,0 +1,132 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { DateDiffCalculatorUI } from '../ui';
4
+
5
+ const faqData = [
6
+ {
7
+ question: 'Apakah kalkulator selisih tanggal ini gratis?',
8
+ answer: 'Ya, ini adalah alat 100% gratis yang dapat diakses dari browser apa pun tanpa perlu registrasi atau unduhan.',
9
+ },
10
+ {
11
+ question: 'Bagaimana tahun kabisat ditangani dalam total waktu?',
12
+ answer: 'Alat ini menggunakan kronologi standar JavaScript (UTC), yang secara otomatis menangani tahun kabisat dan jumlah hari yang bervariasi di setiap bulan untuk memberikan hasil yang tepat.',
13
+ },
14
+ {
15
+ question: 'Dapatkah saya menghitung selisih jam dan menit juga?',
16
+ answer: 'Ya. Bidang input memungkinkan Anda memilih waktu yang tepat. Hasilnya memberi Anda rincian dalam hari, jam, menit, dan detik, serta total akumulasi.',
17
+ },
18
+ {
19
+ question: 'Apakah input tanggal saya dikirim ke server mana pun?',
20
+ answer: 'Tidak. Semua pemrosesan dilakukan secara lokal di browser Anda. Kami tidak menyimpan atau menerima informasi apa pun tentang tanggal yang Anda hitung.',
21
+ },
22
+ ];
23
+
24
+ const howToData = [
25
+ { name: 'Pilih tanggal mulai', text: "Masukkan tanggal dan waktu mulai, atau klik 'Hari Ini' untuk mengaturnya secara instan." },
26
+ { name: 'Pilih tanggal akhir', text: "Tentukan momen target. Gunakan 'Sekarang' untuk mengukur waktu yang telah berlalu hingga saat ini secara tepat." },
27
+ { name: 'Baca hasilnya', text: 'Periksa rincian hari, jam, menit, dan detik, ditambah total akumulasi untuk minggu dan jam.' },
28
+ ];
29
+
30
+ const faqSchema: WithContext<FAQPage> = {
31
+ '@context': 'https://schema.org',
32
+ '@type': 'FAQPage',
33
+ mainEntity: faqData.map((item) => ({
34
+ '@type': 'Question',
35
+ name: item.question,
36
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
37
+ })),
38
+ };
39
+
40
+ const howToSchema: WithContext<HowTo> = {
41
+ '@context': 'https://schema.org',
42
+ '@type': 'HowTo',
43
+ name: 'Cara menghitung selisih antara dua tanggal',
44
+ step: howToData.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
45
+ };
46
+
47
+ const appSchema: WithContext<SoftwareApplication> = {
48
+ '@context': 'https://schema.org',
49
+ '@type': 'SoftwareApplication',
50
+ name: 'Kalkulator Selisih Tanggal',
51
+ applicationCategory: 'UtilitiesApplication',
52
+ operatingSystem: 'Web',
53
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
54
+ description: 'Hitung secara tepat berapa lama waktu yang telah berlalu antara dua tanggal atau berapa lama hingga suatu acara terjadi. Hasil dalam hari, jam, dan menit.',
55
+ };
56
+
57
+ const ui: DateDiffCalculatorUI = {
58
+ startLabel: 'Tanggal Mulai',
59
+ endLabel: 'Tanggal Selesai',
60
+ nowBtn: 'Sekarang',
61
+ todayBtn: 'Hari Ini',
62
+ tomorrowBtn: 'Besok',
63
+ daysLabel: 'Hari',
64
+ hoursLabel: 'Jam',
65
+ minsLabel: 'Menit',
66
+ secsLabel: 'Detik',
67
+ weeksLabel: 'Total Minggu',
68
+ totalHoursLabel: 'Total Jam',
69
+ totalMinsLabel: 'Total Menit',
70
+ elapsed: 'Waktu yang Telah Berlalu',
71
+ past: 'Waktu di Masa Lalu',
72
+ invalidDates: 'Tanggal tidak valid',
73
+ };
74
+
75
+ export const content: ToolLocaleContent<DateDiffCalculatorUI> = {
76
+ slug: 'kalkulator-selisih-tanggal',
77
+ title: 'Kalkulator Selisih Tanggal',
78
+ description: 'Hitung secara tepat berapa lama waktu yang telah berlalu antara dua tanggal atau berapa lama hingga suatu acara terjadi. Alat gratis dengan hasil dalam hari, jam, dan menit.',
79
+ ui,
80
+ faqTitle: 'Pertanyaan yang Sering Diajukan',
81
+ faq: faqData,
82
+ howTo: howToData,
83
+ bibliographyTitle: 'Referensi',
84
+ bibliography: [
85
+ { name: 'Time and Date: World Clock and Time Zone Converter', url: 'https://www.timeanddate.com/worldclock/' },
86
+ { name: 'Wikipedia: Sejarah Kalender Gregorian', url: 'https://id.wikipedia.org/wiki/Kalender_Gregorius' },
87
+ { name: 'Wikipedia: Manajemen Waktu — Matriks Eisenhower', url: 'https://id.wikipedia.org/wiki/Manajemen_waktu' },
88
+ ],
89
+ schemas: [faqSchema, howToSchema, appSchema],
90
+ seo: [
91
+ { type: 'title', level: 2, text: 'Kalkulator selisih tanggal dengan hari, jam, dan menit' },
92
+ {
93
+ type: 'paragraph',
94
+ html: 'Menghitung <strong>selisih antara dua tanggal</strong> adalah salah satu tugas yang paling umum tetapi sering diremehkan, baik dalam kehidupan sehari-hari maupun lingkungan profesional. Baik Anda merencanakan peluncuran produk, menghitung usia tepat seseorang, atau mengukur waktu yang tersisa hingga acara spesial, memiliki alat yang presisi sangat penting untuk manajemen waktu yang efisien.',
95
+ },
96
+ { type: 'title', level: 3, text: 'Untuk apa kalkulator selisih tanggal digunakan?' },
97
+ {
98
+ type: 'paragraph',
99
+ html: 'Kegunaan alat ini mencakup berbagai bidang. Di tempat kerja, manajer proyek menggunakannya untuk menentukan batas waktu pengiriman dan melacak kemajuan pencapaian (milestone). Dalam konteks hukum dan administratif, alat ini penting untuk menghitung masa kedaluwarsa atau durasi kontrak.',
100
+ },
101
+ {
102
+ type: 'list',
103
+ items: [
104
+ '<strong>Perencanaan acara:</strong> Ketahui berapa minggu dan hari yang tersisa hingga pernikahan, konferensi, atau perjalanan.',
105
+ '<strong>Manajemen proyek:</strong> Hitung waktu yang telah berlalu dari dimulainya suatu fase hingga penyelesaiannya.',
106
+ '<strong>Keuangan:</strong> Tentukan jumlah hari untuk perhitungan bunga atau tanggal jatuh tempo faktur.',
107
+ '<strong>Sumber Daya Manusia:</strong> Ukur masa kerja karyawan atau akumulasi hari libur.',
108
+ '<strong>Kesehatan:</strong> Pantau kemajuan pengobatan atau waktu pemulihan setelah prosedur medis.',
109
+ ],
110
+ },
111
+ { type: 'title', level: 3, text: 'Persepsi waktu dan presisi digital' },
112
+ {
113
+ type: 'paragraph',
114
+ html: 'Kita sering cenderung membulatkan waktu. Kita mengatakan "sekitar satu bulan" padahal sebenarnya masih 27 hari dan 14 jam lagi. Dengan menggunakan kalkulator digital, kita menghilangkan subjektivitas dan memperoleh data yang bersih untuk pengambilan keputusan yang tepat.',
115
+ },
116
+ { type: 'title', level: 3, text: 'Hari kalender vs hari kerja' },
117
+ {
118
+ type: 'paragraph',
119
+ html: 'Alat ini menghitung <strong>hari kalender</strong>, termasuk akhir pekan dan hari libur nasional. Untuk perhitungan astronomi dan sipil umum, waktu diukur secara berkelanjutan. Jika Anda perlu memperkirakan waktu proyek, ingatlah bahwa hari yang ditampilkan mewakili kalender nyata secara penuh.',
120
+ },
121
+ { type: 'title', level: 3, text: 'Dampak waktu pada produktivitas' },
122
+ {
123
+ type: 'paragraph',
124
+ html: 'Hukum Parkinson menyatakan bahwa pekerjaan akan berkembang untuk mengisi waktu yang tersedia untuk penyelesaiannya. Dengan memvisualisasikan secara tepat berapa jam dan menit yang tersisa hingga batas waktu, tim cenderung mengoptimalkan upaya mereka dan tetap fokus.',
125
+ },
126
+ {
127
+ type: 'tip',
128
+ title: 'Tanggal masa depan dan masa lalu',
129
+ html: 'Anda dapat menggunakan kalkulator ini untuk tanggal masa depan maupun masa lalu. Jika tanggal akhir lebih awal dari tanggal mulai, sistem secara otomatis mendeteksi bahwa itu adalah waktu yang telah berlalu di masa lalu, dengan tetap menjaga presisi dalam nilai selisih absolut.',
130
+ },
131
+ ],
132
+ };
@@ -0,0 +1,132 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { DateDiffCalculatorUI } from '../ui';
4
+
5
+ const faqData = [
6
+ {
7
+ question: 'Questo calcolatore di differenza tra date è gratuito?',
8
+ answer: 'Sì, è uno strumento gratuito al 100% accessibile da qualsiasi browser senza necessità di registrazione o download.',
9
+ },
10
+ {
11
+ question: 'Come vengono gestiti gli anni bisestili nel tempo totale?',
12
+ answer: 'Lo strumento utilizza la cronologia standard di JavaScript (UTC), che gestisce automaticamente gli anni bisestili e il numero variabile di giorni in ogni mese per fornire un risultato esatto.',
13
+ },
14
+ {
15
+ question: 'Posso calcolare anche la differenza tra ore e minuti?',
16
+ answer: 'Sì. I campi di input consentono di selezionare l\'ora esatta. Il risultato fornisce una ripartizione in giorni, ore, minuti e secondi, nonché i totali accumulati.',
17
+ },
18
+ {
19
+ question: 'Le mie date vengono inviate a qualche server?',
20
+ answer: 'No. Tutte le elaborazioni vengono eseguite localmente nel browser. Non memorizziamo né riceviamo alcuna informazione sulle date calcolate.',
21
+ },
22
+ ];
23
+
24
+ const howToData = [
25
+ { name: 'Seleziona la data di inizio', text: "Inserisci la data e l'ora di inizio, oppure fai clic su 'Oggi' per impostarla istantaneamente." },
26
+ { name: 'Seleziona la data di fine', text: "Definisci il momento di arrivo. Usa 'Adesso' per misurare il tempo trascorso fino a questo preciso istante." },
27
+ { name: 'Leggi i risultati', text: 'Controlla la ripartizione in giorni, ore, minuti e secondi, oltre ai totali accumulati per settimane e ore.' },
28
+ ];
29
+
30
+ const faqSchema: WithContext<FAQPage> = {
31
+ '@context': 'https://schema.org',
32
+ '@type': 'FAQPage',
33
+ mainEntity: faqData.map((item) => ({
34
+ '@type': 'Question',
35
+ name: item.question,
36
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
37
+ })),
38
+ };
39
+
40
+ const howToSchema: WithContext<HowTo> = {
41
+ '@context': 'https://schema.org',
42
+ '@type': 'HowTo',
43
+ name: 'Come calcolare la differenza tra due date',
44
+ step: howToData.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
45
+ };
46
+
47
+ const appSchema: WithContext<SoftwareApplication> = {
48
+ '@context': 'https://schema.org',
49
+ '@type': 'SoftwareApplication',
50
+ name: 'Calcolatore di Differenza tra Date',
51
+ applicationCategory: 'UtilitiesApplication',
52
+ operatingSystem: 'Web',
53
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
54
+ description: 'Calcola esattamente quanto tempo è passato tra due date o quanto manca a un evento. Risultati in giorni, ore e minuti.',
55
+ };
56
+
57
+ const ui: DateDiffCalculatorUI = {
58
+ startLabel: 'Data di Inizio',
59
+ endLabel: 'Data di Fine',
60
+ nowBtn: 'Adesso',
61
+ todayBtn: 'Oggi',
62
+ tomorrowBtn: 'Domani',
63
+ daysLabel: 'Giorni',
64
+ hoursLabel: 'Ore',
65
+ minsLabel: 'Min',
66
+ secsLabel: 'Sec',
67
+ weeksLabel: 'Settimane Totali',
68
+ totalHoursLabel: 'Ore Totali',
69
+ totalMinsLabel: 'Minuti Totali',
70
+ elapsed: 'Tempo Trascorso',
71
+ past: 'Tempo nel Passato',
72
+ invalidDates: 'Date non valide',
73
+ };
74
+
75
+ export const content: ToolLocaleContent<DateDiffCalculatorUI> = {
76
+ slug: 'calcolatrice-differenza-date',
77
+ title: 'Calcolatore di Differenza tra Date',
78
+ description: 'Calcola esattamente quanto tempo è passato tra due date o quanto manca a un evento. Strumento gratuito con risultati in giorni, ore e minuti.',
79
+ ui,
80
+ faqTitle: 'Domande Frequenti',
81
+ faq: faqData,
82
+ howTo: howToData,
83
+ bibliographyTitle: 'Riferimenti',
84
+ bibliography: [
85
+ { name: 'Time and Date: World Clock and Time Zone Converter', url: 'https://www.timeanddate.com/worldclock/' },
86
+ { name: 'Wikipedia: History of the Gregorian Calendar', url: 'https://it.wikipedia.org/wiki/Calendario_gregoriano' },
87
+ { name: 'Wikipedia: Eisenhower Matrix and Time Management', url: 'https://it.wikipedia.org/wiki/Gestione_del_tempo#Metodo_di_Eisenhower' },
88
+ ],
89
+ schemas: [faqSchema, howToSchema, appSchema],
90
+ seo: [
91
+ { type: 'title', level: 2, text: 'Calcolatore di differenza tra date con giorni, ore e minuti' },
92
+ {
93
+ type: 'paragraph',
94
+ html: 'Calcolare la <strong>differenza tra due date</strong> è uno dei compiti più comuni e sottovalutati sia nella vita quotidiana che in contesti professionali. Che si tratti di pianificare il lancio di un prodotto, calcolare l\'età esatta di una persona o misurare il tempo rimanente a un evento speciale, disporre di uno strumento preciso è essenziale per un\'efficiente gestione del tempo.',
95
+ },
96
+ { type: 'title', level: 3, text: 'A cosa serve il calcolatore di differenza tra date?' },
97
+ {
98
+ type: 'paragraph',
99
+ html: 'L\'utilità di questo strumento si estende a molteplici settori. Nel lavoro, i project manager lo usano per definire le scadenze di consegna e tracciare i progressi dei traguardi. In contesti legali e amministrativi, è fondamentale per calcolare i termini di prescrizione o la durata dei contratti.',
100
+ },
101
+ {
102
+ type: 'list',
103
+ items: [
104
+ '<strong>Pianificazione di eventi:</strong> Scopri quante settimane e giorni mancano a un matrimonio, una conferenza o un viaggio.',
105
+ '<strong>Gestione dei progetti:</strong> Calcola il tempo trascorso dall\'inizio di una fase fino al suo completamento.',
106
+ '<strong>Finanza:</strong> Determina il numero di giorni per il calcolo degli interessi o le scadenze delle fatture.',
107
+ '<strong>Risorse Umane:</strong> Misura l\'anzianità dei dipendenti o i giorni di vacanza accumulati.',
108
+ '<strong>Salute:</strong> Monitora i progressi di un trattamento o il tempo di recupero dopo un intervento.',
109
+ ],
110
+ },
111
+ { type: 'title', level: 3, text: 'Percezione del tempo e precisione digitale' },
112
+ {
113
+ type: 'paragraph',
114
+ html: 'Spesso tendiamo ad arrotondare il tempo. Diciamo "circa un mese" quando mancano effettivamente 27 giorni e 14 ore. Utilizzando un calcolatore digitale, eliminiamo la soggettività e otteniamo dati puliti per un processo decisionale informato.',
115
+ },
116
+ { type: 'title', level: 3, text: 'Giorni naturali contro giorni lavorativi' },
117
+ {
118
+ type: 'paragraph',
119
+ html: 'Questo strumento calcola i <strong>giorni di calendario</strong>, inclusi i fine settimana e i giorni festivi. Per i calcoli astronomici e civili generali, il tempo viene misurato in modo continuo. Se devi stimare i tempi di un progetto, ricorda che i giorni mostrati rappresentano l\'intero calendario reale.',
120
+ },
121
+ { type: 'title', level: 3, text: 'L\'impatto del tempo sulla produttività' },
122
+ {
123
+ type: 'paragraph',
124
+ html: 'La Legge di Parkinson afferma che il lavoro si espande fino a occupare tutto il tempo disponibile per il suo completamento. Visualizzando esattamente quante ore e minuti mancano a una scadenza, i team tendono a ottimizzare i propri sforzi e a mantenere la concentrazione.',
125
+ },
126
+ {
127
+ type: 'tip',
128
+ title: 'Date future e passate',
129
+ html: 'Puoi usare il calcolatore sia per date future che passate. Se la data di fine è precedente alla data di inizio, il sistema rileva automaticamente che si tratta di tempo trascorso nel passato, mantenendo la precisione nei valori di differenza assoluta.',
130
+ },
131
+ ],
132
+ };
@@ -0,0 +1,132 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { DateDiffCalculatorUI } from '../ui';
4
+
5
+ const faqData = [
6
+ {
7
+ question: 'この日付差計算機は無料ですか?',
8
+ answer: 'はい、登録やダウンロードは一切不要で、どのブラウザからでもアクセスできる100%無料のツールです。',
9
+ },
10
+ {
11
+ question: '合計時間において、うるう年はどのように処理されますか?',
12
+ answer: 'このツールは標準的なJavaScriptの年代測定法(UTC)を使用しており、うるう年や各月の不規則な日数を自動的に処理して、正確な結果を提供します。',
13
+ },
14
+ {
15
+ question: '時や分の差も計算できますか?',
16
+ answer: 'はい。入力フィールドで正確な時刻を選択できます。結果は、日・時・分・秒の構成だけでなく、累積された合計時間も表示します。',
17
+ },
18
+ {
19
+ question: '入力した日付データはサーバーに送信されますか?',
20
+ answer: 'いいえ。すべての処理はブラウザ内でローカルに行われます。計算された日付に関する情報を保存したり、受信したりすることはありません。',
21
+ },
22
+ ];
23
+
24
+ const howToData = [
25
+ { name: '開始日を選択', text: '開始する日付と時刻を入力してください。「今日」をクリックすると瞬時に設定できます。' },
26
+ { name: '終了日を選択', text: '目標とする時点を定義します。「現在」を使用すると、今この瞬間までに経過した時間を測定できます。' },
27
+ { name: '結果を確認', text: '日・時・分・秒の構成に加えて、週や時間の累積合計を確認してください。' },
28
+ ];
29
+
30
+ const faqSchema: WithContext<FAQPage> = {
31
+ '@context': 'https://schema.org',
32
+ '@type': 'FAQPage',
33
+ mainEntity: faqData.map((item) => ({
34
+ '@type': 'Question',
35
+ name: item.question,
36
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
37
+ })),
38
+ };
39
+
40
+ const howToSchema: WithContext<HowTo> = {
41
+ '@context': 'https://schema.org',
42
+ '@type': 'HowTo',
43
+ name: '2つの日付の差を計算する方法',
44
+ step: howToData.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
45
+ };
46
+
47
+ const appSchema: WithContext<SoftwareApplication> = {
48
+ '@context': 'https://schema.org',
49
+ '@type': 'SoftwareApplication',
50
+ name: '日付差計算機',
51
+ applicationCategory: 'UtilitiesApplication',
52
+ operatingSystem: 'Web',
53
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'JPY' },
54
+ description: '2つの日付の間にどれだけの時間が経過したか、あるいはイベントまであとどれくらいかを正確に計算します。日、時、分で結果を表示。',
55
+ };
56
+
57
+ const ui: DateDiffCalculatorUI = {
58
+ startLabel: '開始日',
59
+ endLabel: '終了日',
60
+ nowBtn: '現在',
61
+ todayBtn: '今日',
62
+ tomorrowBtn: '明日',
63
+ daysLabel: '日',
64
+ hoursLabel: '時間',
65
+ minsLabel: '分',
66
+ secsLabel: '秒',
67
+ weeksLabel: '合計週数',
68
+ totalHoursLabel: '合計時間',
69
+ totalMinsLabel: '合計分数',
70
+ elapsed: '経過時間',
71
+ past: '過去の時間',
72
+ invalidDates: '無効な日付',
73
+ };
74
+
75
+ export const content: ToolLocaleContent<DateDiffCalculatorUI> = {
76
+ slug: 'date-difference-calculator',
77
+ title: '日付差計算機',
78
+ description: '2つの日付の間にどれだけの時間が経過したか、あるいはイベントまであとどれくらいかを正確に計算します。日、時、分で結果を表示する無料ツール。',
79
+ ui,
80
+ faqTitle: 'よくある質問',
81
+ faq: faqData,
82
+ howTo: howToData,
83
+ bibliographyTitle: '参考文献',
84
+ bibliography: [
85
+ { name: 'Time and Date: 世界時計とタイムゾーン変換器', url: 'https://www.timeanddate.com/worldclock/' },
86
+ { name: 'Wikipedia: グレゴリオ暦の歴史', url: 'https://ja.wikipedia.org/wiki/グレゴリオ暦' },
87
+ { name: 'Wikipedia: アイゼンハワー・マトリクスと時間管理', url: 'https://ja.wikipedia.org/wiki/時間管理' },
88
+ ],
89
+ schemas: [faqSchema, howToSchema, appSchema],
90
+ seo: [
91
+ { type: 'title', level: 2, text: '日、時、分でわかる日付差計算機' },
92
+ {
93
+ type: 'paragraph',
94
+ html: '<strong>2つの日付の差</strong>を計算することは、日常生活と仕事の両方において、最も一般的でありながら過小評価されているタスクの1つです。製品の発売計画を立てる際でも、誰かの正確な年齢を計算する際でも、あるいは特別なイベントまでの残り時間を測る際でも、効率的な時間管理には正確なツールが不可欠です。',
95
+ },
96
+ { type: 'title', level: 3, text: '日付差計算機は何に使われますか?' },
97
+ {
98
+ type: 'paragraph',
99
+ html: 'このツールの有用性は多くの分野に及びます。職場では、プロジェクトマネージャーが納品期限を定め、マイルストーンの進捗を追跡するために使用します。法的または行政的な文脈では、時効期間や契約期間を計算するために不可欠です。',
100
+ },
101
+ {
102
+ type: 'list',
103
+ items: [
104
+ '<strong>イベント計画:</strong>結婚式、会議、または旅行まであと何週間と何日あるかを知る。',
105
+ '<strong>プロジェクト管理:</strong>あるフェーズの開始から完了までに経過した時間を計算する。',
106
+ '<strong>財務:</strong>利息計算や請求書の支払期限のための日数を決定する。',
107
+ '<strong>人事:</strong>従業員の勤続年数や累積休暇日数を測定する。',
108
+ '<strong>健康:</strong>治療の進捗や、処置後の回復時間を追跡する。',
109
+ ],
110
+ },
111
+ { type: 'title', level: 3, text: '時間の知覚とデジタルの正確性' },
112
+ {
113
+ type: 'paragraph',
114
+ html: '私たちはしばしば時間を切り捨てる傾向があります。実際には27日と14時間あるのに「約1ヶ月」と言ったりします。デジタル計算機を使用することで、主観を排除し、情報に基づいた意思決定のための明確なデータを得ることができます。',
115
+ },
116
+ { type: 'title', level: 3, text: '暦日対営業日' },
117
+ {
118
+ type: 'paragraph',
119
+ html: 'このツールは、週末や祝日を含む<strong>暦日</strong>を計算します。天文学的および一般的な市民生活の計算では、時間は継続的に測定されます。プロジェクト時間を推定する必要がある場合は、表示される日数が実際のカレンダーのフル期間を表していることを忘れないでください。',
120
+ },
121
+ { type: 'title', level: 3, text: '時間が生産性に与える影響' },
122
+ {
123
+ type: 'paragraph',
124
+ html: 'パーキンソンの法則によれば、仕事の量は、完成のために割り当てられた時間を満たすまで膨張します。締め切りまでにあと何時間、何分残っているかを正確に可視化することで、チームは努力を最適化し、集中力を維持する傾向があります。',
125
+ },
126
+ {
127
+ type: 'tip',
128
+ title: '未来と過去の日付',
129
+ html: 'この計算機は、未来と過去の両方の日付に使用できます。終了日が開始日よりも早い場合、システムは自動的にそれが過去に経過した時間であることを検出し、絶対的な差の値の正確性を維持します。',
130
+ },
131
+ ],
132
+ };