I noticed in the ProductionAI code, you're comparing the names of shipdesigns to human-readable / english text:
explorationShipName = "Scout"
colonyShipName = "Colony Ship"
outpostShipName = "Outpost Ship"
troopShipName = "Troop Ship"
if topPriority == 6 and shipDesign.name(True) == explorationShipName:
# exploration ship
print "adding new ship to production queue: " + shipDesign.name(True)
This is a bad idea; passing True to the shipDesign name() function tells it to look up the ship's name in the stringtable, and to return the translated version of the name. This means that in languages other than english, the name won't match what you're expecting. Better would be to use the stringtable entry keys, like SD_TROOP_SHIP, SD_SCOUT, SD_COLONY_SHIP, or SD_OUTPOST_SHIP, which won't depend on the user-selected language, and pass false to name(), so that it returns the stringtable entry key without looking it up first.
The only exception is player-created ship designs, which may have only the name they specify in whatever language they're playing in, but this shouldn't be an issue for AI ship designs from the premade ship designs list.