web-dev-qa-db-fra.com

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

Je parcourais le code source de Gutenberg, par exemple. this et ne comprends pas comment ils traitent les traductions ...

Ils importent ce import { __ } from '@wordpress/i18n' et ensuite, dans le code source, ils utilisent cette 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 certain.

10
Bologer

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

Jed introduit le "Gettext Style i18n pour les applications JavaScript modernes" (ou du moins le dit-on sur leur site).

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

Il existe de nombreux convertisseurs .po à .json disponibles. Les fichiers Gettext .po sont une 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

Cependant, j'aimerais ajouter cette fonctionnalité à un module Jed séparé dans une version ultérieure.

Cependant, cela ne semble pas s'appliquer ici.

Davantage de creuser s'avère, setLocaleData( data: Object, domain: string ) est utilisé pour transmettre les traductions, de la même 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 un wrapper pour get_translations_for_domain( $domain )) }

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 pas charger de fichiers de traduction.

Le package (readme explique également comment générer correctement le fichier .pot } contenant les 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
6
kero

Au moins pour le moment, tant qu’il n’existe pas de meilleur processus automatisé, j’aimerais suggérer de ne pas générer de fichiers .pot à partir de JS.

Comme @kero l'explique dans sa réponse, les traductions en Go sont transmises sous forme de tableau d'objets blob du fichier .mo à JS. Ce flux de travail 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 consistera à générer explicitement le tableau d'objets blob à partir de chaînes traduites avec des 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 s'exécutera sur des fichiers JS et produira le code pertinent [PHP], qui peut à son tour être analysé par des outils tels que poedit.

2
Mark Kaplun