My Align addon can't be enable

Hi all, I ve just finished an addon but I can’t make it enable when installing in Blender. The check box stay clear :confused:
here’s the code :

bl_info = { “name”: “E.Z. Align”,
“description”: “easy align objects”,
“author”: “Loran”,
“version”: (1, 0),
“blender”: (2, 65, 0),
“location”: “View3D > Tool_Props”,
“warning”: “”, # used for warning icon and text in addons panel
“wiki_url”: “http://wiki.blender.org/index.php/Extensions:2.5/Py/
“Scripts/My_Script”,
“tracker_url”: “http://projects.blender.org/tracker/index.php?
“func=detail&aid=<number>”,
“category”: “3D View”}

import bpy

class AlignPanel(bpy.types.Panel):
bl_label = “E.Z Align”
bl_space_type = “VIEW_3D”
bl_region_type = “TOOL_PROPS”

def draw(self, context):
    scn = bpy.context.scene
    layout = self.layout
    #row = layout.row()
    #col = row.column()
    #col = layout.column(align=True)
    #row = col.row(align=True) 
                  
    obj = context.object        
    row = layout.row()
    col = layout.column()
    #col.label("%i boxes checked" % len([p for p in obj.my_prop if p]))
    row.prop(obj, "axis_prop")     
    
    col.label("From Selected to Active:")
    col.operator("bpt.boutontotal")
    #col.label(" ")
    col.operator("bpt.boutonloc")
    col.operator("bpt.boutonrot")
    col.operator("bpt.boutonscale")  

class BoutonKB0(bpy.types.Operator):
bl_idname = “bpt.boutontotal”
bl_label = “Global Align”
bl_description = “Align location,rotation and scale”
def invoke(self, context, event ):
obA = bpy.context.scene.objects.active
for ob in bpy.context.selected_objects :

ob.location = obA.location

ob.rotation_euler = obA.rotation_euler

ob.scale = obA.scale

        if bpy.context.object.axis_prop[0] == True :            
            ob.location[0] = obA.location[0]
        else :
            ob.location[0] = ob.location[0]
        if bpy.context.object.axis_prop[1] == True :            
            ob.location[1] = obA.location[1]
        else :
            ob.location[1] = ob.location[1]
        if bpy.context.object.axis_prop[2] == True :            
            ob.location[2] = obA.location[2]
        else :
            ob.location[2] = ob.location[2]
        if bpy.context.object.axis_prop[0] == True :            
            ob.rotation_euler[0] = obA.rotation_euler[0]
        else :
            ob.rotation_euler[0] = ob.rotation_euler[0]
        if bpy.context.object.axis_prop[1] == True :            
            ob.rotation_euler[1] = obA.rotation_euler[1]
        else :
            ob.rotation_euler[1] = ob.rotation_euler[1]
        if bpy.context.object.axis_prop[2] == True :            
            ob.rotation_euler[2] = obA.rotation_euler[2]
        else :
            ob.rotation_euler[2] = ob.rotation_euler[2]
        if bpy.context.object.axis_prop[0] == True :            
            ob.scale[0] = obA.scale[0]
        else :
            ob.scale[0] = ob.scale[0]
        if bpy.context.object.axis_prop[1] == True :            
            ob.scale[1] = obA.scale[1]
        else :
            ob.scale[1] = ob.scale[1]
        if bpy.context.object.axis_prop[2] == True :            
            ob.scale[2] = obA.scale[2]
        else :
            ob.scale[2] = ob.scale[2]
    return {'FINISHED'}

class BoutonKB1(bpy.types.Operator):
bl_idname = “bpt.boutonloc”
bl_label = “Align Location”
bl_description = “Align location only”
def invoke(self, context, event ):
obA = bpy.context.scene.objects.active
for ob in bpy.context.selected_objects :
if bpy.context.object.axis_prop[0] == True :
ob.location[0] = obA.location[0]
else :
ob.location[0] = ob.location[0]
if bpy.context.object.axis_prop[1] == True :
ob.location[1] = obA.location[1]
else :
ob.location[1] = ob.location[1]
if bpy.context.object.axis_prop[2] == True :
ob.location[2] = obA.location[2]
else :
ob.location[2] = ob.location[2]
return {‘FINISHED’}

class BoutonKB2(bpy.types.Operator):
bl_idname = “bpt.boutonrot”
bl_label = “Align Rotation”
bl_description = “Align rotation only”
def invoke(self, context, event ):
obA = bpy.context.scene.objects.active
for ob in bpy.context.selected_objects :
#ob.rotation_euler = obA.rotation_euler
if bpy.context.object.axis_prop[0] == True :
ob.rotation_euler[0] = obA.rotation_euler[0]
else :
ob.rotation_euler[0] = ob.rotation_euler[0]
if bpy.context.object.axis_prop[1] == True :
ob.rotation_euler[1] = obA.rotation_euler[1]
else :
ob.rotation_euler[1] = ob.rotation_euler[1]
if bpy.context.object.axis_prop[2] == True :
ob.rotation_euler[2] = obA.rotation_euler[2]
else :
ob.rotation_euler[2] = ob.rotation_euler[2]
return {‘FINISHED’}

class BoutonKB3(bpy.types.Operator):
bl_idname = “bpt.boutonscale”
bl_label = “Align Scale”
bl_description = “Align scale only”
def invoke(self, context, event ):
obA = bpy.context.scene.objects.active
for ob in bpy.context.selected_objects :
#ob.scale = obA.scale
if bpy.context.object.axis_prop[0] == True :
ob.scale[0] = obA.scale[0]
else :
ob.scale[0] = ob.scale[0]
if bpy.context.object.axis_prop[1] == True :
ob.scale[1] = obA.scale[1]
else :
ob.scale[1] = ob.scale[1]
if bpy.context.object.axis_prop[2] == True :
ob.scale[2] = obA.scale[2]
else :
ob.scale[2] = ob.scale[2]
return {‘FINISHED’}

def register():
bpy.utils.register_class(AlignPanel)
bpy.types.Object.axis_prop = bpy.props.BoolVectorProperty(name=“Axis”, subtype=‘XYZ’)
bpy.utils.register_class(BoutonKB0)
bpy.utils.register_class(BoutonKB1)
bpy.utils.register_class(BoutonKB2)
bpy.utils.register_class(BoutonKB3)

def unregister():
bpy.utils.register_class(AlignPanel)
bpy.utils.register_class(BoutonKB0)
bpy.utils.register_class(BoutonKB1)
bpy.utils.register_class(BoutonKB2)
bpy.utils.register_class(BoutonKB3)
del bpy.types.Object.axis_prop

if name == “main”:
register()

SOLVED !seem to be the dots in the name “E.Z. Align” creating trouble…

you need to use

 tags, not quote, or indentation gets lost

Dots in bl_label or bl_info['name'] should work, but be careful with them in bl_idname!