| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- """
- Translation handler.
- """
- # Copyright (c) Jupyter Development Team.
- # Distributed under the terms of the Modified BSD License.
- from __future__ import annotations
- import json
- import traceback
- from functools import partial
- import tornado
- from .settings_utils import SchemaHandler
- from .translation_utils import (
- SYS_LOCALE,
- get_language_pack,
- get_language_packs,
- is_valid_locale,
- translator,
- )
- class TranslationsHandler(SchemaHandler):
- """An API handler for translations."""
- @tornado.web.authenticated
- async def get(self, locale: str | None = None) -> None:
- """
- Get installed language packs.
- If `locale` is equals to "default", the default locale will be used.
- Parameters
- ----------
- locale: str, optional
- If no locale is provided, it will list all the installed language packs.
- Default is `None`.
- """
- data: dict
- data, message = {}, ""
- try:
- current_loop = tornado.ioloop.IOLoop.current()
- if locale is None:
- data, message = await current_loop.run_in_executor(
- None,
- partial(get_language_packs, display_locale=self.get_current_locale()),
- )
- else:
- locale = locale or SYS_LOCALE
- if locale == "default":
- locale = SYS_LOCALE
- data, message = await current_loop.run_in_executor(
- None, partial(get_language_pack, locale)
- )
- if data == {} and not message:
- if is_valid_locale(locale):
- message = f"Language pack '{locale}' not installed!"
- else:
- message = f"Language pack '{locale}' not valid!"
- elif is_valid_locale(locale):
- # only change locale if the language pack is installed and valid
- translator.set_locale(locale)
- except Exception:
- message = traceback.format_exc()
- self.set_status(200)
- self.finish(json.dumps({"data": data, "message": message}))
|