Skip to content

fix: réactive les traductions fr, ru, de (#268) - #353

Open
ohugonnot wants to merge 10 commits into
mainfrom
268-traductions
Open

ohugonnot wants to merge 10 commits into
mainfrom
268-traductions

Conversation

@ohugonnot

Copy link
Copy Markdown
Contributor

Closes #268
Closes #266

⚠️ À fusionner après #350 : cette branche part de #350 (elle déplace le menu des métiers, que #350 modifie). Tant que #350 n'est pas fusionnée, ses commits apparaissent aussi ici.

Le problème

Sur le site en ligne, choisir Français, Русский ou Deutsch change l'interface, mais le contenu reste en anglais. Pourtant le dépôt contient ~120 pages traduites en français, ~118 en russe, ~30 en allemand.

Cause : Docusaurus cherche les traductions dans i18n/fr, i18n/ru, i18n/de (minuscules). Les dossiers s'appelaient i18n/FR, RU, DE. Sous Windows c'est pareil, sous Linux (le serveur) non : les traductions n'ont jamais été chargées depuis leur création (janvier 2023).

Ce que fait cette PR (un commit par étape)

  1. Renomme les dossiers en minuscules et aligne les chemins des fichiers traduits sur l'anglais (un fichier traduit ne remplace la page anglaise que s'il a exactement le même chemin) : fr jobs → Jobs, Command_role → Command_roles, fautes de frappe (laywer.md, psycholigist.md), ru Ghost_roles → Protagonist_roles/Ghost_roles. Uniquement des renommages (338 fichiers, 0 ligne de contenu modifiée).
  2. Retire le titre « My Site » du modèle Docusaurus dans les traductions de la barre du haut (il se serait affiché à la place de « Unitystation Documentation »).
  3. Menu des métiers en partiel (_Jobs.md, un par langue) : il est inclus dans ~61 pages par langue ; une fois traduit, l'ancien import faisait échouer le build. Chaque page traduite affiche maintenant le menu de sa langue.
    • 53 liens mal formés par la traduction automatique ([texte] (chemin), crochets perdus ou en trop) faisaient échouer le build : réparés, en suivant le lien anglais d'origine pour choisir le texte du lien.
    • 50 images introuvables (passées en .webp, déplacées dans des sous-dossiers, icon/Icon) : chemins corrigés, en reprenant l'image de la page anglaise de même texte alternatif.
  4. Ordre du menu de gauche et titres : un fichier traduit remplace aussi les métadonnées de la page anglaise. 20 pages sans sidebar_position (menu en ordre alphabétique) et 4 clés traduites ignorées (titre, Название, Titel) : corrigées. Titres de catégorie « Jouer » / « Играть » (anglais : « Play »).
  5. Test de bout en bout scripts/e2e_i18n.py (npm run test:i18n), voir ci-dessous.

Les traductions elles-mêmes ne sont pas modifiées (sauf les liens et images cassés).

Comment c'est vérifié

Site construit (npm run build, 4 langues) puis servi par busybox httpd comme l'image Docker (dossiers img des langues en liens symboliques), et test e2e qui compare chaque page de chaque langue à l'anglais :

pages réellement traduites affichées pages en double menu dans un autre ordre
En ligne aujourd'hui fr 0 · ru 0 · de 0 — —
Avec cette PR fr 64 · ru 91 · de 9 0 0

