Я думал, что покажу функционально-программирующий подход. Вы можете вырваться из вложенных функций 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;
}
});
});
В предыдущих ответах упоминается только получение 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)
Если вы хотите что-то, что вы можете использовать из 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 не является модулем
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']
С уважением
Сачин
Я понял из 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'))