@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,118 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { DriveDirectLinkUI } from '../ui';
4
+
5
+ const faqData = [
6
+ {
7
+ question: 'Google Drive indirme dönüştürücüsünü nasıl kullanırım?',
8
+ answer: "Google Drive'da saklanan herhangi bir dosyanın tam 'Paylaş' bağlantısını kopyalayın (herkese açık izinleri olmalıdır). Aracın metin kutusuna yapıştırın ve 'Doğrudan Bağlantı Oluştur'a tıklayın. Google'ın görüntüleyicisini açmadan indirmeyi başlatan yeni bir URL görünecektir.",
9
+ },
10
+ {
11
+ question: 'Özel bir dosya için doğrudan indirme bağlantısı oluşturabilir miyim?',
12
+ answer: 'Dosya gizliyse veya erişim kısıtlıysa Google, yetkili bir hesapla oturum açmanızı isteyecektir. Kayıt olmadan temiz indirmeler için dosya izinlerinin "Bağlantıya sahip olan herkes görüntüleyebilir" olarak ayarlanması gerekir.',
13
+ },
14
+ {
15
+ question: 'Drive bağlantılarımı burada dönüştürmek güvenli mi?',
16
+ answer: 'Evet. Dönüştürme işlemi %100 tarayıcınızda gerçekleşir ve tamamen anonimdir. Araç bağlantınızı saklamaz veya herhangi bir sunucu çağrısı yapmaz; indirme sürümünü oluşturmak için yalnızca istemci tarafında URL yapısını analiz eder.',
17
+ },
18
+ {
19
+ question: 'Drive dosyam çok büyükse ne olur?',
20
+ answer: "Yaklaşık 100 MB'tan büyük dosyalar için Google Drive anında doğrudan indirmeye izin vermez. Bunun yerine, dosya boyutu ve antivirüs taraması atlaması hakkında bir uyarı sayfası gösterir. Bu, hiçbir harici aracın aşamayacağı sabit bir Google sunucu politikasıdır.",
21
+ },
22
+ ];
23
+
24
+ const howToData = [
25
+ { name: 'Paylaşım bağlantısını kopyalayın', text: "Google Drive'da dosyaya sağ tıklayın ve 'Bağlantıyı al'ı seçin. İzinlerin bağlantıya sahip olan herkesin erişimine izin verdiğinden emin olun." },
26
+ { name: 'Bağlantıyı oluşturucuya yapıştırın', text: "Tam Drive URL'sini aracın metin alanına girin ve 'Doğrudan Bağlantı Oluştur' düğmesine tıklayın." },
27
+ { name: 'Oluşturulan bağlantıyı kopyalayın ve kullanın', text: 'Yeni doğrudan indirme bağlantısını kopyalayın ve e-postalarda, web sitelerinde, bültenlerde veya tıklandığında dosyanın hemen indirilmesine ihtiyaç duyduğunuz her yerde kullanın.' },
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: 'Google Drive için doğrudan indirme bağlantısı nasıl oluşturulur?',
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: 'Google Drive Doğrudan İndirme Bağlantısı Oluşturucu',
51
+ applicationCategory: 'UtilitiesApplication',
52
+ operatingSystem: 'Web',
53
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
54
+ description: 'Herhangi bir Google Drive paylaşım bağlantısını tek bir tıklamayla dosya önizleme sayfasını atlayarak doğrudan indirme bağlantısına dönüştürün. Ücretsiz araç.',
55
+ };
56
+
57
+ const ui: DriveDirectLinkUI = {
58
+ inputLabel: 'Google Drive bağlantınızı buraya yapıştırın:',
59
+ inputPlaceholder: 'https://drive.google.com/file/d/...',
60
+ generateBtn: 'Doğrudan Bağlantı Oluştur',
61
+ resultLabel: 'Doğrudan İndirme Bağlantısı:',
62
+ copyTitle: 'Panoya kopyala',
63
+ copyDone: 'Kopyalandı',
64
+ testBtn: 'İndirmeyi Test Et',
65
+ errorMsg: 'Girdiğiniz bağlantı geçerli bir Google Drive bağlantısı gibi görünmüyor.',
66
+ };
67
+
68
+ export const content: ToolLocaleContent<DriveDirectLinkUI> = {
69
+ slug: 'google-drive-dogrudan-indirme-baglantisi',
70
+ title: 'Google Drive Doğrudan İndirme Bağlantısı Oluşturucu',
71
+ description: 'Herhangi bir Google Drive paylaşım bağlantısını dosya önizlemesini atlayarak tek bir tıklamayla doğrudan indirme bağlantısına kolayca dönüştürün. Ücretsiz araç.',
72
+ ui,
73
+ faqTitle: 'Sıkça Sorulan Sorular',
74
+ faq: faqData,
75
+ howTo: howToData,
76
+ bibliographyTitle: 'Kaynaklar',
77
+ bibliography: [
78
+ { name: "Google Drive'dan dosya indirme (Google Workspace)", url: 'https://support.google.com/drive/answer/2423534' },
79
+ { name: 'Google Drive API: Dosyaları İndirme', url: 'https://developers.google.com/drive/api/guides/manage-downloads' },
80
+ ],
81
+ schemas: [faqSchema, howToSchema, appSchema],
82
+ seo: [
83
+ { type: 'title', level: 2, text: 'Google Drive paylaşım bağlantılarını doğrudan indirme bağlantılarına dönüştürün' },
84
+ {
85
+ type: 'paragraph',
86
+ html: "Google Drive üzerinden sık sık dosya paylaşıyorsanız, önizleme sayfasının ne kadar can sıkıcı olabileceğini bilirsiniz. Kullanıcılarınız bağlantınıza tıkladığında, onları indirme düğmesini bulmaya zorlayan bir ara ekranla karşılaşırlar. <strong>Google Drive doğrudan indirme bağlantısı oluşturucumuz</strong>, herhangi bir paylaşım bağlantısını otomatik olarak indirmeyi başlatan bir bağlantıya dönüştürerek bu sorunu çözer.",
87
+ },
88
+ { type: 'title', level: 3, text: 'Neden doğrudan indirme bağlantısı kullanmalısınız?' },
89
+ {
90
+ type: 'paragraph',
91
+ html: 'Ana fayda, çok daha iyi bir kullanıcı deneyimidir. Bir PDF, resim veya yazılım yükleyici paylaşırken, kullanıcılar bağlantıya tıklandığında indirmenin hemen başlamasını beklerler:',
92
+ },
93
+ {
94
+ type: 'list',
95
+ items: [
96
+ '<strong>Zaman kazandırır:</strong> Ekstra adımlar olmadan tek tıkla indirme.',
97
+ '<strong>Profesyonel görünüm:</strong> Web sitelerindeki indirme düğmeleri, bültenler veya müşteri e-postaları için idealdir.',
98
+ '<strong>Daha az terk etme:</strong> Teknolojiye daha az hakim olan kullanıcılar Drive önizlemesi nedeniyle kafa karışıklığı yaşayabilir ve nasıl indireceklerini bilemeyebilirler.',
99
+ '<strong>HTML uyumlu:</strong> Web sayfalarınızdaki <code>href</code> veya <code>src</code> öznitelikleri için mükemmeldir.',
100
+ ],
101
+ },
102
+ { type: 'title', level: 3, text: 'Doğrudan bağlantı oluşturucu nasıl çalışır?' },
103
+ {
104
+ type: 'paragraph',
105
+ html: "Her şey %100 tarayıcınızda gerçekleşir. Google Drive paylaşım bağlantıları benzersiz bir dosya kimliği (ID) içerir. Araç bu kimliği ayıklar ve Google'ın yerel dışa aktarma parametresini kullanarak yeni bir URL oluşturur: <code>https://drive.google.com/uc?export=download&amp;id=ID_NUMARANIZ</code>.",
106
+ },
107
+ {
108
+ type: 'tip',
109
+ title: 'Büyük dosyalar için uyarı',
110
+ html: "Yaklaşık 100 MB'ın üzerindeki dosyalar için Google Drive, indirme başlamadan önce bir antivirüs tarama uyarısı sayfası görüntüler. Bu, hiçbir harici aracın atlayamayacağı sabit bir Google sunucu politikasıdır.",
111
+ },
112
+ { type: 'title', level: 3, text: 'Gizlilik ve güvenlik garantili' },
113
+ {
114
+ type: 'paragraph',
115
+ html: 'Bu araç gizliliğinize tam saygı duyar. Tüm bağlantı dönüştürme işlemi kendi cihazınızda istemci tarafı JavaScript aracılığıyla gerçekleştirilir. Hiçbir bağlantı, dosya kimliği veya kişisel bilgi harici bir sunucuya gönderilmez.',
116
+ },
117
+ ],
118
+ };
@@ -0,0 +1,118 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { DriveDirectLinkUI } from '../ui';
4
+
5
+ const faqData = [
6
+ {
7
+ question: '如何使用 Google 云端硬盘下载转换器?',
8
+ answer: '从 Google 云端硬盘中存储的任何文件复制完整的“共享”链接(必须具有公共权限)。将其粘贴到工具的文本框中,然后点击“生成直链”。将出现一个新的 URL,点击该 URL 即可开始下载,而无需打开 Google 的查看器。',
9
+ },
10
+ {
11
+ question: '我可以为私有文件生成直接下载链接吗?',
12
+ answer: '如果文件是私有的或访问受限,Google 会要求您使用授权账号登录。为了实现无需注册的纯净下载,文件权限必须设置为“任何拥有链接的人都可以查看”。',
13
+ },
14
+ {
15
+ question: '在这里转换我的云端硬盘链接安全吗?',
16
+ answer: '安全。转换 100% 在您的浏览器中进行,完全匿名。该工具不会存储您的链接或进行任何服务器调用;它仅在客户端分析 URL 结构以生成下载版本。',
17
+ },
18
+ {
19
+ question: '如果我的云端硬盘文件非常大怎么办?',
20
+ answer: '对于大于约 100 MB 的文件,Google 云端硬盘不允许即时直接下载。相反,它会显示一个关于文件大小和跳过防病毒扫描的警告页面。这是 Google 服务器的固定策略,任何外部工具都无法避开。',
21
+ },
22
+ ];
23
+
24
+ const howToData = [
25
+ { name: '复制共享链接', text: '在 Google 云端硬盘中,右键点击文件并选择“获取链接”。确保权限允许任何拥有链接的人访问。' },
26
+ { name: '将链接粘贴到生成器中', text: '在工具的文本框中输入完整的云端硬盘 URL,然后点击“生成直链”按钮。' },
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: '如何生成 Google 云端硬盘直接下载链接',
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: 'Google 云端硬盘直接下载链接生成器',
51
+ applicationCategory: 'UtilitiesApplication',
52
+ operatingSystem: 'Web',
53
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'CNY' },
54
+ description: '只需点击一下,即可将任何 Google 云端硬盘共享链接转换为直接下载链接,跳过文件预览页面。免费工具。',
55
+ };
56
+
57
+ const ui: DriveDirectLinkUI = {
58
+ inputLabel: '在此处粘贴您的 Google 云端硬盘链接:',
59
+ inputPlaceholder: 'https://drive.google.com/file/d/...',
60
+ generateBtn: '生成直链',
61
+ resultLabel: '直接下载链接:',
62
+ copyTitle: '复制到剪贴板',
63
+ copyDone: '已复制',
64
+ testBtn: '测试下载',
65
+ errorMsg: '您输入的链接似乎不是有效的 Google 云端硬盘链接。',
66
+ };
67
+
68
+ export const content: ToolLocaleContent<DriveDirectLinkUI> = {
69
+ slug: 'google-drive-direct-download-link',
70
+ title: 'Google 云端硬盘直接下载链接生成器',
71
+ description: '只需点击一下,即可轻松将任何 Google 云端硬盘共享链接转换为直接下载链接,跳过文件预览。免费工具。',
72
+ ui,
73
+ faqTitle: '常见问题',
74
+ faq: faqData,
75
+ howTo: howToData,
76
+ bibliographyTitle: '参考文献',
77
+ bibliography: [
78
+ { name: '从 Google 云端硬盘下载文件 (Google Workspace)', url: 'https://support.google.com/drive/answer/2423534' },
79
+ { name: 'Google Drive API:下载文件', url: 'https://developers.google.com/drive/api/guides/manage-downloads' },
80
+ ],
81
+ schemas: [faqSchema, howToSchema, appSchema],
82
+ seo: [
83
+ { type: 'title', level: 2, text: '将 Google 云端硬盘共享链接转换为直接下载链接' },
84
+ {
85
+ type: 'paragraph',
86
+ html: '如果您经常通过 Google 云端硬盘共享文件,就会知道预览页面有多烦人。当您的用户点击链接时,他们会进入一个中间屏幕,被迫寻找下载按钮。我们的 <strong>Google 云端硬盘直接下载链接生成器</strong>通过将任何共享链接转换为自动开始下载的链接来解决这个问题。',
87
+ },
88
+ { type: 'title', level: 3, text: '为什么要使用直接下载链接?' },
89
+ {
90
+ type: 'paragraph',
91
+ html: '主要好处是更好的用户体验。在共享 PDF、图像或软件安装程序时,用户期望点击链接能立即开始下载:',
92
+ },
93
+ {
94
+ type: 'list',
95
+ items: [
96
+ '<strong>节省时间:</strong>一键下载,无需额外步骤。',
97
+ '<strong>专业外观:</strong>非常适合网站上的下载按钮、新闻通讯或客户电子邮件。',
98
+ '<strong>减少流失:</strong>不太懂技术的用户可能会被云端硬盘预览所困扰,不知如何下载。',
99
+ '<strong>HTML 就绪:</strong>完美适用于网页中的 <code>href</code> 或 <code>src</code> 属性。',
100
+ ],
101
+ },
102
+ { type: 'title', level: 3, text: '直链生成器是如何工作的?' },
103
+ {
104
+ type: 'paragraph',
105
+ html: '一切都 100% 在您的浏览器中进行。Google 云端硬盘共享链接包含一个唯一的文件 ID。该工具提取该 ID 并使用 Google 的原生导出参数构建一个新的 URL:<code>https://drive.google.com/uc?export=download&amp;id=您的_ID</code>。',
106
+ },
107
+ {
108
+ type: 'tip',
109
+ title: '大文件警告',
110
+ html: '对于超过约 100 MB 的文件,Google 云端硬盘会在下载开始前显示防病毒扫描警告页面。这是 Google 服务器的固定策略,任何外部工具都无法避开。',
111
+ },
112
+ { type: 'title', level: 3, text: '隐私和安全保证' },
113
+ {
114
+ type: 'paragraph',
115
+ html: '该工具充分尊重您的隐私。整个链接转换都是通过您自己设备上的客户端 JavaScript 完成的。任何链接、文件 ID 或个人信息都不会发送到任何外部服务器。',
116
+ },
117
+ ],
118
+ };
@@ -11,6 +11,18 @@ export const driveDirectLink: ToolsToolEntry<DriveDirectLinkUI> = {
11
11
  es: () => import('./i18n/es').then((m) => m.content),
12
12
  en: () => import('./i18n/en').then((m) => m.content),
13
13
  fr: () => import('./i18n/fr').then((m) => m.content),
14
+ de: () => import('./i18n/de').then((m) => m.content),
15
+ it: () => import('./i18n/it').then((m) => m.content),
16
+ pt: () => import('./i18n/pt').then((m) => m.content),
17
+ nl: () => import('./i18n/nl').then((m) => m.content),
18
+ pl: () => import('./i18n/pl').then((m) => m.content),
19
+ tr: () => import('./i18n/tr').then((m) => m.content),
20
+ id: () => import('./i18n/id').then((m) => m.content),
21
+ sv: () => import('./i18n/sv').then((m) => m.content),
22
+ ru: () => import('./i18n/ru').then((m) => m.content),
23
+ ja: () => import('./i18n/ja').then((m) => m.content),
24
+ ko: () => import('./i18n/ko').then((m) => m.content),
25
+ zh: () => import('./i18n/zh').then((m) => m.content),
14
26
  },
