Коды языков интернационализации Django [закрыто]

Я думал, что покажу функционально-программирующий подход. Вы можете вырваться из вложенных функций Array.prototype.some () и / или Array.prototype.every (), как в моих решениях. Дополнительным преимуществом этого подхода является то, что Object.keys() перечисляет только собственные перечислимые свойства объекта, тогда как «for-in loop также перечисляет свойства в цепочке прототипов» .

Близко к решению OP:

    Args.forEach(function (arg) {
        // This guard is not necessary,
        // since writing an empty string to document would not change it.
        if (!getAnchorTag(arg))
            return;

        document.write(getAnchorTag(arg));
    });

    function getAnchorTag (name) {
        var res = '';

        Object.keys(Navigation.Headings).some(function (Heading) {
            return Object.keys(Navigation.Headings[Heading]).some(function (Item) {
                if (name == Navigation.Headings[Heading][Item].Name) {
                    res = (""
                                 + Navigation.Headings[Heading][Item].Name + " : ");
                    return true;
                }
            });
        });

        return res;
    }

Решение, которое уменьшает итерацию над заголовками / элементами:

    var remainingArgs = Args.slice(0);

    Object.keys(Navigation.Headings).some(function (Heading) {
        return Object.keys(Navigation.Headings[Heading]).some(function (Item) {
            var i = remainingArgs.indexOf(Navigation.Headings[Heading][Item].Name);

            if (i === -1)
                return;

            document.write(""
                                         + Navigation.Headings[Heading][Item].Name + " : ");
            remainingArgs.splice(i, 1);

            if (remainingArgs.length === 0)
                return true;
            }
        });
    });

29
задан ChillarAnand 18 October 2014 в 11:16
поделиться

5 ответов

15
ответ дан histrio 18 October 2014 в 11:16
поделиться

В предыдущих ответах упоминается только получение LANGUAGE из settings.py , однако существует большая вероятность, что эта переменная будет перезаписана. Таким образом, вы можете получить полный список из django.conf.global_settings.LANGUAGES

from django.db import models

from django.conf.global_settings import LANGUAGES

class ModelWithLanguage(models.Model):
    language = models.CharField(max_length=7, choices=LANGUAGES)
15
ответ дан Pawel Furmaniak 18 October 2014 в 11:16
поделиться

Если вы хотите что-то, что вы можете использовать из django, попробуйте:

from django.conf import settings

это будет в формате выше, что делает его идеальным для назначения в одной из ваших моделей выбора = поля. (т. е. user_language = models.CharField(max_length=7, choices=settings.LANGUAGES))

LANGUAGES = (
    ('ar', gettext_noop('Arabic')),
    ('bg', gettext_noop('Bulgarian')),
    ('bn', gettext_noop('Bengali')),
    etc....
    )

Примечание об использовании настроек:

Обратите внимание, что django.conf.settings не является модулем

60
ответ дан Alireza Ghaffari 18 October 2014 в 11:16
поделиться
from django.conf import settings

 #note settings is an object , hence you cannot import its contents

 settings.configure()

 #note LANGUAGES is a tuple of tuples

 lang_dict = dict(settings.LANGUAGES)

 #use lang_dict for your query.

 print lang_dict['en']

С уважением

Сачин

4
ответ дан lennon310 18 October 2014 в 11:16
поделиться

Я понял из Django Project , что вы можете использовать только фиктивную функцию gettext:

Если вы определяете пользовательскую настройку ЯЗЫКОВ, как объяснено в предыдущем пункте, это нормально. помечать языки как строки перевода, но использовать функцию «фиктивная» ugettext(), а не ту, что в django.utils.translation. Вы никогда не должны импортировать django.utils.translation из вашего файла настроек, потому что этот модуль сам по себе зависит от настроек, и это вызовет циклический импорт. ".

Мне потребовалось некоторое время, чтобы найти решение, но я наконец получил его: выбор поля модели должен иметь кортеж с реальными функциями gettext, с лямбда-функцией, манекен может быть обернут в реальные функции gettext следующим образом:

from django.utils.translation import ugettext_lazy as _

language = models.CharField(max_length=5, choices=map(lambda (k,v): (k, _(v)), settings.LANGUAGES), verbose_name=_('language'))
0
ответ дан Wtower 18 October 2014 в 11:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: