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

34

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

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

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

Благодарность!

user1981248
источник
Попробуйте создать файлы POT .
WisdmLabs

Ответы:

18

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

  • В меню «Файл» выберите «Создать из файлов исходного кода ...».
  • В окне xgettext Command Manager; Нажмите «Обзор папки», чтобы выбрать базовую исходную папку.
  • На панели Build нажмите кнопку «Выполнить команду», чтобы сгенерировать файл Pot.
Shagrouni
источник
Гораздо лучше и проще, чем 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. Перейти на 2-ю вкладку "Пути к источникам"
  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

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

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

эфирное масло
источник
это будет работать для плагина тоже?
Марути Моханти
2
Да, просто используйте «wp-plugin» вместо «wp-theme», и он сгенерирует POT-файл для плагина.
Отто
Любой другой метод, который не использует специальные инструменты WordPress, каким-то образом нарушается.
Отто
Потрясающие инструменты! Хотя он продолжал выдавать ошибки типа «Не удалось сгенерировать файл», хотя я chmod +xи каталоги ..
Сэмюэль Эльх
1
Почему бы chmod + x помочь? Возможно, вам следует попробовать сделать каталог доступным для записи вместо исполняемого.
Отто
6

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

wp i18n make-pot . languages/my.pot

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

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

lhermann
источник
0

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

Игорь Воротнов
источник
Это не работает для WordPress и конкретных изменений в системе перевода. Это неполно в лучшем случае.
Отто
Woot? Это плагин WP.
конечно же,
0

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

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

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

Toheeb
источник
0

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

user105155
источник
0

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

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

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

Так...

  • Сделайте /languages/DIR на вашей теме
  • Выполнить командный файл , как 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

реж

l2aelba
источник
0

Скрипт автоматически создает .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

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

Sien
источник
-1

Попробуйте этот пост: создайте файл .pot или .po с помощью Poedit . Он описывает рабочий процесс и указывает, что файлы .po и .pot совпадают.

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

Эндрю
источник
Это не работает для WordPress и конкретных изменений в системе перевода. Это неполно в лучшем случае.
Отто