X-Git-Url: https://git.mdrn.pl/prawokultury.git/blobdiff_plain/b1fb752ca1abb051a63da4729e34a80affc25c76..09f046d960613fb4022cd7f4ad5a66a9787bc32a:/migdal/helpers.py diff --git a/migdal/helpers.py b/migdal/helpers.py index 39f5a60..8a6513d 100644 --- a/migdal/helpers.py +++ b/migdal/helpers.py @@ -20,7 +20,7 @@ class EntryType(namedtuple('EntryType', 'db slug commentable on_main')): def field_getter(name): @property def getter(self): - val = getattr(self, "%s_%s" % (name, get_language())) + val = getattr(self, "%s_%s" % (name, get_language()), None) if not val: val = getattr(self, "%s_%s" % (name, settings.LANGUAGE_CODE)) return val @@ -34,9 +34,8 @@ def add_translatable(model, fields, languages=None): for name, field in fields.items(): for lang_code, lang_name in languages: new_field = copy(field) - if hasattr(field, 'verbose_name') and field.verbose_name: + if field.verbose_name: new_field.verbose_name = string_concat(field.verbose_name, ' [%s]' % lang_code) - new_field.contribute_to_class(model, "%s_%s" % (name, lang_code)) setattr(model, name, field_getter(name)) # add setter? @@ -72,3 +71,27 @@ def i18n_patterns(prefix, *args): return pattern_list return pattern_list + [MyLocaleRegexURLResolver(pattern_list)] + +def add_translatable_index(index_class, fields, languages=None): + """Adds some translatable fields to a search index, and a getter.""" + if languages is None: + languages = settings.LANGUAGES + for name, field in fields.items(): + for lang_code, lang_name in languages: + new_field = copy(field) + fname = "%s_%s" % (name, lang_code) + new_field.index_fieldname = new_field.index_fieldname \ + and "%s_%s" % (new_field.index_fieldname, lang_code) \ + or fname + new_field.model_attr = new_field.model_attr \ + and "%s_%s" % (new_field.model_attr, lang_code) \ + or fname + setattr(index_class, fname, new_field) + index_class.fields[fname] = new_field + + +def translated_fields(field_names, languages=settings.LANGUAGES): + return tuple("%s_%s" % (field_name, lang_code) + for field_name in field_names + for lang_code, lang_name in languages + )