Làm cách nào để tạo tệp .pot bằng POedit?


33

Tôi đã dành hàng giờ hôm nay cho một thứ thực sự đơn giản, đó là tạo tệp .pot cho chủ đề Wordpress mà tôi đang tạo. Tôi đã đọc bài viết trên Tạp chí Smashing , bài viết về Tutsplus và một vài bài khác về cách sử dụng Poedit để tạo các tệp .pot cho một chủ đề, sau đó tạo các tệp .mo và .po, nhưng thật đáng buồn, lúc đầu tôi vẫn bị mắc kẹt bậc thang.

Tôi đã cài đặt Poedit và tôi thấy rằng UI hoàn toàn khác với giao diện được hiển thị trong tất cả các hướng dẫn và có vẻ như không còn tùy chọn nào để tạo tệp .pot. Điều duy nhất có sẵn là tạo các tệp .po và .mo từ tệp .pot hiện có, đây không phải là thứ tôi cần bây giờ.

Vì vậy, ai đó có thể vui lòng cho tôi biết làm thế nào tôi có thể tạo các tệp .pot bằng Poedit hoặc với một số phương pháp khác, tôi thực sự sẽ đánh giá cao nó.

Cảm ơn!


Câu trả lời:


18

Bạn có thể thử Eazy Po .

  • Từ menu tập tin, chọn New Mới từ các tập tin mã nguồn ...
  • Trong cửa sổ xgettext Command Manager; Nhấn vào Duyệt Duyệt thư mục Nhóm để chọn thư mục nguồn cơ sở.
  • Trong khung Build, nhấn nút Execute Command Execute để tạo tập tin Pot.

Tốt hơn nhiều và dễ dàng hơn POEdit. Giao diện người dùng sạch. Có tất cả các chức năng dịch i18n trong danh sách từ khóa theo mặc định. Cảm ơn bạn.
Paras Shah

Đã sử dụng điều này sau khi nhận ra rằng các tính năng WordPress của POEdit được trả tiền. Làm việc hoàn hảo!
Swen

37

Dưới đây là cách bạn có thể tạo tệp .pot cho chủ đề của mình bằng Poedit (phiên bản miễn phí, phiên bản 1.6.10) trên OS X.

Thực hành tốt nhất là lưu các tệp ngôn ngữ trong một thư mục có tên "ngôn ngữ" trong thư mục chủ đề của bạn. Nếu bạn chưa có, hãy tạo nó trước khi bạn bắt đầu.

Trong Poedit:

  1. Trong menu "Tệp", chọn "Mới"
  2. Chọn ngôn ngữ bạn đã sử dụng trong chủ đề của mình (có thể là tiếng Anh)
  3. Trong menu "Danh mục", chọn "Thuộc tính"
  4. Nhập thông tin dự án vào tab "Thuộc tính dịch"
  5. Chuyển đến tab thứ 3 "Nguồn từ khóa"
  6. Click vào "mục mới" nút (nút thứ 2) và nhập từ khóa và lặp lại điều này cho mỗi từ khóa của bạn ( __, _e, esc_attr_e, vv)
  7. Nhấp vào nút "OK" ở phía dưới
  8. Trong menu "Tệp", chọn "Lưu dưới dạng .."
  9. Lưu tệp dưới dạng "yourthemename.pot" trong thư mục "ngôn ngữ" trong thư mục chủ đề của bạn (đảm bảo bạn thêm phần mở rộng .pot vào tên tệp vì theo mặc định, nó sẽ lưu dưới dạng .po)
  10. Trong menu "Danh mục", chọn "Thuộc tính" lần nữa
  11. Chuyển đến tab thứ 2 "Đường dẫn nguồn"
  12. Đặt giá trị cho "Đường dẫn cơ sở" thành ../(tệp .pot được lưu trong thư mục con để theo cách này bạn đặt cơ sở cho thư mục mẹ, tức là thư mục chủ đề của bạn)
  13. Bên cạnh "Đường dẫn", nhấp vào nút "Mục mới" và nhập .(điều này sẽ làm cho nó quét thư mục chủ đề của bạn và các thư mục con của nó)
  14. Nhấp vào nút "OK" ở phía dưới
  15. Trong cửa sổ dự án, nhấp vào "Cập nhật" (biểu tượng thứ 2 ở trên cùng)
  16. Trong menu "Tệp", nhấp vào "Lưu"

Và bạn đã hoàn thành :)


Điều này không hoạt động cho WordPress và những thay đổi cụ thể đối với hệ thống dịch thuật. Nó là không đầy đủ ở tốt nhất.
Otto

1
Nó hoạt động rất tốt cho plugin của tôi
Pablo SG Pacheco

Nó hoạt động cho plugin, nhưng không dịch mô tả plugin từ tiêu đề
Awsme Sandy

25

Bạn có thể làm điều này với các công cụ WordPress mà không cần POEdit.

Trước tiên, hãy kiểm tra svn của http://develop.svn.wordpress.org/trunk/ :

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

Sau đó, chuyển sang thư mục công cụ i18n trong đó:

cd wpdev/tools/i18n/

Sau đó, chỉ cần chạy makepot.php trên thư mục của chủ đề của bạn:

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

Điều này sẽ tạo một tập tin themename.pot cho bạn. Sử dụng nó trong bất kỳ công cụ dịch tiêu chuẩn nào bạn thích.

