Add check for default ammo being a valid item type.
Only show melee message when target is visible.

Also: translate the message.
Move the translation before calling str_to_illiterate_str

Translating it in str_to_illiterate_str prevents extractions of the plain string to the translation template.
Also, don't apply it to the *format* string used as first argument to string_format, that's dangerous as the resulting gibberish might invoke unexpected formatting (and refer to more arguments than there are given).

Note that str_to_illiterate_str adds -5...+5 to each character of the string. A space can therefor become a control character, or a '%'.
Assorted fixes to make messages translated

Spelling fix: insesitive -> insensitive

Removed reference to non-existing keymap.txt