如何使用POedit创建.pot文件?


33

今天,我已经花了数小时来研究似乎很简单的事情,即为我正在创建的Wordpress主题创建.pot文件。我已经阅读了Smashing Magazine的文章Tutsplus的文章以及其他一些文章内容涉及如何使用Poedit为主题创建.pot文件,然后创建.mo和.po文件,但可悲的是,我仍然停留在第一篇步。

我安装了Poedit,发现UI与所有教程中显示的UI完全不同,似乎没有更多选项可以创建.pot文件。唯一可用的是从现有的.pot文件创建.po和.mo文件,这不是我现在需要的。

所以有人可以告诉我如何使用Poedit或其他方法创建.pot文件吗,我真的很感激。

谢谢!


Answers:


18

您可以尝试Eazy Po

  • 从文件菜单中选择“从源代码文件中新建”。
  • 在xgettext命令管理器窗口中;按“浏览文件夹”以选择基本源文件夹。
  • 在“生成”窗格中,按“执行命令”按钮以生成Pot文件。

比POEdit更好,更轻松。干净的用户界面。默认情况下,关键字列表中具有所有的i18n转换功能。谢谢。
Paras Shah,

在意识到POEdit的WordPress功能已付费后使用此功能。完美地工作!
Swen

37

这是在OS X上使用Poedit(免费版,版本1.6.10)为主题创建.pot文件的方法。

最佳实践是将语言文件保存在主题目录中名为“语言”的文件夹中。如果尚未创建,请在开始之前创建它。

在Poedit中:

  1. 在“文件”菜单中选择“新建”
  2. 选择主题中使用的语言(可能是英语)
  3. 在“目录”菜单中,选择“属性”
  4. 在“翻译属性”选项卡中输入项目信息
  5. 转到第三个标签“来源关键字”
  6. 点击“新建项目”按钮(第二按钮),输入关键字,然后重复此为每个关键字的(___eesc_attr_e等)
  7. 点击底部的“确定”按钮
  8. 在“文件”菜单中,选择“另存为”。
  9. 将文件另存为主题目录中“语言”文件夹中的“ yourthemename.pot”(确保将.pot扩展名添加到文件名中,因为默认情况下它将另存为.po)
  10. 在“目录”菜单中,再次选择“属性”
  11. 转到第二个选项卡“源路径”
  12. 将“基本路径”的值设置为../(.pot文件保存在子目录中,这样您就可以将基础设置为父目录,即主题目录)
  13. 在“路径”旁边,单击“新建项目”按钮,然后输入.(这将使它扫描您的主题目录及其子目录)
  14. 点击底部的“确定”按钮
  15. 在项目窗口中,单击“更新”(顶部的第二个图标)
  16. 在“文件”菜单中,单击“保存”

您完成了:)


这不适用于WordPress和翻译系统的特定更改。充其量是不完整的。
奥托

1
它对我的插件非常有效
Pablo SG Pacheco

它适用于插件,但不会转换标题中的插件说明
Awsme Sandy

25

您可以使用WordPress工具执行此操作,而无需POEdit。

首先,对http://develop.svn.wordpress.org/trunk/进行svn签出:

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函数,因此您不会错过任何一个。此外,它将查找并添加诸如主题标头信息之类的内容,例如名称,描述等。这也允许翻译这些内容。确保在style.css中包含“文本域:”标题,以使它们起作用。


这也适用于插件吗?
Maruti Mohanty 2014年

2
是的,只需使用“ wp-plugin”而不是“ wp-theme”,它将为插件生成一个POT文件。
奥托

不使用WordPress专用工具的所有其他方法都在某种程度上被破坏了。
奥托

很棒的工具!虽然它一直抛出错误,如“无法生成文件”即使我chmod +x的目录..
塞缪尔ELH

1
为什么chmod + x有帮助?也许您应该尝试使目录可写而不是可执行文件。
奥托

5

我发现现在最简单的方法是使用WP-CLI。导航到您的主题或插件,然后执行以下命令(安装WP-CLI之后):

wp i18n make-pot . languages/my.pot

(请参阅命令文档

然后,您可以使用Poedit或任何其他方便的翻译工具来编辑此文件。



0

对于任何想使用Poedit代替Easy Po的人。

  1. 下载(最新版本)Poedit并安装
  2. 转到文件>新建。将出现一个新选项卡,选择您的翻译语言,然后将(ctrl + s)保存到您的wordpress主题的根文件夹中。

  3. 在页面上,您将看到下一步,单击-“从源中提取”。接下来将看到的选项卡与您粘贴的链接中使用的选项卡相似。“项目信息”现在是“翻译属性”,“路径”和“关键字”分别是“源路径”和“源关键字”


0

我有同样的问题,解决方法是在提取目录时在第一个选项卡中,应建议使用UTF8,在第三个选项卡的“ Sources keyword”中,单击“ New item”按钮(第二个按钮),然后输入一个关键字并重复每个关键字(__,_ 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('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复制到语言文件夹

用作回声__('This text','you-textdomain');


-1

试试这篇文章:使用Poedit创建.pot或.po文件。它描述了工作流程,并指示.po和.pot文件相同。

默认情况下,Poedit将文件另存为.po文件,但是由于两个文件相同,因此您只需选择将.po文件另存为.pot文件即可解决此问题


这不适用于WordPress和翻译系统的特定更改。充其量是不完整的。
奥托
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.