Como criar arquivos .pot com o POedit?


33

Passei horas hoje no que parecia algo realmente simples, que é criar um arquivo .pot para um tema do Wordpress que estou criando. Eu li o artigo da Smashing Magazine , o artigo Tutsplus e alguns outros sobre como usar o Poedit para criar arquivos .pot para um tema e, em seguida, criar arquivos .mo e .po, mas, infelizmente, ainda estou preso no primeiro degrau.

Instalei o Poedit e acho que a interface do usuário é completamente diferente do que é mostrado em todos os tutoriais e parece que não há mais uma opção para criar arquivo .pot. A única coisa disponível é criar arquivos .po e .mo a partir de um arquivo .pot existente, o que não é o que eu preciso agora.

Alguém pode me dizer como posso criar arquivos .pot usando o Poedit ou com algum outro método, eu realmente aprecio isso.

Obrigado!


Respostas:


18

Você pode tentar Eazy Po .

  • No menu arquivo, selecione "Novo nos arquivos de código-fonte ..".
  • Na janela do xgettext Command Manager; Pressione “Procurar pasta” para selecionar a pasta de origem base.
  • No painel Build, pressione o botão “Execute Command” para gerar o arquivo Pot.

Muito melhor e mais fácil que o POEdit. UI limpa. Possui todas as funções de tradução do i18n na lista de palavras-chave por padrão. Obrigado.
— Paras Shah

Utilizado depois de perceber que os recursos do WordPress do POEdit são pagos. Funcionou perfeitamente!
— Swen

37

Aqui está como você pode criar um arquivo .pot para o seu tema com o Poedit (edição gratuita, versão 1.6.10) no OS X.

A melhor prática é salvar os arquivos de idioma em uma pasta chamada "languages" no diretório de temas. Se você ainda não o criou, crie-o antes de começar.

Em Poedit:

  1. No menu "Arquivo", selecione "Novo"
  2. Selecione o idioma que você usou no seu tema (provavelmente inglês)
  3. No menu "Catálogo", selecione "Propriedades"
  4. Digite as informações do projeto na guia "Propriedades da tradução"
  5. Vá para a terceira guia "Palavras-chave de origem"
  6. Clique no botão "New Item" (2º botão) e digite uma palavra-chave e repetir isso para cada uma de suas palavras-chave ( __, _e, esc_attr_e, etc.)
  7. Clique no botão "OK" na parte inferior
  8. No menu "Arquivo", selecione "Salvar como .."
  9. Salve o arquivo como "yourthemename.pot" na pasta "languages" no diretório do tema (adicione a extensão .pot ao nome do arquivo, pois, por padrão, ele será salvo como .po)
  10. No menu "Catálogo", selecione "Propriedades" novamente
  11. Vá para a segunda guia "Caminhos das fontes"
  12. Defina o valor para "Caminho base" como ../(o arquivo .pot é salvo em um subdiretório, dessa forma, você define a base para o diretório pai, ou seja, o diretório do tema)
  13. Ao lado de "Caminho", clique no botão "Novo item" e digite .(isso fará com que ele verifique o diretório de temas e seus subdiretórios)
  14. Clique no botão "OK" na parte inferior
  15. Na janela do projeto, clique em "Atualizar" (segundo ícone na parte superior)
  16. No menu "Arquivo", clique em "Salvar"

E você está pronto :)


Isso não funciona para o WordPress e as alterações específicas no sistema de tradução. É incompleto na melhor das hipóteses.
— Otto

1
Funcionou muito bem no meu plugin #
— Pablo SG Pacheco

Ele funciona para o plug-in, mas não converte a descrição do plug-in do cabeçalho
— Awsme Sandy

25

Você pode fazer isso com as ferramentas do WordPress, sem o POEdit.

Primeiro, faça um check-out do svn em http://develop.svn.wordpress.org/trunk/ :

svn co http://develop.svn.wordpress.org/trunk/ wpdev

Em seguida, mude para o diretório i18n tools:

cd wpdev/tools/i18n/

Em seguida, basta executar o makepot.php no diretório do seu tema:

php makepot.php wp-theme /path/to/your/theme themename.pot

Isso criará um arquivo themename.pot para você. Use-o em qualquer ferramenta de tradução padrão que você desejar.

Isso é melhor porque usa o código do WordPress para encontrar as funções do i18n, para que você não perca nenhuma delas. Além disso, ele encontrará e adiciona itens como as informações do cabeçalho do tema, como nome, descrição etc. Isso também permite que elas sejam traduzidas. Certifique-se de incluir o cabeçalho "Domínio de texto:" no seu style.css para que eles funcionem.