15
27
  };
16
28
 
@@ -0,0 +1,140 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { EmailListCleanerUI } from '../ui';
4
+
5
+ const faqData = [
6
+ {
7
+ question: 'Was genau macht dieser E-Mail-Listen-Bereiniger?',
8
+ answer: 'Das Tool analysiert Ihre E-Mail-Liste, entfernt Duplikate, streicht unnötige Leerzeichen, validiert das Grundformat und normalisiert alle Adressen in Kleinschreibung, um eine saubere Datenbank zu gewährleisten.',
9
+ },
10
+ {
11
+ question: 'Gibt es ein Limit für die Anzahl der E-Mails?',
12
+ answer: 'Es gibt kein striktes Datensatzlimit. Sie können Tausende von E-Mails sofort in einem Durchgang verarbeiten. Die einzige Einschränkung ist der Speicher Ihres Browsers, falls die Liste extrem groß ist.',
13
+ },
14
+ {
15
+ question: 'Ist es sicher, meine E-Mails hier einzufügen?',
16
+ answer: 'Absolut. Die gesamte Verarbeitung erfolgt lokal in Ihrem eigenen Browser via JavaScript. Ihre Daten werden niemals an unsere Server gesendet oder in einer externen Datenbank gespeichert.',
17
+ },
18
+ {
19
+ question: 'Wie verbessert dies die Zustellbarkeit meiner Kampagne?',
20
+ answer: 'Durch das Entfernen nicht existierender oder falsch formatierter Adressen reduzieren Sie Ihre Bounce-Rate, was Ihren Ruf der Domain bei Anbietern wie Gmail, Outlook und Yahoo verbessert.',
21
+ },
22
+ ];
23
+
24
+ const howToData = [
25
+ { name: 'E-Mails einfügen', text: 'Kopieren Sie Ihre E-Mail-Liste und fügen Sie sie in das Textfeld ein. Sie können durch Zeilen, Kommas oder Leerzeichen getrennt sein.' },
26
+ { name: 'Liste bereinigen', text: 'Klicken Sie auf die Schaltfläche „Liste bereinigen“, um den Validierungs- und Duplikatentfernungsprozess zu starten.' },
27
+ { name: 'Ergebnisse überprüfen', text: 'Prüfen Sie die Statistiken, die originale vs. finale E-Mails zeigen, und überprüfen Sie die bereinigte Liste im unteren Bereich.' },
28
+ { name: 'Kopieren oder Herunterladen', text: 'Kopieren Sie das Ergebnis direkt in die Zwischenablage oder laden Sie es als gebrauchsfertige .txt-Datei herunter.' },
29
+ ];
30
+
31
+ const faqSchema: WithContext<FAQPage> = {
32
+ '@context': 'https://schema.org',
33
+ '@type': 'FAQPage',
34
+ mainEntity: faqData.map((item) => ({
35
+ '@type': 'Question',
36
+ name: item.question,
37
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
38
+ })),
39
+ };
40
+
41
+ const howToSchema: WithContext<HowTo> = {
42
+ '@context': 'https://schema.org',
43
+ '@type': 'HowTo',
44
+ name: 'So bereinigen Sie eine E-Mail-Liste',
45
+ step: howToData.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
46
+ };
47
+
48
+ const appSchema: WithContext<SoftwareApplication> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'SoftwareApplication',
51
+ name: 'E-Mail-Listen-Bereiniger',
52
+ applicationCategory: 'UtilitiesApplication',
53
+ operatingSystem: 'Web',
54
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
55
+ description: 'Entfernen Sie Duplikate, korrigieren Sie Leerzeichen und validieren Sie Formate in Ihrer E-Mail-Liste. Kostenloses Tool ohne Datensatzlimit.',
56
+ };
57
+
58
+ const ui: EmailListCleanerUI = {
59
+ inputLabel: 'E-Mail-Liste',
60
+ inputPlaceholder: 'Fügen Sie hier Ihre E-Mail-Liste ein (getrennt durch Zeilen, Kommas oder Leerzeichen)...',
61
+ cleanBtn: 'Liste bereinigen',
62
+ clearBtn: 'Alles löschen',
63
+ statsOriginal: 'Original',
64
+ statsRemoved: 'Entfernt',
65
+ statsFinal: 'Sauber',
66
+ resultLabel: 'Bereinigtes Ergebnis',
67
+ copyBtn: 'Liste kopieren',
68
+ copyDone: 'Kopiert!',
69
+ downloadBtn: '.txt herunterladen',
70
+ registered: 'registriert',
71
+ downloadFilename: 'saubere-emails',
72
+ };
73
+
74
+ export const content: ToolLocaleContent<EmailListCleanerUI> = {
75
+ slug: 'email-listen-bereiniger',
76
+ title: 'Email Listen Bereiniger',
77
+ description: 'Bereinigen Sie E-Mail-Listen kostenlos. Entfernen Sie Duplikate, korrigieren Sie Leerzeichen und validieren Sie Formate in Sekunden. Sparen Sie Kosten und verbessern Sie Ihre Zustellbarkeit.',
78
+ ui,
79
+ faqTitle: 'Häufig gestellte Fragen',
80
+ faq: faqData,
81
+ howTo: howToData,
82
+ bibliographyTitle: 'Referenzen',
83
+ bibliography: [
84
+ { name: 'RFC 5322: Internet Message Format', url: 'https://datatracker.ietf.org/doc/html/rfc5322' },
85
+ { name: 'Google: Richtlinien für E-Mail-Absender', url: 'https://support.google.com/a/answer/81126' },
86
+ { name: 'Wikipedia: E-Mail-Spam', url: 'https://de.wikipedia.org/wiki/E-Mail-Spam' },
87
+ ],
88
+ schemas: [faqSchema, howToSchema, appSchema],
89
+ seo: [
90
+ { type: 'title', level: 2, text: 'Warum ist die Verwendung eines E-Mail-Listen-Bereinigers unerlässlich?' },
91
+ {
92
+ type: 'paragraph',
93
+ html: 'In der Welt des digitalen Marketings zählt die Qualität Ihrer Datenbank weitaus mehr als ihre Größe. Eine Liste mit 50.000 E-Mails ist wertlos, wenn die Hälfte davon nicht existierende Adressen sind, Tippfehler enthalten oder Duplikate sind. Hier wird ein <strong>E-Mail-Listen-Bereiniger</strong> unverzichtbar.',
94
+ },
95
+ { type: 'title', level: 3, text: 'Die Risiken einer unsauberen E-Mail-Liste' },
96
+ {
97
+ type: 'paragraph',
98
+ html: 'Das Führen einer unbereinigten Datenbank kann schwerwiegende Folgen haben. Das Versenden von E-Mails an Adressen, die nicht existieren, erzeugt einen „Hard Bounce“. Wenn dieser Prozentsatz 2-3 % übersteigt, beginnen Spamfilter Ihre Domain genauer zu prüfen und Sie könnten auf einer internationalen Blacklist landen.',
99
+ },
100
+ {
101
+ type: 'tip',
102
+ title: 'Expertentipp',
103
+ html: 'Kaufen Sie niemals E-Mail-Listen. Es ist der schnellste Weg, den Ruf Ihrer Domain zu ruinieren. Bauen Sie Ihre eigene Liste organisch auf und bereinigen Sie sie alle 3 bis 6 Monate.',
104
+ },
105
+ { type: 'title', level: 3, text: 'Wie unser Tool Ihre Datenbank optimiert' },
106
+ {
107
+ type: 'paragraph',
108
+ html: 'Unser kostenloses Dienstprogramm führt eine gründliche und schnelle Bereinigung Ihrer Datenbanken ohne Datensatzlimits durch. Es führt mehrere kritische Validierungsaufgaben sofort aus:',
109
+ },
110
+ {
111
+ type: 'list',
112
+ items: [
113
+ '<strong>Duplikate entfernen:</strong> Derselbe Nutzer erhält dieselbe E-Mail nicht zweimal.',
114
+ '<strong>Leerzeichenkorrektur:</strong> Wir entfernen versehentliche Leerzeichen am Anfang oder Ende, die den Versand ungültig machen würden.',
115
+ '<strong>Formatvalidierung:</strong> Wir filtern Einträge heraus, die keine gültige E-Mail-Struktur haben.',
116
+ '<strong>Normalisierung:</strong> Alles wird in Kleinschreibung umgewandelt, um redundante Datensätze zu vermeiden.',
117
+ ],
118
+ },
119
+ { type: 'title', level: 3, text: 'Wann ist der richtige Zeitpunkt, Ihre Liste zu bereinigen?' },
120
+ {
121
+ type: 'list',
122
+ items: [
123
+ 'Vor dem Import von Kontakten in ein neues CRM oder eine Versandplattform (Mailchimp, SendGrid usw.).',
124
+ 'Wenn Sie bemerken, dass Ihre Öffnungsrate unter den üblichen Durchschnitt gefallen ist.',
125
+ 'Nach einer Veranstaltung oder Messe, bei der Sie Daten manuell gesammelt haben.',
126
+ 'Als präventive Wartung jedes Quartal, um die Gesundheit der Domain zu erhalten.',
127
+ ],
128
+ },
129
+ { type: 'title', level: 3, text: 'Auswirkung auf den Return on Investment' },
130
+ {
131
+ type: 'paragraph',
132
+ html: 'E-Mail-Marketing bleibt einer der Kanäle mit dem höchsten ROI, aber nur, wenn die Nachrichten den Posteingang erreichen. Durch die Verwendung eines <strong>E-Mail-Bereinigers</strong> optimieren Sie Ihren Verkaufstrichter von der Quelle an und hören auf, Plattformen für Kontakte zu bezahlen, die Ihre Nachrichten niemals sehen werden.',
133
+ },
134
+ {
135
+ type: 'tip',
136
+ title: 'Doppel Opt In implementieren',
137
+ html: 'Der beste Weg, gefälschte E-Mails zu vermeiden, besteht darin, von den Nutzern zu verlangen, ihr Abonnement durch Klicken auf einen an ihren Posteingang gesendeten Link zu bestätigen. Dies garantiert, dass die E-Mail existiert und dass der Nutzer Zugriff darauf hat.',
138
+ },
139
+ ],
140
+ };
@@ -72,7 +72,7 @@ const ui: EmailListCleanerUI = {
72
72
  };
