GCTC-NTGC / gc-digital-talent

GC Digital Talent is the new recruitment platform for digital and tech jobs in the Government of Canada. // Talents numériques du GC est la nouvelle plateforme de recrutement pour les emplois numériques et technologiques au gouvernement du Canada.
https://talent.canada.ca
GNU Affero General Public License v3.0
22 stars 9 forks source link

♻️ Make translations consistent #8463

Closed petertgiles closed 11 months ago

petertgiles commented 1 year ago

♻️ Debt/Refactor

It seems like we have quite a few instances where identical English strings are translated into different French strings. Some of these may be legitimate but I suspect most aren't.

🕵️ Details

My script:

#!/bin/env node
const fs = require("fs");

// https://gist.github.com/robmathers/1830ce09695f759bf2c4df15c29dd22d
var groupBy = function (data, key) {
  // `data` is an array of objects, `key` is the key (or property accessor) to group by
  // reduce runs this anonymous function on each element of `data` (the `item` parameter,
  // returning the `storage` parameter at the end
  return data.reduce(function (storage, item) {
    // get the first instance of the key by which we're grouping
    var group = item[key];

    // set `storage` for this instance of group to the outer scope (if not empty) or initialize it
    storage[group] = storage[group] || [];

    // add this item to its group within `storage`
    storage[group].push(item);

    // return the updated storage to the reduce function, which will then loop through the next
    return storage;
  }, {}); // {} is the initial value of the storage
};

const enMessages = {
  ...JSON.parse(fs.readFileSync("apps/web/src/lang/en.json")),
  ...JSON.parse(fs.readFileSync("packages/i18n/src/lang/en.json")),
};

const frMessages = {
  ...JSON.parse(fs.readFileSync("apps/web/src/lang/fr.json")),
  ...JSON.parse(fs.readFileSync("packages/i18n/src/lang/fr.json")),
};
const matchedMessages = Object.keys(enMessages).map((messageId) => ({
  en: enMessages[messageId].defaultMessage,
  fr: frMessages[messageId].defaultMessage,
}));

const groupedByEn = groupBy(matchedMessages, "en");
const messagesWithMultipleFrStrings = Object.keys(groupedByEn)
  .map((en) => ({
    en,
    fr: Array.from(new Set(groupedByEn[en].map((g) => g.fr))),
  }))
  .filter((g) => g.fr.length > 1);

console.debug(JSON.stringify(messagesWithMultipleFrStrings, null, 4));

🙋‍♀️ Proposed Solution

