diff --git a/.tx/config b/.tx/config index 3eb456d8f..ad2c832c4 100644 --- a/.tx/config +++ b/.tx/config @@ -1,2332 +1,2332 @@ [main] host = https://www.transifex.com [python-36.glossary_] -trans.fr = .tx/glossary.po +trans.fr = glossary.po type = PO source_lang = en [python-36.license] -trans.fr = .tx/license.po +trans.fr = license.po type = PO source_lang = en [python-36.sphinx] -trans.fr = .tx/sphinx.po +trans.fr = sphinx.po type = PO source_lang = en [python-36.about] -trans.fr = .tx/about.po +trans.fr = about.po type = PO source_lang = en [python-36.bugs] -trans.fr = .tx/bugs.po +trans.fr = bugs.po type = PO source_lang = en [python-36.copyright] -trans.fr = .tx/copyright.po +trans.fr = copyright.po type = PO source_lang = en [python-36.contents] -trans.fr = .tx/contents.po +trans.fr = contents.po type = PO source_lang = en [python-36.library--re] -trans.fr = .tx/library/re.po +trans.fr = library/re.po type = PO source_lang = en [python-36.library--sysconfig] -trans.fr = .tx/library/sysconfig.po +trans.fr = library/sysconfig.po type = PO source_lang = en [python-36.library--getpass] -trans.fr = .tx/library/getpass.po +trans.fr = library/getpass.po type = PO source_lang = en [python-36.library--imghdr] -trans.fr = .tx/library/imghdr.po +trans.fr = library/imghdr.po type = PO source_lang = en [python-36.library--zipapp] -trans.fr = .tx/library/zipapp.po +trans.fr = library/zipapp.po type = PO source_lang = en [python-36.library--urllib_error] -trans.fr = .tx/library/urllib.error.po +trans.fr = library/urllib.error.po type = PO source_lang = en [python-36.library--urllib_parse] -trans.fr = .tx/library/urllib.parse.po +trans.fr = library/urllib.parse.po type = PO source_lang = en [python-36.library--xml_sax_utils] -trans.fr = .tx/library/xml.sax.utils.po +trans.fr = library/xml.sax.utils.po type = PO source_lang = en [python-36.library--mmap] -trans.fr = .tx/library/mmap.po +trans.fr = library/mmap.po type = PO source_lang = en [python-36.library--difflib] -trans.fr = .tx/library/difflib.po +trans.fr = library/difflib.po type = PO source_lang = en [python-36.library--tkinter_scrolledtext] -trans.fr = .tx/library/tkinter.scrolledtext.po +trans.fr = library/tkinter.scrolledtext.po type = PO source_lang = en [python-36.library--parser] -trans.fr = .tx/library/parser.po +trans.fr = library/parser.po type = PO source_lang = en [python-36.library--pyexpat] -trans.fr = .tx/library/pyexpat.po +trans.fr = library/pyexpat.po type = PO source_lang = en [python-36.library--curses_panel] -trans.fr = .tx/library/curses.panel.po +trans.fr = library/curses.panel.po type = PO source_lang = en [python-36.library--fractions] -trans.fr = .tx/library/fractions.po +trans.fr = library/fractions.po type = PO source_lang = en [python-36.library--asyncio-subprocess] -trans.fr = .tx/library/asyncio-subprocess.po +trans.fr = library/asyncio-subprocess.po type = PO source_lang = en [python-36.library--compileall] -trans.fr = .tx/library/compileall.po +trans.fr = library/compileall.po type = PO source_lang = en [python-36.library--optparse] -trans.fr = .tx/library/optparse.po +trans.fr = library/optparse.po type = PO source_lang = en [python-36.library--imp] -trans.fr = .tx/library/imp.po +trans.fr = library/imp.po type = PO source_lang = en [python-36.library--locale] -trans.fr = .tx/library/locale.po +trans.fr = library/locale.po type = PO source_lang = en [python-36.library--ctypes] -trans.fr = .tx/library/ctypes.po +trans.fr = library/ctypes.po type = PO source_lang = en [python-36.library--doctest] -trans.fr = .tx/library/doctest.po +trans.fr = library/doctest.po type = PO source_lang = en [python-36.library--distribution] -trans.fr = .tx/library/distribution.po +trans.fr = library/distribution.po type = PO source_lang = en [python-36.library--ipc] -trans.fr = .tx/library/ipc.po +trans.fr = library/ipc.po type = PO source_lang = en [python-36.library--numeric] -trans.fr = .tx/library/numeric.po +trans.fr = library/numeric.po type = PO source_lang = en [python-36.library--email_headerregistry] -trans.fr = .tx/library/email.headerregistry.po +trans.fr = library/email.headerregistry.po type = PO source_lang = en [python-36.library--wave] -trans.fr = .tx/library/wave.po +trans.fr = library/wave.po type = PO source_lang = en [python-36.library--email_errors] -trans.fr = .tx/library/email.errors.po +trans.fr = library/email.errors.po type = PO source_lang = en [python-36.library--sunau] -trans.fr = .tx/library/sunau.po +trans.fr = library/sunau.po type = PO source_lang = en [python-36.library--datetime] -trans.fr = .tx/library/datetime.po +trans.fr = library/datetime.po type = PO source_lang = en [python-36.library--macpath] -trans.fr = .tx/library/macpath.po +trans.fr = library/macpath.po type = PO source_lang = en [python-36.library--unix] -trans.fr = .tx/library/unix.po +trans.fr = library/unix.po type = PO source_lang = en [python-36.library--array] -trans.fr = .tx/library/array.po +trans.fr = library/array.po type = PO source_lang = en [python-36.library--email_policy] -trans.fr = .tx/library/email.policy.po +trans.fr = library/email.policy.po type = PO source_lang = en [python-36.library--sched] -trans.fr = .tx/library/sched.po +trans.fr = library/sched.po type = PO source_lang = en [python-36.library--http_cookies] -trans.fr = .tx/library/http.cookies.po +trans.fr = library/http.cookies.po type = PO source_lang = en [python-36.library--shutil] -trans.fr = .tx/library/shutil.po +trans.fr = library/shutil.po type = PO source_lang = en [python-36.library--symbol] -trans.fr = .tx/library/symbol.po +trans.fr = library/symbol.po type = PO source_lang = en [python-36.library--xml_dom_minidom] -trans.fr = .tx/library/xml.dom.minidom.po +trans.fr = library/xml.dom.minidom.po type = PO source_lang = en [python-36.library--modules] -trans.fr = .tx/library/modules.po +trans.fr = library/modules.po type = PO source_lang = en [python-36.library--unicodedata] -trans.fr = .tx/library/unicodedata.po +trans.fr = library/unicodedata.po type = PO source_lang = en [python-36.library--tkinter_ttk] -trans.fr = .tx/library/tkinter.ttk.po +trans.fr = library/tkinter.ttk.po type = PO source_lang = en [python-36.library--binascii] -trans.fr = .tx/library/binascii.po +trans.fr = library/binascii.po type = PO source_lang = en [python-36.library--linecache] -trans.fr = .tx/library/linecache.po +trans.fr = library/linecache.po type = PO source_lang = en [python-36.library--functools] -trans.fr = .tx/library/functools.po +trans.fr = library/functools.po type = PO source_lang = en [python-36.library--xml_sax_reader] -trans.fr = .tx/library/xml.sax.reader.po +trans.fr = library/xml.sax.reader.po type = PO source_lang = en [python-36.library--pydoc] -trans.fr = .tx/library/pydoc.po +trans.fr = library/pydoc.po type = PO source_lang = en [python-36.library--pwd] -trans.fr = .tx/library/pwd.po +trans.fr = library/pwd.po type = PO source_lang = en [python-36.library--selectors] -trans.fr = .tx/library/selectors.po +trans.fr = library/selectors.po type = PO source_lang = en [python-36.library--os_path] -trans.fr = .tx/library/os.path.po +trans.fr = library/os.path.po type = PO source_lang = en [python-36.library--asyncio-sync] -trans.fr = .tx/library/asyncio-sync.po +trans.fr = library/asyncio-sync.po type = PO source_lang = en [python-36.library--_dummy_thread] -trans.fr = .tx/library/_dummy_thread.po +trans.fr = library/_dummy_thread.po type = PO source_lang = en [python-36.library--fcntl] -trans.fr = .tx/library/fcntl.po +trans.fr = library/fcntl.po type = PO source_lang = en [python-36.library--constants] -trans.fr = .tx/library/constants.po +trans.fr = library/constants.po type = PO source_lang = en [python-36.library--statistics] -trans.fr = .tx/library/statistics.po +trans.fr = library/statistics.po type = PO source_lang = en [python-36.library--pty] -trans.fr = .tx/library/pty.po +trans.fr = library/pty.po type = PO source_lang = en [python-36.library--crypto] -trans.fr = .tx/library/crypto.po +trans.fr = library/crypto.po type = PO source_lang = en [python-36.library--xml] -trans.fr = .tx/library/xml.po +trans.fr = library/xml.po type = PO source_lang = en [python-36.library--imaplib] -trans.fr = .tx/library/imaplib.po +trans.fr = library/imaplib.po type = PO source_lang = en [python-36.library--text] -trans.fr = .tx/library/text.po +trans.fr = library/text.po type = PO source_lang = en [python-36.library--mm] -trans.fr = .tx/library/mm.po +trans.fr = library/mm.po type = PO source_lang = en [python-36.library--tempfile] -trans.fr = .tx/library/tempfile.po +trans.fr = library/tempfile.po type = PO source_lang = en [python-36.library--traceback] -trans.fr = .tx/library/traceback.po +trans.fr = library/traceback.po type = PO source_lang = en [python-36.library--itertools] -trans.fr = .tx/library/itertools.po +trans.fr = library/itertools.po type = PO source_lang = en [python-36.library--__future__] -trans.fr = .tx/library/__future__.po +trans.fr = library/__future__.po type = PO source_lang = en [python-36.library--csv] -trans.fr = .tx/library/csv.po +trans.fr = library/csv.po type = PO source_lang = en [python-36.library--stringprep] -trans.fr = .tx/library/stringprep.po +trans.fr = library/stringprep.po type = PO source_lang = en [python-36.library--development] -trans.fr = .tx/library/development.po +trans.fr = library/development.po type = PO source_lang = en [python-36.library--platform] -trans.fr = .tx/library/platform.po +trans.fr = library/platform.po type = PO source_lang = en [python-36.library--time] -trans.fr = .tx/library/time.po +trans.fr = library/time.po type = PO source_lang = en [python-36.library--pyclbr] -trans.fr = .tx/library/pyclbr.po +trans.fr = library/pyclbr.po type = PO source_lang = en [python-36.library--crypt] -trans.fr = .tx/library/crypt.po +trans.fr = library/crypt.po type = PO source_lang = en [python-36.library--token] -trans.fr = .tx/library/token.po +trans.fr = library/token.po type = PO source_lang = en [python-36.library--spwd] -trans.fr = .tx/library/spwd.po +trans.fr = library/spwd.po type = PO source_lang = en [python-36.library--modulefinder] -trans.fr = .tx/library/modulefinder.po +trans.fr = library/modulefinder.po type = PO source_lang = en [python-36.library--argparse] -trans.fr = .tx/library/argparse.po +trans.fr = library/argparse.po type = PO source_lang = en [python-36.library--collections] -trans.fr = .tx/library/collections.po +trans.fr = library/collections.po type = PO source_lang = en [python-36.library--http] -trans.fr = .tx/library/http.po +trans.fr = library/http.po type = PO source_lang = en [python-36.library--email] -trans.fr = .tx/library/email.po +trans.fr = library/email.po type = PO source_lang = en [python-36.library--http_cookiejar] -trans.fr = .tx/library/http.cookiejar.po +trans.fr = library/http.cookiejar.po type = PO source_lang = en [python-36.library--cmd] -trans.fr = .tx/library/cmd.po +trans.fr = library/cmd.po type = PO source_lang = en [python-36.library--xml_dom_pulldom] -trans.fr = .tx/library/xml.dom.pulldom.po +trans.fr = library/xml.dom.pulldom.po type = PO source_lang = en [python-36.library--glob] -trans.fr = .tx/library/glob.po +trans.fr = library/glob.po type = PO source_lang = en [python-36.library--keyword] -trans.fr = .tx/library/keyword.po +trans.fr = library/keyword.po type = PO source_lang = en [python-36.library--concurrency] -trans.fr = .tx/library/concurrency.po +trans.fr = library/concurrency.po type = PO source_lang = en [python-36.library--atexit] -trans.fr = .tx/library/atexit.po +trans.fr = library/atexit.po type = PO source_lang = en [python-36.library--py_compile] -trans.fr = .tx/library/py_compile.po +trans.fr = library/py_compile.po type = PO source_lang = en [python-36.library--email_encoders] -trans.fr = .tx/library/email.encoders.po +trans.fr = library/email.encoders.po type = PO source_lang = en [python-36.library--inspect] -trans.fr = .tx/library/inspect.po +trans.fr = library/inspect.po type = PO source_lang = en [python-36.library--unittest_mock] -trans.fr = .tx/library/unittest.mock.po +trans.fr = library/unittest.mock.po type = PO source_lang = en [python-36.library--asyncio-eventloops] -trans.fr = .tx/library/asyncio-eventloops.po +trans.fr = library/asyncio-eventloops.po type = PO source_lang = en [python-36.library--allos] -trans.fr = .tx/library/allos.po +trans.fr = library/allos.po type = PO source_lang = en [python-36.library--stat] -trans.fr = .tx/library/stat.po +trans.fr = library/stat.po type = PO source_lang = en [python-36.library--curses] -trans.fr = .tx/library/curses.po +trans.fr = library/curses.po type = PO source_lang = en [python-36.library--persistence] -trans.fr = .tx/library/persistence.po +trans.fr = library/persistence.po type = PO source_lang = en [python-36.library--trace] -trans.fr = .tx/library/trace.po +trans.fr = library/trace.po type = PO source_lang = en [python-36.library--zipfile] -trans.fr = .tx/library/zipfile.po +trans.fr = library/zipfile.po type = PO source_lang = en [python-36.library--mimetypes] -trans.fr = .tx/library/mimetypes.po +trans.fr = library/mimetypes.po type = PO source_lang = en [python-36.library--superseded] -trans.fr = .tx/library/superseded.po +trans.fr = library/superseded.po type = PO source_lang = en [python-36.library--internet] -trans.fr = .tx/library/internet.po +trans.fr = library/internet.po type = PO source_lang = en [python-36.library--poplib] -trans.fr = .tx/library/poplib.po +trans.fr = library/poplib.po type = PO source_lang = en [python-36.library--language] -trans.fr = .tx/library/language.po +trans.fr = library/language.po type = PO source_lang = en [python-36.library--string] -trans.fr = .tx/library/string.po +trans.fr = library/string.po type = PO source_lang = en [python-36.library--mailcap] -trans.fr = .tx/library/mailcap.po +trans.fr = library/mailcap.po type = PO source_lang = en [python-36.library--email_parser] -trans.fr = .tx/library/email.parser.po +trans.fr = library/email.parser.po type = PO source_lang = en [python-36.library--bz2] -trans.fr = .tx/library/bz2.po +trans.fr = library/bz2.po type = PO source_lang = en [python-36.library--builtins] -trans.fr = .tx/library/builtins.po +trans.fr = library/builtins.po type = PO source_lang = en [python-36.library--logging_config] -trans.fr = .tx/library/logging.config.po +trans.fr = library/logging.config.po type = PO source_lang = en [python-36.library--xml_sax_handler] -trans.fr = .tx/library/xml.sax.handler.po +trans.fr = library/xml.sax.handler.po type = PO source_lang = en [python-36.library--intro] -trans.fr = .tx/library/intro.po +trans.fr = library/intro.po type = PO source_lang = en [python-36.library--python] -trans.fr = .tx/library/python.po +trans.fr = library/python.po type = PO source_lang = en [python-36.library--tarfile] -trans.fr = .tx/library/tarfile.po +trans.fr = library/tarfile.po type = PO source_lang = en [python-36.library--fnmatch] -trans.fr = .tx/library/fnmatch.po +trans.fr = library/fnmatch.po type = PO source_lang = en [python-36.library--tty] -trans.fr = .tx/library/tty.po +trans.fr = library/tty.po type = PO source_lang = en [python-36.library--signal] -trans.fr = .tx/library/signal.po +trans.fr = library/signal.po type = PO source_lang = en [python-36.library--contextlib] -trans.fr = .tx/library/contextlib.po +trans.fr = library/contextlib.po type = PO source_lang = en [python-36.library--pkgutil] -trans.fr = .tx/library/pkgutil.po +trans.fr = library/pkgutil.po type = PO source_lang = en [python-36.library--codeop] -trans.fr = .tx/library/codeop.po +trans.fr = library/codeop.po type = PO source_lang = en [python-36.library--gettext] -trans.fr = .tx/library/gettext.po +trans.fr = library/gettext.po type = PO source_lang = en [python-36.library--enum] -trans.fr = .tx/library/enum.po +trans.fr = library/enum.po type = PO source_lang = en [python-36.library--decimal] -trans.fr = .tx/library/decimal.po +trans.fr = library/decimal.po type = PO source_lang = en [python-36.library--asyncio] -trans.fr = .tx/library/asyncio.po +trans.fr = library/asyncio.po type = PO source_lang = en [python-36.library--windows] -trans.fr = .tx/library/windows.po +trans.fr = library/windows.po type = PO source_lang = en [python-36.library--urllib_request] -trans.fr = .tx/library/urllib.request.po +trans.fr = library/urllib.request.po type = PO source_lang = en [python-36.library--socket] -trans.fr = .tx/library/socket.po +trans.fr = library/socket.po type = PO source_lang = en [python-36.library--mailbox] -trans.fr = .tx/library/mailbox.po +trans.fr = library/mailbox.po type = PO source_lang = en [python-36.library--rlcompleter] -trans.fr = .tx/library/rlcompleter.po +trans.fr = library/rlcompleter.po type = PO source_lang = en [python-36.library--gzip] -trans.fr = .tx/library/gzip.po +trans.fr = library/gzip.po type = PO source_lang = en [python-36.library--http_client] -trans.fr = .tx/library/http.client.po +trans.fr = library/http.client.po type = PO source_lang = en [python-36.library--pickle] -trans.fr = .tx/library/pickle.po +trans.fr = library/pickle.po type = PO source_lang = en [python-36.library--concurrent] -trans.fr = .tx/library/concurrent.po +trans.fr = library/concurrent.po type = PO source_lang = en [python-36.library--timeit] -trans.fr = .tx/library/timeit.po +trans.fr = library/timeit.po type = PO source_lang = en [python-36.library--tkinter_tix] -trans.fr = .tx/library/tkinter.tix.po +trans.fr = library/tkinter.tix.po type = PO source_lang = en [python-36.library--readline] -trans.fr = .tx/library/readline.po +trans.fr = library/readline.po type = PO source_lang = en [python-36.library--netrc] -trans.fr = .tx/library/netrc.po +trans.fr = library/netrc.po type = PO source_lang = en [python-36.library--asyncio-dev] -trans.fr = .tx/library/asyncio-dev.po +trans.fr = library/asyncio-dev.po type = PO source_lang = en [python-36.library--email_charset] -trans.fr = .tx/library/email.charset.po +trans.fr = library/email.charset.po type = PO source_lang = en [python-36.library--venv] -trans.fr = .tx/library/venv.po +trans.fr = library/venv.po type = PO source_lang = en [python-36.library--struct] -trans.fr = .tx/library/struct.po +trans.fr = library/struct.po type = PO source_lang = en [python-36.library--dbm] -trans.fr = .tx/library/dbm.po +trans.fr = library/dbm.po type = PO source_lang = en [python-36.library--xdrlib] -trans.fr = .tx/library/xdrlib.po +trans.fr = library/xdrlib.po type = PO source_lang = en [python-36.library--markup] -trans.fr = .tx/library/markup.po +trans.fr = library/markup.po type = PO source_lang = en [python-36.library--dummy_threading] -trans.fr = .tx/library/dummy_threading.po +trans.fr = library/dummy_threading.po type = PO source_lang = en [python-36.library--xml_dom] -trans.fr = .tx/library/xml.dom.po +trans.fr = library/xml.dom.po type = PO source_lang = en [python-36.library--smtpd] -trans.fr = .tx/library/smtpd.po +trans.fr = library/smtpd.po type = PO source_lang = en [python-36.library--idle] -trans.fr = .tx/library/idle.po +trans.fr = library/idle.po type = PO source_lang = en [python-36.library--pipes] -trans.fr = .tx/library/pipes.po +trans.fr = library/pipes.po type = PO source_lang = en [python-36.library--chunk] -trans.fr = .tx/library/chunk.po +trans.fr = library/chunk.po type = PO source_lang = en [python-36.library--telnetlib] -trans.fr = .tx/library/telnetlib.po +trans.fr = library/telnetlib.po type = PO source_lang = en [python-36.library--filesys] -trans.fr = .tx/library/filesys.po +trans.fr = library/filesys.po type = PO source_lang = en [python-36.library--asynchat] -trans.fr = .tx/library/asynchat.po +trans.fr = library/asynchat.po type = PO source_lang = en [python-36.library--numbers] -trans.fr = .tx/library/numbers.po +trans.fr = library/numbers.po type = PO source_lang = en [python-36.library--xmlrpc_server] -trans.fr = .tx/library/xmlrpc.server.po +trans.fr = library/xmlrpc.server.po type = PO source_lang = en [python-36.library--plistlib] -trans.fr = .tx/library/plistlib.po +trans.fr = library/plistlib.po type = PO source_lang = en [python-36.library--secrets] -trans.fr = .tx/library/secrets.po +trans.fr = library/secrets.po type = PO source_lang = en [python-36.library--marshal] -trans.fr = .tx/library/marshal.po +trans.fr = library/marshal.po type = PO source_lang = en [python-36.library--html_parser] -trans.fr = .tx/library/html.parser.po +trans.fr = library/html.parser.po type = PO source_lang = en [python-36.library--netdata] -trans.fr = .tx/library/netdata.po +trans.fr = library/netdata.po type = PO source_lang = en [python-36.library--gc] -trans.fr = .tx/library/gc.po +trans.fr = library/gc.po type = PO source_lang = en [python-36.library--fileformats] -trans.fr = .tx/library/fileformats.po +trans.fr = library/fileformats.po type = PO source_lang = en [python-36.library--bisect] -trans.fr = .tx/library/bisect.po +trans.fr = library/bisect.po type = PO source_lang = en [python-36.library--symtable] -trans.fr = .tx/library/symtable.po +trans.fr = library/symtable.po type = PO source_lang = en [python-36.library--nis] -trans.fr = .tx/library/nis.po +trans.fr = library/nis.po type = PO source_lang = en [python-36.library--html] -trans.fr = .tx/library/html.po +trans.fr = library/html.po type = PO source_lang = en [python-36.library--typing] -trans.fr = .tx/library/typing.po +trans.fr = library/typing.po type = PO source_lang = en [python-36.library--weakref] -trans.fr = .tx/library/weakref.po +trans.fr = library/weakref.po type = PO source_lang = en [python-36.library--shlex] -trans.fr = .tx/library/shlex.po +trans.fr = library/shlex.po type = PO source_lang = en [python-36.library--binary] -trans.fr = .tx/library/binary.po +trans.fr = library/binary.po type = PO source_lang = en [python-36.library--distutils] -trans.fr = .tx/library/distutils.po +trans.fr = library/distutils.po type = PO source_lang = en [python-36.library--email_generator] -trans.fr = .tx/library/email.generator.po +trans.fr = library/email.generator.po type = PO source_lang = en [python-36.library--ensurepip] -trans.fr = .tx/library/ensurepip.po +trans.fr = library/ensurepip.po type = PO source_lang = en [python-36.library--importlib] -trans.fr = .tx/library/importlib.po +trans.fr = library/importlib.po type = PO source_lang = en [python-36.library--warnings] -trans.fr = .tx/library/warnings.po +trans.fr = library/warnings.po type = PO source_lang = en [python-36.library--tabnanny] -trans.fr = .tx/library/tabnanny.po +trans.fr = library/tabnanny.po type = PO source_lang = en [python-36.library--json] -trans.fr = .tx/library/json.po +trans.fr = library/json.po type = PO source_lang = en [python-36.library--reprlib] -trans.fr = .tx/library/reprlib.po +trans.fr = library/reprlib.po type = PO source_lang = en [python-36.library--concurrent_futures] -trans.fr = .tx/library/concurrent.futures.po +trans.fr = library/concurrent.futures.po type = PO source_lang = en [python-36.library--tk] -trans.fr = .tx/library/tk.po +trans.fr = library/tk.po type = PO source_lang = en [python-36.library--abc] -trans.fr = .tx/library/abc.po +trans.fr = library/abc.po type = PO source_lang = en [python-36.library--filecmp] -trans.fr = .tx/library/filecmp.po +trans.fr = library/filecmp.po type = PO source_lang = en [python-36.library--undoc] -trans.fr = .tx/library/undoc.po +trans.fr = library/undoc.po type = PO source_lang = en [python-36.library--functions] -trans.fr = .tx/library/functions.po +trans.fr = library/functions.po type = PO source_lang = en [python-36.library--unittest_mock-examples] -trans.fr = .tx/library/unittest.mock-examples.po +trans.fr = library/unittest.mock-examples.po type = PO source_lang = en [python-36.library--heapq] -trans.fr = .tx/library/heapq.po +trans.fr = library/heapq.po type = PO source_lang = en [python-36.library--termios] -trans.fr = .tx/library/termios.po +trans.fr = library/termios.po type = PO source_lang = en [python-36.library--errno] -trans.fr = .tx/library/errno.po +trans.fr = library/errno.po type = PO source_lang = en [python-36.library--calendar] -trans.fr = .tx/library/calendar.po +trans.fr = library/calendar.po type = PO source_lang = en [python-36.library--configparser] -trans.fr = .tx/library/configparser.po +trans.fr = library/configparser.po type = PO source_lang = en [python-36.library--unittest] -trans.fr = .tx/library/unittest.po +trans.fr = library/unittest.po type = PO source_lang = en [python-36.library--socketserver] -trans.fr = .tx/library/socketserver.po +trans.fr = library/socketserver.po type = PO source_lang = en [python-36.library--tokenize] -trans.fr = .tx/library/tokenize.po +trans.fr = library/tokenize.po type = PO source_lang = en [python-36.library--random] -trans.fr = .tx/library/random.po +trans.fr = library/random.po type = PO source_lang = en [python-36.library--code] -trans.fr = .tx/library/code.po +trans.fr = library/code.po type = PO source_lang = en [python-36.library--sqlite3] -trans.fr = .tx/library/sqlite3.po +trans.fr = library/sqlite3.po type = PO source_lang = en [python-36.library--colorsys] -trans.fr = .tx/library/colorsys.po +trans.fr = library/colorsys.po type = PO source_lang = en [python-36.library--quopri] -trans.fr = .tx/library/quopri.po +trans.fr = library/quopri.po type = PO source_lang = en [python-36.library--dis] -trans.fr = .tx/library/dis.po +trans.fr = library/dis.po type = PO source_lang = en [python-36.library--stdtypes] -trans.fr = .tx/library/stdtypes.po +trans.fr = library/stdtypes.po type = PO source_lang = en [python-36.library--tracemalloc] -trans.fr = .tx/library/tracemalloc.po +trans.fr = library/tracemalloc.po type = PO source_lang = en [python-36.library--queue] -trans.fr = .tx/library/queue.po +trans.fr = library/queue.po type = PO source_lang = en [python-36.library--posix] -trans.fr = .tx/library/posix.po +trans.fr = library/posix.po type = PO source_lang = en [python-36.library--turtle] -trans.fr = .tx/library/turtle.po +trans.fr = library/turtle.po type = PO source_lang = en [python-36.library--faulthandler] -trans.fr = .tx/library/faulthandler.po +trans.fr = library/faulthandler.po type = PO source_lang = en [python-36.library--email_examples] -trans.fr = .tx/library/email.examples.po +trans.fr = library/email.examples.po type = PO source_lang = en [python-36.library--base64] -trans.fr = .tx/library/base64.po +trans.fr = library/base64.po type = PO source_lang = en [python-36.library--index] -trans.fr = .tx/library/index.po +trans.fr = library/index.po type = PO source_lang = en [python-36.library--email_message] -trans.fr = .tx/library/email.message.po +trans.fr = library/email.message.po type = PO source_lang = en [python-36.library--xml_etree_elementtree] -trans.fr = .tx/library/xml.etree.elementtree.po +trans.fr = library/xml.etree.elementtree.po type = PO source_lang = en [python-36.library--asyncio-task] -trans.fr = .tx/library/asyncio-task.po +trans.fr = library/asyncio-task.po type = PO source_lang = en [python-36.library--asyncore] -trans.fr = .tx/library/asyncore.po +trans.fr = library/asyncore.po type = PO source_lang = en [python-36.library--uu] -trans.fr = .tx/library/uu.po +trans.fr = library/uu.po type = PO source_lang = en [python-36.library--urllib_robotparser] -trans.fr = .tx/library/urllib.robotparser.po +trans.fr = library/urllib.robotparser.po type = PO source_lang = en [python-36.library--cgitb] -trans.fr = .tx/library/cgitb.po +trans.fr = library/cgitb.po type = PO source_lang = en [python-36.library--pathlib] -trans.fr = .tx/library/pathlib.po +trans.fr = library/pathlib.po type = PO source_lang = en [python-36.library--misc] -trans.fr = .tx/library/misc.po +trans.fr = library/misc.po type = PO source_lang = en [python-36.library--_thread] -trans.fr = .tx/library/_thread.po +trans.fr = library/_thread.po type = PO source_lang = en [python-36.library--email_header] -trans.fr = .tx/library/email.header.po +trans.fr = library/email.header.po type = PO source_lang = en [python-36.library--runpy] -trans.fr = .tx/library/runpy.po +trans.fr = library/runpy.po type = PO source_lang = en [python-36.library--asyncio-eventloop] -trans.fr = .tx/library/asyncio-eventloop.po +trans.fr = library/asyncio-eventloop.po type = PO source_lang = en [python-36.library--textwrap] -trans.fr = .tx/library/textwrap.po +trans.fr = library/textwrap.po type = PO source_lang = en [python-36.library--msilib] -trans.fr = .tx/library/msilib.po +trans.fr = library/msilib.po type = PO source_lang = en [python-36.library--debug] -trans.fr = .tx/library/debug.po +trans.fr = library/debug.po type = PO source_lang = en [python-36.library--nntplib] -trans.fr = .tx/library/nntplib.po +trans.fr = library/nntplib.po type = PO source_lang = en [python-36.library--ast] -trans.fr = .tx/library/ast.po +trans.fr = library/ast.po type = PO source_lang = en [python-36.library--site] -trans.fr = .tx/library/site.po +trans.fr = library/site.po type = PO source_lang = en [python-36.library--uuid] -trans.fr = .tx/library/uuid.po +trans.fr = library/uuid.po type = PO source_lang = en [python-36.library--email_iterators] -trans.fr = .tx/library/email.iterators.po +trans.fr = library/email.iterators.po type = PO source_lang = en [python-36.library--threading] -trans.fr = .tx/library/threading.po +trans.fr = library/threading.po type = PO source_lang = en [python-36.library--email_mime] -trans.fr = .tx/library/email.mime.po +trans.fr = library/email.mime.po type = PO source_lang = en [python-36.library--shelve] -trans.fr = .tx/library/shelve.po +trans.fr = library/shelve.po type = PO source_lang = en [python-36.library--profile] -trans.fr = .tx/library/profile.po +trans.fr = library/profile.po type = PO source_lang = en [python-36.library--math] -trans.fr = .tx/library/math.po +trans.fr = library/math.po type = PO source_lang = en [python-36.library--fileinput] -trans.fr = .tx/library/fileinput.po +trans.fr = library/fileinput.po type = PO source_lang = en [python-36.library--select] -trans.fr = .tx/library/select.po +trans.fr = library/select.po type = PO source_lang = en [python-36.library--pprint] -trans.fr = .tx/library/pprint.po +trans.fr = library/pprint.po type = PO source_lang = en [python-36.library--datatypes] -trans.fr = .tx/library/datatypes.po +trans.fr = library/datatypes.po type = PO source_lang = en [python-36.library--ssl] -trans.fr = .tx/library/ssl.po +trans.fr = library/ssl.po type = PO source_lang = en [python-36.library--asyncio-queue] -trans.fr = .tx/library/asyncio-queue.po +trans.fr = library/asyncio-queue.po type = PO source_lang = en [python-36.library--binhex] -trans.fr = .tx/library/binhex.po +trans.fr = library/binhex.po type = PO source_lang = en [python-36.library--io] -trans.fr = .tx/library/io.po +trans.fr = library/io.po type = PO source_lang = en [python-36.library--asyncio-protocol] -trans.fr = .tx/library/asyncio-protocol.po +trans.fr = library/asyncio-protocol.po type = PO source_lang = en [python-36.library--othergui] -trans.fr = .tx/library/othergui.po +trans.fr = library/othergui.po type = PO source_lang = en [python-36.library--webbrowser] -trans.fr = .tx/library/webbrowser.po +trans.fr = library/webbrowser.po type = PO source_lang = en [python-36.library--hmac] -trans.fr = .tx/library/hmac.po +trans.fr = library/hmac.po type = PO source_lang = en [python-36.library--collections_abc] -trans.fr = .tx/library/collections.abc.po +trans.fr = library/collections.abc.po type = PO source_lang = en [python-36.library--ftplib] -trans.fr = .tx/library/ftplib.po +trans.fr = library/ftplib.po type = PO source_lang = en [python-36.library--multiprocessing] -trans.fr = .tx/library/multiprocessing.po +trans.fr = library/multiprocessing.po type = PO source_lang = en [python-36.library--types] -trans.fr = .tx/library/types.po +trans.fr = library/types.po type = PO source_lang = en [python-36.library--ipaddress] -trans.fr = .tx/library/ipaddress.po +trans.fr = library/ipaddress.po type = PO source_lang = en [python-36.library--fpectl] -trans.fr = .tx/library/fpectl.po +trans.fr = library/fpectl.po type = PO source_lang = en [python-36.library--exceptions] -trans.fr = .tx/library/exceptions.po +trans.fr = library/exceptions.po type = PO source_lang = en [python-36.library--asyncio-stream] -trans.fr = .tx/library/asyncio-stream.po +trans.fr = library/asyncio-stream.po type = PO source_lang = en [python-36.library--custominterp] -trans.fr = .tx/library/custominterp.po +trans.fr = library/custominterp.po type = PO source_lang = en [python-36.library--codecs] -trans.fr = .tx/library/codecs.po +trans.fr = library/codecs.po type = PO source_lang = en [python-36.library--bdb] -trans.fr = .tx/library/bdb.po +trans.fr = library/bdb.po type = PO source_lang = en [python-36.library--archiving] -trans.fr = .tx/library/archiving.po +trans.fr = library/archiving.po type = PO source_lang = en [python-36.library--hashlib] -trans.fr = .tx/library/hashlib.po +trans.fr = library/hashlib.po type = PO source_lang = en [python-36.library--tkinter] -trans.fr = .tx/library/tkinter.po +trans.fr = library/tkinter.po type = PO source_lang = en [python-36.library--sys] -trans.fr = .tx/library/sys.po +trans.fr = library/sys.po type = PO source_lang = en [python-36.library--cmath] -trans.fr = .tx/library/cmath.po +trans.fr = library/cmath.po type = PO source_lang = en [python-36.library--functional] -trans.fr = .tx/library/functional.po +trans.fr = library/functional.po type = PO source_lang = en [python-36.library--html_entities] -trans.fr = .tx/library/html.entities.po +trans.fr = library/html.entities.po type = PO source_lang = en [python-36.library--resource] -trans.fr = .tx/library/resource.po +trans.fr = library/resource.po type = PO source_lang = en [python-36.library--pickletools] -trans.fr = .tx/library/pickletools.po +trans.fr = library/pickletools.po type = PO source_lang = en [python-36.library--email_util] -trans.fr = .tx/library/email.util.po +trans.fr = library/email.util.po type = PO source_lang = en [python-36.library--xmlrpc] -trans.fr = .tx/library/xmlrpc.po +trans.fr = library/xmlrpc.po type = PO source_lang = en [python-36.library--lzma] -trans.fr = .tx/library/lzma.po +trans.fr = library/lzma.po type = PO source_lang = en [python-36.library--syslog] -trans.fr = .tx/library/syslog.po +trans.fr = library/syslog.po type = PO source_lang = en [python-36.library--subprocess] -trans.fr = .tx/library/subprocess.po +trans.fr = library/subprocess.po type = PO source_lang = en [python-36.library--pdb] -trans.fr = .tx/library/pdb.po +trans.fr = library/pdb.po type = PO source_lang = en [python-36.library--wsgiref] -trans.fr = .tx/library/wsgiref.po +trans.fr = library/wsgiref.po type = PO source_lang = en [python-36.library--formatter] -trans.fr = .tx/library/formatter.po +trans.fr = library/formatter.po type = PO source_lang = en [python-36.library--getopt] -trans.fr = .tx/library/getopt.po +trans.fr = library/getopt.po type = PO source_lang = en [python-36.library--cgi] -trans.fr = .tx/library/cgi.po +trans.fr = library/cgi.po type = PO source_lang = en [python-36.library--winsound] -trans.fr = .tx/library/winsound.po +trans.fr = library/winsound.po type = PO source_lang = en [python-36.library--audioop] -trans.fr = .tx/library/audioop.po +trans.fr = library/audioop.po type = PO source_lang = en [python-36.library--__main__] -trans.fr = .tx/library/__main__.po +trans.fr = library/__main__.po type = PO source_lang = en [python-36.library--sndhdr] -trans.fr = .tx/library/sndhdr.po +trans.fr = library/sndhdr.po type = PO source_lang = en [python-36.library--copy] -trans.fr = .tx/library/copy.po +trans.fr = library/copy.po type = PO source_lang = en [python-36.library--email_contentmanager] -trans.fr = .tx/library/email.contentmanager.po +trans.fr = library/email.contentmanager.po type = PO source_lang = en [python-36.library--aifc] -trans.fr = .tx/library/aifc.po +trans.fr = library/aifc.po type = PO source_lang = en [python-36.library--msvcrt] -trans.fr = .tx/library/msvcrt.po +trans.fr = library/msvcrt.po type = PO source_lang = en [python-36.library--xmlrpc_client] -trans.fr = .tx/library/xmlrpc.client.po +trans.fr = library/xmlrpc.client.po type = PO source_lang = en [python-36.library--logging_handlers] -trans.fr = .tx/library/logging.handlers.po +trans.fr = library/logging.handlers.po type = PO source_lang = en [python-36.library--grp] -trans.fr = .tx/library/grp.po +trans.fr = library/grp.po type = PO source_lang = en [python-36.library--logging] -trans.fr = .tx/library/logging.po +trans.fr = library/logging.po type = PO source_lang = en [python-36.library--i18n] -trans.fr = .tx/library/i18n.po +trans.fr = library/i18n.po type = PO source_lang = en [python-36.library--zipimport] -trans.fr = .tx/library/zipimport.po +trans.fr = library/zipimport.po type = PO source_lang = en [python-36.library--curses_ascii] -trans.fr = .tx/library/curses.ascii.po +trans.fr = library/curses.ascii.po type = PO source_lang = en [python-36.library--operator] -trans.fr = .tx/library/operator.po +trans.fr = library/operator.po type = PO source_lang = en [python-36.library--winreg] -trans.fr = .tx/library/winreg.po +trans.fr = library/winreg.po type = PO source_lang = en [python-36.library--frameworks] -trans.fr = .tx/library/frameworks.po +trans.fr = library/frameworks.po type = PO source_lang = en [python-36.library--ossaudiodev] -trans.fr = .tx/library/ossaudiodev.po +trans.fr = library/ossaudiodev.po type = PO source_lang = en [python-36.library--urllib] -trans.fr = .tx/library/urllib.po +trans.fr = library/urllib.po type = PO source_lang = en [python-36.library--os] -trans.fr = .tx/library/os.po +trans.fr = library/os.po type = PO source_lang = en [python-36.library--smtplib] -trans.fr = .tx/library/smtplib.po +trans.fr = library/smtplib.po type = PO source_lang = en [python-36.library--copyreg] -trans.fr = .tx/library/copyreg.po +trans.fr = library/copyreg.po type = PO source_lang = en [python-36.library--test] -trans.fr = .tx/library/test.po +trans.fr = library/test.po type = PO source_lang = en [python-36.library--xml_sax] -trans.fr = .tx/library/xml.sax.po +trans.fr = library/xml.sax.po type = PO source_lang = en [python-36.library--2to3] -trans.fr = .tx/library/2to3.po +trans.fr = library/2to3.po type = PO source_lang = en [python-36.library--http_server] -trans.fr = .tx/library/http.server.po +trans.fr = library/http.server.po type = PO source_lang = en [python-36.library--email_compat32-message] -trans.fr = .tx/library/email.compat32-message.po +trans.fr = library/email.compat32-message.po type = PO source_lang = en [python-36.library--zlib] -trans.fr = .tx/library/zlib.po +trans.fr = library/zlib.po type = PO source_lang = en [python-36.distutils--configfile] -trans.fr = .tx/distutils/configfile.po +trans.fr = distutils/configfile.po type = PO source_lang = en [python-36.distutils--sourcedist] -trans.fr = .tx/distutils/sourcedist.po +trans.fr = distutils/sourcedist.po type = PO source_lang = en [python-36.distutils--extending] -trans.fr = .tx/distutils/extending.po +trans.fr = distutils/extending.po type = PO source_lang = en [python-36.distutils--setupscript] -trans.fr = .tx/distutils/setupscript.po +trans.fr = distutils/setupscript.po type = PO source_lang = en [python-36.distutils--commandref] -trans.fr = .tx/distutils/commandref.po +trans.fr = distutils/commandref.po type = PO source_lang = en [python-36.distutils--builtdist] -trans.fr = .tx/distutils/builtdist.po +trans.fr = distutils/builtdist.po type = PO source_lang = en [python-36.distutils--introduction] -trans.fr = .tx/distutils/introduction.po +trans.fr = distutils/introduction.po type = PO source_lang = en [python-36.distutils--index] -trans.fr = .tx/distutils/index.po +trans.fr = distutils/index.po type = PO source_lang = en [python-36.distutils--packageindex] -trans.fr = .tx/distutils/packageindex.po +trans.fr = distutils/packageindex.po type = PO source_lang = en [python-36.distutils--examples] -trans.fr = .tx/distutils/examples.po +trans.fr = distutils/examples.po type = PO source_lang = en [python-36.distutils--uploading] -trans.fr = .tx/distutils/uploading.po +trans.fr = distutils/uploading.po type = PO source_lang = en [python-36.distutils--apiref] -trans.fr = .tx/distutils/apiref.po +trans.fr = distutils/apiref.po type = PO source_lang = en [python-36.distributing--index] -trans.fr = .tx/distributing/index.po +trans.fr = distributing/index.po type = PO source_lang = en [python-36.faq--extending] -trans.fr = .tx/faq/extending.po +trans.fr = faq/extending.po type = PO source_lang = en [python-36.faq--windows] -trans.fr = .tx/faq/windows.po +trans.fr = faq/windows.po type = PO source_lang = en [python-36.faq--general] -trans.fr = .tx/faq/general.po +trans.fr = faq/general.po type = PO source_lang = en [python-36.faq--library] -trans.fr = .tx/faq/library.po +trans.fr = faq/library.po type = PO source_lang = en [python-36.faq--gui] -trans.fr = .tx/faq/gui.po +trans.fr = faq/gui.po type = PO source_lang = en [python-36.faq--installed] -trans.fr = .tx/faq/installed.po +trans.fr = faq/installed.po type = PO source_lang = en [python-36.faq--index] -trans.fr = .tx/faq/index.po +trans.fr = faq/index.po type = PO source_lang = en [python-36.faq--design] -trans.fr = .tx/faq/design.po +trans.fr = faq/design.po type = PO source_lang = en [python-36.faq--programming] -trans.fr = .tx/faq/programming.po +trans.fr = faq/programming.po type = PO source_lang = en [python-36.using--unix] -trans.fr = .tx/using/unix.po +trans.fr = using/unix.po type = PO source_lang = en [python-36.using--mac] -trans.fr = .tx/using/mac.po +trans.fr = using/mac.po type = PO source_lang = en [python-36.using--cmdline] -trans.fr = .tx/using/cmdline.po +trans.fr = using/cmdline.po type = PO source_lang = en [python-36.using--windows] -trans.fr = .tx/using/windows.po +trans.fr = using/windows.po type = PO source_lang = en [python-36.using--index] -trans.fr = .tx/using/index.po +trans.fr = using/index.po type = PO source_lang = en [python-36.howto--clinic] -trans.fr = .tx/howto/clinic.po +trans.fr = howto/clinic.po type = PO source_lang = en [python-36.howto--urllib2] -trans.fr = .tx/howto/urllib2.po +trans.fr = howto/urllib2.po type = PO source_lang = en [python-36.howto--argparse] -trans.fr = .tx/howto/argparse.po +trans.fr = howto/argparse.po type = PO source_lang = en [python-36.howto--curses] -trans.fr = .tx/howto/curses.po +trans.fr = howto/curses.po type = PO source_lang = en [python-36.howto--logging-cookbook] -trans.fr = .tx/howto/logging-cookbook.po +trans.fr = howto/logging-cookbook.po type = PO source_lang = en [python-36.howto--sockets] -trans.fr = .tx/howto/sockets.po +trans.fr = howto/sockets.po type = PO source_lang = en [python-36.howto--pyporting] -trans.fr = .tx/howto/pyporting.po +trans.fr = howto/pyporting.po type = PO source_lang = en [python-36.howto--index] -trans.fr = .tx/howto/index.po +trans.fr = howto/index.po type = PO source_lang = en [python-36.howto--unicode] -trans.fr = .tx/howto/unicode.po +trans.fr = howto/unicode.po type = PO source_lang = en [python-36.howto--instrumentation] -trans.fr = .tx/howto/instrumentation.po +trans.fr = howto/instrumentation.po type = PO source_lang = en [python-36.howto--cporting] -trans.fr = .tx/howto/cporting.po +trans.fr = howto/cporting.po type = PO source_lang = en [python-36.howto--ipaddress] -trans.fr = .tx/howto/ipaddress.po +trans.fr = howto/ipaddress.po type = PO source_lang = en [python-36.howto--sorting] -trans.fr = .tx/howto/sorting.po +trans.fr = howto/sorting.po type = PO source_lang = en [python-36.howto--functional] -trans.fr = .tx/howto/functional.po +trans.fr = howto/functional.po type = PO source_lang = en [python-36.howto--logging] -trans.fr = .tx/howto/logging.po +trans.fr = howto/logging.po type = PO source_lang = en [python-36.howto--regex] -trans.fr = .tx/howto/regex.po +trans.fr = howto/regex.po type = PO source_lang = en [python-36.howto--descriptor] -trans.fr = .tx/howto/descriptor.po +trans.fr = howto/descriptor.po type = PO source_lang = en [python-36.install--index] -trans.fr = .tx/install/index.po +trans.fr = install/index.po type = PO source_lang = en [python-36.reference--simple_stmts] -trans.fr = .tx/reference/simple_stmts.po +trans.fr = reference/simple_stmts.po type = PO source_lang = en [python-36.reference--expressions] -trans.fr = .tx/reference/expressions.po +trans.fr = reference/expressions.po type = PO source_lang = en [python-36.reference--compound_stmts] -trans.fr = .tx/reference/compound_stmts.po +trans.fr = reference/compound_stmts.po type = PO source_lang = en [python-36.reference--introduction] -trans.fr = .tx/reference/introduction.po +trans.fr = reference/introduction.po type = PO source_lang = en [python-36.reference--import] -trans.fr = .tx/reference/import.po +trans.fr = reference/import.po type = PO source_lang = en [python-36.reference--grammar] -trans.fr = .tx/reference/grammar.po +trans.fr = reference/grammar.po type = PO source_lang = en [python-36.reference--datamodel] -trans.fr = .tx/reference/datamodel.po +trans.fr = reference/datamodel.po type = PO source_lang = en [python-36.reference--index] -trans.fr = .tx/reference/index.po +trans.fr = reference/index.po type = PO source_lang = en [python-36.reference--toplevel_components] -trans.fr = .tx/reference/toplevel_components.po +trans.fr = reference/toplevel_components.po type = PO source_lang = en [python-36.reference--lexical_analysis] -trans.fr = .tx/reference/lexical_analysis.po +trans.fr = reference/lexical_analysis.po type = PO source_lang = en [python-36.reference--executionmodel] -trans.fr = .tx/reference/executionmodel.po +trans.fr = reference/executionmodel.po type = PO source_lang = en [python-36.whatsnew--2_6] -trans.fr = .tx/whatsnew/2.6.po +trans.fr = whatsnew/2.6.po type = PO source_lang = en [python-36.whatsnew--2_3] -trans.fr = .tx/whatsnew/2.3.po +trans.fr = whatsnew/2.3.po type = PO source_lang = en [python-36.whatsnew--changelog] -trans.fr = .tx/whatsnew/changelog.po +trans.fr = whatsnew/changelog.po type = PO source_lang = en [python-36.whatsnew--2_2] -trans.fr = .tx/whatsnew/2.2.po +trans.fr = whatsnew/2.2.po type = PO source_lang = en [python-36.whatsnew--3_3] -trans.fr = .tx/whatsnew/3.3.po +trans.fr = whatsnew/3.3.po type = PO source_lang = en [python-36.whatsnew--3_4] -trans.fr = .tx/whatsnew/3.4.po +trans.fr = whatsnew/3.4.po type = PO source_lang = en [python-36.whatsnew--3_2] -trans.fr = .tx/whatsnew/3.2.po +trans.fr = whatsnew/3.2.po type = PO source_lang = en [python-36.whatsnew--2_7] -trans.fr = .tx/whatsnew/2.7.po +trans.fr = whatsnew/2.7.po type = PO source_lang = en [python-36.whatsnew--3_1] -trans.fr = .tx/whatsnew/3.1.po +trans.fr = whatsnew/3.1.po type = PO source_lang = en [python-36.whatsnew--3_0] -trans.fr = .tx/whatsnew/3.0.po +trans.fr = whatsnew/3.0.po type = PO source_lang = en [python-36.whatsnew--index] -trans.fr = .tx/whatsnew/index.po +trans.fr = whatsnew/index.po type = PO source_lang = en [python-36.whatsnew--2_0] -trans.fr = .tx/whatsnew/2.0.po +trans.fr = whatsnew/2.0.po type = PO source_lang = en [python-36.whatsnew--2_4] -trans.fr = .tx/whatsnew/2.4.po +trans.fr = whatsnew/2.4.po type = PO source_lang = en [python-36.whatsnew--3_5] -trans.fr = .tx/whatsnew/3.5.po +trans.fr = whatsnew/3.5.po type = PO source_lang = en [python-36.whatsnew--2_5] -trans.fr = .tx/whatsnew/2.5.po +trans.fr = whatsnew/2.5.po type = PO source_lang = en [python-36.whatsnew--2_1] -trans.fr = .tx/whatsnew/2.1.po +trans.fr = whatsnew/2.1.po type = PO source_lang = en [python-36.whatsnew--3_6] -trans.fr = .tx/whatsnew/3.6.po +trans.fr = whatsnew/3.6.po type = PO source_lang = en [python-36.tutorial--modules] -trans.fr = .tx/tutorial/modules.po +trans.fr = tutorial/modules.po type = PO source_lang = en [python-36.tutorial--stdlib2] -trans.fr = .tx/tutorial/stdlib2.po +trans.fr = tutorial/stdlib2.po type = PO source_lang = en [python-36.tutorial--whatnow] -trans.fr = .tx/tutorial/whatnow.po +trans.fr = tutorial/whatnow.po type = PO source_lang = en [python-36.tutorial--floatingpoint] -trans.fr = .tx/tutorial/floatingpoint.po +trans.fr = tutorial/floatingpoint.po type = PO source_lang = en [python-36.tutorial--inputoutput] -trans.fr = .tx/tutorial/inputoutput.po +trans.fr = tutorial/inputoutput.po type = PO source_lang = en [python-36.tutorial--classes] -trans.fr = .tx/tutorial/classes.po +trans.fr = tutorial/classes.po type = PO source_lang = en [python-36.tutorial--appendix] -trans.fr = .tx/tutorial/appendix.po +trans.fr = tutorial/appendix.po type = PO source_lang = en [python-36.tutorial--interactive] -trans.fr = .tx/tutorial/interactive.po +trans.fr = tutorial/interactive.po type = PO source_lang = en [python-36.tutorial--venv] -trans.fr = .tx/tutorial/venv.po +trans.fr = tutorial/venv.po type = PO source_lang = en [python-36.tutorial--introduction] -trans.fr = .tx/tutorial/introduction.po +trans.fr = tutorial/introduction.po type = PO source_lang = en [python-36.tutorial--index] -trans.fr = .tx/tutorial/index.po +trans.fr = tutorial/index.po type = PO source_lang = en [python-36.tutorial--controlflow] -trans.fr = .tx/tutorial/controlflow.po +trans.fr = tutorial/controlflow.po type = PO source_lang = en [python-36.tutorial--appetite] -trans.fr = .tx/tutorial/appetite.po +trans.fr = tutorial/appetite.po type = PO source_lang = en [python-36.tutorial--errors] -trans.fr = .tx/tutorial/errors.po +trans.fr = tutorial/errors.po type = PO source_lang = en [python-36.tutorial--interpreter] -trans.fr = .tx/tutorial/interpreter.po +trans.fr = tutorial/interpreter.po type = PO source_lang = en [python-36.tutorial--datastructures] -trans.fr = .tx/tutorial/datastructures.po +trans.fr = tutorial/datastructures.po type = PO source_lang = en [python-36.tutorial--stdlib] -trans.fr = .tx/tutorial/stdlib.po +trans.fr = tutorial/stdlib.po type = PO source_lang = en [python-36.extending--building] -trans.fr = .tx/extending/building.po +trans.fr = extending/building.po type = PO source_lang = en [python-36.extending--extending] -trans.fr = .tx/extending/extending.po +trans.fr = extending/extending.po type = PO source_lang = en [python-36.extending--windows] -trans.fr = .tx/extending/windows.po +trans.fr = extending/windows.po type = PO source_lang = en [python-36.extending--index] -trans.fr = .tx/extending/index.po +trans.fr = extending/index.po type = PO source_lang = en [python-36.extending--embedding] -trans.fr = .tx/extending/embedding.po +trans.fr = extending/embedding.po type = PO source_lang = en [python-36.extending--newtypes] -trans.fr = .tx/extending/newtypes.po +trans.fr = extending/newtypes.po type = PO source_lang = en [python-36.installing--index] -trans.fr = .tx/installing/index.po +trans.fr = installing/index.po type = PO source_lang = en [python-36.c-api--conversion] -trans.fr = .tx/c-api/conversion.po +trans.fr = c-api/conversion.po type = PO source_lang = en [python-36.c-api--datetime] -trans.fr = .tx/c-api/datetime.po +trans.fr = c-api/datetime.po type = PO source_lang = en [python-36.c-api--memory] -trans.fr = .tx/c-api/memory.po +trans.fr = c-api/memory.po type = PO source_lang = en [python-36.c-api--coro] -trans.fr = .tx/c-api/coro.po +trans.fr = c-api/coro.po type = PO source_lang = en [python-36.c-api--file] -trans.fr = .tx/c-api/file.po +trans.fr = c-api/file.po type = PO source_lang = en [python-36.c-api--object] -trans.fr = .tx/c-api/object.po +trans.fr = c-api/object.po type = PO source_lang = en [python-36.c-api--capsule] -trans.fr = .tx/c-api/capsule.po +trans.fr = c-api/capsule.po type = PO source_lang = en [python-36.c-api--function] -trans.fr = .tx/c-api/function.po +trans.fr = c-api/function.po type = PO source_lang = en [python-36.c-api--refcounting] -trans.fr = .tx/c-api/refcounting.po +trans.fr = c-api/refcounting.po type = PO source_lang = en [python-36.c-api--cell] -trans.fr = .tx/c-api/cell.po +trans.fr = c-api/cell.po type = PO source_lang = en [python-36.c-api--none] -trans.fr = .tx/c-api/none.po +trans.fr = c-api/none.po type = PO source_lang = en [python-36.c-api--allocation] -trans.fr = .tx/c-api/allocation.po +trans.fr = c-api/allocation.po type = PO source_lang = en [python-36.c-api--intro] -trans.fr = .tx/c-api/intro.po +trans.fr = c-api/intro.po type = PO source_lang = en [python-36.c-api--number] -trans.fr = .tx/c-api/number.po +trans.fr = c-api/number.po type = PO source_lang = en [python-36.c-api--float] -trans.fr = .tx/c-api/float.po +trans.fr = c-api/float.po type = PO source_lang = en [python-36.c-api--list] -trans.fr = .tx/c-api/list.po +trans.fr = c-api/list.po type = PO source_lang = en [python-36.c-api--memoryview] -trans.fr = .tx/c-api/memoryview.po +trans.fr = c-api/memoryview.po type = PO source_lang = en [python-36.c-api--structures] -trans.fr = .tx/c-api/structures.po +trans.fr = c-api/structures.po type = PO source_lang = en [python-36.c-api--mapping] -trans.fr = .tx/c-api/mapping.po +trans.fr = c-api/mapping.po type = PO source_lang = en [python-36.c-api--iterator] -trans.fr = .tx/c-api/iterator.po +trans.fr = c-api/iterator.po type = PO source_lang = en [python-36.c-api--abstract] -trans.fr = .tx/c-api/abstract.po +trans.fr = c-api/abstract.po type = PO source_lang = en [python-36.c-api--gen] -trans.fr = .tx/c-api/gen.po +trans.fr = c-api/gen.po type = PO source_lang = en [python-36.c-api--arg] -trans.fr = .tx/c-api/arg.po +trans.fr = c-api/arg.po type = PO source_lang = en [python-36.c-api--method] -trans.fr = .tx/c-api/method.po +trans.fr = c-api/method.po type = PO source_lang = en [python-36.c-api--sequence] -trans.fr = .tx/c-api/sequence.po +trans.fr = c-api/sequence.po type = PO source_lang = en [python-36.c-api--marshal] -trans.fr = .tx/c-api/marshal.po +trans.fr = c-api/marshal.po type = PO source_lang = en [python-36.c-api--import] -trans.fr = .tx/c-api/import.po +trans.fr = c-api/import.po type = PO source_lang = en [python-36.c-api--weakref] -trans.fr = .tx/c-api/weakref.po +trans.fr = c-api/weakref.po type = PO source_lang = en [python-36.c-api--dict] -trans.fr = .tx/c-api/dict.po +trans.fr = c-api/dict.po type = PO source_lang = en [python-36.c-api--buffer] -trans.fr = .tx/c-api/buffer.po +trans.fr = c-api/buffer.po type = PO source_lang = en [python-36.c-api--code] -trans.fr = .tx/c-api/code.po +trans.fr = c-api/code.po type = PO source_lang = en [python-36.c-api--index] -trans.fr = .tx/c-api/index.po +trans.fr = c-api/index.po type = PO source_lang = en [python-36.c-api--concrete] -trans.fr = .tx/c-api/concrete.po +trans.fr = c-api/concrete.po type = PO source_lang = en [python-36.c-api--unicode] -trans.fr = .tx/c-api/unicode.po +trans.fr = c-api/unicode.po type = PO source_lang = en [python-36.c-api--bytes] -trans.fr = .tx/c-api/bytes.po +trans.fr = c-api/bytes.po type = PO source_lang = en [python-36.c-api--init] -trans.fr = .tx/c-api/init.po +trans.fr = c-api/init.po type = PO source_lang = en [python-36.c-api--bool] -trans.fr = .tx/c-api/bool.po +trans.fr = c-api/bool.po type = PO source_lang = en [python-36.c-api--reflection] -trans.fr = .tx/c-api/reflection.po +trans.fr = c-api/reflection.po type = PO source_lang = en [python-36.c-api--gcsupport] -trans.fr = .tx/c-api/gcsupport.po +trans.fr = c-api/gcsupport.po type = PO source_lang = en [python-36.c-api--module] -trans.fr = .tx/c-api/module.po +trans.fr = c-api/module.po type = PO source_lang = en [python-36.c-api--veryhigh] -trans.fr = .tx/c-api/veryhigh.po +trans.fr = c-api/veryhigh.po type = PO source_lang = en [python-36.c-api--exceptions] -trans.fr = .tx/c-api/exceptions.po +trans.fr = c-api/exceptions.po type = PO source_lang = en [python-36.c-api--objimpl] -trans.fr = .tx/c-api/objimpl.po +trans.fr = c-api/objimpl.po type = PO source_lang = en [python-36.c-api--type] -trans.fr = .tx/c-api/type.po +trans.fr = c-api/type.po type = PO source_lang = en [python-36.c-api--set] -trans.fr = .tx/c-api/set.po +trans.fr = c-api/set.po type = PO source_lang = en [python-36.c-api--codec] -trans.fr = .tx/c-api/codec.po +trans.fr = c-api/codec.po type = PO source_lang = en [python-36.c-api--typeobj] -trans.fr = .tx/c-api/typeobj.po +trans.fr = c-api/typeobj.po type = PO source_lang = en [python-36.c-api--sys] -trans.fr = .tx/c-api/sys.po +trans.fr = c-api/sys.po type = PO source_lang = en [python-36.c-api--bytearray] -trans.fr = .tx/c-api/bytearray.po +trans.fr = c-api/bytearray.po type = PO source_lang = en [python-36.c-api--tuple] -trans.fr = .tx/c-api/tuple.po +trans.fr = c-api/tuple.po type = PO source_lang = en [python-36.c-api--apiabiversion] -trans.fr = .tx/c-api/apiabiversion.po +trans.fr = c-api/apiabiversion.po type = PO source_lang = en [python-36.c-api--stable] -trans.fr = .tx/c-api/stable.po +trans.fr = c-api/stable.po type = PO source_lang = en [python-36.c-api--objbuffer] -trans.fr = .tx/c-api/objbuffer.po +trans.fr = c-api/objbuffer.po type = PO source_lang = en [python-36.c-api--slice] -trans.fr = .tx/c-api/slice.po +trans.fr = c-api/slice.po type = PO source_lang = en [python-36.c-api--long] -trans.fr = .tx/c-api/long.po +trans.fr = c-api/long.po type = PO source_lang = en [python-36.c-api--iter] -trans.fr = .tx/c-api/iter.po +trans.fr = c-api/iter.po type = PO source_lang = en [python-36.c-api--utilities] -trans.fr = .tx/c-api/utilities.po +trans.fr = c-api/utilities.po type = PO source_lang = en [python-36.c-api--complex] -trans.fr = .tx/c-api/complex.po +trans.fr = c-api/complex.po type = PO source_lang = en [python-36.c-api--descriptor] -trans.fr = .tx/c-api/descriptor.po +trans.fr = c-api/descriptor.po type = PO source_lang = en diff --git a/Makefile b/Makefile index 1b5bbf09b..0ab7990cd 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,7 @@ # - make merge # To merge pot from upstream # - make fuzzy # To find fuzzy strings # - make progress # To compute current progression +# - make upgrade_venv # To upgrade the venv that compiles the doc # # Modes are: autobuild-stable, autobuild-dev, and autobuild-html, # documented in gen/src/3.6/Doc/Makefile as we're only delegating the @@ -19,13 +20,14 @@ VENV := ~/.venvs/python-docs-i18n/ PYTHON := $(shell which python3) MODE := autobuild-dev-html BRANCH = $(shell git describe --contains --all HEAD) +JOBS = 1 .PHONY: all all: $(VENV)/bin/sphinx-build $(VENV)/bin/blurb $(SPHINX_CONF) mkdir -p $(CPYTHON_CLONE)/Doc/locales/$(LANGUAGE)/ ln -nfs $(shell readlink -f .) $(CPYTHON_CLONE)/Doc/locales/$(LANGUAGE)/LC_MESSAGES - . $(VENV)/bin/activate; $(MAKE) -C $(CPYTHON_CLONE)/Doc/ SPHINXOPTS='-D locale_dirs=locales -D language=$(LANGUAGE) -D gettext_compact=0' $(MODE) + . $(VENV)/bin/activate; $(MAKE) -C $(CPYTHON_CLONE)/Doc/ SPHINXOPTS='-j$(JOBS) -D locale_dirs=locales -D language=$(LANGUAGE) -D gettext_compact=0' $(MODE) $(SPHINX_CONF): @@ -45,6 +47,11 @@ $(VENV)/bin/blurb: $(VENV)/bin/activate . $(VENV)/bin/activate; python3 -m pip install blurb +.PHONY: upgrade_venv +upgrade_venv: $(VENV)/bin/activate + . $(VENV)/bin/activate; python3 -m pip install --upgrade sphinx blurb + + .PHONY: progress progress: @python3 -c 'import sys; print("{:.1%}".format(int(sys.argv[1]) / int(sys.argv[2])))' \ @@ -58,10 +65,11 @@ todo: .PHONY: merge -merge: $(VENV)/bin/sphinx-build +merge: upgrade_venv ifneq "$(shell cd $(CPYTHON_CLONE) 2>/dev/null && git describe --contains --all HEAD)" "$(BRANCH)" $(error "You're merging from a different branch") endif + (cd $(CPYTHON_CLONE)/Doc; rm -f build/NEWS) (cd $(CPYTHON_CLONE); $(VENV)/bin/sphinx-build -Q -b gettext -D gettext_compact=0 Doc pot/) find $(CPYTHON_CLONE)/pot/ -name '*.pot' |\ while read -r POT;\ @@ -70,7 +78,10 @@ endif mkdir -p "$$(dirname "$$PO")";\ if [ -f "$$PO" ];\ then\ - msgmerge --backup=off --force-po -U "$$PO" "$$POT";\ + case "$$POT" in\ + *whatsnew*) msgmerge --backup=off --force-po --no-fuzzy-matching -U "$$PO" "$$POT" ;;\ + *) msgmerge --backup=off --force-po -U "$$PO" "$$POT" ;;\ + esac\ else\ msgcat -o "$$PO" "$$POT";\ fi\ @@ -79,4 +90,4 @@ endif .PHONY: fuzzy fuzzy: - for file in *.po */*.po; do echo $$(msgattrib --only-fuzzy --no-obsolete "$$file" | grep -c ^msgid) $$file; done | grep -v ^0 | sort -gr + for file in *.po */*.po; do echo $$(msgattrib --only-fuzzy --no-obsolete "$$file" | grep -c '#, fuzzy') $$file; done | grep -v ^0 | sort -gr diff --git a/README.rst b/README.rst index b08aaae58..1ba169980 100644 --- a/README.rst +++ b/README.rst @@ -1,11 +1,10 @@ French Translation of the Python Documentation ============================================== -**Translated: 28.0%** +**Translated: 29%** -See the `README.rst file on master -`_ -for more informations. +This is the 3.6 branch, we're no longer translating on it, see the 3.7 +branch. Documentation Contribution Agreement diff --git a/TRANSLATORS b/TRANSLATORS index cd3fef980..acae258f2 100644 --- a/TRANSLATORS +++ b/TRANSLATORS @@ -4,3 +4,4 @@ RobinPetit Valentin Lorentz Antoine Rozo Mohamed Kiouaz +Hervé Sousset diff --git a/about.po b/about.po index 540dd3d9d..8fe2df5d7 100644 --- a/about.po +++ b/about.po @@ -60,7 +60,7 @@ msgid "" "reStructuredText and the Docutils suite;" msgstr "" "le projet `Docutils `_ pour avoir créé " -"reStructuredText et la suite d'outils Docutils ;" +"*reStructuredText* et la suite d'outils *Docutils* ;" #: ../Doc/about.rst:26 msgid "" @@ -80,7 +80,7 @@ msgid "" "library, and the Python documentation. See :source:`Misc/ACKS` in the " "Python source distribution for a partial list of contributors." msgstr "" -"De nombreuses personnes ont contribué au language Python, à sa librarie " +"De nombreuses personnes ont contribué au langage Python, à sa bibliothèque " "standard et à sa documentation. Consultez :source:`Misc/ACKS` dans les " "sources de la distribution Python pour avoir une liste partielle des " "contributeurs." @@ -91,4 +91,4 @@ msgid "" "Python has such wonderful documentation -- Thank You!" msgstr "" "Ce n'est que grâce aux suggestions et contributions de la communauté Python " -"que Python a une documentation si merveilleuse -- Merci !" +"que Python a une documentation si merveilleuse — Merci !" diff --git a/bugs.po b/bugs.po index e00f2cdd6..5947f4f2c 100644 --- a/bugs.po +++ b/bugs.po @@ -19,7 +19,7 @@ msgstr "" #: ../Doc/bugs.rst:5 msgid "Dealing with Bugs" -msgstr "S'attaquer aux bugs" +msgstr "S'attaquer aux bogues" #: ../Doc/bugs.rst:7 msgid "" @@ -27,9 +27,9 @@ msgid "" "for stability. In order to maintain this reputation, the developers would " "like to know of any deficiencies you find in Python." msgstr "" -"Python est un langage de programmation mature réputé pour sa stabilité. Afin " -"de maintenir cette réputation, les développeurs souhaitent connaître toute " -"déficience que vous pourriez rencontrer dans Python." +"Python est un langage de programmation robuste réputé pour sa stabilité. " +"Afin de maintenir cette réputation, les développeurs souhaitent connaître " +"tout problème que vous pourriez rencontrer dans Python." #: ../Doc/bugs.rst:11 msgid "" @@ -37,9 +37,9 @@ msgid "" "Python as it streamlines the process and involves less people. Learn how to :" "ref:`contribute `." msgstr "" -"Il est parfois plus rapide de réparer les bugs soi-même et d'en proposer les " -"*patch*, ca simplifie le processus et implique moins de monde. Apprenez à :" -"ref:`contribuer `." +"Il est parfois plus rapide de réparer les bogues soi-même et d'en proposer " +"les correctifs, ça simplifie le processus et implique moins de monde. " +"Apprenez à :ref:`contribuer `." #: ../Doc/bugs.rst:16 msgid "Documentation bugs" @@ -57,8 +57,8 @@ msgstr "" "décrivant en anglais le bogue et où vous l'avez trouvé. Si le problème ne " "touche que la traduction en français, ouvrez un ticket sur https://github." "com/python/python-docs-fr/issues, ou venez nous en toucher un mot sur le " -"canal #python-fr sur freenode (https://webchat.freenode.net/). Si vous avez " -"une suggestion de correction, merci de l'inclure également." +"canal #python-fr sur *freenode* (https://webchat.freenode.net/). Si vous " +"avez une suggestion de correction, merci de l'inclure également." #: ../Doc/bugs.rst:22 msgid "" @@ -67,9 +67,9 @@ msgid "" "'docs@' is a mailing list run by volunteers; your request will be noticed, " "though it may take a while to be processed." msgstr "" -"Si vous êtes limités par le temps, vous pouvez aussi envoyer un e-mail à " -"docs@python.org (les bugs de comportement peuvent être envoyés à python-" -"list@python.org). 'docs@' est une liste de diffusion gérée par des " +"Si vous êtes limité par le temps, vous pouvez aussi envoyer un courriel à " +"docs@python.org (les bogues de comportement peuvent être envoyés à python-" +"list@python.org). « docs@ » est une liste de diffusion gérée par des " "volontaires, votre requête sera vue, mais elle peut prendre un moment pour " "être traitée." @@ -79,7 +79,7 @@ msgstr "`Documentation bugs`_ sur le gestionnaire de ticket de Python" #: ../Doc/bugs.rst:33 msgid "Using the Python issue tracker" -msgstr "Utilisation du gestionnaire de ticket Python" +msgstr "Utilisation du gestionnaire de tickets Python" #: ../Doc/bugs.rst:35 msgid "" @@ -87,10 +87,10 @@ msgid "" "(https://bugs.python.org/). The bug tracker offers a Web form which allows " "pertinent information to be entered and submitted to the developers." msgstr "" -"Les rapports de bugs pour Python lui-même devraient être soumis via le Bug " -"Tracker Python (http://bugs.python.org/). Le gestionnaire de ticket propose " -"un formulaire Web permettant de saisir des informations pertinentes à " -"soumettre aux développeurs." +"Les rapports de bogues pour Python lui-même devraient être soumis via le " +"*Bug Tracker Python* (http://bugs.python.org/). Le gestionnaire de tickets " +"propose un formulaire Web permettant de saisir des informations pertinentes " +"à soumettre aux développeurs." #: ../Doc/bugs.rst:39 msgid "" @@ -118,12 +118,12 @@ msgid "" "OpenID provider logos in the sidebar. It is not possible to submit a bug " "report anonymously." msgstr "" -"Si le problème que vous soumettez n'est pas déjà dans le bug tracker, " -"revenez au Python Bug Tracker et connectez-vous. Si vous n'avez pas déjà un " -"compte pour le tracker, cliquez sur le lien \"S'enregistrer\", ou, si vous " -"utilisez OpenID, sur l'un des logos des fournisseurs OpenID dans la barre " -"latérale. Il n'est pas possible de soumettre un rapport de bug de manière " -"anonyme." +"Si le problème que vous soumettez n'est pas déjà dans le *bug tracker*, " +"revenez au *Python Bug Tracker* et connectez-vous. Si vous n'avez pas déjà " +"un compte pour le *tracker*, cliquez sur le lien « S'enregistrer », ou, si " +"vous utilisez *OpenID*, sur l'un des logos des fournisseurs *OpenID* dans la " +"barre latérale. Il n'est pas possible de soumettre un rapport de bogue de " +"manière anonyme." #: ../Doc/bugs.rst:51 msgid "" @@ -131,7 +131,7 @@ msgid "" "in the sidebar to open the bug reporting form." msgstr "" "Une fois identifié, pour pouvez rapporter un bogue. Sélectionnez le lien " -"\"Create New\" dans la barre latérale pour ouvrir un nouveau formulaire de " +"*Create New* dans la barre latérale pour ouvrir un nouveau formulaire de " "rapport de bogue." #: ../Doc/bugs.rst:54 @@ -142,9 +142,9 @@ msgid "" "\"Component\" and \"Versions\" to which the bug relates." msgstr "" "Le formulaire de soumission a un certain nombre de champs. Pour le champ " -"\"Titre\", saisissez une *très* courte description du problème ; moins de " -"dix mots est approprié. Dans le champ \"Type\", sélectionnez le type de " -"problème ; sélectionnez aussi \"Composant\" et \"Versions\" en rapport avec " +"« Titre », saisissez une *très* courte description du problème ; moins de " +"dix mots est approprié. Dans le champ « Type », sélectionnez le type de " +"problème ; sélectionnez aussi « Composant » et « Versions » en rapport avec " "le bogue." #: ../Doc/bugs.rst:59 @@ -154,7 +154,7 @@ msgid "" "extension modules were involved, and what hardware and software platform you " "were using (including version information as appropriate)." msgstr "" -"Dans le champ \"Commentaire\", décrivez le problème de manière détaillée, " +"Dans le champ « Commentaire », décrivez le problème de manière détaillée, " "incluant ce à quoi vous vous attendiez et ce qui s'est vraiment produit. " "Assurez-vous d'y inclure les éventuels modules d'extensions impliqués et la " "plateforme matérielle et logicielle vous utilisiez (en incluant les " @@ -215,8 +215,8 @@ msgid "" "the `core-mentorship mailing list`_ is a friendly place to get answers to " "any and all questions pertaining to the process of fixing issues in Python." msgstr "" -"Au delà de simplement remonter les bugs que vous trouvez, vous serez aussi " -"appréciés si vous y attachiez des correctifs. Vous pouvez trouver plus " +"Au-delà de simplement remonter les bogues que vous trouvez, il est aussi " +"apprécié d'y attacher des correctifs. Vous pouvez trouver plus " "d'informations pour débuter la rédaction de correctifs dans le `Python " "Developer's Guide`_. Si vous avez des questions, le `core-mentorship mailing " "list`_ est un endroit amical pour obtenir des réponses à toutes les " diff --git a/c-api/allocation.po b/c-api/allocation.po index 7a6c344c0..473afd23e 100644 --- a/c-api/allocation.po +++ b/c-api/allocation.po @@ -70,13 +70,12 @@ msgid "" msgstr "" "Alloue un nouvel objet Python en utilisant le type de structure C *TYPE* et " "l'objet de type Python *type*. Les champs non définis par l'en-tête de " -"l'objet Python ne sont pas initialisés. La mémoire allouée autorise pour la " -"structure *TYPE* plus *size* champs de la taille donnée par le champ de " -"*type* :c:member:`~PyTypeObject.tp_itemsize`. C'est utile pour " +"l'objet Python ne sont pas initialisés. La mémoire allouée est suffisante " +"pour pour la structure *TYPE* plus *size* champs de la taille donnée par le " +"champ de *type* :c:member:`~PyTypeObject.tp_itemsize`. C'est utile pour " "l'implémentation d'objets comme les tuples, qui sont capables de déterminer " -"leur taille durant le temps de la construction. Intégrer l'array de champs " -"dans la même allocation diminue le nombre d'allocations, mettant à l'épreuve " -"l'efficacité de la gestion de la mémoire." +"leur taille à la construction. Allouer les champs en même temps que l'objet " +"diminue le nombre d'allocations, améliorant ainsi les performances." #: ../Doc/c-api/allocation.rst:53 msgid "" diff --git a/c-api/arg.po b/c-api/arg.po index e1e8f61bb..e4a0c2e68 100644 --- a/c-api/arg.po +++ b/c-api/arg.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-05-27 19:40+0200\n" -"PO-Revision-Date: 2018-02-15 00:29+0100\n" +"POT-Creation-Date: 2018-04-29 00:24+0200\n" +"PO-Revision-Date: 2018-05-08 17:57+0200\n" "Last-Translator: Julien Palard \n" "Language-Team: \n" "Language: fr\n" @@ -90,6 +90,10 @@ msgid "" "this object. You won't have to release any memory yourself. The only " "exceptions are ``es``, ``es#``, ``et`` and ``et#``." msgstr "" +"En général, lorsqu'un format définit un pointeur vers un tampon, le tampon " +"est géré par l'objet Python correspondant et le tampon partage la durée de " +"vie de cet objet. vous n'avez pas à libérer de mémoire. Les seules " +"exceptions sont ``es``, ``es#``, ``et`` et ``et#``." #: ../Doc/c-api/arg.rst:42 msgid "" @@ -101,13 +105,12 @@ msgid "" "early abort case)." msgstr "" "Néanmoins, quand une structure :c:type:`Py_buffer` est en cours de " -"remplissage, le buffer sous-jacent est verrouillé pour permettre à " -"l'appelant d'utiliser le buffer par la suite, même à l'intérieur d'un bloc :" -"c:type:`Py_BEGIN_ALLOW_THREADS`. Ceci sans le risque pour les données " -"muables de voir leur taille changée ou d'être supprimées. En conséquence, " -"**il vous appartient d'appeler** :c:func:`PyBuffer_Release` après que vous " -"ayez terminé de traiter les données (ou après une interruption prémataturée " -"du traitement de ces données)." +"remplissage, le tampon sous-jacent est verrouillé pour permettre à " +"l'appelant d'utiliser le tampon par la suite, même à l'intérieur d'un bloc :" +"c:type:`Py_BEGIN_ALLOW_THREADS`, sans risques de voir des données muables se " +"faire redimensionner ou supprimer. En conséquence, **il vous appartient " +"d'appeler** :c:func:`PyBuffer_Release` après avoir terminé de traiter les " +"données (ou après une interruption prématurée du traitement de ces données)." #: ../Doc/c-api/arg.rst:49 msgid "Unless otherwise stated, buffers are not NUL-terminated." @@ -131,8 +134,8 @@ msgid "" "c:type:`Py_ssize_t` and drop :c:type:`int` support. It is best to always " "define :c:macro:`PY_SSIZE_T_CLEAN`." msgstr "" -"Pour toutes les variantes de formats ``#`` (``s#``, ``y#``, etc), le type de " -"l'argument *length* (int ou :c:type:`Py_ssize_t`) est contrôlé en " +"Pour toutes les variantes du marqueur ``#`` (``s#``, ``y#``, etc), le type " +"de l'argument *length* (*int* ou :c:type:`Py_ssize_t`) est contrôlé en " "définissant la macro :c:macro:`PY_SSIZE_T_CLEAN` avant d'inclure le fichier :" "file:`Python.h`. Si la macro est définie, la longueur est de type :c:type:" "`Py_ssize_t` au lieu d'être de type :c:type:`int`. Ce comportement changera " @@ -142,7 +145,7 @@ msgstr "" #: ../Doc/c-api/arg.rst:85 msgid "``s`` (:class:`str`) [const char \\*]" -msgstr "``s`` (:class:`str`) [const char \\*]" +msgstr "``s`` (:class:`str`) [``const char *``]" #: ../Doc/c-api/arg.rst:68 msgid "" @@ -153,6 +156,13 @@ msgid "" "is raised. Unicode objects are converted to C strings using ``'utf-8'`` " "encoding. If this conversion fails, a :exc:`UnicodeError` is raised." msgstr "" +"Convertit un objet Unicode en un pointeur vers une chaîne de caractères. " +"S'il s'agit d'un pointeur vers une chaîne de caractères déjà existante, il " +"est stocké dans la variable de type pointeur vers un caractère dont vous " +"avez donné l'adresse. Une chaîne de caractères en C se termine par *NULL*. " +"La chaîne de caractères Python ne doit donc pas contenir de caractère dont " +"le code est *null*. Si elle en contient, une exception :exc:`ValueError` est " +"levée. Si la conversion échoue, une :exc:`UnicodeError` est levée." #: ../Doc/c-api/arg.rst:77 msgid "" @@ -161,16 +171,23 @@ msgid "" "strings, it is preferable to use the ``O&`` format with :c:func:" "`PyUnicode_FSConverter` as *converter*." msgstr "" +"Ce format n'accepte pas les :term:`objets compatibles avec une chaîne " +"d'octets `. Si vous voulez accepter les chemins du " +"système de fichiers et les convertir vers des chaînes de caractères C, il " +"est préférable d'utiliser le format ``O&`` avec :c:func:" +"`PyUnicode_FSConverter` en tant que *converter*." #: ../Doc/c-api/arg.rst:83 ../Doc/c-api/arg.rst:150 msgid "" "Previously, :exc:`TypeError` was raised when embedded null code points were " "encountered in the Python string." msgstr "" +"Auparavant, une :exc:`TypeError` était levée quand la chaîne de caractères " +"Python contenait des codes NULL." #: ../Doc/c-api/arg.rst:91 msgid "``s*`` (:class:`str` or :term:`bytes-like object`) [Py_buffer]" -msgstr "``s*`` (:class:`str` ou :term:`bytes-like object`) [Py_buffer]" +msgstr "``s*`` (:class:`str` ou :term:`bytes-like object`) [``Py_buffer``]" #: ../Doc/c-api/arg.rst:88 msgid "" @@ -179,12 +196,19 @@ msgid "" "resulting C string may contain embedded NUL bytes. Unicode objects are " "converted to C strings using ``'utf-8'`` encoding." msgstr "" +"Ce format accepte les objets Unicode et les *bytes-like object*. Cela " +"remplit une structure :c:type:`Py_buffer` qui est fournie par l'appelant. " +"Dans ce cas, la chaîne de caractères C qui en résulte peut contenir des " +"octets NULL. Les objets Unicode sont convertis en chaînes de caractères C en " +"utilisant l'encodage ``'utf-8'``." #: ../Doc/c-api/arg.rst:98 msgid "" "``s#`` (:class:`str`, read-only :term:`bytes-like object`) [const char \\*, " "int or :c:type:`Py_ssize_t`]" msgstr "" +"``s#`` (:class:`str`, :term:`bytes-like object` en lecture seule) [``const " +"char \\*``, ``int`` ou :c:type:`Py_ssize_t`]" #: ../Doc/c-api/arg.rst:94 msgid "" @@ -193,10 +217,15 @@ msgid "" "second one its length. The string may contain embedded null bytes. Unicode " "objects are converted to C strings using ``'utf-8'`` encoding." msgstr "" +"La même chose que ``s*``, mais n'accepte pas les objets muables. Le résultat " +"est stocké dans deux variables C, la première est un pointeur vers une " +"chaîne de caractères C, la seconde contient sa taille. La chaîne de " +"caractères peut contenir des octets NULL. Les objets Unicode sont convertis " +"vers des chaînes de caractères C utilisant l'encodage ``'utf-8'``." #: ../Doc/c-api/arg.rst:102 msgid "``z`` (:class:`str` or ``None``) [const char \\*]" -msgstr "``z`` (:class:`str` ou ``None``) [const char \\*]" +msgstr "``z`` (:class:`str` ou ``None``) [``const char *``]" #: ../Doc/c-api/arg.rst:101 msgid "" @@ -210,7 +239,7 @@ msgstr "" msgid "" "``z*`` (:class:`str`, :term:`bytes-like object` or ``None``) [Py_buffer]" msgstr "" -"``z*`` (:class:`str`, :term:`bytes-like object` ou ``None``) [Py_buffer]" +"``z*`` (:class:`str`, :term:`bytes-like object` ou ``None``) [``Py_buffer``]" #: ../Doc/c-api/arg.rst:105 msgid "" @@ -235,6 +264,8 @@ msgstr "" #: ../Doc/c-api/arg.rst:120 msgid "``y`` (read-only :term:`bytes-like object`) [const char \\*]" msgstr "" +"``y`` (lecture seule :term:`objet compatible avec une chaîne d'octets `) [constante char \\*]" #: ../Doc/c-api/arg.rst:113 msgid "" @@ -243,16 +274,22 @@ msgid "" "contain embedded null bytes; if it does, a :exc:`ValueError` exception is " "raised." msgstr "" +"Ce format convertit un *objet compatible avec une chaîne d'octets* en un " +"pointeur C vers une chaîne de caractères ; il n'accepte pas les objets " +"Unicode. Le tampon d'octets ne doit pas contenir d'octets *null* ; si c'est " +"le cas, une exception :exc:`ValueError` est levée." #: ../Doc/c-api/arg.rst:118 msgid "" "Previously, :exc:`TypeError` was raised when embedded null bytes were " "encountered in the bytes buffer." msgstr "" +"Auparavant, :exc:`TypeError` était levée lorsque des octets *null* étaient " +"rencontrés dans le tampon d'octets." #: ../Doc/c-api/arg.rst:125 msgid "``y*`` (:term:`bytes-like object`) [Py_buffer]" -msgstr "``y*`` (:term:`bytes-like object`) [Py_buffer]" +msgstr "``y*`` (:term:`bytes-like object`) [``Py_buffer``]" #: ../Doc/c-api/arg.rst:123 msgid "" @@ -274,7 +311,7 @@ msgstr "" #: ../Doc/c-api/arg.rst:134 msgid "``S`` (:class:`bytes`) [PyBytesObject \\*]" -msgstr "``S`` (:class:`bytes`) [PyBytesObject \\*]" +msgstr "``S`` (:class:`bytes`) [``PyBytesObject *``]" #: ../Doc/c-api/arg.rst:132 msgid "" @@ -285,7 +322,7 @@ msgstr "" #: ../Doc/c-api/arg.rst:139 msgid "``Y`` (:class:`bytearray`) [PyByteArrayObject \\*]" -msgstr "``Y`` (:class:`bytearray`) [PyByteArrayObject \\*]" +msgstr "``Y`` (:class:`bytearray`) [``PyByteArrayObject *``]" #: ../Doc/c-api/arg.rst:137 msgid "" @@ -295,7 +332,7 @@ msgid "" "`PyObject\\*`." msgstr "" -#: ../Doc/c-api/arg.rst:152 ../Doc/c-api/arg.rst:557 +#: ../Doc/c-api/arg.rst:156 msgid "``u`` (:class:`str`) [Py_UNICODE \\*]" msgstr "``u`` (:class:`str`) [Py_UNICODE \\*]" @@ -309,23 +346,37 @@ msgid "" "Python string must not contain embedded null code points; if it does, a :exc:" "`ValueError` exception is raised." msgstr "" +"Convertit un objet Python Unicode en un pointeur C vers un tampon de " +"caractères Unicode terminé par *NULL*. Vous devez passer l'adresse d'un " +"pointeur :c:type:`Py_UNICODE`, qui sera rempli avec le pointeur vers un " +"tampon Unicode existant. Veuillez noter que la taille d'un :c:type:" +"`Py_UNICODE` dépend des options de compilation (soit 16, soit 32 bits). La " +"chaîne de caractères Python ne doit pas contenir de code *NULL*. Si elle en " +"contient, une exception :exc:`ValueError` est levée." -#: ../Doc/c-api/arg.rst:157 ../Doc/c-api/arg.rst:562 +#: ../Doc/c-api/arg.rst:157 ../Doc/c-api/arg.rst:166 ../Doc/c-api/arg.rst:174 +#: ../Doc/c-api/arg.rst:182 +msgid "" +"Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using :c:" +"func:`PyUnicode_AsWideCharString`." +msgstr "" + +#: ../Doc/c-api/arg.rst:165 msgid "``u#`` (:class:`str`) [Py_UNICODE \\*, int]" msgstr "``u#`` (:class:`str`) [Py_UNICODE \\*, int]" -#: ../Doc/c-api/arg.rst:155 +#: ../Doc/c-api/arg.rst:159 msgid "" "This variant on ``u`` stores into two C variables, the first one a pointer " "to a Unicode data buffer, the second one its length. This variant allows " "null code points." msgstr "" -#: ../Doc/c-api/arg.rst:161 +#: ../Doc/c-api/arg.rst:173 msgid "``Z`` (:class:`str` or ``None``) [Py_UNICODE \\*]" msgstr "``Z`` (:class:`str` ou ``None``) [Py_UNICODE \\*]" -#: ../Doc/c-api/arg.rst:160 +#: ../Doc/c-api/arg.rst:168 msgid "" "Like ``u``, but the Python object may also be ``None``, in which case the :c:" "type:`Py_UNICODE` pointer is set to *NULL*." @@ -333,11 +384,11 @@ msgstr "" "Comme ``u``, mais l'objet Python peut aussi être ``None``, auquel cas le " "pointeur :c:type:`Py_UNICODE` vaut *NULL*." -#: ../Doc/c-api/arg.rst:165 +#: ../Doc/c-api/arg.rst:181 msgid "``Z#`` (:class:`str` or ``None``) [Py_UNICODE \\*, int]" msgstr "``Z#`` (:class:`str` ou ``None``) [Py_UNICODE \\*, int]" -#: ../Doc/c-api/arg.rst:164 +#: ../Doc/c-api/arg.rst:176 msgid "" "Like ``u#``, but the Python object may also be ``None``, in which case the :" "c:type:`Py_UNICODE` pointer is set to *NULL*." @@ -345,22 +396,22 @@ msgstr "" "Comme ``u#``, mais l'objet Python peut également être ``None``, auquel cas " "le pointeur :c:type:`Py_UNICODE` vaut *NULL*." -#: ../Doc/c-api/arg.rst:170 +#: ../Doc/c-api/arg.rst:186 msgid "``U`` (:class:`str`) [PyObject \\*]" -msgstr "``U`` (:class:`str`) [PyObject \\*]" +msgstr "``U`` (:class:`str`) [``PyObject *``]" -#: ../Doc/c-api/arg.rst:168 +#: ../Doc/c-api/arg.rst:184 msgid "" "Requires that the Python object is a Unicode object, without attempting any " "conversion. Raises :exc:`TypeError` if the object is not a Unicode object. " "The C variable may also be declared as :c:type:`PyObject\\*`." msgstr "" -#: ../Doc/c-api/arg.rst:176 +#: ../Doc/c-api/arg.rst:192 msgid "``w*`` (read-write :term:`bytes-like object`) [Py_buffer]" -msgstr "``w*`` (read-write :term:`bytes-like object`) [Py_buffer]" +msgstr "``w*`` (lecture-écriture :term:`bytes-like object`) [``Py_buffer``]" -#: ../Doc/c-api/arg.rst:173 +#: ../Doc/c-api/arg.rst:189 msgid "" "This format accepts any object which implements the read-write buffer " "interface. It fills a :c:type:`Py_buffer` structure provided by the caller. " @@ -368,17 +419,17 @@ msgid "" "`PyBuffer_Release` when it is done with the buffer." msgstr "" -#: ../Doc/c-api/arg.rst:193 +#: ../Doc/c-api/arg.rst:209 msgid "``es`` (:class:`str`) [const char \\*encoding, char \\*\\*buffer]" msgstr "" -#: ../Doc/c-api/arg.rst:179 +#: ../Doc/c-api/arg.rst:195 msgid "" "This variant on ``s`` is used for encoding Unicode into a character buffer. " "It only works for encoded data without embedded NUL bytes." msgstr "" -#: ../Doc/c-api/arg.rst:182 +#: ../Doc/c-api/arg.rst:198 msgid "" "This format requires two arguments. The first is only used as input, and " "must be a :c:type:`const char\\*` which points to the name of an encoding as " @@ -390,7 +441,7 @@ msgid "" "argument." msgstr "" -#: ../Doc/c-api/arg.rst:190 +#: ../Doc/c-api/arg.rst:206 msgid "" ":c:func:`PyArg_ParseTuple` will allocate a buffer of the needed size, copy " "the encoded data into this buffer and adjust *\\*buffer* to reference the " @@ -398,33 +449,33 @@ msgid "" "`PyMem_Free` to free the allocated buffer after use." msgstr "" -#: ../Doc/c-api/arg.rst:198 +#: ../Doc/c-api/arg.rst:214 msgid "" "``et`` (:class:`str`, :class:`bytes` or :class:`bytearray`) [const char " "\\*encoding, char \\*\\*buffer]" msgstr "" -#: ../Doc/c-api/arg.rst:196 +#: ../Doc/c-api/arg.rst:212 msgid "" "Same as ``es`` except that byte string objects are passed through without " "recoding them. Instead, the implementation assumes that the byte string " "object uses the encoding passed in as parameter." msgstr "" -#: ../Doc/c-api/arg.rst:229 +#: ../Doc/c-api/arg.rst:245 msgid "" "``es#`` (:class:`str`) [const char \\*encoding, char \\*\\*buffer, int " "\\*buffer_length]" msgstr "" -#: ../Doc/c-api/arg.rst:201 +#: ../Doc/c-api/arg.rst:217 msgid "" "This variant on ``s#`` is used for encoding Unicode into a character buffer. " "Unlike the ``es`` format, this variant allows input data which contains NUL " "characters." msgstr "" -#: ../Doc/c-api/arg.rst:205 +#: ../Doc/c-api/arg.rst:221 msgid "" "It requires three arguments. The first is only used as input, and must be " "a :c:type:`const char\\*` which points to the name of an encoding as a NUL-" @@ -437,11 +488,11 @@ msgid "" "will be set to the number of bytes in the output buffer." msgstr "" -#: ../Doc/c-api/arg.rst:215 +#: ../Doc/c-api/arg.rst:231 msgid "There are two modes of operation:" msgstr "Il existe deux modes de fonctionnement :" -#: ../Doc/c-api/arg.rst:217 +#: ../Doc/c-api/arg.rst:233 msgid "" "If *\\*buffer* points a *NULL* pointer, the function will allocate a buffer " "of the needed size, copy the encoded data into this buffer and set *" @@ -450,7 +501,7 @@ msgid "" "after usage." msgstr "" -#: ../Doc/c-api/arg.rst:222 +#: ../Doc/c-api/arg.rst:238 msgid "" "If *\\*buffer* points to a non-*NULL* pointer (an already allocated " "buffer), :c:func:`PyArg_ParseTuple` will use this location as the buffer and " @@ -459,7 +510,7 @@ msgid "" "the buffer is not large enough, a :exc:`ValueError` will be set." msgstr "" -#: ../Doc/c-api/arg.rst:228 +#: ../Doc/c-api/arg.rst:244 msgid "" "In both cases, *\\*buffer_length* is set to the length of the encoded data " "without the trailing NUL byte." @@ -467,60 +518,60 @@ msgstr "" "Dans les deux cas, *\\*buffer_length* est la longueur des données encodées, " "sans l'octet NUL de fin." -#: ../Doc/c-api/arg.rst:234 +#: ../Doc/c-api/arg.rst:250 msgid "" "``et#`` (:class:`str`, :class:`bytes` or :class:`bytearray`) [const char " "\\*encoding, char \\*\\*buffer, int \\*buffer_length]" msgstr "" -#: ../Doc/c-api/arg.rst:232 +#: ../Doc/c-api/arg.rst:248 msgid "" "Same as ``es#`` except that byte string objects are passed through without " "recoding them. Instead, the implementation assumes that the byte string " "object uses the encoding passed in as parameter." msgstr "" -#: ../Doc/c-api/arg.rst:237 +#: ../Doc/c-api/arg.rst:253 msgid "Numbers" msgstr "Les nombres" -#: ../Doc/c-api/arg.rst:241 +#: ../Doc/c-api/arg.rst:257 msgid "``b`` (:class:`int`) [unsigned char]" -msgstr "``b`` (:class:`int`) [unsigned char]" +msgstr "``b`` (:class:`int`) [``unsigned char``]" -#: ../Doc/c-api/arg.rst:240 +#: ../Doc/c-api/arg.rst:256 msgid "" "Convert a nonnegative Python integer to an unsigned tiny int, stored in a C :" "c:type:`unsigned char`." msgstr "" -"Convertit un entier Python positif ou nul en un unsigned tiny int, stocké " -"dans un :c:type:`unsigned char` C." +"Convertit un entier Python positif ou nul en un ``unsigned tiny int``, " +"stocké dans un :c:type:`unsigned char` C." -#: ../Doc/c-api/arg.rst:245 ../Doc/c-api/arg.rst:583 +#: ../Doc/c-api/arg.rst:261 ../Doc/c-api/arg.rst:600 msgid "``B`` (:class:`int`) [unsigned char]" -msgstr "``B`` (:class:`int`) [unsigned char]" +msgstr "``B`` (:class:`int`) [``unsigned char``]" -#: ../Doc/c-api/arg.rst:244 +#: ../Doc/c-api/arg.rst:260 msgid "" "Convert a Python integer to a tiny int without overflow checking, stored in " "a C :c:type:`unsigned char`." msgstr "" -"Convertit un entier Python en un tiny int sans vérifier le débordement, " +"Convertit un entier Python en un ``tiny int`` sans vérifier le débordement, " "stocké dans un :c:type:`unsigned char` C." -#: ../Doc/c-api/arg.rst:248 ../Doc/c-api/arg.rst:577 +#: ../Doc/c-api/arg.rst:264 ../Doc/c-api/arg.rst:594 msgid "``h`` (:class:`int`) [short int]" -msgstr "``h`` (:class:`int`) [short int]" +msgstr "``h`` (:class:`int`) [``short int``]" -#: ../Doc/c-api/arg.rst:248 +#: ../Doc/c-api/arg.rst:264 msgid "Convert a Python integer to a C :c:type:`short int`." msgstr "Convertit un entier Python en un :c:type:`short int` C." -#: ../Doc/c-api/arg.rst:252 ../Doc/c-api/arg.rst:586 +#: ../Doc/c-api/arg.rst:268 ../Doc/c-api/arg.rst:603 msgid "``H`` (:class:`int`) [unsigned short int]" -msgstr "``H`` (:class:`int`) [unsigned short int]" +msgstr "``H`` (:class:`int`) [``unsigned short int``]" -#: ../Doc/c-api/arg.rst:251 +#: ../Doc/c-api/arg.rst:267 msgid "" "Convert a Python integer to a C :c:type:`unsigned short int`, without " "overflow checking." @@ -528,19 +579,19 @@ msgstr "" "Convertit un entier Python en un :c:type:`unsigned short int` C, sans " "contrôle de débordement." -#: ../Doc/c-api/arg.rst:255 ../Doc/c-api/arg.rst:571 +#: ../Doc/c-api/arg.rst:271 ../Doc/c-api/arg.rst:588 msgid "``i`` (:class:`int`) [int]" -msgstr "``i`` (:class:`int`) [int]" +msgstr "``i`` (:class:`int`) [``int``]" -#: ../Doc/c-api/arg.rst:255 +#: ../Doc/c-api/arg.rst:271 msgid "Convert a Python integer to a plain C :c:type:`int`." msgstr "Convertit un entier Python en un :c:type:`int` C." -#: ../Doc/c-api/arg.rst:259 ../Doc/c-api/arg.rst:589 +#: ../Doc/c-api/arg.rst:275 ../Doc/c-api/arg.rst:606 msgid "``I`` (:class:`int`) [unsigned int]" -msgstr "``I`` (:class:`int`) [unsigned int]" +msgstr "``I`` (:class:`int`) [``unsigned int``]" -#: ../Doc/c-api/arg.rst:258 +#: ../Doc/c-api/arg.rst:274 msgid "" "Convert a Python integer to a C :c:type:`unsigned int`, without overflow " "checking." @@ -548,19 +599,19 @@ msgstr "" "Convertit un entier Python en un :c:type:`unsigned int` C, sans contrôle de " "le débordement." -#: ../Doc/c-api/arg.rst:262 ../Doc/c-api/arg.rst:580 +#: ../Doc/c-api/arg.rst:278 ../Doc/c-api/arg.rst:597 msgid "``l`` (:class:`int`) [long int]" -msgstr "``l`` (:class:`int`) [long int]" +msgstr "``l`` (:class:`int`) [``long int``]" -#: ../Doc/c-api/arg.rst:262 +#: ../Doc/c-api/arg.rst:278 msgid "Convert a Python integer to a C :c:type:`long int`." msgstr "Convertit un entier Python en un :c:type:`long int`." -#: ../Doc/c-api/arg.rst:266 ../Doc/c-api/arg.rst:592 +#: ../Doc/c-api/arg.rst:282 ../Doc/c-api/arg.rst:609 msgid "``k`` (:class:`int`) [unsigned long]" -msgstr "``k`` (:class:`int`) [unsigned long]" +msgstr "``k`` (:class:`int`) [``unsigned long``]" -#: ../Doc/c-api/arg.rst:265 +#: ../Doc/c-api/arg.rst:281 msgid "" "Convert a Python integer to a C :c:type:`unsigned long` without overflow " "checking." @@ -568,53 +619,53 @@ msgstr "" "Convertit un entier Python en un :c:type:`unsigned long` C sans en vérifier " "le débordement." -#: ../Doc/c-api/arg.rst:269 ../Doc/c-api/arg.rst:595 +#: ../Doc/c-api/arg.rst:285 ../Doc/c-api/arg.rst:612 msgid "``L`` (:class:`int`) [long long]" -msgstr "``L`` (:class:`int`) [long long]" +msgstr "``L`` (:class:`int`) [``long long``]" -#: ../Doc/c-api/arg.rst:269 +#: ../Doc/c-api/arg.rst:285 msgid "Convert a Python integer to a C :c:type:`long long`." msgstr "" -#: ../Doc/c-api/arg.rst:273 ../Doc/c-api/arg.rst:598 +#: ../Doc/c-api/arg.rst:289 ../Doc/c-api/arg.rst:615 msgid "``K`` (:class:`int`) [unsigned long long]" -msgstr "``K`` (:class:`int`) [unsigned long long]" +msgstr "``K`` (:class:`int`) [``unsigned long long``]" -#: ../Doc/c-api/arg.rst:272 +#: ../Doc/c-api/arg.rst:288 msgid "" "Convert a Python integer to a C :c:type:`unsigned long long` without " "overflow checking." msgstr "" -#: ../Doc/c-api/arg.rst:276 ../Doc/c-api/arg.rst:601 +#: ../Doc/c-api/arg.rst:292 ../Doc/c-api/arg.rst:618 msgid "``n`` (:class:`int`) [Py_ssize_t]" -msgstr "``n`` (:class:`int`) [Py_ssize_t]" +msgstr "``n`` (:class:`int`) [``Py_ssize_t``]" -#: ../Doc/c-api/arg.rst:276 +#: ../Doc/c-api/arg.rst:292 msgid "Convert a Python integer to a C :c:type:`Py_ssize_t`." msgstr "Convertit un entier Python en un :c:type:`short int` C." -#: ../Doc/c-api/arg.rst:283 +#: ../Doc/c-api/arg.rst:299 msgid "``c`` (:class:`bytes` or :class:`bytearray` of length 1) [char]" -msgstr "``c`` (:class:`bytes` ou :class:`bytearray` of length 1) [char]" +msgstr "``c`` (:class:`bytes` ou :class:`bytearray` de longueur 1) [``char``]" -#: ../Doc/c-api/arg.rst:279 +#: ../Doc/c-api/arg.rst:295 msgid "" "Convert a Python byte, represented as a :class:`bytes` or :class:`bytearray` " "object of length 1, to a C :c:type:`char`." msgstr "" -"Convertit un octet Python, représenté comme un objet :class:`bytes` ou :" +"Convertit un *byte* Python, représenté comme un objet :class:`bytes` ou :" "class:`bytearray` de longueur 1, en un :c:type:`char` C." -#: ../Doc/c-api/arg.rst:282 +#: ../Doc/c-api/arg.rst:298 msgid "Allow :class:`bytearray` objects." msgstr "" -#: ../Doc/c-api/arg.rst:287 ../Doc/c-api/arg.rst:609 +#: ../Doc/c-api/arg.rst:303 ../Doc/c-api/arg.rst:626 msgid "``C`` (:class:`str` of length 1) [int]" -msgstr "``C`` (:class:`str` of length 1) [int]" +msgstr "``C`` (:class:`str` de longueur 1) [``int``]" -#: ../Doc/c-api/arg.rst:286 +#: ../Doc/c-api/arg.rst:302 msgid "" "Convert a Python character, represented as a :class:`str` object of length " "1, to a C :c:type:`int`." @@ -622,41 +673,41 @@ msgstr "" "Convertit un caractère Python, représenté comme un objet :class:`str` de " "longueur 1, en un :c:type:`int` C." -#: ../Doc/c-api/arg.rst:290 ../Doc/c-api/arg.rst:615 +#: ../Doc/c-api/arg.rst:306 ../Doc/c-api/arg.rst:632 msgid "``f`` (:class:`float`) [float]" -msgstr "``f`` (:class:`float`) [float]" +msgstr "``f`` (:class:`float`) [``float``]" -#: ../Doc/c-api/arg.rst:290 +#: ../Doc/c-api/arg.rst:306 msgid "Convert a Python floating point number to a C :c:type:`float`." msgstr "Convertit un nombre flottant Python vers un :c:type:`float`." -#: ../Doc/c-api/arg.rst:293 ../Doc/c-api/arg.rst:612 +#: ../Doc/c-api/arg.rst:309 ../Doc/c-api/arg.rst:629 msgid "``d`` (:class:`float`) [double]" -msgstr "``d`` (:class:`float`) [double]" +msgstr "``d`` (:class:`float`) [``double``]" -#: ../Doc/c-api/arg.rst:293 +#: ../Doc/c-api/arg.rst:309 msgid "Convert a Python floating point number to a C :c:type:`double`." msgstr "Convertit un nombre flottant Python vers un :c:type:`double` C." -#: ../Doc/c-api/arg.rst:296 +#: ../Doc/c-api/arg.rst:312 msgid "``D`` (:class:`complex`) [Py_complex]" -msgstr "``D`` (:class:`complex`) [Py_complex]" +msgstr "``D`` (:class:`complex`) [``Py_complex``]" -#: ../Doc/c-api/arg.rst:296 +#: ../Doc/c-api/arg.rst:312 msgid "Convert a Python complex number to a C :c:type:`Py_complex` structure." msgstr "" "Convertit un nombre complexe Python vers une structure :c:type:`Py_complex` " "C." -#: ../Doc/c-api/arg.rst:299 +#: ../Doc/c-api/arg.rst:315 msgid "Other objects" msgstr "Autres objets" -#: ../Doc/c-api/arg.rst:304 ../Doc/c-api/arg.rst:626 +#: ../Doc/c-api/arg.rst:320 ../Doc/c-api/arg.rst:643 msgid "``O`` (object) [PyObject \\*]" -msgstr "``O`` (object) [PyObject \\*]" +msgstr "``O`` (objet) [``PyObject *``]" -#: ../Doc/c-api/arg.rst:302 +#: ../Doc/c-api/arg.rst:318 msgid "" "Store a Python object (without any conversion) in a C object pointer. The C " "program thus receives the actual object that was passed. The object's " @@ -667,11 +718,11 @@ msgstr "" "référence sur l'objet n'est pas incrémenté. Le pointeur stocké n'est pas " "*NULL*." -#: ../Doc/c-api/arg.rst:311 +#: ../Doc/c-api/arg.rst:327 msgid "``O!`` (object) [*typeobject*, PyObject \\*]" -msgstr "``O!`` (object) [*typeobject*, PyObject \\*]" +msgstr "``O!`` (objet) [*typeobject*, ``PyObject *``]" -#: ../Doc/c-api/arg.rst:307 +#: ../Doc/c-api/arg.rst:323 msgid "" "Store a Python object in a C object pointer. This is similar to ``O``, but " "takes two C arguments: the first is the address of a Python type object, the " @@ -680,11 +731,11 @@ msgid "" "required type, :exc:`TypeError` is raised." msgstr "" -#: ../Doc/c-api/arg.rst:336 ../Doc/c-api/arg.rst:640 +#: ../Doc/c-api/arg.rst:352 ../Doc/c-api/arg.rst:657 msgid "``O&`` (object) [*converter*, *anything*]" -msgstr "``O&`` (object) [*converter*, *anything*]" +msgstr "``O&`` (objet) [*converter*, *anything*]" -#: ../Doc/c-api/arg.rst:316 +#: ../Doc/c-api/arg.rst:332 msgid "" "Convert a Python object to a C variable through a *converter* function. " "This takes two arguments: the first is a function, the second is the address " @@ -692,7 +743,7 @@ msgid "" "*converter* function in turn is called as follows::" msgstr "" -#: ../Doc/c-api/arg.rst:323 +#: ../Doc/c-api/arg.rst:339 msgid "" "where *object* is the Python object to be converted and *address* is the :c:" "type:`void\\*` argument that was passed to the :c:func:`PyArg_Parse\\*` " @@ -702,7 +753,7 @@ msgid "" "*address* unmodified." msgstr "" -#: ../Doc/c-api/arg.rst:329 +#: ../Doc/c-api/arg.rst:345 msgid "" "If the *converter* returns ``Py_CLEANUP_SUPPORTED``, it may get called a " "second time if the argument parsing eventually fails, giving the converter a " @@ -711,15 +762,15 @@ msgid "" "value as in the original call." msgstr "" -#: ../Doc/c-api/arg.rst:335 +#: ../Doc/c-api/arg.rst:351 msgid "``Py_CLEANUP_SUPPORTED`` was added." msgstr "``Py_CLEANUP_SUPPORTED`` à été ajouté." -#: ../Doc/c-api/arg.rst:345 +#: ../Doc/c-api/arg.rst:361 msgid "``p`` (:class:`bool`) [int]" -msgstr "``p`` (:class:`bool`) [int]" +msgstr "``p`` (:class:`bool`) [``int``]" -#: ../Doc/c-api/arg.rst:339 +#: ../Doc/c-api/arg.rst:355 msgid "" "Tests the value passed in for truth (a boolean **p**\\ redicate) and " "converts the result to its equivalent C true/false integer value. Sets the " @@ -728,11 +779,11 @@ msgid "" "how Python tests values for truth." msgstr "" -#: ../Doc/c-api/arg.rst:350 ../Doc/c-api/arg.rst:643 +#: ../Doc/c-api/arg.rst:366 ../Doc/c-api/arg.rst:660 msgid "``(items)`` (:class:`tuple`) [*matching-items*]" msgstr "``(items)`` (:class:`tuple`) [*matching-items*]" -#: ../Doc/c-api/arg.rst:348 +#: ../Doc/c-api/arg.rst:364 msgid "" "The object must be a Python sequence whose length is the number of format " "units in *items*. The C arguments must correspond to the individual format " @@ -741,9 +792,9 @@ msgstr "" "L'objet doit être une séquence Python dont la longueur est le nombre " "d'unités de formats dans *articles*. Les arguments C doivent correspondre à " "chaque unité de format particulière dans *articles*. Les unités de formats " -"pour les séquences peuvent être imbriquées. " +"pour les séquences peuvent être imbriquées." -#: ../Doc/c-api/arg.rst:352 +#: ../Doc/c-api/arg.rst:368 msgid "" "It is possible to pass \"long\" integers (integers whose value exceeds the " "platform's :const:`LONG_MAX`) however no proper range checking is done --- " @@ -752,7 +803,7 @@ msgid "" "downcasts in C --- your mileage may vary)." msgstr "" -#: ../Doc/c-api/arg.rst:358 +#: ../Doc/c-api/arg.rst:374 msgid "" "A few other characters have a meaning in a format string. These may not " "occur inside nested parentheses. They are:" @@ -760,11 +811,11 @@ msgstr "" "Quelques autres caractères ont un sens dans une chaîne de format. On ne doit " "pas les trouvées dans des parenthèses imbriquées. Ce sont :" -#: ../Doc/c-api/arg.rst:366 +#: ../Doc/c-api/arg.rst:382 msgid "``|``" -msgstr "" +msgstr "``|``" -#: ../Doc/c-api/arg.rst:362 +#: ../Doc/c-api/arg.rst:378 msgid "" "Indicates that the remaining arguments in the Python argument list are " "optional. The C variables corresponding to optional arguments should be " @@ -773,11 +824,11 @@ msgid "" "corresponding C variable(s)." msgstr "" -#: ../Doc/c-api/arg.rst:375 +#: ../Doc/c-api/arg.rst:391 msgid "``$``" -msgstr "" +msgstr "``$``" -#: ../Doc/c-api/arg.rst:369 +#: ../Doc/c-api/arg.rst:385 msgid "" ":c:func:`PyArg_ParseTupleAndKeywords` only: Indicates that the remaining " "arguments in the Python argument list are keyword-only. Currently, all " @@ -785,22 +836,22 @@ msgid "" "be specified before ``$`` in the format string." msgstr "" -#: ../Doc/c-api/arg.rst:380 +#: ../Doc/c-api/arg.rst:396 msgid "``:``" msgstr "" -#: ../Doc/c-api/arg.rst:378 +#: ../Doc/c-api/arg.rst:394 msgid "" "The list of format units ends here; the string after the colon is used as " "the function name in error messages (the \"associated value\" of the " "exception that :c:func:`PyArg_ParseTuple` raises)." msgstr "" -#: ../Doc/c-api/arg.rst:385 +#: ../Doc/c-api/arg.rst:401 msgid "``;``" msgstr "" -#: ../Doc/c-api/arg.rst:383 +#: ../Doc/c-api/arg.rst:399 msgid "" "The list of format units ends here; the string after the semicolon is used " "as the error message *instead* of the default error message. ``:`` and ``;" @@ -808,18 +859,18 @@ msgid "" msgstr "" "La liste des unités de format s'arrête ici ; la chaîne après le point-" "virgule est utilise comme message d'erreur *au lieu* du message d'erreur par " -"défaut. ``:`` et ``;`` sont mutuellement exclusifs. " +"défaut. ``:`` et ``;`` sont mutuellement exclusifs." -#: ../Doc/c-api/arg.rst:387 +#: ../Doc/c-api/arg.rst:403 msgid "" "Note that any Python object references which are provided to the caller are " "*borrowed* references; do not decrement their reference count!" msgstr "" "Notez que n'importe quelles références sur un objet Python qui sont données " "à l'appelant sont des références *empruntées* ; ne décrémentez pas leur " -"compteur de références ! " +"compteur de références !" -#: ../Doc/c-api/arg.rst:390 +#: ../Doc/c-api/arg.rst:406 msgid "" "Additional arguments passed to these functions must be addresses of " "variables whose type is determined by the format string; these are used to " @@ -829,14 +880,14 @@ msgid "" "unit in that case." msgstr "" "Les arguments additionnels qui sont donnés à ces fonctions doivent être des " -"adresses de variables dont le type est déterminé par la chaîine de format. " +"adresses de variables dont le type est déterminé par la chaîne de format. " "Elles sont utilisées pour stocker les valeurs du n-uplet d'entrée. Il y a " "quelques cas, comme décrit précédemment dans le liste des unités de formats, " "où ces paramètres sont utilisés comme valeurs d'entrée. Dans ce cas, ils " "devraient correspondre à ce qui est spécifié pour l'unité de format " "correspondante." -#: ../Doc/c-api/arg.rst:396 +#: ../Doc/c-api/arg.rst:412 msgid "" "For the conversion to succeed, the *arg* object must match the format and " "the format must be exhausted. On success, the :c:func:`PyArg_Parse\\*` " @@ -847,24 +898,24 @@ msgid "" "untouched." msgstr "" -#: ../Doc/c-api/arg.rst:405 +#: ../Doc/c-api/arg.rst:421 msgid "API Functions" msgstr "Fonction de l'API" -#: ../Doc/c-api/arg.rst:409 +#: ../Doc/c-api/arg.rst:425 msgid "" "Parse the parameters of a function that takes only positional parameters " "into local variables. Returns true on success; on failure, it returns false " "and raises the appropriate exception." msgstr "" -#: ../Doc/c-api/arg.rst:416 +#: ../Doc/c-api/arg.rst:432 msgid "" "Identical to :c:func:`PyArg_ParseTuple`, except that it accepts a va_list " "rather than a variable number of arguments." msgstr "" -#: ../Doc/c-api/arg.rst:422 +#: ../Doc/c-api/arg.rst:438 msgid "" "Parse the parameters of a function that takes both positional and keyword " "parameters into local variables. The *keywords* argument is a *NULL*-" @@ -873,26 +924,26 @@ msgid "" "success; on failure, it returns false and raises the appropriate exception." msgstr "" -#: ../Doc/c-api/arg.rst:429 +#: ../Doc/c-api/arg.rst:445 msgid "" "Added support for :ref:`positional-only parameters `." msgstr "" -#: ../Doc/c-api/arg.rst:436 +#: ../Doc/c-api/arg.rst:452 msgid "" "Identical to :c:func:`PyArg_ParseTupleAndKeywords`, except that it accepts a " "va_list rather than a variable number of arguments." msgstr "" -#: ../Doc/c-api/arg.rst:442 +#: ../Doc/c-api/arg.rst:458 msgid "" "Ensure that the keys in the keywords argument dictionary are strings. This " "is only needed if :c:func:`PyArg_ParseTupleAndKeywords` is not used, since " "the latter already does this check." msgstr "" -#: ../Doc/c-api/arg.rst:452 +#: ../Doc/c-api/arg.rst:468 msgid "" "Function used to deconstruct the argument lists of \"old-style\" functions " "--- these are functions which use the :const:`METH_OLDARGS` parameter " @@ -903,7 +954,7 @@ msgid "" "continue to be used for that purpose." msgstr "" -#: ../Doc/c-api/arg.rst:463 +#: ../Doc/c-api/arg.rst:479 msgid "" "A simpler form of parameter retrieval which does not use a format string to " "specify the types of the arguments. Functions which use this method to " @@ -921,23 +972,23 @@ msgid "" "a failure." msgstr "" -#: ../Doc/c-api/arg.rst:477 +#: ../Doc/c-api/arg.rst:493 msgid "" "This is an example of the use of this function, taken from the sources for " "the :mod:`_weakref` helper module for weak references::" msgstr "" -#: ../Doc/c-api/arg.rst:493 +#: ../Doc/c-api/arg.rst:509 msgid "" "The call to :c:func:`PyArg_UnpackTuple` in this example is entirely " "equivalent to this call to :c:func:`PyArg_ParseTuple`::" msgstr "" -#: ../Doc/c-api/arg.rst:501 +#: ../Doc/c-api/arg.rst:517 msgid "Building values" msgstr "Construction des valeurs" -#: ../Doc/c-api/arg.rst:505 +#: ../Doc/c-api/arg.rst:521 msgid "" "Create a new value based on a format string similar to those accepted by " "the :c:func:`PyArg_Parse\\*` family of functions and a sequence of values. " @@ -945,7 +996,7 @@ msgid "" "raised if *NULL* is returned." msgstr "" -#: ../Doc/c-api/arg.rst:510 +#: ../Doc/c-api/arg.rst:526 msgid "" ":c:func:`Py_BuildValue` does not always build a tuple. It builds a tuple " "only if its format string contains two or more format units. If the format " @@ -954,7 +1005,7 @@ msgid "" "it to return a tuple of size 0 or one, parenthesize the format string." msgstr "" -#: ../Doc/c-api/arg.rst:516 +#: ../Doc/c-api/arg.rst:532 msgid "" "When memory buffers are passed as parameters to supply data to build " "objects, as for the ``s`` and ``s#`` formats, the required data is copied. " @@ -965,7 +1016,7 @@ msgid "" "`Py_BuildValue` returns." msgstr "" -#: ../Doc/c-api/arg.rst:524 +#: ../Doc/c-api/arg.rst:540 msgid "" "In the following description, the quoted form is the format unit; the entry " "in (round) parentheses is the Python object type that the format unit will " @@ -973,173 +1024,181 @@ msgid "" "be passed." msgstr "" -#: ../Doc/c-api/arg.rst:528 +#: ../Doc/c-api/arg.rst:544 msgid "" "The characters space, tab, colon and comma are ignored in format strings " "(but not within format units such as ``s#``). This can be used to make long " "format strings a tad more readable." msgstr "" -#: ../Doc/c-api/arg.rst:534 +#: ../Doc/c-api/arg.rst:550 msgid "``s`` (:class:`str` or ``None``) [char \\*]" msgstr "``s`` (:class:`str` ou ``None``) [char \\*]" -#: ../Doc/c-api/arg.rst:533 +#: ../Doc/c-api/arg.rst:549 msgid "" "Convert a null-terminated C string to a Python :class:`str` object using " "``'utf-8'`` encoding. If the C string pointer is *NULL*, ``None`` is used." msgstr "" -#: ../Doc/c-api/arg.rst:539 +#: ../Doc/c-api/arg.rst:555 msgid "``s#`` (:class:`str` or ``None``) [char \\*, int]" msgstr "``s#`` (:class:`str` ou ``None``) [char \\*, int]" -#: ../Doc/c-api/arg.rst:537 +#: ../Doc/c-api/arg.rst:553 msgid "" "Convert a C string and its length to a Python :class:`str` object using " "``'utf-8'`` encoding. If the C string pointer is *NULL*, the length is " "ignored and ``None`` is returned." msgstr "" -#: ../Doc/c-api/arg.rst:543 +#: ../Doc/c-api/arg.rst:559 msgid "``y`` (:class:`bytes`) [char \\*]" msgstr "``y`` (:class:`bytes`) [char \\*]" -#: ../Doc/c-api/arg.rst:542 +#: ../Doc/c-api/arg.rst:558 msgid "" "This converts a C string to a Python :class:`bytes` object. If the C string " "pointer is *NULL*, ``None`` is returned." msgstr "" -#: ../Doc/c-api/arg.rst:547 +#: ../Doc/c-api/arg.rst:563 msgid "``y#`` (:class:`bytes`) [char \\*, int]" msgstr "``y#`` (:class:`bytes`) [char \\*, int]" -#: ../Doc/c-api/arg.rst:546 +#: ../Doc/c-api/arg.rst:562 msgid "" "This converts a C string and its lengths to a Python object. If the C " "string pointer is *NULL*, ``None`` is returned." msgstr "" -#: ../Doc/c-api/arg.rst:550 +#: ../Doc/c-api/arg.rst:566 msgid "``z`` (:class:`str` or ``None``) [char \\*]" msgstr "``z`` (:class:`str` ou ``None``) [char \\*]" -#: ../Doc/c-api/arg.rst:550 ../Doc/c-api/arg.rst:565 +#: ../Doc/c-api/arg.rst:566 ../Doc/c-api/arg.rst:582 msgid "Same as ``s``." msgstr "" -#: ../Doc/c-api/arg.rst:553 +#: ../Doc/c-api/arg.rst:569 msgid "``z#`` (:class:`str` or ``None``) [char \\*, int]" msgstr "``z#`` (:class:`str` ou ``None``) [char \\*, int]" -#: ../Doc/c-api/arg.rst:553 ../Doc/c-api/arg.rst:568 +#: ../Doc/c-api/arg.rst:569 ../Doc/c-api/arg.rst:585 msgid "Same as ``s#``." msgstr "" -#: ../Doc/c-api/arg.rst:556 +#: ../Doc/c-api/arg.rst:574 +msgid "``u`` (:class:`str`) [wchar_t \\*]" +msgstr "``u`` (:class:`str`) [wchar_t \\*]" + +#: ../Doc/c-api/arg.rst:572 msgid "" -"Convert a null-terminated buffer of Unicode (UCS-2 or UCS-4) data to a " -"Python Unicode object. If the Unicode buffer pointer is *NULL*, ``None`` is " -"returned." +"Convert a null-terminated :c:type:`wchar_t` buffer of Unicode (UTF-16 or " +"UCS-4) data to a Python Unicode object. If the Unicode buffer pointer is " +"*NULL*, ``None`` is returned." msgstr "" -#: ../Doc/c-api/arg.rst:560 +#: ../Doc/c-api/arg.rst:579 +msgid "``u#`` (:class:`str`) [wchar_t \\*, int]" +msgstr "``u#`` (:class:`str`) [wchar_t \\*, int]" + +#: ../Doc/c-api/arg.rst:577 msgid "" -"Convert a Unicode (UCS-2 or UCS-4) data buffer and its length to a Python " +"Convert a Unicode (UTF-16 or UCS-4) data buffer and its length to a Python " "Unicode object. If the Unicode buffer pointer is *NULL*, the length is " "ignored and ``None`` is returned." msgstr "" -#: ../Doc/c-api/arg.rst:565 +#: ../Doc/c-api/arg.rst:582 msgid "``U`` (:class:`str` or ``None``) [char \\*]" msgstr "``U`` (:class:`str` ou ``None``) [char \\*]" -#: ../Doc/c-api/arg.rst:568 +#: ../Doc/c-api/arg.rst:585 msgid "``U#`` (:class:`str` or ``None``) [char \\*, int]" msgstr "``U#`` (:class:`str` ou ``None``) [char \\*, int]" -#: ../Doc/c-api/arg.rst:571 +#: ../Doc/c-api/arg.rst:588 msgid "Convert a plain C :c:type:`int` to a Python integer object." msgstr "" -#: ../Doc/c-api/arg.rst:574 +#: ../Doc/c-api/arg.rst:591 msgid "``b`` (:class:`int`) [char]" -msgstr "``b`` (:class:`int`) [char]" +msgstr "``b`` (:class:`int`) [``char``]" -#: ../Doc/c-api/arg.rst:574 +#: ../Doc/c-api/arg.rst:591 msgid "Convert a plain C :c:type:`char` to a Python integer object." msgstr "" -#: ../Doc/c-api/arg.rst:577 +#: ../Doc/c-api/arg.rst:594 msgid "Convert a plain C :c:type:`short int` to a Python integer object." msgstr "" -#: ../Doc/c-api/arg.rst:580 +#: ../Doc/c-api/arg.rst:597 msgid "Convert a C :c:type:`long int` to a Python integer object." -msgstr "Convertit un :c:type:`long int` en un int Python." +msgstr "Convertit un :c:type:`long int` en un *int* Python." -#: ../Doc/c-api/arg.rst:583 +#: ../Doc/c-api/arg.rst:600 msgid "Convert a C :c:type:`unsigned char` to a Python integer object." msgstr "" -#: ../Doc/c-api/arg.rst:586 +#: ../Doc/c-api/arg.rst:603 msgid "Convert a C :c:type:`unsigned short int` to a Python integer object." msgstr "" -#: ../Doc/c-api/arg.rst:589 +#: ../Doc/c-api/arg.rst:606 msgid "Convert a C :c:type:`unsigned int` to a Python integer object." msgstr "" -#: ../Doc/c-api/arg.rst:592 +#: ../Doc/c-api/arg.rst:609 msgid "Convert a C :c:type:`unsigned long` to a Python integer object." msgstr "" -#: ../Doc/c-api/arg.rst:595 +#: ../Doc/c-api/arg.rst:612 msgid "Convert a C :c:type:`long long` to a Python integer object." msgstr "" -#: ../Doc/c-api/arg.rst:598 +#: ../Doc/c-api/arg.rst:615 msgid "Convert a C :c:type:`unsigned long long` to a Python integer object." msgstr "" -#: ../Doc/c-api/arg.rst:601 +#: ../Doc/c-api/arg.rst:618 msgid "Convert a C :c:type:`Py_ssize_t` to a Python integer." msgstr "" -#: ../Doc/c-api/arg.rst:605 +#: ../Doc/c-api/arg.rst:622 msgid "``c`` (:class:`bytes` of length 1) [char]" -msgstr "``c`` (:class:`bytes` de taille 1) [char]" +msgstr "``c`` (:class:`bytes` de taille 1) [``char``]" -#: ../Doc/c-api/arg.rst:604 +#: ../Doc/c-api/arg.rst:621 msgid "" "Convert a C :c:type:`int` representing a byte to a Python :class:`bytes` " "object of length 1." msgstr "" -#: ../Doc/c-api/arg.rst:608 +#: ../Doc/c-api/arg.rst:625 msgid "" "Convert a C :c:type:`int` representing a character to Python :class:`str` " "object of length 1." msgstr "" -#: ../Doc/c-api/arg.rst:612 +#: ../Doc/c-api/arg.rst:629 msgid "Convert a C :c:type:`double` to a Python floating point number." msgstr "" -#: ../Doc/c-api/arg.rst:615 +#: ../Doc/c-api/arg.rst:632 msgid "Convert a C :c:type:`float` to a Python floating point number." msgstr "" -#: ../Doc/c-api/arg.rst:618 +#: ../Doc/c-api/arg.rst:635 msgid "``D`` (:class:`complex`) [Py_complex \\*]" -msgstr "``D`` (:class:`complex`) [Py_complex \\*]" +msgstr "``D`` (:class:`complex`) [``Py_complex *``]" -#: ../Doc/c-api/arg.rst:618 +#: ../Doc/c-api/arg.rst:635 msgid "Convert a C :c:type:`Py_complex` structure to a Python complex number." msgstr "" -#: ../Doc/c-api/arg.rst:621 +#: ../Doc/c-api/arg.rst:638 msgid "" "Pass a Python object untouched (except for its reference count, which is " "incremented by one). If the object passed in is a *NULL* pointer, it is " @@ -1149,26 +1208,26 @@ msgid "" "yet, :exc:`SystemError` is set." msgstr "" -#: ../Doc/c-api/arg.rst:629 +#: ../Doc/c-api/arg.rst:646 msgid "``S`` (object) [PyObject \\*]" -msgstr "``S`` (object) [PyObject \\*]" +msgstr "``S`` (objet) [``PyObject *``]" -#: ../Doc/c-api/arg.rst:629 +#: ../Doc/c-api/arg.rst:646 msgid "Same as ``O``." msgstr "" -#: ../Doc/c-api/arg.rst:634 +#: ../Doc/c-api/arg.rst:651 msgid "``N`` (object) [PyObject \\*]" -msgstr "``N`` (object) [PyObject \\*]" +msgstr "``N`` (objet) [``PyObject *``]" -#: ../Doc/c-api/arg.rst:632 +#: ../Doc/c-api/arg.rst:649 msgid "" "Same as ``O``, except it doesn't increment the reference count on the " "object. Useful when the object is created by a call to an object constructor " "in the argument list." msgstr "" -#: ../Doc/c-api/arg.rst:637 +#: ../Doc/c-api/arg.rst:654 msgid "" "Convert *anything* to a Python object through a *converter* function. The " "function is called with *anything* (which should be compatible with :c:type:" @@ -1176,40 +1235,40 @@ msgid "" "*NULL* if an error occurred." msgstr "" -#: ../Doc/c-api/arg.rst:643 +#: ../Doc/c-api/arg.rst:660 msgid "" "Convert a sequence of C values to a Python tuple with the same number of " "items." msgstr "" -#: ../Doc/c-api/arg.rst:646 +#: ../Doc/c-api/arg.rst:663 msgid "``[items]`` (:class:`list`) [*matching-items*]" msgstr "``[items]`` (:class:`list`) [*matching-items*]" -#: ../Doc/c-api/arg.rst:646 +#: ../Doc/c-api/arg.rst:663 msgid "" "Convert a sequence of C values to a Python list with the same number of " "items." msgstr "" -#: ../Doc/c-api/arg.rst:651 +#: ../Doc/c-api/arg.rst:668 msgid "``{items}`` (:class:`dict`) [*matching-items*]" msgstr "``{items}`` (:class:`dict`) [*matching-items*]" -#: ../Doc/c-api/arg.rst:649 +#: ../Doc/c-api/arg.rst:666 msgid "" "Convert a sequence of C values to a Python dictionary. Each pair of " "consecutive C values adds one item to the dictionary, serving as key and " "value, respectively." msgstr "" -#: ../Doc/c-api/arg.rst:653 +#: ../Doc/c-api/arg.rst:670 msgid "" "If there is an error in the format string, the :exc:`SystemError` exception " "is set and *NULL* returned." msgstr "" -#: ../Doc/c-api/arg.rst:658 +#: ../Doc/c-api/arg.rst:675 msgid "" "Identical to :c:func:`Py_BuildValue`, except that it accepts a va_list " "rather than a variable number of arguments." diff --git a/c-api/buffer.po b/c-api/buffer.po index 969f47aab..27729832b 100644 --- a/c-api/buffer.po +++ b/c-api/buffer.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-04-02 22:11+0200\n" +"POT-Creation-Date: 2018-04-29 00:24+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,7 +19,7 @@ msgstr "" #: ../Doc/c-api/buffer.rst:11 msgid "Buffer Protocol" -msgstr "" +msgstr "Protocole tampon" #: ../Doc/c-api/buffer.rst:18 msgid "" @@ -29,6 +29,12 @@ msgid "" "party libraries may define their own types for special purposes, such as " "image processing or numeric analysis." msgstr "" +"Certains objets Python enveloppent l'accès à un tableau de mémoire sous-" +"jacente (nommée zone tampon ou simplement tampon, *buffer* en anglais). Les " +"objets natifs :class:`bytes` et :class:`bytearray` en sont des exemples, " +"ainsi que quelques types d'extension comme :class:`array.array`. Les " +"bibliothèques tierces peuvent définir leurs propres types à des fins " +"spéciales, telles que le traitement d'image ou l'analyse numérique." #: ../Doc/c-api/buffer.rst:24 msgid "" @@ -37,12 +43,18 @@ msgid "" "then desirable, in some situations, to access that buffer directly and " "without intermediate copying." msgstr "" +"Alors que chacun de ces types a sa propre sémantique, ils partagent la " +"caractéristique commune d'être soutenus par un tampon de mémoire important. " +"Il est donc souhaitable, dans certains cas, d'accéder à cette mémoire " +"directement sans l'étape intermédiaire de copie." #: ../Doc/c-api/buffer.rst:29 msgid "" "Python provides such a facility at the C level in the form of the :ref:" "`buffer protocol `. This protocol has two sides:" msgstr "" +"Python fournit une telle facilité au niveau du C sous la forme de :ref:" +"`protocole tampon `. Ce protocole comporte deux aspects :" #: ../Doc/c-api/buffer.rst:34 msgid "" @@ -50,12 +62,19 @@ msgid "" "objects of that type to expose information about their underlying buffer. " "This interface is described in the section :ref:`buffer-structs`;" msgstr "" +"du côté producteur, un type peut exporter une \"interface tampon\" qui " +"permet aux objets de ce type d'exposer des informations concernant leur " +"tampon sous-jacent. Cette interface est décrite dans la section :ref:`buffer-" +"structs` ;" #: ../Doc/c-api/buffer.rst:38 msgid "" "on the consumer side, several means are available to obtain a pointer to the " "raw underlying data of an object (for example a method parameter)." msgstr "" +"du côté consommateur, plusieurs moyens sont disponibles pour obtenir un " +"pointeur vers les données sous-jacentes brutes d'un objet (par exemple un " +"paramètre de méthode)." #: ../Doc/c-api/buffer.rst:41 msgid "" @@ -64,6 +83,10 @@ msgid "" "example, the elements exposed by an :class:`array.array` can be multi-byte " "values." msgstr "" +"Des objets simples tels que :class:`bytes` et :class:`bytearray` exposent " +"leur tampon sous-jacent dans un format orienté octet. D'autres formes sont " +"possibles ; par exemple, les éléments exposés par un :class:`array.array` " +"peuvent être des valeurs multi-octets." #: ../Doc/c-api/buffer.rst:45 msgid "" @@ -76,22 +99,35 @@ msgid "" "objects to selectively allow or reject exporting of read-write and read-only " "buffers." msgstr "" +"Un exemple de consommateur de l'interface tampon est la méthode :meth:`~io." +"BufferedIOBase.write` des objets fichiers : tout objet qui peut exporter une " +"série d'octets à travers l'interface tampon peut être écrit dans un fichier. " +"Alors que :meth:`write` n'a besoin que d'un accès lecture au contenu " +"interne de l'objet qui lui est passé, d'autres méthodes telles que :meth:" +"`~io.BufferedIOBase.readinto` nécessitent un accès écriture au contenu de " +"leur argument. L'interface *buffer* permet aux objets d'autoriser ou de " +"rejeter sélectivement l'exportation de tampons en mode lecture-écriture et " +"en mode lecture seule." #: ../Doc/c-api/buffer.rst:53 msgid "" "There are two ways for a consumer of the buffer interface to acquire a " "buffer over a target object:" msgstr "" +"Un consommateur de l'interface tampon peut acquérir un tampon sur un objet " +"cible de deux manières :" #: ../Doc/c-api/buffer.rst:56 msgid "call :c:func:`PyObject_GetBuffer` with the right parameters;" -msgstr "" +msgstr "appelez :c:func:`PyObject_GetBuffer` avec les paramètres appropriés ;" #: ../Doc/c-api/buffer.rst:58 msgid "" "call :c:func:`PyArg_ParseTuple` (or one of its siblings) with one of the " "``y*``, ``w*`` or ``s*`` :ref:`format codes `." msgstr "" +"appelez :c:func:`PyArg_ParseTuple` (ou l'un de ses fonctions sœurs) avec " +"l'un des ``y*``, ``w*`` ou ``s*`` :ref:`format codes `." #: ../Doc/c-api/buffer.rst:61 msgid "" @@ -99,6 +135,9 @@ msgid "" "isn't needed anymore. Failure to do so could lead to various issues such as " "resource leaks." msgstr "" +"Dans les deux cas, :c:func:`PyBuffer_Release` doit être appelée quand le " +"tampon n'est plus nécessaire. Ne pas le faire peut conduire à divers " +"problèmes tels que des fuites de ressources." #: ../Doc/c-api/buffer.rst:69 msgid "Buffer structure" @@ -115,6 +154,16 @@ msgid "" "operating system library, or it could be used to pass around structured data " "in its native, in-memory format." msgstr "" +"Les structures tampons (ou simplement les \"tampons\", *buffers* en anglais) " +"sont utiles pour exposer les données binaires d'un autre objet au " +"programmeur Python. Elles peuvent également être utilisées comme un " +"mécanisme de découpage sans copie. En utilisant leur capacité à référencer " +"un bloc de mémoire, il est possible d'exposer toutes les données au " +"programmeur Python assez facilement. La mémoire peut être un grand tableau " +"constant dans une extension C, il peut s'agir d'un bloc brut de mémoire à " +"manipuler avant de passer à une bibliothèque de système d'exploitation ou " +"être utilisé pour transmettre des données structurées dans son format natif " +"en mémoire." #: ../Doc/c-api/buffer.rst:80 msgid "" @@ -124,6 +173,12 @@ msgid "" "buffer is needed, a :ref:`memoryview ` object can be " "created." msgstr "" +"Contrairement à la plupart des types de données exposés par l'interpréteur " +"Python, les tampons ne sont pas de simples pointeurs vers :c:type:`PyObject` " +"mais plutôt des structures C simples. Cela leur permet d'être créés et " +"copiés très simplement. lorsque vous avez besoin d'une enveloppe générique " +"(*wrapper* en anglais) pour un tampon, un objet :ref:`memoryview ` peut être créé." #: ../Doc/c-api/buffer.rst:86 msgid "" @@ -475,7 +530,7 @@ msgstr "" #: ../Doc/c-api/buffer.rst:321 msgid "format" -msgstr "" +msgstr "format" #: ../Doc/c-api/buffer.rst:323 ../Doc/c-api/buffer.rst:325 #: ../Doc/c-api/buffer.rst:327 ../Doc/c-api/buffer.rst:329 @@ -560,7 +615,7 @@ msgstr "" #: ../Doc/c-api/buffer.rst:426 msgid "Buffer-related functions" -msgstr "Fonctions relatives aux buffers" +msgstr "Fonctions relatives aux tampons" #: ../Doc/c-api/buffer.rst:430 msgid "" @@ -622,33 +677,44 @@ msgstr "" #: ../Doc/c-api/buffer.rst:478 msgid "" +"Copy *len* bytes from *src* to its contiguous representation in *buf*. " +"*order* can be ``'C'`` or ``'F'`` (for C-style or Fortran-style ordering). " +"``0`` is returned on success, ``-1`` on error." +msgstr "" + +#: ../Doc/c-api/buffer.rst:482 +msgid "This function fails if *len* != *src->len*." +msgstr "" + +#: ../Doc/c-api/buffer.rst:487 +msgid "" "Fill the *strides* array with byte-strides of a :term:`contiguous` (C-style " "if *order* is ``'C'`` or Fortran-style if *order* is ``'F'``) array of the " "given shape with the given number of bytes per element." msgstr "" -#: ../Doc/c-api/buffer.rst:485 +#: ../Doc/c-api/buffer.rst:494 msgid "" "Handle buffer requests for an exporter that wants to expose *buf* of size " "*len* with writability set according to *readonly*. *buf* is interpreted as " "a sequence of unsigned bytes." msgstr "" -#: ../Doc/c-api/buffer.rst:489 +#: ../Doc/c-api/buffer.rst:498 msgid "" "The *flags* argument indicates the request type. This function always fills " "in *view* as specified by flags, unless *buf* has been designated as read-" "only and :c:macro:`PyBUF_WRITABLE` is set in *flags*." msgstr "" -#: ../Doc/c-api/buffer.rst:493 +#: ../Doc/c-api/buffer.rst:502 msgid "" "On success, set :c:member:`view->obj` to a new reference to *exporter* and " "return 0. Otherwise, raise :c:data:`PyExc_BufferError`, set :c:member:`view-" ">obj` to *NULL* and return ``-1``;" msgstr "" -#: ../Doc/c-api/buffer.rst:497 +#: ../Doc/c-api/buffer.rst:506 msgid "" "If this function is used as part of a :ref:`getbufferproc `, " "*exporter* MUST be set to the exporting object and *flags* must be passed " diff --git a/c-api/bytearray.po b/c-api/bytearray.po index 26207babe..71594bee1 100644 --- a/c-api/bytearray.po +++ b/c-api/bytearray.po @@ -25,7 +25,7 @@ msgstr "Objets tableau d'octets" msgid "" "This subtype of :c:type:`PyObject` represents a Python bytearray object." msgstr "" -"Ce sous-type e :c:type:`PyObject` représente un objet bytearray Python." +"Ce sous-type de :c:type:`PyObject` représente un objet ``bytearray`` Python." #: ../Doc/c-api/bytearray.rst:18 msgid "" @@ -44,16 +44,16 @@ msgid "" "Return true if the object *o* is a bytearray object or an instance of a " "subtype of the bytearray type." msgstr "" -"Renvoie la valeur true (vrai) si l'objet *o* est un objet bytearray ou une " -"instance d'un sous-type du type bytearray." +"Renvoie vrai si l'objet *o* est un ``bytearray`` ou une instance d'un sous-" +"type du type ``bytearray``." #: ../Doc/c-api/bytearray.rst:33 msgid "" "Return true if the object *o* is a bytearray object, but not an instance of " "a subtype of the bytearray type." msgstr "" -"Renvoie la valeur true si l'objet *o* est un objet bytearray, mais pas une " -"instance d'un sous-type du type bytearray." +"Renvoie vrai si l'objet *o* est un ``bytearray``, mais pas une instance d'un " +"sous-type du type ``bytearray``." #: ../Doc/c-api/bytearray.rst:38 msgid "Direct API functions" @@ -72,20 +72,20 @@ msgid "" "Create a new bytearray object from *string* and its length, *len*. On " "failure, *NULL* is returned." msgstr "" -"Crée un nouvel objet bytearray à partir d'un objet *string* et de sa " +"Crée un nouvel objet ``bytearray`` à partir d'un objet *string* et de sa " "longueur, *len*. En cas d'échec, *NULL* est renvoyé." #: ../Doc/c-api/bytearray.rst:56 msgid "" "Concat bytearrays *a* and *b* and return a new bytearray with the result." msgstr "" -"Concatène les bytearrays *a* et *b* et renvoit un nouveau bytearray avec le " -"résultat." +"Concatène les ``bytearrays`` *a* et *b* et renvoie un nouveau ``bytearray`` " +"avec le résultat." #: ../Doc/c-api/bytearray.rst:61 msgid "Return the size of *bytearray* after checking for a *NULL* pointer." msgstr "" -"Renvoit la taille de *bytearray* après vérification de la présence d'un " +"Renvoie la taille de *bytearray* après vérification de la présence d'un " "pointeur *NULL*." #: ../Doc/c-api/bytearray.rst:66 @@ -99,7 +99,7 @@ msgstr "" #: ../Doc/c-api/bytearray.rst:73 msgid "Resize the internal buffer of *bytearray* to *len*." -msgstr "Redimensionne le buffer interne de *bytearray* à la taille *len*." +msgstr "Redimensionne le tampon interne de *bytearray* à la taille *len*." #: ../Doc/c-api/bytearray.rst:76 msgid "Macros" diff --git a/c-api/bytes.po b/c-api/bytes.po index 9381819e3..6e7412d7c 100644 --- a/c-api/bytes.po +++ b/c-api/bytes.po @@ -75,7 +75,7 @@ msgstr "" #: ../Doc/c-api/bytes.rst:68 msgid "Format Characters" -msgstr "" +msgstr "Caractères de format" #: ../Doc/c-api/bytes.rst:68 msgid "Type" @@ -124,7 +124,7 @@ msgstr "" #: ../Doc/c-api/bytes.rst:78 msgid "unsigned int" -msgstr "unsigned int" +msgstr "``unsigned int``" #: ../Doc/c-api/bytes.rst:78 msgid "Exactly equivalent to ``printf(\"%u\")``." @@ -148,7 +148,7 @@ msgstr "" #: ../Doc/c-api/bytes.rst:84 msgid "unsigned long" -msgstr "unsigned long" +msgstr "``unsigned long``" #: ../Doc/c-api/bytes.rst:84 msgid "Exactly equivalent to ``printf(\"%lu\")``." diff --git a/c-api/capsule.po b/c-api/capsule.po index f43f5b110..a724eff34 100644 --- a/c-api/capsule.po +++ b/c-api/capsule.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-04-02 22:11+0200\n" +"POT-Creation-Date: 2018-06-10 11:27+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -28,7 +28,7 @@ msgstr "" "Reportez-vous à :ref:`using-capsules` pour plus d'informations sur " "l'utilisation de ces objets." -#: ../Doc/c-api/capsule.rst:15 +#: ../Doc/c-api/capsule.rst:17 msgid "" "This subtype of :c:type:`PyObject` represents an opaque value, useful for C " "extension modules who need to pass an opaque value (as a :c:type:`void\\*` " @@ -38,57 +38,57 @@ msgid "" "loaded modules." msgstr "" -#: ../Doc/c-api/capsule.rst:24 +#: ../Doc/c-api/capsule.rst:27 msgid "The type of a destructor callback for a capsule. Defined as::" msgstr "" -#: ../Doc/c-api/capsule.rst:28 +#: ../Doc/c-api/capsule.rst:31 msgid "" "See :c:func:`PyCapsule_New` for the semantics of PyCapsule_Destructor " "callbacks." msgstr "" -#: ../Doc/c-api/capsule.rst:34 +#: ../Doc/c-api/capsule.rst:37 msgid "Return true if its argument is a :c:type:`PyCapsule`." msgstr "" -#: ../Doc/c-api/capsule.rst:39 +#: ../Doc/c-api/capsule.rst:42 msgid "" "Create a :c:type:`PyCapsule` encapsulating the *pointer*. The *pointer* " "argument may not be *NULL*." msgstr "" -#: ../Doc/c-api/capsule.rst:42 +#: ../Doc/c-api/capsule.rst:45 msgid "On failure, set an exception and return *NULL*." msgstr "" -#: ../Doc/c-api/capsule.rst:44 +#: ../Doc/c-api/capsule.rst:47 msgid "" "The *name* string may either be *NULL* or a pointer to a valid C string. If " "non-*NULL*, this string must outlive the capsule. (Though it is permitted " "to free it inside the *destructor*.)" msgstr "" -#: ../Doc/c-api/capsule.rst:48 +#: ../Doc/c-api/capsule.rst:51 msgid "" "If the *destructor* argument is not *NULL*, it will be called with the " "capsule as its argument when it is destroyed." msgstr "" -#: ../Doc/c-api/capsule.rst:51 +#: ../Doc/c-api/capsule.rst:54 msgid "" "If this capsule will be stored as an attribute of a module, the *name* " "should be specified as ``modulename.attributename``. This will enable other " "modules to import the capsule using :c:func:`PyCapsule_Import`." msgstr "" -#: ../Doc/c-api/capsule.rst:58 +#: ../Doc/c-api/capsule.rst:61 msgid "" "Retrieve the *pointer* stored in the capsule. On failure, set an exception " "and return *NULL*." msgstr "" -#: ../Doc/c-api/capsule.rst:61 +#: ../Doc/c-api/capsule.rst:64 msgid "" "The *name* parameter must compare exactly to the name stored in the capsule. " "If the name stored in the capsule is *NULL*, the *name* passed in must also " @@ -96,46 +96,46 @@ msgid "" "names." msgstr "" -#: ../Doc/c-api/capsule.rst:69 +#: ../Doc/c-api/capsule.rst:72 msgid "" "Return the current destructor stored in the capsule. On failure, set an " "exception and return *NULL*." msgstr "" -#: ../Doc/c-api/capsule.rst:72 +#: ../Doc/c-api/capsule.rst:75 msgid "" "It is legal for a capsule to have a *NULL* destructor. This makes a *NULL* " "return code somewhat ambiguous; use :c:func:`PyCapsule_IsValid` or :c:func:" "`PyErr_Occurred` to disambiguate." msgstr "" -#: ../Doc/c-api/capsule.rst:79 +#: ../Doc/c-api/capsule.rst:82 msgid "" "Return the current context stored in the capsule. On failure, set an " "exception and return *NULL*." msgstr "" -#: ../Doc/c-api/capsule.rst:82 +#: ../Doc/c-api/capsule.rst:85 msgid "" "It is legal for a capsule to have a *NULL* context. This makes a *NULL* " "return code somewhat ambiguous; use :c:func:`PyCapsule_IsValid` or :c:func:" "`PyErr_Occurred` to disambiguate." msgstr "" -#: ../Doc/c-api/capsule.rst:89 +#: ../Doc/c-api/capsule.rst:92 msgid "" "Return the current name stored in the capsule. On failure, set an exception " "and return *NULL*." msgstr "" -#: ../Doc/c-api/capsule.rst:92 +#: ../Doc/c-api/capsule.rst:95 msgid "" "It is legal for a capsule to have a *NULL* name. This makes a *NULL* return " "code somewhat ambiguous; use :c:func:`PyCapsule_IsValid` or :c:func:" "`PyErr_Occurred` to disambiguate." msgstr "" -#: ../Doc/c-api/capsule.rst:99 +#: ../Doc/c-api/capsule.rst:102 msgid "" "Import a pointer to a C object from a capsule attribute in a module. The " "*name* parameter should specify the full name to the attribute, as in " @@ -145,14 +145,13 @@ msgid "" "import the module conventionally (using :c:func:`PyImport_ImportModule`)." msgstr "" -#: ../Doc/c-api/capsule.rst:106 +#: ../Doc/c-api/capsule.rst:109 msgid "" "Return the capsule's internal *pointer* on success. On failure, set an " -"exception and return *NULL*. However, if :c:func:`PyCapsule_Import` failed " -"to import the module, and *no_block* was true, no exception is set." +"exception and return *NULL*." msgstr "" -#: ../Doc/c-api/capsule.rst:112 +#: ../Doc/c-api/capsule.rst:115 msgid "" "Determines whether or not *capsule* is a valid capsule. A valid capsule is " "non-*NULL*, passes :c:func:`PyCapsule_CheckExact`, has a non-*NULL* pointer " @@ -161,41 +160,41 @@ msgid "" "compared.)" msgstr "" -#: ../Doc/c-api/capsule.rst:118 +#: ../Doc/c-api/capsule.rst:121 msgid "" "In other words, if :c:func:`PyCapsule_IsValid` returns a true value, calls " "to any of the accessors (any function starting with :c:func:`PyCapsule_Get`) " "are guaranteed to succeed." msgstr "" -#: ../Doc/c-api/capsule.rst:122 +#: ../Doc/c-api/capsule.rst:125 msgid "" "Return a nonzero value if the object is valid and matches the name passed " "in. Return ``0`` otherwise. This function will not fail." msgstr "" -#: ../Doc/c-api/capsule.rst:127 +#: ../Doc/c-api/capsule.rst:131 msgid "Set the context pointer inside *capsule* to *context*." msgstr "" -#: ../Doc/c-api/capsule.rst:129 ../Doc/c-api/capsule.rst:135 -#: ../Doc/c-api/capsule.rst:143 ../Doc/c-api/capsule.rst:150 +#: ../Doc/c-api/capsule.rst:133 ../Doc/c-api/capsule.rst:140 +#: ../Doc/c-api/capsule.rst:149 ../Doc/c-api/capsule.rst:157 msgid "" "Return ``0`` on success. Return nonzero and set an exception on failure." msgstr "" -#: ../Doc/c-api/capsule.rst:133 +#: ../Doc/c-api/capsule.rst:138 msgid "Set the destructor inside *capsule* to *destructor*." msgstr "" -#: ../Doc/c-api/capsule.rst:139 +#: ../Doc/c-api/capsule.rst:145 msgid "" "Set the name inside *capsule* to *name*. If non-*NULL*, the name must " "outlive the capsule. If the previous *name* stored in the capsule was not " "*NULL*, no attempt is made to free it." msgstr "" -#: ../Doc/c-api/capsule.rst:147 +#: ../Doc/c-api/capsule.rst:154 msgid "" "Set the void pointer inside *capsule* to *pointer*. The pointer may not be " "*NULL*." diff --git a/c-api/cell.po b/c-api/cell.po index ebee8a578..4564c9276 100644 --- a/c-api/cell.po +++ b/c-api/cell.po @@ -32,44 +32,50 @@ msgid "" "support from the generated byte-code; these are not automatically de-" "referenced when accessed. Cell objects are not likely to be useful elsewhere." msgstr "" -"Les objets \"Cellules\" sont utilisés pour implémenter des variables " -"référencées dans de multiples enviromments. Pour chacune de ces variables, " -"un objet cellule est créé pour stocker sa valeur ; les variables locales de " -"chaque pile d'exécution qui référence cette valeur contiennent une référence " -"sur les cellules des autres environnements qui utilisent aussi cette " -"variable. Quand la valeur est accédée, la valeur de la cellule est utilisée, " -"au lei de celle de l'objet cellule proprement dit. Ce dé-référencement de " -"l'objet cellule requiert l'intervention du bytecode généré ; il n'est pas " -"automatiquement dé-référencé quand il est accédé. Il est plausible que les " -"objets cellules ne soit utilisés ailleurs." +"Les objets \"Cellules\" (*cell* en anglais) sont utilisés pour implémenter " +"des variables référencées dans de multiples environnements. Pour chacune de " +"ces variables, un objet cellule est créé pour stocker sa valeur ; les " +"variables locales de chaque pile d'exécution qui référence cette valeur " +"contiennent une référence sur les cellules des autres environnements qui " +"utilisent aussi cette variable. Quand la valeur est accédée, la valeur de la " +"cellule est utilisée, au lei de celle de l'objet cellule proprement dit. Ce " +"dé-référencement de l'objet cellule requiert l'intervention du *bytecode* " +"généré ; il n'est pas automatiquement dé-référencé quand il est accédé. Il " +"est plausible que les objets cellules ne soit utilisés ailleurs." #: ../Doc/c-api/cell.rst:20 msgid "The C structure used for cell objects." -msgstr "" +msgstr "Structure C utilisée pour les objets cellules." #: ../Doc/c-api/cell.rst:25 msgid "The type object corresponding to cell objects." -msgstr "" +msgstr "Type objet correspondant aux objets cellules." #: ../Doc/c-api/cell.rst:30 msgid "Return true if *ob* is a cell object; *ob* must not be *NULL*." msgstr "" +"Renvoie ``True`` si *ob* est un objet cellule ; *ob* ne doit pas être à " +"*NULL*." #: ../Doc/c-api/cell.rst:35 msgid "" "Create and return a new cell object containing the value *ob*. The parameter " "may be *NULL*." msgstr "" +"Crée et retourne un nouvel objet cellule contenant la valeur *ob*. Le " +"paramètre peut être mis à *NULL*." #: ../Doc/c-api/cell.rst:41 msgid "Return the contents of the cell *cell*." -msgstr "" +msgstr "Renvoie le contenu de la cellule *cell*." #: ../Doc/c-api/cell.rst:46 msgid "" "Return the contents of the cell *cell*, but without checking that *cell* is " "non-*NULL* and a cell object." msgstr "" +"Renvoie le contenu de la cellule *cell*, mais sans vérifier si *cell* est " +"non *NULL* et sans vérifier si c'est un objet cellule." #: ../Doc/c-api/cell.rst:52 msgid "" @@ -78,6 +84,10 @@ msgid "" "must be non-*NULL*; if it is not a cell object, ``-1`` will be returned. On " "success, ``0`` will be returned." msgstr "" +"Définit le contenu de l'objet cellule à *value*. Cela libère la référence à " +"toute valeur de la cellule. *value* peut être fixé à *NULL*. *cell* ne doit " +"pas être *NULL* ; si ce n'est pas un objet cellule, ``-1`` est renvoyé. Si " +"c'est un objet cellule, renvoie ``0``." #: ../Doc/c-api/cell.rst:60 msgid "" @@ -85,3 +95,6 @@ msgid "" "are adjusted, and no checks are made for safety; *cell* must be non-*NULL* " "and must be a cell object." msgstr "" +"Définit la valeur de l'objet cellule à *value*. Pas de comptage de " +"références n'est ajusté et il n'y' a pas de contrôle effectué pour vérifier " +"la sûreté ; *cell* doit être à non *NULL* et doit être un objet cellule." diff --git a/c-api/complex.po b/c-api/complex.po index e9a46107f..11781e423 100644 --- a/c-api/complex.po +++ b/c-api/complex.po @@ -55,54 +55,73 @@ msgid "" "objects use structures of this type as input or output values, as " "appropriate. It is defined as::" msgstr "" +"Structure C représentant la valeur d'un nombre complexe Python. La majorité " +"des fonctions qui traitent des nombres complexes utilisent cette structure " +"en entrée ou en sortie, selon le cas. Elle est définie par ::" #: ../Doc/c-api/complex.rst:39 msgid "" "Return the sum of two complex numbers, using the C :c:type:`Py_complex` " "representation." msgstr "" +"Renvoie la somme de deux nombres complexes, sous la forme d'un :c:type:" +"`Py_complex` en C." #: ../Doc/c-api/complex.rst:45 msgid "" "Return the difference between two complex numbers, using the C :c:type:" "`Py_complex` representation." msgstr "" +"Renvoie la différence de deux nombres complexes, sous la forme d'un :c:type:" +"`Py_complex` en C." #: ../Doc/c-api/complex.rst:51 msgid "" "Return the negation of the complex number *complex*, using the C :c:type:" "`Py_complex` representation." msgstr "" +"Renvoie l'opposé du nombre complexe *complex*, sous la forme d'un :c:type:" +"`Py_complex` en C." #: ../Doc/c-api/complex.rst:57 msgid "" "Return the product of two complex numbers, using the C :c:type:`Py_complex` " "representation." msgstr "" +"Renvoie le produit de deux nombres complexes, sous la forme d'un :c:type:" +"`Py_complex` en C." #: ../Doc/c-api/complex.rst:63 msgid "" "Return the quotient of two complex numbers, using the C :c:type:`Py_complex` " "representation." msgstr "" +"Renvoie le quotient de deux nombres complexes, sous la forme d'un :c:type:" +"`Py_complex` en C." #: ../Doc/c-api/complex.rst:66 msgid "" "If *divisor* is null, this method returns zero and sets :c:data:`errno` to :" "c:data:`EDOM`." msgstr "" +"Si *divisor* est nul, cette méthode renvoie zéro et assigne :c:data:`EDOM` " +"à :c:data:`errno`." #: ../Doc/c-api/complex.rst:72 msgid "" "Return the exponentiation of *num* by *exp*, using the C :c:type:" "`Py_complex` representation." msgstr "" +"Renvoie *num* à la puissance *exp*, sous la forme d'un :c:type:`Py_complex` " +"en C." #: ../Doc/c-api/complex.rst:75 msgid "" "If *num* is null and *exp* is not a positive real number, this method " "returns zero and sets :c:data:`errno` to :c:data:`EDOM`." msgstr "" +"Si *num* est nul et *exp* n'est pas un nombre réel positif, cette méthode " +"renvoie zéro et assigne :c:data:`EDOM` à :c:data:`errno`." #: ../Doc/c-api/complex.rst:80 msgid "Complex Numbers as Python Objects" @@ -112,46 +131,64 @@ msgstr "Nombres complexes en tant qu'objets Python" msgid "" "This subtype of :c:type:`PyObject` represents a Python complex number object." msgstr "" +"Ce sous-type de l'objet :c:type:`PyObject` représente un nombre complexe en " +"Python." #: ../Doc/c-api/complex.rst:90 msgid "" "This instance of :c:type:`PyTypeObject` represents the Python complex number " "type. It is the same object as :class:`complex` in the Python layer." msgstr "" +"Cette instance de :c:type:`PyTypeObject` représente le type nombre complexe " +"Python. C'est le même objet que la classe :class:`complex` de la couche " +"Python." #: ../Doc/c-api/complex.rst:96 msgid "" "Return true if its argument is a :c:type:`PyComplexObject` or a subtype of :" "c:type:`PyComplexObject`." msgstr "" +"Renvoie vrai si l'argument est de type :c:type:`PyComplexObject` ou un sous-" +"type de :c:type:`PyComplexObject`." #: ../Doc/c-api/complex.rst:102 msgid "" "Return true if its argument is a :c:type:`PyComplexObject`, but not a " "subtype of :c:type:`PyComplexObject`." msgstr "" +"Renvoie vrai si l'argument est de type :c:type:`PyComplexObject`, mais pas " +"un sous-type de :c:type:`PyComplexObject`." #: ../Doc/c-api/complex.rst:108 msgid "" "Create a new Python complex number object from a C :c:type:`Py_complex` " "value." msgstr "" +"Crée un nouveau nombre complexe à partir de la valeur d'un :c:type:" +"`Py_complex` en C." #: ../Doc/c-api/complex.rst:113 msgid "Return a new :c:type:`PyComplexObject` object from *real* and *imag*." msgstr "" +"Renvoie un nouveau :c:type:`PyComplexObject` à partir de *real* et de *imag*." #: ../Doc/c-api/complex.rst:118 msgid "Return the real part of *op* as a C :c:type:`double`." msgstr "" +"Renvoie la partie réelle du nombre complexe *op* sous la forme d'un :c:type:" +"`double` en C." #: ../Doc/c-api/complex.rst:123 msgid "Return the imaginary part of *op* as a C :c:type:`double`." msgstr "" +"Renvoie la partie imaginaire du nombre complexe *op* sous la forme d'un :c:" +"type:`double` en C." #: ../Doc/c-api/complex.rst:128 msgid "Return the :c:type:`Py_complex` value of the complex number *op*." msgstr "" +"Renvoie la valeur du nombre complexe *op* sous la forme d'un :c:type:" +"`Py_complex` en C." #: ../Doc/c-api/complex.rst:130 msgid "" @@ -159,3 +196,7 @@ msgid "" "method, this method will first be called to convert *op* to a Python complex " "number object. Upon failure, this method returns ``-1.0`` as a real value." msgstr "" +"Si *op* n'est pas un nombre complexe Python mais a une méthode :meth:" +"`__complex__`, cette méthode est d'abord appelée pour convertir *op* en " +"nombre complexe Python. En cas d'échec, cette méthode renvoie ``-1.0`` en " +"tant que nombre réel." diff --git a/c-api/coro.po b/c-api/coro.po index 8e0bf042c..205f1dbc6 100644 --- a/c-api/coro.po +++ b/c-api/coro.po @@ -35,7 +35,7 @@ msgstr "La structure C utilisée pour les objets coroutine." #: ../Doc/c-api/coro.rst:21 msgid "The type object corresponding to coroutine objects." -msgstr "L'objet type correpondant aux objets coroutines." +msgstr "L'objet type correspondant aux objets coroutines." #: ../Doc/c-api/coro.rst:26 msgid "Return true if *ob*'s type is *PyCoro_Type*; *ob* must not be *NULL*." diff --git a/c-api/datetime.po b/c-api/datetime.po index 4d29d84f0..e8235d7f5 100644 --- a/c-api/datetime.po +++ b/c-api/datetime.po @@ -31,74 +31,102 @@ msgid "" "structure into a static variable, :c:data:`PyDateTimeAPI`, that is used by " "the following macros." msgstr "" +"De nombreux objets *date* et *time* sont exposés par le module :mod:" +"`DateTime`. Avant d'utiliser une de ces fonctions, le fichier d'en-tête :" +"file:`datetime.h` doit être inclus dans vos sources (veuillez noter qu'il " +"n'est pas inclus par le fichier :file:`Python.h`) et la macro :c:macro:" +"`PyDateTime_IMPORT` doit-être invoquée, généralement lors de la fonction " +"d'initialisation du module. La macro crée un pointeur vers une structure C " +"et place celui-ci dans une variable statique, :c:data:`PyDateTimeAPI`, qui " +"est utilisée par les macros suivantes." #: ../Doc/c-api/datetime.rst:16 msgid "Type-check macros:" -msgstr "" +msgstr "Macros pour vérifier les types :" #: ../Doc/c-api/datetime.rst:20 msgid "" "Return true if *ob* is of type :c:data:`PyDateTime_DateType` or a subtype " "of :c:data:`PyDateTime_DateType`. *ob* must not be *NULL*." msgstr "" +"Renvoie vrai si *ob* est de type :c:data:`PyDateTime_DateType` ou un sous-" +"type de :c:data:`PyDateTime_DateType`. *ob* ne doit pas être *NULL*." #: ../Doc/c-api/datetime.rst:26 msgid "" "Return true if *ob* is of type :c:data:`PyDateTime_DateType`. *ob* must not " "be *NULL*." msgstr "" +"Renvoie vrai si *ob* est de type :c:data:`PyDateTime_DateType`. *ob* ne doit " +"pas être *NULL*." #: ../Doc/c-api/datetime.rst:32 msgid "" "Return true if *ob* is of type :c:data:`PyDateTime_DateTimeType` or a " "subtype of :c:data:`PyDateTime_DateTimeType`. *ob* must not be *NULL*." msgstr "" +"Renvoie vrai si *ob* est de type :c:data:`PyDateTime_DateTimeType` ou un " +"sous-type de :c:data:`PyDateTime_DateTimeType`. *ob* ne doit pas être *NULL*." #: ../Doc/c-api/datetime.rst:38 msgid "" "Return true if *ob* is of type :c:data:`PyDateTime_DateTimeType`. *ob* must " "not be *NULL*." msgstr "" +"Renvoie vrai si *ob* est de type :c:data:`PyDateTime_DateTimeType`. *ob* ne " +"doit pas être *NULL*." #: ../Doc/c-api/datetime.rst:44 msgid "" "Return true if *ob* is of type :c:data:`PyDateTime_TimeType` or a subtype " "of :c:data:`PyDateTime_TimeType`. *ob* must not be *NULL*." msgstr "" +"Renvoie vrai si *ob* est de type :c:data:`PyDateTime_TimeType` ou un sous-" +"type de :c:data:`PyDateTime_TimeType`. *ob* ne doit pas être *NULL*." #: ../Doc/c-api/datetime.rst:50 msgid "" "Return true if *ob* is of type :c:data:`PyDateTime_TimeType`. *ob* must not " "be *NULL*." msgstr "" +"Renvoie vrai si *ob* est de type :c:data:`PyDateTime_TimeType`. *ob* ne doit " +"pas être *NULL*." #: ../Doc/c-api/datetime.rst:56 msgid "" "Return true if *ob* is of type :c:data:`PyDateTime_DeltaType` or a subtype " "of :c:data:`PyDateTime_DeltaType`. *ob* must not be *NULL*." msgstr "" +"Renvoie vrai si *ob* est de type :c:data:`PyDateTime_DeltaType` ou un sous-" +"type de :c:data:`PyDateTime_DeltaType`. *ob* ne doit pas être *NULL*." #: ../Doc/c-api/datetime.rst:62 msgid "" "Return true if *ob* is of type :c:data:`PyDateTime_DeltaType`. *ob* must not " "be *NULL*." msgstr "" +"Renvoie vrai si *ob* est de type :c:data:`PyDateTime_DeltaType`. *ob* ne " +"doit pas être *NULL*." #: ../Doc/c-api/datetime.rst:68 msgid "" "Return true if *ob* is of type :c:data:`PyDateTime_TZInfoType` or a subtype " "of :c:data:`PyDateTime_TZInfoType`. *ob* must not be *NULL*." msgstr "" +"Renvoie vrai si *ob* est de type :c:data:`PyDateTime_TZInfoType` ou un sous-" +"type de :c:data:`PyDateTime_TZInfoType`. *ob* ne doit pas être *NULL*." #: ../Doc/c-api/datetime.rst:74 msgid "" "Return true if *ob* is of type :c:data:`PyDateTime_TZInfoType`. *ob* must " "not be *NULL*." msgstr "" +"Renvoie vrai si *ob* est de type :c:data:`PyDateTime_TZInfoType`. *ob* ne " +"doit pas être *NULL*." #: ../Doc/c-api/datetime.rst:78 msgid "Macros to create objects:" -msgstr "" +msgstr "Macros pour créer des objets :" #: ../Doc/c-api/datetime.rst:82 msgid "" @@ -132,18 +160,22 @@ msgid "" "`PyDateTime_DateTime`). The argument must not be *NULL*, and the type is " "not checked:" msgstr "" +"Macros pour extraire les champs des objets *date*. L'argument doit être une " +"instance de :c:data:`PyDateTime_Date`, ou une sous-classe (telle que :c:data:" +"`PyDateTime_DateTime`). L'argument ne doit pas être *NULL*, et le type n'est " +"pas vérifié :" #: ../Doc/c-api/datetime.rst:112 msgid "Return the year, as a positive int." -msgstr "" +msgstr "Renvoie l'année, sous forme d'entier positif." #: ../Doc/c-api/datetime.rst:117 msgid "Return the month, as an int from 1 through 12." -msgstr "" +msgstr "Renvoie le mois, sous forme d'entier allant de 1 à 12." #: ../Doc/c-api/datetime.rst:122 msgid "Return the day, as an int from 1 through 31." -msgstr "" +msgstr "Renvoie le jour, sous forme d'entier allant de 1 à 31." #: ../Doc/c-api/datetime.rst:125 msgid "" @@ -151,22 +183,25 @@ msgid "" "instance of :c:data:`PyDateTime_DateTime`, including subclasses. The " "argument must not be *NULL*, and the type is not checked:" msgstr "" +"Macros pour extraire les champs des objets *datetime*. L'argument doit être " +"une instance de :c:data:`PyDateTime_DateTime` ou une sous-classe de celle-" +"ci. L'argument ne doit pas être *NULL*, et le type n'est pas vérifié :" #: ../Doc/c-api/datetime.rst:131 ../Doc/c-api/datetime.rst:155 msgid "Return the hour, as an int from 0 through 23." -msgstr "" +msgstr "Renvoie l'heure, sous forme d'entier allant de 0 à 23." #: ../Doc/c-api/datetime.rst:136 ../Doc/c-api/datetime.rst:160 msgid "Return the minute, as an int from 0 through 59." -msgstr "" +msgstr "Renvoie la minute, sous forme d'entier allant de 0 à 59." #: ../Doc/c-api/datetime.rst:141 ../Doc/c-api/datetime.rst:165 msgid "Return the second, as an int from 0 through 59." -msgstr "" +msgstr "Renvoie la seconde, sous forme d'entier allant de 0 à 59." #: ../Doc/c-api/datetime.rst:146 ../Doc/c-api/datetime.rst:170 msgid "Return the microsecond, as an int from 0 through 999999." -msgstr "" +msgstr "Renvoie la microseconde, sous forme d'entier allant de 0 à 999999." #: ../Doc/c-api/datetime.rst:149 msgid "" @@ -174,6 +209,9 @@ msgid "" "instance of :c:data:`PyDateTime_Time`, including subclasses. The argument " "must not be *NULL*, and the type is not checked:" msgstr "" +"Macros pour extraire les champs des objets *time*. L'argument doit être une " +"instance de :c:data:`PyDateTime_Time` ou une sous-classe de celle-ci. " +"L'argument ne doit pas être *NULL*, et le type n'est pas vérifié :" #: ../Doc/c-api/datetime.rst:173 msgid "" @@ -181,22 +219,28 @@ msgid "" "instance of :c:data:`PyDateTime_Delta`, including subclasses. The argument " "must not be *NULL*, and the type is not checked:" msgstr "" +"Macros pour extraire les champs des objets *time delta*. L'argument doit " +"être une instance de :c:data:`PyDateTime_Delta` ou une sous-classe de celle-" +"ci. L'argument ne doit pas être *NULL*, et le type n'est pas vérifié :" #: ../Doc/c-api/datetime.rst:179 msgid "Return the number of days, as an int from -999999999 to 999999999." msgstr "" +"Renvoie le nombre de jours, sous forme d'entier allant de -999999999 à " +"999999999." #: ../Doc/c-api/datetime.rst:186 msgid "Return the number of seconds, as an int from 0 through 86399." -msgstr "" +msgstr "Renvoie le nombre de secondes sous forme d'entier allant de 0 à 86399." #: ../Doc/c-api/datetime.rst:193 msgid "Return the number of microseconds, as an int from 0 through 999999." msgstr "" +"Renvoie le nombre de microsecondes, sous forme d'entier allant de 0 à 999999." #: ../Doc/c-api/datetime.rst:198 msgid "Macros for the convenience of modules implementing the DB API:" -msgstr "" +msgstr "Macros de confort pour les modules implémentant l'API DB :" #: ../Doc/c-api/datetime.rst:202 msgid "" diff --git a/c-api/dict.po b/c-api/dict.po index 456fc8e9c..53170b14a 100644 --- a/c-api/dict.po +++ b/c-api/dict.po @@ -164,7 +164,7 @@ msgstr "" #: ../Doc/c-api/dict.rst:160 msgid "For example::" -msgstr "Par exemple : ::" +msgstr "Par exemple ::" #: ../Doc/c-api/dict.rst:170 msgid "" diff --git a/c-api/exceptions.po b/c-api/exceptions.po index bd87df3b1..04e1d9908 100644 --- a/c-api/exceptions.po +++ b/c-api/exceptions.po @@ -486,7 +486,7 @@ msgstr "" #: ../Doc/c-api/exceptions.rst:477 msgid "Signal Handling" -msgstr "" +msgstr "Traitement des signaux" #: ../Doc/c-api/exceptions.rst:487 msgid "" @@ -610,7 +610,7 @@ msgstr "" #: ../Doc/c-api/exceptions.rst:603 msgid "Unicode Exception Objects" -msgstr "Objets exception unicode" +msgstr "Objets exception Unicode" #: ../Doc/c-api/exceptions.rst:605 msgid "" @@ -1273,11 +1273,11 @@ msgstr "" #: ../Doc/c-api/exceptions.rst:949 ../Doc/c-api/exceptions.rst:1013 msgid "Notes:" -msgstr "Notes : " +msgstr "Notes :" #: ../Doc/c-api/exceptions.rst:952 msgid "This is a base class for other standard exceptions." -msgstr "C'est la classe de base pour les autres exceptions standards" +msgstr "C'est la classe de base pour les autres exceptions standards." #: ../Doc/c-api/exceptions.rst:955 msgid "This is the same as :exc:`weakref.ReferenceError`." diff --git a/c-api/file.po b/c-api/file.po index db2b2fe0e..4a6dabad8 100644 --- a/c-api/file.po +++ b/c-api/file.po @@ -32,6 +32,16 @@ msgid "" "reporting in the interpreter; third-party code is advised to access the :mod:" "`io` APIs instead." msgstr "" +"Ces API sont une émulation minimale de l'API C Python 2 pour les objets " +"fichier natifs, qui reposaient sur la gestion des entrées-sorties avec " +"tampon (:c:type:`FILE\\*`) de la bibliothèque standard C. En Python 3, les " +"fichiers et les flux utilisent le nouveau module :mod:`io`, qui définit " +"plusieurs couches au dessus des entrées/sorties bas niveau sans tampon du " +"système d'exploitation. Les fonctions définies ci-dessous, écrites en C, " +"encapsulent ces nouvelles APi pour les rendre plus faciles d'utilisation et " +"sont majoritairement pensées pour signaler des erreurs internes dans " +"l'interpréteur ; il est conseillé au code tiers d'utiliser les API de :mod:" +"`io` à la place." #: ../Doc/c-api/file.rst:22 msgid "" @@ -42,6 +52,13 @@ msgid "" "failure. For a more comprehensive description of the arguments, please refer " "to the :func:`io.open` function documentation." msgstr "" +"Crée un objet fichier Python à partir du descripteur d'un fichier déjà " +"ouvert *fd*. Les arguments *name*, *encoding*, *errors* et *newline* peuvent " +"être *NULL* pour utiliser ceux par défaut ; *buffering* peut être *-1* pour " +"utiliser celui par défaut ; *name* est ignoré et gardé pour la rétro-" +"compatibilité. Renvoie *NULL* en cas d'échec. Pour une description plus " +"détaillée des arguments, merci de vous référer à la documentation de " +"fonction :func:`io.open`." #: ../Doc/c-api/file.rst:31 msgid "" @@ -49,10 +66,14 @@ msgid "" "level file descriptors can produce various issues (such as unexpected " "ordering of data)." msgstr "" +"Étant donné que les flux de données Python possèdent leur propre couche de " +"tampon, les mélanger avec des descripteurs de fichiers du niveau du système " +"d'exploitation peut produire des erreurs (comme par exemple un ordre des " +"données inattendu)." #: ../Doc/c-api/file.rst:35 msgid "Ignore *name* attribute." -msgstr "" +msgstr "ignore l'attribut *name*" #: ../Doc/c-api/file.rst:41 msgid "" @@ -62,6 +83,11 @@ msgid "" "integer, which is returned as the file descriptor value. Sets an exception " "and returns ``-1`` on failure." msgstr "" +"Renvoie un descripteur de fichier associé avec *p* comme un :c:type:`int`. " +"Si l'objet est un entier, sa valeur est renvoyée. Sinon, la méthode :meth:" +"`~io.IOBase.fileno` de l'objet est appelée si elle existe; la méthode doit " +"renvoyer un entier, qui est renvoyé en tant que valeur du descripteur. " +"Affecte une exception et renvoie ``-1`` lors d'un échec." #: ../Doc/c-api/file.rst:52 msgid "" @@ -75,6 +101,16 @@ msgid "" "regardless of length, but :exc:`EOFError` is raised if the end of the file " "is reached immediately." msgstr "" +"Cette fonction, équivalente à ``p.readline([n])``, lit une ligne de l'objet " +"*p*. *p* peut être un objet fichier ou n'importe quel objet qui possède une " +"méthode :meth:`~io.IOBase.readline`. Si *n* vaut ``0``, une seule ligne est " +"lue, indépendamment de la taille de la ligne. Si *n* est plus grand que " +"``0``, un maximum de *n* octets seront lus en provenance du fichier ; une " +"ligne partielle peut être renvoyée. Dans les deux cas, une chaîne de " +"caractères vide est renvoyée si la fin du fichier est atteinte " +"immédiatement. Cependant, si *n* est plus petit que ``0``, une ligne est lue " +"indépendamment de sa taille, mais :exc:`EOFError` est levée si la fin du " +"fichier est atteinte immédiatement." #: ../Doc/c-api/file.rst:67 msgid "" @@ -83,9 +119,16 @@ msgid "" "instead of the :func:`repr`. Return ``0`` on success or ``-1`` on failure; " "the appropriate exception will be set." msgstr "" +"Écrit l'objet *obj* dans l'objet fichier *p*. La seule option gérée pour " +"*flags* est :const:`Py_PRINT_RAW` ; si défini, l'attribut :func:`str` de " +"l'objet est écrit à la place de l'attribut :func:`repr`. Retourne ``0`` en " +"cas de succès ou ``-1`` en cas échec ; l'exception appropriée sera levée." #: ../Doc/c-api/file.rst:75 msgid "" "Write string *s* to file object *p*. Return ``0`` on success or ``-1`` on " "failure; the appropriate exception will be set." msgstr "" +"Écrit la chaîne de caractères *s* dans l'objet fichier *p*. Retourne ``0`` " +"en cas de succès ou ``-1`` en cas d'échec ; l'exception appropriée sera mise " +"en place." diff --git a/c-api/float.po b/c-api/float.po index 9308be4e7..f5aa5c435 100644 --- a/c-api/float.po +++ b/c-api/float.po @@ -19,40 +19,53 @@ msgstr "" #: ../Doc/c-api/float.rst:6 msgid "Floating Point Objects" -msgstr "" +msgstr "Objets représentant les nombres à virgule flottante" #: ../Doc/c-api/float.rst:13 msgid "" "This subtype of :c:type:`PyObject` represents a Python floating point object." msgstr "" +"Ce sous-type de l'objet :c:type:`PyObject` représente un nombre à virgule " +"flottante en Python." #: ../Doc/c-api/float.rst:18 msgid "" "This instance of :c:type:`PyTypeObject` represents the Python floating point " "type. This is the same object as :class:`float` in the Python layer." msgstr "" +"Cette instance de l'objet :c:type:`PyTypeObject` représente le type nombre à " +"virgule flottante en Python. C'est le même objet que la classe :class:" +"`float` de la couche Python." #: ../Doc/c-api/float.rst:24 msgid "" "Return true if its argument is a :c:type:`PyFloatObject` or a subtype of :c:" "type:`PyFloatObject`." msgstr "" +"Renvoie vrai si l'argument est de type :c:type:`PyFloatObject` ou un sous-" +"type de :c:type:`PyFloatObject`." #: ../Doc/c-api/float.rst:30 msgid "" "Return true if its argument is a :c:type:`PyFloatObject`, but not a subtype " "of :c:type:`PyFloatObject`." msgstr "" +"Renvoie vrai si l'argument est de type :c:type:`PyFloatObject`, mais pas un " +"sous-type de :c:type:`PyFloatObject`." #: ../Doc/c-api/float.rst:36 msgid "" "Create a :c:type:`PyFloatObject` object based on the string value in *str*, " "or *NULL* on failure." msgstr "" +"Crée un objet :c:type:`PyFloatObject` à partir de la valeur de la chaîne de " +"caractères *str*, ou *NULL* en cas d'échec." #: ../Doc/c-api/float.rst:42 msgid "Create a :c:type:`PyFloatObject` object from *v*, or *NULL* on failure." msgstr "" +"Crée un objet :c:type:`PyFloatObject` à partir de *v*, ou *NULL* en cas " +"d'échec." #: ../Doc/c-api/float.rst:47 msgid "" @@ -62,12 +75,20 @@ msgid "" "This method returns ``-1.0`` upon failure, so one should call :c:func:" "`PyErr_Occurred` to check for errors." msgstr "" +"Renvoie une représentation du contenu d'un *pyfloat* sous la forme d'un :c:" +"type:`double` en C. Si le *pyfloat* n'est pas un nombre à virgule flottante " +"mais contient une méthode :meth:`__float__`, elle est d'abord appelée pour " +"convertir le *pyfloat* en nombre à virgule flottante. Cette méthode renvoie " +"``-1.0`` en cas d'échec, il faut appeler :c:func:`PyErr_Occurred` pour " +"vérifier les erreurs." #: ../Doc/c-api/float.rst:56 msgid "" "Return a C :c:type:`double` representation of the contents of *pyfloat*, but " "without error checking." msgstr "" +"Renvoie une représentation du contenu d'un *pyfloat* sous la forme d'un :c:" +"type:`double` en C, sans vérifier les erreurs." #: ../Doc/c-api/float.rst:62 msgid "" @@ -75,20 +96,29 @@ msgid "" "minimum and maximum values of a float. It's a thin wrapper around the header " "file :file:`float.h`." msgstr "" +"Renvoie une instance *structseq* qui contient les informations sur la " +"précision et les valeurs minimales et maximales pour un nombre à virgule " +"flottante. C'est une enveloppe autour du fichier d'entête :file:`float.h`." #: ../Doc/c-api/float.rst:69 msgid "" "Return the maximum representable finite float *DBL_MAX* as C :c:type:" "`double`." msgstr "" +"Renvoie le nombre à virgule flottante fini maximal *DBL_MAX* sous la forme " +"d'un :c:type:`double` en C." #: ../Doc/c-api/float.rst:74 msgid "" "Return the minimum normalized positive float *DBL_MIN* as C :c:type:`double`." msgstr "" +"Renvoie le nombre à virgule flottante minimal normalisé *DBL_MIN* sous la " +"forme :c:type:`double` en C." #: ../Doc/c-api/float.rst:78 msgid "" "Clear the float free list. Return the number of items that could not be " "freed." msgstr "" +"Libère la mémoire de la *free list* des nombres à virgule flottante. Renvoie " +"le nombre d'éléments qui n'ont pas pu être libérés." diff --git a/c-api/gcsupport.po b/c-api/gcsupport.po index 48cc1038b..65bdcae4e 100644 --- a/c-api/gcsupport.po +++ b/c-api/gcsupport.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-04-02 22:11+0200\n" +"POT-Creation-Date: 2018-06-10 11:27+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -78,7 +78,8 @@ msgstr "" #: ../Doc/c-api/gcsupport.rst:51 msgid "" "Resize an object allocated by :c:func:`PyObject_NewVar`. Returns the " -"resized object or *NULL* on failure." +"resized object or *NULL* on failure. *op* must not be tracked by the " +"collector yet." msgstr "" #: ../Doc/c-api/gcsupport.rst:57 diff --git a/c-api/gen.po b/c-api/gen.po index 8b111f531..4cc345e94 100644 --- a/c-api/gen.po +++ b/c-api/gen.po @@ -29,13 +29,13 @@ msgid "" "`PyGen_NewWithQualName`." msgstr "" "Python utilise des objets générateurs pour implémenter les itérations de " -"générateurs. Ils sont normalement crées en iterant sur une fonction donnant " +"générateurs. Ils sont normalement crées en itérant sur une fonction donnant " "des valeurs via ``yield``, au lieu d'appeler explicitement :c:func:" "`PyGen_New` ou :c:func:`PyGen_NewWithQualName`." #: ../Doc/c-api/gen.rst:15 msgid "The C structure used for generator objects." -msgstr "La structure C utilisée pour les objets générateurs" +msgstr "La structure C utilisée pour les objets générateurs." #: ../Doc/c-api/gen.rst:20 msgid "The type object corresponding to generator objects." @@ -61,7 +61,7 @@ msgid "" msgstr "" "Crée et renvoie un nouvel objet générateur basé sur l'objet *frame*. Une " "référence à *frame* est volée par cette fonction. L'argument ne doit pas " -"être *NULL*" +"être *NULL*." #: ../Doc/c-api/gen.rst:41 msgid "" diff --git a/c-api/init.po b/c-api/init.po index f3c458fbe..a19de72a3 100644 --- a/c-api/init.po +++ b/c-api/init.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-08 09:58+0100\n" +"POT-Creation-Date: 2018-03-23 09:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -67,8 +67,8 @@ msgid "" "last call to :c:func:`Py_Initialize`. Ideally, this frees all memory " "allocated by the Python interpreter. This is a no-op when called for a " "second time (without calling :c:func:`Py_Initialize` again first). Normally " -"the return value is 0. If there were errors during finalization (flushing " -"buffered data), -1 is returned." +"the return value is ``0``. If there were errors during finalization " +"(flushing buffered data), ``-1`` is returned." msgstr "" #: ../Doc/c-api/init.rst:70 @@ -1358,7 +1358,7 @@ msgstr "" #: ../Doc/c-api/init.rst:1198 msgid "Advanced Debugger Support" -msgstr "Support avancé du debugger" +msgstr "Support avancé du débogueur" #: ../Doc/c-api/init.rst:1203 msgid "" diff --git a/c-api/intro.po b/c-api/intro.po index 7ae5da99f..9bb3723aa 100644 --- a/c-api/intro.po +++ b/c-api/intro.po @@ -157,7 +157,7 @@ msgstr "" #: ../Doc/c-api/intro.rst:113 msgid "Reference Counts" -msgstr "" +msgstr "Compteurs de références" #: ../Doc/c-api/intro.rst:115 msgid "" @@ -361,7 +361,7 @@ msgstr "" #: ../Doc/c-api/intro.rst:369 msgid "Exceptions" -msgstr "Les exceptions" +msgstr "Exceptions" #: ../Doc/c-api/intro.rst:371 msgid "" @@ -466,7 +466,7 @@ msgstr "" #: ../Doc/c-api/intro.rst:517 msgid "Embedding Python" -msgstr "" +msgstr "Embarquer Python" #: ../Doc/c-api/intro.rst:519 msgid "" diff --git a/c-api/iterator.po b/c-api/iterator.po index 539f68190..fc61cf774 100644 --- a/c-api/iterator.po +++ b/c-api/iterator.po @@ -41,10 +41,13 @@ msgid "" "one-argument form of the :func:`iter` built-in function for built-in " "sequence types." msgstr "" +"Type des itérateurs renvoyés par les fonctions :c:func:`PySeqIter_New` et la " +"forme à un argument de la fonction native :func:`iter` pour les séquences " +"natives." #: ../Doc/c-api/iterator.rst:24 msgid "Return true if the type of *op* is :c:data:`PySeqIter_Type`." -msgstr "" +msgstr "Renvoie vrai si *op* est de type :c:data:`PySeqIter_Type`." #: ../Doc/c-api/iterator.rst:29 msgid "" @@ -52,16 +55,20 @@ msgid "" "iteration ends when the sequence raises :exc:`IndexError` for the " "subscripting operation." msgstr "" +"Renvoie un itérateur sur la séquence *seq*. L'itération prend fin lorsque la " +"séquence lève :exc:`IndexError` lors d'une tentative d'accès." #: ../Doc/c-api/iterator.rst:36 msgid "" "Type object for iterator objects returned by :c:func:`PyCallIter_New` and " "the two-argument form of the :func:`iter` built-in function." msgstr "" +"Type de l'itérateur renvoyé par les fonctions :c:func:`PyCallIter_New` et :" +"func:`iter` à deux arguments." #: ../Doc/c-api/iterator.rst:42 msgid "Return true if the type of *op* is :c:data:`PyCallIter_Type`." -msgstr "" +msgstr "Renvoie vrai si *op* est de type :c:data:`PyCallIter_Type`." #: ../Doc/c-api/iterator.rst:47 msgid "" @@ -70,3 +77,7 @@ msgid "" "should return the next item in the iteration. When *callable* returns a " "value equal to *sentinel*, the iteration will be terminated." msgstr "" +"Renvoie un nouvel itérateur. Le premier paramètre, *callable*, peut être " +"n'importe quel objet Python appelable sans aucun paramètre ; chaque appel " +"doit renvoyer l'élément suivant de l'itération. Lorsque *callable* renvoie " +"une valeur égale à *sentinel*, l'itération prend fin." diff --git a/c-api/long.po b/c-api/long.po index 09b097e67..808c8c6f8 100644 --- a/c-api/long.po +++ b/c-api/long.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-08 09:58+0100\n" +"POT-Creation-Date: 2018-03-23 09:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -126,12 +126,6 @@ msgid "" "`PyLong_FromString`." msgstr "" -#: ../Doc/c-api/long.rst:107 -msgid "" -"Deprecated since version 3.3, will be removed in version 4.0: Part of the " -"old-style Py_UNICODE API; please migrate to using PyLong_FromUnicodeObject()." -msgstr "" - #: ../Doc/c-api/long.rst:107 msgid "" "Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using :c:" @@ -169,7 +163,7 @@ msgstr "" #: ../Doc/c-api/long.rst:169 ../Doc/c-api/long.rst:183 #: ../Doc/c-api/long.rst:200 ../Doc/c-api/long.rst:262 #: ../Doc/c-api/long.rst:274 -msgid "Returns -1 on error. Use :c:func:`PyErr_Occurred` to disambiguate." +msgid "Returns ``-1`` on error. Use :c:func:`PyErr_Occurred` to disambiguate." msgstr "" #: ../Doc/c-api/long.rst:149 @@ -305,7 +299,8 @@ msgid "" msgstr "" #: ../Doc/c-api/long.rst:285 -msgid "Returns -1.0 on error. Use :c:func:`PyErr_Occurred` to disambiguate." +msgid "" +"Returns ``-1.0`` on error. Use :c:func:`PyErr_Occurred` to disambiguate." msgstr "" #: ../Doc/c-api/long.rst:290 @@ -317,5 +312,5 @@ msgid "" msgstr "" #: ../Doc/c-api/long.rst:295 -msgid "Returns NULL on error. Use :c:func:`PyErr_Occurred` to disambiguate." +msgid "Returns *NULL* on error. Use :c:func:`PyErr_Occurred` to disambiguate." msgstr "" diff --git a/c-api/mapping.po b/c-api/mapping.po index 0a656f447..842fa4659 100644 --- a/c-api/mapping.po +++ b/c-api/mapping.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-04-02 22:11+0200\n" +"POT-Creation-Date: 2018-06-10 11:27+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,67 +19,89 @@ msgstr "" #: ../Doc/c-api/mapping.rst:6 msgid "Mapping Protocol" +msgstr "Protocole de correspondance" + +#: ../Doc/c-api/mapping.rst:8 +msgid "" +"See also :c:func:`PyObject_GetItem`, :c:func:`PyObject_SetItem` and :c:func:" +"`PyObject_DelItem`." msgstr "" +"Voir aussi :c:func:`PyObject_GetItem`, :c:func:`PyObject_SetItem` et :c:func:" +"`PyObject_DelItem`." -#: ../Doc/c-api/mapping.rst:11 +#: ../Doc/c-api/mapping.rst:14 msgid "" -"Return ``1`` if the object provides mapping protocol, and ``0`` otherwise. " -"This function always succeeds." +"Return ``1`` if the object provides mapping protocol or supports slicing, " +"and ``0`` otherwise. Note that it returns ``1`` for Python classes with a :" +"meth:`__getitem__` method since in general case it is impossible to " +"determine what the type of keys it supports. This function always succeeds." msgstr "" -#: ../Doc/c-api/mapping.rst:20 +#: ../Doc/c-api/mapping.rst:26 msgid "" -"Returns the number of keys in object *o* on success, and ``-1`` on failure. " -"For objects that do not provide mapping protocol, this is equivalent to the " -"Python expression ``len(o)``." +"Returns the number of keys in object *o* on success, and ``-1`` on failure. " +"This is equivalent to the Python expression ``len(o)``." msgstr "" +"Renvoie le nombre de clefs dans l'objet *o* et ``-1`` en cas d'échec. C'est " +"l'équivalent de l'expression Python ``len(o)``." -#: ../Doc/c-api/mapping.rst:27 ../Doc/c-api/mapping.rst:33 +#: ../Doc/c-api/mapping.rst:32 msgid "" -"Remove the mapping for object *key* from the object *o*. Return ``-1`` on " -"failure. This is equivalent to the Python statement ``del o[key]``." +"Return element of *o* corresponding to the string *key* or *NULL* on " +"failure. This is the equivalent of the Python expression ``o[key]``. See " +"also :c:func:`PyObject_GetItem`." msgstr "" #: ../Doc/c-api/mapping.rst:39 msgid "" -"On success, return ``1`` if the mapping object has the key *key* and ``0`` " -"otherwise. This is equivalent to the Python expression ``key in o``. This " -"function always succeeds." +"Map the string *key* to the value *v* in object *o*. Returns ``-1`` on " +"failure. This is the equivalent of the Python statement ``o[key] = v``. See " +"also :c:func:`PyObject_SetItem`." msgstr "" #: ../Doc/c-api/mapping.rst:46 msgid "" -"Return ``1`` if the mapping object has the key *key* and ``0`` otherwise. " -"This is equivalent to the Python expression ``key in o``. This function " -"always succeeds." +"Remove the mapping for the object *key* from the object *o*. Return ``-1`` " +"on failure. This is equivalent to the Python statement ``del o[key]``. This " +"is an alias of :c:func:`PyObject_DelItem`." msgstr "" +"Supprime la correspondance associée à l'objet *key* dans l'objet *o*. " +"Renvoie ``-1`` en cas d'échec. C'est l'équivalent de la commande Python " +"``del o[key]``. C'est un alias pour :c:func:`PyObject_DelItem`." #: ../Doc/c-api/mapping.rst:53 msgid "" -"On success, return a list or tuple of the keys in object *o*. On failure, " -"return *NULL*." +"Remove the mapping for the string *key* from the object *o*. Return ``-1`` " +"on failure. This is equivalent to the Python statement ``del o[key]``." msgstr "" +"Supprime la correspondance associée à la chaîne *key* dans l'objet *o*. " +"Renvoie ``-1`` en cas d'échec. C'est l'équivalent de la commande Python " +"``del o[key]``." -#: ../Doc/c-api/mapping.rst:59 +#: ../Doc/c-api/mapping.rst:59 ../Doc/c-api/mapping.rst:66 msgid "" -"On success, return a list or tuple of the values in object *o*. On failure, " -"return *NULL*." +"Return ``1`` if the mapping object has the key *key* and ``0`` otherwise. " +"This is equivalent to the Python expression ``key in o``. This function " +"always succeeds." msgstr "" +"Renvoie ``1`` si l'objet de correspondance possède une clef *key* et ``0`` " +"sinon. C'est l'équivalent de l'expression Python ``key in o``. Cette " +"fonction ne provoque jamais d'erreur." -#: ../Doc/c-api/mapping.rst:65 +#: ../Doc/c-api/mapping.rst:73 msgid "" -"On success, return a list or tuple of the items in object *o*, where each " -"item is a tuple containing a key-value pair. On failure, return *NULL*." +"On success, return a list or tuple of the keys in object *o*. On failure, " +"return *NULL*." msgstr "" -#: ../Doc/c-api/mapping.rst:71 +#: ../Doc/c-api/mapping.rst:79 msgid "" -"Return element of *o* corresponding to the object *key* or *NULL* on " -"failure. This is the equivalent of the Python expression ``o[key]``." +"On success, return a list or tuple of the values in object *o*. On failure, " +"return *NULL*." msgstr "" -#: ../Doc/c-api/mapping.rst:77 +#: ../Doc/c-api/mapping.rst:85 msgid "" -"Map the object *key* to the value *v* in object *o*. Returns ``-1`` on " -"failure. This is the equivalent of the Python statement ``o[key] = v``." +"On success, return a list or tuple of the items in object *o*, where each " +"item is a tuple containing a key-value pair. On failure, return *NULL*." msgstr "" diff --git a/c-api/memory.po b/c-api/memory.po index cf7f44b88..6cb1d4249 100644 --- a/c-api/memory.po +++ b/c-api/memory.po @@ -23,7 +23,7 @@ msgstr "" #: ../Doc/c-api/memory.rst:17 msgid "Overview" -msgstr "" +msgstr "Aperçu" #: ../Doc/c-api/memory.rst:19 msgid "" @@ -384,7 +384,7 @@ msgstr "" #: ../Doc/c-api/memory.rst:340 ../Doc/c-api/memory.rst:477 msgid "Field" -msgstr "" +msgstr "Champ" #: ../Doc/c-api/memory.rst:340 ../Doc/c-api/memory.rst:477 msgid "Meaning" diff --git a/c-api/memoryview.po b/c-api/memoryview.po index f5d49afc2..c65d36aa5 100644 --- a/c-api/memoryview.po +++ b/c-api/memoryview.po @@ -27,6 +27,9 @@ msgid "" "` as a Python object which can then be passed around like any " "other object." msgstr "" +"Un objet Python :class:`memoryview` expose le :ref:`protocole tampon " +"` du C. Cet objet peut ensuite être passé comme n'importe " +"quel objet." #: ../Doc/c-api/memoryview.rst:18 msgid "" @@ -35,12 +38,18 @@ msgid "" "will be read/write, otherwise it may be either read-only or read/write at " "the discretion of the exporter." msgstr "" +"Crée un objet *memoryview* à partir d'un objet implémentant le protocole " +"tampon. Si *obj* permet d'exporter des tampons modifiables, l'objet " +"*memoryview* crée acceptera la lecture et écriture, sinon l'objet crée est " +"soit en lecture seule ou lecture/écriture, à la discrétion de l'*exporteur*." #: ../Doc/c-api/memoryview.rst:25 msgid "" "Create a memoryview object using *mem* as the underlying buffer. *flags* can " "be one of :c:macro:`PyBUF_READ` or :c:macro:`PyBUF_WRITE`." msgstr "" +"Crée un objet *memoryview* utilisant *mem* comme un tampon sous-jacent. " +"*flags* peut être :c:macro:`PyBUF_READ` ou :c:macro:`PyBUF_WRITE`." #: ../Doc/c-api/memoryview.rst:32 msgid "" @@ -48,6 +57,8 @@ msgid "" "simple byte buffers, :c:func:`PyMemoryView_FromMemory` is the preferred " "function." msgstr "" +"Crée un objet *memoryview* à partir de la structure tampon *view*. Pour de " +"simples tampons d'octets, :c:func:`PyMemoryView_FromMemory` est préférée." #: ../Doc/c-api/memoryview.rst:38 msgid "" @@ -57,6 +68,11 @@ msgid "" "original memory. Otherwise, a copy is made and the memoryview points to a " "new bytes object." msgstr "" +"Crée un objet *memoryview* vers un segment de mémoire :term:`contiguous` " +"(organisé comme en ``'C'`` ou comme en ``'F'`` pour Fortran) à partir d'un " +"objet qui expose le protocole tampon. Si la mémoire est contiguë, l'objet " +"*memoryview* pointe vers la mémoire d'origine. Sinon une copie est faite et " +"la *memoryview* pointe vers un nouvel objet *bytes*." #: ../Doc/c-api/memoryview.rst:47 msgid "" @@ -70,6 +86,10 @@ msgid "" "*mview* **must** be a memoryview instance; this macro doesn't check its " "type, you must do it yourself or you will risk crashes." msgstr "" +"Retourne un pointeur vers la copie privée du tampon de l'*exporteur* de " +"*memoryview*. *mview* **doit** être une instance de *memoryview*; cette " +"macro ne vérifie pas le type, vous devez le faire vous-même sinon vous " +"pourriez subir un crash." #: ../Doc/c-api/memoryview.rst:59 msgid "" diff --git a/c-api/method.po b/c-api/method.po index 6bd99c55b..87eb49451 100644 --- a/c-api/method.po +++ b/c-api/method.po @@ -59,7 +59,7 @@ msgstr "" #: ../Doc/c-api/method.rst:47 msgid "Method Objects" -msgstr "Les objets méthode" +msgstr "Objets méthode" #: ../Doc/c-api/method.rst:51 msgid "" diff --git a/c-api/module.po b/c-api/module.po index e89ad7bea..2ab3f3988 100644 --- a/c-api/module.po +++ b/c-api/module.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-01 13:21+0200\n" +"POT-Creation-Date: 2018-03-23 09:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -211,64 +211,70 @@ msgstr "" #: ../Doc/c-api/module.rst:198 msgid "" "A traversal function to call during GC traversal of the module object, or " -"*NULL* if not needed." +"*NULL* if not needed. This function may be called before module state is " +"allocated (:c:func:`PyModule_GetState()` may return `NULL`), and before the :" +"c:member:`Py_mod_exec` function is executed." msgstr "" -#: ../Doc/c-api/module.rst:203 +#: ../Doc/c-api/module.rst:205 msgid "" "A clear function to call during GC clearing of the module object, or *NULL* " -"if not needed." +"if not needed. This function may be called before module state is allocated " +"(:c:func:`PyModule_GetState()` may return `NULL`), and before the :c:member:" +"`Py_mod_exec` function is executed." msgstr "" -#: ../Doc/c-api/module.rst:208 +#: ../Doc/c-api/module.rst:212 msgid "" "A function to call during deallocation of the module object, or *NULL* if " -"not needed." +"not needed. This function may be called before module state is allocated (:c:" +"func:`PyModule_GetState()` may return `NULL`), and before the :c:member:" +"`Py_mod_exec` function is executed." msgstr "" -#: ../Doc/c-api/module.rst:212 +#: ../Doc/c-api/module.rst:218 msgid "Single-phase initialization" msgstr "" -#: ../Doc/c-api/module.rst:214 +#: ../Doc/c-api/module.rst:220 msgid "" "The module initialization function may create and return the module object " "directly. This is referred to as \"single-phase initialization\", and uses " "one of the following two module creation functions:" msgstr "" -#: ../Doc/c-api/module.rst:220 +#: ../Doc/c-api/module.rst:226 msgid "" "Create a new module object, given the definition in *def*. This behaves " "like :c:func:`PyModule_Create2` with *module_api_version* set to :const:" "`PYTHON_API_VERSION`." msgstr "" -#: ../Doc/c-api/module.rst:227 +#: ../Doc/c-api/module.rst:233 msgid "" "Create a new module object, given the definition in *def*, assuming the API " "version *module_api_version*. If that version does not match the version of " "the running interpreter, a :exc:`RuntimeWarning` is emitted." msgstr "" -#: ../Doc/c-api/module.rst:233 +#: ../Doc/c-api/module.rst:239 msgid "" "Most uses of this function should be using :c:func:`PyModule_Create` " "instead; only use this if you are sure you need it." msgstr "" -#: ../Doc/c-api/module.rst:236 +#: ../Doc/c-api/module.rst:242 msgid "" "Before it is returned from in the initialization function, the resulting " "module object is typically populated using functions like :c:func:" "`PyModule_AddObject`." msgstr "" -#: ../Doc/c-api/module.rst:242 +#: ../Doc/c-api/module.rst:248 msgid "Multi-phase initialization" msgstr "" -#: ../Doc/c-api/module.rst:244 +#: ../Doc/c-api/module.rst:250 msgid "" "An alternate way to specify extensions is to request \"multi-phase " "initialization\". Extension modules created this way behave more like Python " @@ -278,7 +284,7 @@ msgid "" "methods of classes." msgstr "" -#: ../Doc/c-api/module.rst:251 +#: ../Doc/c-api/module.rst:257 msgid "" "Unlike modules created using single-phase initialization, these modules are " "not singletons: if the *sys.modules* entry is removed and the module is re-" @@ -291,14 +297,14 @@ msgid "" "or individual classes created with :c:func:`PyType_FromSpec`)." msgstr "" -#: ../Doc/c-api/module.rst:261 +#: ../Doc/c-api/module.rst:267 msgid "" "All modules created using multi-phase initialization are expected to " "support :ref:`sub-interpreters `. Making sure " "multiple modules are independent is typically enough to achieve this." msgstr "" -#: ../Doc/c-api/module.rst:265 +#: ../Doc/c-api/module.rst:271 msgid "" "To request multi-phase initialization, the initialization function " "(PyInit_modulename) returns a :c:type:`PyModuleDef` instance with non-empty :" @@ -306,65 +312,65 @@ msgid "" "instance must be initialized with the following function:" msgstr "" -#: ../Doc/c-api/module.rst:272 +#: ../Doc/c-api/module.rst:278 msgid "" "Ensures a module definition is a properly initialized Python object that " "correctly reports its type and reference count." msgstr "" -#: ../Doc/c-api/module.rst:275 +#: ../Doc/c-api/module.rst:281 msgid "Returns *def* cast to ``PyObject*``, or *NULL* if an error occurred." msgstr "" -#: ../Doc/c-api/module.rst:279 +#: ../Doc/c-api/module.rst:285 msgid "" "The *m_slots* member of the module definition must point to an array of " "``PyModuleDef_Slot`` structures:" msgstr "" -#: ../Doc/c-api/module.rst:286 +#: ../Doc/c-api/module.rst:292 msgid "A slot ID, chosen from the available values explained below." msgstr "" -#: ../Doc/c-api/module.rst:290 +#: ../Doc/c-api/module.rst:296 msgid "Value of the slot, whose meaning depends on the slot ID." msgstr "" -#: ../Doc/c-api/module.rst:294 +#: ../Doc/c-api/module.rst:300 msgid "The *m_slots* array must be terminated by a slot with id 0." msgstr "" -#: ../Doc/c-api/module.rst:296 +#: ../Doc/c-api/module.rst:302 msgid "The available slot types are:" msgstr "" -#: ../Doc/c-api/module.rst:300 +#: ../Doc/c-api/module.rst:306 msgid "" "Specifies a function that is called to create the module object itself. The " "*value* pointer of this slot must point to a function of the signature:" msgstr "" -#: ../Doc/c-api/module.rst:305 +#: ../Doc/c-api/module.rst:311 msgid "" "The function receives a :py:class:`~importlib.machinery.ModuleSpec` " "instance, as defined in :PEP:`451`, and the module definition. It should " "return a new module object, or set an error and return *NULL*." msgstr "" -#: ../Doc/c-api/module.rst:310 +#: ../Doc/c-api/module.rst:316 msgid "" "This function should be kept minimal. In particular, it should not call " "arbitrary Python code, as trying to import the same module again may result " "in an infinite loop." msgstr "" -#: ../Doc/c-api/module.rst:314 +#: ../Doc/c-api/module.rst:320 msgid "" "Multiple ``Py_mod_create`` slots may not be specified in one module " "definition." msgstr "" -#: ../Doc/c-api/module.rst:317 +#: ../Doc/c-api/module.rst:323 msgid "" "If ``Py_mod_create`` is not specified, the import machinery will create a " "normal module object using :c:func:`PyModule_New`. The name is taken from " @@ -373,7 +379,7 @@ msgid "" "through symlinks, all while sharing a single module definition." msgstr "" -#: ../Doc/c-api/module.rst:323 +#: ../Doc/c-api/module.rst:329 msgid "" "There is no requirement for the returned object to be an instance of :c:type:" "`PyModule_Type`. Any type can be used, as long as it supports setting and " @@ -383,7 +389,7 @@ msgid "" "``Py_mod_create``." msgstr "" -#: ../Doc/c-api/module.rst:332 +#: ../Doc/c-api/module.rst:338 msgid "" "Specifies a function that is called to *execute* the module. This is " "equivalent to executing the code of a Python module: typically, this " @@ -391,21 +397,21 @@ msgid "" "function is:" msgstr "" -#: ../Doc/c-api/module.rst:339 +#: ../Doc/c-api/module.rst:345 msgid "" "If multiple ``Py_mod_exec`` slots are specified, they are processed in the " "order they appear in the *m_slots* array." msgstr "" -#: ../Doc/c-api/module.rst:342 +#: ../Doc/c-api/module.rst:348 msgid "See :PEP:`489` for more details on multi-phase initialization." msgstr "" -#: ../Doc/c-api/module.rst:345 +#: ../Doc/c-api/module.rst:351 msgid "Low-level module creation functions" msgstr "" -#: ../Doc/c-api/module.rst:347 +#: ../Doc/c-api/module.rst:353 msgid "" "The following functions are called under the hood when using multi-phase " "initialization. They can be used directly, for example when creating module " @@ -413,14 +419,14 @@ msgid "" "``PyModule_ExecDef`` must be called to fully initialize a module." msgstr "" -#: ../Doc/c-api/module.rst:354 +#: ../Doc/c-api/module.rst:360 msgid "" "Create a new module object, given the definition in *module* and the " "ModuleSpec *spec*. This behaves like :c:func:`PyModule_FromDefAndSpec2` " "with *module_api_version* set to :const:`PYTHON_API_VERSION`." msgstr "" -#: ../Doc/c-api/module.rst:362 +#: ../Doc/c-api/module.rst:368 msgid "" "Create a new module object, given the definition in *module* and the " "ModuleSpec *spec*, assuming the API version *module_api_version*. If that " @@ -428,24 +434,24 @@ msgid "" "`RuntimeWarning` is emitted." msgstr "" -#: ../Doc/c-api/module.rst:369 +#: ../Doc/c-api/module.rst:375 msgid "" "Most uses of this function should be using :c:func:`PyModule_FromDefAndSpec` " "instead; only use this if you are sure you need it." msgstr "" -#: ../Doc/c-api/module.rst:376 +#: ../Doc/c-api/module.rst:382 msgid "Process any execution slots (:c:data:`Py_mod_exec`) given in *def*." msgstr "" -#: ../Doc/c-api/module.rst:382 +#: ../Doc/c-api/module.rst:388 msgid "" "Set the docstring for *module* to *docstring*. This function is called " "automatically when creating a module from ``PyModuleDef``, using either " "``PyModule_Create`` or ``PyModule_FromDefAndSpec``." msgstr "" -#: ../Doc/c-api/module.rst:391 +#: ../Doc/c-api/module.rst:397 msgid "" "Add the functions from the *NULL* terminated *functions* array to *module*. " "Refer to the :c:type:`PyMethodDef` documentation for details on individual " @@ -457,11 +463,11 @@ msgid "" "``PyModule_FromDefAndSpec``." msgstr "" -#: ../Doc/c-api/module.rst:403 +#: ../Doc/c-api/module.rst:409 msgid "Support functions" msgstr "" -#: ../Doc/c-api/module.rst:405 +#: ../Doc/c-api/module.rst:411 msgid "" "The module initialization function (if using single phase initialization) or " "a function called from a module execution slot (if using multi-phase " @@ -469,28 +475,28 @@ msgid "" "module state:" msgstr "" -#: ../Doc/c-api/module.rst:412 +#: ../Doc/c-api/module.rst:418 msgid "" "Add an object to *module* as *name*. This is a convenience function which " "can be used from the module's initialization function. This steals a " "reference to *value*. Return ``-1`` on error, ``0`` on success." msgstr "" -#: ../Doc/c-api/module.rst:418 +#: ../Doc/c-api/module.rst:424 msgid "" "Add an integer constant to *module* as *name*. This convenience function " "can be used from the module's initialization function. Return ``-1`` on " "error, ``0`` on success." msgstr "" -#: ../Doc/c-api/module.rst:425 +#: ../Doc/c-api/module.rst:431 msgid "" "Add a string constant to *module* as *name*. This convenience function can " "be used from the module's initialization function. The string *value* must " "be *NULL*-terminated. Return ``-1`` on error, ``0`` on success." msgstr "" -#: ../Doc/c-api/module.rst:432 +#: ../Doc/c-api/module.rst:438 msgid "" "Add an int constant to *module*. The name and the value are taken from " "*macro*. For example ``PyModule_AddIntMacro(module, AF_INET)`` adds the int " @@ -498,29 +504,29 @@ msgid "" "error, ``0`` on success." msgstr "" -#: ../Doc/c-api/module.rst:440 +#: ../Doc/c-api/module.rst:446 msgid "Add a string constant to *module*." msgstr "" -#: ../Doc/c-api/module.rst:444 +#: ../Doc/c-api/module.rst:450 msgid "Module lookup" msgstr "" -#: ../Doc/c-api/module.rst:446 +#: ../Doc/c-api/module.rst:452 msgid "" "Single-phase initialization creates singleton modules that can be looked up " "in the context of the current interpreter. This allows the module object to " "be retrieved later with only a reference to the module definition." msgstr "" -#: ../Doc/c-api/module.rst:450 +#: ../Doc/c-api/module.rst:456 msgid "" "These functions will not work on modules created using multi-phase " "initialization, since multiple such modules can be created from a single " "definition." msgstr "" -#: ../Doc/c-api/module.rst:455 +#: ../Doc/c-api/module.rst:461 msgid "" "Returns the module object that was created from *def* for the current " "interpreter. This method requires that the module object has been attached " @@ -529,18 +535,18 @@ msgid "" "to the interpreter state yet, it returns *NULL*." msgstr "" -#: ../Doc/c-api/module.rst:462 +#: ../Doc/c-api/module.rst:468 msgid "" "Attaches the module object passed to the function to the interpreter state. " "This allows the module object to be accessible via :c:func:" "`PyState_FindModule`." msgstr "" -#: ../Doc/c-api/module.rst:465 +#: ../Doc/c-api/module.rst:471 msgid "Only effective on modules created using single-phase initialization." msgstr "" -#: ../Doc/c-api/module.rst:471 +#: ../Doc/c-api/module.rst:477 msgid "" "Removes the module object created from *def* from the interpreter state." msgstr "" diff --git a/c-api/objbuffer.po b/c-api/objbuffer.po index 28ccb6fab..ee11f7dc2 100644 --- a/c-api/objbuffer.po +++ b/c-api/objbuffer.po @@ -30,12 +30,12 @@ msgid "" "you control over the lifetime of the resources acquired when a buffer is " "exported." msgstr "" -"Ces fonctions faisaient partie de l'API de l'ancien protocol de tampons dans " -"Python 2. Dans Python 3, ce protocole n'existe plus, mais les fonctions sont " -"toujours exposées pour simplifier le portage de code Python 2.x. Elles se " -"comportent comme une abstraction de compatibilité du :ref:`nouveau protocole " -"de tampons `, mais sans vous donner de contrôle sur la durée " -"de vie des resources acquises lorsqu'un tampon est exporté." +"Ces fonctions faisaient partie de l'API de l'ancien protocole de tampons " +"dans Python 2. Dans Python 3, ce protocole n'existe plus, mais les fonctions " +"sont toujours exposées pour simplifier le portage de code Python 2.x. Elles " +"se comportent comme une abstraction de compatibilité du :ref:`nouveau " +"protocole de tampons `, mais sans vous donner de contrôle sur " +"la durée de vie des ressources acquises lorsqu'un tampon est exporté." #: ../Doc/c-api/objbuffer.rst:15 msgid "" @@ -57,6 +57,12 @@ msgid "" "and *buffer_len* to the buffer length. Returns ``-1`` and sets a :exc:" "`TypeError` on error." msgstr "" +"Retourne un pointeur vers un emplacement de mémoire en lecture seule " +"utilisable en tant qu'entrée basée sur des caractères. L'argument *obj* doit " +"prendre en charge l'interface de tampon de caractère à segment unique. En " +"cas de succès, retourne ``0``, définit *buffer* à l'emplacement de la " +"mémoire et *buffer_len* à la longueur de la mémoire tampon. Retourne ``-1`` " +"et affecte une exception :exc:`TypeError` en cas d'erreur." #: ../Doc/c-api/objbuffer.rst:32 msgid "" @@ -66,6 +72,12 @@ msgid "" "and *buffer_len* to the buffer length. Returns ``-1`` and sets a :exc:" "`TypeError` on error." msgstr "" +"Retourne un pointeur vers un emplacement de mémoire en lecture seule " +"contenant des données arbitraires. L'argument *obj* doit prendre en charge " +"l'interface de tampon lisible à segment unique. En cas de succès, retourne " +"``0``, définit *buffer* à l'emplacement de la mémoire et *buffer_len* à la " +"longueur de la mémoire tampon. Renvoie ``-1`` et affecte l'exception :exc:" +"`TypeError` en cas d'erreur." #: ../Doc/c-api/objbuffer.rst:41 msgid "" @@ -85,5 +97,5 @@ msgstr "" "Renvoie un pointeur vers un espace mémoire dans lequel il est possible " "décrire. L'argument *obj* doit gérer l'interface *single-segment, character " "buffer*. Si tout s'est bien passé, ``0`` est renvoyé, *buffer* pointe vers " -"l'espace mémoire, et *buffer_len* vaudra la taille du buffer. Renvoie ``-1`` " +"l'espace mémoire, et *buffer_len* vaudra la taille du tampon. Renvoie ``-1`` " "et met l'exception :exc:`TypeError` en cas d'erreur." diff --git a/c-api/object.po b/c-api/object.po index 63787c2d6..67c917ab1 100644 --- a/c-api/object.po +++ b/c-api/object.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-04-02 22:11+0200\n" +"POT-Creation-Date: 2018-06-10 11:27+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,13 +19,15 @@ msgstr "" #: ../Doc/c-api/object.rst:6 msgid "Object Protocol" -msgstr "" +msgstr "Protocole Objet" #: ../Doc/c-api/object.rst:11 msgid "" "The ``NotImplemented`` singleton, used to signal that an operation is not " "implemented for the given type combination." msgstr "" +"Le singleton ``NotImplemented``, utilisé pour signaler qu'une opération " +"n'est pas implémentée pour la combinaison de types en question." #: ../Doc/c-api/object.rst:17 msgid "" @@ -33,6 +35,9 @@ msgid "" "function (that is, increment the reference count of NotImplemented and " "return it)." msgstr "" +"Traite proprement le renvoi de :c:data:`Py_NotImplemented` depuis " +"l'intérieur d'une fonction C (c'est-à-dire, incrémente le compteur de " +"référence de `NotImplemented` et le renvoie)." #: ../Doc/c-api/object.rst:24 msgid "" @@ -41,6 +46,11 @@ msgid "" "currently supported is :const:`Py_PRINT_RAW`; if given, the :func:`str` of " "the object is written instead of the :func:`repr`." msgstr "" +"Écrit un objet *o*, dans le fichier *fp*. Renvoie ``-1`` en cas d'erreur. " +"L'argument *flags* est utilisé pour permettre certaines options de rendu. La " +"seule option actuellement gérée est :const:`Py_PRINT_RAW` ; si cet argument " +"est fourni, le :func:`str` de l'objet est utilisé pour le rendu à la place " +"de :func:`repr`." #: ../Doc/c-api/object.rst:32 ../Doc/c-api/object.rst:39 msgid "" @@ -48,6 +58,9 @@ msgid "" "This is equivalent to the Python expression ``hasattr(o, attr_name)``. This " "function always succeeds." msgstr "" +"Renvoie ``1`` si *o* a l'attribut *attr_name*, et ``0`` sinon. Ceci est " +"équivalent à l'expression Python ``hasattr(o, attr_name)``. Cette fonction " +"réussit toujours." #: ../Doc/c-api/object.rst:46 msgid "" @@ -55,6 +68,9 @@ msgid "" "attribute value on success, or *NULL* on failure. This is the equivalent of " "the Python expression ``o.attr_name``." msgstr "" +"Récupère l'attribut nommé *attr_name* de l'objet *o*. Renvoie la valeur de " +"l'attribut en cas de succès, ou *NULL* en cas d'échec. Ceci est équivalent à " +"l'expression Python ``o.attr_name``." #: ../Doc/c-api/object.rst:53 msgid "" @@ -62,6 +78,9 @@ msgid "" "attribute value on success, or *NULL* on failure. This is the equivalent of " "the Python expression ``o.attr_name``." msgstr "" +"Récupère un attribut nommé *attr_name* de l'objet *o*. Renvoie la valeur de " +"l'attribut en cas de succès, ou *NULL* en cas d'échec. Ceci est équivalent à " +"l'expression Python ``o.attr_name``." #: ../Doc/c-api/object.rst:60 msgid "" @@ -72,6 +91,13 @@ msgid "" "descriptors take preference over instance attributes, while non-data " "descriptors don't. Otherwise, an :exc:`AttributeError` is raised." msgstr "" +"Accesseur d'attribut générique destiné à être mis dans le *slot* " +"``tp_getattro`` d'un objet type. Recherche un descripteur dans le " +"dictionnaire de classes du MRO de l'objet ainsi qu'un attribut dans le :attr:" +"`~object.__dict__` de l'objet (si présent). Comme défini dans :ref:" +"`descriptors`, les descripteurs de données sont prioritaires sur les " +"attributs d'instance, contrairement aux autres descripteurs. Sinon, une :exc:" +"`AttributeError` est levée." #: ../Doc/c-api/object.rst:70 ../Doc/c-api/object.rst:81 msgid "" @@ -79,18 +105,26 @@ msgid "" "value *v*. Raise an exception and return ``-1`` on failure; return ``0`` on " "success. This is the equivalent of the Python statement ``o.attr_name = v``." msgstr "" +"Définit la valeur de l'attribut nommé *attr_name*, pour l'objet *o*, à la " +"valeur *v*. Lève une exception et renvoie ``-1`` en cas d'échec ; renvoie " +"``0`` en cas de succès. Ceci est équivalent à l'instruction Python ``o." +"attr_name = v``." #: ../Doc/c-api/object.rst:75 msgid "" "If *v* is *NULL*, the attribute is deleted, however this feature is " "deprecated in favour of using :c:func:`PyObject_DelAttr`." msgstr "" +"Si *v* est *NULL*, l'attribut est supprimé. Cette fonctionnalité est " +"obsolète,nous vous conseillons d'utiliser :c:func:`PyObject_DelAttr`." #: ../Doc/c-api/object.rst:86 msgid "" "If *v* is *NULL*, the attribute is deleted, however this feature is " "deprecated in favour of using :c:func:`PyObject_DelAttrString`." msgstr "" +"Si *v* est *NULL*, l'attribut est supprimé. Cette fonctionnalité est " +"obsolète, nous vous conseillons d'utiliser :c:func:`PyObject_DelAttr`." #: ../Doc/c-api/object.rst:92 msgid "" @@ -103,24 +137,39 @@ msgid "" "returned, otherwise an :exc:`AttributeError` is raised and ``-1`` is " "returned." msgstr "" +"Accesseur et suppresseur générique d'attributs qui est fait pour être mis " +"dans le :c:member:`~PyTypeObject.tp_setattro` d'un objet type. Il cherche un " +"descripteur de données dans le dictionnaire de classes dans le MRO de " +"l'objet et, si ce descripteur est trouvé, c'est lui qui est utilisé de " +"préférence pour la suppression et la définition de l'attribut dans le " +"dictionnaire d'instance. Sinon, l'attribut est défini ou supprimé dans le :" +"attr:`~object.__dict__` de l'objet (si présent). En cas de succès, ``0`` est " +"renvoyé, sinon une :exc:`AttributeError` est levée et ``-1`` est renvoyé." #: ../Doc/c-api/object.rst:104 ../Doc/c-api/object.rst:110 msgid "" "Delete attribute named *attr_name*, for object *o*. Returns ``-1`` on " "failure. This is the equivalent of the Python statement ``del o.attr_name``." msgstr "" +"Supprime l'attribut nommé *attr_name*, pour l'objet *o*. Renvoie ``-1`` en " +"cas d'échec. Ceci est l'équivalent de l'expression Python ``del o." +"attr_name``." #: ../Doc/c-api/object.rst:116 msgid "" "A generic implementation for the getter of a ``__dict__`` descriptor. It " "creates the dictionary if necessary." msgstr "" +"Une implémentation générique de l'accesseur d'un descripteur d'un " +"``__dict__``. Crée le dictionnaire si nécessaire." #: ../Doc/c-api/object.rst:124 msgid "" "A generic implementation for the setter of a ``__dict__`` descriptor. This " "implementation does not allow the dictionary to be deleted." msgstr "" +"Une implémentation générique du mutateur d'un descripteur de ``__dict__``. " +"Cette implémentation n'autorise pas la suppression du dictionnaire." #: ../Doc/c-api/object.rst:132 msgid "" @@ -132,6 +181,13 @@ msgid "" "to *opid*. Returns the value of the comparison on success, or *NULL* on " "failure." msgstr "" +"Compare les valeurs de *o1* et *o2* en utilisant l'opération spécifiée par " +"*opid*, qui doit être :const:`Py_LT`, :const:`Py_LE`, :const:`Py_EQ`, :const:" +"`Py_NE`, :const:`Py_GT`, ou :const:`Py_GE`, correspondant à ``<``, ``<=``, " +"``==``, ``!=``, ``>``, ou ``>=`` respectivement. Ceci est l'équivalent de " +"l'expression Python ``o1 op o2``, où ``op`` est l'opérateur correspondant à " +"*opid*. Renvoie la valeur de la comparaison en cas de succès, ou *NULL* en " +"cas d'échec." #: ../Doc/c-api/object.rst:142 msgid "" @@ -143,12 +199,21 @@ msgid "" "Python expression ``o1 op o2``, where ``op`` is the operator corresponding " "to *opid*." msgstr "" +"Compare les valeurs de *o1* et *o2* en utilisant l'opération spécifiée par " +"*opid*, qui doit être :const:`Py_LT`, :const:`Py_LE`, :const:`Py_EQ`, :const:" +"`Py_NE`, :const:`Py_GT`, ou :const:`Py_GE`, correspondant à ``<``, ``<=``, " +"``==``, ``!=``, ``>``, ou ``>=`` respectivement. Renvoie ``-1`` en cas " +"d'erreur, ``0`` si le résultat est faux, et ``1`` sinon. Ceci est " +"l'équivalent de l'expression Python ``o1 op o2``, où ``op`` est l'opérateur " +"correspondant à *opid*." #: ../Doc/c-api/object.rst:151 msgid "" "If *o1* and *o2* are the same object, :c:func:`PyObject_RichCompareBool` " "will always return ``1`` for :const:`Py_EQ` and ``0`` for :const:`Py_NE`." msgstr "" +"Si *o1* et *o2* sont le même objet, :c:func:`PyObject_RichCompareBool` " +"renvoie toujours ``1`` pour :const:`Py_EQ` et ``0`` pour :const:`Py_NE`." #: ../Doc/c-api/object.rst:158 msgid "" @@ -156,12 +221,18 @@ msgid "" "representation on success, *NULL* on failure. This is the equivalent of the " "Python expression ``repr(o)``. Called by the :func:`repr` built-in function." msgstr "" +"Calcule une représentation en chaîne de caractères de l'objet *o*. Renvoie " +"la représentation en chaîne de caractères en cas de succès, *NULL* en cas " +"d'échec. Ceci est l'équivalent de l'expression Python ``repr(o)``. Appelé " +"par la fonction intégrée :func:`repr`." #: ../Doc/c-api/object.rst:162 ../Doc/c-api/object.rst:186 msgid "" "This function now includes a debug assertion to help ensure that it does not " "silently discard an active exception." msgstr "" +"Cette fonction inclut maintenant une assertion de débogage afin d'assurer " +"qu'elle ne passe pas sous silence une exception active." #: ../Doc/c-api/object.rst:170 msgid "" @@ -171,6 +242,12 @@ msgid "" "string similar to that returned by :c:func:`PyObject_Repr` in Python 2. " "Called by the :func:`ascii` built-in function." msgstr "" +"Comme :c:Func:`PyObject_Repr`, calcule une représentation en chaîne de " +"caractères de l'objet *o*, mais échappe les caractères non ASCII dans la " +"chaîne de caractères renvoyée par :c:Func:`PyObject_Repr` avec' ``\\x``, ``" +"\\u`` ou ``\\U``. Cela génère une chaîne de caractères similaire à celle " +"renvoyée par :c:func:`PyObject_Repr` en Python 2. Appelée par la fonction " +"native :func:`ascii`." #: ../Doc/c-api/object.rst:181 msgid "" @@ -179,6 +256,11 @@ msgid "" "Python expression ``str(o)``. Called by the :func:`str` built-in function " "and, therefore, by the :func:`print` function." msgstr "" +"Calcule une représentation en chaîne de caractères de l'objet *o*. Renvoie " +"la représentation en chaîne de caractères en cas de succès, *NULL* en cas " +"d'échec. Ceci est l'équivalent de l'expression Python ``str(o)``. Appelée " +"par la fonction native :func:`str`, et, par conséquent, par la fonction :" +"func:`print`." #: ../Doc/c-api/object.rst:194 msgid "" @@ -187,12 +269,19 @@ msgid "" "``bytes(o)``, when *o* is not an integer. Unlike ``bytes(o)``, a TypeError " "is raised when *o* is an integer instead of a zero-initialized bytes object." msgstr "" +"Calcule une représentation en octets de l'objet *o*. *NULL* est renvoyé en " +"cas d'échec, un objet séquence d'octets est renvoyé en cas de succès. Ceci " +"est l'équivalent de l'expression Python ``bytes(o)``, quand *o* n'est pas un " +"entier. Contrairement à ``bytes(o)``, une exception *TypeError* est levée " +"lorsque *o* est un entier au lieu d'un objet octet initialisé avec des zéros." #: ../Doc/c-api/object.rst:203 msgid "" "Return ``1`` if the class *derived* is identical to or derived from the " "class *cls*, otherwise return ``0``. In case of an error, return ``-1``." msgstr "" +"Renvoie ``1`` si la classe *derived* est identique à ou dérivée de la classe " +"*cls*, renvoie ``0`` sinon. En cas d'erreur, renvoie ``-1``." #: ../Doc/c-api/object.rst:206 ../Doc/c-api/object.rst:225 msgid "" @@ -200,6 +289,9 @@ msgid "" "The result will be ``1`` when at least one of the checks returns ``1``, " "otherwise it will be ``0``." msgstr "" +"Si *cls* est un tuple, la vérification est menée sur chaque entrée de *cls*. " +"Le résultat sera ``1`` quand au moins une des vérifications renvoie ``1``, " +"sinon ce sera ``0``." #: ../Doc/c-api/object.rst:210 msgid "" @@ -208,6 +300,10 @@ msgid "" "*derived* is a subclass of *cls* if it is a direct or indirect subclass, i." "e. contained in ``cls.__mro__``." msgstr "" +"Si *cls* a une méthode :meth:`~class.__subclasscheck__`, elle est appelée " +"pour déterminer le statut de la sous-classe comme décrit dans :pep:`3119`. " +"Sinon, *derived* est une sous-classe de *cls* si c'est une sous-classe " +"directe ou indirecte, c'est-à-dire contenue dans ``cls.__mro__``." #: ../Doc/c-api/object.rst:215 msgid "" @@ -215,12 +311,19 @@ msgid "" "class, are considered classes. However, objects can override this by having " "a :attr:`__bases__` attribute (which must be a tuple of base classes)." msgstr "" +"Normalement seulement les classes objets, c'est-à-dire les instances de :" +"class:`type` ou d'une classe dérivée, sont considérées classes. Cependant, " +"les objets peuvent surcharger cela en ayant un attribut :attr:`__bases__` " +"(qui doit être un tuple de classes de bases)." #: ../Doc/c-api/object.rst:222 msgid "" "Return ``1`` if *inst* is an instance of the class *cls* or a subclass of " "*cls*, or ``0`` if not. On error, returns ``-1`` and sets an exception." msgstr "" +"Renvoie ``1`` si *inst* est une instance de la classe *cls* ou une sous-" +"classe de *cls*, ou ``0`` sinon. En cas d'erreur, renvoie ``-1`` et " +"initialise une exception." #: ../Doc/c-api/object.rst:229 msgid "" @@ -228,12 +331,18 @@ msgid "" "determine the subclass status as described in :pep:`3119`. Otherwise, " "*inst* is an instance of *cls* if its class is a subclass of *cls*." msgstr "" +"Si *cls* a une méthode :meth:`~class.__subclasscheck__`, elle sera appelée " +"pour déterminer le statut de la sous-classe comme décrit dans :pep:`3119`. " +"Sinon, *inst* est une instance *cls* si sa classe est une sous-classe de " +"*cls*." #: ../Doc/c-api/object.rst:233 msgid "" "An instance *inst* can override what is considered its class by having a :" "attr:`__class__` attribute." msgstr "" +"Une instance *inst* peut surcharger ce qui est considéré comme sa classe en " +"ayant un attribut :attr:`__class__`." #: ../Doc/c-api/object.rst:236 msgid "" @@ -241,12 +350,17 @@ msgid "" "classes are, by having a :attr:`__bases__` attribute (which must be a tuple " "of base classes)." msgstr "" +"Un objet *cls* peut surcharger s'il est considéré comme une classe, et ce " +"que ses classes de bases sont, en ayant un attribut :attr:`__bases__` (qui " +"doit être un tuple des classes de base)." #: ../Doc/c-api/object.rst:243 msgid "" "Determine if the object *o* is callable. Return ``1`` if the object is " "callable and ``0`` otherwise. This function always succeeds." msgstr "" +"Détermine si l'objet *o* est appelable. Renvoie ``1`` si c'est le cas, et " +"``0`` sinon. Cette fonction réussit toujours." #: ../Doc/c-api/object.rst:249 msgid "" @@ -395,8 +509,8 @@ msgstr "" #: ../Doc/c-api/object.rst:398 msgid "" -"Delete the mapping for *key* from *o*. Returns ``-1`` on failure. This is " -"the equivalent of the Python statement ``del o[key]``." +"Remove the mapping for the object *key* from the object *o*. Return ``-1`` " +"on failure. This is equivalent to the Python statement ``del o[key]``." msgstr "" #: ../Doc/c-api/object.rst:404 diff --git a/c-api/reflection.po b/c-api/reflection.po index 18ff3ef9f..3ac758d98 100644 --- a/c-api/reflection.po +++ b/c-api/reflection.po @@ -19,41 +19,52 @@ msgstr "" #: ../Doc/c-api/reflection.rst:6 msgid "Reflection" -msgstr "" +msgstr "Réflexion" #: ../Doc/c-api/reflection.rst:10 msgid "" "Return a dictionary of the builtins in the current execution frame, or the " "interpreter of the thread state if no frame is currently executing." msgstr "" +"Renvoie un dictionnaire des fonctions natives de la *frame* en cours " +"d'exécution, ou si aucune *frame* n'est exécutée, les fonctions natives du " +"*thread* indiqué par le *thread state*." #: ../Doc/c-api/reflection.rst:16 msgid "" "Return a dictionary of the local variables in the current execution frame, " "or *NULL* if no frame is currently executing." msgstr "" +"Renvoie un dictionnaire des variables locales de la *frame* en cours " +"d'exécution, ou *NULL* si aucune *frame* n'est en cours d'exécution." #: ../Doc/c-api/reflection.rst:22 msgid "" "Return a dictionary of the global variables in the current execution frame, " "or *NULL* if no frame is currently executing." msgstr "" +"Renvoie un dictionnaire des variables globales de la *frame* en cours " +"d'exécution ou *NULL* si aucune *frame* n'est en cours d'exécution." #: ../Doc/c-api/reflection.rst:28 msgid "" "Return the current thread state's frame, which is *NULL* if no frame is " "currently executing." msgstr "" +"Renvoie la *frame* actuelle selon le *thread state*, qui est *NULL* si " +"aucune *frame* n'est en cours d'exécution." #: ../Doc/c-api/reflection.rst:34 msgid "Return the line number that *frame* is currently executing." -msgstr "" +msgstr "Renvoie le numéro de ligne que *frame* est en train d'exécuter" #: ../Doc/c-api/reflection.rst:39 msgid "" "Return the name of *func* if it is a function, class or instance object, " "else the name of *func*\\s type." msgstr "" +"Renvoie le nom de *func* s'il s'agit d'une fonction, d'une classe ou d'un " +"objet d'instance, sinon le nom du type de *func*" #: ../Doc/c-api/reflection.rst:45 msgid "" @@ -62,3 +73,8 @@ msgid "" "and \" object\". Concatenated with the result of :c:func:" "`PyEval_GetFuncName`, the result will be a description of *func*." msgstr "" +"Renvoie une description en chaîne de caractères, en fonction du type de " +"*func*. Les valeurs renvoyées peuvent être ``\"()\"`` pour les fonction et " +"les méthodes, ``\\\" constructor\\\"``, ``\\\" instance\\\"``, ``\\\" object" +"\\\"``. Concaténé avec le résultat de :c:func:`PyEval_GetFuncName`, le " +"résultat sera une description de *func*" diff --git a/c-api/sequence.po b/c-api/sequence.po index d5667bf17..a1d392f65 100644 --- a/c-api/sequence.po +++ b/c-api/sequence.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-04-02 22:11+0200\n" +"POT-Creation-Date: 2018-06-10 11:27+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -24,55 +24,57 @@ msgstr "" #: ../Doc/c-api/sequence.rst:11 msgid "" "Return ``1`` if the object provides sequence protocol, and ``0`` otherwise. " -"This function always succeeds." +"Note that it returns ``1`` for Python classes with a :meth:`__getitem__` " +"method unless they are :class:`dict` subclasses since in general case it is " +"impossible to determine what the type of keys it supports. This function " +"always succeeds." msgstr "" -#: ../Doc/c-api/sequence.rst:20 +#: ../Doc/c-api/sequence.rst:23 msgid "" "Returns the number of objects in sequence *o* on success, and ``-1`` on " -"failure. For objects that do not provide sequence protocol, this is " -"equivalent to the Python expression ``len(o)``." +"failure. This is equivalent to the Python expression ``len(o)``." msgstr "" -#: ../Doc/c-api/sequence.rst:27 +#: ../Doc/c-api/sequence.rst:29 msgid "" "Return the concatenation of *o1* and *o2* on success, and *NULL* on failure. " "This is the equivalent of the Python expression ``o1 + o2``." msgstr "" -#: ../Doc/c-api/sequence.rst:33 +#: ../Doc/c-api/sequence.rst:35 msgid "" "Return the result of repeating sequence object *o* *count* times, or *NULL* " "on failure. This is the equivalent of the Python expression ``o * count``." msgstr "" -#: ../Doc/c-api/sequence.rst:39 +#: ../Doc/c-api/sequence.rst:41 msgid "" "Return the concatenation of *o1* and *o2* on success, and *NULL* on failure. " "The operation is done *in-place* when *o1* supports it. This is the " "equivalent of the Python expression ``o1 += o2``." msgstr "" -#: ../Doc/c-api/sequence.rst:46 +#: ../Doc/c-api/sequence.rst:48 msgid "" "Return the result of repeating sequence object *o* *count* times, or *NULL* " "on failure. The operation is done *in-place* when *o* supports it. This is " "the equivalent of the Python expression ``o *= count``." msgstr "" -#: ../Doc/c-api/sequence.rst:53 +#: ../Doc/c-api/sequence.rst:55 msgid "" "Return the *i*\\ th element of *o*, or *NULL* on failure. This is the " "equivalent of the Python expression ``o[i]``." msgstr "" -#: ../Doc/c-api/sequence.rst:59 +#: ../Doc/c-api/sequence.rst:61 msgid "" "Return the slice of sequence object *o* between *i1* and *i2*, or *NULL* on " "failure. This is the equivalent of the Python expression ``o[i1:i2]``." msgstr "" -#: ../Doc/c-api/sequence.rst:65 +#: ../Doc/c-api/sequence.rst:67 msgid "" "Assign object *v* to the *i*\\ th element of *o*. Raise an exception and " "return ``-1`` on failure; return ``0`` on success. This is the equivalent " @@ -80,105 +82,106 @@ msgid "" "reference to *v*." msgstr "" -#: ../Doc/c-api/sequence.rst:70 +#: ../Doc/c-api/sequence.rst:72 msgid "" "If *v* is *NULL*, the element is deleted, however this feature is deprecated " "in favour of using :c:func:`PySequence_DelItem`." msgstr "" -#: ../Doc/c-api/sequence.rst:76 +#: ../Doc/c-api/sequence.rst:78 msgid "" "Delete the *i*\\ th element of object *o*. Returns ``-1`` on failure. This " "is the equivalent of the Python statement ``del o[i]``." msgstr "" -#: ../Doc/c-api/sequence.rst:82 +#: ../Doc/c-api/sequence.rst:84 msgid "" "Assign the sequence object *v* to the slice in sequence object *o* from *i1* " "to *i2*. This is the equivalent of the Python statement ``o[i1:i2] = v``." msgstr "" -#: ../Doc/c-api/sequence.rst:88 +#: ../Doc/c-api/sequence.rst:90 msgid "" "Delete the slice in sequence object *o* from *i1* to *i2*. Returns ``-1`` " "on failure. This is the equivalent of the Python statement ``del o[i1:i2]``." msgstr "" -#: ../Doc/c-api/sequence.rst:94 +#: ../Doc/c-api/sequence.rst:96 msgid "" "Return the number of occurrences of *value* in *o*, that is, return the " "number of keys for which ``o[key] == value``. On failure, return ``-1``. " "This is equivalent to the Python expression ``o.count(value)``." msgstr "" -#: ../Doc/c-api/sequence.rst:101 +#: ../Doc/c-api/sequence.rst:103 msgid "" "Determine if *o* contains *value*. If an item in *o* is equal to *value*, " "return ``1``, otherwise return ``0``. On error, return ``-1``. This is " "equivalent to the Python expression ``value in o``." msgstr "" -#: ../Doc/c-api/sequence.rst:108 +#: ../Doc/c-api/sequence.rst:110 msgid "" "Return the first index *i* for which ``o[i] == value``. On error, return " "``-1``. This is equivalent to the Python expression ``o.index(value)``." msgstr "" -#: ../Doc/c-api/sequence.rst:114 +#: ../Doc/c-api/sequence.rst:116 msgid "" "Return a list object with the same contents as the sequence or iterable *o*, " "or *NULL* on failure. The returned list is guaranteed to be new. This is " "equivalent to the Python expression ``list(o)``." msgstr "" -#: ../Doc/c-api/sequence.rst:123 +#: ../Doc/c-api/sequence.rst:125 msgid "" -"Return a tuple object with the same contents as the arbitrary sequence *o* " -"or *NULL* on failure. If *o* is a tuple, a new reference will be returned, " -"otherwise a tuple will be constructed with the appropriate contents. This " -"is equivalent to the Python expression ``tuple(o)``." +"Return a tuple object with the same contents as the sequence or iterable " +"*o*, or *NULL* on failure. If *o* is a tuple, a new reference will be " +"returned, otherwise a tuple will be constructed with the appropriate " +"contents. This is equivalent to the Python expression ``tuple(o)``." msgstr "" -#: ../Doc/c-api/sequence.rst:131 +#: ../Doc/c-api/sequence.rst:133 msgid "" -"Return the sequence *o* as a list, unless it is already a tuple or list, in " -"which case *o* is returned. Use :c:func:`PySequence_Fast_GET_ITEM` to " -"access the members of the result. Returns *NULL* on failure. If the object " -"is not a sequence, raises :exc:`TypeError` with *m* as the message text." +"Return the sequence or iterable *o* as a list, unless it is already a tuple " +"or list, in which case *o* is returned. Use :c:func:" +"`PySequence_Fast_GET_ITEM` to access the members of the result. Returns " +"*NULL* on failure. If the object is not a sequence or iterable, raises :exc:" +"`TypeError` with *m* as the message text." msgstr "" -#: ../Doc/c-api/sequence.rst:139 +#: ../Doc/c-api/sequence.rst:141 +msgid "" +"Returns the length of *o*, assuming that *o* was returned by :c:func:" +"`PySequence_Fast` and that *o* is not *NULL*. The size can also be gotten " +"by calling :c:func:`PySequence_Size` on *o*, but :c:func:" +"`PySequence_Fast_GET_SIZE` is faster because it can assume *o* is a list or " +"tuple." +msgstr "" + +#: ../Doc/c-api/sequence.rst:150 msgid "" "Return the *i*\\ th element of *o*, assuming that *o* was returned by :c:" "func:`PySequence_Fast`, *o* is not *NULL*, and that *i* is within bounds." msgstr "" -#: ../Doc/c-api/sequence.rst:145 +#: ../Doc/c-api/sequence.rst:156 msgid "" "Return the underlying array of PyObject pointers. Assumes that *o* was " "returned by :c:func:`PySequence_Fast` and *o* is not *NULL*." msgstr "" -#: ../Doc/c-api/sequence.rst:148 +#: ../Doc/c-api/sequence.rst:159 msgid "" "Note, if a list gets resized, the reallocation may relocate the items array. " "So, only use the underlying array pointer in contexts where the sequence " "cannot change." msgstr "" -#: ../Doc/c-api/sequence.rst:155 +#: ../Doc/c-api/sequence.rst:166 msgid "" "Return the *i*\\ th element of *o* or *NULL* on failure. Macro form of :c:" "func:`PySequence_GetItem` but without checking that :c:func:" "`PySequence_Check` on *o* is true and without adjustment for negative " "indices." msgstr "" - -#: ../Doc/c-api/sequence.rst:163 -msgid "" -"Returns the length of *o*, assuming that *o* was returned by :c:func:" -"`PySequence_Fast` and that *o* is not *NULL*. The size can also be gotten " -"by calling :c:func:`PySequence_Size` on *o*, but :c:func:" -"`PySequence_Fast_GET_SIZE` is faster because it can assume *o* is a list or " -"tuple." -msgstr "" diff --git a/c-api/structures.po b/c-api/structures.po index 5088c5eea..772b2aca5 100644 --- a/c-api/structures.po +++ b/c-api/structures.po @@ -135,7 +135,7 @@ msgstr "" #: ../Doc/c-api/structures.rst:129 ../Doc/c-api/structures.rst:240 #: ../Doc/c-api/structures.rst:305 msgid "Field" -msgstr "" +msgstr "Champ" #: ../Doc/c-api/structures.rst:129 ../Doc/c-api/structures.rst:240 #: ../Doc/c-api/structures.rst:305 @@ -380,7 +380,7 @@ msgstr "" #: ../Doc/c-api/structures.rst:269 msgid "float" -msgstr "float" +msgstr "*float*" #: ../Doc/c-api/structures.rst:270 msgid "T_DOUBLE" @@ -425,7 +425,7 @@ msgstr "" #: ../Doc/c-api/structures.rst:276 msgid "unsigned char" -msgstr "unsigned char" +msgstr "``unsigned char``" #: ../Doc/c-api/structures.rst:277 msgid "T_UINT" @@ -433,7 +433,7 @@ msgstr "" #: ../Doc/c-api/structures.rst:277 msgid "unsigned int" -msgstr "unsigned int" +msgstr "``unsigned int``" #: ../Doc/c-api/structures.rst:278 msgid "T_USHORT" @@ -441,7 +441,7 @@ msgstr "" #: ../Doc/c-api/structures.rst:278 msgid "unsigned short" -msgstr "unsigned short" +msgstr "``unsigned short``" #: ../Doc/c-api/structures.rst:279 msgid "T_ULONG" @@ -449,7 +449,7 @@ msgstr "" #: ../Doc/c-api/structures.rst:279 msgid "unsigned long" -msgstr "unsigned long" +msgstr "``unsigned long``" #: ../Doc/c-api/structures.rst:280 msgid "T_BOOL" @@ -469,7 +469,7 @@ msgstr "" #: ../Doc/c-api/structures.rst:282 msgid "unsigned long long" -msgstr "unsigned long long" +msgstr "``unsigned long long``" #: ../Doc/c-api/structures.rst:283 msgid "T_PYSSIZET" diff --git a/c-api/tuple.po b/c-api/tuple.po index 649d12327..b93aa6103 100644 --- a/c-api/tuple.po +++ b/c-api/tuple.po @@ -153,7 +153,7 @@ msgstr "" #: ../Doc/c-api/tuple.rst:145 ../Doc/c-api/tuple.rst:168 msgid "Field" -msgstr "" +msgstr "Champ" #: ../Doc/c-api/tuple.rst:145 ../Doc/c-api/tuple.rst:168 msgid "C Type" diff --git a/c-api/typeobj.po b/c-api/typeobj.po index 3ac89dadc..b17188191 100644 --- a/c-api/typeobj.po +++ b/c-api/typeobj.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-21 09:15+0200\n" +"POT-Creation-Date: 2018-06-10 11:27+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,7 +19,7 @@ msgstr "" #: ../Doc/c-api/typeobj.rst:6 msgid "Type Objects" -msgstr "Objets Type" +msgstr "Objets type" #: ../Doc/c-api/typeobj.rst:8 msgid "" @@ -1361,7 +1361,7 @@ msgid "" "similar name documented in the :ref:`number` section." msgstr "" -#: ../Doc/c-api/typeobj.rst:1078 ../Doc/c-api/typeobj.rst:1351 +#: ../Doc/c-api/typeobj.rst:1078 ../Doc/c-api/typeobj.rst:1365 msgid "Here is the structure definition::" msgstr "" @@ -1393,66 +1393,71 @@ msgstr "" #: ../Doc/c-api/typeobj.rst:1154 msgid "" -"This function is used by :c:func:`PyMapping_Length` and :c:func:" +"This function is used by :c:func:`PyMapping_Size` and :c:func:" "`PyObject_Size`, and has the same signature. This slot may be set to *NULL* " "if the object has no defined length." msgstr "" #: ../Doc/c-api/typeobj.rst:1160 msgid "" -"This function is used by :c:func:`PyObject_GetItem` and has the same " -"signature. This slot must be filled for the :c:func:`PyMapping_Check` " -"function to return ``1``, it can be *NULL* otherwise." +"This function is used by :c:func:`PyObject_GetItem` and :c:func:" +"`PySequence_GetSlice`, and has the same signature as :c:func:`!" +"PyObject_GetItem`. This slot must be filled for the :c:func:" +"`PyMapping_Check` function to return ``1``, it can be *NULL* otherwise." msgstr "" -#: ../Doc/c-api/typeobj.rst:1166 +#: ../Doc/c-api/typeobj.rst:1168 msgid "" -"This function is used by :c:func:`PyObject_SetItem` and :c:func:" -"`PyObject_DelItem`. It has the same signature as :c:func:" -"`PyObject_SetItem`, but *v* can also be set to *NULL* to delete an item. If " +"This function is used by :c:func:`PyObject_SetItem`, :c:func:" +"`PyObject_DelItem`, :c:func:`PyObject_SetSlice` and :c:func:" +"`PyObject_DelSlice`. It has the same signature as :c:func:`!" +"PyObject_SetItem`, but *v* can also be set to *NULL* to delete an item. If " "this slot is *NULL*, the object does not support item assignment and " "deletion." msgstr "" -#: ../Doc/c-api/typeobj.rst:1176 +#: ../Doc/c-api/typeobj.rst:1179 msgid "Sequence Object Structures" msgstr "" -#: ../Doc/c-api/typeobj.rst:1183 +#: ../Doc/c-api/typeobj.rst:1186 msgid "" "This structure holds pointers to the functions which an object uses to " "implement the sequence protocol." msgstr "" -#: ../Doc/c-api/typeobj.rst:1188 +#: ../Doc/c-api/typeobj.rst:1191 msgid "" "This function is used by :c:func:`PySequence_Size` and :c:func:" -"`PyObject_Size`, and has the same signature." +"`PyObject_Size`, and has the same signature. It is also used for handling " +"negative indices via the :c:member:`~PySequenceMethods.sq_item` and the :c:" +"member:`~PySequenceMethods.sq_ass_item` slots." msgstr "" -#: ../Doc/c-api/typeobj.rst:1193 +#: ../Doc/c-api/typeobj.rst:1198 msgid "" "This function is used by :c:func:`PySequence_Concat` and has the same " "signature. It is also used by the ``+`` operator, after trying the numeric " -"addition via the :c:member:`~PyTypeObject.tp_as_number.nb_add` slot." +"addition via the :c:member:`~PyNumberMethods.nb_add` slot." msgstr "" -#: ../Doc/c-api/typeobj.rst:1199 +#: ../Doc/c-api/typeobj.rst:1204 msgid "" "This function is used by :c:func:`PySequence_Repeat` and has the same " "signature. It is also used by the ``*`` operator, after trying numeric " -"multiplication via the :c:member:`~PyTypeObject.tp_as_number.nb_multiply` " -"slot." +"multiplication via the :c:member:`~PyNumberMethods.nb_multiply` slot." msgstr "" -#: ../Doc/c-api/typeobj.rst:1206 +#: ../Doc/c-api/typeobj.rst:1210 msgid "" "This function is used by :c:func:`PySequence_GetItem` and has the same " -"signature. This slot must be filled for the :c:func:`PySequence_Check` " -"function to return ``1``, it can be *NULL* otherwise." +"signature. It is also used by :c:func:`PyObject_GetItem`, after trying the " +"subscription via the :c:member:`~PyMappingMethods.mp_subscript` slot. This " +"slot must be filled for the :c:func:`PySequence_Check` function to return " +"``1``, it can be *NULL* otherwise." msgstr "" -#: ../Doc/c-api/typeobj.rst:1210 +#: ../Doc/c-api/typeobj.rst:1216 msgid "" "Negative indexes are handled as follows: if the :attr:`sq_length` slot is " "filled, it is called and the sequence length is used to compute a positive " @@ -1460,98 +1465,108 @@ msgid "" "the index is passed as is to the function." msgstr "" -#: ../Doc/c-api/typeobj.rst:1217 +#: ../Doc/c-api/typeobj.rst:1223 msgid "" "This function is used by :c:func:`PySequence_SetItem` and has the same " -"signature. This slot may be left to *NULL* if the object does not support " -"item assignment and deletion." +"signature. It is also used by :c:func:`PyObject_SetItem` and :c:func:" +"`PyObject_DelItem`, after trying the item assignment and deletion via the :c:" +"member:`~PyMappingMethods.mp_ass_subscript` slot. This slot may be left to " +"*NULL* if the object does not support item assignment and deletion." msgstr "" -#: ../Doc/c-api/typeobj.rst:1223 +#: ../Doc/c-api/typeobj.rst:1232 msgid "" "This function may be used by :c:func:`PySequence_Contains` and has the same " -"signature. This slot may be left to *NULL*, in this case :c:func:" -"`PySequence_Contains` simply traverses the sequence until it finds a match." +"signature. This slot may be left to *NULL*, in this case :c:func:`!" +"PySequence_Contains` simply traverses the sequence until it finds a match." msgstr "" -#: ../Doc/c-api/typeobj.rst:1230 +#: ../Doc/c-api/typeobj.rst:1239 msgid "" "This function is used by :c:func:`PySequence_InPlaceConcat` and has the same " -"signature. It should modify its first operand, and return it." +"signature. It should modify its first operand, and return it. This slot " +"may be left to *NULL*, in this case :c:func:`!PySequence_InPlaceConcat` will " +"fall back to :c:func:`PySequence_Concat`. It is also used by the augmented " +"assignment ``+=``, after trying numeric inplace addition via the :c:member:" +"`~PyNumberMethods.nb_inplace_add` slot." msgstr "" -#: ../Doc/c-api/typeobj.rst:1235 +#: ../Doc/c-api/typeobj.rst:1248 msgid "" "This function is used by :c:func:`PySequence_InPlaceRepeat` and has the same " -"signature. It should modify its first operand, and return it." +"signature. It should modify its first operand, and return it. This slot " +"may be left to *NULL*, in this case :c:func:`!PySequence_InPlaceRepeat` will " +"fall back to :c:func:`PySequence_Repeat`. It is also used by the augmented " +"assignment ``*=``, after trying numeric inplace multiplication via the :c:" +"member:`~PyNumberMethods.nb_inplace_multiply` slot." msgstr "" -#: ../Doc/c-api/typeobj.rst:1245 +#: ../Doc/c-api/typeobj.rst:1259 msgid "Buffer Object Structures" msgstr "" -#: ../Doc/c-api/typeobj.rst:1253 +#: ../Doc/c-api/typeobj.rst:1267 msgid "" "This structure holds pointers to the functions required by the :ref:`Buffer " "protocol `. The protocol defines how an exporter object can " "expose its internal data to consumer objects." msgstr "" -#: ../Doc/c-api/typeobj.rst:1259 ../Doc/c-api/typeobj.rst:1308 -#: ../Doc/c-api/typeobj.rst:1361 ../Doc/c-api/typeobj.rst:1372 -#: ../Doc/c-api/typeobj.rst:1383 +#: ../Doc/c-api/typeobj.rst:1273 ../Doc/c-api/typeobj.rst:1322 +#: ../Doc/c-api/typeobj.rst:1375 ../Doc/c-api/typeobj.rst:1386 +#: ../Doc/c-api/typeobj.rst:1397 msgid "The signature of this function is::" msgstr "" -#: ../Doc/c-api/typeobj.rst:1263 +#: ../Doc/c-api/typeobj.rst:1277 msgid "" "Handle a request to *exporter* to fill in *view* as specified by *flags*. " "Except for point (3), an implementation of this function MUST take these " "steps:" msgstr "" -#: ../Doc/c-api/typeobj.rst:1267 +#: ../Doc/c-api/typeobj.rst:1281 msgid "" "Check if the request can be met. If not, raise :c:data:`PyExc_BufferError`, " "set :c:data:`view->obj` to *NULL* and return ``-1``." msgstr "" -#: ../Doc/c-api/typeobj.rst:1270 +#: ../Doc/c-api/typeobj.rst:1284 msgid "Fill in the requested fields." msgstr "" -#: ../Doc/c-api/typeobj.rst:1272 +#: ../Doc/c-api/typeobj.rst:1286 msgid "Increment an internal counter for the number of exports." msgstr "" -#: ../Doc/c-api/typeobj.rst:1274 +#: ../Doc/c-api/typeobj.rst:1288 msgid "" "Set :c:data:`view->obj` to *exporter* and increment :c:data:`view->obj`." msgstr "" -#: ../Doc/c-api/typeobj.rst:1276 +#: ../Doc/c-api/typeobj.rst:1290 msgid "Return ``0``." msgstr "" -#: ../Doc/c-api/typeobj.rst:1278 +#: ../Doc/c-api/typeobj.rst:1292 msgid "" "If *exporter* is part of a chain or tree of buffer providers, two main " "schemes can be used:" msgstr "" -#: ../Doc/c-api/typeobj.rst:1281 +#: ../Doc/c-api/typeobj.rst:1295 msgid "" "Re-export: Each member of the tree acts as the exporting object and sets :c:" "data:`view->obj` to a new reference to itself." msgstr "" -#: ../Doc/c-api/typeobj.rst:1284 +#: ../Doc/c-api/typeobj.rst:1298 msgid "" "Redirect: The buffer request is redirected to the root object of the tree. " "Here, :c:data:`view->obj` will be a new reference to the root object." msgstr "" -#: ../Doc/c-api/typeobj.rst:1288 +#: ../Doc/c-api/typeobj.rst:1302 msgid "" "The individual fields of *view* are described in section :ref:`Buffer " "structure `, the rules how an exporter must react to " @@ -1559,7 +1574,7 @@ msgid "" "types>`." msgstr "" -#: ../Doc/c-api/typeobj.rst:1293 +#: ../Doc/c-api/typeobj.rst:1307 msgid "" "All memory pointed to in the :c:type:`Py_buffer` structure belongs to the " "exporter and must remain valid until there are no consumers left. :c:member:" @@ -1568,19 +1583,19 @@ msgid "" "internal` are read-only for the consumer." msgstr "" -#: ../Doc/c-api/typeobj.rst:1300 +#: ../Doc/c-api/typeobj.rst:1314 msgid "" ":c:func:`PyBuffer_FillInfo` provides an easy way of exposing a simple bytes " "buffer while dealing correctly with all request types." msgstr "" -#: ../Doc/c-api/typeobj.rst:1303 +#: ../Doc/c-api/typeobj.rst:1317 msgid "" ":c:func:`PyObject_GetBuffer` is the interface for the consumer that wraps " "this function." msgstr "" -#: ../Doc/c-api/typeobj.rst:1312 +#: ../Doc/c-api/typeobj.rst:1326 msgid "" "Handle a request to release the resources of the buffer. If no resources " "need to be released, :c:member:`PyBufferProcs.bf_releasebuffer` may be " @@ -1588,15 +1603,15 @@ msgid "" "these optional steps:" msgstr "" -#: ../Doc/c-api/typeobj.rst:1317 +#: ../Doc/c-api/typeobj.rst:1331 msgid "Decrement an internal counter for the number of exports." msgstr "" -#: ../Doc/c-api/typeobj.rst:1319 +#: ../Doc/c-api/typeobj.rst:1333 msgid "If the counter is ``0``, free all memory associated with *view*." msgstr "" -#: ../Doc/c-api/typeobj.rst:1321 +#: ../Doc/c-api/typeobj.rst:1335 msgid "" "The exporter MUST use the :c:member:`~Py_buffer.internal` field to keep " "track of buffer-specific resources. This field is guaranteed to remain " @@ -1604,52 +1619,52 @@ msgid "" "*view* argument." msgstr "" -#: ../Doc/c-api/typeobj.rst:1327 +#: ../Doc/c-api/typeobj.rst:1341 msgid "" "This function MUST NOT decrement :c:data:`view->obj`, since that is done " "automatically in :c:func:`PyBuffer_Release` (this scheme is useful for " "breaking reference cycles)." msgstr "" -#: ../Doc/c-api/typeobj.rst:1332 +#: ../Doc/c-api/typeobj.rst:1346 msgid "" ":c:func:`PyBuffer_Release` is the interface for the consumer that wraps this " "function." msgstr "" -#: ../Doc/c-api/typeobj.rst:1340 +#: ../Doc/c-api/typeobj.rst:1354 msgid "Async Object Structures" msgstr "" -#: ../Doc/c-api/typeobj.rst:1348 +#: ../Doc/c-api/typeobj.rst:1362 msgid "" "This structure holds pointers to the functions required to implement :term:" "`awaitable` and :term:`asynchronous iterator` objects." msgstr "" -#: ../Doc/c-api/typeobj.rst:1365 +#: ../Doc/c-api/typeobj.rst:1379 msgid "" "The returned object must be an iterator, i.e. :c:func:`PyIter_Check` must " "return ``1`` for it." msgstr "" -#: ../Doc/c-api/typeobj.rst:1368 +#: ../Doc/c-api/typeobj.rst:1382 msgid "" "This slot may be set to *NULL* if an object is not an :term:`awaitable`." msgstr "" -#: ../Doc/c-api/typeobj.rst:1376 +#: ../Doc/c-api/typeobj.rst:1390 msgid "" "Must return an :term:`awaitable` object. See :meth:`__anext__` for details." msgstr "" -#: ../Doc/c-api/typeobj.rst:1378 +#: ../Doc/c-api/typeobj.rst:1392 msgid "" "This slot may be set to *NULL* if an object does not implement asynchronous " "iteration protocol." msgstr "" -#: ../Doc/c-api/typeobj.rst:1387 +#: ../Doc/c-api/typeobj.rst:1401 msgid "" "Must return an :term:`awaitable` object. See :meth:`__anext__` for details. " "This slot may be set to *NULL*." diff --git a/c-api/unicode.po b/c-api/unicode.po index 6845990de..6825afe0b 100644 --- a/c-api/unicode.po +++ b/c-api/unicode.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-08 09:58+0100\n" +"POT-Creation-Date: 2018-03-23 09:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -210,12 +210,6 @@ msgid "" "Unicode object (not checked)." msgstr "" -#: ../Doc/c-api/unicode.rst:213 ../Doc/c-api/unicode.rst:223 -msgid "" -"Deprecated since version 3.3, will be removed in version 4.0: Part of the " -"old-style Unicode API, please migrate to using PyUnicode_GET_LENGTH()." -msgstr "" - #: ../Doc/c-api/unicode.rst:213 ../Doc/c-api/unicode.rst:223 msgid "" "Part of the old-style Unicode API, please migrate to using :c:func:" @@ -247,13 +241,6 @@ msgid "" "`PyUnicode_WRITE` or :c:func:`PyUnicode_READ`." msgstr "" -#: ../Doc/c-api/unicode.rst:245 -msgid "" -"Deprecated since version 3.3, will be removed in version 4.0: Part of the " -"old-style Unicode API, please migrate to using the PyUnicode_nBYTE_DATA() " -"family of macros." -msgstr "" - #: ../Doc/c-api/unicode.rst:245 msgid "" "Part of the old-style Unicode API, please migrate to using the :c:func:" @@ -453,7 +440,7 @@ msgstr "" #: ../Doc/c-api/unicode.rst:447 msgid "Format Characters" -msgstr "" +msgstr "Caractères de format" #: ../Doc/c-api/unicode.rst:447 msgid "Type" @@ -502,7 +489,7 @@ msgstr "" #: ../Doc/c-api/unicode.rst:457 msgid "unsigned int" -msgstr "unsigned int" +msgstr "``unsigned int``" #: ../Doc/c-api/unicode.rst:457 msgid "Exactly equivalent to ``printf(\"%u\")``." @@ -534,7 +521,7 @@ msgstr "" #: ../Doc/c-api/unicode.rst:466 msgid "unsigned long" -msgstr "unsigned long" +msgstr "``unsigned long``" #: ../Doc/c-api/unicode.rst:466 msgid "Exactly equivalent to ``printf(\"%lu\")``." @@ -566,7 +553,7 @@ msgstr "" #: ../Doc/c-api/unicode.rst:475 msgid "unsigned long long" -msgstr "unsigned long long" +msgstr "``unsigned long long``" #: ../Doc/c-api/unicode.rst:475 msgid "Exactly equivalent to ``printf(\"%llu\")``." @@ -666,7 +653,7 @@ msgstr "" #: ../Doc/c-api/unicode.rst:507 msgid "A unicode object." -msgstr "Un objet unicode." +msgstr "Un objet Unicode." #: ../Doc/c-api/unicode.rst:509 msgid ":attr:`%V`" @@ -834,10 +821,6 @@ msgstr "" msgid "Deprecated Py_UNICODE APIs" msgstr "" -#: ../Doc/c-api/unicode.rst:661 -msgid "Deprecated since version 3.3, will be removed in version 4.0." -msgstr "" - #: ../Doc/c-api/unicode.rst:662 msgid "" "These API functions are deprecated with the implementation of :pep:`393`. " @@ -1229,13 +1212,6 @@ msgid "" "*NULL* if an exception was raised by the codec." msgstr "" -#: ../Doc/c-api/unicode.rst:1022 ../Doc/c-api/unicode.rst:1273 -msgid "" -"Deprecated since version 3.3, will be removed in version 4.0: Part of the " -"old-style Py_UNICODE API; please migrate to using " -"PyUnicode_AsEncodedString()." -msgstr "" - #: ../Doc/c-api/unicode.rst:1022 ../Doc/c-api/unicode.rst:1273 msgid "" "Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using :c:" @@ -1304,13 +1280,6 @@ msgid "" "by the codec." msgstr "" -#: ../Doc/c-api/unicode.rst:1087 -msgid "" -"Deprecated since version 3.3, will be removed in version 4.0: Part of the " -"old-style Py_UNICODE API; please migrate to using PyUnicode_AsUTF8String(), " -"PyUnicode_AsUTF8AndSize() or PyUnicode_AsEncodedString()." -msgstr "" - #: ../Doc/c-api/unicode.rst:1087 msgid "" "Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using :c:" @@ -1396,13 +1365,6 @@ msgid "" "single code point." msgstr "" -#: ../Doc/c-api/unicode.rst:1160 -msgid "" -"Deprecated since version 3.3, will be removed in version 4.0: Part of the " -"old-style Py_UNICODE API; please migrate to using PyUnicode_AsUTF32String() " -"or PyUnicode_AsEncodedString()." -msgstr "" - #: ../Doc/c-api/unicode.rst:1160 msgid "" "Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using :c:" @@ -1463,13 +1425,6 @@ msgid "" "`Py_UNICODE` values is interpreted as a UCS-2 character." msgstr "" -#: ../Doc/c-api/unicode.rst:1235 -msgid "" -"Deprecated since version 3.3, will be removed in version 4.0: Part of the " -"old-style Py_UNICODE API; please migrate to using PyUnicode_AsUTF16String() " -"or PyUnicode_AsEncodedString()." -msgstr "" - #: ../Doc/c-api/unicode.rst:1235 msgid "" "Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using :c:" @@ -1541,13 +1496,6 @@ msgid "" "by the codec." msgstr "" -#: ../Doc/c-api/unicode.rst:1303 -msgid "" -"Deprecated since version 3.3, will be removed in version 4.0: Part of the " -"old-style Py_UNICODE API; please migrate to using " -"PyUnicode_AsUnicodeEscapeString()." -msgstr "" - #: ../Doc/c-api/unicode.rst:1303 msgid "" "Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using :c:" @@ -1582,13 +1530,6 @@ msgid "" "by the codec." msgstr "" -#: ../Doc/c-api/unicode.rst:1335 -msgid "" -"Deprecated since version 3.3, will be removed in version 4.0: Part of the " -"old-style Py_UNICODE API; please migrate to using " -"PyUnicode_AsRawUnicodeEscapeString() or PyUnicode_AsEncodedString()." -msgstr "" - #: ../Doc/c-api/unicode.rst:1335 msgid "" "Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using :c:" @@ -1626,13 +1567,6 @@ msgid "" "the codec." msgstr "" -#: ../Doc/c-api/unicode.rst:1367 -msgid "" -"Deprecated since version 3.3, will be removed in version 4.0: Part of the " -"old-style Py_UNICODE API; please migrate to using PyUnicode_AsLatin1String() " -"or PyUnicode_AsEncodedString()." -msgstr "" - #: ../Doc/c-api/unicode.rst:1367 msgid "" "Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using :c:" @@ -1669,13 +1603,6 @@ msgid "" "the codec." msgstr "" -#: ../Doc/c-api/unicode.rst:1399 -msgid "" -"Deprecated since version 3.3, will be removed in version 4.0: Part of the " -"old-style Py_UNICODE API; please migrate to using PyUnicode_AsASCIIString() " -"or PyUnicode_AsEncodedString()." -msgstr "" - #: ../Doc/c-api/unicode.rst:1399 msgid "" "Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using :c:" @@ -1739,13 +1666,6 @@ msgid "" "an exception was raised by the codec." msgstr "" -#: ../Doc/c-api/unicode.rst:1451 -msgid "" -"Deprecated since version 3.3, will be removed in version 4.0: Part of the " -"old-style Py_UNICODE API; please migrate to using " -"PyUnicode_AsCharmapString() or PyUnicode_AsEncodedString()." -msgstr "" - #: ../Doc/c-api/unicode.rst:1451 msgid "" "Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using :c:" @@ -1778,13 +1698,6 @@ msgid "" "Return *NULL* when an exception was raised by the codec." msgstr "" -#: ../Doc/c-api/unicode.rst:1479 -msgid "" -"Deprecated since version 3.3, will be removed in version 4.0: Part of the " -"old-style Py_UNICODE API; please migrate to using PyUnicode_Translate(). or " -"generic codec based API" -msgstr "" - #: ../Doc/c-api/unicode.rst:1479 msgid "" "Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using :c:" @@ -1839,13 +1752,6 @@ msgid "" "the codec." msgstr "" -#: ../Doc/c-api/unicode.rst:1530 -msgid "" -"Deprecated since version 3.3, will be removed in version 4.0: Part of the " -"old-style Py_UNICODE API; please migrate to using PyUnicode_AsMBCSString(), " -"PyUnicode_EncodeCodePage() or PyUnicode_AsEncodedString()." -msgstr "" - #: ../Doc/c-api/unicode.rst:1530 msgid "" "Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using :c:" diff --git a/c-api/utilities.po b/c-api/utilities.po index 79444e3b8..6de7a4e48 100644 --- a/c-api/utilities.po +++ b/c-api/utilities.po @@ -30,5 +30,5 @@ msgid "" msgstr "" "Les fonctions de ce chapitre sont utilitaires, certaines aident à rendre le " "code en C plus portable, d'autres à utiliser des modules Python depuis du C, " -"parser des arguments de fonctions, ou encore construire des valeurs Python à " -"partir de valeurs C." +"analyser des arguments de fonctions, ou encore construire des valeurs Python " +"à partir de valeurs C." diff --git a/c-api/veryhigh.po b/c-api/veryhigh.po index e854e3660..c08607347 100644 --- a/c-api/veryhigh.po +++ b/c-api/veryhigh.po @@ -375,6 +375,8 @@ msgid "" "This function now includes a debug assertion to help ensure that it does not " "silently discard an active exception." msgstr "" +"Cette fonction inclut maintenant une assertion de débogage afin d'assurer " +"qu'elle ne passe pas sous silence une exception active." #: ../Doc/c-api/veryhigh.rst:341 msgid "" diff --git a/c-api/weakref.po b/c-api/weakref.po index 4cc8773b8..4b922b618 100644 --- a/c-api/weakref.po +++ b/c-api/weakref.po @@ -19,7 +19,7 @@ msgstr "" #: ../Doc/c-api/weakref.rst:6 msgid "Weak Reference Objects" -msgstr "" +msgstr "Objets à références faibles" #: ../Doc/c-api/weakref.rst:8 msgid "" @@ -28,18 +28,22 @@ msgid "" "is a simple reference object, and the second acts as a proxy for the " "original object as much as it can." msgstr "" +"Python gère les *références faibles* comme des objets de première classe. Il " +"existe deux types d'objets spécifiques qui implémentent directement les " +"références faibles. Le premier est un objet de référence simple, et le " +"second agit autant que possible comme un mandataire vers l'objet original." #: ../Doc/c-api/weakref.rst:16 msgid "Return true if *ob* is either a reference or proxy object." -msgstr "" +msgstr "Renvoie vrai si *ob* est soit une référence, soit un objet proxy." #: ../Doc/c-api/weakref.rst:21 msgid "Return true if *ob* is a reference object." -msgstr "" +msgstr "Retourne vrai si *ob* est un objet référence." #: ../Doc/c-api/weakref.rst:26 msgid "Return true if *ob* is a proxy object." -msgstr "" +msgstr "Retourne vrai si *ob* est un objet proxy" #: ../Doc/c-api/weakref.rst:31 msgid "" @@ -52,6 +56,16 @@ msgid "" "referencable object, or if *callback* is not callable, ``None``, or *NULL*, " "this will return *NULL* and raise :exc:`TypeError`." msgstr "" +"Retourne un objet de référence faible pour l'objet *ob*. Elle renvoie " +"toujours une nouvelle référence, mais cela ne signifie pas qu'un nouvel " +"objet est créé ; un objet référence existant peut être renvoyé. Le second " +"paramètre, *callback*, peut être un objet appelable qui reçoit une " +"notification lorsque *ob* est collecté par le ramasse-miette (*garbage " +"collected* en anglais) ; il doit accepter un paramètre unique, qui est " +"l'objet référence faible lui-même. *callback* peut aussi être positionné à " +"``None`` ou à *NULL*. Si *ob* n'est pas un objet faiblement référençable, " +"ou si *callback* n'est pas appelable, ``None``` ou *NULL*, ceci retourne " +"*NULL* et lève une :exc:`TypeError`." #: ../Doc/c-api/weakref.rst:43 msgid "" @@ -64,12 +78,23 @@ msgid "" "is not a weakly-referencable object, or if *callback* is not callable, " "``None``, or *NULL*, this will return *NULL* and raise :exc:`TypeError`." msgstr "" +"Retourne un objet mandataire à référence faible pour l'objet *ob*. Ceci " +"renvoie toujours une nouvelle référence, mais ne garantit pas la création " +"d'un nouvel objet ; un objet proxy existant peut être retourné. Le second " +"paramètre, *callback*, peut être un objet appelable qui reçoit une " +"notification lorsque *ob* est collecté ; il doit accepter un seul paramètre, " +"qui sera l'objet de référence faible lui-même. *callback* peut aussi être " +"``None`` ou *NULLL*. Si *ob* n'est pas un objet faiblement référençable, ou " +"si *callback* n'est pas appelable, ``None``` ou *NULL*, ceci renvoie *NULL* " +"et lève une :exc:`TypeError`." #: ../Doc/c-api/weakref.rst:55 msgid "" "Return the referenced object from a weak reference, *ref*. If the referent " "is no longer live, returns :const:`Py_None`." msgstr "" +"Retourne l'objet référencé à partir d'une référence faible, *ref*. Si le " +"référence n'existe plus, alors l'objet renvoie :const:`Py_None`." #: ../Doc/c-api/weakref.rst:60 msgid "" @@ -77,9 +102,15 @@ msgid "" "This means that you should always call :c:func:`Py_INCREF` on the object " "except if you know that it cannot be destroyed while you are still using it." msgstr "" +"Cette fonction renvoie une **référence empruntée** à l'objet référencé. Cela " +"signifie que vous devez toujours appeler :c:func:`Py_INCREF` sur l'objet " +"sauf si vous savez qu'il ne peut pas être détruit tant que vous l'utilisez " +"encore." #: ../Doc/c-api/weakref.rst:68 msgid "" "Similar to :c:func:`PyWeakref_GetObject`, but implemented as a macro that " "does no error checking." msgstr "" +"Similaire à :c:func:`PyWeakref_GetObject`, mais implémenté comme une macro " +"qui ne vérifie pas les erreurs." diff --git a/copyright.po b/copyright.po index 7a91e1bdb..0c401a684 100644 --- a/copyright.po +++ b/copyright.po @@ -27,25 +27,25 @@ msgstr "Python et cette documentation sont :" #: ../Doc/copyright.rst:7 msgid "Copyright © 2001-2018 Python Software Foundation. All rights reserved." msgstr "" -"Copyright © 2001-2018 Python Software Foundation. Tout droits réservés." +"Copyright © 2001-2018 *Python Software Foundation*. Tout droits réservés." #: ../Doc/copyright.rst:9 msgid "Copyright © 2000 BeOpen.com. All rights reserved." -msgstr "Copyright © 2000 BeOpen.com. Tous droits réservés." +msgstr "Copyright © 2000 *BeOpen.com*. Tous droits réservés." #: ../Doc/copyright.rst:11 msgid "" "Copyright © 1995-2000 Corporation for National Research Initiatives. All " "rights reserved." msgstr "" -"Copyright © 1995-2000 Corporation for National Research Initiatives. Tous " +"Copyright © 1995-2000 *Corporation for National Research Initiatives*. Tous " "droits réservés." #: ../Doc/copyright.rst:14 msgid "" "Copyright © 1991-1995 Stichting Mathematisch Centrum. All rights reserved." msgstr "" -"Copyright © 1991-1995 Stichting Mathematisch Centrum. Tous droits réservés." +"Copyright © 1991-1995 *Stichting Mathematisch Centrum*. Tous droits réservés." #: ../Doc/copyright.rst:18 msgid "" diff --git a/distributing/index.po b/distributing/index.po index 70c7cb2fd..050b3cafa 100644 --- a/distributing/index.po +++ b/distributing/index.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-10-13 22:28+0200\n" -"PO-Revision-Date: 2018-02-15 00:34+0100\n" +"POT-Creation-Date: 2018-06-10 11:27+0200\n" +"PO-Revision-Date: 2018-06-10 15:33+0200\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: fr\n" @@ -35,7 +35,7 @@ msgid "" "supporting community of contributors and users that also make their software " "available for other Python developers to use under open source license terms." msgstr "" -"En temps que logiciel libre populaire, Python bénéficie d'une communauté " +"En tant que logiciel libre populaire, Python bénéficie d'une communauté " "active de contributeurs et d'utilisateurs qui rendent à leur tour leurs " "logiciels disponibles, sous licence libre, pour les autres développeurs " "Python." @@ -70,8 +70,8 @@ msgid "" "the distribution and installation tools provided with Python." msgstr "" "Pour les entreprises et autres institutions, gardez en tête que certaines " -"organisations ont leur propres règles sur l'utilisation et la contribution " -"au logiciel libre. Prennez ces règles en compte lorsque vous utilisez les " +"organisations ont leurs propres règles sur l'utilisation et la contribution " +"au logiciel libre. Prenez ces règles en compte lorsque vous utilisez les " "outils de distribution et d'installation fournis par Python." #: ../Doc/distributing/index.rst:32 @@ -80,13 +80,12 @@ msgstr "Vocabulaire" #: ../Doc/distributing/index.rst:34 msgid "" -"the `Python Packaging Index `__ is a public " -"repository of open source licensed packages made available for use by other " -"Python users" +"the `Python Packaging Index `__ is a public repository of " +"open source licensed packages made available for use by other Python users" msgstr "" -"le `Python Packaging Index `__ est un dépôt " -"public de paquets sous licence libre rendus disponibles par d'autres " -"utilisateurs Python" +"le `Python Packaging Index `__ est un dépôt public de " +"paquets sous licence libre rendus disponibles par d'autres utilisateurs " +"Python" #: ../Doc/distributing/index.rst:37 msgid "" @@ -135,7 +134,7 @@ msgstr "" "modifiés de :mod:`distutils` est la possibilité de déclarer des dépendances " "à d'autres paquets. C'est l'alternative actuellement recommandée car plus " "régulièrement mise à jour que :mod:`distutils` et gère mieux les standards " -"de créaction de paquets actuels, pour un large choix de version de Python." +"de création de paquets actuels, pour un large choix de version de Python." #: ../Doc/distributing/index.rst:57 msgid "" @@ -226,7 +225,7 @@ msgid "" msgstr "" "Les outils de construction de paquets et de distribution actuellement " "recommandées peuvent être installées en invoquant le module ``pip`` dans une " -"invite de commande : ::" +"invite de commande ::" #: ../Doc/distributing/index.rst:104 msgid "" @@ -251,7 +250,7 @@ msgid "" "The Python Packaging User Guide includes more details on the `currently " "recommended tools`_." msgstr "" -" Le *Python Packaging User Guide* contient plus de détails sur les `(en) " +"Le *Python Packaging User Guide* contient plus de détails sur les `(en) " "outils actuellement recommandés `_." #: ../Doc/distributing/index.rst:117 diff --git a/distutils/apiref.po b/distutils/apiref.po index 3ff493dae..99f68ba13 100644 --- a/distutils/apiref.po +++ b/distutils/apiref.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-05-27 19:40+0200\n" -"PO-Revision-Date: 2017-05-27 10:18+0200\n" +"POT-Creation-Date: 2018-06-10 11:27+0200\n" +"PO-Revision-Date: 2018-06-10 23:27+0200\n" "Last-Translator: Julien Palard \n" "Language-Team: \n" "Language: fr\n" @@ -24,6 +24,7 @@ msgstr "Référence de l'API" #: ../Doc/distutils/apiref.rst:9 msgid ":mod:`distutils.core` --- Core Distutils functionality" msgstr "" +":mod:`distutils.core` --- Fonctionnalités principales du module Distutils" #: ../Doc/distutils/apiref.rst:15 msgid "" @@ -34,8 +35,8 @@ msgid "" msgstr "" "Le module :mod:`distutils.core` est le seul module qui a besoin d'être " "installé pour utiliser Distutils. Il fournit le :func:`setup` (qui est " -"appelé par le script de setup). Il fournit indirectement les classes :class:" -"`distutils.dist.Distribution` et :class:`distutils.cmd.Command`." +"appelé par le script *setup.py*). Il fournit indirectement les classes :" +"class:`distutils.dist.Distribution` et :class:`distutils.cmd.Command`." #: ../Doc/distutils/apiref.rst:23 msgid "" @@ -50,8 +51,8 @@ msgid "" "The setup function takes a large number of arguments. These are laid out in " "the following table." msgstr "" -"La fonction setup prend un grand nombre d'arguments. Ils sont présentés dans " -"le tableau suivant." +"La fonction ``setup`` prend un grand nombre d'arguments. Ils sont présentés " +"dans le tableau suivant." #: ../Doc/distutils/apiref.rst:32 ../Doc/distutils/apiref.rst:175 msgid "argument name" @@ -134,6 +135,9 @@ msgid "" "if the maintainer is provided, distutils will use it as the author in :file:" "`PKG-INFO`" msgstr "" +"Le nom de l'actuel mainteneur, s'il est différent de l'auteur. Remarquez que " +"si *maintainer* est fourni, *distutils* l'utilise à la place de *author* " +"dans :file:`PKG-INFO`." #: ../Doc/distutils/apiref.rst:58 msgid "*maintainer_email*" @@ -166,7 +170,7 @@ msgstr "*packages*" #: ../Doc/distutils/apiref.rst:67 msgid "A list of Python packages that distutils will manipulate" -msgstr "Une liste des paquets Python que distutils va manipuler" +msgstr "Une liste des paquets Python que *distutils* va manipuler" #: ../Doc/distutils/apiref.rst:67 ../Doc/distutils/apiref.rst:70 #: ../Doc/distutils/apiref.rst:73 ../Doc/distutils/apiref.rst:90 @@ -185,7 +189,7 @@ msgstr "*py_modules*" #: ../Doc/distutils/apiref.rst:70 msgid "A list of Python modules that distutils will manipulate" -msgstr "Une liste de modules Python que distutils va manipuler" +msgstr "Une liste de modules Python que *distutils* va manipuler" #: ../Doc/distutils/apiref.rst:73 msgid "*scripts*" @@ -217,11 +221,11 @@ msgstr "Une liste de catégories pour le paquet" #: ../Doc/distutils/apiref.rst:80 msgid "" -"a list of strings; valid classifiers are listed on `PyPI `_." +"a list of strings; valid classifiers are listed on `PyPI `_." msgstr "" -"une liste des chaînes de charactères, les classifieurs valides est listés " -"sur `PyPI `_." +"une liste des chaînes de caractères, les classificateurs valides sont listés " +"sur `PyPI `_." #: ../Doc/distutils/apiref.rst:83 msgid "*distclass*" @@ -241,7 +245,7 @@ msgstr "*script_name*" #: ../Doc/distutils/apiref.rst:86 msgid "The name of the setup.py script - defaults to ``sys.argv[0]``" -msgstr "" +msgstr "Le nom du script *setup.py* . Initialisé par ``sys.argv[0]``" #: ../Doc/distutils/apiref.rst:90 msgid "*script_args*" @@ -283,6 +287,8 @@ msgstr "Méta-données descriptives, voir :pep:`314`" #: ../Doc/distutils/apiref.rst:98 ../Doc/distutils/apiref.rst:101 msgid "a list of strings or a comma-separated string" msgstr "" +"Une liste de chaînes de caractères ou une chaîne de caractère dont les " +"éléments sont séparés par des virgules." #: ../Doc/distutils/apiref.rst:101 msgid "*platforms*" @@ -294,7 +300,8 @@ msgstr "*cmdclass*" #: ../Doc/distutils/apiref.rst:103 msgid "A mapping of command names to :class:`Command` subclasses" -msgstr "Un mapping des noms de commandes et des sous-classes :class:`Command`" +msgstr "" +"Un dictionnaire des noms de commandes et des sous-classes :class:`Command`" #: ../Doc/distutils/apiref.rst:106 msgid "*data_files*" @@ -314,7 +321,7 @@ msgstr "*package_dir*" #: ../Doc/distutils/apiref.rst:109 msgid "A mapping of package to directory names" -msgstr "Un mapping des paquets et des noms de dossiers" +msgstr "Un dictionnaire des paquets et des noms de dossiers" #: ../Doc/distutils/apiref.rst:117 msgid "" @@ -324,6 +331,12 @@ msgid "" "keyword args from *script* to :func:`setup`), or the contents of the config " "files or command-line." msgstr "" +"Exécute un script d'installation dans un environnement quelque peu contrôlé, " +"et renvoie une instance :class:`distutils.dist.distribution` qui contrôle " +"l’exécution. Ceci est utile si vous avez besoin de connaître les méta-" +"données de la distribution (passées sous forme d'arguments nommés de " +"*script* à la fonction :func:`setup`), ou le contenu des fichiers de " +"configuration ou de la ligne de commande." #: ../Doc/distutils/apiref.rst:123 msgid "" @@ -439,8 +452,8 @@ msgid "" "the full name of the extension, including any packages --- ie. *not* a " "filename or pathname, but Python dotted name" msgstr "" -"le nom complet de l'extension, incluant n'importe quel paquet --- c-à-d " -"*pas* un nom de fichier ou de chemin mais un nom Python séparé par des points" +"Le nom complet de l'extension, incluant n'importe quel paquet — c-à-d *pas* " +"un nom de fichier ou de chemin mais un nom Python séparé par des points." #: ../Doc/distutils/apiref.rst:183 msgid "*sources*" @@ -455,15 +468,15 @@ msgid "" "extension." msgstr "" "listes des noms de fichier des sources, relatifs à la racine de la " -"distribution (où est placé le script setup), dans un format Unix (séparé par " -"des slashs) dans un souci de portabilité. Les fichiers de code source " -"peuvent être du C, C++, SWIG (.i), des fichiers de ressources spécifiques à " -"la plateforme ou tout autre reconnu par la commande :command:`build_ext` " -"comme source d'une extension Python" +"distribution (où est placé le script *setup.py*), dans un format Unix " +"(séparé par des slashs) dans un souci de portabilité. Les fichiers de code " +"source peuvent être du C, C++, SWIG (*.i*), des fichiers de ressources " +"spécifiques à la plateforme ou tout autre reconnu par la commande :command:" +"`build_ext` comme source d'une extension Python." #: ../Doc/distutils/apiref.rst:196 msgid "*include_dirs*" -msgstr "" +msgstr "*include_dirs*" #: ../Doc/distutils/apiref.rst:196 msgid "" @@ -484,11 +497,11 @@ msgid "" "define it without a particular value (equivalent of ``#define FOO`` in " "source or :option:`!-DFOO` on Unix C compiler command line)" msgstr "" -"liste de macros à définir ; chaque macro est définie à l'aide d'un tuple de " -"deux valeurs ``(name, value)``, où *value* correspond soit à la chaîne sur " -"laquelle la macro doit être définie, soit à ``None`` pour définir la macro " -"sur aucune valeur particulière (équivalent à ``#define FOO`` dans la source " -"ou à :option:`!-DFOO` dans la ligne de commande du compilateur C Unix." +"Liste de macros à définir ; chaque macro est définie à l'aide d'un couple " +"``(name, value)``, où *value* correspond soit à la chaîne sur laquelle la " +"macro doit être définie, soit à ``None`` pour définir la macro sur aucune " +"valeur particulière (équivalent à ``#define TRUC`` dans la source ou à :" +"option:`!-DTRUC` dans la ligne de commande du compilateur C Unix." #: ../Doc/distutils/apiref.rst:200 msgid "a list of tuples" @@ -500,37 +513,44 @@ msgstr "*undef_macros*" #: ../Doc/distutils/apiref.rst:212 msgid "list of macros to undefine explicitly" -msgstr "" +msgstr "Liste de macros à ignorer explicitement." #: ../Doc/distutils/apiref.rst:215 msgid "*library_dirs*" -msgstr "" +msgstr "*library_dirs*" #: ../Doc/distutils/apiref.rst:215 msgid "list of directories to search for C/C++ libraries at link time" msgstr "" +"Liste de répertoires à parcourir pour chercher les bibliothèques C/C++ lors " +"de la phase d'édition de liens." #: ../Doc/distutils/apiref.rst:219 msgid "*libraries*" -msgstr "" +msgstr "*libraries*" #: ../Doc/distutils/apiref.rst:219 msgid "list of library names (not filenames or paths) to link against" msgstr "" +"Liste de noms de bibliothèques à lier à la compilation. Pas de noms de " +"fichiers ou de chemin." #: ../Doc/distutils/apiref.rst:223 msgid "*runtime_library_dirs*" -msgstr "" +msgstr "*runtime_library_dirs*" #: ../Doc/distutils/apiref.rst:223 msgid "" "list of directories to search for C/C++ libraries at run time (for shared " "extensions, this is when the extension is loaded)" msgstr "" +"Liste de répertoires à parcourir pour les bibliothèques C/C++ lors de la " +"phase d'exécution. Pour les extensions partagées, c'est à ce moment que " +"l'extension est chargée. " #: ../Doc/distutils/apiref.rst:229 msgid "*extra_objects*" -msgstr "" +msgstr "*extra_objects*" #: ../Doc/distutils/apiref.rst:229 msgid "" @@ -538,10 +558,13 @@ msgid "" "static library that must be explicitly specified, binary resource files, " "etc.)" msgstr "" +"Liste des fichiers supplémentaires à lier (par exemple les fichiers d'objets " +"non explicités dans les 'sources', bibliothèque statique qui doit être " +"explicitement spécifiée, fichiers de ressources binaires, etc. )." #: ../Doc/distutils/apiref.rst:236 msgid "*extra_compile_args*" -msgstr "" +msgstr "*extra_compile_args*" #: ../Doc/distutils/apiref.rst:236 msgid "" @@ -550,10 +573,15 @@ msgid "" "line makes sense, this is typically a list of command-line arguments, but " "for other platforms it could be anything." msgstr "" +"Toute information supplémentaire spécifique à la plate-forme et au " +"compilateur à utiliser lors de la compilation des fichiers sources dans " +"'sources'. Pour les plates-formes et les compilateurs où une ligne de " +"commande a du sens, il s'agit généralement d'une liste d'arguments de ligne " +"de commande, mais pour d'autres plates-formes, cela peut être n'importe quoi." #: ../Doc/distutils/apiref.rst:247 msgid "*extra_link_args*" -msgstr "" +msgstr "*extra_link_args*" #: ../Doc/distutils/apiref.rst:247 msgid "" @@ -561,10 +589,14 @@ msgid "" "object files together to create the extension (or to create a new static " "Python interpreter). Similar interpretation as for 'extra_compile_args'." msgstr "" +"Toute information supplémentaire spécifique à la plate-forme et au " +"compilateur à utiliser lors de la liaison de fichiers objets pour créer " +"l'extension (ou pour créer un nouvel interpréteur Python statique). " +"Interprétation similaire à celle de *extra_compile_args*." #: ../Doc/distutils/apiref.rst:256 msgid "*export_symbols*" -msgstr "" +msgstr "*export_symbols*" #: ../Doc/distutils/apiref.rst:256 msgid "" @@ -572,62 +604,75 @@ msgid "" "platforms, and not generally necessary for Python extensions, which " "typically export exactly one symbol: ``init`` + extension_name." msgstr "" +"Liste des symboles à exporter à partir d'une extension partagée. N'est pas " +"utilisé sur toutes les plates-formes et n'est généralement pas nécessaire " +"pour les extensions Python, qui exportent généralement exactement un " +"symbole : ``init + nom_de_l'extension``." #: ../Doc/distutils/apiref.rst:264 msgid "*depends*" -msgstr "" +msgstr "*depends*" #: ../Doc/distutils/apiref.rst:264 msgid "list of files that the extension depends on" -msgstr "liste des fichiers dont dépend l'extension" +msgstr "Liste des fichiers dont dépend l'extension." #: ../Doc/distutils/apiref.rst:267 msgid "*language*" -msgstr "" +msgstr "*language*" #: ../Doc/distutils/apiref.rst:267 msgid "" "extension language (i.e. ``'c'``, ``'c++'``, ``'objc'``). Will be detected " "from the source extensions if not provided." msgstr "" -"langage de l'extension (par exemple ``'c'``, ``'c++'``, ``'objc'``). Il sera " +"Langage de l'extension (par exemple ``'c'``, ``'c++'``, ``'objc'``). Il sera " "détecté selon l'extension de la source s'il n'est pas précisé." #: ../Doc/distutils/apiref.rst:273 msgid "*optional*" -msgstr "*optionnel*" +msgstr "*optional*" #: ../Doc/distutils/apiref.rst:273 msgid "" "specifies that a build failure in the extension should not abort the build " "process, but simply skip the extension." msgstr "" +"Spécifie qu'un échec de compilation dans l'extension ne doit pas interrompre " +"le processus de compilation, mais simplement ignorer l'extension." #: ../Doc/distutils/apiref.rst:273 msgid "a boolean" -msgstr "" +msgstr "un booléen" #: ../Doc/distutils/apiref.rst:282 msgid "" "A :class:`Distribution` describes how to build, install and package up a " "Python software package." msgstr "" +"Une classe :class:`Distribution` décrit comment compiler, installer et " +"empaqueter un paquet logiciel Python." #: ../Doc/distutils/apiref.rst:285 msgid "" "See the :func:`setup` function for a list of keyword arguments accepted by " "the Distribution constructor. :func:`setup` creates a Distribution instance." msgstr "" +"Voir la fonction :func:`setup` pour une liste des arguments de mots-clés " +"acceptés par le constructeur *Distribution*. :func:`setup` crée une instance " +"de Distribution." #: ../Doc/distutils/apiref.rst:291 msgid "" "A :class:`Command` class (or rather, an instance of one of its subclasses) " "implement a single distutils command." msgstr "" +"Une classe :class:`Command` (ou plutôt une instance d'une de ses sous-" +"classes) implémente une commande *distutils* unique." #: ../Doc/distutils/apiref.rst:296 msgid ":mod:`distutils.ccompiler` --- CCompiler base class" -msgstr "" +msgstr ":mod:`distutils.ccompiler` — Classe de base CCompiler" #: ../Doc/distutils/apiref.rst:302 msgid "" @@ -637,6 +682,12 @@ msgid "" "options for the compiler --- macro definitions, include directories, link " "path, libraries and the like." msgstr "" +"Ce module fournit la classe de base abstraite pour les classes :class:" +"`CCompiler`. Une instance de :class:`CCompiler` peut être utilisée pour " +"toutes les étapes de compilation et de liaison nécessaires à la compilation " +"d'un projet unique. Des méthodes sont fournies pour définir des options pour " +"le compilateur --- définitions de macros, inclusion des répertoires, des " +"chemins de liens, des bibliothèques, etc." #: ../Doc/distutils/apiref.rst:308 msgid "This module provides the following functions." @@ -650,6 +701,13 @@ msgid "" "command-line options suitable for use with some compiler (depending on the " "two format strings passed in)." msgstr "" +"Génère des options de liaison pour chercher dans les répertoires des " +"bibliothèques et pour effectuer les liaisons avec des bibliothèques " +"spécifiques. *libraries* et *library_dirs* sont, respectivement, des listes " +"de noms de bibliothèques (pas de noms de fichiers !) et de répertoires à " +"rechercher. Renvoie une liste d'options de ligne de commande utilisables " +"avec certains compilateurs (en fonction des deux chaînes de format " +"transmises)." #: ../Doc/distutils/apiref.rst:322 msgid "" @@ -662,11 +720,19 @@ msgid "" "file search path (:option:`!-I`). Returns a list of command-line options " "suitable for either Unix compilers or Visual C++." msgstr "" +"Génère les options du préprocesseur C (:option:`!-D`, :option:`!-U`, :option:" +"`!-I`) utilisées par au moins deux types de compilateurs : les compilateurs " +"type Unix et Visual C++. *macros* est une liste de couples où ``(name,)`` " +"est traité comme *non définie* (:option:`!-U`); ``(name, value)`` est traité " +"comme *définie* (:option:`!-D`). *include_dirs* est la liste de noms de " +"répertoires à ajouter au chemin de recherche du fichier d'en-tête (:option:" +"`!-I`). Renvoie une liste d'options de ligne de commande pour les " +"compilateurs Unix ou Visual C+++." #: ../Doc/distutils/apiref.rst:334 msgid "Determine the default compiler to use for the given platform." msgstr "" -"Détermine le compilateur par défaut a utiliser par une plateforme donnée" +"Détermine le compilateur par défaut a utiliser par une plateforme donnée." #: ../Doc/distutils/apiref.rst:336 msgid "" @@ -674,6 +740,9 @@ msgid "" "returned by ``os.name``) and *platform* the common value returned by ``sys." "platform`` for the platform in question." msgstr "" +"*osname* doit être l'un des noms d'OS Python standard (c'est-à-dire un des " +"noms renvoyés par ``os.name``) et *platform* la valeur commune renvoyés par " +"``sys.platform`` pour la plate-forme en question." #: ../Doc/distutils/apiref.rst:340 msgid "" @@ -695,12 +764,25 @@ msgid "" "Windows, and a Microsoft compiler object under Unix---if you supply a value " "for *compiler*, *plat* is ignored." msgstr "" +"Fonction de génération produisant une instance d'une sous-classe CCompiler " +"pour la combinaison plateforme/compilateur fournie. Par défaut, *plat* est " +"le ``os.name`` (par exemple ``'posix'``, ``'nt'``), et *compiler* est le " +"compilateur par défaut pour cette plate-forme. Actuellement, seuls " +"``'posix'`` et ``'nt'`` sont gérés, et les compilateurs par défaut sont ceux " +"qui gèrent une \"interface Unix traditionnelle\" (:class:`UnixCCompiler`) et " +"Visual C++ (:class:`MSVCCompiler`). Notez qu'il est tout à fait possible de " +"demander un objet compilateur Unix sous Windows, et un objet compilateur " +"Microsoft sous Unix. Si vous fournissez une valeur pour *compiler*, *plat* " +"est ignoré." #: ../Doc/distutils/apiref.rst:362 msgid "" "Print list of available compilers (used by the :option:`!--help-compiler` " "options to :command:`build`, :command:`build_ext`, :command:`build_clib`)." msgstr "" +"Affiche la liste des compilateurs disponibles (utilisés par l'option :option:" +"`!--help-compiler` pour les commandes :command:`build`, :command:" +"`build_ext`, :command:`build_clib`)." #: ../Doc/distutils/apiref.rst:368 msgid "" @@ -708,6 +790,10 @@ msgid "" "be implemented by real compiler classes. The class also has some utility " "methods used by several compiler classes." msgstr "" +"La classe de base abstraite :class:`CCompiler` définit l'interface qui doit " +"être implémentée par des classes de compilateur concrètes. La classe " +"possède également quelques méthodes utilitaires utilisées par plusieurs " +"classes de compilateurs." #: ../Doc/distutils/apiref.rst:372 msgid "" @@ -719,6 +805,14 @@ msgid "" "individual files are treated, most of those attributes may be varied on a " "per-compilation or per-link basis." msgstr "" +"L'idée de base derrière une classe abstraite de compilateur est que chaque " +"instance peut être utilisée pour toutes les étapes de compilation/lien dans " +"la construction d'un seul projet. Ainsi, les attributs communs à toutes ces " +"étapes de compilation et de liaison (ce qui inclut les répertoires, les " +"macros à définir, les bibliothèques à relier, etc.) sont des attributs de " +"l'instance du compilateur. Pour tenir compte des variations dans la façon " +"dont chaque fichier est traité, la plupart de ces attributs peuvent être " +"modifiés en fonction de chaque compilation ou de chaque lien." #: ../Doc/distutils/apiref.rst:380 msgid "" @@ -730,12 +824,22 @@ msgid "" "subclasses directly - use the :func:`distutils.CCompiler.new_compiler` " "factory function instead." msgstr "" +"Le constructeur de chaque sous-classe crée une instance de l'objet " +"*Compiler*. Les paramètres optionnels sont *verbose* (affiche plus " +"d'information à l'exécution), *dry_run* (ne pas exécuter les étapes) et " +"*force* (tout reconstruire, indépendamment des dépendances). Tous ces " +"paramètres ont la valeur par défaut ``0`` (désactivé). Notez que vous ne " +"voulez probablement pas instancier directement la classe :class:`CCompiler` " +"ou une de ses sous-classes. Utilisez plutôt la fonction génératrice :func:" +"`distutils.CCompiler.new_compiler`." #: ../Doc/distutils/apiref.rst:387 msgid "" "The following methods allow you to manually alter compiler options for the " "instance of the Compiler class." msgstr "" +"Les méthodes suivantes vous permettent de modifier manuellement les options " +"du compilateur de l'instance de la classe *Compiler*." #: ../Doc/distutils/apiref.rst:393 msgid "" @@ -743,6 +847,10 @@ msgid "" "The compiler is instructed to search directories in the order in which they " "are supplied by successive calls to :meth:`add_include_dir`." msgstr "" +"Ajoute *dir* à la liste des répertoires qui sont recherchés pour les " +"fichiers d'en-tête. Le compilateur est chargé de rechercher les répertoires " +"dans l'ordre dans lequel ils sont fournis par des appels successifs à :meth:" +"`add_include_dir`." #: ../Doc/distutils/apiref.rst:400 msgid "" @@ -752,6 +860,12 @@ msgid "" "`set_include_dirs`. This does not affect any list of standard include " "directories that the compiler may search by default." msgstr "" +"Affecte la liste des répertoires qui seront recherchés à la valeur de *dirs* " +"(une liste de chaînes). Remplace tous les appels précédents de :meth:" +"`add_include_dir` ; les appels suivants de :meth:`add_include_dir` " +"s'ajoutent à la liste transmise par :meth:`set_include_dirs`. Ceci n'affecte " +"pas la liste des répertoires d'inclusion standard que le compilateur peut " +"rechercher par défaut." #: ../Doc/distutils/apiref.rst:409 msgid "" @@ -761,6 +875,11 @@ msgid "" "actual filename will be inferred by the linker, the compiler, or the " "compiler class (depending on the platform)." msgstr "" +"Ajoute *libname* à la liste des bibliothèques qui seront incluses dans tous " +"les liens gérés par l'objet compilateur. Notez que *libname* ne *doit pas " +"être* le nom d'un fichier contenant une bibliothèque, mais le nom de la " +"bibliothèque elle-même : le nom du fichier sera déduit par l'éditeur de " +"liens, le compilateur ou la classe de compilation (selon la plate-forme)." #: ../Doc/distutils/apiref.rst:415 msgid "" @@ -769,6 +888,11 @@ msgid "" "perfectly valid to duplicate library names; the linker will be instructed to " "link against libraries as many times as they are mentioned." msgstr "" +"L'éditeur de liens est chargé de lier les bibliothèques dans l'ordre dans " +"lequel elles sont fournies à :meth:`add_library` et/ou :meth:" +"`set_libraries`. Il est parfaitement valide de dupliquer les noms de " +"bibliothèques ; l'éditeur de liens est chargé de créer des liens avec les " +"bibliothèques autant de fois que les noms sont mentionnées." #: ../Doc/distutils/apiref.rst:423 msgid "" @@ -776,6 +900,10 @@ msgid "" "compiler object to *libnames* (a list of strings). This does not affect any " "standard system libraries that the linker may include by default." msgstr "" +"Affecte la liste des bibliothèques à inclure dans tous les liens gérés par " +"l'objet compilateur avec la valeur de *libnames* (une liste des chaînes de " +"caractères). Ceci n'affecte pas les bibliothèques système standard que " +"l'éditeur de liens peut inclure par défaut." #: ../Doc/distutils/apiref.rst:430 msgid "" @@ -784,6 +912,11 @@ msgid "" "be instructed to search for libraries in the order they are supplied to :" "meth:`add_library_dir` and/or :meth:`set_library_dirs`." msgstr "" +"Ajoute *dir* à la liste des répertoires qui seront recherchés pour les " +"bibliothèques spécifiées dans :meth:`add_library` et :meth:`set_libraries`. " +"L'éditeur de liens est chargé de rechercher les bibliothèques dans l'ordre " +"dans lequel elles sont fournies à :meth:`add_library_dir` et/ou :meth:" +"`set_library_dirs`." #: ../Doc/distutils/apiref.rst:438 msgid "" @@ -791,12 +924,18 @@ msgid "" "This does not affect any standard library search path that the linker may " "search by default." msgstr "" +"Affecte la liste des répertoires de recherche de bibliothèque avec la valeur " +"de *dirs* (une liste de chaînes de caractères). Cela n'affecte pas le " +"chemin de recherche standard de la bibliothèque que l'éditeur de liens peut " +"rechercher par défaut." #: ../Doc/distutils/apiref.rst:445 msgid "" "Add *dir* to the list of directories that will be searched for shared " "libraries at runtime." msgstr "" +"Ajoute *dir* à la liste des répertoires qui seront recherchés par les " +"bibliothèques partagées au moment de l'exécution." #: ../Doc/distutils/apiref.rst:451 msgid "" @@ -804,6 +943,10 @@ msgid "" "*dirs* (a list of strings). This does not affect any standard search path " "that the runtime linker may search by default." msgstr "" +"Affecte la liste des répertoires pour rechercher les bibliothèques partagées " +"au moment de l'exécution à la valeur de *dirs* (une liste des chaînes de " +"caractères). Ceci n'affecte aucun chemin de recherche standard que " +"l'éditeur de liens d'exécution peut rechercher par défaut." #: ../Doc/distutils/apiref.rst:458 msgid "" @@ -812,6 +955,10 @@ msgid "" "supplied, then the macro will be defined without an explicit value and the " "exact outcome depends on the compiler used." msgstr "" +"Définit une macro de préprocesseur pour toutes les compilations gérées par " +"cet objet compilateur. Le paramètre optionnel *value* doit être une chaîne " +"de caractères ; s'il n'est pas fourni, alors la macro sera définie sans " +"valeur explicite et le résultat exact dépendra du compilateur utilisé." #: ../Doc/distutils/apiref.rst:468 msgid "" @@ -822,6 +969,12 @@ msgid "" "per-compilation basis (ie. in the call to :meth:`compile`), then that takes " "precedence." msgstr "" +"Désactive une macro de préprocesseur pour toutes les compilations gérées par " +"cet objet compilateur. Si la même macro est définie par :meth:" +"`define_macro` et ensuite désactivée par un appel à :meth:`undefine_macro`, " +"le dernier appel est prioritaire (y compris en cas de redéfinitions " +"multiples). Si la macro est redéfinie/désactivée par compilation (c'est-à-" +"dire dans l'appel à :meth:`compile`), alors cet appel prévaut." #: ../Doc/distutils/apiref.rst:478 msgid "" @@ -829,6 +982,10 @@ msgid "" "named library files or the output of \"resource compilers\") to be included " "in every link driven by this compiler object." msgstr "" +"Ajoute *objet* à la liste des fichiers objets (ou analogues, tels que les " +"fichiers de bibliothèque explicitement nommés ou la sortie des " +"\"compilateurs de ressources\") à inclure dans chaque lien qui est géré par " +"ce compilateur d'objets." #: ../Doc/distutils/apiref.rst:485 msgid "" @@ -836,12 +993,19 @@ msgid "" "*objects*. This does not affect any standard object files that the linker " "may include by default (such as system libraries)." msgstr "" +"Définit la liste des fichiers objets (ou analogues) à inclure dans chaque " +"lien à la valeur de *objects*. Ceci n'affecte pas les fichiers d'objets " +"standard que l'éditeur de liens peut inclure par défaut (comme les " +"bibliothèques système)." #: ../Doc/distutils/apiref.rst:489 msgid "" "The following methods implement methods for autodetection of compiler " "options, providing some functionality similar to GNU :program:`autoconf`." msgstr "" +"Les méthodes suivantes offre des services pour l'auto-détection des options " +"du compilateur. Elles offrent des fonctionnalités similaires à celles du " +"programme GNU :program:`autoconf`." #: ../Doc/distutils/apiref.rst:495 msgid "" @@ -849,6 +1013,9 @@ msgid "" "attributes :attr:`language_map` (a dictionary), and :attr:`language_order` " "(a list) to do the job." msgstr "" +"Détecte le langage d'un fichier donné, ou d'une liste de fichiers. Utilise " +"les attributs d'instance :attr:`language_map` (un dictionnaire) et :attr:" +"`language_order` (une liste) pour faire le travail." #: ../Doc/distutils/apiref.rst:502 msgid "" @@ -857,6 +1024,11 @@ msgid "" "debugging version (if that makes sense on the current platform). Return " "``None`` if *lib* wasn't found in any of the specified directories." msgstr "" +"Recherche dans la liste des répertoires spécifiés un fichier de bibliothèque " +"statique ou partagée *lib* et renvoie le chemin complet vers ce fichier. Si " +"*debug* est vrai, recherche une version de débogage (si cela a du sens sur " +"la plate-forme actuelle). Renvoie ``None`` si *lib* n'a pas été trouvé dans " +"l'un des répertoires spécifiés." #: ../Doc/distutils/apiref.rst:510 msgid "" @@ -865,24 +1037,35 @@ msgid "" "environment by providing additional include files and paths and libraries " "and paths." msgstr "" +"Renvoie un booléen indiquant si *funcname* est pris en charge sur la plate-" +"forme courante. Les arguments optionnels peuvent être utilisés pour " +"enrichir l'environnement de compilation en fournissant des fichiers, des " +"répertoires de fichiers, des bibliothèques, des répertoires de bibliothèques " +"supplémentaires" #: ../Doc/distutils/apiref.rst:518 msgid "" "Return the compiler option to add *dir* to the list of directories searched " "for libraries." msgstr "" +"Renvoie l'option de compilation pour ajouter *dir* à la liste des " +"répertoires recherchés pour les bibliothèques." #: ../Doc/distutils/apiref.rst:524 msgid "" "Return the compiler option to add *lib* to the list of libraries linked into " "the shared library or executable." msgstr "" +"Renvoie l'option de compilation pour ajouter *lib* à la liste des " +"bibliothèques liées à la bibliothèque partagée ou à l'exécutable." #: ../Doc/distutils/apiref.rst:530 msgid "" "Return the compiler option to add *dir* to the list of directories searched " "for runtime libraries." msgstr "" +"Renvoie l'option de compilation pour ajouter *dir* à la liste des " +"répertoires recherchés par les bibliothèques d'exécution." #: ../Doc/distutils/apiref.rst:536 msgid "" @@ -891,6 +1074,11 @@ msgid "" "specified here depends on the compiler class (via the 'executables' class " "attribute), but most will have:" msgstr "" +"Définit les exécutables (et leurs options) qui seront exécutés pour " +"effectuer les différentes étapes de compilation. L'ensemble exact des " +"exécutables qui peuvent être spécifiés ici dépend de la classe du " +"compilateur (via l'attribut de classe *executables*), mais la plupart " +"utilisent :" #: ../Doc/distutils/apiref.rst:542 msgid "attribute" @@ -898,35 +1086,37 @@ msgstr "attribut" #: ../Doc/distutils/apiref.rst:544 msgid "*compiler*" -msgstr "" +msgstr "*compiler*" #: ../Doc/distutils/apiref.rst:544 msgid "the C/C++ compiler" -msgstr "" +msgstr "Le compilateur C/C++." #: ../Doc/distutils/apiref.rst:546 msgid "*linker_so*" -msgstr "" +msgstr "*linker_so*" #: ../Doc/distutils/apiref.rst:546 msgid "linker used to create shared objects and libraries" msgstr "" +"L'éditeur de liens utilisé pour la création d'objets ou de bibliothèques " +"partagées." #: ../Doc/distutils/apiref.rst:549 msgid "*linker_exe*" -msgstr "" +msgstr "*linker_exe*" #: ../Doc/distutils/apiref.rst:549 msgid "linker used to create binary executables" -msgstr "" +msgstr "L'éditeur de lien utilisé pour créer des exécutables binaires." #: ../Doc/distutils/apiref.rst:551 msgid "*archiver*" -msgstr "" +msgstr "*archiver*" #: ../Doc/distutils/apiref.rst:551 msgid "static library creator" -msgstr "" +msgstr "Créateur de bibliothèque statique." #: ../Doc/distutils/apiref.rst:554 msgid "" @@ -940,8 +1130,8 @@ msgstr "" "Windows), chacun de ces éléments est une chaîne qui sera fractionnée en un " "nom exécutable et, éventuellement, une liste d'arguments. Le fractionnement " "de la chaîne est réalisée selon la même procédure que celle appliquée par " -"les shells Unix : les mots sont délimités par des espaces, mais les " -"guillemets et les backslashs permettent de les ignorer. Voir :func:" +"les *shells* Unix : les mots sont délimités par des espaces, mais les " +"guillemets et les antislashs permettent de les ignorer. Voir :func:" "`distutils.util.split_quoted`." #: ../Doc/distutils/apiref.rst:560 @@ -967,14 +1157,13 @@ msgid "" "Depending on the implementation, not all source files will necessarily be " "compiled, but all corresponding object filenames will be returned." msgstr "" -"*sources* doit être une liste de noms de fichiers. Généralement, ce sont des " -"fichiers C/C++, mais ce peut être n'importe quoi qui peut être géré par un " -"compilateur et une classe de compilateur en particulier (par exemple, :class:" -"`MSVCCompiler` peut gérer les fichiers de ressources dans *sources*). " -"Renvoie une liste de noms de fichiers objet : un objet par nom de fichier " -"dans *sources*. Selon les cas, tous les fichiers source ne seront pas " -"forcément compilés, mais tous les noms de fichiers objet correspondants " -"seront revoyés." +"*sources* doit être une liste de noms de fichiers, généralement des fichiers " +"C/C++, mais elle pourrait contenir n'importe quel fichier géré par un " +"compilateur et une classe de compilateur (par exemple, :class:`MSVCCompiler` " +"peut gérer les fichiers de ressources dans *sources*). Renvoie une liste de " +"noms de fichiers objet : un objet par nom de fichier dans *sources*. Selon " +"les cas, tous les fichiers source ne seront pas forcément compilés, mais " +"tous les noms de fichiers objet correspondants seront renvoyés." #: ../Doc/distutils/apiref.rst:575 msgid "" @@ -983,6 +1172,11 @@ msgid "" "to :file:`foo/bar.o` (for a Unix implementation); if *output_dir* is " "*build*, then it would compile to :file:`build/foo/bar.o`." msgstr "" +"Si *output_dir* est donné, les fichiers objets seront placés à l'intérieur, " +"tout en conservant leurs chemins relatifs. Par exemple, le :file:`truc/" +"machin.c` compile normalement en :file:`truc/machin.o` (pour une " +"implémentation Unix) ; si *output_dir* a la valeur *build*, alors il " +"compilera en :file:`build/truc/machin.o`." #: ../Doc/distutils/apiref.rst:580 msgid "" @@ -992,18 +1186,30 @@ msgid "" "explicit value. The 1-tuple case undefines a macro. Later definitions/" "redefinitions/undefinitions take precedence." msgstr "" +"Le paramètre *macros*, s'il est donné, doit être une liste de définitions de " +"macros. Une définition de macro est soit un couple ``(nom, valeur)``, ou un " +"singleton ``(nom,)``. Le premier définit une macro ; si la valeur est " +"``None``, la macro est définie sans valeur explicite. L'utilisation d'un " +"singleton désactive la macro. Les définitions, redéfinitions ou " +"désactivations ultérieures priment." #: ../Doc/distutils/apiref.rst:586 msgid "" "*include_dirs*, if given, must be a list of strings, the directories to add " "to the default include file search path for this compilation only." msgstr "" +"*include_dirs* doit être une liste de chaînes de caractères contenant les " +"répertoires à ajouter au chemin de recherche par défaut pour cette " +"compilation uniquement." #: ../Doc/distutils/apiref.rst:589 msgid "" "*debug* is a boolean; if true, the compiler will be instructed to output " "debug symbols in (or alongside) the object file(s)." msgstr "" +"*debug* est un booléen ; si sa valeur est *vraie*, le compilateur est chargé " +"d'afficher les symboles de débogage dans (ou à côté) du ou des fichiers " +"objets." #: ../Doc/distutils/apiref.rst:592 msgid "" @@ -1015,6 +1221,13 @@ msgid "" "an escape hatch for those occasions when the abstract compiler framework " "doesn't cut the mustard." msgstr "" +"*extra_preargs* et *extra_postargs* dépendent de l'implémentation. Sur les " +"plates-formes qui ont une ligne de commande (par exemple Unix, DOS/Windows), " +"il s'agit très probablement de listes de chaînes de caractères. Ce sont des " +"arguments supplémentaires à ajouter avant (*preargs*) et après (*postargs*) " +"la ligne de commande du compilateur. Sur d'autres plates-formes, consultez " +"la documentation de la classe d'implémentation. Ces paramètres sont exposés " +"pour permettre de sortir du cadre de la classe abstraite en cas de nécessité." #: ../Doc/distutils/apiref.rst:599 msgid "" @@ -1023,10 +1236,14 @@ msgid "" "be recompiled. This supports dependency tracking, but only at a coarse " "granularity." msgstr "" +"*depends* est une liste de noms de fichiers dont dépendent toutes les " +"cibles. Si un fichier source est plus ancien qu'un fichier dans *depends*, " +"alors le fichier source sera recompilé. Cela permet un suivi des " +"dépendances à un niveau macro. " #: ../Doc/distutils/apiref.rst:604 msgid "Raises :exc:`CompileError` on failure." -msgstr "" +msgstr "Lève :exc:`CompileError` en cas d'échec." #: ../Doc/distutils/apiref.rst:609 msgid "" @@ -1036,6 +1253,12 @@ msgid "" "`set_link_objects`, the libraries supplied to :meth:`add_library` and/or :" "meth:`set_libraries`, and the libraries supplied as *libraries* (if any)." msgstr "" +"Relie un ensemble d'éléments pour créer un fichier de bibliothèque statique. " +"L'ensemble d'éléments se compose de la liste des fichiers d'objets fournis " +"comme *objets*, des fichiers d'objets supplémentaires fournis à :meth:" +"`add_link_object` et/ou :meth:`set_link_objects`, des bibliothèques fournies " +"à :meth:`add_library` et/ou :meth:`set_libraries` et les bibliothèques " +"fournies à *libraries* (le cas échéant)." #: ../Doc/distutils/apiref.rst:615 msgid "" @@ -1043,6 +1266,9 @@ msgid "" "be inferred from the library name. *output_dir* is the directory where the " "library file will be put." msgstr "" +"*output_libname* doit être un nom de bibliothèque et non un nom de fichier ; " +"le nom de fichier sera déduit du nom de bibliothèque. *output_dir* est le " +"répertoire dans lequel le fichier bibliothèque sera placé." #: ../Doc/distutils/apiref.rst:621 msgid "" @@ -1050,22 +1276,31 @@ msgid "" "library (note that on most platforms, it is the compile step where this " "matters: the *debug* flag is included here just for consistency)." msgstr "" +"*debug* est un booléen ; si sa valeur est *vraie*, les informations de " +"débogage seront incluses dans la bibliothèque (notez que sur la plupart des " +"plateformes, c'est à l'étape de compilation que ce paramètre est pris en " +"compte : le paramètre *debug* est inclus ici pour assurer une cohérence)." #: ../Doc/distutils/apiref.rst:625 ../Doc/distutils/apiref.rst:667 msgid "" "*target_lang* is the target language for which the given objects are being " "compiled. This allows specific linkage time treatment of certain languages." msgstr "" +"*target_lang* est le langage cible pour lequel les objets donnés sont " +"compilés. Cela permet un traitement spécifique du temps de liaison dans " +"certains langages." #: ../Doc/distutils/apiref.rst:628 msgid "Raises :exc:`LibError` on failure." -msgstr "" +msgstr "Lève :exc:`LibError` en cas d'échec." #: ../Doc/distutils/apiref.rst:633 msgid "" "Link a bunch of stuff together to create an executable or shared library " "file." msgstr "" +"Relie un ensemble d'éléments pour créer un fichier exécutable ou une " +"bibliothèque partagée." #: ../Doc/distutils/apiref.rst:635 msgid "" @@ -1074,6 +1309,10 @@ msgid "" "supplied, *output_filename* is relative to it (i.e. *output_filename* can " "provide directory components if needed)." msgstr "" +"L'ensemble d'éléments se compose de la liste des fichiers objets fournis " +"comme *objets*. *output_filename* devrait être un nom de fichier. Si " +"*output_dir* est fourni, *output_filename* lui est relatif (c'est-à-dire que " +"*output_filename* peut être un chemin vers un fichier )." #: ../Doc/distutils/apiref.rst:640 msgid "" @@ -1084,6 +1323,13 @@ msgid "" "means the linker will look in that specific directory rather than searching " "all the normal locations." msgstr "" +"*libraries* est une liste de bibliothèques avec lesquelles il est possible " +"d'établir des liens. Ce sont des noms de bibliothèques, pas des noms de " +"fichiers, puisqu'ils sont traduits en noms de fichiers d'une manière " +"spécifique à la plate-forme (par exemple *truc* devient :file:`libtruc.a` " +"sous Unix et :file:`truc.lib` sous DOS/Windows). Cependant, ils peuvent " +"inclure un chemin, ce qui signifie que l'éditeur de liens cherchera dans ce " +"chemin spécifique plutôt que de rechercher tous les emplacements standard." #: ../Doc/distutils/apiref.rst:647 msgid "" @@ -1095,12 +1341,23 @@ msgid "" "the shared library and used to search for other shared libraries that \\*it" "\\* depends on at run-time. (This may only be relevant on Unix.)" msgstr "" +"*library_dirs*, s'il est fourni, doit être une liste de répertoires à " +"rechercher pour les bibliothèques qui ont été spécifiées comme des " +"bibliothèques pures (c'est-à-dire sans aucun répertoire). Celles-ci " +"s'ajoutent aux valeurs par défaut du système et à celles fournies à :meth:" +"`add_library_dir` et/ou :meth:`set_library_dirs`. *runtime_library_dirs* " +"est une liste de répertoires qui seront intégrés dans la bibliothèque " +"partagée et utilisés pour rechercher d'autres bibliothèques partagées dont " +"elle dépend à l'exécution. (Ceci est probablement valable uniquement sous " +"UNIX.)" #: ../Doc/distutils/apiref.rst:655 msgid "" "*export_symbols* is a list of symbols that the shared library will export. " "(This appears to be relevant only on Windows.)" msgstr "" +"*export_symbols* est une liste de symboles que la bibliothèque partagée va " +"exporter. (Ceci est probablement valable uniquement sous Window.)" #: ../Doc/distutils/apiref.rst:658 msgid "" @@ -1109,6 +1366,10 @@ msgid "" "to :meth:`create_static_lib`, which includes a *debug* flag mostly for " "form's sake)." msgstr "" +"*debug* s'utilise comme pour :meth:`compile` et :meth:`create_static_lib`, " +"avec la nuance qu'elle a ici une importance sur la plupart des plateformes " +"(par opposition à :meth:`create_static_lib` qui inclut une option *debug* " +"pour se conformer à l'interface)." #: ../Doc/distutils/apiref.rst:663 msgid "" @@ -1116,10 +1377,13 @@ msgid "" "course that they supply command-line arguments for the particular linker " "being used)." msgstr "" +"*extra_preargs* et *extra_postargs* s'utilisent comme pour :meth:`compile` " +"(sauf bien sûr qu'ils fournissent des arguments à la ligne de commande pour " +"l'éditeur de liens spécifique utilisé)." #: ../Doc/distutils/apiref.rst:670 msgid "Raises :exc:`LinkError` on failure." -msgstr "" +msgstr "Lève :exc:`LinkError` en cas d'échec." #: ../Doc/distutils/apiref.rst:675 msgid "" @@ -1127,6 +1391,9 @@ msgid "" "while *objects* are a list of object filenames to link in. Other arguments " "are as for the :meth:`link` method." msgstr "" +"Lie un exécutable. *output_progname* est le nom de l'exécutable du fichier, " +"tandis que *objects* est une liste de noms de fichiers objets à lier. Les " +"autres arguments sont les mêmes que pour la méthode :meth:`link`." #: ../Doc/distutils/apiref.rst:682 msgid "" @@ -1134,6 +1401,10 @@ msgid "" "while *objects* is a list of object filenames to link in. Other arguments " "are as for the :meth:`link` method." msgstr "" +"Lie une bibliothèque partagée. *output_libname* est le nom de la " +"bibliothèque de sortie, tandis que *objects* est une liste de noms de " +"fichiers d'objets à lier. Les autres arguments sont les mêmes que pour la " +"méthode :meth:`link`." #: ../Doc/distutils/apiref.rst:689 msgid "" @@ -1141,6 +1412,9 @@ msgid "" "that will be created, while *objects* is a list of object filenames to link " "in. Other arguments are as for the :meth:`link` method." msgstr "" +"Lie un objet partagé. *output_filename* est le nom de l'objet partagé qui " +"sera créé, tandis que *objects* est une liste de noms de fichiers d'objets à " +"lier. Les autres arguments sont les mêmes que pour la méthode :meth:`link`." #: ../Doc/distutils/apiref.rst:696 msgid "" @@ -1151,16 +1425,25 @@ msgid "" "`undefine_macro`. *include_dirs* is a list of directory names that will be " "added to the default list, in the same way as :meth:`add_include_dir`." msgstr "" +"Prétraitement d'un seul fichier source C/C++, désigné dans *source*. La " +"sortie du traitement est écrite dans un fichier nommé *output_file*, ou dans " +"*stdout* si *output_file* n'est pas fourni. *macros* est une liste de " +"définitions de macros comme pour :meth:`compile`, qui vont s'ajouter aux " +"macros définies avec :meth:`define_macro` et :meth:`undefine_macro`. " +"*include_dirs* est une liste de noms de répertoires qui seront ajoutés à la " +"liste par défaut, de la même manière que :meth:`add_include_dir`." #: ../Doc/distutils/apiref.rst:703 msgid "Raises :exc:`PreprocessError` on failure." -msgstr "" +msgstr "Lève :exc:`PreprocessError` en cas d'échec." #: ../Doc/distutils/apiref.rst:705 msgid "" "The following utility methods are defined by the :class:`CCompiler` class, " "for use by the various concrete subclasses." msgstr "" +"Les méthodes utilitaires suivantes sont définies par la classe :class:" +"`CCompiler`, à l'usage des différentes sous-classes concrètes." #: ../Doc/distutils/apiref.rst:711 msgid "" @@ -1168,6 +1451,9 @@ msgid "" "for non-Windows platforms this is the same as the basename, while Windows " "will get a :file:`.exe` added." msgstr "" +"Renvoie le nom de fichier de l'exécutable pour un *nom de base* donné. " +"Généralement, pour les plates-formes non Windows, c'est le même nom que le " +"nom de base, tandis que sur Windows l'extension :file:`.exe` sera ajouté." #: ../Doc/distutils/apiref.rst:718 msgid "" @@ -1176,17 +1462,24 @@ msgid "" "form :file:`liblibname.a`, while a *lib_type* of ``'dynamic'`` will be of " "the form :file:`liblibname.so`." msgstr "" +"Renvoie le nom de fichier pour le nom de bibliothèque donné sur la plate-" +"forme actuelle. Sous Unix, une bibliothèque avec un *lib_type* de type " +"``static`` sera généralement de la forme :file:`liblibname.a`, tandis qu'un " +"*lib_type* de type ``dynamic`` sera de la forme :file:`liblibname.so`." #: ../Doc/distutils/apiref.rst:726 msgid "" "Returns the name of the object files for the given source files. " "*source_filenames* should be a list of filenames." msgstr "" +"Renvoie le nom des fichiers objets pour les fichiers sources donnés. " +"*source_filenames* doit être une liste de noms de fichiers." #: ../Doc/distutils/apiref.rst:732 msgid "" "Returns the name of a shared object file for the given file name *basename*." msgstr "" +"Renvoie le nom d'un fichier objet partagé pour le nom de fichier *basename*." #: ../Doc/distutils/apiref.rst:737 msgid "" @@ -1194,86 +1487,109 @@ msgid "" "function *func* with the given arguments *args*, after logging and taking " "into account the *dry_run* flag." msgstr "" +"Invoque :func:`distutils.util.execute`. Cette méthode invoque une fonction " +"Python *func* avec les arguments *args* , après journalisation et prise en " +"compte de l'option *dry_run*." #: ../Doc/distutils/apiref.rst:744 msgid "" "Invokes :func:`distutils.util.spawn`. This invokes an external process to " "run the given command." msgstr "" +"Invoque :func:`distutils.util.spawn`. Invoque un processus externe pour " +"exécuter la commande donnée." #: ../Doc/distutils/apiref.rst:750 msgid "" "Invokes :func:`distutils.dir_util.mkpath`. This creates a directory and any " "missing ancestor directories." msgstr "" +"Invoque :func:`distutils.dir_util.mkpath`. Crée un répertoire et tous les " +"répertoires parents manquants." #: ../Doc/distutils/apiref.rst:756 msgid "Invokes :meth:`distutils.file_util.move_file`. Renames *src* to *dst*." -msgstr "" +msgstr "Invoque :meth:`distutils.file_util.move_file`. Renomme *src* en *dst*." #: ../Doc/distutils/apiref.rst:761 msgid "Write a message using :func:`distutils.log.debug`." -msgstr "" +msgstr "Écrit un message en utilisant :func:`distutils.log.debug`." #: ../Doc/distutils/apiref.rst:766 msgid "Write a warning message *msg* to standard error." msgstr "" +"Écris un message d'avertissement *msg* dans la sortie d'erreur standard." #: ../Doc/distutils/apiref.rst:771 msgid "" "If the *debug* flag is set on this :class:`CCompiler` instance, print *msg* " "to standard output, otherwise do nothing." msgstr "" +"Si l'option *debug* est activée pour cette instance de :class:`CCompiler`, " +"affiche *msg* sur la sortie standard, sinon rien ne s'affiche." #: ../Doc/distutils/apiref.rst:783 msgid ":mod:`distutils.unixccompiler` --- Unix C Compiler" -msgstr "" +msgstr ":mod:`distutils.unixccompiler` — Compilateur C Unix" #: ../Doc/distutils/apiref.rst:789 msgid "" "This module provides the :class:`UnixCCompiler` class, a subclass of :class:" "`CCompiler` that handles the typical Unix-style command-line C compiler:" msgstr "" +"Ce module fournit la classe :class:`UnixCCompiler`, une sous-classe de la " +"classe :class:`CCompiler` qui gère les compilateurs C ayant une interface en " +"ligne de commande conforme au standard Unix :" #: ../Doc/distutils/apiref.rst:792 msgid "macros defined with :option:`!-Dname[=value]`" -msgstr "" +msgstr "macros définies avec l'option :option:`!-Dname[=value]`." #: ../Doc/distutils/apiref.rst:794 msgid "macros undefined with :option:`!-Uname`" -msgstr "" +msgstr "macros désaffectées avec :option:`!-Uname`." #: ../Doc/distutils/apiref.rst:796 msgid "include search directories specified with :option:`!-Idir`" msgstr "" +"inclut les répertoires de recherche spécifiés avec l'option :option:`!-Idir`." #: ../Doc/distutils/apiref.rst:798 msgid "libraries specified with :option:`!-llib`" -msgstr "" +msgstr "bibliothèques spécifiées avec l'option :option:`!-llib`" #: ../Doc/distutils/apiref.rst:800 msgid "library search directories specified with :option:`!-Ldir`" msgstr "" +"répertoires de recherche des bibliothèques définis avec l'option :option:`!-" +"Ldir`." #: ../Doc/distutils/apiref.rst:802 msgid "" "compile handled by :program:`cc` (or similar) executable with :option:`!-c` " "option: compiles :file:`.c` to :file:`.o`" msgstr "" +"compilation gérée par :program:`cc` (ou similaire) exécutable avec l'option :" +"option:`!-c` compile :file:`.c` vers :file:`.o`." #: ../Doc/distutils/apiref.rst:805 msgid "" "link static library handled by :program:`ar` command (possibly with :program:" "`ranlib`)" msgstr "" +"édition de liens pour une bibliothèque statique gérée par le programme en " +"ligne de commande :program:`ar` (éventuellement avec le programme :program:" +"`ranlib`)." #: ../Doc/distutils/apiref.rst:808 msgid "link shared library handled by :program:`cc` :option:`!-shared`" msgstr "" +"édition de liens pour une bibliothèque gérée par :program:`cc` :option:`!-" +"shared`." #: ../Doc/distutils/apiref.rst:812 msgid ":mod:`distutils.msvccompiler` --- Microsoft Compiler" -msgstr "" +msgstr ":mod:`distutils.msvccompiler` — Compilateur Microsoft" #: ../Doc/distutils/apiref.rst:818 msgid "" @@ -1295,20 +1611,31 @@ msgid "" "installed; *DISTUTILS_USE_SDK* indicates that the distutils user has made an " "explicit choice to override the compiler selection by :class:`MSVCCompiler`." msgstr "" +"La classe :class:`MSVCCompiler` sélectionnera normalement le bon " +"compilateur, éditeur de liens, etc. Pour remplacer ces choix, les variables " +"d'environnement *DISTUTILS_USE_SDK* et *MSSdk* doivent être toutes les deux " +"définies. *MSSdk* indique que l'environnement courant a été configuré par le " +"script ``SetEnv.Cmd`` du kit de développement logiciel (*SDK*), ou que les " +"variables d'environnement ont été enregistrées lorsque le kit a été " +"installé ; *DISTUTILS_USE_SDK* indique que l'utilisateur de *distutils* a " +"choisi explicitement de remplacer le compilateur utilisé par :class:" +"`MSVCCompiler`." #: ../Doc/distutils/apiref.rst:835 msgid ":mod:`distutils.bcppcompiler` --- Borland Compiler" -msgstr "" +msgstr ":mod:`distutils.bcppcompiler` — Compilateur Borland" #: ../Doc/distutils/apiref.rst:840 msgid "" "This module provides :class:`BorlandCCompiler`, a subclass of the abstract :" "class:`CCompiler` class for the Borland C++ compiler." msgstr "" +"Ce module fournit :class:`BorlandCCompiler`, une sous-classe de la classe " +"abstraite :class:`CCompiler` classe pour le compilateur Borland C++." #: ../Doc/distutils/apiref.rst:845 msgid ":mod:`distutils.cygwincompiler` --- Cygwin Compiler" -msgstr "" +msgstr ":mod:`distutils.cygwincompiler` — Compilateur Cygwin" #: ../Doc/distutils/apiref.rst:850 msgid "" @@ -1317,16 +1644,22 @@ msgid "" "Windows. It also contains the Mingw32CCompiler class which handles the " "mingw32 port of GCC (same as cygwin in no-cygwin mode)." msgstr "" +"Ce module fournit la classe :class:`CygwinCCompiler`, une sous-classe de la " +"classe :class:`UnixCCompiler` qui gère *Cygwin*, le portage du compilateur " +"GNU C sur Windows. Il contient également la classe Mingw32CCompiler qui " +"gère le portage *mingw32* de GCC (comme *cygwin* en mode *no-cygwin*)." #: ../Doc/distutils/apiref.rst:857 msgid ":mod:`distutils.archive_util` --- Archiving utilities" -msgstr "" +msgstr ":mod:`distutils.archive_util` — Utilitaires d'archivage" #: ../Doc/distutils/apiref.rst:863 msgid "" "This module provides a few functions for creating archive files, such as " "tarballs or zipfiles." msgstr "" +"Ce module fournit quelques fonctions pour créer des fichiers d'archive, tels " +"que des archives aux formats *tarballs* ou *zipfiles*." #: ../Doc/distutils/apiref.rst:869 msgid "" @@ -1340,10 +1673,20 @@ msgid "" "archive. *root_dir* and *base_dir* both default to the current directory. " "Returns the name of the archive file." msgstr "" +"Crée un fichier d'archive (par exemple ``zip`` ou ``tar``). *base_name* est " +"le nom du fichier à créer, sans extension spécifique indiquant le format. " +"*format* est le format d'archive : un parmi ``zip``, ``tar``, ``gztar``, " +"``bztar``, ``xztar``, ``xztar``, ou ``ztar``. *root_dir* est un répertoire " +"qui sera le répertoire racine de l'archive ; c'est-à-dire que le programme " +"se positionne dans *root_dir* avant de créer l'archive. *base_dir* est le " +"répertoire à partir duquel se lance l'archivage ; par exemple, *base_dir* " +"est le préfixe commun à tous les fichiers et répertoires de l'archive. " +"*root_dir* et *base_dir* sont tous deux par défaut dans le répertoire " +"courant. Renvoie le nom du fichier archive." #: ../Doc/distutils/apiref.rst:879 msgid "Added support for the ``xztar`` format." -msgstr "Ajout du support des fichiers ``xztar``" +msgstr "Ajout du support des fichiers ``xztar``." #: ../Doc/distutils/apiref.rst:885 msgid "" @@ -1356,10 +1699,18 @@ msgid "" "compression extension (``.gz``, ``.bz2``, ``.xz`` or ``.Z``). Return the " "output filename." msgstr "" +"Crée une archive (compressée en option) sous forme de fichier au format " +"*tar* à partir de tous les fichiers dans et sous *base_dir*. *compress* doit " +"être ``'gzip'`` (par défaut), ``'bzip2'``, ``'xz'``, ``'compress'`` ou " +"``None``. Pour la méthode ``'compress'`` l'utilitaire de compression nommé " +"par :program:`compress` doit être sur le chemin de recherche par défaut, " +"donc c'est sans doute spécifique à Unix. Le fichier *tar* de sortie sera " +"nommé :file:`base_dir.tar`, avec l'extension de compression appropriée (``." +"gz``, ``.bz2``, ``.xz`` ou ``.Z``). Renvoie le nom du fichier de sortie." #: ../Doc/distutils/apiref.rst:894 msgid "Added support for the ``xz`` compression." -msgstr "" +msgstr "Ajout du support de la compression ``xz``." #: ../Doc/distutils/apiref.rst:900 msgid "" @@ -1370,10 +1721,16 @@ msgid "" "available, raises :exc:`DistutilsExecError`. Returns the name of the " "output zip file." msgstr "" +"Crée un fichier zip à partir de tous les fichiers dans et sous *base_dir*. " +"Le fichier zip de sortie est nommé *base_name* + :file:`.zip`. Utilise soit " +"le module Python :mod:`zipfile` (si disponible) ou l'utilitaire InfoZIP :" +"file:`zip` (s'il est installé et trouvé sur le chemin de recherche par " +"défaut). Si aucun des deux outils n'est disponible, lève :exc:" +"`DistutilsExecError`. Renvoie le nom du fichier zip de sortie." #: ../Doc/distutils/apiref.rst:908 msgid ":mod:`distutils.dep_util` --- Dependency checking" -msgstr "" +msgstr ":mod:`distutils.dep_util` — Vérification des dépendances" #: ../Doc/distutils/apiref.rst:914 msgid "" @@ -1381,6 +1738,10 @@ msgid "" "dependency of files and groups of files; also, functions based entirely on " "such timestamp dependency analysis." msgstr "" +"Ce module fournit des fonctions permettant d'effectuer des tests de " +"dépendance simples, basés sur les horodatages de fichiers et de groupes de " +"fichiers, ainsi que des fonctionnalités entièrement basées sur ces analyses " +"de dépendance par rapport aux horodatages." #: ../Doc/distutils/apiref.rst:921 msgid "" @@ -1389,6 +1750,10 @@ msgid "" "*target* is the same age or newer than *source*. Raise :exc:" "`DistutilsFileError` if *source* does not exist." msgstr "" +"Renvoie la valeur *true* si *source* existe et a été modifiée plus récemment " +"que *target*, ou si *source* existe et *target* n'existe pas. Renvoie la " +"valeur *false* si les deux existent et que *target* est aussi ou plus récent " +"que *source*. Lève :exc:`DistutilsFileError` si *source* n'existe pas." #: ../Doc/distutils/apiref.rst:929 msgid "" @@ -1397,6 +1762,10 @@ msgid "" "where source is newer than target, according to the semantics of :func:" "`newer`." msgstr "" +"Parcourt en parallèle deux listes de noms de fichiers, en vérifiant si " +"chaque source est plus récente que sa cible correspondante. Renvoie une " +"paire de listes (*sources*, *cibles*) où la source est plus récente que la " +"cible, selon la sémantique de :func:`newer`." #: ../Doc/distutils/apiref.rst:938 msgid "" @@ -1415,12 +1784,15 @@ msgstr "" #: ../Doc/distutils/apiref.rst:951 msgid ":mod:`distutils.dir_util` --- Directory tree operations" msgstr "" +":mod:`distutils.dir_util` --- Opérations sur l'arborescence des répertoires" #: ../Doc/distutils/apiref.rst:957 msgid "" "This module provides functions for operating on directories and trees of " "directories." msgstr "" +"Ce module fournit des fonctions pour travailler sur des répertoires et des " +"arborescences de répertoires." #: ../Doc/distutils/apiref.rst:963 msgid "" @@ -1432,6 +1804,14 @@ msgid "" "is true, print a one-line summary of each mkdir to stdout. Return the list " "of directories actually created." msgstr "" +"Crée un répertoire et tous les répertoires parents manquants. Si le " +"répertoire existe déjà (ou si *name* est la chaîne vide, c'est-à-dire le " +"répertoire courant, qui existe bien sûr), alors ne fait rien. Lève :exc:" +"`DistutilsFileError` s'il n'est pas possible de créer un répertoire en cours " +"de route (par exemple, un sous-chemin existe, mais est un fichier plutôt " +"qu'un répertoire). Si *verbose* est vrai, affiche un résumé d'une ligne de " +"chaque *mkdir* vers *stdout*. Renvoie la liste des répertoires réellement " +"créés." #: ../Doc/distutils/apiref.rst:974 msgid "" @@ -1442,6 +1822,12 @@ msgid "" "be created if it doesn't already exist. *mode*, *verbose* and *dry_run* " "flags are as for :func:`mkpath`." msgstr "" +"Crée tous les répertoires vides sous *base_dir* nécessaires pour placer " +"*files*. *base_dir* est le nom d'un répertoire qui n'existe pas encore " +"nécessairement ; *files* est une liste de noms de fichiers relatifs à " +"*base_dir*. *base_dir* + la partie répertoire de chaque fichier dans *files* " +"est créée si elle n'existe pas déjà. Les options *mode*, *verbose* et " +"*dry_run* sont les mêmes que pour :func:`mkpath`." #: ../Doc/distutils/apiref.rst:984 msgid "" @@ -1455,6 +1841,17 @@ msgid "" "it is simply the list of all files under *src*, with the names changed to be " "under *dst*." msgstr "" +"Copie une arborescence de répertoires entière *src* vers un nouvel " +"emplacement *dst*. *src* et *dst* doivent tous deux être des noms de " +"répertoire. Si *src* n'est pas un répertoire, lève :exc:" +"`DistutilsFileError`. Si *dst* n'existe pas, il est créé avec :func:" +"`mkpath`. Le résultat final de la copie est que chaque fichier dans *src* " +"est copié dans *dst*, et les répertoires sous *src* sont récursivement " +"copiés dans *dst*. Renvoie la liste des fichiers qui ont été copiés ou qui " +"auraient pu l'être, en utilisant leur nom de sortie. La valeur renvoyée " +"n'est pas affectée par *update* ou *dry_run* : c'est tout simplement la " +"liste de tous les fichiers sous *src*, avec les noms modifiés pour être sous " +"*dst*." #: ../Doc/distutils/apiref.rst:994 msgid "" @@ -1465,6 +1862,13 @@ msgid "" "destination of the symlink will be copied. *update* and *verbose* are the " "same as for :func:`copy_file`." msgstr "" +"Les modes *preserve_mode* et *preserve_times* sont les mêmes que pour :func:" +"`distutils.file_util.copy_file` ; il faut savoir que cela ne concerne que " +"les fichiers réguliers, et non les dossiers. Si *preserve_symlinks* est " +"vrai, les liens symboliques seront copiés en tant que liens symboliques (sur " +"les plateformes qui les gèrent !); sinon (par défaut), la destination du " +"lien sera copiée. *update* et *verbose* sont les mêmes que pour :func:" +"`copy_file`." #: ../Doc/distutils/apiref.rst:1002 msgid "" @@ -1472,10 +1876,13 @@ msgid "" "these files is available in answer D2 of the `NFS FAQ page `_)." msgstr "" +"Les fichiers dans *src* qui commencent par :file:`.nfs` sont ignorés (plus " +"d'informations sur ces fichiers sont disponibles dans la réponse *D2* de la " +"page `NFS FAQ page `_)." #: ../Doc/distutils/apiref.rst:1006 msgid "NFS files are ignored." -msgstr "" +msgstr "Les fichiers NFS sont ignorés." #: ../Doc/distutils/apiref.rst:1011 msgid "" @@ -1483,16 +1890,21 @@ msgid "" "Any errors are ignored (apart from being reported to ``sys.stdout`` if " "*verbose* is true)." msgstr "" +"Supprime récursivement *directory* et tous les fichiers et répertoires en " +"dessous. Toutes les erreurs sont ignorées (sauf si *verbose* est vrai, elles " +"sont affichées sur ``sys.stdout``)." #: ../Doc/distutils/apiref.rst:1017 msgid ":mod:`distutils.file_util` --- Single file operations" -msgstr "" +msgstr ":mod:`distutils.file_util` — Traitements mono-fichier" #: ../Doc/distutils/apiref.rst:1023 msgid "" "This module contains some utility functions for operating on individual " "files." msgstr "" +"Ce module contient quelques fonctions de service pour travailler sur des " +"fichiers individuels." #: ../Doc/distutils/apiref.rst:1028 msgid "" @@ -1505,6 +1917,14 @@ msgid "" "If *update* is true, *src* will only be copied if *dst* does not exist, or " "if *dst* does exist but is older than *src*." msgstr "" +"Copie le fichier *src* dans *dst*. Si *dst* est un répertoire, alors *src* y " +"est copié avec le même nom ; sinon, il faut que ce soit un nom de fichier. " +"Si *preserve_mode* est vrai (par défaut), le mode du fichier (son type et " +"ses bits de permission, ou ce qui est analogue sur la plate-forme actuelle) " +"sont copiés. Si *preserve_times* est vrai (par défaut), les horodatages de " +"la dernière modification et du dernier accès sont également copiés. Si " +"*update* est vrai, *src* ne peut être copié que si *dst* n'existe pas, ou si " +"*dst* existe mais est plus ancien que *src*." #: ../Doc/distutils/apiref.rst:1037 msgid "" @@ -1515,6 +1935,13 @@ msgid "" "hard or symbolic linking is available. It uses :func:`_copy_file_contents` " "to copy file contents." msgstr "" +"*link* permets de créer des liens physiques (en utilisant :func:`os.link`) " +"ou symboliques (en utilisant :func:`os.symlink`) au lieu de les copier : " +"paramétrez la valeur a ``'hard'`` ou ``'sym'`` ; si elle vaut ``None`` (par " +"défaut), les fichiers sont copiés. Ne définissez pas *link* sur les systèmes " +"qui ne les gèrent pas : :func:`copy_file` ne vérifie pas si des liens " +"symboliques ou physiques sont disponibles. La fonction :func:" +"`_copy_file_contents` est utilisée pour copier le contenu des fichiers." #: ../Doc/distutils/apiref.rst:1044 msgid "" @@ -1522,6 +1949,9 @@ msgid "" "the output file, and *copied* is true if the file was copied (or would have " "been copied, if *dry_run* true)." msgstr "" +"Renvoie un couple ``(dest_name, copied)`` : *dest_name* est le nom réel du " +"fichier de sortie, et *copied* est vrai si le fichier a été copié (ou aurait " +"été copié, si *dry_run* est vrai)." #: ../Doc/distutils/apiref.rst:1058 msgid "" @@ -1529,28 +1959,37 @@ msgid "" "into it with the same name; otherwise, *src* is just renamed to *dst*. " "Returns the new full name of the file." msgstr "" +"Déplace le fichier *src* vers *dst*. Si *dst* est un répertoire, le fichier " +"y est déplacé avec le même nom ; sinon, *src* est simplement renommé *dst*. " +"Renvoie le nouveau nom complet du fichier." #: ../Doc/distutils/apiref.rst:1064 msgid "" "Handles cross-device moves on Unix using :func:`copy_file`. What about " "other systems?" msgstr "" +"Gère les déplacements inter-périphériques sous Unix en utilisant :func:" +"`copy_file`. Qu'en est-il sur les autres systèmes ?" #: ../Doc/distutils/apiref.rst:1070 msgid "" "Create a file called *filename* and write *contents* (a sequence of strings " "without line terminators) to it." msgstr "" +"Crée un fichier appelé *filename* et y écrit *contents* (une séquence de " +"chaînes sans terminaison de ligne)." #: ../Doc/distutils/apiref.rst:1075 msgid ":mod:`distutils.util` --- Miscellaneous other utility functions" -msgstr "" +msgstr ":mod:`distutils.util` — Autres fonctions de service" #: ../Doc/distutils/apiref.rst:1081 msgid "" "This module contains other assorted bits and pieces that don't fit into any " "other utility module." msgstr "" +"Ce module contient d'autres éléments qui ne correspondent à aucun autre " +"module de service." #: ../Doc/distutils/apiref.rst:1087 msgid "" @@ -1565,19 +2004,19 @@ msgstr "" #: ../Doc/distutils/apiref.rst:1095 msgid "Examples of returned values:" -msgstr "" +msgstr "Exemples de valeurs renvoyées :" #: ../Doc/distutils/apiref.rst:1097 msgid "``linux-i586``" -msgstr "" +msgstr "``linux-i586``" #: ../Doc/distutils/apiref.rst:1098 msgid "``linux-alpha``" -msgstr "" +msgstr "``linux-alpha``" #: ../Doc/distutils/apiref.rst:1099 msgid "``solaris-2.6-sun4u``" -msgstr "" +msgstr "``solaris-2.6-sun4u``" #: ../Doc/distutils/apiref.rst:1100 msgid "``irix-5.3``" @@ -1590,6 +2029,8 @@ msgstr "" #: ../Doc/distutils/apiref.rst:1103 msgid "For non-POSIX platforms, currently just returns ``sys.platform``." msgstr "" +"Pour les plates-formes qui ne sont pas POSIX, renvoie simplement ``sys." +"platform``." #: ../Doc/distutils/apiref.rst:1105 msgid "" @@ -1597,6 +2038,10 @@ msgid "" "binaries will run (that is, the value of ``MACOSX_DEPLOYMENT_TARGET`` during " "the build of Python), not the OS version of the current system." msgstr "" +"Pour les systèmes Mac OS X, la version du système d'exploitation correspond " +"à la version minimale sur laquelle les binaires pourront être exécutés " +"(c'est-à-dire la valeur de ``MACOSX_DEPLOYMENT_TARGET`` pendant la " +"compilation de Python), et non la version du système actuel." #: ../Doc/distutils/apiref.rst:1109 msgid "" @@ -1609,26 +2054,35 @@ msgid "" "build (ppc, i386, x86_64) and ``intel`` is used for a universal build with " "the i386 and x86_64 architectures" msgstr "" +"Pour les binaires universels construits sur Mac OS X, la valeur de " +"l'architecture reflète l'état du binaire universel au lieu de celle de " +"l'architecture du processeur en cours. Pour les binaires universels 32 bits, " +"l'architecture est ``fat``, pour les binaires universels 64 bits, " +"l'architecture est ``fat64``, et pour les binaires universels 4 voies, " +"l'architecture est ``universelle``. A partir de Python 2.7 et Python 3.2, " +"l'architecture ``fat3`` est utilisée pour une compilation universelle à 3 " +"voies (*ppc*, *i386*, *x86_64*) et ``intel`` est utilisée pour une " +"compilation universelle avec les architectures *i386* et *x86_64*" #: ../Doc/distutils/apiref.rst:1118 msgid "Examples of returned values on Mac OS X:" -msgstr "" +msgstr "Exemples de valeurs renvoyées sous Mac OS X :" #: ../Doc/distutils/apiref.rst:1120 msgid "``macosx-10.3-ppc``" -msgstr "" +msgstr "``macosx-10.3-ppc``" #: ../Doc/distutils/apiref.rst:1122 msgid "``macosx-10.3-fat``" -msgstr "" +msgstr "``macosx-10.3-fat``" #: ../Doc/distutils/apiref.rst:1124 msgid "``macosx-10.5-universal``" -msgstr "" +msgstr "``macosx-10.5-universal``" #: ../Doc/distutils/apiref.rst:1126 msgid "``macosx-10.6-intel``" -msgstr "" +msgstr "``macosx-10.6-intel``" #: ../Doc/distutils/apiref.rst:1131 msgid "" @@ -1639,6 +2093,14 @@ msgid "" "can actually use them in the filesystem. Raises :exc:`ValueError` on non-" "Unix-ish systems if *pathname* either starts or ends with a slash." msgstr "" +"Renvoie un chemin *pathname* qui fonctionne sur le système de fichiers " +"natif. Par exemple, il sépare le chemin sur */* et le recompose en utilisant " +"le séparateur de répertoires courant. Cela est nécessaire parce que les noms " +"de fichiers dans les scripts d'installations sont toujours fournis dans le " +"style Unix, et doivent être convertis dans la convention du système avant " +"d'être utilisé par le système de fichiers. Lève :exc:`ValueError` sur les " +"systèmes non UNIX si *pathname* commence ou se termine par une barre oblique " +"(*slash* en anglais)." #: ../Doc/distutils/apiref.rst:1141 msgid "" @@ -1647,6 +2109,10 @@ msgid "" "requires making *pathname* relative and then joining the two, which is " "tricky on DOS/Windows." msgstr "" +"Renvoie un chemin *pathname* préfixé avec *new_root*. Si *pathname* est " +"relatif, c`est l'équivalent de ``os.path.join(new_root,pathname)`` Sinon, il " +"faut rendre *pathname* relatif et joindre les deux, ce qui est dangereux " +"sous DOS/Windows." #: ../Doc/distutils/apiref.rst:1148 msgid "" @@ -1654,16 +2120,22 @@ msgid "" "users can use in config files, command-line options, etc. Currently this " "includes:" msgstr "" +"Vérifie que 'os.environ' possède toutes les variables d'environnement " +"utilisables dans les fichiers de configuration, les options en ligne de " +"commande, etc. À l'heure actuelle, cela comprend :" #: ../Doc/distutils/apiref.rst:1152 msgid ":envvar:`HOME` - user's home directory (Unix only)" msgstr "" +":envvar:`HOME`. Répertoire d’accueil de l'utilisateur (Unix uniquement)" #: ../Doc/distutils/apiref.rst:1153 msgid "" ":envvar:`PLAT` - description of the current platform, including hardware and " "OS (see :func:`get_platform`)" msgstr "" +":envvar:`PLAT`. Description de la plate-forme actuelle, y compris le " +"matériel et le l'OS (voir :func:`get_platform`)" #: ../Doc/distutils/apiref.rst:1159 msgid "" @@ -1675,6 +2147,14 @@ msgid "" "`check_environ`. Raise :exc:`ValueError` for any variables not found in " "either *local_vars* or ``os.environ``." msgstr "" +"Exécute la substitution de variable de style shell/Perl sur *s*. Chaque " +"occurrence de ``$`` suivie d'un nom est considérée comme une variable, et la " +"variable est remplacée par la valeur trouvée dans le dictionnaire " +"*local_vars*, ou dans ``os.environ`` si elle ne se trouve pas dans " +"*local_vars*. *os.environ* est d'abord vérifié/étendu pour garantir qu'elle " +"contient certaines valeurs : voir :func:`check_environ`. Lève :exc:" +"`ValueError` pour toute variable non trouvée dans *local_vars* ou ``os." +"environ``." #: ../Doc/distutils/apiref.rst:1166 msgid "" @@ -1682,6 +2162,10 @@ msgid "" "``$variable`` can consist only of upper and lower case letters, numbers and " "an underscore. No { } or ( ) style quoting is available." msgstr "" +"Remarquez qu'il ne s'agit pas d'une fonction d'interpolation de chaîne à " +"part entière. Une ``$variable`` valide ne peut être composée que de lettres " +"majuscules et minuscules, de chiffres et d'un tiret bas. Aucune syntaxe de " +"type {} ou () pour indiquer des variables n'est disponible." #: ../Doc/distutils/apiref.rst:1173 msgid "" @@ -1693,6 +2177,16 @@ msgid "" "leaving only the escaped character. The quote characters are stripped from " "any quoted string. Returns a list of words." msgstr "" +"Sépare une chaîne de caractères selon les règles de type shell Unix pour les " +"guillemets et les barres obliques inverses. En bref : les mots sont " +"délimités par des espaces, tant que ces espaces ne sont pas échappées par " +"une barre oblique inversée, ou à l'intérieur d'une chaîne guillemets. Les " +"guillemets simples et doubles sont équivalents, et les caractères entre " +"guillemets peuvent être échappés à l'aide d'une barre oblique inversée. La " +"barre oblique inversée est supprimée de toute séquence d'échappement à deux " +"caractères, ne laissant que le caractère échappé. Les caractères guillemets " +"sont supprimés de toute chaîne de caractères entre guillemets. Renvoie une " +"liste de mots." #: ../Doc/distutils/apiref.rst:1186 msgid "" @@ -1703,10 +2197,18 @@ msgid "" "it (to embody the \"external action\" being performed), and an optional " "message to print." msgstr "" +"Exécute une action qui affecte le monde extérieur (par exemple, écrire dans " +"le système de fichiers). De telles actions sont spéciales car elles sont " +"désactivées par l'option *dry_run*. Cette méthode s'occupe de tout. Vous " +"devez simplement fournir la fonction à appeler avec un couple d'argument lui " +"correspondant et un message facultatif à afficher." #: ../Doc/distutils/apiref.rst:1195 msgid "Convert a string representation of truth to true (1) or false (0)." msgstr "" +"Convertit une chaîne de caractères représentant une valeur booléenne en " +"``1`` (si elle est évaluée comme vraie) ou ``0`` (si elle est évaluée comme " +"fausse)." #: ../Doc/distutils/apiref.rst:1197 msgid "" @@ -1714,6 +2216,9 @@ msgid "" "values are ``n``, ``no``, ``f``, ``false``, ``off`` and ``0``. Raises :exc:" "`ValueError` if *val* is anything else." msgstr "" +"Les valeurs *vraies* sont , ``y``, ``yes``, ``t``, ``true``, ``on`` et " +"``1``. Les valeurs *fausses* sont ``n``, ``no``, ``f``, ``false``, ``off`` " +"et ``0``. Lève :exc:`ValueError` si *val* est autre chose." #: ../Doc/distutils/apiref.rst:1204 msgid "" @@ -1722,22 +2227,30 @@ msgid "" "is a list of files to compile; any files that don't end in :file:`.py` are " "silently skipped. *optimize* must be one of the following:" msgstr "" +"Effectue une compilation vers du *bytecode* Python à partir d'un ensemble de " +"fichiers sources Python dans un fichier :file:`.pyc` dans un sous " +"répertoire :file:`__pycache__` (voir :pep:`3147` et :pep:`488`). *py_files* " +"est une liste de fichiers à compiler ; tous les fichiers qui ne se terminent " +"pas par :file:`.py` sont ignorés en silence. *optimize* doit être l'un des " +"éléments suivants :" #: ../Doc/distutils/apiref.rst:1209 msgid "``0`` - don't optimize" -msgstr "" +msgstr "``0``: ne pas optimiser" #: ../Doc/distutils/apiref.rst:1210 msgid "``1`` - normal optimization (like ``python -O``)" -msgstr "" +msgstr "``1``: optimisation normale (comme ``python -O``)" #: ../Doc/distutils/apiref.rst:1211 msgid "``2`` - extra optimization (like ``python -OO``)" -msgstr "" +msgstr "``2``: optimisation supplémentaire (comme ``python -OO``)" #: ../Doc/distutils/apiref.rst:1213 msgid "If *force* is true, all files are recompiled regardless of timestamps." msgstr "" +"Si *force* est vrai, tous les fichiers sont recompilés indépendamment des " +"horodatages." #: ../Doc/distutils/apiref.rst:1215 msgid "" @@ -1748,12 +2261,21 @@ msgid "" "*prefix* is stripped). You can supply either or both (or neither) of " "*prefix* and *base_dir*, as you wish." msgstr "" +"Le nom du fichier source encodé dans chaque fichier :term:`bytecode` est par " +"défaut le nom présent dans la liste des noms de fichiers source *py_files* ; " +"vous pouvez modifier dynamiquement ses noms avec *prefix* et *basedir*. " +"*prefix* est une chaîne de caractères qui sera supprimée de chaque nom de " +"fichier source, et *base_dir* est un nom de répertoire qui sera préfixé au " +"nom (après que le *prefixe* soit supprimé). Vous pouvez choisir de fournir " +"l'un ou l'autre (ou les deux) paramètres : *prefixe* et *base_dir*." #: ../Doc/distutils/apiref.rst:1222 msgid "" "If *dry_run* is true, doesn't actually do anything that would affect the " "filesystem." msgstr "" +"Si *dry_run* est vrai, ne fait rien qui puisse affecter le système de " +"fichiers." #: ../Doc/distutils/apiref.rst:1225 msgid "" @@ -1764,6 +2286,13 @@ msgid "" "The *direct* flag is used by the script generated in indirect mode; unless " "you know what you're doing, leave it set to ``None``." msgstr "" +"La compilation binaire se fait soit directement dans l'interpréteur courant " +"avec le module standard :mod:`py_compile`, soit indirectement en écrivant un " +"script temporaire et en l'exécutant. Normalement, vous devez laisser :func:" +"`byte_compile` choisir d'utiliser la compilation directe ou non (voir le " +"code-source pour les détails). Le paramètre *direct* est utilisé par le " +"script généré en mode indirect ; à moins que vous ne sachiez ce que vous " +"faites, laissez le paramètre à ``None`` (Aucun)." #: ../Doc/distutils/apiref.rst:1232 msgid "" @@ -1771,10 +2300,13 @@ msgid "" "their name, in a :file:`__pycache__` subdirectory instead of files without " "tag in the current directory." msgstr "" +"Crée des fichiers ``.pyc`` avec un sous-répertoire :func:`import magic tag " +"` dans leur nom, dans le sous répertoire :file:`__pycache__` " +"plutôt que dans le répertoire courant, sans tag." #: ../Doc/distutils/apiref.rst:1237 msgid "Create ``.pyc`` files according to :pep:`488`." -msgstr "" +msgstr "Crée des fichiers ``.pyc`` selon la :pep:`488`." #: ../Doc/distutils/apiref.rst:1243 msgid "" @@ -1782,38 +2314,47 @@ msgid "" "by ensuring there are 8 spaces space after each newline. Note that it does " "no other modification of the string." msgstr "" +"Renvoie une version de *header* traitée avec les échappements compatibles " +"avec les en-têtes :rfc:`822`, en s'assurant qu'il y a 8 espaces après chaque " +"nouvelle ligne. Notez qu'il ne fait aucune autre modification de la chaîne " +"de caractères." #: ../Doc/distutils/apiref.rst:1253 msgid ":mod:`distutils.dist` --- The Distribution class" -msgstr "" +msgstr ":mod:`distutils.dist` — La classe Distribution" #: ../Doc/distutils/apiref.rst:1260 msgid "" "This module provides the :class:`~distutils.core.Distribution` class, which " "represents the module distribution being built/installed/distributed." msgstr "" +"Ce module fournit la classe :class:`~distutils.core.Distribution`, qui " +"représente le module *distribution* en cours de construction/installation/" +"distribution." #: ../Doc/distutils/apiref.rst:1265 msgid ":mod:`distutils.extension` --- The Extension class" -msgstr "" +msgstr ":mod:`distutils.extension` — La classe Extension" #: ../Doc/distutils/apiref.rst:1272 msgid "" "This module provides the :class:`Extension` class, used to describe C/C++ " "extension modules in setup scripts." msgstr "" +"Ce module fournit la classe :class:`Extension`, utilisée pour décrire les " +"modules d'extension C/C++ dans les scripts de configuration." #: ../Doc/distutils/apiref.rst:1280 msgid ":mod:`distutils.debug` --- Distutils debug mode" -msgstr "" +msgstr ":mod:`distutils.debug` — Mode de débogage du module *Distutils*" #: ../Doc/distutils/apiref.rst:1286 msgid "This module provides the DEBUG flag." -msgstr "" +msgstr "Ce module fournit l'option *DEBUG*." #: ../Doc/distutils/apiref.rst:1290 msgid ":mod:`distutils.errors` --- Distutils exceptions" -msgstr "" +msgstr ":mod:`distutils.errors` — Exceptions du module *Distutils*" #: ../Doc/distutils/apiref.rst:1296 msgid "" @@ -1822,37 +2363,50 @@ msgid "" "raised for errors that are obviously the end-user's fault (eg. bad command-" "line arguments)." msgstr "" +"Fournit les exceptions utilisées par les modules de *Distutils*. Notez que " +"les modules *Distutils* peuvent soulever des exceptions standard ; en " +"particulier, ``SystemExit`` est généralement levée pour les erreurs qui sont " +"manifestement de la responsabilité de l'utilisateur final (ex : mauvais " +"argument en ligne de commande)." #: ../Doc/distutils/apiref.rst:1300 msgid "" "This module is safe to use in ``from ... import *`` mode; it only exports " "symbols whose names start with ``Distutils`` and end with ``Error``." msgstr "" +"Ce module est utilisable avec la syntaxe ``from ... import *`` ; il " +"n'exporte que des symboles dont le nom commence par ``Distutils`` et se " +"termine par ``Error``." #: ../Doc/distutils/apiref.rst:1305 msgid "" ":mod:`distutils.fancy_getopt` --- Wrapper around the standard getopt module" msgstr "" +":mod:`distutils.fancy_getopt` --- Encapsulation du module *getopt* standard" #: ../Doc/distutils/apiref.rst:1311 msgid "" "This module provides a wrapper around the standard :mod:`getopt` module " "that provides the following additional features:" msgstr "" +"Ce module est une encapsulation du module standard :mod:`getopt` qui apporte " +"les fonctionnalités supplémentaires suivantes :" #: ../Doc/distutils/apiref.rst:1314 msgid "short and long options are tied together" -msgstr "" +msgstr "Les options *short* et *long* sont liées entre elles." #: ../Doc/distutils/apiref.rst:1316 msgid "" "options have help strings, so :func:`fancy_getopt` could potentially create " "a complete usage summary" msgstr "" +"Les options ont des pages d'aide, donc :func:`fancy_getopt` pourrait " +"potentiellement créer un résumé d'utilisation complet" #: ../Doc/distutils/apiref.rst:1319 msgid "options set attributes of a passed-in object" -msgstr "" +msgstr "Les options définissent les attributs à partir d'un objet fourni." #: ../Doc/distutils/apiref.rst:1321 msgid "" @@ -1860,6 +2414,9 @@ msgid "" "is the \"negative alias\" of :option:`!--verbose`, then :option:`!--quiet` " "on the command line sets *verbose* to false." msgstr "" +"Les options booléennes peuvent avoir des \"alias négatifs\" --- par exemple " +"l'option :option:`!-quiet` est *l'alias négatif* de :option:`!--verbose`, " +"l'option :option:`!-quiet` sur la ligne de commande met *verbose* à faux." #: ../Doc/distutils/apiref.rst:1327 msgid "" @@ -1871,16 +2428,28 @@ msgid "" "`getopt` method of the :class:`FancyGetopt` class). *args* is the argument " "list. Will use ``sys.argv[1:]`` if you pass ``None`` as *args*." msgstr "" +"Encapsulation de la fonction ``getopt``. *options* est une liste de triplets " +"``(long_option, short_option, help_string)`` comme décrit dans le " +"constructeur de la classe :class:`FancyGetopt`. *negative_opt* doit être un " +"dictionnaire associant les noms des options aux noms des options, la clé et " +"la valeur doivent être dans la liste *options*. *object* est un objet qui " +"sera utilisé pour stocker des valeurs (voir la méthode :meth:`getopt` de la " +"classe :class:`FancyGetopt`). *args* est la liste des arguments. Utilise " +"``sys.argv[1 :]`` si ``None`` est passé à *args*." #: ../Doc/distutils/apiref.rst:1338 msgid "Wraps *text* to less than *width* wide." msgstr "" +"Ajoute des retours à la ligne à *texte* de manière à ce que la largeur soit " +"inférieure à *largeur*." #: ../Doc/distutils/apiref.rst:1343 msgid "" "The option_table is a list of 3-tuples: ``(long_option, short_option, " "help_string)``" msgstr "" +"La liste *option_table* est constituée de triplets : ``(long_option, " +"short_option, help_string*)``" #: ../Doc/distutils/apiref.rst:1346 msgid "" @@ -1889,14 +2458,21 @@ msgid "" "any case. *short_option* should be ``None`` if a *long_option* doesn't have " "a corresponding *short_option*. All option tuples must have long options." msgstr "" +"Si une option prend un argument, sa *long_option* doit se terminer par " +"``'='``. *short_option* doit être un seul caractère, jamais ``':'`'. " +"*option_courte* doit être ``None`` si *long_option* n'a pas de " +"*short_option* correspondante. Tous les triplets d'options doivent avoir des " +"options longues." #: ../Doc/distutils/apiref.rst:1351 msgid "The :class:`FancyGetopt` class provides the following methods:" -msgstr "" +msgstr "La classe :class:`FancyGetopt` fournit les méthodes suivantes :" #: ../Doc/distutils/apiref.rst:1356 msgid "Parse command-line options in args. Store as attributes on *object*." msgstr "" +"Analyse les options de ligne de commande des arguments. Les stocke en tant " +"qu'attributs de *objet*." #: ../Doc/distutils/apiref.rst:1358 msgid "" @@ -1907,6 +2483,13 @@ msgid "" "returns *args*; in both cases, the returned *args* is a modified copy of the " "passed-in *args* list, which is left untouched." msgstr "" +"Si *args* est ``None`` ou n'est pas définie, utilise ``sys.argv[1:]``. Si " +"*object* est ``None`` ou n'est pas définie, créer une nouvelle instance de " +"la classe :class:`OptionDummy` , stocke les valeurs d'options dans " +"l'instance et renvoie un couple ``(args, object)``. Si *objet* est fourni, " +"il est modifié sur place et :func:`getopt` renvoie simplement *args*; dans " +"les deux cas, Les arguments *args* renvoyés sont une copie modifiée de la " +"liste *args* transmise, qui est n'est pas modifiée." #: ../Doc/distutils/apiref.rst:1370 msgid "" @@ -1914,34 +2497,43 @@ msgid "" "of :meth:`getopt` Raises :exc:`RuntimeError` if :meth:`getopt` hasn't been " "called yet." msgstr "" +"Renvoie la liste des couples ``(option, valeur)`` traités par l'exécution " +"précédente de :meth:`getopt`. Déclenche :exc:`RuntimeError` si :meth:" +"`getopt` n'a pas encore été appelée." #: ../Doc/distutils/apiref.rst:1377 msgid "" "Generate help text (a list of strings, one per suggested line of output) " "from the option table for this :class:`FancyGetopt` object." msgstr "" +"Génère un texte d'aide (une liste de chaînes, une par ligne de sortie " +"suggérée) de la liste d'options pour l'objet de la classe :class:" +"`FancyGetopt`." #: ../Doc/distutils/apiref.rst:1380 msgid "If supplied, prints the supplied *header* at the top of the help." -msgstr "" +msgstr "S'il est fourni, affiche l'en-tête *header* en haut de l'aide." #: ../Doc/distutils/apiref.rst:1384 msgid ":mod:`distutils.filelist` --- The FileList class" -msgstr "" +msgstr ":mod:`distutils.filelist` — La classe *FileList* liste des fichiers" #: ../Doc/distutils/apiref.rst:1391 msgid "" "This module provides the :class:`FileList` class, used for poking about the " "filesystem and building lists of files." msgstr "" +"Ce module fournit la classe :class:`FileList`, utilisée pour parcourir le " +"système de fichiers et construire des listes de fichiers." #: ../Doc/distutils/apiref.rst:1396 msgid ":mod:`distutils.log` --- Simple PEP 282-style logging" msgstr "" +":mod:`distutils.log` --- Journalisation basée sur le style de la PEP 282" #: ../Doc/distutils/apiref.rst:1403 msgid ":mod:`distutils.spawn` --- Spawn a sub-process" -msgstr "" +msgstr ":mod:`distutils.spawn` — Crée un sous-processus" #: ../Doc/distutils/apiref.rst:1409 msgid "" @@ -1950,10 +2542,15 @@ msgid "" "Also provides :func:`find_executable` to search the path for a given " "executable name." msgstr "" +"Ce module offre la fonction :func:`spawn`, une interface avec diverses " +"fonctions spécifiques à la plate-forme pour lancer un autre programme dans " +"un sous-processus. Inclut également :func:`find_executable` pour rechercher " +"le chemin d'accès pour un nom d'exécutable donné." #: ../Doc/distutils/apiref.rst:1416 msgid ":mod:`distutils.sysconfig` --- System configuration information" msgstr "" +":mod:`distutils.sysconfig` --- Informations de configuration du système" #: ../Doc/distutils/apiref.rst:1425 msgid "" @@ -1966,26 +2563,40 @@ msgid "" "header is called :file:`pyconfig.h` for Python versions starting with 2.2, " "and :file:`config.h` for earlier versions of Python." msgstr "" +"Le module :mod:`distutils.sysconfig` donne accès aux informations de " +"configuration bas niveau de Python. Les variables de configuration " +"spécifiques disponibles dépendent de la plate-forme et de la configuration. " +"Les variables spécifiques dépendent du processus de compilation de la " +"version *spécifique* de Python en cours d'exécution. Les variables sont " +"celles qui se trouvent dans le fichier :file:`Makefile` et dans les entêtes " +"de configuration installés avec Python sur des systèmes Unix. Le fichier " +"des entêtes de configuration s'appelle :file:`pyconfig.h` pour les versions " +"de Python commençant par 2.2, et :file:`config.h` pour les versions " +"antérieures de Python." #: ../Doc/distutils/apiref.rst:1434 msgid "" "Some additional functions are provided which perform some useful " "manipulations for other parts of the :mod:`distutils` package." msgstr "" +"Quelques fonctions supplémentaires sont fournies pour effectuer des " +"manipulations utiles pour d'autres parties du paquet :mod:`distutils`." #: ../Doc/distutils/apiref.rst:1440 msgid "The result of ``os.path.normpath(sys.prefix)``." -msgstr "" +msgstr "Le résultat de ``os.path.normpath(sys.prefix)``." #: ../Doc/distutils/apiref.rst:1445 msgid "The result of ``os.path.normpath(sys.exec_prefix)``." -msgstr "" +msgstr "Le résultat de ``os.path.normpath(sys.exec_prefix)``." #: ../Doc/distutils/apiref.rst:1450 msgid "" "Return the value of a single variable. This is equivalent to " "``get_config_vars().get(name)``." msgstr "" +"Retourne la valeur d'une seule variable. C'est l'équivalent de " +"``get_config_vars().get(name)``." #: ../Doc/distutils/apiref.rst:1456 msgid "" @@ -1995,6 +2606,12 @@ msgid "" "a sequence giving the associated values. If a given name does not have a " "corresponding value, ``None`` will be included for that variable." msgstr "" +"Retourne un ensemble de définitions de variables. S'il n'y a pas " +"d'arguments, cela renvoie un dictionnaire qui associe les noms des variables " +"de configuration aux valeurs. Si des arguments sont spécifiés, ils doivent " +"être des chaînes de caractères, et la valeur renvoyée sera une séquence " +"donnant les valeurs correspondantes. Si un nom donné n'a pas de valeur " +"correspondante, la valeur ``None`` sera utilisée pour cette variable." #: ../Doc/distutils/apiref.rst:1465 msgid "" @@ -2003,6 +2620,10 @@ msgid "" "platforms the header will have been supplied directly by the Python source " "distribution. The file is a platform-specific text file." msgstr "" +"Renvoie le nom complet du chemin d'accès de l'en-tête de configuration. " +"Pour Unix, c'est l'en-tête généré par le script :program:`configure` ; pour " +"les autres plates-formes, l'en-tête provient directement de la distribution " +"source Python. Le fichier est un fichier texte spécifique à la plate-forme." #: ../Doc/distutils/apiref.rst:1473 msgid "" @@ -2011,6 +2632,11 @@ msgid "" "meaning for other platforms will vary. The file is a platform-specific text " "file, if it exists. This function is only useful on POSIX platforms." msgstr "" +"Renvoie le nom complet du chemin d'accès du fichier :file:`Makefile` utilisé " +"pour construire Python. Pour Unix, c'est le fichier généré par le script :" +"program:`configure`. La définition pour les autres plateformes varie. S'il " +"existe, il s'agit d'un fichier texte spécifique à la plate-forme. Cette " +"fonction n'est utile que sur les plates-formes POSIX." #: ../Doc/distutils/apiref.rst:1481 msgid "" @@ -2021,6 +2647,13 @@ msgid "" "const:`PREFIX`, or as the exec-prefix instead of :const:`EXEC_PREFIX` if " "*plat_specific* is true." msgstr "" +"Renvoie le répertoire pour les fichiers d'inclusion C standards ou " +"dépendants de la plate-forme. Si *plat_specific* est vrai, le répertoire " +"*include* dépendant de la plate-forme est renvoyé ; si la valeur est *faux* " +"ou *None*, le répertoire indépendant de la plate-forme est renvoyé. Si " +"*prefix* est donné, il est utilisé soit comme préfixe au lieu de :const:" +"`PREFIX`, soit comme préfixe d'exécution au lieu de :const:`EXEC_PREFIX` si " +"*plat_specific* est vrai." #: ../Doc/distutils/apiref.rst:1491 msgid "" @@ -2033,18 +2666,31 @@ msgid "" "directory for the standard library is returned rather than the directory for " "the installation of third-party extensions." msgstr "" +"Renvoie le répertoire pour l'installation de la bibliothèque standard ou " +"dépendante de la plate-forme. Si *plat_specific* est vrai, le répertoire " +"*include* dépendant de la plate-forme est renvoyé ; si la valeur est *faux* " +"ou *None*, le répertoire indépendant de la plate-forme est renvoyé. Si " +"*prefix* est donné, il est utilisé soit comme préfixe au lieu de :const:" +"`PREFIX`, soit comme préfixe d'exécution au lieu de :const:`EXEC_PREFIX` si " +"*plat_specific* est vrai. Si *standard_lib* est vrai, le répertoire de la " +"bibliothèque standard est renvoyé plutôt que le répertoire d'installation " +"des extensions tierces." #: ../Doc/distutils/apiref.rst:1500 msgid "" "The following function is only intended for use within the :mod:`distutils` " "package." msgstr "" +"La fonction suivante est uniquement destinée à être utilisée dans le paquet :" +"mod:`distutils`." #: ../Doc/distutils/apiref.rst:1506 msgid "" "Do any platform-specific customization of a :class:`distutils.ccompiler." "CCompiler` instance." msgstr "" +"Exécute toute personnalisation spécifique à la plate-forme d'une instance :" +"class:`distutils.ccompiler.CCompiler`." #: ../Doc/distutils/apiref.rst:1509 msgid "" @@ -2054,12 +2700,21 @@ msgid "" "This information includes the selected compiler, compiler and linker " "options, and the extension used by the linker for shared objects." msgstr "" +"Cette fonction n'est nécessaire que sous Unix pour le moment, mais doit être " +"appelée de manière cohérente pour supporter la compatibilité ascendante. " +"Elle insère des informations qui varient d'une version à l'autre d'Unix et " +"qui sont stockées dans le fichier Python :file:`Makefile`. Ces informations " +"comprennent le compilateur, les options du compilateur et de l'éditeur de " +"liens sélectionnés, ainsi que l'extension utilisée par l'éditeur de liens " +"pour les objets partagés." #: ../Doc/distutils/apiref.rst:1515 msgid "" "This function is even more special-purpose, and should only be used from " "Python's own build procedures." msgstr "" +"Cette fonction est encore plus spéciale, et ne devrait être utilisée que " +"dans les procédures de compilation de Python." #: ../Doc/distutils/apiref.rst:1521 msgid "" @@ -2068,10 +2723,14 @@ msgid "" "for files, allowing them to be located in the build area rather than in an " "installed Python." msgstr "" +"Informe le module :mod:`distutils.sysconfig` qu'il est utilisé dans le cadre " +"du processus de compilation de Python. Cela change beaucoup d'emplacements " +"relatifs pour les fichiers, ce qui les place dans la zone de compilation " +"plutôt que dans un interpréteur Python installé." #: ../Doc/distutils/apiref.rst:1528 msgid ":mod:`distutils.text_file` --- The TextFile class" -msgstr "" +msgstr ":mod:`distutils.text_file` — La classe TextFile" #: ../Doc/distutils/apiref.rst:1534 msgid "" @@ -2079,6 +2738,9 @@ msgid "" "to text files that (optionally) takes care of stripping comments, ignoring " "blank lines, and joining lines with backslashes." msgstr "" +"Ce module fournit la classe :class:`TextFile`, qui donne une interface aux " +"fichiers texte qui s'occupe (optionnellement) de supprimer les commentaires, " +"d'ignorer les lignes vides et de joindre les lignes avec des antislash." #: ../Doc/distutils/apiref.rst:1541 msgid "" @@ -2089,6 +2751,14 @@ msgid "" "at end of line), strip leading and/or trailing whitespace. All of these are " "optional and independently controllable." msgstr "" +"Cette classe fournit un objet de type fichier qui se charge de tout ce que " +"vous voulez généralement faire lors du traitement d'un fichier texte ayant " +"une syntaxe ligne par ligne : Suppression des commentaires (tant que ``#`` " +"est votre caractère de commentaire), passer les lignes vides, joindre des " +"lignes adjacentes en échappant la nouvelle ligne (les lignes se terminant " +"par une antislash), supprime les espace blancs avant et après le texte etc. " +"Toutes ces fonctions sont optionnelles et peuvent être commandées " +"indépendamment." #: ../Doc/distutils/apiref.rst:1548 msgid "" @@ -2097,6 +2767,10 @@ msgid "" "question spans multiple physical lines. Also provides :meth:`unreadline` " "for implementing line-at-a-time lookahead." msgstr "" +"La classe fournit une méthode :meth:`warn` pour pouvoir générer des messages " +"d'avertissement qui renvoie le numéro de ligne physique, même si la ligne " +"logique en question couvre plusieurs lignes physiques. Fournit également :" +"meth:`unreadline` pour implémenter un système prospectif ligne par ligne." #: ../Doc/distutils/apiref.rst:1553 msgid "" @@ -2108,16 +2782,26 @@ msgid "" "messages. If *file* is not supplied, :class:`TextFile` creates its own " "using the :func:`open` built-in function." msgstr "" +"Les instances de :class:`TextFile` sont créées soit avec *filename*, soit " +"avec *file* ou bien les deux. :exc:`RuntimeError` est levé si les deux " +"valent ``None``. *filename* doit être une chaîne de caractères, et *file* un " +"objet fichier (ou quelque chose qui fournit les méthodes :meth:`readline` " +"et :meth:`close`). Il est recommandé de fournir au moins *filename*, afin " +"que :class:`TextFile` puisse l'inclure dans les messages d'avertissement. " +"Si *file* n'est pas fourni, :class:`TextFile` crée son propre fichier en " +"utilisant la fonction :func:`open`." #: ../Doc/distutils/apiref.rst:1561 msgid "" "The options are all boolean, and affect the values returned by :meth:" "`readline`" msgstr "" +"Les options sont toutes booléennes et affectent les valeurs renvoyées par :" +"meth:`readline`." #: ../Doc/distutils/apiref.rst:1566 msgid "option name" -msgstr "" +msgstr "Nom des options" #: ../Doc/distutils/apiref.rst:1566 msgid "default" @@ -2125,7 +2809,7 @@ msgstr "default" #: ../Doc/distutils/apiref.rst:1568 msgid "*strip_comments*" -msgstr "" +msgstr "*strip_comments*" #: ../Doc/distutils/apiref.rst:1568 msgid "" @@ -2140,11 +2824,12 @@ msgstr "*true*" #: ../Doc/distutils/apiref.rst:1574 msgid "*lstrip_ws*" -msgstr "" +msgstr "*lstrip_ws*" #: ../Doc/distutils/apiref.rst:1574 msgid "strip leading whitespace from each line before returning it" msgstr "" +"Efface les espaces blancs en début de chaque ligne avant de la renvoyer." #: ../Doc/distutils/apiref.rst:1574 ../Doc/distutils/apiref.rst:1592 #: ../Doc/distutils/apiref.rst:1603 @@ -2153,17 +2838,19 @@ msgstr "*false*" #: ../Doc/distutils/apiref.rst:1577 msgid "*rstrip_ws*" -msgstr "" +msgstr "*rstrip_ws*" #: ../Doc/distutils/apiref.rst:1577 msgid "" "strip trailing whitespace (including line terminator!) from each line before " "returning it." msgstr "" +"Efface les espaces blancs de fin de ligne (y compris le terminateur de " +"ligne !) de chaque ligne avant de la renvoyer." #: ../Doc/distutils/apiref.rst:1582 msgid "*skip_blanks*" -msgstr "" +msgstr "*skip_blanks*" #: ../Doc/distutils/apiref.rst:1582 msgid "" @@ -2172,10 +2859,14 @@ msgid "" "solely whitespace: these will \\*not\\* be skipped, even if *skip_blanks* is " "true.)" msgstr "" +"Ignore les lignes qui sont vides \\*après\\* la suppression des commentaires " +"et des espaces. (Si *lstrip_ws* et *rstrip_ws* sont tous les deux faux, " +"alors certaines lignes peuvent être composées uniquement d'espaces : elles " +"ne seront pas ignorées, même si *skip_blanks* est vrai." #: ../Doc/distutils/apiref.rst:1592 msgid "*join_lines*" -msgstr "" +msgstr "*join_lines*" #: ../Doc/distutils/apiref.rst:1592 msgid "" @@ -2184,16 +2875,23 @@ msgid "" "line; if N consecutive lines end with a backslash, then N+1 physical lines " "will be joined to form one logical line." msgstr "" +"Si sur la ligne, une antislash est le dernier caractère et que ce caractère " +"n'est pas le caractère de nouvelle ligne. Joint la ligne suivante pour " +"former une ligne logique. Si N lignes consécutives se terminent par une " +"antislash, alors N+1 lignes physiques seront liées pour former une seul " +"ligne logique." #: ../Doc/distutils/apiref.rst:1603 msgid "*collapse_join*" -msgstr "" +msgstr "*collapse_join*" #: ../Doc/distutils/apiref.rst:1603 msgid "" "strip leading whitespace from lines that are joined to their predecessor; " "only matters if ``(join_lines and not lstrip_ws)``" msgstr "" +"Supprime les espaces blancs des lignes qui sont jointes à leur prédécesseur. " +"n'est utile que que si ``(join_lines and not lstrip_ws)``." #: ../Doc/distutils/apiref.rst:1610 msgid "" @@ -2203,18 +2901,28 @@ msgid "" "for end-of-file: an empty string might just be a blank line (or an all-" "whitespace line), if *rstrip_ws* is true but *skip_blanks* is not." msgstr "" +"Notez que puisque *rstrip_ws* peut effacer la fin de la ligne, la sémantique " +"de :meth:`readline` doit être différente de celle de la méthode standard :" +"meth:`readline` des objets fichier ! En particulier, :meth:`readline` " +"renvoie ``None`` pour indiquer la fin du fichier: une chaîne vide peut être " +"juste une ligne blanche (ou une ligne entièrement blanche), si *rstrip_ws* " +"est vrai mais pas si *skip_blanks* est faux." #: ../Doc/distutils/apiref.rst:1619 msgid "" "Open a new file *filename*. This overrides any *file* or *filename* " "constructor arguments." msgstr "" +"Ouvre un nouveau fichier *filename*. Remplace tous les arguments du " +"constructeur *file* ou *filename*." #: ../Doc/distutils/apiref.rst:1625 msgid "" "Close the current file and forget everything we know about it (including the " "filename and the current line number)." msgstr "" +"Ferme le fichier courant et oublie toutes les informations connues à son " +"sujet (y compris le nom du fichier et le numéro de la ligne courante)." #: ../Doc/distutils/apiref.rst:1631 msgid "" @@ -2225,6 +2933,13 @@ msgid "" "may be a list or tuple to indicate a range of physical lines, or an integer " "for a single physical line." msgstr "" +"Affiche (vers *stderr*) un message d'avertissement lié à la ligne logique " +"courante dans le fichier courant. Si la ligne logique courante dans le " +"fichier s'étend sur plusieurs lignes physiques, l'avertissement se réfère à " +"une plage de lignes physiques, telles que ``\"lignes 3-5\"``. Si *line* est " +"fourni, il remplace le numéro de la ligne courante ; il peut s'agir d'une " +"liste ou d'un couple pour indiquer une plage de lignes physiques, ou d'un " +"entier pour une seule ligne physique." #: ../Doc/distutils/apiref.rst:1641 msgid "" @@ -2237,12 +2952,24 @@ msgid "" "end-of-file, since the empty string can occur if *rstrip_ws* is true but " "*strip_blanks* is not." msgstr "" +"Lit et renvoie une seule ligne logique à partir du fichier courant (ou à " +"partir d'un tampon interne si les lignes ont déjà été marqué comme non lue " +"avec :meth:`unreadline`). Si l'option *join_lines* est vraie, cela peut " +"impliquer la lecture de plusieurs lignes physiques concaténées en une seule " +"chaîne. Met à jour le numéro de la ligne courante. Appeler :meth:`warn` " +"après :meth:`readline` émet donc un avertissement sur la ou les lignes " +"physiques qui viennent d'être lues. Renvoie ``None`` à la fin du fichier, " +"puisque la chaîne vide peut se produire si *rstrip_ws* est vrai mais pas si " +"*strip_blanks* est faux." #: ../Doc/distutils/apiref.rst:1652 msgid "" "Read and return the list of all logical lines remaining in the current file. " "This updates the current line number to the last line of the file." msgstr "" +"Lit et renvoie la liste de toutes les lignes logiques restant dans le " +"fichier courant. Met à jour le numéro de la ligne courante à la dernière " +"ligne du fichier." #: ../Doc/distutils/apiref.rst:1658 msgid "" @@ -2254,18 +2981,28 @@ msgid "" "meth:`unreadline` before a call to :meth:`readline`, the lines will be " "returned most in most recent first order." msgstr "" +"Insère la ligne *line* (une chaîne de caractères) dans un tampon interne qui " +"sera vérifié par les futurs appels de :meth:`readline`. Utile pour " +"implémenter un analyseur prospectif ligne par ligne. Notez que les lignes " +"qui sont \"non lues\" avec :meth:`unreadline` ne sont ensuite pas traitées " +"de nouveau (espace blancs, ou autre) quand elles sont lues avec :meth:" +"`readline`. Si plusieurs appels sont faits à :meth:`unreadline` avant un " +"appel à :meth:`readline`, les lignes sont renvoyées dans l'ordre de la plus " +"récente première à la plus ancienne." #: ../Doc/distutils/apiref.rst:1667 msgid ":mod:`distutils.version` --- Version number classes" -msgstr "" +msgstr ":mod:`distutils.version` — Classes de numéros de version" #: ../Doc/distutils/apiref.rst:1682 msgid ":mod:`distutils.cmd` --- Abstract base class for Distutils commands" msgstr "" +":mod:`distutils.cmd` --- Classe de base abstraite pour les commandes " +"*Distutils*" #: ../Doc/distutils/apiref.rst:1689 msgid "This module supplies the abstract base class :class:`Command`." -msgstr "" +msgstr "Ce module fournit la classe de base abstraite :class:`Command`." #: ../Doc/distutils/apiref.rst:1694 msgid "" @@ -2282,6 +3019,19 @@ msgid "" "options, is the :meth:`run` method, which must also be implemented by every " "command class." msgstr "" +"Classe de base abstraite pour définir les classes de commandes, les " +"\"ouvrières\" de *Distutils*. Une analogie utile pour les classes de " +"commandes est de les considérer comme des sous-routines avec des variables " +"locales appelées *options*. Les options sont déclarées dans :meth:" +"`initialiser_options` et définies (compte tenu de leur valeur finale) dans :" +"meth:`finalize_options`, qui doivent être définies pour chaque classe de " +"commande. La distinction entre les deux est nécessaire parce que les " +"valeurs des options peuvent venir de l'extérieur (ligne de commande, fichier " +"de configuration, ....), et toutes les options dépendantes d'autres options " +"doivent être calculées après que ces options externes aient été traitées --- " +"ce qui explique :meth:`finalize_options`. Le corps de la sous-routine, où " +"s'effectue tout le travail est basé sur les valeurs de ses options, est la " +"méthode :meth:`run`, qui doit être implémentée par chaque classe de commande." #: ../Doc/distutils/apiref.rst:1707 msgid "" @@ -2293,11 +3043,12 @@ msgstr "" #: ../Doc/distutils/apiref.rst:1712 msgid "Creating a new Distutils command" -msgstr "" +msgstr "Créer une nouvelle commande *Distutils*" #: ../Doc/distutils/apiref.rst:1714 msgid "This section outlines the steps to create a new Distutils command." msgstr "" +"Cette section décrit les étapes pour créer une nouvelle commande *Distutils*." #: ../Doc/distutils/apiref.rst:1716 msgid "" @@ -2311,10 +3062,22 @@ msgid "" "command/peel_banana.py`, then edit it so that it's implementing the class :" "class:`peel_banana`, a subclass of :class:`distutils.cmd.Command`." msgstr "" +"Une nouvelle commande doit résider dans un module du package :mod:`distutils." +"command`. Il existe un exemple de modèle dans ce répertoire nommé :file:" +"`command_template`. Copiez ce fichier dans un nouveau module portant le même " +"nom que la nouvelle commande que vous implémentez. Ce module doit " +"implémenter une classe portant le même nom que le module (et la commande). " +"Par exemple, pour créer la commande ``peel_banana`` (afin que les " +"utilisateurs puissent exécuter ``setup.py peel_banana``), vous devez copier " +"le fichier :file:`commande_template` dans :file:`distutils/command/" +"peel_banana.py`, puis l'éditer pour qu'il implémente la classe :class:" +"`peel_banana`, une sous-classe de la classe :class:`distutils.cmd.Command`." #: ../Doc/distutils/apiref.rst:1726 msgid "Subclasses of :class:`Command` must define the following methods." msgstr "" +"Les sous-classes de la classe :class:`Command` doivent définir les méthodes " +"suivantes." #: ../Doc/distutils/apiref.rst:1730 msgid "" @@ -2325,6 +3088,13 @@ msgid "" "`initialize_options` implementations are just a bunch of ``self.foo = None`` " "assignments." msgstr "" +"Définit des valeurs par défaut pour toutes les options que cette commande " +"gère. Notez que ces valeurs par défaut peuvent être remplacées par d'autres " +"commandes, par le script d'installation, par des fichiers de configuration " +"ou par la ligne de commande. Ce n'est donc pas l'endroit idéal pour " +"introduire des dépendances entre les options. En règle générale, les " +"méthodes suivantes :meth:`initialize_options` ne font que des assignations " +"de type ``self.truc = None``." #: ../Doc/distutils/apiref.rst:1739 msgid "" @@ -2335,6 +3105,14 @@ msgid "" "safe to set *foo* from *bar* as long as *foo* still has the same value it " "was assigned in :meth:`initialize_options`." msgstr "" +"Définit les valeurs finales pour toutes les options que cette commande gère. " +"Cette méthode doit toujours être appelée le plus tard possible, c'est-à-dire " +"après que toutes les affectations des options de la ligne de commande ou que " +"d'autres commandes ont été faites. C'est donc l'endroit idéal pour " +"introduire des dépendances d'options : si *truc* dépend de *machin*, alors " +"il est sûr de mettre *truc* de *machin* aussi longtemps que *truc* a " +"toujours la même valeur qui lui a été attribué par :meth:" +"`initialize_options`." #: ../Doc/distutils/apiref.rst:1749 msgid "" @@ -2344,6 +3122,12 @@ msgid "" "files, and finalized in :meth:`finalize_options`. All terminal output and " "filesystem interaction should be done by :meth:`run`." msgstr "" +"La raison d'être d'une commande : exécuter l'action programmée en étant " +"contrôlée par les options initialisées dans :meth:`initialize_options`, " +"personnalisées par d'autres commandes, par le script de configuration, par " +"la ligne de commande et les fichiers de configuration, puis finalisée dans :" +"meth:`finalize_options`. Toutes les interactions avec le système de fichiers " +"et la sortie du terminal doivent être effectuées par :meth:`run`." #: ../Doc/distutils/apiref.rst:1758 msgid "" @@ -2358,6 +3142,16 @@ msgid "" "have any C header files to install.) If *predicate* is ``None``, that " "command is always applicable." msgstr "" +"*sub_commands* formalise la notion de \"famille\" de commandes, par exemple. " +"``install`` est le parent des sous-commandes ``install_lib``, " +"``install_headers``, etc. Le parent d'une famille de commandes définit " +"*sub_commands* en tant qu'attribut de classe ; c'est une liste de couples " +"``(command_name, predicate)``, avec *command_name* le nom de la commande et " +"*predicate* une fonction, une chaîne ou ``None``. *predicate* est une " +"méthode de la commande parent qui détermine si la commande correspondante " +"est applicable dans la situation actuelle. Par exemple : ``install_headers`` " +"n'est applicable que s'il existe des fichiers d'en-tête C à installer. Si " +"*predicate* est ``None``, cette commande est toujours effectuée." #: ../Doc/distutils/apiref.rst:1769 msgid "" @@ -2365,33 +3159,41 @@ msgid "" "predicates can be methods of the class, so they must already have been " "defined. The canonical example is the :command:`install` command." msgstr "" +"*sub_commands* est généralement défini à la *fin* d'une classe, car les " +"prédicats peuvent être des méthodes de la classe, ils doivent donc déjà " +"avoir été définis. L'exemple canonique est la commande :command:`install`." #: ../Doc/distutils/apiref.rst:1775 msgid ":mod:`distutils.command` --- Individual Distutils commands" -msgstr "" +msgstr ":mod:`distutils.command` — Commandes *Distutils* individuelles" #: ../Doc/distutils/apiref.rst:1786 msgid ":mod:`distutils.command.bdist` --- Build a binary installer" -msgstr "" +msgstr ":mod:`distutils.command.bdist` — Construit un installateur binaire" #: ../Doc/distutils/apiref.rst:1796 msgid "" ":mod:`distutils.command.bdist_packager` --- Abstract base class for packagers" msgstr "" +":mod:`distutils.command.bdist_packager` --- Classe de base abstraite pour " +"empaqueteurs" #: ../Doc/distutils/apiref.rst:1806 msgid ":mod:`distutils.command.bdist_dumb` --- Build a \"dumb\" installer" msgstr "" +":mod:`distutils.command.bdist_dumb` --- Construit un installateur passif " +"(*dumb*)" #: ../Doc/distutils/apiref.rst:1816 msgid "" ":mod:`distutils.command.bdist_msi` --- Build a Microsoft Installer binary " "package" msgstr "" +":mod:`distutils.command.bdist_msi` --- Construit un installateur Microsoft" #: ../Doc/distutils/apiref.rst:1823 msgid "Builds a `Windows Installer`_ (.msi) binary package." -msgstr "" +msgstr "Construit un installateur `Windows Installeur`_ (*.msi*)" #: ../Doc/distutils/apiref.rst:1827 msgid "" @@ -2400,39 +3202,53 @@ msgid "" "platforms, allows administrators to perform non-interactive installations, " "and allows installation through group policies." msgstr "" +"Dans la plupart des cas, l'installateur ``bdist_msi`` est un meilleur choix " +"que l'installateur ``bdist_wininst``, car il gère mieux les plates-formes " +"*Win64*, et permet en plus aux administrateurs d'effectuer des installations " +"non interactives ainsi que des installations via des stratégies de groupe." #: ../Doc/distutils/apiref.rst:1834 msgid "" ":mod:`distutils.command.bdist_rpm` --- Build a binary distribution as a " "Redhat RPM and SRPM" msgstr "" +":mod:`distutils.command.bdist_rpm` --- Construit une distribution binaire au " +"format Redhat RPM et SRPM" #: ../Doc/distutils/apiref.rst:1844 msgid ":mod:`distutils.command.bdist_wininst` --- Build a Windows installer" msgstr "" +":mod:`distutils.command.bdist_wininst` --- Construit un installateur Windows" #: ../Doc/distutils/apiref.rst:1854 msgid ":mod:`distutils.command.sdist` --- Build a source distribution" -msgstr "" +msgstr ":mod:`distutils.command.sdist` — Construit une distribution source" #: ../Doc/distutils/apiref.rst:1864 msgid ":mod:`distutils.command.build` --- Build all files of a package" msgstr "" +":mod:`distutils.command.build` --- Construit tous les fichiers d'un paquet" #: ../Doc/distutils/apiref.rst:1874 msgid "" ":mod:`distutils.command.build_clib` --- Build any C libraries in a package" msgstr "" +":mod:`distutils.command.build_clib` --- Construit toutes les bibliothèques C " +"d'un paquet" #: ../Doc/distutils/apiref.rst:1884 msgid "" ":mod:`distutils.command.build_ext` --- Build any extensions in a package" msgstr "" +":mod:`distutils.command.build_ext` --- Construit toutes les extensions d'un " +"paquet" #: ../Doc/distutils/apiref.rst:1894 msgid "" ":mod:`distutils.command.build_py` --- Build the .py/.pyc files of a package" msgstr "" +":mod:`distutils.command.build_py` --- Construit les fichiers *.py/.pyc* d'un " +"paquet" #: ../Doc/distutils/apiref.rst:1904 msgid "" @@ -2441,23 +3257,30 @@ msgid "" "setup.py file for a distribution that is designed to run with both Python 2." "x and 3.x, add::" msgstr "" +"Implémentation alternative de *build_py* qui exécute également la " +"bibliothèque de conversion *2to3* sur chaque fichier *.py* qui va être " +"installé. Pour l'utiliser dans un fichier *setup.py* pour une distribution " +"conçue pour fonctionner avec *Python 2.x* et *3.x*, ajouter ::" #: ../Doc/distutils/apiref.rst:1914 msgid "to your setup.py, and later::" -msgstr "" +msgstr "à votre *setup.py* et, plus tard ::" #: ../Doc/distutils/apiref.rst:1918 msgid "to the invocation of setup()." -msgstr "" +msgstr "à l'appel de *setup()*." #: ../Doc/distutils/apiref.rst:1922 msgid "" ":mod:`distutils.command.build_scripts` --- Build the scripts of a package" msgstr "" +":mod:`distutils.command.build_scripts` --- Construit les scripts d'un paquet" #: ../Doc/distutils/apiref.rst:1932 msgid ":mod:`distutils.command.clean` --- Clean a package build area" msgstr "" +":mod:`distutils.command.clean` --- Nettoie un dossier de compilation d'un " +"paquet" #: ../Doc/distutils/apiref.rst:1937 msgid "" @@ -2465,58 +3288,79 @@ msgid "" "subcommands, like intermediary compiled object files. With the ``--all`` " "option, the complete build directory will be removed." msgstr "" +"Cette commande supprime les fichiers temporaires créés par la commande :" +"command:`build` et ses sous-commandes, comme les fichiers objets compilés " +"intermédiaires. Avec l'option ``--all``, le répertoire de compilation sera " +"supprimé." #: ../Doc/distutils/apiref.rst:1941 msgid "" "Extension modules built :ref:`in place ` will " "not be cleaned, as they are not in the build directory." msgstr "" +"Les modules d'extension construits :ref:`sur place ` ne seront pas effacés, car ils ne sont pas dans le répertoire " +"*build*." #: ../Doc/distutils/apiref.rst:1946 msgid ":mod:`distutils.command.config` --- Perform package configuration" msgstr "" +":mod:`distutils.command.config` --- Effectue la configuration d'un paquet" #: ../Doc/distutils/apiref.rst:1956 msgid ":mod:`distutils.command.install` --- Install a package" -msgstr "" +msgstr ":mod:`distutils.command.install` — Installe un paquet" #: ../Doc/distutils/apiref.rst:1966 msgid "" ":mod:`distutils.command.install_data` --- Install data files from a package" msgstr "" +":mod:`distutils.command.install_data` --- Installe les fichiers de données " +"d'un paquet" #: ../Doc/distutils/apiref.rst:1976 msgid "" ":mod:`distutils.command.install_headers` --- Install C/C++ header files from " "a package" msgstr "" +":mod:`distutils.command.install_headers` --- Installe les fichiers d'en-tête " +"C/C++ d'un paquet" #: ../Doc/distutils/apiref.rst:1986 msgid "" ":mod:`distutils.command.install_lib` --- Install library files from a package" msgstr "" +":mod:`distutils.command.install_lib` --- Installe les fichiers de " +"bibliothèque à partir d'un paquet" #: ../Doc/distutils/apiref.rst:1996 msgid "" ":mod:`distutils.command.install_scripts` --- Install script files from a " "package" msgstr "" +":mod:`distutils.command.install_scripts` --- Installe les fichiers de script " +"d'un paquet" #: ../Doc/distutils/apiref.rst:2006 msgid "" ":mod:`distutils.command.register` --- Register a module with the Python " "Package Index" msgstr "" +":mod:`distutils.command.register` --- Enregistre un module dans l'Index des " +"paquets Python (*Python Package Index* ou *PyPI* en anglais)" #: ../Doc/distutils/apiref.rst:2012 msgid "" "The ``register`` command registers the package with the Python Package " "Index. This is described in more detail in :pep:`301`." msgstr "" +"La commande ``register`` enregistre le paquet dans l'index des paquets " +"Python. Plus de détails à ce sujet dans la :pep:`301`." #: ../Doc/distutils/apiref.rst:2019 msgid ":mod:`distutils.command.check` --- Check the meta-data of a package" msgstr "" +":mod:`distutils.command.check` --- Vérifie les méta-données d'un paquet" #: ../Doc/distutils/apiref.rst:2025 msgid "" @@ -2524,3 +3368,6 @@ msgid "" "example, it verifies that all required meta-data are provided as the " "arguments passed to the :func:`setup` function." msgstr "" +"La commande ``check`` effectue des tests sur les méta-données d'un paquet. " +"Par exemple, elle vérifie que toutes les méta-données requises sont fournies " +"lorsque les arguments sont passés à la fonction :func:`setup`." diff --git a/distutils/builtdist.po b/distutils/builtdist.po index 1a885c18d..9af98120e 100644 --- a/distutils/builtdist.po +++ b/distutils/builtdist.po @@ -33,9 +33,9 @@ msgstr "" "Une \"distribution compilée\" vous fait surement penser à un \"paquet binaire" "\" ou à un \"installateur\" (tout dépend de votre environnement). Ce n'est " "cependant pas forcément un binaire, il peut ne contenir que des sources " -"Python et/ou du byte-code; et nous n'appelons pas ça un *package* parce que " -"ce mot est déjà utiliseé dans Python (et \"installateur\" est un terme " -"spécifique au monde des systèmes de bureau). " +"Python et / ou du *byte-code* ; et nous n'appelons pas ça un *package* parce " +"que ce mot est déjà utilisé dans Python (et \"installateur\" est un terme " +"spécifique au monde des systèmes de bureau)." #: ../Doc/distutils/builtdist.rst:14 msgid "" @@ -51,15 +51,15 @@ msgid "" "as there are packagers." msgstr "" "Une distribution compilée est une manière de rendre la vie plus facile à " -"ceux qui installent votre module: pour les utilisateurs de système Linux " -"basé sur RPM, ce sera des binaire RPM; pour les utilisateurs de Windows, " -"c'est un installateur exécutable; pour les utilisateurs de Linux basé sur " -"Debian, c'est un paquet Debian; et ainsi de suite. Évidemment, personne " -"n'est capable de créer une distribution compilée pour toute les plateformes " +"ceux qui installent votre module : pour les utilisateurs de système Linux " +"basé sur RPM, ce sera des binaires RPM ; pour les utilisateurs de Windows, " +"c'est un installateur exécutable ; pour les utilisateurs de Linux basés sur " +"Debian, c'est un paquet Debian ; et ainsi de suite. Évidemment, personne " +"n'est capable de créer une distribution compilée pour toutes les plateformes " "existantes, donc Distutils est fait pour permettre aux développeurs de se " -"concentrer sur leurs spécialités---écrire du code et créer des distribution " -"source---pendant que d'autres, appelés *packagers* s'occupent de transformer " -"les sources en paquets pour chaques plateforme." +"concentrer sur leurs spécialités --- écrire du code et créer des " +"distributions source --- pendant que d'autres, appelés *packagers* " +"s'occupent de transformer les sources en paquets pour chaque plateforme." #: ../Doc/distutils/builtdist.rst:24 msgid "" @@ -71,13 +71,13 @@ msgid "" "are, a packager uses the setup script and the :command:`bdist` command " "family to generate built distributions." msgstr "" -"Bien sur, le développeur du module peut être son propre *packager*; ou le " +"Bien sur, le développeur du module peut être son propre *packager* ; ou le " "*packager* peut être un volontaire \"quelque part\" qui a accès à une " -"plateforme que le développeur initial n'a pas; ou bien un logiciel qui prend " -"les sources périodiquement et les transforme en une distribution compilée " -"pour autant de plateforme que le logiciel a accès. Peu importe qui ils " -"sont, les *packagers* utilisent ``setup.py`` et la command :command:`bdist` " -"afin de générer une distribution compilée." +"plateforme que le développeur initial n'a pas ; ou bien un logiciel qui " +"prend les sources périodiquement et les transforme en une distribution " +"compilée pour autant de plateforme que le logiciel a accès. Peu importe qui " +"ils sont, les *packagers* utilisent ``setup.py`` et la commande :command:" +"`bdist` afin de générer une distribution compilée." #: ../Doc/distutils/builtdist.rst:32 msgid "" @@ -85,7 +85,7 @@ msgid "" "tree::" msgstr "" "Pour prendre un exemple simple, si je lance la commande suivante dans les " -"sources de Distutils ::" +"sources de Distutils ::" #: ../Doc/distutils/builtdist.rst:37 msgid "" @@ -97,13 +97,13 @@ msgid "" "considered \"dumb\" because it has to be unpacked in a specific location to " "work.)" msgstr "" -"alors Distutils construit ma distribution du module (Distutils lui même dans " +"alors Distutils construit ma distribution du module (Distutils lui-même dans " "ce cas), fait une \"fausse\" installation (aussi dans le dossier :file:" "`build`) et crée le type de distribution compilée par défaut pour ma " -"plateforme. Le format par défaut est un \"bête\" fichier tar pour Unix et un " -"simple installateur exécutable pour Windows (ce fichier tar est considéré " -"comme \"bête\" car il doit être décompressé à un endroit précis pour " -"fonctionner)." +"plateforme. Le format par défaut est un \"bête\" fichier *tar* pour Unix et " +"un simple installateur exécutable pour Windows (ce fichier *tar* est " +"considéré comme \"bête\" car il doit être décompressé à un endroit précis " +"pour fonctionner)." #: ../Doc/distutils/builtdist.rst:44 msgid "" @@ -116,12 +116,12 @@ msgid "" "distributions relative to :file:`{prefix}`.)" msgstr "" "Par conséquent, la commande si dessus crée le fichier :file:`Distutils-1.0." -"{plat}.tar.gz` sur les systèmes Unix; décompresser cette tarball au bon " -"endroit installe Distutils exactement comme si vous aviez téléchargé la " +"{plat}.tar.gz` sur les systèmes Unix ; décompresser cette archive *tar* au " +"bon endroit installe Distutils exactement comme si vous aviez téléchargé la " "distribution source et lancé ``python setup.py install`` (le \"bon endroit\" " "est soit la racine du système de fichier, ou le dossier de Python :file:" "`{prefix}`, tout dépend des options données à la commande :command:" -"`bdist_dumb` ;la valeur par défaut est de créer une distribution \"bête\" " +"`bdist_dumb` ; la valeur par défaut est de créer une distribution \"bête\" " "relative à :file:`{prefix}`)." #: ../Doc/distutils/builtdist.rst:52 @@ -139,7 +139,7 @@ msgstr "" "distribution non-pure qui inclut des extensions qui devraient être " "compilées, ça peut faire la différence entre quelqu'un qui sera capable " "d'utiliser votre extension, ou non. De plus créer une distribution compilée " -"\"intelligente\" tel qu'un paquet RPM ou un installateur executable Windows, " +"\"intelligente\" tel qu'un paquet RPM ou un installateur exécutable Windows, " "est bien plus pratique pour les utilisateurs, même si votre module n'inclut " "aucune extension." @@ -149,6 +149,9 @@ msgid "" "the :command:`sdist` command, which you can use to select the types of built " "distribution to generate: for example, ::" msgstr "" +"La commande :command:`bdist` a l'option :option:`!--formats`, similaire à la " +"commande :command:`sdist`, que vous pouvez utiliser pour sélectionner le " +"type de distribution compilée à générer : par exemple, ::" #: ../Doc/distutils/builtdist.rst:66 msgid "" @@ -156,13 +159,13 @@ msgid "" "---again, this archive would be unpacked from the root directory to install " "the Distutils." msgstr "" -"aurait, quand lancé sur un système Unix, crée file:`Distutils-1.0.{plat}.zip`" -"\\ ---à nouveau, cette archive devra être décompressé depuis la racine pour " -"installer Distutils." +"serait, lors d'une exécution sur un système Unix, crée :file:`Distutils-1.0." +"{plat}.zip`\\ ---à nouveau, cette archive devra être décompressé depuis la " +"racine pour installer Distutils." #: ../Doc/distutils/builtdist.rst:70 msgid "The available formats for built distributions are:" -msgstr "Les formats disponible pour les distributions compilées sont:" +msgstr "Les formats disponibles pour les distributions compilées sont :" #: ../Doc/distutils/builtdist.rst:73 msgid "Format" @@ -182,7 +185,7 @@ msgstr "``gztar``" #: ../Doc/distutils/builtdist.rst:75 msgid "gzipped tar file (:file:`.tar.gz`)" -msgstr "Fichier tar gzippé (:file:`.tar.gz`)" +msgstr "fichier *tar* *gzippé* (:file:`.tar.gz`)" #: ../Doc/distutils/builtdist.rst:75 msgid "\\(1)" @@ -194,7 +197,7 @@ msgstr "``bztar``" #: ../Doc/distutils/builtdist.rst:78 msgid "bzipped tar file (:file:`.tar.bz2`)" -msgstr "fichier tar de type bzipped (:file:`.tar.bz2`)" +msgstr "fichier *tar* de type *bzipped* (:file:`.tar.bz2`)" #: ../Doc/distutils/builtdist.rst:81 msgid "``xztar``" @@ -202,7 +205,7 @@ msgstr "``xztar``" #: ../Doc/distutils/builtdist.rst:81 msgid "xzipped tar file (:file:`.tar.xz`)" -msgstr "fichier tar de type xzipped (:file:`.tar.xz`)" +msgstr "fichier *tar* de type *xzipped* (:file:`.tar.xz`)" #: ../Doc/distutils/builtdist.rst:84 msgid "``ztar``" @@ -210,7 +213,7 @@ msgstr "``ztar``" #: ../Doc/distutils/builtdist.rst:84 msgid "compressed tar file (:file:`.tar.Z`)" -msgstr "Fichier tar compressé (:file:`.tar.Z`)" +msgstr "fichier *tar* compressé par *compress* (:file:`.tar.Z`)" #: ../Doc/distutils/builtdist.rst:84 msgid "\\(3)" @@ -222,7 +225,7 @@ msgstr "``tar``" #: ../Doc/distutils/builtdist.rst:87 msgid "tar file (:file:`.tar`)" -msgstr "Fichier tar (:file:`.tar`)" +msgstr "fichier *tar* (:file:`.tar`)" #: ../Doc/distutils/builtdist.rst:89 msgid "``zip``" @@ -230,7 +233,7 @@ msgstr "``zip``" #: ../Doc/distutils/builtdist.rst:89 msgid "zip file (:file:`.zip`)" -msgstr "Fichier zip (:file:`.zip`)" +msgstr "fichier *zip* (:file:`.zip`)" #: ../Doc/distutils/builtdist.rst:89 msgid "(2),(4)" @@ -270,7 +273,7 @@ msgstr "``wininst``" #: ../Doc/distutils/builtdist.rst:97 msgid "self-extracting ZIP file for Windows" -msgstr "Fichier zip auto-extracteur Windows" +msgstr "fichier zip auto-extracteur Windows" #: ../Doc/distutils/builtdist.rst:97 msgid "\\(4)" @@ -282,27 +285,27 @@ msgstr "``msi``" #: ../Doc/distutils/builtdist.rst:100 msgid "Microsoft Installer." -msgstr "Installateur Microsoft" +msgstr "Installateur Microsoft." #: ../Doc/distutils/builtdist.rst:103 msgid "Added support for the ``xztar`` format." -msgstr "Ajout du support des fichiers ``xztar``" +msgstr "Ajout du support des fichiers ``xztar``." #: ../Doc/distutils/builtdist.rst:107 msgid "Notes:" -msgstr "Notes : " +msgstr "Notes :" #: ../Doc/distutils/builtdist.rst:110 msgid "default on Unix" -msgstr "Par défaut sur Unix" +msgstr "par défaut sur Unix" #: ../Doc/distutils/builtdist.rst:113 msgid "default on Windows" -msgstr "Par défaut sur Windows" +msgstr "par défaut sur Windows" #: ../Doc/distutils/builtdist.rst:116 msgid "requires external :program:`compress` utility." -msgstr "requires external :program:`compress` utility." +msgstr "nécessite un programme externe :program:`compress`." #: ../Doc/distutils/builtdist.rst:119 msgid "" @@ -317,7 +320,7 @@ msgid "" "requires external :program:`rpm` utility, version 3.0.4 or better (use ``rpm " "--version`` to find out which version you have)" msgstr "" -"nécessite un programme externe :program:`rpm` , version 3.0.4 ou mieux " +"nécessite un programme externe :program:`rpm`, version 3.0.4 ou mieux " "(utilisez ``rpm --version`` pour connaître quelle version vous avez)" #: ../Doc/distutils/builtdist.rst:126 @@ -331,10 +334,19 @@ msgid "" "`bdist_rpm` generates both binary and source RPMs. The :command:`bdist` sub-" "commands, and the formats generated by each, are:" msgstr "" +"Vous ne devez pas utiliser la commande :command:`bdist` avec l'option :" +"option:`!--formats` ; Vous pouvez également utiliser la commande qui " +"implémente directement le format qui vous intéresse. Certaines de ces \"sous-" +"commandes\" :command:`bdist` génèrent plusieurs formats similaires ; par " +"exemple, La commande :command:`bdist_dumb` génère les archives aux formats " +"\"bêtes\" (``tar``, ``gztar``, ``bztar``, ``xztar``, ``ztar``, et ``zip``), " +"et :command:`bdist_rpm` génère les binaires RPM et ainsi que les sources. " +"Les sous-commandes :command:`bdist`, et les formats générés par chacun, " +"sont :" #: ../Doc/distutils/builtdist.rst:136 msgid "Command" -msgstr "Command" +msgstr "Commande" #: ../Doc/distutils/builtdist.rst:136 msgid "Formats" @@ -378,7 +390,7 @@ msgid "" "commands." msgstr "" "Le chapitre suivant donne des détails individuel sur les commandes :command:" -"`bdist_\\*` " +"`bdist_\\*`." #: ../Doc/distutils/builtdist.rst:163 msgid "Creating RPM packages" @@ -408,11 +420,11 @@ msgid "" "command:`bdist_rpm` command::" msgstr "" "La manière habituelle de créer un RPM de votre module est d'utiliser la " -"commande :command:`bdist_rpm`::" +"commande :command:`bdist_rpm` ::" #: ../Doc/distutils/builtdist.rst:177 msgid "or the :command:`bdist` command with the :option:`!--format` option::" -msgstr "" +msgstr "ou la commande :command:`bdist` avec l'option :option:`!--format` ::" #: ../Doc/distutils/builtdist.rst:181 msgid "" @@ -421,10 +433,10 @@ msgid "" "you can explicitly specify multiple :command:`bdist_\\*` commands and their " "options::" msgstr "" -"La première vous permet de spécifier des options spécifique à RPM; la " -"dernière vous permet de spécifier plusieurs format d'un seul coup. Si vous " +"La première vous permet de spécifier des options spécifiques à RPM ; la " +"dernière vous permet de spécifier plusieurs formats d'un seul coup. Si vous " "avez besoin d'utiliser les deux, vous pouvez explicitement spécifier " -"plusieurs commande :command:`bdist_\\*` et leurs options." +"plusieurs commandes :command:`bdist_\\*` et leurs options ::" #: ../Doc/distutils/builtdist.rst:188 msgid "" @@ -435,13 +447,13 @@ msgid "" "any Distutils configuration files. Various options and sections in the :" "file:`.spec` file are derived from options in the setup script as follows:" msgstr "" -"La création de Package RPM est configurée par une fichier :file:`.spec`, un " -"peu comme Distutils est configuré par script setup. Pour vous faciliter la " -"tâche, la commande :command:`bdist_rpm` crée normalement un fichier :file:`." -"spec` basé sur les informations que vous fournissez dans ``setup.py``, dans " +"La création de Package RPM est configurée par un fichier :file:`.spec`, un " +"peu comme Distutils est configuré par script *setup.py*. Pour vous faciliter " +"la tâche, la commande :command:`bdist_rpm` crée normalement un fichier :file:" +"`.spec` basé sur les informations que vous fournissez dans *setup.py*, dans " "les options de la ligne de commande et dans la configuration de Distutils. " "Beaucoup d'options du fichier :file:`.spec` sont dérivées des options du " -"script de préparation suivant :" +"script de préparation suivant :" #: ../Doc/distutils/builtdist.rst:196 ../Doc/distutils/builtdist.rst:220 msgid "RPM :file:`.spec` file option or section" @@ -469,7 +481,7 @@ msgstr "``description``" #: ../Doc/distutils/builtdist.rst:202 msgid "Version" -msgstr "*Version*" +msgstr "Version" #: ../Doc/distutils/builtdist.rst:202 msgid "``version``" @@ -477,7 +489,7 @@ msgstr "``version``" #: ../Doc/distutils/builtdist.rst:204 ../Doc/distutils/builtdist.rst:227 msgid "Vendor" -msgstr "*vendor*" +msgstr "Vendor" #: ../Doc/distutils/builtdist.rst:204 msgid "" @@ -497,7 +509,7 @@ msgstr "``license``" #: ../Doc/distutils/builtdist.rst:210 msgid "Url" -msgstr "*Url*" +msgstr "Url" #: ../Doc/distutils/builtdist.rst:210 msgid "``url``" @@ -519,15 +531,15 @@ msgid "" msgstr "" "De plus, il y a beaucoup d'options dans le fichier :file:`.spec` qui n'ont " "aucun équivalent dans le script de préparation. La plupart de celles ci sont " -"gérées par les options de la commande :command:`bdist_rpm` suivant:" +"gérées par les options de la commande :command:`bdist_rpm` suivant :" #: ../Doc/distutils/builtdist.rst:220 msgid ":command:`bdist_rpm` option" -msgstr "Option de :command:`bdist_rpm` " +msgstr "Option de :command:`bdist_rpm`" #: ../Doc/distutils/builtdist.rst:220 msgid "default value" -msgstr "Valeur par défaut" +msgstr "valeur par défaut" #: ../Doc/distutils/builtdist.rst:223 msgid "Release" @@ -543,7 +555,7 @@ msgstr "\"1\"" #: ../Doc/distutils/builtdist.rst:225 msgid "Group" -msgstr "*Group*" +msgstr "Group" #: ../Doc/distutils/builtdist.rst:225 msgid "``group``" @@ -563,7 +575,7 @@ msgstr "(voir au-dessus)" #: ../Doc/distutils/builtdist.rst:229 msgid "Packager" -msgstr "*Packager*" +msgstr "Packager" #: ../Doc/distutils/builtdist.rst:229 msgid "``packager``" @@ -578,7 +590,7 @@ msgstr "(none)" #: ../Doc/distutils/builtdist.rst:231 msgid "Provides" -msgstr "*Provides*" +msgstr "Provides" #: ../Doc/distutils/builtdist.rst:231 msgid "``provides``" @@ -586,7 +598,7 @@ msgstr "``provides``" #: ../Doc/distutils/builtdist.rst:233 msgid "Requires" -msgstr "*Requires*" +msgstr "Requires" #: ../Doc/distutils/builtdist.rst:233 msgid "``requires``" @@ -594,7 +606,7 @@ msgstr "``requires``" #: ../Doc/distutils/builtdist.rst:235 msgid "Conflicts" -msgstr "*Conflicts*" +msgstr "Conflicts" #: ../Doc/distutils/builtdist.rst:235 msgid "``conflicts``" @@ -602,7 +614,7 @@ msgstr "``conflicts``" #: ../Doc/distutils/builtdist.rst:237 msgid "Obsoletes" -msgstr "*Obsoletes*" +msgstr "Obsoletes" #: ../Doc/distutils/builtdist.rst:237 msgid "``obsoletes``" @@ -610,7 +622,7 @@ msgstr "``obsoletes``" #: ../Doc/distutils/builtdist.rst:239 msgid "Distribution" -msgstr "*Distribution*" +msgstr "Distribution" #: ../Doc/distutils/builtdist.rst:239 msgid "``distribution_name``" @@ -618,7 +630,7 @@ msgstr "``distribution_name``" #: ../Doc/distutils/builtdist.rst:241 msgid "BuildRequires" -msgstr "*BuildRequires*" +msgstr "BuildRequires" #: ../Doc/distutils/builtdist.rst:241 msgid "``build_requires``" @@ -626,7 +638,7 @@ msgstr "``build_requires``" #: ../Doc/distutils/builtdist.rst:243 msgid "Icon" -msgstr "*Icon*" +msgstr "Icon" #: ../Doc/distutils/builtdist.rst:243 msgid "``icon``" @@ -643,6 +655,14 @@ msgid "" "disable this file, you can pass the :option:`!--no-user-cfg` option to :file:" "`setup.py`." msgstr "" +"Fournir ces options en ligne de commande est fastidieux et sujet à des " +"erreurs, il est donc recommandé de les mettre dans un fichier de " +"configuration. :file:`setup.cfg`\\ --- voir la section :ref:`setup-config`. " +"Si vous distribuez ou empaquetez beaucoup de modules de distribution Python, " +"vous pourriez vouloir mettre les options qui s'appliquent à tous vos projets " +"dans votre fichier de configuration personnel Distutils (:file:`~/." +"pydistutils.cfg`). Si vous voulez temporairement désactiver ce fichier, vous " +"pouvez passer l'option :option:`!--no-user-cfg` à :file:`setup.py`." #: ../Doc/distutils/builtdist.rst:254 msgid "" @@ -650,7 +670,7 @@ msgid "" "handled automatically by the Distutils:" msgstr "" "La création de binaire RPM se fait en trois étapes, chacune gérée " -"automatiquement par Distutils:" +"automatiquement par Distutils :" #: ../Doc/distutils/builtdist.rst:257 msgid "" @@ -658,20 +678,20 @@ msgid "" "Distutils setup script; in fact, much of the information in the setup " "script winds up in the :file:`.spec` file)" msgstr "" -"Créer un fichier :file:`.spec` qui décrira le paquet (comme le script de " +"crée un fichier :file:`.spec` qui décrit le paquet (comme le script de " "préparation Distutils, en réalité la plupart des informations du script de " "préparation se retrouve dans le fichier :file:`.spec`)" #: ../Doc/distutils/builtdist.rst:261 msgid "create the source RPM" -msgstr "creer un RPM source" +msgstr "crée un RPM source" #: ../Doc/distutils/builtdist.rst:263 msgid "" "create the \"binary\" RPM (which may or may not contain binary code, " "depending on whether your module distribution contains Python extensions)" msgstr "" -"Créer le RPM \"binaire\" (qui peut ou non contenir des binaires, tout dépend " +"crée le RPM \"binaire\" (qui peut ou non contenir des binaires, tout dépend " "de si votre module contiens des extensions)" #: ../Doc/distutils/builtdist.rst:266 @@ -679,7 +699,7 @@ msgid "" "Normally, RPM bundles the last two steps together; when you use the " "Distutils, all three steps are typically bundled together." msgstr "" -"Normalement, RPM réunit les deux dernières étapes ensemble; quand vous " +"Normalement, RPM réunit les deux dernières étapes ensemble ; quand vous " "utilisez Distutils, les trois étapes sont regroupées." #: ../Doc/distutils/builtdist.rst:269 @@ -692,6 +712,14 @@ msgid "" "winds up deep in the \"build tree,\" in a temporary directory created by :" "command:`bdist_rpm`.)" msgstr "" +"Si vous le souhaitez, vous pouvez séparer ces trois étapes. Vous pouvez " +"utiliser l'option :option:`!--spec-only` pour faire en sorte que la " +"commande :command:`bdist_rpm` crée juste le fichier :file:`.spec` et " +"quitte ; dans ce cas, le fichier :file:`.spec` sera écrit dans le dossier de " +"distribution (\"*distribution directory*\") --- normalement :file:`dist/`, " +"mais personnalisable avec l'option :option:`!--dist-dir`. (Normalement, le " +"fichier :file:`.spec` se retrouve profondément enfoui dans l'arborescence, " +"dans un dossier temporaire créé par la commande :command:`bdist_rpm`.)" #: ../Doc/distutils/builtdist.rst:297 msgid "Creating Windows Installers" @@ -705,7 +733,7 @@ msgid "" "metadata in the setup script, let the user select a few options, and start " "or cancel the installation." msgstr "" -"Les installateurs exécutable sont le format naturel pour les distributions " +"Les installateurs exécutables sont le format naturel pour les distributions " "sur Windows. Ils affichent une jolie interface graphique, montrent quelques " "informations à propos du module qui va être installé, tiré des métadonnées " "dans le script de préparation, laisse l'utilisateur choisir quelques options " @@ -716,12 +744,12 @@ msgid "" "Since the metadata is taken from the setup script, creating Windows " "installers is usually as easy as running::" msgstr "" -"Etant donné que les métadonnées sont tirées du script de préparation, créer " -"un installateur Windows est généralement facile, il suffit de lancer::" +"Étant donné que les métadonnées sont tirées du script de préparation, créer " +"un installateur Windows est généralement facile, il suffit de lancer ::" #: ../Doc/distutils/builtdist.rst:310 msgid "or the :command:`bdist` command with the :option:`!--formats` option::" -msgstr "" +msgstr "ou la commande :command:`bdist` avec l'option :option:`!--formats` ::" #: ../Doc/distutils/builtdist.rst:314 msgid "" @@ -757,6 +785,11 @@ msgid "" "`bdist_wininst` command with the :option:`!--no-target-compile` and/or the :" "option:`!--no-target-optimize` option." msgstr "" +"L'installeur essaiera de compiler les modules purs en :term:`bytecode` après " +"installation sur le système cible dans les modes normaux et optimisé. Si " +"vous ne voulez pas que ce soit fait, vous pouvez lancer la commande :command:" +"`bdist_wininst` avec l'option :option:`!--no-target-compile` et/ou l'option :" +"option:`!--no-target-optimize`." #: ../Doc/distutils/builtdist.rst:331 msgid "" @@ -764,6 +797,9 @@ msgid "" "it is run, but you can also supply your own 152x261 bitmap which must be a " "Windows :file:`.bmp` file with the :option:`!--bitmap` option." msgstr "" +"Par défaut l'installateur affichera le super logo \"Python Powered\", mais " +"vous pouvez aussi donnez votre propre bitmap de 152x261 qui doit être un " +"fichier :file:`.bmp` Windows avec l'option :option:`!--bitmap`." #: ../Doc/distutils/builtdist.rst:335 msgid "" @@ -772,6 +808,10 @@ msgid "" "distribution and the version number. This can be changed to another text by " "using the :option:`!--title` option." msgstr "" +"L'installateur affichera aussi un grand titre en arrière plan de la fenêtre " +"quand exécuté, qui est composé du nom de votre distribution et du numéro de " +"version. Cela peut être changé avec un autre texte avec l'option :option:`!--" +"title`." #: ../Doc/distutils/builtdist.rst:340 msgid "" @@ -779,6 +819,9 @@ msgid "" "normally :file:`dist/`, but customizable with the :option:`!--dist-dir` " "option." msgstr "" +"Le fichier d'installation sera écrit dans le dossier de distribution " +"(\"*distribution directory*\") --- normalement :file:`dist/`, mais " +"personnalisable avec l'option :option:`!--dist-dir`." #: ../Doc/distutils/builtdist.rst:346 msgid "Cross-compiling on Windows" @@ -791,7 +834,7 @@ msgid "" "installed, you can use a 32bit version of Windows to create 64bit extensions " "and vice-versa." msgstr "" -"Depuis Python 2.6, distutils est capable de compiler pour toute les " +"Depuis Python 2.6, *distutils* est capable de compiler pour toutes les " "plateformes de Windows. En pratique, cela signifie qu'avec les bons outils " "installés, vous pouvez utiliser une version 32 bits de Windows pour créer " "une extension 64 bits et vice-versa." @@ -809,16 +852,16 @@ msgid "" "to build a 64bit version of your extension. The Windows Installers also " "support this option, so the command::" msgstr "" -"Pour construire une version 64 bits de votre module. L'installateur Windows " -"supporte aussi cette option, donc la commande::" +"pour construire une version 64 bits de votre module. L'installateur Windows " +"supporte aussi cette option, donc la commande ::" #: ../Doc/distutils/builtdist.rst:364 msgid "" "would create a 64bit installation executable on your 32bit version of " "Windows." msgstr "" -"créera un installateur executable 64 bits depuis votre version 32 bits de " -"Windows. " +"créera un installateur exécutable 64 bits depuis votre version 32 bits de " +"Windows." #: ../Doc/distutils/builtdist.rst:366 msgid "" @@ -848,9 +891,9 @@ msgid "" "to check or modify your existing install.)" msgstr "" "Remarquez que par défaut Visual Studio 2008 n'installe pas les outils et " -"compilateur 64 bits. Vous devrez peut être re-executer le processus " -"d'installation et sélectionner ces outils (utiliser le Panneau de Contrôle-" -">[Ajouter/Supprimer] est un bon moyen de vérifier ou modifier votre " +"compilateur 64 bits. Vous devrez peut-être ré-exécuter le processus " +"d'installation et sélectionner ces outils (utiliser le *Panneau de Contrôle -" +"> [Ajouter/Supprimer]* est un bon moyen de vérifier ou modifier votre " "installation existante.)" #: ../Doc/distutils/builtdist.rst:383 @@ -864,6 +907,9 @@ msgid "" "specified, and the script filename must also be listed in the scripts " "argument to the setup function." msgstr "" +"Depuis Python 2.3, un script post-installation peut être spécifié avec " +"l'option :option:`!--install-script`. Le nom du script doit être spécifié et " +"présent dans l'argument \"scripts\" de la fonction ``setup``." #: ../Doc/distutils/builtdist.rst:390 msgid "" @@ -872,6 +918,11 @@ msgid "" "again at uninstallation time before the files are removed with ``argv[1]`` " "set to :option:`!-remove`." msgstr "" +"Ce script doit être lancé au moment de l'installation sur le système cible " +"après que tous les fichiers ont été copiés, avec la valeur de ``argv[1]`` " +"à :option:`!-install`, et une autre fois durant la désinstallation avant " +"que les fichiers soient supprimés avec la valeur de ``argv[1]`` à :option:`!-" +"remove`." #: ../Doc/distutils/builtdist.rst:395 msgid "" @@ -888,8 +939,8 @@ msgid "" "Some functions especially useful in this context are available as additional " "built-in functions in the installation script." msgstr "" -"certaines fonctions spécialement utiles dans ce contexte sont disponibles " -"comme fonctions intégrées additionnelles dans le script d'installation." +"Certaines fonctions spécialement utiles dans ce contexte sont disponibles " +"comme fonctions natives additionnelles dans le script d'installation." #: ../Doc/distutils/builtdist.rst:406 msgid "" @@ -900,7 +951,7 @@ msgid "" msgstr "" "Ces fonctions peuvent être appelées lorsqu'un répertoire ou un fichier est " "crée par le script de post installation au moment de l'installation. Cela va " -"enregistrer le *chemin* avec le des-installeur, de sorte qu'il soit retiré " +"enregistrer le *chemin* avec le des-installateur, de sorte qu'il soit retiré " "lors de la des-installation de la distribution. pour être sûr, les " "répertoires sont uniquement retirés s'ils sont vides." @@ -913,7 +964,7 @@ msgstr "" "Cette fonction peut être utilisée pour extraire des localisations de " "fichiers spéciaux sous Windows comme un menu démarrer ou le Bureau. Cela " "renvoie le chemin complet pour le fichier. *csidl_string* doit être unes des " -"chaines suivantes::" +"chaines suivantes ::" #: ../Doc/distutils/builtdist.rst:434 msgid "If the folder cannot be retrieved, :exc:`OSError` is raised." @@ -946,12 +997,12 @@ msgstr "" "spécifie les arguments de la ligne de commande, si existant. *cheminRep* est " "le répertoire de travail pour le programme. *cheminIcone* est le fichier " "contenant l’icône pour le raccourci, et *IndexIcone* est l'index pour " -"l’icône dans le fichier *cheminIcone*. Encore, pour les details consulter la " +"l’icône dans le fichier *cheminIcone*. Encore, pour les détails consulter la " "documentation Microsoft pour l'interface :class:`ILienShell`." #: ../Doc/distutils/builtdist.rst:454 msgid "Vista User Access Control (UAC)" -msgstr "Controle d'accès utilisateur Vista (UAC)" +msgstr "Contrôle d'accès utilisateur Vista (UAC)" #: ../Doc/distutils/builtdist.rst:456 msgid "" @@ -961,3 +1012,9 @@ msgid "" "Python was installed for all users) and 'force' (meaning always prompt for " "elevation)." msgstr "" +"Depuis Python 2.6, *bdist_wininst* accepte une option :option:`!--user-" +"access-control`. Sa valeur par défaut est 'none' (Ce qui veut dire que aucun " +"UAC est fait), et les autres valeurs valides sont 'auto' (ce qui veut dire " +"qu'il faut demander une élévation de privilèges UAC si Python a été installé " +"pour tous les utilisateurs) et 'force' (Toujours demander une élévation de " +"privilèges)." diff --git a/distutils/commandref.po b/distutils/commandref.po index 5638b174f..bd8dd6869 100644 --- a/distutils/commandref.po +++ b/distutils/commandref.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-04-02 22:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2018-03-21 00:48+0100\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: fr\n" @@ -41,7 +41,8 @@ msgstr ":command:`install_data`" #: ../Doc/distutils/commandref.rst:37 msgid "This command installs all data files provided with the distribution." -msgstr "Cette commande installe tout les fichier fournit avec la distribution" +msgstr "" +"Cette commande installe tous les fichiers fournis avec la distribution." #: ../Doc/distutils/commandref.rst:43 msgid ":command:`install_scripts`" @@ -49,11 +50,12 @@ msgstr ":command:`install_scripts`" #: ../Doc/distutils/commandref.rst:45 msgid "This command installs all (Python) scripts in the distribution." -msgstr "Cette commande installe tout les scripts (Python) dans la distribution" +msgstr "" +"Cette commande installe tout les scripts (Python) dans la distribution." #: ../Doc/distutils/commandref.rst:54 msgid "Creating a source distribution: the :command:`sdist` command" -msgstr "Créer une distribution source: la commande :command:`sdist` " +msgstr "Créer une distribution source: la commande :command:`sdist`" #: ../Doc/distutils/commandref.rst:58 msgid "The manifest template commands are:" @@ -61,7 +63,7 @@ msgstr "Les commandes du modèle manifeste sont :" #: ../Doc/distutils/commandref.rst:61 msgid "Command" -msgstr "Command" +msgstr "Commande" #: ../Doc/distutils/commandref.rst:61 msgid "Description" @@ -90,7 +92,7 @@ msgstr ":command:`recursive-include dir pat1 pat2 ...`" #: ../Doc/distutils/commandref.rst:69 msgid "include all files under *dir* matching any of the listed patterns" msgstr "" -"inclut récurssivement tous les fichiers sous *dir* ressemblant aux modèles " +"inclut récursivement tous les fichiers sous *dir* ressemblant aux modèles " "listés" #: ../Doc/distutils/commandref.rst:72 @@ -148,7 +150,7 @@ msgid "" "filename character\" is platform-specific: on Unix it is anything except " "slash; on Windows anything except backslash or colon." msgstr "" -"Les modèles sont de style Unix \"glob\": ``*`` correspond à n'importe quelle " +"Les modèles sont de style Unix *glob* : ``*`` correspond à n'importe quelle " "chaîne de caractères d'un nom de fichier valide, ``?`` correspond à un seul " "caractère d'un nom de fichier valide et ``[range]`` correspond à n'importe " "quel caractère dans la *range* (e.g., ``a-z``, ``a-zA-Z``, ``a-f0-9_.``). " diff --git a/distutils/configfile.po b/distutils/configfile.po index e05e3e941..2daae7c87 100644 --- a/distutils/configfile.po +++ b/distutils/configfile.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-10 00:49+0200\n" +"POT-Creation-Date: 2018-04-29 00:24+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -64,10 +64,10 @@ msgid "" msgstr "" #: ../Doc/distutils/configfile.rst:39 -msgid "The basic syntax of the configuration file is simple::" +msgid "The basic syntax of the configuration file is simple:" msgstr "" -#: ../Doc/distutils/configfile.rst:45 +#: ../Doc/distutils/configfile.rst:47 msgid "" "where *command* is one of the Distutils commands (e.g. :command:`build_py`, :" "command:`install`), and *option* is one of the options that command " @@ -78,37 +78,37 @@ msgid "" "by indenting the continuation lines." msgstr "" -#: ../Doc/distutils/configfile.rst:53 +#: ../Doc/distutils/configfile.rst:55 msgid "" "You can find out the list of options supported by a particular command with " -"the universal :option:`!--help` option, e.g. ::" +"the universal :option:`!--help` option, e.g." msgstr "" -#: ../Doc/distutils/configfile.rst:69 +#: ../Doc/distutils/configfile.rst:73 msgid "" "Note that an option spelled :option:`!--foo-bar` on the command-line is " "spelled ``foo_bar`` in configuration files." msgstr "" -#: ../Doc/distutils/configfile.rst:74 +#: ../Doc/distutils/configfile.rst:78 msgid "" "For example, say you want your extensions to be built \"in-place\"---that " "is, you have an extension :mod:`pkg.ext`, and you want the compiled " "extension file (:file:`ext.so` on Unix, say) to be put in the same source " "directory as your pure Python modules :mod:`pkg.mod1` and :mod:`pkg.mod2`. " "You can always use the :option:`!--inplace` option on the command-line to " -"ensure this::" +"ensure this:" msgstr "" -#: ../Doc/distutils/configfile.rst:82 +#: ../Doc/distutils/configfile.rst:88 msgid "" "But this requires that you always specify the :command:`build_ext` command " "explicitly, and remember to provide :option:`!--inplace`. An easier way is " "to \"set and forget\" this option, by encoding it in :file:`setup.cfg`, the " -"configuration file for this distribution::" +"configuration file for this distribution:" msgstr "" -#: ../Doc/distutils/configfile.rst:90 +#: ../Doc/distutils/configfile.rst:98 msgid "" "This will affect all builds of this module distribution, whether or not you " "explicitly specify :command:`build_ext`. If you include :file:`setup.cfg` " @@ -121,7 +121,7 @@ msgid "" "always a bad idea, though.)" msgstr "" -#: ../Doc/distutils/configfile.rst:99 +#: ../Doc/distutils/configfile.rst:107 msgid "" "Another example: certain commands take a lot of options that don't change " "from run to run; for example, :command:`bdist_rpm` needs to know everything " @@ -130,30 +130,30 @@ msgid "" "generated by the Distutils (such as the list of files installed). But some " "of it has to be supplied as options to :command:`bdist_rpm`, which would be " "very tedious to do on the command-line for every run. Hence, here is a " -"snippet from the Distutils' own :file:`setup.cfg`::" +"snippet from the Distutils' own :file:`setup.cfg`:" msgstr "" -#: ../Doc/distutils/configfile.rst:117 +#: ../Doc/distutils/configfile.rst:127 msgid "" "Note that the ``doc_files`` option is simply a whitespace-separated string " "split across multiple lines for readability." msgstr "" -#: ../Doc/distutils/configfile.rst:124 +#: ../Doc/distutils/configfile.rst:134 msgid ":ref:`inst-config-syntax` in \"Installing Python Modules\"" msgstr "" -#: ../Doc/distutils/configfile.rst:124 +#: ../Doc/distutils/configfile.rst:134 msgid "" "More information on the configuration files is available in the manual for " "system administrators." msgstr "" -#: ../Doc/distutils/configfile.rst:129 +#: ../Doc/distutils/configfile.rst:139 msgid "Footnotes" msgstr "Notes" -#: ../Doc/distutils/configfile.rst:130 +#: ../Doc/distutils/configfile.rst:140 msgid "" "This ideal probably won't be achieved until auto-configuration is fully " "supported by the Distutils." diff --git a/distutils/extending.po b/distutils/extending.po index ce51ad708..b6c509bbd 100644 --- a/distutils/extending.po +++ b/distutils/extending.po @@ -19,7 +19,7 @@ msgstr "" #: ../Doc/distutils/extending.rst:5 msgid "Extending Distutils" -msgstr "" +msgstr "Extension de Distutils" #: ../Doc/distutils/extending.rst:7 msgid "" @@ -29,6 +29,11 @@ msgid "" "while replacements for existing commands may be made to modify details of " "how the command operates on a package." msgstr "" +"*Distutils* peut être étendu de multiples façons. La plupart des extensions " +"sont soit des nouvelles commandes soit des remplacements de commandes " +"existantes. De nouvelles commandes pourraient par exemple servir à " +"l'empaquetage pour des plateformes spécifiques tandis que des remplacements " +"peuvent modifier certains aspects des commandes existantes." #: ../Doc/distutils/extending.rst:13 msgid "" @@ -37,6 +42,9 @@ msgid "" "that should be copied into packages in addition to :file:`.py` files as a " "convenience." msgstr "" +"La plupart des extensions de *distutils* sont faites dans le script :file:" +"`setup.py`. La plupart ajoutent simplement quelques extensions de fichiers " +"qui devraient être copiés dans le paquet en plus des fichiers :file:`.py`." #: ../Doc/distutils/extending.rst:18 msgid "" @@ -46,10 +54,16 @@ msgid "" "indirectly, directly subclassing the command they are replacing. Commands " "are required to derive from :class:`Command`." msgstr "" +"La plupart des implémentations des commandes *distutils* sont des sous-" +"classes de :class:`distutils.cmd.Command`. Les nouvelles commandes peuvent " +"hériter directement de :class:`Command`, alors que les remplacements " +"dérivent souvent de :class:`Command` indirectement, directement sous-" +"classant la commande qu'ils remplacent. Les commandes doivent dériver de la " +"classe :class:`Command`." #: ../Doc/distutils/extending.rst:33 msgid "Integrating new commands" -msgstr "" +msgstr "Intégrer de nouvelles commandes" #: ../Doc/distutils/extending.rst:35 msgid "" @@ -58,6 +72,11 @@ msgid "" "features in distutils itself, and wait for (and require) a version of Python " "that provides that support. This is really hard for many reasons." msgstr "" +"Il y a différentes façons d’intégrer de nouvelles implémentations de " +"commandes dans *distutils*. La plus difficile est de faire pression pour " +"inclure une nouvelle fonctionnalité dans *distutils* même, et d’attendre (et " +"demander) une version de Python l'implémentant. C'est très difficile pour " +"beaucoup de raisons." #: ../Doc/distutils/extending.rst:40 msgid "" @@ -65,6 +84,10 @@ msgid "" "include the new implementations with your :file:`setup.py` script, and cause " "the :func:`distutils.core.setup` function use them::" msgstr "" +"La plus commune, et possiblement la plus raisonnable pour la plupart des " +"cas, est d'inclure les nouvelles implémentations dans votre fichier :file:" +"`setup.py`, et de faire en sorte que la fonction :func:`distutils.core." +"setup` les utilise ::" #: ../Doc/distutils/extending.rst:55 msgid "" @@ -72,6 +95,10 @@ msgid "" "use a particular package, as everyone interested in the package will need to " "have the new command implementation." msgstr "" +"Cette approche est la plus valable si les nouvelles implémentations doivent " +"être utilisées pour utiliser un paquet particulier, vu que toutes les " +"personnes intéressées par le paquet devront avoir ces nouvelles " +"implémentations de commandes." #: ../Doc/distutils/extending.rst:59 msgid "" @@ -90,6 +117,23 @@ msgid "" "it to an empty string on the command line causes the default to be used. " "This should never be set in a configuration file provided with a package." msgstr "" +"Depuis Python 2.4, une troisième option est disponible, prévue pour " +"permettre d'ajouter de nouvelles commandes compatibles avec le script " +"existant :file:`setup.py` sans avoir besoin de modifier l'installation " +"Python. C'est fait pour que les extensions tierces puissent rester " +"compatibles avec d'autres systèmes d'empaquetage, mais les commandes peuvent " +"être utilisées pour tout ce que les commandes de *distutils* peuvent faire. " +"Une nouvelle option de configuration, ``command_packages`` (option shell :" +"option:`!--command-packages`), peut être utilisée pour spécifier des " +"recherches de paquets additionnels pour des modules qui implémentent des " +"commandes. Comme toutes les options *distutils*, cela peut être spécifié en " +"ligne de commande ou dans un fichier de configuration. Cette option peut " +"être fixée dans la section ``[global]`` d'un fichier de configuration, ou " +"avant n'importe quelle commande dans un shell. Si définie dans un fichier de " +"configuration, elle peut être écrasée depuis la ligne de commande. Mettre " +"une chaine de caractères vide en valeur de cette option forcera " +"l'utilisation de la valeur par défaut. Cela ne devrait jamais être fixé dans " +"un fichier de configuration donné avec un paquet." #: ../Doc/distutils/extending.rst:74 msgid "" @@ -105,10 +149,23 @@ msgid "" "could be implemented by the class :class:`distcmds.bdist_openpkg." "bdist_openpkg` or :class:`buildcmds.bdist_openpkg.bdist_openpkg`." msgstr "" +"Cette nouvelle option peut être utilisée pour ajouter n'importe quel nombre " +"de paquet à la liste des paquets recherchés pour les implémentations de " +"commandes ; plusieurs noms de paquets doivent être séparés par des virgules. " +"Quand non spécifié, la recherche est seulement faite dans le paquet :mod:" +"`distutils.command`. Cependant, lorsque :file:`setup.py` est lancé avec " +"l'option ``--command-packages distcmds,buildcmds``, les paquets :mod:" +"`distutils.command`, :mod:`distcmds`, et :mod:`buildcmds` seront cherchés " +"dans cet ordre. Il est attendu des nouvelles commandes d’être implémentées " +"en modules du même nom que la commande en utilisant des classes partageant " +"le même nom. Comme dans l'exemple shell donné ci-dessus, la commande :" +"command:`bdist_openpkg` pourrait être implémentée avec la classe :class:" +"`distcmds.bdist_openpkg.bdist_openpkg` ou :class:`buildcmds.bdist_openpkg." +"bdist_openpkg`." #: ../Doc/distutils/extending.rst:88 msgid "Adding new distribution types" -msgstr "" +msgstr "Ajout de nouveaux types de distribution" #: ../Doc/distutils/extending.rst:90 msgid "" @@ -119,3 +176,9 @@ msgid "" "file itself. In dry-run mode, pairs should still be added to represent what " "would have been created." msgstr "" +"Les commandes qui créent des distributions (fichiers dans le dossier :file:" +"`dist/`) doivent ajouter la paire ``(command, filename)`` à ``self." +"distribution.dist_files`` pour que :command:`upload` puisse publier sur " +"PyPI. Le nom de fichier (*filename*) dans la paire ne contiens pas de " +"chemin, juste le nom du fichier lui-même. En mode *dry-run*, les paires " +"doivent toujours être ajoutées pour représenter ce qui aurait été créé." diff --git a/distutils/index.po b/distutils/index.po index ad3afc11d..76d765e79 100644 --- a/distutils/index.po +++ b/distutils/index.po @@ -54,7 +54,7 @@ msgid "" msgstr "" "Ce document décrit les outils de distribution de Python (\"Distutils\") du " "point de vue d'un développeur de modules. Il décrit comment utiliser " -"`Distutils` pour rendre des modules et extensions Python disponnible à une " +"`Distutils` pour rendre des modules et extensions Python disponible à une " "large audience, simplement, avec un faible surcoût sur les mécaniques de " "construction, déploiement et installation." diff --git a/distutils/introduction.po b/distutils/introduction.po index feac01af5..93a24310c 100644 --- a/distutils/introduction.po +++ b/distutils/introduction.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-04-02 22:11+0200\n" +"POT-Creation-Date: 2018-04-29 00:24+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,7 +19,7 @@ msgstr "" #: ../Doc/distutils/introduction.rst:5 msgid "An Introduction to Distutils" -msgstr "" +msgstr "Introduction à Distutils" #: ../Doc/distutils/introduction.rst:7 msgid "" @@ -28,10 +28,14 @@ msgid "" "information on installing Python modules, you should refer to the :ref:" "`install-index` chapter." msgstr "" +"Ce document traite de l'utilisation de Distutils pour distribuer des modules " +"Python, en se concentrant sur le rôle de développeur/distributeur : si vous " +"cherchez des informations sur l'installation de modules Python, vous devriez " +"vous référer au chapitre :ref:`install-index`." #: ../Doc/distutils/introduction.rst:16 msgid "Concepts & Terminology" -msgstr "" +msgstr "Concepts et Terminologie" #: ../Doc/distutils/introduction.rst:18 msgid "" @@ -40,26 +44,30 @@ msgid "" "responsibilities (apart from writing solid, well-documented and well-tested " "code, of course!) are:" msgstr "" +"Utiliser Distuils est assez simple, à la fois pour les développeurs de " +"module et pour les utilisateurs/administrateurs qui installent des modules " +"tiers. En tant que développeur, vos responsabilités (en plus d'écrire du " +"code solide, bien documenté et bien testé, bien entendu !) sont :" #: ../Doc/distutils/introduction.rst:23 msgid "write a setup script (:file:`setup.py` by convention)" -msgstr "" +msgstr "écrire un script d'installation (:file:`setup.py` par convention) ;" #: ../Doc/distutils/introduction.rst:25 msgid "(optional) write a setup configuration file" -msgstr "" +msgstr "(optionnel) écrire un fichier de configuration pour l'installation ;" #: ../Doc/distutils/introduction.rst:27 msgid "create a source distribution" -msgstr "" +msgstr "créer une distribution source ;" #: ../Doc/distutils/introduction.rst:29 msgid "(optional) create one or more built (binary) distributions" -msgstr "" +msgstr "(optionnel) créer une ou plusieurs distributions compilées (binaires)." #: ../Doc/distutils/introduction.rst:31 msgid "Each of these tasks is covered in this document." -msgstr "" +msgstr "Chacune de ces tâches est couverte dans ce document." #: ../Doc/distutils/introduction.rst:33 msgid "" @@ -73,6 +81,16 @@ msgid "" "module distributions in the most natural way for their platform, without " "having to run a single setup script or compile a line of code." msgstr "" +"Tous les développeurs de modules n'ont pas accès à une multitude de " +"plateformes, donc on ne peut pas exiger d'eux qu'ils créent une multitude de " +"distributions compilées. On s'attend à ce que certains intermédiaires, " +"appelés *packagers*, prennent en charge ce besoin. Les packagers vont " +"prendre les sources des distributions publiées par les développeurs de " +"modules, les construire sur on ou plusieurs plateformes, et publier les " +"distributions compilées résultantes. Ainsi, les utilisateurs sur les " +"plateformes les plus populaires vont pouvoir installer la plupart des " +"modules Python de la façon la plus naturelle qui soit pour leur plateforme, " +"sans avoir à exécuter de script ou à compiler du code." #: ../Doc/distutils/introduction.rst:47 msgid "A Simple Example" @@ -87,22 +105,33 @@ msgid "" "script may be run multiple times in the course of building and installing " "your module distribution." msgstr "" +"Le script d'installation est habituellement assez simple, même s'il n'y a " +"pas de limite à ce qu'il peut faire (il est écrit en Python, n'est-ce " +"pas ?). Veillez d'ailleurs à ne pas surcharger ce script avec des opérations " +"coûteuses car, contrairement aux scripts de configuration façon Autoconf, le " +"script d'installation peut être amené à être exécuté plusieurs fois au cours " +"de la compilation et de l'installation du module. " #: ../Doc/distutils/introduction.rst:56 msgid "" "If all you want to do is distribute a module called :mod:`foo`, contained in " "a file :file:`foo.py`, then your setup script can be as simple as this::" msgstr "" +"Si tout ce que vous voulez est de distribuer un module appelé :mod:`foo`, " +"contenu dans un fichier :file:`foo.py`, alors votre script d'installation " +"peut se résumer à :" #: ../Doc/distutils/introduction.rst:65 msgid "Some observations:" -msgstr "" +msgstr "Quelques observations :" #: ../Doc/distutils/introduction.rst:67 msgid "" "most information that you supply to the Distutils is supplied as keyword " "arguments to the :func:`setup` function" msgstr "" +"la plupart des informations que vous fournissez à Distutils sont fournies en " +"tant que qu'arguments nommés à la fonction :func:`setup`;" #: ../Doc/distutils/introduction.rst:70 msgid "" @@ -110,12 +139,17 @@ msgid "" "version number) and information about what's in the package (a list of pure " "Python modules, in this case)" msgstr "" +"ces arguments nommés tombent dans deux catégories : métadonnées du paquet " +"(nom, numéro de version) et des informations sur le contenu du paquet paquet " +"(une liste de purs modules Python, dans ce cas) ; " #: ../Doc/distutils/introduction.rst:74 msgid "" "modules are specified by module name, not filename (the same will hold true " "for packages and extensions)" msgstr "" +"les modules sont listés par nom de module, plutôt que par nom de fichier (le " +"cas est similaire pour les paquets et extensions) ;" #: ../Doc/distutils/introduction.rst:77 msgid "" @@ -123,6 +157,9 @@ msgid "" "name, email address and a URL for the project (see section :ref:`setup-" "script` for an example)" msgstr "" +"il est recommandé de fournir un minimum de métadonnées, en particulier votre " +"nom, une adresse de courriel et une URL pour le projet (voir section :ref:" +"`setup-script` pour un exemple)." #: ../Doc/distutils/introduction.rst:81 msgid "" @@ -130,12 +167,17 @@ msgid "" "script, :file:`setup.py`, containing the above code, and run this command " "from a terminal::" msgstr "" +"Pour créer une distribution source pour ce module, il faut créer un script " +"d'installation, :file:`setup.py`, contenant le code ci-dessus, et exécuter " +"cette commande depuis un terminal :" #: ../Doc/distutils/introduction.rst:87 msgid "" "For Windows, open a command prompt window (:menuselection:`Start --> " "Accessories`) and change the command to::" msgstr "" +"Pour Windows, ouvrez une invite de commande (:menuselection:`Démarrer --> " +"Accessoires`) et changez la commande en :" #: ../Doc/distutils/introduction.rst:92 msgid "" @@ -144,6 +186,11 @@ msgid "" "module :file:`foo.py`. The archive file will be named :file:`foo-1.0.tar.gz` " "(or :file:`.zip`), and will unpack into a directory :file:`foo-1.0`." msgstr "" +":command:`sdist` va créer un fichier d'archive (p. ex. une archive *tar* sur " +"Unix, un fichier ZIP sous Windows) contenant votre script d'installation :" +"file:`setup.py`, et votre module :file:`foo.py`. Le fichier d'archive va " +"être nommé :file:`foo-1.0.tar.gz` (ou :file:`.zip`), et va se décompresser " +"dans un répertoire :file:`foo-1.0`." #: ../Doc/distutils/introduction.rst:97 msgid "" @@ -157,6 +204,8 @@ msgid "" "which will ultimately copy :file:`foo.py` to the appropriate directory for " "third-party modules in their Python installation." msgstr "" +"ce qui va finalement copier :file:`foo.py` dans le répertoire approprié pour " +"un module tiers dans son installation Python." #: ../Doc/distutils/introduction.rst:106 msgid "" @@ -167,6 +216,13 @@ msgid "" "while :command:`install` is more often for installers (although most " "developers will want to install their own code occasionally)." msgstr "" +"Ce simple exemple démontre des concepts fondamentaux de Distutils, " +"Premièrement, les développeurs et installeurs ont la même interface " +"utilisateur basique, p. ex. le script d'installation. La différence est " +"quelle *commande* Distutils ils utilisent : la commande :command:`sdist` est " +"quasiment exclusivement pour les développeurs de modules Python, tandis que :" +"command:`install` est plus souvent pour les installeurs (bien que la plupart " +"des développeurs vont vouloir installer leur code occasionnellement)." #: ../Doc/distutils/introduction.rst:113 msgid "" @@ -177,12 +233,21 @@ msgid "" "distribution for this platform) with the :command:`bdist_wininst` command. " "For example::" msgstr "" +"Si vous voulez rendre les choses vraiment faciles pour vos utilisateurs, " +"vous pouvez créer on ou plusieurs distributions compilées pour eux. En " +"l’occurrence, si vous tournez sous une machine Windows, et que vous voulez " +"rendre les choses faciles pour les autres utilisateurs Windows, vous pouvez " +"créer un installateur exécutable (le mode de distribution le plus approprié " +"pour cette plateforme) avec la commande :command:`bdist_wininst`. Par " +"exemple :" #: ../Doc/distutils/introduction.rst:121 msgid "" "will create an executable installer, :file:`foo-1.0.win32.exe`, in the " "current directory." msgstr "" +"va créer une installeur exécutable, :file:`foo-1.0.win32.exe`, dans le " +"répertoire courant." #: ../Doc/distutils/introduction.rst:124 msgid "" @@ -191,6 +256,11 @@ msgid "" "and HP-UX :program:`swinstall` (:command:`bdist_sdux`). For example, the " "following command will create an RPM file called :file:`foo-1.0.noarch.rpm`::" msgstr "" +"D'autres formats de distributions compilés utiles sont RPM, implémenté par " +"la commande :command:`bdist_rpm`, Solaris :program:`pkgtool` (:command:" +"`bdist_pkgtool`), et HP-UX :program:`swinstall` (:command:`bdist_sdux`). Par " +"exemple, la commande suivante va créer un fichier RPM appelé :file:`foo-1.0." +"noarch.rpm`::" #: ../Doc/distutils/introduction.rst:132 msgid "" @@ -198,16 +268,21 @@ msgid "" "therefore this has to be run on an RPM-based system such as Red Hat Linux, " "SuSE Linux, or Mandrake Linux.)" msgstr "" +"(La commande :command:`bdist_rpm` utilise l'exécutable :command:`rpm`, " +"cependant cela doit être exécuté sur un système basé sur RPM tel que Red Hat " +"Linux, SuSE Linux, or Mandrake Linux.)" #: ../Doc/distutils/introduction.rst:136 msgid "" "You can find out what distribution formats are available at any time by " "running ::" msgstr "" +"Vous pouvez trouver quelles sont les formats de distribution disponibles à " +"n'importe quel moment en exécutant :" #: ../Doc/distutils/introduction.rst:145 msgid "General Python terminology" -msgstr "" +msgstr "Terminologie Python générale" #: ../Doc/distutils/introduction.rst:147 msgid "" @@ -216,6 +291,10 @@ msgid "" "everyone is operating from a common starting point, we offer the following " "glossary of common Python terms:" msgstr "" +"Si vous lisez ce document, vous avez probablement une bonne idée de ce que " +"sont les modules, extensions, etc. Néanmoins, juste pour être sur que tout " +"le monde opère depuis un point d'entrée commun, nous reprécisons le " +"glossaire suivant des termes Python communs :" #: ../Doc/distutils/introduction.rst:155 msgid "module" @@ -227,10 +306,13 @@ msgid "" "some other code. Three types of modules concern us here: pure Python " "modules, extension modules, and packages." msgstr "" +"unité de base de la réutilisabilité en Python : un bloc de code importé par " +"un autre code. Trois types de modules nous concernent ici : les purs modules " +"Python, les modules d'extension, et les packages." #: ../Doc/distutils/introduction.rst:160 msgid "pure Python module" -msgstr "" +msgstr "pur module Python" #: ../Doc/distutils/introduction.rst:158 msgid "" @@ -238,6 +320,8 @@ msgid "" "possibly associated :file:`.pyc` files). Sometimes referred to as a \"pure " "module.\"" msgstr "" +"un module écrit en Python et contenu dans un seul fichier :file:`.py` (et " +"possiblement un fichier :file:`.pyc` associé). Parfois appelé \"pur module.\"" #: ../Doc/distutils/introduction.rst:168 msgid "extension module" @@ -253,6 +337,13 @@ msgid "" "(Note that currently, the Distutils only handles C/C++ extensions for " "Python.)" msgstr "" +"un module écrit dans un langage de bas niveau de l'implémentation Python: C/C" +"++ pour Python, Java pour Jython. Typiquement contenu dans un unique fichier " +"pré-compilé chargeable, p. ex. un fichier objet partagé (:file:`.so`) pour " +"des extensions Python sous Unix, un fichier DLL (étant donné l'extension :" +"file:`.pyd`) pour les extensions Python sous Windows, ou un fichier de " +"classe Java pour les extensions Jython (notez qu'actuellement, Distutils " +"gère seulement les extensions Python C/C++)." #: ../Doc/distutils/introduction.rst:173 msgid "package" @@ -264,6 +355,9 @@ msgid "" "the filesystem and distinguished from other directories by the presence of a " "file :file:`__init__.py`." msgstr "" +"un module qui contient d'autres modules ; très souvent contenu dans un " +"répertoire du système de fichier et qui se distingue des autres répertoires " +"par la présence d'un fichier :file:`__init__.py`." #: ../Doc/distutils/introduction.rst:183 msgid "root package" @@ -279,54 +373,73 @@ msgid "" "package can be found in many directories: in fact, every directory listed in " "``sys.path`` contributes modules to the root package." msgstr "" +"la racine de la hiérarchie de paquets. (Ce n'est pas vraiment un paquet, " +"puisqu'il n'a pas un fichier :file:`__init__.py`. Mais nous devons bien le " +"nommer.) La grande majorité de la bibliothèque standard est dans le package " +"racine, comme le sont certains petits, des packages tiers autonomes qui " +"n'appartiennent pas à une un module plus grand. Contrairement aux packages " +"réguliers, les modules dans le package racine peuvent être trouvés dans " +"plusieurs répertoires : en effet, tous les répertoires listés ``sys.path`` " +"contribuent à faire partie du package racine." #: ../Doc/distutils/introduction.rst:188 msgid "Distutils-specific terminology" -msgstr "" +msgstr "Terminologie spécifique à Distutils" #: ../Doc/distutils/introduction.rst:190 msgid "" "The following terms apply more specifically to the domain of distributing " "Python modules using the Distutils:" msgstr "" +"Les termes suivant s'appliquent plus spécifiquement au domaine de la " +"distribution de modules Python en utilisant les Distutils :" #: ../Doc/distutils/introduction.rst:199 msgid "module distribution" -msgstr "" +msgstr "module de distribution" #: ../Doc/distutils/introduction.rst:194 msgid "" "a collection of Python modules distributed together as a single downloadable " "resource and meant to be installed *en masse*. Examples of some well-known " -"module distributions are NumPy, SciPy, PIL (the Python Imaging Library), or " -"mxBase. (This would be called a *package*, except that term is already " -"taken in the Python context: a single module distribution may contain zero, " -"one, or many Python packages.)" +"module distributions are NumPy, SciPy, Pillow, or mxBase. (This would be " +"called a *package*, except that term is already taken in the Python context: " +"a single module distribution may contain zero, one, or many Python packages.)" msgstr "" +"une collection de modules Python distribués ensemble, comme une unique " +"ressource téléchargeable et ayant pour but d'être installé *en bloc*. Des " +"exemples de modules distribués bien connus sont *NumPy*, *SciPy*, *Pillow*, " +"ou *mxBase*. (On pourrait les appeler des *packages*, malgré que le terme " +"soit déjà pris dans le contexte Python : une distribution de module simple " +"pourrait contenir zéro, on ou plusieurs packages Python" #: ../Doc/distutils/introduction.rst:203 msgid "pure module distribution" -msgstr "" +msgstr "distribution de modules purs" #: ../Doc/distutils/introduction.rst:202 msgid "" "a module distribution that contains only pure Python modules and packages. " "Sometimes referred to as a \"pure distribution.\"" msgstr "" +"une distribution de module qui contient seulement des modules purs et " +"packages Python. Parfois appelée « distribution pure »." #: ../Doc/distutils/introduction.rst:207 msgid "non-pure module distribution" -msgstr "" +msgstr "distribution de module non pur" #: ../Doc/distutils/introduction.rst:206 msgid "" "a module distribution that contains at least one extension module. " "Sometimes referred to as a \"non-pure distribution.\"" msgstr "" +"une distribution de module qui contient au moins un module d'extension. " +"Parfois appelée « distribution non-pure »." #: ../Doc/distutils/introduction.rst:211 msgid "distribution root" -msgstr "" +msgstr "distribution racine" #: ../Doc/distutils/introduction.rst:210 msgid "" @@ -334,3 +447,6 @@ msgid "" "directory where :file:`setup.py` exists. Generally :file:`setup.py` will " "be run from this directory." msgstr "" +"le répertoire de plus haut niveau de votre arborescence (ou distribution " +"source) ; le répertoire ou :file:`setup.py` existe. Généralement :file:" +"`setup.py` est exécuté depuis ce répertoire." diff --git a/distutils/packageindex.po b/distutils/packageindex.po index 3a8afaa72..af21089c2 100644 --- a/distutils/packageindex.po +++ b/distutils/packageindex.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-10 00:49+0200\n" +"POT-Creation-Date: 2018-04-29 00:24+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,7 +19,7 @@ msgstr "" #: ../Doc/distutils/packageindex.rst:9 msgid "The Python Package Index (PyPI)" -msgstr "" +msgstr "L'index de paquets Python (*Python Package Index* : PyPI)" #: ../Doc/distutils/packageindex.rst:11 msgid "" @@ -214,96 +214,96 @@ msgid "" "existence of a :file:`.pypirc` file at the location :file:`$HOME/.pypirc`. " "If this file exists, the command uses the username, password, and repository " "URL configured in the file. The format of a :file:`.pypirc` file is as " -"follows::" +"follows:" msgstr "" -#: ../Doc/distutils/packageindex.rst:170 +#: ../Doc/distutils/packageindex.rst:172 msgid "" "The *distutils* section defines an *index-servers* variable that lists the " "name of all sections describing a repository." msgstr "" -#: ../Doc/distutils/packageindex.rst:173 +#: ../Doc/distutils/packageindex.rst:175 msgid "Each section describing a repository defines three variables:" msgstr "" -#: ../Doc/distutils/packageindex.rst:175 +#: ../Doc/distutils/packageindex.rst:177 msgid "*repository*, that defines the url of the PyPI server. Defaults to" msgstr "" -#: ../Doc/distutils/packageindex.rst:176 +#: ../Doc/distutils/packageindex.rst:178 msgid "``https://upload.pypi.org/legacy/``." msgstr "" -#: ../Doc/distutils/packageindex.rst:177 +#: ../Doc/distutils/packageindex.rst:179 msgid "*username*, which is the registered username on the PyPI server." msgstr "" -#: ../Doc/distutils/packageindex.rst:179 +#: ../Doc/distutils/packageindex.rst:181 msgid "*password*, that will be used to authenticate. If omitted the user" msgstr "" -#: ../Doc/distutils/packageindex.rst:179 +#: ../Doc/distutils/packageindex.rst:181 msgid "will be prompt to type it when needed." msgstr "" -#: ../Doc/distutils/packageindex.rst:181 +#: ../Doc/distutils/packageindex.rst:183 msgid "" "If you want to define another server a new section can be created and listed " -"in the *index-servers* variable::" +"in the *index-servers* variable:" msgstr "" -#: ../Doc/distutils/packageindex.rst:199 +#: ../Doc/distutils/packageindex.rst:203 msgid "" "This allows the :command:`register` and :command:`upload` commands to be " "called with the ``--repository`` option as described in :ref:`package-" "cmdoptions`." msgstr "" -#: ../Doc/distutils/packageindex.rst:203 +#: ../Doc/distutils/packageindex.rst:207 msgid "" "Specifically, you might want to add the `PyPI Test Repository `_ to your ``.pypirc`` to facilitate testing before " "doing your first upload to ``PyPI`` itself." msgstr "" -#: ../Doc/distutils/packageindex.rst:211 +#: ../Doc/distutils/packageindex.rst:215 msgid "PyPI package display" msgstr "" -#: ../Doc/distutils/packageindex.rst:213 +#: ../Doc/distutils/packageindex.rst:217 msgid "" "The ``long_description`` field plays a special role at PyPI. It is used by " "the server to display a home page for the registered package." msgstr "" -#: ../Doc/distutils/packageindex.rst:216 +#: ../Doc/distutils/packageindex.rst:220 msgid "" "If you use the `reStructuredText `_ syntax for this field, PyPI will parse it and display an HTML output " "for the package home page." msgstr "" -#: ../Doc/distutils/packageindex.rst:220 +#: ../Doc/distutils/packageindex.rst:224 msgid "" "The ``long_description`` field can be attached to a text file located in the " "package::" msgstr "" -#: ../Doc/distutils/packageindex.rst:231 +#: ../Doc/distutils/packageindex.rst:235 msgid "" "In that case, :file:`README.txt` is a regular reStructuredText text file " "located in the root of the package besides :file:`setup.py`." msgstr "" -#: ../Doc/distutils/packageindex.rst:234 +#: ../Doc/distutils/packageindex.rst:238 msgid "" "To prevent registering broken reStructuredText content, you can use the :" "program:`rst2html` program that is provided by the :mod:`docutils` package " "and check the ``long_description`` from the command line:" msgstr "" -#: ../Doc/distutils/packageindex.rst:242 +#: ../Doc/distutils/packageindex.rst:246 msgid "" ":mod:`docutils` will display a warning if there's something wrong with your " "syntax. Because PyPI applies additional checks (e.g. by passing ``--no-" diff --git a/distutils/setupscript.po b/distutils/setupscript.po index b1f5cd38f..f8c07ad53 100644 --- a/distutils/setupscript.po +++ b/distutils/setupscript.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-04-02 22:11+0200\n" +"POT-Creation-Date: 2018-06-17 10:39+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,7 +19,7 @@ msgstr "" #: ../Doc/distutils/setupscript.rst:5 msgid "Writing the Setup Script" -msgstr "" +msgstr "Rédaction du script ``setup.py``" #: ../Doc/distutils/setupscript.rst:7 msgid "" @@ -32,6 +32,15 @@ msgid "" "Distutils by the module developer is supplied as keyword arguments to :func:" "`setup`." msgstr "" +"Le script ``setup.py`` est au centre de toute opération de construction, de " +"distribution et d'installation des modules utilisant les *Distutils*. " +"L'objectif principal du script ``setup.py`` est de décrire le module aux " +"*Distutils*, de telle sorte que les diverses commandes qui agissent sur " +"votre module fassent les bonnes choses. Comme nous avons vu dans la section :" +"ref:`distutils-simple-example` au-dessus, le script ``setup.py`` consiste " +"principalement à un appel à :func:`setup`, et la plupart des informations " +"fournies aux *Distutils* par le développeur du module sont fournies en tant " +"qu'arguments nommés à :func:`setup.py`." #: ../Doc/distutils/setupscript.rst:15 msgid "" @@ -42,6 +51,14 @@ msgid "" "install other module distributions. The Distutils' own setup script, shown " "here, is used to install the package into Python 1.5.2.) ::" msgstr "" +"Voici un exemple un peu plus concret, que nous allons suivre pour les " +"quelques sections suivantes : le propre script ``setup.py`` des *Distutils* " +"(gardez toujours à l'esprit qu'en dépit de l'inclusion des *Distutils* dans " +"python 1.6 et ses versions successives, ils ont aussi une existence à part " +"entière de telle sorte que les utilisateurs de Python 1.5.2 puissent les " +"utiliser pour installer d'autres modules. Le propre script ``setup.py`` des " +"*Distutils* montré ici est utilisé pour installer le paquet dans Python " +"1.5.2). ::" #: ../Doc/distutils/setupscript.rst:35 msgid "" @@ -53,6 +70,14 @@ msgid "" "module would be tedious to generate and difficult to maintain. For more " "information on the additional meta-data, see section :ref:`meta-data`." msgstr "" +"Il y a seulement deux différences entre cet exemple et l'exemple trivial de " +"la distribution d'un unique fichier présenté dans la partie :ref:`distutils-" +"simple-example` : plus de métadonnées, et la définition de modules purement " +"Python par paquet, plutôt que par module. C'est important car les " +"*Distutils* sont composés de quelques douzaines de modules séparés (pour le " +"moment) en deux paquets ; une liste explicite de chaque module serait " +"pénible à générer et difficile à maintenir. Pour plus d'information sur les " +"métadonnées supplémentaires, voir la partie :ref:`meta-data`." #: ../Doc/distutils/setupscript.rst:43 msgid "" @@ -64,6 +89,15 @@ msgid "" "systems, which of course is one of the major goals of the Distutils. In " "this spirit, all pathnames in this document are slash-separated." msgstr "" +"À noter que chaque chemin d'accès fourni au script ``setup.py`` doit être " +"écrit selon la convention Unix. Autrement dit, séparé par des barres " +"obliques (slash). Les *Distutils* prendront soin de convertir cette " +"représentation indépendante de la plateforme en une représentation adaptée à " +"votre plateforme actuelle avant d'effectivement utiliser le chemin d'accès. " +"Cela rend votre script ``setup.py`` portable d'un système d'exploitation à " +"l'autre, ce qui évidemment est l'un des buts majeurs des *Distutils*. Dans " +"cet esprit, tous les chemins d'accès dans ce document sont séparés par des " +"barres obliques (slash)." #: ../Doc/distutils/setupscript.rst:51 msgid "" @@ -72,10 +106,15 @@ msgid "" "or :func:`os.listdir` to specify files, you should be careful to write " "portable code instead of hardcoding path separators::" msgstr "" +"Cela, évidemment, s'applique uniquement aux chemins d'accès passés aux " +"fonctions de *Distutils*. Si vous, par exemple, vous utilisez les fonctions " +"standards de Python telles que :func:`glob.glob` or :func:`os.listdir` pour " +"définir des fichiers, vous devez prendre soin d'écrire du code portable au " +"lieu de coder en dur les séparateurs de chemin ::" #: ../Doc/distutils/setupscript.rst:63 msgid "Listing whole packages" -msgstr "" +msgstr "Lister l'ensemble des paquets" #: ../Doc/distutils/setupscript.rst:65 msgid "" @@ -92,6 +131,19 @@ msgid "" "break this promise, the Distutils will issue a warning but still process the " "broken package anyway." msgstr "" +"L'option ``packages`` dit aux *Distutils* de traiter (construire, " +"distribuer, installer, etc.) tous les modules en Python pur trouvés dans " +"chaque paquet mentionné dans la liste ``packages``. À cette fin, évidemment, " +"il faut une correspondance entre les noms des paquets et des répertoires " +"dans le système de fichiers. La correspondance par défaut est la plus " +"évidente. À savoir : le paquet :mod:`distutils` se trouve dans le " +"répertoire :file:`distutils` situé à la racine de la distribution. Ainsi, " +"quand vous écrivez ``packages = ['foo']`` dans votre script ``setup.py``, " +"vous vous engagez à ce que les *Distutils* trouvent un fichier ``foo/" +"__init__.py`` (qui peut s'épeler différemment sur votre système, mais vous " +"voyez l'idée) à un emplacement relatif au répertoire où se trouve le script " +"``setup.py``. Si ce n'est pas le cas, les *Distutils* lèvent un " +"avertissement mais traitent tout de même le paquet défectueux." #: ../Doc/distutils/setupscript.rst:77 msgid "" @@ -102,6 +154,14 @@ msgid "" "in any package at all) are in :file:`lib`, modules in the :mod:`foo` package " "are in :file:`lib/foo`, and so forth. Then you would put ::" msgstr "" +"Si vous utilisez une convention différente pour arranger votre répertoire de " +"sources, ce n'est pas un problème : vous avez seulement à fournir l'option " +"``package_dir`` pour prévenir les *Distutils* de l'usage de cette " +"convention. Par exemple, supposons que vous gardez toutes les sources Python " +"sous :file:`lib`, de telle sorte que les modules dans le « paquet " +"racine » (c'est-à-dire dans aucun paquet du tout) sont dans :file:`lib`, les " +"modules dans le paquet :mod:`foo` sont dans :file:`lib/foo`, et ainsi de " +"suite. Alors, vous pouvez mettre ::" #: ../Doc/distutils/setupscript.rst:86 msgid "" @@ -111,6 +171,11 @@ msgid "" "``packages = ['foo']``, you are promising that the file :file:`lib/foo/" "__init__.py` exists." msgstr "" +"dans votre script ``setup.py``. Les clés de ce dictionnaire sont les noms " +"des paquets, et un nom de paquet vide fait office de paquet racine. Les " +"valeurs sont des noms de répertoires relatifs à la racine de votre " +"distribution. Dans ce cas, lorsque vous dites ``packages = ['foo']``, vous " +"vous engagez à ce que le fichier :file:`lib/foo/__init__.py` existe." #: ../Doc/distutils/setupscript.rst:91 msgid "" @@ -118,6 +183,9 @@ msgid "" "`lib`, the :mod:`foo.bar` package in :file:`lib/bar`, etc. This would be " "written in the setup script as ::" msgstr "" +"Une autre convention possible est de mettre le paquet :mod:`foo` directement " +"dans :file:`lib`, le paquet :mod:`foo.bar` dans :file:`lib/bar`, etc. Cela " +"s'écrirait ainsi dans le script ``setup.py`` : ::" #: ../Doc/distutils/setupscript.rst:97 msgid "" @@ -133,7 +201,7 @@ msgstr "" #: ../Doc/distutils/setupscript.rst:110 msgid "Listing individual modules" -msgstr "" +msgstr "Lister chaque module indépendamment" #: ../Doc/distutils/setupscript.rst:112 msgid "" @@ -143,6 +211,11 @@ msgid "" "shown in section :ref:`distutils-simple-example`; here is a slightly more " "involved example::" msgstr "" +"Pour un petit projet, vous pouvez préférer lister tous les modules plutôt " +"que les paquets — surtout le cas d'un module seul qui va dans le « paquet " +"racine » (à savoir, aucun paquet du tout). Le cas le plus simple a été " +"montré dans la partie :ref:`distutils-simple-example` ; voici un exemple " +"plus concret ::" #: ../Doc/distutils/setupscript.rst:119 msgid "" @@ -153,10 +226,16 @@ msgid "" "you can override the package/directory correspondence using the " "``package_dir`` option." msgstr "" +"Deux modules sont décrits, l'un dans le paquet « racine », l'autre dans le " +"paquet :mod:`pkg`. Encore une fois, la structure paquet/répertoire par " +"défaut implique que ces deux modules peuvent être trouvés dans :file:`mod1." +"py` et :file:`pkg/mod2.py`, et que :file:`pkg/__init__.py` existe aussi. Là " +"aussi, vous pouvez redéfinir la correspondance paquet/répertoire en " +"utilisant l'option ``package_dir``." #: ../Doc/distutils/setupscript.rst:129 msgid "Describing extension modules" -msgstr "" +msgstr "Description des modules d'extension" #: ../Doc/distutils/setupscript.rst:131 msgid "" @@ -167,6 +246,13 @@ msgid "" "have to specify the extension name, source file(s), and any compile/link " "requirements (include directories, libraries to link with, etc.)." msgstr "" +"Tout comme écrire des modules d'extension Python est un peu plus compliqué " +"que d’écrire des modules purement en Python, les décrire aux *Distutils* est " +"un peu plus compliqué. Contrairement aux modules purs, il ne suffit pas de " +"simplement lister les modules ou les paquets et d'attendre que les " +"*Distutils* trouvent par eux-mêmes les bons fichiers ; vous devez définir le " +"nom de l'extension, du ou des fichiers de sources, et les prérequis de " +"compilation/lien (répertoires à inclure, bibliothèques à lier, etc.)." #: ../Doc/distutils/setupscript.rst:140 msgid "" @@ -178,6 +264,13 @@ msgid "" "instructions to the compiler/linker are needed, describing this extension is " "quite simple::" msgstr "" +"Tout ceci est fait à l'aide d'un autre argument nommé passé à :func:`setup`, " +"l'option ``ext_modules``. ``ext_modules`` est simplement une liste de " +"classes :class:`~distutils.core.Extension`, chacune décrivant une seule " +"extension de module. Supposons que votre distribution inclut une seule " +"extension appelée :mod:`foo` et implémentée par :file:`foo.c`. Si aucune " +"instruction supplémentaire au compilateur/lieur n'est requise, décrire cette " +"extension est assez simple ::" #: ../Doc/distutils/setupscript.rst:150 msgid "" @@ -185,6 +278,9 @@ msgid "" "along with :func:`setup`. Thus, the setup script for a module distribution " "that contains only this one extension and nothing else might be::" msgstr "" +"La classe :class:`Extension` peut être importée depuis :mod:`distutils.core` " +"en même temps que :func:`setup`. Ainsi, le script ``setup.py`` pour un " +"module qui ne contient que cette seule extension et rien d'autre peut être ::" #: ../Doc/distutils/setupscript.rst:160 msgid "" @@ -193,10 +289,14 @@ msgid "" "deal of flexibility in describing Python extensions, which is explained in " "the following sections." msgstr "" +"La classe :class:`Extension` (en réalité, la machinerie sous-jacente " +"construisant les extensions implémentées par la commande :command:" +"`build_ext`) permet une grande flexibilité dans la description des " +"extensions Python, ce qui est expliqué dans les parties suivantes." #: ../Doc/distutils/setupscript.rst:167 msgid "Extension names and packages" -msgstr "" +msgstr "Nom des extensions et paquets" #: ../Doc/distutils/setupscript.rst:169 msgid "" @@ -204,10 +304,12 @@ msgid "" "always the name of the extension, including any package names. For " "example, ::" msgstr "" +"Le premier argument du constructeur :class:`~distutils.core.Extension` est " +"toujours le nom de l'extension, incluant tout nom de paquet. Par exemple ::" #: ../Doc/distutils/setupscript.rst:174 msgid "describes an extension that lives in the root package, while ::" -msgstr "" +msgstr "décrit une extension qui se situe dans le paquet racine, tandis que ::" #: ../Doc/distutils/setupscript.rst:178 msgid "" @@ -216,6 +318,11 @@ msgid "" "is where in the filesystem (and therefore where in Python's namespace " "hierarchy) the resulting extension lives." msgstr "" +"décrit la même extension dans le paquet :mod:`pkg`. Les fichiers sources et " +"le code objet résultant sont identiques dans les deux cas ; la seule " +"différence est où, dans le système de fichier (et conséquemment dans la " +"hiérarchie de l'espace de nommage de Python), l'extension résultante se " +"situe." #: ../Doc/distutils/setupscript.rst:183 msgid "" @@ -223,16 +330,21 @@ msgid "" "same base package), use the ``ext_package`` keyword argument to :func:" "`setup`. For example, ::" msgstr "" +"Si vous avez un certain nombre d'extensions toutes dans le même paquet (ou " +"toutes sous le même paquet de base), utilisez l'argument nommé " +"``ext_package`` de :func:`setup`. Par exemple ::" #: ../Doc/distutils/setupscript.rst:193 msgid "" "will compile :file:`foo.c` to the extension :mod:`pkg.foo`, and :file:`bar." "c` to :mod:`pkg.subpkg.bar`." msgstr "" +"compile :file:`foo.c` en l’extension :mod:`pkg.foo`, et :file:`bar.c` en :" +"mod:`pkg.subpkg.bar`." #: ../Doc/distutils/setupscript.rst:198 msgid "Extension source files" -msgstr "" +msgstr "Fichiers sources d'extension" #: ../Doc/distutils/setupscript.rst:200 msgid "" @@ -243,6 +355,12 @@ msgid "" "files: :file:`.cc` and :file:`.cpp` seem to be recognized by both Unix and " "Windows compilers.)" msgstr "" +"Le second argument du constructeur d'\\ :class:`~distutils.core.Extension` " +"est une liste de fichiers sources. Puisque les *Distutils* ne gèrent que les " +"extensions en C, C++ et Objective-C, ce sont normalement des fichiers " +"sources en C/C++/Objective-C (assurez vous d'utiliser les extensions " +"appropriées pour détecter les fichiers sources en C++ : :file:`.cc` et :file:" +"`.cpp` semblent être reconnus tant par les compilateurs Unix que Windows)." #: ../Doc/distutils/setupscript.rst:207 msgid "" @@ -251,16 +369,22 @@ msgid "" "will run SWIG on the interface file and compile the resulting C/C++ file " "into your extension." msgstr "" +"Néanmoins, vous pouvez également inclure des fichiers d'interface SWIG (:" +"file:`.i`) dans la liste ; la commande :command:`build_ext` sait comment " +"gérer les extensions SWIG : il lancera SWIG sur un fichier d'interface et " +"compilera le fichier en C/C++ en une extension." #: ../Doc/distutils/setupscript.rst:214 msgid "" "This warning notwithstanding, options to SWIG can be currently passed like " "this::" msgstr "" +"Malgré cet avertissement, les options peuvent être actuellement passées à " +"SWIG de la façon suivante ::" #: ../Doc/distutils/setupscript.rst:223 msgid "Or on the commandline like this::" -msgstr "" +msgstr "Ou en ligne de commande de cette façon ::" #: ../Doc/distutils/setupscript.rst:227 msgid "" @@ -270,10 +394,16 @@ msgid "" "rc`) files for Visual C++. These will be compiled to binary resource (:file:" "`.res`) files and linked into the executable." msgstr "" +"Sur certaines plateformes, vous pouvez inclure des fichiers autres que des " +"sources qui seront traités par le compilateur et inclus dans votre " +"extension. Pour l'instant, cela concerne seulement les fichiers de messages " +"texte Windows (:file:`.mc`) et les fichiers de définition de ressource pour " +"Visual C++ (:file:`.rc`). Ils seront compilés en fichiers de ressources " +"binaires (:file:`.res`) et liés à l'exécutable." #: ../Doc/distutils/setupscript.rst:235 msgid "Preprocessor options" -msgstr "" +msgstr "Options de préprocesseur" #: ../Doc/distutils/setupscript.rst:237 msgid "" @@ -281,12 +411,19 @@ msgid "" "you need to specify include directories to search or preprocessor macros to " "define/undefine: ``include_dirs``, ``define_macros``, and ``undef_macros``." msgstr "" +"Trois arguments optionnels de :class:`~distutils.core.Extension` aident si " +"vous avez besoin de préciser les dossiers d’en-têtes à chercher ou les " +"macros de préprocesseurs à charger ou ignorer : ``include_dirs``, " +"``define_macros``, et ``undef_macros``." #: ../Doc/distutils/setupscript.rst:241 msgid "" "For example, if your extension requires header files in the :file:`include` " "directory under your distribution root, use the ``include_dirs`` option::" msgstr "" +"Par exemple, si votre extension nécessite des fichiers d'en-tête dans le " +"répertoire :file:`include` à la racine de votre distribution, utilisez " +"l'option ``include_dirs`` ::" #: ../Doc/distutils/setupscript.rst:246 msgid "" @@ -294,12 +431,17 @@ msgid "" "will only be built on Unix systems with X11R6 installed to :file:`/usr`, you " "can get away with ::" msgstr "" +"Ici, vous pouvez définir le chemin absolu des répertoires ; si vous savez " +"que votre extension sera compilée sur un système Unix avec ``X11R6`` " +"installé dans :file:`/usr`, vous pouvez vous en sortir avec ::" #: ../Doc/distutils/setupscript.rst:252 msgid "" "You should avoid this sort of non-portable usage if you plan to distribute " "your code: it's probably better to write C code like ::" msgstr "" +"Il convient d'éviter ce type d'utilisation non portable si vous envisagez de " +"distribuer votre code : Il est probablement mieux d'écrire du code C comme ::" #: ../Doc/distutils/setupscript.rst:257 msgid "" @@ -313,6 +455,17 @@ msgid "" "in this case---is always included in the search path when building Python " "extensions, the best approach is to write C code like ::" msgstr "" +"Si vous avez besoin d'inclure des fichiers d'en-tête provenant d'autres " +"extensions Python, vous pouvez profiter du fait que les fichiers d'en-têtes " +"sont installés de façon cohérente par la commande :command:`install_headers` " +"des *Distutils*. Par exemple, les fichiers d'en-têtes de *Numerical Python* " +"(NumPy) sont installés (dans le cas d'une installation Unix standard) dans :" +"file:`/usr/local/include/python1.5/Numerical` — l'emplacement exact diffère " +"selon votre plateforme et votre installation de Python. Vu que le " +"répertoire :file:`include` de Python —\\ :file:`/usr/local/include/" +"python1.5` dans ce cas-ci — est toujours inclus dans le chemin de recherche " +"quand vous construisez des extensions Python, la meilleure approche est " +"d'écrire du code C comme ::" #: ../Doc/distutils/setupscript.rst:269 msgid "" @@ -320,6 +473,10 @@ msgid "" "header search path, though, you can find that directory using the Distutils :" "mod:`distutils.sysconfig` module::" msgstr "" +"Si vous devez mettre le répertoire :file:`include` de :file:`Numerical` " +"directement dans l'en-tête du chemin de recherche, cependant, vous pouvez " +"trouver ce répertoire en utilisant le module :mod:`distutils.sysconfig` des " +"*Distutils* ::" #: ../Doc/distutils/setupscript.rst:279 msgid "" @@ -327,6 +484,9 @@ msgid "" "installation, regardless of platform---it's probably easier to just write " "your C code in the sensible way." msgstr "" +"Même si c'est assez portable — ça marche sur la plupart des installations de " +"Python, indépendamment de la plateforme — il est probablement plus facile " +"d'écrire un code C un peu plus réfléchi." #: ../Doc/distutils/setupscript.rst:283 msgid "" @@ -338,18 +498,26 @@ msgid "" "your C source: with most compilers, this sets ``FOO`` to the string ``1``.) " "``undef_macros`` is just a list of macros to undefine." msgstr "" +"Vous pouvez définir ou ignorer des macros de pré-processeur avec les options " +"``define_macros`` et ``undef_macros``. ``define_macros`` prend une liste de " +"paires ``(nom, valeur)``, où ``nom`` est le nom de la macro à définir (une " +"chaîne de caractères) et ``valeur`` est sa valeur ; soit une chaîne de " +"caractères, soit ``None`` (définir une macro ``FOO`` à ``None`` est " +"équivalent à un simple ``#define FOO`` dans votre source en C ; pour la " +"majorité des compilateurs, cela définit la valeur de ``FOO`` à la chaîne de " +"caractère ``1``). ``undef_macros`` est juste une liste de macros à supprimer." #: ../Doc/distutils/setupscript.rst:291 msgid "For example::" -msgstr "Par exemple : ::" +msgstr "Par exemple ::" #: ../Doc/distutils/setupscript.rst:298 msgid "is the equivalent of having this at the top of every C source file::" -msgstr "" +msgstr "est équivalent à avoir ceci au début de chaque fichier source en C ::" #: ../Doc/distutils/setupscript.rst:307 msgid "Library options" -msgstr "" +msgstr "Options des bibliothèques" #: ../Doc/distutils/setupscript.rst:309 msgid "" @@ -360,33 +528,48 @@ msgid "" "time, and ``runtime_library_dirs`` is a list of directories to search for " "shared (dynamically loaded) libraries at run-time." msgstr "" +"Vous pouvez aussi définir les bibliothèques à lier quand vous construisez " +"votre extension, ainsi que le répertoire de recherche pour ces " +"bibliothèques. L'option ``libraries`` est une liste de bibliothèques à lier, " +"``library_dirs`` est une liste de répertoires dans lesquels chercher des " +"bibliothèques au moment de la liaison, et ``runtime_library_dirs`` est une " +"liste de répertoires pour la recherche des bibliothèques partagées (chargées " +"dynamiquement) à l'exécution." #: ../Doc/distutils/setupscript.rst:315 msgid "" "For example, if you need to link against libraries known to be in the " "standard library search path on target systems ::" msgstr "" +"Par exemple, pour lier des bibliothèques que l'on sait dans le chemin des " +"bibliothèques standards des systèmes cibles ::" #: ../Doc/distutils/setupscript.rst:321 msgid "" "If you need to link with libraries in a non-standard location, you'll have " "to include the location in ``library_dirs``::" msgstr "" +"Pour lier une bibliothèque se trouvant à un emplacement non standard, vous " +"devez inclure son emplacement dans ``library_dirs`` ::" #: ../Doc/distutils/setupscript.rst:328 msgid "" "(Again, this sort of non-portable construct should be avoided if you intend " "to distribute your code.)" msgstr "" +"Là aussi, ce genre de construction non portable doit être évité si vous avez " +"l'intention de distribuer votre code." #: ../Doc/distutils/setupscript.rst:335 msgid "Other options" -msgstr "" +msgstr "Autres options" #: ../Doc/distutils/setupscript.rst:337 msgid "" "There are still some other options which can be used to handle special cases." msgstr "" +"Il y a encore d'autres options qui peuvent être utilisées pour gérer des cas " +"spéciaux." #: ../Doc/distutils/setupscript.rst:339 msgid "" @@ -394,6 +577,9 @@ msgid "" "extension will not abort the build process, but instead simply not install " "the failing extension." msgstr "" +"L'option ``optional`` est un booléen ; s'il est vrai, un échec de la " +"construction dans l'extension n'annule pas le processus de construction, " +"mais à la place, l'extension en échec ne sera pas installée." #: ../Doc/distutils/setupscript.rst:343 msgid "" @@ -401,6 +587,9 @@ msgid "" "linker. These files must not have extensions, as the default extension for " "the compiler is used." msgstr "" +"L'option ``extra_objects`` est une liste d'objets fichiers à passer à " +"l'éditeur de liens. Ces fichiers ne doivent pas avoir d'extensions car " +"l'extension par défaut du compilateur est utilisée." #: ../Doc/distutils/setupscript.rst:347 msgid "" @@ -408,6 +597,9 @@ msgid "" "additional command line options for the respective compiler and linker " "command lines." msgstr "" +"``extra_compile_args`` et ``extra_link_args`` peuvent être utilisées pour " +"définir des options additionnelles en ligne de commande propres aux lignes " +"de commandes respectives du compilateur et de l'éditeur de liens." #: ../Doc/distutils/setupscript.rst:351 msgid "" @@ -416,6 +608,10 @@ msgid "" "when building compiled extensions: Distutils will automatically add " "``initmodule`` to the list of exported symbols." msgstr "" +"``export_symbols`` est seulement utile sur Windows. Elle peut contenir une " +"liste de symboles (fonctions ou variables) à exporter. Cette option n'est " +"pas requise pour la construction d'extensions compilées : *Distutils* ajoute " +"automatiquement ``initmodule`` à la liste des symboles exportés." #: ../Doc/distutils/setupscript.rst:356 msgid "" @@ -424,32 +620,40 @@ msgid "" "sources to rebuild extension if any on this files has been modified since " "the previous build." msgstr "" +"L'option ``depends`` est une liste de fichiers dont les extensions dépendent " +"(par exemple les fichiers d'en-têtes). La commande ``build`` appelle le " +"compilateur sur les sources pour reconstruire l'extension si un de ces " +"fichiers a été modifié depuis la dernière construction." #: ../Doc/distutils/setupscript.rst:362 msgid "Relationships between Distributions and Packages" -msgstr "" +msgstr "Relations entre distributions et paquets" #: ../Doc/distutils/setupscript.rst:364 msgid "A distribution may relate to packages in three specific ways:" msgstr "" +"Une distribution peut se rapporter à des paquets de trois manières " +"spécifiques :" #: ../Doc/distutils/setupscript.rst:366 msgid "It can require packages or modules." -msgstr "" +msgstr "elle peut nécessiter des paquets ou des modules ;" #: ../Doc/distutils/setupscript.rst:368 msgid "It can provide packages or modules." -msgstr "" +msgstr "elle peut fournir des paquets ou des modules ;" #: ../Doc/distutils/setupscript.rst:370 msgid "It can obsolete packages or modules." -msgstr "" +msgstr "elle peut rendre obsolète des paquets ou des modules." #: ../Doc/distutils/setupscript.rst:372 msgid "" "These relationships can be specified using keyword arguments to the :func:" "`distutils.core.setup` function." msgstr "" +"Ces relations peuvent être définies en utilisant des paramètres nommés dans " +"la fonction :func:`distutils.core.setup`." #: ../Doc/distutils/setupscript.rst:375 msgid "" @@ -458,6 +662,10 @@ msgid "" "be a list of strings. Each string specifies a package that is required, and " "optionally what versions are sufficient." msgstr "" +"Les dépendances à d'autres modules et paquets Python peuvent être définies " +"en fournissant le paramètre nommé ``requires`` à :func:`setup`. La valeur " +"doit être une liste de chaînes de caractères. Chaque chaîne de caractères " +"définit un paquet requis et, en option, les versions minimales." #: ../Doc/distutils/setupscript.rst:380 msgid "" @@ -465,6 +673,9 @@ msgid "" "should consist entirely of the module or package name. Examples include " "``'mymodule'`` and ``'xml.parsers.expat'``." msgstr "" +"S'il n'est pas nécessaire de préciser la version d'un module ou d'un paquet, " +"la chaîne de caractères contient simplement les noms de modules ou de " +"paquets. Par exemple ``mymodule`` et ``'xml.parsers.expat'``." #: ../Doc/distutils/setupscript.rst:384 msgid "" @@ -472,6 +683,10 @@ msgid "" "in parentheses. Each qualifier may consist of a comparison operator and a " "version number. The accepted comparison operators are::" msgstr "" +"Si des versions spécifiques sont requises, une suite de qualificatifs peut " +"être fournie entre parenthèses. Chaque qualificatif peut contenir un " +"opérateur de comparaison et un numéro de version. Les opérateurs de " +"comparaison acceptés sont ::" #: ../Doc/distutils/setupscript.rst:391 msgid "" @@ -479,14 +694,18 @@ msgid "" "optional whitespace). In this case, all of the qualifiers must be matched; " "a logical AND is used to combine the evaluations." msgstr "" +"Ils peuvent être combinés en utilisant plusieurs qualificatifs séparés par " +"des virgules (et de façon optionnelle, des espaces). Dans ce cas, tous les " +"qualificatifs doivent être respectés ; un ET logique est utilisé pour " +"combiner les évaluations." #: ../Doc/distutils/setupscript.rst:395 msgid "Let's look at a bunch of examples:" -msgstr "" +msgstr "Jetons un œil à quelques exemples :" #: ../Doc/distutils/setupscript.rst:398 msgid "Requires Expression" -msgstr "" +msgstr "Valeur de ``requires``" #: ../Doc/distutils/setupscript.rst:398 ../Doc/distutils/setupscript.rst:416 msgid "Explanation" @@ -494,20 +713,22 @@ msgstr "Explication" #: ../Doc/distutils/setupscript.rst:400 msgid "``==1.0``" -msgstr "" +msgstr "``==1.0``" #: ../Doc/distutils/setupscript.rst:400 msgid "Only version ``1.0`` is compatible" -msgstr "" +msgstr "Seule la version ``1.0`` est compatible." #: ../Doc/distutils/setupscript.rst:402 msgid "``>1.0, !=1.5.1, <2.0``" -msgstr "" +msgstr "``>1.0, !=1.5.1, <2.0``" #: ../Doc/distutils/setupscript.rst:402 msgid "" "Any version after ``1.0`` and before ``2.0`` is compatible, except ``1.5.1``" msgstr "" +"Toute version après ``1.0`` et avant ``2.0`` est compatible, à l'exception " +"de ``1.5.1``." #: ../Doc/distutils/setupscript.rst:406 msgid "" @@ -518,6 +739,13 @@ msgid "" "optionally identifies the version. If the version is not specified, it is " "assumed to match that of the distribution." msgstr "" +"Maintenant que nous pouvons définir des dépendances, nous devons également " +"être en mesure de définir ce que d'autres distributions peuvent attendre de " +"notre part. Cela est réalisé en utilisant l'argument nommé *provides* dans :" +"func:`setup`. La valeur de cet argument est une liste de chaînes de " +"caractères, chacune d'entre elles étant un module Python ou un paquet et, de " +"façon optionnelle, identifie une version. Si la version n'est pas définie, " +"il est supposé qu'elle correspond à celle de la distribution." #: ../Doc/distutils/setupscript.rst:413 msgid "Some examples:" @@ -525,23 +753,25 @@ msgstr "Quelques exemples :" #: ../Doc/distutils/setupscript.rst:416 msgid "Provides Expression" -msgstr "" +msgstr "Valeur de ``provides``" #: ../Doc/distutils/setupscript.rst:418 msgid "``mypkg``" -msgstr "" +msgstr "``mypkg``" #: ../Doc/distutils/setupscript.rst:418 msgid "Provide ``mypkg``, using the distribution version" -msgstr "" +msgstr "Fournit ``mypkg`` en utilisant la version de la distribution." #: ../Doc/distutils/setupscript.rst:421 msgid "``mypkg (1.1)``" -msgstr "" +msgstr "``mypkg (1.1)``" #: ../Doc/distutils/setupscript.rst:421 msgid "Provide ``mypkg`` version 1.1, regardless of the distribution version" msgstr "" +"Fournit ``mypkg`` en version 1.1, indépendamment de la version de la " +"distribution." #: ../Doc/distutils/setupscript.rst:425 msgid "" @@ -552,6 +782,13 @@ msgid "" "more version qualifiers. Version qualifiers are given in parentheses after " "the module or package name." msgstr "" +"On peut déclarer d'autres paquets obsolètes dans un paquet en utilisant " +"l'argument nommé *obsoletes*. La valeur pour celui-ci est similaire à celui " +"de l'argument nommé *requires* : une liste de chaînes de caractères donnant " +"les spécifications du module ou du paquet. Chaque spécification est " +"constituée d'un nom de module ou de paquet qui peut être suivi au choix par " +"un ou plusieurs qualificateurs de versions. Les qualificateurs de versions " +"sont donnés entre parenthèses après le nom de module ou de paquet." #: ../Doc/distutils/setupscript.rst:432 msgid "" @@ -559,16 +796,23 @@ msgid "" "the distribution being described. If no qualifiers are given, all versions " "of the named module or package are understood to be obsoleted." msgstr "" +"Les versions identifiées par les qualificateurs sont celles qui sont rendues " +"obsolètes par la distribution décrite. Si aucun qualificateur n'est donné, " +"toutes les versions du module ou du paquet nommé sont considérées comme " +"obsolètes." #: ../Doc/distutils/setupscript.rst:439 msgid "Installing Scripts" -msgstr "" +msgstr "Installation des scripts" #: ../Doc/distutils/setupscript.rst:441 msgid "" "So far we have been dealing with pure and non-pure Python modules, which are " "usually not run by themselves but imported by scripts." msgstr "" +"Jusqu'à présent nous avons interagi avec des modules Python purs ou non, qui " +"ne sont habituellement pas lancés par eux-mêmes mais importés par des " +"scripts." #: ../Doc/distutils/setupscript.rst:444 msgid "" @@ -581,22 +825,35 @@ msgid "" "`!--executable` (or :option:`!-e`) option will allow the interpreter path to " "be explicitly overridden." msgstr "" +"Les scripts sont des fichiers contenant du code source Python prévus pour " +"être lancés en ligne de commande. Les scripts n'ont pas besoin des " +"*Distutils* pour faire quoi que ce soit de très compliqué. La seule " +"fonctionnalité astucieuse est que la première ligne du script commence par " +"``#!`` et contient le mot « python », les *Distutils* ajusteront la première " +"ligne pour faire référence à l'emplacement actuel de l'interpréteur. Par " +"défaut, elle est remplacée par l'emplacement de l'interpréteur en fonction. " +"L'option :option:`!--executable` (ou :option:`!-e`) permet de définir " +"explicitement le chemin vers l'interpréteur." #: ../Doc/distutils/setupscript.rst:452 msgid "" "The ``scripts`` option simply is a list of files to be handled in this way. " "From the PyXML setup script::" msgstr "" +"L'option ``scripts`` est simplement une liste de fichiers à utiliser de " +"cette façon. Dans le script ``setup.py`` de PyML ::" #: ../Doc/distutils/setupscript.rst:459 msgid "" "All the scripts will also be added to the ``MANIFEST`` file if no template " "is provided. See :ref:`manifest`." msgstr "" +"Tous les scripts seront aussi ajoutés au fichier ``MANIFEST`` si aucun " +"modèle n'est fourni. Voir :ref:`manifest`." #: ../Doc/distutils/setupscript.rst:467 msgid "Installing Package Data" -msgstr "" +msgstr "Installation de paquets de données" #: ../Doc/distutils/setupscript.rst:469 msgid "" @@ -605,6 +862,11 @@ msgid "" "text files containing documentation that might be of interest to programmers " "using the package. These files are called :dfn:`package data`." msgstr "" +"Souvent, des fichiers additionnels doivent être installés dans le paquet. " +"Ces fichiers sont souvent de la donnée qui est intimement liée à " +"l'implémentation du paquet, ou des fichiers textes contenant de la " +"documentation intéressant le programmeur utilisant le paquet. Ces fichiers " +"sont appelés :dfn:`paquets de données `." #: ../Doc/distutils/setupscript.rst:474 msgid "" @@ -616,32 +878,47 @@ msgid "" "appropriate); that is, the files are expected to be part of the package in " "the source directories. They may contain glob patterns as well." msgstr "" +"Les paquets de données peuvent être ajoutés en utilisant l'argument nommé " +"``package_data`` dans la fonction :func:`setup`. La valeur doit être un " +"tableau de correspondances entre le nom du paquet et une liste de chemins " +"relatifs à copier dans le paquet. Les chemins sont interprétés relativement " +"au répertoire contenant le paquet (l'information du mappage ``package_dir`` " +"est utilisée le cas échéant) ; ceci étant, il convient que les fichiers " +"fassent partie du répertoire source du paquet. Ils peuvent également " +"contenir des motifs `glob`." #: ../Doc/distutils/setupscript.rst:482 msgid "" "The path names may contain directory portions; any necessary directories " "will be created in the installation." msgstr "" +"Les chemins d'accès peuvent contenir une hiérarchie de répertoires ; tout " +"répertoire nécessaire sera créé dans cette installation." #: ../Doc/distutils/setupscript.rst:485 msgid "" "For example, if a package should contain a subdirectory with several data " "files, the files can be arranged like this in the source tree::" msgstr "" +"Par exemple, si un paquet doit inclure un sous-répertoire avec plusieurs " +"fichiers de donnée, les fichiers peuvent être organisés dans l'arborescence " +"de la façon suivante ::" #: ../Doc/distutils/setupscript.rst:498 msgid "The corresponding call to :func:`setup` might be::" -msgstr "" +msgstr "L'appel correspondant à :func:`setup` peut s'écrire ::" #: ../Doc/distutils/setupscript.rst:507 msgid "" "All the files that match ``package_data`` will be added to the ``MANIFEST`` " "file if no template is provided. See :ref:`manifest`." msgstr "" +"Tous les fichiers correspondant à ``package_data`` seront ajoutés au fichier " +"``MANIFEST`` si aucun modèle n'est fourni. Voir :ref:`manifest`." #: ../Doc/distutils/setupscript.rst:515 msgid "Installing Additional Files" -msgstr "" +msgstr "Installation de fichiers additionnels" #: ../Doc/distutils/setupscript.rst:517 msgid "" @@ -649,12 +926,18 @@ msgid "" "the module distribution: configuration files, message catalogs, data files, " "anything which doesn't fit in the previous categories." msgstr "" +"L'option ``data_files`` peut être utilisée pour définir des fichiers " +"additionnels requis pour la distribution du module : fichiers de " +"configuration, catalogues de messages, fichiers de donnée, tout ce qui ne " +"rentre pas dans les catégories précédentes." #: ../Doc/distutils/setupscript.rst:521 msgid "" "``data_files`` specifies a sequence of (*directory*, *files*) pairs in the " "following way::" msgstr "" +"``data_files`` définit une séquence de paires (*répertoires*, *fichiers*) de " +"la façon suivante ::" #: ../Doc/distutils/setupscript.rst:530 msgid "" @@ -682,26 +965,36 @@ msgid "" "files directly in the target directory, an empty string should be given as " "the directory." msgstr "" +"Vous pouvez définir les options ``data_files`` comme une simple succession " +"de fichiers sans définir de répertoire cible, mais cela n'est pas " +"recommandé, et la commande :command:`install` affichera un message d'alerte " +"dans ce cas. Pour installer des fichiers de donnée directement dans le " +"répertoire cible, une chaîne de caractère vide doit être donnée en tant que " +"répertoire." #: ../Doc/distutils/setupscript.rst:548 msgid "" "All the files that match ``data_files`` will be added to the ``MANIFEST`` " "file if no template is provided. See :ref:`manifest`." msgstr "" +"Tous les fichiers correspondant à ``data_files`` seront ajoutés au fichier " +"``MANIFEST`` si aucun modèle n'est fourni. Voir :ref:`manifest`." #: ../Doc/distutils/setupscript.rst:556 msgid "Additional meta-data" -msgstr "" +msgstr "Métadonnées additionnelles" #: ../Doc/distutils/setupscript.rst:558 msgid "" "The setup script may include additional meta-data beyond the name and " "version. This information includes:" msgstr "" +"Le script ``setup.py`` peut inclure des métadonnées additionnelles en plus " +"du nom et de la version. Cela inclut les informations suivantes :" #: ../Doc/distutils/setupscript.rst:562 msgid "Meta-Data" -msgstr "" +msgstr "Métadonnées" #: ../Doc/distutils/setupscript.rst:562 msgid "Description" @@ -721,13 +1014,13 @@ msgstr "``name``" #: ../Doc/distutils/setupscript.rst:564 msgid "name of the package" -msgstr "" +msgstr "nom du paquet" #: ../Doc/distutils/setupscript.rst:564 ../Doc/distutils/setupscript.rst:566 #: ../Doc/distutils/setupscript.rst:568 ../Doc/distutils/setupscript.rst:573 #: ../Doc/distutils/setupscript.rst:580 ../Doc/distutils/setupscript.rst:594 msgid "short string" -msgstr "" +msgstr "courte chaîne de caractères" #: ../Doc/distutils/setupscript.rst:564 ../Doc/distutils/setupscript.rst:578 msgid "\\(1)" @@ -739,7 +1032,7 @@ msgstr "``version``" #: ../Doc/distutils/setupscript.rst:566 msgid "version of this release" -msgstr "" +msgstr "version de la publication" #: ../Doc/distutils/setupscript.rst:566 msgid "(1)(2)" @@ -747,11 +1040,11 @@ msgstr "(1)(2)" #: ../Doc/distutils/setupscript.rst:568 msgid "``author``" -msgstr "" +msgstr "``author``" #: ../Doc/distutils/setupscript.rst:568 msgid "package author's name" -msgstr "" +msgstr "nom de l'auteur du paquet" #: ../Doc/distutils/setupscript.rst:568 ../Doc/distutils/setupscript.rst:570 #: ../Doc/distutils/setupscript.rst:573 ../Doc/distutils/setupscript.rst:575 @@ -760,31 +1053,31 @@ msgstr "\\(3)" #: ../Doc/distutils/setupscript.rst:570 msgid "``author_email``" -msgstr "" +msgstr "``author_email``" #: ../Doc/distutils/setupscript.rst:570 msgid "email address of the package author" -msgstr "" +msgstr "adresse courriel de l'auteur du paquet" #: ../Doc/distutils/setupscript.rst:570 ../Doc/distutils/setupscript.rst:575 msgid "email address" -msgstr "" +msgstr "adresse de courriel" #: ../Doc/distutils/setupscript.rst:573 msgid "``maintainer``" -msgstr "" +msgstr "``maintainer``" #: ../Doc/distutils/setupscript.rst:573 msgid "package maintainer's name" -msgstr "" +msgstr "nom du mainteneur du paquet" #: ../Doc/distutils/setupscript.rst:575 msgid "``maintainer_email``" -msgstr "" +msgstr "``maintainer_email``" #: ../Doc/distutils/setupscript.rst:575 msgid "email address of the package maintainer" -msgstr "" +msgstr "adresse du courriel du mainteneur du paquet" #: ../Doc/distutils/setupscript.rst:578 msgid "``url``" @@ -792,11 +1085,11 @@ msgstr "``url``" #: ../Doc/distutils/setupscript.rst:578 msgid "home page for the package" -msgstr "" +msgstr "page d’accueil du paquet" #: ../Doc/distutils/setupscript.rst:578 ../Doc/distutils/setupscript.rst:587 msgid "URL" -msgstr "" +msgstr "URL" #: ../Doc/distutils/setupscript.rst:580 msgid "``description``" @@ -804,7 +1097,7 @@ msgstr "``description``" #: ../Doc/distutils/setupscript.rst:580 msgid "short, summary description of the package" -msgstr "" +msgstr "bref résumé décrivant le paquet" #: ../Doc/distutils/setupscript.rst:584 msgid "``long_description``" @@ -812,11 +1105,11 @@ msgstr "``long_description``" #: ../Doc/distutils/setupscript.rst:584 msgid "longer description of the package" -msgstr "" +msgstr "description plus complète du paquet" #: ../Doc/distutils/setupscript.rst:584 msgid "long string" -msgstr "" +msgstr "longue chaîne de caractères" #: ../Doc/distutils/setupscript.rst:584 msgid "\\(5)" @@ -824,11 +1117,11 @@ msgstr "\\(5)" #: ../Doc/distutils/setupscript.rst:587 msgid "``download_url``" -msgstr "" +msgstr "``download_url``" #: ../Doc/distutils/setupscript.rst:587 msgid "location where the package may be downloaded" -msgstr "" +msgstr "endroit où le paquet peut être téléchargé" #: ../Doc/distutils/setupscript.rst:587 ../Doc/distutils/setupscript.rst:590 msgid "\\(4)" @@ -836,23 +1129,23 @@ msgstr "\\(4)" #: ../Doc/distutils/setupscript.rst:590 msgid "``classifiers``" -msgstr "" +msgstr "``classifiers``" #: ../Doc/distutils/setupscript.rst:590 msgid "a list of classifiers" -msgstr "" +msgstr "une liste de classificateurs" #: ../Doc/distutils/setupscript.rst:590 ../Doc/distutils/setupscript.rst:592 msgid "list of strings" -msgstr "" +msgstr "liste de chaînes de caractères" #: ../Doc/distutils/setupscript.rst:592 msgid "``platforms``" -msgstr "" +msgstr "``platforms``" #: ../Doc/distutils/setupscript.rst:592 msgid "a list of platforms" -msgstr "" +msgstr "une liste de plateformes" #: ../Doc/distutils/setupscript.rst:594 msgid "``license``" @@ -860,7 +1153,7 @@ msgstr "``license``" #: ../Doc/distutils/setupscript.rst:594 msgid "license for the package" -msgstr "" +msgstr "licence du paquet" #: ../Doc/distutils/setupscript.rst:594 msgid "\\(6)" @@ -868,28 +1161,32 @@ msgstr "\\(6)" #: ../Doc/distutils/setupscript.rst:597 msgid "Notes:" -msgstr "Notes : " +msgstr "Notes :" #: ../Doc/distutils/setupscript.rst:600 msgid "These fields are required." -msgstr "" +msgstr "Ces champs sont requis." #: ../Doc/distutils/setupscript.rst:603 msgid "" "It is recommended that versions take the form *major.minor[.patch[.sub]]*." msgstr "" +"Il est recommandé que les versions prennent la forme *majeure.mineure[." +"correctif[.sous-correctif]]*." #: ../Doc/distutils/setupscript.rst:606 msgid "" "Either the author or the maintainer must be identified. If maintainer is " "provided, distutils lists it as the author in :file:`PKG-INFO`." msgstr "" +"L'auteur ou un mainteneur doit être identifié. Si un mainteneur est fourni, " +"*distutils* l'indique en tant qu'auteur dans le fichier :file:`PKG-INFO`." #: ../Doc/distutils/setupscript.rst:610 msgid "" "These fields should not be used if your package is to be compatible with " "Python versions prior to 2.2.3 or 2.3. The list is available from the `PyPI " -"website `_." +"website `_." msgstr "" #: ../Doc/distutils/setupscript.rst:615 @@ -906,6 +1203,11 @@ msgid "" "See the ``Classifier`` field. Notice that there's a ``licence`` distribution " "option which is deprecated but still acts as an alias for ``license``." msgstr "" +"Le champ ``license`` est un texte indiquant la licence du paquet quand la " +"licence n'est pas indiquée dans les classificateurs de type « Licence » " +"Trove. Voir le champ ``Classifier``. À noter qu'il y a une option de " +"distribution ``licence`` qui est obsolète mais agit toujours comme un alias " +"pour ``license``." #: ../Doc/distutils/setupscript.rst:627 msgid "'short string'" @@ -913,7 +1215,7 @@ msgstr "'chaîne courte'" #: ../Doc/distutils/setupscript.rst:627 msgid "A single line of text, not more than 200 characters." -msgstr "" +msgstr "Une simple ligne de texte ne dépassant par 200 caractères." #: ../Doc/distutils/setupscript.rst:631 msgid "'long string'" @@ -924,6 +1226,8 @@ msgid "" "Multiple lines of plain text in reStructuredText format (see http://docutils." "sourceforge.net/)." msgstr "" +"De multiples lignes de texte au format ReStructuredText (voir http://" +"docutils.sourceforge.net/)." #: ../Doc/distutils/setupscript.rst:634 msgid "'list of strings'" @@ -931,7 +1235,7 @@ msgstr "'liste de chaînes'" #: ../Doc/distutils/setupscript.rst:634 msgid "See below." -msgstr "" +msgstr "Voir ci-dessous." #: ../Doc/distutils/setupscript.rst:636 msgid "" @@ -947,22 +1251,34 @@ msgid "" "which only fix bugs) and \"pr1,pr2,...,prN\" (for final pre-release release " "testing). Some examples:" msgstr "" +"Encoder les informations de version est un art en soi. Les paquets Python " +"adhèrent généralement au format de version *majeure.mineure[.correctif]" +"[sous]*. Le numéro majeur 0 est utilisé pour les publications " +"expérimentales, initiales d'un logiciel. Il est incrémenté pour les " +"publications qui représentent des étapes majeures pour le paquet. Le nombre " +"mineur est incrémenté quand d'importantes nouvelles fonctionnalités sont " +"ajoutées au paquet. Le numéro de correctif s'incrémente lors de la " +"publication d'une correction de bogue est faite. Celles-ci sont \"*a1,a2,...," +"aN*\" (pour les publications alpha, où les fonctionnalités et l'API peut " +"changer), \"*b1,b2,...,bN*\" (pour les publications *beta*, qui corrigent " +"seulement les bogues) et \"*pr1,pr2,...,prN*\" (pour les ultimes pré-" +"publication et publications de test). Quelques exemples :" #: ../Doc/distutils/setupscript.rst:648 msgid "0.1.0" -msgstr "" +msgstr "0.1.0" #: ../Doc/distutils/setupscript.rst:648 msgid "the first, experimental release of a package" -msgstr "" +msgstr "la première, publication expérimentale du paquet" #: ../Doc/distutils/setupscript.rst:651 msgid "1.0.1a2" -msgstr "" +msgstr "1.0.1a2" #: ../Doc/distutils/setupscript.rst:651 msgid "the second alpha release of the first patch version of 1.0" -msgstr "" +msgstr "la seconde publication alpha du premier correctif de la version 1.0" #: ../Doc/distutils/setupscript.rst:653 msgid "``classifiers`` are specified in a Python list::" @@ -970,13 +1286,15 @@ msgstr "" #: ../Doc/distutils/setupscript.rst:677 msgid "Debugging the setup script" -msgstr "" +msgstr "Débogage du script ``setup.py``" #: ../Doc/distutils/setupscript.rst:679 msgid "" "Sometimes things go wrong, and the setup script doesn't do what the " "developer wants." msgstr "" +"Parfois les choses tournent mal et le script ``setup.py`` ne fait pas ce que " +"le développeur veut." #: ../Doc/distutils/setupscript.rst:682 msgid "" @@ -988,6 +1306,14 @@ msgid "" "or the Python installation is broken because they don't read all the way " "down to the bottom and see that it's a permission problem." msgstr "" +"*Distutils* intercepte toute exception lors de l'exécution du script ``setup." +"py`` et affiche un message d'erreur simple avant d'arrêter le script. L'idée " +"est de ne pas embrouiller les administrateurs qui ne savent pas grand-chose " +"de Python et qui essayent d'installer un paquet. S'ils reçoivent une grosse " +"et longue trace d'appels provenant des entrailles de *Distutils*, ils " +"peuvent penser que le paquet ou que l'installation de Python est corrompue " +"car, ils ne lisent pas tout jusqu'en bas alors que c'est un problème de " +"droits." #: ../Doc/distutils/setupscript.rst:690 msgid "" @@ -998,3 +1324,10 @@ msgid "" "traceback when an exception occurs, and print the whole command line when an " "external program (like a C compiler) fails." msgstr "" +"D'un autre côté, cela n'aide pas le développeur à trouver la cause du " +"problème. À cette fin, la variable d'environnement :envvar:`DISTUTILS_DEBUG` " +"peut être assignée à n'importe quoi sauf une chaîne de caractères vide, et " +"*distutils* affichera maintenant une information détaillée à propos de ce " +"qu'il fait, déversera la trace d'appels complète lors d'une exception, et " +"affichera la ligne de commande complète quand un programme externe (comme un " +"compilateur C) échoue." diff --git a/distutils/sourcedist.po b/distutils/sourcedist.po index 420c1f321..8b0f74a59 100644 --- a/distutils/sourcedist.po +++ b/distutils/sourcedist.po @@ -37,25 +37,25 @@ msgid "" "format for the current platform. The default format is a gzip'ed tar file (:" "file:`.tar.gz`) on Unix, and ZIP file on Windows." msgstr "" -"(supposant que vous n'avez spécifié aucune option pour la commande :command:" -"`sdist` dans le script de préparation ou le fichier de configuration), :" -"command:`sdist` créé une archive au format par défaut pour la plateforme " -"utilisé. Le format par défaut est un fichier tar gzippé (:file:`.tar.gz`) " -"sur Unix et un fichier ZIP sur Windows." +"(en supposant que vous n'avez spécifié aucune option pour la commande :" +"command:`sdist` dans le script de préparation ou le fichier de " +"configuration), :command:`sdist` crée une archive au format par défaut pour " +"la plateforme utilisée. Le format par défaut est un fichier *tar* compressé " +"(:file:`.tar.gz`) sur Unix et un fichier ZIP sur Windows." #: ../Doc/distutils/sourcedist.rst:17 msgid "" "You can specify as many formats as you like using the :option:`!--formats` " "option, for example::" msgstr "" -"Vous pouvez donner autant de formats que necessaire via l'option :option:`!--" +"Vous pouvez donner autant de formats que désiré *via* l'option :option:`!--" "formats`, par exemple ::" #: ../Doc/distutils/sourcedist.rst:22 msgid "to create a gzipped tarball and a zip file. The available formats are:" msgstr "" -"pour créer un fichier tarball gzippé et un fichier ZIP. Les formats " -"disponibles actuellement sont:" +"pour créer un fichier *tarball* compressé et un fichier ZIP. Les formats " +"disponibles actuellement sont :" #: ../Doc/distutils/sourcedist.rst:25 msgid "Format" @@ -75,11 +75,11 @@ msgstr "``zip``" #: ../Doc/distutils/sourcedist.rst:27 msgid "zip file (:file:`.zip`)" -msgstr "Fichier zip (:file:`.zip`)" +msgstr "Fichier *zip* (:file:`.zip`)" #: ../Doc/distutils/sourcedist.rst:27 msgid "(1),(3)" -msgstr "(1),(3)" +msgstr "(1), (3)" #: ../Doc/distutils/sourcedist.rst:29 msgid "``gztar``" @@ -87,7 +87,7 @@ msgstr "``gztar``" #: ../Doc/distutils/sourcedist.rst:29 msgid "gzip'ed tar file (:file:`.tar.gz`)" -msgstr "Fichier tar gzippé (:file:`.tar.gz`)" +msgstr "Fichier *tar* compressé par *gzip* (:file:`.tar.gz`)" #: ../Doc/distutils/sourcedist.rst:29 msgid "\\(2)" @@ -99,7 +99,7 @@ msgstr "``bztar``" #: ../Doc/distutils/sourcedist.rst:32 msgid "bzip2'ed tar file (:file:`.tar.bz2`)" -msgstr "Fichier tar bzip2 (:file:`.tar.bz2`)" +msgstr "Fichier *tar* compressé par *bzip2* (:file:`.tar.bz2`)" #: ../Doc/distutils/sourcedist.rst:35 msgid "``xztar``" @@ -107,7 +107,7 @@ msgstr "``xztar``" #: ../Doc/distutils/sourcedist.rst:35 msgid "xz'ed tar file (:file:`.tar.xz`)" -msgstr "fichier tar de type xz (:file:`.tar.xz`)" +msgstr "Fichier *tar* compressé par *xz* (:file:`.tar.xz`)" #: ../Doc/distutils/sourcedist.rst:38 msgid "``ztar``" @@ -115,7 +115,7 @@ msgstr "``ztar``" #: ../Doc/distutils/sourcedist.rst:38 msgid "compressed tar file (:file:`.tar.Z`)" -msgstr "Fichier tar compressé (:file:`.tar.Z`)" +msgstr "Fichier *tar* compressé par *compress* (:file:`.tar.Z`)" #: ../Doc/distutils/sourcedist.rst:38 msgid "\\(4)" @@ -127,15 +127,15 @@ msgstr "``tar``" #: ../Doc/distutils/sourcedist.rst:41 msgid "tar file (:file:`.tar`)" -msgstr "Fichier tar (:file:`.tar`)" +msgstr "fichier *tar* (:file:`.tar`)" #: ../Doc/distutils/sourcedist.rst:44 msgid "Added support for the ``xztar`` format." -msgstr "Ajout du support des fichiers ``xztar``" +msgstr "Ajout du support des fichiers ``xztar``." #: ../Doc/distutils/sourcedist.rst:47 msgid "Notes:" -msgstr "Notes : " +msgstr "Notes :" #: ../Doc/distutils/sourcedist.rst:50 msgid "default on Windows" @@ -159,7 +159,7 @@ msgid "" "pending for deprecation and will be removed in the future versions of Python." msgstr "" "nécessite le programme :program:`compress`. Remarquez que ce format sera " -"bientôt déprécié et sera enlevé des prochaines version de Python." +"bientôt obsolète et sera enlevé des prochaines version de Python." #: ../Doc/distutils/sourcedist.rst:63 msgid "" @@ -176,7 +176,7 @@ msgstr "" msgid "For example, if you want all files of the archive to be owned by root::" msgstr "" "Par exemple, si vous voulez que tous les fichiers de l'archive soient détenu " -"par *root*::" +"par *root* ::" #: ../Doc/distutils/sourcedist.rst:75 msgid "Specifying the files to distribute" @@ -190,7 +190,7 @@ msgid "" msgstr "" "Si vous ne fournissez pas une liste explicite de fichiers (ou les " "instructions pour la générer), la commande :command:`sdist` en met par " -"défaut le minimum dans la distribution source:" +"défaut le minimum dans la distribution source :" #: ../Doc/distutils/sourcedist.rst:81 msgid "" @@ -222,9 +222,9 @@ msgid "" "source distributions, but in the future there will be a standard for testing " "Python module distributions)" msgstr "" -"tout ce qui ressemble a un script de test :file:`test/test\\*.py` (pour " -"l'instant, Distutils ne fait rien avec ces scripts de test a part les " -"inclure dans les distributions source, mais dans le futur un standard sera " +"tout ce qui ressemble à un script de test :file:`test/test\\*.py` (pour " +"l'instant, Distutils ne fait rien avec ces scripts de test, si ce n'est les " +"inclure dans les distributions sources, mais dans le futur un standard sera " "implémenté pour tester les distributions de module Python)" #: ../Doc/distutils/sourcedist.rst:98 @@ -264,13 +264,13 @@ msgid "" "filesystem." msgstr "" "Parfois ce fonctionnement suffit, mais généralement vous voudrez spécifier " -"des fichier supplémentaire a distribuer. La voie courante pour le faire est " -"d'écrire un *manifeste modèle*, appelé :file:`MANIFEST.in` par défaut. Ce " -"modèle manifeste est juste une liste d'instructions pour générer votre " -"fichier manifeste final, :file:`MANIFEST`, qui est liste exacte des fichiers " -"à inclure dans votre distribution source. La commande :command:`sdist` " -"traite ce modèle et génère un manifeste basé sur ces instructions et ce " -"qu'il trouve dans le système de fichier." +"des fichiers supplémentaires à distribuer. La façon classique de le faire " +"est d'écrire un *manifeste modèle*, appelé :file:`MANIFEST.in` par défaut. " +"Ce manifeste modèle est juste une liste d'instructions pour générer votre " +"fichier manifeste final, :file:`MANIFEST`, qui est la liste exacte des " +"fichiers à inclure dans votre distribution source. La commande :command:" +"`sdist` traite ce modèle et génère un manifeste à partir de ces instructions " +"et de ce qu'elle trouve dans le système de fichiers." #: ../Doc/distutils/sourcedist.rst:115 msgid "" @@ -279,11 +279,11 @@ msgid "" "supply your own :file:`MANIFEST`, you must specify everything: the default " "set of files described above does not apply in this case." msgstr "" -"Si vous préferez créer votre propre fichier manifeste, le format est simple: " -"un nom de fichier par ligne, uniquement des fichiers normaux (ou leur lien " -"symbolique). Si vous fournissez votre propre :file:`MANIFEST`, vous devez " -"tout spécifier: le groupe de fichier par défaut décrit au dessus ne sera pas " -"inclu automatiquement dans ce cas" +"Si vous préférez créer votre propre fichier manifeste, le format est " +"simple : un nom de fichier par ligne, uniquement des fichiers normaux (ou " +"leur lien symbolique). Si vous fournissez votre propre :file:`MANIFEST`, " +"vous devez tout spécifier : les groupes de fichiers par défaut décrits au-" +"dessus ne sont pas inclus automatiquement dans ce cas." #: ../Doc/distutils/sourcedist.rst:120 msgid "" @@ -291,25 +291,26 @@ msgid "" "`sdist` comparing its modification time to the one of :file:`MANIFEST.in` " "or :file:`setup.py`." msgstr "" -"Un :file:`MANIFEST` généré existant sera regénéré sans que :command:`sdist` " -"compare son heure de modification à :file:`MANIFEST.in` ou :file:`setup.py`." +"Un :file:`MANIFEST` existant généré automatiquement sera régénéré sans que :" +"command:`sdist` ne compare son heure de modification à :file:`MANIFEST.in` " +"ou :file:`setup.py`." #: ../Doc/distutils/sourcedist.rst:125 msgid "" ":file:`MANIFEST` files start with a comment indicating they are generated. " "Files without this comment are not overwritten or removed." msgstr "" -"Les fichiers :file:`MANIFEST` commence avec un commentaire indiquant qu'ils " +"Les fichiers :file:`MANIFEST` commencent par un commentaire indiquant qu'ils " "sont générés. Les fichiers sans ce commentaire ne sont pas réécrits ou " -"supprimés" +"supprimés." #: ../Doc/distutils/sourcedist.rst:129 msgid "" ":command:`sdist` will read a :file:`MANIFEST` file if no :file:`MANIFEST.in` " "exists, like it used to do." msgstr "" -":command:`sdist` lira un ficher :file:`MANIFEST` si il n'existe pas de :file:" -"`MANIFEST.in` , tel qu'il y en a d'habitude." +":command:`sdist` lira un ficher :file:`MANIFEST` s'il n'existe pas de :file:" +"`MANIFEST.in` , tel qu'il en avait l'habitude." #: ../Doc/distutils/sourcedist.rst:134 msgid "" @@ -317,9 +318,9 @@ msgid "" "a set of files to include or exclude from the source distribution. For an " "example, again we turn to the Distutils' own manifest template:" msgstr "" -"Le modèle de manifeste a une commande par ligne, où chaque commande spécifie " -"un ensemble de fichiers à inclure ou à exclure de la distribution source. " -"Par exemple, regardons encore le manifest de Distutils :" +"Le modèle de manifeste possède une commande par ligne, où chaque commande " +"spécifie un ensemble de fichiers à inclure ou à exclure de la distribution " +"source. Par exemple, regardons à nouveau le propre manifeste de Distutils :" #: ../Doc/distutils/sourcedist.rst:144 msgid "" @@ -333,14 +334,14 @@ msgid "" "There are several other commands available in the manifest template mini-" "language; see section :ref:`sdist-cmd`." msgstr "" -"L'intention doit être assez claire : inclure tous les fichiers à la racine " -"de la distribution correpondant à :file:`*.txt`, tous les fichiers n'importe " -"où dans le dossier :file:`examples` correpondant à :file:`\\*.txt` ou :file:`" -"\\*.py`, et exclus tous les dossier correspondant à :file:`examples/sample?/" -"build`. Tout ceci est fait **après** l'ensemble d'inclusions standards, vous " -"pouvez donc exclure des fichiers précédamment inclus en utilisant une " -"instruction explicite dans le manifeste. (Vous pouvez aussi utiliser " -"l'option :option:`!--no-defaults` pour désactiver complètement les " +"La signification est assez claire : inclure tous les fichiers à la racine de " +"la distribution correspondant à :file:`*.txt`, tous les fichiers n'importe " +"où dans le dossier :file:`examples` correspondant à :file:`\\*.txt` ou :file:" +"`\\*.py`, et exclure tous les dossiers correspondant à :file:`examples/" +"sample?/build`. Tout ceci est fait **après** l'ensemble d'inclusions " +"standard, vous pouvez donc exclure des fichiers précédemment inclus en " +"utilisant une instruction explicite dans le manifeste. (Vous pouvez aussi " +"utiliser l'option :option:`!--no-defaults` pour désactiver complètement les " "inclusions standards). Il existe d'autres commandes dans le langage du " "fichier manifeste, consultez le chapitre :ref:`sdist-cmd`." @@ -352,11 +353,11 @@ msgid "" "processed the manifest template, we remove files that should not be included " "in the source distribution:" msgstr "" -"L'ordre des commandes dans le modèle manifeste compte: nous avons a la base " -"la liste de fichier par défaut tel que décrit plus haut et chaque commande " -"du modèle ajoute ou supprime des fichier de cette liste. Une fois que vous " -"avez fini de traiter le modèle manifeste, nous enlevons les fichiers qui ne " -"doivent pas être inclut dans la distribution source:" +"L'ordre des commandes dans le modèle manifeste compte : nous avons, à la " +"base, la liste de fichiers par défaut telle que décrite plus haut. Ensuite, " +"chaque commande du modèle ajoute ou supprime des fichiers de cette liste. " +"Une fois que le traitement du manifeste modèle est fini, nous enlevons les " +"fichiers qui ne doivent pas être inclus dans la distribution source :" #: ../Doc/distutils/sourcedist.rst:160 msgid "all files in the Distutils \"build\" tree (default :file:`build/`)" @@ -377,8 +378,8 @@ msgid "" "Now we have our complete list of files, which is written to the manifest for " "future reference, and then used to build the source distribution archive(s)." msgstr "" -"Maintenant nous avons notre liste complète de fichier, qui est désormais " -"écrite dans le manifeste pour une utilisation future et qui est utilisé pour " +"Maintenant nous avons notre liste complète de fichiers ; elle est désormais " +"écrite dans le manifeste pour une utilisation future et sera utilisée pour " "construire la ou les archive(s) de notre distribution source." #: ../Doc/distutils/sourcedist.rst:168 @@ -397,9 +398,9 @@ msgid "" "`sdist` command builds the list of files to include in the Distutils source " "distribution:" msgstr "" -"Voici le modèle manifeste de Distutils, suivons comment la commande :command:" -"`sdist` contruit la liste des fichiers a inclure dans la distribution source " -"de Distutils." +"Voici le manifeste modèle de Distutils, suivons comment la commande :command:" +"`sdist` construit la liste des fichiers à inclure dans la distribution " +"source de Distutils." #: ../Doc/distutils/sourcedist.rst:176 msgid "" @@ -408,10 +409,10 @@ msgid "" "two directories were mentioned in the ``packages`` option in the setup " "script---see section :ref:`setup-script`)" msgstr "" -"inclure tous les fichier source Python dans les sous-dossiers :file:" -"`distutils` et :file:`distutils/command` (parce que des packages " +"inclure tous les fichiers source Python dans les sous-dossiers :file:" +"`distutils` et :file:`distutils/command` (parce que des paquets " "correspondant à ces deux dossiers ont été mentionnés dans l'argument " -"``packages`` du script d'installation ---voir le chapitre :ref:`setup-" +"``packages`` du script d'installation --- voir le chapitre :ref:`setup-" "script`)" #: ../Doc/distutils/sourcedist.rst:181 @@ -419,8 +420,8 @@ msgid "" "include :file:`README.txt`, :file:`setup.py`, and :file:`setup.cfg` " "(standard files)" msgstr "" -"inclure :file:`README.txt`, :file:`setup.py`, et :file:`setup.cfg` (fichiers " -"standard)" +"inclure :file:`README.txt`, :file:`setup.py` et :file:`setup.cfg` (fichiers " +"standards)" #: ../Doc/distutils/sourcedist.rst:184 msgid "include :file:`test/test\\*.py` (standard files)" @@ -431,7 +432,7 @@ msgid "" "include :file:`\\*.txt` in the distribution root (this will find :file:" "`README.txt` a second time, but such redundancies are weeded out later)" msgstr "" -"inclure :file:`\\*.txt` à la racine de la distribution (ceci trouvera :file:" +"inclure :file:`\\*.txt` à la racine de la distribution (ceci trouve :file:" "`README.txt` une seconde fois, mais les redondances sont supprimées plus " "tard)" @@ -440,7 +441,7 @@ msgid "" "include anything matching :file:`\\*.txt` or :file:`\\*.py` in the sub-tree " "under :file:`examples`," msgstr "" -"inclure tout fichier ressemblant à :file:`\\*.txt` ou :file:`\\*.py` dans la " +"inclure tout fichier de la forme :file:`\\*.txt` ou :file:`\\*.py` dans la " "sous-arborescence de :file:`examples`," #: ../Doc/distutils/sourcedist.rst:192 @@ -450,11 +451,11 @@ msgid "" "previous two steps, so it's important that the ``prune`` command in the " "manifest template comes after the ``recursive-include`` command" msgstr "" -"exclure tout les fichiers dans la sous-arborescence démarrant au dossier " -"ressemblant à :file:`examples/sample?/build`\\ --- Ceci peut exclure des " -"fichiers inclut dans les étapes précédentes, il est donc important que la " -"commande ``prune`` dans le modèle manifeste vienne après la commande " -"``recursive-include``" +"exclure tous les fichiers dans les sous-arborescences dont les dossiers " +"racines sont de la forme :file:`examples/sample?/build`\\ --- Ceci peut " +"exclure des fichiers inclus dans les étapes précédentes, il est donc " +"important que la commande ``prune`` dans le manifeste modèle vienne après la " +"commande ``recursive-include``" #: ../Doc/distutils/sourcedist.rst:197 msgid "" @@ -473,15 +474,15 @@ msgid "" "converting them to the standard representation on your platform. That way, " "the manifest template is portable across operating systems." msgstr "" -"Comme dans le script de préparation, les chemins des fichier et des dossiers " -"dans le modèle manifeste doivent toujours être séparés par des slash; " -"Distutils s'occupera de les convertir a la représentation standard de votre " -"plateforme. De cette manière, le modèle manifeste est portable sur tout " -"système d'exploitation" +"Comme dans le script de préparation, les chemins des fichiers et des " +"dossiers dans le manifeste modèle doivent toujours être séparés par des " +"barres obliques (*slash* en anglais) ; Distutils s'occupe de les convertir à " +"la représentation standard de votre plateforme. De cette manière, le " +"manifeste modèle est portable sur tout système d'exploitation." #: ../Doc/distutils/sourcedist.rst:210 msgid "Manifest-related options" -msgstr "Options en rapport avec le manifeste" +msgstr "Options pour le manifeste" #: ../Doc/distutils/sourcedist.rst:212 msgid "" @@ -489,7 +490,7 @@ msgid "" "follows:" msgstr "" "L'ordre normal des opérations pour la commande :command:`sdist` est le " -"suivant:" +"suivant :" #: ../Doc/distutils/sourcedist.rst:214 msgid "" @@ -499,14 +500,14 @@ msgid "" msgstr "" "si le fichier manifeste (:file:`MANIFEST` par défaut) existe et que la " "première ligne n'a pas de commentaire indiquant qu'il a été généré par :file:" -"`MANIFEST.in`, alors il est utiliser tel quel, inchangé" +"`MANIFEST.in`, alors il est utilisé tel quel, inchangé" #: ../Doc/distutils/sourcedist.rst:218 msgid "" "if the manifest file doesn't exist or has been previously automatically " "generated, read :file:`MANIFEST.in` and create the manifest" msgstr "" -"si le manifeste n'existe pas ou qu'il a été généré automatiquement, lire :" +"si le manifeste n'existe pas ou s'il a été généré automatiquement, lire :" "file:`MANIFEST.in` et créer le manifeste" #: ../Doc/distutils/sourcedist.rst:221 @@ -514,15 +515,15 @@ msgid "" "if neither :file:`MANIFEST` nor :file:`MANIFEST.in` exist, create a manifest " "with just the default file set" msgstr "" -"si il n'existe ni :file:`MANIFEST` ni :file:`MANIFEST.in`, alors créer un " -"manifeste contenant uniquement le groupe de fichier par défaut" +"s'il n'existe ni :file:`MANIFEST`, ni :file:`MANIFEST.in`, alors créer un " +"manifeste contenant uniquement le groupe de fichiers par défaut" #: ../Doc/distutils/sourcedist.rst:224 msgid "" "use the list of files now in :file:`MANIFEST` (either just generated or read " "in) to create the source distribution archive(s)" msgstr "" -"utiliser maintenant la liste de fichier de :file:`MANIFEST` (qu'il soit " +"utiliser maintenant la liste de fichiers de :file:`MANIFEST` (qu'il ait été " "généré ou lu) pour créer la ou les archive(s) de la distribution source" #: ../Doc/distutils/sourcedist.rst:227 @@ -531,17 +532,17 @@ msgid "" "option:`!--no-defaults` and :option:`!--no-prune` to disable the standard " "\"include\" and \"exclude\" sets." msgstr "" -"Il existe plusieurs options pour modifier ce comportement. D'abord utilisez " -"les options :option:`!--no-defaults` et :option:`!--no-prune` pour " -"désactiver les inclusions et exclusions standards." +"Il existe deux manières pour modifier ce comportement. D'abord utilisez les " +"options :option:`!--no-defaults` et :option:`!--no-prune` pour désactiver " +"les inclusions et exclusions standards." #: ../Doc/distutils/sourcedist.rst:231 msgid "" "Second, you might just want to (re)generate the manifest, but not create a " "source distribution::" msgstr "" -"Deuxièmement, si vous voulez (ré)généré le manifeste, mais pas créer la " -"distribution source ::" +"Ensuite, si vous ne voulez que (ré)générer le manifeste, mais pas créer la " +"distribution source ::" #: ../Doc/distutils/sourcedist.rst:236 msgid ":option:`!-o` is a shortcut for :option:`!--manifest-only`." diff --git a/extending/building.po b/extending/building.po index 98be80505..84e9eefd1 100644 --- a/extending/building.po +++ b/extending/building.po @@ -27,7 +27,7 @@ msgid "" "``.pyd`` on Windows), which exports an *initialization function*." msgstr "" "Une extension C pour CPython est une bibliothèque partagée (Un ``.so`` sur " -"Linux, un ``.pyd`` sur windows), qui expose une *fonction d'initialisation*." +"Linux, un ``.pyd`` sur Windows), qui expose une *fonction d'initialisation*." #: ../Doc/extending/building.rst:12 msgid "" @@ -38,7 +38,7 @@ msgid "" msgstr "" "Pour pouvoir être importée, la bibliothèque partagée doit pourvoir être " "trouvée dans :envvar:`PYTHONPATH`, et doit porter le nom du module, avec " -"l'extension appropriée. En utilisant distutils, le nom est généré " +"l'extension appropriée. En utilisant *distutils*, le nom est généré " "automatiquement." #: ../Doc/extending/building.rst:16 @@ -66,11 +66,11 @@ msgstr "" "Pour les modules dont les noms sont entièrement en ASCII, la fonction doit " "être nommée ``PyInit_``, dont ```` est remplacé par " "le nom du module. En utilisant :ref:`multi-phase-initialization`, il est " -"possible d'utiliser des noms de modules comptant des caractères non-ASCII. " +"possible d'utiliser des noms de modules comptant des caractères non ASCII. " "Dans ce cas, le nom de la fonction d'initialisation est " "``PyInitU_``, où ``modulename`` est encodé avec l'encodage " "*punyencode* de Python, dont les tirets sont remplacés par des tirets-bas. " -"En Python ça donne : ::" +"En Python ça donne ::" #: ../Doc/extending/building.rst:39 msgid "" @@ -80,16 +80,16 @@ msgid "" "function corresponding to the filename is found. See the *\"Multiple modules " "in one library\"* section in :pep:`489` for details." msgstr "" -"Il est possible d'exporter plusieurs modules depuis une seule bibliothéque " +"Il est possible d'exporter plusieurs modules depuis une seule bibliothèque " "partagée en définissant plusieurs fonctions d'initialisation. Cependant pour " "les importer, un lien symbolique doit être créé pour chacun, ou un " -"*importer* personalisé, puisque par défaut seule la fonction correpondant au " -"nom du fichier est cherchée. Voir le chapitre *\"Multiple modules in one " +"*importer* personnalisé, puisque par défaut seule la fonction correspondant " +"au nom du fichier est cherchée. Voir le chapitre *\"Multiple modules in one " "library\"* dans la :pep:`489` pour plus d'informations." #: ../Doc/extending/building.rst:49 msgid "Building C and C++ Extensions with distutils" -msgstr "Construire les extensions C et C++ avec distutils" +msgstr "Construire les extensions C et C++ avec *distutils*" #: ../Doc/extending/building.rst:53 msgid "" @@ -97,22 +97,22 @@ msgid "" "Python. Since distutils also supports creation of binary packages, users " "don't necessarily need a compiler and distutils to install the extension." msgstr "" -"Des modules d'extension peuvent être construits avec distutils, qui est " -"inclus dans Python. Puisque distutils gère aussi la création de paquets " +"Des modules d'extension peuvent être construits avec *distutils*, qui est " +"inclus dans Python. Puisque *distutils* gère aussi la création de paquets " "binaires, les utilisateurs n'auront pas nécessairement besoin ni d'un " -"compilateur ni de distutils pour installer l'extension." +"compilateur ni de *distutils* pour installer l'extension." #: ../Doc/extending/building.rst:57 msgid "" "A distutils package contains a driver script, :file:`setup.py`. This is a " "plain Python file, which, in the most simple case, could look like this:" msgstr "" -"Un paquet distutils contient un script :file:`setup.py`. C'est un simple " +"Un paquet *distutils* contient un script :file:`setup.py`. C'est un simple " "fichier Python, ressemblant dans la plupart des cas à :" #: ../Doc/extending/building.rst:73 msgid "With this :file:`setup.py`, and a file :file:`demo.c`, running ::" -msgstr "Avec ce :file:`setup.py` et un fichier :file:`demo.c`, lancer : ::" +msgstr "Avec ce :file:`setup.py` et un fichier :file:`demo.c`, lancer ::" #: ../Doc/extending/building.rst:77 msgid "" @@ -143,8 +143,8 @@ msgstr "" "pour construire les paquets, et définir le contenu du paquet. Normalement un " "paquet contient des modules additionnels, comme des modules sources, " "documentation, sous paquets, etc. Referez-vous à la documentation de " -"distutils dans :ref:`distutils-index` pour en apprendre plus sur les " -"fonctionnalités de distutils. Cette section n'explique que la construction " +"*distutils* dans :ref:`distutils-index` pour en apprendre plus sur les " +"fonctionnalités de *distutils*. Cette section n'explique que la construction " "de modules d'extension." #: ../Doc/extending/building.rst:91 @@ -183,21 +183,20 @@ msgid "" "distutils passes this information in different ways to the compiler. For " "example, on Unix, this may result in the compilation commands ::" msgstr "" -"Dans cet exemple, la fonction :func:`~distutils.core.setup` est appellée " -"avec quelques autres méta-informations, ce qui est recommandé pour " -"distribuer des paquets. En ce qui concerne l'extension, sont définis " -"quelques macros préprocesseur, dossiers pour les en-têtes et bibliothèques. " -"En fonction du compilateur, *distutils* peut donner ces informations de " -"manière différente. Par exemple, sur Unix, ça peut ressembler aux " -"commandes : ::" +"Dans cet exemple, la fonction :func:`~distutils.core.setup` est appelée avec " +"quelques autres méta-informations, ce qui est recommandé pour distribuer des " +"paquets. En ce qui concerne l'extension, sont définis quelques macros " +"préprocesseur, dossiers pour les en-têtes et bibliothèques. En fonction du " +"compilateur, *distutils* peut donner ces informations de manière différente. " +"Par exemple, sur Unix, ça peut ressembler aux commandes ::" #: ../Doc/extending/building.rst:139 msgid "" "These lines are for demonstration purposes only; distutils users should " "trust that distutils gets the invocations right." msgstr "" -"Ces lignes ne sont qu'à titre d'exemple, les utilisateurs de distutils " -"doivent avoir confiance en distutils qui fera les appels correctement." +"Ces lignes ne sont qu'à titre d'exemple, les utilisateurs de *distutils* " +"doivent avoir confiance en *distutils* qui fera les appels correctement." #: ../Doc/extending/building.rst:146 msgid "Distributing your extension modules" @@ -216,14 +215,14 @@ msgid "" "End-users will typically want to install the module, they do so by running ::" msgstr "" "Typiquement, les utilisateurs vont vouloir installer le module, ils le font " -"en exécutant : ::" +"en exécutant ::" #: ../Doc/extending/building.rst:154 msgid "" "Module maintainers should produce source packages; to do so, they run ::" msgstr "" "Les mainteneurs de modules voudront produire des paquets source, pour ce " -"faire ils exécuteront : ::" +"faire ils exécuteront ::" #: ../Doc/extending/building.rst:158 msgid "" diff --git a/extending/embedding.po b/extending/embedding.po index d95c34058..626b42b8d 100644 --- a/extending/embedding.po +++ b/extending/embedding.po @@ -33,13 +33,13 @@ msgid "" "writing some scripts in Python. You can also use it yourself if some of the " "functionality can be written in Python more easily." msgstr "" -"Les chapitres précédents couvraient l'extension de Python, c'est à dire, " +"Les chapitres précédents couvraient l'extension de Python, c'est-à-dire, " "comment enrichir une fonctionnalité de Python en y attachant une " -"bibliothèque de fonctions C. C'est aussi possible dans l'autre sens: " +"bibliothèque de fonctions C. C'est aussi possible dans l'autre sens : " "enrichir vos applications C/C++ en y intégrant Python. Intégrer Python vous " "permet d'implémenter certaines fonctionnalités de vos applications en Python " "plutôt qu'en C ou C++. C'est utile dans de nombreux cas, un exemple serait " -"de permettre aux utilisateurs d'adapter une application à leur besoins en y " +"de permettre aux utilisateurs d'adapter une application à leurs besoins en y " "écrivant des scripts Python. Vous pouvez aussi l'utiliser vous même si " "certaines fonctionnalités peuvent être rédigées plus facilement en Python." @@ -55,7 +55,7 @@ msgstr "" "est qu'en étendant Python, le programme principal reste l'interpréteur " "Python, alors qu'en intégrant Python le programme principal peut ne rien à " "voir avec Python. C'est simplement quelques parties du programme qui " -"appellent l'interprète Python pour exécuter un peu de code Python." +"appellent l'interpréteur Python pour exécuter un peu de code Python." #: ../Doc/extending/embedding.rst:26 msgid "" @@ -81,9 +81,9 @@ msgid "" "level operations described in the previous chapters to construct and use " "Python objects." msgstr "" -"Il existe différents moyens d'appeler l'interpréteur: vous pouvez donner une " -"chaîne contenant des instructions Python à :c:func:`PyRun_SimpleString`, ou " -"vous pouvez donner un pointeur de fichier *stdio* et un nom de fichier " +"Il existe différents moyens d'appeler l'interpréteur : vous pouvez donner " +"une chaîne contenant des instructions Python à :c:func:`PyRun_SimpleString`, " +"ou vous pouvez donner un pointeur de fichier *stdio* et un nom de fichier " "(juste pour nommer les messages d'erreur) à :c:func:`PyRunSimpleFile`. Vous " "pouvez aussi appeler les API de bas niveau décrites dans les chapitres " "précédents pour construire et utiliser des objets Python." @@ -144,7 +144,7 @@ msgstr "" #: ../Doc/extending/embedding.rst:92 msgid "Beyond Very High Level Embedding: An overview" -msgstr "Au delà de l'intégration de haut niveau: survol" +msgstr "Au-delà de l'intégration de haut niveau : survol" #: ../Doc/extending/embedding.rst:94 msgid "" @@ -170,7 +170,7 @@ msgstr "" "Il est à souligner qu'étendre ou intégrer Python revient à la louche au " "même, en dépit de la différence d'intention. La plupart des sujets parcourus " "dans les chapitres précédents sont toujours valides. Pour le prouver, " -"regardez ce qu'un code d'extension de Python vers C fait réellement :" +"regardez ce qu'un code d'extension de Python vers C fait réellement :" #: ../Doc/extending/embedding.rst:104 msgid "Convert data values from Python to C," @@ -186,7 +186,7 @@ msgstr "Convertir les résultats de l'appel à la fonction C pour Python." #: ../Doc/extending/embedding.rst:110 msgid "When embedding Python, the interface code does:" -msgstr "Lors de l'intégration de Python, le code de l'interface fait :" +msgstr "Lors de l'intégration de Python, le code de l'interface fait :" #: ../Doc/extending/embedding.rst:112 msgid "Convert data values from C to Python," @@ -212,7 +212,7 @@ msgid "" "you call a C routine, when embedding, you call a Python routine." msgstr "" "Tel que vous le voyez, les conversions sont simplement inversées pour " -"s'adapter au différentes directions de transfert inter-langage. La seule " +"s'adapter aux différentes directions de transfert inter-langage. La seule " "différence est la fonction que vous appelez entre les deux conversions de " "données. Lors de l'extension, vous appelez une fonction C, lors de " "l'intégration vous appelez une fonction Python." @@ -248,7 +248,7 @@ msgstr "" #: ../Doc/extending/embedding.rst:140 msgid "The code to run a function defined in a Python script is:" -msgstr "Le code pour appeler une fonction définie dans un script Python est :" +msgstr "Le code pour appeler une fonction définie dans un script Python est :" #: ../Doc/extending/embedding.rst:145 msgid "" @@ -261,12 +261,12 @@ msgstr "" "Ce code charge un script Python en utilisant ``argv[1]``, et appelle une " "fonction dont le nom est dans ``argv[2]``. Ses arguments entiers sont les " "autres valeurs de ``argv``. Si vous :ref:`compilez et liez ` ce " -"programme (appelons l'exécutable :program:`call`), et l'appellez pour " -"exécuter un script Python, tel que :" +"programme (appelons l'exécutable :program:`call`), et l'appelez pour " +"exécuter un script Python, tel que :" #: ../Doc/extending/embedding.rst:160 msgid "then the result should be:" -msgstr "alors, le résultat sera:" +msgstr "alors, le résultat sera :" #: ../Doc/extending/embedding.rst:168 msgid "" @@ -277,7 +277,7 @@ msgstr "" "Bien que le programme soit plutôt gros pour ses fonctionnalités, la plupart " "du code n'est que conversion de données entre Python et C, aussi que pour " "rapporter les erreurs. La partie intéressante, qui concerne l'intégration de " -"Python débute par : ::" +"Python débute par ::" #: ../Doc/extending/embedding.rst:177 msgid "" @@ -288,8 +288,8 @@ msgid "" msgstr "" "Après avoir initialisé l'interpréteur, le script est chargé en utilisant :c:" "func:`PyImport_Import`. Cette fonction prend une chaîne Python pour " -"argument, elle même construite en utilisant la fonction de conversion :c:" -"func:`PyUnicode_FromString`." +"argument, elle-même construite en utilisant la fonction de conversion :c:" +"func:`PyUnicode_FromString`. ::" #: ../Doc/extending/embedding.rst:190 msgid "" @@ -303,7 +303,7 @@ msgstr "" "`PyObject_GetAttrString`. Si le nom existe, et que l'objet récupéré peut " "être appelé, vous pouvez présumer sans risque que c'est une fonction. Le " "programme continue, classiquement, par la construction de n-uplet " -"d'arguments. L'appel à la fonction Python est alors effectué avec : ::" +"d'arguments. L'appel à la fonction Python est alors effectué avec ::" #: ../Doc/extending/embedding.rst:198 msgid "" @@ -338,7 +338,7 @@ msgstr "" "démarre l'interpréteur Python, au lieu de cela, voyez l'application comme un " "ensemble de fonctions, et rédigez un peu de code pour exposer ces fonctions " "à Python, tout comme vous écririez une extension Python normale. Par " -"exemple : ::" +"exemple ::" #: ../Doc/extending/embedding.rst:245 msgid "" @@ -347,7 +347,7 @@ msgid "" msgstr "" "Insérez le code ci-dessus juste avant la fonction :c:func:`main`. Ajoutez " "aussi les deux instructions suivantes avant l'appel à :c:func:" -"`Py_Initialize` ::" +"`Py_Initialize` ::" #: ../Doc/extending/embedding.rst:251 msgid "" @@ -356,7 +356,7 @@ msgid "" "extensions, the Python script can do things like" msgstr "" "Ces deux lignes initialisent la variable ``numarg``, et rend la fonction :" -"func:`emb.numargs` accessible à l'interprète intégré. Avec ces ajouts, le " +"func:`emb.numargs` accessible à l'interpréteur intégré. Avec ces ajouts, le " "script Python petit maintenant faire des choses comme" #: ../Doc/extending/embedding.rst:260 @@ -364,7 +364,7 @@ msgid "" "In a real application, the methods will expose an API of the application to " "Python." msgstr "" -"Dans un cas réel, les méthodes exposeraient une API de l'application a " +"Dans un cas réel, les méthodes exposeraient une API de l'application à " "Python." #: ../Doc/extending/embedding.rst:270 @@ -409,10 +409,10 @@ msgid "" "available). This script has several options, of which the following will be " "directly useful to you:" msgstr "" -"Pour trouver les bonnes option de compilateur et *linker*, vous pouvez " +"Pour trouver les bonnes options de compilateur et *linker*, vous pouvez " "exécuter le script :file:`python(X.Y)-config` généré durant l'installation " "(un script :file:`python3-config` peut aussi être disponible). Ce script a " -"quelques options, celles-ci vous seront utiles :" +"quelques options, celles-ci vous seront utiles :" #: ../Doc/extending/embedding.rst:295 msgid "" @@ -420,7 +420,7 @@ msgid "" "compiling:" msgstr "" "``pythonX.Y-config --cflags`` vous donnera les options recommandées pour " -"compiler:" +"compiler :" #: ../Doc/extending/embedding.rst:303 msgid "" @@ -428,7 +428,7 @@ msgid "" "linking:" msgstr "" "``pythonX.Y-config --ldflags`` vous donnera les drapeaux recommandés lors de " -"l'édition de lien:" +"l'édition de lien :" #: ../Doc/extending/embedding.rst:312 msgid "" @@ -455,10 +455,10 @@ msgid "" msgstr "" "Si cette procédure ne fonctionne pas pour vous (il n'est pas garanti qu'elle " "fonctionne pour toutes les plateformes Unix, mais nous traiteront volontiers " -"les :ref:`rapports de bugs `), vous devrez lire " -"ladocumentation de votre système sur la liaison dynamique (*dynamic " -"linking*) et / ouexaminer le :file:`Makefile` de Python (utilisez :func:" -"`sysconfig.get_makefile_filename` pour trouver son emplacement) et les " -"options de compilation. Dans ce cas, le module :mod:`sysconfig` est un outil " -"utile pour extraire automatiquement les valeurs de configuration que vous " -"voudrez combiner ensemble. Par example :" +"les :ref:`rapports de bugs `), vous devrez lire la " +"documentation de votre système sur la liaison dynamique (*dynamic linking*) " +"et / ou examiner le :file:`Makefile` de Python (utilisez :func:`sysconfig." +"get_makefile_filename` pour trouver son emplacement) et les options de " +"compilation. Dans ce cas, le module :mod:`sysconfig` est un outil utile pour " +"extraire automatiquement les valeurs de configuration que vous voudrez " +"combiner ensemble. Par exemple :" diff --git a/extending/extending.po b/extending/extending.po index 3d19eb2d9..c7122f63f 100644 --- a/extending/extending.po +++ b/extending/extending.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-01 07:43+0100\n" -"PO-Revision-Date: 2018-02-15 00:36+0100\n" -"Last-Translator: \n" +"POT-Creation-Date: 2018-04-29 00:24+0200\n" +"PO-Revision-Date: 2018-05-08 17:12+0200\n" +"Last-Translator: Julien Palard \n" "Language-Team: \n" "Language: fr\n" "MIME-Version: 1.0\n" @@ -89,16 +89,16 @@ msgid "" "Python fans...) and let's say we want to create a Python interface to the C " "library function :c:func:`system` [#]_. This function takes a null-" "terminated character string as argument and returns an integer. We want " -"this function to be callable from Python as follows::" +"this function to be callable from Python as follows:" msgstr "" "Créons un module d'extension appelé ``spam`` (la nourriture préférée de fans " "des Monty Python ...) et disons que nous voulons créer une interface Python " "à la fonction de la bibliothèque C :c:func:`system` [#]_. Cette fonction " "prend une chaîne de caractères terminée par NULL comme argument et renvoie " "un entier. Nous voulons que cette fonction soit appelable à partir de Python " -"comme suit : ::" +"comme suit :" -#: ../Doc/extending/extending.rst:50 +#: ../Doc/extending/extending.rst:52 msgid "" "Begin by creating a file :file:`spammodule.c`. (Historically, if a module " "is called ``spam``, the C file containing its implementation is called :file:" @@ -110,11 +110,11 @@ msgstr "" "appelé :file:`spammodule.c`. Si le nom du module est très long, comme " "``spammify``, le nom du module peut être juste :file:`spammify.c`.)" -#: ../Doc/extending/extending.rst:55 +#: ../Doc/extending/extending.rst:57 msgid "The first line of our file can be::" msgstr "La première ligne de notre fichier peut être : ::" -#: ../Doc/extending/extending.rst:59 +#: ../Doc/extending/extending.rst:61 msgid "" "which pulls in the Python API (you can add a comment describing the purpose " "of the module and a copyright notice if you like)." @@ -122,7 +122,7 @@ msgstr "" "qui récupère l'API Python (vous pouvez ajouter un commentaire décrivant le " "but du module et un avis de droit d'auteur si vous le souhaitez)." -#: ../Doc/extending/extending.rst:64 +#: ../Doc/extending/extending.rst:66 msgid "" "Since Python may define some pre-processor definitions which affect the " "standard headers on some systems, you *must* include :file:`Python.h` before " @@ -132,7 +132,7 @@ msgstr "" "les têtes standard sur certains systèmes, vous *devez* inclure :file:`Python." "h` avant les en-têtes standards." -#: ../Doc/extending/extending.rst:68 +#: ../Doc/extending/extending.rst:70 msgid "" "All user-visible symbols defined by :file:`Python.h` have a prefix of ``Py`` " "or ``PY``, except those defined in standard header files. For convenience, " @@ -145,12 +145,12 @@ msgstr "" "Tous les symboles exposés par :file:`Python.h` sont préfixés de ``Py`` ou " "``PY``, sauf ceux qui sont définis dans les en-têtes standard. Pour le " "confort, et comme ils sont largement utilisés par l'interpréteur Python, ``" -"\"Python.h\"`` inclu lui même quelques d'en-têtes standard : ````, " +"\"Python.h\"`` inclut lui même quelques d'en-têtes standard : ````, " "````, ```` et ````. Si ce dernier n'existe pas " "sur votre système, il déclare les fonctions :c:func:`malloc`, :c:func:`free` " "et :c:func:`realloc` directement." -#: ../Doc/extending/extending.rst:76 +#: ../Doc/extending/extending.rst:78 msgid "" "The next thing we add to our module file is the C function that will be " "called when the Python expression ``spam.system(string)`` is evaluated " @@ -159,21 +159,21 @@ msgstr "" "La prochaine chose que nous ajoutons à notre fichier de module est la " "fonction C qui sera appelée lorsque l'expression Python ``spam." "system(chaîne)`` sera évaluée (nous verrons bientôt comment elle finit par " -"être appelée) ::" +"être appelée) ::" -#: ../Doc/extending/extending.rst:92 +#: ../Doc/extending/extending.rst:94 msgid "" "There is a straightforward translation from the argument list in Python (for " "example, the single expression ``\"ls -l\"``) to the arguments passed to the " "C function. The C function always has two arguments, conventionally named " "*self* and *args*." msgstr "" -"Il ya une correspondance directe de la liste des arguments en Python (par " +"Il y a une correspondance directe de la liste des arguments en Python (par " "exemple, l'expression ``\"ls -l\"``) aux arguments passés à la fonction C. " "La fonction C a toujours deux arguments, appelés par convention *self* et " "*args*." -#: ../Doc/extending/extending.rst:97 +#: ../Doc/extending/extending.rst:99 msgid "" "The *self* argument points to the module object for module-level functions; " "for a method it would point to the object instance." @@ -181,7 +181,7 @@ msgstr "" "Pour les fonctions au niveau du module, l'argument *self* pointe sur l'objet " "module, pour une méthode, il pointe sur l'instance de l'objet." -#: ../Doc/extending/extending.rst:100 +#: ../Doc/extending/extending.rst:102 msgid "" "The *args* argument will be a pointer to a Python tuple object containing " "the arguments. Each item of the tuple corresponds to an argument in the " @@ -202,7 +202,7 @@ msgstr "" "ainsi que les types de variables C dans lequel stocker les valeurs " "converties. Nous en verront plus, plus tard." -#: ../Doc/extending/extending.rst:109 +#: ../Doc/extending/extending.rst:111 msgid "" ":c:func:`PyArg_ParseTuple` returns true (nonzero) if all arguments have the " "right type and its components have been stored in the variables whose " @@ -214,15 +214,15 @@ msgstr "" ":c:func:`PyArg_ParseTuple` renvoie vrai (pas zéro) si tous les arguments ont " "le bon type et que ses composants ont été stockés dans les variables dont " "les adresses données. Il renvoie faux (zéro) si une liste d'arguments " -"invalide a été passée. Dans ce dernier cas, elle soulève également une " +"invalide a été passée. Dans ce dernier cas, elle lève également une " "exception appropriée de sorte que la fonction d'appel puisse renvoyer *NULL* " "immédiatement (comme nous l'avons vu dans l'exemple)." -#: ../Doc/extending/extending.rst:119 +#: ../Doc/extending/extending.rst:121 msgid "Intermezzo: Errors and Exceptions" msgstr "Intermezzo: Les erreurs et exceptions" -#: ../Doc/extending/extending.rst:121 +#: ../Doc/extending/extending.rst:123 msgid "" "An important convention throughout the Python interpreter is the following: " "when a function fails, it should set an exception condition and return an " @@ -249,7 +249,7 @@ msgstr "" "Reference*). Il est important de les connaître pour comprendre comment les " "erreurs sont propagées." -#: ../Doc/extending/extending.rst:132 +#: ../Doc/extending/extending.rst:134 msgid "" "The Python API defines a number of functions to set various types of " "exceptions." @@ -257,7 +257,7 @@ msgstr "" "L'API Python définit un certain nombre de fonctions pour créer différents " "types d'exceptions." -#: ../Doc/extending/extending.rst:134 +#: ../Doc/extending/extending.rst:136 msgid "" "The most common one is :c:func:`PyErr_SetString`. Its arguments are an " "exception object and a C string. The exception object is usually a " @@ -271,7 +271,7 @@ msgstr "" "cause de l'erreur et est convertie en une chaîne Python puis stockée en tant " "que \"valeur associée\" à l'exception." -#: ../Doc/extending/extending.rst:140 +#: ../Doc/extending/extending.rst:142 msgid "" "Another useful function is :c:func:`PyErr_SetFromErrno`, which only takes an " "exception argument and constructs the associated value by inspection of the " @@ -286,7 +286,7 @@ msgstr "" "arguments: l'exception et sa valeur associée. Vous ne devez pas appliquer :c:" "func:`Py_INCREF` aux objets transmis à ces fonctions." -#: ../Doc/extending/extending.rst:147 +#: ../Doc/extending/extending.rst:149 msgid "" "You can test non-destructively whether an exception has been set with :c:" "func:`PyErr_Occurred`. This returns the current exception object, or *NULL* " @@ -301,7 +301,7 @@ msgstr "" "survenue durant l'appel d'une fonction, puisque vous devriez être en mesure " "de le déterminer à partir de la valeur de retour." -#: ../Doc/extending/extending.rst:153 +#: ../Doc/extending/extending.rst:155 msgid "" "When a function *f* that calls another function *g* detects that the latter " "fails, *f* should itself return an error value (usually *NULL* or ``-1``). " @@ -326,7 +326,7 @@ msgstr "" "d'exécution et essaie de trouver un gestionnaire d'exception spécifié par le " "développeur Python." -#: ../Doc/extending/extending.rst:163 +#: ../Doc/extending/extending.rst:165 msgid "" "(There are situations where a module can actually give a more detailed error " "message by calling another :c:func:`PyErr_\\*` function, and in such cases " @@ -334,14 +334,14 @@ msgid "" "can cause information about the cause of the error to be lost: most " "operations can fail for a variety of reasons.)" msgstr "" -"(Il ya des situations où un module peut effectivement donner un message " +"(Il y a des situations où un module peut effectivement donner un message " "d'erreur plus détaillé en appelant une autre fonction :c:func:`PyErr_\\*`, " "dans de tels cas, il est tout à fait possible de le faire. Cependant, ce " "n'est généralement pas nécessaire, et peut amener à perdre des informations " "sur la cause de l'erreur: la plupart des opérations peuvent échouer pour " "tout un tas de raisons)." -#: ../Doc/extending/extending.rst:169 +#: ../Doc/extending/extending.rst:171 msgid "" "To ignore an exception set by a function call that failed, the exception " "condition must be cleared explicitly by calling :c:func:`PyErr_Clear`. The " @@ -356,7 +356,7 @@ msgstr "" "l'interpréteur, mais souhaite la gérer lui-même (peut-être en essayant " "quelque chose d'autre, ou en prétendant que rien n'a mal tourné)." -#: ../Doc/extending/extending.rst:175 +#: ../Doc/extending/extending.rst:177 msgid "" "Every failing :c:func:`malloc` call must be turned into an exception --- the " "direct caller of :c:func:`malloc` (or :c:func:`realloc`) must call :c:func:" @@ -371,7 +371,7 @@ msgstr "" "`PyLong_FromLong`) le font déjà, donc cette note ne concerne que ceux qui " "appellent :c:func:`malloc` directement." -#: ../Doc/extending/extending.rst:181 +#: ../Doc/extending/extending.rst:183 msgid "" "Also note that, with the important exception of :c:func:`PyArg_ParseTuple` " "and friends, functions that return an integer status usually return a " @@ -383,7 +383,7 @@ msgstr "" "donnent généralement une valeur positive ou zéro en cas de succès et ``-1`` " "en cas d'échec, comme les appels du système Unix." -#: ../Doc/extending/extending.rst:185 +#: ../Doc/extending/extending.rst:187 msgid "" "Finally, be careful to clean up garbage (by making :c:func:`Py_XDECREF` or :" "c:func:`Py_DECREF` calls for objects you have already created) when you " @@ -393,7 +393,7 @@ msgstr "" "de nettoyage (en appelant :c:func:`Py_XDECREF` ou :c:func:`Py_DECREF` avec " "les objets que vous auriez déjà créés) !" -#: ../Doc/extending/extending.rst:189 +#: ../Doc/extending/extending.rst:191 msgid "" "The choice of which exception to raise is entirely yours. There are " "predeclared C objects corresponding to all built-in Python exceptions, such " @@ -411,22 +411,21 @@ msgstr "" "judicieusement vos exceptions, typiquement n'utilisez pas :c:data:" "`PyExc_TypeError` pour indiquer qu'un fichier n'a pas pu être ouvert (qui " "devrait probablement être :c:data:`PyExc_IOError`). Si quelque chose ne va " -"pas avec la liste des arguments, la fonction :c:func:`PyArg_ParseTuple` " -"soulève habituellement une exception :c:data:`PyExc_TypeError`. Mais si vous " -"avez un argument dont la valeur doit être dans un intervalle particulier ou " -"qui doit satisfaire d'autres conditions, :c:data:`PyExc_ValueError` sera " -"plus appropriée." +"pas avec la liste des arguments, la fonction :c:func:`PyArg_ParseTuple` lève " +"habituellement une exception :c:data:`PyExc_TypeError`. Mais si vous avez un " +"argument dont la valeur doit être dans un intervalle particulier ou qui doit " +"satisfaire d'autres conditions, :c:data:`PyExc_ValueError` sera plus " +"appropriée." -#: ../Doc/extending/extending.rst:199 +#: ../Doc/extending/extending.rst:201 msgid "" "You can also define a new exception that is unique to your module. For this, " "you usually declare a static object variable at the beginning of your file::" msgstr "" "Vous pouvez également créer une exception spécifique à votre module. Pour " -"cela, déclarez simplement une variable statique au début de votre " -"fichier : ::" +"cela, déclarez simplement une variable statique au début de votre fichier ::" -#: ../Doc/extending/extending.rst:204 +#: ../Doc/extending/extending.rst:206 msgid "" "and initialize it in your module's initialization function (:c:func:" "`PyInit_spam`) with an exception object (leaving out the error checking for " @@ -434,9 +433,9 @@ msgid "" msgstr "" "et initialisez-la dans la fonction d'initialisation de votre module (:c:func:" "`PyInit_spam`) avec un objet exception (Passons, pour le moment, la " -"vérification des codes d'erreur) ::" +"vérification des codes d'erreur) ::" -#: ../Doc/extending/extending.rst:222 +#: ../Doc/extending/extending.rst:224 msgid "" "Note that the Python name for the exception object is :exc:`spam.error`. " "The :c:func:`PyErr_NewException` function may create a class with the base " @@ -448,7 +447,7 @@ msgstr "" "`Exception` (à moins qu'une autre classe ne lui soit fournie à la place de " "*NULL*), voir :ref:`bltin-exceptions`." -#: ../Doc/extending/extending.rst:227 +#: ../Doc/extending/extending.rst:229 msgid "" "Note also that the :c:data:`SpamError` variable retains a reference to the " "newly created exception class; this is intentional! Since the exception " @@ -458,15 +457,15 @@ msgid "" "pointer, C code which raises the exception could cause a core dump or other " "unintended side effects." msgstr "" -"Notez également que la variable :c:data:`SpamError` contient une référence " -"àla nouvelle classe créée; ceci est intentionnel! Comme l'exception peut " -"êtreretirée du module par un code externe, une référence à la classe est " -"nécessairepour assurer qu'il ne sera pas rejeté, causant :c:data:`SpamError` " -"à devenirun pointeur défaillant. S'il devenait un pointeur défaillant, le C " -"code qui soulèvel'exception peut engendrer un rejet central ou des effets " -"secondaires innatendus." +"Notez également que la variable :c:data:`SpamError` contient une référence à " +"la nouvelle classe créée; ceci est intentionnel! Comme l'exception peut être " +"retirée du module par un code externe, une référence à la classe est " +"nécessaire pour assurer qu'il ne sera pas rejeté, causant :c:data:" +"`SpamError` à devenir un pointeur défaillant. S'il devenait un pointeur " +"défaillant, le C code qui lève l'exception peut engendrer un rejet central " +"ou des effets secondaires inattendus." -#: ../Doc/extending/extending.rst:234 +#: ../Doc/extending/extending.rst:236 msgid "" "We discuss the use of ``PyMODINIT_FUNC`` as a function return type later in " "this sample." @@ -474,27 +473,27 @@ msgstr "" "Nous traiterons de l'utilisation de ``PyMODINIT_FUNC`` comme un type de " "retour de fonction plus tard dans cette section." -#: ../Doc/extending/extending.rst:237 +#: ../Doc/extending/extending.rst:239 msgid "" "The :exc:`spam.error` exception can be raised in your extension module using " "a call to :c:func:`PyErr_SetString` as shown below::" msgstr "" "L'exception :exc:`spam.error` peut être levée dans votre module d'extension " -"en appelant :c:func:`PyErr_SetString` comme montré ci-dessous::" +"en appelant :c:func:`PyErr_SetString` comme montré ci-dessous ::" -#: ../Doc/extending/extending.rst:260 +#: ../Doc/extending/extending.rst:262 msgid "Back to the Example" msgstr "Retour vers l'exemple" -#: ../Doc/extending/extending.rst:262 +#: ../Doc/extending/extending.rst:264 msgid "" "Going back to our example function, you should now be able to understand " "this statement::" msgstr "" "En revenant vers notre fonction exemple, vous devriez maintenant être " -"capable de comprendre cette affirmation::" +"capable de comprendre cette affirmation ::" -#: ../Doc/extending/extending.rst:268 +#: ../Doc/extending/extending.rst:270 msgid "" "It returns *NULL* (the error indicator for functions returning object " "pointers) if an error is detected in the argument list, relying on the " @@ -504,8 +503,8 @@ msgid "" "which it points (so in Standard C, the variable :c:data:`command` should " "properly be declared as ``const char *command``)." msgstr "" -"Elle renvoie *NULL* (l'indicateur d'erreur pour les fonctions renvoiant des " -"pointeurs d'objet) si une erreur est detectée dans la liste des arguments,se " +"Elle renvoie *NULL* (l'indicateur d'erreur pour les fonctions renvoyant des " +"pointeurs d'objet) si une erreur est détectée dans la liste des arguments,se " "fiant à l'exception définie par :c:func:`PyArg_ParseTuple`. Autrement,la " "valeur chaîne de l'argument a été copiée dans la variable locale :c:data:" "`command`. Il s'agit d'une attribution de pointeur et vous n'êtes pas " @@ -513,16 +512,16 @@ msgstr "" "la variable :c:data:`command` doit être clairement déclarée comme ``const " "char *command``)." -#: ../Doc/extending/extending.rst:276 +#: ../Doc/extending/extending.rst:278 msgid "" "The next statement is a call to the Unix function :c:func:`system`, passing " "it the string we just got from :c:func:`PyArg_ParseTuple`::" msgstr "" "La prochaine instruction est un appel à la fonction Unix :c:func:`system`, " "en lui passant la chaîne que nous venons d'obtenir à partir de :c:func:" -"`PyArg_ParseTuple`::" +"`PyArg_ParseTuple` ::" -#: ../Doc/extending/extending.rst:281 +#: ../Doc/extending/extending.rst:283 msgid "" "Our :func:`spam.system` function must return the value of :c:data:`sts` as a " "Python object. This is done using the function :c:func:`PyLong_FromLong`. ::" @@ -531,15 +530,15 @@ msgstr "" "comme un objet Python. Cela est effectué par l'utilisation de la fonction :c:" "func:`PyLong_FromLong`. ::" -#: ../Doc/extending/extending.rst:286 +#: ../Doc/extending/extending.rst:288 msgid "" "In this case, it will return an integer object. (Yes, even integers are " "objects on the heap in Python!)" msgstr "" -"Dans ce cas, elle renvoyera un objet entier. (Oui, même les entiers sont des " +"Dans ce cas, elle renverra un objet entier. (Oui, même les entiers sont des " "objets dans le tas en Python!)" -#: ../Doc/extending/extending.rst:289 +#: ../Doc/extending/extending.rst:291 msgid "" "If you have a C function that returns no useful argument (a function " "returning :c:type:`void`), the corresponding Python function must return " @@ -547,11 +546,11 @@ msgid "" "macro:`Py_RETURN_NONE` macro)::" msgstr "" "Si vous avez une fonction C qui ne renvoie aucun argument utile (une " -"fonction renvoiant :c:type:`void`), la fonction Python correspondante doit " +"fonction renvoyant :c:type:`void`), la fonction Python correspondante doit " "renvoyer ``None``. Vous aurez besoin de cette locution pour cela (qui est " -"implémentée par la macro :c:macro:`Py_RETURN_NONE`)::" +"implémentée par la macro :c:macro:`Py_RETURN_NONE`) ::" -#: ../Doc/extending/extending.rst:297 +#: ../Doc/extending/extending.rst:299 msgid "" ":c:data:`Py_None` is the C name for the special Python object ``None``. It " "is a genuine Python object rather than a *NULL* pointer, which means \"error" @@ -559,19 +558,23 @@ msgid "" msgstr "" ":c:data:`Py_None` est le nom C pour l'objet spécial Python ``None``. C'est " "un authentique objet Python plutôt qu'un pointeur *NULL*, qui signifie " -"\"error\" dans la plupart des situations, comme nous l'avons vu." +"qu'une erreur est survenue, dans la plupart des situations, comme nous " +"l'avons vu." -#: ../Doc/extending/extending.rst:305 +#: ../Doc/extending/extending.rst:307 msgid "The Module's Method Table and Initialization Function" -msgstr "" +msgstr "La fonction d'initialisation et le tableau des méthodes du module" -#: ../Doc/extending/extending.rst:307 +#: ../Doc/extending/extending.rst:309 msgid "" "I promised to show how :c:func:`spam_system` is called from Python programs. " "First, we need to list its name and address in a \"method table\"::" msgstr "" +"Nous avons promis de montrer comment :c:func:`spam_system` est appelée " +"depuis les programmes Python. D'abord, nous avons besoin d'avoir son nom et " +"son adresse dans un « tableau des méthodes » ::" -#: ../Doc/extending/extending.rst:318 +#: ../Doc/extending/extending.rst:320 msgid "" "Note the third entry (``METH_VARARGS``). This is a flag telling the " "interpreter the calling convention to be used for the C function. It should " @@ -579,15 +582,24 @@ msgid "" "value of ``0`` means that an obsolete variant of :c:func:`PyArg_ParseTuple` " "is used." msgstr "" +"Notez la troisième entrée (``METH_VARARGS``). C'est un indicateur du type de " +"convention à utiliser pour la fonction C, à destination de l'interpréteur. " +"Il doit valoir normalement ``METH_VARARGS`` ou ``METH_VARARGS | " +"METH_KEYWORDS`` ; la valeur ``0`` indique qu'une variante obsolète de :c:" +"func:`PyArg_ParseTuple` est utilisée." -#: ../Doc/extending/extending.rst:323 +#: ../Doc/extending/extending.rst:325 msgid "" "When using only ``METH_VARARGS``, the function should expect the Python-" "level parameters to be passed in as a tuple acceptable for parsing via :c:" "func:`PyArg_ParseTuple`; more information on this function is provided below." msgstr "" +"Si seulement ``METH_VARARGS`` est utilisé, la fonction s'attend à ce que les " +"paramètres Python soient passés comme un n-uplet que l'on peut analyser " +"*via* :c:func:`PyArg_ParseTuple` ; des informations supplémentaires sont " +"fournies plus bas." -#: ../Doc/extending/extending.rst:327 +#: ../Doc/extending/extending.rst:329 msgid "" "The :const:`METH_KEYWORDS` bit may be set in the third field if keyword " "arguments should be passed to the function. In this case, the C function " @@ -595,28 +607,43 @@ msgid "" "keywords. Use :c:func:`PyArg_ParseTupleAndKeywords` to parse the arguments " "to such a function." msgstr "" +"Le bit :const:`METH_KEYWORDS` peut être mis à un dans le troisième champ si " +"des arguments par mot-clés doivent être passés à la fonction. Dans ce cas, " +"la fonction C doit accepter un troisième paramètre ``PyObject *`` qui est un " +"dictionnaire des mots-clés. Utilisez :c:func:`PyArg_ParseTupleAndKeywords` " +"pour analyser les arguments d'une telle fonction." -#: ../Doc/extending/extending.rst:333 +#: ../Doc/extending/extending.rst:335 msgid "" "The method table must be referenced in the module definition structure::" msgstr "" +"Le tableau des méthodes doit être référencé dans la structure de définition " +"du module ::" -#: ../Doc/extending/extending.rst:344 +#: ../Doc/extending/extending.rst:346 msgid "" "This structure, in turn, must be passed to the interpreter in the module's " "initialization function. The initialization function must be named :c:func:" "`PyInit_name`, where *name* is the name of the module, and should be the " "only non-\\ ``static`` item defined in the module file::" msgstr "" +"Cette structure, à son tour, doit être transmise à l'interpréteur dans la " +"fonction d'initialisation du module. La fonction d'initialisation doit être " +"nommée :c:func:`PyInit_name`, où *nom* est le nom du module, et doit être le " +"seul élément non ``static`` défini dans le fichier du module ::" -#: ../Doc/extending/extending.rst:355 +#: ../Doc/extending/extending.rst:357 msgid "" "Note that PyMODINIT_FUNC declares the function as ``PyObject *`` return " "type, declares any special linkage declarations required by the platform, " "and for C++ declares the function as ``extern \"C\"``." msgstr "" +"Notez que *PyMODINIT_FUNC* déclare la fonction comme renvoyant un objet de " +"type ``PyObject *``, et déclare également toute déclaration de liaison " +"spéciale requise par la plate-forme, et pour le C++ déclare la fonction " +"comme un C ``extern``." -#: ../Doc/extending/extending.rst:359 +#: ../Doc/extending/extending.rst:361 msgid "" "When the Python program imports module :mod:`spam` for the first time, :c:" "func:`PyInit_spam` is called. (See below for comments about embedding " @@ -630,15 +657,20 @@ msgid "" "gets inserted into ``sys.modules``." msgstr "" -#: ../Doc/extending/extending.rst:370 +#: ../Doc/extending/extending.rst:372 msgid "" "When embedding Python, the :c:func:`PyInit_spam` function is not called " "automatically unless there's an entry in the :c:data:`PyImport_Inittab` " "table. To add the module to the initialization table, use :c:func:" "`PyImport_AppendInittab`, optionally followed by an import of the module::" msgstr "" +"Lors de l'intégration de Python, la fonction :c:func:`PyInit_spam` n'est pas " +"appelée automatiquement, sauf s'il y a une entrée dans la table :c:data:" +"`PyImport_Inittab`. Pour ajouter le module à la table d'initialisation, " +"utilisez :c:func:`PyImport_AppendInittab`, suivi éventuellement d'une " +"importation du module ::" -#: ../Doc/extending/extending.rst:406 +#: ../Doc/extending/extending.rst:408 msgid "" "Removing entries from ``sys.modules`` or importing compiled modules into " "multiple interpreters within a process (or following a :c:func:`fork` " @@ -646,27 +678,41 @@ msgid "" "extension modules. Extension module authors should exercise caution when " "initializing internal data structures." msgstr "" +"Supprimer des entrées de ``sys.modules`` ou importer des modules compilés " +"dans plusieurs interpréteurs au sein d'un processus (ou suivre un :c:func:" +"`fork` sans l'intervention d'un :c:func:`exec`) peut créer des problèmes " +"pour certains modules d'extension. Les auteurs de modules d'extension " +"doivent faire preuve de prudence lorsqu'ils initialisent des structures de " +"données internes." -#: ../Doc/extending/extending.rst:412 +#: ../Doc/extending/extending.rst:414 msgid "" "A more substantial example module is included in the Python source " "distribution as :file:`Modules/xxmodule.c`. This file may be used as a " "template or simply read as an example." msgstr "" +"Un exemple de module plus substantiel est inclus dans la distribution des " +"sources Python sous le nom :file:`Modules/xxmodule.c`. Ce fichier peut être " +"utilisé comme modèle ou simplement lu comme exemple." -#: ../Doc/extending/extending.rst:418 +#: ../Doc/extending/extending.rst:420 msgid "" "Unlike our ``spam`` example, ``xxmodule`` uses *multi-phase initialization* " "(new in Python 3.5), where a PyModuleDef structure is returned from " "``PyInit_spam``, and creation of the module is left to the import machinery. " "For details on multi-phase initialization, see :PEP:`489`." msgstr "" +"Contrairement à notre exemple de ``spam``, ``xxmodule`` utilise une " +"*initialisation multi-phase* (nouveau en Python 3.5), où une structure " +"*PyModuleDef* est renvoyée à partir de ``PyInit_spam``, et la création du " +"module est laissée au mécanisme d'importation. Pour plus de détails sur " +"l'initialisation multi-phase, voir :PEP:`489`." -#: ../Doc/extending/extending.rst:427 +#: ../Doc/extending/extending.rst:429 msgid "Compilation and Linkage" -msgstr "" +msgstr "Compilation et liaison" -#: ../Doc/extending/extending.rst:429 +#: ../Doc/extending/extending.rst:431 msgid "" "There are two more things to do before you can use your new extension: " "compiling and linking it with the Python system. If you use dynamic " @@ -676,17 +722,17 @@ msgid "" "Windows (chapter :ref:`building-on-windows`) for more information about this." msgstr "" -#: ../Doc/extending/extending.rst:436 +#: ../Doc/extending/extending.rst:438 msgid "" "If you can't use dynamic loading, or if you want to make your module a " "permanent part of the Python interpreter, you will have to change the " "configuration setup and rebuild the interpreter. Luckily, this is very " "simple on Unix: just place your file (:file:`spammodule.c` for example) in " "the :file:`Modules/` directory of an unpacked source distribution, add a " -"line to the file :file:`Modules/Setup.local` describing your file::" +"line to the file :file:`Modules/Setup.local` describing your file:" msgstr "" -#: ../Doc/extending/extending.rst:445 +#: ../Doc/extending/extending.rst:449 msgid "" "and rebuild the interpreter by running :program:`make` in the toplevel " "directory. You can also run :program:`make` in the :file:`Modules/` " @@ -695,17 +741,17 @@ msgid "" "the :file:`Setup` file.)" msgstr "" -#: ../Doc/extending/extending.rst:451 +#: ../Doc/extending/extending.rst:455 msgid "" "If your module requires additional libraries to link with, these can be " -"listed on the line in the configuration file as well, for instance::" +"listed on the line in the configuration file as well, for instance:" msgstr "" -#: ../Doc/extending/extending.rst:460 +#: ../Doc/extending/extending.rst:466 msgid "Calling Python Functions from C" -msgstr "" +msgstr "Appeler des fonctions Python en C" -#: ../Doc/extending/extending.rst:462 +#: ../Doc/extending/extending.rst:468 msgid "" "So far we have concentrated on making C functions callable from Python. The " "reverse is also useful: calling Python functions from C. This is especially " @@ -716,7 +762,7 @@ msgid "" "uses are also imaginable." msgstr "" -#: ../Doc/extending/extending.rst:470 +#: ../Doc/extending/extending.rst:476 msgid "" "Fortunately, the Python interpreter is easily called recursively, and there " "is a standard interface to call a Python function. (I won't dwell on how to " @@ -725,7 +771,7 @@ msgid "" "line option in :file:`Modules/main.c` from the Python source code.)" msgstr "" -#: ../Doc/extending/extending.rst:476 +#: ../Doc/extending/extending.rst:482 msgid "" "Calling a Python function is easy. First, the Python program must somehow " "pass you the Python function object. You should provide a function (or some " @@ -735,15 +781,19 @@ msgid "" "function might be part of a module definition::" msgstr "" -#: ../Doc/extending/extending.rst:506 +#: ../Doc/extending/extending.rst:512 msgid "" "This function must be registered with the interpreter using the :const:" "`METH_VARARGS` flag; this is described in section :ref:`methodtable`. The :" "c:func:`PyArg_ParseTuple` function and its arguments are documented in " "section :ref:`parsetuple`." msgstr "" +"Cette fonction doit être déclarée en utilisant le drapeau :const:" +"`METH_VARARGS` ; ceci est décrit dans la section :ref:`methodtable`. La " +"fonction :c:func:`PyArg_ParseTuple` et ses arguments sont documentés dans la " +"section :ref:`parsetuple`." -#: ../Doc/extending/extending.rst:511 +#: ../Doc/extending/extending.rst:517 msgid "" "The macros :c:func:`Py_XINCREF` and :c:func:`Py_XDECREF` increment/decrement " "the reference count of an object and are safe in the presence of *NULL* " @@ -751,7 +801,7 @@ msgid "" "info on them in section :ref:`refcounts`." msgstr "" -#: ../Doc/extending/extending.rst:518 +#: ../Doc/extending/extending.rst:524 msgid "" "Later, when it is time to call the function, you call the C function :c:func:" "`PyObject_CallObject`. This function has two arguments, both pointers to " @@ -763,7 +813,7 @@ msgid "" "or more format codes between parentheses. For example::" msgstr "" -#: ../Doc/extending/extending.rst:538 +#: ../Doc/extending/extending.rst:544 msgid "" ":c:func:`PyObject_CallObject` returns a Python object pointer: this is the " "return value of the Python function. :c:func:`PyObject_CallObject` is " @@ -772,7 +822,7 @@ msgid "" "`Py_DECREF`\\ -ed immediately after the :c:func:`PyObject_CallObject` call." msgstr "" -#: ../Doc/extending/extending.rst:544 +#: ../Doc/extending/extending.rst:550 msgid "" "The return value of :c:func:`PyObject_CallObject` is \"new\": either it is a " "brand new object, or it is an existing object whose reference count has been " @@ -781,7 +831,7 @@ msgid "" "not interested in its value." msgstr "" -#: ../Doc/extending/extending.rst:550 +#: ../Doc/extending/extending.rst:556 msgid "" "Before you do this, however, it is important to check that the return value " "isn't *NULL*. If it is, the Python function terminated by raising an " @@ -792,7 +842,7 @@ msgid "" "should be cleared by calling :c:func:`PyErr_Clear`. For example::" msgstr "" -#: ../Doc/extending/extending.rst:563 +#: ../Doc/extending/extending.rst:569 msgid "" "Depending on the desired interface to the Python callback function, you may " "also have to provide an argument list to :c:func:`PyObject_CallObject`. In " @@ -803,8 +853,18 @@ msgid "" "simplest way to do this is to call :c:func:`Py_BuildValue`. For example, if " "you want to pass an integral event code, you might use the following code::" msgstr "" +"Selon l'interface souhaitée pour la fonction de rappel Python, vous devrez " +"peut-être aussi fournir une liste d'arguments à :c:func:" +"`PyObject_CallObject`. Dans certains cas, la liste d'arguments est également " +"fournie par le programme Python, par l'intermédiaire de la même interface " +"qui a spécifié la fonction de rappel. Elle peut alors être sauvegardée et " +"utilisée de la même manière que l'objet fonction. Dans d'autres cas, vous " +"pouvez avoir à construire un nouveau n-uplet à passer comme liste " +"d'arguments. La façon la plus simple de faire cela est d'appeler :c:func:" +"`Py_BuildValue`. Par exemple, si vous voulez passer un code d'événement " +"intégral, vous pouvez utiliser le code suivant ::" -#: ../Doc/extending/extending.rst:582 +#: ../Doc/extending/extending.rst:588 msgid "" "Note the placement of ``Py_DECREF(arglist)`` immediately after the call, " "before the error check! Also note that strictly speaking this code is not " @@ -812,22 +872,26 @@ msgid "" "checked." msgstr "" -#: ../Doc/extending/extending.rst:586 +#: ../Doc/extending/extending.rst:592 msgid "" "You may also call a function with keyword arguments by using :c:func:" "`PyObject_Call`, which supports arguments and keyword arguments. As in the " "above example, we use :c:func:`Py_BuildValue` to construct the dictionary. ::" msgstr "" +"Vous pouvez également appeler une fonction avec des arguments nommés en " +"utilisant :c:func:`PyObject_Call`, qui accepte les arguments et les " +"arguments nommés. Comme dans l'exemple ci-dessus, nous utilisons :c:func:" +"`Py_BuildValue` pour construire le dictionnaire. ::" -#: ../Doc/extending/extending.rst:604 +#: ../Doc/extending/extending.rst:610 msgid "Extracting Parameters in Extension Functions" -msgstr "" +msgstr "Extraire des paramètres dans des fonctions d'extension" -#: ../Doc/extending/extending.rst:608 +#: ../Doc/extending/extending.rst:614 msgid "The :c:func:`PyArg_ParseTuple` function is declared as follows::" -msgstr "" +msgstr "La fonction :c:func:`PyArg_ParseTuple` est déclarée ainsi ::" -#: ../Doc/extending/extending.rst:612 +#: ../Doc/extending/extending.rst:618 msgid "" "The *arg* argument must be a tuple object containing an argument list passed " "from Python to a C function. The *format* argument must be a format string, " @@ -836,7 +900,7 @@ msgid "" "whose type is determined by the format string." msgstr "" -#: ../Doc/extending/extending.rst:618 +#: ../Doc/extending/extending.rst:624 msgid "" "Note that while :c:func:`PyArg_ParseTuple` checks that the Python arguments " "have the required types, it cannot check the validity of the addresses of C " @@ -844,29 +908,30 @@ msgid "" "probably crash or at least overwrite random bits in memory. So be careful!" msgstr "" -#: ../Doc/extending/extending.rst:623 +#: ../Doc/extending/extending.rst:629 msgid "" "Note that any Python object references which are provided to the caller are " "*borrowed* references; do not decrement their reference count!" msgstr "" "Notez que n'importe quelles références sur un objet Python qui sont données " "à l'appelant sont des références *empruntées* ; ne décrémentez pas leur " -"compteur de références ! " +"compteur de références !" -#: ../Doc/extending/extending.rst:626 +#: ../Doc/extending/extending.rst:632 msgid "Some example calls::" -msgstr "" +msgstr "Quelques exemples d'appels ::" -#: ../Doc/extending/extending.rst:696 +#: ../Doc/extending/extending.rst:702 msgid "Keyword Parameters for Extension Functions" -msgstr "" +msgstr "Paramètres nommés pour des fonctions d'extension" -#: ../Doc/extending/extending.rst:700 +#: ../Doc/extending/extending.rst:706 msgid "" "The :c:func:`PyArg_ParseTupleAndKeywords` function is declared as follows::" msgstr "" +"La fonction :c:func:`PyArg_ParseTupleAndKeywords` est déclarée ainsi ::" -#: ../Doc/extending/extending.rst:705 +#: ../Doc/extending/extending.rst:711 msgid "" "The *arg* and *format* parameters are identical to those of the :c:func:" "`PyArg_ParseTuple` function. The *kwdict* parameter is the dictionary of " @@ -877,38 +942,50 @@ msgid "" "returns true, otherwise it returns false and raises an appropriate exception." msgstr "" -#: ../Doc/extending/extending.rst:715 +#: ../Doc/extending/extending.rst:721 msgid "" "Nested tuples cannot be parsed when using keyword arguments! Keyword " "parameters passed in which are not present in the *kwlist* will cause :exc:" "`TypeError` to be raised." msgstr "" +"Les n-uplets imbriqués ne peuvent pas être traités lorsqu'on utilise des " +"arguments de type mot-clé ! Ceux-ci doivent apparaître dans dans *kwlist*, " +"dans le cas contraire une exception :exc:`TypeError` est levée." -#: ../Doc/extending/extending.rst:721 +#: ../Doc/extending/extending.rst:727 msgid "" "Here is an example module which uses keywords, based on an example by Geoff " "Philbrick (philbrick@hks.com)::" msgstr "" +"Voici un exemple de module qui utilise des mots-clés, basé sur un exemple de " +"*Geoff Philbrick* (philbrick@hks.com) ::" -#: ../Doc/extending/extending.rst:775 +#: ../Doc/extending/extending.rst:781 msgid "Building Arbitrary Values" -msgstr "" +msgstr "Créer des valeurs arbitraires" -#: ../Doc/extending/extending.rst:777 +#: ../Doc/extending/extending.rst:783 msgid "" "This function is the counterpart to :c:func:`PyArg_ParseTuple`. It is " "declared as follows::" msgstr "" +"Cette fonction est le complément de :c:func:`PyArg_ParseTuple`. Elle est " +"déclarée comme suit ::" -#: ../Doc/extending/extending.rst:782 +#: ../Doc/extending/extending.rst:788 msgid "" "It recognizes a set of format units similar to the ones recognized by :c:" "func:`PyArg_ParseTuple`, but the arguments (which are input to the function, " "not output) must not be pointers, just values. It returns a new Python " "object, suitable for returning from a C function called from Python." msgstr "" +"Il reconnaît un ensemble d'unités de format similaires à celles reconnues " +"par :c:func:`PyArg_ParseTuple`, mais les arguments (qui sont les données en " +"entrée de fonction, et non de la sortie) ne doivent pas être des pointeurs, " +"mais juste des valeurs. Il renvoie un nouvel objet Python, adapté pour être " +"renvoyé par une fonction C appelée depuis Python." -#: ../Doc/extending/extending.rst:787 +#: ../Doc/extending/extending.rst:793 msgid "" "One difference with :c:func:`PyArg_ParseTuple`: while the latter requires " "its first argument to be a tuple (since Python argument lists are always " @@ -920,16 +997,17 @@ msgid "" "parenthesize the format string." msgstr "" -#: ../Doc/extending/extending.rst:795 +#: ../Doc/extending/extending.rst:801 msgid "" "Examples (to the left the call, to the right the resulting Python value):" msgstr "" +"Exemples (à gauche l'appel, à droite la valeur résultante, en Python) :" -#: ../Doc/extending/extending.rst:821 +#: ../Doc/extending/extending.rst:827 msgid "Reference Counts" -msgstr "" +msgstr "Compteurs de références" -#: ../Doc/extending/extending.rst:823 +#: ../Doc/extending/extending.rst:829 msgid "" "In languages like C or C++, the programmer is responsible for dynamic " "allocation and deallocation of memory on the heap. In C, this is done using " @@ -937,8 +1015,14 @@ msgid "" "``new`` and ``delete`` are used with essentially the same meaning and we'll " "restrict the following discussion to the C case." msgstr "" +"Dans les langages comme le C ou le C++, le développeur est responsable de " +"l'allocation dynamique et de la dés-allocation de la mémoire sur le tas. En " +"C, cela se fait à l'aide des fonctions :c:func:`malloc` et :c:func:`free`. " +"En C++, les opérateurs ``new`` et ``delete`` sont utilisés avec " +"essentiellement la même signification et nous limiterons la discussion " +"suivante au cas du C." -#: ../Doc/extending/extending.rst:829 +#: ../Doc/extending/extending.rst:835 msgid "" "Every block of memory allocated with :c:func:`malloc` should eventually be " "returned to the pool of available memory by exactly one call to :c:func:" @@ -953,7 +1037,7 @@ msgid "" "crashes." msgstr "" -#: ../Doc/extending/extending.rst:840 +#: ../Doc/extending/extending.rst:846 msgid "" "Common causes of memory leaks are unusual paths through the code. For " "instance, a function may allocate a block of memory, do some calculation, " @@ -970,7 +1054,7 @@ msgid "" "of errors." msgstr "" -#: ../Doc/extending/extending.rst:853 +#: ../Doc/extending/extending.rst:859 msgid "" "Since Python makes heavy use of :c:func:`malloc` and :c:func:`free`, it " "needs a strategy to avoid memory leaks as well as the use of freed memory. " @@ -980,8 +1064,16 @@ msgid "" "reference to it is deleted. When the counter reaches zero, the last " "reference to the object has been deleted and the object is freed." msgstr "" +"Comme Python fait un usage intensif de :c:func:`malloc` et de :c:func:" +"`free`, il a besoin d'une stratégie pour éviter les fuites de mémoire ainsi " +"que l'utilisation de la mémoire libérée. La méthode choisie est appelée :dfn:" +"`reference counting`. Le principe est simple : chaque objet contient un " +"compteur, qui est incrémenté lorsqu'une référence à l'objet est stockée " +"quelque part, et qui est décrémenté lorsqu'une référence à celui-ci est " +"supprimée. Lorsque le compteur atteint zéro, la dernière référence à l'objet " +"a été supprimée et l'objet est libéré." -#: ../Doc/extending/extending.rst:861 +#: ../Doc/extending/extending.rst:867 msgid "" "An alternative strategy is called :dfn:`automatic garbage collection`. " "(Sometimes, reference counting is also referred to as a garbage collection " @@ -996,8 +1088,21 @@ msgid "" "garbage collector will be available for C. Until then, we'll have to live " "with reference counts." msgstr "" - -#: ../Doc/extending/extending.rst:873 +"Une stratégie alternative est appelée :dfn:`automatic garbage collection` " +"(ramasse-miettes). Parfois, le comptage des références est également appelé " +"stratégie de ramasse-miettes, d'où l'utilisation du terme \"automatique\" " +"pour distinguer les deux. Le grand avantage du ramasse-miettes est que " +"l'utilisateur n'a pas besoin d'appeler :c:func:`free` explicitement. (Un " +"autre avantage important est l'amélioration de la vitesse ou de " +"l'utilisation de la mémoire, ce n'est cependant pas un fait avéré). " +"L'inconvénient est que pour C, il n'y a pas de ramasse-miettes portable " +"proprement-dit, alors que le comptage des références peut être implémenté de " +"façon portable (tant que les fonctions :c:func:`malloc` et :c:func:`free` " +"soient disponibles, ce que la norme C garantit). Peut-être qu'un jour un " +"ramasse-miettes suffisamment portable sera disponible pour C. D'ici là, nous " +"devrons utiliser les compteurs des références." + +#: ../Doc/extending/extending.rst:879 msgid "" "While Python uses the traditional reference counting implementation, it also " "offers a cycle detector that works to detect reference cycles. This allows " @@ -1010,8 +1115,20 @@ msgid "" "in a reference cycle, or referenced from the objects in the cycle, even " "though there are no further references to the cycle itself." msgstr "" - -#: ../Doc/extending/extending.rst:884 +"Bien que Python utilise l'implémentation traditionnelle de comptage de " +"référence, il contient également un détecteur de cycles qui fonctionne pour " +"détecter les cycles de référence. Cela permet aux applications d'empêcher la " +"création de références circulaires directes ou indirectes ; ceci sont les " +"faiblesses du ramasse-miettes mis en œuvre en utilisant uniquement le " +"comptage de référence. Les cycles de référence sont constitués d'objets qui " +"contiennent des références (éventuellement indirectes) à eux-mêmes, de sorte " +"que chaque objet du cycle a un comptage de référence qui n'est pas nul. Les " +"implémentations typiques de comptage de référence ne sont pas capables de " +"récupérer la mémoire appartenant à des objets dans un cycle de référence, ou " +"référencés à partir des objets dans le cycle, même s'il n'y a pas d'autres " +"références au cycle lui-même." + +#: ../Doc/extending/extending.rst:890 msgid "" "The cycle detector is able to detect garbage cycles and can reclaim them. " "The :mod:`gc` module exposes a way to run the detector (the :func:`~gc." @@ -1023,11 +1140,11 @@ msgid "" "detector is disabled in this way, the :mod:`gc` module will not be available." msgstr "" -#: ../Doc/extending/extending.rst:898 +#: ../Doc/extending/extending.rst:904 msgid "Reference Counting in Python" -msgstr "" +msgstr "Comptage de références en Python" -#: ../Doc/extending/extending.rst:900 +#: ../Doc/extending/extending.rst:906 msgid "" "There are two macros, ``Py_INCREF(x)`` and ``Py_DECREF(x)``, which handle " "the incrementing and decrementing of the reference count. :c:func:" @@ -1037,8 +1154,15 @@ msgid "" "this purpose (and others), every object also contains a pointer to its type " "object." msgstr "" +"Il existe deux macros, ``Py_INCREF(x)`` et ``Py_DECREF(x)``, qui gèrent " +"l'incrémentation et la décrémentation du comptage de référence. :c:func:" +"`Py_DECREF` libère également l'objet lorsque le comptage atteint zéro. Pour " +"plus de flexibilité, il n'appelle pas :c:func:`free` directement — plutôt, " +"il fait un appel à travers un pointeur de fonction dans l'objet :dfn:`type " +"objet` de l'objet. À cette fin (et pour d'autres), chaque objet contient " +"également un pointeur vers son objet type." -#: ../Doc/extending/extending.rst:907 +#: ../Doc/extending/extending.rst:913 msgid "" "The big question now remains: when to use ``Py_INCREF(x)`` and " "``Py_DECREF(x)``? Let's first introduce some terms. Nobody \"owns\" an " @@ -1050,8 +1174,18 @@ msgid "" "on, store it, or call :c:func:`Py_DECREF`. Forgetting to dispose of an owned " "reference creates a memory leak." msgstr "" +"La grande question demeure maintenant : quand utiliser ``Py_INCREF(x)`` et " +"``Py_DECREF(x)`` ? Commençons par définir quelques termes. Personne ne " +"possède un objet, mais vous pouvez en :dfn:`avoir une référence`. Le " +"comptage de références d'un objet est maintenant défini comme étant le " +"nombre de références à cet objet. Le propriétaire d'une référence est " +"responsable d'appeler :c:func:`Py_DECREF` lorsque la référence n'est plus " +"nécessaire. La propriété d'une référence peut être transférée. Il y a trois " +"façons de disposer d'une référence : la transmettre, la stocker, ou appeler :" +"c:func:`Py_DECREF`. Oublier de se débarrasser d'une référence crée une fuite " +"de mémoire." -#: ../Doc/extending/extending.rst:916 +#: ../Doc/extending/extending.rst:922 msgid "" "It is also possible to :dfn:`borrow` [#]_ a reference to an object. The " "borrower of a reference should not call :c:func:`Py_DECREF`. The borrower " @@ -1060,7 +1194,7 @@ msgid "" "risks using freed memory and should be avoided completely [#]_." msgstr "" -#: ../Doc/extending/extending.rst:922 +#: ../Doc/extending/extending.rst:928 msgid "" "The advantage of borrowing over owning a reference is that you don't need to " "take care of disposing of the reference on all possible paths through the " @@ -1070,8 +1204,16 @@ msgid "" "code a borrowed reference can be used after the owner from which it was " "borrowed has in fact disposed of it." msgstr "" +"L'avantage d'emprunter, plutôt qu'être propriétaire d'une référence est que " +"vous n'avez pas à vous soucier de disposer de la référence sur tous les " +"chemins possibles dans le code — en d'autres termes, avec une référence " +"empruntée, vous ne courez pas le risque de fuites lors d'une sortie " +"prématurée. L'inconvénient de l'emprunt par rapport à la possession est " +"qu'il existe certaines situations subtiles où, dans un code apparemment " +"correct, une référence empruntée peut être utilisée après que le " +"propriétaire auquel elle a été empruntée l'a en fait éliminée." -#: ../Doc/extending/extending.rst:930 +#: ../Doc/extending/extending.rst:936 msgid "" "A borrowed reference can be changed into an owned reference by calling :c:" "func:`Py_INCREF`. This does not affect the status of the owner from which " @@ -1080,18 +1222,22 @@ msgid "" "properly, as well as the previous owner)." msgstr "" -#: ../Doc/extending/extending.rst:940 +#: ../Doc/extending/extending.rst:946 msgid "Ownership Rules" -msgstr "" +msgstr "Règles concernant la propriété de références" -#: ../Doc/extending/extending.rst:942 +#: ../Doc/extending/extending.rst:948 msgid "" "Whenever an object reference is passed into or out of a function, it is part " "of the function's interface specification whether ownership is transferred " "with the reference or not." msgstr "" +"Chaque fois qu'une référence d'objet est passée à l'intérieur ou à " +"l'extérieur d'une fonction, elle fait partie de la spécification de " +"l'interface de la fonction, peu importe que la propriété soit transférée " +"avec la référence ou non." -#: ../Doc/extending/extending.rst:946 +#: ../Doc/extending/extending.rst:952 msgid "" "Most functions that return a reference to an object pass on ownership with " "the reference. In particular, all functions whose function it is to create " @@ -1102,7 +1248,7 @@ msgid "" "reference to a cached item." msgstr "" -#: ../Doc/extending/extending.rst:954 +#: ../Doc/extending/extending.rst:960 msgid "" "Many functions that extract objects from other objects also transfer " "ownership with the reference, for instance :c:func:" @@ -1113,14 +1259,14 @@ msgid "" "list or dictionary." msgstr "" -#: ../Doc/extending/extending.rst:961 +#: ../Doc/extending/extending.rst:967 msgid "" "The function :c:func:`PyImport_AddModule` also returns a borrowed reference, " "even though it may actually create the object it returns: this is possible " "because an owned reference to the object is stored in ``sys.modules``." msgstr "" -#: ../Doc/extending/extending.rst:965 +#: ../Doc/extending/extending.rst:971 msgid "" "When you pass an object reference into another function, in general, the " "function borrows the reference from you --- if it needs to store it, it will " @@ -1131,7 +1277,7 @@ msgid "" "don't take over ownership --- they are \"normal.\")" msgstr "" -#: ../Doc/extending/extending.rst:973 +#: ../Doc/extending/extending.rst:979 msgid "" "When a C function is called from Python, it borrows references to its " "arguments from the caller. The caller owns a reference to the object, so " @@ -1140,40 +1286,50 @@ msgid "" "turned into an owned reference by calling :c:func:`Py_INCREF`." msgstr "" -#: ../Doc/extending/extending.rst:979 +#: ../Doc/extending/extending.rst:985 msgid "" "The object reference returned from a C function that is called from Python " "must be an owned reference --- ownership is transferred from the function to " "its caller." msgstr "" -#: ../Doc/extending/extending.rst:987 +#: ../Doc/extending/extending.rst:993 msgid "Thin Ice" -msgstr "" +msgstr "Terrain dangereux" -#: ../Doc/extending/extending.rst:989 +#: ../Doc/extending/extending.rst:995 msgid "" "There are a few situations where seemingly harmless use of a borrowed " "reference can lead to problems. These all have to do with implicit " "invocations of the interpreter, which can cause the owner of a reference to " "dispose of it." msgstr "" +"Il existe quelques situations où l'utilisation apparemment inoffensive d'une " +"référence empruntée peut entraîner des problèmes. Tous ces problèmes sont en " +"lien avec des invocations implicites de l’interpréteur, et peuvent amener le " +"propriétaire d'une référence à s'en défaire." -#: ../Doc/extending/extending.rst:993 +#: ../Doc/extending/extending.rst:999 msgid "" "The first and most important case to know about is using :c:func:`Py_DECREF` " "on an unrelated object while borrowing a reference to a list item. For " "instance::" msgstr "" +"Le premier cas, et le plus important à connaître, est celui de l'application " +"de :c:func:`Py_DECREF` à un objet non relié, tout en empruntant une " +"référence à un élément de liste. Par exemple ::" -#: ../Doc/extending/extending.rst:1005 +#: ../Doc/extending/extending.rst:1011 msgid "" "This function first borrows a reference to ``list[0]``, then replaces " "``list[1]`` with the value ``0``, and finally prints the borrowed reference. " "Looks harmless, right? But it's not!" msgstr "" +"Cette fonction emprunte d'abord une référence à ``list[0]``, puis remplace " +"``list[1]`` par la valeur ``0``, et enfin affiche la référence empruntée. " +"Ça a l'air inoffensif, n'est-ce pas ? Mais ce n'est pas le cas !" -#: ../Doc/extending/extending.rst:1009 +#: ../Doc/extending/extending.rst:1015 msgid "" "Let's follow the control flow into :c:func:`PyList_SetItem`. The list owns " "references to all its items, so when item 1 is replaced, it has to dispose " @@ -1182,8 +1338,15 @@ msgid "" "defined a :meth:`__del__` method. If this class instance has a reference " "count of 1, disposing of it will call its :meth:`__del__` method." msgstr "" +"Suivons le flux de contrôle dans :c:func:`PyList_SetItem`. La liste possède " +"des références à tous ses éléments, donc quand l'élément 1 est remplacé, " +"elle doit se débarrasser de l'élément 1 original. Supposons maintenant que " +"l'élément 1 original était une instance d'une classe définie par " +"l'utilisateur, et supposons en outre que la classe définisse une méthode :" +"meth:`__del__`. Si l'instance de cette classe a un nombre des références de " +"1, sa destruction appellera sa méthode :meth:`__del__`." -#: ../Doc/extending/extending.rst:1016 +#: ../Doc/extending/extending.rst:1022 msgid "" "Since it is written in Python, the :meth:`__del__` method can execute " "arbitrary Python code. Could it perhaps do something to invalidate the " @@ -1193,21 +1356,28 @@ msgid "" "this was the last reference to that object, it would free the memory " "associated with it, thereby invalidating ``item``." msgstr "" +"Comme elle est écrite en Python, la méthode :meth:`__del__` peut exécuter du " +"code Python arbitraire. Pourrait-elle faire quelque chose pour invalider la " +"référence à ``item`` dans :c:func:`bug` ? Bien sûr ! En supposant que la " +"liste passée dans :c:func:`bug` est accessible à la méthode :meth:`__del__`, " +"elle pourrait exécuter une instruction à l'effet de ``del list[0]``, et en " +"supposant que ce soit la dernière référence à cet objet, elle libérerait la " +"mémoire qui lui est associée, invalidant ainsi ``item``." -#: ../Doc/extending/extending.rst:1024 +#: ../Doc/extending/extending.rst:1030 msgid "" "The solution, once you know the source of the problem, is easy: temporarily " "increment the reference count. The correct version of the function reads::" msgstr "" -#: ../Doc/extending/extending.rst:1038 +#: ../Doc/extending/extending.rst:1044 msgid "" "This is a true story. An older version of Python contained variants of this " "bug and someone spent a considerable amount of time in a C debugger to " "figure out why his :meth:`__del__` methods would fail..." msgstr "" -#: ../Doc/extending/extending.rst:1042 +#: ../Doc/extending/extending.rst:1048 msgid "" "The second case of problems with a borrowed reference is a variant involving " "threads. Normally, multiple threads in the Python interpreter can't get in " @@ -1219,12 +1389,22 @@ msgid "" "complete. Obviously, the following function has the same problem as the " "previous one::" msgstr "" - -#: ../Doc/extending/extending.rst:1065 +"Le deuxième cas de problèmes liés à une référence empruntée est une variante " +"impliquant des fils de discussion. Normalement, plusieurs threads dans " +"l'interpréteur Python ne peuvent pas se gêner mutuellement, car il existe un " +"verrou global protégeant tout l'espace objet de Python. Cependant, il est " +"possible de libérer temporairement ce verrou en utilisant la macro :c:macro:" +"`Py_BEGIN_ALLOW_THREADS`, et de le ré-acquérir en utilisant :c:macro:" +"`Py_END_ALLOW_THREADS`. Ceci est un procédé courant pour bloquer les appels " +"d'entrées/sorties, afin de permettre aux autres threads d'utiliser le " +"processeur en attendant que les E/S soient terminées. Évidemment, la " +"fonction suivante a le même problème que la précédente ::" + +#: ../Doc/extending/extending.rst:1071 msgid "NULL Pointers" -msgstr "" +msgstr "Pointeurs ``NULL``" -#: ../Doc/extending/extending.rst:1067 +#: ../Doc/extending/extending.rst:1073 msgid "" "In general, functions that take object references as arguments do not expect " "you to pass them *NULL* pointers, and will dump core (or cause later core " @@ -1236,21 +1416,21 @@ msgid "" "slowly." msgstr "" -#: ../Doc/extending/extending.rst:1075 +#: ../Doc/extending/extending.rst:1081 msgid "" "It is better to test for *NULL* only at the \"source:\" when a pointer that " "may be *NULL* is received, for example, from :c:func:`malloc` or from a " "function that may raise an exception." msgstr "" -#: ../Doc/extending/extending.rst:1079 +#: ../Doc/extending/extending.rst:1085 msgid "" "The macros :c:func:`Py_INCREF` and :c:func:`Py_DECREF` do not check for " "*NULL* pointers --- however, their variants :c:func:`Py_XINCREF` and :c:func:" "`Py_XDECREF` do." msgstr "" -#: ../Doc/extending/extending.rst:1083 +#: ../Doc/extending/extending.rst:1089 msgid "" "The macros for checking for a particular object type (``Pytype_Check()``) " "don't check for *NULL* pointers --- again, there is much code that calls " @@ -1259,24 +1439,24 @@ msgid "" "variants with *NULL* checking." msgstr "" -#: ../Doc/extending/extending.rst:1089 +#: ../Doc/extending/extending.rst:1095 msgid "" "The C function calling mechanism guarantees that the argument list passed to " "C functions (``args`` in the examples) is never *NULL* --- in fact it " "guarantees that it is always a tuple [#]_." msgstr "" -#: ../Doc/extending/extending.rst:1093 +#: ../Doc/extending/extending.rst:1099 msgid "" "It is a severe error to ever let a *NULL* pointer \"escape\" to the Python " "user." msgstr "" -#: ../Doc/extending/extending.rst:1104 +#: ../Doc/extending/extending.rst:1110 msgid "Writing Extensions in C++" -msgstr "" +msgstr "Écrire des extensions en C++" -#: ../Doc/extending/extending.rst:1106 +#: ../Doc/extending/extending.rst:1112 msgid "" "It is possible to write extension modules in C++. Some restrictions apply. " "If the main program (the Python interpreter) is compiled and linked by the C " @@ -1288,12 +1468,23 @@ msgid "" "`` --- they use this form already if the symbol ``__cplusplus`` is defined " "(all recent C++ compilers define this symbol)." msgstr "" - -#: ../Doc/extending/extending.rst:1120 +"C'est possible d'écrire des modules d'extension en C++, mais sous certaines " +"conditions. Si le programme principal (l'interpréteur Python) est compilé et " +"lié par le compilateur C, les objets globaux ou statiques avec les " +"constructeurs ne peuvent pas être utilisés. Ceci n'est pas un problème si le " +"programme principal est relié par le compilateur C++. Les fonctions qui " +"seront appelées par l'interpréteur Python (en particulier, les fonctions " +"d'initialisation des modules) doivent être déclarées en utilisant ``extern " +"\"C\"``. Il n'est pas nécessaire d'inclure les fichiers d'en-tête Python " +"dans le ``extern \"C\" {…}``, car ils utilisent déjà ce format si le symbole " +"``__cplusplus`` est défini (tous les compilateurs C++ récents définissent ce " +"symbole)." + +#: ../Doc/extending/extending.rst:1126 msgid "Providing a C API for an Extension Module" -msgstr "" +msgstr "Fournir une API en langage C pour un module d'extension" -#: ../Doc/extending/extending.rst:1125 +#: ../Doc/extending/extending.rst:1131 msgid "" "Many extension modules just provide new functions and types to be used from " "Python, but sometimes the code in an extension module can be useful for " @@ -1303,8 +1494,17 @@ msgid "" "create and manipulate lists, this new collection type should have a set of C " "functions for direct manipulation from other extension modules." msgstr "" +"De nombreux modules d'extension fournissent simplement de nouvelles " +"fonctions et de nouveaux types à utiliser à partir de Python, mais parfois " +"le code d'un module d'extension peut être utile pour d'autres modules " +"d'extension. Par exemple, un module d'extension peut mettre en œuvre un type " +"\"collection\" qui fonctionne comme des listes sans ordre. Tout comme le " +"type de liste Python standard possède une API C qui permet aux modules " +"d'extension de créer et de manipuler des listes, ce nouveau type de " +"collection devrait posséder un ensemble de fonctions C pour une manipulation " +"directe à partir d'autres modules d'extension." -#: ../Doc/extending/extending.rst:1133 +#: ../Doc/extending/extending.rst:1139 msgid "" "At first sight this seems easy: just write the functions (without declaring " "them ``static``, of course), provide an appropriate header file, and " @@ -1319,8 +1519,22 @@ msgid "" "if symbols are globally visible, the module whose functions one wishes to " "call might not have been loaded yet!" msgstr "" - -#: ../Doc/extending/extending.rst:1145 +"À première vue, cela semble facile : il suffit d'écrire les fonctions (sans " +"les déclarer \"statiques\", bien sûr), de fournir un fichier d'en-tête " +"approprié et de documenter l'API C. Et en fait, cela fonctionnerait si tous " +"les modules d'extension étaient toujours liés statiquement avec " +"l'interpréteur Python. Cependant, lorsque les modules sont utilisés comme " +"des bibliothèques partagées, les symboles définis dans un module peuvent ne " +"pas être visibles par un autre module. Les détails de la visibilité " +"dépendent du système d'exploitation ; certains systèmes utilisent un espace " +"de noms global pour l'interpréteur Python et tous les modules d'extension " +"(Windows, par exemple), tandis que d'autres exigent une liste explicite des " +"symboles importés au moment de la liaison des modules (AIX en est un " +"exemple), ou offrent un choix de stratégies différentes (la plupart des " +"*Unix*). Et même si les symboles sont globalement visibles, le module dont " +"on souhaite appeler les fonctions n'est peut-être pas encore chargé !" + +#: ../Doc/extending/extending.rst:1151 msgid "" "Portability therefore requires not to make any assumptions about symbol " "visibility. This means that all symbols in extension modules should be " @@ -1329,8 +1543,16 @@ msgid "" "section :ref:`methodtable`). And it means that symbols that *should* be " "accessible from other extension modules must be exported in a different way." msgstr "" +"La portabilité exige donc de ne faire aucune supposition sur la visibilité " +"des symboles. Cela signifie que tous les symboles des modules d'extension " +"doivent être déclarés ``static``, à l'exception de la fonction " +"d'initialisation du module, afin d'éviter les conflits de noms avec les " +"autres modules d'extension (comme discuté dans la section :ref:" +"`methodtable`). Et cela signifie que les symboles qui *devraient* être " +"accessibles à partir d'autres modules d'extension doivent être exportés " +"d'une manière différente." -#: ../Doc/extending/extending.rst:1152 +#: ../Doc/extending/extending.rst:1158 msgid "" "Python provides a special mechanism to pass C-level information (pointers) " "from one extension module to another one: Capsules. A Capsule is a Python " @@ -1342,7 +1564,7 @@ msgid "" "the Capsule." msgstr "" -#: ../Doc/extending/extending.rst:1160 +#: ../Doc/extending/extending.rst:1166 msgid "" "There are many ways in which Capsules can be used to export the C API of an " "extension module. Each function could get its own Capsule, or all C API " @@ -1351,8 +1573,15 @@ msgid "" "distributed in different ways between the module providing the code and the " "client modules." msgstr "" +"Il existe de nombreuses façons d'utiliser les Capsules pour exporter l'API C " +"d'un module d'extension. Chaque fonction peut obtenir sa propre Capsule, ou " +"tous les pointeurs de l'API C peuvent être stockés dans un tableau dont " +"l'adresse est inscrite dans une Capsule. Et les différentes tâches de " +"stockage et de récupération des pointeurs peuvent être réparties de " +"différentes manières entre le module fournissant le code et les modules " +"clients." -#: ../Doc/extending/extending.rst:1166 +#: ../Doc/extending/extending.rst:1172 msgid "" "Whichever method you choose, it's important to name your Capsules properly. " "The function :c:func:`PyCapsule_New` takes a name parameter (:c:type:`const " @@ -1362,13 +1591,13 @@ msgid "" "from another." msgstr "" -#: ../Doc/extending/extending.rst:1173 +#: ../Doc/extending/extending.rst:1179 msgid "" "In particular, Capsules used to expose C APIs should be given a name " "following this convention::" msgstr "" -#: ../Doc/extending/extending.rst:1178 +#: ../Doc/extending/extending.rst:1184 msgid "" "The convenience function :c:func:`PyCapsule_Import` makes it easy to load a " "C API provided via a Capsule, but only if the Capsule's name matches this " @@ -1376,7 +1605,7 @@ msgid "" "the Capsule they load contains the correct C API." msgstr "" -#: ../Doc/extending/extending.rst:1183 +#: ../Doc/extending/extending.rst:1189 msgid "" "The following example demonstrates an approach that puts most of the burden " "on the writer of the exporting module, which is appropriate for commonly " @@ -1386,8 +1615,16 @@ msgid "" "takes care of importing the module and retrieving its C API pointers; client " "modules only have to call this macro before accessing the C API." msgstr "" +"L'exemple suivant montre une approche qui fait peser la plus grande partie " +"de la charge sur le rédacteur du module d'exportation, ce qui est approprié " +"pour les modules de bibliothèque couramment utilisés. Il stocke tous les " +"pointeurs de l'API C (un seul dans l'exemple !) dans un tableau de " +"pointeurs :c:type:`void` qui devient la valeur d'une Capsule. Le fichier " +"d'en-tête correspondant au module fournit une macro qui se charge d'importer " +"le module et de récupérer ses pointeurs d'API C. Les modules clients n'ont " +"qu'à appeler cette macro avant d'accéder à l'API C." -#: ../Doc/extending/extending.rst:1191 +#: ../Doc/extending/extending.rst:1197 msgid "" "The exporting module is a modification of the :mod:`spam` module from " "section :ref:`extending-simpleexample`. The function :func:`spam.system` " @@ -1396,60 +1633,82 @@ msgid "" "complicated in reality (such as adding \"spam\" to every command). This " "function :c:func:`PySpam_System` is also exported to other extension modules." msgstr "" +"Le module d'exportation est une modification du module :mod:`spam` de la " +"section :ref:`extending-simpleexample`. La fonction :func:`spam.system` " +"n'appelle pas directement la fonction de la bibliothèque C :c:func:`system`, " +"mais une fonction :c:func:`PySpam_System`, qui ferait bien sûr quelque chose " +"de plus compliqué en réalité (comme ajouter du *spam* à chaque commande). " +"Cette fonction :c:func:`PySpam_System` est également exportée vers d'autres " +"modules d'extension." -#: ../Doc/extending/extending.rst:1198 +#: ../Doc/extending/extending.rst:1204 msgid "" "The function :c:func:`PySpam_System` is a plain C function, declared " "``static`` like everything else::" msgstr "" -#: ../Doc/extending/extending.rst:1207 +#: ../Doc/extending/extending.rst:1213 msgid "The function :c:func:`spam_system` is modified in a trivial way::" -msgstr "" +msgstr "La fonction :c:func:`spam_system` est modifiée de manière simple ::" -#: ../Doc/extending/extending.rst:1221 +#: ../Doc/extending/extending.rst:1227 msgid "In the beginning of the module, right after the line ::" -msgstr "" +msgstr "Au début du module, immédiatement après la ligne ::" -#: ../Doc/extending/extending.rst:1225 +#: ../Doc/extending/extending.rst:1231 msgid "two more lines must be added::" -msgstr "" +msgstr "on doit ajouter deux lignes supplémentaires ::" -#: ../Doc/extending/extending.rst:1230 +#: ../Doc/extending/extending.rst:1236 msgid "" "The ``#define`` is used to tell the header file that it is being included in " "the exporting module, not a client module. Finally, the module's " "initialization function must take care of initializing the C API pointer " "array::" msgstr "" +"L'indicateur ``#define`` est utilisé pour indiquer au fichier d'en-tête " +"qu'il est inclus dans le module d'exportation, et non dans un module client. " +"Enfin, la fonction d'initialisation du module doit prendre en charge " +"l'initialisation du tableau de pointeurs de l'API C ::" -#: ../Doc/extending/extending.rst:1256 +#: ../Doc/extending/extending.rst:1262 msgid "" "Note that ``PySpam_API`` is declared ``static``; otherwise the pointer array " "would disappear when :func:`PyInit_spam` terminates!" msgstr "" +"Notez que ``PySpam_API`` est déclaré ``static`` ; sinon le tableau de " +"pointeurs disparaîtrait lorsque :func:`PyInit_spam`` se finit !" -#: ../Doc/extending/extending.rst:1259 +#: ../Doc/extending/extending.rst:1265 msgid "" "The bulk of the work is in the header file :file:`spammodule.h`, which looks " "like this::" msgstr "" +"L'essentiel du travail se trouve dans le fichier d'en-tête :file:`spammodule." +"h`, qui ressemble à ceci ::" -#: ../Doc/extending/extending.rst:1310 +#: ../Doc/extending/extending.rst:1316 msgid "" "All that a client module must do in order to have access to the function :c:" "func:`PySpam_System` is to call the function (or rather macro) :c:func:" "`import_spam` in its initialization function::" msgstr "" +"Tout ce qu'un module client doit faire pour avoir accès à la fonction :c:" +"func:`PySpam_System` est d'appeler la fonction (ou plutôt la macro) :c:func:" +"`import_spam` dans sa fonction d'initialisation ::" -#: ../Doc/extending/extending.rst:1328 +#: ../Doc/extending/extending.rst:1334 msgid "" "The main disadvantage of this approach is that the file :file:`spammodule.h` " "is rather complicated. However, the basic structure is the same for each " "function that is exported, so it has to be learned only once." msgstr "" +"Le principal inconvénient de cette approche est que le fichier :file:" +"`spammodule.h` est assez compliqué. Cependant, la structure de base est la " +"même pour chaque fonction exportée, ce qui fait qu'elle ne doit être apprise " +"qu'une seule fois." -#: ../Doc/extending/extending.rst:1332 +#: ../Doc/extending/extending.rst:1338 msgid "" "Finally it should be mentioned that Capsules offer additional functionality, " "which is especially useful for memory allocation and deallocation of the " @@ -1458,32 +1717,49 @@ msgid "" "Capsules (files :file:`Include/pycapsule.h` and :file:`Objects/pycapsule.c` " "in the Python source code distribution)." msgstr "" +"Enfin, il convient de mentionner que Capsules offrent des fonctionnalités " +"supplémentaires, qui sont particulièrement utiles pour l'allocation de la " +"mémoire et la dés-allocation du pointeur stocké dans un objet Capsule. Les " +"détails sont décrits dans le manuel de référence de l'API Python/C dans la " +"section :ref:`capsules` et dans l'implémentation des Capsules (fichiers :" +"file:`Include/pycapsule.h` et :file:`Objects/pycapsule.c` dans la " +"distribution du code source Python)." -#: ../Doc/extending/extending.rst:1340 +#: ../Doc/extending/extending.rst:1346 msgid "Footnotes" msgstr "Notes" -#: ../Doc/extending/extending.rst:1341 +#: ../Doc/extending/extending.rst:1347 msgid "" "An interface for this function already exists in the standard module :mod:" "`os` --- it was chosen as a simple and straightforward example." msgstr "" +"Une interface pour cette fonction existe déjà dans le module standard :mod:" +"`os`, elle a été choisie comme un exemple simple et direct." -#: ../Doc/extending/extending.rst:1344 +#: ../Doc/extending/extending.rst:1350 msgid "" "The metaphor of \"borrowing\" a reference is not completely correct: the " "owner still has a copy of the reference." msgstr "" +"L'expression « emprunter une référence » n'est pas tout à fait correcte, car " +"le propriétaire a toujours une copie de la référence." -#: ../Doc/extending/extending.rst:1347 +#: ../Doc/extending/extending.rst:1353 msgid "" "Checking that the reference count is at least 1 **does not work** --- the " "reference count itself could be in freed memory and may thus be reused for " "another object!" msgstr "" +"Vérifier que le comptage de référence est d'au moins 1 **ne fonctionne " +"pas**, le compte de référence lui-même pourrait être en mémoire libérée et " +"peut donc être réutilisé pour un autre objet !" -#: ../Doc/extending/extending.rst:1351 +#: ../Doc/extending/extending.rst:1357 msgid "" "These guarantees don't hold when you use the \"old\" style calling " "convention --- this is still found in much existing code." msgstr "" +"Ces garanties ne sont pas valables lorsqu'on emploie les conventions de " +"nommage anciennes, qu'on retrouve encore assez souvent dans beaucoup de code " +"existant." diff --git a/extending/index.po b/extending/index.po index d62319343..a7c56744c 100644 --- a/extending/index.po +++ b/extending/index.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-05-27 19:40+0200\n" -"PO-Revision-Date: 2017-11-22 10:45+0100\n" +"POT-Creation-Date: 2018-04-29 00:24+0200\n" +"PO-Revision-Date: 2018-05-08 12:24+0200\n" "Last-Translator: Julien Palard \n" "Language-Team: \n" "Language: fr\n" @@ -71,16 +71,19 @@ msgstr "Les outils tiers recommandés" #: ../Doc/extending/index.rst:28 msgid "" "This guide only covers the basic tools for creating extensions provided as " -"part of this version of CPython. Third party tools like Cython, ``cffi``, " -"SWIG and Numba offer both simpler and more sophisticated approaches to " -"creating C and C++ extensions for Python." +"part of this version of CPython. Third party tools like `Cython `_, `cffi `_, `SWIG `_ and `Numba `_ offer both simpler and " +"more sophisticated approaches to creating C and C++ extensions for Python." msgstr "" "Ce guide ne couvre que les outils basiques permettant de créer des " "extensions fournies dans cette version de CPython. Les outils tiers tels que " -"Cython, ``cffi``, SWIG et Numba offrent des approches plus simples et plus " -"élaborées pour créer des extensions C et C++ pour Python." +"`Cython `_, `cffi `_, `SWIG " +"`_ et `Numba `_ offrent des " +"approches plus simples et plus élaborées pour créer des extensions C et C++ " +"pour Python." -#: ../Doc/extending/index.rst:38 +#: ../Doc/extending/index.rst:40 msgid "" "`Python Packaging User Guide: Binary Extensions `_" @@ -88,7 +91,7 @@ msgstr "" "`Guide d'utilisation de l'empaquetage Python : Extensions binaires `_" -#: ../Doc/extending/index.rst:36 +#: ../Doc/extending/index.rst:38 msgid "" "The Python Packaging User Guide not only covers several available tools that " "simplify the creation of binary extensions, but also discusses the various " @@ -99,11 +102,11 @@ msgstr "" "binaires, mais aborde aussi les différentes raisons pour lesquelles créer un " "module d'extension peut être souhaitable d'entrée." -#: ../Doc/extending/index.rst:43 +#: ../Doc/extending/index.rst:45 msgid "Creating extensions without third party tools" msgstr "Création d'extensions sans outils tiers" -#: ../Doc/extending/index.rst:45 +#: ../Doc/extending/index.rst:47 msgid "" "This section of the guide covers creating C and C++ extensions without " "assistance from third party tools. It is intended primarily for creators of " @@ -115,11 +118,11 @@ msgstr "" "ces outils, plus que d'être une méthode recommandée pour créer votre propre " "extension C." -#: ../Doc/extending/index.rst:60 +#: ../Doc/extending/index.rst:63 msgid "Embedding the CPython runtime in a larger application" msgstr "Intégrer l'interpréteur CPython dans une plus grande application" -#: ../Doc/extending/index.rst:62 +#: ../Doc/extending/index.rst:65 msgid "" "Sometimes, rather than creating an extension that runs inside the Python " "interpreter as the main application, it is desirable to instead embed the " diff --git a/extending/newtypes.po b/extending/newtypes.po index 8918bfb05..5048e90a4 100644 --- a/extending/newtypes.po +++ b/extending/newtypes.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-01 07:43+0100\n" +"POT-Creation-Date: 2018-04-29 00:24+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,846 +17,77 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../Doc/extending/newtypes.rst:8 -msgid "Defining New Types" -msgstr "" - -#: ../Doc/extending/newtypes.rst:15 -msgid "" -"As mentioned in the last chapter, Python allows the writer of an extension " -"module to define new types that can be manipulated from Python code, much " -"like strings and lists in core Python." -msgstr "" - -#: ../Doc/extending/newtypes.rst:19 -msgid "" -"This is not hard; the code for all extension types follows a pattern, but " -"there are some details that you need to understand before you can get " -"started." -msgstr "" - -#: ../Doc/extending/newtypes.rst:26 -msgid "The Basics" -msgstr "" - -#: ../Doc/extending/newtypes.rst:28 -msgid "" -"The Python runtime sees all Python objects as variables of type :c:type:" -"`PyObject\\*`, which serves as a \"base type\" for all Python objects. :c:" -"type:`PyObject` itself only contains the refcount and a pointer to the " -"object's \"type object\". This is where the action is; the type object " -"determines which (C) functions get called when, for instance, an attribute " -"gets looked up on an object or it is multiplied by another object. These C " -"functions are called \"type methods\"." -msgstr "" - -#: ../Doc/extending/newtypes.rst:36 -msgid "" -"So, if you want to define a new object type, you need to create a new type " -"object." -msgstr "" - -#: ../Doc/extending/newtypes.rst:39 -msgid "" -"This sort of thing can only be explained by example, so here's a minimal, " -"but complete, module that defines a new type:" -msgstr "" - -#: ../Doc/extending/newtypes.rst:45 -msgid "" -"Now that's quite a bit to take in at once, but hopefully bits will seem " -"familiar from the last chapter." -msgstr "" - -#: ../Doc/extending/newtypes.rst:48 -msgid "The first bit that will be new is::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:54 -msgid "" -"This is what a Noddy object will contain---in this case, nothing more than " -"what every Python object contains---a field called ``ob_base`` of type :c:" -"type:`PyObject`. :c:type:`PyObject` in turn, contains an ``ob_refcnt`` " -"field and a pointer to a type object. These can be accessed using the " -"macros :c:macro:`Py_REFCNT` and :c:macro:`Py_TYPE` respectively. These are " -"the fields the :c:macro:`PyObject_HEAD` macro brings in. The reason for the " -"macro is to standardize the layout and to enable special debugging fields in " -"debug builds." -msgstr "" - -#: ../Doc/extending/newtypes.rst:62 -msgid "" -"Note that there is no semicolon after the :c:macro:`PyObject_HEAD` macro; " -"one is included in the macro definition. Be wary of adding one by accident; " -"it's easy to do from habit, and your compiler might not complain, but " -"someone else's probably will! (On Windows, MSVC is known to call this an " -"error and refuse to compile the code.)" -msgstr "" - -#: ../Doc/extending/newtypes.rst:68 -msgid "" -"For contrast, let's take a look at the corresponding definition for standard " -"Python floats::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:76 -msgid "Moving on, we come to the crunch --- the type object. ::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:102 -msgid "" -"Now if you go and look up the definition of :c:type:`PyTypeObject` in :file:" -"`object.h` you'll see that it has many more fields that the definition " -"above. The remaining fields will be filled with zeros by the C compiler, " -"and it's common practice to not specify them explicitly unless you need them." -msgstr "" - -#: ../Doc/extending/newtypes.rst:107 -msgid "" -"This is so important that we're going to pick the top of it apart still " -"further::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:112 -msgid "This line is a bit of a wart; what we'd like to write is::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:116 -msgid "" -"as the type of a type object is \"type\", but this isn't strictly conforming " -"C and some compilers complain. Fortunately, this member will be filled in " -"for us by :c:func:`PyType_Ready`. ::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:122 -msgid "" -"The name of our type. This will appear in the default textual " -"representation of our objects and in some error messages, for example::" -msgstr "" +#: ../Doc/extending/newtypes.rst:5 +msgid "Defining Extension Types: Assorted Topics" +msgstr "Définir les types d'extension : divers sujets" -#: ../Doc/extending/newtypes.rst:130 -msgid "" -"Note that the name is a dotted name that includes both the module name and " -"the name of the type within the module. The module in this case is :mod:" -"`noddy` and the type is :class:`Noddy`, so we set the type name to :class:" -"`noddy.Noddy`. One side effect of using an undotted name is that the pydoc " -"documentation tool will not list the new type in the module documentation. ::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:138 -msgid "" -"This is so that Python knows how much memory to allocate when you call :c:" -"func:`PyObject_New`." -msgstr "" - -#: ../Doc/extending/newtypes.rst:143 -msgid "" -"If you want your type to be subclassable from Python, and your type has the " -"same :c:member:`~PyTypeObject.tp_basicsize` as its base type, you may have " -"problems with multiple inheritance. A Python subclass of your type will " -"have to list your type first in its :attr:`~class.__bases__`, or else it " -"will not be able to call your type's :meth:`__new__` method without getting " -"an error. You can avoid this problem by ensuring that your type has a " -"larger value for :c:member:`~PyTypeObject.tp_basicsize` than its base type " -"does. Most of the time, this will be true anyway, because either your base " -"type will be :class:`object`, or else you will be adding data members to " -"your base type, and therefore increasing its size." -msgstr "" - -#: ../Doc/extending/newtypes.rst:157 -msgid "" -"This has to do with variable length objects like lists and strings. Ignore " -"this for now." -msgstr "" - -#: ../Doc/extending/newtypes.rst:160 -msgid "" -"Skipping a number of type methods that we don't provide, we set the class " -"flags to :const:`Py_TPFLAGS_DEFAULT`. ::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:165 -msgid "" -"All types should include this constant in their flags. It enables all of " -"the members defined until at least Python 3.3. If you need further members, " -"you will need to OR the corresponding flags." -msgstr "" - -#: ../Doc/extending/newtypes.rst:169 -msgid "" -"We provide a doc string for the type in :c:member:`~PyTypeObject.tp_doc`. ::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:173 -msgid "" -"Now we get into the type methods, the things that make your objects " -"different from the others. We aren't going to implement any of these in " -"this version of the module. We'll expand this example later to have more " -"interesting behavior." -msgstr "" - -#: ../Doc/extending/newtypes.rst:177 -msgid "" -"For now, all we want to be able to do is to create new :class:`Noddy` " -"objects. To enable object creation, we have to provide a :c:member:" -"`~PyTypeObject.tp_new` implementation. In this case, we can just use the " -"default implementation provided by the API function :c:func:" -"`PyType_GenericNew`. We'd like to just assign this to the :c:member:" -"`~PyTypeObject.tp_new` slot, but we can't, for portability sake, On some " -"platforms or compilers, we can't statically initialize a structure member " -"with a function defined in another C module, so, instead, we'll assign the :" -"c:member:`~PyTypeObject.tp_new` slot in the module initialization function " -"just before calling :c:func:`PyType_Ready`::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:191 -msgid "" -"All the other type methods are *NULL*, so we'll go over them later --- " -"that's for a later section!" -msgstr "" - -#: ../Doc/extending/newtypes.rst:194 -msgid "" -"Everything else in the file should be familiar, except for some code in :c:" -"func:`PyInit_noddy`::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:200 -msgid "" -"This initializes the :class:`Noddy` type, filing in a number of members, " -"including :attr:`ob_type` that we initially set to *NULL*. ::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:205 -msgid "" -"This adds the type to the module dictionary. This allows us to create :" -"class:`Noddy` instances by calling the :class:`Noddy` class::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:211 -msgid "" -"That's it! All that remains is to build it; put the above code in a file " -"called :file:`noddy.c` and ::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:218 -msgid "in a file called :file:`setup.py`; then typing" -msgstr "" - -#: ../Doc/extending/newtypes.rst:224 -msgid "" -"at a shell should produce a file :file:`noddy.so` in a subdirectory; move to " -"that directory and fire up Python --- you should be able to ``import noddy`` " -"and play around with Noddy objects." -msgstr "" - -#: ../Doc/extending/newtypes.rst:228 -msgid "That wasn't so hard, was it?" -msgstr "" - -#: ../Doc/extending/newtypes.rst:230 -msgid "" -"Of course, the current Noddy type is pretty uninteresting. It has no data " -"and doesn't do anything. It can't even be subclassed." -msgstr "" - -#: ../Doc/extending/newtypes.rst:235 -msgid "Adding data and methods to the Basic example" -msgstr "" - -#: ../Doc/extending/newtypes.rst:237 -msgid "" -"Let's extend the basic example to add some data and methods. Let's also " -"make the type usable as a base class. We'll create a new module, :mod:" -"`noddy2` that adds these capabilities:" -msgstr "" - -#: ../Doc/extending/newtypes.rst:244 -msgid "This version of the module has a number of changes." -msgstr "" - -#: ../Doc/extending/newtypes.rst:246 -msgid "We've added an extra include::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:250 -msgid "" -"This include provides declarations that we use to handle attributes, as " -"described a bit later." -msgstr "" - -#: ../Doc/extending/newtypes.rst:253 -msgid "" -"The name of the :class:`Noddy` object structure has been shortened to :class:" -"`Noddy`. The type object name has been shortened to :class:`NoddyType`." -msgstr "" - -#: ../Doc/extending/newtypes.rst:256 -msgid "" -"The :class:`Noddy` type now has three data attributes, *first*, *last*, and " -"*number*. The *first* and *last* variables are Python strings containing " -"first and last names. The *number* attribute is an integer." -msgstr "" - -#: ../Doc/extending/newtypes.rst:260 -msgid "The object structure is updated accordingly::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:269 -msgid "" -"Because we now have data to manage, we have to be more careful about object " -"allocation and deallocation. At a minimum, we need a deallocation method::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:280 -msgid "which is assigned to the :c:member:`~PyTypeObject.tp_dealloc` member::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:284 -msgid "" -"This method decrements the reference counts of the two Python attributes. We " -"use :c:func:`Py_XDECREF` here because the :attr:`first` and :attr:`last` " -"members could be *NULL*. It then calls the :c:member:`~PyTypeObject." -"tp_free` member of the object's type to free the object's memory. Note that " -"the object's type might not be :class:`NoddyType`, because the object may be " -"an instance of a subclass." -msgstr "" - -#: ../Doc/extending/newtypes.rst:290 -msgid "" -"We want to make sure that the first and last names are initialized to empty " -"strings, so we provide a new method::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:318 -msgid "and install it in the :c:member:`~PyTypeObject.tp_new` member::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:322 -msgid "" -"The new member is responsible for creating (as opposed to initializing) " -"objects of the type. It is exposed in Python as the :meth:`__new__` " -"method. See the paper titled \"Unifying types and classes in Python\" for a " -"detailed discussion of the :meth:`__new__` method. One reason to implement " -"a new method is to assure the initial values of instance variables. In this " -"case, we use the new method to make sure that the initial values of the " -"members :attr:`first` and :attr:`last` are not *NULL*. If we didn't care " -"whether the initial values were *NULL*, we could have used :c:func:" -"`PyType_GenericNew` as our new method, as we did before. :c:func:" -"`PyType_GenericNew` initializes all of the instance variable members to " -"*NULL*." -msgstr "" - -#: ../Doc/extending/newtypes.rst:333 -msgid "" -"The new method is a static method that is passed the type being instantiated " -"and any arguments passed when the type was called, and that returns the new " -"object created. New methods always accept positional and keyword arguments, " -"but they often ignore the arguments, leaving the argument handling to " -"initializer methods. Note that if the type supports subclassing, the type " -"passed may not be the type being defined. The new method calls the :c:" -"member:`~PyTypeObject.tp_alloc` slot to allocate memory. We don't fill the :" -"c:member:`~PyTypeObject.tp_alloc` slot ourselves. Rather :c:func:" -"`PyType_Ready` fills it for us by inheriting it from our base class, which " -"is :class:`object` by default. Most types use the default allocation." -msgstr "" - -#: ../Doc/extending/newtypes.rst:345 -msgid "" -"If you are creating a co-operative :c:member:`~PyTypeObject.tp_new` (one " -"that calls a base type's :c:member:`~PyTypeObject.tp_new` or :meth:" -"`__new__`), you must *not* try to determine what method to call using method " -"resolution order at runtime. Always statically determine what type you are " -"going to call, and call its :c:member:`~PyTypeObject.tp_new` directly, or " -"via ``type->tp_base->tp_new``. If you do not do this, Python subclasses of " -"your type that also inherit from other Python-defined classes may not work " -"correctly. (Specifically, you may not be able to create instances of such " -"subclasses without getting a :exc:`TypeError`.)" -msgstr "" - -#: ../Doc/extending/newtypes.rst:354 -msgid "We provide an initialization function::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:385 -msgid "by filling the :c:member:`~PyTypeObject.tp_init` slot. ::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:389 -msgid "" -"The :c:member:`~PyTypeObject.tp_init` slot is exposed in Python as the :meth:" -"`__init__` method. It is used to initialize an object after it's created. " -"Unlike the new method, we can't guarantee that the initializer is called. " -"The initializer isn't called when unpickling objects and it can be " -"overridden. Our initializer accepts arguments to provide initial values for " -"our instance. Initializers always accept positional and keyword arguments. " -"Initializers should return either 0 on success or -1 on error." -msgstr "" - -#: ../Doc/extending/newtypes.rst:397 -msgid "" -"Initializers can be called multiple times. Anyone can call the :meth:" -"`__init__` method on our objects. For this reason, we have to be extra " -"careful when assigning the new values. We might be tempted, for example to " -"assign the :attr:`first` member like this::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:408 -msgid "" -"But this would be risky. Our type doesn't restrict the type of the :attr:" -"`first` member, so it could be any kind of object. It could have a " -"destructor that causes code to be executed that tries to access the :attr:" -"`first` member. To be paranoid and protect ourselves against this " -"possibility, we almost always reassign members before decrementing their " -"reference counts. When don't we have to do this?" -msgstr "" - -#: ../Doc/extending/newtypes.rst:415 -msgid "when we absolutely know that the reference count is greater than 1" -msgstr "" - -#: ../Doc/extending/newtypes.rst:417 -msgid "" -"when we know that deallocation of the object [#]_ will not cause any calls " -"back into our type's code" -msgstr "" - -#: ../Doc/extending/newtypes.rst:420 -msgid "" -"when decrementing a reference count in a :c:member:`~PyTypeObject." -"tp_dealloc` handler when garbage-collections is not supported [#]_" -msgstr "" - -#: ../Doc/extending/newtypes.rst:423 -msgid "" -"We want to expose our instance variables as attributes. There are a number " -"of ways to do that. The simplest way is to define member definitions::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:436 -msgid "" -"and put the definitions in the :c:member:`~PyTypeObject.tp_members` slot::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:440 -msgid "" -"Each member definition has a member name, type, offset, access flags and " -"documentation string. See the :ref:`Generic-Attribute-Management` section " -"below for details." -msgstr "" - -#: ../Doc/extending/newtypes.rst:444 -msgid "" -"A disadvantage of this approach is that it doesn't provide a way to restrict " -"the types of objects that can be assigned to the Python attributes. We " -"expect the first and last names to be strings, but any Python objects can be " -"assigned. Further, the attributes can be deleted, setting the C pointers to " -"*NULL*. Even though we can make sure the members are initialized to non-" -"*NULL* values, the members can be set to *NULL* if the attributes are " -"deleted." -msgstr "" - -#: ../Doc/extending/newtypes.rst:451 -msgid "" -"We define a single method, :meth:`name`, that outputs the objects name as " -"the concatenation of the first and last names. ::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:470 -msgid "" -"The method is implemented as a C function that takes a :class:`Noddy` (or :" -"class:`Noddy` subclass) instance as the first argument. Methods always take " -"an instance as the first argument. Methods often take positional and keyword " -"arguments as well, but in this case we don't take any and don't need to " -"accept a positional argument tuple or keyword argument dictionary. This " -"method is equivalent to the Python method::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:480 -msgid "" -"Note that we have to check for the possibility that our :attr:`first` and :" -"attr:`last` members are *NULL*. This is because they can be deleted, in " -"which case they are set to *NULL*. It would be better to prevent deletion " -"of these attributes and to restrict the attribute values to be strings. " -"We'll see how to do that in the next section." -msgstr "" - -#: ../Doc/extending/newtypes.rst:486 -msgid "" -"Now that we've defined the method, we need to create an array of method " -"definitions::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:496 -msgid "and assign them to the :c:member:`~PyTypeObject.tp_methods` slot::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:500 -msgid "" -"Note that we used the :const:`METH_NOARGS` flag to indicate that the method " -"is passed no arguments." -msgstr "" - -#: ../Doc/extending/newtypes.rst:503 -msgid "" -"Finally, we'll make our type usable as a base class. We've written our " -"methods carefully so far so that they don't make any assumptions about the " -"type of the object being created or used, so all we need to do is to add " -"the :const:`Py_TPFLAGS_BASETYPE` to our class flag definition::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:510 -msgid "" -"We rename :c:func:`PyInit_noddy` to :c:func:`PyInit_noddy2` and update the " -"module name in the :c:type:`PyModuleDef` struct." -msgstr "" - -#: ../Doc/extending/newtypes.rst:513 -msgid "Finally, we update our :file:`setup.py` file to build the new module::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:524 -msgid "Providing finer control over data attributes" -msgstr "" - -#: ../Doc/extending/newtypes.rst:526 -msgid "" -"In this section, we'll provide finer control over how the :attr:`first` and :" -"attr:`last` attributes are set in the :class:`Noddy` example. In the " -"previous version of our module, the instance variables :attr:`first` and :" -"attr:`last` could be set to non-string values or even deleted. We want to " -"make sure that these attributes always contain strings." -msgstr "" - -#: ../Doc/extending/newtypes.rst:535 -msgid "" -"To provide greater control, over the :attr:`first` and :attr:`last` " -"attributes, we'll use custom getter and setter functions. Here are the " -"functions for getting and setting the :attr:`first` attribute::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:566 -msgid "" -"The getter function is passed a :class:`Noddy` object and a \"closure\", " -"which is void pointer. In this case, the closure is ignored. (The closure " -"supports an advanced usage in which definition data is passed to the getter " -"and setter. This could, for example, be used to allow a single set of getter " -"and setter functions that decide the attribute to get or set based on data " -"in the closure.)" -msgstr "" - -#: ../Doc/extending/newtypes.rst:572 -msgid "" -"The setter function is passed the :class:`Noddy` object, the new value, and " -"the closure. The new value may be *NULL*, in which case the attribute is " -"being deleted. In our setter, we raise an error if the attribute is deleted " -"or if the attribute value is not a string." -msgstr "" - -#: ../Doc/extending/newtypes.rst:577 -msgid "We create an array of :c:type:`PyGetSetDef` structures::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:591 -msgid "and register it in the :c:member:`~PyTypeObject.tp_getset` slot::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:595 -msgid "to register our attribute getters and setters." -msgstr "" - -#: ../Doc/extending/newtypes.rst:597 -msgid "" -"The last item in a :c:type:`PyGetSetDef` structure is the closure mentioned " -"above. In this case, we aren't using the closure, so we just pass *NULL*." -msgstr "" - -#: ../Doc/extending/newtypes.rst:600 -msgid "We also remove the member definitions for these attributes::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:608 -msgid "" -"We also need to update the :c:member:`~PyTypeObject.tp_init` handler to only " -"allow strings [#]_ to be passed::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:640 -msgid "" -"With these changes, we can assure that the :attr:`first` and :attr:`last` " -"members are never *NULL* so we can remove checks for *NULL* values in almost " -"all cases. This means that most of the :c:func:`Py_XDECREF` calls can be " -"converted to :c:func:`Py_DECREF` calls. The only place we can't change these " -"calls is in the deallocator, where there is the possibility that the " -"initialization of these members failed in the constructor." -msgstr "" - -#: ../Doc/extending/newtypes.rst:647 -msgid "" -"We also rename the module initialization function and module name in the " -"initialization function, as we did before, and we add an extra definition to " -"the :file:`setup.py` file." -msgstr "" - -#: ../Doc/extending/newtypes.rst:653 -msgid "Supporting cyclic garbage collection" -msgstr "" - -#: ../Doc/extending/newtypes.rst:655 -msgid "" -"Python has a cyclic-garbage collector that can identify unneeded objects " -"even when their reference counts are not zero. This can happen when objects " -"are involved in cycles. For example, consider::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:663 -msgid "" -"In this example, we create a list that contains itself. When we delete it, " -"it still has a reference from itself. Its reference count doesn't drop to " -"zero. Fortunately, Python's cyclic-garbage collector will eventually figure " -"out that the list is garbage and free it." -msgstr "" - -#: ../Doc/extending/newtypes.rst:668 -msgid "" -"In the second version of the :class:`Noddy` example, we allowed any kind of " -"object to be stored in the :attr:`first` or :attr:`last` attributes [#]_. " -"This means that :class:`Noddy` objects can participate in cycles::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:677 -msgid "" -"This is pretty silly, but it gives us an excuse to add support for the " -"cyclic-garbage collector to the :class:`Noddy` example. To support cyclic " -"garbage collection, types need to fill two slots and set a class flag that " -"enables these slots:" -msgstr "" - -#: ../Doc/extending/newtypes.rst:685 -msgid "" -"The traversal method provides access to subobjects that could participate in " -"cycles::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:707 -msgid "" -"For each subobject that can participate in cycles, we need to call the :c:" -"func:`visit` function, which is passed to the traversal method. The :c:func:" -"`visit` function takes as arguments the subobject and the extra argument " -"*arg* passed to the traversal method. It returns an integer value that must " -"be returned if it is non-zero." -msgstr "" - -#: ../Doc/extending/newtypes.rst:713 -msgid "" -"Python provides a :c:func:`Py_VISIT` macro that automates calling visit " -"functions. With :c:func:`Py_VISIT`, :c:func:`Noddy_traverse` can be " -"simplified::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:726 -msgid "" -"Note that the :c:member:`~PyTypeObject.tp_traverse` implementation must name " -"its arguments exactly *visit* and *arg* in order to use :c:func:`Py_VISIT`. " -"This is to encourage uniformity across these boring implementations." -msgstr "" - -#: ../Doc/extending/newtypes.rst:730 -msgid "" -"We also need to provide a method for clearing any subobjects that can " -"participate in cycles." -msgstr "" - -#: ../Doc/extending/newtypes.rst:751 -msgid "" -"Notice the use of a temporary variable in :c:func:`Noddy_clear`. We use the " -"temporary variable so that we can set each member to *NULL* before " -"decrementing its reference count. We do this because, as was discussed " -"earlier, if the reference count drops to zero, we might cause code to run " -"that calls back into the object. In addition, because we now support " -"garbage collection, we also have to worry about code being run that triggers " -"garbage collection. If garbage collection is run, our :c:member:" -"`~PyTypeObject.tp_traverse` handler could get called. We can't take a chance " -"of having :c:func:`Noddy_traverse` called when a member's reference count " -"has dropped to zero and its value hasn't been set to *NULL*." -msgstr "" - -#: ../Doc/extending/newtypes.rst:761 -msgid "" -"Python provides a :c:func:`Py_CLEAR` that automates the careful decrementing " -"of reference counts. With :c:func:`Py_CLEAR`, the :c:func:`Noddy_clear` " -"function can be simplified::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:773 -msgid "" -"Note that :c:func:`Noddy_dealloc` may call arbitrary functions through " -"``__del__`` method or weakref callback. It means circular GC can be " -"triggered inside the function. Since GC assumes reference count is not " -"zero, we need to untrack the object from GC by calling :c:func:" -"`PyObject_GC_UnTrack` before clearing members. Here is reimplemented " -"deallocator which uses :c:func:`PyObject_GC_UnTrack` and :c:func:" -"`Noddy_clear`." -msgstr "" - -#: ../Doc/extending/newtypes.rst:790 -msgid "" -"Finally, we add the :const:`Py_TPFLAGS_HAVE_GC` flag to the class flags::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:794 -msgid "" -"That's pretty much it. If we had written custom :c:member:`~PyTypeObject." -"tp_alloc` or :c:member:`~PyTypeObject.tp_free` slots, we'd need to modify " -"them for cyclic-garbage collection. Most extensions will use the versions " -"automatically provided." -msgstr "" - -#: ../Doc/extending/newtypes.rst:800 -msgid "Subclassing other types" -msgstr "" - -#: ../Doc/extending/newtypes.rst:802 -msgid "" -"It is possible to create new extension types that are derived from existing " -"types. It is easiest to inherit from the built in types, since an extension " -"can easily use the :class:`PyTypeObject` it needs. It can be difficult to " -"share these :class:`PyTypeObject` structures between extension modules." -msgstr "" - -#: ../Doc/extending/newtypes.rst:807 -msgid "" -"In this example we will create a :class:`Shoddy` type that inherits from the " -"built-in :class:`list` type. The new type will be completely compatible with " -"regular lists, but will have an additional :meth:`increment` method that " -"increases an internal counter. ::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:825 -msgid "" -"As you can see, the source code closely resembles the :class:`Noddy` " -"examples in previous sections. We will break down the main differences " -"between them. ::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:833 -msgid "" -"The primary difference for derived type objects is that the base type's " -"object structure must be the first value. The base type will already include " -"the :c:func:`PyObject_HEAD` at the beginning of its structure." -msgstr "" - -#: ../Doc/extending/newtypes.rst:837 -msgid "" -"When a Python object is a :class:`Shoddy` instance, its *PyObject\\** " -"pointer can be safely cast to both *PyListObject\\** and *Shoddy\\**. ::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:849 -msgid "" -"In the :attr:`__init__` method for our type, we can see how to call through " -"to the :attr:`__init__` method of the base type." -msgstr "" - -#: ../Doc/extending/newtypes.rst:852 -msgid "" -"This pattern is important when writing a type with custom :attr:`new` and :" -"attr:`dealloc` methods. The :attr:`new` method should not actually create " -"the memory for the object with :c:member:`~PyTypeObject.tp_alloc`, that will " -"be handled by the base class when calling its :c:member:`~PyTypeObject." -"tp_new`." -msgstr "" - -#: ../Doc/extending/newtypes.rst:857 -msgid "" -"When filling out the :c:func:`PyTypeObject` for the :class:`Shoddy` type, " -"you see a slot for :c:func:`tp_base`. Due to cross platform compiler issues, " -"you can't fill that field directly with the :c:func:`PyList_Type`; it can be " -"done later in the module's :c:func:`init` function. ::" -msgstr "" - -#: ../Doc/extending/newtypes.rst:880 -msgid "" -"Before calling :c:func:`PyType_Ready`, the type structure must have the :c:" -"member:`~PyTypeObject.tp_base` slot filled in. When we are deriving a new " -"type, it is not necessary to fill out the :c:member:`~PyTypeObject.tp_alloc` " -"slot with :c:func:`PyType_GenericNew` -- the allocate function from the base " -"type will be inherited." -msgstr "" - -#: ../Doc/extending/newtypes.rst:885 -msgid "" -"After that, calling :c:func:`PyType_Ready` and adding the type object to the " -"module is the same as with the basic :class:`Noddy` examples." -msgstr "" - -#: ../Doc/extending/newtypes.rst:892 -msgid "Type Methods" -msgstr "" - -#: ../Doc/extending/newtypes.rst:894 +#: ../Doc/extending/newtypes.rst:9 msgid "" "This section aims to give a quick fly-by on the various type methods you can " "implement and what they do." msgstr "" -#: ../Doc/extending/newtypes.rst:897 +#: ../Doc/extending/newtypes.rst:12 msgid "" "Here is the definition of :c:type:`PyTypeObject`, with some fields only used " "in debug builds omitted:" msgstr "" -#: ../Doc/extending/newtypes.rst:903 +#: ../Doc/extending/newtypes.rst:18 msgid "" -"Now that's a *lot* of methods. Don't worry too much though - if you have a " +"Now that's a *lot* of methods. Don't worry too much though -- if you have a " "type you want to define, the chances are very good that you will only " "implement a handful of these." msgstr "" -#: ../Doc/extending/newtypes.rst:907 +#: ../Doc/extending/newtypes.rst:22 msgid "" "As you probably expect by now, we're going to go over this and give more " "information about the various handlers. We won't go in the order they are " "defined in the structure, because there is a lot of historical baggage that " -"impacts the ordering of the fields; be sure your type initialization keeps " -"the fields in the right order! It's often easiest to find an example that " -"includes all the fields you need (even if they're initialized to ``0``) and " -"then change the values to suit your new type. ::" +"impacts the ordering of the fields. It's often easiest to find an example " +"that includes the fields you need and then change the values to suit your " +"new type. ::" msgstr "" -#: ../Doc/extending/newtypes.rst:917 +#: ../Doc/extending/newtypes.rst:31 msgid "" -"The name of the type - as mentioned in the last section, this will appear in " -"various places, almost entirely for diagnostic purposes. Try to choose " -"something that will be helpful in such a situation! ::" +"The name of the type -- as mentioned in the previous chapter, this will " +"appear in various places, almost entirely for diagnostic purposes. Try to " +"choose something that will be helpful in such a situation! ::" msgstr "" -#: ../Doc/extending/newtypes.rst:923 +#: ../Doc/extending/newtypes.rst:37 msgid "" "These fields tell the runtime how much memory to allocate when new objects " "of this type are created. Python has some built-in support for variable " -"length structures (think: strings, lists) which is where the :c:member:" +"length structures (think: strings, tuples) which is where the :c:member:" "`~PyTypeObject.tp_itemsize` field comes in. This will be dealt with " "later. ::" msgstr "" -#: ../Doc/extending/newtypes.rst:930 +#: ../Doc/extending/newtypes.rst:44 msgid "" "Here you can put a string (or its address) that you want returned when the " "Python script references ``obj.__doc__`` to retrieve the doc string." msgstr "" +"Ici vous pouvez mettre une chaîne (ou son adresse) que vous voulez renvoyer " +"lorsque le script Python référence ``obj.__doc__`` pour récupérer le " +"*docstring*." -#: ../Doc/extending/newtypes.rst:933 +#: ../Doc/extending/newtypes.rst:47 msgid "" -"Now we come to the basic type methods---the ones most extension types will " +"Now we come to the basic type methods -- the ones most extension types will " "implement." msgstr "" +"Nous en arrivons maintenant aux méthodes de type basiques -- celles que la " +"plupart des types d'extension mettront en œuvre." -#: ../Doc/extending/newtypes.rst:938 +#: ../Doc/extending/newtypes.rst:52 msgid "Finalization and De-allocation" -msgstr "" +msgstr "Finalisation et de-allocation" -#: ../Doc/extending/newtypes.rst:950 +#: ../Doc/extending/newtypes.rst:64 msgid "" "This function is called when the reference count of the instance of your " "type is reduced to zero and the Python interpreter wants to reclaim it. If " @@ -865,7 +96,7 @@ msgid "" "of this function::" msgstr "" -#: ../Doc/extending/newtypes.rst:967 +#: ../Doc/extending/newtypes.rst:81 msgid "" "One important requirement of the deallocator function is that it leaves any " "pending exceptions alone. This is important since deallocators are " @@ -880,7 +111,7 @@ msgid "" "c:func:`PyErr_Fetch` and :c:func:`PyErr_Restore` functions::" msgstr "" -#: ../Doc/extending/newtypes.rst:1006 +#: ../Doc/extending/newtypes.rst:120 msgid "" "There are limitations to what you can safely do in a deallocator function. " "First, if your type supports garbage collection (using :c:member:" @@ -893,43 +124,43 @@ msgid "" "tp_dealloc` again, causing a double free and a crash." msgstr "" -#: ../Doc/extending/newtypes.rst:1015 +#: ../Doc/extending/newtypes.rst:129 msgid "" "Starting with Python 3.4, it is recommended not to put any complex " "finalization code in :c:member:`~PyTypeObject.tp_dealloc`, and instead use " "the new :c:member:`~PyTypeObject.tp_finalize` type method." msgstr "" -#: ../Doc/extending/newtypes.rst:1020 +#: ../Doc/extending/newtypes.rst:134 msgid ":pep:`442` explains the new finalization scheme." -msgstr "" +msgstr ":pep:`442` explique le nouveau schéma de finalisation." -#: ../Doc/extending/newtypes.rst:1027 +#: ../Doc/extending/newtypes.rst:141 msgid "Object Presentation" -msgstr "" +msgstr "Présentation de l'objet" -#: ../Doc/extending/newtypes.rst:1029 +#: ../Doc/extending/newtypes.rst:143 msgid "" "In Python, there are two ways to generate a textual representation of an " "object: the :func:`repr` function, and the :func:`str` function. (The :func:" "`print` function just calls :func:`str`.) These handlers are both optional." msgstr "" -#: ../Doc/extending/newtypes.rst:1038 +#: ../Doc/extending/newtypes.rst:152 msgid "" "The :c:member:`~PyTypeObject.tp_repr` handler should return a string object " "containing a representation of the instance for which it is called. Here is " "a simple example::" msgstr "" -#: ../Doc/extending/newtypes.rst:1049 +#: ../Doc/extending/newtypes.rst:163 msgid "" "If no :c:member:`~PyTypeObject.tp_repr` handler is specified, the " "interpreter will supply a representation that uses the type's :c:member:" "`~PyTypeObject.tp_name` and a uniquely-identifying value for the object." msgstr "" -#: ../Doc/extending/newtypes.rst:1053 +#: ../Doc/extending/newtypes.rst:167 msgid "" "The :c:member:`~PyTypeObject.tp_str` handler is to :func:`str` what the :c:" "member:`~PyTypeObject.tp_repr` handler described above is to :func:`repr`; " @@ -940,15 +171,15 @@ msgid "" "the :c:member:`~PyTypeObject.tp_repr` handler is used instead." msgstr "" -#: ../Doc/extending/newtypes.rst:1060 +#: ../Doc/extending/newtypes.rst:174 msgid "Here is a simple example::" -msgstr "" +msgstr "Voici un exemple simple ::" -#: ../Doc/extending/newtypes.rst:1072 +#: ../Doc/extending/newtypes.rst:186 msgid "Attribute Management" -msgstr "" +msgstr "Gestion des attributs" -#: ../Doc/extending/newtypes.rst:1074 +#: ../Doc/extending/newtypes.rst:188 msgid "" "For every object which can support attributes, the corresponding type must " "provide the functions that control how the attributes are resolved. There " @@ -958,7 +189,7 @@ msgid "" "handler is *NULL*." msgstr "" -#: ../Doc/extending/newtypes.rst:1080 +#: ../Doc/extending/newtypes.rst:194 msgid "" "Python supports two pairs of attribute handlers; a type that supports " "attributes only needs to implement the functions for one pair. The " @@ -967,7 +198,7 @@ msgid "" "use whichever pair makes more sense for the implementation's convenience. ::" msgstr "" -#: ../Doc/extending/newtypes.rst:1092 +#: ../Doc/extending/newtypes.rst:206 msgid "" "If accessing attributes of an object is always a simple operation (this will " "be explained shortly), there are generic implementations which can be used " @@ -978,35 +209,37 @@ msgid "" "mechanism that is available." msgstr "" -#: ../Doc/extending/newtypes.rst:1103 +#: ../Doc/extending/newtypes.rst:217 msgid "Generic Attribute Management" -msgstr "" +msgstr "Gestion des attributs génériques" -#: ../Doc/extending/newtypes.rst:1105 +#: ../Doc/extending/newtypes.rst:219 msgid "" "Most extension types only use *simple* attributes. So, what makes the " "attributes simple? There are only a couple of conditions that must be met:" msgstr "" -#: ../Doc/extending/newtypes.rst:1108 +#: ../Doc/extending/newtypes.rst:222 msgid "" "The name of the attributes must be known when :c:func:`PyType_Ready` is " "called." msgstr "" +"Le nom des attributs doivent être déjà connus lorsqu'on lance :c:func:" +"`PyType_Ready`." -#: ../Doc/extending/newtypes.rst:1111 +#: ../Doc/extending/newtypes.rst:225 msgid "" "No special processing is needed to record that an attribute was looked up or " "set, nor do actions need to be taken based on the value." msgstr "" -#: ../Doc/extending/newtypes.rst:1114 +#: ../Doc/extending/newtypes.rst:228 msgid "" "Note that this list does not place any restrictions on the values of the " "attributes, when the values are computed, or how relevant data is stored." msgstr "" -#: ../Doc/extending/newtypes.rst:1117 +#: ../Doc/extending/newtypes.rst:231 msgid "" "When :c:func:`PyType_Ready` is called, it uses three tables referenced by " "the type object to create :term:`descriptor`\\s which are placed in the " @@ -1018,18 +251,19 @@ msgid "" "*NULL* as well, allowing the base type to handle attributes." msgstr "" -#: ../Doc/extending/newtypes.rst:1125 +#: ../Doc/extending/newtypes.rst:239 msgid "The tables are declared as three fields of the type object::" msgstr "" +"Les tables sont déclarées sous la forme de trois champs de type objet ::" -#: ../Doc/extending/newtypes.rst:1131 +#: ../Doc/extending/newtypes.rst:245 msgid "" "If :c:member:`~PyTypeObject.tp_methods` is not *NULL*, it must refer to an " "array of :c:type:`PyMethodDef` structures. Each entry in the table is an " "instance of this structure::" msgstr "" -#: ../Doc/extending/newtypes.rst:1142 +#: ../Doc/extending/newtypes.rst:256 msgid "" "One entry should be defined for each method provided by the type; no entries " "are needed for methods inherited from a base type. One additional entry is " @@ -1037,7 +271,7 @@ msgid "" "attr:`ml_name` field of the sentinel must be *NULL*." msgstr "" -#: ../Doc/extending/newtypes.rst:1147 +#: ../Doc/extending/newtypes.rst:261 msgid "" "The second table is used to define attributes which map directly to data " "stored in the instance. A variety of primitive C types are supported, and " @@ -1045,7 +279,7 @@ msgid "" "defined as::" msgstr "" -#: ../Doc/extending/newtypes.rst:1159 +#: ../Doc/extending/newtypes.rst:273 msgid "" "For each entry in the table, a :term:`descriptor` will be constructed and " "added to the type which will be able to extract a value from the instance " @@ -1056,53 +290,53 @@ msgid "" "accessed." msgstr "" -#: ../Doc/extending/newtypes.rst:1166 +#: ../Doc/extending/newtypes.rst:280 msgid "" "The following flag constants are defined in :file:`structmember.h`; they may " "be combined using bitwise-OR." msgstr "" -#: ../Doc/extending/newtypes.rst:1170 +#: ../Doc/extending/newtypes.rst:284 msgid "Constant" msgstr "Constante" -#: ../Doc/extending/newtypes.rst:1170 +#: ../Doc/extending/newtypes.rst:284 msgid "Meaning" msgstr "Signification" -#: ../Doc/extending/newtypes.rst:1172 +#: ../Doc/extending/newtypes.rst:286 msgid ":const:`READONLY`" -msgstr "" +msgstr ":const:`READONLY`" -#: ../Doc/extending/newtypes.rst:1172 +#: ../Doc/extending/newtypes.rst:286 msgid "Never writable." -msgstr "" +msgstr "Jamais disponible en écriture." -#: ../Doc/extending/newtypes.rst:1174 +#: ../Doc/extending/newtypes.rst:288 msgid ":const:`READ_RESTRICTED`" -msgstr "" +msgstr ":const:`READ_RESTRICTED`" -#: ../Doc/extending/newtypes.rst:1174 +#: ../Doc/extending/newtypes.rst:288 msgid "Not readable in restricted mode." -msgstr "" +msgstr "Non disponible en lecture, dans le mode restreint." -#: ../Doc/extending/newtypes.rst:1176 +#: ../Doc/extending/newtypes.rst:290 msgid ":const:`WRITE_RESTRICTED`" -msgstr "" +msgstr ":const:`WRITE_RESTRICTED`" -#: ../Doc/extending/newtypes.rst:1176 +#: ../Doc/extending/newtypes.rst:290 msgid "Not writable in restricted mode." -msgstr "" +msgstr "Non disponible en écriture dans le mode restreint." -#: ../Doc/extending/newtypes.rst:1178 +#: ../Doc/extending/newtypes.rst:292 msgid ":const:`RESTRICTED`" -msgstr "" +msgstr ":const:`RESTRICTED`" -#: ../Doc/extending/newtypes.rst:1178 +#: ../Doc/extending/newtypes.rst:292 msgid "Not readable or writable in restricted mode." -msgstr "" +msgstr "Non disponible en lecture ou écriture, en mode restreint." -#: ../Doc/extending/newtypes.rst:1187 +#: ../Doc/extending/newtypes.rst:301 msgid "" "An interesting advantage of using the :c:member:`~PyTypeObject.tp_members` " "table to build descriptors that are used at runtime is that any attribute " @@ -1111,18 +345,25 @@ msgid "" "the descriptor from the class object, and get the doc string using its :attr:" "`__doc__` attribute." msgstr "" +"Un avantage intéressant de l'utilisation de la table :c:member:" +"`~PyTypeObject.tp_members` pour construire les descripteurs qui sont " +"utilisés à l'exécution, est que à tout attribut défini de cette façon on " +"peut associer un *docstring*, en écrivant simplement le texte dans la table. " +"Une application peut utiliser l'API d'introspection pour récupérer le " +"descripteur de l'objet de classe, et utiliser son attribut :attr:`__doc__` " +"pour renvoyer le *docstring*." -#: ../Doc/extending/newtypes.rst:1193 +#: ../Doc/extending/newtypes.rst:307 msgid "" "As with the :c:member:`~PyTypeObject.tp_methods` table, a sentinel entry " "with a :attr:`name` value of *NULL* is required." msgstr "" -#: ../Doc/extending/newtypes.rst:1207 +#: ../Doc/extending/newtypes.rst:321 msgid "Type-specific Attribute Management" -msgstr "" +msgstr "Gestion des attributs de type spécifiques" -#: ../Doc/extending/newtypes.rst:1209 +#: ../Doc/extending/newtypes.rst:323 msgid "" "For simplicity, only the :c:type:`char\\*` version will be demonstrated " "here; the type of the name parameter is the only difference between the :c:" @@ -1133,18 +374,18 @@ msgid "" "functionality, you'll understand what needs to be done." msgstr "" -#: ../Doc/extending/newtypes.rst:1217 +#: ../Doc/extending/newtypes.rst:331 msgid "" "The :c:member:`~PyTypeObject.tp_getattr` handler is called when the object " "requires an attribute look-up. It is called in the same situations where " "the :meth:`__getattr__` method of a class would be called." msgstr "" -#: ../Doc/extending/newtypes.rst:1221 +#: ../Doc/extending/newtypes.rst:335 msgid "Here is an example::" -msgstr "Voici un exemple : ::" +msgstr "Voici un exemple ::" -#: ../Doc/extending/newtypes.rst:1237 +#: ../Doc/extending/newtypes.rst:351 msgid "" "The :c:member:`~PyTypeObject.tp_setattr` handler is called when the :meth:" "`__setattr__` or :meth:`__delattr__` method of a class instance would be " @@ -1154,11 +395,11 @@ msgid "" "should be set to *NULL*. ::" msgstr "" -#: ../Doc/extending/newtypes.rst:1251 +#: ../Doc/extending/newtypes.rst:365 msgid "Object Comparison" -msgstr "" +msgstr "Comparaison des objets" -#: ../Doc/extending/newtypes.rst:1257 +#: ../Doc/extending/newtypes.rst:371 msgid "" "The :c:member:`~PyTypeObject.tp_richcompare` handler is called when " "comparisons are needed. It is analogous to the :ref:`rich comparison " @@ -1166,7 +407,7 @@ msgid "" "`PyObject_RichCompare` and :c:func:`PyObject_RichCompareBool`." msgstr "" -#: ../Doc/extending/newtypes.rst:1262 +#: ../Doc/extending/newtypes.rst:376 msgid "" "This function is called with two Python objects and the operator as " "arguments, where the operator is one of ``Py_EQ``, ``Py_NE``, ``Py_LE``, " @@ -1177,23 +418,23 @@ msgid "" "should be tried, or *NULL* if an exception was set." msgstr "" -#: ../Doc/extending/newtypes.rst:1270 +#: ../Doc/extending/newtypes.rst:384 msgid "" "Here is a sample implementation, for a datatype that is considered equal if " "the size of an internal pointer is equal::" msgstr "" -#: ../Doc/extending/newtypes.rst:1300 +#: ../Doc/extending/newtypes.rst:414 msgid "Abstract Protocol Support" -msgstr "" +msgstr "Support pour le protocole abstrait" -#: ../Doc/extending/newtypes.rst:1302 +#: ../Doc/extending/newtypes.rst:416 msgid "" "Python supports a variety of *abstract* 'protocols;' the specific interfaces " "provided to use these interfaces are documented in :ref:`abstract`." msgstr "" -#: ../Doc/extending/newtypes.rst:1306 +#: ../Doc/extending/newtypes.rst:420 msgid "" "A number of these abstract interfaces were defined early in the development " "of the Python implementation. In particular, the number, mapping, and " @@ -1208,7 +449,7 @@ msgid "" "slot, but a slot may still be unfilled.) ::" msgstr "" -#: ../Doc/extending/newtypes.rst:1321 +#: ../Doc/extending/newtypes.rst:435 msgid "" "If you wish your object to be able to act like a number, a sequence, or a " "mapping object, then you place the address of a structure that implements " @@ -1219,13 +460,21 @@ msgid "" "distribution. ::" msgstr "" -#: ../Doc/extending/newtypes.rst:1330 +#: ../Doc/extending/newtypes.rst:444 msgid "" "This function, if you choose to provide it, should return a hash number for " -"an instance of your data type. Here is a moderately pointless example::" +"an instance of your data type. Here is a simple example::" msgstr "" -#: ../Doc/extending/newtypes.rst:1346 +#: ../Doc/extending/newtypes.rst:457 +msgid "" +":c:type:`Py_hash_t` is a signed integer type with a platform-varying width. " +"Returning ``-1`` from :c:member:`~PyTypeObject.tp_hash` indicates an error, " +"which is why you should be careful to avoid returning it when hash " +"computation is successful, as seen above." +msgstr "" + +#: ../Doc/extending/newtypes.rst:466 msgid "" "This function is called when an instance of your data type is \"called\", " "for example, if ``obj1`` is an instance of your data type and the Python " @@ -1233,173 +482,200 @@ msgid "" "handler is invoked." msgstr "" -#: ../Doc/extending/newtypes.rst:1350 +#: ../Doc/extending/newtypes.rst:470 msgid "This function takes three arguments:" -msgstr "" +msgstr "Cette fonction prend trois arguments :" -#: ../Doc/extending/newtypes.rst:1352 +#: ../Doc/extending/newtypes.rst:472 msgid "" -"*arg1* is the instance of the data type which is the subject of the call. If " -"the call is ``obj1('hello')``, then *arg1* is ``obj1``." +"*self* is the instance of the data type which is the subject of the call. If " +"the call is ``obj1('hello')``, then *self* is ``obj1``." msgstr "" -#: ../Doc/extending/newtypes.rst:1355 +#: ../Doc/extending/newtypes.rst:475 msgid "" -"*arg2* is a tuple containing the arguments to the call. You can use :c:func:" +"*args* is a tuple containing the arguments to the call. You can use :c:func:" "`PyArg_ParseTuple` to extract the arguments." msgstr "" -#: ../Doc/extending/newtypes.rst:1358 +#: ../Doc/extending/newtypes.rst:478 msgid "" -"*arg3* is a dictionary of keyword arguments that were passed. If this is non-" +"*kwds* is a dictionary of keyword arguments that were passed. If this is non-" "*NULL* and you support keyword arguments, use :c:func:" "`PyArg_ParseTupleAndKeywords` to extract the arguments. If you do not want " "to support keyword arguments and this is non-*NULL*, raise a :exc:" "`TypeError` with a message saying that keyword arguments are not supported." msgstr "" -#: ../Doc/extending/newtypes.rst:1364 +#: ../Doc/extending/newtypes.rst:484 +msgid "Here is a toy ``tp_call`` implementation::" +msgstr "Ceci est une implémentation ``tp_call`` très simple ::" + +#: ../Doc/extending/newtypes.rst:510 +msgid "" +"These functions provide support for the iterator protocol. Both handlers " +"take exactly one parameter, the instance for which they are being called, " +"and return a new reference. In the case of an error, they should set an " +"exception and return *NULL*. :c:member:`~PyTypeObject.tp_iter` corresponds " +"to the Python :meth:`__iter__` method, while :c:member:`~PyTypeObject." +"tp_iternext` corresponds to the Python :meth:`~iterator.__next__` method." +msgstr "" + +#: ../Doc/extending/newtypes.rst:517 msgid "" -"Here is a desultory example of the implementation of the call function. ::" +"Any :term:`iterable` object must implement the :c:member:`~PyTypeObject." +"tp_iter` handler, which must return an :term:`iterator` object. Here the " +"same guidelines apply as for Python classes:" msgstr "" +"Tout objet :term:`iterable` doit implémenter le gestionnaire :c:member:" +"`~PyTypeObject.tp_iter`, qui doit renvoyer un objet de type :term:" +"`iterator`. Ici, les mêmes directives s'appliquent de la même façon que " +"pour les classes *Python* :" -#: ../Doc/extending/newtypes.rst:1395 +#: ../Doc/extending/newtypes.rst:521 msgid "" -"These functions provide support for the iterator protocol. Any object which " -"wishes to support iteration over its contents (which may be generated during " -"iteration) must implement the ``tp_iter`` handler. Objects which are " -"returned by a ``tp_iter`` handler must implement both the ``tp_iter`` and " -"``tp_iternext`` handlers. Both handlers take exactly one parameter, the " -"instance for which they are being called, and return a new reference. In " -"the case of an error, they should set an exception and return *NULL*." +"For collections (such as lists and tuples) which can support multiple " +"independent iterators, a new iterator should be created and returned by each " +"call to :c:member:`~PyTypeObject.tp_iter`." msgstr "" +"Pour les collections (telles que les listes et les n-uplets) qui peuvent " +"implémenter plusieurs itérateurs indépendants, un nouvel itérateur doit être " +"créé et renvoyé par chaque appel de type :c:member:`~PyTypeObject.tp_iter`." -#: ../Doc/extending/newtypes.rst:1403 +#: ../Doc/extending/newtypes.rst:524 msgid "" -"For an object which represents an iterable collection, the ``tp_iter`` " -"handler must return an iterator object. The iterator object is responsible " -"for maintaining the state of the iteration. For collections which can " -"support multiple iterators which do not interfere with each other (as lists " -"and tuples do), a new iterator should be created and returned. Objects " -"which can only be iterated over once (usually due to side effects of " -"iteration) should implement this handler by returning a new reference to " -"themselves, and should also implement the ``tp_iternext`` handler. File " -"objects are an example of such an iterator." +"Objects which can only be iterated over once (usually due to side effects of " +"iteration, such as file objects) can implement :c:member:`~PyTypeObject." +"tp_iter` by returning a new reference to themselves -- and should also " +"therefore implement the :c:member:`~PyTypeObject.tp_iternext` handler." msgstr "" -#: ../Doc/extending/newtypes.rst:1413 +#: ../Doc/extending/newtypes.rst:529 msgid "" -"Iterator objects should implement both handlers. The ``tp_iter`` handler " -"should return a new reference to the iterator (this is the same as the " -"``tp_iter`` handler for objects which can only be iterated over " -"destructively). The ``tp_iternext`` handler should return a new reference " -"to the next object in the iteration if there is one. If the iteration has " -"reached the end, it may return *NULL* without setting an exception or it may " -"set :exc:`StopIteration`; avoiding the exception can yield slightly better " -"performance. If an actual error occurs, it should set an exception and " -"return *NULL*." +"Any :term:`iterator` object should implement both :c:member:`~PyTypeObject." +"tp_iter` and :c:member:`~PyTypeObject.tp_iternext`. An iterator's :c:member:" +"`~PyTypeObject.tp_iter` handler should return a new reference to the " +"iterator. Its :c:member:`~PyTypeObject.tp_iternext` handler should return a " +"new reference to the next object in the iteration, if there is one. If the " +"iteration has reached the end, :c:member:`~PyTypeObject.tp_iternext` may " +"return *NULL* without setting an exception, or it may set :exc:" +"`StopIteration` *in addition* to returning *NULL*; avoiding the exception " +"can yield slightly better performance. If an actual error occurs, :c:member:" +"`~PyTypeObject.tp_iternext` should always set an exception and return *NULL*." msgstr "" -#: ../Doc/extending/newtypes.rst:1426 +#: ../Doc/extending/newtypes.rst:545 msgid "Weak Reference Support" -msgstr "" +msgstr "Prise en charge de la référence faible" -#: ../Doc/extending/newtypes.rst:1428 +#: ../Doc/extending/newtypes.rst:547 msgid "" -"One of the goals of Python's weak-reference implementation is to allow any " +"One of the goals of Python's weak reference implementation is to allow any " "type to participate in the weak reference mechanism without incurring the " -"overhead on those objects which do not benefit by weak referencing (such as " -"numbers)." +"overhead on performance-critical objects (such as numbers)." msgstr "" +"L'un des objectifs de l'implémentation de la référence faible de *Python* " +"est de permettre à tout type d'objet de participer au mécanisme de référence " +"faible sans avoir à supporter le surcoût de la performance critique des " +"certains objets, tels que les nombres." + +#: ../Doc/extending/newtypes.rst:552 +msgid "Documentation for the :mod:`weakref` module." +msgstr "Documentation pour le module :mod:`weakref`." -#: ../Doc/extending/newtypes.rst:1432 +#: ../Doc/extending/newtypes.rst:554 msgid "" -"For an object to be weakly referencable, the extension must include a :c:" -"type:`PyObject\\*` field in the instance structure for the use of the weak " -"reference mechanism; it must be initialized to *NULL* by the object's " -"constructor. It must also set the :c:member:`~PyTypeObject." -"tp_weaklistoffset` field of the corresponding type object to the offset of " -"the field. For example, the instance type is defined with the following " -"structure::" +"For an object to be weakly referencable, the extension type must do two " +"things:" msgstr "" +"Pour qu'un objet soit faiblement référençable, le type d'extension doit " +"faire deux choses :" -#: ../Doc/extending/newtypes.rst:1446 -msgid "The statically-declared type object for instances is defined this way::" +#: ../Doc/extending/newtypes.rst:556 +msgid "" +"Include a :c:type:`PyObject\\*` field in the C object structure dedicated to " +"the weak reference mechanism. The object's constructor should leave it " +"*NULL* (which is automatic when using the default :c:member:`~PyTypeObject." +"tp_alloc`)." msgstr "" -#: ../Doc/extending/newtypes.rst:1463 +#: ../Doc/extending/newtypes.rst:561 msgid "" -"The type constructor is responsible for initializing the weak reference list " -"to *NULL*::" +"Set the :c:member:`~PyTypeObject.tp_weaklistoffset` type member to the " +"offset of the aforementioned field in the C object structure, so that the " +"interpreter knows how to access and modify that field." msgstr "" +"Définissez le membre de type :c:member:`~PyTypeObject.tp_weaklistoffset` à " +"la valeur de décalage (*offset*) du champ susmentionné dans la structure de " +"l'objet *C*, afin que l'interpréteur sache comment accéder à ce champ et le " +"modifier." -#: ../Doc/extending/newtypes.rst:1475 +#: ../Doc/extending/newtypes.rst:565 msgid "" -"The only further addition is that the destructor needs to call the weak " -"reference manager to clear any weak references. This is only required if " -"the weak reference list is non-*NULL*::" +"Concretely, here is how a trivial object structure would be augmented with " +"the required field::" msgstr "" +"Concrètement, voici comment une structure d'objet simple serait complétée " +"par le champ requis ::" -#: ../Doc/extending/newtypes.rst:1494 -msgid "More Suggestions" +#: ../Doc/extending/newtypes.rst:573 +msgid "And the corresponding member in the statically-declared type object::" msgstr "" +"Et le membre correspondant dans l'objet de type déclaré statiquement ::" -#: ../Doc/extending/newtypes.rst:1496 +#: ../Doc/extending/newtypes.rst:581 msgid "" -"Remember that you can omit most of these functions, in which case you " -"provide ``0`` as a value. There are type definitions for each of the " -"functions you must provide. They are in :file:`object.h` in the Python " -"include directory that comes with the source distribution of Python." +"The only further addition is that ``tp_dealloc`` needs to clear any weak " +"references (by calling :c:func:`PyObject_ClearWeakRefs`) if the field is non-" +"*NULL*::" msgstr "" -#: ../Doc/extending/newtypes.rst:1501 +#: ../Doc/extending/newtypes.rst:597 +msgid "More Suggestions" +msgstr "Plus de suggestions" + +#: ../Doc/extending/newtypes.rst:599 msgid "" "In order to learn how to implement any specific method for your new data " -"type, do the following: Download and unpack the Python source distribution. " -"Go to the :file:`Objects` directory, then search the C source files for " -"``tp_`` plus the function you want (for example, ``tp_richcompare``). You " -"will find examples of the function you want to implement." +"type, get the :term:`CPython` source code. Go to the :file:`Objects` " +"directory, then search the C source files for ``tp_`` plus the function you " +"want (for example, ``tp_richcompare``). You will find examples of the " +"function you want to implement." msgstr "" +"Pour savoir comment mettre en œuvre une méthode spécifique pour votre " +"nouveau type de données, téléchargez le code source :term:`CPython`. Allez " +"dans le répertoire :file:`Objects`, puis cherchez dans les fichiers sources " +"*C* la fonction ``tp_`` plus la fonction que vous voulez (par exemple, " +"``tp_richcompare``). Vous trouverez des exemples de la fonction que vous " +"voulez implémenter." -#: ../Doc/extending/newtypes.rst:1507 +#: ../Doc/extending/newtypes.rst:605 msgid "" -"When you need to verify that an object is an instance of the type you are " -"implementing, use the :c:func:`PyObject_TypeCheck` function. A sample of its " -"use might be something like the following::" +"When you need to verify that an object is a concrete instance of the type " +"you are implementing, use the :c:func:`PyObject_TypeCheck` function. A " +"sample of its use might be something like the following::" msgstr "" +"Lorsque vous avez besoin de vérifier qu'un objet est une instance concrète " +"du type que vous implémentez, utilisez la fonction :c:func:" +"`PyObject_TypeCheck`. Voici un exemple de son utilisation ::" -#: ../Doc/extending/newtypes.rst:1517 -msgid "Footnotes" -msgstr "Notes" +#: ../Doc/extending/newtypes.rst:616 +msgid "Download CPython source releases." +msgstr "Télécharger les versions sources de *CPython*." -#: ../Doc/extending/newtypes.rst:1518 -msgid "" -"This is true when we know that the object is a basic type, like a string or " -"a float." -msgstr "" +#: ../Doc/extending/newtypes.rst:616 +msgid "https://www.python.org/downloads/source/" +msgstr "https://www.python.org/downloads/source/" -#: ../Doc/extending/newtypes.rst:1521 +#: ../Doc/extending/newtypes.rst:618 msgid "" -"We relied on this in the :c:member:`~PyTypeObject.tp_dealloc` handler in " -"this example, because our type doesn't support garbage collection. Even if a " -"type supports garbage collection, there are calls that can be made to " -"\"untrack\" the object from garbage collection, however, these calls are " -"advanced and not covered here." +"The CPython project on GitHub, where the CPython source code is developed." msgstr "" +"Le projet *CPython* sur *GitHub*, où se trouve le code source *CPython*." -#: ../Doc/extending/newtypes.rst:1526 -msgid "" -"We now know that the first and last members are strings, so perhaps we could " -"be less careful about decrementing their reference counts, however, we " -"accept instances of string subclasses. Even though deallocating normal " -"strings won't call back into our objects, we can't guarantee that " -"deallocating an instance of a string subclass won't call back into our " -"objects." -msgstr "" +#: ../Doc/extending/newtypes.rst:619 +msgid "https://github.com/python/cpython" +msgstr "https://github.com/python/cpython" -#: ../Doc/extending/newtypes.rst:1532 -msgid "" -"Even in the third version, we aren't guaranteed to avoid cycles. Instances " -"of string subclasses are allowed and string subclasses could allow cycles " -"even if normal strings don't." -msgstr "" +#~ msgid "Footnotes" +#~ msgstr "Notes" diff --git a/extending/newtypes_tutorial.po b/extending/newtypes_tutorial.po new file mode 100644 index 000000000..006c4d35a --- /dev/null +++ b/extending/newtypes_tutorial.po @@ -0,0 +1,862 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2018, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.6\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-02 00:10+0200\n" +"PO-Revision-Date: 2018-06-17 10:15+0200\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../Doc/extending/newtypes_tutorial.rst:7 +msgid "Defining Extension Types: Tutorial" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:14 +msgid "" +"Python allows the writer of a C extension module to define new types that " +"can be manipulated from Python code, much like the built-in :class:`str` " +"and :class:`list` types. The code for all extension types follows a " +"pattern, but there are some details that you need to understand before you " +"can get started. This document is a gentle introduction to the topic." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:24 +msgid "The Basics" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:26 +msgid "" +"The :term:`CPython` runtime sees all Python objects as variables of type :c:" +"type:`PyObject\\*`, which serves as a \"base type\" for all Python objects. " +"The :c:type:`PyObject` structure itself only contains the object's :term:" +"`reference count` and a pointer to the object's \"type object\". This is " +"where the action is; the type object determines which (C) functions get " +"called by the interpreter when, for instance, an attribute gets looked up on " +"an object, a method called, or it is multiplied by another object. These C " +"functions are called \"type methods\"." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:35 +msgid "" +"So, if you want to define a new extension type, you need to create a new " +"type object." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:38 +msgid "" +"This sort of thing can only be explained by example, so here's a minimal, " +"but complete, module that defines a new type named :class:`Custom` inside a " +"C extension module :mod:`custom`:" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:43 +msgid "" +"What we're showing here is the traditional way of defining *static* " +"extension types. It should be adequate for most uses. The C API also " +"allows defining heap-allocated extension types using the :c:func:" +"`PyType_FromSpec` function, which isn't covered in this tutorial." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:50 +msgid "" +"Now that's quite a bit to take in at once, but hopefully bits will seem " +"familiar from the previous chapter. This file defines three things:" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:53 +msgid "" +"What a :class:`Custom` **object** contains: this is the ``CustomObject`` " +"struct, which is allocated once for each :class:`Custom` instance." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:55 +msgid "" +"How the :class:`Custom` **type** behaves: this is the ``CustomType`` struct, " +"which defines a set of flags and function pointers that the interpreter " +"inspects when specific operations are requested." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:58 +msgid "" +"How to initialize the :mod:`custom` module: this is the ``PyInit_custom`` " +"function and the associated ``custommodule`` struct." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:61 +msgid "The first bit is::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:67 +msgid "" +"This is what a Custom object will contain. ``PyObject_HEAD`` is mandatory " +"at the start of each object struct and defines a field called ``ob_base`` of " +"type :c:type:`PyObject`, containing a pointer to a type object and a " +"reference count (these can be accessed using the macros :c:macro:`Py_REFCNT` " +"and :c:macro:`Py_TYPE` respectively). The reason for the macro is to " +"abstract away the layout and to enable additional fields in debug builds." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:75 +msgid "" +"There is no semicolon above after the :c:macro:`PyObject_HEAD` macro. Be " +"wary of adding one by accident: some compilers will complain." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:78 +msgid "" +"Of course, objects generally store additional data besides the standard " +"``PyObject_HEAD`` boilerplate; for example, here is the definition for " +"standard Python floats::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:87 +msgid "The second bit is the definition of the type object. ::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:99 +msgid "" +"We recommend using C99-style designated initializers as above, to avoid " +"listing all the :c:type:`PyTypeObject` fields that you don't care about and " +"also to avoid caring about the fields' declaration order." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:103 +msgid "" +"The actual definition of :c:type:`PyTypeObject` in :file:`object.h` has many " +"more :ref:`fields ` than the definition above. The remaining " +"fields will be filled with zeros by the C compiler, and it's common practice " +"to not specify them explicitly unless you need them." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:108 +msgid "We're going to pick it apart, one field at a time::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:112 +msgid "" +"This line is mandatory boilerplate to initialize the ``ob_base`` field " +"mentioned above. ::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:117 +msgid "" +"The name of our type. This will appear in the default textual " +"representation of our objects and in some error messages, for example:" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:127 +msgid "" +"Note that the name is a dotted name that includes both the module name and " +"the name of the type within the module. The module in this case is :mod:" +"`custom` and the type is :class:`Custom`, so we set the type name to :class:" +"`custom.Custom`. Using the real dotted import path is important to make your " +"type compatible with the :mod:`pydoc` and :mod:`pickle` modules. ::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:136 +msgid "" +"This is so that Python knows how much memory to allocate when creating new :" +"class:`Custom` instances. :c:member:`~PyTypeObject.tp_itemsize` is only " +"used for variable-sized objects and should otherwise be zero." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:142 +msgid "" +"If you want your type to be subclassable from Python, and your type has the " +"same :c:member:`~PyTypeObject.tp_basicsize` as its base type, you may have " +"problems with multiple inheritance. A Python subclass of your type will " +"have to list your type first in its :attr:`~class.__bases__`, or else it " +"will not be able to call your type's :meth:`__new__` method without getting " +"an error. You can avoid this problem by ensuring that your type has a " +"larger value for :c:member:`~PyTypeObject.tp_basicsize` than its base type " +"does. Most of the time, this will be true anyway, because either your base " +"type will be :class:`object`, or else you will be adding data members to " +"your base type, and therefore increasing its size." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:152 +msgid "We set the class flags to :const:`Py_TPFLAGS_DEFAULT`. ::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:156 +msgid "" +"All types should include this constant in their flags. It enables all of " +"the members defined until at least Python 3.3. If you need further members, " +"you will need to OR the corresponding flags." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:160 +msgid "" +"We provide a doc string for the type in :c:member:`~PyTypeObject.tp_doc`. ::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:164 +msgid "" +"To enable object creation, we have to provide a :c:member:`~PyTypeObject." +"tp_new` handler. This is the equivalent of the Python method :meth:" +"`__new__`, but has to be specified explicitly. In this case, we can just " +"use the default implementation provided by the API function :c:func:" +"`PyType_GenericNew`. ::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:171 +msgid "" +"Everything else in the file should be familiar, except for some code in :c:" +"func:`PyInit_custom`::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:177 +msgid "" +"This initializes the :class:`Custom` type, filling in a number of members to " +"the appropriate default values, including :attr:`ob_type` that we initially " +"set to *NULL*. ::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:183 +msgid "" +"This adds the type to the module dictionary. This allows us to create :" +"class:`Custom` instances by calling the :class:`Custom` class:" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:191 +msgid "" +"That's it! All that remains is to build it; put the above code in a file " +"called :file:`custom.c` and:" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:200 +msgid "in a file called :file:`setup.py`; then typing" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:206 +msgid "" +"at a shell should produce a file :file:`custom.so` in a subdirectory; move " +"to that directory and fire up Python --- you should be able to ``import " +"custom`` and play around with Custom objects." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:210 +msgid "That wasn't so hard, was it?" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:212 +msgid "" +"Of course, the current Custom type is pretty uninteresting. It has no data " +"and doesn't do anything. It can't even be subclassed." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:216 +msgid "" +"While this documentation showcases the standard :mod:`distutils` module for " +"building C extensions, it is recommended in real-world use cases to use the " +"newer and better-maintained ``setuptools`` library. Documentation on how to " +"do this is out of scope for this document and can be found in the `Python " +"Packaging User's Guide `_." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:224 +msgid "Adding data and methods to the Basic example" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:226 +msgid "" +"Let's extend the basic example to add some data and methods. Let's also " +"make the type usable as a base class. We'll create a new module, :mod:" +"`custom2` that adds these capabilities:" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:233 +msgid "This version of the module has a number of changes." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:235 +msgid "We've added an extra include::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:239 +msgid "" +"This include provides declarations that we use to handle attributes, as " +"described a bit later." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:242 +msgid "" +"The :class:`Custom` type now has three data attributes in its C struct, " +"*first*, *last*, and *number*. The *first* and *last* variables are Python " +"strings containing first and last names. The *number* attribute is a C " +"integer." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:246 +msgid "The object structure is updated accordingly::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:255 +msgid "" +"Because we now have data to manage, we have to be more careful about object " +"allocation and deallocation. At a minimum, we need a deallocation method::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:266 +msgid "which is assigned to the :c:member:`~PyTypeObject.tp_dealloc` member::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:270 +msgid "" +"This method first clears the reference counts of the two Python attributes. :" +"c:func:`Py_XDECREF` correctly handles the case where its argument is *NULL* " +"(which might happen here if ``tp_new`` failed midway). It then calls the :c:" +"member:`~PyTypeObject.tp_free` member of the object's type (computed by " +"``Py_TYPE(self)``) to free the object's memory. Note that the object's type " +"might not be :class:`CustomType`, because the object may be an instance of a " +"subclass." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:279 +msgid "" +"The explicit cast to ``destructor`` above is needed because we defined " +"``Custom_dealloc`` to take a ``CustomObject *`` argument, but the " +"``tp_dealloc`` function pointer expects to receive a ``PyObject *`` " +"argument. Otherwise, the compiler will emit a warning. This is object-" +"oriented polymorphism, in C!" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:285 +msgid "" +"We want to make sure that the first and last names are initialized to empty " +"strings, so we provide a ``tp_new`` implementation::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:309 +msgid "and install it in the :c:member:`~PyTypeObject.tp_new` member::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:313 +msgid "" +"The ``tp_new`` handler is responsible for creating (as opposed to " +"initializing) objects of the type. It is exposed in Python as the :meth:" +"`__new__` method. It is not required to define a ``tp_new`` member, and " +"indeed many extension types will simply reuse :c:func:`PyType_GenericNew` as " +"done in the first version of the ``Custom`` type above. In this case, we " +"use the ``tp_new`` handler to initialize the ``first`` and ``last`` " +"attributes to non-*NULL* default values." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:321 +msgid "" +"``tp_new`` is passed the type being instantiated (not necessarily " +"``CustomType``, if a subclass is instantiated) and any arguments passed when " +"the type was called, and is expected to return the instance created. " +"``tp_new`` handlers always accept positional and keyword arguments, but they " +"often ignore the arguments, leaving the argument handling to initializer (a." +"k.a. ``tp_init`` in C or ``__init__`` in Python) methods." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:329 +msgid "" +"``tp_new`` shouldn't call ``tp_init`` explicitly, as the interpreter will do " +"it itself." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:332 +msgid "" +"The ``tp_new`` implementation calls the :c:member:`~PyTypeObject.tp_alloc` " +"slot to allocate memory::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:337 +msgid "" +"Since memory allocation may fail, we must check the :c:member:`~PyTypeObject." +"tp_alloc` result against *NULL* before proceeding." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:341 +msgid "" +"We didn't fill the :c:member:`~PyTypeObject.tp_alloc` slot ourselves. " +"Rather :c:func:`PyType_Ready` fills it for us by inheriting it from our base " +"class, which is :class:`object` by default. Most types use the default " +"allocation strategy." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:347 +msgid "" +"If you are creating a co-operative :c:member:`~PyTypeObject.tp_new` (one " +"that calls a base type's :c:member:`~PyTypeObject.tp_new` or :meth:" +"`__new__`), you must *not* try to determine what method to call using method " +"resolution order at runtime. Always statically determine what type you are " +"going to call, and call its :c:member:`~PyTypeObject.tp_new` directly, or " +"via ``type->tp_base->tp_new``. If you do not do this, Python subclasses of " +"your type that also inherit from other Python-defined classes may not work " +"correctly. (Specifically, you may not be able to create instances of such " +"subclasses without getting a :exc:`TypeError`.)" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:357 +msgid "" +"We also define an initialization function which accepts arguments to provide " +"initial values for our instance::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:386 +msgid "by filling the :c:member:`~PyTypeObject.tp_init` slot. ::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:390 +msgid "" +"The :c:member:`~PyTypeObject.tp_init` slot is exposed in Python as the :meth:" +"`__init__` method. It is used to initialize an object after it's created. " +"Initializers always accept positional and keyword arguments, and they should " +"return either ``0`` on success or ``-1`` on error." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:395 +msgid "" +"Unlike the ``tp_new`` handler, there is no guarantee that ``tp_init`` is " +"called at all (for example, the :mod:`pickle` module by default doesn't " +"call :meth:`__init__` on unpickled instances). It can also be called " +"multiple times. Anyone can call the :meth:`__init__` method on our " +"objects. For this reason, we have to be extra careful when assigning the " +"new attribute values. We might be tempted, for example to assign the " +"``first`` member like this::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:409 +msgid "" +"But this would be risky. Our type doesn't restrict the type of the " +"``first`` member, so it could be any kind of object. It could have a " +"destructor that causes code to be executed that tries to access the " +"``first`` member; or that destructor could release the :term:`Global " +"interpreter Lock` and let arbitrary code run in other threads that accesses " +"and modifies our object." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:416 +msgid "" +"To be paranoid and protect ourselves against this possibility, we almost " +"always reassign members before decrementing their reference counts. When " +"don't we have to do this?" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:420 +msgid "when we absolutely know that the reference count is greater than 1;" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:422 +msgid "" +"when we know that deallocation of the object [#]_ will neither release the :" +"term:`GIL` nor cause any calls back into our type's code;" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:425 +msgid "" +"when decrementing a reference count in a :c:member:`~PyTypeObject." +"tp_dealloc` handler on a type which doesn't support cyclic garbage " +"collection [#]_." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:428 +msgid "" +"We want to expose our instance variables as attributes. There are a number " +"of ways to do that. The simplest way is to define member definitions::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:441 +msgid "" +"and put the definitions in the :c:member:`~PyTypeObject.tp_members` slot::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:445 +msgid "" +"Each member definition has a member name, type, offset, access flags and " +"documentation string. See the :ref:`Generic-Attribute-Management` section " +"below for details." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:449 +msgid "" +"A disadvantage of this approach is that it doesn't provide a way to restrict " +"the types of objects that can be assigned to the Python attributes. We " +"expect the first and last names to be strings, but any Python objects can be " +"assigned. Further, the attributes can be deleted, setting the C pointers to " +"*NULL*. Even though we can make sure the members are initialized to non-" +"*NULL* values, the members can be set to *NULL* if the attributes are " +"deleted." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:456 +msgid "" +"We define a single method, :meth:`Custom.name()`, that outputs the objects " +"name as the concatenation of the first and last names. ::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:473 +msgid "" +"The method is implemented as a C function that takes a :class:`Custom` (or :" +"class:`Custom` subclass) instance as the first argument. Methods always " +"take an instance as the first argument. Methods often take positional and " +"keyword arguments as well, but in this case we don't take any and don't need " +"to accept a positional argument tuple or keyword argument dictionary. This " +"method is equivalent to the Python method:" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:485 +msgid "" +"Note that we have to check for the possibility that our :attr:`first` and :" +"attr:`last` members are *NULL*. This is because they can be deleted, in " +"which case they are set to *NULL*. It would be better to prevent deletion " +"of these attributes and to restrict the attribute values to be strings. " +"We'll see how to do that in the next section." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:491 +msgid "" +"Now that we've defined the method, we need to create an array of method " +"definitions::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:501 +msgid "" +"(note that we used the :const:`METH_NOARGS` flag to indicate that the method " +"is expecting no arguments other than *self*)" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:504 +msgid "and assign it to the :c:member:`~PyTypeObject.tp_methods` slot::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:508 +msgid "" +"Finally, we'll make our type usable as a base class for subclassing. We've " +"written our methods carefully so far so that they don't make any assumptions " +"about the type of the object being created or used, so all we need to do is " +"to add the :const:`Py_TPFLAGS_BASETYPE` to our class flag definition::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:515 +msgid "" +"We rename :c:func:`PyInit_custom` to :c:func:`PyInit_custom2`, update the " +"module name in the :c:type:`PyModuleDef` struct, and update the full class " +"name in the :c:type:`PyTypeObject` struct." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:519 +msgid "Finally, we update our :file:`setup.py` file to build the new module:" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:532 +msgid "Providing finer control over data attributes" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:534 +msgid "" +"In this section, we'll provide finer control over how the :attr:`first` and :" +"attr:`last` attributes are set in the :class:`Custom` example. In the " +"previous version of our module, the instance variables :attr:`first` and :" +"attr:`last` could be set to non-string values or even deleted. We want to " +"make sure that these attributes always contain strings." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:543 +msgid "" +"To provide greater control, over the :attr:`first` and :attr:`last` " +"attributes, we'll use custom getter and setter functions. Here are the " +"functions for getting and setting the :attr:`first` attribute::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:574 +msgid "" +"The getter function is passed a :class:`Custom` object and a \"closure\", " +"which is a void pointer. In this case, the closure is ignored. (The " +"closure supports an advanced usage in which definition data is passed to the " +"getter and setter. This could, for example, be used to allow a single set of " +"getter and setter functions that decide the attribute to get or set based on " +"data in the closure.)" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:580 +msgid "" +"The setter function is passed the :class:`Custom` object, the new value, and " +"the closure. The new value may be *NULL*, in which case the attribute is " +"being deleted. In our setter, we raise an error if the attribute is deleted " +"or if its new value is not a string." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:585 +msgid "We create an array of :c:type:`PyGetSetDef` structures::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:595 +msgid "and register it in the :c:member:`~PyTypeObject.tp_getset` slot::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:599 +msgid "" +"The last item in a :c:type:`PyGetSetDef` structure is the \"closure\" " +"mentioned above. In this case, we aren't using a closure, so we just pass " +"*NULL*." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:602 +msgid "We also remove the member definitions for these attributes::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:610 +msgid "" +"We also need to update the :c:member:`~PyTypeObject.tp_init` handler to only " +"allow strings [#]_ to be passed::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:639 +msgid "" +"With these changes, we can assure that the ``first`` and ``last`` members " +"are never *NULL* so we can remove checks for *NULL* values in almost all " +"cases. This means that most of the :c:func:`Py_XDECREF` calls can be " +"converted to :c:func:`Py_DECREF` calls. The only place we can't change " +"these calls is in the ``tp_dealloc`` implementation, where there is the " +"possibility that the initialization of these members failed in ``tp_new``." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:646 +msgid "" +"We also rename the module initialization function and module name in the " +"initialization function, as we did before, and we add an extra definition to " +"the :file:`setup.py` file." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:652 +msgid "Supporting cyclic garbage collection" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:654 +msgid "" +"Python has a :term:`cyclic garbage collector (GC) ` that " +"can identify unneeded objects even when their reference counts are not zero. " +"This can happen when objects are involved in cycles. For example, consider:" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:664 +msgid "" +"In this example, we create a list that contains itself. When we delete it, " +"it still has a reference from itself. Its reference count doesn't drop to " +"zero. Fortunately, Python's cyclic garbage collector will eventually figure " +"out that the list is garbage and free it." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:669 +msgid "" +"In the second version of the :class:`Custom` example, we allowed any kind of " +"object to be stored in the :attr:`first` or :attr:`last` attributes [#]_. " +"Besides, in the second and third versions, we allowed subclassing :class:" +"`Custom`, and subclasses may add arbitrary attributes. For any of those two " +"reasons, :class:`Custom` objects can participate in cycles:" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:683 +msgid "" +"To allow a :class:`Custom` instance participating in a reference cycle to be " +"properly detected and collected by the cyclic GC, our :class:`Custom` type " +"needs to fill two additional slots and to enable a flag that enables these " +"slots:" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:690 +msgid "" +"First, the traversal method lets the cyclic GC know about subobjects that " +"could participate in cycles::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:710 +msgid "" +"For each subobject that can participate in cycles, we need to call the :c:" +"func:`visit` function, which is passed to the traversal method. The :c:func:" +"`visit` function takes as arguments the subobject and the extra argument " +"*arg* passed to the traversal method. It returns an integer value that must " +"be returned if it is non-zero." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:716 +msgid "" +"Python provides a :c:func:`Py_VISIT` macro that automates calling visit " +"functions. With :c:func:`Py_VISIT`, we can minimize the amount of " +"boilerplate in ``Custom_traverse``::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:729 +msgid "" +"The :c:member:`~PyTypeObject.tp_traverse` implementation must name its " +"arguments exactly *visit* and *arg* in order to use :c:func:`Py_VISIT`." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:732 +msgid "" +"Second, we need to provide a method for clearing any subobjects that can " +"participate in cycles::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:743 +msgid "" +"Notice the use of the :c:func:`Py_CLEAR` macro. It is the recommended and " +"safe way to clear data attributes of arbitrary types while decrementing " +"their reference counts. If you were to call :c:func:`Py_XDECREF` instead on " +"the attribute before setting it to *NULL*, there is a possibility that the " +"attribute's destructor would call back into code that reads the attribute " +"again (*especially* if there is a reference cycle)." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:751 +msgid "You could emulate :c:func:`Py_CLEAR` by writing::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:758 +msgid "" +"Nevertheless, it is much easier and less error-prone to always use :c:func:" +"`Py_CLEAR` when deleting an attribute. Don't try to micro-optimize at the " +"expense of robustness!" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:762 +msgid "" +"The deallocator ``Custom_dealloc`` may call arbitrary code when clearing " +"attributes. It means the circular GC can be triggered inside the function. " +"Since the GC assumes reference count is not zero, we need to untrack the " +"object from the GC by calling :c:func:`PyObject_GC_UnTrack` before clearing " +"members. Here is our reimplemented deallocator using :c:func:" +"`PyObject_GC_UnTrack` and ``Custom_clear``::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:777 +msgid "" +"Finally, we add the :const:`Py_TPFLAGS_HAVE_GC` flag to the class flags::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:781 +msgid "" +"That's pretty much it. If we had written custom :c:member:`~PyTypeObject." +"tp_alloc` or :c:member:`~PyTypeObject.tp_free` handlers, we'd need to modify " +"them for cyclic garbage collection. Most extensions will use the versions " +"automatically provided." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:787 +msgid "Subclassing other types" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:789 +msgid "" +"It is possible to create new extension types that are derived from existing " +"types. It is easiest to inherit from the built in types, since an extension " +"can easily use the :c:type:`PyTypeObject` it needs. It can be difficult to " +"share these :c:type:`PyTypeObject` structures between extension modules." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:794 +msgid "" +"In this example we will create a :class:`SubList` type that inherits from " +"the built-in :class:`list` type. The new type will be completely compatible " +"with regular lists, but will have an additional :meth:`increment` method " +"that increases an internal counter:" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:814 +msgid "" +"As you can see, the source code closely resembles the :class:`Custom` " +"examples in previous sections. We will break down the main differences " +"between them. ::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:822 +msgid "" +"The primary difference for derived type objects is that the base type's " +"object structure must be the first value. The base type will already " +"include the :c:func:`PyObject_HEAD` at the beginning of its structure." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:826 +msgid "" +"When a Python object is a :class:`SubList` instance, its ``PyObject *`` " +"pointer can be safely cast to both ``PyListObject *`` and ``SubListObject " +"*``::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:838 +msgid "" +"We see above how to call through to the :attr:`__init__` method of the base " +"type." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:841 +msgid "" +"This pattern is important when writing a type with custom :c:member:" +"`~PyTypeObject.tp_new` and :c:member:`~PyTypeObject.tp_dealloc` members. " +"The :c:member:`~PyTypeObject.tp_new` handler should not actually create the " +"memory for the object with its :c:member:`~PyTypeObject.tp_alloc`, but let " +"the base class handle it by calling its own :c:member:`~PyTypeObject.tp_new`." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:847 +msgid "" +"The :c:type:`PyTypeObject` struct supports a :c:member:`~PyTypeObject." +"tp_base` specifying the type's concrete base class. Due to cross-platform " +"compiler issues, you can't fill that field directly with a reference to :c:" +"type:`PyList_Type`; it should be done later in the module initialization " +"function::" +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:870 +msgid "" +"Before calling :c:func:`PyType_Ready`, the type structure must have the :c:" +"member:`~PyTypeObject.tp_base` slot filled in. When we are deriving an " +"existing type, it is not necessary to fill out the :c:member:`~PyTypeObject." +"tp_alloc` slot with :c:func:`PyType_GenericNew` -- the allocation function " +"from the base type will be inherited." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:876 +msgid "" +"After that, calling :c:func:`PyType_Ready` and adding the type object to the " +"module is the same as with the basic :class:`Custom` examples." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:881 +msgid "Footnotes" +msgstr "Notes" + +#: ../Doc/extending/newtypes_tutorial.rst:882 +msgid "" +"This is true when we know that the object is a basic type, like a string or " +"a float." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:885 +msgid "" +"We relied on this in the :c:member:`~PyTypeObject.tp_dealloc` handler in " +"this example, because our type doesn't support garbage collection." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:888 +msgid "" +"We now know that the first and last members are strings, so perhaps we could " +"be less careful about decrementing their reference counts, however, we " +"accept instances of string subclasses. Even though deallocating normal " +"strings won't call back into our objects, we can't guarantee that " +"deallocating an instance of a string subclass won't call back into our " +"objects." +msgstr "" + +#: ../Doc/extending/newtypes_tutorial.rst:894 +msgid "" +"Also, even with our attributes restricted to strings instances, the user " +"could pass arbitrary :class:`str` subclasses and therefore still create " +"reference cycles." +msgstr "" diff --git a/extending/windows.po b/extending/windows.po index fd4f5f6f1..b002756e4 100644 --- a/extending/windows.po +++ b/extending/windows.po @@ -82,10 +82,10 @@ msgstr "" "Il y a deux approches lorsque l'on construit des modules d'extension sur " "Windows, tout comme sur Unix : utiliser le paquet :mod:`distutils` pour " "contrôler le processus de construction, ou faire les choses manuellement. " -"L'approche distutils fonctionne bien pour la plupart des extensions ; la " +"L'approche *distutils* fonctionne bien pour la plupart des extensions ; la " "documentation pour utiliser :mod:`distutils` pour construire et empaqueter " "les modules d'extension est disponible dans :ref:`distutils-index`. Si vous " -"considerez que vous avez réellement besoin de faire les choses manuellement, " +"considérez que vous avez réellement besoin de faire les choses manuellement, " "il pourrait être enrichissant d'étudier le fichier de projet :source:" "`winsound ` pour le module de la bibliothèque " "standard." @@ -100,7 +100,7 @@ msgid "" "code. Before you try to build a module that can be dynamically loaded, be " "aware of how your system works." msgstr "" -"Unix et Windows utilisent des paradigmes complètement différents pour le " +"\\ Unix et Windows utilisent des paradigmes complètement différents pour le " "chargement du code pendant l'exécution. Avant d'essayer de construire un " "module qui puisse être chargé dynamiquement, soyez conscient du mode de " "fonctionnement du système." @@ -117,7 +117,7 @@ msgstr "" "Sur Unix, un fichier objet partagé (:file:`.so`) contient du code servant au " "programme, ainsi que les noms des fonctions et les données que l'on " "s'attend à trouver dans le programme. Quand le fichier est attaché au " -"programme, toutes les réferences à ces fonctions et données dans le code du " +"programme, toutes les références à ces fonctions et données dans le code du " "fichier sont modifiées pour pointer vers les localisations actuelles dans le " "programme où sont désormais placées les fonctions et données dans la " "mémoire. C'est tout simplement une opération de liaison." @@ -153,7 +153,7 @@ msgstr "" "l'étape de liaison pour créer un fichier objet partagé (:file:`.so`), le " "lieur peut informer qu'il ne sait pas où un identificateur est défini. Le " "lieur le cherchera dans les fichiers objet dans les bibliothèques ; s'il le " -"trouve, il incluera tout le code provenant de ce fichier objet." +"trouve, il inclura tout le code provenant de ce fichier objet." #: ../Doc/extending/windows.rst:76 msgid "" @@ -169,17 +169,17 @@ msgid "" "application or DLL." msgstr "" "Sur Windows, il y a deux types de bibliothèques, une bibliothèque statique " -"et une bibliothèque d'import (toutes deux appelées :file:`.lib`). Une " +"et une bibliothèque d'importation (toutes deux appelées :file:`.lib`). Une " "bibliothèque statique est comme un fichier Unix :file:`.a` ; elle contient " -"du code pouvant être inclus si nécessaire. Une bibliothèque d'import est " -"uniquement utilisée pour rassurer le lieur qu'un certain identificateur est " -"légal, et sera présent dans le programme quand la DLL est chargé. Comme ça " -"le lieur utilise les informations provenant de la bibliothèque d'import pour " -"construire la table de conversion pour utiliser les identificateurs qui ne " -"sont pas inclus dans la DLL. Quand une application ou une DLL est lié, une " -"bibliothèque d'import peut être générée, qui devra être utilisée pour tous " -"les futures DLL dépendantes aux symboles provenant de l'application ou de la " -"DLL." +"du code pouvant être inclus si nécessaire. Une bibliothèque d'importation " +"est uniquement utilisée pour rassurer le lieur qu'un certain identificateur " +"est légal, et sera présent dans le programme quand la DLL est chargée. Comme " +"ça le lieur utilise les informations provenant de la bibliothèque " +"d'importation pour construire la table de conversion pour utiliser les " +"identificateurs qui ne sont pas inclus dans la DLL. Quand une application ou " +"une DLL est liée, une bibliothèque d'importation peut être générée, qui " +"devra être utilisée pour toutes les futures DLL dépendantes aux symboles " +"provenant de l'application ou de la DLL." #: ../Doc/extending/windows.rst:86 msgid "" @@ -194,7 +194,7 @@ msgstr "" "Supposons que vous construisez deux modules de chargement dynamiques, B et " "C, qui ne devraient pas partager un autre bloc de code avec A. Sur Unix, " "vous ne transmettrez pas :file:`A.a` au lieur pour :file:`B.so` et :file:`C." -"so` ; cela le ferait être inclus deux fois, pour que B et C aient chacuns " +"so` ; cela le ferait être inclus deux fois, pour que B et C aient chacun " "leur propre copie. Sur Windows, construire :file:`A.dll` construira aussi :" "file:`A.lib`. Vous transmettez :file:`A.lib` au lieur pour B et C. :file:`A." "lib` ne contient pas de code ; il contient uniquement des informations qui " @@ -207,10 +207,10 @@ msgid "" "On Unix, linking with a library is more like ``from spam import *``; it does " "create a separate copy." msgstr "" -"Sur Windows, utiliser une bibliothèque d'import est comme utiliser ``import " -"spam``; cela vous donne accès aux noms des spams, mais ne crée par de copie " -"séparée. Sur Unix, se lier à une bibliothèque est plus comme ``from spam " -"import *`` ; cela créé une copie séparée." +"Sur Windows, utiliser une bibliothèque d'importation est comme utiliser " +"``import spam``; cela vous donne accès aux noms des spams, mais ne crée par " +"de copie séparée. Sur Unix, se lier à une bibliothèque est plus comme ``from " +"spam import *`` ; cela crée une copie séparée." #: ../Doc/extending/windows.rst:103 msgid "Using DLLs in Practice" @@ -234,7 +234,7 @@ msgid "" msgstr "" "Lorsque vous créez des DLL sur Windows, vous devez transmettre :file:" "`pythonXY.lib` au lieur. Pour construire deux DLL, spam et ni (qui utilisent " -"des fonctions C trouvées dans spam), vous pouvez utiliser ces commandes::" +"des fonctions C trouvées dans spam), vous pouvez utiliser ces commandes ::" #: ../Doc/extending/windows.rst:119 msgid "" @@ -278,8 +278,8 @@ msgid "" "the Project Settings dialog, Link tab, to specify *ignore default " "libraries*. Add the correct :file:`msvcrtxx.lib` to the list of libraries." msgstr "" -"Developer Studio apportera beaucoup de bibliothèques d'import dont vous " -"n'avez pas vraiment besoin, augmentant d'environ 100K votre exécutable. Pour " -"s'en débarasser, allez dans les Paramètres du Projet, onglet Lien, pour " -"préciser *ignorer les bibliothèques par défaut*. Et la :file:`msvcrtxx.lib` " -"correcte à la liste des bibliothèques." +"\\ Developer Studio apportera beaucoup de bibliothèques d'importation dont " +"vous n'avez pas vraiment besoin, augmentant d'environ 100ko votre " +"exécutable. Pour s'en débarrasser, allez dans les Paramètres du Projet, " +"onglet Lien, pour préciser *ignorer les bibliothèques par défaut*. Et la :" +"file:`msvcrtxx.lib` correcte à la liste des bibliothèques." diff --git a/faq/design.po b/faq/design.po index 76ddd83bd..1cad2fd85 100644 --- a/faq/design.po +++ b/faq/design.po @@ -24,7 +24,7 @@ msgstr "FAQ histoire et design" #: ../Doc/faq/design.rst:6 msgid "Why does Python use indentation for grouping of statements?" msgstr "" -"Pourquoi Python utilise-t-il l'indentation pour grouper les instructions ?" +"Pourquoi Python utilise-t-il l'indentation pour grouper les instructions ?" #: ../Doc/faq/design.rst:8 msgid "" @@ -33,7 +33,7 @@ msgid "" "Most people learn to love this feature after a while." msgstr "" "Guido van Rossum considère que l'usage de l'indentation pour regrouper les " -"blocs d'instruction est élégant et contribue énormément à la clareté globale " +"blocs d'instruction est élégant et contribue énormément à la clarté globale " "du programme Python. La plupart des gens finissent par aimer cette " "particularité au bout d'un moment." @@ -46,7 +46,7 @@ msgstr "" "Comme il n'y a pas d'accolades de début/fin, il ne peut y avoir de " "différence entre le bloc perçu par l'analyseur syntaxique et le lecteur " "humain. Parfois les programmeurs C pourront trouver un morceau de code comme " -"celui-ci : ::" +"celui-ci ::" #: ../Doc/faq/design.rst:21 msgid "" @@ -98,7 +98,7 @@ msgstr "" msgid "Why am I getting strange results with simple arithmetic operations?" msgstr "" "Pourquoi ai-je d'étranges résultats suite à de simples opérations " -"arithmétiques ?" +"arithmétiques ?" #: ../Doc/faq/design.rst:43 msgid "See the next question." @@ -106,12 +106,11 @@ msgstr "Voir la question suivante." #: ../Doc/faq/design.rst:47 msgid "Why are floating-point calculations so inaccurate?" -msgstr "Pourquoi les calculs à virgules flottantes sont si imprécis ?" +msgstr "Pourquoi les calculs à virgules flottantes sont si imprécis ?" #: ../Doc/faq/design.rst:49 msgid "Users are often surprised by results like this::" -msgstr "" -"Les gens sont très souvent surpris par des résultats comme celui-ci : ::" +msgstr "Les gens sont très souvent surpris par des résultats comme celui-ci ::" #: ../Doc/faq/design.rst:54 msgid "" @@ -148,7 +147,7 @@ msgid "" msgstr "" "Beaucoup de nombres pouvant être écrits facilement en notation décimale ne " "peuvent pas s'exprimer de manière exacte en binaire à virgule flottante. Par " -"exemple, après : ::" +"exemple, après ::" #: ../Doc/faq/design.rst:70 msgid "" @@ -158,11 +157,11 @@ msgid "" msgstr "" "la valeur stockée pour ``x`` est une (très bonne) approximation de la valeur " "décimale ``1.2``, mais cette valeur n'est pas exacte. Sur une machine " -"typique, la valeur stockée est en fait : ::" +"typique, la valeur stockée est en fait ::" #: ../Doc/faq/design.rst:76 msgid "which is exactly::" -msgstr "qui est, exactement : ::" +msgstr "qui est, exactement ::" #: ../Doc/faq/design.rst:80 msgid "" @@ -182,7 +181,7 @@ msgstr "" #: ../Doc/faq/design.rst:88 msgid "Why are Python strings immutable?" -msgstr "Pourquoi les chaînes de caractères Python sont-elles immuables ?" +msgstr "Pourquoi les chaînes de caractères Python sont-elles immuables ?" #: ../Doc/faq/design.rst:90 msgid "There are several advantages." @@ -216,7 +215,7 @@ msgstr "" msgid "Why must 'self' be used explicitly in method definitions and calls?" msgstr "" "Pourquoi \"self\" doit-il être explicitement utilisé dans les définitions et " -"les appels de méthode ?" +"les appels de méthode ?" #: ../Doc/faq/design.rst:107 msgid "" @@ -240,11 +239,11 @@ msgid "" msgstr "" "Tout d'abord, il est plus évident d'utiliser une méthode ou un attribut " "d'instance par exemple au lieu d'une variable locale. Lire ``self.x`` ou " -"``self.meth()`` est sans ambiguité sur le fait que c'est une variable " +"``self.meth()`` est sans ambiguïté sur le fait que c'est une variable " "d'instance ou une méthode qui est utilisée, même si vous ne connaissez pas " "la définition de classe par cœur. En C++, vous pouvez les reconnaitre par " "l'absence d'une déclaration de variable locale (en supposant que les " -"variables globales sont rares ou facilement reconnaissables) - mais en " +"variables globales sont rares ou facilement reconnaissables) -- mais en " "Python, il n'y a pas de déclarations de variables locales, de sorte que vous " "devez chercher la définition de classe pour être sûr. Certaines normes de " "programmation C++ et Java préfixent les attributs d'instance par ``m_``. " @@ -302,11 +301,11 @@ msgstr "" "les références vers des noms non-qualifiés au sein d'une méthode n'ont pas à " "être cherchés dans l'annuaire d'instances. En d'autres termes, les variables " "locales et les variables d'instance vivent dans deux différents espaces de " -"noms, et vous devez dire à Python quel espace de noms utiliser." +"nommage, et vous devez dire à Python quel espace de nommage utiliser." #: ../Doc/faq/design.rst:145 msgid "Why can't I use an assignment in an expression?" -msgstr "Pourquoi ne puis-je pas utiliser d'assignation dans une expression ?" +msgstr "Pourquoi ne puis-je pas utiliser d'assignation dans une expression ?" #: ../Doc/faq/design.rst:147 msgid "" @@ -346,11 +345,11 @@ msgid "" "proper meaning to a human reader who has not yet been introduced to the " "construct." msgstr "" -"De nombreuses alternatives ont été proposées. La plupart des hacks " -"économisaient de la frappe mais utilisaient d'arbitraires ou cryptiques " -"syntaxes ou mot-clés et faillait le simple critère pour proposition de " -"changement du langage : ça doit intuitivement suggérer la bonne " -"signification au lecteur qui n'a pas encore été introduit à la construction." +"De nombreuses alternatives ont été proposées. La plupart économisaient " +"quelques touches mais utilisaient des mots clefs ou des syntaxes arbitraires " +"ou cryptiques, et manquaient à la règle que toute proposition de changement " +"de langage devrait respecter : elle doit intuitivement suggérer la bonne " +"signification au lecteur qui n'a pas encore été introduit à cette syntaxe." #: ../Doc/faq/design.rst:183 msgid "" @@ -370,7 +369,7 @@ msgid "" "generally less robust than the \"while True\" solution::" msgstr "" "Il y a une manière alternative de faire ça qui semble attrayante mais elle " -"est généralement moins robuste que la solution ``while True`` ::" +"est généralement moins robuste que la solution ``while True`` ::" #: ../Doc/faq/design.rst:196 msgid "" @@ -401,8 +400,8 @@ msgid "" "Why does Python use methods for some functionality (e.g. list.index()) but " "functions for other (e.g. len(list))?" msgstr "" -"Pourquoi Python utilise des méthodes pour certaines fonctionnalités (ex : " -"list.index()) mais des fonctions pour d'autres (ex : len(list)) ?" +"Pourquoi Python utilise des méthodes pour certaines fonctionnalités (ex : " +"``list.index()``) mais des fonctions pour d'autres (ex : ``len(list)``) ?" #: ../Doc/faq/design.rst:213 msgid "" @@ -447,8 +446,8 @@ msgstr "" #: ../Doc/faq/design.rst:234 msgid "Why is join() a string method instead of a list or tuple method?" msgstr "" -"Pourquoi join() est une méthode de chaîne plutôt qu'une de liste ou de " -"tuple ?" +"Pourquoi ``join()`` est une méthode de chaîne plutôt qu'une de liste ou de " +"tuple ?" #: ../Doc/faq/design.rst:236 msgid "" @@ -463,11 +462,11 @@ msgstr "" "mêmes fonctionnalités que celles qui étaient déjà disponibles en utilisant " "les fonctions du module string. La plupart de ces nouvelles méthodes ont été " "largement acceptées, mais celle qui semble rendre certains programmeurs " -"inconfortables est : ::" +"inconfortables est ::" #: ../Doc/faq/design.rst:244 msgid "which gives the result::" -msgstr "qui donne le résultat : ::" +msgstr "qui donne le résultat ::" #: ../Doc/faq/design.rst:248 msgid "There are two common arguments against this usage." @@ -498,7 +497,7 @@ msgstr "" "train de dire à une séquence de joindre ses membres avec une constante de " "chaîne\". Malheureusement, vous ne l'êtes pas. Pour quelque raison, il " "semble être bien moins difficile d'avoir :meth:`~str.split` en tant que " -"méthode de chaîne, puisque dans ce cas il est facile de voir que::" +"méthode de chaîne, puisque dans ce cas il est facile de voir que ::" #: ../Doc/faq/design.rst:263 msgid "" @@ -522,11 +521,12 @@ msgstr "" "s'insérer entre les éléments adjacents. Cette méthode peut être utilisée " "avec n'importe quel argument qui obéit aux règles d'objets séquence, " "incluant n'importe quelles nouvelles classes que vous pourriez définir vous-" -"même. Des méthodes similaires existent pour des objets bytes et bytearray." +"même. Des méthodes similaires existent pour des objets ``bytes`` et " +"``bytearray``." #: ../Doc/faq/design.rst:274 msgid "How fast are exceptions?" -msgstr "À quel point les exceptions sont-elles rapides ?" +msgstr "À quel point les exceptions sont-elles rapides ?" #: ../Doc/faq/design.rst:276 msgid "" @@ -534,10 +534,10 @@ msgid "" "Actually catching an exception is expensive. In versions of Python prior to " "2.0 it was common to use this idiom::" msgstr "" -"Un bloc try/except est extrêmement efficient tant qu'aucune exception ne " -"sont levée. En effet, intercepter une exception s'avère coûteux. Dans les " -"versions de précédant Python 2.0, il était courant d'utiliser cette " -"pratique::" +"Un bloc ``try`` / ``except`` est extrêmement efficient tant qu'aucune " +"exception ne sont levée. En effet, intercepter une exception s'avère " +"coûteux. Dans les versions de précédant Python 2.0, il était courant " +"d'utiliser cette pratique ::" #: ../Doc/faq/design.rst:286 msgid "" @@ -546,7 +546,7 @@ msgid "" msgstr "" "Cela n'a de sens que si vous vous attendez à ce que le dictionnaire ait la " "clé presque tout le temps. Si ce n'était pas le cas, vous l'auriez codé " -"comme suit : ::" +"comme suit ::" #: ../Doc/faq/design.rst:294 msgid "" @@ -562,7 +562,7 @@ msgstr "" msgid "Why isn't there a switch or case statement in Python?" msgstr "" "Pourquoi n'y a-t-il pas une instruction *switch* ou une structure similaire " -"à *switch / case* en Python ?" +"à *switch / case* en Python ?" #: ../Doc/faq/design.rst:302 msgid "" @@ -573,8 +573,8 @@ msgid "" msgstr "" "Vous pouvez le faire assez facilement avec une séquence de ``if... elif... " "elif... else``. Il y a eu quelques propositions pour la syntaxe de " -"l'instruction switch, mais il n'y a pas (encore) de consensus sur le cas des " -"intervalles. Voir la :pep:`275` pour tous les détails et l'état actuel." +"l'instruction ``switch``, mais il n'y a pas (encore) de consensus sur le cas " +"des intervalles. Voir la :pep:`275` pour tous les détails et l'état actuel." #: ../Doc/faq/design.rst:307 msgid "" @@ -584,7 +584,7 @@ msgid "" msgstr "" "Dans les cas où vous devez choisir parmi un très grand nombre de " "possibilités, vous pouvez créer un dictionnaire faisant correspondre des " -"valeurs à des fonctions à appeler. Par exemple : ::" +"valeurs à des fonctions à appeler. Par exemple ::" #: ../Doc/faq/design.rst:321 msgid "" @@ -593,7 +593,7 @@ msgid "" msgstr "" "Pour appeler les méthodes sur des objets, vous pouvez simplifier davantage " "en utilisant la fonction native :func:`getattr` pour récupérer les méthodes " -"avec un nom donné : ::" +"avec un nom donné ::" #: ../Doc/faq/design.rst:333 msgid "" @@ -613,7 +613,7 @@ msgid "" "specific thread implementation?" msgstr "" "Est-il possible d'émuler des fils d'exécution dans l'interpréteur plutôt que " -"se baser sur les implémentations spécifique aux OS ?" +"se baser sur les implémentations spécifique aux OS ?" #: ../Doc/faq/design.rst:341 msgid "" @@ -622,7 +622,7 @@ msgid "" "almost random moments. Therefore, a complete threads implementation " "requires thread support for C." msgstr "" -"Réponse 1: Malheureusement, l'interpréteur pousse au moins un block de pile " +"Réponse 1 : Malheureusement, l'interpréteur pousse au moins un bloc de pile " "C (*stack frame*) pour chaque bloc de pile de Python. Aussi, les extensions " "peuvent rappeler dans Python à presque n'importe quel moment. Par " "conséquent, une implémentation complète des fils d'exécution nécessiterai un " @@ -641,7 +641,7 @@ msgstr "" #: ../Doc/faq/design.rst:351 msgid "Why can't lambda expressions contain statements?" msgstr "" -"Pourquoi les expressions lambda ne peuvent pas contenir d'instructions ?" +"Pourquoi les expressions lambda ne peuvent pas contenir d'instructions ?" #: ../Doc/faq/design.rst:353 msgid "" @@ -673,7 +673,7 @@ msgstr "" "fonction lambda au lieu d'une fonction définie localement est que vous " "n'avez nullement besoin d'un nom pour la fonction -- Mais c'est juste une " "variable locale à laquelle est affecté l'objet fonction (qui est exactement " -"le même type d'objet qui donne une expression lambda) !" +"le même type d'objet qui donne une expression lambda) !" #: ../Doc/faq/design.rst:367 msgid "Can Python be compiled to machine code, C or some other language?" @@ -688,10 +688,15 @@ msgid "" "full Python language. For compiling to Java you can consider `VOC `_." msgstr "" +"`Cython `_ compile une version modifiée de Python avec " +"des annotations optionnelles en extensions C. `Nuitka `_ est un nouveau compilateur de Python vers C++, visant à supporter le " +"langage Python entièrement. Pour compiler en Java, vous pouvez regarder `VOC " +"`_." #: ../Doc/faq/design.rst:377 msgid "How does Python manage memory?" -msgstr "Comment Python gère la mémoire ?" +msgstr "Comment Python gère la mémoire ?" #: ../Doc/faq/design.rst:379 msgid "" @@ -708,7 +713,7 @@ msgstr "" "`CPython`, utilise des compteurs de références afin de détecter des objets " "inaccessibles et un autre mécanisme pour collecter les références " "circulaires, exécutant périodiquement un algorithme de détection de cycles " -"qui recherche les cycles inaccessibles et supprime les objets implqués. Le " +"qui recherche les cycles inaccessibles et supprime les objets impliqués. Le " "module :mod:`gc` fournit des fonctions pour lancer le ramasse-miettes, " "d'obtenir des statistiques de débogage et ajuster ses paramètres." @@ -733,7 +738,7 @@ msgid "" msgstr "" "Dans certaines implémentations de Python, le code suivant (qui marche " "parfaitement avec *CPython*) aurait probablement manqué de descripteurs de " -"fichiers::" +"fichiers ::" #: ../Doc/faq/design.rst:400 msgid "" @@ -757,12 +762,12 @@ msgstr "" "Si vous souhaitez écrire du code qui fonctionne avec n'importe quelle " "implémentation de Python, vous devez explicitement fermer le fichier ou " "utiliser l'instruction :keyword:`with` ; ceci fonctionnera indépendamment du " -"système de gestion de la mémoire::" +"système de gestion de la mémoire ::" #: ../Doc/faq/design.rst:415 msgid "Why doesn't CPython use a more traditional garbage collection scheme?" msgstr "" -"Pourquoi CPython n'utilise-il pas un ramasse-miette plus traditionnel ?" +"Pourquoi CPython n'utilise-il pas un ramasse-miette plus traditionnel ?" #: ../Doc/faq/design.rst:417 msgid "" @@ -790,16 +795,17 @@ msgid "" msgstr "" "Le *GC* classique devient également un problème lorsque Python est incorporé " "dans d'autres applications. Bien que dans une application Python, il ne soit " -"pas gênant de remplacer les fonctions malloc() et free() avec les versions " -"fournies par la bibliothèque *GC*, une application incluant Python peut " -"vouloir avoir ses propres implémentations de malloc() et free() et peut ne " -"pas vouloir celles de Python. À l'heure actuelle, CPython fonctionne avec " -"n'importe quelle implémentation correcte de malloc() et free()." +"pas gênant de remplacer les fonctions ``malloc()`` et ``free()` avec les " +"versions fournies par la bibliothèque *GC*, une application incluant Python " +"peut vouloir avoir ses propres implémentations de ``malloc()`` et ``free()`` " +"et peut ne pas vouloir celles de Python. À l'heure actuelle, CPython " +"fonctionne avec n'importe quelle implémentation correcte de ``malloc()`` et " +"``free()``." #: ../Doc/faq/design.rst:432 msgid "Why isn't all memory freed when CPython exits?" msgstr "" -"Pourquoi toute la mémoire n'est pas libérée lorsque *CPython* s'arrête ?" +"Pourquoi toute la mémoire n'est pas libérée lorsque *CPython* s'arrête ?" #: ../Doc/faq/design.rst:434 msgid "" @@ -810,8 +816,8 @@ msgid "" "about these). Python is, however, aggressive about cleaning up memory on " "exit and does try to destroy every single object." msgstr "" -"Les objets référencés depuis les espaces de noms globaux des modules Python " -"ne sont pas toujours désalloués lorsque Python s'arrête. Cela peut se " +"Les objets référencés depuis les espaces de nommage globaux des modules " +"Python ne sont pas toujours désalloués lorsque Python s'arrête. Cela peut se " "produire s'il y a des références circulaires. Il y a aussi certaines parties " "de mémoire qui sont alloués par la bibliothèque C qui sont impossibles à " "libérer (par exemple un outil comme *Purify* s'en plaindra). Python est, " @@ -830,7 +836,7 @@ msgstr "" #: ../Doc/faq/design.rst:446 msgid "Why are there separate tuple and list data types?" msgstr "" -"Pourquoi les *tuples* et les *list* sont deux types de données séparés ?" +"Pourquoi les *tuples* et les *list* sont deux types de données séparés ?" #: ../Doc/faq/design.rst:448 msgid "" @@ -845,7 +851,7 @@ msgstr "" "généralement utilisés de façons fondamentalement différentes. Les *tuples* " "peuvent être considérés comme étant similaires aux dossiers en Pascal ou aux " "structures en C; Ce sont de petites collections de données associées qui " -"peuvent être de différents types qui sont utilisées sensemble. Par exemple, " +"peuvent être de différents types qui sont utilisées ensemble. Par exemple, " "un repère cartésien est correctement représenté comme un *tuple* de deux ou " "trois nombres." @@ -1007,7 +1013,7 @@ msgstr "" #: ../Doc/faq/design.rst:521 msgid "Some unacceptable solutions that have been proposed:" -msgstr "Certaines solutions insatisfaisantes qui ont été proposées :" +msgstr "Certaines solutions insatisfaisantes qui ont été proposées :" #: ../Doc/faq/design.rst:523 msgid "" @@ -1016,7 +1022,7 @@ msgid "" msgstr "" "Les listes de hachage par leur adresse (*ID* de l'objet). Cela ne " "fonctionne pas parce que si vous créez une nouvelle liste avec la même " -"valeur, elle ne sera pas retrouvée; par exemple.::" +"valeur, elle ne sera pas retrouvée; par exemple ::" #: ../Doc/faq/design.rst:529 msgid "" @@ -1024,10 +1030,10 @@ msgid "" "the second line differs from that in the first line. In other words, " "dictionary keys should be compared using ``==``, not using :keyword:`is`." msgstr "" -"cela soulèverait une exception de type *KeyError* car l'id de ``[1, 2]`` " -"utilisée dans la deuxième ligne diffère de celle de la première ligne. En " +"cela lèverait une exception de type *KeyError* car l'ID de ``[1, 2]`` " +"utilisé dans la deuxième ligne diffère de celle de la première ligne. En " "d'autres termes, les clés de dictionnaire doivent être comparées à l'aide du " -"comparateur ``==`` et non à l'aide du :keyword:`is`." +"comparateur ``==`` et non à l'aide du mot clé :keyword:`is`." #: ../Doc/faq/design.rst:533 msgid "" @@ -1047,6 +1053,11 @@ msgid "" "by accident. It also invalidates an important invariant of dictionaries: " "every value in ``d.keys()`` is usable as a key of the dictionary." msgstr "" +"Autoriser les listes en tant que clés, mais indiquer à l'utilisateur de ne " +"pas les modifier. Cela permettrait un ensemble de bogues difficiles à suivre " +"dans les programmes lorsque vous avez oublié ou modifié une liste par " +"accident. Cela casse également un impératif important des dictionnaires : " +"chaque valeur de ``d.keys()`` est utilisable comme clé du dictionnaire." #: ../Doc/faq/design.rst:542 msgid "" @@ -1057,6 +1068,14 @@ msgid "" "read-only -- and again, self-referential objects could cause an infinite " "loop." msgstr "" +"Marquer les listes comme étant en lecture seule une fois qu'elles sont " +"utilisées comme clé de dictionnaire. Le problème est que ce n'est pas " +"seulement l'objet de niveau supérieur qui pourrait changer sa valeur; vous " +"pourriez utiliser un tuple contenant une liste comme clé. Utiliser " +"n'importe quoi comme une clé dans un dictionnaire nécessiterait de marquer " +"tous les objets accessibles à partir de là comme en lecture seule -- et " +"encore une fois, les objets se faisant référence pourraient provoquer une " +"boucle infinie." #: ../Doc/faq/design.rst:548 msgid "" @@ -1067,6 +1086,13 @@ msgid "" "dictionary (or other hash based structure), remain fixed while the object is " "in the dictionary (or other structure). ::" msgstr "" +"Il y a un truc pour contourner ceci si vous en avez besoin, mais utilisez-le " +"à vos risques et périls. Vous pouvez encapsuler une structure mutable à " +"l'intérieur d'une instance de classe qui a à la fois une méthode :meth:" +"`__eq__` et :meth:`__hash__`. Vous devez ensuite vous assurer que la valeur " +"de hachage pour tous ces objets *wrapper* qui résident dans un dictionnaire " +"(ou une autre structure basée sur le hachage), restent fixes pendant que " +"l'objet est dans le dictionnaire (ou une autre structure). ::" #: ../Doc/faq/design.rst:572 msgid "" @@ -1074,6 +1100,9 @@ msgid "" "members of the list may be unhashable and also by the possibility of " "arithmetic overflow." msgstr "" +"Notez que le calcul de hachage peut être compliqué car il est possible que " +"certains membres de la liste peuvent être impossible à hacher et aussi par " +"la possibilité de débordement arithmétique." #: ../Doc/faq/design.rst:576 msgid "" @@ -1083,6 +1112,11 @@ msgid "" "not. If you fail to meet these restrictions dictionaries and other hash " "based structures will misbehave." msgstr "" +"De plus, il faut toujours que, si ``o1 == o2`` (par exemple ``o1.__eq__(o2) " +"vaut True``) alors ``hash(o1) == hash(o2)`` (par exemple, ``o1.__hash__() == " +"o2.__hash__()``), que l’objet se trouve dans un dictionnaire ou pas. Si vous " +"ne remplissez pas ces conditions, les dictionnaires et autres structures " +"basées sur le hachage se comporteront mal." #: ../Doc/faq/design.rst:581 msgid "" @@ -1091,10 +1125,15 @@ msgid "" "you are prepared to think hard about the requirements and the consequences " "of not meeting them correctly. Consider yourself warned." msgstr "" +"Dans le cas de *ListWrapper*, chaque fois que l'objet *wrapper* est dans un " +"dictionnaire, la liste encapsulée ne doit pas changer pour éviter les " +"anomalies. Ne faites pas cela à moins que vous n’ayez pensé aux potentielles " +"conséquences de ne pas satisfaire entièrement ces conditions. Vous avez été " +"prévenus." #: ../Doc/faq/design.rst:588 msgid "Why doesn't list.sort() return the sorted list?" -msgstr "" +msgstr "Pourquoi ``list.sort()`` ne renvoie pas la liste triée ?" #: ../Doc/faq/design.rst:590 msgid "" @@ -1105,6 +1144,12 @@ msgid "" "when you need a sorted copy but also need to keep the unsorted version " "around." msgstr "" +"Dans les situations où la performance est importante, faire une copie de la " +"liste juste pour la trier serait un gaspillage. Par conséquent, :meth:`list." +"sort` trie la liste en place. Afin de vous le rappeler, il ne retourne pas " +"la liste triée. De cette façon, vous ne serez pas dupés en écrasant " +"accidentellement une liste lorsque vous avez besoin d’une copie triée, mais " +"vous devrez également garder sous la main la version non triée." #: ../Doc/faq/design.rst:596 msgid "" @@ -1113,10 +1158,16 @@ msgid "" "it and returns it. For example, here's how to iterate over the keys of a " "dictionary in sorted order::" msgstr "" +"Si vous souhaitez retourner une nouvelle liste, utilisez plutôt la fonction " +"native :func:`sorted`. Cette fonction crée une nouvelle liste à partir d’un " +"itérable fourni, la trie et la retourne. Par exemple, voici comment itérer " +"sur les clefs d’un dictionnaire dans l’ordre trié ::" #: ../Doc/faq/design.rst:606 msgid "How do you specify and enforce an interface spec in Python?" msgstr "" +"Comment spécifiez-vous et appliquez-vous une spécification d’interface en " +"Python ?" #: ../Doc/faq/design.rst:608 msgid "" @@ -1125,6 +1176,10 @@ msgid "" "module. Many feel that compile-time enforcement of interface specifications " "helps in the construction of large programs." msgstr "" +"Une spécification d'interface pour un module fourni par des langages tels " +"que C++ et Java décrit les prototypes pour les méthodes et les fonctions du " +"module. Beaucoup estiment que la vérification au moment de la compilation " +"des spécifications d'interface aide à la construction de grands programmes." #: ../Doc/faq/design.rst:613 msgid "" @@ -1135,6 +1190,13 @@ msgid "" "`~collections.abc.Iterable`, :class:`~collections.abc.Container`, and :class:" "`~collections.abc.MutableMapping`." msgstr "" +"Python 2.6 ajoute un module :mod:`abc` qui vous permet de définir des " +"classes de base abstraites (ABCs). Vous pouvez ensuite utiliser :func:" +"`isinstance` et :func:`issubclass` pour vérifier si une instance ou une " +"classe implémente une ABC particulière. Le module :mod:`collections.abc` " +"définit un ensemble d'ABCs utiles telles que :class:`~collections.abc." +"Iterable`, :class:`~collections.abc.Container` et :class:`collections.abc." +"MutableMapping`." #: ../Doc/faq/design.rst:620 msgid "" @@ -1142,6 +1204,10 @@ msgid "" "obtained by an appropriate test discipline for components. There is also a " "tool, PyChecker, which can be used to find problems due to subclassing." msgstr "" +"Pour Python, la plupart des avantages des spécifications d'interface peuvent " +"être obtenus par une discipline de test appropriée pour les composants. Il " +"existe aussi un outil, PyChecker, qui peut être utilisé pour trouver des " +"problèmes d'héritage." #: ../Doc/faq/design.rst:624 msgid "" @@ -1154,6 +1220,15 @@ msgid "" "be used to construct exhaustive test suites that exercise every line of code " "in a module." msgstr "" +"Une bonne suite de tests pour un module peut à la fois fournir un test de " +"non régression et servir de spécification d'interface de module ainsi qu'un " +"ensemble d'exemples. De nombreux modules Python peuvent être exécutés en " +"tant que script pour fournir un simple « auto-test ». Même les modules qui " +"utilisent des interfaces externes complexes peuvent souvent être testés " +"isolément à l'aide d'émulations triviales embryonnaires de l'interface " +"externe. Les modules :mod:`doctest` et :mod:`UnitTest` ou des frameworks de " +"test tiers peuvent être utilisés pour construire des suites de tests " +"exhaustives qui éprouvent chaque ligne de code dans un module." #: ../Doc/faq/design.rst:632 msgid "" @@ -1165,6 +1240,15 @@ msgid "" "test that your :meth:`append` implementation will actually do this " "correctly, but it's trivial to check this property in a test suite." msgstr "" +"Une discipline de test appropriée peut aider à construire des applications " +"complexes de grande taille en Python aussi bien que le feraient des " +"spécifications d'interface. En fait, c'est peut être même mieux parce qu'une " +"spécification d'interface ne peut pas tester certaines propriétés d'un " +"programme. Par exemple, la méthode :meth:`Append` est censée ajouter de " +"nouveaux éléments à la fin d'une liste « sur place » ; une spécification " +"d'interface ne peut pas tester que votre implémentation de :meth:`append` va " +"réellement le faire correctement, mais il est trivial de vérifier cette " +"propriété dans une suite de tests." #: ../Doc/faq/design.rst:640 msgid "" @@ -1174,10 +1258,16 @@ msgid "" "before you write any of the actual code. Of course Python allows you to be " "sloppy and not write test cases at all." msgstr "" +"L'écriture des suites de tests est très utile, et vous voudrez peut-être " +"concevoir votre code de manière à le rendre facilement testable. Une " +"technique de plus en plus populaire, le développement dirigé par les tests, " +"requiert d'écrire d'abord des éléments de la suite de tests, avant d'écrire " +"le code réel. Bien sûr, Python vous permet d'être laxiste et de ne pas " +"écrire de test du tout." #: ../Doc/faq/design.rst:648 msgid "Why is there no goto?" -msgstr "Pourquoi n'y a-t-il pas de goto en Python ?" +msgstr "Pourquoi n'y a-t-il pas de ``goto`` en Python ?" #: ../Doc/faq/design.rst:650 msgid "" @@ -1186,11 +1276,11 @@ msgid "" "all reasonable uses of the \"go\" or \"goto\" constructs of C, Fortran, and " "other languages. For example::" msgstr "" -"Vous pouvez utiliser les exceptions afin de mettre en place un \"goto " +"Vous pouvez utiliser les exceptions afin de mettre en place un \"``goto`` " "structuré\" qui fonctionne même avec les appels de fonctions. Beaucoup de " "personnes estiment que les exceptions peuvent émuler idéalement tout " -"utilisation raisonnable des constructions \"go\" ou \"goto\" en C, en " -"Fortran ou autres langages de programmation. Par exemple::" +"utilisation raisonnable des constructions ``go`` ou ``goto`` en C, en " +"Fortran ou autres langages de programmation. Par exemple ::" #: ../Doc/faq/design.rst:665 msgid "" @@ -1198,12 +1288,14 @@ msgid "" "considered an abuse of goto anyway. Use sparingly." msgstr "" "Cela ne vous permet pas de sauter au milieu d'une boucle. Néanmoins, dans " -"tous les cas cela est généralement considéré comme un abus de goto. À " +"tous les cas cela est généralement considéré comme un abus de ``goto``. À " "Utiliser avec parcimonie." #: ../Doc/faq/design.rst:670 msgid "Why can't raw strings (r-strings) end with a backslash?" msgstr "" +"Pourquoi les chaînes de caractères brutes (r-strings) ne peuvent-elles pas " +"se terminer par un *backslash* ?" #: ../Doc/faq/design.rst:672 msgid "" @@ -1211,6 +1303,9 @@ msgid "" "unpaired backslash at the end escapes the closing quote character, leaving " "an unterminated string." msgstr "" +"Plus précisément, elles ne peuvent pas se terminer par un nombre impair de " +"*backslashes* : le *backslash* non appairé à la fin échappe le caractère de " +"guillemet final, laissant une chaîne non terminée." #: ../Doc/faq/design.rst:676 msgid "" @@ -1221,23 +1316,36 @@ msgid "" "pass on the string quote character by escaping it with a backslash. These " "rules work well when r-strings are used for their intended purpose." msgstr "" +"Les chaînes brutes ont été conçues pour faciliter la création de données " +"pour les processeurs de texte (principalement les moteurs d'expressions " +"régulières) qui veulent faire leur propre traitement d'échappement " +"d'*antislashes*. Ces processeurs considèrent un *antislash* de fin non-" +"appairé comme une erreur, alors les chaînes brutes ne le permettent pas. En " +"retour, elles vous permettent de transmettre le caractère de citation de la " +"chaîne en l'échappant avec un *antislash*. Ces règles fonctionnent bien " +"lorsque les chaînes brutes sont utilisées pour leur but premier." #: ../Doc/faq/design.rst:683 msgid "" "If you're trying to build Windows pathnames, note that all Windows system " "calls accept forward slashes too::" msgstr "" +"Si vous essayez de construire des chemins d'accès Windows, notez que tous " +"les appels système Windows acceptent également les *slashes* \"classiques" +"\" ::" #: ../Doc/faq/design.rst:688 msgid "" "If you're trying to build a pathname for a DOS command, try e.g. one of ::" msgstr "" +"Si vous essayez de construire un chemin d'accès pour une commande DOS, " +"essayez par exemple l'un de ceux-là ::" #: ../Doc/faq/design.rst:696 msgid "Why doesn't Python have a \"with\" statement for attribute assignments?" msgstr "" -"Pourquoi la déclaration \"with\" pour les assignations d'attributs n'existe " -"pas en Python ?" +"Pourquoi la déclaration ``with`` pour les assignations d'attributs n'existe " +"pas en Python ?" #: ../Doc/faq/design.rst:698 msgid "" @@ -1245,9 +1353,9 @@ msgid "" "code on the entrance and exit from the block. Some language have a " "construct that looks like this::" msgstr "" -"Python a une instruction \"with\" qui encapsule l'exécution d'un bloc, en " +"Python a une instruction ``with`` qui encapsule l'exécution d'un bloc, en " "appelant le code sur l'entrée et la sortie du bloc. Certains langages " -"possèdent une construction qui ressemble à ceci::" +"possèdent une construction qui ressemble à ceci ::" #: ../Doc/faq/design.rst:706 msgid "In Python, such a construct would be ambiguous." @@ -1282,7 +1390,7 @@ msgstr "" #: ../Doc/faq/design.rst:719 msgid "For instance, take the following incomplete snippet::" -msgstr "" +msgstr "Prenons par exemple l'extrait incomplet suivant ::" #: ../Doc/faq/design.rst:725 msgid "" @@ -1292,6 +1400,11 @@ msgid "" "variable named \"x\", will it be used inside the with block? As you see, " "the dynamic nature of Python makes such choices much harder." msgstr "" +"L'extrait suppose que \"a\" doit avoir un attribut membre appelé \"x\". " +"Néanmoins, il n'y a rien en Python qui en informe l'interpréteur. Que se " +"passe-t-il si \"a\" est, disons, un entier ? Si une variable globale nommée " +"\"x\" existe, sera-t-elle utilisée dans le bloc ``with`` ? Comme vous " +"voyez, la nature dynamique du Python rend ces choix beaucoup plus difficiles." #: ../Doc/faq/design.rst:731 msgid "" @@ -1299,10 +1412,13 @@ msgid "" "code volume) can, however, easily be achieved in Python by assignment. " "Instead of::" msgstr "" +"L'avantage principal de ``with`` et des fonctionnalités de langage " +"similaires (réduction du volume de code) peut, cependant, être facilement " +"réalisé en Python par assignation. Au lieu de ::" #: ../Doc/faq/design.rst:738 msgid "write this::" -msgstr "" +msgstr "écrivez ceci ::" #: ../Doc/faq/design.rst:745 msgid "" @@ -1310,20 +1426,27 @@ msgid "" "bindings are resolved at run-time in Python, and the second version only " "needs to perform the resolution once." msgstr "" +"Cela a également pour effet secondaire d'augmenter la vitesse d'exécution " +"car les liaisons de noms sont résolues au moment de l'exécution en Python, " +"et la deuxième version n'a besoin d'exécuter la résolution qu'une seule fois." #: ../Doc/faq/design.rst:751 msgid "Why are colons required for the if/while/def/class statements?" msgstr "" +"Pourquoi les deux-points sont-ils nécessaires pour les déclarations ``if/" +"while/def/class`` ?" #: ../Doc/faq/design.rst:753 msgid "" "The colon is required primarily to enhance readability (one of the results " "of the experimental ABC language). Consider this::" msgstr "" +"Le deux-points est principalement nécessaires pour améliorer la lisibilité " +"(l'un des résultats du langage expérimental ABC). Considérez ceci ::" #: ../Doc/faq/design.rst:759 msgid "versus ::" -msgstr "" +msgstr "versus ::" #: ../Doc/faq/design.rst:764 msgid "" @@ -1331,6 +1454,9 @@ msgid "" "colon sets off the example in this FAQ answer; it's a standard usage in " "English." msgstr "" +"Remarquez comment le deuxième est un peu plus facile à lire. Remarquez " +"aussi comment un deux-points introduit l'exemple dans cette réponse à la " +"FAQ ; c'est un usage standard en anglais." #: ../Doc/faq/design.rst:767 msgid "" @@ -1339,16 +1465,23 @@ msgid "" "needs to be increased instead of having to do a more elaborate parsing of " "the program text." msgstr "" +"Une autre raison mineure est que les deux-points facilitent la tâche des " +"éditeurs avec coloration syntaxique ; ils peuvent rechercher les deux-points " +"pour décider quand l'indentation doit être augmentée au lieu d'avoir à faire " +"une analyse plus élaborée du texte du programme." #: ../Doc/faq/design.rst:773 msgid "Why does Python allow commas at the end of lists and tuples?" msgstr "" +"Pourquoi Python permet-il les virgules à la fin des listes et des tuples ?" #: ../Doc/faq/design.rst:775 msgid "" "Python lets you add a trailing comma at the end of lists, tuples, and " "dictionaries::" msgstr "" +"Python vous permet d'ajouter une virgule à la fin des listes, des tuples et " +"des dictionnaires ::" #: ../Doc/faq/design.rst:786 msgid "There are several reasons to allow this." @@ -1361,12 +1494,19 @@ msgid "" "remember to add a comma to the previous line. The lines can also be " "reordered without creating a syntax error." msgstr "" +"Lorsque vous avez une valeur littérale pour une liste, un tuple ou un " +"dictionnaire réparti sur plusieurs lignes, il est plus facile d'ajouter plus " +"d'éléments parce que vous n'avez pas besoin de vous rappeler d'ajouter une " +"virgule à la ligne précédente. Les lignes peuvent aussi être réorganisées " +"sans créer une erreur de syntaxe." #: ../Doc/faq/design.rst:793 msgid "" "Accidentally omitting the comma can lead to errors that are hard to " "diagnose. For example::" msgstr "" +"L'omission accidentelle de la virgule peut entraîner des erreurs difficiles " +"à diagnostiquer, par exemple ::" #: ../Doc/faq/design.rst:803 msgid "" @@ -1374,12 +1514,16 @@ msgid "" "\"fee\", \"fiefoo\" and \"fum\". Always adding the comma avoids this source " "of error." msgstr "" +"Cette liste a l'air d'avoir quatre éléments, mais elle en contient en fait " +"trois : \"*fee*\", \"*fiefoo*\" et \"*fum*\". Toujours ajouter la virgule " +"permet d'éviter cette source d'erreur." #: ../Doc/faq/design.rst:806 msgid "" "Allowing the trailing comma may also make programmatic code generation " "easier." msgstr "" +"Permettre la virgule de fin peut également faciliter la génération de code." #~ msgid "Practical answer:" #~ msgstr "Réponse concrète :" diff --git a/faq/extending.po b/faq/extending.po index 20913afd1..eb627b4ef 100644 --- a/faq/extending.po +++ b/faq/extending.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-01-04 15:51+0100\n" +"POT-Creation-Date: 2018-06-10 11:27+0200\n" "PO-Revision-Date: 2018-02-15 00:37+0100\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -21,6 +21,10 @@ msgstr "" msgid "Extending/Embedding FAQ" msgstr "FAQ extension/intégration" +#: ../Doc/faq/extending.rst:6 +msgid "Contents" +msgstr "Sommaire" + #: ../Doc/faq/extending.rst:16 msgid "Can I create my own functions in C?" msgstr "Puis-je créer mes propres fonctions en C ?" @@ -31,10 +35,15 @@ msgid "" "exceptions and even new types in C. This is explained in the document :ref:" "`extending-index`." msgstr "" +"Oui, vous pouvez créer des modules intégrés contenant des fonctions, des " +"variables, des exceptions et même de nouveaux types en C. Ceci est expliqué " +"dans le document :ref:`extending-index`." #: ../Doc/faq/extending.rst:22 msgid "Most intermediate or advanced Python books will also cover this topic." msgstr "" +"La plupart des livres Python intermédiaires ou avancés couvrent également ce " +"sujet." #: ../Doc/faq/extending.rst:26 msgid "Can I create my own functions in C++?" @@ -73,6 +82,11 @@ msgid "" "Cython and Pyrex make it possible to write an extension without having to " "learn Python's C API." msgstr "" +"`Cython `_ et son cousin `Pyrex `_ sont des compilateurs qui " +"acceptent une forme légèrement modifiée de Python et produisent du code C " +"correspondant. Cython et Pyrex permettent d'écrire une extension sans avoir " +"à connaître l'API C de Python." #: ../Doc/faq/extending.rst:50 msgid "" @@ -84,17 +98,26 @@ msgid "" "html>`_, or `Weave `_ are also alternatives " "for wrapping C++ libraries." msgstr "" +"Si vous avez besoin d'accéder à l'interface d'une bibliothèque C ou C++ pour " +"laquelle aucune extension Python n'existe à ce jour, vous pouvez essayer " +"d'encapsuler les types de données et fonctions de la bibliothèque avec un " +"outil tel que `SWIG `_. `SIP `__, `CXX `_, `Boost `_ ou " +"`Weave `_ sont également des alternatives " +"pour encapsuler des bibliothèques C++." #: ../Doc/faq/extending.rst:61 msgid "How can I execute arbitrary Python statements from C?" msgstr "" +"Comment puis-je exécuter des instructions quelconques Python à partir de C ?" #: ../Doc/faq/extending.rst:63 msgid "" "The highest-level function to do this is :c:func:`PyRun_SimpleString` which " "takes a single string argument to be executed in the context of the module " -"``__main__`` and returns 0 for success and -1 when an exception occurred " -"(including ``SyntaxError``). If you want more control, use :c:func:" +"``__main__`` and returns ``0`` for success and ``-1`` when an exception " +"occurred (including ``SyntaxError``). If you want more control, use :c:func:" "`PyRun_String`; see the source for :c:func:`PyRun_SimpleString` in ``Python/" "pythonrun.c``." msgstr "" @@ -102,6 +125,7 @@ msgstr "" #: ../Doc/faq/extending.rst:72 msgid "How can I evaluate an arbitrary Python expression from C?" msgstr "" +"Comment puis-je évaluer une expression quelconque de Python à partir de C ?" #: ../Doc/faq/extending.rst:74 msgid "" @@ -109,10 +133,13 @@ msgid "" "start symbol :c:data:`Py_eval_input`; it parses an expression, evaluates it " "and returns its value." msgstr "" +"Appelez la fonction :c:func:`PyRun_String` de la question précédente avec le " +"symbole de départ :c:data:`Py_eval_input` ; il analyse une expression, " +"l'évalue et renvoie sa valeur." #: ../Doc/faq/extending.rst:80 msgid "How do I extract C values from a Python object?" -msgstr "" +msgstr "Comment puis-je extraire des donnés en C d'un objet Python ?" #: ../Doc/faq/extending.rst:82 msgid "" @@ -121,6 +148,10 @@ msgid "" "specified index. Lists have similar functions, :c:func:`PyListSize` and :c:" "func:`PyList_GetItem`." msgstr "" +"Cela dépend du type d'objet. Si c'est un tuple, :c:func:`PyTuple_Size` " +"renvoie sa longueur et :c:func:`PyTuple_GetItem` renvoie l'élément à l'index " +"spécifié. Les listes ont des fonctions similaires, :c:func:`PyListSize` et :" +"c:func:`PyList_GetItem`." #: ../Doc/faq/extending.rst:87 msgid "" @@ -129,6 +160,10 @@ msgid "" "Note that Python bytes objects may contain null bytes so C's :c:func:" "`strlen` should not be used." msgstr "" +"Pour les bytes, :c:func:`PyBytes_Size` renvoie sa longueur et :c:func:" +"`PyBytes_AsStringAndSize` fournit un pointeur vers sa valeur et sa longueur. " +"Notez que les objets bytes en Python peuvent contenir des valeurs nulles, " +"c'est pourquoi il ne faut pas utiliser la fonction C :c:func:`strlen`." #: ../Doc/faq/extending.rst:92 msgid "" @@ -146,18 +181,26 @@ msgid "" "as many other useful protocols such as numbers (:c:func:`PyNumber_Index` et " "al.) and mappings in the PyMapping APIs." msgstr "" +"Il y a aussi une API de haut niveau pour les objets Python qui est fournie " +"par l'interface dite « abstraite » — voir ``Include/abstract.h`` pour plus " +"de détails. Elle permet l'interfaçage avec tout type de séquence Python en " +"utilisant des appels tels que :c:func:`PySequence_Length`, :c:func:" +"`PySequence_GetItem`, etc. ainsi que de nombreux autres protocoles utiles " +"tels que les nombres (:c:func:`PyNumber_Index` et autres) et les " +"correspondances dans les APIs PyMapping." #: ../Doc/faq/extending.rst:104 msgid "How do I use Py_BuildValue() to create a tuple of arbitrary length?" msgstr "" +"Comment utiliser Py_BuildValue() pour créer un tuple de longueur définie ?" #: ../Doc/faq/extending.rst:106 msgid "You can't. Use :c:func:`PyTuple_Pack` instead." -msgstr "" +msgstr "Vous ne pouvez pas. Utilisez :c:func:`PyTuple_Pack` à la place." #: ../Doc/faq/extending.rst:110 msgid "How do I call an object's method from C?" -msgstr "" +msgstr "Comment puis-je appeler la méthode d'un objet à partir de C ?" #: ../Doc/faq/extending.rst:112 msgid "" @@ -166,6 +209,10 @@ msgid "" "to call, a format string like that used with :c:func:`Py_BuildValue`, and " "the argument values::" msgstr "" +"La fonction :c:func:`PyObject_CallMethod` peut être utilisée pour appeler la " +"méthode d'un objet. Les paramètres sont l'objet, le nom de la méthode à " +"appeler, une chaîne de caractères comme celle utilisée pour :c:func:" +"`Py_BuildValue` et les valeurs des arguments ::" #: ../Doc/faq/extending.rst:121 msgid "" @@ -173,12 +220,17 @@ msgid "" "defined. You are responsible for eventually :c:func:`Py_DECREF`\\ 'ing the " "return value." msgstr "" +"Cela fonctionne pour tous les objets qui ont des méthodes — qu'elles soient " +"intégrées ou définies par l'utilisateur. Vous êtes responsable de « :c:func:" +"`Py_DECREF`\\ *er* » la valeur de retour à la fin." #: ../Doc/faq/extending.rst:124 msgid "" "To call, e.g., a file object's \"seek\" method with arguments 10, 0 " "(assuming the file object pointer is \"f\")::" msgstr "" +"Pour appeler, p. ex., la méthode *seek* d'un objet *file* avec les arguments " +"10, 0 (en supposant que le pointeur de l'objet fichier est *f*) ::" #: ../Doc/faq/extending.rst:135 msgid "" @@ -187,12 +239,18 @@ msgid "" "format, and to call a function with one argument, surround the argument in " "parentheses, e.g. \"(i)\"." msgstr "" +"Notez que :c:func:`PyObject_CallObject` veut *toujours* un tuple comme liste " +"d'arguments. Aussi, pour appeler une fonction sans arguments, utilisez " +"\"()\" pour être conforme au type et, pour appeler une fonction avec un " +"paramètre, entourez-le de parenthèses, p. ex. \"(i)\"." #: ../Doc/faq/extending.rst:142 msgid "" "How do I catch the output from PyErr_Print() (or anything that prints to " "stdout/stderr)?" msgstr "" +"Comment puis-je récupérer la sortie de ``PyErr_Print()`` (ou tout ce qui " +"s'affiche sur *stdout*/*stderr*) ?" #: ../Doc/faq/extending.rst:144 msgid "" @@ -201,22 +259,29 @@ msgid "" "print_error, or just allow the standard traceback mechanism to work. Then, " "the output will go wherever your ``write()`` method sends it." msgstr "" +"Dans le code Python, définissez un objet qui possède la méthode ``write()``. " +"Affectez cet objet à :data:`sys.stdout` et :data:`sys.stderr`. Appelez " +"*print_error* ou faites simplement en sorte que le mécanisme standard de " +"remontée des erreurs fonctionne. Ensuite, la sortie sera dirigée vers " +"l'endroit où votre méthode ``write()`` écrit." #: ../Doc/faq/extending.rst:149 msgid "The easiest way to do this is to use the :class:`io.StringIO` class:" msgstr "" +"La façon la plus simple consiste à utiliser la classe :class:`io.StringIO` :" #: ../Doc/faq/extending.rst:161 msgid "A custom object to do the same would look like this:" msgstr "" +"Le code d'un objet à la fonctionnalité similaire ressemblerait à ceci :" #: ../Doc/faq/extending.rst:182 msgid "How do I access a module written in Python from C?" -msgstr "" +msgstr "Comment accéder à un module écrit en Python à partir de C ?" #: ../Doc/faq/extending.rst:184 msgid "You can get a pointer to the module object as follows::" -msgstr "" +msgstr "Vous pouvez obtenir un pointeur sur l'objet module comme suit ::" #: ../Doc/faq/extending.rst:188 msgid "" @@ -226,22 +291,32 @@ msgid "" "module into any namespace -- it only ensures it has been initialized and is " "stored in :data:`sys.modules`." msgstr "" +"Si le module n'a pas encore été importé (c.-à-d. qu'il n'est pas encore " +"présent dans :data:`sys.modules`), cela initialise le module ; sinon il " +"renvoie simplement la valeur de ``sys.modules[\"\"]``. Notez " +"qu'il n'inscrit le module dans aucun espace de nommage — il s'assure " +"seulement qu'il a été initialisé et qu'il est stocké dans :data:`sys." +"modules`." #: ../Doc/faq/extending.rst:194 msgid "" "You can then access the module's attributes (i.e. any name defined in the " "module) as follows::" msgstr "" +"Vous pouvez alors accéder aux attributs du module (c.-à-d. à tout nom défini " +"dans le module) comme suit ::" #: ../Doc/faq/extending.rst:199 msgid "" "Calling :c:func:`PyObject_SetAttrString` to assign to variables in the " "module also works." msgstr "" +"Appeler :c:func:`PyObject_SetAttrString` pour assigner des valeurs aux " +"variables du module fonctionne également." #: ../Doc/faq/extending.rst:204 msgid "How do I interface to C++ objects from Python?" -msgstr "" +msgstr "Comment s'interfacer avec les objets C++ depuis Python ?" #: ../Doc/faq/extending.rst:206 msgid "" @@ -252,14 +327,22 @@ msgid "" "building a new Python type around a C structure (pointer) type will also " "work for C++ objects." msgstr "" +"Selon vos besoins, de nombreuses approches sont possibles. Pour le faire " +"manuellement, commencez par lire :ref:`le document \"Extension et intégration" +"\" `. Sachez que pour le système d'exécution Python, il n'y " +"a pas beaucoup de différence entre C et C++ — donc la méthode pour " +"construire un nouveau type Python à partir d'une structure C (pointeur) " +"fonctionne également avec des objets en C++." #: ../Doc/faq/extending.rst:212 msgid "For C++ libraries, see :ref:`c-wrapper-software`." -msgstr "" +msgstr "Pour les bibliothèques C++, voir :ref:`c-wrapper-software`." #: ../Doc/faq/extending.rst:216 msgid "I added a module using the Setup file and the make fails; why?" msgstr "" +"J'ai ajouté un module en utilisant le fichier *Setup* et la compilation " +"échoue ; pourquoi ?" #: ../Doc/faq/extending.rst:218 msgid "" @@ -267,30 +350,40 @@ msgid "" "fails. (Fixing this requires some ugly shell script hackery, and this bug " "is so minor that it doesn't seem worth the effort.)" msgstr "" +"Le fichier *Setup* doit se terminer par une ligne vide, s'il n'y a pas de " +"ligne vide, le processus de compilation échoue (ce problème peut se régler " +"en bidouillant un script shell, et ce bogue est si mineur qu'il ne mérite " +"pas qu'on s'y attarde)." #: ../Doc/faq/extending.rst:224 msgid "How do I debug an extension?" -msgstr "" +msgstr "Comment déboguer une extension ?" #: ../Doc/faq/extending.rst:226 msgid "" "When using GDB with dynamically loaded extensions, you can't set a " "breakpoint in your extension until your extension is loaded." msgstr "" +"Lorsque vous utilisez GDB avec des extensions chargées dynamiquement, vous " +"ne pouvez pas placer de point d'arrêt dans votre extension tant que celle-ci " +"n'est pas chargée." #: ../Doc/faq/extending.rst:229 msgid "In your ``.gdbinit`` file (or interactively), add the command:" msgstr "" +"Dans votre fichier ``.gdbinit`` (ou manuellement), ajoutez la commande :" #: ../Doc/faq/extending.rst:235 msgid "Then, when you run GDB:" -msgstr "" +msgstr "Ensuite, lorsque vous exécutez GDB :" #: ../Doc/faq/extending.rst:247 msgid "" "I want to compile a Python module on my Linux system, but some files are " "missing. Why?" msgstr "" +"Je veux compiler un module Python sur mon système Linux, mais il manque " +"certains fichiers. Pourquoi ?" #: ../Doc/faq/extending.rst:249 msgid "" @@ -298,18 +391,25 @@ msgid "" "{x}/config/` directory, which contains various files required for compiling " "Python extensions." msgstr "" +"La plupart des versions pré-compilées de Python n'incluent pas le " +"répertoire :file:`/usr/lib/python2.{x}/config/`, qui contient les différents " +"fichiers nécessaires à la compilation des extensions Python." #: ../Doc/faq/extending.rst:253 msgid "For Red Hat, install the python-devel RPM to get the necessary files." msgstr "" +"Pour Red Hat, installez le RPM *python-devel* pour obtenir les fichiers " +"nécessaires." #: ../Doc/faq/extending.rst:255 msgid "For Debian, run ``apt-get install python-dev``." -msgstr "" +msgstr "Pour Debian, exécutez ``apt-get install python-dev``." #: ../Doc/faq/extending.rst:259 msgid "How do I tell \"incomplete input\" from \"invalid input\"?" msgstr "" +"Comment distinguer une « entrée incomplète » (*incomplete input*) d'une " +"« entrée invalide » (*invalid input*) ?" #: ../Doc/faq/extending.rst:261 msgid "" @@ -319,12 +419,19 @@ msgid "" "parentheses or triple string quotes), but it gives you a syntax error " "message immediately when the input is invalid." msgstr "" +"Parfois vous souhaitez émuler le comportement de l'interpréteur interactif " +"Python, quand il vous donne une invite de continuation lorsque l'entrée est " +"incomplète (par exemple, vous avez tapé le début d'une instruction \"if\" ou " +"vous n'avez pas fermé vos parenthèses ou triple guillemets) mais il vous " +"renvoie immédiatement une erreur syntaxique quand la saisie est incorrecte." #: ../Doc/faq/extending.rst:267 msgid "" "In Python you can use the :mod:`codeop` module, which approximates the " "parser's behavior sufficiently. IDLE uses this, for example." msgstr "" +"En Python, vous pouvez utiliser le module :mod:`codeop`, qui se rapproche " +"assez du comportement de l'analyseur. Par exemple, IDLE l'utilise." #: ../Doc/faq/extending.rst:270 msgid "" @@ -334,6 +441,12 @@ msgid "" "to point at your custom input function. See ``Modules/readline.c`` and " "``Parser/myreadline.c`` for more hints." msgstr "" +"La façon la plus simple de le faire en C est d'appeler :c:func:" +"`PyRun_InteractiveLoop` (peut-être dans un autre fil d'exécution) et laisser " +"l'interpréteur Python gérer l'entrée pour vous. Vous pouvez également " +"définir :c:func:`PyOS_ReadlineFunctionPointer` pour pointer vers votre " +"fonction d'entrée personnalisée. Voir ``Modules/readline.c`` et ``Parser/" +"myreadline.c`` pour plus de conseils." #: ../Doc/faq/extending.rst:276 msgid "" @@ -356,10 +469,21 @@ msgid "" "\". Here is a complete example using the GNU readline library (you may want " "to ignore **SIGINT** while calling readline())::" msgstr "" +"Une autre solution est d'essayer de compiler la chaîne reçue avec :c:func:" +"`Py_CompileString`. Si cela se compile sans erreur, essayez d'exécuter " +"l'objet code renvoyé en appelant :c:func:`PyEval_EvalCode`. Sinon, " +"enregistrez l'entrée pour plus tard. Si la compilation échoue, vérifiez s'il " +"s'agit d'une erreur ou s'il faut juste plus de données — en extrayant la " +"chaîne de message du tuple d'exception et en la comparant à la chaîne *" +"\"unexpected EOF while parsing\"*. Voici un exemple complet d'utilisation de " +"la bibliothèque *readline* de GNU (il vous est possible d'ignorer **SIGINT** " +"lors de l'appel à ``readline()``) ::" #: ../Doc/faq/extending.rst:430 msgid "How do I find undefined g++ symbols __builtin_new or __pure_virtual?" msgstr "" +"Comment puis-je trouver les symboles g++ indéfinis ``__builtin_new`` ou " +"``__pure_virtual`` ?" #: ../Doc/faq/extending.rst:432 msgid "" @@ -367,18 +491,27 @@ msgid "" "it using g++ (change LINKCC in the Python Modules Makefile), and link your " "extension module using g++ (e.g., ``g++ -shared -o mymodule.so mymodule.o``)." msgstr "" +"Pour charger dynamiquement les modules d'extension g++, vous devez " +"recompiler Python, effectuer l'édition de liens en utilisant g++ (modifiez " +"*LINKCC* dans le *Python Modules Makefile*), et effectuer l'édition de liens " +"de votre module d'extension avec g++ (par exemple, ``g++ -shared -o mymodule." +"so mymodule.o``)." #: ../Doc/faq/extending.rst:438 msgid "" "Can I create an object class with some methods implemented in C and others " "in Python (e.g. through inheritance)?" msgstr "" +"Puis-je créer une classe d'objets avec certaines méthodes implémentées en C " +"et d'autres en Python (p. ex. en utilisant l'héritage) ?" #: ../Doc/faq/extending.rst:440 msgid "" "Yes, you can inherit from built-in classes such as :class:`int`, :class:" "`list`, :class:`dict`, etc." msgstr "" +"Oui, vous pouvez hériter de classes intégrées telles que :class:`int`, :" +"class:`list`, :class:`dict`, etc." #: ../Doc/faq/extending.rst:443 msgid "" @@ -386,3 +519,6 @@ msgid "" "html) provides a way of doing this from C++ (i.e. you can inherit from an " "extension class written in C++ using the BPL)." msgstr "" +"La bibliothèque *Boost Python Library* (BPL, http://www.boost.org/libs/" +"python/doc/index.html) fournit un moyen de le faire depuis C++ (c.-à-d. que " +"vous pouvez hériter d'une classe d'extension écrite en C++ en utilisant BPL)." diff --git a/faq/general.po b/faq/general.po index d1829c6f8..70b871155 100644 --- a/faq/general.po +++ b/faq/general.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-12 13:37+0200\n" -"PO-Revision-Date: 2018-02-15 00:37+0100\n" +"POT-Creation-Date: 2018-06-10 11:27+0200\n" +"PO-Revision-Date: 2018-06-10 16:25+0200\n" "Last-Translator: Julien Palard \n" "Language-Team: \n" "Language: fr\n" @@ -21,6 +21,10 @@ msgstr "" msgid "General Python FAQ" msgstr "FAQ générale sur Python" +#: ../Doc/faq/general.rst:8 +msgid "Contents" +msgstr "Sommaire" + #: ../Doc/faq/general.rst:13 msgid "General Information" msgstr "Informations générales" @@ -94,8 +98,8 @@ msgstr "" #: ../Doc/faq/general.rst:47 msgid "Are there copyright restrictions on the use of Python?" msgstr "" -"Y'a-t-il des restrictions liées à la propriété intelectuelle quant à " -"l'utilisation de Python ?" +"Existe-il des restrictions liées à la propriété intellectuelle quant à " +"l'utilisation de Python ?" #: ../Doc/faq/general.rst:49 msgid "" @@ -258,7 +262,7 @@ msgid "" "filesystems, TCP/IP sockets). Look at the table of contents for :ref:" "`library-index` to get an idea of what's available. A wide variety of third-" "party extensions are also available. Consult `the Python Package Index " -"`_ to find packages of interest to you." +"`_ to find packages of interest to you." msgstr "" "Le langage vient avec une bibliothèque standard importante qui couvre des " "domaines tels que le traitement des chaînes de caractères (expressions " @@ -266,11 +270,11 @@ msgstr "" "protocoles Internet (HTTP, FTP, SMTP, XML-RPC, POP, IMAP, script CGI), " "ingénierie logicielle (tests unitaires, enregistrement, analyse de code " "Python), et interfaces pour systèmes d'exploitation (appels système, système " -"de fichiers, *socket* TCP/IP). Regardez la table des matières :ref:`library-" -"index` pour avoir une idée de ce qui est disponible. Une gande variété de " -"greffons tiers existent aussi. Consultez `le sommaire des paquets Python " -"`_ pour trouver les paquets qui pourraient " -"vous intéresser." +"de fichiers, connecteurs TCP/IP). Regardez la table des matières :ref:" +"`library-index` pour avoir une idée de ce qui est disponible. Une grande " +"variété de greffons tiers existent aussi. Consultez `le sommaire des paquets " +"Python `_ pour trouver les paquets qui pourraient vous " +"intéresser." #: ../Doc/faq/general.rst:125 msgid "How does the Python version numbering scheme work?" @@ -302,10 +306,10 @@ msgid "" msgstr "" "Toutes les sorties ne concernent pas la correction de bogues. A l'approche " "de la sortie d'une nouvelle version majeure, une série de versions de " -"développement sont créées, dénommées alpha, beta, *release candidate*. Les " -"alphas sont des versions primaires dans lesquelles les interfaces ne sont " -"pas encore finalisées; ce n'est pas inattendu de voir des changements " -"d'interface entre deux versions alpha. Les betas sont plus stables, " +"développement sont créées, dénommées *alpha*, *beta*, *release candidate*. " +"Les alphas sont des versions primaires dans lesquelles les interfaces ne " +"sont pas encore finalisées; ce n'est pas inattendu de voir des changements " +"d'interface entre deux versions alpha. Les *betas* sont plus stables, " "préservent les interfaces existantes mais peuvent ajouter de nouveaux " "modules, les *release candidate* sont figées, elles ne font aucun changement " "à l'exception de ceux nécessaires pour corriger des bogues critiques." @@ -319,13 +323,13 @@ msgid "" "words, all versions labeled 2.0aN precede the versions labeled 2.0bN, which " "precede versions labeled 2.0cN, and *those* precede 2.0." msgstr "" -"Les versions alpha, beta et *release candidate* ont un suffixe " +"Les versions *alpha*, *beta* et *release candidate* ont un suffixe " "supplémentaire. Le suffixe pour une version alpha est « aN » où N est un " -"petit nombre, le suffixe pour une version beta est « bN » où N est un petit " +"petit nombre, le suffixe pour une version *beta* est *bN* où N est un petit " "nombre, et le suffixe pour une *release candidate* est « cN » où N est un " -"petit nombre. En d'autres mots, toutes les versions nommées 2.0.aN précèdent " -"les versions 2.0.bN, qui elles-mêmes précèdent 2.0cN, et *celles-ci* " -"précèdent la version 2.0." +"petit nombre. En d'autres mots, toutes les versions nommées *2.0.aN* " +"précèdent les versions *2.0.bN*, qui elles-mêmes précèdent 2.0cN, et *celles-" +"ci* précèdent la version 2.0." #: ../Doc/faq/general.rst:148 msgid "" @@ -339,7 +343,7 @@ msgstr "" "exemple « 2.2+». Ces versions sont non distribuées, construites directement " "depuis le dépôt de développement de CPython. En pratique, après la sortie " "finale d'une version mineure, la version est augmentée à la prochaine " -"version mineure, qui devient la version « a0 », c'est-à-dire « 2.4a0 »." +"version mineure, qui devient la version *a0*, c'est-à-dire *2.4a0*." #: ../Doc/faq/general.rst:153 msgid "" @@ -371,9 +375,9 @@ msgid "" "programs, and several useful pieces of freely distributable software. The " "source will compile and run out of the box on most UNIX platforms." msgstr "" -"Le code source est dans une archive *gzippée* au format tar, elle contient " +"Le code source est dans une archive *gzippée* au format *tar*, elle contient " "le code source C complet, la documentation formatée avec Sphinx, les " -"libraires Python, des exemples de programmes, et plusieurs morceux de code " +"libraires Python, des exemples de programmes, et plusieurs morceaux de code " "utiles distribuables librement. Le code source sera compilé et prêt à " "fonctionner immédiatement sur la plupart des plateformes UNIX." @@ -407,14 +411,14 @@ msgid "" "Sphinx documentation tool `__. The reStructuredText " "source for the documentation is part of the Python source distribution." msgstr "" -"La documentation est écrite au format reStructuredText et traitée par " -"l'outil de documentation Sphinx `__. La source du " -"reStructuredText pour la documentation constitue une partie des sources de " +"La documentation est écrite au format *reStructuredText* et traitée par " +"l'outil de documentation `Sphinx `__. La source du " +"*reStructuredText* pour la documentation constitue une partie des sources de " "Python." #: ../Doc/faq/general.rst:189 msgid "I've never programmed before. Is there a Python tutorial?" -msgstr "Je n'ai jamais prorgammé avant. Existe t-il un tutoriel Python ?" +msgstr "Je n'ai jamais programmé avant. Existe t-il un tutoriel Python ?" #: ../Doc/faq/general.rst:191 msgid "" @@ -463,7 +467,7 @@ msgid "" "`_." msgstr "" "Les annonces pour les nouvelles versions et événements peuvent êtres " -"trouvées dans comp.lang.python.announce, une liste diminuée peu active qui " +"trouvées dans *comp.lang.python.announce*, une liste diminuée peu active qui " "reçoit environ 5 messages par jour. C'est disponible à `liste de diffusion " "des annonces Python `_." @@ -488,16 +492,17 @@ msgid "" "python.org/; an RSS feed of news is available." msgstr "" "Les versions alpha et bêta sont disponibles depuis https://www.python.org/" -"downloads/. Toutes les versions annoncées sur comp.lang.python and comp.lang." -"python.announce newsgroups et sur la page d'accueil de Python à https://www." -"python.org/; un flux RSS de *news* est disponible." +"downloads/. Toutes les versions sont annoncées sur les *newsgroups* *comp." +"lang.python* et *comp.lang.python.announce* ainsi que sur la page d'accueil " +"de Python à https://www.python.org/; un flux RSS d'actualités y est aussi " +"disponible." #: ../Doc/faq/general.rst:225 msgid "" "You can also access the development version of Python through Git. See `The " "Python Developer's Guide `_ for details." msgstr "" -"Vous pouvez aussi accéder aux de Python en dévloppement grâce à Git. Voir " +"Vous pouvez aussi accéder aux de Python en développement grâce à Git. Voir " "`Le Guide du Développeur Python `_ pour plus " "de détails." @@ -535,7 +540,7 @@ msgid "" "For more information on how Python is developed, consult `the Python " "Developer's Guide `_." msgstr "" -"Pour davantages d'informations sur comment Python est développé, consultez " +"Pour davantage d'informations sur comment Python est développé, consultez " "`le Guide du Développeur Python `_." #: ../Doc/faq/general.rst:246 @@ -564,8 +569,8 @@ msgid "" "Using the Python Programming Language\", CWI Quarterly, Volume 4, Issue 4 " "(December 1991), Amsterdam, pp 283--303." msgstr "" -"Guido van Rossum et Jelke de Boer, « Interactively Testing Remote Servers " -"Using the Python Programming Language », CWI Quarterly, Volume 4, Issue 4 " +"Guido van Rossum et Jelke de Boer, « *Interactively Testing Remote Servers " +"Using the Python Programming Language* », CWI Quarterly, Volume 4, Issue 4 " "(December 1991), Amsterdam, pp 283--303." #: ../Doc/faq/general.rst:259 @@ -586,7 +591,7 @@ msgid "" "Monty Python references; or perhaps search for \"Python\" and \"language\"." msgstr "" "Vous pouvez aussi chercher chez les revendeurs de livres en ligne avec le " -"terme « Python » et éléminer les références concernant les Monty Python, ou " +"terme « Python » et éliminer les références concernant les Monty Python, ou " "peut-être faire une recherche avec les termes « langage » et « Python »." #: ../Doc/faq/general.rst:269 @@ -709,15 +714,15 @@ msgid "" msgstr "" "Python est disponible en téléchargement gratuit, donc il n'y a pas de " "chiffres de ventes, il est disponible depuis de nombreux sites différents et " -"il est inclus avec de beaucoup de distributions Linux, donc les " -"statistisques de téléchargement ne donnent pas la totalité non plus." +"il est inclus avec de beaucoup de distributions Linux, donc les statistiques " +"de téléchargement ne donnent pas la totalité non plus." #: ../Doc/faq/general.rst:332 msgid "" "The comp.lang.python newsgroup is very active, but not all Python users post " "to the group or even read it." msgstr "" -"Le forum comp.lang.python est très actif, mais tous les utilisateurs de " +"Le forum *comp.lang.python* est très actif, mais tous les utilisateurs de " "Python ne laissent pas de messages dessus ou même ne le lisent pas." #: ../Doc/faq/general.rst:337 @@ -751,7 +756,7 @@ msgstr "" "zope.org>`_. Plusieurs distributions Linux, notamment `Red Hat `_, qui a écrit tout ou partie de son installateur et de son " "logiciel d'administration système en Python. Les entreprises qui utilisent " -"Python en interne comprennent Google, Yahoo, and Lucasfilm Ltd." +"Python en interne comprennent Google, Yahoo, et Lucasfilm Ltd." #: ../Doc/faq/general.rst:353 msgid "What new developments are expected for Python in the future?" @@ -765,12 +770,12 @@ msgid "" "for a PEP titled \"Python X.Y Release Schedule\", where X.Y is a version " "that hasn't been publicly released yet." msgstr "" -"Regardez https://www.python.org/dev/peps/ pour Python Enhancement Proposals " -"(PEPs). PEPs sont des documents techniques qui décrivent une nouvelle " -"fonctionnalité qui a été suggérée pour Python, en fournissant une " -"spécification technique concise et logique. Recherchez une PEP intitulée " -"\"Python X.Y Release Schedule\", où X.Y est la version qui n'a pas encore " -"été publiée." +"Regardez les propositions d'amélioration de Python (« *Python Enhancement " +"Proposals* », ou *PEP*) sur https://www.python.org/dev/peps/. Les PEP sont " +"des documents techniques qui décrivent une nouvelle fonctionnalité qui a été " +"suggérée pour Python, en fournissant une spécification technique concise et " +"logique. Recherchez une PEP intitulée \"Python X.Y Release Schedule\", où X." +"Y est la version qui n'a pas encore été publiée." #: ../Doc/faq/general.rst:361 msgid "" @@ -880,10 +885,10 @@ msgstr "" "De nombreux autres aspects de Python en font un bon premier langage. Comme " "Java, Python a une large bibliothèque standard donc les étudiants peuvent " "être assigner à la programmation de projets très tôt dans leur apprentissage " -"qui *fait* quelque chose. Les missions ne sont pas restreintes aux quatres " +"qui *fait* quelque chose. Les missions ne sont pas restreintes aux quatre " "fonction standards. En utilisant la bibliothèque standard, les étudiants " "peuvent ressentir de la satisfaction en travaillant sur des applications " -"réalistes alors qu'ils apprenent les fondamentaux de la programmation. " +"réalistes alors qu'ils apprennent les fondamentaux de la programmation. " "Utiliser la bibliothèque standard apprend aussi aux étudiants la " "réutilisation de code. Les modules tiers tels que PyGame sont aussi très " "utiles pour étendre les compétences des étudiants." @@ -899,8 +904,8 @@ msgstr "" "fonctionnalités du langage pendant qu'ils programment. Ils peuvent garder " "une fenêtre avec l'interpréteur en fonctionnement pendant qu'ils rentrent la " "source de leur programme dans une autre fenêtre. S'ils ne peuvent pas se " -"souvenir des méthodes pour une listen, ils peuvent faire quelque chose comme " -"ça :" +"souvenir des méthodes pour une liste, ils peuvent faire quelque chose comme " +"ça ::" #: ../Doc/faq/general.rst:441 msgid "" @@ -922,7 +927,7 @@ msgid "" msgstr "" "Il y a aussi de bons environnements de développement intégrés (EDIs) pour " "Python. IDLE est un EDI multiplateforme pour Python qui est écrit en Python " -"en utilisant Tkinter. PythonWin est EDI spécifique à Windows. Les " +"en utilisant Tkinter. *PythonWin* est un IDE spécifique à Windows. Les " "utilisateurs d'Emcs seront heureux d'apprendre qu'il y a un très bon mode " "Python pour Emacs. Tous ces environnements de développement intégrés " "fournissent la coloration syntaxique, l'auto-indentation, et l'accès à " @@ -936,6 +941,6 @@ msgid "" "joining `the edu-sig mailing list `_." msgstr "" -"Si vous voulez discuter de l'usage fe Python dans l'éducation, vous devriez " +"Si vous voulez discuter de l'usage de Python dans l'éducation, vous devriez " "intéressé pour rejoindre `la liste de diffusion pour l'enseignement `_." diff --git a/faq/gui.po b/faq/gui.po index 4803ecc78..a8483eed0 100644 --- a/faq/gui.po +++ b/faq/gui.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-01 13:21+0200\n" +"POT-Creation-Date: 2018-06-10 11:27+0200\n" "PO-Revision-Date: 2018-02-15 00:37+0100\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -21,13 +21,19 @@ msgstr "" msgid "Graphic User Interface FAQ" msgstr "FAQ interface graphique" +#: ../Doc/faq/gui.rst:8 +msgid "Contents" +msgstr "Sommaire" + #: ../Doc/faq/gui.rst:15 msgid "General GUI Questions" msgstr "Questions générales sur l'interface graphique" #: ../Doc/faq/gui.rst:18 msgid "What platform-independent GUI toolkits exist for Python?" -msgstr "Quelles boites à outils multi-platforme existe-t-il sur Python ?" +msgstr "" +"Quelles bibliothèques d'interfaces graphiques multi-plateformes existent en " +"Python ?" #: ../Doc/faq/gui.rst:20 msgid "" @@ -36,12 +42,12 @@ msgid "" "known to be Python 3-compatible." msgstr "" "Selon les plateformes que vous comptez utiliser, il en existe plusieurs. " -"Certaines ne sont cependant pas encore disponible en Python 3. A minima, " -"`Tkinter`_ et `Qt`_ sont connus pour être compatible avec Python 3." +"Certaines ne sont cependant pas encore disponibles en Python 3. A minima, " +"`Tkinter`_ et `Qt`_ sont connus pour être compatibles avec Python 3." #: ../Doc/faq/gui.rst:27 msgid "Tkinter" -msgstr "Tkinter" +msgstr "*Tkinter*" #: ../Doc/faq/gui.rst:29 msgid "" @@ -53,10 +59,18 @@ msgid "" "tk>`_. Tcl/Tk is fully portable to the Mac OS X, Windows, and Unix " "platforms." msgstr "" +"Les versions standards de Python incluent une interface orientée objet pour " +"le jeu d'objets graphiques *Tcl/Tk*, appelée :ref:`tkinter `. " +"C'est probablement la plus facile à installer (puisqu'elle est incluse avec " +"la plupart des `distributions binaires `_ " +"de Python) et à utiliser. Pour plus d'informations sur *Tk*, y compris les " +"liens vers les sources, voir la page d'accueil `Tcl/Tk `_. *Tcl/Tk* est entièrement portable sur les plates-formes Mac OS X, " +"Windows et Unix." #: ../Doc/faq/gui.rst:38 msgid "wxWidgets" -msgstr "wxWidgets" +msgstr "*wxWidgets*" #: ../Doc/faq/gui.rst:40 msgid "" @@ -66,6 +80,11 @@ msgid "" "targets. Language bindings are available for a number of languages " "including Python, Perl, Ruby, etc." msgstr "" +"`wxWidgets` (https://www.wxwidgets.org) est une librairie de classe IUG " +"portable et gratuite écrite en C++ qui fournit une apparence native sur un " +"certain nombre de plates-formes, elle est notamment en version stable pour " +"Windows, Mac OS X, GTK et X11. Des clients sont disponibles pour un certain " +"nombre de langages, y compris Python, Perl, Ruby, etc." #: ../Doc/faq/gui.rst:46 msgid "" @@ -87,10 +106,14 @@ msgid "" "licences that allow their use in commercial products as well as in freeware " "or shareware." msgstr "" +"*wxWidgets* et *wxPython* sont tous deux des logiciels libres, open source, " +"avec des licences permissives qui permettent leur utilisation dans des " +"produits commerciaux ainsi que dans des logiciels gratuits ou contributifs " +"(*shareware*)." #: ../Doc/faq/gui.rst:58 msgid "Qt" -msgstr "" +msgstr "*Qt*" #: ../Doc/faq/gui.rst:60 msgid "" @@ -102,16 +125,26 @@ msgid "" "com/commercial/license-faq>`_ if you want to write proprietary " "applications. PySide is free for all applications." msgstr "" +"Il existe des liens disponibles pour la boîte à outils *Qt* (en utilisant " +"soit `PyQt `_ ou `PySide " +"`_) et pour *KDE* (`PyKDE4 `__). *PyQt* est actuellement plus mûre " +"que *PySide*, mais*PyQt* nécessite d'acheter une licence de `Riverbank " +"Computing `_ si " +"vous voulez écrire des applications propriétaires. *PySide* est gratuit " +"pour toutes les applications." #: ../Doc/faq/gui.rst:67 msgid "" "Qt 4.5 upwards is licensed under the LGPL license; also, commercial licenses " "are available from `The Qt Company `_." msgstr "" +"*Qt >= 4.5* est sous licence LGPL ; de plus, des licences commerciales sont " +"disponibles auprès de `The Qt Company `_." #: ../Doc/faq/gui.rst:71 msgid "Gtk+" -msgstr "" +msgstr "*Gtk+*" #: ../Doc/faq/gui.rst:73 msgid "" @@ -129,7 +162,7 @@ msgstr "" #: ../Doc/faq/gui.rst:81 msgid "Kivy" -msgstr "" +msgstr "*Kivy*" #: ../Doc/faq/gui.rst:83 msgid "" @@ -138,15 +171,20 @@ msgid "" "(Android, iOS). It is written in Python and Cython, and can use a range of " "windowing backends." msgstr "" +"`*Kivy* `_ est une bibliothèque GUI multi-plateformes " +"disponible à la fois sur les systèmes d'exploitation de bureau (Windows, " +"MacOS, Linux) et les appareils mobiles (Android, iOS). Elle est écrite en " +"Python et Cython, et peut utiliser une série de fenêtres de *backends*." #: ../Doc/faq/gui.rst:88 msgid "" "Kivy is free and open source software distributed under the MIT license." msgstr "" +"*Kivy* est un logiciel libre et open source distribué sous licence MIT." #: ../Doc/faq/gui.rst:91 msgid "FLTK" -msgstr "" +msgstr "*FLTK*" #: ../Doc/faq/gui.rst:93 msgid "" @@ -154,18 +192,24 @@ msgid "" "powerful and mature cross-platform windowing system, are available from `the " "PyFLTK project `_." msgstr "" +"Les liaisons Python pour `the FLTK toolkit `_, un " +"système de fenêtrage multi-plateformes simple mais puissant et mûr, sont " +"disponibles auprès de `the PyFLTK project `_." #: ../Doc/faq/gui.rst:98 msgid "OpenGL" -msgstr "" +msgstr "*OpenGL*" #: ../Doc/faq/gui.rst:100 msgid "For OpenGL bindings, see `PyOpenGL `_." msgstr "" +"Pour les clients OpenGL, voir `PyOpenGL `_." #: ../Doc/faq/gui.rst:104 msgid "What platform-specific GUI toolkits exist for Python?" msgstr "" +"Quelles boîtes à outils IUG spécifiques à la plate-forme existent pour " +"Python ?" #: ../Doc/faq/gui.rst:106 msgid "" @@ -179,14 +223,17 @@ msgid "" "Microsoft Foundation Classes and a Python programming environment that's " "written mostly in Python using the MFC classes." msgstr "" +":ref:`Pythonwin ` de Mark Hammond inclut une interface vers les " +"classes `Microsoft Foundation Classes` et un environnement de programmation " +"Python qui est écrit principalement en Python utilisant les classes *MFC*." #: ../Doc/faq/gui.rst:116 msgid "Tkinter questions" -msgstr "" +msgstr "Questions à propos de *Tkinter*" #: ../Doc/faq/gui.rst:119 msgid "How do I freeze Tkinter applications?" -msgstr "" +msgstr "Comment puis-je geler (*freezer*) les applications *Tkinter* ?" #: ../Doc/faq/gui.rst:121 msgid "" @@ -194,6 +241,10 @@ msgid "" "applications, the applications will not be truly stand-alone, as the " "application will still need the Tcl and Tk libraries." msgstr "" +"*Freeze* est un outil pour créer des applications autonomes. Lors du " +"*freezage* des applications Tkinter, les applications ne seront pas vraiment " +"autonomes, car l'application aura toujours besoin des bibliothèques Tcl et " +"Tk." #: ../Doc/faq/gui.rst:125 msgid "" @@ -201,6 +252,9 @@ msgid "" "point to them at run-time using the :envvar:`TCL_LIBRARY` and :envvar:" "`TK_LIBRARY` environment variables." msgstr "" +"Une solution consiste à empaqueter les bibliothèques *Tcl* et *Tk* dans " +"l'application et de les retrouver à l'exécution en utilisant les variables " +"d'environnement :envvar:`TCL_LIBRARY` et :envvar:`TK_LIBRARY`." #: ../Doc/faq/gui.rst:129 msgid "" @@ -209,6 +263,10 @@ msgid "" "is SAM (stand-alone modules), which is part of the Tix distribution (http://" "tix.sourceforge.net/)." msgstr "" +"Pour obtenir des applications vraiment autonomes, les scripts *Tcl* qui " +"forment la bibliothèque doivent également être intégrés dans l'application. " +"Un outil supportant cela est *SAM* (modules autonomes), qui fait partie de " +"la distribution *Tix* (http://tix.sourceforge.net/)." #: ../Doc/faq/gui.rst:134 msgid "" @@ -216,10 +274,14 @@ msgid "" "`Tclsam_init`, etc. inside Python's :file:`Modules/tkappinit.c`, and link " "with libtclsam and libtksam (you might include the Tix libraries as well)." msgstr "" +"Compilez Tix avec SAM activé, exécutez l'appel approprié à :c:func:" +"`Tclsam_init`, etc. dans le fichier :file:`Modules/tkappinit.c` de Python, " +"et liez avec *libtclsam* et *libtksam* (il est également possible d'inclure " +"les bibliothèques *Tix*)." #: ../Doc/faq/gui.rst:141 msgid "Can I have Tk events handled while waiting for I/O?" -msgstr "" +msgstr "Puis-je modifier des événements *Tk* pendant l'écoute des *E/S* ?" #: ../Doc/faq/gui.rst:143 msgid "" @@ -229,10 +291,18 @@ msgid "" "function which will be called from the Tk mainloop when I/O is possible on a " "file descriptor. See :ref:`tkinter-file-handlers`." msgstr "" +"Sur d'autres plates-formes que Windows, oui, et vous n'avez même pas besoin " +"de fils d'exécution multiples ! Mais vous devrez restructurer un peu votre " +"code *E/S*. *Tk* possède l'équivalent de l'appel :c:func:`XtAddInput()` de " +"*Xt*, qui vous permet d'enregistrer une fonction de *callback* qui sera " +"appelée par la boucle principale *Tk* lorsque des *E/S* sont disponibles sur " +"un descripteur de fichier. Voir :ref:`tkinter-file-handlers`." #: ../Doc/faq/gui.rst:151 msgid "I can't get key bindings to work in Tkinter: why?" msgstr "" +"Je n'arrive pas à faire fonctionner les raccourcis clavier dans *Tkinter* : " +"pourquoi ?" #: ../Doc/faq/gui.rst:153 msgid "" @@ -240,6 +310,9 @@ msgid "" "meth:`bind` method don't get handled even when the appropriate key is " "pressed." msgstr "" +"Une raison récurrente est que les gestionnaires d’évènements liés à des " +"évènements avec la méthode :meth:`bind` ne sont pas pris en charge même " +"lorsque la touche appropriée est activée." #: ../Doc/faq/gui.rst:156 msgid "" @@ -248,3 +321,8 @@ msgid "" "focus command. Usually a widget is given the keyboard focus by clicking in " "it (but not for labels; see the takefocus option)." msgstr "" +"La cause la plus fréquente est que l'objet graphique auquel s'applique la " +"liaison n'a pas de « focus clavier ». Consultez la documentation *Tk* pour " +"la commande *focus*. Habituellement, un objet graphique reçoit le focus du " +"clavier en cliquant dessus (mais pas pour les étiquettes ; voir l'option " +"*takefocus*)." diff --git a/faq/installed.po b/faq/installed.po index f558a2e70..6291f050f 100644 --- a/faq/installed.po +++ b/faq/installed.po @@ -19,7 +19,7 @@ msgstr "" #: ../Doc/faq/installed.rst:3 msgid "\"Why is Python Installed on my Computer?\" FAQ" -msgstr "" +msgstr "FAQ \"Pourquoi Python est installé sur mon ordinateur ?\"" #: ../Doc/faq/installed.rst:6 msgid "What is Python?" @@ -33,22 +33,32 @@ msgid "" "professional software developers at places such as Google, NASA, and " "Lucasfilm Ltd." msgstr "" +"Python est un langage de programmation. Il est utilisé dans de nombreuses " +"applications. Souvent utilisé dans les lycées et universités comme langage " +"d'introduction à la programmation pour sa simplicité d'apprentissage, il est " +"aussi utilisé par des développeurs professionnels appartenant à des grands " +"groupes comme Google, la NASA, Lucasfilm etc." #: ../Doc/faq/installed.rst:13 msgid "" "If you wish to learn more about Python, start with the `Beginner's Guide to " "Python `_." msgstr "" +"Si vous voulez en apprendre plus sur Python, vous pouvez commencer par le " +"`Guide des Débutants pour Python `_." #: ../Doc/faq/installed.rst:18 msgid "Why is Python installed on my machine?" -msgstr "" +msgstr "Pourquoi Python est installé sur ma machine ?" #: ../Doc/faq/installed.rst:20 msgid "" "If you find Python installed on your system but don't remember installing " "it, there are several possible ways it could have gotten there." msgstr "" +"Si Python est installé sur votre système mais que vous ne vous rappelez pas " +"l'avoir installé, il y a plusieurs raisons possibles à sa présence." #: ../Doc/faq/installed.rst:23 msgid "" @@ -56,6 +66,9 @@ msgid "" "installed it; you'll have to figure out who's been using the machine and " "might have installed it." msgstr "" +"Peut être qu'un autre utilisateur de l'ordinateur voulait apprendre la " +"programmation et l'a installé, dans ce cas vous allez devoir trouver qui a " +"utilisé votre machine et aurait pu l'installer." #: ../Doc/faq/installed.rst:26 msgid "" @@ -64,6 +77,10 @@ msgid "" "applications, from GUI programs to network servers and administrative " "scripts." msgstr "" +"Une application tierce installée sur votre machine écrite en Python " +"installera Python. Il existe de nombreuses applications de ce type, allant " +"de programme avec interface graphique, jusqu'aux scripts d'administration, " +"en passant par les serveurs." #: ../Doc/faq/installed.rst:29 msgid "" @@ -71,6 +88,10 @@ msgid "" "aware of computers from Hewlett-Packard and Compaq that include Python. " "Apparently some of HP/Compaq's administrative tools are written in Python." msgstr "" +"Certaines machines fonctionnant avec le système d'exploitation Windows " +"possèdent une installation de Python. À ce jour, les ordinateurs des marques " +"Hewlett-Packard et Compaq incluent nativement Python. Certains outils " +"d'administration de ces marques sont écrits en Python." #: ../Doc/faq/installed.rst:32 msgid "" @@ -78,20 +99,26 @@ msgid "" "distributions, have Python installed by default; it's included in the base " "installation." msgstr "" +"Python est installé par défaut et à l'installation par de nombreux systèmes " +"Unix, comme Mac OS X et certaines distributions Linux." #: ../Doc/faq/installed.rst:38 msgid "Can I delete Python?" -msgstr "" +msgstr "Puis-je supprimer Python ?" #: ../Doc/faq/installed.rst:40 msgid "That depends on where Python came from." -msgstr "" +msgstr "Cela dépend de l'origine de Python." #: ../Doc/faq/installed.rst:42 msgid "" "If someone installed it deliberately, you can remove it without hurting " "anything. On Windows, use the Add/Remove Programs icon in the Control Panel." msgstr "" +"Si Python a été installé délibérément par une personne tierce ou vous même, " +"vous pouvez le supprimer sans causer de dommage. Sous Windows, vous pouvez " +"simplement utiliser l'icône d'Ajout / Suppression de programmes du Panneau " +"de configuration." #: ../Doc/faq/installed.rst:45 msgid "" @@ -99,6 +126,10 @@ msgid "" "it, but that application will no longer work. You should use that " "application's uninstaller rather than removing Python directly." msgstr "" +"Si Python a été installé par une application tierce, Python peut être " +"désinstallé, l'application l'ayant installé cessera alors de fonctionner. " +"Dans ce cas, désinstallez l'application en utilisant son outil de " +"désinstallation est plus indiqué que supprimer Python." #: ../Doc/faq/installed.rst:49 msgid "" @@ -107,3 +138,9 @@ msgid "" "and some of them might be important to you. Reinstalling the whole system " "would then be required to fix things again." msgstr "" +"Si Python a été installé avec votre système d'exploitation, le supprimer " +"n'est pas recommandé. Si vous choisissez tout de même de le supprimer, tous " +"les outils écrits en python cesseront alors de fonctionner, certains outils " +"pouvant être importants. La réinstallation intégrale du système pourrait " +"être nécessaire pour résoudre les problèmes suite à la désinstallation de " +"Python." diff --git a/faq/library.po b/faq/library.po index 7a173869f..536fd5b92 100644 --- a/faq/library.po +++ b/faq/library.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-04-02 22:11+0200\n" +"POT-Creation-Date: 2018-06-10 11:27+0200\n" "PO-Revision-Date: 2018-02-15 00:37+0100\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,7 +19,11 @@ msgstr "" #: ../Doc/faq/library.rst:5 msgid "Library and Extension FAQ" -msgstr "FAQ sur la bibliothèque et les extension" +msgstr "FAQ sur la bibliothèque et les extensions" + +#: ../Doc/faq/library.rst:8 +msgid "Contents" +msgstr "Sommaire" #: ../Doc/faq/library.rst:12 msgid "General Library Questions" @@ -28,8 +32,7 @@ msgstr "Questions générales sur la bibliothèque" #: ../Doc/faq/library.rst:15 msgid "How do I find a module or application to perform task X?" msgstr "" -"Comment puis-je trouver un module ou une application pour exécuter la tâche " -"X?" +"Comment trouver un module ou une application pour effectuer la tâche X ?" #: ../Doc/faq/library.rst:17 msgid "" @@ -37,18 +40,28 @@ msgid "" "relevant standard library module. (Eventually you'll learn what's in the " "standard library and will be able to skip this step.)" msgstr "" +"Regardez si la :ref:`bibliothèque standard ` contient un " +"module approprié (avec l'expérience, vous connaitrez le contenu de la " +"bibliothèque standard et pourrez sauter cette étape)." #: ../Doc/faq/library.rst:21 msgid "" "For third-party packages, search the `Python Package Index `_ or try `Google `_ or another Web " -"search engine. Searching for \"Python\" plus a keyword or two for your " -"topic of interest will usually find something helpful." +"org>`_ or try `Google `_ or another Web search " +"engine. Searching for \"Python\" plus a keyword or two for your topic of " +"interest will usually find something helpful." msgstr "" +"Pour des paquets tiers, regardez dans `l'index des paquets Python `_ ou essayez `Google `_ ou un autre moteur " +"de recherche (NDT : comme le moteur français `Qwant `_). Rechercher « Python » accompagné d'un ou deux mots-clés se " +"rapportant à ce qui vous intéresse donne souvent de bons résultats." #: ../Doc/faq/library.rst:28 msgid "Where is the math.py (socket.py, regex.py, etc.) source file?" -msgstr "Où se situe le fichier source math.py (socket.py, regex.py, etc.)?" +msgstr "" +"Où sont stockés les fichiers sources *math.py*, *socket.py*, *regex.py*, " +"etc ?" #: ../Doc/faq/library.rst:30 msgid "" @@ -58,30 +71,39 @@ msgid "" "file:`mathmodule.c`, somewhere in a C source directory (not on the Python " "Path)." msgstr "" +"Si vous ne parvenez pas à trouver le fichier source d'un module, c'est peut-" +"être parce que celui-ci est un module natif ou bien un module implémenté en " +"C, C++, ou autre langage compilé, qui est chargé dynamiquement. Dans ce cas, " +"vous ne possédez peut-être pas le fichier source ou celui-ci est en réalité " +"stocké quelque part dans un dossier de fichiers source C (qui ne sera pas " +"dans le chemin Python), comme par exemple :file:`mathmodule.c`." #: ../Doc/faq/library.rst:35 msgid "There are (at least) three kinds of modules in Python:" -msgstr "Il y a (au moins) trois types de modules dans Python" +msgstr "Il y a (au moins) trois types de modules dans Python :" #: ../Doc/faq/library.rst:37 msgid "modules written in Python (.py);" -msgstr "modules écrits en Python (.py);" +msgstr "les modules écrits en Python (*.py*) ;" #: ../Doc/faq/library.rst:38 msgid "" "modules written in C and dynamically loaded (.dll, .pyd, .so, .sl, etc);" msgstr "" -"modules écrits en C et chargés dynamiquement (.dll, .pyd, .so, .sl, .etc);" +"les modules écrits en C et chargés dynamiquement (*.dll*, *.pyd*, *.so*, *." +"sl*, *etc.*) ;" #: ../Doc/faq/library.rst:39 msgid "" "modules written in C and linked with the interpreter; to get a list of " "these, type::" msgstr "" +"les modules écrits en C et liés à l'interpréteur ; pour obtenir leur liste, " +"entrez ::" #: ../Doc/faq/library.rst:47 msgid "How do I make a Python script executable on Unix?" -msgstr "" +msgstr "Comment rendre un script Python exécutable sous Unix ?" #: ../Doc/faq/library.rst:49 msgid "" @@ -89,24 +111,31 @@ msgid "" "first line must begin with ``#!`` followed by the path of the Python " "interpreter." msgstr "" +"Deux conditions doivent être remplies : les droits d'accès au fichier " +"doivent permettre son exécution et la première ligne du script doit " +"commencer par ``#!`` suivi du chemin vers l'interpréteur Python." #: ../Doc/faq/library.rst:53 msgid "" "The first is done by executing ``chmod +x scriptfile`` or perhaps ``chmod " "755 scriptfile``." msgstr "" +"La première condition est remplie en exécutant ``chmod +x scriptfile`` ou " +"``chmod 755 scriptfile``." #: ../Doc/faq/library.rst:56 msgid "" "The second can be done in a number of ways. The most straightforward way is " "to write ::" msgstr "" +"Il y a plusieurs façons de remplir la seconde. La plus simple consiste à " +"écrire au tout début du fichier ::" #: ../Doc/faq/library.rst:61 msgid "" "as the very first line of your file, using the pathname for where the Python " "interpreter is installed on your platform." -msgstr "" +msgstr "en utilisant le chemin de l'interpréteur Python sur votre machine." #: ../Doc/faq/library.rst:64 msgid "" @@ -115,6 +144,11 @@ msgid "" "variants support the following, assuming the Python interpreter is in a " "directory on the user's :envvar:`PATH`::" msgstr "" +"Pour rendre ce script indépendant de la localisation de l'interpréteur " +"Python, il faut utiliser le programme :program:`env`. La ligne ci-dessous " +"fonctionne sur la quasi-totalité des dérivés de Unix, à condition que " +"l'interpréteur Python soit dans un dossier référencé dans la variable :" +"envvar:`PATH` de l'utilisateur ::" #: ../Doc/faq/library.rst:71 msgid "" @@ -122,33 +156,46 @@ msgid "" "scripts is often very minimal, so you need to use the actual absolute " "pathname of the interpreter." msgstr "" +"Ne faites *pas* ceci pour des scripts CGI. La variable :envvar:`PATH` des " +"scripts CGI est souvent très succincte, il faut par conséquent préciser le " +"chemin absolu réel de l'interpréteur." #: ../Doc/faq/library.rst:75 msgid "" "Occasionally, a user's environment is so full that the :program:`/usr/bin/" "env` program fails; or there's no env program at all. In that case, you can " -"try the following hack (due to Alex Rezinsky)::" +"try the following hack (due to Alex Rezinsky):" msgstr "" +"Il peut arriver que l'environnement d'un utilisateur soit si chargé que le " +"programme :program:`/usr/bin/env` échoue ; ou que le programme *env* " +"n'existe pas du tout. Dans ce cas, vous pouvez utiliser l'astuce suivante, " +"élaborée par Alex Rezinsky :" -#: ../Doc/faq/library.rst:84 +#: ../Doc/faq/library.rst:86 msgid "" "The minor disadvantage is that this defines the script's __doc__ string. " "However, you can fix that by adding ::" msgstr "" +"Le léger inconvénient est que cela définit la variable *__doc__* du script. " +"Cependant, il est possible de corriger cela en ajoutant ::" -#: ../Doc/faq/library.rst:92 +#: ../Doc/faq/library.rst:94 msgid "Is there a curses/termcap package for Python?" -msgstr "" +msgstr "Existe-t'il un module *curse* ou *termcap* en Python ?" -#: ../Doc/faq/library.rst:96 +#: ../Doc/faq/library.rst:98 msgid "" "For Unix variants: The standard Python source distribution comes with a " "curses module in the :source:`Modules` subdirectory, though it's not " "compiled by default. (Note that this is not available in the Windows " "distribution -- there is no curses module for Windows.)" msgstr "" +"Pour les dérivés d'Unix : la distribution standard de Python contient un " +"module *curses* dans le sous-dossier :source:`Modules`, bien qu'il ne soit " +"pas compilé par défaut. Il n'est pas disponible en Windows — le module " +"*curses* n'existant pas en Windows." -#: ../Doc/faq/library.rst:101 +#: ../Doc/faq/library.rst:103 msgid "" "The :mod:`curses` module supports basic curses features as well as many " "additional functions from ncurses and SYSV curses such as colour, " @@ -157,59 +204,77 @@ msgid "" "but there don't seem to be any currently maintained OSes that fall into this " "category." msgstr "" +"Le module :mod:`curses` comprend les fonctionnalités de base de *curses* et " +"beaucoup de fonctionnalités supplémentaires provenant de *ncurses* et de " +"*SYSV curses* comme la couleur, la gestion des ensembles de caractères " +"alternatifs, la prise en charge du pavé tactile et de la souris. Cela " +"implique que le module n'est pas compatible avec des systèmes d'exploitation " +"qui n'ont que le *curses* de BSD mais, de nos jours, de tels systèmes " +"d'exploitation ne semblent plus exister ou être maintenus." -#: ../Doc/faq/library.rst:107 +#: ../Doc/faq/library.rst:109 msgid "" "For Windows: use `the consolelib module `_." msgstr "" +"Pour Windows : utilisez le module `consolelib `_." -#: ../Doc/faq/library.rst:112 +#: ../Doc/faq/library.rst:114 msgid "Is there an equivalent to C's onexit() in Python?" -msgstr "" +msgstr "Existe-t'il un équivalent à la fonction C ``onexit()`` en Python ?" -#: ../Doc/faq/library.rst:114 +#: ../Doc/faq/library.rst:116 msgid "" "The :mod:`atexit` module provides a register function that is similar to " "C's :c:func:`onexit`." msgstr "" +"Le module :mod:`atexit` fournit une fonction d'enregistrement similaire à la " +"fonction C :c:func:`onexit`." -#: ../Doc/faq/library.rst:119 +#: ../Doc/faq/library.rst:121 msgid "Why don't my signal handlers work?" -msgstr "" +msgstr "Pourquoi mes gestionnaires de signaux ne fonctionnent-t'ils pas ?" -#: ../Doc/faq/library.rst:121 +#: ../Doc/faq/library.rst:123 msgid "" "The most common problem is that the signal handler is declared with the " "wrong argument list. It is called as ::" msgstr "" +"Le problème le plus courant est d'appeler le gestionnaire de signaux avec " +"les mauvais arguments. Un gestionnaire est appelé de la façon suivante ::" -#: ../Doc/faq/library.rst:126 +#: ../Doc/faq/library.rst:128 msgid "so it should be declared with two arguments::" -msgstr "" +msgstr "donc il doit être déclaré avec deux paramètres ::" -#: ../Doc/faq/library.rst:133 +#: ../Doc/faq/library.rst:135 msgid "Common tasks" -msgstr "" +msgstr "Tâches fréquentes" -#: ../Doc/faq/library.rst:136 +#: ../Doc/faq/library.rst:138 msgid "How do I test a Python program or component?" -msgstr "" +msgstr "Comment tester un programme ou un composant Python ?" -#: ../Doc/faq/library.rst:138 +#: ../Doc/faq/library.rst:140 msgid "" "Python comes with two testing frameworks. The :mod:`doctest` module finds " "examples in the docstrings for a module and runs them, comparing the output " "with the expected output given in the docstring." msgstr "" +"Python fournit deux cadriciels de test. Le module :mod:`doctest` cherche des " +"exemples dans les *docstrings* d'un module et les exécute. Il compare alors " +"la sortie avec la sortie attendue, telle que définie dans la *docstring*." -#: ../Doc/faq/library.rst:142 +#: ../Doc/faq/library.rst:144 msgid "" "The :mod:`unittest` module is a fancier testing framework modelled on Java " "and Smalltalk testing frameworks." msgstr "" +"Le module :mod:`unittest` est un cadriciel un peu plus élaboré basé sur les " +"cadriciels de test de Java et de Smalltalk." -#: ../Doc/faq/library.rst:145 +#: ../Doc/faq/library.rst:147 msgid "" "To make testing easier, you should use good modular design in your program. " "Your program should have almost all functionality encapsulated in either " @@ -219,16 +284,25 @@ msgid "" "avoid depending on mutating global variables, since this makes testing much " "more difficult to do." msgstr "" +"Pour rendre le test plus aisé, il est nécessaire de bien découper le code " +"d'un programme. Votre programme doit avoir la quasi-totalité des " +"fonctionnalités dans des fonctions ou des classes — et ceci a parfois " +"l'avantage aussi plaisant qu'inattendu de rendre le programme plus rapide, " +"les accès aux variables locales étant en effet plus rapides que les accès " +"aux variables globales. De plus le programme doit éviter au maximum de " +"manipuler des variables globales, car ceci rend le test beaucoup plus " +"difficile." -#: ../Doc/faq/library.rst:153 +#: ../Doc/faq/library.rst:155 msgid "The \"global main logic\" of your program may be as simple as ::" msgstr "" +"La « logique générale » d'un programme devrait être aussi simple que ::" -#: ../Doc/faq/library.rst:158 +#: ../Doc/faq/library.rst:160 msgid "at the bottom of the main module of your program." -msgstr "" +msgstr "à la fin du module principal du programme." -#: ../Doc/faq/library.rst:160 +#: ../Doc/faq/library.rst:162 msgid "" "Once your program is organized as a tractable collection of functions and " "class behaviours you should write test functions that exercise the " @@ -239,91 +313,130 @@ msgid "" "the \"production code\", since this makes it easy to find bugs and even " "design flaws earlier." msgstr "" +"Une fois que la logique du programme est implémentée par un ensemble de " +"fonctions et de comportements de classes, il faut écrire des fonctions de " +"test qui vont éprouver cette logique. À chaque module, il est possible " +"d'associer une suite de tests qui joue de manière automatique un ensemble de " +"tests. Au premier abord, il semble qu'il faille fournir un effort " +"conséquent, mais comme Python est un langage concis et flexible, c'est " +"surprenamment aisé. Écrire simultanément le code « de production » et les " +"fonctions de test associées rend le développement plus agréable et plus " +"amusant, car ceci permet de trouver des bogues, voire des défauts de " +"conception, plus facilement." -#: ../Doc/faq/library.rst:168 +#: ../Doc/faq/library.rst:170 msgid "" "\"Support modules\" that are not intended to be the main module of a program " "may include a self-test of the module. ::" msgstr "" +"Les « modules auxiliaires » qui n'ont pas vocation à être le module " +"principal du programme peuvent inclure un test pour se vérifier eux-mêmes. ::" -#: ../Doc/faq/library.rst:174 +#: ../Doc/faq/library.rst:176 msgid "" "Even programs that interact with complex external interfaces may be tested " "when the external interfaces are unavailable by using \"fake\" interfaces " "implemented in Python." msgstr "" +"Les programmes qui interagissent avec des interfaces externes complexes " +"peuvent être testés même quand ces interfaces ne sont pas disponibles, en " +"utilisant des interfaces « simulacres » implémentées en Python." -#: ../Doc/faq/library.rst:180 +#: ../Doc/faq/library.rst:182 msgid "How do I create documentation from doc strings?" -msgstr "" +msgstr "Comment générer la documentation à partir des *docstrings* ?" -#: ../Doc/faq/library.rst:182 +#: ../Doc/faq/library.rst:184 msgid "" "The :mod:`pydoc` module can create HTML from the doc strings in your Python " "source code. An alternative for creating API documentation purely from " "docstrings is `epydoc `_. `Sphinx `_ can also include docstring content." msgstr "" +"Le module :mod:`pydoc` peut générer du HTML à partir des *docstrings* du " +"code source Python. Il est aussi possible de documenter une API uniquement à " +"partir des *docstrings* à l'aide de `epydoc `_. `Sphinx `_ peut également inclure du contenu " +"provenant de *docstrings*." -#: ../Doc/faq/library.rst:189 +#: ../Doc/faq/library.rst:191 msgid "How do I get a single keypress at a time?" -msgstr "" +msgstr "Comment détecter qu'une touche est pressée ?" -#: ../Doc/faq/library.rst:191 +#: ../Doc/faq/library.rst:193 msgid "" "For Unix variants there are several solutions. It's straightforward to do " "this using curses, but curses is a fairly large module to learn." msgstr "" +"Pour les dérivés d'Unix, plusieurs solutions s'offrent à vous. C'est facile " +"en utilisant le module *curses*, mais *curses* est un module assez " +"conséquent à apprendre." -#: ../Doc/faq/library.rst:235 +#: ../Doc/faq/library.rst:237 msgid "Threads" -msgstr "" +msgstr "Fils d'exécution" -#: ../Doc/faq/library.rst:238 +#: ../Doc/faq/library.rst:240 msgid "How do I program using threads?" -msgstr "" +msgstr "Comment programmer avec des fils d'exécution ?" -#: ../Doc/faq/library.rst:240 +#: ../Doc/faq/library.rst:242 msgid "" "Be sure to use the :mod:`threading` module and not the :mod:`_thread` " "module. The :mod:`threading` module builds convenient abstractions on top of " "the low-level primitives provided by the :mod:`_thread` module." msgstr "" +"Veillez à bien utiliser le module :mod:`threading` et non le module :mod:" +"`_thread`. Le module :mod:`threading` fournit une abstraction plus facile à " +"manipuler que les primitives de bas-niveau du module :mod:`_thread`." -#: ../Doc/faq/library.rst:244 +#: ../Doc/faq/library.rst:246 msgid "" "Aahz has a set of slides from his threading tutorial that are helpful; see " "http://www.pythoncraft.com/OSCON2001/." msgstr "" +"Un ensemble de diapositives issues du didacticiel de Aahz sur les fils " +"d'exécution est disponible à http://www.pythoncraft.com/OSCON2001/." -#: ../Doc/faq/library.rst:249 +#: ../Doc/faq/library.rst:251 msgid "None of my threads seem to run: why?" -msgstr "" +msgstr "Aucun de mes fils ne semble s'exécuter : pourquoi ?" -#: ../Doc/faq/library.rst:251 +#: ../Doc/faq/library.rst:253 msgid "" "As soon as the main thread exits, all threads are killed. Your main thread " "is running too quickly, giving the threads no time to do any work." msgstr "" +"Dès que le fil d'exécution principal se termine, tous les fils sont tués. Le " +"fil principal s'exécute trop rapidement, sans laisser le temps aux autres " +"fils de faire quoi que ce soit." -#: ../Doc/faq/library.rst:254 +#: ../Doc/faq/library.rst:256 msgid "" "A simple fix is to add a sleep to the end of the program that's long enough " "for all the threads to finish::" msgstr "" +"Une correction simple consiste à ajouter un temps d'attente suffisamment " +"long à la fin du programme pour que tous les fils puissent se terminer ::" -#: ../Doc/faq/library.rst:269 +#: ../Doc/faq/library.rst:271 msgid "" "But now (on many platforms) the threads don't run in parallel, but appear to " "run sequentially, one at a time! The reason is that the OS thread scheduler " "doesn't start a new thread until the previous thread is blocked." msgstr "" +"Mais à présent, sur beaucoup de plates-formes, les fils ne s'exécutent pas " +"en parallèle, mais semblent s'exécuter de manière séquentielle, l'un après " +"l'autre ! En réalité, l'ordonnanceur de fils du système d'exploitation ne " +"démarre pas de nouveau fil avant que le précédent ne soit bloqué." -#: ../Doc/faq/library.rst:273 +#: ../Doc/faq/library.rst:275 msgid "A simple fix is to add a tiny sleep to the start of the run function::" msgstr "" +"Une correction simple consiste à ajouter un petit temps d'attente au début " +"de la fonction ::" -#: ../Doc/faq/library.rst:286 +#: ../Doc/faq/library.rst:288 msgid "" "Instead of trying to guess a good delay value for :func:`time.sleep`, it's " "better to use some kind of semaphore mechanism. One idea is to use the :mod:" @@ -331,18 +444,29 @@ msgid "" "the queue when it finishes, and let the main thread read as many tokens from " "the queue as there are threads." msgstr "" +"Au lieu d'essayer de trouver une bonne valeur d'attente pour la fonction :" +"func:`time.sleep`, il vaut mieux utiliser un mécanisme basé sur les " +"sémaphores. Une solution consiste à utiliser le module :mod:`queue` pour " +"créer un objet file, faire en sorte que chaque fil ajoute un jeton à la file " +"quand il se termine, et que le fil principal retire autant de jetons de la " +"file qu'il y a de fils." -#: ../Doc/faq/library.rst:294 +#: ../Doc/faq/library.rst:296 msgid "How do I parcel out work among a bunch of worker threads?" msgstr "" +"Comment découper et répartir une tâche au sein d'un ensemble de fils " +"d'exécutions ?" -#: ../Doc/faq/library.rst:296 +#: ../Doc/faq/library.rst:298 msgid "" "The easiest way is to use the new :mod:`concurrent.futures` module, " "especially the :mod:`~concurrent.futures.ThreadPoolExecutor` class." msgstr "" +"La manière la plus simple est d'utiliser le nouveau module :mod:`concurrent." +"futures`, en particulier la classe :mod:`~concurrent.futures." +"ThreadPoolExecutor`." -#: ../Doc/faq/library.rst:299 +#: ../Doc/faq/library.rst:301 msgid "" "Or, if you want fine control over the dispatching algorithm, you can write " "your own logic manually. Use the :mod:`queue` module to create a queue " @@ -351,26 +475,37 @@ msgid "" "``.get()`` method to return them. The class will take care of the locking " "necessary to ensure that each job is handed out exactly once." msgstr "" +"Ou bien, si vous désirez contrôler plus finement l'algorithme de " +"distribution, vous pouvez écrire votre propre logique « à la main ». " +"Utilisez le module :mod:`queue` pour créer une file de tâches ; la classe :" +"class:`~queue.Queue` gère une liste d'objets et a une méthode ``." +"put(objet)`` pour ajouter un élément à la file, et une méthode ``.get()`` " +"pour les récupérer. La classe s'occupe de gérer les verrous pour que chaque " +"tâche soit exécutée une et une seule fois." -#: ../Doc/faq/library.rst:306 +#: ../Doc/faq/library.rst:308 msgid "Here's a trivial example::" -msgstr "" +msgstr "Voici un exemple trivial ::" -#: ../Doc/faq/library.rst:344 +#: ../Doc/faq/library.rst:346 msgid "When run, this will produce the following output:" -msgstr "" +msgstr "Quand celui-ci est exécuté, il produit la sortie suivante :" -#: ../Doc/faq/library.rst:362 +#: ../Doc/faq/library.rst:364 msgid "" "Consult the module's documentation for more details; the :class:`~queue." "Queue` class provides a featureful interface." msgstr "" +"Consultez la documentation du module pour plus de détails ; la classe :class:" +"`~queue.Queue` fournit une interface pleine de fonctionnalités." -#: ../Doc/faq/library.rst:367 +#: ../Doc/faq/library.rst:369 msgid "What kinds of global value mutation are thread-safe?" msgstr "" +"Quels types de mutations sur des variables globales sont compatibles avec " +"les programmes à fils d'exécution multiples ? sécurisé ?" -#: ../Doc/faq/library.rst:369 +#: ../Doc/faq/library.rst:371 msgid "" "A :term:`global interpreter lock` (GIL) is used internally to ensure that " "only one thread runs in the Python VM at a time. In general, Python offers " @@ -379,46 +514,73 @@ msgid "" "instruction and therefore all the C implementation code reached from each " "instruction is therefore atomic from the point of view of a Python program." msgstr "" +"Le :term:`verrou global de l'interpréteur ` (GIL " +"pour *global interpreter lock*) est utilisé en interne pour s'assurer que la " +"machine virtuelle Python (MVP) n'exécute qu'un seul fil à la fois. De " +"manière générale, Python ne change de fil qu'entre les instructions du code " +"intermédiaire ; :func:`sys.setswitchinterval` permet de contrôler la " +"fréquence de bascule entre les fils. Chaque instruction du code " +"intermédiaire, et, par conséquent, tout le code C appelé par cette " +"instruction est donc atomique du point de vue d'un programme Python." -#: ../Doc/faq/library.rst:376 +#: ../Doc/faq/library.rst:378 msgid "" "In theory, this means an exact accounting requires an exact understanding of " "the PVM bytecode implementation. In practice, it means that operations on " "shared variables of built-in data types (ints, lists, dicts, etc) that " "\"look atomic\" really are." msgstr "" +"En théorie, cela veut dire qu'un décompte exact nécessite une connaissance " +"parfaite de l'implémentation de la MVP. En pratique, cela veut dire que les " +"opérations sur des variables partagées de type natif (les entier, les " +"listes, les dictionnaires etc.) qui « semblent atomiques » le sont " +"réellement." -#: ../Doc/faq/library.rst:381 +#: ../Doc/faq/library.rst:383 msgid "" "For example, the following operations are all atomic (L, L1, L2 are lists, " "D, D1, D2 are dicts, x, y are objects, i, j are ints)::" msgstr "" +"Par exemple, les opérations suivantes sont toutes atomiques (*L*, *L1* et " +"*L2* sont des listes, *D*, *D1* et *D2* sont des dictionnaires, *x* et *y* " +"sont des objets, *i* et *j* des entiers) ::" -#: ../Doc/faq/library.rst:396 +#: ../Doc/faq/library.rst:398 msgid "These aren't::" -msgstr "" +msgstr "Les suivantes ne le sont pas ::" -#: ../Doc/faq/library.rst:403 +#: ../Doc/faq/library.rst:405 msgid "" "Operations that replace other objects may invoke those other objects' :meth:" "`__del__` method when their reference count reaches zero, and that can " "affect things. This is especially true for the mass updates to dictionaries " "and lists. When in doubt, use a mutex!" msgstr "" +"Les opérations qui remplacent d'autres objets peuvent invoquer la méthode :" +"meth:`__del__` de ces objets quand leur compteur de référence passe à zéro, " +"et cela peut avoir de l'impact. C'est tout particulièrement vrai pour les " +"des changements massifs sur des dictionnaires ou des listes. En cas de " +"doute, il vaut mieux utiliser un mutex." -#: ../Doc/faq/library.rst:410 +#: ../Doc/faq/library.rst:412 msgid "Can't we get rid of the Global Interpreter Lock?" -msgstr "" +msgstr "Pourquoi ne pas se débarrasser du verrou global de l'interpréteur ?" -#: ../Doc/faq/library.rst:414 +#: ../Doc/faq/library.rst:416 msgid "" "The :term:`global interpreter lock` (GIL) is often seen as a hindrance to " "Python's deployment on high-end multiprocessor server machines, because a " "multi-threaded Python program effectively only uses one CPU, due to the " "insistence that (almost) all Python code can only run while the GIL is held." msgstr "" +"Le :term:`verrou global de l'interpréteur ` (GIL) " +"est souvent vu comme un obstacle au déploiement de code Python sur des " +"serveurs puissants avec de nombreux processeurs, car un programme Python à " +"fils d'exécutions multiples n'utilise en réalité qu'un seul processeur. " +"Presque tout le code Python ne peut en effet être exécuté qu'avec le GIL " +"acquis." -#: ../Doc/faq/library.rst:419 +#: ../Doc/faq/library.rst:421 msgid "" "Back in the days of Python 1.5, Greg Stein actually implemented a " "comprehensive patch set (the \"free threading\" patches) that removed the " @@ -430,7 +592,7 @@ msgid "" "the GIL." msgstr "" -#: ../Doc/faq/library.rst:427 +#: ../Doc/faq/library.rst:429 msgid "" "This doesn't mean that you can't make good use of Python on multi-CPU " "machines! You just have to be creative with dividing the work up between " @@ -440,8 +602,15 @@ msgid "" "module provides a lower-level API in case you want more control over " "dispatching of tasks." msgstr "" +"Cela ne signifie pas qu'il est impossible de tirer profit de Python sur des " +"machines à plusieurs cœurs ! Il faut seulement être malin et diviser le " +"travail à faire entre plusieurs *processus* plutôt qu'entre plusieurs *fils " +"d'exécution*. La classe :class:`~concurrent.futures.ProcessPoolExecutor` du " +"nouveau module :mod:`concurrent.futures` permet de faire cela facilement ; " +"le module :mod:`multiprocessing` fournit une API de plus bas-niveau pour un " +"meilleur contrôle sur la distribution des tâches." -#: ../Doc/faq/library.rst:435 +#: ../Doc/faq/library.rst:437 msgid "" "Judicious use of C extensions will also help; if you use a C extension to " "perform a time-consuming task, the extension can release the GIL while the " @@ -449,8 +618,13 @@ msgid "" "work done. Some standard library modules such as :mod:`zlib` and :mod:" "`hashlib` already do this." msgstr "" +"Des extensions C appropriées peuvent aussi aider ; en utilisant une " +"extension C pour effectuer une tâche longue, l'extension peut relâcher le " +"GIL pendant que le fil est en train d'exécuter ce code et laisser les autres " +"fils travailler. Des modules de la bibliothèque standard comme :mod:`zlib` " +"ou :mod:`hashlib` utilisent cette technique." -#: ../Doc/faq/library.rst:441 +#: ../Doc/faq/library.rst:443 msgid "" "It has been suggested that the GIL should be a per-interpreter-state lock " "rather than truly global; interpreters then wouldn't be able to share " @@ -461,37 +635,57 @@ msgid "" "types have their own free list; these free lists would have to be moved to " "the interpreter state. And so on." msgstr "" +"On a déjà proposé de restreindre le GIL par interpréteur, et non plus d'être " +"complétement global ; les interpréteurs ne seraient plus en mesure de " +"partager des objets. Malheureusement, cela n'a pas beaucoup de chance non " +"plus d'arriver. Cela nécessiterait un travail considérable, car la façon " +"dont beaucoup d'objets sont implémentés rend leur état global. Par exemple, " +"les entiers et les chaînes de caractères courts sont mis en cache ; ces " +"caches devraient être déplacés au niveau de l'interpréteur. D'autres objets " +"ont leur propre liste de suppression, ces listes devraient être déplacées au " +"niveau de l'interpréteur et ainsi de suite." -#: ../Doc/faq/library.rst:450 +#: ../Doc/faq/library.rst:452 msgid "" "And I doubt that it can even be done in finite time, because the same " "problem exists for 3rd party extensions. It is likely that 3rd party " "extensions are being written at a faster rate than you can convert them to " "store all their global state in the interpreter state." msgstr "" +"C'est une tâche sans fin, car les extensions tierces ont le même problème, " +"et il est probable que les extensions tierces soient développées plus vite " +"qu'il ne soit possible de les corriger pour les faire stocker leur état au " +"niveau de l'interpréteur et non plus au niveau global." -#: ../Doc/faq/library.rst:455 +#: ../Doc/faq/library.rst:457 msgid "" "And finally, once you have multiple interpreters not sharing any state, what " "have you gained over running each interpreter in a separate process?" msgstr "" +"Et enfin, quel intérêt y-a t'il à avoir plusieurs interpréteurs qui ne " +"partagent pas d'état, par rapport à faire tourner chaque interpréteur dans " +"un processus différent ?" -#: ../Doc/faq/library.rst:460 +#: ../Doc/faq/library.rst:462 msgid "Input and Output" msgstr "Les entrées/sorties" -#: ../Doc/faq/library.rst:463 +#: ../Doc/faq/library.rst:465 msgid "How do I delete a file? (And other file questions...)" -msgstr "" +msgstr "Comment supprimer un fichier ? (et autres questions sur les fichiers…)" -#: ../Doc/faq/library.rst:465 +#: ../Doc/faq/library.rst:467 msgid "" "Use ``os.remove(filename)`` or ``os.unlink(filename)``; for documentation, " "see the :mod:`os` module. The two functions are identical; :func:`~os." "unlink` is simply the name of the Unix system call for this function." msgstr "" +"Utilisez ``os.remove(filename)`` ou ``os.unlink(filename)`` ; pour la " +"documentation, référez-vous au module :mod:`os`. Ces deux fonctions sont " +"identiques, :func:`~os.unlink` n'est tout simplement que le nom de l'appel " +"système à cette fonction sous Unix." -#: ../Doc/faq/library.rst:469 +#: ../Doc/faq/library.rst:471 msgid "" "To remove a directory, use :func:`os.rmdir`; use :func:`os.mkdir` to create " "one. ``os.makedirs(path)`` will create any intermediate directories in " @@ -499,79 +693,115 @@ msgid "" "directories as long as they're empty; if you want to delete an entire " "directory tree and its contents, use :func:`shutil.rmtree`." msgstr "" +"Utilisez :func:`os.rmdir` pour supprimer un dossier et :func:`os.mkdir` pour " +"en créer un nouveau. ``os.makedirs(chemin)`` crée les dossiers " +"intermédiaires de ``chemin`` qui n'existent pas et ``os.removedirs(chemin)`` " +"supprime les dossiers intermédiaires si ceux-ci sont vides. Pour supprimer " +"une arborescence et tout son contenu, utilisez :func:`shutil.rmtree`." -#: ../Doc/faq/library.rst:475 +#: ../Doc/faq/library.rst:477 msgid "To rename a file, use ``os.rename(old_path, new_path)``." msgstr "" +"``os.rename(ancien_chemin, nouveau_chemin)`` permet de renommer un fichier." -#: ../Doc/faq/library.rst:477 +#: ../Doc/faq/library.rst:479 msgid "" "To truncate a file, open it using ``f = open(filename, \"rb+\")``, and use " "``f.truncate(offset)``; offset defaults to the current seek position. " "There's also ``os.ftruncate(fd, offset)`` for files opened with :func:`os." "open`, where *fd* is the file descriptor (a small integer)." msgstr "" +"Pour supprimer le contenu d'un fichier, ouvrez celui-ci avec ``f = " +"open(nom_du_fichier, \"rb+\")``, puis exécutez ``f.truncate(décalage)`` où " +"*décalage* est par défaut la position actuelle de la tête de lecture. Il " +"existe aussi ``os.ftruncate(df, décalage)`` pour les fichiers ouverts avec :" +"func:`os.open`, où *df* est le descripteur de fichier (un entier court)." -#: ../Doc/faq/library.rst:482 +#: ../Doc/faq/library.rst:484 msgid "" "The :mod:`shutil` module also contains a number of functions to work on " "files including :func:`~shutil.copyfile`, :func:`~shutil.copytree`, and :" "func:`~shutil.rmtree`." msgstr "" +"Le module :mod:`shutil` propose aussi un grand nombre de fonctions pour " +"effectuer des opérations sur des fichiers comme :func:`~shutil.copyfile`, :" +"func:`~shutil.copytree` et :func:`~shutil.rmtree`." -#: ../Doc/faq/library.rst:488 +#: ../Doc/faq/library.rst:490 msgid "How do I copy a file?" -msgstr "" +msgstr "Comment copier un fichier ?" -#: ../Doc/faq/library.rst:490 +#: ../Doc/faq/library.rst:492 msgid "" "The :mod:`shutil` module contains a :func:`~shutil.copyfile` function. Note " "that on MacOS 9 it doesn't copy the resource fork and Finder info." msgstr "" +"Le module :mod:`shutil` fournit la fonction :func:`~shutil.copyfile`. Sous " +"MacOS 9, celle-ci ne copie pas le clonage de ressources ni les informations " +"du chercheur." -#: ../Doc/faq/library.rst:495 +#: ../Doc/faq/library.rst:497 msgid "How do I read (or write) binary data?" -msgstr "" +msgstr "Comment lire (ou écrire) des données binaires ?" -#: ../Doc/faq/library.rst:497 +#: ../Doc/faq/library.rst:499 msgid "" "To read or write complex binary data formats, it's best to use the :mod:" "`struct` module. It allows you to take a string containing binary data " "(usually numbers) and convert it to Python objects; and vice versa." msgstr "" +"Pour lire ou écrire des formats de données complexes en binaire, il est " +"recommandé d'utiliser le module :mod:`struct`. Celui-ci permet de convertir " +"une chaîne de caractères qui contient des données binaires, souvent des " +"nombres, en objets Python, et vice-versa." -#: ../Doc/faq/library.rst:501 +#: ../Doc/faq/library.rst:503 msgid "" "For example, the following code reads two 2-byte integers and one 4-byte " "integer in big-endian format from a file::" msgstr "" +"Par exemple, le code suivant lit, depuis un fichier, deux entiers codés sur " +"2 octets et un entier codé sur 4 octets, en format gros-boutiste ::" -#: ../Doc/faq/library.rst:510 +#: ../Doc/faq/library.rst:512 msgid "" "The '>' in the format string forces big-endian data; the letter 'h' reads " "one \"short integer\" (2 bytes), and 'l' reads one \"long integer\" (4 " "bytes) from the string." msgstr "" +"« > » dans la chaîne de formatage indique que la donnée doit être lue en " +"mode gros-boutiste, la lettre « h » indique un entier court (2 octets) et la " +"lettre « l » indique un entier long (4 octets)." -#: ../Doc/faq/library.rst:514 +#: ../Doc/faq/library.rst:516 msgid "" "For data that is more regular (e.g. a homogeneous list of ints or floats), " "you can also use the :mod:`array` module." msgstr "" +"Pour une donnée plus régulière (p. ex. une liste homogène d'entiers ou de " +"nombres à virgule flottante), il est possible d'utiliser le module :mod:" +"`array`." -#: ../Doc/faq/library.rst:519 +#: ../Doc/faq/library.rst:521 msgid "" "To read and write binary data, it is mandatory to open the file in binary " "mode (here, passing ``\"rb\"`` to :func:`open`). If you use ``\"r\"`` " "instead (the default), the file will be open in text mode and ``f.read()`` " "will return :class:`str` objects rather than :class:`bytes` objects." msgstr "" +"Pour lire et écrire de la donnée binaire, il est obligatoire d'ouvrir le " +"fichier en mode binaire également (ici, en passant ``\"rb\"`` à :func:" +"`open`). En utilisant ``\"r\"`` (valeur par défaut), le fichier est ouvert " +"en mode textuel et ``f.read()`` renvoie des objets :class:`str` au lieu " +"d'objets :class:`bytes`." -#: ../Doc/faq/library.rst:527 +#: ../Doc/faq/library.rst:529 msgid "I can't seem to use os.read() on a pipe created with os.popen(); why?" msgstr "" +"Il me semble impossible d'utiliser ``os.read()`` sur un tube créé avec ``os." +"popen()`` ; pourquoi ?" -#: ../Doc/faq/library.rst:529 +#: ../Doc/faq/library.rst:531 msgid "" ":func:`os.read` is a low-level function which takes a file descriptor, a " "small integer representing the opened file. :func:`os.popen` creates a high-" @@ -579,38 +809,49 @@ msgid "" "function. Thus, to read *n* bytes from a pipe *p* created with :func:`os." "popen`, you need to use ``p.read(n)``." msgstr "" +":func:`os.read` est une fonction de bas niveau qui prend en paramètre un " +"descripteur de fichier — un entier court qui représente le fichier ouvert. :" +"func:`os.popen` crée un objet fichier de haut niveau, du même type que celui " +"renvoyé par la fonction native :func:`open`. Par conséquent, pour lire *n* " +"octets d'un tube *p* créé avec :func:`os.popen`, il faut utiliser ``p." +"read(n)``." -#: ../Doc/faq/library.rst:616 +#: ../Doc/faq/library.rst:618 msgid "How do I access the serial (RS232) port?" -msgstr "" +msgstr "Comment accéder au port de transmission en série (RS-232) ?" -#: ../Doc/faq/library.rst:618 +#: ../Doc/faq/library.rst:620 msgid "For Win32, POSIX (Linux, BSD, etc.), Jython:" -msgstr "" +msgstr "Pour Win32, POSIX (Linux, BSD, etc.) et Jython :" -#: ../Doc/faq/library.rst:620 +#: ../Doc/faq/library.rst:622 msgid "http://pyserial.sourceforge.net" -msgstr "" +msgstr "http://pyserial.sourceforge.net" -#: ../Doc/faq/library.rst:622 +#: ../Doc/faq/library.rst:624 msgid "For Unix, see a Usenet post by Mitch Chapman:" msgstr "" +"Pour Unix, référez-vous à une publication sur Usenet de Mitch Chapman :" -#: ../Doc/faq/library.rst:624 +#: ../Doc/faq/library.rst:626 msgid "https://groups.google.com/groups?selm=34A04430.CF9@ohioee.com" -msgstr "" +msgstr "https://groups.google.com/groups?selm=34A04430.CF9@ohioee.com" -#: ../Doc/faq/library.rst:628 +#: ../Doc/faq/library.rst:630 msgid "Why doesn't closing sys.stdout (stdin, stderr) really close it?" msgstr "" +"Pourquoi fermer *sys.stdout*, *sys.stdin*, *sys.stderr* ne les ferme pas " +"réellement ?" -#: ../Doc/faq/library.rst:630 +#: ../Doc/faq/library.rst:632 msgid "" "Python :term:`file objects ` are a high-level layer of " "abstraction on low-level C file descriptors." msgstr "" +"Les :term:`objets fichiers ` en Python sont des abstractions de " +"haut niveau sur les descripteurs de fichier C de bas niveau." -#: ../Doc/faq/library.rst:633 +#: ../Doc/faq/library.rst:635 msgid "" "For most file objects you create in Python via the built-in :func:`open` " "function, ``f.close()`` marks the Python file object as being closed from " @@ -618,121 +859,162 @@ msgid "" "descriptor. This also happens automatically in ``f``'s destructor, when " "``f`` becomes garbage." msgstr "" +"Pour la plupart des objets fichiers créés en Python avec la fonction native :" +"func:`open`, ``f.close()`` marque le fichier comme fermé du point de vue de " +"Python et ferme aussi le descripteur C sous-jacent. Le même mécanisme est " +"enclenché automatiquement dans le destructeur de ``f``, lorsque ``f`` est " +"recyclé." -#: ../Doc/faq/library.rst:639 +#: ../Doc/faq/library.rst:641 msgid "" "But stdin, stdout and stderr are treated specially by Python, because of the " "special status also given to them by C. Running ``sys.stdout.close()`` " "marks the Python-level file object as being closed, but does *not* close the " "associated C file descriptor." msgstr "" +"Mais *stdin*, *stdout* et *stderr* ont droit à un traitement spécial en " +"Python, car leur statut en C est lui-aussi spécial. Exécuter ``sys.stdout." +"close()`` marque l'objet fichier comme fermé du point de vue de Python, mais " +"le descripteur de fichier C associé n'est *pas* fermé." -#: ../Doc/faq/library.rst:644 +#: ../Doc/faq/library.rst:646 msgid "" "To close the underlying C file descriptor for one of these three, you should " "first be sure that's what you really want to do (e.g., you may confuse " "extension modules trying to do I/O). If it is, use :func:`os.close`::" msgstr "" +"Pour fermer le descripteur de fichier sous-jacent C de l'une de ces trois " +"sorties, demandez-vous avant tout si vous êtes sûr de vous (cela peut, par " +"exemple, perturber le bon fonctionnement de modules qui font des opérations " +"d'entrée-sortie). Si c'est le cas, utilisez :func:`os.close` ::" -#: ../Doc/faq/library.rst:652 +#: ../Doc/faq/library.rst:654 msgid "Or you can use the numeric constants 0, 1 and 2, respectively." msgstr "" +"Il est aussi possible de fermer respectivement les constantes numériques 0, " +"1 ou 2." -#: ../Doc/faq/library.rst:656 +#: ../Doc/faq/library.rst:658 msgid "Network/Internet Programming" -msgstr "" +msgstr "Programmation réseau et Internet" -#: ../Doc/faq/library.rst:659 +#: ../Doc/faq/library.rst:661 msgid "What WWW tools are there for Python?" -msgstr "" +msgstr "Quels sont les outils Python dédiés à la Toile ?" -#: ../Doc/faq/library.rst:661 +#: ../Doc/faq/library.rst:663 msgid "" "See the chapters titled :ref:`internet` and :ref:`netdata` in the Library " "Reference Manual. Python has many modules that will help you build server-" "side and client-side web systems." msgstr "" +"Référez-vous aux chapitres intitulés :ref:`internet` et :ref:`netdata` dans " +"le manuel de référence de la bibliothèque. Python a de nombreux modules pour " +"construire des applications de Toile côté client comme côté serveur." -#: ../Doc/faq/library.rst:667 +#: ../Doc/faq/library.rst:669 msgid "" "A summary of available frameworks is maintained by Paul Boddie at https://" "wiki.python.org/moin/WebProgramming\\ ." msgstr "" +"Un résumé des cadriciels disponibles est maintenu par Paul Boddie à " +"l'adresse https://wiki.python.org/moin/WebProgramming\\ ." -#: ../Doc/faq/library.rst:670 +#: ../Doc/faq/library.rst:672 msgid "" "Cameron Laird maintains a useful set of pages about Python web technologies " "at http://phaseit.net/claird/comp.lang.python/web_python." msgstr "" +"Cameron Laird maintient un ensemble intéressant d'articles sur les " +"technologies Python dédiées à la Toile à l'adresse http://phaseit.net/claird/" +"comp.lang.python/web_python." -#: ../Doc/faq/library.rst:675 +#: ../Doc/faq/library.rst:677 msgid "How can I mimic CGI form submission (METHOD=POST)?" -msgstr "" +msgstr "Comment reproduire un envoi de formulaire CGI (``METHOD=POST``) ?" -#: ../Doc/faq/library.rst:677 +#: ../Doc/faq/library.rst:679 msgid "" "I would like to retrieve web pages that are the result of POSTing a form. Is " "there existing code that would let me do this easily?" msgstr "" +"J'aimerais récupérer la page de retour d'un envoi de formulaire sur la " +"Toile. Existe-t'il déjà du code qui pourrait m'aider à le faire facilement ?" -#: ../Doc/faq/library.rst:680 +#: ../Doc/faq/library.rst:682 msgid "Yes. Here's a simple example that uses urllib.request::" -msgstr "" +msgstr "Oui. Voici un exemple simple d'utilisation de *urllib.request* ::" -#: ../Doc/faq/library.rst:695 +#: ../Doc/faq/library.rst:697 msgid "" "Note that in general for percent-encoded POST operations, query strings must " "be quoted using :func:`urllib.parse.urlencode`. For example, to send " "``name=Guy Steele, Jr.``::" msgstr "" +"Remarquez qu'en général, la chaîne de caractères d'une requête POST encodée " +"avec des des signes « % » doit être mise entre guillemets à l'aide de :func:" +"`urllib.parse.urlencode`. Par exemple pour envoyer ``name=Guy Steele, Jr." +"`` ::" -#: ../Doc/faq/library.rst:703 +#: ../Doc/faq/library.rst:705 msgid ":ref:`urllib-howto` for extensive examples." -msgstr "" +msgstr ":ref:`urllib-howto` pour des exemples complets." -#: ../Doc/faq/library.rst:707 +#: ../Doc/faq/library.rst:709 msgid "What module should I use to help with generating HTML?" -msgstr "" +msgstr "Quel module utiliser pour générer du HTML ?" -#: ../Doc/faq/library.rst:711 +#: ../Doc/faq/library.rst:713 msgid "" "You can find a collection of useful links on the `Web Programming wiki page " "`_." msgstr "" +"La `page wiki de la programmation Toile `_ (en anglais) répertorie un ensemble de liens pertinents." -#: ../Doc/faq/library.rst:716 +#: ../Doc/faq/library.rst:718 msgid "How do I send mail from a Python script?" -msgstr "" +msgstr "Comment envoyer un courriel avec un script Python ?" -#: ../Doc/faq/library.rst:718 +#: ../Doc/faq/library.rst:720 msgid "Use the standard library module :mod:`smtplib`." -msgstr "" +msgstr "Utilisez le module :mod:`smtplib` de la bibliothèque standard." -#: ../Doc/faq/library.rst:720 +#: ../Doc/faq/library.rst:722 msgid "" "Here's a very simple interactive mail sender that uses it. This method will " "work on any host that supports an SMTP listener. ::" msgstr "" +"Voici un exemple très simple d'un envoyeur de courriel qui l'utilise. Cette " +"méthode fonctionne sur tous les serveurs qui implémentent SMTP. ::" -#: ../Doc/faq/library.rst:740 +#: ../Doc/faq/library.rst:742 msgid "" "A Unix-only alternative uses sendmail. The location of the sendmail program " "varies between systems; sometimes it is ``/usr/lib/sendmail``, sometimes ``/" "usr/sbin/sendmail``. The sendmail manual page will help you out. Here's " "some sample code::" msgstr "" +"Sous Unix, il est possible d'utiliser *sendmail*. La localisation de " +"l'exécutable *sendmail* dépend du système ; cela peut-être ``/usr/lib/" +"sendmail`` ou ``/usr/sbin/sendmail``, la page de manuel de *sendmail* peut " +"vous aider. Par exemple ::" -#: ../Doc/faq/library.rst:760 +#: ../Doc/faq/library.rst:762 msgid "How do I avoid blocking in the connect() method of a socket?" msgstr "" +"Comment éviter de bloquer dans la méthode ``connect()`` d'un connecteur " +"réseau ?" -#: ../Doc/faq/library.rst:762 +#: ../Doc/faq/library.rst:764 msgid "" "The :mod:`select` module is commonly used to help with asynchronous I/O on " "sockets." msgstr "" +"Le module :mod:`select` est fréquemment utilisé pour effectuer des entrées-" +"sorties asynchrones sur des connecteurs réseaux." -#: ../Doc/faq/library.rst:765 +#: ../Doc/faq/library.rst:767 msgid "" "To prevent the TCP connect from blocking, you can set the socket to non-" "blocking mode. Then when you do the ``connect()``, you will either connect " @@ -741,111 +1023,151 @@ msgid "" "progress, but hasn't finished yet. Different OSes will return different " "values, so you're going to have to check what's returned on your system." msgstr "" +"Pour empêcher une connexion TCP de se bloquer, il est possible de mettre le " +"connecteur en mode lecture seule. Avec cela, au moment du ``connect()``, la " +"connexion pourra être immédiate (peu probable) ou bien vous obtiendrez une " +"exception qui contient le numéro d'erreur dans ``.errno``. ``errno." +"EINPROGRESS`` indique que la connexion est en cours, mais qu'elle n'a pas " +"encore aboutie. La valeur dépend du système d'exploitation, donc renseignez-" +"vous sur la valeur utilisée par votre système." -#: ../Doc/faq/library.rst:772 +#: ../Doc/faq/library.rst:774 msgid "" "You can use the ``connect_ex()`` method to avoid creating an exception. It " "will just return the errno value. To poll, you can call ``connect_ex()`` " "again later -- ``0`` or ``errno.EISCONN`` indicate that you're connected -- " "or you can pass this socket to select to check if it's writable." msgstr "" +"``connect_ex()`` permet d'éviter la création de l'exception, et de ne " +"renvoyer que la valeur de *errno*. Pour vérifier l'état de la connexion, " +"utilisez encore une fois ``connect_ex()`` — ``0`` ou ``errno.EISCONN`` " +"indiquent que la connexion est active — ou passez le connecteur en argument " +"de ``select()`` pour vérifier si le connecteur est prêt à recevoir des " +"entrées." -#: ../Doc/faq/library.rst:778 +#: ../Doc/faq/library.rst:780 msgid "" "The :mod:`asyncore` module presents a framework-like approach to the problem " "of writing non-blocking networking code. The third-party `Twisted `_ library is a popular and feature-rich alternative." msgstr "" +"Le module :mod:`asyncore` propose une approche en cadriciel pour écrire du " +"code réseau non-bloquant. La bibliothèque tierce `Twisted `_ en est une alternative plébiscitée, avec un grand " +"nombre de fonctionnalités." -#: ../Doc/faq/library.rst:785 +#: ../Doc/faq/library.rst:787 msgid "Databases" -msgstr "" +msgstr "Bases de données" -#: ../Doc/faq/library.rst:788 +#: ../Doc/faq/library.rst:790 msgid "Are there any interfaces to database packages in Python?" msgstr "" +"Existe-t'il des modules Python pour s'interfacer avec des bases de données ?" -#: ../Doc/faq/library.rst:790 +#: ../Doc/faq/library.rst:792 msgid "Yes." msgstr "Oui." -#: ../Doc/faq/library.rst:792 +#: ../Doc/faq/library.rst:794 msgid "" "Interfaces to disk-based hashes such as :mod:`DBM ` and :mod:`GDBM " "` are also included with standard Python. There is also the :mod:" "`sqlite3` module, which provides a lightweight disk-based relational " "database." msgstr "" +"La distribution standard de Python fournit aussi des interfaces à des bases " +"de données comme :mod:`DBM ` ou :mod:`GDBM `. Il existe " +"aussi le module :mod:`sqlite3` qui implémente une base de données " +"relationelle légère sur disque." -#: ../Doc/faq/library.rst:797 +#: ../Doc/faq/library.rst:799 msgid "" "Support for most relational databases is available. See the " "`DatabaseProgramming wiki page `_ for details." msgstr "" +"La gestion de la plupart des bases de données relationnelles est assurée. " +"Voir la page wiki `DatabaseProgramming `_ pour plus de détails." -#: ../Doc/faq/library.rst:803 +#: ../Doc/faq/library.rst:805 msgid "How do you implement persistent objects in Python?" -msgstr "" +msgstr "Comment implémenter la persistance d'objets en Python ?" -#: ../Doc/faq/library.rst:805 +#: ../Doc/faq/library.rst:807 msgid "" "The :mod:`pickle` library module solves this in a very general way (though " "you still can't store things like open files, sockets or windows), and the :" "mod:`shelve` library module uses pickle and (g)dbm to create persistent " "mappings containing arbitrary Python objects." msgstr "" +"Le module :mod:`pickle` répond à cela de manière large (bien qu'il ne soit " +"pas possible de stocker des fichiers ouverts, des connecteurs ou des " +"fenêtres par exemple), et le module :mod:`shelve` de la bibliothèque utilise " +"*pickle* et *(g)dbm* pour créer des liens persistants vers des objets Python." -#: ../Doc/faq/library.rst:812 +#: ../Doc/faq/library.rst:814 msgid "Mathematics and Numerics" -msgstr "" +msgstr "Mathématiques et calcul numérique" -#: ../Doc/faq/library.rst:815 +#: ../Doc/faq/library.rst:817 msgid "How do I generate random numbers in Python?" -msgstr "" +msgstr "Comment générer des nombres aléatoires en Python ?" -#: ../Doc/faq/library.rst:817 +#: ../Doc/faq/library.rst:819 msgid "" "The standard module :mod:`random` implements a random number generator. " "Usage is simple::" msgstr "" +"Le module :mod:`random` de la bibliothèque standard comprend un générateur " +"de nombres aléatoires. Son utilisation est simple ::" -#: ../Doc/faq/library.rst:823 +#: ../Doc/faq/library.rst:825 msgid "This returns a random floating point number in the range [0, 1)." msgstr "" +"Le code précédent renvoie un nombre à virgule flottante aléatoire dans " +"l'intervalle [0, 1[." -#: ../Doc/faq/library.rst:825 +#: ../Doc/faq/library.rst:827 msgid "" "There are also many other specialized generators in this module, such as:" -msgstr "" +msgstr "Ce module fournit beaucoup d'autres générateurs spécialisés comme :" -#: ../Doc/faq/library.rst:827 +#: ../Doc/faq/library.rst:829 msgid "``randrange(a, b)`` chooses an integer in the range [a, b)." -msgstr "" +msgstr "``randrange(a, b)`` génère un entier dans l'intervalle [a, b[." -#: ../Doc/faq/library.rst:828 +#: ../Doc/faq/library.rst:830 msgid "``uniform(a, b)`` chooses a floating point number in the range [a, b)." msgstr "" +"``uniform(a, b)`` génère un nombre à virgule flottante aléatoire dans " +"l'intervalle [a, b[." -#: ../Doc/faq/library.rst:829 +#: ../Doc/faq/library.rst:831 msgid "" "``normalvariate(mean, sdev)`` samples the normal (Gaussian) distribution." -msgstr "" +msgstr "``normalvariate(mean, sdev)`` simule la loi normale (Gaussienne)." -#: ../Doc/faq/library.rst:831 +#: ../Doc/faq/library.rst:833 msgid "Some higher-level functions operate on sequences directly, such as:" msgstr "" +"Des fonctions de haut niveau opèrent directement sur des séquences comme :" -#: ../Doc/faq/library.rst:833 +#: ../Doc/faq/library.rst:835 msgid "``choice(S)`` chooses random element from a given sequence" -msgstr "" +msgstr "``choice(S)`` sélectionne au hasard un élément d'une séquence donnée" -#: ../Doc/faq/library.rst:834 +#: ../Doc/faq/library.rst:836 msgid "``shuffle(L)`` shuffles a list in-place, i.e. permutes it randomly" msgstr "" +"``shuffle(L)`` mélange une liste en-place, c-à-d lui applique une " +"permutation aléatoire" -#: ../Doc/faq/library.rst:836 +#: ../Doc/faq/library.rst:838 msgid "" "There's also a ``Random`` class you can instantiate to create independent " "multiple random number generators." msgstr "" +"Il existe aussi une classe ``Random`` qu'il est possible d'instancier pour " +"créer des générateurs aléatoires indépendants." diff --git a/faq/programming.po b/faq/programming.po index 19712f6ce..0a81eda4e 100644 --- a/faq/programming.po +++ b/faq/programming.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-21 09:15+0200\n" +"POT-Creation-Date: 2018-06-10 11:27+0200\n" "PO-Revision-Date: 2017-10-27 17:41+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -19,17 +19,23 @@ msgstr "" #: ../Doc/faq/programming.rst:5 msgid "Programming FAQ" -msgstr "" +msgstr "FAQ de programmation" + +#: ../Doc/faq/programming.rst:8 +msgid "Contents" +msgstr "Sommaire" #: ../Doc/faq/programming.rst:12 msgid "General Questions" -msgstr "" +msgstr "Questions générales" #: ../Doc/faq/programming.rst:15 msgid "" "Is there a source code level debugger with breakpoints, single-stepping, " "etc.?" msgstr "" +"Existe-t-il un débogueur de code source avec points d'arrêts, exécution pas-" +"à-pas, etc. ?" #: ../Doc/faq/programming.rst:17 ../Doc/faq/programming.rst:60 msgid "Yes." @@ -42,6 +48,10 @@ msgid "" "Library Reference Manual `. You can also write your own debugger by " "using the code for pdb as an example." msgstr "" +"Le module ``pdb`` est un débogueur console simple, mais parfaitement adapté " +"à Python. Il fait partie de la bibliothèque standard de Python, sa " +"documentation se trouve dans le :mod:`manuel de référence `. Vous " +"pouvez vous inspirer du code de ``pdb`` pour écrire votre propre débogueur." #: ../Doc/faq/programming.rst:24 msgid "" @@ -49,6 +59,9 @@ msgid "" "Python distribution (normally available as Tools/scripts/idle), includes a " "graphical debugger." msgstr "" +"L'environnement de développement interactif IDLE, qui est fourni avec la " +"distribution standard de Python (normalement disponible dans ``Tools/scripts/" +"idle``) contient un débogueur graphique." #: ../Doc/faq/programming.rst:28 msgid "" @@ -59,6 +72,14 @@ msgid "" ">`__ project and as a part of the ActivePython distribution (see https://www." "activestate.com/activepython\\ )." msgstr "" +"*PythonWin* est un environnement de développement intégré (EDI) Python qui " +"embarque un débogueur graphique basé sur ``pdb``. Le débogueur *PythonWin* " +"colore les points d'arrêts et possède quelques fonctionnalités sympathiques, " +"comme la possibilité de déboguer des programmes développés sans " +"*PythonWin*. *PythonWin* est disponible dans le projet `Extensions Python " +"pour Windows `__ et fait partie " +"de la distribution ActivePython (voir https://www.activestate.com/" +"activepython\\ )." #: ../Doc/faq/programming.rst:35 msgid "" @@ -68,12 +89,21 @@ msgid "" "browsers, inheritance hierarchies, doc string generated html documentation, " "an advanced debugger, integrated help, and Zope support." msgstr "" +"`Boa Constructor `_ est un EDI et " +"un constructeur d'interface homme-machine basé sur *wxWidgets*. Il propose " +"la création et la manipulation de fenêtres, un inspecteur d'objets, de " +"nombreuses façons de visualiser des sources comme un navigateur d'objets, " +"les hiérarchies d'héritage, la documentation html générée par les " +"docstrings, un débogueur avancé, une aide intégrée et la prise en charge de " +"Zope." #: ../Doc/faq/programming.rst:41 msgid "" "`Eric `_ is an IDE built on PyQt and " "the Scintilla editing component." msgstr "" +"`Eric `_ est un EDI basé sur PyQt et " +"l'outil d'édition Scintilla." #: ../Doc/faq/programming.rst:44 msgid "" @@ -82,28 +112,36 @@ msgid "" "can be found at http://bashdb.sourceforge.net/pydb/ and DDD can be found at " "https://www.gnu.org/software/ddd." msgstr "" +"Pydb est une version du débogueur standard Python pdb, modifié pour être " +"utilisé avec DDD (Data Display Debugger), un célèbre débogueur graphique. " +"Pydb est disponible sur http://bashdb.sourceforge.net/pydb/ et DDD est " +"disponible sur https://www.gnu.org/software/ddd." #: ../Doc/faq/programming.rst:49 msgid "" "There are a number of commercial Python IDEs that include graphical " "debuggers. They include:" msgstr "" +"Il existe de nombreux EDI Python propriétaires qui embarquent un débogueur " +"graphique. Notamment :" #: ../Doc/faq/programming.rst:52 msgid "Wing IDE (https://wingware.com/)" -msgstr "" +msgstr "Wing IDE (https://wingware.com/)" #: ../Doc/faq/programming.rst:53 msgid "Komodo IDE (https://komodoide.com/)" -msgstr "" +msgstr "Komodo IDE (https://komodoide.com/)" #: ../Doc/faq/programming.rst:54 msgid "PyCharm (https://www.jetbrains.com/pycharm/)" -msgstr "" +msgstr "PyCharm (https://www.jetbrains.com/pycharm/)" #: ../Doc/faq/programming.rst:58 msgid "Is there a tool to help find bugs or perform static analysis?" msgstr "" +"Existe-t-il des outils pour aider à trouver des bogues ou faire de l'analyse " +"statique de code ?" #: ../Doc/faq/programming.rst:62 msgid "" @@ -111,6 +149,10 @@ msgid "" "and warns about code complexity and style. You can get PyChecker from " "http://pychecker.sourceforge.net/." msgstr "" +"*PyChecker* est un outil d'analyse statique qui trouve les bogues dans le " +"code source Python et émet des avertissements relatifs à la complexité et au " +"style du code. *PyChecker* est disponible sur http://pychecker.sourceforge." +"net/." #: ../Doc/faq/programming.rst:66 msgid "" @@ -122,10 +164,18 @@ msgid "" "standard, whether declared interfaces are fully implemented, and more. " "https://docs.pylint.org/ provides a full list of Pylint's features." msgstr "" +"Pylint `_ est un autre outil qui vérifie si un " +"module satisfait aux normes de développement, et qui permet en plus d'écrire " +"des greffons pour ajouter des fonctionnalités personnalisées. En plus de la " +"vérification des bogues effectuée par PyChecker, Pylint effectue quelques " +"vérifications supplémentaires comme la longueur des lignes, les conventions " +"de nommage des variables, que les interfaces déclarées sont implémentées en " +"totalité, et plus encore. https://docs.pylint.org/ fournit la liste complète " +"des fonctionnalités de Pylint." #: ../Doc/faq/programming.rst:76 msgid "How can I create a stand-alone binary from a Python script?" -msgstr "" +msgstr "Comment créer un binaire autonome à partir d'un script Python ?" #: ../Doc/faq/programming.rst:78 msgid "" @@ -135,6 +185,12 @@ msgid "" "determine the set of modules required by a program and bind these modules " "together with a Python binary to produce a single executable." msgstr "" +"Pour créer un programme autonome, c'est-à-dire un programme que n'importe " +"qui peut télécharger et exécuter sans avoir à installer une distribution " +"Python au préalable, il n'est pas nécessaire de compiler du code Python en " +"code C. Il existe en effet plusieurs outils qui déterminent les modules " +"requis par un programme et lient ces modules avec un binaire Python pour " +"produire un seul exécutable." #: ../Doc/faq/programming.rst:84 msgid "" @@ -143,6 +199,11 @@ msgid "" "you can embed all your modules into a new program, which is then linked with " "the standard Python modules." msgstr "" +"Un de ces outils est freeze, qui se trouve dans ``Tools/freeze`` de " +"l'arborescence des sources de Python. Il convertit le code intermédiaire " +"(*bytecode*) Python en tableaux C ; un compilateur C permet d'intégrer tous " +"vos modules dans un nouveau programme, qui est ensuite lié aux modules " +"standards Python." #: ../Doc/faq/programming.rst:89 msgid "" @@ -156,16 +217,29 @@ msgid "" "rest of the Python interpreter to form a self-contained binary which acts " "exactly like your script." msgstr "" +"Il fonctionne en cherchant de manière récursive les instructions d'import " +"(sous les deux formes) dans le code source et en recherchant ces modules " +"dans le chemin Python standard ainsi que dans le répertoire source (pour les " +"modules natifs). Il transforme ensuite le code intermédiaire des modules " +"écrits en Python en code C (des tableaux pré-remplis qui peuvent être " +"transformés en objets code à l'aide du module *marshal*) et crée un fichier " +"de configuration personnalisé qui contient uniquement les modules natifs qui " +"sont réellement utilisés dans le programme. Il compile ensuite le code C " +"généré et le lie au reste de l'interpréteur Python pour former un binaire " +"autonome qui fait exactement la même chose que le script." #: ../Doc/faq/programming.rst:98 msgid "" "Obviously, freeze requires a C compiler. There are several other utilities " "which don't. One is Thomas Heller's py2exe (Windows only) at" msgstr "" +"Bien évidemment, freeze nécessite un compilateur C. Il existe d'autres " +"outils qui peuvent s'en passer. Un de ceux-ci est py2exe de Thomas Heller " +"(pour Windows uniquement) disponible sur" #: ../Doc/faq/programming.rst:101 msgid "http://www.py2exe.org/" -msgstr "" +msgstr "http://www.py2exe.org/" #: ../Doc/faq/programming.rst:103 msgid "" @@ -176,20 +250,25 @@ msgstr "" #: ../Doc/faq/programming.rst:107 msgid "Are there coding standards or a style guide for Python programs?" msgstr "" +"Existe-t-il des normes de développement ou un guide de style pour écrire des " +"programmes Python ?" #: ../Doc/faq/programming.rst:109 msgid "" "Yes. The coding style required for standard library modules is documented " "as :pep:`8`." msgstr "" +"Oui. Le style de développement que les modules de la bibliothèque standard " +"doivent obligatoirement respecter est documenté dans la :pep:`8`." #: ../Doc/faq/programming.rst:114 msgid "Core Language" -msgstr "" +msgstr "Fondamentaux" #: ../Doc/faq/programming.rst:117 msgid "Why am I getting an UnboundLocalError when the variable has a value?" msgstr "" +"Pourquoi une UnboundLocalError est levée alors qu'une variable a une valeur ?" #: ../Doc/faq/programming.rst:119 msgid "" @@ -197,18 +276,21 @@ msgid "" "when it is modified by adding an assignment statement somewhere in the body " "of a function." msgstr "" +"Il est parfois surprenant d'obtenir une UnboundLocalError dans du code " +"jusqu'à présent correct, quand celui-ci est modifié en ajoutant une " +"instruction d'affectation quelque part dans le corps d'une fonction." #: ../Doc/faq/programming.rst:123 msgid "This code:" -msgstr "" +msgstr "Le code suivant :" #: ../Doc/faq/programming.rst:131 msgid "works, but this code:" -msgstr "" +msgstr "fonctionne, mais le suivant :" #: ../Doc/faq/programming.rst:138 msgid "results in an UnboundLocalError:" -msgstr "" +msgstr "lève une UnboundLocalError :" #: ../Doc/faq/programming.rst:145 msgid "" @@ -219,12 +301,20 @@ msgid "" "Consequently when the earlier ``print(x)`` attempts to print the " "uninitialized local variable and an error results." msgstr "" +"Cela est dû au fait que, quand une variable est affectée dans un contexte, " +"cette variable devient locale à ce contexte et remplace toute variable du " +"même nom du contexte appelant. Vu que la dernière instruction dans *foo* " +"affecte une nouvelle valeur à ``x``, le compilateur la traite comme une " +"nouvelle variable. Par conséquent, quand le ``print(x)`` essaye d'afficher " +"la variable non initialisée, une erreur se produit." #: ../Doc/faq/programming.rst:152 msgid "" "In the example above you can access the outer scope variable by declaring it " "global:" msgstr "" +"Dans l'exemple ci-dessus, la variable du contexte appelant reste accessible " +"en la déclarant globale :" #: ../Doc/faq/programming.rst:163 msgid "" @@ -232,16 +322,23 @@ msgid "" "the superficially analogous situation with class and instance variables) you " "are actually modifying the value of the variable in the outer scope:" msgstr "" +"Cette déclaration explicite est obligatoire pour se rappeler que " +"(contrairement au cas à peu près similaire avec des variables de classe et " +"d'instance), c'est la valeur de la variable du contexte appelant qui est " +"modifiée :" #: ../Doc/faq/programming.rst:170 msgid "" "You can do a similar thing in a nested scope using the :keyword:`nonlocal` " "keyword:" msgstr "" +"Une alternative dans un contexte imbriqué consiste à utiliser le mot-clé :" +"keyword:`nonlocal` :" #: ../Doc/faq/programming.rst:187 msgid "What are the rules for local and global variables in Python?" msgstr "" +"Quelles sont les règles pour les variables locales et globales en Python ?" #: ../Doc/faq/programming.rst:189 msgid "" @@ -250,6 +347,10 @@ msgid "" "function's body, it's assumed to be a local unless explicitly declared as " "global." msgstr "" +"En Python, si une variable n'est pas modifiée dans une fonction mais " +"seulement lue, elle est implicitement considérée comme globale. Si une " +"valeur lui est affectée, elle est considérée locale (sauf si elle est " +"explicitement déclarée globale)." #: ../Doc/faq/programming.rst:193 msgid "" @@ -261,18 +362,30 @@ msgid "" "a component of an imported module. This clutter would defeat the usefulness " "of the ``global`` declaration for identifying side-effects." msgstr "" +"Bien que surprenant au premier abord, ce choix s'explique facilement. D'une " +"part, exiger :keyword:`global` pour des variables affectées est une " +"protection contre des effets de bord inattendus. D'autre part, si ``global`` " +"était obligatoire pour toutes les références à des objets globaux, il " +"faudrait mettre ``global`` partout, car il faudrait dans ce cas déclarer " +"globale chaque référence à une fonction native ou à un composant d'un module " +"importé. Le codé serait alors truffé de déclarations ``global``, ce qui " +"nuirait à leur raison d'être : identifier les effets de bords." #: ../Doc/faq/programming.rst:203 msgid "" "Why do lambdas defined in a loop with different values all return the same " "result?" msgstr "" +"Pourquoi des expressions lambda définies dans une boucle avec des valeurs " +"différentes retournent-elles le même résultat ?" #: ../Doc/faq/programming.rst:205 msgid "" "Assume you use a for loop to define a few different lambdas (or even plain " "functions), e.g.::" msgstr "" +"Supposons que l'on utilise une boucle itérative pour définir des expressions " +"lambda (voire même des fonctions) différentes, par exemple ::" #: ../Doc/faq/programming.rst:212 msgid "" @@ -281,6 +394,9 @@ msgid "" "``1``, ``4``, ``9``, and ``16``. However, when you actually try you will " "see that they all return ``16``::" msgstr "" +"Le code précédent crée une liste de 5 expressions lambda qui calculent " +"chacune ``x**2``. En les exécutant, on pourrait s'attendre à obtenir ``0``, " +"``1``, ``4``, ``9`` et ``16``. Elles renvoient en réalité toutes ``16`` ::" #: ../Doc/faq/programming.rst:222 msgid "" @@ -290,12 +406,21 @@ msgid "" "the functions now return ``4**2``, i.e. ``16``. You can also verify this by " "changing the value of ``x`` and see how the results of the lambdas change::" msgstr "" +"Ceci s'explique par le fait que ``x`` n'est pas une variable locale aux " +"expressions, mais est définie dans le contexte appelant. Elle est lue à " +"l'appel de l'expression lambda – et non au moment où cette expression est " +"définie. À la fin de la boucle, ``x`` vaut ``4``, donc toutes les fonctions " +"renvoient ``4*2``, i.e. ``16``. Ceci se vérifie également en changeant la " +"valeur de ``x`` et en constatant que les résultats sont modifiés ::" #: ../Doc/faq/programming.rst:232 msgid "" "In order to avoid this, you need to save the values in variables local to " "the lambdas, so that they don't rely on the value of the global ``x``::" msgstr "" +"Pour éviter ce phénomène, les valeurs doivent être stockées dans des " +"variables locales aux expressions lambda pour que celles-ci ne se basent " +"plus sur la variable globale ``x`` ::" #: ../Doc/faq/programming.rst:239 msgid "" @@ -305,16 +430,24 @@ msgid "" "the first lambda, ``1`` in the second, ``2`` in the third, and so on. " "Therefore each lambda will now return the correct result::" msgstr "" +"Dans ce code, ``n=x`` crée une nouvelle variable ``n``, locale à " +"l'expression. Cette variable est évaluée quand l'expression est définie donc " +"``n`` a la même valeur que ``x`` à ce moment. La valeur de ``n`` est donc " +"``0`` dans la première lambda, ``1`` dans la deuxième, ``2`` dans la " +"troisième et ainsi de suite. Chaque expression lambda renvoie donc le " +"résultat correct ::" #: ../Doc/faq/programming.rst:250 msgid "" "Note that this behaviour is not peculiar to lambdas, but applies to regular " "functions too." msgstr "" +"Ce comportement n'est pas propre aux expressions lambda, mais s'applique " +"aussi aux fonctions normales." #: ../Doc/faq/programming.rst:255 msgid "How do I share global variables across modules?" -msgstr "" +msgstr "Comment partager des variables globales entre modules ?" #: ../Doc/faq/programming.rst:257 msgid "" @@ -325,28 +458,37 @@ msgid "" "each module, any changes made to the module object get reflected " "everywhere. For example:" msgstr "" +"La manière standard de partager des informations entre modules d'un même " +"programme est de créer un module spécial (souvent appelé *config* ou *cfg*) " +"et de l'importer dans tous les modules de l'application ; le module devient " +"accessible depuis l'espace de nommage global. Vu qu'il n'y a qu'une instance " +"de chaque module, tout changement dans l'instance est propagé partout. Par " +"exemple :" #: ../Doc/faq/programming.rst:263 msgid "config.py::" -msgstr "" +msgstr "*config.py* ::" #: ../Doc/faq/programming.rst:267 msgid "mod.py::" -msgstr "" +msgstr "*mod.py* ::" #: ../Doc/faq/programming.rst:272 msgid "main.py::" -msgstr "" +msgstr "*main.py* ::" #: ../Doc/faq/programming.rst:278 msgid "" "Note that using a module is also the basis for implementing the Singleton " "design pattern, for the same reason." msgstr "" +"Pour les mêmes raisons, l'utilisation d'un module est aussi à la base de " +"l'implémentation du patron de conception singleton." #: ../Doc/faq/programming.rst:283 msgid "What are the \"best practices\" for using import in a module?" msgstr "" +"Quelles sont les « bonnes pratiques » pour utiliser import dans un module ?" #: ../Doc/faq/programming.rst:285 msgid "" @@ -354,6 +496,9 @@ msgid "" "importer's namespace, and makes it much harder for linters to detect " "undefined names." msgstr "" +"De manière générale, il ne faut pas faire ``from modulename import *``. Ceci " +"encombre l'espace de nommage de l'importateur et rend la détection de noms " +"non-définis beaucoup plus ardue pour les analyseurs de code." #: ../Doc/faq/programming.rst:289 msgid "" @@ -362,30 +507,42 @@ msgid "" "is in scope. Using one import per line makes it easy to add and delete " "module imports, but using multiple imports per line uses less screen space." msgstr "" +"Les modules doivent être importés au début d'un fichier. Ceci permet " +"d'afficher clairement de quels modules le code à besoin et évite de se " +"demander si le module est dans le contexte. Faire un seul `import` par ligne " +"rend l'ajout et la suppression d'une importation de module plus aisé, mais " +"importer plusieurs modules sur une même ligne prend moins d'espace." #: ../Doc/faq/programming.rst:294 msgid "It's good practice if you import modules in the following order:" -msgstr "" +msgstr "Il est recommandé d'importer les modules dans l'ordre suivant :" #: ../Doc/faq/programming.rst:296 msgid "standard library modules -- e.g. ``sys``, ``os``, ``getopt``, ``re``" msgstr "" +"les modules de la bibliothèque standard — e.g. ``sys``, ``os``, ``getopt``, " +"``re``" #: ../Doc/faq/programming.rst:297 msgid "" "third-party library modules (anything installed in Python's site-packages " "directory) -- e.g. mx.DateTime, ZODB, PIL.Image, etc." msgstr "" +"les modules externes (tout ce qui est installé dans le dossier *site-" +"packages* de Python) — e.g. *mx.DateTime, ZODB, PIL.Image*, etc." #: ../Doc/faq/programming.rst:299 msgid "locally-developed modules" -msgstr "" +msgstr "les modules développés en local" #: ../Doc/faq/programming.rst:301 msgid "" "It is sometimes necessary to move imports to a function or class to avoid " "problems with circular imports. Gordon McMillan says:" msgstr "" +"Il est parfois nécessaire de déplacer des importations dans une fonction ou " +"une classe pour éviter les problèmes d'importations circulaires. Comme le " +"souligne Gordon McMillan :" #: ../Doc/faq/programming.rst:304 msgid "" @@ -395,6 +552,12 @@ msgid "" "That's because names in the 1st are not yet available, because the first " "module is busy importing the 2nd." msgstr "" +"Il n'y a aucun souci à faire des importations circulaires tant que les deux " +"modules utilisent la forme ``import ``. Ça ne pose problème que si " +"le second module cherche à récupérer un nom du premier module (*\"from " +"module import name\"*) et que l'importation est dans l'espace de nommage du " +"fichier. Les noms du premier module ne sont en effet pas encore disponibles " +"car le premier module est occupé à importer le second." #: ../Doc/faq/programming.rst:310 msgid "" @@ -403,6 +566,10 @@ msgid "" "called, the first module will have finished initializing, and the second " "module can do its import." msgstr "" +"Dans ce cas, si le second module n'est utilisé que dans une fonction, " +"l'importation peut facilement être déplacée dans cette fonction. Au moment " +"où l'importation sera appelée, le premier module aura fini de s'initialiser " +"et le second pourra faire son importation." #: ../Doc/faq/programming.rst:315 msgid "" @@ -412,6 +579,12 @@ msgid "" "importing the correct modules in the corresponding platform-specific code is " "a good option." msgstr "" +"Il peut parfois être nécessaire de déplacer des importations de modules hors " +"de l'espace de plus haut niveau du code si certains de ces modules dépendent " +"de la machine utilisée. Dans ce cas de figure, il est parfois impossible " +"d'importer tous les modules au début du fichier. Dans ce cas, il est " +"recommandé d'importer les modules adéquats dans le code spécifique à la " +"machine." #: ../Doc/faq/programming.rst:320 msgid "" @@ -426,16 +599,30 @@ msgid "" "only a couple of dictionary lookups. Even if the module name has gone out " "of scope, the module is probably available in :data:`sys.modules`." msgstr "" +"Les imports ne devraient être déplacés dans un espace local, comme dans la " +"définition d'une fonction, que si cela est nécessaire pour résoudre un " +"problème comme éviter des dépendances circulaires ou réduire le temps " +"d'initialisation d'un module. Cette technique est particulièrement utile si " +"la majorité des imports est superflue selon le flux d'exécution du " +"programme. Il est également pertinent de déplacer des importations dans une " +"fonction si le module n'est utilisé qu'au sein de cette fonction. Le premier " +"chargement d'un module peut être coûteux à cause du coût fixe " +"d'initialisation d'un module, mais charger un module plusieurs fois est " +"quasiment gratuit, cela ne coûte que quelques indirections dans un " +"dictionnaire. Même si le nom du module est sorti du contexte courant, le " +"module est probablement disponible dans :data:`sys.modules`." #: ../Doc/faq/programming.rst:333 msgid "Why are default values shared between objects?" -msgstr "" +msgstr "Pourquoi les arguments par défaut sont-ils partagés entre les objets ?" #: ../Doc/faq/programming.rst:335 msgid "" "This type of bug commonly bites neophyte programmers. Consider this " "function::" msgstr "" +"C'est un problème que rencontrent souvent les programmeurs débutants. " +"Examinons la fonction suivante ::" #: ../Doc/faq/programming.rst:342 msgid "" @@ -443,6 +630,9 @@ msgid "" "The second time, ``mydict`` contains two items because when ``foo()`` begins " "executing, ``mydict`` starts out with an item already in it." msgstr "" +"Au premier appel de cette fonction, ``mydict`` ne contient qu'un seul " +"élément. Au second appel, ``mydict`` contient deux éléments car quand " +"``foo()`` commence son exécution, ``mydict`` contient déjà un élément." #: ../Doc/faq/programming.rst:346 msgid "" @@ -452,6 +642,11 @@ msgid "" "dictionary in this example, subsequent calls to the function will refer to " "this changed object." msgstr "" +"On est souvent amené à croire qu'un appel de fonction créé des nouveaux " +"objets pour les valeurs par défaut. Ce n'est pas le cas. Les valeurs par " +"défaut ne sont créées qu'une et une seule fois, au moment où la fonction est " +"définie. Si l'objet est modifié, comme le dictionnaire dans cet exemple, les " +"appels suivants à cette fonction font référence à l'objet ainsi modifié." #: ../Doc/faq/programming.rst:351 msgid "" @@ -459,6 +654,10 @@ msgid "" "``None``, are safe from change. Changes to mutable objects such as " "dictionaries, lists, and class instances can lead to confusion." msgstr "" +"Par définition, les objets immuables comme les nombres, les chaînes de " +"caractères, les n-uplets et ``None`` ne sont pas modifiés. Les changements " +"sur des objets muables comme les dictionnaires, les listes et les instances " +"de classe peuvent porter à confusion." #: ../Doc/faq/programming.rst:355 msgid "" @@ -467,10 +666,15 @@ msgid "" "inside the function, check if the parameter is ``None`` and create a new " "list/dictionary/whatever if it is. For example, don't write::" msgstr "" +"En raison de cette fonctionnalité, il vaut mieux ne pas utiliser d'objets " +"muables comme valeurs par défaut. Il vaut mieux utiliser ``None`` comme " +"valeur par défaut et, à l'intérieur de la fonction, vérifier si le paramètre " +"est à ``None`` et créer une nouvelle liste, dictionnaire ou autre, le cas " +"échéant. Par exemple, il ne faut pas écrire ::" #: ../Doc/faq/programming.rst:363 msgid "but::" -msgstr "" +msgstr "mais plutôt ::" #: ../Doc/faq/programming.rst:369 msgid "" @@ -480,17 +684,25 @@ msgid "" "value is requested again. This is called \"memoizing\", and can be " "implemented like this::" msgstr "" +"Cette fonctionnalité a une utilité. Il est courant de mettre en cache les " +"paramètres et la valeur de retour de chacun des appels d'une fonction " +"coûteuse à exécuter, et de renvoyer la valeur stockée en cache si le même " +"appel est ré-effectué. C'est la technique dite de « mémoïsation », qui " +"s'implémente de la manière suivante ::" #: ../Doc/faq/programming.rst:384 msgid "" "You could use a global variable containing a dictionary instead of the " "default value; it's a matter of taste." msgstr "" +"Il est possible d'utiliser une variable globale contenant un dictionnaire à " +"la place de la valeur par défaut ; ce n'est qu'une question de goût." #: ../Doc/faq/programming.rst:389 msgid "" "How can I pass optional or keyword parameters from one function to another?" msgstr "" +"Comment passer des paramètres optionnels ou nommés d'une fonction à l'autre ?" #: ../Doc/faq/programming.rst:391 msgid "" @@ -499,10 +711,15 @@ msgid "" "tuple and the keyword arguments as a dictionary. You can then pass these " "arguments when calling another function by using ``*`` and ``**``::" msgstr "" +"Il faut récupérer les arguments en utilisant les sélecteurs ``*`` et ``**`` " +"dans la liste des paramètres de la fonction ; ceci donne les arguments " +"positionnels sous la forme d'un n-uplet et les arguments nommés sous forme " +"de dictionnaire. Ces arguments peuvent être passés à une autre fonction en " +"utilisant ``*`` et ``**`` ::" #: ../Doc/faq/programming.rst:410 msgid "What is the difference between arguments and parameters?" -msgstr "" +msgstr "Quelle est la différence entre les arguments et les paramètres ?" #: ../Doc/faq/programming.rst:412 msgid "" @@ -512,33 +729,42 @@ msgid "" "of arguments a function can accept. For example, given the function " "definition::" msgstr "" +"Les :term:`paramètres ` sont les noms qui apparaissent dans une " +"définition de fonction, alors que les :term:`arguments ` sont les " +"valeurs qui sont réellement passées à une fonction lors de l'appel de celle-" +"ci. Les paramètres définissent les types des arguments qu'une fonction " +"accepte. Ainsi, avec la définition de fonction suivante ::" #: ../Doc/faq/programming.rst:420 msgid "" "*foo*, *bar* and *kwargs* are parameters of ``func``. However, when calling " "``func``, for example::" msgstr "" +"*foo*, *bar* et *kwargs* sont des paramètres de ``func``. Mais à l'appel de " +"``func`` avec, par exemple ::" #: ../Doc/faq/programming.rst:425 msgid "the values ``42``, ``314``, and ``somevar`` are arguments." -msgstr "" +msgstr "les valeurs ``42``, ``314``, et ``somevar`` sont des arguments." #: ../Doc/faq/programming.rst:429 msgid "Why did changing list 'y' also change list 'x'?" -msgstr "" +msgstr "Pourquoi modifier la liste 'y' modifie aussi la liste 'x' ?" #: ../Doc/faq/programming.rst:431 msgid "If you wrote code like::" -msgstr "Si vous avez écrit du code comme : ::" +msgstr "Si vous avez écrit du code comme ::" #: ../Doc/faq/programming.rst:441 msgid "" "you might be wondering why appending an element to ``y`` changed ``x`` too." msgstr "" +"vous vous demandez peut-être pourquoi l'ajout d'un élément à ``y`` a aussi " +"changé ``x``." #: ../Doc/faq/programming.rst:443 msgid "There are two factors that produce this result:" -msgstr "" +msgstr "Il y a deux raisons qui conduisent à ce comportement :" #: ../Doc/faq/programming.rst:445 msgid "" @@ -547,11 +773,17 @@ msgid "" "the same object ``x`` refers to. This means that there is only one object " "(the list), and both ``x`` and ``y`` refer to it." msgstr "" +"Les variables ne sont que des noms qui font référence à des objets. La ligne " +"``y = x`` ne crée pas une copie de la liste — elle crée une nouvelle " +"variable ``y`` qui pointe sur le même objet que ``x``. Ceci signifie qu'il " +"n'existe qu'un seul objet (la liste) auquel ``x`` et ``y`` font référence." #: ../Doc/faq/programming.rst:449 msgid "" "Lists are :term:`mutable`, which means that you can change their content." msgstr "" +"Les listes sont des :term:`muable`, ce qui signifie que leur contenu peut " +"être modifié." #: ../Doc/faq/programming.rst:451 msgid "" @@ -559,10 +791,14 @@ msgid "" "has changed from ``[]`` to ``[10]``. Since both the variables refer to the " "same object, using either name accesses the modified value ``[10]``." msgstr "" +"Après l'appel de :meth:`~list.append`, le contenu de l'objet muable est " +"passé de ``[]`` à ``[10]``. Vu que les deux variables font référence au même " +"objet, il est possible d'accéder à la valeur modifiée ``[10]`` avec chacun " +"des noms." #: ../Doc/faq/programming.rst:455 msgid "If we instead assign an immutable object to ``x``::" -msgstr "" +msgstr "Si au contraire, on affecte un objet immuable à ``x`` ::" #: ../Doc/faq/programming.rst:465 msgid "" @@ -574,6 +810,14 @@ msgid "" "objects (the ints ``6`` and ``5``) and two variables that refer to them " "(``x`` now refers to ``6`` but ``y`` still refers to ``5``)." msgstr "" +"on observe que ``x`` et ``y`` ne sont ici plus égales. Les entiers sont des " +"immuables (:term:`immutable`), et ``x = x + 1`` ne change pas l'entier ``5`` " +"en incrémentant sa valeur. Au contraire, un nouvel objet est créé (l'entier " +"``6``) et affecté à ``x`` (c'est à dire qu'on change l'objet auquel fait " +"référence ``x``). Après cette affectation on a deux objets (les entiers " +"``6`` et ``5``) et deux variables qui font référence à ces deux objets " +"(``x`` fait désormais référence à ``6`` mais ``y`` fait toujours référence à " +"``5``)." #: ../Doc/faq/programming.rst:473 msgid "" @@ -586,6 +830,14 @@ msgid "" "copy of ``y``, you'll instead end up with ``None``, which will likely cause " "your program to generate an easily diagnosed error." msgstr "" +"Certaines opérations (par exemple, ``y.append(10)`` et ``y.sort()``) " +"modifient l'objet, alors que des opérations identiques en apparence (par " +"exemple ``y = y + [10]`` et ``sorted(y)``) créent un nouvel objet. En " +"général, en Python, une méthode qui modifie un objet renvoie ``None`` (c'est " +"même systématique dans la bibliothèque standard) pour éviter la confusion " +"entre les deux opérations. Donc écrire par erreur ``y.sort()`` en pensant " +"obtenir une copie triée de ``y`` donne ``None``, ce qui conduit très souvent " +"le programme à générer une erreur facile à diagnostiquer." #: ../Doc/faq/programming.rst:482 msgid "" @@ -596,10 +848,16 @@ msgid "" "mutates ``a_list``, whereas ``some_tuple += (1, 2, 3)`` and ``some_int += " "1`` create new objects)." msgstr "" +"Il existe cependant une classe d'opérations qui se comporte différemment " +"selon le type : les opérateurs d'affectation incrémentaux. Par exemple, ``" +"+=`` modifie les listes mais pas les n-uplets ni les entiers (``a_list += " +"[1, 2, 3]`` équivaut à ``a_list.extend([1, 2, 3])`` et modifie ``a_list``, " +"alors que ``some_tuple += (1, 2, 3)`` et ``some_int += 1`` créent de " +"nouveaux objets)." #: ../Doc/faq/programming.rst:489 msgid "In other words:" -msgstr "" +msgstr "En d'autres termes :" #: ../Doc/faq/programming.rst:491 msgid "" @@ -607,6 +865,9 @@ msgid "" "etc.), we can use some specific operations to mutate it and all the " "variables that refer to it will see the change." msgstr "" +"Il est possible d'appliquer des opérations qui modifient un objet muable (:" +"class:`list`, :class:`dict`, :class:`set`, etc.) et toutes les variables qui " +"y font référence verront le changement." #: ../Doc/faq/programming.rst:494 msgid "" @@ -615,16 +876,24 @@ msgid "" "but operations that transform that value into a new value always return a " "new object." msgstr "" +"Toutes les variables qui font référence à un objet immuable (:class:`str`, :" +"class:`int`, :class:`tuple`, etc.) renvoient la même valeur, mais les " +"opérations qui transforment cette valeur en une nouvelle valeur renvoient " +"toujours un nouvel objet." #: ../Doc/faq/programming.rst:499 msgid "" "If you want to know if two variables refer to the same object or not, you " "can use the :keyword:`is` operator, or the built-in function :func:`id`." msgstr "" +"L'opérateur :keyword:`is` ou la fonction native :func:`id` permettent de " +"savoir si deux variables font référence au même objet." #: ../Doc/faq/programming.rst:504 msgid "How do I write a function with output parameters (call by reference)?" msgstr "" +"Comment écrire une fonction qui modifie ses paramètres ? (passage par " +"référence)" #: ../Doc/faq/programming.rst:506 msgid "" @@ -633,44 +902,48 @@ msgid "" "argument name in the caller and callee, and so no call-by-reference per se. " "You can achieve the desired effect in a number of ways." msgstr "" +"En Python, les arguments sont passés comme des affectations de variables. Vu " +"qu'une affectation crée des références à des objets, il n'y a pas de lien " +"entre un argument dans l'appel de la fonction et sa définition, et donc pas " +"de passage par référence en soi. Il y a cependant plusieurs façons d'en " +"émuler un." #: ../Doc/faq/programming.rst:511 msgid "By returning a tuple of the results::" -msgstr "" +msgstr "En renvoyant un n-uplet de résultats ::" #: ../Doc/faq/programming.rst:522 msgid "This is almost always the clearest solution." -msgstr "" +msgstr "C'est presque toujours la meilleure solution." #: ../Doc/faq/programming.rst:524 msgid "" "By using global variables. This isn't thread-safe, and is not recommended." msgstr "" -"En utilisant des variables globales. Ce qui n'est pas thread-safe, et n'est " -"donc pas recommandé." +"En utilisant des variables globales. Cette approche ne fonctionne pas dans " +"des contextes à plusieurs fils d'exécution (elle n'est pas *thread-safe*), " +"et n'est donc pas recommandée." #: ../Doc/faq/programming.rst:526 msgid "By passing a mutable (changeable in-place) object::" -msgstr "En passant un objet muable (modifiable sur place) ::" +msgstr "En passant un objet muable (modifiable sur place) ::" #: ../Doc/faq/programming.rst:536 msgid "By passing in a dictionary that gets mutated::" -msgstr "En passant un dictionnaire, qui sera modifié : ::" +msgstr "En passant un dictionnaire, qui sera modifié ::" #: ../Doc/faq/programming.rst:546 msgid "Or bundle up values in a class instance::" -msgstr "Ou regrouper les valeurs dans une instance de classe::" +msgstr "Ou regrouper les valeurs dans une instance de classe ::" #: ../Doc/faq/programming.rst:562 msgid "There's almost never a good reason to get this complicated." -msgstr "" -"Il n'y a pratiquement jamais de bonne raison de faire quelque chose d'aussi " -"compliqué." +msgstr "Faire quelque chose d'aussi compliqué est rarement une bonne idée." #: ../Doc/faq/programming.rst:564 msgid "Your best choice is to return a tuple containing the multiple results." msgstr "" -"Votre meilleure option est de renvoyer un *tuple* contenant les multiples " +"La meilleure option reste de renvoyer un n-uplet contenant les différents " "résultats." #: ../Doc/faq/programming.rst:568 @@ -684,18 +957,18 @@ msgid "" "returns a function ``f(x)`` that computes the value ``a*x+b``. Using nested " "scopes::" msgstr "" -"Vous avez deux choix : vous pouvez utiliser les portées imbriquées ou vous " -"pouvez utiliser des objets appelables. Par exemple, supposons que vous " -"vouliez définir ``linear(a, b)`` qui renvoie une fonction ``f(x)`` qui " -"calcule la valeur ``a*x+b``. En utilisant les portées imbriquées : ::" +"Deux possibilités : on peut utiliser des portées imbriquées ou bien des " +"objets appelables. Par exemple, supposons que l'on souhaite définir " +"``linear(a, b)`` qui renvoie une fonction ``f(x)`` qui calcule la valeur " +"``a*x+b``. En utilisant les portées imbriquées ::" #: ../Doc/faq/programming.rst:579 msgid "Or using a callable object::" -msgstr "Ou en utilisant un objet appelable : ::" +msgstr "Ou en utilisant un objet appelable ::" #: ../Doc/faq/programming.rst:589 msgid "In both cases, ::" -msgstr "dans les deux cas, ::" +msgstr "Dans les deux cas ::" #: ../Doc/faq/programming.rst:593 msgid "gives a callable object where ``taxes(10e6) == 0.3 * 10e6 + 2``." @@ -709,12 +982,12 @@ msgid "" msgstr "" "L'approche par objet appelable a le désavantage d'être légèrement plus lente " "et de produire un code légèrement plus long. Cependant, il faut noter qu'une " -"collection d'objet appelables peuvent partager leur signatures par " -"héritage : ::" +"collection d'objet appelables peuvent partager leurs signatures par " +"héritage ::" #: ../Doc/faq/programming.rst:604 msgid "Object can encapsulate state for several methods::" -msgstr "Les objets peuvent encapsuler un état pour plusieurs méthodes::" +msgstr "Les objets peuvent encapsuler un état pour plusieurs méthodes ::" #: ../Doc/faq/programming.rst:622 msgid "" @@ -726,32 +999,31 @@ msgstr "" #: ../Doc/faq/programming.rst:627 msgid "How do I copy an object in Python?" -msgstr "Comment copier un objet en Python?" +msgstr "Comment copier un objet en Python ?" #: ../Doc/faq/programming.rst:629 msgid "" "In general, try :func:`copy.copy` or :func:`copy.deepcopy` for the general " "case. Not all objects can be copied, but most can." msgstr "" -"En général, essayez :func:`copy.copy` ou :func:`copy.deepcopy` pour le cas " -"général. Tout les objets ne peuvent pas être copiés, mais la plupart le " -"peuvent." +"En général, essayez :func:`copy.copy` ou :func:`copy.deepcopy`. Tous les " +"objets ne peuvent pas être copiés, mais la plupart le peuvent." #: ../Doc/faq/programming.rst:632 msgid "" "Some objects can be copied more easily. Dictionaries have a :meth:`~dict." "copy` method::" msgstr "" -"Certains objects peuvent être copiés plus facilement. Les Dictionnaires ont " -"une méthode :meth:`~dict.copy` ::" +"Certains objets peuvent être copiés plus facilement que d'autres. Les " +"dictionnaires ont une méthode :meth:`~dict.copy` ::" #: ../Doc/faq/programming.rst:637 msgid "Sequences can be copied by slicing::" -msgstr "Les séquences peuvent être copiées via la syntaxe des tranches::" +msgstr "Les séquences peuvent être copiées via la syntaxe des tranches ::" #: ../Doc/faq/programming.rst:643 msgid "How can I find the methods or attributes of an object?" -msgstr "Comment puis-je trouver les méthodes ou les attribues d'un objet?" +msgstr "Comment récupérer les méthodes ou les attributs d'un objet ?" #: ../Doc/faq/programming.rst:645 msgid "" @@ -765,7 +1037,7 @@ msgstr "" #: ../Doc/faq/programming.rst:651 msgid "How can my code discover the name of an object?" -msgstr "Comment mon code peut il découvrir le nom d'un objet?" +msgstr "Comment un code peut-il obtenir le nom d'un objet ?" #: ../Doc/faq/programming.rst:653 msgid "" @@ -787,10 +1059,10 @@ msgid "" "instance of class A. However, it is impossible to say whether the " "instance's name is a or b, since both names are bound to the same value." msgstr "" -"Le fait que la classe ait un nom est discutable, bien qu'elles soit liée à " -"deux noms, et qu'elle soit appelée via le nom B, l'instance crée déclare " -"tout de même être une instance de la classe A. De même Il est impossible de " -"dire si le nom de l'instance est a ou b, les deux noms sont attachés à la " +"Affirmer que la classe a un nom est discutable. Bien qu'elle soit liée à " +"deux noms, et qu'elle soit appelée via le nom B, l'instance créée déclare " +"tout de même être une instance de la classe A. De même, il est impossible de " +"dire si le nom de l'instance est a ou b, les deux noms étant attachés à la " "même valeur." #: ../Doc/faq/programming.rst:674 @@ -800,18 +1072,18 @@ msgid "" "introspective programs, this is usually an indication that a change of " "approach might be beneficial." msgstr "" -"De façon général, il ne devrait pas être nécessaire pour votre application " -"de \"connaître le nom\" d'une valeur particulière. À moins que vous soyez " -"délibérément en train d'écrire un programme introspectif, c'est souvent une " -"indication qu'un changement d'approche pourrait être bénéfique." +"De façon générale, une application ne devrait pas avoir besoin de « " +"connaître le nom » d'une valeur particulière. À moins d'être délibérément en " +"train d'écrire un programme introspectif, c'est souvent l'indication qu'un " +"changement d'approche serait bénéfique." #: ../Doc/faq/programming.rst:679 msgid "" "In comp.lang.python, Fredrik Lundh once gave an excellent analogy in answer " "to this question:" msgstr "" -"Sur comp.lang.python, Fredrik Lundh a donné un jour une excellente analogie " -"pour répondre à cette question:" +"Sur *comp.lang.python*, Fredrik Lundh a donné un jour une excellente " +"analogie pour répondre à cette question :" #: ../Doc/faq/programming.rst:682 msgid "" @@ -820,18 +1092,18 @@ msgid "" "so the only way to find out what it's called is to ask all your neighbours " "(namespaces) if it's their cat (object)..." msgstr "" -"C'est pareil que trouver le nom du chat qui traîne devant votre porte: Le " -"chat (objet) ne peux pas vous dire lui même son nom, et il s'en moque un peu " -"-- alors le meilleur moyen de savoir comment il s'appelle est de demander à " -"tous vos voisins (namespaces) si c'est leur chat (objet)…" +"C'est pareil que trouver le nom du chat qui traîne devant votre porte : le " +"chat (objet) ne peut pas vous dire lui-même son nom, et il s'en moque un peu " +"­– alors le meilleur moyen de savoir comment il s'appelle est de demander à " +"tous vos voisins (espaces de nommage) si c'est leur chat (objet)…" #: ../Doc/faq/programming.rst:687 msgid "" "....and don't be surprised if you'll find that it's known by many names, or " "no name at all!" msgstr "" -"…et ne soyez pas surpris si vous découvrez qu'il est connus sous plusieurs " -"noms différents, ou pas de nom du tout!" +"…et ne soyez pas surpris si vous découvrez qu'il est connu sous plusieurs " +"noms, ou s'il n'a pas de nom du tout !" #: ../Doc/faq/programming.rst:692 msgid "What's up with the comma operator's precedence?" @@ -840,7 +1112,7 @@ msgstr "Qu'en est-il de la précédence de l'opérateur virgule ?" #: ../Doc/faq/programming.rst:694 msgid "Comma is not an operator in Python. Consider this session::" msgstr "" -"La virgule n'est pas un opérateur en Python. Observez la session suivante::" +"La virgule n'est pas un opérateur en Python. Observez le code suivant ::" #: ../Doc/faq/programming.rst:699 msgid "" @@ -848,12 +1120,12 @@ msgid "" "above is evaluated as if you had entered::" msgstr "" "Comme la virgule n'est pas un opérateur, mais un séparateur entre deux " -"expression, l'expression ci dessus, est évaluée de la même façon que si vous " -"aviez écrit::" +"expressions, l'expression ci-dessus est évaluée de la même façon que si vous " +"aviez écrit ::" #: ../Doc/faq/programming.rst:704 msgid "not::" -msgstr "et non::" +msgstr "et non ::" #: ../Doc/faq/programming.rst:708 msgid "" @@ -861,9 +1133,9 @@ msgid "" "They are not truly operators but syntactic delimiters in assignment " "statements." msgstr "" -"Ceci est vrai pour tous les opérateurs d'assignations (``=``, ``+=`` etc). " -"Ce ne sont pas vraiment des opérateurs mais des délimiteurs syntaxiques dans " -"les instructions d'assignation." +"Ceci est vrai pour tous les opérateurs d'affectation (``=``, ``+=`` etc). Ce " +"ne sont pas vraiment des opérateurs mais plutôt des délimiteurs syntaxiques " +"dans les instructions d'affectation." #: ../Doc/faq/programming.rst:713 msgid "Is there an equivalent of C's \"?:\" ternary operator?" @@ -871,13 +1143,15 @@ msgstr "Existe-t-il un équivalent à l'opérateur ternaire \"?:\" du C ?" #: ../Doc/faq/programming.rst:715 msgid "Yes, there is. The syntax is as follows::" -msgstr "Oui, il y en a un. Sa syntaxe est la suivante : ::" +msgstr "Oui. Sa syntaxe est la suivante ::" #: ../Doc/faq/programming.rst:722 msgid "" "Before this syntax was introduced in Python 2.5, a common idiom was to use " "logical operators::" msgstr "" +"Avant l'introduction de cette syntaxe dans Python 2.5, il était courant " +"d'utiliser les opérateurs de logique ::" #: ../Doc/faq/programming.rst:727 msgid "" @@ -885,6 +1159,9 @@ msgid "" "has a false boolean value. Therefore, it is always better to use the ``... " "if ... else ...`` form." msgstr "" +"Cet idiome est dangereux, car il donne un résultat erroné quand *on_true* a " +"la valeur booléenne fausse. Il faut donc toujours utiliser la forme ``... " +"if ... else ...``." #: ../Doc/faq/programming.rst:733 msgid "Is it possible to write obfuscated one-liners in Python?" @@ -898,12 +1175,11 @@ msgid "" "`lambda`. See the following three examples, due to Ulf Bartelt::" msgstr "" "Oui. Cela est généralement réalisé en imbriquant les :keyword:`lambda` dans " -"des :keyword:`lambda`. Observez les trois exemples suivants, contribués par " -"Ulf Bartelt::" +"des :keyword:`lambda`. Observez les trois exemples suivants de Ulf Bartelt ::" #: ../Doc/faq/programming.rst:762 msgid "Don't try this at home, kids!" -msgstr "Les enfants, ne faîtes pas ça chez vous !" +msgstr "Les enfants, ne faites pas ça chez vous !" #: ../Doc/faq/programming.rst:766 msgid "Numbers and strings" @@ -911,7 +1187,7 @@ msgstr "Nombres et chaînes de caractères" #: ../Doc/faq/programming.rst:769 msgid "How do I specify hexadecimal and octal integers?" -msgstr "Comment puis-je écrire des entiers hexadécimaux ou octaux ?" +msgstr "Comment écrire des entiers hexadécimaux ou octaux ?" #: ../Doc/faq/programming.rst:771 msgid "" @@ -920,8 +1196,8 @@ msgid "" "octal value \"10\" (8 in decimal), type::" msgstr "" "Pour écrire un entier octal, faites précéder la valeur octale par un zéro, " -"puis un \"o\" majuscule ou minuscule. Par exemple assigner la valeur octale " -"\"10\" (8 en décimal) à la variable \"a\", tapez::" +"puis un \"o\" majuscule ou minuscule. Par exemple pour affecter la valeur " +"octale \"10\" (8 en décimal) à la variable \"a\", tapez ::" #: ../Doc/faq/programming.rst:779 msgid "" @@ -929,22 +1205,22 @@ msgid "" "zero, and then a lower or uppercase \"x\". Hexadecimal digits can be " "specified in lower or uppercase. For example, in the Python interpreter::" msgstr "" -"L'hexadécimal est tout aussi simple, faîtes précéder le nombre hexadécimal " +"L'hexadécimal est tout aussi simple, faites précéder le nombre hexadécimal " "par un zéro, puis un \"x\" majuscule ou minuscule. Les nombres hexadécimaux " -"peuvent être écrit en majuscules ou en minuscules. Par exemple, dans " -"l'interpréteur Python::" +"peuvent être écrits en majuscules ou en minuscules. Par exemple, dans " +"l'interpréteur Python ::" #: ../Doc/faq/programming.rst:792 msgid "Why does -22 // 10 return -3?" -msgstr "Pourquoi -22 // 10 donne-t-il -3 ?" +msgstr "Pourquoi ``-22 // 10`` donne-t-il ``-3`` ?" #: ../Doc/faq/programming.rst:794 msgid "" "It's primarily driven by the desire that ``i % j`` have the same sign as " "``j``. If you want that, and also want::" msgstr "" -"Cela est principalement due à la volonté que ``i % j`` ait le même signe que " -"j. Si vous voulez cela, vous voulez aussi : ::" +"Cela est principalement dû à la volonté que ``i % j`` ait le même signe que " +"j. Si vous voulez en plus que ::" #: ../Doc/faq/programming.rst:799 msgid "" @@ -952,8 +1228,8 @@ msgid "" "identity to hold, and then compilers that truncate ``i // j`` need to make " "``i % j`` have the same sign as ``i``." msgstr "" -"Alors la division entière doit renvoyer l'entier inférieur. Le C demande " -"aussi à ce que cette égalité soit vérifiée, et donc les compilateur qui " +"alors la division entière doit renvoyer l'entier inférieur. Le C impose " +"également que cette égalité soit vérifiée, et donc les compilateurs qui " "tronquent ``i // j`` ont besoin que ``i % j`` ait le même signe que ``i``." #: ../Doc/faq/programming.rst:803 @@ -964,15 +1240,15 @@ msgid "" "say 200 hours ago? ``-190 % 12 == 2`` is useful; ``-190 % 12 == -10`` is a " "bug waiting to bite." msgstr "" -"Il y a peu de cas d'utilisation réels pour ``i%j`` quand ``j`` est négatif. " -"Quand ``j`` est positif, il y en a beaucoup, et dans pratiquement tous, il " -"est plus utile que ``i % j`` soit ``>=0``. Si l'horloge dit 10h maintenant, " -"que disait-elle il y a 200 heures? ``-190%12 == 2`` est utile; ``-192 % 12 " -"== -10`` est un bug qui attends pour mordre." +"Il y a peu de cas d'utilisation réels pour ``i % j`` quand ``j`` est " +"négatif. Quand ``j`` est positif, il y en a beaucoup, et dans pratiquement " +"tous, il est plus utile que ``i % j`` soit ``>=0``. Si l'horloge affiche " +"10 h maintenant, qu'affichait-elle il y a 200 heures ? ``-190 % 12 == 2`` " +"est utile ; ``-190 % 12 == -10`` est un bogue en puissance." #: ../Doc/faq/programming.rst:811 msgid "How do I convert a string to a number?" -msgstr "Comment puis-je convertir une chaine de caractère en nombre?" +msgstr "Comment convertir une chaîne de caractères en nombre ?" #: ../Doc/faq/programming.rst:813 msgid "" @@ -980,9 +1256,9 @@ msgid "" "``int('144') == 144``. Similarly, :func:`float` converts to floating-point, " "e.g. ``float('144') == 144.0``." msgstr "" -"Pour les entiers, utilisez la fonction built-in :func:`int` de type " -"constructeur, par exemple ``int('144') == 144``. De façon similaire, :func:" -"`float` convertit en valeur flottante, par exemple ``float('144') == 144.0``." +"Pour les entiers, utilisez le constructeur natif de :func:`int`, par exemple " +"``int('144') == 144``. De façon similaire, :func:`float` donne la valeur " +"flottante, par exemple ``float('144') == 144.0``." #: ../Doc/faq/programming.rst:817 msgid "" @@ -993,12 +1269,12 @@ msgid "" "interpreted using Python's rules: a leading '0o' indicates octal, and '0x' " "indicates a hex number." msgstr "" -"Par défaut, ces fonctions interprètent les nombre en tant que décimaux, de " -"telles façons que ``int('0144') == 144`` et ``int('0x144')`` lève une :exc:" -"`ValueError`. ``int(string, base)`` prends la base depuis laquelle il faut " -"convertir dans le second argument, optionnel, donc ``int('0x144', 16) == " -"324``. Si la base donnée est 0, le nombre est interprété selon les règles " -"Python: un préfixe '0o' indique de l'octal, et '0x' indique de l'hexadécimal." +"Par défaut, ces fonctions interprètent les nombres comme des décimaux, de " +"telle façon que ``int('0144') == 144`` et ``int('0x144')`` lève une :exc:" +"`ValueError`. Le second argument (optionnel) de ``int(string, base)`` est la " +"base dans laquelle convertir, donc ``int('0x144', 16) == 324``. Si la base " +"donnée est 0, le nombre est interprété selon les règles Python : un préfixe " +"``0o`` indique de l'octal et ``0x`` indique de l'hexadécimal." #: ../Doc/faq/programming.rst:823 msgid "" @@ -1009,13 +1285,12 @@ msgid "" "``__import__('os').system(\"rm -rf $HOME\")`` which would erase your home " "directory." msgstr "" -"N'utilisez pas la fonction built-in :func:`eval` si tout ce que vous avez " -"besoin est de convertir des chaines en nombres. :func:`eval` sera " -"significativement plus lent et implique des risque de sécurité: quelqu'un " -"pourrait vous envoyez une expression Python pouvant avoir des effets de bord " -"indésirables. Par exemple, quelqu'un pourrait passer ``__import__('os')." -"system(\"rm -rf $HOME\")`` ce qui aurait pour effet d'effacer votre " -"répertoire personnel." +"N'utilisez pas la fonction native :func:`eval` pour convertir des chaînes de " +"caractères en nombres. :func:`eval` est beaucoup plus lente et pose des " +"problèmes de sécurité : quelqu'un pourrait vous envoyer une expression " +"Python pouvant avoir des effets de bord indésirables. Par exemple, quelqu'un " +"pourrait passer ``__import__('os').system(\"rm -rf $HOME\")`` ce qui " +"effacerait votre répertoire personnel." #: ../Doc/faq/programming.rst:830 msgid "" @@ -1023,14 +1298,14 @@ msgid "" "expressions, so that e.g. ``eval('09')`` gives a syntax error because Python " "does not allow leading '0' in a decimal number (except '0')." msgstr "" -":func:`eval` a aussi pour effet d'interpréter les nombres comme comme des " -"expression Python, ainsi ``eval('09')`` produit une erreur de syntaxe par ce " -"que Python ne permet pas les '0' en tête d'un nombre décimal (à l'exception " -"du nombre '0')." +":func:`eval` a aussi pour effet d'interpréter les nombres comme des " +"expressions Python. Ainsi ``eval('09')`` produit une erreur de syntaxe, " +"parce que Python ne permet pas les '0' en tête d'un nombre décimal (à " +"l'exception du nombre '0')." #: ../Doc/faq/programming.rst:836 msgid "How do I convert a number to a string?" -msgstr "Comment convertir un nombre en chaine de caractère?" +msgstr "Comment convertir un nombre en chaîne de caractères ?" #: ../Doc/faq/programming.rst:838 msgid "" @@ -1041,10 +1316,17 @@ msgid "" "``\"{:04d}\".format(144)`` yields ``'0144'`` and ``\"{:.3f}\"." "format(1.0/3.0)`` yields ``'0.333'``." msgstr "" +"Pour transformer, par exemple, le nombre 144 en la chaîne de caractères " +"'144', il faut utiliser la fonction native :func:`str`. Pour obtenir la " +"représentation hexadécimale ou octale, il faut utiliser les fonctions " +"natives :func:`hex` ou :func:`oct`. Pour des représentations non-" +"conventionnelles, se référer aux sections :ref:`f-strings` et :ref:" +"`formatstrings`, e.g. ``\"{:04d}\".format(144)`` produit ``'0144'`` et ``" +"\"{:.3f}\".format(1.0/3.0)`` produit ``'0.333'``." #: ../Doc/faq/programming.rst:847 msgid "How do I modify a string in place?" -msgstr "Comment modifier une chaine de caractère \"en place\"?" +msgstr "Comment modifier une chaîne de caractères « sur place » ?" #: ../Doc/faq/programming.rst:849 msgid "" @@ -1054,16 +1336,21 @@ msgid "" "unicode data, try using an :class:`io.StringIO` object or the :mod:`array` " "module::" msgstr "" +"C'est impossible car les chaînes de caractères sont immuables. Dans la " +"plupart des cas, il faut tout simplement construire une nouvelle chaîne à " +"partir des morceaux de l'ancienne. Si toutefois vous avez besoin d'un objet " +"capable de modifier de la donnée Unicode « sur place », essayez d'utiliser " +"un objet :class:`io.StringIO` ou le module :mod:`array` ::" #: ../Doc/faq/programming.rst:879 msgid "How do I use strings to call functions/methods?" msgstr "" -"Comment utiliser des chaines de caractères pour appeler des fonctions/" -"méthodes?" +"Comment utiliser des chaînes de caractères pour appeler des fonctions/" +"méthodes ?" #: ../Doc/faq/programming.rst:881 msgid "There are various techniques." -msgstr "Il y a différentes techniques." +msgstr "Il y a plusieurs façons de faire." #: ../Doc/faq/programming.rst:883 msgid "" @@ -1073,33 +1360,34 @@ msgid "" "a case construct::" msgstr "" "La meilleure est d'utiliser un dictionnaire qui fait correspondre les " -"chaines de caractères à des fonctions. Le principal avantage de cette " -"technique est que les chaines n'ont pas besoin d'être égales aux noms de " -"fonctions. C'est aussi la principale façon d'imiter la construction \"case" -"\"::" +"chaînes de caractères à des fonctions. Le principal avantage de cette " +"technique est que les chaînes n'ont pas besoin d'être égales aux noms de " +"fonctions. C'est aussi la façon principale d'imiter la construction \"case" +"\" ::" #: ../Doc/faq/programming.rst:898 msgid "Use the built-in function :func:`getattr`::" -msgstr "Utiliser la fonction :func:`getattr`::" +msgstr "Utiliser la fonction :func:`getattr` ::" #: ../Doc/faq/programming.rst:903 msgid "" "Note that :func:`getattr` works on any object, including classes, class " "instances, modules, and so on." msgstr "" -"Notez que :func:`getattr` marche sur n'importe quel objet, ceci inclue les " +"Notez que :func:`getattr` marche sur n'importe quel objet, ceci inclut les " "classes, les instances de classes, les modules et ainsi de suite." #: ../Doc/faq/programming.rst:906 msgid "This is used in several places in the standard library, like this::" msgstr "" -"Ceci est utilisé dans plusieurs endroit de la bibliothèque standard, de " -"cette façon::" +"Ceci est utilisé à plusieurs reprises dans la bibliothèque standard, de " +"cette façon ::" #: ../Doc/faq/programming.rst:919 msgid "Use :func:`locals` or :func:`eval` to resolve the function name::" msgstr "" -"Utilisez :func:`locals` ou :func:`eval` pour résoudre le nom de fonction::" +"Utilisez :func:`locals` ou :func:`eval` pour résoudre le nom de la " +"fonction ::" #: ../Doc/faq/programming.rst:932 msgid "" @@ -1107,18 +1395,18 @@ msgid "" "control over the contents of the string, someone could pass a string that " "resulted in an arbitrary function being executed." msgstr "" -"Note: En utilisant :func:`eval` est lent est dangereux. Si vous n'avez pas " -"un contrôle absolu sur le contenu de la chaine de caractère, quelqu'un peut " -"passer une chaine de caractère pouvant résulter en l'exécution de code " -"arbitraire." +"Note : utiliser :func:`eval` est lent est dangereux. Si vous n'avez pas un " +"contrôle absolu sur le contenu de la chaîne de caractères, quelqu'un " +"pourrait passer une chaîne de caractères pouvant appeler n'importe quelle " +"fonction." #: ../Doc/faq/programming.rst:937 msgid "" "Is there an equivalent to Perl's chomp() for removing trailing newlines from " "strings?" msgstr "" -"Existe-t'il un équivalent à la fonction chomp() de Perl, pour retirer les " -"caractères de fin de ligne d'une chaine de caractère?" +"Existe-t-il un équivalent à la fonction ``chomp()`` de Perl, pour retirer " +"les caractères de fin de ligne d'une chaîne de caractères ?" #: ../Doc/faq/programming.rst:939 msgid "" @@ -1128,23 +1416,23 @@ msgid "" "empty lines at the end, the line terminators for all the blank lines will be " "removed::" msgstr "" -"Vous pouvez utiliser ``S.rstrip(\"\\r\\n\")`` pour retirer toute occurrence " -"de tout marqueur de fin de ligne, à la fin d'une chaîne de caractère ``S``, " -"sans en retirer aucun espace. Si la chaîne ``S`` représente plus d'une " -"ligne, avec plusieurs lignes vides, les marqueurs de fin de de lignes de " -"chaque lignes vides seront retirés : ::" +"Vous pouvez utiliser ``S.rstrip(\"\\r\\n\")`` pour retirer toutes les " +"occurrences de tout marqueur de fin de ligne à la fin d'une chaîne de " +"caractère ``S``, sans en enlever aucune espace. Si la chaîne ``S`` " +"représente plus d'une ligne, avec plusieurs lignes vides, les marqueurs de " +"fin de ligne de chaque ligne vide seront retirés ::" #: ../Doc/faq/programming.rst:951 msgid "" "Since this is typically only desired when reading text one line at a time, " "using ``S.rstrip()`` this way works well." msgstr "" -"Du fait que ce soit principalement utile en lisant un texte ligne à ligne, " -"utiliser ``S.rstrip()`` devrait marcher correctement." +"Vu que cela ne sert presque qu'à lire un texte ligne à ligne, utiliser ``S." +"rstrip()`` de cette manière fonctionne correctement." #: ../Doc/faq/programming.rst:956 msgid "Is there a scanf() or sscanf() equivalent?" -msgstr "Existe-t'il un équivalent à scanf() ou sscanf()?" +msgstr "Existe-t-il un équivalent à ``scanf()`` ou ``sscanf()`` ?" #: ../Doc/faq/programming.rst:958 msgid "Not as such." @@ -1159,69 +1447,81 @@ msgid "" "parameter which is useful if the line uses something other than whitespace " "as a separator." msgstr "" -"Pour une simple analyse de chaine, l'approche la plus simple est " +"Pour une simple analyse de chaîne, l'approche la plus simple est " "généralement de découper la ligne en mots délimités par des espaces, en " -"utilisant la méthode :meth:`~str.split` des objets chaine de caractères, et " -"ensuite de convertir les chaines de décimales en valeurs numériques en " -"utilisant la fonction :func:`int` ou :func:`float`, ``split()`` supporte un " +"utilisant la méthode :meth:`~str.split` des objets chaîne de caractères, et " +"ensuite de convertir les chaînes de décimaux en valeurs numériques en " +"utilisant la fonction :func:`int` ou :func:`float`. ``split()`` possède un " "paramètre optionnel \"sep\" qui est utile si la ligne utilise autre chose " -"que des espaces comme séparateur." +"que des espaces comme séparateurs." #: ../Doc/faq/programming.rst:966 msgid "" "For more complicated input parsing, regular expressions are more powerful " "than C's :c:func:`sscanf` and better suited for the task." msgstr "" -"Pour les analyses plus compliquées, les expressions rationnelles sont plus " +"Pour des analyses plus compliquées, les expressions rationnelles sont plus " "puissantes que la fonction :c:func:`sscanf` de C et mieux adaptées à la " "tâche." #: ../Doc/faq/programming.rst:971 msgid "What does 'UnicodeDecodeError' or 'UnicodeEncodeError' error mean?" msgstr "" -"Que signifient les erreurs 'UnicodeDecodeError' ou 'UnicodeEncodeError' ?" +"Que signifient les erreurs ``UnicodeDecodeError`` ou ``UnicodeEncodeError`` ?" #: ../Doc/faq/programming.rst:973 msgid "See the :ref:`unicode-howto`." -msgstr "Regardez :ref:`unicode-howto`." +msgstr "Voir :ref:`unicode-howto`." #: ../Doc/faq/programming.rst:977 msgid "Performance" -msgstr "" +msgstr "Performances" #: ../Doc/faq/programming.rst:980 msgid "My program is too slow. How do I speed it up?" -msgstr "" +msgstr "Mon programme est trop lent. Comment l'accélérer ?" #: ../Doc/faq/programming.rst:982 msgid "" "That's a tough one, in general. First, here are a list of things to " "remember before diving further:" msgstr "" +"Question difficile en général. Il faut garder en tête les points suivants " +"avant d'aller plus loin :" #: ../Doc/faq/programming.rst:985 msgid "" "Performance characteristics vary across Python implementations. This FAQ " "focusses on :term:`CPython`." msgstr "" +"Les performances varient en fonction des implémentations de Python. Cette " +"FAQ ne traite que de :term:`CPython`." #: ../Doc/faq/programming.rst:987 msgid "" "Behaviour can vary across operating systems, especially when talking about I/" "O or multi-threading." msgstr "" +"Les comportements peuvent différer d'un système d'exploitation à l'autre, " +"tout particulièrement quand il s'agit d'entrée/sortie ou de fils d'exécution " +"multiples." #: ../Doc/faq/programming.rst:989 msgid "" "You should always find the hot spots in your program *before* attempting to " "optimize any code (see the :mod:`profile` module)." msgstr "" +"Il faut toujours essayer de trouver où sont les points de contention d'un " +"programme *avant* d'essayer d'optimiser du code (voir le module :mod:" +"`profile`)." #: ../Doc/faq/programming.rst:991 msgid "" "Writing benchmark scripts will allow you to iterate quickly when searching " "for improvements (see the :mod:`timeit` module)." msgstr "" +"Écrire des scripts d'évaluation de performances permet de progresser " +"rapidement dans la recherche d'améliorations (voir le module :mod:`timeit`)." #: ../Doc/faq/programming.rst:993 msgid "" @@ -1229,6 +1529,9 @@ msgid "" "any other technique) before potentially introducing regressions hidden in " "sophisticated optimizations." msgstr "" +"Il est très fortement recommandé d'avoir une bonne couverture de code (avec " +"des tests unitaires ou autre) avant d'ajouter des erreurs dans des " +"optimisations sophistiquées." #: ../Doc/faq/programming.rst:997 msgid "" @@ -1236,6 +1539,9 @@ msgid "" "some general principles which go a long way towards reaching acceptable " "performance levels:" msgstr "" +"Ceci étant dit, il y a beaucoup d'astuces pour accélérer du code Python. " +"Voici quelques principes généraux qui peuvent aider à atteindre des niveaux " +"de performance satisfaisants :" #: ../Doc/faq/programming.rst:1001 msgid "" @@ -1243,12 +1549,17 @@ msgid "" "larger benefits than trying to sprinkle micro-optimization tricks all over " "your code." msgstr "" +"Améliorer les algorithmes (ou en changer pour des plus performants) peut " +"produire de bien meilleurs résultats que d'optimiser ça et là de petites " +"portions du code." #: ../Doc/faq/programming.rst:1005 msgid "" "Use the right data structures. Study documentation for the :ref:`bltin-" "types` and the :mod:`collections` module." msgstr "" +"Utiliser les structures de données adaptées. Se référer à la documentation " +"des :ref:`bltin-types` et du module :mod:`collections`." #: ../Doc/faq/programming.rst:1008 msgid "" @@ -1260,6 +1571,14 @@ msgid "" "do sorting (and see the :ref:`sortinghowto` for examples of moderately " "advanced usage)." msgstr "" +"Quand la bibliothèque standard fournit une implémentation pour quelque " +"chose, il y a de fortes chances (même si ce n'est pas systématique) que " +"cette implémentation soit plus rapide que la votre. C'est d'autant plus vrai " +"pour les routines écrites en C, comme les routines natives et certaines " +"extensions de types. Par exemple, il faut utiliser la méthode native :meth:" +"`list.sort` ou la fonction :func:`sorted` similaire pour classer (et se " +"référer à la section :ref:`sortinghowto` pour des exemples d'utilisation " +"courante)." #: ../Doc/faq/programming.rst:1016 msgid "" @@ -1269,6 +1588,11 @@ msgid "" "especially under the form of tiny functions or methods (which are also often " "detrimental to readability)." msgstr "" +"Les abstractions ont tendance à créer des indirections et obligent " +"l'interpréteur à faire plus d'efforts. Si le niveau d'indirection dépasse la " +"quantité de travail effectif, le programme sera ralenti. Il faut toujours " +"éviter trop d'indirections, en particulier sous la forme de fonctions ou " +"méthodes trop petites (qui nuisent aussi souvent à la clarté du code)." #: ../Doc/faq/programming.rst:1022 msgid "" @@ -1281,16 +1605,29 @@ msgid "" "skills, you can also :ref:`write a C extension module ` " "yourself." msgstr "" +"Si vous atteignez les limites de ce que du Python « pur » permet de faire, " +"il y a des outils qui permettent d'aller plus loin. Par exemple, `Cython " +"`_ peut compiler une version légèrement modifiée de code " +"Python en une extension C et est disponible sur de nombreuses plate-formes. " +"Cython peut bénéficier de la compilation (et de l'annotation, optionnelle, " +"des types) pour rendre votre code beaucoup plus rapide que s'il était " +"interprété. Si vous avez confiance en vos capacités de programmation en C, " +"vous pouvez aussi :ref:`écrire un module d'extension en C` " +"vous-même." #: ../Doc/faq/programming.rst:1032 msgid "" "The wiki page devoted to `performance tips `_." msgstr "" +"La page wiki dédiée aux `astuces de performance `_." #: ../Doc/faq/programming.rst:1038 msgid "What is the most efficient way to concatenate many strings together?" msgstr "" +"Quelle est la manière la plus efficace de concaténer un grand nombre de " +"chaînes de caractères ?" #: ../Doc/faq/programming.rst:1040 msgid "" @@ -1299,16 +1636,26 @@ msgid "" "creates a new object. In the general case, the total runtime cost is " "quadratic in the total string length." msgstr "" +"Les objets :class:`str` et :class:`bytes` sont immuables, par conséquent " +"concaténer un grand nombre de chaînes de caractères entre elles n'est pas " +"très efficace car chaque concaténation crée un nouvel objet. Dans le cas " +"général, la complexité est quadratique par rapport à la taille totale de la " +"chaîne." #: ../Doc/faq/programming.rst:1045 msgid "" "To accumulate many :class:`str` objects, the recommended idiom is to place " "them into a list and call :meth:`str.join` at the end::" msgstr "" +"Pour mettre bout-à-bout un grand nombre d'objets :class:`str`, la technique " +"recommandée consiste à toutes les mettre dans une liste et appeler la " +"méthode :meth:`str.join` à la fin ::" #: ../Doc/faq/programming.rst:1053 msgid "(another reasonably efficient idiom is to use :class:`io.StringIO`)" msgstr "" +"(une autre technique relativement efficace consiste à utiliser :class:`io." +"StringIO`)" #: ../Doc/faq/programming.rst:1055 msgid "" @@ -1316,22 +1663,26 @@ msgid "" "extend a :class:`bytearray` object using in-place concatenation (the ``+=`` " "operator)::" msgstr "" +"Pour concaténer un grand nombre d'objets :class:`bytes`, la technique " +"recommandée consiste à étendre un objet :class:`bytearray` en utilisant la " +"concaténation en-place (l'opérateur ``+=``) ::" #: ../Doc/faq/programming.rst:1064 msgid "Sequences (Tuples/Lists)" -msgstr "Sequences (Tuples/Lists)" +msgstr "Séquences (n-uplets / listes)" #: ../Doc/faq/programming.rst:1067 msgid "How do I convert between tuples and lists?" -msgstr "Comment convertir les listes en tuples et inversement?" +msgstr "Comment convertir les listes en n-uplets et inversement ?" #: ../Doc/faq/programming.rst:1069 msgid "" "The type constructor ``tuple(seq)`` converts any sequence (actually, any " "iterable) into a tuple with the same items in the same order." msgstr "" -"Le constructeur de type ``tuple(seq)`` convertit toute séquence (en fait " -"tout itérable) en un tuple avec les mêmes éléments dans le même ordre…" +"Le constructeur de type ``tuple(seq)`` convertit toute séquence (plus " +"précisément, tout itérable) en un n-uplet avec les mêmes éléments dans le " +"même ordre." #: ../Doc/faq/programming.rst:1072 msgid "" @@ -1340,11 +1691,11 @@ msgid "" "copy but returns the same object, so it is cheap to call :func:`tuple` when " "you aren't sure that an object is already a tuple." msgstr "" -"Par exemple ``tuple([1, 2, 3])`` renvoi ``(1, 2, 3)`` et ``tuple('abc')`` " -"renvoi ``('a', 'b', 'c')``. Si l'argument est un tuple, cela ne crèe pas une " -"copie, mais renvoi le même objet, ce qui fait de :func:`tuple` un fonction " -"économique à appeler quand vous ne savez pas si votre objet est déjà un " -"tulpe." +"Par exemple ``tuple([1, 2, 3])`` renvoie ``(1, 2, 3)`` et ``tuple('abc')`` " +"renvoie ``('a', 'b', 'c')``. Si l'argument est un n-uplet, cela ne crée pas " +"de copie, mais renvoie le même objet, ce qui fait de :func:`tuple` une " +"fonction économique à appeler quand vous ne savez pas si votre objet est " +"déjà un n-uplet." #: ../Doc/faq/programming.rst:1077 msgid "" @@ -1361,7 +1712,7 @@ msgstr "" #: ../Doc/faq/programming.rst:1084 msgid "What's a negative index?" -msgstr "Qu'est-ce qu'un indexe négatif?" +msgstr "Qu'est-ce qu'un index négatif ?" #: ../Doc/faq/programming.rst:1086 msgid "" @@ -1372,10 +1723,10 @@ msgid "" "``seq[len(seq)-n]``." msgstr "" "Les séquences Python sont indexées avec des nombres positifs aussi bien que " -"négatifs. Pour les nombres positifs, 0 est le premier index, 1 est le " -"second, et ainsi de suite. Pour les indexes négatifs, -1 est le dernier " -"index, -2 est le pénultième (avant dernier), et ainsi de suite. On peut " -"aussi dire que ``seq[-n]`` est équivalent à ``seq[len(seq)-n]``." +"négatifs. Pour les nombres positifs, 0 est le premier indice, 1 est le " +"deuxième, et ainsi de suite. Pour les indices négatifs, ``-1`` est le " +"dernier index, ``-2`` est le pénultième (avant-dernier), et ainsi de suite. " +"On peut aussi dire que ``seq[-n]`` est équivalent à ``seq[len(seq)-n]``." #: ../Doc/faq/programming.rst:1091 msgid "" @@ -1383,56 +1734,56 @@ msgid "" "all of the string except for its last character, which is useful for " "removing the trailing newline from a string." msgstr "" -"Utiliser des indexes négatifs peut être très pratique. Par exemple " -"``S[:-1]`` indique la chaine entière a l'exception du dernier caractère, ce " -"qui est pratique pour retirer un caractère de fin de ligne en fin d'une " -"chaine." +"Utiliser des indices négatifs peut être très pratique. Par exemple " +"``S[:-1]`` représente la chaîne tout entière à l'exception du dernier " +"caractère, ce qui est pratique pour retirer un caractère de fin de ligne à " +"la fin d'une chaîne." #: ../Doc/faq/programming.rst:1097 msgid "How do I iterate over a sequence in reverse order?" -msgstr "Comment itérer à rebours sur une séquence?" +msgstr "Comment itérer à rebours sur une séquence ?" #: ../Doc/faq/programming.rst:1099 msgid "" "Use the :func:`reversed` built-in function, which is new in Python 2.4::" msgstr "" -"Utilisez la fonction embarquée :func:`reversed`, qui est apparue en Python " -"2.4::" +"Utilisez la fonction native :func:`reversed`, qui a été introduite en Python " +"2.4 ::" #: ../Doc/faq/programming.rst:1104 msgid "" "This won't touch your original sequence, but build a new copy with reversed " "order to iterate over." msgstr "" -"Cela ne modifiera pas votre séquence initiale, mais construira à la place " -"une copie en ordre inverse pour itérer dessus." +"Cela ne modifie pas la séquence initiale, mais construit à la place une " +"copie en ordre inverse pour itérer dessus." #: ../Doc/faq/programming.rst:1107 msgid "With Python 2.3, you can use an extended slice syntax::" -msgstr "Avec Python 2.3 vous pouvez utiliser la syntaxe étendue de tranches::" +msgstr "Avec Python 2.3 vous pouvez utiliser la syntaxe étendue de tranches ::" #: ../Doc/faq/programming.rst:1114 msgid "How do you remove duplicates from a list?" -msgstr "Comment retirer les doublons d'une liste?" +msgstr "Comment retirer les doublons d'une liste ?" #: ../Doc/faq/programming.rst:1116 msgid "See the Python Cookbook for a long discussion of many ways to do this:" msgstr "" -"Lisez le Python Cookbook pour trouver une longue discussion sur les " -"nombreuses façons de faire cela:" +"Lisez le « livre de recettes » Python pour trouver une longue discussion sur " +"les nombreuses approches possibles :" #: ../Doc/faq/programming.rst:1118 msgid "https://code.activestate.com/recipes/52560/" -msgstr "" +msgstr "https://code.activestate.com/recipes/52560/" #: ../Doc/faq/programming.rst:1120 msgid "" "If you don't mind reordering the list, sort it and then scan from the end of " "the list, deleting duplicates as you go::" msgstr "" -"Si changer l'ordre de la liste ne vous dérange pas, commencez par trier " -"celle ci, puis parcourez la d'un bout à l'autre, en supprimant les doublons " -"trouvés en chemin::" +"Si changer l'ordre de la liste ne vous dérange pas, commencez par ordonner " +"celle-ci, puis parcourez-la d'un bout à l'autre, en supprimant les doublons " +"trouvés en chemin ::" #: ../Doc/faq/programming.rst:1132 msgid "" @@ -1440,24 +1791,24 @@ msgid "" "`hashable`) this is often faster ::" msgstr "" "Si tous les éléments de la liste peuvent être utilisés comme des clés de " -"dictionnaire (càd, qu'elles sont toutes :term:`hachables `) ceci " -"est souvent plus rapide : ::" +"dictionnaire (c'est à dire, qu'elles sont toutes :term:`hachables " +"`) ceci est souvent plus rapide ::" #: ../Doc/faq/programming.rst:1137 msgid "" "This converts the list into a set, thereby removing duplicates, and then " "back into a list." msgstr "" -"Ceci convertis la liste en un ensemble, ce qui supprime automatiquement les " +"Ceci convertit la liste en un ensemble, ce qui supprime automatiquement les " "doublons, puis la transforme à nouveau en liste." #: ../Doc/faq/programming.rst:1142 msgid "How do you make an array in Python?" -msgstr "Comment construire un tableau en Python?" +msgstr "Comment construire un tableau en Python ?" #: ../Doc/faq/programming.rst:1144 msgid "Use a list::" -msgstr "Utilisez une liste::" +msgstr "Utilisez une liste ::" #: ../Doc/faq/programming.rst:1148 msgid "" @@ -1465,7 +1816,7 @@ msgid "" "primary difference is that a Python list can contain objects of many " "different types." msgstr "" -"Les listes ont un cout équivalent à celui des tableau C ou Pascal; la " +"Les listes ont un coût équivalent à celui des tableaux C ou Pascal ; la " "principale différence est qu'une liste Python peut contenir des objets de " "différents types." @@ -1478,16 +1829,16 @@ msgid "" msgstr "" "Le module ``array`` fournit des méthodes pour créer des tableaux de types " "fixes dans une représentation compacte, mais ils sont plus lents à indexer " -"que les listes. Notez aussi que l'extension ``Numeric`` et d'autres, " -"fournissent différentes structures de types tableaux, avec des " +"que les listes. Notez aussi que l'extension ``Numeric`` (et d'autres) " +"fournissent différentes structures de type tableaux, avec des " "caractéristiques différentes." #: ../Doc/faq/programming.rst:1156 msgid "" "To get Lisp-style linked lists, you can emulate cons cells using tuples::" msgstr "" -"Pour obtenir des listes chainées de type Lisp, vous pouvez émuler les \"cons " -"cells\" en utilisant des tuples::" +"Pour obtenir des listes chaînées à la sauce Lisp, vous pouvez émuler les " +"*cons cells* en utilisant des n-uplets ::" #: ../Doc/faq/programming.rst:1160 msgid "" @@ -1497,29 +1848,30 @@ msgid "" "it's usually a lot slower than using Python lists." msgstr "" "Si vous voulez pouvoir modifier les éléments, utilisez une liste plutôt " -"qu'un tuple. Ici la version équivalente au \"car\" de Lisp est " -"``lisp_list[0]`` et l'équivalent à \"cdr\" est ``list_lip[1]``. Ne faîtes " +"qu'un tuple. Ici la version équivalente du *car* de Lisp est " +"``lisp_list[0]`` et l'équivalent de *cdr* est ``lisp_list[1]``. Ne faites " "ceci que si vous êtes réellement sûr d'en avoir besoin, cette méthode est en " -"générale bien plus lente que les listes Python." +"général bien plus lente que les listes Python." #: ../Doc/faq/programming.rst:1169 msgid "How do I create a multidimensional list?" -msgstr "Comment puis-je créer une liste à plusieurs dimensions?" +msgstr "Comment créer une liste à plusieurs dimensions ?" #: ../Doc/faq/programming.rst:1171 msgid "You probably tried to make a multidimensional array like this::" msgstr "" "Vous avez probablement essayé de créer une liste à plusieurs dimensions de " -"cette façon::" +"cette façon ::" #: ../Doc/faq/programming.rst:1175 msgid "This looks correct if you print it:" -msgstr "" +msgstr "Elle semble correcte si on l'affiche :" #: ../Doc/faq/programming.rst:1186 msgid "But when you assign a value, it shows up in multiple places:" msgstr "" -"Mais quand vous assignez une valeur, elle apparait en de multiples endroits::" +"Mais quand vous affectez une valeur, celle-ci apparaît à plusieurs " +"endroits ::" #: ../Doc/faq/programming.rst:1198 msgid "" @@ -1528,46 +1880,51 @@ msgid "" "containing 3 references to the same list of length two. Changes to one row " "will show in all rows, which is almost certainly not what you want." msgstr "" -"La raison en est que dupliquer une liste en utilisant ``*`` ne crée pas de " -"copies, cela crée seulement des références aux objets existants. Le ``*3`` " -"crée une liste contenant trois références à la même liste de longueur deux. " -"Un changement dans une colonne apparaîtra donc dans toutes les colonnes. Ce " -"qui n'est de façon quasi certaine, pas ce que vous souhaitez." +"Dupliquer une liste en utilisant ``*`` ne crée en réalité pas de copie mais " +"seulement des références aux objets existants. Le ``*3`` crée une liste " +"contenant trois références à la même liste de longueur deux. Un changement " +"dans une colonne apparaîtra donc dans toutes les colonnes, ce qui n'est très " +"probablement pas ce que vous souhaitiez." #: ../Doc/faq/programming.rst:1203 msgid "" "The suggested approach is to create a list of the desired length first and " "then fill in each element with a newly created list::" msgstr "" -"L'approche suggérée est de créer une liste de la longueur désiré d'abords, " -"puis de remplir tous les éléments avec une chaîne nouvellement créée." +"L'approche suggérée est d'abord de créer une liste de la longueur désirée, " +"puis de remplir tous les éléments avec une nouvelle chaîne ::" #: ../Doc/faq/programming.rst:1210 msgid "" "This generates a list containing 3 different lists of length two. You can " "also use a list comprehension::" msgstr "" -"Cette liste générée contient trois listes différentes de longueur deux. Vous " -"pouvez aussi utilisez la notation de compréhension de listes." +"Cela génère une liste contenant elle-même trois listes distinctes, de " +"longueur deux. Vous pouvez aussi utiliser la syntaxe des listes en " +"compréhension ::" #: ../Doc/faq/programming.rst:1216 msgid "" "Or, you can use an extension that provides a matrix datatype; `NumPy `_ is the best known." msgstr "" +"Vous pouvez aussi utiliser une extension qui fournit un type matriciel " +"natif ; `NumPy `_ est la plus répandue." #: ../Doc/faq/programming.rst:1221 msgid "How do I apply a method to a sequence of objects?" -msgstr "Comment appliquer une méthode à une séquence d'objets?" +msgstr "Comment appliquer une méthode à une séquence d'objets ?" #: ../Doc/faq/programming.rst:1223 msgid "Use a list comprehension::" -msgstr "Utilisez une compréhension de liste::" +msgstr "Utilisez une liste en compréhension ::" #: ../Doc/faq/programming.rst:1230 msgid "" "Why does a_tuple[i] += ['item'] raise an exception when the addition works?" msgstr "" +"Pourquoi ``a_tuple[i] += ['item']`` lève-t-il une exception alors que " +"l'addition fonctionne ?" #: ../Doc/faq/programming.rst:1232 msgid "" @@ -1575,6 +1932,9 @@ msgid "" "operators are *assignment* operators, and the difference between mutable and " "immutable objects in Python." msgstr "" +"Ceci est dû à la combinaison de deux facteurs : le fait que les opérateurs " +"d'affectation incrémentaux sont des opérateurs d'*affectation* et à la " +"différence entre les objets muables et immuables en Python." #: ../Doc/faq/programming.rst:1236 msgid "" @@ -1582,10 +1942,13 @@ msgid "" "applied to elements of a tuple that point to mutable objects, but we'll use " "a ``list`` and ``+=`` as our exemplar." msgstr "" +"Cette discussion est valable, en général, quand des opérateurs d'affectation " +"incrémentale sont appliqués aux éléments d'un n-uplet qui pointe sur des " +"objets muables, mais on prendra ``list`` et ``+=`` comme exemple." #: ../Doc/faq/programming.rst:1240 msgid "If you wrote::" -msgstr "Si vous écrivez : ::" +msgstr "Si vous écrivez ::" #: ../Doc/faq/programming.rst:1248 msgid "" @@ -1595,28 +1958,39 @@ msgid "" "to element ``0`` of the tuple, we get an error because we can't change what " "an element of a tuple points to." msgstr "" +"La cause de l'exception est claire : ``1`` est ajouté à l'objet " +"``a_tuple[0]`` qui pointe sur (``1``), ce qui produit l'objet résultant " +"``2``, mais, lorsque l'on tente d'affecter le résultat du calcul, ``2``, à " +"l'élément ``0`` du n-uplet, on obtient une erreur car il est impossible de " +"modifier la cible sur laquelle pointe un élément d'un n-uplet." #: ../Doc/faq/programming.rst:1254 msgid "" "Under the covers, what this augmented assignment statement is doing is " "approximately this::" msgstr "" +"Sous le capot, une instruction d'affectation incrémentale fait à peu près " +"ceci ::" #: ../Doc/faq/programming.rst:1263 msgid "" "It is the assignment part of the operation that produces the error, since a " "tuple is immutable." msgstr "" +"C'est la partie de l'affectation de l'opération qui génère l'erreur, vu " +"qu'un n-uplet est immuable." #: ../Doc/faq/programming.rst:1266 msgid "When you write something like::" -msgstr "" +msgstr "Quand vous écrivez un code du style ::" #: ../Doc/faq/programming.rst:1274 msgid "" "The exception is a bit more surprising, and even more surprising is the fact " "that even though there was an error, the append worked::" msgstr "" +"L'exception est un peu plus surprenante et, chose encore plus étrange, " +"malgré l'erreur, l'ajout a fonctionné ::" #: ../Doc/faq/programming.rst:1280 msgid "" @@ -1627,6 +2001,13 @@ msgid "" "calling ``extend`` on the list and returning the list. That's why we say " "that for lists, ``+=`` is a \"shorthand\" for ``list.extend``::" msgstr "" +"Pour comprendre ce qui se passe, il faut savoir que, premièrement, si un " +"objet implémente la méthode magique c, celle-ci est appelée quand " +"l'affectation incrémentale ``+=`` est exécutée et sa valeur de retour est " +"utilisée dans l'instruction d'affectation ; et que, deuxièmement, pour les " +"listes, ``__iadd__`` équivaut à appeler ``extend`` sur la liste et à " +"renvoyer celle-ci. C'est pour cette raison que l'on dit que pour les listes, " +"``+=`` est un \"raccourci\" pour ``list.extend`` ::" #: ../Doc/faq/programming.rst:1292 msgid "This is equivalent to::" @@ -1639,10 +2020,16 @@ msgid "" "assignment is a no-op, since it is a pointer to the same object that " "``a_list`` was previously pointing to, but the assignment still happens." msgstr "" +"L'objet sur lequel pointe ``a_list`` a été modifié et le pointeur vers " +"l'objet modifié est réaffecté à ``a_list``. *In fine*, l'affectation ne " +"change rien, puisque c'est un pointeur vers le même objet que sur lequel " +"pointait ``a_list``, mais l'affectation a tout de même lieu." #: ../Doc/faq/programming.rst:1302 msgid "Thus, in our tuple example what is happening is equivalent to::" msgstr "" +"Donc, dans notre exemple avec un n-uplet, il se passe quelque chose " +"équivalent à ::" #: ../Doc/faq/programming.rst:1310 msgid "" @@ -1651,6 +2038,9 @@ msgid "" "that final assignment still results in an error, because tuples are " "immutable." msgstr "" +"L'appel à ``__iadd__`` réussit et la liste est étendue, mais bien que " +"``result`` pointe sur le même objet que ``a_tuple[0]``, l'affectation finale " +"échoue car les n-uplets ne sont pas muables." #: ../Doc/faq/programming.rst:1316 msgid "Dictionaries" @@ -1673,8 +2063,8 @@ msgid "" "I want to do a complicated sort: can you do a Schwartzian Transform in " "Python?" msgstr "" -"Je souhaite faire un tri compliqué: peut on faire une transformation de " -"Schwartz en Python?" +"Je souhaite faire un classement compliqué : peut on faire une transformation " +"de Schwartz en Python ?" #: ../Doc/faq/programming.rst:1326 msgid "" @@ -1683,23 +2073,26 @@ msgid "" "value\". In Python, use the ``key`` argument for the :meth:`list.sort` " "method::" msgstr "" +"Cette technique, attribuée à Randal Schwartz de la communauté Perl, ordonne " +"les éléments d'une liste à l'aide une transformation qui fait correspondre " +"chaque élément à sa \"valeur de tri\". En Python, ceci est géré par " +"l'argument ``key`` de la méthode :meth:`list.sort` ::" #: ../Doc/faq/programming.rst:1335 msgid "How can I sort one list by values from another list?" -msgstr "" -"Comment puis-je trier une liste en fonction des valeurs d'une autre liste?" +msgstr "Comment ordonner une liste en fonction des valeurs d'une autre liste ?" #: ../Doc/faq/programming.rst:1337 msgid "" "Merge them into an iterator of tuples, sort the resulting list, and then " "pick out the element you want. ::" msgstr "" -"Fusionnez les dans un itérateur de tuples, triez la liste obtenue, puis " -"choisissez l'élément que vous voulez. ::" +"Fusionnez-les dans un itérateur de n-uplets, ordonnez la liste obtenue, puis " +"choisissez l'élément que vous voulez ::" #: ../Doc/faq/programming.rst:1351 msgid "An alternative for the last step is::" -msgstr "Une alternative pour la dernière étape est : ::" +msgstr "Vous pouvez remplacer la dernière étape par ::" #: ../Doc/faq/programming.rst:1356 msgid "" @@ -1711,14 +2104,15 @@ msgid "" "\"result.append\" requires an extra attribute lookup, and third, there's a " "speed reduction from having to make all those function calls." msgstr "" -"Si vous trouvez cela plus lisible, vous préférez peut-être utiliser ceci à " -"la place de la compréhension de la liste finale. Toutefois, ceci est presque " -"deux fois plus lent pour les longues listes. Pourquoi? Tout d'abord, " -"``append ()`` doit réaffecter la mémoire, et si il utilise quelques astuces " -"pour éviter de le faire à chaque fois, il doit encore le faire de temps en " -"temps, ce qui coûte assez cher. Deuxièmement, l'expression \"result.append\" " -"exige une recherche d'attribut supplémentaire, et enfin, tous ces appels de " -"fonction impactent la vitesse d'exécution." +"Si cela vous semble plus lisible, vous pouvez utiliser cette forme plutôt " +"qu'une liste en compréhension. Toutefois, ce code est presque deux fois plus " +"lent pour une liste de grande taille. Pourquoi ? Tout d'abord, parce que " +"``append()`` doit ré-allouer de la mémoire et, même si elle utilise quelques " +"astuces pour éviter d'effectuer la ré-allocation à chaque appel, elle doit " +"tout de même le faire de temps en temps, ce qui coûte assez cher. " +"Deuxièmement, parce que l'expression ``result.append`` fait un accès " +"supplémentaire à un attribut et, enfin, parce que tous ces appels de " +"fonctions réduisent la vitesse d'exécution." #: ../Doc/faq/programming.rst:1366 msgid "Objects" @@ -1726,7 +2120,7 @@ msgstr "Objets" #: ../Doc/faq/programming.rst:1369 msgid "What is a class?" -msgstr "Qu'est-ce qu'une classe?" +msgstr "Qu'est-ce qu'une classe ?" #: ../Doc/faq/programming.rst:1371 msgid "" @@ -1750,16 +2144,17 @@ msgid "" "``OutlookMailbox`` that handle various specific mailbox formats." msgstr "" "Une classe peut être fondée sur une ou plusieurs autres classes, appelée sa " -"ou ses classes de base. Il hérite alors les attributs et les méthodes de ses " -"classes de base. Cela permet à un modèle d'objet d'être successivement " -"raffinés par héritage. Vous pourriez avoir une classe générique ``Mailbox`` " -"qui fournit des méthodes d'accès de base pour une boîte aux lettres, et sous-" -"classes telles que ``MboxMailbox``, ``MaildirMailbox``, ``OutlookMailbox`` " -"qui gèrent les différents formats de boîtes aux lettres spécifiques." +"(ou ses) classe(s) de base. Elle hérite alors des attributs et des méthodes " +"de ses classes de base. Cela permet à un modèle d'objet d'être " +"successivement raffiné par héritage. Vous pourriez avoir une classe " +"générique ``Mailbox``, qui fournit des méthodes d'accès de base pour une " +"boîte aux lettres, et des sous-classes telles que ``MboxMailbox``, " +"``MaildirMailbox``, ``OutlookMailbox`` qui gèrent les plusieurs formats " +"spécifiques de boîtes aux lettres." #: ../Doc/faq/programming.rst:1384 msgid "What is a method?" -msgstr "Qu'est-ce qu'une méthode?" +msgstr "Qu'est-ce qu'une méthode ?" #: ../Doc/faq/programming.rst:1386 msgid "" @@ -1767,13 +2162,13 @@ msgid "" "name(arguments...)``. Methods are defined as functions inside the class " "definition::" msgstr "" -"Une méthode est une fonction sur un objet ``x`` appelez normalement comme " -"``x.name(arguments…)``. Les méthodes sont définies comme des fonctions à " -"l'intérieur de la définition de classe::" +"Une méthode est une fonction sur un objet ``x`` qu'on appelle de manière " +"générale sous la forme ``x.name(arguments…)``. Les méthodes sont définies " +"comme des fonctions à l'intérieur de la définition de classe ::" #: ../Doc/faq/programming.rst:1396 msgid "What is self?" -msgstr "Qu'est-ce que self?" +msgstr "Qu'est-ce que self ?" #: ../Doc/faq/programming.rst:1398 msgid "" @@ -1782,11 +2177,11 @@ msgid "" "c)`` for some instance ``x`` of the class in which the definition occurs; " "the called method will think it is called as ``meth(x, a, b, c)``." msgstr "" -"Self est simplement un nom conventionnel pour le premier argument d'une " -"méthode. Une méthode définie comme ``meth(self, a, b, c)`` doit être appelée " -"en tant que ``x.meth(a, b, c)``, pour une instance ``x`` de la classe dans " -"laquelle elle est définie, la méthode appelée considérera qu'elle est " -"appelée ``meth(x, a, b, c)``." +"Par convention, le premier argument d'une méthode est appelé self. Une " +"méthode ``meth(self, a, b, c)`` doit être appelée sous la forme ``x.meth(a, " +"b, c)`` où ``x`` est une instance de la classe dans laquelle cette méthode " +"est définie ; tout se passe comme si la méthode était appelée comme " +"``meth(x, a, b, c)``." #: ../Doc/faq/programming.rst:1403 msgid "See also :ref:`why-self`." @@ -1797,8 +2192,8 @@ msgid "" "How do I check if an object is an instance of a given class or of a subclass " "of it?" msgstr "" -"Comment puis-je vérifier si un objet est une instance d'une classe donnée ou " -"d'une sous-classe de celui-ci?" +"Comment vérifier si un objet est une instance d'une classe donnée ou d'une " +"sous-classe de celle-ci ?" #: ../Doc/faq/programming.rst:1409 msgid "" @@ -1809,11 +2204,11 @@ msgid "" "``isinstance(obj, str)`` or ``isinstance(obj, (int, float, complex))``." msgstr "" "Utilisez la fonction native ``isinstance(obj, cls)``. Vous pouvez vérifier " -"si un objet est une instance de n'importe lequel d'un certain nombre de " -"classes en fournissant un tuple à la place d'une seule classe, par exemple, " -"``isinstance(obj, (class1, class2, ...))``, et peut également vérifier si un " -"objet est l'un des types natifs de Python, par exemple, ``isinstance(obj, " -"str)`` ou ``isinstance(obj, (int, float, complex))``." +"qu'un objet est une instance de plusieurs classes à la fois en fournissant " +"un n-uplet à la place d'une seule classe, par exemple, ``isinstance(obj, " +"(class1, class2, ...))``. Vous pouvez également vérifier qu'un objet est " +"l'un des types natifs de Python, par exemple ``isinstance(obj, str)`` ou " +"``isinstance(obj, (int, float, complex))``." #: ../Doc/faq/programming.rst:1415 msgid "" @@ -1824,25 +2219,24 @@ msgid "" "and doing a different thing based on what class it is. For example, if you " "have a function that does something::" msgstr "" -"Notez que la plupart des programmes n'utilisent pas :func:`isInstance` sur " -"les classes définies par l'utilisateur, très souvent. Si vous développez " -"vous-même les classes, un style plus appropriée orientée objet est de " -"définir des méthodes sur les classes qui encapsulent un comportement " -"particulier, au lieu de vérifier la classe de l'objet et de faire quelque " -"chose de différent en fonction de sa classe. Par exemple, si vous avez une " -"fonction qui fait quelque chose : ::" +"Notez que la plupart des programmes n'utilisent que rarement :func:" +"`isInstance` sur les classes définies par l'utilisateur. Si vous développez " +"vous-même des classes, une approche plus orientée-objet consiste définir des " +"méthodes sur les classes qui sont porteuses d'un comportement particulier, " +"plutôt que de vérifier la classe de l'objet et de faire un traitement ad-" +"hoc. Par exemple, si vous avez une fonction qui fait quelque chose ::" #: ../Doc/faq/programming.rst:1429 msgid "" "A better approach is to define a ``search()`` method on all the classes and " "just call it::" msgstr "" -"Une meilleure approche est de définir une méthode ``search()`` sur toutes " -"les classes et qu'il suffit d'appeler::" +"Une meilleure approche est de définir une méthode ``search()`` dans toutes " +"les classes et qu'il suffit d'appeler de la manière suivante ::" #: ../Doc/faq/programming.rst:1444 msgid "What is delegation?" -msgstr "Qu'est-ce que la délégation?" +msgstr "Qu'est-ce que la délégation ?" #: ../Doc/faq/programming.rst:1446 msgid "" @@ -1852,12 +2246,12 @@ msgid "" "implementation of the method you're interested in changing and delegates all " "other methods to the corresponding method of ``x``." msgstr "" -"La délégation est une technique orientée objet (aussi appelé un modèle de " -"conception). Disons que vous avez un objet ``x`` et que vous souhaitez " -"modifier le comportement d'une seule de ses méthodes. Vous pouvez créer une " -"nouvelle classe qui fournit une nouvelle implémentation de la méthode qui " -"vous intéresse dans l'évolution et les délégués de toutes les autres " -"méthodes la méthode correspondante de ``x``." +"La délégation est une technique orientée objet (aussi appelée « patron de " +"conception). Prenons un objet ``x`` dont on souhaite modifier le " +"comportement d'une seule de ses méthodes. On peut créer une nouvelle classe " +"qui fournit une nouvelle implémentation de la méthode qui nous intéresse " +"dans l'évolution et qui délègue toute autre méthode à la méthode " +"correspondante de ``x``." #: ../Doc/faq/programming.rst:1452 msgid "" @@ -1867,7 +2261,7 @@ msgid "" msgstr "" "Les programmeurs Python peuvent facilement mettre en œuvre la délégation. " "Par exemple, la classe suivante implémente une classe qui se comporte comme " -"un fichier, mais convertit toutes les données écrites en majuscules:" +"un fichier, mais convertit toutes les données écrites en majuscules ::" #: ../Doc/faq/programming.rst:1467 msgid "" @@ -1897,7 +2291,7 @@ msgstr "" "peuvent se compliquer. Lorsque les attributs doivent être définis aussi bien " "que récupérés, la classe doit définir une méthode :meth:`__setattr__` aussi, " "et il doit le faire avec soin. La mise en œuvre basique de la méthode :meth:" -"`__setattr__` est à peu près équivalent à ce qui suit:" +"`__setattr__` est à peu près équivalent à ce qui suit ::" #: ../Doc/faq/programming.rst:1485 msgid "" @@ -1905,7 +2299,7 @@ msgid "" "store local state for self without causing an infinite recursion." msgstr "" "La plupart des implémentations de :meth:`__setattr__` doivent modifier " -"``self.__dict__`` pour stocker l'état locale de self sans provoquer une " +"``self.__dict__`` pour stocker l'état local de self sans provoquer une " "récursion infinie." #: ../Doc/faq/programming.rst:1490 @@ -1914,11 +2308,11 @@ msgid "" "overrides it?" msgstr "" "Comment appeler une méthode définie dans une classe de base depuis une " -"classe dérivée qui la surcharge?" +"classe dérivée qui la surcharge ?" #: ../Doc/faq/programming.rst:1492 msgid "Use the built-in :func:`super` function::" -msgstr "Utiliser la fonction native :func:`super` : ::" +msgstr "Utilisez la fonction native :func:`super` ::" #: ../Doc/faq/programming.rst:1498 msgid "" @@ -1928,18 +2322,18 @@ msgid "" "meth(self, arguments...)``. Here, ``Base.meth`` is an unbound method, so " "you need to provide the ``self`` argument." msgstr "" -"Pour version antérieure à 3.0, vous pouvez utiliser des classes classiques : " -"Pour une définition de classe telle que ``class Derived(Base): ...`` vous " -"pouvez appeler la méthode ``meth()`` défini dans ``Base`` (ou l'une des " -"classes de base de ``Base``) en faisant ``Base.meth(self, arguments...)``. " -"Ici, ``Base.meth`` est une méthode non liée, vous devez donc fournir " -"l'argument ``self``." +"Pour les versions antérieures à 3.0, vous pouvez utiliser des classes " +"classiques : pour une définition de classe comme ``class Derived(Base): ..." +"`` vous pouvez appeler la méthode ``meth()`` définie dans ``Base`` (ou l'une " +"des classes de base de ``Base``) en faisant ``Base.meth(self, " +"arguments...)``. Ici, ``Base.meth`` est une méthode non liée, il faut donc " +"fournir l'argument ``self``." #: ../Doc/faq/programming.rst:1506 msgid "How can I organize my code to make it easier to change the base class?" msgstr "" -"Comment puis-je organiser mon code pour permettre de changer la classe de " -"base plus facilement?" +"Comment organiser un code pour permettre de changer la classe de base plus " +"facilement ?" #: ../Doc/faq/programming.rst:1508 msgid "" @@ -1953,23 +2347,23 @@ msgstr "" "Vous pouvez définir un alias pour la classe de base, lui attribuer la classe " "de base réelle avant la définition de classe, et utiliser l'alias au long de " "votre classe. Ensuite, tout ce que vous devez changer est la valeur " -"attribuée à l'alias. Incidemment, cette astuce est également utile si vous " -"voulez décider dynamiquement (par exemple en fonction de la disponibilité " -"des ressources) la classe de base à utiliser. Exemple::" +"attribuée à l'alias. Accessoirement, cette astuce est également utile si " +"vous voulez déterminer dynamiquement (par exemple en fonction de la " +"disponibilité des ressources) la classe de base à utiliser. Exemple ::" #: ../Doc/faq/programming.rst:1523 msgid "How do I create static class data and static class methods?" msgstr "" -"Comment puis-je créer des données statiques de classe et des méthodes " -"statiques de classe?" +"Comment créer des données statiques de classe et des méthodes statiques de " +"classe ?" #: ../Doc/faq/programming.rst:1525 msgid "" "Both static data and static methods (in the sense of C++ or Java) are " "supported in Python." msgstr "" -"Tant les données statiques que les méthodes statiques (dans le sens de C + + " -"ou Java) sont pris en charge en Python." +"Les données statiques et les méthodes statiques (au sens C++ ou Java) sont " +"prises en charge en Python." #: ../Doc/faq/programming.rst:1528 msgid "" @@ -1978,7 +2372,7 @@ msgid "" msgstr "" "Pour les données statiques, il suffit de définir un attribut de classe. Pour " "attribuer une nouvelle valeur à l'attribut, vous devez explicitement " -"utiliser le nom de classe dans l'affectation:" +"utiliser le nom de classe dans l'affectation ::" #: ../Doc/faq/programming.rst:1540 msgid "" @@ -1986,7 +2380,7 @@ msgid "" "``isinstance(c, C)`` holds, unless overridden by ``c`` itself or by some " "class on the base-class search path from ``c.__class__`` back to ``C``." msgstr "" -"``c.count`` se réfère également à ``C.count`` pour tout ``c`` telle que " +"``c.count`` se réfère également à ``C.count`` pour tout ``c`` tel que " "``isInstance (c, C)`` est vrai, sauf remplacement par ``c`` lui-même ou par " "une classe sur le chemin de recherche de classe de base de ``c.__class__`` " "jusqu'à ``C``." @@ -1998,15 +2392,15 @@ msgid "" "dict. Rebinding of a class-static data name must always specify the class " "whether inside a method or not::" msgstr "" -"Attention: dans une méthode de C, une affectation comme ``self.count=42`` " -"crée une nouvelle instance et sans rapport avec le nom \"count\" dans dans " -"le dictionnaire de données de ``self``. La redéfinition d'une donnée " -"statique de classe doit toujours spécifier la classe que l'on soit à " -"l'intérieur d'une méthode ou non:" +"Attention : dans une méthode de C, une affectation comme ``self.count = 42`` " +"crée une nouvelle instance sans rapport avec le nom ``count`` dans le " +"dictionnaire de données de ``self``. La redéfinition d'une donnée statique " +"de classe doit toujours spécifier la classe, que l'on soit à l'intérieur " +"d'une méthode ou non ::" #: ../Doc/faq/programming.rst:1551 msgid "Static methods are possible::" -msgstr "Les méthodes statiques sont possibles : ::" +msgstr "Il est possible d'utiliser des méthodes statiques ::" #: ../Doc/faq/programming.rst:1559 msgid "" @@ -2014,7 +2408,7 @@ msgid "" "is via a simple module-level function::" msgstr "" "Cependant, d'une manière beaucoup plus simple pour obtenir l'effet d'une " -"méthode statique se fait par une simple fonction au niveau du module::" +"méthode statique se fait par une simple fonction au niveau du module ::" #: ../Doc/faq/programming.rst:1565 msgid "" @@ -2027,19 +2421,19 @@ msgstr "" #: ../Doc/faq/programming.rst:1570 msgid "How can I overload constructors (or methods) in Python?" -msgstr "Comment puis-je surcharger les constructeurs (ou méthodes) en Python?" +msgstr "Comment surcharger les constructeurs (ou méthodes) en Python ?" #: ../Doc/faq/programming.rst:1572 msgid "" "This answer actually applies to all methods, but the question usually comes " "up first in the context of constructors." msgstr "" -"Cette réponse s'applique en fait à toutes les méthodes, mais la question " -"vient généralement en premier dans le contexte des constructeurs." +"Cette réponse s'applique en fait à toutes les méthodes, mais la question se " +"pose généralement dans le contexte des constructeurs." #: ../Doc/faq/programming.rst:1575 msgid "In C++ you'd write" -msgstr "In C++ you'd write" +msgstr "En C++, on écrirait" #: ../Doc/faq/programming.rst:1584 msgid "" @@ -2047,7 +2441,7 @@ msgid "" "using default arguments. For example::" msgstr "" "En Python, vous devez écrire un constructeur unique qui considère tous les " -"cas en utilisant des arguments par défaut. Par exemple::" +"cas en utilisant des arguments par défaut. Par exemple ::" #: ../Doc/faq/programming.rst:1594 msgid "This is not entirely equivalent, but close enough in practice." @@ -2059,7 +2453,7 @@ msgstr "" msgid "You could also try a variable-length argument list, e.g. ::" msgstr "" "Vous pouvez aussi utiliser une liste d'arguments de longueur variable, par " -"exemple : ::" +"exemple ::" #: ../Doc/faq/programming.rst:1601 msgid "The same approach works for all method definitions." @@ -2068,8 +2462,8 @@ msgstr "La même approche fonctionne pour toutes les définitions de méthode." #: ../Doc/faq/programming.rst:1605 msgid "I try to use __spam and I get an error about _SomeClassName__spam." msgstr "" -"J'essaie d'utiliser __spam et j'obtiens une erreur à propos de " -"_SomeClassName__spam." +"J'essaie d'utiliser ``__spam`` et j'obtiens une erreur à propos de " +"``_SomeClassName__spam``." #: ../Doc/faq/programming.rst:1607 msgid "" @@ -2080,12 +2474,12 @@ msgid "" "``classname`` is the current class name with any leading underscores " "stripped." msgstr "" -"Les noms de variables avec le double de soulignement sont «déformés» pour " -"fournir un moyen simple mais efficace de définir variables privées à la " -"classe. Tout identificateur de la forme ``__spam`` (au moins deux traits de " -"soulignement préfixe, au plus un soulignement suffix) est textuellement " +"Les noms de variables commençant avec deux tirets bas sont « déformés », " +"c'est un moyen simple mais efficace de définir des variables privées à une " +"classe. Tout identifiant de la forme ``__spam`` (commençant par au moins " +"deux tirets bas et se terminant par au plus un tiret bas) est textuellement " "remplacé par ``_classname__spam``, où ``classname`` est le nom de la classe " -"en cours avec les traits de soulignement dépouillés." +"en cours sans les éventuels tirets bas du début." #: ../Doc/faq/programming.rst:1613 msgid "" @@ -2094,21 +2488,20 @@ msgid "" "the object's ``__dict__``. Many Python programmers never bother to use " "private variable names at all." msgstr "" -"Cela ne garantit pas la privauté de l'accès : un utilisateur extérieur peut " -"encore délibérément acceder à l'attribut \"_classname__spam\", et les " -"valeurs privées sont visibles dans l'objet ``__dict__``. De nombreux " -"programmeurs Python ne prennent jamais la peine d'utiliser des noms de " -"variable privée." +"Cela ne garantit aucune protection : un utilisateur extérieur peut encore " +"délibérément accéder à l'attribut ``_classname__spam`` et les valeurs " +"privées sont visibles dans l'objet ``__dict__``. De nombreux programmeurs " +"Python ne prennent jamais la peine d'utiliser des noms de variable privés." #: ../Doc/faq/programming.rst:1620 msgid "My class defines __del__ but it is not called when I delete the object." msgstr "" -"Ma classe définit __del__ mais il n'est pas appelé lorsque je supprime " -"l'objet." +"Ma classe définit ``__del__`` mais elle n'est pas appelée lorsque je " +"supprime l'objet." #: ../Doc/faq/programming.rst:1622 msgid "There are several possible reasons for this." -msgstr "Il y a plusieurs raisons possibles pour cela." +msgstr "Il y a plusieurs explications possibles." #: ../Doc/faq/programming.rst:1624 msgid "" @@ -2116,9 +2509,9 @@ msgid "" "decrements the object's reference count, and if this reaches zero :meth:" "`__del__` is called." msgstr "" -"La commande del n'appelle pas forcément :meth:`__del__` - il décrémente " -"simplement le compteur de références de l'objet, et si celui ci arrive à " -"zéro :meth:`__del__` est appelée." +"La commande *del* n'appelle pas forcément :meth:`__del__` — elle décrémente " +"simplement le compteur de références de l'objet et, si celui-ci arrive à " +"zéro, :meth:`__del__` est appelée." #: ../Doc/faq/programming.rst:1628 msgid "" @@ -2133,6 +2526,18 @@ msgid "" "run :func:`gc.collect` to force a collection, but there *are* pathological " "cases where objects will never be collected." msgstr "" +"Si la structure de données contient des références circulaires (e.g. un " +"arbre dans lequel chaque fils référence son père, et chaque père garde une " +"liste de ses fils), le compteur de références n'arrivera jamais à zéro. " +"Python exécute périodiquement un algorithme pour détecter ce genre de " +"cycles, mais il peut se passer un certain temps entre le moment où la " +"structure est référencée pour la dernière fois et l'appel du ramasse-" +"miettes, donc la méthode :meth:`__del__` peut être appelée à un moment " +"aléatoire et pas opportun. C'est gênant pour essayer reproduire un problème. " +"Pire, l'ordre dans lequel les méthodes :meth:`__del__` des objets sont " +"appelées est arbitraire. Il est possible de forcer l'appel du ramasse-" +"miettes avec la fonction :func:`gc.collect`, mais il existe certains cas où " +"les objets ne seront jamais nettoyés." #: ../Doc/faq/programming.rst:1639 msgid "" @@ -2143,6 +2548,13 @@ msgid "" "``close()`` and ``close()`` should make sure that it can be called more than " "once for the same object." msgstr "" +"Bien que le ramasse-miette de cycles existe, il est tout de même recommandé " +"de définir une méthode ``close()`` explicite sur des objets, et de l'appeler " +"quand leur cycle de vie s'achève. Cette méthode ``close()`` peut alors " +"supprimer les attributs qui référencent des sous-objets. Il vaut mieux ne " +"pas appeler la méthode :meth:`__del__` directement, mais la méthode :meth:" +"`__del__` devrait appeler la méthode ``close()`` et ``close()`` doit pouvoir " +"être appelée plusieurs fois sur le même objet." #: ../Doc/faq/programming.rst:1646 msgid "" @@ -2151,16 +2563,23 @@ msgid "" "reference count. Tree data structures, for instance, should use weak " "references for their parent and sibling references (if they need them!)." msgstr "" +"Une alternative pour éviter les références cycliques consiste à utiliser le " +"module :mod:`weakref`, qui permet de faire référence à des objets sans " +"incrémenter leur compteur de références. Par exemple, les structures " +"d'arbres devraient utiliser des références faibles entre pères et fils (si " +"nécessaire !)." #: ../Doc/faq/programming.rst:1659 msgid "" "Finally, if your :meth:`__del__` method raises an exception, a warning " "message is printed to :data:`sys.stderr`." msgstr "" +"Enfin, si la méthode :meth:`__del__` lève une exception, un message " +"d'avertissement s'affiche dans :data:`sys.stderr`." #: ../Doc/faq/programming.rst:1664 msgid "How do I get a list of all instances of a given class?" -msgstr "" +msgstr "Comment obtenir toutes les instances d'une classe ?" #: ../Doc/faq/programming.rst:1666 msgid "" @@ -2168,10 +2587,16 @@ msgid "" "type). You can program the class's constructor to keep track of all " "instances by keeping a list of weak references to each instance." msgstr "" +"Python ne tient pas de registre de toutes les instances d'une classe (ni de " +"n'importe quel type natif). Il est cependant possible de programmer le " +"constructeur de la classe de façon à tenir un tel registre, en maintenant " +"une liste de références faibles vers chaque instance." #: ../Doc/faq/programming.rst:1672 msgid "Why does the result of ``id()`` appear to be not unique?" msgstr "" +"Pourquoi le résultat de ``id()`` peut-il être le même pour deux objets " +"différents ?" #: ../Doc/faq/programming.rst:1674 msgid "" @@ -2181,6 +2606,11 @@ msgid "" "memory, the next freshly created object is allocated at the same position in " "memory. This is illustrated by this example:" msgstr "" +"La fonction native :func:`id` renvoie un entier dont l'unicité est garantie " +"durant toute la vie de l'objet. Vu qu'en CPython cet entier est en réalité " +"l'adresse mémoire de l'objet, il est fréquent qu'un nouvel objet soit alloué " +"à une adresse mémoire identique à celle d'un objet venant d'être supprimé. " +"Comme l'illustre le code suivant :" #: ../Doc/faq/programming.rst:1685 msgid "" @@ -2189,6 +2619,10 @@ msgid "" "objects whose id you want to examine are still alive, create another " "reference to the object:" msgstr "" +"Les deux identifiants appartiennent à des objets entiers créés juste avant " +"l'appel à ``id()`` et détruits immédiatement après. Pour s'assurer que les " +"objets dont on veut examiner les identifiants sont toujours en vie, créons " +"une nouvelle référence à l'objet :" #: ../Doc/faq/programming.rst:1698 msgid "Modules" @@ -2196,7 +2630,7 @@ msgstr "Modules" #: ../Doc/faq/programming.rst:1701 msgid "How do I create a .pyc file?" -msgstr "" +msgstr "Comment créer des fichiers ``.pyc`` ?" #: ../Doc/faq/programming.rst:1703 msgid "" @@ -2208,6 +2642,13 @@ msgid "" "file, and ends with ``.pyc``, with a middle component that depends on the " "particular ``python`` binary that created it. (See :pep:`3147` for details.)" msgstr "" +"Quand un module est importé pour la première fois (ou si le fichier source a " +"été modifié depuis la création du fichier compilé), un fichier ``.pyc`` " +"contenant le code précompilé est créé dans un sous-dossier ``__pycache__`` " +"du dossier contentant le fichier ``.py``. Le nom du fichier ``.pyc`` est " +"identique au fichier ``.py`` et se termine par ``.pyc``, avec une partie " +"centrale qui dépend du binaire ``python`` qui l'a créé (voir la :pep:`3147` " +"pour de plus amples précisions)." #: ../Doc/faq/programming.rst:1711 msgid "" @@ -2217,6 +2658,12 @@ msgid "" "example, if you develop as one user but run as another, such as if you are " "testing with a web server." msgstr "" +"Une des raisons pour lesquelles un fichier ``.pyc`` peut ne pas être créé " +"est un problème de droits sur le dossier qui contient le fichier source, ce " +"qui veut dire qu'il est impossible de créer le sous-dossier ``__pycache__``. " +"Ceci peut arriver, par exemple, si vous développez en tant qu'un certain " +"utilisateur, mais que le code est exécuté en tant qu'un autre utilisateur, " +"par exemple pour tester un serveur Web." #: ../Doc/faq/programming.rst:1716 msgid "" @@ -2226,6 +2673,11 @@ msgid "" "``__pycache__`` subdirectory and write the compiled module to that " "subdirectory." msgstr "" +"La création du fichier ``.pyc`` est automatique durant l'import d'un module " +"si Python est capable (en termes de droits, d'espace disque, etc) de créer " +"un sous-dossier ``__pycache__`` et d'écrire le module ainsi compilé dans ce " +"sous-répertoire, à moins que la variable d'environnement :envvar:" +"`PYTHONDONTWRITEBYTECODE` soit définie." #: ../Doc/faq/programming.rst:1721 msgid "" @@ -2236,6 +2688,12 @@ msgid "" "``xyz`` because ``xyz`` is imported, but no ``.pyc`` file will be created " "for ``foo`` since ``foo.py`` isn't being imported." msgstr "" +"Exécuter du Python dans un script de plus haut niveau n'est pas considéré " +"comme un import et le fichier ``.pyc`` n'est pas créé. Par exemple, si un " +"module de plus haut niveau ``foo.py`` importe un autre module ``xyz.py``, " +"alors à l'exécution de ``foo`` (en tapant ``python foo.py`` dans la " +"console), un fichier ``.pyc`` est créé pour ``xyz`` mais pas pour ``foo`` " +"car ``foo.py`` n'est pas importé." #: ../Doc/faq/programming.rst:1728 msgid "" @@ -2243,12 +2701,18 @@ msgid "" "pyc`` file for a module that is not imported -- you can, using the :mod:" "`py_compile` and :mod:`compileall` modules." msgstr "" +"Pour créer un fichier ``.pyc`` pour ``foo`` — c'est-à-dire créer un fichier " +"``.pyc`` pour un module qui n'est pas importé — il existe les modules :mod:" +"`py_compile` et :mod:`compileall`." #: ../Doc/faq/programming.rst:1732 msgid "" "The :mod:`py_compile` module can manually compile any module. One way is to " "use the ``compile()`` function in that module interactively::" msgstr "" +"Le module :mod:`py_compile` peut compiler n'importe quel module " +"manuellement. Il est ainsi possible d'appeler la fonction ``compile()`` de " +"manière interactive ::" #: ../Doc/faq/programming.rst:1738 msgid "" @@ -2256,6 +2720,9 @@ msgid "" "location as ``foo.py`` (or you can override that with the optional parameter " "``cfile``)." msgstr "" +"Ces lignes écrivent le ``.pyc`` dans un sous-dossier ``__pycache__`` à côté " +"de ``foo.py`` (le paramètre optionnel ``cfile`` permet de changer ce " +"comportement)." #: ../Doc/faq/programming.rst:1742 msgid "" @@ -2264,10 +2731,14 @@ msgid "" "running ``compileall.py`` and providing the path of a directory containing " "Python files to compile::" msgstr "" +"Tous les fichiers d'un ou plusieurs dossiers peuvent aussi être compilés " +"avec le module :mod:`compileall`. C'est possible depuis l'invite de commande " +"en exécutant ``compileall.py`` avec le chemin du dossier contenant les " +"fichiers Python à compiler ::" #: ../Doc/faq/programming.rst:1751 msgid "How do I find the current module name?" -msgstr "" +msgstr "Comment obtenir le nom du module actuel ?" #: ../Doc/faq/programming.rst:1753 msgid "" @@ -2277,75 +2748,87 @@ msgid "" "importing them also provide a command-line interface or a self-test, and " "only execute this code after checking ``__name__``::" msgstr "" +"Un module peut déterminer son propre nom en examinant la variable globale " +"prédéfinie ``__name__``. Si celle-ci vaut ``'__main__'``, c'est que le " +"programme est exécuté comme un script. Beaucoup de modules qui doivent " +"normalement être importés pour pouvoir être utilisés fournissent aussi une " +"interface en ligne de commande ou un test automatique. Ils n'exécutent cette " +"portion du code qu'après avoir vérifié la valeur de ``__name__`` ::" #: ../Doc/faq/programming.rst:1768 msgid "How can I have modules that mutually import each other?" -msgstr "" +msgstr "Comment avoir des modules qui s'importent mutuellement ?" #: ../Doc/faq/programming.rst:1770 msgid "Suppose you have the following modules:" -msgstr "" +msgstr "Considérons les modules suivants :" #: ../Doc/faq/programming.rst:1772 msgid "foo.py::" -msgstr "" +msgstr "*foo.py* ::" #: ../Doc/faq/programming.rst:1777 msgid "bar.py::" -msgstr "" +msgstr "*bar.py* ::" #: ../Doc/faq/programming.rst:1782 msgid "The problem is that the interpreter will perform the following steps:" -msgstr "" +msgstr "Le problème réside dans les étapes que l'interpréteur va réaliser :" #: ../Doc/faq/programming.rst:1784 msgid "main imports foo" -msgstr "" +msgstr "*main* importe *foo*" #: ../Doc/faq/programming.rst:1785 msgid "Empty globals for foo are created" -msgstr "" +msgstr "Les variables globales (vides) de *foo* sont créées" #: ../Doc/faq/programming.rst:1786 msgid "foo is compiled and starts executing" -msgstr "" +msgstr "*foo* est compilé et commence à s'exécuter" #: ../Doc/faq/programming.rst:1787 msgid "foo imports bar" -msgstr "" +msgstr "*foo* importe *bar*" #: ../Doc/faq/programming.rst:1788 msgid "Empty globals for bar are created" -msgstr "" +msgstr "Les variables globales (vides) de *bar* sont créées" #: ../Doc/faq/programming.rst:1789 msgid "bar is compiled and starts executing" -msgstr "" +msgstr "*bar* est compilé et commence à s'exécuter" #: ../Doc/faq/programming.rst:1790 msgid "" "bar imports foo (which is a no-op since there already is a module named foo)" msgstr "" +"*bar* importe *foo* (en réalité, rien ne passe car il y a déjà un module " +"appelé *foo*)" #: ../Doc/faq/programming.rst:1791 msgid "bar.foo_var = foo.foo_var" -msgstr "" +msgstr "bar.foo_var = foo.foo_var" #: ../Doc/faq/programming.rst:1793 msgid "" "The last step fails, because Python isn't done with interpreting ``foo`` yet " "and the global symbol dictionary for ``foo`` is still empty." msgstr "" +"La dernière étape échoue car Python n'a pas fini d'interpréter ``foo`` et le " +"dictionnaire global des symboles de ``foo`` est encore vide." #: ../Doc/faq/programming.rst:1796 msgid "" "The same thing happens when you use ``import foo``, and then try to access " "``foo.foo_var`` in global code." msgstr "" +"Le même phénomène arrive quand on utilise ``import foo``, et qu'on essaye " +"ensuite d'accéder à ``foo.foo_var`` dans le code global." #: ../Doc/faq/programming.rst:1799 msgid "There are (at least) three possible workarounds for this problem." -msgstr "" +msgstr "Il y a (au moins) trois façons de contourner ce problème." #: ../Doc/faq/programming.rst:1801 msgid "" @@ -2355,58 +2838,78 @@ msgid "" "only. This means everything from an imported module is referenced as " "``.``." msgstr "" +"Guido van Rossum déconseille d'utiliser ``from import ...`` et de " +"mettre tout le code dans des fonctions. L'initialisation des variables " +"globales et des variables de classe ne doit utiliser que des constantes ou " +"des fonctions natives. Ceci implique que tout ce qui est fourni par un " +"module soit référencé par ``.``." #: ../Doc/faq/programming.rst:1806 msgid "" "Jim Roskind suggests performing steps in the following order in each module:" msgstr "" +"Jim Roskind recommande d'effectuer les étapes suivantes dans cet ordre dans " +"chaque module :" #: ../Doc/faq/programming.rst:1808 msgid "" "exports (globals, functions, and classes that don't need imported base " "classes)" msgstr "" +"les exportations (variables globales, fonctions et les classes qui ne " +"nécessitent d'importer des classes de base)" #: ../Doc/faq/programming.rst:1810 msgid "``import`` statements" -msgstr "" +msgstr "les instructions ``import``" #: ../Doc/faq/programming.rst:1811 msgid "" "active code (including globals that are initialized from imported values)." msgstr "" +"le code (avec les variables globales qui sont initialisées à partir de " +"valeurs importées)." #: ../Doc/faq/programming.rst:1813 msgid "" "van Rossum doesn't like this approach much because the imports appear in a " "strange place, but it does work." msgstr "" +"van Rossum désapprouve cette approche car les importations se trouvent à un " +"endroit bizarre, mais cela fonctionne." #: ../Doc/faq/programming.rst:1816 msgid "" "Matthias Urlichs recommends restructuring your code so that the recursive " "import is not necessary in the first place." msgstr "" +"Matthias Urlichs conseille de restructurer le code pour éviter les " +"importations récursives." #: ../Doc/faq/programming.rst:1819 msgid "These solutions are not mutually exclusive." -msgstr "" +msgstr "Ces solutions peuvent être combinées." #: ../Doc/faq/programming.rst:1823 msgid "__import__('x.y.z') returns ; how do I get z?" msgstr "" +"``__import__('x.y.z')`` renvoie ```` ; comment accéder à ``z`` ?" #: ../Doc/faq/programming.rst:1825 msgid "" "Consider using the convenience function :func:`~importlib.import_module` " "from :mod:`importlib` instead::" msgstr "" +"Utilisez plutôt la fonction :func:`~importlib.import_module` de :mod:" +"`importlib` ::" #: ../Doc/faq/programming.rst:1832 msgid "" "When I edit an imported module and reimport it, the changes don't show up. " "Why does this happen?" msgstr "" +"Quand j'édite un module et que je le réimporte, je ne vois pas les " +"changements. Pourquoi ?" #: ../Doc/faq/programming.rst:1834 msgid "" @@ -2416,12 +2919,20 @@ msgid "" "module, the basic module would be parsed and re-parsed many times. To force " "re-reading of a changed module, do this::" msgstr "" +"Pour des raisons de performance et de cohérence, Python ne lit le fichier " +"d'un module que la première fois où celui-ci est importé. Si ce n'était pas " +"le cas, dans un programme composé d'un très grand nombre de modules qui " +"importent tous le même module de base, ce module de base serait analysé et " +"ré-analysé un très grand nombre de fois. Pour forcer la relecture d'un " +"module, il faut faire ::" #: ../Doc/faq/programming.rst:1844 msgid "" "Warning: this technique is not 100% fool-proof. In particular, modules " "containing statements like ::" msgstr "" +"Attention, cette technique ne marche pas systématiquement. En particulier, " +"les modules qui contiennent des instructions comme ::" #: ../Doc/faq/programming.rst:1849 msgid "" diff --git a/faq/windows.po b/faq/windows.po index e8d1ed84b..a04b25960 100644 --- a/faq/windows.po +++ b/faq/windows.po @@ -8,27 +8,28 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-10-13 22:28+0200\n" -"PO-Revision-Date: 2018-01-21 23:08+0100\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2018-06-10 11:27+0200\n" +"PO-Revision-Date: 2018-05-08 20:24+0200\n" +"Last-Translator: Julien Palard \n" "Language-Team: LANGUAGE \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../Doc/faq/windows.rst:7 +#: ../Doc/faq/windows.rst:9 msgid "Python on Windows FAQ" -msgstr "" -"Ce n'est pas forcément une question simple. Si vous êtes déjà familier avec " -"le lancement de programmes depuis la ligne de commande de Windows alors tout " -"semblera évident; Sinon, vous auriez besoin d'être un peu guidé." +msgstr "FAQ : Python et Windows" -#: ../Doc/faq/windows.rst:18 +#: ../Doc/faq/windows.rst:12 +msgid "Contents" +msgstr "Sommaire" + +#: ../Doc/faq/windows.rst:20 msgid "How do I run a Python program under Windows?" msgstr "Comment exécuter un programme Python sous Windows ?" -#: ../Doc/faq/windows.rst:20 +#: ../Doc/faq/windows.rst:22 msgid "" "This is not necessarily a straightforward question. If you are already " "familiar with running programs from the Windows command line then everything " @@ -36,9 +37,13 @@ msgid "" msgstr "" "Ce n'est pas forcément une question simple. Si vous êtes déjà familier avec " "le lancement de programmes depuis la ligne de commande de Windows alors tout " -"semblera évident; Sinon, vous auriez besoin d'être un peu guidé." +"semblera évident ; sinon, vous pourriez avoir besoin d'être un peu guidé." + +#: ../Doc/faq/windows.rst:None +msgid "|Python Development on XP|_" +msgstr "|Python Development on XP|_" -#: ../Doc/faq/windows.rst:27 +#: ../Doc/faq/windows.rst:29 msgid "" "This series of screencasts aims to get you up and running with Python on " "Windows XP. The knowledge is distilled into 1.5 hours and will get you up " @@ -46,12 +51,12 @@ msgid "" "IDE, and debugging and writing solid code with unit-tests." msgstr "" "Cette série de vidéos a pour but de vous montrer comment utiliser Python sur " -"Windows XP. Les explications durent 1 heure et demi et vous permetteront " +"Windows XP. Les explications durent 1 heure et demi et vous permettront " "d'utiliser la distribution Python adéquate, de développer dans l'IDE de " -"votre choix, et de débugger et écrire du code solide accompagné des tests " +"votre choix, et de déboguer et écrire du code solide accompagné des tests " "unitaires." -#: ../Doc/faq/windows.rst:36 +#: ../Doc/faq/windows.rst:38 msgid "" "Unless you use some sort of integrated development environment, you will end " "up *typing* Windows commands into what is variously referred to as a \"DOS " @@ -59,25 +64,25 @@ msgid "" "from your Start menu; under Windows 7 the menu selection is :menuselection:" "`Start --> Programs --> Accessories --> Command Prompt`. You should be able " "to recognize when you have started such a window because you will see a " -"Windows \"command prompt\", which usually looks like this::" +"Windows \"command prompt\", which usually looks like this:" msgstr "" "A moins que vous n'utilisiez quelque environnement de développement, vous " "devrez entrer des commandes Windows dans ce qui est diversement référé comme " -"\"DOS windows\" ou \"invite de commande windows\". En général vous pouvez " -"ouvrir cette fenêtre depuis le menu Démarrer; sous windows 7, allez dans :" +"\"DOS Windows\" ou \"invite de commande Windows\". En général vous pouvez " +"ouvrir cette fenêtre depuis le menu Démarrer; sous Windows 7, allez dans :" "Démarrer --> Programmes --> Accessoires --> Invite de commande. Vous serez " "dans la bonne fenêtre quand vous verrez une fenêtre invite de commande qui " -"ressemble normalement à ça ::" +"ressemble normalement à ça :" -#: ../Doc/faq/windows.rst:46 +#: ../Doc/faq/windows.rst:50 msgid "" "The letter may be different, and there might be other things after it, so " -"you might just as easily see something like::" +"you might just as easily see something like:" msgstr "" "La lettre peut être différente, et il peut y avoir d'autres choses à la " -"suite, alors il se peut aussi bien que vous voyez quelque chose tel que ::" +"suite, alors il se peut que ça ressemble également à ça :" -#: ../Doc/faq/windows.rst:51 +#: ../Doc/faq/windows.rst:57 msgid "" "depending on how your computer has been set up and what else you have " "recently done with it. Once you have started such a window, you are well on " @@ -87,7 +92,7 @@ msgstr "" "fait avec. Une fois que vous avez ouvert cette fenêtre, vous êtes bien " "partis pour pouvoir lancer des programmes Python." -#: ../Doc/faq/windows.rst:55 +#: ../Doc/faq/windows.rst:61 msgid "" "You need to realize that your Python scripts have to be processed by another " "program called the Python *interpreter*. The interpreter reads your script, " @@ -100,40 +105,48 @@ msgstr "" "programme. Alors, comment faire pour donner votre code Python à " "l'interpréteur ?" -#: ../Doc/faq/windows.rst:60 +#: ../Doc/faq/windows.rst:66 msgid "" "First, you need to make sure that your command window recognises the word " "\"python\" as an instruction to start the interpreter. If you have opened a " "command window, you should try entering the command ``python`` and hitting " -"return.::" +"return:" msgstr "" "Tout d'abord, vous devez vous assurer que votre fenêtre d'invite de commande " "reconnaît le mot \"python\" comme une instruction pour démarrer " "l'interpréteur. Si vous avez ouvert une fenêtre de commande, entrez la " -"commande ``python``, puis appuyez sur la touche entrée.::" +"commande ``python``, puis appuyez sur la touche entrée :" -#: ../Doc/faq/windows.rst:67 -msgid "You should then see something like::" -msgstr "Vous devez vous trouver face à quelque chose comme ça ::" +#: ../Doc/faq/windows.rst:75 +msgid "You should then see something like:" +msgstr "Vous devez voir quelque chose comme ça :" -#: ../Doc/faq/windows.rst:73 +#: ../Doc/faq/windows.rst:83 msgid "" "You have started the interpreter in \"interactive mode\". That means you can " "enter Python statements or expressions interactively and have them executed " "or evaluated while you wait. This is one of Python's strongest features. " -"Check it by entering a few expressions of your choice and seeing the " -"results::" +"Check it by entering a few expressions of your choice and seeing the results:" msgstr "" +"Vous avez lancé l'interpréteur dans son \"mode interactif\". Cela signifie " +"que vous pouvez entrer des instructions ou des expressions Python de manière " +"interactive pour qu'elles soient exécutées. Il s'agit là d'une des plus " +"puissantes fonctionnalités de Python. Vous pouvez le vérifier en entrant " +"quelques commandes de votre choix et en regardant le résultat :" -#: ../Doc/faq/windows.rst:83 +#: ../Doc/faq/windows.rst:95 msgid "" "Many people use the interactive mode as a convenient yet highly programmable " "calculator. When you want to end your interactive Python session, hold the :" "kbd:`Ctrl` key down while you enter a :kbd:`Z`, then hit the \":kbd:`Enter`" "\" key to get back to your Windows command prompt." msgstr "" +"Beaucoup de personnes utilisent le mode interactif comme une calculatrice " +"programmable. Lorsque vous souhaitez sortir du mode interactif de Python, " +"maintenez la touche :kbd:`Ctrl` appuyée, puis appuyez sur :kbd:`Z`. Validez " +"avec \":kbd:`Entrée`\" pour retrouver votre ligne de commande Windows." -#: ../Doc/faq/windows.rst:88 +#: ../Doc/faq/windows.rst:100 msgid "" "You may also find that you have a Start-menu entry such as :menuselection:" "`Start --> Programs --> Python 3.3 --> Python (command line)` that results " @@ -142,39 +155,58 @@ msgid "" "single \"python\" command in the window, and closes it when you terminate " "the interpreter." msgstr "" +"Peut-être avez-vous remarqué une nouvelle entrée dans votre menu Démarrer, " +"comme : :menuselection:`Démarrer --> Programmes --> Python 3.3 --> Python " +"(ligne de commande)`, qui lance l’interpréteur dans une nouvelle fenêtre. " +"Dans ce cas, la fenêtre disparaîtra lorsque vous entrerez :kbd:`Ctrl-Z` ; la " +"fenêtre Python ouverte par Windows est fermée lorsque vous quittez " +"l'interpréteur." -#: ../Doc/faq/windows.rst:94 +#: ../Doc/faq/windows.rst:106 msgid "" "If the ``python`` command, instead of displaying the interpreter prompt " "``>>>``, gives you a message like::" msgstr "" +"Si, au lieu de vous afficher ``>>>`` la commande ``python`` vous affiche un " +"message semblable à celui-ci ::" -#: ../Doc/faq/windows.rst:102 +#: ../Doc/faq/windows.rst:None +msgid "|Adding Python to DOS Path|_" +msgstr "" + +#: ../Doc/faq/windows.rst:114 msgid "" "Python is not added to the DOS path by default. This screencast will walk " "you through the steps to add the correct entry to the `System Path`, " "allowing Python to be executed from the command-line by all users." msgstr "" +"Par défaut, Python n'est pas ajouté au PATH. Cette vidéo vous montrera les " +"étapes à suivre pour ajouter la bonne entrée au PATH, permettant ainsi à " +"tous les utilisateurs d'utiliser Python en ligne de commande." -#: ../Doc/faq/windows.rst:111 +#: ../Doc/faq/windows.rst:123 msgid "or::" msgstr "ou : ::" -#: ../Doc/faq/windows.rst:115 +#: ../Doc/faq/windows.rst:127 msgid "" "then you need to make sure that your computer knows where to find the Python " "interpreter. To do this you will have to modify a setting called PATH, " "which is a list of directories where Windows will look for programs." msgstr "" +"alors, vous devez vous assurer que votre ordinateur sait où trouver " +"l’interpréteur Python. Pour cela, vous devez modifier un paramètre, appelé " +"\"PATH\", qui est une liste des répertoires dans lesquels Windows cherche " +"les programmes." -#: ../Doc/faq/windows.rst:119 +#: ../Doc/faq/windows.rst:131 msgid "" "You should arrange for Python's installation directory to be added to the " "PATH of every command window as it starts. If you installed Python fairly " "recently then the command ::" msgstr "" -#: ../Doc/faq/windows.rst:125 +#: ../Doc/faq/windows.rst:137 msgid "" "will probably tell you where it is installed; the usual location is " "something like ``C:\\Python33``. Otherwise you will be reduced to a search " @@ -185,7 +217,7 @@ msgid "" "command ::" msgstr "" -#: ../Doc/faq/windows.rst:134 +#: ../Doc/faq/windows.rst:146 msgid "" "starts up the interpreter as above (and don't forget you'll need a \":kbd:" "`Ctrl-Z`\" and an \":kbd:`Enter`\" to get out of it). Once you have verified " @@ -194,17 +226,17 @@ msgid "" "in the installer as of CPython 3.3." msgstr "" -#: ../Doc/faq/windows.rst:140 +#: ../Doc/faq/windows.rst:152 msgid "" "More information about environment variables can be found on the :ref:`Using " "Python on Windows ` page." msgstr "" -#: ../Doc/faq/windows.rst:144 +#: ../Doc/faq/windows.rst:156 msgid "How do I make Python scripts executable?" -msgstr "" +msgstr "Comment rendre des scripts Python exécutables ?" -#: ../Doc/faq/windows.rst:146 +#: ../Doc/faq/windows.rst:158 msgid "" "On Windows, the standard Python installer already associates the .py " "extension with a file type (Python.File) and gives that file type an open " @@ -214,20 +246,31 @@ msgid "" "typing 'foo' with no extension you need to add .py to the PATHEXT " "environment variable." msgstr "" +"Sous Windows, l'installateur Python associe l'extension *.py* avec un type " +"de fichier (Python.File) et une commande qui lance l’interpréteur (``D:" +"\\Program Files\\Python\\python.exe \"%1\" %*``). Cela suffit pour pouvoir " +"exécuter les scripts Python depuis la ligne de commande en saisissant *foo." +"py*. Si vous souhaitez pouvoir exécuter les scripts en saisissant simplement " +"*foo* sans l’extension, vous devez ajouter *.py* au paramètre " +"d’environnement PATHEXT." -#: ../Doc/faq/windows.rst:154 +#: ../Doc/faq/windows.rst:166 msgid "Why does Python sometimes take so long to start?" -msgstr "" +msgstr "Pourquoi Python met-il du temps à démarrer ?" -#: ../Doc/faq/windows.rst:156 +#: ../Doc/faq/windows.rst:168 msgid "" "Usually Python starts very quickly on Windows, but occasionally there are " "bug reports that Python suddenly begins to take a long time to start up. " "This is made even more puzzling because Python will work fine on other " "Windows systems which appear to be configured identically." msgstr "" +"Normalement, sous Windows, Python se lance très rapidement, mais parfois des " +"rapports d'erreurs indiquent que Python commence soudain à prendre beaucoup " +"de temps pour démarrer. C'est d'autant plus intrigant que Python fonctionne " +"correctement avec d'autres Windows configurés de façon similaire." -#: ../Doc/faq/windows.rst:161 +#: ../Doc/faq/windows.rst:173 msgid "" "The problem may be caused by a misconfiguration of virus checking software " "on the problem machine. Some virus scanners have been known to introduce " @@ -237,12 +280,18 @@ msgid "" "configured identically. McAfee, when configured to scan all file system read " "activity, is a particular offender." msgstr "" +"Le problème peut venir d'un antivirus mal configuré. Certains antivirus sont " +"connus pour doubler le temps de démarrage lorsqu'ils sont configurés pour " +"surveiller toutes les lectures du système de fichiers. Essayez de regarder " +"si les antivirus des deux machines sont bien paramétrés à l'identique. " +"*McAfee* est particulièrement problématique lorsqu'il est paramétré pour " +"surveiller toutes les lectures du système de fichiers." -#: ../Doc/faq/windows.rst:171 +#: ../Doc/faq/windows.rst:183 msgid "How do I make an executable from a Python script?" -msgstr "Comment construire un exécutable depuis un script Python ?" +msgstr "Comment construire un exécutable depuis un script Python ?" -#: ../Doc/faq/windows.rst:173 +#: ../Doc/faq/windows.rst:185 msgid "" "See http://cx-freeze.sourceforge.net/ for a distutils extension that allows " "you to create console and GUI executables from Python code. `py2exe