Bagaimana cara membuat file .pot dengan POedit?

33

Saya telah menghabiskan berjam-jam hari ini pada apa yang tampak seperti sesuatu yang sangat sederhana, yaitu membuat file .pot untuk tema Wordpress yang saya buat. Saya telah membaca artikel Majalah Smashing , artikel Tutsplus dan beberapa orang lainnya tentang cara menggunakan Poedit untuk membuat file .pot untuk sebuah tema, dan kemudian membuat file .mo dan .po, tetapi sayangnya, saya masih terjebak pada yang pertama langkah.

Saya menginstal Poedit dan saya menemukan bahwa UI benar-benar berbeda dari yang ditampilkan di semua tutorial dan sepertinya tidak ada lagi pilihan untuk membuat file .pot. Satu-satunya hal yang tersedia adalah membuat file .po dan .mo dari file .pot yang ada, yang bukan yang saya butuhkan sekarang.

Jadi bisakah seseorang tolong beri tahu saya bagaimana cara membuat file .pot menggunakan Poedit atau dengan metode lain, saya akan sangat menghargainya.

Terima kasih!

pengguna1981248
sumber
Cobalah Membuat File POT .
WisdmLabs

Jawaban:

18

Anda dapat mencoba Eazy Po .

  • Dari menu file, pilih "Baru dari file kode sumber ..".
  • Di jendela xgettext Command Manager; Tekan "Browse folder" untuk memilih folder sumber dasar.
  • Di panel Build tekan tombol “Execute Command” untuk menghasilkan file Pot.
ٍ Shagrouni
sumber
Jauh lebih baik dan lebih mudah daripada POEdit. UI bersih. Memiliki semua fungsi terjemahan i18n dalam daftar kata kunci secara default. Terima kasih.
Paras Shah
Gunakan ini setelah menyadari bahwa fitur WordPress POEdit dibayar. Bekerja dengan sempurna!
Swen
37

Inilah cara Anda dapat membuat file .pot untuk tema Anda dengan Poedit (edisi gratis, versi 1.6.10) di OS X.

Praktik terbaik adalah menyimpan file bahasa dalam folder bernama "bahasa" di direktori tema Anda. Jika Anda belum melakukannya, buat sebelum Anda mulai.

Di Poedit:

  1. Dalam menu "File" pilih "Baru"
  2. Pilih bahasa yang Anda gunakan dalam tema Anda (mungkin bahasa Inggris)
  3. Dalam menu "Katalog" pilih "Properti"
  4. Masukkan informasi proyek di tab "Properti terjemahan"
  5. Buka tab ke-3 "Sumber kata kunci"
  6. Klik pada "item baru" tombol (tombol 2) dan masukkan kata kunci dan ulangi ini untuk setiap kata kunci ( __, _e, esc_attr_e, dll)
  7. Klik tombol "OK" di bagian bawah
  8. Di menu "File" pilih "Save As .."
  9. Simpan file sebagai "yourthemename.pot" di folder "bahasa" di direktori tema Anda (pastikan Anda menambahkan ekstensi .pot ke nama file karena secara default file akan disimpan sebagai .po)
  10. Dalam menu "Katalog" pilih "Properti" lagi
  11. Buka tab ke-2 "Jalur sumber"
  12. Tetapkan nilai untuk "Jalan basis" ke ../(file .pot disimpan dalam subdirektori sehingga dengan cara ini Anda menetapkan dasar ke direktori induk, mis. Direktori tema Anda)
  13. Di sebelah "Path" klik pada tombol "Item baru" dan masukkan .(ini akan membuatnya memindai direktori tema Anda dan subdirektori)
  14. Klik tombol "OK" di bagian bawah
  15. Di jendela proyek klik "Perbarui" (ikon ke-2 di atas)
  16. Dalam menu "File" klik "Simpan"

Dan Anda selesai :)

Jasper
sumber
Ini tidak berfungsi untuk WordPress dan perubahan spesifik pada sistem terjemahan. Itu tidak lengkap di terbaik.
Otto
1
Ini bekerja sangat baik untuk plugin saya
Pablo SG Pacheco
Ini berfungsi untuk plugin, tetapi tidak menerjemahkan deskripsi plugin dari header
Awsme Sandy
25

Anda dapat melakukan ini dengan alat WordPress, tanpa POEdit.

Pertama, lakukan checkout svn di http://develop.svn.wordpress.org/trunk/ :

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

Kemudian, beralihlah ke direktori alat i18n di dalamnya:

cd wpdev/tools/i18n/

Kemudian jalankan saja makepot.php di atas direktori tema Anda:

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

Ini akan membuat file themename.pot untuk Anda. Gunakan dalam alat terjemahan standar apa pun yang Anda suka.

Ini lebih baik karena menggunakan kode WordPress untuk menemukan fungsi i18n, jadi Anda tidak akan melewatkan satupun dari mereka. Selain itu, ia akan menemukan dan menambahkan hal-hal seperti informasi tajuk tema, seperti nama, deskripsi, dll. Ini memungkinkan mereka untuk diterjemahkan juga. Pastikan Anda menyertakan tajuk "Domain Teks:" di style.css Anda agar berfungsi.

