Почему в Django 1.11 неправильно работает локализация? - PullRequest
2 голосов

Я перевожу названия приложений в Russian.Но я не понимаю, почему некоторые приложения переводятся, а другие нет.Вот пример.

Это не работает:

#: donation/apps.py:9
msgid "Donation"
msgstr "Донат"

Это работает:

#: reputation/apps.py:9
msgid "Reputation"
msgstr "Репутация"

пожертвования / приложения

from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _

from django.apps import AppConfig


class DonationConfig(AppConfig):
    name = 'donation'
    verbose_name = _('Donation')

репутация / приложения

from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _

from django.apps import AppConfig


class ReputationConfig(AppConfig):
    name = 'reputation'
    verbose_name = _('Reputation')

настройки

# Internationalization
LANGUAGE_CODE = 'ru'

USE_I18N = True

USE_L10N = False

LANGUAGES = (
    ## Customize this
    ('ru', gettext('Russian')),
)

LOCALE_PATHS = (
    path('locale'),
)

шаблон

<div class="app-donation module">
        <table>
        <caption>
            <a href="/admin/donation/" class="section" title="Модели в приложении Donation">Donation</a>
        </caption>

            <tr class="model-projectfriend">

                <th scope="row"><a href="/admin/donation/projectfriend/">Project Friends</a></th>



                <td><a href="/admin/donation/projectfriend/add/" class="addlink">Добавить</a></td>



                <td><a href="/admin/donation/projectfriend/" class="changelink">Изменить</a></td>

            </tr>

            <tr class="model-projectrelease">

                <th scope="row"><a href="/admin/donation/projectrelease/">Project Releases</a></th>



                <td><a href="/admin/donation/projectrelease/add/" class="addlink">Добавить</a></td>



                <td><a href="/admin/donation/projectrelease/" class="changelink">Изменить</a></td>

            </tr>

            <tr class="model-projectdonation">

                <th scope="row"><a href="/admin/donation/projectdonation/">Project donations</a></th>



                <td><a href="/admin/donation/projectdonation/add/" class="addlink">Добавить</a></td>



                <td><a href="/admin/donation/projectdonation/" class="changelink">Изменить</a></td>

            </tr>

            <tr class="model-releasetask">

                <th scope="row"><a href="/admin/donation/releasetask/">Release Tasks</a></th>



                <td><a href="/admin/donation/releasetask/add/" class="addlink">Добавить</a></td>



                <td><a href="/admin/donation/releasetask/" class="changelink">Изменить</a></td>

            </tr>

        </table>
        </div>

enter image description here

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Исправлено LOCALE_PATHS, чтобы указать на фактический путь. Это не path, используемый для URL, а фактический путь, такой как "/home/user/path/to/locale/dir".

Что я использую в своих проектах это:

# settings.py

def here(*path):
    return join(abspath(dirname(__file__)), *path)


PROJECT_ROOT = here("..")  # adjust here if your settings.py is nested more


def root_is(*path):
    return join(abspath(PROJECT_ROOT), *path)


ROOT = root_is  # ROOT("") == project root

Выше объявлено в верхней части моего settings.py файла. Затем, если я хочу сослаться на путь к каталогу (например, LOCALE_PATHS), я делаю это:

LOCALE_PATHS = (
    ROOT('path/to/locale'),
)

Если вы хотите использовать обычный формат, который Django использует по умолчанию (BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), то вы можете использовать:

LOCALE_PATHS = (
    ROOT(os.path.join(BASE_DIR, "locale")),
)

Убедитесь, что вы print эти переменные в первую очередь, чтобы убедиться, что пути правильные.

0 голосов

Приложение (Donation) не было определено в файле __init__ в этом приложении.

default_app_config = 'donation.apps.DonationConfig'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...