【问题标题】:Setup internationalization i18n Django设置国际化 i18n Django
【发布时间】:2019-08-05 17:00:46
【问题描述】:

按照 * 帖子和大量教程在 Django Admin 中实现 i18n 国际化,我创建了以下步骤:

命令行安装(在右侧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-(last file version)_win64win32 并下载gettext-tools-(last file version) too,将所有文件解压到同一个文件夹(gettext-tools在BIN文件夹内),并添加Windows PATH变量来识别这些文件。

MAC 用户(必须勾选)

我读过很多关于将 case/camel-Case 拼写成“语言”代码的拼写错误的文本,这些代码是区分大小写的,所以在使用 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,...

【问题讨论】:

    标签: python django internationalization django-admin django-i18n


    【解决方案1】:

    您可以尝试指定要创建的目标语言吗?

    例如西班牙语:

    python manage.py makemessages -l es
    

    【讨论】: