← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] ~cjwatson/launchpad:codespell-1 into launchpad:master

 

Colin Watson has proposed merging ~cjwatson/launchpad:codespell-1 into launchpad:master.

Commit message:
Fix various spelling errors found by codespell


Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~cjwatson/launchpad/+git/launchpad/+merge/426816

This isn't very structured; I basically just ran codespell and fixed mistakes until I got bored and the diff got too large.
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of ~cjwatson/launchpad:codespell-1 into launchpad:master.
diff --git a/lib/lp/answers/doc/expiration.rst b/lib/lp/answers/doc/expiration.rst
index 5ab4e8a..6fbb0d2 100644
--- a/lib/lp/answers/doc/expiration.rst
+++ b/lib/lp/answers/doc/expiration.rst
@@ -128,7 +128,7 @@ somebody are subject to expiration.
     # Commit the current transaction because the script will run in
     # another transaction and thus it won't see the changes done on this
     # test unless we commit.
-    # XXX flacoste 2006-10-03 bug=3989: Unecessary flush_database_updates
+    # XXX flacoste 2006-10-03 bug=3989: Unnecessary flush_database_updates
     # required.
     >>> from lp.services.database.sqlbase import flush_database_updates
     >>> flush_database_updates()
diff --git a/lib/lp/answers/stories/faq-browse-and-search.rst b/lib/lp/answers/stories/faq-browse-and-search.rst
index b911c59..f507d8f 100644
--- a/lib/lp/answers/stories/faq-browse-and-search.rst
+++ b/lib/lp/answers/stories/faq-browse-and-search.rst
@@ -166,8 +166,8 @@ Following the link will show the questions results:
 Distribution Source Packages and FAQs
 -------------------------------------
 
-Altough distribution source packages aren't directly associated with
-FAQs. The 'All FAQs' link that appears in that context links to the
+Although distribution source packages aren't directly associated with
+FAQs, the 'All FAQs' link that appears in that context links to the
 distribution FAQs.
 
     >>> browser.open('http://answers.launchpad.test/ubuntu/'
diff --git a/lib/lp/answers/stories/question-workflow.rst b/lib/lp/answers/stories/question-workflow.rst
index 49146f5..5addf78 100755
--- a/lib/lp/answers/stories/question-workflow.rst
+++ b/lib/lp/answers/stories/question-workflow.rst
@@ -259,7 +259,7 @@ status:
 Reopening
 ---------
 
-It can happen that, altough the owner confirmed the question was solved,
+It can happen that, although the owner confirmed the question was solved,
 the original problem reappears. In this case, they can reopen the question
 by entering a new message and clicking the "I Still Need an Answer"
 button.
diff --git a/lib/lp/app/doc/launchpadform.rst b/lib/lp/app/doc/launchpadform.rst
index 6fa4e8e..f5f46ea 100644
--- a/lib/lp/app/doc/launchpadform.rst
+++ b/lib/lp/app/doc/launchpadform.rst
@@ -375,7 +375,7 @@ Form Rendering
     ...         self.next_url = 'http://launchpad.test/'
     ...
     ...     def handleUpdateFailure(self, action, data, errors):
-    ...         return u'Some errors occured.'
+    ...         return u'Some errors occurred.'
     ...
     ...     @action(u'Update', name='update', failure=handleUpdateFailure)
     ...     def update_action(self, action, data):
@@ -423,7 +423,7 @@ This is also true of failure handlers:
     ...           'field.actions.update': 'Update'})
     >>> view = RenderFormTest(context, request)
     >>> print(view())
-    Some errors occured.
+    Some errors occurred.
 
 
 Initial Focused Widget
diff --git a/lib/lp/app/doc/tales.rst b/lib/lp/app/doc/tales.rst
index 7bac04c..3eb694a 100644
--- a/lib/lp/app/doc/tales.rst
+++ b/lib/lp/app/doc/tales.rst
@@ -634,14 +634,14 @@ prevents a XSS vulnerability where malicious code injected into the
 title might be interpreted by the browser.
 
     >>> login('test@xxxxxxxxxxxxx')
-    >>> bug.title = "Opps<br/><script>alert('XSS')</script>"
+    >>> bug.title = "Oops<br/><script>alert('XSS')</script>"
     >>> print(test_tales("bug/fmt:link", bug=getUtility(IBugSet).get(1)))
     <a href=".../bugs/1" ...>Bug #1:
-      Opps&lt;br/&gt;&lt;script&gt;alert(&#x27;XSS&#x27;)&lt;/script&gt;</a>
+      Oops&lt;br/&gt;&lt;script&gt;alert(&#x27;XSS&#x27;)&lt;/script&gt;</a>
 
     >>> print(test_tales("bugtask/fmt:link", bugtask=bugtask))
     <a href=".../firefox/+bug/1" ...>Bug #1:
-      Opps&lt;br/&gt;&lt;script&gt;alert(&#x27;XSS&#x27;)&lt;/script&gt;</a>
+      Oops&lt;br/&gt;&lt;script&gt;alert(&#x27;XSS&#x27;)&lt;/script&gt;</a>
 
 
 Branch subscriptions
diff --git a/lib/lp/app/javascript/tests/test_expander.js b/lib/lp/app/javascript/tests/test_expander.js
index 4a1bd2c..cf293c2 100644
--- a/lib/lp/app/javascript/tests/test_expander.js
+++ b/lib/lp/app/javascript/tests/test_expander.js
@@ -218,7 +218,7 @@ YUI.add('lp.expander.test', function (Y) {
                 foldContentNode_animate_arg = no_animate;
             };
             var expander = this.makeExpander(
-                undefined, { supress_setup: true });
+                undefined, { suppress_setup: true });
             expander.foldContentNode = fake_foldContentNode;
             expander.setUp();
             Y.Assert.isTrue(foldContentNode_animate_arg);
diff --git a/lib/lp/app/stories/basics/xx-launchpad-statistics.rst b/lib/lp/app/stories/basics/xx-launchpad-statistics.rst
index c81ca7a..8839461 100644
--- a/lib/lp/app/stories/basics/xx-launchpad-statistics.rst
+++ b/lib/lp/app/stories/basics/xx-launchpad-statistics.rst
@@ -1,6 +1,5 @@
-
 We also have the special Launchpad Statistics summary page. This is only
-acessible to launchpad Admins:
+accessible to launchpad Admins:
 
     >>> user_browser.open('http://launchpad.test/+statistics')
     Traceback (most recent call last):
diff --git a/lib/lp/app/stories/basics/xx-maintenance-message.rst b/lib/lp/app/stories/basics/xx-maintenance-message.rst
index 6416bbf..4b23250 100644
--- a/lib/lp/app/stories/basics/xx-maintenance-message.rst
+++ b/lib/lp/app/stories/basics/xx-maintenance-message.rst
@@ -1,7 +1,7 @@
 Launchpad maintenance messages
 ==============================
 
-A system adminstrator can write an iso format timestamp to the file
+A system administrator can write an iso format timestamp to the file
 "+maintenancetime.txt" in the launchpad application root directory.
 
 This will cause a message to be displayed as part of the main template
diff --git a/lib/lp/app/stories/basics/xx-opstats.rst b/lib/lp/app/stories/basics/xx-opstats.rst
index 9b5160b..82a8ca1 100644
--- a/lib/lp/app/stories/basics/xx-opstats.rst
+++ b/lib/lp/app/stories/basics/xx-opstats.rst
@@ -109,7 +109,7 @@ information is not found in there, so a retry is attempted against the
 master DB in case the information is missing due to replication lag.
 
     >>> with MockPatchObject(statsd_client, '_client', stats_client):
-    ...     output = http("GET http://launchpad.test/non-existant HTTP/1.1\n")
+    ...     output = http("GET http://launchpad.test/non-existent HTTP/1.1\n")
     >>> output.getStatus()
     404
     >>> report()
diff --git a/lib/lp/app/stories/folder.rst b/lib/lp/app/stories/folder.rst
index 8bde596..7575d4b 100644
--- a/lib/lp/app/stories/folder.rst
+++ b/lib/lp/app/stories/folder.rst
@@ -191,7 +191,7 @@ Trying to request a non-existent file, will also raise a NotFound.
       ...
     zope.publisher.interfaces.NotFound: ...
 
-Traversing beyond an existing file to a non-existant file raises a
+Traversing beyond an existing file to a non-existent file raises a
 NotFound.
 
     >>> view = MyTree(object(), FakeRequest(version="devel"))
diff --git a/lib/lp/app/widgets/doc/image-widget.rst b/lib/lp/app/widgets/doc/image-widget.rst
index f21c21d..a3931c3 100644
--- a/lib/lp/app/widgets/doc/image-widget.rst
+++ b/lib/lp/app/widgets/doc/image-widget.rst
@@ -5,7 +5,7 @@ In Launchpad we have images associated with people, products,
 distributions, etc, and we want to allow people to have full control
 over their images. That is, they must be able to upload a new image and
 delete (or keep) an existing one. For this we created this widget, which
-can be embeded into any form we want, which doesn't require us to add
+can be embedded into any form we want, which doesn't require us to add
 any submit buttons to indicate that the image should be kept, deleted or
 changed.
 
diff --git a/lib/lp/app/widgets/doc/project-scope-widget.rst b/lib/lp/app/widgets/doc/project-scope-widget.rst
index 1871412..3c32055 100644
--- a/lib/lp/app/widgets/doc/project-scope-widget.rst
+++ b/lib/lp/app/widgets/doc/project-scope-widget.rst
@@ -109,7 +109,7 @@ by getInputValue().
     >>> print(selected_scope.name)
     mozilla
 
-If an non-existant distribution name is provided, a widget error is
+If an non-existent distribution name is provided, a widget error is
 raised:
 
     >>> form['field.scope.target'] = 'invalid'
diff --git a/lib/lp/archivepublisher/tests/deathrow.rst b/lib/lp/archivepublisher/tests/deathrow.rst
index e239c7c..ea18917 100644
--- a/lib/lp/archivepublisher/tests/deathrow.rst
+++ b/lib/lp/archivepublisher/tests/deathrow.rst
@@ -265,7 +265,7 @@ Run DeathRow against the current 'removable' context.
 A few details to pay attention to in the log output:
 
  * All files were checked despite having the same content. In
-   normal circunstances this can be achieved by having the same tarball
+   normal circumstances this can be achieved by having the same tarball
    used with different names for two distinct sourcepackages
    (openoffice and openoffice-l10n is an example);
 
@@ -409,7 +409,7 @@ database.
     stuck-bin 666 in hoary i386 SUPERSEDED True
     stuck-bin 666 in hoary i386 SUPERSEDED True
 
-Remove temporary diretories used for tests.
+Remove temporary directories used for tests.
 
     >>> import shutil
     >>> shutil.rmtree(pool_path)
diff --git a/lib/lp/bugs/doc/bug-heat.rst b/lib/lp/bugs/doc/bug-heat.rst
index 420cfb6..14c57e9 100644
--- a/lib/lp/bugs/doc/bug-heat.rst
+++ b/lib/lp/bugs/doc/bug-heat.rst
@@ -99,7 +99,7 @@ the bug loses 4 points of heat.
     >>> bug.heat
     8
 
-If a user who wasn't affected by the bug marks themselve as explicitly
+If a user who wasn't affected by the bug marks themselves as explicitly
 unaffected, the bug's heat doesn't change.
 
     >>> unaffected_person = factory.makePerson()
diff --git a/lib/lp/bugs/doc/bug-tags.rst b/lib/lp/bugs/doc/bug-tags.rst
index ab49131..76468e8 100644
--- a/lib/lp/bugs/doc/bug-tags.rst
+++ b/lib/lp/bugs/doc/bug-tags.rst
@@ -212,7 +212,7 @@ earlier can be used again.
     ...     bug_tags_field, tag_field, request)
 
 _tagsFromFieldValue() converts tags from the field value to tags for
-display. The absense of tags causes it to return None:
+display. The absence of tags causes it to return None:
 
     >>> print(tags_frozen_set_widget._tagsFromFieldValue(None))
     None
@@ -226,7 +226,7 @@ Tags are ordered before returning:
     [1, 4, 5, 12]
 
 _tagsToFieldValue() converts the tags entered in the form into a value
-suitable for the field. In the absense of tags it returns an empty
+suitable for the field. In the absence of tags it returns an empty
 frozenset():
 
     >>> for item in tags_frozen_set_widget._tagsToFieldValue(None):
diff --git a/lib/lp/bugs/doc/bugattachments.rst b/lib/lp/bugs/doc/bugattachments.rst
index 385e8f2..c19f7fc 100644
--- a/lib/lp/bugs/doc/bugattachments.rst
+++ b/lib/lp/bugs/doc/bugattachments.rst
@@ -641,7 +641,7 @@ Librarian files are no longer set.
     >>> private_attachment.libraryfile.restricted
     False
 
-Similary, if a public bug becomes private, the "restricted" flag of
+Similarly, if a public bug becomes private, the "restricted" flag of
 its Librarian files are set.
 
     >>> changed = bug.setPrivate(True, bug.owner)
diff --git a/lib/lp/bugs/doc/bugsummary.rst b/lib/lp/bugs/doc/bugsummary.rst
index 2f7891c..3c88be0 100644
--- a/lib/lp/bugs/doc/bugsummary.rst
+++ b/lib/lp/bugs/doc/bugsummary.rst
@@ -2,7 +2,7 @@ Bug Count Summaries
 ===================
 
 The BugSummary table contains summaries of bug counts. It contains one
-or more rows row for every unique public BugTask targetting:
+or more rows row for every unique public BugTask targeting:
 
     - product
     - productseries
@@ -189,7 +189,7 @@ or milestone, we need to aggregate them.
 
 
 Here are the untagged rows. This will show us the oci-project one, and there
-are 2 New and 2 Confirmed bug tasks targetted to the pr-a product.:
+are 2 New and 2 Confirmed bug tasks targeted to the pr-a product.:
 
     >>> print_find(
     ...     BugSummary.product == prod_a,
@@ -205,7 +205,7 @@ are 2 New and 2 Confirmed bug tasks targetted to the pr-a product.:
                                                               6
 
 Here are the rows associated with the 't-a' tag. There is 1 Confirmed
-bug task targetted to the pr-a product who's bug is tagged 't-a'.:
+bug task targeted to the pr-a product who's bug is tagged 't-a'.:
 
     >>> print_find(
     ...     BugSummary.product == prod_a,
@@ -307,8 +307,8 @@ ProductSeries Bug Counts
 
 Querying for ProductSeries information is identical to querying for
 Product information except you patch on the productseries column instead
-of the product column. Note that if there is a BugTask targetting a
-ProductSeries, there also must be a BugTask record targetting that
+of the product column. Note that if there is a BugTask targeting a
+ProductSeries, there also must be a BugTask record targeting that
 ProductSeries' Product:
 
     >>> prod_b = factory.makeProduct(name='pr-b')
diff --git a/lib/lp/bugs/doc/bugtask-status-workflow.rst b/lib/lp/bugs/doc/bugtask-status-workflow.rst
index 3ee347f..4833164 100644
--- a/lib/lp/bugs/doc/bugtask-status-workflow.rst
+++ b/lib/lp/bugs/doc/bugtask-status-workflow.rst
@@ -234,7 +234,7 @@ a closed status to an open one, we record the date in date_left_closed.
     >>> ubuntu_firefox_task.date_left_closed > last_date_closed
     True
 
-We also record the date a task was marked Fix Commited.
+We also record the date a task was marked Fix Committed.
 
     >>> print(ubuntu_firefox_task.date_fix_committed)
     None
diff --git a/lib/lp/bugs/doc/bugwidget.rst b/lib/lp/bugs/doc/bugwidget.rst
index 8f62395..63374ab 100644
--- a/lib/lp/bugs/doc/bugwidget.rst
+++ b/lib/lp/bugs/doc/bugwidget.rst
@@ -17,7 +17,7 @@ The BugWidget converts string bug ids to the corresponding bug object.
     >>> bug_one.id
     1
 
-If non-existant bug number is entered, an error is raised.
+If non-existent bug number is entered, an error is raised.
 
     >>> request = LaunchpadTestRequest(form={'field.bug': '1234567'})
     >>> bug_widget = BugWidget(bug_field, request)
diff --git a/lib/lp/bugs/doc/externalbugtracker-bugzilla-lp-plugin.rst b/lib/lp/bugs/doc/externalbugtracker-bugzilla-lp-plugin.rst
index 3cf8ce6..4170439 100644
--- a/lib/lp/bugs/doc/externalbugtracker-bugzilla-lp-plugin.rst
+++ b/lib/lp/bugs/doc/externalbugtracker-bugzilla-lp-plugin.rst
@@ -255,7 +255,7 @@ accepts a list of bug IDs and a datetime as a parameter and returns the
 list of all the bug IDs in the passed set that have been changed since
 that datetime.
 
-This is acheived by calling the Launchpad.get_bugs() method on the
+This is achieved by calling the Launchpad.get_bugs() method on the
 remote server and passing it a 'changed_since' parameter.
 
     >>> bugzilla.xmlrpc_transport.print_method_calls = True
@@ -327,7 +327,7 @@ products from Bugzilla APIs.
 Retrieving remote comments
 --------------------------
 
-BugzillaLPPlugin implments the ISupportsCommentImport interface, which
+BugzillaLPPlugin implements the ISupportsCommentImport interface, which
 means that we can use it to import comments from the remote Bugzilla
 instance.
 
diff --git a/lib/lp/bugs/doc/externalbugtracker.rst b/lib/lp/bugs/doc/externalbugtracker.rst
index 4ea1e31..450d220 100644
--- a/lib/lp/bugs/doc/externalbugtracker.rst
+++ b/lib/lp/bugs/doc/externalbugtracker.rst
@@ -44,7 +44,7 @@ Choosing another ExternalBugTracker instance
 
 Sometimes there is more than one ExternalBugTracker instance for a
 single bug tracker type. For example, for different versions, for
-intances having our Launchpad plugin installed, and so on. This is done
+instances having our Launchpad plugin installed, and so on. This is done
 with the getExternalBugTrackerToUse() method, which returns the correct
 instance.  Usually there is only one version, so the default for the
 original instance is to return itself.
@@ -56,7 +56,7 @@ original instance is to return itself.
     True
 
 CheckwatchesMaster calls externalbugtracker.get_external_bugtracker(),
-follwed by ExternalBugTracker.getExternalBugTrackerToUse() to get the
+followed by ExternalBugTracker.getExternalBugTrackerToUse() to get the
 correct ExternalBugTracker for a given BugTracker. It does this via the
 private _getExternalBugTrackersAndWatches() method, which returns a set of
 (ExternalBugTracker, bug_watches) tuples.
@@ -716,7 +716,7 @@ can use it to check that bug watches' last_error_types are being set
 correctly.
 
 We start with those errors that may be raised by
-ExternalBugTracker.initializeRemoteBugDB(). We supress exceptions
+ExternalBugTracker.initializeRemoteBugDB(). We suppress exceptions
 because the bug watch's last error field will contain the data we need
 for this test.
 
diff --git a/lib/lp/bugs/doc/official-bug-tags.rst b/lib/lp/bugs/doc/official-bug-tags.rst
index 047a768..27f4204 100644
--- a/lib/lp/bugs/doc/official-bug-tags.rst
+++ b/lib/lp/bugs/doc/official-bug-tags.rst
@@ -52,7 +52,7 @@ Targets of official bug tags
 ----------------------------
 
 Distribution owners and other persons with the permission launchpad.Edit
-can add and remove offical bug tags by calling addOfficialBugTag()
+can add and remove official bug tags by calling addOfficialBugTag()
 or removeOfficialBugTag(), respectively.
 
     >>> login('colin.watson@xxxxxxxxxxxxxxx')
@@ -101,7 +101,7 @@ change the data.
     ...     print(tag.tag)
     bar
 
-Similary, deleting an not-existent tag does not lead to an error, but
+Similarly, deleting an not-existent tag does not lead to an error, but
 does not change the data either.
 
     >>> ubuntu.removeOfficialBugTag(u'foo')
diff --git a/lib/lp/bugs/interfaces/bugwatch.py b/lib/lp/bugs/interfaces/bugwatch.py
index e4204cf..9a3d724 100644
--- a/lib/lp/bugs/interfaces/bugwatch.py
+++ b/lib/lp/bugs/interfaces/bugwatch.py
@@ -153,7 +153,7 @@ class BugWatchActivityStatus(DBEnumeratedType):
         Unable to set link remote bug to Launchpad
 
         The remote bug's status and comments were synchronized
-        sucessfully with Launchpad but Launchpad was unable to set the
+        successfully with Launchpad but Launchpad was unable to set the
         remote bug's link back to the relevant Launchpad bug.
         """,
     )
diff --git a/lib/lp/bugs/stories/bugattachments/xx-delete-bug-attachment.rst b/lib/lp/bugs/stories/bugattachments/xx-delete-bug-attachment.rst
index 5e3fb62..2d568d1 100644
--- a/lib/lp/bugs/stories/bugattachments/xx-delete-bug-attachment.rst
+++ b/lib/lp/bugs/stories/bugattachments/xx-delete-bug-attachment.rst
@@ -70,7 +70,7 @@ But this delete option should not be shown for other users.
 
 If the button is pressed, the attachment will be deleted, which means
 that it won't show up in the attachments portlet anymore. Since there
-arent' any other attachments, the portlet won't show up at all.
+aren't any other attachments, the portlet won't show up at all.
 
     >>> user_browser.getControl('Delete Attachment').click()
     >>> user_browser.url
diff --git a/lib/lp/bugs/stories/bugs/xx-front-page-search.rst b/lib/lp/bugs/stories/bugs/xx-front-page-search.rst
index 7367a15..7b72774 100644
--- a/lib/lp/bugs/stories/bugs/xx-front-page-search.rst
+++ b/lib/lp/bugs/stories/bugs/xx-front-page-search.rst
@@ -52,7 +52,7 @@ will be searched.
     >>> anon_browser.title
     'Search all bug reports'
 
-The same is of course true if the target widget contains a non-existant
+The same is of course true if the target widget contains a non-existent
 project name.
 
     >>> anon_browser.open('http://bugs.launchpad.test/')
diff --git a/lib/lp/bugs/stories/bugtask-management/xx-change-assignee.rst b/lib/lp/bugs/stories/bugtask-management/xx-change-assignee.rst
index 9ad1915..ee941f5 100644
--- a/lib/lp/bugs/stories/bugtask-management/xx-change-assignee.rst
+++ b/lib/lp/bugs/stories/bugtask-management/xx-change-assignee.rst
@@ -106,8 +106,8 @@ project used in these tests.
 
 To avoid any confusion, the option to assign somebody else is only
 shown if the user has sufficient privileges to assign anybody or if
-the user is a member of at least one team. no-priv is no a member of
-any team and hence does no see the option to asign somebody else.
+the user is a member of at least one team. no-priv is not a member of
+any team and hence does not see the option to assign somebody else.
 
     >>> no_priv.teams_participated_in.count()
     0
diff --git a/lib/lp/bugs/stories/bugtask-searches/xx-filter-by-linked-blueprints.rst b/lib/lp/bugs/stories/bugtask-searches/xx-filter-by-linked-blueprints.rst
index 4b28bdc..4e996a0 100644
--- a/lib/lp/bugs/stories/bugtask-searches/xx-filter-by-linked-blueprints.rst
+++ b/lib/lp/bugs/stories/bugtask-searches/xx-filter-by-linked-blueprints.rst
@@ -39,7 +39,7 @@ linked blueprints are returned.
     1 Firefox does not support SVG
      Mozilla Firefox Low New
 
-Similary, we can search for blueprints that don't have linked
+Similarly, we can search for blueprints that don't have linked
 blueprints, if we uncheck 'Show bugs with linked blueprints'.
 
     >>> anon_browser.open(advanced_search_url)
diff --git a/lib/lp/bugs/stories/bugwatches/xx-bugwatch-errors.rst b/lib/lp/bugs/stories/bugwatches/xx-bugwatch-errors.rst
index 718e5f5..5fc44f8 100644
--- a/lib/lp/bugs/stories/bugwatches/xx-bugwatch-errors.rst
+++ b/lib/lp/bugs/stories/bugwatches/xx-bugwatch-errors.rst
@@ -110,7 +110,7 @@ We can observe this for each of the BugWatchActivityStatus failure values:
     The remote bug's status was synchronized successfully and its
     comments were successfully imported but Launchpad was unable to push
     comments back to the remote bug...
-    The remote bug's status and comments were synchronized sucessfully
+    The remote bug's status and comments were synchronized successfully
     with Launchpad but Launchpad was unable to set the remote bug's link
     back to the relevant Launchpad bug...
 
diff --git a/lib/lp/bugs/stories/guided-filebug/xx-distro-guided-filebug-tags.rst b/lib/lp/bugs/stories/guided-filebug/xx-distro-guided-filebug-tags.rst
index 76b11a4..bc02db4 100644
--- a/lib/lp/bugs/stories/guided-filebug/xx-distro-guided-filebug-tags.rst
+++ b/lib/lp/bugs/stories/guided-filebug/xx-distro-guided-filebug-tags.rst
@@ -15,7 +15,7 @@ that deal with new package request with a certain tag.
     ...    'Please package CoolApp')
     >>> user_browser.getControl('Continue').click()
 
-On the next page, possible duplicates are displayed as ususal. No
+On the next page, possible duplicates are displayed as usual. No
 candidates were found for this summary, though.
 
     >>> print(find_main_content(user_browser.contents).decode_contents())
diff --git a/lib/lp/bugs/stories/guided-filebug/xx-ubuntu-filebug.rst b/lib/lp/bugs/stories/guided-filebug/xx-ubuntu-filebug.rst
index 016aba6..e4178a8 100644
--- a/lib/lp/bugs/stories/guided-filebug/xx-ubuntu-filebug.rst
+++ b/lib/lp/bugs/stories/guided-filebug/xx-ubuntu-filebug.rst
@@ -14,7 +14,7 @@ to a local page (the default configuration is for a page on the Ubuntu wiki).
     ... ubuntu_bug_filing_url: http://launchpad.test/+tour
     ... ''')
 
-Tring to navigate to the 'report a bug' page, redirects us to the alternative
+Trying to navigate to the 'report a bug' page redirects us to the alternative
 page.
 
     >>> user_browser.open('http://launchpad.test/ubuntu')
diff --git a/lib/lp/bugs/stories/webservice/xx-bug.rst b/lib/lp/bugs/stories/webservice/xx-bug.rst
index 718e63c..2e73f9f 100644
--- a/lib/lp/bugs/stories/webservice/xx-bug.rst
+++ b/lib/lp/bugs/stories/webservice/xx-bug.rst
@@ -1024,7 +1024,7 @@ it and its duplicate, bug_six.
     ...     bug_five['self_link'], 'unsubscribeFromDupes'))
     HTTP/1.1 200 Ok...
 
-Now bug_six has no subscibers.
+Now bug_six has no subscribers.
 
     >>> bug_six_subscriptions = webservice.get(
     ...     bug_six['subscriptions_collection_link']).jsonBody()
@@ -1053,7 +1053,7 @@ member_webservice, which is for an Ubuntu Team member.
     ...     person=webservice.getAbsoluteUrl('/~ubuntu-team')))
     HTTP/1.1 200 Ok...
 
-Now again, bug_six has no subscibers.
+Now again, bug_six has no subscribers.
 
     >>> bug_six_subscriptions = webservice.get(
     ...     bug_six['subscriptions_collection_link']).jsonBody()
diff --git a/lib/lp/bugs/templates/bugwatch-error-help.pt b/lib/lp/bugs/templates/bugwatch-error-help.pt
index 2e6ba06..6322dd3 100644
--- a/lib/lp/bugs/templates/bugwatch-error-help.pt
+++ b/lib/lp/bugs/templates/bugwatch-error-help.pt
@@ -173,7 +173,7 @@
       <h3>Unable to set the link to the Launchpad bug on the remote server</h3>
       <h4>What went wrong?</h4>
       <p>
-        The remote bug's status and comments were synchronized sucessfully
+        The remote bug's status and comments were synchronized successfully
         with Launchpad but Launchpad was unable to set the remote bug's
         link back to the relevant Launchpad bug.
       </p>
diff --git a/lib/lp/bugs/tests/bugs-emailinterface.rst b/lib/lp/bugs/tests/bugs-emailinterface.rst
index a50f117..5554e2b 100644
--- a/lib/lp/bugs/tests/bugs-emailinterface.rst
+++ b/lib/lp/bugs/tests/bugs-emailinterface.rst
@@ -752,7 +752,7 @@ be subscribed. Examples:
     ...                         for subscription in bug_four.subscriptions]
     True
 
-If we specify a non-existant user, an error message will be sent:
+If we specify a non-existent user, an error message will be sent:
 
     >>> submit_commands(bug_four, 'subscribe non_existant@xxxxxxxxxxxxx')
     >>> print_latest_email()
@@ -851,7 +851,7 @@ bug #5.
 
     >>> login(sampledata.USER_EMAIL)
 
-If we specify a non-existant user, an error message will be sent:
+If we specify a non-existent user, an error message will be sent:
 
     >>> submit_commands(bug_four, 'unsubscribe non_existant')
     >>> print_latest_email()
diff --git a/lib/lp/bugs/tests/test_bugtracker_components.py b/lib/lp/bugs/tests/test_bugtracker_components.py
index fca116d..ea91509 100644
--- a/lib/lp/bugs/tests/test_bugtracker_components.py
+++ b/lib/lp/bugs/tests/test_bugtracker_components.py
@@ -114,7 +114,7 @@ class TestBugTrackerWithComponents(TestCaseWithFactory):
         self.assertTrue(self.bug_tracker is not None)
 
         # Empty bugtrackers shouldn't return component groups
-        comp_group = self.bug_tracker.getRemoteComponentGroup("non-existant")
+        comp_group = self.bug_tracker.getRemoteComponentGroup("non-existent")
         self.assertEqual(comp_group, None)
 
         # Verify it contains no component groups
@@ -130,7 +130,7 @@ class TestBugTrackerWithComponents(TestCaseWithFactory):
         default_comp_group.addComponent("example-c")
 
         # Verify that retrieving an invalid component group returns nothing
-        comp_group = self.bug_tracker.getRemoteComponentGroup("non-existant")
+        comp_group = self.bug_tracker.getRemoteComponentGroup("non-existent")
         self.assertEqual(comp_group, None)
 
         # Now retrieve the component group we added
@@ -155,8 +155,8 @@ class TestBugTrackerWithComponents(TestCaseWithFactory):
         comp_group_iii.addComponent("example-gamma-2")
         comp_group_iii.addComponent("example-gamma-3")
 
-        # Retrieving a non-existant component group returns nothing
-        comp_group = self.bug_tracker.getRemoteComponentGroup("non-existant")
+        # Retrieving a non-existent component group returns nothing
+        comp_group = self.bug_tracker.getRemoteComponentGroup("non-existent")
         self.assertEqual(comp_group, None)
 
         # Now retrieve one of the real component groups
diff --git a/lib/lp/bugs/tests/test_bzremotecomponentfinder.py b/lib/lp/bugs/tests/test_bzremotecomponentfinder.py
index dee0d88..f33b94e 100644
--- a/lib/lp/bugs/tests/test_bzremotecomponentfinder.py
+++ b/lib/lp/bugs/tests/test_bzremotecomponentfinder.py
@@ -154,7 +154,7 @@ class TestBugzillaRemoteComponentFinder(TestCaseWithFactory):
         self.assertEqual(3, len(list(comp_group.components)))
         comp_group = lp_bugtracker.getRemoteComponentGroup("beta")
         self.assertEqual(1, len(list(comp_group.components)))
-        comp = comp_group.getComponent("non-existant")
+        comp = comp_group.getComponent("non-existent")
         self.assertIs(None, comp)
         comp = comp_group.getComponent("four")
         self.assertEqual("four", comp.name)
diff --git a/lib/lp/buildmaster/doc/buildqueue.rst b/lib/lp/buildmaster/doc/buildqueue.rst
index 1d282a2..2c47d15 100644
--- a/lib/lp/buildmaster/doc/buildqueue.rst
+++ b/lib/lp/buildmaster/doc/buildqueue.rst
@@ -92,8 +92,8 @@ set 'manual' attribute atomically. For this we use manualScore:
     (True, 1000)
 
 
-Dispatching and Reseting jobs
------------------------------
+Dispatching and Resetting jobs
+------------------------------
 
 The sampledata contains an active job, being built by the 'bob'
 builder.
diff --git a/lib/lp/code/doc/branchmergeproposal.rst b/lib/lp/code/doc/branchmergeproposal.rst
index b222778..2156c00 100644
--- a/lib/lp/code/doc/branchmergeproposal.rst
+++ b/lib/lp/code/doc/branchmergeproposal.rst
@@ -8,7 +8,7 @@ The branch to be merged is referred to as the "source branch", and the branch
 that is being merged into is referred to as the "target branch".
 
 In the early phases of development of this feature there was often a mixing of
-terms where the term "merge proposal" was used interchangably with "code
+terms where the term "merge proposal" was used interchangeably with "code
 review" which caused some confusion.
 
 - **Merge Proposal:** indicates that one branch should be merged with another.
diff --git a/lib/lp/code/mail/tests/test_codehandler.py b/lib/lp/code/mail/tests/test_codehandler.py
index 4788904..cbfdce9 100644
--- a/lib/lp/code/mail/tests/test_codehandler.py
+++ b/lib/lp/code/mail/tests/test_codehandler.py
@@ -183,8 +183,8 @@ class TestCodeHandler(TestCaseWithFactory):
         self.assertFalse(self.code_handler.process(mail,
             'foo@xxxxxxxxxxxxxxxxxxx', None))
 
-    def test_processNonExistantAddress(self):
-        """When a non-existant address is supplied, it returns False."""
+    def test_processNonExistentAddress(self):
+        """When a non-existent address is supplied, it returns False."""
         mail = self.factory.makeSignedMessage('<my-id>')
         switch_dbuser(config.processmail.dbuser)
         self.assertTrue(self.code_handler.process(mail,
diff --git a/lib/lp/code/model/branchmergeproposal.py b/lib/lp/code/model/branchmergeproposal.py
index 2e61aaf..ca35b6a 100644
--- a/lib/lp/code/model/branchmergeproposal.py
+++ b/lib/lp/code/model/branchmergeproposal.py
@@ -1255,7 +1255,7 @@ class BranchMergeProposal(SQLBase, BugLinkTargetMixin):
 
         If the proposal has been merged, then we stop at the merged date. If
         it is rejected, we stop at the reviewed date. For superseded
-        proposals, it should ideally use the non-existant date_last_modified,
+        proposals, it should ideally use the non-existent date_last_modified,
         but could use the last comment date.
         """
         status = self.queue_status
diff --git a/lib/lp/code/stories/webservice/xx-code-import.rst b/lib/lp/code/stories/webservice/xx-code-import.rst
index c864fdf..efca23e 100644
--- a/lib/lp/code/stories/webservice/xx-code-import.rst
+++ b/lib/lp/code/stories/webservice/xx-code-import.rst
@@ -99,7 +99,7 @@ There is a link on the branch object
     >>> print(representation['code_import_link'])
     http://.../~import-owner/scruffbuntu/manic/scruff/import/+code-import
 
-and there is information available about the import itsef.
+and there is information available about the import itself.
 
     >>> import_url = representation['code_import_link']
     >>> response = import_webservice.get(import_url)
@@ -221,7 +221,7 @@ We can create a Git-to-Git import.
     >>> print(representation['date_last_successful'])
     None
 
-We can also create an import targetting a source package.
+We can also create an import targeting a source package.
 
     >>> login(ANONYMOUS)
     >>> source_package_url = (
@@ -256,7 +256,7 @@ We can also create an import targetting a source package.
     >>> print(representation['date_last_successful'])
     None
 
-We can create a Git-to-Git import targetting a distribution source package.
+We can create a Git-to-Git import targeting a distribution source package.
 
     >>> login(ANONYMOUS)
     >>> distro_source_package_url = (
diff --git a/lib/lp/code/xmlrpc/tests/test_codehosting.py b/lib/lp/code/xmlrpc/tests/test_codehosting.py
index 4921642..d665989 100644
--- a/lib/lp/code/xmlrpc/tests/test_codehosting.py
+++ b/lib/lp/code/xmlrpc/tests/test_codehosting.py
@@ -341,7 +341,7 @@ class CodehostingTest(WithScenarios, TestCaseWithFactory):
         self.assertEqual(BranchType.HOSTED, branch.branch_type)
 
     def test_createBranch_bad_product(self):
-        # Creating a branch for a non-existant product fails.
+        # Creating a branch for a non-existent product fails.
         owner = self.factory.makePerson()
         name = self.factory.getUniqueString()
         message = "Project 'no-such-product' does not exist."
diff --git a/lib/lp/registry/doc/person-karma.rst b/lib/lp/registry/doc/person-karma.rst
index 6a0a4d8..d3712b3 100644
--- a/lib/lp/registry/doc/person-karma.rst
+++ b/lib/lp/registry/doc/person-karma.rst
@@ -2,7 +2,7 @@
 People karma
 ============
 
-In Launchpad, everytime a user performs an action, we give them some karma
+In Launchpad, every time a user performs an action, we give them some karma
 points. These karma points are stored in the KarmaAction table and the
 assignment to a user is made in the Karma table. The method used to calculate
 a users karma is time-dependent, because we want to give more karma points for
diff --git a/lib/lp/registry/doc/projectgroup.rst b/lib/lp/registry/doc/projectgroup.rst
index c621f39..6913c3b 100644
--- a/lib/lp/registry/doc/projectgroup.rst
+++ b/lib/lp/registry/doc/projectgroup.rst
@@ -78,7 +78,7 @@ Make sure that a project provides the IProjectGroup interface.
 If there is no project with the specified name, a NotFoundError will be
 raised.
 
-    >>> projectset['non-existant']
+    >>> projectset['non-existent']
     Traceback (most recent call last):
     ...
     lp.app.errors.NotFoundError: ...
diff --git a/lib/lp/registry/javascript/structural-subscription.js b/lib/lp/registry/javascript/structural-subscription.js
index a380679..9b005ff 100644
--- a/lib/lp/registry/javascript/structural-subscription.js
+++ b/lib/lp/registry/javascript/structural-subscription.js
@@ -1816,7 +1816,7 @@ function make_add_subscription_success_handler(config) {
             Y.lp.anim.green_flash({node: anim_node}).run();
         } else {
             // Since there is no filter description to update we need another
-            // way to tell the user that the subscription was sucessfully
+            // way to tell the user that the subscription was successfully
             // added.  We'll do that by creating an informational message box.
             var description = filter.get('description');
             var header = Y.Node.create('<div/>')
diff --git a/lib/lp/registry/tests/test_mailinglistapi.py b/lib/lp/registry/tests/test_mailinglistapi.py
index c992116..c92aa48 100644
--- a/lib/lp/registry/tests/test_mailinglistapi.py
+++ b/lib/lp/registry/tests/test_mailinglistapi.py
@@ -114,7 +114,7 @@ class MailingListAPITestCase(TestCaseWithFactory):
         self.assertEqual(private_expected, sorted(all_info['team-b']))
 
     def test_getMembershipInformation_no_team(self):
-        # Requesting a non-existant team will have None for the subcribers
+        # Requesting a non-existent team will have None for the subscribers
         all_info = self.api.getMembershipInformation(['not-team'])
         self.assertEqual(['not-team'], sorted(all_info.keys()))
         self.assertIs(None, all_info['not-team'])
diff --git a/lib/lp/services/gpg/doc/gpg-encryption.rst b/lib/lp/services/gpg/doc/gpg-encryption.rst
index 21da208..4d6af02 100644
--- a/lib/lp/services/gpg/doc/gpg-encryption.rst
+++ b/lib/lp/services/gpg/doc/gpg-encryption.rst
@@ -52,7 +52,7 @@ Note fingerprint is also unicode.
     >>> key = gpghandler.retrieveKey(fingerprint)
     >>> cipher = gpghandler.encryptContent(content.encode('utf-8'), key)
 
-cipher constains the encrypted content.
+cipher contains the encrypted content.
 
 Storing the raw password may compromise the security, but is the
 only way we can decrypt the cipher content.
@@ -65,7 +65,7 @@ voilá, the same content shows up again.
     >>> print(backslashreplace(plain.decode('utf-8')))
     \ufcber
 
-Verify if the encrytion process support passing another charset string
+The encryption process supports passing another charset string.
 
     >>> content = u'a\xe7ucar'
     >>> cipher = gpghandler.encryptContent(content.encode('iso-8859-1'), key)
diff --git a/lib/lp/services/librarian/doc/librarian.rst b/lib/lp/services/librarian/doc/librarian.rst
index b5c3daf..100994c 100644
--- a/lib/lp/services/librarian/doc/librarian.rst
+++ b/lib/lp/services/librarian/doc/librarian.rst
@@ -272,7 +272,7 @@ You can also set the expiry date on the file this way too:
     >>> transaction.abort()
 
 To check the expiry is set, we need to extract the alias id from the
-URL. remoteAddFile deliberatly returns the URL instead of the alias id
+URL. remoteAddFile deliberately returns the URL instead of the alias id
 because, except for test cases, the URL is the only thing useful
 (because the client can't see the database records yet).
 
diff --git a/lib/lp/services/messages/doc/message.rst b/lib/lp/services/messages/doc/message.rst
index dbdeb32..d052d8c 100644
--- a/lib/lp/services/messages/doc/message.rst
+++ b/lib/lp/services/messages/doc/message.rst
@@ -194,7 +194,7 @@ Only those chunks of content type text/plain with content-disposition
 text/plain chunk has a filename, it is considered to be an attachment
 and is stored as a blob, as well as text/plain chunks with
 content-disposition "attachment". Chunks with content-disposition
-"attachment" do not need a file name to be stored as blobs. If the chunck
+"attachment" do not need a file name to be stored as blobs. If the chunk
 doesn't specify a Content-Type, application/octet-stream will be used as
 a default. If the chunk doesn't specify a charset, latin-1 will be
 used as a default.
diff --git a/lib/lp/services/webapp/doc/test_adapter.rst b/lib/lp/services/webapp/doc/test_adapter.rst
index 8ee3ca1..8c535d4 100644
--- a/lib/lp/services/webapp/doc/test_adapter.rst
+++ b/lib/lp/services/webapp/doc/test_adapter.rst
@@ -274,7 +274,7 @@ to fake how long things take.
     10000ms
     >>> time_travel(0.6) # Forward in time 0.6 seconds, now over precision
 
-This invokation, the PostgreSQL statement timeout will be updated before
+This invocation, the PostgreSQL statement timeout will be updated before
 issuing the SQL command as we have exceeded the precision period:
 
     >>> store.execute('SELECT TRUE', noresult=True)
@@ -283,7 +283,7 @@ issuing the SQL command as we have exceeded the precision period:
     >>> time_travel(8.89) # 0.01s remaining before hard timeout
 
 
-This final invokation, we will actually sleep to ensure that the
+This final invocation, we will actually sleep to ensure that the
 timeout being reported by PostgreSQL is actually working:
 
     >>> store.execute('SELECT pg_sleep(0.2)', noresult=True)
@@ -398,7 +398,7 @@ affect other threads:
     >>> clear_request_started()
 
 Similarly, starting a new request in another thread will not reset the
-remove the timout:
+remove the timeout:
 
     >>> started_request = threading.Event()
     >>> statement_issued = threading.Event()
diff --git a/lib/lp/soyuz/doc/pocketchroot.rst b/lib/lp/soyuz/doc/pocketchroot.rst
index 3686ebe..30a6343 100644
--- a/lib/lp/soyuz/doc/pocketchroot.rst
+++ b/lib/lp/soyuz/doc/pocketchroot.rst
@@ -61,7 +61,7 @@ the chroot:
     >>> p_chroot2 == p_chroot1
     True
 
-Ensure chroot was updated by retriving it from DB again:
+Ensure chroot was updated by retrieving it from DB again:
 
     >>> hoary_i386.getPocketChroot(PackagePublishingPocket.RELEASE).chroot.id
     2
diff --git a/lib/lp/soyuz/doc/soyuz-set-of-uploads.rst b/lib/lp/soyuz/doc/soyuz-set-of-uploads.rst
index 933c880..5a768f8 100644
--- a/lib/lp/soyuz/doc/soyuz-set-of-uploads.rst
+++ b/lib/lp/soyuz/doc/soyuz-set-of-uploads.rst
@@ -608,7 +608,7 @@ run. Rewriting the Release files with these files missing produces a
 broken distro.
 
 We will make two publisher runs, deleting the uncompressed index files
-inbetween, and verify that the second publisher run doesn't screw up the
+in between, and verify that the second publisher run doesn't screw up the
 release files in the way bug-54039 infected code would.
 
 First a couple helpers.
diff --git a/lib/lp/soyuz/stories/ppa/xx-delete-packages.rst b/lib/lp/soyuz/stories/ppa/xx-delete-packages.rst
index 6f44763..2beef25 100644
--- a/lib/lp/soyuz/stories/ppa/xx-delete-packages.rst
+++ b/lib/lp/soyuz/stories/ppa/xx-delete-packages.rst
@@ -139,7 +139,7 @@ performed. The results should not include the just-deleted source.
 
 Note that we will also include a unquoted portion of text in the
 deletion comment, simulating a XSS attack. The current code will
-automaticaly quote the text entered by the user resulting in an
+automatically quote the text entered by the user resulting in an
 entirely readable content.
 
     >>> admin_browser.getControl("Filter").click()
@@ -464,7 +464,7 @@ corresponding expandable area, they can see that the 'Built packages'
 section is omitted, however the source and binary files can be
 downloaded from librarian.
 
-Please note also how the deletion comment is diplayed in its entirety as
+Please note also how the deletion comment is displayed in its entirety as
 opposed to being truncated after the first 20 characters.
 
     >>> user_browser.open(
diff --git a/lib/lp/soyuz/stories/soyuz/xx-distroseries-sources.rst b/lib/lp/soyuz/stories/soyuz/xx-distroseries-sources.rst
index 647d81a..ba42eb2 100644
--- a/lib/lp/soyuz/stories/soyuz/xx-distroseries-sources.rst
+++ b/lib/lp/soyuz/stories/soyuz/xx-distroseries-sources.rst
@@ -93,7 +93,7 @@ published version) if they are available:
     http://launchpad.test/ubuntu/+archive/primary/+sourcefiles/mozilla-firefox/0.9/firefox_0.9.2.orig.tar.gz
 
 This page also provides links to the binary packages generated by this
-source in a specfic architecture:
+source in a specific architecture:
 
     >>> print(extract_text(find_tag_by_id(content, 'binaries')))
     mozilla-firefox
@@ -363,7 +363,7 @@ published version) if they are available:
     http://launchpad.test/ubuntu/+archive/partner/+sourcefiles/commercialpackage/1.0-1/commercialpackage_1.0-1.dsc
 
 This page also provides links to the binary packages generated by this
-source in a specfic architecture:
+source in a specific architecture:
 
     >>> print(extract_text(find_tag_by_id(browser.contents, 'binaries')))
     commercialpackage (i386)
diff --git a/lib/lp/soyuz/tests/test_build.py b/lib/lp/soyuz/tests/test_build.py
index 36bb5a3..b61a01a 100644
--- a/lib/lp/soyuz/tests/test_build.py
+++ b/lib/lp/soyuz/tests/test_build.py
@@ -128,7 +128,7 @@ class TestBuild(TestCaseWithFactory):
             expected_changesfile, build.upload_changesfile.filename)
         expected_changesfile_url = '%s/%s' % (url_start, expected_changesfile)
         self.assertEqual(expected_changesfile_url, build.changesfile_url)
-        # Since this build was sucessful, it can not be retried
+        # Since this build was successful, it can not be retried
         self.assertFalse(build.can_be_retried)
 
     def test_current_component(self):
diff --git a/lib/lp/soyuz/tests/test_hasbuildrecords.py b/lib/lp/soyuz/tests/test_hasbuildrecords.py
index bcb15f1..95bcafd 100644
--- a/lib/lp/soyuz/tests/test_hasbuildrecords.py
+++ b/lib/lp/soyuz/tests/test_hasbuildrecords.py
@@ -252,7 +252,7 @@ class TestSourcePackageHasBuildRecords(TestHasBuildRecordsInterface):
                 SourcePackagePublishingHistory, sourcepackagerelease=spr
                 ).set(sourcepackagenameID=gedit_name.id)
 
-        # Set them as sucessfully built
+        # Set them as successfully built
         for build in self.builds:
             build.updateStatus(BuildStatus.BUILDING)
             build.updateStatus(BuildStatus.FULLYBUILT)
diff --git a/lib/lp/soyuz/tests/test_packagecloner.py b/lib/lp/soyuz/tests/test_packagecloner.py
index a527f9a..664b56c 100644
--- a/lib/lp/soyuz/tests/test_packagecloner.py
+++ b/lib/lp/soyuz/tests/test_packagecloner.py
@@ -421,7 +421,7 @@ class PackageClonerTests(TestCaseWithFactory):
             for source_key in source_keys:
                 source = getUtility(IPublishingSet).getByIdAndArchive(
                     source_key, archive, source=True)
-                self.assertNotEqual(source, None, "Got a non-existant "
+                self.assertNotEqual(source, None, "Got a non-existent "
                         "source publishing record: %d" % source_key)
                 naked_source = removeSecurityProxy(source)
                 tuples.append(
diff --git a/lib/lp/translations/doc/poimport.rst b/lib/lp/translations/doc/poimport.rst
index 10559a3..c8f3496 100644
--- a/lib/lp/translations/doc/poimport.rst
+++ b/lib/lp/translations/doc/poimport.rst
@@ -663,7 +663,7 @@ We'll import a POFile with 3 plural forms into this POFile:
     ... msgstr[2] "Third form %%d"
     ... ''' % datetime.datetime.now(UTC).isoformat())  # noqa
 
-We now import this POFile as this language's translation for the soure
+We now import this POFile as this language's translation for the source
 package:
 
     >>> entry = translation_import_queue.addOrUpdateEntry(
diff --git a/lib/lp/translations/doc/rosetta-karma.rst b/lib/lp/translations/doc/rosetta-karma.rst
index 524c48c..7ef7415 100644
--- a/lib/lp/translations/doc/rosetta-karma.rst
+++ b/lib/lp/translations/doc/rosetta-karma.rst
@@ -165,7 +165,7 @@ assigned to the team, our karma_helper will print it out here.
     >>> transaction.commit()
 
 
-We attach the new file as comming from upstream, that means that we
+We attach the new file as coming from upstream, that means that we
 will give karma only for the upload action.
 
     >>> potemplate = POTemplate.get(1)
@@ -203,7 +203,7 @@ case, we will give karma *only* because the translation change.
     ... msgstr "bars"
     ... ''' % datetime.datetime.now(UTC).isoformat())
 
-We attach the new file as not comming from upstream.
+We attach the new file as not coming from upstream.
 
     >>> potemplate = POTemplate.get(1)
     >>> pofile = potemplate.getPOFileByLang('es')
diff --git a/lib/lp/translations/stories/productseries/xx-productseries-translations.rst b/lib/lp/translations/stories/productseries/xx-productseries-translations.rst
index 5ce1df9..689e619 100644
--- a/lib/lp/translations/stories/productseries/xx-productseries-translations.rst
+++ b/lib/lp/translations/stories/productseries/xx-productseries-translations.rst
@@ -378,8 +378,8 @@ the new series.
     Set up translations for a series...
     evo-new series — manual or automatic...
 
-For each series there is a link for accesing the series translations
-page togheter with link for uploading a template from that series
+For each series there is a link for accessing the series translations
+page together with link for uploading a template from that series
 (manual) and setting automatic imports.
 
     >>> print(admin_browser.getLink('Evolution evo-new series').url)
diff --git a/lib/lp/translations/stories/standalone/xx-pofile-translate-needs-review-flags-preserved.rst b/lib/lp/translations/stories/standalone/xx-pofile-translate-needs-review-flags-preserved.rst
index cab3aef..2d42d72 100644
--- a/lib/lp/translations/stories/standalone/xx-pofile-translate-needs-review-flags-preserved.rst
+++ b/lib/lp/translations/stories/standalone/xx-pofile-translate-needs-review-flags-preserved.rst
@@ -61,8 +61,8 @@ But a new suggestion is provided for this message.
     New suggestion
 
 
-Reseting translations
----------------------
+Resetting translations
+----------------------
 
 If the 'Someone should review this translation' checkbox is used without
 adding any new suggestions or adding an empty string, the current translation
@@ -91,7 +91,7 @@ translation, while no suggestions are displayed.
     Located in ...
 
 'Someone should review this translation' can be used to reset the translation,
-when a new emtpy translation is added and marked as needing review.
+when a new empty translation is added and marked as needing review.
 After clicking 'Save & Continue', all translations entered for this
 message will be listed as suggestions.
 
diff --git a/lib/lp/translations/stories/standalone/xx-rosetta-sourcepackage-list.rst b/lib/lp/translations/stories/standalone/xx-rosetta-sourcepackage-list.rst
index f418e60..dcb6e6c 100644
--- a/lib/lp/translations/stories/standalone/xx-rosetta-sourcepackage-list.rst
+++ b/lib/lp/translations/stories/standalone/xx-rosetta-sourcepackage-list.rst
@@ -2,7 +2,7 @@ Sourcepackage translations
 ==========================
 
 This page shows a list of PO templates contained a specific source package
-in a particular distibution series. In this case, we're asking for the
+in a particular distribution series. In this case, we're asking for the
 translation overview for Evolution in Hoary.
 
 Make the test browser look like it's coming from an arbitrary South African
diff --git a/lib/lp/translations/stories/standalone/xx-test-potlists.rst b/lib/lp/translations/stories/standalone/xx-test-potlists.rst
index e57b839..74f5eb0 100644
--- a/lib/lp/translations/stories/standalone/xx-test-potlists.rst
+++ b/lib/lp/translations/stories/standalone/xx-test-potlists.rst
@@ -1,4 +1,4 @@
-Check that we can get a potlist for a source pacakge that has potemplates:
+Check that we can get a potlist for a source package that has potemplates:
 
     >>> print(http(br"""
     ... GET /ubuntu/hoary/+source/evolution/+potlist HTTP/1.1