isso funcionará para um plugin também?
— Maruti Mohanty

2
Sim, basta usar "wp-plugin" em vez de "wp-theme" e ele irá gerar um arquivo POT para um plug-in.
— Otto

Todo outro método que não usa as ferramentas específicas do WordPress é quebrado de alguma forma.
— Otto

Ferramentas impressionantes! Embora manteve jogando erros como "Não foi possível gerar o arquivo" Mesmo que eu chmod +xos diretórios ..
— Samuel ELH

1
Por que o chmod + x ajudaria? Talvez você deva tentar tornar o diretório gravável em vez de executável.
— Otto

5

Eu achei a maneira mais fácil agora é usar o WP-CLI . Navegue para o seu tema ou plug-in e execute o seguinte comando (após a instalação do WP-CLI):

wp i18n make-pot . languages/my.pot

(Veja a documentação do comando)

Você pode editar este arquivo com o Poedit ou qualquer outra ferramenta de tradução útil.


0

Você pode descartar ferramentas externas completamente com o plugin Loco Translate . Eu tentei cerca de um ano atrás e nunca usei o POEdit desde então. Instale-o no site de teste e crie um arquivo POT com um clique.


Isso não funciona para o WordPress e as alterações específicas no sistema de tradução. É incompleto na melhor das hipóteses.
— Otto

Woot? É um plugin WP.
— certainlyakey

0

Para quem gostaria de usar o Poedit em vez do Easy Po.

  1. Download (versão mais recente do) Poedit e instalação
  2. Vá para o arquivo> Novo. Uma nova guia será exibida, escolha seu idioma de tradução e salve (ctrl + s) na pasta raiz do seu tema wordpress.

  3. Na página que você verá a seguir, clique em - "Extrair de fontes". A guia que você verá a seguir é semelhante à usada nos links que você colou. "Informações do projeto" agora é "Propriedades da tradução", assim como "Caminhos" e "Palavras-chave" são "Caminhos de origem" e "Palavras-chave de origem", respectivamente


0

Eu tenho o mesmo problema, a solução está na primeira guia quando você extrai o catálogo, deve colocar UTF8 recommandado e na 3ª guia "Palavras-chave de fontes", clique no botão "Novo item" (segundo botão) e insira uma palavra-chave isso para cada uma das suas palavras-chave (__, _e).


0

Como Otto disse :

Para usuários de Mac , eu faria algo como:

  • Depois de instalado por svn co http://develop.svn.wordpress.org/trunk/ wpdev

Tão...

  • Faça /languages/dir sobre o seu tema
  • Crie um arquivo de comando como lang.commandnesse /languages/diretório
  • Dentro lang.command

adicione código algo como isto ..

#!/bin/bash
cd $(dirname "$0")
php /Users/YOUNAME/wpdev/tools/i18n/makepot.php wp-theme ../../mytheme mytheme.pot

PS: Altere o caminho correto do makepot.php e o mytheme para o nome do seu tema

Agora, toda vez que você quiser criar um novo arquivo .POT , basta executar lang.command

dir


0

Script auto criar arquivo .po, adicionar automaticamente todo o texto do seu código

  1. Adicione load_theme_textdomain ('my-textdomain', DIR . '/ Languages ​​/');
  2. Crie uma pasta wp-content / themes / MY_THEME / languages ​​(adicione o arquivo .mo do seu idioma a esta pasta)
  3. Crie po.php e adicione este script:
<?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. Vá para seu domínio / wp-content / themes / MY_THEME / languages ​​/ po.php e crie o arquivo .po
  2. Copie wp-content / themes / MY_THEME / languages ​​/ [LANG] .po para a área de trabalho e abra com Poedit -> Compile MO -> copie [LANG] .mo para a pasta languages

Use como eco __ ('Este texto', 'seu domínio de texto');


-1

Tente este post: Crie um arquivo .pot ou .po usando o Poedit . Ele descreve o fluxo de trabalho e indica que os arquivos .po e .pot são iguais.

Por padrão, o Poedit salva seu arquivo como um arquivo .po, mas como os dois arquivos são idênticos, você pode contornar isso simplesmente escolhendo salvar o arquivo .po como um arquivo .pot


Isso não funciona para o WordPress e as alterações específicas no sistema de tradução. É incompleto na melhor das hipóteses.
— Otto
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.