@jjlmoya/utils-civic 1.1.0 → 1.2.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 (53) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/de.ts +12 -9
  3. package/src/category/i18n/en.ts +12 -9
  4. package/src/category/i18n/es.ts +12 -9
  5. package/src/category/i18n/fr.ts +12 -9
  6. package/src/category/i18n/id.ts +12 -9
  7. package/src/category/i18n/it.ts +12 -9
  8. package/src/category/i18n/ja.ts +12 -9
  9. package/src/category/i18n/ko.ts +12 -9
  10. package/src/category/i18n/nl.ts +12 -9
  11. package/src/category/i18n/pl.ts +12 -9
  12. package/src/category/i18n/pt.ts +12 -9
  13. package/src/category/i18n/ru.ts +12 -9
  14. package/src/category/i18n/sv.ts +12 -9
  15. package/src/category/i18n/tr.ts +12 -9
  16. package/src/category/i18n/zh.ts +12 -8
  17. package/src/category/index.ts +2 -1
  18. package/src/entries.ts +4 -0
  19. package/src/index.ts +1 -0
  20. package/src/tests/i18n_coverage.test.ts +8 -0
  21. package/src/tests/locale_completeness.test.ts +1 -1
  22. package/src/tests/tool_validation.test.ts +1 -1
  23. package/src/tool/vote-seat-disproportionality-analyzer/bibliography.astro +6 -0
  24. package/src/tool/vote-seat-disproportionality-analyzer/bibliography.ts +16 -0
  25. package/src/tool/vote-seat-disproportionality-analyzer/component.astro +48 -0
  26. package/src/tool/vote-seat-disproportionality-analyzer/controller.ts +165 -0
  27. package/src/tool/vote-seat-disproportionality-analyzer/dom-views.ts +123 -0
  28. package/src/tool/vote-seat-disproportionality-analyzer/entry.ts +29 -0
  29. package/src/tool/vote-seat-disproportionality-analyzer/evaluator.ts +15 -0
  30. package/src/tool/vote-seat-disproportionality-analyzer/i18n/de.ts +44 -0
  31. package/src/tool/vote-seat-disproportionality-analyzer/i18n/en.ts +110 -0
  32. package/src/tool/vote-seat-disproportionality-analyzer/i18n/es.ts +42 -0
  33. package/src/tool/vote-seat-disproportionality-analyzer/i18n/fr.ts +37 -0
  34. package/src/tool/vote-seat-disproportionality-analyzer/i18n/id.ts +15 -0
  35. package/src/tool/vote-seat-disproportionality-analyzer/i18n/it.ts +10 -0
  36. package/src/tool/vote-seat-disproportionality-analyzer/i18n/ja.ts +10 -0
  37. package/src/tool/vote-seat-disproportionality-analyzer/i18n/ko.ts +10 -0
  38. package/src/tool/vote-seat-disproportionality-analyzer/i18n/nl.ts +10 -0
  39. package/src/tool/vote-seat-disproportionality-analyzer/i18n/pl.ts +10 -0
  40. package/src/tool/vote-seat-disproportionality-analyzer/i18n/pt.ts +10 -0
  41. package/src/tool/vote-seat-disproportionality-analyzer/i18n/ru.ts +10 -0
  42. package/src/tool/vote-seat-disproportionality-analyzer/i18n/sv.ts +10 -0
  43. package/src/tool/vote-seat-disproportionality-analyzer/i18n/tr.ts +10 -0
  44. package/src/tool/vote-seat-disproportionality-analyzer/i18n/zh.ts +10 -0
  45. package/src/tool/vote-seat-disproportionality-analyzer/index.ts +11 -0
  46. package/src/tool/vote-seat-disproportionality-analyzer/logic.test.ts +61 -0
  47. package/src/tool/vote-seat-disproportionality-analyzer/logic.ts +119 -0
  48. package/src/tool/vote-seat-disproportionality-analyzer/seo.astro +14 -0
  49. package/src/tool/vote-seat-disproportionality-analyzer/storage.ts +28 -0
  50. package/src/tool/vote-seat-disproportionality-analyzer/ui.ts +70 -0
  51. package/src/tool/vote-seat-disproportionality-analyzer/vote-seat-disproportionality-analyzer.css +467 -0
  52. package/src/tools.ts +2 -0
  53. package/src/types.ts +1 -1
