The following scope types can be defined as the "type" in a "type = X" argument.
It should match whatever scope you use the custom loc command in.

artifact
character
landed_title
province
activity
secret
scheme
combat
combat_side
title_and_vassal_change
faith
dynasty
all # Accepts any scope type, but you can then only really check triggers that can be used on anything, else you'll get run time issues instead of read time ones

== format ==
key = {
	type = scope

	text = {
		# Run before the trigger is evaluated, can save scopes which you then check
		# for in the trigger directly. These scopes can be referenced in the loc key.
		# Only interface effects are valid so the game state can not be modified
		setup_scope = {
			<interface effects>
		}

		# What triggers should be true for this to be a valid text entry
		# Interface triggers are valid such as checking if a window is open
		# The first trigger that matches returns the relevant localization_key text
		trigger = {
			<interface triggers>
		}

		# The localization key, has the scopes from setup_scope accessible
		localization_key = string

		# Optional; will cause this one to be picked if no entry is valid
		fallback = yes
	}

	...

	random_valid = yes # Optional, will randomize instead of picking first valid
}

You can also add variants:
key = {
	parent = some_custom_loc_key
	suffix = "_suffix"
}
The logic of the parent will be run, then the suffix is added to the custom loc key.

