Index: install.php
===================================================================
RCS file: /cvs/drupal/drupal/install.php,v
retrieving revision 1.21
diff -u -d -F^\s*function -r1.21 install.php
--- install.php	8 Oct 2006 06:25:19 -0000	1.21
+++ install.php	16 Oct 2006 17:20:26 -0000
@@ -237,7 +237,7 @@ function install_settings_form($profile,
       '#title' => st('Advanced options'),
       '#collapsible' => TRUE,
       '#collapsed' => TRUE,
-      '#description' => st('These options are only necessary for some sites. If you\'re not sure what you should enter here, leave the default settings or check with your hosting provider.')
+      '#description' => st('These options are only necessary for some sites. If you’re not sure what you should enter here, leave the default settings or check with your hosting provider.')
     );
 
     // Database host
Index: includes/database.mysql.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database.mysql.inc,v
retrieving revision 1.60
diff -u -d -F^\s*function -r1.60 database.mysql.inc
--- includes/database.mysql.inc	26 Sep 2006 14:09:05 -0000	1.60
+++ includes/database.mysql.inc	16 Oct 2006 17:20:27 -0000
@@ -90,7 +90,7 @@ function db_connect($url) {
     drupal_set_header('HTTP/1.1 503 Service Unavailable');
     drupal_set_title('Unable to connect to database server');
     print theme('maintenance_page', '<p>If you still have to install Drupal, proceed to the <a href="'. base_path() .'install.php">installation page</a>.</p>
-<p>If you have already finished installed Drupal, this either means that the username and password information in your <code>settings.php</code> file is incorrect or that we can\'t connect to the MySQL database server. This could mean your hosting provider\'s database server is down.</p>
+<p>If you have already finished installed Drupal, this either means that the username and password information in your <code>settings.php</code> file is incorrect or that we can’t connect to the MySQL database server. This could mean your hosting provider’s database server is down.</p>
 <p>The MySQL error was: '. theme('placeholder', mysql_error()) .'.</p>
 <p>Currently, the username is '. theme('placeholder', $url['user']) .' and the database server is '. theme('placeholder', $url['host']) .'.</p>
 <ul>
Index: includes/database.mysqli.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database.mysqli.inc,v
retrieving revision 1.25
diff -u -d -F^\s*function -r1.25 database.mysqli.inc
--- includes/database.mysqli.inc	26 Sep 2006 14:09:05 -0000	1.25
+++ includes/database.mysqli.inc	16 Oct 2006 17:20:28 -0000
@@ -76,7 +76,7 @@ function db_connect($url) {
     drupal_set_header('HTTP/1.1 503 Service Unavailable');
     drupal_set_title('Unable to connect to database server');
     print theme('maintenance_page', '<p>If you still have to install Drupal, proceed to the <a href="'. base_path() .'install.php">installation page</a>.</p>
-<p>If you have already finished installed Drupal, this either means that the username and password information in your <code>settings.php</code> file is incorrect or that we can\'t connect to the MySQL database server. This could mean your hosting provider\'s database server is down.</p>
+<p>If you have already finished installed Drupal, this either means that the username and password information in your <code>settings.php</code> file is incorrect or that we can’t connect to the MySQL database server. This could mean your hosting provider’s database server is down.</p>
 <p>The MySQL error was: '. theme('placeholder', mysqli_error($connection)) .'.</p>
 <p>Currently, the username is '. theme('placeholder', $url['user']) .' and the database server is '. theme('placeholder', $url['host']) .'.</p>
 <ul>
Index: includes/database.pgsql.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database.pgsql.inc,v
retrieving revision 1.37
diff -u -d -F^\s*function -r1.37 database.pgsql.inc
--- includes/database.pgsql.inc	26 Sep 2006 14:09:05 -0000	1.37
+++ includes/database.pgsql.inc	16 Oct 2006 17:20:29 -0000
@@ -87,7 +87,7 @@ function db_connect($url) {
     drupal_set_header('HTTP/1.1 503 Service Unavailable');
     drupal_set_title('Unable to connect to database');
     print theme('maintenance_page', '<p>If you still have to install Drupal, proceed to the <a href="'. base_path() .'install.php">installation page</a>.</p>
-<p>If you have already finished installed Drupal, this either means that the username and password information in your <code>settings.php</code> file is incorrect or that we can\'t connect to the PostgreSQL database server. This could mean your hosting provider\'s database server is down.</p>
+<p>If you have already finished installed Drupal, this either means that the username and password information in your <code>settings.php</code> file is incorrect or that we can’t connect to the PostgreSQL database server. This could mean your hosting provider’s database server is down.</p>
 <p>The PostgreSQL error was: '. theme('placeholder', decode_entities($php_errormsg)) .'</p>
 <p>Currently, the database is '. theme('placeholder', substr($url['path'], 1)) .', the username is '. theme('placeholder', $url['user']) .', and the database server is '. theme('placeholder', $url['host']) .'.</p>
 <ul>
Index: includes/file.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/file.inc,v
retrieving revision 1.85
diff -u -d -F^\s*function -r1.85 file.inc
--- includes/file.inc	12 Oct 2006 15:06:12 -0000	1.85
+++ includes/file.inc	16 Oct 2006 17:20:30 -0000
@@ -118,7 +118,7 @@ function file_check_directory(&$director
       fclose($fp);
     }
     else {
-      $message = t("Security warning: Couldn't write .htaccess file. Please create a .htaccess file in your %directory directory which contains the following lines: <code>!htaccess</code>", array('%directory' => $directory, '!htaccess' => '<br />'. nl2br(check_plain($htaccess_lines))));
+      $message = t("Security warning: Couldn’t write .htaccess file. Please create a .htaccess file in your %directory directory which contains the following lines: <code>!htaccess</code>", array('%directory' => $directory, '!htaccess' => '<br />'. nl2br(check_plain($htaccess_lines))));
       form_set_error($form_item, $message);
       watchdog('security', $message, WATCHDOG_ERROR);
     }
Index: includes/image.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/image.inc,v
retrieving revision 1.15
diff -u -d -F^\s*function -r1.15 image.inc
--- includes/image.inc	18 Sep 2006 05:10:48 -0000	1.15
+++ includes/image.inc	16 Oct 2006 17:20:31 -0000
@@ -184,7 +184,7 @@ function image_gd_settings() {
     return t('The built-in GD2 toolkit is installed and working properly.');
   }
   else {
-    form_set_error('image_toolkit', t('The built-in GD image toolkit requires that the GD module for PHP be installed and configured properly. For more information see <a href="@url">PHP\'s image documentation</a>.', array('@url' => 'http://php.net/image')));
+    form_set_error('image_toolkit', t('The built-in GD image toolkit requires that the GD module for PHP be installed and configured properly. For more information see <a href="@url">PHP’s image documentation</a>.', array('@url' => 'http://php.net/image')));
     return FALSE;
   }
 }
Index: includes/locale.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/locale.inc,v
retrieving revision 1.94
diff -u -d -F^\s*function -r1.94 locale.inc
--- includes/locale.inc	2 Oct 2006 11:49:50 -0000	1.94
+++ includes/locale.inc	16 Oct 2006 17:20:34 -0000
@@ -153,7 +153,7 @@ function locale_custom_language_form() {
     '#size' => 12,
     '#maxlength' => 60,
     '#required' => TRUE,
-    '#description' => t("Commonly this is an <a href=\"@iso-codes\">ISO 639 language code</a> with an optional country code for regional variants. Examples include 'en', 'en-US' and 'zh-cn'.", array('@iso-codes' => 'http://www.w3.org/WAI/ER/IG/ert/iso639.htm')),
+    '#description' => t("Commonly this is an <a href=\"@iso-codes\">ISO 639 language code</a> with an optional country code for regional variants. Examples include ‘en’, ‘en-US’ and ‘zh-cn’.", array('@iso-codes' => 'http://www.w3.org/WAI/ER/IG/ert/iso639.htm')),
   );
   $form['custom language']['langname'] = array('#type' => 'textfield',
     '#title' => t('Language name in English'),
Index: modules/aggregator/aggregator.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/aggregator/aggregator.module,v
retrieving revision 1.309
diff -u -d -F^\s*function -r1.309 aggregator.module
--- modules/aggregator/aggregator.module	5 Oct 2006 18:22:48 -0000	1.309
+++ modules/aggregator/aggregator.module	16 Oct 2006 17:20:38 -0000
@@ -28,9 +28,9 @@ function aggregator_help($section) {
       $output .= '<p>'. t('For more information please read the configuration and customization handbook <a href="@aggregator">Aggregator page</a>.', array('@aggregator' => 'http://drupal.org/handbook/modules/aggregator/')) .'</p>';
       return $output;
     case 'admin/content/aggregator':
-      return t('<p>Thousands of sites (particularly news sites and weblogs) publish their latest headlines and/or stories in a machine-readable format so that other sites can easily link to them. This content is usually in the form of an <a href="http://blogs.law.harvard.edu/tech/rss">RSS</a> feed (which is an XML-based syndication standard). To display the feed or category in a block you must decide how many items to show by editing the feed or block and turning on the <a href="@block">feed\'s block</a>.</p>', array('@block' => url('admin/build/block')));
+      return t('<p>Thousands of sites (particularly news sites and weblogs) publish their latest headlines and/or stories in a machine-readable format so that other sites can easily link to them. This content is usually in the form of an <a href="http://blogs.law.harvard.edu/tech/rss">RSS</a> feed (which is an XML-based syndication standard). To display the feed or category in a block you must decide how many items to show by editing the feed or block and turning on the <a href="@block">feed’s block</a>.</p>', array('@block' => url('admin/build/block')));
     case 'admin/content/aggregator/add/feed':
-      return t('<p>Add a site that has an RSS/RDF/Atom feed. The URL is the full path to the feed file. For the feed to update automatically you must run "cron.php" on a regular basis. If you already have a feed with the URL you are planning to use, the system will not accept another feed with the same URL.</p>');
+      return t('<p>Add a site that has an RSS/RDF/Atom feed. The URL is the full path to the feed file. For the feed to update automatically you must run “cron.php” on a regular basis. If you already have a feed with the URL you are planning to use, the system will not accept another feed with the same URL.</p>');
     case 'admin/content/aggregator/add/category':
       return t('<p>Categories provide a way to group items from different news feeds together. Each news category has its own feed page and block. For example, you could tag various sport-related feeds as belonging to a category called <em>Sports</em>. News items can be added to a category automatically by setting a feed to automatically place its item into that category, or by using the categorize items link in any listing of news items.</p>');
   }
@@ -47,7 +47,7 @@ function aggregator_menu($may_cache) {
   if ($may_cache) {
     $items[] = array('path' => 'admin/content/aggregator',
       'title' => t('RSS aggregator'),
-      'description' => t('Configure which content your site aggregates from other sites, how often it polls them, and how they\'re categorized.'),
+      'description' => t('Configure which content your site aggregates from other sites, how often it polls them, and how they’re categorized.'),
       'callback' => 'aggregator_admin_overview',
       'access' => $edit);
     $items[] = array('path' => 'admin/content/aggregator/add/feed',
@@ -296,7 +296,7 @@ function aggregator_block($op, $delta = 
           if ($feed = db_fetch_object(db_query('SELECT fid, title, block FROM {aggregator_feed} WHERE fid = %d', $id))) {
             $block['subject'] = check_plain($feed->title);
             $result = db_query_range('SELECT * FROM {aggregator_item} WHERE fid = %d ORDER BY timestamp DESC, iid DESC', $feed->fid, 0, $feed->block);
-            $block['content'] = '<div class="more-link">'. l(t('more'), 'aggregator/sources/'. $feed->fid, array('title' => t('View this feed\'s recent news.'))) .'</div>';
+            $block['content'] = '<div class="more-link">'. l(t('more'), 'aggregator/sources/'. $feed->fid, array('title' => t('View this feed’s recent news.'))) .'</div>';
           }
           break;
 
@@ -304,7 +304,7 @@ function aggregator_block($op, $delta = 
           if ($category = db_fetch_object(db_query('SELECT cid, title, block FROM {aggregator_category} WHERE cid = %d', $id))) {
             $block['subject'] = check_plain($category->title);
             $result = db_query_range('SELECT i.* FROM {aggregator_category_item} ci LEFT JOIN {aggregator_item} i ON ci.iid = i.iid WHERE ci.cid = %d ORDER BY i.timestamp DESC, i.iid DESC', $category->cid, 0, $category->block);
-            $block['content'] = '<div class="more-link">'. l(t('more'), 'aggregator/categories/'. $category->cid, array('title' => t('View this category\'s recent news.'))) .'</div>';
+            $block['content'] = '<div class="more-link">'. l(t('more'), 'aggregator/categories/'. $category->cid, array('title' => t('View this category’s recent news.'))) .'</div>';
           }
           break;
       }
@@ -829,7 +829,7 @@ function aggregator_parse_feed(&$data, $
 
   if (!xml_parse($xml_parser, $data, 1)) {
     watchdog('aggregator', t('The RSS-feed from %site seems to be broken, due to an error "%error" on line %line.', array('%site' => $feed['title'], '%error' => xml_error_string(xml_get_error_code($xml_parser)), '%line' => xml_get_current_line_number($xml_parser))), WATCHDOG_WARNING);
-    drupal_set_message(t('The RSS-feed from %site seems to be broken, because of error "%error" on line %line.', array('%site' => $feed['title'], '%error' => xml_error_string(xml_get_error_code($xml_parser)), '%line' => xml_get_current_line_number($xml_parser))), 'error');
+    drupal_set_message(t('The RSS-feed from %site seems to be broken, because of error “%error” on line %line.', array('%site' => $feed['title'], '%error' => xml_error_string(xml_get_error_code($xml_parser)), '%line' => xml_get_current_line_number($xml_parser))), 'error');
     return 0;
   }
   xml_parser_free($xml_parser);
Index: modules/block/block.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/block/block.module,v
retrieving revision 1.229
diff -u -d -F^\s*function -r1.229 block.module
--- modules/block/block.module	8 Oct 2006 06:34:12 -0000	1.229
+++ modules/block/block.module	16 Oct 2006 17:20:40 -0000
@@ -14,8 +14,8 @@ function block_help($section) {
     case 'admin/help#block':
       $output = '<p>'. t('Blocks are boxes of content that may be rendered into certain regions of your web pages, for example, into sidebars. Blocks are usually generated automatically by modules (e.g., Recent Forum Topics), but administrators can also define custom blocks.') .'</p>';
       $output .= '<p>'. t('The region each block appears in depends on both which theme you are using (some themes allow greater control over block placement than others), and on the settings in the block administration section.') .'</p>';
-      $output .= '<p>'. t('The block administration screen lets you specify the vertical placement of the blocks within a region. You do this by assigning a weight to each block. Lighter blocks (those having a smaller weight) "float up" towards the top of the region; heavier ones "sink".') .'</p>';
-      $output .= t('<p>A block\'s visibility depends on:</p>
+      $output .= '<p>'. t('The block administration screen lets you specify the vertical placement of the blocks within a region. You do this by assigning a weight to each block. Lighter blocks (those having a smaller weight) “float up” towards the top of the region; heavier ones “sink”.') .'</p>';
+      $output .= t('<p>A block’s visibility depends on:</p>
 <ul>
 <li>Its enabled checkbox. Disabled blocks are never shown.</li>
 <li>Its throttle checkbox. Throttled blocks are hidden during high server loads.</li>
@@ -46,7 +46,7 @@ function block_help($section) {
 <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')));
     case 'admin/build/block/add':
-      return t('<p>Here you can create a new block. Once you have created this block you must make it active and give it a place on the page using <a href="@overview">blocks</a>. The title is used when displaying the block. The description is used in the "block" column on the <a href="@overview">blocks</a> page.</p>', array('@overview' => url('admin/build/block')));
+      return t('<p>Here you can create a new block. Once you have created this block you must make it active and give it a place on the page using <a href="@overview">blocks</a>. The title is used when displaying the block. The description is used in the “block” column on the <a href="@overview">blocks</a> page.</p>', array('@overview' => url('admin/build/block')));
   }
 }
 
@@ -68,7 +68,7 @@ function block_menu($may_cache) {
       'path' => 'admin/build/block',
       'title' => t('blocks'),
       'access' => user_access('administer blocks'),
-      'description' => t('Configure what block content appears in your site\'s sidebars and other regions.'),
+      'description' => t('Configure what block content appears in your site’s sidebars and other regions.'),
       'callback' => 'drupal_get_form',
       'callback arguments' => array('block_admin_display'));
     $items[] = array('path' => 'admin/build/block/list', 'title' => t('list'),
@@ -404,7 +404,7 @@ function block_admin_configure($module =
 
   // Get the block subject for the page title.
   $info = module_invoke($module, 'block', 'list');
-  drupal_set_title(t("'%name' block", array('%name' => $info[$delta]['info'])));
+  drupal_set_title(t("‘%name’ block", array('%name' => $info[$delta]['info'])));
 
   // Standard block configurations.
   $form['user_vis_settings'] = array(
@@ -462,7 +462,7 @@ function block_admin_configure($module =
   }
   else {
     $options = array(t('Show on every page except the listed pages.'), t('Show on only the listed pages.'));
-    $description = t("Enter one page per line as Drupal paths. The '*' character is a wildcard. Example paths are %blog for the blog page and %blog-wildcard for every personal blog. %front is the front page.", array('%blog' => 'blog', '%blog-wildcard' => 'blog/*', '%front' => '<front>'));
+    $description = t("Enter one page per line as Drupal paths. The ‘*’ character is a wildcard. Example paths are %blog for the blog page and %blog-wildcard for every personal blog. %front is the front page.", array('%blog' => 'blog', '%blog-wildcard' => 'blog/*', '%front' => '<front>'));
 
     if ($access) {
       $options[] = t('Show if the following PHP code returns <code>TRUE</code> (PHP-mode, experts only).');
Index: modules/blog/blog.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/blog/blog.module,v
retrieving revision 1.265
diff -u -d -F^\s*function -r1.265 blog.module
--- modules/blog/blog.module	31 Aug 2006 20:22:34 -0000	1.265
+++ modules/blog/blog.module	16 Oct 2006 17:20:40 -0000
@@ -49,7 +49,7 @@ function blog_access($op, $node) {
 function blog_user($type, &$edit, &$user) {
   if ($type == 'view' && user_access('edit own blog', $user)) {
     $items[] = array('title' => t('Blog'),
-      'value' => l(t('view recent blog entries'), "blog/$user->uid", array('title' => t("Read @username's latest blog entries.", array('@username' => $user->name)))),
+      'value' => l(t('view recent blog entries'), "blog/$user->uid", array('title' => t("Read @username’s latest blog entries.", array('@username' => $user->name)))),
       'class' => 'blog',
     );
     return array(t('History') => $items);
@@ -93,7 +93,7 @@ function blog_feed_user($uid = 0) {
   }
 
   $result = db_query_range(db_rewrite_sql("SELECT n.nid, n.title, r.teaser, n.created, u.name, u.uid FROM {node} n INNER JOIN {node_revisions} r ON n.vid = r.vid INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = 'blog' AND u.uid = %d AND n.status = 1 ORDER BY n.created DESC"), $uid, 0, variable_get('feed_default_items', 10));
-  $channel['title'] = $account->name ."'s blog";
+  $channel['title'] = $account->name ."’s blog";
   $channel['link'] = url("blog/$uid", NULL, NULL, TRUE);
   $channel['description'] = $term->description;
   node_feed($result, $channel);
@@ -140,7 +140,7 @@ function blog_page_user($uid) {
   $account = user_load(array((is_numeric($uid) ? 'uid' : 'name') => $uid, 'status' => 1));
 
   if ($account->uid) {
-    drupal_set_title($title = t("@name's blog", array('@name' => $account->name)));
+    drupal_set_title($title = t("@name’s blog", array('@name' => $account->name)));
 
     if (($account->uid == $user->uid) && user_access('edit own blog')) {
       $output = '<li>'. l(t('Post new blog entry.'), "node/add/blog") .'</li>';
@@ -229,7 +229,7 @@ function blog_view($node, $teaser = FALS
   if ($page) {
     // Breadcrumb navigation
     $breadcrumb[] = array('path' => 'blog', 'title' => t('blogs'));
-    $breadcrumb[] = array('path' => 'blog/'. $node->uid, 'title' => t("@name's blog", array('@name' => $node->name)));
+    $breadcrumb[] = array('path' => 'blog/'. $node->uid, 'title' => t("@name’s blog", array('@name' => $node->name)));
     $breadcrumb[] = array('path' => 'node/'. $node->nid);
     menu_set_location($breadcrumb);
   }
@@ -245,9 +245,9 @@ function blog_link($type, $node = NULL, 
   if ($type == 'node' && $node->type == 'blog') {
     if (arg(0) != 'blog' || arg(1) != $node->uid) {
       $links['blog_usernames_blog'] = array(
-        'title' => t("@username's blog", array('@username' => $node->name)),
+        'title' => t("@username’s blog", array('@username' => $node->name)),
         'href' => "blog/$node->uid",
-        'attributes' => array('title' => t("Read @username's latest blog entries.", array('@username' => $node->name)))
+        'attributes' => array('title' => t("Read @username’s latest blog entries.", array('@username' => $node->name)))
       );
     }
   }
Index: modules/blogapi/blogapi.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/blogapi/blogapi.module,v
retrieving revision 1.95
diff -u -d -F^\s*function -r1.95 blogapi.module
--- modules/blogapi/blogapi.module	31 Aug 2006 20:22:34 -0000	1.95
+++ modules/blogapi/blogapi.module	16 Oct 2006 17:20:42 -0000
@@ -13,8 +13,8 @@ function blogapi_help($section) {
   switch ($section) {
     case 'admin/help#blogapi':
       $output = '<p>'. t('The blog API module enables a post to be posted to a site via external GUI applications. Many users prefer to use external tools to improve their ability to read and post responses in a customized way. The blog api provides users the freedom to use the blogging tools they want but still have the blogging server of choice.') .'</p>';
-      $output .= '<p>'. t('When this module is enabled and configured you can use programs like <a href="@external-http-ecto-kung-foo-tv">Ecto</a> to create and publish posts from your desktop. Blog API module supports several XML-RPC based blogging APIs such as the <a href="@-">Blogger API</a>, <a href="@external-http-www-xmlrpc-com-metaWeblogApi">MetaWeblog API</a>, and most of the <a href="@external-http-www-movabletype-org-docs-mtmanual_programmatic-html">Movable Type API</a>. Any desktop blogging tools or other services (e.g. <a href="@external-http-www-flickr-com">Flickr\'s</a> "post to blog") that support these APIs should work with this site.', array('@external-http-ecto-kung-foo-tv' => 'http://ecto.kung-foo.tv/', '@-' => url('http://www.blogger.com/developers/api/1_docs/'), '@external-http-www-xmlrpc-com-metaWeblogApi' => 'http://www.xmlrpc.com/metaWeblogApi', '@external-http-www-movabletype-org-docs-mtmanual_programmatic-html' => 'http://www.movabletype.org/docs/mtmanual_programmatic.html', '@external-http-www-flickr-com' => 'http://www.flickr.com')) .'</p>';
-      $output .= '<p>'. t('This module also allows site administrators to configure which content types can be posted via the external applications. So, for instance, users can post forum topics as well as blog posts. Where supported, the external applications will display each content type as a separate "blog".<!--break-->') .'</p>';
+      $output .= '<p>'. t('When this module is enabled and configured you can use programs like <a href="@external-http-ecto-kung-foo-tv">Ecto</a> to create and publish posts from your desktop. Blog API module supports several XML-RPC based blogging APIs such as the <a href="@-">Blogger API</a>, <a href="@external-http-www-xmlrpc-com-metaWeblogApi">MetaWeblog API</a>, and most of the <a href="@external-http-www-movabletype-org-docs-mtmanual_programmatic-html">Movable Type API</a>. Any desktop blogging tools or other services (e.g. <a href="@external-http-www-flickr-com">Flickr’s</a> “post to blog”) that support these APIs should work with this site.', array('@external-http-ecto-kung-foo-tv' => 'http://ecto.kung-foo.tv/', '@-' => url('http://www.blogger.com/developers/api/1_docs/'), '@external-http-www-xmlrpc-com-metaWeblogApi' => 'http://www.xmlrpc.com/metaWeblogApi', '@external-http-www-movabletype-org-docs-mtmanual_programmatic-html' => 'http://www.movabletype.org/docs/mtmanual_programmatic.html', '@external-http-www-flickr-com' => 'http://www.flickr.com')) .'</p>';
+      $output .= '<p>'. t('This module also allows site administrators to configure which content types can be posted via the external applications. So, for instance, users can post forum topics as well as blog posts. Where supported, the external applications will display each content type as a separate “blog”.<!--break-->') .'</p>';
       $output .= t('<p>You can</p>
 <ul>
 <li>view the XML-RPC page on your site at &gt;&gt; <a href="@file-xmlrpc">xmlrpc.php</a>.</li>
@@ -520,7 +520,7 @@ function blogapi_validate_user($username
       return $user;
     }
     else {
-      return t("You either tried to edit somebody else's blog or you don't have permission to edit your own blog.");
+      return t("You either tried to edit somebody else’s blog or you don’t have permission to edit your own blog.");
     }
   }
   else {
@@ -551,7 +551,7 @@ function blogapi_admin_settings() {
     '#required' => TRUE,
     '#default_value' => variable_get('blogapi_node_types', $defaults),
     '#options' => $node_types,
-    '#description' => t('Select the content types for which you wish to enable posting via blogapi. Each type will appear as a different "blog" in the client application (if supported).')
+    '#description' => t('Select the content types for which you wish to enable posting via blogapi. Each type will appear as a different “blog” in the client application (if supported).')
   );
 
   return system_settings_form($form);
Index: modules/book/book.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/book/book.module,v
retrieving revision 1.393
diff -u -d -F^\s*function -r1.393 book.module
--- modules/book/book.module	26 Sep 2006 14:14:30 -0000	1.393
+++ modules/book/book.module	16 Oct 2006 17:20:44 -0000
@@ -14,7 +14,7 @@ function book_node_info() {
     'book' => array(
       'name' => t('book page'),
       'module' => 'book',
-      'description' => t("A book is a collaborative writing effort: users can collaborate writing the pages of the book, positioning the pages in the right order, and reviewing or modifying pages previously written. So when you have some information to share or when you read a page of the book and you didn't like it, or if you think a certain page could have been written better, you can do something about it."),
+      'description' => t("A book is a collaborative writing effort: users can collaborate writing the pages of the book, positioning the pages in the right order, and reviewing or modifying pages previously written. So when you have some information to share or when you read a page of the book and you didn’t like it, or if you think a certain page could have been written better, you can do something about it."),
     )
   );
 }
@@ -92,7 +92,7 @@ function book_menu($may_cache) {
     $items[] = array(
       'path' => 'admin/content/book',
       'title' => t('books'),
-      'description' => t('Manage site\'s books and orphaned book pages.'),
+      'description' => t('Manage site’s books and orphaned book pages.'),
       'callback' => 'book_admin',
       'access' => user_access('administer nodes'));
     $items[] = array(
@@ -1018,7 +1018,7 @@ function book_help($section) {
     case 'admin/content/book':
       return t('<p>The book module offers a means to organize content, authored by many users, in an online manual, outline or FAQ.</p>');
     case 'admin/content/book/orphan':
-      return t('<p>Pages in a book are like a tree. As pages are edited, reorganized and removed, child pages might be left with no link to the rest of the book. Such pages are referred to as "orphan pages". On this page, administrators can review their books for orphans and reattach those pages as desired.</p>');
+      return t('<p>Pages in a book are like a tree. As pages are edited, reorganized and removed, child pages might be left with no link to the rest of the book. Such pages are referred to as “orphan pages”. On this page, administrators can review their books for orphans and reattach those pages as desired.</p>');
   }
 
   if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == 'outline') {
Index: modules/comment/comment.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/comment/comment.module,v
retrieving revision 1.490
diff -u -d -F^\s*function -r1.490 comment.module
--- modules/comment/comment.module	11 Oct 2006 13:17:23 -0000	1.490
+++ modules/comment/comment.module	16 Oct 2006 17:20:48 -0000
@@ -82,11 +82,11 @@ function comment_help($section) {
       return $output;
     case 'admin/content/comment':
     case 'admin/content/comment/new':
-      return t("<p>Below is a list of the latest comments posted to your site. Click on a subject to see the comment, the author's name to edit the author's user information , \"edit\" to modify the text, and \"delete\" to remove their submission.</p>");
+      return t("<p>Below is a list of the latest comments posted to your site. Click on a subject to see the comment, the author’s name to edit the author’s user information , “edit” to modify the text, and “delete” to remove their submission.</p>");
     case 'admin/content/comment/approval':
-      return t("<p>Below is a list of the comments posted to your site that need approval. To approve a comment, click on \"edit\" and then change its \"moderation status\" to Approved. Click on a subject to see the comment, the author's name to edit the author's user information, \"edit\" to modify the text, and \"delete\" to remove their submission.</p>");
+      return t("<p>Below is a list of the comments posted to your site that need approval. To approve a comment, click on “edit” and then change its “moderation status” to Approved. Click on a subject to see the comment, the author’s name to edit the author’s user information, “edit” to modify the text, and “delete” to remove their submission.</p>");
     case 'admin/content/comment/settings':
-      return t("<p>Comments can be attached to any node, and their settings are below. The display comes in two types: a \"flat list\" where everything is flush to the left side, and comments come in chronological order, and a \"threaded list\" where replies to other comments are placed immediately below and slightly indented, forming an outline. They also come in two styles: \"expanded\", where you see both the title and the contents, and \"collapsed\" where you only see the title. Preview comment forces a user to look at their comment by clicking on a \"Preview\" button before they can actually add the comment.</p>");
+      return t("<p>Comments can be attached to any node, and their settings are below. The display comes in two types: a “flat list” where everything is flush to the left side, and comments come in chronological order, and a “threaded list” where replies to other comments are placed immediately below and slightly indented, forming an outline. They also come in two styles: “expanded”, where you see both the title and the contents, and “collapsed” where you only see the title. Preview comment forces a user to look at their comment by clicking on a “Preview” button before they can actually add the comment.</p>");
    }
 }
 
@@ -543,7 +543,7 @@ function comment_reply($nid, $pid = NULL
 
       // should we show the reply box?
       if (node_comment_mode($nid) != COMMENT_NODE_READ_WRITE) {
-        drupal_set_message(t("This discussion is closed: you can't post new comments."), 'error');
+        drupal_set_message(t("This discussion is closed: you can’t post new comments."), 'error');
         drupal_goto("node/$nid");
       }
       else if (user_access('post comments')) {
@@ -1605,7 +1605,7 @@ function theme_comment_controls($form) {
   $output .= '<div class="container-inline">';
   $output .=  drupal_render($form);
   $output .= '</div>';
-  $output .= '<div class="description">'. t('Select your preferred way to display the comments and click "Save settings" to activate your changes.') .'</div>';
+  $output .= '<div class="description">'. t('Select your preferred way to display the comments and click “Save settings” to activate your changes.') .'</div>';
   return theme('box', t('Comment viewing options'), $output);
 }
 
@@ -1666,7 +1666,7 @@ function theme_comment_thread_expanded($
 function theme_comment_post_forbidden($nid) {
   global $user;
   if ($user->uid) {
-    return t("you can't post comments");
+    return t("you can’t post comments");
   }
   else {
     // we cannot use drupal_get_destination() because these links sometimes appear on /node and taxo listing pages
Index: modules/contact/contact.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/contact/contact.module,v
retrieving revision 1.66
diff -u -d -F^\s*function -r1.66 contact.module
--- modules/contact/contact.module	8 Oct 2006 06:09:41 -0000	1.66
+++ modules/contact/contact.module	16 Oct 2006 17:20:50 -0000
@@ -14,7 +14,7 @@ function contact_help($section) {
     case 'admin/help#contact':
       $output = '<p>'. t('The contact module enables the use of both personal and site-wide contact forms, thereby facilitating easy communication within the community. While personal contact forms allow users to contact each other by e-mail, site-wide forms allow community members to contact the site administration from a central location. Users can specify a subject and message in the contact form, and also request that a copy of the e-mail be sent to their own address.') .'</p>';
       $output .= '<p>'. t("Users can activate/deactivate their personal contact forms in their account settings. Upon activation, a contact tab will appear in their user profiles. Privileged users such as site administrators are able to contact users even if they have chosen not to enable this feature.") .'</p>';
-      $output .= '<p>'. t("Note that the contact tab will not appear when a user views his or her own profile; only when viewing another user's profile, if that user's contact form is enabled.") .'</p>';
+      $output .= '<p>'. t("Note that the contact tab will not appear when a user views his or her own profile; only when viewing another user’s profile, if that user’s contact form is enabled.") .'</p>';
       $output .= '<p>'. t('If the menu module is enabled, a menu item linking to the site-wide contact page is added to the navigation block. It is disabled by default, but can be enabled via the <a href="@menu-module">menu management</a> page. Links to the contact page may also be added to the primary and secondary links using the same page.', array('@menu-module' => url('admin/build/menu'))) .'</p>';
       $output .= t('Contact module links:') .'<ul>';
       $output .= '<li>'. t('Default site-wide <a href="@contact-page">contact page</a>.', array('@contact-page' => url('contact'))) .'</li>';
@@ -168,13 +168,13 @@ function contact_admin_edit($cid = NULL)
     '#title' => t('Category'),
     '#maxlength' => 255,
     '#default_value' => $edit['category'],
-    '#description' => t("Example: 'website feedback' or 'product information'."),
+    '#description' => t("Example: ‘website feedback’ or ‘product information’."),
     '#required' => TRUE,
   );
   $form['recipients'] = array('#type' => 'textarea',
     '#title' => t('Recipients'),
     '#default_value' => $edit['recipients'],
-    '#description' => t("Example: 'webmaster@yoursite.com' or 'sales@yoursite.com'. To specify multiple recipients, separate each e-mail address with a comma."),
+    '#description' => t("Example: ‘webmaster@yoursite.com’ or ‘sales@yoursite.com’. To specify multiple recipients, separate each e-mail address with a comma."),
     '#required' => TRUE,
   );
   $form['reply'] = array('#type' => 'textarea',
@@ -366,7 +366,7 @@ function contact_mail_user_submit($form_
   // Compose the body:
   $message[] = "$account->name,";
   $message[] = t("!name (!name-url) has sent you a message via your contact form (!form-url) at !site.", array('!name' => $user->name, '!name-url' => url("user/$user->uid", NULL, NULL, TRUE), '!form-url' => url($_GET['q'], NULL, NULL, TRUE), '!site' => variable_get('site_name', 'drupal')));
-  $message[] = t("If you don't want to receive such e-mails, you can change your settings at !url.", array('!url' => url("user/$account->uid", NULL, NULL, TRUE)));
+  $message[] = t("If you don’t want to receive such e-mails, you can change your settings at !url.", array('!url' => url("user/$account->uid", NULL, NULL, TRUE)));
   $message[] = t('Message:');
   $message[] = $form_values['message'];
 
Index: modules/drupal/drupal.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/drupal/drupal.module,v
retrieving revision 1.128
diff -u -d -F^\s*function -r1.128 drupal.module
--- modules/drupal/drupal.module	31 Aug 2006 20:22:35 -0000	1.128
+++ modules/drupal/drupal.module	16 Oct 2006 17:20:51 -0000
@@ -24,7 +24,7 @@ function drupal_help($section) {
       $output .= '<p>'. t('The Drupal module administration page allows you to set the xml-rpc server page and other related options.') .'</p>';
       $output .= t('<p>You can</p>
 <ul>
-  <li>run your cron job at your site\'s <a href="@file-cron">cron page</a></li>
+  <li>run your cron job at your site’s <a href="@file-cron">cron page</a></li>
   <li>view your <a href="@file-xmlrpc">XML-RPC page</a>.</li>
   <li>administer Drupal <a href="@admin-settings-drupal">administer &gt;&gt; site configuration &gt;&gt; distributed authentication</a>.</li>
 </ul>
@@ -45,7 +45,7 @@ function drupal_help($section) {
       $output .= '<p>'. t('For more information please read the configuration and customization handbook <a href="@drupal">Drupal page</a>.', array('@drupal' => 'http://drupal.org/handbook/modules/drupal/')) .'</p>';
       return $output;
     case 'admin/settings/distributed-authentication':
-      return t('<p>Using this your site can "call home" to another Drupal server. By calling home to drupal.org and sending a list of your installed modules and themes, you help rank projects on drupal.org and so assist all Drupal administrators to find the best components for meeting their needs. If you want to register with a different server, you can change the Drupal XML-RPC server setting -- but the server has to be able to handle Drupal XML. Some XML-RPC servers may present directories of all registered sites. To get all your site information listed, go to the <a href="@site-settings">site information settings page</a> and set the site name, the e-mail address, the slogan, and the mission statement.</p>', array('@site-settings' => url('admin/settings/site-information')));
+      return t('<p>Using this your site can “call home” to another Drupal server. By calling home to drupal.org and sending a list of your installed modules and themes, you help rank projects on drupal.org and so assist all Drupal administrators to find the best components for meeting their needs. If you want to register with a different server, you can change the Drupal XML-RPC server setting -- but the server has to be able to handle Drupal XML. Some XML-RPC servers may present directories of all registered sites. To get all your site information listed, go to the <a href="@site-settings">site information settings page</a> and set the site name, the e-mail address, the slogan, and the mission statement.</p>', array('@site-settings' => url('admin/settings/site-information')));
     case 'user/help#drupal':
       return variable_get('drupal_authentication_service', 0) ? t("<p><a href=\"@Drupal\">Drupal</a> is the name of the software that powers %this-site. There are Drupal web sites all over the world, and many of them share their registration databases so that users may freely log in to any Drupal site using a single <strong>Drupal ID</strong>.</p>
 <p>So please feel free to log in to your account here at %this-site with a username from another Drupal site. The format of a Drupal ID is similar to an e-mail address: <strong>username</strong>@<em>server</em>. An example of a valid Drupal ID is <strong>mwlily</strong>@<em>drupal.org</em>.</p>", array('@Drupal' => 'http://drupal.org', '%this-site' => variable_get('site_name', 'this web site'))) : '';
@@ -74,7 +74,7 @@ function drupal_sites_registry_settings(
     '#title' => t('Register with a Drupal server'),
     '#default_value' => variable_get('drupal_register', 0),
     '#options' => $options,
-    '#description' => t("If enabled, your Drupal site will register itself with the specified Drupal XML-RPC server. For this to work properly, you must set your site's name, e-mail address, slogan and mission statement. When the Drupal XML-RPC server field is set to %drupal-xml-rpc, your web site will register itself with drupal.org. Requires the cron feature to be enabled.", array("%drupal-xml-rpc" => "http://drupal.org/xmlrpc.php"))
+    '#description' => t("If enabled, your Drupal site will register itself with the specified Drupal XML-RPC server. For this to work properly, you must set your site’s name, e-mail address, slogan and mission statement. When the Drupal XML-RPC server field is set to %drupal-xml-rpc, your web site will register itself with drupal.org. Requires the cron feature to be enabled.", array("%drupal-xml-rpc" => "http://drupal.org/xmlrpc.php"))
   );
 
   $form['drupal_server'] =  array(
@@ -136,7 +136,7 @@ function drupal_distributed_authenticati
     '#title' => t('Only allow authentication from default server'),
     '#default_value' => variable_get('drupal_default_da_server_only', 0),
     '#options' => $options,
-    '#description' => t('Only accept remote logins from the above specified default authentication server and not from any other server. Useful when an external system is the solitary authority on user accounts for this site. A common usage is to enable this setting and also enable an authentication module which talks to your company\'s directory server.')
+    '#description' => t('Only accept remote logins from the above specified default authentication server and not from any other server. Useful when an external system is the solitary authority on user accounts for this site. A common usage is to enable this setting and also enable an authentication module which talks to your company’s directory server.')
   );
 
   return system_settings_form($form);
Index: modules/filter/filter.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter/filter.module,v
retrieving revision 1.145
diff -u -d -F^\s*function -r1.145 filter.module
--- modules/filter/filter.module	4 Oct 2006 06:13:33 -0000	1.145
+++ modules/filter/filter.module	16 Oct 2006 17:20:54 -0000
@@ -20,7 +20,7 @@
 function filter_help($section) {
   switch ($section) {
     case 'admin/help#filter':
-      $output = '<p>'. t('The filter module allows administrators to configure  text input formats for the site. For example, an administrator may want a filter to strip out malicious HTML from user\'s comments. Administrators may also want to make URLs linkable even if they are only entered in an unlinked format.') .'</p>';
+      $output = '<p>'. t('The filter module allows administrators to configure  text input formats for the site. For example, an administrator may want a filter to strip out malicious HTML from user’s comments. Administrators may also want to make URLs linkable even if they are only entered in an unlinked format.') .'</p>';
       $output .= '<p>'. t('Users can choose between the available input formats when creating or editing content. Administrators can configure which input formats are available to which user roles, as well as choose a default input format. Administrators can also create new input formats. Each input format can be configured to use a selection of filters.') .'</p>';
       $output .= t('<p>You can</p>
 <ul>
@@ -36,7 +36,7 @@ function filter_help($section) {
 <p><em>Input formats</em> define a way of processing user-supplied text in Drupal. Every input format has its own settings of which <em>filters</em> to apply. Possible filters include stripping out malicious HTML and making URLs clickable.</p>
 <p>Users can choose between the available input formats when submitting content.</p>
 <p>Below you can configure which input formats are available to which roles, as well as choose a default input format (used for imported content, for example).</p>
-<p>Note that (1) the default format is always available to all roles, and (2) all filter formats can always be used by roles with the "administer filters" permission even if they are not explicitly listed in the Roles column of this table.</p>');
+<p>Note that (1) the default format is always available to all roles, and (2) all filter formats can always be used by roles with the “administer filters” permission even if they are not explicitly listed in the Roles column of this table.</p>');
 
     case 'admin/settings/filters/'. arg(3):
       return t('
@@ -45,12 +45,12 @@ function filter_help($section) {
 
     case 'admin/settings/filters/'. arg(3) .'/configure':
       return t('
-<p>If you cannot find the settings for a certain filter, make sure you\'ve enabled it on the <a href="@url">view tab</a> first.</p>', array('@url' => url('admin/settings/filters/'. arg(3))));
+<p>If you cannot find the settings for a certain filter, make sure you’ve enabled it on the <a href="@url">view tab</a> first.</p>', array('@url' => url('admin/settings/filters/'. arg(3))));
 
     case 'admin/settings/filters/'. arg(3) .'/order':
       return t('
 <p>Because of the flexible filtering system, you might encounter a situation where one filter prevents another from doing its job. For example: a word in an URL gets converted into a glossary term, before the URL can be converted in a clickable link. When this happens, you will need to rearrange the order in which filters get executed.</p>
-<p>Filters are executed from top-to-bottom. You can use the weight column to rearrange them: heavier filters \'sink\' to the bottom.</p>');
+<p>Filters are executed from top-to-bottom. You can use the weight column to rearrange them: heavier filters ‘sink’ to the bottom.</p>');
   }
 }
 
@@ -175,10 +175,10 @@ function filter_filter_tips($delta, $for
 
               $output .= t('
 <p>This site allows HTML content. While learning all of HTML may feel intimidating, learning how to use a very small number of the most basic HTML "tags" is very easy. This table provides examples for each tag that is enabled on this site.</p>
-<p>For more information see W3C\'s <a href="http://www.w3.org/TR/html/">HTML Specifications</a> or use your favorite search engine to find other sites that explain HTML.</p>');
+<p>For more information see W3C’s <a href="http://www.w3.org/TR/html/">HTML Specifications</a> or use your favorite search engine to find other sites that explain HTML.</p>');
               $tips = array(
                 'a' => array( t('Anchors are used to make links to other pages.'), '<a href="'. $base_url .'">'. variable_get('site_name', 'drupal') .'</a>'),
-                'br' => array( t('By default line break tags are automatically added, so use this tag to add additional ones. Use of this tag is different because it is not used with an open/close pair like all the others. Use the extra " /" inside the tag to maintain XHTML 1.0 compatibility'), t('Text with <br />line break')),
+                'br' => array( t('By default line break tags are automatically added, so use this tag to add additional ones. Use of this tag is different because it is not used with an open/close pair like all the others. Use the extra “ /” inside the tag to maintain XHTML 1.0 compatibility'), t('Text with <br />line break')),
                 'p' => array( t('By default paragraph tags are automatically added, so use this tag to add additional ones.'), '<p>'. t('Paragraph one.') .'</p> <p>'. t('Paragraph two.') .'</p>'),
                 'strong' => array( t('Strong'), '<strong>'. t('Strong'). '</strong>'),
                 'em' => array( t('Emphasized'), '<em>'. t('Emphasized') .'</em>'),
@@ -235,7 +235,7 @@ function filter_filter_tips($delta, $for
 
               $output .= t('
 <p>Most unusual characters can be directly entered without any problems.</p>
-<p>If you do encounter problems, try using HTML character entities. A common example looks like &amp;amp; for an ampersand &amp; character. For a full list of entities see HTML\'s <a href="http://www.w3.org/TR/html4/sgml/entities.html">entities</a> page. Some of the available characters include:</p>');
+<p>If you do encounter problems, try using HTML character entities. A common example looks like &amp;amp; for an ampersand &amp; character. For a full list of entities see HTML’s <a href="http://www.w3.org/TR/html4/sgml/entities.html">entities</a> page. Some of the available characters include:</p>');
               $entities = array(
                 array( t('Ampersand'), '&amp;'),
                 array( t('Greater than'), '&gt;'),
@@ -268,7 +268,7 @@ function filter_filter_tips($delta, $for
         case 1:
           return t('
 <h4>Using custom PHP code</h4>
-<p>If you know how to script in PHP, Drupal gives you the power to embed any script you like. It will be executed when the page is viewed and dynamically embedded into the page. This gives you amazing flexibility and power, but of course with that comes danger and insecurity if you don\'t write good code. If you are not familiar with PHP, SQL or with the site engine, avoid experimenting with PHP because you can corrupt your database or render your site insecure or even unusable! If you don\'t plan to do fancy stuff with your content then you\'re probably better off with straight HTML.</p>
+<p>If you know how to script in PHP, Drupal gives you the power to embed any script you like. It will be executed when the page is viewed and dynamically embedded into the page. This gives you amazing flexibility and power, but of course with that comes danger and insecurity if you don’t write good code. If you are not familiar with PHP, SQL or with the site engine, avoid experimenting with PHP because you can corrupt your database or render your site insecure or even unusable! If you don’t plan to do fancy stuff with your content then you’re probably better off with straight HTML.</p>
 <p>Remember that the code within each PHP item must be valid PHP code - including things like correctly terminating statements with a semicolon. It is highly recommended that you develop your code separately using a simple test script on top of a test database before migrating to your production environment.</p>
 <p>Notes:</p><ul><li>You can use global variables, such as configuration parameters, within the scope of your PHP code but remember that global variables which have been given values in your code will retain these values in the engine afterwards.</li><li>register_globals is now set to <strong>off</strong> by default. If you need form information you need to get it from the "superglobals" $_POST, $_GET, etc.</li><li>You can either use the <code>print</code> or <code>return</code> statement to output the actual content for your item.</li></ul>
 <p>A basic example:</p>
@@ -423,7 +423,7 @@ function filter_admin_format_form($forma
   // Add a row of checkboxes for form group.
   $form['roles'] = array('#type' => 'fieldset',
     '#title' => t('Roles'),
-    '#description' => $default ? $help : t('Choose which roles may use this filter format. Note that roles with the "administer filters" permission can always use all the filter formats.'),
+    '#description' => $default ? $help : t('Choose which roles may use this filter format. Note that roles with the “administer filters” permission can always use all the filter formats.'),
     '#tree' => TRUE,
   );
 
@@ -1042,8 +1042,8 @@ function filter_filter($op, $delta = 0, 
  */
 function _filter_html_settings($format) {
   $form['filter_html'] = array('#type' => 'fieldset', '#title' => t('HTML filter'), '#collapsible' => TRUE, '#collapsed' => TRUE);
-  $form['filter_html']["filter_html_$format"] = array('#type' => 'radios', '#title' => t('Filter HTML tags'), '#default_value' => variable_get("filter_html_$format", FILTER_HTML_STRIP), '#options' => array(FILTER_HTML_STRIP => t('Strip disallowed tags'), FILTER_HTML_ESCAPE => t('Escape all tags')), '#description' => t('How to deal with HTML tags in user-contributed content. If set to "Strip disallowed tags", dangerous tags are removed (see below). If set to "Escape tags", all HTML is escaped and presented as it was typed.'));
-  $form['filter_html']["allowed_html_$format"] = array('#type' => 'textfield', '#title' => t('Allowed HTML tags'), '#default_value' => variable_get("allowed_html_$format", '<a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>'), '#size' => 64, '#maxlength' => 255, '#description' => t('If "Strip disallowed tags" is selected, optionally specify tags which should not be stripped. JavaScript event attributes are always stripped.'));
+  $form['filter_html']["filter_html_$format"] = array('#type' => 'radios', '#title' => t('Filter HTML tags'), '#default_value' => variable_get("filter_html_$format", FILTER_HTML_STRIP), '#options' => array(FILTER_HTML_STRIP => t('Strip disallowed tags'), FILTER_HTML_ESCAPE => t('Escape all tags')), '#description' => t('How to deal with HTML tags in user-contributed content. If set to “Strip disallowed tags”, dangerous tags are removed (see below). If set to “Escape tags”, all HTML is escaped and presented as it was typed.'));
+  $form['filter_html']["allowed_html_$format"] = array('#type' => 'textfield', '#title' => t('Allowed HTML tags'), '#default_value' => variable_get("allowed_html_$format", '<a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>'), '#size' => 64, '#maxlength' => 255, '#description' => t('If “Strip disallowed tags” is selected, optionally specify tags which should not be stripped. JavaScript event attributes are always stripped.'));
   $form['filter_html']["filter_html_help_$format"] = array('#type' => 'checkbox', '#title' => t('Display HTML help'), '#default_value' => variable_get("filter_html_help_$format", 1), '#description' => t('If enabled, Drupal will display some basic HTML help in the long filter tips.'));
   $form['filter_html']["filter_html_nofollow_$format"] = array('#type' => 'checkbox', '#title' => t('Spam link deterrent'), '#default_value' => variable_get("filter_html_nofollow_$format", FALSE), '#description' => t('If enabled, Drupal will add rel="nofollow" to all links, as a measure to reduce the effectiveness of spam links. Note: this will also prevent valid links from being followed by search engines, therefore it is likely most effective when enabled for anonymous users.'));
   return $form;
Index: modules/forum/forum.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/forum/forum.module,v
retrieving revision 1.362
diff -u -d -F^\s*function -r1.362 forum.module
--- modules/forum/forum.module	4 Oct 2006 06:07:05 -0000	1.362
+++ modules/forum/forum.module	16 Oct 2006 17:20:57 -0000
@@ -28,9 +28,9 @@ function forum_help($section) {
     case 'admin/content/forum':
       return t('<p>This is a list of existing containers and forums that you can edit. Containers hold forums and, in turn, forums hold threaded discussions. Both containers and forums can be placed inside other containers and forums. By planning the structure of your containers and forums well, you make it easier for users to find a topic area of interest to them.</p>');
     case 'admin/content/forum/add/container':
-      return t('<p>Containers help you organize your forums. The job of a container is to hold, or contain, other forums that are related. For example, a container named "Food" might hold two forums named "Fruit" and "Vegetables".</p>');
+      return t('<p>Containers help you organize your forums. The job of a container is to hold, or contain, other forums that are related. For example, a container named “Food” might hold two forums named “Fruit” and “Vegetables”.</p>');
     case 'admin/content/forum/add/forum':
-      return t('<p>A forum holds discussion topics that are related. For example, a forum named "Fruit" might contain topics titled "Apples" and "Bananas".</p>');
+      return t('<p>A forum holds discussion topics that are related. For example, a forum named “Fruit” might contain topics titled “Apples” and “Bananas”.</p>');
   }
 }
 
Index: modules/help/help.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/help/help.module,v
retrieving revision 1.60
diff -u -d -F^\s*function -r1.60 help.module
--- modules/help/help.module	14 Oct 2006 06:07:14 -0000	1.60
+++ modules/help/help.module	16 Oct 2006 17:20:57 -0000
@@ -108,7 +108,7 @@ function help_help($section) {
 <ul>
 <li>The name of a module (unused, but there).</li>
 <li>The description found on the admin/settings/modules page.</li>
-<li>The module\'s help text, displayed on the admin/help page and through the module\'s individual help link.</li>
+<li>The module’s help text, displayed on the admin/help page and through the module’s individual help link.</li>
 <li>The help for a distributed authorization module (if applicable).</li>
 <li>The description of a post type (if applicable).</li>
 </ul>
Index: modules/locale/locale.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/locale/locale.module,v
retrieving revision 1.146
diff -u -d -F^\s*function -r1.146 locale.module
--- modules/locale/locale.module	4 Oct 2006 06:41:24 -0000	1.146
+++ modules/locale/locale.module	16 Oct 2006 17:20:58 -0000
@@ -21,7 +21,7 @@ function locale_help($section) {
     case 'admin/help#locale':
       $output = '<p>'. t('The locale module allows you to present your Drupal site in a language other than the default English. You can use it to set up a multi-lingual web site or replace given <em>built-in</em> text with text which has been customized for your site. Whenever the locale module encounters text which needs to be displayed, it tries to translate it into the currently selected language. If a translation is not available, then the string is remembered, so you can look up untranslated strings easily.') .'</p>';
       $output .= '<p>'. t('The locale module provides two options for providing translations. The first is the integrated web interface, via which you can search for untranslated strings, and specify their translations. An easier and less time-consuming method is to import existing translations for your language. These translations are available as <em>GNU gettext Portable Object files</em> (<em>.po</em> files for short). Translations for many languages are available for download from the translation page.') .'</p>';
-      $output .= '<p>'. t('If an existing translation does not meet your needs, the <em>.po</em> files are easily edited with special editing tools. The locale module\'s import feature allows you to add strings from such files into your site\'s database. The export functionality enables you to share your translations with others, generating Portable Object files from your site strings.') .'</p>';
+      $output .= '<p>'. t('If an existing translation does not meet your needs, the <em>.po</em> files are easily edited with special editing tools. The locale module’s import feature allows you to add strings from such files into your site’s database. The export functionality enables you to share your translations with others, generating Portable Object files from your site strings.') .'</p>';
       $output .= t('<p>You can</p>
 <ul>
 <li>administer localization at <a href="@admin-locale">administer &gt;&gt; site configuration &gt;&gt; localization</a>.</li>
@@ -37,7 +37,7 @@ function locale_help($section) {
     case 'admin/settings/locale/language/overview':
       return t("<p>Drupal provides support for the translation of its interface text into different languages. This page provides an overview of the installed languages. You can add a language on the <a href=\"@add-language\">add language page</a>, or directly by <a href=\"@import\">importing a translation</a>. If multiple languages are enabled, registered users will be able to set their preferred language. The site default will be used for anonymous visitors and for users without their own settings.</p><p>Drupal interface translations may be added or extended by several courses: by <a href=\"@import\">importing</a> an existing translation, by <a href=\"@search\">translating everything</a> from scratch, or by a combination of these approaches.</p>", array("@search" => url("admin/settings/locale/string/search"), "@import" => url("admin/settings/locale/language/import"), "@add-language" => url("admin/settings/locale/language/add")));
     case 'admin/settings/locale/language/add':
-      return t("<p>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>.</p>", array("@import" => url("admin/settings/locale/language/import")));
+      return t("<p>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>.</p>", array("@import" => url("admin/settings/locale/language/import")));
     case 'admin/settings/locale/language/import':
       return t("<p>This page allows you to import a translation provided in the gettext Portable Object (.po) format. The easiest way to get your site translated is to obtain an existing Drupal translation and to import it. You can find existing translations on the <a href=\"@url\">Drupal translation page</a>. Note that importing a translation file might take a while.</p>", array('@url' => 'http://drupal.org/project/translations'));
     case 'admin/settings/locale/language/export':
Index: modules/menu/menu.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/menu/menu.module,v
retrieving revision 1.90
diff -u -d -F^\s*function -r1.90 menu.module
--- modules/menu/menu.module	17 Sep 2006 19:17:24 -0000	1.90
+++ modules/menu/menu.module	16 Oct 2006 17:21:00 -0000
@@ -12,7 +12,7 @@
 function menu_help($section) {
   switch ($section) {
     case 'admin/help#menu':
-      $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 labelled %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). Any menu can be designated as the primary or secondary links menu via the <a href="@menu-settings">menu settings page</a>.</p>
 Menu administration tabs:
 <ul>
@@ -49,7 +49,7 @@ function menu_menu($may_cache) {
   if ($may_cache) {
     $items[] = array('path' => 'admin/build/menu',
       'title' => t('menus'),
-      'description' => t('Control your site\'s navigation menu, create menu blocks, as well as rename and reorganize menu items.'),
+      'description' => t('Control your site’s navigation menu, create menu blocks, as well as rename and reorganize menu items.'),
       'callback' => 'menu_overview',
       'access' => user_access('administer menu'));
     $items[] = array('path' => 'admin/build/menu/list',
Index: modules/node/content_types.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/content_types.inc,v
retrieving revision 1.9
diff -u -d -F^\s*function -r1.9 content_types.inc
--- modules/node/content_types.inc	10 Sep 2006 07:36:37 -0000	1.9
+++ modules/node/content_types.inc	16 Oct 2006 17:21:01 -0000
@@ -143,7 +143,7 @@ function node_type_form($type = NULL) {
     '#title' => t('Minimum number of words'),
     '#default_value' => $type->min_word_count,
     '#options' => drupal_map_assoc(array(0, 10, 25, 50, 75, 100, 125, 150, 175, 200)),
-    '#description' => t('The minimum number of words for the body field to be considered valid for this content type. This can be useful to rule out submissions that do not meet the site\'s standards, such as short test posts.')
+    '#description' => t('The minimum number of words for the body field to be considered valid for this content type. This can be useful to rule out submissions that do not meet the site’s standards, such as short test posts.')
   );
   $form['workflow'] = array(
     '#type' => 'fieldset',
Index: modules/node/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.module,v
retrieving revision 1.707
diff -u -d -F^\s*function -r1.707 node.module
--- modules/node/node.module	14 Oct 2006 11:09:09 -0000	1.707
+++ modules/node/node.module	16 Oct 2006 17:21:07 -0000
@@ -942,7 +942,7 @@ function node_configure() {
     '#options' => array(0 => t('Unlimited'), 200 => t('200 characters'), 400 => t('400 characters'), 600 => t('600 characters'),
       800 => t('800 characters'), 1000 => t('1000 characters'), 1200 => t('1200 characters'), 1400 => t('1400 characters'),
       1600 => t('1600 characters'), 1800 => t('1800 characters'), 2000 => t('2000 characters')),
-    '#description' => t("The maximum number of characters used in the trimmed version of a post. Drupal will use this setting to determine at which offset long posts should be trimmed. The trimmed version of a post is typically used as a teaser when displaying the post on the main page, in XML feeds, etc. To disable teasers, set to 'Unlimited'. Note that this setting will only affect new or updated content and will not affect existing teasers.")
+    '#description' => t("The maximum number of characters used in the trimmed version of a post. Drupal will use this setting to determine at which offset long posts should be trimmed. The trimmed version of a post is typically used as a teaser when displaying the post on the main page, in XML feeds, etc. To disable teasers, set to ‘Unlimited’. Note that this setting will only affect new or updated content and will not affect existing teasers.")
   );
 
   $form['node_preview'] = array(
@@ -991,7 +991,7 @@ function node_menu($may_cache) {
   if ($may_cache) {
     $items[] = array('path' => 'admin/content',
       'title' => t('content management'),
-      'description' => t('Manage your site\'s content.'),
+      'description' => t('Manage your site’s content.'),
       'position' => 'left',
       'weight' => -10,
       'callback' => 'system_admin_menu_block_page',
@@ -1001,7 +1001,7 @@ function node_menu($may_cache) {
     $items[] = array(
       'path' => 'admin/content/node',
       'title' => t('posts'),
-      'description' => t('View, edit, and delete your site\'s content.'),
+      'description' => t('View, edit, and delete your site’s content.'),
       'callback' => 'node_admin_content',
       'access' => user_access('administer nodes')
     );
@@ -2098,7 +2098,7 @@ function node_preview($node) {
 function theme_node_preview($node) {
   $output = '<div class="preview">';
   if ($node->teaser && $node->teaser != $node->body) {
-    drupal_set_message(t('The trimmed version of your post shows what your post looks like when promoted to the main page or when exported for syndication. You can insert the delimiter "&lt;!--break--&gt;" (without the quotes) to fine-tune where your post gets split.'));
+    drupal_set_message(t('The trimmed version of your post shows what your post looks like when promoted to the main page or when exported for syndication. You can insert the delimiter “&lt;!--break--&gt;” (without the quotes) to fine-tune where your post gets split.'));
     $output .= '<h3>'. t('Preview trimmed version') .'</h3>';
     $output .= node_view(drupal_clone($node), 1, FALSE, 0);
     $output .= '<h3>'. t('Preview full version') .'</h3>';
Index: modules/path/path.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/path/path.module,v
retrieving revision 1.96
diff -u -d -F^\s*function -r1.96 path.module
--- modules/path/path.module	8 Sep 2006 16:33:02 -0000	1.96
+++ modules/path/path.module	16 Oct 2006 17:21:08 -0000
@@ -21,7 +21,7 @@ function path_help($section) {
 <li>node/3 =&gt; contact</li>
 </ul>
 ');
-      $output .= '<p>'. t('The path module enables an extra field for aliases in all node input and editing forms (when users have the appropriate permissions). It also provides an interface to view and edit all URL aliases. The two permissions are related to URL aliasing are "administer a list of URL aliases" and "add url aliases". ') .'</p>';
+      $output .= '<p>'. t('The path module enables an extra field for aliases in all node input and editing forms (when users have the appropriate permissions). It also provides an interface to view and edit all URL aliases. The two permissions are related to URL aliasing are “administer a list of URL aliases” and “add url aliases”. ') .'</p>';
       $output .= '<p>'. t('This module also comes with user-defined mass URL aliasing capabilities, which is useful if you wish to uniformly use URLs different from the default. For example, you may want to have your URLs presented in a different language. Access to the Drupal source code on the web server is required to set up these kinds of aliases. ') .'</p>';
       $output .= t('<p>You can</p>
 <ul>
@@ -29,13 +29,13 @@ function path_help($section) {
 <li>add a URL alias: <a href="@admin-path-add">administer &gt;&gt; site building &gt;&gt; url aliases &gt;&gt; add alias</a>.</li>
 <li>administer the list of URL aliases: <a href="@admin-path">administer &gt;&gt; site building &gt;&gt; url aliases</a>.</li>
 <li>read how to <a href="@external-http-drupal-org-node-15365">configure clean URLs</a> for your webserver.
-<li>enable clean url\'s to remove the =? at <a href="@admin-clean-url-settings">administer &gt;&gt; site configuration &gt;&gt; clean URLs</a>.</li>
+<li>enable clean url’s to remove the =? at <a href="@admin-clean-url-settings">administer &gt;&gt; site configuration &gt;&gt; clean URLs</a>.</li>
 </ul>
 ', array('@admin-path-add' => url('admin/build/path/add'), '@admin-path' => url('admin/build/path'), '@external-http-drupal-org-node-15365' => 'http://drupal.org/node/15365', '@admin-clean-url-settings' => url('admin/settings/clean-urls')));
       $output .= '<p>'. t('For more information please read the configuration and customization handbook <a href="@path">Path page</a>.', array('@path' => 'http://drupal.org/handbook/modules/path/')) .'</p>';
       return $output;
     case 'admin/build/path':
-      return t("<p>Drupal provides users complete control over URLs through aliasing. This feature is typically used to make URLs human-readable or easy to remember. For example, one could map the relative URL 'node/1' onto 'about'. Each system path can have multiple aliases.</p>");
+      return t("<p>Drupal provides users complete control over URLs through aliasing. This feature is typically used to make URLs human-readable or easy to remember. For example, one could map the relative URL ‘node/1’ onto ‘about’. Each system path can have multiple aliases.</p>");
     case 'admin/build/path/add':
       return t('<p>Enter the path you wish to create the alias for, followed by the name of the new alias.</p>');
   }
@@ -49,7 +49,7 @@ function path_menu($may_cache) {
 
   if ($may_cache) {
     $items[] = array('path' => 'admin/build/path', 'title' => t('url aliases'),
-      'description' => t('Change your site\'s URL paths by aliasing them.'),
+      'description' => t('Change your site’s URL paths by aliasing them.'),
       'callback' => 'path_admin',
       'access' => user_access('administer url aliases'));
     $items[] = array('path' => 'admin/build/path/edit', 'title' => t('edit alias'),
@@ -198,7 +198,7 @@ function path_form($edit = '') {
     '#default_value' => $edit['dst'],
     '#maxlength' => 64,
     '#size' => 45,
-    '#description' => t('Specify an alternative path by which this data can be accessed. For example, type "about" when writing an about page. Use a relative path and don\'t add a trailing slash or the URL alias won\'t work.'),
+    '#description' => t('Specify an alternative path by which this data can be accessed. For example, type “about” when writing an about page. Use a relative path and don’t add a trailing slash or the URL alias won’t work.'),
     '#field_prefix' => url(NULL, NULL, NULL, TRUE) . (variable_get('clean_url', 0) ? '' : '?q=')
   );
 
@@ -284,7 +284,7 @@ function path_form_alter($form_id, &$for
       '#maxlength' => 250,
       '#collapsible' => TRUE,
       '#collapsed' => TRUE,
-      '#description' => t('Optionally specify an alternative URL by which this node can be accessed. For example, type "about" when writing an about page. Use a relative path and don\'t add a trailing slash or the URL alias won\'t work.'),
+      '#description' => t('Optionally specify an alternative URL by which this node can be accessed. For example, type “about” when writing an about page. Use a relative path and don’t add a trailing slash or the URL alias won’t work.'),
     );
     if ($path) {
       $form['path']['pid'] = array(
Index: modules/ping/ping.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/ping/ping.module,v
retrieving revision 1.44
diff -u -d -F^\s*function -r1.44 ping.module
--- modules/ping/ping.module	7 Sep 2006 08:12:24 -0000	1.44
+++ modules/ping/ping.module	16 Oct 2006 17:21:08 -0000
@@ -12,7 +12,7 @@
 function ping_help($section) {
   switch ($section) {
     case 'admin/help#ping':
-      $output = '<p>'. t('The ping module is useful for notifying interested sites that your site has changed. It automatically sends notifications (called "pings") to the <a href="@external-http-pingomatic-com">pingomatic</a> service to tell it that your site has changed. In turn pingomatic will ping other services such as weblogs.com, Technorati, blo.gs, BlogRolling, Feedster.com, Moreover, etc.', array('@external-http-pingomatic-com' => 'http://pingomatic.com/')) .'</p>';
+      $output = '<p>'. t('The ping module is useful for notifying interested sites that your site has changed. It automatically sends notifications (called “pings”) to the <a href="@external-http-pingomatic-com">pingomatic</a> service to tell it that your site has changed. In turn pingomatic will ping other services such as weblogs.com, Technorati, blo.gs, BlogRolling, Feedster.com, Moreover, etc.', array('@external-http-pingomatic-com' => 'http://pingomatic.com/')) .'</p>';
       $output .= '<p>'. t('The ping module requires <code>cron</code> or a similar periodic job scheduler to be enabled.') .'</p>';
       $output .= t('<p>You can:</p>
 <ul>
Index: modules/poll/poll.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/poll/poll.module,v
retrieving revision 1.218
diff -u -d -F^\s*function -r1.218 poll.module
--- modules/poll/poll.module	9 Oct 2006 06:53:25 -0000	1.218
+++ modules/poll/poll.module	16 Oct 2006 17:21:09 -0000
@@ -14,7 +14,7 @@ function poll_help($section) {
   switch ($section) {
     case 'admin/help#poll':
       $output = '<p>'. t('The poll module can be used to create simple polls for site users. A poll is a simple multiple choice questionnaire which displays the cumulative results of the answers to the poll. Having polls on the site is a good way to get instant feedback from community members.') .'</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('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 .= t('<p>You can</p>
 <ul>
 <li>view the <a href="@poll">polls page</a>.</li>
@@ -164,7 +164,7 @@ function poll_form($node, $form_values =
     '#parents' => array('morechoices'),
     '#title' => t('Need more choices'),
     '#value' => 0,
-    '#description' => t("If the amount of boxes above isn't enough, check this box and click the Preview button below to add some more."),
+    '#description' => t("If the amount of boxes above isn’t enough, check this box and click the Preview button below to add some more."),
     '#weight' => 1,
   );
 
Index: modules/profile/profile.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/profile/profile.module,v
retrieving revision 1.172
diff -u -d -F^\s*function -r1.172 profile.module
--- modules/profile/profile.module	12 Oct 2006 20:12:11 -0000	1.172
+++ modules/profile/profile.module	16 Oct 2006 17:21:12 -0000
@@ -229,20 +229,20 @@ function profile_field_form($arg = NULL)
     '#title' => t('Category'),
     '#default_value' => $edit['category'],
     '#autocomplete_path' => 'admin/user/profile/autocomplete',
-    '#description' => t('The category the new field should be part of. Categories are used to group fields logically. An example category is "Personal information".'),
+    '#description' => t('The category the new field should be part of. Categories are used to group fields logically. An example category is “Personal information”.'),
     '#required' => TRUE,
   );
   $form['fields']['title'] = array('#type' => 'textfield',
     '#title' => t('Title'),
     '#default_value' => $edit['title'],
-    '#description' => t('The title of the new field. The title will be shown to the user. An example title is "Favorite color".'),
+    '#description' => t('The title of the new field. The title will be shown to the user. An example title is “Favorite color”.'),
     '#required' => TRUE,
   );
   $form['fields']['name'] = array('#type' => 'textfield',
     '#title' => t('Form name'),
     '#default_value' => $edit['name'],
     '#description' => t('The name of the field. The form name is not shown to the user but used internally in the HTML code and URLs.
-Unless you know what you are doing, it is highly recommended that you prefix the form name with <code>profile_</code> to avoid name clashes with other fields. Spaces or any other special characters except dash (-) and underscore (_) are not allowed. An example name is "profile_favorite_color" or perhaps just "profile_color".'),
+Unless you know what you are doing, it is highly recommended that you prefix the form name with <code>profile_</code> to avoid name clashes with other fields. Spaces or any other special characters except dash (-) and underscore (_) are not allowed. An example name is “profile_favorite_color” or perhaps just “profile_color”.'),
     '#required' => TRUE,
   );
   $form['fields']['explanation'] = array('#type' => 'textarea',
@@ -254,14 +254,14 @@ function profile_field_form($arg = NULL)
     $form['fields']['options'] = array('#type' => 'textarea',
       '#title' => t('Selection options'),
       '#default_value' => $edit['options'],
-      '#description' => t('A list of all options. Put each option on a separate line. Example options are "red", "blue", "green", etc.'),
+      '#description' => t('A list of all options. Put each option on a separate line. Example options are “red”, “blue”, “green”, etc.'),
     );
   }
   $form['fields']['weight'] = array('#type' => 'weight',
     '#title' => t('Weight'),
     '#default_value' => $edit['weight'],
     '#delta' => 5,
-    '#description' => t('The weights define the order in which the form fields are shown. Lighter fields "float up" towards the top of the category.'),
+    '#description' => t('The weights define the order in which the form fields are shown. Lighter fields “float up” towards the top of the category.'),
   );
   $form['fields']['visibility'] = array('#type' => 'radios',
     '#title' => t('Visibility'),
@@ -272,14 +272,14 @@ function profile_field_form($arg = NULL)
     $form['fields']['page'] = array('#type' => 'textfield',
       '#title' => t('Page title'),
       '#default_value' => $edit['page'],
-      '#description' => t('To enable browsing this field by value, enter a title for the resulting page. The word <code>%value</code> will be substituted with the corresponding value. An example page title is "People whose favorite color is %value". This is only applicable for a public field.'),
+      '#description' => t('To enable browsing this field by value, enter a title for the resulting page. The word <code>%value</code> will be substituted with the corresponding value. An example page title is “People whose favorite color is %value”. This is only applicable for a public field.'),
     );
   }
   else if ($type == 'checkbox') {
     $form['fields']['page'] = array('#type' => 'textfield',
       '#title' => t('Page title'),
       '#default_value' => $edit['page'],
-      '#description' => t('To enable browsing this field by value, enter a title for the resulting page. An example page title is "People who are employed". This is only applicable for a public field.'),
+      '#description' => t('To enable browsing this field by value, enter a title for the resulting page. An example page title is “People who are employed”. This is only applicable for a public field.'),
     );
   }
   $form['fields']['autocomplete'] = array('#type' => 'checkbox',
Index: modules/search/search.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/search/search.module,v
retrieving revision 1.200
diff -u -d -F^\s*function -r1.200 search.module
--- modules/search/search.module	7 Oct 2006 13:39:04 -0000	1.200
+++ modules/search/search.module	16 Oct 2006 17:21:14 -0000
@@ -97,7 +97,7 @@ function search_help($section) {
   switch ($section) {
     case 'admin/help#search':
       $output = '<p>'. t('The search module adds the ability to search for content by keywords. Search is often the only practical way to find content on a large site. Search is useful for finding users and posts by searching on keywords.') .'</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 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 .= t('<p>You can</p>
 <ul>
 <li>read about how your site uses cron in the <a href="@admin-help-system">administer &gt;&gt; help &gt;&gt; system</a>.</li>
@@ -109,12 +109,12 @@ function search_help($section) {
       return $output;
     case 'admin/settings/search':
       return t('
-<p>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>
+<p>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>
 ');
     case 'search#noresults':
       return t('<ul>
 <li>Check if your spelling is correct.</li>
-<li>Remove quotes around phrases to match each word individually: <em>"blue smurf"</em> will match less than <em>blue smurf</em>.</li>
+<li>Remove quotes around phrases to match each word individually: <em>“blue smurf”</em> will match less than <em>blue smurf</em>.</li>
 <li>Consider loosening your query with <em>OR</em>: <em>blue smurf</em> will match less than <em>blue OR smurf</em>.</li>
 </ul>');
   }
@@ -239,7 +239,7 @@ function search_admin_settings() {
   $form['indexing_throttle']['search_cron_limit'] = array('#type' => 'select', '#title' => t('Items to index per cron run'), '#default_value' => variable_get('search_cron_limit', 100), '#options' => $items, '#description' => t('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.'));
   // Indexing settings:
   $form['indexing_settings'] = array('#type' => 'fieldset', '#title' => t('Indexing settings'));
-  $form['indexing_settings']['info'] = array('#type' => 'markup', '#value' => '<em>'. t('<p>Changing the settings below will cause the site index to be rebuilt. The search index is not cleared but systematically updated to reflect the new settings. Searching will continue to work but new content won\'t be indexed until all existing content has been re-indexed.</p><p>The default settings should be appropriate for the majority of sites.</p>') .'</em>');
+  $form['indexing_settings']['info'] = array('#type' => 'markup', '#value' => '<em>'. t('<p>Changing the settings below will cause the site index to be rebuilt. The search index is not cleared but systematically updated to reflect the new settings. Searching will continue to work but new content won’t be indexed until all existing content has been re-indexed.</p><p>The default settings should be appropriate for the majority of sites.</p>') .'</em>');
   $form['indexing_settings']['minimum_word_size'] = array('#type' => 'textfield', '#title' => t('Minimum word length to index'), '#default_value' => variable_get('minimum_word_size', 3), '#size' => 5, '#maxlength' => 3, '#description' => t('The number of characters a word has to be to be indexed. A lower setting means better search result ranking, but also a larger database. Each search query must contain at least one keyword that is this size (or longer).'));
   $form['indexing_settings']['overlap_cjk'] = array('#type' => 'checkbox', '#title' => t('Simple CJK handling'), '#default_value' => variable_get('overlap_cjk', TRUE), '#description' => t('Whether to apply a simple Chinese/Japanese/Korean tokenizer based on overlapping sequences. Turn this off if you want to use an external preprocessor for this instead. Does not affect other languages.'));
 
@@ -254,7 +254,7 @@ function search_admin_settings() {
  */
 function search_wipe_confirm() {
   return confirm_form(array(), t('Are you sure you want to re-index the site?'),
-                  'admin/settings/search', t(' The search index is not cleared but systematically updated to reflect the new settings. Searching will continue to work but new content won\'t be indexed until all existing content has been re-indexed. This action cannot be undone.'), t('Re-index site'), t('Cancel'));
+                  'admin/settings/search', t(' The search index is not cleared but systematically updated to reflect the new settings. Searching will continue to work but new content won’t be indexed until all existing content has been re-indexed. This action cannot be undone.'), t('Re-index site'), t('Cancel'));
 }
 
 /**
Index: modules/statistics/statistics.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/statistics/statistics.module,v
retrieving revision 1.241
diff -u -d -F^\s*function -r1.241 statistics.module
--- modules/statistics/statistics.module	31 Aug 2006 21:58:36 -0000	1.241
+++ modules/statistics/statistics.module	16 Oct 2006 17:21:16 -0000
@@ -17,16 +17,16 @@ function statistics_help($section) {
 <ul>
 <li>Logs show statistics for how many times your site and specific content on your site has been accessed.</li>
 <li>Referrers tells you from where visitors came from (referrer URL).</li>
-<li>Top pages shows you what\'s hot, what is the most popular content on your site.</li>
+<li>Top pages shows you what’s hot, what is the most popular content on your site.</li>
 <li>Top users shows you the most active users for your site.</li>
 <li>Recent hits displays information about the latest activity on your site.</li>
-<li>Node count displays the number of times a node has been accessed in the node\'s link section next to <em># comments</em>.</li>
-<li>Popular content block creates a block that can display the day\'s top viewed content, the all time top viewed content, and the last content viewed.</li>
+<li>Node count displays the number of times a node has been accessed in the node’s link section next to <em># comments</em>.</li>
+<li>Popular content block creates a block that can display the day’s top viewed content, the all time top viewed content, and the last content viewed.</li>
 </ul>
 ');
       $output .= t('<p>Configuring the statistics module</p>
 <ul>
-<li>Enable access log allows you to turn the access log on and off. This log is used to store data about every page accessed, such as the remote host\'s IP address, where they came from (referrer), what node they\'ve viewed, and their user name. Enabling the log adds one database call per page displayed by Drupal.</li>
+<li>Enable access log allows you to turn the access log on and off. This log is used to store data about every page accessed, such as the remote host’s IP address, where they came from (referrer), what node they’ve viewed, and their user name. Enabling the log adds one database call per page displayed by Drupal.</li>
 <li>Discard access logs older than allows you to configure how long an access log entry is saved, after which time it is deleted from the database table. To use this you need to run <em>cron.php</em></li>
 <li>Enable node view counter allows you to turn on and off the node-counting functionality of this module. If it is turned on, an extra database query is added for each node displayed, which increments a counter.</li>
 </ul>
@@ -36,7 +36,7 @@ function statistics_help($section) {
 <li>administer statistics <a href="@admin-settings-statistics">administer &gt;&gt; logs &gt;&gt; access log settings</a>.</li>
 <li>access statistics logs <a href="@admin-logs">administer &gt;&gt; logs</a>.</li>
 <li>view recent hits <a href="@admin-logs-hits">administer &gt;&gt; logs &gt;&gt; recent hits</a>.</li>
-<li>enable \'popular content\' block in block administration <a href="@admin-block">administer &gt;&gt; site building &gt;&gt; blocks </a> but only after you have enabled \'Count content views\' in settings.</li>
+<li>enable ‘popular content’ block in block administration <a href="@admin-block">administer &gt;&gt; site building &gt;&gt; blocks </a> but only after you have enabled ‘Count content views’ in settings.</li>
 </ul>
 ', array('@admin-settings-statistics' => url('admin/logs/settings'), '@admin-logs' => url('admin/logs'), '@admin-logs-hits' => url('admin/logs/hits'), '@admin-block' => url('admin/build/block')));
       $output .= '<p>'. t('For more information please read the configuration and customization handbook <a href="@statistics">Statistics page</a>.', array('@statistics' => 'http://drupal.org/handbook/modules/statistics/')) .'</p>';
@@ -48,7 +48,7 @@ function statistics_help($section) {
     case 'admin/logs/referrers':
       return t('<p>This page shows you all external referrers. These are links pointing to your web site from outside your web site.</p>');
     case 'admin/logs/visitors':
-      return t("<p>When you ban a visitor, you prevent the visitor's IP address from accessing your site. Unlike blocking a user, banning a visitor works even for anonymous users. The most common use for this is to block bots/web crawlers that are consuming too many resources.</p>");
+      return t("<p>When you ban a visitor, you prevent the visitor’s IP address from accessing your site. Unlike blocking a user, banning a visitor works even for anonymous users. The most common use for this is to block bots/web crawlers that are consuming too many resources.</p>");
   }
 }
 
@@ -475,9 +475,9 @@ function statistics_block($op = 'list', 
     case 'configure':
       // Popular content block settings
       $numbers = array('0' => t('Disabled')) + drupal_map_assoc(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30, 40));
-      $form['statistics_block_top_day_num'] = array('#type' => 'select', '#title' => t("Number of day's top views to display"), '#default_value' => variable_get('statistics_block_top_day_num', 0), '#options' => $numbers, '#description' => t('How many content items to display in "day" list.'));
-      $form['statistics_block_top_all_num'] = array('#type' => 'select', '#title' => t('Number of all time views to display'), '#default_value' => variable_get('statistics_block_top_all_num', 0), '#options' => $numbers, '#description' => t('How many content items to display in "all time" list.'));
-      $form['statistics_block_top_last_num'] = array('#type' => 'select', '#title' => t('Number of most recent views to display'), '#default_value' => variable_get('statistics_block_top_last_num', 0), '#options' => $numbers, '#description' => t('How many content items to display in "recently viewed" list.'));
+      $form['statistics_block_top_day_num'] = array('#type' => 'select', '#title' => t("Number of day’s top views to display"), '#default_value' => variable_get('statistics_block_top_day_num', 0), '#options' => $numbers, '#description' => t('How many content items to display in “day” list.'));
+      $form['statistics_block_top_all_num'] = array('#type' => 'select', '#title' => t('Number of all time views to display'), '#default_value' => variable_get('statistics_block_top_all_num', 0), '#options' => $numbers, '#description' => t('How many content items to display in “all time” list.'));
+      $form['statistics_block_top_last_num'] = array('#type' => 'select', '#title' => t('Number of most recent views to display'), '#default_value' => variable_get('statistics_block_top_last_num', 0), '#options' => $numbers, '#description' => t('How many content items to display in “recently viewed” list.'));
       return $form;
 
     case 'save':
@@ -492,7 +492,7 @@ function statistics_block($op = 'list', 
 
         $daytop = variable_get('statistics_block_top_day_num', 0);
         if ($daytop && ($result = statistics_title_list('daycount', $daytop)) && db_num_rows($result)) {
-          $content[] = node_title_list($result, t("Today's:"));
+          $content[] = node_title_list($result, t("Today’s:"));
         }
 
         $alltimetop = variable_get('statistics_block_top_all_num', 0);
Index: modules/system/system.install
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.install,v
retrieving revision 1.33
diff -u -d -F^\s*function -r1.33 system.install
--- modules/system/system.install	11 Oct 2006 13:14:47 -0000	1.33
+++ modules/system/system.install	16 Oct 2006 17:21:23 -0000
@@ -41,7 +41,7 @@ function system_requirements($phase) {
         break;
 
       default:
-        $requirements['webserver']['description'] = $t('The web server you\'re using has not been tested with Drupal and might not work properly.');
+        $requirements['webserver']['description'] = $t('The web server you’re using has not been tested with Drupal and might not work properly.');
         $requirements['webserver']['severity'] = REQUIREMENT_WARNING;
         break;
     }
@@ -74,7 +74,7 @@ function system_requirements($phase) {
       $requirements['settings.php'] = array(
         'value' => $t('Not protected'),
         'severity' => REQUIREMENT_ERROR,
-        'description' => $t('The file %file is not protected from modifications and poses a security risk. You must change the file\'s permissions to be non-writable.', array('%file' => conf_path() .'/settings.php')),
+        'description' => $t('The file %file is not protected from modifications and poses a security risk. You must change the file’s permissions to be non-writable.', array('%file' => conf_path() .'/settings.php')),
       );
     }
     else {
Index: modules/system/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.module,v
retrieving revision 1.380
diff -u -d -F^\s*function -r1.380 system.module
--- modules/system/system.module	14 Oct 2006 11:47:12 -0000	1.380
+++ modules/system/system.module	16 Oct 2006 17:21:28 -0000
@@ -18,7 +18,7 @@ function system_help($section) {
     case 'admin/help#system':
       $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 web site 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 web site performance. The settings module provides control over preferences, behaviours including visual and operational settings.') .'</p>';
       $output .= '<p>'. t('Some modules require regularly scheduled actions, such as cleaning up logfiles. Cron, which stands for chronograph, is a periodic command scheduler executing commands at intervals specified in seconds. It can be used to control the execution of daily, weekly and monthly jobs (or anything with a period measured in seconds). The aggregator module periodically updates feeds using cron. Ping periodically notifies services of new content on your site. Search periodically indexes the content on your site. Automating tasks is one of the best ways to keep a system running smoothly, and if most of your administration does not require your direct involvement, cron is an ideal solution. Cron can, if necessary, also be run manually.') .'</p>';
-      $output .= '<p>'. t('There is a caching mechanism which stores dynamically generated web pages in a database. By caching a web page, the system module does not have to create the page each time someone wants to view it, instead it takes only one SQL query to display it, reducing response time and the server\'s load. Only pages requested by <em>anonymous</em> users are cached. In order to reduce server load and save bandwidth, the system module stores and sends cached pages compressed.') .'</p>';
+      $output .= '<p>'. t('There is a caching mechanism which stores dynamically generated web pages in a database. By caching a web page, the system module does not have to create the page each time someone wants to view it, instead it takes only one SQL query to display it, reducing response time and the server’s load. Only pages requested by <em>anonymous</em> users are cached. In order to reduce server load and save bandwidth, the system module stores and sends cached pages compressed.') .'</p>';
       $output .= t('<p>You can</p>
 <ul>
 <li>activate your cron job on the cron page <a href="@file-cron">cron.php</a>.</li>
@@ -35,15 +35,15 @@ function system_help($section) {
     case 'admin/by-module':
       return t('<p>This page shows you all available administration tasks for each module.</p>');
     case 'admin/settings/page-caching':
-      return t('Enabling the cache will offer a sufficient performance boost. Drupal can store and send compressed cached pages requested by "anonymous" users. By caching a web page, Drupal does not have to create the page each time someone wants to view it.');
+      return t('Enabling the cache will offer a sufficient performance boost. Drupal can store and send compressed cached pages requested by “anonymous” users. By caching a web page, Drupal does not have to create the page each time someone wants to view it.');
     case 'admin/build/themes':
-      return t('<p>Select which themes are available to your users and specify the default theme. To configure site-wide display settings, click the "configure" task above. Alternately, to override these settings in a specific theme, click the "configure" link for the corresponding theme. Note that different themes may have different regions available for rendering content like blocks. If you want consistency in what your users see, you may wish to enable only one theme.</p>');
+      return t('<p>Select which themes are available to your users and specify the default theme. To configure site-wide display settings, click the “configure” task above. Alternately, to override these settings in a specific theme, click the “configure” link for the corresponding theme. Note that different themes may have different regions available for rendering content like blocks. If you want consistency in what your users see, you may wish to enable only one theme.</p>');
     case 'admin/build/themes/settings':
       return t('<p>These options control the default display settings for your entire site, across all themes. Unless they have been overridden by a specific theme, these settings will be used.</p>');
     case 'admin/build/themes/settings/'. arg(3):
       $reference = explode('.', arg(3), 2);
       $theme = array_pop($reference);
-      return t('<p>These options control the display settings for the <code>%template</code> theme. When your site is displayed using this theme, these settings will be used. By clicking "Reset to defaults," you can choose to use the <a href="@global">global settings</a> for this theme.</p>', array('%template' => $theme, '@global' => url('admin/build/themes/settings')));
+      return t('<p>These options control the display settings for the <code>%template</code> theme. When your site is displayed using this theme, these settings will be used. By clicking “Reset to defaults”, you can choose to use the <a href="@global">global settings</a> for this theme.</p>', array('%template' => $theme, '@global' => url('admin/build/themes/settings')));
     case 'admin/build/modules':
       if (empty($_POST) || $_POST['op'] != t('Save configuration')) {
         return t('<p>Modules are plugins for Drupal that extend its core functionality. Here you can select which modules are enabled. Click on the name of the module in the navigation menu for their individual configuration pages. Once a module is enabled, new <a href="@permissions">permissions</a> might be made available. Modules can automatically be temporarily disabled to reduce server load when your site becomes extremely busy by enabling the throttle.module and checking throttle. The auto-throttle functionality must be enabled on the <a href="@throttle">throttle configuration page</a> after having enabled the throttle module.</p>
@@ -51,7 +51,7 @@ function system_help($section) {
       }
       break;
     case 'admin/logs/status':
-      return t('<p>Here you can find a short overview of your Drupal site\'s parameters as well as any problems detected with your installation. It is useful to copy/paste this information when you need support.</p>');
+      return t('<p>Here you can find a short overview of your Drupal site’s parameters as well as any problems detected with your installation. It is useful to copy/paste this information when you need support.</p>');
   }
 }
 
@@ -242,7 +242,7 @@ function system_menu($may_cache) {
     $items[] = array(
       'path' => 'admin/settings/date-time',
       'title' => t('date and time'),
-      'description' => t('Settings for how Drupal displays date and time, as well as the system\'s default timezone.'),
+      'description' => t('Settings for how Drupal displays date and time, as well as the system’s default timezone.'),
       'callback' => 'drupal_get_form',
       'callback arguments' => array('system_date_time_settings'));
     $items[] = array(
@@ -270,7 +270,7 @@ function system_menu($may_cache) {
     $items[] = array(
       'path' => 'admin/logs/status',
       'title' => t('status report'),
-      'description' => t('Get a status report about your site\'s operation and any detected problems.'),
+      'description' => t('Get a status report about your site’s operation and any detected problems.'),
       'callback' => 'system_status',
       'weight' => 10,
       'access' => $access);
@@ -416,7 +416,7 @@ function system_admin_theme_settings() {
     '#type' => 'select',
     '#options' => $options,
     '#title' => t('Administration theme'),
-    '#description' => t('Choose which theme the administration pages should display in. If you choose "System default" the administration pages theme will display in the same theme the rest of the site uses.'),
+    '#description' => t('Choose which theme the administration pages should display in. If you choose “System default” the administration pages theme will display in the same theme the rest of the site uses.'),
     '#default_value' => variable_get('admin_theme', '0'),
   );
 
@@ -541,7 +541,7 @@ function system_site_information_setting
     '#type' => 'textarea',
     '#title' => t('Mission'),
     '#default_value' => variable_get('site_mission', ''),
-    '#description' => t('Your site\'s mission statement or focus.')
+    '#description' => t('Your site’s mission statement or focus.')
   );
   $form['site_footer'] = array(
     '#type' => 'textarea',
@@ -560,7 +560,7 @@ function system_site_information_setting
     '#title' => t('Default front page'),
     '#default_value' => variable_get('site_frontpage', 'node'),
     '#size' => 40,
-    '#description' => t('The home page displays content from this relative URL. If unsure, specify "node".'),
+    '#description' => t('The home page displays content from this relative URL. If unsure, specify “node”.'),
     '#field_prefix' => url(NULL, NULL, NULL, TRUE) . (variable_get('clean_url', 0) ? '' : '?q=')
   );
 
@@ -574,12 +574,12 @@ function system_clean_url_settings() {
     '#title' => t('Clean URLs'),
     '#default_value' => variable_get('clean_url', 0),
     '#options' => array(t('Disabled'), t('Enabled')),
-    '#description' => t('This option makes Drupal emit "clean" URLs (i.e. without <code>?q=</code> in the URL.)'),
+    '#description' => t('This option makes Drupal emit “clean” URLs (i.e. without <code>?q=</code> in the URL.)'),
   );
 
   if (!variable_get('clean_url', 0)) {
     if (strpos(request_uri(), '?q=') !== FALSE) {
-      $form['clean_url']['#description'] .= t(' Before enabling clean URLs, you must perform a test to determine if your server is properly configured. If you are able to see this page again after clicking the "Run the clean URL test" link, the test has succeeded and the radio buttons above will be available. If instead you are directed to a "Page not found" error, you will need to change the configuration of your server. The <a href="@handbook">handbook page on Clean URLs</a> has additional troubleshooting information. !run-test', array('@handbook' => 'http://drupal.org/node/15365', '!run-test' => '<a href ="'. base_path() . 'admin/settings/clean-urls">'. t('Run the clean URL test') .'</a>'));
+      $form['clean_url']['#description'] .= t('Before enabling clean URLs, you must perform a test to determine if your server is properly configured. If you are able to see this page again after clicking the “Run the clean URL test” link, the test has succeeded and the radio buttons above will be available. If instead you are directed to a “Page not found” error, you will need to change the configuration of your server. The <a href="@handbook">handbook page on Clean URLs</a> has additional troubleshooting information. !run-test', array('@handbook' => 'http://drupal.org/node/15365', '!run-test' => '<a href ="'. base_path() . 'admin/settings/clean-urls">'. t('Run the clean URL test') .'</a>'));
       $form['clean_url']['#disabled'] = TRUE;
     }
     else {
@@ -641,7 +641,7 @@ function system_page_caching_settings() 
     $description .= '<p>'. t("<strong class=\"error\">The following enabled modules are incompatible with aggressive mode caching and will not function properly: %modules</strong>", array('%modules' => implode(', ', $problem_modules))) .'.</p>';
   }
   else {
-    $description .= '<p>'. t("<strong class=\"ok\">Currently, all enabled modules are compatible with the aggressive caching policy.</strong> Please note, if you use aggressive caching and enable new modules, you'll need to check this page again to ensure compatibility.") .'</p>';
+    $description .= '<p>'. t("<strong class=\"ok\">Currently, all enabled modules are compatible with the aggressive caching policy.</strong> Please note, if you use aggressive caching and enable new modules, you’ll need to check this page again to ensure compatibility.") .'</p>';
   }
 
   $form['cache'] = array(
@@ -709,7 +709,7 @@ function system_image_toolkit_settings()
     return system_settings_form($form);
   }
   else {
-    $form['error'] = array('#value' => '<p>'. t("No image toolkits found.  Drupal will use PHP's built-in GD library for image handling.") .'</p>');
+    $form['error'] = array('#value' => '<p>'. t("No image toolkits found.  Drupal will use PHP’s built-in GD library for image handling.") .'</p>');
     return $form;
   }
 }
@@ -819,7 +819,7 @@ function system_site_maintenance_setting
     '#title' => t('Site status'),
     '#default_value' => variable_get('site_offline', 0),
     '#options' => array(t('Online'), t('Off-line')),
-    '#description' => t('When set to "Online", all visitors will be able to browse your site normally. When set to "Off-line", only users with the "administer site configuration" permission will be able to access your site to perform maintenance; all other visitors will see the site off-line message configured below. Authorized users can log in during "Off-line" mode directly via the <a href="@user-login">user login</a> page.', array('@user-login' => url('user'))),
+    '#description' => t('When set to “Online”, all visitors will be able to browse your site normally. When set to “Off-line”, only users with the “administer site configuration” permission will be able to access your site to perform maintenance; all other visitors will see the site off-line message configured below. Authorized users can log in during “Off-line” mode directly via the <a href="@user-login">user login</a> page.', array('@user-login' => url('user'))),
   );
 
   $form['site_offline_message'] = array(
@@ -1845,14 +1845,14 @@ function system_theme_settings($key = ''
       '#type' => 'file',
       '#title' => t('Upload logo image'),
       '#maxlength' => 40,
-      '#description' => t("If you don't have direct file access to the server, use this field to upload your logo.")
+      '#description' => t("If you don’t have direct file access to the server, use this field to upload your logo.")
     );
   }
 
   // Icon settings
   if ((!$key) || in_array('toggle_favicon', $features)) {
     $form['favicon'] = array('#type' => 'fieldset', '#title' => t('Shortcut icon settings'));
-    $form['favicon']['text'] = array('#value' => t('Your shortcut icon or \'favicon\' is displayed in the address bar and bookmarks of most browsers.'));
+    $form['favicon']['text'] = array('#value' => t('Your shortcut icon or ‘favicon’ is displayed in the address bar and bookmarks of most browsers.'));
     $form['favicon']['default_favicon'] = array(
       '#type' => 'checkbox',
       '#title' => t('Use the default shortcut icon.'),
@@ -1869,7 +1869,7 @@ function system_theme_settings($key = ''
     $form['favicon']['favicon_upload'] = array(
       '#type' => 'file',
       '#title' => t('Upload icon image'),
-      '#description' => t("If you don't have direct file access to the server, use this field to upload your shortcut icon.")
+      '#description' => t("If you don’t have direct file access to the server, use this field to upload your shortcut icon.")
     );
   }
 
@@ -1974,7 +1974,7 @@ function theme_admin_page($blocks) {
     $output .= l(t('Show descriptions'), 'admin/compact/off', array('title' => t('Produce a less compact layout that includes descriptions.')));
   }
   else {
-    $output .= l(t('Hide descriptions'), 'admin/compact/on', array('title' => t('Produce a more compact layout that doesn\'t include descriptions.')));
+    $output .= l(t('Hide descriptions'), 'admin/compact/on', array('title' => t('Produce a more compact layout that doesn’t include descriptions.')));
   }
   $output .= '</div>';
 
Index: modules/taxonomy/taxonomy.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.module,v
retrieving revision 1.318
diff -u -d -F^\s*function -r1.318 taxonomy.module
--- modules/taxonomy/taxonomy.module	13 Oct 2006 14:59:03 -0000	1.318
+++ modules/taxonomy/taxonomy.module	16 Oct 2006 17:21:31 -0000
@@ -207,7 +207,7 @@ function taxonomy_form_vocabulary($edit 
     '#title' => t('Vocabulary name'),
     '#default_value' => $edit['name'],
     '#maxlength' => 64,
-    '#description' => t('The name for this vocabulary. Example: "Topic".'),
+    '#description' => t('The name for this vocabulary. Example: “Topic”.'),
     '#required' => TRUE,
   );
   $form['description'] = array('#type' => 'textarea',
@@ -356,7 +356,7 @@ function taxonomy_vocabulary_confirm_del
 function taxonomy_form_term($vocabulary_id, $edit = array()) {
   $vocabulary = taxonomy_get_vocabulary($vocabulary_id);
 
-  $form['name'] = array('#type' => 'textfield', '#title' => t('Term name'), '#default_value' => $edit['name'], '#maxlength' => 64, '#description' => t('The name for this term. Example: "Linux".'), '#required' => TRUE);
+  $form['name'] = array('#type' => 'textfield', '#title' => t('Term name'), '#default_value' => $edit['name'], '#maxlength' => 64, '#description' => t('The name for this term. Example: “Linux”.'), '#required' => TRUE);
 
   $form['description'] = array('#type' => 'textarea', '#title' => t('Description'), '#default_value' => $edit['description'], '#description' => t('A description of the term.'));
 
@@ -647,7 +647,7 @@ function taxonomy_form_alter($form_id, &
           $help = $vocabulary->help;
         }
         else {
-          $help = t('A comma-separated list of terms describing this content. Example: funny, bungee jumping, "Company, Inc.".');
+          $help = t('A comma-separated list of terms describing this content. Example: funny, bungee jumping, “Company, Inc.”.');
         }
         $form['taxonomy']['tags'][$vocabulary->vid] = array('#type' => 'textfield',
           '#title' => $vocabulary->name,
@@ -1334,7 +1334,7 @@ function taxonomy_help($section) {
     case 'admin/help#taxonomy':
       $output = '<p>'. t('The taxonomy module is one of the most popular features because users often want to create categories to organize content by type. It can automatically classify new content, which is very useful for organizing content on-the-fly. A simple example would be organizing a list of music reviews by musical genre.') .'</p>';
       $output .= '<p>'. t('Taxonomy is also the study of classification. The taxonomy module allows you to define vocabularies (sets of categories) which are used to classify content. The module supports hierarchical classification and association between terms, allowing for truly flexible information retrieval and classification. The taxonomy module allows multiple lists of categories for classification (controlled vocabularies) and offers the possibility of creating thesauri (controlled vocabularies that indicate the relationship of terms) and taxonomies (controlled vocabularies where relationships are indicated hierarchically). To view and manage the terms of each vocabulary, click on the associated <em>list terms</em> link. To delete a vocabulary and all its terms, choose <em>edit vocabulary.</em>') .'</p>';
-      $output .= '<p>'. t('A controlled vocabulary is a set of terms to use for describing content (known as descriptors in indexing lingo). Drupal allows you to describe each piece of content (blog, story, etc.) using one or many of these terms. For simple implementations, you might create a set of categories without subcategories, similar to Slashdot\'s sections. For more complex implementations, you might create a hierarchical list of categories.') .'</p>';
+      $output .= '<p>'. t('A controlled vocabulary is a set of terms to use for describing content (known as descriptors in indexing lingo). Drupal allows you to describe each piece of content (blog, story, etc.) using one or many of these terms. For simple implementations, you might create a set of categories without subcategories, similar to Slashdot’s sections. For more complex implementations, you might create a hierarchical list of categories.') .'</p>';
       $output .= t('<p>You can</p>
 <ul>
 <li>add a vocabulary at <a href="@admin-taxonomy-add-vocabulary">administer &gt;&gt; content management &gt;&gt; categories &gt;&gt; add vocabulary</a>.</li>
@@ -1346,9 +1346,9 @@ function taxonomy_help($section) {
       $output .= '<p>'. t('For more information please read the configuration and customization handbook <a href="@taxonomy">Taxonomy page</a>.', array('@taxonomy' => 'http://drupal.org/handbook/modules/taxonomy/')) .'</p>';
       return $output;
     case 'admin/content/taxonomy':
-      return t('<p>The taxonomy module allows you to classify content into categories and subcategories; it allows multiple lists of categories for classification (controlled vocabularies) and offers the possibility of creating thesauri (controlled vocabularies that indicate the relationship of terms), taxonomies (controlled vocabularies where relationships are indicated hierarchically), and free vocabularies where terms, or tags, are defined during content creation. To view and manage the terms of each vocabulary, click on the associated <em>list terms</em> link. To delete a vocabulary and all its terms, choose "edit vocabulary".</p>');
+      return t('<p>The taxonomy module allows you to classify content into categories and subcategories; it allows multiple lists of categories for classification (controlled vocabularies) and offers the possibility of creating thesauri (controlled vocabularies that indicate the relationship of terms), taxonomies (controlled vocabularies where relationships are indicated hierarchically), and free vocabularies where terms, or tags, are defined during content creation. To view and manage the terms of each vocabulary, click on the associated <em>list terms</em> link. To delete a vocabulary and all its terms, choose “edit vocabulary”.</p>');
     case 'admin/content/taxonomy/add/vocabulary':
-      return t("<p>When you create a controlled vocabulary you are creating a set of terms to use for describing content (known as descriptors in indexing lingo). Drupal allows you to describe each piece of content (blog, story, etc.) using one or many of these terms. For simple implementations, you might create a set of categories without subcategories, similar to Slashdot.org's or Kuro5hin.org's sections. For more complex implementations, you might create a hierarchical list of categories.</p>");
+      return t("<p>When you create a controlled vocabulary you are creating a set of terms to use for describing content (known as descriptors in indexing lingo). Drupal allows you to describe each piece of content (blog, story, etc.) using one or many of these terms. For simple implementations, you might create a set of categories without subcategories, similar to Slashdot.org’s or Kuro5hin.org’s sections. For more complex implementations, you might create a hierarchical list of categories.</p>");
   }
 }
 
Index: modules/throttle/throttle.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/throttle/throttle.module,v
retrieving revision 1.67
diff -u -d -F^\s*function -r1.67 throttle.module
--- modules/throttle/throttle.module	31 Aug 2006 20:22:36 -0000	1.67
+++ modules/throttle/throttle.module	16 Oct 2006 17:21:32 -0000
@@ -122,7 +122,7 @@ function _throttle_validate($value, $for
 function throttle_help($section) {
   switch ($section) {
     case 'admin/help#throttle':
-      $output = '<p>'. t('The throttle module provides a congestion control throttling mechanism for automatically detecting a surge in incoming traffic. If the site gets linked to by a popular website, or otherwise comes under a "Denial of Service" (DoS) attack, your webserver might become overwhelmed. This mechanism is utilized by other modules to automatically optimize their performance by temporarily disabling CPU-intensive functionality. For example, in the site theme, you might choose to disable pictures when the site is too busy (reducing bandwidth), or in modules, you might choose to disable some complicated logic (reducing CPU utilization).') .'</p>';
+      $output = '<p>'. t('The throttle module provides a congestion control throttling mechanism for automatically detecting a surge in incoming traffic. If the site gets linked to by a popular website, or otherwise comes under a “Denial of Service” (DoS) attack, your webserver might become overwhelmed. This mechanism is utilized by other modules to automatically optimize their performance by temporarily disabling CPU-intensive functionality. For example, in the site theme, you might choose to disable pictures when the site is too busy (reducing bandwidth), or in modules, you might choose to disable some complicated logic (reducing CPU utilization).') .'</p>';
       $output .= '<p>'. t('The congestion control throttle can be automatically enabled when the number of anonymous or authenticated users currently visiting the site exceeds the specified threshold. ') .'</p>';
       $output .= t('<p>You can</p>
 <ul>
@@ -134,7 +134,7 @@ function throttle_help($section) {
       $output .= '<p>'. t('For more information please read the configuration and customization handbook <a href="@throttle">Throttle page</a>.', array('@throttle' => 'http://drupal.org/handbook/modules/throttle/')) .'</p>';
       return $output;
     case 'admin/settings/throttle':
-      return t('If your site gets linked to by a popular website, or otherwise comes under a "Denial of Service" (DoS) attack, your webserver might become overwhelmed. This module provides a congestion control throttling mechanism for automatically detecting a surge in incoming traffic. This mechanism is utilized by other Drupal modules to automatically optimize their performance by temporarily disabling CPU-intensive functionality.');
+      return t('If your site gets linked to by a popular website, or otherwise comes under a “Denial of Service” (DoS) attack, your webserver might become overwhelmed. This module provides a congestion control throttling mechanism for automatically detecting a surge in incoming traffic. This mechanism is utilized by other Drupal modules to automatically optimize their performance by temporarily disabling CPU-intensive functionality.');
   }
 }
 
@@ -149,7 +149,7 @@ function throttle_admin_settings() {
     '#default_value' => variable_get('throttle_anonymous', 0),
     '#size' => 5,
     '#maxlength' => 6,
-    '#description' => t('The congestion control throttle can be automatically enabled when the number of anonymous users currently visiting your site exceeds the specified threshold. For example, to start the throttle when your site has 250 anonymous users online at once, enter \'250\' in this field. Leave this value blank or set to "0" if you do not wish to auto-throttle on anonymous users. You can inspect the current number of anonymous users using the "Who\'s online" block.')
+    '#description' => t('The congestion control throttle can be automatically enabled when the number of anonymous users currently visiting your site exceeds the specified threshold. For example, to start the throttle when your site has 250 anonymous users online at once, enter ‘250’ in this field. Leave this value blank or set to “0” if you do not wish to auto-throttle on anonymous users. You can inspect the current number of anonymous users using the “Who’s online” block.')
   );
   $form['throttle_user'] = array(
     '#type' => 'textfield',
@@ -157,7 +157,7 @@ function throttle_admin_settings() {
     '#default_value' => variable_get('throttle_user', 0),
     '#size' => 5,
     '#maxlength' => 6,
-    '#description' => t('The congestion control throttle can be automatically enabled when the number of authenticated users currently visiting your site exceeds the specified threshold. For example, to start the throttle when your site has 50 registered users online at once, enter \'50\' in this field. Leave this value blank or set to "0" if you do not wish to auto-throttle on authenticated users. You can inspect the current number of authenticated users using the "Who\'s online" block.')
+    '#description' => t('The congestion control throttle can be automatically enabled when the number of authenticated users currently visiting your site exceeds the specified threshold. For example, to start the throttle when your site has 50 registered users online at once, enter ‘50’ in this field. Leave this value blank or set to “0” if you do not wish to auto-throttle on authenticated users. You can inspect the current number of authenticated users using the “Who’s online” block.')
   );
   $form['throttle_probability_limiter'] = array(
     '#type' => 'select',
Index: modules/tracker/tracker.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/tracker/tracker.module,v
retrieving revision 1.136
diff -u -d -F^\s*function -r1.136 tracker.module
--- modules/tracker/tracker.module	31 Aug 2006 20:22:36 -0000	1.136
+++ modules/tracker/tracker.module	16 Oct 2006 17:21:32 -0000
@@ -13,7 +13,7 @@ function tracker_help($section) {
   switch ($section) {
     case 'admin/help#tracker':
       $output = '<p>'. t('The tracker module displays the most recently added or updated content to the website allowing users to see the most recent contributions. The tracker module provides user level tracking for those who like to follow the contributions of particular authors.') .'</p>';
-      $output .= '<p>'. t('The  &quot;recent posts&quot; page is available via a link in the navigation menu block and contains a reverse chronological list of new and recently-updated content. The table displays  the content type, the title, the author\'s name, how many comments that item has received, and when it was last updated. Updates include any changes to the text, either by the original author or someone else, as well as any new comments added to an item. To use the tracker module to <em>watch</em> for a user\'s updated content, click on that user\'s profile, then the <em>track</em> tab.') .'</p>';
+      $output .= '<p>'. t('The “recent posts” page is available via a link in the navigation menu block and contains a reverse chronological list of new and recently-updated content. The table displays  the content type, the title, the author’s name, how many comments that item has received, and when it was last updated. Updates include any changes to the text, either by the original author or someone else, as well as any new comments added to an item. To use the tracker module to <em>watch</em> for a user’s updated content, click on that user’s profile, then the <em>track</em> tab.') .'</p>';
       $output .= t('<p>You can</p>
 <ul>
 <li>view the <a href="@tracker">most recent posts</a>.</li>
Index: modules/upload/upload.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/upload/upload.module,v
retrieving revision 1.133
diff -u -d -F^\s*function -r1.133 upload.module
--- modules/upload/upload.module	5 Oct 2006 15:26:17 -0000	1.133
+++ modules/upload/upload.module	16 Oct 2006 17:21:34 -0000
@@ -125,7 +125,7 @@ function upload_admin_settings_validate(
   $default_usersize = $form_values['upload_usersize_default'];
 
   $exceed_max_msg = t('Your PHP settings limit the maximum file size per upload to %size MB.', array('%size' => file_upload_max_size())).'<br/>';
-  $more_info = t("Depending on your sever environment, these settings may be changed in the system-wide php.ini file, a php.ini file in your Drupal root directory, in your Drupal site's settings.php file, or in the .htaccess file in your Drupal root directory.");
+  $more_info = t("Depending on your sever environment, these settings may be changed in the system-wide php.ini file, a php.ini file in your Drupal root directory, in your Drupal site’s settings.php file, or in the .htaccess file in your Drupal root directory.");
 
   if (!is_numeric($default_uploadsize) || ($default_uploadsize <= 0)) {
     form_set_error('upload_uploadsize_default', t('The %role file size limit must be a number and greater than zero.', array('%role' => t('default'))));
@@ -373,7 +373,7 @@ function upload_form_alter($form_id, &$f
         '#title' => t('File attachments'),
         '#collapsible' => TRUE,
         '#collapsed' => empty($node->files),
-        '#description' => t('Changes made to the attachments are not permanent until you save this post. The first "listed" file will be included in RSS feeds.'),
+        '#description' => t('Changes made to the attachments are not permanent until you save this post. The first “listed” file will be included in RSS feeds.'),
         '#prefix' => '<div class="attachments">',
         '#suffix' => '</div>',
         '#weight' => 30,
Index: modules/user/user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.module,v
retrieving revision 1.690
diff -u -d -F^\s*function -r1.690 user.module
--- modules/user/user.module	15 Oct 2006 20:09:18 -0000	1.690
+++ modules/user/user.module	16 Oct 2006 17:21:41 -0000
@@ -291,7 +291,7 @@ function user_validate_picture($file, &$
       $form_values['picture'] = $file->filepath;
     }
     else {
-      form_set_error('picture_upload', t("Failed to upload the picture image; the %directory directory doesn't exist.", array('%directory' => variable_get('user_picture_path', 'pictures'))));
+      form_set_error('picture_upload', t("Failed to upload the picture image; the %directory directory doesn’t exist.", array('%directory' => variable_get('user_picture_path', 'pictures'))));
     }
   }
 }
@@ -507,8 +507,8 @@ function user_block($op = 'list', $delta
   if ($op == 'list') {
      $blocks[0]['info'] = t('User login');
      $blocks[1]['info'] = t('Navigation');
-     $blocks[2]['info'] = t('Who\'s new');
-     $blocks[3]['info'] = t('Who\'s online');
+     $blocks[2]['info'] = t('Who’s new');
+     $blocks[3]['info'] = t('Who’s online');
 
      return $blocks;
   }
@@ -564,7 +564,7 @@ function user_block($op = 'list', $delta
           }
           $output = theme('user_list', $items);
 
-          $block['subject'] = t('Who\'s new');
+          $block['subject'] = t('Who’s new');
           $block['content'] = $output;
         }
         return $block;
@@ -600,7 +600,7 @@ function user_block($op = 'list', $delta
             $output .= theme('user_list', $items, t('Online users'));
           }
 
-          $block['subject'] = t('Who\'s online');
+          $block['subject'] = t('Who’s online');
           $block['content'] = $output;
         }
         return $block;
@@ -618,7 +618,7 @@ function theme_user_picture($account) {
     }
 
     if (isset($picture)) {
-      $alt = t('@user\'s picture', array('@user' => $account->name ? $account->name : variable_get('anonymous', 'Anonymous')));
+      $alt = t('@user’s picture', array('@user' => $account->name ? $account->name : variable_get('anonymous', 'Anonymous')));
       $picture = theme('image', $picture, $alt, $alt, '', FALSE);
       if (!empty($account->uid) && user_access('access user profiles')) {
         $picture = l($picture, "user/$account->uid", array('title' => t('View user profile.')), NULL, NULL, FALSE, TRUE);
@@ -710,7 +710,7 @@ function user_menu($may_cache) {
     // Admin user pages
     $items[] = array('path' => 'admin/user',
       'title' => t('user management'),
-      'description' => t('Manage your site\'s users, groups and access to site features.'),
+      'description' => t('Manage your site’s users, groups and access to site features.'),
       'position' => 'left',
       'callback' => 'system_admin_menu_block_page',
       'access' => user_access('access configuration pages'),
@@ -1905,7 +1905,7 @@ function user_admin_role() {
       '#size' => 30,
       '#required' => TRUE,
       '#maxlength' => 64,
-      '#description' => t('The name for this role. Example: "moderator", "editorial board", "site architect".'),
+      '#description' => t('The name for this role. Example: “moderator”, “editorial board”, “site architect”.'),
     );
     $form['submit'] = array(
       '#type' => 'submit',
@@ -2219,7 +2219,7 @@ function user_admin_settings() {
   $form['registration'] = array('#type' => 'fieldset', '#title' => t('User registration settings'));
   $form['registration']['user_register'] = array('#type' => 'radios', '#title' => t('Public registrations'), '#default_value' => variable_get('user_register', 1), '#options' => array(t('Only site administrators can create new user accounts.'), t('Visitors can create accounts and no administrator approval is required.'), t('Visitors can create accounts but administrator approval is required.')));
   $form['registration']['user_email_verification'] = array('#type' => 'checkbox', '#title' => t('Require e-mail verification when a visitor creates an account'), '#default_value' => variable_get('user_email_verification', TRUE), '#description' => t('If this box is checked, new users will be required to validate their e-mail address prior to logging into to the site, and will be assigned a system-generated password. With it unchecked, users will be logged in immediately upon registering, and may select their own passwords during registration.'));
-  $form['registration']['user_registration_help'] = array('#type' => 'textarea', '#title' => t('User registration guidelines'), '#default_value' => variable_get('user_registration_help', ''), '#description' => t("This text is displayed at the top of the user registration form. It's useful for helping or instructing your users."));
+  $form['registration']['user_registration_help'] = array('#type' => 'textarea', '#title' => t('User registration guidelines'), '#default_value' => variable_get('user_registration_help', ''), '#description' => t("This text is displayed at the top of the user registration form. It’s useful for helping or instructing your users."));
 
   // User e-mail settings.
   $form['email'] = array('#type' => 'fieldset', '#title' => t('User e-mail settings'));
@@ -2244,7 +2244,7 @@ function user_admin_settings() {
   $form['pictures']['user_picture_default'] = array('#type' => 'textfield', '#title' => t('Default picture'), '#default_value' => variable_get('user_picture_default', ''), '#size' => 30, '#maxlength' => 255, '#description' => t('URL of picture to display for users with no custom picture selected. Leave blank for none.'));
   $form['pictures']['user_picture_dimensions'] = array('#type' => 'textfield', '#title' => t('Picture maximum dimensions'), '#default_value' => variable_get('user_picture_dimensions', '85x85'), '#size' => 15, '#maxlength' => 10, '#description' => t('Maximum dimensions for pictures, in pixels.'));
   $form['pictures']['user_picture_file_size'] = array('#type' => 'textfield', '#title' => t('Picture maximum file size'), '#default_value' => variable_get('user_picture_file_size', '30'), '#size' => 15, '#maxlength' => 10, '#description' => t('Maximum file size for pictures, in kB.'));
-  $form['pictures']['user_picture_guidelines'] = array('#type' => 'textarea', '#title' => t('Picture guidelines'), '#default_value' => variable_get('user_picture_guidelines', ''), '#description' => t('This text is displayed at the picture upload form in addition to the default guidelines. It\'s useful for helping or instructing your users.'));
+  $form['pictures']['user_picture_guidelines'] = array('#type' => 'textarea', '#title' => t('Picture guidelines'), '#default_value' => variable_get('user_picture_guidelines', ''), '#description' => t('This text is displayed at the picture upload form in addition to the default guidelines. It’s useful for helping or instructing your users.'));
 
   return system_settings_form($form);
 }
@@ -2283,7 +2283,7 @@ function user_help($section) {
   switch ($section) {
     case 'admin/help#user':
       $output = '<p>'. t('The user module allows users to register, login, and log out. Users benefit from being able to sign on because it associates content they create with their account and allows various permissions to be set for their roles. The user module supports user roles which can setup fine grained permissions allowing each role to do only what the administrator wants them to. Each user is assigned to one or more roles. By default there are two roles <em>anonymous</em> - a user who has not logged in, and <em>authenticated</em> a user who has signed up and who has been authorized.') .'</p>';
-      $output .= '<p>'. t('Users can use their own name or handle and can fine tune some personal configuration settings through their individual my account page. Registered users need to authenticate by supplying either a local username and password, or a remote username and password such as DelphiForums ID, or one from a Drupal powered website. A visitor accessing your website is assigned an unique ID, the so-called session ID, which is stored in a cookie. For security\'s sake, the cookie does not contain personal information but acts as a key to retrieve the information stored on your server.') .'</p>';
+      $output .= '<p>'. t('Users can use their own name or handle and can fine tune some personal configuration settings through their individual my account page. Registered users need to authenticate by supplying either a local username and password, or a remote username and password such as DelphiForums ID, or one from a Drupal powered website. A visitor accessing your website is assigned an unique ID, the so-called session ID, which is stored in a cookie. For security’s sake, the cookie does not contain personal information but acts as a key to retrieve the information stored on your server.') .'</p>';
       $output .= t('<p>You can</p>
 <ul>
 <li>view your <a href="@user">user page</a>.</li>
@@ -2303,15 +2303,15 @@ function user_help($section) {
     case 'admin/user/rules':
       return t('<p>Set up username and e-mail address access rules for new <em>and</em> existing accounts (currently logged in accounts will not be logged out). If a username or e-mail address for an account matches any deny rule, but not an allow rule, then the account will not be allowed to be created or to log in. A host rule is effective for every page view, not just registrations.</p>');
     case 'admin/user/access':
-      return t('<p>Permissions let you control what users can do on your site. Each user role (defined on the <a href="@role">user roles page</a>) has its own set of permissions. For example, you could give users classified as "Administrators" permission to "administer nodes" but deny this power to ordinary, "authenticated" users. You can use permissions to reveal new features to privileged users (those with subscriptions, for example). Permissions also allow trusted users to share the administrative burden of running a busy site.</p>', array('@role' => url('admin/user/roles')));
+      return t('<p>Permissions let you control what users can do on your site. Each user role (defined on the <a href="@role">user roles page</a>) has its own set of permissions. For example, you could give users classified as “Administrators” permission to “administer nodes” but deny this power to ordinary, “authenticated” users. You can use permissions to reveal new features to privileged users (those with subscriptions, for example). Permissions also allow trusted users to share the administrative burden of running a busy site.</p>', array('@role' => url('admin/user/roles')));
     case 'admin/user/roles':
       return t('<p>Roles allow you to fine tune the security and administration of Drupal. A role defines a group of users that have certain privileges as defined in <a href="@permissions">user permissions</a>. Examples of roles include: anonymous user, authenticated user, moderator, administrator and so on. In this area you will define the <em>role names</em> of the various roles. To delete a role choose "edit".</p><p>By default, Drupal comes with two user roles:</p>
       <ul>
-      <li>Anonymous user: this role is used for users that don\'t have a user account or that are not authenticated.</li>
+      <li>Anonymous user: this role is used for users that don’t have a user account or that are not authenticated.</li>
       <li>Authenticated user: this role is automatically granted to all logged in users.</li>
       </ul>', array('@permissions' => url('admin/user/access/permissions')));
     case 'admin/user/search':
-      return t('<p>Enter a simple pattern ("*" may be used as a wildcard match) to search for a username. For example, one may search for "br" and Drupal might return "brian", "brad", and "brenda".</p>');
+      return t('<p>Enter a simple pattern (“*” may be used as a wildcard match) to search for a username. For example, one may search for “br” and Drupal might return “brian”, “brad”, and “brenda”.</p>');
     case 'user/help#user':
       $site = variable_get('site_name', 'this website');
 
@@ -2326,7 +2326,7 @@ function user_help($section) {
       $output = t('
       <h3>Distributed authentication<a id="da"></a></h3>
       <p>One of the more tedious moments in visiting a new website is filling out the registration form. Here at @site, you do not have to fill out a registration form if you are already a member of !affiliate-info. This capability is called <em>distributed authentication</em>, and <a href="@drupal">Drupal</a>, the software which powers @site, fully supports it.</p>
-      <p>Distributed authentication enables a new user to input a username and password into the login box, and immediately be recognized, even if that user never registered at @site. This works because Drupal knows how to communicate with external registration databases. For example, lets say that new user \'Joe\' is already a registered member of <a href="@delphi-forums">Delphi Forums</a>. Drupal informs Joe on registration and login screens that he may login with his Delphi ID instead of registering with @site. Joe likes that idea, and logs in with a username of joe@remote.delphiforums.com and his usual Delphi password. Drupal then contacts the <em>remote.delphiforums.com</em> server behind the scenes (usually using <a href="@xml">XML-RPC</a>, <a href="@http-post">HTTP POST</a>, or <a href="@soap">SOAP</a>) and asks: "Is the password for user Joe correct?". If Delphi replies yes, then we create a new @site account for Joe and log him into it. Joe may keep on logging into @site in the same manner, and he will always be logged into the same account.</p>', array('!affiliate-info' => $affiliate_info, '@site' => $site, '@drupal' => 'http://drupal.org', '@delphi-forums' => 'http://www.delphiforums.com', '@xml' => 'http://www.xmlrpc.com', '@http-post' => 'http://www.w3.org/Protocols/', '@soap' => 'http://www.soapware.org'));
+      <p>Distributed authentication enables a new user to input a username and password into the login box, and immediately be recognized, even if that user never registered at @site. This works because Drupal knows how to communicate with external registration databases. For example, lets say that new user ‘Joe’ is already a registered member of <a href="@delphi-forums">Delphi Forums</a>. Drupal informs Joe on registration and login screens that he may login with his Delphi ID instead of registering with @site. Joe likes that idea, and logs in with a username of joe@remote.delphiforums.com and his usual Delphi password. Drupal then contacts the <em>remote.delphiforums.com</em> server behind the scenes (usually using <a href="@xml">XML-RPC</a>, <a href="@http-post">HTTP POST</a>, or <a href="@soap">SOAP</a>) and asks: "Is the password for user Joe correct?". If Delphi replies yes, then we create a new @site account for Joe and log him into it. Joe may keep on logging into @site in the same manner, and he will always be logged into the same account.</p>', array('!affiliate-info' => $affiliate_info, '@site' => $site, '@drupal' => 'http://drupal.org', '@delphi-forums' => 'http://www.delphiforums.com', '@xml' => 'http://www.xmlrpc.com', '@http-post' => 'http://www.w3.org/Protocols/', '@soap' => 'http://www.soapware.org'));
 
         foreach (module_list() as $module) {
           if (module_hook($module, 'auth')) {
Index: modules/watchdog/watchdog.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/watchdog/watchdog.module,v
retrieving revision 1.157
diff -u -d -F^\s*function -r1.157 watchdog.module
--- modules/watchdog/watchdog.module	8 Sep 2006 23:07:25 -0000	1.157
+++ modules/watchdog/watchdog.module	16 Oct 2006 17:21:41 -0000
@@ -44,12 +44,12 @@ function watchdog_menu($may_cache) {
       'description' => t('View events that have recently been logged.'),
       'callback' => 'watchdog_overview',
       'weight' => -1);
-    $items[] = array('path' => 'admin/logs/page-not-found', 'title' => t("top 'page not found' errors"),
-      'description' => t("View 'page not found' errors (404s)."),
+    $items[] = array('path' => 'admin/logs/page-not-found', 'title' => t("top ‘page not found’ errors"),
+      'description' => t("View ‘page not found’ errors (404s)."),
       'callback' => 'watchdog_top',
       'callback arguments' => array('page not found'));
-    $items[] = array('path' => 'admin/logs/access-denied', 'title' => t("top 'access denied' errors"),
-      'description' => t("View 'access denied' errors (403s)."),
+    $items[] = array('path' => 'admin/logs/access-denied', 'title' => t("top ‘access denied’ errors"),
+      'description' => t("View ‘access denied’ errors (403s)."),
       'callback' => 'watchdog_top',
       'callback arguments' => array('access denied'));
     $items[] = array('path' => 'admin/logs/event', 'title' => t('details'),
