Cum să creezi fișiere .pot cu POedit?
Am petrecut ore întregi astăzi cu ceea ce părea a fi ceva foarte simplu, și anume crearea unui fișier .pot pentru o temă WordPress pe care o dezvolt. Am citit articolul de pe Smashing Magazine, articolul de pe Tutsplus și câteva alte articole despre cum să folosești Poedit pentru a crea fișiere .pot pentru o temă, și apoi pentru a crea fișiere .mo și .po, dar din păcate, sunt încă blocat la primul pas.
Am instalat Poedit și am observat că interfața este complet diferită față de cea prezentată în toate tutorialele și se pare că nu mai există opțiunea de a crea fișiere .pot. Singura opțiune disponibilă este de a crea fișiere .po și .mo dintr-un fișier .pot existent, ceea ce nu este ceea ce am nevoie acum.
Așadar, poate cineva să-mi spună cum pot crea fișiere .pot folosind Poedit sau prin altă metodă, aș aprecia foarte mult.
Mulțumesc!

Am găsit că cea mai ușoară metodă acum este să folosești WP-CLI. Navighează la tema sau plugin-ul tău și execută următoarea comandă (după ce ai instalat WP-CLI):
wp i18n make-pot . languages/my.pot
(Vezi documentația comenzii)
Apoi poți edita acest fișier cu Poedit sau orice alt instrument de traducere la îndemână.

a trebuit să adaug comutatorul --ignore-domain
la sfârșitul comenzii pentru a obține toate __
(și similare) adăugate în fișierul .pot
deoarece domeniul textului în plugin-ul meu este generat dinamic. Acest lucru adaugă atât informațiile din antetul plugin-ului, cât și șirurile necesare pentru traducere în fișierul .pot

Acesta este cel mai ușor și cel mai bun mod gratuit de a genera un fișier pot. Ar trebui să fie răspunsul principal.

Iată cum poți crea un fișier .pot pentru tema ta folosind Poedit (ediția gratuită, versiunea 1.6.10) pe OS X.
Cea mai bună practică este să salvezi fișierele de limbă într-un director numit "languages" în directorul temei tale. Dacă nu ai făcut-o deja, creează-l înainte de a începe.
În Poedit:
- În meniul "File" selectează "New"
- Selectează limba pe care ai folosit-o în tema ta (probabil engleză)
- În meniul "Catalog" selectează "Properties"
- Introdu informațiile despre proiect în fila "Translation properties"
- Mergi la fila a 3-a "Sources keywords"
- Apasă pe butonul "New item" (al doilea buton) și introdu un cuvânt cheie, repetă acest lucru pentru fiecare dintre cuvintele tale cheie (
__
,_e
,esc_attr_e
, etc.) - Apasă pe butonul "OK" din partea de jos
- În meniul "File" selectează "Save As.."
- Salvează fișierul ca "yourthemename.pot" în directorul "languages" din directorul temei tale (asigură-te că adaugi extensia .pot la numele fișierului, deoarece implicit va salva ca .po)
- În meniul "Catalog" selectează "Properties" din nou
- Mergi la fila a 2-a "Sources paths"
- Setează valoarea pentru "Base path" la
../
(fișierul .pot este salvat într-un subdirector, așa că în acest fel setezi baza la directorul părinte, adică directorul temei tale) - Lângă "Path" apasă pe butonul "New item" și introdu
.
(acest lucru va face ca programul să scaneze directorul temei tale și subdirectoarele sale) - Apasă pe butonul "OK" din partea de jos
- În fereastra proiectului apasă pe "Update" (a doua pictogramă din partea de sus)
- În meniul "File" apasă "Save"
Și gata! :)

Acest lucru nu funcționează pentru WordPress și modificările specifice ale sistemului de traducere. Este incomplet, în cel mai bun caz.

Funcționează pentru plugin, dar nu traduce descrierea plugin-ului din header

Puteți face acest lucru cu instrumentele WordPress, fără a folosi POEdit.
Mai întâi, efectuați un checkout SVN din http://develop.svn.wordpress.org/trunk/:
svn co http://develop.svn.wordpress.org/trunk/ wpdev
Apoi, navigați la directorul cu instrumentele i18n:
cd wpdev/tools/i18n/
Ulterior, rulați scriptul makepot.php pe directorul temei dumneavoastră:
php makepot.php wp-theme /calea/catre/tema/dvs nume-tema.pot
Aceasta va crea un fișier nume-tema.pot pentru dumneavoastră. Folosiți-l în orice instrument standard de traducere preferați.
Această metodă este mai bună pentru că utilizează codul WordPress pentru a găsi funcțiile i18n, astfel încât nu veți rata niciuna dintre ele. În plus, va găsi și va adăuga informații precum cele din antetul temei, cum ar fi numele, descrierea etc. Acest lucru permite ca acestea să fie traduse. Asigurați-vă că includeți antetul "Text Domain:" în style.css pentru ca acestea să funcționeze.

Da, doar folosește "wp-plugin" în loc de "wp-theme" și va genera un fișier POT pentru un plugin.

Orice altă metodă care nu folosește instrumentele specifice WordPress este defectă într-un fel sau altul.

Instrumente minunate! Deși a continuat să arunce erori precum "Nu am putut genera fișierul" chiar dacă am folosit chmod +x
pe directoare..

