Настройка интернационализации i18n Django - PullRequest
0 голосов
/ 14 марта 2019

После публикаций в stackoverflow и множества учебников по реализации интернационализации i18n в Django Admin я основал следующие шаги:

Командная строка Установить (в правом ENV)

    Using PIP: pip install python-gettext (I tried this)

    Using Conda: conda install gettext

settings.py

    MIDDLEWARE = [
                 ...
                 'django.contrib.sessions.middleware.SessionMiddleware',
                 'django.middleware.locale.LocaleMiddleware', #right place
                 'django.middleware.common.CommonMiddleware',
                 ...
    ]
    ...'context_processors': [
                 ...
                 'django.template.context_processors.i18n', # Indifferent place
                 ...
    ]
    ...
    TIME_ZONE = 'UTC'  # America/Sao_Paulo
    USE_I18N = True
    USE_L10N = True        
    USE_TZ = True        
    ugettext = lambda s: s        
    LANGUAGES = (
            ( 'en-us', ugettext( 'English' )),
            ( 'pt-br', ugettext( 'Portuguese' )),
            ( 'es', ugettext( 'Spanish' )),
    )        
    LANGUAGE_CODE = 'en-us' #default
    ...
    SITE_ROOT = os.path.dirname( os.path.realpath( __file__ ) )
    PROJECT_PATH = os.path.abspath( os.path.dirname( __name__ ) )
    LOCALE_PATHS = ( os.path.join( SITE_ROOT, 'locale' ), ) # translation files will be created into 'locale' folder from root project folder

urls.py

admin.autodiscover()
urlpatterns = [
        url( r'^favicon.ico$',
             RedirectView.as_view( url = staticfiles_storage.url( 'images/favicon.png' ), ),
             ),
        ...
]
<b>urlpatterns += i18n_patterns</b>(

        path( r'admin/',
              admin.site.urls
              ),
       ... 
)
urlpatterns += static(
        settings.STATIC_URL, document_root = settings.STATIC_ROOT ) \
             + static(
        settings.MEDIA_URL, document_root = settings.MEDIA_ROOT )

models.py (любой)

    from django.core.validators import RegexValidator
    from django.db import models
    from django.utils.translation import ugettext as _
    ...
    class BusinessType(models.Model):
        businesstype_name = models.CharField(
             verbose_name = _( 'Business Name' ),
             help_text = _( 'Name, Field Type, Activity' ),
             max_length = 32, )

Пользователи Windows (должны иметь)

Пользователям Windows необходимо загрузить два пакета из проекта gnome, чтобы встроить файлы перевода интернационализации i18n в нужную папку / каталог - поэтому загрузите их в правильную систему Windows 64/32 бит gettext-runtime- (последняя версия файла) _win64 или win32 и загрузите gettext-tools- (последняя версия файла) тоже , распакуйте все файлы в одну папку (gettext-tools внутри папки BIN) и добавьте Windows PATH переменная для распознавания этих файлов.

Пользователи MAC (необходимо проверить это)

Я прочитал много текстов с орфографическими ошибками, в которых говорится о случае / верблюжьем деле, в коде «language» учитывается регистр, поэтому будьте осторожны, если вы используете что-то вроде pt- Br :

    LANGUAGES = (
            ( 'en-us', ugettext( 'English' )),
            ( 'pt-br', ugettext( 'Portuguese' )),
            ( 'es', ugettext( 'Spanish' )),
    )    

Создание файлов шаблонов (.po) (для написания переводов)

    At terminal try this to built all specified languages in LANGUAGES and put "-v 3" to show how magic happening 

    python manage.py makemessages --all -v 3

Ничего не происходит (У кого-то такая же ошибка отсутствует)

Все эти шаги приводят к созданию папки 'locale', предположительно работающей 'python manage.py makemessages' и не содержащей ни одного, ничего не создавая, ничего не делая, даже ни одной ошибки. Я действительно потерян из-за этого, и после этого, как я могу получить текущий выбранный код языка для создания альтернативного кода невозможным переводам i18n, таким как:

   PHONE REGEX rules, STATE list,...

1 Ответ

0 голосов
/ 15 марта 2019

Можете ли вы попробовать указать целевой язык для создания?

Например, для испанского:

python manage.py makemessages -l es
...