Why OnCollisionEnter cannot detect collisions between colliders?

I have a transform moving, using Transform.Translate;
When I add a rigid body as a component to the game object, my OnCollisionEnter works when the game object hits another collider.
But when I add only a collider rather than a rigid body, my OnCollisionEnter isn’t called.

Why OnCollisionEnter cannot detect collisions between colliders?

Because no collision is technically happening if there is no rigidbody to take force into account. It’s just 2 colliders who happen to be occupying the same space, because they have been translated there.

If you absolutely have to use Transform.Translate, then set the Rigidbody to “Is Kinematic”. But the way you’re supposed to move a rigidbody is with rigidbody.AddForce() or setting the rigidbody.velocity directly.