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!

user1981248
fonte
Tente criar arquivos POT .
WisdmLabs

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.
ٍ Shagrouni
fonte
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 :)

Jaspe
fonte
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.

Otto
fonte
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.

lhermann
fonte
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.

Ihor Vorotnov
fonte
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

Toheeb
fonte
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).

user105155
fonte
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

l2aelba
fonte
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');

Siên
fonte
-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

Andrew
fonte
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