¿Cómo crear archivos .pot con POedit?


33

He pasado horas hoy en lo que parecía algo realmente simple, que es crear un archivo .pot para un tema de Wordpress que estoy creando. He leído el artículo de Smashing Magazine , el artículo de Tutsplus y algunos otros sobre cómo usar Poedit para crear archivos .pot para un tema, y ​​luego crear archivos .mo y .po, pero lamentablemente, todavía estoy atascado al principio paso.

Instalé Poedit y descubrí que la interfaz de usuario es completamente diferente de la que se muestra en todos los tutoriales y parece que ya no hay una opción para crear un archivo .pot. Lo único que está disponible es crear archivos .po y .mo a partir de un archivo .pot existente, que no es lo que necesito ahora.

Entonces, ¿alguien puede decirme cómo puedo crear archivos .pot usando Poedit o con algún otro método? Realmente lo agradecería.

¡Gracias!


Respuestas:


18

Puedes probar Eazy Po .

  • Desde el menú de archivo, seleccione "Nuevo desde archivos de código fuente ...".
  • En la ventana del Administrador de comandos xgettext; Presione "Examinar carpeta" para seleccionar la carpeta de origen base.
  • En el panel Construir, presione el botón "Ejecutar comando" para generar el archivo Pot.

Mucho mejor y más fácil que POEdit. IU limpia. Tiene todas las funciones de traducción de i18n en la lista de palabras clave de forma predeterminada. Gracias.
Paras Shah

Usé esto después de darme cuenta de que las características de WordPress de POEdit son pagas. Funcionó perfectamente!
Swen

37

Así es como puede crear un archivo .pot para su tema con Poedit (edición gratuita, versión 1.6.10) en OS X.

La mejor práctica es guardar archivos de idioma en una carpeta llamada "idiomas" en su directorio de temas. Si aún no lo ha hecho, créelo antes de comenzar.

En Poedit:

  1. En el menú "Archivo", seleccione "Nuevo"
  2. Seleccione el idioma que utilizó en su tema (probablemente inglés)
  3. En el menú "Catálogo", seleccione "Propiedades"
  4. Ingrese la información del proyecto en la pestaña "Propiedades de traducción"
  5. Vaya a la tercera pestaña "Palabras clave de fuentes"
  6. Haga clic en el botón (botón de segundo) "Nuevo elemento" e introduzca una palabra clave y repetir esta operación para cada una de las palabras clave ( __, _e, esc_attr_e, etc.)
  7. Haga clic en el botón "Aceptar" en la parte inferior
  8. En el menú "Archivo", seleccione "Guardar como .."
  9. Guarde el archivo como "yourthemename.pot" en la carpeta "languages" en su directorio de temas (asegúrese de agregar la extensión .pot al nombre del archivo porque de manera predeterminada se guardará como .po)
  10. En el menú "Catálogo", seleccione "Propiedades" nuevamente
  11. Vaya a la segunda pestaña "Rutas de origen"
  12. Establezca el valor para " ../Ruta de base" en (el archivo .pot se guarda en un subdirectorio, de esta manera configura la base en el directorio principal, es decir, el directorio de su tema)
  13. Junto a "Ruta", haga clic en el botón "Nuevo elemento" e ingrese .(esto hará que escanee su directorio de temas y sus subdirectorios)
  14. Haga clic en el botón "Aceptar" en la parte inferior
  15. En la ventana del proyecto, haga clic en "Actualizar" (segundo icono en la parte superior)
  16. En el menú "Archivo", haga clic en "Guardar"

Y tu estas listo :)


Esto no funciona para WordPress y los cambios específicos en el sistema de traducción. Está incompleto en el mejor de los casos.
Otto

1
Funcionó muy bien para mi complemento
Pablo SG Pacheco

Funciona para el complemento, pero no traduce la descripción del complemento del encabezado
Awsme Sandy

25

Puede hacer esto con las herramientas de WordPress, sin POEdit.

Primero, haga un pago de svn de http://develop.svn.wordpress.org/trunk/ :

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

Luego, cambie al directorio de herramientas i18n en él:

cd wpdev/tools/i18n/

Luego simplemente ejecute el makepot.php sobre el directorio de su tema:

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

Esto creará un archivo themename.pot para usted. Úselo en cualquier herramienta de traducción estándar que desee.