De ce ar ajuta chmod +x? Poate ar trebui să încerci să faci directorul scriibil în loc de executabil.

Mulțumesc Otto, nu am primit notificare pentru asta, dar acum sunt pe Ubuntu și funcționează aproape perfect!

Am urmat aceiași pași, am tradus tot, dar nu am reușit să traduc descrierea pluginului în secțiunea de antet a pluginului.

Puteți încerca Eazy Po.
- Din meniul fișier, selectați „New from source code files..” (Nou din fișierele codului sursă..).
- În fereastra xgettext Command Manager; apăsați „Browse folder” (Răsfoiește directorul) pentru a selecta folderul sursă de bază.
- În panoul Build, apăsați butonul „Execute Command” (Execută comandă) pentru a genera fișierul Pot.

Mult mai bun și mai ușor de utilizat decât POEdit. Interfață curată. Are toate funcțiile de traducere i18n în lista de cuvinte cheie în mod implicit. Mulțumesc.

Am folosit acest instrument după ce am realizat că funcțiile WordPress în POEdit sunt plătite. A funcționat perfect!

A funcționat perfect și pentru mine și este mult mai ușor, mult mai ușor decât poedit.

Puteți renunța complet la instrumentele externe cu ajutorul plugin-ului Loco Translate. L-am încercat acum aproximativ un an și de atunci nu am mai folosit POEdit. Instalați-l pe site-ul vostru de test și creați un fișier POT cu un singur clic.

Pentru cei care preferă să folosească Poedit în loc de Easy Po.
- Descarcă (cea mai recentă versiune de) Poedit și instalează
Accesează File>New. Va apărea o filă nouă, selectează limba în care dorești să traduci și Salvează (ctrl + s) în folderul root al temei tale WordPress.
Pe pagina următoare, dă click pe - "Extract from sources". Fila care va apărea este similară cu cele din linkurile pe care le-ai inserat. "Project Info" acum se numește "Translation Properties", iar "Paths" și "Keywords" sunt "Sources Paths" și respectiv "Sources keywords".

Am aceeași problemă, soluția se află în primul tab când extrageți catalogul, ar trebui să selectați UTF8 recomandat, iar în al 3-lea tab "Surse de cuvinte cheie", faceți clic pe butonul "Element nou" (al 2-lea buton) și introduceți un cuvânt cheie, repetând acest proces pentru fiecare dintre cuvintele cheie (__, _e).

Cum a spus Otto:
Pentru utilizatorii de Mac, aș face ceva de genul:
- După instalare prin
svn co http://develop.svn.wordpress.org/trunk/ wpdev
Deci...
- Creează un director
/languages/
în tema ta - Creează un fișier de comandă precum
lang.command
în acel director/languages/
- În interiorul
lang.command
adaugă cod cam așa...
#!/bin/bash
cd $(dirname "$0")
php /Users/YOUNAME/wpdev/tools/i18n/makepot.php wp-theme ../../mytheme mytheme.pot
PS: Schimbă calea corectă către makepot.php și mytheme cu numele temei tale
Acum, de fiecare dată când vrei să generezi un nou fișier .POT, poți rula simplu lang.command

O altă soluție alternativă pentru crearea fișierelor .pot pentru cei care preferă NPM este wp-pot. Vine cu o serie de opțiuni pe care le poți personaliza după preferințe. Foarte simplu de configurat.

Încearcă acest articol: Cum să creezi un fișier .pot sau .po folosind Poedit. Acesta descrie fluxul de lucru și indică faptul că fișierele .po și .pot sunt identice.
În mod implicit, Poedit salvează fișierul ca .po, dar deoarece cele două fișiere sunt identice, poți să îl salvezi ca .pot pur și simplu alegând să salvezi fișierul .po ca .pot

Script pentru crearea automată a fișierului .po, adaugă automat toate textele din cod
- Adaugă load_theme_textdomain('my-textdomain',DIR.'/languages/');
- Crează folderul wp-content/themes/MY_THEME/languages (adaugă fișierul .mo al limbii tale în acest folder)
- Crează po.php și adaugă acest script:
<?php /*Script by Sien.com.vn */
define('WP_USE_THEMES', true);
require(''.$_SERVER['DOCUMENT_ROOT'].'/wp-load.php' );
function title_p($title) {
$title='Creare 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">Eroare, Textdomain <b>'.$textdomain.'</b> negăsit!</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">Succes</span> -> Salvat în: '.__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>Limbă: <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 negăsit [ <b>load_theme_textdomain ("your-textdomain","path_to_language_folder");</b> ]</div>';}else{
echo '<p>Textdomain: <select name="textdomain">'.$textdomain.'</select></p>';
}
echo '<p>
<input type="submit" value="Crează fișier .po nou"/>
</p>
</div>
</form>';
unlink(__DIR__.'/textdomain.dat');
}
echo '</div>';
get_footer();
- Accesează youdomain/wp-content/themes/MY_THEME/languages/po.php și creează fișierul .po
- Copiază wp-content/themes/MY_THEME/languages/[LANG].po pe desktop și deschide cu Poedit -> Compilează MO -> copiază [LANG].mo în folderul languages
Folosește ca echo __('Acest text','your-textdomain');
