Come creare file .pot con POedit?


33

Oggi ho passato ore su quello che sembrava qualcosa di veramente semplice, che è quello di creare un file .pot per un tema Wordpress che sto creando. Ho letto l' articolo di Smashing Magazine , l' articolo Tutsplus e pochi altri su come usare Poedit per creare file .pot per un tema, quindi creare file .mo e .po, ma purtroppo sono ancora bloccato al primo passo.

Ho installato Poedit e trovo che l'interfaccia utente sia completamente diversa da quella mostrata in tutti i tutorial e sembra che non ci sia più un'opzione per creare il file .pot. L'unica cosa disponibile è creare file .po e .mo da un file .pot esistente, che non è quello di cui ho bisogno ora.

Quindi qualcuno può dirmi come posso creare file .pot usando Poedit o con qualche altro metodo, lo apprezzerei davvero.

Grazie!


Risposte:


18

Puoi provare Eazy Po .

  • Dal menu file selezionare "Nuovo da file di codice sorgente ...".
  • Nella finestra di xgettext Command Manager; Premere "Sfoglia cartella" per selezionare la cartella di origine di base.
  • Nel riquadro di costruzione premere il pulsante "Esegui comando" per generare il file Pot.

Molto meglio e più facile di POEdit. UI pulita. Ha tutte le funzioni di traduzione i18n nell'elenco delle parole chiave per impostazione predefinita. Grazie.
Paras Shah,

Utilizzato questo dopo aver realizzato che le funzionalità di WordPress di POEdit sono state pagate. Ha funzionato perfettamente!
Swen,

37

Ecco come puoi creare un file .pot per il tuo tema con Poedit (versione gratuita, versione 1.6.10) su OS X.

È consigliabile salvare i file di lingua in una cartella denominata "lingue" nella directory del tema. Se non l'hai già fatto, crealo prima di iniziare.

In Poedit:

  1. Nel menu "File" seleziona "Nuovo"
  2. Seleziona la lingua che hai usato nel tuo tema (probabilmente inglese)
  3. Nel menu "Catalogo" selezionare "Proprietà"
  4. Immettere le informazioni sul progetto nella scheda "Proprietà della traduzione"
  5. Vai alla terza scheda "Parole chiave delle fonti"
  6. Fare clic sul pulsante (2 ° tasto) "Nuova voce" e inserire una parola chiave e ripetere questa operazione per ogni parola chiave ( __, _e, esc_attr_e, etc.)
  7. Fai clic sul pulsante "OK" in basso
  8. Nel menu "File" seleziona "Salva con nome .."
  9. Salvare il file come "yourthemename.pot" nella cartella "lingue" nella directory del tema (assicurarsi di aggiungere l'estensione .pot al nome del file perché per impostazione predefinita verrà salvato come .po)
  10. Nel menu "Catalogo" selezionare nuovamente "Proprietà"
  11. Vai alla seconda scheda "Percorsi delle fonti"
  12. Impostare il valore per "Percorso base" su ../(il file .pot viene salvato in una sottodirectory, in questo modo si imposta la base sulla directory principale, ovvero la directory del tema)
  13. Accanto a "Percorso" fai clic sul pulsante "Nuovo elemento" e inserisci .(questo consentirà di scansionare la tua directory dei temi e le sue sottodirectory)
  14. Fai clic sul pulsante "OK" in basso
  15. Nella finestra del progetto fai clic su "Aggiorna" (seconda icona in alto)
  16. Nel menu "File" fai clic su "Salva"

E hai finito :)


Questo non funziona per WordPress e le modifiche specifiche al sistema di traduzione. Nella migliore delle ipotesi è incompleto.
Otto

1
Ha funzionato davvero bene per il mio plugin
Pablo SG Pacheco il

Funziona con il plugin, ma non traduce la descrizione del plugin dall'intestazione
Awsme Sandy,

25

Puoi farlo con gli strumenti di WordPress, senza POEdit.

Innanzitutto, fai un checkout svn su http://develop.svn.wordpress.org/trunk/ :

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

Quindi, passa alla directory degli strumenti i18n al suo interno:

cd wpdev/tools/i18n/

Quindi esegui makepot.php sulla directory del tuo tema:

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

Questo creerà un file themename.pot per te. Usalo in qualsiasi strumento di traduzione standard che ti piace.

