Come creare file .pot con POedit?
Ho passato ore oggi su quello che sembrava qualcosa di davvero semplice, ovvero creare un file .pot per un tema WordPress che sto sviluppando. Ho letto l'articolo di Smashing Magazine, l'articolo di Tutsplus e diversi altri su come utilizzare Poedit per creare file .pot per un tema, e successivamente creare file .mo e .po, ma purtroppo sono ancora bloccato al primo passaggio.
Ho installato Poedit e ho notato che l'interfaccia utente è completamente diversa da quella mostrata in tutti i tutorial e sembra che non ci sia più l'opzione per creare 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 utilizzando Poedit o con qualche altro metodo? Lo apprezzerei molto.
Grazie!

Ho scoperto che il modo più semplice ora è utilizzare WP-CLI. Naviga fino alla tua cartella del tema o del plugin ed esegui il seguente comando (dopo aver installato WP-CLI):
wp i18n make-pot . languages/my.pot
(Vedi la documentazione del comando)
Puoi poi modificare questo file con Poedit o qualsiasi altro strumento utile per la traduzione.

Ho dovuto aggiungere l'opzione --ignore-domain
alla fine del comando per far sì che tutti i __
(e simili) venissero aggiunti al file .pot
, perché il text domain nel mio plugin viene generato dinamicamente. Questo aggiunge sia le informazioni dell'header del plugin che le stringhe necessarie per la traduzione nel file .pot

Questo è il modo più semplice, migliore e gratuito per generare un file .pot. Dovrebbe essere la risposta in cima alla lista.

Ecco come puoi creare un file .pot per il tuo tema con Poedit (edizione gratuita, versione 1.6.10) su OS X.
La migliore pratica è salvare i file di lingua in una cartella chiamata "languages" nella directory del tuo tema. Se non l'hai già fatto, creala prima di iniziare.
In Poedit:
- Nel menu "File" seleziona "Nuovo"
- Seleziona la lingua che hai usato nel tuo tema (probabilmente Inglese)
- Nel menu "Catalogo" seleziona "Proprietà"
- Inserisci le informazioni del progetto nella scheda "Proprietà di traduzione"
- Vai alla 3a scheda "Parole chiave sorgenti"
- Clicca sul pulsante "Nuovo elemento" (2° pulsante) e inserisci una parola chiave, ripeti questo per ognuna delle tue parole chiave (
__
,_e
,esc_attr_e
, ecc.) - Clicca sul pulsante "OK" in basso
- Nel menu "File" seleziona "Salva con nome..."
- Salva il file come "nomedeltuotema.pot" nella cartella "languages" della directory del tuo tema (assicurati di aggiungere l'estensione .pot al nome del file perché di default verrà salvato come .po)
- Nel menu "Catalogo" seleziona nuovamente "Proprietà"
- Vai alla 2a scheda "Percorsi sorgenti"
- Imposta il valore per "Percorso base" a
../
(il file .pot è salvato in una sottodirectory quindi in questo modo imposti la base alla directory parent, cioè la directory del tuo tema) - Accanto a "Percorso" clicca sul pulsante "Nuovo elemento" e inserisci
.
(questo farà in modo che scandisca la directory del tuo tema e le sue sottodirectory) - Clicca sul pulsante "OK" in basso
- Nella finestra del progetto clicca su "Aggiorna" (2a icona in alto)
- Nel menu "File" clicca "Salva"
E il gioco è fatto :)

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

Funziona per il plugin, ma non traduce la descrizione del plugin dall'header

Puoi farlo con gli strumenti di WordPress, senza POEdit.
Innanzitutto, esegui un checkout svn di http://develop.svn.wordpress.org/trunk/:
svn co http://develop.svn.wordpress.org/trunk/ wpdev
Poi, spostati nella directory degli strumenti i18n:
cd wpdev/tools/i18n/
Quindi esegui semplicemente il makepot.php sulla directory del tuo tema:
php makepot.php wp-theme /percorso/del/tuo/tema nome-tema.pot
Questo creerà per te un file nome-tema.pot. Usalo con qualsiasi strumento di traduzione standard che preferisci.
Questo metodo è migliore perché utilizza il codice di WordPress per trovare le funzioni i18n, quindi non ne perderai nessuna. Inoltre, troverà e aggiungerà informazioni come l'intestazione del tema, ad esempio il nome, la descrizione, ecc. Questo permette anche la loro traduzione. Assicurati di includere l'intestazione "Text Domain:" nel tuo style.css per far funzionare queste cose.

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

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

