aboutsummaryrefslogtreecommitdiffstats
path: root/topics/project-management/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'topics/project-management/index.html')
-rw-r--r--topics/project-management/index.html83
1 files changed, 63 insertions, 20 deletions
diff --git a/topics/project-management/index.html b/topics/project-management/index.html
index 91fa2359..cc7135ac 100644
--- a/topics/project-management/index.html
+++ b/topics/project-management/index.html
@@ -62,7 +62,7 @@
<div class="navbar-inner">
<div class="container-fluid">
<a class="repo-link btn btn-primary btn-small" href="https://github.com/tomchristie/django-rest-framework/tree/master">GitHub</a>
- <a class="repo-link btn btn-inverse btn-small " rel="prev" href="../rest-framework-2-announcement">
+ <a class="repo-link btn btn-inverse btn-small " rel="prev" href="../3.0-announcement">
Next <i class="icon-arrow-right icon-white"></i>
</a>
<a class="repo-link btn btn-inverse btn-small " rel="next" href="../contributing">
@@ -189,6 +189,10 @@
</li>
<li >
+ <a href="../../api-guide/versioning">Versioning</a>
+ </li>
+
+ <li >
<a href="../../api-guide/content-negotiation">Content negotiation</a>
</li>
@@ -232,6 +236,10 @@
</li>
<li >
+ <a href="../internationalization">Internationalization</a>
+ </li>
+
+ <li >
<a href="../ajax-csrf-cors">AJAX, CSRF & CORS</a>
</li>
@@ -260,23 +268,11 @@
</li>
<li >
- <a href="../rest-framework-2-announcement">2.0 Announcement</a>
- </li>
-
- <li >
- <a href="../2.2-announcement">2.2 Announcement</a>
- </li>
-
- <li >
- <a href="../2.3-announcement">2.3 Announcement</a>
- </li>
-
- <li >
- <a href="../2.4-announcement">2.4 Announcement</a>
+ <a href="../3.0-announcement">3.0 Announcement</a>
</li>
<li >
- <a href="../3.0-announcement">3.0 Announcement</a>
+ <a href="../3.1-announcement">3.1 Announcement</a>
</li>
<li >
@@ -287,10 +283,6 @@
<a href="../release-notes">Release Notes</a>
</li>
- <li >
- <a href="../credits">Credits</a>
- </li>
-
</ul>
</li>
@@ -366,6 +358,14 @@
</li>
<li>
+ <a href="#translations">Translations</a>
+ </li>
+
+ <li>
+ <a href="#project-requirements">Project requirements</a>
+ </li>
+
+ <li>
<a href="#project-ownership">Project ownership</a>
</li>
@@ -438,10 +438,11 @@ To modify this process for future maintenance cycles make a pull request to the
<h4 id="responsibilities-of-team-members">Responsibilities of team members</h4>
<p>Team members have the following responsibilities.</p>
<ul>
-<li>Add triage labels and milestones to tickets.</li>
<li>Close invalid or resolved tickets.</li>
+<li>Add triage labels and milestones to tickets.</li>
<li>Merge finalized pull requests.</li>
<li>Build and deploy the documentation, using <code>mkdocs gh-deploy</code>.</li>
+<li>Build and update the included translation packs.</li>
</ul>
<p>Further notes for maintainers:</p>
<ul>
@@ -482,6 +483,48 @@ To modify this process for future releases make a pull request to the [project m
</code></pre>
<p>When pushing the release to PyPI ensure that your environment has been installed from our development <code>requirement.txt</code>, so that documentation and PyPI installs are consistently being built against a pinned set of packages.</p>
<hr />
+<h2 id="translations">Translations</h2>
+<p>The maintenance team are responsible for managing the translation packs include in REST framework. Translating the source strings into multiple languages is managed through the <a href="https://www.transifex.com/projects/p/django-rest-framework/">transifex service</a>.</p>
+<h3 id="managing-transifex">Managing Transifex</h3>
+<p>The <a href="https://pypi.python.org/pypi/transifex-client">official Transifex client</a> is used to upload and download translations to Transifex. The client is installed using pip:</p>
+<pre><code>pip install transifex-client
+</code></pre>
+<p>To use it you'll need a login to Transifex which has a password, and you'll need to have administrative access to the Transifex project. You'll need to create a <code>~/.transifexrc</code> file which contains your credentials.</p>
+<pre><code>[https://www.transifex.com]
+username = ***
+token = ***
+password = ***
+hostname = https://www.transifex.com
+</code></pre>
+<h3 id="upload-new-source-files">Upload new source files</h3>
+<p>When any user visible strings are changed, they should be uploaded to Transifex so that the translators can start to translate them. To do this, just run:</p>
+<pre><code># 1. Update the source django.po file, which is the US English version.
+cd rest_framework
+django-admin.py makemessages -l en_US
+# 2. Push the source django.po file to Transifex.
+cd ..
+tx push -s
+</code></pre>
+<p>When pushing source files, Transifex will update the source strings of a resource to match those from the new source file.</p>
+<p>Here's how differences between the old and new source files will be handled:</p>
+<ul>
+<li>New strings will be added.</li>
+<li>Modified strings will be added as well.</li>
+<li>Strings which do not exist in the new source file will be removed from the database, along with their translations. If that source strings gets re-added later then <a href="http://docs.transifex.com/guides/tm#let-tm-automatically-populate-translations">Transifex Translation Memory</a> will automatically include the translation string.</li>
+</ul>
+<h3 id="download-translations">Download translations</h3>
+<p>When a translator has finished translating their work needs to be downloaded from Transifex into the REST framework repository. To do this, run:</p>
+<pre><code># 3. Pull the translated django.po files from Transifex.
+tx pull -a
+cd rest_framework
+# 4. Compile the binary .mo files for all supported languages.
+django-admin.py compilemessages
+</code></pre>
+<hr />
+<h2 id="project-requirements">Project requirements</h2>
+<p>All our test requirements are pinned to exact versions, in order to ensure that our test runs are reproducible. We maintain the requirements in the <code>requirements</code> directory. The requirements files are referenced from the <code>tox.ini</code> configuration file, ensuring we have a single source of truth for package versions used in testing.</p>
+<p>Package upgrades should generally be treated as isolated pull requests. You can check if there are any packages available at a newer version, by using the <code>pip list --outdated</code>.</p>
+<hr />
<h2 id="project-ownership">Project ownership</h2>
<p>The PyPI package is owned by <code>@tomchristie</code>. As a backup <code>@j4mie</code> also has ownership of the package.</p>
<p>If <code>@tomchristie</code> ceases to participate in the project then <code>@j4mie</code> has responsibility for handing over ownership duties.</p>