diff --git a/.bowerrc b/.bowerrc index b1c953d5a..25442973e 100644 --- a/.bowerrc +++ b/.bowerrc @@ -1,3 +1,3 @@ { - "directory": "notebook/static/components" + "directory": "nbclassic/static/components" } \ No newline at end of file diff --git a/.github/workflows/js.yml b/.github/workflows/js.yml index 6f1bf4c38..22af65829 100644 --- a/.github/workflows/js.yml +++ b/.github/workflows/js.yml @@ -50,7 +50,7 @@ jobs: - name: Temporary workaround for sanitizer loading in JS Tests run: | - cp tools/security_deprecated.js notebook/static/base/js/security.js + cp tools/security_deprecated.js nbclassic/static/base/js/security.js - name: Install dependencies run: | @@ -62,4 +62,4 @@ jobs: - name: Run Tests run: | - python -m notebook.jstest ${{ matrix.group }} + python -m nbclassic.jstest ${{ matrix.group }} diff --git a/.github/workflows/selenium.yml b/.github/workflows/selenium.yml index b0c470eb8..15b12686e 100644 --- a/.github/workflows/selenium.yml +++ b/.github/workflows/selenium.yml @@ -43,4 +43,4 @@ jobs: run: | export JUPYTER_TEST_BROWSER=firefox export MOZ_HEADLESS=1 - pytest -sv notebook/tests/selenium + pytest -sv nbclassic/tests/selenium diff --git a/.gitignore b/.gitignore index b1fab2ad7..31f3e8406 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,61 @@ +build +dist +_build +docs/man/*.gz +docs/source/api/generated +docs/source/config.rst +docs/gh-pages +nbclassic/i18n/*/LC_MESSAGES/*.mo +nbclassic/i18n/*/LC_MESSAGES/nbjs.json +nbclassic/static/components +nbclassic/static/style/*.min.css* +nbclassic/static/*/js/built/ +nbclassic/static/*/built/ +nbclassic/static/built/ +nbclassic/static/*/js/main.min.js* +nbclassic/static/lab/*bundle.js +node_modules +*.py[co] +__pycache__ +*.egg-info +*~ +*.bak +.ipynb_checkpoints +.tox +.DS_Store +\#*# +.#* +.coverage +.pytest_cache +src + +*.swp +*.map +.idea/ +Read the Docs +config.rst +*.iml +/.project +/.pydevproject + +package-lock.json +geckodriver.log +*.iml + +# jetbrains IDE stuff +*.iml +.idea/ + +# ms IDE stuff +*.code-workspace +.history +.vscode + +# copied changelog +docs/source/changelog.md + +.jupyter_releaser_checkout + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/README.md b/README.md index 68e9b22d0..6c3f13dec 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ![Testing nbclassic](https://github.com/jupyterlab/nbclassic/workflows/Testing%20nbclassic/badge.svg) -NBClassic runs the [Jupyter Notebook](https://github.com/jupyter/notebook) frontend on the Jupyter Server backend. +NBClassic runs the [Jupyter NbClassic](https://github.com/jupyter/nbclassic) frontend on the Jupyter Server backend. This project prepares for a future where JupyterLab and other frontends switch to [Jupyter Server](https://github.com/jupyter/jupyter_server/) for their Python Web application backend. Using this package, users can launch Jupyter Notebook, JupyterLab and other frontends side-by-side on top of the new Python server backend. diff --git a/docs-translations/hi-IN/README.md b/docs-translations/hi-IN/README.md index 1e85490e6..1774a3bcd 100644 --- a/docs-translations/hi-IN/README.md +++ b/docs-translations/hi-IN/README.md @@ -73,5 +73,5 @@ IPython कोडबेस का बिग स्प्लिट ™। IPython - [Documentation for Jupyter notebook](https://jupyter-notebook.readthedocs.io/en/stable/) - [Korean Version of Installation](https://github.com/ChungJooHo/Jupyter_Kor_doc/) - [Documentation for Project Jupyter](https://jupyter.readthedocs.io/en/latest/index.html ) -- [Issues](https://github.com/jupyter/notebook/issues) +- [Issues](https://github.com/jupyter/nbclassic/issues) - [Technical support - Jupyter Google Group](https://groups.google.com/forum/#!forum/jupyter) diff --git a/docs-translations/ja-JP/README.md b/docs-translations/ja-JP/README.md index 9262cdbec..1c2b2667c 100644 --- a/docs-translations/ja-JP/README.md +++ b/docs-translations/ja-JP/README.md @@ -4,7 +4,7 @@ [![Build Status](https://travis-ci.org/jupyter/notebook.svg?branch=master)](https://travis-ci.org/jupyter/notebook) [![Documentation Status](https://readthedocs.org/projects/jupyter-notebook/badge/?version=latest)](https://jupyter-notebook.readthedocs.io/en/stable/?badge=latest) -英語版のリンク : [[English Version](http://github.com/jupyter/notebook/)] +英語版のリンク : [[English Version](http://github.com/jupyter/nbclassic/)] Jupyter Notebookは、インタラクティブなWebベースのノートブック形式の環境です。 @@ -41,11 +41,11 @@ Jupyter Notebookをリモートで起動する前に、いくつかの構成が ## 開発用インストール -開発用インストールのセットアップ方法については、[`CONTRIBUTING.rst`](https://github.com/jupyter/notebook/blob/master/CONTRIBUTING.rst)を参照してください。 +開発用インストールのセットアップ方法については、[`CONTRIBUTING.rst`](https://github.com/jupyter/nbclassic/blob/master/CONTRIBUTING.rst)を参照してください。 ## 貢献 -プロジェクトへの貢献に興味がある場合は、[`CONTRIBUTING.rst`](https://github.com/jupyter/notebook/blob/master/CONTRIBUTING.rst)をご覧ください。 +プロジェクトへの貢献に興味がある場合は、[`CONTRIBUTING.rst`](https://github.com/jupyter/nbclassic/blob/master/CONTRIBUTING.rst)をご覧ください。 ## 参考 @@ -53,5 +53,5 @@ Jupyter Notebookをリモートで起動する前に、いくつかの構成が - [Online Demo at try.jupyter.org](https://try.jupyter.org) - [Documentation for Jupyter notebook](https://jupyter-notebook.readthedocs.io/en/stable/) - [Documentation for Project Jupyter](https://jupyter.readthedocs.io/en/latest/index.html ) -- [Issues](https://github.com/jupyter/notebook/issues) +- [Issues](https://github.com/jupyter/nbclassic/issues) - [Technical support - Jupyter Google Group](https://groups.google.com/forum/#!forum/jupyter) diff --git a/docs-translations/ko-KR/README.md b/docs-translations/ko-KR/README.md index a54b99664..0c6b135f7 100644 --- a/docs-translations/ko-KR/README.md +++ b/docs-translations/ko-KR/README.md @@ -4,7 +4,7 @@ [![Build Status](https://travis-ci.org/jupyter/notebook.svg?branch=master)](https://travis-ci.org/jupyter/notebook) [![Documentation Status](https://readthedocs.org/projects/jupyter-notebook/badge/?version=latest)](http://jupyter-notebook.readthedocs.io/en/stable/?badge=stable) -English 버전 링크 : [[English Version](http://github.com/jupyter/notebook/)] +English 버전 링크 : [[English Version](http://github.com/jupyter/nbclassic/)] Jupyter notebook 은 상호 교환을 위한 웹 기반 환경입니다. @@ -51,5 +51,5 @@ You can find the installation documentation for the - [Online Demo at try.jupyter.org](https://try.jupyter.org) - [Documentation for Jupyter notebook](https://jupyter-notebook.readthedocs.io/en/stable/) - [Documentation for Project Jupyter](https://jupyter.readthedocs.io/en/latest/index.html ) -- [Issues](https://github.com/jupyter/notebook/issues) +- [Issues](https://github.com/jupyter/nbclassic/issues) - [Technical support - Jupyter Google Group](https://groups.google.com/forum/#!forum/jupyter) diff --git a/docs-translations/zh-CN/README.md b/docs-translations/zh-CN/README.md index 5bee3f7d4..9e97d46e9 100644 --- a/docs-translations/zh-CN/README.md +++ b/docs-translations/zh-CN/README.md @@ -73,5 +73,5 @@ IPython代码库的Big Split™。 IPython 3是最后一个主要的整体 - [Documentation for Jupyter notebook](https://jupyter-notebook.readthedocs.io/en/stable/) - [Korean Version of Installation](https://github.com/ChungJooHo/Jupyter_Kor_doc/) - [Documentation for Project Jupyter](https://jupyter.readthedocs.io/en/latest/index.html ) -- [Issues](https://github.com/jupyter/notebook/issues) +- [Issues](https://github.com/jupyter/nbclassic/issues) - [Technical support - Jupyter Google Group](https://groups.google.com/forum/#!forum/jupyter) diff --git a/docs/autogen_config.py b/docs/autogen_config.py index f06efe917..512875e20 100644 --- a/docs/autogen_config.py +++ b/docs/autogen_config.py @@ -1,7 +1,7 @@ #!/usr/bin/env python import os -from notebook.notebookapp import NotebookApp +from nbclassic.notebookapp import NotebookApp header = """\ .. _config: diff --git a/docs/environment.yml b/docs/environment.yml index 55cea9b26..cb88eae3f 100644 --- a/docs/environment.yml +++ b/docs/environment.yml @@ -1,4 +1,4 @@ -name: notebook_docs +name: nbclassic_docs channels: - conda-forge dependencies: @@ -19,3 +19,5 @@ dependencies: - prometheus_client - sphinxcontrib_github_alt - ipython_genutils + - jupyter_server>=1.8 + - notebook_shim>=0.1.0 diff --git a/docs/jsdoc_config.json b/docs/jsdoc_config.json index 4da2e3d8b..91bf96d04 100644 --- a/docs/jsdoc_config.json +++ b/docs/jsdoc_config.json @@ -8,7 +8,7 @@ ], "source": { "include": [ - "../notebook/static/notebook/js/notebook.js" + "../nbclassic/static/notebook/js/notebook.js" ] }, "tags": { diff --git a/docs/source/conf.py b/docs/source/conf.py index 9482f0120..03574d7e5 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -98,13 +98,13 @@ author = 'The Jupyter Team' # ghissue config -github_project_url = "https://github.com/jupyter/notebook" +github_project_url = "https://github.com/jupyter/nbclassic" # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # -_version_py = '../../notebook/_version.py' +_version_py = '../../nbclassic/_version.py' version_ns = {} exec(compile(open(_version_py).read(), _version_py, 'exec'), version_ns) # The short X.Y version. @@ -357,4 +357,4 @@ spelling_word_list_filename='spelling_wordlist.txt' # import before any doc is built, so _ is guaranteed to be injected -import notebook.transutils +import nbclassic.transutils diff --git a/docs/source/examples/Notebook/JavaScript Notebook Extensions.ipynb b/docs/source/examples/Notebook/JavaScript Notebook Extensions.ipynb index 8d44100b6..0c54c4b71 100644 --- a/docs/source/examples/Notebook/JavaScript Notebook Extensions.ipynb +++ b/docs/source/examples/Notebook/JavaScript Notebook Extensions.ipynb @@ -197,7 +197,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Have a look at [default custom.js](https://github.com/jupyter/notebook/blob/4.0.x/notebook/static/custom/custom.js), to see it's content and for more explanation." + "Have a look at [default custom.js](https://github.com/jupyter/nbclassic/blob/main/nbclassic/static/custom/custom.js), to see it's content and for more explanation." ] }, { @@ -306,7 +306,7 @@ "metadata": {}, "source": [ "```bash\n", - "$ cd ~/jupyter/notebook/notebook/static/notebook/js/\n", + "$ cd ~/jupyter/nbclassic/nbclassic/static/notebook/js/\n", "$ yuidoc . --server\n", "warn: (yuidoc): Failed to extract port, setting to the default :3000\n", "info: (yuidoc): Starting YUIDoc@0.3.45 using YUI@3.9.1 with NodeJS@0.10.15\n", diff --git a/docs/source/examples/Notebook/examples_index.rst b/docs/source/examples/Notebook/examples_index.rst index 933907457..3a1becd6b 100644 --- a/docs/source/examples/Notebook/examples_index.rst +++ b/docs/source/examples/Notebook/examples_index.rst @@ -5,7 +5,8 @@ Notebook Examples The pages in this section are all converted notebook files. You can also `view these notebooks on nbviewer`__. -__ https://nbviewer.jupyter.org/github/jupyter/notebook/blob/6.4.x/ +__ https://nbviewer.jupyter.org/github/jupyter/nbclassic/blob/main/ + docs/source/examples/Notebook/ docs/source/examples/Notebook/ .. toctree:: diff --git a/docs/source/extending/bundler_extensions.rst b/docs/source/extending/bundler_extensions.rst index 55924ad1c..7e2dec305 100644 --- a/docs/source/extending/bundler_extensions.rst +++ b/docs/source/extending/bundler_extensions.rst @@ -166,7 +166,7 @@ Bundler invocation details -------------------------- Support for bundler extensions comes from Python modules in `notebook/bundler` -and JavaScript in `notebook/static/notebook/js/menubar.js`. The flow of data +and JavaScript in `nbclassic/static/notebook/js/menubar.js`. The flow of data between the various components proceeds roughly as follows: 1. User opens a notebook document diff --git a/docs/source/extending/frontend_extensions.rst b/docs/source/extending/frontend_extensions.rst index 6c6c78360..1975d15ce 100644 --- a/docs/source/extending/frontend_extensions.rst +++ b/docs/source/extending/frontend_extensions.rst @@ -183,7 +183,7 @@ action name, should be unique. Built-in actions, like the actions defined in an extension, it makes sense to use the extension name as the prefix. For the action name, the following guidelines should be considered: -.. adapted from notebook/static/notebook/js/actions.js +.. adapted from nbclassic/static/notebook/js/actions.js * First pick a noun and a verb for the action. For example, if the action is "restart kernel," the verb is "restart" and the noun is "kernel". diff --git a/docs/source/extending/handlers.rst b/docs/source/extending/handlers.rst index bc38cdb00..b2d93856a 100644 --- a/docs/source/extending/handlers.rst +++ b/docs/source/extending/handlers.rst @@ -3,7 +3,7 @@ Custom request handlers The notebook webserver can be interacted with using a well `defined RESTful -API `__. +API `__. You can define custom RESTful API handlers in addition to the ones provided by the notebook. As described below, to define a custom handler you need to first write a notebook server extension. Then, in the diff --git a/docs/source/links.txt b/docs/source/links.txt index f6503b754..d6b0a0561 100644 --- a/docs/source/links.txt +++ b/docs/source/links.txt @@ -19,10 +19,10 @@ .. Main Jupyter notebook links .. _Notebook Basics: notebook_p2_ -.. _notebook_p2: https://nbviewer.jupyter.org/github/jupyter/notebook/blob/6.4.x/docs/source/examples/Notebook/Notebook%20Basics.ipynb +.. _notebook_p2: https://nbviewer.jupyter.org/github/jupyter/nbclassic/blob/main/docs/source/examples/Notebook/Notebook%20Basics.ipynb .. _Running Code in the Jupyter Notebook: notebook_p1_ -.. _notebook_p1: https://nbviewer.jupyter.org/github/jupyter/notebook/blob/master/docs/source/examples/Notebook/Running%20Code.ipynb +.. _notebook_p1: https://nbviewer.jupyter.org/github/jupyter/nbclassic/blob/master/docs/source/examples/Notebook/Running%20Code.ipynb .. Other python projects .. _matplotlib: https://matplotlib.org @@ -38,4 +38,4 @@ .. _Plotting with Matplotlib: notebook_p3_ .. _notebook_p3: https://nbviewer.jupyter.org/github/ipython/ipython/blob/master/examples/IPython%20Kernel/Plotting%20in%20the%20Notebook.ipynb -.. _Working with Markdown Cells: https://nbviewer.jupyter.org/github/jupyter/notebook/blob/6.4.x/docs/source/examples/Notebook/Working%20With%20Markdown%20Cells.ipynb +.. _Working with Markdown Cells: https://nbviewer.jupyter.org/github/jupyter/nbclassic/blob/main/docs/source/examples/Notebook/Working%20With%20Markdown%20Cells.ipynb diff --git a/docs/source/notebook.rst b/docs/source/notebook.rst index f5db5f95b..460fbadaa 100644 --- a/docs/source/notebook.rst +++ b/docs/source/notebook.rst @@ -234,7 +234,7 @@ drop-down on the toolbar (which will be "Code", initially), or via For more information on the different things you can do in a notebook, see the `collection of examples -`_. +`_. Code cells ~~~~~~~~~~ diff --git a/docs/source/security.rst b/docs/source/security.rst index 981fb0b74..2d3cfb227 100644 --- a/docs/source/security.rst +++ b/docs/source/security.rst @@ -224,4 +224,4 @@ To share a signatures database among users, you can configure: to specify a non-default path to the SQLite database (of notebook hashes, essentially). We are aware that SQLite doesn't work well on NFS and we are -`working out better ways to do this `_. +`working out better ways to do this `_. diff --git a/docs/source/template.tpl b/docs/source/template.tpl index 8c9d4af9e..0a383d28d 100644 --- a/docs/source/template.tpl +++ b/docs/source/template.tpl @@ -2,7 +2,7 @@ {% macro notebooklink() -%} -`View the original notebook on nbviewer `__ +`View the original notebook on nbviewer `__ {%- endmacro %} diff --git a/docs/source/troubleshooting.rst b/docs/source/troubleshooting.rst index 42bca967e..d1f63bf4f 100644 --- a/docs/source/troubleshooting.rst +++ b/docs/source/troubleshooting.rst @@ -212,7 +212,7 @@ If you can't find an existing answer, you can ask questions at: Gathering Information ^^^^^^^^^^^^^^^^^^^^^ Should you find that your problem warrants that an issue be opened in -`notebook `_ please don't forget to provide details +`notebook `_ please don't forget to provide details like the following: * What error messages do you see (within your notebook and, more importantly, in diff --git a/git-hooks/post-checkout b/git-hooks/post-checkout index f329619f5..8ed89d879 100755 --- a/git-hooks/post-checkout +++ b/git-hooks/post-checkout @@ -8,14 +8,14 @@ fi # if style changed (and less available), rebuild sourcemaps if [[ - ! -z "$(git diff $PREVIOUS_HEAD notebook/static/*/js/**.js)" + ! -z "$(git diff $PREVIOUS_HEAD nbclassic/static/*/js/**.js)" ]]; then echo "rebuilding javascript" python setup.py js || echo "fail to rebuild javascript" fi if [[ - ! -z "$(git diff $PREVIOUS_HEAD notebook/static/*/less/**.less)" + ! -z "$(git diff $PREVIOUS_HEAD nbclassic/static/*/less/**.less)" ]]; then echo "rebuilding css sourcemaps" python setup.py css || echo "fail to recompile css" diff --git a/nbclassic.svg b/nbclassic.svg new file mode 100644 index 000000000..52e713c32 --- /dev/null +++ b/nbclassic.svg @@ -0,0 +1,335 @@ + + + + + + image/svg+xml + + logo.svg + + + + logo.svg + Created using Figma 0.90 + + + + + + + + + + + + + + + + + + diff --git a/nbclassic/__init__.py b/nbclassic/__init__.py index 7ea0662ff..107fa47c3 100644 --- a/nbclassic/__init__.py +++ b/nbclassic/__init__.py @@ -1,3 +1,23 @@ +import os +# Packagers: modify this line if you store the notebook static files elsewhere +DEFAULT_STATIC_FILES_PATH = os.path.join(os.path.dirname(__file__), "static") + +# Packagers: modify the next line if you store the notebook template files +# elsewhere + +# Include both notebook/ and notebook/templates/. This makes it +# possible for users to override a template with a file that inherits from that +# template. +# +# For example, if you want to override a specific block of notebook.html, you +# can create a file called notebook.html that inherits from +# templates/notebook.html, and the latter will resolve correctly to the base +# implementation. +DEFAULT_TEMPLATE_PATH_LIST = [ + os.path.dirname(__file__), + os.path.join(os.path.dirname(__file__), "templates"), +] + def _jupyter_server_extension_paths(): # Locally import to avoid install errors. from .notebookapp import NotebookApp diff --git a/nbclassic/__main__.py b/nbclassic/__main__.py new file mode 100644 index 000000000..3e317a455 --- /dev/null +++ b/nbclassic/__main__.py @@ -0,0 +1,4 @@ +from .notebookapp import main + +if __name__ == "__main__": + main() diff --git a/nbclassic/__version__.py b/nbclassic/__version__.py deleted file mode 100644 index 8879c6c77..000000000 --- a/nbclassic/__version__.py +++ /dev/null @@ -1 +0,0 @@ -__version__ = "0.3.7" diff --git a/nbclassic/_sysinfo.py b/nbclassic/_sysinfo.py new file mode 100644 index 000000000..2341cb767 --- /dev/null +++ b/nbclassic/_sysinfo.py @@ -0,0 +1,97 @@ +""" +Utilities for getting information about Jupyter and the system it's running in. +""" + +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +import os +import platform +import pprint +import sys +import subprocess + +from ipython_genutils import py3compat, encoding + +import nbclassic +from nbclassic import _version + +def pkg_commit_hash(pkg_path): + """Get short form of commit hash given directory `pkg_path` + + We get the commit hash from git if it's a repo. + + If this fail, we return a not-found placeholder tuple + + Parameters + ---------- + pkg_path : str + directory containing package + only used for getting commit from active repo + + Returns + ------- + hash_from : str + Where we got the hash from - description + hash_str : str + short form of hash + """ + + # maybe we are in a repository, check for a .git folder + p = os.path + cur_path = None + par_path = pkg_path + while cur_path != par_path: + cur_path = par_path + if p.exists(p.join(cur_path, '.git')): + try: + proc = subprocess.Popen(['git', 'rev-parse', '--short', 'HEAD'], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + cwd=pkg_path) + repo_commit, _ = proc.communicate() + except OSError: + repo_commit = None + + if repo_commit: + return 'repository', repo_commit.strip().decode('ascii') + else: + return '', '' + par_path = p.dirname(par_path) + + return '', '' + + +def pkg_info(pkg_path): + """Return dict describing the context of this package + + Parameters + ---------- + pkg_path : str + path containing __init__.py for package + + Returns + ------- + context : dict + with named parameters of interest + """ + src, hsh = pkg_commit_hash(pkg_path) + return dict( + notebook_version=_version, + notebook_path=pkg_path, + commit_source=src, + commit_hash=hsh, + sys_version=sys.version, + sys_executable=sys.executable, + sys_platform=sys.platform, + platform=platform.platform(), + os_name=os.name, + default_encoding=encoding.DEFAULT_ENCODING, + ) + +def get_sys_info(): + """Return useful information about the system as a dict.""" + p = os.path + path = p.realpath(p.dirname(p.abspath(p.join(nbclassic.__file__)))) + return pkg_info(path) + diff --git a/nbclassic/_version.py b/nbclassic/_version.py new file mode 100644 index 000000000..443c323e7 --- /dev/null +++ b/nbclassic/_version.py @@ -0,0 +1,20 @@ +""" +store the current version info of nbclassic. + +""" +import re + +# Version string must appear intact for tbump versioning +__version__ = '0.0.4' + +# Build up version_info tuple for backwards compatibility +pattern = r'(?P\d+).(?P\d+).(?P\d+)(?P.*)' +match = re.match(pattern, __version__) +parts = [int(match[part]) for part in ['major', 'minor', 'patch']] +if match['rest']: + parts.append(match['rest']) +version_info = tuple(parts) + +# Downstream maintainer, when running `python.setup.py jsversion`, +# the version string is propagated to the JavaScript files, do not forget to +# patch the JavaScript files in `.postN` release done by distributions. diff --git a/nbclassic/bundler/__init__.py b/nbclassic/bundler/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/nbclassic/bundler/__main__.py b/nbclassic/bundler/__main__.py new file mode 100644 index 000000000..cde186dbb --- /dev/null +++ b/nbclassic/bundler/__main__.py @@ -0,0 +1,7 @@ +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +from .bundlerextensions import main + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/nbclassic/bundler/bundlerextensions.py b/nbclassic/bundler/bundlerextensions.py new file mode 100644 index 000000000..5a5a82311 --- /dev/null +++ b/nbclassic/bundler/bundlerextensions.py @@ -0,0 +1,307 @@ +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. +import sys +import os + +from ..extensions import BaseExtensionApp, _get_config_dir, GREEN_ENABLED, RED_DISABLED +from .._version import __version__ +from nbclassic.config_manager import BaseJSONConfigManager + +from jupyter_core.paths import jupyter_config_path + +from traitlets.utils.importstring import import_item +from traitlets import Bool + +BUNDLER_SECTION = "notebook" +BUNDLER_SUBSECTION = "bundlerextensions" + +def _get_bundler_metadata(module): + """Gets the list of bundlers associated with a Python package. + + Returns a tuple of (the module, [{ + 'name': 'unique name of the bundler', + 'label': 'file menu item label for the bundler', + 'module_name': 'dotted package/module name containing the bundler', + 'group': 'download or deploy parent menu item' + }]) + + Parameters + ---------- + + module : str + Importable Python module exposing the + magic-named `_jupyter_bundlerextension_paths` function + """ + m = import_item(module) + if not hasattr(m, '_jupyter_bundlerextension_paths'): + raise KeyError('The Python module {} does not contain a valid bundlerextension'.format(module)) + bundlers = m._jupyter_bundlerextension_paths() + return m, bundlers + +def _set_bundler_state(name, label, module_name, group, state, + user=True, sys_prefix=False, logger=None): + """Set whether a bundler is enabled or disabled. + + Returns True if the final state is the one requested. + + Parameters + ---------- + name : string + Unique name of the bundler + label : string + Human-readable label for the bundler menu item in the notebook UI + module_name : string + Dotted module/package name containing the bundler + group : string + 'download' or 'deploy' indicating the parent menu containing the label + state : bool + The state in which to leave the extension + user : bool [default: True] + Whether to update the user's .jupyter/nbconfig directory + sys_prefix : bool [default: False] + Whether to update the sys.prefix, i.e. environment. Will override + `user`. + logger : Jupyter logger [optional] + Logger instance to use + """ + user = False if sys_prefix else user + config_dir = os.path.join( + _get_config_dir(user=user, sys_prefix=sys_prefix), 'nbconfig') + cm = BaseJSONConfigManager(config_dir=config_dir) + + if logger: + logger.info("{} {} bundler {}...".format( + "Enabling" if state else "Disabling", + name, + module_name + )) + + if state: + cm.update(BUNDLER_SECTION, { + BUNDLER_SUBSECTION: { + name: { + "label": label, + "module_name": module_name, + "group" : group + } + } + }) + else: + cm.update(BUNDLER_SECTION, { + BUNDLER_SUBSECTION: { + name: None + } + }) + + return (cm.get(BUNDLER_SECTION) + .get(BUNDLER_SUBSECTION, {}) + .get(name) is not None) == state + + +def _set_bundler_state_python(state, module, user, sys_prefix, logger=None): + """Enables or disables bundlers defined in a Python package. + + Returns a list of whether the state was achieved for each bundler. + + Parameters + ---------- + state : Bool + Whether the extensions should be enabled + module : str + Importable Python module exposing the + magic-named `_jupyter_bundlerextension_paths` function + user : bool + Whether to enable in the user's nbconfig directory. + sys_prefix : bool + Enable/disable in the sys.prefix, i.e. environment + logger : Jupyter logger [optional] + Logger instance to use + """ + m, bundlers = _get_bundler_metadata(module) + return [_set_bundler_state(name=bundler["name"], + label=bundler["label"], + module_name=bundler["module_name"], + group=bundler["group"], + state=state, + user=user, sys_prefix=sys_prefix, + logger=logger) + for bundler in bundlers] + +def enable_bundler_python(module, user=True, sys_prefix=False, logger=None): + """Enables bundlers defined in a Python package. + + Returns whether each bundle defined in the packaged was enabled or not. + + Parameters + ---------- + module : str + Importable Python module exposing the + magic-named `_jupyter_bundlerextension_paths` function + user : bool [default: True] + Whether to enable in the user's nbconfig directory. + sys_prefix : bool [default: False] + Whether to enable in the sys.prefix, i.e. environment. Will override + `user` + logger : Jupyter logger [optional] + Logger instance to use + """ + return _set_bundler_state_python(True, module, user, sys_prefix, + logger=logger) + +def disable_bundler_python(module, user=True, sys_prefix=False, logger=None): + """Disables bundlers defined in a Python package. + + Returns whether each bundle defined in the packaged was enabled or not. + + Parameters + ---------- + module : str + Importable Python module exposing the + magic-named `_jupyter_bundlerextension_paths` function + user : bool [default: True] + Whether to enable in the user's nbconfig directory. + sys_prefix : bool [default: False] + Whether to enable in the sys.prefix, i.e. environment. Will override + `user` + logger : Jupyter logger [optional] + Logger instance to use + """ + return _set_bundler_state_python(False, module, user, sys_prefix, + logger=logger) + +class ToggleBundlerExtensionApp(BaseExtensionApp): + """A base class for apps that enable/disable bundlerextensions""" + name = "jupyter bundlerextension enable/disable" + version = __version__ + description = "Enable/disable a bundlerextension in configuration." + + user = Bool(True, config=True, help="Apply the configuration only for the current user (default)") + + _toggle_value = None + + def _config_file_name_default(self): + """The default config file name.""" + return 'jupyter_notebook_config' + + def toggle_bundler_python(self, module): + """Toggle some extensions in an importable Python module. + + Returns a list of booleans indicating whether the state was changed as + requested. + + Parameters + ---------- + module : str + Importable Python module exposing the + magic-named `_jupyter_bundlerextension_paths` function + """ + toggle = (enable_bundler_python if self._toggle_value + else disable_bundler_python) + return toggle(module, + user=self.user, + sys_prefix=self.sys_prefix, + logger=self.log) + + def start(self): + if not self.extra_args: + sys.exit('Please specify an bundlerextension/package to enable or disable') + elif len(self.extra_args) > 1: + sys.exit('Please specify one bundlerextension/package at a time') + if self.python: + self.toggle_bundler_python(self.extra_args[0]) + else: + raise NotImplementedError('Cannot install bundlers from non-Python packages') + +class EnableBundlerExtensionApp(ToggleBundlerExtensionApp): + """An App that enables bundlerextensions""" + name = "jupyter bundlerextension enable" + description = """ + Enable a bundlerextension in frontend configuration. + + Usage + jupyter bundlerextension enable [--system|--sys-prefix] + """ + _toggle_value = True + +class DisableBundlerExtensionApp(ToggleBundlerExtensionApp): + """An App that disables bundlerextensions""" + name = "jupyter bundlerextension disable" + description = """ + Disable a bundlerextension in frontend configuration. + + Usage + jupyter bundlerextension disable [--system|--sys-prefix] + """ + _toggle_value = None + + +class ListBundlerExtensionApp(BaseExtensionApp): + """An App that lists and validates nbextensions""" + name = "jupyter nbextension list" + version = __version__ + description = "List all nbextensions known by the configuration system" + + def list_nbextensions(self): + """List all the nbextensions""" + config_dirs = [os.path.join(p, 'nbconfig') for p in jupyter_config_path()] + + print("Known bundlerextensions:") + + for config_dir in config_dirs: + head = u' config dir: {}'.format(config_dir) + head_shown = False + + cm = BaseJSONConfigManager(parent=self, config_dir=config_dir) + data = cm.get('notebook') + if 'bundlerextensions' in data: + if not head_shown: + # only show heading if there is an nbextension here + print(head) + head_shown = True + + for bundler_id, info in data['bundlerextensions'].items(): + label = info.get('label') + module = info.get('module_name') + if label is None or module is None: + msg = u' {} {}'.format(bundler_id, RED_DISABLED) + else: + msg = u' "{}" from {} {}'.format( + label, module, GREEN_ENABLED + ) + print(msg) + + def start(self): + """Perform the App's functions as configured""" + self.list_nbextensions() + + +class BundlerExtensionApp(BaseExtensionApp): + """Base jupyter bundlerextension command entry point""" + name = "jupyter bundlerextension" + version = __version__ + description = "Work with Jupyter bundler extensions" + examples = """ +jupyter bundlerextension list # list all configured bundlers +jupyter bundlerextension enable --py # enable all bundlers in a Python package +jupyter bundlerextension disable --py # disable all bundlers in a Python package +""" + + subcommands = dict( + enable=(EnableBundlerExtensionApp, "Enable a bundler extension"), + disable=(DisableBundlerExtensionApp, "Disable a bundler extension"), + list=(ListBundlerExtensionApp, "List bundler extensions") + ) + + def start(self): + """Perform the App's functions as configured""" + super().start() + + # The above should have called a subcommand and raised NoStart; if we + # get here, it didn't, so we should self.log.info a message. + subcmds = ", ".join(sorted(self.subcommands)) + sys.exit("Please supply at least one subcommand: %s" % subcmds) + +main = BundlerExtensionApp.launch_instance + +if __name__ == '__main__': + main() diff --git a/nbclassic/bundler/handlers.py b/nbclassic/bundler/handlers.py new file mode 100644 index 000000000..f72cbdce4 --- /dev/null +++ b/nbclassic/bundler/handlers.py @@ -0,0 +1,105 @@ +"""Tornado handler for bundling notebooks.""" + +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +from ipython_genutils.importstring import import_item +from tornado import web, gen + +from jupyter_server.utils import url2path +from nbclassic.base.handlers import IPythonHandler +from nbclassic.services.config import ConfigManager + +from . import tools + + +def maybe_future(obj): + """Like tornado's deprecated gen.maybe_future + + but more compatible with asyncio for recent versions + of tornado + """ + if inspect.isawaitable(obj): + return asyncio.ensure_future(obj) + elif isinstance(obj, concurrent.futures.Future): + return asyncio.wrap_future(obj) + else: + # not awaitable, wrap scalar in future + f = asyncio.Future() + f.set_result(obj) + return f + + +class BundlerHandler(IPythonHandler): + def initialize(self): + """Make tools module available on the handler instance for compatibility + with existing bundler API and ease of reference.""" + self.tools = tools + + def get_bundler(self, bundler_id): + """ + Get bundler metadata from config given a bundler ID. + + Parameters + ---------- + bundler_id: str + Unique bundler ID within the notebook/bundlerextensions config section + + Returns + ------- + dict + Bundler metadata with label, group, and module_name attributes + + + Raises + ------ + KeyError + If the bundler ID is unknown + """ + cm = ConfigManager() + return cm.get('notebook').get('bundlerextensions', {})[bundler_id] + + @web.authenticated + @gen.coroutine + def get(self, path): + """Bundle the given nbclassic. + + Parameters + ---------- + path: str + Path to the notebook (path parameter) + bundler: str + Bundler ID to use (query parameter) + """ + bundler_id = self.get_query_argument('bundler') + model = self.contents_manager.get(path=url2path(path)) + + try: + bundler = self.get_bundler(bundler_id) + except KeyError as e: + raise web.HTTPError(400, 'Bundler %s not enabled' % + bundler_id) from e + + module_name = bundler['module_name'] + try: + # no-op in python3, decode error in python2 + module_name = str(module_name) + except UnicodeEncodeError: + # Encode unicode as utf-8 in python2 else import_item fails + module_name = module_name.encode('utf-8') + + try: + bundler_mod = import_item(module_name) + except ImportError as e: + raise web.HTTPError(500, 'Could not import bundler %s ' % + bundler_id) from e + + # Let the bundler respond in any way it sees fit and assume it will + # finish the request + yield maybe_future(bundler_mod.bundle(self, model)) + +_bundler_id_regex = r'(?P[A-Za-z0-9_]+)' + +default_handlers = [ + (r"/bundle/(.*)", BundlerHandler) +] diff --git a/nbclassic/bundler/tarball_bundler.py b/nbclassic/bundler/tarball_bundler.py new file mode 100644 index 000000000..21ac94cd6 --- /dev/null +++ b/nbclassic/bundler/tarball_bundler.py @@ -0,0 +1,47 @@ +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. +import os +import io +import tarfile +import nbformat + +def _jupyter_bundlerextension_paths(): + """Metadata for notebook bundlerextension""" + return [{ + # unique bundler name + "name": "tarball_bundler", + # module containing bundle function + "module_name": "nbclassic.bundler.tarball_bundler", + # human-readable menu item label + "label" : "Notebook Tarball (tar.gz)", + # group under 'deploy' or 'download' menu + "group" : "download", + }] + +def bundle(handler, model): + """Create a compressed tarball containing the notebook document. + + Parameters + ---------- + handler : tornado.web.RequestHandler + Handler that serviced the bundle request + model : dict + Notebook model from the configured ContentManager + """ + notebook_filename = model['name'] + notebook_content = nbformat.writes(model['content']).encode('utf-8') + notebook_name = os.path.splitext(notebook_filename)[0] + tar_filename = '{}.tar.gz'.format(notebook_name) + + info = tarfile.TarInfo(notebook_filename) + info.size = len(notebook_content) + + with io.BytesIO() as tar_buffer: + with tarfile.open(tar_filename, "w:gz", fileobj=tar_buffer) as tar: + tar.addfile(info, io.BytesIO(notebook_content)) + + handler.set_attachment_header(tar_filename) + handler.set_header('Content-Type', 'application/gzip') + + # Return the buffer value as the response + handler.finish(tar_buffer.getvalue()) diff --git a/nbclassic/bundler/tests/__init__.py b/nbclassic/bundler/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/nbclassic/bundler/tests/resources/another_subdir/test_file.txt b/nbclassic/bundler/tests/resources/another_subdir/test_file.txt new file mode 100644 index 000000000..597cd83d4 --- /dev/null +++ b/nbclassic/bundler/tests/resources/another_subdir/test_file.txt @@ -0,0 +1 @@ +Used to test globbing. \ No newline at end of file diff --git a/nbclassic/bundler/tests/resources/empty.ipynb b/nbclassic/bundler/tests/resources/empty.ipynb new file mode 100644 index 000000000..bbdd6febf --- /dev/null +++ b/nbclassic/bundler/tests/resources/empty.ipynb @@ -0,0 +1,6 @@ +{ + "nbformat_minor": 0, + "cells": [], + "nbformat": 4, + "metadata": {} +} \ No newline at end of file diff --git a/nbclassic/bundler/tests/resources/subdir/subsubdir/.gitkeep b/nbclassic/bundler/tests/resources/subdir/subsubdir/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/nbclassic/bundler/tests/resources/subdir/test_file.txt b/nbclassic/bundler/tests/resources/subdir/test_file.txt new file mode 100644 index 000000000..597cd83d4 --- /dev/null +++ b/nbclassic/bundler/tests/resources/subdir/test_file.txt @@ -0,0 +1 @@ +Used to test globbing. \ No newline at end of file diff --git a/nbclassic/bundler/tests/test_bundler_api.py b/nbclassic/bundler/tests/test_bundler_api.py new file mode 100644 index 000000000..a39eba18a --- /dev/null +++ b/nbclassic/bundler/tests/test_bundler_api.py @@ -0,0 +1,80 @@ +"""Test the bundlers API.""" + +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +import io +from os.path import join as pjoin + +from nbclassic.tests.launchnotebook import NotebookTestBase +from nbformat import write +from nbformat.v4 import ( + new_notebook, new_markdown_cell, new_code_cell, new_output, +) + +from unittest.mock import patch + + +def bundle(handler, model): + """Bundler test stub. Echo the notebook path.""" + handler.finish(model['path']) + +class BundleAPITest(NotebookTestBase): + """Test the bundlers web service API""" + @classmethod + def setup_class(cls): + """Make a test nbclassic. Borrowed from nbconvert test. Assumes the class + teardown will clean it up in the end.""" + super(BundleAPITest, cls).setup_class() + nbdir = cls.notebook_dir + + nb = new_notebook() + + nb.cells.append(new_markdown_cell(u'Created by test')) + cc1 = new_code_cell(source=u'print(2*6)') + cc1.outputs.append(new_output(output_type="stream", text=u'12')) + nb.cells.append(cc1) + + with io.open(pjoin(nbdir, 'testnb.ipynb'), 'w', + encoding='utf-8') as f: + write(nb, f, version=4) + + def test_missing_bundler_arg(self): + """Should respond with 400 error about missing bundler arg""" + resp = self.request('GET', 'bundle/fake.ipynb') + self.assertEqual(resp.status_code, 400) + self.assertIn('Missing argument bundler', resp.text) + + def test_notebook_not_found(self): + """Should respond with 404 error about missing notebook""" + resp = self.request('GET', 'bundle/fake.ipynb', + params={'bundler': 'fake_bundler'}) + self.assertEqual(resp.status_code, 404) + self.assertIn('Not Found', resp.text) + + def test_bundler_not_enabled(self): + """Should respond with 400 error about disabled bundler""" + resp = self.request('GET', 'bundle/testnb.ipynb', + params={'bundler': 'fake_bundler'}) + self.assertEqual(resp.status_code, 400) + self.assertIn('Bundler fake_bundler not enabled', resp.text) + + def test_bundler_import_error(self): + """Should respond with 500 error about failure to load bundler module""" + with patch('nbclassic.bundler.handlers.BundlerHandler.get_bundler') as mock: + mock.return_value = {'module_name': 'fake_module'} + resp = self.request('GET', 'bundle/testnb.ipynb', + params={'bundler': 'fake_bundler'}) + mock.assert_called_with('fake_bundler') + self.assertEqual(resp.status_code, 500) + self.assertIn('Could not import bundler fake_bundler', resp.text) + + def test_bundler_invoke(self): + """Should respond with 200 and output from test bundler stub""" + with patch('nbclassic.bundler.handlers.BundlerHandler.get_bundler') as mock: + mock.return_value = {'module_name': 'nbclassic.bundler.tests.test_bundler_api'} + resp = self.request('GET', 'bundle/testnb.ipynb', + params={'bundler': 'stub_bundler'}) + mock.assert_called_with('stub_bundler') + self.assertEqual(resp.status_code, 200) + self.assertIn('testnb.ipynb', resp.text) \ No newline at end of file diff --git a/nbclassic/bundler/tests/test_bundler_tools.py b/nbclassic/bundler/tests/test_bundler_tools.py new file mode 100644 index 000000000..e2202a228 --- /dev/null +++ b/nbclassic/bundler/tests/test_bundler_tools.py @@ -0,0 +1,124 @@ +"""Test the bundler tools.""" + +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +import unittest +import os +import shutil +import tempfile +import nbclassic.bundler.tools as tools + +HERE = os.path.abspath(os.path.dirname(__file__)) + +class TestBundlerTools(unittest.TestCase): + def setUp(self): + self.tmp = tempfile.mkdtemp() + + def tearDown(self): + shutil.rmtree(self.tmp, ignore_errors=True) + + def test_get_no_cell_references(self): + '''Should find no references in a regular HTML comment.''' + no_references = tools.get_cell_reference_patterns({'source':'''!<-- +a +b +c +-->''', 'cell_type':'markdown'}) + self.assertEqual(len(no_references), 0) + + def test_get_cell_reference_patterns_comment_multiline(self): + '''Should find two references and ignore a comment within an HTML comment.''' + cell = {'cell_type':'markdown', 'source':''''''} + references = tools.get_cell_reference_patterns(cell) + self.assertTrue('a' in references and 'b/' in references, str(references)) + self.assertEqual(len(references), 2, str(references)) + + def test_get_cell_reference_patterns_comment_trailing_filename(self): + '''Should find three references within an HTML comment.''' + cell = {'cell_type':'markdown', 'source':''''''} + references = tools.get_cell_reference_patterns(cell) + self.assertTrue('a' in references and 'b/' in references and 'c' in references, str(references)) + self.assertEqual(len(references), 3, str(references)) + + def test_get_cell_reference_patterns_precode(self): + '''Should find no references in a fenced code block in a *code* cell.''' + self.assertTrue(tools.get_cell_reference_patterns) + no_references = tools.get_cell_reference_patterns({'source':'''``` +foo +bar +baz +``` +''', 'cell_type':'code'}) + self.assertEqual(len(no_references), 0) + + def test_get_cell_reference_patterns_precode_mdcomment(self): + '''Should find two references and ignore a comment in a fenced code block.''' + cell = {'cell_type':'markdown', 'source':'''``` +a +b/ +#comment +```'''} + references = tools.get_cell_reference_patterns(cell) + self.assertTrue('a' in references and 'b/' in references, str(references)) + self.assertEqual(len(references), 2, str(references)) + + def test_get_cell_reference_patterns_precode_backticks(self): + '''Should find three references in a fenced code block.''' + cell = {'cell_type':'markdown', 'source':'''```c +a +b/ +#comment +```'''} + references = tools.get_cell_reference_patterns(cell) + self.assertTrue('a' in references and 'b/' in references and 'c' in references, str(references)) + self.assertEqual(len(references), 3, str(references)) + + def test_glob_dir(self): + '''Should expand to single file in the resources/ subfolder.''' + self.assertIn(os.path.join('resources', 'empty.ipynb'), + tools.expand_references(HERE, ['resources/empty.ipynb'])) + + def test_glob_subdir(self): + '''Should expand to all files in the resources/ subfolder.''' + self.assertIn(os.path.join('resources', 'empty.ipynb'), + tools.expand_references(HERE, ['resources/'])) + + def test_glob_splat(self): + '''Should expand to all contents under this test/ directory.''' + globs = tools.expand_references(HERE, ['*']) + self.assertIn('test_bundler_tools.py', globs, globs) + self.assertIn('resources', globs, globs) + + def test_glob_splatsplat_in_middle(self): + '''Should expand to test_file.txt deep under this test/ directory.''' + globs = tools.expand_references(HERE, ['resources/**/test_file.txt']) + self.assertIn(os.path.join('resources', 'subdir', 'test_file.txt'), globs, globs) + + def test_glob_splatsplat_trailing(self): + '''Should expand to all descendants of this test/ directory.''' + globs = tools.expand_references(HERE, ['resources/**']) + self.assertIn(os.path.join('resources', 'empty.ipynb'), globs, globs) + self.assertIn(os.path.join('resources', 'subdir', 'test_file.txt'), globs, globs) + + def test_glob_splatsplat_leading(self): + '''Should expand to test_file.txt under any path.''' + globs = tools.expand_references(HERE, ['**/test_file.txt']) + self.assertIn(os.path.join('resources', 'subdir', 'test_file.txt'), globs, globs) + self.assertIn(os.path.join('resources', 'another_subdir', 'test_file.txt'), globs, globs) + + def test_copy_filelist(self): + '''Should copy select files from source to destination''' + globs = tools.expand_references(HERE, ['**/test_file.txt']) + tools.copy_filelist(HERE, self.tmp, globs) + self.assertTrue(os.path.isfile(os.path.join(self.tmp, 'resources', 'subdir', 'test_file.txt'))) + self.assertTrue(os.path.isfile(os.path.join(self.tmp, 'resources', 'another_subdir', 'test_file.txt'))) + self.assertFalse(os.path.isfile(os.path.join(self.tmp, 'resources', 'empty.ipynb'))) diff --git a/nbclassic/bundler/tests/test_bundlerextension.py b/nbclassic/bundler/tests/test_bundlerextension.py new file mode 100644 index 000000000..92f59a9b9 --- /dev/null +++ b/nbclassic/bundler/tests/test_bundlerextension.py @@ -0,0 +1,72 @@ +"""Test the bundlerextension CLI.""" + +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +import os +import shutil +import unittest + +from unittest.mock import patch +from ipython_genutils.tempdir import TemporaryDirectory +from ipython_genutils import py3compat + +from traitlets.tests.utils import check_help_all_output + +import nbclassic.nbextensions as nbextensions +from nbclassic.config_manager import BaseJSONConfigManager +from ..bundlerextensions import (_get_config_dir, enable_bundler_python, + disable_bundler_python) + +def test_help_output(): + check_help_all_output('nbclassic.bundler.bundlerextensions') + check_help_all_output('nbclassic.bundler.bundlerextensions', ['enable']) + check_help_all_output('nbclassic.bundler.bundlerextensions', ['disable']) + +class TestBundlerExtensionCLI(unittest.TestCase): + """Tests the bundlerextension CLI against the example zip_bundler.""" + def setUp(self): + """Build an isolated config environment.""" + td = TemporaryDirectory() + + self.test_dir = py3compat.cast_unicode(td.name) + self.data_dir = os.path.join(self.test_dir, 'data') + self.config_dir = os.path.join(self.test_dir, 'config') + self.system_data_dir = os.path.join(self.test_dir, 'system_data') + self.system_path = [self.system_data_dir] + + # Use temp directory, not real user or system config paths + self.patch_env = patch.dict('os.environ', { + 'JUPYTER_CONFIG_DIR': self.config_dir, + 'JUPYTER_DATA_DIR': self.data_dir, + }) + self.patch_env.start() + self.patch_system_path = patch.object(nbextensions, + 'SYSTEM_JUPYTER_PATH', self.system_path) + self.patch_system_path.start() + + def tearDown(self): + """Remove the test config environment.""" + shutil.rmtree(self.test_dir, ignore_errors=True) + self.patch_env.stop() + self.patch_system_path.stop() + + def test_enable(self): + """Should add the bundler to the notebook configuration.""" + enable_bundler_python('nbclassic.bundler.zip_bundler') + + config_dir = os.path.join(_get_config_dir(user=True), 'nbconfig') + cm = BaseJSONConfigManager(config_dir=config_dir) + bundlers = cm.get('notebook').get('bundlerextensions', {}) + self.assertEqual(len(bundlers), 1) + self.assertIn('notebook_zip_download', bundlers) + + def test_disable(self): + """Should remove the bundler from the notebook configuration.""" + self.test_enable() + disable_bundler_python('nbclassic.bundler.zip_bundler') + + config_dir = os.path.join(_get_config_dir(user=True), 'nbconfig') + cm = BaseJSONConfigManager(config_dir=config_dir) + bundlers = cm.get('notebook').get('bundlerextensions', {}) + self.assertEqual(len(bundlers), 0) diff --git a/nbclassic/bundler/tools.py b/nbclassic/bundler/tools.py new file mode 100644 index 000000000..457af2371 --- /dev/null +++ b/nbclassic/bundler/tools.py @@ -0,0 +1,230 @@ +"""Set of common tools to aid bundler implementations.""" + +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. +import os +import shutil +import errno +import nbformat +import fnmatch +import glob + +def get_file_references(abs_nb_path, version): + """Gets a list of files referenced either in Markdown fenced code blocks + or in HTML comments from the nbclassic. Expands patterns expressed in + gitignore syntax (https://git-scm.com/docs/gitignore). Returns the + fully expanded list of filenames relative to the notebook dirname. + + Parameters + ---------- + abs_nb_path: str + Absolute path of the notebook on disk + version: int + Version of the notebook document format to use + + Returns + ------- + list + Filename strings relative to the notebook path + """ + ref_patterns = get_reference_patterns(abs_nb_path, version) + expanded = expand_references(os.path.dirname(abs_nb_path), ref_patterns) + return expanded + +def get_reference_patterns(abs_nb_path, version): + """Gets a list of reference patterns either in Markdown fenced code blocks + or in HTML comments from the nbclassic. + + Parameters + ---------- + abs_nb_path: str + Absolute path of the notebook on disk + version: int + Version of the notebook document format to use + + Returns + ------- + list + Pattern strings from the notebook + """ + notebook = nbformat.read(abs_nb_path, version) + referenced_list = [] + for cell in nbclassic.cells: + references = get_cell_reference_patterns(cell) + if references: + referenced_list = referenced_list + references + return referenced_list + +def get_cell_reference_patterns(cell): + ''' + Retrieves the list of references from a single notebook cell. Looks for + fenced code blocks or HTML comments in Markdown cells, e.g., + + ``` + some.csv + foo/ + !foo/bar + ``` + + or + + + + Parameters + ---------- + cell: dict + Notebook cell object + + Returns + ------- + list + Reference patterns found in the cell + ''' + referenced = [] + # invisible after execution: unrendered HTML comment + if cell.get('cell_type').startswith('markdown') and cell.get('source').startswith(''): + break + # Trying to go out of the current directory leads to + # trouble when deploying + if line.find('../') < 0 and not line.startswith('#'): + referenced.append(line) + # visible after execution: rendered as a code element within a pre element + elif cell.get('cell_type').startswith('markdown') and cell.get('source').find('```') >= 0: + source = cell.get('source') + offset = source.find('```') + lines = source[offset + len('```'):].splitlines() + for line in lines: + if line.startswith('```'): + break + # Trying to go out of the current directory leads to + # trouble when deploying + if line.find('../') < 0 and not line.startswith('#'): + referenced.append(line) + + # Clean out blank references + return [ref for ref in referenced if ref.strip()] + +def expand_references(root_path, references): + """Expands a set of reference patterns by evaluating them against the + given root directory. Expansions are performed against patterns + expressed in the same manner as in gitignore + (https://git-scm.com/docs/gitignore). + + NOTE: Temporarily changes the current working directory when called. + + Parameters + ---------- + root_path: str + Assumed root directory for the patterns + references: list + Reference patterns from get_reference_patterns expressed with + forward-slash directory separators + + Returns + ------- + list + Filename strings relative to the root path + """ + # Use normpath to convert to platform specific slashes, but be sure + # to retain a trailing slash which normpath pulls off + normalized_references = [] + for ref in references: + normalized_ref = os.path.normpath(ref) + # un-normalized separator + if ref.endswith('/'): + normalized_ref += os.sep + normalized_references.append(normalized_ref) + references = normalized_references + + globbed = [] + negations = [] + must_walk = [] + for pattern in references: + if pattern and pattern.find(os.sep) < 0: + # simple shell glob + cwd = os.getcwd() + os.chdir(root_path) + if pattern.startswith('!'): + negations = negations + glob.glob(pattern[1:]) + else: + globbed = globbed + glob.glob(pattern) + os.chdir(cwd) + elif pattern: + must_walk.append(pattern) + + for pattern in must_walk: + pattern_is_negation = pattern.startswith('!') + if pattern_is_negation: + testpattern = pattern[1:] + else: + testpattern = pattern + for root, _, filenames in os.walk(root_path): + for filename in filenames: + joined = os.path.join(root[len(root_path) + 1:], filename) + if testpattern.endswith(os.sep): + if joined.startswith(testpattern): + if pattern_is_negation: + negations.append(joined) + else: + globbed.append(joined) + elif testpattern.find('**') >= 0: + # path wildcard + ends = testpattern.split('**') + if len(ends) == 2: + if joined.startswith(ends[0]) and joined.endswith(ends[1]): + if pattern_is_negation: + negations.append(joined) + else: + globbed.append(joined) + else: + # segments should be respected + if fnmatch.fnmatch(joined, testpattern): + if pattern_is_negation: + negations.append(joined) + else: + globbed.append(joined) + + for negated in negations: + try: + globbed.remove(negated) + except ValueError as err: + pass + return set(globbed) + +def copy_filelist(src, dst, src_relative_filenames): + """Copies the given list of files, relative to src, into dst, creating + directories along the way as needed and ignore existence errors. + Skips any files that do not exist. Does not create empty directories + from src in dst. + + Parameters + ---------- + src: str + Root of the source directory + dst: str + Root of the destination directory + src_relative_filenames: list + Filenames relative to src + """ + for filename in src_relative_filenames: + # Only consider the file if it exists in src + if os.path.isfile(os.path.join(src, filename)): + parent_relative = os.path.dirname(filename) + if parent_relative: + # Make sure the parent directory exists + parent_dst = os.path.join(dst, parent_relative) + try: + os.makedirs(parent_dst) + except OSError as exc: + if exc.errno == errno.EEXIST: + pass + else: + raise exc + shutil.copy2(os.path.join(src, filename), os.path.join(dst, filename)) diff --git a/nbclassic/bundler/zip_bundler.py b/nbclassic/bundler/zip_bundler.py new file mode 100644 index 000000000..e4346bf20 --- /dev/null +++ b/nbclassic/bundler/zip_bundler.py @@ -0,0 +1,59 @@ +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. +import os +import io +import zipfile +import nbclassic.bundler.tools as tools + +def _jupyter_bundlerextension_paths(): + """Metadata for notebook bundlerextension""" + return [{ + 'name': 'notebook_zip_download', + 'label': 'IPython Notebook bundle (.zip)', + 'module_name': 'nbclassic.bundler.zip_bundler', + 'group': 'download' + }] + +def bundle(handler, model): + """Create a zip file containing the original notebook and files referenced + from it. Retain the referenced files in paths relative to the nbclassic. + Return the zip as a file download. + + Assumes the notebook and other files are all on local disk. + + Parameters + ---------- + handler : tornado.web.RequestHandler + Handler that serviced the bundle request + model : dict + Notebook model from the configured ContentManager + """ + abs_nb_path = os.path.join(handler.settings['contents_manager'].root_dir, + model['path']) + notebook_filename = model['name'] + notebook_name = os.path.splitext(notebook_filename)[0] + + # Headers + zip_filename = os.path.splitext(notebook_name)[0] + '.zip' + handler.set_attachment_header(zip_filename) + handler.set_header('Content-Type', 'application/zip') + + # Get associated files + ref_filenames = tools.get_file_references(abs_nb_path, 4) + + # Prepare the zip file + zip_buffer = io.BytesIO() + zipf = zipfile.ZipFile(zip_buffer, mode='w', compression=zipfile.ZIP_DEFLATED) + zipf.write(abs_nb_path, notebook_filename) + + notebook_dir = os.path.dirname(abs_nb_path) + for nb_relative_filename in ref_filenames: + # Build absolute path to file on disk + abs_fn = os.path.join(notebook_dir, nb_relative_filename) + # Store file under path relative to notebook + zipf.write(abs_fn, nb_relative_filename) + + zipf.close() + + # Return the buffer value as the response + handler.finish(zip_buffer.getvalue()) \ No newline at end of file diff --git a/nbclassic/config_manager.py b/nbclassic/config_manager.py new file mode 100644 index 000000000..a8e4ee26b --- /dev/null +++ b/nbclassic/config_manager.py @@ -0,0 +1,131 @@ +"""Manager to read and modify config data in JSON files.""" + +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +import errno +import glob +import json +import os +import copy + +from traitlets.config import LoggingConfigurable +from traitlets.traitlets import Unicode, Bool + + +def recursive_update(target, new): + """Recursively update one dictionary using another. + + None values will delete their keys. + """ + for k, v in new.items(): + if isinstance(v, dict): + if k not in target: + target[k] = {} + recursive_update(target[k], v) + if not target[k]: + # Prune empty subdicts + del target[k] + + elif v is None: + target.pop(k, None) + + else: + target[k] = v + + +def remove_defaults(data, defaults): + """Recursively remove items from dict that are already in defaults""" + # copy the iterator, since data will be modified + for key, value in list(data.items()): + if key in defaults: + if isinstance(value, dict): + remove_defaults(data[key], defaults[key]) + if not data[key]: # prune empty subdicts + del data[key] + else: + if value == defaults[key]: + del data[key] + + +class BaseJSONConfigManager(LoggingConfigurable): + """General JSON config manager + + Deals with persisting/storing config in a json file with optionally + default values in a {section_name}.d directory. + """ + + config_dir = Unicode('.') + read_directory = Bool(True) + + def ensure_config_dir_exists(self): + """Will try to create the config_dir directory.""" + try: + os.makedirs(self.config_dir, 0o755) + except OSError as e: + if e.errno != errno.EEXIST: + raise + + def file_name(self, section_name): + """Returns the json filename for the section_name: {config_dir}/{section_name}.json""" + return os.path.join(self.config_dir, section_name+'.json') + + def directory(self, section_name): + """Returns the directory name for the section name: {config_dir}/{section_name}.d""" + return os.path.join(self.config_dir, section_name+'.d') + + def get(self, section_name, include_root=True): + """Retrieve the config data for the specified section. + + Returns the data as a dictionary, or an empty dictionary if the file + doesn't exist. + + When include_root is False, it will not read the root .json file, + effectively returning the default values. + """ + paths = [self.file_name(section_name)] if include_root else [] + if self.read_directory: + pattern = os.path.join(self.directory(section_name), '*.json') + # These json files should be processed first so that the + # {section_name}.json take precedence. + # The idea behind this is that installing a Python package may + # put a json file somewhere in the a .d directory, while the + # .json file is probably a user configuration. + paths = sorted(glob.glob(pattern)) + paths + self.log.debug('Paths used for configuration of %s: \n\t%s', section_name, '\n\t'.join(paths)) + data = {} + for path in paths: + if os.path.isfile(path): + with open(path, encoding='utf-8') as f: + recursive_update(data, json.load(f)) + return data + + def set(self, section_name, data): + """Store the given config data. + """ + filename = self.file_name(section_name) + self.ensure_config_dir_exists() + + if self.read_directory: + # we will modify data in place, so make a copy + data = copy.deepcopy(data) + defaults = self.get(section_name, include_root=False) + remove_defaults(data, defaults) + + # Generate the JSON up front, since it could raise an exception, + # in order to avoid writing half-finished corrupted data to disk. + json_content = json.dumps(data, indent=2) + + f = open(filename, 'w', encoding='utf-8') + with f: + f.write(json_content) + + def update(self, section_name, new_data): + """Modify the config section by recursively updating it with new_data. + + Returns the modified config data as a dictionary. + """ + data = self.get(section_name) + recursive_update(data, new_data) + self.set(section_name, data) + return data diff --git a/nbclassic/extensions.py b/nbclassic/extensions.py new file mode 100644 index 000000000..882ca4cfb --- /dev/null +++ b/nbclassic/extensions.py @@ -0,0 +1,107 @@ +"""Utilities for installing extensions""" + +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +import os +from tornado.log import LogFormatter +from traitlets import Bool, Any +from jupyter_core.application import JupyterApp +from jupyter_core.paths import ( + jupyter_config_dir, ENV_CONFIG_PATH, SYSTEM_CONFIG_PATH +) +from ._version import __version__ + +class ArgumentConflict(ValueError): + pass + +_base_flags = {} +_base_flags.update(JupyterApp.flags) +_base_flags.pop("y", None) +_base_flags.pop("generate-config", None) +_base_flags.update({ + "user" : ({ + "BaseExtensionApp" : { + "user" : True, + }}, "Apply the operation only for the given user" + ), + "system" : ({ + "BaseExtensionApp" : { + "user" : False, + "sys_prefix": False, + }}, "Apply the operation system-wide" + ), + "sys-prefix" : ({ + "BaseExtensionApp" : { + "sys_prefix" : True, + }}, "Use sys.prefix as the prefix for installing nbextensions (for environments, packaging)" + ), + "py" : ({ + "BaseExtensionApp" : { + "python" : True, + }}, "Install from a Python package" + ) +}) +_base_flags['python'] = _base_flags['py'] + +_base_aliases = {} +_base_aliases.update(JupyterApp.aliases) + + +class BaseExtensionApp(JupyterApp): + """Base nbextension installer app""" + _log_formatter_cls = LogFormatter + flags = _base_flags + aliases = _base_aliases + version = __version__ + + user = Bool(False, config=True, help="Whether to do a user install") + sys_prefix = Bool(False, config=True, help="Use the sys.prefix as the prefix") + python = Bool(False, config=True, help="Install from a Python package") + + # Remove for 5.0... + verbose = Any(None, config=True, help="DEPRECATED: Verbosity level") + + def _verbose_changed(self): + """Warn about verbosity changes""" + import warnings + warnings.warn( + f"`verbose` traits of `{type(self).__name__}` has been deprecated, " + f"has no effects and will be removed in notebook 5.0.", + DeprecationWarning + ) + + def _log_format_default(self): + """A default format for messages""" + return "%(message)s" + +def _get_config_dir(user=False, sys_prefix=False): + """Get the location of config files for the current context + + Returns the string to the environment + + Parameters + ---------- + + user : bool [default: False] + Get the user's .jupyter config directory + sys_prefix : bool [default: False] + Get sys.prefix, i.e. ~/.envs/my-env/etc/jupyter + """ + user = False if sys_prefix else user + if user and sys_prefix: + raise ArgumentConflict("Cannot specify more than one of user or sys_prefix") + if user: + nbext = jupyter_config_dir() + elif sys_prefix: + nbext = ENV_CONFIG_PATH[0] + else: + nbext = SYSTEM_CONFIG_PATH[0] + return nbext + +# Constants for pretty print extension listing function. +# Window doesn't support coloring in the commandline +GREEN_ENABLED = '\033[32m enabled \033[0m' if os.name != 'nt' else 'enabled ' +RED_DISABLED = '\033[31mdisabled\033[0m' if os.name != 'nt' else 'disabled' +GREEN_OK = '\033[32mOK\033[0m' if os.name != 'nt' else 'ok' +RED_X = '\033[31m X\033[0m' if os.name != 'nt' else ' X' diff --git a/nbclassic/i18n/README.md b/nbclassic/i18n/README.md new file mode 100644 index 000000000..1f0ea34a4 --- /dev/null +++ b/nbclassic/i18n/README.md @@ -0,0 +1,134 @@ +# Implementation Notes for Internationalization of Jupyter Notebook + +The implementation of i18n features for jupyter notebook is still a work-in-progress: + +- User interface strings are (mostly) handled +- Console messages are not handled (their usefulness in a translated environment is questionable) +- Tooling has to be refined + +However… + +## How the language is selected ? + +1. `jupyter notebook` command reads the `LANG` environment variable at startup, +(`xx_XX` or just `xx` form, where `xx` is the language code you're wanting to +run in). + +Hint: if running Windows, you can set it in PowerShell with `${Env:LANG} = "xx_XX"`. + if running Ubuntu 14, you should set environment variable `LANGUAGE="xx_XX"`. + +2. The preferred language for web pages in your browser settings (`xx`) is + also used. At the moment, it has to be first in the list. + +## Contributing and managing translations + +Finding and translating the `.pot` files could be (partially) done with a translation API, see the repo [Jupyter Notebook Azure Translator](https://github.com/berendjan/Jupyter-Notebook-Azure-Translator.git) for a possible starting point. (Not affiliated with Jupyter) + +### Requirements + +- *pybabel* (could be installed `pip install babel`) +- *po2json* (could be installed with `npm install -g po2json`) + +**All i18n-related commands are done from the related directory :** + + cd notebook/i18n/ + +### Message extraction + +The translatable material for notebook is split into 3 `.pot` files, as follows: + +- *notebook/i18n/notebook.pot* - Console and startup messages, basically anything that is + produced by Python code. +- *notebook/i18n/nbui.pot* - User interface strings, as extracted from the Jinja2 templates + in *notebook/templates/\*.html* +- *noteook/i18n/nbjs.pot* - JavaScript strings and dialogs, which contain much of the visible + user interface for Jupyter notebook. + +To extract the messages from the source code whenever new material is added, use the +`pybabel` command: + +```shell +pybabel extract -F babel_notebook.cfg -o notebook.pot --no-wrap --project Jupyter . +pybabel extract -F babel_nbui.cfg -o nbui.pot --no-wrap --project Jupyter . +pybabel extract -F babel_nbjs.cfg -o nbjs.pot --no-wrap --project Jupyter . +``` + +After this is complete you have 3 `.pot` files that you can give to a translator for your favorite language. + +Finding and translating the `.pot` files could be (partially done with a translation API, see the repo [Jupyter Notebook Azure Translator](https://github.com/berendjan/Jupyter-Notebook-Azure-Translator.git) for a possible starting point. (Not affiliated with Jupyter) + +### Messages compilation + +After the source material has been translated, you should have 3 `.po` files with the same base names +as the `.pot` files above. Put them in `notebook/i18n/${LANG}/LC_MESSAGES`, where `${LANG}` is the language +code for your desired language ( i.e. German = "de", Japanese = "ja", etc. ). + +*notebook.po* and *nbui.po* need to be converted from `.po` to `.mo` format for +use at runtime. + +```shell +pybabel compile -D notebook -f -l ${LANG} -i ${LANG}/LC_MESSAGES/notebook.po -o ${LANG}/LC_MESSAGES/notebook.mo +pybabel compile -D nbui -f -l ${LANG} -i ${LANG}/LC_MESSAGES/nbui.po -o ${LANG}/LC_MESSAGES/nbui.mo +``` + +*nbjs.po* needs to be converted to JSON for use within the JavaScript code, with *po2json*, as follows: + + po2json -p -F -f jed1.x -d nbjs ${LANG}/LC_MESSAGES/nbjs.po ${LANG}/LC_MESSAGES/nbjs.json + +When new languages get added, their language codes should be added to *notebook/i18n/nbjs.json* +under the `supported_languages` element. + +### Tips for Jupyter developers + +The biggest "mistake" I found while doing i18n enablement was the habit of constructing UI messages +from English "piece parts". For example, code like: + +```javascript +var msg = "Enter a new " + type + "name:" +``` + +where `type` is either "file", "directory", or "notebook".... + +is problematic when doing translations, because the surrounding text may need to vary +depending on the inserted word. In this case, you need to switch it and use complete phrases, +as follows: + +```javascript +var rename_msg = function (type) { + switch(type) { + case 'file': return _("Enter a new file name:"); + case 'directory': return _("Enter a new directory name:"); + case 'notebook': return _("Enter a new notebook name:"); + default: return _("Enter a new name:"); + } +} +``` + +Also you need to remember that adding an "s" or "es" to an English word to +create the plural form doesn't translate well. Some languages have as many as 5 or 6 different +plural forms for differing numbers, so using an API such as ngettext() is necessary in order +to handle these cases properly. + +### Known issues and future evolutions + +1. Right now there are two different places where the desired language is set. At startup time, the Jupyter console's messages pay attention to the setting of the `${LANG}` environment variable +as set in the shell at startup time. Unfortunately, this is also the time where the Jinja2 +environment is set up, which means that the template stuff will always come from this setting. +We really want to be paying attention to the browser's settings for the stuff that happens in the +browser, so we need to be able to retrieve this information after the browser is started and somehow +communicate this back to Jinja2. So far, I haven't yet figured out how to do this, which means that if the ${LANG} at startup doesn't match the browser's settings, you could potentially get a mix +of languages in the UI ( never a good thing ). + +2. We will need to decide if console messages should be translatable, and enable them if desired. +3. The keyboard shortcut editor was implemented after the i18n work was completed, so that portion +does not have translation support at this time. +4. Babel's documentation has instructions on how to integrate messages extraction +into your *setup.py* so that eventually we can just do: + + ./setup.py extract_messages + +I hope to get this working at some point in the near future. +5. The conversions from `.po` to `.mo` probably can and should be done using `setup.py install`. + + +Any questions or comments please let me know @JCEmmons on github (emmo@us.ibm.com) diff --git a/nbclassic/i18n/__init__.py b/nbclassic/i18n/__init__.py new file mode 100644 index 000000000..0f836d2ee --- /dev/null +++ b/nbclassic/i18n/__init__.py @@ -0,0 +1,102 @@ +"""Server functions for loading translations +""" +from collections import defaultdict +import errno +import json +from os.path import dirname, join as pjoin +import re + +I18N_DIR = dirname(__file__) +# Cache structure: +# {'nbjs': { # Domain +# 'zh-CN': { # Language code +# : +# ... +# } +# }} +TRANSLATIONS_CACHE = {'nbjs': {}} + + +_accept_lang_re = re.compile(r''' +(?P[a-zA-Z]{1,8}(-[a-zA-Z]{1,8})?) +(\s*;\s*q\s*=\s* + (?P[01](.\d+)?) +)?''', re.VERBOSE) + +def parse_accept_lang_header(accept_lang): + """Parses the 'Accept-Language' HTTP header. + + Returns a list of language codes in *ascending* order of preference + (with the most preferred language last). + """ + by_q = defaultdict(list) + for part in accept_lang.split(','): + m = _accept_lang_re.match(part.strip()) + if not m: + continue + lang, qvalue = m.group('lang', 'qvalue') + # Browser header format is zh-CN, gettext uses zh_CN + lang = lang.replace('-', '_') + if qvalue is None: + qvalue = 1. + else: + qvalue = float(qvalue) + if qvalue == 0: + continue # 0 means not accepted + by_q[qvalue].append(lang) + if '_' in lang: + short = lang.split('_')[0] + if short != 'en': + by_q[qvalue].append(short) + + res = [] + for qvalue, langs in sorted(by_q.items()): + res.extend(sorted(langs)) + return res + +def load(language, domain='nbjs'): + """Load translations from an nbjs.json file""" + try: + f = open(pjoin(I18N_DIR, language, 'LC_MESSAGES', 'nbjs.json'), + encoding='utf-8') + except OSError as e: + if e.errno != errno.ENOENT: + raise + return {} + + with f: + data = json.load(f) + return data["locale_data"][domain] + +def cached_load(language, domain='nbjs'): + """Load translations for one language, using in-memory cache if available""" + domain_cache = TRANSLATIONS_CACHE[domain] + try: + return domain_cache[language] + except KeyError: + data = load(language, domain) + domain_cache[language] = data + return data + +def combine_translations(accept_language, domain='nbjs'): + """Combine translations for multiple accepted languages. + + Returns data re-packaged in jed1.x format. + """ + lang_codes = parse_accept_lang_header(accept_language) + combined = {} + for language in lang_codes: + if language == 'en': + # en is default, all translations are in frontend. + combined.clear() + else: + combined.update(cached_load(language, domain)) + + combined[''] = {"domain":"nbjs"} + + return { + "domain": domain, + "locale_data": { + domain: combined + } + } diff --git a/nbclassic/i18n/babel_nbjs.cfg b/nbclassic/i18n/babel_nbjs.cfg new file mode 100644 index 000000000..492f24773 --- /dev/null +++ b/nbclassic/i18n/babel_nbjs.cfg @@ -0,0 +1,11 @@ +[javascript: notebook/static/base/js/*.js] +extract_messages = $._, i18n.msg._ + +[javascript: notebook/static/notebook/js/*.js] +extract_messages = $._, i18n.msg._ + +[javascript: notebook/static/notebook/js/celltoolbarpresets/*.js] +extract_messages = $._, i18n.msg._ + +[javascript: notebook/static/tree/js/*.js] +extract_messages = $._, i18n.msg._ diff --git a/nbclassic/i18n/babel_nbui.cfg b/nbclassic/i18n/babel_nbui.cfg new file mode 100644 index 000000000..271554a8a --- /dev/null +++ b/nbclassic/i18n/babel_nbui.cfg @@ -0,0 +1,4 @@ +[jinja2: notebook/templates/**.html] + encoding = utf-8 +[extractors] + jinja2 = jinja2.ext:babel_extract diff --git a/nbclassic/i18n/babel_notebook.cfg b/nbclassic/i18n/babel_notebook.cfg new file mode 100644 index 000000000..d4e3cf9b7 --- /dev/null +++ b/nbclassic/i18n/babel_notebook.cfg @@ -0,0 +1,2 @@ +[python: notebook/*.py] +[python: notebook/services/contents/*.py] diff --git a/nbclassic/i18n/fr_FR/LC_MESSAGES/nbjs.po b/nbclassic/i18n/fr_FR/LC_MESSAGES/nbjs.po new file mode 100644 index 000000000..a8b01bf13 --- /dev/null +++ b/nbclassic/i18n/fr_FR/LC_MESSAGES/nbjs.po @@ -0,0 +1,2131 @@ +# Translations template for Jupyter. +# Copyright (C) 2017 ORGANIZATION +# This file is distributed under the same license as the Jupyter project. +# FIRST AUTHOR , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: Jupyter VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2018-08-29 18:52+0200\n" +"PO-Revision-Date: 2018-10-04 00:34+0200\n" +"Last-Translator: Mathis HAMMEL \n" +"Language-Team: \n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 1.8.11\n" + +#: notebook/static/base/js/dialog.js:161 +msgid "Manually edit the JSON below to manipulate the metadata for this cell." +msgstr "" +"Éditer manuellement le JSON ci-dessous pour manipuler les méta-données de " +"cette cellule" + +#: notebook/static/base/js/dialog.js:163 +msgid "" +"Manually edit the JSON below to manipulate the metadata for this notebook." +msgstr "" +"Éditer manuellement le JSON ci-dessous pour manipuler les méta-données de " +"ce notebook." + +#: notebook/static/base/js/dialog.js:165 +msgid "" +" We recommend putting custom metadata attributes in an appropriately named " +"substructure, so they don't conflict with those of others." +msgstr "" +" Il est recommandé de placer les attributs personnalisés de méta-données dans " +"une sous-structure nommée de manière appropriée, afin qu'ils n'interfèrent " +"pas avec ceux des autres." + +#: notebook/static/base/js/dialog.js:180 +msgid "Edit the metadata" +msgstr "Éditer les méta-données" + +#: notebook/static/base/js/dialog.js:202 +msgid "Edit Notebook Metadata" +msgstr "Éditer les méta-données du Notebook" + +#: notebook/static/base/js/dialog.js:204 +msgid "Edit Cell Metadata" +msgstr "Éditer les méta-données de la cellule" + +#: notebook/static/base/js/dialog.js:208 +#: notebook/static/notebook/js/notebook.js:475 +#: notebook/static/notebook/js/savewidget.js:71 +#: notebook/static/tree/js/notebooklist.js:859 +#: notebook/static/tree/js/notebooklist.js:1418 +msgid "Cancel" +msgstr "Annuler" + +#: notebook/static/base/js/dialog.js:208 +msgid "Edit" +msgstr "Éditer" + +# OK +#: notebook/static/base/js/dialog.js:208 +#: notebook/static/notebook/js/kernelselector.js:278 +#: notebook/static/notebook/js/mathjaxutils.js:42 +#: notebook/static/notebook/js/notebook.js:469 +#: notebook/static/notebook/js/notificationarea.js:187 +#: notebook/static/notebook/js/savewidget.js:71 +#: notebook/static/tree/js/newnotebook.js:97 +#: notebook/static/tree/js/notebooklist.js:859 +msgid "OK" +msgstr "OK" + +#: notebook/static/base/js/dialog.js:208 +msgid "Apply" +msgstr "Appliquer" + +#: notebook/static/base/js/dialog.js:225 +msgid "WARNING: Could not save invalid JSON." +msgstr "ATTENTION: Impossible de sauvegarder du JSON invalide." + +#: notebook/static/base/js/dialog.js:247 +msgid "There are no attachments for this cell." +msgstr "Il n'y a pas de pièce-jointe à cette cellule." + +#: notebook/static/base/js/dialog.js:250 +msgid "Current cell attachments" +msgstr "Pièce-jointes actuelles de la cellule" + +#: notebook/static/base/js/dialog.js:259 +#: notebook/static/notebook/js/celltoolbarpresets/attachments.js:46 +msgid "Attachments" +msgstr "Pièces jointes" + +#: notebook/static/base/js/dialog.js:283 +msgid "Restore" +msgstr "Restaurer" + +#: notebook/static/base/js/dialog.js:293 +#: notebook/static/tree/js/notebooklist.js:1018 +msgid "Delete" +msgstr "Supprimer" + +#: notebook/static/base/js/dialog.js:342 notebook/static/base/js/dialog.js:386 +msgid "Edit attachments" +msgstr "Modifier les pièces jointes" + +#: notebook/static/base/js/dialog.js:348 +msgid "Edit Notebook Attachments" +msgstr "Modifier les pièces jointes du Notebook" + +#: notebook/static/base/js/dialog.js:350 +msgid "Edit Cell Attachments" +msgstr "Modifier les pièces jointes de la cellule" + +#: notebook/static/base/js/dialog.js:373 +msgid "Select a file to insert." +msgstr "Sélectionner un fichier à insérer." + +#: notebook/static/base/js/dialog.js:399 +msgid "Select a file" +msgstr "Sélectionner un fichier" + +#: notebook/static/notebook/js/about.js:14 +msgid "You are using Jupyter notebook." +msgstr "Vous utilisez un notebook Jupyter." + +#: notebook/static/notebook/js/about.js:16 +msgid "The version of the notebook server is: " +msgstr "La version du serveur de notebook est : " + +#: notebook/static/notebook/js/about.js:22 +msgid "The server is running on this version of Python:" +msgstr "Le serveur utilise la version de Python :" + +#: notebook/static/notebook/js/about.js:25 +msgid "Waiting for kernel to be available..." +msgstr "En attente de disponibilité du noyau..." + +#: notebook/static/notebook/js/about.js:27 +msgid "Server Information:" +msgstr "Information du serveur :" + +#: notebook/static/notebook/js/about.js:29 +msgid "Current Kernel Information:" +msgstr "Information du Noyau courant :" + +#: notebook/static/notebook/js/about.js:32 +msgid "Could not access sys_info variable for version information." +msgstr "" +"Impossible d'accéder à la variable sys_info pour l'information relative aux " +"versions." + +#: notebook/static/notebook/js/about.js:34 +msgid "Cannot find sys_info!" +msgstr "Impossible de trouver sys_info !" + +#: notebook/static/notebook/js/about.js:38 +msgid "About Jupyter Notebook" +msgstr "À propos de Jupyter Notebook" + +#: notebook/static/notebook/js/about.js:47 +msgid "unable to contact kernel" +msgstr "impossible de joindre le noyau" + +#: notebook/static/notebook/js/actions.js:69 +msgid "toggle rtl layout" +msgstr "Changer le sens d'organisation de l'interface" + +#: notebook/static/notebook/js/actions.js:70 +msgid "" +"Toggle the screen directionality between left-to-right and right-to-left" +msgstr "" +"Changer le sens d'organisation des éléments d'interface entre gauche-à-" +"droite et droite-à-gauche" + +#: notebook/static/notebook/js/actions.js:76 +msgid "edit command mode keyboard shortcuts" +msgstr "modifier les raccourcis clavier du mode commande" + +#: notebook/static/notebook/js/actions.js:77 +msgid "Open a dialog to edit the command mode keyboard shortcuts" +msgstr "Ouvrir un dialogue pour éditer les racourcis clavier du mode commande" + +#: notebook/static/notebook/js/actions.js:97 +msgid "restart kernel" +msgstr "redémarrer le noyau" + +#: notebook/static/notebook/js/actions.js:98 +msgid "restart the kernel (no confirmation dialog)" +msgstr "redémarrer le noyau (sans confirmation)" + +#: notebook/static/notebook/js/actions.js:106 +msgid "confirm restart kernel" +msgstr "confirmer le redémarrage du noyau" + +#: notebook/static/notebook/js/actions.js:107 +msgid "restart the kernel (with dialog)" +msgstr "redémarrer le noyau (avec confirmation)" + +#: notebook/static/notebook/js/actions.js:113 +msgid "restart kernel and run all cells" +msgstr "redémarrer le noyau et exécuter toutes les cellules" + +#: notebook/static/notebook/js/actions.js:114 +msgid "" +"restart the kernel, then re-run the whole notebook (no confirmation dialog)" +msgstr "" +"redémarrer le noyau, et ré-exécuter tout le notebook (sans confirmation)" + +#: notebook/static/notebook/js/actions.js:120 +msgid "confirm restart kernel and run all cells" +msgstr "confirmer le redémarrage du noyau et l'exécution des cellules" + +#: notebook/static/notebook/js/actions.js:121 +msgid "restart the kernel, then re-run the whole notebook (with dialog)" +msgstr "" +"redémarrer le noyau, et ré-exécuter tout le notebook (sans confirmation)" + +#: notebook/static/notebook/js/actions.js:127 +msgid "restart kernel and clear output" +msgstr "redémarrer le noyau, et effacer les sorties" + +#: notebook/static/notebook/js/actions.js:128 +msgid "restart the kernel and clear all output (no confirmation dialog)" +msgstr "redémarrer le noyau et effacer les sorties (sans confirmation)" + +#: notebook/static/notebook/js/actions.js:134 +msgid "confirm restart kernel and clear output" +msgstr "confirmer le redémarrage du noyau et l'effacement des sorties" + +#: notebook/static/notebook/js/actions.js:135 +msgid "restart the kernel and clear all output (with dialog)" +msgstr "redémarrer le noyau et effacer les sorties (avec confirmation)" + +#: notebook/static/notebook/js/actions.js:142 +#: notebook/static/notebook/js/actions.js:143 +msgid "interrupt the kernel" +msgstr "interrompre le noyau" + +#: notebook/static/notebook/js/actions.js:150 +msgid "run cell and select next" +msgstr "exécuter la cellule et sélectionner la suivante" + +#: notebook/static/notebook/js/actions.js:152 +msgid "run cell, select below" +msgstr "exécuter la cellule, sélectionner la suivante" + +#: notebook/static/notebook/js/actions.js:159 +#: notebook/static/notebook/js/actions.js:160 +msgid "run selected cells" +msgstr "exécuter les cellules sélectionnées" + +#: notebook/static/notebook/js/actions.js:167 +#: notebook/static/notebook/js/actions.js:168 +msgid "run cell and insert below" +msgstr "exécuter la cellule et insérer après" + +#: notebook/static/notebook/js/actions.js:175 +#: notebook/static/notebook/js/actions.js:176 +msgid "run all cells" +msgstr "exécuter toutes les cellules" + +#: notebook/static/notebook/js/actions.js:183 +#: notebook/static/notebook/js/actions.js:184 +msgid "run all cells above" +msgstr "exécuter toutes les cellules précédentes" + +#: notebook/static/notebook/js/actions.js:190 +#: notebook/static/notebook/js/actions.js:191 +msgid "run all cells below" +msgstr "Exécuter toutes les cellules suivantes" + +#: notebook/static/notebook/js/actions.js:197 +#: notebook/static/notebook/js/actions.js:198 +msgid "enter command mode" +msgstr "ouvrir le mode commande" + +#: notebook/static/notebook/js/actions.js:205 +#: notebook/static/notebook/js/actions.js:206 +msgid "insert image" +msgstr "insérer une image" + +#: notebook/static/notebook/js/actions.js:213 +#: notebook/static/notebook/js/actions.js:214 +msgid "cut cell attachments" +msgstr "couper les pièces-jointes de la cellule" + +#: notebook/static/notebook/js/actions.js:221 +#: notebook/static/notebook/js/actions.js:222 +msgid "copy cell attachments" +msgstr "copier les pièces-jointes de la cellule" + +#: notebook/static/notebook/js/actions.js:229 +#: notebook/static/notebook/js/actions.js:230 +msgid "paste cell attachments" +msgstr "coller les pièces-jointes de la cellule" + +#: notebook/static/notebook/js/actions.js:237 +#: notebook/static/notebook/js/actions.js:238 +msgid "split cell at cursor" +msgstr "séparer la cellule au niveau du curseur" + +#: notebook/static/notebook/js/actions.js:245 +#: notebook/static/notebook/js/actions.js:246 +msgid "enter edit mode" +msgstr "activer le mode d'édition" + +#: notebook/static/notebook/js/actions.js:253 +msgid "select previous cell" +msgstr "sélectionner la cellule précédente" + +#: notebook/static/notebook/js/actions.js:254 +msgid "select cell above" +msgstr "sélectionner la cellule précédente" + +#: notebook/static/notebook/js/actions.js:265 +msgid "select next cell" +msgstr "sélectionner la cellule suivante" + +#: notebook/static/notebook/js/actions.js:266 +msgid "select cell below" +msgstr "sélectionner la cellule suivante" + +#: notebook/static/notebook/js/actions.js:277 +msgid "extend selection above" +msgstr "étendre la sélection vers le haut" + +#: notebook/static/notebook/js/actions.js:278 +msgid "extend selected cells above" +msgstr "étendre les cellules sélectionnées vers le haut" + +#: notebook/static/notebook/js/actions.js:289 +msgid "extend selection below" +msgstr "étendre la sélection vers le bas" + +#: notebook/static/notebook/js/actions.js:290 +msgid "extend selected cells below" +msgstr "étendre les cellules sélectionnées vers le bas" + +#: notebook/static/notebook/js/actions.js:301 +#: notebook/static/notebook/js/actions.js:302 +msgid "cut selected cells" +msgstr "couper les cellules sélectionnées" + +#: notebook/static/notebook/js/actions.js:312 +#: notebook/static/notebook/js/actions.js:313 +msgid "copy selected cells" +msgstr "copier les cellules sélectionnées" + +#: notebook/static/notebook/js/actions.js:327 +#: notebook/static/notebook/js/actions.js:328 +msgid "paste cells above" +msgstr "coller les cellules avant" + +#: notebook/static/notebook/js/actions.js:335 +#: notebook/static/notebook/js/actions.js:336 +msgid "paste cells below" +msgstr "coller les cellules après" + +#: notebook/static/notebook/js/actions.js:344 +#: notebook/static/notebook/js/actions.js:345 +msgid "insert cell above" +msgstr "insérer une cellule avant" + +#: notebook/static/notebook/js/actions.js:354 +#: notebook/static/notebook/js/actions.js:355 +msgid "insert cell below" +msgstr "insérer une cellule après" + +#: notebook/static/notebook/js/actions.js:365 +#: notebook/static/notebook/js/actions.js:366 +msgid "change cell to code" +msgstr "transformer en cellule de code" + +#: notebook/static/notebook/js/actions.js:373 +#: notebook/static/notebook/js/actions.js:374 +msgid "change cell to markdown" +msgstr "transformer celllule en markdown" + +#: notebook/static/notebook/js/actions.js:381 +#: notebook/static/notebook/js/actions.js:382 +msgid "change cell to raw" +msgstr "transformer en texte brut (pour NBConvert)" + +#: notebook/static/notebook/js/actions.js:389 +#: notebook/static/notebook/js/actions.js:390 +msgid "change cell to heading 1" +msgstr "transformer en titre de niveau 1" + +#: notebook/static/notebook/js/actions.js:397 +#: notebook/static/notebook/js/actions.js:398 +msgid "change cell to heading 2" +msgstr "transformer en titre de niveau 2" + +#: notebook/static/notebook/js/actions.js:405 +#: notebook/static/notebook/js/actions.js:406 +msgid "change cell to heading 3" +msgstr "transformer en titre de niveau 3" + +#: notebook/static/notebook/js/actions.js:413 +#: notebook/static/notebook/js/actions.js:414 +msgid "change cell to heading 4" +msgstr "transformer en titre de niveau 4" + +#: notebook/static/notebook/js/actions.js:421 +#: notebook/static/notebook/js/actions.js:422 +msgid "change cell to heading 5" +msgstr "transformer en titre de niveau 5" + +#: notebook/static/notebook/js/actions.js:429 +#: notebook/static/notebook/js/actions.js:430 +msgid "change cell to heading 6" +msgstr "transformer en titre de niveau 6" + +#: notebook/static/notebook/js/actions.js:437 +msgid "toggle cell output" +msgstr "afficher/masquer la sortie de cellule" + +#: notebook/static/notebook/js/actions.js:438 +msgid "toggle output of selected cells" +msgstr "afficher/masquer la sortie des cellules sélectionnées" + +#: notebook/static/notebook/js/actions.js:445 +msgid "toggle cell scrolling" +msgstr "afficher/masquer la barre de défilement de la sortie de la cellule" + +#: notebook/static/notebook/js/actions.js:446 +msgid "toggle output scrolling of selected cells" +msgstr "" +"afficher/masquer la barre de défilement des la sortie des cellules " +"sélectionnées" + +#: notebook/static/notebook/js/actions.js:453 +msgid "clear cell output" +msgstr "effacer la sortie de la cellule" + +#: notebook/static/notebook/js/actions.js:454 +msgid "clear output of selected cells" +msgstr "effacer la sortie des cellules sélectionnées" + +#: notebook/static/notebook/js/actions.js:460 +msgid "move cells down" +msgstr "déplacer les cellules vers le bas" + +#: notebook/static/notebook/js/actions.js:461 +msgid "move selected cells down" +msgstr "déplacer les cellules sélectionnées vers le bas" + +#: notebook/static/notebook/js/actions.js:469 +msgid "move cells up" +msgstr "déplacer les cellules vers le haut" + +#: notebook/static/notebook/js/actions.js:470 +msgid "move selected cells up" +msgstr "déplacer les cellules sélectionnées vers le haut" + +#: notebook/static/notebook/js/actions.js:478 +#: notebook/static/notebook/js/actions.js:479 +msgid "toggle line numbers" +msgstr "afficher/masquer les numéros de ligne" + +#: notebook/static/notebook/js/actions.js:486 +#: notebook/static/notebook/js/actions.js:487 +msgid "show keyboard shortcuts" +msgstr "afficher les raccourcis clavier" + +#: notebook/static/notebook/js/actions.js:494 +msgid "delete cells" +msgstr "supprimer les cellules" + +#: notebook/static/notebook/js/actions.js:495 +msgid "delete selected cells" +msgstr "supprimer les cellules sélectionnées" + +#: notebook/static/notebook/js/actions.js:502 +#: notebook/static/notebook/js/actions.js:503 +msgid "undo cell deletion" +msgstr "annuler la suppression de cellule" + +#: notebook/static/notebook/js/actions.js:512 +msgid "merge cell with previous cell" +msgstr "fusionner la cellule avec la précédente" + +#: notebook/static/notebook/js/actions.js:513 +msgid "merge cell above" +msgstr "fusionner la cellule avec les précédentes" + +#: notebook/static/notebook/js/actions.js:519 +msgid "merge cell with next cell" +msgstr "fusionner la cellule avec la suivante" + +#: notebook/static/notebook/js/actions.js:520 +msgid "merge cell below" +msgstr "fusionner la cellule avec les suivantes" + +#: notebook/static/notebook/js/actions.js:527 +#: notebook/static/notebook/js/actions.js:528 +msgid "merge selected cells" +msgstr "fusionnnner les cellules sélectionnées" + +#: notebook/static/notebook/js/actions.js:535 +msgid "merge cells" +msgstr "fusionnnner les cellules" + +#: notebook/static/notebook/js/actions.js:536 +msgid "" +"merge selected cells, or current cell with cell below if only one cell is " +"selected" +msgstr "" +"fusionner les cellules sélectionnées, ou la cellule courante avec la " +"suivante si une unique cellule est sélectionnée" + +#: notebook/static/notebook/js/actions.js:549 +msgid "show command pallette" +msgstr "afficher la palette de commandes" + +#: notebook/static/notebook/js/actions.js:550 +msgid "open the command palette" +msgstr "ouvrir la palette de commandes" + +#: notebook/static/notebook/js/actions.js:557 +msgid "toggle all line numbers" +msgstr "afficher/masquer tous les numéros de ligne" + +#: notebook/static/notebook/js/actions.js:558 +msgid "toggles line numbers in all cells, and persist the setting" +msgstr "afficher/masquer les numéros de ligne dans toutes ces cellules, et s'en souvenir dans les paramètres" + +#: notebook/static/notebook/js/actions.js:569 +msgid "show all line numbers" +msgstr "afficher/masquer tous les numéros de ligne" + +#: notebook/static/notebook/js/actions.js:570 +msgid "show line numbers in all cells, and persist the setting" +msgstr "" +"afficher les numéros de ligne dans toutes les cellules, et s'en souvenir dans les paramètres" + +#: notebook/static/notebook/js/actions.js:579 +msgid "hide all line numbers" +msgstr "masquer tous les numéros de ligne" + +#: notebook/static/notebook/js/actions.js:580 +msgid "hide line numbers in all cells, and persist the setting" +msgstr "masquer les numéros de ligne dans toutes les cellules, et s'en souvenir dans les paramètres" + +#: notebook/static/notebook/js/actions.js:589 +msgid "toggle header" +msgstr "afficher/masquer l'en-tête" + +#: notebook/static/notebook/js/actions.js:590 +msgid "switch between showing and hiding the header" +msgstr "afficher/masquer l'en-tête" + +#: notebook/static/notebook/js/actions.js:605 +#: notebook/static/notebook/js/actions.js:606 +msgid "show the header" +msgstr "afficher l'en-tête" + +#: notebook/static/notebook/js/actions.js:615 +#: notebook/static/notebook/js/actions.js:616 +msgid "hide the header" +msgstr "masquer l'en-tête" + +#: notebook/static/notebook/js/actions.js:646 +msgid "toggle toolbar" +msgstr "afficher/masquer la barre d'outils" + +#: notebook/static/notebook/js/actions.js:647 +msgid "switch between showing and hiding the toolbar" +msgstr "afficher/masquer la barre d'outils" + +#: notebook/static/notebook/js/actions.js:660 +#: notebook/static/notebook/js/actions.js:661 +msgid "show the toolbar" +msgstr "afficher la barre d'outils" + +#: notebook/static/notebook/js/actions.js:669 +#: notebook/static/notebook/js/actions.js:670 +msgid "hide the toolbar" +msgstr "masquer la barre d'outils" + +#: notebook/static/notebook/js/actions.js:678 +#: notebook/static/notebook/js/actions.js:679 +msgid "close the pager" +msgstr "fermer le paginateur" + +#: notebook/static/notebook/js/actions.js:704 +msgid "ignore" +msgstr "ignorer" + +#: notebook/static/notebook/js/actions.js:710 +#: notebook/static/notebook/js/actions.js:711 +msgid "move cursor up" +msgstr "déplacer le curseur vers le haut" + +#: notebook/static/notebook/js/actions.js:731 +#: notebook/static/notebook/js/actions.js:732 +msgid "move cursor down" +msgstr "déplacer le curseur vers le bas" + +#: notebook/static/notebook/js/actions.js:750 +#: notebook/static/notebook/js/actions.js:751 +msgid "scroll notebook down" +msgstr "faire défiler le notebook vers le bas" + +#: notebook/static/notebook/js/actions.js:760 +#: notebook/static/notebook/js/actions.js:761 +msgid "scroll notebook up" +msgstr "faire défiler le notebook vers le haut" + +#: notebook/static/notebook/js/actions.js:770 +msgid "scroll cell center" +msgstr "faire défiler la cellule courante au centre" + +#: notebook/static/notebook/js/actions.js:771 +msgid "Scroll the current cell to the center" +msgstr "Faire défiler la cellule courante au centre" + +#: notebook/static/notebook/js/actions.js:781 +msgid "scroll cell top" +msgstr "faire défiler la cellule en haut" + +#: notebook/static/notebook/js/actions.js:782 +msgid "Scroll the current cell to the top" +msgstr "Faire défiler la cellule courante en haut" + +#: notebook/static/notebook/js/actions.js:792 +msgid "duplicate notebook" +msgstr "dupliquer le notebook" + +#: notebook/static/notebook/js/actions.js:793 +msgid "Create and open a copy of the current notebook" +msgstr "Créer et ouvrir une copie du notebook courant" + +#: notebook/static/notebook/js/actions.js:799 +msgid "trust notebook" +msgstr "faire confiance à ce notebook" + +#: notebook/static/notebook/js/actions.js:800 +msgid "Trust the current notebook" +msgstr "Faire confiance au notebook courant" + +#: notebook/static/notebook/js/actions.js:806 +msgid "rename notebook" +msgstr "renommer le notebook" + +#: notebook/static/notebook/js/actions.js:807 +msgid "Rename the current notebook" +msgstr "Renommer le notebook courant" + +#: notebook/static/notebook/js/actions.js:813 +msgid "toggle all cells output collapsed" +msgstr "afficher/masquer toutes les sorties en mode compact" + +#: notebook/static/notebook/js/actions.js:814 +msgid "Toggle the hidden state of all output areas" +msgstr "Afficher/masquer toutes les sorties" + +#: notebook/static/notebook/js/actions.js:820 +msgid "toggle all cells output scrolled" +msgstr "afficher/masquer toutes les sorties en mode défilement" + +#: notebook/static/notebook/js/actions.js:821 +msgid "Toggle the scrolling state of all output areas" +msgstr "Activer/désactiver le défilement de toutes les sorties" + +#: notebook/static/notebook/js/actions.js:828 +msgid "clear all cells output" +msgstr "effacer le contenu de toutes les sorties de cellules" + +#: notebook/static/notebook/js/actions.js:829 +msgid "Clear the content of all the outputs" +msgstr "Effacer le contenu de toutes les sorties" + +#: notebook/static/notebook/js/actions.js:835 +msgid "save notebook" +msgstr "enregistrer le notebook" + +#: notebook/static/notebook/js/actions.js:836 +msgid "Save and Checkpoint" +msgstr "Créer une nouvelle sauvegarde" + +#: notebook/static/notebook/js/cell.js:79 +msgid "Warning: accessing Cell.cm_config directly is deprecated." +msgstr "Attention : accéder à Cell.cm_config directement est déprécié." + +#: notebook/static/notebook/js/cell.js:763 +#, python-format +msgid "Unrecognized cell type: %s" +msgstr "Type de cellule non reconnu : %s" + +#: notebook/static/notebook/js/cell.js:777 +msgid "Unrecognized cell type" +msgstr "Type de cellule non reconnu" + +#: notebook/static/notebook/js/celltoolbar.js:296 +#, python-format +msgid "Error in cell toolbar callback %s" +msgstr "Erreur dans le callback %s de la barre d'outil de cellule" + +#: notebook/static/notebook/js/clipboard.js:53 +#, python-format +msgid "Clipboard types: %s" +msgstr "Types de données dans le presse-papier : %s" + +#: notebook/static/notebook/js/clipboard.js:96 +msgid "Dialog for paste from system clipboard" +msgstr "Boîte de dialogue pour coller depuis le presse-papier du système" + +#: notebook/static/notebook/js/clipboard.js:109 +msgid "Ctrl-V" +msgstr "Ctrl-V" + +#: notebook/static/notebook/js/clipboard.js:111 +msgid "Cmd-V" +msgstr "Cmd-V" + +#: notebook/static/notebook/js/clipboard.js:113 +#, python-format +msgid "Press %s again to paste" +msgstr "Appuyer sur %s à nouveau pour coller" + +#: notebook/static/notebook/js/clipboard.js:116 +msgid "Why is this needed? " +msgstr "Pourquoi ce comportement ?" + +#: notebook/static/notebook/js/clipboard.js:118 +msgid "We can't get paste events in this browser without a text box. " +msgstr "" +"Il n'est pas possible de capturer les évènements « coller » dans le " +"navigateur sans champ de texte" + +#: notebook/static/notebook/js/clipboard.js:119 +msgid "There's an invisible text box focused in this dialog." +msgstr "Cette boîte de dialogue contient un champ de texte invisible." + +#: notebook/static/notebook/js/clipboard.js:125 +#, python-format +msgid "%s to paste" +msgstr "%s pour coller" + +#: notebook/static/notebook/js/codecell.js:310 +msgid "Can't execute cell since kernel is not set." +msgstr "Impossible d'exécuter cette cellule car aucun noyau n'est choisi." + +#: notebook/static/notebook/js/codecell.js:472 +msgid "In" +msgstr "Entrée" + +#: notebook/static/notebook/js/kernelselector.js:269 +#, python-format +msgid "Could not find a kernel matching %s. Please select a kernel:" +msgstr "" +"Impossible de trouver un noyau correspondant à %s. Merci de sélectionner un " +"noyau :" + +#: notebook/static/notebook/js/kernelselector.js:278 +msgid "Continue Without Kernel" +msgstr "Poursuivre sans noyau" + +#: notebook/static/notebook/js/kernelselector.js:278 +msgid "Set Kernel" +msgstr "Choisir le noyau" + +#: notebook/static/notebook/js/kernelselector.js:281 +msgid "Kernel not found" +msgstr "Noyau introuvable" + +#: notebook/static/notebook/js/kernelselector.js:319 +#: notebook/static/tree/js/newnotebook.js:99 +msgid "Creating Notebook Failed" +msgstr "La création du notebook a échoué" + +#: notebook/static/notebook/js/kernelselector.js:320 +#: notebook/static/tree/js/notebooklist.js:1360 +#, python-format +msgid "The error was: %s" +msgstr "L'erreur est : %s" + +#: notebook/static/notebook/js/maintoolbar.js:54 +msgid "Run" +msgstr "Exécuter" + +#: notebook/static/notebook/js/maintoolbar.js:76 +msgid "Code" +msgstr "Code" + +#: notebook/static/notebook/js/maintoolbar.js:77 +msgid "Markdown" +msgstr "Markdown" + +#: notebook/static/notebook/js/maintoolbar.js:78 +msgid "Raw NBConvert" +msgstr "Texte Brut (pour NBConvert)" + +#: notebook/static/notebook/js/maintoolbar.js:79 +msgid "Heading" +msgstr "Titre" + +#: notebook/static/notebook/js/maintoolbar.js:115 +msgid "unrecognized cell type:" +msgstr "type de cellule non reconnu :" + +#: notebook/static/notebook/js/mathjaxutils.js:45 +#, python-format +msgid "Failed to retrieve MathJax from '%s'" +msgstr "Impossible de récupérer MathJax depuis '%s'" + +#: notebook/static/notebook/js/mathjaxutils.js:47 +msgid "Math/LaTeX rendering will be disabled." +msgstr "Le rendu Math/LaTex sera désactivé." + +#: notebook/static/notebook/js/menubar.js:220 +msgid "Trusted Notebook" +msgstr "Notebook de confiance" + +#: notebook/static/notebook/js/menubar.js:226 +msgid "Trust Notebook" +msgstr "Faire confiance à ce Notebook" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:16 +#: notebook/static/notebook/js/menubar.js:383 +msgid "None" +msgstr "Aucun(e)" + +#: notebook/static/notebook/js/menubar.js:406 +msgid "No checkpoints" +msgstr "Pas de point de sauvegarde" + +#: notebook/static/notebook/js/menubar.js:465 +msgid "Opens in a new window" +msgstr "Ouvrir dans une nouvelle fenêtre" + +#: notebook/static/notebook/js/notebook.js:431 +msgid "Autosave in progress, latest changes may be lost." +msgstr "" +"Auto-sauvegarde en cours, les dernières modifications pourraient être " +"perdues." + +#: notebook/static/notebook/js/notebook.js:433 +msgid "Unsaved changes will be lost." +msgstr "Les modifications non sauvegardées seront perdues." + +#: notebook/static/notebook/js/notebook.js:438 +msgid "The Kernel is busy, outputs may be lost." +msgstr "Le noyau est occupé, les sorties pourraient être perdues." + +#: notebook/static/notebook/js/notebook.js:461 +msgid "This notebook is version %1$s, but we only fully support up to %2$s." +msgstr "" +"Ce notebook est prévu pour la version %1$s du logiciel, mais nous supportons " +"au maximum la version %2$s." + +#: notebook/static/notebook/js/notebook.js:463 +msgid "" +"You can still work with this notebook, but cell and output types introduced " +"in later notebook versions will not be available." +msgstr "" +"Vous pouvez continuer à travailler avec ce notebook, mais les types de " +"cellules et de sorties introduits dans les versions ultérieures du logiciel " +"ne seront pas disponibles." + +#: notebook/static/notebook/js/notebook.js:470 +msgid "Restart and Run All Cells" +msgstr "Relancer et exécuter toutes les cellules" + +#: notebook/static/notebook/js/notebook.js:471 +msgid "Restart and Clear All Outputs" +msgstr "Relancer et effacer toutes les sorties" + +#: notebook/static/notebook/js/notebook.js:472 +msgid "Restart" +msgstr "Relancer" + +#: notebook/static/notebook/js/notebook.js:473 +msgid "Continue Running" +msgstr "Poursuivre l'exécution" + +#: notebook/static/notebook/js/notebook.js:474 +msgid "Reload" +msgstr "Recharger" + +#: notebook/static/notebook/js/notebook.js:476 +msgid "Overwrite" +msgstr "Écraser" + +#: notebook/static/notebook/js/notebook.js:477 +msgid "Trust" +msgstr "Faire confiance" + +#: notebook/static/notebook/js/notebook.js:478 +msgid "Revert" +msgstr "Rétablir" + +#: notebook/static/notebook/js/notebook.js:483 +msgid "Newer Notebook" +msgstr "Notebook plus récent" + +#: notebook/static/notebook/js/notebook.js:1548 +msgid "Use markdown headings" +msgstr "Utiliser les titres markdown" + +#: notebook/static/notebook/js/notebook.js:1550 +msgid "" +"Jupyter no longer uses special heading cells. Instead, write your headings " +"in Markdown cells using # characters:" +msgstr "" +"Jupyter n'utilise plus de cellules spéciales pour les titres. À la place, " +"utiliser la syntaxe de titre dans des cellules Markdown avec les caractères " +"# :" + +#: notebook/static/notebook/js/notebook.js:1553 +msgid "## This is a level 2 heading" +msgstr "## Ceci est un titre de niveau 2" + +#: notebook/static/notebook/js/notebook.js:2248 +msgid "Restart kernel and re-run the whole notebook?" +msgstr "Redémarrer le noyau et ré-exécuter l'ensemble du noteboook ?" + +#: notebook/static/notebook/js/notebook.js:2250 +msgid "" +"Are you sure you want to restart the current kernel and re-execute the whole " +"notebook? All variables and outputs will be lost." +msgstr "" +"Êtes-vous certain de vouloir redémarrer le noyau actuel et ré-exécuter " +"l'ensemble du notebook ? Toutes les variables et sorties seront perdues." + +#: notebook/static/notebook/js/notebook.js:2275 +msgid "Restart kernel and clear all output?" +msgstr "Redémarrer le noyau et effacer toutes les sorties ?" + +#: notebook/static/notebook/js/notebook.js:2277 +msgid "" +"Do you want to restart the current kernel and clear all output? All " +"variables and outputs will be lost." +msgstr "" +"Souhaitez-vous redémarrer le noyau actuel et effacer toutes les sorties ? " +"Toutes les variables et les sorties seront perdues." + +#: notebook/static/notebook/js/notebook.js:2322 +msgid "Restart kernel?" +msgstr "Redémarrer le noyau ?" + +#: notebook/static/notebook/js/notebook.js:2324 +msgid "Do you want to restart the current kernel? All variables will be lost." +msgstr "" +"Souhaitez-vous redémarrer le noyau actuel ? " +"Toutes les variables seront perdues." + +#: notebook/static/notebook/js/notebook.js:2320 +msgid "Shutdown kernel?" +msgstr "Arrêter le noyau ?" + +#: notebook/static/notebook/js/notebook.js:2322 +msgid "" +"Do you want to shutdown the current kernel? All variables will be lost." +msgstr "" +"Souhaitez-vous redémarrer le noyau actuel ? " +"Toutes les variables seront perdues." + +#: notebook/static/notebook/js/notebook.js:2734 +msgid "Notebook changed" +msgstr "Notebook modifié" + +#: notebook/static/notebook/js/notebook.js:2735 +msgid "" +"The notebook file has changed on disk since the last time we opened or saved " +"it. Do you want to overwrite the file on disk with the version open here, or " +"load the version on disk (reload the page) ?" +msgstr "" +"Le fichier du notebook a changé sur le disque depuis que vous l'avez ouvert " +"ou sauvegardé. Souhaitez-vous écraser le fichier sur le disque avec la " +"version ouverte ici ou charger la version présente sur le disque (recharge " +"la page) ?" + +#: notebook/static/notebook/js/notebook.js:2782 +#: notebook/static/notebook/js/notebook.js:2990 +msgid "Notebook validation failed" +msgstr "La validation du notebook a échoué" + +#: notebook/static/notebook/js/notebook.js:2785 +msgid "" +"The save operation succeeded, but the notebook does not appear to be valid. " +"The validation error was:" +msgstr "" +"La sauvegarde a réussi, mais le notebook semble invalide. L'erreur de " +"validation est :" + +#: notebook/static/notebook/js/notebook.js:2836 +msgid "" +"A trusted Jupyter notebook may execute hidden malicious code when you open " +"it. Selecting trust will immediately reload this notebook in a trusted " +"state. For more information, see the Jupyter security documentation: " +msgstr "" +"Un notebook Jupyter auquel vous faites confiance peut exécuter du code " +"malicieux quand vous l'ouvrez. Choisir de faire confiance à ce notebook va " +"le recharger immédiatement en mode confiance. Pour davantage d'information, " +"voir la section sécurité dans la documentation de Jupyter." + +#: notebook/static/notebook/js/notebook.js:2840 +msgid "here" +msgstr "ici" + +#: notebook/static/notebook/js/notebook.js:2848 +msgid "Trust this notebook?" +msgstr "Faire confiance à ce notebook ?" + +#: notebook/static/notebook/js/notebook.js:2981 +msgid "Notebook failed to load" +msgstr "Le chargement du notebook a échoué" + +#: notebook/static/notebook/js/notebook.js:2983 +msgid "The error was: " +msgstr "L'erreur est : " + +#: notebook/static/notebook/js/notebook.js:2987 +msgid "See the error console for details." +msgstr "Voir la console d'erreur pour davantage de détails." + +#: notebook/static/notebook/js/notebook.js:2995 +msgid "The notebook also failed validation:" +msgstr "La validation du notebook a échoué :" + +#: notebook/static/notebook/js/notebook.js:2997 +msgid "" +"An invalid notebook may not function properly. The validation error was:" +msgstr "" +"Un notebook non valide peut dysfonctionner. L'erreur de validation est :" + +#: notebook/static/notebook/js/notebook.js:3036 +#, python-format +msgid "" +"This notebook has been converted from an older notebook format to the " +"current notebook format v(%s)." +msgstr "" +"Ce notebook a été converti depuis un format plus ancien de notebook vers le " +"format actuel v(%s)." + +#: notebook/static/notebook/js/notebook.js:3038 +#, python-format +msgid "" +"This notebook has been converted from a newer notebook format to the current " +"notebook format v(%s)." +msgstr "" +"Ce notebook a été converti depuis un format plus récent de notebook vers le " +"format actuel v(%s)." + +#: notebook/static/notebook/js/notebook.js:3046 +msgid "" +"The next time you save this notebook, the current notebook format will be " +"used." +msgstr "" +"Au prochain enregistrement de ce notebook, le format actuel de notebook " +"sera utilisé" + +#: notebook/static/notebook/js/notebook.js:3051 +msgid "Older versions of Jupyter may not be able to read the new format." +msgstr "" +"D'anciennes version de Jupyter peuvent ne pas être en mesure de lire le " +"nouveau format." + +#: notebook/static/notebook/js/notebook.js:3053 +msgid "Some features of the original notebook may not be available." +msgstr "" +"Certaines fonctionalités du notebook d'origine peuvent ne pas être " +"disponibles." + +#: notebook/static/notebook/js/notebook.js:3056 +msgid "To preserve the original version, close the notebook without saving it." +msgstr "" +"Pour préserver la version originale, fermer le notebook sans l'enregistrer." + +#: notebook/static/notebook/js/notebook.js:3061 +msgid "Notebook converted" +msgstr "Notebook converti" + +#: notebook/static/notebook/js/notebook.js:3083 +msgid "(No name)" +msgstr "(Sans nom)" + +#: notebook/static/notebook/js/notebook.js:3131 +#, python-format +msgid "" +"An unknown error occurred while loading this notebook. This version can load " +"notebook formats %s or earlier. See the server log for details." +msgstr "" +"Une erreur inconnue s'est produite pendant le chargement de ce notebook. " +"Cette version peut charger des formats de notebooks %s ou plus ancien. Voir " +"les journaux du serveur pour davantage d'information." + +#: notebook/static/notebook/js/notebook.js:3142 +msgid "Error loading notebook" +msgstr "Erreur pendant le chargement du notebook" + +#: notebook/static/notebook/js/notebook.js:3243 +msgid "Are you sure you want to revert the notebook to the latest checkpoint?" +msgstr "Êtes-vous certain de vouloir restaurer la dernière sauvegarde ?" + +#: notebook/static/notebook/js/notebook.js:3246 +msgid "This cannot be undone." +msgstr "Impossible d'annuler." + +#: notebook/static/notebook/js/notebook.js:3249 +msgid "The checkpoint was last updated at:" +msgstr "Dernière sauvegarde à : " + +#: notebook/static/notebook/js/notebook.js:3260 +msgid "Revert notebook to checkpoint" +msgstr "Restaurer le notebook à une sauvegarde antérieure" + +#: notebook/static/notebook/js/notificationarea.js:77 +#: notebook/static/notebook/js/tour.js:61 +#: notebook/static/notebook/js/tour.js:67 +msgid "Edit Mode" +msgstr "Mode Édition" + +#: notebook/static/notebook/js/notificationarea.js:84 +#: notebook/static/notebook/js/notificationarea.js:88 +#: notebook/static/notebook/js/tour.js:54 +msgid "Command Mode" +msgstr "Mode Commande" + +#: notebook/static/notebook/js/notificationarea.js:95 +msgid "Kernel Created" +msgstr "Noyau créé" + +#: notebook/static/notebook/js/notificationarea.js:99 +msgid "Connecting to kernel" +msgstr "Connexion au noyau" + +#: notebook/static/notebook/js/notificationarea.js:103 +msgid "Not Connected" +msgstr "Non connecté" + +#: notebook/static/notebook/js/notificationarea.js:106 +msgid "click to reconnect" +msgstr "cliquer pour reconnecter" + +#: notebook/static/notebook/js/notificationarea.js:115 +msgid "Restarting kernel" +msgstr "Noyau en cours de redémarrage" + +#: notebook/static/notebook/js/notificationarea.js:129 +msgid "Kernel Restarting" +msgstr "Noyau en cours de redémarrage" + +#: notebook/static/notebook/js/notificationarea.js:130 +msgid "The kernel appears to have died. It will restart automatically." +msgstr "Le noyau semble planté. Il va redémarrer automatiquement." + +#: notebook/static/notebook/js/notificationarea.js:140 +#: notebook/static/notebook/js/notificationarea.js:198 +#: notebook/static/notebook/js/notificationarea.js:218 +msgid "Dead kernel" +msgstr "Noyau planté" + +#: notebook/static/notebook/js/notificationarea.js:141 +#: notebook/static/notebook/js/notificationarea.js:219 +#: notebook/static/notebook/js/notificationarea.js:266 +msgid "Kernel Dead" +msgstr "Noyau planté" + +#: notebook/static/notebook/js/notificationarea.js:145 +msgid "Interrupting kernel" +msgstr "Noyau en cours d'interruption" + +#: notebook/static/notebook/js/notificationarea.js:151 +msgid "No Connection to Kernel" +msgstr "Pas de connexion au noyau" + +#: notebook/static/notebook/js/notificationarea.js:161 +msgid "" +"A connection to the notebook server could not be established. The notebook " +"will continue trying to reconnect. Check your network connection or notebook " +"server configuration." +msgstr "" +"La connexion au serveur de notebook ne peut pas être établie. Le notebook va " +"continuer ses tentatives. Vérifiez votre connexion réseau ou les paramètres " +"du serveur de notebook." + +#: notebook/static/notebook/js/notificationarea.js:166 +msgid "Connection failed" +msgstr "Échec de la connexion" + +#: notebook/static/notebook/js/notificationarea.js:179 +msgid "No kernel" +msgstr "Pas de noyau" + +#: notebook/static/notebook/js/notificationarea.js:180 +msgid "Kernel is not running" +msgstr "Le noyau n'est pas actif" + +#: notebook/static/notebook/js/notificationarea.js:187 +msgid "Don't Restart" +msgstr "Ne pas redémarrer" + +#: notebook/static/notebook/js/notificationarea.js:187 +msgid "Try Restarting Now" +msgstr "Essayer de redémarrer maintenant" + +#: notebook/static/notebook/js/notificationarea.js:191 +msgid "" +"The kernel has died, and the automatic restart has failed. It is possible " +"the kernel cannot be restarted. If you are not able to restart the kernel, " +"you will still be able to save the notebook, but running code will no longer " +"work until the notebook is reopened." +msgstr "" +"Le noyau a planté, et le redémarrage automatique a échoué. Il est possible " +"que le noyau ne puisse pas être relancé. Si c'est le cas, vous pourrez " +"toujours sauvegarder le notebook, mais l'exécution de code ne fonctionnera " +"pas jusqu'à la ré-ouverture du notebook." + +#: notebook/static/notebook/js/notificationarea.js:225 +msgid "No Kernel" +msgstr "Pas de Noyau" + +#: notebook/static/notebook/js/notificationarea.js:252 +msgid "Failed to start the kernel" +msgstr "Échec du démarrage du noyau" + +#: notebook/static/notebook/js/notificationarea.js:272 +#: notebook/static/notebook/js/notificationarea.js:292 +#: notebook/static/notebook/js/notificationarea.js:306 +msgid "Kernel Busy" +msgstr "Noyau occupé" + +#: notebook/static/notebook/js/notificationarea.js:273 +msgid "Kernel starting, please wait..." +msgstr "Noyau en cours de démarrage, patientez…" + +#: notebook/static/notebook/js/notificationarea.js:279 +#: notebook/static/notebook/js/notificationarea.js:286 +msgid "Kernel Idle" +msgstr "Noyau inactif" + +#: notebook/static/notebook/js/notificationarea.js:280 +msgid "Kernel ready" +msgstr "Noyau prêt" + +#: notebook/static/notebook/js/notificationarea.js:297 +msgid "Using kernel: " +msgstr "Noyau utilisé : " + +#: notebook/static/notebook/js/notificationarea.js:298 +msgid "Only candidate for language: %1$s was %2$s." +msgstr "Unique candidat pour le langage : %1$s était %2$s." + +#: notebook/static/notebook/js/notificationarea.js:319 +msgid "Loading notebook" +msgstr "Chargement du notebook en cours" + +#: notebook/static/notebook/js/notificationarea.js:322 +msgid "Notebook loaded" +msgstr "Notebook chargé" + +#: notebook/static/notebook/js/notificationarea.js:325 +msgid "Saving notebook" +msgstr "Enregistrement du notebook en cours" + +#: notebook/static/notebook/js/notificationarea.js:328 +msgid "Notebook saved" +msgstr "Notebook enregistré" + +#: notebook/static/notebook/js/notificationarea.js:331 +msgid "Notebook save failed" +msgstr "L'enregistrement du notebook a échoué" + +#: notebook/static/notebook/js/notificationarea.js:334 +msgid "Notebook copy failed" +msgstr "La copie du notebook a échoué" + +#: notebook/static/notebook/js/notificationarea.js:339 +msgid "Checkpoint created" +msgstr "Sauvegarde créée" + +#: notebook/static/notebook/js/notificationarea.js:347 +msgid "Checkpoint failed" +msgstr "Échec de la sauvegarde" + +#: notebook/static/notebook/js/notificationarea.js:350 +msgid "Checkpoint deleted" +msgstr "Sauvegarde supprimée" + +#: notebook/static/notebook/js/notificationarea.js:353 +msgid "Checkpoint delete failed" +msgstr "Échec de la suppression de la sauvegarde" + +#: notebook/static/notebook/js/notificationarea.js:356 +msgid "Restoring to checkpoint..." +msgstr "Restauration de la sauvegarde..." + +#: notebook/static/notebook/js/notificationarea.js:359 +msgid "Checkpoint restore failed" +msgstr "La restauration de la sauvegarde a échoué" + +#: notebook/static/notebook/js/notificationarea.js:364 +msgid "Autosave disabled" +msgstr "Sauvegarde automatique désactivée" + +#: notebook/static/notebook/js/notificationarea.js:367 +#, python-format +msgid "Saving every %d sec." +msgstr "Sauvegarde toutes les %d sec." + +#: notebook/static/notebook/js/notificationarea.js:383 +msgid "Trusted" +msgstr "Fiable" + +#: notebook/static/notebook/js/notificationarea.js:385 +msgid "Not Trusted" +msgstr "Non fiable" + +#: notebook/static/notebook/js/outputarea.js:75 +msgid "click to expand output" +msgstr "cliquer pour afficher toute la sortie" + +#: notebook/static/notebook/js/outputarea.js:79 +msgid "click to expand output; double click to hide output" +msgstr "" +"cliquer pour afficher toute la sortie ; double-cliquer pour masquer la sortie" + +#: notebook/static/notebook/js/outputarea.js:167 +msgid "click to unscroll output; double click to hide" +msgstr "" +"cliquer pour faire défiler la sortie vers le haut ; double-cliquer pour " +"masquer" + +#: notebook/static/notebook/js/outputarea.js:174 +msgid "click to scroll output; double click to hide" +msgstr "cliquer pour faire défiler la sortie ; double-cliquer pour masquer" + +#: notebook/static/notebook/js/outputarea.js:422 +msgid "Javascript error adding output!" +msgstr "Erreur JavaScript pendant l'écriture de la sortie !" + +#: notebook/static/notebook/js/outputarea.js:427 +msgid "See your browser Javascript console for more details." +msgstr "" +"Voir la console JavaScript de votre navigateur pour plus d'informations." + +#: notebook/static/notebook/js/outputarea.js:468 +#, python-format +msgid "Out[%d]:" +msgstr "Sortie[%d] :" + +#: notebook/static/notebook/js/outputarea.js:577 +#, python-format +msgid "Unrecognized output: %s" +msgstr "Sortie non reconnue : %s" + +#: notebook/static/notebook/js/pager.js:36 +msgid "Open the pager in an external window" +msgstr "Ouvrir le paginateur dans une fenêtre externe" + +#: notebook/static/notebook/js/pager.js:45 +msgid "Close the pager" +msgstr "Fermer le paginateur" + +#: notebook/static/notebook/js/pager.js:148 +msgid "Jupyter Pager" +msgstr "Paginateur de Jupyter" + +#: notebook/static/notebook/js/quickhelp.js:39 +#: notebook/static/notebook/js/quickhelp.js:49 +#: notebook/static/notebook/js/quickhelp.js:50 +msgid "go to cell start" +msgstr "aller au début de la cellule" + +#: notebook/static/notebook/js/quickhelp.js:40 +#: notebook/static/notebook/js/quickhelp.js:51 +#: notebook/static/notebook/js/quickhelp.js:52 +msgid "go to cell end" +msgstr "aller à la fin de la cellule" + +#: notebook/static/notebook/js/quickhelp.js:41 +#: notebook/static/notebook/js/quickhelp.js:53 +msgid "go one word left" +msgstr "se déplacer d'un mot vers la gauche" + +#: notebook/static/notebook/js/quickhelp.js:42 +#: notebook/static/notebook/js/quickhelp.js:54 +msgid "go one word right" +msgstr "Se déplacer d'un mot vers la droite" + +#: notebook/static/notebook/js/quickhelp.js:43 +#: notebook/static/notebook/js/quickhelp.js:55 +msgid "delete word before" +msgstr "supprimer le mot précédent" + +#: notebook/static/notebook/js/quickhelp.js:44 +#: notebook/static/notebook/js/quickhelp.js:56 +msgid "delete word after" +msgstr "supprimer le mot suivant" + +#: notebook/static/notebook/js/quickhelp.js:61 +msgid "code completion or indent" +msgstr "complétion de code ou indentation" + +#: notebook/static/notebook/js/quickhelp.js:62 +msgid "tooltip" +msgstr "info-bulle" + +#: notebook/static/notebook/js/quickhelp.js:63 +msgid "indent" +msgstr "indenter" + +#: notebook/static/notebook/js/quickhelp.js:64 +msgid "dedent" +msgstr "dé-indenter" + +#: notebook/static/notebook/js/quickhelp.js:65 +msgid "select all" +msgstr "tout sélectionner" + +#: notebook/static/notebook/js/quickhelp.js:66 +msgid "undo" +msgstr "annuler" + +#: notebook/static/notebook/js/quickhelp.js:67 +#: notebook/static/notebook/js/quickhelp.js:68 +msgid "redo" +msgstr "refaire" + +#: notebook/static/notebook/js/quickhelp.js:102 +#: notebook/static/notebook/js/quickhelp.js:243 +msgid "Shift" +msgstr "Maj" + +#: notebook/static/notebook/js/quickhelp.js:103 +msgid "Alt" +msgstr "Alt" + +#: notebook/static/notebook/js/quickhelp.js:104 +msgid "Up" +msgstr "Haut" + +#: notebook/static/notebook/js/quickhelp.js:105 +msgid "Down" +msgstr "Bas" + +#: notebook/static/notebook/js/quickhelp.js:106 +msgid "Left" +msgstr "Gauche" + +#: notebook/static/notebook/js/quickhelp.js:107 +msgid "Right" +msgstr "Droite" + +#: notebook/static/notebook/js/quickhelp.js:108 +#: notebook/static/notebook/js/quickhelp.js:246 +msgid "Tab" +msgstr "Tab" + +#: notebook/static/notebook/js/quickhelp.js:109 +msgid "Caps Lock" +msgstr "Verr. Maj." + +#: notebook/static/notebook/js/quickhelp.js:110 +#: notebook/static/notebook/js/quickhelp.js:269 +msgid "Esc" +msgstr "Esc" + +#: notebook/static/notebook/js/quickhelp.js:111 +msgid "Ctrl" +msgstr "Ctrl" + +#: notebook/static/notebook/js/quickhelp.js:112 +#: notebook/static/notebook/js/quickhelp.js:290 +msgid "Enter" +msgstr "Entrée" + +#: notebook/static/notebook/js/quickhelp.js:113 +msgid "Page Up" +msgstr "Page Préc." + +#: notebook/static/notebook/js/quickhelp.js:114 +#: notebook/static/notebook/js/quickhelp.js:130 +msgid "Page Down" +msgstr "Page Suiv." + +#: notebook/static/notebook/js/quickhelp.js:115 +msgid "Home" +msgstr "Accueil" + +#: notebook/static/notebook/js/quickhelp.js:116 +msgid "End" +msgstr "Fin" + +#: notebook/static/notebook/js/quickhelp.js:117 +#: notebook/static/notebook/js/quickhelp.js:245 +msgid "Space" +msgstr "Espace" + +#: notebook/static/notebook/js/quickhelp.js:118 +msgid "Backspace" +msgstr "Retour arrière" + +#: notebook/static/notebook/js/quickhelp.js:119 +msgid "Minus" +msgstr "Moins" + +#: notebook/static/notebook/js/quickhelp.js:130 +msgid "PageUp" +msgstr "PagePréc." + +#: notebook/static/notebook/js/quickhelp.js:197 +msgid "The Jupyter Notebook has two different keyboard input modes." +msgstr "Le Notebook Jupyter offre deux modes de saisie claivier." + +#: notebook/static/notebook/js/quickhelp.js:199 +msgid "" +"Edit mode allows you to type code or text into a cell and is " +"indicated by a green cell border." +msgstr "" +"Mode Édition permet de saisir du code ou du texte dans une cellule et " +"se reconnaît à la bordure verte de la cellule." + +#: notebook/static/notebook/js/quickhelp.js:201 +msgid "" +"Command mode binds the keyboard to notebook level commands and is " +"indicated by a grey cell border with a blue left margin." +msgstr "" +"Mode Commande déclenche au clavier des actions au niveau du notebook " +"et se reconnaît à la bordure grise de la cellule, avec une marge bleue sur " +"la droite." + +#: notebook/static/notebook/js/quickhelp.js:222 +#: notebook/static/notebook/js/tooltip.js:58 +#: notebook/static/notebook/js/tooltip.js:69 +msgid "Close" +msgstr "Fermer" + +#: notebook/static/notebook/js/quickhelp.js:225 +msgid "Keyboard shortcuts" +msgstr "Raccourcis clavier" + +#: notebook/static/notebook/js/quickhelp.js:240 +msgid "Command" +msgstr "Commande" + +#: notebook/static/notebook/js/quickhelp.js:241 +msgid "Control" +msgstr "Contrôles" + +#: notebook/static/notebook/js/quickhelp.js:242 +msgid "Option" +msgstr "Option" + +#: notebook/static/notebook/js/quickhelp.js:244 +msgid "Return" +msgstr "Retour" + +#: notebook/static/notebook/js/quickhelp.js:270 +#, python-format +msgid "Command Mode (press %s to enable)" +msgstr "Mode Commande (presser %s pour l'activer)" + +#: notebook/static/notebook/js/quickhelp.js:272 +msgid "Edit Shortcuts" +msgstr "Modifier les Raccourcis Clavier" + +#: notebook/static/notebook/js/quickhelp.js:275 +msgid "edit command-mode keyboard shortcuts" +msgstr "modifier les raccourcis clavier du mode commande" + +#: notebook/static/notebook/js/quickhelp.js:292 +#, python-format +msgid "Edit Mode (press %s to enable)" +msgstr "Mode Édition (presser %s pour l'activer)" + +#: notebook/static/notebook/js/savewidget.js:49 +msgid "Autosave Failed!" +msgstr "Échec de la sauvegarde automatique !" + +#: notebook/static/notebook/js/savewidget.js:71 +#: notebook/static/tree/js/notebooklist.js:846 +#: notebook/static/tree/js/notebooklist.js:859 +msgid "Rename" +msgstr "Renommer" + +#: notebook/static/notebook/js/savewidget.js:78 +#: notebook/static/tree/js/notebooklist.js:837 +msgid "Enter a new notebook name:" +msgstr "Saisir le nouveau nom du notebook" + +#: notebook/static/notebook/js/savewidget.js:86 +msgid "Rename Notebook" +msgstr "Renommer le Notebook" + +#: notebook/static/notebook/js/savewidget.js:98 +msgid "" +"Invalid notebook name. Notebook names must have 1 or more characters and can " +"contain any characters except :/\\. Please enter a new notebook name:" +msgstr "" +"Nom de notebook invalide. Les noms de notebooks doivent posséder au moins un " +"caractère et peuvent contenir tous les caractères sauf « /\\ ». Merci de " +"saisir un nouveau nom de notebook :" + +#: notebook/static/notebook/js/savewidget.js:103 +msgid "Renaming..." +msgstr "Renommage en cours..." + +#: notebook/static/notebook/js/savewidget.js:109 +msgid "Unknown error" +msgstr "Erreur inconnue" + +#: notebook/static/notebook/js/savewidget.js:178 +msgid "no checkpoint" +msgstr "aucune sauvegarde" + +#: notebook/static/notebook/js/savewidget.js:193 +#, python-format +msgid "Last Checkpoint: %s" +msgstr "Dernière Sauvegarde : %s" + +#: notebook/static/notebook/js/savewidget.js:217 +msgid "(unsaved changes)" +msgstr "(modifié)" + +#: notebook/static/notebook/js/savewidget.js:219 +msgid "(autosaved)" +msgstr "(auto-sauvegardé)" + +#: notebook/static/notebook/js/searchandreplace.js:74 +#, python-format +msgid "" +"Warning: too many matches (%d). Some changes might not be shown or applied." +msgstr "" +"Attention : trop de correspondances (%d). Certains changements peuvent ne " +"pas être affichés ou appliqués." + +#: notebook/static/notebook/js/searchandreplace.js:77 +#, python-format +msgid "%d match" +msgid_plural "%d matches" +msgstr[0] "%d correspondance" +msgstr[1] "%d correspondances" + +#: notebook/static/notebook/js/searchandreplace.js:145 +msgid "More than 100 matches, aborting" +msgstr "Plus de 100 correspondances, annulation" + +#: notebook/static/notebook/js/searchandreplace.js:166 +msgid "Use regex (JavaScript regex syntax)" +msgstr "Utiliser des regex (syntaxe des regex JavaScript)" + +#: notebook/static/notebook/js/searchandreplace.js:174 +msgid "Replace in selected cells" +msgstr "Remplacer dans les cellules sélectionnées" + +#: notebook/static/notebook/js/searchandreplace.js:181 +msgid "Match case" +msgstr "Sensible à la casse" + +#: notebook/static/notebook/js/searchandreplace.js:187 +msgid "Find" +msgstr "Rechercher" + +#: notebook/static/notebook/js/searchandreplace.js:203 +msgid "Replace" +msgstr "Remplacer" + +#: notebook/static/notebook/js/searchandreplace.js:255 +msgid "No matches, invalid or empty regular expression" +msgstr "" +"Aucune correspondance trouvée, expression régulière vide ou invalide." + +#: notebook/static/notebook/js/searchandreplace.js:370 +msgid "Replace All" +msgstr "Tout Remplacer" + +#: notebook/static/notebook/js/searchandreplace.js:374 +msgid "Find and Replace" +msgstr "Rechercher et Remplacer" + +#: notebook/static/notebook/js/searchandreplace.js:400 +#: notebook/static/notebook/js/searchandreplace.js:401 +msgid "find and replace" +msgstr "rechercher et remplacer" + +#: notebook/static/notebook/js/textcell.js:551 +msgid "" +"Write raw LaTeX or other formats here, for use with nbconvert. It will not " +"be rendered in the notebook. When passing through nbconvert, a Raw Cell's " +"content is added to the output unmodified." +msgstr "" +"Écrivez ici du code Latex brut ou d'autres formats, pour usage avec " +"nbconvert. Il ne sera pas rendu dans le notebook. En utilisant nbconvert, le " +"contenu d'une cellule brute est ajouté tel-quel à la sortie." + +#: notebook/static/notebook/js/tooltip.js:41 +msgid "Grow the tooltip vertically (press shift-tab twice)" +msgstr "Agrandir l'info-bulle verticallement (presser Maj-Tab deux fois)" + +#: notebook/static/notebook/js/tooltip.js:48 +msgid "show the current docstring in pager (press shift-tab 4 times)" +msgstr "" +"montrer la chaîne de documentation courante dans le paginateur (presser " +"shift-tab 4 fois)" + +#: notebook/static/notebook/js/tooltip.js:49 +msgid "Open in Pager" +msgstr "Ouvrir dans le Paginateur" + +#: notebook/static/notebook/js/tooltip.js:68 +msgid "Tooltip will linger for 10 seconds while you type" +msgstr "L'info-bulle restera affichée 10 secondes pendant votre saisie" + +#: notebook/static/notebook/js/tour.js:27 +msgid "Welcome to the Notebook Tour" +msgstr "Bienvenue dans la visite du Notebook" + +#: notebook/static/notebook/js/tour.js:30 +msgid "You can use the left and right arrow keys to go backwards and forwards." +msgstr "" +"Vous pouvez utiliser les touches gauche et droite pour continuer ou revenir " +"en arrière." + +#: notebook/static/notebook/js/tour.js:33 +msgid "Filename" +msgstr "Nom du fichier" + +#: notebook/static/notebook/js/tour.js:35 +msgid "Click here to change the filename for this notebook." +msgstr "Cliquer ici pour changer le nom du fichier de ce notebook." + +#: notebook/static/notebook/js/tour.js:39 +msgid "Notebook Menubar" +msgstr "Barre de Menu du Notebook" + +#: notebook/static/notebook/js/tour.js:40 +msgid "" +"The menubar has menus for actions on the notebook, its cells, and the kernel " +"it communicates with." +msgstr "" +"La barre de menu a des menus pour les actions concernant le notebook, ses " +"cellules, et le noyau avec lequel il communique." + +#: notebook/static/notebook/js/tour.js:44 +msgid "Notebook Toolbar" +msgstr "Barre d'outils du Notebook" + +#: notebook/static/notebook/js/tour.js:45 +msgid "" +"The toolbar has buttons for the most common actions. Hover your mouse over " +"each button for more information." +msgstr "" +"La barre d'outils a des boutons pour les actions les plus fréquentes. " +"Survoler les boutons à la souris pour plus d'information." + +#: notebook/static/notebook/js/tour.js:48 +msgid "Mode Indicator" +msgstr "Indicateur de mode" + +#: notebook/static/notebook/js/tour.js:50 +msgid "" +"The Notebook has two modes: Edit Mode and Command Mode. In this area, an " +"indicator can appear to tell you which mode you are in." +msgstr "" +"Le Notebook offre deux modes : Édition et Commande. Dans cette zone, un " +"indicateur peut vous indiquer dans quel mode vous êtes." + +#: notebook/static/notebook/js/tour.js:58 +msgid "" +"Right now you are in Command Mode, and many keyboard shortcuts are " +"available. In this mode, no icon is displayed in the indicator area." +msgstr "" +"Actuellement, vous êtes en mode Commande, et de nombreux raccourcis clavier " +"sont disponibles. Dans ce mode, aucune icône n'est affichée dans la zone " +"d'indication." + +#: notebook/static/notebook/js/tour.js:64 +msgid "" +"Pressing Enter or clicking in the input text area of the cell " +"switches to Edit Mode." +msgstr "" +"Presser Entrée ou cliquer dans la zone de saisie de la cellule " +"bascule vers le Mode Édition." + +#: notebook/static/notebook/js/tour.js:70 +msgid "" +"Notice that the border around the currently active cell changed color. " +"Typing will insert text into the currently active cell." +msgstr "" +"Notez que la bordure autour de la cellule active a changé de couleur. Saisir " +"du texte au clavier l'insérera dans la cellule active." + +#: notebook/static/notebook/js/tour.js:73 +msgid "Back to Command Mode" +msgstr "Retourner au Mode Commande" + +#: notebook/static/notebook/js/tour.js:76 +msgid "" +"Pressing Esc or clicking outside of the input text area takes " +"you back to Command Mode." +msgstr "" +"Presser Esc ou cliquer en dehors de la zone de saisie de la " +"cellule vous ramène au Mode Commande." + +#: notebook/static/notebook/js/tour.js:79 +msgid "Keyboard Shortcuts" +msgstr "Raccourcis Clavier" + +#: notebook/static/notebook/js/tour.js:91 +msgid "You can click here to get a list of all of the keyboard shortcuts." +msgstr "" +"Vous pouvez cliquer ici pour afficher une liste de tous les raccourcis " +"clavier." + +#: notebook/static/notebook/js/tour.js:94 +#: notebook/static/notebook/js/tour.js:100 +msgid "Kernel Indicator" +msgstr "Indicateur de Noyau" + +#: notebook/static/notebook/js/tour.js:97 +msgid "" +"This is the Kernel indicator. It looks like this when the Kernel is idle." +msgstr "" +"Ceci est l'indicateur de Noyau. Il a cet aspect quand le Noyau est inactif." + +#: notebook/static/notebook/js/tour.js:103 +msgid "The Kernel indicator looks like this when the Kernel is busy." +msgstr "L'indicateur de Noyau a cet aspect quand le Noyau est actif." + +#: notebook/static/notebook/js/tour.js:107 +msgid "Interrupting the Kernel" +msgstr "Interrompre le Noyau" + +#: notebook/static/notebook/js/tour.js:109 +msgid "To cancel a computation in progress, you can click here." +msgstr "Pour annuler une exécution en cours, vous pouvez cliquer ici." + +#: notebook/static/notebook/js/tour.js:114 +msgid "Notification Area" +msgstr "Zone de notification" + +#: notebook/static/notebook/js/tour.js:115 +msgid "" +"Messages in response to user actions (Save, Interrupt, etc.) appear here." +msgstr "" +"Les messages en retour d'actions utilisateur (Enregistrement, Interruption, " +"etc.) s'affichent ici." + +#: notebook/static/notebook/js/tour.js:117 +msgid "End of Tour" +msgstr "Fin de la visite" + +#: notebook/static/notebook/js/tour.js:120 +msgid "This concludes the Jupyter Notebook User Interface Tour." +msgstr "" +"C'est la fin de cette visite guidée de l'Interface utilisateur du Notebook " +"Jupyter." + +#: notebook/static/notebook/js/celltoolbarpresets/attachments.js:32 +msgid "Edit Attachments" +msgstr "Modifier les Pièces-Jointes" + +#: notebook/static/notebook/js/celltoolbarpresets/default.js:19 +msgid "Cell" +msgstr "Cellule" + +#: notebook/static/notebook/js/celltoolbarpresets/default.js:29 +#: notebook/static/notebook/js/celltoolbarpresets/default.js:47 +msgid "Edit Metadata" +msgstr "Éditer les Méta-Données" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:22 +msgid "Custom" +msgstr "Personnalisé" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:32 +msgid "Set the MIME type of the raw cell:" +msgstr "Définir le type MIME de la cellule en texte brut :" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:40 +msgid "Raw Cell MIME Type" +msgstr "Type MIME de la Cellule en Texte Brut" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:74 +msgid "Raw NBConvert Format" +msgstr "Format du Texte Brut" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:81 +msgid "Raw Cell Format" +msgstr "Format de la Cellule Texte Brut" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:15 +msgid "Slide" +msgstr "Diapo" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:16 +msgid "Sub-Slide" +msgstr "Sous-Diapo" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:17 +msgid "Fragment" +msgstr "Extrait" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:18 +msgid "Skip" +msgstr "Sauter" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:19 +msgid "Notes" +msgstr "Notes" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:35 +msgid "Slide Type" +msgstr "Type de diapo" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:41 +msgid "Slideshow" +msgstr "Diaporama" + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:133 +msgid "Add tag" +msgstr "Ajouter un mot-clé" + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:163 +msgid "" +"Edit the list of tags below. All whitespace is treated as tag separators." +msgstr "" +"Modifier la liste de mots-clés ci-dessous. Les espaces sont considérés comme " +"des séparateurs." + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:172 +msgid "Edit the tags" +msgstr "Modifier les mots-clés" + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:186 +msgid "Edit Tags" +msgstr "Modifier Mots-Clés" + +#: notebook/static/tree/js/kernellist.js:86 +#: notebook/static/tree/js/terminallist.js:105 +msgid "Shutdown" +msgstr "Arrêter" + +#: notebook/static/tree/js/newnotebook.js:70 +#, python-format +msgid "Create a new notebook with %s" +msgstr "Créer un nouveau notebook avec %s" + +#: notebook/static/tree/js/newnotebook.js:101 +msgid "An error occurred while creating a new notebook." +msgstr "Une erreur s'est produite à la création du notebook" + +#: notebook/static/tree/js/notebooklist.js:122 +msgid "Creating File Failed" +msgstr "La création du fichier a échoué" + +#: notebook/static/tree/js/notebooklist.js:124 +msgid "An error occurred while creating a new file." +msgstr "Une erreur est survenue à la création du nouveau fichier." + +#: notebook/static/tree/js/notebooklist.js:142 +msgid "Creating Folder Failed" +msgstr "La création du répertoire a échoué" + +#: notebook/static/tree/js/notebooklist.js:144 +msgid "An error occurred while creating a new folder." +msgstr "Une erreur est survenue à la création du nouveau répertoire." + +#: notebook/static/tree/js/notebooklist.js:271 +msgid "Failed to read file" +msgstr "Échec de lecture du fichier" + +#: notebook/static/tree/js/notebooklist.js:272 +#, python-format +msgid "Failed to read file %s" +msgstr "Échec de lecture du fichier %s" + +#: notebook/static/tree/js/notebooklist.js:283 +#, python-format +msgid "The file size is %d MB. Do you still want to upload it?" +msgstr "Le fichier pèse %d MB. Êtes-vous certain de vouloir le téléverser ?" + +#: notebook/static/tree/js/notebooklist.js:286 +msgid "Large file size warning" +msgstr "Avertissement de taille de fichier élevée" + +#: notebook/static/tree/js/notebooklist.js:355 +msgid "Server error: " +msgstr "Erreur serveur :" + +#: notebook/static/tree/js/notebooklist.js:390 +msgid "The notebook list is empty." +msgstr "La liste des notebooks est vide." + +#: notebook/static/tree/js/notebooklist.js:463 +msgid "Click here to rename, delete, etc." +msgstr "Cliquer ici pour renommer, supprimer, etc." + +#: notebook/static/tree/js/notebooklist.js:503 +msgid "Running" +msgstr "Actif" + +#: notebook/static/tree/js/notebooklist.js:835 +msgid "Enter a new file name:" +msgstr "Saisir le nom du nouveau fichier :" + +#: notebook/static/tree/js/notebooklist.js:836 +msgid "Enter a new directory name:" +msgstr "Saisir le nom du nouveau répertoire :" + +#: notebook/static/tree/js/notebooklist.js:838 +msgid "Enter a new name:" +msgstr "Saisir un nouveau nom :" + +#: notebook/static/tree/js/notebooklist.js:843 +msgid "Rename file" +msgstr "Renommer le fichier" + +#: notebook/static/tree/js/notebooklist.js:844 +msgid "Rename directory" +msgstr "Renommer le répertoire" + +#: notebook/static/tree/js/notebooklist.js:845 +msgid "Rename notebook" +msgstr "Renommer le notebook" + +#: notebook/static/tree/js/notebooklist.js:859 +msgid "Move" +msgstr "Déplacer" + +#: notebook/static/tree/js/notebooklist.js:875 +msgid "An error occurred while renaming \"%1$s\" to \"%2$s\"." +msgstr "" +"Une erreur s'est produite pendant le renommage de « %1$s » vers « %2$s »." + +#: notebook/static/tree/js/notebooklist.js:878 +msgid "Rename Failed" +msgstr "Échec du Renommage" + +#: notebook/static/tree/js/notebooklist.js:927 +#, python-format +msgid "Enter a new destination directory path for this item:" +msgid_plural "Enter a new destination directory path for these %d items:" +msgstr[0] "Saisir un nouveau chemin de destination pour cet élément :" +msgstr[1] "Saisir un nouveau chemin de destination pour ces %d éléments :" + +#: notebook/static/tree/js/notebooklist.js:940 +#, python-format +msgid "Move an Item" +msgid_plural "Move %d Items" +msgstr[0] "Déplacer un élément" +msgstr[1] "Déplacer %d éléments" + +#: notebook/static/tree/js/notebooklist.js:959 +msgid "An error occurred while moving \"%1$s\" from \"%2$s\" to \"%3$s\"." +msgstr "" +"Une erreur s'est produite lors du déplacement de « %1$s » de « %2$s » vers " +"« %3$s »." + +#: notebook/static/tree/js/notebooklist.js:961 +msgid "Move Failed" +msgstr "Échec du déplacement" + +#: notebook/static/tree/js/notebooklist.js:1007 +#, python-format +msgid "Are you sure you want to permanently delete: \"%s\"?" +msgid_plural "" +"Are you sure you want to permanently delete the %d files or folders selected?" +msgstr[0] "Êtes-vous certain de vouloir supprimer définitivement « %s  » ?" +msgstr[1] "" +"Êtes-vous certain de vouloir supprimer définitivement les « %d  » fichiers " +"ou répertoires sélectionnés ?" + +#: notebook/static/tree/js/notebooklist.js:1035 +#, python-format +msgid "An error occurred while deleting \"%s\"." +msgstr "Une erreur s'est produite pendant la suppression de « %s »." + +#: notebook/static/tree/js/notebooklist.js:1037 +msgid "Delete Failed" +msgstr "Échec de la suppression" + +#: notebook/static/tree/js/notebooklist.js:1078 +#, python-format +msgid "Are you sure you want to duplicate: \"%s\"?" +msgid_plural "Are you sure you want to duplicate the %d files selected?" +msgstr[0] "Êtes-vous certain de vouloir dupliquer « %s » ?" +msgstr[1] "" +"Êtes-vous certain de vouloir dupliquer les « %d » fichiers sélectionnés ?" + +#: notebook/static/tree/js/notebooklist.js:1088 +msgid "Duplicate" +msgstr "Dupliquer" + +#: notebook/static/tree/js/notebooklist.js:1102 +#, python-format +msgid "An error occurred while duplicating \"%s\"." +msgstr "Une erreur s'est produite pendant la duplication de « %s »." + +#: notebook/static/tree/js/notebooklist.js:1104 +msgid "Duplicate Failed" +msgstr "Échec de la duplication" + +#: notebook/static/tree/js/notebooklist.js:1323 +msgid "Upload" +msgstr "Téléverser" + +#: notebook/static/tree/js/notebooklist.js:1332 +msgid "Invalid file name" +msgstr "Nom de fichier invalide" + +#: notebook/static/tree/js/notebooklist.js:1333 +msgid "File names must be at least one character and not start with a period" +msgstr "" +"Les noms des fichier doivent compter au moins un caractère et ne doivent pas " +"commencer avec un point." + +#: notebook/static/tree/js/notebooklist.js:1362 +msgid "Cannot upload invalid Notebook" +msgstr "Impossible de téléverser un Notebook invalide" + +#: notebook/static/tree/js/notebooklist.js:1395 +#, python-format +msgid "There is already a file named \"%s\". Do you want to replace it?" +msgstr "Il y a déjà un fichier nommé « %s ». Souhaitez-vous le remplacer ?" + +#: notebook/static/tree/js/notebooklist.js:1397 +msgid "Replace file" +msgstr "Remplacer le fichier" diff --git a/nbclassic/i18n/fr_FR/LC_MESSAGES/nbui.po b/nbclassic/i18n/fr_FR/LC_MESSAGES/nbui.po new file mode 100644 index 000000000..7cad18a34 --- /dev/null +++ b/nbclassic/i18n/fr_FR/LC_MESSAGES/nbui.po @@ -0,0 +1,745 @@ +# Translations template for Jupyter. +# Copyright (C) 2017 ORGANIZATION +# This file is distributed under the same license as the Jupyter project. +# FIRST AUTHOR , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: Jupyter VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2018-08-29 17:49+0200\n" +"PO-Revision-Date: 2018-09-15 17:55+0200\n" +"Last-Translator: Jocelyn Delalande \n" +"Language-Team: \n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" +"X-Generator: Poedit 1.8.11\n" + +#: notebook/templates/404.html:3 +msgid "You are requesting a page that does not exist!" +msgstr "Vous demandez une page qui n'existe pas !" + +#: notebook/templates/edit.html:37 +msgid "current mode" +msgstr "mode actuel" + +#: notebook/templates/edit.html:48 notebook/templates/notebook.html:78 +msgid "File" +msgstr "Fichier" + +#: notebook/templates/edit.html:50 notebook/templates/tree.html:57 +msgid "New" +msgstr "Nouveau" + +#: notebook/templates/edit.html:51 +msgid "Save" +msgstr "Enregistrer" + +#: notebook/templates/edit.html:52 notebook/templates/tree.html:36 +msgid "Rename" +msgstr "Renommer" + +#: notebook/templates/edit.html:53 notebook/templates/tree.html:38 +msgid "Download" +msgstr "Télécharger" + +#: notebook/templates/edit.html:56 notebook/templates/notebook.html:131 +#: notebook/templates/tree.html:41 +msgid "Edit" +msgstr "Édition" + +#: notebook/templates/edit.html:58 +msgid "Find" +msgstr "Rechercher" + +#: notebook/templates/edit.html:59 +msgid "Find & Replace" +msgstr "Rechercher & Remplacer" + +#: notebook/templates/edit.html:61 +msgid "Key Map" +msgstr "Raccourcis clavier" + +#: notebook/templates/edit.html:62 +msgid "Default" +msgstr "Par Défaut" + +#: notebook/templates/edit.html:63 +msgid "Sublime Text" +msgstr "Sublime Text" + +#: notebook/templates/edit.html:68 notebook/templates/notebook.html:159 +#: notebook/templates/tree.html:40 +msgid "View" +msgstr "Affichage" + +#: notebook/templates/edit.html:70 notebook/templates/notebook.html:162 +msgid "Show/Hide the logo and notebook title (above menu bar)" +msgstr "Afficher/Masquer le logo et le titre du notebook (au-dessus de la " +"barre de menu)" + +#: notebook/templates/edit.html:71 notebook/templates/notebook.html:163 +msgid "Toggle Header" +msgstr "Afficher/Masquer l'en-tête" + +#: notebook/templates/edit.html:72 notebook/templates/notebook.html:171 +msgid "Toggle Line Numbers" +msgstr "Afficher/Masquer les numéros de ligne" + +#: notebook/templates/edit.html:75 +msgid "Language" +msgstr "Langage" + +#: notebook/templates/error.html:23 +msgid "The error was:" +msgstr "L'erreur était :" + +#: notebook/templates/login.html:24 +msgid "Password or token:" +msgstr "Mot de passe ou jeton:" + +#: notebook/templates/login.html:26 +msgid "Password:" +msgstr "Mot de passe :" + +#: notebook/templates/login.html:31 +msgid "Log in" +msgstr "Se connecter" + +#: notebook/templates/login.html:39 +msgid "No login available, you shouldn't be seeing this page." +msgstr "Connexion non disponible, vous ne devriez pas voir cette page." + +#: notebook/templates/logout.html:24 +#, python-format +msgid "Proceed to the dashboard" +msgstr "Continuer vers le tableau de bord" + +#: notebook/templates/logout.html:26 +#, python-format +msgid "Proceed to the login page" +msgstr "Continuer vers la page de connexion" + +#: notebook/templates/notebook.html:62 +msgid "Menu" +msgstr "Menu" + +#: notebook/templates/notebook.html:65 notebook/templates/notebook.html:254 +msgid "Kernel" +msgstr "Noyau" + +#: notebook/templates/notebook.html:68 +msgid "This notebook is read-only" +msgstr "Ce notebook est en lecture seule" + +#: notebook/templates/notebook.html:81 +msgid "New Notebook" +msgstr "Nouveau Notebook" + +#: notebook/templates/notebook.html:85 +msgid "Opens a new window with the Dashboard view" +msgstr "Ouvre une nouvelle fenêtre de tableau de bord" + +#: notebook/templates/notebook.html:86 +msgid "Open..." +msgstr "Ouvrir..." + +#: notebook/templates/notebook.html:90 +msgid "Open a copy of this notebook's contents and start a new kernel" +msgstr "Ouvrir une copie du contenu de ce notebook et démarrer un nouveau noyau" + +#: notebook/templates/notebook.html:91 +msgid "Make a Copy..." +msgstr "Faire une copie..." + +#: notebook/templates/notebook.html:92 +msgid "Rename..." +msgstr "Renommer..." + +#: notebook/templates/notebook.html:93 +msgid "Save and Checkpoint" +msgstr "Créer une nouvelle sauvegarde" + +#: notebook/templates/notebook.html:96 +msgid "Revert to Checkpoint" +msgstr "Restaurer la sauvegarde" + +#: notebook/templates/notebook.html:106 +msgid "Print Preview" +msgstr "Imprimer l'aperçu" + +#: notebook/templates/notebook.html:107 +msgid "Download as" +msgstr "Télécharger au format" + +#: notebook/templates/notebook.html:109 +msgid "Notebook (.ipynb)" +msgstr "Notebook (.ipynb)" + +#: notebook/templates/notebook.html:110 +msgid "Script" +msgstr "Script" + +#: notebook/templates/notebook.html:111 +msgid "HTML (.html)" +msgstr "HTML (.html)" + +#: notebook/templates/notebook.html:112 +msgid "Markdown (.md)" +msgstr "Markdown (.md)" + +#: notebook/templates/notebook.html:113 +msgid "reST (.rst)" +msgstr "reST (.rst)" + +#: notebook/templates/notebook.html:114 +msgid "LaTeX (.tex)" +msgstr "LaTeX (.tex)" + +#: notebook/templates/notebook.html:115 +msgid "PDF via LaTeX (.pdf)" +msgstr "PDF via LaTeX (.pdf)" + +#: notebook/templates/notebook.html:118 +msgid "Deploy as" +msgstr "Déployer en tant que" + +#: notebook/templates/notebook.html:123 +msgid "Trust the output of this notebook" +msgstr "Faire confiance à la sortie de ce notebook" + +#: notebook/templates/notebook.html:124 +msgid "Trust Notebook" +msgstr "Faire confiance au notebook" + +#: notebook/templates/notebook.html:127 +msgid "Shutdown this notebook's kernel, and close this window" +msgstr "Arrêter le noyau de ce notebook et fermer cette fenêtre" + +#: notebook/templates/notebook.html:128 +msgid "Close and Halt" +msgstr "Fermer et arrêter" + +#: notebook/templates/notebook.html:133 +msgid "Cut Cells" +msgstr "Couper les cellules" + +#: notebook/templates/notebook.html:134 +msgid "Copy Cells" +msgstr "Copier les cellules" + +#: notebook/templates/notebook.html:135 +msgid "Paste Cells Above" +msgstr "Coller les cellules avant" + +#: notebook/templates/notebook.html:136 +msgid "Paste Cells Below" +msgstr "Coller les cellules après" + +#: notebook/templates/notebook.html:137 +msgid "Paste Cells & Replace" +msgstr "Coller les cellules & remplacer" + +#: notebook/templates/notebook.html:138 +msgid "Delete Cells" +msgstr "Supprimer les cellules" + +#: notebook/templates/notebook.html:139 +msgid "Undo Delete Cells" +msgstr "Annuler la suppression des cellules" + +#: notebook/templates/notebook.html:141 +msgid "Split Cell" +msgstr "Diviser la cellule" + +#: notebook/templates/notebook.html:142 +msgid "Merge Cell Above" +msgstr "Fusionner avec la cellule précédente" + +#: notebook/templates/notebook.html:143 +msgid "Merge Cell Below" +msgstr "Fusionner avec la cellule suivante" + +#: notebook/templates/notebook.html:145 +msgid "Move Cell Up" +msgstr "Déplacer la cellule vers le haut" + +#: notebook/templates/notebook.html:146 +msgid "Move Cell Down" +msgstr "Déplacer la cellule vers le bas" + +#: notebook/templates/notebook.html:148 +msgid "Edit Notebook Metadata" +msgstr "Éditer les méta-données du notebook" + +#: notebook/templates/notebook.html:150 +msgid "Find and Replace" +msgstr "Rechercher et remplacer" + +#: notebook/templates/notebook.html:152 +msgid "Cut Cell Attachments" +msgstr "Couper les pièces-Jointes de la cellule" + +#: notebook/templates/notebook.html:153 +msgid "Copy Cell Attachments" +msgstr "Copier les pièces-jointes de la cellule" + +#: notebook/templates/notebook.html:154 +msgid "Paste Cell Attachments" +msgstr "Coller les pièces-jointes de la cellule" + +#: notebook/templates/notebook.html:156 +msgid "Insert Image" +msgstr "Insérer une image" + +#: notebook/templates/notebook.html:166 +msgid "Show/Hide the action icons (below menu bar)" +msgstr "Afficher/Masquer les icônes d'action (en-dessous de la barre de menu)" + +#: notebook/templates/notebook.html:167 +msgid "Toggle Toolbar" +msgstr "Afficher/Masquer la barre d'outils" + +#: notebook/templates/notebook.html:170 +msgid "Show/Hide line numbers in cells" +msgstr "Afficher/Masquer les numéros de ligne dans les cellules" + +#: notebook/templates/notebook.html:174 +msgid "Cell Toolbar" +msgstr "Barre d'outil de cellule" + +#: notebook/templates/notebook.html:179 +msgid "Insert" +msgstr "Insérer" + +#: notebook/templates/notebook.html:182 +msgid "Insert an empty Code cell above the currently active cell" +msgstr "Insérer une cellule de code vide avant de la cellule active" + +#: notebook/templates/notebook.html:183 +msgid "Insert Cell Above" +msgstr "Insérer une cellule avant" + +#: notebook/templates/notebook.html:185 +msgid "Insert an empty Code cell below the currently active cell" +msgstr "Insérer une cellule de code vide après la cellule active" + +#: notebook/templates/notebook.html:186 +msgid "Insert Cell Below" +msgstr "Insérer une cellule après" + +#: notebook/templates/notebook.html:189 +msgid "Cell" +msgstr "Cellule" + +#: notebook/templates/notebook.html:191 +msgid "Run this cell, and move cursor to the next one" +msgstr "Exécuter cette cellule, et déplacer le curseur à la suivante" + +#: notebook/templates/notebook.html:192 +msgid "Run Cells" +msgstr "Exécuter les cellules" + +#: notebook/templates/notebook.html:193 +msgid "Run this cell, select below" +msgstr "Exécuter cette cellule, sélectionner la suivante" + +#: notebook/templates/notebook.html:194 +msgid "Run Cells and Select Below" +msgstr "Exécuter les cellules et sélectionner la suivante" + +#: notebook/templates/notebook.html:195 +msgid "Run this cell, insert below" +msgstr "Exécuter la cellule et insérer à la suite" + +#: notebook/templates/notebook.html:196 +msgid "Run Cells and Insert Below" +msgstr "Exécuter les cellules et insérer après" + +#: notebook/templates/notebook.html:197 +msgid "Run all cells in the notebook" +msgstr "Exécuter toutes les cellules du notebook" + +#: notebook/templates/notebook.html:198 +msgid "Run All" +msgstr "Exécuter tout" + +#: notebook/templates/notebook.html:199 +msgid "Run all cells above (but not including) this cell" +msgstr "Exécuter toutes les cellules avant celle-ci (non incluse)" + +#: notebook/templates/notebook.html:200 +msgid "Run All Above" +msgstr "Exécuter toutes les précédentes" + +#: notebook/templates/notebook.html:201 +msgid "Run this cell and all cells below it" +msgstr "Exécuter cette cellule et toutes les suivantes" + +#: notebook/templates/notebook.html:202 +msgid "Run All Below" +msgstr "Exécuter toutes les suivantes" + +#: notebook/templates/notebook.html:205 +msgid "" +"All cells in the notebook have a cell type. By default, new cells are " +"created as 'Code' cells" +msgstr "" +"Toutes les cellules dans le notebook ont un type de " +"cellule. Par défaut, les nouvelles cellules sont de type 'Code'" + +#: notebook/templates/notebook.html:206 +msgid "Cell Type" +msgstr "Type de cellule" + +#: notebook/templates/notebook.html:209 +msgid "" +"Contents will be sent to the kernel for execution, and output will display " +"in the footer of cell" +msgstr "" +"Le contenu sera envoyé au noyau pour exécution, et la sortie sera affichée " +"dans le pied de cellule" + +#: notebook/templates/notebook.html:212 +msgid "Contents will be rendered as HTML and serve as explanatory text" +msgstr "" +"Le contenu sera rendu en tant que HTML afin de servir de texte explicatif" + +#: notebook/templates/notebook.html:213 notebook/templates/notebook.html:298 +msgid "Markdown" +msgstr "Markdown" + +#: notebook/templates/notebook.html:215 +msgid "Contents will pass through nbconvert unmodified" +msgstr "Le contenu passera par nbconvert qui ne l'altèrera pas" + +#: notebook/templates/notebook.html:216 +msgid "Raw NBConvert" +msgstr "Texte Brut (pour NBConvert)" + +#: notebook/templates/notebook.html:220 +msgid "Current Outputs" +msgstr "Sorties actuelles" + +#: notebook/templates/notebook.html:223 +msgid "Hide/Show the output of the current cell" +msgstr "Masquer/Afficher la sortie de la cellule actuelle" + +#: notebook/templates/notebook.html:224 notebook/templates/notebook.html:240 +msgid "Toggle" +msgstr "Afficher/Masquer" + +#: notebook/templates/notebook.html:227 +msgid "Scroll the output of the current cell" +msgstr "Faire défiler la sortie de la cellule actuelle" + +#: notebook/templates/notebook.html:228 notebook/templates/notebook.html:244 +msgid "Toggle Scrolling" +msgstr "Activer/Désactiver le défilement" + +#: notebook/templates/notebook.html:231 +msgid "Clear the output of the current cell" +msgstr "Effacer la sortie de la cellule actuelle" + +#: notebook/templates/notebook.html:232 notebook/templates/notebook.html:248 +msgid "Clear" +msgstr "Effacer" + +#: notebook/templates/notebook.html:236 +msgid "All Output" +msgstr "Toute la sortie" + +#: notebook/templates/notebook.html:239 +msgid "Hide/Show the output of all cells" +msgstr "Afficher/Masquer la sortie de toutes les cellules" + +#: notebook/templates/notebook.html:243 +msgid "Scroll the output of all cells" +msgstr "Faire défiler la sortie de toutes les cellules" + +#: notebook/templates/notebook.html:247 +msgid "Clear the output of all cells" +msgstr "Effacer la sortie de toutes les cellules" + +#: notebook/templates/notebook.html:257 +msgid "Send Keyboard Interrupt (CTRL-C) to the Kernel" +msgstr "Envoyer l'interruption clavier (CTRL-C) au noyau" + +#: notebook/templates/notebook.html:258 +msgid "Interrupt" +msgstr "Interrompre" + +#: notebook/templates/notebook.html:261 +msgid "Restart the Kernel" +msgstr "Redémarrer le noyau" + +#: notebook/templates/notebook.html:262 +msgid "Restart" +msgstr "Redémarrer" + +#: notebook/templates/notebook.html:265 +msgid "Restart the Kernel and clear all output" +msgstr "Redémarrer le noyau et effacer toutes les sorties" + +#: notebook/templates/notebook.html:266 +msgid "Restart & Clear Output" +msgstr "Redémarrer & effacer les sorties" + +#: notebook/templates/notebook.html:269 +msgid "Restart the Kernel and re-run the notebook" +msgstr "Redémarrer le noyau et ré-exécuter le noteboook" + +#: notebook/templates/notebook.html:270 +msgid "Restart & Run All" +msgstr "Redémarrer & tout exécuter" + +#: notebook/templates/notebook.html:273 +msgid "Reconnect to the Kernel" +msgstr "Reconnecter au noyau" + +#: notebook/templates/notebook.html:274 +msgid "Reconnect" +msgstr "Reconnecter" + +#: notebook/templates/notebook.html:282 +msgid "Change kernel" +msgstr "Changer de noyau" + +#: notebook/templates/notebook.html:287 +msgid "Help" +msgstr "Aide" + +#: notebook/templates/notebook.html:290 +msgid "A quick tour of the notebook user interface" +msgstr "Une rapide visite de l'interface utilisateur du notebook" + +#: notebook/templates/notebook.html:290 +msgid "User Interface Tour" +msgstr "Visite de l'interface utilisateur" + +#: notebook/templates/notebook.html:291 +msgid "Opens a tooltip with all keyboard shortcuts" +msgstr "Ouvre une infobulle listant tous les raccourcis clavier" + +#: notebook/templates/notebook.html:291 +msgid "Keyboard Shortcuts" +msgstr "Raccourcis clavier" + +#: notebook/templates/notebook.html:292 +msgid "Opens a dialog allowing you to edit Keyboard shortcuts" +msgstr "Ouvre une boîte de dialogue permettant de modifier les raccourcis clavier" + +#: notebook/templates/notebook.html:292 +msgid "Edit Keyboard Shortcuts" +msgstr "Editer les raccourcis clavier" + +#: notebook/templates/notebook.html:297 +msgid "Notebook Help" +msgstr "Aide notebook" + +#: notebook/templates/notebook.html:303 +msgid "Opens in a new window" +msgstr "S'ouvre dans une nouvelle fenêtre" + +#: notebook/templates/notebook.html:319 +msgid "About Jupyter Notebook" +msgstr "À propos de Jupyter Notebook" + +#: notebook/templates/notebook.html:319 +msgid "About" +msgstr "À propos" + +#: notebook/templates/page.html:114 +msgid "Jupyter Notebook requires JavaScript." +msgstr "Jupyter Notebook nécessite JavaScript" + +#: notebook/templates/page.html:115 +msgid "Please enable it to proceed. " +msgstr "Merci de l'activer pour continuer." + +#: notebook/templates/page.html:121 +msgid "dashboard" +msgstr "tableau de bord" + +#: notebook/templates/page.html:132 +msgid "Logout" +msgstr "Se déconnecter" + +#: notebook/templates/page.html:134 +msgid "Login" +msgstr "Se connecter" + +#: notebook/templates/tree.html:23 +msgid "Files" +msgstr "Fichiers" + +#: notebook/templates/tree.html:24 +msgid "Running" +msgstr "Actifs" + +#: notebook/templates/tree.html:25 +msgid "Clusters" +msgstr "Grappes" + +#: notebook/templates/tree.html:32 +msgid "Select items to perform actions on them." +msgstr "Sélectionner des éléments pour leur appliquer des actions." + +#: notebook/templates/tree.html:35 +msgid "Duplicate selected" +msgstr "Dupliquer la sélection" + +#: notebook/templates/tree.html:35 +msgid "Duplicate" +msgstr "Dupliquer" + +#: notebook/templates/tree.html:36 +msgid "Rename selected" +msgstr "Renommer la sélection" + +#: notebook/templates/tree.html:37 +msgid "Move selected" +msgstr "Déplacer la sélection" + +#: notebook/templates/tree.html:37 +msgid "Move" +msgstr "Déplacer" + +#: notebook/templates/tree.html:38 +msgid "Download selected" +msgstr "Télécharger la sélection" + +#: notebook/templates/tree.html:39 +msgid "Shutdown selected notebook(s)" +msgstr "Arrêter le(s) notebook(s) sélectionné(s)" + +#: notebook/templates/notebook.html:278 notebook/templates/tree.html:39 +msgid "Shutdown" +msgstr "Arrêter" + +#: notebook/templates/tree.html:40 +msgid "View selected" +msgstr "Voir la sélection" + +#: notebook/templates/tree.html:41 +msgid "Edit selected" +msgstr "Éditer la sélection" + +#: notebook/templates/tree.html:42 +msgid "Delete selected" +msgstr "Supprimer la sélection" + +#: notebook/templates/tree.html:50 +msgid "Click to browse for a file to upload." +msgstr "Cliquer pour choisir un fichier à téléverser" + +#: notebook/templates/tree.html:51 +msgid "Upload" +msgstr "Téléverser" + +#: notebook/templates/tree.html:65 +msgid "Text File" +msgstr "Fichier texte" + +#: notebook/templates/tree.html:68 +msgid "Folder" +msgstr "Répertoire" + +#: notebook/templates/tree.html:72 +msgid "Terminal" +msgstr "Terminal" + +#: notebook/templates/tree.html:76 +msgid "Terminals Unavailable" +msgstr "Terminaux non disponibles" + +#: notebook/templates/tree.html:82 +msgid "Refresh notebook list" +msgstr "Rafraîchir la liste des notebooks" + +#: notebook/templates/tree.html:90 +msgid "Select All / None" +msgstr "Sélectionner tout / aucun" + +#: notebook/templates/tree.html:93 +msgid "Select..." +msgstr "Sélectionner..." + +#: notebook/templates/tree.html:98 +msgid "Select All Folders" +msgstr "Sélectionner tous les répertoires" + +#: notebook/templates/tree.html:98 +msgid "Folders" +msgstr "Répertoires" + +#: notebook/templates/tree.html:99 +msgid "Select All Notebooks" +msgstr "Sélectionner tous les notebooks" + +#: notebook/templates/tree.html:99 +msgid "All Notebooks" +msgstr "Tous les notebooks" + +#: notebook/templates/tree.html:100 +msgid "Select Running Notebooks" +msgstr "Sélectionner les notebooks en cours d'exécution" + +#: notebook/templates/tree.html:100 +msgid "Running" +msgstr "Actifs" + +#: notebook/templates/tree.html:101 +msgid "Select All Files" +msgstr "Sélectionner tous les fichiers" + +#: notebook/templates/tree.html:101 +msgid "Files" +msgstr "Fichiers" + +#: notebook/templates/tree.html:114 +msgid "Last Modified" +msgstr "Dernière modification" + +#: notebook/templates/tree.html:120 +msgid "Name" +msgstr "Nom" + +#: notebook/templates/tree.html:130 +msgid "Currently running Jupyter processes" +msgstr "Processus Jupyter en cours d'exécution" + +#: notebook/templates/tree.html:134 +msgid "Refresh running list" +msgstr "Rafraîchir la liste des actifs" + +#: notebook/templates/tree.html:150 +msgid "There are no terminals running." +msgstr "Il n'y a aucun terminal en cours d'exécution." + +#: notebook/templates/tree.html:152 +msgid "Terminals are unavailable." +msgstr "Les terminaux sont indisponibles." + +#: notebook/templates/tree.html:162 +msgid "Notebooks" +msgstr "Notebooks" + +#: notebook/templates/tree.html:169 +msgid "There are no notebooks running." +msgstr "Il n'y a aucun notebook en cours d'exécution." + +#: notebook/templates/tree.html:178 +msgid "Clusters tab is now provided by IPython parallel." +msgstr "L'onglet des grappes est désormais fourni par IPython parallel." + +#: notebook/templates/tree.html:179 +msgid "" +"See 'IPython parallel' for installation details." +msgstr "" +"Voir 'IPython parallel' pour les détails d'installation." diff --git a/nbclassic/i18n/fr_FR/LC_MESSAGES/notebook.po b/nbclassic/i18n/fr_FR/LC_MESSAGES/notebook.po new file mode 100644 index 000000000..5437b1b0f --- /dev/null +++ b/nbclassic/i18n/fr_FR/LC_MESSAGES/notebook.po @@ -0,0 +1,480 @@ +# Translations template for Jupyter. +# Copyright (C) 2017 ORGANIZATION +# This file is distributed under the same license as the Jupyter project. +# FIRST AUTHOR , 2017. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Jupyter VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2017-07-08 21:52-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" + +#: notebook/notebookapp.py:53 +msgid "The Jupyter Notebook requires tornado >= 4.0" +msgstr "" + +#: notebook/notebookapp.py:57 +msgid "The Jupyter Notebook requires tornado >= 4.0, but you have < 1.1.0" +msgstr "" + +#: notebook/notebookapp.py:59 +#, python-format +msgid "The Jupyter Notebook requires tornado >= 4.0, but you have %s" +msgstr "" + +#: notebook/notebookapp.py:209 +msgid "The `ignore_minified_js` flag is deprecated and no longer works." +msgstr "" + +#: notebook/notebookapp.py:210 +#, python-format +msgid "Alternatively use `%s` when working on the notebook's Javascript and LESS" +msgstr "" + +#: notebook/notebookapp.py:211 +msgid "The `ignore_minified_js` flag is deprecated and will be removed in Notebook 6.0" +msgstr "" + +#: notebook/notebookapp.py:389 +msgid "List currently running notebook servers." +msgstr "" + +#: notebook/notebookapp.py:393 +msgid "Produce machine-readable JSON output." +msgstr "" + +#: notebook/notebookapp.py:397 +msgid "If True, each line of output will be a JSON object with the details from the server info file." +msgstr "" + +#: notebook/notebookapp.py:402 +msgid "Currently running servers:" +msgstr "" + +#: notebook/notebookapp.py:419 +msgid "Don't open the notebook in a browser after startup." +msgstr "" + +#: notebook/notebookapp.py:423 +msgid "DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib." +msgstr "" + +#: notebook/notebookapp.py:439 +msgid "Allow the notebook to be run from root user." +msgstr "" + +#: notebook/notebookapp.py:470 +msgid "" +"The Jupyter HTML Notebook.\n" +" \n" +" This launches a Tornado based HTML Notebook Server that serves up an HTML5/Javascript Notebook client." +msgstr "" + +#: notebook/notebookapp.py:509 +msgid "Deprecated: Use minified JS file or not, mainly use during dev to avoid JS recompilation" +msgstr "" + +#: notebook/notebookapp.py:540 +msgid "Set the Access-Control-Allow-Credentials: true header" +msgstr "" + +#: notebook/notebookapp.py:544 +msgid "Whether to allow the user to run the notebook as root." +msgstr "" + +#: notebook/notebookapp.py:548 +msgid "The default URL to redirect to from `/`" +msgstr "" + +#: notebook/notebookapp.py:552 +msgid "The IP address the notebook server will listen on." +msgstr "" + +#: notebook/notebookapp.py:565 +#, python-format +msgid "" +"Cannot bind to localhost, using 127.0.0.1 as default ip\n" +"%s" +msgstr "" + +#: notebook/notebookapp.py:579 +msgid "The port the notebook server will listen on." +msgstr "" + +#: notebook/notebookapp.py:583 +msgid "The number of additional ports to try if the specified port is not available." +msgstr "" + +#: notebook/notebookapp.py:587 +msgid "The full path to an SSL/TLS certificate file." +msgstr "" + +#: notebook/notebookapp.py:591 +msgid "The full path to a private key file for usage with SSL/TLS." +msgstr "" + +#: notebook/notebookapp.py:595 +msgid "The full path to a certificate authority certificate for SSL/TLS client authentication." +msgstr "" + +#: notebook/notebookapp.py:599 +msgid "The file where the cookie secret is stored." +msgstr "" + +#: notebook/notebookapp.py:628 +#, python-format +msgid "Writing notebook server cookie secret to %s" +msgstr "" + +#: notebook/notebookapp.py:635 +#, python-format +msgid "Could not set permissions on %s" +msgstr "" + +#: notebook/notebookapp.py:640 +msgid "" +"Token used for authenticating first-time connections to the server.\n" +"\n" +" When no password is enabled,\n" +" the default is to generate a new, random token.\n" +"\n" +" Setting to an empty string disables authentication altogether, which is NOT RECOMMENDED.\n" +" " +msgstr "" + +#: notebook/notebookapp.py:650 +msgid "" +"One-time token used for opening a browser.\n" +" Once used, this token cannot be used again.\n" +" " +msgstr "" + +#: notebook/notebookapp.py:726 +msgid "" +"Specify Where to open the notebook on startup. This is the\n" +" `new` argument passed to the standard library method `webbrowser.open`.\n" +" The behaviour is not guaranteed, but depends on browser support. Valid\n" +" values are:\n" +" 2 opens a new tab,\n" +" 1 opens a new window,\n" +" 0 opens in an existing window.\n" +" See the `webbrowser.open` documentation for details.\n" +" " +msgstr "" + +#: notebook/notebookapp.py:737 +msgid "DEPRECATED, use tornado_settings" +msgstr "" + +#: notebook/notebookapp.py:742 +msgid "" +"\n" +" webapp_settings is deprecated, use tornado_settings.\n" +msgstr "" + +#: notebook/notebookapp.py:746 +msgid "Supply overrides for the tornado.web.Application that the Jupyter notebook uses." +msgstr "" + +#: notebook/notebookapp.py:750 +msgid "" +"\n" +" Set the tornado compression options for websocket connections.\n" +"\n" +" This value will be returned from :meth:`WebSocketHandler.get_compression_options`.\n" +" None (default) will disable compression.\n" +" A dict (even an empty one) will enable compression.\n" +"\n" +" See the tornado docs for WebSocketHandler.get_compression_options for details.\n" +" " +msgstr "" + +#: notebook/notebookapp.py:761 +msgid "Supply overrides for terminado. Currently only supports \"shell_command\"." +msgstr "" + +#: notebook/notebookapp.py:764 +msgid "Extra keyword arguments to pass to `set_secure_cookie`. See tornado's set_secure_cookie docs for details." +msgstr "" + +#: notebook/notebookapp.py:768 +msgid "" +"Supply SSL options for the tornado HTTPServer.\n" +" See the tornado docs for details." +msgstr "" + +#: notebook/notebookapp.py:772 +msgid "Supply extra arguments that will be passed to Jinja environment." +msgstr "" + +#: notebook/notebookapp.py:776 +msgid "Extra variables to supply to jinja templates when rendering." +msgstr "" + +#: notebook/notebookapp.py:812 +msgid "DEPRECATED use base_url" +msgstr "" + +#: notebook/notebookapp.py:816 +msgid "base_project_url is deprecated, use base_url" +msgstr "" + +#: notebook/notebookapp.py:832 +msgid "Path to search for custom.js, css" +msgstr "" + +#: notebook/notebookapp.py:844 +msgid "" +"Extra paths to search for serving jinja templates.\n" +"\n" +" Can be used to override templates from notebook.templates." +msgstr "" + +#: notebook/notebookapp.py:855 +msgid "extra paths to look for Javascript notebook extensions" +msgstr "" + +#: notebook/notebookapp.py:900 +#, python-format +msgid "Using MathJax: %s" +msgstr "" + +#: notebook/notebookapp.py:903 +msgid "The MathJax.js configuration file that is to be used." +msgstr "" + +#: notebook/notebookapp.py:908 +#, python-format +msgid "Using MathJax configuration file: %s" +msgstr "" + +#: notebook/notebookapp.py:914 +msgid "The notebook manager class to use." +msgstr "" + +#: notebook/notebookapp.py:920 +msgid "The kernel manager class to use." +msgstr "" + +#: notebook/notebookapp.py:926 +msgid "The session manager class to use." +msgstr "" + +#: notebook/notebookapp.py:932 +msgid "The config manager class to use" +msgstr "" + +#: notebook/notebookapp.py:953 +msgid "The login handler class to use." +msgstr "" + +#: notebook/notebookapp.py:960 +msgid "The logout handler class to use." +msgstr "" + +#: notebook/notebookapp.py:964 +msgid "Whether to trust or not X-Scheme/X-Forwarded-Proto and X-Real-Ip/X-Forwarded-For headerssent by the upstream reverse proxy. Necessary if the proxy handles SSL" +msgstr "" + +#: notebook/notebookapp.py:976 +msgid "" +"\n" +" DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib.\n" +" " +msgstr "" + +#: notebook/notebookapp.py:988 +msgid "Support for specifying --pylab on the command line has been removed." +msgstr "" + +#: notebook/notebookapp.py:990 +msgid "Please use `%pylab{0}` or `%matplotlib{0}` in the notebook itself." +msgstr "" + +#: notebook/notebookapp.py:995 +msgid "The directory to use for notebooks and kernels." +msgstr "" + +#: notebook/notebookapp.py:1018 +#, python-format +msgid "No such notebook dir: '%r'" +msgstr "" + +#: notebook/notebookapp.py:1031 +msgid "DEPRECATED use the nbserver_extensions dict instead" +msgstr "" + +#: notebook/notebookapp.py:1036 +msgid "server_extensions is deprecated, use nbserver_extensions" +msgstr "" + +#: notebook/notebookapp.py:1040 +msgid "Dict of Python modules to load as notebook server extensions.Entry values can be used to enable and disable the loading ofthe extensions. The extensions will be loaded in alphabetical order." +msgstr "" + +#: notebook/notebookapp.py:1049 +msgid "Reraise exceptions encountered loading server extensions?" +msgstr "" + +#: notebook/notebookapp.py:1052 +msgid "" +"(msgs/sec)\n" +" Maximum rate at which messages can be sent on iopub before they are\n" +" limited." +msgstr "" + +#: notebook/notebookapp.py:1056 +msgid "" +"(bytes/sec)\n" +" Maximum rate at which stream output can be sent on iopub before they are\n" +" limited." +msgstr "" + +#: notebook/notebookapp.py:1060 +msgid "" +"(sec) Time window used to \n" +" check the message and data rate limits." +msgstr "" + +#: notebook/notebookapp.py:1071 +#, python-format +msgid "No such file or directory: %s" +msgstr "" + +#: notebook/notebookapp.py:1141 +msgid "Notebook servers are configured to only be run with a password." +msgstr "" + +#: notebook/notebookapp.py:1142 +msgid "Hint: run the following command to set a password" +msgstr "" + +#: notebook/notebookapp.py:1143 +msgid "\t$ python -m notebook.auth password" +msgstr "" + +#: notebook/notebookapp.py:1181 +#, python-format +msgid "The port %i is already in use, trying another port." +msgstr "" + +#: notebook/notebookapp.py:1184 +#, python-format +msgid "Permission to listen on port %i denied" +msgstr "" + +#: notebook/notebookapp.py:1193 +msgid "ERROR: the notebook server could not be started because no available port could be found." +msgstr "" + +#: notebook/notebookapp.py:1199 +msgid "[all ip addresses on your system]" +msgstr "" + +#: notebook/notebookapp.py:1223 +#, python-format +msgid "Terminals not available (error was %s)" +msgstr "" + +#: notebook/notebookapp.py:1259 +msgid "interrupted" +msgstr "" + +#: notebook/notebookapp.py:1261 +msgid "y" +msgstr "" + +#: notebook/notebookapp.py:1262 +msgid "n" +msgstr "" + +#: notebook/notebookapp.py:1263 +#, python-format +msgid "Shutdown this notebook server (%s/[%s])? " +msgstr "" + +#: notebook/notebookapp.py:1269 +msgid "Shutdown confirmed" +msgstr "" + +#: notebook/notebookapp.py:1273 +msgid "No answer for 5s:" +msgstr "" + +#: notebook/notebookapp.py:1274 +msgid "resuming operation..." +msgstr "" + +#: notebook/notebookapp.py:1282 +#, python-format +msgid "received signal %s, stopping" +msgstr "" + +#: notebook/notebookapp.py:1338 +#, python-format +msgid "Error loading server extension %s" +msgstr "" + +#: notebook/notebookapp.py:1369 +#, python-format +msgid "Shutting down %d kernels" +msgstr "" + +#: notebook/notebookapp.py:1375 +#, python-format +msgid "%d active kernel" +msgid_plural "%d active kernels" +msgstr[0] "" +msgstr[1] "" + +#: notebook/notebookapp.py:1379 +#, python-format +msgid "" +"The Jupyter Notebook is running at:\n" +"\r" +"%s" +msgstr "" + +#: notebook/notebookapp.py:1426 +msgid "Running as root is not recommended. Use --allow-root to bypass." +msgstr "" + +#: notebook/notebookapp.py:1432 +msgid "Use Control-C to stop this server and shut down all kernels (twice to skip confirmation)." +msgstr "" + +#: notebook/notebookapp.py:1434 +msgid "Welcome to Project Jupyter! Explore the various tools available and their corresponding documentation. If you are interested in contributing to the platform, please visit the communityresources section at http://jupyter.org/community.html." +msgstr "" + +#: notebook/notebookapp.py:1445 +#, python-format +msgid "No web browser found: %s." +msgstr "" + +#: notebook/notebookapp.py:1450 +#, python-format +msgid "%s does not exist" +msgstr "" + +#: notebook/notebookapp.py:1484 +msgid "Interrupted..." +msgstr "" + +#: notebook/services/contents/filemanager.py:506 +#, python-format +msgid "Serving notebooks from local directory: %s" +msgstr "" + +#: notebook/services/contents/manager.py:68 +msgid "Untitled" +msgstr "" + diff --git a/nbclassic/i18n/ja_JP/LC_MESSAGES/nbjs.po b/nbclassic/i18n/ja_JP/LC_MESSAGES/nbjs.po new file mode 100644 index 000000000..aea692a16 --- /dev/null +++ b/nbclassic/i18n/ja_JP/LC_MESSAGES/nbjs.po @@ -0,0 +1,1934 @@ +# Translations template for Jupyter. +# Copyright (C) 2017 ORGANIZATION +# This file is distributed under the same license as the Jupyter project. +# FIRST AUTHOR , 2017. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Jupyter VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2017-06-27 14:04-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" + +#: notebook/static/base/js/dialog.js:161 +msgid "Manually edit the JSON below to manipulate the metadata for this cell." +msgstr "このセルのメタデータを操作するには以下のJSONを手動で編集してください。" + +#: notebook/static/base/js/dialog.js:163 +msgid "Manually edit the JSON below to manipulate the metadata for this notebook." +msgstr "このノートブックのメタデータを操作するには以下のJSONを手動で編集してください。" + +#: notebook/static/base/js/dialog.js:165 +msgid " We recommend putting custom metadata attributes in an appropriately named substructure, so they don't conflict with those of others." +msgstr " カスタムメタデータ属性は適切な名前のサブ構造に含め他の属性と競合しないようにすることをお勧めします。" + +#: notebook/static/base/js/dialog.js:180 +msgid "Edit the metadata" +msgstr "メタデータの編集" + +#: notebook/static/base/js/dialog.js:202 +msgid "Edit Notebook Metadata" +msgstr "ノートブックのメタデータを編集" + +#: notebook/static/base/js/dialog.js:204 +msgid "Edit Cell Metadata" +msgstr "セルのメタデータを編集" + +#: notebook/static/base/js/dialog.js:208 +#: notebook/static/notebook/js/notebook.js:475 +#: notebook/static/notebook/js/savewidget.js:71 +#: notebook/static/tree/js/notebooklist.js:859 +#: notebook/static/tree/js/notebooklist.js:1418 +msgid "Cancel" +msgstr "キャンセル" + +#: notebook/static/base/js/dialog.js:208 +msgid "Edit" +msgstr "編集" + +#: notebook/static/base/js/dialog.js:208 +#: notebook/static/notebook/js/kernelselector.js:278 +#: notebook/static/notebook/js/mathjaxutils.js:42 +#: notebook/static/notebook/js/notebook.js:469 +#: notebook/static/notebook/js/notificationarea.js:187 +#: notebook/static/notebook/js/savewidget.js:71 +#: notebook/static/tree/js/newnotebook.js:97 +#: notebook/static/tree/js/notebooklist.js:859 +msgid "OK" +msgstr "OK" + +#: notebook/static/base/js/dialog.js:208 +msgid "Apply" +msgstr "適用" + +#: notebook/static/base/js/dialog.js:225 +msgid "WARNING: Could not save invalid JSON." +msgstr "警告: 不正な JSON のため保存できませんでした。" + +#: notebook/static/base/js/dialog.js:247 +msgid "There are no attachments for this cell." +msgstr "このセルには添付ファイルはありません。" + +#: notebook/static/base/js/dialog.js:250 +msgid "Current cell attachments" +msgstr "現在のセルの添付ファイル" + +#: notebook/static/base/js/dialog.js:259 +#: notebook/static/notebook/js/celltoolbarpresets/attachments.js:46 +msgid "Attachments" +msgstr "添付ファイル" + +#: notebook/static/base/js/dialog.js:283 +msgid "Restore" +msgstr "復元" + +#: notebook/static/base/js/dialog.js:293 +#: notebook/static/tree/js/notebooklist.js:1018 +msgid "Delete" +msgstr "削除" + +#: notebook/static/base/js/dialog.js:342 notebook/static/base/js/dialog.js:386 +msgid "Edit attachments" +msgstr "添付ファイルを編集" + +#: notebook/static/base/js/dialog.js:348 +msgid "Edit Notebook Attachments" +msgstr "ノートブックの添付ファイルを編集" + +#: notebook/static/base/js/dialog.js:350 +msgid "Edit Cell Attachments" +msgstr "セルの添付ファイルを編集" + +#: notebook/static/base/js/dialog.js:373 +msgid "Select a file to insert." +msgstr "挿入するファイルを選択して下さい。" + +#: notebook/static/base/js/dialog.js:399 +msgid "Select a file" +msgstr "ファイルを選択" + +#: notebook/static/notebook/js/about.js:14 +msgid "You are using Jupyter notebook." +msgstr "Jupyter notebook を使用しています。" + +#: notebook/static/notebook/js/about.js:16 +msgid "The version of the notebook server is: " +msgstr "ノートブックサーバのバージョン" + +#: notebook/static/notebook/js/about.js:22 +msgid "The server is running on this version of Python:" +msgstr "サーバはこのバージョンの Python で稼働しています:" + +#: notebook/static/notebook/js/about.js:25 +msgid "Waiting for kernel to be available..." +msgstr "利用可能なカーネルを待機しています..." + +#: notebook/static/notebook/js/about.js:27 +msgid "Server Information:" +msgstr "サーバ情報:" + +#: notebook/static/notebook/js/about.js:29 +msgid "Current Kernel Information:" +msgstr "現在のカーネル情報:" + +#: notebook/static/notebook/js/about.js:32 +msgid "Could not access sys_info variable for version information." +msgstr "バージョン情報のための sys_info 変数にアクセスできませんでした。" + +#: notebook/static/notebook/js/about.js:34 +msgid "Cannot find sys_info!" +msgstr "sys_info が見つかりません!" + +#: notebook/static/notebook/js/about.js:38 +msgid "About Jupyter Notebook" +msgstr "Jupyter Notebook について" + +#: notebook/static/notebook/js/about.js:47 +msgid "unable to contact kernel" +msgstr "kernel と通信できません" + +#: notebook/static/notebook/js/actions.js:69 +msgid "toggle rtl layout" +msgstr "rtl レイアウトをトグル" + +#: notebook/static/notebook/js/actions.js:70 +msgid "Toggle the screen directionality between left-to-right and right-to-left" +msgstr "画面の表示方向を、左から右、と右から左、でトグル" + +#: notebook/static/notebook/js/actions.js:76 +msgid "edit command mode keyboard shortcuts" +msgstr "コマンドモードキーボードショートカットを編集" + +#: notebook/static/notebook/js/actions.js:77 +msgid "Open a dialog to edit the command mode keyboard shortcuts" +msgstr "コマンドモードのキーボードショートカットを編集するためにダイアログを開きます" + +#: notebook/static/notebook/js/actions.js:97 +msgid "restart kernel" +msgstr "カーネルを再起動" + +#: notebook/static/notebook/js/actions.js:98 +msgid "restart the kernel (no confirmation dialog)" +msgstr "カーネルを再起動 (確認ダイアログ無し)" + +#: notebook/static/notebook/js/actions.js:106 +msgid "confirm restart kernel" +msgstr "カーネルを再起動の確認" + +#: notebook/static/notebook/js/actions.js:107 +msgid "restart the kernel (with dialog)" +msgstr "カーネルを再起動 (確認ダイアログあり)" + +#: notebook/static/notebook/js/actions.js:113 +msgid "restart kernel and run all cells" +msgstr "カーネルを再起動し全てのセルを実行" + +#: notebook/static/notebook/js/actions.js:114 +msgid "restart the kernel, then re-run the whole notebook (no confirmation dialog)" +msgstr "カーネルを再起動しノートブック全体を再実行 (確認ダイアログ無し)" + +#: notebook/static/notebook/js/actions.js:120 +msgid "confirm restart kernel and run all cells" +msgstr "カーネルを再起動し全てのセルを実行する確認" + +#: notebook/static/notebook/js/actions.js:121 +msgid "restart the kernel, then re-run the whole notebook (with dialog)" +msgstr "カーネルを再起動しノートブック全体を再実行 (確認ダイアログあり)" + +#: notebook/static/notebook/js/actions.js:127 +msgid "restart kernel and clear output" +msgstr "カーネルを再起動し出力をクリア" + +#: notebook/static/notebook/js/actions.js:128 +msgid "restart the kernel and clear all output (no confirmation dialog)" +msgstr "カーネルを再起動し全ての出力をクリア (確認ダイアログ無し)" + +#: notebook/static/notebook/js/actions.js:134 +msgid "confirm restart kernel and clear output" +msgstr "カーネルを再起動し出力をクリアする確認" + +#: notebook/static/notebook/js/actions.js:135 +msgid "restart the kernel and clear all output (with dialog)" +msgstr "カーネルを再起動し出力をクリア (確認ダイアログあり)" + +#: notebook/static/notebook/js/actions.js:142 +#: notebook/static/notebook/js/actions.js:143 +msgid "interrupt the kernel" +msgstr "カーネルを中断" + +#: notebook/static/notebook/js/actions.js:150 +msgid "run cell and select next" +msgstr "セルを実行し次を選択" + +#: notebook/static/notebook/js/actions.js:152 +msgid "run cell, select below" +msgstr "セルを実行し下を選択" + +#: notebook/static/notebook/js/actions.js:159 +#: notebook/static/notebook/js/actions.js:160 +msgid "run selected cells" +msgstr "選択されているセルを実行" + +#: notebook/static/notebook/js/actions.js:167 +#: notebook/static/notebook/js/actions.js:168 +msgid "run cell and insert below" +msgstr "セルを実行し下に挿入" + +#: notebook/static/notebook/js/actions.js:175 +#: notebook/static/notebook/js/actions.js:176 +msgid "run all cells" +msgstr "全てのセルを実行" + +#: notebook/static/notebook/js/actions.js:183 +#: notebook/static/notebook/js/actions.js:184 +msgid "run all cells above" +msgstr "ここまでのセルを実行" + +#: notebook/static/notebook/js/actions.js:190 +#: notebook/static/notebook/js/actions.js:191 +msgid "run all cells below" +msgstr "以下の全てのセルを実行" + +#: notebook/static/notebook/js/actions.js:197 +#: notebook/static/notebook/js/actions.js:198 +msgid "enter command mode" +msgstr "コマンドラインモードに移る" + +#: notebook/static/notebook/js/actions.js:205 +#: notebook/static/notebook/js/actions.js:206 +msgid "insert image" +msgstr "画像の挿入" + +#: notebook/static/notebook/js/actions.js:213 +#: notebook/static/notebook/js/actions.js:214 +msgid "cut cell attachments" +msgstr "セルの添付ファイルを切り取り" + +#: notebook/static/notebook/js/actions.js:221 +#: notebook/static/notebook/js/actions.js:222 +msgid "copy cell attachments" +msgstr "セルの添付ファイルをコピー" + +#: notebook/static/notebook/js/actions.js:229 +#: notebook/static/notebook/js/actions.js:230 +msgid "paste cell attachments" +msgstr "セルの添付ファイルをペースト" + +#: notebook/static/notebook/js/actions.js:237 +#: notebook/static/notebook/js/actions.js:238 +msgid "split cell at cursor" +msgstr "カーソル位置でセルを分割" + +#: notebook/static/notebook/js/actions.js:245 +#: notebook/static/notebook/js/actions.js:246 +msgid "enter edit mode" +msgstr "編集モードに移る" + +#: notebook/static/notebook/js/actions.js:253 +msgid "select previous cell" +msgstr "1つ前のセルを選択" + +#: notebook/static/notebook/js/actions.js:254 +msgid "select cell above" +msgstr "上のセルを選択" + +#: notebook/static/notebook/js/actions.js:265 +msgid "select next cell" +msgstr "次のセルを選択" + +#: notebook/static/notebook/js/actions.js:266 +msgid "select cell below" +msgstr "下のセルを選択" + +#: notebook/static/notebook/js/actions.js:277 +msgid "extend selection above" +msgstr "選択を上に拡大" + +#: notebook/static/notebook/js/actions.js:278 +msgid "extend selected cells above" +msgstr "セルの選択を上に拡大" + +#: notebook/static/notebook/js/actions.js:289 +msgid "extend selection below" +msgstr "選択を下に拡大" + +#: notebook/static/notebook/js/actions.js:290 +msgid "extend selected cells below" +msgstr "セルの選択を下に拡大" + +#: notebook/static/notebook/js/actions.js:301 +#: notebook/static/notebook/js/actions.js:302 +msgid "cut selected cells" +msgstr "選択されているセルを切り取り" + +#: notebook/static/notebook/js/actions.js:312 +#: notebook/static/notebook/js/actions.js:313 +msgid "copy selected cells" +msgstr "選択されているセルをコピー" + +#: notebook/static/notebook/js/actions.js:327 +#: notebook/static/notebook/js/actions.js:328 +msgid "paste cells above" +msgstr "上にセルをペースト" + +#: notebook/static/notebook/js/actions.js:335 +#: notebook/static/notebook/js/actions.js:336 +msgid "paste cells below" +msgstr "下にセルをペースト" + +#: notebook/static/notebook/js/actions.js:344 +#: notebook/static/notebook/js/actions.js:345 +msgid "insert cell above" +msgstr "上にセルを追加" + +#: notebook/static/notebook/js/actions.js:354 +#: notebook/static/notebook/js/actions.js:355 +msgid "insert cell below" +msgstr "下にセルを追加" + +#: notebook/static/notebook/js/actions.js:365 +#: notebook/static/notebook/js/actions.js:366 +msgid "change cell to code" +msgstr "セルをコードに変更" + +#: notebook/static/notebook/js/actions.js:373 +#: notebook/static/notebook/js/actions.js:374 +msgid "change cell to markdown" +msgstr "セルを markdown に変更" + +#: notebook/static/notebook/js/actions.js:381 +#: notebook/static/notebook/js/actions.js:382 +msgid "change cell to raw" +msgstr "セルを raw に変更" + +#: notebook/static/notebook/js/actions.js:389 +#: notebook/static/notebook/js/actions.js:390 +msgid "change cell to heading 1" +msgstr "セルを表題1に変更" + +#: notebook/static/notebook/js/actions.js:397 +#: notebook/static/notebook/js/actions.js:398 +msgid "change cell to heading 2" +msgstr "セルを表題2に変更" + +#: notebook/static/notebook/js/actions.js:405 +#: notebook/static/notebook/js/actions.js:406 +msgid "change cell to heading 3" +msgstr "セルを表題3に変更" + +#: notebook/static/notebook/js/actions.js:413 +#: notebook/static/notebook/js/actions.js:414 +msgid "change cell to heading 4" +msgstr "セルを表題4に変更" + +#: notebook/static/notebook/js/actions.js:421 +#: notebook/static/notebook/js/actions.js:422 +msgid "change cell to heading 5" +msgstr "セルを表題5に変更" + +#: notebook/static/notebook/js/actions.js:429 +#: notebook/static/notebook/js/actions.js:430 +msgid "change cell to heading 6" +msgstr "セルを表題6に変更" + +#: notebook/static/notebook/js/actions.js:437 +msgid "toggle cell output" +msgstr "セルの出力をトグル" + +#: notebook/static/notebook/js/actions.js:438 +msgid "toggle output of selected cells" +msgstr "選択中のセルの出力をトグル" + +#: notebook/static/notebook/js/actions.js:445 +msgid "toggle cell scrolling" +msgstr "セルのスクロールをトグル" + +#: notebook/static/notebook/js/actions.js:446 +msgid "toggle output scrolling of selected cells" +msgstr "選択中のセルの出力スクロールをトグル" + +#: notebook/static/notebook/js/actions.js:453 +msgid "clear cell output" +msgstr "セルの出力をクリア" + +#: notebook/static/notebook/js/actions.js:454 +msgid "clear output of selected cells" +msgstr "選択しているセルの出力をクリア" + +#: notebook/static/notebook/js/actions.js:460 +msgid "move cells down" +msgstr "セルを下に移動" + +#: notebook/static/notebook/js/actions.js:461 +msgid "move selected cells down" +msgstr "選択しているセルを下に移動" + +#: notebook/static/notebook/js/actions.js:469 +msgid "move cells up" +msgstr "セルを上に移動" + +#: notebook/static/notebook/js/actions.js:470 +msgid "move selected cells up" +msgstr "選択しているセルを上に移動" + +#: notebook/static/notebook/js/actions.js:478 +#: notebook/static/notebook/js/actions.js:479 +msgid "toggle line numbers" +msgstr "行番号をトグル" + +#: notebook/static/notebook/js/actions.js:486 +#: notebook/static/notebook/js/actions.js:487 +msgid "show keyboard shortcuts" +msgstr "キーボードショートカットを表示" + +#: notebook/static/notebook/js/actions.js:494 +msgid "delete cells" +msgstr "セルを削除" + +#: notebook/static/notebook/js/actions.js:495 +msgid "delete selected cells" +msgstr "選択されているセルを削除" + +#: notebook/static/notebook/js/actions.js:502 +#: notebook/static/notebook/js/actions.js:503 +msgid "undo cell deletion" +msgstr "セルの削除を取り消す" + +#: notebook/static/notebook/js/actions.js:512 +msgid "merge cell with previous cell" +msgstr "1つ前のアクティブセルとマージ" + +#: notebook/static/notebook/js/actions.js:513 +msgid "merge cell above" +msgstr "上のセルとマージ" + +#: notebook/static/notebook/js/actions.js:519 +msgid "merge cell with next cell" +msgstr "次のセルとマージ" + +#: notebook/static/notebook/js/actions.js:520 +msgid "merge cell below" +msgstr "下のセルとマージ" + +#: notebook/static/notebook/js/actions.js:527 +#: notebook/static/notebook/js/actions.js:528 +msgid "merge selected cells" +msgstr "選択されているセルをマージ" + +#: notebook/static/notebook/js/actions.js:535 +msgid "merge cells" +msgstr "セルをマージ" + +#: notebook/static/notebook/js/actions.js:536 +msgid "merge selected cells, or current cell with cell below if only one cell is selected" +msgstr "選択中のセル、または選択されていない場合は現在のセル以降をマージする" + +#: notebook/static/notebook/js/actions.js:549 +msgid "show command pallette" +msgstr "コマンドパレットの表示" + +#: notebook/static/notebook/js/actions.js:550 +msgid "open the command palette" +msgstr "コマンドパレットを開く" + +#: notebook/static/notebook/js/actions.js:557 +msgid "toggle all line numbers" +msgstr "全ての行番号をトグル" + +#: notebook/static/notebook/js/actions.js:558 +msgid "toggles line numbers in all cells, and persist the setting" +msgstr "全てのセルの行番号をトグルし設定を保存" + +#: notebook/static/notebook/js/actions.js:569 +msgid "show all line numbers" +msgstr "全ての行番号を保存" + +#: notebook/static/notebook/js/actions.js:570 +msgid "show line numbers in all cells, and persist the setting" +msgstr "全てのセルで行番号を表示し設定を保存" + +#: notebook/static/notebook/js/actions.js:579 +msgid "hide all line numbers" +msgstr "全ての行番号を非表示" + +#: notebook/static/notebook/js/actions.js:580 +msgid "hide line numbers in all cells, and persist the setting" +msgstr "すべてのセルの行番号を非表示にし設定を保持します" + +#: notebook/static/notebook/js/actions.js:589 +msgid "toggle header" +msgstr "ヘッダをトグル" + +#: notebook/static/notebook/js/actions.js:590 +msgid "switch between showing and hiding the header" +msgstr "ヘッダの表示と非表示を切り替えます" + +#: notebook/static/notebook/js/actions.js:605 +#: notebook/static/notebook/js/actions.js:606 +msgid "show the header" +msgstr "ヘッダを表示" + +#: notebook/static/notebook/js/actions.js:615 +#: notebook/static/notebook/js/actions.js:616 +msgid "hide the header" +msgstr "ヘッダを非表示" + +#: notebook/static/notebook/js/actions.js:646 +msgid "toggle toolbar" +msgstr "ツールバーをトグル" + +#: notebook/static/notebook/js/actions.js:647 +msgid "switch between showing and hiding the toolbar" +msgstr "ツールバーの表示と非表示を切り替える" + +#: notebook/static/notebook/js/actions.js:660 +#: notebook/static/notebook/js/actions.js:661 +msgid "show the toolbar" +msgstr "ツールバーを表示" + +#: notebook/static/notebook/js/actions.js:669 +#: notebook/static/notebook/js/actions.js:670 +msgid "hide the toolbar" +msgstr "ツールバーを非表示" + +#: notebook/static/notebook/js/actions.js:678 +#: notebook/static/notebook/js/actions.js:679 +msgid "close the pager" +msgstr "ページャを閉じる" + +#: notebook/static/notebook/js/actions.js:704 +msgid "ignore" +msgstr "無視" + +#: notebook/static/notebook/js/actions.js:710 +#: notebook/static/notebook/js/actions.js:711 +msgid "move cursor up" +msgstr "カーソルを上に移動" + +#: notebook/static/notebook/js/actions.js:731 +#: notebook/static/notebook/js/actions.js:732 +msgid "move cursor down" +msgstr "カーソルを下に移動" + +#: notebook/static/notebook/js/actions.js:750 +#: notebook/static/notebook/js/actions.js:751 +msgid "scroll notebook down" +msgstr "ノートブックを下にスクロール" + +#: notebook/static/notebook/js/actions.js:760 +#: notebook/static/notebook/js/actions.js:761 +msgid "scroll notebook up" +msgstr "ノートブックを上にスクロール" + +#: notebook/static/notebook/js/actions.js:770 +msgid "scroll cell center" +msgstr "セルを中央までスクロール" + +#: notebook/static/notebook/js/actions.js:771 +msgid "Scroll the current cell to the center" +msgstr "現在のセルが中央になる様にスクロール" + +#: notebook/static/notebook/js/actions.js:781 +msgid "scroll cell top" +msgstr "セルを最上部までスクロール" + +#: notebook/static/notebook/js/actions.js:782 +msgid "Scroll the current cell to the top" +msgstr "現在のセルが最上部になる様にスクロール" + +#: notebook/static/notebook/js/actions.js:792 +msgid "duplicate notebook" +msgstr "ノートブックの複製" + +#: notebook/static/notebook/js/actions.js:793 +msgid "Create and open a copy of the current notebook" +msgstr "現在のノートブックのコピーを作成し開く" + +#: notebook/static/notebook/js/actions.js:799 +msgid "trust notebook" +msgstr "ノートブックを信頼" + +#: notebook/static/notebook/js/actions.js:800 +msgid "Trust the current notebook" +msgstr "現在のノートブックを信頼する" + +#: notebook/static/notebook/js/actions.js:806 +msgid "rename notebook" +msgstr "ノートブックをリネーム" + +#: notebook/static/notebook/js/actions.js:807 +msgid "Rename the current notebook" +msgstr "現在のノートブックをリネームする" + +#: notebook/static/notebook/js/actions.js:813 +msgid "toggle all cells output collapsed" +msgstr "" + +#: notebook/static/notebook/js/actions.js:814 +msgid "Toggle the hidden state of all output areas" +msgstr "" + +#: notebook/static/notebook/js/actions.js:820 +msgid "toggle all cells output scrolled" +msgstr "" + +#: notebook/static/notebook/js/actions.js:821 +msgid "Toggle the scrolling state of all output areas" +msgstr "" + +#: notebook/static/notebook/js/actions.js:828 +msgid "clear all cells output" +msgstr "全てのセル出力をクリア" + +#: notebook/static/notebook/js/actions.js:829 +msgid "Clear the content of all the outputs" +msgstr "全ての出力コンテンツをクリア" + +#: notebook/static/notebook/js/actions.js:835 +msgid "save notebook" +msgstr "ノートブックの保存" + +#: notebook/static/notebook/js/actions.js:836 +msgid "Save and Checkpoint" +msgstr "保存とチェックポイント" + +#: notebook/static/notebook/js/cell.js:79 +msgid "Warning: accessing Cell.cm_config directly is deprecated." +msgstr "警告: Cell.cm_config に直接アクセスすることは非推奨です。" + +#: notebook/static/notebook/js/cell.js:763 +#, python-format +msgid "Unrecognized cell type: %s" +msgstr "認識できないセル種別: %s" + +#: notebook/static/notebook/js/cell.js:777 +msgid "Unrecognized cell type" +msgstr "認識できないセル種別" + +#: notebook/static/notebook/js/celltoolbar.js:296 +#, python-format +msgid "Error in cell toolbar callback %s" +msgstr "セルツールバーのコールバック %s でエラー" + +#: notebook/static/notebook/js/clipboard.js:53 +#, python-format +msgid "Clipboard types: %s" +msgstr "クリップボードの種別: %s" + +#: notebook/static/notebook/js/clipboard.js:96 +msgid "Dialog for paste from system clipboard" +msgstr "システムのクリップボードから張り付け" + +#: notebook/static/notebook/js/clipboard.js:109 +msgid "Ctrl-V" +msgstr "" + +#: notebook/static/notebook/js/clipboard.js:111 +msgid "Cmd-V" +msgstr "" + +#: notebook/static/notebook/js/clipboard.js:113 +#, python-format +msgid "Press %s again to paste" +msgstr "ペーストするには %s をもう一度押します" + +#: notebook/static/notebook/js/clipboard.js:116 +msgid "Why is this needed? " +msgstr "これが必要ですか?" + +#: notebook/static/notebook/js/clipboard.js:118 +msgid "We can't get paste events in this browser without a text box. " +msgstr "このブラウザではテキストボックスなしに貼り付けイベントを受け取ることができません。" + +#: notebook/static/notebook/js/clipboard.js:119 +msgid "There's an invisible text box focused in this dialog." +msgstr "このダイアログには目に見えないテキストボックスがあります。" + +#: notebook/static/notebook/js/clipboard.js:125 +#, python-format +msgid "%s to paste" +msgstr "ペーストするには %s" + +#: notebook/static/notebook/js/codecell.js:310 +msgid "Can't execute cell since kernel is not set." +msgstr "カーネルが存在しないのでセルを実行できません。" + +#: notebook/static/notebook/js/codecell.js:472 +msgid "In" +msgstr "入力" + +#: notebook/static/notebook/js/kernelselector.js:269 +#, python-format +msgid "Could not find a kernel matching %s. Please select a kernel:" +msgstr "%s にマッチするカーネルが見つかりませんでした。カーネルを選択して下さい:" + +#: notebook/static/notebook/js/kernelselector.js:278 +msgid "Continue Without Kernel" +msgstr "カーネル無しで続行" + +#: notebook/static/notebook/js/kernelselector.js:278 +msgid "Set Kernel" +msgstr "カーネルの設定" + +#: notebook/static/notebook/js/kernelselector.js:281 +msgid "Kernel not found" +msgstr "カーネルが見つかりません" + +#: notebook/static/notebook/js/kernelselector.js:319 +#: notebook/static/tree/js/newnotebook.js:99 +msgid "Creating Notebook Failed" +msgstr "ノートブックの作成に失敗しました" + +#: notebook/static/notebook/js/kernelselector.js:320 +#: notebook/static/tree/js/notebooklist.js:1360 +#, python-format +msgid "The error was: %s" +msgstr "エラー: %s" + +#: notebook/static/notebook/js/maintoolbar.js:54 +msgid "Run" +msgstr "実行" + +#: notebook/static/notebook/js/maintoolbar.js:76 +msgid "Code" +msgstr "コード" + +#: notebook/static/notebook/js/maintoolbar.js:77 +msgid "Markdown" +msgstr "" + +#: notebook/static/notebook/js/maintoolbar.js:78 +msgid "Raw NBConvert" +msgstr "" + +#: notebook/static/notebook/js/maintoolbar.js:79 +msgid "Heading" +msgstr "ヘッダ" + +#: notebook/static/notebook/js/maintoolbar.js:115 +msgid "unrecognized cell type:" +msgstr "不明なセル種別:" + +#: notebook/static/notebook/js/mathjaxutils.js:45 +#, python-format +msgid "Failed to retrieve MathJax from '%s'" +msgstr "%s から MathJax を取得できませんでした" + +#: notebook/static/notebook/js/mathjaxutils.js:47 +msgid "Math/LaTeX rendering will be disabled." +msgstr "Math/LaTeX レンダリングは無効になります。" + +#: notebook/static/notebook/js/menubar.js:220 +msgid "Trusted Notebook" +msgstr "信頼されたノートブック" + +#: notebook/static/notebook/js/menubar.js:226 +msgid "Trust Notebook" +msgstr "ノートブックを信頼する" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:16 +#: notebook/static/notebook/js/menubar.js:383 +msgid "None" +msgstr "" + +#: notebook/static/notebook/js/menubar.js:406 +msgid "No checkpoints" +msgstr "チェックポイントはありません" + +#: notebook/static/notebook/js/menubar.js:465 +msgid "Opens in a new window" +msgstr "新しいウィンドウで開く" + +#: notebook/static/notebook/js/notebook.js:431 +msgid "Autosave in progress, latest changes may be lost." +msgstr "自動保存が実行中です。最後の変更は失われるかもしれません。" + +#: notebook/static/notebook/js/notebook.js:433 +msgid "Unsaved changes will be lost." +msgstr "未保存の変更は破棄されます。" + +#: notebook/static/notebook/js/notebook.js:438 +msgid "The Kernel is busy, outputs may be lost." +msgstr "カーネルがビジーです。出力が欠けるかもしれません。" + +#: notebook/static/notebook/js/notebook.js:461 +msgid "This notebook is version %1$s, but we only fully support up to %2$s." +msgstr "このノートブックのバージョンは %1$s です。しかし完全なサポートは %2$s だけになります。" + +#: notebook/static/notebook/js/notebook.js:463 +msgid "You can still work with this notebook, but cell and output types introduced in later notebook versions will not be available." +msgstr "このノートブックはまだ動作しますがこれ以降のノートブックバージョンで導入されたセルおよび出力タイプは利用できなくなります。" + +#: notebook/static/notebook/js/notebook.js:470 +msgid "Restart and Run All Cells" +msgstr "再起動と全ての出力をクリア" + +#: notebook/static/notebook/js/notebook.js:471 +msgid "Restart and Clear All Outputs" +msgstr "再起動と全ての出力をクリア" + +#: notebook/static/notebook/js/notebook.js:472 +msgid "Restart" +msgstr "再起動" + +#: notebook/static/notebook/js/notebook.js:473 +msgid "Continue Running" +msgstr "実行を続行" + +#: notebook/static/notebook/js/notebook.js:474 +msgid "Reload" +msgstr "リロード" + +#: notebook/static/notebook/js/notebook.js:476 +msgid "Overwrite" +msgstr "上書き" + +#: notebook/static/notebook/js/notebook.js:477 +msgid "Trust" +msgstr "信頼" + +#: notebook/static/notebook/js/notebook.js:478 +msgid "Revert" +msgstr "復元" + +#: notebook/static/notebook/js/notebook.js:483 +msgid "Newer Notebook" +msgstr "新しいノートブック" + +#: notebook/static/notebook/js/notebook.js:1548 +msgid "Use markdown headings" +msgstr "Markdown のヘッダを使用" + +#: notebook/static/notebook/js/notebook.js:1550 +msgid "Jupyter no longer uses special heading cells. Instead, write your headings in Markdown cells using # characters:" +msgstr "Jupyter は特別な見出しセルを使用しなくなりました。代わりに # 文字を使用して Markdown セルに見出しを書きいて下さい:" + +#: notebook/static/notebook/js/notebook.js:1553 +msgid "## This is a level 2 heading" +msgstr "## これはレベル2のヘッダです" + +#: notebook/static/notebook/js/notebook.js:2248 +msgid "Restart kernel and re-run the whole notebook?" +msgstr "カーネルを再起動しノートブック全体を再実行する" + +#: notebook/static/notebook/js/notebook.js:2250 +msgid "Are you sure you want to restart the current kernel and re-execute the whole notebook? All variables and outputs will be lost." +msgstr "現在のカーネルを再起動してノートブック全体を再実行しますか?全ての変数と出力は失われます。" + +#: notebook/static/notebook/js/notebook.js:2275 +msgid "Restart kernel and clear all output?" +msgstr "カーネルを再起動し全ての出力をクリアしますか?" + +#: notebook/static/notebook/js/notebook.js:2277 +msgid "Do you want to restart the current kernel and clear all output? All variables and outputs will be lost." +msgstr "現在のカーネルを再起動してすべての出力をクリアしますか?全ての変数と出力は失われます。" + +#: notebook/static/notebook/js/notebook.js:2322 +msgid "Restart kernel?" +msgstr "カーネルを再起動しますか?" + +#: notebook/static/notebook/js/notebook.js:2324 +msgid "Do you want to restart the current kernel? All variables will be lost." +msgstr "現在のカーネルを再起動しますか?全ての変数は失われます。" + +#: notebook/static/notebook/js/notebook.js:2320 +msgid "Shutdown kernel?" +msgstr "カーネルをシャットダウンしますか?" + +#: notebook/static/notebook/js/notebook.js:2322 +msgid "Do you want to shutdown the current kernel? All variables will be lost." +msgstr "現在のカーネルをシャットダウンしますか?すべての変数は失われます。" + +#: notebook/static/notebook/js/notebook.js:2734 +msgid "Notebook changed" +msgstr "ノートブックは変更されました" + +#: notebook/static/notebook/js/notebook.js:2735 +msgid "The notebook file has changed on disk since the last time we opened or saved it. Do you want to overwrite the file on disk with the version open here, or load the version on disk (reload the page) ?" +msgstr "" + +#: notebook/static/notebook/js/notebook.js:2782 +#: notebook/static/notebook/js/notebook.js:2990 +msgid "Notebook validation failed" +msgstr "ノートブックの検証に失敗しました" + +#: notebook/static/notebook/js/notebook.js:2785 +msgid "The save operation succeeded, but the notebook does not appear to be valid. The validation error was:" +msgstr "保存操作は成功しましたがノートブックは有効ではないようです。検証エラー:" + +#: notebook/static/notebook/js/notebook.js:2836 +msgid "A trusted Jupyter notebook may execute hidden malicious code when you open it. Selecting trust will immediately reload this notebook in a trusted state. For more information, see the Jupyter security documentation: " +msgstr "信頼された Jupyter ノートブックは開いた際に隠された悪意のあるコードが実行される可能性があります。信頼を選択すると直ちにリロードされこのノートブックは信頼できる状態になりします。詳細については、Jupyter のセキュリティドキュメントを参照してください。" + +#: notebook/static/notebook/js/notebook.js:2840 +msgid "here" +msgstr "ここ" + +#: notebook/static/notebook/js/notebook.js:2848 +msgid "Trust this notebook?" +msgstr "このノートブックを信頼しますか?" + +#: notebook/static/notebook/js/notebook.js:2981 +msgid "Notebook failed to load" +msgstr "ノートブックの読み込みに失敗しました" + +#: notebook/static/notebook/js/notebook.js:2983 +msgid "The error was: " +msgstr "エラー: " + +#: notebook/static/notebook/js/notebook.js:2987 +msgid "See the error console for details." +msgstr "詳しくはエラーコンソールを参照して下さい。" + +#: notebook/static/notebook/js/notebook.js:2995 +msgid "The notebook also failed validation:" +msgstr "ノートブックの検証に失敗しました:" + +#: notebook/static/notebook/js/notebook.js:2997 +msgid "An invalid notebook may not function properly. The validation error was:" +msgstr "無効なノートブックは正しく機能しない可能性があります。検証エラーは次の通りです:" + +#: notebook/static/notebook/js/notebook.js:3036 +#, python-format +msgid "This notebook has been converted from an older notebook format to the current notebook format v(%s)." +msgstr "このノートブックは古いノートブックの形式から現在の形式 v(%s) に変換されました。" + +#: notebook/static/notebook/js/notebook.js:3038 +#, python-format +msgid "This notebook has been converted from a newer notebook format to the current notebook format v(%s)." +msgstr "このノートブックは新しいノートブックの形式から現在の形式 v(%s) に変換されました。" + +#: notebook/static/notebook/js/notebook.js:3046 +msgid "The next time you save this notebook, the current notebook format will be used." +msgstr "次回このノートブックを保存する時は現在のノートブックの形式が使用されます。" + +#: notebook/static/notebook/js/notebook.js:3051 +msgid "Older versions of Jupyter may not be able to read the new format." +msgstr "古いバージョンの Jupyter は新しい形式を読むことができない場合があります。" + +#: notebook/static/notebook/js/notebook.js:3053 +msgid "Some features of the original notebook may not be available." +msgstr "オリジナルのノートブックの中には利用できない機能が幾つかあります。" + +#: notebook/static/notebook/js/notebook.js:3056 +msgid "To preserve the original version, close the notebook without saving it." +msgstr "元のバージョンを残すには保存せずにノートブックを閉じます" + +#: notebook/static/notebook/js/notebook.js:3061 +msgid "Notebook converted" +msgstr "ノートブックは変換されました" + +#: notebook/static/notebook/js/notebook.js:3083 +msgid "(No name)" +msgstr "(無題)" + +#: notebook/static/notebook/js/notebook.js:3131 +#, python-format +msgid "An unknown error occurred while loading this notebook. This version can load notebook formats %s or earlier. See the server log for details." +msgstr "このノートブックの読み込み中に不明なエラーが発生しました。このバージョンはノートブックの形式 %s とそれ以前のバージョンをロードできます。 詳細についてはサーバのログを参照して下さい。" + +#: notebook/static/notebook/js/notebook.js:3142 +msgid "Error loading notebook" +msgstr "ノートブックの読み込み中にエラー" + +#: notebook/static/notebook/js/notebook.js:3243 +msgid "Are you sure you want to revert the notebook to the latest checkpoint?" +msgstr "本当に最終チェックポイントへノートブックを復元しますか?" + +#: notebook/static/notebook/js/notebook.js:3246 +msgid "This cannot be undone." +msgstr "この操作は取り消せません。" + +#: notebook/static/notebook/js/notebook.js:3249 +msgid "The checkpoint was last updated at:" +msgstr "チェックポイントはこの時間に変更されました:" + +#: notebook/static/notebook/js/notebook.js:3260 +msgid "Revert notebook to checkpoint" +msgstr "ノートブックをチェックポイントへ復元" + +#: notebook/static/notebook/js/notificationarea.js:77 +#: notebook/static/notebook/js/tour.js:61 +#: notebook/static/notebook/js/tour.js:67 +msgid "Edit Mode" +msgstr "編集モード" + +#: notebook/static/notebook/js/notificationarea.js:84 +#: notebook/static/notebook/js/notificationarea.js:88 +#: notebook/static/notebook/js/tour.js:54 +msgid "Command Mode" +msgstr "コマンドモード" + +#: notebook/static/notebook/js/notificationarea.js:95 +msgid "Kernel Created" +msgstr "カーネルが作成されました" + +#: notebook/static/notebook/js/notificationarea.js:99 +msgid "Connecting to kernel" +msgstr "カーネルに接続中" + +#: notebook/static/notebook/js/notificationarea.js:103 +msgid "Not Connected" +msgstr "接続されていません" + +#: notebook/static/notebook/js/notificationarea.js:106 +msgid "click to reconnect" +msgstr "クリックして再接続" + +#: notebook/static/notebook/js/notificationarea.js:115 +msgid "Restarting kernel" +msgstr "カーネルを再起動中" + +#: notebook/static/notebook/js/notificationarea.js:129 +msgid "Kernel Restarting" +msgstr "カーネルは再起動中です" + +#: notebook/static/notebook/js/notificationarea.js:130 +msgid "The kernel appears to have died. It will restart automatically." +msgstr "カーネルが異常終了した様です。自動的に再起動します。" + +#: notebook/static/notebook/js/notificationarea.js:140 +#: notebook/static/notebook/js/notificationarea.js:198 +#: notebook/static/notebook/js/notificationarea.js:218 +msgid "Dead kernel" +msgstr "カーネルが異常終了!" + +#: notebook/static/notebook/js/notificationarea.js:141 +#: notebook/static/notebook/js/notificationarea.js:219 +#: notebook/static/notebook/js/notificationarea.js:266 +msgid "Kernel Dead" +msgstr "カーネルが異常終了" + +#: notebook/static/notebook/js/notificationarea.js:145 +msgid "Interrupting kernel" +msgstr "カーネルを中断します!" + +#: notebook/static/notebook/js/notificationarea.js:151 +msgid "No Connection to Kernel" +msgstr "カーネルへの接続がありません" + +#: notebook/static/notebook/js/notificationarea.js:161 +msgid "A connection to the notebook server could not be established. The notebook will continue trying to reconnect. Check your network connection or notebook server configuration." +msgstr "ノートブックサーバへの接続を確立できませんでした。ノートブックは再接続を試みます。ネットワーク接続またはノートブックサーバの設定を確認してください。" + +#: notebook/static/notebook/js/notificationarea.js:166 +msgid "Connection failed" +msgstr "接続に失敗しました" + +#: notebook/static/notebook/js/notificationarea.js:179 +msgid "No kernel" +msgstr "カーネルが見つかりません" + +#: notebook/static/notebook/js/notificationarea.js:180 +msgid "Kernel is not running" +msgstr "カーネルは起動していません" + +#: notebook/static/notebook/js/notificationarea.js:187 +msgid "Don't Restart" +msgstr "再起動しない" + +#: notebook/static/notebook/js/notificationarea.js:187 +msgid "Try Restarting Now" +msgstr "再起動を試みます" + +#: notebook/static/notebook/js/notificationarea.js:191 +msgid "The kernel has died, and the automatic restart has failed. It is possible the kernel cannot be restarted. If you are not able to restart the kernel, you will still be able to save the notebook, but running code will no longer work until the notebook is reopened." +msgstr "カーネルが異常終了し自動再起動が失敗しました。カーネルを再起動できない可能性があります。カーネルを再起動できない場合でもノートブックを保存することはできますがコードの実行はノートブックを開き直すまで機能しなくなります。" + +#: notebook/static/notebook/js/notificationarea.js:225 +msgid "No Kernel" +msgstr "カーネルが見つかりません" + +#: notebook/static/notebook/js/notificationarea.js:252 +msgid "Failed to start the kernel" +msgstr "カーネルの起動に失敗しました" + +#: notebook/static/notebook/js/notificationarea.js:272 +#: notebook/static/notebook/js/notificationarea.js:292 +#: notebook/static/notebook/js/notificationarea.js:306 +msgid "Kernel Busy" +msgstr "カーネルがビジー" + +#: notebook/static/notebook/js/notificationarea.js:273 +msgid "Kernel starting, please wait..." +msgstr "カーネルを起動しています。お待ちください..." + +#: notebook/static/notebook/js/notificationarea.js:279 +#: notebook/static/notebook/js/notificationarea.js:286 +msgid "Kernel Idle" +msgstr "カーネルは休止状態" + +#: notebook/static/notebook/js/notificationarea.js:280 +msgid "Kernel ready" +msgstr "カーネルの準備が完了" + +#: notebook/static/notebook/js/notificationarea.js:297 +msgid "Using kernel: " +msgstr "カーネルを使用しています: " + +#: notebook/static/notebook/js/notificationarea.js:298 +msgid "Only candidate for language: %1$s was %2$s." +msgstr "唯一の言語の候補: %1$s は %2$s." + +#: notebook/static/notebook/js/notificationarea.js:319 +msgid "Loading notebook" +msgstr "ノートブックを読み込んでいます" + +#: notebook/static/notebook/js/notificationarea.js:322 +msgid "Notebook loaded" +msgstr "ノートブックが読み込まれました" + +#: notebook/static/notebook/js/notificationarea.js:325 +msgid "Saving notebook" +msgstr "ノートブックを保存しています" + +#: notebook/static/notebook/js/notificationarea.js:328 +msgid "Notebook saved" +msgstr "ノートブックが保存されました" + +#: notebook/static/notebook/js/notificationarea.js:331 +msgid "Notebook save failed" +msgstr "ノートブックの保存に失敗しました" + +#: notebook/static/notebook/js/notificationarea.js:334 +msgid "Notebook copy failed" +msgstr "ノートブックのコピーに失敗しました" + +#: notebook/static/notebook/js/notificationarea.js:339 +msgid "Checkpoint created" +msgstr "チェックポイントが作成されました" + +#: notebook/static/notebook/js/notificationarea.js:347 +msgid "Checkpoint failed" +msgstr "チェックポイントの失敗" + +#: notebook/static/notebook/js/notificationarea.js:350 +msgid "Checkpoint deleted" +msgstr "チェックポイントの削除" + +#: notebook/static/notebook/js/notificationarea.js:353 +msgid "Checkpoint delete failed" +msgstr "チェックポイントの削除に失敗しました" + +#: notebook/static/notebook/js/notificationarea.js:356 +msgid "Restoring to checkpoint..." +msgstr "チェックポイントの復元..." + +#: notebook/static/notebook/js/notificationarea.js:359 +msgid "Checkpoint restore failed" +msgstr "チェックポイントの復元に失敗しました" + +#: notebook/static/notebook/js/notificationarea.js:364 +msgid "Autosave disabled" +msgstr "自動保存は無効" + +#: notebook/static/notebook/js/notificationarea.js:367 +#, python-format +msgid "Saving every %d sec." +msgstr "%d 秒で保存" + +#: notebook/static/notebook/js/notificationarea.js:383 +msgid "Trusted" +msgstr "信頼済み" + +#: notebook/static/notebook/js/notificationarea.js:385 +msgid "Not Trusted" +msgstr "信頼されていません" + +#: notebook/static/notebook/js/outputarea.js:75 +msgid "click to expand output" +msgstr "出力を広げるにはクリックします" + +#: notebook/static/notebook/js/outputarea.js:79 +msgid "click to expand output; double click to hide output" +msgstr "出力を広げるにはクリックします; ダブルクリックで非表示" + +#: notebook/static/notebook/js/outputarea.js:167 +msgid "click to unscroll output; double click to hide" +msgstr "出力のスクロールを止めるためにクリック; ダブルクリックで非表示" + +#: notebook/static/notebook/js/outputarea.js:174 +msgid "click to scroll output; double click to hide" +msgstr "出力をスクロールするためにクリック; ダブルクリックで非表示" + +#: notebook/static/notebook/js/outputarea.js:422 +msgid "Javascript error adding output!" +msgstr "Javascript エラーが出力に追加されました!" + +#: notebook/static/notebook/js/outputarea.js:427 +msgid "See your browser Javascript console for more details." +msgstr "より詳細を知るにはブラウザの Javascript コンソールを確認して下さい。" + +#: notebook/static/notebook/js/outputarea.js:468 +#, python-format +msgid "Out[%s]:" +msgstr "出力[%s]:" + +#: notebook/static/notebook/js/outputarea.js:577 +#, python-format +msgid "Unrecognized output: %s" +msgstr "認識できない出力: %s" + +#: notebook/static/notebook/js/pager.js:36 +msgid "Open the pager in an external window" +msgstr "外部ウィンドウでページャを開く" + +#: notebook/static/notebook/js/pager.js:45 +msgid "Close the pager" +msgstr "ページャを閉じる" + +#: notebook/static/notebook/js/pager.js:148 +msgid "Jupyter Pager" +msgstr "Jupyter ページャ" + +#: notebook/static/notebook/js/quickhelp.js:39 +#: notebook/static/notebook/js/quickhelp.js:49 +#: notebook/static/notebook/js/quickhelp.js:50 +msgid "go to cell start" +msgstr "セルの先頭に移動" + +#: notebook/static/notebook/js/quickhelp.js:40 +#: notebook/static/notebook/js/quickhelp.js:51 +#: notebook/static/notebook/js/quickhelp.js:52 +msgid "go to cell end" +msgstr "セルの末尾に移動" + +#: notebook/static/notebook/js/quickhelp.js:41 +#: notebook/static/notebook/js/quickhelp.js:53 +msgid "go one word left" +msgstr "単語1つ左に移動" + +#: notebook/static/notebook/js/quickhelp.js:42 +#: notebook/static/notebook/js/quickhelp.js:54 +msgid "go one word right" +msgstr "単語1つ右に移動" + +#: notebook/static/notebook/js/quickhelp.js:43 +#: notebook/static/notebook/js/quickhelp.js:55 +msgid "delete word before" +msgstr "前の単語を削除" + +#: notebook/static/notebook/js/quickhelp.js:44 +#: notebook/static/notebook/js/quickhelp.js:56 +msgid "delete word after" +msgstr "続く単語を削除" + +#: notebook/static/notebook/js/quickhelp.js:61 +msgid "code completion or indent" +msgstr "コード補完またはインデント" + +#: notebook/static/notebook/js/quickhelp.js:62 +msgid "tooltip" +msgstr "ツールチップ" + +#: notebook/static/notebook/js/quickhelp.js:63 +msgid "indent" +msgstr "インデント" + +#: notebook/static/notebook/js/quickhelp.js:64 +msgid "dedent" +msgstr "インデント解除" + +#: notebook/static/notebook/js/quickhelp.js:65 +msgid "select all" +msgstr "全てを選択" + +#: notebook/static/notebook/js/quickhelp.js:66 +msgid "undo" +msgstr "元に戻す" + +#: notebook/static/notebook/js/quickhelp.js:67 +#: notebook/static/notebook/js/quickhelp.js:68 +msgid "redo" +msgstr "やり直し" + +#: notebook/static/notebook/js/quickhelp.js:102 +#: notebook/static/notebook/js/quickhelp.js:243 +msgid "Shift" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:103 +msgid "Alt" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:104 +msgid "Up" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:105 +msgid "Down" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:106 +msgid "Left" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:107 +msgid "Right" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:108 +#: notebook/static/notebook/js/quickhelp.js:246 +msgid "Tab" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:109 +msgid "Caps Lock" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:110 +#: notebook/static/notebook/js/quickhelp.js:269 +msgid "Esc" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:111 +msgid "Ctrl" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:112 +#: notebook/static/notebook/js/quickhelp.js:290 +msgid "Enter" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:113 +msgid "Page Up" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:114 +#: notebook/static/notebook/js/quickhelp.js:130 +msgid "Page Down" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:115 +msgid "Home" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:116 +msgid "End" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:117 +#: notebook/static/notebook/js/quickhelp.js:245 +msgid "Space" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:118 +msgid "Backspace" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:119 +msgid "Minus" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:130 +msgid "PageUp" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:197 +msgid "The Jupyter Notebook has two different keyboard input modes." +msgstr "Jupyter Notebook は異なる2つのキーボード入力モードを持っています。" + +#: notebook/static/notebook/js/quickhelp.js:199 +msgid "Edit mode allows you to type code or text into a cell and is indicated by a green cell border." +msgstr "編集モード は緑色のセル枠で表示され、セルにコードまたはテキストを入力できます。" + +#: notebook/static/notebook/js/quickhelp.js:201 +msgid "Command mode binds the keyboard to notebook level commands and is indicated by a grey cell border with a blue left margin." +msgstr "コマンドモード は青い左マージンを持つ灰色のセル枠で表示され、ノートブックレベルのコマンドにキーボードをバインドします。" + +#: notebook/static/notebook/js/quickhelp.js:222 +#: notebook/static/notebook/js/tooltip.js:58 +#: notebook/static/notebook/js/tooltip.js:69 +msgid "Close" +msgstr "閉じる" + +#: notebook/static/notebook/js/quickhelp.js:225 +msgid "Keyboard shortcuts" +msgstr "キーボードショートカット" + +#: notebook/static/notebook/js/quickhelp.js:240 +msgid "Command" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:241 +msgid "Control" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:242 +msgid "Option" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:244 +msgid "Return" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:270 +#, python-format +msgid "Command Mode (press %s to enable)" +msgstr "コマンドモード (有効にするには %s を押下)" + +#: notebook/static/notebook/js/quickhelp.js:272 +msgid "Edit Shortcuts" +msgstr "ショートカットを編集" + +#: notebook/static/notebook/js/quickhelp.js:275 +msgid "edit command-mode keyboard shortcuts" +msgstr "コマンドモードのキーボードショートカットを編集" + +#: notebook/static/notebook/js/quickhelp.js:292 +#, python-format +msgid "Edit Mode (press %s to enable)" +msgstr "編集モード (有効にするには %s を押下)" + +#: notebook/static/notebook/js/savewidget.js:49 +msgid "Autosave Failed!" +msgstr "自動保存に失敗!" + +#: notebook/static/notebook/js/savewidget.js:71 +#: notebook/static/tree/js/notebooklist.js:846 +#: notebook/static/tree/js/notebooklist.js:859 +msgid "Rename" +msgstr "リネーム" + +#: notebook/static/notebook/js/savewidget.js:78 +#: notebook/static/tree/js/notebooklist.js:837 +msgid "Enter a new notebook name:" +msgstr "新しいノートブックの名前を入力:" + +#: notebook/static/notebook/js/savewidget.js:86 +msgid "Rename Notebook" +msgstr "ノートブックのリネーム" + +#: notebook/static/notebook/js/savewidget.js:98 +msgid "Invalid notebook name. Notebook names must have 1 or more characters and can contain any characters except :/\\. Please enter a new notebook name:" +msgstr "不正なノートブックの名前です。ノートブックの名前は :/\\ を除く1文字以上でなければなりません。新しいノートブックの名前を入力して下さい:" + +#: notebook/static/notebook/js/savewidget.js:103 +msgid "Renaming..." +msgstr "リネーム中..." + +#: notebook/static/notebook/js/savewidget.js:109 +msgid "Unknown error" +msgstr "不明なエラー" + +#: notebook/static/notebook/js/savewidget.js:178 +msgid "no checkpoint" +msgstr "チェックポイントはありません" + +#: notebook/static/notebook/js/savewidget.js:193 +#, python-format +msgid "Last Checkpoint: %s" +msgstr "最終チェックポイント: %s" + +#: notebook/static/notebook/js/savewidget.js:217 +msgid "(unsaved changes)" +msgstr "(未保存の変更)" + +#: notebook/static/notebook/js/savewidget.js:219 +msgid "(autosaved)" +msgstr "(自動保存)" + +#: notebook/static/notebook/js/searchandreplace.js:74 +#, python-format +msgid "Warning: too many matches (%d). Some changes might not be shown or applied." +msgstr "警告: マッチが多すぎます (%d 個)。幾らかの変更は表示または適用されません。" + +#: notebook/static/notebook/js/searchandreplace.js:77 +#, python-format +msgid "%d match" +msgid_plural "%d matches" +msgstr[0] "%d 個にマッチ" +msgstr[1] "%d 個にマッチ" + +#: notebook/static/notebook/js/searchandreplace.js:145 +msgid "More than 100 matches, aborting" +msgstr "100 個以上にマッチしたため中断します" + +#: notebook/static/notebook/js/searchandreplace.js:166 +msgid "Use regex (JavaScript regex syntax)" +msgstr "正規表現の使用 (JavaScript 正規表現)" + +#: notebook/static/notebook/js/searchandreplace.js:174 +msgid "Replace in selected cells" +msgstr "選択中のセルを入れ替え" + +#: notebook/static/notebook/js/searchandreplace.js:181 +msgid "Match case" +msgstr "大文字と小文字の両方にマッチ" + +#: notebook/static/notebook/js/searchandreplace.js:187 +msgid "Find" +msgstr "検索" + +#: notebook/static/notebook/js/searchandreplace.js:203 +msgid "Replace" +msgstr "置換" + +#: notebook/static/notebook/js/searchandreplace.js:255 +msgid "No matches, invalid or empty regular expression" +msgstr "マッチしません。不正または空の正規表現です" + +#: notebook/static/notebook/js/searchandreplace.js:370 +msgid "Replace All" +msgstr "全て置換" + +#: notebook/static/notebook/js/searchandreplace.js:374 +msgid "Find and Replace" +msgstr "検索と置換" + +#: notebook/static/notebook/js/searchandreplace.js:400 +#: notebook/static/notebook/js/searchandreplace.js:401 +msgid "find and replace" +msgstr "検索と置換" + +#: notebook/static/notebook/js/textcell.js:551 +msgid "Write raw LaTeX or other formats here, for use with nbconvert. It will not be rendered in the notebook. When passing through nbconvert, a Raw Cell's content is added to the output unmodified." +msgstr "nbconvert で使うために生の LaTeX や他の形式をここに書いてください。これらはノートブックには表示されません。nbconvert に渡されると Raw Cell の内容が変更されずに出力に追加されます。" + +#: notebook/static/notebook/js/tooltip.js:41 +msgid "Grow the tooltip vertically (press shift-tab twice)" +msgstr "ツールチップを垂直方向に広げる(shift-tabを2回押す)" + +#: notebook/static/notebook/js/tooltip.js:48 +msgid "show the current docstring in pager (press shift-tab 4 times)" +msgstr "現在の docstring をページャで表示します(shift-tabを4回押します)" + +#: notebook/static/notebook/js/tooltip.js:49 +msgid "Open in Pager" +msgstr "ページャで開く" + +#: notebook/static/notebook/js/tooltip.js:68 +msgid "Tooltip will linger for 10 seconds while you type" +msgstr "ツールチップは入力中の 10 秒間表示されます" + +#: notebook/static/notebook/js/tour.js:27 +msgid "Welcome to the Notebook Tour" +msgstr "ノートブックツアーへようこそ" + +#: notebook/static/notebook/js/tour.js:30 +msgid "You can use the left and right arrow keys to go backwards and forwards." +msgstr "先に進んだり前に戻るにはカーソルの左と右を使う事ができます。" + +#: notebook/static/notebook/js/tour.js:33 +msgid "Filename" +msgstr "ファイル名" + +#: notebook/static/notebook/js/tour.js:35 +msgid "Click here to change the filename for this notebook." +msgstr "このノートブックのファイル名を変更するにはここをクリックします。" + +#: notebook/static/notebook/js/tour.js:39 +msgid "Notebook Menubar" +msgstr "ノートブックメニューバー" + +#: notebook/static/notebook/js/tour.js:40 +msgid "The menubar has menus for actions on the notebook, its cells, and the kernel it communicates with." +msgstr "メニューバーにはノートブック、そのセル、およびそれらが通信するカーネルに対するアクションのためのメニューがあります。" + +#: notebook/static/notebook/js/tour.js:44 +msgid "Notebook Toolbar" +msgstr "ノートブックツールバー" + +#: notebook/static/notebook/js/tour.js:45 +msgid "The toolbar has buttons for the most common actions. Hover your mouse over each button for more information." +msgstr "ツールバーには最も一般的な操作のボタンが置かれます。 詳細については各ボタンの上にマウスを移動してください。" + +#: notebook/static/notebook/js/tour.js:48 +msgid "Mode Indicator" +msgstr "モードインジケータ" + +#: notebook/static/notebook/js/tour.js:50 +msgid "The Notebook has two modes: Edit Mode and Command Mode. In this area, an indicator can appear to tell you which mode you are in." +msgstr "ノートブックには編集モードとコマンドモードの2つのモードがあります。この領域にはどのモードにいるのかを示すインジケータが表示されます。" + +#: notebook/static/notebook/js/tour.js:58 +msgid "Right now you are in Command Mode, and many keyboard shortcuts are available. In this mode, no icon is displayed in the indicator area." +msgstr "現在あなたはコマンドモードにいるので多くのキーボードショートカットが利用可能です。 このモードではインジケータ領域にアイコンは表示されません。" + +#: notebook/static/notebook/js/tour.js:64 +msgid "Pressing Enter or clicking in the input text area of the cell switches to Edit Mode." +msgstr "Enterを押下、セルのテキストの入力エリアをクリックすると編集モードに切り替わります。" + +#: notebook/static/notebook/js/tour.js:70 +msgid "Notice that the border around the currently active cell changed color. Typing will insert text into the currently active cell." +msgstr "現在アクティブなセルの周囲の境界線の色が変わることに注目してください。文字を入力すると現在アクティブなセルにテキストが挿入されます。" + +#: notebook/static/notebook/js/tour.js:73 +msgid "Back to Command Mode" +msgstr "コマンドモードに戻る" + +#: notebook/static/notebook/js/tour.js:76 +msgid "Pressing Esc or clicking outside of the input text area takes you back to Command Mode." +msgstr "Escを押下、またはテキストの入力エリアの外側をクリックするとコマンドモードに戻ります。" + +#: notebook/static/notebook/js/tour.js:79 +msgid "Keyboard Shortcuts" +msgstr "キーボードショートカット" + +#: notebook/static/notebook/js/tour.js:91 +msgid "You can click here to get a list of all of the keyboard shortcuts." +msgstr "ここをクリックすると全てのキーボードショートカットの一覧が表示されます。" + +#: notebook/static/notebook/js/tour.js:94 +#: notebook/static/notebook/js/tour.js:100 +msgid "Kernel Indicator" +msgstr "カーネルインジケータ" + +#: notebook/static/notebook/js/tour.js:97 +msgid "This is the Kernel indicator. It looks like this when the Kernel is idle." +msgstr "これはカーネルインジケータです。カーネルがアイドル状態のときはこの様に表示されます。" + +#: notebook/static/notebook/js/tour.js:103 +msgid "The Kernel indicator looks like this when the Kernel is busy." +msgstr "カーネルインジケータはカーネルがビジーのときはこのように表示されます。" + +#: notebook/static/notebook/js/tour.js:107 +msgid "Interrupting the Kernel" +msgstr "カーネルの中断" + +#: notebook/static/notebook/js/tour.js:109 +msgid "To cancel a computation in progress, you can click here." +msgstr "実行中の計算をキャンセルするにはここをクリックして下さい。" + +#: notebook/static/notebook/js/tour.js:114 +msgid "Notification Area" +msgstr "通知エリア" + +#: notebook/static/notebook/js/tour.js:115 +msgid "Messages in response to user actions (Save, Interrupt, etc.) appear here." +msgstr "ユーザーアクション (保存、割り込みなど) に応じたメッセージがここに表示されます。" + +#: notebook/static/notebook/js/tour.js:117 +msgid "End of Tour" +msgstr "ツアーの終わり" + +#: notebook/static/notebook/js/tour.js:120 +msgid "This concludes the Jupyter Notebook User Interface Tour." +msgstr "これで Jupyter Notebook のユーザーインタフェースのツアーは終了です。" + +#: notebook/static/notebook/js/celltoolbarpresets/attachments.js:32 +msgid "Edit Attachments" +msgstr "添付ファイルを編集" + +#: notebook/static/notebook/js/celltoolbarpresets/default.js:19 +msgid "Cell" +msgstr "セル" + +#: notebook/static/notebook/js/celltoolbarpresets/default.js:29 +#: notebook/static/notebook/js/celltoolbarpresets/default.js:47 +msgid "Edit Metadata" +msgstr "メタデータを編集" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:22 +msgid "Custom" +msgstr "カスタム" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:32 +msgid "Set the MIME type of the raw cell:" +msgstr "Raw セルの MIME タイプを設定:" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:40 +msgid "Raw Cell MIME Type" +msgstr "Raw セル MIME タイプ" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:74 +msgid "Raw NBConvert Format" +msgstr "Raw NBConvert 書式" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:81 +msgid "Raw Cell Format" +msgstr "Raw セル書式" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:15 +msgid "Slide" +msgstr "スライド" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:16 +msgid "Sub-Slide" +msgstr "サブスライド" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:17 +msgid "Fragment" +msgstr "フラグメント" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:18 +msgid "Skip" +msgstr "スキップ" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:19 +msgid "Notes" +msgstr "ノート" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:35 +msgid "Slide Type" +msgstr "スライドタイプ" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:41 +msgid "Slideshow" +msgstr "スライドショー" + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:133 +msgid "Add tag" +msgstr "タグを追加" + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:163 +msgid "Edit the list of tags below. All whitespace is treated as tag separators." +msgstr "以下のタグ一覧を編集。全ての空白はタグのセパレータとして扱われます。" + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:172 +msgid "Edit the tags" +msgstr "タグを編集" + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:186 +msgid "Edit Tags" +msgstr "タグを編集" + +#: notebook/static/tree/js/kernellist.js:86 +#: notebook/static/tree/js/terminallist.js:105 +msgid "Shutdown" +msgstr "シャットダウン" + +#: notebook/static/tree/js/newnotebook.js:70 +#, python-format +msgid "Create a new notebook with %s" +msgstr "新しいノートブック %s を作成" + +#: notebook/static/tree/js/newnotebook.js:101 +msgid "An error occurred while creating a new notebook." +msgstr "新しいノートブックの作成中にエラーが発生しました。" + +#: notebook/static/tree/js/notebooklist.js:122 +msgid "Creating File Failed" +msgstr "ファイルの作成に失敗" + +#: notebook/static/tree/js/notebooklist.js:124 +msgid "An error occurred while creating a new file." +msgstr "新しいファイルの作成中に失敗しました。" + +#: notebook/static/tree/js/notebooklist.js:142 +msgid "Creating Folder Failed" +msgstr "フォルダの作成に失敗" + +#: notebook/static/tree/js/notebooklist.js:144 +msgid "An error occurred while creating a new folder." +msgstr "新しいフォルダの作成中にエラーが発生しました。" + +#: notebook/static/tree/js/notebooklist.js:271 +msgid "Failed to read file" +msgstr "ファイルの読み込みに失敗しました" + +#: notebook/static/tree/js/notebooklist.js:272 +#, python-format +msgid "Failed to read file %s" +msgstr "%s の読み込みに失敗しました" + +#: notebook/static/tree/js/notebooklist.js:283 +#, python-format +msgid "The file size is %d MB. Do you still want to upload it?" +msgstr "ファイルサイズは %d MB です。本当にアップロードしますか?" + +#: notebook/static/tree/js/notebooklist.js:286 +msgid "Large file size warning" +msgstr "大きいファイルサイズの警告" + +#: notebook/static/tree/js/notebooklist.js:355 +msgid "Server error: " +msgstr "サーバエラー:" + +#: notebook/static/tree/js/notebooklist.js:390 +msgid "The notebook list is empty." +msgstr "ノートブック一覧は空です。" + +#: notebook/static/tree/js/notebooklist.js:463 +msgid "Click here to rename, delete, etc." +msgstr "リネーム、削除、その他を実行するにはここをクリック" + +#: notebook/static/tree/js/notebooklist.js:503 +msgid "Running" +msgstr "実行中" + +#: notebook/static/tree/js/notebooklist.js:835 +msgid "Enter a new file name:" +msgstr "新しいファイル名を入力:" + +#: notebook/static/tree/js/notebooklist.js:836 +msgid "Enter a new directory name:" +msgstr "新しいディレクトリ名を入力:" + +#: notebook/static/tree/js/notebooklist.js:838 +msgid "Enter a new name:" +msgstr "新しい名前を入力:" + +#: notebook/static/tree/js/notebooklist.js:843 +msgid "Rename file" +msgstr "ファイルのリネーム" + +#: notebook/static/tree/js/notebooklist.js:844 +msgid "Rename directory" +msgstr "ディレクトリのリネーム" + +#: notebook/static/tree/js/notebooklist.js:845 +msgid "Rename notebook" +msgstr "ノートブックのリネーム" + +#: notebook/static/tree/js/notebooklist.js:859 +msgid "Move" +msgstr "移動" + +#: notebook/static/tree/js/notebooklist.js:875 +msgid "An error occurred while renaming \"%1$s\" to \"%2$s\"." +msgstr "\"%1$s\" を \"%2$s\" にリネーム中にエラーが発生しました。" + +#: notebook/static/tree/js/notebooklist.js:878 +msgid "Rename Failed" +msgstr "リネームの失敗" + +#: notebook/static/tree/js/notebooklist.js:927 +#, python-format +msgid "Enter a new destination directory path for this item:" +msgid_plural "Enter a new destination directory path for these %d items:" +msgstr[0] "このアイテムの移動先を入力して下さい:" +msgstr[1] "%d 個のアイテムの移動先を入力して下さい:" + +#: notebook/static/tree/js/notebooklist.js:940 +#, python-format +msgid "Move an Item" +msgid_plural "Move %d Items" +msgstr[0] "アイテムの移動" +msgstr[1] "%d 個のアイテムの移動" + +#: notebook/static/tree/js/notebooklist.js:959 +msgid "An error occurred while moving \"%1$s\" from \"%2$s\" to \"%3$s\"." +msgstr "\"%1$s\" を \"%2$s\" から \"%3$s\" に移動する際に失敗しました。" + +#: notebook/static/tree/js/notebooklist.js:961 +msgid "Move Failed" +msgstr "ファイルの移動に失敗" + +#: notebook/static/tree/js/notebooklist.js:1007 +#, python-format +msgid "Are you sure you want to permanently delete: \"%s\"?" +msgid_plural "Are you sure you want to permanently delete the %d files or folders selected?" +msgstr[0] "本当に \"%s\" を完全に削除しますか?" +msgstr[1] "本当に %d 個のファイルまたはディレクトリを完全に削除しますか?" + +#: notebook/static/tree/js/notebooklist.js:1035 +#, python-format +msgid "An error occurred while deleting \"%s\"." +msgstr "\"%s\" を削除中にエラーが発生しました。" + +#: notebook/static/tree/js/notebooklist.js:1037 +msgid "Delete Failed" +msgstr "削除に失敗" + +#: notebook/static/tree/js/notebooklist.js:1078 +#, python-format +msgid "Are you sure you want to duplicate: \"%s\"?" +msgid_plural "Are you sure you want to duplicate the %d files selected?" +msgstr[0] "本当に \"%s\" を複製しますか?" +msgstr[1] "本当に %d 個のファイルを複製しますか?" + +#: notebook/static/tree/js/notebooklist.js:1088 +msgid "Duplicate" +msgstr "複製" + +#: notebook/static/tree/js/notebooklist.js:1102 +#, python-format +msgid "An error occurred while duplicating \"%s\"." +msgstr "\"%s\" の複製中に失敗" + +#: notebook/static/tree/js/notebooklist.js:1104 +msgid "Duplicate Failed" +msgstr "複製に失敗" + +#: notebook/static/tree/js/notebooklist.js:1323 +msgid "Upload" +msgstr "アップロード" + +#: notebook/static/tree/js/notebooklist.js:1332 +msgid "Invalid file name" +msgstr "ファイル名が不正です" + +#: notebook/static/tree/js/notebooklist.js:1333 +msgid "File names must be at least one character and not start with a period" +msgstr "ファイル名はピリオドで始まっていない1文字以上の名前でなければなりません" + +#: notebook/static/tree/js/notebooklist.js:1362 +msgid "Cannot upload invalid Notebook" +msgstr "不正なノートブックのためアップロードできません" + +#: notebook/static/tree/js/notebooklist.js:1395 +#, python-format +msgid "There is already a file named \"%s\". Do you want to replace it?" +msgstr "既に \"%s\" という名前のファイルが存在します。入れ替えますか?" + +#: notebook/static/tree/js/notebooklist.js:1397 +msgid "Replace file" +msgstr "ファイルの入れ替え" diff --git a/nbclassic/i18n/ja_JP/LC_MESSAGES/nbui.po b/nbclassic/i18n/ja_JP/LC_MESSAGES/nbui.po new file mode 100644 index 000000000..128b48026 --- /dev/null +++ b/nbclassic/i18n/ja_JP/LC_MESSAGES/nbui.po @@ -0,0 +1,740 @@ +# Translations template for Jupyter. +# Copyright (C) 2017 ORGANIZATION +# This file is distributed under the same license as the Jupyter project. +# FIRST AUTHOR , 2017. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Jupyter VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2017-07-07 12:48-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" + +#: notebook/templates/404.html:3 +msgid "You are requesting a page that does not exist!" +msgstr "要求したページは存在しません!" + +#: notebook/templates/edit.html:37 +msgid "current mode" +msgstr "現在のモード" + +#: notebook/templates/edit.html:48 notebook/templates/notebook.html:78 +msgid "File" +msgstr "ファイル" + +#: notebook/templates/edit.html:50 notebook/templates/tree.html:57 +msgid "New" +msgstr "新規" + +#: notebook/templates/edit.html:51 +msgid "Save" +msgstr "保存" + +#: notebook/templates/edit.html:52 notebook/templates/tree.html:36 +msgid "Rename" +msgstr "リネーム" + +#: notebook/templates/edit.html:53 notebook/templates/tree.html:38 +msgid "Download" +msgstr "ダウンロード" + +#: notebook/templates/edit.html:56 notebook/templates/notebook.html:131 +#: notebook/templates/tree.html:41 +msgid "Edit" +msgstr "編集" + +#: notebook/templates/edit.html:58 +msgid "Find" +msgstr "検索" + +#: notebook/templates/edit.html:59 +msgid "Find & Replace" +msgstr "検索と置換" + +#: notebook/templates/edit.html:61 +msgid "Key Map" +msgstr "キーマッピング" + +#: notebook/templates/edit.html:62 +msgid "Default" +msgstr "デフォルト" + +#: notebook/templates/edit.html:63 +msgid "Sublime Text" +msgstr "" + +#: notebook/templates/edit.html:68 notebook/templates/notebook.html:159 +#: notebook/templates/tree.html:40 +msgid "View" +msgstr "表示" + +#: notebook/templates/edit.html:70 notebook/templates/notebook.html:162 +msgid "Show/Hide the logo and notebook title (above menu bar)" +msgstr "ロゴとノートブックのタイトルを表示/非表示 (メニューバーの上)" + +#: notebook/templates/edit.html:71 notebook/templates/notebook.html:163 +msgid "Toggle Header" +msgstr "ヘッダをトグル" + +#: notebook/templates/edit.html:72 notebook/templates/notebook.html:171 +msgid "Toggle Line Numbers" +msgstr "行番号をトグル" + +#: notebook/templates/edit.html:75 +msgid "Language" +msgstr "言語" + +#: notebook/templates/error.html:23 +msgid "The error was:" +msgstr "エラー内容:" + +#: notebook/templates/login.html:24 +msgid "Password or token:" +msgstr "パスワードまたはトークン:" + +#: notebook/templates/login.html:26 +msgid "Password:" +msgstr "パスワード:" + +#: notebook/templates/login.html:31 +msgid "Log in" +msgstr "ログイン" + +#: notebook/templates/login.html:39 +msgid "No login available, you shouldn't be seeing this page." +msgstr "ログインしていないのでこのページを見る事はできません。" + +#: notebook/templates/logout.html:24 +#, python-format +msgid "Proceed to the dashboard" +msgstr "ダッシュボード" + +#: notebook/templates/logout.html:26 +#, python-format +msgid "Proceed to the login page" +msgstr "ログインページ" + +#: notebook/templates/notebook.html:62 +msgid "Menu" +msgstr "メニュー" + +#: notebook/templates/notebook.html:65 notebook/templates/notebook.html:254 +msgid "Kernel" +msgstr "カーネル" + +#: notebook/templates/notebook.html:68 +msgid "This notebook is read-only" +msgstr "このノートブックは読み取り専用です" + +#: notebook/templates/notebook.html:81 +msgid "New Notebook" +msgstr "新しいノートブック" + +#: notebook/templates/notebook.html:85 +msgid "Opens a new window with the Dashboard view" +msgstr "ダッシュボードで新しいウィンドウを開く" + +#: notebook/templates/notebook.html:86 +msgid "Open..." +msgstr "開く..." + +#: notebook/templates/notebook.html:90 +msgid "Open a copy of this notebook's contents and start a new kernel" +msgstr "このノートブックの内容の複製を開き新しいカーネルを起動する" + +#: notebook/templates/notebook.html:91 +msgid "Make a Copy..." +msgstr "コピーを作る..." + +#: notebook/templates/notebook.html:92 +msgid "Rename..." +msgstr "リネーム..." + +msgid "Save as..." +msgstr "名前を付けて保存..." + +msgid "Quit" +msgstr "終了" + +#: notebook/templates/notebook.html:93 +msgid "Save and Checkpoint" +msgstr "保存とチェックポイント" + +#: notebook/templates/notebook.html:96 +msgid "Revert to Checkpoint" +msgstr "チェックポイントを元に戻す" + +#: notebook/templates/notebook.html:106 +msgid "Print Preview" +msgstr "印刷プレビュー" + +#: notebook/templates/notebook.html:107 +msgid "Download as" +msgstr "名前を付けてダウンロード" + +#: notebook/templates/notebook.html:109 +msgid "Notebook (.ipynb)" +msgstr "ノートブック (.ipynb)" + +#: notebook/templates/notebook.html:110 +msgid "Script" +msgstr "スクリプト" + +#: notebook/templates/notebook.html:111 +msgid "HTML (.html)" +msgstr "" + +#: notebook/templates/notebook.html:112 +msgid "Markdown (.md)" +msgstr "" + +#: notebook/templates/notebook.html:113 +msgid "reST (.rst)" +msgstr "" + +#: notebook/templates/notebook.html:114 +msgid "LaTeX (.tex)" +msgstr "" + +#: notebook/templates/notebook.html:115 +msgid "PDF via LaTeX (.pdf)" +msgstr "" + +#: notebook/templates/notebook.html:118 +msgid "Deploy as" +msgstr "名前を付けてデプロイ" + +#: notebook/templates/notebook.html:123 +msgid "Trust the output of this notebook" +msgstr "このノートブックの出力を信頼する" + +#: notebook/templates/notebook.html:124 +msgid "Trust Notebook" +msgstr "ノートブックを信頼する" + +#: notebook/templates/notebook.html:127 +msgid "Shutdown this notebook's kernel, and close this window" +msgstr "このノートブックのカーネルをシャットダウンし、このウィンドウを閉じる" + +#: notebook/templates/notebook.html:128 +msgid "Close and Halt" +msgstr "閉じて終了" + +#: notebook/templates/notebook.html:133 +msgid "Cut Cells" +msgstr "セルを切り取り" + +#: notebook/templates/notebook.html:134 +msgid "Copy Cells" +msgstr "セルをコピー" + +#: notebook/templates/notebook.html:135 +msgid "Paste Cells Above" +msgstr "上にセルをペースト" + +#: notebook/templates/notebook.html:136 +msgid "Paste Cells Below" +msgstr "下にセルをペースト" + +#: notebook/templates/notebook.html:137 +msgid "Paste Cells & Replace" +msgstr "セルをペーストして入れ替え(&A)" + +#: notebook/templates/notebook.html:138 +msgid "Delete Cells" +msgstr "セルを削除" + +#: notebook/templates/notebook.html:139 +msgid "Undo Delete Cells" +msgstr "セルの削除を取り消し" + +#: notebook/templates/notebook.html:141 +msgid "Split Cell" +msgstr "セルを分割" + +#: notebook/templates/notebook.html:142 +msgid "Merge Cell Above" +msgstr "上のセルをマージ" + +#: notebook/templates/notebook.html:143 +msgid "Merge Cell Below" +msgstr "下のセルをマージ" + +#: notebook/templates/notebook.html:145 +msgid "Move Cell Up" +msgstr "セルを上に移動" + +#: notebook/templates/notebook.html:146 +msgid "Move Cell Down" +msgstr "セルを下に移動" + +#: notebook/templates/notebook.html:148 +msgid "Edit Notebook Metadata" +msgstr "ノートブックのメタデータを編集" + +#: notebook/templates/notebook.html:150 +msgid "Find and Replace" +msgstr "検索と置換" + +#: notebook/templates/notebook.html:152 +msgid "Cut Cell Attachments" +msgstr "セルのアタッチメントを切り取り" + +#: notebook/templates/notebook.html:153 +msgid "Copy Cell Attachments" +msgstr "セルのアタッチメントをコピー" + +#: notebook/templates/notebook.html:154 +msgid "Paste Cell Attachments" +msgstr "セルのアタッチメントをペースト" + +#: notebook/templates/notebook.html:156 +msgid "Insert Image" +msgstr "画像を挿入" + +#: notebook/templates/notebook.html:166 +msgid "Show/Hide the action icons (below menu bar)" +msgstr "アクションアイコンを表示/非表示 (メニューバーの下)" + +#: notebook/templates/notebook.html:167 +msgid "Toggle Toolbar" +msgstr "ツールバーをトグル" + +#: notebook/templates/notebook.html:170 +msgid "Show/Hide line numbers in cells" +msgstr "セル内の行番号を表示/非表示" + +#: notebook/templates/notebook.html:174 +msgid "Cell Toolbar" +msgstr "セルツールバー" + +#: notebook/templates/notebook.html:179 +msgid "Insert" +msgstr "挿入" + +#: notebook/templates/notebook.html:182 +msgid "Insert an empty Code cell above the currently active cell" +msgstr "現在アクティブなセルの上に空のコードセルを挿入する" + +#: notebook/templates/notebook.html:183 +msgid "Insert Cell Above" +msgstr "上にセルを挿入" + +#: notebook/templates/notebook.html:185 +msgid "Insert an empty Code cell below the currently active cell" +msgstr "現在アクティブなセルの下に空のコードセルを挿入する" + +#: notebook/templates/notebook.html:186 +msgid "Insert Cell Below" +msgstr "下にセルを挿入" + +#: notebook/templates/notebook.html:189 +msgid "Cell" +msgstr "セル" + +#: notebook/templates/notebook.html:191 +msgid "Run this cell, and move cursor to the next one" +msgstr "このセルを実行しカーソルを一つ次に移動する" + +#: notebook/templates/notebook.html:192 +msgid "Run Cells" +msgstr "セルを実行" + +#: notebook/templates/notebook.html:193 +msgid "Run this cell, select below" +msgstr "このセルを実行し下を選択する" + +#: notebook/templates/notebook.html:194 +msgid "Run Cells and Select Below" +msgstr "ここまでのセルを実行し下を選択する" + +#: notebook/templates/notebook.html:195 +msgid "Run this cell, insert below" +msgstr "このセルを実行し下に挿入" + +#: notebook/templates/notebook.html:196 +msgid "Run Cells and Insert Below" +msgstr "ここまでのセルを実行し下に挿入" + +#: notebook/templates/notebook.html:197 +msgid "Run all cells in the notebook" +msgstr "ノートブックの全てのセルを実行" + +#: notebook/templates/notebook.html:198 +msgid "Run All" +msgstr "全てを実行" + +#: notebook/templates/notebook.html:199 +msgid "Run all cells above (but not including) this cell" +msgstr "このセルの上にある (このセルは含まない) すべてのセルを実行する" + +#: notebook/templates/notebook.html:200 +msgid "Run All Above" +msgstr "ここまでのセルの全てを実行" + +#: notebook/templates/notebook.html:201 +msgid "Run this cell and all cells below it" +msgstr "このセルと以下のすべてのセルを実行" + +#: notebook/templates/notebook.html:202 +msgid "Run All Below" +msgstr "以下を全て実行" + +#: notebook/templates/notebook.html:205 +msgid "All cells in the notebook have a cell type. By default, new cells are created as 'Code' cells" +msgstr "ノートブック上のすべてのセルには種別があります。デフォルトでは新しいセルは 'コード' セルとして作成されます" + +#: notebook/templates/notebook.html:206 +msgid "Cell Type" +msgstr "セルの種別" + +#: notebook/templates/notebook.html:209 +msgid "Contents will be sent to the kernel for execution, and output will display in the footer of cell" +msgstr "実行のために内容がカーネルに送られ、セルのフッターに出力が表示されます" + +#: notebook/templates/notebook.html:212 +msgid "Contents will be rendered as HTML and serve as explanatory text" +msgstr "内容は HTML としてレンダリングされ説明のテキストとしてサーブされます" + +#: notebook/templates/notebook.html:213 notebook/templates/notebook.html:298 +msgid "Markdown" +msgstr "" + +#: notebook/templates/notebook.html:215 +msgid "Contents will pass through nbconvert unmodified" +msgstr "内容は変更されずに nbconvert に渡されます" + +#: notebook/templates/notebook.html:216 +msgid "Raw NBConvert" +msgstr "" + +#: notebook/templates/notebook.html:220 +msgid "Current Outputs" +msgstr "現在の出力" + +#: notebook/templates/notebook.html:223 +msgid "Hide/Show the output of the current cell" +msgstr "現在のセルの出力を表示/非表示" + +#: notebook/templates/notebook.html:224 notebook/templates/notebook.html:240 +msgid "Toggle" +msgstr "トグル" + +#: notebook/templates/notebook.html:227 +msgid "Scroll the output of the current cell" +msgstr "現在のセルの出力をスクロール" + +#: notebook/templates/notebook.html:228 notebook/templates/notebook.html:244 +msgid "Toggle Scrolling" +msgstr "スクロールをトグル" + +#: notebook/templates/notebook.html:231 +msgid "Clear the output of the current cell" +msgstr "現在のセルの出力をクリア" + +#: notebook/templates/notebook.html:232 notebook/templates/notebook.html:248 +msgid "Clear" +msgstr "クリア" + +#: notebook/templates/notebook.html:236 +msgid "All Output" +msgstr "全ての出力" + +#: notebook/templates/notebook.html:239 +msgid "Hide/Show the output of all cells" +msgstr "全てのセルの出力を表示/非表示" + +#: notebook/templates/notebook.html:243 +msgid "Scroll the output of all cells" +msgstr "全てのセルの出力をスクロール" + +#: notebook/templates/notebook.html:247 +msgid "Clear the output of all cells" +msgstr "全てのセルの出力をクリア" + +#: notebook/templates/notebook.html:257 +msgid "Send Keyboard Interrupt (CTRL-C) to the Kernel" +msgstr "キーボードの中断(CTRL-C)をカーネルに送る" + +#: notebook/templates/notebook.html:258 +msgid "Interrupt" +msgstr "中断" + +#: notebook/templates/notebook.html:261 +msgid "Restart the Kernel" +msgstr "カーネルを再起動" + +#: notebook/templates/notebook.html:262 +msgid "Restart" +msgstr "再起動" + +#: notebook/templates/notebook.html:265 +msgid "Restart the Kernel and clear all output" +msgstr "カーネルを再起動し全ての出力をクリアする" + +#: notebook/templates/notebook.html:266 +msgid "Restart & Clear Output" +msgstr "再起動し出力をクリアする" + +#: notebook/templates/notebook.html:269 +msgid "Restart the Kernel and re-run the notebook" +msgstr "カーネルを再起動しノートブックを再実行する" + +#: notebook/templates/notebook.html:270 +msgid "Restart & Run All" +msgstr "再起動し全てを実行" + +#: notebook/templates/notebook.html:273 +msgid "Reconnect to the Kernel" +msgstr "カーネルに再接続する" + +#: notebook/templates/notebook.html:274 +msgid "Reconnect" +msgstr "再接続" + +#: notebook/templates/notebook.html:282 +msgid "Change kernel" +msgstr "カーネルの変更" + +#: notebook/templates/notebook.html:287 +msgid "Help" +msgstr "ヘルプ" + +#: notebook/templates/notebook.html:290 +msgid "A quick tour of the notebook user interface" +msgstr "ノートブックユーザーインターフェースのクイックツアー" + +#: notebook/templates/notebook.html:290 +msgid "User Interface Tour" +msgstr "ユーザーインタフェースツアー" + +#: notebook/templates/notebook.html:291 +msgid "Opens a tooltip with all keyboard shortcuts" +msgstr "全てのキーボードショートカットのツールチップを表示する" + +#: notebook/templates/notebook.html:291 +msgid "Keyboard Shortcuts" +msgstr "キーボードショートカット" + +#: notebook/templates/notebook.html:292 +msgid "Opens a dialog allowing you to edit Keyboard shortcuts" +msgstr "キーボードショートカットの編集ダイアログを開く" + +#: notebook/templates/notebook.html:292 +msgid "Edit Keyboard Shortcuts" +msgstr "キーボードショートカットの編集" + +#: notebook/templates/notebook.html:297 +msgid "Notebook Help" +msgstr "ノートブックのヘルプ" + +#: notebook/templates/notebook.html:303 +msgid "Opens in a new window" +msgstr "新しいウィンドウで開く" + +#: notebook/templates/notebook.html:319 +msgid "About Jupyter Notebook" +msgstr "Jupyter Notebook について" + +#: notebook/templates/notebook.html:319 +msgid "About" +msgstr "詳細" + +#: notebook/templates/page.html:114 +msgid "Jupyter Notebook requires JavaScript." +msgstr "Jupyter Notebook には JavaScript が必要です。" + +#: notebook/templates/page.html:115 +msgid "Please enable it to proceed. " +msgstr "続行するには有効にして下さい。 " + +#: notebook/templates/page.html:121 +msgid "dashboard" +msgstr "ダッシュボード" + +#: notebook/templates/page.html:132 +msgid "Logout" +msgstr "ログアウト" + +#: notebook/templates/page.html:134 +msgid "Login" +msgstr "ログイン" + +#: notebook/templates/tree.html:23 +msgid "Files" +msgstr "ファイル" + +#: notebook/templates/tree.html:24 +msgid "Running" +msgstr "実行中" + +#: notebook/templates/tree.html:25 +msgid "Clusters" +msgstr "クラスタ" + +#: notebook/templates/tree.html:32 +msgid "Select items to perform actions on them." +msgstr "アクションを実行する為のアイテムを選択して下さい。" + +#: notebook/templates/tree.html:35 +msgid "Duplicate selected" +msgstr "選択アイテムを複製する" + +#: notebook/templates/tree.html:35 +msgid "Duplicate" +msgstr "複製" + +#: notebook/templates/tree.html:36 +msgid "Rename selected" +msgstr "選択アイテムをリネームする" + +#: notebook/templates/tree.html:37 +msgid "Move selected" +msgstr "選択アイテムを移動する" + +#: notebook/templates/tree.html:37 +msgid "Move" +msgstr "移動" + +#: notebook/templates/tree.html:38 +msgid "Download selected" +msgstr "選択アイテムをダウンロードする" + +#: notebook/templates/tree.html:39 +msgid "Shutdown selected notebook(s)" +msgstr "選択されているノートブックをシャットダウンする" + +#: notebook/templates/notebook.html:278 +#: notebook/templates/tree.html:39 +msgid "Shutdown" +msgstr "シャットダウン" + +#: notebook/templates/tree.html:40 +msgid "View selected" +msgstr "選択されているアイテムを表示する" + +#: notebook/templates/tree.html:41 +msgid "Edit selected" +msgstr "選択されているアイテムを編集する" + +#: notebook/templates/tree.html:42 +msgid "Delete selected" +msgstr "選択されているアイテムを削除する" + +#: notebook/templates/tree.html:50 +msgid "Click to browse for a file to upload." +msgstr "クリックしてアップロードするファイルを選択して下さい。" + +#: notebook/templates/tree.html:51 +msgid "Upload" +msgstr "アップロード" + +#: notebook/templates/tree.html:65 +msgid "Text File" +msgstr "テキストファイル" + +#: notebook/templates/tree.html:68 +msgid "Folder" +msgstr "フォルダ" + +#: notebook/templates/tree.html:72 +msgid "Terminal" +msgstr "端末" + +#: notebook/templates/tree.html:76 +msgid "Terminals Unavailable" +msgstr "端末が存在しません" + +#: notebook/templates/tree.html:82 +msgid "Refresh notebook list" +msgstr "ノートブックの一覧を再読み込み" + +#: notebook/templates/tree.html:90 +msgid "Select All / None" +msgstr "全てを選択 / 解除" + +#: notebook/templates/tree.html:93 +msgid "Select..." +msgstr "選択..." + +#: notebook/templates/tree.html:98 +msgid "Select All Folders" +msgstr "全てのフォルダを選択..." + +#: notebook/templates/tree.html:98 +msgid "Folders" +msgstr "フォルダ" + +#: notebook/templates/tree.html:99 +msgid "Select All Notebooks" +msgstr "全てのノートブックを選択" + +#: notebook/templates/tree.html:99 +msgid "All Notebooks" +msgstr "全てのノートブック" + +#: notebook/templates/tree.html:100 +msgid "Select Running Notebooks" +msgstr "実行中のノートブックを選択" + +#: notebook/templates/tree.html:100 +msgid "Running" +msgstr "実行中" + +#: notebook/templates/tree.html:101 +msgid "Select All Files" +msgstr "全てのファイルを選択" + +#: notebook/templates/tree.html:101 +msgid "Files" +msgstr "ファイル" + +#: notebook/templates/tree.html:114 +msgid "Last Modified" +msgstr "最終変更時刻" + +#: notebook/templates/tree.html:120 +msgid "Name" +msgstr "名前" + +msgid "File size" +msgstr "ファイルサイズ" + +#: notebook/templates/tree.html:130 +msgid "Currently running Jupyter processes" +msgstr "現在実行中の Jupyter プロセス一覧" + +#: notebook/templates/tree.html:134 +msgid "Refresh running list" +msgstr "実行中の一覧を再読み込み" + +#: notebook/templates/tree.html:150 +msgid "There are no terminals running." +msgstr "実行中の端末はありません。" + +#: notebook/templates/tree.html:152 +msgid "Terminals are unavailable." +msgstr "端末はありません。" + +#: notebook/templates/tree.html:162 +msgid "Notebooks" +msgstr "ノートブック" + +#: notebook/templates/tree.html:169 +msgid "There are no notebooks running." +msgstr "実行中のノートブックはありません。" + +#: notebook/templates/tree.html:178 +msgid "Clusters tab is now provided by IPython parallel." +msgstr "Clousters タブが IPython parallel によって提供される様になりました。" + +#: notebook/templates/tree.html:179 +msgid "See 'IPython parallel' for installation details." +msgstr "詳しいインストール方法は 'IPython parallel' を参照" diff --git a/nbclassic/i18n/ja_JP/LC_MESSAGES/notebook.po b/nbclassic/i18n/ja_JP/LC_MESSAGES/notebook.po new file mode 100644 index 000000000..f8a68cc95 --- /dev/null +++ b/nbclassic/i18n/ja_JP/LC_MESSAGES/notebook.po @@ -0,0 +1,527 @@ +# Translations template for Jupyter. +# Copyright (C) 2017 ORGANIZATION +# This file is distributed under the same license as the Jupyter project. +# FIRST AUTHOR , 2017. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Jupyter VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2017-07-08 21:52-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" + +#: notebook/notebookapp.py:53 +msgid "The Jupyter Notebook requires tornado >= 4.0" +msgstr "Jupyter Notebook は tornade 4.0 以上が必要です" + +#: notebook/notebookapp.py:57 +msgid "The Jupyter Notebook requires tornado >= 4.0, but you have < 1.1.0" +msgstr "Jupyter Notebook は tornade 4.0 以上が必要ですが 1.1.0 以下です" + +#: notebook/notebookapp.py:59 +#, python-format +msgid "The Jupyter Notebook requires tornado >= 4.0, but you have %s" +msgstr "Jupyter Notebook は tornade 4.0 以上が必要ですが %s です" + +#: notebook/notebookapp.py:209 +msgid "The `ignore_minified_js` flag is deprecated and no longer works." +msgstr "`ignore_minified_js` フラグは非推奨であり既に動作していません。" + +#: notebook/notebookapp.py:210 +#, python-format +msgid "Alternatively use `%s` when working on the notebook's Javascript and LESS" +msgstr "ノートブックの Javascript と LESS で動作する場合には代わりに `%s` を使用してください。" + +#: notebook/notebookapp.py:211 +msgid "The `ignore_minified_js` flag is deprecated and will be removed in Notebook 6.0" +msgstr "`ignore_minified_js` フラグは非推奨でありノートブック 6.0 では削除されます" + +#: notebook/notebookapp.py:389 +msgid "List currently running notebook servers." +msgstr "現在起動中のノートブックサーバの一覧" + +#: notebook/notebookapp.py:393 +msgid "Produce machine-readable JSON output." +msgstr "機械で読み込み可能な JSON 出力。" + +#: notebook/notebookapp.py:397 +msgid "If True, each line of output will be a JSON object with the details from the server info file." +msgstr "True の場合、出力の各行はサーバ情報ファイルからの詳細情報を含む JSON オブジェクトになります。" + +#: notebook/notebookapp.py:402 +msgid "Currently running servers:" +msgstr "現在実行中のサーバ:" + +#: notebook/notebookapp.py:419 +msgid "Don't open the notebook in a browser after startup." +msgstr "起動後にブラウザでノートブックを開かない。" + +#: notebook/notebookapp.py:423 +msgid "DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib." +msgstr "無効: matplotlib を有効にするにはノートブックで %pylab または %matplotlib を使用して下さい。" + +#: notebook/notebookapp.py:439 +msgid "Allow the notebook to be run from root user." +msgstr "ノートブックをrootユーザーから実行できるようにする。" + +#: notebook/notebookapp.py:470 +msgid "" +"The Jupyter HTML Notebook.\n" +" \n" +" This launches a Tornado based HTML Notebook Server that serves up an HTML5/Javascript Notebook client." +msgstr "" +"The Jupyter HTML Notebook.\n" +" \n" +" HTML5/Javascript Notebook クライアントを提供する Tornado ベースの HTML Notebook サーバを起動します。" + +#: notebook/notebookapp.py:509 +msgid "Deprecated: Use minified JS file or not, mainly use during dev to avoid JS recompilation" +msgstr "非推奨: 圧縮された JS ファイルを使用するかどうか。主に開発中に JS が再コンパイルされるのを回避するために使用します。" + +#: notebook/notebookapp.py:540 +msgid "Set the Access-Control-Allow-Credentials: true header" +msgstr "Access-Control-Allow-Credentials: true ヘッダーを設定します。" + +#: notebook/notebookapp.py:544 +msgid "Whether to allow the user to run the notebook as root." +msgstr "ユーザーがノートブックを root として実行できるようにするかどうか。" + +#: notebook/notebookapp.py:548 +msgid "The default URL to redirect to from `/`" +msgstr "`/` からリダイレクトされるデフォルトの URL" + +#: notebook/notebookapp.py:552 +msgid "The IP address the notebook server will listen on." +msgstr "ノートブックサーバが待ち受ける IP アドレス。" + +#: notebook/notebookapp.py:565 +#, python-format +msgid "" +"Cannot bind to localhost, using 127.0.0.1 as default ip\n" +"%s" +msgstr "" +"localhost でバインドできません。デフォルト IP アドレスとして 127.0.0.1 を使用します\n" +"%s" + +#: notebook/notebookapp.py:579 +msgid "The port the notebook server will listen on." +msgstr "ノートブックサーバが待ち受けするポート番号。" + +#: notebook/notebookapp.py:583 +msgid "The number of additional ports to try if the specified port is not available." +msgstr "指定されたポートが利用できない場合に試す追加のポートの数。" + +#: notebook/notebookapp.py:587 +msgid "The full path to an SSL/TLS certificate file." +msgstr "SSL/TLS 証明書ファイルへの完全なパス。" + +#: notebook/notebookapp.py:591 +msgid "The full path to a private key file for usage with SSL/TLS." +msgstr "SSL/TLS で使用する秘密鍵ファイルへの完全なパス。" + +#: notebook/notebookapp.py:595 +msgid "The full path to a certificate authority certificate for SSL/TLS client authentication." +msgstr "SSL/TLS クライアント認証用の認証局証明書への完全なパス。" + +#: notebook/notebookapp.py:599 +msgid "The file where the cookie secret is stored." +msgstr "cookie secret を保存するファイル。" + +#: notebook/notebookapp.py:628 +#, python-format +msgid "Writing notebook server cookie secret to %s" +msgstr "ノートブックサーバは cookie secret を %s に書き込みます" + +#: notebook/notebookapp.py:635 +#, python-format +msgid "Could not set permissions on %s" +msgstr "%s の権限を設定出来ませんでした" + +#: notebook/notebookapp.py:640 +msgid "" +"Token used for authenticating first-time connections to the server.\n" +"\n" +" When no password is enabled,\n" +" the default is to generate a new, random token.\n" +"\n" +" Setting to an empty string disables authentication altogether, which is NOT RECOMMENDED.\n" +" " +msgstr "" +"サーバに接続する際に初回の認証に使われるトークン。\n" +"\n" +" パスワード無しが有効になっている場合\n" +" デフォルト値はランダムなトークンが新しく生成されます。\n" +"\n" +" 空の文字列に設定すると認証が完全に無効になります。これは推奨されていません。\n" +" " + +#: notebook/notebookapp.py:650 +msgid "" +"One-time token used for opening a browser.\n" +" Once used, this token cannot be used again.\n" +" " +msgstr "" +"開いたブラウザが仕様するワンタイムトークン。\n" +" 1度使用されると再度使用する事が出来ません。\n" +" " + +#: notebook/notebookapp.py:726 +msgid "" +"Specify Where to open the notebook on startup. This is the\n" +" `new` argument passed to the standard library method `webbrowser.open`.\n" +" The behaviour is not guaranteed, but depends on browser support. Valid\n" +" values are:\n" +" 2 opens a new tab,\n" +" 1 opens a new window,\n" +" 0 opens in an existing window.\n" +" See the `webbrowser.open` documentation for details.\n" +" " +msgstr "" +"起動時にどこでノートブックを開くかを指定します。これは\n" +" 標準ライブラリのメソッド `webbrowser.open` の引数 `new` に渡されます。\n" +" 動作は保証されていませんがブラウザのサポートによって異なります。\n" +" 有効な値:\n" +" 2 新しいタブで開く\n" +" 1 新しいウィンドウで開く\n" +" 0 既にあるウィンドウで開く\n" +" 詳細は `webbrowser.open` のドキュメントを参照。\n" +" " + +#: notebook/notebookapp.py:737 +msgid "DEPRECATED, use tornado_settings" +msgstr "非推奨 tornado_settings の使用" + +#: notebook/notebookapp.py:742 +msgid "" +"\n" +" webapp_settings is deprecated, use tornado_settings.\n" +msgstr "" +"\n" +" webapp_settings は非推奨です。tornado_settings を使って下さい。\n" + +#: notebook/notebookapp.py:746 +msgid "Supply overrides for the tornado.web.Application that the Jupyter notebook uses." +msgstr "Jupyterノートブックが使用する tornado.web.Application のオーバーライドを指定します。" + +#: notebook/notebookapp.py:750 +msgid "" +"\n" +" Set the tornado compression options for websocket connections.\n" +"\n" +" This value will be returned from :meth:`WebSocketHandler.get_compression_options`.\n" +" None (default) will disable compression.\n" +" A dict (even an empty one) will enable compression.\n" +"\n" +" See the tornado docs for WebSocketHandler.get_compression_options for details.\n" +" " +msgstr "" +"\n" +" tornado の websocket 接続の圧縮オプションを指定します。\n" +"\n" +" この値は :meth:`WebSocketHandler.get_compression_options` から返されます。\n" +" None (default) の場合は圧縮は無効になります。\n" +" 辞書 (空でも良い) の場合は圧縮が有効になります。\n" +"\n" +" 詳細は tornado の WebSocketHandler.get_compression_options のドキュメントを参照。\n" +" " + +#: notebook/notebookapp.py:761 +msgid "Supply overrides for terminado. Currently only supports \"shell_command\"." +msgstr "terminado のオーバーライドを指定します。現時は \"shell_command \" のみをサポートしています。" + +#: notebook/notebookapp.py:764 +msgid "Extra keyword arguments to pass to `set_secure_cookie`. See tornado's set_secure_cookie docs for details." +msgstr "`set_secure_cookie` に渡す追加のキーワード引数。詳細は tornado の set_secure_cookie のドキュメントを参照。" + +#: notebook/notebookapp.py:768 +msgid "" +"Supply SSL options for the tornado HTTPServer.\n" +" See the tornado docs for details." +msgstr "" +"tornado HTTPServer の SSL オプションを指定します。\n" +" 詳しくは tornado のドキュメントを参照。" + +#: notebook/notebookapp.py:772 +msgid "Supply extra arguments that will be passed to Jinja environment." +msgstr "Jinja environment に渡される追加の引数を指定します。" + +#: notebook/notebookapp.py:776 +msgid "Extra variables to supply to jinja templates when rendering." +msgstr "jinja テンプレートがレンダリングする際に渡される追加の変数。" + +#: notebook/notebookapp.py:812 +msgid "DEPRECATED use base_url" +msgstr "非推奨 base_url の使用" + +#: notebook/notebookapp.py:816 +msgid "base_project_url is deprecated, use base_url" +msgstr "base_project_url は非推奨です。base_url を使用して下さい。" + +#: notebook/notebookapp.py:832 +msgid "Path to search for custom.js, css" +msgstr "custom.js、CSS を検索するためのパス" + +#: notebook/notebookapp.py:844 +msgid "" +"Extra paths to search for serving jinja templates.\n" +"\n" +" Can be used to override templates from notebook.templates." +msgstr "" +"Jinja テンプレートを探す為の追加パス。\n" +"\n" +" notebook.templates を上書きする為に使う事が出来ます。" + +#: notebook/notebookapp.py:855 +msgid "extra paths to look for Javascript notebook extensions" +msgstr "Javascript ノートブック拡張への追加パス" + +#: notebook/notebookapp.py:900 +#, python-format +msgid "Using MathJax: %s" +msgstr "使用している MathJax: %s" + +#: notebook/notebookapp.py:903 +msgid "The MathJax.js configuration file that is to be used." +msgstr "使用される MathJax.js 設定ファイル。" + +#: notebook/notebookapp.py:908 +#, python-format +msgid "Using MathJax configuration file: %s" +msgstr "使用する MathJax 設定ファイル: %s" + +#: notebook/notebookapp.py:914 +msgid "The notebook manager class to use." +msgstr "ノートブックマネージャのクラス" + +#: notebook/notebookapp.py:920 +msgid "The kernel manager class to use." +msgstr "カーネルマネージャのクラス" + +#: notebook/notebookapp.py:926 +msgid "The session manager class to use." +msgstr "セッションマネージャのクラス" + +#: notebook/notebookapp.py:932 +msgid "The config manager class to use" +msgstr "設定マネージャのクラス" + +#: notebook/notebookapp.py:953 +msgid "The login handler class to use." +msgstr "ログインのハンドラクラス" + +#: notebook/notebookapp.py:960 +msgid "The logout handler class to use." +msgstr "ログアウトのハンドラクラス" + +#: notebook/notebookapp.py:964 +msgid "Whether to trust or not X-Scheme/X-Forwarded-Proto and X-Real-Ip/X-Forwarded-For headerssent by the upstream reverse proxy. Necessary if the proxy handles SSL" +msgstr "X-Scheme/X-Forwarded-Proto および X-Real-Ip/X-Forwarded-For ヘッダーがアップストリームのリバースプロキシによって送信されたことを信頼するかどうか。プロキシが SSL を処理する場合に必要となります。" + +#: notebook/notebookapp.py:976 +msgid "" +"\n" +" DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib.\n" +" " +msgstr "" +"\n" +" 非推奨: matplotlib を有効にするにはノートブックで %pylab または %matplotlib\n" +" を実行して下さい。" + +#: notebook/notebookapp.py:988 +msgid "Support for specifying --pylab on the command line has been removed." +msgstr "コマンドラインでの --pylab 指定はサポートされなくなりました。" + +#: notebook/notebookapp.py:990 +msgid "Please use `%pylab{0}` or `%matplotlib{0}` in the notebook itself." +msgstr "ノートブックの中で `%pylab{0}` または `%matplotlib{0}` を使ってください。" + +#: notebook/notebookapp.py:995 +msgid "The directory to use for notebooks and kernels." +msgstr "ノートブックとカーネルが使うディレクトリ。" + +#: notebook/notebookapp.py:1018 +#, python-format +msgid "No such notebook dir: '%r'" +msgstr "ノートブックディレクトリが見つかりません: '%r'" + +#: notebook/notebookapp.py:1031 +msgid "DEPRECATED use the nbserver_extensions dict instead" +msgstr "非推奨 nbserver_extensions 辞書を代わりに使用して下さい " + +#: notebook/notebookapp.py:1036 +msgid "server_extensions is deprecated, use nbserver_extensions" +msgstr "server_extensions が非推奨です。 nbserver_extensions を使用して下さい。" + +#: notebook/notebookapp.py:1040 +msgid "Dict of Python modules to load as notebook server extensions.Entry values can be used to enable and disable the loading ofthe extensions. The extensions will be loaded in alphabetical order." +msgstr "ノートブックサーバ拡張としてロードする Python モジュールの辞書。エントリー値を使用して拡張のロードを有効または無効にすることができます。 拡張子はアルファベット順にロードされます。" + +#: notebook/notebookapp.py:1049 +msgid "Reraise exceptions encountered loading server extensions?" +msgstr "サーバ拡張の読み込み中に例外が発生しましたか?" + +#: notebook/notebookapp.py:1052 +msgid "" +"(msgs/sec)\n" +" Maximum rate at which messages can be sent on iopub before they are\n" +" limited." +msgstr "メッセージが送信される前に iopub で送信可能な最大レート。" + +#: notebook/notebookapp.py:1056 +msgid "" +"(bytes/sec)\n" +" Maximum rate at which stream output can be sent on iopub before they are\n" +" limited." +msgstr "" +"(bytes/sec)\n" +" ストリーム出力が送信制限される前に iopub で送信可能な最大レート。" + +#: notebook/notebookapp.py:1060 +msgid "" +"(sec) Time window used to \n" +" check the message and data rate limits." +msgstr "" +"(sec) このウィンドウはメッセージとデータの帯域リミット\n" +" をチェックする為に使用されます。" + +#: notebook/notebookapp.py:1071 +#, python-format +msgid "No such file or directory: %s" +msgstr "その様なファイルまたはディレクトリは存在しません: %s" + +#: notebook/notebookapp.py:1141 +msgid "Notebook servers are configured to only be run with a password." +msgstr "ノートブックサーバはパスワードが設定された場合にだけ動作するよう設定されています。" + +#: notebook/notebookapp.py:1142 +msgid "Hint: run the following command to set a password" +msgstr "ヒント: パスワードを設定するには以下のコマンドを実行します" + +#: notebook/notebookapp.py:1143 +msgid "\t$ python -m notebook.auth password" +msgstr "" + +#: notebook/notebookapp.py:1181 +#, python-format +msgid "The port %i is already in use, trying another port." +msgstr "ポート %i は既に使用されています。他のポートで試して下さい。" + +#: notebook/notebookapp.py:1184 +#, python-format +msgid "Permission to listen on port %i denied" +msgstr "ポート %i で待機する権限がありません" + +#: notebook/notebookapp.py:1193 +msgid "ERROR: the notebook server could not be started because no available port could be found." +msgstr "エラー: 有効なポートが見付からなかったためノートブックサーバを起動できませんでした。" + +#: notebook/notebookapp.py:1199 +msgid "[all ip addresses on your system]" +msgstr "[システム上の全ての IP アドレス]" + +#: notebook/notebookapp.py:1223 +#, python-format +msgid "Terminals not available (error was %s)" +msgstr "端末は存在しません (%s でエラー発生)" + +#: notebook/notebookapp.py:1259 +msgid "interrupted" +msgstr "中断しました" + +#: notebook/notebookapp.py:1261 +msgid "y" +msgstr "" + +#: notebook/notebookapp.py:1262 +msgid "n" +msgstr "" + +#: notebook/notebookapp.py:1263 +#, python-format +msgid "Shutdown this notebook server (%s/[%s])? " +msgstr "このノートブックサーバをシャットダウンしますか? (%s/[%s])" + +#: notebook/notebookapp.py:1269 +msgid "Shutdown confirmed" +msgstr "シャットダウンの確認" + +#: notebook/notebookapp.py:1273 +msgid "No answer for 5s:" +msgstr "5秒間に応答がありません:" + +#: notebook/notebookapp.py:1274 +msgid "resuming operation..." +msgstr "操作を再開中..." + +#: notebook/notebookapp.py:1282 +#, python-format +msgid "received signal %s, stopping" +msgstr "シグナル %s を受信。停止します" + +#: notebook/notebookapp.py:1338 +#, python-format +msgid "Error loading server extension %s" +msgstr "サーバ拡張 %s の読み込みエラー" + +#: notebook/notebookapp.py:1369 +#, python-format +msgid "Shutting down %d kernels" +msgstr "%d 個のカーネルをシャットダウンしています" + +#: notebook/notebookapp.py:1375 +#, python-format +msgid "%d active kernel" +msgid_plural "%d active kernels" +msgstr[0] "%d 個のアクティブなカーネル" +msgstr[1] "%d 個のアクティブなカーネル" + +#: notebook/notebookapp.py:1379 +#, python-format +msgid "" +"The Jupyter Notebook is running at:\n" +"%s" +msgstr "" +"Jupyter Notebook は以下の URL 起動しています:\n" +"%s" + +#: notebook/notebookapp.py:1426 +msgid "Running as root is not recommended. Use --allow-root to bypass." +msgstr "root ユーザでの実行は推奨されません。バイパスするには --allow-root を使って下さい。" + +#: notebook/notebookapp.py:1432 +msgid "Use Control-C to stop this server and shut down all kernels (twice to skip confirmation)." +msgstr "サーバを停止し全てのカーネルをシャットダウンするには Control-C を使って下さい(確認をスキップするには2回)。" + +#: notebook/notebookapp.py:1434 +msgid "Welcome to Project Jupyter! Explore the various tools available and their corresponding documentation. If you are interested in contributing to the platform, please visit the communityresources section at http://jupyter.org/community.html." +msgstr "Project Jupyter へようこそ! 利用可能な色々なツールとそれに対応するドキュメントを探索して下さい。プラットフォームへの貢献に興味がある場合は http://jupyter.org/community.html の communityresources セクションにアクセスしてください。" + +#: notebook/notebookapp.py:1445 +#, python-format +msgid "No web browser found: %s." +msgstr "ウェブブラウザが見つかりません: %s" + +#: notebook/notebookapp.py:1450 +#, python-format +msgid "%s does not exist" +msgstr "%s は存在しません" + +#: notebook/notebookapp.py:1484 +msgid "Interrupted..." +msgstr "中断..." + +#: notebook/services/contents/filemanager.py:506 +#, python-format +msgid "Serving notebooks from local directory: %s" +msgstr "ローカルディレクトリからノートブックをサーブ: %s" + +#: notebook/services/contents/manager.py:68 +msgid "Untitled" +msgstr "" diff --git a/nbclassic/i18n/nbjs.json b/nbclassic/i18n/nbjs.json new file mode 100644 index 000000000..6faa829a7 --- /dev/null +++ b/nbclassic/i18n/nbjs.json @@ -0,0 +1,16 @@ +{ + "domain": "nbjs", + "supported_languages": [ + "fr-FR", + "zh-CN", + "nl", + "ja_JP" + ], + "locale_data": { + "nbjs": { + "": { + "domain": "nbjs" + } + } + } +} diff --git a/nbclassic/i18n/nl/LC_MESSAGES/nbjs.po b/nbclassic/i18n/nl/LC_MESSAGES/nbjs.po new file mode 100644 index 000000000..c091c0212 --- /dev/null +++ b/nbclassic/i18n/nl/LC_MESSAGES/nbjs.po @@ -0,0 +1,2116 @@ +# Translations template for Jupyter. +# Copyright (C) 2017 ORGANIZATION +# This file is distributed under the same license as the Jupyter project. +# FIRST AUTHOR , 2017. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Jupyter VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2017-06-27 14:04-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" + +#: notebook/static/base/js/dialog.js:161 +msgid "Manually edit the JSON below to manipulate the metadata for this cell." +msgstr "" +"Bewerk de JSON eronder handmatig om de metagegevens voor deze cel te " +"manipuleren." + +#: notebook/static/base/js/dialog.js:163 +msgid "" +"Manually edit the JSON below to manipulate the metadata for this notebook." +msgstr "" +"Bewerk de JSON eronder handmatig om de metagegevens voor dit notebook " +"te manipuleren." + +#: notebook/static/base/js/dialog.js:165 +msgid "" +" We recommend putting custom metadata attributes in an appropriately named " +"substructure, so they don't conflict with those of others." +msgstr "" +" We raden u aan aangepaste metagegevenskenmerken in een op de juiste naam " +"genoemde substructuur te plaatsen, zodat ze niet in strijd zijn met die van " +"anderen." + +#: notebook/static/base/js/dialog.js:180 +msgid "Edit the metadata" +msgstr "De metagegevens bewerken" + +#: notebook/static/base/js/dialog.js:202 +msgid "Edit Notebook Metadata" +msgstr "Metagegevens van notebook bewerken" + +#: notebook/static/base/js/dialog.js:204 +msgid "Edit Cell Metadata" +msgstr "Celmetagegevens bewerken" + +#: notebook/static/base/js/dialog.js:208 +#: notebook/static/notebook/js/notebook.js:475 +#: notebook/static/notebook/js/savewidget.js:71 +#: notebook/static/tree/js/notebooklist.js:859 +#: notebook/static/tree/js/notebooklist.js:1418 +msgid "Cancel" +msgstr "Annuleren" + +#: notebook/static/base/js/dialog.js:208 +msgid "Edit" +msgstr "Bewerken" + +#: notebook/static/base/js/dialog.js:208 +#: notebook/static/notebook/js/kernelselector.js:278 +#: notebook/static/notebook/js/mathjaxutils.js:42 +#: notebook/static/notebook/js/notebook.js:469 +#: notebook/static/notebook/js/notificationarea.js:187 +#: notebook/static/notebook/js/savewidget.js:71 +#: notebook/static/tree/js/newnotebook.js:97 +#: notebook/static/tree/js/notebooklist.js:859 +msgid "OK" +msgstr "OK" + +#: notebook/static/base/js/dialog.js:208 +msgid "Apply" +msgstr "Toepassen" + +#: notebook/static/base/js/dialog.js:225 +msgid "WARNING: Could not save invalid JSON." +msgstr "WAARSCHUWING: Kan ongeldige JSON niet opslaan." + +#: notebook/static/base/js/dialog.js:247 +msgid "There are no attachments for this cell." +msgstr "Er zijn geen bijlagen voor deze cel." + +#: notebook/static/base/js/dialog.js:250 +msgid "Current cell attachments" +msgstr "Huidige celbijlagen" + +#: notebook/static/base/js/dialog.js:259 +#: notebook/static/notebook/js/celltoolbarpresets/attachments.js:46 +msgid "Attachments" +msgstr "Bijlagen" + +#: notebook/static/base/js/dialog.js:283 +msgid "Restore" +msgstr "Herstellen" + +#: notebook/static/base/js/dialog.js:293 +#: notebook/static/tree/js/notebooklist.js:1018 +msgid "Delete" +msgstr "Verwijderen" + +#: notebook/static/base/js/dialog.js:342 notebook/static/base/js/dialog.js:386 +msgid "Edit attachments" +msgstr "Bijlagen bewerken" + +#: notebook/static/base/js/dialog.js:348 +msgid "Edit Notebook Attachments" +msgstr "Notebook-bijlagen bewerken" + +#: notebook/static/base/js/dialog.js:350 +msgid "Edit Cell Attachments" +msgstr "Celbijlagen bewerken" + +#: notebook/static/base/js/dialog.js:373 +msgid "Select a file to insert." +msgstr "Selecteer een bestand dat u wilt invoegen." + +#: notebook/static/base/js/dialog.js:399 +msgid "Select a file" +msgstr "Een bestand selecteren" + +#: notebook/static/notebook/js/about.js:14 +msgid "You are using Jupyter notebook." +msgstr "U gebruikt Jupyter notebook." + +#: notebook/static/notebook/js/about.js:16 +msgid "The version of the notebook server is: " +msgstr "De versie van de notebookserver is: " + +#: notebook/static/notebook/js/about.js:22 +msgid "The server is running on this version of Python:" +msgstr "De server draait op deze versie van Python:" + +#: notebook/static/notebook/js/about.js:25 +msgid "Waiting for kernel to be available..." +msgstr "Wachten tot kernel beschikbaar is..." + +#: notebook/static/notebook/js/about.js:27 +msgid "Server Information:" +msgstr "Servergegevens:" + +#: notebook/static/notebook/js/about.js:29 +msgid "Current Kernel Information:" +msgstr "Informatie van huidige kernel:" + +#: notebook/static/notebook/js/about.js:32 +msgid "Could not access sys_info variable for version information." +msgstr "" +"Kon geen toegang krijgen tot sys_info variabele voor versie-informatie." + +#: notebook/static/notebook/js/about.js:34 +msgid "Cannot find sys_info!" +msgstr "Ik kan sys_info niet vinden!" + +#: notebook/static/notebook/js/about.js:38 +msgid "About Jupyter Notebook" +msgstr "Over Jupyter Notebook" + +#: notebook/static/notebook/js/about.js:47 +msgid "unable to contact kernel" +msgstr "kan de kernel niet bereiken" + +#: notebook/static/notebook/js/actions.js:69 +msgid "toggle rtl layout" +msgstr "rtl-indeling in- en uitschakelen" + +#: notebook/static/notebook/js/actions.js:70 +msgid "" +"Toggle the screen directionality between left-to-right and right-to-left" +msgstr "" +"De richting van het scherm schakelen tussen links-naar-rechts en rechts-" +"naar-links" + +#: notebook/static/notebook/js/actions.js:76 +msgid "edit command mode keyboard shortcuts" +msgstr "sneltoetsen in de opdrachtmodus bewerken" + +#: notebook/static/notebook/js/actions.js:77 +msgid "Open a dialog to edit the command mode keyboard shortcuts" +msgstr "" +"Een dialoogvenster openen om sneltoetsen in de opdrachtmodus te bewerken" + +#: notebook/static/notebook/js/actions.js:97 +msgid "restart kernel" +msgstr "kernel herstarten" + +#: notebook/static/notebook/js/actions.js:98 +msgid "restart the kernel (no confirmation dialog)" +msgstr "de kernel herstarten (geen bevestigingsdialoogvenster)" + +#: notebook/static/notebook/js/actions.js:106 +msgid "confirm restart kernel" +msgstr "bevestig herstart van kernel" + +#: notebook/static/notebook/js/actions.js:107 +msgid "restart the kernel (with dialog)" +msgstr "de kernel herstarten (met dialoogvenster)" + +#: notebook/static/notebook/js/actions.js:113 +msgid "restart kernel and run all cells" +msgstr "kernel herstarten en alle cellen uitvoeren" + +#: notebook/static/notebook/js/actions.js:114 +msgid "" +"restart the kernel, then re-run the whole notebook (no confirmation dialog)" +msgstr "" +"herstart de kernel en voer vervolgens het hele notebook uit " +"(geen bevestigingsdialoogvenster)" + +#: notebook/static/notebook/js/actions.js:120 +msgid "confirm restart kernel and run all cells" +msgstr "bevestig herstartern kernel en cellen uitvoeren" + +#: notebook/static/notebook/js/actions.js:121 +msgid "restart the kernel, then re-run the whole notebook (with dialog)" +msgstr "" +"herstart de kernel en voer vervolgens het hele notebook uit " +"(met dialoogvenster)" + +#: notebook/static/notebook/js/actions.js:127 +msgid "restart kernel and clear output" +msgstr "kernel herstarten en de uitvoer wissen" + +#: notebook/static/notebook/js/actions.js:128 +msgid "restart the kernel and clear all output (no confirmation dialog)" +msgstr "" +"herstart de kernel en schakel alle uitvoer uit (geen " +"bevestigingsdialoogvenster)" + +#: notebook/static/notebook/js/actions.js:134 +msgid "confirm restart kernel and clear output" +msgstr "bevestigen herstart kernel en verwijder uitvoer" + +#: notebook/static/notebook/js/actions.js:135 +msgid "restart the kernel and clear all output (with dialog)" +msgstr "" +"herstart de kernel en verwijder alle uitvoer (met dialoogvenster)" + +#: notebook/static/notebook/js/actions.js:142 +#: notebook/static/notebook/js/actions.js:143 +msgid "interrupt the kernel" +msgstr "de kernel onderbreken" + +#: notebook/static/notebook/js/actions.js:150 +msgid "run cell and select next" +msgstr "cel uitvoeren en volgende selecteren" + +#: notebook/static/notebook/js/actions.js:152 +msgid "run cell, select below" +msgstr "cel uitvoeren en de cel eronder selecteren" + +#: notebook/static/notebook/js/actions.js:159 +#: notebook/static/notebook/js/actions.js:160 +msgid "run selected cells" +msgstr "geselecteerde cellen uitvoeren" + +#: notebook/static/notebook/js/actions.js:167 +#: notebook/static/notebook/js/actions.js:168 +msgid "run cell and insert below" +msgstr "cel uitvoeren en voeg een cel toe" + +#: notebook/static/notebook/js/actions.js:175 +#: notebook/static/notebook/js/actions.js:176 +msgid "run all cells" +msgstr "alle cellen uitvoeren" + +#: notebook/static/notebook/js/actions.js:183 +#: notebook/static/notebook/js/actions.js:184 +msgid "run all cells above" +msgstr "alle cellen erboven uitvoeren" + +#: notebook/static/notebook/js/actions.js:190 +#: notebook/static/notebook/js/actions.js:191 +msgid "run all cells below" +msgstr "alle cellen eronder uitvoeren" + +#: notebook/static/notebook/js/actions.js:197 +#: notebook/static/notebook/js/actions.js:198 +msgid "enter command mode" +msgstr "ingaan op de opdrachtmodus" + +#: notebook/static/notebook/js/actions.js:205 +#: notebook/static/notebook/js/actions.js:206 +msgid "insert image" +msgstr "afbeelding invoegen" + +#: notebook/static/notebook/js/actions.js:213 +#: notebook/static/notebook/js/actions.js:214 +msgid "cut cell attachments" +msgstr "celbijlagen knippen" + +#: notebook/static/notebook/js/actions.js:221 +#: notebook/static/notebook/js/actions.js:222 +msgid "copy cell attachments" +msgstr "celbijlagen kopiëren" + +#: notebook/static/notebook/js/actions.js:229 +#: notebook/static/notebook/js/actions.js:230 +msgid "paste cell attachments" +msgstr "celbijlagen plakken" + +#: notebook/static/notebook/js/actions.js:237 +#: notebook/static/notebook/js/actions.js:238 +msgid "split cell at cursor" +msgstr "cel splitsen bij cursor" + +#: notebook/static/notebook/js/actions.js:245 +#: notebook/static/notebook/js/actions.js:246 +msgid "enter edit mode" +msgstr "activeer bewerkingsmodus" + +#: notebook/static/notebook/js/actions.js:253 +msgid "select previous cell" +msgstr "vorige cel selecteren" + +#: notebook/static/notebook/js/actions.js:254 +msgid "select cell above" +msgstr "cel erboven selecteren" + +#: notebook/static/notebook/js/actions.js:265 +msgid "select next cell" +msgstr "volgende cel selecteren" + +#: notebook/static/notebook/js/actions.js:266 +msgid "select cell below" +msgstr "cel eronder selecteren" + +#: notebook/static/notebook/js/actions.js:277 +msgid "extend selection above" +msgstr "selectie naar boven uitbreiden" + +#: notebook/static/notebook/js/actions.js:278 +msgid "extend selected cells above" +msgstr "geselecteerde cellen naar boven uitbreiden" + +#: notebook/static/notebook/js/actions.js:289 +msgid "extend selection below" +msgstr "selectie naar onder uitbreiden" + +#: notebook/static/notebook/js/actions.js:290 +msgid "extend selected cells below" +msgstr "geselecteerde cellen naar onder uitbreiden" + +#: notebook/static/notebook/js/actions.js:301 +#: notebook/static/notebook/js/actions.js:302 +msgid "cut selected cells" +msgstr "geselecteerde cellen knippen" + +#: notebook/static/notebook/js/actions.js:312 +#: notebook/static/notebook/js/actions.js:313 +msgid "copy selected cells" +msgstr "geselecteerde cellen kopiëren" + +#: notebook/static/notebook/js/actions.js:327 +#: notebook/static/notebook/js/actions.js:328 +msgid "paste cells above" +msgstr "cellen erboven plakken" + +#: notebook/static/notebook/js/actions.js:335 +#: notebook/static/notebook/js/actions.js:336 +msgid "paste cells below" +msgstr "cellen eronder plakken" + +#: notebook/static/notebook/js/actions.js:344 +#: notebook/static/notebook/js/actions.js:345 +msgid "insert cell above" +msgstr "cel erboven invoegen" + +#: notebook/static/notebook/js/actions.js:354 +#: notebook/static/notebook/js/actions.js:355 +msgid "insert cell below" +msgstr "cel eronder invoegen" + +#: notebook/static/notebook/js/actions.js:365 +#: notebook/static/notebook/js/actions.js:366 +msgid "change cell to code" +msgstr "cel wijzigen naar code" + +#: notebook/static/notebook/js/actions.js:373 +#: notebook/static/notebook/js/actions.js:374 +msgid "change cell to markdown" +msgstr "cel wijzigen naar markdown" + +#: notebook/static/notebook/js/actions.js:381 +#: notebook/static/notebook/js/actions.js:382 +msgid "change cell to raw" +msgstr "cel wijzigen naar raw" + +#: notebook/static/notebook/js/actions.js:389 +#: notebook/static/notebook/js/actions.js:390 +msgid "change cell to heading 1" +msgstr "cel wijzigen naar header 1" + +#: notebook/static/notebook/js/actions.js:397 +#: notebook/static/notebook/js/actions.js:398 +msgid "change cell to heading 2" +msgstr "cel wijzigen naar header 2" + +#: notebook/static/notebook/js/actions.js:405 +#: notebook/static/notebook/js/actions.js:406 +msgid "change cell to heading 3" +msgstr "cel wijzigen naar header 3" + +#: notebook/static/notebook/js/actions.js:413 +#: notebook/static/notebook/js/actions.js:414 +msgid "change cell to heading 4" +msgstr "cel wijzigen naar header 4" + +#: notebook/static/notebook/js/actions.js:421 +#: notebook/static/notebook/js/actions.js:422 +msgid "change cell to heading 5" +msgstr "cel wijzigen naar header 5" + +#: notebook/static/notebook/js/actions.js:429 +#: notebook/static/notebook/js/actions.js:430 +msgid "change cell to heading 6" +msgstr "cel wijzigen naar header 6" + +#: notebook/static/notebook/js/actions.js:437 +msgid "toggle cell output" +msgstr "celuitvoer in- of uitschakelen" + +#: notebook/static/notebook/js/actions.js:438 +msgid "toggle output of selected cells" +msgstr "uitvoer van geselecteerde cellen in- of uitschakelen" + +#: notebook/static/notebook/js/actions.js:445 +msgid "toggle cell scrolling" +msgstr "scrollen van cellen in- of uitschakelen" + +#: notebook/static/notebook/js/actions.js:446 +msgid "toggle output scrolling of selected cells" +msgstr "scrollen van uitvoer van geselecteerde cellen in- of uitschakelen" + +#: notebook/static/notebook/js/actions.js:453 +msgid "clear cell output" +msgstr "verwijder celuitvoer" + +#: notebook/static/notebook/js/actions.js:454 +msgid "clear output of selected cells" +msgstr "verwijder uitvoer van geselecteerde cellen" + +#: notebook/static/notebook/js/actions.js:460 +msgid "move cells down" +msgstr "cellen naar beneden verplaatsen" + +#: notebook/static/notebook/js/actions.js:461 +msgid "move selected cells down" +msgstr "geselecteerde cellen naar beneden verplaatsen" + +#: notebook/static/notebook/js/actions.js:469 +msgid "move cells up" +msgstr "cellen omhoog verplaatsen" + +#: notebook/static/notebook/js/actions.js:470 +msgid "move selected cells up" +msgstr "geselecteerde cellen omhoog verplaatsen" + +#: notebook/static/notebook/js/actions.js:478 +#: notebook/static/notebook/js/actions.js:479 +msgid "toggle line numbers" +msgstr "regelnummers in- of uitschakelen" + +#: notebook/static/notebook/js/actions.js:486 +#: notebook/static/notebook/js/actions.js:487 +msgid "show keyboard shortcuts" +msgstr "sneltoetsen weergeven" + +#: notebook/static/notebook/js/actions.js:494 +msgid "delete cells" +msgstr "cellen verwijderen" + +#: notebook/static/notebook/js/actions.js:495 +msgid "delete selected cells" +msgstr "geselecteerde cellen verwijderen" + +#: notebook/static/notebook/js/actions.js:502 +#: notebook/static/notebook/js/actions.js:503 +msgid "undo cell deletion" +msgstr "celverwijdering ongedaan maken" + +#: notebook/static/notebook/js/actions.js:512 +msgid "merge cell with previous cell" +msgstr "cel samenvoegen met vorige cel" + +#: notebook/static/notebook/js/actions.js:513 +msgid "merge cell above" +msgstr "cel erboven samenvoegen" + +#: notebook/static/notebook/js/actions.js:519 +msgid "merge cell with next cell" +msgstr "cel samenvoegen met volgende cel" + +#: notebook/static/notebook/js/actions.js:520 +msgid "merge cell below" +msgstr "cel eronder samenvoegen" + +#: notebook/static/notebook/js/actions.js:527 +#: notebook/static/notebook/js/actions.js:528 +msgid "merge selected cells" +msgstr "geselecteerde cellen samenvoegen" + +#: notebook/static/notebook/js/actions.js:535 +msgid "merge cells" +msgstr "cellen samenvoegen" + +#: notebook/static/notebook/js/actions.js:536 +msgid "" +"merge selected cells, or current cell with cell below if only one cell is " +"selected" +msgstr "" +"geselecteerde cellen of huidige cel samenvoegen met cel eronder als " +"slechts één cel is geselecteerd" + +#: notebook/static/notebook/js/actions.js:549 +msgid "show command pallette" +msgstr "opdrachtpallette weergeven" + +#: notebook/static/notebook/js/actions.js:550 +msgid "open the command palette" +msgstr "opdrachtpallette openen" + +#: notebook/static/notebook/js/actions.js:557 +msgid "toggle all line numbers" +msgstr "alle regelnummers in- en uitschakelen" + +#: notebook/static/notebook/js/actions.js:558 +msgid "toggles line numbers in all cells, and persist the setting" +msgstr "lijnnummers in alle cellen in- of uitschakelen en de instelling aanhouden" + +#: notebook/static/notebook/js/actions.js:569 +msgid "show all line numbers" +msgstr "alle regelnummers weergeven" + +#: notebook/static/notebook/js/actions.js:570 +msgid "show line numbers in all cells, and persist the setting" +msgstr "lijnnummers in alle cellen weergeven en de instelling aanhouden" + +#: notebook/static/notebook/js/actions.js:579 +msgid "hide all line numbers" +msgstr "alle regelnummers verbergen" + +#: notebook/static/notebook/js/actions.js:580 +msgid "hide line numbers in all cells, and persist the setting" +msgstr "regelnummers in alle cellen verbergen en de instelling aanhouden" + +#: notebook/static/notebook/js/actions.js:589 +msgid "toggle header" +msgstr "koptekst in- en uitschakelen" + +#: notebook/static/notebook/js/actions.js:590 +msgid "switch between showing and hiding the header" +msgstr "schakelen tussen het weergeven en verbergen van de koptekst" + +#: notebook/static/notebook/js/actions.js:605 +#: notebook/static/notebook/js/actions.js:606 +msgid "show the header" +msgstr "de koptekst weergeven" + +#: notebook/static/notebook/js/actions.js:615 +#: notebook/static/notebook/js/actions.js:616 +msgid "hide the header" +msgstr "de koptekst verbergen" + +#: notebook/static/notebook/js/actions.js:646 +msgid "toggle toolbar" +msgstr "werkbalk schakelen" + +#: notebook/static/notebook/js/actions.js:647 +msgid "switch between showing and hiding the toolbar" +msgstr "schakelen tussen het weergeven en verbergen van de werkbalk" + +#: notebook/static/notebook/js/actions.js:660 +#: notebook/static/notebook/js/actions.js:661 +msgid "show the toolbar" +msgstr "de werkbalk weergeven" + +#: notebook/static/notebook/js/actions.js:669 +#: notebook/static/notebook/js/actions.js:670 +msgid "hide the toolbar" +msgstr "de werkbalk verbergen" + +#: notebook/static/notebook/js/actions.js:678 +#: notebook/static/notebook/js/actions.js:679 +msgid "close the pager" +msgstr "de pager sluiten" + +#: notebook/static/notebook/js/actions.js:704 +msgid "ignore" +msgstr "Negeren" + +#: notebook/static/notebook/js/actions.js:710 +#: notebook/static/notebook/js/actions.js:711 +msgid "move cursor up" +msgstr "cursor omhoog verplaatsen" + +#: notebook/static/notebook/js/actions.js:731 +#: notebook/static/notebook/js/actions.js:732 +msgid "move cursor down" +msgstr "cursor omlaag verplaatsen" + +#: notebook/static/notebook/js/actions.js:750 +#: notebook/static/notebook/js/actions.js:751 +msgid "scroll notebook down" +msgstr "scroll notebook omlaag" + +#: notebook/static/notebook/js/actions.js:760 +#: notebook/static/notebook/js/actions.js:761 +msgid "scroll notebook up" +msgstr "scroll notebook omhoog" + +#: notebook/static/notebook/js/actions.js:770 +msgid "scroll cell center" +msgstr "scroll cel naar het midden" + +#: notebook/static/notebook/js/actions.js:771 +msgid "Scroll the current cell to the center" +msgstr "De huidige cel naar het midden scrollen" + +#: notebook/static/notebook/js/actions.js:781 +msgid "scroll cell top" +msgstr "scroll cel naar boven" + +#: notebook/static/notebook/js/actions.js:782 +msgid "Scroll the current cell to the top" +msgstr "De huidige cel volledig naar boven scrollen" + +#: notebook/static/notebook/js/actions.js:792 +msgid "duplicate notebook" +msgstr "dupliceer notebook" + +#: notebook/static/notebook/js/actions.js:793 +msgid "Create and open a copy of the current notebook" +msgstr "Een kopie van het huidige notebook maken en openen" + +#: notebook/static/notebook/js/actions.js:799 +msgid "trust notebook" +msgstr "vertrouw notebook" + +#: notebook/static/notebook/js/actions.js:800 +msgid "Trust the current notebook" +msgstr "Het huidige notebook vertrouwen" + +#: notebook/static/notebook/js/actions.js:806 +msgid "rename notebook" +msgstr "naam van notebook wijzigen" + +#: notebook/static/notebook/js/actions.js:807 +msgid "Rename the current notebook" +msgstr "De naam van het huidige notebook wijzigen" + +#: notebook/static/notebook/js/actions.js:813 +msgid "toggle all cells output collapsed" +msgstr "alle samengevouwen celuitvoer in- of uitschakelen" + +#: notebook/static/notebook/js/actions.js:814 +msgid "Toggle the hidden state of all output areas" +msgstr "De zichtbaarheid status van alle uitvoergebieden in- of uitschakelen" + +#: notebook/static/notebook/js/actions.js:820 +msgid "toggle all cells output scrolled" +msgstr "alle cellenuitvoer in- of uitschakelen" + +#: notebook/static/notebook/js/actions.js:821 +msgid "Toggle the scrolling state of all output areas" +msgstr "De scroll-status van alle uitvoergebieden in- of uitschakelen" + +#: notebook/static/notebook/js/actions.js:828 +msgid "clear all cells output" +msgstr "alle cellenuitvoer wissen" + +#: notebook/static/notebook/js/actions.js:829 +msgid "Clear the content of all the outputs" +msgstr "De inhoud van alle celuitvoer wissen" + +#: notebook/static/notebook/js/actions.js:835 +msgid "save notebook" +msgstr "notebook opslaan" + +#: notebook/static/notebook/js/actions.js:836 +msgid "Save and Checkpoint" +msgstr "Opslaan en checkpoint" + +#: notebook/static/notebook/js/cell.js:79 +msgid "Warning: accessing Cell.cm_config directly is deprecated." +msgstr "" +"Waarschuwing: rechtstreeks toegang tot Cell.cm_config wordt afgeschaft." + +#: notebook/static/notebook/js/cell.js:763 +#, python-format +msgid "Unrecognized cell type: %s" +msgstr "Niet-herkende celtype: %s" + +#: notebook/static/notebook/js/cell.js:777 +msgid "Unrecognized cell type" +msgstr "Niet-herkende celtype" + +#: notebook/static/notebook/js/celltoolbar.js:296 +#, python-format +msgid "Error in cell toolbar callback %s" +msgstr "Fout in callback-functie van de celwerkbalk" + +#: notebook/static/notebook/js/clipboard.js:53 +#, python-format +msgid "Clipboard types: %s" +msgstr "Klembordtypen: %s" + +#: notebook/static/notebook/js/clipboard.js:96 +msgid "Dialog for paste from system clipboard" +msgstr "Dialoogvenster voor plakken van het klembord van het systeem" + +#: notebook/static/notebook/js/clipboard.js:109 +msgid "Ctrl-V" +msgstr "Ctrl-V" + +#: notebook/static/notebook/js/clipboard.js:111 +msgid "Cmd-V" +msgstr "Cmd-V" + +#: notebook/static/notebook/js/clipboard.js:113 +#, python-format +msgid "Press %s again to paste" +msgstr "Druk nogmaals op %s om te plakken" + +#: notebook/static/notebook/js/clipboard.js:116 +msgid "Why is this needed? " +msgstr "Waarom is dit nodig? " + +#: notebook/static/notebook/js/clipboard.js:118 +msgid "We can't get paste events in this browser without a text box. " +msgstr "" +"We kunnen niet plakken in deze browser zonder tekstvak. " + +#: notebook/static/notebook/js/clipboard.js:119 +msgid "There's an invisible text box focused in this dialog." +msgstr "Er is een onzichtbaar tekstvak geopend in dit dialoogvenster." + +#: notebook/static/notebook/js/clipboard.js:125 +#, python-format +msgid "%s to paste" +msgstr "%s plakken" + +#: notebook/static/notebook/js/codecell.js:310 +msgid "Can't execute cell since kernel is not set." +msgstr "Kan geen cel uitvoeren omdat kernel niet is ingesteld." + +#: notebook/static/notebook/js/codecell.js:472 +msgid "In" +msgstr "In" + +#: notebook/static/notebook/js/kernelselector.js:269 +#, python-format +msgid "Could not find a kernel matching %s. Please select a kernel:" +msgstr "Kon geen kernel vinden die overeenkomt met %s. Selecteer een kernel:" + +#: notebook/static/notebook/js/kernelselector.js:278 +msgid "Continue Without Kernel" +msgstr "Doorgaan zonder kernel" + +#: notebook/static/notebook/js/kernelselector.js:278 +msgid "Set Kernel" +msgstr "Kernel instellen" + +#: notebook/static/notebook/js/kernelselector.js:281 +msgid "Kernel not found" +msgstr "Kernel niet gevonden" + +#: notebook/static/notebook/js/kernelselector.js:319 +#: notebook/static/tree/js/newnotebook.js:99 +msgid "Creating Notebook Failed" +msgstr "Notebook maken is mislukt" + +#: notebook/static/notebook/js/kernelselector.js:320 +#: notebook/static/tree/js/notebooklist.js:1360 +#, python-format +msgid "The error was: %s" +msgstr "De fout was: %s" + +#: notebook/static/notebook/js/maintoolbar.js:54 +msgid "Run" +msgstr "Uitvoeren" + +#: notebook/static/notebook/js/maintoolbar.js:76 +msgid "Code" +msgstr "Code" + +#: notebook/static/notebook/js/maintoolbar.js:77 +msgid "Markdown" +msgstr "Markdown" + +#: notebook/static/notebook/js/maintoolbar.js:78 +msgid "Raw NBConvert" +msgstr "Raw NBConvert" + +#: notebook/static/notebook/js/maintoolbar.js:79 +msgid "Heading" +msgstr "Headers" + +#: notebook/static/notebook/js/maintoolbar.js:115 +msgid "unrecognized cell type:" +msgstr "niet-herkende celtype:" + +#: notebook/static/notebook/js/mathjaxutils.js:45 +#, python-format +msgid "Failed to retrieve MathJax from '%s'" +msgstr "Kan MathJax niet ophalen uit '%s'" + +#: notebook/static/notebook/js/mathjaxutils.js:47 +msgid "Math/LaTeX rendering will be disabled." +msgstr "Wiskunde/LaTeX-rendering wordt uitgeschakeld." + +#: notebook/static/notebook/js/menubar.js:220 +msgid "Trusted Notebook" +msgstr "Vertrouwd notebook" + +#: notebook/static/notebook/js/menubar.js:226 +msgid "Trust Notebook" +msgstr "Notebook vertrouwen" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:16 +#: notebook/static/notebook/js/menubar.js:383 +msgid "None" +msgstr "Geen" + +#: notebook/static/notebook/js/menubar.js:406 +msgid "No checkpoints" +msgstr "Geen checkpoints" + +#: notebook/static/notebook/js/menubar.js:465 +msgid "Opens in a new window" +msgstr "Opent in een nieuw venster" + +#: notebook/static/notebook/js/notebook.js:431 +msgid "Autosave in progress, latest changes may be lost." +msgstr "" +"Bezig met automatisch opslaan, de laatste wijzigingen kunnen verloren " +"gaan." + +#: notebook/static/notebook/js/notebook.js:433 +msgid "Unsaved changes will be lost." +msgstr "Niet-opgeslagen wijzigingen gaan verloren." + +#: notebook/static/notebook/js/notebook.js:438 +msgid "The Kernel is busy, outputs may be lost." +msgstr "De Kernel is bezet, uitvoeren kunnen verloren gaan." + +#: notebook/static/notebook/js/notebook.js:461 +msgid "This notebook is version %1$s, but we only fully support up to %2$s." +msgstr "" +"Deze notebook is versie %1$s, maar we ondersteunen alleen volledig tot %2$s." + +#: notebook/static/notebook/js/notebook.js:463 +msgid "" +"You can still work with this notebook, but cell and output types introduced " +"in later notebook versions will not be available." +msgstr "" +"U kunt nog steeds met deze notebook werken, maar cel- en uitvoertypen die in " +"latere notebookversies zijn geïntroduceerd, zijn niet beschikbaar." + +#: notebook/static/notebook/js/notebook.js:470 +msgid "Restart and Run All Cells" +msgstr "Herstarten en alle cellen uitvoeren" + +#: notebook/static/notebook/js/notebook.js:471 +msgid "Restart and Clear All Outputs" +msgstr "Herstarten en alle uitvoer wissen" + +#: notebook/static/notebook/js/notebook.js:472 +msgid "Restart" +msgstr "Herstarten" + +#: notebook/static/notebook/js/notebook.js:473 +msgid "Continue Running" +msgstr "Doorgaan met uitvoeren" + +#: notebook/static/notebook/js/notebook.js:474 +msgid "Reload" +msgstr "Reload" + +#: notebook/static/notebook/js/notebook.js:476 +msgid "Overwrite" +msgstr "Overschrijven" + +#: notebook/static/notebook/js/notebook.js:477 +msgid "Trust" +msgstr "Vertrouwen" + +#: notebook/static/notebook/js/notebook.js:478 +msgid "Revert" +msgstr "Terugkeren" + +#: notebook/static/notebook/js/notebook.js:483 +msgid "Newer Notebook" +msgstr "Nieuwer notebook" + +#: notebook/static/notebook/js/notebook.js:1548 +msgid "Use markdown headings" +msgstr "Markdown headers gebruiken" + +#: notebook/static/notebook/js/notebook.js:1550 +msgid "" +"Jupyter no longer uses special heading cells. Instead, write your headings " +"in Markdown cells using # characters:" +msgstr "" +"Jupyter maakt geen gebruik meer van speciale headercellen. Schrijf in plaats " +"daarvan uw headers in Markdown-cellen met # tekens:" + +#: notebook/static/notebook/js/notebook.js:1553 +msgid "## This is a level 2 heading" +msgstr "## Dit is een niveau 2 header" + +#: notebook/static/notebook/js/notebook.js:2248 +msgid "Restart kernel and re-run the whole notebook?" +msgstr "Kernel herstarten en het hele notebook opnieuw uitvoeren?" + +#: notebook/static/notebook/js/notebook.js:2250 +msgid "" +"Are you sure you want to restart the current kernel and re-execute the whole" +" notebook? All variables and outputs will be lost." +msgstr "" +"Weet u zeker dat u de huidige kernel wilt herstarten en het hele " +"notebook opnieuw wilt uitvoeren? Alle variabelen en uitgangen gaan " +"verloren." + +#: notebook/static/notebook/js/notebook.js:2275 +msgid "Restart kernel and clear all output?" +msgstr "Herstart kernel en verwijder alle output?" + +#: notebook/static/notebook/js/notebook.js:2277 +msgid "" +"Do you want to restart the current kernel and clear all output? All " +"variables and outputs will be lost." +msgstr "" +"Wilt u de huidige kernel herstarten en alle uitvoer wissen? Alle " +"variabelen en uitgangen gaan verloren." + +#: notebook/static/notebook/js/notebook.js:2322 +msgid "Restart kernel?" +msgstr "Kernel herstarten?" + +#: notebook/static/notebook/js/notebook.js:2324 +msgid "" +"Do you want to restart the current kernel? All variables will be lost." +msgstr "" +"Wilt u de huidige kernel herstarten? Alle variabelen gaan verloren." + +#: notebook/static/notebook/js/notebook.js:2320 +msgid "Shutdown kernel?" +msgstr "Kernel afsluiten?" + +#: notebook/static/notebook/js/notebook.js:2322 +msgid "" +"Do you want to shutdown the current kernel? All variables will be lost." +msgstr "Wilt u de huidige kernel afsluiten? Alle variabelen gaan verloren." + +#: notebook/static/notebook/js/notebook.js:2734 +msgid "Notebook changed" +msgstr "Notebook gewijzigd" + +#: notebook/static/notebook/js/notebook.js:2735 +msgid "" +"The notebook file has changed on disk since the last time we opened or saved" +" it. Do you want to overwrite the file on disk with the version open here, " +"or load the version on disk (reload the page) ?" +msgstr "" +"Het notebookbestand op de schijf is gewijzigd sinds de laatste keer dat het " +"geopend of opgeslagen is. Wilt u het bestand op schijf overschrijven" +" met de versie die hier wordt geopend, of de versie op schijf laden (de " +"pagina opnieuw laden) ?" + +#: notebook/static/notebook/js/notebook.js:2782 +#: notebook/static/notebook/js/notebook.js:2990 +msgid "Notebook validation failed" +msgstr "Notebook validatie is mislukt" + +#: notebook/static/notebook/js/notebook.js:2785 +msgid "" +"The save operation succeeded, but the notebook does not appear to be valid. " +"The validation error was:" +msgstr "" +"De opslagbewerking is geslaagd, maar het notebook lijkt niet geldig te " +"zijn. De validatiefout was:" + +#: notebook/static/notebook/js/notebook.js:2836 +msgid "" +"A trusted Jupyter notebook may execute hidden malicious code when you open " +"it. Selecting trust will immediately reload this notebook in a trusted " +"state. For more information, see the Jupyter security documentation: " +msgstr "" +"Een vertrouwd Jupyter-notebook kan verborgen schadelijke code uitvoeren " +"wanneer u het opent. Als u vertrouwensstatus selecteert, wordt dit " +"notebook onmiddellijk opnieuw geladen in een vertrouwde status. Zie voor " +"meer informatie de beveiligingsdocumentatie van Jupyter: " + +#: notebook/static/notebook/js/notebook.js:2840 +msgid "here" +msgstr "hier" + +#: notebook/static/notebook/js/notebook.js:2848 +msgid "Trust this notebook?" +msgstr "Vertrouw je dit notebook?" + +#: notebook/static/notebook/js/notebook.js:2981 +msgid "Notebook failed to load" +msgstr "Notebook kan niet worden geladen" + +#: notebook/static/notebook/js/notebook.js:2983 +msgid "The error was: " +msgstr "De fout was: " + +#: notebook/static/notebook/js/notebook.js:2987 +msgid "See the error console for details." +msgstr "Zie de foutconsole voor meer informatie." + +#: notebook/static/notebook/js/notebook.js:2995 +msgid "The notebook also failed validation:" +msgstr "De notebook validatie is ook mislukt:" + +#: notebook/static/notebook/js/notebook.js:2997 +msgid "" +"An invalid notebook may not function properly. The validation error was:" +msgstr "" +"Een ongeldig notebook werkt mogelijk niet goed. De validatiefout was:" + +#: notebook/static/notebook/js/notebook.js:3036 +#, python-format +msgid "" +"This notebook has been converted from an older notebook format to the " +"current notebook format v(%s)." +msgstr "" +"Deze notebook is geconverteerd van een oudere notebookindeling naar de " +"huidige notebookindeling v(%s)." + +#: notebook/static/notebook/js/notebook.js:3038 +#, python-format +msgid "" +"This notebook has been converted from a newer notebook format to the current" +" notebook format v(%s)." +msgstr "" +"Deze notebook is geconverteerd van een nieuwere notebookindeling naar de " +"huidige notebookindeling v(%s)." + +#: notebook/static/notebook/js/notebook.js:3046 +msgid "" +"The next time you save this notebook, the current notebook format will be " +"used." +msgstr "" +"De volgende keer dat u dit notebook opslaat, wordt de huidige " +"notebookindeling gebruikt." + +#: notebook/static/notebook/js/notebook.js:3051 +msgid "Older versions of Jupyter may not be able to read the new format." +msgstr "" +"Oudere versies van Jupyter kunnen het nieuwe formaat mogelijk niet lezen." + +#: notebook/static/notebook/js/notebook.js:3053 +msgid "Some features of the original notebook may not be available." +msgstr "" +"Sommige functies van de originele notebook zijn mogelijk niet beschikbaar." + +#: notebook/static/notebook/js/notebook.js:3056 +msgid "" +"To preserve the original version, close the notebook without saving it." +msgstr "" +"Als u de oorspronkelijke versie wilt behouden, sluit u het notebook " +"zonder deze op te slaan." + +#: notebook/static/notebook/js/notebook.js:3061 +msgid "Notebook converted" +msgstr "Notebook geconverteerd" + +#: notebook/static/notebook/js/notebook.js:3083 +msgid "(No name)" +msgstr "(Geen naam)" + +#: notebook/static/notebook/js/notebook.js:3131 +#, python-format +msgid "" +"An unknown error occurred while loading this notebook. This version can load" +" notebook formats %s or earlier. See the server log for details." +msgstr "" +"Er is een onbekende fout opgetreden tijdens het laden van dit notebook. " +"Deze versie kan notebook-indelingen %s of eerder laden. Zie het " +"serverlogboek voor meer informatie." + +#: notebook/static/notebook/js/notebook.js:3142 +msgid "Error loading notebook" +msgstr "Fout bij het laden van notebook" + +#: notebook/static/notebook/js/notebook.js:3243 +msgid "Are you sure you want to revert the notebook to the latest checkpoint?" +msgstr "" +"Weet je zeker dat je het notebook wilt terugdraaien naar het laatste " +"checkpoint?" + +#: notebook/static/notebook/js/notebook.js:3246 +msgid "This cannot be undone." +msgstr "Dit kan niet ongedaan worden gemaakt." + +#: notebook/static/notebook/js/notebook.js:3249 +msgid "The checkpoint was last updated at:" +msgstr "Het checkpoint is voor het laatst bijgewerkt op:" + +#: notebook/static/notebook/js/notebook.js:3260 +msgid "Revert notebook to checkpoint" +msgstr "Notebook terugzetten naar checkpoint" + +#: notebook/static/notebook/js/notificationarea.js:77 +#: notebook/static/notebook/js/tour.js:61 +#: notebook/static/notebook/js/tour.js:67 +msgid "Edit Mode" +msgstr "Bewerkingsmodus" + +#: notebook/static/notebook/js/notificationarea.js:84 +#: notebook/static/notebook/js/notificationarea.js:88 +#: notebook/static/notebook/js/tour.js:54 +msgid "Command Mode" +msgstr "Opdrachtmodus" + +#: notebook/static/notebook/js/notificationarea.js:95 +msgid "Kernel Created" +msgstr "Kernel aangemaakt" + +#: notebook/static/notebook/js/notificationarea.js:99 +msgid "Connecting to kernel" +msgstr "Verbinding maken met kernel" + +#: notebook/static/notebook/js/notificationarea.js:103 +msgid "Not Connected" +msgstr "Niet verbonden" + +#: notebook/static/notebook/js/notificationarea.js:106 +msgid "click to reconnect" +msgstr "klik om opnieuw verbinding te maken" + +#: notebook/static/notebook/js/notificationarea.js:115 +msgid "Restarting kernel" +msgstr "Kernel herstarten" + +#: notebook/static/notebook/js/notificationarea.js:129 +msgid "Kernel Restarting" +msgstr "Kernel herstarten" + +#: notebook/static/notebook/js/notificationarea.js:130 +msgid "The kernel appears to have died. It will restart automatically." +msgstr "" +"De kernel lijkt te zijn gestopt. Hij wordt automatisch herstart." + +#: notebook/static/notebook/js/notificationarea.js:140 +#: notebook/static/notebook/js/notificationarea.js:198 +#: notebook/static/notebook/js/notificationarea.js:218 +msgid "Dead kernel" +msgstr "Gestopte kernel" + +#: notebook/static/notebook/js/notificationarea.js:141 +#: notebook/static/notebook/js/notificationarea.js:219 +#: notebook/static/notebook/js/notificationarea.js:266 +msgid "Kernel Dead" +msgstr "Kernel is gestopt" + +#: notebook/static/notebook/js/notificationarea.js:145 +msgid "Interrupting kernel" +msgstr "Kernel onderbreken" + +#: notebook/static/notebook/js/notificationarea.js:151 +msgid "No Connection to Kernel" +msgstr "Geen verbinding met kernel" + +#: notebook/static/notebook/js/notificationarea.js:161 +msgid "" +"A connection to the notebook server could not be established. The notebook " +"will continue trying to reconnect. Check your network connection or notebook" +" server configuration." +msgstr "" +"Er kan geen verbinding met de notebookserver worden gemaakt. Het notebook" +" blijft proberen opnieuw verbinding te maken. Controleer de configuratie van" +" uw netwerkverbinding of laptopserver." + +#: notebook/static/notebook/js/notificationarea.js:166 +msgid "Connection failed" +msgstr "Verbinding is mislukt" + +#: notebook/static/notebook/js/notificationarea.js:179 +msgid "No kernel" +msgstr "Geen kernel" + +#: notebook/static/notebook/js/notificationarea.js:180 +msgid "Kernel is not running" +msgstr "Kernel is niet actief" + +#: notebook/static/notebook/js/notificationarea.js:187 +msgid "Don't Restart" +msgstr "Niet herstarten" + +#: notebook/static/notebook/js/notificationarea.js:187 +msgid "Try Restarting Now" +msgstr "Probeer nu te herstarten" + +#: notebook/static/notebook/js/notificationarea.js:191 +msgid "" +"The kernel has died, and the automatic restart has failed. It is possible " +"the kernel cannot be restarted. If you are not able to restart the kernel, " +"you will still be able to save the notebook, but running code will no longer" +" work until the notebook is reopened." +msgstr "" +"De kernel is gestopt en de automatische herstart is mislukt. Het is " +"mogelijk dat de kernel niet kan worden herstart. Als u de kernel niet" +" start, kan u het notebook nog steeds opslaan, maar werkt de code " +"niet meer totdat het notebook opnieuw is geopend." + +#: notebook/static/notebook/js/notificationarea.js:225 +msgid "No Kernel" +msgstr "Geen kernel" + +#: notebook/static/notebook/js/notificationarea.js:252 +msgid "Failed to start the kernel" +msgstr "Kan de kernel niet starten" + +#: notebook/static/notebook/js/notificationarea.js:272 +#: notebook/static/notebook/js/notificationarea.js:292 +#: notebook/static/notebook/js/notificationarea.js:306 +msgid "Kernel Busy" +msgstr "Kernel bezet" + +#: notebook/static/notebook/js/notificationarea.js:273 +msgid "Kernel starting, please wait..." +msgstr "Kernel beginnen, wachten..." + +#: notebook/static/notebook/js/notificationarea.js:279 +#: notebook/static/notebook/js/notificationarea.js:286 +msgid "Kernel Idle" +msgstr "Kernel Idle" + +#: notebook/static/notebook/js/notificationarea.js:280 +msgid "Kernel ready" +msgstr "Kernel klaar" + +#: notebook/static/notebook/js/notificationarea.js:297 +msgid "Using kernel: " +msgstr "Kernel gebruiken: " + +#: notebook/static/notebook/js/notificationarea.js:298 +msgid "Only candidate for language: %1$s was %2$s." +msgstr "Enige kandidaat voor taal: %1$s was %2$s." + +#: notebook/static/notebook/js/notificationarea.js:319 +msgid "Loading notebook" +msgstr "Notebook laden" + +#: notebook/static/notebook/js/notificationarea.js:322 +msgid "Notebook loaded" +msgstr "Notebook geladen" + +#: notebook/static/notebook/js/notificationarea.js:325 +msgid "Saving notebook" +msgstr "Notebook opslaan" + +#: notebook/static/notebook/js/notificationarea.js:328 +msgid "Notebook saved" +msgstr "Notebook opgeslagen" + +#: notebook/static/notebook/js/notificationarea.js:331 +msgid "Notebook save failed" +msgstr "Notebook opslaan is mislukt" + +#: notebook/static/notebook/js/notificationarea.js:334 +msgid "Notebook copy failed" +msgstr "Notebook kopiëren is mislukt" + +#: notebook/static/notebook/js/notificationarea.js:339 +msgid "Checkpoint created" +msgstr "Checkpoint gemaakt" + +#: notebook/static/notebook/js/notificationarea.js:347 +msgid "Checkpoint failed" +msgstr "Checkpoint is mislukt" + +#: notebook/static/notebook/js/notificationarea.js:350 +msgid "Checkpoint deleted" +msgstr "Checkpoint verwijderd" + +#: notebook/static/notebook/js/notificationarea.js:353 +msgid "Checkpoint delete failed" +msgstr "Checkpoint verwijderen is mislukt" + +#: notebook/static/notebook/js/notificationarea.js:356 +msgid "Restoring to checkpoint..." +msgstr "Herstellen naar checkpoint..." + +#: notebook/static/notebook/js/notificationarea.js:359 +msgid "Checkpoint restore failed" +msgstr "Checkpoint herstel is mislukt" + +#: notebook/static/notebook/js/notificationarea.js:364 +msgid "Autosave disabled" +msgstr "Automatisch opslaan uitgeschakeld" + +#: notebook/static/notebook/js/notificationarea.js:367 +#, python-format +msgid "Saving every %d sec." +msgstr "Het notebook wordt elke %d sec opgeslagen." + +#: notebook/static/notebook/js/notificationarea.js:383 +msgid "Trusted" +msgstr "Vertrouwd" + +#: notebook/static/notebook/js/notificationarea.js:385 +msgid "Not Trusted" +msgstr "Niet vertrouwd" + +#: notebook/static/notebook/js/outputarea.js:75 +msgid "click to expand output" +msgstr "klik om de uitvoer volledig weer te geven" + +#: notebook/static/notebook/js/outputarea.js:79 +msgid "click to expand output; double click to hide output" +msgstr "" +"klik om de uitvoer te laten verschijnen; dubbelklikken om uitvoer te verbergen" + +#: notebook/static/notebook/js/outputarea.js:167 +msgid "click to unscroll output; double click to hide" +msgstr "klik om de uitvoer te ontscrollen; dubbelklikken om te verbergen" + +#: notebook/static/notebook/js/outputarea.js:174 +msgid "click to scroll output; double click to hide" +msgstr "klik om de uitvoer te scrollen; dubbelklikken om te verbergen" + +#: notebook/static/notebook/js/outputarea.js:422 +msgid "Javascript error adding output!" +msgstr "Javascript fout bij het toevoegen van uitvoer!" + +#: notebook/static/notebook/js/outputarea.js:427 +msgid "See your browser Javascript console for more details." +msgstr "Zie uw browser Javascript console voor meer details." + +#: notebook/static/notebook/js/outputarea.js:468 +#, python-format +msgid "Out[%d]:" +msgstr "Out[%d]:" + +#: notebook/static/notebook/js/outputarea.js:577 +#, python-format +msgid "Unrecognized output: %s" +msgstr "Niet-herkende uitvoer: %s" + +#: notebook/static/notebook/js/pager.js:36 +msgid "Open the pager in an external window" +msgstr "De pager openen in een extern venster" + +#: notebook/static/notebook/js/pager.js:45 +msgid "Close the pager" +msgstr "De pager sluiten" + +#: notebook/static/notebook/js/pager.js:148 +msgid "Jupyter Pager" +msgstr "Jupyter Pager" + +#: notebook/static/notebook/js/quickhelp.js:39 +#: notebook/static/notebook/js/quickhelp.js:49 +#: notebook/static/notebook/js/quickhelp.js:50 +msgid "go to cell start" +msgstr "ga naar celstart" + +#: notebook/static/notebook/js/quickhelp.js:40 +#: notebook/static/notebook/js/quickhelp.js:51 +#: notebook/static/notebook/js/quickhelp.js:52 +msgid "go to cell end" +msgstr "ga naar het celeinde" + +#: notebook/static/notebook/js/quickhelp.js:41 +#: notebook/static/notebook/js/quickhelp.js:53 +msgid "go one word left" +msgstr "één woord naar links gaan" + +#: notebook/static/notebook/js/quickhelp.js:42 +#: notebook/static/notebook/js/quickhelp.js:54 +msgid "go one word right" +msgstr "ga een woord naar rechts" + +#: notebook/static/notebook/js/quickhelp.js:43 +#: notebook/static/notebook/js/quickhelp.js:55 +msgid "delete word before" +msgstr "woord ervoor verwijderen" + +#: notebook/static/notebook/js/quickhelp.js:44 +#: notebook/static/notebook/js/quickhelp.js:56 +msgid "delete word after" +msgstr "woord erna verwijderen" + +#: notebook/static/notebook/js/quickhelp.js:61 +msgid "code completion or indent" +msgstr "code aanvulling of inspringing" + +#: notebook/static/notebook/js/quickhelp.js:62 +msgid "tooltip" +msgstr "Tooltip" + +#: notebook/static/notebook/js/quickhelp.js:63 +msgid "indent" +msgstr "inspringing" + +#: notebook/static/notebook/js/quickhelp.js:64 +msgid "dedent" +msgstr "inspringing ongedaan maken" + +#: notebook/static/notebook/js/quickhelp.js:65 +msgid "select all" +msgstr "selecteer alle" + +#: notebook/static/notebook/js/quickhelp.js:66 +msgid "undo" +msgstr "Ongedaan maken" + +#: notebook/static/notebook/js/quickhelp.js:67 +#: notebook/static/notebook/js/quickhelp.js:68 +msgid "redo" +msgstr "Opnieuw" + +#: notebook/static/notebook/js/quickhelp.js:102 +#: notebook/static/notebook/js/quickhelp.js:243 +msgid "Shift" +msgstr "Shift" + +#: notebook/static/notebook/js/quickhelp.js:103 +msgid "Alt" +msgstr "Alt" + +#: notebook/static/notebook/js/quickhelp.js:104 +msgid "Up" +msgstr "Omhoog" + +#: notebook/static/notebook/js/quickhelp.js:105 +msgid "Down" +msgstr "Omlaag" + +#: notebook/static/notebook/js/quickhelp.js:106 +msgid "Left" +msgstr "Links" + +#: notebook/static/notebook/js/quickhelp.js:107 +msgid "Right" +msgstr "Recht" + +#: notebook/static/notebook/js/quickhelp.js:108 +#: notebook/static/notebook/js/quickhelp.js:246 +msgid "Tab" +msgstr "Tab" + +#: notebook/static/notebook/js/quickhelp.js:109 +msgid "Caps Lock" +msgstr "CAPS-LOCK" + +#: notebook/static/notebook/js/quickhelp.js:110 +#: notebook/static/notebook/js/quickhelp.js:269 +msgid "Esc" +msgstr "Esc" + +#: notebook/static/notebook/js/quickhelp.js:111 +msgid "Ctrl" +msgstr "Ctrl" + +#: notebook/static/notebook/js/quickhelp.js:112 +#: notebook/static/notebook/js/quickhelp.js:290 +msgid "Enter" +msgstr "Enter" + +#: notebook/static/notebook/js/quickhelp.js:113 +msgid "Page Up" +msgstr "Pagina omhoog" + +#: notebook/static/notebook/js/quickhelp.js:114 +#: notebook/static/notebook/js/quickhelp.js:130 +msgid "Page Down" +msgstr "Pagina omlaag" + +#: notebook/static/notebook/js/quickhelp.js:115 +msgid "Home" +msgstr "Home" + +#: notebook/static/notebook/js/quickhelp.js:116 +msgid "End" +msgstr "Einde" + +#: notebook/static/notebook/js/quickhelp.js:117 +#: notebook/static/notebook/js/quickhelp.js:245 +msgid "Space" +msgstr "Spatie" + +#: notebook/static/notebook/js/quickhelp.js:118 +msgid "Backspace" +msgstr "Backspace" + +#: notebook/static/notebook/js/quickhelp.js:119 +msgid "Minus" +msgstr "Minus" + +#: notebook/static/notebook/js/quickhelp.js:130 +msgid "PageUp" +msgstr "PageUp" + +#: notebook/static/notebook/js/quickhelp.js:197 +msgid "The Jupyter Notebook has two different keyboard input modes." +msgstr "De Jupyter Notebook heeft twee verschillende toetsenbordinvoermodi." + +#: notebook/static/notebook/js/quickhelp.js:199 +msgid "" +"Edit mode allows you to type code or text into a cell and is " +"indicated by a green cell border." +msgstr "" +"Edit-modus u code of tekst typen in een cel en wordt aangegeven door " +"een groene celrand." + +#: notebook/static/notebook/js/quickhelp.js:201 +msgid "" +"Command mode binds the keyboard to notebook level commands and is " +"indicated by a grey cell border with a blue left margin." +msgstr "" +"Command-modus het toetsenbord bindt aan opdrachten op notebookniveau " +"en wordt aangegeven door een grijze celrand met een blauwe linkermarge." + +#: notebook/static/notebook/js/quickhelp.js:222 +#: notebook/static/notebook/js/tooltip.js:58 +#: notebook/static/notebook/js/tooltip.js:69 +msgid "Close" +msgstr "Sluiten" + +#: notebook/static/notebook/js/quickhelp.js:225 +msgid "Keyboard shortcuts" +msgstr "Sneltoetsen" + +#: notebook/static/notebook/js/quickhelp.js:240 +msgid "Command" +msgstr "Opdracht" + +#: notebook/static/notebook/js/quickhelp.js:241 +msgid "Control" +msgstr "Controle" + +#: notebook/static/notebook/js/quickhelp.js:242 +msgid "Option" +msgstr "Optie" + +#: notebook/static/notebook/js/quickhelp.js:244 +msgid "Return" +msgstr "Terug" + +#: notebook/static/notebook/js/quickhelp.js:270 +#, python-format +msgid "Command Mode (press %s to enable)" +msgstr "Opdrachtmodus (druk op %s om in te schakelen)" + +#: notebook/static/notebook/js/quickhelp.js:272 +msgid "Edit Shortcuts" +msgstr "Sneltoetsen bewerken" + +#: notebook/static/notebook/js/quickhelp.js:275 +msgid "edit command-mode keyboard shortcuts" +msgstr "Sneltoetsen in de opdrachtmodus bewerken" + +#: notebook/static/notebook/js/quickhelp.js:292 +#, python-format +msgid "Edit Mode (press %s to enable)" +msgstr "Bewerkingsmodus (druk op %s om in te schakelen)" + +#: notebook/static/notebook/js/savewidget.js:49 +msgid "Autosave Failed!" +msgstr "Automatisch opslaan is mislukt!" + +#: notebook/static/notebook/js/savewidget.js:71 +#: notebook/static/tree/js/notebooklist.js:846 +#: notebook/static/tree/js/notebooklist.js:859 +msgid "Rename" +msgstr "Hernoemen" + +#: notebook/static/notebook/js/savewidget.js:78 +#: notebook/static/tree/js/notebooklist.js:837 +msgid "Enter a new notebook name:" +msgstr "Voer een nieuwe notebooknaam in:" + +#: notebook/static/notebook/js/savewidget.js:86 +msgid "Rename Notebook" +msgstr "De naam van notebook wijzigen" + +#: notebook/static/notebook/js/savewidget.js:98 +msgid "" +"Invalid notebook name. Notebook names must have 1 or more characters and can" +" contain any characters except :/\\. Please enter a new notebook name:" +msgstr "" +"Ongeldige notebooknaam. Notebook-namen moeten 1 of meer tekens bevatten" +" en kunnen tekens bevatten, behalve :/\\. Voer een nieuwe notebooknaam " +"in:" + +#: notebook/static/notebook/js/savewidget.js:103 +msgid "Renaming..." +msgstr "Hernoemen..." + +#: notebook/static/notebook/js/savewidget.js:109 +msgid "Unknown error" +msgstr "Onbekende fout" + +#: notebook/static/notebook/js/savewidget.js:178 +msgid "no checkpoint" +msgstr "geen checkpoint" + +#: notebook/static/notebook/js/savewidget.js:193 +#, python-format +msgid "Last Checkpoint: %s" +msgstr "Laatste checkpoint: %s" + +#: notebook/static/notebook/js/savewidget.js:217 +msgid "(unsaved changes)" +msgstr "(niet-opgeslagen wijzigingen)" + +#: notebook/static/notebook/js/savewidget.js:219 +msgid "(autosaved)" +msgstr "(automatisch opgeslagen)" + +#: notebook/static/notebook/js/searchandreplace.js:74 +#, python-format +msgid "" +"Warning: too many matches (%d). Some changes might not be shown or applied." +msgstr "" +"Waarschuwing: te veel matches (%d). Sommige wijzigingen worden mogelijk " +"niet weergegeven of toegepast." + +#: notebook/static/notebook/js/searchandreplace.js:77 +#, python-format +msgid "%d match" +msgid_plural "%d matches" +msgstr[0] "%d match" +msgstr[1] "%d matches" + +#: notebook/static/notebook/js/searchandreplace.js:145 +msgid "More than 100 matches, aborting" +msgstr "Meer dan 100 matches, afbreken" + +#: notebook/static/notebook/js/searchandreplace.js:166 +msgid "Use regex (JavaScript regex syntax)" +msgstr "Regex gebruiken (JavaScript regex syntax)" + +#: notebook/static/notebook/js/searchandreplace.js:174 +msgid "Replace in selected cells" +msgstr "Vervangen in geselecteerde cellen" + +#: notebook/static/notebook/js/searchandreplace.js:181 +msgid "Match case" +msgstr "Hoofdletters matchen" + +#: notebook/static/notebook/js/searchandreplace.js:187 +msgid "Find" +msgstr "Zoek" + +#: notebook/static/notebook/js/searchandreplace.js:203 +msgid "Replace" +msgstr "Vervangen" + +#: notebook/static/notebook/js/searchandreplace.js:255 +msgid "No matches, invalid or empty regular expression" +msgstr "Geen overeenkomsten, ongeldige of lege reguliere expressie" + +#: notebook/static/notebook/js/searchandreplace.js:370 +msgid "Replace All" +msgstr "Alles vervangen" + +#: notebook/static/notebook/js/searchandreplace.js:374 +msgid "Find and Replace" +msgstr "Zoeken en vervangen" + +#: notebook/static/notebook/js/searchandreplace.js:400 +#: notebook/static/notebook/js/searchandreplace.js:401 +msgid "find and replace" +msgstr "zoeken en vervangen" + +#: notebook/static/notebook/js/textcell.js:551 +msgid "" +"Write raw LaTeX or other formats here, for use with nbconvert. It will not " +"be rendered in the notebook. When passing through nbconvert, a Raw Cell's " +"content is added to the output unmodified." +msgstr "" +"Schrijf hier in LaTeX of ander format, voor gebruik met nbconvert. Het " +"wordt niet weergegeven in het notebook. Bij het doorlopen van nbconvert " +"wordt de inhoud van een Raw Cell ongewijzigd aan de uitvoer toegevoegd." + +#: notebook/static/notebook/js/tooltip.js:41 +msgid "Grow the tooltip vertically (press shift-tab twice)" +msgstr "De tooltip verticaal laten groeien (druk twee keer op shift-tab)" + +#: notebook/static/notebook/js/tooltip.js:48 +msgid "show the current docstring in pager (press shift-tab 4 times)" +msgstr "de huidige docstring weergeven in pager (druk 4 keer op shift-tab)" + +#: notebook/static/notebook/js/tooltip.js:49 +msgid "Open in Pager" +msgstr "Openen in Pager" + +#: notebook/static/notebook/js/tooltip.js:68 +msgid "Tooltip will linger for 10 seconds while you type" +msgstr "De tooltip blijft 10 seconden hangen terwijl u typt" + +#: notebook/static/notebook/js/tour.js:27 +msgid "Welcome to the Notebook Tour" +msgstr "Welkom bij de Notebook Rondleiding" + +#: notebook/static/notebook/js/tour.js:30 +msgid "" +"You can use the left and right arrow keys to go backwards and forwards." +msgstr "U kan de pijltjestoetsen links en rechts gebruiken om heen en weer te gaan." + +#: notebook/static/notebook/js/tour.js:33 +msgid "Filename" +msgstr "Bestandsnaam" + +#: notebook/static/notebook/js/tour.js:35 +msgid "Click here to change the filename for this notebook." +msgstr "Klik hier om de bestandsnaam voor dit notebook te wijzigen." + +#: notebook/static/notebook/js/tour.js:39 +msgid "Notebook Menubar" +msgstr "Menubalk notebook" + +#: notebook/static/notebook/js/tour.js:40 +msgid "" +"The menubar has menus for actions on the notebook, its cells, and the kernel" +" it communicates with." +msgstr "" +"De menubalk heeft menu's voor acties op het notebook, de cellen en de " +"kernel waarmee het communiceert." + +#: notebook/static/notebook/js/tour.js:44 +msgid "Notebook Toolbar" +msgstr "Werkbalk Notebook" + +#: notebook/static/notebook/js/tour.js:45 +msgid "" +"The toolbar has buttons for the most common actions. Hover your mouse over " +"each button for more information." +msgstr "" +"De werkbalk heeft knoppen voor de meest voorkomende acties. Beweeg met je " +"muis over elke knop voor meer informatie." + +#: notebook/static/notebook/js/tour.js:48 +msgid "Mode Indicator" +msgstr "Modus-indicator" + +#: notebook/static/notebook/js/tour.js:50 +msgid "" +"The Notebook has two modes: Edit Mode and Command Mode. In this area, an " +"indicator can appear to tell you which mode you are in." +msgstr "" +"De notebook heeft twee modi: De modus bewerken en de opdrachtmodus. In dit " +"gebied kan een indicator verschijnen om u te vertellen in welke modus u zich" +" bevindt." + +#: notebook/static/notebook/js/tour.js:58 +msgid "" +"Right now you are in Command Mode, and many keyboard shortcuts are " +"available. In this mode, no icon is displayed in the indicator area." +msgstr "" +"Op dit moment bent u in de opdrachtmodus en zijn er veel sneltoetsen " +"beschikbaar. In deze modus wordt geen pictogram weergegeven in het " +"indicatorgebied." + +#: notebook/static/notebook/js/tour.js:64 +msgid "" +"Pressing Enter or clicking in the input text area of the cell " +"switches to Edit Mode." +msgstr "" +"Als u op Enter drukt of klikt in het invoertekstgebied van de cel, " +"schakelt u over naar de bewerkingsmodus." + +#: notebook/static/notebook/js/tour.js:70 +msgid "" +"Notice that the border around the currently active cell changed color. " +"Typing will insert text into the currently active cell." +msgstr "" +"De rand rond de actieve cel is van kleur veranderd. Als u typt, wordt tekst " +"ingevoegd in de actieve cel." + +#: notebook/static/notebook/js/tour.js:73 +msgid "Back to Command Mode" +msgstr "Terug naar de opdrachtmodus" + +#: notebook/static/notebook/js/tour.js:76 +msgid "" +"Pressing Esc or clicking outside of the input text area takes " +"you back to Command Mode." +msgstr "" +"Als u op Esc drukt of buiten het invoertekstgebied klikt, gaat " +"u terug naar de opdrachtmodus." + +#: notebook/static/notebook/js/tour.js:79 +msgid "Keyboard Shortcuts" +msgstr "Sneltoetsen" + +#: notebook/static/notebook/js/tour.js:91 +msgid "You can click here to get a list of all of the keyboard shortcuts." +msgstr "U hier klikken om een lijst van alle sneltoetsen te krijgen." + +#: notebook/static/notebook/js/tour.js:94 +#: notebook/static/notebook/js/tour.js:100 +msgid "Kernel Indicator" +msgstr "Kernel Indicator" + +#: notebook/static/notebook/js/tour.js:97 +msgid "" +"This is the Kernel indicator. It looks like this when the Kernel is idle." +msgstr "" +"Dit is de Kernel indicator. Het ziet er zo uit als de Kernel niet actief is." + +#: notebook/static/notebook/js/tour.js:103 +msgid "The Kernel indicator looks like this when the Kernel is busy." +msgstr "De Kernel indicator ziet er als volgt uit wanneer de Kernel bezig is." + +#: notebook/static/notebook/js/tour.js:107 +msgid "Interrupting the Kernel" +msgstr "De kernel onderbreken" + +#: notebook/static/notebook/js/tour.js:109 +msgid "To cancel a computation in progress, you can click here." +msgstr "Als u een actieve berekening wilt annuleren, kan u hier klikken." + +#: notebook/static/notebook/js/tour.js:114 +msgid "Notification Area" +msgstr "Systeemvak" + +#: notebook/static/notebook/js/tour.js:115 +msgid "" +"Messages in response to user actions (Save, Interrupt, etc.) appear here." +msgstr "" +"Berichten in reactie op acties van gebruikers (Opslaan, Onderbreken, enz.) " +"worden hier weergegeven." + +#: notebook/static/notebook/js/tour.js:117 +msgid "End of Tour" +msgstr "Einde van de Tour" + +#: notebook/static/notebook/js/tour.js:120 +msgid "This concludes the Jupyter Notebook User Interface Tour." +msgstr "Dit concludeert de Jupyter Notebook User Interface Rondleiding." + +#: notebook/static/notebook/js/celltoolbarpresets/attachments.js:32 +msgid "Edit Attachments" +msgstr "Bijlagen bewerken" + +#: notebook/static/notebook/js/celltoolbarpresets/default.js:19 +msgid "Cell" +msgstr "Cel" + +#: notebook/static/notebook/js/celltoolbarpresets/default.js:29 +#: notebook/static/notebook/js/celltoolbarpresets/default.js:47 +msgid "Edit Metadata" +msgstr "Metagegevens bewerken" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:22 +msgid "Custom" +msgstr "Aangepaste" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:32 +msgid "Set the MIME type of the raw cell:" +msgstr "Stel het MIME-type van de raw cel in:" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:40 +msgid "Raw Cell MIME Type" +msgstr "Raw Cell MIME-type" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:74 +msgid "Raw NBConvert Format" +msgstr "Raw NBConvert-indeling" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:81 +msgid "Raw Cell Format" +msgstr "Raw-celnotatie" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:15 +msgid "Slide" +msgstr "Dia" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:16 +msgid "Sub-Slide" +msgstr "Subdia" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:17 +msgid "Fragment" +msgstr "Fragment" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:18 +msgid "Skip" +msgstr "Overslaan" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:19 +msgid "Notes" +msgstr "Notities" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:35 +msgid "Slide Type" +msgstr "Diatype" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:41 +msgid "Slideshow" +msgstr "Diavoorstelling" + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:133 +msgid "Add tag" +msgstr "Tag toevoegen" + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:163 +msgid "" +"Edit the list of tags below. All whitespace is treated as tag separators." +msgstr "" +"Bewerk de onderstaande lijst met tags. Alle witruimte wordt behandeld als " +"tagscheidingstekens." + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:172 +msgid "Edit the tags" +msgstr "De tags bewerken" + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:186 +msgid "Edit Tags" +msgstr "Tags bewerken" + +#: notebook/static/tree/js/kernellist.js:86 +#: notebook/static/tree/js/terminallist.js:105 +msgid "Shutdown" +msgstr "Afsluiten" + +#: notebook/static/tree/js/newnotebook.js:70 +#, python-format +msgid "Create a new notebook with %s" +msgstr "Een nieuw notebook maken met %s" + +#: notebook/static/tree/js/newnotebook.js:101 +msgid "An error occurred while creating a new notebook." +msgstr "" +"Er is een fout opgetreden tijdens het maken van een nieuw notebook." + +#: notebook/static/tree/js/notebooklist.js:122 +msgid "Creating File Failed" +msgstr "Bestand maken is mislukt" + +#: notebook/static/tree/js/notebooklist.js:124 +msgid "An error occurred while creating a new file." +msgstr "Er is een fout opgetreden tijdens het maken van een nieuw bestand." + +#: notebook/static/tree/js/notebooklist.js:142 +msgid "Creating Folder Failed" +msgstr "Map maken is mislukt" + +#: notebook/static/tree/js/notebooklist.js:144 +msgid "An error occurred while creating a new folder." +msgstr "Er is een fout opgetreden tijdens het maken van een nieuwe map." + +#: notebook/static/tree/js/notebooklist.js:271 +msgid "Failed to read file" +msgstr "Bestand niet kunnen worden gelezen" + +#: notebook/static/tree/js/notebooklist.js:272 +#, python-format +msgid "Failed to read file %s" +msgstr "Bestand %s niet kunnen lezen" + +#: notebook/static/tree/js/notebooklist.js:283 +#, python-format +msgid "The file size is %d MB. Do you still want to upload it?" +msgstr "De bestandsgrootte is %d MB. Wil je het nog steeds uploaden?" + +#: notebook/static/tree/js/notebooklist.js:286 +msgid "Large file size warning" +msgstr "Waarschuwing voor grote bestandsgrootte" + +#: notebook/static/tree/js/notebooklist.js:355 +msgid "Server error: " +msgstr "Serverfout: " + +#: notebook/static/tree/js/notebooklist.js:390 +msgid "The notebook list is empty." +msgstr "De lijst met notebooks is leeg." + +#: notebook/static/tree/js/notebooklist.js:463 +msgid "Click here to rename, delete, etc." +msgstr "Klik hier om de naam te wijzigen, te verwijderen, enz." + +#: notebook/static/tree/js/notebooklist.js:503 +msgid "Running" +msgstr "Actieve Processen" + +#: notebook/static/tree/js/notebooklist.js:835 +msgid "Enter a new file name:" +msgstr "Voer een nieuwe bestandsnaam in:" + +#: notebook/static/tree/js/notebooklist.js:836 +msgid "Enter a new directory name:" +msgstr "Voer een nieuwe mapnaam in:" + +#: notebook/static/tree/js/notebooklist.js:838 +msgid "Enter a new name:" +msgstr "Voer een nieuwe naam in:" + +#: notebook/static/tree/js/notebooklist.js:843 +msgid "Rename file" +msgstr "Naamvan het bestand wijzigen" + +#: notebook/static/tree/js/notebooklist.js:844 +msgid "Rename directory" +msgstr "Naamvan naam wijzigen" + +#: notebook/static/tree/js/notebooklist.js:845 +msgid "Rename notebook" +msgstr "De naam van notebook wijzigen" + +#: notebook/static/tree/js/notebooklist.js:859 +msgid "Move" +msgstr "Verplaatsen" + +#: notebook/static/tree/js/notebooklist.js:875 +msgid "An error occurred while renaming \"%1$s\" to \"%2$s\"." +msgstr "Er is een fout opgetreden bij het hernoemen van \"%1$s\" naar \"%2$s\"." + +#: notebook/static/tree/js/notebooklist.js:878 +msgid "Rename Failed" +msgstr "Naam wijzigen Van mislukt" + +#: notebook/static/tree/js/notebooklist.js:927 +#, python-format +msgid "Enter a new destination directory path for this item:" +msgid_plural "Enter a new destination directory path for these %d items:" +msgstr[0] "Voer een nieuw bestemmingsmap-pad in voor dit item:" +msgstr[1] "Voer een nieuw bestemmingsmap-pad in voor deze %d items:" + +#: notebook/static/tree/js/notebooklist.js:940 +#, python-format +msgid "Move an Item" +msgid_plural "Move %d Items" +msgstr[0] "Een item verplaatsen" +msgstr[1] "%d objecten verplaatsen" + +#: notebook/static/tree/js/notebooklist.js:959 +msgid "An error occurred while moving \"%1$s\" from \"%2$s\" to \"%3$s\"." +msgstr "" +"Er is een fout opgetreden tijdens het verplaatsen van \"%1$s\" van \"%2$s\" " +"naar \"%3$s\"." + +#: notebook/static/tree/js/notebooklist.js:961 +msgid "Move Failed" +msgstr "Verplaatsen mislukt" + +#: notebook/static/tree/js/notebooklist.js:1007 +#, python-format +msgid "Are you sure you want to permanently delete: \"%s\"?" +msgid_plural "" +"Are you sure you want to permanently delete the %d files or folders " +"selected?" +msgstr[0] "Weet u zeker dat u het volgende definitief wilt verwijderen: \"%s\"?" +msgstr[1] "" +"Weet u zeker dat u de geselecteerde %d bestanden of mappen permanent wilt " +"verwijderen?" + +#: notebook/static/tree/js/notebooklist.js:1035 +#, python-format +msgid "An error occurred while deleting \"%s\"." +msgstr "Er is een fout opgetreden tijdens het verwijderen van \"%s\"." + +#: notebook/static/tree/js/notebooklist.js:1037 +msgid "Delete Failed" +msgstr "Verwijderen mislukt" + +#: notebook/static/tree/js/notebooklist.js:1078 +#, python-format +msgid "Are you sure you want to duplicate: \"%s\"?" +msgid_plural "Are you sure you want to duplicate the %d files selected?" +msgstr[0] "Weet u zeker dat u wilt dupliceren: \"%s\"?" +msgstr[1] "Weet u zeker dat u de geselecteerde %d bestanden wilt dupliceren?" + +#: notebook/static/tree/js/notebooklist.js:1088 +msgid "Duplicate" +msgstr "Dupliceren" + +#: notebook/static/tree/js/notebooklist.js:1102 +#, python-format +msgid "An error occurred while duplicating \"%s\"." +msgstr "Er is een fout opgetreden tijdens het dupliceren van \"%s\"." + +#: notebook/static/tree/js/notebooklist.js:1104 +msgid "Duplicate Failed" +msgstr "Dupliceren is mislukt" + +#: notebook/static/tree/js/notebooklist.js:1323 +msgid "Upload" +msgstr "Uploaden" + +#: notebook/static/tree/js/notebooklist.js:1332 +msgid "Invalid file name" +msgstr "Ongeldige bestandsnaam" + +#: notebook/static/tree/js/notebooklist.js:1333 +msgid "File names must be at least one character and not start with a period" +msgstr "" +"Bestandsnamen moeten ten minste één teken zijn en niet beginnen met een " +"periode" + +#: notebook/static/tree/js/notebooklist.js:1362 +msgid "Cannot upload invalid Notebook" +msgstr "Kan ongeldig notebook niet uploaden" + +#: notebook/static/tree/js/notebooklist.js:1395 +#, python-format +msgid "There is already a file named \"%s\". Do you want to replace it?" +msgstr "Er is al een bestand met de naam \"%s\". Wilt u het vervangen?" + +#: notebook/static/tree/js/notebooklist.js:1397 +msgid "Replace file" +msgstr "Bestand vervangen" diff --git a/nbclassic/i18n/nl/LC_MESSAGES/nbui.po b/nbclassic/i18n/nl/LC_MESSAGES/nbui.po new file mode 100644 index 000000000..69e42090c --- /dev/null +++ b/nbclassic/i18n/nl/LC_MESSAGES/nbui.po @@ -0,0 +1,746 @@ +# Translations template for Jupyter. +# Copyright (C) 2017 ORGANIZATION +# This file is distributed under the same license as the Jupyter project. +# FIRST AUTHOR , 2017. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Jupyter VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2017-07-07 12:48-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" + +#: notebook/templates/404.html:3 +msgid "You are requesting a page that does not exist!" +msgstr "U vraagt een pagina die niet bestaat!" + +#: notebook/templates/edit.html:37 +msgid "current mode" +msgstr "huidige modus" + +#: notebook/templates/edit.html:48 notebook/templates/notebook.html:78 +msgid "File" +msgstr "Bestand" + +#: notebook/templates/edit.html:50 notebook/templates/tree.html:57 +msgid "New" +msgstr "Nieuw" + +#: notebook/templates/edit.html:51 +msgid "Save" +msgstr "Opslaan" + +#: notebook/templates/edit.html:52 notebook/templates/tree.html:36 +msgid "Rename" +msgstr "Hernoemen" + +#: notebook/templates/edit.html:53 notebook/templates/tree.html:38 +msgid "Download" +msgstr "Downloaden" + +#: notebook/templates/edit.html:56 notebook/templates/notebook.html:131 +#: notebook/templates/tree.html:41 +msgid "Edit" +msgstr "Bewerken" + +#: notebook/templates/edit.html:58 +msgid "Find" +msgstr "Vinden" + +#: notebook/templates/edit.html:59 +msgid "Find & Replace" +msgstr "Zoeken en vervangen" + +#: notebook/templates/edit.html:61 +msgid "Key Map" +msgstr "Sleutelkaart" + +#: notebook/templates/edit.html:62 +msgid "Default" +msgstr "Standaard" + +#: notebook/templates/edit.html:63 +msgid "Sublime Text" +msgstr "Sublime Tekst" + +#: notebook/templates/edit.html:68 notebook/templates/notebook.html:159 +#: notebook/templates/tree.html:40 +msgid "View" +msgstr "Bekijken" + +#: notebook/templates/edit.html:70 notebook/templates/notebook.html:162 +msgid "Show/Hide the logo and notebook title (above menu bar)" +msgstr "" +"Het logo en de titel van het notebook weergeven/verbergen (boven " +"menubalk)" + +#: notebook/templates/edit.html:71 notebook/templates/notebook.html:163 +msgid "Toggle Header" +msgstr "Koptekst in- of uitschakelen" + +#: notebook/templates/edit.html:72 notebook/templates/notebook.html:171 +msgid "Toggle Line Numbers" +msgstr "Regelnummers in- of uitschakelen" + +#: notebook/templates/edit.html:75 +msgid "Language" +msgstr "Taal" + +#: notebook/templates/error.html:23 +msgid "The error was:" +msgstr "De fout was:" + +#: notebook/templates/login.html:24 +msgid "Password or token:" +msgstr "Wachtwoord of token:" + +#: notebook/templates/login.html:26 +msgid "Password:" +msgstr "Wachtwoord:" + +#: notebook/templates/login.html:31 +msgid "Log in" +msgstr "Aanmelden" + +#: notebook/templates/login.html:39 +msgid "No login available, you shouldn't be seeing this page." +msgstr "Geen login beschikbaar, u zou deze pagina niet moeten zien." + +#: notebook/templates/logout.html:24 +#, python-format +msgid "Proceed to the dashboard" +msgstr "Ga naar het dashboard " + +#: notebook/templates/logout.html:26 +#, python-format +msgid "Proceed to the login page" +msgstr "Ga naar de login pagina" + +#: notebook/templates/notebook.html:62 +msgid "Menu" +msgstr "Menu" + +#: notebook/templates/notebook.html:65 notebook/templates/notebook.html:254 +msgid "Kernel" +msgstr "Kernel" + +#: notebook/templates/notebook.html:68 +msgid "This notebook is read-only" +msgstr "Dit notebook is alleen-lezen" + +#: notebook/templates/notebook.html:81 +msgid "New Notebook" +msgstr "Nieuw notebook" + +#: notebook/templates/notebook.html:85 +msgid "Opens a new window with the Dashboard view" +msgstr "Opent een nieuw venster met de dashboardweergave" + +#: notebook/templates/notebook.html:86 +msgid "Open..." +msgstr "Open..." + +#: notebook/templates/notebook.html:90 +msgid "Open a copy of this notebook's contents and start a new kernel" +msgstr "" +"Een kopie van de inhoud van dit notebook openen en een nieuwe kernel " +"starten" + +#: notebook/templates/notebook.html:91 +msgid "Make a Copy..." +msgstr "Maak een kopie..." + +#: notebook/templates/notebook.html:92 +msgid "Rename..." +msgstr "Hernoemen..." + +#: notebook/templates/notebook.html:93 +msgid "Save and Checkpoint" +msgstr "Opslaan en Checkpoint" + +#: notebook/templates/notebook.html:96 +msgid "Revert to Checkpoint" +msgstr "Terugkeren naar Checkpoint" + +#: notebook/templates/notebook.html:106 +msgid "Print Preview" +msgstr "Afdrukvoorbeeld" + +#: notebook/templates/notebook.html:107 +msgid "Download as" +msgstr "Download als" + +#: notebook/templates/notebook.html:109 +msgid "Notebook (.ipynb)" +msgstr "Notebook (.ipynb)" + +#: notebook/templates/notebook.html:110 +msgid "Script" +msgstr "Script" + +#: notebook/templates/notebook.html:111 +msgid "HTML (.html)" +msgstr "HTML (.html)" + +#: notebook/templates/notebook.html:112 +msgid "Markdown (.md)" +msgstr "Markdown (.md)" + +#: notebook/templates/notebook.html:113 +msgid "reST (.rst)" +msgstr "reST (.rst)" + +#: notebook/templates/notebook.html:114 +msgid "LaTeX (.tex)" +msgstr "LaTeX (.tex)" + +#: notebook/templates/notebook.html:115 +msgid "PDF via LaTeX (.pdf)" +msgstr "PDF via LaTeX (.pdf)" + +#: notebook/templates/notebook.html:118 +msgid "Deploy as" +msgstr "Implementeren als" + +#: notebook/templates/notebook.html:123 +msgid "Trust the output of this notebook" +msgstr "Vertrouwen op de uitvoer van dit notebook" + +#: notebook/templates/notebook.html:124 +msgid "Trust Notebook" +msgstr "Notebook vertrouwen" + +#: notebook/templates/notebook.html:127 +msgid "Shutdown this notebook's kernel, and close this window" +msgstr "De kernel van deze notebook afsluiten en dit venster sluiten" + +#: notebook/templates/notebook.html:128 +msgid "Close and Halt" +msgstr "Sluiten en Halt" + +#: notebook/templates/notebook.html:133 +msgid "Cut Cells" +msgstr "Cellen knippen" + +#: notebook/templates/notebook.html:134 +msgid "Copy Cells" +msgstr "Cellen kopiëren" + +#: notebook/templates/notebook.html:135 +msgid "Paste Cells Above" +msgstr "Cellen boven plakken" + +#: notebook/templates/notebook.html:136 +msgid "Paste Cells Below" +msgstr "Cellen eronder plakken" + +#: notebook/templates/notebook.html:137 +msgid "Paste Cells & Replace" +msgstr "Cellen plakken en vervangen" + +#: notebook/templates/notebook.html:138 +msgid "Delete Cells" +msgstr "Cellen verwijderen" + +#: notebook/templates/notebook.html:139 +msgid "Undo Delete Cells" +msgstr "Verwijdercellen ongedaan maken" + +#: notebook/templates/notebook.html:141 +msgid "Split Cell" +msgstr "Cel splitsen" + +#: notebook/templates/notebook.html:142 +msgid "Merge Cell Above" +msgstr "Cel boven samenvoegen" + +#: notebook/templates/notebook.html:143 +msgid "Merge Cell Below" +msgstr "Cel eronder samenvoegen" + +#: notebook/templates/notebook.html:145 +msgid "Move Cell Up" +msgstr "Cel omhoog verplaatsen" + +#: notebook/templates/notebook.html:146 +msgid "Move Cell Down" +msgstr "Cel omlaag verplaatsen" + +#: notebook/templates/notebook.html:148 +msgid "Edit Notebook Metadata" +msgstr "Metagegevens van notebook bewerken" + +#: notebook/templates/notebook.html:150 +msgid "Find and Replace" +msgstr "Zoeken en vervangen" + +#: notebook/templates/notebook.html:152 +msgid "Cut Cell Attachments" +msgstr "Celbijlagen knippen" + +#: notebook/templates/notebook.html:153 +msgid "Copy Cell Attachments" +msgstr "Celbijlagen kopiëren" + +#: notebook/templates/notebook.html:154 +msgid "Paste Cell Attachments" +msgstr "Celbijlagen plakken" + +#: notebook/templates/notebook.html:156 +msgid "Insert Image" +msgstr "Afbeelding invoegen" + +#: notebook/templates/notebook.html:166 +msgid "Show/Hide the action icons (below menu bar)" +msgstr "De actiepictogrammen weergeven/verbergen (onder menubalk)" + +#: notebook/templates/notebook.html:167 +msgid "Toggle Toolbar" +msgstr "Werkbalk in- en uitschakelen" + +#: notebook/templates/notebook.html:170 +msgid "Show/Hide line numbers in cells" +msgstr "Lijnnummers weergeven/verbergen in cellen" + +#: notebook/templates/notebook.html:174 +msgid "Cell Toolbar" +msgstr "Celwerkbalk" + +#: notebook/templates/notebook.html:179 +msgid "Insert" +msgstr "Invoegen" + +#: notebook/templates/notebook.html:182 +msgid "Insert an empty Code cell above the currently active cell" +msgstr "Een lege codecel boven de actieve cel invoegen" + +#: notebook/templates/notebook.html:183 +msgid "Insert Cell Above" +msgstr "Cel boven invoegen" + +#: notebook/templates/notebook.html:185 +msgid "Insert an empty Code cell below the currently active cell" +msgstr "Een lege codecel onder de actieve cel invoegen" + +#: notebook/templates/notebook.html:186 +msgid "Insert Cell Below" +msgstr "Cel eronder invoegen" + +#: notebook/templates/notebook.html:189 +msgid "Cell" +msgstr "Cel" + +#: notebook/templates/notebook.html:191 +msgid "Run this cell, and move cursor to the next one" +msgstr "Deze cel uitvoeren en cursor naar de volgende cel verplaatsen" + +#: notebook/templates/notebook.html:192 +msgid "Run Cells" +msgstr "Cellen uitvoeren" + +#: notebook/templates/notebook.html:193 +msgid "Run this cell, select below" +msgstr "Voer deze cel uit en selecteer de cel eronder" + +#: notebook/templates/notebook.html:194 +msgid "Run Cells and Select Below" +msgstr "Cellen uitvoeren en de cel eronder selecteren" + +#: notebook/templates/notebook.html:195 +msgid "Run this cell, insert below" +msgstr "Voer deze cel uit en voeg een cel toe" + +#: notebook/templates/notebook.html:196 +msgid "Run Cells and Insert Below" +msgstr "Cellen uitvoeren en voeg een cel toe" + +#: notebook/templates/notebook.html:197 +msgid "Run all cells in the notebook" +msgstr "Alle cellen in het notebook uitvoeren" + +#: notebook/templates/notebook.html:198 +msgid "Run All" +msgstr "Alles uitvoeren" + +#: notebook/templates/notebook.html:199 +msgid "Run all cells above (but not including) this cell" +msgstr "Alle cellen boven (maar niet inclusief) deze cel uitvoeren" + +#: notebook/templates/notebook.html:200 +msgid "Run All Above" +msgstr "All cellen hierboven uitvoeren" + +#: notebook/templates/notebook.html:201 +msgid "Run this cell and all cells below it" +msgstr "Voer deze cel en alle cellen eronder uit." + +#: notebook/templates/notebook.html:202 +msgid "Run All Below" +msgstr "Voer alles eronder uit" + +#: notebook/templates/notebook.html:205 +msgid "" +"All cells in the notebook have a cell type. By default, new cells are " +"created as 'Code' cells" +msgstr "" +"Alle cellen in het notebook hebben een celtype. Standaard worden nieuwe " +"cellen gemaakt als 'Code'-cellen" + +#: notebook/templates/notebook.html:206 +msgid "Cell Type" +msgstr "Celtype" + +#: notebook/templates/notebook.html:209 +msgid "" +"Contents will be sent to the kernel for execution, and output will display " +"in the footer of cell" +msgstr "" +"Inhoud wordt verzonden naar de kernel voor uitvoering, en de uitvoer wordt " +"weergegeven in de voettekst van de cel" + +#: notebook/templates/notebook.html:212 +msgid "Contents will be rendered as HTML and serve as explanatory text" +msgstr "Inhoud wordt weergegeven als HTML en dient als verklarende tekst" + +#: notebook/templates/notebook.html:213 notebook/templates/notebook.html:298 +msgid "Markdown" +msgstr "Markdown" + +#: notebook/templates/notebook.html:215 +msgid "Contents will pass through nbconvert unmodified" +msgstr "De inhoud zal niet worden gewijzigd door nbconvert" + +#: notebook/templates/notebook.html:216 +msgid "Raw NBConvert" +msgstr "Raw NBConvert" + +#: notebook/templates/notebook.html:220 +msgid "Current Outputs" +msgstr "Huidige uitvoer" + +#: notebook/templates/notebook.html:223 +msgid "Hide/Show the output of the current cell" +msgstr "De uitvoer van de huidige cel verbergen/weergeven" + +#: notebook/templates/notebook.html:224 notebook/templates/notebook.html:240 +msgid "Toggle" +msgstr "In- en uitschakelen" + +#: notebook/templates/notebook.html:227 +msgid "Scroll the output of the current cell" +msgstr "De uitvoer van de huidige cel scrollen" + +#: notebook/templates/notebook.html:228 notebook/templates/notebook.html:244 +msgid "Toggle Scrolling" +msgstr "Scrollen in- en uitschakelen" + +#: notebook/templates/notebook.html:231 +msgid "Clear the output of the current cell" +msgstr "De uitvoer van de huidige cel wissen" + +#: notebook/templates/notebook.html:232 notebook/templates/notebook.html:248 +msgid "Clear" +msgstr "Wissen" + +#: notebook/templates/notebook.html:236 +msgid "All Output" +msgstr "Alle uitvoer" + +#: notebook/templates/notebook.html:239 +msgid "Hide/Show the output of all cells" +msgstr "De uitvoer van alle cellen verbergen/weergeven" + +#: notebook/templates/notebook.html:243 +msgid "Scroll the output of all cells" +msgstr "Door de uitvoer van alle cellen scrollen" + +#: notebook/templates/notebook.html:247 +msgid "Clear the output of all cells" +msgstr "De uitvoer van alle cellen wissen" + +#: notebook/templates/notebook.html:257 +msgid "Send Keyboard Interrupt (CTRL-C) to the Kernel" +msgstr "Toetsenbordinterruptie (Ctrl-C) naar de kernel verzenden" + +#: notebook/templates/notebook.html:258 +msgid "Interrupt" +msgstr "Onderbreken" + +#: notebook/templates/notebook.html:261 +msgid "Restart the Kernel" +msgstr "De kernel opnieuw starten" + +#: notebook/templates/notebook.html:262 +msgid "Restart" +msgstr "Opnieuw starten" + +#: notebook/templates/notebook.html:265 +msgid "Restart the Kernel and clear all output" +msgstr "Start de kernel opnieuw en schakel alle uitvoer uit" + +#: notebook/templates/notebook.html:266 +msgid "Restart & Clear Output" +msgstr "Uitvoer opnieuw starten en wissen" + +#: notebook/templates/notebook.html:269 +msgid "Restart the Kernel and re-run the notebook" +msgstr "Start de kernel opnieuw en voer notebook opnieuw uit" + +#: notebook/templates/notebook.html:270 +msgid "Restart & Run All" +msgstr "Alles opnieuw starten en uitvoeren" + +#: notebook/templates/notebook.html:273 +msgid "Reconnect to the Kernel" +msgstr "Opnieuw verbinding maken met de kernel" + +#: notebook/templates/notebook.html:274 +msgid "Reconnect" +msgstr "Sluit" + +#: notebook/templates/notebook.html:282 +msgid "Change kernel" +msgstr "Kernel wijzigen" + +#: notebook/templates/notebook.html:287 +msgid "Help" +msgstr "Help" + +#: notebook/templates/notebook.html:290 +msgid "A quick tour of the notebook user interface" +msgstr "Een snelle rondleiding door de gebruikersinterface van de notebook" + +#: notebook/templates/notebook.html:290 +msgid "User Interface Tour" +msgstr "Gebruikersinterfacetour" + +#: notebook/templates/notebook.html:291 +msgid "Opens a tooltip with all keyboard shortcuts" +msgstr "Hiermee opent u een tooltop met alle sneltoetsen" + +#: notebook/templates/notebook.html:291 +msgid "Keyboard Shortcuts" +msgstr "Sneltoetsen" + +#: notebook/templates/notebook.html:292 +msgid "Opens a dialog allowing you to edit Keyboard shortcuts" +msgstr "Hiermee opent u een dialoogvenster waarmee u sneltoetsen bewerken" + +#: notebook/templates/notebook.html:292 +msgid "Edit Keyboard Shortcuts" +msgstr "Sneltoetsen bewerken" + +#: notebook/templates/notebook.html:297 +msgid "Notebook Help" +msgstr "Help voor notebooks" + +#: notebook/templates/notebook.html:303 +msgid "Opens in a new window" +msgstr "Opent in een nieuw venster" + +#: notebook/templates/notebook.html:319 +msgid "About Jupyter Notebook" +msgstr "Over Jupyter Notebook" + +#: notebook/templates/notebook.html:319 +msgid "About" +msgstr "Over" + +#: notebook/templates/page.html:114 +msgid "Jupyter Notebook requires JavaScript." +msgstr "Jupyter Notebook vereist JavaScript." + +#: notebook/templates/page.html:115 +msgid "Please enable it to proceed. " +msgstr "Schakel het in om door te gaan. " + +#: notebook/templates/page.html:121 +msgid "dashboard" +msgstr "Dashboard" + +#: notebook/templates/page.html:132 +msgid "Logout" +msgstr "Logout" + +#: notebook/templates/page.html:134 +msgid "Login" +msgstr "Login" + +#: notebook/templates/tree.html:23 +msgid "Files" +msgstr "Bestanden" + +#: notebook/templates/tree.html:24 +msgid "Running" +msgstr "Actieve processen" + +#: notebook/templates/tree.html:25 +msgid "Clusters" +msgstr "Clusters" + +#: notebook/templates/tree.html:32 +msgid "Select items to perform actions on them." +msgstr "Selecteer items om acties op uit te voeren." + +#: notebook/templates/tree.html:35 +msgid "Duplicate selected" +msgstr "Duplicaat geselecteerd" + +#: notebook/templates/tree.html:35 +msgid "Duplicate" +msgstr "Dupliceer" + +#: notebook/templates/tree.html:36 +msgid "Rename selected" +msgstr "Naam wijzigen van geselecteerde" + +#: notebook/templates/tree.html:37 +msgid "Move selected" +msgstr "Verplaats geselecteerde" + +#: notebook/templates/tree.html:37 +msgid "Move" +msgstr "Verplaatsen" + +#: notebook/templates/tree.html:38 +msgid "Download selected" +msgstr "Download geselecteerde" + +#: notebook/templates/tree.html:39 +msgid "Shutdown selected notebook(s)" +msgstr "Geselecteerde notebook(s) afsluiten" + +#: notebook/templates/notebook.html:278 notebook/templates/tree.html:39 +msgid "Shutdown" +msgstr "Afsluiten" + +#: notebook/templates/tree.html:40 +msgid "View selected" +msgstr "Geef geselecteerde weer" + +#: notebook/templates/tree.html:41 +msgid "Edit selected" +msgstr "Bewerk geselecteerde" + +#: notebook/templates/tree.html:42 +msgid "Delete selected" +msgstr "Verwijder geselecteerde" + +#: notebook/templates/tree.html:50 +msgid "Click to browse for a file to upload." +msgstr "Klik hier om te zoeken naar een bestand dat u wilt uploaden." + +#: notebook/templates/tree.html:51 +msgid "Upload" +msgstr "Uploaden" + +#: notebook/templates/tree.html:65 +msgid "Text File" +msgstr "Tekstbestand" + +#: notebook/templates/tree.html:68 +msgid "Folder" +msgstr "Map" + +#: notebook/templates/tree.html:72 +msgid "Terminal" +msgstr "Terminal" + +#: notebook/templates/tree.html:76 +msgid "Terminals Unavailable" +msgstr "Terminals Niet Beschikbaar" + +#: notebook/templates/tree.html:82 +msgid "Refresh notebook list" +msgstr "Notebook-lijst vernieuwen" + +#: notebook/templates/tree.html:90 +msgid "Select All / None" +msgstr "Selecteer Alles / Geen" + +#: notebook/templates/tree.html:93 +msgid "Select..." +msgstr "Selecteer..." + +#: notebook/templates/tree.html:98 +msgid "Select All Folders" +msgstr "Alle Mappen Selecteren" + +#: notebook/templates/tree.html:98 +msgid "Folders" +msgstr "Mappen" + +#: notebook/templates/tree.html:99 +msgid "Select All Notebooks" +msgstr "Alle Notebooks Selecteren" + +#: notebook/templates/tree.html:99 +msgid "All Notebooks" +msgstr "Alle notebooks" + +#: notebook/templates/tree.html:100 +msgid "Select Running Notebooks" +msgstr "Actieve Notebooks Selecteren" + +#: notebook/templates/tree.html:100 +msgid "Running" +msgstr "Actieve Processen" + +#: notebook/templates/tree.html:101 +msgid "Select All Files" +msgstr "Alle Bestanden Selecteren" + +#: notebook/templates/tree.html:101 +msgid "Files" +msgstr "Bestanden" + +#: notebook/templates/tree.html:114 +msgid "Last Modified" +msgstr "Laatst gewijzigd" + +#: notebook/templates/tree.html:120 +msgid "Name" +msgstr "Naam" + +#: notebook/templates/tree.html:130 +msgid "Currently running Jupyter processes" +msgstr "Momenteel actieve Jupyter processen" + +#: notebook/templates/tree.html:134 +msgid "Refresh running list" +msgstr "Actieve processen lijst vernieuwen" + +#: notebook/templates/tree.html:150 +msgid "There are no terminals running." +msgstr "Er zijn geen terminals actief." + +#: notebook/templates/tree.html:152 +msgid "Terminals are unavailable." +msgstr "Terminals zijn niet beschikbaar." + +#: notebook/templates/tree.html:162 +msgid "Notebooks" +msgstr "Notebooks" + +#: notebook/templates/tree.html:169 +msgid "There are no notebooks running." +msgstr "Er worden geen notebooks uitgevoerd." + +#: notebook/templates/tree.html:178 +msgid "Clusters tab is now provided by IPython parallel." +msgstr "Clusters tabblad wordt nu geleverd door IPython parallel." + +#: notebook/templates/tree.html:179 +msgid "" +"See 'IPython " +"parallel' for installation details." +msgstr "" +"Zie 'IPython " +"parallel' voor installatiegegevens." diff --git a/nbclassic/i18n/nl/LC_MESSAGES/notebook.po b/nbclassic/i18n/nl/LC_MESSAGES/notebook.po new file mode 100644 index 000000000..daa6ce7d5 --- /dev/null +++ b/nbclassic/i18n/nl/LC_MESSAGES/notebook.po @@ -0,0 +1,607 @@ +# Translations template for Jupyter. +# Copyright (C) 2017 ORGANIZATION +# This file is distributed under the same license as the Jupyter project. +# FIRST AUTHOR , 2017. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Jupyter VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2017-07-08 21:52-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" + +#: notebook/notebookapp.py:53 +msgid "The Jupyter Notebook requires tornado >= 4.0" +msgstr "De Jupyter Notebook vereist tornado >= 4.0" + +#: notebook/notebookapp.py:57 +msgid "The Jupyter Notebook requires tornado >= 4.0, but you have < 1.1.0" +msgstr "De Jupyter Notebook vereist tornado >= 4.0, maar je hebt < 1.1.0" + +#: notebook/notebookapp.py:59 +#, python-format +msgid "The Jupyter Notebook requires tornado >= 4.0, but you have %s" +msgstr "De Jupyter Notebook vereist tornado >= 4.0, maar je hebt %s" + +#: notebook/notebookapp.py:209 +msgid "The `ignore_minified_js` flag is deprecated and no longer works." +msgstr "De vlag 'ignore_minified_js' is afgeschaft en werkt niet meer." + +#: notebook/notebookapp.py:210 +#, python-format +msgid "" +"Alternatively use `%s` when working on the notebook's Javascript and LESS" +msgstr "" +"U ook '%s' gebruiken bij het werken aan de Javascript van de notebook en " +"LESS" + +#: notebook/notebookapp.py:211 +msgid "" +"The `ignore_minified_js` flag is deprecated and will be removed in Notebook " +"6.0" +msgstr "" +"De vlag 'ignore_minified_js' wordt afgeschaft en wordt verwijderd in " +"Notebook 6.0" + +#: notebook/notebookapp.py:389 +msgid "List currently running notebook servers." +msgstr "Lijst met momenteel draaiende notebookservers." + +#: notebook/notebookapp.py:393 +msgid "Produce machine-readable JSON output." +msgstr "Productie computer-leesbare JSON-uitvoer." + +#: notebook/notebookapp.py:397 +msgid "" +"If True, each line of output will be a JSON object with the details from the" +" server info file." +msgstr "" +"Als dit True is, zal elke uitvoerregel een JSON-object worden met de details uit het " +"serverinfobestand." + +#: notebook/notebookapp.py:402 +msgid "Currently running servers:" +msgstr "Momenteel draaiende servers:" + +#: notebook/notebookapp.py:419 +msgid "Don't open the notebook in a browser after startup." +msgstr "Open het notebook niet in een browser na het opstarten." + +#: notebook/notebookapp.py:423 +msgid "" +"DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib." +msgstr "" +"UITGESCHAKELD: gebruik %pylab of %matplotlib in het notebook om " +"matplotlib in te schakelen." + +#: notebook/notebookapp.py:439 +msgid "Allow the notebook to be run from root user." +msgstr "Sta toe dat het notebook vanaf de root user kan worden uitgevoerd." + +#: notebook/notebookapp.py:470 +msgid "" +"The Jupyter HTML Notebook.\n" +" \n" +" This launches a Tornado based HTML Notebook Server that serves up an HTML5/Javascript Notebook client." +msgstr "" +"De Jupyter HTML Notebook.\n" +" \n" +"Hiermee wordt een op Tornado gebaseerde HTML-notebookserver gelanceerd die een HTML5/Javascript-laptopclient bedient." + +#: notebook/notebookapp.py:509 +msgid "" +"Deprecated: Use minified JS file or not, mainly use during dev to avoid JS " +"recompilation" +msgstr "" +"Afgeschaft: Gebruik minified JS-bestand of niet, voornamelijk gebruiken " +"tijdens dev om JS recompilatie te voorkomen" + +#: notebook/notebookapp.py:540 +msgid "Set the Access-Control-Allow-Credentials: true header" +msgstr "De access-control-allow-credentials instellen: true header" + +#: notebook/notebookapp.py:544 +msgid "Whether to allow the user to run the notebook as root." +msgstr "Of de gebruiker het notebook als root mag activeren." + +#: notebook/notebookapp.py:548 +msgid "The default URL to redirect to from `/`" +msgstr "De standaard-URL om naar '/' te leiden" + +#: notebook/notebookapp.py:552 +msgid "The IP address the notebook server will listen on." +msgstr "Het IP-adres waar de notebookserver op geactiveerd wordt." + +#: notebook/notebookapp.py:565 +#, python-format +msgid "" +"Cannot bind to localhost, using 127.0.0.1 as default ip\n" +"%s" +msgstr "" +"Kan niet binden aan localhost, met 127.0.0.1 als standaardip\n" +"%s" + +#: notebook/notebookapp.py:579 +msgid "The port the notebook server will listen on." +msgstr "De port waarop de notebookserver geactiveerd wordt." + +#: notebook/notebookapp.py:583 +msgid "" +"The number of additional ports to try if the specified port is not " +"available." +msgstr "" +"Het aantal extra ports dat moet worden geprobeerd als de opgegeven port " +"niet beschikbaar is." + +#: notebook/notebookapp.py:587 +msgid "The full path to an SSL/TLS certificate file." +msgstr "Het volledige pad naar een SSL/TLS-certificaatbestand." + +#: notebook/notebookapp.py:591 +msgid "The full path to a private key file for usage with SSL/TLS." +msgstr "" +"Het volledige pad naar een privésleutelbestand voor gebruik met SSL/TLS." + +#: notebook/notebookapp.py:595 +msgid "" +"The full path to a certificate authority certificate for SSL/TLS client " +"authentication." +msgstr "" +"Het volledige pad naar een certificaat van certificaatautoriteit voor " +"SSL/TLS-clientverificatie." + +#: notebook/notebookapp.py:599 +msgid "The file where the cookie secret is stored." +msgstr "Het bestand waarin het cookiegeheim wordt opgeslagen." + +#: notebook/notebookapp.py:628 +#, python-format +msgid "Writing notebook server cookie secret to %s" +msgstr "Cookiegeheim voor notebookserver schrijven naar %s" + +#: notebook/notebookapp.py:635 +#, python-format +msgid "Could not set permissions on %s" +msgstr "Kan geen machtigingen instellen op %s" + +#: notebook/notebookapp.py:640 +msgid "" +"Token used for authenticating first-time connections to the server.\n" +"\n" +" When no password is enabled,\n" +" the default is to generate a new, random token.\n" +"\n" +" Setting to an empty string disables authentication altogether, which is NOT RECOMMENDED.\n" +" " +msgstr "" +"Token wordt gebruikt voor het verifiëren van eerste verbindingen met de server.\n" +"\n" +"Wanneer er geen wachtwoord is ingeschakeld,\n" +" de standaardinstelling is het genereren van een nieuwe, willekeurige token.\n" +"\n" +"Als u een lege tekenreeks instelt, wordt de verificatie helemaal uitgeschakeld, wat niet wordt aanbevolen.\n" +" " + +#: notebook/notebookapp.py:650 +msgid "" +"One-time token used for opening a browser.\n" +" Once used, this token cannot be used again.\n" +" " +msgstr "" +"Eenmalige token die wordt gebruikt voor het openen van een browser.\n" +" Eenmaal gebruikt, kan dit token niet opnieuw worden gebruikt.\n" +" " + +#: notebook/notebookapp.py:726 +msgid "" +"Specify Where to open the notebook on startup. This is the\n" +" `new` argument passed to the standard library method `webbrowser.open`.\n" +" The behaviour is not guaranteed, but depends on browser support. Valid\n" +" values are:\n" +" 2 opens a new tab,\n" +" 1 opens a new window,\n" +" 0 opens in an existing window.\n" +" See the `webbrowser.open` documentation for details.\n" +" " +msgstr "" +"Geef op waar u het notebook moet openen bij het opstarten. Dit is de\n" +" 'nieuw' argument doorgegeven aan de standaard bibliotheek methode 'webbrowser.open'.\n" +" Het gedrag is niet gegarandeerd, maar is afhankelijk van browserondersteuning. Geldig\n" +" waarden zijn:\n" +" 2 opent een nieuw tabblad,\n" +" 1 opent een nieuw venster,\n" +" 0 wordt geopend in een bestaand venster.\n" +" Zie de documentatie 'webbrowser.open' voor meer informatie.\n" +" " + +#: notebook/notebookapp.py:737 +msgid "DEPRECATED, use tornado_settings" +msgstr "DEPRECATED, gebruik tornado_settings" + +#: notebook/notebookapp.py:742 +msgid "" +"\n" +" webapp_settings is deprecated, use tornado_settings.\n" +msgstr "" +"\n" +"webapp_settings is deprecated, gebruik tornado_settings.\n" + +#: notebook/notebookapp.py:746 +msgid "" +"Supply overrides for the tornado.web.Application that the Jupyter notebook " +"uses." +msgstr "" +"Geef extra instellingen voor de tornado.web.Application die gebruikt wordt door de " +" Jupyter notebook." + +#: notebook/notebookapp.py:750 +msgid "" +"\n" +" Set the tornado compression options for websocket connections.\n" +"\n" +" This value will be returned from :meth:`WebSocketHandler.get_compression_options`.\n" +" None (default) will disable compression.\n" +" A dict (even an empty one) will enable compression.\n" +"\n" +" See the tornado docs for WebSocketHandler.get_compression_options for details.\n" +" " +msgstr "" +"\n" +"Stel de tornadocompressieopties in voor websocketverbindingen.\n" +"\n" +"Deze waarde wordt geretourneerd van :meth:'WebSocketHandler.get_compression_options'.\n" +" Geen (standaard) schakelt compressie uit.\n" +" Een dict (zelfs een lege) zal compressie mogelijk maken.\n" +"\n" +"Zie de tornadodocumenten voor WebSocketHandler.get_compression_options voor meer informatie.\n" +" " + +#: notebook/notebookapp.py:761 +msgid "Supply overrides for terminado. Currently only supports \"shell_command\"." +msgstr "" +"Supply overrides voor terminado. Ondersteunt momenteel alleen een " +"\"shell_command\"." + +#: notebook/notebookapp.py:764 +msgid "" +"Extra keyword arguments to pass to `set_secure_cookie`. See tornado's " +"set_secure_cookie docs for details." +msgstr "" +"Extra trefwoordargumenten om door te geven aan 'set_secure_cookie'. Zie " +"tornado's set_secure_cookie documenten voor meer informatie." + +#: notebook/notebookapp.py:768 +msgid "" +"Supply SSL options for the tornado HTTPServer.\n" +" See the tornado docs for details." +msgstr "" +"SSL-opties leveren voor de tornado HTTPServer.\n" +" Zie de tornado docs voor meer informatie." + +#: notebook/notebookapp.py:772 +msgid "Supply extra arguments that will be passed to Jinja environment." +msgstr "" +"Vul extra argumenten aan die zullen worden doorgegeven aan de Jinja environment." + +#: notebook/notebookapp.py:776 +msgid "Extra variables to supply to jinja templates when rendering." +msgstr "Extra variabelen om aan te vullen aan de jinja-sjablonen bij het renderen." + +#: notebook/notebookapp.py:812 +msgid "DEPRECATED use base_url" +msgstr "DEPRECATED gebruik base_url" + +#: notebook/notebookapp.py:816 +msgid "base_project_url is deprecated, use base_url" +msgstr "base_project_url is deprecated, gebruik base_url" + +#: notebook/notebookapp.py:832 +msgid "Path to search for custom.js, css" +msgstr "Pad om te zoeken naar custom.js, css" + +#: notebook/notebookapp.py:844 +msgid "" +"Extra paths to search for serving jinja templates.\n" +"\n" +" Can be used to override templates from notebook.templates." +msgstr "" +"Extra paden om te zoeken voor het activeren van jinja-sjablonen.\n" +"\n" +"Kan worden gebruikt om sjablonen van notebook.templates te overschrijven." + +#: notebook/notebookapp.py:855 +msgid "extra paths to look for Javascript notebook extensions" +msgstr "extra paden om te zoeken naar Javascript-notebookextensies" + +#: notebook/notebookapp.py:900 +#, python-format +msgid "Using MathJax: %s" +msgstr "MathJax gebruiken: %s" + +#: notebook/notebookapp.py:903 +msgid "The MathJax.js configuration file that is to be used." +msgstr "Het configuratiebestand MathJax.js dat moet worden gebruikt." + +#: notebook/notebookapp.py:908 +#, python-format +msgid "Using MathJax configuration file: %s" +msgstr "MathJax-configuratiebestand gebruiken: %s" + +#: notebook/notebookapp.py:914 +msgid "The notebook manager class to use." +msgstr "De notebook manager klasse te gebruiken." + +#: notebook/notebookapp.py:920 +msgid "The kernel manager class to use." +msgstr "De kernel manager klasse om te gebruiken." + +#: notebook/notebookapp.py:926 +msgid "The session manager class to use." +msgstr "De sessie manager klasse die u gebruiken." + +#: notebook/notebookapp.py:932 +msgid "The config manager class to use" +msgstr "De config manager klasse te gebruiken" + +#: notebook/notebookapp.py:953 +msgid "The login handler class to use." +msgstr "De login handler klasse te gebruiken." + +#: notebook/notebookapp.py:960 +msgid "The logout handler class to use." +msgstr "De afmeld handler klasse die u wilt gebruiken." + +#: notebook/notebookapp.py:964 +msgid "" +"Whether to trust or not X-Scheme/X-Forwarded-Proto and X-Real-" +"Ip/X-Forwarded-For headerssent by the upstream reverse proxy. Necessary if " +"the proxy handles SSL" +msgstr "" +"X-Scheme/X-Forwarded-Proto en X-Real-Ip/X-Forwarded-For headerssent door de " +"upstream reverse proxy al dan niet vertrouwen. Noodzakelijk als de proxy SSL" +" verwerkt" + +#: notebook/notebookapp.py:976 +msgid "" +"\n" +" DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib.\n" +" " +msgstr "" +"\n" +"UITGESCHAKELD: gebruik %pylab of %matplotlib in het notebook om matplotlib in te schakelen.\n" +" " + +#: notebook/notebookapp.py:988 +msgid "Support for specifying --pylab on the command line has been removed." +msgstr "" +"Ondersteuning voor het opgeven van --pylab op de opdrachtregel is " +"verwijderd." + +#: notebook/notebookapp.py:990 +msgid "Please use `%pylab{0}` or `%matplotlib{0}` in the notebook itself." +msgstr "Gebruik '%pylab{0}' of '%matplotlib{0}' in het notebook zelf." + +#: notebook/notebookapp.py:995 +msgid "The directory to use for notebooks and kernels." +msgstr "De map die u wilt gebruiken voor notebooks en kernels." + +#: notebook/notebookapp.py:1018 +#, python-format +msgid "No such notebook dir: '%r'" +msgstr "Geen dergelijke notebook dir: '%r'" + +#: notebook/notebookapp.py:1031 +msgid "DEPRECATED use the nbserver_extensions dict instead" +msgstr "DEPRECATED gebruikt in plaats daarvan de nbserver_extensions dict" + +#: notebook/notebookapp.py:1036 +msgid "server_extensions is deprecated, use nbserver_extensions" +msgstr "server_extensions is afgeschaft, gebruik nbserver_extensions" + +#: notebook/notebookapp.py:1040 +msgid "" +"Dict of Python modules to load as notebook server extensions.Entry values " +"can be used to enable and disable the loading ofthe extensions. The " +"extensions will be loaded in alphabetical order." +msgstr "" +"Dict van Python-modules te laden als notebook server extensies. " +"Invoerwaarden kunnen worden gebruikt om het laden van de extensies in en uit" +" te schakelen. De extensies worden in alfabetische volgorde geladen." + +#: notebook/notebookapp.py:1049 +msgid "Reraise exceptions encountered loading server extensions?" +msgstr "Exceptions opnieuw weergeven die geraised waren tijdens het laden van" +" de server-extensies?" + +#: notebook/notebookapp.py:1052 +msgid "" +"(msgs/sec)\n" +" Maximum rate at which messages can be sent on iopub before they are\n" +" limited." +msgstr "" +"(msgs/sec)\n" +" Maximale ratio waarmee berichten op iopub kunnen worden verzonden voordat ze\n" +" worden beperkt." + +#: notebook/notebookapp.py:1056 +msgid "" +"(bytes/sec)\n" +" Maximum rate at which stream output can be sent on iopub before they are\n" +" limited." +msgstr "" +"(bytes/sec)\n" +" Maximale ratio waarmee streamoutput op iopub kan worden verzonden voordat ze\n" +" worden beperkt." + +#: notebook/notebookapp.py:1060 +msgid "" +"(sec) Time window used to \n" +" check the message and data rate limits." +msgstr "" +"(sec) Tijdvenster gebruikt om \n" +" de limieten voor het verzenden van berichten en de gegevenssnelheiden te" +" controleren." + +#: notebook/notebookapp.py:1071 +#, python-format +msgid "No such file or directory: %s" +msgstr "Geen dergelijk bestand of map: %s" + +#: notebook/notebookapp.py:1141 +msgid "Notebook servers are configured to only be run with a password." +msgstr "" +"Notebookservers zijn geconfigureerd om alleen met een wachtwoord te worden " +"uitgevoerd." + +#: notebook/notebookapp.py:1142 +msgid "Hint: run the following command to set a password" +msgstr "Tip: voer de volgende opdracht uit om een wachtwoord in te stellen" + +#: notebook/notebookapp.py:1143 +msgid "\t$ python -m notebook.auth password" +msgstr "\t$ python -m notebook.auth wachtwoord" + +#: notebook/notebookapp.py:1181 +#, python-format +msgid "The port %i is already in use, trying another port." +msgstr "De port %i is al in gebruik, proberen een andere port." + +#: notebook/notebookapp.py:1184 +#, python-format +msgid "Permission to listen on port %i denied" +msgstr "Toestemming om te luisteren op port %i geweigerd" + +#: notebook/notebookapp.py:1193 +msgid "" +"ERROR: the notebook server could not be started because no available port " +"could be found." +msgstr "" +"FOUT: de notebookserver kan niet worden gestart omdat er geen beschikbare " +"port kon worden gevonden." + +#: notebook/notebookapp.py:1199 +msgid "[all ip addresses on your system]" +msgstr "[alle IP-adressen op uw systeem]" + +#: notebook/notebookapp.py:1223 +#, python-format +msgid "Terminals not available (error was %s)" +msgstr "Terminals niet beschikbaar (fout was %s)" + +#: notebook/notebookapp.py:1259 +msgid "interrupted" +msgstr "onderbroken" + +#: notebook/notebookapp.py:1261 +msgid "y" +msgstr "y" + +#: notebook/notebookapp.py:1262 +msgid "n" +msgstr "n" + +#: notebook/notebookapp.py:1263 +#, python-format +msgid "Shutdown this notebook server (%s/[%s])? " +msgstr "Deze notebookserver afsluiten (%s/[%s])? " + +#: notebook/notebookapp.py:1269 +msgid "Shutdown confirmed" +msgstr "Afsluiten bevestigd" + +#: notebook/notebookapp.py:1273 +msgid "No answer for 5s:" +msgstr "Geen antwoord voor 5s:" + +#: notebook/notebookapp.py:1274 +msgid "resuming operation..." +msgstr "hervatting van de werking..." + +#: notebook/notebookapp.py:1282 +#, python-format +msgid "received signal %s, stopping" +msgstr "ontvangen signaal %s, stoppen" + +#: notebook/notebookapp.py:1338 +#, python-format +msgid "Error loading server extension %s" +msgstr "Foutladen serverextensie %s" + +#: notebook/notebookapp.py:1369 +#, python-format +msgid "Shutting down %d kernels" +msgstr "%d-kernels afsluiten" + +#: notebook/notebookapp.py:1375 +#, python-format +msgid "%d active kernel" +msgid_plural "%d active kernels" +msgstr[0] "%d actieve kernel" +msgstr[1] "%d actieve kernel" + +#: notebook/notebookapp.py:1379 +#, python-format +msgid "" +"The Jupyter Notebook is running at:\n" +"\r" +"%s" +msgstr "" +"De Jupyter Notebook draait op:\n" +"\r" +"%s" + +#: notebook/notebookapp.py:1426 +msgid "Running as root is not recommended. Use --allow-root to bypass." +msgstr "" +"Hardlopen als root wordt niet aanbevolen. Gebruik --allow-root te " +"omzeilen." + +#: notebook/notebookapp.py:1432 +msgid "" +"Use Control-C to stop this server and shut down all kernels (twice to skip " +"confirmation)." +msgstr "" +"Gebruik Control-C om deze server te stoppen en sluit alle kernels af (twee " +"keer om bevestiging over te slaan)." + +#: notebook/notebookapp.py:1434 +msgid "" +"Welcome to Project Jupyter! Explore the various tools available and their " +"corresponding documentation. If you are interested in contributing to the " +"platform, please visit the communityresources section at " +"http://jupyter.org/community.html." +msgstr "" +"Welkom bij Project Jupyter! Bekijk de verschillende tools die beschikbaar " +"zijn en de bijbehorende documentatie. Als je geïnteresseerd bent om bij te " +"dragen aan het platform, ga dan naar de communityresources sectie op " +"http://jupyter.org/community.html." + +#: notebook/notebookapp.py:1445 +#, python-format +msgid "No web browser found: %s." +msgstr "Geen webbrowser gevonden: %s." + +#: notebook/notebookapp.py:1450 +#, python-format +msgid "%s does not exist" +msgstr "%s bestaat niet" + +#: notebook/notebookapp.py:1484 +msgid "Interrupted..." +msgstr "Onderbroken..." + +#: notebook/services/contents/filemanager.py:506 +#, python-format +msgid "Serving notebooks from local directory: %s" +msgstr "Notebooks uit lokale map activeren: %s" + +#: notebook/services/contents/manager.py:68 +msgid "Untitled" +msgstr "Naamloos" diff --git a/nbclassic/i18n/ru_RU/LC_MESSAGES/nbjs.po b/nbclassic/i18n/ru_RU/LC_MESSAGES/nbjs.po new file mode 100644 index 000000000..644d2e18b --- /dev/null +++ b/nbclassic/i18n/ru_RU/LC_MESSAGES/nbjs.po @@ -0,0 +1,2112 @@ +# Translations template for Jupyter. +# Copyright (C) 2017 ORGANIZATION +# This file is distributed under the same license as the Jupyter project. +# FIRST AUTHOR , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: Jupyter VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2017-06-27 14:04-0500\n" +"PO-Revision-Date: 2020-07-09 13:08+0500\n" +"Language-Team: TranslAster \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" +"X-Generator: Poedit 2.3.1\n" +"Last-Translator: Dmitriy Q \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Language: ru_RU\n" + +#: notebook/static/base/js/dialog.js:161 +msgid "Manually edit the JSON below to manipulate the metadata for this cell." +msgstr "" +"Отредактируйте JSON ниже вручную для управления метаданными для этой ячейки." + +#: notebook/static/base/js/dialog.js:163 +msgid "" +"Manually edit the JSON below to manipulate the metadata for this notebook." +msgstr "" +"Отредактируйте JSON ниже вручную для управления метаданными для этого " +"блокнота." + +#: notebook/static/base/js/dialog.js:165 +msgid "" +" We recommend putting custom metadata attributes in an appropriately named " +"substructure, so they don't conflict with those of others." +msgstr "" +" Мы рекомендуем поместить пользовательские атрибуты метаданных в " +"подструктуру с соответствующим именем, чтобы они не конфликтовали с " +"атрибутами других объектов." + +#: notebook/static/base/js/dialog.js:180 +msgid "Edit the metadata" +msgstr "Редактировать метаданные" + +#: notebook/static/base/js/dialog.js:202 +msgid "Edit Notebook Metadata" +msgstr "Редактировать метаданные блокнота" + +#: notebook/static/base/js/dialog.js:204 +msgid "Edit Cell Metadata" +msgstr "Редактировать метаданные ячейки" + +#: notebook/static/base/js/dialog.js:208 +#: notebook/static/notebook/js/notebook.js:475 +#: notebook/static/notebook/js/savewidget.js:71 +#: notebook/static/tree/js/notebooklist.js:859 +#: notebook/static/tree/js/notebooklist.js:1418 +msgid "Cancel" +msgstr "Отмена" + +#: notebook/static/base/js/dialog.js:208 +msgid "Edit" +msgstr "Редактировать" + +#: notebook/static/base/js/dialog.js:208 +#: notebook/static/notebook/js/kernelselector.js:278 +#: notebook/static/notebook/js/mathjaxutils.js:42 +#: notebook/static/notebook/js/notebook.js:469 +#: notebook/static/notebook/js/notificationarea.js:187 +#: notebook/static/notebook/js/savewidget.js:71 +#: notebook/static/tree/js/newnotebook.js:97 +#: notebook/static/tree/js/notebooklist.js:859 +msgid "OK" +msgstr "ОК" + +#: notebook/static/base/js/dialog.js:208 +msgid "Apply" +msgstr "Применить" + +#: notebook/static/base/js/dialog.js:225 +msgid "WARNING: Could not save invalid JSON." +msgstr "ПРЕДУПРЕЖДЕНИЕ: не удалось сохранить недопустимый JSON." + +#: notebook/static/base/js/dialog.js:247 +msgid "There are no attachments for this cell." +msgstr "Для этой ячейки нет никаких вложений." + +#: notebook/static/base/js/dialog.js:250 +msgid "Current cell attachments" +msgstr "Вложения текущей ячейки" + +#: notebook/static/base/js/dialog.js:259 +#: notebook/static/notebook/js/celltoolbarpresets/attachments.js:46 +msgid "Attachments" +msgstr "Вложения" + +#: notebook/static/base/js/dialog.js:283 +msgid "Restore" +msgstr "Восстановить" + +#: notebook/static/base/js/dialog.js:293 +#: notebook/static/tree/js/notebooklist.js:1018 +msgid "Delete" +msgstr "Удалить" + +#: notebook/static/base/js/dialog.js:342 notebook/static/base/js/dialog.js:386 +msgid "Edit attachments" +msgstr "Редактировать вложения" + +#: notebook/static/base/js/dialog.js:348 +msgid "Edit Notebook Attachments" +msgstr "Редактировать вложения блокнотов" + +#: notebook/static/base/js/dialog.js:350 +msgid "Edit Cell Attachments" +msgstr "Редактировать вложения ячейки" + +#: notebook/static/base/js/dialog.js:373 +msgid "Select a file to insert." +msgstr "Выберите файл для вставки." + +#: notebook/static/base/js/dialog.js:399 +msgid "Select a file" +msgstr "Выберите файл" + +#: notebook/static/notebook/js/about.js:14 +msgid "You are using Jupyter notebook." +msgstr "Вы используете блокнот Jupyter." + +#: notebook/static/notebook/js/about.js:16 +msgid "The version of the notebook server is: " +msgstr "Версия сервера блокнотов: " + +#: notebook/static/notebook/js/about.js:22 +msgid "The server is running on this version of Python:" +msgstr "Сервер работает на этой версии Python:" + +#: notebook/static/notebook/js/about.js:25 +msgid "Waiting for kernel to be available..." +msgstr "Ожидание доступности ядра..." + +#: notebook/static/notebook/js/about.js:27 +msgid "Server Information:" +msgstr "Информация сервера:" + +#: notebook/static/notebook/js/about.js:29 +msgid "Current Kernel Information:" +msgstr "Информация о текущем ядре:" + +#: notebook/static/notebook/js/about.js:32 +msgid "Could not access sys_info variable for version information." +msgstr "" +"Невозможно получить доступ к переменной sys_info для получения информации о " +"версии." + +#: notebook/static/notebook/js/about.js:34 +msgid "Cannot find sys_info!" +msgstr "Невозможно найти sys_info!" + +#: notebook/static/notebook/js/about.js:38 +msgid "About Jupyter Notebook" +msgstr "О блокноте Jupyter" + +#: notebook/static/notebook/js/about.js:47 +msgid "unable to contact kernel" +msgstr "невозможно связаться с ядром" + +#: notebook/static/notebook/js/actions.js:69 +msgid "toggle rtl layout" +msgstr "переключить макет rtl" + +#: notebook/static/notebook/js/actions.js:70 +msgid "" +"Toggle the screen directionality between left-to-right and right-to-left" +msgstr "Переключение направления экрана между слева направо и справа налево" + +#: notebook/static/notebook/js/actions.js:76 +msgid "edit command mode keyboard shortcuts" +msgstr "редактировать сочетания клавиш командного режима" + +#: notebook/static/notebook/js/actions.js:77 +msgid "Open a dialog to edit the command mode keyboard shortcuts" +msgstr "" +"Откройте диалоговое окно для редактирования сочетаний клавиш командного " +"режима" + +#: notebook/static/notebook/js/actions.js:97 +msgid "restart kernel" +msgstr "перезапуск ядра" + +#: notebook/static/notebook/js/actions.js:98 +msgid "restart the kernel (no confirmation dialog)" +msgstr "перезапуск ядра (диалог подтверждения отсутствует)" + +#: notebook/static/notebook/js/actions.js:106 +msgid "confirm restart kernel" +msgstr "подтвердить перезапуск ядра" + +#: notebook/static/notebook/js/actions.js:107 +msgid "restart the kernel (with dialog)" +msgstr "перезапуск ядра (с диалоговым окном)" + +#: notebook/static/notebook/js/actions.js:113 +msgid "restart kernel and run all cells" +msgstr "перезапуск ядра и запуск всех ячеек" + +#: notebook/static/notebook/js/actions.js:114 +msgid "" +"restart the kernel, then re-run the whole notebook (no confirmation dialog)" +msgstr "" +"перезапустить ядро, а затем перезапустить весь блокнот (диалог подтверждения " +"отсутствует)" + +#: notebook/static/notebook/js/actions.js:120 +msgid "confirm restart kernel and run all cells" +msgstr "подтвердить перезапуск ядра и запуск всех ячеек" + +#: notebook/static/notebook/js/actions.js:121 +msgid "restart the kernel, then re-run the whole notebook (with dialog)" +msgstr "" +"перезапустить ядро, а затем перезапустить весь блокнот (с диалогом " +"подтверждения)" + +#: notebook/static/notebook/js/actions.js:127 +msgid "restart kernel and clear output" +msgstr "перезапуск ядра и очистка вывода" + +#: notebook/static/notebook/js/actions.js:128 +msgid "restart the kernel and clear all output (no confirmation dialog)" +msgstr "" +"перезапустить ядро и очистить все выходные данные (диалог подтверждения " +"отсутствует)" + +#: notebook/static/notebook/js/actions.js:134 +msgid "confirm restart kernel and clear output" +msgstr "подтвердить перезапуск ядра и очистку вывода" + +#: notebook/static/notebook/js/actions.js:135 +msgid "restart the kernel and clear all output (with dialog)" +msgstr "" +"перезапустить ядро и очистить все выходные данные (с диалогом подтверждения)" + +#: notebook/static/notebook/js/actions.js:142 +#: notebook/static/notebook/js/actions.js:143 +msgid "interrupt the kernel" +msgstr "прервать работу ядра" + +#: notebook/static/notebook/js/actions.js:150 +msgid "run cell and select next" +msgstr "запустить ячейку и выбрать следующую" + +#: notebook/static/notebook/js/actions.js:152 +msgid "run cell, select below" +msgstr "запустить ячейку, выбрать ниже" + +#: notebook/static/notebook/js/actions.js:159 +#: notebook/static/notebook/js/actions.js:160 +msgid "run selected cells" +msgstr "запустить выбранные ячейки" + +#: notebook/static/notebook/js/actions.js:167 +#: notebook/static/notebook/js/actions.js:168 +msgid "run cell and insert below" +msgstr "запустить ячейку и вставить ниже" + +#: notebook/static/notebook/js/actions.js:175 +#: notebook/static/notebook/js/actions.js:176 +msgid "run all cells" +msgstr "запуск всех ячеек" + +#: notebook/static/notebook/js/actions.js:183 +#: notebook/static/notebook/js/actions.js:184 +msgid "run all cells above" +msgstr "запуск всех ячеек выше" + +#: notebook/static/notebook/js/actions.js:190 +#: notebook/static/notebook/js/actions.js:191 +msgid "run all cells below" +msgstr "запуск всех ячеек ниже" + +#: notebook/static/notebook/js/actions.js:197 +#: notebook/static/notebook/js/actions.js:198 +msgid "enter command mode" +msgstr "вход в командный режим" + +#: notebook/static/notebook/js/actions.js:205 +#: notebook/static/notebook/js/actions.js:206 +msgid "insert image" +msgstr "вставить изображение" + +#: notebook/static/notebook/js/actions.js:213 +#: notebook/static/notebook/js/actions.js:214 +msgid "cut cell attachments" +msgstr "вырезать вложения ячейки" + +#: notebook/static/notebook/js/actions.js:221 +#: notebook/static/notebook/js/actions.js:222 +msgid "copy cell attachments" +msgstr "копирование вложений ячейки" + +#: notebook/static/notebook/js/actions.js:229 +#: notebook/static/notebook/js/actions.js:230 +msgid "paste cell attachments" +msgstr "вставить вложения ячейки" + +#: notebook/static/notebook/js/actions.js:237 +#: notebook/static/notebook/js/actions.js:238 +msgid "split cell at cursor" +msgstr "разбить ячейку при наведении курсора" + +#: notebook/static/notebook/js/actions.js:245 +#: notebook/static/notebook/js/actions.js:246 +msgid "enter edit mode" +msgstr "вход в режим редактирования" + +#: notebook/static/notebook/js/actions.js:253 +msgid "select previous cell" +msgstr "выбрать предыдущую ячейку" + +#: notebook/static/notebook/js/actions.js:254 +msgid "select cell above" +msgstr "выбрать ячейку выше" + +#: notebook/static/notebook/js/actions.js:265 +msgid "select next cell" +msgstr "выбрать следующую ячейку" + +#: notebook/static/notebook/js/actions.js:266 +msgid "select cell below" +msgstr "выбрать ячейку ниже" + +#: notebook/static/notebook/js/actions.js:277 +msgid "extend selection above" +msgstr "расширить выбор выше" + +#: notebook/static/notebook/js/actions.js:278 +msgid "extend selected cells above" +msgstr "расширить выделенные ячейки выше" + +#: notebook/static/notebook/js/actions.js:289 +msgid "extend selection below" +msgstr "расширить выбор ниже" + +#: notebook/static/notebook/js/actions.js:290 +msgid "extend selected cells below" +msgstr "расширить выделенные ячейки ниже" + +#: notebook/static/notebook/js/actions.js:301 +#: notebook/static/notebook/js/actions.js:302 +msgid "cut selected cells" +msgstr "вырезать выбранные ячейки" + +#: notebook/static/notebook/js/actions.js:312 +#: notebook/static/notebook/js/actions.js:313 +msgid "copy selected cells" +msgstr "копировать выбранные ячейки" + +#: notebook/static/notebook/js/actions.js:327 +#: notebook/static/notebook/js/actions.js:328 +msgid "paste cells above" +msgstr "вставить ячейки выше" + +#: notebook/static/notebook/js/actions.js:335 +#: notebook/static/notebook/js/actions.js:336 +msgid "paste cells below" +msgstr "вставить ячейки ниже" + +#: notebook/static/notebook/js/actions.js:344 +#: notebook/static/notebook/js/actions.js:345 +msgid "insert cell above" +msgstr "вставить ячейку выше" + +#: notebook/static/notebook/js/actions.js:354 +#: notebook/static/notebook/js/actions.js:355 +msgid "insert cell below" +msgstr "вставить ячейку ниже" + +#: notebook/static/notebook/js/actions.js:365 +#: notebook/static/notebook/js/actions.js:366 +msgid "change cell to code" +msgstr "изменить ячейку на код" + +#: notebook/static/notebook/js/actions.js:373 +#: notebook/static/notebook/js/actions.js:374 +msgid "change cell to markdown" +msgstr "изменить ячейку на markdown" + +#: notebook/static/notebook/js/actions.js:381 +#: notebook/static/notebook/js/actions.js:382 +msgid "change cell to raw" +msgstr "изменить ячейку на raw" + +#: notebook/static/notebook/js/actions.js:389 +#: notebook/static/notebook/js/actions.js:390 +msgid "change cell to heading 1" +msgstr "изменить ячейку на заголовок 1" + +#: notebook/static/notebook/js/actions.js:397 +#: notebook/static/notebook/js/actions.js:398 +msgid "change cell to heading 2" +msgstr "изменить ячейку на заголовок 2" + +#: notebook/static/notebook/js/actions.js:405 +#: notebook/static/notebook/js/actions.js:406 +msgid "change cell to heading 3" +msgstr "изменить ячейку на заголовок 3" + +#: notebook/static/notebook/js/actions.js:413 +#: notebook/static/notebook/js/actions.js:414 +msgid "change cell to heading 4" +msgstr "изменить ячейку на заголовок 4" + +#: notebook/static/notebook/js/actions.js:421 +#: notebook/static/notebook/js/actions.js:422 +msgid "change cell to heading 5" +msgstr "изменить ячейку на заголовок 5" + +#: notebook/static/notebook/js/actions.js:429 +#: notebook/static/notebook/js/actions.js:430 +msgid "change cell to heading 6" +msgstr "изменить ячейку на заголовок 6" + +#: notebook/static/notebook/js/actions.js:437 +msgid "toggle cell output" +msgstr "переключение вывода ячейки" + +#: notebook/static/notebook/js/actions.js:438 +msgid "toggle output of selected cells" +msgstr "переключить вывод выбранных ячеек" + +#: notebook/static/notebook/js/actions.js:445 +msgid "toggle cell scrolling" +msgstr "переключить прокрутку ячейки" + +#: notebook/static/notebook/js/actions.js:446 +msgid "toggle output scrolling of selected cells" +msgstr "переключить прокрутку вывода выбранных ячеек" + +#: notebook/static/notebook/js/actions.js:453 +msgid "clear cell output" +msgstr "очистить вывод ячейки" + +#: notebook/static/notebook/js/actions.js:454 +msgid "clear output of selected cells" +msgstr "очистить вывод выбранных ячеек" + +#: notebook/static/notebook/js/actions.js:460 +msgid "move cells down" +msgstr "переместить ячейки вниз" + +#: notebook/static/notebook/js/actions.js:461 +msgid "move selected cells down" +msgstr "переместить выбранные ячейки вниз" + +#: notebook/static/notebook/js/actions.js:469 +msgid "move cells up" +msgstr "переместить ячейки вверх" + +#: notebook/static/notebook/js/actions.js:470 +msgid "move selected cells up" +msgstr "переместить выбранные ячейки вверх" + +#: notebook/static/notebook/js/actions.js:478 +#: notebook/static/notebook/js/actions.js:479 +msgid "toggle line numbers" +msgstr "переключить номера строк" + +#: notebook/static/notebook/js/actions.js:486 +#: notebook/static/notebook/js/actions.js:487 +msgid "show keyboard shortcuts" +msgstr "показать сочетания клавиш клавиатуры" + +#: notebook/static/notebook/js/actions.js:494 +msgid "delete cells" +msgstr "удалить ячейки" + +#: notebook/static/notebook/js/actions.js:495 +msgid "delete selected cells" +msgstr "удалить выбранные ячейки" + +#: notebook/static/notebook/js/actions.js:502 +#: notebook/static/notebook/js/actions.js:503 +msgid "undo cell deletion" +msgstr "отменить удаление ячейки" + +#: notebook/static/notebook/js/actions.js:512 +msgid "merge cell with previous cell" +msgstr "объединить ячейку с предыдущей ячейкой" + +#: notebook/static/notebook/js/actions.js:513 +msgid "merge cell above" +msgstr "объединить ячейку выше" + +#: notebook/static/notebook/js/actions.js:519 +msgid "merge cell with next cell" +msgstr "объединить ячейку со следующей ячейкой" + +#: notebook/static/notebook/js/actions.js:520 +msgid "merge cell below" +msgstr "объединить ячейку ниже" + +#: notebook/static/notebook/js/actions.js:527 +#: notebook/static/notebook/js/actions.js:528 +msgid "merge selected cells" +msgstr "объединить выбранные ячейки" + +#: notebook/static/notebook/js/actions.js:535 +msgid "merge cells" +msgstr "объединить ячейки" + +#: notebook/static/notebook/js/actions.js:536 +msgid "" +"merge selected cells, or current cell with cell below if only one cell is " +"selected" +msgstr "" +"объединить выбранные ячейки или текущую с ячейкой ниже, если выбрана только " +"одна ячейка" + +#: notebook/static/notebook/js/actions.js:549 +msgid "show command pallette" +msgstr "показать палитру команд" + +#: notebook/static/notebook/js/actions.js:550 +msgid "open the command palette" +msgstr "открыть палитру команд" + +#: notebook/static/notebook/js/actions.js:557 +msgid "toggle all line numbers" +msgstr "переключение всех номеров строк" + +#: notebook/static/notebook/js/actions.js:558 +msgid "toggles line numbers in all cells, and persist the setting" +msgstr "переключает номера строк во всех ячейках и сохраняет настройку" + +#: notebook/static/notebook/js/actions.js:569 +msgid "show all line numbers" +msgstr "показать все номера строк" + +#: notebook/static/notebook/js/actions.js:570 +msgid "show line numbers in all cells, and persist the setting" +msgstr "показать номера строк во всех ячейках и сохранить настройку" + +#: notebook/static/notebook/js/actions.js:579 +msgid "hide all line numbers" +msgstr "скрыть все номера строк" + +#: notebook/static/notebook/js/actions.js:580 +msgid "hide line numbers in all cells, and persist the setting" +msgstr "скрыть номера строк во всех ячейках и сохранить настройки" + +# заголовок переключателя +#: notebook/static/notebook/js/actions.js:589 +msgid "toggle header" +msgstr "переключение заголовка" + +#: notebook/static/notebook/js/actions.js:590 +msgid "switch between showing and hiding the header" +msgstr "переключение между отображением и скрытием заголовка" + +#: notebook/static/notebook/js/actions.js:605 +#: notebook/static/notebook/js/actions.js:606 +msgid "show the header" +msgstr "показать заголовок" + +#: notebook/static/notebook/js/actions.js:615 +#: notebook/static/notebook/js/actions.js:616 +msgid "hide the header" +msgstr "скрыть заголовок" + +#: notebook/static/notebook/js/actions.js:646 +msgid "toggle toolbar" +msgstr "переключить панель инструментов" + +#: notebook/static/notebook/js/actions.js:647 +msgid "switch between showing and hiding the toolbar" +msgstr "переключение между отображением и скрытием панели инструментов" + +#: notebook/static/notebook/js/actions.js:660 +#: notebook/static/notebook/js/actions.js:661 +msgid "show the toolbar" +msgstr "показать панель инструментов" + +#: notebook/static/notebook/js/actions.js:669 +#: notebook/static/notebook/js/actions.js:670 +msgid "hide the toolbar" +msgstr "скрыть всплывающую подсказку" + +#: notebook/static/notebook/js/actions.js:678 +#: notebook/static/notebook/js/actions.js:679 +msgid "close the pager" +msgstr "закрыть пейджер" + +#: notebook/static/notebook/js/actions.js:704 +msgid "ignore" +msgstr "игнорировать" + +#: notebook/static/notebook/js/actions.js:710 +#: notebook/static/notebook/js/actions.js:711 +msgid "move cursor up" +msgstr "переместить курсор вверх" + +#: notebook/static/notebook/js/actions.js:731 +#: notebook/static/notebook/js/actions.js:732 +msgid "move cursor down" +msgstr "переместить курсор вниз" + +#: notebook/static/notebook/js/actions.js:750 +#: notebook/static/notebook/js/actions.js:751 +msgid "scroll notebook down" +msgstr "прокрутить блокнот вниз" + +#: notebook/static/notebook/js/actions.js:760 +#: notebook/static/notebook/js/actions.js:761 +msgid "scroll notebook up" +msgstr "прокрутить блокнот вверх" + +#: notebook/static/notebook/js/actions.js:770 +msgid "scroll cell center" +msgstr "прокрутить ячейку в центр" + +#: notebook/static/notebook/js/actions.js:771 +msgid "Scroll the current cell to the center" +msgstr "Прокрутить текущую ячейку к центру" + +#: notebook/static/notebook/js/actions.js:781 +msgid "scroll cell top" +msgstr "прокрутить ячейку вверх" + +#: notebook/static/notebook/js/actions.js:782 +msgid "Scroll the current cell to the top" +msgstr "Прокрутить текущую ячейку к верху" + +#: notebook/static/notebook/js/actions.js:792 +msgid "duplicate notebook" +msgstr "дублировать блокнот" + +#: notebook/static/notebook/js/actions.js:793 +msgid "Create and open a copy of the current notebook" +msgstr "Создать и открыть копию текущего блокнота" + +#: notebook/static/notebook/js/actions.js:799 +msgid "trust notebook" +msgstr "доверять блокноту" + +#: notebook/static/notebook/js/actions.js:800 +msgid "Trust the current notebook" +msgstr "Доверять текущему блокноту" + +#: notebook/static/notebook/js/actions.js:806 +msgid "rename notebook" +msgstr "переименовать блокнот" + +#: notebook/static/notebook/js/actions.js:807 +msgid "Rename the current notebook" +msgstr "Переименовать текущий блокнот" + +#: notebook/static/notebook/js/actions.js:813 +msgid "toggle all cells output collapsed" +msgstr "переключение сворачивания вывода всех ячеек" + +#: notebook/static/notebook/js/actions.js:814 +msgid "Toggle the hidden state of all output areas" +msgstr "Переключить скрытое состояние всех областей вывода" + +#: notebook/static/notebook/js/actions.js:820 +msgid "toggle all cells output scrolled" +msgstr "переключение прокрутки вывода всех ячеек" + +#: notebook/static/notebook/js/actions.js:821 +msgid "Toggle the scrolling state of all output areas" +msgstr "Переключить состояние прокрутки всех областей вывода" + +#: notebook/static/notebook/js/actions.js:828 +msgid "clear all cells output" +msgstr "очистить вывод всех ячеек" + +#: notebook/static/notebook/js/actions.js:829 +msgid "Clear the content of all the outputs" +msgstr "Очистить содержимое всех выводов" + +#: notebook/static/notebook/js/actions.js:835 +msgid "save notebook" +msgstr "сохранить блокнот" + +#: notebook/static/notebook/js/actions.js:836 +msgid "Save and Checkpoint" +msgstr "Сохранение и контрольная точка" + +#: notebook/static/notebook/js/cell.js:79 +msgid "Warning: accessing Cell.cm_config directly is deprecated." +msgstr "Предупреждение: прямой доступ к Cell.cm_config устарел." + +#: notebook/static/notebook/js/cell.js:763 +#, python-format +msgid "Unrecognized cell type: %s" +msgstr "Нераспознанный тип ячейки: %s" + +#: notebook/static/notebook/js/cell.js:777 +msgid "Unrecognized cell type" +msgstr "Нераспознанный тип ячейки" + +#: notebook/static/notebook/js/celltoolbar.js:296 +#, python-format +msgid "Error in cell toolbar callback %s" +msgstr "Ошибка в обратном вызове панели инструментов ячейки %s" + +#: notebook/static/notebook/js/clipboard.js:53 +#, python-format +msgid "Clipboard types: %s" +msgstr "Типы буфера обмена: %s" + +#: notebook/static/notebook/js/clipboard.js:96 +msgid "Dialog for paste from system clipboard" +msgstr "Диалоговое окно для вставки из системного буфера обмена" + +#: notebook/static/notebook/js/clipboard.js:109 +msgid "Ctrl-V" +msgstr "Ctrl-V" + +#: notebook/static/notebook/js/clipboard.js:111 +msgid "Cmd-V" +msgstr "Cmd-V" + +#: notebook/static/notebook/js/clipboard.js:113 +#, python-format +msgid "Press %s again to paste" +msgstr "Нажмите %s еще раз, чтобы вставить" + +#: notebook/static/notebook/js/clipboard.js:116 +msgid "Why is this needed? " +msgstr "Зачем это нужно? " + +#: notebook/static/notebook/js/clipboard.js:118 +msgid "We can't get paste events in this browser without a text box. " +msgstr "" +"Мы не можем получить прошлые события в этом браузере без текстового поля. " + +#: notebook/static/notebook/js/clipboard.js:119 +msgid "There's an invisible text box focused in this dialog." +msgstr "В этом диалоговом окне есть невидимое текстовое поле." + +#: notebook/static/notebook/js/clipboard.js:125 +#, python-format +msgid "%s to paste" +msgstr "%s для вставки" + +#: notebook/static/notebook/js/codecell.js:310 +msgid "Can't execute cell since kernel is not set." +msgstr "Невозможно выполнить ячейку, так как ядро не установлено." + +#: notebook/static/notebook/js/codecell.js:472 +msgid "In" +msgstr "Ввод" + +#: notebook/static/notebook/js/kernelselector.js:269 +#, python-format +msgid "Could not find a kernel matching %s. Please select a kernel:" +msgstr "Не удалось найти ядро, соответствующее %s. Пожалуйста, выберите ядро:" + +#: notebook/static/notebook/js/kernelselector.js:278 +msgid "Continue Without Kernel" +msgstr "Продолжить без ядра" + +#: notebook/static/notebook/js/kernelselector.js:278 +msgid "Set Kernel" +msgstr "Установить ядро" + +#: notebook/static/notebook/js/kernelselector.js:281 +msgid "Kernel not found" +msgstr "Ядро не найдено" + +#: notebook/static/notebook/js/kernelselector.js:319 +#: notebook/static/tree/js/newnotebook.js:99 +msgid "Creating Notebook Failed" +msgstr "Ошибка создания блокнота" + +#: notebook/static/notebook/js/kernelselector.js:320 +#: notebook/static/tree/js/notebooklist.js:1360 +#, python-format +msgid "The error was: %s" +msgstr "Ошибка в: %s" + +#: notebook/static/notebook/js/maintoolbar.js:54 +msgid "Run" +msgstr "Запуск" + +#: notebook/static/notebook/js/maintoolbar.js:76 +msgid "Code" +msgstr "Код" + +#: notebook/static/notebook/js/maintoolbar.js:77 +msgid "Markdown" +msgstr "Markdown" + +#: notebook/static/notebook/js/maintoolbar.js:78 +msgid "Raw NBConvert" +msgstr "Необработанный NBConvert" + +#: notebook/static/notebook/js/maintoolbar.js:79 +msgid "Heading" +msgstr "Заголовок" + +#: notebook/static/notebook/js/maintoolbar.js:115 +msgid "unrecognized cell type:" +msgstr "нераспознанный тип ячейки:" + +#: notebook/static/notebook/js/mathjaxutils.js:45 +#, python-format +msgid "Failed to retrieve MathJax from '%s'" +msgstr "Не удалось получить MathJax из '%s'" + +#: notebook/static/notebook/js/mathjaxutils.js:47 +msgid "Math/LaTeX rendering will be disabled." +msgstr "Рендеринг Math/LaTeX будет отключен." + +#: notebook/static/notebook/js/menubar.js:220 +msgid "Trusted Notebook" +msgstr "Доверенный блокнот" + +#: notebook/static/notebook/js/menubar.js:226 +msgid "Trust Notebook" +msgstr "Доверять блокноту" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:16 +#: notebook/static/notebook/js/menubar.js:383 +msgid "None" +msgstr "Отсутствует" + +#: notebook/static/notebook/js/menubar.js:406 +msgid "No checkpoints" +msgstr "Контрольные точки отсутствуют" + +#: notebook/static/notebook/js/menubar.js:465 +msgid "Opens in a new window" +msgstr "Откроется в новом окне" + +#: notebook/static/notebook/js/notebook.js:431 +msgid "Autosave in progress, latest changes may be lost." +msgstr "Автосохранение продолжается, последние изменения могут быть потеряны." + +#: notebook/static/notebook/js/notebook.js:433 +msgid "Unsaved changes will be lost." +msgstr "Несохраненные изменения будут потеряны." + +#: notebook/static/notebook/js/notebook.js:438 +msgid "The Kernel is busy, outputs may be lost." +msgstr "Ядро занято, вывод может быть потерян." + +#: notebook/static/notebook/js/notebook.js:461 +msgid "This notebook is version %1$s, but we only fully support up to %2$s." +msgstr "" +"Этот блокнот имеет версию %1$s, но мы полностью поддерживаем только до %2$s." + +#: notebook/static/notebook/js/notebook.js:463 +msgid "" +"You can still work with this notebook, but cell and output types introduced " +"in later notebook versions will not be available." +msgstr "" +"Вы все еще можете работать с этим блокнотом, но типы ячеек и выходных " +"данных, представленные в более поздних версиях блокнота, будут недоступны." + +#: notebook/static/notebook/js/notebook.js:470 +msgid "Restart and Run All Cells" +msgstr "Перезапуск и запуск всех ячеек" + +#: notebook/static/notebook/js/notebook.js:471 +msgid "Restart and Clear All Outputs" +msgstr "Перезапуск и очистка всего вывода" + +#: notebook/static/notebook/js/notebook.js:472 +msgid "Restart" +msgstr "Перезапуск" + +#: notebook/static/notebook/js/notebook.js:473 +msgid "Continue Running" +msgstr "Продолжить запуск" + +#: notebook/static/notebook/js/notebook.js:474 +msgid "Reload" +msgstr "Перезагрузка" + +#: notebook/static/notebook/js/notebook.js:476 +msgid "Overwrite" +msgstr "Перезапись" + +#: notebook/static/notebook/js/notebook.js:477 +msgid "Trust" +msgstr "Доверять" + +#: notebook/static/notebook/js/notebook.js:478 +msgid "Revert" +msgstr "Откат" + +#: notebook/static/notebook/js/notebook.js:483 +msgid "Newer Notebook" +msgstr "Новый Notebook" + +#: notebook/static/notebook/js/notebook.js:1548 +msgid "Use markdown headings" +msgstr "Использовать заголовки markdown" + +#: notebook/static/notebook/js/notebook.js:1550 +msgid "" +"Jupyter no longer uses special heading cells. Instead, write your headings " +"in Markdown cells using # characters:" +msgstr "" +"Jupyter больше не использует специальные ячейки заголовка. Вместо этого " +"указывайте заголовки в ячейках Markdown, используя символы #:" + +#: notebook/static/notebook/js/notebook.js:1553 +msgid "## This is a level 2 heading" +msgstr "## Это заголовок 2 уровня" + +#: notebook/static/notebook/js/notebook.js:2248 +msgid "Restart kernel and re-run the whole notebook?" +msgstr "Перезапустить ядро и перезапустить все блокноты?" + +#: notebook/static/notebook/js/notebook.js:2250 +msgid "" +"Are you sure you want to restart the current kernel and re-execute the whole " +"notebook? All variables and outputs will be lost." +msgstr "" +"Вы уверены, что хотите перезапустить текущее ядро и повторно выполнить весь " +"блокнот? Все переменные и выходные данные будут потеряны." + +#: notebook/static/notebook/js/notebook.js:2275 +msgid "Restart kernel and clear all output?" +msgstr "Перезапустить ядро и очистить весь вывод?" + +#: notebook/static/notebook/js/notebook.js:2277 +msgid "" +"Do you want to restart the current kernel and clear all output? All " +"variables and outputs will be lost." +msgstr "" +"Вы хотите перезапустить текущее ядро и очистить весь вывод? Все переменные и " +"выводы будут потеряны." + +#: notebook/static/notebook/js/notebook.js:2322 +msgid "Restart kernel?" +msgstr "Перезапустить ядро?" + +#: notebook/static/notebook/js/notebook.js:2324 +msgid "Do you want to restart the current kernel? All variables will be lost." +msgstr "Вы хотите перезапустить текущее ядро? Все переменные будут потеряны." + +#: notebook/static/notebook/js/notebook.js:2320 +msgid "Shutdown kernel?" +msgstr "Выключить ядро?" + +#: notebook/static/notebook/js/notebook.js:2322 +msgid "" +"Do you want to shutdown the current kernel? All variables will be lost." +msgstr "Вы хотите выключить текущее ядро? Все переменные будут потеряны." + +#: notebook/static/notebook/js/notebook.js:2734 +msgid "Notebook changed" +msgstr "Блокнот изменен" + +#: notebook/static/notebook/js/notebook.js:2735 +msgid "" +"The notebook file has changed on disk since the last time we opened or saved " +"it. Do you want to overwrite the file on disk with the version open here, or " +"load the version on disk (reload the page) ?" +msgstr "" +"Файл блокнота изменился на диске с момента его последнего открытия или " +"сохранения. Вы хотите перезаписать файл на диске открытой здесь версией или " +"загрузить версию с диска (перезагрузить страницу)?" + +#: notebook/static/notebook/js/notebook.js:2782 +#: notebook/static/notebook/js/notebook.js:2990 +msgid "Notebook validation failed" +msgstr "Ошибка проверки блокнота" + +#: notebook/static/notebook/js/notebook.js:2785 +msgid "" +"The save operation succeeded, but the notebook does not appear to be valid. " +"The validation error was:" +msgstr "" +"Операция сохранения прошла успешно, но блокнот, похоже, недействителен. " +"Ошибка проверки:" + +#: notebook/static/notebook/js/notebook.js:2836 +msgid "" +"A trusted Jupyter notebook may execute hidden malicious code when you open " +"it. Selecting trust will immediately reload this notebook in a trusted " +"state. For more information, see the Jupyter security documentation: " +msgstr "" +"Доверенный блокнот Jupyter может выполнять скрытый вредоносный код при " +"открытии. При выборе параметра доверие этот блокнот будет немедленно " +"перезагружен в доверенное состояние. Дополнительные сведения см. в " +"документации по безопасности Jupiter: " + +#: notebook/static/notebook/js/notebook.js:2840 +msgid "here" +msgstr "здесь" + +#: notebook/static/notebook/js/notebook.js:2848 +msgid "Trust this notebook?" +msgstr "Доверять этому блокноту?" + +#: notebook/static/notebook/js/notebook.js:2981 +msgid "Notebook failed to load" +msgstr "Ошибка загрузки блокнота" + +#: notebook/static/notebook/js/notebook.js:2983 +msgid "The error was: " +msgstr "Ошибка в: " + +#: notebook/static/notebook/js/notebook.js:2987 +msgid "See the error console for details." +msgstr "Дополнительные сведения см. в консоли ошибок." + +#: notebook/static/notebook/js/notebook.js:2995 +msgid "The notebook also failed validation:" +msgstr "Блокнот также не прошла проверку:" + +#: notebook/static/notebook/js/notebook.js:2997 +msgid "" +"An invalid notebook may not function properly. The validation error was:" +msgstr "Неисправный блокнот может работать неправильно. Ошибка проверки:" + +#: notebook/static/notebook/js/notebook.js:3036 +#, python-format +msgid "" +"This notebook has been converted from an older notebook format to the " +"current notebook format v(%s)." +msgstr "" +"Этот блокнот был преобразован из более старого формата блокнота в текущий " +"формат v(%s)." + +#: notebook/static/notebook/js/notebook.js:3038 +#, python-format +msgid "" +"This notebook has been converted from a newer notebook format to the current " +"notebook format v(%s)." +msgstr "" +"Этот блокнот был преобразован из более нового формата блокнота в текущий " +"формат v(%s)." + +#: notebook/static/notebook/js/notebook.js:3046 +msgid "" +"The next time you save this notebook, the current notebook format will be " +"used." +msgstr "" +"При следующем сохранении этого блокнота будет использоваться текущий формат " +"блокнота." + +#: notebook/static/notebook/js/notebook.js:3051 +msgid "Older versions of Jupyter may not be able to read the new format." +msgstr "" +"Старые версии Jupiter могут быть не в состоянии прочитать новый формат." + +#: notebook/static/notebook/js/notebook.js:3053 +msgid "Some features of the original notebook may not be available." +msgstr "Некоторые функции оригинального блокнота могут быть недоступны." + +#: notebook/static/notebook/js/notebook.js:3056 +msgid "To preserve the original version, close the notebook without saving it." +msgstr "Чтобы сохранить исходную версию, закройте блокнот не сохраняя его." + +#: notebook/static/notebook/js/notebook.js:3061 +msgid "Notebook converted" +msgstr "Блокнот преобразован" + +#: notebook/static/notebook/js/notebook.js:3083 +msgid "(No name)" +msgstr "(Без имени)" + +#: notebook/static/notebook/js/notebook.js:3131 +#, python-format +msgid "" +"An unknown error occurred while loading this notebook. This version can load " +"notebook formats %s or earlier. See the server log for details." +msgstr "" +"При загрузке этого блокнота произошла неизвестная ошибка. Эта версия может " +"загружать форматы блокнотов %s или более ранние. Дополнительные сведения см. " +"в журнале сервера." + +#: notebook/static/notebook/js/notebook.js:3142 +msgid "Error loading notebook" +msgstr "Ошибка загрузки блокнота" + +#: notebook/static/notebook/js/notebook.js:3243 +msgid "Are you sure you want to revert the notebook to the latest checkpoint?" +msgstr "Вы уверены, что хотите вернуть блокнот к последней контрольной точке?" + +#: notebook/static/notebook/js/notebook.js:3246 +msgid "This cannot be undone." +msgstr "Этого уже не исправить." + +#: notebook/static/notebook/js/notebook.js:3249 +msgid "The checkpoint was last updated at:" +msgstr "Последний раз контрольная точка обновлялась:" + +#: notebook/static/notebook/js/notebook.js:3260 +msgid "Revert notebook to checkpoint" +msgstr "Откатить блокнот до контрольной точки" + +#: notebook/static/notebook/js/notificationarea.js:77 +#: notebook/static/notebook/js/tour.js:61 +#: notebook/static/notebook/js/tour.js:67 +msgid "Edit Mode" +msgstr "Режим редактирования" + +#: notebook/static/notebook/js/notificationarea.js:84 +#: notebook/static/notebook/js/notificationarea.js:88 +#: notebook/static/notebook/js/tour.js:54 +msgid "Command Mode" +msgstr "Командный режим" + +#: notebook/static/notebook/js/notificationarea.js:95 +msgid "Kernel Created" +msgstr "Ядро создано" + +#: notebook/static/notebook/js/notificationarea.js:99 +msgid "Connecting to kernel" +msgstr "Подключение к ядру" + +#: notebook/static/notebook/js/notificationarea.js:103 +msgid "Not Connected" +msgstr "Не подключено" + +#: notebook/static/notebook/js/notificationarea.js:106 +msgid "click to reconnect" +msgstr "нажмите для переподключения" + +#: notebook/static/notebook/js/notificationarea.js:115 +msgid "Restarting kernel" +msgstr "Перезапуск ядра" + +#: notebook/static/notebook/js/notificationarea.js:129 +msgid "Kernel Restarting" +msgstr "Перезапуск ядра" + +#: notebook/static/notebook/js/notificationarea.js:130 +msgid "The kernel appears to have died. It will restart automatically." +msgstr "Ядро, по-видимому, умерло. Оно будет перезапущено автоматически." + +#: notebook/static/notebook/js/notificationarea.js:140 +#: notebook/static/notebook/js/notificationarea.js:198 +#: notebook/static/notebook/js/notificationarea.js:218 +msgid "Dead kernel" +msgstr "Убить ядро" + +#: notebook/static/notebook/js/notificationarea.js:141 +#: notebook/static/notebook/js/notificationarea.js:219 +#: notebook/static/notebook/js/notificationarea.js:266 +msgid "Kernel Dead" +msgstr "Ядро мертво" + +#: notebook/static/notebook/js/notificationarea.js:145 +msgid "Interrupting kernel" +msgstr "Прерывание ядра" + +#: notebook/static/notebook/js/notificationarea.js:151 +msgid "No Connection to Kernel" +msgstr "Нет связи с ядром" + +#: notebook/static/notebook/js/notificationarea.js:161 +msgid "" +"A connection to the notebook server could not be established. The notebook " +"will continue trying to reconnect. Check your network connection or notebook " +"server configuration." +msgstr "" +"Не удалось установить соединение с сервером блокнота. Блокнот будет " +"продолжать попытки повторного подключения. Проверьте сетевое подключение или " +"конфигурацию сервера блокнота." + +#: notebook/static/notebook/js/notificationarea.js:166 +msgid "Connection failed" +msgstr "Ошибка подключения" + +#: notebook/static/notebook/js/notificationarea.js:179 +msgid "No kernel" +msgstr "Ядро отсутствует" + +#: notebook/static/notebook/js/notificationarea.js:180 +msgid "Kernel is not running" +msgstr "Ядро не запущено" + +#: notebook/static/notebook/js/notificationarea.js:187 +msgid "Don't Restart" +msgstr "Не перезагружать" + +#: notebook/static/notebook/js/notificationarea.js:187 +msgid "Try Restarting Now" +msgstr "Попробуйте перезагрузить сейчас" + +#: notebook/static/notebook/js/notificationarea.js:191 +msgid "" +"The kernel has died, and the automatic restart has failed. It is possible " +"the kernel cannot be restarted. If you are not able to restart the kernel, " +"you will still be able to save the notebook, but running code will no longer " +"work until the notebook is reopened." +msgstr "" +"Ядро умерло и автоматический перезапуск не удался. Вполне возможно, что ядро " +"не может быть перезапущено. Если вам не удастся перезапустить ядро - вы все " +"равно сможете сохранить блокнот, но запущенный код больше не будет работать " +"до тех пор, пока блокнот не будет снова открыт." + +#: notebook/static/notebook/js/notificationarea.js:225 +msgid "No Kernel" +msgstr "Ядро отсутствует" + +#: notebook/static/notebook/js/notificationarea.js:252 +msgid "Failed to start the kernel" +msgstr "Не удалось запустить ядро" + +#: notebook/static/notebook/js/notificationarea.js:272 +#: notebook/static/notebook/js/notificationarea.js:292 +#: notebook/static/notebook/js/notificationarea.js:306 +msgid "Kernel Busy" +msgstr "Ядро занято" + +#: notebook/static/notebook/js/notificationarea.js:273 +msgid "Kernel starting, please wait..." +msgstr "Перезапуск ядра, пожалуйста подождите..." + +#: notebook/static/notebook/js/notificationarea.js:279 +#: notebook/static/notebook/js/notificationarea.js:286 +msgid "Kernel Idle" +msgstr "Ядро бездействует" + +#: notebook/static/notebook/js/notificationarea.js:280 +msgid "Kernel ready" +msgstr "Ядро готово" + +#: notebook/static/notebook/js/notificationarea.js:297 +msgid "Using kernel: " +msgstr "Использование ядра: " + +#: notebook/static/notebook/js/notificationarea.js:298 +msgid "Only candidate for language: %1$s was %2$s." +msgstr "Единственный кандидат на язык: %1$s был %2$s." + +#: notebook/static/notebook/js/notificationarea.js:319 +msgid "Loading notebook" +msgstr "Загрузка блокнота" + +#: notebook/static/notebook/js/notificationarea.js:322 +msgid "Notebook loaded" +msgstr "Блокнот загружен" + +#: notebook/static/notebook/js/notificationarea.js:325 +msgid "Saving notebook" +msgstr "Сохранение блокнота" + +#: notebook/static/notebook/js/notificationarea.js:328 +msgid "Notebook saved" +msgstr "Блокнот сохранен" + +#: notebook/static/notebook/js/notificationarea.js:331 +msgid "Notebook save failed" +msgstr "Ошибка сохранения блокнота" + +#: notebook/static/notebook/js/notificationarea.js:334 +msgid "Notebook copy failed" +msgstr "Ошибка копирования блокнота" + +#: notebook/static/notebook/js/notificationarea.js:339 +msgid "Checkpoint created" +msgstr "Контрольная точка создана" + +#: notebook/static/notebook/js/notificationarea.js:347 +msgid "Checkpoint failed" +msgstr "Ошибка контрольной точки" + +#: notebook/static/notebook/js/notificationarea.js:350 +msgid "Checkpoint deleted" +msgstr "Контрольная точка удалена" + +#: notebook/static/notebook/js/notificationarea.js:353 +msgid "Checkpoint delete failed" +msgstr "Ошибка удаления контрольной точки" + +#: notebook/static/notebook/js/notificationarea.js:356 +msgid "Restoring to checkpoint..." +msgstr "Восстановление до контрольной точки..." + +#: notebook/static/notebook/js/notificationarea.js:359 +msgid "Checkpoint restore failed" +msgstr "Не удалось восстановить контрольную точку" + +#: notebook/static/notebook/js/notificationarea.js:364 +msgid "Autosave disabled" +msgstr "Автосохранение отключено" + +#: notebook/static/notebook/js/notificationarea.js:367 +#, python-format +msgid "Saving every %d sec." +msgstr "Сохранение каждые %d секунд." + +#: notebook/static/notebook/js/notificationarea.js:383 +msgid "Trusted" +msgstr "Доверенный" + +#: notebook/static/notebook/js/notificationarea.js:385 +msgid "Not Trusted" +msgstr "Не доверять" + +#: notebook/static/notebook/js/outputarea.js:75 +msgid "click to expand output" +msgstr "щелкните чтобы развернуть вывод" + +#: notebook/static/notebook/js/outputarea.js:79 +msgid "click to expand output; double click to hide output" +msgstr "щелкните чтобы развернуть вывод; двойной щелчок чтобы скрыть вывод" + +#: notebook/static/notebook/js/outputarea.js:167 +msgid "click to unscroll output; double click to hide" +msgstr "щелчок для прокрутки вывода; двойной щелчок - чтобы скрыть" + +#: notebook/static/notebook/js/outputarea.js:174 +msgid "click to scroll output; double click to hide" +msgstr "щелчок для прокрутки вывода; двойной щелчок - чтобы скрыть" + +#: notebook/static/notebook/js/outputarea.js:422 +msgid "Javascript error adding output!" +msgstr "Ошибка Javascript при добавлении вывода!" + +#: notebook/static/notebook/js/outputarea.js:427 +msgid "See your browser Javascript console for more details." +msgstr "" +"Дополнительные сведения см. в разделе консоль Javascript вашего браузера." + +#: notebook/static/notebook/js/outputarea.js:468 +#, python-format +msgid "Out[%d]:" +msgstr "Вывод[%d]:" + +#: notebook/static/notebook/js/outputarea.js:577 +#, python-format +msgid "Unrecognized output: %s" +msgstr "Нераспознанный вывод: %s" + +#: notebook/static/notebook/js/pager.js:36 +msgid "Open the pager in an external window" +msgstr "Открыть пейджер во внешнем окне" + +#: notebook/static/notebook/js/pager.js:45 +msgid "Close the pager" +msgstr "Закрыть пейджер" + +#: notebook/static/notebook/js/pager.js:148 +msgid "Jupyter Pager" +msgstr "Пейджер Jupyter" + +#: notebook/static/notebook/js/quickhelp.js:39 +#: notebook/static/notebook/js/quickhelp.js:49 +#: notebook/static/notebook/js/quickhelp.js:50 +msgid "go to cell start" +msgstr "перейти к началу ячейки" + +#: notebook/static/notebook/js/quickhelp.js:40 +#: notebook/static/notebook/js/quickhelp.js:51 +#: notebook/static/notebook/js/quickhelp.js:52 +msgid "go to cell end" +msgstr "перейти к концу ячейки" + +#: notebook/static/notebook/js/quickhelp.js:41 +#: notebook/static/notebook/js/quickhelp.js:53 +msgid "go one word left" +msgstr "перейти на слово влево" + +#: notebook/static/notebook/js/quickhelp.js:42 +#: notebook/static/notebook/js/quickhelp.js:54 +msgid "go one word right" +msgstr "перейти на слово вправо" + +#: notebook/static/notebook/js/quickhelp.js:43 +#: notebook/static/notebook/js/quickhelp.js:55 +msgid "delete word before" +msgstr "удалить слово перед" + +#: notebook/static/notebook/js/quickhelp.js:44 +#: notebook/static/notebook/js/quickhelp.js:56 +msgid "delete word after" +msgstr "удалить слово после" + +#: notebook/static/notebook/js/quickhelp.js:61 +msgid "code completion or indent" +msgstr "завершение кода или отступ" + +#: notebook/static/notebook/js/quickhelp.js:62 +msgid "tooltip" +msgstr "всплывающая подсказка" + +#: notebook/static/notebook/js/quickhelp.js:63 +msgid "indent" +msgstr "отступ" + +#: notebook/static/notebook/js/quickhelp.js:64 +msgid "dedent" +msgstr "dedent" + +#: notebook/static/notebook/js/quickhelp.js:65 +msgid "select all" +msgstr "выбрать всё" + +#: notebook/static/notebook/js/quickhelp.js:66 +msgid "undo" +msgstr "отменить" + +#: notebook/static/notebook/js/quickhelp.js:67 +#: notebook/static/notebook/js/quickhelp.js:68 +msgid "redo" +msgstr "повторить" + +#: notebook/static/notebook/js/quickhelp.js:102 +#: notebook/static/notebook/js/quickhelp.js:243 +msgid "Shift" +msgstr "Shift" + +#: notebook/static/notebook/js/quickhelp.js:103 +msgid "Alt" +msgstr "Alt" + +#: notebook/static/notebook/js/quickhelp.js:104 +msgid "Up" +msgstr "Вверх" + +#: notebook/static/notebook/js/quickhelp.js:105 +msgid "Down" +msgstr "Вниз" + +#: notebook/static/notebook/js/quickhelp.js:106 +msgid "Left" +msgstr "Лево" + +#: notebook/static/notebook/js/quickhelp.js:107 +msgid "Right" +msgstr "Право" + +#: notebook/static/notebook/js/quickhelp.js:108 +#: notebook/static/notebook/js/quickhelp.js:246 +msgid "Tab" +msgstr "Tab" + +#: notebook/static/notebook/js/quickhelp.js:109 +msgid "Caps Lock" +msgstr "CapsLock" + +#: notebook/static/notebook/js/quickhelp.js:110 +#: notebook/static/notebook/js/quickhelp.js:269 +msgid "Esc" +msgstr "Esc" + +#: notebook/static/notebook/js/quickhelp.js:111 +msgid "Ctrl" +msgstr "Ctrl" + +#: notebook/static/notebook/js/quickhelp.js:112 +#: notebook/static/notebook/js/quickhelp.js:290 +msgid "Enter" +msgstr "Enter" + +#: notebook/static/notebook/js/quickhelp.js:113 +msgid "Page Up" +msgstr "Страница вверх" + +#: notebook/static/notebook/js/quickhelp.js:114 +#: notebook/static/notebook/js/quickhelp.js:130 +msgid "Page Down" +msgstr "Страница вниз" + +#: notebook/static/notebook/js/quickhelp.js:115 +msgid "Home" +msgstr "Домой" + +#: notebook/static/notebook/js/quickhelp.js:116 +msgid "End" +msgstr "Конец" + +#: notebook/static/notebook/js/quickhelp.js:117 +#: notebook/static/notebook/js/quickhelp.js:245 +msgid "Space" +msgstr "Пробел" + +#: notebook/static/notebook/js/quickhelp.js:118 +msgid "Backspace" +msgstr "Бэкспейс" + +#: notebook/static/notebook/js/quickhelp.js:119 +msgid "Minus" +msgstr "Минус" + +#: notebook/static/notebook/js/quickhelp.js:130 +msgid "PageUp" +msgstr "СтраницаВверх" + +#: notebook/static/notebook/js/quickhelp.js:197 +msgid "The Jupyter Notebook has two different keyboard input modes." +msgstr "Jupyter Notebook имеет два различных режима ввода с клавиатуры." + +#: notebook/static/notebook/js/quickhelp.js:199 +msgid "" +"Edit mode allows you to type code or text into a cell and is " +"indicated by a green cell border." +msgstr "" +"Режим редактирования позволяет вводить код или текст в ячейку и " +"обозначается зеленой рамкой ячейки." + +#: notebook/static/notebook/js/quickhelp.js:201 +msgid "" +"Command mode binds the keyboard to notebook level commands and is " +"indicated by a grey cell border with a blue left margin." +msgstr "" +"Командный режим связывает клавиатуру с командами уровня блокнота и " +"обозначается серой рамкой ячейки с синим левым краем." + +#: notebook/static/notebook/js/quickhelp.js:222 +#: notebook/static/notebook/js/tooltip.js:58 +#: notebook/static/notebook/js/tooltip.js:69 +msgid "Close" +msgstr "Закрыть" + +#: notebook/static/notebook/js/quickhelp.js:225 +msgid "Keyboard shortcuts" +msgstr "Сочетания клавиш" + +#: notebook/static/notebook/js/quickhelp.js:240 +msgid "Command" +msgstr "Команда" + +#: notebook/static/notebook/js/quickhelp.js:241 +msgid "Control" +msgstr "Управление" + +#: notebook/static/notebook/js/quickhelp.js:242 +msgid "Option" +msgstr "Параметр" + +#: notebook/static/notebook/js/quickhelp.js:244 +msgid "Return" +msgstr "Возврат" + +#: notebook/static/notebook/js/quickhelp.js:270 +#, python-format +msgid "Command Mode (press %s to enable)" +msgstr "Командный режим (нажмите %s для включения)" + +#: notebook/static/notebook/js/quickhelp.js:272 +msgid "Edit Shortcuts" +msgstr "Редактировать ярлыки" + +#: notebook/static/notebook/js/quickhelp.js:275 +msgid "edit command-mode keyboard shortcuts" +msgstr "редактировать сочетания клавиш командного-режима" + +#: notebook/static/notebook/js/quickhelp.js:292 +#, python-format +msgid "Edit Mode (press %s to enable)" +msgstr "Режим редактирования (нажмите %s для включения)" + +#: notebook/static/notebook/js/savewidget.js:49 +msgid "Autosave Failed!" +msgstr "Автосохранение не удалось!" + +#: notebook/static/notebook/js/savewidget.js:71 +#: notebook/static/tree/js/notebooklist.js:846 +#: notebook/static/tree/js/notebooklist.js:859 +msgid "Rename" +msgstr "Переименование" + +#: notebook/static/notebook/js/savewidget.js:78 +#: notebook/static/tree/js/notebooklist.js:837 +msgid "Enter a new notebook name:" +msgstr "Введите новое имя блокнота:" + +#: notebook/static/notebook/js/savewidget.js:86 +msgid "Rename Notebook" +msgstr "Переименовать блокнот" + +#: notebook/static/notebook/js/savewidget.js:98 +msgid "" +"Invalid notebook name. Notebook names must have 1 or more characters and can " +"contain any characters except :/\\. Please enter a new notebook name:" +msgstr "" +"Недействительное имя блокнота. Имена блокнотов должны иметь 1 или более " +"символов и могут содержать любые символы, кроме :/\\. Пожалуйста, введите " +"новое имя блокнота:" + +#: notebook/static/notebook/js/savewidget.js:103 +msgid "Renaming..." +msgstr "Переименование..." + +#: notebook/static/notebook/js/savewidget.js:109 +msgid "Unknown error" +msgstr "Неизвестная ошибка" + +#: notebook/static/notebook/js/savewidget.js:178 +msgid "no checkpoint" +msgstr "контрольная точка отсутствует" + +#: notebook/static/notebook/js/savewidget.js:193 +#, python-format +msgid "Last Checkpoint: %s" +msgstr "Последняя контрольная точка: %s" + +#: notebook/static/notebook/js/savewidget.js:217 +msgid "(unsaved changes)" +msgstr "(несохраненные изменения)" + +#: notebook/static/notebook/js/savewidget.js:219 +msgid "(autosaved)" +msgstr "(автосохранение)" + +#: notebook/static/notebook/js/searchandreplace.js:74 +#, python-format +msgid "" +"Warning: too many matches (%d). Some changes might not be shown or applied." +msgstr "" +"Предупреждение: слишком много совпадений (%d). Некоторые изменения могут " +"быть не показаны или не применены." + +#: notebook/static/notebook/js/searchandreplace.js:77 +#, python-format +msgid "%d match" +msgid_plural "%d matches" +msgstr[0] "%d совпадение" +msgstr[1] "%d совпадения" +msgstr[2] "%d совпадений" + +#: notebook/static/notebook/js/searchandreplace.js:145 +msgid "More than 100 matches, aborting" +msgstr "Более 100 совпадений, прерывание" + +#: notebook/static/notebook/js/searchandreplace.js:166 +msgid "Use regex (JavaScript regex syntax)" +msgstr "" +"Используйте регулярное выражение (синтаксис регулярных выражений JavaScript)" + +#: notebook/static/notebook/js/searchandreplace.js:174 +msgid "Replace in selected cells" +msgstr "Заменить в выбранных ячейках" + +#: notebook/static/notebook/js/searchandreplace.js:181 +msgid "Match case" +msgstr "Учитывать регистр" + +#: notebook/static/notebook/js/searchandreplace.js:187 +msgid "Find" +msgstr "Поиск" + +#: notebook/static/notebook/js/searchandreplace.js:203 +msgid "Replace" +msgstr "Замена" + +#: notebook/static/notebook/js/searchandreplace.js:255 +msgid "No matches, invalid or empty regular expression" +msgstr "Нет совпадений, недопустимое или пустое регулярное выражение" + +#: notebook/static/notebook/js/searchandreplace.js:370 +msgid "Replace All" +msgstr "Заменить всё" + +#: notebook/static/notebook/js/searchandreplace.js:374 +msgid "Find and Replace" +msgstr "Поиск и замена" + +#: notebook/static/notebook/js/searchandreplace.js:400 +#: notebook/static/notebook/js/searchandreplace.js:401 +msgid "find and replace" +msgstr "поиск и замена" + +#: notebook/static/notebook/js/textcell.js:551 +msgid "" +"Write raw LaTeX or other formats here, for use with nbconvert. It will not " +"be rendered in the notebook. When passing through nbconvert, a Raw Cell's " +"content is added to the output unmodified." +msgstr "" +"Пишите сюда необработанный LaTeX или другие форматы для использования с " +"nbconvert. Он не будет отображаться в блокноте. При прохождении через " +"nbconvert содержимое необработанных ячеек добавляется к выводу неизмененным." + +#: notebook/static/notebook/js/tooltip.js:41 +msgid "Grow the tooltip vertically (press shift-tab twice)" +msgstr "Растяните всплывающую подсказку вертикально (нажмите shift-tab дважды)" + +#: notebook/static/notebook/js/tooltip.js:48 +msgid "show the current docstring in pager (press shift-tab 4 times)" +msgstr "" +"показать текущую строку документа в пейджере (нажмите shift-tab 4 раза)" + +#: notebook/static/notebook/js/tooltip.js:49 +msgid "Open in Pager" +msgstr "Открыть в пейджере" + +#: notebook/static/notebook/js/tooltip.js:68 +msgid "Tooltip will linger for 10 seconds while you type" +msgstr "" +"Всплывающая подсказка будет задерживаться в течение 10 секунд, пока вы " +"набираете текст" + +#: notebook/static/notebook/js/tour.js:27 +msgid "Welcome to the Notebook Tour" +msgstr "Добро пожаловать в тур по Notebook" + +#: notebook/static/notebook/js/tour.js:30 +msgid "You can use the left and right arrow keys to go backwards and forwards." +msgstr "" +"Вы можете использовать клавиши со стрелками влево и вправо чтобы двигаться " +"назад и вперед." + +#: notebook/static/notebook/js/tour.js:33 +msgid "Filename" +msgstr "Имя файла" + +#: notebook/static/notebook/js/tour.js:35 +msgid "Click here to change the filename for this notebook." +msgstr "Нажмите здесь чтобы изменить имя файла для этого блокнота." + +#: notebook/static/notebook/js/tour.js:39 +msgid "Notebook Menubar" +msgstr "Строка меню блокнота" + +#: notebook/static/notebook/js/tour.js:40 +msgid "" +"The menubar has menus for actions on the notebook, its cells, and the kernel " +"it communicates with." +msgstr "" +"Панель меню имеет меню для действий с блокнотом, ее ячейками и ядром, с " +"которым она взаимодействует." + +#: notebook/static/notebook/js/tour.js:44 +msgid "Notebook Toolbar" +msgstr "Панель инструментов блокнота" + +#: notebook/static/notebook/js/tour.js:45 +msgid "" +"The toolbar has buttons for the most common actions. Hover your mouse over " +"each button for more information." +msgstr "" +"На панели инструментов есть кнопки для наиболее распространенных действий. " +"Наведите курсор мыши на каждую кнопку для получения дополнительной " +"информации." + +#: notebook/static/notebook/js/tour.js:48 +msgid "Mode Indicator" +msgstr "Индикатор режима" + +#: notebook/static/notebook/js/tour.js:50 +msgid "" +"The Notebook has two modes: Edit Mode and Command Mode. In this area, an " +"indicator can appear to tell you which mode you are in." +msgstr "" +"Notebook имеет два режима работы: режим редактирования и командный режим. В " +"этой области может появиться индикатор, сообщающий вам, в каком режиме вы " +"находитесь." + +#: notebook/static/notebook/js/tour.js:58 +msgid "" +"Right now you are in Command Mode, and many keyboard shortcuts are " +"available. In this mode, no icon is displayed in the indicator area." +msgstr "" +"Прямо сейчас вы находитесь в командном режиме и многие сочетания клавиш " +"доступны. В этом режиме значок в области индикатора не отображается." + +#: notebook/static/notebook/js/tour.js:64 +msgid "" +"Pressing Enter or clicking in the input text area of the cell " +"switches to Edit Mode." +msgstr "" +"Нажатие кнопки Enter или щелчок в области ввода текста ячейки " +"переключает ее в режим редактирования." + +#: notebook/static/notebook/js/tour.js:70 +msgid "" +"Notice that the border around the currently active cell changed color. " +"Typing will insert text into the currently active cell." +msgstr "" +"Обратите внимание, что граница вокруг текущей активной ячейки изменила цвет. " +"Ввод приведет к вставке текста в текущую активную ячейку." + +#: notebook/static/notebook/js/tour.js:73 +msgid "Back to Command Mode" +msgstr "Возврат к командному режиму" + +#: notebook/static/notebook/js/tour.js:76 +msgid "" +"Pressing Esc or clicking outside of the input text area takes " +"you back to Command Mode." +msgstr "" +"Нажатие кнопки Esc или щелчок за пределами области ввода текста " +"возвращает вас в командный режим." + +#: notebook/static/notebook/js/tour.js:79 +msgid "Keyboard Shortcuts" +msgstr "Сочетания клавиш" + +#: notebook/static/notebook/js/tour.js:91 +msgid "You can click here to get a list of all of the keyboard shortcuts." +msgstr "Вы можете нажать здесь, чтобы получить список всех сочетаний клавиш." + +#: notebook/static/notebook/js/tour.js:94 +#: notebook/static/notebook/js/tour.js:100 +msgid "Kernel Indicator" +msgstr "Индикатор ядра" + +#: notebook/static/notebook/js/tour.js:97 +msgid "" +"This is the Kernel indicator. It looks like this when the Kernel is idle." +msgstr "Это и есть индикатор ядра. Он выглядит так, когда ядро простаивает." + +#: notebook/static/notebook/js/tour.js:103 +msgid "The Kernel indicator looks like this when the Kernel is busy." +msgstr "Индикатор ядра выглядит так, когда ядро занято." + +#: notebook/static/notebook/js/tour.js:107 +msgid "Interrupting the Kernel" +msgstr "Прерывание ядра" + +#: notebook/static/notebook/js/tour.js:109 +msgid "To cancel a computation in progress, you can click here." +msgstr "Чтобы отменить выполняемые вычисления - вы можете нажать здесь." + +#: notebook/static/notebook/js/tour.js:114 +msgid "Notification Area" +msgstr "Область уведомлений" + +#: notebook/static/notebook/js/tour.js:115 +msgid "" +"Messages in response to user actions (Save, Interrupt, etc.) appear here." +msgstr "" +"Сообщения в ответ на действия пользователя (сохранение, прерывание и т. д.) " +"появятся здесь." + +#: notebook/static/notebook/js/tour.js:117 +msgid "End of Tour" +msgstr "Конец обзора" + +#: notebook/static/notebook/js/tour.js:120 +msgid "This concludes the Jupyter Notebook User Interface Tour." +msgstr "" +"На этом завершается экскурсия по пользовательскому интерфейсу Jupyter " +"Notebook." + +#: notebook/static/notebook/js/celltoolbarpresets/attachments.js:32 +msgid "Edit Attachments" +msgstr "Редактировать вложения" + +#: notebook/static/notebook/js/celltoolbarpresets/default.js:19 +msgid "Cell" +msgstr "Ячейка" + +#: notebook/static/notebook/js/celltoolbarpresets/default.js:29 +#: notebook/static/notebook/js/celltoolbarpresets/default.js:47 +msgid "Edit Metadata" +msgstr "Редактировать метаданные" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:22 +msgid "Custom" +msgstr "Пользовательский" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:32 +msgid "Set the MIME type of the raw cell:" +msgstr "Установите тип MIME необработанной ячейки:" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:40 +msgid "Raw Cell MIME Type" +msgstr "Необработанный MIME-тип ячейки" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:74 +msgid "Raw NBConvert Format" +msgstr "Необработанный формат NBConvert" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:81 +msgid "Raw Cell Format" +msgstr "Необработанный формат ячейки" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:15 +msgid "Slide" +msgstr "Слайд" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:16 +msgid "Sub-Slide" +msgstr "Под-слайд" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:17 +msgid "Fragment" +msgstr "Фрагмент" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:18 +msgid "Skip" +msgstr "Пропустить" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:19 +msgid "Notes" +msgstr "Примечания" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:35 +msgid "Slide Type" +msgstr "Тип слайда" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:41 +msgid "Slideshow" +msgstr "Слайд-шоу" + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:133 +msgid "Add tag" +msgstr "Добавить тег" + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:163 +msgid "" +"Edit the list of tags below. All whitespace is treated as tag separators." +msgstr "" +"Отредактируйте список тегов ниже. Все пробелы рассматриваются как " +"разделители тегов." + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:172 +msgid "Edit the tags" +msgstr "Редактировать теги" + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:186 +msgid "Edit Tags" +msgstr "Редактировать теги" + +#: notebook/static/tree/js/kernellist.js:86 +#: notebook/static/tree/js/terminallist.js:105 +msgid "Shutdown" +msgstr "Выключение" + +#: notebook/static/tree/js/newnotebook.js:70 +#, python-format +msgid "Create a new notebook with %s" +msgstr "Создать новый блокнот с %s" + +#: notebook/static/tree/js/newnotebook.js:101 +msgid "An error occurred while creating a new notebook." +msgstr "При создании нового блокнота произошла ошибка." + +#: notebook/static/tree/js/notebooklist.js:122 +msgid "Creating File Failed" +msgstr "Ошибка создания файла" + +#: notebook/static/tree/js/notebooklist.js:124 +msgid "An error occurred while creating a new file." +msgstr "При создании нового файла произошла ошибка." + +#: notebook/static/tree/js/notebooklist.js:142 +msgid "Creating Folder Failed" +msgstr "Ошибка создания папки" + +#: notebook/static/tree/js/notebooklist.js:144 +msgid "An error occurred while creating a new folder." +msgstr "При создании новой папки произошла ошибка." + +#: notebook/static/tree/js/notebooklist.js:271 +msgid "Failed to read file" +msgstr "Ошибка чтения файла" + +#: notebook/static/tree/js/notebooklist.js:272 +#, python-format +msgid "Failed to read file %s" +msgstr "Ошибка чтения файла %s" + +#: notebook/static/tree/js/notebooklist.js:283 +#, python-format +msgid "The file size is %d MB. Do you still want to upload it?" +msgstr "Размер файла - %d MB. Вы все еще хотите загрузить его?" + +#: notebook/static/tree/js/notebooklist.js:286 +msgid "Large file size warning" +msgstr "Предупреждение о большом размере файла" + +#: notebook/static/tree/js/notebooklist.js:355 +msgid "Server error: " +msgstr "Ошибка сервера: " + +#: notebook/static/tree/js/notebooklist.js:390 +msgid "The notebook list is empty." +msgstr "Список блокнотов пуст." + +#: notebook/static/tree/js/notebooklist.js:463 +msgid "Click here to rename, delete, etc." +msgstr "Нажмите здесь, чтобы переименовать, удалить и т.д." + +#: notebook/static/tree/js/notebooklist.js:503 +msgid "Running" +msgstr "Запустить" + +#: notebook/static/tree/js/notebooklist.js:835 +msgid "Enter a new file name:" +msgstr "Введите новое имя файла:" + +#: notebook/static/tree/js/notebooklist.js:836 +msgid "Enter a new directory name:" +msgstr "Введите новое название каталога:" + +#: notebook/static/tree/js/notebooklist.js:838 +msgid "Enter a new name:" +msgstr "Введите новое имя:" + +#: notebook/static/tree/js/notebooklist.js:843 +msgid "Rename file" +msgstr "Переименовать файл" + +#: notebook/static/tree/js/notebooklist.js:844 +msgid "Rename directory" +msgstr "Переименовать директорию" + +#: notebook/static/tree/js/notebooklist.js:845 +msgid "Rename notebook" +msgstr "Переименовать блокнот" + +#: notebook/static/tree/js/notebooklist.js:859 +msgid "Move" +msgstr "Перемещение" + +#: notebook/static/tree/js/notebooklist.js:875 +msgid "An error occurred while renaming \"%1$s\" to \"%2$s\"." +msgstr "Произошла ошибка при переименовании \"%1$s\" в \"%2$s\"." + +#: notebook/static/tree/js/notebooklist.js:878 +msgid "Rename Failed" +msgstr "Ошибка переименования" + +#: notebook/static/tree/js/notebooklist.js:927 +#, python-format +msgid "Enter a new destination directory path for this item:" +msgid_plural "Enter a new destination directory path for these %d items:" +msgstr[0] "Введите новый путь к каталогу назначения для этого %d элемента:" +msgstr[1] "Введите новый путь к каталогу назначения для этих %d элементов:" +msgstr[2] "Введите новый путь к каталогу назначения для этих %d элементов:" + +#: notebook/static/tree/js/notebooklist.js:940 +#, python-format +msgid "Move an Item" +msgid_plural "Move %d Items" +msgstr[0] "Переместить %d элемент" +msgstr[1] "Переместить %d элемента" +msgstr[2] "Переместить %d элементов" + +#: notebook/static/tree/js/notebooklist.js:959 +msgid "An error occurred while moving \"%1$s\" from \"%2$s\" to \"%3$s\"." +msgstr "Произошла ошибка при перемещении \"%1$s\" из \"%2$s\" в \"%3$s\"." + +#: notebook/static/tree/js/notebooklist.js:961 +msgid "Move Failed" +msgstr "Ошибка перемещения" + +#: notebook/static/tree/js/notebooklist.js:1007 +#, python-format +msgid "Are you sure you want to permanently delete: \"%s\"?" +msgid_plural "" +"Are you sure you want to permanently delete the %d files or folders selected?" +msgstr[0] "" +"Вы уверены, что хотите навсегда удалить файл или папку \"%s\"?" +msgstr[1] "" +"Вы уверены, что хотите навсегда удалить %d выбранных файла или папки?" +msgstr[2] "" +"Вы уверены, что хотите навсегда удалить %d выбранных файлов или папок?" + +#: notebook/static/tree/js/notebooklist.js:1035 +#, python-format +msgid "An error occurred while deleting \"%s\"." +msgstr "Произошла ошибка при удалении \"%s\"." + +#: notebook/static/tree/js/notebooklist.js:1037 +msgid "Delete Failed" +msgstr "Ошибка удаления" + +#: notebook/static/tree/js/notebooklist.js:1078 +#, python-format +msgid "Are you sure you want to duplicate: \"%s\"?" +msgid_plural "Are you sure you want to duplicate the %d files selected?" +msgstr[0] "Вы уверены, что хотите скопировать файл \"%s\"?" +msgstr[1] "Вы уверены, что хотите скопировать %d выбранных файла?" +msgstr[2] "Вы уверены, что хотите скопировать %d выбранных файлов?" + +#: notebook/static/tree/js/notebooklist.js:1088 +msgid "Duplicate" +msgstr "Скопировать" + +#: notebook/static/tree/js/notebooklist.js:1102 +#, python-format +msgid "An error occurred while duplicating \"%s\"." +msgstr "Произошла ошибка при копировании \"%s\"." + +#: notebook/static/tree/js/notebooklist.js:1104 +msgid "Duplicate Failed" +msgstr "Ошибка дублирования" + +#: notebook/static/tree/js/notebooklist.js:1323 +msgid "Upload" +msgstr "Загрузить" + +#: notebook/static/tree/js/notebooklist.js:1332 +msgid "Invalid file name" +msgstr "Неверное имя файла" + +#: notebook/static/tree/js/notebooklist.js:1333 +msgid "File names must be at least one character and not start with a period" +msgstr "" +"Имена файлов должны состоять как минимум из одного символа и не начинаться с " +"точки" + +#: notebook/static/tree/js/notebooklist.js:1362 +msgid "Cannot upload invalid Notebook" +msgstr "Невозможно загрузить недействительный Notebook" + +#: notebook/static/tree/js/notebooklist.js:1395 +#, python-format +msgid "There is already a file named \"%s\". Do you want to replace it?" +msgstr "Там уже имеется файл с именем \"%s\". Вы хотите заменить его?" + +#: notebook/static/tree/js/notebooklist.js:1397 +msgid "Replace file" +msgstr "Заменить файл" diff --git a/nbclassic/i18n/ru_RU/LC_MESSAGES/nbui.po b/nbclassic/i18n/ru_RU/LC_MESSAGES/nbui.po new file mode 100644 index 000000000..f4fde7888 --- /dev/null +++ b/nbclassic/i18n/ru_RU/LC_MESSAGES/nbui.po @@ -0,0 +1,739 @@ +# Translations template for Jupyter. +# Copyright (C) 2017 ORGANIZATION +# This file is distributed under the same license as the Jupyter project. +# FIRST AUTHOR , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: Jupyter VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2017-07-07 12:48-0500\n" +"PO-Revision-Date: 2020-07-06 11:05+0500\n" +"Language-Team: TranslAster \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" +"X-Generator: Poedit 2.3.1\n" +"Last-Translator: Dmitriy Q \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Language: ru_RU\n" + +#: notebook/templates/404.html:3 +msgid "You are requesting a page that does not exist!" +msgstr "Вы запрашиваете страницу, которая не существует!" + +#: notebook/templates/edit.html:37 +msgid "current mode" +msgstr "текущий режим" + +#: notebook/templates/edit.html:48 notebook/templates/notebook.html:78 +msgid "File" +msgstr "Файл" + +#: notebook/templates/edit.html:50 notebook/templates/tree.html:57 +msgid "New" +msgstr "Новый" + +#: notebook/templates/edit.html:51 +msgid "Save" +msgstr "Сохранить" + +#: notebook/templates/edit.html:52 notebook/templates/tree.html:36 +msgid "Rename" +msgstr "Переименовать" + +#: notebook/templates/edit.html:53 notebook/templates/tree.html:38 +msgid "Download" +msgstr "Загрузить" + +#: notebook/templates/edit.html:56 notebook/templates/notebook.html:131 +#: notebook/templates/tree.html:41 +msgid "Edit" +msgstr "Редактировать" + +#: notebook/templates/edit.html:58 +msgid "Find" +msgstr "Поиск" + +#: notebook/templates/edit.html:59 +msgid "Find & Replace" +msgstr "Поиск & Замена" + +#: notebook/templates/edit.html:61 +msgid "Key Map" +msgstr "Сопоставления клавиш" + +#: notebook/templates/edit.html:62 +msgid "Default" +msgstr "По-умолчанию" + +#: notebook/templates/edit.html:63 +msgid "Sublime Text" +msgstr "Sublime Text" + +#: notebook/templates/edit.html:68 notebook/templates/notebook.html:159 +#: notebook/templates/tree.html:40 +msgid "View" +msgstr "Вид" + +#: notebook/templates/edit.html:70 notebook/templates/notebook.html:162 +msgid "Show/Hide the logo and notebook title (above menu bar)" +msgstr "Показать/cкрыть логотип и название блокнота (над строкой меню)" + +#: notebook/templates/edit.html:71 notebook/templates/notebook.html:163 +msgid "Toggle Header" +msgstr "Показать/скрыть заголовок" + +#: notebook/templates/edit.html:72 notebook/templates/notebook.html:171 +msgid "Toggle Line Numbers" +msgstr "Показать/скрыть номера строк" + +#: notebook/templates/edit.html:75 +msgid "Language" +msgstr "Язык" + +#: notebook/templates/error.html:23 +msgid "The error was:" +msgstr "Ошибка в:" + +#: notebook/templates/login.html:24 +msgid "Password or token:" +msgstr "Пароль или токен:" + +#: notebook/templates/login.html:26 +msgid "Password:" +msgstr "Пароль:" + +#: notebook/templates/login.html:31 +msgid "Log in" +msgstr "Вход" + +#: notebook/templates/login.html:39 +msgid "No login available, you shouldn't be seeing this page." +msgstr "Без входа недоступно, вы не должны видеть эту страницу." + +#: notebook/templates/logout.html:24 +#, python-format +msgid "Proceed to the dashboard" +msgstr "Перейдите к панели мониторинга" + +#: notebook/templates/logout.html:26 +#, python-format +msgid "Proceed to the login page" +msgstr "Перейдите к странице входа" + +#: notebook/templates/notebook.html:62 +msgid "Menu" +msgstr "Меню" + +#: notebook/templates/notebook.html:65 notebook/templates/notebook.html:254 +msgid "Kernel" +msgstr "Ядро" + +#: notebook/templates/notebook.html:68 +msgid "This notebook is read-only" +msgstr "Этот блокнот только для чтения" + +#: notebook/templates/notebook.html:81 +msgid "New Notebook" +msgstr "Новый блокнот" + +#: notebook/templates/notebook.html:85 +msgid "Opens a new window with the Dashboard view" +msgstr "Открывает новое окно с видом панели мониторинга" + +#: notebook/templates/notebook.html:86 +msgid "Open..." +msgstr "Открыть..." + +#: notebook/templates/notebook.html:90 +msgid "Open a copy of this notebook's contents and start a new kernel" +msgstr "Откройте копию содержимого этого блокнота и запустите новое ядро" + +#: notebook/templates/notebook.html:91 +msgid "Make a Copy..." +msgstr "Сделать копию..." + +#: notebook/templates/notebook.html:92 +msgid "Rename..." +msgstr "Переименовать..." + +#: notebook/templates/notebook.html:93 +msgid "Save and Checkpoint" +msgstr "Сохранение и контрольная точка" + +#: notebook/templates/notebook.html:96 +msgid "Revert to Checkpoint" +msgstr "Вернуться к контрольной точке" + +#: notebook/templates/notebook.html:106 +msgid "Print Preview" +msgstr "Предпросмотр печати" + +#: notebook/templates/notebook.html:107 +msgid "Download as" +msgstr "Скачать как" + +#: notebook/templates/notebook.html:109 +msgid "Notebook (.ipynb)" +msgstr "Notebook (.ipynb)" + +#: notebook/templates/notebook.html:110 +msgid "Script" +msgstr "Скрипт" + +#: notebook/templates/notebook.html:111 +msgid "HTML (.html)" +msgstr "HTML (.html)" + +#: notebook/templates/notebook.html:112 +msgid "Markdown (.md)" +msgstr "Markdown (.md)" + +#: notebook/templates/notebook.html:113 +msgid "reST (.rst)" +msgstr "reST (.rst)" + +#: notebook/templates/notebook.html:114 +msgid "LaTeX (.tex)" +msgstr "LaTeX (.tex)" + +#: notebook/templates/notebook.html:115 +msgid "PDF via LaTeX (.pdf)" +msgstr "PDF через LaTeX (.pdf)" + +#: notebook/templates/notebook.html:118 +msgid "Deploy as" +msgstr "Использовать как" + +#: notebook/templates/notebook.html:123 +msgid "Trust the output of this notebook" +msgstr "Доверять выводу этого блокнота" + +#: notebook/templates/notebook.html:124 +msgid "Trust Notebook" +msgstr "Доверять блокноту" + +#: notebook/templates/notebook.html:127 +msgid "Shutdown this notebook's kernel, and close this window" +msgstr "Выключить ядро этого блокнота и закрыть это окно" + +#: notebook/templates/notebook.html:128 +msgid "Close and Halt" +msgstr "Закрыть и остановить" + +#: notebook/templates/notebook.html:133 +msgid "Cut Cells" +msgstr "Вырезать ячейки" + +#: notebook/templates/notebook.html:134 +msgid "Copy Cells" +msgstr "Копировать ячейки" + +#: notebook/templates/notebook.html:135 +msgid "Paste Cells Above" +msgstr "Вставить ячейки выше" + +#: notebook/templates/notebook.html:136 +msgid "Paste Cells Below" +msgstr "Вставить ячейки ниже" + +#: notebook/templates/notebook.html:137 +msgid "Paste Cells & Replace" +msgstr "Вставить ячейки & заменить" + +#: notebook/templates/notebook.html:138 +msgid "Delete Cells" +msgstr "Удалить ячейки" + +#: notebook/templates/notebook.html:139 +msgid "Undo Delete Cells" +msgstr "Отменить удаление ячеек" + +#: notebook/templates/notebook.html:141 +msgid "Split Cell" +msgstr "Разбить ячейку" + +#: notebook/templates/notebook.html:142 +msgid "Merge Cell Above" +msgstr "Объединить с ячейкой выше" + +#: notebook/templates/notebook.html:143 +msgid "Merge Cell Below" +msgstr "Объединить с ячейкой ниже" + +#: notebook/templates/notebook.html:145 +msgid "Move Cell Up" +msgstr "Переместить ячейку выше" + +#: notebook/templates/notebook.html:146 +msgid "Move Cell Down" +msgstr "Переместить ячейку ниже" + +#: notebook/templates/notebook.html:148 +msgid "Edit Notebook Metadata" +msgstr "Редактировать метаданные блокнота" + +#: notebook/templates/notebook.html:150 +msgid "Find and Replace" +msgstr "Поиск и замена" + +#: notebook/templates/notebook.html:152 +msgid "Cut Cell Attachments" +msgstr "Вырезать вложения ячейки" + +#: notebook/templates/notebook.html:153 +msgid "Copy Cell Attachments" +msgstr "Копировать вложения ячейки" + +#: notebook/templates/notebook.html:154 +msgid "Paste Cell Attachments" +msgstr "Вставить вложения ячейки" + +#: notebook/templates/notebook.html:156 +msgid "Insert Image" +msgstr "Вставить изображение" + +#: notebook/templates/notebook.html:166 +msgid "Show/Hide the action icons (below menu bar)" +msgstr "Показать/скрыть значки действий (ниже строки меню)" + +#: notebook/templates/notebook.html:167 +msgid "Toggle Toolbar" +msgstr "Показать/скрыть панель мониторинга" + +#: notebook/templates/notebook.html:170 +msgid "Show/Hide line numbers in cells" +msgstr "Показать/скрыть номера строк в ячейках" + +#: notebook/templates/notebook.html:174 +msgid "Cell Toolbar" +msgstr "Панель инструментов ячейки" + +#: notebook/templates/notebook.html:179 +msgid "Insert" +msgstr "Вставка" + +#: notebook/templates/notebook.html:182 +msgid "Insert an empty Code cell above the currently active cell" +msgstr "Вставьте пустую ячейку кода над текущей активной ячейкой" + +#: notebook/templates/notebook.html:183 +msgid "Insert Cell Above" +msgstr "Вставить ячейку выше" + +#: notebook/templates/notebook.html:185 +msgid "Insert an empty Code cell below the currently active cell" +msgstr "Вставьте пустую ячейку кода под текущей активной ячейкой" + +#: notebook/templates/notebook.html:186 +msgid "Insert Cell Below" +msgstr "Вставить ячейку ниже" + +#: notebook/templates/notebook.html:189 +msgid "Cell" +msgstr "Ячейка" + +#: notebook/templates/notebook.html:191 +msgid "Run this cell, and move cursor to the next one" +msgstr "Запустить эту ячейку и переместить курсор на следующую" + +#: notebook/templates/notebook.html:192 +msgid "Run Cells" +msgstr "Запустить ячейки" + +#: notebook/templates/notebook.html:193 +msgid "Run this cell, select below" +msgstr "Запустить эту ячейку, выбрать ниже" + +#: notebook/templates/notebook.html:194 +msgid "Run Cells and Select Below" +msgstr "Запустить ячейки и выбрать ниже" + +#: notebook/templates/notebook.html:195 +msgid "Run this cell, insert below" +msgstr "Запустить эту ячейку, вставить ниже" + +#: notebook/templates/notebook.html:196 +msgid "Run Cells and Insert Below" +msgstr "Запустить ячейки и вставить ниже" + +#: notebook/templates/notebook.html:197 +msgid "Run all cells in the notebook" +msgstr "Запустить все ячейки в этом блокноте" + +#: notebook/templates/notebook.html:198 +msgid "Run All" +msgstr "Запустить всё" + +#: notebook/templates/notebook.html:199 +msgid "Run all cells above (but not including) this cell" +msgstr "Запустите все ячейки выше (но не включая) этой ячейки" + +#: notebook/templates/notebook.html:200 +msgid "Run All Above" +msgstr "Запустить всё выше" + +#: notebook/templates/notebook.html:201 +msgid "Run this cell and all cells below it" +msgstr "Запустить эту ячейку и все ячейки под ней" + +#: notebook/templates/notebook.html:202 +msgid "Run All Below" +msgstr "Запустить всё ниже" + +#: notebook/templates/notebook.html:205 +msgid "" +"All cells in the notebook have a cell type. By default, new cells are " +"created as 'Code' cells" +msgstr "" +"Все ячейки в блокноте имеют определенный тип ячеек. По умолчанию новые " +"ячейки создаются как ячейки \"Код\"" + +#: notebook/templates/notebook.html:206 +msgid "Cell Type" +msgstr "Тип ячейки" + +#: notebook/templates/notebook.html:209 +msgid "" +"Contents will be sent to the kernel for execution, and output will display " +"in the footer of cell" +msgstr "" +"Содержимое будет отправлено ядру для выполнения, а выходные данные будут " +"отображаться в нижнем колонтитуле ячейки" + +#: notebook/templates/notebook.html:212 +msgid "Contents will be rendered as HTML and serve as explanatory text" +msgstr "" +"Содержимое будет отображаться в формате HTML и служить пояснительным " +"текстом" + +#: notebook/templates/notebook.html:213 notebook/templates/notebook.html:298 +msgid "Markdown" +msgstr "Markdown" + +#: notebook/templates/notebook.html:215 +msgid "Contents will pass through nbconvert unmodified" +msgstr "Содержимое будет проходить через nbconvert неизмененным" + +#: notebook/templates/notebook.html:216 +msgid "Raw NBConvert" +msgstr "Необработанный NBConvert" + +#: notebook/templates/notebook.html:220 +msgid "Current Outputs" +msgstr "Текущий вывод" + +#: notebook/templates/notebook.html:223 +msgid "Hide/Show the output of the current cell" +msgstr "Показать/скрыть вывод текущей ячейки" + +#: notebook/templates/notebook.html:224 notebook/templates/notebook.html:240 +msgid "Toggle" +msgstr "Триггер" + +#: notebook/templates/notebook.html:227 +msgid "Scroll the output of the current cell" +msgstr "Прокрутить вывод текущей ячейки" + +#: notebook/templates/notebook.html:228 notebook/templates/notebook.html:244 +msgid "Toggle Scrolling" +msgstr "Триггер скроллинга" + +#: notebook/templates/notebook.html:231 +msgid "Clear the output of the current cell" +msgstr "Очистите выходные данные текущей ячейки" + +#: notebook/templates/notebook.html:232 notebook/templates/notebook.html:248 +msgid "Clear" +msgstr "Очистка" + +#: notebook/templates/notebook.html:236 +msgid "All Output" +msgstr "Весь вывод" + +#: notebook/templates/notebook.html:239 +msgid "Hide/Show the output of all cells" +msgstr "Скрыть/показать вывод всех ячеек" + +#: notebook/templates/notebook.html:243 +msgid "Scroll the output of all cells" +msgstr "Прокрутите вывод всех ячеек" + +#: notebook/templates/notebook.html:247 +msgid "Clear the output of all cells" +msgstr "Очистите выходные данные всех ячеек" + +#: notebook/templates/notebook.html:257 +msgid "Send Keyboard Interrupt (CTRL-C) to the Kernel" +msgstr "Отправить прерывание клавиатуры (CTRL-C) ядру" + +#: notebook/templates/notebook.html:258 +msgid "Interrupt" +msgstr "Прервать" + +#: notebook/templates/notebook.html:261 +msgid "Restart the Kernel" +msgstr "Перезапустить ядро" + +#: notebook/templates/notebook.html:262 +msgid "Restart" +msgstr "Перезапуск" + +#: notebook/templates/notebook.html:265 +msgid "Restart the Kernel and clear all output" +msgstr "Перезапустить ядро и очистить все выходные данные" + +#: notebook/templates/notebook.html:266 +msgid "Restart & Clear Output" +msgstr "Перезапустить & очистить вывод" + +#: notebook/templates/notebook.html:269 +msgid "Restart the Kernel and re-run the notebook" +msgstr "Перезапустить ядро и перезапустить блокнот" + +#: notebook/templates/notebook.html:270 +msgid "Restart & Run All" +msgstr "Перезапустить & Запустить всё" + +#: notebook/templates/notebook.html:273 +msgid "Reconnect to the Kernel" +msgstr "Переподключение к ядру" + +#: notebook/templates/notebook.html:274 +msgid "Reconnect" +msgstr "Переподключение" + +#: notebook/templates/notebook.html:282 +msgid "Change kernel" +msgstr "Изменение ядра" + +#: notebook/templates/notebook.html:287 +msgid "Help" +msgstr "Справка" + +#: notebook/templates/notebook.html:290 +msgid "A quick tour of the notebook user interface" +msgstr "Краткий обзор пользовательского интерфейса блокнота" + +#: notebook/templates/notebook.html:290 +msgid "User Interface Tour" +msgstr "Обзор пользовательского интерфейса" + +#: notebook/templates/notebook.html:291 +msgid "Opens a tooltip with all keyboard shortcuts" +msgstr "Открывает инструмент со всеми сочетаниями клавиш" + +#: notebook/templates/notebook.html:291 +msgid "Keyboard Shortcuts" +msgstr "Сочетания клавиш" + +#: notebook/templates/notebook.html:292 +msgid "Opens a dialog allowing you to edit Keyboard shortcuts" +msgstr "Открывает диалог, позволяющий редактировать сочетания клавиш" + +#: notebook/templates/notebook.html:292 +msgid "Edit Keyboard Shortcuts" +msgstr "Редактировать сочетания клавиш" + +#: notebook/templates/notebook.html:297 +msgid "Notebook Help" +msgstr "Справка по блокноту" + +#: notebook/templates/notebook.html:303 +msgid "Opens in a new window" +msgstr "Открыть в новом окне" + +#: notebook/templates/notebook.html:319 +msgid "About Jupyter Notebook" +msgstr "О блокноте Jupyter" + +#: notebook/templates/notebook.html:319 +msgid "About" +msgstr "О программе" + +#: notebook/templates/page.html:114 +msgid "Jupyter Notebook requires JavaScript." +msgstr "Блокнот Jupyter требует JavaScript." + +#: notebook/templates/page.html:115 +msgid "Please enable it to proceed. " +msgstr "Пожалуйста, позвольте продолжить работу. " + +#: notebook/templates/page.html:121 +msgid "dashboard" +msgstr "панель мониторинга" + +#: notebook/templates/page.html:132 +msgid "Logout" +msgstr "Разлогиниться" + +#: notebook/templates/page.html:134 +msgid "Login" +msgstr "Вход" + +#: notebook/templates/tree.html:23 notebook/templates/tree.html:101 +msgid "Files" +msgstr "Файлы" + +#: notebook/templates/tree.html:24 notebook/templates/tree.html:100 +msgid "Running" +msgstr "Запустить" + +#: notebook/templates/tree.html:25 +msgid "Clusters" +msgstr "Кластеры" + +#: notebook/templates/tree.html:32 +msgid "Select items to perform actions on them." +msgstr "Выберите элементы для выполнения действий над ними." + +#: notebook/templates/tree.html:35 +msgid "Duplicate selected" +msgstr "Копировать выбранное" + +#: notebook/templates/tree.html:35 +msgid "Duplicate" +msgstr "Скопировать" + +#: notebook/templates/tree.html:36 +msgid "Rename selected" +msgstr "Переименовать выделенное" + +#: notebook/templates/tree.html:37 +msgid "Move selected" +msgstr "Переместить выделенное" + +#: notebook/templates/tree.html:37 +msgid "Move" +msgstr "Переместить" + +#: notebook/templates/tree.html:38 +msgid "Download selected" +msgstr "Скачать выбранное" + +#: notebook/templates/tree.html:39 +msgid "Shutdown selected notebook(s)" +msgstr "Выключить выбранный(-е) блокнот(ы)" + +#: notebook/templates/notebook.html:278 notebook/templates/tree.html:39 +msgid "Shutdown" +msgstr "Выключение" + +#: notebook/templates/tree.html:40 +msgid "View selected" +msgstr "Просмотр выбранного" + +#: notebook/templates/tree.html:41 +msgid "Edit selected" +msgstr "Редактировать выделенное" + +#: notebook/templates/tree.html:42 +msgid "Delete selected" +msgstr "Удалить выделенное" + +#: notebook/templates/tree.html:50 +msgid "Click to browse for a file to upload." +msgstr "Нажмите, чтобы найти файл для загрузки." + +#: notebook/templates/tree.html:51 +msgid "Upload" +msgstr "Загрузить" + +#: notebook/templates/tree.html:65 +msgid "Text File" +msgstr "Текстовый файл" + +#: notebook/templates/tree.html:68 +msgid "Folder" +msgstr "Папка" + +#: notebook/templates/tree.html:72 +msgid "Terminal" +msgstr "Терминал" + +#: notebook/templates/tree.html:76 +msgid "Terminals Unavailable" +msgstr "Терминалы недоступны" + +#: notebook/templates/tree.html:82 +msgid "Refresh notebook list" +msgstr "Обновить список блокнотов" + +#: notebook/templates/tree.html:90 +msgid "Select All / None" +msgstr "Выбрать всё / ничего" + +#: notebook/templates/tree.html:93 +msgid "Select..." +msgstr "Выбрать..." + +#: notebook/templates/tree.html:98 +msgid "Select All Folders" +msgstr "Выбрать все папки" + +#: notebook/templates/tree.html:98 +msgid "Folders" +msgstr "Папки" + +#: notebook/templates/tree.html:99 +msgid "Select All Notebooks" +msgstr "Выбрать все блокноты" + +#: notebook/templates/tree.html:99 +msgid "All Notebooks" +msgstr "Все блокноты" + +#: notebook/templates/tree.html:100 +msgid "Select Running Notebooks" +msgstr "Запустить выбранные блокноты" + +#: notebook/templates/tree.html:101 +msgid "Select All Files" +msgstr "Выбрать все файлы" + +#: notebook/templates/tree.html:114 +msgid "Last Modified" +msgstr "Последнее изменение" + +#: notebook/templates/tree.html:120 +msgid "Name" +msgstr "Название" + +#: notebook/templates/tree.html:130 +msgid "Currently running Jupyter processes" +msgstr "Текущие запущенные процессы Jupyter" + +#: notebook/templates/tree.html:134 +msgid "Refresh running list" +msgstr "Обновить список запущенных" + +#: notebook/templates/tree.html:150 +msgid "There are no terminals running." +msgstr "Эти терминалы не запущены." + +#: notebook/templates/tree.html:152 +msgid "Terminals are unavailable." +msgstr "Терминалы недоступны." + +#: notebook/templates/tree.html:162 +msgid "Notebooks" +msgstr "Блокноты" + +#: notebook/templates/tree.html:169 +msgid "There are no notebooks running." +msgstr "Эти блокноты не запущены." + +#: notebook/templates/tree.html:178 +msgid "Clusters tab is now provided by IPython parallel." +msgstr "Вкладка кластеров обеспечивается оболочкой IPython параллельно." + +#: notebook/templates/tree.html:179 +msgid "" +"See 'IPython parallel' for installation details." +msgstr "" +"Смотрите 'IPython " +"parallel' для подробной информации об установке." diff --git a/nbclassic/i18n/ru_RU/LC_MESSAGES/notebook.po b/nbclassic/i18n/ru_RU/LC_MESSAGES/notebook.po new file mode 100644 index 000000000..6d9bc08fb --- /dev/null +++ b/nbclassic/i18n/ru_RU/LC_MESSAGES/notebook.po @@ -0,0 +1,621 @@ +# Translations template for Jupyter. +# Copyright (C) 2017 ORGANIZATION +# This file is distributed under the same license as the Jupyter project. +# FIRST AUTHOR , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: Jupyter VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2017-07-08 21:52-0500\n" +"PO-Revision-Date: 2020-07-06 17:38+0500\n" +"Language-Team: TranslAster \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" +"X-Generator: Poedit 2.3.1\n" +"Last-Translator: Dmitriy Q \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Language: ru_RU\n" + +#: notebook/notebookapp.py:53 +msgid "The Jupyter Notebook requires tornado >= 4.0" +msgstr "Для Jupyter Notebook требуется tornado >= 4.0" + +#: notebook/notebookapp.py:57 +msgid "The Jupyter Notebook requires tornado >= 4.0, but you have < 1.1.0" +msgstr "Для Jupyter Notebook требуется tornado >= 4.0, но у вас < 1.1.0" + +#: notebook/notebookapp.py:59 +#, python-format +msgid "The Jupyter Notebook requires tornado >= 4.0, but you have %s" +msgstr "Для Jupyter Notebook требуется tornado >= 4.0, но у вас %s" + +#: notebook/notebookapp.py:209 +msgid "The `ignore_minified_js` flag is deprecated and no longer works." +msgstr "Флаг `ignore_minified_js` устарел и больше не работает." + +#: notebook/notebookapp.py:210 +#, python-format +msgid "" +"Alternatively use `%s` when working on the notebook's Javascript and LESS" +msgstr "" +"В качестве альтернативы используйте `%s` при работе с блокнотами Javascript " +"и LESS" + +#: notebook/notebookapp.py:211 +msgid "" +"The `ignore_minified_js` flag is deprecated and will be removed in Notebook " +"6.0" +msgstr "Флаг `ignore_minified_js` устарел и будет удален в Notebook 6.0" + +#: notebook/notebookapp.py:389 +msgid "List currently running notebook servers." +msgstr "Список запущенных в данный момент серверов блокнотов." + +#: notebook/notebookapp.py:393 +msgid "Produce machine-readable JSON output." +msgstr "Произведите машиночитаемый вывод JSON." + +#: notebook/notebookapp.py:397 +msgid "" +"If True, each line of output will be a JSON object with the details from the " +"server info file." +msgstr "" +"Если True, то каждая строка вывода будет представлять собой объект JSON с " +"подробностями из файла информации сервера." + +#: notebook/notebookapp.py:402 +msgid "Currently running servers:" +msgstr "В настоящее время работают сервера:" + +#: notebook/notebookapp.py:419 +msgid "Don't open the notebook in a browser after startup." +msgstr "Не открывайте блокнот в браузере после запуска." + +#: notebook/notebookapp.py:423 +msgid "" +"DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib." +msgstr "" +"ОТКЛЮЧЕНО: используйте %pylab или %matplotlib в блокноте чтобы включить " +"matplotlib." + +#: notebook/notebookapp.py:439 +msgid "Allow the notebook to be run from root user." +msgstr "Разрешить запускать блокнот от пользователя root." + +#: notebook/notebookapp.py:470 +msgid "" +"The Jupyter HTML Notebook.\n" +" \n" +" This launches a Tornado based HTML Notebook Server that serves up an " +"HTML5/Javascript Notebook client." +msgstr "" +"The Jupyter HTML Notebook.\n" +" \n" +" Запускает сервер HTML Notebook на базе Tornado, обслуживающий клиент " +"HTML5/Javascript Notebook." + +#: notebook/notebookapp.py:509 +msgid "" +"Deprecated: Use minified JS file or not, mainly use during dev to avoid JS " +"recompilation" +msgstr "" +"Устарело: используйте уменьшенный файл JS или нет, в основном используется " +"во время разработки чтобы избежать перекомпиляции JS" + +#: notebook/notebookapp.py:540 +msgid "Set the Access-Control-Allow-Credentials: true header" +msgstr "Установка контроль-доступа-разрешенные-учетные_данные: заголовок true" + +#: notebook/notebookapp.py:544 +msgid "Whether to allow the user to run the notebook as root." +msgstr "Следует ли разрешить пользователю запускать блокнот от имени root." + +#: notebook/notebookapp.py:548 +msgid "The default URL to redirect to from `/`" +msgstr "URL-адрес по умолчанию для перенаправления на `/`" + +#: notebook/notebookapp.py:552 +msgid "The IP address the notebook server will listen on." +msgstr "IP-адрес, который будет прослушиваться сервером блокнота." + +#: notebook/notebookapp.py:565 +#, python-format +msgid "" +"Cannot bind to localhost, using 127.0.0.1 as default ip\n" +"%s" +msgstr "" +"Невозможно привязаться к localhost, используйте 127.0.0.1 в качестве ip-" +"адреса по умолчанию\n" +"%s" + +#: notebook/notebookapp.py:579 +msgid "The port the notebook server will listen on." +msgstr "Порт сервера блокнотов для прослушивания." + +#: notebook/notebookapp.py:583 +msgid "" +"The number of additional ports to try if the specified port is not available." +msgstr "" +"Количество дополнительных портов, которые нужно попробовать, если указанный " +"порт недоступен." + +#: notebook/notebookapp.py:587 +msgid "The full path to an SSL/TLS certificate file." +msgstr "Полный путь к файлу сертификата с SSL/TLS." + +#: notebook/notebookapp.py:591 +msgid "The full path to a private key file for usage with SSL/TLS." +msgstr "Полный путь к файлу приватного ключа для использования с SSL/TLS." + +#: notebook/notebookapp.py:595 +msgid "" +"The full path to a certificate authority certificate for SSL/TLS client " +"authentication." +msgstr "" +"Полный путь к сертификату центра сертификации для SSL/TLS аутентификации " +"клиента." + +#: notebook/notebookapp.py:599 +msgid "The file where the cookie secret is stored." +msgstr "Файл, в котором хранится пароль cookie." + +#: notebook/notebookapp.py:628 +#, python-format +msgid "Writing notebook server cookie secret to %s" +msgstr "Запись пароля cookie сервера блокнота в %s" + +#: notebook/notebookapp.py:635 +#, python-format +msgid "Could not set permissions on %s" +msgstr "Не удалось установить разрешения для %s" + +#: notebook/notebookapp.py:640 +msgid "" +"Token used for authenticating first-time connections to the server.\n" +"\n" +" When no password is enabled,\n" +" the default is to generate a new, random token.\n" +"\n" +" Setting to an empty string disables authentication altogether, which " +"is NOT RECOMMENDED.\n" +" " +msgstr "" +"Токен, используемый для проверки подлинности при первом подключении к " +"серверу.\n" +"\n" +" Когда пароль не включен,\n" +" по умолчанию генерируется новый случайный токен.\n" +"\n" +" Установка пустой строки полностью отключает аутентификацию, что НЕ " +"РЕКОМЕНДУЕТСЯ.\n" +" " + +#: notebook/notebookapp.py:650 +msgid "" +"One-time token used for opening a browser.\n" +" Once used, this token cannot be used again.\n" +" " +msgstr "" +"Одноразовый токен, используемый для открытия в браузере. \n" +" После использования этот токен не может быть использован снова.\n" +" " + +#: notebook/notebookapp.py:726 +msgid "" +"Specify Where to open the notebook on startup. This is the\n" +" `new` argument passed to the standard library method `webbrowser." +"open`.\n" +" The behaviour is not guaranteed, but depends on browser support. " +"Valid\n" +" values are:\n" +" 2 opens a new tab,\n" +" 1 opens a new window,\n" +" 0 opens in an existing window.\n" +" See the `webbrowser.open` documentation for details.\n" +" " +msgstr "" +"Укажите где открывать блокнот при запуске. Это \"новый\"\n" +" аргумент, передаваемый для стандартного метода библиотек `webbrowser." +"open`.\n" +" Поведение не гарантируется, но зависит от поддержки браузера. " +"Допустимыми\n" +" значениями являются:\n" +" 2 открывает новую вкладку,\n" +" 1 открывает новое окно,\n" +" 0 открывается в существующем окне.\n" +" См. документацию `webbrowser.open` для получения подробной " +"информации.\n" +" " + +#: notebook/notebookapp.py:737 +msgid "DEPRECATED, use tornado_settings" +msgstr "УСТАРЕЛО - используйте tornado_settings" + +#: notebook/notebookapp.py:742 +msgid "" +"\n" +" webapp_settings is deprecated, use tornado_settings.\n" +msgstr "" +"\n" +" web app_settings устарел, используйте tornado_settings.\n" + +#: notebook/notebookapp.py:746 +msgid "" +"Supply overrides for the tornado.web.Application that the Jupyter notebook " +"uses." +msgstr "" +"Перекрывает поставки для tornado.web. Приложение, использующее блокнот " +"Jupyter." + +#: notebook/notebookapp.py:750 +msgid "" +"\n" +" Set the tornado compression options for websocket connections.\n" +"\n" +" This value will be returned from :meth:`WebSocketHandler." +"get_compression_options`.\n" +" None (default) will disable compression.\n" +" A dict (even an empty one) will enable compression.\n" +"\n" +" See the tornado docs for WebSocketHandler.get_compression_options " +"for details.\n" +" " +msgstr "" +"\n" +" Установите параметры сжатия tornado для соединений websocket.\n" +"\n" +" Это значение будет возвращено из :meth: 'WebSocketHandler." +"get_compression_options`.\n" +" None (по умолчанию) отключит сжатие.\n" +" Диктат (даже пустой) будет включать сжатие.\n" +"\n" +" Смотрите документы tornado для WebSocketHandler." +"get_compression_options для получения подробной информации.\n" +" " + +#: notebook/notebookapp.py:761 +msgid "" +"Supply overrides for terminado. Currently only supports \"shell_command\"." +msgstr "" +"Переопределение поставок для terminado. В настоящее время поддерживается " +"только \"shell_command\"." + +#: notebook/notebookapp.py:764 +msgid "" +"Extra keyword arguments to pass to `set_secure_cookie`. See tornado's " +"set_secure_cookie docs for details." +msgstr "" +"Дополнительные аргументы ключевого слова для передачи в `set_secure_cookie`. " +"Подробнее см. документацию set_secure_cookie для tornado." + +#: notebook/notebookapp.py:768 +msgid "" +"Supply SSL options for the tornado HTTPServer.\n" +" See the tornado docs for details." +msgstr "" +"Предоставьте параметры SSL для HTTPServer tornado.\n" +" Подробности смотрите в документации tornado." + +#: notebook/notebookapp.py:772 +msgid "Supply extra arguments that will be passed to Jinja environment." +msgstr "Предоставьте дополнительные аргументы, передаваемые в среду Jinja." + +#: notebook/notebookapp.py:776 +msgid "Extra variables to supply to jinja templates when rendering." +msgstr "" +"Дополнительные переменные для предоставления шаблонам jinja при рендеринге." + +#: notebook/notebookapp.py:812 +msgid "DEPRECATED use base_url" +msgstr "УСТАРЕЛО - используйте base_url" + +#: notebook/notebookapp.py:816 +msgid "base_project_url is deprecated, use base_url" +msgstr "base_project_url устарел - используйте base_url" + +#: notebook/notebookapp.py:832 +msgid "Path to search for custom.js, css" +msgstr "Путь для поиска custom.js, css" + +#: notebook/notebookapp.py:844 +msgid "" +"Extra paths to search for serving jinja templates.\n" +"\n" +" Can be used to override templates from notebook.templates." +msgstr "" +"Дополнительные пути для поиска обслуживающих шаблонов jinja.\n" +"\n" +" Может использоваться для переопределения шаблонов из notebook." +"templates." + +#: notebook/notebookapp.py:855 +msgid "extra paths to look for Javascript notebook extensions" +msgstr "дополнительные пути для поиска расширений блокнота Javascript" + +#: notebook/notebookapp.py:900 +#, python-format +msgid "Using MathJax: %s" +msgstr "Использование MathJax: %s" + +#: notebook/notebookapp.py:903 +msgid "The MathJax.js configuration file that is to be used." +msgstr "Использовать файл конфигурации MathJax.js." + +#: notebook/notebookapp.py:908 +#, python-format +msgid "Using MathJax configuration file: %s" +msgstr "Использование файла конфигурации MathJax: %s" + +#: notebook/notebookapp.py:914 +msgid "The notebook manager class to use." +msgstr "Используемый класс менеджера блокнотов." + +#: notebook/notebookapp.py:920 +msgid "The kernel manager class to use." +msgstr "Используемый класс менеджера ядра." + +#: notebook/notebookapp.py:926 +msgid "The session manager class to use." +msgstr "Класс менеджера сеансов для использования." + +#: notebook/notebookapp.py:932 +msgid "The config manager class to use" +msgstr "Класс менеджера конфигурации для использования" + +#: notebook/notebookapp.py:953 +msgid "The login handler class to use." +msgstr "Используемый класс обработчика входа в систему." + +#: notebook/notebookapp.py:960 +msgid "The logout handler class to use." +msgstr "Используемый класс обработчика выхода из системы." + +#: notebook/notebookapp.py:964 +msgid "" +"Whether to trust or not X-Scheme/X-Forwarded-Proto and X-Real-Ip/X-Forwarded-" +"For headerssent by the upstream reverse proxy. Necessary if the proxy " +"handles SSL" +msgstr "" +"Стоит ли доверять или нет Х-схеме/х-перенаправлению-прото и X-реал-ip/х-" +"перенаправлению-для заголовков, загружаемых по потоку обратного прокси-" +"сервера. Необходимо, если прокси обрабатывает SSL" + +#: notebook/notebookapp.py:976 +msgid "" +"\n" +" DISABLED: use %pylab or %matplotlib in the notebook to enable " +"matplotlib.\n" +" " +msgstr "" +"\n" +" Отключено: используйте %pylab или %matplotlib в блокноте чтобы " +"включить matplotlib.\n" +" " + +#: notebook/notebookapp.py:988 +msgid "Support for specifying --pylab on the command line has been removed." +msgstr "Поддержка указания --pylab в командной строке была удалена." + +#: notebook/notebookapp.py:990 +msgid "Please use `%pylab{0}` or `%matplotlib{0}` in the notebook itself." +msgstr "" +"Пожалуйста, используйте `%pylab{0}` или `%matplotlib{0}` в самом блокноте." + +#: notebook/notebookapp.py:995 +msgid "The directory to use for notebooks and kernels." +msgstr "Каталог, используемый для блокнотов и ядер." + +#: notebook/notebookapp.py:1018 +#, python-format +msgid "No such notebook dir: '%r'" +msgstr "Нет такого блокнота: '%r'" + +#: notebook/notebookapp.py:1031 +msgid "DEPRECATED use the nbserver_extensions dict instead" +msgstr "УСТАРЕЛО - используйте nbserver_extensions вместо диктата" + +#: notebook/notebookapp.py:1036 +msgid "server_extensions is deprecated, use nbserver_extensions" +msgstr "server_extensions устарело - используйте nbserver_extensions" + +#: notebook/notebookapp.py:1040 +msgid "" +"Dict of Python modules to load as notebook server extensions.Entry values " +"can be used to enable and disable the loading ofthe extensions. The " +"extensions will be loaded in alphabetical order." +msgstr "" +"Dict модулей Python для загрузки в качестве серверных расширений блокнотов. " +"Введенные значения можно использовать для включения и отключения загрузки " +"расширений. Расширения будут загружены в алфавитном порядке." + +#: notebook/notebookapp.py:1049 +msgid "Reraise exceptions encountered loading server extensions?" +msgstr "" +"Повторно поднимаемые исключения, встречающиеся при загрузке серверных " +"расширений?" + +#: notebook/notebookapp.py:1052 +msgid "" +"(msgs/sec)\n" +" Maximum rate at which messages can be sent on iopub before they are\n" +" limited." +msgstr "" +"(сообщ/сек)\n" +" Максимальная скорость отправки сообщений на iopub, прежде\n" +" чем они будут ограничены." + +#: notebook/notebookapp.py:1056 +msgid "" +"(bytes/sec)\n" +" Maximum rate at which stream output can be sent on iopub before they " +"are\n" +" limited." +msgstr "" +"(байт/сек)\n" +" Максимальная скорость отправки потока вывода на iopub, прежде\n" +" чем он будет ограничен." + +#: notebook/notebookapp.py:1060 +msgid "" +"(sec) Time window used to \n" +" check the message and data rate limits." +msgstr "" +"(сек) Окно времени, используемое для \n" +" проверки ограничений скорости передачи сообщений и данных." + +#: notebook/notebookapp.py:1071 +#, python-format +msgid "No such file or directory: %s" +msgstr "Нет такого файла или каталога: %s" + +#: notebook/notebookapp.py:1141 +msgid "Notebook servers are configured to only be run with a password." +msgstr "Серверы блокнотов настроены на работу только с паролем." + +#: notebook/notebookapp.py:1142 +msgid "Hint: run the following command to set a password" +msgstr "Подсказка: выполните следующую команду, чтобы установить пароль" + +#: notebook/notebookapp.py:1143 +msgid "\t$ python -m notebook.auth password" +msgstr "\t$ python -m notebook.auth password" + +#: notebook/notebookapp.py:1181 +#, python-format +msgid "The port %i is already in use, trying another port." +msgstr "Порт %i уже используется, попробуйте другой порт." + +#: notebook/notebookapp.py:1184 +#, python-format +msgid "Permission to listen on port %i denied" +msgstr "Разрешение на прослушивание порта %i отклонено" + +#: notebook/notebookapp.py:1193 +msgid "" +"ERROR: the notebook server could not be started because no available port " +"could be found." +msgstr "" +"ОШИБКА: не удалось запустить сервер блокнота, так как не удалось найти " +"доступный порт." + +#: notebook/notebookapp.py:1199 +msgid "[all ip addresses on your system]" +msgstr "[все ip-адреса в вашей системе]" + +#: notebook/notebookapp.py:1223 +#, python-format +msgid "Terminals not available (error was %s)" +msgstr "Терминалы недоступны (ошибка: %s)" + +#: notebook/notebookapp.py:1259 +msgid "interrupted" +msgstr "прервано" + +#: notebook/notebookapp.py:1261 +msgid "y" +msgstr "д" + +#: notebook/notebookapp.py:1262 +msgid "n" +msgstr "н" + +#: notebook/notebookapp.py:1263 +#, python-format +msgid "Shutdown this notebook server (%s/[%s])? " +msgstr "Выключить этот сервер блокнотов (%s/[%s])? " + +#: notebook/notebookapp.py:1269 +msgid "Shutdown confirmed" +msgstr "Выключение подтверждено" + +#: notebook/notebookapp.py:1273 +msgid "No answer for 5s:" +msgstr "Нет ответа уже 5с:" + +#: notebook/notebookapp.py:1274 +msgid "resuming operation..." +msgstr "возобновить работу..." + +#: notebook/notebookapp.py:1282 +#, python-format +msgid "received signal %s, stopping" +msgstr "получен сигнал %s, остановка" + +#: notebook/notebookapp.py:1338 +#, python-format +msgid "Error loading server extension %s" +msgstr "Ошибка загрузки расширения сервера %s" + +#: notebook/notebookapp.py:1369 +#, python-format +msgid "Shutting down %d kernels" +msgstr "Выключить %d ядер" + +#: notebook/notebookapp.py:1375 +#, python-format +msgid "%d active kernel" +msgid_plural "%d active kernels" +msgstr[0] "%d активное ядро" +msgstr[1] "%d активных ядра" +msgstr[2] "%d активных ядер" + +#: notebook/notebookapp.py:1379 +#, python-format +msgid "" +"The Jupyter Notebook is running at:\n" +"\r%s" +msgstr "" +"Jupyter Notebook запущен на:\n" +"\r%s" + +#: notebook/notebookapp.py:1426 +msgid "Running as root is not recommended. Use --allow-root to bypass." +msgstr "" +"Запуск от имени root не рекомендуется. Используйте --allow-root для обхода." + +#: notebook/notebookapp.py:1432 +msgid "" +"Use Control-C to stop this server and shut down all kernels (twice to skip " +"confirmation)." +msgstr "" +"Используйте Control-C, для остановки этого сервера и выключения всех ядер " +"(дважды, чтобы пропустить подтверждение)." + +#: notebook/notebookapp.py:1434 +msgid "" +"Welcome to Project Jupyter! Explore the various tools available and their " +"corresponding documentation. If you are interested in contributing to the " +"platform, please visit the communityresources section at http://jupyter.org/" +"community.html." +msgstr "" +"Добро пожаловать в проект Jupyter! Изучите различные доступные инструменты и " +"соответствующую им документацию. Если вы заинтересованы в том, чтобы внести " +"свой вклад в платформу, пожалуйста, посетите раздел ресурсов сообщества по " +"адресу http://jupyter.org/community.html." + +#: notebook/notebookapp.py:1445 +#, python-format +msgid "No web browser found: %s." +msgstr "Веб-браузер не найден: %s." + +#: notebook/notebookapp.py:1450 +#, python-format +msgid "%s does not exist" +msgstr "%s не существует" + +#: notebook/notebookapp.py:1484 +msgid "Interrupted..." +msgstr "Прерывание..." + +#: notebook/services/contents/filemanager.py:506 +#, python-format +msgid "Serving notebooks from local directory: %s" +msgstr "Обслуживание блокнотов из локального каталога: %s" + +#: notebook/services/contents/manager.py:68 +msgid "Untitled" +msgstr "Без названия" diff --git a/nbclassic/i18n/zh_CN/LC_MESSAGES/nbjs.po b/nbclassic/i18n/zh_CN/LC_MESSAGES/nbjs.po new file mode 100644 index 000000000..0891ff5ad --- /dev/null +++ b/nbclassic/i18n/zh_CN/LC_MESSAGES/nbjs.po @@ -0,0 +1,1978 @@ +# Translations template for Jupyter. +# Copyright (C) 2017 ORGANIZATION +# This file is distributed under the same license as the Jupyter project. +# FIRST AUTHOR , 2017. +# +#, fuzzy +# Universal translation: cell=单元格; kernal=内核; don't translate notebook whenever referring to Jupyter Notebook +msgid "" +msgstr "" +"Project-Id-Version: Jupyter VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2017-08-25 02:53-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.5.0\n" + +#: notebook/static/base/js/dialog.js:161 +msgid "Manually edit the JSON below to manipulate the metadata for this cell." +msgstr "手动编辑下面的 JSON 代码来修改块元数据。" + +#: notebook/static/base/js/dialog.js:163 +msgid "Manually edit the JSON below to manipulate the metadata for this notebook." +msgstr "手动编辑下面的 JSON 代码来修改笔记本元数据。" + +#: notebook/static/base/js/dialog.js:165 +msgid " We recommend putting custom metadata attributes in an appropriately named substructure, so they don't conflict with those of others." +msgstr "我们建议将自定义的元数据属性放入适当的子结构中,这样就不会与其他的子结构发生冲突。" + +#: notebook/static/base/js/dialog.js:180 +msgid "Edit the metadata" +msgstr "编辑元数据" + +#: notebook/static/base/js/dialog.js:202 +msgid "Edit Notebook Metadata" +msgstr "编辑Notebook元数据" + +#: notebook/static/base/js/dialog.js:204 +msgid "Edit Cell Metadata" +msgstr "编辑单元格元数据" + +#: notebook/static/base/js/dialog.js:208 +#: notebook/static/notebook/js/notebook.js:485 +#: notebook/static/notebook/js/savewidget.js:71 +#: notebook/static/tree/js/notebooklist.js:863 +#: notebook/static/tree/js/notebooklist.js:1420 +msgid "Cancel" +msgstr "取消" + +#: notebook/static/base/js/dialog.js:208 +msgid "Edit" +msgstr "编辑" + +#: notebook/static/base/js/dialog.js:208 +#: notebook/static/notebook/js/kernelselector.js:278 +#: notebook/static/notebook/js/mathjaxutils.js:42 +#: notebook/static/notebook/js/notebook.js:479 +#: notebook/static/notebook/js/notificationarea.js:186 +#: notebook/static/notebook/js/savewidget.js:71 +#: notebook/static/tree/js/newnotebook.js:97 +#: notebook/static/tree/js/notebooklist.js:863 +msgid "OK" +msgstr "确定" + +#: notebook/static/base/js/dialog.js:208 +msgid "Apply" +msgstr "应用" + +#: notebook/static/base/js/dialog.js:225 +msgid "WARNING: Could not save invalid JSON." +msgstr "警告: 不能保存无效的JSON。" + +#: notebook/static/base/js/dialog.js:247 +msgid "There are no attachments for this cell." +msgstr "这个单元格没有附件。" + +#: notebook/static/base/js/dialog.js:250 +msgid "Current cell attachments" +msgstr "当前单元格附件" + +#: notebook/static/base/js/dialog.js:259 +#: notebook/static/notebook/js/celltoolbarpresets/attachments.js:46 +msgid "Attachments" +msgstr "附件" + +#: notebook/static/base/js/dialog.js:283 +msgid "Restore" +msgstr "重新保存" + +#: notebook/static/base/js/dialog.js:293 +#: notebook/static/tree/js/notebooklist.js:1022 +msgid "Delete" +msgstr "删除" + +#: notebook/static/base/js/dialog.js:342 notebook/static/base/js/dialog.js:386 +msgid "Edit attachments" +msgstr "编辑附件" + +#: notebook/static/base/js/dialog.js:348 +msgid "Edit Notebook Attachments" +msgstr "编辑笔记本附件" + +#: notebook/static/base/js/dialog.js:350 +msgid "Edit Cell Attachments" +msgstr "编辑单元格附件" + +#: notebook/static/base/js/dialog.js:373 +msgid "Select a file to insert." +msgstr "选择文件插入" + +#: notebook/static/base/js/dialog.js:399 +msgid "Select a file" +msgstr "选择文件" + +#: notebook/static/notebook/js/about.js:14 +msgid "You are using Jupyter notebook." +msgstr "您正在使用 Jupyter Notebook。" + +#: notebook/static/notebook/js/about.js:16 +msgid "The version of the notebook server is: " +msgstr "该 notebook 服务的版本是:" + +#: notebook/static/notebook/js/about.js:22 +msgid "The server is running on this version of Python:" +msgstr "该服务运行中使用的 Python 版本为:" + +#: notebook/static/notebook/js/about.js:25 +msgid "Waiting for kernel to be available..." +msgstr "等待内核可用..." + +#: notebook/static/notebook/js/about.js:27 +msgid "Server Information:" +msgstr "服务信息:" + +#: notebook/static/notebook/js/about.js:29 +msgid "Current Kernel Information:" +msgstr "当前内核信息:" + +#: notebook/static/notebook/js/about.js:32 +msgid "Could not access sys_info variable for version information." +msgstr "无法访问 sys_info 变量来获取版本信息。" + +#: notebook/static/notebook/js/about.js:34 +msgid "Cannot find sys_info!" +msgstr "找不到 sys_info!" + +#: notebook/static/notebook/js/about.js:38 +msgid "About Jupyter Notebook" +msgstr "关于 Jupyter Notebook" + +#: notebook/static/notebook/js/about.js:47 +msgid "unable to contact kernel" +msgstr "不能连接到内核" + +#: notebook/static/notebook/js/actions.js:69 +msgid "toggle rtl layout" +msgstr "切换 RTL 布局" + +#: notebook/static/notebook/js/actions.js:70 +msgid "Toggle the screen directionality between left-to-right and right-to-left" +msgstr "切换左至右或右至左的屏幕方向" + +#: notebook/static/notebook/js/actions.js:76 +msgid "edit command mode keyboard shortcuts" +msgstr "编辑命令模式键盘快捷键" + +#: notebook/static/notebook/js/actions.js:77 +msgid "Open a dialog to edit the command mode keyboard shortcuts" +msgstr "打开窗口来编辑快捷键" + +#: notebook/static/notebook/js/actions.js:97 +msgid "restart kernel" +msgstr "重启内核" + +#: notebook/static/notebook/js/actions.js:98 +msgid "restart the kernel (no confirmation dialog)" +msgstr "重启内核(无确认对话框)" + +#: notebook/static/notebook/js/actions.js:106 +msgid "confirm restart kernel" +msgstr "确定重启内核" + +#: notebook/static/notebook/js/actions.js:107 +msgid "restart the kernel (with dialog)" +msgstr "重启内核(带确认对话框)" + +#: notebook/static/notebook/js/actions.js:113 +msgid "restart kernel and run all cells" +msgstr "重启内核并且运行所有单元格" + +#: notebook/static/notebook/js/actions.js:114 +msgid "restart the kernel, then re-run the whole notebook (no confirmation dialog)" +msgstr "重启服务,然后重新运行整个笔记本(无确认对话框)" + +#: notebook/static/notebook/js/actions.js:120 +msgid "confirm restart kernel and run all cells" +msgstr "确认重启内核并且运行所有单元格" + +#: notebook/static/notebook/js/actions.js:121 +msgid "restart the kernel, then re-run the whole notebook (with dialog)" +msgstr "重启内核, 然后重新运行整个notebook(带确认对话框)" + +#: notebook/static/notebook/js/actions.js:127 +msgid "restart kernel and clear output" +msgstr "重启内核并且清空输出" + +#: notebook/static/notebook/js/actions.js:128 +msgid "restart the kernel and clear all output (no confirmation dialog)" +msgstr "重启内核并且清空所有输出(无确认对话框)" + +#: notebook/static/notebook/js/actions.js:134 +msgid "confirm restart kernel and clear output" +msgstr "确认重启内核并且清空输出" + +#: notebook/static/notebook/js/actions.js:135 +msgid "restart the kernel and clear all output (with dialog)" +msgstr "重启内核并且清空所有输出(带确认对话框)" + +#: notebook/static/notebook/js/actions.js:142 +#: notebook/static/notebook/js/actions.js:143 +msgid "interrupt the kernel" +msgstr "中断内核" + +#: notebook/static/notebook/js/actions.js:150 +msgid "run cell and select next" +msgstr "运行单元格并且选择下一个单元格" + +#: notebook/static/notebook/js/actions.js:152 +msgid "run cell, select below" +msgstr "运行单元格, 选择下面的单元格" + +#: notebook/static/notebook/js/actions.js:159 +#: notebook/static/notebook/js/actions.js:160 +msgid "run selected cells" +msgstr "运行选中的单元格" + +#: notebook/static/notebook/js/actions.js:167 +#: notebook/static/notebook/js/actions.js:168 +msgid "run cell and insert below" +msgstr "运行单元格并且在下面插入单元格" + +#: notebook/static/notebook/js/actions.js:175 +#: notebook/static/notebook/js/actions.js:176 +msgid "run all cells" +msgstr "运行所有的单元格" + +#: notebook/static/notebook/js/actions.js:183 +#: notebook/static/notebook/js/actions.js:184 +msgid "run all cells above" +msgstr "运行上面所有的单元格" + +#: notebook/static/notebook/js/actions.js:190 +#: notebook/static/notebook/js/actions.js:191 +msgid "run all cells below" +msgstr "运行下面所有的单元格" + +#: notebook/static/notebook/js/actions.js:197 +#: notebook/static/notebook/js/actions.js:198 +msgid "enter command mode" +msgstr "进入命令行模式" + +#: notebook/static/notebook/js/actions.js:205 +#: notebook/static/notebook/js/actions.js:206 +msgid "insert image" +msgstr "插入图片" + +#: notebook/static/notebook/js/actions.js:213 +#: notebook/static/notebook/js/actions.js:214 +msgid "cut cell attachments" +msgstr "剪切单元格的附件" + +#: notebook/static/notebook/js/actions.js:221 +#: notebook/static/notebook/js/actions.js:222 +msgid "copy cell attachments" +msgstr "复制单元格的附件" + +#: notebook/static/notebook/js/actions.js:229 +#: notebook/static/notebook/js/actions.js:230 +msgid "paste cell attachments" +msgstr "粘贴单元格的附件" + +#: notebook/static/notebook/js/actions.js:237 +#: notebook/static/notebook/js/actions.js:238 +msgid "split cell at cursor" +msgstr "在光标处分割单元格" + +#: notebook/static/notebook/js/actions.js:245 +#: notebook/static/notebook/js/actions.js:246 +msgid "enter edit mode" +msgstr "进入编辑模式" + +#: notebook/static/notebook/js/actions.js:253 +msgid "select previous cell" +msgstr "选择上一个单元格" + +#: notebook/static/notebook/js/actions.js:254 +msgid "select cell above" +msgstr "选择上面的单元格" + +#: notebook/static/notebook/js/actions.js:265 +msgid "select next cell" +msgstr "选择下一个单元格" + +#: notebook/static/notebook/js/actions.js:266 +msgid "select cell below" +msgstr "选择下面的单元格" + +#: notebook/static/notebook/js/actions.js:277 +msgid "extend selection above" +msgstr "扩展上面的单元格" + +#: notebook/static/notebook/js/actions.js:278 +msgid "extend selected cells above" +msgstr "扩展上面选择的单元格" + +#: notebook/static/notebook/js/actions.js:289 +msgid "extend selection below" +msgstr "扩展下面的单元格" + +#: notebook/static/notebook/js/actions.js:290 +msgid "extend selected cells below" +msgstr "扩展下面选择的单元格" + +#: notebook/static/notebook/js/actions.js:301 +#: notebook/static/notebook/js/actions.js:302 +msgid "cut selected cells" +msgstr "剪切选择的单元格" + +#: notebook/static/notebook/js/actions.js:312 +#: notebook/static/notebook/js/actions.js:313 +msgid "copy selected cells" +msgstr "复制选择的单元格" + +#: notebook/static/notebook/js/actions.js:327 +#: notebook/static/notebook/js/actions.js:328 +msgid "paste cells above" +msgstr "粘贴到上面" + +#: notebook/static/notebook/js/actions.js:335 +#: notebook/static/notebook/js/actions.js:336 +msgid "paste cells below" +msgstr "粘贴到下面" + +#: notebook/static/notebook/js/actions.js:344 +#: notebook/static/notebook/js/actions.js:345 +msgid "insert cell above" +msgstr "在上面插入单元格" + +#: notebook/static/notebook/js/actions.js:354 +#: notebook/static/notebook/js/actions.js:355 +msgid "insert cell below" +msgstr "在下面插入单元格" + +#: notebook/static/notebook/js/actions.js:365 +#: notebook/static/notebook/js/actions.js:366 +msgid "change cell to code" +msgstr "把单元格变成代码快" + +#: notebook/static/notebook/js/actions.js:373 +#: notebook/static/notebook/js/actions.js:374 +msgid "change cell to markdown" +msgstr "把单元格变成 Markdown" + +#: notebook/static/notebook/js/actions.js:381 +#: notebook/static/notebook/js/actions.js:382 +msgid "change cell to raw" +msgstr "清除单元格格式" + +#: notebook/static/notebook/js/actions.js:389 +#: notebook/static/notebook/js/actions.js:390 +msgid "change cell to heading 1" +msgstr "把单元格变成标题 1" + +#: notebook/static/notebook/js/actions.js:397 +#: notebook/static/notebook/js/actions.js:398 +msgid "change cell to heading 2" +msgstr "把单元格变成标题 2" + +#: notebook/static/notebook/js/actions.js:405 +#: notebook/static/notebook/js/actions.js:406 +msgid "change cell to heading 3" +msgstr "把单元格变成标题 3" + +#: notebook/static/notebook/js/actions.js:413 +#: notebook/static/notebook/js/actions.js:414 +msgid "change cell to heading 4" +msgstr "把单元格变成标题 4" + +#: notebook/static/notebook/js/actions.js:421 +#: notebook/static/notebook/js/actions.js:422 +msgid "change cell to heading 5" +msgstr "把单元格变成标题 5" + +#: notebook/static/notebook/js/actions.js:429 +#: notebook/static/notebook/js/actions.js:430 +msgid "change cell to heading 6" +msgstr "把单元格变成标题 6" + +#: notebook/static/notebook/js/actions.js:437 +msgid "toggle cell output" +msgstr "显示/隐藏单元格输出" + +#: notebook/static/notebook/js/actions.js:438 +msgid "toggle output of selected cells" +msgstr "显示/隐藏选定单元格的输出" + +#: notebook/static/notebook/js/actions.js:445 +msgid "toggle cell scrolling" +msgstr "切换单元格为滚动" + +#: notebook/static/notebook/js/actions.js:446 +msgid "toggle output scrolling of selected cells" +msgstr "切换选中单元格的输出为滚动" + +#: notebook/static/notebook/js/actions.js:453 +msgid "clear cell output" +msgstr "清空所有单元格输出" + +#: notebook/static/notebook/js/actions.js:454 +msgid "clear output of selected cells" +msgstr "清空已选择单元格的输出" + +#: notebook/static/notebook/js/actions.js:460 +msgid "move cells down" +msgstr "下移单元格" + +#: notebook/static/notebook/js/actions.js:461 +msgid "move selected cells down" +msgstr "下移选中单元格" + +#: notebook/static/notebook/js/actions.js:469 +msgid "move cells up" +msgstr "上移单元格" + +#: notebook/static/notebook/js/actions.js:470 +msgid "move selected cells up" +msgstr "上移选中单元格" + +#: notebook/static/notebook/js/actions.js:478 +#: notebook/static/notebook/js/actions.js:479 +msgid "toggle line numbers" +msgstr "切换行号" + +#: notebook/static/notebook/js/actions.js:486 +#: notebook/static/notebook/js/actions.js:487 +msgid "show keyboard shortcuts" +msgstr "显示键盘快捷键" + +#: notebook/static/notebook/js/actions.js:494 +msgid "delete cells" +msgstr "删除单元格" + +#: notebook/static/notebook/js/actions.js:495 +msgid "delete selected cells" +msgstr "删除选中单元格" + +#: notebook/static/notebook/js/actions.js:502 +#: notebook/static/notebook/js/actions.js:503 +msgid "undo cell deletion" +msgstr "撤销删除单元格" + +#: notebook/static/notebook/js/actions.js:512 +msgid "merge cell with previous cell" +msgstr "合并上一个单元格" + +#: notebook/static/notebook/js/actions.js:513 +msgid "merge cell above" +msgstr "合并上面的单元格" + +#: notebook/static/notebook/js/actions.js:519 +msgid "merge cell with next cell" +msgstr "合并下一个单元格" + +#: notebook/static/notebook/js/actions.js:520 +msgid "merge cell below" +msgstr "合并下面的单元格" + +#: notebook/static/notebook/js/actions.js:527 +#: notebook/static/notebook/js/actions.js:528 +msgid "merge selected cells" +msgstr "合并选中的单元格" + +#: notebook/static/notebook/js/actions.js:535 +msgid "merge cells" +msgstr "合并单元格" + +#: notebook/static/notebook/js/actions.js:536 +msgid "merge selected cells, or current cell with cell below if only one cell is selected" +msgstr "合并选中单元格, 如果只有一个单元格被选中" + +#: notebook/static/notebook/js/actions.js:549 +msgid "show command pallette" +msgstr "显示命令配置" + +#: notebook/static/notebook/js/actions.js:550 +msgid "open the command palette" +msgstr "打开命令配置" + +#: notebook/static/notebook/js/actions.js:557 +msgid "toggle all line numbers" +msgstr "切换所有行号" + +#: notebook/static/notebook/js/actions.js:558 +msgid "toggles line numbers in all cells, and persist the setting" +msgstr "在所有单元格中切换行号,并保持设置" + +#: notebook/static/notebook/js/actions.js:569 +msgid "show all line numbers" +msgstr "显示行号" + +#: notebook/static/notebook/js/actions.js:570 +msgid "show line numbers in all cells, and persist the setting" +msgstr "在所有单元格中显示行号,并保持设置" + +#: notebook/static/notebook/js/actions.js:579 +msgid "hide all line numbers" +msgstr "隐藏行号" + +#: notebook/static/notebook/js/actions.js:580 +msgid "hide line numbers in all cells, and persist the setting" +msgstr "隐藏行号并保持设置" + +#: notebook/static/notebook/js/actions.js:589 +msgid "toggle header" +msgstr "切换标题" + +#: notebook/static/notebook/js/actions.js:590 +msgid "switch between showing and hiding the header" +msgstr "切换显示和隐藏标题" + +#: notebook/static/notebook/js/actions.js:605 +#: notebook/static/notebook/js/actions.js:606 +msgid "show the header" +msgstr "显示标题" + +#: notebook/static/notebook/js/actions.js:615 +#: notebook/static/notebook/js/actions.js:616 +msgid "hide the header" +msgstr "隐藏标题" + +#: notebook/static/notebook/js/actions.js:646 +msgid "toggle toolbar" +msgstr "切换工具栏" + +#: notebook/static/notebook/js/actions.js:647 +msgid "switch between showing and hiding the toolbar" +msgstr "切换显示/隐藏工具栏" + +#: notebook/static/notebook/js/actions.js:660 +#: notebook/static/notebook/js/actions.js:661 +msgid "show the toolbar" +msgstr "显示工具栏" + +#: notebook/static/notebook/js/actions.js:669 +#: notebook/static/notebook/js/actions.js:670 +msgid "hide the toolbar" +msgstr "隐藏工具栏" + +#: notebook/static/notebook/js/actions.js:678 +#: notebook/static/notebook/js/actions.js:679 +msgid "close the pager" +msgstr "关闭分页器" + +#: notebook/static/notebook/js/actions.js:704 +msgid "ignore" +msgstr "忽略" + +#: notebook/static/notebook/js/actions.js:710 +#: notebook/static/notebook/js/actions.js:711 +msgid "move cursor up" +msgstr "光标上移" + +#: notebook/static/notebook/js/actions.js:731 +#: notebook/static/notebook/js/actions.js:732 +msgid "move cursor down" +msgstr "光标下移" + +#: notebook/static/notebook/js/actions.js:750 +#: notebook/static/notebook/js/actions.js:751 +msgid "scroll notebook down" +msgstr "向下滚动" + +#: notebook/static/notebook/js/actions.js:760 +#: notebook/static/notebook/js/actions.js:761 +msgid "scroll notebook up" +msgstr "向上滚动" + +#: notebook/static/notebook/js/actions.js:770 +msgid "scroll cell center" +msgstr "滚动单元格到中间" + +#: notebook/static/notebook/js/actions.js:771 +msgid "Scroll the current cell to the center" +msgstr "把当前单元格滚动到中间" + +#: notebook/static/notebook/js/actions.js:781 +msgid "scroll cell top" +msgstr "滚动单元格到顶" + +#: notebook/static/notebook/js/actions.js:782 +msgid "Scroll the current cell to the top" +msgstr "将当前单元格滚动到顶部" + +#: notebook/static/notebook/js/actions.js:792 +msgid "duplicate notebook" +msgstr "制作笔记本副本" + +#: notebook/static/notebook/js/actions.js:793 +msgid "Create and open a copy of the current notebook" +msgstr "创建并打开当前笔记本的一个副本" + +#: notebook/static/notebook/js/actions.js:799 +msgid "trust notebook" +msgstr "信任笔记本" + +#: notebook/static/notebook/js/actions.js:800 +msgid "Trust the current notebook" +msgstr "信任当前笔记本" + +#: notebook/static/notebook/js/actions.js:806 +msgid "rename notebook" +msgstr "重命名笔记本" + +#: notebook/static/notebook/js/actions.js:807 +msgid "Rename the current notebook" +msgstr "重命名当前笔记本" + +#: notebook/static/notebook/js/actions.js:813 +msgid "toggle all cells output collapsed" +msgstr "切换折叠所有单元格的输出" + +#: notebook/static/notebook/js/actions.js:814 +msgid "Toggle the hidden state of all output areas" +msgstr "切换所有输出区域的隐藏状态" + +#: notebook/static/notebook/js/actions.js:820 +msgid "toggle all cells output scrolled" +msgstr "切换所有单元格输出的滚动状态" + +#: notebook/static/notebook/js/actions.js:821 +msgid "Toggle the scrolling state of all output areas" +msgstr "切换所有输出区域的滚动状态" + +#: notebook/static/notebook/js/actions.js:828 +msgid "clear all cells output" +msgstr "清空所有单元格输出" + +#: notebook/static/notebook/js/actions.js:829 +msgid "Clear the content of all the outputs" +msgstr "清空所有的输出内容" + +#: notebook/static/notebook/js/actions.js:835 +msgid "save notebook" +msgstr "保存笔记本" + +#: notebook/static/notebook/js/actions.js:836 +msgid "Save and Checkpoint" +msgstr "保存并建立检查点" + +#: notebook/static/notebook/js/cell.js:79 +msgid "Warning: accessing Cell.cm_config directly is deprecated." +msgstr "警告: 直接访问 Cell.cm_config 已经被弃用了。" + +#: notebook/static/notebook/js/cell.js:763 +#, python-format +msgid "Unrecognized cell type: %s" +msgstr "未知的单元格类型: %s" + +#: notebook/static/notebook/js/cell.js:777 +msgid "Unrecognized cell type" +msgstr "未知的单元格类型" + +#: notebook/static/notebook/js/celltoolbar.js:296 +#, python-format +msgid "Error in cell toolbar callback %s" +msgstr "工具栏调用 %s 出现错误" + +#: notebook/static/notebook/js/clipboard.js:53 +#, python-format +msgid "Clipboard types: %s" +msgstr "剪贴板类型: %s" + +#: notebook/static/notebook/js/clipboard.js:96 +msgid "Dialog for paste from system clipboard" +msgstr "从系统剪切板粘贴" + +#: notebook/static/notebook/js/clipboard.js:109 +msgid "Ctrl-V" +msgstr "" + +#: notebook/static/notebook/js/clipboard.js:111 +msgid "Cmd-V" +msgstr "" + +#: notebook/static/notebook/js/clipboard.js:113 +#, python-format +msgid "Press %s again to paste" +msgstr "再按一次 %s 来粘贴" + +#: notebook/static/notebook/js/clipboard.js:116 +msgid "Why is this needed? " +msgstr "为什么需要它?" + +#: notebook/static/notebook/js/clipboard.js:118 +msgid "We can't get paste events in this browser without a text box. " +msgstr "在浏览器里没有文本框我们不能粘贴. " + +#: notebook/static/notebook/js/clipboard.js:119 +msgid "There's an invisible text box focused in this dialog." +msgstr "在这个对话框中有一个不可见的文本框." + +#: notebook/static/notebook/js/clipboard.js:125 +#, python-format +msgid "%s to paste" +msgstr "%s 来粘贴" + +#: notebook/static/notebook/js/codecell.js:310 +msgid "Can't execute cell since kernel is not set." +msgstr "当前不能执行单元格代码,因为内核还没有准备好。" + +#: notebook/static/notebook/js/codecell.js:481 +msgid "In" +msgstr "" + +#: notebook/static/notebook/js/kernelselector.js:269 +#, python-format +msgid "Could not find a kernel matching %s. Please select a kernel:" +msgstr "找不到匹配 %s 的内核。请选择一个内核:" + +#: notebook/static/notebook/js/kernelselector.js:278 +msgid "Continue Without Kernel" +msgstr "无内核继续运行" + +#: notebook/static/notebook/js/kernelselector.js:278 +msgid "Set Kernel" +msgstr "设置内核" + +#: notebook/static/notebook/js/kernelselector.js:281 +msgid "Kernel not found" +msgstr "找不到内核" + +#: notebook/static/notebook/js/kernelselector.js:319 +#: notebook/static/tree/js/newnotebook.js:99 +msgid "Creating Notebook Failed" +msgstr "创建笔记本失败" + +#: notebook/static/notebook/js/kernelselector.js:320 +#: notebook/static/tree/js/notebooklist.js:1362 +#, python-format +msgid "The error was: %s" +msgstr "错误: %s" + +#: notebook/static/notebook/js/maintoolbar.js:54 +msgid "Run" +msgstr "运行" + +#: notebook/static/notebook/js/maintoolbar.js:76 +msgid "Code" +msgstr "代码" + +#: notebook/static/notebook/js/maintoolbar.js:77 +msgid "Markdown" +msgstr "Markdown" + +#: notebook/static/notebook/js/maintoolbar.js:78 +msgid "Raw NBConvert" +msgstr "原生 NBConvert" + +#: notebook/static/notebook/js/maintoolbar.js:79 +msgid "Heading" +msgstr "标题" + +#: notebook/static/notebook/js/maintoolbar.js:115 +msgid "unrecognized cell type:" +msgstr "未识别的单元格类型:" + +#: notebook/static/notebook/js/mathjaxutils.js:45 +#, python-format +msgid "Failed to retrieve MathJax from '%s'" +msgstr "未能从 '%s' 中检索 MathJax" + +#: notebook/static/notebook/js/mathjaxutils.js:47 +msgid "Math/LaTeX rendering will be disabled." +msgstr "Math/LaTeX 渲染将被禁用。" + +#: notebook/static/notebook/js/menubar.js:220 +msgid "Trusted Notebook" +msgstr "可信的笔记本" + +#: notebook/static/notebook/js/menubar.js:226 +msgid "Trust Notebook" +msgstr "信任笔记本" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:16 +#: notebook/static/notebook/js/menubar.js:383 +msgid "None" +msgstr "无" + +#: notebook/static/notebook/js/menubar.js:406 +msgid "No checkpoints" +msgstr "没有检查点" + +#: notebook/static/notebook/js/menubar.js:465 +msgid "Opens in a new window" +msgstr "在新窗口打开" + +#: notebook/static/notebook/js/notebook.js:441 +msgid "Autosave in progress, latest changes may be lost." +msgstr "自动保存进行中,最新的改变可能会丢失。" + +#: notebook/static/notebook/js/notebook.js:443 +msgid "Unsaved changes will be lost." +msgstr "未保存的修改将会丢失。" + +#: notebook/static/notebook/js/notebook.js:448 +msgid "The Kernel is busy, outputs may be lost." +msgstr "内核正忙,输出也许会丢失。" + +#: notebook/static/notebook/js/notebook.js:471 +msgid "This notebook is version %1$s, but we only fully support up to %2$s." +msgstr "该笔记本使用了版本 %1$s,但是我们只支持到 %2$s." + +#: notebook/static/notebook/js/notebook.js:473 +msgid "You can still work with this notebook, but cell and output types introduced in later notebook versions will not be available." +msgstr "您仍然可以使用该笔记本,但是在新版本中引入的单元和输出类型将不可用。" + +#: notebook/static/notebook/js/notebook.js:480 +msgid "Restart and Run All Cells" +msgstr "重启并运行所有代码块" + +#: notebook/static/notebook/js/notebook.js:481 +msgid "Restart and Clear All Outputs" +msgstr "重启并清空所有输出" + +#: notebook/static/notebook/js/notebook.js:482 +msgid "Restart" +msgstr "重启" + +#: notebook/static/notebook/js/notebook.js:483 +msgid "Continue Running" +msgstr "继续运行" + +#: notebook/static/notebook/js/notebook.js:484 +msgid "Reload" +msgstr "重载" + +#: notebook/static/notebook/js/notebook.js:486 +msgid "Overwrite" +msgstr "重写" + +#: notebook/static/notebook/js/notebook.js:487 +msgid "Trust" +msgstr "信任" + +#: notebook/static/notebook/js/notebook.js:488 +msgid "Revert" +msgstr "恢复" + +#: notebook/static/notebook/js/notebook.js:493 +msgid "Newer Notebook" +msgstr "新笔记本" + +#: notebook/static/notebook/js/notebook.js:1558 +msgid "Use markdown headings" +msgstr "使用 Markdown 标题" + +#: notebook/static/notebook/js/notebook.js:1560 +msgid "Jupyter no longer uses special heading cells. Instead, write your headings in Markdown cells using # characters:" +msgstr "Jupyter 不再使用特殊的标题单元格。请在 Markdown 单元格中使用 # 字符来写标题:" + +#: notebook/static/notebook/js/notebook.js:1563 +msgid "## This is a level 2 heading" +msgstr "## 这是一个二级标题" + +#: notebook/static/notebook/js/notebook.js:2261 +msgid "Restart kernel and re-run the whole notebook?" +msgstr "重新启动内核并重新运行整个笔记本?" + +#: notebook/static/notebook/js/notebook.js:2263 +msgid "Are you sure you want to restart the current kernel and re-execute the whole notebook? All variables and outputs will be lost." +msgstr "您确定要重新启动当前的内核并重新执行整个笔记本吗?所有的变量和输出都将丢失。" + +#: notebook/static/notebook/js/notebook.js:2288 +msgid "Restart kernel and clear all output?" +msgstr "重启内核并且清空输出?" + +#: notebook/static/notebook/js/notebook.js:2290 +msgid "Do you want to restart the current kernel and clear all output? All variables and outputs will be lost." +msgstr "您是否希望重新启动当前的内核并清除所有输出?所有的变量和输出都将丢失。" + +#: notebook/static/notebook/js/notebook.js:2335 +msgid "Restart kernel?" +msgstr "重启内核?" + +#: notebook/static/notebook/js/notebook.js:2337 +msgid "Do you want to restart the current kernel? All variables will be lost." +msgstr "如果重启内核,所有变量都会丢失。是否重启?" + +#: notebook/static/notebook/js/notebook.js:2320 +msgid "Shutdown kernel?" +msgstr "关闭内核?" + +#: notebook/static/notebook/js/notebook.js:2322 +msgid "Do you want to shutdown the current kernel? All variables will be lost." +msgstr "如果关闭内核,所有变量都会丢失。是否关闭?" + +#: notebook/static/notebook/js/notebook.js:2750 +msgid "Notebook changed" +msgstr "笔记本改变了" + +#: notebook/static/notebook/js/notebook.js:2751 +msgid "The notebook file has changed on disk since the last time we opened or saved it. Do you want to overwrite the file on disk with the version open here, or load the version on disk (reload the page)?" +msgstr "自从上次我们打开或保存它以来,笔记本文件已经在磁盘上发生了变化。您希望用这里打开的版本覆盖磁盘上的版本,还是加载磁盘上的版本(刷新页面)?" + +#: notebook/static/notebook/js/notebook.js:2798 +#: notebook/static/notebook/js/notebook.js:3020 +msgid "Notebook validation failed" +msgstr "Notebook 校验失败" + +#: notebook/static/notebook/js/notebook.js:2801 +msgid "The save operation succeeded, but the notebook does not appear to be valid. The validation error was:" +msgstr "保存操作成功了,但是这个笔记本看起来并不有效。校验错误:" + +#: notebook/static/notebook/js/notebook.js:2852 +msgid "A trusted Jupyter notebook may execute hidden malicious code when you open it. Selecting trust will immediately reload this notebook in a trusted state. For more information, see the Jupyter security documentation: " +msgstr "当你打开一个可信任的 Jupyter 笔记本时,它可能会执行隐藏的恶意代码。选择信任将立即在一个可信的状态中重新加载这个笔记本。要了解更多信息,请参阅 Jupyter 安全文档:" + +#: notebook/static/notebook/js/notebook.js:2856 +msgid "here" +msgstr "这里" + +#: notebook/static/notebook/js/notebook.js:2864 +msgid "Trust this notebook?" +msgstr "信任这个笔记本?" + +#: notebook/static/notebook/js/notebook.js:3011 +msgid "Notebook failed to load" +msgstr "笔记本加载失败" + +#: notebook/static/notebook/js/notebook.js:3013 +msgid "The error was: " +msgstr "错误: " + +#: notebook/static/notebook/js/notebook.js:3017 +msgid "See the error console for details." +msgstr "有关详细信息,请参阅错误控制台。" + +#: notebook/static/notebook/js/notebook.js:3025 +msgid "The notebook also failed validation:" +msgstr "这个笔记本校验也失败了:" + +#: notebook/static/notebook/js/notebook.js:3027 +msgid "An invalid notebook may not function properly. The validation error was:" +msgstr "无效的笔记本可能无法正常运行。校验错误:" + +#: notebook/static/notebook/js/notebook.js:3066 +#, python-format +msgid "This notebook has been converted from an older notebook format to the current notebook format v(%s)." +msgstr "本笔记本已从较旧的笔记本格式转换为当前的笔记本格式 v(%s)。" + +#: notebook/static/notebook/js/notebook.js:3068 +#, python-format +msgid "This notebook has been converted from a newer notebook format to the current notebook format v(%s)." +msgstr "这个笔记本已经从一种新的笔记本格式转换为当前的笔记本格式 v(%s)。" + +#: notebook/static/notebook/js/notebook.js:3076 +msgid "The next time you save this notebook, the current notebook format will be used." +msgstr "下次你保存这个笔记本时,当前的笔记本格式将会被使用。" + +#: notebook/static/notebook/js/notebook.js:3081 +msgid "Older versions of Jupyter may not be able to read the new format." +msgstr "旧版本的 Jupyter 可能无法读取新格式。" + +#: notebook/static/notebook/js/notebook.js:3083 +msgid "Some features of the original notebook may not be available." +msgstr "原笔记本的一些特性可能无法使用。" + +#: notebook/static/notebook/js/notebook.js:3086 +msgid "To preserve the original version, close the notebook without saving it." +msgstr "为了保存原始版本,关闭笔记本而不保存它。" + +#: notebook/static/notebook/js/notebook.js:3091 +msgid "Notebook converted" +msgstr "已转换笔记本" + +#: notebook/static/notebook/js/notebook.js:3113 +msgid "(No name)" +msgstr "(没有名字)" + +#: notebook/static/notebook/js/notebook.js:3161 +#, python-format +msgid "An unknown error occurred while loading this notebook. This version can load notebook formats %s or earlier. See the server log for details." +msgstr "加载本笔记本时出现了一个未知的错误。这个版本可以加载 %s 或更早的笔记本。有关详细信息,请参阅服务器日志。" + +#: notebook/static/notebook/js/notebook.js:3172 +msgid "Error loading notebook" +msgstr "加载笔记本出错" + +#: notebook/static/notebook/js/notebook.js:3273 +msgid "Are you sure you want to revert the notebook to the latest checkpoint?" +msgstr "确定将笔记本恢复至最近的检查点?" + +#: notebook/static/notebook/js/notebook.js:3276 +msgid "This cannot be undone." +msgstr "该操作不能被还原。" + +#: notebook/static/notebook/js/notebook.js:3279 +msgid "The checkpoint was last updated at:" +msgstr "笔记本的最新检查点更新于:" + +#: notebook/static/notebook/js/notebook.js:3290 +msgid "Revert notebook to checkpoint" +msgstr "恢复笔记本至检查点" + +#: notebook/static/notebook/js/notificationarea.js:76 +#: notebook/static/notebook/js/tour.js:61 +#: notebook/static/notebook/js/tour.js:67 +msgid "Edit Mode" +msgstr "编辑模式" + +#: notebook/static/notebook/js/notificationarea.js:83 +#: notebook/static/notebook/js/notificationarea.js:87 +#: notebook/static/notebook/js/tour.js:54 +msgid "Command Mode" +msgstr "命令模式" + +#: notebook/static/notebook/js/notificationarea.js:94 +msgid "Kernel Created" +msgstr "内核已创建" + +#: notebook/static/notebook/js/notificationarea.js:98 +msgid "Connecting to kernel" +msgstr "正在连接内核" + +#: notebook/static/notebook/js/notificationarea.js:102 +msgid "Not Connected" +msgstr "未连接" + +#: notebook/static/notebook/js/notificationarea.js:105 +msgid "click to reconnect" +msgstr "点击重连" + +#: notebook/static/notebook/js/notificationarea.js:114 +msgid "Restarting kernel" +msgstr "重启内核" + +#: notebook/static/notebook/js/notificationarea.js:128 +msgid "Kernel Restarting" +msgstr "内核正在重启" + +#: notebook/static/notebook/js/notificationarea.js:129 +msgid "The kernel appears to have died. It will restart automatically." +msgstr "内核似乎挂掉了,它很快将自动重启。" + +#: notebook/static/notebook/js/notificationarea.js:139 +#: notebook/static/notebook/js/notificationarea.js:197 +#: notebook/static/notebook/js/notificationarea.js:217 +msgid "Dead kernel" +msgstr "挂掉的内核" + +#: notebook/static/notebook/js/notificationarea.js:140 +#: notebook/static/notebook/js/notificationarea.js:218 +#: notebook/static/notebook/js/notificationarea.js:265 +msgid "Kernel Dead" +msgstr "内核挂掉" + +#: notebook/static/notebook/js/notificationarea.js:144 +msgid "Interrupting kernel" +msgstr "正在中断内核" + +#: notebook/static/notebook/js/notificationarea.js:150 +msgid "No Connection to Kernel" +msgstr "没有连接到内核" + +#: notebook/static/notebook/js/notificationarea.js:160 +msgid "A connection to the notebook server could not be established. The notebook will continue trying to reconnect. Check your network connection or notebook server configuration." +msgstr "无法建立到笔记本服务器的连接。 我们会继续尝试重连。请检查网络连接还有服务配置。" + +#: notebook/static/notebook/js/notificationarea.js:165 +msgid "Connection failed" +msgstr "连接失败" + +#: notebook/static/notebook/js/notificationarea.js:178 +msgid "No kernel" +msgstr "没有内核" + +#: notebook/static/notebook/js/notificationarea.js:179 +msgid "Kernel is not running" +msgstr "内核没有运行" + +#: notebook/static/notebook/js/notificationarea.js:186 +msgid "Don't Restart" +msgstr "不要重启" + +#: notebook/static/notebook/js/notificationarea.js:186 +msgid "Try Restarting Now" +msgstr "现在尝试重启" + +#: notebook/static/notebook/js/notificationarea.js:190 +msgid "The kernel has died, and the automatic restart has failed. It is possible the kernel cannot be restarted. If you are not able to restart the kernel, you will still be able to save the notebook, but running code will no longer work until the notebook is reopened." +msgstr "内核已经死亡,自动重启也失败了。可能是内核不能重新启动。如果您不能重新启动内核,您仍然能够保存笔记本,但笔记本要重新打开才能运行代码。" + +#: notebook/static/notebook/js/notificationarea.js:224 +msgid "No Kernel" +msgstr "没有内核" + +#: notebook/static/notebook/js/notificationarea.js:251 +msgid "Failed to start the kernel" +msgstr "启动内核失败" + +#: notebook/static/notebook/js/notificationarea.js:271 +#: notebook/static/notebook/js/notificationarea.js:291 +#: notebook/static/notebook/js/notificationarea.js:305 +msgid "Kernel Busy" +msgstr "内核正忙" + +#: notebook/static/notebook/js/notificationarea.js:272 +msgid "Kernel starting, please wait..." +msgstr "内核正在启动,请等待..." + +#: notebook/static/notebook/js/notificationarea.js:278 +#: notebook/static/notebook/js/notificationarea.js:285 +msgid "Kernel Idle" +msgstr "内核空闲" + +#: notebook/static/notebook/js/notificationarea.js:279 +msgid "Kernel ready" +msgstr "内核就绪" + +#: notebook/static/notebook/js/notificationarea.js:296 +msgid "Using kernel: " +msgstr "使用内核:" + +#: notebook/static/notebook/js/notificationarea.js:297 +msgid "Only candidate for language: %1$s was %2$s." +msgstr "只支持语言: %1$s - %2$s." + +#: notebook/static/notebook/js/notificationarea.js:318 +msgid "Loading notebook" +msgstr "加载笔记本" + +#: notebook/static/notebook/js/notificationarea.js:321 +msgid "Notebook loaded" +msgstr "笔记本已加载" + +#: notebook/static/notebook/js/notificationarea.js:324 +msgid "Saving notebook" +msgstr "保存笔记本" + +#: notebook/static/notebook/js/notificationarea.js:327 +msgid "Notebook saved" +msgstr "笔记本已保存" + +#: notebook/static/notebook/js/notificationarea.js:330 +msgid "Notebook save failed" +msgstr "笔记本保存失败" + +#: notebook/static/notebook/js/notificationarea.js:333 +msgid "Notebook copy failed" +msgstr "笔记本复制失败" + +#: notebook/static/notebook/js/notificationarea.js:338 +msgid "Checkpoint created" +msgstr "检查点已创建" + +#: notebook/static/notebook/js/notificationarea.js:346 +msgid "Checkpoint failed" +msgstr "检查点创建失败" + +#: notebook/static/notebook/js/notificationarea.js:349 +msgid "Checkpoint deleted" +msgstr "检查点已删除" + +#: notebook/static/notebook/js/notificationarea.js:352 +msgid "Checkpoint delete failed" +msgstr "检查点删除失败" + +#: notebook/static/notebook/js/notificationarea.js:355 +msgid "Restoring to checkpoint..." +msgstr "正在恢复至检查点..." + +#: notebook/static/notebook/js/notificationarea.js:358 +msgid "Checkpoint restore failed" +msgstr "检查点恢复失败" + +#: notebook/static/notebook/js/notificationarea.js:363 +msgid "Autosave disabled" +msgstr "自动保存失败" + +#: notebook/static/notebook/js/notificationarea.js:366 +#, python-format +msgid "Saving every %d sec." +msgstr "每隔 %s 秒保存一次。" + +#: notebook/static/notebook/js/notificationarea.js:382 +msgid "Trusted" +msgstr "可信" + +#: notebook/static/notebook/js/notificationarea.js:384 +msgid "Not Trusted" +msgstr "不可信" + +#: notebook/static/notebook/js/outputarea.js:85 +msgid "click to expand output" +msgstr "点击展开输出" + +#: notebook/static/notebook/js/outputarea.js:89 +msgid "click to expand output; double click to hide output" +msgstr "点击展开输出;双击隐藏输出" + +#: notebook/static/notebook/js/outputarea.js:177 +msgid "click to unscroll output; double click to hide" +msgstr "单击取消滚动输出;双击隐藏" + +#: notebook/static/notebook/js/outputarea.js:184 +msgid "click to scroll output; double click to hide" +msgstr "点击滚动输出;双击隐藏" + +#: notebook/static/notebook/js/outputarea.js:434 +msgid "Javascript error adding output!" +msgstr "添加输出时 Javascript 出错了!" + +#: notebook/static/notebook/js/outputarea.js:439 +msgid "See your browser Javascript console for more details." +msgstr "更多细节请参见您的浏览器 Javascript 控制台。" + +#: notebook/static/notebook/js/outputarea.js:480 +#, python-format +msgid "Out[%d]:" +msgstr "" + +#: notebook/static/notebook/js/outputarea.js:589 +#, python-format +msgid "Unrecognized output: %s" +msgstr "未识别的输出: %s" + +#: notebook/static/notebook/js/pager.js:36 +msgid "Open the pager in an external window" +msgstr "在外部窗口打开分页器" + +#: notebook/static/notebook/js/pager.js:45 +msgid "Close the pager" +msgstr "关闭分页器" + +#: notebook/static/notebook/js/pager.js:148 +msgid "Jupyter Pager" +msgstr "Jupyter 分页器" + +#: notebook/static/notebook/js/quickhelp.js:39 +#: notebook/static/notebook/js/quickhelp.js:54 +#: notebook/static/notebook/js/quickhelp.js:55 +msgid "go to cell start" +msgstr "跳到单元格起始处" + +#: notebook/static/notebook/js/quickhelp.js:40 +#: notebook/static/notebook/js/quickhelp.js:56 +#: notebook/static/notebook/js/quickhelp.js:57 +msgid "go to cell end" +msgstr "跳到单元格最后" + +#: notebook/static/notebook/js/quickhelp.js:41 +#: notebook/static/notebook/js/quickhelp.js:58 +msgid "go one word left" +msgstr "往左跳一个单词" + +#: notebook/static/notebook/js/quickhelp.js:42 +#: notebook/static/notebook/js/quickhelp.js:59 +msgid "go one word right" +msgstr "往右跳一个单词" + +#: notebook/static/notebook/js/quickhelp.js:43 +#: notebook/static/notebook/js/quickhelp.js:60 +msgid "delete word before" +msgstr "删除前面的单词" + +#: notebook/static/notebook/js/quickhelp.js:44 +#: notebook/static/notebook/js/quickhelp.js:61 +msgid "delete word after" +msgstr "删除后面的单词" + +#: notebook/static/notebook/js/quickhelp.js:45 +#: notebook/static/notebook/js/quickhelp.js:62 +msgid "redo" +msgstr "重做" + +#: notebook/static/notebook/js/quickhelp.js:46 +#: notebook/static/notebook/js/quickhelp.js:63 +msgid "redo selection" +msgstr "重新选择" + +#: notebook/static/notebook/js/quickhelp.js:47 +msgid "emacs-style line kill" +msgstr "Emacs 风格的 Line Kill" + +#: notebook/static/notebook/js/quickhelp.js:48 +msgid "delete line left of cursor" +msgstr "删除光标左边一行" + +#: notebook/static/notebook/js/quickhelp.js:49 +msgid "delete line right of cursor" +msgstr "删除光标右边一行" + +#: notebook/static/notebook/js/quickhelp.js:68 +msgid "code completion or indent" +msgstr "代码补全或缩进" + +#: notebook/static/notebook/js/quickhelp.js:69 +msgid "tooltip" +msgstr "工具提示" + +#: notebook/static/notebook/js/quickhelp.js:70 +msgid "indent" +msgstr "缩进" + +#: notebook/static/notebook/js/quickhelp.js:71 +msgid "dedent" +msgstr "取消缩进" + +#: notebook/static/notebook/js/quickhelp.js:72 +msgid "select all" +msgstr "全选" + +#: notebook/static/notebook/js/quickhelp.js:73 +msgid "undo" +msgstr "撤销" + +#: notebook/static/notebook/js/quickhelp.js:74 +msgid "comment" +msgstr "注释" + +#: notebook/static/notebook/js/quickhelp.js:75 +msgid "delete whole line" +msgstr "删除整行" + +#: notebook/static/notebook/js/quickhelp.js:76 +msgid "undo selection" +msgstr "撤销选择" + +#: notebook/static/notebook/js/quickhelp.js:77 +msgid "toggle overwrite flag" +msgstr "切换重写标志" + +#: notebook/static/notebook/js/quickhelp.js:111 +#: notebook/static/notebook/js/quickhelp.js:252 +msgid "Shift" +msgstr "Shift" + +#: notebook/static/notebook/js/quickhelp.js:112 +msgid "Alt" +msgstr "Alt" + +#: notebook/static/notebook/js/quickhelp.js:113 +msgid "Up" +msgstr "上" + +#: notebook/static/notebook/js/quickhelp.js:114 +msgid "Down" +msgstr "下" + +#: notebook/static/notebook/js/quickhelp.js:115 +msgid "Left" +msgstr "左" + +#: notebook/static/notebook/js/quickhelp.js:116 +msgid "Right" +msgstr "右" + +#: notebook/static/notebook/js/quickhelp.js:117 +#: notebook/static/notebook/js/quickhelp.js:255 +msgid "Tab" +msgstr "Tab" + +#: notebook/static/notebook/js/quickhelp.js:118 +msgid "Caps Lock" +msgstr "大写锁定" + +#: notebook/static/notebook/js/quickhelp.js:119 +#: notebook/static/notebook/js/quickhelp.js:278 +msgid "Esc" +msgstr "Esc" + +#: notebook/static/notebook/js/quickhelp.js:120 +msgid "Ctrl" +msgstr "Ctrl" + +#: notebook/static/notebook/js/quickhelp.js:121 +#: notebook/static/notebook/js/quickhelp.js:299 +msgid "Enter" +msgstr "Enter" + +#: notebook/static/notebook/js/quickhelp.js:122 +msgid "Page Up" +msgstr "上一页" + +#: notebook/static/notebook/js/quickhelp.js:123 +#: notebook/static/notebook/js/quickhelp.js:139 +msgid "Page Down" +msgstr "下一页" + +#: notebook/static/notebook/js/quickhelp.js:124 +msgid "Home" +msgstr "Home" + +#: notebook/static/notebook/js/quickhelp.js:125 +msgid "End" +msgstr "End" + +#: notebook/static/notebook/js/quickhelp.js:126 +#: notebook/static/notebook/js/quickhelp.js:254 +msgid "Space" +msgstr "空格" + +#: notebook/static/notebook/js/quickhelp.js:127 +msgid "Backspace" +msgstr "退格" + +#: notebook/static/notebook/js/quickhelp.js:128 +msgid "Minus" +msgstr "" + +#: notebook/static/notebook/js/quickhelp.js:139 +msgid "PageUp" +msgstr "上一页" + +#: notebook/static/notebook/js/quickhelp.js:206 +msgid "The Jupyter Notebook has two different keyboard input modes." +msgstr "Jupyter 笔记本有两种不同的键盘输入模式。" + +#: notebook/static/notebook/js/quickhelp.js:208 +msgid "Edit mode allows you to type code or text into a cell and is indicated by a green cell border." +msgstr "编辑模式允许您将代码或文本输入到一个单元格中,并通过一个绿色边框的单元格来表示" + +#: notebook/static/notebook/js/quickhelp.js:210 +msgid "Command mode binds the keyboard to notebook level commands and is indicated by a grey cell border with a blue left margin." +msgstr "命令模式将键盘与笔记本级命令绑定在一起,并通过一个灰框、左边距蓝色的单元格显示。" + +#: notebook/static/notebook/js/quickhelp.js:231 +#: notebook/static/notebook/js/tooltip.js:58 +#: notebook/static/notebook/js/tooltip.js:69 +msgid "Close" +msgstr "关闭" + +#: notebook/static/notebook/js/quickhelp.js:234 +msgid "Keyboard shortcuts" +msgstr "键盘快捷键" + +#: notebook/static/notebook/js/quickhelp.js:249 +msgid "Command" +msgstr "命令" + +#: notebook/static/notebook/js/quickhelp.js:250 +msgid "Control" +msgstr "控制" + +#: notebook/static/notebook/js/quickhelp.js:251 +msgid "Option" +msgstr "选项" + +#: notebook/static/notebook/js/quickhelp.js:253 +msgid "Return" +msgstr "返回" + +#: notebook/static/notebook/js/quickhelp.js:279 +#, python-format +msgid "Command Mode (press %s to enable)" +msgstr "命令行模式(按 %s 生效)" + +#: notebook/static/notebook/js/quickhelp.js:281 +msgid "Edit Shortcuts" +msgstr "编辑快捷键" + +#: notebook/static/notebook/js/quickhelp.js:284 +msgid "edit command-mode keyboard shortcuts" +msgstr "编辑命令模式键盘快捷键" + +#: notebook/static/notebook/js/quickhelp.js:301 +#, python-format +msgid "Edit Mode (press %s to enable)" +msgstr "编辑模式(按 %s 生效)" + +#: notebook/static/notebook/js/savewidget.js:49 +msgid "Autosave Failed!" +msgstr "自动保存失败!" + +#: notebook/static/notebook/js/savewidget.js:71 +#: notebook/static/tree/js/notebooklist.js:850 +#: notebook/static/tree/js/notebooklist.js:863 +msgid "Rename" +msgstr "重命名" + +#: notebook/static/notebook/js/savewidget.js:78 +#: notebook/static/tree/js/notebooklist.js:841 +msgid "Enter a new notebook name:" +msgstr "请输入新的笔记本名称:" + +#: notebook/static/notebook/js/savewidget.js:86 +msgid "Rename Notebook" +msgstr "重命名笔记本" + +#: notebook/static/notebook/js/savewidget.js:98 +msgid "Invalid notebook name. Notebook names must have 1 or more characters and can contain any characters except :/\\. Please enter a new notebook name:" +msgstr "无效的笔记本名称。笔记本名称不能为空,并且不能包含\":/.\"。请输入一个新的笔记本名称:" + +#: notebook/static/notebook/js/savewidget.js:103 +msgid "Renaming..." +msgstr "正在重命名…" + +#: notebook/static/notebook/js/savewidget.js:109 +msgid "Unknown error" +msgstr "未知错误" + +#: notebook/static/notebook/js/savewidget.js:178 +msgid "no checkpoint" +msgstr "没有检查点" + +#: notebook/static/notebook/js/savewidget.js:193 +#, python-format +msgid "Last Checkpoint: %s" +msgstr "最新检查点: %s " + +#: notebook/static/notebook/js/savewidget.js:217 +msgid "(unsaved changes)" +msgstr "(更改未保存)" + +#: notebook/static/notebook/js/savewidget.js:219 +msgid "(autosaved)" +msgstr "(已自动保存)" + +#: notebook/static/notebook/js/searchandreplace.js:71 +#, python-format +msgid "Warning: too many matches (%d). Some changes might not be shown or applied." +msgstr "警告:太多的匹配(%d)。有些更改可能不会被显示或应用." + +#: notebook/static/notebook/js/searchandreplace.js:74 +#, python-format +msgid "%d match" +msgid_plural "%d matches" +msgstr[0] "%d 匹配" +msgstr[1] "%d 匹配" + +#: notebook/static/notebook/js/searchandreplace.js:141 +msgid "More than 100 matches, aborting" +msgstr "超过 100 个匹配, 中止" + +#: notebook/static/notebook/js/searchandreplace.js:161 +msgid "Use regex (JavaScript regex syntax)" +msgstr "使用正则表达式(JavaScript 正则表达式语法)" + +#: notebook/static/notebook/js/searchandreplace.js:169 +msgid "Replace in selected cells" +msgstr "在选中单元格中替换" + +#: notebook/static/notebook/js/searchandreplace.js:176 +msgid "Match case" +msgstr "匹配大小写" + +#: notebook/static/notebook/js/searchandreplace.js:182 +msgid "Find" +msgstr "查找" + +#: notebook/static/notebook/js/searchandreplace.js:198 +msgid "Replace" +msgstr "替换" + +#: notebook/static/notebook/js/searchandreplace.js:244 +msgid "No matches, invalid or empty regular expression" +msgstr "无匹配,表达式无效或表达式为空" + +#: notebook/static/notebook/js/searchandreplace.js:348 +msgid "Replace All" +msgstr "全部替换" + +#: notebook/static/notebook/js/searchandreplace.js:352 +msgid "Find and Replace" +msgstr "查找并且替换" + +#: notebook/static/notebook/js/searchandreplace.js:377 +#: notebook/static/notebook/js/searchandreplace.js:378 +msgid "find and replace" +msgstr "查找并且替换" + +#: notebook/static/notebook/js/textcell.js:559 +msgid "Write raw LaTeX or other formats here, for use with nbconvert. It will not be rendered in the notebook. When passing through nbconvert, a Raw Cell's content is added to the output unmodified." +msgstr "在这里直接写 LaTeX 或者其它格式的文本来配合 nbconvert。笔记本不会渲染它。传给 nbconvert 时,原始单元格的内容会被完好地加进输出。" + +#: notebook/static/notebook/js/tooltip.js:41 +msgid "Grow the tooltip vertically (press shift-tab twice)" +msgstr "纵向展开工具提示(按两次 Shift+Tab)" + +#: notebook/static/notebook/js/tooltip.js:48 +msgid "show the current docstring in pager (press shift-tab 4 times)" +msgstr "在分页器中显示当前的文档字符串(按四次 Shift+Tab)" + +#: notebook/static/notebook/js/tooltip.js:49 +msgid "Open in Pager" +msgstr "在分页器中打开" + +#: notebook/static/notebook/js/tooltip.js:68 +msgid "Tooltip will linger for 10 seconds while you type" +msgstr "当您键入时,工具提示会停留十秒" + +#: notebook/static/notebook/js/tour.js:27 +msgid "Welcome to the Notebook Tour" +msgstr "欢迎来到 Notebook 导览" + +#: notebook/static/notebook/js/tour.js:30 +msgid "You can use the left and right arrow keys to go backwards and forwards." +msgstr "你可以使用左右箭头键来前后移动" + +#: notebook/static/notebook/js/tour.js:33 +msgid "Filename" +msgstr "文件名" + +#: notebook/static/notebook/js/tour.js:35 +msgid "Click here to change the filename for this notebook." +msgstr "点击这里修改笔记本的文件名" + +#: notebook/static/notebook/js/tour.js:39 +msgid "Notebook Menubar" +msgstr "笔记本菜单栏" + +#: notebook/static/notebook/js/tour.js:40 +msgid "The menubar has menus for actions on the notebook, its cells, and the kernel it communicates with." +msgstr "菜单栏上的菜单可以用来操作笔记本、单元格和与笔记本通信的内核。" + +#: notebook/static/notebook/js/tour.js:44 +msgid "Notebook Toolbar" +msgstr "笔记本工具栏" + +#: notebook/static/notebook/js/tour.js:45 +msgid "The toolbar has buttons for the most common actions. Hover your mouse over each button for more information." +msgstr "工具栏有最常见操作的按钮。将鼠标悬停在每个按钮上以获得更多信息。" + +#: notebook/static/notebook/js/tour.js:48 +msgid "Mode Indicator" +msgstr "模式指示器" + +#: notebook/static/notebook/js/tour.js:50 +msgid "The Notebook has two modes: Edit Mode and Command Mode. In this area, an indicator can appear to tell you which mode you are in." +msgstr "笔记本有两种模式:编辑模式和命令模式。在这个区域,一个指示器可以显示你在哪个模式。" + +#: notebook/static/notebook/js/tour.js:58 +msgid "Right now you are in Command Mode, and many keyboard shortcuts are available. In this mode, no icon is displayed in the indicator area." +msgstr "现在你处于命令模式,许多快捷键都可以使用。在该模式下,指示区域中没有显示图标。" + +#: notebook/static/notebook/js/tour.js:64 +msgid "Pressing Enter or clicking in the input text area of the cell switches to Edit Mode." +msgstr "按下Enter或者点击输入文本区域来切换到编辑模式. " + +#: notebook/static/notebook/js/tour.js:70 +msgid "Notice that the border around the currently active cell changed color. Typing will insert text into the currently active cell." +msgstr "您会发现当前活动单元格周围的边框改变了颜色。键入将在当前活动单元格中插入文本." + +#: notebook/static/notebook/js/tour.js:73 +msgid "Back to Command Mode" +msgstr "回到命令模式" + +#: notebook/static/notebook/js/tour.js:76 +msgid "Pressing Esc or clicking outside of the input text area takes you back to Command Mode." +msgstr "按下Esc或者点击输入框外面来返回到命令模式。" + +#: notebook/static/notebook/js/tour.js:79 +msgid "Keyboard Shortcuts" +msgstr "键盘快捷键" + +#: notebook/static/notebook/js/tour.js:91 +msgid "You can click here to get a list of all of the keyboard shortcuts." +msgstr "点击这里获得所有键盘快捷键" + +#: notebook/static/notebook/js/tour.js:94 +#: notebook/static/notebook/js/tour.js:100 +msgid "Kernel Indicator" +msgstr "内核指示器" + +#: notebook/static/notebook/js/tour.js:97 +msgid "This is the Kernel indicator. It looks like this when the Kernel is idle." +msgstr "这是内核指示器。当内核空闲时,它看起来就像这样。" + +#: notebook/static/notebook/js/tour.js:103 +msgid "The Kernel indicator looks like this when the Kernel is busy." +msgstr "内核指示器在内核繁忙时看起来是这样的。" + +#: notebook/static/notebook/js/tour.js:107 +msgid "Interrupting the Kernel" +msgstr "内核中断" + +#: notebook/static/notebook/js/tour.js:109 +msgid "To cancel a computation in progress, you can click here." +msgstr "要取消正在进行的计算任务,您可以点击这里。" + +#: notebook/static/notebook/js/tour.js:114 +msgid "Notification Area" +msgstr "任务栏通知区" + +#: notebook/static/notebook/js/tour.js:115 +msgid "Messages in response to user actions (Save, Interrupt, etc.) appear here." +msgstr "响应用户操作(保存,中断等)的消息出现在这里。" + +#: notebook/static/notebook/js/tour.js:117 +msgid "End of Tour" +msgstr "结束导览" + +#: notebook/static/notebook/js/tour.js:120 +msgid "This concludes the Jupyter Notebook User Interface Tour." +msgstr "Jupyter 笔记本用户界面之旅到此为止。" + +#: notebook/static/notebook/js/celltoolbarpresets/attachments.js:32 +msgid "Edit Attachments" +msgstr "编辑附件" + +#: notebook/static/notebook/js/celltoolbarpresets/default.js:19 +msgid "Cell" +msgstr "单元格" + +#: notebook/static/notebook/js/celltoolbarpresets/default.js:29 +#: notebook/static/notebook/js/celltoolbarpresets/default.js:47 +msgid "Edit Metadata" +msgstr "编辑元数据" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:22 +msgid "Custom" +msgstr "自定义" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:32 +msgid "Set the MIME type of the raw cell:" +msgstr "设置原始单元格的 MIME 类型:" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:40 +msgid "Raw Cell MIME Type" +msgstr "原始单元格的 MIME 类型" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:74 +msgid "Raw NBConvert Format" +msgstr "原始 NBConvert 类型" + +#: notebook/static/notebook/js/celltoolbarpresets/rawcell.js:81 +msgid "Raw Cell Format" +msgstr "原始单元格格式" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:15 +msgid "Slide" +msgstr "幻灯片" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:16 +msgid "Sub-Slide" +msgstr "子幻灯片" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:17 +msgid "Fragment" +msgstr "碎片" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:18 +msgid "Skip" +msgstr "跳过" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:19 +msgid "Notes" +msgstr "代码" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:35 +msgid "Slide Type" +msgstr "幻灯片类型" + +#: notebook/static/notebook/js/celltoolbarpresets/slideshow.js:41 +msgid "Slideshow" +msgstr "幻灯片" + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:133 +msgid "Add tag" +msgstr "添加标签" + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:163 +msgid "Edit the list of tags below. All whitespace is treated as tag separators." +msgstr "编辑下面的标签列表。所有空格都被当作标记分隔符。" + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:172 +msgid "Edit the tags" +msgstr "编辑标签" + +#: notebook/static/notebook/js/celltoolbarpresets/tags.js:186 +msgid "Edit Tags" +msgstr "编辑标签" + +#: notebook/static/tree/js/kernellist.js:86 +#: notebook/static/tree/js/terminallist.js:105 +msgid "Shutdown" +msgstr "关闭" + +#: notebook/static/tree/js/newnotebook.js:70 +#, python-format +msgid "Create a new notebook with %s" +msgstr "创建新的笔记本 %s" + +#: notebook/static/tree/js/newnotebook.js:101 +msgid "An error occurred while creating a new notebook." +msgstr "创建新笔记本时出错。" + +#: notebook/static/tree/js/notebooklist.js:154 +msgid "Creating File Failed" +msgstr "创建文件失败" + +#: notebook/static/tree/js/notebooklist.js:156 +msgid "An error occurred while creating a new file." +msgstr "创建新文件时出错。" + +#: notebook/static/tree/js/notebooklist.js:174 +msgid "Creating Folder Failed" +msgstr "创建文件夹失败" + +#: notebook/static/tree/js/notebooklist.js:176 +msgid "An error occurred while creating a new folder." +msgstr "创建新文件夹时出错。" + +#: notebook/static/tree/js/notebooklist.js:271 +msgid "Failed to read file" +msgstr "读取文件失败" + +#: notebook/static/tree/js/notebooklist.js:272 +#, python-format +msgid "Failed to read file %s" +msgstr "读取文件 %s 失败了" + + +#: notebook/static/tree/js/notebooklist.js:283 +#, python-format +msgid "The file size is %d MB. Do you still want to upload it?" +msgstr "文件大小为 %d MB,依然上传?" + + +#: notebook/static/tree/js/notebooklist.js:286 +msgid "Large file size warning" +msgstr "请注意文件大小" + + +#: notebook/static/tree/js/notebooklist.js:355 +msgid "Server error: " +msgstr "服务出现错误:" + +#: notebook/static/tree/js/notebooklist.js:380 +msgid "The notebook list is empty." +msgstr "笔记本列表为空。" + + +#: notebook/static/tree/js/notebooklist.js:453 +msgid "Click here to rename, delete, etc." +msgstr "点击这里进行重命名或删除等操作" + + +#: notebook/static/tree/js/notebooklist.js:493 +msgid "Running" +msgstr "运行" + +#: notebook/static/tree/js/notebooklist.js:839 +msgid "Enter a new file name:" +msgstr "请输入一个新的文件名:" + + +#: notebook/static/tree/js/notebooklist.js:840 +msgid "Enter a new directory name:" +msgstr "请输入一个新的路径:" + + +#: notebook/static/tree/js/notebooklist.js:842 +msgid "Enter a new name:" +msgstr "请输入新名字:" + + +#: notebook/static/tree/js/notebooklist.js:847 +msgid "Rename file" +msgstr "文件重命名" + +#: notebook/static/tree/js/notebooklist.js:848 +msgid "Rename directory" +msgstr "重命名路径" + + +#: notebook/static/tree/js/notebooklist.js:849 +msgid "Rename notebook" +msgstr "重命名笔记本" + +#: notebook/static/tree/js/notebooklist.js:863 +msgid "Move" +msgstr "移动" + +#: notebook/static/tree/js/notebooklist.js:879 +msgid "An error occurred while renaming \"%1$s\" to \"%2$s\"." +msgstr "当把 \"%1$s\" 重命名为 \"%2$s\" 时出现错误." + +#: notebook/static/tree/js/notebooklist.js:882 +msgid "Rename Failed" +msgstr "重命名失败" + +#: notebook/static/tree/js/notebooklist.js:931 +#, python-format +msgid "Enter a new destination directory path for this item:" +msgid_plural "Enter a new destination directory path for these %d items:" +msgstr[0] "为笔记本选择一个新的路径:" +msgstr[1] "为选中的 %d 笔记本选择一个新的路径:" + +#: notebook/static/tree/js/notebooklist.js:944 +#, python-format +msgid "Move an Item" +msgid_plural "Move %d Items" +msgstr[0] "移动一个文件" +msgstr[1] "移动 %d 个文件" + +#: notebook/static/tree/js/notebooklist.js:963 +msgid "An error occurred while moving \"%1$s\" from \"%2$s\" to \"%3$s\"." +msgstr "当把 \"%1$s\" 从 \"%2$s\" 移动到 \"%3$s\" 时出现错误." + +#: notebook/static/tree/js/notebooklist.js:965 +msgid "Move Failed" +msgstr "移动失败" + +#: notebook/static/tree/js/notebooklist.js:1011 +#, python-format +msgid "Are you sure you want to permanently delete: \"%s\"?" +msgid_plural "Are you sure you want to permanently delete the %d files or folders selected?" +msgstr[0] "确定永久删除 \"%s\"?" +msgstr[1] "确定永久删除选中的 %d 个文件或文件夹?" + +#: notebook/static/tree/js/notebooklist.js:1039 +#, python-format +msgid "An error occurred while deleting \"%s\"." +msgstr "当删除 \"%s\" 时, 出现错误。" + +#: notebook/static/tree/js/notebooklist.js:1041 +msgid "Delete Failed" +msgstr "删除失败" + +#: notebook/static/tree/js/notebooklist.js:1079 +#, python-format +msgid "Are you sure you want to duplicate: \"%s\"?" +msgid_plural "Are you sure you want to duplicate the %d files selected?" +msgstr[0] "确定制作 \"%s\" 的副本?" +msgstr[1] "确定制作选中的 %d 个文件的副本?" + +#: notebook/static/tree/js/notebooklist.js:1089 +msgid "Duplicate" +msgstr "制作副本" + +#: notebook/static/tree/js/notebooklist.js:1103 +#, python-format +msgid "An error occurred while duplicating \"%s\"." +msgstr "制作 \"%s\" 的副本时出现错误。" + +#: notebook/static/tree/js/notebooklist.js:1105 +msgid "Duplicate Failed" +msgstr "制作副本失败" + +#: notebook/static/tree/js/notebooklist.js:1325 +msgid "Upload" +msgstr "上传" + +#: notebook/static/tree/js/notebooklist.js:1334 +msgid "Invalid file name" +msgstr "无效的文件名" + +#: notebook/static/tree/js/notebooklist.js:1335 +msgid "File names must be at least one character and not start with a period" +msgstr "文件名不能为空,并且不能以句号开始,除下划线以外的符号都不能开头" + +#: notebook/static/tree/js/notebooklist.js:1364 +msgid "Cannot upload invalid Notebook" +msgstr "无法上传无效的笔记本" + +#: notebook/static/tree/js/notebooklist.js:1397 +#, python-format +msgid "There is already a file named \"%s\". Do you want to replace it?" +msgstr "已经存在一个名为 \"%s\" 的文件,替换现有文件?" + +#: notebook/static/tree/js/notebooklist.js:1399 +msgid "Replace file" +msgstr "替换文件" + diff --git a/nbclassic/i18n/zh_CN/LC_MESSAGES/nbui.po b/nbclassic/i18n/zh_CN/LC_MESSAGES/nbui.po new file mode 100644 index 000000000..cfb5ed835 --- /dev/null +++ b/nbclassic/i18n/zh_CN/LC_MESSAGES/nbui.po @@ -0,0 +1,733 @@ +# Translations template for Jupyter. +# Copyright (C) 2017 ORGANIZATION +# This file is distributed under the same license as the Jupyter project. +# FIRST AUTHOR , 2017. +# +#, fuzzy +# Universal translation: cell=单元格; kernal=内核; don't translate notebook whenever referring to Jupyter Notebook +msgid "" +msgstr "" +"Project-Id-Version: Jupyter VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2017-08-25 02:53-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.5.0\n" + +#: notebook/templates/404.html:3 +msgid "You are requesting a page that does not exist!" +msgstr "您所请求的页面不存在!" + +#: notebook/templates/edit.html:37 +msgid "current mode" +msgstr "当前模式" + +#: notebook/templates/edit.html:48 notebook/templates/notebook.html:78 +msgid "File" +msgstr "文件" + +#: notebook/templates/edit.html:50 notebook/templates/tree.html:57 +msgid "New" +msgstr "新建" + +#: notebook/templates/edit.html:51 +msgid "Save" +msgstr "保存" + +#: notebook/templates/edit.html:52 notebook/templates/tree.html:36 +msgid "Rename" +msgstr "重命名" + +#: notebook/templates/edit.html:53 notebook/templates/tree.html:38 +msgid "Download" +msgstr "下载" + +#: notebook/templates/edit.html:56 notebook/templates/notebook.html:131 +#: notebook/templates/tree.html:41 +msgid "Edit" +msgstr "编辑" + +#: notebook/templates/edit.html:58 +msgid "Find" +msgstr "查找" + +#: notebook/templates/edit.html:59 +msgid "Find & Replace" +msgstr "查找 & 替换" + +#: notebook/templates/edit.html:61 +msgid "Key Map" +msgstr "键值对" + +#: notebook/templates/edit.html:62 +msgid "Default" +msgstr "默认" + +#: notebook/templates/edit.html:63 +msgid "Sublime Text" +msgstr "代码编辑器" + +#: notebook/templates/edit.html:68 notebook/templates/notebook.html:159 +#: notebook/templates/tree.html:40 +msgid "View" +msgstr "查看" + +#: notebook/templates/edit.html:70 notebook/templates/notebook.html:162 +msgid "Show/Hide the logo and notebook title (above menu bar)" +msgstr "显示/隐藏 标题和logo" + +#: notebook/templates/edit.html:71 notebook/templates/notebook.html:163 +msgid "Toggle Header" +msgstr "显示/隐藏 标题栏" + +#: notebook/templates/edit.html:72 notebook/templates/notebook.html:171 +msgid "Toggle Line Numbers" +msgstr "显示/隐藏 行号" + +#: notebook/templates/edit.html:75 +msgid "Language" +msgstr "语言" + +#: notebook/templates/error.html:23 +msgid "The error was:" +msgstr "错误:" + +#: notebook/templates/login.html:24 +msgid "Password or token:" +msgstr "密码或者token:" + +#: notebook/templates/login.html:26 +msgid "Password:" +msgstr "密码:" + +#: notebook/templates/login.html:31 +msgid "Log in" +msgstr "登录" + +#: notebook/templates/login.html:39 +msgid "No login available, you shouldn't be seeing this page." +msgstr "还没有登录,请先登录。" + +#: notebook/templates/logout.html:31 +#, python-format +msgid "Proceed to the dashboard" +msgstr "进入 指示板" + +#: notebook/templates/logout.html:33 +#, python-format +msgid "Proceed to the login page" +msgstr "进入 登录页面" + +#: notebook/templates/notebook.html:62 +msgid "Menu" +msgstr "菜单" + +#: notebook/templates/notebook.html:65 notebook/templates/notebook.html:254 +msgid "Kernel" +msgstr "内核" + +#: notebook/templates/notebook.html:68 +msgid "This notebook is read-only" +msgstr "这个notebook文件是只读的" + +#: notebook/templates/notebook.html:81 +msgid "New Notebook" +msgstr "新建Notebook" + +#: notebook/templates/notebook.html:85 +msgid "Opens a new window with the Dashboard view" +msgstr "以仪表盘视角打开新的窗口" + +#: notebook/templates/notebook.html:86 +msgid "Open..." +msgstr "打开..." + +#: notebook/templates/notebook.html:90 +msgid "Open a copy of this notebook's contents and start a new kernel" +msgstr "复制并打开当前notebook的内容,并启动一个新的内核" + +#: notebook/templates/notebook.html:91 +msgid "Make a Copy..." +msgstr "复制..." + +#: notebook/templates/notebook.html:92 +msgid "Rename..." +msgstr "重命名..." + +#: notebook/templates/notebook.html:93 +msgid "Save and Checkpoint" +msgstr "保存,且作为一个检查点" + +#: notebook/templates/notebook.html:96 +msgid "Revert to Checkpoint" +msgstr "恢复到某一个检查点" + +#: notebook/templates/notebook.html:106 +msgid "Print Preview" +msgstr "打印预览" + +#: notebook/templates/notebook.html:107 +msgid "Download as" +msgstr "另存为" + +#: notebook/templates/notebook.html:109 +msgid "Notebook (.ipynb)" +msgstr "Notebook (.ipynb)" + +#: notebook/templates/notebook.html:110 +msgid "Script" +msgstr "脚本" + +#: notebook/templates/notebook.html:111 +msgid "HTML (.html)" +msgstr "" + +#: notebook/templates/notebook.html:112 +msgid "Markdown (.md)" +msgstr "" + +#: notebook/templates/notebook.html:113 +msgid "reST (.rst)" +msgstr "" + +#: notebook/templates/notebook.html:114 +msgid "LaTeX (.tex)" +msgstr "" + +#: notebook/templates/notebook.html:115 +msgid "PDF via LaTeX (.pdf)" +msgstr "通过LaTeX生成的PDF (.pdf)" + +#: notebook/templates/notebook.html:118 +msgid "Deploy as" +msgstr "部署在" + +#: notebook/templates/notebook.html:123 +msgid "Trust the output of this notebook" +msgstr "信任当前notebook的输出" + +#: notebook/templates/notebook.html:124 +msgid "Trust Notebook" +msgstr "信任当前Notebook" + +#: notebook/templates/notebook.html:127 +msgid "Shutdown this notebook's kernel, and close this window" +msgstr "关闭当前notebook的内核,并关闭当前窗口" + +#: notebook/templates/notebook.html:128 +msgid "Close and Halt" +msgstr "关闭" + +#: notebook/templates/notebook.html:133 +msgid "Cut Cells" +msgstr "剪切单元格" + +#: notebook/templates/notebook.html:134 +msgid "Copy Cells" +msgstr "复制单元格" + +#: notebook/templates/notebook.html:135 +msgid "Paste Cells Above" +msgstr "粘贴单元格到上面" + +#: notebook/templates/notebook.html:136 +msgid "Paste Cells Below" +msgstr "粘贴单元格到下面" + +#: notebook/templates/notebook.html:137 +msgid "Paste Cells & Replace" +msgstr "粘贴单元格 & 替换" + +#: notebook/templates/notebook.html:138 +msgid "Delete Cells" +msgstr "删除单元格" + +#: notebook/templates/notebook.html:139 +msgid "Undo Delete Cells" +msgstr "撤销删除单元格" + +#: notebook/templates/notebook.html:141 +msgid "Split Cell" +msgstr "分割单元格" + +#: notebook/templates/notebook.html:142 +msgid "Merge Cell Above" +msgstr "合并上面的单元格" + +#: notebook/templates/notebook.html:143 +msgid "Merge Cell Below" +msgstr "合并下面的单元格" + +#: notebook/templates/notebook.html:145 +msgid "Move Cell Up" +msgstr "上移单元格" + +#: notebook/templates/notebook.html:146 +msgid "Move Cell Down" +msgstr "下移单元格" + +#: notebook/templates/notebook.html:148 +msgid "Edit Notebook Metadata" +msgstr "编辑Notebook的元数据" + +#: notebook/templates/notebook.html:150 +msgid "Find and Replace" +msgstr "查找并替换" + +#: notebook/templates/notebook.html:152 +msgid "Cut Cell Attachments" +msgstr "剪切附件" + +#: notebook/templates/notebook.html:153 +msgid "Copy Cell Attachments" +msgstr "复制附件" + +#: notebook/templates/notebook.html:154 +msgid "Paste Cell Attachments" +msgstr "粘贴附件" + +#: notebook/templates/notebook.html:156 +msgid "Insert Image" +msgstr "插入图片" + +#: notebook/templates/notebook.html:166 +msgid "Show/Hide the action icons (below menu bar)" +msgstr "显示/隐藏 操作图标" + +#: notebook/templates/notebook.html:167 +msgid "Toggle Toolbar" +msgstr "显示/隐藏 工具栏" + +#: notebook/templates/notebook.html:170 +msgid "Show/Hide line numbers in cells" +msgstr "显示/隐藏 当前单元格的行号" + +#: notebook/templates/notebook.html:174 +msgid "Cell Toolbar" +msgstr "单元格 工具栏" + +#: notebook/templates/notebook.html:179 +msgid "Insert" +msgstr "插入" + +#: notebook/templates/notebook.html:182 +msgid "Insert an empty Code cell above the currently active cell" +msgstr "在当前代码块上面插入一个空的单元格" + +#: notebook/templates/notebook.html:183 +msgid "Insert Cell Above" +msgstr "在上面插入一个单元格" + +#: notebook/templates/notebook.html:185 +msgid "Insert an empty Code cell below the currently active cell" +msgstr "在当前代码块下面插入一个空的单元格" + +#: notebook/templates/notebook.html:186 +msgid "Insert Cell Below" +msgstr "在下面插入一个单元格" + +#: notebook/templates/notebook.html:189 +msgid "Cell" +msgstr "单元格" + +#: notebook/templates/notebook.html:191 +msgid "Run this cell, and move cursor to the next one" +msgstr "运行此单元格,并将光标移到下一个" + +#: notebook/templates/notebook.html:192 +msgid "Run Cells" +msgstr "运行所有单元格" + +#: notebook/templates/notebook.html:193 +msgid "Run this cell, select below" +msgstr "运行此单元格,并自动选择下一个" + +#: notebook/templates/notebook.html:194 +msgid "Run Cells and Select Below" +msgstr "运行所有单元格,并自动选择下一个" + +#: notebook/templates/notebook.html:195 +msgid "Run this cell, insert below" +msgstr "运行此单元格,并在下面插入一个新的单元格" + +#: notebook/templates/notebook.html:196 +msgid "Run Cells and Insert Below" +msgstr "运行所有单元格,并在下面插入一个新的单元格" + +#: notebook/templates/notebook.html:197 +msgid "Run all cells in the notebook" +msgstr "运行所有的单元格" + +#: notebook/templates/notebook.html:198 +msgid "Run All" +msgstr "运行所有" + +#: notebook/templates/notebook.html:199 +msgid "Run all cells above (but not including) this cell" +msgstr "运行上面所有的单元格(但不包括这个单元格)" + +#: notebook/templates/notebook.html:200 +msgid "Run All Above" +msgstr "运行上面所有的单元格" + +#: notebook/templates/notebook.html:201 +msgid "Run this cell and all cells below it" +msgstr "运行当前及以下所有的单元格" + +#: notebook/templates/notebook.html:202 +msgid "Run All Below" +msgstr "运行下面的所有的单元格" + +#: notebook/templates/notebook.html:205 +msgid "All cells in the notebook have a cell type. By default, new cells are created as 'Code' cells" +msgstr "Notebook里的所有单元格都有一个类型。默认新单元格都会被创建为代码单元格" + +#: notebook/templates/notebook.html:206 +msgid "Cell Type" +msgstr "单元格类型" + +#: notebook/templates/notebook.html:209 +msgid "Contents will be sent to the kernel for execution, and output will display in the footer of cell" +msgstr "内容将被发送到内核执行,输出将显示在单元格的页脚" + +#: notebook/templates/notebook.html:212 +msgid "Contents will be rendered as HTML and serve as explanatory text" +msgstr "内容将以HTML形式呈现, 并作为解释性文本" + +#: notebook/templates/notebook.html:213 notebook/templates/notebook.html:298 +msgid "Markdown" +msgstr "" + +#: notebook/templates/notebook.html:215 +msgid "Contents will pass through nbconvert unmodified" +msgstr "内容将通过nbconvert且不会被修改" + +#: notebook/templates/notebook.html:216 +msgid "Raw NBConvert" +msgstr "原生 NBConvert" + +#: notebook/templates/notebook.html:220 +msgid "Current Outputs" +msgstr "当前输出" + +#: notebook/templates/notebook.html:223 +msgid "Hide/Show the output of the current cell" +msgstr "隐藏/显示当前单元格输出" + +#: notebook/templates/notebook.html:224 notebook/templates/notebook.html:240 +msgid "Toggle" +msgstr "显示/隐藏" + +#: notebook/templates/notebook.html:227 +msgid "Scroll the output of the current cell" +msgstr "滚动到当前单元格的输出" + +#: notebook/templates/notebook.html:228 notebook/templates/notebook.html:244 +msgid "Toggle Scrolling" +msgstr "滚动显示" + +#: notebook/templates/notebook.html:231 +msgid "Clear the output of the current cell" +msgstr "清除当前单元格的输出" + +#: notebook/templates/notebook.html:232 notebook/templates/notebook.html:248 +msgid "Clear" +msgstr "清空" + +#: notebook/templates/notebook.html:236 +msgid "All Output" +msgstr "所有输出" + +#: notebook/templates/notebook.html:239 +msgid "Hide/Show the output of all cells" +msgstr "隐藏/显示 所有单元格的输出" + +#: notebook/templates/notebook.html:243 +msgid "Scroll the output of all cells" +msgstr "切换所有单元格的输出为滚动模式" + +#: notebook/templates/notebook.html:247 +msgid "Clear the output of all cells" +msgstr "清空所有代码块的输出" + +#: notebook/templates/notebook.html:257 +msgid "Send Keyboard Interrupt (CTRL-C) to the Kernel" +msgstr "按下 CTRL-C 中断内核" + +#: notebook/templates/notebook.html:258 +msgid "Interrupt" +msgstr "中断" + +#: notebook/templates/notebook.html:261 +msgid "Restart the Kernel" +msgstr "重启内核" + +#: notebook/templates/notebook.html:262 +msgid "Restart" +msgstr "重启" + +#: notebook/templates/notebook.html:265 +msgid "Restart the Kernel and clear all output" +msgstr "重启服务并清空所有输出" + +#: notebook/templates/notebook.html:266 +msgid "Restart & Clear Output" +msgstr "重启 & 清空输出" + +#: notebook/templates/notebook.html:269 +msgid "Restart the Kernel and re-run the notebook" +msgstr "重启内核并且重新运行整个notebook" + +#: notebook/templates/notebook.html:270 +msgid "Restart & Run All" +msgstr "重启 & 运行所有" + +#: notebook/templates/notebook.html:273 +msgid "Reconnect to the Kernel" +msgstr "重连内核" + +#: notebook/templates/notebook.html:274 +msgid "Reconnect" +msgstr "重连" + +#: notebook/templates/notebook.html:282 +msgid "Change kernel" +msgstr "更换内核" + +#: notebook/templates/notebook.html:287 +msgid "Help" +msgstr "帮助" + +#: notebook/templates/notebook.html:290 +msgid "A quick tour of the notebook user interface" +msgstr "快速浏览一下notebook用户界面" + +#: notebook/templates/notebook.html:290 +msgid "User Interface Tour" +msgstr "用户界面之旅" + +#: notebook/templates/notebook.html:291 +msgid "Opens a tooltip with all keyboard shortcuts" +msgstr "打开包含所有快捷键的提示信息" + +#: notebook/templates/notebook.html:291 +msgid "Keyboard Shortcuts" +msgstr "快捷键" + +#: notebook/templates/notebook.html:292 +msgid "Opens a dialog allowing you to edit Keyboard shortcuts" +msgstr "打开对话框编辑快捷键" + +#: notebook/templates/notebook.html:292 +msgid "Edit Keyboard Shortcuts" +msgstr "编辑快捷键" + +#: notebook/templates/notebook.html:297 +msgid "Notebook Help" +msgstr "帮助" + +#: notebook/templates/notebook.html:303 +msgid "Opens in a new window" +msgstr "在新窗口打开" + +#: notebook/templates/notebook.html:319 +msgid "About Jupyter Notebook" +msgstr "关于本程序" + +#: notebook/templates/notebook.html:319 +msgid "About" +msgstr "关于" + +#: notebook/templates/page.html:114 +msgid "Jupyter Notebook requires JavaScript." +msgstr "Jupyter Notebook 需要 JavaScript。" + +#: notebook/templates/page.html:115 +msgid "Please enable it to proceed. " +msgstr "请启用它以继续。" + +#: notebook/templates/page.html:122 +msgid "dashboard" +msgstr "指示板" + +#: notebook/templates/page.html:135 +msgid "Logout" +msgstr "注销" + +#: notebook/templates/page.html:137 +msgid "Login" +msgstr "登录" + +#: notebook/templates/tree.html:23 +msgid "Files" +msgstr "文件" + +#: notebook/templates/tree.html:24 +msgid "Running" +msgstr "运行" + +#: notebook/templates/tree.html:25 +msgid "Clusters" +msgstr "集群" + +#: notebook/templates/tree.html:32 +msgid "Select items to perform actions on them." +msgstr "选择操作对象." + +#: notebook/templates/tree.html:35 +msgid "Duplicate selected" +msgstr "复制选中的对象" + +#: notebook/templates/tree.html:35 +msgid "Duplicate" +msgstr "复制" + +#: notebook/templates/tree.html:36 +msgid "Rename selected" +msgstr "重命名选中的对象" + +#: notebook/templates/tree.html:37 +msgid "Move selected" +msgstr "移动选中的对象" + +#: notebook/templates/tree.html:37 +msgid "Move" +msgstr "移动" + +#: notebook/templates/tree.html:38 +msgid "Download selected" +msgstr "下载选中的对象" + +#: notebook/templates/tree.html:39 +msgid "Shutdown selected notebook(s)" +msgstr "停止运行选择的notebook(s)" + +#: notebook/templates/notebook.html:278 +#: notebook/templates/tree.html:39 +msgid "Shutdown" +msgstr "关闭" + +#: notebook/templates/tree.html:40 +msgid "View selected" +msgstr "查看选中的对象" + +#: notebook/templates/tree.html:41 +msgid "Edit selected" +msgstr "编辑选中的对象" + +#: notebook/templates/tree.html:42 +msgid "Delete selected" +msgstr "删除选中的对象" + +#: notebook/templates/tree.html:50 +msgid "Click to browse for a file to upload." +msgstr "浏览文件并上传" + +#: notebook/templates/tree.html:51 +msgid "Upload" +msgstr "上传" + +#: notebook/templates/tree.html:65 +msgid "Text File" +msgstr "文本文件" + +#: notebook/templates/tree.html:68 +msgid "Folder" +msgstr "文件夹" + +#: notebook/templates/tree.html:72 +msgid "Terminal" +msgstr "终端" + +#: notebook/templates/tree.html:76 +msgid "Terminals Unavailable" +msgstr "终端不可用" + +#: notebook/templates/tree.html:82 +msgid "Refresh notebook list" +msgstr "刷新笔记列表" + +#: notebook/templates/tree.html:90 +msgid "Select All / None" +msgstr "全选 / 全不选" + +#: notebook/templates/tree.html:93 +msgid "Select..." +msgstr "选择..." + +#: notebook/templates/tree.html:98 +msgid "Select All Folders" +msgstr "选择所有文件夹" + +#: notebook/templates/tree.html:98 +msgid "Folders" +msgstr "文件夹" + +#: notebook/templates/tree.html:99 +msgid "Select All Notebooks" +msgstr "选择所有Notebooks" + +#: notebook/templates/tree.html:99 +msgid "All Notebooks" +msgstr "所有Notebooks" + +#: notebook/templates/tree.html:100 +msgid "Select Running Notebooks" +msgstr "选择运行中的Notebooks" + +#: notebook/templates/tree.html:100 +msgid "Running" +msgstr "运行" + +#: notebook/templates/tree.html:101 +msgid "Select All Files" +msgstr "选择所有文件" + +#: notebook/templates/tree.html:101 +msgid "Files" +msgstr "文件" + +#: notebook/templates/tree.html:114 +msgid "Last Modified" +msgstr "最后修改" + +#: notebook/templates/tree.html:120 +msgid "Name" +msgstr "名字" + +#: notebook/templates/tree.html:130 +msgid "Currently running Jupyter processes" +msgstr "当前运行Jupyter" + +#: notebook/templates/tree.html:134 +msgid "Refresh running list" +msgstr "刷新运行列表" + +#: notebook/templates/tree.html:150 +msgid "There are no terminals running." +msgstr "没有终端正在运行。" + +#: notebook/templates/tree.html:152 +msgid "Terminals are unavailable." +msgstr "终端不可用。" + +#: notebook/templates/tree.html:162 +msgid "Notebooks" +msgstr "" + +#: notebook/templates/tree.html:169 +msgid "There are no notebooks running." +msgstr "没有notebooks正在运行。" + +#: notebook/templates/tree.html:178 +msgid "Clusters tab is now provided by IPython parallel." +msgstr "集群标签现在由IPython并行提供。" + +#: notebook/templates/tree.html:179 +msgid "See 'IPython parallel' for installation details." +msgstr "安装细节查看 'IPython parallel'。" + diff --git a/nbclassic/i18n/zh_CN/LC_MESSAGES/notebook.po b/nbclassic/i18n/zh_CN/LC_MESSAGES/notebook.po new file mode 100644 index 000000000..aa03cd583 --- /dev/null +++ b/nbclassic/i18n/zh_CN/LC_MESSAGES/notebook.po @@ -0,0 +1,486 @@ +# Translations template for Jupyter. +# Copyright (C) 2017 ORGANIZATION +# This file is distributed under the same license as the Jupyter project. +# FIRST AUTHOR , 2017. +# +#, fuzzy +# Universal translation: cell=单元格; kernal=内核; don't translate notebook whenever referring to Jupyter Notebook +msgid "" +msgstr "" +"Project-Id-Version: Jupyter VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2017-08-25 02:53-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.5.0\n" + +#: notebook/notebookapp.py:49 +msgid "The Jupyter Notebook requires tornado >= 4.0" +msgstr "Jupyter Notebook要求拥有 tornado 版本号 >= 4.0" + +#: notebook/notebookapp.py:53 +msgid "The Jupyter Notebook requires tornado >= 4.0, but you have < 1.1.0" +msgstr "Jupyter Notebook要求拥有 tornado 版本号 >= 4.0, 但你的版本号却是 < 1.1.0" + +#: notebook/notebookapp.py:55 +#, python-format +msgid "The Jupyter Notebook requires tornado >= 4.0, but you have %s" +msgstr "Jupyter Notebook要求拥有 tornado 版本号 >= 4.0, 但你的版本号却是 %s" + +#: notebook/notebookapp.py:205 +msgid "The `ignore_minified_js` flag is deprecated and no longer works." +msgstr "`ignore_minified_js` 这个标志已经被弃用且不再工作。" + +#: notebook/notebookapp.py:206 +#, python-format +msgid "Alternatively use `%s` when working on the notebook's Javascript and LESS" +msgstr "在使用notebook的JavaScript和LESS时,可以替换使用 `%s` " + +#: notebook/notebookapp.py:207 +msgid "The `ignore_minified_js` flag is deprecated and will be removed in Notebook 6.0" +msgstr "`ignore_minified_js` 这个标志已经被弃用,且会在Notebook 6.0版本时被移除" + +#: notebook/notebookapp.py:385 +msgid "List currently running notebook servers." +msgstr "列出当前运行的Notebook服务。" + +#: notebook/notebookapp.py:389 +msgid "Produce machine-readable JSON list output." +msgstr "生成机器可读的JSON输出。" + +#: notebook/notebookapp.py:391 +msgid "Produce machine-readable JSON object on each line of output." +msgstr "在每一行输出上生成机器可读的JSON。" + +#: notebook/notebookapp.py:395 +msgid "If True, the output will be a JSON list of objects, one per active notebook server, each with the details from the relevant server info file." +msgstr "如果是正确的,输出将是一个对象的JSON列表,每个活动的笔记本服务器都有一个,每一个都有相关的服务器信息文件的详细信息。" + +#: notebook/notebookapp.py:399 +msgid "If True, each line of output will be a JSON object with the details from the server info file. For a JSON list output, see the NbserverListApp.jsonlist configuration value" +msgstr "如果是正确的,每一行输出将是一个JSON对象,且包含来自服务器信息文件的详细信息。对于一个JSON列表输出,请参阅NbserverListApp.jsonlist配置值" + +#: notebook/notebookapp.py:425 +msgid "Don't open the notebook in a browser after startup." +msgstr "请不要在启动服务以后在浏览器中打开notebook。" + +#: notebook/notebookapp.py:429 +msgid "DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib." +msgstr "尚未启用!请在notebook中使用 %pylab or %matplotlib 指令来启用 matplotlib 包。" + +#: notebook/notebookapp.py:445 +msgid "Allow the notebook to be run from root user." +msgstr "允许notebook在root用户下运行。" + +#: notebook/notebookapp.py:476 +msgid "" +"The Jupyter HTML Notebook.\n" +" \n" +" This launches a Tornado based HTML Notebook Server that serves up an HTML5/Javascript Notebook client." +msgstr "The Jupyter HTML Notebook.\n \n 这将启动一个基于tornado的HTML Notebook服务器,并提供一个HTML5/Javascript Notebook客户端。" + +#: notebook/notebookapp.py:515 +msgid "Deprecated: Use minified JS file or not, mainly use during dev to avoid JS recompilation" +msgstr "" + +#: notebook/notebookapp.py:546 +msgid "Set the Access-Control-Allow-Credentials: true header" +msgstr "请把Access-Control-Allow-Credentials设置为:true header" + +#: notebook/notebookapp.py:550 +msgid "Whether to allow the user to run the notebook as root." +msgstr "是否允许notebook在root用户下运行。" + +#: notebook/notebookapp.py:554 +msgid "The default URL to redirect to from `/`" +msgstr "从 `/` 重定向到的默认URL " + +#: notebook/notebookapp.py:558 +msgid "The IP address the notebook server will listen on." +msgstr "notebook服务会监听的IP地址。" + +#: notebook/notebookapp.py:571 +#, python-format +msgid "" +"Cannot bind to localhost, using 127.0.0.1 as default ip\n" +"%s" +msgstr "不能绑定到localhost, 请使用127.0.0.1作为默认的IP \n %s" + +#: notebook/notebookapp.py:585 +msgid "The port the notebook server will listen on." +msgstr "notebook服务会监听的IP端口。" + +#: notebook/notebookapp.py:589 +msgid "The number of additional ports to try if the specified port is not available." +msgstr "如果指定的端口不可用,则要尝试其他端口的数量。" + +#: notebook/notebookapp.py:593 +msgid "The full path to an SSL/TLS certificate file." +msgstr "SSL/TLS 认证文件所在的完整路径。" + +#: notebook/notebookapp.py:597 +msgid "The full path to a private key file for usage with SSL/TLS." +msgstr "SSL/TLS 私钥文件所在的完整路径。" + +#: notebook/notebookapp.py:601 +msgid "The full path to a certificate authority certificate for SSL/TLS client authentication." +msgstr "SSL/TLS 客户端身份验证的证书所在的完整路径。" + +#: notebook/notebookapp.py:605 +msgid "The file where the cookie secret is stored." +msgstr "那个存放cookie密钥的文件。" + +#: notebook/notebookapp.py:634 +#, python-format +msgid "Writing notebook server cookie secret to %s" +msgstr "把notebook服务器的cookie密码写入 %s" + +#: notebook/notebookapp.py:641 +#, python-format +msgid "Could not set permissions on %s" +msgstr "无法在 %s 设置权限" + +#: notebook/notebookapp.py:646 +msgid "" +"Token used for authenticating first-time connections to the server.\n" +"\n" +" When no password is enabled,\n" +" the default is to generate a new, random token.\n" +"\n" +" Setting to an empty string disables authentication altogether, which is NOT RECOMMENDED.\n" +" " +msgstr "服务器第一次连接所需要的认证秘钥。\n \n 如果没有弃用密码,\n 默认将生成一个新的随机秘钥。\n \n 由于设置为一个空白字段会自动关闭认证,我们不推荐该行为。\n" + +#: notebook/notebookapp.py:656 +msgid "" +"One-time token used for opening a browser.\n" +" Once used, this token cannot be used again.\n" +" " +msgstr "打开浏览器的一次性秘钥。\n 一旦使用,则无法再次使用。\n" + +#: notebook/notebookapp.py:732 +msgid "" +"Specify Where to open the notebook on startup. This is the\n" +" `new` argument passed to the standard library method `webbrowser.open`.\n" +" The behaviour is not guaranteed, but depends on browser support. Valid\n" +" values are:\n" +" 2 opens a new tab,\n" +" 1 opens a new window,\n" +" 0 opens in an existing window.\n" +" See the `webbrowser.open` documentation for details.\n" +" " +msgstr "" + +#: notebook/notebookapp.py:743 +msgid "DEPRECATED, use tornado_settings" +msgstr "已被弃用!请使用 tornado_settings" + +#: notebook/notebookapp.py:748 +msgid "" +"\n" +" webapp_settings is deprecated, use tornado_settings.\n" +msgstr "webapp_settings已被弃用,请使用tornado_settings。" + +#: notebook/notebookapp.py:752 +msgid "Supply overrides for the tornado.web.Application that the Jupyter notebook uses." +msgstr "Supply重写了Jupyter notebook正在使用的tornado.web.Application。" + +#: notebook/notebookapp.py:756 +msgid "" +"\n" +" Set the tornado compression options for websocket connections.\n" +"\n" +" This value will be returned from :meth:`WebSocketHandler.get_compression_options`.\n" +" None (default) will disable compression.\n" +" A dict (even an empty one) will enable compression.\n" +"\n" +" See the tornado docs for WebSocketHandler.get_compression_options for details.\n" +" " +msgstr "" + +#: notebook/notebookapp.py:767 +msgid "Supply overrides for terminado. Currently only supports \"shell_command\"." +msgstr "" + +#: notebook/notebookapp.py:770 +msgid "Extra keyword arguments to pass to `set_secure_cookie`. See tornado's set_secure_cookie docs for details." +msgstr "" + +#: notebook/notebookapp.py:774 +msgid "" +"Supply SSL options for the tornado HTTPServer.\n" +" See the tornado docs for details." +msgstr "" + +#: notebook/notebookapp.py:778 +msgid "Supply extra arguments that will be passed to Jinja environment." +msgstr "请添加Jinja环境所需要的额外的变量。" + +#: notebook/notebookapp.py:782 +msgid "Extra variables to supply to jinja templates when rendering." +msgstr "需要额外的变量去渲染Jinja模板。" + +#: notebook/notebookapp.py:818 +msgid "DEPRECATED use base_url" +msgstr "已被弃用!请使用 base_url" + +#: notebook/notebookapp.py:822 +msgid "base_project_url is deprecated, use base_url" +msgstr "base_project_url已被弃用!请使用 base_url" + +#: notebook/notebookapp.py:838 +msgid "Path to search for custom.js, css" +msgstr "搜索custom.js, css所在的路径" + +#: notebook/notebookapp.py:850 +msgid "" +"Extra paths to search for serving jinja templates.\n" +"\n" +" Can be used to override templates from notebook.templates." +msgstr "额外寻找Jinja模板的路径。\n \n 可以被用来覆盖 notebook.templates 里的模板" + +#: notebook/notebookapp.py:861 +msgid "extra paths to look for Javascript notebook extensions" +msgstr "额外寻找Javascript notebook扩展的路径" + +#: notebook/notebookapp.py:906 +#, python-format +msgid "Using MathJax: %s" +msgstr "" + +#: notebook/notebookapp.py:909 +msgid "The MathJax.js configuration file that is to be used." +msgstr "" + +#: notebook/notebookapp.py:914 +#, python-format +msgid "Using MathJax configuration file: %s" +msgstr "" + +#: notebook/notebookapp.py:920 +msgid "The notebook manager class to use." +msgstr "" + +#: notebook/notebookapp.py:926 +msgid "The kernel manager class to use." +msgstr "" + +#: notebook/notebookapp.py:932 +msgid "The session manager class to use." +msgstr "" + +#: notebook/notebookapp.py:938 +msgid "The config manager class to use" +msgstr "" + +#: notebook/notebookapp.py:959 +msgid "The login handler class to use." +msgstr "" + +#: notebook/notebookapp.py:966 +msgid "The logout handler class to use." +msgstr "" + +#: notebook/notebookapp.py:970 +msgid "Whether to trust or not X-Scheme/X-Forwarded-Proto and X-Real-Ip/X-Forwarded-For headerssent by the upstream reverse proxy. Necessary if the proxy handles SSL" +msgstr "" + +#: notebook/notebookapp.py:982 +msgid "" +"\n" +" DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib.\n" +" " +msgstr "\n 尚未启用!请在Notebook里使用 %pylab or %matplotlib 指令去启用matplotlib。\n" + +#: notebook/notebookapp.py:994 +msgid "Support for specifying --pylab on the command line has been removed." +msgstr "不再支持在命令行里使用 --pylab 指令。" + +#: notebook/notebookapp.py:996 +msgid "Please use `%pylab{0}` or `%matplotlib{0}` in the notebook itself." +msgstr "请在notebook里使用 %pylab{0}` or `%matplotlib{0}`。" + +#: notebook/notebookapp.py:1001 +msgid "The directory to use for notebooks and kernels." +msgstr "用于notebooks和内核的目录。" + +#: notebook/notebookapp.py:1024 +#, python-format +msgid "No such notebook dir: '%r'" +msgstr "没有找到notebook的路径: '%r' " + +#: notebook/notebookapp.py:1037 +msgid "DEPRECATED use the nbserver_extensions dict instead" +msgstr "已被弃用!请使用 nbserver_extensions dict 指令" + +#: notebook/notebookapp.py:1042 +msgid "server_extensions is deprecated, use nbserver_extensions" +msgstr "server_extensions指令已被弃用,请使用nbserver_extensions" + +#: notebook/notebookapp.py:1046 +msgid "Dict of Python modules to load as notebook server extensions.Entry values can be used to enable and disable the loading ofthe extensions. The extensions will be loaded in alphabetical order." +msgstr "可被作为notebook服务器扩展的Python模块们。可以使用条目值来启用和禁用扩展的加载。这些扩展将以字母顺序加载。" + +#: notebook/notebookapp.py:1055 +msgid "Reraise exceptions encountered loading server extensions?" +msgstr "加载服务器扩展时,遇到重新引发的异常?" + +#: notebook/notebookapp.py:1058 +msgid "" +"(msgs/sec)\n" +" Maximum rate at which messages can be sent on iopub before they are\n" +" limited." +msgstr "" + +#: notebook/notebookapp.py:1062 +msgid "" +"(bytes/sec)\n" +" Maximum rate at which stream output can be sent on iopub before they are\n" +" limited." +msgstr "" + +#: notebook/notebookapp.py:1066 +msgid "" +"(sec) Time window used to \n" +" check the message and data rate limits." +msgstr "(sec)时间窗口被用来 \n 检查消息和限制数据速率。" + +#: notebook/notebookapp.py:1077 +#, python-format +msgid "No such file or directory: %s" +msgstr "找不到文件或文件夹: %s" + +#: notebook/notebookapp.py:1147 +msgid "Notebook servers are configured to only be run with a password." +msgstr "Notebook服务器被设置为只能使用密码运行。" + +#: notebook/notebookapp.py:1148 +msgid "Hint: run the following command to set a password" +msgstr "提示: 运行下面命令设置密码" + +#: notebook/notebookapp.py:1149 +msgid "\t$ python -m notebook.auth password" +msgstr "\t$ python -m notebook.auth password" + +#: notebook/notebookapp.py:1187 +#, python-format +msgid "The port %i is already in use, trying another port." +msgstr "端口 %i 已经被占用, 请尝试其他端口。" + +#: notebook/notebookapp.py:1190 +#, python-format +msgid "Permission to listen on port %i denied" +msgstr "没有监听端口 %i 的权限" + +#: notebook/notebookapp.py:1199 +msgid "ERROR: the notebook server could not be started because no available port could be found." +msgstr "错误: Notebook服务器启动失败 - 因为没有找到可用的端口。" + +#: notebook/notebookapp.py:1205 +msgid "[all ip addresses on your system]" +msgstr "[系统所有IP地址]" + +#: notebook/notebookapp.py:1229 +#, python-format +msgid "Terminals not available (error was %s)" +msgstr "终端不可用(错误: %s)" + +#: notebook/notebookapp.py:1265 +msgid "interrupted" +msgstr "中断" + +#: notebook/notebookapp.py:1267 +msgid "y" +msgstr "" + +#: notebook/notebookapp.py:1268 +msgid "n" +msgstr "" + +#: notebook/notebookapp.py:1269 +#, python-format +msgid "Shutdown this notebook server (%s/[%s])? " +msgstr "关闭这个notebook服务器 (%s/[%s])" + +#: notebook/notebookapp.py:1275 +msgid "Shutdown confirmed" +msgstr "确认关闭" + +#: notebook/notebookapp.py:1279 +msgid "No answer for 5s:" +msgstr "5秒未响应" + +#: notebook/notebookapp.py:1280 +msgid "resuming operation..." +msgstr "重启操作..." + +#: notebook/notebookapp.py:1288 +#, python-format +msgid "received signal %s, stopping" +msgstr "接受信号 %s, 正在停止" + +#: notebook/notebookapp.py:1344 +#, python-format +msgid "Error loading server extension %s" +msgstr "加载插件 %s 失败" + +#: notebook/notebookapp.py:1375 +#, python-format +msgid "Shutting down %d kernel" +msgid_plural "Shutting down %d kernels" +msgstr[0] "关闭 %d 内核" +msgstr[1] "关闭 %d 内核" + +#: notebook/notebookapp.py:1383 +#, python-format +msgid "%d active kernel" +msgid_plural "%d active kernels" +msgstr[0] "%d 活跃的内核" +msgstr[1] "%d 活跃的内核" + +#: notebook/notebookapp.py:1387 +#, python-format +msgid "" +"The Jupyter Notebook is running at:\n" +"%s" +msgstr "Jupyter Notebook运行在:\n %s" + +#: notebook/notebookapp.py:1434 +msgid "Running as root is not recommended. Use --allow-root to bypass." +msgstr "不建议以root身份运行。请使用 --allow-root 绕过。" + +#: notebook/notebookapp.py:1440 +msgid "Use Control-C to stop this server and shut down all kernels (twice to skip confirmation)." +msgstr "使用 Control-C 停止此服务器并关闭所有内核(连续操作两次便可跳过确认界面)。" + +#: notebook/notebookapp.py:1442 +msgid "Welcome to Project Jupyter! Explore the various tools available and their corresponding documentation. If you are interested in contributing to the platform, please visit the communityresources section at http://jupyter.org/community.html." +msgstr "欢迎来到Jupyter项目! 探索可用的各种工具及其相应的文档。如果你有兴趣对这个平台,请访问http://jupyter.org/community.html 的community resources部分。" + +#: notebook/notebookapp.py:1453 +#, python-format +msgid "No web browser found: %s." +msgstr "没有找到网页浏览器: %s。" + +#: notebook/notebookapp.py:1458 +#, python-format +msgid "%s does not exist" +msgstr "%s 不存在" + +#: notebook/notebookapp.py:1492 +msgid "Interrupted..." +msgstr "已经中断..." + +#: notebook/services/contents/filemanager.py:525 +#, python-format +msgid "Serving notebooks from local directory: %s" +msgstr "notebooks 运行所在的本地路径: %s" + +#: notebook/services/contents/manager.py:69 +msgid "Untitled" +msgstr "未命名" + diff --git a/nbclassic/jstest.py b/nbclassic/jstest.py index 91c5977b7..7858e344c 100644 --- a/nbclassic/jstest.py +++ b/nbclassic/jstest.py @@ -24,7 +24,7 @@ from jupyter_core.paths import jupyter_runtime_dir from ipython_genutils.py3compat import bytes_to_str, which -from notebook._sysinfo import get_sys_info +from nbclassic._sysinfo import get_sys_info from ipython_genutils.tempdir import TemporaryDirectory from subprocess import TimeoutExpired @@ -182,7 +182,7 @@ def cleanup(self): def get_js_test_dir(): - import notebook.tests as t + import nbclassic.tests as t return os.path.join(os.path.dirname(t.__file__), '') def all_js_groups(): @@ -291,11 +291,11 @@ def will_run(self): def _init_server(self): "Start the notebook server in a separate process" self.server_command = command = [sys.executable, - '-m', 'notebook', + '-m', 'nbclassic', '--no-browser', '--notebook-dir', self.nbdir.name, - '--NotebookApp.token=', - f'--NotebookApp.base_url={self.base_url}', + '--ServerApp.token=', + f'--ServerApp.base_url={self.base_url}', ] # ipc doesn't work on Windows, and darwin has crazy-long temp paths, # which run afoul of ipc's maximum path length. @@ -315,7 +315,7 @@ def _init_server(self): runtime_dir = jupyter_runtime_dir() self.server_info_file = os.path.join( runtime_dir, - f'nbserver-{self.server.pid}.json' + f'jpserver-{self.server.pid}.json' ) self._wait_for_server() @@ -566,7 +566,7 @@ def justify(ltext, rtext, width=70, fill='-'): print(f'ERROR - {nfail} out of {nrunners} test groups failed ({", ".join(failed_sections)}).', took) print() print('You may wish to rerun these, with:') - print(' python -m notebook.jstest', *failed_sections) + print(' python -m nbclassic.jstest', *failed_sections) print() if failed: diff --git a/nbclassic/nbextensions.py b/nbclassic/nbextensions.py new file mode 100644 index 000000000..3619f791e --- /dev/null +++ b/nbclassic/nbextensions.py @@ -0,0 +1,1119 @@ +"""Utilities for installing Javascript extensions for the notebook""" + +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +import os +import shutil +import sys +import tarfile +import zipfile +from os.path import basename, join as pjoin, normpath + +from urllib.parse import urlparse +from urllib.request import urlretrieve +from jupyter_core.paths import ( + jupyter_data_dir, jupyter_config_path, jupyter_path, + SYSTEM_JUPYTER_PATH, ENV_JUPYTER_PATH, +) +from jupyter_core.utils import ensure_dir_exists +from ipython_genutils.py3compat import string_types, cast_unicode_py2 +from ipython_genutils.tempdir import TemporaryDirectory +from ._version import __version__ +from .config_manager import BaseJSONConfigManager + +from traitlets.utils.importstring import import_item + +DEPRECATED_ARGUMENT = object() + +NBCONFIG_SECTIONS = ['common', 'notebook', 'tree', 'edit', 'terminal'] + + +#------------------------------------------------------------------------------ +# Public API +#------------------------------------------------------------------------------ + +def check_nbextension(files, user=False, prefix=None, nbextensions_dir=None, sys_prefix=False): + """Check whether nbextension files have been installed + + Returns True if all files are found, False if any are missing. + + Parameters + ---------- + + files : list(paths) + a list of relative paths within nbextensions. + user : bool [default: False] + Whether to check the user's .jupyter/nbextensions directory. + Otherwise check a system-wide install (e.g. /usr/local/share/jupyter/nbextensions). + prefix : str [optional] + Specify install prefix, if it should differ from default (e.g. /usr/local). + Will check prefix/share/jupyter/nbextensions + nbextensions_dir : str [optional] + Specify absolute path of nbextensions directory explicitly. + sys_prefix : bool [default: False] + Install into the sys.prefix, i.e. environment + """ + nbext = _get_nbextension_dir(user=user, sys_prefix=sys_prefix, prefix=prefix, nbextensions_dir=nbextensions_dir) + # make sure nbextensions dir exists + if not os.path.exists(nbext): + return False + + if isinstance(files, string_types): + # one file given, turn it into a list + files = [files] + + return all(os.path.exists(pjoin(nbext, f)) for f in files) + + +def install_nbextension(path, overwrite=False, symlink=False, + user=False, prefix=None, nbextensions_dir=None, + destination=None, verbose=DEPRECATED_ARGUMENT, + logger=None, sys_prefix=False + ): + """Install a Javascript extension for the notebook + + Stages files and/or directories into the nbextensions directory. + By default, this compares modification time, and only stages files that need updating. + If `overwrite` is specified, matching files are purged before proceeding. + + Parameters + ---------- + + path : path to file, directory, zip or tarball archive, or URL to install + By default, the file will be installed with its base name, so '/path/to/foo' + will install to 'nbextensions/foo'. See the destination argument below to change this. + Archives (zip or tarballs) will be extracted into the nbextensions directory. + overwrite : bool [default: False] + If True, always install the files, regardless of what may already be installed. + symlink : bool [default: False] + If True, create a symlink in nbextensions, rather than copying files. + Not allowed with URLs or archives. Windows support for symlinks requires + Vista or above, Python 3, and a permission bit which only admin users + have by default, so don't rely on it. + user : bool [default: False] + Whether to install to the user's nbextensions directory. + Otherwise do a system-wide install (e.g. /usr/local/share/jupyter/nbextensions). + prefix : str [optional] + Specify install prefix, if it should differ from default (e.g. /usr/local). + Will install to ``/share/jupyter/nbextensions`` + nbextensions_dir : str [optional] + Specify absolute path of nbextensions directory explicitly. + destination : str [optional] + name the nbextension is installed to. For example, if destination is 'foo', then + the source file will be installed to 'nbextensions/foo', regardless of the source name. + This cannot be specified if an archive is given as the source. + logger : Jupyter logger [optional] + Logger instance to use + """ + if verbose != DEPRECATED_ARGUMENT: + import warnings + warnings.warn("`install_nbextension`'s `verbose` parameter is deprecated, it will have no effects and will be removed in Notebook 5.0", DeprecationWarning) + + # the actual path to which we eventually installed + full_dest = None + + nbext = _get_nbextension_dir(user=user, sys_prefix=sys_prefix, prefix=prefix, nbextensions_dir=nbextensions_dir) + # make sure nbextensions dir exists + ensure_dir_exists(nbext) + + # forcing symlink parameter to False if os.symlink does not exist (e.g., on Windows machines running python 2) + if not hasattr(os, 'symlink'): + symlink = False + + if isinstance(path, (list, tuple)): + raise TypeError("path must be a string pointing to a single extension to install; call this function multiple times to install multiple extensions") + + path = cast_unicode_py2(path) + + if path.startswith(('https://', 'http://')): + if symlink: + raise ValueError("Cannot symlink from URLs") + # Given a URL, download it + with TemporaryDirectory() as td: + filename = urlparse(path).path.split('/')[-1] + local_path = os.path.join(td, filename) + if logger: + logger.info(f"Downloading: {path} -> {local_path}") + urlretrieve(path, local_path) + # now install from the local copy + full_dest = install_nbextension(local_path, overwrite=overwrite, symlink=symlink, + nbextensions_dir=nbext, destination=destination, logger=logger) + elif path.endswith('.zip') or _safe_is_tarfile(path): + if symlink: + raise ValueError("Cannot symlink from archives") + if destination: + raise ValueError("Cannot give destination for archives") + if logger: + logger.info(f"Extracting: {path} -> {nbext}") + + if path.endswith('.zip'): + archive = zipfile.ZipFile(path) + elif _safe_is_tarfile(path): + archive = tarfile.open(path) + archive.extractall(nbext) + archive.close() + # TODO: what to do here + full_dest = None + else: + if not destination: + destination = basename(normpath(path)) + destination = cast_unicode_py2(destination) + full_dest = normpath(pjoin(nbext, destination)) + if overwrite and os.path.lexists(full_dest): + if logger: + logger.info(f"Removing: {full_dest}") + if os.path.isdir(full_dest) and not os.path.islink(full_dest): + shutil.rmtree(full_dest) + else: + os.remove(full_dest) + + if symlink: + path = os.path.abspath(path) + if not os.path.exists(full_dest): + if logger: + logger.info(f"Symlinking: {full_dest} -> {path}") + os.symlink(path, full_dest) + elif os.path.isdir(path): + path = pjoin(os.path.abspath(path), '') # end in path separator + for parent, dirs, files in os.walk(path): + dest_dir = pjoin(full_dest, parent[len(path):]) + if not os.path.exists(dest_dir): + if logger: + logger.info(f"Making directory: {dest_dir}") + os.makedirs(dest_dir) + for file_name in files: + src = pjoin(parent, file_name) + dest_file = pjoin(dest_dir, file_name) + _maybe_copy(src, dest_file, logger=logger) + else: + src = path + _maybe_copy(src, full_dest, logger=logger) + + return full_dest + + +def install_nbextension_python(module, overwrite=False, symlink=False, + user=False, sys_prefix=False, prefix=None, nbextensions_dir=None, logger=None): + """Install an nbextension bundled in a Python package. + + Returns a list of installed/updated directories. + + See install_nbextension for parameter information.""" + m, nbexts = _get_nbextension_metadata(module) + base_path = os.path.split(m.__file__)[0] + + full_dests = [] + + for nbext in nbexts: + src = os.path.join(base_path, nbext['src']) + dest = nbext['dest'] + + if logger: + logger.info(f"Installing {src} -> {dest}") + full_dest = install_nbextension( + src, overwrite=overwrite, symlink=symlink, + user=user, sys_prefix=sys_prefix, prefix=prefix, nbextensions_dir=nbextensions_dir, + destination=dest, logger=logger + ) + validate_nbextension_python(nbext, full_dest, logger) + full_dests.append(full_dest) + + return full_dests + + +def uninstall_nbextension(dest, require=None, user=False, sys_prefix=False, prefix=None, + nbextensions_dir=None, logger=None): + """Uninstall a Javascript extension of the notebook + + Removes staged files and/or directories in the nbextensions directory and + removes the extension from the frontend config. + + Parameters + ---------- + + dest : str + path to file, directory, zip or tarball archive, or URL to install + name the nbextension is installed to. For example, if destination is 'foo', then + the source file will be installed to 'nbextensions/foo', regardless of the source name. + This cannot be specified if an archive is given as the source. + require : str [optional] + require.js path used to load the extension. + If specified, frontend config loading extension will be removed. + user : bool [default: False] + Whether to install to the user's nbextensions directory. + Otherwise do a system-wide install (e.g. /usr/local/share/jupyter/nbextensions). + prefix : str [optional] + Specify install prefix, if it should differ from default (e.g. /usr/local). + Will install to ``/share/jupyter/nbextensions`` + nbextensions_dir : str [optional] + Specify absolute path of nbextensions directory explicitly. + logger : Jupyter logger [optional] + Logger instance to use + """ + nbext = _get_nbextension_dir(user=user, sys_prefix=sys_prefix, prefix=prefix, nbextensions_dir=nbextensions_dir) + dest = cast_unicode_py2(dest) + full_dest = pjoin(nbext, dest) + if os.path.lexists(full_dest): + if logger: + logger.info(f"Removing: {full_dest}") + if os.path.isdir(full_dest) and not os.path.islink(full_dest): + shutil.rmtree(full_dest) + else: + os.remove(full_dest) + + # Look through all of the config sections making sure that the nbextension + # doesn't exist. + config_dir = os.path.join(_get_config_dir(user=user, sys_prefix=sys_prefix), 'nbconfig') + cm = BaseJSONConfigManager(config_dir=config_dir) + if require: + for section in NBCONFIG_SECTIONS: + cm.update(section, {"load_extensions": {require: None}}) + + +def _find_uninstall_nbextension(filename, logger=None): + """Remove nbextension files from the first location they are found. + + Returns True if files were removed, False otherwise. + """ + filename = cast_unicode_py2(filename) + for nbext in jupyter_path('nbextensions'): + path = pjoin(nbext, filename) + if os.path.lexists(path): + if logger: + logger.info(f"Removing: {path}") + if os.path.isdir(path) and not os.path.islink(path): + shutil.rmtree(path) + else: + os.remove(path) + return True + + return False + + +def uninstall_nbextension_python(module, + user=False, sys_prefix=False, prefix=None, nbextensions_dir=None, + logger=None): + """Uninstall an nbextension bundled in a Python package. + + See parameters of `install_nbextension_python` + """ + m, nbexts = _get_nbextension_metadata(module) + for nbext in nbexts: + dest = nbext['dest'] + require = nbext['require'] + if logger: + logger.info(f"Uninstalling {dest} {require}") + uninstall_nbextension(dest, require, user=user, sys_prefix=sys_prefix, + prefix=prefix, nbextensions_dir=nbextensions_dir, logger=logger) + + +def _set_nbextension_state(section, require, state, + user=True, sys_prefix=False, logger=None): + """Set whether the section's frontend should require the named nbextension + + Returns True if the final state is the one requested. + + Parameters + ---------- + section : string + The section of the server to change, one of NBCONFIG_SECTIONS + require : string + An importable AMD module inside the nbextensions static path + state : bool + The state in which to leave the extension + user : bool [default: True] + Whether to update the user's .jupyter/nbextensions directory + sys_prefix : bool [default: False] + Whether to update the sys.prefix, i.e. environment. Will override + `user`. + logger : Jupyter logger [optional] + Logger instance to use + """ + user = False if sys_prefix else user + config_dir = os.path.join( + _get_config_dir(user=user, sys_prefix=sys_prefix), 'nbconfig') + cm = BaseJSONConfigManager(config_dir=config_dir) + if logger: + logger.info(f"{'Enabling' if state else 'Disabling'} {section} extension {require}...") + cm.update(section, {"load_extensions": {require: state}}) + + validate_nbextension(require, logger=logger) + + return cm.get(section).get(require) == state + + +def _set_nbextension_state_python(state, module, user, sys_prefix, + logger=None): + """Enable or disable some nbextensions stored in a Python package + + Returns a list of whether the state was achieved (i.e. changed, or was + already right) + + Parameters + ---------- + + state : Bool + Whether the extensions should be enabled + module : str + Importable Python module exposing the + magic-named `_jupyter_nbextension_paths` function + user : bool + Whether to enable in the user's nbextensions directory. + sys_prefix : bool + Enable/disable in the sys.prefix, i.e. environment + logger : Jupyter logger [optional] + Logger instance to use + """ + m, nbexts = _get_nbextension_metadata(module) + return [_set_nbextension_state(section=nbext["section"], + require=nbext["require"], + state=state, + user=user, sys_prefix=sys_prefix, + logger=logger) + for nbext in nbexts] + + +def enable_nbextension(section, require, user=True, sys_prefix=False, + logger=None): + """Enable a named nbextension + + Returns True if the final state is the one requested. + + Parameters + ---------- + + section : string + The section of the server to change, one of NBCONFIG_SECTIONS + require : string + An importable AMD module inside the nbextensions static path + user : bool [default: True] + Whether to enable in the user's nbextensions directory. + sys_prefix : bool [default: False] + Whether to enable in the sys.prefix, i.e. environment. Will override + `user` + logger : Jupyter logger [optional] + Logger instance to use + """ + return _set_nbextension_state(section=section, require=require, + state=True, + user=user, sys_prefix=sys_prefix, + logger=logger) + + +def disable_nbextension(section, require, user=True, sys_prefix=False, + logger=None): + """Disable a named nbextension + + Returns True if the final state is the one requested. + + Parameters + ---------- + + section : string + The section of the server to change, one of NBCONFIG_SECTIONS + require : string + An importable AMD module inside the nbextensions static path + user : bool [default: True] + Whether to enable in the user's nbextensions directory. + sys_prefix : bool [default: False] + Whether to enable in the sys.prefix, i.e. environment. Will override + `user`. + logger : Jupyter logger [optional] + Logger instance to use + """ + return _set_nbextension_state(section=section, require=require, + state=False, + user=user, sys_prefix=sys_prefix, + logger=logger) + + +def _find_disable_nbextension(section, require, logger=None): + """Disable an nbextension from the first config location where it is enabled. + + Returns True if it changed any config, False otherwise. + """ + for config_dir in jupyter_config_path(): + cm = BaseJSONConfigManager( + config_dir=os.path.join(config_dir, 'nbconfig')) + d = cm.get(section) + if d.get('load_extensions', {}).get(require, None): + if logger: + logger.info("Disabling %s extension in %s", require, config_dir) + cm.update(section, {'load_extensions': {require: None}}) + return True + + return False + + +def enable_nbextension_python(module, user=True, sys_prefix=False, + logger=None): + """Enable some nbextensions associated with a Python module. + + Returns a list of whether the state was achieved (i.e. changed, or was + already right) + + Parameters + ---------- + + module : str + Importable Python module exposing the + magic-named `_jupyter_nbextension_paths` function + user : bool [default: True] + Whether to enable in the user's nbextensions directory. + sys_prefix : bool [default: False] + Whether to enable in the sys.prefix, i.e. environment. Will override + `user` + logger : Jupyter logger [optional] + Logger instance to use + """ + return _set_nbextension_state_python(True, module, user, sys_prefix, + logger=logger) + + +def disable_nbextension_python(module, user=True, sys_prefix=False, + logger=None): + """Disable some nbextensions associated with a Python module. + + Returns True if the final state is the one requested. + + Parameters + ---------- + + module : str + Importable Python module exposing the + magic-named `_jupyter_nbextension_paths` function + user : bool [default: True] + Whether to enable in the user's nbextensions directory. + sys_prefix : bool [default: False] + Whether to enable in the sys.prefix, i.e. environment + logger : Jupyter logger [optional] + Logger instance to use + """ + return _set_nbextension_state_python(False, module, user, sys_prefix, + logger=logger) + + +def validate_nbextension(require, logger=None): + """Validate a named nbextension. + + Looks across all of the nbextension directories. + + Returns a list of warnings. + + require : str + require.js path used to load the extension + logger : Jupyter logger [optional] + Logger instance to use + """ + warnings = [] + infos = [] + + js_exists = False + for exts in jupyter_path('nbextensions'): + # Does the Javascript entrypoint actually exist on disk? + js = f"{os.path.join(exts, *require.split('/'))}.js" + js_exists = os.path.exists(js) + if js_exists: + break + + require_tmpl = " - require? {} {}" + if js_exists: + infos.append(require_tmpl.format(GREEN_OK, require)) + else: + warnings.append(require_tmpl.format(RED_X, require)) + + if logger: + if warnings: + logger.warning(" - Validating: problems found:") + for msg in warnings: + logger.warning(msg) + for msg in infos: + logger.info(msg) + else: + logger.info(f" - Validating: {GREEN_OK}") + + return warnings + + +def validate_nbextension_python(spec, full_dest, logger=None): + """Assess the health of an installed nbextension + + Returns a list of warnings. + + Parameters + ---------- + + spec : dict + A single entry of _jupyter_nbextension_paths(): + [{ + 'section': 'notebook', + 'src': 'mockextension', + 'dest': '_mockdestination', + 'require': '_mockdestination/index' + }] + full_dest : str + The on-disk location of the installed nbextension: this should end + with `nbextensions/` + logger : Jupyter logger [optional] + Logger instance to use + """ + infos = [] + warnings = [] + + section = spec.get("section", None) + if section in NBCONFIG_SECTIONS: + infos.append(f" {GREEN_OK} section: {section}") + else: + warnings.append(f" {RED_X} section: {section}") + + require = spec.get("require", None) + if require is not None: + require_path = os.path.join( + full_dest[0:-len(spec["dest"])], + f"{require}.js") + if os.path.exists(require_path): + infos.append(f" {GREEN_OK} require: {require_path}") + else: + warnings.append(f" {RED_X} require: {require_path}") + + if logger: + if warnings: + logger.warning("- Validating: problems found:") + for msg in warnings: + logger.warning(msg) + for msg in infos: + logger.info(msg) + logger.warning(f"Full spec: {spec}") + else: + logger.info(f"- Validating: {GREEN_OK}") + + return warnings + + +#---------------------------------------------------------------------- +# Applications +#---------------------------------------------------------------------- + +from .extensions import ( + BaseExtensionApp, _get_config_dir, GREEN_ENABLED, RED_DISABLED, GREEN_OK, RED_X, + ArgumentConflict, _base_aliases, _base_flags, +) +from traitlets import Bool, Unicode + +flags = {} +flags.update(_base_flags) +flags.update({ + "overwrite" : ({ + "InstallNBExtensionApp" : { + "overwrite" : True, + }}, "Force overwrite of existing files" + ), + "symlink" : ({ + "InstallNBExtensionApp" : { + "symlink" : True, + }}, "Create symlink instead of copying files" + ), +}) + +flags['s'] = flags['symlink'] + +aliases = {} +aliases.update(_base_aliases) +aliases.update({ + "prefix" : "InstallNBExtensionApp.prefix", + "nbextensions" : "InstallNBExtensionApp.nbextensions_dir", + "destination" : "InstallNBExtensionApp.destination", +}) + +class InstallNBExtensionApp(BaseExtensionApp): + """Entry point for installing notebook extensions""" + description = """Install Jupyter notebook extensions + + Usage + + jupyter nbextension install path|url [--user|--sys-prefix] + + This copies a file or a folder into the Jupyter nbextensions directory. + If a URL is given, it will be downloaded. + If an archive is given, it will be extracted into nbextensions. + If the requested files are already up to date, no action is taken + unless --overwrite is specified. + """ + + examples = """ + jupyter nbextension install /path/to/myextension + """ + aliases = aliases + flags = flags + + overwrite = Bool(False, config=True, help="Force overwrite of existing files") + symlink = Bool(False, config=True, help="Create symlinks instead of copying files") + + prefix = Unicode('', config=True, help="Installation prefix") + nbextensions_dir = Unicode('', config=True, + help="Full path to nbextensions dir (probably use prefix or user)") + destination = Unicode('', config=True, help="Destination for the copy or symlink") + + def _config_file_name_default(self): + """The default config file name.""" + return 'jupyter_notebook_config' + + def install_extensions(self): + """Perform the installation of nbextension(s)""" + if len(self.extra_args)>1: + raise ValueError("Only one nbextension allowed at a time. " + "Call multiple times to install multiple extensions.") + + if self.python: + install = install_nbextension_python + kwargs = {} + else: + install = install_nbextension + kwargs = {'destination': self.destination} + + full_dests = install(self.extra_args[0], + overwrite=self.overwrite, + symlink=self.symlink, + user=self.user, + sys_prefix=self.sys_prefix, + prefix=self.prefix, + nbextensions_dir=self.nbextensions_dir, + logger=self.log, + **kwargs + ) + + if full_dests: + self.log.info( + f"\nTo initialize this nbextension in the browser every time" + f" the notebook (or other app) loads:\n\n" + f" jupyter nbextension enable {self.extra_args[0] if self.python else ''}" + f"{' --user' if self.user else ''}" + f"{' --py' if self.python else ''}" + f"{' --sys-prefix' if self.sys_prefix else ''}\n" + ) + + def start(self): + """Perform the App's function as configured""" + if not self.extra_args: + sys.exit('Please specify an nbextension to install') + else: + try: + self.install_extensions() + except ArgumentConflict as e: + sys.exit(str(e)) + + +class UninstallNBExtensionApp(BaseExtensionApp): + """Entry point for uninstalling notebook extensions""" + version = __version__ + description = """Uninstall Jupyter notebook extensions + + Usage + + jupyter nbextension uninstall path/url path/url/entrypoint + jupyter nbextension uninstall --py pythonPackageName + + This uninstalls an nbextension. By default, it uninstalls from the + first directory on the search path where it finds the extension, but you can + uninstall from a specific location using the --user, --sys-prefix or + --system flags, or the --prefix option. + + If you specify the --require option, the named extension will be disabled, + e.g.:: + + jupyter nbextension uninstall myext --require myext/main + + If you use the --py or --python flag, the name should be a Python module. + It will uninstall nbextensions listed in that module, but not the module + itself (which you should uninstall using a package manager such as pip). + """ + + examples = """ + jupyter nbextension uninstall dest/dir dest/dir/extensionjs + jupyter nbextension uninstall --py extensionPyPackage + """ + + aliases = { + "prefix" : "UninstallNBExtensionApp.prefix", + "nbextensions" : "UninstallNBExtensionApp.nbextensions_dir", + "require": "UninstallNBExtensionApp.require", + } + flags = BaseExtensionApp.flags.copy() + flags['system'] = ({'UninstallNBExtensionApp': {'system': True}}, + "Uninstall specifically from systemwide installation directory") + + prefix = Unicode('', config=True, + help="Installation prefix. Overrides --user, --sys-prefix and --system" + ) + nbextensions_dir = Unicode('', config=True, + help="Full path to nbextensions dir (probably use prefix or user)" + ) + require = Unicode('', config=True, help="require.js module to disable loading") + system = Bool(False, config=True, + help="Uninstall specifically from systemwide installation directory" + ) + + def _config_file_name_default(self): + """The default config file name.""" + return 'jupyter_notebook_config' + + def uninstall_extension(self): + """Uninstall an nbextension from a specific location""" + kwargs = { + 'user': self.user, + 'sys_prefix': self.sys_prefix, + 'prefix': self.prefix, + 'nbextensions_dir': self.nbextensions_dir, + 'logger': self.log + } + + if self.python: + uninstall_nbextension_python(self.extra_args[0], **kwargs) + else: + if self.require: + kwargs['require'] = self.require + uninstall_nbextension(self.extra_args[0], **kwargs) + + def find_uninstall_extension(self): + """Uninstall an nbextension from an unspecified location""" + name = self.extra_args[0] + if self.python: + _, nbexts = _get_nbextension_metadata(name) + changed = False + for nbext in nbexts: + if _find_uninstall_nbextension(nbext['dest'], logger=self.log): + changed = True + + # Also disable it in config. + for section in NBCONFIG_SECTIONS: + _find_disable_nbextension(section, nbext['require'], + logger=self.log) + + else: + changed = _find_uninstall_nbextension(name, logger=self.log) + + if not changed: + print(f"No installed extension {name!r} found.") + + if self.require: + for section in NBCONFIG_SECTIONS: + _find_disable_nbextension(section, self.require, + logger=self.log) + + def start(self): + if not self.extra_args: + sys.exit('Please specify an nbextension to uninstall') + elif len(self.extra_args) > 1: + sys.exit("Only one nbextension allowed at a time. " + "Call multiple times to uninstall multiple extensions.") + elif (self.user or self.sys_prefix or self.system or self.prefix + or self.nbextensions_dir): + # The user has specified a location from which to uninstall. + try: + self.uninstall_extension() + except ArgumentConflict as e: + sys.exit(str(e)) + else: + # Uninstall wherever it is. + self.find_uninstall_extension() + + +class ToggleNBExtensionApp(BaseExtensionApp): + """A base class for apps that enable/disable extensions""" + name = "jupyter nbextension enable/disable" + version = __version__ + description = "Enable/disable an nbextension in configuration." + + section = Unicode('notebook', config=True, + help="""Which config section to add the extension to, 'common' will affect all pages.""" + ) + user = Bool(True, config=True, help="Apply the configuration only for the current user (default)") + + aliases = {'section': 'ToggleNBExtensionApp.section'} + + _toggle_value = None + + def _config_file_name_default(self): + """The default config file name.""" + return 'jupyter_notebook_config' + + def toggle_nbextension_python(self, module): + """Toggle some extensions in an importable Python module. + + Returns a list of booleans indicating whether the state was changed as + requested. + + Parameters + ---------- + module : str + Importable Python module exposing the + magic-named `_jupyter_nbextension_paths` function + """ + toggle = (enable_nbextension_python if self._toggle_value + else disable_nbextension_python) + return toggle(module, + user=self.user, + sys_prefix=self.sys_prefix, + logger=self.log) + + def toggle_nbextension(self, require): + """Toggle some a named nbextension by require-able AMD module. + + Returns whether the state was changed as requested. + + Parameters + ---------- + require : str + require.js path used to load the nbextension + """ + toggle = (enable_nbextension if self._toggle_value + else disable_nbextension) + return toggle(self.section, require, + user=self.user, sys_prefix=self.sys_prefix, + logger=self.log) + + def start(self): + if not self.extra_args: + sys.exit('Please specify an nbextension/package to enable or disable') + elif len(self.extra_args) > 1: + sys.exit('Please specify one nbextension/package at a time') + if self.python: + self.toggle_nbextension_python(self.extra_args[0]) + else: + self.toggle_nbextension(self.extra_args[0]) + + +class EnableNBExtensionApp(ToggleNBExtensionApp): + """An App that enables nbextensions""" + name = "jupyter nbextension enable" + description = """ + Enable an nbextension in frontend configuration. + + Usage + jupyter nbextension enable [--system|--sys-prefix] + """ + _toggle_value = True + + +class DisableNBExtensionApp(ToggleNBExtensionApp): + """An App that disables nbextensions""" + name = "jupyter nbextension disable" + description = """ + Disable an nbextension in frontend configuration. + + Usage + jupyter nbextension disable [--system|--sys-prefix] + """ + _toggle_value = None + + +class ListNBExtensionsApp(BaseExtensionApp): + """An App that lists and validates nbextensions""" + name = "jupyter nbextension list" + version = __version__ + description = "List all nbextensions known by the configuration system" + + def list_nbextensions(self): + """List all the nbextensions""" + config_dirs = [os.path.join(p, 'nbconfig') for p in jupyter_config_path()] + + print("Known nbextensions:") + + for config_dir in config_dirs: + head = f' config dir: {config_dir}' + head_shown = False + + cm = BaseJSONConfigManager(parent=self, config_dir=config_dir) + for section in NBCONFIG_SECTIONS: + data = cm.get(section) + if 'load_extensions' in data: + if not head_shown: + # only show heading if there is an nbextension here + print(head) + head_shown = True + print(f' {section} section') + + for require, enabled in data['load_extensions'].items(): + print(f' {require} {GREEN_ENABLED if enabled else RED_DISABLED}') + if enabled: + validate_nbextension(require, logger=self.log) + + def start(self): + """Perform the App's functions as configured""" + self.list_nbextensions() + + +_examples = """ +jupyter nbextension list # list all configured nbextensions +jupyter nbextension install --py # install an nbextension from a Python package +jupyter nbextension enable --py # enable all nbextensions in a Python package +jupyter nbextension disable --py # disable all nbextensions in a Python package +jupyter nbextension uninstall --py # uninstall an nbextension in a Python package +""" + +class NBExtensionApp(BaseExtensionApp): + """Base jupyter nbextension command entry point""" + name = "jupyter nbextension" + version = __version__ + description = "Work with Jupyter notebook extensions" + examples = _examples + + subcommands = dict( + install=(InstallNBExtensionApp,"Install an nbextension"), + enable=(EnableNBExtensionApp, "Enable an nbextension"), + disable=(DisableNBExtensionApp, "Disable an nbextension"), + uninstall=(UninstallNBExtensionApp, "Uninstall an nbextension"), + list=(ListNBExtensionsApp, "List nbextensions") + ) + + def start(self): + """Perform the App's functions as configured""" + super().start() + + # The above should have called a subcommand and raised NoStart; if we + # get here, it didn't, so we should self.log.info a message. + subcmds = ", ".join(sorted(self.subcommands)) + sys.exit(f"Please supply at least one subcommand: {subcmds}") + +main = NBExtensionApp.launch_instance + +#------------------------------------------------------------------------------ +# Private API +#------------------------------------------------------------------------------ + + +def _should_copy(src, dest, logger=None): + """Should a file be copied, if it doesn't exist, or is newer? + + Returns whether the file needs to be updated. + + Parameters + ---------- + + src : string + A path that should exist from which to copy a file + src : string + A path that might exist to which to copy a file + logger : Jupyter logger [optional] + Logger instance to use + """ + if not os.path.exists(dest): + return True + if os.stat(src).st_mtime - os.stat(dest).st_mtime > 1e-6: + # we add a fudge factor to work around a bug in python 2.x + # that was fixed in python 3.x: https://bugs.python.org/issue12904 + if logger: + logger.warn(f"Out of date: {dest}") + return True + if logger: + logger.info(f"Up to date: {dest}") + return False + + +def _maybe_copy(src, dest, logger=None): + """Copy a file if it needs updating. + + Parameters + ---------- + + src : string + A path that should exist from which to copy a file + src : string + A path that might exist to which to copy a file + logger : Jupyter logger [optional] + Logger instance to use + """ + if _should_copy(src, dest, logger=logger): + if logger: + logger.info(f"Copying: {src} -> {dest}") + shutil.copy2(src, dest) + + +def _safe_is_tarfile(path): + """Safe version of is_tarfile, return False on IOError. + + Returns whether the file exists and is a tarfile. + + Parameters + ---------- + + path : string + A path that might not exist and or be a tarfile + """ + try: + return tarfile.is_tarfile(path) + except OSError: + return False + + +def _get_nbextension_dir(user=False, sys_prefix=False, prefix=None, nbextensions_dir=None): + """Return the nbextension directory specified + + Parameters + ---------- + + user : bool [default: False] + Get the user's .jupyter/nbextensions directory + sys_prefix : bool [default: False] + Get sys.prefix, i.e. ~/.envs/my-env/share/jupyter/nbextensions + prefix : str [optional] + Get custom prefix + nbextensions_dir : str [optional] + Get what you put in + """ + conflicting = [ + ('user', user), + ('prefix', prefix), + ('nbextensions_dir', nbextensions_dir), + ('sys_prefix', sys_prefix), + ] + conflicting_set = [f'{n}={v!r}' for n, v in conflicting if v] + if len(conflicting_set) > 1: + raise ArgumentConflict( + f"cannot specify more than one of user, sys_prefix, prefix, or nbextensions_dir, " + f"but got: {', '.join(conflicting_set)}" + ) + if user: + nbext = pjoin(jupyter_data_dir(), 'nbextensions') + elif sys_prefix: + nbext = pjoin(ENV_JUPYTER_PATH[0], 'nbextensions') + elif prefix: + nbext = pjoin(prefix, 'share', 'jupyter', 'nbextensions') + elif nbextensions_dir: + nbext = nbextensions_dir + else: + nbext = pjoin(SYSTEM_JUPYTER_PATH[0], 'nbextensions') + return nbext + + +def _get_nbextension_metadata(module): + """Get the list of nbextension paths associated with a Python module. + + Returns a tuple of (the module, [{ + 'section': 'notebook', + 'src': 'mockextension', + 'dest': '_mockdestination', + 'require': '_mockdestination/index' + }]) + + Parameters + ---------- + + module : str + Importable Python module exposing the + magic-named `_jupyter_nbextension_paths` function + """ + m = import_item(module) + if not hasattr(m, '_jupyter_nbextension_paths'): + raise KeyError( + f'The Python module {module} is not a valid nbextension, ' + f'it is missing the `_jupyter_nbextension_paths()` method.' + ) + nbexts = m._jupyter_nbextension_paths() + return m, nbexts + + + +if __name__ == '__main__': + main() diff --git a/nbclassic/notebookapp.py b/nbclassic/notebookapp.py index 293aee59a..17a799ea4 100644 --- a/nbclassic/notebookapp.py +++ b/nbclassic/notebookapp.py @@ -13,13 +13,14 @@ from tornado.web import RedirectHandler -import notebook -from notebook import ( +import nbclassic +from nbclassic import ( DEFAULT_STATIC_FILES_PATH, - DEFAULT_TEMPLATE_PATH_LIST, - __version__, + DEFAULT_TEMPLATE_PATH_LIST ) +from nbclassic._version import __version__ + from traitlets import ( Unicode, List, Bool, default ) @@ -106,7 +107,7 @@ class NotebookApp( NotebookAppTraits, ): - name = 'notebook' + name = 'nbclassic' version = __version__ description = _i18n("""The Jupyter HTML Notebook. @@ -167,24 +168,30 @@ def nbextensions_path(self): path.append(os.path.join(get_ipython_dir(), 'nbextensions')) return path + # Local path to static files directory. + static_paths = [DEFAULT_STATIC_FILES_PATH] + + # Local path to templates directory. + template_paths = DEFAULT_TEMPLATE_PATH_LIST + @property def static_paths(self): """Rename trait in jupyter_server.""" - return self.static_file_path + return [DEFAULT_STATIC_FILES_PATH] @property def template_paths(self): """Rename trait for Jupyter Server.""" - return self.template_file_path + return DEFAULT_TEMPLATE_PATH_LIST def _prepare_templates(self): super(NotebookApp, self)._prepare_templates() # Get translations from notebook package. - base_dir = os.path.dirname(notebook.__file__) + base_dir = os.path.dirname(nbclassic.__file__) nbui = gettext.translation('nbui', localedir=os.path.join( - base_dir, 'notebook/i18n'), fallback=True) + base_dir, 'nbclassic/i18n'), fallback=True) self.jinja2_env.install_gettext_translations(nbui, newstyle=False) def _link_jupyter_server_extension(self, serverapp): @@ -194,14 +201,14 @@ def get_template(self, name): """Return the jinja template object for a given name""" return self.settings['notebook_jinja2_env'].get_template(name) - notebook.base.handlers.IPythonHandler.get_template = get_template + nbclassic.base.handlers.IPythonHandler.get_template = get_template # Monkey-patch Jupyter Server's and nbclassic's static path list to include # the classic notebooks static folder. def static_file_path_jupyter_server(self): """return extra paths + the default location""" - return self.extra_static_paths + [jupyter_server.DEFAULT_STATIC_FILES_PATH, notebook.DEFAULT_STATIC_FILES_PATH] + return self.extra_static_paths + [jupyter_server.DEFAULT_STATIC_FILES_PATH, nbclassic.DEFAULT_STATIC_FILES_PATH] serverapp.__class__.static_file_path = property( static_file_path_jupyter_server) @@ -214,8 +221,8 @@ def static_file_path_nbclassic(self): # `/static/notebook/notebooks/...`. This monkey-patch places a new file-finder path # to nbclassic's static file handlers that drops the extra "notebook". return self.extra_static_paths + \ - [os.path.join(notebook.DEFAULT_STATIC_FILES_PATH, - "notebook"), notebook.DEFAULT_STATIC_FILES_PATH] + [os.path.join(nbclassic.DEFAULT_STATIC_FILES_PATH, + "notebook"), nbclassic.DEFAULT_STATIC_FILES_PATH] self.__class__.static_file_path = property(static_file_path_nbclassic) return super()._link_jupyter_server_extension(serverapp) diff --git a/nbclassic/serverextensions.py b/nbclassic/serverextensions.py new file mode 100644 index 000000000..7a56a8fca --- /dev/null +++ b/nbclassic/serverextensions.py @@ -0,0 +1,329 @@ +"""Utilities for installing server extensions for the notebook""" + +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +import importlib +import sys + +from jupyter_core.paths import jupyter_config_path +from ._version import __version__ +from .config_manager import BaseJSONConfigManager +from .extensions import ( + BaseExtensionApp, _get_config_dir, GREEN_ENABLED, RED_DISABLED, GREEN_OK, RED_X +) +from traitlets import Bool +from traitlets.utils.importstring import import_item + + +# ------------------------------------------------------------------------------ +# Public API +# ------------------------------------------------------------------------------ + +def toggle_serverextension_python(import_name, enabled=None, parent=None, + user=True, sys_prefix=False, logger=None): + """Toggle a server extension. + + By default, toggles the extension in the system-wide Jupyter configuration + location (e.g. /usr/local/etc/jupyter). + + Parameters + ---------- + + import_name : str + Importable Python module (dotted-notation) exposing the magic-named + `load_jupyter_server_extension` function + enabled : bool [default: None] + Toggle state for the extension. Set to None to toggle, True to enable, + and False to disable the extension. + parent : Configurable [default: None] + user : bool [default: True] + Toggle in the user's configuration location (e.g. ~/.jupyter). + sys_prefix : bool [default: False] + Toggle in the current Python environment's configuration location + (e.g. ~/.envs/my-env/etc/jupyter). Will override `user`. + logger : Jupyter logger [optional] + Logger instance to use + """ + user = False if sys_prefix else user + config_dir = _get_config_dir(user=user, sys_prefix=sys_prefix) + cm = BaseJSONConfigManager(parent=parent, config_dir=config_dir) + cfg = cm.get("jupyter_notebook_config") + server_extensions = ( + cfg.setdefault("NotebookApp", {}) + .setdefault("nbserver_extensions", {}) + ) + + old_enabled = server_extensions.get(import_name, None) + new_enabled = enabled if enabled is not None else not old_enabled + + if logger: + if new_enabled: + logger.info(f"Enabling: {import_name}") + else: + logger.info(f"Disabling: {import_name}") + + server_extensions[import_name] = new_enabled + + if logger: + logger.info(f"- Writing config: {config_dir}") + + cm.update("jupyter_notebook_config", cfg) + + if new_enabled: + validate_serverextension(import_name, logger) + + +def validate_serverextension(import_name, logger=None): + """Assess the health of an installed server extension + + Returns a list of validation warnings. + + Parameters + ---------- + + import_name : str + Importable Python module (dotted-notation) exposing the magic-named + `load_jupyter_server_extension` function + logger : Jupyter logger [optional] + Logger instance to use + """ + + warnings = [] + infos = [] + + func = None + + if logger: + logger.info(" - Validating...") + + try: + mod = importlib.import_module(import_name) + func = getattr(mod, 'load_jupyter_server_extension', None) + version = getattr(mod, '__version__', '') + except Exception: + logger.warning("Error loading server extension %s", import_name) + + import_msg = " {} is {} importable?" + if func is not None: + infos.append(import_msg.format(GREEN_OK, import_name)) + else: + warnings.append(import_msg.format(RED_X, import_name)) + + post_mortem = " {} {} {}" + if logger: + if warnings: + [logger.info(info) for info in infos] + [logger.warn(warning) for warning in warnings] + else: + logger.info(post_mortem.format(import_name, version, GREEN_OK)) + + return warnings + + +# ---------------------------------------------------------------------- +# Applications +# ---------------------------------------------------------------------- + +flags = {} +flags.update(BaseExtensionApp.flags) +flags.pop("y", None) +flags.pop("generate-config", None) +flags.update({ + "user" : ({ + "ToggleServerExtensionApp" : { + "user" : True, + }}, "Perform the operation for the current user" + ), + "system" : ({ + "ToggleServerExtensionApp" : { + "user" : False, + "sys_prefix": False, + }}, "Perform the operation system-wide" + ), + "sys-prefix" : ({ + "ToggleServerExtensionApp" : { + "sys_prefix" : True, + }}, "Use sys.prefix as the prefix for installing server extensions" + ), + "py" : ({ + "ToggleServerExtensionApp" : { + "python" : True, + }}, "Install from a Python package" + ), +}) +flags['python'] = flags['py'] + + +class ToggleServerExtensionApp(BaseExtensionApp): + """A base class for enabling/disabling extensions""" + name = "jupyter serverextension enable/disable" + description = "Enable/disable a server extension using frontend configuration files." + + flags = flags + + user = Bool(True, config=True, help="Whether to do a user install") + sys_prefix = Bool(False, config=True, help="Use the sys.prefix as the prefix") + python = Bool(False, config=True, help="Install from a Python package") + + def toggle_server_extension(self, import_name): + """Change the status of a named server extension. + + Uses the value of `self._toggle_value`. + + Parameters + --------- + + import_name : str + Importable Python module (dotted-notation) exposing the magic-named + `load_jupyter_server_extension` function + """ + toggle_serverextension_python( + import_name, self._toggle_value, parent=self, user=self.user, + sys_prefix=self.sys_prefix, logger=self.log) + + def toggle_server_extension_python(self, package): + """Change the status of some server extensions in a Python package. + + Uses the value of `self._toggle_value`. + + Parameters + --------- + + package : str + Importable Python module exposing the + magic-named `_jupyter_server_extension_paths` function + """ + m, server_exts = _get_server_extension_metadata(package) + for server_ext in server_exts: + module = server_ext['module'] + self.toggle_server_extension(module) + + def start(self): + """Perform the App's actions as configured""" + if not self.extra_args: + sys.exit('Please specify a server extension/package to enable or disable') + for arg in self.extra_args: + if self.python: + self.toggle_server_extension_python(arg) + else: + self.toggle_server_extension(arg) + + +class EnableServerExtensionApp(ToggleServerExtensionApp): + """An App that enables (and validates) Server Extensions""" + name = "jupyter serverextension enable" + description = """ + Enable a serverextension in configuration. + + Usage + jupyter serverextension enable [--system|--sys-prefix] + """ + _toggle_value = True + + +class DisableServerExtensionApp(ToggleServerExtensionApp): + """An App that disables Server Extensions""" + name = "jupyter serverextension disable" + description = """ + Disable a serverextension in configuration. + + Usage + jupyter serverextension disable [--system|--sys-prefix] + """ + _toggle_value = False + + +class ListServerExtensionsApp(BaseExtensionApp): + """An App that lists (and validates) Server Extensions""" + name = "jupyter serverextension list" + version = __version__ + description = "List all server extensions known by the configuration system" + + def list_server_extensions(self): + """List all enabled and disabled server extensions, by config path + + Enabled extensions are validated, potentially generating warnings. + """ + config_dirs = jupyter_config_path() + for config_dir in config_dirs: + cm = BaseJSONConfigManager(parent=self, config_dir=config_dir) + data = cm.get("jupyter_notebook_config") + server_extensions = ( + data.setdefault("NotebookApp", {}) + .setdefault("nbserver_extensions", {}) + ) + if server_extensions: + print(f'config dir: {config_dir}') + for import_name, enabled in server_extensions.items(): + print(f' {import_name} {GREEN_ENABLED if enabled else RED_DISABLED}') + validate_serverextension(import_name, self.log) + + def start(self): + """Perform the App's actions as configured""" + self.list_server_extensions() + + +_examples = """ +jupyter serverextension list # list all configured server extensions +jupyter serverextension enable --py # enable all server extensions in a Python package +jupyter serverextension disable --py # disable all server extensions in a Python package +""" + + +class ServerExtensionApp(BaseExtensionApp): + """Root level server extension app""" + name = "jupyter serverextension" + version = __version__ + description = "Work with Jupyter server extensions" + examples = _examples + + subcommands = dict( + enable=(EnableServerExtensionApp, "Enable a server extension"), + disable=(DisableServerExtensionApp, "Disable a server extension"), + list=(ListServerExtensionsApp, "List server extensions") + ) + + def start(self): + """Perform the App's actions as configured""" + super().start() + + # The above should have called a subcommand and raised NoStart; if we + # get here, it didn't, so we should self.log.info a message. + subcmds = ", ".join(sorted(self.subcommands)) + sys.exit(f"Please supply at least one subcommand: {subcmds}") + + +main = ServerExtensionApp.launch_instance + +# ------------------------------------------------------------------------------ +# Private API +# ------------------------------------------------------------------------------ + + +def _get_server_extension_metadata(module): + """Load server extension metadata from a module. + + Returns a tuple of ( + the package as loaded + a list of server extension specs: [ + { + "module": "mockextension" + } + ] + ) + + Parameters + ---------- + + module : str + Importable Python module exposing the + magic-named `_jupyter_server_extension_paths` function + """ + m = import_item(module) + if not hasattr(m, '_jupyter_server_extension_paths'): + raise KeyError(f'The Python module {module} does not include any valid server extensions') + return m, m._jupyter_server_extension_paths() + +if __name__ == '__main__': + main() diff --git a/nbclassic/static/base/js/namespace.js b/nbclassic/static/base/js/namespace.js index 24b2ac02e..3af4a76b4 100644 --- a/nbclassic/static/base/js/namespace.js +++ b/nbclassic/static/base/js/namespace.js @@ -73,7 +73,7 @@ define(function(){ // tree jglobal('SessionList','tree/js/sessionlist'); - Jupyter.version = "6.4.11"; + Jupyter.version = "0.0.4"; Jupyter._target = '_blank'; return Jupyter; diff --git a/nbclassic/static/notebook/js/notebook.js b/nbclassic/static/notebook/js/notebook.js index 967362ab5..6b583fd2e 100644 --- a/nbclassic/static/notebook/js/notebook.js +++ b/nbclassic/static/notebook/js/notebook.js @@ -651,7 +651,7 @@ define([ }; /** - * Reads direction settings (LTR/RTL) from notebook/cells metadata + * Reads direction settings (LTR/RTL) from nbclassic/cells metadata * and applies them to display elements. */ Notebook.prototype.apply_directionality = function () { diff --git a/nbclassic/static/notebook/less/commandpalette.less b/nbclassic/static/notebook/less/commandpalette.less index 5ed4b1a90..564cc6618 100644 --- a/nbclassic/static/notebook/less/commandpalette.less +++ b/nbclassic/static/notebook/less/commandpalette.less @@ -12,7 +12,7 @@ ul.typeahead__list { & > li > a { /** Firefox bug **/ - /* see https://github.com/jupyter/notebook/issues/559 */ + /* see https://github.com/jupyter/nbclassic/issues/559 */ white-space: normal; } } diff --git a/nbclassic/tests/README.md b/nbclassic/tests/README.md index 8caa599a6..fa6d67734 100644 --- a/nbclassic/tests/README.md +++ b/nbclassic/tests/README.md @@ -10,14 +10,14 @@ The JavaScript tests are organized into subdirectories that match those in To run all of the JavaScript tests do: ``` -python -m notebook.jstest +python -m nbclassic.jstest ``` To run the JavaScript tests for a specific file (`base/utils.js` in this case) do: ``` -python -m notebook.jstest base/utils.js +python -m nbclassic.jstest base/utils.js ``` The file `jstest.py` will automatically launch a notebook server to run the diff --git a/nbclassic/tests/__init__.py b/nbclassic/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/nbclassic/tests/notebook/attachments.js b/nbclassic/tests/notebook/attachments.js index 155e89216..084fa5d8e 100644 --- a/nbclassic/tests/notebook/attachments.js +++ b/nbclassic/tests/notebook/attachments.js @@ -30,7 +30,7 @@ casper.notebook_test(function () { // phantomjs. So we manually set the input's files attribute //this.page.uploadFile('.modal-body input[name=file]', 'test.png') this.then(function() { - var fname = 'notebook/tests/_testdata/black_square_22.png'; + var fname = 'nbclassic/tests/_testdata/black_square_22.png'; if (!fs.exists(fname)) { this.test.fail( " does not exist, are you running the tests " + diff --git a/nbclassic/tests/selenium/conftest.py b/nbclassic/tests/selenium/conftest.py index 63dfff864..07747b2cf 100644 --- a/nbclassic/tests/selenium/conftest.py +++ b/nbclassic/tests/selenium/conftest.py @@ -50,17 +50,17 @@ def notebook_server(): env = os.environ.copy() env.update(info['extra_env']) - command = [sys.executable, '-m', 'notebook', + command = [sys.executable, '-m', 'nbclassic', '--no-browser', '--notebook-dir', nbdir, # run with a base URL that would be escaped, # to test that we don't double-escape URLs - '--NotebookApp.base_url=/a@b/', + '--ServerApp.base_url=/a@b/', ] print("command=", command) proc = info['popen'] = Popen(command, cwd=nbdir, env=env) info_file_path = pjoin(td, 'jupyter_runtime', - f'nbserver-{proc.pid:d}.json') + f'jpserver-{proc.pid:d}.json') info.update(_wait_for_server(proc, info_file_path)) print("Notebook server info:", info) diff --git a/nbclassic/tests/selenium/quick_selenium.py b/nbclassic/tests/selenium/quick_selenium.py index e5c1ab727..2b3a66515 100644 --- a/nbclassic/tests/selenium/quick_selenium.py +++ b/nbclassic/tests/selenium/quick_selenium.py @@ -5,8 +5,8 @@ """ from selenium.webdriver import Firefox -from notebook.tests.selenium.utils import Notebook -from notebook.notebookapp import list_running_servers +from nbclassic.tests.selenium.utils import Notebook +from jupyter_server.serverapp import list_running_servers class NoServerError(Exception): @@ -18,7 +18,7 @@ def quick_driver(lab=False): Usage example: - from notebook.tests.selenium.quick_selenium import quick_driver + from nbclassic.tests.selenium.quick_selenium import quick_driver driver = quick_driver Note: you need to manually close the driver that opens with driver.quit() @@ -45,7 +45,7 @@ def quick_notebook(): Usage example: - from notebook.tests.selenium.quick_selenium import quick_notebook + from nbclassic.tests.selenium.quick_selenium import quick_notebook nb = quick_notebook() Note: you need to manually close the driver that opens with nb.browser.quit() diff --git a/nbclassic/tests/selenium/test_dashboard_nav.py b/nbclassic/tests/selenium/test_dashboard_nav.py index f15a63457..57b4634f5 100644 --- a/nbclassic/tests/selenium/test_dashboard_nav.py +++ b/nbclassic/tests/selenium/test_dashboard_nav.py @@ -1,7 +1,7 @@ import os -from notebook.utils import url_path_join -from notebook.tests.selenium.utils import wait_for_selector +from jupyter_server.utils import url_path_join +from nbclassic.tests.selenium.utils import wait_for_selector pjoin = os.path.join diff --git a/nbclassic/tests/selenium/test_kernel_menu.py b/nbclassic/tests/selenium/test_kernel_menu.py index b68b5b3db..7eb100e22 100644 --- a/nbclassic/tests/selenium/test_kernel_menu.py +++ b/nbclassic/tests/selenium/test_kernel_menu.py @@ -1,7 +1,7 @@ from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait -from notebook.tests.selenium.utils import wait_for_selector +from nbclassic.tests.selenium.utils import wait_for_selector restart_selectors = [ '#restart_kernel', '#restart_clear_output', '#restart_run_all' diff --git a/nbclassic/tests/selenium/test_save_as_notebook.py b/nbclassic/tests/selenium/test_save_as_notebook.py index 781410ce8..f309db01b 100644 --- a/nbclassic/tests/selenium/test_save_as_notebook.py +++ b/nbclassic/tests/selenium/test_save_as_notebook.py @@ -1,4 +1,4 @@ -from notebook.tests.selenium.utils import wait_for_selector +from nbclassic.tests.selenium.utils import wait_for_selector from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait diff --git a/nbclassic/tests/selenium/test_save_readonly_as.py b/nbclassic/tests/selenium/test_save_readonly_as.py index 94c066753..c20be9437 100644 --- a/nbclassic/tests/selenium/test_save_readonly_as.py +++ b/nbclassic/tests/selenium/test_save_readonly_as.py @@ -1,4 +1,4 @@ -from notebook.tests.selenium.utils import wait_for_selector +from nbclassic.tests.selenium.utils import wait_for_selector from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait diff --git a/nbclassic/tests/selenium/utils.py b/nbclassic/tests/selenium/utils.py index d828611cf..dbcdb9b41 100644 --- a/nbclassic/tests/selenium/utils.py +++ b/nbclassic/tests/selenium/utils.py @@ -349,7 +349,7 @@ def new_window(browser): Usage example: - from notebook.tests.selenium.utils import new_window, Notebook + from nbclassic.tests.selenium.utils import new_window, Notebook ⋮ # something that creates a browser object diff --git a/nbclassic/transutils.py b/nbclassic/transutils.py new file mode 100644 index 000000000..eed860aa3 --- /dev/null +++ b/nbclassic/transutils.py @@ -0,0 +1,13 @@ +"""Translation related utilities. When imported, injects _ to builtins""" + +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +import os +import gettext + + +# Set up message catalog access +base_dir = os.path.realpath(os.path.join(__file__, '..', '..')) +trans = gettext.translation('notebook', localedir=os.path.join(base_dir, 'notebook/i18n'), fallback=True) +_ = trans.gettext diff --git a/package.json b/package.json new file mode 100644 index 000000000..9f905bbd7 --- /dev/null +++ b/package.json @@ -0,0 +1,33 @@ +{ + "name": "jupyter-nbclassic-deps", + "private": true, + "version": "4.0.0", + "description": "Jupyter NbClassic nodejs dependencies", + "author": "Jupyter Developers", + "license": "BSD-3-Clause", + "repository": { + "type": "git", + "url": "https://github.com/jupyter/nbclassic.git" + }, + "scripts": { + "bower": "bower install", + "build": "python setup.py js css", + "build:webpack": "webpack --mode production", + "build:watch": "npm run watch", + "watch": "onchange 'nbclassic/static/**/!(*.min).js' 'nbclassic/static/**/*.less' 'bower.json' -- npm run build" + }, + "devDependencies": { + "@babel/core": "^7.15.0", + "@babel/preset-env": "^7.15.0", + "@jupyterlab/apputils": "^3.1.3", + "babel-loader": "^8.2.2", + "babel-polyfill": "^6.26.0", + "bower": "^1.8.8", + "less": "~2", + "onchange": "^6.0.0", + "po2json": "^0.4.5", + "requirejs": "^2.3.6", + "webpack": "^5.46.0", + "webpack-cli": "^4.7.2" + } +} diff --git a/setup.cfg b/setup.cfg index 627988225..9e87016d4 100644 --- a/setup.cfg +++ b/setup.cfg @@ -27,7 +27,6 @@ include_package_data = True packages = find: python_requires = >=3.7 install_requires = - notebook<7 notebook_shim>=0.1.0 jupyter_server>=1.8 diff --git a/setup.py b/setup.py index 8bf1ba938..3f492d67a 100644 --- a/setup.py +++ b/setup.py @@ -1,2 +1,190 @@ +#!/usr/bin/env python +"""Setup script for Jupyter NbClassic""" + +#----------------------------------------------------------------------------- +# Copyright (c) 2015-, Jupyter Development Team. +# Copyright (c) 2008-2015, IPython Development Team. +# +# Distributed under the terms of the Modified BSD License. +# +# The full license is in the file LICENSE, distributed with this software. +#----------------------------------------------------------------------------- + +import os +import sys + +name = "nbclassic" + +if sys.version_info < (3, 6): + pip_message = 'This may be due to an out of date pip. Make sure you have pip >= 9.0.1.' + try: + import pip + pip_version = tuple(int(x) for x in pip.__version__.split('.')[:3]) + if pip_version < (9, 0, 1) : + pip_message = 'Your pip version is out of date, please install pip >= 9.0.1. '\ + 'pip {} detected.'.format(pip.__version__) + else: + # pip is new enough - it must be something else + pip_message = '' + except Exception: + pass + + + error = """ +NbClassic 1+ supports Python 3.7 and above. + +Python {py} detected. +{pip} +""".format(py=sys.version_info, pip=pip_message ) + + print(error, file=sys.stderr) + sys.exit(1) + +# At least we're on the python version we need, move on. + +# BEFORE importing distutils, remove MANIFEST. distutils doesn't properly +# update it when the contents of directories change. +if os.path.exists('MANIFEST'): os.remove('MANIFEST') + from setuptools import setup -setup() + +# Needed to support building with `setuptools.build_meta` +sys.path.insert(0, os.path.abspath(os.path.dirname(__file__))) + +from setupbase import ( + version, + find_packages, + find_package_data, + check_package_data_first, + CompileCSS, + CompileJS, + CompileBackendTranslation, + Bower, + JavascriptVersion, + css_js_prerelease, +) + + +data_files = [ + ('share/applications', ['jupyter-nbclassic.desktop']), + ('share/icons/hicolor/scalable/apps', ['nbclassic.svg']), + ] + + +setup_args = dict( + name = name, + description = "A web-based notebook environment for interactive computing", + long_description = """ +The Jupyter NbClassic is a web application that allows you to create and +share documents that contain live code, equations, visualizations, and +explanatory text. The NbClassic has support for multiple programming +languages, sharing, and interactive widgets. + +Read `the documentation `_ +for more information. + """, + long_description_content_type = 'text/markdown', + version = version, + packages = find_packages(), + package_data = find_package_data(), + data_files = data_files, + author = 'Jupyter Development Team', + author_email = 'jupyter@googlegroups.com', + url = 'http://jupyter.org', + license = 'BSD', + platforms = "Linux, Mac OS X, Windows", + keywords = ['Interactive', 'Interpreter', 'Shell', 'Web'], + classifiers = [ + 'Intended Audience :: Developers', + 'Intended Audience :: System Administrators', + 'Intended Audience :: Science/Research', + 'License :: OSI Approved :: BSD License', + 'Programming Language :: Python', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', + ], + zip_safe = False, + install_requires = [ + 'jinja2', + 'tornado>=6.1', + # pyzmq>=17 is not technically necessary, + # but hopefully avoids incompatibilities with Tornado 5. April 2018 + 'pyzmq>=17', + 'argon2-cffi', + 'traitlets>=4.2.1', + 'jupyter_core>=4.6.1', + 'jupyter_client>=5.3.4', + 'ipython_genutils', + 'jupyter_server>=1.8', + 'nbformat', + 'notebook_shim>=0.1.0', + 'nbconvert>=5', + 'nest-asyncio>=1.5', + 'ipykernel', # bless IPython kernel for now + 'Send2Trash>=1.8.0', + 'terminado>=0.8.3', + 'prometheus_client' + ], + extras_require = { + 'test': ['pytest', 'coverage', 'requests', 'testpath', + 'nbval', 'selenium', 'pytest', 'pytest-cov', 'pytest_tornasync'], + 'docs': ['sphinx', 'nbsphinx', 'sphinxcontrib_github_alt', + 'sphinx_rtd_theme', 'myst-parser'], + 'test:sys_platform != "win32"': ['requests-unixsocket'], + 'json-logging': ['json-logging'] + }, + python_requires = '>=3.7', + entry_points = { + 'console_scripts': [ + 'jupyter-nbclassic = nbclassic.notebookapp:main', + 'jupyter-nbextension = nbclassic.nbextensions:main', + 'jupyter-serverextension = nbclassic.serverextensions:main', + 'jupyter-bundlerextension = nbclassic.bundler.bundlerextensions:main', + ] + }, +) + +# Custom distutils/setuptools commands ---------- +from distutils.command.build_py import build_py +from distutils.command.sdist import sdist +from setuptools.command.bdist_egg import bdist_egg +from setuptools.command.develop import develop + +class bdist_egg_disabled(bdist_egg): + """Disabled version of bdist_egg + + Prevents setup.py install from performing setuptools' default easy_install, + which it should never ever do. + """ + def run(self): + sys.exit("Aborting implicit building of eggs. Use `pip install .` to install from source.") + +setup_args['cmdclass'] = { + 'build_py': css_js_prerelease( + check_package_data_first(build_py)), + 'sdist' : css_js_prerelease(sdist, strict=True), + 'develop': css_js_prerelease(develop), + 'css' : CompileCSS, + 'backendtranslations': CompileBackendTranslation, + 'js' : CompileJS, + 'jsdeps' : Bower, + 'jsversion' : JavascriptVersion, + 'bdist_egg': bdist_egg if 'bdist_egg' in sys.argv else bdist_egg_disabled, +} + +try: + from wheel.bdist_wheel import bdist_wheel +except ImportError: + pass +else: + setup_args['cmdclass']['bdist_wheel'] = css_js_prerelease(bdist_wheel) + +# Run setup -------------------- +def main(): + setup(**setup_args) + +if __name__ == '__main__': + main() diff --git a/setupbase.py b/setupbase.py new file mode 100644 index 000000000..8cd7a48be --- /dev/null +++ b/setupbase.py @@ -0,0 +1,654 @@ +""" +This module defines the things that are used in setup.py for building the nbclassic + +This includes: + + * Functions for finding things like packages, package data, etc. + * A function for checking dependencies. +""" + +# Copyright (c) IPython Development Team. +# Distributed under the terms of the Modified BSD License. + +import os +import re +import pipes +import shutil +import sys + +from distutils import log +from distutils.cmd import Command +from fnmatch import fnmatch +from glob import glob +from multiprocessing.pool import ThreadPool +from subprocess import check_call + +if sys.platform == 'win32': + from subprocess import list2cmdline +else: + def list2cmdline(cmd_list): + return ' '.join(map(pipes.quote, cmd_list)) + +#------------------------------------------------------------------------------- +# Useful globals and utility functions +#------------------------------------------------------------------------------- + +# A few handy globals +isfile = os.path.isfile +pjoin = os.path.join +repo_root = os.path.dirname(os.path.abspath(__file__)) +is_repo = os.path.isdir(pjoin(repo_root, '.git')) + +def oscmd(s): + print(">", s) + os.system(s) + +# Py3 compatibility hacks, without assuming IPython itself is installed with +# the full py3compat machinery. + +try: + execfile +except NameError: + def execfile(fname, globs, locs=None): + locs = locs or globs + exec(compile(open(fname).read(), fname, "exec"), globs, locs) + + +#--------------------------------------------------------------------------- +# Basic project information +#--------------------------------------------------------------------------- + +name = 'nbclassic' + +# release.py contains version, authors, license, url, keywords, etc. +version_ns = {} +execfile(pjoin(repo_root, name, '_version.py'), version_ns) + +version = version_ns['__version__'] + + +# vendored from pep440 package, we allow `.dev` suffix without trailing number. +loose_pep440re = re.compile(r'^([1-9]\d*!)?(0|[1-9]\d*)(\.(0|[1-9]\d*))*((a|b|rc)(0|[1-9]\d*))?(\.post(0|[1-9]\d*))?(\.dev(0|[1-9]\d*)?)?$') +if not loose_pep440re.match(version): + raise ValueError('Invalid version number `%s`, please follow pep440 convention or pip will get confused about which package is more recent.' % version) + +#--------------------------------------------------------------------------- +# Find packages +#--------------------------------------------------------------------------- + +def find_packages(): + """ + Find all of the packages. + """ + packages = [] + for dir,subdirs,files in os.walk(name): + package = dir.replace(os.path.sep, '.') + if '__init__.py' not in files: + # not a package + continue + packages.append(package) + return packages + +#--------------------------------------------------------------------------- +# Find package data +#--------------------------------------------------------------------------- + +def find_package_data(): + """ + Find package_data. + """ + # This is not enough for these things to appear in a sdist. + # We need to muck with the MANIFEST to get this to work + + # exclude components and less from the walk; + # we will build the components separately + excludes = [ + pjoin('static', 'components'), + pjoin('static', '*', 'less'), + pjoin('static', '*', 'node_modules') + ] + + # walk nbclassic resources: + cwd = os.getcwd() + os.chdir('nbclassic') + static_data = [] + for parent, dirs, files in os.walk('static'): + if any(fnmatch(parent, pat) for pat in excludes): + # prevent descending into subdirs + dirs[:] = [] + continue + for f in files: + static_data.append(pjoin(parent, f)) + + # for verification purposes, explicitly add main.min.js + # so that installation will fail if they are missing + for app in ['auth', 'edit', 'notebook', 'terminal', 'tree']: + static_data.append(pjoin('static', app, 'js', 'main.min.js')) + + components = pjoin("static", "components") + # select the components we actually need to install + # (there are lots of resources we bundle for sdist-reasons that we don't actually use) + static_data.extend([ + pjoin(components, "backbone", "backbone-min.js"), + pjoin(components, "bootstrap", "dist", "js", "bootstrap.min.js"), + pjoin(components, "bootstrap-tour", "build", "css", "bootstrap-tour.min.css"), + pjoin(components, "bootstrap-tour", "build", "js", "bootstrap-tour.min.js"), + pjoin(components, "create-react-class", "index.js"), + pjoin(components, "font-awesome", "css", "*.css"), + pjoin(components, "google-caja", "html-css-sanitizer-minified.js"), + pjoin(components, "es6-promise", "*.js"), + pjoin(components, "font-awesome", "fonts", "*.*"), + pjoin(components, "jed", "jed.js"), + pjoin(components, "jquery", "jquery.min.js"), + pjoin(components, "jquery-typeahead", "dist", "jquery.typeahead.min.js"), + pjoin(components, "jquery-typeahead", "dist", "jquery.typeahead.min.css"), + pjoin(components, "jquery-ui", "jquery-ui.min.js"), + pjoin(components, "jquery-ui", "themes", "smoothness", "jquery-ui.min.css"), + pjoin(components, "jquery-ui", "themes", "smoothness", "images", "*"), + pjoin(components, "marked", "lib", "marked.js"), + pjoin(components, "react", "react.production.min.js"), + pjoin(components, "react", "react-dom.production.min.js"), + pjoin(components, "requirejs", "require.js"), + pjoin(components, "requirejs-plugins", "src", "json.js"), + pjoin(components, "requirejs-text", "text.js"), + pjoin(components, "sanitizer", "index.js"), + pjoin(components, "underscore", "underscore-min.js"), + pjoin(components, "moment", "moment.js"), + pjoin(components, "moment", "min", "*.js"), + pjoin(components, "xterm.js", "index.js"), + pjoin(components, "xterm.js-css", "index.css"), + pjoin(components, "xterm.js-fit", "index.js"), + pjoin(components, "text-encoding", "lib", "encoding.js"), + ]) + + # Ship all of Codemirror's CSS and JS + for parent, dirs, files in os.walk(pjoin(components, 'codemirror')): + for f in files: + if f.endswith(('.js', '.css')): + static_data.append(pjoin(parent, f)) + + # Trim mathjax + mj = lambda *path: pjoin(components, 'MathJax', *path) + static_data.extend([ + mj('MathJax.js'), + mj('config', 'TeX-AMS-MML_HTMLorMML-full.js'), + mj('config', 'Safe.js'), + ]) + + trees = [] + mj_out = mj('jax', 'output') + + if os.path.exists(mj_out): + for output in os.listdir(mj_out): + path = pjoin(mj_out, output) + static_data.append(pjoin(path, '*.js')) + autoload = pjoin(path, 'autoload') + if os.path.isdir(autoload): + trees.append(autoload) + + for tree in trees + [ + mj('localization'), # limit to en? + mj('fonts', 'HTML-CSS', 'STIX-Web', 'woff'), + mj('extensions'), + mj('jax', 'input', 'TeX'), + mj('jax', 'output', 'HTML-CSS', 'fonts', 'STIX-Web'), + mj('jax', 'output', 'SVG', 'fonts', 'STIX-Web'), + mj('jax', 'element', 'mml'), + ]: + for parent, dirs, files in os.walk(tree): + for f in files: + static_data.append(pjoin(parent, f)) + + os.chdir(os.path.join('tests',)) + js_tests = glob('*.js') + glob('*/*.js') + + os.chdir(cwd) + + package_data = { + 'nbclassic' : ['templates/*'] + static_data, + 'nbclassic.tests' : js_tests, + 'nbclassic.bundler.tests': ['resources/*', 'resources/*/*', 'resources/*/*/.*'], + 'nbclassic.i18n': ['*/LC_MESSAGES/*.*'], + } + + return package_data + + +def check_package_data(package_data): + """verify that package_data globs make sense""" + print("checking package data") + for pkg, data in package_data.items(): + pkg_root = pjoin(*pkg.split('.')) + for d in data: + path = pjoin(pkg_root, d) + if '*' in path: + assert len(glob(path)) > 0, "No files match pattern %s" % path + else: + assert os.path.exists(path), "Missing package data: %s" % path + + +def check_package_data_first(command): + """decorator for checking package_data before running a given command + + Probably only needs to wrap build_py + """ + class DecoratedCommand(command): + def run(self): + check_package_data(self.package_data) + command.run(self) + return DecoratedCommand + +def update_package_data(distribution): + """update package_data to catch changes during setup""" + build_py = distribution.get_command_obj('build_py') + distribution.package_data = find_package_data() + # re-init build_py options which load package_data + build_py.finalize_options() + +#--------------------------------------------------------------------------- +# Notebook related +#--------------------------------------------------------------------------- + +try: + from shutil import which +except ImportError: + ## which() function copied from Python 3.4.3; PSF license + def which(cmd, mode=os.F_OK | os.X_OK, path=None): + """Given a command, mode, and a PATH string, return the path which + conforms to the given mode on the PATH, or None if there is no such + file. + + `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result + of os.environ.get("PATH"), or can be overridden with a custom search + path. + + """ + # Check that a given file can be accessed with the correct mode. + # Additionally check that `file` is not a directory, as on Windows + # directories pass the os.access check. + def _access_check(fn, mode): + return (os.path.exists(fn) and os.access(fn, mode) + and not os.path.isdir(fn)) + + # If we're given a path with a directory part, look it up directly rather + # than referring to PATH directories. This includes checking relative to the + # current directory, e.g. ./script + if os.path.dirname(cmd): + if _access_check(cmd, mode): + return cmd + return None + + if path is None: + path = os.environ.get("PATH", os.defpath) + if not path: + return None + path = path.split(os.pathsep) + + if sys.platform == "win32": + # The current directory takes precedence on Windows. + if not os.curdir in path: + path.insert(0, os.curdir) + + # PATHEXT is necessary to check on Windows. + pathext = os.environ.get("PATHEXT", "").split(os.pathsep) + # See if the given file matches any of the expected path extensions. + # This will allow us to short circuit when given "python.exe". + # If it does match, only test that one, otherwise we have to try + # others. + if any(cmd.lower().endswith(ext.lower()) for ext in pathext): + files = [cmd] + else: + files = [cmd + ext for ext in pathext] + else: + # On other platforms you don't have things like PATHEXT to tell you + # what file suffixes are executable, so just pass on cmd as-is. + files = [cmd] + + seen = set() + for dir in path: + normdir = os.path.normcase(dir) + if not normdir in seen: + seen.add(normdir) + for thefile in files: + name = os.path.join(dir, thefile) + if _access_check(name, mode): + return name + return None + + +static = pjoin(repo_root, 'nbclassic', 'static') + +npm_path = os.pathsep.join([ + pjoin(repo_root, 'node_modules', '.bin'), + os.environ.get("PATH", os.defpath), +]) + +def mtime(path): + """shorthand for mtime""" + return os.stat(path).st_mtime + + +def run(cmd, *args, **kwargs): + """Echo a command before running it""" + log.info('> ' + list2cmdline(cmd)) + kwargs['shell'] = (sys.platform == 'win32') + return check_call(cmd, *args, **kwargs) + +class CompileBackendTranslation(Command): + description = "compile the .po files into .mo files, that contain the translations." + + user_options = [] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + + def run(self): + paths = glob('nbclassic/i18n/??_??') + for p in paths: + LANG = p[-5:] + for component in ['nbclassic', 'nbui']: + run(['pybabel', 'compile', + '-D', component, + '-f', + '-l', LANG, + '-i', pjoin('nbclassic', 'i18n', LANG, 'LC_MESSAGES', component+'.po'), + '-o', pjoin('nbclassic', 'i18n', LANG, 'LC_MESSAGES', component+'.mo') + ]) + +class Bower(Command): + description = "fetch static client-side components with bower" + + user_options = [ + ('force', 'f', "force fetching of bower dependencies"), + ] + + def initialize_options(self): + self.force = False + + def finalize_options(self): + self.force = bool(self.force) + + bower_dir = pjoin(static, 'components') + node_modules = pjoin(repo_root, 'node_modules') + sanitizer_dir = pjoin(bower_dir, 'sanitizer') + + def should_run(self): + if self.force: + return True + if not os.path.exists(self.bower_dir): + return True + if not os.path.exists(self.sanitizer_dir): + return True + + bower_stale = mtime(self.bower_dir) < mtime(pjoin(repo_root, 'bower.json')) + if bower_stale: + return True + + return mtime(self.sanitizer_dir) < mtime(pjoin(repo_root, 'webpack.config.js')) + + def should_run_npm(self): + if not which('npm'): + print("npm unavailable", file=sys.stderr) + return False + if not os.path.exists(self.node_modules): + return True + return mtime(self.node_modules) < mtime(pjoin(repo_root, 'package.json')) + + def run(self): + if not self.should_run(): + print("bower dependencies up to date") + return + + if self.should_run_npm(): + print("installing build dependencies with npm") + run(['npm', 'install'], cwd=repo_root) + os.utime(self.node_modules, None) + + env = os.environ.copy() + env['PATH'] = npm_path + + try: + run( + ['bower', 'install', '--allow-root', '--config.interactive=false'], + cwd=repo_root, + env=env + ) + except OSError as e: + print("Failed to run bower: %s" % e, file=sys.stderr) + print("You can install js dependencies with `npm install`", file=sys.stderr) + raise + # self.npm_components() + if not os.path.exists(self.sanitizer_dir): + run(['npm', 'run', 'build:webpack'], cwd=repo_root, env=env) + os.utime(self.bower_dir, None) + # update package data in case this created new files + update_package_data(self.distribution) + + +def patch_out_bootstrap_bw_print(): + """Hack! Manually patch out the bootstrap rule that forces printing in B&W. + + We haven't found a way to override this rule with another one. + """ + print_less = pjoin(static, 'components', 'bootstrap', 'less', 'print.less') + with open(print_less) as f: + lines = f.readlines() + + for ix, line in enumerate(lines): + if 'Black prints faster' in line: + break + else: + return # Already patched out, nothing to do. + + rmed = lines.pop(ix) + print("Removed line", ix, "from bootstrap print.less:") + print("-", rmed) + print() + with open(print_less, 'w') as f: + f.writelines(lines) + +class CompileCSS(Command): + """Recompile Notebook CSS + + Regenerate the compiled CSS from LESS sources. + + Requires various dev dependencies, such as require and lessc. + """ + description = "Recompile Notebook CSS" + user_options = [] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + sources = [] + targets = [] + for name in ('ipython', 'style'): + sources.append(pjoin(static, 'style', '%s.less' % name)) + targets.append(pjoin(static, 'style', '%s.min.css' % name)) + + def run(self): + self.run_command('jsdeps') + env = os.environ.copy() + env['PATH'] = npm_path + + patch_out_bootstrap_bw_print() + + for src, dst in zip(self.sources, self.targets): + try: + run(['lessc', + '--source-map', + '--include-path=%s' % pipes.quote(static), + src, + dst, + ], cwd=repo_root, env=env) + except OSError as e: + print("Failed to build css: %s" % e, file=sys.stderr) + print("You can install js dependencies with `npm install`", file=sys.stderr) + raise + # update package data in case this created new files + update_package_data(self.distribution) + + +class CompileJS(Command): + """Rebuild Notebook Javascript main.min.js files and translation files. + + Calls require via build-main.js + """ + description = "Rebuild Notebook Javascript main.min.js files" + user_options = [ + ('force', 'f', "force rebuilding js targets"), + ] + + def initialize_options(self): + self.force = False + + def finalize_options(self): + self.force = bool(self.force) + + apps = ['notebook', 'tree', 'edit', 'terminal', 'auth'] + targets = [ pjoin(static, app, 'js', 'main.min.js') for app in apps ] + + def sources(self, name): + """Generator yielding .js sources that an application depends on""" + yield pjoin(repo_root, 'tools', 'build-main.js') + yield pjoin(static, name, 'js', 'main.js') + + for sec in [name, 'base', 'auth']: + for f in glob(pjoin(static, sec, 'js', '*.js')): + if not f.endswith('.min.js'): + yield f + yield pjoin(static, 'services', 'config.js') + if name == 'nbclassic': + for f in glob(pjoin(static, 'services', '*', '*.js')): + yield f + for parent, dirs, files in os.walk(pjoin(static, 'components')): + if os.path.basename(parent) == 'MathJax': + # don't look in MathJax, since it takes forever to walk it + dirs[:] = [] + continue + for f in files: + yield pjoin(parent, f) + + def should_run(self, name, target): + if self.force or not os.path.exists(target): + return True + target_mtime = mtime(target) + for source in self.sources(name): + if mtime(source) > target_mtime: + print(source, target) + return True + return False + + def build_main(self, name): + """Build main.min.js""" + target = pjoin(static, name, 'js', 'main.min.js') + + if not self.should_run(name, target): + log.info("%s up to date" % target) + return + log.info("Rebuilding %s" % target) + run(['node', 'tools/build-main.js', name]) + + def build_jstranslation(self, trd): + lang = trd[-5:] + run([ + pjoin('node_modules', '.bin', 'po2json'), + '-p', '-F', + '-f', 'jed1.x', + '-d', 'nbjs', + pjoin('nbclassic', 'i18n', lang, 'LC_MESSAGES', 'nbjs.po'), + pjoin('nbclassic', 'i18n', lang, 'LC_MESSAGES', 'nbjs.json'), + ]) + + def run(self): + self.run_command('jsdeps') + env = os.environ.copy() + env['PATH'] = npm_path + pool = ThreadPool() + pool.map(self.build_main, self.apps) + pool.map(self.build_jstranslation, glob('nbclassic/i18n/??_??')) + # update package data in case this created new files + update_package_data(self.distribution) + + +class JavascriptVersion(Command): + """write the javascript version to nbclassic javascript""" + description = "Write Jupyter version to javascript" + user_options = [] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + nsfile = pjoin(repo_root, "nbclassic", "static", "base", "js", "namespace.js") + with open(nsfile) as f: + lines = f.readlines() + with open(nsfile, 'w') as f: + found = False + for line in lines: + if line.strip().startswith("Jupyter.version"): + line = f' Jupyter.version = "{version}";\n' + found = True + f.write(line) + if not found: + raise RuntimeError("Didn't find Jupyter.version line in %s" % nsfile) + + +def css_js_prerelease(command, strict=False): + """decorator for building minified js/css prior to another command""" + class DecoratedCommand(command): + def run(self): + self.distribution.run_command('jsversion') + jsdeps = self.distribution.get_command_obj('jsdeps') + js = self.distribution.get_command_obj('js') + css = self.distribution.get_command_obj('css') + jsdeps.force = js.force = strict + + targets = [ jsdeps.bower_dir ] + targets.extend(js.targets) + targets.extend(css.targets) + missing = [ t for t in targets if not os.path.exists(t) ] + + if not is_repo and not missing: + # If we're an sdist, we aren't a repo and everything should be present. + # Don't rebuild js/css in that case. + command.run(self) + return + + try: + self.distribution.run_command('js') + self.distribution.run_command('css') + self.distribution.run_command('backendtranslations') + except Exception as e: + # refresh missing + missing = [ t for t in targets if not os.path.exists(t) ] + if strict or missing: + # die if strict or any targets didn't build + prefix = os.path.commonprefix([repo_root + os.sep] + missing) + missing = [ m[len(prefix):] for m in missing ] + log.warn("rebuilding js and css failed. The following required files are missing: %s" % missing) + raise e + else: + log.warn("rebuilding js and css failed (not a problem)") + log.warn(str(e)) + + # check again for missing targets, just in case: + missing = [ t for t in targets if not os.path.exists(t) ] + if missing: + # command succeeded, but targets still missing (?!) + prefix = os.path.commonprefix([repo_root + os.sep] + missing) + missing = [ m[len(prefix):] for m in missing ] + raise ValueError("The following required files are missing: %s" % missing) + + command.run(self) + return DecoratedCommand diff --git a/tools/build-main.js b/tools/build-main.js index 517186476..973868680 100644 --- a/tools/build-main.js +++ b/tools/build-main.js @@ -7,8 +7,8 @@ var name = process.argv[2]; var rjs_config = { name: name + '/js/main', - out: './notebook/static/' + name + '/js/main.min.js', - baseUrl: 'notebook/static', + out: './nbclassic/static/' + name + '/js/main.min.js', + baseUrl: 'nbclassic/static', preserveLicenseComments: false, // license comments conflict with sourcemap generation generateSourceMaps: true, optimize: "none", diff --git a/webpack.config.js b/webpack.config.js index bdb252ffd..f41050e79 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -11,7 +11,7 @@ module.exports = { entry: ['babel-polyfill', '@jupyterlab/apputils/lib/sanitizer'], output: { filename: 'index.js', - path: path.resolve(__dirname, 'notebook/static/components/sanitizer'), + path: path.resolve(__dirname, 'nbclassic/static/components/sanitizer'), libraryTarget: "amd", }, devtool: false,