POedit ile .pot dosyaları nasıl oluşturulur?


33

Bugün saatlerce, gerçekten basit bir şey gibi görünen şeylere harcadım, ki bu, yarattığım bir Wordpress teması için bir .pot dosyası oluşturmak. Okuduğum ettik Smashing Magazine makalesine , Tutsplus makale ve nasıl kullanılacağı hakkında birkaç başka poEdit .mo oluşturmak sonra tema için dosyaları .pot yaratmak ve ve .po dosyaları, ama ne yazık ki, hala ilk başta sıkışıp kaldım adım.

Poedit'i yükledim ve kullanıcı arayüzünün tüm eğitimlerde gösterilenden tamamen farklı olduğunu ve .pot dosyası oluşturma seçeneğinin olmadığı anlaşılıyor. Kullanılabilir tek şey, şu anda ihtiyacım olan şey değil .po ve .mo dosyalarını varolan bir .pot dosyasından oluşturmak.

Birisi lütfen bana Poedit kullanarak veya başka bir yöntemle .pot dosyaları nasıl oluşturabileceğimi söyleyebilir mi, gerçekten minnettar olurum.

Teşekkürler!


Yanıtlar:


18

Eazy Po deneyebilirsiniz .

  • Dosya menüsünden “Kaynak kod dosyalarından yeni ..” seçeneğini seçin.
  • Xgettext Komut Yöneticisi penceresinde; Temel kaynak klasörü seçmek için “Klasöre gözat” a basın.
  • Oluşturma bölmesinde, Pot dosyasını oluşturmak için “Command Execute” düğmesine basın.

POEdit'ten çok daha iyi ve daha kolay. UI temizleyin. Varsayılan olarak tüm i18n çeviri işlevlerinin anahtar kelime listesinde olması. Teşekkür ederim.
Paras Şah

POEdit'in WordPress özelliklerinin ödendiğini fark ettikten sonra bunu kullanın. Mükemmel çalıştı!
Swen

37

OS X'te Poedit (ücretsiz sürüm, sürüm 1.6.10) ile temanız için bir .pot dosyası oluşturabilirsiniz.

En iyi uygulama, dil dosyalarını tema dizininizde "dil" adlı bir klasöre kaydetmektir. Henüz yapmadıysanız, başlamadan önce oluşturun.

Poedit'te:

  1. "Dosya" menüsünde "Yeni" yi seçin
  2. Temanızda kullandığınız dili seçin (muhtemelen İngilizce)
  3. "Katalog" menüsünde "Özellikler" i seçin.
  4. "Tercüme özellikleri" sekmesine proje bilgilerini girin
  5. "Kaynak anahtar sözcükleri" 3. sekmesine gidin
  6. "Yeni öğe" düğmesi (2 düğme) üzerine tıklayın ve bir anahtar kelime girin ve anahtar kelimelerinizin her biri için tekrarlayabilirsiniz ( __, _e, esc_attr_evs.)
  7. Alttaki "Tamam" düğmesine tıklayın
  8. "Dosya" menüsünde "Farklı Kaydet."
  9. Dosyayı tema dizininizdeki "dil" klasöründe "yourthemename.pot" olarak kaydedin (varsayılan olarak .po olarak kaydedeceği için .pot uzantısını dosya adına eklediğinizden emin olun)
  10. "Katalog" menüsünde tekrar "Özellikler" seçin.
  11. "Kaynaklar yolları" 2. sekmesine gidin
  12. "Temel yol" değerini ../(.pot dosyası bir alt dizine kaydedilir, böylece tabanı ana dizine, yani tema dizininize ayarlarsınız) ayarlayın.
  13. "Yol" un yanındaki "Yeni Öğe" düğmesini tıklayın ve girin .(bu, tema dizininizi ve alt dizinlerini taramasını sağlar)
  14. Alttaki "Tamam" düğmesine tıklayın
  15. Proje penceresinde "Güncelle" ye tıklayın (en üstteki 2. simge)
  16. "Dosya" menüsünde "Kaydet" i tıklayın

Ve bitti :)


Bu, WordPress ve çeviri sistemindeki belirli değişiklikler için geçerli değildir. En iyi ihtimalle eksik.
Otto

1
Benim eklenti için gerçekten iyi çalıştı
Pablo SG Pacheco,

Eklenti için çalışır, ancak başlıktan eklenti açıklamasını
çevirmez

25

POEdit olmadan bunu WordPress araçlarıyla yapabilirsiniz.

İlk önce http://develop.svn.wordpress.org/trunk/ adresinin svn çıkışını yapın :

svn co http://develop.svn.wordpress.org/trunk/ wpdev

Ardından, içindeki i18n tools dizinine geçin:

cd wpdev/tools/i18n/

Sonra makepot.php dosyasını kendi dizininizin üzerinden çalıştırın:

php makepot.php wp-theme /path/to/your/theme themename.pot

Bu sizin için bir themename.pot dosyası oluşturacaktır. İstediğiniz herhangi bir standart çeviri aracında kullanın.

