def register(self, master_model, translation_class=None, **options):
        """
        Sets everything up for the given master model using a set of
        registration options (ModelTranslation attributes).
  
        If a translation class isn't given, it will use ModelTranslation (the
        default translation options). If keyword arguments are given -- e.g.,
        fields -- they'll overwrite the translation_class attributes.
        """
        if master_model in self._registry:
            raise AlreadyRegistered('The model "%s" has is already registered for translation' % master_model.__name__)
  
        # If not translation_class given use default options.
        if not translation_class:
            translation_class = ModelTranslation
        # If we got **options then dynamically construct a subclass of translation_class with those **options.
        if options:
            translation_class = type('%sTranslation' % master_model.__name__, (translation_class,), options)

        # Validate the translation_class (just in debug mode).
        if settings.DEBUG:
            from model_i18n.validation import validate
            validate(translation_class, master_model)

        opts = translation_class(master_model)
        # Set up master_model as a multilingual model using translation_class options
        translation_model = self.create_translation_model(master_model, opts)
        models.register_models(master_model._meta.app_label, translation_model)        
        self.setup_master_model(master_model, translation_model) # This probably will become a class method soon.
        setup_admin(master_model, translation_model) # Setup django-admin support

        # Register the multilingual model and the used translation_class.
        self._registry[master_model] = opts
    def register(self, master_model, translation_class=None, **options):
        if type(master_model) is str:
            app_path = ".".join(master_model.split(".")[:-1])
            master_module_models = import_module(app_path + '.models')
            master_model = getattr(master_module_models, master_model.split(".")[-1])
            #print master_model
            #return
        if master_model in self._registry:
            raise AlreadyRegistered('The model "%s" has is already \
            registered for translation' % master_model.__name__)

        # If not translation_class given use default options.
        if not translation_class:
            translation_class = ModelTranslation

        # If we got **options then dynamically construct a
        # subclass of translation_class with those **options.
        if options:
            translation_class = type('%sTranslation' % \
            master_model.__name__, (translation_class,), options)

        # Validate the translation_class (just in debug mode).
        if settings.DEBUG:
            from model_i18n.validation import validate
            validate(translation_class, master_model)

        transmanager_class = type('%sTransManager' % master_model.__name__, (TransManager, master_model.objects.__class__,), {})
        livetransmanager_class = transmanager_class
        try:
            livetransmanager_class = type('%sLiveTransManager' % master_model.__name__, (TransManager, master_model.live_objects.__class__,), {})
        except:
            pass

        master_model.add_to_class('_default_manager', TransManager())
        master_model.add_to_class('_base_manager', TransManager())
        master_model.add_to_class('objects', transmanager_class())
        master_model.add_to_class('live_objects', livetransmanager_class())

        opts = translation_class(master_model)

        # Set up master_model as a multilingual model
        # using translation_class options
        tmodel = self.create_translation_model(master_model, opts)
        tmodel.__unicode__ = lambda s: unicode(getattr(s, s._transmeta.master_field_name))
        defaults = {'blank': True, 'null': True, 'editable': False}
        m2mfield = models.ManyToManyField(tmodel, **defaults)
        master_model.add_to_class("translations", m2mfield)

        # This probably will become a class method soon.
        self.setup_master_model(master_model, tmodel)
        if MODEL_I18N_DJANGO_ADMIN:
            self._registry_admin[master_model] = tmodel

        # Register the multilingual model and the used translation_class.
        self._registry[master_model] = opts
    def register(self, master_model, translation_class=None, **options):
        """
        Sets everything up for the given master model using a set of
        registration options (ModelTranslation attributes).
  
        If a translation class isn't given, it will use ModelTranslation (the
        default translation options). If keyword arguments are given -- e.g.,
        fields -- they'll overwrite the translation_class attributes.
        """
        if master_model in self._registry:
            raise AlreadyRegistered(
                'The model "%s" has is already registered for translation' %
                master_model.__name__)

        # If not translation_class given use default options.
        if not translation_class:
            translation_class = ModelTranslation
        # If we got **options then dynamically construct a subclass of translation_class with those **options.
        if options:
            translation_class = type('%sTranslation' % master_model.__name__,
                                     (translation_class, ), options)

        # Validate the translation_class (just in debug mode).
        if settings.DEBUG:
            from model_i18n.validation import validate
            validate(translation_class, master_model)

        opts = translation_class(master_model)

        # Set up master_model as a multilingual model using translation_class options
        translation_model = self.create_translation_model(master_model, opts)
        models.register_models(master_model._meta.app_label, translation_model)
        self.setup_master_model(
            master_model, translation_model
        )  # This probably will become a class method soon.
        setup_admin(master_model,
                    translation_model)  # Setup django-admin support

        # Register the multilingual model and the used translation_class.
        self._registry[master_model] = opts
    def register(self, master_model, translation_class=None, **options):
        if type(master_model) is str:
            app_path = ".".join(master_model.split(".")[:-1])
            master_module_models = import_module(app_path + '.models')
            master_model = getattr(master_module_models,
                                   master_model.split(".")[-1])
        if master_model in self._registry:
            raise AlreadyRegistered('The model "%s" has is already \
            registered for translation' % master_model.__name__)

        # If not translation_class given use default options.
        if not translation_class:
            translation_class = ModelTranslation

        # If we got **options then dynamically construct a
        # subclass of translation_class with those **options.
        if options:
            translation_class = type('%sTranslation' % \
            master_model.__name__, (translation_class,), options)

        # Validate the translation_class (just in debug mode).
        if settings.DEBUG:
            from model_i18n.validation import validate
            validate(translation_class, master_model)

        transmanager_class = type('%sTransManager' % master_model.__name__, (
            TransManager,
            master_model.objects.__class__,
        ), {})
        try:
            livetransmanager_class = type(
                '%sLiveTransManager' % master_model.__name__, (
                    TransManager,
                    master_model.live_objects.__class__,
                ), {})
        except:
            livetransmanager_class = type(
                '%sLiveTransManager' % master_model.__name__, (
                    TransManager,
                    master_model.objects.__class__,
                ), {})

        master_model.add_to_class('_default_manager', TransManager())
        master_model.add_to_class('_base_manager', TransManager())
        master_model.add_to_class('objects', transmanager_class())
        master_model.add_to_class('live_objects', livetransmanager_class())

        opts = translation_class(master_model)

        # Set up master_model as a multilingual model
        # using translation_class options
        tmodel = self.create_translation_model(master_model, opts)
        tmodel.__unicode__ = lambda s: unicode(
            getattr(s, s._transmeta.master_field_name))
        # defaults = {'blank': True, 'null': True, 'editable': False, 'related_name': '%(app_label)s_%(class)s_related'}
        # m2mfield = models.ManyToManyField(tmodel, **defaults)
        # master_model.add_to_class("translations", m2mfield)

        # This probably will become a class method soon.
        self.setup_master_model(master_model, tmodel)
        if MODEL_I18N_DJANGO_ADMIN:
            self._registry_admin[master_model] = tmodel

        # Register the multilingual model and the used translation_class.
        self._registry[master_model] = opts