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

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

27 голосов | спросил user1981248 11 J0000006Europe/Moscow 2014, 05:53:08

9 ответов


12

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

  • В меню «Файл» выберите «Новые файлы из исходного кода».
  • В окне диспетчера команд xgettext; Нажмите «Обзор папки», чтобы выбрать базовую папку источника.
  • В панели «Сборка» нажмите кнопку «Выполнить команду», чтобы создать файл Pot.
ответил ٍShagrouni 11 J0000006Europe/Moscow 2014, 06:46:48
31

Вот как вы можете создать файл .pot для своей темы с помощью Poedit (бесплатная версия, версия 1.6.10) на OS X.

Лучшей практикой является сохранение языковых файлов в папке с именами «Языки» в вашем каталоге тем. Если вы еще этого не сделали, создайте его перед запуском.

В Poedit:

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

И все готово:)

ответил Jasper 23 72014vEurope/Moscow11bEurope/MoscowSun, 23 Nov 2014 23:55:52 +0300 2014, 23:55:52
23

Вы можете сделать это с помощью инструментов WordPress без POEdit.

Сначала сделайте svn checkout 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 для тех, кто работает.

ответил Otto 24 12014vEurope/Moscow11bEurope/MoscowMon, 24 Nov 2014 00:07:09 +0300 2014, 00:07:09
0

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

ответил Ihor Vorotnov 13 J000000Monday15 2015, 22:02:40
0

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

  1. Загрузить (последняя версия) Poedit и Install
  2. Перейдите в файл> Новое. Появится новая вкладка, выберите язык перевода и сохраните (ctrl + s) в корневую папку вашей темы wordpress.

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

ответил Toheeb 31 MaramThu, 31 Mar 2016 04:31:49 +03002016-03-31T04:31:49+03:0004 2016, 04:31:49
0

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

ответил user105155 18 +03002016-10-18T06:28:48+03:00312016bEurope/MoscowTue, 18 Oct 2016 06:28:48 +0300 2016, 06:28:48
0

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

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

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

Так ...

  • Создайте директорию /languages/ в своей теме
  • Создайте командный файл, например 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

ответил l2aelba 2 MarpmThu, 02 Mar 2017 14:15:32 +03002017-03-02T14:15:32+03:0002 2017, 14:15:32
0

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

  1. Добавить load_theme_textdomain ('my-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 -> Скомпилировать MO -> скопируйте папку [LANG] .mo в Языки .

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

ответил Siên 24 52017vEurope/Moscow11bEurope/MoscowFri, 24 Nov 2017 13:24:34 +0300 2017, 13:24:34
-1

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

  

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

ответил Andrew 11 J0000006Europe/Moscow 2014, 09:43:48

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132