(Les autres pages restent en anglais : soit pas de traduction, soit un fichier « traduit » qui est en fait une copie de l'anglais.)

Le test a lui-même été vérifié : il échoue si les pages retombent en anglais, si une page traduite crée une adresse en double, si le menu change d'ordre, et s'arrête proprement (code 2) si le build manque ou si le serveur ne répond pas.

Mémoire : le build passe avec le même plafond que le Dockerfile (--max-old-space-size=1024). Les mesures de pic mémoire faites ici ne sont pas comparables entre main et cette branche (plusieurs builds tournaient en même temps) : rien n'indique que cette PR alourdisse le build, mais c'est à surveiller sur le VPS.

Ce qui reste (issues séparées)

Les liens étaient écrits avec des antislashs Windows
(\3_HowToPlay\Jobs\Command_roles\Captain.md), que Docusaurus ne
résout pas. scripts/fix_backslash_links.py les réécrit avec des
barres obliques, depuis la racine des docs, comme les auteurs
l'avaient voulu : /3_HowToPlay/Jobs/Command_roles/Captain.md.
(Docusaurus résout « /fichier.md » depuis le dossier de la langue,
puis docs/ : le même lien mènera à la page traduite si elle existe.)

- 457 liens directs, 2 avec correction de casse, 13 images
- 34 liens vers les anciens guides, redirigés vers les sections des
  pages métier où leur contenu a été fusionné (dd41389, 8e957fb)
- 11 liens « HoS » / « Head of Security » qui menaient à la page
  Security Officer → Head-of-Security.md

Menu des métiers (Jobs.md, inclus dans ~61 pages) : 4 liens vers des
pages inexistantes (Ancient Engineer, Ash Walker, Nuclear operative,
Emergency Response Team) pointent maintenant vers leurs pages.

Anglais uniquement ; les traductions suivront avec #268.
…glais (#268)

Docusaurus cherche i18n/fr, i18n/ru, i18n/de (en minuscules). Les
dossiers s'appelaient FR, RU, DE : sous Linux (le serveur), aucune
traduction n'était trouvée depuis leur création (0c344b6, 2023-01).

Un fichier traduit ne remplace la page anglaise que s'il a exactement
le même chemin. Alignés sur docs/ :
- fr : dossier jobs -> Jobs, Command_role -> Command_roles,
  laywer.md -> Lawyer.md, psycholigist.md -> Psychologist.md,
  Centcom-intern.md et central-command-Officer.md (casse)
- ru : cargonia.md -> Cargonia.md, Ghost_roles/ -> Protagonist_roles/Ghost_roles/

Uniquement des renommages (git mv), aucun contenu modifié.
…rre du haut (#268)

Sans clé traduite, Docusaurus reprend le titre de la config
(« Unitystation Documentation »), cf. theme-classic/lib/translations.js:61.
…bles des traductions (#268)

- Menu des métiers : Jobs.md -> _Jobs.md (partiel) dans chaque langue,
  importé via @site/... ; un partiel n'est pas une page, il fonctionne
  dans toutes les langues (avant : le build traduit échouait, l'import
  visait le Jobs.md anglais remplacé par sa traduction).
- 53 liens mal formés par la traduction automatique ([texte] (chemin),
  crochets perdus ou en trop) : MDX lisait \3 comme un échappement
  invalide et le build échouait.
- 50 images introuvables (converties en .webp, déplacées en sous-dossiers,
  casse icon/Icon) : chemin réel retrouvé, image anglaise de même texte
  alternatif en priorité.
scripts/e2e_i18n.py compare chaque page de chaque langue à la page
anglaise sur un site servi (local ou en ligne) : pages réellement
traduites, pages en double (un fichier traduit mal placé crée une
adresse à part), et quelques textes attendus.
npm run test:i18n (après npm run build et un serveur sur le port 3000).

Mesuré : en ligne aujourd'hui fr/ru/de 0/214 ; avec cette PR, servi
par busybox httpd comme le Dockerfile : fr 78, ru 92, de 26, 0 double.
Un fichier traduit remplace aussi les métadonnées de la page anglaise.
Maintenant que les traductions sont chargées :
- 20 pages traduites (fr, ru) n'avaient pas de sidebar_position : le
  menu de gauche passait en ordre alphabétique. Valeur reprise de
  l'anglais.
- 4 clés traduites (« titre », « Название », « Titel ») étaient ignorées
  par Docusaurus : remplacées par « title ».
- 3_HowToPlay.md fr/ru sans titre (la catégorie s'affichait
  « HowToPlay ») : « # Jouer », « # Играть » (anglais : « # Play »).
- vérifie que le menu de gauche est dans le même ordre qu'en anglais
- minimum de pages traduites, calculé depuis les fichiers réellement
  traduits : une retombée silencieuse en anglais fait échouer le test
- échoue aussi sur une page absente dans une langue
- code 2 (test impossible) si le build manque ou si le serveur ne
  répond pas, avec un délai global
- adresse configurable : I18N_URL=... npm run test:i18n
La clé traduite « Titel: Station AI » était ignorée, la page prenait son
titre allemand. En la renommant « title: », le titre redevenait anglais :
on retire la ligne, le titre vient du titre de la page (« Station
Künstliche Intelligenz »).
- même critère pour les fichiers et les pages : une copie anglaise
  légèrement modifiée ne compte plus comme page traduite (avant : une
  retombée en anglais de 8 pages allemandes sur 9 restait verte)
- minimum relevé à 90 % des pages réellement traduites
- menu de gauche repéré par sa classe (le libellé aria-label est
  traduisible) ; menu introuvable -> code 2 au lieu d'un faux vert
- seul un 404 compte comme page absente ; 429/5xx = problème serveur
- 404/410/451 ou redirection vers une autre page (ex. /fr/X/ -> /X/) :
  page absente
- erreurs passagères (5xx, 408, 429, réseau) : réessayées (Retry-After
  respecté) ; si elles persistent, la page est listée « en erreur » et
  le test échoue (code 1) sans perdre le reste du rapport
- autre erreur 4xx : page en erreur (pas d'essai inutile)
- serveur qui ne répond pas dès la page d'accueil : code 2
Marge du minimum de pages traduites : au moins 2 pages.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

la gestion des langues (traduction) ne fonctionne pas Pas de traduction disponible.

1 participant