Important notice:
If you have installed Java 7 Update 51 or later and run into problems with security settings, please look here for a solution.

Geotag is an open source program that allows you match date/time information from photos with location information from a GPS unit or from a map

The main features are:

Portable
Geotag is written in Java and runs on most popular operating systems.
Graphical user interface
The user interface makes adding location information to your photos easy.
Intelligent matching
The algorithms in Geotag automatically match GPS data to your photos. For photos taken when your GPS didn't have a signal you can let Geotag make a guess based on the closest available GPS information.
Fine tune location using Google Maps
You can show a photo's location in your web browser using Google Maps. The map contains a marker you can drag on the map to change the location associated with a photo. The location the GPS records for your photo is the location where you took the photo, not the location of what can be seen in the photo. By simply dragging the marker you can correct this. The change is immediately reflected in Geotag.
Fine tune locations using Google Earth
You can also show a photo's location in Google Earth, if it is installed on your computer. As you move the map in Google Earth a marker for your photo's location is constantly moved to the centre of the map and its new position sent back to Geotag.
Assign location names to photos
For photos that already have a location, Geotag can lookup location names nearby and store them with the image.
You don't need a GPS to use Geotag
Even if you don't own a GPS unit (or it wasn't switched on when you took a picture) you can still assign a location to the photo. Geotag will show a default location on the map and you can drag the marker and zoom in to give the photo a location. This is a bit more awkward than using a GPS, but not too difficult. You can also enter location coordinates manually and save them to your photos.
Many file formats supported
Geotag supports JPEG/JPG files and many RAW camera vendor specific files. The RAW file types currently supported are ARW (Sony), CR2 (Canon), DCR (Kodak), DNG (Adobe), ERF (Epson), MEF (Mamiya), MRW (Minolata), NEF (Nikon), NRW (Nikon), ORF (Olympus), PEF (Pentax), RAF (Fuji), RAW (Panasonic), SR2 (Sony) and SRF (Sony).
Open source
Geotag is open source. It is published under the GPL (GNU General Public License). this means its free to use and you can even get the source code and modify it and redistribute it.
Easily translatable
Geotag can easily be translated to different languages. The program recognizes the language used on your computer and if a translation for that language is available, Geotag will use it automatically. Currently the program knows English,German, Danish, Dutch, French, Brazilian Portuguese, Czech, Spanish, Polish and Russian. Volunteers for other translations are always welcome.

Please keep in mind that this project is still young. There are certainly some bugs in the program and features missing.