2015-04-20 6 views
1

Не удалось получить какие-либо из моих файлов перевода после того, как compilemessages вступит в силу.Открытие перевода Django с первого взгляда на сайт-пакеты

копания в коде я пришел:

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/' 
] 

Это такой код ядра, испытанный, вероятно, миллион раз, я уверен, что я настройке неправильно, но я не могу увидеть любой путь, что мои LOCALE_PATHS будет когда-нибудь предшествования?

/данные/WWW/локаль/содержание

/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 

settings.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',) 
+0

Из взгляда функции 'check_for_language()', однако, похоже, он ищет только первый допустимый путь и затем возвращает True? Это не помешает загрузке всех последующих языковых файлов? В настоящее время я не пытаюсь переопределить значение Django. – DanH

+0

@sthzg Ahh right, заканчивается терпение, полностью не читающее все :) Я обновлю вопрос с моей текущей конфигурацией и структурой – DanH

+0

@sthzg Конечно, спасибо! Изменено для unicode, но никаких изменений.Обновлен OP с «ЯЗЫКАМИ» и «LOCALE_PATHS». – DanH

ответ

1

Языковые каталоги в /data/www/locale/ должны быть разделены подчеркиванием вместо дефиса. Именование можно сравнить с Django's official repo.

В случае 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 (он не может обнаружить файл изменения за пределами корня проекта), переводы должны отображаться, по крайней мере, это работало для меня, проверяя его в Django Admin с переводом verbose_name_plural тестовой модели.

Одна вещь, которую я заметил, каталог /data/www/locale/ должен быть на пути Python, чтобы Django мог выбирать переводы.

+0

Наконец-то вернулся к этому, и все это, похоже, теперь работает, назвав каталоги в соответствии с официальной ссылкой репо. Большое спасибо – DanH

+0

Спасибо. поэтому zh_CN и zh_Hans являются кодами. – TankorSmash

+0

@TankorSmash 'zh_CN' является своего рода устаревшим (см. [Этот билет для аргумента позади] (https://code.djangoproject.com/ticket/18419)), поэтому для упрощенного китайского' zh_Hans' рекомендуется. – sthzg

 Смежные вопросы

  • Нет связанных вопросов^_^