aboutsummaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
authorLibravatarAgustin Henze <tin@sluc.org.ar>2013-05-30 17:41:06 -0300
committerLibravatarAgustin Henze <tin@sluc.org.ar>2013-05-30 17:41:06 -0300
commit0c4dfdec5b55b6064dccc38bbfb0a7c0699c895a (patch)
treea6707225ccc559f7edf50ddd3fdc7fc85145c921 /docs
parent8b14a1e5b2ca574fdd4fd2377567ec98a110d4b6 (diff)
Imported Upstream version 5.4.4
Diffstat (limited to 'docs')
-rw-r--r--docs/creating-a-theme.txt16
-rw-r--r--docs/extending.txt4
-rw-r--r--docs/internals.txt131
-rw-r--r--docs/manual.txt221
-rw-r--r--docs/theming.txt55
5 files changed, 315 insertions, 112 deletions
diff --git a/docs/creating-a-theme.txt b/docs/creating-a-theme.txt
index 21bf796..11428bd 100644
--- a/docs/creating-a-theme.txt
+++ b/docs/creating-a-theme.txt
@@ -15,7 +15,7 @@ Starting The Theme
First, we create a testing site, and copy the orphan theme from nikola's sources into the right place::
- $ nikola init monospace-site --demo
+ $ nikola init --demo monospace-site
A new site with some sample data has been created at monospace-site.
See README.txt in that folder for more information.
@@ -180,7 +180,7 @@ the posts themselves is different, and that was not described in ``base.tmpl`` a
there is a placeholder called content: ``<%block name="content"></%block>``
That's because ``base.tmpl`` defines the *base* layout. The layout of more specific pages, like "the page that shows
-a lis of posts" is defined in the other templates. Specifically, this is defined in ``index.tmpl``:
+a list of posts" is defined in the other templates. Specifically, this is defined in ``index.tmpl``:
.. code-block:: mako
@@ -211,12 +211,13 @@ box, add links for the posts tags, move the date there, etc.
## -*- coding: utf-8 -*-
<%namespace name="helper" file="index_helper.tmpl"/>
+ <%namespace name="disqus" file="disqus_helper.tmpl"/>
<%inherit file="base.tmpl"/>
<%block name="content">
% for post in posts:
<div class="postbox">
<h1><a href="${post.permalink(lang)}">${post.title(lang)}</a></h1>
- <div class="meta" style="background-color: rgb(234, 234, 234); ">
+ <div class="meta" style="background-color: rgb(234, 234, 234); ">
<span class="authordate">
${messages[lang]["Posted"]}: ${post.date.strftime(date_format)}
</span>
@@ -230,10 +231,12 @@ box, add links for the posts tags, move the date there, etc.
</span>
</div>
${post.text(lang, index_teasers)}
- ${helper.html_disqus_link(post)}
+ ${disqus.html_disqus_link(post.permalink()+"#disqus_thread", post.base_path)}
</div>
% endfor
${helper.html_pager()}
+ ${disqus.html_disqus_script()}
+ </%block>
.. figure:: http://ralsina.com.ar/galleries/random/monospace-4.png
:height: 400px
@@ -246,11 +249,12 @@ Then if we click on the post title, we will see some broken details in the metad
## -*- coding: utf-8 -*-
<%namespace name="helper" file="post_helper.tmpl"/>
+ <%namespace name="disqus" file="disqus_helper.tmpl"/>
<%inherit file="base.tmpl"/>
<%block name="content">
<div class="post">
${helper.html_title()}
- <div class="meta" style="background-color: rgb(234, 234, 234); ">
+ <div class="meta" style="background-color: rgb(234, 234, 234); ">
<span class="authordate">
${messages[lang]["Posted"]}: ${post.date.strftime(date_format)} [<a href="${post.pagenames[lang]+'.txt'}">${messages[lang]["Source"]}</a>]
</span>
@@ -269,7 +273,7 @@ Then if we click on the post title, we will see some broken details in the metad
</div>
${post.text(lang)}
${helper.html_pager(post)}
- ${helper.html_disqus(post)}
+ ${disqus.html_disqus(post.permalink(absolute=True), post.title(lang), post.base_path)}
</div>
</%block>
diff --git a/docs/extending.txt b/docs/extending.txt
index 84a382a..750ec98 100644
--- a/docs/extending.txt
+++ b/docs/extending.txt
@@ -52,7 +52,7 @@ Each and every one of those is a plugin. Let's look at a typical example:
First, the ``command_serve.plugin`` file:
-.. code-block:: init
+.. code-block:: ini
[Core]
Name = serve
@@ -210,7 +210,7 @@ probably want to do a Task plugin, which will make it be part of the
``nikola build`` command. There are the currently available tasks, all
provided by plugins::
- $ nikola build list
+ $ nikola list
build_bundles
copy_assets
diff --git a/docs/internals.txt b/docs/internals.txt
new file mode 100644
index 0000000..7a38f27
--- /dev/null
+++ b/docs/internals.txt
@@ -0,0 +1,131 @@
+Nikola Internals
+================
+
+When trying to guide someone into adding a feature in Nikola, it hit me that
+while the way it's structured makes sense **to me** it is far from obvious.
+
+So, this is a short document explaining what each piece of Nikola does and
+how it all fits together.
+
+Nikola is a Pile of Plugins
+ Most of Nikola is implemented as plugins using `Yapsy <http://yapsy.sourceforge.net/>`_.
+ You can ignore that they are plugins and just think of them as regular python
+ modules and packages with a funny little ``.plugin`` file next to them.
+
+ So, 90% of the time, what you want to do is either write a new plugin or extend
+ an existing one.
+
+ There are several kinds of plugins, all implementing interfaces defined in
+ ``nikola/plugin_categories.py``.
+
+ If your plugin has a dependency, please make sure it doesn't make Nikola
+ throw an exception when the dependency is missing. Try to fail gracefully
+ with an informative message.
+
+Commands are plugins
+ When you use ``nikola foo`` you are using the plugin ``command_foo``. Those are
+ used to extend Nikola's command line. Their interface is defined in the ``Command``
+ class. They take options and arguments and do whatever you want, so go wild.
+
+The ``build`` command is special
+ The ``build`` command triggers a whole lot of things, and is the core of Nikola
+ because it's the one that you use to build sites. So it deserves its own section.
+
+The Build Command
+-----------------
+
+Nikola's goal is similar, deep at heart, to a Makefile. Take sources, compile them
+into something, in this case a website. Instead of a Makefile, Nikola uses
+`doit <http://pydoit.com>`_
+
+Doit has the concept of "tasks". The 1 minute summary of tasks is that they have:
+
+actions
+ What the task **does**. For example, convert a markdown document into HTML.
+
+dependencies
+ If this file changes, then we need to redo the actions. If this confguration
+ option changes, redo it, etc.
+
+targets
+ Files that the action generates. No two actions can have the same targets.
+
+basename:name
+ Each task is identified by either a name or a basename:name pair. Nikola
+
+.. sidebar:: More about tasks
+
+ If you ever want to do your own tasks, you really should read the doit
+ `documentation on tasks <http://pydoit.org/tasks.html>`_
+
+So, what Nikola does, when you use the build command, is to read the
+configuration ``conf.py`` from the current folder, instantiate
+the ``Nikola`` class, and have it generate a whole list of tasks for doit
+to process. Then doit will decide which tasks need doing, and do them, in
+the right order.
+
+The place where the tasks are generated is in ``Nikola.gen_tasks``, which collects tasks
+from all the plugins inheriting ``BaseTask``, massages them a bit, then passes them
+to doit.
+
+So, if you want things to happen on ``build`` you want to create a Task plugin, or extend
+one of the existing ones.
+
+.. sidebar:: Tests
+
+ While Nikola is not a hardcore TDD project, we like tests. So, please add them if you can.
+ You can do doctests, you can do unit tests, you can do integration tests. There is support
+ for all of them.
+
+Post and Stories
+----------------
+
+Nikola has a concept of posts and stories. Both are more or less the same thing, except
+posts are added into RSS feeds and stories are not. All of them are in a list called
+"the timeline" formed by objects of class ``Post``
+
+When you are creating a task that needs the list of posts and/or stories (for example,
+the RSS creation plugin), your plugin should call ``self.site.scan_posts()`` to ensure
+the timeline is created and available in ``self.site.timeline``. You should not modify
+the timeline, because it will cause consistency issues.
+
+.. sidebar:: scan_posts
+
+ The scan_posts function is what reads your site and creates the timeline.
+
+ I am considering moving scan_posts off the core and into its own plugin
+ so it can be replaced (for example, by a version that reads a database
+ instead of scanning a folder tree).
+
+Your plugin can use the timeline to generate "stuff" (technical term). For example,
+Nikola comes with plugins that use the timeline to create a website (surprised?).
+
+The workflow included with nikola is as follows:
+
+#. The post is assigned a compiler based on its extension and the ``post_compilers`` option.
+#. The compiler is applied to the post data and a "HTML fragment" is produced. That
+ fragment is stored in a cache (the ``render_posts`` plugin).
+#. The configured theme has templates (and a template engine), which are applied to the post's
+ HTML fragment and metadata (the ``render_pages`` plugin).
+#. The original sources for the post are copied to some accessible place (the ``render_sources`` plugin)
+#. If the post is tagged, some pages and RSS feeds for each tag are updated (the ``render_tags`` plugin)
+#. If the post is new, it's included in the blog's RSS feed (the ``render_rss`` plugin)
+#. The post is added in the right place in the index pages for the blog (the ``task_indexes`` plugin)
+
+You can add whatever you want to that list: just create a plugin for it.
+
+You can also expand Nikola's capabilities at several points:
+
+compilers
+ Nikola supports a variety of markups. If you want to add another one, you need to create
+ a ``Compiler`` plugin.
+
+templates
+ Nikola's themes can use Jinja2 or Mako templates. If you prefer another template system,
+ you have to create a ``TemplateSystem`` plugin.
+
+themes
+ To change how the generated site looks, you can create custom themes.
+
+And of course, you can also replace or extend each of the existing plugins.
+
diff --git a/docs/manual.txt b/docs/manual.txt
index b2290c2..4833eae 100644
--- a/docs/manual.txt
+++ b/docs/manual.txt
@@ -1,8 +1,7 @@
The Nikola Handbook
===================
-:Version: 5.4.2
-:Author: Roberto Alsina <ralsina@netmanagers.com.ar>
+:Version: 5.4.4
.. class:: alert alert-info pull-right
@@ -17,7 +16,7 @@ After you have Nikola installed:
Create a empty site:
``nikola init mysite``
-You can create a site with demo files in it with ``nikola init mysite --demo``
+You can create a site with demo files in it with ``nikola init --demo mysite``
The rest of these commands have to be executed inside the new ``mysite`` folder.
@@ -84,7 +83,7 @@ Getting Help
------------
* Feel free to contact me at ralsina@netmanagers.com.ar for questions about Nikola.
-* You can file bugs at `the issue tracker <http://code.google.com/p/nikola-generator/issues/list>`__
+* You can file bugs at `the issue tracker <https://github.com/ralsina/nikola-site/issues>`__
* You can discuss Nikola at the `nikola-discuss google group <http://groups.google.com/group/nikola-discuss>`_
* You can subscribe to `the Nikola Blog <http://nikola.ralsina.com.ar/blog>`_
* You can follow `Nikola on Twitter <https://twitter.com/#!/nikolagenerator>`_
@@ -197,10 +196,10 @@ Longer version:
#. Get `Nikola <http://nikola.ralsina.com.ar/>`_
#. Install dependencies. To do that, either:
- #. ``pip install -r requirements.txt`` or...
+ #. ``pip install -r requirements.txt`` and ``pip install .`` or...
#. Install your distribution's packages for all the things
mentioned below, if they exist, or...
- #. Get all of these manually (but why?, use requirements.txt):
+ #. Get all of these manually (but why?, use pip):
#. Get python, if you don't have it.
#. Get `doit <http://pydoit.org>`_
@@ -276,9 +275,9 @@ all the pages again, unless you changed something that the page requires. So, if
the text of a post, or its title, that post page, and all index pages where it is mentioned,
will be recreated. If you change the post page template, then all the post pages will be rebuilt.
-Nikola is mostly a series of doit *tasks*, and you can see them by doing ``nikola build list``::
+Nikola is mostly a series of doit *tasks*, and you can see them by doing ``nikola list``::
- $ nikola build list
+ $ nikola list
Scanning posts . . done!
build_bundles
copy_assets
@@ -398,6 +397,24 @@ source for the content, and ``description`` is mostly useful for SEO.
You can add your own metadata fields in the same manner, if you use a theme that
supports them (for example: ``.. author: John Doe``)
+.. sidebar:: Other Metadata Fields
+
+ Nikola will also use other metadata fields:
+
+ nocomments
+ Set to "True" to disable comments. Example::
+
+ .. nocomments: True
+
+ template
+ Will change the template used to render this page/post specific page. Example::
+
+ .. template: story.tmpl
+
+ password
+ The post will be encrypted and invisible until the reader enters the password.
+ Also, the post's sourcecode will not be available.
+
.. note:: The Two-File Format
@@ -410,11 +427,11 @@ supports them (for example: ``.. author: John Doe``)
2012/09/15 19:52:05
If you are writing a multilingual site, you can also create a per-language
-post file (for example: ``how-to-make-money.txt.es``). This one can have two
-lines of metadata:
+post file (for example: ``how-to-make-money.txt.es``). This one can replace
+metadata of the default language, for example:
-1) The translated title for the post or page
-2) A translated version of the pagename
+* The translated title for the post or page
+* A translated version of the pagename
You can edit these files with your favourite text editor, and once you are happy
with the contents, generate the pages as explained in `Getting Started`_
@@ -470,10 +487,10 @@ one in the list if all of them have it set to False.
The ``new_post`` command supports some options::
- $ nikola help new_post
+ $ nikola help new_post
Purpose: Create a new blog post or site page.
Usage: nikola new_post [options] [path]
-
+
Options:
-p, --page Create a page instead of a blog post.
-t ARG, --title=ARG Title for the page/post.
@@ -520,6 +537,12 @@ If you add a "draft" tag to a post, then it will not be shown in indexes and fee
It *will* be compiled, and if you deploy it it *will* be made available, so use
with care.
+Retired Posts
+~~~~~~~~~~~~~
+
+If you add a "retired" tag to a post, then it will not be shown in indexes and feeds.
+It *will* be compiled, and if you deploy it it *will* be made available, so it will
+not generate 404s for people who had linked to it.
Creating a Page
---------------
@@ -572,7 +595,7 @@ You surely want to edit these options::
# Data about this site
BLOG_TITLE = "Demo Site"
- BLOG_URL = "http://nikola.ralsina.com.ar"
+ SITE_URL = "http://nikola.ralsina.com.ar"
BLOG_EMAIL = "joe@demo.site"
BLOG_DESCRIPTION = "This is a demo site for Nikola."
@@ -718,6 +741,10 @@ Disqus is a good option because:
3) It's free.
4) It's damn nice.
+You can disable comments for a post by adding a "nocomments" metadata field to it::
+
+ .. nocomments: True
+
.. admonition:: Important
In some cases, when you run the test site, you won't see the comments.
@@ -801,7 +828,7 @@ different ones, or about other webservers, please share!
AddType text/css .css
#. Optionally you can greate static compressed copies and save some CPU on your server
- with the GZIP_FILES option in Nikola.
+ with the GZIP_FILES option in Nikola.
#. The webassets Nikola plugin can drastically decrease the number of CSS and JS files your site fetches.
@@ -844,8 +871,8 @@ the embedded player will be set to the native height and width of the video.
You can override this if you wish::
.. vimeo:: 20241459
- height=240
- width=320
+ :height: 240
+ :width: 320
Soundcloud
~~~~~~~~~~
@@ -860,22 +887,19 @@ The ID is 78131362 and you can embed the audio with this::
.. soundcloud:: 78131362
-code-block
-~~~~~~~~~~
-
-This is a somewhat complicated directive to display code nicely. You can just
-embed code like this::
-
- .. code-block:: python
+Code
+~~~~
- print "Hello World!"
+The ``code`` directive has been included in docutils since version 0.9 and now
+replaces Nikola's ``code-block`` directive. To ease the transition, two aliases
+for ``code`` directive are provided: ``code-block`` and ``sourcecode``::
-Or you can include the code from a file::
+ .. code:: python
+ :number-lines:
- .. code-block:: python
- :include: /foo/bar/baz.py
+ print("Our virtues and our failings are inseparable")
-listing
+Listing
~~~~~~~
To use this, you have to put your source code files inside ``listings`` or whatever your
@@ -886,27 +910,22 @@ To use this, you have to put your source code files inside ``listings`` or whate
Will include the source code from ``foo.py``, highlight its syntax in python mode,
and also create a ``listings/foo.py.html`` page and the listing will have a title linking to it.
-Advanced Code Options
-~~~~~~~~~~~~~~~~~~~~~
-
-Both code-block and listing support a number of options, including these:
+Listings support a few extra options so that you can display a fragment instead of the whole
+file in a document:
start-at
- A string, the diplayed code will start when it finds this
+ Takes a string, and starts displaying the code at the first line that matches it.
+start-before
+ Takes a string, and starts displaying the code right before the first line that matches it.
end-at
- A string, the diplayed code will end when it finds this
-start-after
- A string, the diplayed code will start in the line after this
+ Takes a string, and stops displaying the code at the first line that matches it.
end-before
- A string, the diplayed code will end in the line before this
-linenos
- Display line numbers
-linenos_offset
- Use the original file's line numbers (warning: broken)
-tab-width
- Size of the tabs (default 4)
-
-gist
+ Takes a string, and stops displaying the code right before the first line that matches it.
+
+If you set start-at and start-before, start-at wins. If you set end-at and end-before, end-at wins.
+If you make it so your listing ends before it starts, it's frowned upon and nothing will be shown.
+
+Gist
~~~~
You can easily embed GitHub gists with this directive, like this::
@@ -925,8 +944,6 @@ Slideshows
To create an image slideshow, you can use the ``slides`` directive. For example::
.. slides::
- :preload:
- :play: 350
/galleries/demo/tesla_conducts_lg.jpg
/galleries/demo/tesla_lightning2_lg.jpg
@@ -934,13 +951,6 @@ To create an image slideshow, you can use the ``slides`` directive. For example:
/galleries/demo/tesla_lightning1_lg.jpg
/galleries/demo/tesla_tower1_lg.jpg
-This is based on `slidejs <http://slidesjs.com/>`_ and it supports
-`the options described there <http://slidesjs.com/#options>`_ with one minor tweak to make them
-fit in docutils convention: If the option takes a boolean value, you just have to add it or not. For example,
-to enable preloading, just use the ``:preload:`` option.
-
-If the option takes any other kind of argument, just use it after the option, like ``play`` in the
-above example.
Importing Your Wordpress Site Into Nikola
-----------------------------------------
@@ -1012,7 +1022,7 @@ corresponding lines in your ``conf.py``.
An example configuration that uses the Twitter nickname of the website
and the authors Twitter user ID is found below.
-.. code-block:: Python
+.. code-block:: python
TWITTER_CARD = {
'use_twitter_cards': True, # enable Twitter Cards / Open Graph
@@ -1022,6 +1032,103 @@ and the authors Twitter user ID is found below.
'creator:id': 654321, # Same as creator, but the Twitter user's ID.
}
+
+Extra Plugins
+-------------
+
+These are plugins that may not be widely used or that are a bit too radical or
+experimental for the general public.
+
+To enable them for your site please look for `ENABLED_EXTRAS` in your ``conf.py``.
+
+Planetoid
+~~~~~~~~~
+
+This plugin converts Nikola into the equivalent of `Planet <http://www.planetplanet.org/>`_
+a feed aggregator. It requires `PeeWee <https://github.com/coleifer/peewee>`_ and
+`Feedparser <http://code.google.com/p/feedparser/>`_ to work.
+
+It has a configuration option: PLANETOID_REFRESH which is the number of minutes
+before retrying a feed (defaults to 60).
+
+You need to create a ``feeds`` file containing the data of which feeds you want to
+aggregate. The format is very simple::
+
+ # Roberto Alsina
+ http://feeds2.feedburner.com/PostsInLateralOpinionAboutPython
+ Roberto Alsina
+
+#. Lines that start with ``#`` are comments and ignored.
+#. Lines that start with http are feed URLs.
+#. URL lines have to be followed by the "real name" of the feed.
+
+After all that is in place, just run ``nikola build`` and you'll get
+a planet.
+If you run ``nikola build`` for the first time you need to actually issue
+the command three times until the planet is build.
+
+There is a special theme for the planets called `site-planetoid`. To use
+this set `THEME` in your ``conf.py`` to ``'site-planetoid'``.
+This is special in the case that it redirects users to the original URL of the post
+when they try to open a post.
+
+Local Search
+~~~~~~~~~~~~
+
+If you don't want to depend on google or duckduckgo to implement search for you,
+or just want it to wok even if you are offline, enable this plugin and the
+search will be performed client side.
+
+This plugin implements a Tipue-based local search for your site.
+
+To use it, copy task_localsearch.plugin and task_localsearch
+into a plugins/ folder in your nikola site.
+
+After you build your site, you will have several new files in assets/css and assets/js
+and a tipue_search.html that you can use as a basis for using this in your site.
+
+For more information about how to customize it and use it, please refer to the tipue
+docs at http://www.tipue.com/search/
+
+Tipue is under an MIT license (see MIT-LICENSE.txt)
+
+Here's a set of example settings for conf.py that should work nicely with the "site" theme::
+
+ SEARCH_FORM = """
+ <span class="navbar-form pull-left">
+ <input type="text" id="tipue_search_input">
+ </span>"""
+
+ ANALYTICS = """
+ <script type="text/javascript" src="/assets/js/tipuesearch_set.js"></script>
+ <script type="text/javascript" src="/assets/js/tipuesearch.js"></script>
+ <script type="text/javascript">
+ $(document).ready(function() {
+ $('#tipue_search_input').tipuesearch({
+ 'mode': 'json',
+ 'contentLocation': '/assets/js/tipuesearch_content.json',
+ 'showUrl': false
+ });
+ });
+ </script>
+ """
+
+ EXTRA_HEAD_DATA = """
+ <link rel="stylesheet" type="text/css" href="/assets/css/tipuesearch.css">
+ <div id="tipue_search_content" style="margin-left: auto; margin-right: auto; padding: 20px;"></div>
+ """
+
+The <div> in EXTRA_HEAD_DATA is a hack but it will migrate into the <body> of the
+documents thanks to magic, and will hold the search results after the user searches.
+
+Mustache
+~~~~~~~~
+
+This task gives you a ``mustache.html`` file which lets you access your whole
+blog without reloading the page, using client-side templates. Makes it much
+faster and modern ;-)
+
+
License
-------
diff --git a/docs/theming.txt b/docs/theming.txt
index 6c0c0e4..d767cae 100644
--- a/docs/theming.txt
+++ b/docs/theming.txt
@@ -44,8 +44,8 @@ messages
And these optional files:
parent
- A text file that, on its first line, contains the name of the **parent theme**.
- Any resources missing on this theme, will be looked up in the parent theme
+ A text file that, on its first line, contains the name of the **parent theme**.
+ Any resources missing on this theme, will be looked up in the parent theme
(and then in the grandparent, etc).
The ``parent`` is so you don't have to create a full theme each time: just create an
@@ -77,7 +77,7 @@ Templates
In templates there is a number of files whose name ends in ``.tmpl``. Those are the
theme's page templates. They are done using the `Mako <http://makotemplates.org>`_
-or `Jinja2 <http://jinja.pocoo.org>`_ template languages. If you want to do a theme, you
+or `Jinja2 <http://jinja.pocoo.org>`_ template languages. If you want to do a theme, you
should learn one first. What engine is used by the theme is declared in the ``engine`` file.
The rest of this document explains Mako templates, but Jinja2 is fairly similar.
@@ -132,7 +132,7 @@ base.tmpl
The included themes use at least these:
* ``rss_link`` a link to custom RSS feed, although it may be empty)
- * ``blog_url`` the URL for your site
+ * ``site_url`` the URL for your site
* ``blog_title`` the name of your site
* ``content_footer`` things like copyright notices, disclaimers, etc.
* ``license`` a larger license badge
@@ -195,47 +195,8 @@ you would need to maintain the inheritance as it is, or not require whatever dat
Messages and Translations
-------------------------
-When you modify templates, you may want to add text in them (for example: "About Me").
-Instead of adding the text directly, which makes it impossible to translate to other
-languages, add it like this::
-
- ${messages[lang]["About Me"]}
-
-Then, in ``messages/en.py`` add it along the other strings::
-
- MESSAGES = [
- u"Posts for year %s",
- u"Archive",
- u"Posts about %s:",
- u"Tags",
- u"Also available in: ",
- u"More posts about",
- u"Posted:",
- u"Original site",
- u"Read in english",
- u"About Me",
- ]
-
-Then, when I want to use your theme in spanish, all I have to do is add a line in ``messages/es.py``::
-
- MESSAGES = {
- u"LANGUAGE": u"Español",
- u"Posts for year %s": u"Posts del año %s",
- u"Archive": u"Archivo",
- u"Posts about %s:": u"Posts sobre %s",
- u"Tags": u"Tags",
- u"Also available in: ": u"También disponible en: ",
- u"More posts about": u"Más posts sobre",
- u"Posted:": u"Publicado:",
- u"Original site": u"Sitio original",
- u"Read in english": u"Leer en español",
- u"About Me": u"Acerca del autor",
- }
-
-And voilá, your theme works in spanish. Don't remove strings from these files even if it seems
-your theme is not using them. Some are used internally in Nikola to generate titles and
-similar things.
-
-To create a new translation, just copy one of the existing ones, translate the right side of
-every string to your language, save it and send it to me, I will add it to Nikola!
+The included themes are translated into a variety of languages. You can add your own translation
+at https://www.transifex.com/projects/p/nikola/
+If you want to create a theme that has new strings, and you want those strings to be translatable,
+then your theme will need a custom ``messages`` folder.