python django homebrew gettext

python - django-admin.py makemessages no funciona



homebrew gettext (8)

Estoy tratando de traducir una cadena.

{% load i18n %} {% trans "Well, Hello there, how are you?" %}

a...

Hola amigo, ¿que tal?

Mi archivo settings.py tiene esto:

LOCALE_PATHS = ( os.path.join(BASE_DIR, ''translations''), )

Y estoy obteniendo esto:

(env)glitch:translations nathann$ django-admin.py compilemessages CommandError: Can''t find msgfmt. Make sure you have GNU gettext tools 0.15 or newer installed.

Tampoco entiendo este mensaje de error.

(env)glitch:ipals nathann$ django-admin.py makemessages -l es CommandError: This script should be run from the Django Git tree or your project or app tree. If you did indeed run it from the Git checkout or your project or application, maybe you are just missing the conf / locale(in the django tree) or locale(for project and application) directory? It is not created automatically, you have to create it by hand if you want to enable i18n for your project or application.

Los documentos: https://docs.djangoproject.com/en/1.6/ref/django-admin/#django-admin-makemessages

Y para votos ascendentes de bonificación, una pregunta relacionada: gettext no estaba vinculado cuando lo instalé ... ¿Alguna ayuda con este? ¿Debería forzarlo?

glitch:translations nathann$ brew link gettext Warning: gettext is keg-only and must be linked with --force Note that doing so can interfere with building software.

¡Gracias!

ACTUALIZACIONES:

Desde entonces, he cambiado el nombre de las traducciones a la configuración regional y actualicé mi settings.py en consecuencia. luego volví a ejecutar esto y todavía me quejo de gettext:

(env)glitch:ipals nathann$ mv translations/ locale (env)glitch:ipals nathann$ django-admin.py makemessages -l es CommandError: Can''t find xgettext. Make sure you have GNU gettext tools 0.15 or newer installed.

También encontré esto:

Comprender las dependencias homebrew y keg-only

después de leer esto:

(env)glitch:ipals nathann$ brew install gettext Warning: gettext-0.18.3.2 already installed (env)glitch:ipals nathann$ brew link gettext Warning: gettext is keg-only and must be linked with --force Note that doing so can interfere with building software.


¿Ha agregado {% load i18n %} a la parte superior de su plantilla?

Bonificación: no necesita vincular gettext, ¿cuál es el resultado del brew doctor ?


Aquí está la solución para aquellos que tienen problemas con las traducciones o están creando un sitio en varios idiomas por primera vez en Django. Esta es la forma en que lo hago, y lo he estado haciendo desde que Django 1.4, a continuación, se prueba en 1.7.1:

En settings.py ...

Agregar a MIDDLEWEAR_CLASSES, configuración regional, habilita la selección de idioma según la solicitud:

''django.middleware.locale.LocaleMiddleware'',

Agregue LOCALE_PATHS, aquí es donde se almacenarán sus archivos de traducción, también habilite i18N:

USE_I18N = True LOCALE_PATHS = ( os.path.join(PROJECT_PATH, ''locale/''), )

Establezca IDIOMAS a los que va a traducir el sitio:

ugettext = lambda s: s LANGUAGES = ( (''en'', ugettext(''English'')), (''fr'', ugettext(''French'')), (''pl'', ugettext(''Polish'')), )

Agregue el procesador de contexto de la plantilla i18n, las solicitudes ahora incluirán IDIOMAS y CÓDIGO_DE_LIGA:

