The key that it references is not the current name of the city, it is the name associated with the tile in the city name map. So there is never a risk of two different cities using the same name unless it is deliberately put into the city name map. This is never an issue because the base name from the map can be anything, so when there is a conflict you can use the name in another language, or a completely arbitrary identifier. For example, Portland, Maine uses "Portland" while Portland, Oregon uses "Neerchokikoo", which is the native name associated with the city. Since both are translated to "Portland" for the English language, that is still fine and works. Jamestown on Saint Helena literally uses "Jamestown, Saint Helena" (to avoid collision with the North American Jamestown) which is "translated" to just "Jamestown" in English.
Another way of putting it is that I am kind of using your approach: you start with the coordinates, but then as the immediate next step you look up the base name in the map at those coordinates. Then you use that to look up the translation.
The reason why I am not using the coordinates directly is that it immediately makes the CityNamesTranslation file completely incomprehensible. It is very unlikely that I immediately know which names are associated with a pair of coordinates. But I usually know what "Constantinopolis" is.
The other reason is that you can easily define translations for base names that don't exist on the map and don't have coordinates associated with them. For example, I can define translations for "Constantinopolis" and "Istanbul" in the exact same way. Then all I have to do is tell the game to use "Istanbul" from now on instead of "Constantinopolis". All permanently changed city names are managed that way.