Names for cities, locations and people are all handled by the class "Text Store". It has a set of methods which are called by any other class which needs to find a name, as well as keeping a list of names which are already used, to avoid duplication. It loads from file, so you could just swap the mechanism it uses to return a name, and give it a list of names you want.
Internally, it uses a 2nd order Markov Model to generate new names, using the statistical properties of the words in the files it loads. It then checks against "Verboten" words, those which are swear words or offensive terms, to avoid giving someone an unfortunate name.
The two files it uses are names of Chinese and French cities. I tried American cities, but didn't like the results, the names it produced were weird. You could possibly just give it a list of British town names, and it would generate names which sound more "English".
Hope this helps.