Jak tworzyć pliki .pot za pomocą POedit?


33

Spędziłem dziś godziny na czymś, co wydawało się czymś naprawdę prostym, jakim jest stworzenie pliku .pot dla motywu Wordpress, który tworzę. Czytałem artykuł Smashing Magazine , ten artykuł Tutsplus i kilka innych, w jaki sposób korzystać z Poedit stworzyć .pot pliki do tematu, a następnie utworzyć .mo i plików .po, ale niestety, ja nadal tkwi w pierwszym krok.

Zainstalowałem Poedit i okazało się, że interfejs użytkownika jest zupełnie inny niż ten pokazany we wszystkich samouczkach i wygląda na to, że nie ma już opcji utworzenia pliku .pot. Jedyne, co jest dostępne, to tworzenie plików .po i .mo z istniejącego pliku .pot, czego nie potrzebuję teraz.

Więc czy ktoś może mi powiedzieć, jak mogę utworzyć pliki .pot za pomocą Poedit lub inną metodą, naprawdę byłbym wdzięczny.

Dzięki!


Odpowiedzi:


18

Możesz spróbować Eazy Po .

  • Z menu pliku wybierz „Nowy z plików kodu źródłowego ..”.
  • W oknie Menedżera poleceń xgettext; Naciśnij „Przeglądaj folder”, aby wybrać podstawowy folder źródłowy.
  • W okienku kompilacji naciśnij przycisk „Wykonaj polecenie”, aby wygenerować plik Pot.

O wiele lepszy i łatwiejszy niż POEdit. Wyczyść interfejs użytkownika. Domyślnie ma wszystkie funkcje tłumaczenia i18n na liście słów kluczowych. Dziękuję Ci.
Paras Shah

Wykorzystano to po uświadomieniu sobie, że funkcje WordPressa POEdit są płatne. Działa idealnie!
Swen

37

Oto, w jaki sposób możesz utworzyć plik .pot dla swojego motywu za pomocą Poedit (wersja bezpłatna, wersja 1.6.10) na OS X.

Najlepszą praktyką jest zapisywanie plików językowych w folderze o nazwie „języki” w katalogu motywów. Jeśli jeszcze tego nie zrobiłeś, utwórz go przed rozpoczęciem.

W Poedit:

  1. W menu „Plik” wybierz „Nowy”
  2. Wybierz język użyty w motywie (prawdopodobnie angielski)
  3. W menu „Katalog” wybierz „Właściwości”
  4. Wprowadź informacje o projekcie w zakładce „Właściwości tłumaczenia”
  5. Przejdź na trzecią kartę „Źródła słowa kluczowe”
  6. Kliknij na przycisk „Nowa pozycja” przycisk (przycisk 2) i wpisać słowo kluczowe i powtórz to dla każdego słowa kluczowego ( __, _e, esc_attr_e, itd.)
  7. Kliknij przycisk „OK” u dołu
  8. W menu „Plik” wybierz „Zapisz jako…”
  9. Zapisz plik jako „twoja_nazwa.pot” w folderze „języki” w katalogu motywów (pamiętaj, aby dodać rozszerzenie .pot do nazwy pliku, ponieważ domyślnie zostanie zapisany jako .po)
  10. W menu „Katalog” wybierz ponownie „Właściwości”
  11. Przejdź na drugą kartę „Ścieżki źródeł”
  12. Ustaw wartość „Ścieżka podstawowa” na ../(plik .pot jest zapisywany w podkatalogu, dzięki czemu ustawiasz bazę na katalog nadrzędny, tj. Katalog motywów)
  13. Obok „Ścieżki” kliknij przycisk „Nowy element” i wejdź .(spowoduje to przeskanowanie katalogu motywów i jego podkatalogów)
  14. Kliknij przycisk „OK” u dołu
  15. W oknie projektu kliknij „Aktualizuj” (2. ikona u góry)
  16. W menu „Plik” kliknij „Zapisz”

I jesteś skończony :)


To nie działa w przypadku WordPress i określonych zmian w systemie tłumaczeń. W najlepszym razie jest niekompletna.
Otto

1
Działa naprawdę dobrze dla mojej wtyczki
Pablo SG Pacheco

Działa dla wtyczki, ale nie tłumaczy opisu wtyczki z nagłówka
Awsme Sandy

25

Możesz to zrobić za pomocą narzędzi WordPress, bez POEdit.

Najpierw wykonaj transakcję svn na stronie http://develop.svn.wordpress.org/trunk/ :

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

Następnie przejdź do katalogu narzędzi i18n w nim:

cd wpdev/tools/i18n/

Następnie po prostu uruchom makepot.php w katalogu motywu:

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

Spowoduje to utworzenie pliku themename.pot. Użyj go w dowolnym standardowym narzędziu do tłumaczenia, które Ci się podoba.

