← Back to team overview

launchpad-reviewers team mailing list archive

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

 

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

Commit message:
Fix remaining spelling errors in *.rst

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

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

This is now enforced.  `codespell` doesn't have a mechanism for making local exceptions, so I applied a few per-file exclusions in `.pre-commit-config.yaml` to cope with cases that are too awkward to deal with otherwise.
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of ~cjwatson/launchpad:codespell-rst into launchpad:master.
diff --git a/.codespell-ignore b/.codespell-ignore
index 8ff60e4..1d1422b 100644
--- a/.codespell-ignore
+++ b/.codespell-ignore
@@ -1,9 +1,13 @@
 buildd
 changee
+coo
 distroname
 falsy
 fpr
+importd
 iterm
+lightening
 serieses
+sting
 tread
 troup
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index c1e3cd9..dab74e2 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -86,7 +86,16 @@ repos:
     hooks:
     -   id: codespell
         args: ["-I", ".codespell-ignore"]
-        files: ^(doc/.*\.rst|.*\.js)$
+        files: ^(.*\.js|.*\.rst)$
+        exclude: |
+          (?x)^(
+            # URL-encoding of "foö".
+            lib/lp/bugs/doc/bugattachments\.rst
+            # Quoted-printable encoding.
+            |lib/lp/code/doc/branch-notifications\.rst
+            # Word truncated by stemming.
+            |lib/lp/services/database/doc/textsearching\.rst
+          )$
 -   repo: https://github.com/get-woke/woke
     rev: v0.19.0
     hooks:
diff --git a/lib/lp/blueprints/stories/sprints/xx-sprints.rst b/lib/lp/blueprints/stories/sprints/xx-sprints.rst
index 70ed81e..daaa223 100644
--- a/lib/lp/blueprints/stories/sprints/xx-sprints.rst
+++ b/lib/lp/blueprints/stories/sprints/xx-sprints.rst
@@ -77,7 +77,7 @@ First we'll test the name field validator.
     ...
     There is 1 error.
     <BLANKLINE>
-    Invalid name 'ltsp_on_steroids!'. Names must be at least two characte...
+    Invalid name 'ltsp_on_steroids!'. Names must be at least two characters...
 
 Register a sprint with the same name of a existing one also returns a
 nice error message
diff --git a/lib/lp/bugs/doc/bugattachments.rst b/lib/lp/bugs/doc/bugattachments.rst
index 58e16f1..f33731b 100644
--- a/lib/lp/bugs/doc/bugattachments.rst
+++ b/lib/lp/bugs/doc/bugattachments.rst
@@ -286,7 +286,7 @@ attachment was added.
 
 Let's try uploading a file with some weird characters in them:
 
