首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用po编辑器创建新po文件

使用po编辑器创建新po文件
EN

Stack Overflow用户
提问于 2012-10-24 01:58:34
回答 2查看 724关注 0票数 0

我试过一些po editor softwares。我想知道为什么没有一个不允许从头开始创建新的po文件或向现有的po文件中添加新的条目。有没有黑客可以让他们创建新的条目?(我知道po文件是纯文本的,可以在任何文本编辑器中编辑!)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-24 04:46:44

PO编辑器用于将PO文件从一种语言翻译成另一种语言。它们不是为创建PO文件而设计的。您的PO文件应该作为构建系统的一部分创建,而不是由编辑器创建。

如果你想创建它们用于测试,那么通过使用另一个现有的PO文件或通过卸载一个MO文件(使用msgunfmt)来创建它们是非常容易的。

票数 1
EN

Stack Overflow用户

发布于 2017-11-24 18:17:29

脚本自动创建.po文件,自动添加您的代码中的所有文本

添加主题(‘MY-textdomain’,DIR.'/languages/');

  • Create文件夹wp-/themes/MY_
  1. /load_theme_textdomain(将您的语言主题文件添加到此文件夹)
  2. Create po.php并添加此脚本:

代码语言:javascript
运行
复制
<?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('/(translate|__|_e|esc_attr__|esc_attr_e|esc_html__|esc_html_e) ?\( ?(\'|\")(.+?)(\'|\") ?, ?(\'|\")'.$textdomain.'(\'|\") ?\)/',$txt,$output);



foreach(array_unique($output[3]) as $v){

	if(isset($v)){
	
write_txt(''.__DIR__.'/po.dat',''.(str_replace(array("\'",'\"'),array("'",'"'),$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并创建Poedit文件,然后将wp-content/themes/MY_THEME/languages/LANG.po复制到桌面并使用youdomain/wp-content/themes/MY_THEME/languages/po.php

  1. ->
  2. MO

copy LANG.mo to languages folder打开。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13036418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档