Bu daha iyidir çünkü i18n işlevlerini bulmak için WordPress kodunu kullanır, böylece hiçbirini kaçırmazsınız. Ek olarak, isim, açıklama vb. Gibi tema başlığı bilgisi gibi şeyler bulur ve ekler. Çalışmaları için style.css'nize "Metin Alanı:" başlığını eklediğinizden emin olun.


Bu bir eklenti için de işe yarar mı?
Maruti Mohanty

2
Evet, sadece "wp-theme" yerine "wp-plugin" kullanın ve bu eklenti için bir POT dosyası oluşturacaktır.
Otto

WordPress'e özgü araçları kullanmayan diğer tüm yöntemler bir şekilde bozulur.
Otto

Müthiş araçlar! chmod +xDizin olmasına rağmen "Dosya oluşturulamadı" gibi hatalar atmaya devam etmesine rağmen ..
Samuel Elh

1
Chmod + x neden yardımcı olabilir? Belki de dizini çalıştırılabilir yerine yazılabilir yapmayı denemelisin.
Otto

5

Şimdi WP-CLI'yi kullanmak için en kolay yolu buldum . Temanıza veya eklentinize gidin ve aşağıdaki komutu uygulayın (WP-CLI yüklendikten sonra):

wp i18n make-pot . languages/my.pot

( Komutun belgelerine bakın )

Daha sonra bu dosyayı Poedit veya başka bir kullanışlı çeviri aracıyla düzenleyebilirsiniz.


0

Loco Translate eklentisi ile harici araçları tamamen bırakabilirsiniz . Bir yıl önce denedim ve o zamandan beri hiç POEdit kullanmadım. Test sitenize kurun ve tek bir tıklamayla POT dosyası oluşturun.


Bu, WordPress ve çeviri sistemindeki belirli değişiklikler için geçerli değildir. En iyi ihtimalle eksik.
Otto

Woot? Bu bir WP eklentisi.
kesin,

0

Easy Po yerine Poedit kullanmak isteyenler için.

  1. İndir (en son sürüm) Poedit ve Yükle
  2. Dosyaya git> Yeni. Yeni bir sekme belirecek, çeviri dilinizi seçiniz ve wordpress temanızın kök klasörüne kaydet (ctrl + s).

  3. Bir sonraki sayfada göreceksiniz, - "Kaynaklardan ayıkla" yı tıklayın. Sonra göreceğiniz sekme, yapıştırdığınız bağlantılarda kullanılanlara benzer. "Proje Bilgisi" artık "Çeviri Özellikleri" ve "Yollar" ve "Anahtar Kelimeler" sırasıyla "Kaynaklar Yollar" ve "Kaynaklar anahtar kelimelerdir".


0

Aynı problemi yaşıyorum, çözüm katalog çıkardığınızda ilk sekmede, UTF8'i tavsiye etmeli ve 3. sekmede "Anahtar kelimeler anahtar kelimeler" bölümünde "Yeni öğe" düğmesini tıklayın (2. düğme) ve bir anahtar kelime girin ve tekrarlayın Anahtar kelimelerinizin her biri için bu (__, _e).


0

As Otto söyledi :

Mac kullanıcıları için şöyle bir şey yapardım:

  • Tarafından yüklendikten sonra svn co http://develop.svn.wordpress.org/trunk/ wpdev

Yani...

  • Temanızda /languages/dir olun
  • lang.commandBu /languages/dizinde olduğu gibi bir komut dosyası yapın
  • içeride lang.command

kod böyle bir şey ekle ..

#!/bin/bash
cd $(dirname "$0")
php /Users/YOUNAME/wpdev/tools/i18n/makepot.php wp-theme ../../mytheme mytheme.pot

Not: Doğru makepot.php yolunu ve efsanesini tema adınla değiştir.

Şimdi yeni bir .POT dosyası yapmak istediğinizde, sadece lang.command koşturabilirsiniz.

dir


0

Script otomatik yaratma. Po dosyası, otomatik olarak tüm metni kodunuzdan ekleyin

  1. Load_theme_textdomain ('my-textdomain', DIR . '/ Languages ​​/');
  2. Wp-content / themes / MY_THEME / languages ​​klasörünü oluşturun (dil .mo dosyanızı bu klasöre ekleyin)
  3. Po.php oluşturun ve bu betiği ekleyin:
<?php /*Script by Sien.com.vn */
define('WP_USE_THEMES', true);

require(''.$_SERVER['DOCUMENT_ROOT'].'/wp-load.php' );

function title_p($title) {

$title='Po create';   

return $title;}
add_filter( 'pre_get_document_title', 'title_p' );


$robots_p='noindex,nofollow';   

get_header();  

echo '<div id="content" class="col col-100">';

