Start a chapter on i18n and l20n

This commit is contained in:
Fred Pauchet 2024-03-13 21:15:08 +01:00
parent 910926b66e
commit 33bd4a578a
6 changed files with 53 additions and 5 deletions

View File

@ -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 quun accès en lecture au dépôt source.
=== Portainer
=== Kubernetes
https://blog.jetbrains.com/pycharm/2024/03/deploying-django-apps-in-kubernetes/

View File

@ -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.

View File

@ -0,0 +1,3 @@
== HTMX
https://www.photondesigner.com/articles/quiz-htmx

View File

@ -0,0 +1,37 @@
== i18n/l10n
La localisation (_l10n_) et linternationalization (_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.
Linternationalisation est donc le processus permettant à une application daccepter une forme de localisation.
La seconde ne va donc pas sans la première, tandis que la première ne fait quautoriser 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.].

View File

@ -1,11 +1,10 @@
== Services
Une des recommandations que lon peut lire pour django consiste à créer des _fat models_ et à conserver des _thin views_, cest-à-dire à compléter le maximum dinformations directement au niveau du modèle et sortir le maximum de règles métiers des vues.
Le soucis, cest que lon 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, cest que lon 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 dautres objets
2. Ajouter un couplage supplémentaire directement au niveau des
propriétés.
1. Réaliser des requêtes N+1 vers dautres 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."

View File

@ -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[]