it-swarm.com.ru

Как создать .pot файлы с помощью POedit?

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

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

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

Спасибо!

31
user1981248

Вы можете попробовать Eazy Po .

  • В меню "Файл" выберите "Создать из файлов исходного кода ...".
  • В окне xgettext Command Manager; Нажмите "Обзор папки", чтобы выбрать базовую исходную папку.
  • На панели Build нажмите кнопку "Выполнить команду", чтобы сгенерировать файл Pot.
16
ٍShagrouni

Вот как вы можете создать файл .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. Перейти на 2-ю вкладку "Пути к источникам"
  12. Задайте для параметра "Базовый путь" значение ../ (файл .pot сохраняется в подкаталоге, поэтому вы устанавливаете базу в родительский каталог, т. Е. В каталог вашей темы).
  13. Рядом с "Путь" нажмите кнопку "Новый элемент" и введите . (это заставит сканировать каталог вашей темы и его подкаталоги)
  14. Нажмите на кнопку "ОК" внизу
  15. В окне проекта нажмите "Обновить" (2-й значок вверху)
  16. В меню "Файл" нажмите "Сохранить"

И вы сделали :)

37
Jasper

Вы можете сделать это с помощью инструментов 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

Это создаст для вас файл themename.pot. Используйте его в любом стандартном инструменте перевода, который вам нравится.

Это лучше, потому что он использует код WordPress для поиска функций i18n, поэтому вы не пропустите ни одну из них. Кроме того, он найдет и добавит такие вещи, как информация заголовка темы, например имя, описание и т.д. Это также позволяет переводить их. Убедитесь, что вы включили заголовок "Text Domain:" в ваш style.css, чтобы те работали.

25
Otto

Я нашел самый простой способ - использовать WP-CLI . Перейдите к своей теме или плагину и выполните следующую команду (после установки WP-CLI):

wp i18n make-pot . languages/my.pot

(См. документация команды)

Затем вы можете отредактировать этот файл с помощью Poedit или любого другого удобного инструмента перевода.

3
lhermann

Как сказал Отто :

Для пользователей Mac , я бы сделал что-то вроде:

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

Итак ...

  • Сделайте /languages/ dir на вашу тему
  • Создайте командный файл как lang.command в этом /languages/ dir
  • Внутри 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

 dir 

0
l2aelba

Вы можете удалить внешние инструменты вместе с Loco Translate плагин. Я пробовал это около года назад и с тех пор никогда не использовал POEdit. Установите его на свой тестовый сайт и создайте файл POT одним щелчком мыши.

0
Ihor Vorotnov

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

0
user105155

Скрипт автоматически создает .po файл, автоматически добавляет весь текст из вашего кода

  1. Добавить load_theme_textdomain ('my-textdomain',DIR. '/ Languages ​​/');
  2. Создайте папку wp-content/themes/MY_THEME/languages ​​(добавьте ваш .mo-файл language в эту папку)
  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. Перейдите в ваш домен/wp-content/themes/MY_THEME/languages ​​/ po.php и создайте .po файл
  2. Скопируйте wp-content/themes/MY_THEME/languages ​​/ [LANG] .po на рабочий стол и откройте с помощью Poedit -> Compile MO -> скопируйте [LANG] .mo в languages ​​folder

Использовать как echo __ ('This text', 'you-textdomain');

0
Siên

Для тех, кто хотел использовать Poedit вместо Easy Po.

  1. Скачать (последняя версия) Poedit и установить
  2. Перейти к файлу> Новый. Появится новая вкладка, выберите язык перевода и сохраните (Ctrl + S) в корневой папке вашей WordPress темы.

  3. На странице, которую вы увидите дальше, нажмите - "Извлечение из источников". Вкладка, которую вы увидите далее, похожа на те, которые используются в вставленных вами ссылках. "Информация о проекте" теперь называется "Свойства перевода", а "Пути" и "Ключевые слова" означают "Пути источников" и "Ключевые слова источников" соответственно.

0
Toheeb