summaryrefslogtreecommitdiff
path: root/docs/_locale/fr/LC_MESSAGES/tutorial_app.po
diff options
context:
space:
mode:
Diffstat (limited to 'docs/_locale/fr/LC_MESSAGES/tutorial_app.po')
-rw-r--r--docs/_locale/fr/LC_MESSAGES/tutorial_app.po901
1 files changed, 901 insertions, 0 deletions
diff --git a/docs/_locale/fr/LC_MESSAGES/tutorial_app.po b/docs/_locale/fr/LC_MESSAGES/tutorial_app.po
new file mode 100644
index 0000000..ac418c1
--- /dev/null
+++ b/docs/_locale/fr/LC_MESSAGES/tutorial_app.po
@@ -0,0 +1,901 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2009-2020, Marcel Hellkamp
+# This file is distributed under the same license as the Bottle package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: bottle\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-12-31 18:35+0100\n"
+"PO-Revision-Date: 2020-12-31 17:35+0000\n"
+"Last-Translator: defnull <marc@gsites.de>\n"
+"Language-Team: French (http://www.transifex.com/bottle/bottle/language/fr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: ../../tutorial_app.rst:19
+msgid "Tutorial: Todo-List Application"
+msgstr ""
+
+#: ../../tutorial_app.rst:23
+msgid ""
+"This tutorial is a work in progress and written by `noisefloor "
+"<http://github.com/noisefloor>`_."
+msgstr ""
+
+#: ../../tutorial_app.rst:26
+msgid ""
+"This tutorial should give a brief introduction to the Bottle_ WSGI "
+"Framework. The main goal is to be able, after reading through this tutorial,"
+" to create a project using Bottle. Within this document, not all abilities "
+"will be shown, but at least the main and important ones like routing, "
+"utilizing the Bottle template abilities to format output and handling GET / "
+"POST parameters."
+msgstr ""
+
+#: ../../tutorial_app.rst:28
+msgid ""
+"To understand the content here, it is not necessary to have a basic "
+"knowledge of WSGI, as Bottle tries to keep WSGI away from the user anyway. "
+"You should have a fair understanding of the Python_ programming language. "
+"Furthermore, the example used in the tutorial retrieves and stores data in a"
+" SQL database, so a basic idea about SQL helps, but is not a must to "
+"understand the concepts of Bottle. Right here, SQLite_ is used. The output "
+"of Bottle sent to the browser is formatted in some examples by the help of "
+"HTML. Thus, a basic idea about the common HTML tags does help as well."
+msgstr ""
+
+#: ../../tutorial_app.rst:30
+msgid ""
+"For the sake of introducing Bottle, the Python code \"in between\" is kept "
+"short, in order to keep the focus. Also all code within the tutorial is "
+"working fine, but you may not necessarily use it \"in the wild\", e.g. on a "
+"public web server. In order to do so, you may add e.g. more error handling, "
+"protect the database with a password, test and escape the input etc."
+msgstr ""
+
+#: ../../tutorial_app.rst:32
+msgid "Table of Contents"
+msgstr ""
+
+#: ../../tutorial_app.rst:35
+msgid "Goals"
+msgstr ""
+
+#: ../../tutorial_app.rst:37
+msgid ""
+"At the end of this tutorial, we will have a simple, web-based ToDo list. The"
+" list contains a text (with max 100 characters) and a status (0 for closed, "
+"1 for open) for each item. Through the web-based user interface, open items "
+"can be view and edited and new items can be added."
+msgstr ""
+
+#: ../../tutorial_app.rst:39
+msgid ""
+"During development, all pages will be available on ``localhost`` only, but "
+"later on it will be shown how to adapt the application for a \"real\" "
+"server, including how to use with Apache's mod_wsgi."
+msgstr ""
+
+#: ../../tutorial_app.rst:41
+msgid ""
+"Bottle will do the routing and format the output, with the help of "
+"templates. The items of the list will be stored inside a SQLite database. "
+"Reading and writing the database will be done by Python code."
+msgstr ""
+
+#: ../../tutorial_app.rst:43
+msgid ""
+"We will end up with an application with the following pages and "
+"functionality:"
+msgstr ""
+
+#: ../../tutorial_app.rst:45
+msgid "start page ``http://localhost:8080/todo``"
+msgstr ""
+
+#: ../../tutorial_app.rst:46
+msgid "adding new items to the list: ``http://localhost:8080/new``"
+msgstr ""
+
+#: ../../tutorial_app.rst:47
+msgid "page for editing items: ``http://localhost:8080/edit/<no:int>``"
+msgstr ""
+
+#: ../../tutorial_app.rst:48
+msgid "catching errors"
+msgstr ""
+
+#: ../../tutorial_app.rst:51
+msgid "Before We Start..."
+msgstr ""
+
+#: ../../tutorial_app.rst:55
+msgid "Install Bottle"
+msgstr ""
+
+#: ../../tutorial_app.rst:56
+msgid ""
+"Assuming that you have a fairly new installation of Python (version 2.5 or "
+"higher), you only need to install Bottle in addition to that. Bottle has no "
+"other dependencies than Python itself."
+msgstr ""
+
+#: ../../tutorial_app.rst:58
+msgid ""
+"You can either manually install Bottle or use Python's easy_install: "
+"``easy_install bottle``"
+msgstr ""
+
+#: ../../tutorial_app.rst:62
+msgid "Further Software Necessities"
+msgstr ""
+
+#: ../../tutorial_app.rst:63
+msgid ""
+"As we use SQLite3 as a database, make sure it is installed. On Linux "
+"systems, most distributions have SQLite3 installed by default. SQLite is "
+"available for Windows and MacOS X as well and the `sqlite3` module is part "
+"of the python standard library."
+msgstr ""
+
+#: ../../tutorial_app.rst:66
+msgid "Create An SQL Database"
+msgstr ""
+
+#: ../../tutorial_app.rst:67
+msgid ""
+"First, we need to create the database we use later on. To do so, save the "
+"following script in your project directory and run it with python. You can "
+"use the interactive interpreter too::"
+msgstr ""
+
+#: ../../tutorial_app.rst:78
+msgid ""
+"This generates a database-file `todo.db` with tables called ``todo`` and "
+"three columns ``id``, ``task``, and ``status``. ``id`` is a unique id for "
+"each row, which is used later on to reference the rows. The column ``task`` "
+"holds the text which describes the task, it can be max 100 characters long. "
+"Finally, the column ``status`` is used to mark a task as open (value 1) or "
+"closed (value 0)."
+msgstr ""
+
+#: ../../tutorial_app.rst:81
+msgid "Using Bottle for a Web-Based ToDo List"
+msgstr ""
+
+#: ../../tutorial_app.rst:83
+msgid ""
+"Now it is time to introduce Bottle in order to create a web-based "
+"application. But first, we need to look into a basic concept of Bottle: "
+"routes."
+msgstr ""
+
+#: ../../tutorial_app.rst:87
+msgid "Understanding routes"
+msgstr ""
+
+#: ../../tutorial_app.rst:88
+msgid ""
+"Basically, each page visible in the browser is dynamically generated when "
+"the page address is called. Thus, there is no static content. That is "
+"exactly what is called a \"route\" within Bottle: a certain address on the "
+"server. So, for example, when the page ``http://localhost:8080/todo`` is "
+"called from the browser, Bottle \"grabs\" the call and checks if there is "
+"any (Python) function defined for the route \"todo\". If so, Bottle will "
+"execute the corresponding Python code and return its result."
+msgstr ""
+
+#: ../../tutorial_app.rst:92
+msgid "First Step - Showing All Open Items"
+msgstr ""
+
+#: ../../tutorial_app.rst:93
+msgid ""
+"So, after understanding the concept of routes, let's create the first one. "
+"The goal is to see all open items from the ToDo list::"
+msgstr ""
+
+#: ../../tutorial_app.rst:108
+msgid ""
+"Save the code a ``todo.py``, preferably in the same directory as the file "
+"``todo.db``. Otherwise, you need to add the path to ``todo.db`` in the "
+"``sqlite3.connect()`` statement."
+msgstr ""
+
+#: ../../tutorial_app.rst:110
+msgid ""
+"Let's have a look what we just did: We imported the necessary module "
+"``sqlite3`` to access to SQLite database and from Bottle we imported "
+"``route`` and ``run``. The ``run()`` statement simply starts the web server "
+"included in Bottle. By default, the web server serves the pages on localhost"
+" and port 8080. Furthermore, we imported ``route``, which is the function "
+"responsible for Bottle's routing. As you can see, we defined one function, "
+"``todo_list()``, with a few lines of code reading from the database. The "
+"important point is the `decorator statement`_ ``@route('/todo')`` right "
+"before the ``def todo_list()`` statement. By doing this, we bind this "
+"function to the route ``/todo``, so every time the browsers calls "
+"``http://localhost:8080/todo``, Bottle returns the result of the function "
+"``todo_list()``. That is how routing within bottle works."
+msgstr ""
+
+#: ../../tutorial_app.rst:112
+msgid ""
+"Actually you can bind more than one route to a function. So the following "
+"code::"
+msgstr ""
+
+#: ../../tutorial_app.rst:119
+msgid ""
+"will work fine, too. What will not work is to bind one route to more than "
+"one function."
+msgstr ""
+
+#: ../../tutorial_app.rst:121
+msgid ""
+"What you will see in the browser is what is returned, thus the value given "
+"by the ``return`` statement. In this example, we need to convert ``result`` "
+"in to a string by ``str()``, as Bottle expects a string or a list of strings"
+" from the return statement. But here, the result of the database query is a "
+"list of tuples, which is the standard defined by the `Python DB API`_."
+msgstr ""
+
+#: ../../tutorial_app.rst:123
+msgid ""
+"Now, after understanding the little script above, it is time to execute it "
+"and watch the result yourself. Remember that on Linux- / Unix-based systems "
+"the file ``todo.py`` needs to be executable first. Then, just run ``python "
+"todo.py`` and call the page ``http://localhost:8080/todo`` in your browser. "
+"In case you made no mistake writing the script, the output should look like "
+"this::"
+msgstr ""
+
+#: ../../tutorial_app.rst:127
+msgid ""
+"If so - congratulations! You are now a successful user of Bottle. In case it"
+" did not work and you need to make some changes to the script, remember to "
+"stop Bottle serving the page, otherwise the revised version will not be "
+"loaded."
+msgstr ""
+
+#: ../../tutorial_app.rst:129
+msgid ""
+"Actually, the output is not really exciting nor nice to read. It is the raw "
+"result returned from the SQL query."
+msgstr ""
+
+#: ../../tutorial_app.rst:131
+msgid ""
+"So, in the next step we format the output in a nicer way. But before we do "
+"that, we make our life easier."
+msgstr ""
+
+#: ../../tutorial_app.rst:135
+msgid "Debugging and Auto-Reload"
+msgstr ""
+
+#: ../../tutorial_app.rst:136
+msgid ""
+"Maybe you already noticed that Bottle sends a short error message to the "
+"browser in case something within the script is wrong, e.g. the connection to"
+" the database is not working. For debugging purposes it is quite helpful to "
+"get more details. This can be easily achieved by adding the following "
+"statement to the script::"
+msgstr ""
+
+#: ../../tutorial_app.rst:144
+msgid ""
+"By enabling \"debug\", you will get a full stacktrace of the Python "
+"interpreter, which usually contains useful information for finding bugs. "
+"Furthermore, templates (see below) are not cached, thus changes to templates"
+" will take effect without stopping the server."
+msgstr ""
+
+#: ../../tutorial_app.rst:148
+msgid ""
+"That ``debug(True)`` is supposed to be used for development only, it should "
+"*not* be used in production environments."
+msgstr ""
+
+#: ../../tutorial_app.rst:152
+msgid ""
+"Another quite nice feature is auto-reloading, which is enabled by modifying "
+"the ``run()`` statement to"
+msgstr ""
+
+#: ../../tutorial_app.rst:158
+msgid ""
+"This will automatically detect changes to the script and reload the new "
+"version once it is called again, without the need to stop and start the "
+"server."
+msgstr ""
+
+#: ../../tutorial_app.rst:160
+msgid ""
+"Again, the feature is mainly supposed to be used while developing, not on "
+"production systems."
+msgstr ""
+
+#: ../../tutorial_app.rst:164
+msgid "Bottle Template To Format The Output"
+msgstr ""
+
+#: ../../tutorial_app.rst:165
+msgid ""
+"Now let's have a look at casting the output of the script into a proper "
+"format."
+msgstr ""
+
+#: ../../tutorial_app.rst:167
+msgid ""
+"Actually Bottle expects to receive a string or a list of strings from a "
+"function and returns them by the help of the built-in server to the browser."
+" Bottle does not bother about the content of the string itself, so it can be"
+" text formatted with HTML markup, too."
+msgstr ""
+
+#: ../../tutorial_app.rst:169
+msgid ""
+"Bottle brings its own easy-to-use template engine with it. Templates are "
+"stored as separate files having a ``.tpl`` extension. The template can be "
+"called then from within a function. Templates can contain any type of text "
+"(which will be most likely HTML-markup mixed with Python statements). "
+"Furthermore, templates can take arguments, e.g. the result set of a database"
+" query, which will be then formatted nicely within the template."
+msgstr ""
+
+#: ../../tutorial_app.rst:171
+msgid ""
+"Right here, we are going to cast the result of our query showing the open "
+"ToDo items into a simple table with two columns: the first column will "
+"contain the ID of the item, the second column the text. The result set is, "
+"as seen above, a list of tuples, each tuple contains one set of results."
+msgstr ""
+
+#: ../../tutorial_app.rst:173
+msgid "To include the template in our example, just add the following lines::"
+msgstr ""
+
+#: ../../tutorial_app.rst:183
+msgid ""
+"So we do here two things: first, we import ``template`` from Bottle in order"
+" to be able to use templates. Second, we assign the output of the template "
+"``make_table`` to the variable ``output``, which is then returned. In "
+"addition to calling the template, we assign ``result``, which we received "
+"from the database query, to the variable ``rows``, which is later on used "
+"within the template. If necessary, you can assign more than one variable / "
+"value to a template."
+msgstr ""
+
+#: ../../tutorial_app.rst:185
+msgid ""
+"Templates always return a list of strings, thus there is no need to convert "
+"anything. We can save one line of code by writing ``return "
+"template('make_table', rows=result)``, which gives exactly the same result "
+"as above."
+msgstr ""
+
+#: ../../tutorial_app.rst:187
+msgid ""
+"Now it is time to write the corresponding template, which looks like this::"
+msgstr ""
+
+#: ../../tutorial_app.rst:201
+msgid ""
+"Save the code as ``make_table.tpl`` in the same directory where ``todo.py`` "
+"is stored."
+msgstr ""
+
+#: ../../tutorial_app.rst:203
+msgid ""
+"Let's have a look at the code: every line starting with % is interpreted as "
+"Python code. Because it is effectively Python, only valid Python statements "
+"are allowed. The template will raise exceptions, just as any other Python "
+"code would. The other lines are plain HTML markup."
+msgstr ""
+
+#: ../../tutorial_app.rst:205
+msgid ""
+"As you can see, we use Python's ``for`` statement two times, in order to go "
+"through ``rows``. As seen above, ``rows`` is a variable which holds the "
+"result of the database query, so it is a list of tuples. The first ``for`` "
+"statement accesses the tuples within the list, the second one the items "
+"within the tuple, which are put each into a cell of the table. It is "
+"important that you close all ``for``, ``if``, ``while`` etc. statements with"
+" ``%end``, otherwise the output may not be what you expect."
+msgstr ""
+
+#: ../../tutorial_app.rst:207
+msgid ""
+"If you need to access a variable within a non-Python code line inside the "
+"template, you need to put it into double curly braces. This tells the "
+"template to insert the actual value of the variable right in place."
+msgstr ""
+
+#: ../../tutorial_app.rst:209
+msgid ""
+"Run the script again and look at the output. Still not really nice, but at "
+"least more readable than the list of tuples. You can spice-up the very "
+"simple HTML markup above, e.g. by using in-line styles to get a better "
+"looking output."
+msgstr ""
+
+#: ../../tutorial_app.rst:213
+msgid "Using GET and POST Values"
+msgstr ""
+
+#: ../../tutorial_app.rst:214
+msgid ""
+"As we can review all open items properly, we move to the next step, which is"
+" adding new items to the ToDo list. The new item should be received from a "
+"regular HTML-based form, which sends its data by the GET method."
+msgstr ""
+
+#: ../../tutorial_app.rst:216
+msgid ""
+"To do so, we first add a new route to our script and tell the route that it "
+"should get GET data::"
+msgstr ""
+
+#: ../../tutorial_app.rst:239
+msgid ""
+"To access GET (or POST) data, we need to import ``request`` from Bottle. To "
+"assign the actual data to a variable, we use the statement "
+"``request.GET.task.strip()`` statement, where ``task`` is the name of the "
+"GET data we want to access. That's all. If your GET data has more than one "
+"variable, multiple ``request.GET.get()`` statements can be used and assigned"
+" to other variables."
+msgstr ""
+
+#: ../../tutorial_app.rst:241
+msgid ""
+"The rest of this piece of code is just processing of the gained data: "
+"writing to the database, retrieve the corresponding id from the database and"
+" generate the output."
+msgstr ""
+
+#: ../../tutorial_app.rst:243
+msgid ""
+"But where do we get the GET data from? Well, we can use a static HTML page "
+"holding the form. Or, what we do right now, is to use a template which is "
+"output when the route ``/new`` is called without GET data."
+msgstr ""
+
+#: ../../tutorial_app.rst:245
+msgid "The code needs to be extended to::"
+msgstr ""
+
+#: ../../tutorial_app.rst:268
+msgid "``new_task.tpl`` looks like this::"
+msgstr ""
+
+#: ../../tutorial_app.rst:276
+msgid "That's all. As you can see, the template is plain HTML this time."
+msgstr ""
+
+#: ../../tutorial_app.rst:278
+msgid "Now we are able to extend our to do list."
+msgstr ""
+
+#: ../../tutorial_app.rst:280
+msgid ""
+"By the way, if you prefer to use POST data: this works exactly the same way,"
+" just use ``request.POST.get()`` instead."
+msgstr ""
+
+#: ../../tutorial_app.rst:284
+msgid "Editing Existing Items"
+msgstr ""
+
+#: ../../tutorial_app.rst:285
+msgid "The last point to do is to enable editing of existing items."
+msgstr ""
+
+#: ../../tutorial_app.rst:287
+msgid ""
+"By using only the routes we know so far it is possible, but may be quite "
+"tricky. But Bottle knows something called \"dynamic routes\", which makes "
+"this task quite easy."
+msgstr ""
+
+#: ../../tutorial_app.rst:289
+msgid "The basic statement for a dynamic route looks like this::"
+msgstr ""
+
+#: ../../tutorial_app.rst:293
+msgid ""
+"This tells Bottle to accept for ``<something>`` any string up to the next "
+"slash. Furthermore, the value of ``something`` will be passed to the "
+"function assigned to that route, so the data can be processed within the "
+"function, like this::"
+msgstr ""
+
+#: ../../tutorial_app.rst:321
+msgid ""
+"It is basically pretty much the same what we already did above when adding "
+"new items, like using ``GET`` data etc. The main addition here is using the "
+"dynamic route ``<no:int>``, which here passes the number to the "
+"corresponding function. As you can see, ``no`` is integer ID and used within"
+" the function to access the right row of data within the database."
+msgstr ""
+
+#: ../../tutorial_app.rst:324
+msgid ""
+"The template ``edit_task.tpl`` called within the function looks like this::"
+msgstr ""
+
+#: ../../tutorial_app.rst:339
+msgid ""
+"Again, this template is a mix of Python statements and HTML, as already "
+"explained above."
+msgstr ""
+
+#: ../../tutorial_app.rst:341
+msgid ""
+"A last word on dynamic routes: you can even use a regular expression for a "
+"dynamic route, as demonstrated later."
+msgstr ""
+
+#: ../../tutorial_app.rst:345
+msgid "Validating Dynamic Routes"
+msgstr ""
+
+#: ../../tutorial_app.rst:346
+msgid ""
+"Using dynamic routes is fine, but for many cases it makes sense to validate "
+"the dynamic part of the route. For example, we expect an integer number in "
+"our route for editing above. But if a float, characters or so are received, "
+"the Python interpreter throws an exception, which is not what we want."
+msgstr ""
+
+#: ../../tutorial_app.rst:348
+msgid ""
+"For those cases, Bottle offers the ``<name:int>`` wildcard filter, which "
+"matches (signed) digits and converts the value to integer. In order to apply"
+" the wildcard filter, extend the code as follows::"
+msgstr ""
+
+#: ../../tutorial_app.rst:356
+msgid ""
+"Save the code and call the page again using incorrect value for "
+"``<no:int>``, e.g. a float. You will receive not an exception, but a \"404 "
+"Not Found\" error."
+msgstr ""
+
+#: ../../tutorial_app.rst:360
+msgid "Dynamic Routes Using Regular Expressions"
+msgstr ""
+
+#: ../../tutorial_app.rst:361
+msgid ""
+"Bottle can also handle dynamic routes, where the \"dynamic part\" of the "
+"route can be a regular expression."
+msgstr ""
+
+#: ../../tutorial_app.rst:363
+msgid ""
+"So, just to demonstrate that, let's assume that all single items in our ToDo"
+" list should be accessible by their plain number, by a term like e.g. "
+"\"item1\". For obvious reasons, you do not want to create a route for every "
+"item. Furthermore, the simple dynamic routes do not work either, as part of "
+"the route, the term \"item\" is static."
+msgstr ""
+
+#: ../../tutorial_app.rst:365
+msgid "As said above, the solution is a regular expression::"
+msgstr ""
+
+#: ../../tutorial_app.rst:380
+msgid ""
+"The line ``@route(/item<item:re:[0-9]+>)`` starts like a normal route, but "
+"the third part of the wildcard is interpreted as a regular expression, which"
+" is the dynamic part of the route. So in this case, we want to match any "
+"digit between 0 and 9. The following function \"show_item\" just checks "
+"whether the given item is present in the database or not. In case it is "
+"present, the corresponding text of the task is returned. As you can see, "
+"only the regular expression part of the route is passed forward. "
+"Furthermore, it is always forwarded as a string, even if it is a plain "
+"integer number, like in this case."
+msgstr ""
+
+#: ../../tutorial_app.rst:384
+msgid "Returning Static Files"
+msgstr ""
+
+#: ../../tutorial_app.rst:385
+msgid ""
+"Sometimes it may become necessary to associate a route not to a Python "
+"function, but just return a static file. So if you have for example a help "
+"page for your application, you may want to return this page as plain HTML. "
+"This works as follows::"
+msgstr ""
+
+#: ../../tutorial_app.rst:393
+msgid ""
+"At first, we need to import the ``static_file`` function from Bottle. As you"
+" can see, the ``return static_file`` statement replaces the ``return`` "
+"statement. It takes at least two arguments: the name of the file to be "
+"returned and the path to the file. Even if the file is in the same directory"
+" as your application, the path needs to be stated. But in this case, you can"
+" use ``'.'`` as a path, too. Bottle guesses the MIME-type of the file "
+"automatically, but in case you like to state it explicitly, add a third "
+"argument to ``static_file``, which would be here ``mimetype='text/html'``. "
+"``static_file`` works with any type of route, including the dynamic ones."
+msgstr ""
+
+#: ../../tutorial_app.rst:397
+msgid "Returning JSON Data"
+msgstr ""
+
+#: ../../tutorial_app.rst:398
+msgid ""
+"There may be cases where you do not want your application to generate the "
+"output directly, but return data to be processed further on, e.g. by "
+"JavaScript. For those cases, Bottle offers the possibility to return JSON "
+"objects, which is sort of standard for exchanging data between web "
+"applications. Furthermore, JSON can be processed by many programming "
+"languages, including Python"
+msgstr ""
+
+#: ../../tutorial_app.rst:400
+msgid ""
+"So, let's assume we want to return the data generated in the regular "
+"expression route example as a JSON object. The code looks like this::"
+msgstr ""
+
+#: ../../tutorial_app.rst:415
+msgid ""
+"As you can, that is fairly simple: just return a regular Python dictionary "
+"and Bottle will convert it automatically into a JSON object prior to "
+"sending. So if you e.g. call \"http://localhost/json1\" Bottle should in "
+"this case return the JSON object ``{\"task\": [\"Read A-byte-of-python to "
+"get a good introduction into Python\"]}``."
+msgstr ""
+
+#: ../../tutorial_app.rst:420
+msgid "Catching Errors"
+msgstr ""
+
+#: ../../tutorial_app.rst:421
+msgid ""
+"The next step may is to catch the error with Bottle itself, to keep away any"
+" type of error message from the user of your application. To do that, Bottle"
+" has an \"error-route\", which can be a assigned to a HTML-error."
+msgstr ""
+
+#: ../../tutorial_app.rst:423
+msgid "In our case, we want to catch a 403 error. The code is as follows::"
+msgstr ""
+
+#: ../../tutorial_app.rst:431
+msgid ""
+"So, at first we need to import ``error`` from Bottle and define a route by "
+"``error(403)``, which catches all \"403 forbidden\" errors. The function "
+"\"mistake\" is assigned to that. Please note that ``error()`` always passes "
+"the error-code to the function - even if you do not need it. Thus, the "
+"function always needs to accept one argument, otherwise it will not work."
+msgstr ""
+
+#: ../../tutorial_app.rst:433
+msgid ""
+"Again, you can assign more than one error-route to a function, or catch "
+"various errors with one function each. So this code::"
+msgstr ""
+
+#: ../../tutorial_app.rst:440
+msgid "works fine, the following one as well::"
+msgstr ""
+
+#: ../../tutorial_app.rst:452
+msgid "Summary"
+msgstr ""
+
+#: ../../tutorial_app.rst:453
+msgid ""
+"After going through all the sections above, you should have a brief "
+"understanding how the Bottle WSGI framework works. Furthermore you have all "
+"the knowledge necessary to use Bottle for your applications."
+msgstr ""
+
+#: ../../tutorial_app.rst:455
+msgid ""
+"The following chapter give a short introduction how to adapt Bottle for "
+"larger projects. Furthermore, we will show how to operate Bottle with web "
+"servers which perform better on a higher load / more web traffic than the "
+"one we used so far."
+msgstr ""
+
+#: ../../tutorial_app.rst:458
+msgid "Server Setup"
+msgstr ""
+
+#: ../../tutorial_app.rst:460
+msgid ""
+"So far, we used the standard server used by Bottle, which is the `WSGI "
+"reference Server`_ shipped along with Python. Although this server is "
+"perfectly suitable for development purposes, it is not really suitable for "
+"larger applications. But before we have a look at the alternatives, let's "
+"have a look how to tweak the settings of the standard server first."
+msgstr ""
+
+#: ../../tutorial_app.rst:464
+msgid "Running Bottle on a different port and IP"
+msgstr ""
+
+#: ../../tutorial_app.rst:465
+msgid ""
+"As standard, Bottle serves the pages on the IP address 127.0.0.1, also known"
+" as ``localhost``, and on port ``8080``. To modify the setting is pretty "
+"simple, as additional parameters can be passed to Bottle's ``run()`` "
+"function to change the port and the address."
+msgstr ""
+
+#: ../../tutorial_app.rst:467
+msgid ""
+"To change the port, just add ``port=portnumber`` to the run command. So, for"
+" example::"
+msgstr ""
+
+#: ../../tutorial_app.rst:471
+msgid "would make Bottle listen to port 80."
+msgstr ""
+
+#: ../../tutorial_app.rst:473
+msgid "To change the IP address where Bottle is listening::"
+msgstr ""
+
+#: ../../tutorial_app.rst:477
+msgid "If needed, both parameters can be combined, like::"
+msgstr ""
+
+#: ../../tutorial_app.rst:481
+msgid ""
+"The ``port`` and ``host`` parameter can also be applied when Bottle is "
+"running with a different server, as shown in the following section."
+msgstr ""
+
+#: ../../tutorial_app.rst:485
+msgid "Running Bottle with a different server"
+msgstr ""
+
+#: ../../tutorial_app.rst:486
+msgid ""
+"As said above, the standard server is perfectly suitable for development, "
+"personal use or a small group of people only using your application based on"
+" Bottle. For larger tasks, the standard server may become a bottleneck, as "
+"it is single-threaded, thus it can only serve one request at a time."
+msgstr ""
+
+#: ../../tutorial_app.rst:488
+msgid ""
+"But Bottle has already various adapters to multi-threaded servers on board, "
+"which perform better on higher load. Bottle supports Cherrypy_, Flup_ and "
+"Paste_."
+msgstr ""
+
+#: ../../tutorial_app.rst:490
+msgid ""
+"If you want to run for example Bottle with the Paste server, use the "
+"following code::"
+msgstr ""
+
+#: ../../tutorial_app.rst:496
+msgid ""
+"This works exactly the same way with ``FlupServer``, ``CherryPyServer`` and "
+"``FapwsServer``."
+msgstr ""
+
+#: ../../tutorial_app.rst:500
+msgid "Running Bottle on Apache with mod_wsgi"
+msgstr ""
+
+#: ../../tutorial_app.rst:501
+msgid ""
+"Maybe you already have an Apache_ or you want to run a Bottle-based "
+"application large scale - then it is time to think about Apache with "
+"mod_wsgi_."
+msgstr ""
+
+#: ../../tutorial_app.rst:503
+msgid ""
+"We assume that your Apache server is up and running and mod_wsgi is working "
+"fine as well. On a lot of Linux distributions, mod_wsgi can be easily "
+"installed via whatever package management system is in use."
+msgstr ""
+
+#: ../../tutorial_app.rst:505
+msgid ""
+"Bottle brings an adapter for mod_wsgi with it, so serving your application "
+"is an easy task."
+msgstr ""
+
+#: ../../tutorial_app.rst:507
+msgid ""
+"In the following example, we assume that you want to make your application "
+"\"ToDo list\" accessible through ``http://www.mypage.com/todo`` and your "
+"code, templates and SQLite database are stored in the path "
+"``/var/www/todo``."
+msgstr ""
+
+#: ../../tutorial_app.rst:509
+msgid ""
+"When you run your application via mod_wsgi, it is imperative to remove the "
+"``run()`` statement from your code, otherwise it won't work here."
+msgstr ""
+
+#: ../../tutorial_app.rst:511
+msgid ""
+"After that, create a file called ``adapter.wsgi`` with the following "
+"content::"
+msgstr ""
+
+#: ../../tutorial_app.rst:522
+msgid ""
+"and save it in the same path, ``/var/www/todo``. Actually the name of the "
+"file can be anything, as long as the extension is ``.wsgi``. The name is "
+"only used to reference the file from your virtual host."
+msgstr ""
+
+#: ../../tutorial_app.rst:524
+msgid ""
+"Finally, we need to add a virtual host to the Apache configuration, which "
+"looks like this::"
+msgstr ""
+
+#: ../../tutorial_app.rst:540
+msgid ""
+"After restarting the server, your ToDo list should be accessible at "
+"``http://www.mypage.com/todo``"
+msgstr ""
+
+#: ../../tutorial_app.rst:543
+msgid "Final Words"
+msgstr ""
+
+#: ../../tutorial_app.rst:545
+msgid ""
+"Now we are at the end of this introduction and tutorial to Bottle. We "
+"learned about the basic concepts of Bottle and wrote a first application "
+"using the Bottle framework. In addition to that, we saw how to adapt Bottle "
+"for large tasks and serve Bottle through an Apache web server with mod_wsgi."
+msgstr ""
+
+#: ../../tutorial_app.rst:547
+msgid ""
+"As said in the introduction, this tutorial is not showing all shades and "
+"possibilities of Bottle. What we skipped here is e.g. receiving file objects"
+" and streams and how to handle authentication data. Furthermore, we did not "
+"show how templates can be called from within another template. For an "
+"introduction into those points, please refer to the full `Bottle "
+"documentation`_ ."
+msgstr ""
+
+#: ../../tutorial_app.rst:550
+msgid "Complete Example Listing"
+msgstr ""
+
+#: ../../tutorial_app.rst:552
+msgid ""
+"As the ToDo list example was developed piece by piece, here is the complete "
+"listing:"
+msgstr ""
+
+#: ../../tutorial_app.rst:554
+msgid "Main code for the application ``todo.py``::"
+msgstr ""
+
+#: ../../tutorial_app.rst:675
+msgid "Template ``make_table.tpl``::"
+msgstr ""
+
+#: ../../tutorial_app.rst:689
+msgid "Template ``edit_task.tpl``::"
+msgstr ""
+
+#: ../../tutorial_app.rst:704
+msgid "Template ``new_task.tpl``::"
+msgstr ""