Jest to lepsze, ponieważ wykorzystuje kod WordPress do wyszukiwania funkcji i18n, więc nie umknie żadna z nich. Dodatkowo znajdzie i doda takie informacje, jak informacje nagłówka motywu, takie jak nazwa, opis itp. Pozwala to również na ich przetłumaczenie. Upewnij się, że dołączasz nagłówek „Domena tekstowa:” do swojego style.css, aby działały.


czy to też zadziała dla wtyczki?
Maruti Mohanty

2
Tak, po prostu użyj „wp-plugin” zamiast „wp-theme”, a wygeneruje plik POT dla wtyczki.
Otto,

Każda inna metoda, która nie korzysta z określonych narzędzi WordPress, jest w jakiś sposób zepsuta.
Otto

Niesamowite narzędzia! Mimo to ciągle pojawiały się błędy, takie jak „Nie można wygenerować pliku”, mimo że ja chmod +xw katalogach ..
Samuel Elh,

1
Dlaczego chmod + x miałby pomóc? Być może powinieneś spróbować uczynić katalog zapisywalnym zamiast wykonywalnym.
Otto

5

Znalazłem teraz najłatwiejszy sposób korzystania z WP-CLI . Przejdź do motywu lub wtyczki i wykonaj następujące polecenie (po zainstalowaniu WP-CLI):

wp i18n make-pot . languages/my.pot

(Zobacz dokumentację polecenia)

Następnie możesz edytować ten plik za pomocą Poedit lub innego przydatnego narzędzia do tłumaczenia.


0

Możesz całkowicie upuścić narzędzia zewnętrzne dzięki wtyczce Loco Translate . Próbowałem tego około rok temu i od tego czasu nigdy nie korzystałem z POEdit. Zainstaluj go na swojej stronie testowej i utwórz plik POT jednym kliknięciem.


To nie działa w przypadku WordPress i określonych zmian w systemie tłumaczeń. W najlepszym razie jest niepełna.
Otto

Woot? To wtyczka WP.
pewnościąakey

0

Dla każdego, kto chciałby używać Poedit zamiast Easy Po.

  1. Pobierz (najnowszą wersję) Poedit i zainstaluj
  2. Przejdź do pliku> Nowy. Pojawi się nowa karta, wybierz język tłumaczenia i Zapisz (ctrl + s) w folderze głównym motywu Wordpress.

  3. Na stronie, którą zobaczysz dalej, kliknij - „Wyciąg ze źródeł”. Karta, którą zobaczysz obok, jest podobna do tej użytej w wklejonych linkach. „Informacje o projekcie” to teraz „Właściwości tłumaczenia”, a „Ścieżki” i „Słowa kluczowe” to odpowiednio „Ścieżki źródeł” i „Słowa kluczowe źródeł”


0

Mam ten sam problem, rozwiązanie znajduje się w pierwszej zakładce podczas wypakowywania katalogu, powinno się polecić UTF8, a na trzeciej karcie „Źródłowe słowa kluczowe” kliknij przycisk „Nowy element” (drugi przycisk), wprowadź słowo kluczowe i powtórz to dla każdego słowa kluczowego (__, _e).


0

Jak powiedział Otto :

Dla użytkowników komputerów Mac zrobiłbym coś takiego:

  • Po zainstalowaniu przez svn co http://develop.svn.wordpress.org/trunk/ wpdev

Więc...

  • Stwórz /languages/katalog na swój temat
  • Dodać do pliku komend jak lang.commandw tym /languages/katalogu
  • Wewnątrz lang.command

dodaj kod coś takiego ..

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

PS: Zmień swoją prawidłową makepot.php ścieżkę i Mytheme do nazwy tematu

Teraz za każdym razem, gdy chcesz utworzyć nowy plik .POT , możesz po prostu uruchomić lang.command

reż


0

Skrypt automatycznie tworzy plik .po, automatycznie dodaje cały tekst z twojego kodu

  1. Dodaj load_theme_textdomain ('my-textdomain', DIR . '/ Languages ​​/');
  2. Utwórz folder wp-content / themes / MY_THEME / languages ​​(dodaj plik .mo języka do tego folderu)
  3. Utwórz po.php i dodaj ten skrypt:
<?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. Przejdź do youdomain / wp-content / themes / MY_THEME / languages ​​/ po.php i utwórz plik .po
  2. Skopiuj wp-content / themes / MY_THEME / languages ​​/ [LANG] .po na pulpit i otwórz za pomocą Poedit -> Compile MO -> skopiuj [LANG] .mo do folderu języków

Użyj jako echo __ („Ten tekst”, „you-textdomain”);


-1

Spróbuj tego postu: Utwórz plik .pot lub .po za pomocą Poedit . Opisuje przepływ pracy i wskazuje, że pliki .po i .pot są takie same.

Domyślnie Poedit zapisuje plik jako plik .po, ale ponieważ oba pliki są identyczne, możesz obejść ten problem, po prostu zapisując plik .po jako plik .pot


To nie działa w przypadku WordPress i określonych zmian w systemie tłumaczeń. W najlepszym razie jest niepełna.
Otto
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.