I just run a full string extraction of the latest Drupal user interface. Then I converted the empty translation templates to the attached text file. My aim is to get people run spell checkers on this text and identify language issues we made when writing this huge amount of text. The simplest text format used here (stripped from any HTML) is the most suitable and portable for the task, so you can use your word processor, your command line spell checker, or whatever. I am handing over this data to you in the hopes that someone will pick it up.

Whenever a spelling issue is found, a quick greping of Drupal source code can uncover the source, or I can happily attach the .pot files for reference (general.pot and installer.pot as extracted from Drupal 6, which include full (HTML included) text and exact location information).

Support from Acquia helps fund testing for Drupal Acquia logo

Comments

deekayen’s picture

FileSize
206.74 KB

If nothing else, here is at least a diff of the spelling corrections I made through NeoOffice 2.2.1p0 to the txt file.

deekayen’s picture

FileSize
27.01 KB

dumb mistake. diff attached for real this time.

catch’s picture

OK here's everything I found. I included grammatical errors flagged by MS Word (or me) as well. Original text included, changes in bold, I know this isn't ideal but quickest way to do it. Some paragraphs in the .txt don't have spaces after periods, but I think that's because they're not actually paragraphs in the system, so ignoring that. Some of these appear all over the place, tried to minimse duplication.

Some of these are a bit subjective as well, lots of consistent mis-spellings and some are neologisms/technical - but leaving them in for review anyway since usage ought to be standardised.

One caveat, I'm from the UK and although I tried to leave American spellings alone, one or two might have got picked up anyway.

Here it is:

In order for Drupal to work and to proceed with the installation process you must resolve all permission issues reported above.

In order for Drupal to work, and to continue with the installation process, you must resolve all permission issues reported above.

--

Failure to connect to your MySQL database server. MySQL reports the following message:
Failed to connect to your MySQL database server. MySQL reports the following message:

Failure to connect to your PostgreSQL database server.
Failed to connect to your PostgreSQL database server.

Optional path prefix, for example "deutsch" for the German versio
Optional path prefix, for example "Deutsch" for the German versio

