Translation Manager will never perform a checkout (which I assume is what you refer to as a lock) of the source item.
It will only attempt to checkout (and if needed, first localize) the target item, but if this fails it will not prevent the job from being sent (it will obviously give problems on retrieval if it still can't check the item out at that time).
It is possible to make a event handler checking out the source item. Using the core event system would probably be the easy way to do it.
- Hook into the checkin/checkout events
- Verify it's Translation Manager performing the action (it identifies itself to the session).
- If it is a checkout, perform a checkout of the source item (unless it is already checked out).
- If it is a checkin, verify if any of the other available target items are checked out by the TM user. If no other item is checked out by the TM user, undo checkout of the source item. You probably want to run this async as checking the state of the other items could be time consuming.
You can simply have an XML file with the publication IDs required to determine source/targets, or make it a bit more future proof (but also more complex) by using Translation Manager API to access the configuration.
Translation Manager is aware if items are in sync or not. It will display this information on the Info tab of the item, and use this information if the checkbox "Include already translated items" is not checked.
But obviously this requires the user to go looking for the information, which might not be sufficient.
An approach would be to make a UI extension that shows a warning if the item being opened is currently out for translation. The information needed to determine this is in the item XML being send to the UI, but I do not know if there is a supported way to access this information in the XML.