def translate_objects(self, nodes, lang=None): """ Translate container items if translatable """ if lang is None: lang = translation.get_request_language(request=self.request) for index, node in enumerate(nodes): if ITranslatable.providedBy(node): nodes[index] = translation.translate_obj(node, lang) return nodes
def process( self, connection ): if interfaces.DEBUG_LOG: log.info("Deleting %r"%self.document_id ) instance = self.resolve() if ITranslatable.providedBy(instance): for lang in languages(): doc_id = self.get_resolver().id(instance, language=lang.value) connection.delete( doc_id ) else: connection.delete( self.document_id )
def process(self, connection): if interfaces.DEBUG_LOG: log.info("Deleting %r" % self.document_id) instance = self.resolve() if ITranslatable.providedBy(instance): for lang in languages(): doc_id = self.get_resolver().id(instance, language=lang.value) connection.delete(doc_id) else: connection.delete(self.document_id)
def get_translation_for(context, lang): """Get the translation for context in language lang """ assert ITranslatable.providedBy(context), "%s %s" % (lang, context) trusted = removeSecurityProxy(context) class_name = trusted.__class__.__name__ mapper = orm.object_mapper(trusted) pk = getattr(trusted, mapper.primary_key[0].name) session = Session() query = session.query(domain.ObjectTranslation).filter( sql.and_(domain.ObjectTranslation.object_id == pk, domain.ObjectTranslation.object_type == class_name, domain.ObjectTranslation.lang == lang)) return query.all()
def __call__(self, context=None): query = self.constructQuery(context) results = query.all() terms = [] title_field = self.title_field or self.token_field title_getter = self.title_getter or (lambda ob: getattr(ob, title_field)) for ob in results: if ITranslatable.providedBy(ob): ob = translate_obj(ob) terms.append(vocabulary.SimpleTerm( value = getattr(ob, self.value_field), token = getattr(ob, self.token_field), title = title_getter(ob), )) return vocabulary.SimpleVocabulary(terms)
def get_field_translations(context, lang): """Get the FieldTranslation items for context fields in language lang NOTE: context may NOT be None """ assert ITranslatable.providedBy(context), "%s %s" % (lang, context) trusted = removeSecurityProxy(context) type_key = naming.polymorphic_identity(trusted.__class__) mapper = orm.object_mapper(trusted) pk = getattr(trusted, mapper.primary_key[0].name) session = Session() query = session.query(domain.FieldTranslation).filter( sql.and_(domain.FieldTranslation.object_type == type_key, domain.FieldTranslation.object_id == pk, domain.FieldTranslation.lang == lang)) return query.all()
def get_translation_for(context, lang): """Get the translation for context in language lang """ assert ITranslatable.providedBy(context), "%s %s" % (lang, context) trusted = removeSecurityProxy(context) class_name = trusted.__class__.__name__ mapper = orm.object_mapper(trusted) pk = getattr(trusted, mapper.primary_key[0].name) session = Session() query = session.query(domain.ObjectTranslation).filter( sql.and_( domain.ObjectTranslation.object_id == pk, domain.ObjectTranslation.object_type == class_name, domain.ObjectTranslation.lang == lang) ) return query.all()
def setUpWidgets(self, ignore_request=False): languages = get_all_languages() self.form_fields = filterFields(self.context, self.form_fields) # do not display empty form fields omit_names = [] for f in self.form_fields: val = getattr(self.context, f.__name__) if val is None: omit_names.append(f.__name__) self.form_fields = self.form_fields.omit(*omit_names) context = self.context if ITranslatable.providedBy(self.context): lang = get_default_language() try: translation = get_field_translations(self.context, lang) except: translation = [] if ( not translation and getattr(self.context, "language", None) and getattr(self.context, "language", None) != lang ): supported_lang = languages.get(lang) if supported_lang: langname = supported_lang.get("native", None) if langname == None: langname = supported_lang.get("name") self.status = translate( _(u"This content is not yet translated into" + " $language", mapping={"language": langname}), domain="bungeni", context=self.request, ) context = copy(removeSecurityProxy(self.context)) for field_translation in translation: setattr(context, field_translation.field_name, field_translation.field_text) self.widgets = form.setUpEditWidgets( self.form_fields, "", context, self.request, adapters=self.adapters, for_display=True, ignore_request=ignore_request, )
def get_field_translations(context, lang): """Get the FieldTranslation items for context fields in language lang NOTE: context may NOT be None """ assert ITranslatable.providedBy(context), "%s %s" % (lang, context) trusted = removeSecurityProxy(context) type_key = naming.polymorphic_identity(trusted.__class__) mapper = orm.object_mapper(trusted) pk = getattr(trusted, mapper.primary_key[0].name) session = Session() query = session.query(domain.FieldTranslation).filter( sql.and_( domain.FieldTranslation.object_type == type_key, domain.FieldTranslation.object_id == pk, domain.FieldTranslation.lang == lang ) ) return query.all()
def setUpWidgets(self, ignore_request=False): languages = get_all_languages() self.form_fields = filterFields(self.context, self.form_fields) #do not display empty form fields omit_names = [] for f in self.form_fields: val = getattr(self.context, f.__name__) if val is None: omit_names.append(f.__name__) self.form_fields = self.form_fields.omit(*omit_names) context = self.context if ITranslatable.providedBy(self.context): lang = self.request.locale.getLocaleID() try: translation = get_translation_for(self.context, lang) except: translation = [] if (not translation and getattr(self.context, "language", None) and getattr(self.context, "language", None) != lang ): supported_lang = languages.get(lang) if supported_lang: langname = supported_lang.get("native", None) if langname == None: langname = supported_lang.get("name") self.status = translate( _(u"This content is not yet translated into" +\ " $language", mapping={"language": langname}), domain="bungeni", context=self.request ) context = copy(removeSecurityProxy(self.context)) for field_translation in translation: setattr(context, field_translation.field_name, field_translation.field_text) self.widgets = form.setUpEditWidgets( self.form_fields, "" , context, self.request, adapters=self.adapters, for_display=True, ignore_request=ignore_request )
def translation_status(self): if ITranslatable.providedBy(self.context) and len(capi.pivot_languages): untranslated = list(capi.pivot_languages) if self.context.language in untranslated: untranslated.remove(self.context.language) for pivot_lang in untranslated: if translation.get_field_translations(self.context, pivot_lang): untranslated.remove(pivot_lang) if len(untranslated): i18n_langs = [] locale = locales.getLocale(get_default_language().split("-")[0], None) for lang in untranslated: if locale and locale.displayNames and locale.displayNames.languages: i18n_langs.append(locale.displayNames.languages.get(lang, lang)) continue i18n_langs.append(lang) return ", ".join(i18n_langs) return translate(_("translated"), context=get_request()) return translate("n/a", context=get_request())
def process( self, connection ): if interfaces.DEBUG_LOG: log.info("Modifying %r"%self.document_id ) instance = self.resolve() # if not instance or instance == interfaces.OP_REQUEUE: # return instance if ITranslatable.providedBy(instance): for lang in languages(): translated_instance = translation.translate_obj(instance, lang=lang.value) translated_instance.language = lang.value doc = interfaces.IIndexer( translated_instance ).document( connection ) doc.id = self.get_resolver().id(instance, language=lang.value) doc.fields.append( xappy.Field('resolver', self.resolver_id ) ) print doc.id connection.replace(doc) else: doc = interfaces.IIndexer( instance ).document( connection ) doc.id = self.document_id doc.fields.append( xappy.Field('resolver', self.resolver_id ) ) connection.replace(doc)
def process(self, connection): if interfaces.DEBUG_LOG: log.info("Modifying %r" % self.document_id) instance = self.resolve() # if not instance or instance == interfaces.OP_REQUEUE: # return instance if ITranslatable.providedBy(instance): for lang in languages(): translated_instance = translation.translate_obj( instance, lang=lang.value) translated_instance.language = lang.value doc = interfaces.IIndexer(translated_instance).document( connection) doc.id = self.get_resolver().id(instance, language=lang.value) doc.fields.append(xappy.Field('resolver', self.resolver_id)) print doc.id connection.replace(doc) else: doc = interfaces.IIndexer(instance).document(connection) doc.id = self.document_id doc.fields.append(xappy.Field('resolver', self.resolver_id)) connection.replace(doc)
def translation_status(self): if ITranslatable.providedBy(self.context) and len(capi.pivot_languages): untranslated = list(capi.pivot_languages) if self.context.language in untranslated: untranslated.remove(self.context.language) for pivot_lang in untranslated: if translation.get_field_translations(self.context, pivot_lang): untranslated.remove(pivot_lang) if len(untranslated): i18n_langs = [] locale = locales.getLocale(get_default_language().split("-")[0], None) for lang in untranslated: if (locale and locale.displayNames and locale.displayNames.languages ): i18n_langs.append( locale.displayNames.languages.get(lang, lang)) continue i18n_langs.append(lang) return ", ".join(i18n_langs) return translate(_("translated"), context=get_request()) return translate("n/a", context=get_request())