Як створити .pot файли за допомогою POedit?


33

Сьогодні я витратив години на те, що здавалося чимось справді простим, а саме створити файл .pot для теми Wordpress, яку я створюю. Я прочитав статтю Smashing Magazine , в статті Tutsplus і кілька інших про те , як використовувати Poedit створити .pot файли для теми, а потім створити .mo і файли .po, але , до жаль, я до сих пір застряг на першому крок.

Я встановив Poedit і виявив, що інтерфейс користувача зовсім інший, ніж це показано у всіх підручниках, і здається, що більше немає можливості створити .pot файл. Єдине, що доступно - це створити .po та .mo файли з існуючого .pot-файлу, який зараз не є мені потрібним.

Тож може хто-небудь скажіть мені, як я можу створювати .pot файли за допомогою Poedit або за допомогою іншого методу, я дуже вдячний.

Спасибі!


Відповіді:


18

Ви можете спробувати Eazy Po .

  • У меню файлів виберіть "Нове з файлів вихідного коду ..".
  • У вікні xgettext Command Manager; Натисніть «Огляд папки», щоб вибрати папку з базовим джерелом.
  • На панелі побудови натисніть кнопку «Виконати команду», щоб створити файл Pot.

Набагато краще і простіше, ніж POEdit. Чистий інтерфейс користувача. За замовчуванням має всі функції перекладу i18n у списку ключових слів. Дякую.
Параш Шах

Використовував це після того, як зрозумів, що функції WordPress від POEdit платні. Працювали чудово!
Swen

37

Ось як можна створити .pot файл для своєї теми за допомогою Poedit (безкоштовне видання, версія 1.6.10) на OS X.

Найкраща практика - збереження мовних файлів у папці з назвою "languages" у вашому тематичному каталозі. Якщо ви ще цього не зробили, створіть його перед початком.

У Poedit:

  1. У меню "Файл" виберіть "Нове"
  2. Виберіть мову, яку ви використовували у своїй темі (можливо, англійська)
  3. У меню "Каталог" виберіть "Властивості"
  4. Введіть інформацію про проект на вкладці "Властивості перекладу"
  5. Перейдіть на 3-ту вкладку "Джерела ключових слів"
  6. Натисніть на кнопку (кнопка 2) «Новий пункт» і введіть ключове слово і повторіть цю процедуру для кожного з ваших ключових слів ( __, _e, esc_attr_eі т.д.)
  7. Натисніть кнопку "ОК" внизу
  8. У меню "Файл" виберіть "Зберегти як .."
  9. Збережіть файл як "yourthemename.pot" у папці "languages" у своєму каталозі тем (переконайтесь, що ви додали .pot розширення до імені файлу, оскільки за замовчуванням він збережеться як .po)
  10. У меню "Каталог" знову виберіть "Властивості"
  11. Перейдіть на другу вкладку "До джерел"
  12. Встановіть значення для "Базового шляху" на ../(файл .pot зберігається у підкаталозі, таким чином ви встановлюєте базу для батьківського каталогу, тобто вашого тематичного каталогу)
  13. Поруч із пунктом "Шлях" натисніть кнопку "Новий елемент" та введіть .(це змусить сканувати каталог ваших тем та його підкаталогів)
  14. Натисніть кнопку "ОК" внизу
  15. У вікні проекту натисніть «Оновити» (2-й значок вгорі)
  16. У меню "Файл" натисніть "Зберегти"

І ви закінчили :)


Це не працює для WordPress та конкретних змін у системі перекладу. Це в кращому випадку неповно.
Отто

1
Це дуже добре спрацювало на моєму плагіні
Pablo SG Pacheco

Він працює для плагіна, але не переводить опис плагіна з заголовка
Awsme Sandy

25

Це можна зробити за допомогою інструментів WordPress, без POEdit.

Спочатку зробіть замовлення на svn з http://develop.svn.wordpress.org/trunk/ :

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

Потім перейдіть до каталогу інструментів i18n у ньому:

cd wpdev/tools/i18n/

Потім просто запустіть makepot.php над каталогом своєї теми:

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

Це створить для вас файл topicname.pot. Використовуйте його в будь-якому стандартному інструменті для перекладу, який вам подобається.