Otto
sumber
apakah ini juga berfungsi untuk plugin?
Maruti Mohanty
2
Ya, cukup gunakan "wp-plugin" alih-alih "wp-theme" dan itu akan menghasilkan file POT untuk sebuah plugin.
Otto
Setiap metode lain yang tidak menggunakan alat khusus WordPress rusak dalam beberapa cara.
Otto
Alat luar biasa! Meskipun terus melempar kesalahan seperti "Tidak dapat menghasilkan file" meskipun saya chmod +xdirektori ..
Samuel Elh
1
Mengapa chmod + x membantu? Mungkin Anda harus mencoba membuat direktori dapat ditulis alih-alih dieksekusi.
Otto
5

Saya menemukan cara termudah sekarang adalah menggunakan WP-CLI . Arahkan ke tema atau plugin Anda dan jalankan perintah berikut (setelah WP-CLI diinstal):

wp i18n make-pot . languages/my.pot

(Lihat dokumentasi perintah)

Anda kemudian dapat mengedit file ini dengan Poedit atau alat terjemahan praktis lainnya.

lhermann
sumber
0

Anda dapat menjatuhkan alat eksternal sama sekali dengan plugin Loco Translate . Saya sudah mencobanya sekitar setahun yang lalu dan tidak pernah menggunakan POEdit sejak itu. Instal di situs pengujian Anda dan buat file POT dengan satu klik.

Ihor Vorotnov
sumber
Ini tidak berfungsi untuk WordPress dan perubahan spesifik pada sistem terjemahan. Itu tidak lengkap di terbaik.
Otto
Woot? Ini adalah plugin WP.
tentu saja
0

Bagi siapa saja yang suka menggunakan Poedit, bukan Easy Po.

  1. Unduh (versi terbaru) Poedit dan Instal
  2. Buka file> Baru. Tab baru akan muncul, pilih bahasa terjemahan Anda dan Simpan (ctrl + s) ke folder root tema wordpress Anda.

  3. Pada halaman yang akan Anda lihat berikutnya, Klik - "Ekstrak dari sumber". Tab yang akan Anda lihat selanjutnya mirip dengan yang digunakan dalam tautan yang Anda tempel. "Info Proyek" sekarang adalah "Properti Terjemahan", serta "Jalur" dan "Kata Kunci" masing-masing adalah "Jalur Sumber" dan "Sumber kata kunci"

Toheeb
sumber
0

Saya memiliki masalah yang sama, solusinya ada di tab pertama ketika Anda mengekstrak katalog, harus menempatkan UTF8 direkomendasikan, dan di tab ke-3 "Sumber kata kunci", klik pada tombol "Item baru" (tombol 2) dan masukkan kata kunci dan ulangi ini untuk setiap kata kunci Anda (__, _e).

pengguna105155
sumber
0

Seperti yang dikatakan Otto :

Untuk pengguna Mac , saya akan melakukan sesuatu seperti:

  • Setelah diinstal oleh svn co http://develop.svn.wordpress.org/trunk/ wpdev

Begitu...

  • Buat /languages/dir pada tema Anda
  • Buat file perintah seperti lang.commanddi /languages/dir itu
  • Dalam lang.command

tambahkan kode seperti ini ..

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

PS: Ubah jalur makepot.php Anda yang benar dan mitos ke nama tema Anda

Sekarang setiap kali Anda ingin membuat file .POT baru , Anda bisa menjalankan lang.command

dir

l2aelba
sumber
0

Script otomatis membuat file .po, otomatis menambahkan semua teks dari kode Anda

  1. Tambahkan load_theme_textdomain ('my-textdomain', DIR . '/ Languages ​​/');
  2. Buat folder wp-konten / tema / MY_THEME / bahasa (tambahkan file .mo bahasa Anda ke folder ini)
  3. Buat po.php dan tambahkan skrip ini:
<?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. Buka youdomain / wp-content / themes / MY_THEME / languages ​​/ po.php dan buat file .po
  2. Salin wp-content / themes / MY_THEME / languages ​​/ [LANG] .po ke desktop dan buka dengan Poedit -> Compile MO -> copy [LANG] .mo ke folder bahasa

Gunakan sebagai echo __ ('Teks ini', 'domain -Anda');

Siên
sumber
-1

Coba posting ini: Buat file .pot atau .po menggunakan Poedit . Ini menjelaskan alur kerja, dan menunjukkan file .po dan .pot sama.

Secara default Poedit menyimpan file Anda sebagai file .po tetapi karena kedua file itu identik, Anda dapat menyiasatinya dengan hanya memilih untuk menyimpan file .po sebagai file .pot

Andrew
sumber
Ini tidak berfungsi untuk WordPress dan perubahan spesifik pada sistem terjemahan. Itu tidak lengkap di terbaik.
Otto