Comment créer des fichiers .pot avec POedit?

34

Aujourd'hui, j'ai passé des heures sur ce qui semblait être une chose très simple, à savoir créer un fichier .pot pour un thème Wordpress que je crée. J'ai lu l' article de Smashing Magazine , l' article de Tutsplus et quelques autres expliquant comment utiliser Poedit pour créer des fichiers .pot pour un thème, puis créer des fichiers .mo et .po, mais malheureusement, je suis toujours bloqué au premier étape.

J'ai installé Poedit et je trouve que l'interface utilisateur est complètement différente de celle qui est montrée dans tous les tutoriels et il semble qu'il n'y ait plus d'option pour créer un fichier .pot. La seule chose disponible est de créer des fichiers .po et .mo à partir d'un fichier .pot existant, ce qui n'est pas ce dont j'ai besoin maintenant.

Alors quelqu'un peut-il me dire comment créer des fichiers .pot à l'aide de Poedit ou d'une autre méthode, je l'apprécierais vraiment.

Merci!

utilisateur1981248
la source
Essayez de créer des fichiers POT .
WisdmLabs

Réponses:

18

Vous pouvez essayer Eazy Po .

  • Dans le menu Fichier, sélectionnez "Nouveau à partir des fichiers de code source ..".
  • Dans la fenêtre xgettext Command Manager; Appuyez sur «Parcourir le dossier» pour sélectionner le dossier source.
  • Dans le volet Construction, appuyez sur le bouton «Exécuter la commande» pour générer le fichier Pot.
ٍ Shagrouni
la source
Bien meilleur et plus facile que POEdit. Interface utilisateur propre. A toutes les fonctions de traduction i18n dans la liste des mots clés par défaut. Merci.
Paras Shah
Utilisé après avoir réalisé que les fonctionnalités WordPress de POEdit sont payantes. A parfaitement fonctionné!
Swen
37

Voici comment vous pouvez créer un fichier .pot pour votre thème avec Poedit (édition gratuite, version 1.6.10) sur OS X.

La meilleure pratique consiste à enregistrer les fichiers de langue dans un dossier nommé "languages" dans le répertoire de votre thème. Si ce n'est déjà fait, créez-le avant de commencer.

