How can I delete the same animation/curve channel from all selected objects? I'm trying to delete some specific channels from many objects. I select them but the dope sheet requires me to expand the Action and Transform menus from each object, then selecting each curve and delete. For example, I'd like to delete specifically the &quot;X Location&quot; channel from all selected objects, but from the UI I could only delete all axes from the location or delete a single channel from only one of the objects.
This is really boring, so I thought I'd use Blender's Python API to automate it. However, I'm very new to it and couldn't find how to show the channel's name to the user.
I'm starting with an operator that would scan all selected items' channels and present a list to the user to select which channel to delete from all selected objects. However, the furthest I got was to list those channels by their data_path and array_index. I have this so far:
for ob in bpy.context.selected_objects:
    anim = ob.animation_data
    for group in anim.action.groups:
        for channel in group.channels:
            print(&quot;Channel:&quot;, channel)
            print(&quot;data_path:&quot;, channel.data_path, &quot;   array_index:&quot;, channel.array_index)
            print(ob.path_resolve(channel.data_path))

However, the array_index is not really user-readable. So, here are two-questions-in-one:
Can I delete a single channel from all selected objects?
and
How can I present an FCurve's user-readable name to the user, if it is possible without hard-coding?
By the way, I remember that Blender is now translatable, and it seems the path should be in that direction, but I couldn't find it yet.
Find and remove
The fcurves collection of an action has a method to find fcurves from data path and index, and a remove method.
The same action can be linked to multiple objects, so will use a set to find all the actions' fcurves.
There really is no need to look at the group, location x keyframes have data path 'location' and array_index 0.
Test code. Since you mention you are going to convert this to an operator have added the context variable context = bpy.context  Once test code works, lose this and use the context argument passed to operator/panel methods, when pasting into operator code.
import bpy

context = bpy.context

data_path = &quot;location&quot;
index = 0 # location.x or location[0]

#objects = bpy.data.objects # all
#objects = context.scene.objects # all in scene
objects = context.selected_objects # selected

all_fcurves = set(
    o.animation_data.action.fcurves for o in objects
    if o.animation_data and o.animation_data.action
    )

for fcurves in all_fcurves:
    fcurve = fcurves.find(data_path, index=index)
    if fcurve:
        fcurves.remove(fcurve)

for bones the data path is akin to
'pose.bones[&quot;Bone&quot;].location`

in which case to find  x location keyframe it could be simpler to replace the find method with
def find(fcurves, data_path, index):
    x = [fc for fc in fcurves 
         if fc.data_path.endswith(datapath) 
         and fc.array_index == index]
    return x.pop() if x else None


Thanks, I can use your answer later, but you missed the exact point of
my question. I do not know that the user will delete specifically the
X Location channel. Instead, I want to present a list of channels from
all selected objects to the user, so that he will select, for example,
&quot;I want to delete the Z Location from all selected objects&quot;. However,
I could not find a way to convert location[2] to &quot;Z Location&quot;.

Re-read the question appears to be a pretty good attempt at an answer to part i. Generally the idea is to have one question per question , re part 2
Can get the name of the property via the &quot;RNA&quot; eg if an object has an fcurve with datapath &quot;location&quot; or &quot;rotation_euler&quot;
&gt;&gt;&gt; C.object.bl_rna.properties['location'].name
'Location'

&gt;&gt;&gt; C.object.bl_rna.properties['rotation_euler'].name
'Euler Rotation'

&gt;&gt;&gt; C.object.bl_rna.properties['rotation_euler'].subtype
'EULER'

&gt;&gt;&gt; C.object.bl_rna.properties['location'].subtype
'TRANSLATION'

As for the axis name from index, have asked this question Python RNA getting the names of Vector axes. (eg &quot;g&quot; is color[1])
&gt;&gt;&gt; index = 0
&gt;&gt;&gt; &quot;XYZ&quot;[index]
'X'

and as for your third question, with espanol selected as language.
&gt;&gt;&gt; bpy.app.translations.pgettext(&quot;Location&quot;)
'Posición'

consult the docs.  https://docs.blender.org/api/current/bpy.app.translations.html#module-bpy.app.translations