Determines the user's locale from ``Accept-Language`` header. See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4
(self, default: str = "en_US")
| 1283 | return None |
| 1284 | |
| 1285 | def get_browser_locale(self, default: str = "en_US") -> tornado.locale.Locale: |
| 1286 | """Determines the user's locale from ``Accept-Language`` header. |
| 1287 | |
| 1288 | See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4 |
| 1289 | """ |
| 1290 | if "Accept-Language" in self.request.headers: |
| 1291 | languages = self.request.headers["Accept-Language"].split(",") |
| 1292 | locales = [] |
| 1293 | for language in languages: |
| 1294 | parts = language.strip().split(";") |
| 1295 | if len(parts) > 1 and parts[1].strip().startswith("q="): |
| 1296 | try: |
| 1297 | score = float(parts[1].strip()[2:]) |
| 1298 | if score < 0: |
| 1299 | raise ValueError() |
| 1300 | except (ValueError, TypeError): |
| 1301 | score = 0.0 |
| 1302 | else: |
| 1303 | score = 1.0 |
| 1304 | if score > 0: |
| 1305 | locales.append((parts[0], score)) |
| 1306 | if locales: |
| 1307 | locales.sort(key=lambda pair: pair[1], reverse=True) |
| 1308 | codes = [loc[0] for loc in locales] |
| 1309 | return locale.get(*codes) |
| 1310 | return locale.get(default) |
| 1311 | |
| 1312 | @property |
| 1313 | def current_user(self) -> Any: |