django-Transmeta est une application Django pour contenu traduisible dans les modèles de Django & nbsp;. Chaque langue est stockée et gérée automatiquement dans une colonne différente au niveau de la base de données.
Utilisation Transmeta strong>
Création de modèles traduisibles
Regardez ce modèle:
classe Book (models.Model):
& Nbsp; title = models.CharField (max_length = 200)
& Nbsp; description = models.TextField ()
& Nbsp; corps = models.TextField (par défaut = '')
& Nbsp; prix = models.FloatField ()
Supposons que vous voulez faire la description et traduisible de corps. Le modèle résultant après l'utilisation de Transmeta est:
de Transmeta importation Transmeta
classe Book (models.Model):
& Nbsp; __ = metaclass__ Transmeta
& Nbsp; title = models.CharField (max_length = 200)
& Nbsp; description = models.TextField ()
& Nbsp; corps = models.TextField (par défaut = '')
& Nbsp; prix = models.FloatField ()
& Nbsp; Meta de classe:
& Nbsp; translate = ('description', 'corps',)
Assurez-vous que vous avez défini par défaut et les langues disponibles dans votre settings.py:
LANGUAGE_CODE = 'ES'
ugettext = lambda s: # mannequin de ugettext fonction, comme les docs de Django disent
LANGUES = (
& Nbsp; ('es', ugettext («espagnol»)),
& Nbsp; ('fr', ugettext («anglais»)),
)
Ce est le SQL généré avec la commande sqlall ./manage.py:
COMMENCER;
CREATE TABLE "fooapp_book" (
& Nbsp; "id" PRIMARY KEY NOT NULL série,
& Nbsp; varchar "title" (200) NOT NULL,
& Nbsp; texte "description_en",
& Nbsp; "description_es" texte NOT NULL,
& Nbsp; "body_es" texte NOT NULL,
& Nbsp; texte "body_en" NOT NULL,
& Nbsp; "prix" double précision NOT NULL
)
;
COMMIT;
Notes: * transmeta crée une colonne pour chaque langue. Ne vous inquiétez pas avoir besoin de nouvelles langues à l'avenir, Transmeta résout ce problème pour vous. * Si un champ est nul = False et ne pas avoir une valeur par défaut, Transmeta va créer un seul champ NOT NULL, pour la langue par défaut. Les champs pour d'autres langues secondaires seront nullable. En outre, la langue principale sera nécessaire dans l'application d'administration, tandis que les autres champs seront en option (avec le blanc = True). Cela a été fait parce que l'approche normale pour la traduction de contenu est d'abord ajouter du contenu dans la langue principale et plus tard avoir traducteurs traduisent dans d'autres langues. * Vous pouvez utiliser syncdb ./manage.py pour créer le schéma de base de données.
Jouer dans la coquille de python
Transmeta crée un champ pour toutes les langues disponibles pour chaque champ traduisible défini dans un modèle. Les noms des champs sont suffixe codes de langue courts, par exemple: description_es, description_en, et ainsi de suite. En outre, elle crée un getter nom_champ pour extraire la valeur du champ dans la langue active.
Jouons un peu dans une coquille de python pour mieux comprendre comment cela fonctionne:
& Gt; & gt; & gt; de fooapp.models importer livre
& Gt; & gt; & gt; b = Book.objects.create (description_es = u'mi descripcion ', description_en = u'my description')
& Gt; & gt; & gt; b.description
Description u'my '
& Gt; & gt; & gt; de django.utils.translation activate d'importation
& Gt; & gt; & gt; activer («ES»)
& Gt; & gt; & gt; b.description
u'mi descripcion '
& Gt; & gt; & gt; b.description_en
Description u'my '
Ajout de nouvelles langues
Si vous devez ajouter de nouvelles langues à celles déjà existantes, vous ne avez besoin de changer votre settings.py et demander transmeta de synchroniser à nouveau la DB. Par exemple, pour ajouter le français à notre projet, vous devez l'ajouter aux langues dans settings.py:
LANGUES = (
& Nbsp; ('es', ugettext («espagnol»)),
& Nbsp; ('fr', ugettext («anglais»)),
& Nbsp; ('fr', ugettext («français»)),
)
Et exécuter une commande de sync_transmeta_db spéciale:
& Nbsp; ./ manage.py sync_transmeta_db
Langues disparues à champ «description» du modèle «fooapp.book": fr
SQL pour synchroniser le schéma "de fooapp.book":
& Nbsp; ALTER TABLE "fooapp_book" Ajouter une colonne texte "description_fr"
Etes-vous sûr que vous voulez exécuter la précédente SQL: (y / n) [n]: y
SQL exécution ... Fait
Langues disparues dans le champ «corps» à partir du modèle "de fooapp.book": fr
SQL pour synchroniser le schéma "de fooapp.book":
& Nbsp; ALTER TABLE "fooapp_book" Ajouter une colonne texte "body_fr"
Etes-vous sûr que vous voulez exécuter la précédente SQL: (y / n) [n]: y
SQL exécution ... Fait
Et fait!
Ajout de nouveaux champs traduisibles
Maintenant, imaginez que, après plusieurs mois en utilisant cette application web (avec de nombreux livres créés), vous devez faire le prix du livre traduisible (par exemple parce que le prix du livre dépend de monnaie).
Pour cela, ajoutez cher à la liste des champs traduisible du modèle:
classe Book (models.Model):
& Nbsp; ...
& Nbsp; prix = models.FloatField ()
& Nbsp; Meta de classe:
& Nbsp; translate = ('description', 'corps', 'prix',)
Tout ce qui reste maintenant est d'appeler la commande de sync_transmeta_db de mettre à jour le schéma de DB:
& Nbsp; ./ manage.py sync_transmeta_db
Langues disponibles:
& Nbsp; 1. Espagnol
& Nbsp; 2. Anglais
Choisissez une langue dans laquelle pour mettre les données non traduites actuelles.
Quelle est la langue des données actuelles? (1-2): 1
Langues disparues dans le champ "prix" à partir du modèle "de fooapp.book": es, en
SQL pour synchroniser le schéma "de fooapp.book":
& Nbsp; ALTER TABLE "fooapp_book" Ajouter une colonne "price_es" double précision
& Nbsp; Mettre à Jour "fooapp_book" SET "price_es" = "price"
& Nbsp; ALTER TABLE "fooapp_book" ALTER colonne "price_es" SET NOT NULL
& Nbsp; ALTER TABLE "fooapp_book" Ajouter une colonne "price_en" double précision
& Nbsp; ALTER TABLE "fooapp_book" DROP COLUMN "prix"
Etes-vous sûr que vous voulez exécuter la précédente SQL: (y / n) [n]: y
SQL exécution ... Fait
Qu'est-ce que cette commande fait?
commande sync_transmeta_db non seulement crée de nouvelles colonnes pour nouveau champ traduisible de base de données ... ce copier des données à partir de vieux champ de prix dans l'une des langues, et ce est pourquoi la commande vous demande pour le champ de langue de destination pour les données réelles.
l'intégration Admin
Transmeta affiche transparente tous les champs traduisibles dans l'interface d'administration. Ce est facile parce que les modèles ont en effet de nombreux domaines (une pour chaque langue).
Modification de champs de formulaire dans l'admin est une tâche assez commun, et Transmeta comprend la fonction d'utilité de canonical_fieldname pour appliquer ces modifications pour tous les domaines de la langue à la fois. Ce est mieux expliqué par un exemple:
de Transmeta importation canonical_fieldname
classe BookAdmin (admin.ModelAdmin):
& Nbsp; def formfield_for_dbfield (self, db_field, kwargs **):
& Nbsp; champ = super (BookAdmin, auto) .formfield_for_dbfield (db_field, kwargs **)
& Nbsp; db_fieldname = canonical_fieldname (db_field)
& Nbsp; si db_fieldname == 'description':
& Nbsp; # cela se applique à tous les domaines description_ *
& Nbsp; field.widget = MyCustomWidget ()
& Nbsp; elif field.name == 'body_es':
& Nbsp; # ceci ne se applique qu'aux champ body_es
& Nbsp; field.widget = MyCustomWidget ()
& Nbsp; champ de retour
Caractéristiques :
- Création automatique du schéma avec des champs traduisibles.
- champs traduisibles intégrées dans l'interface d'administration de Django.
- Commande pour synchroniser le schéma de base de données pour ajouter de nouveaux champs traduisibles et de nouveaux langages.
Ce qui est nouveau dans cette version:
- fonction get_mandatory_fieldname ajouté.
Ce qui est nouveau dans la version 0.6.9:
- Support de méthode get_field_language pour les noms de terrain de soulignement
Ce qui est nouveau dans la version 0.6.8:
- Correction d'un petit bug dans la commande sync_transmeta_db (UnboundLocalError: variable locale 'f' référencé avant l'assignation)
Ce qui est nouveau dans la version 0.6.7:
- Modifier la représentation (verbose_name) des étiquettes de Transmeta li>
Ce qui est nouveau dans la version 0.6.6:
- Améliorations et facilité d'utilisation dans la commande sync_transmeta_db
- Correction de quelques bogues
- Documentation
Ce qui est nouveau dans la version 0.6.5:
- Améliorations et facilité d'utilisation dans la commande sync_transmeta_db
- Fonctionne avec la dernière django (la commande sync_transmeta_db)
- Fonctionne avec mysql (la commande sync_transmeta_db)
Ce qui est nouveau dans la version 0.6.4:
- Correction d'erreur avec l'héritage des modèles.
Ce qui est nouveau dans la version 0.6.3:
- permet d'utiliser un des paramètres de TRANSMETA_LANGUAGES.
- Ajout de deux options pour sync_transmeta_db: -y (assumer oui sur tout) et -d (code de langue par défaut)
Ce qui est nouveau dans la version 0.6.2:
- Fonctionne lors locale par défaut ont variantes orthographiques que es-ES ou en-US.
Exigences :
- Django
- Python
Commentaires non trouvées