Click me ```json [ { "en": "Employment equity", "fr": [ "Équité en matière d'emploi", "Équité en matière d’emploi" ] }, { "en": "No information has been provided.", "fr": [ "Aucune information n'a été fournie.", "Aucun renseignement n’a été fourni." ] }, { "en": "Which authenticator app should I install?", "fr": [ "Quelle application d’authentification devrais-je installer?", "Quelle application d'authentification dois-je installer?" ] }, { "en": "Edit team information", "fr": [ "Modifier les informations de l’équipe", "Modifier les renseignements sur l’équipe" ] }, { "en": "Personal and contact information", "fr": [ "Renseignements personnels et de contact", "Renseignements personnels et coordonnées" ] }, { "en": "Canada and the United States", "fr": [ "Le Canada et les États-Unis", "Canada et États-Unis" ] }, { "en": "Who do I contact if I have questions about GCKey?", "fr": [ "Qui dois-je contacter si j'ai des questions sur la CléGC?", "Avec qui puis-je communiquer si j’ai des questions au sujet de CléGC?" ] }, { "en": "A GCKey is a central credential not managed by the GC Digital Talent team. The Government of Canada offers it as a way for you to communicate securely with many online-enabled Government programs and services.", "fr": [ "Une CléGC est une identité centrale qui n'est pas gérée par l'équipe des Talents numériques du GC. Le gouvernement du Canada l'offre comme moyen d'accéder, en toute sécurité, à de nombreux programmes et services gouvernementaux en ligne.", "Une CléGC est un justificatif centralisé qui n’est pas géré par l’équipe des Talents numériques du GC. Le gouvernement du Canada l’offre pour vous permettre de communiquer de façon sécurisée avec de nombreux programmes et services gouvernementaux en ligne." ] }, { "en": "I'm interested in gaining hiring experience", "fr": [ "Je souhaite acquérir une expérience d’embauche", "Je souhaite acquérir de l’expérience en matière d’embauche" ] }, { "en": "Edit {label}", "fr": [ "Modifier {label}", "Éditer {label}" ] }, { "en": "Minimum experience or equivalent education", "fr": [ "Expérience minimale ou formation équivalente", "Expérience minimale ou combinaison équivalente d’études" ] }, { "en": "What tasks or activities did you do that relate to this skill?", "fr": [ "Quelles tâches ou activités avez-vous effectuées en rapport avec cette compétence?", "Quelles sont les tâches ou activités que vous avez accomplies qui ont un rapport avec cette compétence?" ] }, { "en": "Saving...", "fr": [ "Sauvegarder...", "Enregistrement..." ] }, { "en": "Check out the most recent manager recruitment processes for specific opportunities or apply to ongoing recruitment in any of the IT generic work streams. Check back often for new opportunities.", "fr": [ "Consultez les processus de recrutement de gestionnaires les plus récents afin de connaître les perspectives spécifiques ou posez votre candidature à un recrutement en cours dans l’un des domaines d’activité génériques de la TI. Consultez régulièrement le site pour connaître les nouvelles possibilités.", "Consultez les processus de recrutement de gestionnaires les plus récents pour des possibilités précises ou présentez votre candidature dans le cadre de processus de recrutement en cours dans l’un des volets de travail génériques de la technologie de l’information. Revenez souvent pour consulter de nouvelles possibilités." ] }, { "en": "Yes, I am a Government of Canada employee.", "fr": [ "Oui, je suis un employé du gouvernement du Canada.", "Oui, je suis un(e) employé(e) du gouvernement du Canada." ] }, { "en": "What can I do if my authenticator codes are no longer being accepted?", "fr": [ "Que faire si mes codes d'authentification ne sont plus acceptés?", "Que puis-je faire si mes codes d’authentification ne sont plus acceptés?" ] }, { "en": "Bilingual positions (English and French)", "fr": [ "Postes bilingues (français et anglais)", "Postes bilingues (en anglais et en français)" ] }, { "en": "Minimum experience or education", "fr": [ "Expérience ou formation minimale", "Expérience ou études minimales" ] }, { "en": "Skill requirements", "fr": [ "Exigences en matière de compétences", "Compétences requises" ] }, { "en": "Indigenous", "fr": [ "Autochtone", "Autochtones" ] }, { "en": "Browse jobs", "fr": [ "Parcourez les emplois", "Explorer les emplois", "Parcourir les offres d’emploi" ] }, { "en": "Archive this pool", "fr": [ "Archiver ce bassin", "Archiver ce bassin " ] }, { "en": "Find talent", "fr": [ "Trouvez des talents", "Trouver des talents" ] }, { "en": "Telephone", "fr": [ "Téléphone", "Numéro de téléphone" ] }, { "en": "I am currently active in this role", "fr": [ "Je suis actuellement actif(-ve) dans ce rôle.", "Je suis actuellement actif dans ce rôle." ] }, { "en": "Language requirement", "fr": [ "Exigence en matière de langue", "Exigence linguistique" ] }, { "en": "Add an experience to your career timeline", "fr": [ "Ajouter une expérience à votre parcours professionnel", "Ajoutez une expérience à votre chronologie de carrière" ] }, { "en": "These notes are shared between all managers of this pool, but not to candidates.", "fr": [ "Ces notes sont partagées entre tous les gestionnaires de ce bassin, mais pas avec les candidats.", "Ces notes sont partagées entre tous les gestionnaires de ce bassin, mais pas avec les candidats" ] }, { "en": "Stream", "fr": [ "Flux", "Volet" ] }, { "en": "Security requirement", "fr": [ "Exigence en matière de sécurité", "Exigence de sécurité" ] }, { "en": "N/A", "fr": [ "S.O.", "S. O." ] }, { "en": "Government employee information", "fr": [ "Renseignements sur les fonctionnaires", "Information sur l’employé(e) du gouvernement " ] }, { "en": "As the Government of Canada we cannot recommend any specific third-party vendors or apps. Well known digital vendors, like Google Authenticator and Microsoft Authenticator, provide authenticator apps. Whichever app you choose, ensure that it comes from a reputable vendor.", "fr": [ "Le gouvernement du Canada ne peut pas recommander de fournisseurs ou d’applications de tiers en particulier. Des fournisseurs numériques bien connus, comme Google Authenticator et Microsoft Authenticator, offrent des applications d’authentification. Quelle que soit l’application que vous choisissez, veillez à ce qu’elle provienne d’un fournisseur réputé.", "En tant que gouvernement du Canada, nous ne pouvons pas recommander d'applications ou de fournisseurs tiers précis. Des fournisseurs en matière de numérique bien connus, comme Google Authenticator et Microsoft Authenticator, proposent des applica3tions d'authentification. Quelle que soit l'application choisie, veillez à ce qu'elle provienne d'un fournisseur fiable." ] }, { "en": "Currently, our site only supports authentication through an authenticator app.", "fr": [ "Actuellement, notre site ne prend en charge que l'authentification par l'entremise d'une application d'authentification.", "À l’heure actuelle, notre site ne prend en charge que l’authentification faite au moyen d’une application d’authentification." ] }, { "en": "Error: updating skill failed", "fr": [ "Erreur : Échec de la mise à jour de la compétence", "Erreur : échec de la mise à jour de la compétence" ] }, { "en": "More opportunities are coming soon!", "fr": [ "Des nouvelles possibilités sont à venir!", "D’autres offres seront bientôt affichées!" ] }, { "en": "Pool information", "fr": [ "Informations sur le bassin", "Information sur le bassin" ] }, { "en": "Can I use SMS or email authentication instead of an app?", "fr": [ "Puis-je utiliser l'authentification par texto ou par courriel au lieu d'une application?", "Puis-je utiliser l’authentification par messagerie texte ou par courriel au lieu d’une application?" ] }, { "en": "Outside Canada and the United States", "fr": [ "À l'extérieur du Canada et des États-Unis", "À l’extérieur du Canada et des États-Unis" ] }, { "en": "Optional technical skills", "fr": [ "Compétences techniques facultatives", "Options des compétences techniques" ] }, { "en": "General information", "fr": [ "Renseignements généraux", "Informations générales" ] }, { "en": "Awards and recognition", "fr": [ "Prix et reconnaissance", "Prix et reconnaissances" ] }, { "en": "By submitting your signature (typing your full name), you are contributing to an honest and safe space for Indigenous Peoples to access these opportunities.", "fr": [ "Lorsque vous soumettez votre signature (en tapant votre nom complet), vous contribuez à créer un espace équitable et sécuritaire afin de permettre aux peuples autochtones de profiter de ces occasions.", "En apposant votre signature (en tapant votre nom au complet), vous contribuez à un espace honnête et sûr où les personnes autochtones peuvent accéder à ces possibilités." ] }, { "en": "Highlight additional details", "fr": [ "Mettre en exergue d’autres détails", "Souligner d’autres détails additionnels" ] }, { "en": "Can you remove the two-factor authentication from my account so I can reset it?", "fr": [ "Pouvez-vous enlever l’authentification à deux facteurs de mon compte afin que je puisse le réinitialiser?", "Pouvez-vous supprimer l'authentification à deux facteurs de mon compte pour que je puisse le réinitialiser?" ] }, { "en": "Skill showcase", "fr": [ "Vitrine des compétences", "Démonstration de compétences" ] }, { "en": "Technical skill library", "fr": [ "Bibliothèque des compétences techniques", "Bibliothèques de compétences techniques" ] }, { "en": "Job title", "fr": [ "Titre de l’emploi", "Titre du poste" ] }, { "en": "Customer Service Representatives are available to assist you by phone, year round, 24 hours a day, 7 days a week.", "fr": [ "Les représentants du service à la clientèle sont disponibles pour vous aider par téléphone, tout au long de l'année, 24 heures sur 24 et 7 jours sur 7.", "Les représentants du service à la clientèle sont prêts à vous aider par téléphone, tout au long de l’année, 24 heures sur 24, 7 jours sur 7." ] }, { "en": "Managers community", "fr": [ "Collectivité des gestionnaires", "Collectivité des gestionnaires." ] }, { "en": "No name provided", "fr": [ "Aucun nom n’a été fourni", "Aucun nom fourni" ] }, { "en": "Work experiences", "fr": [ "Expérience de travail", "Expériences de travail" ] }, { "en": "All the following skills are optionally beneficial to the role, and demonstrating them might benefit you when being considered.", "fr": [ "Toutes les compétences suivantes sont facultativement bénéfiques pour le rôle, et leur démonstration pourrait vous être bénéfique lorsqu’elles sont envisagées.", "Toutes les compétences suivantes sont facultativement avantageuses pour le poste, et le fait de les démontrer pourrait vous être utile lorsque vous êtes pris en considération." ] }, { "en": "Contact us", "fr": [ "Communiquez avec nous", "Pour nous joindre" ] }, { "en": "Edit Experience", "fr": [ "Modifier l'expérience", "Modifier l’expérience" ] }, { "en": "Select an experience", "fr": [ "Sélectionnez une expérience", "Choisir une expérience" ] }, { "en": "Skill library", "fr": [ "Bibliothèque de compétences", "Bibliothèque des compétences" ] }, { "en": "Archive", "fr": [ "Archive", "Archiver" ] }, { "en": "Work preferences", "fr": [ "Préférences de travail", "Préférences en matière de travail", "Préférences relatives au travail" ] }, { "en": "Employment Duration", "fr": [ "Durée de l’emploi", "Durée de l'emploi" ] }, { "en": "Team's short description (French)", "fr": [ "Brève description de l’équipe (en français)", "Brève description de l’équipe (Français)" ] }, { "en": "Team information", "fr": [ "Renseignements sur l’équipe", "Informations sur l’équipe" ] }, { "en": "Salary range:", "fr": [ "Échelle salariale :", "Plage de salaire :" ] }, { "en": "Get hiring experience", "fr": [ "Acquérir de l’expérience en matière d’embauche", "Obtenez une expérience d’embauche" ] }, { "en": "Review instructions", "fr": [ "Instructions de révision", "Vérifier les instructions" ] }, { "en": "View", "fr": [ "Affichage", "Voir" ] }, { "en": "Full Name", "fr": [ "Nom au complet", "Nom complet" ] }, { "en": "Preferred Spoken Interview Language:", "fr": [ "Langue préférée pour l'entretien parlé :", "Langue parlée préférée pour l'entretien :" ] }, { "en": "Veteran status", "fr": [ "Statut de vétéran", "Ancien combattant" ] }, { "en": "Asset skills", "fr": [ "Compétences utiles", "Compétences constituant un atout" ] }, { "en": "Edit this section", "fr": [ "Modifiez cette section", "Modifier cette section" ] }, { "en": "2-year post-secondary", "fr": [ "Études postsecondaires de deux ans", "Deux années post-secondaire" ] }, { "en": "Team's short description (English)", "fr": [ "Brève description de l’équipe (Anglais)", "Brève description de l’équipe (en anglais)" ] }, { "en": "What did you accomplish, create or deliver using this skill?", "fr": [ "Qu’avez-vous accompli, créé ou réalisé en utilisant cette compétence?", "Qu’avez-vous accompli, créé ou livré grâce à cette compétence?" ] }, { "en": "Screening questions", "fr": [ "Questions filtres", "Questions de sélection", "Questions relatives à la sélection préliminaire ", "Question de sélection" ] }, { "en": "Profile and applications", "fr": [ "Profil et candidatures", "Profil et demandes" ] }, { "en": "Education requirements", "fr": [ "Exigences en matière d’éducation", "Exigences en matière de formation" ] }, { "en": "Applied work experience", "fr": [ "Expérience professionnelle appliquée", "Expérience de travail appliquée" ] }, { "en": "Were there any special techniques or approaches that you used?", "fr": [ "Avez-vous utilisé certaines techniques ou approches spéciales?", "Y a-t-il des techniques ou des approches particulières que vous avez employées?" ] }, { "en": "Text Telephone (TTY/TDD)", "fr": [ "Envoyez un texto par téléphone (TTY/ATS)", "Texte sur le téléphone (téléimprimeur/ATS)" ] }, { "en": "If you have questions about GCKey, please contact the GCKey team at:", "fr": [ "Si vous avez des questions sur la CléGC, veuillez contacter l'équipe responsable de CléGC à l'adresse suivante :", "Si vous avez des questions sur la CléGC, veuillez communiquer avec l’équipe de CléGC à l’adresse suivante :" ] }, { "en": "\"I understand that I am part of a community who trusts each other\"", "fr": [ "« Je comprends faire partie d’un groupe où règne la confiance mutuelle »", "« Je comprends que je fais partie d’une communauté qui se fait confiance »" ] }, { "en": "Create Skill", "fr": [ "Créer une compétence", " Créer une compétence" ] }, { "en": "Save changes", "fr": [ "Enregistrer les changements", "Enregistrer les modifications" ] }, { "en": "How much responsibility did you have in this role?", "fr": [ "Quel était votre niveau de responsabilité dans ce poste?", "Quelle était votre part de responsabilité dans ce rôle?" ] }, { "en": "Advertisement information", "fr": [ "Information relative à l’annonce", "Informations publicitaires" ] }, { "en": "Preferred Written Exam Language:", "fr": [ "Langue préférée de l'examen écrit :", "Langue préférée pour l'examen écrit :" ] }, { "en": "Publishing group", "fr": [ "Groupe des publications", "Groupes de publication" ] }, { "en": "What is a GCKey?", "fr": [ "Qu’est-ce qu’une CléGC?", "Qu'est-ce qu'une CléGC?" ] }, { "en": "Diversity, equity, and inclusion", "fr": [ "Diversité, équité et inclusion.", "Diversité, équité et inclusion" ] }, { "en": "Behavioural skill library", "fr": [ "Bibliothèque de compétences comportementales", "Bibliothèque des compétences comportementales" ] }, { "en": "British Columbia", "fr": [ "Colombie-Britannique", "Colombie Britannique" ] } ] ```

