Start a chapter on i18n and l20n
This commit is contained in:
parent
910926b66e
commit
33bd4a578a
|
@ -29,3 +29,8 @@ La partie ci-dessous a été reprise telle quelle de https://cookiecutter-django
|
|||
le serveur de déploiement ne doit avoir qu’un accès en lecture au dépôt source.
|
||||
|
||||
=== Portainer
|
||||
|
||||
|
||||
=== Kubernetes
|
||||
|
||||
https://blog.jetbrains.com/pycharm/2024/03/deploying-django-apps-in-kubernetes/
|
||||
|
|
|
@ -134,7 +134,7 @@ image::django/simple_html_form.png[align="center"]
|
|||
[NOTE]
|
||||
====
|
||||
Pour que notre page Web réponde à une méthode POST, il est nécessaire de disposer d'un serveur Web pouvant interprêter la requête.
|
||||
Pour ceci, nous allons intégrer notre formulaire ci-dessus dans un flux Django, c'est-à-dire avec sa propre vue, un URL et un template.
|
||||
Pour ceci, nous allons intégrer notre formulaire ci-dessus dans un flux Django, c'est-à-dire avec sa propre vue, une URL et un template.
|
||||
|
||||
Pour ceci, reprenez soit le projet que nous avions créé lors de la partie 2 <<Déploiement>>, soit partez d'un nouveau projet.
|
||||
Que vous preniez l'une ou l'autre de ces options n'aura pas d'incidence pour la suite, puisque nous pourrons jeter ce code rapidement.
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
== HTMX
|
||||
|
||||
https://www.photondesigner.com/articles/quiz-htmx
|
|
@ -0,0 +1,37 @@
|
|||
== i18n/l10n
|
||||
|
||||
La localisation (_l10n_) et l’internationalization (_i18n_) sont deux concepts proches, mais différents :
|
||||
|
||||
* Internationalisation: _Preparing the software for localization. Usually done by developers._ Il s'agit de la préparation d'une application à gérer plusieurs langues.
|
||||
* Localisation: _Writing the translations and local formats. Usually done by translators._, qui consiste à *utiliser* l'internationalisation pour *supporter* une ou plusieurs langues spécifiques.
|
||||
|
||||
L’internationalisation est donc le processus permettant à une application d’accepter une forme de localisation.
|
||||
La seconde ne va donc pas sans la première, tandis que la première ne fait qu’autoriser la seconde.
|
||||
|
||||
https://medium.com/@sakhawy/multilingual-support-in-django-5706e1e144a8
|
||||
|
||||
=== `i18n_patterns()`
|
||||
|
||||
La clé des traductions se trouve au niveau des fichiers `urls()` que nous avons déjà analysés précédemment : cette clé est injectée grâce à la fonction `i18n_patterns()`, que nous trouvons dans le module `django.conf.urls.i18n`.
|
||||
Cette fonction suffixe l'URL de votre application par le code de la langue (`en`, `fr`, `ar`, ...) :
|
||||
|
||||
[source,python]
|
||||
----
|
||||
# conf/urls.py
|
||||
from django.conf.urls.i18n import i18n_patterns
|
||||
from django.urls import include, path
|
||||
|
||||
|
||||
urlpatterns = i18n_patterns( <1>
|
||||
path('', include('gwift.urls')),
|
||||
)
|
||||
----
|
||||
<1> Plutôt que d'utiliser la fonction `path()`, nous utilisons ici la fonction `i18n_patterns()`
|
||||
|
||||
Par défaut, le langage qui sera appliqué comme traduction sera celui défini au niveau de la configuration générale de l'application (`settings.py`), dans la variable `LANGUAGE_CODE`.
|
||||
|
||||
Un middleware (((Middleware))) s'occupe, sur base de l'entête HTTP `Accept-Language`, de définir le langage par défaut à servir à l'utilisateur.
|
||||
Il y a donc assez peu de choses à faire pour qu'une application soit proprement configurée :
|
||||
|
||||
1. Utiliser la fonction de traduction au niveau des URLs,
|
||||
2. Traduire l'application footnote:[Et j'admets que cette deuxième étape peut être plus ardue que prévu.].
|
|
@ -1,11 +1,10 @@
|
|||
== Services
|
||||
|
||||
Une des recommandations que l’on peut lire pour django consiste à créer des _fat models_ et à conserver des _thin views_, c’est-à-dire à compléter le maximum d’informations directement au niveau du modèle et sortir le maximum de règles métiers des vues.
|
||||
Le soucis, c’est que l’on arrive rapidement à créer des classes de plusieurs centaines de lignes, qui dialoguent directement avec la base de données, et qui pourraient potentiellement:
|
||||
Le soucis, c’est que l’on arrive rapidement à créer des classes de plusieurs centaines de lignes, qui dialoguent directement avec la base de données, et qui pourraient potentiellement :
|
||||
|
||||
1. Réaliser des requêtes N+1 vers d’autres objets
|
||||
2. Ajouter un couplage supplémentaire directement au niveau des
|
||||
propriétés.
|
||||
1. Réaliser des requêtes N+1 vers d’autres objets,
|
||||
2. Ajouter un couplage supplémentaire directement au niveau des propriétés,
|
||||
3. Complexifier la maintenance générale de l'application, sous couvert d'une facilité ponctuelle et immédiate.
|
||||
|
||||
"The https://news.ycombinator.com/item?id=23322880["Fat Models" recommendation] is one of the most destructive in my opinion, along with Django Rest Framework "Model Serializers". A JSON serializer that talks directly to the database is just madness."
|
||||
|
|
|
@ -39,3 +39,7 @@ include::book/django-principles/querysets+managers.adoc[]
|
|||
include::book/django-principles/forms.adoc[]
|
||||
|
||||
include::book/django-principles/admin.adoc[]
|
||||
|
||||
include::book/django-principles/htmx.adoc[]
|
||||
|
||||
include::book/django-principles/i18n.adoc[]
|
||||
|
|
Loading…
Reference in New Issue