@jjlmoya/utils-pets 1.29.0 โ†’ 1.30.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 (39) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +2 -1
  3. package/src/data.ts +2 -0
  4. package/src/entries.ts +4 -1
  5. package/src/index.ts +1 -0
  6. package/src/tests/i18n_coverage.test.ts +1 -1
  7. package/src/tests/locale_completeness.test.ts +1 -1
  8. package/src/tests/mfe_assets_contract.test.ts +54 -0
  9. package/src/tests/tool_validation.test.ts +3 -3
  10. package/src/tool/petCollarSizeCalculator/bibliography.astro +6 -0
  11. package/src/tool/petCollarSizeCalculator/bibliography.ts +12 -0
  12. package/src/tool/petCollarSizeCalculator/component.astro +65 -0
  13. package/src/tool/petCollarSizeCalculator/controller.ts +160 -0
  14. package/src/tool/petCollarSizeCalculator/dom-views.ts +111 -0
  15. package/src/tool/petCollarSizeCalculator/entry.ts +32 -0
  16. package/src/tool/petCollarSizeCalculator/evaluator.ts +18 -0
  17. package/src/tool/petCollarSizeCalculator/i18n/de.ts +44 -0
  18. package/src/tool/petCollarSizeCalculator/i18n/en.ts +153 -0
  19. package/src/tool/petCollarSizeCalculator/i18n/es.ts +44 -0
  20. package/src/tool/petCollarSizeCalculator/i18n/fr.ts +44 -0
  21. package/src/tool/petCollarSizeCalculator/i18n/id.ts +44 -0
  22. package/src/tool/petCollarSizeCalculator/i18n/it.ts +44 -0
  23. package/src/tool/petCollarSizeCalculator/i18n/ja.ts +44 -0
  24. package/src/tool/petCollarSizeCalculator/i18n/ko.ts +44 -0
  25. package/src/tool/petCollarSizeCalculator/i18n/nl.ts +44 -0
  26. package/src/tool/petCollarSizeCalculator/i18n/pl.ts +44 -0
  27. package/src/tool/petCollarSizeCalculator/i18n/pt.ts +44 -0
  28. package/src/tool/petCollarSizeCalculator/i18n/ru.ts +44 -0
  29. package/src/tool/petCollarSizeCalculator/i18n/sv.ts +44 -0
  30. package/src/tool/petCollarSizeCalculator/i18n/tr.ts +44 -0
  31. package/src/tool/petCollarSizeCalculator/i18n/zh.ts +44 -0
  32. package/src/tool/petCollarSizeCalculator/index.ts +11 -0
  33. package/src/tool/petCollarSizeCalculator/logic.test.ts +63 -0
  34. package/src/tool/petCollarSizeCalculator/logic.ts +72 -0
  35. package/src/tool/petCollarSizeCalculator/pet-collar-size-calculator.css +631 -0
  36. package/src/tool/petCollarSizeCalculator/seo.astro +14 -0
  37. package/src/tool/petCollarSizeCalculator/storage.ts +29 -0
  38. package/src/tool/petCollarSizeCalculator/ui.ts +33 -0
  39. package/src/tools.ts +3 -0
