diff --git a/CHANGELOG.md b/CHANGELOG.md
index f2e3f83f5..415a7443b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,13 @@ writing, this is a rolling-release project without any meaningful versioning
whatsoever. Tags/releases may be created for the sole purpose of documenting
major updates to the project.
+## 2021-10-26
+
+### added
+
+- Add French localization
+ ([#202](https://github.com/giscus/giscus/pull/202)).
+
## 2021-10-22
### fixed
diff --git a/README.fr.md b/README.fr.md
new file mode 100644
index 000000000..7a6187f43
--- /dev/null
+++ b/README.fr.md
@@ -0,0 +1,86 @@
+# [giscus][giscus]
+
+Un système de commentaires reposant sur le système de [Discussions GitHub][discussions]. Permettez aux visiteurs de votre site web de laisser des commentaires et des réactions via GitHub ! Fortement inspiré par [utterances][utterances].
+
+- [Open source][repo]. 🌏
+- Pas de suivi, pas de publicité, gratuit pour toujours. 📡 🚫
+- Pas besoin de base de données. Toutes les données sont stockées dans les discussions GitHub. :octocat:
+- [Thèmes personnalisables][creating-custom-themes]! 🌗
+- [Multilingue][multiple-languages]. 🌐
+- [Largement configurable][advanced-usage]. 🔧
+- Récupère automatiquement les nouveaux commentaires et modifications depuis GitHub. 🔃
+- [Peut être auto-hébergé][self-hosting]! 🤳
+
+> **Note :**\
+> giscus est toujours en développement actif. De même, GitHub développe toujours activement son système de Discussions et l'API correspondante. Dès lors, certaines fonctionalités de giscus peuvent se casser ou changer à l'avenir.
+
+## comment cela fonctionne ?
+
+Lorsque giscus se charge, l'[API de recherche des discussions de GitHub][search-api] est utilisée pour trouver la discussion associée à la page en fonction d'un mappage choisi (URL, `pathname`, `
`, etc.). Si une discussion correspondante ne peut être trouvée, le robot giscus créera automatiquement une nouvelle discussion la première fois que quelqu'un laissera un commentaire ou une réaction.
+
+Pour commenter, les visiteurs doivent autoriser l'[application giscus][giscus-app] à [publier en leur nom][authorization] en utilisant le flux OAuth de GitHub. Les visiteurs peuvent également commenter directement la discussion sur GitHub. Vous pouvez modérer les commentaires sur GitHub.
+
+[giscus]: https://giscus.app
+[discussions]: https://docs.github.com/en/discussions
+[utterances]: https://github.com/utterance/utterances
+[repo]: https://github.com/giscus/giscus
+[advanced-usage]: https://github.com/giscus/giscus/blob/main/ADVANCED-USAGE.md
+[creating-custom-themes]: https://github.com/giscus/giscus/blob/main/ADVANCED-USAGE.md#data-theme
+[multiple-languages]: https://github.com/giscus/giscus/blob/main/CONTRIBUTING.md#adding-localizations
+[self-hosting]: https://github.com/giscus/giscus/blob/main/SELF-HOSTING.md
+[search-api]: https://docs.github.com/en/graphql/guides/using-the-graphql-api-for-discussions#search
+[giscus-app]: https://github.com/apps/giscus
+[authorization]: https://docs.github.com/en/developers/apps/identifying-and-authorizing-users-for-github-apps
+
+
+
+Si vous utilisez giscus, pensez à [starifier 🌟 giscus sur GitHub][repo] et à ajouter le sujet [`giscus`][giscus-topic] à [votre dépôt][topic-howto] ! 🎉
+
+## utilisation avancée
+
+Vous pouvez ajouter des configurations supplémentaires (par exemple, autoriser des origines spécifiques) en suivant le [guide d'utilisation avancée][advanced-usage].
+
+Pour utiliser giscus avec React, Vue ou Svelte, consultez la [bibliothèque de composants giscus][giscus-component].
+
+## migration
+
+
+Si vous avez déjà utilisé d'autres systèmes qui utilisent les *issues* de GitHub (par exemple [utterances][utterances], [gitalk][gitalk]), vous pouvez [convertir les *issues* existantes en discussions][convert]. Après la conversion, assurez-vous simplement que le mappage entre les titres des discussions et les pages est correct, puis giscus utilisera automatiquement les discussions.
+
+## sites utilisant giscus
+
+- [laymonage.com][laymonage-website]
+- [os.phil-opp.com][os-phil-opp]
+- [Stats and R][statsandr]
+- [Tech Debt Burndown Podcast][techdebtburndown]
+- [**and many more!**][giscus-topic]
+
+## contribuer
+
+Voir le fichier [CONTRIBUTING.md][contributing]
+
+[giscus-component]: https://github.com/giscus/giscus-component
+[repo]: https://github.com/giscus/giscus
+[giscus-topic]: https://github.com/topics/giscus
+[topic-howto]: https://docs.github.com/en/github/administering-a-repository/classifying-your-repository-with-topics
+[advanced-usage]: https://github.com/giscus/giscus/blob/main/ADVANCED-USAGE.md
+[utterances]: https://github.com/utterance/utterances
+[gitalk]: https://github.com/gitalk/gitalk
+[convert]: https://docs.github.com/en/discussions/managing-discussions-for-your-community/moderating-discussions#converting-an-issue-to-a-discussion
+[laymonage-website]: https://laymonage.com/posts/giscus
+[os-phil-opp]: https://os.phil-opp.com
+[statsandr]: https://statsandr.com
+[techdebtburndown]: https://techdebtburndown.com
+[contributing]: https://github.com/giscus/giscus/blob/main/CONTRIBUTING.md
+
+
+
+---
+
+Ce README est disponible en :
+
+[Anglais](README.md) • [Français](README.fr.md) • [Indonésien](README.id.md) • [Polonais](README.pl.md) • [Romain](README.ro.md)
+
+[![Propulsé par Vercel](public/powered-by-vercel.svg)][vercel]
+
+[vercel]: https://vercel.com/?utm_source=giscus&utm_campaign=oss
diff --git a/README.id.md b/README.id.md
index 55daba7c7..2da3f2e48 100644
--- a/README.id.md
+++ b/README.id.md
@@ -78,7 +78,7 @@ Lihat [CONTRIBUTING.md][contributing]
README ini tersedia dalam bahasa:
-[Inggris](README.md) • [Indonesia](README.id.md) • [Polandia](README.pl.md) • [Rumania](README.ro.md)
+[Inggris](README.md) • [Perancis](README.fr.md) • [Indonesia](README.id.md) • [Polandia](README.pl.md) • [Rumania](README.ro.md)
[![Powered by Vercel](public/powered-by-vercel.svg)][vercel]
diff --git a/README.md b/README.md
index 428b31465..80c4fa72c 100644
--- a/README.md
+++ b/README.md
@@ -78,7 +78,7 @@ See [CONTRIBUTING.md][contributing]
This README is available in:
-[English](README.md) • [Indonesian](README.id.md) • [Polish](README.pl.md) • [Romanian](README.ro.md)
+[English](README.md) • [French](README.fr.md) • [Indonesian](README.id.md) • [Polish](README.pl.md) • [Romanian](README.ro.md)
[![Powered by Vercel](public/powered-by-vercel.svg)][vercel]
diff --git a/README.pl.md b/README.pl.md
index 1c5a65dbe..93cd28261 100644
--- a/README.pl.md
+++ b/README.pl.md
@@ -78,7 +78,7 @@ See [CONTRIBUTING.md][contributing]
This README is available in:
-[English](README.md) • [Indonesian](README.id.md) • [Polish](README.pl.md) • [Romanian](README.ro.md)
+[English](README.md) • [French](README.fr.md) • [Indonesian](README.id.md) • [Polish](README.pl.md) • [Romanian](README.ro.md)
[![Powered by Vercel](public/powered-by-vercel.svg)][vercel]
diff --git a/README.ro.md b/README.ro.md
index fa00bea59..9bbb642f0 100644
--- a/README.ro.md
+++ b/README.ro.md
@@ -78,7 +78,7 @@ See [CONTRIBUTING.md][contributing]
This README is available in:
-[English](README.md) • [Indonesian](README.id.md) • [Polish](README.pl.md) • [Romanian](README.ro.md)
+[English](README.md) • [French](README.fr.md) • [Indonesian](README.id.md) • [Polish](README.pl.md) • [Romanian](README.ro.md)
[![Powered by Vercel](public/powered-by-vercel.svg)][vercel]
diff --git a/i18n.json b/i18n.json
index db2a29a1a..2282493ef 100644
--- a/i18n.json
+++ b/i18n.json
@@ -1,5 +1,5 @@
{
- "locales": ["en", "id", "pl", "ro"],
+ "locales": ["en", "fr", "id", "pl", "ro"],
"defaultLocale": "en",
"pages": {
"*": ["common"],
diff --git a/lib/i18n.tsx b/lib/i18n.tsx
index 7f667e020..33c49cdbc 100644
--- a/lib/i18n.tsx
+++ b/lib/i18n.tsx
@@ -41,7 +41,7 @@ export interface GiscusTranslate {
(i18nKey: I18nKeysNoCount, query?: TranslationQuery): string;
}
-export const availableLanguages = ['en', 'id', 'pl', 'ro'] as const;
+export const availableLanguages = ['en', 'fr', 'id', 'pl', 'ro'] as const;
export type AvailableLanguage = typeof availableLanguages[number];
@@ -100,6 +100,7 @@ const dateFormat: Intl.DateTimeFormatOptions = {
const dateFormatters: Record = {
en: new Intl.DateTimeFormat('en', dateFormat),
+ fr: new Intl.DateTimeFormat('fr', dateFormat),
id: new Intl.DateTimeFormat('id', dateFormat),
pl: new Intl.DateTimeFormat('pl', dateFormat),
ro: new Intl.DateTimeFormat('ro', dateFormat),
@@ -112,6 +113,7 @@ const shortDateFormat: Intl.DateTimeFormatOptions = {
const shortDateFormatters: Record = {
en: new Intl.DateTimeFormat('en', shortDateFormat),
+ fr: new Intl.DateTimeFormat('fr', shortDateFormat),
id: new Intl.DateTimeFormat('id', shortDateFormat),
pl: new Intl.DateTimeFormat('pl', shortDateFormat),
ro: new Intl.DateTimeFormat('ro', shortDateFormat),
@@ -125,6 +127,7 @@ const shortDateYearFormat: Intl.DateTimeFormatOptions = {
const shortDateYearFormatters: Record = {
en: new Intl.DateTimeFormat('en', shortDateYearFormat),
+ fr: new Intl.DateTimeFormat('fr', shortDateYearFormat),
id: new Intl.DateTimeFormat('id', shortDateYearFormat),
pl: new Intl.DateTimeFormat('pl', shortDateYearFormat),
ro: new Intl.DateTimeFormat('ro', shortDateYearFormat),
@@ -138,6 +141,7 @@ const relativeTimeFormat: Intl.RelativeTimeFormatOptions = {
const relativeTimeFormatters: Record = {
en: new Intl.RelativeTimeFormat('en', relativeTimeFormat),
+ fr: new Intl.RelativeTimeFormat('fr', relativeTimeFormat),
id: new Intl.RelativeTimeFormat('id', relativeTimeFormat),
pl: new Intl.RelativeTimeFormat('pl', relativeTimeFormat),
ro: new Intl.RelativeTimeFormat('ro', relativeTimeFormat),
diff --git a/locales/en/config.json b/locales/en/config.json
index 730a546f2..7b46485d7 100644
--- a/locales/en/config.json
+++ b/locales/en/config.json
@@ -5,6 +5,7 @@
"chooseLanguageGiscusDisplayed": "Choose the language giscus will be displayed in. Can't find your language? Contribute a localization.",
"lang=en": "English",
+ "lang=fr": "French",
"lang=id": "Indonesian",
"lang=pl": "Polish",
"lang=ro": "Romanian",
diff --git a/locales/fr/common.json b/locales/fr/common.json
new file mode 100644
index 000000000..98eb72c80
--- /dev/null
+++ b/locales/fr/common.json
@@ -0,0 +1,92 @@
+{
+ "reactions": {
+ "0": "{{count}} réaction",
+ "one": "{{count}} réaction",
+ "other": "{{count}} réactions"
+ },
+ "comment": "Commentaire",
+ "comments": {
+ "0": "{{count}} commentaire",
+ "one": "{{count}} commentaire",
+ "other": "{{count}} commentaires"
+ },
+ "reply": "Répondre",
+ "replies": {
+ "0": "{{count}} réponse",
+ "one": "{{count}} réponse",
+ "other": "{{count}}{{plus}} réponses"
+ },
+ "upvotes": {
+ "0": "{{count}} vote",
+ "one": "{{count}} vote",
+ "other": "{{count}} votes"
+ },
+ "hiddenItems": {
+ "0": "{{count}} objet masqué",
+ "one": "{{count}} objet masqué",
+ "other": "{{count}} objets masqués"
+ },
+ "genericError": "Une erreur s'est produite {{message}}",
+ "loadMore": "Charger plus",
+ "loading": "Chargement en cours",
+ "loadingComments": "Chargement des commentaires…",
+ "loadingPreview": "Chargement de l'aperçu…",
+ "poweredBy": "– propulsé par giscus",
+ "showPreviousReplies": {
+ "0": "Afficher {{count}} réponse précédénte",
+ "one": "Afficher {{count}} réponse précédénte",
+ "other": "Afficher {{count}} réponses précédéntes"
+ },
+ "seePreviousRepliesOnGitHub": {
+ "0": "Voir {{count}} réponse précédente sur GitHub",
+ "one": "Voir {{count}} réponse précédente sur GitHub",
+ "other": "Voir {{count}} réponses précédentes sur on GitHub"
+ },
+ "edited": "édité",
+ "thisCommentWasDeleted": "Ce commentaire a été supprimé.",
+ "thisCommentWasMinimized": "Ce commentaire a été réduit.",
+ "thisCommentWasHidden": "Ce commentaire a été masqué.",
+ "write": "Écrire",
+ "preview": "Aperçu",
+ "lastEditedAt": "Dernier changement le {{date}}",
+ "writeAComment": "Écrire un commentaire",
+ "signInToComment": "S'identifier pour pouvoir commenter",
+ "stylingWithMarkdownIsSupported": "Mise en forme avec Markdown possible",
+ "cancel": "Annuler",
+ "signInWithGitHub": "S'identifier avec GitHub",
+ "writeAReply": "Écrire une réponse",
+
+ "upvote": "Voter pour",
+ "addReactions": "Ajouter des réactions",
+ "pleaseWait": "Veuillez patienter…",
+ "pickYourReaction": "Choisissez votre réaction",
+ "addTheReaction": "Ajouter la réaction {{reaction}}",
+ "signInToAddYourReaction": "S'identifier pour réagir.",
+ "youMustBeSignedInToAddReactions": "Vous devez être identifié·e pour réagir.",
+ "peopleReactedWith": {
+ "0": "{{count}} personne a réagi avec {{reaction}} {{emoji}}",
+ "one": "{{count}} personne a réagi avec {{reaction}} {{emoji}}",
+ "other": "{{count}} personnes ont réagi avec {{reaction}} {{emoji}}"
+ },
+ "emoji": "emoji",
+ "nothingToPreview": "Rien à prévisualiser",
+
+ "THUMBS_UP": "+1",
+ "THUMBS_DOWN": "-1",
+ "LAUGH": "Rire",
+ "HOORAY": "Hourra",
+ "CONFUSED": "Confus·e",
+ "HEART": "Amour",
+ "ROCKET": "Rocket",
+ "EYES": "Yeux",
+
+ "COLLABORATOR": "Collaborateur·rice",
+ "CONTRIBUTOR": "Contributeur·rice",
+ "FIRST_TIMER": "Première contribution",
+ "FIRST_TIME_CONTRIBUTOR": "Contributeur·rice pour la première fois",
+ "MANNEQUIN": "Mannequin",
+ "MEMBER": "Membre",
+ "NONE": "Aucun",
+ "OWNER": "Propriétaire",
+ "APP": "App"
+}
diff --git a/locales/fr/config.json b/locales/fr/config.json
new file mode 100644
index 000000000..b902d41af
--- /dev/null
+++ b/locales/fr/config.json
@@ -0,0 +1,88 @@
+{
+ "configuration": "configuration",
+
+ "language": "Langue",
+ "chooseLanguageGiscusDisplayed": "Choisir la langue d'affichage de giscus. Vous ne trouvez pas votre langue ? Contribuez à la traduction.",
+
+ "lang=en": "Anglais",
+ "lang=fr": "Français",
+ "lang=id": "Indonésien",
+ "lang=pl": "Polonais",
+ "lang=ro": "Romain",
+
+ "repository": "Dépôt",
+ "chooseTheRepository": "Choisir le dépôt auquel giscus se connectera. Bien vérifier que :",
+ "theRepositoryIsPublic": "Le dépôt est public, sinon les visiteurs ne pourront pas voir les discussions.",
+ "theGiscusAppIsInstalled": "L'application giscus est installée, sinon les visiteurs ne pourront pas commenter ni réagir.",
+ "theDiscussionsFeatureIsTurnedOn": "Les Discussions sont activiées en autorisant cette fonctionalité pour votre dépôt.",
+ "repositoryLabel": "dépôt :",
+ "myusername/myrepo": "myusername/myrepo",
+ "cannotUseGiscusOnThisRepository": "giscus ne peut être utilisé pour ce dépôt. Merci de vérifier que les critères ci-dessus sont bien remplis.",
+ "successRepositoryMeetsCriteria": "Bravo ! Ce dépôt respect tous les critères pré-requis.",
+ "aPublicGitHubRepository": "Un dépôt GitHub public. Ce dépot sera celui utilisé pour lier les discussions.",
+
+ "pageDiscussionsMapping": "Mappage Pages ↔️ Discussions",
+ "chooseTheMapping": "Choisir le système de mappage entre les pages web et les discussions correspondantes.",
+ "titleContainsPathname": "Le titre de la discussion contient le chemin de la page (pathname
)",
+ "titleContainsPathnameDesc": "giscus cherchera une discussion dont le titre contient le chemin (pathname
URL) de la page.",
+ "titleContainsURL": "Le titre de la discussion contient l'URL
de la page",
+ "titleContainsURLDesc": "giscus cherchera une discussion dont le titre contient l'URL de la page.",
+ "titleContainsTitle": "Le titre de la discussion contient le
de la page",
+ "titleContainsTitleDesc": "giscus cherchera une discussion dont le titre contient le tage HTML
de la page.",
+ "titleContainsOgTitle": "Le titre de la page contient le og:title
de la page",
+ "titleContainsOgTitleDesc": "giscus cherchera une discussion dont le titre contiendra le contenu du tage HTML
de la page.",
+ "titleContainsSpecificTerm": "Le titre de la dicussion contient un terme spécifique",
+ "titleContainsSpecificTermDesc": "giscus cherchera une discussion dont le titre contient un terme spécifique.",
+ "enterTermHere": "Indiquer ici le terme spécfique à rechercher",
+ "specificDiscussionNumber": "Numéro de discussion spécifique",
+ "specificDiscussionNumberDesc": "giscus chargera une discussion spécifique identifiée par son numéro. Cette option ne permets pas la création automatique d'une nouvelle discussion.",
+ "enterDiscussionNumberHere": "Saisir ici le numéro de la discussion",
+
+ "discussionCategory": "Catégorie de la Discussion",
+ "chooseTheDiscussionCategory": "Choisir la catégorie de discussion assciée aux nouvelles discussions crées par giscus.",
+ "categoryIsNotSupported": "Cette fonctionnalité n'est pas disponible si vous avez opté pour le mappage selon un numéro de discussion spécifique.",
+ "recommendAnnouncementsCategory": "Il est recommandé de choisir une catégorie de type Announcements afin que les nouvelles discussions ne puissent être crées que par les administrateurs et giscus.",
+ "discussionCategoryLabel": "Catégorie de discussion",
+ "categoryNotSupportedOption": "Non prise en charge",
+ "pickACategoryOption": "Choisir une catégorie",
+ "noCategoriesFoundOption": "Aucune catégorie trouvée",
+ "onlySearchInThisCategory": "Rechercher seulement parmi les discussions de cette catégorie",
+ "whenSearchingOnlyThisCategory": "Lors de la recherche d'une discussion correspondante (mappage), giscuss ne cherchera que parmi les discussions de cette catégorie.",
+
+ "features": "Fonctionnalités",
+ "chooseSpecificFeatures": "Choisir des fonctionnalités spécifiques à activer.",
+ "enableReactionsMainPost": "Autoriser les réactions pour le message principal",
+ "reactionsMainPostShownBeforeComments": "Les réactions au message principal de la discussion seront affichées avant les commentaires.",
+ "emitDiscussionMetadata": "Diffuser les métadonnées de la discussion",
+ "discussionMetadataSentPeriodically": "Les métadonnées de la discussion seront envoyées périodiquement à la fenêtre parente (la page d'incorporation). Pour la démonstration, activez cette option et ouvrez la console de votre navigateur sur cette page. Consultez la documentation pour plus de détails.",
+
+ "theme": "Thème",
+ "chooseAThemeThatMatches": "Choisir un thème qui correspond au site. Vous ne trouvez pas de thème adpaté ? Proposer un nouveau thème.",
+ "URLToThemeCSS": "URL vers le fichier CSS du thème :",
+ "warningExternalCSSUnsafe": "Attention : charger un ficher CSS externe peut être dangereux. Vérifiez que vous connaissez l'auteur et le fournisseur du fichier CSS.",
+
+ "theme=light": "GitHub Light",
+ "theme=dark": "GitHub Dark",
+ "theme=dark_dimmed": "GitHub Dark Dimmed",
+ "theme=dark_high_contrast": "GitHub Dark High Contrast",
+ "theme=dark_protanopia": "GitHub Dark Colorblind",
+ "theme=light_protanopia": "GitHub Light Colorblind",
+ "theme=transparent_dark": "Transparent Dark",
+ "theme=preferred_color_scheme": "Preferred color scheme",
+ "theme=custom": "Personnalisé (expérimental)",
+
+ "enableGiscus": "Activer giscus",
+ "addTheFollowingScriptTag": "Ajouter le code suivant (tag HTML
) dans le gabarit de vos pages web à l'endroit où vous souhaitez afficher les commentaires. Si un élément HTML possède la classe CSS giscus
existe, les commentaires seront à cet endroit.",
+ "copy": "Copier",
+
+ "[enterRepoHere]": "[ENTER REPO HERE]",
+ "[enterRepoIDHere]": "[ENTER REPO ID HERE]",
+ "[enterCategoryHere]": "[ENTER CATEGORY NAME HERE]",
+ "[enterCategoryIDHere]": "[ENTER CATEGORY ID HERE]",
+ "[enterTermHere]": "[ENTER TERM HERE]",
+ "[enterNumberHere]": "[ENTER NUMBER HERE]",
+ "[enterThemeCSSURLHere]": "[ENTER THEME CSS URL HERE]",
+
+ "youCanCustomizeTheLayout": "Vous pouvez personnaliser la disposition du conteneur à l'aide des sélecteurs .giscus
et .giscus-frame
de la page d'incorporation.",
+ "tryItOut": "Essayez !"
+}
diff --git a/locales/id/config.json b/locales/id/config.json
index fc2ee55d2..1960c5638 100644
--- a/locales/id/config.json
+++ b/locales/id/config.json
@@ -5,6 +5,7 @@
"chooseLanguageGiscusDisplayed": "Pilih bahasa yang akan ditampilkan giscus. Tidak dapat menemukan bahasa Anda? Buat kontribusi terjemahan.",
"lang=en": "Inggris",
+ "lang=fr": "Perancis",
"lang=id": "Indonesia",
"lang=pl": "Polandia",
"lang=ro": "Rumania",
diff --git a/locales/pl/config.json b/locales/pl/config.json
index 730a546f2..7b46485d7 100644
--- a/locales/pl/config.json
+++ b/locales/pl/config.json
@@ -5,6 +5,7 @@
"chooseLanguageGiscusDisplayed": "Choose the language giscus will be displayed in. Can't find your language? Contribute a localization.",
"lang=en": "English",
+ "lang=fr": "French",
"lang=id": "Indonesian",
"lang=pl": "Polish",
"lang=ro": "Romanian",
diff --git a/locales/ro/config.json b/locales/ro/config.json
index 730a546f2..7b46485d7 100644
--- a/locales/ro/config.json
+++ b/locales/ro/config.json
@@ -5,6 +5,7 @@
"chooseLanguageGiscusDisplayed": "Choose the language giscus will be displayed in. Can't find your language? Contribute a localization.",
"lang=en": "English",
+ "lang=fr": "French",
"lang=id": "Indonesian",
"lang=pl": "Polish",
"lang=ro": "Romanian",