TEMPLATE_CONTEXT_PROCESSORS = ( ''django.contrib.auth.context_processors.auth'', ''django.core.context_processors.debug'', ''django.core.context_processors.i18n'', # this one ''django.core.context_processors.request'', ''django.core.context_processors.static'', ''django.contrib.messages.context_processors.messages'', )

Nest, en urls.py:

En url_patterns, agregue lo siguiente, habilitará la vista de redirección de idioma establecida:

url(r''^i18n/'', include(''django.conf.urls.i18n'')),

Vea Misceláneo en Translations para más información sobre esto.

Agregue las siguientes importaciones y encapsule las URL que quiere traducir con i18n_patterns. Así es como se ve el mío:

from django.conf.urls.i18n import i18n_patterns from django.utils.translation import ugettext_lazy as _ urlpatterns = patterns('''', url(r''^admin/'', include(admin.site.urls)), url(r''^i18n/'', include(''django.conf.urls.i18n'')), ) urlpatterns += i18n_patterns('''', (_(r''^dual-lang/''), include(''duallang.urls'')), (r''^'', include(''home.urls'')), )

Nota: También puede colocar sus URL de administrador en i18n_patterns.

Ahora en cualquier lugar donde use texto y quiera convertirlo, importe texto difuso y envuelva cada cadena como _ (''texto''), incluso puede ir a sus otros archivos urls.py y hacer la traducción url de esta manera:

url(_(r''^dual_language/$''), landing, name=''duallang_landing''),

Puede ajustar el texto que desee traducir en sus otros archivos, como models.py, views.py, etc. Aquí hay un ejemplo de campo de modelo con traducciones para label y help_text:

name = models.CharField(_(''name''), max_length=255, unique=True, help_text=_("Name of the FAQ Topic"))

¡Los documentos de traducción de Django son geniales para esto!

En tus plantillas html ...

Ahora puede ir a sus plantillas y cargar la etiqueta de plantilla i18n y usar trans y transblock en las cosas estáticas que desea traducir. Aquí hay un ejemplo:

{% load i18n %} {% trans "This is a translation" %}<br><br> {% blocktrans with book_t=''book title''|title author_t=''an author''|title %} This is {{ book_t }} by {{ author_t }}. Block trans is powerful! {% endblocktrans %}

Ahora ejecute makemessages para cada una de sus configuraciones regionales:

./manage.py makemessages -l pl

Y ahora todo lo que queda es ir a su carpeta / locales y editar cada uno de los archivos .po. Complete los datos para cada msgstr. Aquí hay un ejemplo de eso:

msgid "English" msgstr "Angielski"

Y finalmente compila los mensajes:

./manage.py compilemessages

Hay mucho más que aprender con las traducciones y la internationalization está estrechamente relacionada con este tema, así que echa un vistazo a los documentos para ello. También recomiendo consultar algunos de los paquetes de internacionalización disponibles para Django como django-rosetta y django-linguo . Ayudan a traducir el contenido del modelo, django-rosetta no crea nuevas entradas para esto en su base de datos, mientras que django-linguo sí lo hace.

Si sigues esto, deberías tener un buen comienzo. Creo que esta es la forma más estandarizada para hacer que su sitio se ejecute en varios idiomas. ¡Aclamaciones!


Después de asegurarme de tener esto en la configuración:

LOCALE_PATHS = ( os.path.join(BASE_DIR, ''locale''), ) print(LOCALE_PATHS)

Comprobé dos veces que tenía el directorio de locale en el lugar correcto con su nombre escrito correctamente.

Terminé vinculando gettext (después de preguntar sobre eso en superuser ):

brew link gettext --force manage.py compilemessages django-admin.py makemessages -l es

Y BAM. Tengo mi archivo po.

Pero el doctor dice:

Warning: Some keg-only formula are linked into the Cellar. Linking a keg-only formula, such as gettext, into the cellar with `brew link <formula>` will cause other formulae to detect them during the `./configure` step. This may cause problems when compiling those other formulae. Binaries provided by keg-only formulae may override system binaries with other strange results. You may wish to `brew unlink` these brews: gettext


Instale gettext en su sistema operativo Ubuntu usando el comando sudo apt-get

O en Mac

usando el comando brew


Para macOS :

brew install gettext export PATH="/usr/local/opt/gettext/bin:$PATH"


Para los usuarios de Mac brew link gettext --force puede ser un riesgo, como aconseja Brew. Un mejor trabajo es establecer una nueva PATH variable para su entorno virtual. Por lo tanto, en el archivo postactivate , que se encuentra en la carpeta bin de su carpeta de entorno virtual, escriba:

export TEMP_PATH=$PATH export PATH=$PATH:/usr/local/Cellar/gettext/0.19.7/bin

Tenga en cuenta que debe reemplazar 0.19.7 por la versión que está instalada en su máquina.

Y en su archivo de predeactivate , que se encuentra en la misma carpeta del archivo postactivate , escriba:

export PATH=$TEMP_PATH unset TEMP_PATH

Ahora puede usar python manage.py makemessages -l <desired_language> sin preocupaciones. :)

Aclamaciones.


Por favor, intente esto en Ubuntu

sudo apt-get install gettext

Y use brew install gettext en OSX

También asegúrese de establecer la ruta local en el archivo settings.py.


Si no desea vincular gettext (que no debería porque molestarse con los elementos internos de OS X es malo), entonces puede establecer la PATH para el comando makemessages . Lo siguiente debería funcionar (pero debe ajustar su número de versión gettext):

PATH=/usr/local/Cellar/gettext/<installed version>/bin/:$PATH && / django-admin makemessages -l <language>

Si lo haces de esa forma, tu gettext instalado gettext siendo barril solo y django-admin estará feliz y encontrará todos los programas que necesita.