Gutenberg, React'ta çevirileri nasıl ele alıyor?


11

Gutenberg'in kaynak kodundan geçiyordum, örneğin bu ve çevirileri nasıl ele aldıklarını anlayamıyorum ...

Bunu içe aktarırlar import { __ } from '@wordpress/i18n've daha sonra bunu kullandıkları kaynak kodunda kullanırlar speak( __( 'Block settings closed' ) );.

Herkes normal bir .po dosyasında toplanmak için ReactJS içinde bu çevirileri nasıl yönettiklerini söyleyebilir misiniz?

Sanırım JS de dahil olmak üzere tüm dosyaları geçer ve onları toplar, ama emin değilim bazı inşa süreci var.

Yanıtlar:


6

In Gutenberg GitHub depo Eğer kullanılan i18n paketinin kaynağını görebilirsiniz. Bu kaynaktan, sen göreceksiniz Jed aktarılmıyor (Gutenberg hattını 4 / paketler / i18n / src / index.js) ve ardından başlık altında çeviri görevlerin çoğu için kullanılıyor.

Jed , "Modern JavaScript Uygulamaları için Gettext Style i18n" i (veya en azından kendi sitelerinde söylediği gibi) tanıtır.

Sorunuz .po dosyaları içindir. Jed kendi sitesinde şöyle anlatıyor:

Orada oldukça az .po - .json dönüştürücüler vardır. Gettext .po dosyaları, eski bir standart olduğu için çoğu iyi çeviri şirketinin standart çıktısıdır.

Şu anda kullanıyorum: po2json

Ancak, bu işlevselliği gelecekteki bir sürümde ayrı bir Jed modülüne eklemek istiyorum.

Ancak, bu burada geçerli görünmüyor.

Bundan başka kazma, çıkıyor setLocaleData( data: Object, domain: string ), çeviriler iletmek için kullanılır , böylece benzer bir şekilde :

$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 )az çok sarıcı olmak get_translations_for_domain( $domain ))

Görünüşe göre WordPress çeviri verilerini PHP ile alıyor ve Jed'e aktarıyor. Jed'in kendisi herhangi bir çeviri dosyası yüklemiyor gibi görünüyor.

Paketin benioku dosyası , yerelleştirilmiş dizeleri içeren .pot dosyasının nasıl düzgün oluşturulacağını da açıklar .

Paket ayrıca pot-to-phpbir .pot dosyasında listelenen iletileri içeren bir php dosyası oluşturmak için kullanılan bir komut dosyası içerir . Bu, WordPress.org çeviri dizeleri keşfini kandırmak için yararlıdır, çünkü şu anda WordPress.org, dizeleri doğrudan JavaScript dosyalarından ayrıştırma yeteneğine sahip değildir.

npx pot-to-php languages/myplugin.pot languages/myplugin-translations.php text-domain

Gutenberg'in çevirileri PHP tarafından windowyüklenen JSON olarak bazı mülklerde sakladığı wp_add_inline_scriptve daha sonra React tarafında aldığı ve Jed'e ilettiği anlamına mı geliyor? ... ve Jed daha fazla büyü yapar mı?
Bologer

@Bologer Mutlaka bir windowmülk değil , evet. PHP değerleri alır ve bunları wp_add_inline_script
JS'ye

2
cevabı, benim yorumda eklediğiniz bilgilerle genişletmelisiniz. Bu yorum aslında OP'nin aradığı şeyle daha uyumlu görünüyor
Mark Kaplun

2

En azından şimdilik, daha iyi bir otomatik süreç olmadığı sürece, JS'den hiç .pot dosyası oluşturmamayı öneririm.

@Kero'nun cevabında açıkladığı gibi, GB çevirileri .mo dosyasından JS'ye bir tür blob dizisi olarak geçiriliyor. Bu iş akışı, sonuçlarını __ve ilişkilendirmelerini filtrelemeye dayanan tüm yerelleştirme müdahale eklentilerini kıracaktır . Daha iyi bir iş akışı, __GB olmayan bağlamda JS çevirisini nasıl yapacağınıza benzer şekilde, çağrılarla çevrilen dizelerden blob dizisinin açık bir nesline sahip olmak olacaktır. Bu aynı zamanda .pot dosyaları oluşturma sorununu da çözecektir.

Burada eksik olan, JS dosyaları üzerinde çalışacak ve ilgili PHP kodunu üretecek ve bu da poedit gibi araçlar tarafından analiz edilebilecek bazı otomatik süreçlerdir.



1
güzel bir başlangıç ​​noktası, sadece sol kısmı wp_add_inline_script için çağrı oluşturmak için, şu anda muhtemelen sadece pot üretimi yararına php üretmek, ama aslında (benim tahminim) kullanmayın
Mark Kaplun
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.