Questo è meglio perché usa il codice WordPress per trovare le funzioni i18n, quindi non ti perderai nessuna di esse. Inoltre, troverà e aggiungerà cose come le informazioni dell'intestazione del tema, come il nome, la descrizione, ecc. Ciò consente anche a quelli di essere tradotti. Assicurati di includere l'intestazione "Dominio di testo:" nel tuo style.css affinché funzioni.


funzionerà anche per un plugin?
Maruti Mohanty,

2
Sì, basta usare "wp-plugin" invece di "wp-theme" e genererà un file POT per un plugin.
Otto

Ogni altro metodo che non utilizza gli strumenti specifici di WordPress è in qualche modo rotto.
Otto

Strumenti fantastici! Anche se continuava a generare errori come "Impossibile generare il file" anche se io chmod +xle directory ..
Samuel Elh,

1
Perché chmod + x aiuta? Forse dovresti provare a rendere la directory scrivibile anziché eseguibile.
Otto

5

Ho scoperto che il modo più semplice ora è usare WP-CLI . Passare al tema o plug-in ed eseguire il comando seguente (dopo l'installazione di WP-CLI):

wp i18n make-pot . languages/my.pot

(Vedi la documentazione del comando)

È quindi possibile modificare questo file con Poedit o qualsiasi altro strumento di traduzione utile.


0

Puoi eliminare completamente gli strumenti esterni con il plug-in Loco Translate . L'ho provato circa un anno fa e da allora non ho mai più utilizzato POEdit. Installalo sul tuo sito di test e crea il file POT con un clic.


Questo non funziona per WordPress e le modifiche specifiche al sistema di traduzione. Nella migliore delle ipotesi è incompleto.
Otto

Woot? È un plugin WP.
sicuramente il

0

Per chiunque abbia voluto usare Poedit invece di Easy Po.

  1. Scarica (ultima versione di) Poedit e installa
  2. Vai al file> Nuovo. Apparirà una nuova scheda, scegli la tua lingua di traduzione e Salva (ctrl + s) nella cartella principale del tuo tema wordpress.

  3. Nella pagina che vedrai dopo, clicca su "Estrai dalle fonti". La scheda che vedrai dopo è simile a quella usata nei link che hai incollato. "Informazioni sul progetto" ora è "Proprietà della traduzione", così come "Percorsi" e "Parole chiave" sono rispettivamente "Percorsi delle fonti" e "Parole chiave delle fonti"


0

Ho lo stesso problema, la soluzione è nella prima scheda quando si estrae il catalogo, dovrebbe essere raccomandato UTF8 e nella 3a scheda "Parole chiave delle fonti", fare clic sul pulsante "Nuovo elemento" (secondo pulsante) e inserire una parola chiave e ripetere questo per ciascuna delle tue parole chiave (__, _e).


0

Come diceva Otto :

Per gli utenti Mac , farei qualcosa del tipo:

  • Dopo l'installazione di svn co http://develop.svn.wordpress.org/trunk/ wpdev

Così...

  • Crea /languages/dir sul tuo tema
  • Creare un file comando come lang.commandin quella /languages/dir
  • Dentro lang.command

aggiungi un codice simile a questo ..

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

PS: cambia il percorso corretto di makepot.php e mytheme con il nome del tuo tema

Ora ogni volta che vuoi creare un nuovo file .POT , puoi semplicemente eseguire lang.command

dir


0

Lo script crea automaticamente il file .po, aggiunge automaticamente tutto il testo dal tuo codice

  1. Aggiungi load_theme_textdomain ('my-textdomain', DIR . '/ Languages ​​/');
  2. Crea cartella wp-content / themes / MY_THEME / languages ​​(aggiungi il tuo file .mo della lingua a questa cartella)
  3. Crea po.php e aggiungi questo 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. Vai su youdomain / wp-content / themes / MY_THEME / languages ​​/ po.php e crea il file .po
  2. Copia wp-content / themes / MY_THEME / languages ​​/ [LANG] .po sul desktop e apri con Poedit -> Compila MO -> copia [LANG] .mo in lingue cartella delle

Usa come eco __ ('Questo testo', 'tu -dominio');


-1

Prova questo post: crea un file .pot o .po usando Poedit . Descrive il flusso di lavoro e indica che i file .po e .pot sono gli stessi.

Per impostazione predefinita, Poedit salva il tuo file come file .po ma poiché i due file sono identici puoi aggirarlo semplicemente scegliendo di salvare il file .po come file .pot


Questo non funziona per WordPress e le modifiche specifiche al sistema di traduzione. Nella migliore delle ipotesi è incompleto.
Otto
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.