Come creare file .pot con POedit?

11 giu 2014, 04:53:08
Visualizzazioni: 80.1K
Voti: 55

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!

1
Commenti

Prova a Creare File POT.

Domain Domain
11 gen 2016 13:34:28
Tutte le risposte alla domanda 11
5
57

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.

11 dic 2018 13:42:22
Commenti

questa dovrebbe essere la nuova risposta accettata

maysi maysi
26 mag 2020 14:54:13

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

charlesdeb charlesdeb
31 dic 2020 18:06:55

IL metodo migliore e più semplice secondo me

wickywills wickywills
30 mar 2021 16:40:45

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

Kamal Ahmed Kamal Ahmed
27 lug 2021 15:32:46

Questa è la risposta più aggiornata perché WP CLI è la soluzione a tutto. Non c'è più bisogno di cercare soluzioni alternative quando esiste un metodo ufficiale e documentato.

Maxime Culea Maxime Culea
8 nov 2022 16:44:41
4
45

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:

  1. Nel menu "File" seleziona "Nuovo"
  2. Seleziona la lingua che hai usato nel tuo tema (probabilmente Inglese)
  3. Nel menu "Catalogo" seleziona "Proprietà"
  4. Inserisci le informazioni del progetto nella scheda "Proprietà di traduzione"
  5. Vai alla 3a scheda "Parole chiave sorgenti"
  6. 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.)
  7. Clicca sul pulsante "OK" in basso
  8. Nel menu "File" seleziona "Salva con nome..."
  9. 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)
  10. Nel menu "Catalogo" seleziona nuovamente "Proprietà"
  11. Vai alla 2a scheda "Percorsi sorgenti"
  12. 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)
  13. 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)
  14. Clicca sul pulsante "OK" in basso
  15. Nella finestra del progetto clicca su "Aggiorna" (2a icona in alto)
  16. Nel menu "File" clicca "Salva"

E il gioco è fatto :)

23 nov 2014 22:55:52
Commenti

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

Otto Otto
30 gen 2016 03:04:18

Ha funzionato molto bene per il mio plugin

Pablo S G Pacheco Pablo S G Pacheco
17 gen 2017 17:12:47

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

Awsme Sandy Awsme Sandy
27 feb 2018 08:51:04

PoEdit (la versione gratuita) non offre l'opzione di salvare un nuovo file come file .pot

PaulJ PaulJ
10 dic 2021 20:00:51
8
27

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.

23 nov 2014 23:07:09
Commenti

funzionerà anche per un plugin?

Maruti Mohanty Maruti Mohanty
25 dic 2014 08:57:48

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

Otto Otto
25 dic 2014 14:39:01

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

Otto Otto
30 gen 2016 03:03:22

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

Ismail Ismail
22 dic 2016 15:14:21

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

Otto Otto
23 dic 2016 11:25:18

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

Ismail Ismail
25 gen 2017 15:53:09

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

Awsme Sandy Awsme Sandy
27 feb 2018 12:18:06

Se stai traducendo un plugin, assicurati di usare "wp-plugin" nel comando in modo che sappia quali header cercare.

Otto Otto
27 feb 2018 23:24:59
Mostra i restanti 3 commenti
5
21

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.
11 giu 2014 05:46:48
Commenti

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

Paras Shah Paras Shah
1 ott 2018 08:21:17

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

Swen Swen
30 nov 2018 18:17:07

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

Loc_rabbirt Loc_rabbirt
17 apr 2020 10:53:43

Non disponibile per Linux :(

Tofandel Tofandel
17 ago 2021 14:19:09

Non più aggiornato, considera l'utilizzo di WP CLI.

Maxime Culea Maxime Culea
8 nov 2022 16:45:25
2

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.

13 lug 2015 22:02:40
Commenti

Questo non funziona per WordPress e le modifiche specifiche al sistema di traduzione. È incompleto nella migliore delle ipotesi.

Otto Otto
30 gen 2016 03:05:30

Woot? È un plugin per WP.

certainlyakey certainlyakey
16 ott 2017 11:31:18
0

Per chiunque preferisca utilizzare Poedit invece di Easy Po.

  1. Scarica (l'ultima versione di) Poedit e installalo
  2. Vai su File>Nuovo. Apparirà una nuova scheda, scegli la lingua della traduzione e Salva (ctrl + s) nella cartella principale del tuo tema WordPress.

  3. 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".

31 mar 2016 04:31:49
0

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

18 ott 2016 06:28:48
0

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

directory

2 mar 2017 13:15:32
0

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.

9 mag 2020 15:46:19
1
-1

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

11 giu 2014 08:43:48
Commenti

Questo non funziona per WordPress e le modifiche specifiche al sistema di traduzione. È incompleto nella migliore delle ipotesi.

Otto Otto
30 gen 2016 03:05:23
1
-1

Script per creare automaticamente il file .po e aggiungere tutti i testi dal tuo codice

  1. Aggiungi load_theme_textdomain('my-textdomain',<strong>DIR</strong>.'/languages/');
  2. Crea la cartella wp-content/themes/MY_THEME/languages (aggiungi il tuo file .mo della lingua in 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='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(); 
  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 aprilo con Poedit -> Compila MO -> copia [LANG].mo nella cartella languages

Usa come echo __('Questo testo','tuo-textdomain');

24 nov 2017 12:24:34
Commenti

Non ha senso farlo, mentre esistono già strumenti CLI che fanno la magia, considera di usare WP CLI per la vittoria.

Maxime Culea Maxime Culea
8 nov 2022 16:46:27