feat: public API, SEO and existing surfaces

This commit is contained in:
Florian Sylvain committed 2026-11-03 03:58:10 +01:00
1 parent 45fbbc33b1
commit c390fcfe8d
103 files changed
+4476 -231

No files matched your search

+2 -2
View File
@@ -1,10 +1,12 @@
import { articleListMessages } from './articleListMessages'
import { editorMessages } from './editorMessages'
import { localizationMessages } from './localizationMessages'
import { surfaceMessages } from './surfaceMessages'
import { translationFlowMessages } from './translationFlowMessages'
export const messages = {
...localizationMessages,
...surfaceMessages,
...articleListMessages,
...editorMessages,
...translationFlowMessages,
@@ -1614,8 +1616,6 @@ export const messages = {
'newest, oldest, name, largest or total_size. Default newest.':
'newest, oldest, name, largest ou total_size. Par défaut newest.',
'with or without. Default both.': 'with ou without. Par défaut les deux.',
"Read, write and publish articles. Titles can't be changed after creation.":
'Lire, écrire et publier des articles. Les titres ne peuvent pas être modifiés après la création.',
"3 to 200 characters. Can't be changed later.":
'De 3 à 200 caractères. Ne peut pas être modifié ensuite.',
'Up to 10 000 characters.': '10 000 caractères maximum.',
+1
View File
@@ -43,6 +43,7 @@ const SAME_IN_FRENCH = new Set([
'{0} suggestions',
'Suggestions',
'Mobile',
'Description',
])
const LITERAL = /\bt\(\s*(?:'((?:\\.|[^'\\])*)'|"((?:\\.|[^"\\])*)")/g
+104
View File
@@ -0,0 +1,104 @@
export const surfaceMessages = {
'Created {0} version of "{1}"': 'Version en {0} créée : « {1} »',
'Failed to create {0} version of "{1}"': 'Échec de la création de la version en {0} : « {1} »',
'Edited {0} version of "{1}"': 'Version en {0} modifiée : « {1} »',
'Failed to edit {0} version of "{1}"':
'Échec de la modification de la version en {0} : « {1} »',
'Published {0} version of "{1}"': 'Version en {0} publiée : « {1} »',
'Failed to publish {0} version of "{1}"':
'Échec de la publication de la version en {0} : « {1} »',
'Unpublished {0} version of "{1}"': 'Version en {0} dépubliée : « {1} »',
'Failed to unpublish {0} version of "{1}"':
'Échec de la dépublication de la version en {0} : « {1} »',
'Deleted {0} version of "{1}"': 'Version en {0} supprimée : « {1} »',
'Failed to delete {0} version of "{1}"':
'Échec de la suppression de la version en {0} : « {1} »',
'API URL copied': 'URL de l’API copiée',
'Add a public URL pattern for {0} to show page and canonical addresses. API links by article ID still work.':
'Ajoutez un modèle d’URL publique pour {0} afin d’afficher les adresses de page et canoniques. Les liens d’API par identifiant d’article fonctionnent toujours.',
'Address (slug)': 'Adresse (slug)',
'Address changed': 'Adresse modifiée',
'Alternate languages': 'Langues alternatives',
'Applies only to the {0} version. Page language: {1}.':
'S’applique uniquement à la version en {0}. Langue de la page : {1}.',
'Built from the Public URL pattern {0}. Each language points to itself unless you set a canonical override.':
'Construite à partir du modèle d’URL publique {0}. Chaque langue pointe vers elle-même, sauf si vous définissez une canonique manuelle.',
Canonical: 'Canonique',
'Change address': 'Changer l’adresse',
'Drafts and the disabled languages {0} are left out.':
'Les brouillons et les langues désactivées ({0}) sont exclus.',
'Drafts and the disabled {0} language are left out.':
'Les brouillons et la langue désactivée ({0}) sont exclus.',
'Drafts are left out.': 'Les brouillons sont exclus.',
'Each language version has its own address. The URL carries the language.':
'Chaque version linguistique a sa propre adresse. L’URL porte la langue.',
'Edit slug for the {0} version': 'Modifier le slug de la version en {0}',
'Editing the title never changes the slug.': 'Modifier le titre ne change jamais le slug.',
'Editing the title never changes the slug. Only Edit slug does.':
'Modifier le titre ne change jamais le slug. Seul « Modifier le slug » le fait.',
'Fallback: {0} body': 'Repli : corps en {0}',
'Fallback: {0} excerpt': 'Repli : extrait en {0}',
'Fallback: {0} site description': 'Repli : description du site en {0}',
'Fallback: {0} title': 'Repli : titre en {0}',
'How it can appear in search': 'Aperçu dans les résultats de recherche',
'Image alternative text': 'Texte alternatif de l’image',
'Links to the old address will stop working. RenewCMS does not create redirects.':
'Les liens vers l’ancienne adresse cesseront de fonctionner. RenewCMS ne crée pas de redirections.',
'No fallback': 'Aucun repli',
'No fallback. Empty. {0} site default not used. The tag is left out.':
'Aucun repli. Vide. Le texte du site par défaut en {0} n’est pas utilisé. La balise est omise.',
'Open Public URL settings': 'Ouvrir les réglages d’URL publique',
'Page title': 'Titre de la page',
'Published versions in enabled languages only.':
'Versions publiées dans les langues activées uniquement.',
'Search and sharing · {0}': 'Recherche et partage · {0}',
'Set by an owner for {0} in {1} languages. A region is never guessed from the language.':
'Défini par un propriétaire pour la langue {0} dans les langues de {1}. Une région n’est jamais déduite de la langue.',
'Set by hand as a canonical override on this version.':
'Définie à la main comme canonique de cette version.',
'Shows the localized address and canonical. Description: {0}.':
'Affiche l’adresse localisée et la canonique. Description : {0}.',
'Social locale not set': 'Locale sociale non définie',
'Tag left out': 'Balise omise',
'Taken from the region of the language code or of the site locale. An owner can set another in {0} languages.':
'Issue de la région du code de langue ou de la locale du site. Un propriétaire peut en définir une autre dans les langues de {0}.',
'The address changes for {0} only.': 'L’adresse ne change que pour la version en {0}.',
'The address of the {0} version is now {1}.':
'L’adresse de la version en {0} est maintenant {1}.',
'This version is published': 'Cette version est publiée',
'Unique within {0} and {1}. Editing the title never changes the address.':
'Unique dans {0} et en {1}. Modifier le titre ne change jamais l’adresse.',
'Uses site text': 'Utilise le texte du site',
'Written per language.': 'Rédigé pour chaque langue.',
'{0} has no region in its code and no social locale is set for it, so og:locale and og:locale:alternate are left out. An owner can set one in {1} languages.':
'{0} n’a pas de région dans son code et aucune locale sociale n’est définie, donc og:locale et og:locale:alternate sont omis. Un propriétaire peut en définir une dans les langues de {1}.',
Languages: 'Langues',
'Read one published language of an article, or resolve an article in a language. Both requests are public.':
'Lisez une langue publiée d’un article, ou résolvez un article dans une langue. Les deux requêtes sont publiques.',
'1. Exact lookup: site + language + slug': '1. Recherche exacte : site + langue + slug',
'Matches the published version with that slug in that language, or returns article_not_found. It never falls back, because a slug belongs to one language.':
'Trouve la version publiée avec ce slug dans cette langue, ou renvoie article_not_found. Aucun repli, car un slug appartient à une seule langue.',
'2. Resolve by article group, with fallback': '2. Résolution par groupe d’articles, avec repli',
'Use story_id from any response or from alternates[]. French published: lang "fr". French missing or unpublished with fallback=default: the published default, with "lang": "en", "requested_lang": "fr", "fallback": true. Without fallback=default, a missing French is language_not_available. No other language is tried, and drafts are never returned.':
'Utilisez story_id d’une réponse ou de alternates[]. Français publié : lang "fr". Français absent ou non publié avec fallback=default : la version par défaut publiée, avec "lang": "en", "requested_lang": "fr", "fallback": true. Sans fallback=default, un français absent donne language_not_available. Aucune autre langue n’est essayée et les brouillons ne sont jamais renvoyés.',
'3. Errors': '3. Erreurs',
'article_not_found: no published version has that slug in that language. language_not_available: the requested language and the allowed fallback are both unavailable. site_not_found: no site has that key. invalid_language: the language is not a language tag.':
'article_not_found : aucune version publiée n’a ce slug dans cette langue. language_not_available : la langue demandée et le repli autorisé sont indisponibles. site_not_found : aucun site n’a cette clé. invalid_language : la langue n’est pas une balise de langue.',
'Existing, unchanged': 'Existant, inchangé',
'Each article ID is one language version. Article-ID links keep working.':
'Chaque identifiant d’article est une version linguistique. Les liens par identifiant d’article continuent de fonctionner.',
'Read, write and publish articles. A title is edited like any other field and never changes the slug.':
'Lire, écrire et publier des articles. Un titre se modifie comme n’importe quel champ et ne change jamais le slug.',
'Exact lookup by site, language and slug. Returns the published version and its alternates, the other published versions of the article in enabled languages. It never falls back to another language, ignores any cookie or key, and never returns a draft.':
'Recherche exacte par site, langue et slug. Renvoie la version publiée et ses alternatives, les autres versions publiées de l’article dans les langues activées. Aucun repli vers une autre langue, tout cookie ou clé est ignoré et aucun brouillon n’est renvoyé.',
'A language tag such as fr or pt-BR. Default: the site default language.':
'Une balise de langue comme fr ou pt-BR. Par défaut : la langue par défaut du site.',
'Only the value default: serve the published default-language version when the requested one is not published.':
'Uniquement la valeur default : renvoie la version publiée dans la langue par défaut quand celle demandée n’est pas publiée.',
'List the published URLs of a site, one per version in an enabled language, by id ascending, as an array of { url, modified_at, noindex, lang }. The total is in the X-Total-Count header.':
'Liste les URL publiées d’un site, une par version dans une langue activée, par identifiant croissant, sous forme de tableau de { url, modified_at, noindex, lang }. Le total est dans l’en-tête X-Total-Count.',
'List the articles, authors and sites that use an image, with the places where each one uses it. There is one article item per version, with its story_id and lang.':
'Liste les articles, auteurs et sites qui utilisent une image, avec les endroits où chacun l’utilise. Il y a un élément d’article par version, avec son story_id et sa lang.',
'Resolve an article by its story_id in a language, with an explicit fallback to the default language only. The answer adds requested_lang and fallback to the version and its alternates. Without lang the site default language is requested.':
'Résout un article par son story_id dans une langue, avec un repli explicite vers la langue par défaut uniquement. La réponse ajoute requested_lang et fallback à la version et à ses alternatives. Sans lang, la langue par défaut du site est demandée.',
} as const