fix(integration): missing french translations
This commit is contained in:
1 parent
c41e6dbca5
commit
a1cdfce529
5 files changed
+108
-8
No files matched your search
@@ -1,5 +1,5 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { t } from '@/i18n'
|
import { t, translate } from '@/i18n'
|
||||||
|
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue'
|
||||||
import type { ApiField } from '@/data/apiCatalogue'
|
import type { ApiField } from '@/data/apiCatalogue'
|
||||||
@@ -70,7 +70,7 @@ const columns = computed(() => [
|
|||||||
{{ row.original.required ? t('Yes') : t('No') }}
|
{{ row.original.required ? t('Yes') : t('No') }}
|
||||||
</template>
|
</template>
|
||||||
<template #rule-cell="{ row }">
|
<template #rule-cell="{ row }">
|
||||||
<span class="text-pretty">{{ row.original.rule }}</span>
|
<span class="text-pretty">{{ translate(row.original.rule) }}</span>
|
||||||
</template>
|
</template>
|
||||||
</UTable>
|
</UTable>
|
||||||
</template>
|
</template>
|
||||||
@@ -17,7 +17,7 @@ const activeTab = ref('fetch')
|
|||||||
|
|
||||||
const examples = computed(() => endpointExamples(props.endpoint, props.origin))
|
const examples = computed(() => endpointExamples(props.endpoint, props.origin))
|
||||||
const rowLabel = computed(
|
const rowLabel = computed(
|
||||||
() => `${props.endpoint.method} ${props.endpoint.path}. ${props.endpoint.description}`,
|
() => `${props.endpoint.method} ${props.endpoint.path}. ${translate(props.endpoint.description)}`,
|
||||||
)
|
)
|
||||||
const bodyTitle = computed(() => {
|
const bodyTitle = computed(() => {
|
||||||
if (props.endpoint.bodyKind === 'multipart') {
|
if (props.endpoint.bodyKind === 'multipart') {
|
||||||
@@ -62,7 +62,7 @@ const snippetTabs = computed(() => [
|
|||||||
class="size-4 shrink-0 text-muted lg:hidden"
|
class="size-4 shrink-0 text-muted lg:hidden"
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
<span class="min-w-0 text-toned lg:truncate">{{ endpoint.description }}</span>
|
<span class="min-w-0 text-toned lg:truncate">{{ translate(endpoint.description) }}</span>
|
||||||
<span class="flex flex-wrap gap-1.5">
|
<span class="flex flex-wrap gap-1.5">
|
||||||
<UBadge
|
<UBadge
|
||||||
:label="translate(endpoint.access)"
|
:label="translate(endpoint.access)"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
import { t, translate } from '@/i18n'
|
import { t, translate } from '@/i18n'
|
||||||
|
|
||||||
import ApiRouteRow from '@/components/ApiRouteRow.vue'
|
import ApiRouteRow from '@/components/ApiRouteRow.vue'
|
||||||
import type { PublicRow, SessionGroup } from '@/data/apiCatalogue'
|
import { LOGIN_FAMILY_CAPTION, type PublicRow, type SessionGroup } from '@/data/apiCatalogue'
|
||||||
import { CHIP_CLASS } from '@/lib/apiReference'
|
import { CHIP_CLASS } from '@/lib/apiReference'
|
||||||
|
|
||||||
defineProps<{
|
defineProps<{
|
||||||
@@ -10,6 +10,13 @@ defineProps<{
|
|||||||
publicRows: PublicRow[]
|
publicRows: PublicRow[]
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
|
function describe(description: string) {
|
||||||
|
const suffix = `. ${LOGIN_FAMILY_CAPTION}`
|
||||||
|
return description.endsWith(suffix)
|
||||||
|
? `${translate(description.slice(0, -suffix.length))}. ${translate(LOGIN_FAMILY_CAPTION)}`
|
||||||
|
: translate(description)
|
||||||
|
}
|
||||||
|
|
||||||
const SUBGROUP_TITLE_CLASS =
|
const SUBGROUP_TITLE_CLASS =
|
||||||
'px-3.5 pt-2 pb-1 text-xs font-medium tracking-wide text-muted uppercase'
|
'px-3.5 pt-2 pb-1 text-xs font-medium tracking-wide text-muted uppercase'
|
||||||
</script>
|
</script>
|
||||||
@@ -36,7 +43,7 @@ const SUBGROUP_TITLE_CLASS =
|
|||||||
:key="`${row.method} ${row.path}`"
|
:key="`${row.method} ${row.path}`"
|
||||||
:method="row.method"
|
:method="row.method"
|
||||||
:path="row.path"
|
:path="row.path"
|
||||||
:description="row.description"
|
:description="describe(row.description)"
|
||||||
data-session-row
|
data-session-row
|
||||||
>
|
>
|
||||||
<UBadge
|
<UBadge
|
||||||
@@ -59,7 +66,7 @@ const SUBGROUP_TITLE_CLASS =
|
|||||||
:key="`${row.method} ${row.path}`"
|
:key="`${row.method} ${row.path}`"
|
||||||
:method="row.method"
|
:method="row.method"
|
||||||
:path="row.path"
|
:path="row.path"
|
||||||
:description="row.description"
|
:description="translate(row.description)"
|
||||||
data-public-row
|
data-public-row
|
||||||
>
|
>
|
||||||
<UBadge
|
<UBadge
|
||||||
|
|||||||
@@ -1593,6 +1593,99 @@ export const messages = {
|
|||||||
Request: 'Requête',
|
Request: 'Requête',
|
||||||
'The variant image. Generated on first request.':
|
'The variant image. Generated on first request.':
|
||||||
'L’image de la variante. Générée à la première requête.',
|
'L’image de la variante. Générée à la première requête.',
|
||||||
|
'markdown, html or json. Default markdown.': 'markdown, html ou json. Par défaut markdown.',
|
||||||
|
'A whole number from 1. Default 1.': 'Un nombre entier à partir de 1. Par défaut 1.',
|
||||||
|
'5, 25, 50 or 100. Default 25.': '5, 25, 50 ou 100. Par défaut 25.',
|
||||||
|
'Up to 200 characters, matched anywhere in the title, ignoring case and accents.':
|
||||||
|
'200 caractères maximum, recherchés n’importe où dans le titre, sans tenir compte de la casse ni des accents.',
|
||||||
|
'online or draft. Default both.': 'online ou draft. Par défaut les deux.',
|
||||||
|
'field:direction, with field title, status, created_at or updated_at and direction asc or desc. Default updated_at:desc.':
|
||||||
|
'champ:direction, avec le champ title, status, created_at ou updated_at et la direction asc ou desc. Par défaut updated_at:desc.',
|
||||||
|
'Search text.': 'Texte recherché.',
|
||||||
|
'SHA-256 of the content, lowercased.': 'SHA-256 du contenu, en minuscules.',
|
||||||
|
'The next_cursor of the previous page.': 'Le next_cursor de la page précédente.',
|
||||||
|
'all, unused or duplicates. Default all.': 'all, unused ou duplicates. Par défaut all.',
|
||||||
|
'newest, oldest, name or largest. Default newest.':
|
||||||
|
'newest, oldest, name ou largest. Par défaut newest.',
|
||||||
|
'1 to 100. Default 24.': 'De 1 à 100. Par défaut 24.',
|
||||||
|
"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.',
|
||||||
|
'The image library. One image can be used in many articles.':
|
||||||
|
'La médiathèque. Une même image peut servir dans plusieurs articles.',
|
||||||
|
'PNG, JPEG, WEBP or SVG.': 'PNG, JPEG, WEBP ou SVG.',
|
||||||
|
'The new filename.': 'Le nouveau nom de fichier.',
|
||||||
|
'Greater than 0. The image to keep.': 'Supérieur à 0. L’image à conserver.',
|
||||||
|
'At least 1, each greater than 0. Identical copies to delete. Articles switch to the kept image.':
|
||||||
|
'Au moins 1, chacun supérieur à 0. Copies identiques à supprimer. Les articles passent à l’image conservée.',
|
||||||
|
'Leave out to keep the current value.': 'À omettre pour conserver la valeur actuelle.',
|
||||||
|
'1 to 365. Leave out to keep the current value.':
|
||||||
|
'De 1 à 365. À omettre pour conserver la valeur actuelle.',
|
||||||
|
'The fingerprint of the preview. Without it, the purge runs on the current library.':
|
||||||
|
'L’empreinte de l’aperçu. Sans elle, la purge s’applique à la médiathèque actuelle.',
|
||||||
|
'People who can sign in, and pending invitations.':
|
||||||
|
'Les personnes qui peuvent se connecter, et les invitations en attente.',
|
||||||
|
'Up to 60 characters.': '60 caractères maximum.',
|
||||||
|
'A valid email address.': 'Une adresse e-mail valide.',
|
||||||
|
'Read the site settings, including the activity log retention.':
|
||||||
|
'Lire les paramètres du site, dont la conservation du journal d’activité.',
|
||||||
|
'Hello world.': 'Hello world.',
|
||||||
|
'Whether registration is open.': 'Indique si les inscriptions sont ouvertes.',
|
||||||
|
'Set a new password with the emailed code.':
|
||||||
|
'Définir un nouveau mot de passe avec le code reçu par e-mail.',
|
||||||
|
'Check an invite code.': 'Vérifier un code d’invitation.',
|
||||||
|
'Accept an invite.': 'Accepter une invitation.',
|
||||||
|
'Plain text "ok". Outside /v1.': 'Texte brut « ok ». En dehors de /v1.',
|
||||||
|
'Update status': 'État de la mise à jour',
|
||||||
|
'Check for update': 'Rechercher une mise à jour',
|
||||||
|
'Download update': 'Télécharger la mise à jour',
|
||||||
|
Register: 'Inscription',
|
||||||
|
'Verify email': 'Vérifier l’e-mail',
|
||||||
|
'Reset password': 'Réinitialiser le mot de passe',
|
||||||
|
'Change the activity log retention': 'Modifier la conservation du journal d’activité',
|
||||||
|
'List activity events': 'Lister les événements d’activité',
|
||||||
|
'Activity summary, owner and admin': 'Résumé de l’activité, propriétaire et administrateur',
|
||||||
|
'Export activity as CSV, owner and admin':
|
||||||
|
'Exporter l’activité en CSV, propriétaire et administrateur',
|
||||||
|
'List keys': 'Lister les clés',
|
||||||
|
'Create a key': 'Créer une clé',
|
||||||
|
'Revoke a key': 'Révoquer une clé',
|
||||||
|
'List one page of articles, newest update first, with the total and the tab counts. Anonymous callers get online articles only.':
|
||||||
|
'Liste une page d’articles, du plus récemment modifié au plus ancien, avec le total et les compteurs des onglets. Les appels anonymes ne reçoivent que les articles publiés.',
|
||||||
|
'Get one article. Drafts answer 404 to anonymous callers.':
|
||||||
|
'Récupère un article. Les brouillons répondent 404 aux appels anonymes.',
|
||||||
|
'Create a draft article.': 'Crée un article en brouillon.',
|
||||||
|
'Update the body of an article.': 'Modifie le corps d’un article.',
|
||||||
|
'Publish an article.': 'Publie un article.',
|
||||||
|
'Unpublish an article.': 'Dépublie un article.',
|
||||||
|
'Delete an article.': 'Supprime un article.',
|
||||||
|
'List images.': 'Liste les images.',
|
||||||
|
'Upload an image (multipart).': 'Téléverse une image (multipart).',
|
||||||
|
'Rename an image. The URL stays the same.': 'Renomme une image. L’URL reste la même.',
|
||||||
|
'Delete an image. Articles that use it show a broken image.':
|
||||||
|
'Supprime une image. Les articles qui l’utilisent affichent une image cassée.',
|
||||||
|
'Merge identical copies into one image.': 'Fusionne les copies identiques en une seule image.',
|
||||||
|
'List the articles that use an image.': 'Liste les articles qui utilisent une image.',
|
||||||
|
'Get the automatic duplicate purge settings.':
|
||||||
|
'Récupère les paramètres de la purge automatique des doublons.',
|
||||||
|
'Turn the automatic purge on or off, or change its interval.':
|
||||||
|
'Active ou désactive la purge automatique, ou modifie son intervalle.',
|
||||||
|
'Preview what a purge would merge. Nothing changes.':
|
||||||
|
'Prévisualise ce qu’une purge fusionnerait. Rien n’est modifié.',
|
||||||
|
'Merge every group of identical copies. Send the preview fingerprint to refuse a changed library.':
|
||||||
|
'Fusionne chaque groupe de copies identiques. Envoyez l’empreinte de l’aperçu pour refuser une médiathèque modifiée.',
|
||||||
|
'List users and invites.': 'Liste les utilisateurs et les invitations.',
|
||||||
|
'Update my profile.': 'Modifie mon profil.',
|
||||||
|
'Invite a user by email.': 'Invite un utilisateur par e-mail.',
|
||||||
|
'Cancel a pending invite.': 'Annule une invitation en attente.',
|
||||||
|
'Renew an expired invite.': 'Renouvelle une invitation expirée.',
|
||||||
|
"Get the current user. With a key, the key's owner.":
|
||||||
|
'Récupère l’utilisateur courant. Avec une clé, son propriétaire.',
|
||||||
|
'Get settings.': 'Récupère les paramètres.',
|
||||||
|
'Made for the browser. A key is ignored here, with no 403.':
|
||||||
|
'Prévue pour le navigateur. Une clé est ignorée ici, sans 403.',
|
||||||
} as const
|
} as const
|
||||||
|
|
||||||
export type MessageKey = keyof typeof messages
|
export type MessageKey = keyof typeof messages
|
||||||
@@ -287,7 +287,7 @@ const CARD_TITLE = 'text-md/6 font-semibold text-highlighted'
|
|||||||
</h2>
|
</h2>
|
||||||
<span class="text-muted">{{ routeCount(group.endpoints.length) }}</span>
|
<span class="text-muted">{{ routeCount(group.endpoints.length) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<span class="text-pretty text-toned">{{ group.description }}</span>
|
<span class="text-pretty text-toned">{{ translate(group.description) }}</span>
|
||||||
<div class="border border-t-0 border-default bg-default">
|
<div class="border border-t-0 border-default bg-default">
|
||||||
<EndpointCard
|
<EndpointCard
|
||||||
v-for="endpoint in group.endpoints"
|
v-for="endpoint in group.endpoints"
|
||||||
|
|||||||
Reference in new issue
Block a user