First, you have to translate your object so its center is at the origin. Then you rotate your object, and then you translate your object to its final destination.

That only works if you look at things from a "world view". Rotating (with glRotate) changes the local coordinate system of the object and the translation will move along the **local** coordinate system axes (just like rotation always happens around the current origin, aka. the objects position).

So the order in OpenGL (assuming the object is modeled around the origin) is glTranslate into position and then glRotate.

At least "thinking local" would seem a lot more intuitive than saying "OpenGL is doing everything backwards for some reason".

Of course those functions are technically deprecated and once handling matrices yourself it all boils down to multiplication order.