@@ -0,0 +1,153 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
3
+ import type { PetCollarSizeCalculatorLocaleContent } from '../entry';
4
+ import type { PetCollarSizeCalculatorUI } from '../ui';
5
+
6
+ const slug = 'pet-collar-size-calculator';
7
+ const title = 'Pet Collar Size Calculator';
8
+ const description = 'Measure a pet neck, add breathing room, and find an adjustable collar range to check by hand.';
9
+
10
+ const ui: PetCollarSizeCalculatorUI = {
11
+ neckCircumferenceLabel: 'Neck circumference',
12
+ unitLabel: 'Display',
13
+ centimetres: 'Centimetres',
14
+ inches: 'Inches',
15
+ allowanceLabel: 'Breathing room',
16
+ collarTypeLabel: 'Collar type',
17
+ flatCollar: 'Flat',
18
+ breakawayCollar: 'Breakaway',
19
+ martingaleCollar: 'Martingale',
20
+ statusTight: 'Add more room',
21
+ statusBalanced: 'Ready to check',
22
+ statusLoose: 'Check security',
23
+ statusTightDetail: 'Add more room.',
24
+ statusBalancedDetail: 'Check this span by hand.',
25
+ statusLooseDetail: 'Check it cannot slip.',
26
+ fitStudyLabel: 'Collar fit study',
27
+ fitWindowLabel: 'Find this span',
28
+ measuredLabel: 'Measured neck',
29
+ roomLabel: 'Breathing room',
30
+ checkLabel: 'Hands-on check',
31
+ sceneAria: 'Collar fit study showing the neck ring and adjustable collar span',
32
+ neckMarker: 'neck',
33
+ easeMarker: 'room',
34
+ rangeMarker: 'collar span',
35
+ minimumMarker: 'start',
36
+ maximumMarker: 'end',
37
+ checkFlat: 'Comfortable, secure, no rubbing.',
38
+ checkBreakaway: 'Comfortable fit and correct release hardware.',
39
+ checkMartingale: 'The tightening loop must not choke.',
40
+ invalidInput: 'Enter a valid neck measurement and breathing room.',
41
+ };
42
+
43
+ const faq: PetCollarSizeCalculatorLocaleContent['faq'] = [
44
+ {
45
+ question: 'How do I measure a pet neck for a collar?',
46
+ answer: 'Use a flexible tape around the place where the collar will rest. Keep the tape level and close to the coat without compressing the neck. Record the circumference, then use the calculator to add the breathing room you want. Measure again if the animal moves, if the coat changes, or if the collar will sit in a different position.',
47
+ },
48
+ {
49
+ question: 'Why does the calculator return a range instead of one collar size?',
50
+ answer: 'Collars are adjustable and product size labels are not consistent between makers. The result adds your allowance to the measured neck and creates a small comparison span. Use it to filter product dimensions, then check the actual collar on the animal. The span is not a substitute for a physical fit test.',
51
+ },
52
+ {
53
+ question: 'What is a sensible comfort allowance?',
54
+ answer: 'There is no single allowance that fits every animal, coat, collar construction, or activity. The calculator starts at 2 cm so the first example is easy to read, but you can change it. Welfare guidance commonly describes a comfortable gap that allows a finger check without letting the collar slip. Treat the number as a planning input and confirm the result by hand.',
55
+ },
56
+ {
57
+ question: 'Does a martingale collar use a different formula?',
58
+ answer: 'The first size estimate still begins with the measured neck and selected allowance because the animal measurement does not change with the label on the collar. The important difference is the adjustment and use check: the tightening loop must not choke the animal, and the collar should be fitted by someone who understands the design if you are unsure.',
59
+ },
60
+ {
61
+ question: 'Can this calculator choose a collar for a puppy or kitten?',
62
+ answer: 'It can help you compare a current measurement, but a growing animal needs frequent rechecks. A collar that fits today may become tight quickly. Inspect the fit regularly, follow the manufacturer instructions, and get professional advice if there is rubbing, pain, coughing, breathing difficulty, or a risk of the collar catching.',
63
+ },
64
+ ];
65
+
66
+ const howTo: PetCollarSizeCalculatorLocaleContent['howTo'] = [
67
+ { name: 'Measure the neck', text: 'Wrap a flexible tape around the place where the collar will sit. Keep it flat, level, and close to the coat without pulling it tight.' },
68
+ { name: 'Choose the allowance', text: 'Enter the breathing room you want between the neck and collar. The 2 cm example is only a starting point, not a universal rule.' },
69
+ { name: 'Select the collar type', text: 'Choose flat, breakaway, or martingale so the final review reminds you of the hardware and adjustment check that belongs to that design.' },
70
+ { name: 'Compare the physical collar', text: 'Look for an adjustable span that covers the result, then place it on the calm animal and check comfort, security, movement, and the maker instructions.' },
71
+ ];
72
+
73
+ const seo: PetCollarSizeCalculatorLocaleContent['seo'] = [
74
+ {
75
+ type: 'summary',
76
+ title: 'Turn a neck measurement into a collar shopping range',
77
+ items: [
78
+ 'Measure the neck where the collar will actually sit.',
79
+ 'Add a visible comfort allowance instead of guessing from a breed label.',
80
+ 'Compare the result with the adjustable span of the product.',
81
+ 'Finish with a calm physical fit check and regular rechecks.',
82
+ ],
83
+ },
84
+ { type: 'title', text: 'What this pet collar calculator helps you decide', level: 2 },
85
+ {
86
+ type: 'paragraph',
87
+ html: 'A collar size chart can be difficult to use when an animal is between sizes, has a thick coat, or is growing quickly. This calculator starts with a measurement you own: the circumference around the neck where the collar will rest. It adds the comfort allowance you choose and returns a small starting span for shopping. That makes the decision more concrete than choosing small, medium, or large from a breed name alone. The unit switch changes the display while preserving the same physical measurement.',
88
+ },
89
+ {
90
+ type: 'paragraph',
91
+ html: 'The result is intentionally a range. Adjustable collars are not manufactured to one universal standard, and the usable length may be different from the headline size on a product page. Compare the result with the maker adjustment range, then check the collar on the animal. A collar can match the number and still be unsuitable because of a stiff edge, a buckle, a tightening loop, a thick coat, or a position that interferes with movement.',
92
+ },
93
+ { type: 'title', text: 'How to measure before you shop', level: 2 },
94
+ {
95
+ type: 'list',
96
+ items: [
97
+ 'Measure while the animal is calm and standing naturally.',
98
+ 'Keep a flexible tape level around the neck and do not compress the coat or skin.',
99
+ 'Repeat the measurement if the collar will sit higher or lower than your first attempt.',
100
+ 'For a young animal, write down the date and recheck the fit as it grows or its coat changes.',
101
+ ],
102
+ },
103
+ {
104
+ type: 'paragraph',
105
+ html: 'The comfort allowance is an explicit assumption rather than a hidden promise. The example begins at 2 cm because it gives a readable starting point, but the correct choice depends on the individual animal, the coat, the collar width, and how the collar is used. PDSA advises that a dog collar should be comfortable with space for two fingers between the collar and neck. That check is useful context, but it cannot be converted into one exact centimetre value for every pet. Use the calculator to make your assumption visible, then confirm it by hand.',
106
+ },
107
+ { type: 'title', text: 'Read the fitting rail', level: 2 },
108
+ {
109
+ type: 'table',
110
+ headers: ['Signal', 'What it means', 'What to do next'],
111
+ rows: [
112
+ ['Measured neck', 'The circumference you entered before adding ease.', 'Repeat the measurement if the tape was tight, tilted, or placed differently from the collar.'],
113
+ ['Start', 'The measured neck plus your chosen allowance.', 'Use it as the lower edge of the product adjustment span.'],
114
+ ['End', 'A 2 cm comparison window beyond the start.', 'Look for an adjustable collar that covers this window without forcing the hardware.'],
115
+ ['Fit review', 'A reading of the allowance you selected.', 'Use it as a prompt for a hands on check, not as a pass or fail certificate.'],
116
+ ],
117
+ },
118
+ { type: 'title', text: 'Collar type changes the final check', level: 2 },
119
+ {
120
+ type: 'paragraph',
121
+ html: 'A flat collar should be comfortable and secure without rubbing or pressing into the throat. A breakaway collar must be checked against the manufacturer instructions because its release hardware is part of the safety design. A martingale needs extra care: its tightening loop must be limited so it cannot choke the animal, and the person fitting it should understand how the two loops work. The calculator keeps the first measurement method consistent, then puts the type specific question beside the result.',
122
+ },
123
+ {
124
+ type: 'tip',
125
+ title: 'Do the quiet hands on check',
126
+ html: 'Put the collar on while the animal is calm. Check that the animal can move, breathe, eat, drink, and turn its head normally, and that the collar cannot slip over the head when it should stay on. Recheck after grooming, growth, weight change, wet fur, or a change of collar position. Remove it and seek qualified advice if there is pain, coughing, rubbing, distress, or restricted movement.',
127
+ },
128
+ ];
129
+
130
+ const schemas: PetCollarSizeCalculatorLocaleContent['schemas'] = [
131
+ {
132
+ '@context': 'https://schema.org',
133
+ '@type': 'SoftwareApplication',
134
+ name: title,
135
+ description,
136
+ applicationCategory: 'LifestyleApplication',
137
+ operatingSystem: 'Web',
138
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
139
+ } as WithContext<SoftwareApplication>,
140
+ {
141
+ '@context': 'https://schema.org',
142
+ '@type': 'FAQPage',
143
+ mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })),
144
+ } as WithContext<FAQPage>,
145
+ {
146
+ '@context': 'https://schema.org',
147
+ '@type': 'HowTo',
148
+ name: title,
149
+ step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })),
150
+ } as WithContext<HowTo>,
151
+ ];
152
+
153
+ export const content: PetCollarSizeCalculatorLocaleContent = { slug, title, description, ui, seo, faq, bibliography, howTo, schemas };
@@ -0,0 +1,44 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
3
+ import type { PetCollarSizeCalculatorLocaleContent } from '../entry';
4
+ import type { PetCollarSizeCalculatorUI } from '../ui';
5
+
6
+ const slug = 'calculadora-talla-collar-mascotas';
7
+ const title = 'Calculadora de talla de collar para mascotas';
8
+ const description = 'Mide el cuello, aรฑade espacio de comodidad y encuentra un rango de collar ajustable para comprobarlo a mano.';
9
+ const ui: PetCollarSizeCalculatorUI = {
10
+ neckCircumferenceLabel: 'Contorno del cuello', unitLabel: 'Mostrar', centimetres: 'Centรญmetros', inches: 'Pulgadas', allowanceLabel: 'Espacio de comodidad', collarTypeLabel: 'Tipo de collar', flatCollar: 'Plano', breakawayCollar: 'Antiescape', martingaleCollar: 'Martingale', statusTight: 'Aรฑade mรกs espacio', statusBalanced: 'Listo para comprobar', statusLoose: 'Comprueba la seguridad', statusTightDetail: 'Aรฑade mรกs espacio.', statusBalancedDetail: 'Comprueba este rango a mano.', statusLooseDetail: 'Comprueba que no pueda deslizarse.', fitStudyLabel: 'Estudio de ajuste del collar', fitWindowLabel: 'Busca este rango', measuredLabel: 'Cuello medido', roomLabel: 'Espacio de comodidad', checkLabel: 'Comprobaciรณn manual', sceneAria: 'Estudio de ajuste con el cรญrculo del cuello y el rango ajustable del collar', neckMarker: 'cuello', easeMarker: 'espacio', rangeMarker: 'rango del collar', minimumMarker: 'inicio', maximumMarker: 'final', checkFlat: 'Cรณmodo, seguro y sin rozaduras.', checkBreakaway: 'Comprueba el ajuste y el mecanismo de liberaciรณn.', checkMartingale: 'El lazo de tensiรณn no debe apretar el cuello.', invalidInput: 'Introduce un contorno de cuello y un espacio vรกlidos.',
11
+ };
12
+ const faq: PetCollarSizeCalculatorLocaleContent['faq'] = [
13
+ { question: 'ยฟCรณmo mido el cuello de mi mascota?', answer: 'Rodea con una cinta flexible el punto donde se apoyarรก el collar. Mantenla recta y cerca del pelo, sin comprimir la piel ni el manto. Repite la medida si cambia la posiciรณn del collar, el pelo o la postura del animal.' },
14
+ { question: 'ยฟPor quรฉ devuelve un rango y no una talla รบnica?', answer: 'Los collares ajustables tienen recorridos diferentes y las etiquetas de talla no son iguales entre fabricantes. La calculadora suma el espacio que eliges y crea un pequeรฑo rango para comparar productos. Despuรฉs debes probar el collar concreto sobre la mascota.' },
15
+ { question: 'ยฟCuรกnto espacio de comodidad debo aรฑadir?', answer: 'No existe una cifra universal. El pelo, la anchura del collar, el material y la actividad cambian el ajuste. Usa el valor como una hipรณtesis visible y confirma despuรฉs la comodidad y la seguridad con una revisiรณn manual tranquila.' },
16
+ { question: 'ยฟLa fรณrmula sirve para un collar martingale?', answer: 'La estimaciรณn inicial parte del mismo contorno de cuello. La revisiรณn final cambia: el lazo de tensiรณn debe estar limitado y nunca debe estrangular. Sigue las instrucciones del fabricante y pide ayuda si no conoces el mecanismo.' },
17
+ { question: 'ยฟPuedo usar el resultado con un cachorro o gatito?', answer: 'Sรญ, como una fotografรญa del ajuste actual. Los animales jรณvenes crecen y cambian de pelo, asรญ que debes repetir la medida con frecuencia y no dejar el collar puesto sin supervisiรณn si existe riesgo de que se enganche.' },
18
+ ];
19
+ const howTo: PetCollarSizeCalculatorLocaleContent['howTo'] = [
20
+ { name: 'Mide el cuello', text: 'Mide al animal tranquilo y de pie, justo donde se apoyarรก el collar. La cinta debe quedar plana y no apretar.' },
21
+ { name: 'Elige el espacio', text: 'Ajusta el espacio entre cuello y collar con el control visible. Los 2 cm iniciales son solo un ejemplo legible.' },
22
+ { name: 'Selecciona el tipo', text: 'Elige plano, antiescape o martingale para que el recordatorio final encaje con el mecanismo elegido.' },
23
+ { name: 'Compara la regulaciรณn', text: 'Busca un collar ajustable que cubra todo el rango y termina con una prueba fรญsica sobre el animal.' },
24
+ ];
25
+ const seo: PetCollarSizeCalculatorLocaleContent['seo'] = [
26
+ { type: 'summary', title: 'Convierte una medida en un rango de compra', items: ['Mide donde el collar se colocarรก de verdad.', 'Haz visible el espacio de comodidad en vez de adivinar por raza.', 'Compara el rango con la regulaciรณn real del producto.', 'Termina con una prueba tranquila sobre la mascota.'] },
27
+ { type: 'title', text: 'Quรฉ decisiรณn ayuda a tomar esta calculadora', level: 2 },
28
+ { type: 'paragraph', html: 'Las tablas de tallas confunden cuando una mascota queda entre dos medidas, tiene mucho pelo o todavรญa estรก creciendo. Esta herramienta comienza con un dato que puedes verificar: el contorno del cuello en el lugar donde descansarรก el collar. Despuรฉs suma el espacio de comodidad que tรบ eliges. El resultado no intenta adivinar una talla comercial como pequeรฑa, mediana o grande; crea un rango concreto para filtrar las medidas ajustables de los productos.' },
29
+ { type: 'paragraph', html: 'El rango es deliberadamente pequeรฑo porque sirve como punto de partida para comparar. Los collares ajustables no tienen una norma universal y la longitud รบtil puede no coincidir con el nombre de la talla de una tienda. Un producto entra en la selecciรณn cuando su recorrido cubre todo el rango. Aun asรญ, el nรบmero no confirma por sรญ solo que el borde, la hebilla, el pelo o el mecanismo sean adecuados.' },
30
+ { type: 'title', text: 'Cรณmo medir antes de comprar', level: 2 },
31
+ { type: 'list', items: ['Mide cuando el animal estรฉ tranquilo y de pie con naturalidad.', 'Mantรฉn la cinta nivelada y no comprimas el pelo ni la piel.', 'Repite la medida si el collar se colocarรก mรกs arriba o mรกs abajo.', 'En animales jรณvenes, anota la fecha y vuelve a comprobar el ajuste durante el crecimiento.'] },
32
+ { type: 'paragraph', html: 'El espacio de comodidad es una suposiciรณn explรญcita, no una garantรญa de seguridad. El valor correcto depende del animal, el manto, la anchura, el material y el uso. La comprobaciรณn de los dedos puede orientarte, pero no convierte una cifra en una regla para todos. Si observas rozaduras, tos, dolor, dificultad para respirar, angustia o movimiento limitado, retira el collar y consulta a un profesional.' },
33
+ { type: 'title', text: 'Lee el cรญrculo de ajuste', level: 2 },
34
+ { type: 'table', headers: ['Seรฑal', 'Quรฉ significa', 'Quรฉ hacer despuรฉs'], rows: [['Cuello medido', 'El contorno antes de aรฑadir espacio.', 'Repite la medida si la cinta estaba torcida o apretada.'], ['Inicio', 'El cuello mรกs el espacio elegido.', 'รšsalo como lรญmite inferior de la regulaciรณn.'], ['Final', 'Una ventana corta para comparar productos.', 'Busca una regulaciรณn que cubra toda la ventana.'], ['Revisiรณn', 'Un aviso relacionado con tu espacio elegido.', 'Confรญrmalo fรญsicamente sobre el animal.']] },
35
+ { type: 'title', text: 'El tipo de collar cambia la revisiรณn final', level: 2 },
36
+ { type: 'paragraph', html: 'Un collar plano se revisa por comodidad y seguridad, mientras que uno antiescape o martingale aรฑade una pregunta sobre su mecanismo. Comprueba los bordes, la hebilla, el pelo y cualquier lazo de tensiรณn. El nรบmero ayuda a filtrar productos, pero la decisiรณn final depende de la mascota tranquila y de las instrucciones del fabricante.' },
37
+ { type: 'tip', title: 'Haz una comprobaciรณn tranquila', html: 'Coloca el collar con la mascota calmada. Debe poder moverse, respirar, comer, beber y girar la cabeza sin roces. Comprueba tambiรฉn que no pueda salir por encima de la cabeza cuando deba permanecer puesto. Revisa el ajuste despuรฉs del cepillado, el crecimiento, un cambio de peso o un cambio de posiciรณn.' },
38
+ ];
39
+ const schemas: PetCollarSizeCalculatorLocaleContent['schemas'] = [
40
+ { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'LifestyleApplication', operatingSystem: 'Web', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' } } as WithContext<SoftwareApplication>,
41
+ { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>,
42
+ { '@context': 'https://schema.org', '@type': 'HowTo', name: title, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) } as WithContext<HowTo>,
43
+ ];
44
+ export const content: PetCollarSizeCalculatorLocaleContent = { slug, title, description, ui, seo, faq, bibliography, howTo, schemas };
@@ -0,0 +1,44 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
3
+ import type { PetCollarSizeCalculatorLocaleContent } from '../entry';
4
+ import type { PetCollarSizeCalculatorUI } from '../ui';
5
+
6
+ const slug = 'calculateur-taille-collier-animal';
7
+ const title = 'Calculateur de taille de collier pour animal';
8
+ const description = 'Mesurez le tour de cou, ajoutez une marge de confort et trouvez une plage de rรฉglage ร  vรฉrifier sur votre animal.';
9
+ const ui: PetCollarSizeCalculatorUI = {
10
+ neckCircumferenceLabel: 'Tour de cou', unitLabel: 'Afficher', centimetres: 'Centimรจtres', inches: 'Pouces', allowanceLabel: 'Marge de confort', collarTypeLabel: 'Type de collier', flatCollar: 'Classique', breakawayCollar: 'ร€ ouverture', martingaleCollar: 'Martingale', statusTight: 'Ajoutez de la marge', statusBalanced: 'Prรชt ร  vรฉrifier', statusLoose: 'Vรฉrifiez la sรฉcuritรฉ', statusTightDetail: 'Ajoutez de la marge.', statusBalancedDetail: 'Vรฉrifiez cette plage ร  la main.', statusLooseDetail: 'Vรฉrifiez qu il ne peut pas glisser.', fitStudyLabel: 'ร‰tude de rรฉglage du collier', fitWindowLabel: 'Trouvez cette plage', measuredLabel: 'Cou mesurรฉ', roomLabel: 'Marge de confort', checkLabel: 'Vรฉrification manuelle', sceneAria: 'ร‰tude de rรฉglage montrant le cercle du cou et la plage du collier', neckMarker: 'cou', easeMarker: 'marge', rangeMarker: 'plage du collier', minimumMarker: 'dรฉbut', maximumMarker: 'fin', checkFlat: 'Confortable, sรปr et sans frottement.', checkBreakaway: 'Vรฉrifiez le confort et le mรฉcanisme d ouverture.', checkMartingale: 'La boucle de serrage ne doit pas comprimer le cou.', invalidInput: 'Saisissez un tour de cou et une marge valides.',
11
+ };
12
+ const faq: PetCollarSizeCalculatorLocaleContent['faq'] = [
13
+ { question: 'Comment mesurer le cou de mon animal ?', answer: 'Placez un mรจtre souple autour de l endroit oรน le collier reposera. Gardez-le horizontal et proche du pelage sans serrer la peau. Recommencez si la position du collier, le pelage ou la posture de l animal change.' },
14
+ { question: 'Pourquoi obtenir une plage plutรดt qu une taille ?', answer: 'Les colliers rรฉglables ont des courses diffรฉrentes et les tailles ne sont pas normalisรฉes entre fabricants. Le calcul ajoute la marge choisie et produit une petite plage de comparaison. Le collier rรฉel doit ensuite รชtre essayรฉ sur l animal.' },
15
+ { question: 'Quelle marge de confort choisir ?', answer: 'Il n existe pas une valeur universelle. Le pelage, la largeur, la matiรจre et l activitรฉ changent le rรฉglage. Utilisez le nombre comme une hypothรจse visible, puis confirmez le confort et la sรฉcuritรฉ par une vรฉrification calme.' },
16
+ { question: 'Le calcul convient-il ร  un collier martingale ?', answer: 'La premiรจre estimation utilise le mรชme tour de cou. Le contrรดle final est diffรฉrent: la boucle de serrage doit รชtre limitรฉe et ne jamais รฉtrangler. Suivez la notice du fabricant si le mรฉcanisme vous est inconnu.' },
17
+ { question: 'Puis-je utiliser le rรฉsultat pour un jeune animal ?', answer: 'Oui, comme une photographie du rรฉglage actuel. Un jeune animal grandit et son pelage change, donc la mesure doit รชtre rรฉpรฉtรฉe rรฉguliรจrement et contrรดlรฉe avec attention.' },
18
+ ];
19
+ const howTo: PetCollarSizeCalculatorLocaleContent['howTo'] = [
20
+ { name: 'Mesurer le cou', text: 'Mesurez l animal calme et debout, ร  l endroit oรน le collier sera posรฉ. Le mรจtre doit rester plat et souple.' },
21
+ { name: 'Choisir la marge', text: 'Rรฉglez l espace entre le cou et le collier avec le contrรดle visible. Les 2 cm initiaux sont seulement un exemple.' },
22
+ { name: 'Choisir le type', text: 'Sรฉlectionnez classique, ร  ouverture ou martingale afin d obtenir le rappel adaptรฉ au mรฉcanisme.' },
23
+ { name: 'Comparer le rรฉglage', text: 'Cherchez un collier dont la plage rรฉglable couvre tout le rรฉsultat, puis faites l essai physique.' },
24
+ ];
25
+ const seo: PetCollarSizeCalculatorLocaleContent['seo'] = [
26
+ { type: 'summary', title: 'Transformer une mesure en plage d achat', items: ['Mesurez ร  l endroit oรน le collier sera rรฉellement placรฉ.', 'Rendez la marge de confort visible au lieu de deviner selon la race.', 'Comparez le rรฉsultat avec la plage de rรฉglage du produit.', 'Terminez par un contrรดle calme sur l animal.'] },
27
+ { type: 'title', text: 'La dรฉcision aidรฉe par ce calculateur', level: 2 },
28
+ { type: 'paragraph', html: 'Les tableaux de tailles deviennent imprรฉcis lorsqu un animal se trouve entre deux mesures, possรจde un pelage รฉpais ou grandit encore. Cet outil part d une donnรฉe vรฉrifiable: le tour de cou ร  l endroit oรน le collier reposera. Vous ajoutez ensuite la marge de confort souhaitรฉe. Le rรฉsultat n essaie pas de choisir une รฉtiquette commerciale comme petit, moyen ou grand ; il crรฉe une plage concrรจte ร  comparer avec les dimensions rรฉglables du produit.' },
29
+ { type: 'paragraph', html: 'La plage reste volontairement courte pour servir de repรจre d achat. Les colliers rรฉglables ne suivent pas une norme mondiale et la longueur utile peut diffรฉrer du nom affichรฉ par une boutique. Un produit entre dans la sรฉlection quand son rรฉglage couvre toute la plage. Le chiffre ne suffit pourtant pas ร  valider une bordure, une boucle, un pelage ou un mรฉcanisme particulier.' },
30
+ { type: 'title', text: 'Mesurer avant l achat', level: 2 },
31
+ { type: 'list', items: ['Mesurez lorsque l animal est calme et debout naturellement.', 'Gardez le mรจtre droit sans comprimer le poil ni la peau.', 'Recommencez si le collier doit รชtre posรฉ plus haut ou plus bas.', 'Pour un jeune animal, notez la date et vรฉrifiez rรฉguliรจrement pendant la croissance.'] },
32
+ { type: 'paragraph', html: 'La marge de confort est une hypothรจse explicite, pas une garantie de sรฉcuritรฉ. La bonne valeur dรฉpend de l animal, du pelage, de la largeur, de la matiรจre et de l usage. Le contrรดle avec les doigts peut donner un repรจre, mais il ne transforme pas un nombre en rรจgle universelle. En cas de frottement, toux, douleur, gรชne respiratoire ou stress, retirez le collier et demandez un avis qualifiรฉ.' },
33
+ { type: 'title', text: 'Lire la roue de rรฉglage', level: 2 },
34
+ { type: 'table', headers: ['Signal', 'Signification', 'Suite'], rows: [['Cou mesurรฉ', 'Tour avant la marge.', 'Recommencer si le mรจtre รฉtait inclinรฉ ou serrรฉ.'], ['Dรฉbut', 'Cou plus marge choisie.', 'Repรจre infรฉrieur de la plage rรฉglable.'], ['Fin', 'Petite fenรชtre pour comparer.', 'Chercher un produit qui couvre toute la fenรชtre.'], ['Contrรดle', 'Rappel liรฉ ร  la marge choisie.', 'Confirmer sur l animal.']] },
35
+ { type: 'title', text: 'Le type de collier change le contrรดle final', level: 2 },
36
+ { type: 'paragraph', html: 'Un collier classique demande une vรฉrification du confort et de la sรฉcuritรฉ, tandis qu un modรจle ร  ouverture ou martingale ajoute une question sur son mรฉcanisme. Contrรดlez le bord, la boucle, le pelage et la boucle de serrage. Le nombre aide ร  filtrer les produits, mais la dรฉcision finale dรฉpend de l animal calme et de la notice du fabricant.' },
37
+ { type: 'tip', title: 'Faire un contrรดle calme', html: 'Posez le collier lorsque l animal est dรฉtendu. Il doit pouvoir bouger, respirer, manger, boire et tourner la tรชte sans frottement. Vรฉrifiez aussi qu il ne peut pas passer par-dessus la tรชte lorsqu il doit rester en place. Recommencez aprรจs le toilettage, la croissance ou un changement de poids.' },
38
+ ];
39
+ const schemas: PetCollarSizeCalculatorLocaleContent['schemas'] = [
40
+ { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'LifestyleApplication', operatingSystem: 'Web', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' } } as WithContext<SoftwareApplication>,
41
+ { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>,
42
+ { '@context': 'https://schema.org', '@type': 'HowTo', name: title, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) } as WithContext<HowTo>,
43
+ ];
44
+ export const content: PetCollarSizeCalculatorLocaleContent = { slug, title, description, ui, seo, faq, bibliography, howTo, schemas };
@@ -0,0 +1,44 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
3
+ import type { PetCollarSizeCalculatorLocaleContent } from '../entry';
4
+ import type { PetCollarSizeCalculatorUI } from '../ui';
5
+
6
+ const slug = 'kalkulator-ukuran-kalung-hewan';
7
+ const title = 'Kalkulator ukuran kalung hewan peliharaan';
8
+ const description = 'Ukur leher, tambahkan ruang nyaman, lalu temukan rentang kalung yang dapat disetel untuk diperiksa langsung.';
9
+ const ui: PetCollarSizeCalculatorUI = {
10
+ neckCircumferenceLabel: 'Lingkar leher', unitLabel: 'Tampilan', centimetres: 'Sentimeter', inches: 'Inci', allowanceLabel: 'Ruang nyaman', collarTypeLabel: 'Jenis kalung', flatCollar: 'Datar', breakawayCollar: 'Pengaman lepas', martingaleCollar: 'Martingale', statusTight: 'Tambahkan ruang', statusBalanced: 'Siap diperiksa', statusLoose: 'Periksa keamanan', statusTightDetail: 'Tambahkan ruang.', statusBalancedDetail: 'Periksa rentang ini dengan tangan.', statusLooseDetail: 'Pastikan tidak mudah terlepas.', fitStudyLabel: 'Studi kecocokan kalung', fitWindowLabel: 'Cari rentang ini', measuredLabel: 'Leher terukur', roomLabel: 'Ruang nyaman', checkLabel: 'Pemeriksaan langsung', sceneAria: 'Studi kecocokan yang menunjukkan lingkar leher dan rentang kalung yang dapat disetel', neckMarker: 'leher', easeMarker: 'ruang', rangeMarker: 'rentang kalung', minimumMarker: 'mulai', maximumMarker: 'akhir', checkFlat: 'Nyaman, aman, dan tidak menggesek.', checkBreakaway: 'Periksa kecocokan dan mekanisme pelepas.', checkMartingale: 'Lingkar pengencang tidak boleh menekan leher.', invalidInput: 'Masukkan lingkar leher dan ruang yang valid.',
11
+ };
12
+ const faq: PetCollarSizeCalculatorLocaleContent['faq'] = [
13
+ { question: 'Bagaimana mengukur leher hewan?', answer: 'Lingkarkan pita ukur yang lentur di tempat kalung akan berada. Jaga tetap rata dan dekat dengan bulu tanpa menekan kulit atau bulu. Ukur ulang jika posisi kalung, bulu, atau postur hewan berubah.' },
14
+ { question: 'Mengapa hasilnya berupa rentang?', answer: 'Kalung yang dapat disetel memiliki panjang berbeda dan label ukuran tidak sama antarprodusen. Kalkulator menambahkan ruang yang dipilih lalu membuat rentang kecil untuk perbandingan. Kalung sebenarnya tetap harus diperiksa pada hewan.' },
15
+ { question: 'Berapa ruang nyaman yang harus dipilih?', answer: 'Tidak ada satu nilai untuk semua hewan. Bulu, lebar, bahan, dan aktivitas memengaruhi kecocokan. Gunakan angka sebagai asumsi yang terlihat, lalu pastikan kenyamanan dan keamanan dengan pemeriksaan langsung yang tenang.' },
16
+ { question: 'Apakah ini berlaku untuk kalung martingale?', answer: 'Perkiraan awal memakai lingkar leher yang sama. Pemeriksaan akhirnya berbeda: lingkar pengencang harus dibatasi dan tidak boleh mencekik. Ikuti petunjuk produsen jika mekanismenya belum dikenal.' },
17
+ { question: 'Apakah hasil ini bisa digunakan untuk anak hewan?', answer: 'Bisa sebagai gambaran kecocokan saat ini. Hewan muda tumbuh dan bulunya berubah, jadi pengukuran harus diulang secara berkala dan diperiksa dengan cermat.' },
18
+ ];
19
+ const howTo: PetCollarSizeCalculatorLocaleContent['howTo'] = [
20
+ { name: 'Ukur leher', text: 'Ukur hewan yang tenang dan berdiri alami, di tempat kalung akan berada. Pita harus rata dan tidak menarik.' },
21
+ { name: 'Pilih ruang', text: 'Atur ruang antara leher dan kalung dengan penggeser yang terlihat. Contoh awal 2 cm bukan aturan universal.' },
22
+ { name: 'Pilih jenis', text: 'Pilih datar, pengaman lepas, atau martingale agar pengingat sesuai dengan mekanismenya.' },
23
+ { name: 'Bandingkan setelan', text: 'Cari kalung yang rentang setelannya mencakup seluruh hasil, lalu lakukan uji langsung pada hewan.' },
24
+ ];
25
+ const seo: PetCollarSizeCalculatorLocaleContent['seo'] = [
26
+ { type: 'summary', title: 'Dari ukuran ke rentang belanja', items: ['Ukur di tempat kalung benar-benar akan berada.', 'Tampilkan ruang nyaman alih-alih menebak dari ras.', 'Bandingkan hasil dengan rentang setelan produk.', 'Akhiri dengan pemeriksaan tenang pada hewan.'] },
27
+ { type: 'title', text: 'Keputusan yang dibantu kalkulator ini', level: 2 },
28
+ { type: 'paragraph', html: 'Tabel ukuran sering membingungkan saat hewan berada di antara dua ukuran, memiliki bulu tebal, atau masih tumbuh. Alat ini dimulai dari ukuran yang bisa Anda periksa: lingkar leher di tempat kalung akan beristirahat. Setelah itu Anda menambahkan ruang nyaman yang dipilih. Hasilnya tidak menebak label kecil, sedang, atau besar, tetapi membuat rentang konkret untuk dibandingkan dengan ukuran setelan produk.' },
29
+ { type: 'paragraph', html: 'Rentang dibuat singkat agar berguna sebagai titik awal belanja. Kalung yang dapat disetel tidak memiliki standar dunia yang sama, dan panjang yang dapat digunakan mungkin berbeda dari nama ukuran di toko. Produk masuk pilihan jika setelannya mencakup seluruh rentang. Angka ini tetap tidak membuktikan bahwa tepi, gesper, bulu, atau mekanismenya cocok.' },
30
+ { type: 'title', text: 'Cara mengukur sebelum membeli', level: 2 },
31
+ { type: 'list', items: ['Ukur saat hewan tenang dan berdiri alami.', 'Jaga pita tetap rata tanpa menekan bulu atau kulit.', 'Ukur ulang jika kalung akan berada lebih tinggi atau lebih rendah.', 'Untuk hewan muda, catat tanggal dan periksa kecocokan selama pertumbuhan.'] },
32
+ { type: 'paragraph', html: 'Ruang nyaman adalah asumsi yang terlihat, bukan jaminan keamanan. Nilai yang tepat bergantung pada hewan, bulu, lebar, bahan, dan penggunaan. Pemeriksaan dengan jari dapat membantu, tetapi angka tidak menjadi aturan bagi semua hewan. Jika ada gesekan, batuk, nyeri, sulit bernapas, stres, atau gerak terbatas, lepaskan kalung dan minta nasihat ahli.' },
33
+ { type: 'title', text: 'Baca lingkar kecocokan', level: 2 },
34
+ { type: 'table', headers: ['Sinyal', 'Arti', 'Langkah berikutnya'], rows: [['Leher terukur', 'Lingkar sebelum ruang ditambahkan.', 'Ukur ulang jika pita miring atau terlalu ketat.'], ['Mulai', 'Leher ditambah ruang pilihan.', 'Gunakan sebagai batas bawah setelan.'], ['Akhir', 'Jendela kecil untuk perbandingan.', 'Cari setelan yang mencakup seluruh jendela.'], ['Pemeriksaan', 'Pengingat terkait ruang pilihan.', 'Pastikan langsung pada hewan.']] },
35
+ { type: 'title', text: 'Jenis kalung mengubah pemeriksaan akhir', level: 2 },
36
+ { type: 'paragraph', html: 'Kalung datar memerlukan pemeriksaan kenyamanan dan keamanan, sedangkan model pengaman lepas atau martingale membutuhkan perhatian tambahan pada mekanismenya. Periksa tepi, gesper, bulu, dan lingkar pengencang. Angka membantu menyaring produk, tetapi keputusan akhir bergantung pada hewan yang tenang dan petunjuk produsen.' },
37
+ { type: 'tip', title: 'Lakukan pemeriksaan dengan tenang', html: 'Pasang kalung saat hewan santai. Hewan harus dapat bergerak, bernapas, makan, minum, dan memutar kepala tanpa gesekan. Periksa juga agar kalung tidak melewati kepala ketika harus tetap di tempat. Periksa kembali setelah grooming, tumbuh, berat berubah, atau posisi berganti.' },
38
+ ];
39
+ const schemas: PetCollarSizeCalculatorLocaleContent['schemas'] = [
40
+ { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'LifestyleApplication', operatingSystem: 'Web', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' } } as WithContext<SoftwareApplication>,
41
+ { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>,
42
+ { '@context': 'https://schema.org', '@type': 'HowTo', name: title, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) } as WithContext<HowTo>,
43
+ ];
44
+ export const content: PetCollarSizeCalculatorLocaleContent = { slug, title, description, ui, seo, faq, bibliography, howTo, schemas };
@@ -0,0 +1,44 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
3
+ import type { PetCollarSizeCalculatorLocaleContent } from '../entry';
4
+ import type { PetCollarSizeCalculatorUI } from '../ui';
5
+
6
+ const slug = 'calcolatore-taglia-collare-animale';
7
+ const title = 'Calcolatore della taglia del collare per animali';
8
+ const description = 'Misura il collo, aggiungi spazio di comfort e trova un intervallo regolabile da controllare manualmente.';
9
+ const ui: PetCollarSizeCalculatorUI = {
10
+ neckCircumferenceLabel: 'Circonferenza del collo', unitLabel: 'Mostra', centimetres: 'Centimetri', inches: 'Pollici', allowanceLabel: 'Spazio di comfort', collarTypeLabel: 'Tipo di collare', flatCollar: 'Classico', breakawayCollar: 'A sgancio', martingaleCollar: 'Martingala', statusTight: 'Aggiungi spazio', statusBalanced: 'Pronto da controllare', statusLoose: 'Controlla la sicurezza', statusTightDetail: 'Aggiungi spazio.', statusBalancedDetail: 'Controlla questo intervallo a mano.', statusLooseDetail: 'Controlla che non possa scivolare.', fitStudyLabel: 'Studio della vestibilitร ', fitWindowLabel: 'Trova questo intervallo', measuredLabel: 'Collo misurato', roomLabel: 'Spazio di comfort', checkLabel: 'Controllo manuale', sceneAria: 'Studio della vestibilitร  con anello del collo e intervallo regolabile', neckMarker: 'collo', easeMarker: 'spazio', rangeMarker: 'intervallo collare', minimumMarker: 'inizio', maximumMarker: 'fine', checkFlat: 'Comodo, sicuro e senza sfregamenti.', checkBreakaway: 'Controlla la vestibilitร  e il meccanismo di sgancio.', checkMartingale: 'Il passante di tensione non deve stringere il collo.', invalidInput: 'Inserisci una circonferenza e uno spazio validi.',
11
+ };
12
+ const faq: PetCollarSizeCalculatorLocaleContent['faq'] = [
13
+ { question: 'Come misuro il collo del mio animale?', answer: 'Avvolgi un metro flessibile nel punto in cui appoggerร  il collare. Tienilo diritto e vicino al pelo senza comprimere pelle o manto. Ripeti la misura se cambiano posizione, pelo o postura dell animale.' },
14
+ { question: 'Perchรฉ il calcolatore restituisce un intervallo?', answer: 'I collari regolabili hanno escursioni diverse e le taglie non sono uniformi tra produttori. Il calcolatore aggiunge lo spazio scelto e crea un piccolo intervallo di confronto. Poi devi provare il collare reale sull animale.' },
15
+ { question: 'Quanto spazio di comfort devo aggiungere?', answer: 'Non esiste un valore valido per tutti. Pelo, larghezza, materiale e attivitร  cambiano la vestibilitร . Usa il numero come ipotesi visibile e conferma comfort e sicurezza con un controllo manuale tranquillo.' },
16
+ { question: 'La formula vale anche per un collare a martingala?', answer: 'La prima stima parte dalla stessa circonferenza. Il controllo finale cambia: il passante di tensione deve essere limitato e non deve mai soffocare. Segui le istruzioni del produttore se il meccanismo non ti รจ familiare.' },
17
+ { question: 'Posso usare il risultato per un cucciolo?', answer: 'Sรฌ, come fotografia della vestibilitร  attuale. Un animale giovane cresce e cambia pelo, quindi la misura va ripetuta spesso e controllata con attenzione.' },
18
+ ];
19
+ const howTo: PetCollarSizeCalculatorLocaleContent['howTo'] = [
20
+ { name: 'Misura il collo', text: 'Misura l animale calmo e in piedi, nel punto in cui il collare sarร  appoggiato. Il metro deve restare piatto e morbido.' },
21
+ { name: 'Scegli lo spazio', text: 'Regola lo spazio tra collo e collare con il controllo visibile. I 2 cm iniziali sono solo un esempio.' },
22
+ { name: 'Scegli il tipo', text: 'Seleziona classico, a sgancio o martingala per ricevere il promemoria adatto al meccanismo.' },
23
+ { name: 'Confronta la regolazione', text: 'Cerca un collare che copra tutto l intervallo e termina con una prova fisica sull animale.' },
24
+ ];
25
+ const seo: PetCollarSizeCalculatorLocaleContent['seo'] = [
26
+ { type: 'summary', title: 'Dalla misura a un intervallo per l acquisto', items: ['Misura dove il collare verrร  davvero appoggiato.', 'Rendi visibile lo spazio di comfort invece di indovinare dalla razza.', 'Confronta l intervallo con la regolazione reale del prodotto.', 'Concludi con una prova calma sull animale.'] },
27
+ { type: 'title', text: 'La decisione che aiuta a prendere', level: 2 },
28
+ { type: 'paragraph', html: 'Le tabelle delle taglie diventano poco chiare quando un animale รจ tra due misure, ha molto pelo o sta crescendo. Questo strumento parte da un dato controllabile: la circonferenza del collo nel punto in cui il collare resterร . Poi aggiunge lo spazio di comfort che scegli. Il risultato non cerca di indovinare un etichetta commerciale come piccola, media o grande; crea un intervallo concreto da confrontare con la regolazione del prodotto.' },
29
+ { type: 'paragraph', html: 'L intervallo รจ breve di proposito e serve come riferimento per confrontare gli articoli. I collari regolabili non seguono una norma mondiale e la lunghezza utile puรฒ essere diversa dal nome della taglia mostrato in negozio. Un prodotto รจ adatto alla selezione quando la sua escursione copre tutto l intervallo. Il numero perรฒ non convalida bordi, fibbie, pelo o meccanismi particolari.' },
30
+ { type: 'title', text: 'Come misurare prima di comprare', level: 2 },
31
+ { type: 'list', items: ['Misura quando l animale รจ calmo e sta in piedi naturalmente.', 'Tieni il metro diritto senza comprimere pelo o pelle.', 'Ripeti se il collare dovrร  stare piรน in alto o piรน in basso.', 'Per un animale giovane, annota la data e ricontrolla spesso durante la crescita.'] },
32
+ { type: 'paragraph', html: 'Lo spazio di comfort รจ un ipotesi esplicita, non una garanzia di sicurezza. Il valore corretto dipende da animale, manto, larghezza, materiale e uso. Il controllo con le dita puรฒ dare un riferimento, ma non trasforma un numero in una regola universale. Se noti sfregamenti, tosse, dolore, difficoltร  respiratoria o stress, togli il collare e chiedi un parere qualificato.' },
33
+ { type: 'title', text: 'Leggi la ruota di vestibilitร ', level: 2 },
34
+ { type: 'table', headers: ['Segnale', 'Significato', 'Passo successivo'], rows: [['Collo misurato', 'Circonferenza prima dello spazio.', 'Ripeti se il metro era inclinato o stretto.'], ['Inizio', 'Collo piรน spazio scelto.', 'Usalo come limite inferiore della regolazione.'], ['Fine', 'Piccola finestra di confronto.', 'Cerca una regolazione che copra tutta la finestra.'], ['Controllo', 'Promemoria legato allo spazio scelto.', 'Conferma fisicamente sull animale.']] },
35
+ { type: 'title', text: 'Il tipo di collare cambia il controllo finale', level: 2 },
36
+ { type: 'paragraph', html: 'Un collare classico richiede una verifica di comfort e sicurezza, mentre un modello a sgancio o a martingala aggiunge una domanda sul meccanismo. Controlla bordi, fibbia, pelo e passanti. Il numero serve a filtrare i prodotti, ma la decisione finale dipende dall animale tranquillo e dalle istruzioni del produttore.' },
37
+ { type: 'tip', title: 'Fai un controllo tranquillo', html: 'Metti il collare quando l animale รจ rilassato. Deve poter muoversi, respirare, mangiare, bere e girare la testa senza sfregamenti. Controlla anche che non possa passare sopra la testa quando deve restare fermo. Ricontrolla dopo toelettatura, crescita, variazioni di peso o cambio di posizione.' },
38
+ ];
39
+ const schemas: PetCollarSizeCalculatorLocaleContent['schemas'] = [
40
+ { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'LifestyleApplication', operatingSystem: 'Web', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' } } as WithContext<SoftwareApplication>,
41
+ { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>,
42
+ { '@context': 'https://schema.org', '@type': 'HowTo', name: title, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) } as WithContext<HowTo>,
43
+ ];
44
+ export const content: PetCollarSizeCalculatorLocaleContent = { slug, title, description, ui, seo, faq, bibliography, howTo, schemas };
@@ -0,0 +1,44 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
3
+ import type { PetCollarSizeCalculatorLocaleContent } from '../entry';
4
+ import type { PetCollarSizeCalculatorUI } from '../ui';
5
+
6
+ const slug = 'pet-collar-size-calculator';
7
+ const title = 'ใƒšใƒƒใƒˆใฎ้ฆ–่ผชใ‚ตใ‚คใ‚บ่จˆ็ฎ—ๆฉŸ';
8
+ const description = '้ฆ–ๅ›žใ‚Šใ‚’ๆธฌใ‚Šใ€ใ‚†ใจใ‚Šใ‚’ๅŠ ใˆใฆใ€ๆ‰‹ใง็ขบ่ชใงใใ‚‹่ชฟๆ•ด็ฏ„ๅ›ฒใ‚’่ฆ‹ใคใ‘ใพใ™ใ€‚';
9
+ const ui: PetCollarSizeCalculatorUI = {
10
+ neckCircumferenceLabel: '้ฆ–ๅ›žใ‚Š', unitLabel: '่กจ็คบ', centimetres: 'ใ‚ปใƒณใƒใƒกใƒผใƒˆใƒซ', inches: 'ใ‚คใƒณใƒ', allowanceLabel: 'ใ‚†ใจใ‚Š', collarTypeLabel: '้ฆ–่ผชใฎ็จฎ้กž', flatCollar: '้€šๅธธ', breakawayCollar: 'ใ‚ปใƒผใƒ•ใƒ†ใ‚ฃ', martingaleCollar: 'ใƒžใƒผใƒใƒณใ‚ฒใƒผใƒซ', statusTight: 'ใ‚†ใจใ‚Šใ‚’ๅข—ใ‚„ใ™', statusBalanced: '็ขบ่ชใฎๆบ–ๅ‚™ๅฎŒไบ†', statusLoose: 'ๅฎ‰ๅ…จๆ€งใ‚’็ขบ่ช', statusTightDetail: 'ใ‚†ใจใ‚Šใ‚’ๅข—ใ‚„ใ—ใฆใใ ใ•ใ„ใ€‚', statusBalancedDetail: 'ใ“ใฎ็ฏ„ๅ›ฒใ‚’ๆ‰‹ใง็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚', statusLooseDetail: 'ๆŠœใ‘่ฝใกใชใ„ใ‹็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚', fitStudyLabel: '้ฆ–่ผชใƒ•ใ‚ฃใƒƒใƒˆ็ ”็ฉถ', fitWindowLabel: 'ใ“ใฎ็ฏ„ๅ›ฒใ‚’ๆŽขใ™', measuredLabel: 'ๆธฌๅฎšใ—ใŸ้ฆ–ๅ›žใ‚Š', roomLabel: 'ใ‚†ใจใ‚Š', checkLabel: 'ๆ‰‹ใง็ขบ่ช', sceneAria: '้ฆ–ใฎๅ††ใจ้ฆ–่ผชใฎ่ชฟๆ•ด็ฏ„ๅ›ฒใ‚’็คบใ™ใƒ•ใ‚ฃใƒƒใƒˆ็ ”็ฉถ', neckMarker: '้ฆ–', easeMarker: 'ใ‚†ใจใ‚Š', rangeMarker: '้ฆ–่ผชใฎ็ฏ„ๅ›ฒ', minimumMarker: '้–‹ๅง‹', maximumMarker: '็ต‚ไบ†', checkFlat: 'ๅฟซ้ฉใงๅฎ‰ๅ…จใ€ใ“ใ™ใ‚Œใพใ›ใ‚“ใ€‚', checkBreakaway: '่ฃ…็€ๆ„Ÿใจ่งฃ้™คๆฉŸๆง‹ใ‚’็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚', checkMartingale: '็ท ใ‚ไป˜ใ‘ใ‚‹่ผชใŒ้ฆ–ใ‚’ๅœง่ฟซใ—ใชใ„ใ‚ˆใ†ใซใ—ใฆใใ ใ•ใ„ใ€‚', invalidInput: 'ๆœ‰ๅŠนใช้ฆ–ๅ›žใ‚Šใจใ‚†ใจใ‚Šใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚',
11
+ };
12
+ const faq: PetCollarSizeCalculatorLocaleContent['faq'] = [
13
+ { question: 'ใƒšใƒƒใƒˆใฎ้ฆ–ๅ›žใ‚Šใฏใฉใ†ๆธฌใ‚Šใพใ™ใ‹๏ผŸ', answer: '้ฆ–่ผชใ‚’็€ใ‘ใ‚‹ไฝ็ฝฎใซๆŸ”ใ‚‰ใ‹ใ„ใƒกใ‚ธใƒฃใƒผใ‚’ๅ›žใ—ใพใ™ใ€‚็šฎ่†šใ‚„ๆฏ›ใ‚’ๆŠผใ—ใคใถใ•ใšใ€ๆฏ›ใฎ่ฟ‘ใใงๆฐดๅนณใซไฟใกใพใ™ใ€‚้ฆ–่ผชใฎไฝ็ฝฎใ€ๆฏ›ใฎ้‡ใ€ๅงฟๅ‹ขใŒๅค‰ใ‚ใฃใŸๅ ดๅˆใฏใ‚‚ใ†ไธ€ๅบฆๆธฌใฃใฆใใ ใ•ใ„ใ€‚' },
14
+ { question: 'ใชใœไธ€ใคใฎใ‚ตใ‚คใ‚บใงใฏใชใ็ฏ„ๅ›ฒใŒ่กจ็คบใ•ใ‚Œใพใ™ใ‹๏ผŸ', answer: '่ชฟๆ•ดๅผใฎ้ฆ–่ผชใฏใƒกใƒผใ‚ซใƒผใ”ใจใซ่ชฟๆ•ดๅน…ใŒ็•ฐใชใ‚Šใ€ใ‚ตใ‚คใ‚บ่กจ่จ˜ใ‚‚็ตฑไธ€ใ•ใ‚Œใฆใ„ใพใ›ใ‚“ใ€‚้ธใ‚“ใ ใ‚†ใจใ‚Šใ‚’ๅŠ ใˆใฆๆฏ”่ผƒ็”จใฎๅฐใ•ใช็ฏ„ๅ›ฒใ‚’ไฝœใ‚Šใพใ™ใ€‚ๆœ€ๅพŒใฏๅฎŸ้š›ใฎ้ฆ–่ผชใ‚’ใƒšใƒƒใƒˆใซ็€ใ‘ใฆ็ขบ่ชใ—ใพใ™ใ€‚' },
15
+ { question: 'ใ‚†ใจใ‚Šใฏใฉใ‚Œใใ‚‰ใ„ๅฟ…่ฆใงใ™ใ‹๏ผŸ', answer: 'ใ™ในใฆใฎใƒšใƒƒใƒˆใซๅŒใ˜ๅ€คใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚ๆฏ›ใ€้ฆ–่ผชใฎๅน…ใ€็ด ๆใ€ๆดปๅ‹•ใซใ‚ˆใฃใฆๅค‰ใ‚ใ‚Šใพใ™ใ€‚ๆ•ฐๅ€คใ‚’่ฆ‹ใˆใ‚‹ๅ‰ๆใจใ—ใฆไฝฟใ„ใ€่ฝใก็€ใ„ใŸ็Šถๆ…‹ใงๆ‰‹ใซใ‚ˆใ‚‹็ขบ่ชใ‚’่กŒใฃใฆใใ ใ•ใ„ใ€‚' },
16
+ { question: 'ใƒžใƒผใƒใƒณใ‚ฒใƒผใƒซ้ฆ–่ผชใซใ‚‚ไฝฟใˆใพใ™ใ‹๏ผŸ', answer: 'ๆœ€ๅˆใฎ็›ฎๅฎ‰ใฏๅŒใ˜้ฆ–ๅ›žใ‚Šใ‹ใ‚‰ๅง‹ใ‚ใพใ™ใ€‚ใŸใ ใ—ๆœ€ๅพŒใฎ็ขบ่ชใฏ็•ฐใชใ‚Šใ€็ท ใ‚ไป˜ใ‘ใ‚‹่ผชใซๅˆถ้™ใŒใ‚ใ‚Šใ€้ฆ–ใ‚’็ตžใ‚ใฆใฏใ„ใ‘ใพใ›ใ‚“ใ€‚ไป•็ต„ใฟใŒๅˆ†ใ‹ใ‚‰ใชใ„ๅ ดๅˆใฏใƒกใƒผใ‚ซใƒผใฎ่ชฌๆ˜Žใ‚’็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚' },
17
+ { question: 'ๅญ็Šฌใ‚„ๅญ็Œซใซใ‚‚็ตๆžœใ‚’ไฝฟใˆใพใ™ใ‹๏ผŸ', answer: '็พๅœจใฎใƒ•ใ‚ฃใƒƒใƒˆใ‚’็ขบ่ชใ™ใ‚‹็›ฎๅฎ‰ใจใ—ใฆไฝฟใˆใพใ™ใ€‚่‹ฅใ„ใƒšใƒƒใƒˆใฏๆˆ้•ทใ—ๆฏ›ใ‚‚ๅค‰ใ‚ใ‚‹ใŸใ‚ใ€ๆธฌๅฎšใ‚’ๅฎšๆœŸ็š„ใซ็นฐใ‚Š่ฟ”ใ—ใ€ๆฏŽๅ›žๆ…Ž้‡ใซ็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚' },
18
+ ];
19
+ const howTo: PetCollarSizeCalculatorLocaleContent['howTo'] = [
20
+ { name: '้ฆ–ๅ›žใ‚Šใ‚’ๆธฌใ‚‹', text: 'ใƒšใƒƒใƒˆใŒ่ฝใก็€ใ„ใฆ่‡ช็„ถใซ็ซ‹ใฃใฆใ„ใ‚‹ใจใใ€้ฆ–่ผชใ‚’็€ใ‘ใ‚‹ไฝ็ฝฎใ‚’ๆธฌใ‚Šใพใ™ใ€‚ใƒกใ‚ธใƒฃใƒผใฏๅนณใ‚‰ใซใ—ใ€็ท ใ‚ไป˜ใ‘ใพใ›ใ‚“ใ€‚' },
21
+ { name: 'ใ‚†ใจใ‚Šใ‚’้ธใถ', text: '่ฆ‹ใˆใ‚‹ใ‚นใƒฉใ‚คใƒ€ใƒผใง้ฆ–ใจ้ฆ–่ผชใฎ้–“ใฎใ‚†ใจใ‚Šใ‚’่จญๅฎšใ—ใพใ™ใ€‚ๆœ€ๅˆใฎ2ใ‚ปใƒณใƒใƒกใƒผใƒˆใƒซใฏไพ‹ใซใ™ใŽใพใ›ใ‚“ใ€‚' },
22
+ { name: '็จฎ้กžใ‚’้ธใถ', text: '้€šๅธธใ€ใ‚ปใƒผใƒ•ใƒ†ใ‚ฃใ€ใƒžใƒผใƒใƒณใ‚ฒใƒผใƒซใ‹ใ‚‰้ธใณใ€ไป•็ต„ใฟใซๅˆใฃใŸ็ขบ่ชใƒกใƒƒใ‚ปใƒผใ‚ธใ‚’่กจ็คบใ—ใพใ™ใ€‚' },
23
+ { name: '่ชฟๆ•ดๅน…ใ‚’ๆฏ”ในใ‚‹', text: '่จˆ็ฎ—ใ—ใŸ็ฏ„ๅ›ฒๅ…จไฝ“ใ‚’่ฆ†ใ†้ฆ–่ผชใ‚’ๆŽขใ—ใ€ใƒšใƒƒใƒˆใซ็€ใ‘ใฆๅฎŸ้š›ใซ็ขบ่ชใ—ใพใ™ใ€‚' },
24
+ ];
25
+ const seo: PetCollarSizeCalculatorLocaleContent['seo'] = [
26
+ { type: 'summary', title: 'ๆธฌๅฎšๅ€คใ‚’่ณผๅ…ฅ็”จใฎ็ฏ„ๅ›ฒใซๅค‰ใˆใ‚‹', items: ['้ฆ–่ผชใ‚’ๅฎŸ้š›ใซ็€ใ‘ใ‚‹ไฝ็ฝฎใงๆธฌใ‚Šใพใ™ใ€‚', '็Šฌ็จฎๅใงๆŽจๆธฌใ›ใšใ€ใ‚†ใจใ‚Šใ‚’่ฆ‹ใˆใ‚‹ๅฝขใซใ—ใพใ™ใ€‚', 'ๅ•†ๅ“ใฎ่ชฟๆ•ดๅน…ใจ็ตๆžœใ‚’ๆฏ”ในใพใ™ใ€‚', '่ฝใก็€ใ„ใŸ็Šถๆ…‹ใงใƒšใƒƒใƒˆใซ็€ใ‘ใฆ็ขบ่ชใ—ใพใ™ใ€‚'] },
27
+ { type: 'title', text: 'ใ“ใฎ่จˆ็ฎ—ๆฉŸใงๅˆคๆ–ญใงใใ‚‹ใ“ใจ', level: 2 },
28
+ { type: 'paragraph', html: 'ใ‚ตใ‚คใ‚บ่กจใฏใ€ใƒšใƒƒใƒˆใŒไบŒใคใฎใ‚ตใ‚คใ‚บใฎ้–“ใซใ„ใ‚‹ๅ ดๅˆใ€ๆฏ›ใŒๅคšใ„ๅ ดๅˆใ€ๆˆ้•ทไธญใฎๅ ดๅˆใซๅˆ†ใ‹ใ‚Šใซใใใชใ‚Šใพใ™ใ€‚ใ“ใฎ่จˆ็ฎ—ๆฉŸใฏใ€้ฆ–่ผชใŒๅฎŸ้š›ใซ็ฝฎใ‹ใ‚Œใ‚‹ๅ ดๆ‰€ใฎ้ฆ–ๅ›žใ‚Šใจใ„ใ†็ขบ่ชใ—ใ‚„ใ™ใ„ๆธฌๅฎšใ‹ใ‚‰ๅง‹ใ‚ใพใ™ใ€‚ใใ“ใธ่‡ชๅˆ†ใง้ธใ‚“ใ ใ‚†ใจใ‚Šใ‚’ๅŠ ใˆใพใ™ใ€‚ๅฐๅž‹ใ€ไธญๅž‹ใ€ๅคงๅž‹ใจใ„ใ†ๅ•†ๅ“ใƒฉใƒ™ใƒซใ‚’ๆŽจๆธฌใ™ใ‚‹ใฎใงใฏใชใใ€ๅ•†ๅ“ใฎ่ชฟๆ•ดๅน…ใจๆฏ”ในใ‚‰ใ‚Œใ‚‹ๅ…ทไฝ“็š„ใช็ฏ„ๅ›ฒใ‚’ไฝœใ‚Šใพใ™ใ€‚' },
29
+ { type: 'paragraph', html: '็ฏ„ๅ›ฒใฏๆฏ”่ผƒใ—ใ‚„ใ™ใ„ใ‚ˆใ†ใซ็Ÿญใใ—ใฆใ„ใพใ™ใ€‚่ชฟๆ•ดๅผใฎ้ฆ–่ผชใซไธ–็•Œๅ…ฑ้€šใฎ่ฆๆ ผใฏใชใใ€ๅฎŸ้š›ใซไฝฟใˆใ‚‹้•ทใ•ใŒ่ฒฉๅฃฒใƒšใƒผใ‚ธใฎใ‚ตใ‚คใ‚บๅใจ้•ใ†ใ“ใจใ‚‚ใ‚ใ‚Šใพใ™ใ€‚่ชฟๆ•ดๅน…ใŒ็ฏ„ๅ›ฒๅ…จไฝ“ใ‚’่ฆ†ใ†ๅ•†ๅ“ใ‚’ๅ€™่ฃœใซใ—ใพใ™ใ€‚ใŸใ ใ—ๆ•ฐๅ€คใ ใ‘ใงใฏใ€็ธใ€ใƒใƒƒใ‚ฏใƒซใ€ๆฏ›ใ€็ด ๆใ€ไป•็ต„ใฟใŒใƒšใƒƒใƒˆใซ้ฉใ—ใฆใ„ใ‚‹ใ‹ใฏๅˆคๆ–ญใงใใพใ›ใ‚“ใ€‚' },
30
+ { type: 'title', text: '่ณผๅ…ฅๅ‰ใฎๆธฌใ‚Šๆ–น', level: 2 },
31
+ { type: 'list', items: ['ใƒšใƒƒใƒˆใŒ่ฝใก็€ใ„ใฆ่‡ช็„ถใซ็ซ‹ใฃใฆใ„ใ‚‹ใจใใซๆธฌใ‚‹ใ€‚', 'ๆฏ›ใ‚„็šฎ่†šใ‚’ๆŠผใ—ใคใถใ•ใšใ€ใƒกใ‚ธใƒฃใƒผใ‚’ๆฐดๅนณใซไฟใคใ€‚', '้ฆ–่ผชใ‚’้ซ˜ใ„ไฝ็ฝฎใ‚„ไฝŽใ„ไฝ็ฝฎใซ็€ใ‘ใ‚‹ๅ ดๅˆใฏๅ†ๆธฌๅฎšใ™ใ‚‹ใ€‚', '่‹ฅใ„ใƒšใƒƒใƒˆใฏๆ—ฅไป˜ใ‚’่จ˜้Œฒใ—ใ€ๆˆ้•ทไธญใซๅฎšๆœŸ็š„ใซ็ขบ่ชใ™ใ‚‹ใ€‚'] },
32
+ { type: 'paragraph', html: 'ใ‚†ใจใ‚Šใฏๆ˜Ž็คบใ—ใŸๅ‰ๆใงใ‚ใ‚Šใ€ๅฎ‰ๅ…จใฎไฟ่จผใงใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚้ฉๅˆ‡ใชๅ€คใฏใƒšใƒƒใƒˆใ€ๆฏ›ใ€ๅน…ใ€็ด ๆใ€ไฝฟใ„ๆ–นใซใ‚ˆใฃใฆๅค‰ใ‚ใ‚Šใพใ™ใ€‚ๆŒ‡ใ‚’ๅ…ฅใ‚Œใ‚‹็ขบ่ชใฏ็›ฎๅฎ‰ใซใชใ‚Šใพใ™ใŒใ€ไธ€ใคใฎๆ•ฐๅญ—ใŒๅ…จใฆใฎใƒšใƒƒใƒˆใฎ่ฆๅ‰‡ใซใชใ‚‹ใ‚ใ‘ใงใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚ใ“ใ™ใ‚Œใ€ๅ’ณใ€็—›ใฟใ€ๅ‘ผๅธใฎใ—ใฅใ‚‰ใ•ใ€่‹ฆใ—ใใ†ใชๆง˜ๅญใ€ๅ‹•ใใฎๅˆถ้™ใŒใ‚ใ‚Œใฐ้ฆ–่ผชใ‚’ๅค–ใ—ใ€ๅฐ‚้–€ๅฎถใซ็›ธ่ซ‡ใ—ใฆใใ ใ•ใ„ใ€‚' },
33
+ { type: 'title', text: 'ใƒ•ใ‚ฃใƒƒใƒˆใฎๅ††ใ‚’่ชญใ‚€', level: 2 },
34
+ { type: 'table', headers: ['่กจ็คบ', 'ๆ„ๅ‘ณ', 'ๆฌกใซใ™ใ‚‹ใ“ใจ'], rows: [['ๆธฌๅฎšใ—ใŸ้ฆ–ๅ›žใ‚Š', 'ใ‚†ใจใ‚Šใ‚’ๅŠ ใˆใ‚‹ๅ‰ใฎๅ‘จๅ›ฒใ€‚', 'ใƒกใ‚ธใƒฃใƒผใŒๆ–œใ‚ใ‚„ใใคใ‹ใฃใŸใ‚‰ๆธฌใ‚Š็›ดใ™ใ€‚'], ['้–‹ๅง‹', '้ฆ–ๅ›žใ‚Šใซ้ธใ‚“ใ ใ‚†ใจใ‚Šใ‚’ๅŠ ใˆใŸๅ€คใ€‚', '่ชฟๆ•ดๅน…ใฎไธ‹้™ใจใ—ใฆไฝฟใ†ใ€‚'], ['็ต‚ไบ†', 'ๆฏ”่ผƒใฎใŸใ‚ใฎๅฐใ•ใช็ช“ใ€‚', '็ช“ๅ…จไฝ“ใ‚’่ฆ†ใ†่ชฟๆ•ดๅน…ใ‚’ๆŽขใ™ใ€‚'], ['็ขบ่ช', '้ธใ‚“ใ ใ‚†ใจใ‚Šใธใฎๆณจๆ„ใ€‚', 'ใƒšใƒƒใƒˆใซ็€ใ‘ใฆ็ขบใ‹ใ‚ใ‚‹ใ€‚']] },
35
+ { type: 'title', text: '้ฆ–่ผชใฎ็จฎ้กžใงๆœ€ๅพŒใฎ็ขบ่ชใŒๅค‰ใ‚ใ‚‹', level: 2 },
36
+ { type: 'paragraph', html: '้€šๅธธใฎ้ฆ–่ผชใงใฏๅฟซ้ฉใ•ใจๅฎ‰ๅ…จๆ€งใ‚’็ขบ่ชใ—ใ€ใ‚ปใƒผใƒ•ใƒ†ใ‚ฃใ‚„ใƒžใƒผใƒใƒณใ‚ฒใƒผใƒซใงใฏไป•็ต„ใฟใ‚‚็ขบ่ชใ—ใพใ™ใ€‚็ธใ€ใƒใƒƒใ‚ฏใƒซใ€ๆฏ›ใ€็ท ใ‚ไป˜ใ‘ใ‚‹่ผชใ‚’่ฆ‹ใฆใใ ใ•ใ„ใ€‚ๆ•ฐๅ€คใฏๅ•†ๅ“ใ‚’็ตžใ‚‹ใŸใ‚ใซๅฝน็ซ‹ใกใพใ™ใŒใ€ๆœ€ๅพŒใฏ่ฝใก็€ใ„ใŸใƒšใƒƒใƒˆใจใƒกใƒผใ‚ซใƒผใฎ่ชฌๆ˜Žใงๅˆคๆ–ญใ—ใพใ™ใ€‚' },
37
+ { type: 'tip', title: '้™ใ‹ใซๆ‰‹ใง็ขบ่ชใ™ใ‚‹', html: 'ใƒšใƒƒใƒˆใŒใƒชใƒฉใƒƒใ‚ฏใ‚นใ—ใฆใ„ใ‚‹ใจใใซ้ฆ–่ผชใ‚’็€ใ‘ใพใ™ใ€‚ใ“ใ™ใ‚Œใšใซๅ‹•ใใ€ๅ‘ผๅธใ—ใ€้ฃŸในใ€้ฃฒใฟใ€้ ญใ‚’ๅ›žใ›ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚็€ใ‘ใŸใพใพใซใ™ใ‚‹้ฆ–่ผชใชใ‚‰ใ€้ ญใฎไธŠใ‹ใ‚‰ๆŠœใ‘ใชใ„ใ“ใจใ‚‚็ขบ่ชใ—ใพใ™ใ€‚ใƒˆใƒชใƒŸใƒณใ‚ฐใ€ๆˆ้•ทใ€ไฝ“้‡ๅค‰ๅŒ–ใ€ไฝ็ฝฎใฎๅค‰ๆ›ดๅพŒใฏๅ†็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚' },
38
+ ];
39
+ const schemas: PetCollarSizeCalculatorLocaleContent['schemas'] = [
40
+ { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'LifestyleApplication', operatingSystem: 'Web', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' } } as WithContext<SoftwareApplication>,
41
+ { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>,
42
+ { '@context': 'https://schema.org', '@type': 'HowTo', name: title, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) } as WithContext<HowTo>,
43
+ ];
44
+ export const content: PetCollarSizeCalculatorLocaleContent = { slug, title, description, ui, seo, faq, bibliography, howTo, schemas };
@@ -0,0 +1,44 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
3
+ import type { PetCollarSizeCalculatorLocaleContent } from '../entry';
4
+ import type { PetCollarSizeCalculatorUI } from '../ui';
5
+
6
+ const slug = 'pet-collar-size-calculator';
7
+ const title = '๋ฐ˜๋ ค๋™๋ฌผ ๋ชฉ์ค„ ์‚ฌ์ด์ฆˆ ๊ณ„์‚ฐ๊ธฐ';
8
+ const description = '๋ชฉ๋‘˜๋ ˆ๋ฅผ ์ธก์ •ํ•˜๊ณ  ์—ฌ์œ  ๊ณต๊ฐ„์„ ๋”ํ•ด ์†์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์กฐ์ ˆ ๋ฒ”์œ„๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.';
9
+ const ui: PetCollarSizeCalculatorUI = {
10
+ neckCircumferenceLabel: '๋ชฉ๋‘˜๋ ˆ', unitLabel: 'ํ‘œ์‹œ', centimetres: '์„ผํ‹ฐ๋ฏธํ„ฐ', inches: '์ธ์น˜', allowanceLabel: '์—ฌ์œ  ๊ณต๊ฐ„', collarTypeLabel: '๋ชฉ์ค„ ์ข…๋ฅ˜', flatCollar: '์ผ๋ฐ˜ํ˜•', breakawayCollar: '์•ˆ์ „ ํ•ด์ œํ˜•', martingaleCollar: '๋งˆํ‹ด๊ฒŒ์ผ', statusTight: '์—ฌ์œ ๋ฅผ ๋Š˜๋ฆฌ์„ธ์š”', statusBalanced: 'ํ™•์ธํ•  ์ค€๋น„ ์™„๋ฃŒ', statusLoose: '์•ˆ์ „์„ฑ์„ ํ™•์ธํ•˜์„ธ์š”', statusTightDetail: '์—ฌ์œ ๋ฅผ ๋Š˜๋ฆฌ์„ธ์š”.', statusBalancedDetail: '์ด ๋ฒ”์œ„๋ฅผ ์†์œผ๋กœ ํ™•์ธํ•˜์„ธ์š”.', statusLooseDetail: '๋น ์ง€์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.', fitStudyLabel: '๋ชฉ์ค„ ๋งž์ถค ์—ฐ๊ตฌ', fitWindowLabel: '์ด ๋ฒ”์œ„์˜ ์ œํ’ˆ ์ฐพ๊ธฐ', measuredLabel: '์ธก์ •ํ•œ ๋ชฉ', roomLabel: '์—ฌ์œ  ๊ณต๊ฐ„', checkLabel: '์†์œผ๋กœ ํ™•์ธ', sceneAria: '๋ชฉ ๋‘˜๋ ˆ์™€ ์กฐ์ ˆ ๊ฐ€๋Šฅํ•œ ๋ชฉ์ค„ ๋ฒ”์œ„๋ฅผ ๋ณด์—ฌ ์ฃผ๋Š” ๋งž์ถค ์—ฐ๊ตฌ', neckMarker: '๋ชฉ', easeMarker: '์—ฌ์œ ', rangeMarker: '๋ชฉ์ค„ ๋ฒ”์œ„', minimumMarker: '์‹œ์ž‘', maximumMarker: '๋', checkFlat: 'ํŽธ์•ˆํ•˜๊ณ  ์•ˆ์ „ํ•˜๋ฉฐ ์“ธ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค.', checkBreakaway: '๋งž์ถค๊ณผ ํ•ด์ œ ์žฅ์น˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”.', checkMartingale: '์กฐ์ž„ ๊ณ ๋ฆฌ๊ฐ€ ๋ชฉ์„ ์••๋ฐ•ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.', invalidInput: '์˜ฌ๋ฐ”๋ฅธ ๋ชฉ๋‘˜๋ ˆ์™€ ์—ฌ์œ  ๊ณต๊ฐ„์„ ์ž…๋ ฅํ•˜์„ธ์š”.',
11
+ };
12
+ const faq: PetCollarSizeCalculatorLocaleContent['faq'] = [
13
+ { question: '๋ฐ˜๋ ค๋™๋ฌผ์˜ ๋ชฉ๋‘˜๋ ˆ๋Š” ์–ด๋–ป๊ฒŒ ์ธก์ •ํ•˜๋‚˜์š”?', answer: '๋ชฉ์ค„์ด ๋†“์ผ ์œ„์น˜์— ๋ถ€๋“œ๋Ÿฌ์šด ์ค„์ž๋ฅผ ๋‘˜๋Ÿฌ ์ฃผ์„ธ์š”. ํ”ผ๋ถ€๋‚˜ ํ„ธ์„ ๋ˆ„๋ฅด์ง€ ๋ง๊ณ  ํ„ธ ๊ฐ€๊นŒ์ด์—์„œ ์ˆ˜ํ‰์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ชฉ์ค„ ์œ„์น˜, ํ„ธ์˜ ์–‘, ๋™๋ฌผ์˜ ์ž์„ธ๊ฐ€ ๋‹ฌ๋ผ์ง€๋ฉด ๋‹ค์‹œ ์ธก์ •ํ•˜์„ธ์š”.' },
14
+ { question: '์™œ ํ•˜๋‚˜์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฒ”์œ„๋กœ ๋‚˜์˜ค๋‚˜์š”?', answer: '์กฐ์ ˆ์‹ ๋ชฉ์ค„์€ ์ œ์กฐ์‚ฌ๋งˆ๋‹ค ์กฐ์ ˆ ํญ์ด ๋‹ค๋ฅด๊ณ  ์‚ฌ์ด์ฆˆ ํ‘œ๊ธฐ๋„ ํ†ต์ผ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ ํƒํ•œ ์—ฌ์œ ๋ฅผ ๋”ํ•ด ์ž‘์€ ๋น„๊ต ๋ฒ”์œ„๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์—๋Š” ์‹ค์ œ ๋ชฉ์ค„์„ ๋™๋ฌผ์—๊ฒŒ ์ฐฉ์šฉํ•ด ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.' },
15
+ { question: '์—ฌ์œ  ๊ณต๊ฐ„์€ ์–ผ๋งˆ๋‚˜ ์„ ํƒํ•ด์•ผ ํ•˜๋‚˜์š”?', answer: '๋ชจ๋“  ๋™๋ฌผ์— ๊ฐ™์€ ๊ฐ’์ด ๋งž์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ํ„ธ, ํญ, ์†Œ์žฌ, ํ™œ๋™๋Ÿ‰์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์ˆซ์ž๋Š” ๋ณด์ด๋Š” ๊ฐ€์ •์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ํŽธ์•ˆํ•จ๊ณผ ์•ˆ์ „์„ฑ์„ ์ฐจ๋ถ„ํ•˜๊ฒŒ ์†์œผ๋กœ ํ™•์ธํ•˜์„ธ์š”.' },
16
+ { question: '๋งˆํ‹ด๊ฒŒ์ผ ๋ชฉ์ค„์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?', answer: '์ฒซ ๊ณ„์‚ฐ์€ ๊ฐ™์€ ๋ชฉ๋‘˜๋ ˆ์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ข… ํ™•์ธ์€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์กฐ์ž„ ๊ณ ๋ฆฌ๋Š” ์ œํ•œ๋˜์–ด์•ผ ํ•˜๋ฉฐ ์ ˆ๋Œ€ ๋ชฉ์„ ์กฐ์ด๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๊ตฌ์กฐ๋ฅผ ์ž˜ ๋ชจ๋ฅด๋ฉด ์ œ์กฐ์‚ฌ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.' },
17
+ { question: '์–ด๋ฆฐ ๋ฐ˜๋ ค๋™๋ฌผ์—๊ฒŒ๋„ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?', answer: 'ํ˜„์žฌ ๋งž์ถค์„ ํ™•์ธํ•˜๋Š” ์ฐธ๊ณ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋ฆฐ ๋™๋ฌผ์€ ์„ฑ์žฅํ•˜๊ณ  ํ„ธ๋„ ๋ณ€ํ•˜๋ฏ€๋กœ ์ธก์ •์„ ์ž์ฃผ ๋ฐ˜๋ณตํ•˜๊ณ  ๋งค๋ฒˆ ์ฃผ์˜ ๊นŠ๊ฒŒ ํ™•์ธํ•˜์„ธ์š”.' },
18
+ ];
19
+ const howTo: PetCollarSizeCalculatorLocaleContent['howTo'] = [
20
+ { name: '๋ชฉ๋‘˜๋ ˆ ์ธก์ •', text: '๋™๋ฌผ์ด ํŽธ์•ˆํ•˜๊ฒŒ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์„œ ์žˆ์„ ๋•Œ ๋ชฉ์ค„์ด ๋†“์ผ ์œ„์น˜๋ฅผ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค. ์ค„์ž๋Š” ํ‰ํ‰ํ•˜๊ฒŒ ๋‘๊ณ  ๋‹น๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.' },
21
+ { name: '์—ฌ์œ  ์„ ํƒ', text: '๋ณด์ด๋Š” ์กฐ์ ˆ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ด ๋ชฉ๊ณผ ๋ชฉ์ค„ ์‚ฌ์ด์˜ ์—ฌ์œ ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ์˜ 2์„ผํ‹ฐ๋ฏธํ„ฐ๋Š” ์˜ˆ์‹œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.' },
22
+ { name: '์ข…๋ฅ˜ ์„ ํƒ', text: '์ผ๋ฐ˜ํ˜•, ์•ˆ์ „ ํ•ด์ œํ˜•, ๋งˆํ‹ด๊ฒŒ์ผ ์ค‘์—์„œ ์„ ํƒํ•ด ์žฅ์น˜์— ๋งž๋Š” ํ™•์ธ ์•ˆ๋‚ด๋ฅผ ๋ด…๋‹ˆ๋‹ค.' },
23
+ { name: '์กฐ์ ˆ ํญ ๋น„๊ต', text: '๊ณ„์‚ฐ๋œ ๋ฒ”์œ„๋ฅผ ๋ชจ๋‘ ๋ฎ๋Š” ๋ชฉ์ค„์„ ์ฐพ์€ ๋’ค ๋™๋ฌผ์—๊ฒŒ ์ง์ ‘ ์ฐฉ์šฉํ•ด ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.' },
24
+ ];
25
+ const seo: PetCollarSizeCalculatorLocaleContent['seo'] = [
26
+ { type: 'summary', title: '์ธก์ •๊ฐ’์„ ๊ตฌ๋งค ๋ฒ”์œ„๋กœ ๋ฐ”๊พธ๊ธฐ', items: ['๋ชฉ์ค„์ด ์‹ค์ œ๋กœ ๋†“์ผ ์œ„์น˜์—์„œ ์ธก์ •ํ•˜์„ธ์š”.', 'ํ’ˆ์ข…์œผ๋กœ ์ถ”์ธกํ•˜์ง€ ๋ง๊ณ  ์—ฌ์œ  ๊ณต๊ฐ„์„ ํ‘œ์‹œํ•˜์„ธ์š”.', '์ œํ’ˆ์˜ ์‹ค์ œ ์กฐ์ ˆ ํญ๊ณผ ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•˜์„ธ์š”.', '๋™๋ฌผ์—๊ฒŒ ์ฐจ๋ถ„ํ•˜๊ฒŒ ์ฐฉ์šฉํ•ด ํ™•์ธํ•˜์„ธ์š”.'] },
27
+ { type: 'title', text: '์ด ๊ณ„์‚ฐ๊ธฐ๊ฐ€ ๋„์™€์ฃผ๋Š” ๊ฒฐ์ •', level: 2 },
28
+ { type: 'paragraph', html: '๋™๋ฌผ์ด ๋‘ ์‚ฌ์ด์ฆˆ ์‚ฌ์ด์— ์žˆ๊ฑฐ๋‚˜ ํ„ธ์ด ๋งŽ๊ฑฐ๋‚˜ ์„ฑ์žฅ ์ค‘์ด๋ฉด ์‚ฌ์ด์ฆˆํ‘œ๊ฐ€ ๋ชจํ˜ธํ•ด์ง‘๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š” ์ง์ ‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ธ ๋ชฉ์ค„์ด ๋†“์ผ ์œ„์น˜์˜ ๋ชฉ๋‘˜๋ ˆ์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๋‹ค์Œ ์›ํ•˜๋Š” ์—ฌ์œ  ๊ณต๊ฐ„์„ ๋”ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์€ ์‚ฌ์ด์ฆˆ, ์ค‘๊ฐ„ ์‚ฌ์ด์ฆˆ, ํฐ ์‚ฌ์ด์ฆˆ ๊ฐ™์€ ํŒ๋งค์šฉ ์ด๋ฆ„์„ ์ถ”์ธกํ•˜๋Š” ๋Œ€์‹  ์ œํ’ˆ์˜ ์กฐ์ ˆ ์น˜์ˆ˜์™€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์ฒด์ ์ธ ๋ฒ”์œ„๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.' },
29
+ { type: 'paragraph', html: '๋ฒ”์œ„๋Š” ๋น„๊ตํ•˜๊ธฐ ์‰ฝ๋„๋ก ์งง๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์กฐ์ ˆ์‹ ๋ชฉ์ค„์—๋Š” ์ „ ์„ธ๊ณ„ ๊ณตํ†ต ๊ทœ๊ฒฉ์ด ์—†๊ณ  ์‹ค์ œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ธธ์ด๊ฐ€ ํŒ๋งค ํŽ˜์ด์ง€์˜ ์‚ฌ์ด์ฆˆ ์ด๋ฆ„๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐ์ ˆ ํญ์ด ๋ฒ”์œ„ ์ „์ฒด๋ฅผ ๋ฎ๋Š” ์ œํ’ˆ์„ ํ›„๋ณด๋กœ ์‚ผ์œผ์„ธ์š”. ๊ทธ๋ž˜๋„ ์ˆซ์ž๋งŒ์œผ๋กœ ๊ฐ€์žฅ์ž๋ฆฌ, ๋ฒ„ํด, ํ„ธ, ์†Œ์žฌ ๋˜๋Š” ๊ตฌ์กฐ์˜ ์ ํ•ฉ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.' },
30
+ { type: 'title', text: '๊ตฌ๋งค ์ „ ์ธก์ • ๋ฐฉ๋ฒ•', level: 2 },
31
+ { type: 'list', items: ['๋™๋ฌผ์ด ํŽธ์•ˆํ•˜๊ณ  ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์„œ ์žˆ์„ ๋•Œ ์ธก์ •ํ•˜์„ธ์š”.', 'ํ„ธ์ด๋‚˜ ํ”ผ๋ถ€๋ฅผ ๋ˆ„๋ฅด์ง€ ๋ง๊ณ  ์ค„์ž๋ฅผ ์ˆ˜ํ‰์œผ๋กœ ์œ ์ง€ํ•˜์„ธ์š”.', '๋ชฉ์ค„์„ ๋” ๋†’๊ฑฐ๋‚˜ ๋‚ฎ๊ฒŒ ์ฐฉ์šฉํ•  ์˜ˆ์ •์ด๋ฉด ๋‹ค์‹œ ์ธก์ •ํ•˜์„ธ์š”.', '์–ด๋ฆฐ ๋™๋ฌผ์€ ๋‚ ์งœ๋ฅผ ์ ๊ณ  ์„ฑ์žฅํ•˜๋Š” ๋™์•ˆ ๋งž์ถค์„ ํ™•์ธํ•˜์„ธ์š”.'] },
32
+ { type: 'paragraph', html: '์—ฌ์œ  ๊ณต๊ฐ„์€ ๋ช…์‹œ์ ์ธ ๊ฐ€์ •์ด์ง€ ์•ˆ์ „ ๋ณด์žฅ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ๊ฐ’์€ ๋™๋ฌผ, ํ„ธ, ํญ, ์†Œ์žฌ์™€ ์‚ฌ์šฉ ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์†๊ฐ€๋ฝ ํ™•์ธ์€ ์ฐธ๊ณ ๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ˆซ์ž๊ฐ€ ๋ชจ๋“  ๋™๋ฌผ์—๊ฒŒ ์ ์šฉ๋˜๋Š” ๊ทœ์น™์ด ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์“ธ๋ฆผ, ๊ธฐ์นจ, ํ†ต์ฆ, ํ˜ธํก ๊ณค๋ž€, ๋ถˆ์•ˆ ๋˜๋Š” ์›€์ง์ž„ ์ œํ•œ์ด ์žˆ์œผ๋ฉด ๋ชฉ์ค„์„ ์ œ๊ฑฐํ•˜๊ณ  ์ „๋ฌธ๊ฐ€์—๊ฒŒ ๋ฌธ์˜ํ•˜์„ธ์š”.' },
33
+ { type: 'title', text: '๋งž์ถค ์› ์ฝ๊ธฐ', level: 2 },
34
+ { type: 'table', headers: ['์‹ ํ˜ธ', '์˜๋ฏธ', '๋‹ค์Œ ๋‹จ๊ณ„'], rows: [['์ธก์ •ํ•œ ๋ชฉ', '์—ฌ์œ ๋ฅผ ๋”ํ•˜๊ธฐ ์ „์˜ ๋‘˜๋ ˆ.', '์ค„์ž๊ฐ€ ๊ธฐ์šธ์—ˆ๊ฑฐ๋‚˜ ์กฐ์˜€๋‹ค๋ฉด ๋‹ค์‹œ ์ธก์ •ํ•˜์„ธ์š”.'], ['์‹œ์ž‘', '๋ชฉ๋‘˜๋ ˆ์— ์„ ํƒํ•œ ์—ฌ์œ ๋ฅผ ๋”ํ•œ ๊ฐ’.', '์กฐ์ ˆ ํญ์˜ ์•„๋ž˜ ๊ฒฝ๊ณ„๋กœ ์‚ฌ์šฉํ•˜์„ธ์š”.'], ['๋', '๋น„๊ต๋ฅผ ์œ„ํ•œ ์ž‘์€ ์ฐฝ.', '์ฐฝ ์ „์ฒด๋ฅผ ๋ฎ๋Š” ์กฐ์ ˆ ํญ์„ ์ฐพ์œผ์„ธ์š”.'], ['ํ™•์ธ', '์„ ํƒํ•œ ์—ฌ์œ ์— ๋Œ€ํ•œ ์•ˆ๋‚ด.', '๋™๋ฌผ์—๊ฒŒ ์ง์ ‘ ํ™•์ธํ•˜์„ธ์š”.']] },
35
+ { type: 'title', text: '๋ชฉ์ค„ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋งˆ์ง€๋ง‰ ํ™•์ธ์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค', level: 2 },
36
+ { type: 'paragraph', html: '์ผ๋ฐ˜ํ˜•์€ ํŽธ์•ˆํ•จ๊ณผ ์•ˆ์ „์„ฑ์„ ํ™•์ธํ•˜๊ณ , ์•ˆ์ „ ํ•ด์ œํ˜•์ด๋‚˜ ๋งˆํ‹ด๊ฒŒ์ผ์€ ์žฅ์น˜์˜ ์ž‘๋™๋„ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ์ž๋ฆฌ, ๋ฒ„ํด, ํ„ธ๊ณผ ์กฐ์ž„ ๊ณ ๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด์„ธ์š”. ์ˆซ์ž๋Š” ์ œํ’ˆ์„ ๊ณ ๋ฅด๋Š” ๋ฐ ๋„์›€์„ ์ฃผ์ง€๋งŒ ๋งˆ์ง€๋ง‰ ํŒ๋‹จ์€ ํŽธ์•ˆํ•œ ๋™๋ฌผ๊ณผ ์ œ์กฐ์‚ฌ ์•ˆ๋‚ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.' },
37
+ { type: 'tip', title: '์ฐจ๋ถ„ํ•˜๊ฒŒ ์†์œผ๋กœ ํ™•์ธํ•˜๊ธฐ', html: '๋™๋ฌผ์ด ํŽธ์•ˆํ•  ๋•Œ ๋ชฉ์ค„์„ ์ฐฉ์šฉํ•˜์„ธ์š”. ์“ธ๋ฆผ ์—†์ด ์›€์ง์ด๊ณ , ์ˆจ ์‰ฌ๊ณ , ๋จน๊ณ , ๋งˆ์‹œ๊ณ , ๊ณ ๊ฐœ๋ฅผ ๋Œ๋ฆด ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์† ์ฐฉ์šฉํ•ด์•ผ ํ•˜๋Š” ๋ชฉ์ค„์ด๋ผ๋ฉด ๋จธ๋ฆฌ ์œ„๋กœ ๋น ์ง€์ง€ ์•Š๋Š”์ง€๋„ ํ™•์ธํ•˜์„ธ์š”. ๋ฏธ์šฉ, ์„ฑ์žฅ, ์ฒด์ค‘ ๋ณ€ํ™” ๋˜๋Š” ์œ„์น˜ ๋ณ€๊ฒฝ ํ›„์—๋Š” ๋‹ค์‹œ ํ™•์ธํ•˜์„ธ์š”.' },
38
+ ];
39
+ const schemas: PetCollarSizeCalculatorLocaleContent['schemas'] = [
40
+ { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'LifestyleApplication', operatingSystem: 'Web', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' } } as WithContext<SoftwareApplication>,
41
+ { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>,
42
+ { '@context': 'https://schema.org', '@type': 'HowTo', name: title, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) } as WithContext<HowTo>,
43
+ ];
44
+ export const content: PetCollarSizeCalculatorLocaleContent = { slug, title, description, ui, seo, faq, bibliography, howTo, schemas };
@@ -0,0 +1,44 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
3
+ import type { PetCollarSizeCalculatorLocaleContent } from '../entry';
4
+ import type { PetCollarSizeCalculatorUI } from '../ui';
5
+
6
+ const slug = 'halsbandmaat-huisdier-berekenen';
7
+ const title = 'Halsbandmaat voor huisdieren berekenen';
8
+ const description = 'Meet de hals, voeg bewegingsruimte toe en vind een verstelbaar bereik om met de hand te controleren.';
9
+ const ui: PetCollarSizeCalculatorUI = {
10
+ neckCircumferenceLabel: 'Halsomtrek', unitLabel: 'Weergave', centimetres: 'Centimeter', inches: 'Inches', allowanceLabel: 'Bewegingsruimte', collarTypeLabel: 'Type halsband', flatCollar: 'Plat', breakawayCollar: 'Veiligheidssluiting', martingaleCollar: 'Martingale', statusTight: 'Voeg ruimte toe', statusBalanced: 'Klaar om te controleren', statusLoose: 'Controleer de veiligheid', statusTightDetail: 'Voeg ruimte toe.', statusBalancedDetail: 'Controleer dit bereik met de hand.', statusLooseDetail: 'Controleer of hij niet kan afglijden.', fitStudyLabel: 'Pasvormstudie van de halsband', fitWindowLabel: 'Zoek dit bereik', measuredLabel: 'Gemeten hals', roomLabel: 'Bewegingsruimte', checkLabel: 'Handmatige controle', sceneAria: 'Pasvormstudie met halscirkel en verstelbaar halsbandbereik', neckMarker: 'hals', easeMarker: 'ruimte', rangeMarker: 'halsbandbereik', minimumMarker: 'begin', maximumMarker: 'einde', checkFlat: 'Comfortabel, veilig en zonder schuren.', checkBreakaway: 'Controleer de pasvorm en het ontgrendelingsmechanisme.', checkMartingale: 'De aantreklus mag de hals niet afknellen.', invalidInput: 'Voer een geldige halsomtrek en bewegingsruimte in.',
11
+ };
12
+ const faq: PetCollarSizeCalculatorLocaleContent['faq'] = [
13
+ { question: 'Hoe meet ik de hals van mijn huisdier?', answer: 'Leg een flexibel meetlint rond de plek waar de halsband komt. Houd het recht en dicht bij de vacht zonder huid of vacht samen te drukken. Meet opnieuw als de positie van de halsband, de vacht of de houding verandert.' },
14
+ { question: 'Waarom geeft de berekening een bereik?', answer: 'Verstelbare halsbanden hebben verschillende lengtes en maten zijn niet gelijk bij alle fabrikanten. De berekening telt de gekozen ruimte op en maakt een klein vergelijkingsbereik. Daarna moet je de echte halsband bij het dier controleren.' },
15
+ { question: 'Hoeveel bewegingsruimte moet ik kiezen?', answer: 'Er is geen universele waarde. Vacht, breedte, materiaal en activiteit veranderen de pasvorm. Gebruik het getal als zichtbare aanname en bevestig comfort en veiligheid daarna met een rustige handcontrole.' },
16
+ { question: 'Werkt dit ook voor een martingale halsband?', answer: 'De eerste schatting gebruikt dezelfde halsomtrek. De eindcontrole is anders: de aantreklus moet begrensd zijn en mag nooit knellen. Volg de instructies van de fabrikant als het mechanisme onbekend is.' },
17
+ { question: 'Kan ik dit bereik gebruiken voor een jong dier?', answer: 'Ja, als momentopname van de huidige pasvorm. Jonge dieren groeien en hun vacht verandert, dus meet regelmatig opnieuw en controleer de halsband zorgvuldig.' },
18
+ ];
19
+ const howTo: PetCollarSizeCalculatorLocaleContent['howTo'] = [
20
+ { name: 'Meet de hals', text: 'Meet een rustig dier dat natuurlijk staat, op de plek waar de halsband komt. Het lint moet plat liggen en niet trekken.' },
21
+ { name: 'Kies de ruimte', text: 'Stel de ruimte tussen hals en halsband in met de zichtbare regelaar. De eerste 2 cm zijn alleen een voorbeeld.' },
22
+ { name: 'Kies het type', text: 'Selecteer plat, veiligheidssluiting of martingale zodat de herinnering bij het mechanisme past.' },
23
+ { name: 'Vergelijk de instelling', text: 'Zoek een verstelbare halsband die het hele bereik bedekt en doe daarna een fysieke controle.' },
24
+ ];
25
+ const seo: PetCollarSizeCalculatorLocaleContent['seo'] = [
26
+ { type: 'summary', title: 'Van halsmeting naar een aankoopbereik', items: ['Meet waar de halsband echt komt te liggen.', 'Maak bewegingsruimte zichtbaar in plaats van op ras te gokken.', 'Vergelijk het resultaat met de echte verstelruimte van het product.', 'Sluit af met een rustige controle bij het dier.'] },
27
+ { type: 'title', text: 'Welke keuze helpt deze berekening maken', level: 2 },
28
+ { type: 'paragraph', html: 'Maattabellen zijn lastig als een dier tussen twee maten valt, een dikke vacht heeft of nog groeit. Deze tool begint met een meetwaarde die je zelf kunt controleren: de omtrek op de plek waar de halsband rust. Daarna voeg je de gekozen bewegingsruimte toe. Het resultaat kiest geen commercieel label zoals klein, middel of groot, maar maakt een concreet bereik om met productmaten te vergelijken.' },
29
+ { type: 'paragraph', html: 'Het bereik is bewust klein en bedoeld als startpunt voor het zoeken. Verstelbare halsbanden hebben geen wereldwijde standaard en de bruikbare lengte kan afwijken van de maatnaam in een winkel. Een product past in de selectie wanneer de verstelruimte het hele bereik afdekt. Het getal bevestigt echter niet vanzelf dat rand, gesp, vacht of mechanisme geschikt zijn.' },
30
+ { type: 'title', text: 'Meten voordat je koopt', level: 2 },
31
+ { type: 'list', items: ['Meet als het dier rustig en natuurlijk staat.', 'Houd het lint recht zonder vacht of huid samen te drukken.', 'Meet opnieuw als de halsband hoger of lager moet komen.', 'Noteer bij een jong dier de datum en controleer de pasvorm tijdens de groei.'] },
32
+ { type: 'paragraph', html: 'De bewegingsruimte is een expliciete aanname, geen veiligheidsgarantie. De juiste waarde hangt af van dier, vacht, breedte, materiaal en gebruik. Een vingercontrole kan richting geven, maar maakt van een getal geen regel voor elk dier. Bij schuren, hoesten, pijn, ademproblemen, stress of beperkte beweging neem je de halsband af en vraag je deskundig advies.' },
33
+ { type: 'title', text: 'Lees de pasvormcirkel', level: 2 },
34
+ { type: 'table', headers: ['Signaal', 'Betekenis', 'Volgende stap'], rows: [['Gemeten hals', 'Omtrek vรณรณr de ruimte.', 'Meet opnieuw als het lint schuin of strak zat.'], ['Begin', 'Hals plus gekozen ruimte.', 'Gebruik als ondergrens van de verstelruimte.'], ['Einde', 'Kleine vergelijkingswindow.', 'Zoek een verstelruimte die alles bedekt.'], ['Controle', 'Herinnering bij de gekozen ruimte.', 'Bevestig dit bij het dier.']] },
35
+ { type: 'title', text: 'Het type halsband verandert de eindcontrole', level: 2 },
36
+ { type: 'paragraph', html: 'Een platte halsband vraagt om een controle van comfort en veiligheid, terwijl een veiligheidssluiting of martingale extra aandacht voor het mechanisme nodig heeft. Controleer rand, gesp, vacht en aantreklus. Het getal helpt bij het filteren van producten, maar de rustige controle bij het dier en de fabrikant bepalen de uiteindelijke keuze.' },
37
+ { type: 'tip', title: 'Rustig met de hand controleren', html: 'Doe de halsband om terwijl het dier ontspannen is. Het moet kunnen bewegen, ademen, eten, drinken en de kop draaien zonder schuren. Controleer ook of de halsband niet over de kop kan glijden wanneer hij moet blijven zitten. Controleer opnieuw na trimmen, groei, gewichtsverandering of een andere positie.' },
38
+ ];
39
+ const schemas: PetCollarSizeCalculatorLocaleContent['schemas'] = [
40
+ { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'LifestyleApplication', operatingSystem: 'Web', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' } } as WithContext<SoftwareApplication>,
41
+ { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>,
42
+ { '@context': 'https://schema.org', '@type': 'HowTo', name: title, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) } as WithContext<HowTo>,
43
+ ];
44
+ export const content: PetCollarSizeCalculatorLocaleContent = { slug, title, description, ui, seo, faq, bibliography, howTo, schemas };