def reset_locale(self, locale): locale = Locale(locale) locale.codeset = self.locale.codeset MODULE.info('Switching language to: %s' % locale) os.putenv('LANG', str(self.locale)) try: _locale.setlocale(_locale.LC_ALL, str(locale)) except _locale.Error: MODULE.warn( 'Locale %s is not supported, using fallback locale "C" instead.' % locale) _locale.setlocale(_locale.LC_ALL, 'C') self.locale = locale # dynamically change the translation methods _translation.set_language(str(self.locale)) i18nXKeyboard.set_language(str(self.locale)) network._translation.set_language(str(self.locale)) AppCache().clear_cache()
def run(self, args): # locale must be set before importing UDM! log_init('/dev/stdout', args.debug) language = str(Locale(args.language)) locale.setlocale(locale.LC_MESSAGES, language) os.umask(0o077) # FIXME: should probably be changed, this is what UMC sets # The UMC-Server and module processes are clearing environment variables os.environ.clear() os.environ['PATH'] = '/bin:/sbin:/usr/bin:/usr/sbin' os.environ['LANG'] = language import univention.admin.modules as udm_modules udm_modules.update() from univention.admin.rest.module import Application application = Application(serve_traceback=ucr.is_true('directory/manager/rest/show-tracebacks', True)) server = HTTPServer(application) if args.port: server.bind(args.port) server.start(args.cpus) if args.unix_socket: socket = bind_unix_socket(args.unix_socket) server.add_socket(socket) signal.signal(signal.SIGTERM, partial(self.signal_handler_stop, server)) signal.signal(signal.SIGINT, partial(self.signal_handler_stop, server)) signal.signal(signal.SIGHUP, self.signal_handler_reload) channel = logging.StreamHandler() channel.setFormatter(tornado.log.LogFormatter(fmt='%(color)s%(asctime)s %(levelname)10s (%(process)9d) :%(end_color)s %(message)s', datefmt='%d.%m.%y %H:%M:%S')) logger = logging.getLogger() logger.setLevel(logging.INFO) logger.addHandler(channel) try: tornado.ioloop.IOLoop.current().start() except Exception: CORE.error(traceback.format_exc()) raise
def run(self, args): # locale must be set before importing UDM! log_init('/dev/stdout', args.debug) language = str(Locale(args.language)) locale.setlocale(locale.LC_MESSAGES, language) os.umask( 0o077) # FIXME: should probably be changed, this is what UMC sets # The UMC-Server and module processes are clearing environment variables os.environ.clear() os.environ['PATH'] = '/bin:/sbin:/usr/bin:/usr/sbin' os.environ['LANG'] = language import univention.admin.modules as udm_modules udm_modules.update() from univention.admin.rest.module import Application application = Application(serve_traceback=ucr.is_true( 'directory/manager/rest/show-tracebacks', True)) server = HTTPServer(application) server.start(args.cpus) if args.port: server.listen(args.port) if args.unix_socket: socket = bind_unix_socket(args.unix_socket) server.add_socket(socket) signal.signal(signal.SIGTERM, partial(self.signal_handler_stop, server)) signal.signal(signal.SIGINT, partial(self.signal_handler_stop, server)) signal.signal(signal.SIGHUP, self.signal_handler_reload) tornado.log.enable_pretty_logging() try: tornado.ioloop.IOLoop.current().start() except (SystemExit, KeyboardInterrupt): raise except: CORE.error(traceback.format_exc()) raise
def update_language(self, locales): for _locale in locales: language = None try: CORE.info("Setting locale %r" % (_locale,)) _locale = Locale(_locale) language = '%s-%s' % (_locale.language, _locale.territory) if _locale.territory else '%s' % (_locale.language,) if language != self.__current_language: self.set_locale(str(_locale)) self.__current_language = language return except (locale.Error, I18N_Error) as exc: if language in ('en', 'en-US'): # the system is missing english locale self.set_locale('C') if not self.__current_language: # only log once! CORE.error('Missing "en_US.UTF-8:UTF-8" in UCR variable "locale"') self.__current_language = language return CORE.warn("Locale %r is not available: %s" % (str(_locale), exc)) CORE.warn('Could not set language. Resetting locale.') self.set_locale('C') self.__current_language = None raise NotAcceptable(self._('Specified locale is not available'))
def set_locale(self, _locale): self.set_language(_locale) _locale = str(Locale(_locale)) locale.setlocale(locale.LC_MESSAGES, _locale) locale.setlocale(locale.LC_CTYPE, _locale)
def auto_complete_values_for_join(newValues, current_locale=None): # try to automatically determine the domain, except on a dcmaster and basesystem if newValues[ 'server/role'] != 'domaincontroller_master' and not newValues.get( 'domainname') and newValues['server/role'] != 'basesystem': ucr.load() for nameserver in ('nameserver1', 'nameserver2', 'nameserver3'): if newValues.get('domainname'): break newValues['domainname'] = get_ucs_domain( newValues.get(nameserver, ucr.get(nameserver))) if not newValues['domainname']: raise Exception( _('Cannot automatically determine the domain. Please specify the server\'s fully qualified domain name.' )) # The check "and 'domainname' in newValues" is solely for basesystems isAdMember = 'ad/member' in newValues and 'ad/address' in newValues if 'windows/domain' not in newValues: if isAdMember: MODULE.process('Searching for NETBIOS domain in AD') for nameserver in ('nameserver1', 'nameserver2', 'nameserver3'): ns = newValues.get(nameserver, ucr.get(nameserver)) if ns: try: ad_domain_info = lookup_adds_dc( newValues.get('ad/address'), ucr={'nameserver1': ns}) except failedADConnect: pass else: newValues['windows/domain'] = ad_domain_info[ 'Netbios Domain'] MODULE.process( 'Setting NETBIOS domain to AD value: %s' % newValues['windows/domain']) break if 'windows/domain' not in newValues and 'domainname' in newValues: newValues['windows/domain'] = domain2windowdomain( newValues.get('domainname')) MODULE.process('Setting NETBIOS domain to default: %s' % newValues['windows/domain']) # make sure that AD connector package is installed if AD member mode is chosen selectedComponents = set(newValues.get('components', [])) if isAdMember and newValues['server/role'] == 'domaincontroller_master': selectedComponents.add('univention-ad-connector') # make sure to install the memberof overlay if it is installed on the DC Master if newValues['server/role'] not in ('domaincontroller_master', 'basesystem', 'memberserver'): if newValues.pop('install_memberof_overlay', None): selectedComponents.add('univention-ldap-overlay-memberof') # add lists with all packages that should be removed/installed on the system if selectedComponents: currentComponents = set() for iapp in get_apps(): if iapp['is_installed']: for ipackages in (iapp['default_packages'], iapp['default_packages_master']): currentComponents = currentComponents.union(ipackages) # set of all available software packages allComponents = set(['univention-ldap-overlay-memberof']) for iapp in get_apps(): for ipackages in (iapp['default_packages'], iapp['default_packages_master']): allComponents = allComponents.union(ipackages) # get all packages that shall be removed removeComponents = list(allComponents & (currentComponents - selectedComponents)) newValues['packages_remove'] = ' '.join(removeComponents) # get all packages that shall be installed installComponents = list(allComponents & (selectedComponents - currentComponents)) newValues['packages_install'] = ' '.join(installComponents) current_locale = Locale(ucr.get('locale/default', 'en_US.UTF-8:UTF-8')) if newValues['server/role'] == 'domaincontroller_master': # add newValues for SSL UCR variables default_locale = current_locale if 'locale/default' in newValues: default_locale = Locale(newValues['locale/default']) newValues['ssl/state'] = default_locale.territory newValues['ssl/locality'] = default_locale.territory newValues['ssl/organization'] = newValues.get('organization', default_locale.territory) newValues['ssl/organizationalunit'] = 'Univention Corporate Server' newValues['ssl/email'] = 'ssl@{domainname}'.format(**newValues) # make sure that the locale of the current session is also supported # ... otherwise the setup scripts will fail after regenerating the # locale data (in 20_language/10language) with some strange python # exceptions about unsupported locale strings... if 'locale' not in newValues: newValues['locale'] = newValues.get('locale/default', '') forcedLocales = ['en_US.UTF-8:UTF-8', 'de_DE.UTF-8:UTF-8' ] # we need en_US and de_DE locale as default language if current_locale: current_locale = '{0}:{1}'.format(str(current_locale), current_locale.codeset) forcedLocales.append(current_locale) for ilocale in forcedLocales: if ilocale not in newValues['locale']: newValues['locale'] = '%s %s' % (newValues['locale'], ilocale) return newValues
def __init__(self): lang, codeset = getdefaultlocale() if lang is None: lang = 'C' self.locale = Locale(lang)