@jjlmoya/utils-pets 1.12.0 → 1.14.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 (57) hide show
  1. package/package.json +4 -2
  2. package/src/category/i18n/fr.ts +4 -4
  3. package/src/category/i18n/ru.ts +4 -4
  4. package/src/category/i18n/zh.ts +1 -1
  5. package/src/data.ts +1 -1
  6. package/src/layouts/PreviewLayout.astro +7 -1
  7. package/src/pages/[locale]/[slug].astro +29 -13
  8. package/src/tests/diacritics_density.test.ts +118 -0
  9. package/src/tests/inverted_punctuation.test.ts +84 -0
  10. package/src/tests/locale_completeness.test.ts +4 -14
  11. package/src/tests/no_en_dash.test.ts +70 -0
  12. package/src/tests/pagespeed_best_practices.test.ts +198 -0
  13. package/src/tests/script_density.test.ts +94 -0
  14. package/src/tests/shared-test-helpers.ts +56 -0
  15. package/src/tests/tool_exports.test.ts +34 -0
  16. package/src/tests/tool_validation.test.ts +2 -2
  17. package/src/tool/petAge/bibliography.astro +2 -10
  18. package/src/tool/petAge/bibliography.ts +6 -0
  19. package/src/tool/petAge/component.astro +1 -0
  20. package/src/tool/petAge/entry.ts +2 -0
  21. package/src/tool/petAge/i18n/de.ts +2 -7
  22. package/src/tool/petAge/i18n/en.ts +2 -7
  23. package/src/tool/petAge/i18n/es.ts +2 -7
  24. package/src/tool/petAge/i18n/fr.ts +4 -9
  25. package/src/tool/petAge/i18n/id.ts +2 -7
  26. package/src/tool/petAge/i18n/it.ts +2 -7
  27. package/src/tool/petAge/i18n/ja.ts +2 -7
  28. package/src/tool/petAge/i18n/ko.ts +2 -7
  29. package/src/tool/petAge/i18n/nl.ts +2 -7
  30. package/src/tool/petAge/i18n/pl.ts +2 -7
  31. package/src/tool/petAge/i18n/pt.ts +2 -7
  32. package/src/tool/petAge/i18n/ru.ts +9 -14
  33. package/src/tool/petAge/i18n/sv.ts +2 -7
  34. package/src/tool/petAge/i18n/tr.ts +2 -7
  35. package/src/tool/petAge/i18n/zh.ts +8 -13
  36. package/src/tool/petAge/seo.astro +2 -48
  37. package/src/tool/petRation/bibliography.astro +2 -10
  38. package/src/tool/petRation/bibliography.ts +6 -0
  39. package/src/tool/petRation/component.astro +2 -2
  40. package/src/tool/petRation/entry.ts +2 -0
  41. package/src/tool/petRation/i18n/de.ts +2 -7
  42. package/src/tool/petRation/i18n/en.ts +2 -7
  43. package/src/tool/petRation/i18n/es.ts +2 -7
  44. package/src/tool/petRation/i18n/fr.ts +8 -13
  45. package/src/tool/petRation/i18n/id.ts +2 -7
  46. package/src/tool/petRation/i18n/it.ts +2 -7
  47. package/src/tool/petRation/i18n/ja.ts +2 -7
  48. package/src/tool/petRation/i18n/ko.ts +3 -8
  49. package/src/tool/petRation/i18n/nl.ts +2 -7
  50. package/src/tool/petRation/i18n/pl.ts +2 -7
  51. package/src/tool/petRation/i18n/pt.ts +2 -7
  52. package/src/tool/petRation/i18n/ru.ts +8 -13
  53. package/src/tool/petRation/i18n/sv.ts +2 -7
  54. package/src/tool/petRation/i18n/tr.ts +5 -10
  55. package/src/tool/petRation/i18n/zh.ts +5 -10
  56. package/src/tool/petRation/seo.astro +2 -48
  57. 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 { 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',
@@ -92,7 +88,7 @@ const seo: PetRationLocaleContent['seo'] = [
92
88
  type: 'paragraph',
93
89
  html: '본 가이드 에서는 칼로리 계산 뒤에 숨겨진 과학적 근거 , 사료 라벨 을 해석 하는 방법 , 그리고 연령 , 활동 수준 , 생리학적 상태 가 매일 필요로 하는 사료 양 에 어떻게 구체적 으로 영향 을 미치 는지 설명 합니다 . 일일 급여량 의 작은 조절 이 당뇨병 , 관절 문제 , 심장 건강 을 예방 하는 데 얼마나 큰 차이 를 만드는지 이해 하도록 도와 드립니다 .',
94
90
  },
95
- { type: 'title', text: '계산 뒤 의 과학 : RER 과 DER 의 연관성 이해 하기', level: 3 },
91
+ { type: 'title', text: '계산 뒤 의 과학: RER 과 DER 의 연관성 이해 하기', level: 3 },
96
92
  {
97
93
  type: 'paragraph',
98
94
  html: '동물 이 매일 얼마나 먹어야 하는지 정확히 결정 하기 위해 수의사 와 영양학자 들 은 두 가지 핵심 개념 인 RER 과 DER 을 사용 합니다 . 이러한 약어 는 각각 Resting Energy Requirement ( 휴식기 에너지 요구량 ) 와 Daily Energy Requirement ( 일일 에너지 요구량 ) 를 의미 합니다 . 이들 의 상호작용 을 이해 하는 것 은 반려동물 의 체중 과 건강 을 안전 하고 통제 된 방식 으로 관리 하는 데 중요 합니다 .',
@@ -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
 
@@ -42,7 +43,7 @@ const ui: PetRationUI = {
42
43
  const faq: PetRationLocaleContent['faq'] = [
43
44
  {
44
45
  question: 'Что такое RER и почему это важно?',
45
- answer: 'RER (Resting Energy Requirement) это минимальное количество энергии, необходимое вашему питомцу для поддержания основных жизненных функций в состоянии покоя. Это научная основа для расчета дневного рациона, помогающая избежать недоедания или переедания. Точный расчет RER позволяет владельцам корректировать питание в зависимости от метаболических потребностей конкретного животного.',
46
+ answer: 'RER (Resting Energy Requirement) - это минимальное количество энергии, необходимое вашему питомцу для поддержания основных жизненных функций в состоянии покоя. Это научная основа для расчета дневного рациона, помогающая избежать недоедания или переедания. Точный расчет RER позволяет владельцам корректировать питание в зависимости от метаболических потребностей конкретного животного.',
46
47
  },
47
48
  {
48
49
  question: 'Как стерилизация влияет на рацион моего питомца?',
@@ -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',
@@ -79,14 +75,14 @@ const seo: PetRationLocaleContent['seo'] = [
79
75
  'DER получается путем умножения RER на коэффициент образа жизни и физиологического состояния животного.',
80
76
  'Кастрированной собаке или кошке требуется до 20% меньше калорий из-за снижения уровня половых гормонов.',
81
77
  'Ожирение затрагивает более 50% домашних животных в мире и значительно сокращает их ожидаемую продолжительность жизни.',
82
- 'Правильный расчет порции это форма превентивной медицины, доступная каждому владельцу.',
78
+ 'Правильный расчет порции - это форма превентивной медицины, доступная каждому владельцу.',
83
79
  'Использование качественных весов для взвешивания корма гарантирует точность соблюдения диеты.',
84
80
  ],
85
81
  },
86
82
  { type: 'title', text: 'Полное руководство по расчету дневного рациона вашего питомца для здоровья и долголетия', level: 2 },
87
83
  {
88
84
  type: 'paragraph',
89
- html: 'Правильное кормление собаки или кошки это значительно больше, чем просто наполнение их миски каждое утро. Питание является фундаментальным столпом их здоровья, физического долголетия и даже эмоционального благополучия. <strong>Калькулятор дневного рациона для домашних животных</strong> это важный инструмент для любого ответственного владельца, который хочет избежать двух самых распространенных проблем в современном ветеринарном питании: скрытого недоедания из-за нехватки нутриентов и, особенно, ожирения, которое поражает более половины домашних животных в развитых странах.',
85
+ html: 'Правильное кормление собаки или кошки - это значительно больше, чем просто наполнение их миски каждое утро. Питание является фундаментальным столпом их здоровья, физического долголетия и даже эмоционального благополучия. <strong>Калькулятор дневного рациона для домашних животных</strong> - это важный инструмент для любого ответственного владельца, который хочет избежать двух самых распространенных проблем в современном ветеринарном питании: скрытого недоедания из-за нехватки нутриентов и, особенно, ожирения, которое поражает более половины домашних животных в развитых странах.',
90
86
  },
91
87
  {
92
88
  type: 'paragraph',
@@ -127,16 +123,16 @@ const seo: PetRationLocaleContent['seo'] = [
127
123
  {
128
124
  type: 'tip',
129
125
  title: 'Важное примечание ветеринарного диетолога',
130
- html: 'Каждый питомец это уникальный организм со своим типом обмена веществ. Калькулятор предлагает надежную и научно обоснованную отправную точку, но вы всегда должны следить за реальной кондицией тела, прощупывая ребра вашего питомца. Если вы можете почувствовать их под небольшим слоем жира, не нажимая сильно, значит вес вашего друга находится в зоне нормы. Если ребра не прощупываются, пора снижать калорийность.',
126
+ html: 'Каждый питомец - это уникальный организм со своим типом обмена веществ. Калькулятор предлагает надежную и научно обоснованную отправную точку, но вы всегда должны следить за реальной кондицией тела, прощупывая ребра вашего питомца. Если вы можете почувствовать их под небольшим слоем жира, не нажимая сильно, значит вес вашего друга находится в зоне нормы. Если ребра не прощупываются, пора снижать калорийность.',
131
127
  },
132
128
  { type: 'title', text: 'Специфика питания кошек в сравнении с собаками', level: 3 },
133
129
  {
134
130
  type: 'paragraph',
135
- html: 'Кошки это облигатные хищники, их белковый метаболизм настроен на получение энергии в основном из животных протеинов. У собак обмен веществ более гибкий, но мы все равно должны быть крайне осторожны с избытком углеводов. И тем, и другим видам жизненно необходим строго контролируемый рацион, который позволяет избежать чрезмерной нагрузки на опорно-двигательный аппарат и сердечно-сосудистую систему, особенно в зрелом возрасте.',
131
+ html: 'Кошки - это облигатные хищники, их белковый метаболизм настроен на получение энергии в основном из животных протеинов. У собак обмен веществ более гибкий, но мы все равно должны быть крайне осторожны с избытком углеводов. И тем, и другим видам жизненно необходим строго контролируемый рацион, который позволяет избежать чрезмерной нагрузки на опорно-двигательный аппарат и сердечно-сосудистую систему, особенно в зрелом возрасте.',
136
132
  },
137
133
  {
138
134
  type: 'paragraph',
139
- html: 'Уделить несколько минут расчету точного рациона это, пожалуй, самая эффективная и дешевая форма профилактической медицины, доступная владельцам сегодня. Здоровый и стабильный вес радикально снижает риск развития сахарного диабета, хронической болезни почек и болезней суставов. Ваш ветеринар при каждом плановом визите может подтвердить правильность ваших расчетов, оценив индекс упитанности питомца.',
135
+ html: 'Уделить несколько минут расчету точного рациона - это, пожалуй, самая эффективная и дешевая форма профилактической медицины, доступная владельцам сегодня. Здоровый и стабильный вес радикально снижает риск развития сахарного диабета, хронической болезни почек и болезней суставов. Ваш ветеринар при каждом плановом визите может подтвердить правильность ваших расчетов, оценив индекс упитанности питомца.',
140
136
  },
141
137
  ];
142
138
 
@@ -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',
@@ -86,16 +82,16 @@ const seo: PetRationLocaleContent['seo'] = [
86
82
  { type: 'title', text: 'Evcil Hayvanınızın Sağlığı İçin Günlük Mama Hesaplama Rehberi', level: 2 },
87
83
  {
88
84
  type: 'paragraph',
89
- html: 'Bir köpeği veya kediyi doğru şekilde beslemek , sadece her sabah kasesini doldurmaktan çok daha fazlasıdır . Beslenme , evcil hayvanınızın sağlığının , uzun ömürlülüğünün ve duygusal refahının temel taşıdır . <strong>Evcil hayvan günlük mama hesaplayıcısı</strong> , modern veteriner hekimliğinde en sık karşılaşılan iki sorunu önlemek isteyen her sorumlu sahip için vazgeçilmez bir araçtır : besin eksikliği ve gelişmiş ülkelerdeki hayvanların yarısından fazlasını etkileyen obezite .',
85
+ html: 'Bir köpeği veya kediyi doğru şekilde beslemek , sadece her sabah kasesini doldurmaktan çok daha fazlasıdır . Beslenme , evcil hayvanınızın sağlığının , uzun ömürlülüğünün ve duygusal refahının temel taşıdır . <strong>Evcil hayvan günlük mama hesaplayıcısı</strong> , modern veteriner hekimliğinde en sık karşılaşılan iki sorunu önlemek isteyen her sorumlu sahip için vazgeçilmez bir araçtır: besin eksikliği ve gelişmiş ülkelerdeki hayvanların yarısından fazlasını etkileyen obezite .',
90
86
  },
91
87
  {
92
88
  type: 'paragraph',
93
89
  html: 'Bu kılavuzda , kalori hesaplamalarının arkasındaki bilimsel temelleri , mama etiketlerini nasıl yorumlayacağınızı ve yaş , aktivite seviyesi gibi faktörlerin günlük mama miktarını nasıl etkilediğini inceleyeceğiz . Günlük porsiyondaki küçük ayarlamaların diyabet , eklem sorunları ve kalp sağlığı üzerindeki büyük etkilerini anlamanıza yardımcı olacağız . Evcil hayvanınızın ideal kilosunu koruması , yaşam kalitesini doğrudan artıran en önemli faktördür .',
94
90
  },
95
- { type: 'title', text: 'Hesaplamaların Arkasındaki Bilim : RER ve DER İlişkisi', level: 3 },
91
+ { type: 'title', text: 'Hesaplamaların Arkasındaki Bilim: RER ve DER İlişkisi', level: 3 },
96
92
  {
97
93
  type: 'paragraph',
98
- html: 'Bir hayvanın günde ne kadar yemesi gerektiğini hassas bir şekilde belirlemek için veteriner hekimler ve beslenme uzmanları iki ana kavram kullanır : RER ve DER . Bu kısaltmalar sırasıyla Dinlenme Enerji Gereksinimi ve Günlük Enerji Gereksinimi anlamına gelir . Bunların birbiriyle nasıl etkileşime girdiğini anlamak , kilonun güvenli ve kontrollü bir şekilde yönetilmesi için kritik bir adımdır .',
94
+ html: 'Bir hayvanın günde ne kadar yemesi gerektiğini hassas bir şekilde belirlemek için veteriner hekimler ve beslenme uzmanları iki ana kavram kullanır: RER ve DER . Bu kısaltmalar sırasıyla Dinlenme Enerji Gereksinimi ve Günlük Enerji Gereksinimi anlamına gelir . Bunların birbiriyle nasıl etkileşime girdiğini anlamak , kilonun güvenli ve kontrollü bir şekilde yönetilmesi için kritik bir adımdır .',
99
95
  },
100
96
  {
101
97
  type: 'paragraph',
@@ -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
 
@@ -46,7 +47,7 @@ const faq: PetRationLocaleContent['faq'] = [
46
47
  },
47
48
  {
48
49
  question: '绝育对宠物的喂食量有什么影响?',
49
- answer: '绝育 后 的 动物 基础 代谢 通常 会 降低 约 15% 至 20% 。 为了 避免 体重 快速 增加 , 您 可能 需要 适当 减少 喂食 量 , 或者 在 计算器 中 将 活动 水平 调整 为 以 匹配 它们 的 总 消耗 。 绝育 后 激素 的 变化 会 影响 脂肪 的 代谢 模式 , 因此 此时 的 饮食 监测 显得 尤为 重要 。',
50
+ answer: '绝育 后 的 动物 基础 代谢 通常 会 降低 约 15% 至 20% 。 为了 避免 体重 快速 增加 , 您 可能 需要 适当 减少 喂食 量 , 或者 在 计算器 中 将 活动 水平 调整 为 \"\" 以 匹配 它们 的 总 消耗 。 绝育 后 激素 的 变化 会 影响 脂肪 的 代谢 模式 , 因此 此时 的 饮食 监测 显得 尤为 重要 。',
50
51
  },
51
52
  {
52
53
  question: '这个计算器可以给幼犬使用吗?',
@@ -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',
@@ -110,10 +106,10 @@ const seo: PetRationLocaleContent['seo'] = [
110
106
  { label: '高龄 老年 阶段 系数', value: 'x1.0 至 x1.4' },
111
107
  ],
112
108
  },
113
- { type: 'title', text: '如何 准确 提取 宠物 食品 中 的 代谢能 数值', level: 3 },
109
+ { type: 'title', text: '如何 准确 提取 宠物 食品 中 的 \" 代谢能 \" 数值', level: 3 },
114
110
  {
115
111
  type: 'paragraph',
116
- html: '为了 让 算法 算出 最为 准确 的 喂食 重量 , 您 需要 提供 粮食 的 <strong>热量 密度</strong> 。 这 通常 标注 在 保证 分析 典型 值 一栏 中 , 以 kcal/kg 为 单位 。 如果 包装 信息 缺失 , 请 务必 咨询 品牌 或 使用 本 手册 的 参考 均值 。 配合 厨房 秤 使用 , 您 就能 达到 精确 喂养 的 专业 级别 。',
112
+ html: '为了 让 算法 算出 最为 准确 的 喂食 重量 , 您 需要 提供 粮食 的 <strong>热量 密度</strong> 。 这 通常 标注 在 \" 保证 分析 \"\" 典型 值 \" 一栏 中 , 以 kcal/kg 为 单位 。 如果 包装 信息 缺失 , 请 务必 咨询 品牌 或 使用 本 手册 的 参考 均值 。 配合 厨房 秤 使用 , 您 就能 达到 精确 喂养 的 专业 级别 。',
117
113
  },
118
114
  {
119
115
  type: 'stats',
@@ -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,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 { petRation } 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 petRation.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 }} />}
package/src/types.ts CHANGED
@@ -29,9 +29,7 @@ export interface ToolLocaleContent<TUI extends Record<string, string> = Record<s
29
29
  description: string;
30
30
  ui: TUI;
31
31
  seo: SEOSection[];
32
- faqTitle?: string;
33
32
  faq: FAQItem[];
34
- bibliographyTitle?: string;
35
33
  bibliography: BibliographyEntry[];
36
34
  howTo: HowToStep[];
37
35
  schemas: WithContext<Thing>[];