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

11 июн. 2014 г., 04:53:08
Просмотры: 80.1K
Голосов: 55

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

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

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

Спасибо!

1
Комментарии

Попробуйте создать POT-файлы.

Domain Domain
11 янв. 2016 г. 13:34:28
Все ответы на вопрос 11
5
57

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

wp i18n make-pot . languages/my.pot

(Смотрите документацию этой команды)

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

11 дек. 2018 г. 13:42:22
Комментарии

это должен быть новый принятый ответ

maysi maysi
26 мая 2020 г. 14:54:13

Мне пришлось добавить параметр --ignore-domain в конец команды, чтобы все __ (и аналогичные функции) были добавлены в файл .pot, так как текстовый домен в моем плагине генерируется динамически. Это добавляет в .pot как информацию из заголовка плагина, так и строки, необходимые для перевода.

charlesdeb charlesdeb
31 дек. 2020 г. 18:06:55

САМЫЙ лучший и простой способ, ИМХО

wickywills wickywills
30 мар. 2021 г. 16:40:45

Это самый простой, лучший и бесплатный способ генерации .pot файла. Этот ответ должен быть на первом месте.

Kamal Ahmed Kamal Ahmed
27 июл. 2021 г. 15:32:46

Это самый актуальный ответ, потому что WP CLI — решение для всего. Больше никаких обходных путей, когда есть официальный и задокументированный способ.

Maxime Culea Maxime Culea
8 нояб. 2022 г. 16:44:41
4
45

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

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

В Poedit:

  1. В меню "File" выберите "New"
  2. Выберите язык, который вы использовали в вашей теме (скорее всего, английский)
  3. В меню "Catalog" выберите "Properties"
  4. Введите информацию о проекте во вкладке "Translation properties"
  5. Перейдите на 3-ю вкладку "Sources keywords"
  6. Нажмите на кнопку "New item" (2-я кнопка) и введите ключевое слово, повторите для каждого из ваших ключевых слов (__, _e, esc_attr_e и т.д.)
  7. Нажмите кнопку "OK" внизу
  8. В меню "File" выберите "Save As.."
  9. Сохраните файл как "yourthemename.pot" в папке "languages" вашей темы (убедитесь, что добавили расширение .pot к имени файла, так как по умолчанию он сохраняется как .po)
  10. В меню "Catalog" снова выберите "Properties"
  11. Перейдите на 2-ю вкладку "Sources paths"
  12. Установите значение для "Base path" как ../ (файл .pot сохранен в поддиректории, поэтому таким образом вы устанавливаете базовый путь на родительскую директорию, то есть директорию вашей темы)
  13. Рядом с "Path" нажмите кнопку "New item" и введите . (это позволит сканировать директорию вашей темы и ее поддиректории)
  14. Нажмите кнопку "OK" внизу
  15. В окне проекта нажмите "Update" (2-я иконка сверху)
  16. В меню "File" нажмите "Save"

Готово :)

23 нояб. 2014 г. 22:55:52
Комментарии

Это не работает для WordPress и специфических изменений в системе перевода. В лучшем случае это неполное решение.

Otto Otto
30 янв. 2016 г. 03:04:18

Отлично сработало для моего плагина

Pablo S G Pacheco Pablo S G Pacheco
17 янв. 2017 г. 17:12:47

Работает для плагина, но не переводит описание плагина из заголовка

Awsme Sandy Awsme Sandy
27 февр. 2018 г. 08:51:04

PoEdit (бесплатная версия) не предоставляет возможности сохранить новый файл в формате .pot

PaulJ PaulJ
10 дек. 2021 г. 20:00:51
8
27

Вы можете сделать это с помощью инструментов 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 /путь/к/вашей/теме название_темы.pot

Это создаст файл название_темы.pot. Вы можете использовать его в любом стандартном инструменте для перевода.

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

23 нояб. 2014 г. 23:07:09
Комментарии

Будет ли это работать и для плагина?

Maruti Mohanty Maruti Mohanty
25 дек. 2014 г. 08:57:48

Да, просто используйте "wp-plugin" вместо "wp-theme", и это сгенерирует POT-файл для плагина.

Otto Otto
25 дек. 2014 г. 14:39:01

Любой другой метод, который не использует специальные инструменты WordPress, в чем-то неработоспособен.

Otto Otto
30 янв. 2016 г. 03:03:22

Отличные инструменты! Хотя постоянно вылетали ошибки типа "Не удалось создать файл", несмотря на то, что я сделал chmod +x для директорий..

