Я бы пошел с с учетом местоположения, просматривая . Посмотрите на W3C GeoLocation API .
Например, попробуйте Модуль геолокации Google Gears .
Эти технологии позволяют геолокализовать ваших клиентов не только путем просмотра и их IP-адреса (который может иметь смещения в 200 км), но также путем триангуляции информации SSID от ближайших беспроводных точек доступа, и это может быть чрезвычайно точным.
Если у вас есть координаты (lon, lat), достаточно просто позвонить в какой-нибудь веб-сервис и узнать название ближайшего города.