@jjlmoya/utils-pets 1.11.0 → 1.13.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 (47) hide show
  1. package/package.json +1 -1
  2. package/src/pages/[locale]/[slug].astro +29 -13
  3. package/src/tests/locale_completeness.test.ts +4 -14
  4. package/src/tests/shared-test-helpers.ts +56 -0
  5. package/src/tests/tool_exports.test.ts +34 -0
  6. package/src/tests/tool_validation.test.ts +2 -2
  7. package/src/tool/petAge/bibliography.astro +2 -10
  8. package/src/tool/petAge/bibliography.ts +6 -0
  9. package/src/tool/petAge/entry.ts +2 -0
  10. package/src/tool/petAge/i18n/de.ts +2 -7
  11. package/src/tool/petAge/i18n/en.ts +2 -7
  12. package/src/tool/petAge/i18n/es.ts +2 -7
  13. package/src/tool/petAge/i18n/fr.ts +2 -7
  14. package/src/tool/petAge/i18n/id.ts +2 -7
  15. package/src/tool/petAge/i18n/it.ts +2 -7
  16. package/src/tool/petAge/i18n/ja.ts +2 -7
  17. package/src/tool/petAge/i18n/ko.ts +2 -7
  18. package/src/tool/petAge/i18n/nl.ts +2 -7
  19. package/src/tool/petAge/i18n/pl.ts +2 -7
  20. package/src/tool/petAge/i18n/pt.ts +2 -7
  21. package/src/tool/petAge/i18n/ru.ts +2 -7
  22. package/src/tool/petAge/i18n/sv.ts +2 -7
  23. package/src/tool/petAge/i18n/tr.ts +2 -7
  24. package/src/tool/petAge/i18n/zh.ts +2 -7
  25. package/src/tool/petAge/pet-age-calculator.css +15 -15
  26. package/src/tool/petAge/seo.astro +2 -48
  27. package/src/tool/petRation/bibliography.astro +2 -10
  28. package/src/tool/petRation/bibliography.ts +6 -0
  29. package/src/tool/petRation/entry.ts +2 -0
  30. package/src/tool/petRation/i18n/de.ts +2 -7
  31. package/src/tool/petRation/i18n/en.ts +2 -7
  32. package/src/tool/petRation/i18n/es.ts +2 -7
  33. package/src/tool/petRation/i18n/fr.ts +2 -7
  34. package/src/tool/petRation/i18n/id.ts +2 -7
  35. package/src/tool/petRation/i18n/it.ts +2 -7
  36. package/src/tool/petRation/i18n/ja.ts +2 -7
  37. package/src/tool/petRation/i18n/ko.ts +2 -7
  38. package/src/tool/petRation/i18n/nl.ts +2 -7
  39. package/src/tool/petRation/i18n/pl.ts +2 -7
  40. package/src/tool/petRation/i18n/pt.ts +2 -7
  41. package/src/tool/petRation/i18n/ru.ts +2 -7
  42. package/src/tool/petRation/i18n/sv.ts +2 -7
  43. package/src/tool/petRation/i18n/tr.ts +2 -7
  44. package/src/tool/petRation/i18n/zh.ts +2 -7
  45. package/src/tool/petRation/pet-daily-ration-calculator.css +16 -16
  46. package/src/tool/petRation/seo.astro +2 -48
  47. package/src/types.ts +0 -2
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, SoftwareApplication } from 'schema-dts';
2
3
  import type { PetAgeUI, PetAgeLocaleContent } from '../index';
3
4
 
@@ -66,11 +67,6 @@ const howTo: PetAgeLocaleContent['howTo'] = [
66
67
  { name: '分析生命阶段', text: '查看 结果 以 了解 您的 宠物 与 人类 相比 处于 幼年 、 青年 、 成年 还是 老年 阶段。' },
67
68
  ];
68
69
 
