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 + +<!-- configuration --> + +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 + +<!-- end --> + +--- + +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<I18Namespace = I18n> { (i18nKey: I18nKeysNoCount<I18Namespace>, 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<AvailableLanguage, Intl.DateTimeFormat> = { 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<AvailableLanguage, Intl.DateTimeFormat> = { 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<AvailableLanguage, Intl.DateTimeFormat> = { 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<AvailableLanguage, Intl.RelativeTimeFormat> = { 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? <a>Contribute</a> 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 <a>giscus</a>", + "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": "<a>S'identifier</a> 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 ? <a>Contribuez</a> à 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 <strong>dépôt est <a>public</a></strong>, sinon les visiteurs ne pourront pas voir les discussions.", + "theGiscusAppIsInstalled": "L'<strong>application <a>giscus</a> est installée</strong>, sinon les visiteurs ne pourront pas commenter ni réagir.", + "theDiscussionsFeatureIsTurnedOn": "Les <strong>Discussions sont activiées</strong> en <a>autorisant cette fonctionalité pour votre dépôt</a>.", + "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 <strong>public</strong>. 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 (<code>pathname</code>)", + "titleContainsPathnameDesc": "giscus cherchera une discussion dont le titre contient le chemin (<code>pathname</code> URL) de la page.", + "titleContainsURL": "Le titre de la discussion contient l'<code>URL</code> 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 <code><title></code> de la page", + "titleContainsTitleDesc": "giscus cherchera une discussion dont le titre contient le tage HTML <code><title></code> de la page.", + "titleContainsOgTitle": "Le titre de la page contient le <code>og:title</code> de la page", + "titleContainsOgTitleDesc": "giscus cherchera une discussion dont le titre contiendra le contenu du tage HTML <aOgTitle><code><meta property=\"og:title\"></code></aOgTitle> 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 <strong>ne permets pas</strong> 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 <strong>numéro de discussion spécifique</strong>.", + "recommendAnnouncementsCategory": "Il est recommandé de choisir une catégorie de type <strong>Announcements</strong> 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 <a>documentation</a> 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é ? <a>Proposer</a> 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 <code><script></code>) 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 <code>giscus</code> 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 <code>.giscus</code> et <code>.giscus-frame</code> 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? <a>Buat kontribusi</a> 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? <a>Contribute</a> 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? <a>Contribute</a> a localization.", "lang=en": "English", + "lang=fr": "French", "lang=id": "Indonesian", "lang=pl": "Polish", "lang=ro": "Romanian",