1

翻訳ファイルcompilemessagesを有効にするのに問題があります。

私が来たコードを掘り下げる:

django.utils.translation.trans_real.check_for_language

def check_for_language(lang_code):
    # First, a quick check to make sure lang_code is well-formed (#21458)
    if not language_code_re.search(lang_code):
        return False
    for path in all_locale_paths():
        if gettext_module.find('django', path, [to_locale(lang_code)]) is not None:
            return True
    return False

これは以下を利用します:

django.utils.translation.trans_real.all_locale_paths

def all_locale_paths():
    from django.conf import settings
    globalpath = os.path.join(
        os.path.dirname(upath(sys.modules[settings.__module__].__file__)), 'locale')
    return [globalpath] + list(settings.LOCALE_PATHS)

どちらが返されますか:

[
  u'/data/.venv/mysite/local/lib/python2.7/site-packages/django/conf/locale',
  '/data/www/locale/'
]

これはそのようなコア コードであり、おそらく 100 万回テストされています。設定が間違っていると確信していますが、LOCALE_PATHS が優先される方法は実際にはわかりません。

/data/www/locale/コンテンツ

/data/www/locale/
|-- en-us
|   `-- LC_MESSAGES
|       |-- django.mo
|       `-- django.po
|-- zh-hans
|   `-- LC_MESSAGES
|       |-- django.mo
|       `-- django.po
`-- zh-hant
    `-- LC_MESSAGES
        |-- django.mo
        `-- django.po

設定.py

LANGUAGES_DICT = {
    'en-us': _('English'),
    'zh-hant': _('Traditional Chinese'),
    'zh-hans': _('Simplified Chinese'),
}
LANGUAGES = LANGUAGES_DICT.items()

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
path = lambda *a: os.path.join(BASE_DIR, *a)
LOCALE_PATHS = (
    path(u'locale'),
)
# Outputs: (u'/data/www/locale',)
4

1 に答える 1

1

の言語ディレクトリは/data/www/locale/、ハイフンではなくアンダースコアで区切る必要があります。ネーミングは、 Django の公式リポジトリと比較できます。

zh_Hansとの場合zh_Hant、ハイフンの後ろの 4 文字の最初の文字のみを大文字にすることも適切と思われます (とはいえ、それをテストすると、 のような小文字の名前でも機能しましたzh_hans)。

/data/www/locale/
|-- en_US
|-- zh_Hans
`-- zh_Hant

私の以前のコメントに対して、これらのアンダースコアはディレクトリ名にのみ含める必要があり、settings.py.

最初にこの名前でディレクトリを作成するには (ディレクトリが既に存在する場合は再作成する必要はありません。名前を変更するだけで十分です):

$ django-admin.py makemessages -l zh_Hant
$ django-admin.py makemessages -l zh_Hans

メッセージをコンパイルして runserver を再起動した後 (プロジェクト ルート以外のファイルの変更を検出できません)、翻訳が表示されるはずverbose_name_pluralです。

私が気付いたことの 1 つは、/data/www/locale/Django が翻訳を取得できるようにするには、ディレクトリが Python パス上にある必要があることです。

于 2015-04-21T14:18:00.530 に答える