69
- const bibliography: PetAgeLocaleContent['bibliography'] = [
70
- { name: 'AAHA 犬猫老年护理指南手册', url: 'https://www.aaha.org/wp-content/uploads/globalassets/02-guidelines/2023-aaha-senior-care-guidelines-for-dogs-and-cats/resources/2023-aaha-senior-care-guidelines-for-dogs-and-cats.pdf' },
71
- { name: 'AKC:如何将狗的寿命换算为人类寿命', url: 'https://www.akc.org/expert-advice/health/how-to-calculate-dog-years-to-human-years/' },
72
- ];
73
-
74
70
  const seo: PetAgeLocaleContent['seo'] = [
75
71
  {
76
72
  type: 'summary',
@@ -180,9 +176,8 @@ export const content: PetAgeLocaleContent = {
180
176
  description,
181
177
  ui,
182
178
  seo,
183
- faqTitle: '常见问题',
179
+
184
180
  faq,
185
- bibliographyTitle: '参考文献',
186
181
  bibliography,
187
182
  howTo,
188
183
  schemas,
@@ -15,7 +15,7 @@
15
15
  min-height: 400px;
16
16
  }
17
17
 
18
- :global(.theme-dark) .pet-age-calculator {
18
+ .theme-dark .pet-age-calculator {
19
19
  background: var(--color-surface-dark, #1e293b);
20
20
  color: var(--color-text-dark, #e2e8f0);
21
21
  border-color: var(--color-border-dark, #334155);
@@ -39,7 +39,7 @@
39
39
  visibility 0.4s;
40
40
  }
41
41
 
42
- :global(.theme-dark) .age-loader {
42
+ .theme-dark .age-loader {
43
43
  background: var(--color-surface-dark, #1e293b);
44
44
  }
45
45
 
@@ -92,7 +92,7 @@
92
92
  border-bottom: none;
93
93
  }
94
94
 
95
- :global(.theme-dark) .age-section {
95
+ .theme-dark .age-section {
96
96
  border-bottom-color: var(--color-border-dark, #334155);
97
97
  }
98
98
 
@@ -108,7 +108,7 @@
108
108
  letter-spacing: 0.05em;
109
109
  }
110
110
 
111
- :global(.theme-dark) .age-section-title {
111
+ .theme-dark .age-section-title {
112
112
  color: var(--color-heading-dark, #f8fafc);
113
113
  }
114
114
 
@@ -161,7 +161,7 @@
161
161
  box-shadow: 0 0 0 4px rgba(245, 158, 11, 0.1);
162
162
  }
163
163
 
164
- :global(.theme-dark) .age-text-input {
164
+ .theme-dark .age-text-input {
165
165
  background: var(--color-btn-bg-dark, #0f172a);
166
166
  border-color: var(--color-btn-border-dark, #334155);
167
167
  color: var(--color-text-dark, #e2e8f0);
@@ -189,7 +189,7 @@
189
189
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
190
190
  }
191
191
 
192
- :global(.theme-dark) .pet-type-btn {
192
+ .theme-dark .pet-type-btn {
193
193
  background: var(--color-btn-bg-dark, #0f172a);
194
194
  border-color: var(--color-btn-border-dark, #334155);
195
195
  color: var(--color-text-dark, #e2e8f0);
@@ -203,7 +203,7 @@
203
203
  transform: translateY(-2px);
204
204
  }
205
205
 
206
- :global(.theme-dark) .pet-type-btn.active {
206
+ .theme-dark .pet-type-btn.active {
207
207
  background: var(--color-surface-elevated-dark, #1e293b);
208
208
  }
209
209
 
@@ -220,7 +220,7 @@
220
220
  border: 1px solid var(--color-btn-border, #e2e8f0);
221
221
  }
222
222
 
223
- :global(.theme-dark) .age-segmented {
223
+ .theme-dark .age-segmented {
224
224
  background: var(--color-btn-bg-dark, #0f172a);
225
225
  border-color: var(--color-btn-border-dark, #334155);
226
226
  }
@@ -284,7 +284,7 @@
284
284
  box-shadow: 0 0 0 4px rgba(239, 68, 68, 0.1);
285
285
  }
286
286
 
287
- :global(.theme-dark) .age-year-input {
287
+ .theme-dark .age-year-input {
288
288
  background: var(--color-btn-bg-dark, #0f172a);
289
289
  border-color: var(--color-btn-border-dark, #334155);
290
290
  color: var(--color-text-dark, #e2e8f0);
@@ -307,7 +307,7 @@
307
307
  box-shadow: 0 20px 40px -10px rgba(15, 23, 42, 0.3);
308
308
  }
309
309
 
310
- :global(.theme-dark) .age-results {
310
+ .theme-dark .age-results {
311
311
  background: var(--color-accent, #f59e0b);
312
312
  color: var(--color-results-text-dark, #0f172a);
313
313
  box-shadow: 0 20px 40px -10px rgba(245, 158, 11, 0.2);
@@ -328,7 +328,7 @@
328
328
  margin-bottom: 0.5rem;
329
329
  }
330
330
 
331
- :global(.theme-dark) .age-res-label {
331
+ .theme-dark .age-res-label {
332
332
  color: var(--color-results-bg, #0f172a);
333
333
  opacity: 0.7;
334
334
  }
@@ -355,7 +355,7 @@
355
355
  margin: 1.5rem 0;
356
356
  }
357
357
 
358
- :global(.theme-dark) .age-res-divider {
358
+ .theme-dark .age-res-divider {
359
359
  background: rgba(0, 0, 0, 0.1);
360
360
  }
361
361
 
@@ -378,7 +378,7 @@
378
378
  text-align: center;
379
379
  }
380
380
 
381
- :global(.theme-dark) .age-res-card {
381
+ .theme-dark .age-res-card {
382
382
  background: rgba(0, 0, 0, 0.1);
383
383
  border-color: rgba(0, 0, 0, 0.1);
384
384
  }
@@ -404,7 +404,7 @@
404
404
  border-top: 1px solid rgba(255, 255, 255, 0.1);
405
405
  }
406
406
 
407
- :global(.theme-dark) .age-res-footer {
407
+ .theme-dark .age-res-footer {
408
408
  border-top-color: rgba(0, 0, 0, 0.1);
409
409
  }
410
410
 
@@ -427,7 +427,7 @@
427
427
  background: rgba(255, 255, 255, 0.2);
428
428
  }
429
429
 
430
- :global(.theme-dark) .age-share-btn {
430
+ .theme-dark .age-share-btn {
431
431
  background: rgba(0, 0, 0, 0.15);
432
432
  border-color: rgba(0, 0, 0, 0.2);
433
433
  color: var(--color-results-bg, #0f172a);
@@ -1,16 +1,5 @@
1
1
  ---
2
- import {
3
- SEOTitle,
4
- SEOCard,
5
- SEOStats,
6
- SEOTip,
7
- SEOArticle,
8
- SEOTable,
9
- SEOProsCons,
10
- SEOSummary,
11
- SEOGlossary,
12
- SEODiagnostic,
13
- } from '@jjlmoya/utils-shared';
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
14
3
  import { petAge } from './index';
15
4
  import type { KnownLocale } from '../../types';
16
5
 
@@ -21,41 +10,6 @@ interface Props {
21
10
  const { locale = 'es' } = Astro.props;
22
11
  const content = await petAge.i18n[locale]?.();
23
12
  if (!content) return null;
24
-
25
- const { seo } = content;
26
13
  ---
27
14
 
28
- <SEOArticle>
29
- {seo.map((section: any) => {
30
- switch (section.type) {
31
- case 'summary':
32
- return <SEOSummary title={section.title} items={section.items} />;
33
- case 'title':
34
- return <SEOTitle title={section.text} level={section.level || 2} />;
35
- case 'paragraph':
36
- return <p set:html={section.html} />;
37
- case 'stats':
38
- return <SEOStats stats={section.items} columns={section.columns} />;
39
- case 'card':
40
- return <SEOCard title={section.title} icon={section.icon}><Fragment set:html={section.html} /></SEOCard>;
41
- case 'tip':
42
- return <SEOTip title={section.title}><Fragment set:html={section.html} /></SEOTip>;
43
- case 'table':
44
- return (
45
- <SEOTable headers={section.headers}>
46
- {section.rows.map((row: string[]) => (
47
- <tr>{row.map((cell: string) => <td set:html={cell} />)}</tr>
48
- ))}
49
- </SEOTable>
50
- );
51
- case 'proscons':
52
- return <SEOProsCons title={section.title} items={section.items} />;
53
- case 'diagnostic':
54
- return <SEODiagnostic title={section.title} icon={section.icon} type={section.variant} badge={section.badge}><Fragment set:html={section.html} /></SEODiagnostic>;
55
- case 'glossary':
56
- return <SEOGlossary items={section.items} />;
57
- default:
58
- return null;
59
- }
60
- })}
61
- </SEOArticle>
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -1,14 +1,6 @@
1
1
  ---
2
2
  import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
- import { petRation } from './index';
4
- import type { KnownLocale } from '../../types';
5
-
6
- interface Props {
7
- locale?: KnownLocale;
8
- }
9
-
10
- const { locale = 'es' } = Astro.props;
11
- const content = await petRation.i18n[locale]?.();
3
+ import { bibliography } from './bibliography';
12
4
  ---
13
5
 
14
- {content && <SharedBibliography links={content.bibliography} />}
6
+ <SharedBibliography links={bibliography} />
@@ -0,0 +1,6 @@
1
+ import type { BibliographyEntry } from '../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+ { name: 'WSAVA: Nutrition Toolkit and Calorie Recommendations', url: 'https://wsava.org/global-guidelines/global-nutrition-guidelines/' },
5
+ { name: 'FEDIAF: Nutritional Guidelines for Complete and Complementary Pet Food', url: 'https://fediaf.org/self-regulation/nutrition.html' },
6
+ ];
@@ -61,3 +61,5 @@ export const petRation: PetToolEntry<PetRationUI> = {
61
61
  zh: () => import('./i18n/zh').then((m) => m.content),
62
62
  },
63
63
  };
64
+
65
+ export { bibliography } from './bibliography';
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, SoftwareApplication } from 'schema-dts';
2
3
  import type { PetRationUI, PetRationLocaleContent } from '../index';
3
4
 
@@ -65,11 +66,6 @@ const howTo: PetRationLocaleContent['howTo'] = [
65
66
  { name: 'Kalorien des Futters pro kg eingeben', text: 'Suchen Sie auf der Futterverpackung nach dem genauen kcal/kg-Wert, damit die endgültige Ration in Gramm so präzise wie möglich für eine optimale Gesundheit berechnet wird.' },
66
67
  ];
67
68
 
68
- const bibliography: PetRationLocaleContent['bibliography'] = [
69
- { name: 'WSAVA: Nutrition Toolkit und Kalorienempfehlungen', url: 'https://wsava.org/global-guidelines/global-nutrition-guidelines/' },
70
- { name: 'FEDIAF: Ernährungsrichtlinien für Alleinfuttermittel und Ergänzungsfuttermittel für Heimtiere', url: 'https://fediaf.org/self-regulation/nutrition.html' },
71
- ];
72
-
73
69
  const seo: PetRationLocaleContent['seo'] = [
74
70
  {
75
71
  type: 'summary',
@@ -172,8 +168,7 @@ const schemas: PetRationLocaleContent['schemas'] = [
172
168
  ];
173
169
 
174
170
  export const content: PetRationLocaleContent = {
175
- faqTitle: 'Häufig gestellte Fragen',
176
- bibliographyTitle: 'Bibliographie',
171
+
177
172
  slug,
178
173
  title,
179
174
  description,
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, SoftwareApplication } from 'schema-dts';
2
3
  import type { PetRationUI, PetRationLocaleContent } from '../index';
3
4
 
@@ -65,11 +66,6 @@ const howTo: PetRationLocaleContent['howTo'] = [
65
66
  { name: 'Enter the food calories per kg', text: 'Look on the pet food packaging for the exact kcal/kg value so the final ration in grams is as precise as possible for optimal health.' },
66
67
  ];
67
68
 
68
- const bibliography: PetRationLocaleContent['bibliography'] = [
69
- { name: 'WSAVA: Nutrition Toolkit and Calorie Recommendations', url: 'https://wsava.org/global-guidelines/global-nutrition-guidelines/' },
70
- { name: 'FEDIAF: Nutritional Guidelines for Complete and Complementary Pet Food', url: 'https://fediaf.org/self-regulation/nutrition.html' },
71
- ];
72
-
73
69
  const seo: PetRationLocaleContent['seo'] = [
74
70
  {
75
71
  type: 'summary',
@@ -172,8 +168,7 @@ const schemas: PetRationLocaleContent['schemas'] = [
172
168
  ];
173
169
 
174
170
  export const content: PetRationLocaleContent = {
175
- faqTitle: 'Frequently Asked Questions',
176
- bibliographyTitle: 'Bibliography',
171
+
177
172
  slug,
178
173
  title,
179
174
  description,
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, SoftwareApplication } from 'schema-dts';
2
3
  import type { PetRationUI, PetRationLocaleContent } from '../index';
3
4
 
@@ -65,11 +66,6 @@ const howTo: PetRationLocaleContent['howTo'] = [
65
66
  { name: 'Introduce las calorías del alimento por kg', text: 'Busca en el envase del alimento para mascotas el valor exacto de kcal/kg para que la ración final en gramos sea lo más precisa posible para una salud óptima.' },
66
67
  ];
67
68
 
68
- const bibliography: PetRationLocaleContent['bibliography'] = [
69
- { name: 'WSAVA: Kit de herramientas de nutrición y recomendaciones calóricas', url: 'https://wsava.org/global-guidelines/global-nutrition-guidelines/' },
70
- { name: 'FEDIAF: Guía nutricional para alimentos completos y complementarios para mascotas', url: 'https://fediaf.org/self-regulation/nutrition.html' },
71
- ];
72
-
73
69
  const seo: PetRationLocaleContent['seo'] = [
74
70
  {
75
71
  type: 'summary',
@@ -172,8 +168,7 @@ const schemas: PetRationLocaleContent['schemas'] = [
172
168
  ];
173
169
 
174
170
  export const content: PetRationLocaleContent = {
175
- faqTitle: 'Preguntas Frecuentes',
176
- bibliographyTitle: 'Bibliografía',
171
+
177
172
  slug,
178
173
  title,
179
174
  description,
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, SoftwareApplication } from 'schema-dts';
2
3
  import type { PetRationUI, PetRationLocaleContent } from '../index';
3
4
 
@@ -65,11 +66,6 @@ const howTo: PetRationLocaleContent['howTo'] = [
65
66
  { name: 'Entrez les calories de la nourriture par kg', text: 'Regardez sur l\'emballage de la nourriture pour animaux la valeur exacte en kcal/kg afin que le calcul de la ration finale en grammes soit aussi précis que possible pour une santé optimale.' },
66
67
  ];
67
68
 
68
- const bibliography: PetRationLocaleContent['bibliography'] = [
69
- { name: 'WSAVA : Boîte à outils nutritionnelle et recommandations caloriques', url: 'https://wsava.org/global-guidelines/global-nutrition-guidelines/' },
70
- { name: 'FEDIAF : Directives nutritionnelles pour les aliments complets et complémentaires pour animaux de compagnie', url: 'https://fediaf.org/self-regulation/nutrition.html' },
71
- ];
72
-
73
69
  const seo: PetRationLocaleContent['seo'] = [
74
70
  {
75
71
  type: 'summary',
@@ -172,8 +168,7 @@ const schemas: PetRationLocaleContent['schemas'] = [
172
168
  ];
173
169
 
174
170
  export const content: PetRationLocaleContent = {
175
- faqTitle: 'Foire Aux Questions',
176
- bibliographyTitle: 'Bibliographie',
171
+
177
172
  slug,
178
173
  title,
179
174
  description,
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, SoftwareApplication } from 'schema-dts';
2
3
  import type { PetRationUI, PetRationLocaleContent } from '../index';
3
4
 
@@ -65,11 +66,6 @@ const howTo: PetRationLocaleContent['howTo'] = [
65
66
  { name: 'Masukkan kalori makanan per kg', text: 'Lihat pada kemasan makanan hewan untuk nilai kcal/kg yang tepat sehingga penghitungan ransum akhir dalam gram seakurat mungkin untuk kesehatan yang optimal.' },
66
67
  ];
67
68
 
68
- const bibliography: PetRationLocaleContent['bibliography'] = [
69
- { name: 'WSAVA: Toolkit Nutrisi dan Rekomendasi Kalori', url: 'https://wsava.org/global-guidelines/global-nutrition-guidelines/' },
70
- { name: 'FEDIAF: Pedoman Nutrisi untuk Makanan Hewan Peliharaan Lengkap dan Pelengkap', url: 'https://fediaf.org/self-regulation/nutrition.html' },
71
- ];
72
-
73
69
  const seo: PetRationLocaleContent['seo'] = [
74
70
  {
75
71
  type: 'summary',
@@ -172,8 +168,7 @@ const schemas: PetRationLocaleContent['schemas'] = [
172
168
  ];
173
169
 
174
170
  export const content: PetRationLocaleContent = {
175
- faqTitle: 'Pertanyaan yang Sering Diajukan',
176
- bibliographyTitle: 'Bibliografi',
171
+
177
172
  slug,
178
173
  title,
179
174
  description,
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, SoftwareApplication } from 'schema-dts';
2
3
  import type { PetRationUI, PetRationLocaleContent } from '../index';
3
4
 
@@ -65,11 +66,6 @@ const howTo: PetRationLocaleContent['howTo'] = [
65
66
  { name: 'Inserisci le calorie del cibo per kg', text: 'Cerca sulla confezione del cibo per animali il valore esatto di kcal/kg in modo che il calcolo della razione finale in grammi sia il più preciso possibile per una salute ottimale.' },
66
67
  ];
67
68
 
68
- const bibliography: PetRationLocaleContent['bibliography'] = [
69
- { name: 'WSAVA: Kit di strumenti nutrizionali e raccomandazioni caloriche', url: 'https://wsava.org/global-guidelines/global-nutrition-guidelines/' },
70
- { name: 'FEDIAF: Linee guida nutrizionali per alimenti completi e complementari per animali domestici', url: 'https://fediaf.org/self-regulation/nutrition.html' },
71
- ];
72
-
73
69
  const seo: PetRationLocaleContent['seo'] = [
74
70
  {
75
71
  type: 'summary',
@@ -172,8 +168,7 @@ const schemas: PetRationLocaleContent['schemas'] = [
172
168
  ];
173
169
 
174
170
  export const content: PetRationLocaleContent = {
175
- faqTitle: 'Domande Frequenti',
176
- bibliographyTitle: 'Bibliografia',
171
+
177
172
  slug,
178
173
  title,
179
174
  description,
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, SoftwareApplication } from 'schema-dts';
2
3
  import type { PetRationUI, PetRationLocaleContent } from '../index';
3
4
 
@@ -65,11 +66,6 @@ const howTo: PetRationLocaleContent['howTo'] = [
65
66
  { name: 'フード パッケージ の カロリー を 入力', text: 'フード の 袋 に 記載 されている kcal/kg の 数値 を 確認 して 入力 して ください。 この 数値 が 正確 で ある こと で、 グラム 単位 の 給餌 量 が 健康 に 最適 な 値 で 算出 されます。' },
66
67
  ];
67
68
 
68
- const bibliography: PetRationLocaleContent['bibliography'] = [
69
- { name: 'WSAVA: 栄養 ツールキット と カロリー 推奨 事項 ガイド', url: 'https://wsava.org/global-guidelines/global-nutrition-guidelines/' },
70
- { name: 'FEDIAF: 総合 および 補完 フード 用 栄養 ガイドライン 指針', url: 'https://fediaf.org/self-regulation/nutrition.html' },
71
- ];
72
-
73
69
  const seo: PetRationLocaleContent['seo'] = [
74
70
  {
75
71
  type: 'summary',
@@ -172,8 +168,7 @@ const schemas: PetRationLocaleContent['schemas'] = [
172
168
  ];
173
169
 
174
170
  export const content: PetRationLocaleContent = {
175
- faqTitle: 'よく ある 質問 ( FAQ )',
176
- bibliographyTitle: '関連 参考文献',
171
+
177
172
  slug,
178
173
  title,
179
174
  description,
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, SoftwareApplication } from 'schema-dts';
2
3
  import type { PetRationUI, PetRationLocaleContent } from '../index';
3
4
 
@@ -65,11 +66,6 @@ const howTo: PetRationLocaleContent['howTo'] = [
65
66
  { name: '사료 포장지 의 칼로리 입력', text: '사료 포장지 에 적힌 kcal/kg 수치 를 확인 하여 입력 하세요 . 이 정보 가 정확 해야 그람 ( g ) 단위 의 급여량 이 건강 에 최적화 된 값 으로 산출 됩니다 .' },
66
67
  ];
67
68
 
68
- const bibliography: PetRationLocaleContent['bibliography'] = [
69
- { name: 'WSAVA: 영양 툴킷 및 칼로리 권장 사항 가이드', url: 'https://wsava.org/global-guidelines/global-nutrition-guidelines/' },
70
- { name: 'FEDIAF: 완전 및 보완 사료 를 위한 영양 가이드라인 지침서', url: 'https://fediaf.org/self-regulation/nutrition.html' },
71
- ];
72
-
73
69
  const seo: PetRationLocaleContent['seo'] = [
74
70
  {
75
71
  type: 'summary',
@@ -172,8 +168,7 @@ const schemas: PetRationLocaleContent['schemas'] = [
172
168
  ];
173
169
 
174
170
  export const content: PetRationLocaleContent = {
175
- faqTitle: '자주 묻는 질문 (FAQ)',
176
- bibliographyTitle: '관련 참고 문헌',
171
+
177
172
  slug,
178
173
  title,
179
174
  description,
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, SoftwareApplication } from 'schema-dts';
2
3
  import type { PetRationUI, PetRationLocaleContent } from '../index';
3
4
 
@@ -65,11 +66,6 @@ const howTo: PetRationLocaleContent['howTo'] = [
65
66
  { name: 'Voer de calorieën van de voeding per kg in', text: 'Kijk op de verpakking van het huisdiervoer voor de exacte kcal/kg-waarde, zodat de uiteindelijke hoeveelheid in grammen zo precies mogelijk is voor een optimale gezondheid.' },
66
67
  ];
67
68
 
68
- const bibliography: PetRationLocaleContent['bibliography'] = [
69
- { name: 'WSAVA: Nutrition Toolkit en calorieaanbevelingen', url: 'https://wsava.org/global-guidelines/global-nutrition-guidelines/' },
70
- { name: 'FEDIAF: Voedingsrichtlijnen voor volledige en aanvullende diervoeders', url: 'https://fediaf.org/self-regulation/nutrition.html' },
71
- ];
72
-
73
69
  const seo: PetRationLocaleContent['seo'] = [
74
70
  {
75
71
  type: 'summary',
@@ -172,8 +168,7 @@ const schemas: PetRationLocaleContent['schemas'] = [
172
168
  ];
173
169
 
174
170
  export const content: PetRationLocaleContent = {
175
- faqTitle: 'Veelgestelde Vragen',
176
- bibliographyTitle: 'Bibliografie',
171
+
177
172
  slug,
178
173
  title,
179
174
  description,
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, SoftwareApplication } from 'schema-dts';
2
3
  import type { PetRationUI, PetRationLocaleContent } from '../index';
3
4
 
@@ -65,11 +66,6 @@ const howTo: PetRationLocaleContent['howTo'] = [
65
66
  { name: 'Wprowadź kaloryczność karmy na kg', text: 'Poszukaj na opakowaniu karmy dla zwierząt dokładnej wartości kcal/kg, aby końcowa racja w gramach była jak najbardziej precyzyjna dla optymalnego zdrowia.' },
66
67
  ];
67
68
 
68
- const bibliography: PetRationLocaleContent['bibliography'] = [
69
- { name: 'WSAVA: Zestaw narzędzi żywieniowych i rekomendacje kaloryczne', url: 'https://wsava.org/global-guidelines/global-nutrition-guidelines/' },
70
- { name: 'FEDIAF: Wytyczne żywieniowe dla pełnoporcjowych i uzupełniających karm dla zwierząt domowych', url: 'https://fediaf.org/self-regulation/nutrition.html' },
71
- ];
72
-
73
69
  const seo: PetRationLocaleContent['seo'] = [
74
70
  {
75
71
  type: 'summary',
@@ -172,8 +168,7 @@ const schemas: PetRationLocaleContent['schemas'] = [
172
168
  ];
173
169
 
174
170
  export const content: PetRationLocaleContent = {
175
- faqTitle: 'Często Zadawane Pytania',
176
- bibliographyTitle: 'Bibliografia',
171
+
177
172
  slug,
178
173
  title,
179
174
  description,
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, SoftwareApplication } from 'schema-dts';
2
3
  import type { PetRationUI, PetRationLocaleContent } from '../index';
3
4
 
@@ -65,11 +66,6 @@ const howTo: PetRationLocaleContent['howTo'] = [
65
66
  { name: 'Introduza as calorias do alimento por kg', text: 'Procure na embalagem do alimento para animais o valor exato de kcal/kg para que o cálculo da ração final em gramas seja o mais preciso possível para uma saúde óptima.' },
66
67
  ];
67
68
 
68
- const bibliography: PetRationLocaleContent['bibliography'] = [
69
- { name: 'WSAVA: Kit de ferramentas de nutrição e recomendações calóricas', url: 'https://wsava.org/global-guidelines/global-nutrition-guidelines/' },
70
- { name: 'FEDIAF: Diretrizes Nutricionais para Alimentos Completos e Complementares para Animais de Estimação', url: 'https://fediaf.org/self-regulation/nutrition.html' },
71
- ];
72
-
73
69
  const seo: PetRationLocaleContent['seo'] = [
74
70
  {
75
71
  type: 'summary',
@@ -172,8 +168,7 @@ const schemas: PetRationLocaleContent['schemas'] = [
172
168
  ];
173
169
 
174
170
  export const content: PetRationLocaleContent = {
175
- faqTitle: 'Perguntas Frequentes',
176
- bibliographyTitle: 'Bibliografia',
171
+
177
172
  slug,
178
173
  title,
179
174
  description,
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, SoftwareApplication } from 'schema-dts';
2
3
  import type { PetRationUI, PetRationLocaleContent } from '../index';
3
4
 
@@ -65,11 +66,6 @@ const howTo: PetRationLocaleContent['howTo'] = [
65
66
  { name: 'Введите калорийность корма', text: 'Найдите на упаковке корма значение ккал/кг или ккал/100г, чтобы расчет итоговой массы порции в граммах был максимально точным.' },
66
67
  ];
67
68
 
68
- const bibliography: PetRationLocaleContent['bibliography'] = [
69
- { name: 'WSAVA: Инструментарий по питанию и рекомендации по калориям', url: 'https://wsava.org/global-guidelines/global-nutrition-guidelines/' },
70
- { name: 'FEDIAF: Руководство по питанию для полнорационных и дополнительных кормов', url: 'https://fediaf.org/self-regulation/nutrition.html' },
71
- ];
72
-
73
69
  const seo: PetRationLocaleContent['seo'] = [
74
70
  {
75
71
  type: 'summary',
@@ -172,8 +168,7 @@ const schemas: PetRationLocaleContent['schemas'] = [
172
168
  ];
173
169
 
174
170
  export const content: PetRationLocaleContent = {
175
- faqTitle: 'Часто задаваемые вопросы',
176
- bibliographyTitle: 'Библиография',
171
+
177
172
  slug,
178
173
  title,
179
174
  description,
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, SoftwareApplication } from 'schema-dts';
2
3
  import type { PetRationUI, PetRationLocaleContent } from '../index';
3
4
 
@@ -65,11 +66,6 @@ const howTo: PetRationLocaleContent['howTo'] = [
65
66
  { name: 'Ange fodrets energiinnehåll', text: 'Titta på foderförpackningen för det exakta kcal/kg-värdet så att den slutgiltiga ransonen i gram blir så precis som möjligt för optimal hälsa.' },
66
67
  ];
67
68
 
68
- const bibliography: PetRationLocaleContent['bibliography'] = [
69
- { name: 'WSAVA: Nutrition Toolkit and Calorie Recommendations', url: 'https://wsava.org/global-guidelines/global-nutrition-guidelines/' },
70
- { name: 'FEDIAF: Nutritional Guidelines for Complete and Complementary Pet Food', url: 'https://fediaf.org/self-regulation/nutrition.html' },
71
- ];
72
-
73
69
  const seo: PetRationLocaleContent['seo'] = [
74
70
  {
75
71
  type: 'summary',
@@ -172,8 +168,7 @@ const schemas: PetRationLocaleContent['schemas'] = [
172
168
  ];
173
169
 
174
170
  export const content: PetRationLocaleContent = {
175
- faqTitle: 'Vanliga Frågor',
176
- bibliographyTitle: 'Bibliografi',
171
+
177
172
  slug,
178
173
  title,
179
174
  description,
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, SoftwareApplication } from 'schema-dts';
2
3
  import type { PetRationUI, PetRationLocaleContent } from '../index';
3
4
 
@@ -65,11 +66,6 @@ const howTo: PetRationLocaleContent['howTo'] = [
65
66
  { name: 'Mamanın Kalorisini Girin', text: 'Mama paketinin üzerindeki kcal/kg değerini bulun ve girin . Bu sayede gram cinsinden sonuç en doğru şekilde hesaplanarak evcil hayvanınızın sağlığını korumaya yardımcı olur .' },
66
67
  ];
67
68
 
68
- const bibliography: PetRationLocaleContent['bibliography'] = [
69
- { name: 'WSAVA: Beslenme Araç Seti ve Kalori Önerileri Rehberi', url: 'https://wsava.org/global-guidelines/global-nutrition-guidelines/' },
70
- { name: 'FEDIAF: Tam ve Tamamlayıcı Evcil Hayvan Mamaları İçin Beslenme Kılavuzları', url: 'https://fediaf.org/self-regulation/nutrition.html' },
71
- ];
72
-
73
69
  const seo: PetRationLocaleContent['seo'] = [
74
70
  {
75
71
  type: 'summary',
@@ -172,8 +168,7 @@ const schemas: PetRationLocaleContent['schemas'] = [
172
168
  ];
173
169
 
174
170
  export const content: PetRationLocaleContent = {
175
- faqTitle: 'Sıkça Sorulan Sorular',
176
- bibliographyTitle: 'Bibliyografya',
171
+
177
172
  slug,
178
173
  title,
179
174
  description,
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, SoftwareApplication } from 'schema-dts';
2
3
  import type { PetRationUI, PetRationLocaleContent } from '../index';
3
4
 
@@ -65,11 +66,6 @@ const howTo: PetRationLocaleContent['howTo'] = [
65
66
  { name: '查阅 并 输入 粮袋 的 卡路里', text: '查阅 宠物 食品 包装 上 标注 的 kcal/kg 数值 后 输入 , 这样 计算器 就能 自动 算出 精确 到 克 的 每日 喂食 重量 。' },
66
67
  ];
67
68
 
68
- const bibliography: PetRationLocaleContent['bibliography'] = [
69
- { name: 'WSAVA: 动物 营养 工具包 和 卡路里 指南 书', url: 'https://wsava.org/global-guidelines/global-nutrition-guidelines/' },
70
- { name: 'FEDIAF: 全价 及 补充 宠物 食品 营养 标准 指南', url: 'https://fediaf.org/self-regulation/nutrition.html' },
71
- ];
72
-
73
69
  const seo: PetRationLocaleContent['seo'] = [
74
70
  {
75
71
  type: 'summary',
@@ -172,8 +168,7 @@ const schemas: PetRationLocaleContent['schemas'] = [
172
168
  ];
173
169
 
174
170
  export const content: PetRationLocaleContent = {
175
- faqTitle: '常见 问题 与 解答 ( FAQ )',
176
- bibliographyTitle: '更多 参考文献',
171
+
177
172
  slug,
178
173
  title,
179
174
  description,