Optional custom domain with protocol (eg.
Optional custom domain with protocol (e.g.

untranslated strings
un-translated strings

An HTTP error @status occured.
@uri
An HTTP error @status occurred.
@uri

which to include/exlclude the block or PHP code

which to include/exclude the block or PHP code

as well as a link labeled up
as well as a link labelled up

Unpublish
Un-publish

Can not delete
Cannot delete

cachable
cacheable

those with with light
those with light

additionaly
additionally

eg 'de'
e.g. 'de'

choosen
chosen

The link text corresponding to this item to appear in the menu.
The link text corresponding to this item, to appear in the menu.

unsticky
un-sticky

boolean
Boolean

whirlygigs
whirligigs
(not sure about that one, blame Microsoft)

identifer
identifier

autocomplete
auto-complete

preprocessor
pre-processor

unban
un-ban

logfiles
log files

unpublishing
un-publishing

timezone
time-zone

throttlable
throttle-able

depedents
dependents

Autocomplete
Auto-complete

vocablulary
vocabulary

webserver
web-server

unassign
un-assign

presave
pre-save

kB
KB

succesful
successful

Tableless
Table-less

re-colorable
recolorable

deekayen’s picture

FileSize
46.32 KB

patch against cvs attached for my previous diff and some of #3. The "some" I left out were a couple of the extra hyphen changes from #3 since I think web terminology is developing its own lingo of sorts. Either way, I think this patch should get the glaring corrections.

things worth taking a moment of thought:
renaming the $cachable var
behavior vs behaviour (I favor behavior)

catch’s picture

Yeah I agree about the hyphens, I think they count as new spellings rather than wrong.

keith.smith’s picture

Status: Needs review » Needs work

These are some good changes, and while I didn't do an exhaustive review, I did read through most of them.

In #184461, we briefly discussed alternative spellings, and I think behavior is the version to go with.

I'll go through this later today when I have some time, and will also read through Gabor's list of strings in case I see others that might need to be included.

I did note an instance of exchanging "smileys" for "smilies" I think "smileys" is actually correct when one is talking about multiple, uh, smileys (or so says http://dictionary.reference.com/browse/smileys). Personally, I'd just avoid that by changing the word to "emoticons".

deekayen’s picture

FileSize
46.32 KB

Revised for emoticons - good call IMO.

I should also note I agree with the table-less and re-colorable revisions, but they didn't turn up in my grep, so they're not in the patch. Since they fall in a debatable category, I think they can be safely skipped for now.

deekayen’s picture

Status: Needs work » Needs review

didn't notice status change

keith.smith’s picture

I disagree on the increased use of hyphens, for example, the change from "untranslatable" to "un-translatable."

That said, I realize there are no universally accepted principles for the use of hyphens. My Chicago Manual of Style tends to spell most everything solid, including un- and non- prefixes. AP generally spells the prefixes anti- and non- hyphenated, and un- solid.

If the meaning can be made more clear with a hyphen, like the differences between "re-creation" and "recreation" or "walking stick" and "walking-stick", then you need a hyphen. If there's a proper noun involved (like "anti-Semitic"), involves figures (pre-2007), or the word is already hyphenated (un-self-conscious), then you need a hyphen.

Otherwise, I say down with hyphens :)

Maybe we should first complete a "triage" patch that only includes the misspellings that (IMO) absolutely must be corrected.

Dries’s picture

I'm not a fan of the additional hyphens either.

deekayen’s picture

FileSize
40.82 KB

removes patches against untranslated (previous patch changed to un-translated)

keith.smith’s picture

FileSize
27.91 KB

I'm attaching a patch that builds off the last one, but only includes misspellings -- if I thought the change was very debatable (read that: went beyond changing a spelling error or went beyond standardizing on a particular spelling variant), I did not include it in the attached patch.

All or most of the changes that aren't in this patch, though, will still likely need to be made, but they may involve additional discussion. Some of the strings in Gabor's list read as somewhat tortured, and should perhaps be revisited under the guise of improving usability. Some of the suggested changes, like cachable to cacheable, are debatable; both spellings are *technically* correct so it isn't as necessary to correct them in this iteration as some of the other glaring spelling errors. Of course, both behaviour and behavior are correct; this patch substitutes behavior for behaviour purely in the interest of consistency.

Changes for ease of reference:


-  // Add teaser behaviour (must come before resizable)
+  // Add teaser behavior (must come before resizable)

-  // Add resizable behaviour
+  // Add resizable behavior

-        // An error occured loading an object.
+        // An error occurred loading an object.

- * the same behaviour as PHP's own substr() function.
+ * the same behavior as PHP's own substr() function.

- * Attaches the ahah behaviour to each ahah form element.
+ * Attaches the ahah behavior to each ahah form element.

- * Attaches the autocomplete behaviour to all required fields
+ * Attaches the autocomplete behavior to all required fields

-        alert(Drupal.t("An HTTP error @status occured. \n@uri", { '@status': xmlhttp.status, '@uri': db.uri }));
+        alert(Drupal.t("An HTTP error @status occurred. \n@uri", { '@status': xmlhttp.status, '@uri': db.uri }));

- * Attaches the batch behaviour to progress bars.
+ * Attaches the batch behavior to progress bars.

-        pb.displayError(Drupal.t("An HTTP error @status occured. \n@uri", { '@status': xmlhttp.status, '@uri': pb.uri }));
+        pb.displayError(Drupal.t("An HTTP error @status occurred. \n@uri", { '@status': xmlhttp.status, '@uri': pb.uri }));

- * Auto-attach for teaser behaviour.
+ * Auto-attach for teaser behavior.

-        'description' => t('Contents of the "Pages" block; contain either a list of paths on which to include/exlclude the block or PHP code, depending on "visibility" setting.'),
+        'description' => t('Contents of the "Pages" block; contains either a list of paths on which to include/exclude the block or PHP code, depending on "visibility" setting.'),

-<p>You can configure the behaviour of each block (for example, specifying on which pages and for what users it will appear) by clicking the "configure" link for each block.</p>', array('@throttle' => url('admin/settings/throttle')));
+<p>You can configure the behavior of each block (for example, specifying on which pages and for what users it will appear) by clicking the "configure" link for each block.</p>', array('@throttle' => url('admin/settings/throttle')));

-      return '<p>'. t("You need to add all languages in which you would like to display the site interface. If you can't find the desired language in the quick-add dropdown, then you will need to provide the proper language code yourself. The language code may be used to negotiate with browsers and to present flags, etc., so it is important to pick a code that is standardised for the desired language. You can also add a language by <a href=\"@import\">importing a translation</a>.", array("@import" => url("admin/build/translate/import"))) .'</p>';
+      return '<p>'. t("You need to add all languages in which you would like to display the site interface. If you can't find the desired language in the quick-add dropdown, then you will need to provide the proper language code yourself. The language code may be used to negotiate with browsers and to present flags, etc., so it is important to pick a code that is standardized for the desired language. You can also add a language by <a href=\"@import\">importing a translation</a>.", array("@import" => url("admin/build/translate/import"))) .'</p>';

-      return '<p>'. t("This page provides an overview of interface translation on the site. Drupal groups all translatable strings in so called 'text groups'. Modules may provide more text groups additionaly to the 'built-in interface' default, to separate strings used for other purposes, allowing you to focus your translation efforts on the groups of text you care most about. For example, a translation team could choose not to fully translate a text group that includes less important data, being still able to ensure that built-in interface is always fully translated.") .'</p>';
+      return '<p>'. t("This page provides an overview of interface translation on the site. Drupal groups all translatable strings in so called 'text groups'. Modules may provide more text groups additionally to the 'built-in interface' default, to separate strings used for other purposes, allowing you to focus your translation efforts on the groups of text you care most about. For example, a translation team could choose not to fully translate a text group that includes less important data, being still able to ensure that built-in interface is always fully translated.") .'</p>';

-    '#description' => t('Select what should be displayed as the secondary links . If %primary is choosen the children of the active primary menu link (if any) will be shown instead of the links in the %secondary menu.', array('%secondary' => $menu_options['secondary-links'],  '%primary' => $menu_options['primary-links'])),
+    '#description' => t('Select what should be displayed as the secondary links . If %primary is chosen the children of the active primary menu link (if any) will be shown instead of the links in the %secondary menu.', array('%secondary' => $menu_options['secondary-links'],  '%primary' => $menu_options['primary-links'])),

-      $output = t('<p>Menus are a collection of links (menu items) used to navigate a website. The menu module provides an interface to control and customize the powerful menu system that comes with Drupal. Menus are primarily displayed as a hierarchical list of links using Drupal\'s highly flexible <a href="@admin-block">blocks</a> feature. Each menu automatically creates a block of the same name. By default, new menu items are placed inside a built-in menu labelled %navigation, but administrators can also create custom menus.</p>
+      $output = t('<p>Menus are a collection of links (menu items) used to navigate a website. The menu module provides an interface to control and customize the powerful menu system that comes with Drupal. Menus are primarily displayed as a hierarchical list of links using Drupal\'s highly flexible <a href="@admin-block">blocks</a> feature. Each menu automatically creates a block of the same name. By default, new menu items are placed inside a built-in menu labeled %navigation, but administrators can also create custom menus.</p>

-<p>Drupal themes generally provide out-of-the-box support for two menus commonly labelled %primary-links and %secondary-links. These are sets of links which are usually displayed in the header or footer of each page (depending on the currently active theme).</p>
+<p>Drupal themes generally provide out-of-the-box support for two menus commonly labeled %primary-links and %secondary-links. These are sets of links which are usually displayed in the header or footer of each page (depending on the currently active theme).</p>

-        'description' => t('Unique identifer for a poll choice.'),
+        'description' => t('Unique identifier for a poll choice.'),

-      $output .= '<p>'. t('Users can create a poll. The title of the poll should be the question, then enter the answers and the "base" vote counts. You can also choose the time period over which the vote will run.The <a href="@poll">poll</a> item in the navigation menu will take you to a page where you can see all the current polls, vote on them (if you haven\'t already) and view the results.', array('@poll' => url('poll'))) .'</p>';
+      $output .= '<p>'. t('Users can create a poll. The title of the poll should be the question, then enter the answers and the "base" vote counts. You can also choose the time period over which the vote will run. The <a href="@poll">poll</a> item in the navigation menu will take you to a page where you can see all the current polls, vote on them (if you haven\'t already) and view the results.', array('@poll' => url('poll'))) .'</p>';

-      $output .= '<p>'. t('The search engine works by maintaining an index of the words in your site\'s content. It indexes the posts and users. You can adjust the settings to tweak the indexing behaviour. Note that the search requires cron to be set up correctly. The index percentage sets the maximum amount of items that will be indexed in one cron run. Set this number lower if your cron is timing out or if PHP is running out of memory.') .'</p>';
+      $output .= '<p>'. t('The search engine works by maintaining an index of the words in your site\'s content. It indexes the posts and users. You can adjust the settings to tweak the indexing behavior. Note that the search requires cron to be set up correctly. The index percentage sets the maximum amount of items that will be indexed in one cron run. Set this number lower if your cron is timing out or if PHP is running out of memory.') .'</p>';

-      return '<p>'. t('The search engine works by maintaining an index of the words in your site\'s content. You can adjust the settings below to tweak the indexing behaviour. Note that the search requires cron to be set up correctly.') .'</p>';
+      return '<p>'. t('The search engine works by maintaining an index of the words in your site\'s content. You can adjust the settings below to tweak the indexing behavior. Note that the search requires cron to be set up correctly.') .'</p>';

-  // search behaviour with acronyms and URLs.
+  // search behavior with acronyms and URLs.

-        'description' => t("A serialized array containing information from the module's .info file; keys can include name, description, package, version, core, dependencies, depedents, and php."),
+        'description' => t("A serialized array containing information from the module's .info file; keys can include name, description, package, version, core, dependencies, dependents, and php."),

-      $output = '<p>'. t('The system module provides system-wide defaults such as running jobs at a particular time, and storing web pages to improve efficiency. The ability to run scheduled jobs makes administering the website more usable, as administrators do not have to manually start jobs. The storing of web pages, or caching, allows the site to efficiently re-use web pages and improve website performance. The system module provides control over preferences, behaviours including visual and operational settings.') .'</p>';
+      $output = '<p>'. t('The system module provides system-wide defaults such as running jobs at a particular time, and storing web pages to improve efficiency. The ability to run scheduled jobs makes administering the website more usable, as administrators do not have to manually start jobs. The storing of web pages, or caching, allows the site to efficiently re-use web pages and improve website performance. The system module provides control over preferences, behaviors including visual and operational settings.') .'</p>';

-        'description' => t('Whether or not multiple terms from this vocablulary may be assigned to a node. (0 = disabled, 1 = enabled)'),
+        'description' => t('Whether or not multiple terms from this vocabulary may be assigned to a node. (0 = disabled, 1 = enabled)'),

-        drupal_set_message(t('Registration succesful. You are now logged in.'));
+        drupal_set_message(t('Registration successful. You are now logged in.'));

deekayen’s picture

FileSize
17.53 KB

Proper diff attached. I even left out behaviour changes to make it I think ultimately non-contriversial (unless there's a strict spelling error remaining).

catch’s picture

fwiw, if behaviour is acceptable in the US, it's also the only one of those spellings used in the UK (and I presume Aus/NZ), so +1 for me on standardising on that.

Crell’s picture

"behaviour" is not a valid spelling in American English. My understanding is that core uses American English, and if necessary British English is a quite simple translation pack.

ChrisKennedy’s picture

This looks okay to me, but I see that the 'Contents of the "Pages" block; contain' to contains change in block.install isn't in the actual patch. Is that intentional?

deekayen’s picture

FileSize
29.01 KB

quite a collection of fixes to choose from now...

contain vs contains was an oversight in the previous patch
adds back behavior

Gábor Hojtsy’s picture

Status: Needs review » Active

OK committed #17, being the noncontroversial patch; thanks! Now the question is what fixes are still up for discussion? I noticed that some (non-typo) fixes from #3 were not included, like Failure to Failed.

deekayen’s picture

Status: Active » Needs review
FileSize
5.12 KB

I like Failed instead of Failure myself, but this patch removes a consistency issue from context. All the other DB error messages begin, "We were unable to". Given the beta status, I think the consistency is a bigger issue than should be handled in this round. If we want to make this one particular error more wordy like the others, it could start "There was a failure". I don't like the wordiness of the other errors or the fact the software is "we", so I think Failed is a good precedent for the other errors to follow in D7. If D6 wasn't beta, I'd be rolling a patch to re-word the other errors, too. Opinions?

catch’s picture

I reckon all the errors should be patched to use "Failed to" rather than "We were unable to". Lots of wordings (and entire help texts) still going in to D6 so shouldn't be an issue with that.

Gábor Hojtsy’s picture

Indeed, interface strings are not frozen, we are fixing and improving consistency now. Translators are still told to wait for the green light when we (mostly) fix interface text.

deekayen’s picture

FileSize
24.21 KB

Implement #20. Rewords half of one error has follows:

- drupal_set_message(st('We were able to connect to the MySQL database server (which means your username and password are valid) but not able to select your database. [snip]
+ drupal_set_message(st('Failed to select your database on your MySQL database server, which means the connection username and password are valid, but there is a problem accessing your data. [snip]

deekayen’s picture

FileSize
1.54 KB

Implement install change from #3.

In order for Drupal to work and to proceed with the installation process you must resolve all permission issues reported above.

In order for Drupal to work, and to continue with the installation process, you must resolve all permission issues reported above.

Dries’s picture

Status: Needs review » Fixed

Committed both patches. Thanks a bundle, deekayen.

Anonymous’s picture

Status: Fixed » Closed (fixed)

Automatically closed -- issue fixed for two weeks with no activity.