✅ Acceptance Criteria

mnigh commented 1 year ago

@RM-1978 this issue might be of interest to you as it involves copy.

gobyrne commented 11 months ago

Cool script @petertgiles. Yeah, @RM-1978 this is great detective work for our editors. Please come to an agreement with the editors and bring it back here :)

RM-1978 commented 11 months ago

@gobyrne, as discussed, I will convert each instance into an excel line item, and transfer the completed document to the editors for discussion and action. Although I am wondering if some instances (e.g., Autochtone vs Autochtones) may be context dependent if the words are used as adjectives to modify plural or single antecedents.

petertgiles commented 11 months ago

There are a few that devs could probably knock off right away if you want to split some off. For example, normalizing to a "dumb" apostrophe and trimming off stray spaces.

RM-1978 commented 11 months ago

Thanks @petertgiles let me check with the editors.

My thoughts are that we can get to work trimming off extra spaces for sure! I will need to confirm whether it is appropriate to use <<l'apostrophe droite>> rather than <<l'apostrophe courbe>> with our current typography.

vd1992 commented 11 months ago

Just noting the findings elsewhere https://github.com/GCTC-NTGC/gc-digital-talent/issues/8660#issuecomment-1839562248

Location is not always the same and is translated to "lieu" or "emplacement" so that is a word to also watch out for

RM-1978 commented 11 months ago

Just noting the findings elsewhere https://github.com/GCTC-NTGC/gc-digital-talent/issues/8660#issuecomment-1839562248

Location is not always the same and is translated to "lieu" or "emplacement" so that is a word to also watch out for

Spoke to Matt, reviewed our recruitment team exchanges and confirmed with the recruitment team about the terms "lieu", "localisation" or "emplacement" as translations for Location.

The recruitment team preference seems to be to use "lieu" for this instance.

That said, I will still confirm with the editors that "lieu" works for all instances of the concept across the platform.

RM-1978 commented 11 months ago

Just an update to let you know that the EN/FR copy writers are working on providing us with consistent translations for the terms that Peter pulled. We have also roped this last instance flagged by Vachan. Please note that any new terms should be addressed in a new copy ticket/issue. Many thanks!

RM-1978 commented 11 months ago

Hi @petertgiles, please find the reconciled French translations provided by the editors and approved by the Recruitment team (As SMEs) for use on the platform: Master_GCDT translation consistency verification_2023-12-15_client verified_Short.xlsx

Thanks for writing that script!

petertgiles commented 11 months ago

Refocused into #8822. Thanks for the translations!