我安装了Poedit,发现UI与所有教程中显示的UI完全不同,似乎不再有创建.pot文件的选项。唯一可以做的就是从现有的.pot文件中创建.po和.mo文件,这不是我现在需要的。
所以有人可以告诉我如何创建.pot文件吗?使用Poedit或其他方法,我将非常感激。
谢谢!
#1 楼
您可以尝试Eazy Po。从文件菜单中选择“从源代码文件新建。”。
在xgettext命令管理器窗口中;按“浏览文件夹”选择基本源文件夹。
在“构建”窗格中,按“执行命令”按钮生成Pot文件。
评论
比POEdit更好,更轻松。干净的用户界面。默认情况下,关键字列表中具有所有i18n转换功能。谢谢。
–帕拉沙(Paras Shah)
'18 -10-1在5:21
在意识到POEdit的WordPress功能已付费后使用此功能。工作完美!
– Swen
18年11月30日在16:17
对我来说,工作也非常完美,也比poedit容易得多。
–Loc_rabbirt
20-4-17的7:53
#2 楼
这是在OS X上使用Poedit(免费版,版本1.6.10)为主题创建.pot文件的方法。最佳做法是将语言文件保存在名为“ languages”的文件夹中在您的主题目录中。如果尚未创建,请在开始之前创建它。
在Poedit中:
在“文件”菜单中,选择“新建”
选择主题中使用的语言(可能是英语)
在“目录”菜单中,选择“属性”
在“翻译属性”选项卡中输入项目信息
转到第3个标签“来源关键字”
单击“新建项目”按钮(第二个按钮)并输入一个关键字,然后对每个关键字(
__
,_e
,esc_attr_e
等)重复此操作。单击底部的“确定”按钮
在“文件”菜单中,选择“另存为..”。
将文件另存为主题目录“语言”文件夹中的“ yourthemename.pot”。您将.pot扩展名添加到文件名中,因为默认情况下它将保存为.po。
在“目录”菜单中再次选择“属性”
转到第二个选项卡“源路径”
将“基本路径”的值设置为
../
(.pot文件保存在子目录中,因此您可以将基本设置为父目录,即您的主题目录)在“路径”旁边,单击“新建项目”按钮,然后输入
.
(这将扫描主题目录及其子目录)在“目录”上单击“确定”按钮底部
在项目窗口中,单击“更新”(顶部的第二个图标)。
在“文件”菜单中,单击“保存”。
您已经完成了:)
评论
这不适用于WordPress和翻译系统的特定更改。充其量是不完整的。
–奥托
16年1月30日在1:04
对于我的插件来说效果很好
– Pablo S G Pacheco
17年1月17日在15:12
它适用于插件,但不转换标题中的插件描述
–真棒桑迪
18-2-27在6:51
#3 楼
您可以在没有POEdit的情况下使用WordPress工具进行此操作。首先,对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年12月25日下午6:57
是的,只需使用“ wp-plugin”而不是“ wp-theme”,它将为插件生成一个POT文件。
–奥托
2014年12月25日12:39
不使用WordPress专用工具的所有其他方法都在某种程度上被破坏了。
–奥托
16年1月30日在1:03
很棒的工具!尽管即使我对目录进行chmod + x操作,它仍会抛出诸如“无法生成文件”之类的错误。
– Samuel Elh
16/12/22在13:14
为什么chmod + x有帮助?也许您应该尝试使目录可写而不是可执行文件。
–奥托
16 Dec 23'9:25
#4 楼
我发现现在最简单的方法是使用WP-CLI。导航到您的主题或插件并执行以下命令(在安装WP-CLI之后):wp i18n make-pot . languages/my.pot
(请参阅命令的文档)
然后您可以使用Poedit或任何其他方便的翻译工具来编辑此文件。
评论
这应该是新接受的答案
–maysi
20-05-26在11:54
我必须在命令末尾添加--ignore-domain开关,以便将所有__(和朋友)添加到.pot文件中,因为插件中的文本域是动态生成的。这将添加插件头文件以及转换为.pot所需的字符串
–charlesdeb
20 Dec 31'的16:06
#5 楼
您可以将带有Loco Translate插件的外部工具全部删除。我大约一年前尝试过,从那以后再也没有使用过POEdit。一键将其安装在测试站点上,然后创建POT文件。评论
这不适用于WordPress和翻译系统的特定更改。充其量是不完整的。
–奥托
16年1月30日,下午1:05
?这是一个WP插件。
–certainlyakey
17-10-16在8:31
#6 楼
对于任何想使用Poedit代替Easy Po的人。下载(最新版本)Poedit并安装
转到文件>新建。将出现一个新标签,选择翻译语言,然后将(ctrl + s)保存到wordpress主题的根文件夹中。
在页面上,您将看到下一步,单击-“从源中提取”。接下来将看到的选项卡与您粘贴的链接中使用的选项卡相似。 “项目信息”现在是“翻译属性”,“路径”和“关键字”分别是“源路径”和“源关键字”
#7 楼
我有同样的问题,解决方法是在提取目录时在第一个选项卡中,应建议使用UTF8,在第三个选项卡的“ Sources keyword”中,单击“ New item”按钮(第二个按钮),然后输入一个关键字并重复每个关键字(__,_ e)的关键字。#8 楼
正如Otto所说的那样:对于Mac用户,我会做以下事情:
由
svn co http://develop.svn.wordpress.org/trunk/ wpdev
安装后所以...
在主题上添加
/languages/
目录在
lang.command
目录中创建类似/languages/
的命令文件在
lang.command
内部添加类似这样的代码。.
#!/bin/bash
cd $(dirname "q4312078q")
php /Users/YOUNAME/wpdev/tools/i18n/makepot.php wp-theme ../../mytheme mytheme.pot
PS:将正确的makepot.php路径和mytheme更改为主题名称
现在每次要创建一个新的.POT文件,您可以运行lang.command
#9 楼
脚本自动创建.po文件,自动添加代码中的所有文本添加load_theme_textdomain('my-textdomain',DIR。'/ languages /');
创建文件夹wp-content /主题/ MY_THEME /语言(将您的语言.mo文件添加到此文件夹)
创建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();
转到youdomain / wp-content / themes / MY_THEME / languages / po.php并创建.po文件
复制wp-content / themes / MY_THEME / languages / [LANG] .po到桌面并使用Poedit打开->编译MO->将[LANG] .mo复制到语言文件夹
用作回显__('This text','you -textdomain');
#10 楼
为喜欢NPM的人们创建.pot文件的另一种替代解决方案是wp-pot。它带有许多选项,您可以根据自己的喜好进行调整。设置超级简单。#11 楼
试试这篇文章:使用Poedit创建.pot或.po文件。它描述了工作流程,并指示.po和.pot文件相同。默认情况下,Poedit将文件另存为.po文件,但是由于两个文件相同,因此您可以只需选择将.po文件另存为.pot文件即可解决此问题
评论
这不适用于WordPress和翻译系统的特定更改。充其量是不完整的。
–奥托
16年1月30日,下午1:05
评论
尝试创建POT文件。