À Poedit:

  1. Dans le menu "Fichier", sélectionnez "Nouveau"
  2. Sélectionnez la langue que vous avez utilisée dans votre thème (probablement l'anglais)
  3. Dans le menu "Catalogue" sélectionnez "Propriétés"
  4. Entrez les informations du projet dans l'onglet "Propriétés de la traduction"
  5. Aller au 3ème onglet "Sources des mots clés"
  6. Cliquez sur le bouton « Nouvel élément » (bouton 2) et entrez un mot - clé et répétez cette opération pour chacun de vos mots - clés ( __, _e, esc_attr_e, etc.)
  7. Cliquez sur le bouton "OK" en bas
  8. Dans le menu "Fichier", sélectionnez "Enregistrer sous .."
  9. Enregistrez le fichier sous "yourthemename.pot" dans le dossier "languages" de votre répertoire de thème (assurez-vous d'ajouter l'extension .pot au nom du fichier car, par défaut, il sera enregistré au format .po)
  10. Dans le menu "Catalogue", sélectionnez à nouveau "Propriétés"
  11. Aller au 2ème onglet "Sources des chemins"
  12. Définissez la valeur de "Chemin de base" sur ../(le fichier .pot est enregistré dans un sous-répertoire. Ainsi, vous définissez la base sur le répertoire parent, c'est-à-dire votre répertoire de thème).
  13. À côté de "Chemin", cliquez sur le bouton "Nouvel élément" et entrez-le .(cela lui permettra d'analyser votre répertoire de thèmes et ses sous-répertoires).
  14. Cliquez sur le bouton "OK" en bas
  15. Dans la fenêtre du projet, cliquez sur "Mettre à jour" (2ème icône en haut)
  16. Dans le menu "Fichier", cliquez sur "Enregistrer"

Et tu as fini :)

Jaspe
la source
Cela ne fonctionne pas pour WordPress et les modifications spécifiques apportées au système de traduction. C'est au mieux incomplet.
Otto
1
Cela a très bien fonctionné pour mon plugin
Pablo SG Pacheco le
Cela fonctionne pour le plugin, mais ne traduit pas la description du plugin à partir de l'en-tête
Awsme Sandy
25

Vous pouvez le faire avec les outils WordPress, sans POEdit.

Commencez par effectuer un check-out sur http://develop.svn.wordpress.org/trunk/ :

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

Ensuite, accédez au répertoire des outils i18n:

cd wpdev/tools/i18n/

Ensuite, exécutez simplement makepot.php sur le répertoire de votre thème:

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

Cela créera un fichier nom_meime.pot pour vous. Utilisez-le dans n'importe quel outil de traduction standard que vous aimez.

C’est mieux car il utilise le code WordPress pour trouver les fonctions de l’i18n, vous ne manquerez donc aucune d’elles. En outre, il trouvera et ajoutera des éléments tels que les informations d'en-tête de thème, telles que le nom, la description, etc. Cela permet également de les traduire. Assurez-vous d'inclure l'en-tête "Domaine de texte:" dans votre style.css pour que ceux-ci fonctionnent.

Otto
la source
cela fonctionnera-t-il aussi pour un plugin?
Maruti Mohanty
2
Oui, utilisez simplement "wp-plugin" au lieu de "wp-theme" et cela générera un fichier POT pour un plugin.
Otto
Toute autre méthode qui n'utilise pas les outils spécifiques à WordPress est cassée d'une manière ou d'une autre.
Otto
Des outils géniaux! Même s'il continuait à générer des erreurs du type "Impossible de générer le fichier", même si je me trouvais dans chmod +xles répertoires.
Samuel Elh
1
Pourquoi chmod + x aiderait-il? Peut-être devriez-vous essayer de rendre le répertoire accessible en écriture au lieu d'exécutable.
Otto
6

J'ai trouvé que le moyen le plus simple consiste maintenant à utiliser le WP-CLI . Accédez à votre thème ou plug-in et exécutez la commande suivante (après l'installation de WP-CLI):

wp i18n make-pot . languages/my.pot

(Voir la documentation de la commande)

Vous pouvez ensuite éditer ce fichier avec Poedit ou tout autre outil de traduction très pratique.

Lhermann
la source
0

Vous pouvez supprimer des outils externes avec le plugin Loco Translate . Je l'ai essayé il y a environ un an et je n'ai jamais utilisé POEdit depuis. Installez-le sur votre site de test et créez un fichier POT en un clic.

Ihor Vorotnov
la source
Cela ne fonctionne pas pour WordPress et les modifications spécifiques apportées au système de traduction. C'est au mieux incomplet.
Otto
Woot? C'est un plugin WP.
Certainement
0

Pour tous ceux qui souhaitaient utiliser Poedit au lieu de Easy Po.

  1. Télécharger (dernière version de) Poedit et installer
  2. Aller dans fichier> Nouveau. Un nouvel onglet va apparaître, choisissez votre langue de traduction et enregistrez (ctrl + s) dans le dossier racine de votre thème wordpress.

  3. Sur la page que vous verrez ensuite, cliquez sur - "Extraire des sources". L'onglet que vous verrez ensuite est similaire à ceux utilisés dans les liens que vous avez collés. "Informations sur le projet" est désormais "Propriétés de la traduction", ainsi que "Chemins" et "Mots-clés" sont respectivement "Chemins des sources" et "Mots clés de sources"

Toheeb
la source
0

J'ai le même problème, la solution est dans le premier onglet lorsque vous extrayez le catalogue, devrait mettre UTF8 recommandé, et dans le 3ème onglet "Sources des mots clés", cliquez sur le bouton "Nouvel élément" (2ème bouton) et entrez un mot clé puis répétez ceci pour chacun de vos mots-clés (__, _e).

utilisateur105155
la source
0

Comme disait Otto :

Pour les utilisateurs de Mac , je voudrais faire quelque chose comme:

  • Après installé par svn co http://develop.svn.wordpress.org/trunk/ wpdev

Alors...

  • Faire /languages/ dir sur votre thème
  • Faire un fichier de commande comme lang.commanddans/languages/ répertoire
  • À l'intérieur lang.command

ajouter du code quelque chose comme ça ..

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

PS: Changer votre bon makepot.php chemin et mythème à votre nom du thème

Maintenant, chaque fois que vous voulez créer un nouveau fichier .POT , vous pouvez simplement lancer lang.command.

dir

l2aelba
la source
0

Script de création automatique de fichier .po, ajout automatique de tout le texte de votre code

  1. Ajoutez load_theme_textdomain ('my-textdomain', DIR . '/ Languages ​​/');
  2. Créez un dossier wp-content / themes / MY_THEME / languages ​​(ajoutez votre fichier .mo de langue à ce dossier)
  3. Créez po.php et ajoutez ce 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. Allez dans youdomain / wp-content / themes / MY_THEME / languages ​​/ po.php et créez le fichier .po
  2. Copiez wp-content / themes / MY_THEME / languages ​​/ [LANG] .po sur le bureau et ouvrez-le avec Poedit -> Compiler MO -> copier le dossier [LANG] .mo to languages

Utiliser comme echo __ ('Ce texte', 'you-textdomain');

Siên
la source
-1

Essayez ce post: Créez un fichier .pot ou .po en utilisant Poedit . Il décrit le flux de travail et indique que les fichiers .po et .pot sont identiques.

Par défaut, Poedit enregistre votre fichier sous forme de fichier .po, mais comme les deux fichiers sont identiques, vous pouvez contourner ce problème en choisissant simplement d'enregistrer le fichier .po en tant que fichier .pot.

Andrew
la source
Cela ne fonctionne pas pour WordPress et les modifications spécifiques apportées au système de traduction. C'est au mieux incomplet.
Otto