-    >>> filecontent.filename = "fo\xf6 bar"
+    >>> filecontent.filename = "foö bar"
     >>> add_request = LaunchpadTestRequest(
     ...     method="POST",
     ...     form={
diff --git a/lib/lp/services/database/doc/textsearching.rst b/lib/lp/services/database/doc/textsearching.rst
index dc934bf..e6da7fa 100644
--- a/lib/lp/services/database/doc/textsearching.rst
+++ b/lib/lp/services/database/doc/textsearching.rst
@@ -65,7 +65,7 @@ If a query contains multiple words, an AND query is performed:
     ... )
     Carlos Valdivia Yagüe
 
-This can also be explicity performed by joining the words with 'and':
+This can also be explicitly performed by joining the words with 'and':
 
     >>> runsql(
     ...     """
@@ -171,7 +171,7 @@ Boolean operations are allowed
     hi&!dad <=> 'hi' & !'dad'
 
 
-Brackets are allowed to specify precidence
+Brackets are allowed to specify precedence
 
     >>> ftq("(HI OR HELLO) AND mom")
     (hi|hello)&mom <=> ( 'hi' | 'hello' ) & 'mom'
@@ -673,7 +673,7 @@ on Ubuntu) - so we are disabling this and reworking from the ground up.
 nl_term_candidates()
 ~~~~~~~~~~~~~~~~~~~~
 
-To find the terms in a search phrase that are canditates for the search,
+To find the terms in a search phrase that are candidates for the search,
 we can use the nl_term_candidates() function. This function uses ftq()
 internally to removes stop words and other words that will be ignored
 by tsearch2. All words are also stemmed.
@@ -692,7 +692,7 @@ It returns an empty list when there is only stop-words in the query:
     >>> nl_term_candidates("how do I do this?")
     []
 
-Except for the hyphenation character, all non-word caracters are ignored:
+Except for the hyphenation character, all non-word characters are ignored:
 
     >>> for term in nl_term_candidates(
     ...     "Will the ''|'' character (inside a ''quoted'' string) " "work???"
diff --git a/lib/lp/services/database/tests/decoratedresultset.rst b/lib/lp/services/database/tests/decoratedresultset.rst
index 62ed0a7..be98ffb 100644
--- a/lib/lp/services/database/tests/decoratedresultset.rst
+++ b/lib/lp/services/database/tests/decoratedresultset.rst
@@ -39,7 +39,7 @@ ResultSet:
 copy()
 ------
 
-The decorated copy method calls the orgininal result sets copy method
+The decorated copy method calls the original result sets copy method
 and then returns a new decorated result set composed of the new
 copy:
 
diff --git a/lib/lp/services/doc/limitedlist.rst b/lib/lp/services/doc/limitedlist.rst
index 955298c..dd13b45 100644
--- a/lib/lp/services/doc/limitedlist.rst
+++ b/lib/lp/services/doc/limitedlist.rst
@@ -101,7 +101,7 @@ length limit.
     >>> list_four
     <LimitedList(3, [2, 3, 4])>
 
-Similary, a LimitedList does not exceed it length limit, when we extend()
+Similarly, a LimitedList does not exceed its length limit when we extend()
 it.
 
     >>> list_five = LimitedList(3, [1])
diff --git a/lib/lp/services/mail/doc/sending-mail.rst b/lib/lp/services/mail/doc/sending-mail.rst
index 5a6c0db..580dd66 100644
--- a/lib/lp/services/mail/doc/sending-mail.rst
+++ b/lib/lp/services/mail/doc/sending-mail.rst
@@ -11,7 +11,7 @@ simple_mail can be used to send mail easily:
     ...     body="Content",
     ... )
 
-The mail get sent when the transaction gets commited:
+The mail get sent when the transaction gets committed:
 
     >>> import transaction
     >>> transaction.commit()
@@ -209,7 +209,7 @@ surrounded by quotes and quoted if necessary:
     ('Foo [Baz] " Bar', 'foo.bar@xxxxxxxxxxxxx')
 
 
-If we pass a unicode object to send_mail, it will try and covert it.  If a
+If we pass a unicode object to send_mail, it will try and convert it.  If a
 non-ASCII str object is passed, it will throw a UnicodeDecodeError.
 
     >>> simple_sendmail(
diff --git a/lib/lp/services/messages/doc/message.rst b/lib/lp/services/messages/doc/message.rst
index 21895f9..8a643be 100644
--- a/lib/lp/services/messages/doc/message.rst
+++ b/lib/lp/services/messages/doc/message.rst
@@ -502,7 +502,7 @@ otherwise reject the method as invalid.
 
     >>> msg_bytes = b"""\
     ... From: foo.bar@xxxxxxxxxxxxx
-    ... Subject: I have no date! Oh teh noes!
+    ... Subject: I have no date! Oh no!
     ... Message-Id: <therearenofnords>
     ...
     ... In search of cheesy comestibles.
diff --git a/lib/lp/services/scripts/doc/launchpad-scripts.rst b/lib/lp/services/scripts/doc/launchpad-scripts.rst
index 704b3a3..b193905 100644
--- a/lib/lp/services/scripts/doc/launchpad-scripts.rst
+++ b/lib/lp/services/scripts/doc/launchpad-scripts.rst
@@ -6,7 +6,7 @@ lp.services.scripts.base. This, along with the LaunchpadCronScript
 specialization, implement common behaviour for all Launchpad command
 line scripts.
 
-Scripts report their executution using the standard Python logging
+Scripts report their execution using the standard Python logging
 module, with command line arguments and logging setup provided by
 LaunchpadScript. Unhandled exceptions from scripts are automatically
 sent to the Python logging system. Cronscripts (scripts using
diff --git a/lib/lp/services/webapp/doc/canonical_url.rst b/lib/lp/services/webapp/doc/canonical_url.rst
index f2825cc..d7b36cc 100644
--- a/lib/lp/services/webapp/doc/canonical_url.rst
+++ b/lib/lp/services/webapp/doc/canonical_url.rst
@@ -218,7 +218,7 @@ normal way to do this.  Normally, we'd just say
 
   parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
 
-But, here, I want to test the variant of the zcml directive that specifes
+But, here, I want to test the variant of the zcml directive that specifies
 an adapter.
 
     >>> from lp.services.webapp.interfaces import ILaunchpadRoot
diff --git a/lib/lp/services/webapp/doc/navigation.rst b/lib/lp/services/webapp/doc/navigation.rst
index 522f5c7..bb260b4 100644
--- a/lib/lp/services/webapp/doc/navigation.rst
+++ b/lib/lp/services/webapp/doc/navigation.rst
@@ -529,11 +529,11 @@ with the remainder of the URL and or query string.
     301
 
     >>> request.traversal_stack = ["LaunchpadMeeting"]
-    >>> request.query_string = "hilight=Time"
+    >>> request.query_string = "highlight=Time"
     >>> print(navigation5.publishTraverse(request, "+foo")())
     <BLANKLINE>
     >>> print(request.response.redirected_to)
-    http://wiki.canonical.com/LaunchpadMeeting?hilight=Time
+    http://wiki.canonical.com/LaunchpadMeeting?highlight=Time
     >>> print(request.response.status)
     303
 
diff --git a/lib/lp/services/worlddata/stories/webservice/xx-language.rst b/lib/lp/services/worlddata/stories/webservice/xx-language.rst
index 48a6220..90f4d47 100644
--- a/lib/lp/services/worlddata/stories/webservice/xx-language.rst
+++ b/lib/lp/services/worlddata/stories/webservice/xx-language.rst
@@ -26,8 +26,8 @@ The language information from Launchpad can be queried using
     True
 
 
-Accesing all or visible languages through API
----------------------------------------------
+Accessing all or visible languages through API
+----------------------------------------------
 
 The list of all languages visible by default in Launchpad can by obtained
 at '/+languages'.
diff --git a/lib/lp/soyuz/browser/tests/archive-views.rst b/lib/lp/soyuz/browser/tests/archive-views.rst
index bcd4d06..fd073db 100644
--- a/lib/lp/soyuz/browser/tests/archive-views.rst
+++ b/lib/lp/soyuz/browser/tests/archive-views.rst
@@ -609,7 +609,7 @@ is a copy archive.
 ArchivePackageDeletionView
 ==========================
 
-We use ArchivePackageDeletionView to provide the mechnisms used to
+We use ArchivePackageDeletionView to provide the mechanisms used to
 delete packages from a PPA via the UI.
 
 This view is only accessible by users with 'launchpad.Edit' permission
@@ -664,7 +664,7 @@ filtered results.
     ...
     pmount 0.1-1 in warty
 
-The 'name_filter' is decoded as UTF-8 before futher processing. If it
+The 'name_filter' is decoded as UTF-8 before further processing. If it
 did not, the storm query compiler would raise an error, because it can
 only deal with unicode variables.
 
@@ -746,7 +746,7 @@ situation and ignore it. See bug #185922 for reference.
 ArchiveEditDependenciesView
 ===========================
 
-We use ArchiveEditDependenciesView to provide the mechnisms used to
+We use ArchiveEditDependenciesView to provide the mechanisms used to
 add and/or remove archive dependencies for a PPA via the UI.
 
 This view is only accessible by users with 'launchpad.Edit' permission
@@ -836,7 +836,7 @@ dependency. Each element has:
 
  * value: dependency IArchive,
  * token: dependency IArchive.owner,
- * title: link to the dependency IArchive in Launchpad redered as the
+ * title: link to the dependency IArchive in Launchpad rendered as the
           dependency title.
 
     >>> [dependency] = view.widgets.get("selected_dependencies").vocabulary
diff --git a/lib/lp/soyuz/doc/archive.rst b/lib/lp/soyuz/doc/archive.rst
index d260e89..b564b12 100644
--- a/lib/lp/soyuz/doc/archive.rst
+++ b/lib/lp/soyuz/doc/archive.rst
@@ -1348,7 +1348,7 @@ private.
     PPA named myprivateppa for Celso Providelo
 
 'getLatestPPASourcePublicationsForDistribution' returns up to 5
-lastest source publications available for a given distribution ordered
+latest source publications available for a given distribution ordered
 by descending 'datecreated'.
 
     >>> latest_uploads = (
diff --git a/lib/lp/soyuz/doc/buildd-mass-retry.rst b/lib/lp/soyuz/doc/buildd-mass-retry.rst
index 603b050..680371c 100644
--- a/lib/lp/soyuz/doc/buildd-mass-retry.rst
+++ b/lib/lp/soyuz/doc/buildd-mass-retry.rst
@@ -22,7 +22,7 @@ Also, can combine the types of failure we allow to be retried:
  * -D: retry builds marked as MANUALDEPWAIT
  * -C: retry builds marked as CHROOTWAIT
 
-The available types can be combined acording the situation.
+The available types can be combined according to the situation.
 
 The script provides dry-run mode (-N).
 
diff --git a/lib/lp/soyuz/doc/distribution.rst b/lib/lp/soyuz/doc/distribution.rst
index a0e13e2..485fa14 100644
--- a/lib/lp/soyuz/doc/distribution.rst
+++ b/lib/lp/soyuz/doc/distribution.rst
@@ -152,8 +152,8 @@ Retrieving only pending-acceptance PPAs
 ---------------------------------------
 
 'getPendingAcceptancePPAs' lookup will only return PPA which have
-Package Upload (queue) records in ACCEPTED state, it it used in
-'process-accepted' in '--ppa' mode to avoid quering all PPAs:
+Package Upload (queue) records in ACCEPTED state.  It is used in
+'process-accepted' in '--ppa' mode to avoid querying all PPAs:
 
 Nothing is pending-acceptance in sampledata:
 
diff --git a/lib/lp/soyuz/doc/distroseriesqueue.rst b/lib/lp/soyuz/doc/distroseriesqueue.rst
index 4b61f79..b8ebcf4 100644
--- a/lib/lp/soyuz/doc/distroseriesqueue.rst
+++ b/lib/lp/soyuz/doc/distroseriesqueue.rst
@@ -397,7 +397,7 @@ has a similar behaviour):
     1.0
 
 The upload admin can not accept both since we check unique
-(name, version) accross distribution:
+(name, version) across distribution:
 
     >>> dup_one.setAccepted()
     >>> dup_one.status == PackageUploadStatus.ACCEPTED
diff --git a/lib/lp/soyuz/doc/gina.rst b/lib/lp/soyuz/doc/gina.rst
index 97d53d5..ae17b6e 100644
--- a/lib/lp/soyuz/doc/gina.rst
+++ b/lib/lp/soyuz/doc/gina.rst
@@ -83,7 +83,7 @@ packages successfully (at least partially):
    * libcap, a source package which generates 3 binary packages, and
      whose version number contains an epoch. It is not in the Breezy
      Sources list, but some binaries are in the Packages file. However, these
-     binaries are unchaged in Breezy.
+     binaries are unchanged in Breezy.
    * ubuntu-meta, a source package that generates 3 binary packages in
      Hoary and 5 in breezy. However, its breezy version is /not/ listed in the
      Sources list, so the binary packages will need to discover it.
@@ -114,7 +114,7 @@ And two completely broken packages:
      Sources and Packages, though.
 
    * clearlooks, a source package with no binaries listed, and which has
-     a DSC file that refers to an inexistant tar.gz.
+     a DSC file that refers to a nonexistent tar.gz.
 
 Let's set up the filesystem:
 
@@ -238,7 +238,7 @@ Check that x11proto-damage has its Build-Depends-Indep value correctly set:
     >>> print(x11p.builddependsindep)
     debhelper (>= 4.0.0)
 
-Check if the changelog message was stored correcly:
+Check if the changelog message was stored correctly:
 
     >>> print(x11p.changelog_entry)
     ... # noqa
@@ -835,7 +835,7 @@ Commit the changes and run the importer script.
     >>> transaction.commit()
 
 There is now a number of source publications in PUBLISHED status for the
-targetted distroseries, 'lenny'.
+targeted distroseries, 'lenny'.
 
     >>> lenny_sources = SSPPH.select("distroseries = %s" % sqlvalues(lenny))
     >>> lenny_sources.count()
diff --git a/lib/lp/soyuz/doc/publishing.rst b/lib/lp/soyuz/doc/publishing.rst
index 8e0e42e..9e39c8a 100644
--- a/lib/lp/soyuz/doc/publishing.rst
+++ b/lib/lp/soyuz/doc/publishing.rst
@@ -1174,7 +1174,7 @@ other PPA.
     otherppa
 
     # Copy the source into Celso's PPA, ensuring that the binaries
-    # are alse published there.
+    # are also published there.
     >>> source_pub_cprov = source_pub.copyTo(
     ...     source_pub.distroseries, source_pub.pocket, cprov.archive
     ... )
@@ -1589,7 +1589,7 @@ publications.
 
 The 'sourcepackagerelease' attribute from a decorated
 `ArchiveSourcePublication` object is also another decorated object,
-this way we can cache information refered to:
+this way we can cache information referred to:
 
  * upload_changesfile.
 
diff --git a/lib/lp/soyuz/doc/sourcepackagerelease.rst b/lib/lp/soyuz/doc/sourcepackagerelease.rst
index 29d9f34..fe6ee18 100644
--- a/lib/lp/soyuz/doc/sourcepackagerelease.rst
+++ b/lib/lp/soyuz/doc/sourcepackagerelease.rst
@@ -137,7 +137,7 @@ IDistroSeries API:
 
 All the arguments to create an ISourcePackageRelease are obtained when
 processing a source upload, see more details in nascentupload.rst.
-Some of the 20 required arguments are foreign keys or DB contants:
+Some of the 20 required arguments are foreign keys or DB constants:
 
     >>> arg_name = getUtility(ISourcePackageNameSet)["pmount"]
     >>> arg_comp = getUtility(IComponentSet)["universe"]
@@ -151,12 +151,12 @@ Some of the 20 required arguments are foreign keys or DB contants:
     >>> arg_recipebuild = factory.makeSourcePackageRecipeBuild()
     >>> changelog = None
 
-The other argurments are strings:
+The other arguments are strings:
 
     >>> version = "0.0.99"
     >>> dsc = "smashed dsc..."
     >>> copyright = "smashed debian/copyright ..."
-    >>> changelog_entry = "contigous text...."
+    >>> changelog_entry = "contiguous text..."
     >>> archhintlist = "any"
     >>> builddepends = "cdbs, debhelper (>= 4.1.0), libsysfs-dev, libhal-dev"
     >>> builddependsindep = ""
diff --git a/lib/lp/soyuz/stories/distribution/xx-distribution-packages.rst b/lib/lp/soyuz/stories/distribution/xx-distribution-packages.rst
index bc7a550..72471e9 100644
--- a/lib/lp/soyuz/stories/distribution/xx-distribution-packages.rst
+++ b/lib/lp/soyuz/stories/distribution/xx-distribution-packages.rst
@@ -451,7 +451,7 @@ release.
     /ubuntu/+source/alsa-utils/1.0.9a-4ubuntu1
 
 Following the header we get a body with the changelog in it.  Note that
-any email addreses in the changelog are obfuscated because we are not
+any email addresses in the changelog are obfuscated because we are not
 logged in (this prevents bots from harvesting email addresses).
 
     >>> first_body = find_tag_by_id(
diff --git a/lib/lp/soyuz/stories/ppa/xx-ppa-workflow.rst b/lib/lp/soyuz/stories/ppa/xx-ppa-workflow.rst
index 63ee5f0..7e95678 100644
--- a/lib/lp/soyuz/stories/ppa/xx-ppa-workflow.rst
+++ b/lib/lp/soyuz/stories/ppa/xx-ppa-workflow.rst
@@ -709,7 +709,7 @@ are unable to see it on Celso's profile page.
     Personal package archives
     PPA for Celso Providelo
 
-Celso himself can see the PPA, and it's linked so he can reenable it if
+Celso himself can see the PPA, and it's linked so he can re-enable it if
 required.
 
     >>> cprov_browser.open("http://launchpad.test/~cprov";)
@@ -882,7 +882,7 @@ no longer "Delete packages", "Edit PPA dependencies", or "Change details".
     zope.testbrowser.browser.LinkNotFoundError
 
 Even if someone URL-hacks to the edit form, it's not possible to
-reenable the PPA or turn on publishing.
+re-enable the PPA or turn on publishing.
 
     >>> no_priv_browser.open(
     ...     "http://launchpad.test/~no-priv/+archive/ppa/+edit";
diff --git a/lib/lp/soyuz/stories/ppa/xx-ubuntu-ppas.rst b/lib/lp/soyuz/stories/ppa/xx-ubuntu-ppas.rst
index 0052b61..b89f0c4 100644
--- a/lib/lp/soyuz/stories/ppa/xx-ubuntu-ppas.rst
+++ b/lib/lp/soyuz/stories/ppa/xx-ubuntu-ppas.rst
@@ -119,7 +119,7 @@ PPA supported architectures reflects what we have in sampledata.
     >>> print(find_tag_by_id(anon_browser.contents, "ppa_most_active"))
     None
 
-The 'search' form is also suppresed.
+The 'search' form is also suppressed.
 
     >>> anon_browser.getControl("Search", index=0).click()
     Traceback (most recent call last):
diff --git a/lib/lp/soyuz/stories/soyuz/xx-build-record.rst b/lib/lp/soyuz/stories/soyuz/xx-build-record.rst
index a10d21d..216c9d4 100644
--- a/lib/lp/soyuz/stories/soyuz/xx-build-record.rst
+++ b/lib/lp/soyuz/stories/soyuz/xx-build-record.rst
@@ -55,7 +55,7 @@ page. It's title briefly describes the build.
 In the page body readers can see 2 sections, 'Build status' and 'Build
 details'.
 
-Since builds respect a fixed workflow (pending -> buiding ->
+Since builds respect a fixed workflow (pending -> building ->
 built|failed), readers are mostly interested in their
 status. That's why this section comes first.
 
@@ -129,7 +129,7 @@ about 'Build scores' is available.
     >>> print(anon_browser.getLink("What's this").url)
     https://help.launchpad.net/Packaging/BuildScores
 
-Adminstrators can rescore pending builds in a separate form.
+Administrators can rescore pending builds in a separate form.
 
     >>> admin_browser.open(build_url)
     >>> admin_browser.getLink("Rescore build").click()
@@ -428,7 +428,7 @@ binary reference finally becomes a link to its corresponding page.
 PPA builds
 ==========
 
-Build records for PPAs contain all the features and aspects decribed
+Build records for PPAs contain all the features and aspects described
 above. The only difference is that source and binary package
 references are not linkified, since PPAs do not allow users to
 navigate to packages.
diff --git a/lib/lp/soyuz/stories/soyuz/xx-distroarchseries-binpackages.rst b/lib/lp/soyuz/stories/soyuz/xx-distroarchseries-binpackages.rst
index 5638423..973d3b1 100644
--- a/lib/lp/soyuz/stories/soyuz/xx-distroarchseries-binpackages.rst
+++ b/lib/lp/soyuz/stories/soyuz/xx-distroarchseries-binpackages.rst
@@ -158,7 +158,7 @@ Now reload the page to see the deleted file without the link.
     None
 
 Binary Packages with no files to present results in a clear statement
-intead of a empty section.
+instead of a empty section.
 
     >>> browser.open("http://launchpad.test/ubuntu/hoary/i386/pmount/0.1-1";)
     >>> print(extract_text(find_tag_by_id(browser.contents, "files")))
diff --git a/lib/lp/testing/doc/pagetest-helpers.rst b/lib/lp/testing/doc/pagetest-helpers.rst
index a223193..dabc85a 100644
--- a/lib/lp/testing/doc/pagetest-helpers.rst
+++ b/lib/lp/testing/doc/pagetest-helpers.rst
@@ -3,7 +3,7 @@ Page Tests Helpers
 
 Page tests are used to test common use-cases about Launchpad. We use the
 zope.testbrowser component to write most of these tests. The pagetest
-doctest environement comes loaded with a bunch of predefined names that
+doctest environment comes loaded with a bunch of predefined names that
 makes writing page test easy.
 
     >>> from lp.testing.pages import setUpGlobs
@@ -70,7 +70,7 @@ standard error page.
 Using Raw HTTP Requests
 -----------------------
 
-Altough testbrowser is very convenient, sometimes more control over the
+Although testbrowser is very convenient, sometimes more control over the
 request is needed. For these cases, there is a function available under
 'http' that can be used to send raw HTTP request.
 
diff --git a/lib/lp/testopenid/stories/basics.rst b/lib/lp/testopenid/stories/basics.rst
index dd358ab..6b34452 100644
--- a/lib/lp/testopenid/stories/basics.rst
+++ b/lib/lp/testopenid/stories/basics.rst
@@ -104,7 +104,7 @@ check_authentication Mode
 Ask an Identity Provider if a message is valid. For dumb, stateless
 Consumers or when verifying an invalidate_handle response.
 
-If an association handle is stateful (genereted using the associate Mode),
+If an association handle is stateful (generated using the associate Mode),
 check_authentication will fail.
 
     >>> args = urlencode(
diff --git a/lib/lp/translations/browser/tests/language-views.rst b/lib/lp/translations/browser/tests/language-views.rst
index 3151d91..19b8f77 100644
--- a/lib/lp/translations/browser/tests/language-views.rst
+++ b/lib/lp/translations/browser/tests/language-views.rst
@@ -93,8 +93,8 @@ View Language
 -------------
 
 Translators lists for each language are computed using KarmaCache tables for
-users which have configured their prefered language. Since KarmaCache tables
-are generated using nightly builds, we will change Langauge.translators to
+users which have configured their preferred language. Since KarmaCache tables
+are generated using nightly builds, we will change Language.translators to
 use the list of translators generated by this test.
 
 Language.translators is deleted so that we can add our custom
@@ -120,7 +120,7 @@ formula expression to see how it works.
     2 : 0, 5, 6, 7, 8, 9...
 
 The top contributors are listed on the language page, and for a merged account
-we will see their targed account.
+we will see their target account.
 
 Create some translators and a merged account.
 
@@ -174,7 +174,7 @@ accounts.
     ...     pofile=pofile, translator=translator_main, potmsgset=potmsgset
     ... )
 
-Langauge.translators is Monkey-patched to avoid fetching KarmaCache.
+Language.translators is monkey-patched to avoid fetching KarmaCache.
 Language.translator is a list containing all contributors decreasingly sorted
 according to their karma value.
 
@@ -205,7 +205,7 @@ View LanguageSet
     >>> languageset_view = create_initialized_view(language_set, "+index")
 
 The user_languages property contains a list of the current user's preferred
-languages formated as links.
+languages formatted as links.
 
     >>> print(languageset_view.user_languages)
     <a href=".../ca" ...>Catalan</a>,
diff --git a/lib/lp/translations/browser/tests/potemplate-views.rst b/lib/lp/translations/browser/tests/potemplate-views.rst
index 9173c27..2601900 100644
--- a/lib/lp/translations/browser/tests/potemplate-views.rst
+++ b/lib/lp/translations/browser/tests/potemplate-views.rst
@@ -16,7 +16,7 @@ First, we need some imports.
     ...     ISourcePackageNameSet,
     ... )
 
-All the tests will be submitted as comming from the No Privilege person.
+All the tests will be submitted as coming from the No Privilege person.
 
     >>> login("no-priv@xxxxxxxxxxxxx")
 
@@ -111,7 +111,7 @@ the entry should be linked with the IPOTemplate we are using.
 
 And for the path, we are going to use the filename we got from the upload form
 because it's a .po file instead of a .pot file and we need that information
-to differenciate different .po files associated with the context.
+to differentiate different .po files associated with the context.
 
     >>> print(entry.path)
     po/es.po
diff --git a/lib/lp/translations/browser/tests/translationmessage-views.rst b/lib/lp/translations/browser/tests/translationmessage-views.rst
index b3f15c9..4b6d758 100644
--- a/lib/lp/translations/browser/tests/translationmessage-views.rst
+++ b/lib/lp/translations/browser/tests/translationmessage-views.rst
@@ -391,7 +391,7 @@ We are going to work with Evolution's evolution-2.2 template.
 For alternative suggestions we need two languages, the one being
 translated and other one providing suggestions. We will use Japanese
 as the language to get suggestions for because it has less plural forms
-than the other choosen language, Spanish.
+than the other chosen language, Spanish.
 
     # Japanese translation for this template doesn't exist yet in our
     # database, we need to create it first.
@@ -593,7 +593,7 @@ message).
     >>> subview.allow_diverging
     True
 
-A shared translation is not explicitely shown, since the current one is
+A shared translation is not explicitly shown, since the current one is
 the shared translation.
 
     >>> print(subview.shared_translationmessage)
@@ -611,7 +611,7 @@ When looking at the entire POFile, diverging is not allowed.
     >>> subview.allow_diverging
     False
 
-With a diverged translation, the shared translation is explicitely offered
+With a diverged translation, the shared translation is explicitly offered
 among one of the suggestions, and we are not offered to diverge the
 translation further, since it's already diverged.
 
diff --git a/lib/lp/translations/doc/browser-helpers.rst b/lib/lp/translations/doc/browser-helpers.rst
index 5ba8c52..3943b05 100644
--- a/lib/lp/translations/doc/browser-helpers.rst
+++ b/lib/lp/translations/doc/browser-helpers.rst
@@ -86,7 +86,7 @@ TranslationConstants.TAB_CHAR_ESCAPED which renders them as below:
     >>> print(expand_rosetta_escapes("foo[tab]bar"))
     foo<code>\[tab]</code>bar
 
-Escaped ocurrences themselves get escaped.
+Escaped occurrences themselves get escaped.
 
     >>> print(expand_rosetta_escapes("foo\\[tab]bar"))
     foo\<code>\[tab]</code>bar
diff --git a/lib/lp/translations/doc/pofile.rst b/lib/lp/translations/doc/pofile.rst
index 312ea2a..33e0faf 100644
--- a/lib/lp/translations/doc/pofile.rst
+++ b/lib/lp/translations/doc/pofile.rst
@@ -334,7 +334,7 @@ one is older than the one we have in the IPOFile object. We are using
 this method, for instance, to know if a new imported PO file should be
 ignored because we already have a newer one.
 
-This test is to be sure that the date comparation is working and that
+This test is to be sure that the date comparison is working and that
 two headers with the same date will always be set as newer, because lazy
 translators forget to update that field from time to time and sometimes,
 we were losing translations because we were ignoring those imports too.
@@ -866,7 +866,7 @@ common file format in-memory to convert from one file format to another.
 
 Getting the translation file data is just a matter of adapting the
 object to the ITranslationFileData interface. Since there are multiple
-adapters for differnt purposes, this adapter is named.
+adapters for different purposes, this adapter is named.
 
     >>> from zope.component import getAdapter
     >>> translation_file_data = getAdapter(
diff --git a/lib/lp/translations/doc/poimport-pofile-old-po-imported.rst b/lib/lp/translations/doc/poimport-pofile-old-po-imported.rst
index 6474ebc..c798f5e 100644
--- a/lib/lp/translations/doc/poimport-pofile-old-po-imported.rst
+++ b/lib/lp/translations/doc/poimport-pofile-old-po-imported.rst
@@ -9,7 +9,7 @@ have a chance to fix it.
 
 We have to make an exception for files coming from upstream, though, because
 the user may not be able to get the file fixed upstream or the file is older
-because a user upload occured before the upstream file made it to Launchpad.
+because a user upload occurred before the upstream file made it to Launchpad.
 In either case we assume that the upstream file is OK and accept it for
 upload.
 
diff --git a/lib/lp/translations/doc/request_country.rst b/lib/lp/translations/doc/request_country.rst
index 24b9386..43f0b09 100644
--- a/lib/lp/translations/doc/request_country.rst
+++ b/lib/lp/translations/doc/request_country.rst
@@ -6,7 +6,7 @@ Adapting a request to a country allows you to see where the request came from.
 
 Here's a dummy request. Zope adds the REMOTE_ADDR CGI environment variable
 for us. Upstream proxy servers (and tinkering users!) may also add
-X-Forwarded-For: headers. The X-Forwarded-For: header takes precidence
+X-Forwarded-For: headers. The X-Forwarded-For: header takes precedence
 if it is set.
 
     >>> from lp.services.webapp.servers import LaunchpadTestRequest
diff --git a/lib/lp/translations/doc/translationbranchapprover.rst b/lib/lp/translations/doc/translationbranchapprover.rst
index 774b1ab..7ce2405 100644
--- a/lib/lp/translations/doc/translationbranchapprover.rst
+++ b/lib/lp/translations/doc/translationbranchapprover.rst
@@ -21,8 +21,8 @@ domain which in turn is derived from the path itself.
 The name is used for matching instead of the translation domain because the
 domain may change when the source tree is updated to a new version as
 the developers may choose to include version information in the domain. This
-makes it possible to intall multiple versions of the same software on a
-system without having mo files clash. Evolution is a noteable example of
+makes it possible to install multiple versions of the same software on a
+system without having mo files clash. Evolution is a notable example of
 doing this.
 
 To be able to assess the context of a template file it should approve, the
@@ -39,10 +39,10 @@ the other hand it also knows about files that have no matching object. This
 will lead to one of four situations.
 
  1. All files are matched to POTemplate objects and vice versa so that no
-    file or oject is left unmatched. All subsequent approval requests can
+    file or object is left unmatched. All subsequent approval requests can
     safely be approved.
  2. All objects are matched to files but at least one file is left unmatched.
-    The matched files can safly be approved wereas the unmatched file
+    The matched files can safely be approved whereas the unmatched file
     triggers the creation of a new POTemplate object. If multiple files are
     unmatched, a POTemplate will be created for each.
  3. Some files *and* some objects are left unmatched. Only the matched files
@@ -73,7 +73,7 @@ the import queue.
     ... )
 
 The job initializes the approver with the list of template files in the tree,
-which has only one entry. This is situtation 2 (see above).
+which has only one entry. This is situation 2 (see above).
 
     >>> approver = TranslationBranchApprover(
     ...     ["foo.pot"], productseries=series
@@ -106,7 +106,7 @@ detects this new file on its next run and places it into the import queue
     ... )
 
 The job does know about all the template files in the tree and so it
-initializes the approver accordingly. This is situtation 2 again.
+initializes the approver accordingly. This is situation 2 again.
 
     >>> approver = TranslationBranchApprover(
     ...     ["foo.pot", "bar.pot"], productseries=series
diff --git a/lib/lp/translations/stories/distroseries/xx-distroseries-translations.rst b/lib/lp/translations/stories/distroseries/xx-distroseries-translations.rst
index 6bd0576..cae8f96 100644
--- a/lib/lp/translations/stories/distroseries/xx-distroseries-translations.rst
+++ b/lib/lp/translations/stories/distroseries/xx-distroseries-translations.rst
@@ -2,7 +2,7 @@ Distribution series translations
 ================================
 
 This page shows a list of PO templates contained within all source
-packages in a particular distibution series.
+packages in a particular distribution series.
 
 In this case, we're asking for the translation overview for Hoary.
 
diff --git a/lib/lp/translations/stories/productseries/xx-productseries-translations-bzr-request.rst b/lib/lp/translations/stories/productseries/xx-productseries-translations-bzr-request.rst
index a7de02f..e1e4ab5 100644
--- a/lib/lp/translations/stories/productseries/xx-productseries-translations-bzr-request.rst
+++ b/lib/lp/translations/stories/productseries/xx-productseries-translations-bzr-request.rst
@@ -7,7 +7,7 @@ found on the "Settings" page.
 
 Getting there
 -------------
-The maintainer of a product sees a menu option called "Reqeust Bazaar
+The maintainer of a product sees a menu option called "Request Bazaar
 import" that leads to the page to request such imports.
 
     >>> browser.addHeader("Authorization", "Basic test@xxxxxxxxxxxxx:test")
diff --git a/lib/lp/translations/stories/productseries/xx-productseries-translations-settings.rst b/lib/lp/translations/stories/productseries/xx-productseries-translations-settings.rst
index 64bca16..c82baa8 100644
--- a/lib/lp/translations/stories/productseries/xx-productseries-translations-settings.rst
+++ b/lib/lp/translations/stories/productseries/xx-productseries-translations-settings.rst
@@ -92,7 +92,7 @@ The user is automatically redirected to the page they came from.
     >>> print_feedback_messages(browser.contents)
     The settings have been updated.
 
-If they look at the synchonization settings page again, they see that
+If they look at the synchronization settings page again, they see that
 the changes have been saved.
 
     >>> browser.getLink("Set up branch synchronization").click()
diff --git a/lib/lp/translations/stories/standalone/xx-pofile-translate.rst b/lib/lp/translations/stories/standalone/xx-pofile-translate.rst
index 87e3a30..dd4f40c 100644
--- a/lib/lp/translations/stories/standalone/xx-pofile-translate.rst
+++ b/lib/lp/translations/stories/standalone/xx-pofile-translate.rst
@@ -242,7 +242,7 @@ Missing plural forms information
 
 If the plural forms are not known for a language, users can not add
 new translations and are asked to help Launchpad Translations by providing
-the plural form informations.
+the plural form information.
 
 This notice is display when doing batch translations or translating a
 single message.
diff --git a/lib/lp/translations/stories/standalone/xx-potemplate-admin.rst b/lib/lp/translations/stories/standalone/xx-potemplate-admin.rst
index 484325d..4cea87d 100644
--- a/lib/lp/translations/stories/standalone/xx-potemplate-admin.rst
+++ b/lib/lp/translations/stories/standalone/xx-potemplate-admin.rst
@@ -177,7 +177,7 @@ Administrators can disable and then make changes to a disabled template.
     >>> print(admin_browser.url)
     http://translations.launchpad.test/evolution/trunk/+pots/evolution-renamed
 
-Now we will reenable the template.
+Now we will re-enable the template.
 
     >>> admin_browser.open(
     ...     "http://translations.launchpad.test/evolution/trunk/+pots/";
diff --git a/lib/lp/translations/stories/standalone/xx-potemplate-edit.rst b/lib/lp/translations/stories/standalone/xx-potemplate-edit.rst
index 86dba4f..b9e0120 100644
--- a/lib/lp/translations/stories/standalone/xx-potemplate-edit.rst
+++ b/lib/lp/translations/stories/standalone/xx-potemplate-edit.rst
@@ -5,7 +5,7 @@ The POTemplate edit page allows editing a subset of potemplate
 attributes. Only product owners, Rosetta Experts or a Launchpad admin
 are able to use it.
 
-An unpriviledged user cannot reach this page.
+An unprivileged user cannot reach this page.
 
     >>> browser = setupBrowser(auth="Basic no-priv@xxxxxxxxxxxxx:test")
     >>> browser.open(
@@ -127,7 +127,7 @@ The visible fields can be changed and saved.
     >>> print(browser.url)
     http://translations.launchpad.test/evolution/trunk/+pots/evo
 
-The changed values will be stored and visible by accesing again the edit
+The changed values will be stored and visible by accessing again the edit
 page.
 
     >>> browser.open(
@@ -215,7 +215,7 @@ The edit page can be access from the templates list.
     >>> admin_browser.url == referrer
     True
 
-If you are accesing the edit page using a bookmark (in this case there
+If you are accessing the edit page using a bookmark (in this case there
 was no previous page in the navigation), you will be directed to the
 template index page.
 
diff --git a/lib/lp/translations/stories/standalone/xx-potemplate-index.rst b/lib/lp/translations/stories/standalone/xx-potemplate-index.rst
index 70e33fb..1f31964 100644
--- a/lib/lp/translations/stories/standalone/xx-potemplate-index.rst
+++ b/lib/lp/translations/stories/standalone/xx-potemplate-index.rst
@@ -22,7 +22,7 @@ evolution-2.2 POTemplate page.
     Template ...evolution-2.2... : Hoary (5.04) :
     Translations : evolution package : Ubuntu
 
-The owner of the template is diplayed.
+The owner of the template is displayed.
 
     >>> owner_display = find_tag_by_id(
     ...     anon_browser.contents, "potemplate-owner"
diff --git a/lib/lp/translations/stories/translationgroups/xx-translationgroups.rst b/lib/lp/translations/stories/translationgroups/xx-translationgroups.rst
index a2e7dc6..17cb339 100644
--- a/lib/lp/translations/stories/translationgroups/xx-translationgroups.rst
+++ b/lib/lp/translations/stories/translationgroups/xx-translationgroups.rst
@@ -559,7 +559,7 @@ grounds: owning the group, being a Rosetta expert, or being a Launchpad
 administrator.
 
 Jordi Mallach is a Rosetta administrator ("expert").  He does not own
-polyglot nor is he a Launchpad adminstrator.  That is enough to allow
+polyglot nor is he a Launchpad administrator.  That is enough to allow
 him to appoint a translator.
 
     >>> browser.addHeader("Authorization", "Basic jordi@xxxxxxxxxx:test")
@@ -1195,7 +1195,7 @@ an error message back.
     ...
     Ignored your upload because you didn't select a file to upload.
 
-Uploading files with an unkown file format notifies the user that it
+Uploading files with an unknown file format notifies the user that it
 cannot be handled.
 
     >>> from io import BytesIO
diff --git a/lib/lp/translations/utilities/doc/gettext_po_exporter.rst b/lib/lp/translations/utilities/doc/gettext_po_exporter.rst
index 086070b..9cc3bac 100644
--- a/lib/lp/translations/utilities/doc/gettext_po_exporter.rst
+++ b/lib/lp/translations/utilities/doc/gettext_po_exporter.rst
@@ -2,7 +2,7 @@ gettext_po_exporter
 ===================
 
 To export translation files from Rosetta, the data must be displayed in po
-file fomrat which is a text file format.
+file format which is a text file format.
 
     >>> from lp.translations.interfaces.translations import (
     ...     TranslationConstants,
diff --git a/lib/lp/translations/utilities/doc/templatenames.rst b/lib/lp/translations/utilities/doc/templatenames.rst
index 4063f5b..d49ba65 100644
--- a/lib/lp/translations/utilities/doc/templatenames.rst
+++ b/lib/lp/translations/utilities/doc/templatenames.rst
@@ -5,7 +5,7 @@ Template names can be derived from template paths. The name usually matches
 the translation domain but translation domains may contain characters that
 template names may not, most notably capital characters and underscores.
 
-The template utitlity module provides functions for these conversions. They
+The template utility module provides functions for these conversions. They
 also know how to detect xpi templates and generic template file names and
 derive translation domains from directory names, if possible.