Saltar al contenido

Django-admin.py makemessages no funciona

Posterior a buscar en varios repositorios y páginas webs de internet al final hemos dado con la resolución que te compartimos ahora.

Solución:

Después de asegurarme de que tenía esto en la configuración:

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

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

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

brew link gettext --force

manage.py compilemessages

django-admin.py makemessages -l es

Y BAM. Tengo mi archivo po.

Pero el médico 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 ` 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

Por favor, intente esto en Ubuntu

sudo apt-get install gettext

Y use brew install gettext en OSX

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

Esta es la solución para quienes 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 Django 1.4, a continuación se prueba en 1.7.1:

En ajustes.py…

Agregue 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 los IDIOMAS a los que traducirá el sitio:

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

Agregue el procesador de contexto de plantilla i18n, las solicitudes ahora incluirán IDIOMAS y LANGUAGE_CODE:

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',  
)

Anidar, 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')),

Ver Misceláneo en Traducciones para más información sobre esto.

Agregue las siguientes importaciones y encapsule las URL que desea 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 direcciones URL de administrador en i18n_patterns.

Ahora, en cualquier lugar donde use texto y quiera convertirlo, importe lazytext y envuelva cada string con él así _(‘texto’), incluso puede ir a sus otros archivos urls.py y hacer la traducción de URL así:

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

Puede envolver el texto que desea traducir en sus otros archivos, como models.py, views.py, etc. Aquí hay un campo de modelo de ejemplo con traducciones para etiqueta y texto de ayuda:

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 ingresar a sus plantillas y cargar la etiqueta de plantilla i18n y usar trans y transblock en el static cosas que quieras traducir. Aquí hay un ejemplo:

% load i18n %

% trans "This is a translation" %

% blocktrans with book_t='book title' This is book_t by author_t . Block trans is powerful! % endblocktrans %

Ahora ejecuta makemessages para cada uno de tus locales:

./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 compilar los mensajes:

./manage.py compilemessages

Hay mucho más que aprender con las traducciones y la internacionalización está estrechamente relacionada con este tema, así que consulte también la documentación. También recomiendo revisar 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 siguió esto, debería tener un buen comienzo. Creo que esta es la forma más estandarizada de hacer que su sitio funcione en varios idiomas. ¡Salud!

Si estás contento con lo expuesto, tienes la habilidad dejar un artículo acerca de qué le añadirías a este escrito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *