feat(know-your-world): add hint system, pointer lock buttons, and mobile magnifier support

- Add hint feature with i18n support for all 51 USA regions
  - 3-8 child-friendly hints per region (simple vocabulary, geographic clues)
  - Translations for 7 languages: en, de, es, ja, hi, la, goh
  - Hint button with speech bubble UI, keyboard shortcut (H)
  - Random hint selection per region

- Create usePointerLockButton hook for shared button logic
  - Reusable hook for buttons that work in pointer lock mode
  - Handles bounds tracking, hover detection, click handling
  - Registry pattern for managing multiple buttons
  - Refactored Give Up and Hint buttons to use shared hook

- Add mobile touch support for magnifier
  - Pan gesture: drag on magnifier to move cursor
  - Tap to select: tap without dragging to select region
  - Region detection during drag for hover feedback
  - Same movement multiplier as pointer lock mode
  - Cursor clamping to SVG bounds
  - Multiplayer cursor broadcast support

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Thomas Hallock 2025-11-26 13:04:38 -06:00
parent 6c3f860efc
commit 55e480c03b
12 changed files with 2601 additions and 51 deletions

View File

@ -29,7 +29,10 @@ import { findOptimalZoom, type BoundingBox as DebugBoundingBox } from '../utils/
import { useRegionDetection } from '../hooks/useRegionDetection'
import { usePointerLock } from '../hooks/usePointerLock'
import { useMagnifierZoom } from '../hooks/useMagnifierZoom'
import { useRegionHint, useHasRegionHint } from '../hooks/useRegionHint'
import { usePointerLockButton, usePointerLockButtonRegistry } from './usePointerLockButton'
import { DevCropTool } from './DevCropTool'
import type { HintMap } from '../messages'
// Debug flag: show technical info in magnifier (dev only)
const SHOW_MAGNIFIER_DEBUG_INFO = process.env.NODE_ENV === 'development'
@ -363,15 +366,6 @@ export function MapRenderer({
// State that needs to be available for hooks
const cursorPositionRef = useRef<{ x: number; y: number } | null>(null)
const initialCapturePositionRef = useRef<{ x: number; y: number } | null>(null)
// Ref to track Give Up button bounds for pointer lock click detection
const giveUpButtonBoundsRef = useRef<{
left: number
top: number
right: number
bottom: number
} | null>(null)
// Track if fake cursor is hovering over Give Up button (for pointer lock mode)
const [isFakeCursorOverGiveUp, setIsFakeCursorOverGiveUp] = useState(false)
const [cursorSquish, setCursorSquish] = useState({ x: 1, y: 1 })
const [isReleasingPointerLock, setIsReleasingPointerLock] = useState(false)
@ -394,8 +388,7 @@ export function MapRenderer({
// Reset cursor squish
setCursorSquish({ x: 1, y: 1 })
setIsReleasingPointerLock(false)
// Reset fake cursor hover state
setIsFakeCursorOverGiveUp(false)
// Note: Button hover states reset automatically via usePointerLockButton hook
// Note: Zoom recalculation now handled by useMagnifierZoom hook
}, [])
@ -429,6 +422,11 @@ export function MapRenderer({
// Track whether current target region needs magnification
const [targetNeedsMagnification, setTargetNeedsMagnification] = useState(false)
// Mobile magnifier touch drag state
const [isMagnifierDragging, setIsMagnifierDragging] = useState(false)
const magnifierTouchStartRef = useRef<{ x: number; y: number } | null>(null)
const magnifierDidMoveRef = useRef(false) // Track if user actually dragged (vs just tapped)
// Give up reveal animation state
const [giveUpFlashProgress, setGiveUpFlashProgress] = useState(0) // 0-1 pulsing value
const [isGiveUpAnimating, setIsGiveUpAnimating] = useState(false) // Track if animation in progress
@ -445,6 +443,52 @@ export function MapRenderer({
typeof findOptimalZoom
> | null>(null)
// Hint feature state
const [showHintBubble, setShowHintBubble] = useState(false)
// Get hint for current region (if available)
const hintText = useRegionHint(selectedMap as HintMap, currentPrompt)
const hasHint = useHasRegionHint(selectedMap as HintMap, currentPrompt)
// Pointer lock button registry and hooks for Give Up and Hint buttons
const buttonRegistry = usePointerLockButtonRegistry()
// Give Up button pointer lock support
const giveUpButton = usePointerLockButton({
id: 'give-up',
disabled: isGiveUpAnimating,
active: true,
pointerLocked,
cursorPosition,
containerRef,
onClick: onGiveUp,
})
// Hint button pointer lock support
const hintButton = usePointerLockButton({
id: 'hint',
disabled: false,
active: hasHint,
pointerLocked,
cursorPosition,
containerRef,
onClick: () => setShowHintBubble((prev) => !prev),
})
// Register buttons with the registry for centralized click handling
useEffect(() => {
buttonRegistry.register('give-up', giveUpButton.checkClick, onGiveUp)
buttonRegistry.register('hint', hintButton.checkClick, () => setShowHintBubble((prev) => !prev))
return () => {
buttonRegistry.unregister('give-up')
buttonRegistry.unregister('hint')
}
}, [buttonRegistry, giveUpButton.checkClick, hintButton.checkClick, onGiveUp])
// Close hint bubble when the prompt changes (new region to find)
useEffect(() => {
setShowHintBubble(false)
}, [currentPrompt])
// Configuration
const MAX_ZOOM = 1000 // Maximum zoom level (for Gibraltar at 0.08px!)
const HIGH_ZOOM_THRESHOLD = 100 // Show gold border above this zoom level
@ -520,18 +564,8 @@ export function MapRenderer({
console.log('[CLICK] Pointer lock click at cursor position:', { cursorX, cursorY })
// Check if clicking on Give Up button (pointer lock mode requires manual detection)
const buttonBounds = giveUpButtonBoundsRef.current
if (
buttonBounds &&
!isGiveUpAnimating &&
cursorX >= buttonBounds.left &&
cursorX <= buttonBounds.right &&
cursorY >= buttonBounds.top &&
cursorY <= buttonBounds.bottom
) {
console.log('[CLICK] Give Up button clicked via pointer lock')
onGiveUp()
// Check if clicking on any registered button (Give Up, Hint, etc.)
if (buttonRegistry.handleClick(cursorX, cursorY)) {
return
}
@ -1517,17 +1551,7 @@ export function MapRenderer({
cursorPositionRef.current = { x: cursorX, y: cursorY }
setCursorPosition({ x: cursorX, y: cursorY })
// Check if fake cursor is hovering over Give Up button (for pointer lock mode)
if (pointerLocked) {
const buttonBounds = giveUpButtonBoundsRef.current
const isOverButton =
buttonBounds &&
cursorX >= buttonBounds.left &&
cursorX <= buttonBounds.right &&
cursorY >= buttonBounds.top &&
cursorY <= buttonBounds.bottom
setIsFakeCursorOverGiveUp(!!isOverButton)
}
// Note: Button hover detection is handled by usePointerLockButton hooks
// Use region detection hook to find regions near cursor
const detectionResult = detectRegions(cursorX, cursorY)
@ -1658,8 +1682,17 @@ export function MapRenderer({
const isLeftHalf = cursorX < containerRect.width / 2
const isTopHalf = cursorY < containerRect.height / 2
// Default: opposite corner from cursor
newTop = isTopHalf ? containerRect.height - magnifierHeight - 20 : 20
newLeft = isLeftHalf ? containerRect.width - magnifierWidth - 20 : 20
// When hint bubble is shown, blacklist the upper-right corner
// If magnifier would go to top-right (cursor in bottom-left), go to bottom-right instead
const wouldGoToTopRight = !isTopHalf && isLeftHalf
if (showHintBubble && wouldGoToTopRight) {
newTop = containerRect.height - magnifierHeight - 20 // Move to bottom
// newLeft stays at right
}
}
if (pointerLocked) {
@ -1746,6 +1779,129 @@ export function MapRenderer({
}
}
// Mobile magnifier touch handlers - allow panning by dragging on the magnifier
const handleMagnifierTouchStart = useCallback((e: React.TouchEvent<HTMLDivElement>) => {
if (e.touches.length !== 1) return // Only handle single-finger touch
const touch = e.touches[0]
magnifierTouchStartRef.current = { x: touch.clientX, y: touch.clientY }
magnifierDidMoveRef.current = false // Reset movement tracking
setIsMagnifierDragging(true)
e.preventDefault() // Prevent scrolling
}, [])
const handleMagnifierTouchMove = useCallback(
(e: React.TouchEvent<HTMLDivElement>) => {
if (!isMagnifierDragging || e.touches.length !== 1) return
if (!magnifierTouchStartRef.current || !cursorPositionRef.current) return
if (!svgRef.current || !containerRef.current) return
const touch = e.touches[0]
const deltaX = touch.clientX - magnifierTouchStartRef.current.x
const deltaY = touch.clientY - magnifierTouchStartRef.current.y
// Track if user has moved significantly (more than 5px = definitely a drag, not a tap)
if (Math.abs(deltaX) > 5 || Math.abs(deltaY) > 5) {
magnifierDidMoveRef.current = true
}
// Update start position for next move
magnifierTouchStartRef.current = { x: touch.clientX, y: touch.clientY }
// Apply movement multiplier (same as pointer lock mode)
const currentMultiplier = magnifierSpring.movementMultiplier.get()
// Invert the delta - dragging right on magnifier should show content to the right
// (which means moving the cursor right in the map coordinate space)
// Actually, dragging the "paper" under the magnifier means:
// - Drag finger right = paper moves right = magnifier shows what was to the LEFT
// - So we SUBTRACT the delta to move the cursor in the opposite direction
const newCursorX = cursorPositionRef.current.x - deltaX * currentMultiplier
const newCursorY = cursorPositionRef.current.y - deltaY * currentMultiplier
// Clamp to SVG bounds
const containerRect = containerRef.current.getBoundingClientRect()
const svgRect = svgRef.current.getBoundingClientRect()
const svgOffsetX = svgRect.left - containerRect.left
const svgOffsetY = svgRect.top - containerRect.top
const clampedX = Math.max(svgOffsetX, Math.min(svgOffsetX + svgRect.width, newCursorX))
const clampedY = Math.max(svgOffsetY, Math.min(svgOffsetY + svgRect.height, newCursorY))
// Update cursor position
cursorPositionRef.current = { x: clampedX, y: clampedY }
setCursorPosition({ x: clampedX, y: clampedY })
// Run region detection to update hoveredRegionId (so user sees which region is under cursor)
// We don't update zoom during drag to avoid disorienting zoom changes while panning
const { regionUnderCursor } = detectRegions(clampedX, clampedY)
// Broadcast cursor update to other players (if in multiplayer)
if (
onCursorUpdate &&
(gameMode !== 'turn-based' || currentPlayer === localPlayerId) &&
containerRef.current &&
svgRef.current
) {
const viewBoxParts = displayViewBox.split(' ').map(Number)
const viewBoxX = viewBoxParts[0] || 0
const viewBoxY = viewBoxParts[1] || 0
const viewBoxW = viewBoxParts[2] || 1000
const viewBoxH = viewBoxParts[3] || 500
const viewport = getRenderedViewport(svgRect, viewBoxX, viewBoxY, viewBoxW, viewBoxH)
const svgOffsetXWithLetterbox = svgRect.left - containerRect.left + viewport.letterboxX
const svgOffsetYWithLetterbox = svgRect.top - containerRect.top + viewport.letterboxY
const cursorSvgX = (clampedX - svgOffsetXWithLetterbox) / viewport.scale + viewBoxX
const cursorSvgY = (clampedY - svgOffsetYWithLetterbox) / viewport.scale + viewBoxY
onCursorUpdate({ x: cursorSvgX, y: cursorSvgY }, regionUnderCursor)
}
e.preventDefault() // Prevent scrolling
},
[
isMagnifierDragging,
magnifierSpring.movementMultiplier,
detectRegions,
onCursorUpdate,
gameMode,
currentPlayer,
localPlayerId,
displayViewBox,
]
)
const handleMagnifierTouchEnd = useCallback(
(e: React.TouchEvent<HTMLDivElement>) => {
// Check if this was a tap (no significant movement) vs a drag
// If the user just tapped on the magnifier, select the region under cursor
const didMove = magnifierDidMoveRef.current
setIsMagnifierDragging(false)
magnifierTouchStartRef.current = null
magnifierDidMoveRef.current = false
// If there was a changed touch that ended, check if it's a tap
if (e.changedTouches.length === 1 && cursorPositionRef.current) {
// Run region detection at current position
const { regionUnderCursor } = detectRegions(
cursorPositionRef.current.x,
cursorPositionRef.current.y
)
// If we have a region and this wasn't a significant drag, trigger selection
// We rely on the touch move handler to have already updated cursor position
// If the user dragged significantly, don't select (they're navigating, not selecting)
if (regionUnderCursor && !didMove) {
const region = mapData.regions.find((r) => r.id === regionUnderCursor)
if (region) {
console.log('[Touch] Tapped on magnifier to select region:', regionUnderCursor)
onRegionClick(regionUnderCursor, region.name)
}
}
}
},
[detectRegions, mapData.regions, onRegionClick]
)
return (
<div
ref={containerRef}
@ -2377,6 +2533,10 @@ export function MapRenderer({
return (
<animated.div
data-element="magnifier"
onTouchStart={handleMagnifierTouchStart}
onTouchMove={handleMagnifierTouchMove}
onTouchEnd={handleMagnifierTouchEnd}
onTouchCancel={handleMagnifierTouchEnd}
style={{
position: 'absolute',
// Animated positioning - smoothly moves to opposite corner from cursor
@ -2393,7 +2553,10 @@ export function MapRenderer({
),
borderRadius: '12px',
overflow: 'hidden',
pointerEvents: 'none',
// Enable touch events on mobile for panning, but keep mouse events disabled
// This allows touch-based panning while not interfering with mouse-based interactions
pointerEvents: 'auto',
touchAction: 'none', // Prevent browser handling of touch gestures
zIndex: 100,
boxShadow: zoomSpring.to((zoom: number) =>
zoom > HIGH_ZOOM_THRESHOLD
@ -3269,7 +3432,7 @@ export function MapRenderer({
<div
style={{
position: 'absolute',
top: '10px',
bottom: '10px',
left: magnifierOnLeft ? undefined : '10px',
right: magnifierOnLeft ? '10px' : undefined,
backgroundColor: 'rgba(0, 0, 0, 0.8)',
@ -3532,19 +3695,7 @@ export function MapRenderer({
return (
<button
ref={(el) => {
// Update button bounds for pointer lock click detection
if (el && containerRef.current) {
const buttonRect = el.getBoundingClientRect()
const containerRect = containerRef.current.getBoundingClientRect()
giveUpButtonBoundsRef.current = {
left: buttonRect.left - containerRect.left,
top: buttonRect.top - containerRect.top,
right: buttonRect.right - containerRect.left,
bottom: buttonRect.bottom - containerRect.top,
}
}
}}
ref={giveUpButton.refCallback}
onClick={(e) => {
e.stopPropagation() // Don't trigger map click
if (!isGiveUpAnimating) {
@ -3559,7 +3710,7 @@ export function MapRenderer({
top: `${buttonTop}px`,
right: `${buttonRight}px`,
// Apply hover styles when fake cursor is over button (pointer lock mode)
...(isFakeCursorOverGiveUp && !isGiveUpAnimating
...(giveUpButton.isHovered
? {
backgroundColor: isDark ? '#a16207' : '#fef08a', // yellow.700 / yellow.200
transform: 'scale(1.05)',
@ -3671,6 +3822,133 @@ export function MapRenderer({
)
})()}
{/* Hint button - only show if hint exists for current region */}
{hasHint &&
(() => {
if (!svgRef.current || !containerRef.current || svgDimensions.width === 0) return null
// During give-up animation, use saved position to prevent jumping
let buttonTop: number
let buttonRight: number
if (isGiveUpAnimating && savedButtonPosition) {
buttonTop = savedButtonPosition.top
// Position hint button to the left of give up button
buttonRight = savedButtonPosition.right + 100 // Give Up button width + gap
} else {
const svgRect = svgRef.current.getBoundingClientRect()
const containerRect = containerRef.current.getBoundingClientRect()
const svgOffsetX = svgRect.left - containerRect.left
const svgOffsetY = svgRect.top - containerRect.top
buttonTop = svgOffsetY + 8
// Position hint button to the left of give up button (give up is ~85px + 8 gap)
buttonRight = containerRect.width - (svgOffsetX + svgRect.width) + 8 + 100
}
return (
<>
<button
ref={hintButton.refCallback}
onClick={(e) => {
e.stopPropagation()
setShowHintBubble((prev) => !prev)
}}
data-action="hint-button"
title="Get a hint (H)"
style={{
position: 'absolute',
top: `${buttonTop}px`,
right: `${buttonRight}px`,
// Apply hover styles when fake cursor is over button (pointer lock mode)
...(hintButton.isHovered
? {
backgroundColor: isDark ? '#1e40af' : '#bfdbfe', // blue.800 darker / blue.200
transform: 'scale(1.05)',
}
: {}),
...(isGiveUpAnimating
? {
opacity: 0.5,
cursor: 'not-allowed',
}
: {}),
}}
className={css({
padding: '2 3',
fontSize: 'sm',
cursor: 'pointer',
bg: isDark ? 'blue.800' : 'blue.100',
color: isDark ? 'blue.200' : 'blue.800',
rounded: 'md',
border: '2px solid',
borderColor: isDark ? 'blue.600' : 'blue.400',
fontWeight: 'bold',
transition: 'all 0.2s',
zIndex: 50,
boxShadow: 'md',
_hover: {
bg: isDark ? 'blue.700' : 'blue.200',
transform: 'scale(1.05)',
},
})}
>
💡 Hint
</button>
{/* Speech bubble for hint */}
{showHintBubble && hintText && (
<div
data-element="hint-bubble"
style={{
position: 'absolute',
top: `${buttonTop + 44}px`, // Below the hint button
right: `${buttonRight - 50}px`, // Centered relative to button
maxWidth: '280px',
}}
className={css({
bg: isDark ? 'gray.800' : 'white',
color: isDark ? 'gray.100' : 'gray.800',
padding: '3',
rounded: 'lg',
border: '2px solid',
borderColor: isDark ? 'blue.500' : 'blue.400',
boxShadow: 'lg',
fontSize: 'sm',
lineHeight: 'relaxed',
zIndex: 51,
position: 'relative',
// Speech bubble pointer (pointing up to button)
_before: {
content: '""',
position: 'absolute',
top: '-10px',
right: '70px',
borderWidth: '0 10px 10px 10px',
borderStyle: 'solid',
borderColor: isDark
? 'transparent transparent token(colors.blue.500) transparent'
: 'transparent transparent token(colors.blue.400) transparent',
},
_after: {
content: '""',
position: 'absolute',
top: '-7px',
right: '72px',
borderWidth: '0 8px 8px 8px',
borderStyle: 'solid',
borderColor: isDark
? 'transparent transparent token(colors.gray.800) transparent'
: 'transparent transparent white transparent',
},
})}
>
{hintText}
</div>
)}
</>
)
})()}
{/* Dev-only crop tool for getting custom viewBox coordinates */}
<DevCropTool
svgRef={svgRef}

View File

@ -0,0 +1,186 @@
import { useCallback, useEffect, useRef, useState } from 'react'
export interface ButtonBounds {
left: number
top: number
right: number
bottom: number
}
export interface PointerLockButtonOptions {
/** Unique identifier for this button */
id: string
/** Whether the button is disabled */
disabled?: boolean
/** Whether the button should be active (e.g., visible/mounted) */
active?: boolean
/** Current pointer lock state */
pointerLocked: boolean
/** Current fake cursor position (relative to container) */
cursorPosition: { x: number; y: number } | null
/** Container ref for calculating relative bounds */
containerRef: React.RefObject<HTMLElement | null>
/** Callback when button is clicked via pointer lock */
onClick: () => void
}
export interface PointerLockButtonResult {
/** Ref callback to attach to the button element - updates bounds on mount/render */
refCallback: (el: HTMLElement | null) => void
/** Whether the fake cursor is currently hovering over this button */
isHovered: boolean
/** Current bounds of the button (relative to container) */
bounds: ButtonBounds | null
/** Check if a click at the given position would hit this button */
checkClick: (x: number, y: number) => boolean
}
/**
* Hook for making a button work with pointer lock mode.
*
* When pointer lock is active, normal click and hover events don't fire.
* This hook tracks the button's bounds and checks if the fake cursor
* is hovering over or clicking on the button.
*
* Usage:
* ```tsx
* const { refCallback, isHovered, checkClick } = usePointerLockButton({
* id: 'give-up',
* pointerLocked,
* cursorPosition,
* containerRef,
* onClick: handleGiveUp,
* })
*
* return (
* <button
* ref={refCallback}
* style={{
* ...(isHovered ? { backgroundColor: 'yellow' } : {}),
* }}
* >
* Give Up
* </button>
* )
* ```
*/
export function usePointerLockButton(options: PointerLockButtonOptions): PointerLockButtonResult {
const {
disabled = false,
active = true,
pointerLocked,
cursorPosition,
containerRef,
onClick,
} = options
const boundsRef = useRef<ButtonBounds | null>(null)
const [isHovered, setIsHovered] = useState(false)
// Update bounds when button element changes
const refCallback = useCallback(
(el: HTMLElement | null) => {
if (el && containerRef.current) {
const buttonRect = el.getBoundingClientRect()
const containerRect = containerRef.current.getBoundingClientRect()
boundsRef.current = {
left: buttonRect.left - containerRect.left,
top: buttonRect.top - containerRect.top,
right: buttonRect.right - containerRect.left,
bottom: buttonRect.bottom - containerRect.top,
}
} else {
boundsRef.current = null
}
},
[containerRef]
)
// Check if a position is within bounds
const isPositionInBounds = useCallback((x: number, y: number): boolean => {
const bounds = boundsRef.current
if (!bounds) return false
return x >= bounds.left && x <= bounds.right && y >= bounds.top && y <= bounds.bottom
}, [])
// Check if a click at position would hit this button
const checkClick = useCallback(
(x: number, y: number): boolean => {
if (!active || disabled) return false
return isPositionInBounds(x, y)
},
[active, disabled, isPositionInBounds]
)
// Update hover state when cursor moves (only in pointer lock mode)
useEffect(() => {
if (!pointerLocked || !active || !cursorPosition) {
setIsHovered(false)
return
}
const isOver = isPositionInBounds(cursorPosition.x, cursorPosition.y)
setIsHovered(isOver)
}, [pointerLocked, active, cursorPosition, isPositionInBounds])
// Reset hover state when pointer lock is released
useEffect(() => {
if (!pointerLocked) {
setIsHovered(false)
}
}, [pointerLocked])
return {
refCallback,
isHovered: isHovered && !disabled,
bounds: boundsRef.current,
checkClick,
}
}
/**
* Registry for managing multiple pointer lock buttons.
* The parent component can use this to check clicks against all registered buttons.
*/
export interface PointerLockButtonRegistry {
/** Register a button with its click handler */
register: (id: string, checkClick: (x: number, y: number) => boolean, onClick: () => void) => void
/** Unregister a button */
unregister: (id: string) => void
/** Handle a click at the given position, returns true if a button was clicked */
handleClick: (x: number, y: number) => boolean
}
/**
* Hook for managing a registry of pointer lock buttons.
* Use this in the parent component to handle clicks for all registered buttons.
*/
export function usePointerLockButtonRegistry(): PointerLockButtonRegistry {
const buttonsRef = useRef<
Map<string, { checkClick: (x: number, y: number) => boolean; onClick: () => void }>
>(new Map())
const register = useCallback(
(id: string, checkClick: (x: number, y: number) => boolean, onClick: () => void) => {
buttonsRef.current.set(id, { checkClick, onClick })
},
[]
)
const unregister = useCallback((id: string) => {
buttonsRef.current.delete(id)
}, [])
const handleClick = useCallback((x: number, y: number): boolean => {
for (const [id, { checkClick, onClick }] of buttonsRef.current) {
if (checkClick(x, y)) {
console.log(`[CLICK] Button "${id}" clicked via pointer lock`)
onClick()
return true
}
}
return false
}, [])
return { register, unregister, handleClick }
}

View File

@ -0,0 +1,64 @@
import { useMemo, useRef } from 'react'
import { useLocale } from 'next-intl'
import { getHints, hasHints, type HintMap } from '../messages'
import type { Locale } from '@/i18n/messages'
/**
* Hook to get a randomly selected hint for a region in the current locale.
* The hint is selected once when the region changes and stays consistent
* for that region prompt. Different hints may appear on subsequent attempts
* at the same region.
*
* Returns null if no hints exist for the region.
*/
export function useRegionHint(map: HintMap, regionId: string | null): string | null {
const locale = useLocale() as Locale
// Track which region we last selected a hint for
const lastRegionRef = useRef<string | null>(null)
const selectedHintRef = useRef<string | null>(null)
// When region changes, select a new random hint
const hint = useMemo(() => {
if (!regionId) {
lastRegionRef.current = null
selectedHintRef.current = null
return null
}
const hints = getHints(locale, map, regionId)
if (!hints || hints.length === 0) {
lastRegionRef.current = regionId
selectedHintRef.current = null
return null
}
// If same region, return previously selected hint
if (regionId === lastRegionRef.current && selectedHintRef.current !== null) {
return selectedHintRef.current
}
// New region - select a random hint
const randomIndex = Math.floor(Math.random() * hints.length)
const selected = hints[randomIndex]
lastRegionRef.current = regionId
selectedHintRef.current = selected
return selected
}, [locale, map, regionId])
return hint
}
/**
* Hook to check if hints exist for a region in the current locale
*/
export function useHasRegionHint(map: HintMap, regionId: string | null): boolean {
const locale = useLocale() as Locale
if (!regionId) {
return false
}
return hasHints(locale, map, regionId)
}

View File

@ -0,0 +1,280 @@
{
"hints": {
"usa": {
"ak": [
"Dieser große Staat ist ganz oben, weit weg von den anderen Staaten.",
"Suche den riesigen Staat in der Nähe vom Nordpol. Dort ist es kalt!",
"Dieser Staat liegt neben Kanada und hat viel Schnee und Eisbären.",
"Finde den Staat, der ganz alleine sitzt, weit weg von den anderen."
],
"al": [
"Dieser Staat ist im Süden, neben dem Golf von Mexiko.",
"Suche den Staat, der Florida auf einer Seite berührt.",
"Finde den Staat, der wie ein Rechteck im Südosten aussieht."
],
"ar": [
"Dieser Staat ist in der Mitte des Landes, ein bisschen im Süden.",
"Suche den Staat direkt über Louisiana.",
"Finde den Staat, der östlich neben Texas liegt."
],
"az": [
"Dieser Staat ist in der heißen Wüste im Südwesten.",
"Suche den Staat unten links, der Mexiko berührt.",
"Finde den Staat rechts neben Kalifornien.",
"Dieser Staat hat den Grand Canyon!"
],
"ca": [
"Dieser lange Staat ist links, neben dem großen Ozean.",
"Suche den Staat an der Westküste, der von oben nach unten geht.",
"Finde den richtig langen Staat am Pazifischen Ozean.",
"Hier sind Disneyland und Hollywood!"
],
"co": [
"Dieser Staat sieht aus wie ein perfektes Rechteck in der Mitte.",
"Suche den quadratischen Staat mit Bergen.",
"Finde den Staat in der Mitte, der wie eine Kiste aussieht."
],
"ct": [
"Dieser winzige Staat ist in der oberen rechten Ecke, nahe am Ozean.",
"Suche einen der kleinsten Staaten im Nordosten.",
"Finde den kleinen Staat unter Massachusetts."
],
"dc": [
"Das ist ein winziges Quadrat zwischen Maryland und Virginia.",
"Suche den kleinsten Punkt auf der Karte im Osten.",
"Finde den kleinen Bereich, wo der Präsident wohnt.",
"Hier ist das Weiße Haus!"
],
"de": [
"Dieser winzige Staat ist an der Ostküste, geformt wie ein kleiner Finger.",
"Suche einen der kleinsten Staaten am Ozean auf der rechten Seite.",
"Finde den kleinen Staat neben Maryland."
],
"fl": [
"Dieser Staat ragt ins Wasser wie ein Finger, der nach unten zeigt.",
"Suche den Staat unten rechts, der aussieht, als würde er ins Meer greifen.",
"Finde den Staat, der wie ein Daumen nach unten geformt ist.",
"Hier leben Alligatoren und Palmen!",
"Suche den Staat, der auf drei Seiten von Wasser umgeben ist."
],
"ga": [
"Dieser Staat ist im Südosten, direkt über Florida.",
"Suche den Staat, der ein bisschen wie ein Handschuh über Florida aussieht.",
"Finde den Staat im Osten, der den Ozean berührt.",
"Dieser Staat hat viele Pfirsiche!"
],
"hi": [
"Diese Inseln sind weit draußen im Pazifischen Ozean.",
"Suche die kleinen Inseln, die ganz alleine weit weg schweben.",
"Finde den Staat, der aus kleinen Inseln im Ozean besteht.",
"Dieser Staat ist dem Strand und den Palmen am nächsten!"
],
"ia": [
"Dieser Staat ist in der Mitte des Landes, geformt wie ein Schweinegesicht.",
"Suche den Staat zwischen Minnesota und Missouri.",
"Finde den Staat genau in der Mitte mit vielen Maisfeldern."
],
"id": [
"Dieser Staat ist im Nordwesten und hat eine lustige Form oben.",
"Suche den Staat, der aussieht, als hätte er eine spitze Mütze.",
"Finde den Staat neben Montana, der wie ein Stuhl aussieht."
],
"il": [
"Dieser Staat ist in der Mitte und hat eine große Stadt namens Chicago.",
"Suche den Staat, der unten wie ein Pfeil nach unten zeigt.",
"Finde den Staat neben dem großen See oben."
],
"in": [
"Dieser Staat ist in der Mitte, direkt neben Illinois.",
"Suche den Staat, der ein bisschen wie ein Weihnachtsstrumpf aussieht.",
"Finde den Staat zwischen Illinois und Ohio."
],
"ks": [
"Dieser Staat ist wie ein Rechteck genau in der Mitte des Landes.",
"Suche den kastenförmigen Staat in der Mitte.",
"Finde den flachen Staat, wo Dorothy aus dem Zauberer von Oz gelebt hat!"
],
"ky": [
"Dieser Staat hat eine lustige huckelige Form, wie ein Hühnerbein.",
"Suche den Staat, der sich durch den mittleren Osten schlängelt.",
"Finde den Staat, der lang und dünn seitwärts verläuft."
],
"la": [
"Dieser Staat ist unten und sieht aus wie ein Stiefel.",
"Suche den Staat, der in den Golf von Mexiko hineinragt.",
"Finde den Staat, der wie der Buchstabe L unten geformt ist.",
"Dieser Staat hat Sümpfe und Alligatoren!"
],
"ma": [
"Dieser Staat ist in der oberen rechten Ecke mit einem lustigen Arm, der herausragt.",
"Suche den Staat, der aussieht, als hätte er einen gebeugten Arm im Nordosten.",
"Finde den Staat mit Cape Cod, der wie ein angespannter Muskel aussieht."
],
"md": [
"Dieser Staat hat eine richtig verrückte, huckelige Form an der Ostküste.",
"Suche den Staat, der sich um eine große Bucht wickelt.",
"Finde den Staat mit den Zickzack-Kanten nahe Washington DC."
],
"me": [
"Dieser Staat ist in der obersten rechten Ecke des Landes.",
"Suche den Staat, der im Nordosten nach Kanada hinaufreicht.",
"Finde den Staat, der ganz alleine oben an der Ostküste ist.",
"Dieser Staat sieht jeden Tag als erstes den Sonnenaufgang!"
],
"mi": [
"Dieser Staat sieht aus wie ein Handschuh! Er hat zwei Teile.",
"Suche den Staat, der wie ein Fäustling bei den großen Seen geformt ist.",
"Finde die zwei Landstücke, die von den Großen Seen umgeben sind.",
"Dieser Staat berührt vier der fünf Großen Seen!"
],
"mn": [
"Dieser Staat ist oben, nahe bei Kanada, mit vielen Seen.",
"Suche den Staat oben, der eine buckelige obere Kante hat.",
"Finde den Staat, der das Land der 10.000 Seen genannt wird!"
],
"mo": [
"Dieser Staat ist genau in der Mitte des Landes.",
"Suche den Staat, wo die zwei großen Flüsse sich treffen.",
"Finde den Staat zwischen Kansas und Illinois."
],
"ms": [
"Dieser Staat ist im Süden, geformt wie ein Rechteck.",
"Suche den Staat westlich neben Alabama.",
"Finde den Staat am großen Fluss mit dem gleichen Namen."
],
"mt": [
"Dieser große Staat ist oben, neben Kanada.",
"Suche das große Rechteck oben mit Bergen.",
"Finde den Staat namens Big Sky Country oben links."
],
"nc": [
"Dieser Staat ist an der Ostküste und ist lang und dünn.",
"Suche den Staat, der sich seitwärts über South Carolina erstreckt.",
"Finde den Staat, der rechts in den Ozean hinausreicht."
],
"nd": [
"Dieser Staat ist ganz oben, geformt wie ein Rechteck.",
"Suche den Staat direkt unter Kanada in der oberen Mitte.",
"Finde den kastenförmigen Staat neben Montana."
],
"ne": [
"Dieser Staat ist in der Mitte und sieht aus wie eine Pfanne mit Griff.",
"Suche den Staat, der auf einer Seite eine Beule hat.",
"Finde den Staat, der ein bisschen wie eine Bratpfanne geformt ist."
],
"nh": [
"Dieser dünne Staat ist oben rechts, neben Vermont.",
"Suche den hohen, dünnen Staat unter Maine.",
"Finde den Staat, der wie eine Rakete nach oben zeigt."
],
"nj": [
"Dieser kleine Staat an der Ostküste sieht aus wie der Buchstabe J.",
"Suche den kleinen Staat unter New York, der sich krümmt.",
"Finde den Staat, der wie ein seitliches S nahe am Ozean geformt ist."
],
"nm": [
"Dieser Staat ist im Südwesten, geformt wie ein Quadrat mit einer Stufe.",
"Suche den Staat unter Colorado, aus dem ein Bissen herausgebissen wurde.",
"Finde den Staat westlich neben Texas."
],
"nv": [
"Dieser Staat ist im Westen und sieht aus wie ein Dreieck, das nach unten zeigt.",
"Suche den Staat neben Kalifornien, der wie ein Stück Pizza aussieht.",
"Finde den Staat, wo Las Vegas ist, in der Wüste.",
"Dieser Staat sieht aus wie ein umgedrehtes Haus."
],
"ny": [
"Dieser Staat ist im Nordosten und hat eine große Stadt mit dem gleichen Namen.",
"Suche den Staat, der aussieht, als hätte er Arme, die herausreichen.",
"Finde den Staat mit der Freiheitsstatue!",
"Dieser Staat hat Long Island, das wie ein Fisch herausragt."
],
"oh": [
"Dieser Staat sieht ein bisschen aus wie ein seitliches Herz.",
"Suche den rundlichen Staat neben dem See oben.",
"Finde den Staat zwischen Pennsylvania und Indiana."
],
"ok": [
"Dieser Staat sieht aus wie eine Pfanne mit einem langen Griff.",
"Suche den Staat mit dem lustigen Rechteck, das nach links herausragt.",
"Finde den Staat, der aussieht, als würde er auf Texas zeigen."
],
"or": [
"Dieser Staat ist in der oberen linken Ecke, am Ozean.",
"Suche den Staat über Kalifornien an der Westküste.",
"Finde den Staat unten neben Washington."
],
"pa": [
"Dieser Staat ist wie ein Rechteck im Nordosten geformt.",
"Suche den breiten Staat unter New York.",
"Finde den Staat, wo die Freiheitsglocke ist!"
],
"ri": [
"Das ist der winzigste Staat! Er ist in der oberen rechten Ecke.",
"Suche den kleinsten Staat auf der ganzen Karte, am Ozean.",
"Finde den kleinen Staat unter Massachusetts.",
"Dieser Staat ist so klein, dass du ihn vielleicht übersiehst!"
],
"sc": [
"Dieser Staat ist an der Südostküste, unter North Carolina.",
"Suche den Staat, der wie ein Dreieck nach links zeigt.",
"Finde den kleineren Staat unter dem langen, dünnen im Osten."
],
"sd": [
"Dieser Staat ist in der oberen Mitte, geformt wie ein Rechteck.",
"Suche den Staat unter North Dakota.",
"Finde den Staat, wo die Gesichter in einen Berg gemeißelt sind!"
],
"tn": [
"Dieser Staat ist lang und dünn und geht seitwärts über die Karte.",
"Suche den Staat, der wie ein gestrecktes Rechteck aussieht.",
"Finde den dünnen Staat, der acht andere Staaten berührt!"
],
"tx": [
"Das ist der größte Staat im unteren Teil des Landes!",
"Suche den riesigen Staat unten, der wie ein Stern geformt ist.",
"Finde den riesigen Staat, der Mexiko berührt.",
"Dieser Staat ist so groß, alles ist dort größer!",
"Suche den Staat, der aussieht, als hätte er einen spitzen Stiefel."
],
"ut": [
"Dieser Staat sieht aus wie der Buchstabe L im Westen.",
"Suche den Staat mit einer Ecke, die oben herausgeschnitten ist.",
"Finde den Staat neben Colorado, der wie ein tretender Stiefel aussieht."
],
"va": [
"Dieser Staat ist an der Ostküste und hat eine dreieckige Form.",
"Suche den Staat, der rechts zum Ozean zeigt.",
"Finde den Staat, aus dem viele Präsidenten kamen!"
],
"vt": [
"Dieser kleine Staat ist oben rechts, geformt wie ein Dreieck.",
"Suche den kleinen Staat neben New Hampshire.",
"Finde den Staat, der wie ein Tortenstück im Nordosten aussieht."
],
"wa": [
"Dieser Staat ist in der obersten linken Ecke, am Ozean.",
"Suche den Staat oben an der Westküste.",
"Finde den Staat neben Kanada in der nordwestlichen Ecke.",
"Dieser Staat hat eine lustige quadratische Form mit einer Delle oben."
],
"wi": [
"Dieser Staat sieht ein bisschen aus wie ein Handschuh, bei den großen Seen.",
"Suche den Staat, der aussieht, als hätte er einen Daumen, der herausragt.",
"Finde den Staat zwischen Minnesota und Michigan.",
"Dieser Staat ist berühmt für Käse!"
],
"wv": [
"Dieser Staat hat eine richtig huckelige, verrückte Form mit zwei Buckeln oben.",
"Suche den Staat, der aussieht, als hätte er zwei Ohren.",
"Finde den Staat, der ganz wellig im Osten ist."
],
"wy": [
"Dieser Staat ist ein perfektes Rechteck im Westen.",
"Suche den quadratischen Staat unter Montana.",
"Finde den kastenförmigen Staat mit dem Yellowstone-Park!"
]
},
"world": {}
}
}

View File

@ -0,0 +1,280 @@
{
"hints": {
"usa": {
"ak": [
"This big state is way up at the top, far away from the other states.",
"Look for the really big state near the North Pole. It's cold there!",
"This state is next to Canada and has lots of snow and polar bears.",
"Find the state that looks like it's sitting by itself, far from the others."
],
"al": [
"This state is in the south, next to the Gulf of Mexico water.",
"Look for the state that touches Florida on one side.",
"Find the state that's shaped a bit like a rectangle in the southeast."
],
"ar": [
"This state is in the middle of the country, a little to the south.",
"Look for the state right above Louisiana.",
"Find the state that's next to Texas on the east side."
],
"az": [
"This state is in the hot desert in the southwest.",
"Look for the state at the bottom left that touches Mexico.",
"Find the state next to California on the right side.",
"This state has the Grand Canyon!"
],
"ca": [
"This long state is on the left side, next to the big ocean.",
"Look for the state on the west coast that goes up and down.",
"Find the really long state by the Pacific Ocean.",
"This is where Disneyland and Hollywood are!"
],
"co": [
"This state is shaped like a perfect rectangle in the middle.",
"Look for the square-shaped state with mountains.",
"Find the state in the middle that looks like a box."
],
"ct": [
"This tiny state is in the top right corner near the ocean.",
"Look for one of the smallest states in the northeast.",
"Find the little state below Massachusetts."
],
"dc": [
"This is a tiny square between Maryland and Virginia.",
"Look for the smallest spot on the map in the east.",
"Find the little area where the President lives.",
"This is where the White House is!"
],
"de": [
"This tiny state is on the east coast, shaped like a little finger.",
"Look for one of the smallest states near the ocean on the right.",
"Find the little state next to Maryland."
],
"fl": [
"This state sticks out into the water like a finger pointing down.",
"Look for the state at the bottom right that looks like it's reaching into the ocean.",
"Find the state shaped like a thumb pointing down.",
"This is where alligators and palm trees live!",
"Look for the state that's surrounded by water on three sides."
],
"ga": [
"This state is in the southeast, right above Florida.",
"Look for the state shaped a bit like a mitten above Florida.",
"Find the state on the east side that touches the ocean.",
"This state has lots of peaches!"
],
"hi": [
"These islands are way out in the middle of the Pacific Ocean.",
"Look for the tiny islands floating by themselves far from everything.",
"Find the state that's made of little islands in the ocean.",
"This state is closest to the beach and palm trees!"
],
"ia": [
"This state is in the middle of the country, shaped like a pig's face.",
"Look for the state between Minnesota and Missouri.",
"Find the state right in the middle that has lots of corn farms."
],
"id": [
"This state is in the northwest and has a funny shape at the top.",
"Look for the state that looks like it has a pointy hat.",
"Find the state next to Montana that looks like a chair."
],
"il": [
"This state is in the middle and has a big city called Chicago.",
"Look for the state that looks like it's pointing down at the bottom.",
"Find the state next to the big lake at the top."
],
"in": [
"This state is in the middle, right next to Illinois.",
"Look for the state shaped a bit like a Christmas stocking.",
"Find the state between Illinois and Ohio."
],
"ks": [
"This state is shaped like a rectangle right in the middle of the country.",
"Look for the box-shaped state in the center.",
"Find the flat state where Dorothy from Wizard of Oz lived!"
],
"ky": [
"This state has a funny bumpy shape, like a drumstick.",
"Look for the state that wiggles across the middle-east part.",
"Find the state that's long and skinny going sideways."
],
"la": [
"This state is at the bottom and looks like a boot.",
"Look for the state that sticks into the Gulf of Mexico.",
"Find the state shaped like the letter L at the bottom.",
"This state has swamps and alligators!"
],
"ma": [
"This state is in the top right corner and has a funny arm sticking out.",
"Look for the state that looks like it has a bent arm in the northeast.",
"Find the state with Cape Cod that looks like a flexing muscle."
],
"md": [
"This state has a really crazy, bumpy shape on the east coast.",
"Look for the state that wraps around a big bay.",
"Find the state with the zigzag edges near Washington DC."
],
"me": [
"This state is at the very top right corner of the country.",
"Look for the state that's reaching up toward Canada in the northeast.",
"Find the state that's all by itself at the top of the east coast.",
"This is the first state to see the sunrise every day!"
],
"mi": [
"This state looks like a mitten! It has two parts.",
"Look for the state shaped like a glove near the big lakes.",
"Find the two pieces of land surrounded by the Great Lakes.",
"This state is touching four of the five Great Lakes!"
],
"mn": [
"This state is at the top, near Canada, with lots of lakes.",
"Look for the state at the top that has a bumpy top edge.",
"Find the state that's called the land of 10,000 lakes!"
],
"mo": [
"This state is right in the middle of the country.",
"Look for the state where the two big rivers meet.",
"Find the state between Kansas and Illinois."
],
"ms": [
"This state is in the south, shaped like a rectangle.",
"Look for the state next to Alabama on the west side.",
"Find the state along the big river with the same name."
],
"mt": [
"This big state is at the top, next to Canada.",
"Look for the big rectangle at the top with mountains.",
"Find the state called Big Sky Country at the top left area."
],
"nc": [
"This state is on the east coast and is long and skinny.",
"Look for the state that stretches sideways above South Carolina.",
"Find the state that reaches out into the ocean on the right."
],
"nd": [
"This state is at the very top, shaped like a rectangle.",
"Look for the state right below Canada in the middle-top.",
"Find the box-shaped state next to Montana."
],
"ne": [
"This state is in the middle and looks like a pan with a handle.",
"Look for the state that has a bump sticking out on one side.",
"Find the state shaped a bit like a frying pan."
],
"nh": [
"This skinny state is in the top right, next to Vermont.",
"Look for the tall, thin state below Maine.",
"Find the state that looks like a rocket pointing up."
],
"nj": [
"This small state on the east coast looks like the letter J.",
"Look for the little state below New York that curves.",
"Find the state shaped like a sideways S near the ocean."
],
"nm": [
"This state is in the southwest, shaped like a square with a step.",
"Look for the state below Colorado that has a little bite taken out.",
"Find the state next to Texas on the west side."
],
"nv": [
"This state is in the west and is shaped like a triangle pointing down.",
"Look for the state next to California that looks like a slice of pizza.",
"Find the state where Las Vegas is, in the desert.",
"This state is shaped like an upside-down house."
],
"ny": [
"This state is in the northeast and has a big city with the same name.",
"Look for the state that looks like it has arms reaching out.",
"Find the state with the Statue of Liberty!",
"This state has Long Island that sticks out like a fish."
],
"oh": [
"This state is shaped a bit like a heart on its side.",
"Look for the round-ish state next to the lake at the top.",
"Find the state between Pennsylvania and Indiana."
],
"ok": [
"This state looks like a pan with a long handle sticking out.",
"Look for the state with the funny rectangle sticking out to the left.",
"Find the state that looks like it's pointing at Texas."
],
"or": [
"This state is in the top left corner, by the ocean.",
"Look for the state above California on the west coast.",
"Find the state next to Washington on the bottom."
],
"pa": [
"This state is shaped like a rectangle in the northeast.",
"Look for the wide state below New York.",
"Find the state where the Liberty Bell is!"
],
"ri": [
"This is the tiniest state! It's in the top right corner.",
"Look for the smallest state on the whole map, by the ocean.",
"Find the little state below Massachusetts.",
"This state is so small you might miss it!"
],
"sc": [
"This state is on the southeast coast, below North Carolina.",
"Look for the state that looks like a triangle pointing left.",
"Find the smaller state under the long, skinny one on the east."
],
"sd": [
"This state is in the top middle, shaped like a rectangle.",
"Look for the state below North Dakota.",
"Find the state where the faces are carved into a mountain!"
],
"tn": [
"This state is long and skinny, going sideways across the map.",
"Look for the state that looks like a stretched rectangle.",
"Find the skinny state that touches eight other states!"
],
"tx": [
"This is the biggest state in the bottom part of the country!",
"Look for the really big state shaped like a star at the bottom.",
"Find the huge state that touches Mexico.",
"This state is so big, everything is bigger there!",
"Look for the state that looks like it has a pointy boot."
],
"ut": [
"This state is shaped like the letter L in the west.",
"Look for the state with a corner cut out at the top.",
"Find the state next to Colorado that looks like a boot stepping."
],
"va": [
"This state is on the east coast and has a triangular shape.",
"Look for the state that points toward the ocean on the right.",
"Find the state where lots of Presidents came from!"
],
"vt": [
"This small state is in the top right, shaped like a triangle.",
"Look for the little state next to New Hampshire.",
"Find the state that looks like a slice of pie in the northeast."
],
"wa": [
"This state is in the very top left corner, by the ocean.",
"Look for the state at the top of the west coast.",
"Find the state next to Canada in the northwest corner.",
"This state has a funny square shape with a dip at the top."
],
"wi": [
"This state is shaped a bit like a mitten, near the big lakes.",
"Look for the state that looks like it has a thumb sticking out.",
"Find the state between Minnesota and Michigan.",
"This state is famous for cheese!"
],
"wv": [
"This state has a really bumpy, crazy shape with two bumps at top.",
"Look for the state that looks like it has two ears.",
"Find the state that's all wiggly in the east."
],
"wy": [
"This state is a perfect rectangle in the west.",
"Look for the square state below Montana.",
"Find the box-shaped state with Yellowstone Park!"
]
},
"world": {}
}
}

View File

@ -0,0 +1,280 @@
{
"hints": {
"usa": {
"ak": [
"Este estado grande está muy arriba, lejos de los otros estados.",
"Busca el estado enorme cerca del Polo Norte. ¡Hace mucho frío allí!",
"Este estado está al lado de Canadá y tiene mucha nieve y osos polares.",
"Encuentra el estado que está solito, muy lejos de los demás."
],
"al": [
"Este estado está en el sur, junto al agua del Golfo de México.",
"Busca el estado que toca Florida por un lado.",
"Encuentra el estado que parece un rectángulo en el sureste."
],
"ar": [
"Este estado está en el medio del país, un poquito hacia el sur.",
"Busca el estado justo arriba de Louisiana.",
"Encuentra el estado que está al lado este de Texas."
],
"az": [
"Este estado está en el desierto caliente del suroeste.",
"Busca el estado abajo a la izquierda que toca México.",
"Encuentra el estado a la derecha de California.",
"¡Este estado tiene el Gran Cañón!"
],
"ca": [
"Este estado largo está a la izquierda, junto al océano grande.",
"Busca el estado en la costa oeste que va de arriba a abajo.",
"Encuentra el estado muy largo junto al Océano Pacífico.",
"¡Aquí están Disneyland y Hollywood!"
],
"co": [
"Este estado tiene forma de rectángulo perfecto en el medio.",
"Busca el estado cuadrado con montañas.",
"Encuentra el estado en el medio que parece una caja."
],
"ct": [
"Este estado pequeñito está en la esquina de arriba a la derecha, cerca del océano.",
"Busca uno de los estados más pequeños en el noreste.",
"Encuentra el estado pequeño debajo de Massachusetts."
],
"dc": [
"Este es un cuadradito pequeño entre Maryland y Virginia.",
"Busca el puntito más pequeño en el mapa en el este.",
"Encuentra el lugarcito donde vive el Presidente.",
"¡Aquí está la Casa Blanca!"
],
"de": [
"Este estado pequeñito está en la costa este, con forma de dedito.",
"Busca uno de los estados más pequeños cerca del océano a la derecha.",
"Encuentra el estado pequeño al lado de Maryland."
],
"fl": [
"Este estado sale hacia el agua como un dedo apuntando hacia abajo.",
"Busca el estado abajo a la derecha que parece que está tocando el mar.",
"Encuentra el estado con forma de pulgar apuntando hacia abajo.",
"¡Aquí viven cocodrilos y palmeras!",
"Busca el estado que tiene agua por tres lados."
],
"ga": [
"Este estado está en el sureste, justo arriba de Florida.",
"Busca el estado que parece un guante arriba de Florida.",
"Encuentra el estado en el este que toca el océano.",
"¡Este estado tiene muchos duraznos!"
],
"hi": [
"Estas islas están muy lejos en el medio del Océano Pacífico.",
"Busca las islitas que flotan solitas muy lejos de todo.",
"Encuentra el estado que está hecho de islitas en el océano.",
"¡Este estado está más cerca de la playa y las palmeras!"
],
"ia": [
"Este estado está en el medio del país, con forma de carita de cerdo.",
"Busca el estado entre Minnesota y Missouri.",
"Encuentra el estado en el medio con muchas granjas de maíz."
],
"id": [
"Este estado está en el noroeste y tiene una forma graciosa arriba.",
"Busca el estado que parece que tiene un gorrito puntiagudo.",
"Encuentra el estado al lado de Montana que parece una silla."
],
"il": [
"Este estado está en el medio y tiene una ciudad grande llamada Chicago.",
"Busca el estado que parece que apunta hacia abajo.",
"Encuentra el estado al lado del lago grande arriba."
],
"in": [
"Este estado está en el medio, justo al lado de Illinois.",
"Busca el estado que parece una media de Navidad.",
"Encuentra el estado entre Illinois y Ohio."
],
"ks": [
"Este estado tiene forma de rectángulo justo en el medio del país.",
"Busca el estado con forma de caja en el centro.",
"¡Encuentra el estado plano donde vivía Dorothy del Mago de Oz!"
],
"ky": [
"Este estado tiene una forma graciosa con bultos, como una pata de pollo.",
"Busca el estado que serpentea por el centro-este.",
"Encuentra el estado largo y delgado que va de lado."
],
"la": [
"Este estado está abajo y parece una bota.",
"Busca el estado que entra en el Golfo de México.",
"Encuentra el estado con forma de letra L abajo.",
"¡Este estado tiene pantanos y cocodrilos!"
],
"ma": [
"Este estado está en la esquina de arriba a la derecha con un bracito que sale.",
"Busca el estado que parece tener un brazo doblado en el noreste.",
"Encuentra el estado con Cape Cod que parece un músculo flexionado."
],
"md": [
"Este estado tiene una forma muy loca y con bultos en la costa este.",
"Busca el estado que rodea una bahía grande.",
"Encuentra el estado con bordes en zigzag cerca de Washington DC."
],
"me": [
"Este estado está en la esquina de arriba a la derecha del país.",
"Busca el estado que sube hacia Canadá en el noreste.",
"Encuentra el estado que está solito arriba en la costa este.",
"¡Este estado es el primero en ver el amanecer cada día!"
],
"mi": [
"¡Este estado parece un guante! Tiene dos partes.",
"Busca el estado con forma de manopla cerca de los lagos grandes.",
"Encuentra los dos pedazos de tierra rodeados por los Grandes Lagos.",
"¡Este estado toca cuatro de los cinco Grandes Lagos!"
],
"mn": [
"Este estado está arriba, cerca de Canadá, con muchos lagos.",
"Busca el estado de arriba que tiene un borde superior con bultos.",
"¡Encuentra el estado que se llama la tierra de los 10,000 lagos!"
],
"mo": [
"Este estado está justo en el medio del país.",
"Busca el estado donde se encuentran los dos ríos grandes.",
"Encuentra el estado entre Kansas e Illinois."
],
"ms": [
"Este estado está en el sur, con forma de rectángulo.",
"Busca el estado al oeste de Alabama.",
"Encuentra el estado junto al río grande que tiene el mismo nombre."
],
"mt": [
"Este estado grande está arriba, al lado de Canadá.",
"Busca el rectángulo grande de arriba con montañas.",
"Encuentra el estado llamado País del Gran Cielo arriba a la izquierda."
],
"nc": [
"Este estado está en la costa este y es largo y delgado.",
"Busca el estado que se estira de lado arriba de South Carolina.",
"Encuentra el estado que sale hacia el océano a la derecha."
],
"nd": [
"Este estado está muy arriba, con forma de rectángulo.",
"Busca el estado justo debajo de Canadá en el centro-arriba.",
"Encuentra el estado con forma de caja al lado de Montana."
],
"ne": [
"Este estado está en el medio y parece una sartén con mango.",
"Busca el estado que tiene un bultito en un lado.",
"Encuentra el estado que parece una sartén."
],
"nh": [
"Este estado delgadito está arriba a la derecha, al lado de Vermont.",
"Busca el estado alto y delgado debajo de Maine.",
"Encuentra el estado que parece un cohete apuntando arriba."
],
"nj": [
"Este estado pequeño en la costa este parece la letra J.",
"Busca el estado pequeño debajo de New York que se curva.",
"Encuentra el estado con forma de S de lado cerca del océano."
],
"nm": [
"Este estado está en el suroeste, con forma de cuadrado con un escalón.",
"Busca el estado debajo de Colorado que parece que le dieron una mordida.",
"Encuentra el estado al oeste de Texas."
],
"nv": [
"Este estado está en el oeste y parece un triángulo apuntando hacia abajo.",
"Busca el estado al lado de California que parece un pedazo de pizza.",
"Encuentra el estado donde está Las Vegas, en el desierto.",
"Este estado parece una casita al revés."
],
"ny": [
"Este estado está en el noreste y tiene una ciudad grande con el mismo nombre.",
"Busca el estado que parece que tiene brazos saliendo.",
"¡Encuentra el estado con la Estatua de la Libertad!",
"Este estado tiene Long Island que sale como un pez."
],
"oh": [
"Este estado parece un corazón de lado.",
"Busca el estado redondito al lado del lago arriba.",
"Encuentra el estado entre Pennsylvania e Indiana."
],
"ok": [
"Este estado parece una sartén con un mango largo.",
"Busca el estado con el rectángulo gracioso que sale hacia la izquierda.",
"Encuentra el estado que parece que está apuntando a Texas."
],
"or": [
"Este estado está en la esquina de arriba a la izquierda, junto al océano.",
"Busca el estado arriba de California en la costa oeste.",
"Encuentra el estado debajo de Washington."
],
"pa": [
"Este estado tiene forma de rectángulo en el noreste.",
"Busca el estado ancho debajo de New York.",
"¡Encuentra el estado donde está la Campana de la Libertad!"
],
"ri": [
"¡Este es el estado más pequeñito! Está en la esquina de arriba a la derecha.",
"Busca el estado más pequeño de todo el mapa, junto al océano.",
"Encuentra el estado pequeño debajo de Massachusetts.",
"¡Este estado es tan pequeño que casi no lo ves!"
],
"sc": [
"Este estado está en la costa sureste, debajo de North Carolina.",
"Busca el estado que parece un triángulo apuntando a la izquierda.",
"Encuentra el estado más pequeño debajo del largo y delgado en el este."
],
"sd": [
"Este estado está en el centro-arriba, con forma de rectángulo.",
"Busca el estado debajo de North Dakota.",
"¡Encuentra el estado donde las caras están talladas en una montaña!"
],
"tn": [
"Este estado es largo y delgado, yendo de lado por el mapa.",
"Busca el estado que parece un rectángulo estirado.",
"¡Encuentra el estado delgado que toca ocho estados!"
],
"tx": [
"¡Este es el estado más grande en la parte de abajo del país!",
"Busca el estado enorme abajo que parece una estrella.",
"Encuentra el estado gigante que toca México.",
"¡Este estado es tan grande que todo es más grande allí!",
"Busca el estado que parece que tiene una bota puntiaguda."
],
"ut": [
"Este estado parece la letra L en el oeste.",
"Busca el estado que tiene una esquina cortada arriba.",
"Encuentra el estado al lado de Colorado que parece una bota pisando."
],
"va": [
"Este estado está en la costa este y tiene forma triangular.",
"Busca el estado que apunta hacia el océano a la derecha.",
"¡Encuentra el estado de donde vinieron muchos Presidentes!"
],
"vt": [
"Este estado pequeño está arriba a la derecha, con forma de triángulo.",
"Busca el estado pequeño al lado de New Hampshire.",
"Encuentra el estado que parece un pedazo de pastel en el noreste."
],
"wa": [
"Este estado está en la esquina de arriba a la izquierda, junto al océano.",
"Busca el estado de arriba en la costa oeste.",
"Encuentra el estado al lado de Canadá en la esquina noroeste.",
"Este estado tiene forma cuadrada graciosa con un hundido arriba."
],
"wi": [
"Este estado parece un guante, cerca de los lagos grandes.",
"Busca el estado que parece que tiene un pulgar que sale.",
"Encuentra el estado entre Minnesota y Michigan.",
"¡Este estado es famoso por el queso!"
],
"wv": [
"Este estado tiene una forma muy loca con bultos y dos bultitos arriba.",
"Busca el estado que parece que tiene dos orejitas.",
"Encuentra el estado todo ondulado en el este."
],
"wy": [
"Este estado es un rectángulo perfecto en el oeste.",
"Busca el estado cuadrado debajo de Montana.",
"¡Encuentra el estado con forma de caja con el Parque Yellowstone!"
]
},
"world": {}
}
}

View File

@ -0,0 +1,280 @@
{
"hints": {
"usa": {
"ak": [
"Diz grōza lant ist obana, ferro fon den anderen lantan.",
"Suochi daz grōza lant nāh dem norden. Dār ist iz kalt!",
"Diz lant ist nāh Kanada unta habet filu snēwes unta wīzan beran.",
"Findi daz lant daz eino sizzit, ferro fon den anderen."
],
"al": [
"Diz lant ist in sundan, nāh dem wazzare des Sinus Mexicani.",
"Suochi daz lant daz Florida einaz sītun rīnit.",
"Findi daz lant daz so ein fiurstecca in suntostan scinit."
],
"ar": [
"Diz lant ist in mitten des rīhes, luzzil sundwart.",
"Suochi daz lant obana Louisiana.",
"Findi daz lant az ōstarhalb Texas."
],
"az": [
"Diz lant ist in der heizun wuosti in sundwestun.",
"Suochi daz lant nidarun winstarhalf daz Mexico rīnit.",
"Findi daz lant zesawenhalf California.",
"Diz lant habet daz Grōza Tal!"
],
"ca": [
"Diz langa lant ist winstarhalf, nāh dem grōzan sēwe.",
"Suochi daz lant an dem westōde daz obana untan gēt.",
"Findi daz langōsta lant nāh dem Stillon Sēwe.",
"Hiar sint Disneyland unta Hollywood!"
],
"co": [
"Diz lant ist in mitten so ein fulliz fiurstecca.",
"Suochi daz fiursteccohafta lant mit bergan.",
"Findi daz lant in mitten daz so ein scatula scinit."
],
"ct": [
"Diz luzil lant ist in dem winchile zesawun obana, nāh dem sēwe.",
"Suochi einaz der luzilōstōn lando in nordōstan.",
"Findi daz luzila lant untar Massachusetts."
],
"dc": [
"Diz ist ein luzil fiurstecca zwischen Maryland unta Virginia.",
"Suochi daz luzilōsta stecki in der carta in ōstan.",
"Findi daz luzila stecki dār der kuning wīsōt.",
"Hiar ist daz Wīza Hūs!"
],
"de": [
"Diz luzil lant ist an dem ōstōde, so ein luzil fingar.",
"Suochi einaz der luzilōstōn lando nāh dem sēwe zesawun.",
"Findi daz luzila lant nāh Maryland."
],
"fl": [
"Diz lant gēt in daz wazzar so ein fingar der nidar wīsōt.",
"Suochi daz lant nidarun zesawun daz in daz meri gēt.",
"Findi daz lant so ein dūmo nidar giscaffan.",
"Hiar wīsōnt crocodilos unta palmbouma!",
"Suochi daz lant daz fon driu sītun mit wazzare umbi ist."
],
"ga": [
"Diz lant ist in sundōstan, obana Florida.",
"Suochi daz lant daz so ein hantscuoh obana Florida scinit.",
"Findi daz lant in ōstan daz den sēwe rīnit.",
"Diz lant habet filu phersica!"
],
"hi": [
"Disu ouwon sint ferro in mitten des Stillon Sēwes.",
"Suochi diu luzilun ouwon diu eino flīzent ferro.",
"Findi daz lant daz fon luzilun ouwon in dem sēwe gitan ist.",
"Diz lant ist nāhōst dem stade unta den palmboumun!"
],
"ia": [
"Diz lant ist in mitten des rīhes, so ein swīnes anasiune.",
"Suochi daz lant zwischen Minnesota unta Missouri.",
"Findi daz lant in mitten mit filun cornackarun."
],
"id": [
"Diz lant ist in nordwestan unta habet wuntarlīhha forma obana.",
"Suochi daz lant daz spizzan huot habēn scinit.",
"Findi daz lant nāh Montana daz so ein stuol scinit."
],
"il": [
"Diz lant ist in mitten unta habet grōza burg Chicago giheizana.",
"Suochi daz lant daz nidar wīsōt in demo nidarun.",
"Findi daz lant nāh dem grōzan sēwe obana."
],
"in": [
"Diz lant ist in mitten, nāh Illinois.",
"Suochi daz lant so ein wīhnahtsocco.",
"Findi daz lant zwischen Illinois unta Ohio."
],
"ks": [
"Diz lant ist so ein fiurstecca in mitten des rīhes.",
"Suochi daz scatulohafta lant in mitten.",
"Findi daz ebanaz lant dār Dorothy fon Mago Oz wīsōta!"
],
"ky": [
"Diz lant habet wuntarlīhha huckilohta forma, so ein huonosbein.",
"Suochi daz lant daz duruh den mittun ōstan slangōt.",
"Findi daz lant daz lang unta smala ubarzwerh gēt."
],
"la": [
"Diz lant ist nidarun unta scinit so ein scuoh.",
"Suochi daz lant daz in den Sinum Mexicanum gēt.",
"Findi daz lant so ein buohstab L nidarun.",
"Diz lant habet sumpfa unta crocodilos!"
],
"ma": [
"Diz lant ist in winchile zesawun obana mit wuntarlīhhemo arme.",
"Suochi daz lant daz giboganan arm habēn scinit in nordōstan.",
"Findi daz lant mit Cape Cod daz so ein giboganer musculo scinit."
],
"md": [
"Diz lant habet wuotigaz huckilohtaz giscefti an dem ōstōde.",
"Suochi daz lant daz grōzan sinun umbigēt.",
"Findi daz lant mit winkalohtun ortan nāh Washington DC."
],
"me": [
"Diz lant ist in dem winchile zesawun obana des rīhes.",
"Suochi daz lant daz ad Kanada in nordōstan strekkit.",
"Findi daz einōda lant obana an dem ōstōde.",
"Diz lant sihit iogiwelīhhan dag erist den sunnan ūfgang!"
],
"mi": [
"Diz lant scinit so ein hantscuoh! Iz habet zwā stucki.",
"Suochi daz lant so ein fāstiling nāh den grōzun sēwun.",
"Findi diu zwēi landu diu fon Grōzun Sēwun umbi sint.",
"Diz lant rīnit fiuru fon fimf Grōzun Sēwun!"
],
"mn": [
"Diz lant ist obana, nāh Kanada, mit filun sēwun.",
"Suochi daz lant obana daz huckilohtan obarun ort habet.",
"Findi daz lant daz lant zehan dūsuntero sēwo giheizit!"
],
"mo": [
"Diz lant ist in mitten des rīhes.",
"Suochi daz lant dār zwēi grōzun ahun gisamanōnt.",
"Findi daz lant zwischen Kansas unta Illinois."
],
"ms": [
"Diz lant ist in sundan, so ein fiurstecca.",
"Suochi daz lant westarhalf Alabama.",
"Findi daz lant nāh der grōzun ahu mit selbon namon."
],
"mt": [
"Diz grōza lant ist obana, nāh Kanada.",
"Suochi daz grōza fiurstecca obana mit bergan.",
"Findi daz lant Big Sky Country giheizit obana winstarhalf."
],
"nc": [
"Diz lant ist an dem ōstōde unta ist lang unta smal.",
"Suochi daz lant daz ubarzwerh obana South Carolina strekkit.",
"Findi daz lant daz in den sēwe zesawun strekkit."
],
"nd": [
"Diz lant ist obanōst, so ein fiurstecca.",
"Suochi daz lant untar Kanada in mittun obana.",
"Findi daz scatulohafta lant nāh Montana."
],
"ne": [
"Diz lant ist in mitten unta scinit so ein phanna mit handhaba.",
"Suochi daz lant daz hucki an eineru sītun habet.",
"Findi daz lant so ein brātphanna."
],
"nh": [
"Diz smala lant ist zesawun obana, nāh Vermont.",
"Suochi daz hōha smala lant untar Maine.",
"Findi daz lant daz so ein scif ūfwart wīsōt."
],
"nj": [
"Diz luzil lant an dem ōstōde scinit so ein buohstab J.",
"Suochi daz luzila lant untar New York daz bogōt.",
"Findi daz lant so ein ubarzwerh S nāh dem sēwe."
],
"nm": [
"Diz lant ist in sundwestan, so ein fiurstecca mit stīgu.",
"Suochi daz lant untar Colorado daz ūzgibizzanaz scinit.",
"Findi daz lant westarhalf Texas."
],
"nv": [
"Diz lant ist in westan unta ist so ein drīeggi nidarwart.",
"Suochi daz lant nāh California daz so ein stucki pizzae scinit.",
"Findi daz lant dār Las Vegas ist, in der wuosti.",
"Diz lant scinit so ein umbigikērit hūs."
],
"ny": [
"Diz lant ist in nordōstan unta habet grōza burg mit selbon namon.",
"Suochi daz lant daz arma ūzstrekkit.",
"Findi daz lant mit der Statue der Frīheiti!",
"Diz lant habet Long Island daz so ein fisc ūzgēt."
],
"oh": [
"Diz lant scinit so ein herza ubarzwerh.",
"Suochi daz rundohtaz lant nāh dem sēwe obana.",
"Findi daz lant zwischen Pennsylvania unta Indiana."
],
"ok": [
"Diz lant scinit so ein phanna mit langemo handhaba.",
"Suochi daz lant mit wuntarlīhhemo fiurstecca winstarhalf.",
"Findi daz lant daz an Texas wīsōn scinit."
],
"or": [
"Diz lant ist in winchile obana winstarhalf, nāh dem sēwe.",
"Suochi daz lant obana California an dem westōde.",
"Findi daz lant untar Washington."
],
"pa": [
"Diz lant ist so ein fiurstecca in nordōstan.",
"Suochi daz breitaz lant untar New York.",
"Findi daz lant dār diu Frīheitislocka ist!"
],
"ri": [
"Diz ist daz luzilōsta lant! Iz ist in winchile zesawun obana.",
"Suochi daz luzilōsta lant in aller cartu, nāh dem sēwe.",
"Findi daz luzila lant untar Massachusetts.",
"Diz lant ist sō luzil daz iz ferlīsēs!"
],
"sc": [
"Diz lant ist an dem sundōstōde, untar North Carolina.",
"Suochi daz lant daz so ein drīeggi winstarhalf wīsōt.",
"Findi daz luzilōra lant untar dem langan smalan in ōstan."
],
"sd": [
"Diz lant ist in mitten obana, so ein fiurstecca.",
"Suochi daz lant untar North Dakota.",
"Findi daz lant dār anasiuni in berg giscrotan sint!"
],
"tn": [
"Diz lant ist lang unta smal, ubarzwerh duruh diu carta.",
"Suochi daz lant daz so ein gistrekkitaz fiurstecca scinit.",
"Findi daz smala lant daz ahto anderiu landu rīnit!"
],
"tx": [
"Diz ist daz grōzōsta lant in nidarun teile des rīhes!",
"Suochi daz alagrōza lant nidarun daz so ein sterro scinit.",
"Findi daz ungafuoraz lant daz Mexico rīnit.",
"Diz lant ist sō grōz, alla dingu dār grōzōrun sint!",
"Suochi daz lant daz so ein spizzer scuoh scinit."
],
"ut": [
"Diz lant ist so ein buohstab L in westan.",
"Suochi daz lant mit ūzgisnittanemo winchile obana.",
"Findi daz lant nāh Colorado daz so ein staphenter scuoh scinit."
],
"va": [
"Diz lant ist an dem ōstōde unta habet drīeggohta forma.",
"Suochi daz lant daz an den sēwe zesawun wīsōt.",
"Findi daz lant dānan filu kuningā quāmun!"
],
"vt": [
"Diz luzil lant ist zesawun obana, so ein drīeggi.",
"Suochi daz luzila lant nāh New Hampshire.",
"Findi daz lant daz so ein stucki kuocho in nordōstan scinit."
],
"wa": [
"Diz lant ist in winchile obana winstarhalf, nāh dem sēwe.",
"Suochi daz lant obana an dem westōde.",
"Findi daz lant nāh Kanada in nordwestun.",
"Diz lant habet wuntarlīhha fiursteccohafta forma mit gruobu obana."
],
"wi": [
"Diz lant scinit so ein hantscuoh, nāh den grōzun sēwun.",
"Suochi daz lant daz dūmon ūzgēn habēn scinit.",
"Findi daz lant zwischen Minnesota unta Michigan.",
"Diz lant ist mit kāsi māri!"
],
"wv": [
"Diz lant habet wuotigaz huckilohtaz giscefti mit zwēin huckilun obana.",
"Suochi daz lant daz zwā ōrun habēn scinit.",
"Findi daz lant daz allaz wuntohtaz in ōstan ist."
],
"wy": [
"Diz lant ist fullaz fiurstecca in westan.",
"Suochi daz fiursteccohafta lant untar Montana.",
"Findi daz scatulohafta lant mit dem Yellowstone Parke!"
]
},
"world": {}
}
}

View File

@ -0,0 +1,280 @@
{
"hints": {
"usa": {
"ak": [
"यह बड़ा राज्य सबसे ऊपर है, दूसरे राज्यों से बहुत दूर।",
"उत्तरी ध्रुव के पास बहुत बड़ा राज्य खोजो। वहाँ बहुत ठंड है!",
"यह राज्य कनाडा के बगल में है और यहाँ बहुत बर्फ और ध्रुवीय भालू हैं।",
"वह राज्य खोजो जो अकेला बैठा है, बाकी सबसे दूर।"
],
"al": [
"यह राज्य दक्षिण में है, मैक्सिको की खाड़ी के पानी के पास।",
"वह राज्य खोजो जो एक तरफ फ्लोरिडा को छूता है।",
"दक्षिण-पूर्व में आयत जैसा राज्य खोजो।"
],
"ar": [
"यह राज्य देश के बीच में है, थोड़ा दक्षिण की ओर।",
"लुइसियाना के ठीक ऊपर राज्य खोजो।",
"टेक्सास के पूर्व की तरफ वाला राज्य खोजो।"
],
"az": [
"यह राज्य दक्षिण-पश्चिम के गर्म रेगिस्तान में है।",
"नीचे बाईं ओर मैक्सिको को छूने वाला राज्य खोजो।",
"कैलिफोर्निया के दाईं ओर वाला राज्य खोजो।",
"इस राज्य में ग्रैंड कैन्यन है!"
],
"ca": [
"यह लंबा राज्य बाईं तरफ है, बड़े समुद्र के पास।",
"पश्चिमी तट पर ऊपर से नीचे जाने वाला राज्य खोजो।",
"प्रशांत महासागर के पास बहुत लंबा राज्य खोजो।",
"यहाँ डिज्नीलैंड और हॉलीवुड हैं!"
],
"co": [
"यह राज्य बीच में बिल्कुल आयत जैसा है।",
"पहाड़ों वाला चौकोर राज्य खोजो।",
"बीच में डिब्बे जैसा दिखने वाला राज्य खोजो।"
],
"ct": [
"यह छोटा सा राज्य ऊपर दाईं ओर कोने में है, समुद्र के पास।",
"उत्तर-पूर्व में सबसे छोटे राज्यों में से एक खोजो।",
"मैसाचुसेट्स के नीचे छोटा राज्य खोजो।"
],
"dc": [
"यह मैरीलैंड और वर्जीनिया के बीच एक छोटा चौकोर है।",
"पूर्व में नक्शे पर सबसे छोटा बिंदु खोजो।",
"वह छोटी जगह खोजो जहाँ राष्ट्रपति रहते हैं।",
"यहाँ व्हाइट हाउस है!"
],
"de": [
"यह छोटा राज्य पूर्वी तट पर है, छोटी उंगली जैसा।",
"दाईं ओर समुद्र के पास सबसे छोटे राज्यों में से एक खोजो।",
"मैरीलैंड के बगल में छोटा राज्य खोजो।"
],
"fl": [
"यह राज्य पानी में उंगली की तरह नीचे की ओर निकला है।",
"नीचे दाईं ओर समुद्र में हाथ बढ़ाता हुआ राज्य खोजो।",
"नीचे की ओर इशारा करते अंगूठे जैसा राज्य खोजो।",
"यहाँ मगरमच्छ और ताड़ के पेड़ रहते हैं!",
"तीन तरफ से पानी से घिरा राज्य खोजो।"
],
"ga": [
"यह राज्य दक्षिण-पूर्व में है, फ्लोरिडा के ठीक ऊपर।",
"फ्लोरिडा के ऊपर दस्ताने जैसा राज्य खोजो।",
"पूर्व की तरफ समुद्र को छूने वाला राज्य खोजो।",
"इस राज्य में बहुत सारे आड़ू हैं!"
],
"hi": [
"ये द्वीप प्रशांत महासागर के बीच में बहुत दूर हैं।",
"सबसे दूर अकेले तैरते छोटे द्वीप खोजो।",
"समुद्र में छोटे द्वीपों से बना राज्य खोजो।",
"यह राज्य समुद्र तट और ताड़ के पेड़ों के सबसे करीब है!"
],
"ia": [
"यह राज्य देश के बीच में है, सुअर के चेहरे जैसा।",
"मिनेसोटा और मिसौरी के बीच राज्य खोजो।",
"बीच में मक्के के खेतों वाला राज्य खोजो।"
],
"id": [
"यह राज्य उत्तर-पश्चिम में है और ऊपर अजीब आकार का है।",
"नुकीली टोपी वाला राज्य खोजो।",
"मोंटाना के बगल में कुर्सी जैसा राज्य खोजो।"
],
"il": [
"यह राज्य बीच में है और इसमें शिकागो नाम का बड़ा शहर है।",
"नीचे की ओर इशारा करता हुआ राज्य खोजो।",
"ऊपर बड़ी झील के पास राज्य खोजो।"
],
"in": [
"यह राज्य बीच में है, इलिनोइस के ठीक बगल में।",
"क्रिसमस के मोजे जैसा राज्य खोजो।",
"इलिनोइस और ओहायो के बीच राज्य खोजो।"
],
"ks": [
"यह राज्य देश के बिल्कुल बीच में आयत जैसा है।",
"बीच में डिब्बे जैसा राज्य खोजो।",
"वह समतल राज्य खोजो जहाँ ऑज के जादूगर की डोरोथी रहती थी!"
],
"ky": [
"यह राज्य मजेदार उबड़-खाबड़ आकार का है, मुर्गे की टांग जैसा।",
"बीच-पूर्व में लहराता हुआ राज्य खोजो।",
"बगल में लंबा और पतला राज्य खोजो।"
],
"la": [
"यह राज्य नीचे है और जूते जैसा दिखता है।",
"मैक्सिको की खाड़ी में घुसा हुआ राज्य खोजो।",
"नीचे L अक्षर जैसा राज्य खोजो।",
"इस राज्य में दलदल और मगरमच्छ हैं!"
],
"ma": [
"यह राज्य ऊपर दाईं ओर कोने में है, मजेदार बाँह निकली हुई।",
"उत्तर-पूर्व में मुड़ी बाँह वाला राज्य खोजो।",
"मांसपेशी दिखाते हुए केप कॉड वाला राज्य खोजो।"
],
"md": [
"यह राज्य पूर्वी तट पर बहुत पागल, उबड़-खाबड़ आकार का है।",
"बड़ी खाड़ी के चारों ओर लिपटा राज्य खोजो।",
"वाशिंगटन डीसी के पास टेढ़े-मेढ़े किनारों वाला राज्य खोजो।"
],
"me": [
"यह राज्य देश के बिल्कुल ऊपर दाईं ओर कोने में है।",
"उत्तर-पूर्व में कनाडा की ओर पहुँचता राज्य खोजो।",
"पूर्वी तट के ऊपर अकेला राज्य खोजो।",
"यह राज्य हर दिन सबसे पहले सूर्योदय देखता है!"
],
"mi": [
"यह राज्य दस्ताने जैसा दिखता है! इसके दो हिस्से हैं।",
"बड़ी झीलों के पास दस्ताने जैसा राज्य खोजो।",
"महान झीलों से घिरे दो भूभाग खोजो।",
"यह राज्य पाँच महान झीलों में से चार को छूता है!"
],
"mn": [
"यह राज्य ऊपर है, कनाडा के पास, बहुत सारी झीलों के साथ।",
"ऊपर उबड़-खाबड़ किनारे वाला राज्य खोजो।",
"10,000 झीलों की भूमि कहलाने वाला राज्य खोजो!"
],
"mo": [
"यह राज्य देश के बिल्कुल बीच में है।",
"जहाँ दो बड़ी नदियाँ मिलती हैं वह राज्य खोजो।",
"कंसास और इलिनोइस के बीच राज्य खोजो।"
],
"ms": [
"यह राज्य दक्षिण में है, आयत जैसा।",
"अलबामा के पश्चिम में राज्य खोजो।",
"उसी नाम की बड़ी नदी के किनारे राज्य खोजो।"
],
"mt": [
"यह बड़ा राज्य ऊपर है, कनाडा के बगल में।",
"पहाड़ों वाला ऊपर का बड़ा आयत खोजो।",
"ऊपर बाईं ओर बिग स्काई कंट्री राज्य खोजो।"
],
"nc": [
"यह राज्य पूर्वी तट पर है और लंबा पतला है।",
"साउथ कैरोलिना के ऊपर बगल में फैला राज्य खोजो।",
"दाईं ओर समुद्र की तरफ निकला राज्य खोजो।"
],
"nd": [
"यह राज्य बिल्कुल ऊपर है, आयत जैसा।",
"ऊपर-बीच में कनाडा के ठीक नीचे राज्य खोजो।",
"मोंटाना के बगल में डिब्बे जैसा राज्य खोजो।"
],
"ne": [
"यह राज्य बीच में है और हत्थे वाली कड़ाही जैसा दिखता है।",
"एक तरफ उभार वाला राज्य खोजो।",
"कड़ाही जैसा राज्य खोजो।"
],
"nh": [
"यह पतला राज्य ऊपर दाईं ओर है, वरमोंट के बगल में।",
"मेन के नीचे लंबा पतला राज्य खोजो।",
"ऊपर की ओर इशारा करते रॉकेट जैसा राज्य खोजो।"
],
"nj": [
"पूर्वी तट पर यह छोटा राज्य J अक्षर जैसा दिखता है।",
"न्यूयॉर्क के नीचे मुड़ा हुआ छोटा राज्य खोजो।",
"समुद्र के पास बगल की S जैसा राज्य खोजो।"
],
"nm": [
"यह राज्य दक्षिण-पश्चिम में है, सीढ़ी वाले चौकोर जैसा।",
"कोलोराडो के नीचे काटा हुआ सा राज्य खोजो।",
"टेक्सास के पश्चिम में राज्य खोजो।"
],
"nv": [
"यह राज्य पश्चिम में है और नीचे की ओर त्रिकोण जैसा है।",
"कैलिफोर्निया के बगल में पिज्जा स्लाइस जैसा राज्य खोजो।",
"रेगिस्तान में लास वेगास वाला राज्य खोजो।",
"यह राज्य उल्टे घर जैसा दिखता है।"
],
"ny": [
"यह राज्य उत्तर-पूर्व में है और इसी नाम का बड़ा शहर है।",
"बाँहें फैलाए हुए जैसा राज्य खोजो।",
"स्टैच्यू ऑफ लिबर्टी वाला राज्य खोजो!",
"इस राज्य में मछली जैसा निकला लॉन्ग आइलैंड है।"
],
"oh": [
"यह राज्य बगल में दिल जैसा दिखता है।",
"ऊपर झील के पास गोल सा राज्य खोजो।",
"पेनसिल्वेनिया और इंडियाना के बीच राज्य खोजो।"
],
"ok": [
"यह राज्य लंबे हत्थे वाली कड़ाही जैसा दिखता है।",
"बाईं ओर मजेदार आयत निकला राज्य खोजो।",
"टेक्सास की ओर इशारा करता राज्य खोजो।"
],
"or": [
"यह राज्य ऊपर बाईं ओर कोने में है, समुद्र के पास।",
"पश्चिमी तट पर कैलिफोर्निया के ऊपर राज्य खोजो।",
"वाशिंगटन के नीचे राज्य खोजो।"
],
"pa": [
"यह राज्य उत्तर-पूर्व में आयत जैसा है।",
"न्यूयॉर्क के नीचे चौड़ा राज्य खोजो।",
"लिबर्टी बेल वाला राज्य खोजो!"
],
"ri": [
"यह सबसे छोटा राज्य है! ऊपर दाईं ओर कोने में है।",
"पूरे नक्शे पर सबसे छोटा राज्य खोजो, समुद्र के पास।",
"मैसाचुसेट्स के नीचे छोटा राज्य खोजो।",
"यह राज्य इतना छोटा है कि छूट सकता है!"
],
"sc": [
"यह राज्य दक्षिण-पूर्वी तट पर है, नॉर्थ कैरोलिना के नीचे।",
"बाईं ओर इशारा करते त्रिकोण जैसा राज्य खोजो।",
"पूर्व में लंबे पतले के नीचे छोटा राज्य खोजो।"
],
"sd": [
"यह राज्य ऊपर-बीच में है, आयत जैसा।",
"नॉर्थ डकोटा के नीचे राज्य खोजो।",
"पहाड़ पर चेहरे खुदे हुए राज्य खोजो!"
],
"tn": [
"यह राज्य लंबा पतला है, नक्शे पर बगल में जाता।",
"खिंचे हुए आयत जैसा राज्य खोजो।",
"आठ राज्यों को छूने वाला पतला राज्य खोजो!"
],
"tx": [
"देश के नीचे यह सबसे बड़ा राज्य है!",
"नीचे तारे जैसा बहुत बड़ा राज्य खोजो।",
"मैक्सिको को छूने वाला विशाल राज्य खोजो।",
"यह राज्य इतना बड़ा है, यहाँ सब कुछ बड़ा है!",
"नुकीले जूते जैसा राज्य खोजो।"
],
"ut": [
"यह राज्य पश्चिम में L अक्षर जैसा है।",
"ऊपर कोना कटा हुआ राज्य खोजो।",
"कोलोराडो के बगल में चलता जूता जैसा राज्य खोजो।"
],
"va": [
"यह राज्य पूर्वी तट पर है और त्रिकोण जैसा।",
"दाईं ओर समुद्र की तरफ इशारा करता राज्य खोजो।",
"जहाँ से बहुत सारे राष्ट्रपति आए वह राज्य खोजो!"
],
"vt": [
"यह छोटा राज्य ऊपर दाईं ओर है, त्रिकोण जैसा।",
"न्यू हैम्पशायर के बगल में छोटा राज्य खोजो।",
"उत्तर-पूर्व में पाई का टुकड़ा जैसा राज्य खोजो।"
],
"wa": [
"यह राज्य बिल्कुल ऊपर बाईं ओर कोने में है, समुद्र के पास।",
"पश्चिमी तट के ऊपर राज्य खोजो।",
"उत्तर-पश्चिम कोने में कनाडा के बगल में राज्य खोजो।",
"इस राज्य का ऊपर गड्ढे वाला मजेदार चौकोर आकार है।"
],
"wi": [
"यह राज्य बड़ी झीलों के पास दस्ताने जैसा है।",
"अंगूठा निकला हुआ राज्य खोजो।",
"मिनेसोटा और मिशिगन के बीच राज्य खोजो।",
"यह राज्य पनीर के लिए मशहूर है!"
],
"wv": [
"यह राज्य बहुत उबड़-खाबड़ पागल आकार का है, ऊपर दो उभार।",
"दो कान वाला राज्य खोजो।",
"पूर्व में सब लहरदार राज्य खोजो।"
],
"wy": [
"यह राज्य पश्चिम में बिल्कुल आयत है।",
"मोंटाना के नीचे चौकोर राज्य खोजो।",
"येलोस्टोन पार्क वाला डिब्बे जैसा राज्य खोजो!"
]
},
"world": {}
}
}

View File

@ -0,0 +1,280 @@
{
"hints": {
"usa": {
"ak": [
"この大きな州は一番上にあって、他の州から遠く離れているよ。",
"北極の近くにある大きな州を探してね。とっても寒いよ!",
"カナダの隣にあって、雪とシロクマがいっぱいいる州だよ。",
"他の州から離れて、ひとりぼっちで座っている州を見つけてね。"
],
"al": [
"この州は南にあって、メキシコ湾の水の隣だよ。",
"フロリダに片側でくっついている州を探してね。",
"南東の方で四角っぽい形の州を見つけてね。"
],
"ar": [
"この州は国の真ん中、ちょっと南の方にあるよ。",
"ルイジアナのすぐ上にある州を探してね。",
"テキサスの東側にくっついている州を見つけてね。"
],
"az": [
"この州は南西の暑い砂漠にあるよ。",
"左下でメキシコにくっついている州を探してね。",
"カリフォルニアの右隣にある州を見つけてね。",
"この州にはグランドキャニオンがあるよ!"
],
"ca": [
"この長い州は左側にあって、大きな海の隣だよ。",
"西海岸で上から下に伸びている州を探してね。",
"太平洋の隣にあるとっても長い州を見つけてね。",
"ディズニーランドとハリウッドがあるところだよ!"
],
"co": [
"この州は真ん中でぴったり四角い形をしているよ。",
"山がある四角い州を探してね。",
"真ん中で箱みたいに見える州を見つけてね。"
],
"ct": [
"この小さな州は右上の角にあって、海の近くだよ。",
"北東にある一番小さい州のひとつを探してね。",
"マサチューセッツの下にある小さな州を見つけてね。"
],
"dc": [
"メリーランドとバージニアの間にある小さな四角だよ。",
"東にある地図で一番小さい点を探してね。",
"大統領が住んでいる小さな場所を見つけてね。",
"ホワイトハウスがあるところだよ!"
],
"de": [
"この小さな州は東海岸にあって、小さな指みたいな形だよ。",
"右側の海の近くにある一番小さい州のひとつを探してね。",
"メリーランドの隣にある小さな州を見つけてね。"
],
"fl": [
"この州は下を指している指みたいに水の中に出ているよ。",
"右下で海に手を伸ばしているみたいに見える州を探してね。",
"下を向いている親指みたいな形の州を見つけてね。",
"ワニとヤシの木が住んでいるところだよ!",
"三方を水に囲まれている州を探してね。"
],
"ga": [
"この州は南東にあって、フロリダのすぐ上だよ。",
"フロリダの上でミトンみたいな形の州を探してね。",
"東側で海にくっついている州を見つけてね。",
"この州には桃がいっぱいあるよ!"
],
"hi": [
"これらの島は太平洋の真ん中、遠くにあるよ。",
"何もかもから遠く離れて浮かんでいる小さな島を探してね。",
"海の中の小さな島でできている州を見つけてね。",
"ビーチとヤシの木に一番近い州だよ!"
],
"ia": [
"この州は国の真ん中にあって、ブタの顔みたいな形だよ。",
"ミネソタとミズーリの間にある州を探してね。",
"トウモロコシ畑がいっぱいある真ん中の州を見つけてね。"
],
"id": [
"この州は北西にあって、上の方がおもしろい形をしているよ。",
"とがった帽子をかぶっているように見える州を探してね。",
"モンタナの隣で椅子みたいに見える州を見つけてね。"
],
"il": [
"この州は真ん中にあって、シカゴという大きな街があるよ。",
"下の方で下を指しているように見える州を探してね。",
"上の方で大きな湖の隣にある州を見つけてね。"
],
"in": [
"この州は真ん中で、イリノイのすぐ隣だよ。",
"クリスマスの靴下みたいな形の州を探してね。",
"イリノイとオハイオの間にある州を見つけてね。"
],
"ks": [
"この州は国のど真ん中で四角い形をしているよ。",
"真ん中にある箱みたいな形の州を探してね。",
"オズの魔法使いのドロシーが住んでいた平らな州を見つけてね!"
],
"ky": [
"この州はでこぼこしたおもしろい形で、チキンの足みたいだよ。",
"中東部をくねくね曲がっている州を探してね。",
"横向きに長くて細い州を見つけてね。"
],
"la": [
"この州は下にあって、ブーツみたいに見えるよ。",
"メキシコ湾に突き出ている州を探してね。",
"下の方でLの字みたいな形の州を見つけてね。",
"この州には沼とワニがいるよ!"
],
"ma": [
"この州は右上の角にあって、おもしろい腕が出ているよ。",
"北東で曲がった腕があるように見える州を探してね。",
"筋肉を曲げているみたいに見えるケープコッドがある州を見つけてね。"
],
"md": [
"この州は東海岸でとってもでこぼこした変わった形をしているよ。",
"大きな湾を囲んでいる州を探してね。",
"ワシントンDCの近くでギザギザの端がある州を見つけてね。"
],
"me": [
"この州は国の一番右上の角にあるよ。",
"北東でカナダに向かって伸びている州を探してね。",
"東海岸の一番上でひとりぼっちの州を見つけてね。",
"毎日一番最初に日の出を見る州だよ!"
],
"mi": [
"この州はミトンみたいに見えるよ!二つの部分があるんだ。",
"大きな湖の近くで手袋みたいな形の州を探してね。",
"五大湖に囲まれた二つの陸地を見つけてね。",
"この州は五大湖のうち四つにくっついているよ!"
],
"mn": [
"この州は上の方、カナダの近くにあって、湖がいっぱいあるよ。",
"上の方ででこぼこした上の端がある州を探してね。",
"一万の湖の国と呼ばれている州を見つけてね!"
],
"mo": [
"この州は国のど真ん中にあるよ。",
"二つの大きな川が出会う州を探してね。",
"カンザスとイリノイの間にある州を見つけてね。"
],
"ms": [
"この州は南にあって、四角い形をしているよ。",
"アラバマの西隣にある州を探してね。",
"同じ名前の大きな川沿いにある州を見つけてね。"
],
"mt": [
"この大きな州は上の方、カナダの隣にあるよ。",
"山がある上の方の大きな四角を探してね。",
"左上の方にあるビッグスカイカントリーという州を見つけてね。"
],
"nc": [
"この州は東海岸にあって、長くて細いよ。",
"サウスカロライナの上で横に伸びている州を探してね。",
"右側で海に向かって伸びている州を見つけてね。"
],
"nd": [
"この州は一番上にあって、四角い形をしているよ。",
"上の真ん中でカナダのすぐ下にある州を探してね。",
"モンタナの隣にある箱みたいな形の州を見つけてね。"
],
"ne": [
"この州は真ん中にあって、取っ手付きのフライパンみたいに見えるよ。",
"片側にでっぱりがある州を探してね。",
"フライパンみたいな形の州を見つけてね。"
],
"nh": [
"この細い州は右上にあって、バーモントの隣だよ。",
"メインの下にある背が高くて細い州を探してね。",
"上を向いているロケットみたいに見える州を見つけてね。"
],
"nj": [
"東海岸にあるこの小さな州はJの字みたいに見えるよ。",
"ニューヨークの下でカーブしている小さな州を探してね。",
"海の近くで横向きのSみたいな形の州を見つけてね。"
],
"nm": [
"この州は南西にあって、段差のある四角みたいな形だよ。",
"コロラドの下で一口かじられたみたいに見える州を探してね。",
"テキサスの西隣にある州を見つけてね。"
],
"nv": [
"この州は西にあって、下を向いた三角みたいな形だよ。",
"カリフォルニアの隣でピザのスライスみたいに見える州を探してね。",
"砂漠の中、ラスベガスがある州を見つけてね。",
"この州は逆さまの家みたいな形だよ。"
],
"ny": [
"この州は北東にあって、同じ名前の大きな街があるよ。",
"腕を伸ばしているように見える州を探してね。",
"自由の女神がある州を見つけてね!",
"この州には魚みたいに飛び出しているロングアイランドがあるよ。"
],
"oh": [
"この州は横向きのハートみたいな形だよ。",
"上の方で湖の隣にある丸っこい州を探してね。",
"ペンシルバニアとインディアナの間にある州を見つけてね。"
],
"ok": [
"この州は長い取っ手が付いたフライパンみたいに見えるよ。",
"左に飛び出しているおもしろい四角がある州を探してね。",
"テキサスを指しているように見える州を見つけてね。"
],
"or": [
"この州は左上の角にあって、海の隣だよ。",
"西海岸でカリフォルニアの上にある州を探してね。",
"ワシントンの下にある州を見つけてね。"
],
"pa": [
"この州は北東で四角い形をしているよ。",
"ニューヨークの下にある幅広い州を探してね。",
"自由の鐘がある州を見つけてね!"
],
"ri": [
"これは一番小さい州だよ!右上の角にあるよ。",
"地図全体で一番小さい州を探してね。海の隣だよ。",
"マサチューセッツの下にある小さな州を見つけてね。",
"この州はとっても小さいから見逃しちゃうかも!"
],
"sc": [
"この州は南東の海岸にあって、ノースカロライナの下だよ。",
"左を向いた三角みたいに見える州を探してね。",
"東にある長くて細い州の下にある小さな州を見つけてね。"
],
"sd": [
"この州は上の真ん中にあって、四角い形だよ。",
"ノースダコタの下にある州を探してね。",
"山に顔が彫られている州を見つけてね!"
],
"tn": [
"この州は長くて細くて、地図を横切って横向きに伸びているよ。",
"伸ばされた四角みたいに見える州を探してね。",
"八つの他の州にくっついている細い州を見つけてね!"
],
"tx": [
"国の下の方で一番大きい州だよ!",
"下の方で星みたいな形のとっても大きな州を探してね。",
"メキシコにくっついている巨大な州を見つけてね。",
"この州はとっても大きいから、何でも大きいよ!",
"とがったブーツみたいに見える州を探してね。"
],
"ut": [
"この州は西の方でLの字みたいな形だよ。",
"上の方で角が切り取られている州を探してね。",
"コロラドの隣で踏み出すブーツみたいに見える州を見つけてね。"
],
"va": [
"この州は東海岸にあって、三角の形だよ。",
"右側で海を指している州を探してね。",
"たくさんの大統領が来た州を見つけてね!"
],
"vt": [
"この小さな州は右上にあって、三角みたいな形だよ。",
"ニューハンプシャーの隣にある小さな州を探してね。",
"北東でパイのスライスみたいに見える州を見つけてね。"
],
"wa": [
"この州は一番左上の角にあって、海の隣だよ。",
"西海岸の一番上にある州を探してね。",
"北西の角でカナダの隣にある州を見つけてね。",
"この州は上の方にへこみがあるおもしろい四角い形だよ。"
],
"wi": [
"この州は大きな湖の近くでミトンみたいな形だよ。",
"親指が飛び出しているように見える州を探してね。",
"ミネソタとミシガンの間にある州を見つけてね。",
"この州はチーズで有名だよ!"
],
"wv": [
"この州はとってもでこぼこした変わった形で、上に二つのでっぱりがあるよ。",
"二つの耳があるように見える州を探してね。",
"東の方で全部うねうねしている州を見つけてね。"
],
"wy": [
"この州は西の方でぴったり四角い形だよ。",
"モンタナの下にある四角い州を探してね。",
"イエローストーン国立公園がある箱みたいな形の州を見つけてね!"
]
},
"world": {}
}
}

View File

@ -0,0 +1,280 @@
{
"hints": {
"usa": {
"ak": [
"Haec magna civitas summa est, longe ab aliis civitatibus.",
"Quaere magnam civitatem prope Polum Arcticum. Ibi frigidissimum est!",
"Haec civitas iuxta Canadam est et multas nives et ursos albos habet.",
"Invenias civitatem quae sola sedet, procul ab aliis."
],
"al": [
"Haec civitas in meridie est, iuxta aquas Sinus Mexicani.",
"Quaere civitatem quae Floridam uno latere tangit.",
"Invenias civitatem quae sicut rectangulum in parte meridionali-orientali videtur."
],
"ar": [
"Haec civitas in medio terrae est, paulo versus meridiem.",
"Quaere civitatem supra Ludovicianam.",
"Invenias civitatem ad orientem Texiae."
],
"az": [
"Haec civitas in deserto calido in parte meridionali-occidentali est.",
"Quaere civitatem infra sinistram quae Mexicum tangit.",
"Invenias civitatem dextrorsum a California.",
"Haec civitas Magnam Vallem habet!"
],
"ca": [
"Haec longa civitas in sinistra parte est, iuxta magnum oceanum.",
"Quaere civitatem in litore occidentali quae sursum deorsumque extenditur.",
"Invenias longissimam civitatem iuxta Oceanum Pacificum.",
"Hic Disneyland et Hollywood sunt!"
],
"co": [
"Haec civitas in medio sicut rectangulum perfectum formata est.",
"Quaere civitatem quadratam cum montibus.",
"Invenias civitatem in medio quae sicut capsa videtur."
],
"ct": [
"Haec parva civitas in angulo dextro superiore est, prope oceanum.",
"Quaere unam ex minimis civitatibus in parte septentrionali-orientali.",
"Invenias parvam civitatem infra Massachusetts."
],
"dc": [
"Hoc est parvum quadratum inter Maryland et Virginiam.",
"Quaere minimum punctum in mappa in oriente.",
"Invenias parvum locum ubi Praeses habitat.",
"Hic Domus Alba est!"
],
"de": [
"Haec parva civitas in litore orientali est, sicut parvus digitus formata.",
"Quaere unam ex minimis civitatibus prope oceanum in dextra.",
"Invenias parvam civitatem iuxta Maryland."
],
"fl": [
"Haec civitas in aquam extenditur sicut digitus deorsum ostendens.",
"Quaere civitatem infra dextrorsum quae in mare extenditur.",
"Invenias civitatem sicut pollex deorsum formata.",
"Hic crocodili et palmae habitant!",
"Quaere civitatem aqua in tribus lateribus circumdatam."
],
"ga": [
"Haec civitas in parte meridionali-orientali est, supra Floridam.",
"Quaere civitatem quae sicut manica supra Floridam videtur.",
"Invenias civitatem in oriente quae oceanum tangit.",
"Haec civitas multa persica habet!"
],
"hi": [
"Hae insulae longe in medio Oceani Pacifici sunt.",
"Quaere parvas insulas solas longe natantes.",
"Invenias civitatem ex parvis insulis in oceano factam.",
"Haec civitas litori et palmis proxima est!"
],
"ia": [
"Haec civitas in medio terrae est, sicut facies porci formata.",
"Quaere civitatem inter Minnesota et Missouri.",
"Invenias civitatem in medio cum multis agris frumenti."
],
"id": [
"Haec civitas in parte septentrionali-occidentali est cum forma mira in summo.",
"Quaere civitatem quae galerum acutum habere videtur.",
"Invenias civitatem iuxta Montana quae sicut sella videtur."
],
"il": [
"Haec civitas in medio est et magnam urbem Chicago nominatam habet.",
"Quaere civitatem quae deorsum ostendit in imo.",
"Invenias civitatem iuxta magnum lacum in summo."
],
"in": [
"Haec civitas in medio est, iuxta Illinois.",
"Quaere civitatem sicut caliga Nativitatis formata.",
"Invenias civitatem inter Illinois et Ohio."
],
"ks": [
"Haec civitas sicut rectangulum in medio terrae formata est.",
"Quaere civitatem sicut capsa in centro formatam.",
"Invenias civitatem planam ubi Dorothy ex Mago Oz habitabat!"
],
"ky": [
"Haec civitas formam mirabilem gibbosam habet, sicut crus pulli.",
"Quaere civitatem quae per partem mediam-orientalem serpit.",
"Invenias civitatem longam et tenuem transversam."
],
"la": [
"Haec civitas infra est et sicut caliga videtur.",
"Quaere civitatem quae in Sinum Mexicanum extenditur.",
"Invenias civitatem sicut littera L infra formatam.",
"Haec civitas paludes et crocodilos habet!"
],
"ma": [
"Haec civitas in angulo dextro superiore est cum miro brachio extenso.",
"Quaere civitatem quae bracchium flexum habere videtur in parte septentrionali-orientali.",
"Invenias civitatem cum Cape Cod quae sicut musculus flexus videtur."
],
"md": [
"Haec civitas formam valde insanam et gibbosam in litore orientali habet.",
"Quaere civitatem quae magnam sinum circumdat.",
"Invenias civitatem cum marginibus flexuosis prope Washington DC."
],
"me": [
"Haec civitas in angulo dextro superiore terrae est.",
"Quaere civitatem quae ad Canadam in parte septentrionali-orientali extenditur.",
"Invenias civitatem solitariam in summo litoris orientalis.",
"Haec civitas prima solis ortum quotidie videt!"
],
"mi": [
"Haec civitas sicut manica videtur! Duas partes habet.",
"Quaere civitatem sicut chirothecam formatam prope magnos lacus.",
"Invenias duas terras Magnis Lacubus circumdatas.",
"Haec civitas quattuor ex quinque Magnis Lacubus tangit!"
],
"mn": [
"Haec civitas in summo est, prope Canadam, cum multis lacubus.",
"Quaere civitatem in summo quae marginem superiorem gibbosum habet.",
"Invenias civitatem quae terra decem milium lacuum vocatur!"
],
"mo": [
"Haec civitas in medio terrae est.",
"Quaere civitatem ubi duo magna flumina conveniunt.",
"Invenias civitatem inter Kansas et Illinois."
],
"ms": [
"Haec civitas in meridie est, sicut rectangulum formata.",
"Quaere civitatem ad occidentem Alabamae.",
"Invenias civitatem iuxta magnum flumen eodem nomine."
],
"mt": [
"Haec magna civitas in summo est, iuxta Canadam.",
"Quaere magnum rectangulum in summo cum montibus.",
"Invenias civitatem Big Sky Country vocatam in parte superiore sinistra."
],
"nc": [
"Haec civitas in litore orientali est et longa tenuisque est.",
"Quaere civitatem quae transverse supra South Carolina extenditur.",
"Invenias civitatem quae in oceanum dextrorsum extenditur."
],
"nd": [
"Haec civitas in summo est, sicut rectangulum formata.",
"Quaere civitatem sub Canada in medio-summo.",
"Invenias civitatem sicut capsa formatam iuxta Montana."
],
"ne": [
"Haec civitas in medio est et sicut sartago cum manubrio videtur.",
"Quaere civitatem quae gibberem in uno latere habet.",
"Invenias civitatem sicut sartaginem formatam."
],
"nh": [
"Haec tenuis civitas in dextra superiore est, iuxta Vermont.",
"Quaere altam tenuemque civitatem infra Maine.",
"Invenias civitatem quae sicut navicula sursum ostendit."
],
"nj": [
"Haec parva civitas in litore orientali sicut littera J videtur.",
"Quaere parvam civitatem infra New York quae curvat.",
"Invenias civitatem sicut S transversam prope oceanum formatam."
],
"nm": [
"Haec civitas in parte meridionali-occidentali est, sicut quadratum cum gradu formata.",
"Quaere civitatem infra Colorado quae morsum excissum habere videtur.",
"Invenias civitatem ad occidentem Texiae."
],
"nv": [
"Haec civitas in occidente est et sicut triangulum deorsum formata est.",
"Quaere civitatem iuxta California quae sicut frustum pizzae videtur.",
"Invenias civitatem ubi Las Vegas est, in deserto.",
"Haec civitas sicut domus inversa videtur."
],
"ny": [
"Haec civitas in parte septentrionali-orientali est et magnam urbem eodem nomine habet.",
"Quaere civitatem quae brachia extendere videtur.",
"Invenias civitatem cum Statua Libertatis!",
"Haec civitas Long Island habet quae sicut piscis extenditur."
],
"oh": [
"Haec civitas sicut cor transversum formata est.",
"Quaere civitatem rotundiorem iuxta lacum in summo.",
"Invenias civitatem inter Pennsylvania et Indiana."
],
"ok": [
"Haec civitas sicut sartago cum longo manubrio videtur.",
"Quaere civitatem cum miro rectangulo sinistrorsum extenso.",
"Invenias civitatem quae ad Texiam ostendere videtur."
],
"or": [
"Haec civitas in angulo superiore sinistro est, iuxta oceanum.",
"Quaere civitatem supra California in litore occidentali.",
"Invenias civitatem infra Washington."
],
"pa": [
"Haec civitas sicut rectangulum in parte septentrionali-orientali formata est.",
"Quaere latam civitatem infra New York.",
"Invenias civitatem ubi Campana Libertatis est!"
],
"ri": [
"Haec est minima civitas! In angulo dextro superiore est.",
"Quaere minimam civitatem in tota mappa, iuxta oceanum.",
"Invenias parvam civitatem infra Massachusetts.",
"Haec civitas tam parva est ut eam praetermittere possis!"
],
"sc": [
"Haec civitas in litore meridionali-orientali est, infra North Carolina.",
"Quaere civitatem quae sicut triangulum sinistrorsum ostendit.",
"Invenias minorem civitatem infra longam tenuemque in oriente."
],
"sd": [
"Haec civitas in medio-summo est, sicut rectangulum formata.",
"Quaere civitatem infra North Dakota.",
"Invenias civitatem ubi facies in montem sculptae sunt!"
],
"tn": [
"Haec civitas longa et tenuis est, transverse per mappam extensa.",
"Quaere civitatem quae sicut rectangulum extensum videtur.",
"Invenias tenuem civitatem quae octo alias civitates tangit!"
],
"tx": [
"Haec est maxima civitas in parte inferiore terrae!",
"Quaere maximam civitatem infra quae sicut stella formata est.",
"Invenias ingentem civitatem quae Mexicum tangit.",
"Haec civitas tam magna est, omnia ibi maiora sunt!",
"Quaere civitatem quae sicut caliga acuta videtur."
],
"ut": [
"Haec civitas sicut littera L in occidente formata est.",
"Quaere civitatem cum angulo exciso in summo.",
"Invenias civitatem iuxta Colorado quae sicut caliga ambulans videtur."
],
"va": [
"Haec civitas in litore orientali est et formam triangularem habet.",
"Quaere civitatem quae ad oceanum dextrorsum ostendit.",
"Invenias civitatem unde multi Praesides venerunt!"
],
"vt": [
"Haec parva civitas in dextra superiore est, sicut triangulum formata.",
"Quaere parvam civitatem iuxta New Hampshire.",
"Invenias civitatem quae sicut frustum placentae in parte septentrionali-orientali videtur."
],
"wa": [
"Haec civitas in angulo superiore sinistro est, iuxta oceanum.",
"Quaere civitatem in summo litoris occidentalis.",
"Invenias civitatem iuxta Canadam in angulo septentrionali-occidentali.",
"Haec civitas miram formam quadratam cum cavitate in summo habet."
],
"wi": [
"Haec civitas sicut manica formata est, prope magnos lacus.",
"Quaere civitatem quae pollicem extensum habere videtur.",
"Invenias civitatem inter Minnesota et Michigan.",
"Haec civitas caseo clara est!"
],
"wv": [
"Haec civitas formam valde gibbosam insanam habet cum duobus gibbis in summo.",
"Quaere civitatem quae duas aures habere videtur.",
"Invenias civitatem quae tota undulans in oriente est."
],
"wy": [
"Haec civitas rectangulum perfectum in occidente est.",
"Quaere civitatem quadratam infra Montana.",
"Invenias civitatem sicut capsa formatam cum Parco Yellowstone!"
]
},
"world": {}
}
}

View File

@ -0,0 +1,60 @@
/**
* Know Your World translations aggregated by locale
* Co-located with the game code
*/
// Import existing locale files
import en from './i18n/locales/en.json'
import de from './i18n/locales/de.json'
import es from './i18n/locales/es.json'
import goh from './i18n/locales/goh.json'
import hi from './i18n/locales/hi.json'
import ja from './i18n/locales/ja.json'
import la from './i18n/locales/la.json'
export const knowYourWorldMessages = {
en: { knowYourWorld: en },
de: { knowYourWorld: de },
es: { knowYourWorld: es },
goh: { knowYourWorld: goh },
hi: { knowYourWorld: hi },
ja: { knowYourWorld: ja },
la: { knowYourWorld: la },
} as const
/**
* Type for hint lookup
*/
export type HintMap = 'usa' | 'world'
export type HintsData = {
hints: {
usa: Record<string, string[]>
world: Record<string, string[]>
}
}
/**
* Get all hints for a region in the specified locale
* Returns undefined if no hints exist
*/
export function getHints(
locale: keyof typeof knowYourWorldMessages,
map: HintMap,
regionId: string
): string[] | undefined {
const localeData = knowYourWorldMessages[locale]?.knowYourWorld as HintsData | undefined
const hints = localeData?.hints?.[map]?.[regionId]
// Return undefined if no hints or empty array
return hints && hints.length > 0 ? hints : undefined
}
/**
* Check if hints exist for a region in the specified locale
*/
export function hasHints(
locale: keyof typeof knowYourWorldMessages,
map: HintMap,
regionId: string
): boolean {
return getHints(locale, map, regionId) !== undefined
}

View File

@ -1,3 +1,4 @@
import { knowYourWorldMessages } from '@/arcade-games/know-your-world/messages'
import { rithmomachiaMessages } from '@/arcade-games/rithmomachia/messages'
import { calendarMessages } from '@/i18n/locales/calendar/messages'
import { createMessages } from '@/i18n/locales/create/messages'
@ -44,6 +45,7 @@ export async function getMessages(locale: Locale) {
{ tutorial: tutorialMessages[locale] },
{ calendar: calendarMessages[locale] },
{ create: createMessages[locale] },
rithmomachiaMessages[locale]
rithmomachiaMessages[locale],
knowYourWorldMessages[locale]
)
}