if(current_user_can('manage_options')){

function write_txt($path,$content,$type){
$file=fopen($path,$type) or die();
fwrite($file,$content);
fclose($file);
return TRUE;
}

if(isset($_POST['lang'])){
$lang_code=pathinfo($_POST['lang'],PATHINFO_FILENAME);

load_textdomain('this_lang',__DIR__.'/'.$lang_code.'.mo');


$textdomain=$_POST['textdomain'];


$txt='';

function sfile($dir, $ext) {
    global $textdomain;

$globFiles = glob("$dir".DIRECTORY_SEPARATOR."*.$ext");
$globDirs = glob("$dir/*", GLOB_ONLYDIR);

foreach ($globDirs as $dir) {
sfile($dir, $ext);

}

foreach ($globFiles as $file=>$path) {

$txt.=file_get_contents($path,FILE_USE_INCLUDE_PATH);

}


preg_match_all('/__\(\'(.+?)\',\''.$textdomain.'\'\)/',$txt,$output);


$arr=array();

foreach(array_unique($output[1]) as $v){

    if(isset($v)){
write_txt(''.__DIR__.'/po.dat',''.$v.'**$!3|\\/**','a+');
    }
}

}
sfile(get_template_directory(),'php');


$get=file_get_contents(''.__DIR__.'/po.dat');

$k=explode('**$!3|\\/**',$get);


foreach(array_unique($k) as $v){

    if(!empty($v)){ 

if($v==__($v,'this_lang')){
write_txt(''.__DIR__.'/po.dat.empty','
msgid "'.$v.'"
msgstr ""
','a+');
}else{
write_txt(''.__DIR__.'/po.dat.isset','
msgid "'.$v.'"
msgstr "'.__($v,'this_lang').'"
','a+');
}

    }

    }

if(empty(file_get_contents(''.__DIR__.'/po.dat.isset')) && empty(file_get_contents(''.__DIR__.'/po.dat.empty'))){
        echo '<div class="error">Error, Textdomain <b>'.$textdomain.'</b> not found!</div>';
    }else{

write_txt(''.__DIR__.'/'.$lang_code.'.po','# '.$lang_code.' LANG
msgid ""
msgstr ""
"PO-Revision-Date: 2017-11-23 22:26+0700\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 2.0.4\n"
"Language: vi_VN\n"
"Project-Id-Version: Sien\n"
"POT-Creation-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"


'.file_get_contents(''.__DIR__.'/po.dat.isset').'
'.file_get_contents(''.__DIR__.'/po.dat.empty').'
','w+');


echo '<div class="success"><span style="color:blue">Success</span> -> Saved to: '.__DIR__.'/ <b>'.$lang_code.'.po</b></div>';

unlink(''.__DIR__.'/po.dat');
unlink(''.__DIR__.'/po.dat.isset');
unlink(''.__DIR__.'/po.dat.empty');

}

}


echo '<form action="" method="POST">
<div class="menu bd text-center"><p>Language: <select name="lang">';

foreach(glob("".__DIR__."/*.mo") as $path) {echo '<option value="'.$path.'">'.pathinfo($path,PATHINFO_FILENAME).'</option>';}

echo '</select></p>';

$txt='';
function stext($dir, $ext) {
$globFiles = glob("$dir".DIRECTORY_SEPARATOR."*.$ext");
$globDirs = glob("$dir/*", GLOB_ONLYDIR);
foreach ($globDirs as $dir) {stext($dir, $ext);}

foreach ($globFiles as $file=>$path) {
    if($path!=__FILE__){
$txt.=(str_replace(' ','',file_get_contents($path,FILE_USE_INCLUDE_PATH)));
    }

}

preg_match_all('/load_theme_textdomain\((\'|\")(.+?)(\'|\")/',$txt,$gtextdomain);
$td='';
foreach($gtextdomain[2] as $text){

    if(!empty($text)){
    $td.='<option value="'.$text.'">'.$text.'</option>';
    }


}

write_txt(__DIR__.'/textdomain.dat',$td,'a+');
}
stext(get_template_directory(),'php');

$textdomain=file_get_contents(__DIR__.'/textdomain.dat');
if(empty($textdomain)){echo '<div class="error">Not found textdomain [ <b>load_theme_textdomain ("you-textdomain","path_to_language_folder");</b> ]</div>';}else{
echo '<p>Textdomain: <select name="textdomain">'.$textdomain.'</select></p>';
}

echo '<p>
<input type="submit" value="Create new.po file"/>
</p>
</div>
</form>';

unlink(__DIR__.'/textdomain.dat');

}

echo '</div>';

get_footer(); 
  1. Git youdomain / wp-content / themes / My_Theme / dilleri / po.php ve .po dosya oluşturmak
  2. Kopya wp-content / themes / My_Theme / dilleri / [LANG] .po masaüstü ve birlikte aç poEdit -> Derleme MO - için> kopya [LANG] .mo diller klasörüne

Echo __ olarak kullanın ('Bu metin', 'you-textdomain');


-1

Bu yazıyı deneyin: Poedit'i kullanarak bir .pot veya .po Dosyası oluşturun . İş akışını açıklar ve .po ve .pot dosyalarının aynı olduğunu belirtir.

Varsayılan olarak Poedit, dosyanızı bir .po dosyası olarak kaydeder, ancak iki dosya aynı olduğundan, .po dosyasını bir .pot dosyası olarak kaydetmeyi seçerek bu sorunu çözebilirsiniz.


Bu, WordPress ve çeviri sistemindeki belirli değişiklikler için geçerli değildir. En iyi ihtimalle eksik.
Otto
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.