def get_language_from_request(request, settings): #check session first if hasattr(request, 'session'): lang = request.session.get('uliweb_language') if lang: return lang lang = request.cookies.get(settings.I18N.LANGUAGE_COOKIE_NAME) if lang: return lang accept = request.environ.get('HTTP_ACCEPT_LANGUAGE', None) if not accept: return settings.I18N.get('LANGUAGE_CODE') languages = settings.I18N.get('SUPPORT_LANGUAGES', []) for accept_lang, unused in parse_accept_lang_header(accept): if accept_lang == '*': break normalized = format_locale(accept_lang) if not normalized: continue if normalized in languages: return normalized return settings.I18N.get('LANGUAGE_CODE')
def get_language_from_request(request, settings): #check query_string, and the key will be defined in settings.ini #now only support GET method debug = '__debug__' in request.GET log = getLogger(__name__) url_lang_key = settings.get_var('I18N/URL_LANG_KEY') if url_lang_key: lang = request.GET.get(url_lang_key) if lang: if debug: log.info('Detect from URL=%s, lang_key=%s, lang=%s' % (request_url(), url_lang_key, lang)) return lang #check session if hasattr(request, 'session'): lang = request.session.get('uliweb_language') if lang: if debug: log.info('Detect from session=%s, lang=%s' % ('uliweb_language', lang)) return lang #check cookie lang = request.cookies.get(settings.I18N.LANGUAGE_COOKIE_NAME) if lang: if debug: log.info('Detect from cookie=%s, lang=%s' % (settings.I18N.LANGUAGE_COOKIE_NAME, lang)) return lang #check browser HTTP_ACCEPT_LANGUAGE head accept = request.environ.get('HTTP_ACCEPT_LANGUAGE', None) if not accept: if debug: log.info('Detect from settings of LANGUAGE_CODE=%s' % lang) return settings.I18N.get('LANGUAGE_CODE') languages = settings.I18N.get('SUPPORT_LANGUAGES', []) for accept_lang, unused in parse_accept_lang_header(accept): if accept_lang == '*': break normalized = format_locale(accept_lang) if not normalized: continue if normalized in languages: if debug: log.info('Detect from HTTP Header=%s, lang=%s' % ('HTTP_ACCEPT_LANGUAGE', normalized)) return normalized #return default lanaguage lang = settings.I18N.get('LANGUAGE_CODE') if debug: log.info('Detect from settings of LANGUAGE_CODE=%s' % lang) return lang
def make_select_languages(languages): from uliweb.i18n import get_language, format_locale from uliweb.contrib.i18n import LANGUAGES lang = get_language() s = [] s.append('''<script type="text/javascript"> function SetCookie( name, value, expires, path, domain, secure ) { var today = new Date(); today.setTime( today.getTime() ); path='/'; if ( expires ) { expires = expires * 1000 * 60 * 60 * 24; } var expires_date = new Date( today.getTime() + (expires) ); document.cookie = name + "=" +escape( value ) + ( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + ( ( path ) ? ";path=" + path : "" ) + ( ( domain ) ? ";domain=" + domain : "" ) + ( ( secure ) ? ";secure" : "" ); window.location.reload(); } </script>''') s.append( '''<form class="lang_dropdown" action="javascript:SetCookie('uliweb_language',this.document.changelang.lang.value)" name="changelang" method="post"> <label for="lang">Change Language:</label> <select onchange="this.form.submit()" id="lang" name="lang">''') for k in languages: k = format_locale(k) v = LANGUAGES.get(k, '') if not v: continue if k == lang: select = 'selected="selected" ' else: select = '' s.append('<option %svalue="%s">%s</option>' % (select, k, v)) s.append('''</select> </form>''') return ''.join(s)
def make_select_languages(languages): from uliweb.i18n import get_language, format_locale from uliweb.contrib.i18n import LANGUAGES lang = get_language() s = [] s.append('''<script type="text/javascript"> function SetCookie( name, value, expires, path, domain, secure ) { var today = new Date(); today.setTime( today.getTime() ); path='/'; if ( expires ) { expires = expires * 1000 * 60 * 60 * 24; } var expires_date = new Date( today.getTime() + (expires) ); document.cookie = name + "=" +escape( value ) + ( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + ( ( path ) ? ";path=" + path : "" ) + ( ( domain ) ? ";domain=" + domain : "" ) + ( ( secure ) ? ";secure" : "" ); window.location.reload(); } </script>''') s.append('''<form class="lang_dropdown" action="javascript:SetCookie('uliweb_language',this.document.changelang.lang.value)" name="changelang" method="post"> <label for="lang">Change Language:</label> <select onchange="this.form.submit()" id="lang" name="lang">''') for k in languages: k = format_locale(k) v = LANGUAGES.get(k, '') if not v: continue if k == lang: select = 'selected="selected" ' else: select = '' s.append('<option %svalue="%s">%s</option>' % (select, k, v)) s.append('''</select> </form>''') return ''.join(s)
def get_language_from_request(request, settings): #check query_string, and the key will be defined in settings.ini #now only support GET method url_lang_key = settings.get_var('I18N/URL_LANG_KEY') if url_lang_key: lang = request.GET.get(url_lang_key) if lang: return lang #check session if hasattr(request, 'session'): lang = request.session.get('uliweb_language') if lang: return lang #check cookie lang = request.cookies.get(settings.I18N.LANGUAGE_COOKIE_NAME) if lang: return lang #check browser HTTP_ACCEPT_LANGUAGE head accept = request.environ.get('HTTP_ACCEPT_LANGUAGE', None) if not accept: return settings.I18N.get('LANGUAGE_CODE') languages = settings.I18N.get('SUPPORT_LANGUAGES', []) for accept_lang, unused in parse_accept_lang_header(accept): if accept_lang == '*': break normalized = format_locale(accept_lang) if not normalized: continue if normalized in languages: return normalized #return default lanaguage return settings.I18N.get('LANGUAGE_CODE')
from uliweb.i18n import format_locale from uliweb.i18n import ugettext_lazy as _ _LANGUAGES = { 'en_US':_('English'), 'zh_CN':_('Simplified Chinese'), } LANGUAGES = {} for k, v in _LANGUAGES.items(): LANGUAGES[format_locale(k)] = v def startup_installed(sender): """ @LANGUAGE_CODE """ import os from uliweb.core.SimpleFrame import get_app_dir from uliweb.i18n import install, set_default_language from uliweb.utils.common import pkg, expand_path path = pkg.resource_filename('uliweb', '') _dirs = [] for d in sender.settings.get_var('I18N/LOCALE_DIRS', []): _dirs.append(expand_path(d)) localedir = ([os.path.normpath(sender.apps_dir + '/..')] + [get_app_dir(appname) for appname in sender.apps] + [path] + _dirs) install('uliweb', localedir) set_default_language(sender.settings.I18N.LANGUAGE_CODE) def prepare_default_env(sender, env): from uliweb.i18n import ugettext_lazy