Ismail Ismail
22 дек. 2016 г. 15:14:21

Почему chmod +x должен помочь? Возможно, стоит сделать директорию доступной для записи, а не исполняемой.

Otto Otto
23 дек. 2016 г. 11:25:18

Спасибо, Otto, я не получил уведомления об этом, но теперь я на Ubuntu, и всё работает просто отлично!

Ismail Ismail
25 янв. 2017 г. 15:53:09

Выполнил те же шаги, перевел все, но не смог перевести описание плагина в заголовочной секции плагина.

Awsme Sandy Awsme Sandy
27 февр. 2018 г. 12:18:06

Если вы переводите плагин, убедитесь, что используете "wp-plugin" в команде, чтобы система понимала, какие заголовки нужно искать.

Otto Otto
27 февр. 2018 г. 23:24:59
Показать остальные 3 комментариев
5
21

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

  • В меню "Файл" выберите "Создать из файлов исходного кода...".
  • В окне "Менеджер команд xgettext" нажмите "Обзор папки", чтобы выбрать основную папку с исходным кодом.
  • На панели "Сборка" нажмите кнопку "Выполнить команду" для создания POT-файла.
11 июн. 2014 г. 05:46:48
Комментарии

Намного лучше и проще, чем POEdit. Чистый интерфейс. Все функции перевода i18n уже включены в список ключевых слов по умолчанию. Спасибо.

Paras Shah Paras Shah
1 окт. 2018 г. 08:21:17

Начал использовать этот плагин, когда узнал, что функции POEdit для WordPress платные. Работает идеально!

Swen Swen
30 нояб. 2018 г. 18:17:07

У меня тоже сработало идеально, и это гораздо проще, намного проще, чем poedit.

Loc_rabbirt Loc_rabbirt
17 апр. 2020 г. 10:53:43

Недоступно для Linux :(

Tofandel Tofandel
17 авг. 2021 г. 14:19:09

Больше не поддерживается, рекомендуется использовать WP CLI.

Maxime Culea Maxime Culea
8 нояб. 2022 г. 16:45:25
2

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

13 июл. 2015 г. 22:02:40
Комментарии

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

Otto Otto
30 янв. 2016 г. 03:05:30

Что? Это же плагин для WordPress.

certainlyakey certainlyakey
16 окт. 2017 г. 11:31:18
0

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

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

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

31 мар. 2016 г. 04:31:49
0

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

18 окт. 2016 г. 06:28:48
0

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

Для пользователей Mac я бы сделал следующее:

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

Итак...

  • Создайте папку /languages/ в вашей теме
  • Создайте командный файл, например lang.command, в этой папке /languages/
  • Внутри файла lang.command

добавьте код примерно такого содержания:

#!/bin/bash
cd $(dirname "$0")
php /Users/ВАШЕИМЯ/wpdev/tools/i18n/makepot.php wp-theme ../../mytheme mytheme.pot

Примечание: Замените путь к makepot.php и имя темы mytheme на свои значения.

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

Структура папок

2 мар. 2017 г. 13:15:32
0

Ещё одно альтернативное решение для создания .pot файлов для тех, кто предпочитает NPM — это wp-pot. Оно предоставляет множество настроек, которые можно адаптировать под свои нужды. Очень просто в настройке.

9 мая 2020 г. 15:46:19
1
-1

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

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

11 июн. 2014 г. 08:43:48
Комментарии

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

Otto Otto
30 янв. 2016 г. 03:05:23
1
-1

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

  1. Добавьте load_theme_textdomain('my-textdomain',DIR.'/languages/');
  2. Создайте папку wp-content/themes/MY_THEME/languages (поместите ваш языковой .mo файл в эту папку)
  3. Создайте файл po.php и добавьте этот скрипт:
<?php /*Скрипт от Sien.com.vn */
define('WP_USE_THEMES', true);

require(''.$_SERVER['DOCUMENT_ROOT'].'/wp-load.php' );

function title_p($title) {

$title='Создание PO файла';   

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">Ошибка, Textdomain <b>'.$textdomain.'</b> не найден!</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">Успешно</span> -> Сохранено в: '.__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>Язык: <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">Не найден 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="Создать новый .po файл"/>
</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 обратно в папку languages

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

24 нояб. 2017 г. 12:24:34
Комментарии

Нет смысла делать это вручную, когда уже существуют CLI-инструменты, которые выполняют всю магию. Рекомендуется использовать WP CLI для достижения лучшего результата.

Maxime Culea Maxime Culea
8 нояб. 2022 г. 16:46:27