Esto es mejor porque usa el código de WordPress para encontrar las funciones de i18n, por lo que no se perderá ninguna de ellas. Además, encontrará y agregará elementos como la información del encabezado del tema, como el nombre, la descripción, etc. Esto también permite traducirlos. Asegúrese de incluir el encabezado "Text Domain:" en su style.css para que funcionen.


¿funcionará esto también para un complemento?
Maruti Mohanty

2
Sí, simplemente use "wp-plugin" en lugar de "wp-theme" y generará un archivo POT para un complemento.
Otto

Cualquier otro método que no use las herramientas específicas de WordPress está roto de alguna manera.
Otto

Herramientas impresionantes! Aunque seguía arrojando errores como "No se pudo generar el archivo" a pesar de que yo chmod +xlos directorios ..
Samuel Elh

1
¿Por qué ayudaría chmod + x? Tal vez deberías intentar hacer que el directorio sea editable en lugar de ejecutable.
Otto

5

Encontré que la forma más fácil ahora es usar la WP-CLI . Navegue hasta su tema o complemento y ejecute el siguiente comando (después de instalar WP-CLI):

wp i18n make-pot . languages/my.pot

(Ver documentación del comando)

Luego puede editar este archivo con Poedit o cualquier otra herramienta de traducción útil.


0

Puede soltar herramientas externas por completo con el complemento Loco Translate . Lo probé hace aproximadamente un año y nunca utilicé POEdit desde entonces. Instálelo en su sitio de prueba y cree un archivo POT con un solo clic.


Esto no funciona para WordPress y los cambios específicos en el sistema de traducción. Está incompleto en el mejor de los casos.
Otto

Woot? Es un complemento de WP.
Ciertamente, el

0

Para cualquiera que quisiera usar Poedit en lugar de Easy Po.

  1. Descargar (última versión de) Poedit e instalar
  2. Vaya a archivo> Nuevo. Aparecerá una nueva pestaña, elija su idioma de traducción y Guardar (ctrl + s) en la carpeta raíz de su tema de WordPress.

  3. En la página que verá a continuación, haga clic en "Extraer de las fuentes". La pestaña que verá a continuación es similar a la utilizada en los enlaces que pegó. "Información del proyecto" ahora es "Propiedades de traducción", así como "Rutas" y "Palabras clave" son "Rutas de fuentes" y "Palabras clave de fuentes" respectivamente


0

Tengo el mismo problema, la solución está en la primera pestaña cuando extrae el catálogo, debe poner UTF8 recomendado, y en la tercera pestaña "Palabras clave de fuentes", haga clic en el botón "Nuevo elemento" (segundo botón) e ingrese una palabra clave y repita esto para cada una de sus palabras clave (__, _e).


0

Como dijo Otto :

Para los usuarios de Mac , haría algo como:

  • Después de instalado por svn co http://develop.svn.wordpress.org/trunk/ wpdev

Asi que...

  • Haz /languages/dir sobre tu tema
  • Hacer un archivo de comando como lang.commanden ese /languages/directorio
  • Dentro lang.command

agregue código como este ...

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

PD: Cambie su ruta correcta de makepot.php y mytheme a su nombre de tema

Ahora, cada vez que desee crear un nuevo archivo .POT , puede ejecutar lang.command

dir


0

Script crea automáticamente el archivo .po, agrega automáticamente todo el texto de tu código

  1. Agregue load_theme_textdomain ('my-textdomain', DIR . '/ Languages ​​/');
  2. Cree la carpeta wp-content / themes / MY_THEME / languages ​​(agregue su archivo .mo de idioma a esta carpeta)
  3. Crea po.php y agrega este 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. Vaya a youdomain / wp-content / themes / MY_THEME / languages ​​/ po.php y cree el archivo .po
  2. Copie wp-content / themes / MY_THEME / languages ​​/ [LANG] .po al escritorio y ábralo con Poedit -> Compile MO -> copie [LANG] .mo a la carpeta de idiomas

Use como echo __ ('Este texto', 'usted-dominio de texto');


-1

Prueba esta publicación: crea un archivo .pot o .po usando Poedit . Describe el flujo de trabajo e indica que los archivos .po y .pot son iguales.

Por defecto, Poedit guarda su archivo como un archivo .po, pero como los dos archivos son idénticos, puede evitarlo simplemente eligiendo guardar el archivo .po como un archivo .pot


Esto no funciona para WordPress y los cambios específicos en el sistema de traducción. Está incompleto en el mejor de los casos.
Otto
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.