---
sidebar_position: 3
title: Traduire le site grâce aux ressources
---

## Fichier de localisation

Afin de pouvoir utiliser la localisation, nous allons utiliser les fichiers de ressources.

Créer le répertoire `Resources` à la racine du site.

Dans ce répertoire doivent se trouver les fichiers de ressources correspondant à vos pages, le pattern de nommage est le répertoire de la page, un point, le nom de la page puis la langue.

Exemple :

```
MyBeautifulAdmin
│
└───Resources
│   │   Pages.List.fr-FR.resx
│   │   Pages.List.resx
│   │   ...
│   
└───Pages
│   │   List.razor
│   │   ...
```

## Création des fichiers de localisation

Dans le répertoire `Resources` cliquer droit `Add => New Item...`, dans la liste sélectionner `Resources File`.

Le nom du fichier sera `Pages.List.resx`, le fichier ne comportant pas de langue sera le fichier par défaut si la langue n'est pas trouvée.

Ajouter votre première traduction, le fichier de ressource fonctionne en clé / valeur :

| Name | Value
| ---- | ----
| Title | Items List


Créer le fichier pour la langue française `Pages.List.fr-FR.resx`

| Name | Value
| ---- | ----
| Title | Liste des éléments

Voici un exemple de rendu d'un des fichiers de ressources :

![Création des fichiers de localisation](/img/globalisation-localisation/ressource-file.png)

## Utilisation des fichiers de localisation

Ouvrer la classe `Pages/List.razor.cs` et ajouter le service permettant d'utiliser la localisation.

```csharp title="Pages/List.razor.cs"
public partial class List
{
	[Inject]
	public IStringLocalizer<List> Localizer { get; set; }

...
```

Ouvrir la page `Pages/List.razor` et utiliser le `Localizer` pour faire appel aux ressources :

```cshtml title="Pages/List.razor"
@page "/list"
@using MyBeautifulAdmin.Models

<h3>@Localizer["Title"]</h3>

...
```


## Notion : Fichiers de ressources

Vous pouvez inclure des ressources, telles que des chaînes, des images ou des données d’objet, dans les fichiers de ressources pour les rendre facilement accessibles à votre application. 
Le .NET Framework propose cinq façons de créer des fichiers de ressources :

* Créez un fichier texte qui contient des ressources de type chaîne. Vous pouvez utiliser le Générateur de fichiers de ressources (resgen.exe) pour convertir le fichier texte en fichier de ressources binaires (. Resources). Vous pouvez ensuite incorporer le fichier de ressources binaire dans un exécutable d’application ou une bibliothèque d’applications en utilisant un compilateur de langage, ou l’incorporer dans un assembly satellite avec Assembly Linker (Al.exe).
* Créez un fichier de ressources XML (.resx) qui contient des données de chaîne, d’image ou d’objet. Vous pouvez utiliser le Générateur de fichiers de ressources (resgen.exe) pour convertir le fichier. resx en fichier de ressources binaires (. Resources). Vous pouvez ensuite incorporer le fichier de ressources binaire dans un exécutable d’application ou une bibliothèque d’applications en utilisant un compilateur de langage, ou l’incorporer dans un assembly satellite avec Assembly Linker (Al.exe).
* Créez un fichier de ressources XML (.resx) par programmation en utilisant des types dans l’espace de noms System.Resources. Vous pouvez créer un fichier .resx, énumérer ses ressources et récupérer des ressources spécifiques par nom.
* Créez un fichier de ressources binaire (.resources) par programmation. Vous pouvez ensuite incorporer le fichier dans un exécutable d’application ou une bibliothèque d’applications en utilisant un compilateur de langage, ou l’incorporer dans un assembly satellite avec Assembly Linker (Al.exe).
* Utilisez Visual Studio pour créer un fichier de ressources et l’inclure dans votre projet. Visual Studio fournit un éditeur de ressources qui vous permet d’ajouter, de supprimer et de modifier des ressources. Au moment de la compilation, le fichier de ressources est automatiquement converti en un fichier .resources binaire et incorporé dans un assembly d’application ou un assembly satellite.

:::danger
N’utilisez pas de fichier de ressources pour stocker des mots de passe, des informations sensibles ou des données privées.
:::

### Ressources dans les fichiers .resx

