Work item type names use title case in mid-sentence UI strings

Problem

Work item type names are stored in title case (Key Result, Test Case, Epic in app/assets/javascripts/work_items/constants.js) and interpolated into UI strings through %{workItemType}. Mid-sentence, this gives title case where Pajamas calls for sentence case.

Merge request !249565 (merged) fixed the close and reopen paths only, so the More actions dropdown now mixes both conventions:

Close key result
Delete Key Result
Copy Key Result email address

Why this isn't a find-and-replace

15 strings put %{workItemType} at the start of a sentence. Lowercasing those would produce key result created., so each call site needs to be assessed individually.

Inventory

Category Count Action
Mid-sentence, for example Delete %{workItemType} 23 Lowercase
Sentence-initial, for example %{workItemType} created. 15 Leave capitalized
Shared error constants in work_items/constants.js 4 msgids, ~34 references Decide separately
EE lifecycle strings following a colon 2 Decide separately

Mid-sentence strings to lowercase

File Strings
work_item_actions.vue Delete, Copy ... email address, 2 delete-confirmation strings
create_work_item.vue Create, New, 2 thread-resolution strings, Mark this item as related to:
create_work_item_modal.vue New
create_work_item_cancel_confirmation_modal.vue Are you sure you want to cancel creating this ...
work_item_links_form.vue Create, Add, Add ...s, confidential-parent warning
work_item_actions_split_button.vue Maximum children warning
work_item_development.vue 3 auto-close strings
work_item_create_branch_merge_request_modal.vue Branch creation failure
work_item_change_type_modal.vue Unsupported parent type, missing fields
work_item_note_actions.vue This user is the author of this ...

Sentence-initial strings to leave alone

File Strings
create_work_item_modal.vue, work_item_root.vue ... created., ... deleted
work_item_change_type_modal.vue Unsupported child type, singular and plural
work_item_relationships.vue, work_item_relationship_icons.vue Linked, blocked by, and blocks counts
work_item_rolled_up_count_info.vue ...: %{count} closed
ee/.../work_item_types_list.vue, ee/.../work_item_types_list_enabled_disabled_view.vue Enabled and disabled toasts

Regenerate the full list with:

grep -rn '%{workItemType}' app/assets/javascripts ee/app/assets/javascripts

Proposal

  1. Extract a lowercaseWorkItemType helper into app/assets/javascripts/work_items/utils.js. This was suggested during review of !249565 (merged) and is currently duplicated in work_item_state_toggle.vue and work_item_close_confirm_modal.vue.
  2. Apply it to the mid-sentence call sites, one MR per component group.
  3. Update the affected frontend, feature, and QA specs. Roughly 70 matches exist for 'Delete|Create|Add|New|Copy <Type>' across spec/, ee/spec/, and qa/, though not all are related.

No locale/gitlab.pot changes are needed, because only the interpolated value changes, not the msgid.

References