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")
| 1444 | return None |
| 1445 | |
| 1446 | def get_browser_locale(self, default: str = "en_US") -> tornado.locale.Locale: |
| 1447 | """Determines the user's locale from ``Accept-Language`` header. |
| 1448 | |
| 1449 | See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4 |
| 1450 | """ |
| 1451 | if "Accept-Language" in self.request.headers: |
| 1452 | languages = self.request.headers["Accept-Language"].split(",") |
| 1453 | locales = [] |
| 1454 | for language in languages: |
| 1455 | parts = language.strip().split(";") |
| 1456 | if len(parts) > 1 and parts[1].strip().startswith("q="): |
| 1457 | try: |
| 1458 | score = float(parts[1].strip()[2:]) |
| 1459 | if score < 0: |
| 1460 | raise ValueError() |
| 1461 | except (ValueError, TypeError): |
| 1462 | score = 0.0 |
| 1463 | else: |
| 1464 | score = 1.0 |
| 1465 | if score > 0: |
| 1466 | locales.append((parts[0], score)) |
| 1467 | if locales: |
| 1468 | locales.sort(key=lambda pair: pair[1], reverse=True) |
| 1469 | codes = [loc[0] for loc in locales] |
| 1470 | return locale.get(*codes) |
| 1471 | return locale.get(default) |
| 1472 | |
| 1473 | @property |
| 1474 | def current_user(self) -> Any: |