Comment Gutenberg gère-t-il les traductions dans React?

10

Je parcourais le code source de Gutenberg, par exemple. ceci et ne comprend pas comment gérer les traductions ...

Ils importent ce import { __ } from '@wordpress/i18n' puis, dans le code source, ils utilisent ce speak( __( 'Block settings closed' ) ); .

Quelqu'un peut-il me dire comment il gère ces traductions dans ReactJS pour qu'elles soient collectées dans un fichier .po normal?

Je suppose qu'ils ont un processus de construction qui parcourt tous les fichiers, y compris JS, et les collecte, mais pas sûr.

    
posée Bologer 22.08.2018 - 07:47

2 réponses

6

Dans le référentiel GitHub de Gutenberg , vous pouvez voir la source du package i18n utilisé. Dans cette source, Jed sera importé (ligne 4 de gutenberg / packages / i18n / src / index.js) , puis utilisé pour la plupart des tâches de traduction sous le capot.

Jed présente le "Style Gettext i18n pour les applications JavaScript modernes" (ou du moins, il est indiqué sur leur site).

Votre question concerne les fichiers .po. Jed explique sur son site:

  

Il existe pas mal de convertisseurs .po en .json disponibles. Les fichiers .po Gettext sont la sortie standard de la plupart des entreprises de traduction de bonne réputation, car il s'agit d'une vieille norme.

     

J'utilise actuellement: po2json

     

Toutefois, j'aimerais ajouter cette fonctionnalité à un module Jed distinct dans une version ultérieure.

Toutefois, cela ne semble pas s'appliquer ici.

Les recherches s'avèrent plus approfondies, setLocaleData( data: Object, domain: string ) est utilisé pour transmettre les traductions, à la manière :

$locale_data = gutenberg_get_jed_locale_data( 'gutenberg' );
wp_add_inline_script(
    'wp-i18n',
    'wp.i18n.setLocaleData( ' . json_encode( $locale_data ) . ' );'
);

( gutenberg_get_jed_locale_data( $domain ) étant plus ou moins une enveloppe pour get_translations_for_domain( $domain ) ) a>

Il semble donc que WordPress récupère les données de traduction via PHP, puis les transmet à Jed. Jed lui-même ne semble charger aucun fichier de traduction.

Le package explique également comment générer correctement le fichier .pot . chaînes localisées.

  

Le paquet inclut également un script pot-to-php utilisé pour générer un fichier php contenant les messages répertoriés dans un fichier .pot. Ceci est utile pour tromper la découverte des chaînes de traduction WordPress.org car pour le moment, WordPress.org n’est pas capable d’analyser les chaînes directement à partir de fichiers JavaScript.

npx pot-to-php languages/myplugin.pot languages/myplugin-translations.php text-domain
    
réponse donnée kero 22.08.2018 - 08:07
2

Du moins pour le moment, tant qu'il n'y a pas de meilleur processus automatisé, je suggérerais de ne pas générer de fichiers .pot du tout JS.

Comme l'explique @kero dans sa réponse, les traductions en Go sont transmises sous forme de tableau d'objets blob du fichier .mo à JS. Ce flux de travaux supprimera tous les plug-ins de modification de localisation qui reposent sur le filtrage des résultats de __ et des associés. Un meilleur flux de travail sera d'avoir une génération explicite du tableau d'objets blob à partir des chaînes en cours de traduction avec __ d'appels, comme vous le feriez avec une traduction JS dans un contexte autre que Go. Cela résoudra également le problème de la génération de fichiers .pot.

Ce qui manque ici, c'est un processus automatisé qui exécutera des fichiers JS et produira le code PHP pertinent, qui pourra à son tour être analysé par des outils tels que poedit.

    
réponse donnée Mark Kaplun 22.08.2018 - 08:41

Lire d'autres questions sur les étiquettes