def test_duplicate_translations_are_discarded_when_linking(self): folder_uhoh = create(Builder('folder').titled(u'uhoh')) self.items = self.items[:2] self.items.append({ '_path': '/uhoh', '_canonicalTranslation': False, '_translationOf': '/de', 'language': 'en', }) items = self._run_transmogrifier() self.assertEqual(3, len(items)) uhoh_manager = ITranslationManager(folder_uhoh) manager = ITranslationManager(self.folder_en) uhoh_manager.update() manager.update() self.assertEqual('en', ILanguage(folder_uhoh).get_language()) self.assertEqual(1, len(uhoh_manager.get_translated_languages())) languages = manager.get_translated_languages() self.assertEqual(2, len(languages)) self.assertIn('de', languages) self.assertIn('en', languages)
def deletable_languages(context): manager = ITranslationManager(context) translated_languages = manager.get_translated_languages() language_tool = getToolByName(context, "portal_languages") language_infos = language_tool.getAvailableLanguages() content_language = ILanguage(context).get_language() languages = [] for lang in translated_languages: if lang not in content_language: native = language_infos[lang].get("native", None) name = language_infos[lang].get("name", lang) languages.append(SimpleVocabulary.createTerm(lang, lang, native or name)) return SimpleVocabulary(languages)
def translated_urls(context): manager = ITranslationManager(context) translated_languages = manager.get_translated_languages() content_language = ILanguage(context).get_language() if content_language in translated_languages: translated_languages.remove(content_language) languages = [] for lang in translated_languages: translation = manager.get_restricted_translation(lang) if translation is not None: term = SimpleVocabulary.createTerm(lang, lang, translation.absolute_url()) languages.append(term) return SimpleVocabulary(languages)
def deletable_languages(context): manager = ITranslationManager(context) translated_languages = manager.get_translated_languages() language_tool = getToolByName(context, 'portal_languages') language_infos = language_tool.getAvailableLanguages() content_language = ILanguage(context).get_language() languages = [] for lang in translated_languages: if lang not in content_language: native = language_infos[lang].get('native', None) name = language_infos[lang].get('name', lang) languages.append( SimpleVocabulary.createTerm(lang, lang, native or name)) return SimpleVocabulary(languages)
def translated_urls(context): manager = ITranslationManager(context) translated_languages = manager.get_translated_languages() content_language = ILanguage(context).get_language() if content_language in translated_languages: translated_languages.remove(content_language) languages = [] for lang in translated_languages: translation = manager.get_restricted_translation(lang) if translation is not None: languages.append( SimpleVocabulary.createTerm(lang, lang, translation.absolute_url())) return SimpleVocabulary(languages)
def translated_languages(context): language_tool = getToolByName(context, "portal_languages") language_infos = language_tool.getAvailableLanguages() manager = ITranslationManager(context) # take care to filter out translated contents # wich do no have supported language information translated_languages = [a for a in manager.get_translated_languages() if a in language_infos] content_language = ILanguage(context).get_language() if content_language in translated_languages: translated_languages.remove(content_language) languages = [] for lang in translated_languages: native = language_infos[lang].get("native", None) name = language_infos[lang].get("name", lang) languages.append(SimpleVocabulary.createTerm(lang, lang, native or name)) return SimpleVocabulary(languages)
def untranslated_languages(context): language_tool = getToolByName(context, 'portal_languages') language_infos = language_tool.getAvailableLanguages() available_portal_languages = language_tool.supported_langs manager = ITranslationManager(context) translated_languages = manager.get_translated_languages() if is_shared(context): translated_languages = [] languages = [] for lang in available_portal_languages: if lang not in translated_languages: native = language_infos[lang].get('native', None) name = language_infos[lang].get('name', lang) languages.append( SimpleVocabulary.createTerm(lang, lang, native or name)) return SimpleVocabulary(languages)
def untranslated_languages(context): language_tool = getToolByName(context, 'portal_languages') language_infos = language_tool.getAvailableLanguages() available_portal_languages = language_tool.supported_langs manager = ITranslationManager(context) translated_languages = manager.get_translated_languages() if is_language_independent(context): translated_languages = [] languages = [] for lang in available_portal_languages: if lang not in translated_languages: native = language_infos[lang].get('native', None) name = language_infos[lang].get('name', lang) languages.append( SimpleVocabulary.createTerm(lang, lang, native or name)) return SimpleVocabulary(languages)
def available_languages_provider(context): """ Create a vocabulary with all available languages """ # fail-safe context context = closest_content(context) ltool = api.portal.get_tool('portal_languages') supported_languages = ltool.getSupportedLanguages() tm = ITranslationManager(context) translated_languages = tm.get_translated_languages() items = [(l, info.get('name', l)) for (l, info) in ltool.getAvailableLanguageInformation().items() if l in supported_languages and l not in translated_languages] items = [SimpleTerm(i[0], i[0], i[1]) for i in items] return SimpleVocabulary(items)
def translated_languages(context): language_tool = getToolByName(context, 'portal_languages') language_infos = language_tool.getAvailableLanguages() manager = ITranslationManager(context) # take care to filter out translated contents # wich do no have supported language information translated_languages = [ a for a in manager.get_translated_languages() if a in language_infos ] content_language = ILanguage(context).get_language() if content_language in translated_languages: translated_languages.remove(content_language) languages = [] for lang in translated_languages: native = language_infos[lang].get('native', None) name = language_infos[lang].get('name', lang) languages.append( SimpleVocabulary.createTerm(lang, lang, native or name)) return SimpleVocabulary(languages)
def run(self, resource, *args, **kwds): """Change the rdf resource """ context = self.context # ZZZ: should watch for availability of plone.app.multilingual if has_plone_multilingual: tm = ITranslationManager(context) translations = tm.get_translated_languages() if translations: translations_objs = filter( None, [tm.get_translation(o) for o in translations]) resource.eea_hasTranslation = \ [rdflib.URIRef(o.absolute_url()) for o in translations_objs if o.absolute_url() != context.absolute_url()] else: resource.eea_isTranslationOf = \ rdflib.URIRef(context.absolute_url()) else: resource.eea_hasTranslation = ['No Translation'] return
class BabelUtils(BrowserView): def __init__(self, context, request): super(BabelUtils, self).__init__(context, request) portal_state = getMultiAdapter((context, request), name="plone_portal_state") self.portal_url = portal_state.portal_url() # If there is any translation_info lets use it try: self.group = TranslationManager(request.translation_info['tg']) except AttributeError: self.group = ITranslationManager(self.context) def getGroup(self): return self.group def getTranslatedLanguages(self): return self.group.get_translated_languages() def getPortal(self): portal_url = getToolByName(self.context, 'portal_url') return portal_url def objToTranslate(self): return self.context def gtenabled(self): registry = getUtility(IRegistry) settings = registry.forInterface(IMultiLanguageExtraOptionsSchema, prefix="plone") key = settings.google_translation_key return key is not None and len(key.strip()) > 0 def languages(self): """ Deprecated """ context = aq_inner(self.context) ls = LanguageSelector(context, self.request, None, None) ls.update() results = ls.languages() supported_langs = [v['code'] for v in results] missing = set([str(c) for c in supported_langs]) lsv = LanguageSelectorViewlet(context, self.request, None, None) translations = lsv._translations(missing) # We want to see the babel_view append_path = ('', 'babel_view',) non_viewable = set() for data in results: code = str(data['code']) data['translated'] = code in translations.keys() appendtourl = '/'.join(append_path) if data['translated']: trans, direct, has_view_permission = translations[code] if not has_view_permission: # shortcut if the user cannot see the item non_viewable.add((data['code'])) continue data['url'] = trans.absolute_url() + appendtourl else: non_viewable.add((data['code'])) # filter out non-viewable items results = [r for r in results if r['code'] not in non_viewable] return results def translated_languages(self): context = aq_inner(self.context) tool = getToolByName(context, 'portal_languages', None) checkPermission = getSecurityManager().checkPermission translations = self.group.get_translations() translated_info =\ [dict(code=key, info=tool.getAvailableLanguageInformation()[key], obj=translations[key]) for key in translations] default_language = tool.getDefaultLanguage() translated_shown = [] for lang_info in translated_info: # Mark the default language as the first translation shown if lang_info['code'] == default_language: lang_info['isDefault'] = True else: lang_info['isDefault'] = False # Remove the translation of the content currently being # translated In case it's temporal we show as language is not # already set on AT portal_factory = getToolByName( self.context, 'portal_factory', None ) context_language = ILanguage(context).get_language() if (portal_factory is None or not portal_factory.isTemporary(self.context)) \ and lang_info['code'] == context_language: continue # Remove the translation in case the translator user does not # have permissions over it has_view_permission =\ bool(checkPermission('View', lang_info['obj'])) if not has_view_permission: continue translated_shown.append(lang_info) return translated_shown def current_language_name(self): """ Get the current language native name """ adapted = ILanguage(self.context) lang_code = adapted.get_language() util = getUtility(IContentLanguageAvailability) data = util.getLanguages(True) lang_info = data.get(lang_code) return lang_info.get('native', None) or lang_info.get('name') def max_nr_of_buttons(self): registry = getUtility(IRegistry) settings = registry.forInterface(IMultiLanguageExtraOptionsSchema, prefix="plone") return settings.buttons_babel_view_up_to_nr_translations