73
73
 
74
74
  export const content: ToolLocaleContent<EmailListCleanerUI> = {
75
- slug: 'nettoyeur-listes-emails',
75
+ slug: 'nettoyeur-listes-email',
76
76
  title: 'Nettoyeur de Listes d\'E-mails',
77
77
  description: 'Nettoyez vos listes d\'e-mails gratuitement. Supprimez les doublons, corrigez les espaces et validez les formats en quelques secondes. Économisez et améliorez votre délivrabilité.',
78
78
  ui,
@@ -0,0 +1,140 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { EmailListCleanerUI } from '../ui';
4
+
5
+ const faqData = [
6
+ {
7
+ question: 'Apa sebenarnya fungsi pembersih daftar email ini?',
8
+ answer: 'Alat ini menganalisis daftar email Anda, menghapus duplikasi, menghilangkan spasi yang tidak perlu, memvalidasi format dasar, dan menormalkan semua alamat menjadi huruf kecil untuk memastikan database yang bersih.',
9
+ },
10
+ {
11
+ question: 'Apakah ada batasan jumlah email?',
12
+ answer: 'Tidak ada batasan record yang ketat. Anda dapat memproses ribuan email secara instan dalam satu kali jalan. Satu-satunya kendala adalah memori browser Anda jika daftar tersebut sangat besar.',
13
+ },
14
+ {
15
+ question: 'Apakah aman menempelkan email saya di sini?',
16
+ answer: 'Tentu saja. Semua pemrosesan dilakukan secara lokal di browser Anda sendiri melalui JavaScript. Data Anda tidak pernah dikirim ke server kami atau disimpan di database eksternal mana pun.',
17
+ },
18
+ {
19
+ question: 'Bagaimana ini meningkatkan keterkiriman (deliverability) kampanye saya?',
20
+ answer: 'Dengan menghapus alamat yang tidak ada atau formatnya salah, Anda mengurangi rasio pentalan (bounce rate), yang meningkatkan reputasi domain Anda di mata penyedia seperti Gmail, Outlook, dan Yahoo.',
21
+ },
22
+ ];
23
+
24
+ const howToData = [
25
+ { name: 'Tempelkan email Anda', text: 'Salin daftar email Anda dan tempelkan ke dalam kotak teks. Email dapat dipisahkan oleh baris, koma, atau spasi.' },
26
+ { name: 'Bersihkan daftar', text: 'Klik tombol "Bersihkan Daftar" untuk memulai proses validasi dan penghapusan duplikat.' },
27
+ { name: 'Tinjau hasilnya', text: 'Periksa statistik yang menunjukkan email asli vs. hasil akhir dan tinjau daftar yang telah dibersihkan di panel bawah.' },
28
+ { name: 'Salin atau unduh', text: 'Salin hasilnya langsung ke papan klip atau unduh sebagai berkas .txt yang siap digunakan.' },
29
+ ];
30
+
31
+ const faqSchema: WithContext<FAQPage> = {
32
+ '@context': 'https://schema.org',
33
+ '@type': 'FAQPage',
34
+ mainEntity: faqData.map((item) => ({
35
+ '@type': 'Question',
36
+ name: item.question,
37
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
38
+ })),
39
+ };
40
+
41
+ const howToSchema: WithContext<HowTo> = {
42
+ '@context': 'https://schema.org',
43
+ '@type': 'HowTo',
44
+ name: 'Cara membersihkan daftar email',
45
+ step: howToData.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
46
+ };
47
+
48
+ const appSchema: WithContext<SoftwareApplication> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'SoftwareApplication',
51
+ name: 'Pembersih Daftar Email',
52
+ applicationCategory: 'UtilitiesApplication',
53
+ operatingSystem: 'Web',
54
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
55
+ description: 'Hapus duplikat, perbaiki spasi, dan validasi format dalam daftar email Anda. Alat gratis tanpa batasan record.',
56
+ };
57
+
58
+ const ui: EmailListCleanerUI = {
59
+ inputLabel: 'Daftar email',
60
+ inputPlaceholder: 'Tempelkan daftar email Anda di sini (dipisahkan baris, koma, atau spasi)...',
61
+ cleanBtn: 'Bersihkan Daftar',
62
+ clearBtn: 'Hapus Semua',
63
+ statsOriginal: 'Asli',
64
+ statsRemoved: 'Dihapus',
65
+ statsFinal: 'Bersih',
66
+ resultLabel: 'Hasil Bersih',
67
+ copyBtn: 'Salin Daftar',
68
+ copyDone: 'Disalin!',
69
+ downloadBtn: 'Unduh .txt',
70
+ registered: 'terdaftar',
71
+ downloadFilename: 'email-bersih',
72
+ };
73
+
74
+ export const content: ToolLocaleContent<EmailListCleanerUI> = {
75
+ slug: 'pembersih-daftar-email',
76
+ title: 'Pembersih Daftar Email',
77
+ description: 'Bersihkan daftar email secara gratis. Hapus duplikat, perbaiki spasi, dan validasi format dalam hitungan detik. Hemat biaya dan tingkatkan keterkiriman Anda.',
78
+ ui,
79
+ faqTitle: 'Pertanyaan yang Sering Diajukan',
80
+ faq: faqData,
81
+ howTo: howToData,
82
+ bibliographyTitle: 'Referensi',
83
+ bibliography: [
84
+ { name: 'RFC 5322: Internet Message Format', url: 'https://datatracker.ietf.org/doc/html/rfc5322' },
85
+ { name: 'Google: Pedoman pengirim email', url: 'https://support.google.com/a/answer/81126' },
86
+ { name: 'Wikipedia: Email spam', url: 'https://id.wikipedia.org/wiki/Spam_elektronik' },
87
+ ],
88
+ schemas: [faqSchema, howToSchema, appSchema],
89
+ seo: [
90
+ { type: 'title', level: 2, text: 'Mengapa menggunakan pembersih daftar email sangat penting?' },
91
+ {
92
+ type: 'paragraph',
93
+ html: 'Dalam dunia pemasaran digital, kualitas database Anda jauh lebih penting daripada ukurannya. Memiliki daftar 50.000 email tidak ada gunanya jika setengahnya adalah alamat yang tidak ada, mengandung kesalahan ketik, atau duplikat. Di sinilah <strong>pembersih daftar email</strong> menjadi sangat diperlukan.',
94
+ },
95
+ { type: 'title', level: 3, text: 'Risiko daftar email yang kotor' },
96
+ {
97
+ type: 'paragraph',
98
+ html: 'Menyimpan database yang tidak dibersihkan dapat memiliki konsekuensi serius. Mengirim email ke alamat yang tidak ada akan menghasilkan "hard bounce". Jika persentase ini melebihi 2-3%, filter spam akan mulai meneliti domain Anda dan Anda bisa berakhir di daftar hitam internasional.',
99
+ },
100
+ {
101
+ type: 'tip',
102
+ title: 'Tips ahli',
103
+ html: 'Jangan pernah membeli daftar email. Itu adalah cara tercepat untuk menghancurkan reputasi domain Anda. Bangun daftar Anda sendiri secara organik dan bersihkan setiap 3 hingga 6 bulan.',
104
+ },
105
+ { type: 'title', level: 3, text: 'Bagaimana alat kami mengoptimalkan database Anda' },
106
+ {
107
+ type: 'paragraph',
108
+ html: 'Utilitas gratis kami melakukan pembersihan database Anda secara menyeluruh dan cepat tanpa batasan record. Ini menjalankan beberapa tugas validasi kritis secara instan:',
109
+ },
110
+ {
111
+ type: 'list',
112
+ items: [
113
+ '<strong>Penghapusan duplikat:</strong> Pengguna yang sama tidak akan menerima email yang sama dua kali.',
114
+ '<strong>Koreksi spasi:</strong> Kami menghapus spasi yang tidak sengaja ada di awal atau akhir yang akan membatalkan pengiriman.',
115
+ '<strong>Validasi format:</strong> Kami menyaring entri yang tidak memiliki struktur email yang valid.',
116
+ '<strong>Normalisasi:</strong> Semuanya dikonversi ke huruf kecil untuk menghindari record ganda.',
117
+ ],
118
+ },
119
+ { type: 'title', level: 3, text: 'Kapan waktu yang tepat untuk membersihkan daftar Anda?' },
120
+ {
121
+ type: 'list',
122
+ items: [
123
+ 'Sebelum mengimpor kontak ke CRM baru atau platform pengiriman (Mailchimp, SendGrid, dll.).',
124
+ 'Jika Anda melihat rasio buka (open rate) Anda turun di bawah rata-rata biasanya.',
125
+ 'Setelah acara atau pameran dagang di mana Anda mengumpulkan data secara manual.',
126
+ 'Sebagai pemeliharaan preventif setiap kuartal untuk menjaga kesehatan domain.',
127
+ ],
128
+ },
129
+ { type: 'title', level: 3, text: 'Dampak pada pengembalian investasi (ROI)' },
130
+ {
131
+ type: 'paragraph',
132
+ html: 'Pemasaran email tetap menjadi salah satu saluran dengan ROI tertinggi, tetapi hanya jika pesan sampai ke kotak masuk. Dengan menggunakan <strong>pembersih email</strong>, Anda mengoptimalkan corong penjualan Anda dari sumbernya dan berhenti membayar platform untuk kontak yang tidak akan pernah melihat pesan Anda.',
133
+ },
134
+ {
135
+ type: 'tip',
136
+ title: 'Terapkan double opt in',
137
+ html: 'Cara terbaik untuk menghindari email palsu adalah dengan mewajibkan pengguna mengonfirmasi langganan mereka dengan mengklik tautan yang dikirim ke kotak masuk mereka. Ini menjamin email tersebut ada dan pengguna memiliki akses ke sana.',
138
+ },
139
+ ],
140
+ };