You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.1 KiB
Python
69 lines
2.1 KiB
Python
"""
|
|
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}))
|