Contrairement aux fichiers texte, qui peuvent stocker des ressources de type chaîne uniquement, les fichiers de ressources XML (.resx) peuvent stocker des chaînes, des données binaires telles que les images, les icônes et les clips audio, et des objets de programmation. 
Un fichier `.resx` contient un en-tête standard, qui décrit le format des entrées de ressources et spécifie les informations de contrôle de version pour le XML utilisé pour analyser les données. 
Les données de fichier de ressources suivent l’en-tête XML. 
Chaque élément de données se compose d’une paire nom/valeur contenue dans une balise data. 
Son attribut `name` définit le nom de ressource et la balise `value` imbriquée contient la valeur de ressource. 
Pour les données de type chaîne, la balise value contient la chaîne.

Par exemple, la balise `data` suivante définit une ressource de type chaîne nommée `prompt` dont la valeur est `« Entrez votre nom : »`.

```xml
<data name="prompt" xml:space="preserve">
  <value>Enter your name:</value>
</data>
```

L’exemple suivant affiche une partie d’un fichier .resx qui inclut une ressource Int32 et une image bitmap.

```xml
<data name="i1" type="System.Int32, mscorlib">
  <value>20</value>
</data>

<data name="flag" type="System.Drawing.Bitmap, System.Drawing,
    Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    mimetype="application/x-microsoft.net.object.bytearray.base64">
  <value>
    AAEAAAD/////AQAAAAAAAAAMAgAAADtTeX…
  </value>
</data>
```

:::caution
Comme les fichiers `.resx` doivent se composer de code XML bien formé dans un format prédéfini, nous déconseillons d’utiliser des fichiers `.resx` manuellement, en particulier quand les fichiers `.resx` contiennent des ressources autres que des chaînes. 
Au lieu de cela, Visual Studio fournit une interface transparente pour créer et manipuler les fichiers `.resx`.
:::

## Notion : Culture

### Noms et identificateurs de culture

La classe `CultureInfo` spécifie un nom unique pour chaque culture, en fonction de RFC 4646. 
Le nom est une combinaison d’un code de culture minuscule à deux lettres ISO 639 associé à une langue et à un code de sous-culture en majuscules ISO 3166 associé à un pays ou une région. 
En outre, pour les applications qui ciblent .NET Framework 4 ou version ultérieure et qui s’exécutent sous Windows 10 ou version ultérieure, les noms de culture correspondant aux balises de langage BCP-47 valides sont pris en charge.

Le format du nom de la culture basé sur RFC 4646 est `languagecode2`-`country/regioncode2`, où `languagecode2` est le code de langue à deux lettres et `country/regioncode2` est le code de sous-culture à deux lettres. 
Les exemples incluent `ja-JP` le japonais (Japon) et `en-US` l’anglais (États-Unis). 
Si un code de langue à deux lettres n'est pas disponible, un code à trois lettres dérivé de la norme ISO 639-2 est utilisé.

Certains noms de culture spécifient également un script ISO 15924. 
Par exemple, `Cyrl` spécifie le script cyrillique et `Latn` spécifie le script latin. 
Un nom de culture qui inclut un script utilise le modèle `languagecode2`\*\*`country/regioncode2`-`scripttag`-. 
Un exemple de ce type de culture est `uz-Cyrl-UZ` pour Uzbek (Cyrillique, Ouzbékistan). 
Sur Windows systèmes d’exploitation avant Windows Vista, un nom de culture qui inclut un script utilise le modèle `languagecode2`--`country/regioncode2`\*\*`scripttag`, par exemple, `uz-UZ-Cyrl` pour Uzbek (Cyrillique, Ouzbékistan).

Une culture neutre n’est spécifiée que par le code de langue en minuscules à deux lettres. Par exemple, `fr` spécifie la culture neutre pour Français et `de` spécifie la culture neutre pour l’allemand.

:::info
Il existe deux noms de culture qui contredisent cette règle. Les cultures chinoises (simplifiées), nommées `zh-Hans`, et chinoises (traditionnelles), nommées `zh-Hant`, sont des cultures neutres. 
Les noms de culture représentent la norme actuelle et doivent être utilisés, sauf si vous avez une raison d’utiliser les anciens noms `zh-CHS` et `zh-CHT`.
:::

### Culture actuelle et culture actuelle de l’interface utilisateur

Chaque thread d’une application .NET a une culture actuelle et une culture d’interface utilisateur actuelle. 
La culture actuelle détermine les conventions de mise en forme pour les dates, les heures, les nombres et les valeurs monétaires, l’ordre de tri du texte, les conventions de casse et les façons dont les chaînes sont comparées. 
La culture actuelle de l’interface utilisateur est utilisée pour récupérer des ressources spécifiques à la culture au moment de l’exécution.