Strumenti fantastici! Anche se continuava a dare errori come "Impossibile generare il file" nonostante avessi eseguito chmod +x
sulle directory..

Perché chmod +x dovrebbe aiutare? Forse dovresti provare a rendere la directory scrivibile invece che eseguibile.

Grazie Otto, non avevo ricevuto la notifica, ma ora sono su Ubuntu e funziona piuttosto perfettamente!

Ho seguito gli stessi passaggi, ho tradotto tutto ma non riesco a tradurre la descrizione del plugin nella sezione header del plugin.

Puoi provare Eazy Po.
- Dal menu File seleziona "Nuovo da file di codice sorgente...".
- Nella finestra di gestione comandi xgettext; premi "Sfoglia cartella" per selezionare la cartella sorgente di base.
- Nel pannello Build premi il pulsante "Esegui comando" per generare il file Pot.

Molto meglio e più semplice di POEdit. Interfaccia pulita. Ha tutte le funzioni di traduzione i18n nella lista delle parole chiave di default. Grazie.

L'ho usato dopo aver scoperto che le funzionalità WordPress di POEdit sono a pagamento. Ha funzionato perfettamente!

Ha funzionato perfettamente anche per me ed è più semplice, molto più semplice di poedit.

Puoi abbandonare completamente gli strumenti esterni con il plugin Loco Translate. L'ho provato circa un anno fa e da allora non ho più usato POEdit. Installalo sul tuo sito di test e crea il file POT con un click.

Per chiunque preferisca utilizzare Poedit invece di Easy Po.
- Scarica (l'ultima versione di) Poedit e installalo
Vai su File>Nuovo. Apparirà una nuova scheda, scegli la lingua della traduzione e Salva (ctrl + s) nella cartella principale del tuo tema WordPress.
Nella pagina successiva che vedrai, clicca su - "Estrai dalle sorgenti". La scheda che apparirà è simile a quelle utilizzate nei link che hai incollato. "Informazioni progetto" ora è "Proprietà traduzione", così come "Percorsi" e "Parole chiave" sono rispettivamente "Percorsi sorgenti" e "Parole chiave sorgenti".

Ho lo stesso problema, la soluzione si trova nella prima scheda quando estrai il catalogo, dovresti selezionare UTF8 raccomandato, e nella terza scheda "Parole chiave sorgenti", clicca sul pulsante "Nuovo elemento" (secondo pulsante) e inserisci una parola chiave e ripeti questa operazione per ognuna delle tue parole chiave (__, _e).

Come ha detto Otto :
Per gli utenti Mac, farei qualcosa come:
- Dopo l'installazione tramite
svn co http://develop.svn.wordpress.org/trunk/ wpdev
Quindi...
- Crea la directory
/languages/
nel tuo tema - Crea un file di comando come
lang.command
in quella directory/languages/
- 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: Modifica 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

Un'altra soluzione alternativa per creare file .pot per chi preferisce NPM è wp-pot. Offre molte opzioni che puoi personalizzare a tuo piacimento. Estremamente semplice da configurare.

Prova questo articolo: Creare un file .pot o .po utilizzando Poedit. Descrive il flusso di lavoro e indica che i file .po e .pot sono identici.
Di default Poedit salva il tuo file come un file .po, ma dato che i due file sono identici puoi aggirare questa limitazione semplicemente scegliendo di salvare il file .po come un file .pot

Script per creare automaticamente il file .po e aggiungere tutti i testi dal tuo codice
- Aggiungi
load_theme_textdomain('my-textdomain',<strong>DIR</strong>.'/languages/');
- Crea la cartella
wp-content/themes/MY_THEME/languages
(aggiungi il tuo file .mo della lingua in questa cartella) - 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='Creazione file PO';
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">Errore, Textdomain <b>'.$textdomain.'</b> non trovato!</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">Successo</span> -> Salvato in: '.__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>Lingua: <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">Textdomain non trovato [ <b>load_theme_textdomain ("tuo-textdomain","percorso_cartella_lingua");</b> ]</div>';}else{
echo '<p>Textdomain: <select name="textdomain">'.$textdomain.'</select></p>';
}
echo '<p>
<input type="submit" value="Crea nuovo file .po"/>
</p>
</div>
</form>';
unlink(__DIR__.'/textdomain.dat');
}
echo '</div>';
get_footer();
- Vai su youdomain/wp-content/themes/MY_THEME/languages/po.php e crea il file .po
- Copia wp-content/themes/MY_THEME/languages/[LANG].po sul desktop e aprilo con Poedit -> Compila MO -> copia [LANG].mo nella cartella languages
Usa come echo __('Questo testo','tuo-textdomain');