Điều này tốt hơn bởi vì nó sử dụng mã WordPress để tìm các hàm i18n, vì vậy bạn sẽ không bỏ lỡ bất kỳ trong số chúng. Ngoài ra, nó sẽ tìm và thêm những thứ như thông tin tiêu đề chủ đề, chẳng hạn như tên, mô tả, v.v ... Điều này cũng cho phép những thứ đó được dịch. Đảm bảo bạn bao gồm tiêu đề "Miền văn bản:" trong style.css để những thứ đó hoạt động.


điều này cũng sẽ làm việc cho một plugin?
Maruti Mohanty

2
Có, chỉ cần sử dụng "wp-plugin" thay vì "wp-theme" và nó sẽ tạo tệp POT cho plugin.
Otto

Mọi phương pháp khác không sử dụng các công cụ cụ thể của WordPress đều bị hỏng theo một cách nào đó.
Otto

Công cụ tuyệt vời! Mặc dù nó liên tục ném các lỗi như "Không thể tạo tệp" mặc dù tôi chmod +xlà các thư mục ..
Samuel Elh

1
Tại sao chmod + x giúp? Có lẽ bạn nên thử làm cho thư mục có thể ghi thay vì thực thi.
Otto

5

Tôi thấy cách dễ nhất bây giờ là sử dụng WP-CLI . Điều hướng đến chủ đề hoặc plugin của bạn và thực hiện lệnh sau (sau khi WP-CLI được cài đặt):

wp i18n make-pot . languages/my.pot

(Xem tài liệu của lệnh)

Sau đó, bạn có thể chỉnh sửa tệp này bằng Poedit hoặc bất kỳ công cụ dịch tiện dụng nào khác.


0

Bạn có thể loại bỏ các công cụ bên ngoài hoàn toàn với plugin Loco Translate . Tôi đã thử nó khoảng một năm trước và chưa bao giờ sử dụng POEdit kể từ đó. Cài đặt nó trên trang web thử nghiệm của bạn và tạo tệp POT chỉ bằng một cú nhấp chuột.


Điều này không hoạt động cho WordPress và những thay đổi cụ thể đối với hệ thống dịch thuật. Nó là không đầy đủ ở tốt nhất.
Otto

Woot? Đó là một plugin WP.
chắc chắn

0

Đối với bất cứ ai đã thích sử dụng Poedit thay vì Easy Po.

  1. Tải xuống (phiên bản mới nhất) Poedit và Cài đặt
  2. Đi đến tập tin> Mới. Một tab mới sẽ xuất hiện, chọn ngôn ngữ dịch của bạn và Lưu (ctrl + s) vào thư mục gốc của chủ đề wordpress của bạn.

  3. Trên trang bạn sẽ thấy tiếp theo, Nhấp vào - "Trích xuất từ ​​các nguồn". Tab bạn sẽ thấy tiếp theo tương tự như các tab được sử dụng trong các liên kết bạn đã dán. "Thông tin dự án" hiện là "Thuộc tính dịch", cũng như "Đường dẫn" và "Từ khóa" lần lượt là "Đường dẫn nguồn" và "Từ khóa nguồn"


0

Tôi có một vấn đề tương tự, giải pháp nằm trong tab đầu tiên khi bạn trích xuất danh mục, nên đặt UTF8 được đề xuất và trong tab thứ 3 "Nguồn từ khóa", nhấp vào nút "Mục mới" (nút thứ 2) và nhập từ khóa và lặp lại cái này cho mỗi từ khóa của bạn (__, _e).


0

Như Otto đã nói :

Đối với người dùng Mac , tôi sẽ làm một cái gì đó như:

  • Sau khi cài đặt bởi svn co http://develop.svn.wordpress.org/trunk/ wpdev

Vì thế...

  • Thực hiện /languages/theo chủ đề của bạn
  • Tạo một tệp lệnh như lang.commandtrong /languages/thư mục đó
  • Phía trong lang.command

thêm mã như thế này ..

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

PS: Thay đổi đúng của bạn makepot.php đường dẫn và mytheme tên chủ đề của bạn

Bây giờ mỗi khi bạn muốn tạo một tệp .POT mới , bạn có thể chạy lang.command

thư mục


0

Script tự động tạo tệp .po, tự động thêm tất cả văn bản từ mã của bạn

  1. Thêm load_theme lòng địa chỉ ('my-textdomain', DIR . '/ Languages ​​/');
  2. Tạo thư mục wp-content / Themes / MY_THEME / ngôn ngữ (thêm tệp .mo ngôn ngữ của bạn vào thư mục này)
  3. Tạo po.php và thêm tập lệnh này:
<?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. Tới youdomain / wp-content / themes / MY_THEME / ngôn ngữ / po.php và tạo .po tập tin
  2. Sao chép wp-content / Themes / MY_THEME / Languages ​​/ [LANG] .po vào máy tính để bàn và mở bằng Poedit -> Biên dịch MO -> sao chép [LANG] .mo vào thư mục ngôn ngữ

Sử dụng như echo __ ('Văn bản này', 'you-textdomain');


-1

Hãy thử bài đăng này: Tạo tệp .pot hoặc .po bằng Poedit . Nó mô tả quy trình công việc và cho biết các tệp .po và .pot giống nhau.

Theo mặc định, Poedit lưu tệp của bạn dưới dạng tệp .po nhưng vì hai tệp giống hệt nhau nên bạn có thể khắc phục điều đó bằng cách chọn lưu tệp .po dưới dạng tệp .pot


Điều này không hoạt động cho WordPress và những thay đổi cụ thể đối với hệ thống dịch thuật. Nó là không đầy đủ ở tốt nhất.
Otto
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.