@@ -0,0 +1,110 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { VoteSeatLocaleContent } from '../entry';
5
+ import { ui } from '../ui';
6
+
7
+ const softwareApplication: SoftwareApplication = {
8
+ '@type': 'SoftwareApplication',
9
+ name: 'Vote Seat Disproportionality Analyzer',
10
+ applicationCategory: 'EducationalApplication',
11
+ operatingSystem: 'Any',
12
+ description: 'Measure how vote shares and seat shares diverge with established disproportionality indices.',
13
+ url: 'https://gamebob.dev/en/vote-seat-disproportionality-analyzer',
14
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
15
+ };
16
+
17
+ const faqPage: FAQPage = {
18
+ '@type': 'FAQPage',
19
+ mainEntity: [
20
+ {
21
+ '@type': 'Question',
22
+ name: 'What does the analyzer measure?',
23
+ acceptedAnswer: {
24
+ '@type': 'Answer',
25
+ text: 'It compares each party or list vote share with its seat share and summarizes the distance with Gallagher, Loosemore-Hanby, and Sainte-Lague measures. It does not decide whether an outcome is fair or lawful.',
26
+ },
27
+ },
28
+ {
29
+ '@type': 'Question',
30
+ name: 'Why can total votes and total seats be different?',
31
+ acceptedAnswer: {
32
+ '@type': 'Answer',
33
+ text: 'They are different units. The analyzer normalizes votes by total votes and seats by total seats, so the two totals do not need to match.',
34
+ },
35
+ },
36
+ {
37
+ '@type': 'Question',
38
+ name: 'How should I read the vote to seat ratio?',
39
+ acceptedAnswer: {
40
+ '@type': 'Answer',
41
+ text: 'The ratio is vote share divided by seat share. A value of 1 means parity; a value above 1 means the party has less seat share than vote share; a zero-seat party with votes has an infinite ratio.',
42
+ },
43
+ },
44
+ {
45
+ '@type': 'Question',
46
+ name: 'Does the result prove an electoral system is unfair?',
47
+ acceptedAnswer: {
48
+ '@type': 'Answer',
49
+ text: 'No. The indices describe the distance between two distributions. District boundaries, turnout, thresholds, ballot rules, and the choice of denominator can all affect that distance, so interpretation needs electoral context.',
50
+ },
51
+ },
52
+ ],
53
+ };
54
+
55
+ const howTo: HowTo = {
56
+ '@type': 'HowTo',
57
+ name: 'Measure vote seat disproportionality',
58
+ step: [
59
+ { '@type': 'HowToStep', name: 'Enter the parties', text: 'Add one row for every party or list represented in both datasets.' },
60
+ { '@type': 'HowToStep', name: 'Enter votes and seats', text: 'Use the same election scope and enter the observed vote totals and seats won.' },
61
+ { '@type': 'HowToStep', name: 'Measure the gap', text: 'Run the analyzer to normalize both columns and calculate the three indices.' },
62
+ { '@type': 'HowToStep', name: 'Inspect the ribbons', text: 'Compare vote share, seat share, the percentage-point difference, and the vote to seat ratio for each row.' },
63
+ { '@type': 'HowToStep', name: 'Check the context', text: 'Read the formula notes and verify the jurisdiction-specific rules before drawing a conclusion.' },
64
+ ],
65
+ };
66
+
67
+ export const content: ToolLocaleContent<VoteSeatLocaleContent['ui']> = {
68
+ slug: 'vote-seat-disproportionality-analyzer',
69
+ title: 'Vote Seat Disproportionality Analyzer',
70
+ description: 'Compare vote share with seat share and calculate Gallagher, Loosemore-Hanby, and Sainte-Lague indices from transparent election data.',
71
+ ui,
72
+ seo: [
73
+ { type: 'title', text: 'Measure the Distance Between Votes and Seats', level: 2 },
74
+ { type: 'paragraph', html: 'An election can give a party a very different share of seats from its share of votes. This analyzer turns the two observed distributions into comparable percentages, then shows which parties gained or lost representation relative to their vote share. Entering raw totals is useful because the tool preserves the size of the underlying vote and seat pools while normalizing them separately.' },
75
+ { type: 'paragraph', html: 'The central result is not a verdict. It is a measurement of distance between two distributions. A positive percentage-point difference means the seat share is larger than the vote share; a negative difference means the seat share is smaller. The ribbons make this direction visible before you inspect the aggregate indices.' },
76
+ { type: 'title', text: 'What Each Index Adds to the Reading', level: 2 },
77
+ { type: 'paragraph', html: 'The Gallagher index is the square root of half the sum of squared party-level differences, using percentage points. Squaring makes large gaps count more heavily. The Loosemore-Hanby index is half the sum of absolute differences, so it describes the total amount of movement needed to align the two distributions. Both are expressed in percentage points here.' },
78
+ { type: 'paragraph', html: 'The Sainte-Lague index uses proportions and sums the squared difference divided by the vote share for each row with votes. This weighting makes a gap involving a small vote share behave differently from the same-sized gap involving a large party. A zero-vote row cannot supply that denominator, so it remains in the Gallagher and Loosemore-Hanby views while the Sainte-Lague calculation reports the rows it used.' },
79
+ { type: 'table', headers: ['Measure', 'Calculation', 'Best question'], rows: [
80
+ ['Gallagher', 'Square root of half the squared percentage-point gaps.', 'Which large gaps dominate the overall distance?'],
81
+ ['Loosemore-Hanby', 'Half the sum of absolute percentage-point gaps.', 'How much total distribution differs from parity?'],
82
+ ['Sainte-Lague', 'Sum of squared proportion gaps divided by vote proportion.', 'How does the vote-share denominator weight each gap?'],
83
+ ] },
84
+ { type: 'title', text: 'Prepare Comparable Election Data', level: 2 },
85
+ { type: 'paragraph', html: 'Use one consistent electoral scope: do not mix national votes with regional seats, first-round votes with second-round seats, or party votes with coalition seats unless that treatment is part of the question. The totals do not need to be equal because votes and seats are different units, but every row must refer to the same set of parties and the same result.' },
86
+ { type: 'list', items: ['Copy party names exactly enough to identify the same entity in both columns.', 'Include parties with votes but no seats so their representation gap is not hidden.', 'Include a zero-vote and zero-seat row only when it is meaningful to document the dataset.', 'Check whether blank, invalid, transferred, or excluded votes belong in the denominator before entering totals.', 'Keep the displayed indices with the underlying election record so another reader can reproduce the result.'] },
87
+ { type: 'tip', title: 'A ratio is a clue, not a cause', html: 'A vote to seat ratio above 1 indicates fewer seats per share of votes, while a value below 1 indicates more seats per share. It does not explain why the difference occurred. District magnitude, thresholds, geographic concentration, turnout, alliances, and the electoral formula may all matter.' },
88
+ { type: 'title', text: 'Know the Limits Before Comparing Elections', level: 2 },
89
+ { type: 'paragraph', html: 'Lower index values mean that the two entered distributions are closer, not that the election system is universally better. Comparing two elections is meaningful only when the vote definition, seat definition, party grouping, territorial scope, and denominator treatment are compatible. A missing small party can change every percentage and every index.' },
90
+ { type: 'paragraph', html: 'The analyzer does not infer ideology, intent, collusion, legal compliance, or democratic legitimacy. It cannot correct an official result or reconstruct a jurisdiction-specific count. Use it to expose a measurable relationship, then consult the election authority, the legal rule, and the source data before making a substantive claim.' },
91
+ { type: 'tip', title: 'Inspect the largest ribbon first', html: 'Start with the party named beside the largest share gap. Compare its vote and seat totals, then check whether the same data treatment applies to every other row. This makes the aggregate score easier to explain and helps catch a mismatched party label or denominator.' },
92
+ ],
93
+ faq: [
94
+ { question: 'What does the analyzer measure?', answer: 'It compares each party or list vote share with its seat share and summarizes the distance with Gallagher, Loosemore-Hanby, and Sainte-Lague measures. It does not decide whether an outcome is fair or lawful.' },
95
+ { question: 'Why can total votes and total seats be different?', answer: 'They are different units. Votes are normalized by total votes and seats by total seats, so the two totals do not need to match.' },
96
+ { question: 'How should I read the vote to seat ratio?', answer: 'It is vote share divided by seat share. A value of 1 means parity; above 1 means less seat share than vote share; a vote-only row has an infinite ratio.' },
97
+ { question: 'Does the result prove an electoral system is unfair?', answer: 'No. The indices describe the distance between two distributions. Electoral context, denominators, district rules, thresholds, and ballot treatment still need to be checked.' },
98
+ ],
99
+ bibliography,
100
+ howTo: [
101
+ { name: 'Enter the parties', text: 'Add one row for every party or list represented in both datasets.' },
102
+ { name: 'Enter votes and seats', text: 'Use the same election scope and enter the observed vote totals and seats won.' },
103
+ { name: 'Measure the gap', text: 'Run the analyzer to normalize both columns and calculate the three indices.' },
104
+ { name: 'Inspect the ribbons', text: 'Compare vote share, seat share, the percentage-point difference, and the vote to seat ratio for each row.' },
105
+ { name: 'Check the context', text: 'Read the formula notes and verify jurisdiction-specific rules before drawing a conclusion.' },
106
+ ],
107
+ schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[],
108
+ };
109
+
110
+ export const englishContent: VoteSeatLocaleContent = content;
@@ -0,0 +1,42 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { VoteSeatLocaleContent } from '../entry';
5
+
6
+ const ui = {
7
+ rowsLabel: 'Votos y escaños por partido o lista', rowsHelp: 'Introduce los votos recibidos y los escaños ganados para los mismos partidos. Cada columna se normaliza por separado.', partyNameLabel: 'Partido o lista', votesLabel: 'Votos', seatsLabel: 'Escaños', addRow: 'Añadir partido o lista', removeRow: 'Eliminar partido o lista', calculate: 'Medir la brecha', reset: 'Cargar ejemplo', resultLabel: 'Prensa de proporcionalidad', emptyState: 'Introduce votos y escaños y mide la brecha.', modelNotice: 'El modelo compara porcentaje de voto con porcentaje de escaños. No juzga la justicia, la ideología, la legalidad ni la calidad electoral.', totalVotesLabel: 'Votos totales', totalSeatsLabel: 'Escaños totales', gallagherLabel: 'Índice de Gallagher', loosemoreHanbyLabel: 'Loosemore-Hanby', sainteLagueLabel: 'Índice de Sainte-Laguë', maxGapLabel: 'Mayor brecha de proporción', voteShareLabel: 'Porcentaje de voto', seatShareLabel: 'Porcentaje de escaños', differenceLabel: 'Porcentaje de escaños menos porcentaje de voto', ratioLabel: 'Proporción voto escaño', directionLabel: 'Lectura', overrepresented: 'Más escaños que porcentaje de voto', underrepresented: 'Menos escaños que porcentaje de voto', aligned: 'Los porcentajes coinciden', detailLabel: 'Detalle por partido', zeroVoteNote: 'Sainte-Laguë usa solo las filas con al menos un voto en su denominador. Las filas sin votos siguen visibles en las otras medidas.', proportionNote: 'Los índices más bajos indican distribuciones más cercanas. Son medidas descriptivas, no un umbral legal.', errorPrefix: 'Revisa los datos', exactParity: 'Paridad exacta: cada porcentaje de voto coincide con su porcentaje de escaños.', resultGuide: 'Lee las cintas fila a fila: la distancia entre las marcas de voto y escaños es la brecha del partido.',
8
+ };
9
+
10
+ const softwareApplication: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Analizador de desproporcionalidad entre votos y escaños', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', description: 'Mide la distancia entre porcentajes de voto y escaños con índices de desproporcionalidad.', url: 'https://gamebob.dev/es/analizador-desproporcionalidad-votos-escanos', offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' } };
11
+ const faqPage: FAQPage = { '@type': 'FAQPage', mainEntity: [
12
+ { '@type': 'Question', name: '¿Qué mide el analizador?', acceptedAnswer: { '@type': 'Answer', text: 'Compara el porcentaje de voto de cada partido con su porcentaje de escaños y resume la distancia con Gallagher, Loosemore-Hanby y Sainte-Laguë. No decide si el resultado es justo o legal.' } },
13
+ { '@type': 'Question', name: '¿Por qué pueden ser distintos los totales de votos y escaños?', acceptedAnswer: { '@type': 'Answer', text: 'Son unidades diferentes. Los votos se normalizan por el total de votos y los escaños por el total de escaños.' } },
14
+ { '@type': 'Question', name: '¿Cómo interpreto la proporción voto escaño?', acceptedAnswer: { '@type': 'Answer', text: 'Es el porcentaje de voto dividido por el porcentaje de escaños. El valor 1 indica paridad; por encima de 1 hay menos escaños por porcentaje de voto.' } },
15
+ { '@type': 'Question', name: '¿Demuestra el resultado que un sistema electoral es injusto?', acceptedAnswer: { '@type': 'Answer', text: 'No. Los índices describen la distancia entre dos distribuciones y deben leerse junto con circunscripciones, umbrales, participación y tratamiento de los votos.' } },
16
+ ] };
17
+ const howTo: HowTo = { '@type': 'HowTo', name: 'Medir la desproporcionalidad entre votos y escaños', step: [{ '@type': 'HowToStep', name: 'Introduce los partidos', text: 'Añade una fila para cada partido o lista.' }, { '@type': 'HowToStep', name: 'Introduce votos y escaños', text: 'Usa el mismo ámbito electoral e introduce los totales observados.' }, { '@type': 'HowToStep', name: 'Mide la brecha', text: 'Ejecuta el análisis para normalizar ambas columnas y calcular los índices.' }, { '@type': 'HowToStep', name: 'Lee las cintas', text: 'Compara porcentajes, diferencia y proporción voto escaño por fila.' }, { '@type': 'HowToStep', name: 'Comprueba el contexto', text: 'Revisa las fórmulas y las reglas electorales aplicables.' }] };
18
+
19
+ export const content: ToolLocaleContent<VoteSeatLocaleContent['ui']> = {
20
+ slug: 'analizador-desproporcionalidad-votos-escanos', title: 'Analizador de desproporcionalidad entre votos y escaños', description: 'Compara porcentajes de voto y escaños y calcula los índices de Gallagher, Loosemore-Hanby y Sainte-Laguë a partir de datos electorales transparentes.', ui,
21
+ seo: [
22
+ { type: 'title', text: 'Mide la distancia entre votos y escaños', level: 2 },
23
+ { type: 'paragraph', html: 'Una elección puede dar a un partido un porcentaje de escaños muy distinto de su porcentaje de voto. Este analizador convierte las dos distribuciones observadas en porcentajes comparables y muestra qué partidos reciben más o menos representación relativa a sus votos. Cada total se normaliza por separado porque votos y escaños son unidades distintas.' },
24
+ { type: 'paragraph', html: 'El resultado no es un veredicto. Una diferencia positiva significa que el porcentaje de escaños es mayor; una negativa significa que es menor. Las cintas hacen visible el sentido de la diferencia antes de revisar los índices agregados.' },
25
+ { type: 'title', text: 'Qué aporta cada índice', level: 2 },
26
+ { type: 'paragraph', html: 'El índice de Gallagher es la raíz cuadrada de la mitad de la suma de las diferencias al cuadrado, expresadas en puntos porcentuales. Así, las brechas grandes pesan más. Loosemore-Hanby suma las diferencias absolutas y divide el resultado entre dos.' },
27
+ { type: 'paragraph', html: 'El índice de Sainte-Laguë usa proporciones y divide la diferencia al cuadrado entre la proporción de voto de cada fila con votos. Una fila sin votos no puede aportar ese denominador; por eso permanece en las otras medidas, pero no en esa parte del cálculo.' },
28
+ { type: 'table', headers: ['Medida', 'Cálculo', 'Pregunta útil'], rows: [['Gallagher', 'Raíz de la mitad de las brechas porcentuales al cuadrado.', '¿Qué brechas grandes dominan la distancia?'], ['Loosemore-Hanby', 'Mitad de la suma de las brechas porcentuales absolutas.', '¿Cuánto difiere la distribución en total?'], ['Sainte-Laguë', 'Brecha proporcional al cuadrado dividida por proporción de voto.', '¿Cómo pesa el denominador de voto?']] },
29
+ { type: 'title', text: 'Prepara datos electorales comparables', level: 2 },
30
+ { type: 'paragraph', html: 'Usa un ámbito electoral coherente: no mezcles votos nacionales con escaños regionales ni rondas diferentes. Los totales no tienen que ser iguales, pero cada fila debe referirse al mismo partido y al mismo resultado.' },
31
+ { type: 'list', items: ['Escribe nombres que identifiquen la misma entidad en ambas columnas.', 'Incluye partidos con votos y cero escaños para no ocultar su brecha.', 'Incluye filas con ceros solo si documentan una situación real del conjunto de datos.', 'Decide qué votos válidos, nulos, transferidos o excluidos forman parte del denominador.', 'Conserva los índices junto con la fuente para que otra persona pueda reproducirlos.'] },
32
+ { type: 'tip', title: 'Una proporción es una pista, no una causa', html: 'Un valor superior a 1 indica menos porcentaje de escaños que de votos, pero no explica por qué. Circunscripciones, umbrales, concentración geográfica, participación y fórmula electoral pueden ser relevantes.' },
33
+ { type: 'title', text: 'Conoce los límites antes de comparar', level: 2 },
34
+ { type: 'paragraph', html: 'Un índice menor significa que las distribuciones introducidas están más cerca, no que el sistema electoral sea universalmente mejor. Compara solo resultados con definiciones compatibles de votos, escaños, partidos, territorio y denominador.' },
35
+ { type: 'paragraph', html: 'El analizador no infiere ideología, intención, pactos, cumplimiento legal ni legitimidad democrática. Tampoco corrige un resultado oficial ni reconstruye un recuento de una jurisdicción concreta.' },
36
+ { type: 'tip', title: 'Empieza por la cinta más separada', html: 'Revisa primero el partido con la mayor brecha. Compara sus valores brutos y comprueba después que el tratamiento de los datos sea el mismo para todas las filas.' },
37
+ ],
38
+ faq: [{ question: '¿Qué mide el analizador?', answer: 'Compara porcentajes de voto y escaños y resume la distancia con Gallagher, Loosemore-Hanby y Sainte-Laguë.' }, { question: '¿Por qué los totales pueden ser distintos?', answer: 'Votos y escaños son unidades diferentes y se normalizan con sus propias sumas.' }, { question: '¿Cómo leo la proporción?', answer: 'Es porcentaje de voto dividido por porcentaje de escaños: 1 indica paridad y más de 1 indica menos representación por voto.' }, { question: '¿Demuestra injusticia?', answer: 'No. Describe una distancia y necesita el contexto de las reglas electorales.' }],
39
+ bibliography, howTo: [{ name: 'Introduce los partidos', text: 'Añade una fila por partido o lista.' }, { name: 'Introduce los valores', text: 'Escribe votos y escaños del mismo ámbito.' }, { name: 'Mide la brecha', text: 'Ejecuta el análisis y calcula los índices.' }, { name: 'Lee las cintas', text: 'Compara porcentajes y diferencias.' }, { name: 'Comprueba el contexto', text: 'Revisa las reglas electorales aplicables.' }], schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[],
40
+ };
41
+
42
+ export const spanishContent: VoteSeatLocaleContent = content;
@@ -0,0 +1,37 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { VoteSeatLocaleContent } from '../entry';
5
+
6
+ const ui = {
7
+ rowsLabel: 'Voix et sièges par parti ou liste', rowsHelp: 'Saisissez les voix reçues et les sièges remportés pour les mêmes partis. Chaque colonne est normalisée séparément.', partyNameLabel: 'Parti ou liste', votesLabel: 'Voix', seatsLabel: 'Sièges', addRow: 'Ajouter un parti ou une liste', removeRow: 'Supprimer le parti ou la liste', calculate: 'Mesurer l\u0027écart', reset: 'Charger l\u0027exemple', resultLabel: 'Presse de proportionnalité', emptyState: 'Saisissez les voix et les sièges, puis mesurez l\u0027écart.', modelNotice: 'Le modèle compare la part des voix à la part des sièges. Il ne juge ni l\u0027équité, ni l\u0027idéologie, ni la légalité, ni la qualité électorale.', totalVotesLabel: 'Total des voix', totalSeatsLabel: 'Total des sièges', gallagherLabel: 'Indice de Gallagher', loosemoreHanbyLabel: 'Loosemore-Hanby', sainteLagueLabel: 'Indice de Sainte-Laguë', maxGapLabel: 'Plus grand écart de part', voteShareLabel: 'Part des voix', seatShareLabel: 'Part des sièges', differenceLabel: 'Part des sièges moins part des voix', ratioLabel: 'Ratio voix sièges', directionLabel: 'Lecture', overrepresented: 'Plus de sièges que de voix', underrepresented: 'Moins de sièges que de voix', aligned: 'Parts alignées', detailLabel: 'Détail par parti', zeroVoteNote: 'Sainte-Laguë utilise seulement les lignes avec au moins une voix dans son dénominateur. Les lignes sans voix restent visibles dans les autres mesures.', proportionNote: 'Des indices plus faibles indiquent des distributions plus proches. Ce sont des mesures descriptives, pas un seuil juridique.', errorPrefix: 'Vérifiez les données', exactParity: 'Parité exacte: chaque part des voix correspond à sa part des sièges.', resultGuide: 'Lisez les rubans ligne par ligne: la distance entre les marques de voix et de sièges est l\u0027écart du parti.',
8
+ };
9
+
10
+ const softwareApplication: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Analyse de la disproportion entre voix et sièges', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', description: 'Mesure l écart entre parts de voix et parts de sièges avec des indices de disproportion.', url: 'https://gamebob.dev/fr/analyse-disproportion-voix-sieges', offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' } };
11
+ const faqPage: FAQPage = { '@type': 'FAQPage', mainEntity: [{ '@type': 'Question', name: 'Que mesure l analyse ?', acceptedAnswer: { '@type': 'Answer', text: 'Elle compare la part des voix et la part des sièges de chaque parti avec Gallagher, Loosemore-Hanby et Sainte-Laguë. Elle ne décide pas si le résultat est juste ou légal.' } }, { '@type': 'Question', name: 'Pourquoi les totaux de voix et de sièges peuvent-ils différer ?', acceptedAnswer: { '@type': 'Answer', text: 'Ce sont des unités différentes. Les voix sont normalisées par le total des voix et les sièges par le total des sièges.' } }, { '@type': 'Question', name: 'Comment lire le ratio voix sièges ?', acceptedAnswer: { '@type': 'Answer', text: 'Il correspond à la part des voix divisée par la part des sièges. 1 indique la parité ; une valeur supérieure à 1 indique une part de sièges moindre.' } }, { '@type': 'Question', name: 'Le résultat prouve-t-il un système injuste ?', acceptedAnswer: { '@type': 'Answer', text: 'Non. Les indices décrivent la distance entre deux distributions et doivent être lus avec les circonscriptions, seuils et dénominateurs.' } }] };
12
+ const howTo: HowTo = { '@type': 'HowTo', name: 'Mesurer la disproportion entre voix et sièges', step: [{ '@type': 'HowToStep', name: 'Saisir les partis', text: 'Ajoutez une ligne pour chaque parti ou liste.' }, { '@type': 'HowToStep', name: 'Saisir les voix et les sièges', text: 'Utilisez le même périmètre électoral et entrez les totaux observés.' }, { '@type': 'HowToStep', name: 'Mesurer l écart', text: 'Lancez l analyse pour normaliser les deux colonnes et calculer les indices.' }, { '@type': 'HowToStep', name: 'Lire les rubans', text: 'Comparez les parts, l écart et le ratio voix sièges par ligne.' }, { '@type': 'HowToStep', name: 'Vérifier le contexte', text: 'Relisez les formules et les règles électorales applicables.' }] };
13
+
14
+ export const content: ToolLocaleContent<VoteSeatLocaleContent['ui']> = {
15
+ slug: 'analyse-disproportion-voix-sieges', title: 'Analyse de la disproportion entre voix et sièges', description: 'Comparez les parts de voix et de sièges avec les indices de Gallagher, Loosemore-Hanby et Sainte-Laguë à partir de données électorales transparentes.', ui,
16
+ seo: [
17
+ { type: 'title', text: 'Mesurer la distance entre voix et sièges', level: 2 },
18
+ { type: 'paragraph', html: 'Une élection peut donner à un parti une part de sièges très différente de sa part de voix. Cette analyse rend les deux distributions comparables et montre quels partis reçoivent plus ou moins de représentation relative à leurs voix. Les voix et les sièges sont normalisés séparément car ce sont des unités différentes.' },
19
+ { type: 'paragraph', html: 'Le résultat n est pas un verdict. Un écart positif signifie une part de sièges supérieure ; un écart négatif signifie une part inférieure. Les rubans montrent cette direction avant les indices agrégés.' },
20
+ { type: 'title', text: 'Ce que chaque indice apporte', level: 2 },
21
+ { type: 'paragraph', html: 'L indice de Gallagher est la racine carrée de la moitié de la somme des écarts en points de pourcentage au carré. Les grands écarts pèsent donc davantage. Loosemore-Hanby additionne les écarts absolus et divise la somme par deux.' },
22
+ { type: 'paragraph', html: 'L indice de Sainte-Laguë utilise les proportions et divise l écart au carré par la proportion de voix de chaque ligne qui possède des voix. Une ligne sans voix ne fournit pas ce dénominateur et reste donc seulement dans les deux autres mesures.' },
23
+ { type: 'table', headers: ['Mesure', 'Calcul', 'Question utile'], rows: [['Gallagher', 'Racine de la moitié des écarts en points au carré.', 'Quels grands écarts dominent la distance ?'], ['Loosemore-Hanby', 'Moitié de la somme des écarts absolus en points.', 'Quelle est la différence totale de distribution ?'], ['Sainte-Laguë', 'Écart proportionnel au carré divisé par la part des voix.', 'Comment le dénominateur pondère-t-il l écart ?']] },
24
+ { type: 'title', text: 'Préparer des données électorales comparables', level: 2 },
25
+ { type: 'paragraph', html: 'Utilisez le même périmètre électoral et ne mélangez pas voix nationales et sièges régionaux. Les totaux ne doivent pas être égaux, mais chaque ligne doit désigner le même parti et le même résultat.' },
26
+ { type: 'list', items: ['Nommez clairement la même entité dans les deux colonnes.', 'Incluez les partis qui ont des voix mais aucun siège.', 'Utilisez les zéros seulement lorsqu ils décrivent réellement le jeu de données.', 'Déterminez quelles voix valides, nulles, transférées ou exclues entrent dans le dénominateur.', 'Conservez les indices avec la source afin de rendre le résultat reproductible.'] },
27
+ { type: 'tip', title: 'Un ratio est un indice, pas une cause', html: 'Un ratio supérieur à 1 indique moins de sièges que de voix en proportion. La taille des circonscriptions, les seuils, la concentration géographique, la participation et la formule électorale peuvent expliquer l écart.' },
28
+ { type: 'title', text: 'Connaître les limites avant de comparer', level: 2 },
29
+ { type: 'paragraph', html: 'Un indice plus faible signifie que les distributions saisies sont plus proches, pas que le système électoral est toujours meilleur. Les définitions des voix, des sièges, des partis, du territoire et du dénominateur doivent être compatibles.' },
30
+ { type: 'paragraph', html: 'L analyse n infère ni idéologie, ni intention, ni accord, ni conformité juridique, ni légitimité démocratique. Elle ne corrige pas un résultat officiel et ne reconstitue pas un dépouillement particulier.' },
31
+ { type: 'tip', title: 'Commencer par le ruban le plus éloigné', html: 'Examinez le parti associé au plus grand écart. Comparez ses valeurs brutes puis vérifiez que le traitement des données est identique pour toutes les lignes.' },
32
+ ],
33
+ faq: [{ question: 'Que mesure l\u0027analyse?', answer: 'Elle compare les parts de voix et de sièges et résume leur distance avec Gallagher, Loosemore-Hanby et Sainte-Laguë.' }, { question: 'Pourquoi les totaux diffèrent-ils?', answer: 'Les voix et les sièges sont des unités différentes et sont normalisés avec leurs propres totaux.' }, { question: 'Comment lire le ratio?', answer: 'C\u0027est la part des voix divisée par la part des sièges: 1 signifie la parité.' }, { question: 'Le résultat prouve-t-il une injustice?', answer: 'Non. Il décrit une distance et nécessite le contexte des règles électorales.' }],
34
+ bibliography, howTo: [{ name: 'Saisir les partis', text: 'Ajoutez une ligne par parti ou liste.' }, { name: 'Saisir les valeurs', text: 'Entrez les voix et sièges du même périmètre.' }, { name: 'Mesurer l écart', text: 'Lancez l analyse et calculez les indices.' }, { name: 'Lire les rubans', text: 'Comparez les parts et leurs écarts.' }, { name: 'Vérifier le contexte', text: 'Contrôlez les règles électorales applicables.' }], schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[],
35
+ };
36
+
37
+ export const frenchContent: VoteSeatLocaleContent = content;
@@ -0,0 +1,15 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { VoteSeatLocaleContent } from '../entry';
5
+
6
+ const ui = {
7
+ rowsLabel: 'Suara dan kursi per partai atau daftar', rowsHelp: 'Masukkan suara yang diterima dan kursi yang dimenangkan untuk partai yang sama. Setiap kolom dinormalisasi secara terpisah.', partyNameLabel: 'Partai atau daftar', votesLabel: 'Suara', seatsLabel: 'Kursi', addRow: 'Tambah partai atau daftar', removeRow: 'Hapus partai atau daftar', calculate: 'Ukur selisih', reset: 'Muat contoh', resultLabel: 'Tekanan proporsionalitas', emptyState: 'Masukkan suara dan kursi, lalu ukur selisihnya.', modelNotice: 'Model membandingkan pangsa suara dengan pangsa kursi. Model tidak menilai keadilan, ideologi, legalitas, atau mutu pemilu.', totalVotesLabel: 'Total suara', totalSeatsLabel: 'Total kursi', gallagherLabel: 'Indeks Gallagher', loosemoreHanbyLabel: 'Loosemore-Hanby', sainteLagueLabel: 'Indeks Sainte-Lague', maxGapLabel: 'Selisih pangsa terbesar', voteShareLabel: 'Pangsa suara', seatShareLabel: 'Pangsa kursi', differenceLabel: 'Pangsa kursi dikurangi pangsa suara', ratioLabel: 'Rasio suara terhadap kursi', directionLabel: 'Pembacaan', overrepresented: 'Kursi lebih banyak daripada pangsa suara', underrepresented: 'Kursi lebih sedikit daripada pangsa suara', aligned: 'Pangsa selaras', detailLabel: 'Rincian partai', zeroVoteNote: 'Sainte-Lague hanya memakai baris dengan sedikitnya satu suara sebagai penyebut. Baris tanpa suara tetap terlihat pada ukuran lain.', proportionNote: 'Nilai indeks yang lebih rendah berarti kedua distribusi lebih dekat. Nilai ini bersifat deskriptif, bukan ambang hukum.', errorPrefix: 'Periksa masukan', exactParity: 'Paritas tepat: setiap pangsa suara sama dengan pangsa kursinya.', resultGuide: 'Baca pita per baris: jarak antara penanda suara dan kursi adalah selisih tingkat partai.',
8
+ };
9
+ const softwareApplication: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Analisis ketidakseimbangan suara dan kursi', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', description: 'Mengukur jarak antara pangsa suara dan pangsa kursi dengan indeks ketidakseimbangan yang dikenal.', url: 'https://gamebob.dev/id/analisis-disproporsionalitas-suara-kursi', offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' } };
10
+ const faqPage: FAQPage = { '@type': 'FAQPage', mainEntity: [{ '@type': 'Question', name: 'Apa yang diukur analisis ini?', acceptedAnswer: { '@type': 'Answer', text: 'Analisis membandingkan pangsa suara dan kursi setiap partai dengan Gallagher, Loosemore-Hanby, dan Sainte-Lague. Analisis ini tidak menentukan apakah hasilnya adil atau sah.' } }, { '@type': 'Question', name: 'Mengapa total suara dan kursi berbeda?', acceptedAnswer: { '@type': 'Answer', text: 'Suara dan kursi adalah satuan yang berbeda. Suara dinormalisasi dengan total suara, sedangkan kursi dinormalisasi dengan total kursi.' } }, { '@type': 'Question', name: 'Bagaimana membaca rasio suara terhadap kursi?', acceptedAnswer: { '@type': 'Answer', text: 'Rasio ini adalah pangsa suara dibagi pangsa kursi. Nilai 1 berarti paritas, nilai di atas 1 berarti pangsa kursi lebih rendah.' } }, { '@type': 'Question', name: 'Apakah hasil membuktikan pemilu tidak adil?', acceptedAnswer: { '@type': 'Answer', text: 'Tidak. Indeks hanya menggambarkan jarak antara dua distribusi dan harus dibaca bersama aturan daerah pemilihan, ambang batas, dan penyebutnya.' } }] };
11
+ const howTo: HowTo = { '@type': 'HowTo', name: 'Mengukur ketidakseimbangan suara dan kursi', step: [{ '@type': 'HowToStep', name: 'Masukkan partai', text: 'Tambahkan satu baris untuk setiap partai atau daftar.' }, { '@type': 'HowToStep', name: 'Masukkan suara dan kursi', text: 'Gunakan wilayah pemilu yang sama dan masukkan total yang diamati.' }, { '@type': 'HowToStep', name: 'Ukur selisih', text: 'Jalankan analisis untuk menormalisasi kedua kolom dan menghitung indeks.' }, { '@type': 'HowToStep', name: 'Baca pita', text: 'Bandingkan pangsa, selisih, dan rasio setiap baris.' }, { '@type': 'HowToStep', name: 'Periksa konteks', text: 'Baca rumus dan aturan pemilu yang berlaku.' }] };
12
+ export const content: ToolLocaleContent<VoteSeatLocaleContent['ui']> = { slug: 'analisis-disproporsionalitas-suara-kursi', title: 'Analisis ketidakseimbangan suara dan kursi', description: 'Bandingkan pangsa suara dan kursi dengan indeks Gallagher, Loosemore-Hanby, dan Sainte-Lague dari data pemilu yang transparan.', ui,
13
+ seo: [{ type: 'title', text: 'Ukur jarak antara suara dan kursi', level: 2 }, { type: 'paragraph', html: 'Sebuah pemilu dapat memberikan suatu partai pangsa kursi yang sangat berbeda dari pangsa suaranya. Analisis ini membuat kedua distribusi dapat dibandingkan dan menunjukkan partai yang mendapat lebih banyak atau lebih sedikit perwakilan relatif terhadap suaranya. Suara dan kursi dinormalisasi sebagai satuan yang terpisah.' }, { type: 'paragraph', html: 'Hasilnya bukan putusan. Selisih positif berarti pangsa kursi lebih tinggi, sedangkan selisih negatif berarti lebih rendah. Pita menunjukkan arahnya sebelum indeks gabungan diperiksa.' }, { type: 'title', text: 'Apa yang ditunjukkan ketiga indeks', level: 2 }, { type: 'paragraph', html: 'Indeks Gallagher mengambil akar kuadrat dari setengah jumlah kuadrat selisih dalam poin persentase. Selisih besar mendapat bobot lebih besar. Loosemore-Hanby menjumlahkan selisih absolut lalu membaginya dua.' }, { type: 'paragraph', html: 'Indeks Sainte-Lague memakai pangsa dan membagi kuadrat selisih dengan pangsa suara setiap baris yang memiliki suara. Baris tanpa suara tidak memiliki penyebut tersebut dan hanya masuk dalam dua ukuran lain.' }, { type: 'table', headers: ['Ukuran', 'Perhitungan', 'Pertanyaan berguna'], rows: [['Gallagher', 'Akar dari setengah jumlah kuadrat selisih persentase.', 'Selisih besar mana yang paling berpengaruh?'], ['Loosemore-Hanby', 'Setengah jumlah selisih persentase absolut.', 'Berapa besar perbedaan distribusi secara keseluruhan?'], ['Sainte-Lague', 'Kuadrat selisih pangsa dibagi pangsa suara.', 'Bagaimana penyebut memberi bobot pada partai kecil?']] }, { type: 'title', text: 'Siapkan data pemilu yang sebanding', level: 2 }, { type: 'paragraph', html: 'Gunakan wilayah dan putaran pemilu yang sama. Jangan mencampur suara nasional dengan kursi regional. Totalnya tidak harus sama, tetapi setiap baris harus menggambarkan partai dan hasil yang sama.' }, { type: 'list', items: ['Gunakan nama partai yang jelas di kedua kolom.', 'Masukkan partai yang memiliki suara tetapi tidak memiliki kursi.', 'Gunakan nilai nol hanya jika benar-benar dicatat dalam data.', 'Tentukan suara sah, tidak sah, dialihkan, atau dikecualikan yang masuk penyebut.', 'Simpan indeks bersama sumber data agar hasil dapat diulang.'] }, { type: 'tip', title: 'Rasio bukan penyebab', html: 'Rasio di atas 1 menunjukkan pangsa kursi yang lebih rendah daripada pangsa suara. Ukuran daerah pemilihan, ambang batas, konsentrasi geografis, partisipasi, dan formula pemilu dapat menjelaskan selisihnya.' }, { type: 'title', text: 'Pahami batasan sebelum membandingkan', level: 2 }, { type: 'paragraph', html: 'Nilai yang lebih rendah berarti distribusi yang dimasukkan lebih dekat, bukan bahwa sistem pemilu pasti lebih baik. Bandingkan hanya data dengan definisi suara, kursi, partai, wilayah, dan penyebut yang cocok.' }, { type: 'paragraph', html: 'Analisis ini tidak menyimpulkan ideologi, niat, kesepakatan, kepatuhan hukum, atau legitimasi demokratis. Analisis ini juga tidak mengoreksi hasil resmi.' }, { type: 'tip', title: 'Mulai dari pita terjauh', html: 'Periksa partai dengan selisih terbesar terlebih dahulu. Bandingkan nilai mentahnya dan pastikan semua baris diperlakukan dengan cara yang sama.' }],
14
+ faq: [{ question: 'Apa yang diukur?', answer: 'Analisis membandingkan pangsa suara dan kursi lalu merangkum jaraknya dengan tiga indeks.' }, { question: 'Mengapa total berbeda?', answer: 'Suara dan kursi adalah satuan berbeda sehingga masing-masing memakai totalnya sendiri.' }, { question: 'Bagaimana membaca rasio?', answer: 'Pangsa suara dibagi pangsa kursi: 1 berarti paritas dan nilai lebih tinggi berarti kursi relatif lebih sedikit.' }, { question: 'Apakah ini membuktikan ketidakadilan?', answer: 'Tidak. Hasilnya hanya deskripsi dan memerlukan konteks aturan pemilu.' }], bibliography, howTo: [{ name: 'Masukkan partai', text: 'Tambahkan satu baris per partai atau daftar.' }, { name: 'Masukkan nilai', text: 'Isi suara dan kursi dari wilayah yang sama.' }, { name: 'Ukur selisih', text: 'Jalankan analisis dan hitung indeks.' }, { name: 'Baca pita', text: 'Bandingkan pangsa dan selisihnya.' }, { name: 'Periksa konteks', text: 'Periksa aturan pemilu yang berlaku.' }], schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[] };
15
+ export const indonesianContent: VoteSeatLocaleContent = content;
@@ -0,0 +1,10 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { VoteSeatLocaleContent } from '../entry';
5
+ const ui = { rowsLabel: 'Voti e seggi per partito o lista', rowsHelp: 'Inserisci i voti ricevuti e i seggi ottenuti per gli stessi partiti. Ogni colonna viene normalizzata separatamente.', partyNameLabel: 'Partito o lista', votesLabel: 'Voti', seatsLabel: 'Seggi', addRow: 'Aggiungi partito o lista', removeRow: 'Rimuovi partito o lista', calculate: 'Misura lo scarto', reset: 'Carica esempio', resultLabel: 'Pressa della proporzionalità', emptyState: 'Inserisci voti e seggi, poi misura lo scarto.', modelNotice: 'Il modello confronta la quota di voti con la quota di seggi. Non giudica equità, ideologia, legalità o qualità elettorale.', totalVotesLabel: 'Voti totali', totalSeatsLabel: 'Seggi totali', gallagherLabel: 'Indice di Gallagher', loosemoreHanbyLabel: 'Loosemore-Hanby', sainteLagueLabel: 'Indice di Sainte-Laguë', maxGapLabel: 'Scarto massimo tra quote', voteShareLabel: 'Quota di voti', seatShareLabel: 'Quota di seggi', differenceLabel: 'Quota di seggi meno quota di voti', ratioLabel: 'Rapporto voti-seggi', directionLabel: 'Lettura', overrepresented: 'Più seggi della quota di voti', underrepresented: 'Meno seggi della quota di voti', aligned: 'Quote allineate', detailLabel: 'Dettaglio del partito', zeroVoteNote: 'Sainte-Laguë usa nel denominatore solo le righe con almeno un voto. Le righe senza voti restano visibili nelle altre misure.', proportionNote: 'Valori più bassi indicano distribuzioni più vicine. Sono misure descrittive, non una soglia giuridica.', errorPrefix: 'Controlla i dati', exactParity: 'Parità esatta: ogni quota di voti coincide con la quota di seggi.', resultGuide: 'Leggi le fasce riga per riga: la distanza tra i marcatori di voti e seggi è lo scarto del partito.' };
6
+ const softwareApplication: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Analizzatore della sproporzione tra voti e seggi', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', description: 'Misura la distanza tra quote di voti e seggi con indici di sproporzionalità.', url: 'https://gamebob.dev/it/analizzatore-sproporzione-voti-seggi', offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' } };
7
+ const faqPage: FAQPage = { '@type': 'FAQPage', mainEntity: [{ '@type': 'Question', name: 'Che cosa misura l analisi?', acceptedAnswer: { '@type': 'Answer', text: 'Confronta la quota di voti e di seggi di ogni partito con Gallagher, Loosemore-Hanby e Sainte-Laguë. Non stabilisce se il risultato sia equo o legale.' } }, { '@type': 'Question', name: 'Perché i totali di voti e seggi possono differire?', acceptedAnswer: { '@type': 'Answer', text: 'Sono unità diverse e vengono normalizzate ciascuna con il proprio totale.' } }, { '@type': 'Question', name: 'Come si legge il rapporto voti-seggi?', acceptedAnswer: { '@type': 'Answer', text: 'È la quota di voti divisa per la quota di seggi. 1 indica parità, un valore superiore a 1 indica una quota di seggi minore.' } }, { '@type': 'Question', name: 'Il risultato prova che il sistema è ingiusto?', acceptedAnswer: { '@type': 'Answer', text: 'No. Gli indici descrivono una distanza e richiedono il contesto di collegi, soglie e denominatori.' } }] };
8
+ const howTo: HowTo = { '@type': 'HowTo', name: 'Misurare la sproporzione tra voti e seggi', step: [{ '@type': 'HowToStep', name: 'Inserisci i partiti', text: 'Aggiungi una riga per ogni partito o lista.' }, { '@type': 'HowToStep', name: 'Inserisci voti e seggi', text: 'Usa lo stesso ambito elettorale e inserisci i totali osservati.' }, { '@type': 'HowToStep', name: 'Misura lo scarto', text: 'Avvia l analisi per normalizzare le colonne e calcolare gli indici.' }, { '@type': 'HowToStep', name: 'Leggi le fasce', text: 'Confronta quote, differenza e rapporto di ogni riga.' }, { '@type': 'HowToStep', name: 'Controlla il contesto', text: 'Rileggi formule e regole elettorali applicabili.' }] };
9
+ export const content: ToolLocaleContent<VoteSeatLocaleContent['ui']> = { slug: 'analizzatore-sproporzione-voti-seggi', title: 'Analizzatore della sproporzione tra voti e seggi', description: 'Confronta quote di voti e seggi con gli indici di Gallagher, Loosemore-Hanby e Sainte-Laguë a partire da dati elettorali trasparenti.', ui, seo: [{ type: 'title', text: 'Misura la distanza tra voti e seggi', level: 2 }, { type: 'paragraph', html: 'Un elezione può assegnare a un partito una quota di seggi molto diversa dalla sua quota di voti. Questa analisi rende confrontabili le due distribuzioni e mostra quali partiti ricevono più o meno rappresentanza rispetto ai voti. Voti e seggi vengono normalizzati separatamente.' }, { type: 'paragraph', html: 'Il risultato non è un verdetto. Uno scarto positivo indica una quota di seggi maggiore, mentre uno negativo indica una quota minore. Le fasce mostrano la direzione prima degli indici complessivi.' }, { type: 'title', text: 'Che cosa mostrano i tre indici', level: 2 }, { type: 'paragraph', html: 'L indice di Gallagher è la radice quadrata della metà della somma degli scarti al quadrato in punti percentuali. Gli scarti grandi pesano di più. Loosemore-Hanby somma gli scarti assoluti e divide il risultato per due.' }, { type: 'paragraph', html: 'Sainte-Laguë usa le proporzioni e divide lo scarto al quadrato per la quota di voti di ogni riga con voti. Una riga senza voti non offre quel denominatore e resta quindi solo nelle altre due misure.' }, { type: 'table', headers: ['Misura', 'Calcolo', 'Domanda utile'], rows: [['Gallagher', 'Radice della metà degli scarti percentuali al quadrato.', 'Quali grandi scarti dominano la distanza?'], ['Loosemore-Hanby', 'Metà della somma degli scarti percentuali assoluti.', 'Quanto differisce in totale la distribuzione?'], ['Sainte-Laguë', 'Scarto proporzionale al quadrato diviso per la quota di voti.', 'Come pesa il denominatore?']] }, { type: 'title', text: 'Prepara dati elettorali confrontabili', level: 2 }, { type: 'paragraph', html: 'Usa lo stesso ambito elettorale e non mescolare voti nazionali e seggi regionali. I totali non devono essere uguali, ma ogni riga deve descrivere lo stesso partito e lo stesso risultato.' }, { type: 'list', items: ['Identifica chiaramente la stessa entità nelle due colonne.', 'Includi i partiti con voti ma senza seggi.', 'Usa valori zero solo quando sono documentati nel dataset.', 'Stabilisci quali voti validi, nulli o esclusi entrano nel denominatore.', 'Conserva gli indici insieme alla fonte per rendere il risultato riproducibile.'] }, { type: 'tip', title: 'Un rapporto non è una causa', html: 'Un valore superiore a 1 indica meno seggi rispetto alla quota di voti. Collegio, soglia, concentrazione geografica, partecipazione e formula possono spiegare lo scarto.' }, { type: 'title', text: 'Conosci i limiti prima del confronto', level: 2 }, { type: 'paragraph', html: 'Valori più bassi indicano distribuzioni inserite più vicine, non necessariamente un sistema migliore. Confronta dati con definizioni compatibili di voti, seggi, partiti, territorio e denominatore.' }, { type: 'paragraph', html: 'L analisi non deduce ideologia, intenzione, accordi, legalità o legittimità democratica. Non corregge un risultato ufficiale e non ricostruisce uno scrutinio locale.' }, { type: 'tip', title: 'Inizia dalla fascia più lontana', html: 'Esamina prima il partito con lo scarto maggiore. Confronta i valori grezzi e verifica che tutte le righe siano trattate allo stesso modo.' }], faq: [{ question: 'Che cosa misura?', answer: 'Confronta le quote di voti e seggi e riassume la distanza con tre indici.' }, { question: 'Perché i totali differiscono?', answer: 'Voti e seggi sono unità diverse e usano somme proprie.' }, { question: 'Come leggo il rapporto?', answer: 'È quota di voti divisa per quota di seggi: 1 significa parità.' }, { question: 'Prova un ingiustizia?', answer: 'No. Descrive una distanza e richiede il contesto delle regole.' }], bibliography, howTo: [{ name: 'Inserisci i partiti', text: 'Aggiungi una riga per partito o lista.' }, { name: 'Inserisci i valori', text: 'Inserisci voti e seggi dello stesso ambito.' }, { name: 'Misura lo scarto', text: 'Avvia l analisi e calcola gli indici.' }, { name: 'Leggi le fasce', text: 'Confronta quote e differenze.' }, { name: 'Controlla il contesto', text: 'Verifica le regole elettorali.' }], schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[] };
10
+ export const italianContent: VoteSeatLocaleContent = content;
@@ -0,0 +1,10 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { VoteSeatLocaleContent } from '../entry';
5
+ const ui = { rowsLabel: '政党または名簿ごとの得票数と議席数', rowsHelp: '同じ政党について得票数と獲得議席数を入力します。各列は別々に正規化されます。', partyNameLabel: '政党または名簿', votesLabel: '得票数', seatsLabel: '議席数', addRow: '政党または名簿を追加', removeRow: '政党または名簿を削除', calculate: '差を測定', reset: '例を読み込む', resultLabel: '比例性プレス', emptyState: '得票数と議席数を入力して差を測定してください。', modelNotice: 'モデルは得票率と議席率を比較します。公平性、思想、合法性、選挙の質は判定しません。', totalVotesLabel: '総得票数', totalSeatsLabel: '総議席数', gallagherLabel: 'ギャラガー指数', loosemoreHanbyLabel: 'ルースモア・ハンビー指数', sainteLagueLabel: 'サンテ・ラグ指数', maxGapLabel: '最大の割合差', voteShareLabel: '得票率', seatShareLabel: '議席率', differenceLabel: '議席率から得票率を引いた差', ratioLabel: '得票率と議席率の比率', directionLabel: '読み方', overrepresented: '得票率より議席率が高い', underrepresented: '得票率より議席率が低い', aligned: '割合が一致', detailLabel: '政党の詳細', zeroVoteNote: 'サンテ・ラグ指数の分母には1票以上ある行だけを使います。無投票の行は他の指標には表示されます。', proportionNote: '指数が低いほど2つの分布は近くなります。値は説明的な指標であり、法的基準ではありません。', errorPrefix: '入力を確認', exactParity: '完全一致: すべての得票率が議席率と一致しています。', resultGuide: '行ごとに帯を読みます。得票マークと議席マークの距離が政党ごとの差です。' };
6
+ const softwareApplication: SoftwareApplication = { '@type': 'SoftwareApplication', name: '得票数と議席数の不均衡分析', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', description: '透明な選挙データから得票率と議席率の差を測定します。', url: 'https://gamebob.dev/ja/tohyo-giseki-fukintou-bunseki', offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' } };
7
+ const faqPage: FAQPage = { '@type': 'FAQPage', mainEntity: [{ '@type': 'Question', name: 'この分析は何を測定しますか?', acceptedAnswer: { '@type': 'Answer', text: '各政党の得票率と議席率を比較し、ギャラガー、ルースモア・ハンビー、サンテ・ラグで差を要約します。公平性や合法性を決めるものではありません。' } }, { '@type': 'Question', name: '得票数と議席数の合計が違うのはなぜですか?', acceptedAnswer: { '@type': 'Answer', text: '得票数と議席数は異なる単位です。それぞれの合計を使って別々に正規化します。' } }, { '@type': 'Question', name: '得票率と議席率の比率はどう読みますか?', acceptedAnswer: { '@type': 'Answer', text: '得票率を議席率で割った値です。1は一致を示し、1を超えると議席率が相対的に低いことを示します。' } }, { '@type': 'Question', name: '結果は不公平な選挙制度を証明しますか?', acceptedAnswer: { '@type': 'Answer', text: 'いいえ。2つの分布の距離を示すだけなので、選挙区、阻止条項、参加率などの文脈が必要です。' } }] };
8
+ const howTo: HowTo = { '@type': 'HowTo', name: '得票数と議席数の不均衡を測定する', step: [{ '@type': 'HowToStep', name: '政党を入力', text: '政党または名簿ごとに1行を追加します。' }, { '@type': 'HowToStep', name: '得票数と議席数を入力', text: '同じ選挙範囲の観測値を入力します。' }, { '@type': 'HowToStep', name: '差を測定', text: '分析を実行して列を正規化し、指数を計算します。' }, { '@type': 'HowToStep', name: '帯を読む', text: '各行の割合、差、比率を比較します。' }, { '@type': 'HowToStep', name: '文脈を確認', text: '式と適用される選挙規則を確認します。' }] };
9
+ export const content: ToolLocaleContent<VoteSeatLocaleContent['ui']> = { slug: 'vote-seat-disproportionality-analyzer', title: '得票数と議席数の不均衡分析', description: '透明な選挙データからギャラガー、ルースモア・ハンビー、サンテ・ラグの指数で得票率と議席率を比較します。', ui, seo: [{ type: 'title', text: '得票数と議席数の差を測定する', level: 2 }, { type: 'paragraph', html: '選挙では、政党の議席率が得票率と大きく異なることがあります。この分析は観測された2つの分布を比較可能にし、得票に対して相対的に多い、または少ない議席を得た政党を示します。得票数と議席数は別々に正規化されます。' }, { type: 'paragraph', html: '結果は判定ではありません。正の差は議席率が高いこと、負の差は低いことを表します。帯表示で方向を確認してから全体指数を見られます。' }, { type: 'title', text: '3つの指数が示すこと', level: 2 }, { type: 'paragraph', html: 'ギャラガー指数は、パーセントポイント差の二乗和の半分の平方根です。大きな差をより重く扱います。ルースモア・ハンビー指数は絶対差を合計して半分にします。' }, { type: 'paragraph', html: 'サンテ・ラグ指数は、得票率が正の行について、割合差の二乗を得票率で割ります。得票数が0の行には分母がないため、この指数では除外されますが、他の表示には残ります。' }, { type: 'table', headers: ['指標', '計算', '役立つ問い'], rows: [['ギャラガー', 'パーセントポイント差の二乗和の半分の平方根。', 'どの大きな差が全体を左右するか?'], ['ルースモア・ハンビー', '絶対差の合計の半分。', '分布全体はどれほど異なるか?'], ['サンテ・ラグ', '割合差の二乗を得票率で割る。', '分母は小政党をどう重み付けするか?']] }, { type: 'title', text: '比較できる選挙データを準備する', level: 2 }, { type: 'paragraph', html: '同じ選挙範囲を使い、全国得票と地域議席を混ぜないでください。合計値は同じでなくても構いませんが、各行は同じ政党と結果を示す必要があります。' }, { type: 'list', items: ['両方の列で同じ対象を明確に名付ける。', '得票はあるが議席がない政党も含める。', '0はデータに記録された場合だけ使う。', '有効票、無効票、除外票のどれを分母に含めるか確認する。', '結果を再現できるよう出典と指数を保存する。'] }, { type: 'tip', title: '比率は原因ではない', html: '1を超える比率は、得票率に比べ議席率が低いことを示します。選挙区規模、阻止条項、地域集中、投票率、配分式が差の要因になり得ます。' }, { type: 'title', text: '比較前に限界を知る', level: 2 }, { type: 'paragraph', html: '低い指数は入力した分布が近いことを示すだけで、制度が常に優れていることを意味しません。得票、議席、政党、地域、分母の定義が一致するデータだけを比較してください。' }, { type: 'paragraph', html: 'この分析は思想、意図、合意、法令遵守、民主的正統性を推測しません。公式結果を訂正したり、特定地域の開票を再現したりもしません。' }, { type: 'tip', title: '最も離れた帯から始める', html: 'まず最大の差がある政党を確認し、実数を比較してから全行の扱いが同じか確認します。' }], faq: [{ question: '何を測定しますか?', answer: '得票率と議席率を比較し、3つの指数で距離を要約します。' }, { question: 'なぜ合計が違うのですか?', answer: '得票数と議席数は異なる単位で、それぞれ別の合計で正規化するためです。' }, { question: '比率はどう読みますか?', answer: '得票率を議席率で割ります。1は一致を示します。' }, { question: '不公平の証明ですか?', answer: 'いいえ。距離の説明であり、選挙規則の文脈が必要です。' }], bibliography, howTo: [{ name: '政党を入力', text: '政党または名簿ごとに行を追加します。' }, { name: '値を入力', text: '同じ選挙範囲の得票数と議席数を入力します。' }, { name: '差を測定', text: '分析を実行して指数を計算します。' }, { name: '帯を読む', text: '割合と差を比較します。' }, { name: '文脈を確認', text: '選挙規則を確認します。' }], schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[] };
10
+ export const japaneseContent: VoteSeatLocaleContent = content;
@@ -0,0 +1,10 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { VoteSeatLocaleContent } from '../entry';
5
+ const ui = { rowsLabel: '정당 또는 명부별 득표수와 의석수', rowsHelp: '같은 정당의 득표수와 획득 의석수를 입력하세요. 각 열은 따로 정규화됩니다.', partyNameLabel: '정당 또는 명부', votesLabel: '득표수', seatsLabel: '의석수', addRow: '정당 또는 명부 추가', removeRow: '정당 또는 명부 삭제', calculate: '차이 측정', reset: '예시 불러오기', resultLabel: '비례성 프레스', emptyState: '득표수와 의석수를 입력한 뒤 차이를 측정하세요.', modelNotice: '이 모델은 득표율과 의석률을 비교합니다. 공정성, 이념, 합법성, 선거의 질을 판단하지 않습니다.', totalVotesLabel: '총 득표수', totalSeatsLabel: '총 의석수', gallagherLabel: '갤러거 지수', loosemoreHanbyLabel: '루스모어-핸비 지수', sainteLagueLabel: '생트라귀 지수', maxGapLabel: '가장 큰 비율 차이', voteShareLabel: '득표율', seatShareLabel: '의석률', differenceLabel: '의석률에서 득표율을 뺀 값', ratioLabel: '득표율 대 의석률 비율', directionLabel: '해석', overrepresented: '득표율보다 의석률이 높음', underrepresented: '득표율보다 의석률이 낮음', aligned: '비율이 일치함', detailLabel: '정당별 상세', zeroVoteNote: '생트라귀 지수의 분모에는 한 표 이상인 행만 사용합니다. 무득표 행은 다른 측정값에 계속 표시됩니다.', proportionNote: '지수가 낮을수록 두 분포가 가깝습니다. 이는 설명적 측정값이며 법적 기준이 아닙니다.', errorPrefix: '입력 확인', exactParity: '완전 일치: 모든 득표율이 의석률과 같습니다.', resultGuide: '행별 띠를 읽으세요. 득표 표시와 의석 표시 사이의 거리가 정당별 차이입니다.' };
6
+ const softwareApplication: SoftwareApplication = { '@type': 'SoftwareApplication', name: '득표수와 의석수 불균형 분석기', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', description: '투명한 선거 데이터로 득표율과 의석률의 차이를 측정합니다.', url: 'https://gamebob.dev/ko/tupyo-uiseok-bulgyunhyeong-bunseok', offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' } };
7
+ const faqPage: FAQPage = { '@type': 'FAQPage', mainEntity: [{ '@type': 'Question', name: '이 분석은 무엇을 측정하나요?', acceptedAnswer: { '@type': 'Answer', text: '각 정당의 득표율과 의석률을 비교하고 갤러거, 루스모어-핸비, 생트라귀 지수로 차이를 요약합니다. 공정성이나 합법성을 결정하지 않습니다.' } }, { '@type': 'Question', name: '득표수와 의석수의 합계가 다른 이유는 무엇인가요?', acceptedAnswer: { '@type': 'Answer', text: '득표수와 의석수는 서로 다른 단위입니다. 각각 자신의 합계로 따로 정규화합니다.' } }, { '@type': 'Question', name: '득표율 대 의석률 비율은 어떻게 읽나요?', acceptedAnswer: { '@type': 'Answer', text: '득표율을 의석률로 나눈 값입니다. 1은 일치, 1보다 큰 값은 상대적으로 낮은 의석률을 뜻합니다.' } }, { '@type': 'Question', name: '결과가 불공정한 선거제도를 증명하나요?', acceptedAnswer: { '@type': 'Answer', text: '아니요. 두 분포 사이의 거리만 설명하며 선거구, 봉쇄조항, 투표율 등의 맥락이 필요합니다.' } }] };
8
+ const howTo: HowTo = { '@type': 'HowTo', name: '득표수와 의석수 불균형 측정하기', step: [{ '@type': 'HowToStep', name: '정당 입력', text: '정당 또는 명부마다 한 행을 추가합니다.' }, { '@type': 'HowToStep', name: '득표수와 의석수 입력', text: '같은 선거 범위의 관측 합계를 입력합니다.' }, { '@type': 'HowToStep', name: '차이 측정', text: '분석을 실행해 두 열을 정규화하고 지수를 계산합니다.' }, { '@type': 'HowToStep', name: '띠 읽기', text: '각 행의 비율, 차이, 비율값을 비교합니다.' }, { '@type': 'HowToStep', name: '맥락 확인', text: '공식과 해당 선거 규칙을 확인합니다.' }] };
9
+ export const content: ToolLocaleContent<VoteSeatLocaleContent['ui']> = { slug: 'vote-seat-disproportionality-analyzer', title: '득표수와 의석수 불균형 분석기', description: '투명한 선거 데이터에서 갤러거, 루스모어-핸비, 생트라귀 지수로 득표율과 의석률을 비교합니다.', ui, seo: [{ type: 'title', text: '득표수와 의석수의 차이 측정하기', level: 2 }, { type: 'paragraph', html: '선거에서는 정당의 의석률이 득표율과 크게 다를 수 있습니다. 이 분석은 관측된 두 분포를 비교 가능하게 만들고 득표에 비해 상대적으로 더 많거나 적은 대표성을 얻은 정당을 보여 줍니다. 득표수와 의석수는 별도로 정규화됩니다.' }, { type: 'paragraph', html: '결과는 판정이 아닙니다. 양의 차이는 의석률이 높음을, 음의 차이는 낮음을 뜻합니다. 전체 지수를 보기 전에 띠에서 방향을 확인할 수 있습니다.' }, { type: 'title', text: '세 지수가 보여 주는 것', level: 2 }, { type: 'paragraph', html: '갤러거 지수는 백분율 포인트 차이 제곱합의 절반에 제곱근을 취합니다. 큰 차이에 더 큰 가중치를 줍니다. 루스모어-핸비 지수는 절대 차이를 합한 뒤 절반으로 나눕니다.' }, { type: 'paragraph', html: '생트라귀 지수는 득표수가 있는 행의 득표율을 분모로 차이 제곱을 나눕니다. 무득표 행은 이 분모를 만들 수 없으므로 이 지수에서는 제외되고 다른 측정값에는 남습니다.' }, { type: 'table', headers: ['측정값', '계산', '유용한 질문'], rows: [['갤러거', '백분율 포인트 차이 제곱합의 절반의 제곱근.', '어떤 큰 차이가 전체 거리를 좌우하나?'], ['루스모어-핸비', '절대 백분율 포인트 차이 합의 절반.', '분포 전체는 얼마나 다른가?'], ['생트라귀', '비율 차이 제곱을 득표율로 나눔.', '분모는 소수 정당에 어떤 가중치를 주나?']] }, { type: 'title', text: '비교 가능한 선거 데이터 준비', level: 2 }, { type: 'paragraph', html: '같은 선거 범위를 사용하고 전국 득표수와 지역 의석수를 섞지 마세요. 합계는 같을 필요가 없지만 각 행은 같은 정당과 결과를 설명해야 합니다.' }, { type: 'list', items: ['두 열에서 같은 대상을 분명하게 이름 붙입니다.', '득표는 있지만 의석이 없는 정당도 포함합니다.', '데이터에 실제로 기록된 경우에만 0을 사용합니다.', '유효표, 무효표, 제외표 중 무엇을 분모에 넣을지 확인합니다.', '결과를 재현할 수 있도록 출처와 지수를 함께 보관합니다.'] }, { type: 'tip', title: '비율은 원인이 아닙니다', html: '1보다 큰 값은 득표율에 비해 의석률이 낮다는 뜻입니다. 선거구 크기, 봉쇄조항, 지역 집중도, 투표율, 배분 공식이 차이를 설명할 수 있습니다.' }, { type: 'title', text: '비교 전에 한계 이해하기', level: 2 }, { type: 'paragraph', html: '낮은 지수는 입력한 분포가 가깝다는 뜻일 뿐, 선거제도가 항상 더 좋다는 뜻은 아닙니다. 득표, 의석, 정당, 지역, 분모의 정의가 같은 데이터만 비교하세요.' }, { type: 'paragraph', html: '이 분석은 이념, 의도, 합의, 법적 준수, 민주적 정당성을 추론하지 않습니다. 공식 결과를 수정하거나 특정 지역의 개표를 재구성하지도 않습니다.' }, { type: 'tip', title: '가장 먼 띠부터 시작', html: '차이가 가장 큰 정당을 먼저 확인하세요. 원자료를 비교한 뒤 모든 행이 같은 방식으로 처리되었는지 확인합니다.' }], faq: [{ question: '무엇을 측정하나요?', answer: '득표율과 의석률을 비교하고 세 지수로 거리를 요약합니다.' }, { question: '합계가 왜 다른가요?', answer: '득표수와 의석수는 다른 단위라서 각자의 합계로 정규화합니다.' }, { question: '비율은 어떻게 읽나요?', answer: '득표율을 의석률로 나눈 값이며 1은 일치를 뜻합니다.' }, { question: '불공정의 증거인가요?', answer: '아니요. 거리를 설명하는 결과이며 선거 규칙의 맥락이 필요합니다.' }], bibliography, howTo: [{ name: '정당 입력', text: '정당 또는 명부마다 행을 추가합니다.' }, { name: '값 입력', text: '같은 범위의 득표수와 의석수를 입력합니다.' }, { name: '차이 측정', text: '분석을 실행하고 지수를 계산합니다.' }, { name: '띠 읽기', text: '비율과 차이를 비교합니다.' }, { name: '맥락 확인', text: '선거 규칙을 확인합니다.' }], schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[] };
10
+ export const koreanContent: VoteSeatLocaleContent = content;
@@ -0,0 +1,10 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { VoteSeatLocaleContent } from '../entry';
5
+ const ui = { rowsLabel: 'Stemmen en zetels per partij of lijst', rowsHelp: 'Vul de ontvangen stemmen en gewonnen zetels in voor dezelfde partijen. Elke kolom wordt apart genormaliseerd.', partyNameLabel: 'Partij of lijst', votesLabel: 'Stemmen', seatsLabel: 'Zetels', addRow: 'Partij of lijst toevoegen', removeRow: 'Partij of lijst verwijderen', calculate: 'Verschil meten', reset: 'Voorbeeld laden', resultLabel: 'Proportionaliteitsdruk', emptyState: 'Vul stemmen en zetels in en meet daarna het verschil.', modelNotice: 'Het model vergelijkt het stemmenaandeel met het zetelaandeel. Het beoordeelt geen eerlijkheid, ideologie, legaliteit of verkiezingskwaliteit.', totalVotesLabel: 'Totaal aantal stemmen', totalSeatsLabel: 'Totaal aantal zetels', gallagherLabel: 'Gallagher-index', loosemoreHanbyLabel: 'Loosemore-Hanby', sainteLagueLabel: 'Sainte-Laguë-index', maxGapLabel: 'Grootste verschil in aandeel', voteShareLabel: 'Stemmenaandeel', seatShareLabel: 'Zetelaandeel', differenceLabel: 'Zetelaandeel min stemmenaandeel', ratioLabel: 'Verhouding stemmen tot zetels', directionLabel: 'Leeswijze', overrepresented: 'Meer zetels dan stemmenaandeel', underrepresented: 'Minder zetels dan stemmenaandeel', aligned: 'Aandelen vallen samen', detailLabel: 'Partijdetail', zeroVoteNote: 'Sainte-Laguë gebruikt in de noemer alleen rijen met minstens één stem. Rijen zonder stemmen blijven zichtbaar in de andere maten.', proportionNote: 'Lagere indexwaarden betekenen dat de twee verdelingen dichter bij elkaar liggen. Het zijn beschrijvende maten, geen wettelijke grens.', errorPrefix: 'Controleer de invoer', exactParity: 'Exacte pariteit: elk stemmenaandeel is gelijk aan het zetelaandeel.', resultGuide: 'Lees de banden per rij: de afstand tussen de stem- en zetelmarkering is het verschil voor de partij.' };
6
+ const softwareApplication: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Analyse van onevenredigheid tussen stemmen en zetels', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', description: 'Meet het verschil tussen stemmenaandelen en zetelaandelen met bekende disproportionaliteitsindexen.', url: 'https://gamebob.dev/nl/analyse-stemmen-zetels-evenredigheid', offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' } };
7
+ const faqPage: FAQPage = { '@type': 'FAQPage', mainEntity: [{ '@type': 'Question', name: 'Wat meet de analyse?', acceptedAnswer: { '@type': 'Answer', text: 'Ze vergelijkt per partij het stemmenaandeel met het zetelaandeel en vat het verschil samen met Gallagher, Loosemore-Hanby en Sainte-Laguë. Ze beslist niet of de uitslag eerlijk of wettig is.' } }, { '@type': 'Question', name: 'Waarom kunnen de totalen verschillen?', acceptedAnswer: { '@type': 'Answer', text: 'Stemmen en zetels zijn verschillende eenheden. Beide worden met hun eigen totaal genormaliseerd.' } }, { '@type': 'Question', name: 'Hoe lees ik de verhouding stemmen tot zetels?', acceptedAnswer: { '@type': 'Answer', text: 'Het is het stemmenaandeel gedeeld door het zetelaandeel. 1 betekent pariteit, een waarde boven 1 een lager zetelaandeel.' } }, { '@type': 'Question', name: 'Bewijst de uitslag een oneerlijk systeem?', acceptedAnswer: { '@type': 'Answer', text: 'Nee. De indexen beschrijven alleen de afstand tussen twee verdelingen en vragen om context over districten, drempels en noemers.' } }] };
8
+ const howTo: HowTo = { '@type': 'HowTo', name: 'Onevenredigheid tussen stemmen en zetels meten', step: [{ '@type': 'HowToStep', name: 'Partijen invoeren', text: 'Voeg voor elke partij of lijst een rij toe.' }, { '@type': 'HowToStep', name: 'Stemmen en zetels invoeren', text: 'Gebruik hetzelfde verkiezingsgebied en vul de waargenomen totalen in.' }, { '@type': 'HowToStep', name: 'Verschil meten', text: 'Start de analyse om beide kolommen te normaliseren en de indexen te berekenen.' }, { '@type': 'HowToStep', name: 'Banden lezen', text: 'Vergelijk per rij het aandeel, verschil en de verhouding.' }, { '@type': 'HowToStep', name: 'Context controleren', text: 'Lees de formules en toepasselijke verkiezingsregels na.' }] };
9
+ export const content: ToolLocaleContent<VoteSeatLocaleContent['ui']> = { slug: 'analyse-stemmen-zetels-evenredigheid', title: 'Analyse van onevenredigheid tussen stemmen en zetels', description: 'Vergelijk stemmenaandelen en zetelaandelen met de Gallagher-, Loosemore-Hanby- en Sainte-Laguë-index op basis van transparante verkiezingsdata.', ui, seo: [{ type: 'title', text: 'Het verschil tussen stemmen en zetels meten', level: 2 }, { type: 'paragraph', html: 'Een verkiezing kan een partij een heel ander zetelaandeel geven dan stemmenaandeel. Deze analyse maakt de twee waargenomen verdelingen vergelijkbaar en laat zien welke partijen relatief meer of minder vertegenwoordiging krijgen. Stemmen en zetels worden afzonderlijk genormaliseerd.' }, { type: 'paragraph', html: 'De uitkomst is geen oordeel. Een positief verschil betekent een hoger zetelaandeel, een negatief verschil een lager aandeel. De banden laten de richting zien voordat de samengevoegde indexen worden bekeken.' }, { type: 'title', text: 'Wat de drie indexen zichtbaar maken', level: 2 }, { type: 'paragraph', html: 'De Gallagher-index is de wortel uit de helft van de som van gekwadrateerde verschillen in procentpunten. Grote afwijkingen tellen zwaarder. Loosemore-Hanby telt absolute verschillen op en deelt de som door twee.' }, { type: 'paragraph', html: 'De Sainte-Laguë-index gebruikt aandelen en deelt het gekwadrateerde verschil door het stemmenaandeel van elke rij met stemmen. Een rij zonder stemmen levert geen noemer en blijft daarom alleen in de andere twee maten.' }, { type: 'table', headers: ['Maat', 'Berekening', 'Nuttige vraag'], rows: [['Gallagher', 'Wortel uit de helft van de gekwadrateerde procentpuntverschillen.', 'Welke grote verschillen bepalen de afstand?'], ['Loosemore-Hanby', 'De helft van de som van absolute procentpuntverschillen.', 'Hoeveel wijkt de verdeling totaal af?'], ['Sainte-Laguë', 'Gekwadrateerd aandeelverschil gedeeld door stemmenaandeel.', 'Hoe weegt de noemer kleine partijen?']] }, { type: 'title', text: 'Vergelijkbare verkiezingsdata voorbereiden', level: 2 }, { type: 'paragraph', html: 'Gebruik hetzelfde verkiezingsgebied en meng geen nationale stemmen met regionale zetels. De totalen hoeven niet gelijk te zijn, maar elke rij moet dezelfde partij en uitslag beschrijven.' }, { type: 'list', items: ['Benoem dezelfde partij duidelijk in beide kolommen.', 'Neem partijen met stemmen maar zonder zetels op.', 'Gebruik nulwaarden alleen als ze in de dataset zijn vastgelegd.', 'Controleer welke geldige, ongeldige of uitgesloten stemmen in de noemer horen.', 'Bewaar de indexen met hun bron zodat het resultaat reproduceerbaar blijft.'] }, { type: 'tip', title: 'Een verhouding is geen oorzaak', html: 'Een waarde boven 1 wijst op minder zetels dan stemmenaandeel. Districtsgrootte, drempels, geografische concentratie, opkomst en de zetelverdelingsformule kunnen het verschil verklaren.' }, { type: 'title', text: 'Ken de grenzen voor je vergelijkt', level: 2 }, { type: 'paragraph', html: 'Lagere waarden betekenen dat de ingevoerde verdelingen dichter bij elkaar liggen, niet dat een kiesstelsel automatisch beter is. Vergelijk alleen gegevens met dezelfde definities van stemmen, zetels, partijen, gebied en noemer.' }, { type: 'paragraph', html: 'De analyse leidt geen ideologie, bedoeling, afspraak, wettelijke naleving of democratische legitimiteit af. Ze corrigeert geen officiële uitslag en reconstrueert geen specifieke telling.' }, { type: 'tip', title: 'Begin met de verste band', html: 'Bekijk eerst de partij met het grootste verschil. Vergelijk de ruwe waarden en controleer daarna of elke rij op dezelfde manier is behandeld.' }], faq: [{ question: 'Wat meet de analyse?', answer: 'Ze vergelijkt stemmenaandelen en zetelaandelen en vat de afstand samen met drie indexen.' }, { question: 'Waarom verschillen de totalen?', answer: 'Stemmen en zetels zijn verschillende eenheden met een eigen totaal.' }, { question: 'Hoe lees ik de verhouding?', answer: 'Stemmenaandeel gedeeld door zetelaandeel: 1 betekent pariteit.' }, { question: 'Bewijst dit oneerlijkheid?', answer: 'Nee. Het beschrijft een afstand en heeft context over verkiezingsregels nodig.' }], bibliography, howTo: [{ name: 'Partijen invoeren', text: 'Voeg een rij per partij of lijst toe.' }, { name: 'Waarden invoeren', text: 'Vul stemmen en zetels uit hetzelfde gebied in.' }, { name: 'Verschil meten', text: 'Start de analyse en bereken de indexen.' }, { name: 'Banden lezen', text: 'Vergelijk aandelen en verschillen.' }, { name: 'Context controleren', text: 'Controleer de toepasselijke regels.' }], schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[] };
10
+ export const dutchContent: VoteSeatLocaleContent = content;
@@ -0,0 +1,10 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { VoteSeatLocaleContent } from '../entry';
5
+ const ui = { rowsLabel: 'Głosy i mandaty według partii lub listy', rowsHelp: 'Wpisz głosy otrzymane i zdobyte mandaty dla tych samych partii. Każda kolumna jest normalizowana osobno.', partyNameLabel: 'Partia lub lista', votesLabel: 'Głosy', seatsLabel: 'Mandaty', addRow: 'Dodaj partię lub listę', removeRow: 'Usuń partię lub listę', calculate: 'Zmierz różnicę', reset: 'Wczytaj przykład', resultLabel: 'Prasa proporcjonalności', emptyState: 'Wpisz głosy i mandaty, a następnie zmierz różnicę.', modelNotice: 'Model porównuje udział głosów z udziałem mandatów. Nie ocenia sprawiedliwości, ideologii, legalności ani jakości wyborów.', totalVotesLabel: 'Łącznie głosów', totalSeatsLabel: 'Łącznie mandatów', gallagherLabel: 'Indeks Gallaghera', loosemoreHanbyLabel: 'Loosemore-Hanby', sainteLagueLabel: 'Indeks Sainte-Laguë', maxGapLabel: 'Największa różnica udziałów', voteShareLabel: 'Udział głosów', seatShareLabel: 'Udział mandatów', differenceLabel: 'Udział mandatów minus udział głosów', ratioLabel: 'Stosunek głosów do mandatów', directionLabel: 'Odczyt', overrepresented: 'Więcej mandatów niż wynika z udziału głosów', underrepresented: 'Mniej mandatów niż wynika z udziału głosów', aligned: 'Udziały są zgodne', detailLabel: 'Szczegóły partii', zeroVoteNote: 'Sainte-Laguë używa w mianowniku tylko wierszy z co najmniej jednym głosem. Wiersze bez głosów pozostają widoczne w pozostałych miarach.', proportionNote: 'Niższe wartości indeksów oznaczają bliższe rozkłady. To miary opisowe, a nie próg prawny.', errorPrefix: 'Sprawdź dane', exactParity: 'Dokładna parytetowość: każdy udział głosów odpowiada udziałowi mandatów.', resultGuide: 'Czytaj pasma wierszami: odległość między znacznikami głosów i mandatów to różnica dla partii.' };
6
+ const softwareApplication: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Analizator niewspółmierności głosów i mandatów', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', description: 'Mierzy różnicę między udziałem głosów i mandatów za pomocą znanych indeksów niewspółmierności.', url: 'https://gamebob.dev/pl/analizator-niewspolmiernosci-glosy-mandaty', offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' } };
7
+ const faqPage: FAQPage = { '@type': 'FAQPage', mainEntity: [{ '@type': 'Question', name: 'Co mierzy analiza?', acceptedAnswer: { '@type': 'Answer', text: 'Porównuje udział głosów i mandatów każdej partii oraz podsumowuje różnicę indeksami Gallaghera, Loosemore-Hanby i Sainte-Laguë. Nie rozstrzyga, czy wynik jest sprawiedliwy lub legalny.' } }, { '@type': 'Question', name: 'Dlaczego sumy głosów i mandatów mogą być różne?', acceptedAnswer: { '@type': 'Answer', text: 'To różne jednostki. Głosy są normalizowane przez sumę głosów, a mandaty przez sumę mandatów.' } }, { '@type': 'Question', name: 'Jak czytać stosunek głosów do mandatów?', acceptedAnswer: { '@type': 'Answer', text: 'To udział głosów podzielony przez udział mandatów. 1 oznacza zgodność, a wartość powyżej 1 oznacza niższy udział mandatów.' } }, { '@type': 'Question', name: 'Czy wynik dowodzi niesprawiedliwości systemu?', acceptedAnswer: { '@type': 'Answer', text: 'Nie. Indeksy opisują odległość między dwoma rozkładami i wymagają kontekstu okręgów, progów oraz mianowników.' } }] };
8
+ const howTo: HowTo = { '@type': 'HowTo', name: 'Mierzenie niewspółmierności głosów i mandatów', step: [{ '@type': 'HowToStep', name: 'Wpisz partie', text: 'Dodaj wiersz dla każdej partii lub listy.' }, { '@type': 'HowToStep', name: 'Wpisz głosy i mandaty', text: 'Użyj tego samego zakresu wyborczego i wpisz zaobserwowane sumy.' }, { '@type': 'HowToStep', name: 'Zmierz różnicę', text: 'Uruchom analizę, aby znormalizować kolumny i obliczyć indeksy.' }, { '@type': 'HowToStep', name: 'Odczytaj pasma', text: 'Porównaj udział, różnicę i stosunek w każdym wierszu.' }, { '@type': 'HowToStep', name: 'Sprawdź kontekst', text: 'Przeczytaj wzory i obowiązujące zasady wyborcze.' }] };
9
+ export const content: ToolLocaleContent<VoteSeatLocaleContent['ui']> = { slug: 'analizator-niewspolmiernosci-glosy-mandaty', title: 'Analizator niewspółmierności głosów i mandatów', description: 'Porównuj udział głosów i mandatów za pomocą indeksów Gallaghera, Loosemore-Hanby i Sainte-Laguë na podstawie przejrzystych danych wyborczych.', ui, seo: [{ type: 'title', text: 'Zmierz różnicę między głosami a mandatami', level: 2 }, { type: 'paragraph', html: 'Wybory mogą dać partii udział mandatów znacznie różny od jej udziału głosów. Analiza porównuje oba zaobserwowane rozkłady i pokazuje partie z większą lub mniejszą reprezentacją względem głosów. Głosy i mandaty są normalizowane osobno.' }, { type: 'paragraph', html: 'Wynik nie jest werdyktem. Dodatnia różnica oznacza wyższy udział mandatów, a ujemna niższy. Pasma pokazują kierunek przed sprawdzeniem indeksów zbiorczych.' }, { type: 'title', text: 'Co pokazują trzy indeksy', level: 2 }, { type: 'paragraph', html: 'Indeks Gallaghera to pierwiastek z połowy sumy kwadratów różnic w punktach procentowych. Duże odchylenia ważą więcej. Loosemore-Hanby sumuje wartości bezwzględne i dzieli wynik przez dwa.' }, { type: 'paragraph', html: 'Indeks Sainte-Laguë dzieli kwadrat różnicy udziałów przez udział głosów w każdym wierszu z głosami. Wiersz bez głosów nie ma takiego mianownika i pozostaje tylko w dwóch pozostałych miarach.' }, { type: 'table', headers: ['Miara', 'Obliczenie', 'Przydatne pytanie'], rows: [['Gallagher', 'Pierwiastek z połowy sumy kwadratów różnic procentowych.', 'Które duże różnice dominują odległość?'], ['Loosemore-Hanby', 'Połowa sumy bezwzględnych różnic procentowych.', 'Jak bardzo różni się cały rozkład?'], ['Sainte-Laguë', 'Kwadrat różnicy udziałów podzielony przez udział głosów.', 'Jak mianownik waży małe partie?']] }, { type: 'title', text: 'Przygotuj porównywalne dane wyborcze', level: 2 }, { type: 'paragraph', html: 'Użyj tego samego zakresu wyborczego i nie mieszaj głosów krajowych z mandatami regionalnymi. Sumy nie muszą być równe, ale każdy wiersz musi opisywać tę samą partię i ten sam wynik.' }, { type: 'list', items: ['Jasno nazwij tę samą jednostkę w obu kolumnach.', 'Uwzględnij partie z głosami, lecz bez mandatów.', 'Wpisuj zera tylko wtedy, gdy są udokumentowane w danych.', 'Ustal, które głosy ważne, nieważne lub wykluczone należą do mianownika.', 'Zachowaj indeksy ze źródłem, aby wynik można było odtworzyć.'] }, { type: 'tip', title: 'Stosunek nie wyjaśnia przyczyny', html: 'Wartość powyżej 1 wskazuje na niższy udział mandatów niż głosów. Wielkość okręgów, progi, koncentracja geograficzna, frekwencja i formuła wyborcza mogą wyjaśniać różnicę.' }, { type: 'title', text: 'Poznaj ograniczenia przed porównaniem', level: 2 }, { type: 'paragraph', html: 'Niższe wartości oznaczają bliższe rozkłady danych, nie automatycznie lepszy system wyborczy. Porównuj dane o zgodnych definicjach głosów, mandatów, partii, terytorium i mianownika.' }, { type: 'paragraph', html: 'Analiza nie wnioskuje o ideologii, zamiarach, porozumieniach, zgodności z prawem ani legitymacji demokratycznej. Nie poprawia oficjalnego wyniku ani nie odtwarza konkretnego liczenia.' }, { type: 'tip', title: 'Zacznij od najbardziej oddalonego pasma', html: 'Najpierw sprawdź partię z największą różnicą. Porównaj wartości surowe i upewnij się, że wszystkie wiersze potraktowano tak samo.' }], faq: [{ question: 'Co mierzy analiza?', answer: 'Porównuje udziały głosów i mandatów oraz podsumowuje odległość trzema indeksami.' }, { question: 'Dlaczego sumy się różnią?', answer: 'Głosy i mandaty są różnymi jednostkami i mają własne sumy.' }, { question: 'Jak czytać stosunek?', answer: 'To udział głosów podzielony przez udział mandatów: 1 oznacza zgodność.' }, { question: 'Czy to dowód niesprawiedliwości?', answer: 'Nie. To opis odległości wymagający kontekstu reguł wyborczych.' }], bibliography, howTo: [{ name: 'Wpisz partie', text: 'Dodaj wiersz dla partii lub listy.' }, { name: 'Wpisz wartości', text: 'Wpisz głosy i mandaty z tego samego zakresu.' }, { name: 'Zmierz różnicę', text: 'Uruchom analizę i oblicz indeksy.' }, { name: 'Odczytaj pasma', text: 'Porównaj udziały i różnice.' }, { name: 'Sprawdź kontekst', text: 'Zweryfikuj obowiązujące zasady.' }], schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[] };
10
+ export const polishContent: VoteSeatLocaleContent = content;
@@ -0,0 +1,10 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { VoteSeatLocaleContent } from '../entry';
5
+ const ui = { rowsLabel: 'Votos e assentos por partido ou lista', rowsHelp: 'Introduza os votos recebidos e os assentos conquistados para os mesmos partidos. Cada coluna é normalizada separadamente.', partyNameLabel: 'Partido ou lista', votesLabel: 'Votos', seatsLabel: 'Assentos', addRow: 'Adicionar partido ou lista', removeRow: 'Remover partido ou lista', calculate: 'Medir a diferença', reset: 'Carregar exemplo', resultLabel: 'Prensa de proporcionalidade', emptyState: 'Introduza votos e assentos e meça a diferença.', modelNotice: 'O modelo compara a percentagem de votos com a percentagem de assentos. Não avalia justiça, ideologia, legalidade ou qualidade eleitoral.', totalVotesLabel: 'Total de votos', totalSeatsLabel: 'Total de assentos', gallagherLabel: 'Índice de Gallagher', loosemoreHanbyLabel: 'Loosemore-Hanby', sainteLagueLabel: 'Índice de Sainte-Laguë', maxGapLabel: 'Maior diferença entre percentagens', voteShareLabel: 'Percentagem de votos', seatShareLabel: 'Percentagem de assentos', differenceLabel: 'Percentagem de assentos menos percentagem de votos', ratioLabel: 'Rácio votos-assentos', directionLabel: 'Leitura', overrepresented: 'Mais assentos do que a percentagem de votos', underrepresented: 'Menos assentos do que a percentagem de votos', aligned: 'Percentagens alinhadas', detailLabel: 'Detalhe do partido', zeroVoteNote: 'Sainte-Laguë usa no denominador apenas linhas com pelo menos um voto. Linhas sem votos continuam visíveis nas outras medidas.', proportionNote: 'Valores mais baixos indicam distribuições mais próximas. São medidas descritivas, não um limite legal.', errorPrefix: 'Verifique os dados', exactParity: 'Paridade exata: cada percentagem de votos corresponde à percentagem de assentos.', resultGuide: 'Leia as faixas por linha: a distância entre as marcas de votos e assentos é a diferença do partido.' };
6
+ const softwareApplication: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Analisador de desproporcionalidade entre votos e assentos', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', description: 'Mede a distância entre percentagens de votos e de assentos com índices de desproporcionalidade.', url: 'https://gamebob.dev/pt/analisador-desproporcionalidade-votos-assentos', offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' } };
7
+ const faqPage: FAQPage = { '@type': 'FAQPage', mainEntity: [{ '@type': 'Question', name: 'O que mede a análise?', acceptedAnswer: { '@type': 'Answer', text: 'Compara as percentagens de votos e assentos de cada partido e resume a distância com Gallagher, Loosemore-Hanby e Sainte-Laguë. Não decide se o resultado é justo ou legal.' } }, { '@type': 'Question', name: 'Porque podem ser diferentes os totais de votos e assentos?', acceptedAnswer: { '@type': 'Answer', text: 'São unidades diferentes. Os votos são normalizados pelo total de votos e os assentos pelo total de assentos.' } }, { '@type': 'Question', name: 'Como interpreto o rácio votos-assentos?', acceptedAnswer: { '@type': 'Answer', text: 'É a percentagem de votos dividida pela percentagem de assentos. 1 indica paridade; acima de 1 há uma percentagem menor de assentos.' } }, { '@type': 'Question', name: 'O resultado prova que um sistema é injusto?', acceptedAnswer: { '@type': 'Answer', text: 'Não. Os índices descrevem a distância entre duas distribuições e exigem contexto sobre círculos, limiares e denominadores.' } }] };
8
+ const howTo: HowTo = { '@type': 'HowTo', name: 'Medir a desproporcionalidade entre votos e assentos', step: [{ '@type': 'HowToStep', name: 'Introduzir partidos', text: 'Adicione uma linha para cada partido ou lista.' }, { '@type': 'HowToStep', name: 'Introduzir votos e assentos', text: 'Use o mesmo âmbito eleitoral e introduza os totais observados.' }, { '@type': 'HowToStep', name: 'Medir a diferença', text: 'Execute a análise para normalizar as colunas e calcular os índices.' }, { '@type': 'HowToStep', name: 'Ler as faixas', text: 'Compare percentagens, diferença e rácio em cada linha.' }, { '@type': 'HowToStep', name: 'Verificar o contexto', text: 'Leia as fórmulas e as regras eleitorais aplicáveis.' }] };
9
+ export const content: ToolLocaleContent<VoteSeatLocaleContent['ui']> = { slug: 'analisador-desproporcionalidade-votos-assentos', title: 'Analisador de desproporcionalidade entre votos e assentos', description: 'Compare percentagens de votos e assentos com os índices de Gallagher, Loosemore-Hanby e Sainte-Laguë a partir de dados eleitorais transparentes.', ui, seo: [{ type: 'title', text: 'Meça a distância entre votos e assentos', level: 2 }, { type: 'paragraph', html: 'Uma eleição pode dar a um partido uma percentagem de assentos muito diferente da sua percentagem de votos. Esta análise torna as duas distribuições comparáveis e mostra quais os partidos que recebem mais ou menos representação relativa aos votos. Votos e assentos são normalizados separadamente.' }, { type: 'paragraph', html: 'O resultado não é um veredito. Uma diferença positiva significa uma percentagem maior de assentos e uma diferença negativa uma percentagem menor. As faixas mostram a direção antes dos índices agregados.' }, { type: 'title', text: 'O que mostram os três índices', level: 2 }, { type: 'paragraph', html: 'O índice de Gallagher é a raiz quadrada de metade da soma das diferenças ao quadrado em pontos percentuais. As diferenças grandes pesam mais. Loosemore-Hanby soma as diferenças absolutas e divide o total por dois.' }, { type: 'paragraph', html: 'O índice de Sainte-Laguë usa proporções e divide a diferença ao quadrado pela proporção de votos de cada linha com votos. Uma linha sem votos não tem esse denominador e fica apenas nas outras duas medidas.' }, { type: 'table', headers: ['Medida', 'Cálculo', 'Pergunta útil'], rows: [['Gallagher', 'Raiz de metade das diferenças percentuais ao quadrado.', 'Que diferenças grandes dominam a distância?'], ['Loosemore-Hanby', 'Metade da soma das diferenças percentuais absolutas.', 'Quanto difere a distribuição no total?'], ['Sainte-Laguë', 'Diferença proporcional ao quadrado dividida pela proporção de votos.', 'Como pesa o denominador?']] }, { type: 'title', text: 'Prepare dados eleitorais comparáveis', level: 2 }, { type: 'paragraph', html: 'Use o mesmo âmbito eleitoral e não misture votos nacionais com assentos regionais. Os totais não precisam de ser iguais, mas cada linha deve descrever o mesmo partido e o mesmo resultado.' }, { type: 'list', items: ['Identifique claramente a mesma entidade nas duas colunas.', 'Inclua partidos com votos mas sem assentos.', 'Use zeros apenas quando estiverem documentados no conjunto de dados.', 'Defina quais os votos válidos, nulos ou excluídos que entram no denominador.', 'Guarde os índices com a fonte para que o resultado seja reproduzível.'] }, { type: 'tip', title: 'Um rácio não é uma causa', html: 'Um valor acima de 1 indica menos assentos do que votos em proporção. Tamanho dos círculos, limiares, concentração geográfica, participação e fórmula eleitoral podem explicar a diferença.' }, { type: 'title', text: 'Conheça os limites antes de comparar', level: 2 }, { type: 'paragraph', html: 'Valores mais baixos significam que as distribuições introduzidas estão mais próximas, não que o sistema eleitoral seja sempre melhor. Compare apenas dados com definições compatíveis de votos, assentos, partidos, território e denominador.' }, { type: 'paragraph', html: 'A análise não infere ideologia, intenção, acordos, cumprimento legal ou legitimidade democrática. Também não corrige um resultado oficial nem reconstrói uma contagem específica.' }, { type: 'tip', title: 'Comece pela faixa mais distante', html: 'Veja primeiro o partido com a maior diferença. Compare os valores brutos e confirme depois que todas as linhas foram tratadas da mesma forma.' }], faq: [{ question: 'O que mede?', answer: 'Compara percentagens de votos e assentos e resume a distância com três índices.' }, { question: 'Porque diferem os totais?', answer: 'Votos e assentos são unidades diferentes e usam os seus próprios totais.' }, { question: 'Como leio o rácio?', answer: 'É a percentagem de votos dividida pela de assentos: 1 indica paridade.' }, { question: 'Prova injustiça?', answer: 'Não. Descreve uma distância e precisa do contexto das regras eleitorais.' }], bibliography, howTo: [{ name: 'Introduzir partidos', text: 'Adicione uma linha por partido ou lista.' }, { name: 'Introduzir valores', text: 'Escreva votos e assentos do mesmo âmbito.' }, { name: 'Medir a diferença', text: 'Execute a análise e calcule os índices.' }, { name: 'Ler as faixas', text: 'Compare percentagens e diferenças.' }, { name: 'Verificar o contexto', text: 'Confirme as regras eleitorais.' }], schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[] };
10
+ export const portugueseContent: VoteSeatLocaleContent = content;
@@ -0,0 +1,10 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { VoteSeatLocaleContent } from '../entry';
5
+ const ui = { rowsLabel: 'Голоса и мандаты по партии или списку', rowsHelp: 'Введите полученные голоса и завоёванные мандаты для одних и тех же партий. Каждый столбец нормализуется отдельно.', partyNameLabel: 'Партия или список', votesLabel: 'Голоса', seatsLabel: 'Мандаты', addRow: 'Добавить партию или список', removeRow: 'Удалить партию или список', calculate: 'Измерить разрыв', reset: 'Загрузить пример', resultLabel: 'Пресс пропорциональности', emptyState: 'Введите голоса и мандаты, затем измерьте разрыв.', modelNotice: 'Модель сравнивает долю голосов с долей мандатов. Она не оценивает справедливость, идеологию, законность или качество выборов.', totalVotesLabel: 'Всего голосов', totalSeatsLabel: 'Всего мандатов', gallagherLabel: 'Индекс Галлахера', loosemoreHanbyLabel: 'Лусмор-Хэнби', sainteLagueLabel: 'Индекс Сент-Лагю', maxGapLabel: 'Наибольший разрыв долей', voteShareLabel: 'Доля голосов', seatShareLabel: 'Доля мандатов', differenceLabel: 'Доля мандатов минус доля голосов', ratioLabel: 'Соотношение голосов и мандатов', directionLabel: 'Интерпретация', overrepresented: 'Мандатов больше, чем доля голосов', underrepresented: 'Мандатов меньше, чем доля голосов', aligned: 'Доли совпадают', detailLabel: 'Данные по партии', zeroVoteNote: 'Сент-Лагю использует в знаменателе только строки хотя бы с одним голосом. Строки без голосов остаются видимыми в других показателях.', proportionNote: 'Меньшие значения индексов означают более близкие распределения. Это описательные показатели, а не правовой порог.', errorPrefix: 'Проверьте ввод', exactParity: 'Точное соответствие: каждая доля голосов равна доле мандатов.', resultGuide: 'Читайте полосы по строкам: расстояние между отметками голосов и мандатов показывает разрыв партии.' };
6
+ const softwareApplication: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Анализ несоответствия голосов и мандатов', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', description: 'Измеряет разрыв между долями голосов и мандатов с помощью известных индексов диспропорциональности.', url: 'https://gamebob.dev/ru/analiz-nesootvetstviya-golosov-mandatov', offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' } };
7
+ const faqPage: FAQPage = { '@type': 'FAQPage', mainEntity: [{ '@type': 'Question', name: 'Что измеряет анализ?', acceptedAnswer: { '@type': 'Answer', text: 'Он сравнивает доли голосов и мандатов каждой партии и обобщает разрыв индексами Галлахера, Лусмора-Хэнби и Сент-Лагю. Он не решает, справедлив ли или законен результат.' } }, { '@type': 'Question', name: 'Почему суммы голосов и мандатов могут различаться?', acceptedAnswer: { '@type': 'Answer', text: 'Это разные единицы. Голоса нормализуются по общей сумме голосов, а мандаты по общей сумме мандатов.' } }, { '@type': 'Question', name: 'Как читать соотношение голосов и мандатов?', acceptedAnswer: { '@type': 'Answer', text: 'Это доля голосов, делённая на долю мандатов. 1 означает соответствие, значение выше 1 означает меньшую долю мандатов.' } }, { '@type': 'Question', name: 'Доказывает ли результат несправедливость системы?', acceptedAnswer: { '@type': 'Answer', text: 'Нет. Индексы описывают расстояние между двумя распределениями и требуют контекста округов, барьеров и знаменателей.' } }] };
8
+ const howTo: HowTo = { '@type': 'HowTo', name: 'Измерить диспропорциональность голосов и мандатов', step: [{ '@type': 'HowToStep', name: 'Введите партии', text: 'Добавьте строку для каждой партии или списка.' }, { '@type': 'HowToStep', name: 'Введите голоса и мандаты', text: 'Используйте один и тот же избирательный охват и введите наблюдаемые суммы.' }, { '@type': 'HowToStep', name: 'Измерьте разрыв', text: 'Запустите анализ, чтобы нормализовать столбцы и посчитать индексы.' }, { '@type': 'HowToStep', name: 'Прочитайте полосы', text: 'Сравните доли, разницу и соотношение в каждой строке.' }, { '@type': 'HowToStep', name: 'Проверьте контекст', text: 'Изучите формулы и действующие правила выборов.' }] };
9
+ export const content: ToolLocaleContent<VoteSeatLocaleContent['ui']> = { slug: 'analiz-nesootvetstviya-golosov-mandatov', title: 'Анализ несоответствия голосов и мандатов', description: 'Сравнивайте доли голосов и мандатов по индексам Галлахера, Лусмора-Хэнби и Сент-Лагю на основе прозрачных данных выборов.', ui, seo: [{ type: 'title', text: 'Измерить разрыв между голосами и мандатами', level: 2 }, { type: 'paragraph', html: 'Выборы могут дать партии долю мандатов, сильно отличающуюся от доли голосов. Этот анализ делает два наблюдаемых распределения сопоставимыми и показывает партии с большей или меньшей представительностью относительно голосов. Голоса и мандаты нормализуются отдельно.' }, { type: 'paragraph', html: 'Результат не является вердиктом. Положительный разрыв означает большую долю мандатов, отрицательный - меньшую. Полосы показывают направление до просмотра сводных индексов.' }, { type: 'title', text: 'Что показывают три индекса', level: 2 }, { type: 'paragraph', html: 'Индекс Галлахера - это квадратный корень из половины суммы квадратов разрывов в процентных пунктах. Большие отклонения весят сильнее. Лусмор-Хэнби складывает абсолютные разрывы и делит сумму пополам.' }, { type: 'paragraph', html: 'Индекс Сент-Лагю использует доли и делит квадрат разрыва на долю голосов в каждой строке с голосами. Строка без голосов не даёт такого знаменателя и остаётся только в двух других показателях.' }, { type: 'table', headers: ['Показатель', 'Расчёт', 'Полезный вопрос'], rows: [['Галлахер', 'Корень из половины суммы квадратов процентных разрывов.', 'Какие большие разрывы определяют расстояние?'], ['Лусмор-Хэнби', 'Половина суммы абсолютных процентных разрывов.', 'Насколько в целом различаются распределения?'], ['Сент-Лагю', 'Квадрат разрыва долей, делённый на долю голосов.', 'Как знаменатель взвешивает малые партии?']] }, { type: 'title', text: 'Подготовьте сопоставимые данные выборов', level: 2 }, { type: 'paragraph', html: 'Используйте один и тот же избирательный охват и не смешивайте общенациональные голоса с региональными мандатами. Суммы не обязаны совпадать, но каждая строка должна описывать одну и ту же партию и результат.' }, { type: 'list', items: ['Одинаково и однозначно назовите объект в обоих столбцах.', 'Включите партии с голосами, но без мандатов.', 'Используйте нули только если они отражены в исходных данных.', 'Уточните, какие действительные, недействительные или исключённые голоса входят в знаменатель.', 'Сохраните индексы вместе с источником для воспроизводимости.'] }, { type: 'tip', title: 'Соотношение не объясняет причину', html: 'Значение выше 1 указывает на меньшую долю мандатов по сравнению с голосами. Размер округов, барьеры, географическая концентрация, явка и формула могут объяснить разрыв.' }, { type: 'title', text: 'Знайте ограничения перед сравнением', level: 2 }, { type: 'paragraph', html: 'Меньшие значения означают, что введённые распределения ближе, но не доказывают, что система лучше. Сравнивайте данные с совместимыми определениями голосов, мандатов, партий, территории и знаменателя.' }, { type: 'paragraph', html: 'Анализ не выводит идеологию, намерения, договорённости, соблюдение закона или демократическую легитимность. Он не исправляет официальный результат и не реконструирует конкретный подсчёт.' }, { type: 'tip', title: 'Начните с самой далёкой полосы', html: 'Сначала проверьте партию с наибольшим разрывом. Сравните исходные значения и убедитесь, что все строки обработаны одинаково.' }], faq: [{ question: 'Что измеряет анализ?', answer: 'Он сравнивает доли голосов и мандатов и обобщает расстояние тремя индексами.' }, { question: 'Почему суммы различаются?', answer: 'Голоса и мандаты являются разными единицами и используют собственные суммы.' }, { question: 'Как читать соотношение?', answer: 'Доля голосов делится на долю мандатов: 1 означает соответствие.' }, { question: 'Это доказывает несправедливость?', answer: 'Нет. Это описание расстояния, которому нужен контекст правил выборов.' }], bibliography, howTo: [{ name: 'Введите партии', text: 'Добавьте строку для партии или списка.' }, { name: 'Введите значения', text: 'Укажите голоса и мандаты одного охвата.' }, { name: 'Измерьте разрыв', text: 'Запустите анализ и рассчитайте индексы.' }, { name: 'Прочитайте полосы', text: 'Сравните доли и разрывы.' }, { name: 'Проверьте контекст', text: 'Проверьте действующие правила.' }], schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[] };
10
+ export const russianContent: VoteSeatLocaleContent = content;
@@ -0,0 +1,10 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { VoteSeatLocaleContent } from '../entry';
5
+ const ui = { rowsLabel: 'Röster och mandat per parti eller lista', rowsHelp: 'Ange röster och vunna mandat för samma partier. Varje kolumn normaliseras separat.', partyNameLabel: 'Parti eller lista', votesLabel: 'Röster', seatsLabel: 'Mandat', addRow: 'Lägg till parti eller lista', removeRow: 'Ta bort parti eller lista', calculate: 'Mät skillnaden', reset: 'Ladda exempel', resultLabel: 'Proportionalitetspress', emptyState: 'Ange röster och mandat och mät sedan skillnaden.', modelNotice: 'Modellen jämför röstandel med mandatandel. Den bedömer inte rättvisa, ideologi, laglighet eller valkvalitet.', totalVotesLabel: 'Totalt antal röster', totalSeatsLabel: 'Totalt antal mandat', gallagherLabel: 'Gallagher-index', loosemoreHanbyLabel: 'Loosemore-Hanby', sainteLagueLabel: 'Sainte-Laguë-index', maxGapLabel: 'Största andelsskillnad', voteShareLabel: 'Röstandel', seatShareLabel: 'Mandatandel', differenceLabel: 'Mandatandel minus röstandel', ratioLabel: 'Förhållande mellan röster och mandat', directionLabel: 'Tolkning', overrepresented: 'Fler mandat än röstandelen', underrepresented: 'Färre mandat än röstandelen', aligned: 'Andelarna sammanfaller', detailLabel: 'Partidetaljer', zeroVoteNote: 'Sainte-Laguë använder bara rader med minst en röst i nämnaren. Rader utan röster syns fortfarande i de andra måtten.', proportionNote: 'Lägre indexvärden betyder att fördelningarna ligger närmare varandra. Det är beskrivande mått, inte en rättslig gräns.', errorPrefix: 'Kontrollera indata', exactParity: 'Exakt paritet: varje röstandel motsvarar mandatandelen.', resultGuide: 'Läs banden rad för rad: avståndet mellan röst- och mandatmarkeringen är partiets skillnad.' };
6
+ const softwareApplication: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Analys av oproportionalitet mellan röster och mandat', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', description: 'Mäter skillnaden mellan röstandelar och mandatandelar med etablerade oproportionalitetsindex.', url: 'https://gamebob.dev/sv/analys-valroster-mandat-proportionalitet', offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' } };
7
+ const faqPage: FAQPage = { '@type': 'FAQPage', mainEntity: [{ '@type': 'Question', name: 'Vad mäter analysen?', acceptedAnswer: { '@type': 'Answer', text: 'Den jämför varje partis röstandel och mandatandel och sammanfattar skillnaden med Gallagher, Loosemore-Hanby och Sainte-Laguë. Den avgör inte om resultatet är rättvist eller lagligt.' } }, { '@type': 'Question', name: 'Varför kan totalsummorna skilja sig?', acceptedAnswer: { '@type': 'Answer', text: 'Röster och mandat är olika enheter och normaliseras mot varsin totalsumma.' } }, { '@type': 'Question', name: 'Hur läser jag förhållandet mellan röster och mandat?', acceptedAnswer: { '@type': 'Answer', text: 'Det är röstandelen delad med mandatandelen. 1 betyder paritet och ett värde över 1 betyder lägre mandatandel.' } }, { '@type': 'Question', name: 'Bevisar resultatet ett orättvist system?', acceptedAnswer: { '@type': 'Answer', text: 'Nej. Indexen beskriver avståndet mellan två fördelningar och behöver sammanhang om valdistrikt, spärrar och nämnare.' } }] };
8
+ const howTo: HowTo = { '@type': 'HowTo', name: 'Mät oproportionalitet mellan röster och mandat', step: [{ '@type': 'HowToStep', name: 'Ange partier', text: 'Lägg till en rad för varje parti eller lista.' }, { '@type': 'HowToStep', name: 'Ange röster och mandat', text: 'Använd samma valområde och ange de observerade summorna.' }, { '@type': 'HowToStep', name: 'Mät skillnaden', text: 'Starta analysen för att normalisera kolumnerna och beräkna indexen.' }, { '@type': 'HowToStep', name: 'Läs banden', text: 'Jämför andel, skillnad och förhållande på varje rad.' }, { '@type': 'HowToStep', name: 'Kontrollera sammanhanget', text: 'Läs formlerna och de valregler som gäller.' }] };
9
+ export const content: ToolLocaleContent<VoteSeatLocaleContent['ui']> = { slug: 'analys-valroster-mandat-proportionalitet', title: 'Analys av oproportionalitet mellan röster och mandat', description: 'Jämför röstandelar och mandatandelar med Gallagher-, Loosemore-Hanby- och Sainte-Laguë-index från öppna valdata.', ui, seo: [{ type: 'title', text: 'Mät avståndet mellan röster och mandat', level: 2 }, { type: 'paragraph', html: 'Ett val kan ge ett parti en mandatandel som skiljer sig mycket från röstandelen. Analysen gör de två observerade fördelningarna jämförbara och visar vilka partier som får mer eller mindre representation i förhållande till sina röster. Röster och mandat normaliseras separat.' }, { type: 'paragraph', html: 'Resultatet är inget domslut. En positiv skillnad betyder större mandatandel och en negativ skillnad mindre. Banden visar riktningen innan de samlade indexen granskas.' }, { type: 'title', text: 'Vad de tre indexen visar', level: 2 }, { type: 'paragraph', html: 'Gallagher-indexet är roten ur hälften av summan av de kvadrerade skillnaderna i procentenheter. Stora avvikelser väger därför mer. Loosemore-Hanby summerar de absoluta skillnaderna och delar summan med två.' }, { type: 'paragraph', html: 'Sainte-Laguë-indexet använder andelar och delar den kvadrerade skillnaden med röstandelen i varje rad som har röster. En rad utan röster saknar den nämnaren och ingår därför bara i de två andra måtten.' }, { type: 'table', headers: ['Mått', 'Beräkning', 'Användbar fråga'], rows: [['Gallagher', 'Roten ur hälften av kvadrerade procentenhetsskillnader.', 'Vilka stora skillnader styr avståndet?'], ['Loosemore-Hanby', 'Hälften av summan av absoluta procentenhetsskillnader.', 'Hur mycket skiljer sig fördelningen totalt?'], ['Sainte-Laguë', 'Kvadrerad andelsskillnad delad med röstandel.', 'Hur viktar nämnaren små partier?']] }, { type: 'title', text: 'Förbered jämförbara valdata', level: 2 }, { type: 'paragraph', html: 'Använd samma valområde och blanda inte nationella röster med regionala mandat. Summorna behöver inte vara lika, men varje rad måste beskriva samma parti och resultat.' }, { type: 'list', items: ['Namnge samma enhet tydligt i båda kolumnerna.', 'Ta med partier som har röster men inga mandat.', 'Använd nollor bara när de finns dokumenterade i datan.', 'Kontrollera vilka giltiga, ogiltiga eller uteslutna röster som ska ingå i nämnaren.', 'Spara indexen tillsammans med källan så att resultatet kan återskapas.'] }, { type: 'tip', title: 'Ett förhållande är inte en orsak', html: 'Ett värde över 1 visar lägre mandatandel än röstandel. Valkretsarnas storlek, spärrar, geografisk koncentration, valdeltagande och valformel kan förklara skillnaden.' }, { type: 'title', text: 'Känn till gränserna före jämförelse', level: 2 }, { type: 'paragraph', html: 'Lägre värden betyder att de angivna fördelningarna ligger närmare varandra, inte att valsystemet automatiskt är bättre. Jämför bara data med kompatibla definitioner av röster, mandat, partier, område och nämnare.' }, { type: 'paragraph', html: 'Analysen drar inga slutsatser om ideologi, avsikt, överenskommelser, laglighet eller demokratisk legitimitet. Den korrigerar inte ett officiellt resultat och återskapar inte en viss rösträkning.' }, { type: 'tip', title: 'Börja med det mest avlägsna bandet', html: 'Granska först partiet med den största skillnaden. Jämför råvärdena och kontrollera sedan att alla rader behandlats på samma sätt.' }], faq: [{ question: 'Vad mäter analysen?', answer: 'Den jämför röstandelar och mandatandelar och sammanfattar avståndet med tre index.' }, { question: 'Varför skiljer sig totalsummorna?', answer: 'Röster och mandat är olika enheter med varsin totalsumma.' }, { question: 'Hur läser jag förhållandet?', answer: 'Röstandel delad med mandatandel: 1 betyder paritet.' }, { question: 'Är det ett bevis på orättvisa?', answer: 'Nej. Det beskriver ett avstånd och behöver sammanhang om valreglerna.' }], bibliography, howTo: [{ name: 'Ange partier', text: 'Lägg till en rad per parti eller lista.' }, { name: 'Ange värden', text: 'Fyll i röster och mandat från samma område.' }, { name: 'Mät skillnaden', text: 'Starta analysen och beräkna indexen.' }, { name: 'Läs banden', text: 'Jämför andelar och skillnader.' }, { name: 'Kontrollera sammanhanget', text: 'Kontrollera gällande valregler.' }], schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[] };
10
+ export const swedishContent: VoteSeatLocaleContent = content;
@@ -0,0 +1,10 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { VoteSeatLocaleContent } from '../entry';
5
+ const ui = { rowsLabel: 'Parti veya listeye göre oylar ve sandalyeler', rowsHelp: 'Aynı partiler için alınan oyları ve kazanılan sandalyeleri girin. Her sütun ayrı normalize edilir.', partyNameLabel: 'Parti veya liste', votesLabel: 'Oylar', seatsLabel: 'Sandalyeler', addRow: 'Parti veya liste ekle', removeRow: 'Parti veya listeyi kaldır', calculate: 'Farkı ölç', reset: 'Örneği yükle', resultLabel: 'Orantılılık baskısı', emptyState: 'Oyları ve sandalyeleri girin, ardından farkı ölçün.', modelNotice: 'Model oy payını sandalye payıyla karşılaştırır. Adaleti, ideolojiyi, yasallığı veya seçim kalitesini değerlendirmez.', totalVotesLabel: 'Toplam oy', totalSeatsLabel: 'Toplam sandalye', gallagherLabel: 'Gallagher endeksi', loosemoreHanbyLabel: 'Loosemore-Hanby', sainteLagueLabel: 'Sainte-Laguë endeksi', maxGapLabel: 'En büyük pay farkı', voteShareLabel: 'Oy payı', seatShareLabel: 'Sandalye payı', differenceLabel: 'Sandalye payı eksi oy payı', ratioLabel: 'Oy-sandalye oranı', directionLabel: 'Okuma', overrepresented: 'Oy payından daha fazla sandalye', underrepresented: 'Oy payından daha az sandalye', aligned: 'Paylar uyumlu', detailLabel: 'Parti ayrıntısı', zeroVoteNote: 'Sainte-Laguë paydasında yalnızca en az bir oyu olan satırlar kullanılır. Oysuz satırlar diğer ölçümlerde görünür kalır.', proportionNote: 'Daha düşük endeks değerleri iki dağılımın birbirine daha yakın olduğunu gösterir. Bunlar açıklayıcı ölçümlerdir, yasal eşik değildir.', errorPrefix: 'Girdiyi kontrol edin', exactParity: 'Tam eşitlik: her oy payı sandalye payına eşittir.', resultGuide: 'Şeritleri satır satır okuyun: oy ve sandalye işaretleri arasındaki mesafe partinin farkıdır.' };
6
+ const softwareApplication: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Oy-sandalye orantısızlığı analiz aracı', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', description: 'Şeffaf seçim verileriyle oy payı ve sandalye payı arasındaki farkı ölçer.', url: 'https://gamebob.dev/tr/oy-sandalye-orantisizlik-analizi', offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' } };
7
+ const faqPage: FAQPage = { '@type': 'FAQPage', mainEntity: [{ '@type': 'Question', name: 'Analiz neyi ölçer?', acceptedAnswer: { '@type': 'Answer', text: 'Her partinin oy ve sandalye payını karşılaştırır ve farkı Gallagher, Loosemore-Hanby ve Sainte-Laguë ile özetler. Sonucun adil veya yasal olup olmadığına karar vermez.' } }, { '@type': 'Question', name: 'Oy ve sandalye toplamları neden farklı olabilir?', acceptedAnswer: { '@type': 'Answer', text: 'Bunlar farklı birimlerdir. Oylar toplam oyla, sandalyeler toplam sandalyeyle ayrı ayrı normalize edilir.' } }, { '@type': 'Question', name: 'Oy-sandalye oranı nasıl okunur?', acceptedAnswer: { '@type': 'Answer', text: 'Oy payının sandalye payına bölünmesidir. 1 eşitliği, 1 üzeri ise daha düşük sandalye payını gösterir.' } }, { '@type': 'Question', name: 'Sonuç adaletsiz bir sistemi kanıtlar mı?', acceptedAnswer: { '@type': 'Answer', text: 'Hayır. Endeksler yalnızca iki dağılım arasındaki mesafeyi açıklar ve seçim çevreleri, barajlar ve paydalarla birlikte değerlendirilmelidir.' } }] };
8
+ const howTo: HowTo = { '@type': 'HowTo', name: 'Oy ve sandalye orantısızlığını ölçme', step: [{ '@type': 'HowToStep', name: 'Partileri girin', text: 'Her parti veya liste için bir satır ekleyin.' }, { '@type': 'HowToStep', name: 'Oyları ve sandalyeleri girin', text: 'Aynı seçim kapsamını kullanarak gözlenen toplamları yazın.' }, { '@type': 'HowToStep', name: 'Farkı ölçün', text: 'Sütunları normalize etmek ve endeksleri hesaplamak için analizi çalıştırın.' }, { '@type': 'HowToStep', name: 'Şeritleri okuyun', text: 'Her satırın payını, farkını ve oranını karşılaştırın.' }, { '@type': 'HowToStep', name: 'Bağlamı kontrol edin', text: 'Formülleri ve geçerli seçim kurallarını inceleyin.' }] };
9
+ export const content: ToolLocaleContent<VoteSeatLocaleContent['ui']> = { slug: 'oy-sandalye-orantisizlik-analizi', title: 'Oy ve sandalye orantısızlığı analiz aracı', description: 'Şeffaf seçim verilerinden Gallagher, Loosemore-Hanby ve Sainte-Laguë endeksleriyle oy ve sandalye paylarını karşılaştırın.', ui, seo: [{ type: 'title', text: 'Oylar ve sandalyeler arasındaki farkı ölçün', level: 2 }, { type: 'paragraph', html: 'Bir seçim partinin sandalye payını oy payından çok farklı kılabilir. Bu analiz gözlenen iki dağılımı karşılaştırılabilir hale getirir ve oylarına göre daha fazla veya daha az temsil alan partileri gösterir. Oylar ve sandalyeler ayrı ayrı normalize edilir.' }, { type: 'paragraph', html: 'Sonuç bir hüküm değildir. Pozitif fark daha yüksek sandalye payını, negatif fark daha düşük payı ifade eder. Şeritler, toplu endekslerden önce yönü görünür kılar.' }, { type: 'title', text: 'Üç endeksin gösterdiği şey', level: 2 }, { type: 'paragraph', html: 'Gallagher endeksi, yüzde puan farklarının kareleri toplamının yarısının kareköküdür. Büyük farklar daha ağır basar. Loosemore-Hanby mutlak farkları toplar ve toplamı ikiye böler.' }, { type: 'paragraph', html: 'Sainte-Laguë endeksi payları kullanır ve farkın karesini oy alan her satırın oy payına böler. Oyu olmayan satır bu paydayı sağlayamadığı için yalnızca diğer iki ölçümde yer alır.' }, { type: 'table', headers: ['Ölçüm', 'Hesaplama', 'Yararlı soru'], rows: [['Gallagher', 'Kare yüzde puanı farkları toplamının yarısının karekökü.', 'Hangi büyük farklar mesafeyi belirliyor?'], ['Loosemore-Hanby', 'Mutlak yüzde puanı farkları toplamının yarısı.', 'Dağılımın tamamı ne kadar farklı?'], ['Sainte-Laguë', 'Pay farkının karesi bölü oy payı.', 'Payda küçük partileri nasıl ağırlıyor?']] }, { type: 'title', text: 'Karşılaştırılabilir seçim verisi hazırlayın', level: 2 }, { type: 'paragraph', html: 'Aynı seçim kapsamını kullanın ve ulusal oyları bölgesel sandalyelerle karıştırmayın. Toplamların eşit olması gerekmez, ancak her satır aynı parti ve sonucu göstermelidir.' }, { type: 'list', items: ['Her iki sütunda aynı birimi açıkça adlandırın.', 'Oy alıp sandalye alamayan partileri dahil edin.', 'Sıfırları yalnızca veri setinde belgelenmişse kullanın.', 'Geçerli, geçersiz veya dışlanan oyların paydaya girip girmediğini belirleyin.', 'Sonucun tekrarlanabilmesi için endeksleri kaynakla birlikte saklayın.'] }, { type: 'tip', title: 'Oran neden değildir', html: '1 üzeri bir değer oy payına göre daha düşük sandalye payını gösterir. Çevre büyüklüğü, barajlar, coğrafi yoğunlaşma, katılım ve seçim formülü farkı açıklayabilir.' }, { type: 'title', text: 'Karşılaştırmadan önce sınırları bilin', level: 2 }, { type: 'paragraph', html: 'Düşük değerler girilen dağılımların birbirine daha yakın olduğunu gösterir, sistemin otomatik olarak daha iyi olduğunu değil. Oy, sandalye, parti, bölge ve payda tanımları uyumlu verileri karşılaştırın.' }, { type: 'paragraph', html: 'Analiz ideoloji, niyet, anlaşma, hukuka uygunluk veya demokratik meşruiyet çıkarımı yapmaz. Resmî sonucu düzeltmez ve belirli bir sayımı yeniden kurmaz.' }, { type: 'tip', title: 'En uzak şeritten başlayın', html: 'Önce en büyük farkı olan partiyi inceleyin. Ham değerleri karşılaştırın ve tüm satırların aynı şekilde işlendiğini kontrol edin.' }], faq: [{ question: 'Ne ölçer?', answer: 'Oy ve sandalye paylarını karşılaştırır ve mesafeyi üç endeksle özetler.' }, { question: 'Toplamlar neden farklı?', answer: 'Oylar ve sandalyeler farklı birimlerdir ve kendi toplamlarıyla normalize edilir.' }, { question: 'Oran nasıl okunur?', answer: 'Oy payının sandalye payına bölünmesidir; 1 eşitliği gösterir.' }, { question: 'Adaletsizliği kanıtlar mı?', answer: 'Hayır. Seçim kuralları bağlamı gerektiren bir mesafe ölçümüdür.' }], bibliography, howTo: [{ name: 'Partileri girin', text: 'Parti veya liste başına bir satır ekleyin.' }, { name: 'Değerleri girin', text: 'Aynı kapsamın oy ve sandalye sayılarını yazın.' }, { name: 'Farkı ölçün', text: 'Analizi çalıştırıp endeksleri hesaplayın.' }, { name: 'Şeritleri okuyun', text: 'Payları ve farkları karşılaştırın.' }, { name: 'Bağlamı kontrol edin', text: 'Seçim kurallarını doğrulayın.' }], schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[] };
10
+ export const turkishContent: VoteSeatLocaleContent = content;