Це краще, оскільки він використовує код WordPress для пошуку функцій i18n, тому ви не пропустите жодну з них. Крім того, він знайде та додасть такі речі, як інформація заголовка теми, наприклад, ім'я, опис тощо. Це дозволяє і перекладати. Переконайтеся, що ви включили заголовок "Text Domain:" у свій style.css для тих, хто працює.


це буде працювати і для плагіна?
Маруті Моханті

2
Так, просто використовуйте "wp-плагін" замість "wp-теми", і він створить файл POT для плагіна.
Отто

Кожен інший метод, який не використовує конкретні інструменти для WordPress, певним чином порушується.
Отто

Дивовижні інструменти! Хоча він постійно кидав помилки на кшталт "Не вдалося генерувати файл", хоча я chmod +xі каталоги ..
Самуель Ель

1
Чому chmod + x допоможе? Можливо, вам слід спробувати зробити каталог замість виконуваного файлу.
Отто

5

Зараз я знайшов найпростіший спосіб - використовувати WP-CLI . Перейдіть до своєї теми чи плагіна та виконайте таку команду (після встановлення WP-CLI):

wp i18n make-pot . languages/my.pot

(Дивіться документацію команди)

Потім ви можете редагувати цей файл за допомогою Poedit або будь-якого іншого зручного інструменту для перекладу.


0

За допомогою плагіна Loco Translate можна повністю скинути зовнішні інструменти . Я спробував це близько року тому і з тих пір ніколи не використовував POEdit. Встановіть його на свій тестовий сайт та створіть файл POT одним клацанням миші.


Це не працює для WordPress та конкретних змін у системі перекладу. Це в кращому випадку неповно.
Отто

Вуто? Це плагін WP.
certainlyakey

0

Для всіх, хто любив використовувати Poedit замість Easy Po.

  1. Завантажте (остання версія) Poedit та встановіть
  2. Перейдіть у файл> Створити. З'явиться нова вкладка, виберіть мову перекладу та збережіть (ctrl + s) у кореневій папці теми Wordpress.

  3. На сторінці, яку ви побачите далі, Клацніть на - "Витяг із джерел". Вкладка, яку ви побачите далі, схожа на ті, що використовуються у посиланнях, які ви вставили. "Інформація про проект" тепер є "Властивості перекладу", а також "Шляхи" та "Ключові слова" - це "Шляхи до джерел" та "Ключові слова джерела" відповідно


0

У мене така ж проблема: рішення знаходиться в першій вкладці, коли витягуєте каталог, слід поставити рекомендований UTF8, а в 3-й вкладці "Джерела ключових слів" натисніть кнопку "Новий елемент" (2-а кнопка) і введіть ключове слово і повторіть це для кожного з ваших ключових слів (__, _e).


0

Як сказав Отто :

Для користувачів Mac я б зробив щось на кшталт:

  • Після встановлення svn co http://develop.svn.wordpress.org/trunk/ wpdev

Так...

  • Складіть /languages/реж на свою тему
  • Виконати командний файл , як lang.commandв цій /languages/директорії
  • Всередині lang.command

додати код щось подібне ..

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

PS: Змінити правильний makepot.php шлях і MyTheme на ваше ім'я теми

Тепер, коли ви хочете створити новий .POT файл, ви можете просто запустити lang.command

реж


0

Сценарій автоматично створює .po файл, автоматично додає весь текст з вашого коду

  1. Додати load_theme_textdomain ('мій-textdomain', DIR . '/ Languages /');
  2. Створіть папку wp-content / themes / MY_THEME / languages ​​(додайте свій файл .mo файлу до цієї папки)
  3. Створіть po.php та додайте цей сценарій:
<?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. Перейдіть до youdomain / wp-content / themes / MY_THEME / languages ​​/ po.php та створіть .po файл
  2. Скопіюйте wp-content / themes / MY_THEME / languages ​​/ [LANG] .po на робочий стіл та відкрийте за допомогою Poedit -> Compile MO -> copy [LANG] .mo в папку з мовами

Використовувати як ехо __ ("Цей текст", "ти-textdomain");


-1

Спробуйте цю публікацію: Створіть .pot або .po файл за допомогою Poedit . Він описує робочий процес і вказує .po і .pot файли однакові.

За замовчуванням Poedit зберігає ваш файл у форматі .po, але оскільки два файли однакові, ви можете його обійти, просто вибравши для збереження .po файл як .pot файл


Це не працює для WordPress та конкретних змін у системі перекладу. Це в кращому випадку неповно.
Отто
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.