# Conversion Anglais/Français Jour de la semaine

**URL:** <https://forum.hacf.fr/t/conversion-anglais-francais-jour-de-la-semaine/1040>\
**Category:** Entraide Home Assistant\
**Created:** [Novembre 16, 2020, 10:52 UTC](https://forum.hacf.fr/t/conversion-anglais-francais-jour-de-la-semaine/1040 "2020-11-16T22:52:18Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![Clemalex](https://forum.hacf.fr/user_avatar/forum.hacf.fr/clemalex/32/3691_2.png) [@Clemalex](https://forum.hacf.fr/u/Clemalex)\
**Post date:** [Novembre 16, 2020, 10:52 UTC](https://forum.hacf.fr/t/conversion-anglais-francais-jour-de-la-semaine/1040/1 "2020-11-16T22:52:18Z")

</div>

Voici un petit exemple de conversion utilisant des fonctions jinja2 que je souhaitais vous partager.  
La demande initiale est sur le Discord :

> @landaisbenj demande :  
> Salut a tous !  
> Vous sauriez comment renvoyer le jour en Français ?(modifié  
> `{{as_timestamp((states.binary_sensor.door_window_sensor_158dXXXXXXXXXX.last_changed)) | int | timestamp_custom('%A %d/%m/%Y %H:%M', true)}}`

Le problème est que le résultat retourné est : Monday 21:01:34.  
Et comme on est sur HAC **F** , on voudrait avoir : Lundi 21:01:34.

Voici donc ma méthode (n'hésitez pas à partager la votre), elle n'est pas forcément la plus simple, mais je la trouve assez compréhensible...😉

### Récupération du dernier évènement

Le code suivant vient récupérer l'horodatage (timestamp en anglais), le plus récent parmi les 5 portes observées.  
Ensuite, l'horodatage est mis en forme (`format` en anglais), sous la forme "Jour\_de\_la\_semaine HH:MM:SS".

```python
set last_changed = ( [ 
as_timestamp(states.binary_sensor.porte_001.last_changed),
as_timestamp(states.binary_sensor.porte_002.last_changed),
as_timestamp(states.binary_sensor.porte_003.last_changed),
as_timestamp(states.binary_sensor.porte_004.last_changed),
as_timestamp(states.binary_sensor.porte_005.last_changed)
]|max)| int | timestamp_custom("%A %X", true)

```

On obtient donc une variable `last_changed` qui contient "Jour\_de\_la\_semaine HH:MM:SS" .  
Mais comme `Jour_de_la_semaine` est présenté en anglais, il y a plusieurs étapes pour le convertir en français.

### Récupération du jour et de l'heure séparément

Le résultat renvoyé est sous la forme`JOUR HEURE`avec un `espace` entre les deux.

On va dans un premier temps, séparer ce résultat en 2 variables distinctes : `get_day_en ` contiendra `JOUR` et `get_hour ` contiendra `HEURE`.

Pour réussir à créer ces variables, on va utiliser la fonction `Split`.  
Cette fonction permet à l'aide d'un séparateur de renvoyer un tableau (array en anglais).  
Dans notre cas, le séparateur est `l'espace` , donc :

```python
set get_day_en = last_changed.split(' ')[0] contiendra `JOUR`

```

```python
set get_hour = last_changed.split(' ')[1] contiendra `HEURE`

```

### Conversion du jour de la semaine

Maintenant que nous avons récupéré le jour de la semaine en anglais, il faut le convertir.  
Pour cela, nous allons dans un premier temps définir 2 tableaux de correspondance Anglais/Français :

```python
set jour_en = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
set jour_fr = ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"]

```

Ensuite, nous allons parcourir le tableau `jour_en` afin de trouver la position de `JOUR` dans ce tableau.  
Une fois que nous aurons récupéré, la position de `JOUR` dans le tableau `jour_en`, grâce à la correspondance des 2 tableaux, nous récupèrerons le `JOUR` en français depuis le tableau `jour_fr` :

```python
{# Définition du `namespace` afin de pouvoir récupérer la valeur définie dans la boucle #}
set set_fr = namespace(day="")
for find_jour in jour_en
	{# Si l'élément du tableau `jour_en` est égal à `get_day_en` (jour de la semaine en anglais) #}        
	if find_jour == get_day_en
		{# Récupération de la position dans le tableau de `find_jour` afin de récupérer le jour de la semaine en français #}        
		set set_fr.day = jour_fr[jour_en.index(find_jour|string)]
	endif
endfor

```

> ℹ **Explication de l'utilisation du namespace**  
> La définition du namespace permet d'affecter une variable dans une boucle et de la récupérer en dehors de celle-ci :
> 
> ```python
> set set_fr = namespace(day="")
> 
> ```

> ℹ **Explication de la ligne**
> 
> ```python
> set set_fr.day = jour_fr[jour_en.index(find_jour|string)]
> 
> ```
> 
> La fonction `[ARRAY].index(VAR) permet de récupérer la position de l'élément VAR dans le tableau ARRAY`  
> Donc dans notre cas, on cherche JOUR dans le tableau en anglais et on récupère sa position, pour ensuite récupérer JOUR dans le tableau français à la même position.  
> Donc la variable set\_fr.day contient le JOUR en français. 👍

### Affichade du JOUR et de l'HEURE

Il ne reste plus qu'à afficher le `JOUR` en français et `l'HEURE` :

```python
set_fr.day + " à " + get_hour

```

ce qui donne sur Lovelace, dans une carte `Entité` :

 ![image](https://forum.hacf.fr/uploads/default/original/2X/5/53ec3b29b23fcadf0cafa887873d60e54741d2c4.png) 

## Pour résumer

Voici donc le code complet à incorporer dans votre configuration :

```yaml
sensor:
#Création d'un sensor remontant le dernier évènement des entités définies
  - platform: template
    sensors:
      derniere_porte:
        friendly_name: 'Dernière ouverture le :'
        device_class: timestamp 
        unique_id: derniere_porte #Permet la modification depuis l'interface graphique
        value_template: >-  
          {# Récupération de la date/heure au format `timestamp` du dernier évènement parmis toutes ces entités à l'aide de la fonction `max` #}
          {# a qui est convertie au format `Jour_de_la_semaine HH:MM:SS` #}
              {% set last_changed = ( [ 
              as_timestamp(states.binary_sensor.porte_001.last_changed),
              as_timestamp(states.binary_sensor.porte_002.last_changed),
              as_timestamp(states.binary_sensor.porte_003.last_changed),
              as_timestamp(states.binary_sensor.porte_004.last_changed),
              as_timestamp(states.binary_sensor.porte_005.last_changed)
              ]|max)| int | timestamp_custom("%A %X", true) %}
          {# Récupération du jour de la semaine en anglais` #}
              {% set get_day_en = last_changed.split(' ')[0] %}
          {# Récupération de l'heure (HH:MM:SS)` #}
              {% set get_hour = last_changed.split(' ')[1] %}
          {# Définition du `namespace` afin de pouvoir récupérer la valeur définie dans la boucle #}
              {%set set_fr = namespace(day="") %}
          {# Définition des tableaux pour conversion #}
              {% set jour_en = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] %}
              {% set jour_fr = ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"] %}
          {# Boucle parcourant tous les éléments du tableau `jour_en` (tous les jours de la semaine en anglais) #}
              {% for find_jour in jour_en %}
                  {# Si l'élément du tableau `jour_en` est égal à `get_day_en` (jour de la semaine en anglais) #}        
                      {% if find_jour == get_day_en %}
                          {# Récupération de la position dans le tableau de `find_jour` afin de récupérer le jour de la semaine en français #}        
                              {% set set_fr.day = jour_fr[jour_en.index(find_jour|string)] %}
                      {% endif %}
              {% endfor %}
          {# Définition de la valeur de l'entité au format Jour_de_la_semaine(FR) HH:MM:SS #}
          {{set_fr.day + " à " + get_hour}}

```

Je le répète, je ne suis pas sûr que ce soit la méthode la plus simple, mais je trouvais utile de vous la présenter car elle introduit quelque fonction sympa 😉

[Source(EN)](https://community.home-assistant.io/t/get-weekday-in-my-local-language/34521/6?u=clemalex)

---

<div class="post-metadata">

**Author:** ![Gogo](https://forum.hacf.fr/user_avatar/forum.hacf.fr/gogo/32/529_2.png) [@Gogo](https://forum.hacf.fr/u/Gogo)\
**Post date:** [Novembre 16, 2020, 10:58 UTC](https://forum.hacf.fr/t/conversion-anglais-francais-jour-de-la-semaine/1040/2 "2020-11-16T22:58:55Z")

</div>

Merci du partage !  
Ça peut toujours être utile 👍

---

<div class="post-metadata">

**Author:** ![Clemalex](https://forum.hacf.fr/user_avatar/forum.hacf.fr/clemalex/32/3691_2.png) [@Clemalex](https://forum.hacf.fr/u/Clemalex)\
**Post date:** [Novembre 16, 2020, 10:59 UTC](https://forum.hacf.fr/t/conversion-anglais-francais-jour-de-la-semaine/1040/3 "2020-11-16T22:59:55Z")

</div>

Ça le sera pour au moins une personne (@landaisbenj) 😇

---

<div class="post-metadata">

**Author:** ![McFly](https://forum.hacf.fr/user_avatar/forum.hacf.fr/mcfly/32/1077_2.png) [@McFly](https://forum.hacf.fr/u/McFly)\
**Post date:** [Novembre 16, 2020, 11:33 UTC](https://forum.hacf.fr/t/conversion-anglais-francais-jour-de-la-semaine/1040/4 "2020-11-16T23:33:16Z")

</div>

Merci merci très intéressant

---

<div class="post-metadata">

**Author:** ![Landaisbenj](https://forum.hacf.fr/user_avatar/forum.hacf.fr/landaisbenj/32/1464_2.png) [@Landaisbenj](https://forum.hacf.fr/u/Landaisbenj)\
**Post date:** [Novembre 17, 2020, 6:40 UTC](https://forum.hacf.fr/t/conversion-anglais-francais-jour-de-la-semaine/1040/5 "2020-11-17T06:40:35Z")

</div>

Ouha c’est fou!! Merci pour ma fonction.

---

<div class="post-metadata">

**Author:** ![oncleben31](https://forum.hacf.fr/user_avatar/forum.hacf.fr/oncleben31/32/107_2.png) [@oncleben31](https://forum.hacf.fr/u/oncleben31)\
**Post date:** [Novembre 17, 2020, 7:45 UTC](https://forum.hacf.fr/t/conversion-anglais-francais-jour-de-la-semaine/1040/6 "2020-11-17T07:45:51Z")

</div>

Super, mais j’ai du mal à comprendre pourquoi il n’y a pas un moyen natif dans HA de localiser une date. Ca mérite un «&nbsp;_What The Heck_&nbsp;» sur le forum officiel…

---

<div class="post-metadata">

**Author:** ![Clemalex](https://forum.hacf.fr/user_avatar/forum.hacf.fr/clemalex/32/3691_2.png) [@Clemalex](https://forum.hacf.fr/u/Clemalex)\
**Post date:** [Novembre 17, 2020, 9:01 UTC](https://forum.hacf.fr/t/conversion-anglais-francais-jour-de-la-semaine/1040/7 "2020-11-17T09:01:49Z")

</div>

Je t’en prie 🙏

* * *

---

<div class="post-metadata">

**Author:** ![oncleben31](https://forum.hacf.fr/user_avatar/forum.hacf.fr/oncleben31/32/107_2.png) [@oncleben31](https://forum.hacf.fr/u/oncleben31)\
**Post date:** [Novembre 17, 2020, 11:14 UTC](https://forum.hacf.fr/t/conversion-anglais-francais-jour-de-la-semaine/1040/8 "2020-11-17T11:14:39Z")

</div>

Ah mince la section est fermée. C’était réservé pour le mois de Septembre.

---

<div class="post-metadata">

**Author:** ![Clemalex](https://forum.hacf.fr/user_avatar/forum.hacf.fr/clemalex/32/3691_2.png) [@Clemalex](https://forum.hacf.fr/u/Clemalex)\
**Post date:** [Novembre 17, 2020, 12:23 UTC](https://forum.hacf.fr/t/conversion-anglais-francais-jour-de-la-semaine/1040/9 "2020-11-17T12:23:31Z")

</div>

Elle rouvrira de toute façon l’année prochaine

---

<div class="post-metadata">

**Author:** ![Landaisbenj](https://forum.hacf.fr/user_avatar/forum.hacf.fr/landaisbenj/32/1464_2.png) [@Landaisbenj](https://forum.hacf.fr/u/Landaisbenj)\
**Post date:** [Novembre 19, 2020, 5:41 UTC](https://forum.hacf.fr/t/conversion-anglais-francais-jour-de-la-semaine/1040/10 "2020-11-19T17:41:01Z")

</div>

J'ai réussi à améliorer la lecture et la contraction du code:

**Pour expliquer:**  
Je créé toujours des variables contenant l'écriture française. J'ajoute cette fois-ci le mois pour etre plus polyvalent  
(Vous noterez que j'ai commencé la table mois avec une valeur vide, car je ne sais pas gerer le mois 0...):

```auto
{% set mois = ["","Janvier","Fevrier","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Decembre"] %}
{% set jours = ["Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"] %}

```

_Je réduis un peu mon code à une variable device pour la compréhension (mon but à moi est d'avoir le datetime du dernier changement d'état d'une liste de device, mais cela fonctionne avec un seul device):_

```auto
{% set device = ([
states.binary_sensor.porte_001.last_changed,
states.binary_sensor.porte_002.last_changed,
states.binary_sensor.porte_003.last_changed,
states.binary_sensor.porte_004.last_changed,
states.binary_sensor.porte_005.last_changed
]|max) %}

```

Et je fais référence à mes deux tables à l'aide du chiffre du jour de la semaine, et du numéro du mois pour avoir une date complètement française et configurable comme on le veut:

`{{ jours[device.weekday()] }}`:  
me donne le jour en Français en lieu est place de `{{ device.strftime("%A") }}`:

`{{ device.day }}` ou `{{ device.strftime("%d") }}`:  
me donneront le chiffre du jour dans le mois.

`{{ mois[device.month]}}`:  
me donnera le mois en Français en lieu est place de `{{ device.strftime("%B") }}`:

`{{ as_local(device).strftime("%H:%M") }}`:  
me donne l'heure et les minutes, en forçant la localisation de l'heure (pour gérer le décalage été/hiver)

**Pour résumer:**

```auto
{% set mois = ["","Janvier", "Fevrier","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Decembre"] %}
{% set jours = ["Lundi", "Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"] %}
{% set device = ([
  states.binary_sensor.porte_001.last_changed,
  states.binary_sensor.porte_002.last_changed,
  states.binary_sensor.porte_003.last_changed,
  states.binary_sensor.porte_004.last_changed,
  states.binary_sensor.porte_005.last_changed
]|max) %}
Le {{ jours[device.weekday()] }} {{ device.day }} {{ mois[device.month]}} à {{ as_local(device).strftime("%Hh%M") }}

```

Me retourne dans mon sensor :

 ![image](https://forum.hacf.fr/uploads/default/original/2X/4/40dab3e974b21f65a46a065143dd0933e0fba85e.png)

---

<div class="post-metadata">

**Author:** ![Clemalex](https://forum.hacf.fr/user_avatar/forum.hacf.fr/clemalex/32/3691_2.png) [@Clemalex](https://forum.hacf.fr/u/Clemalex)\
**Post date:** [Novembre 19, 2020, 6:14 UTC](https://forum.hacf.fr/t/conversion-anglais-francais-jour-de-la-semaine/1040/11 "2020-11-19T18:14:58Z")

</div>

Merci pour le partage !

Bien plus simple ! 😃

_Faut dire que je voulais présenter les fonctions plus que la méthode la plus simple, comme j’avertis en début de topic… 🙄 😉_

---

<div class="post-metadata">

**Author:** ![oracle7](https://forum.hacf.fr/user_avatar/forum.hacf.fr/oracle7/32/19868_2.png) [@oracle7](https://forum.hacf.fr/u/oracle7)\
**Post date:** [Juin 19, 2023, 6:42 UTC](https://forum.hacf.fr/t/conversion-anglais-francais-jour-de-la-semaine/1040/12 "2023-06-19T18:42:05Z")

</div>

Bonjour,

> Vous noterez que j’ai commencé la table mois avec une valeur vide, car je ne sais pas gerer le mois 0…

Si je puis me permettre : juste une astuce pour ne pas gérer de mois «&nbsp;0…&nbsp;»

Le tableau «&nbsp;mois&nbsp;» devient :

```auto
{% set mois = ["Janvier", "Fevrier","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Decembre"] %}

```

et on remplace :

```auto
{{ mois[device.month]}}

```

par

```auto
{{ mois[device.month-1]}}

```

Même trois ans après, merci encore pour ce partage qui rend bien service 😀  
Cordialement  
oracle7 😉

---

<div class="post-metadata">

**Author:** ![Pulpy-Luke](https://forum.hacf.fr/user_avatar/forum.hacf.fr/pulpy-luke/32/137426_2.png) [@Pulpy-Luke](https://forum.hacf.fr/u/Pulpy-Luke)\
**Post date:** [Juin 19, 2023, 7:07 UTC](https://forum.hacf.fr/t/conversion-anglais-francais-jour-de-la-semaine/1040/13 "2023-06-19T19:07:33Z")

</div>

Salut,  
Depuis il y a d'autres solutions

> **[GitHub - Petro31/easy-time-jinja: Easy Time calculations for Home Assistant...](https://github.com/Petro31/easy-time-jinja)**
>
> Easy Time calculations for Home Assistant templates

```auto
{% from 'easy_time.jinja' import month %}
{{ month('device.month',language='fr') }}

```

 ![image](https://forum.hacf.fr/uploads/default/original/3X/d/3/d3b5195bfe6022246a35907766d377ff9924f136.png)

---

<div class="post-metadata">

**Author:** ![oracle7](https://forum.hacf.fr/user_avatar/forum.hacf.fr/oracle7/32/19868_2.png) [@oracle7](https://forum.hacf.fr/u/oracle7)\
**Post date:** [Juin 20, 2023, 12:22 UTC](https://forum.hacf.fr/t/conversion-anglais-francais-jour-de-la-semaine/1040/14 "2023-06-20T12:22:08Z")

</div>

@Pulpy-Luke  
Bonjour, et Merci pour l’info en plus il y a plein d’autres fonctions dispos dans ce package telles que et entre autres trouver très facilement le dernier jour d’un mois donné : c’est pratique pour obtenir les dates de début et de fin pour l’heure d’été/hiver.  
Cordialement  
oracle7 😉

---

<div class="post-metadata">

**Author:** ![mbk\_med](https://forum.hacf.fr/letter_avatar_proxy/v4/letter/m/54ee81/32.png) [@mbk\_med](https://forum.hacf.fr/u/mbk_med)\
**Post date:** [Avril 26, 2024, 5:49 UTC](https://forum.hacf.fr/t/conversion-anglais-francais-jour-de-la-semaine/1040/15 "2024-04-26T17:49:33Z")

</div>

wow !!  
Merci beaucoup je ne connaissais pas cette lib, elle change la vie … 🙂
