# sanity: Configuration
URL: https://generaltranslation.com/fr/docs/sanity/guides/configuration.mdx
---
title: Configuration
description: Configurez le plugin gt-sanity pour votre projet Sanity
---
## Vue d’ensemble
La fonction `gtPlugin` accepte un objet de configuration pour personnaliser le comportement de traduction, les paramètres régionaux et le traitement des documents.
```typescript title="sanity.config.ts"
import { gtPlugin } from 'gt-sanity';
export default defineConfig({
plugins: [
gtPlugin({
sourceLocale: 'en',
locales: ['es', 'zh', 'ja'], // Remplacez par vos paramètres régionaux cibles
languageField: 'language',
singletons: ['siteSettings', 'navigation'],
}),
],
});
```
## Configuration de base
### Paramètre régional source et paramètres régionaux cibles
Définissez votre langue source et vos paramètres régionaux cibles :
```typescript
gtPlugin({
sourceLocale: 'en', // Langue source du contenu
locales: ['es', 'zh', 'ja'], // Langues cibles pour la traduction
});
```
### Utiliser `defaultLocale` de `gt.config.json`
Si vous avez déjà un `gt.config.json` (par ex. si vous utilisez `gt-next` ou `gt-react`), vous pouvez l’inclure directement dans la configuration du plugin. Le champ `defaultLocale` est accepté comme alias de `sourceLocale` :
```typescript
import gtConfig from './gt.config.json';
gtPlugin({
...gtConfig, // { defaultLocale: 'en', locales: ['es', 'zh', 'ja'] }
});
```
Si `sourceLocale` et `defaultLocale` sont tous deux renseignés, `sourceLocale` est prioritaire.
### Champ de langue
Indiquez dans quel champ est stocké le paramètre régional du document. La valeur par défaut est `'language'` :
```typescript
gtPlugin({
sourceLocale: 'en',
locales: ['es', 'zh', 'ja'],
languageField: 'locale', // Par défaut, les documents utilisent le champ 'language'. Ici, nous utilisons 'locale' à la place.
});
```
## Filtrage des documents
### Traduire des types de documents précis
Limitez la traduction à certains types de documents :
```typescript
gtPlugin({
sourceLocale: 'en',
locales: ['es', 'zh', 'ja'],
translateDocuments: [{ type: 'page' }, { type: 'post' }],
});
```
### Traduire des documents spécifiques
Ciblez des identifiants de document spécifiques :
```typescript
gtPlugin({
sourceLocale: 'en',
locales: ['es', 'zh', 'ja'],
translateDocuments: [
{ documentId: 'homepage' },
{ documentId: 'about-page' },
],
});
```
## Documents uniques
Les documents uniques sont des documents Sanity qui n’existent qu’en un seul exemplaire, avec des variantes traduites. Configurez la manière dont les versions traduites sont nommées :
```typescript
gtPlugin({
sourceLocale: 'en',
locales: ['es', 'zh', 'ja'],
singletons: ['siteSettings', 'navigation', 'footer'], // Liste des IDs de documents singleton
singletonMapping: (docId, locale) => `${docId}-${locale}`, // Fonction optionnelle pour personnaliser les ids des documents singleton traduits
});
```
Par défaut, les traductions des documents uniques auront des identifiants générés aléatoirement, sauf si `singletonMapping` est défini.
## Ignorer certains champs
Champs que vous ne souhaitez ni traduire ni envoyer à l’API GT, mais qui doivent tout de même être copiés du document source vers la traduction. Les champs ignorés sont retirés avant la sérialisation (le contenu n’est donc jamais envoyé à l’API), puis restaurés à partir du document source une fois le document traduit créé.
Utilisez `ignoreFields` pour des champs comme les catégories, les tags ou les métadonnées internes, qui doivent avoir la même valeur dans les documents source et traduits, mais n’ont pas besoin d’être traduits :
```typescript
gtPlugin({
sourceLocale: 'en',
locales: ['es', 'zh', 'ja'],
ignoreFields: [
{ fields: [{ property: '$.category' }] }, // même catégorie pour toutes les langues
{ fields: [{ property: '$..linkType' }] }, // métadonnées de lien interne
{ fields: [{ property: '$..frequencies.default' }] },
],
});
```
`property` est une expression [JSONPath](https://goessner.net/articles/JsonPath/) qui cible un ou plusieurs champs dans les documents.
`type` est un paramètre facultatif qui permet d’affiner le filtrage des champs à ignorer en le limitant à certains types.
## Déduplication des champs
Les champs que vous ne souhaitez ni traduire ni envoyer à l’API GT, mais qui doivent tout de même être copiés depuis le document source et rendus uniques lors de la création initiale d’un document traduit. Les champs à dédupliquer sont supprimés avant la sérialisation, puis restaurés à partir du document source avec le paramètre régional cible ajouté.
Utilisez `dedupeFields` pour les slugs Sanity ou d’autres identifiants de type chaîne de caractères qui doivent rester basés sur la valeur source, tout en étant uniques pour chaque langue :
```typescript
gtPlugin({
sourceLocale: 'en',
locales: ['es', 'zh', 'ja'],
dedupeFields: [
{ fields: [{ property: '$.slug', type: 'slug' }] }, // "about" devient "about-es"
],
});
```
Pour les champs slug de Sanity, le plugin met à jour la valeur `current` de l’objet slug. Par exemple, `{ _type: 'slug', current: 'about' }` devient `{ _type: 'slug', current: 'about-es' }` lorsque le document en espagnol est créé. Si un éditeur modifie ensuite le slug traduit, les futures importations de traduction conservent cette valeur modifiée.
## Exclure des champs
Champs qui ne doivent en aucun cas être copiés automatiquement dans les documents traduits. Contrairement à `ignoreFields` (qui conserve la valeur source dans la traduction), `skipFields` supprime complètement les champs correspondants du document traduit.
Utilisez `skipFields` pour des champs comme des URL canoniques SEO, des métadonnées propres à la source ou des slugs que les éditeurs doivent définir manuellement pour chaque langue :
```typescript
gtPlugin({
sourceLocale: 'en',
locales: ['es', 'zh', 'ja'],
skipFields: [
{ fields: [{ property: '$.slug', type: 'slug' }] }, // les éditeurs définissent les slugs manuellement par langue
{ fields: [{ property: '$.canonicalUrl' }] }, // pertinent uniquement pour la source
{
documentId: 'homepage',
fields: [{ property: '$.debugInfo' }], // données de débogage propres à la source
},
],
});
```
## Options de sérialisation
Étendez le comportement de sérialisation par défaut :
```typescript
import { attachGTData, gtPlugin } from 'gt-sanity';
gtPlugin({
sourceLocale: 'en',
locales: ['es', 'zh', 'ja'],
additionalSerializers: {
// Sérialiseurs supplémentaires pour les marques (annotations personnalisées)
marks: {
link: ({ value, children }) =>
attachGTData(`${children}`, value, 'markDef'),
inlineMath: ({ value, children }) =>
attachGTData(`${children}`, value, 'markDef'),
},
},
});
```
Consultez le [guide de sérialisation](/docs/sanity/guides/serialization) pour en savoir plus.
## Exemple complet
```typescript title="sanity.config.ts"
import { defineConfig } from 'sanity';
import { gtPlugin } from 'gt-sanity';
export default defineConfig({
name: 'default',
title: 'My Project',
projectId: 'your-project-id',
dataset: 'production',
plugins: [
gtPlugin({
sourceLocale: 'en',
locales: ['es', 'fr', 'de', 'ja', 'zh'],
languageField: 'language',
singletons: ['siteSettings', 'navigation'],
translateDocuments: [{ type: 'article' }, { type: 'page' }],
ignoreFields: [
{
fields: [{ property: '$.publishedAt' }],
},
],
dedupeFields: [
{
fields: [{ property: '$.slug', type: 'slug' }],
},
],
skipFields: [
{
fields: [{ property: '$.internalNotes' }],
},
],
}),
],
schema: {
types: schemaTypes,
},
});
```
## Étapes suivantes
* [Guide de sérialisation](/docs/sanity/guides/serialization) - Règles de sérialisation personnalisées
* [Référence de l’API](/docs/sanity/api/plugin-config) - Options de configuration complètes