[Zope3-checkins] CVS: Zope3/src/zope/app/browser/services - adapter.py:1.12 adapter_search.pt:1.7 add_adapter_config.pt:1.4 add_svc_config.pt:1.7 addrole.pt:1.3 addservicemanager.py:1.4 adduser.pt:1.4 auth.py:1.4 auth.zcml:1.3 bundle.pt:1.13 bundle.py:1.10 cache.py:1.12 cache.zcml:1.7 caches.pt:1.12 configure.zcml:1.64 configureCache.pt:1.5 configureConnection.pt:1.5 configureView.pt:1.4 connection.py:1.14 connection.zcml:1.9 connections.pt:1.14 edituser.pt:1.5 error.pt:1.7 error.py:1.6 errorentry.pt:1.6 event.py:1.4 eventcontrol.pt:1.4 field.py:1.12 hub.py:1.4 hubcontrol.pt:1.5 pagefolder.py:1.3 pagefolder.zcml:1.4 role.py:1.3 service.py:1.34 serviceactivation.pt:1.10 services.pt:1.13 subscription_control.pt:1.2 view.py:1.22 view.zcml:1.6 views.pt:1.8 zpt.py:1.3 auth.pt:NONE

Stephan Richter srichter at cosmos.phy.tufts.edu
Thu Aug 7 14:42:32 EDT 2003


Update of /cvs-repository/Zope3/src/zope/app/browser/services
In directory cvs.zope.org:/tmp/cvs-serv26029/services

Modified Files:
	adapter.py adapter_search.pt add_adapter_config.pt 
	add_svc_config.pt addrole.pt addservicemanager.py adduser.pt 
	auth.py auth.zcml bundle.pt bundle.py cache.py cache.zcml 
	caches.pt configure.zcml configureCache.pt 
	configureConnection.pt configureView.pt connection.py 
	connection.zcml connections.pt edituser.pt error.pt error.py 
	errorentry.pt event.py eventcontrol.pt field.py hub.py 
	hubcontrol.pt pagefolder.py pagefolder.zcml role.py service.py 
	serviceactivation.pt services.pt subscription_control.pt 
	view.py view.zcml views.pt zpt.py 
Removed Files:
	auth.pt 
Log Message:
Internationalized the rest of zope/app/browser.

I also took the chance to clean up some old code and remove a lot of cruft.
(This is the reason I decided to do it instead of letting a less 
experienced developer do it.)

I now consider I18n of the Zope core done. What does this mean to you?

1. All code you check into the CVS must be internationalized. That means:

   (a) Python and PT code must be properly tagged.

   (b) zope.pot must be updated. This can be done with::

       [zope/app/translation_files]$ python extract.py

       Note: You do not need to merge the new POT file with the catalogs.

2. Any code snippet that has no I18n is considered a bug! Therefore, please
   take care and do the I18n and make code so when you see missing spots.

Finally I would like to mention that some forms might experience some 
hickups, as I changed and moved around a lot of templates and was not able
to verify them all by hand. Please let me know, if something that used to 
work is not working anymore.


=== Zope3/src/zope/app/browser/services/adapter.py 1.11 => 1.12 ===
--- Zope3/src/zope/app/browser/services/adapter.py:1.11	Sat Jun 21 17:50:15 2003
+++ Zope3/src/zope/app/browser/services/adapter.py	Thu Aug  7 13:41:03 2003
@@ -33,6 +33,7 @@
 from zope.publisher.browser import BrowserView
 from zope.app.context import ContextWrapper
 
+from zope.app.i18n import ZopeMessageIDFactory as _
 from zope.app.interfaces.services.adapter import IAdapterRegistration
 from zope.app.interfaces.services.adapter import IAdapterRegistrationInfo
 from zope.app.interfaces.services.registration import IRegistration
@@ -45,12 +46,13 @@
 
 class IAdapterSearch(Interface):
 
-    forInterface = InterfaceField(title=u"For interface",
-                                  required=False,
-                                  )
-    providedInterface = InterfaceField(title=u"Provided interface",
-                                       required=False,
-                                       )
+    forInterface = InterfaceField(
+        title=_("For interface"),
+        required=False)
+    
+    providedInterface = InterfaceField(
+        title=_("Provided interface"),
+        required=False)
 
 
 class AdapterServiceView(BrowserView):


=== Zope3/src/zope/app/browser/services/adapter_search.pt 1.6 => 1.7 ===
--- Zope3/src/zope/app/browser/services/adapter_search.pt:1.6	Wed Jun 25 17:18:53 2003
+++ Zope3/src/zope/app/browser/services/adapter_search.pt	Thu Aug  7 13:41:03 2003
@@ -1,27 +1,26 @@
 <html metal:use-macro="views/standard_macros/page">
-<head><title></title></head>
 <body>
 <div metal:fill-slot="body">
 
-<form action="." method="get"
-      tal:attributes="action request/URL"
-      >
+  <form action="." method="get"
+      tal:attributes="action request/URL">
     <div class="row" tal:content="structure view/forInterface/row" />
     <div class="row" tal:content="structure view/providedInterface/row" />
       <div class="controls"> 
-         <input type="submit" value="Refresh" />
-         <input type="submit" value="Search" name="SEARCH" />
+         <input type="submit" value="Refresh" 
+                i18n:attributes="value refresh-button" />
+         <input type="submit" value="Search" name="SEARCH"
+                i18n:attributes="value search-button" />
       </div>
-</form>
+  </form>
 
-<form action="." method="post"
+  <form action="." method="post"
       tal:attributes="action request/URL"
-      tal:condition="request/SEARCH|nothing"
-      >
+      tal:condition="request/SEARCH|nothing">
   <table>
     <tr>
-       <th>For/<br />Provided</th>
-       <th>Configuration</th>
+       <th i18n:translate="">For/<br />Provided</th>
+       <th i18n:translate="">Configuration</th>
     </tr>
 
     <tr tal:repeat="config view/configInfo">
@@ -34,7 +33,8 @@
       <td></td>
       <td></td>
       <td> 
-         <input type="submit" value="Update" name="UPDATE_SUBMIT" />
+        <input type="submit" value="Update" name="UPDATE_SUBMIT" />
+               i18n:attributes="value update-button" />
       </td>
     </tr>
   </table>


=== Zope3/src/zope/app/browser/services/add_adapter_config.pt 1.3 => 1.4 ===
--- Zope3/src/zope/app/browser/services/add_adapter_config.pt:1.3	Thu Jan 16 14:50:32 2003
+++ Zope3/src/zope/app/browser/services/add_adapter_config.pt	Thu Aug  7 13:41:03 2003
@@ -1,20 +1,34 @@
 <html metal:use-macro="views/standard_macros/dialog">
-<head><title></title></head>
+<head>
+  <title metal:fill-slot="title" i18n:translate="">
+    Add Adapter Configuration
+  </title>
+</head>
 <body>
 <div metal:fill-slot="body">
 
-<form action="." method="post"
-      tal:attributes="action request/URL"
-      tal:condition="view/refresh"
-      >
-     <div class="row"
-         tal:repeat="widget view/getWidgets"
-         tal:content="structure widget/row">
-       <div class="label">Label</div>
-       <div class="field">Roles</div>
-     </div>
-  <input type="submit" value="Refresh" />
-  <input type="submit" name="FINISH" value="Finish" />
-</form>
+  <form action="." method="post"
+        tal:attributes="action request/URL"
+        tal:condition="view/refresh">
 
-</div></body></html>
+    <div class="row"
+        tal:repeat="widget view/getWidgets"
+        tal:content="structure widget/row">
+      <div class="label">Label</div>
+      <div class="field">Roles</div>
+    </div>
+
+    <div class="row">
+      <div class="controls">
+        <input type="submit" value="Refresh"
+               i18n:attributes="value refresh-button" />
+        <input type="submit" name="FINISH" value="Finish"
+               i18n:attributes="value finnish-button" />
+      </div>
+    </div>
+
+  </form>
+
+</div>
+</body>
+</html>


=== Zope3/src/zope/app/browser/services/add_svc_config.pt 1.6 => 1.7 ===
--- Zope3/src/zope/app/browser/services/add_svc_config.pt:1.6	Mon Jun 30 13:10:54 2003
+++ Zope3/src/zope/app/browser/services/add_svc_config.pt	Thu Aug  7 13:41:03 2003
@@ -1,47 +1,44 @@
 <html metal:use-macro="context/@@standard_macros/dialog">
-  <body>
-    <div metal:fill-slot="body">
+<body>
+<div metal:fill-slot="body">
 
-      <form action="add_svc_config.html">
+  <form action="add_svc_config.html" method="post">
 
-        <p>Register this object to provide the following service(s):</p>
+    <p i18n:translate="">
+      Register this object to provide the following service(s):
+    </p>
+
+    <table>
+      <thead>
+        <tr>
+          <th i18n:translate="">Register</th>
+          <th i18n:translate="">Service name</th>
+          <th i18n:translate="">Activate</th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr tal:repeat="item view/listServiceTypes">
+          <td>
+            <input type="checkbox" name="name:list" value="value"
+                   checked="checked" tal:attributes="value item/name" />
+          </td>
+          <td tal:content="item/name">Events</td>
+          <td>
+            <input type="checkbox" name="active:list" value="value"
+                   tal:attributes="value item/name;
+                                   checked item/checked" />
+          </td>
+        </tr>
+      </tbody>
+    </table>
+
+    <input type="reset" value="Reset form"
+           i18n:attributes="value reset-button" />
+    <input type="submit" value="Submit"
+           i18n:attributes="value submit-button" />
 
-        <table>
+  </form>
 
-          <thead>
-            <tr>
-              <th>Register</th>
-              <th>Service name</th>
-              <th>Activate</th>
-            </tr>
-          </thead>
-
-          <tbody>
-            <tr tal:repeat="item view/listServiceTypes">
-
-              <td>
-                <input type="checkbox" name="name:list" value="value"
-                       checked="checked" tal:attributes="value item/name" />
-              </td>
-              <td tal:content="item/name">Events</td>
-
-              <td>
-                <input type="checkbox" name="active:list" value="value"
-                       tal:attributes="value item/name;
-                                       checked item/checked" />
-              </td>
-
-            </tr>
-          </tbody>
-
-        </table>
-
-        <input type="reset" value="Reset form" />
-        <input type="submit" value="Submit" />
-
-
-      </form>
-
-    </div>
-  </body>
+</div>
+</body>
 </html>


=== Zope3/src/zope/app/browser/services/addrole.pt 1.2 => 1.3 ===
--- Zope3/src/zope/app/browser/services/addrole.pt:1.2	Wed Dec 25 09:12:36 2002
+++ Zope3/src/zope/app/browser/services/addrole.pt	Thu Aug  7 13:41:03 2003
@@ -1,19 +1,44 @@
 <html metal:use-macro="views/standard_macros/page">
-<head><title>Add Role</title></head>
+<head>
+  <title metal:fill-slot="title" i18n:translate="">Add Role</title>
+</head>
 <body>
 <div metal:fill-slot="body">
-Enter the information about the role.
-<form action="action.html" method="post">
-<table cellspacing="0" cellpadding="2" border="0">
-  <tr><td>Id</td>
-      <td><input type="text" name="id" size="40" value="" /> </td>
-  </tr>
-  <tr><td>Title</td>
-      <td><input type="text" name="title" size="60" value="" /> </td>
-  </tr>
-  <tr><td>Descrption</td>
-      <td><textarea name="description" rows="10" cols="60"></textarea></td>
-  </tr>
-</table>
-<input type="submit" name="submit" value=" Create Role " />
-</form></div></body></html>
+
+  <div i18n:translate="">Enter the information about the role.</div>
+
+  <form action="action.html" method="post">
+
+    <div class="row">
+      <div class="label" i18n:translate="">Id</div>
+      <div class="field">
+        <input type="text" name="id" size="40" value="" />
+      </div>
+    </div>
+
+    <div class="row">
+      <div class="label" i18n:translate="">Title</div>
+      <div class="field">
+        <input type="text" name="title" size="60" value="" />
+      </div>
+    </div>
+
+    <div class="row">
+      <div class="label" i18n:translate="">Description</div>
+      <div class="field">
+        <textarea name="description" rows="10" cols="60" />
+      </div>
+    </div>
+
+    <div class="row">
+      <div class="controls">
+        <input type="submit" name="submit" value="Create Role"
+               i18n:attributes="value create-role-button" />
+      </div>
+    </div>
+
+  </form>
+
+</div>
+</body>
+</html>


=== Zope3/src/zope/app/browser/services/addservicemanager.py 1.3 => 1.4 ===
--- Zope3/src/zope/app/browser/services/addservicemanager.py:1.3	Sun Mar 23 17:35:36 2003
+++ Zope3/src/zope/app/browser/services/addservicemanager.py	Thu Aug  7 13:41:03 2003
@@ -11,15 +11,13 @@
 # FOR A PARTICULAR PURPOSE.
 #
 ##############################################################################
-"""
+"""Add Service Manager View Class
+
 $Id$
 """
-
-from zope.publisher.browser import BrowserView
 from zope.app.services.service import ServiceManager
 
-
-class AddServiceManager(BrowserView):
+class AddServiceManager:
 
     def addServiceManager(self):
         sm = ServiceManager()


=== Zope3/src/zope/app/browser/services/adduser.pt 1.3 => 1.4 ===
--- Zope3/src/zope/app/browser/services/adduser.pt:1.3	Mon Jun 30 13:10:54 2003
+++ Zope3/src/zope/app/browser/services/adduser.pt	Thu Aug  7 13:41:03 2003
@@ -1,62 +1,64 @@
 <html metal:use-macro="views/standard_macros/page">
 <head>
-  <title>Add User</title>
+  <title metal:fill-slot="title" i18n:translate="">Add User</title>
 </head>
 <body>
 
   <div metal:fill-slot="body">
-
     <form action="." method="post" enctype="multipart/form-data">
     
-      <table>      
-            <tbody>   
-            
-              <tr>
-                <th>Id:</th>
-                <td>
-              <input type="text" name="id" size="40" value="" />
-            </td>
-              </tr>
-              <tr>
-                <th>Title:</th>
-                <td>
-              <input type="text" name="title" size="40" value="" />
-            </td>
-              </tr>
-              <tr>
-                <th>Description:</th>
-                <td>
-              <input type="text" name="description" size="40" value="" />
-            </td>
-              </tr>
-              <tr>
-                <th>Login:</th>
-                <td>
-              <input type="text" name="login" size="40" value="" />
-            </td>
-              </tr>
-              <tr>
-                <th>Password:</th>
-                <td>
-              <input type="password" name="password" size="40" value="" />
-            </td>
-              </tr>
-              <tr>
-                <th>Roles:</th>
-                <td>
-              <select name="roles:list">
-                <option value="Manager">Manager</option>
-              </select>
-            </td>
-              </tr>
-                        
-            </tbody>     
-      </table>
+      <div class="row">
+        <div class="label" i18n:translate="">Id</div>
+        <div class="field">
+          <input type="text" name="id" size="40" value="" />
+        </div>
+      </div>
+  
+      <div class="row">
+        <div class="label" i18n:translate="">Title</div>
+        <div class="field">
+          <input type="text" name="title" size="60" value="" />
+        </div>
+      </div>
+  
+      <div class="row">
+        <div class="label" i18n:translate="">Description</div>
+        <div class="field">
+          <textarea name="description" rows="10" cols="60" />
+        </div>
+      </div>
 
-      <input type="submit" name="action.html:method" value="Add" />
+      <div class="row">
+        <div class="label" i18n:translate="">Login</div>
+        <div class="field">
+          <input type="text" name="login" size="40" value="" />
+        </div>
+      </div>
 
-    </form> 
+      <div class="row">
+        <div class="label" i18n:translate="">Password</div>
+        <div class="field">
+          <input type="password" name="password" size="40" value="" />
+        </div>
+      </div>
+
+      <div class="row">
+        <div class="label" i18n:translate="">Roles</div>
+        <div class="field">
+          <select name="roles:list">
+            <option value="Manager">Manager</option>
+          </select>
+        </div>
+      </div>
 
+      <div class="row">
+        <div class="controls">
+          <input type="submit" name="action.html:method" value="Add"
+              i18n:attributes="value add-button"/>
+        </div>
+      </div>
+
+    </form> 
   </div>
 
 </body>


=== Zope3/src/zope/app/browser/services/auth.py 1.3 => 1.4 ===
--- Zope3/src/zope/app/browser/services/auth.py:1.3	Tue Mar 25 06:44:10 2003
+++ Zope3/src/zope/app/browser/services/auth.py	Thu Aug  7 13:41:03 2003
@@ -15,18 +15,18 @@
 
 $Id$
 """
-from zope.publisher.browser import BrowserView
 from zope.app.services.auth import User
+from zope.app.services.servicenames import Roles
 from zope.component import getService
 
-class AddUser(BrowserView):
+class AddUser:
 
     def action(self, id, title, description, login, password, roles):
         user = User(id, title, description, login, password)
         self.context.setObject(id, user)
         return self.request.response.redirect(self.request.URL[-2])
 
-class EditUser(BrowserView):
+class EditUser:
 
     def action(self, title, description, login, password, roles):
         user = self.context
@@ -39,5 +39,5 @@
         return self.request.response.redirect(self.request.URL[-1])
 
     def getAvailableRoles(self):
-        service = getService(self.context, "Roles")
+        service = getService(self.context, Roles)
         return service.getRoles()


=== Zope3/src/zope/app/browser/services/auth.zcml 1.2 => 1.3 ===
--- Zope3/src/zope/app/browser/services/auth.zcml:1.2	Sun Aug  3 13:49:27 2003
+++ Zope3/src/zope/app/browser/services/auth.zcml	Thu Aug  7 13:41:03 2003
@@ -1,12 +1,10 @@
-<configure
-    xmlns='http://namespaces.zope.org/browser'
-    i18n_domain='zope'
-    >
+<configure xmlns="http://namespaces.zope.org/browser">
 
 <!-- Authentication Service  -->
 
   <!-- XXX This is silly -->
-  <menu id="add_user" 
+  <menu 
+      id="add_user" 
       title="Menu for adding new User." />
 
   <page
@@ -15,7 +13,7 @@
      permission="zope.ManageServices" 
      class="zope.app.browser.container.contents.Contents"
      attribute="contents"
-     />
+     menu="zmi_views" title="Contents" />
 
   <view
       name="+"  
@@ -27,30 +25,21 @@
     <page name="index.html"  template="adduser.pt" />
     <page name="action.html" attribute="action" />
 
-    </view>
-
-  <menuItems
-      menu="zmi_views"
-      for="zope.app.services.auth.IAuthenticationService">
-      <menuItem title="Contents" action="@@index.html"/>
-  </menuItems>
-
-  <defaultView for="zope.app.interfaces.security.IPrincipal"
-                       name="editForm.html" />
+  </view>
 
   <pages
       for="zope.app.interfaces.security.IPrincipal"
       permission="zope.View"
       class="zope.app.browser.services.auth.EditUser">
 
-    <page name="editForm.html" template="edituser.pt" />
+    <page name="editForm.html" template="edituser.pt"
+          menu="zmi_views" title="Edit" />
     <page name="edit.html" attribute="action" />
 
   </pages>
 
-  <menuItems menu="zmi_views"
-        for="zope.app.interfaces.security.IPrincipal">
-    <menuItem title="Edit" action="editForm.html"/>
-  </menuItems>
+  <defaultView 
+      for="zope.app.interfaces.security.IPrincipal"
+      name="editForm.html" />
 
 </configure>


=== Zope3/src/zope/app/browser/services/bundle.pt 1.12 => 1.13 ===
--- Zope3/src/zope/app/browser/services/bundle.pt:1.12	Tue Jul  1 12:12:18 2003
+++ Zope3/src/zope/app/browser/services/bundle.pt	Thu Aug  7 13:41:03 2003
@@ -1,104 +1,138 @@
 <html metal:use-macro="views/standard_macros/page">
+<head>
+  <title metal:fill-slot="title" i18n:translate="">Bundle Information</title>
+</head>
 <body>
 <div metal:fill-slot="body" tal:define="message view/update">
 
-<h1>Bundle Information</h1>
+  <h1 i18n:translate="">Bundle Information</h1>
 
-<h4>Services needed by this bundle</h4>
+  <h4 i18n:translate="">Services needed by this bundle</h4>
 
-<ul>
-  <li tal:repeat="svc view/listServices">
-    <i tal:content="svc/service">Foo</i> service:
-    <span tal:condition="svc/insite">
-      present in site at
-      <a tal:content="svc/path" tal:attributes="href svc/path">/path</a>
-    </span>
-    <span tal:condition="not:svc/insite">
-      <span tal:condition="svc/inbundle">
-        registered in bundle at
-        <a tal:content="svc/inbundle"
-           tal:attributes="href svc/inbundle">path</a>
+  <ul>
+    <li tal:repeat="svc view/listServices">
+      <span i18n:translate="">
+        <i tal:content="svc/service" i18n:name="service_name">Foo</i> service:
       </span>
-      <span tal:condition="not:svc/inbundle">
-        <font size="+1" color="red">
-          <b>UNFULFILLED DEPENDENCY</b>
-        </font>
-        <br /><b>(You must <a href="../default/AddService">add a
-        <i tal:content="svc/service">Foo</i>
-        service to this site</a> before you can activate this bundle)</b>
+      <span tal:condition="svc/insite" i18n:translate="">
+        present in site at
+        <a tal:content="svc/path" tal:attributes="href svc/path"
+           i18n:name="path">/path</a>
       </span>
-    </span>
-  </li>
-</ul>
-
-<h4>Registrations in this bundle</h4>
-
-  <div class="message" tal:condition="message">
-    <span tal:replace="message">view/update message here</span>
-    <br /><br /><i><a href="@@bundle.html">(click to clear message)</a></i>
-  </div>
-
-<form action="@@bundle.html" method="get">
-
-  <tal:block tal:repeat="svc view/listServices">
-
-    <p>For <i tal:content="svc/service">Foo</i> service</p>
-
-    <ul>
-      <tal:block tal:repeat="cnf view/listRegistrations">
-        <li tal:condition="python: cnf['service'] == svc['service']"
-            tal:define="activate python:cnf['advice'] == 'Active'">
-          <a tal:attributes="href cnf/path">
-            <i tal:content="cnf/usage">Usage summary</i>
-            implemented by
-            <i tal:content="cnf/implementation">Implementation summary</i>
-          </a>
-          <span tal:condition="cnf/conflict">
-            <br />
-            <font color="red" tal:condition="not:activate">Conflicts
-                                                           with</font>
-            <font color="green" tal:condition="activate">Overrides</font>
-            <a tal:content="cnf/conflict"
-               tal:attributes="href cnf/conflict">path</a>
-          </span>
+      <span tal:condition="not:svc/insite">
+        <span tal:condition="svc/inbundle" i18n:translate="">
+          registered in bundle at
+          <a tal:content="svc/inbundle"
+             tal:attributes="href svc/inbundle" i18n:name="path">path</a>
+        </span>
+        <span tal:condition="not:svc/inbundle">
+          <font size="+1" color="red">
+            <b i18n:translate="">UNFULFILLED DEPENDENCY</b>
+          </font>
           <br />
-          <span tal:condition="python: cnf['advice'] == 'Active'">
-            <input type="radio" tal:attributes="name cnf/path"
-                   value="Registered" />Register only
-            <b><input type="radio" tal:attributes="name cnf/path"
-                   value="Active" checked="checked" />Register and activate</b>
-          </span>
-          <span tal:condition="python: cnf['advice'] == 'Registered'">
-            <b><input type="radio" tal:attributes="name cnf/path"
-                   value="Registered" checked="checked" />Register only</b>
-            <input type="radio" tal:attributes="name cnf/path"
-                   value="Active" />Register and activate
-          </span>
-          (is: <span tal:replace="cnf/status">Active</span>)
-        </li>
-      </tal:block>
-    </ul>
-
-  </tal:block>
-
-  <p>Click "Activate bundle" to perform the above actions.</p>
-
-  <p><input type="submit" value="Activate bundle" /></p>
-
-  <p><input type="reset" value="Reset form" /></p>
-
-</form>
-
-<form action="@@bundle.html" method="get">
-
-  <p>Click "Deactivate bundle" to unregister all registrations in
-  this bundle.</p>
+          <b i18n:translate="">
+            (You must <a href="../default/AddService">add a
+            <i tal:content="svc/service" i18n:name="service_name">Foo</i>
+            service to this site</a> before you can activate this bundle)
+          </b>
+        </span>
+      </span>
+    </li>
+  </ul>
 
-  <p><input type="submit" value="Deactivate bundle" /></p>
+  <h4 i18n:translate="">Registrations in this bundle</h4>
 
-  <input type="hidden" name="allclear" value="1" />
+    <div class="message" tal:condition="message">
+      <span tal:replace="message">view/update message here</span>
+      <br /><br />
+      <i>
+        <a href="@@bundle.html" i18n:translate="">(click to clear message)</a>
+      </i>
+    </div>
+
+  <form action="@@bundle.html" method="get">
+
+    <tal:block tal:repeat="svc view/listServices">
+
+      <p i18n:translate="">For 
+        <i tal:content="svc/service" i18n:name="service_name">Foo</i> service
+      </p>
+
+      <ul>
+        <tal:block tal:repeat="cnf view/listRegistrations">
+          <li tal:condition="python: cnf['service'] == svc['service']"
+              tal:define="activate python:cnf['advice'] == 'Active'">
+            <a tal:attributes="href cnf/path" i18n:translate="">
+              <i tal:content="cnf/usage" i18n:name="usage_summary">Usage</i>
+              implemented by
+              <i tal:content="cnf/implementation" i18n:name="impl_summary">
+                Implementation summary</i>
+            </a>
+            <span tal:condition="cnf/conflict">
+              <br />
+              <font color="red" tal:condition="not:activate" i18n:translate="">
+                Conflicts with
+              </font>
+              <font color="green" tal:condition="activate" i18n:translate="">
+                Overrides
+              </font>
+              <a tal:content="cnf/conflict"
+                 tal:attributes="href cnf/conflict">path</a>
+            </span>
+            <br />
+            <span tal:condition="python: cnf['advice'] == 'Active'">
+              <input type="radio" tal:attributes="name cnf/path"
+                     value="Registered" />
+              <span i18n:translate="">Register only</span>
+              <b>
+                <input type="radio" tal:attributes="name cnf/path"
+                       value="Active" checked="checked" />
+                <span i18n:translate="">Register and activate</span>
+              </b>
+            </span>
+            <span tal:condition="python: cnf['advice'] == 'Registered'">
+              <b>
+                <input type="radio" tal:attributes="name cnf/path"
+                       value="Registered" checked="checked" />
+                <span i18n:translate="">Register only</span>
+              </b>
+              <input type="radio" tal:attributes="name cnf/path"
+                     value="Active" />
+              <span i18n:translate="">Register and activate</span>
+            </span>
+            <span i18n:translate="">
+              (is: <span tal:replace="cnf/status" 
+                         i18n:name="active_status">Active</span>)
+            </span>
+          </li>
+        </tal:block>
+      </ul>
+
+    </tal:block>
+
+    <p i18n:translate="">
+      Click "Activate bundle" to perform the above actions.
+    </p>
+
+    <p><input type="submit" value="Activate bundle" 
+              i18n:attributes="value activate-bundle-button"/></p>
+
+    <p><input type="reset" value="Reset form" 
+              i18n:attributes="value reset-button"/></p>
+
+  </form>
+
+  <form action="@@bundle.html" method="get">
+
+    <p i18n:translate="">Click "Deactivate bundle" to unregister all 
+      registrations in this bundle.</p>
+
+    <p><input type="submit" value="Deactivate bundle"
+              i18n:attributes="value deactivate-bundle-button"/></p>
+              
+    <input type="hidden" name="allclear" value="1" />
 
-</form>
+  </form>
 
 </div>
 </body>


=== Zope3/src/zope/app/browser/services/bundle.py 1.9 => 1.10 ===
--- Zope3/src/zope/app/browser/services/bundle.py:1.9	Sat Jun 21 17:21:59 2003
+++ Zope3/src/zope/app/browser/services/bundle.py	Thu Aug  7 13:41:03 2003
@@ -30,10 +30,11 @@
 
 $Id$
 """
-
 import re
 from transaction import get_transaction
+
 from zope.app import zapi
+from zope.app.i18n import ZopeMessageIDFactory as _
 from zope.app.interfaces.container import IReadContainer
 from zope.app.interfaces.services.registration import IRegistration
 from zope.app.interfaces.services.registration import IRegistrationManager
@@ -86,7 +87,9 @@
                     count += 1
             if count:
                 get_transaction().note("deactivate bundle")
-            return "unregistered %d registrations" % count
+            status = _("unregistered ${count} registrations")
+            status.mapping = {'count': str(count)}
+            return status
         activated = []
         registered = []
         for key, value in self.request.form.items():
@@ -109,12 +112,19 @@
                     registered.append(path)
                     obj.status = RegisteredStatus
         s = ""
+        mapping = {}
         if activated:
-            s += "Activated: %s.\n" % (", ".join(activated))
+            s += _("Activated: ${activated}.\n")
+            mapping['activated'] = ", ".join(activated)
         if registered:
-            s += "Registered: %s.\n" % (", ".join(registered))
+            s += _("Registered: ${registered}.\n")
+            mapping['registered'] = ", ".join(registered)
         if s:
             get_transaction().note("activate bundle")
+        # We have to do that again, since the adding to a message id makes it
+        # a unicode string again.
+        s = _(s)
+        s.mapping = mapping
         return s
 
     def listServices(self):


=== Zope3/src/zope/app/browser/services/cache.py 1.11 => 1.12 ===
--- Zope3/src/zope/app/browser/services/cache.py:1.11	Sat Jun 21 17:21:59 2003
+++ Zope3/src/zope/app/browser/services/cache.py	Thu Aug  7 13:41:03 2003
@@ -15,19 +15,17 @@
 
 $Id$
 """
-
 from zope.app.browser.services.registration import AddComponentRegistration
+from zope.app.i18n import ZopeMessageIDFactory as _
 from zope.app.interfaces.container import IZopeContainer
 from zope.app.interfaces.services.registration import IRegistered
-from zope.component import getAdapter, getView
-from zope.publisher.browser import BrowserView
 from zope.app.interfaces.services.registration import ActiveStatus
 from zope.app.interfaces.services.registration import RegisteredStatus
 from zope.app.interfaces.services.registration import UnregisteredStatus
 from zope.app.traversing import traverse, getPath, getParent, getName
+from zope.component import getAdapter, getView
 
-class Caches(BrowserView):
-
+class Caches:
     # self.context is the local caching service
 
     def update(self):
@@ -41,7 +39,7 @@
         doDelete = self.request.get("Delete")
         if not todo:
             if doActivate or doDeactivate or doDelete:
-                return "Please select at least one checkbox"
+                return _("Please select at least one checkbox")
             return None
         if doActivate:
             return self._activate(todo)
@@ -61,9 +59,11 @@
                 obj.status = ActiveStatus
                 done.append(name)
         if done:
-            return "Activated: " + ", ".join(done)
+            s = _("Activated: ${activated_caches}")
+            s.mapping = {'activated_caches': ", ".join(done)}
+            return s
         else:
-            return "All of the checked caches were already active"
+            return _("All of the checked caches were already active")
 
     def _deactivate(self, todo):
         done = []
@@ -74,9 +74,11 @@
                 obj.status = RegisteredStatus
                 done.append(name)
         if done:
-            return "Deactivated: " + ", ".join(done)
+            s = _("Deactivated: ${deactivated_caches}")
+            s.mapping = {'deactivated_caches': ", ".join(done)}
+            return s
         else:
-            return "None of the checked caches were active"
+            return _("None of the checked caches were active")
 
     def _delete(self, todo):
         errors = []
@@ -87,9 +89,10 @@
                 errors.append(name)
                 continue
         if errors:
-            return ("Can't delete active cache%s: %s; "
-                    "use the Deactivate button to deactivate" %
-                    (len(errors) != 1 and "s" or "", ", ".join(errors)))
+            s = _("Can't delete active cache(s): ${cache_names}; "
+                  "use the Deactivate button to deactivate")
+            s.mapping = {'cache_names': ", ".join(errors)}
+            return s
 
         # 1) Delete the registrations
         caches = {}
@@ -115,7 +118,9 @@
             container = getAdapter(parent, IZopeContainer)
             del container[name]
 
-        return "Deleted: %s" % ", ".join(todo)
+        s = _("Deleted: ${cache_names}")
+        s.mapping = {'cache_names': ", ".join(todo)}
+        return s
 
     def getConfigs(self):
         L = []
@@ -134,7 +139,7 @@
         L.sort()
         return [d for name, d in L]
 
-class ConfigureCache(BrowserView):
+class ConfigureCache:
 
     def update(self):
         cr = self.context.queryRegistrations(self.request['name'])
@@ -142,8 +147,7 @@
         form.update()
         return form
 
-class Registered(BrowserView):
-
+class Registered:
     """View for displaying the registrations for a cache."""
 
     def uses(self):
@@ -162,5 +166,4 @@
         return result
 
 class AddCacheRegistration(AddComponentRegistration):
-
     pass


=== Zope3/src/zope/app/browser/services/cache.zcml 1.6 => 1.7 ===
--- Zope3/src/zope/app/browser/services/cache.zcml:1.6	Sun Aug  3 13:49:27 2003
+++ Zope3/src/zope/app/browser/services/cache.zcml	Thu Aug  7 13:41:03 2003
@@ -1,7 +1,4 @@
-<configure
-    xmlns='http://namespaces.zope.org/browser'
-    i18n_domain='zope'
-    >
+<configure xmlns="http://namespaces.zope.org/browser">
 
 <!-- Browser directives for the cache service -->
 
@@ -13,8 +10,7 @@
       menu="add_service" title="Caching Service"
       action="CachingService"
       permission="zope.ManageServices"
-      description="A Persistent Caching Service for TTW development"
-      />
+      description="A Persistent Caching Service for TTW development" />
 
   <!-- ZMI tab named "Caches" for the cache service -->
   <page
@@ -23,8 +19,7 @@
       template="caches.pt"
       class=".cache.Caches"
       permission="zope.ManageServices"
-      menu="zmi_views" title="Caches"
-      />
+      menu="zmi_views" title="Caches" />
 
 <!-- Browser directives for configuring individual cache objects -->
 
@@ -41,8 +36,7 @@
       name="configureCache.html"
       template="configureCache.pt"
       class=".cache.ConfigureCache"
-      permission="zope.ManageServices"
-      />
+      permission="zope.ManageServices" />
 
   <!-- When creating a new cache object, you are taken to this
        form to configure it.  The form lets you choose a name,
@@ -58,7 +52,6 @@
       content_factory="zope.app.services.cache.CacheRegistration"
       arguments="name componentPath"
       set_after_add="status"
-      fields="name componentPath permission status"
-      />
+      fields="name componentPath permission status" />
 
 </configure>


=== Zope3/src/zope/app/browser/services/caches.pt 1.11 => 1.12 ===
--- Zope3/src/zope/app/browser/services/caches.pt:1.11	Wed Jun 25 17:18:53 2003
+++ Zope3/src/zope/app/browser/services/caches.pt	Thu Aug  7 13:41:03 2003
@@ -1,65 +1,64 @@
 <html metal:use-macro="context/@@standard_macros/page">
-
+<body>
 <div metal:fill-slot="body"
-     i18n:domain="zope"
-     tal:define="message view/update; configs view/getConfigs"
-     >
-
-<h2 i18n:translate="">Caches registered in this cache service:</h2>
-
-      <div class="message" tal:condition="message">
-         <span tal:replace="message">view/update message here</span>
-         <br /><br /><i><a href="">(click to clear message)</a></i>
-      </div>
-
-<p tal:condition="not:configs">None</p>
-
-<form method="POST" action="index.html" tal:condition="configs">
-
-  <table>
-    <tr tal:repeat="config configs">
-      <td><input type="checkbox" name="selected:list"
-                 tal:attributes="value config/name" />
-      </td>
-      <td>
-
-        <a href="."
-           tal:condition="config/url"
-           tal:attributes="href config/url"
-           >
-          <span i18n:translate="">
-            <span tal:replace="config/name" i18n:name="cache_name" />
-          </span>
-        </a>
+     tal:define="message view/update; configs view/getConfigs">
 
-        <span tal:condition="not:config/url">
-          <span i18n:translate="">
-            <span tal:replace="config/name" i18n:name="cache_name" />
+  <h2 i18n:translate="">Caches registered in this cache service:</h2>
+
+  <div class="message" tal:condition="message">
+    <span tal:replace="message">view/update message here</span>
+    <br /><br />
+    <i><a href="" i18n:translate="">(click to clear message)</a></i>
+  </div>
+
+  <p tal:condition="not:configs">None</p>
+
+  <form method="POST" action="index.html" tal:condition="configs">
+
+    <table>
+      <tr tal:repeat="config configs">
+        <td><input type="checkbox" name="selected:list"
+                   tal:attributes="value config/name" />
+        </td>
+        <td>
+
+          <a href="."
+             tal:condition="config/url"
+             tal:attributes="href config/url">
+             <span tal:replace="config/name" />
+          </a>
+
+          <span tal:condition="not:config/url">
+            <span tal:replace="config/name" />
+            <span i18n:translate="">(inactive)</span>
           </span>
-          <span i18n:translate="">(inactive)</span>
-        </span>
 
-      </td>
-      <td>
-        <a href="."
-           tal:attributes="href config/configurl"
-           i18n:translate=""
-           >(change registration)</a>
-      </td>
-    </tr>
-  </table>
-
-  <input type="submit" name="Activate" value="Activate" />
-  <input type="submit" name="Deactivate" value="Deactivate" />
-  &nbsp;
-  <input type="submit" name="Delete" value="Delete" />
-  &nbsp;
-  <input type="submit" name="Refresh" value="Refresh" />
+        </td>
+        <td>
+          <a href="."
+             tal:attributes="href config/configurl"
+             i18n:translate=""
+             >(change registration)</a>
+        </td>
+      </tr>
+    </table>
+
+    <input type="submit" name="Activate" value="Activate" 
+           i18n:attributes="value activate-button"/>
+    <input type="submit" name="Deactivate" value="Deactivate"
+           i18n:attributes="value deactivate-button"/>
+    &nbsp;
+    <input type="submit" name="Delete" value="Delete"
+           i18n:attributes="value delete-button"/>
+    &nbsp;
+    <input type="submit" name="Refresh" value="Refresh"
+           i18n:attributes="value refresh-button"/>
 
-</form>
+  </form>
 
-<p><a href="../AddCache">Add a cache to this cache service</a></p>
+  <p><a href="../AddCache" i18n:translate="">
+    Add a cache to this cache service</a></p>
 
 </div>
-
+</body>
 </html>


=== Zope3/src/zope/app/browser/services/configure.zcml 1.63 => 1.64 ===
--- Zope3/src/zope/app/browser/services/configure.zcml:1.63	Sun Aug  3 13:49:27 2003
+++ Zope3/src/zope/app/browser/services/configure.zcml	Thu Aug  7 13:41:03 2003
@@ -1,7 +1,4 @@
-<configure
-    xmlns='http://namespaces.zope.org/browser'
-    i18n_domain='zope'
-    >
+<configure xmlns="http://namespaces.zope.org/browser">
 
 <!-- For services, just treat @@manage as @@index.html by default -->
 
@@ -11,10 +8,10 @@
      name="index.html"
      permission="zope.ManageServices"
      class="zope.app.browser.managementviewselector.ManagementViewSelector"
-     allowed_interface="zope.publisher.interfaces.browser.IBrowserPublisher"
-     />
+     allowed_interface="zope.publisher.interfaces.browser.IBrowserPublisher" />
 
-<!-- General registration views --> <include package=".registration" />
+<!-- General registration views --> 
+  <include package=".registration" />
 
 <!--Error Logging Service -->
 
@@ -23,33 +20,26 @@
     permission="zope.Public"
     class="zope.app.browser.services.error.EditErrorLog">
 
-    <page name="index.html" template="error.pt" />
+    <page name="index.html" template="error.pt"
+          menu="zmi_views" title="Errors" />
     <page name="edit.html" attribute="updateProperties" />
     <page name="showEntry.html" template="errorentry.pt"/>
-    <page name="showTextTBEntry.html"
-       template="texttbentry.pt"/>
-    </pages>
+    <page name="showTextTBEntry.html" template="texttbentry.pt"/>
+  </pages>
 
   <menuItem
      menu="add_service"
      for="zope.app.interfaces.container.IAdding"
      action="ErrorLogging"
      title="Error Logging Service"
-     description="Error Reporting Service for Logging Errors"
-     />
+     description="Error Reporting Service for Logging Errors" />
 
   <icon name="zmi_icon"
       for="zope.app.interfaces.services.error.IErrorReportingService"
       file="error_service.gif" />
 
-  <menuItem
-      for="zope.app.interfaces.services.error.IErrorReportingService"
-      menu="zmi_views"
-      title="Errors"
-      action="index.html"
-      />
-
-<!-- CachingService --> <include file="cache.zcml" />
+<!-- CachingService --> 
+  <include file="cache.zcml" />
 
 <!-- Event Service -->
 
@@ -59,22 +49,19 @@
       menu="zmi_views" title="Control"
       permission="zope.ManageServices" 
       class="zope.app.browser.services.event.Control"
-      attribute="index" 
-      />
+      template="eventcontrol.pt" />
 
   <menuItem
       menu="add_service" 
       for="zope.app.interfaces.container.IAdding"
       action="Events"  title="Event Service"
       description=
-      "An event service. One of these in the root is usually enough"
-      />
+      "An event service. One of these in the root is usually enough" />
 
   <icon
       name="zmi_icon"
       for="zope.app.interfaces.services.event.IEventService" 
-      file="event_service.gif"
-      />
+      file="event_service.gif" />
 
 <!-- Role Service -->
 
@@ -94,7 +81,8 @@
      for="zope.app.services.role.IRoleService"
      class="zope.app.browser.services.role.Contents">
 
-     <page name="index.html" attribute="contents" />
+     <page name="index.html" attribute="contents"
+           menu="zmi_views" title="Contents" />
      <page name="removeObjects.html" attribute="removeObjects" />
 
   </pages>
@@ -102,24 +90,19 @@
   <pages 
      permission="zope.ManageServices" 
      for="zope.app.services.role.IRoleService"
-     class="zope.app.browser.services.role.Add"
-     >
+     class="zope.app.browser.services.role.Add">
 
-    <page name="+"           template="addrole.pt" 
-          menu="zmi_actions" title="Add"
-    />
+    <page name="+" template="addrole.pt" 
+          menu="zmi_actions" title="Add" />
     <page name="action.html" attribute="action" />
 
     </pages>
 
-  <menuItems
-           menu="zmi_views"
-           for="zope.app.services.role.IRoleService">
-    <menuItem title="Contents" action="@@index.html"/>
-    </menuItems>
+<!-- Deprecated Simple Authentication Service --> 
+  <include file="auth.zcml" />
 
-<!-- Deprecated Simple Authentication Service --> <include file="auth.zcml" />
-<!-- Pluggable Authentication Service --> <include package=".pluggableauth" />
+<!-- Pluggable Authentication Service --> 
+  <include package=".pluggableauth" />
 
 <!-- Component Location widget -->
 
@@ -130,16 +113,14 @@
     name="edit"
     class="zope.app.browser.services.field.ComponentPathWidget"
     allowed_interface="zope.app.interfaces.browser.form.IBrowserWidget"
-    permission="zope.ManageServices"
-    />
+    permission="zope.ManageServices" />
 
   <page
     for="zope.app.services.field.IComponentPath"
     name="display"
     class="zope.app.browser.services.field.ComponentPathDisplayWidget"
     allowed_interface="zope.app.interfaces.browser.form.IBrowserWidget"
-    permission="zope.ManageServices"
-    />
+    permission="zope.ManageServices" />
 
 <!-- Adapters -->
 
@@ -152,40 +133,31 @@
     />
 
   <page
-     for = "zope.component.interfaces.IAdapterService"
-     name = "index.html"
-     template = "adapter_search.pt"
+     for="zope.component.interfaces.IAdapterService"
+     name="index.html"
+     template="adapter_search.pt"
      permission="zope.ManageServices"
-     class="zope.app.browser.services.adapter.AdapterServiceView"
-     />
+     class="zope.app.browser.services.adapter.AdapterServiceView" />
 
   <view
-     for = "zope.app.interfaces.container.IAdding"
+     for="zope.app.interfaces.container.IAdding"
      name="AdapterRegistration"
      permission="zope.ManageServices" 
      class="zope.app.browser.services.adapter.AdapterRegistrationAdd"
-     >
-    <page
-      name="index.html"
-      template="add_adapter_config.pt"
-      />
-  </view>
+     menu="add_registration" title="Adapter">
 
-  <menuItem
-      for="zope.app.interfaces.container.IAdding"
-      menu="add_registration"
-      action="AdapterRegistration"
-      title="Adapter"
-      />
+    <page name="index.html" template="add_adapter_config.pt" />
+
+  </view>
 
   <menuItem
       for="zope.app.interfaces.container.IAdding"
       menu="add_service"
       action="zope.app.services.AdapterService"
-      title="Adapter Service"
-      />
+      title="Adapter Service" />
 
-<!-- Views -->  <include file="view.zcml" />
+<!-- Views -->  
+  <include file="view.zcml" />
 
 <!-- ZPT Templates -->
 
@@ -193,23 +165,20 @@
     for="zope.app.interfaces.services.view.IZPTTemplate"
     name="index.html"
     class=".zpt.Source"
-    permission="zope.ManageServices"
-    />
+    permission="zope.ManageServices" />
 
   <editform
     schema="zope.app.interfaces.services.view.IZPTTemplate"
     name="edit.html"
     menu="zmi_views"
     label="ZPT Template"
-    permission="zope.ManageServices"
-    />
+    permission="zope.ManageServices" />
 
   <menuItem
     for="zope.app.interfaces.container.IAdding"
     menu="add_component"
     action="zope.app.services.zpt.template"
-    title="ZPT Template"
-    />
+    title="ZPT Template" />
 
 <!-- Service Manager navigation action -->
 
@@ -218,26 +187,26 @@
     for="zope.app.interfaces.services.service.IServiceManagerContainer"
     permission="zope.ManageServices" 
     class="zope.app.browser.services.addservicemanager.AddServiceManager"
-    attribute="addServiceManager" 
-    />
+    attribute="addServiceManager" />
 
-  <menuItems menu="zmi_actions"
-    for="zope.app.interfaces.services.service.IServiceManagerContainer"
-    >
+  <menuItems 
+      menu="zmi_actions"
+      for="zope.app.interfaces.services.service.IServiceManagerContainer">
 
-    <menuItem title="Manage Local Services"
-            action="++etc++site/@@SelectedManagementView.html"
-            filter="context/hasServiceManager"
-            />
-
-    <menuItem title="Turn On Local Service Manager"
-            action="@@addServiceManager.html"
-            filter="not:context/hasServiceManager"
-             />
+    <menuItem 
+        title="Manage Local Services"
+        action="++etc++site/@@SelectedManagementView.html"
+        filter="context/hasServiceManager" />
+
+    <menuItem 
+        title="Turn On Local Service Manager"
+        action="@@addServiceManager.html"
+        filter="not:context/hasServiceManager" />
 
   </menuItems>
 
-<!-- ConnectionService --> <include file="connection.zcml" />
+<!-- ConnectionService --> 
+  <include file="connection.zcml" />
 
 <!-- ServiceManager -->
 
@@ -247,16 +216,14 @@
      menu="zmi_views" title="Services"
      template="services.pt"
      class=".service.ServiceSummary"
-     permission="zope.ManageServices"
-     />
+     permission="zope.ManageServices" />
 
   <page
      for="zope.app.interfaces.services.service.IServiceManager"
      name="serviceActivation.html"
      template="serviceactivation.pt"
      class=".service.ServiceActivation"
-     permission="zope.ManageServices"
-     />
+     permission="zope.ManageServices" />
 
   <icon
       name="zmi_icon"
@@ -265,18 +232,17 @@
 
   <menuItems
       menu="zmi_actions"
-      for="zope.app.interfaces.services.service.IServiceManager"
-      >
+      for="zope.app.interfaces.services.service.IServiceManager">
+
     <menuItem
         title="Visit default package"
         action="default/@@SelectedManagementView.html"
-        permission="zope.ManageServices"
-        />
+        permission="zope.ManageServices" />
     <menuItem
         title="Add service"
         action="default/AddService"
-        permission="zope.ManageServices"
-        />
+        permission="zope.ManageServices" />
+
   </menuItems>
 
   <page
@@ -285,8 +251,7 @@
       menu="zmi_views" title="Contents"
       permission="zope.ManageServices"
       class="zope.app.browser.container.contents.Contents"
-      attribute="contents"
-      />
+      attribute="contents" />
 
   <!-- Override the add action with a link to add a page folder -->
   <menuItem
@@ -295,8 +260,7 @@
       title="Add"
       action=
       "@@contents.html?type_name=zope.app.services.folder.SiteManagementFolder"
-      permission="zope.ManageServices"
-      />
+      permission="zope.ManageServices"/>
 
   <pages
       for="zope.app.interfaces.services.service.IServiceManager"
@@ -313,8 +277,7 @@
     for="zope.app.interfaces.services.folder.ISiteManagementFolder"
     permission="zope.ManageServices" 
     class="zope.app.browser.container.contents.JustContents"
-    name="index.html" attribute="index" 
-    />
+    name="index.html" attribute="index" />
 
   <page
      name="contents.html"
@@ -322,8 +285,7 @@
      menu="zmi_views" title="Contents"
      permission="zope.ManageServices"
      class="zope.app.browser.container.contents.Contents"
-     attribute="contents"
-     />
+     attribute="contents" />
 
   <view
      name="+"
@@ -345,8 +307,7 @@
       template="registration/registered.pt"
       class=".registration.NameRegistered"
       permission="zope.ManageServices"
-      menu="zmi_views" title="Registrations"
-      />
+      menu="zmi_views" title="Registrations" />
 
 <!-- ServiceRegistration -->
 
@@ -355,28 +316,28 @@
       for="zope.app.interfaces.services.service.ILocalService"
       template="add_svc_config.pt"
       class=".service.AddServiceRegistration"
-      permission="zope.ManageServices"
-      />
+      permission="zope.ManageServices" />
 
   <page
       name="add_svc_config.html"
       for="zope.app.interfaces.services.service.ILocalService"
       attribute="action"
       class=".service.AddServiceRegistration"
-      permission="zope.ManageServices"
-      />
+      permission="zope.ManageServices" />
 
-<!-- Persistent Modules --> <include package=".module" />
+<!-- Persistent Modules --> 
+  <include package=".module" />
 
-<!-- PageFolder --> <include file="pagefolder.zcml" />
+<!-- PageFolder --> 
+  <include file="pagefolder.zcml" />
 
 <!-- Session service -->
 
   <menuItem
      menu="add_service"
      for="zope.app.interfaces.container.IAdding"
-     action="ISessionService"  title='Cookie Session Service'
-     description='Simplistic session support using cookies' />
+     action="ISessionService" title="Cookie Session Service"
+     description="Simplistic session support using cookies" />
 
 <!-- Principal annotations (user data) service -->
 
@@ -385,8 +346,7 @@
      for="zope.app.interfaces.container.IAdding"
      action="IPrincipalAnnotationService"
      title="Principal Annotation Service"
-     description="Stores Annotations for Principals"
-     />
+     description="Stores Annotations for Principals" />
 
 
 <!-- Object Hub -->
@@ -397,8 +357,7 @@
     permission="zope.ManageServices" 
     for="zope.app.interfaces.services.hub.IObjectHub"
     class="zope.app.browser.services.hub.Control"
-    attribute="index"
-    />
+    template="hubcontrol.pt" />
 
   <menuItem
       menu="add_service"
@@ -406,8 +365,7 @@
       action="HubIds"
       title="HubIds Service"
       description="An object hub, for cataloging, unique object ids, and
-                   more: use sparingly"
-      />
+                   more: use sparingly" />
 
   <icon
       name="zmi_icon"
@@ -430,10 +388,10 @@
     name="index.html"
     menu="zmi_views"
     title="Control"
-    template="subscription_control.pt"
-    />
+    template="subscription_control.pt" />
 
-<!-- Utility Service --> <include package=".utility" />
+<!-- Utility Service --> 
+  <include package=".utility" />
 
 <!-- "Add Service" menu -->
 
@@ -443,8 +401,7 @@
     action="../AddService"
     title="Service"
     description="Takes you to a menu of services to add"
-    permission="zope.ManageServices"
-    />
+    permission="zope.ManageServices" />
 
   <view
      name="AddService"
@@ -505,14 +462,13 @@
       menu="zmi_views" title="Bundle"
       permission="zope.ManageServices"
       class=".bundle.BundleView"
-      template="bundle.pt"
-      />
+      template="bundle.pt" />
 
 
 <!-- Translation Service Views -->
-<include package=".translation" />
+  <include package=".translation" />
 
 <!-- Local Interface Service -->
-<include package=".interface" />
+  <include package=".interface" />
 
 </configure>


=== Zope3/src/zope/app/browser/services/configureCache.pt 1.4 => 1.5 ===
--- Zope3/src/zope/app/browser/services/configureCache.pt:1.4	Wed Jun 25 18:14:26 2003
+++ Zope3/src/zope/app/browser/services/configureCache.pt	Thu Aug  7 13:41:03 2003
@@ -1,31 +1,25 @@
 <html metal:use-macro="context/@@standard_macros/page">
 <body>
-<div metal:fill-slot="body"
-     i18n:domain="zope"
-     >
+<div metal:fill-slot="body">
 
-<h2 i18n:translate="">Cache registrations for
-    <i tal:content="request/name" i18n:name="cache_name">name</i></h2>
+  <h2 i18n:translate="">
+    Cache registrations for 
+    <i tal:content="request/name" i18n:name="cache_name">name</i>
+  </h2>
+  
+  <form action="." method="post"
+        tal:attributes="action request/URL"
+        tal:define="form view/update">
 
-<form method="post"
-      action="."
-      tal:attributes="action request/URL"
-      tal:define="form view/update"
-      >
-  <input type="hidden"
-         name="name"
-         tal:attributes="value request/name"
-         />
-
-  <div tal:replace="structure form" />
-
-  <input type="submit"
-         name="submit_update"
-         value="Update"
-         i18n:attributes="value form_update"
-         />
-
-</form>
+    <input type="hidden" name="name"
+           tal:attributes="value request/name" />
+  
+    <div tal:replace="structure form" />
+  
+    <input type="submit" name="submit_update" value="Update"
+           i18n:attributes="value update-button" />
+  
+  </form>
 
 </div>
 </body>


=== Zope3/src/zope/app/browser/services/configureConnection.pt 1.4 => 1.5 ===
--- Zope3/src/zope/app/browser/services/configureConnection.pt:1.4	Wed Jun 25 18:14:26 2003
+++ Zope3/src/zope/app/browser/services/configureConnection.pt	Thu Aug  7 13:41:03 2003
@@ -1,29 +1,23 @@
 <html metal:use-macro="context/@@standard_macros/page">
 <body>
-<div metal:fill-slot="body"
-     i18n:domain="zope"
-     >
+<div metal:fill-slot="body">
 
-<h2 i18n:translate="">Connection registrations for
-    <i tal:content="request/name" i18n:name="connection_name">name</i></h2>
+  <h2 i18n:translate="">
+    Connection registrations for
+    <i tal:content="request/name" i18n:name="connection_name">name</i>
+  </h2>
 
-<form method="post"
-      action="."
+<form action="." method="post"
       tal:attributes="action request/URL"
-      tal:define="form view/update"
-      >
-  <input type="hidden"
-         name="name"
-         tal:attributes="value request/name"
-         />
+      tal:define="form view/update" >
+
+  <input type="hidden" name="name"
+         tal:attributes="value request/name"/>
 
   <div tal:replace="structure form" />
 
-  <input type="submit"
-         name="submit_update"
-         value="Update"
-         i18n:attributes="value form_update"
-         />
+  <input type="submit" name="submit_update" value="Update"
+         i18n:attributes="value update-button" />
 
 </form>
 


=== Zope3/src/zope/app/browser/services/configureView.pt 1.3 => 1.4 ===
--- Zope3/src/zope/app/browser/services/configureView.pt:1.3	Wed Jun 25 18:14:26 2003
+++ Zope3/src/zope/app/browser/services/configureView.pt	Thu Aug  7 13:41:03 2003
@@ -2,27 +2,23 @@
 <body>
 <div metal:fill-slot="body">
 
-<h2>View registrations for
-    <i tal:content="view/summary">key</i></h2>
+  <h2 i18n:translate="">View registrations for
+    <i tal:content="view/summary" i18n:name="key_name">key</i>
+  </h2>
 
-<form method="post"
-      action="."
-      tal:attributes="action request/URL"
-      tal:define="form view/update"
-      >
-  <input type="hidden"
-         name="key"
-         tal:attributes="value request/key"
-         />
+  <form action="." method="post"
+        tal:attributes="action request/URL"
+        tal:define="form view/update" >
 
-  <div tal:replace="structure form" />
+    <input type="hidden" name="key"
+           tal:attributes="value request/key" />
 
-  <input type="submit"
-         name="submit_update"
-         value="Update"
-         />
+    <div tal:replace="structure form" />
 
-</form>
+    <input type="submit" name="submit_update" value="Update"
+           i18n:attributes="value update-button" />
+
+  </form>
 
 </div>
 </body>


=== Zope3/src/zope/app/browser/services/connection.py 1.13 => 1.14 ===
--- Zope3/src/zope/app/browser/services/connection.py:1.13	Sat Jun 21 17:21:59 2003
+++ Zope3/src/zope/app/browser/services/connection.py	Thu Aug  7 13:41:03 2003
@@ -15,18 +15,17 @@
 
 $Id$
 """
-
 from zope.app.browser.services.registration import AddComponentRegistration
+from zope.app.i18n import ZopeMessageIDFactory as _
 from zope.app.interfaces.container import IZopeContainer
 from zope.app.interfaces.services.registration import IRegistered
-from zope.component import getAdapter, getView
-from zope.publisher.browser import BrowserView
 from zope.app.interfaces.services.registration import ActiveStatus
 from zope.app.interfaces.services.registration import RegisteredStatus
 from zope.app.interfaces.services.registration import UnregisteredStatus
 from zope.app.traversing import traverse, getPath, getParent, getName
+from zope.component import getAdapter, getView
 
-class Connections(BrowserView):
+class Connections:
 
     # self.context is the local connection service
 
@@ -41,7 +40,7 @@
         doDelete = self.request.get("Delete")
         if not todo:
             if doDeactivate or doDelete:
-                return "Please select at least one checkbox"
+                return _("Please select at least one checkbox")
             return None
         if doActivate:
             return self._activate(todo)
@@ -61,9 +60,11 @@
                 obj.status = ActiveStatus
                 done.append(name)
         if done:
-            return "Activated: " + ", ".join(done)
+            s = _("Activated: ${activated_connections}")
+            s.mapping = {'activated_connections': ", ".join(done)}
+            return s
         else:
-            return "All of the checked connections were already active"
+            return _("All of the checked connections were already active")
 
     def _deactivate(self, todo):
         done = []
@@ -74,9 +75,11 @@
                 obj.status = RegisteredStatus
                 done.append(name)
         if done:
-            return "Deactivated: " + ", ".join(done)
+            s = _("Deactivated: ${deactivated_connections}")
+            s.mapping = {'deactivated_connections': ", ".join(done)}
+            return s
         else:
-            return "None of the checked connections were active"
+            return _("None of the checked connections were active")
 
     def _delete(self, todo):
         errors = []
@@ -87,9 +90,10 @@
                 errors.append(name)
                 continue
         if errors:
-            return ("Can't delete active connection%s: %s; "
-                    "use the Deactivate button to deactivate" %
-                    (len(errors) != 1 and "s" or "", ", ".join(errors)))
+            s = _("Can't delete active connection(s): ${connection_names}; "
+                  "use the Deactivate button to deactivate")
+            s.mapping = {'connection_names': ", ".join(errors)}
+            return s
 
         # 1) Delete the registrations
         connections = {}
@@ -115,7 +119,9 @@
             container = getAdapter(parent, IZopeContainer)
             del container[name]
 
-        return "Deleted: %s" % ", ".join(todo)
+        s = _("Deleted: ${connection_names}")
+        s.mapping = {'connection_names': ", ".join(todo)}
+        return s
 
     def getConfigs(self):
         L = []
@@ -134,7 +140,7 @@
         L.sort()
         return [d for name, d in L]
 
-class ConfigureConnection(BrowserView):
+class ConfigureConnection:
 
     def update(self):
         cr = self.context.queryRegistrations(self.request['name'])
@@ -142,8 +148,7 @@
         form.update()
         return form
 
-class Registered(BrowserView):
-
+class Registered:
     """View for displaying the registrations for a connection."""
 
     def uses(self):
@@ -162,5 +167,4 @@
         return result
 
 class AddConnectionRegistration(AddComponentRegistration):
-
     pass


=== Zope3/src/zope/app/browser/services/connection.zcml 1.8 => 1.9 ===
--- Zope3/src/zope/app/browser/services/connection.zcml:1.8	Sun Aug  3 13:49:27 2003
+++ Zope3/src/zope/app/browser/services/connection.zcml	Thu Aug  7 13:41:03 2003
@@ -1,7 +1,4 @@
-<configure
-    xmlns='http://namespaces.zope.org/browser'
-    i18n_domain='zope'
-    >
+<configure xmlns="http://namespaces.zope.org/browser">
 
 <!-- Browser directives for the connection service -->
 
@@ -23,8 +20,7 @@
       template="connections.pt"
       class=".connection.Connections"
       permission="zope.ManageServices"
-      menu="zmi_views" title="Connections"
-      />
+      menu="zmi_views" title="Connections" />
 
 <!-- Browser directives for registering individual connection objects -->
 
@@ -41,8 +37,7 @@
       name="configureConnection.html"
       template="configureConnection.pt"
       class=".connection.ConfigureConnection"
-      permission="zope.ManageServices"
-      />
+      permission="zope.ManageServices" />
 
   <!-- When creating a new connection object, you are taken to this
        form to register it.  The form lets you define the connection
@@ -58,8 +53,7 @@
       content_factory="zope.app.services.connection.ConnectionRegistration"
       arguments="name componentPath"
       set_after_add="status"
-      fields="name componentPath permission status"
-      />
+      fields="name componentPath permission status" />
 
   <!-- When editing the registration of an existing connection object,
        you are taken to this form.  It is similar to the above add
@@ -71,7 +65,6 @@
       name="index.html"
       schema="zope.app.interfaces.services.connection.IConnectionRegistration"
       permission="zope.ManageServices"
-      fields="name componentPath permission status"
-      />
+      fields="name componentPath permission status" />
 
 </configure>


=== Zope3/src/zope/app/browser/services/connections.pt 1.13 => 1.14 ===
--- Zope3/src/zope/app/browser/services/connections.pt:1.13	Wed Jun 25 17:18:53 2003
+++ Zope3/src/zope/app/browser/services/connections.pt	Thu Aug  7 13:41:03 2003
@@ -1,67 +1,64 @@
 <html metal:use-macro="context/@@standard_macros/page">
-
+<body>
 <div metal:fill-slot="body"
-     i18n:domain="zope"
-     tal:define="message view/update; configs view/getConfigs"
-     >
-
-<h2 i18n:translate="">Connections registered in this connection service:</h2>
-
-      <div class="message" tal:condition="message">
-         <span tal:replace="message">view/update message here</span>
-         <br /><br /><i><a href="">(click to clear message)</a></i>
-      </div>
-
-<p tal:condition="not:configs">None</p>
-
-<form method="POST" action="index.html" tal:condition="configs">
-
-  <table>
-    <tr tal:repeat="config configs">
-      <td><input type="checkbox" name="selected:list"
-                 tal:attributes="value config/name" />
-      </td>
-      <td>
-
-        <a href="."
-           tal:condition="config/url"
-           tal:attributes="href config/url"
-           >
-          <span i18n:translate="">
-            <span tal:replace="config/name" i18n:name="cache_name" />
-          </span>
-        </a>
+     tal:define="message view/update; configs view/getConfigs">
 
-        <span tal:condition="not:config/url">
-          <span i18n:translate="">
-            <span tal:replace="config/name" i18n:name="cache_name" />
+  <h2 i18n:translate="">Connections registered in this connection service:</h2>
+
+  <div class="message" tal:condition="message">
+     <span tal:replace="message">view/update message here</span>
+     <br /><br />
+     <i><a href="" i18n:translate="">(click to clear message)</a></i>
+  </div>
+
+  <p tal:condition="not:configs">None</p>
+
+  <form method="POST" action="index.html" tal:condition="configs">
+
+    <table>
+      <tr tal:repeat="config configs">
+        <td><input type="checkbox" name="selected:list"
+                   tal:attributes="value config/name" />
+        </td>
+        <td>
+
+          <a href="."
+             tal:condition="config/url"
+             tal:attributes="href config/url">
+            <span tal:replace="config/name" />
+          </a>
+
+          <span tal:condition="not:config/url">
+            <span tal:replace="config/name" />
+            <span i18n:translate="">(inactive)</span>
           </span>
-          <span i18n:translate="">(inactive)</span>
-        </span>
 
-      </td>
-      <td>
-        <a href="."
-           tal:attributes="href config/configurl"
-           i18n:translate=""
-           >(change registration)</a>
-      </td>
-    </tr>
-  </table>
-
-  <input type="submit" name="Activate" value="Activate" />
-  <input type="submit" name="Deactivate" value="Deactivate" />
-  &nbsp;
-  <input type="submit" name="Delete" value="Delete" />
-  &nbsp;
-  <input type="submit" name="Refresh" value="Refresh" />
+        </td>
+        <td>
+          <a href="."
+             tal:attributes="href config/configurl"
+             i18n:translate="">(change registration)</a>
+        </td>
+      </tr>
+    </table>
+
+    <input type="submit" name="Activate" value="Activate" 
+           i18n:attributes="value activate-button"/>
+    <input type="submit" name="Deactivate" value="Deactivate"
+           i18n:attributes="value deactivate-button"/>
+    &nbsp;
+    <input type="submit" name="Delete" value="Delete"
+           i18n:attributes="value delete-button"/>
+    &nbsp;
+    <input type="submit" name="Refresh" value="Refresh"
+           i18n:attributes="value refresh-button"/>
 
-</form>
+  </form>
 
-<p><a href="../AddConnection">Add a connection to this
-connection service</a></p>
+  <p><a href="../AddConnection" i18n:translate="">Add a connection to this
+  connection service</a></p>
 
 
 </div>
-
+</body>
 </html>


=== Zope3/src/zope/app/browser/services/edituser.pt 1.4 => 1.5 ===
--- Zope3/src/zope/app/browser/services/edituser.pt:1.4	Mon Jun 30 13:10:54 2003
+++ Zope3/src/zope/app/browser/services/edituser.pt	Thu Aug  7 13:41:03 2003
@@ -1,68 +1,73 @@
 <html metal:use-macro="views/standard_macros/page">
 <head>
-  <title>Edit User</title>
+  <title metal:fill-slot="title" i18n:translate="">Edit User</title>
 </head>
-<body>
-
-  <div metal:fill-slot="body">
-
-    <h1>User id: <span tal:replace="context/getId">12</span></h1>
 
-    <form action="." method="post" enctype="multipart/form-data">
-    
-      <table>      
-            <tbody>   
-            
-              <tr>
-                <th>Title:</th>
-                <td>
-              <input type="text" name="title" size="40" value="" 
-                  tal:attributes="value context/getTitle" />
-            </td>
-              </tr>
-              <tr>
-                <th>Description:</th>
-                <td>
-              <input type="text" name="description" size="40" value=""  
-                  tal:attributes="value context/getDescription" />
-            </td>
-              </tr>
-              <tr>
-                <th>Login:</th>
-                <td>
-              <input type="text" name="login" size="40" value=""
-                  tal:attributes="value context/getLogin" />
-            </td>
-              </tr>
-              <tr>
-                <th>Password:</th>
-                <td>
-              <input type="password" name="password" size="40" value="DEFAULT" />
-            </td>
-              </tr>
-              <tr>
-                <th>Roles:</th>
-                <td>
-              <select name="roles:list" size="5" multiple="multiple">
-                      <tal:block tal:repeat="role view/getAvailableRoles"
-                                 tal:define="user_roles context/getRoles"> 
-                        <option
-                          tal:attributes="value role/getId;
-                                    selected python:role.getId() in user_roles"
-                          tal:content="role/getTitle" />
-                      </tal:block>
-              </select>
-            </td>
-              </tr>
-                        
-            </tbody>     
-      </table>
-
-      <input type="submit" name="edit.html:method" value="Edit" />
+<body>
+<div metal:fill-slot="body">
 
-    </form> 
+  <h1 i18n:translate="">
+    User id: 
+    <span tal:replace="context/getId" i18n:name="user_id">12</span>
+  </h1>
+
+  <form action="." method="post" enctype="multipart/form-data">
+  
+    <div class="row">
+      <div class="label" i18n:translate="">Title</div>
+      <div class="field">
+        <input type="text" name="title" size="60" value=""
+               tal:attributes="value context/getTitle" />
+      </div>
+    </div>
+
+    <div class="row">
+      <div class="label" i18n:translate="">Description</div>
+      <div class="field">
+        <textarea name="description" rows="10" cols="60"
+                  tal:content="context/getDescription" />
+      </div>
+    </div>
+
+    <div class="row">
+      <div class="label" i18n:translate="">Login</div>
+      <div class="field">
+        <input type="text" name="login" size="40" value=""
+               tal:attributes="value context/getLogin" />
+      </div>
+    </div>
+
+    <div class="row">
+      <div class="label" i18n:translate="">Password</div>
+      <div class="field">
+        <input type="password" name="password" size="40" value="DEFAULT" />
+      </div>
+    </div>
+
+    <div class="row">
+      <div class="label" i18n:translate="">Roles</div>
+      <div class="field">
+        <select name="roles:list" size="5" multiple="multiple">
+          <tal:block tal:repeat="role view/getAvailableRoles"
+                     tal:define="user_roles context/getRoles"> 
+            <option
+              tal:attributes="value role/getId;
+                              selected python:role.getId() in user_roles"
+              tal:content="role/getTitle" />
+          </tal:block>
+        </select>
+      </div>
+    </div>
+
+    <div class="row">
+      <div class="controls">
+        <input type="submit" name="edit.html:method" value="Edit"
+            i18n:attributes="value edit-button" />
+      </div>
+    </div>
 
-  </div>
+  </form> 
 
+</div>
 </body>
 </html>


=== Zope3/src/zope/app/browser/services/error.pt 1.6 => 1.7 ===
--- Zope3/src/zope/app/browser/services/error.pt:1.6	Wed Jun 25 18:14:26 2003
+++ Zope3/src/zope/app/browser/services/error.pt	Thu Aug  7 13:41:03 2003
@@ -1,103 +1,102 @@
 <html metal:use-macro="views/standard_macros/page">
 <head>
-  <title>View Error Log Report</title>
+  <title metal:fill-slot="title" i18n:translate="">View Error Log Report</title>
 </head>
 <body>
 <div metal:fill-slot="body">
-<p class="form-help">
-This page lists the exceptions that have occurred in this site
-recently.  You can configure how many exceptions should be kept
-and whether the exceptions should be copied to Zope's event log
-file(s).
-</p>
-
-<form action="edit.html" method="post">
-<br />
-<table tal:define="props context/getProperties">
-  <tr>
-    <td align="left" valign="top">
-    <div class="form-label">
-    Number of exceptions to keep
-    </div>
-    </td>
-    <td align="left" valign="top">
-    <input type="text" name="keep_entries" size="40"
-           tal:attributes="value props/keep_entries" />
-    </td>
-  </tr>
-  <tr>
-    <td align="left" valign="top">
-    <div class="form-label">
-    Copy exceptions to the event log
-    </div>
-    </td>
-    <td align="left" valign="top">
-    <input type="checkbox" name="copy_to_zlog"
-           tal:attributes="checked props/copy_to_zlog;" />
-    </td>
-  </tr>
-  <tr>
-    <td align="left" valign="top">
-    <div class="form-label">
-    Ignored exception types
-    </div>
-    </td>
-    <td align="left" valign="top">
-    <textarea name="ignored_exceptions:lines" cols="40" rows="3"
-      tal:content="python: '\n'.join(props['ignored_exceptions'])"></textarea>
-    </td>
-  </tr>
-  <tr>
-    <td align="left" valign="top">
-    </td>
-    <td align="left" valign="top">
-    <div class="form-element">
-    <input class="form-element" type="submit" name="submit" 
-     value=" Save Changes " />
-    </div>
-    </td>
-  </tr>
-</table>
-
-<h3>Exception Log (most recent first)</h3>
-
-<div tal:define="entries context/getLogEntries">
-
-<em tal:condition="not:entries">
-No exceptions logged.
-</em>
-
-<table tal:condition="entries">
- <tr>
-  <th align="left">Time</th>
-  <th align="left">User</th>
-  <th align="left">Exception</th>
- </tr>
- <tr tal:repeat="entry entries">
-  <td valign="top" nowrap="nowrap">
-   <span tal:content="entry/time">Time</span>
-  </td>
-  <td>
-   <span tal:content="entry/username">joe</span>
-  </td>
-  <td valign="top">
-   <a href="showEntry" tal:attributes="href string:showEntry.html?id=${entry/id}"
-    >
-    <span tal:content="entry/type">AttributeError</span>:
-    <span tal:define="value entry/value"
-      tal:content="python: len(value) < 70 and value or value[:70] + '...'">
-      Application object has no attribute "zzope"</span>
-   </a>
-  </td>
- </tr>
-</table>
-</div>
-</form>
-<p>
-<form action="index.html" method="get">
-<input type="submit" name="submit" value=" Refresh " />
-</form>
-</p>
+
+  <p class="form-help" i18n:translate="">
+    This page lists the exceptions that have occurred in this site
+    recently.  You can configure how many exceptions should be kept
+    and whether the exceptions should be copied to Zope's event log
+    file(s).
+  </p>
+
+  <form action="edit.html" method="post"
+        tal:define="props context/getProperties">
+    <br />
+    <div class="row">
+      <div class="label" i18n:translate="">Number of exceptions to keep</div>
+      <div class="field">
+        <input type="text" name="keep_entries" size="40"
+               tal:attributes="value props/keep_entries" />
+      </div>
+    </div>
+
+    <div class="row">
+      <div class="label" i18n:translate="">
+        Copy exceptions to the event log
+      </div>
+      <div class="field">
+        <input type="checkbox" name="copy_to_zlog"
+               tal:attributes="checked props/copy_to_zlog" />
+      </div>
+    </div>
+
+    <div class="row">
+      <div class="label" i18n:translate="">Ignored exception types</div>
+      <div class="field">
+        <textarea name="ignored_exceptions:lines" cols="40" rows="3"
+            tal:content="python: '\n'.join(props['ignored_exceptions'])" />
+      </div>
+    </div>
+
+    <div class="row">
+      <div class="controls">
+        <input type="submit" name="submit" value="Save Changes"
+                i18n:attributes="value save-changes-button"/>
+      </div>
+    </div>
+
+    <h3 i18n:translate="">Exception Log (most recent first)</h3>
+
+    <div tal:define="entries context/getLogEntries">
+
+      <em tal:condition="not:entries">
+        No exceptions logged.
+      </em>
+
+      <table tal:condition="entries">
+        <tr>
+          <th align="left" i18n:translate="">Time</th>
+          <th align="left" i18n:translate="">User</th>
+          <th align="left" i18n:translate="">Exception</th>
+        </tr>
+
+        <tr tal:repeat="entry entries">
+          <td valign="top" nowrap="nowrap">
+            <span tal:content="entry/time">Time</span>
+          </td>
+          <td>
+            <span tal:content="entry/username">joe</span>
+          </td>
+          <td valign="top">
+            <a href="showEntry" 
+               tal:attributes="href string:showEntry.html?id=${entry/id}">
+              <span tal:content="entry/type">AttributeError</span>:
+              <span tal:define="value entry/value"
+                    tal:content="python: 
+                       len(value) < 70 and value or value[:70] + '...'">
+                Application object has no attribute "zzope"
+              </span>
+            </a>
+          </td>
+        </tr>
+      </table>
+ 
+    </div>
+  
+  </form>
+
+  <form action="index.html" method="get">
+    <div class="row">
+      <div class="controls">
+        <input type="submit" name="submit" value="Refresh" 
+            i18n:attributes="value refresh-button" />
+      </div>
+    </div>
+  </form>
+
 </div>
 </body>
 </html>


=== Zope3/src/zope/app/browser/services/error.py 1.5 => 1.6 ===
--- Zope3/src/zope/app/browser/services/error.py:1.5	Sun Jun 22 10:01:43 2003
+++ Zope3/src/zope/app/browser/services/error.py	Thu Aug  7 13:41:03 2003
@@ -11,15 +11,13 @@
 # FOR A PARTICULAR PURPOSE.
 #
 ##############################################################################
-""" Define view component for event service control.
+"""Define view component for event service control.
 
 $Id$
 """
-
-from zope.publisher.browser import BrowserView
 from zope.app.services.error import ILocalErrorReportingService
 
-class EditErrorLog(BrowserView):
+class EditErrorLog:
     __used_for__ = ILocalErrorReportingService
 
     def updateProperties(self, keep_entries, copy_to_zlog=None,


=== Zope3/src/zope/app/browser/services/errorentry.pt 1.5 => 1.6 ===
--- Zope3/src/zope/app/browser/services/errorentry.pt:1.5	Wed Jun 25 18:14:26 2003
+++ Zope3/src/zope/app/browser/services/errorentry.pt	Thu Aug  7 13:41:03 2003
@@ -1,71 +1,86 @@
 <html metal:use-macro="views/standard_macros/page">
 <head>
-  <title>View Error Log Report</title>
+  <title metal:fill-slot="title" i18n:translate="">View Error Log Report</title>
 </head>
 <body>
-<div metal:fill-slot="body">
-<h1>Header</h1>
-<h3>Exception traceback</h3>
-<hr />
-<div tal:define="entry python:context.getLogEntryById(request.get('id'))">
-<em tal:condition="not:entry">
-The specified log entry was not found.  It may have expired.
-</em>
-
-<div tal:condition="entry">
-
-<table>
- <tr>
-  <th align="left" valign="top">Time</th>
-    <td tal:content="entry/time">Time</td>
- </tr>
- <tr>
-  <th align="left" valign="top">User</th>
-  <td tal:content="entry/username">joe</td>
- </tr>
- <tr>
-  <th align="left" valign="top">Request URL</th>
-  <td tal:content="entry/url">http://zeomega.com</td>
- </tr>
- <tr>
-  <th align="left" valign="top">Exception Type</th>
-  <td tal:content="entry/type">AttributeError</td>
- </tr>
- <tr>
-  <th align="left" valign="top">Exception Value</th>
-  <td tal:content="entry/value">zzope</td>
- </tr>
-</table>
-
-<div tal:condition="entry/tb_html" tal:content="structure entry/tb_html">
-Traceback (HTML)
-</div>
-
-<pre tal:condition="not:entry/tb_html" tal:content="entry/tb_text">
-Traceback (text)
-</pre>
-
-<p tal:condition="entry/tb_text"><a href="" tal:attributes="href
-   string:showTextTBEntry.html?id=${entry/id}">Display
-   traceback as text</a></p>
+<div metal:fill-slot="body"
+     tal:define="entry python:context.getLogEntryById(request.get('id'))">
 
+  <h1 i18n:translate="">Header</h1>
 
+  <h3 i18n:translate="">Exception traceback</h3>
 
-<div tal:condition="entry/req_html">
-<h3>REQUEST</h3>
-<hr />
-<div tal:replace="structure entry/req_html"></div>
-</div>
+  <em tal:condition="not:entry">
+    The specified log entry was not found.  It may have expired.
+  </em>
 
-</div>
+  <div tal:condition="entry">
+
+    <div class="row">
+      <div class="label" i18n:translate="">Time</div>
+      <div class="field" tal:content="entry/time">Time</div>
+    </div>
+
+    <div class="row">
+      <div class="label" i18n:translate="">User</div>
+      <div class="field" tal:content="entry/username">joe</div>
+    </div>
+
+    <div class="row">
+      <div class="label" i18n:translate="">Request URL</div>
+      <div class="field" tal:content="entry/url">http://zeomega.com</div>
+    </div>
+
+    <div class="row">
+      <div class="label" i18n:translate="">Exception Type</div>
+      <div class="field" tal:content="entry/type">AttributeError</div>
+    </div>
+
+    <div class="row">
+      <div class="label" i18n:translate="">Exception Value</div>
+      <div class="field" tal:content="entry/value">zzope</div>
+    </div>
+
+    <div class="row">
+      <div class="label" i18n:translate="">Traceback</div>
+      <div class="field">&nbsp;</div>
+    </div>
+    <br/>
+
+    <div tal:condition="entry/tb_html" tal:content="structure entry/tb_html">
+      Traceback (HTML)
+    </div>
+
+    <pre tal:condition="not:entry/tb_html" tal:content="entry/tb_text">
+      Traceback (text)
+    </pre>
+
+    <p tal:condition="entry/tb_text">
+      <a href="" 
+         tal:attributes="href string:showTextTBEntry.html?id=${entry/id}" 
+         i18n:translate="">Display traceback as text</a>
+    </p>
+
+
+    <div tal:condition="entry/req_html">
+
+      <h3 i18n:translate="">REQUEST</h3>
+
+      <div tal:replace="structure entry/req_html"></div>
+
+    </div>
+
+  </div>
 
-<div>
   <form action="index.html" method="get">
-    <input type="submit" name="submit" value=" Return to log " />
+    <div class="row">
+      <div class="controls">
+        <input type="submit" name="submit" value="Return to log" 
+                i18n:attributes="value return-to-log-button" />
+        </div>
+    </div>
   </form>
-</div>
 
-</div>
 </div>
 </body>
 </html>


=== Zope3/src/zope/app/browser/services/event.py 1.3 => 1.4 ===
--- Zope3/src/zope/app/browser/services/event.py:1.3	Mon Dec 30 09:02:54 2002
+++ Zope3/src/zope/app/browser/services/event.py	Thu Aug  7 13:41:03 2003
@@ -11,20 +11,17 @@
 # FOR A PARTICULAR PURPOSE.
 #
 ##############################################################################
-""" Define view component for event service control.
+"""Define view component for event service control.
 
 $Id$
 """
-
-from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile
 from zope.app.interfaces.services.event import IEventService
-from zope.publisher.browser import BrowserView
-
 
-class Control(BrowserView):
+class Control:
     __used_for__ = IEventService
 
-    def index(self):
-        return self.__control()
+    # XXX: Really needed? Currently it does nothing (obviously). I guess it is
+    # just a placeholder for later functionality.
 
-    __control = ViewPageTemplateFile("eventcontrol.pt")
+    # This view should be responsible to display all the objects that are
+    # subscribed to it and maybe even a log of the last events it handeled.


=== Zope3/src/zope/app/browser/services/eventcontrol.pt 1.3 => 1.4 ===
--- Zope3/src/zope/app/browser/services/eventcontrol.pt:1.3	Mon Dec 30 09:02:54 2002
+++ Zope3/src/zope/app/browser/services/eventcontrol.pt	Thu Aug  7 13:41:03 2003
@@ -1,24 +1,9 @@
 <html metal:use-macro="views/standard_macros/page">
-<head>
-<style metal:fill-slot="headers" type="text/css">
-<!--
-.ContentListing {
-    width: 100%;
-}
-
-.ContentIcon {
-    width: 20px;
-}
-
-.ContentTitle {
-    text-align: left;
-}
--->
-</style>
-</head>
 <body>
 <div metal:fill-slot="body">
-<p>This is an event service.</p>
+
+  <p i18n:translate="">This is an event service.</p>
+
 </div>
 </body>
 </html>


=== Zope3/src/zope/app/browser/services/field.py 1.11 => 1.12 ===
--- Zope3/src/zope/app/browser/services/field.py:1.11	Mon Jun 30 12:23:33 2003
+++ Zope3/src/zope/app/browser/services/field.py	Thu Aug  7 13:41:03 2003
@@ -15,17 +15,14 @@
 
 $Id$
 """
-__metaclass__ = type
+from xml.sax.saxutils import quoteattr
 
 from zope.app.browser.form.widget import BrowserWidget
-from zope.app.interfaces.browser.form import IBrowserWidget
+from zope.app.traversing import traverse
 from zope.component import getServiceManager, getView
-from zope.app.form.widget import Widget
-from zope.publisher.browser import BrowserView
-from xml.sax.saxutils import quoteattr
-from zope.app.interfaces.form import WidgetInputError
-from zope.app.traversing import traverse, canonicalPath
-from zope.interface import implements
+
+__metaclass__ = type
+
 
 class ComponentPathWidget(BrowserWidget):
 
@@ -45,6 +42,7 @@
         return renderPathSelect(field.context, field.type,
                                 self.name, selected)
 
+
 class ComponentPathDisplayWidget(ComponentPathWidget):
 
     def __call__(self):
@@ -54,6 +52,7 @@
         url = str(getView(ob, 'absolute_url', self.request))
         url += "/@@SelectedManagementView.html"
         return '<a href="%s">%s</a>' % (url, path)
+
 
 def renderPathSelect(context, type, name, selected, empty_message=''):
     service_manager = getServiceManager(context)


=== Zope3/src/zope/app/browser/services/hub.py 1.3 => 1.4 ===
--- Zope3/src/zope/app/browser/services/hub.py:1.3	Mon Dec 30 09:02:54 2002
+++ Zope3/src/zope/app/browser/services/hub.py	Thu Aug  7 13:41:03 2003
@@ -11,20 +11,14 @@
 # FOR A PARTICULAR PURPOSE.
 #
 ##############################################################################
-""" Define view component for object hub.
+"""Define view component for object hub.
 
 $Id$
 """
-
 from zope.app.interfaces.services.hub import IObjectHub
-from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile
-from zope.publisher.browser import BrowserView
-
 
-class Control(BrowserView):
+class Control:
     __used_for__ = IObjectHub
 
-    def index(self):
-        return self.__control()
-
-    __control = ViewPageTemplateFile("hubcontrol.pt")
+    # XXX: Another dead chicken. Guys, this view could do soo much, like aehm,
+    # display the cataloged objects with a nice filter function?


=== Zope3/src/zope/app/browser/services/hubcontrol.pt 1.4 => 1.5 ===
--- Zope3/src/zope/app/browser/services/hubcontrol.pt:1.4	Thu Aug  7 11:32:44 2003
+++ Zope3/src/zope/app/browser/services/hubcontrol.pt	Thu Aug  7 13:41:03 2003
@@ -1,32 +1,26 @@
 <html metal:use-macro="views/standard_macros/page">
-<head>
-<style metal:fill-slot="headers" type="text/css">
-<!--
-.ContentListing {
-    width: 100%;
-}
-
-.ContentIcon {
-    width: 20px;
-}
-
-.ContentTitle {
-    text-align: left;
-}
--->
-</style>
-</head>
 <body>
 <div metal:fill-slot="body">
-<div class="message" tal:condition="request/unregister_missing|nothing">
-  <span tal:replace="context/unregisterMissingObjects">5</span> object(s) unregistered.
-</div>
-<p>This is an object hub. There are <span tal:replace="context/numRegistrations">
-(some number of)</span> objects registered.
-</p>
-<form>
-<input type="submit" name="unregister_missing" value="Unregister Missing Objects" />
-</form>
+
+  <div class="message" tal:condition="request/unregister_missing|nothing"
+       i18n:translate="">
+    <span tal:replace="context/unregisterMissingObjects"
+          i18n:name="missing_num">5</span> object(s) unregistered.
+  </div>
+
+  <p i18n:translate="">
+    This is an object hub.  There are 
+    <span tal:replace="context/numRegistrations" 
+          i18n:name="num_objects">42</span>
+    objects registered.
+  </p>
+
+  <form>
+    <input type="submit" name="unregister_missing" 
+           value="Unregister Missing Objects" 
+           i18n:attributes="value"/>
+  </form>
+
 </div>
 </body>
 </html>


=== Zope3/src/zope/app/browser/services/pagefolder.py 1.2 => 1.3 ===
--- Zope3/src/zope/app/browser/services/pagefolder.py:1.2	Wed Jul  2 18:10:59 2003
+++ Zope3/src/zope/app/browser/services/pagefolder.py	Thu Aug  7 13:41:03 2003
@@ -13,15 +13,14 @@
 ##############################################################################
 """
 
-Revision information: $Id$
+$Id$
 """
 from zope.app.interfaces.services.pagefolder import IPageFolder
 
 class PageFolderDefaultConfiguration:
 
     def changed(self):
-        """Apply changes to existing configurations
-        """
+        """Apply changes to existing configurations"""
         __used_for__ = IPageFolder
 
         folder = self.context


=== Zope3/src/zope/app/browser/services/pagefolder.zcml 1.3 => 1.4 ===
--- Zope3/src/zope/app/browser/services/pagefolder.zcml:1.3	Sun Aug  3 13:49:27 2003
+++ Zope3/src/zope/app/browser/services/pagefolder.zcml	Thu Aug  7 13:41:03 2003
@@ -1,26 +1,20 @@
-<configure
-    xmlns='http://namespaces.zope.org/browser'
-    i18n_domain='zope'
-    >
+<configure xmlns="http://namespaces.zope.org/browser">
 
 <!-- PageFolder -->
 
-  <page name="index.html" 
-
-        for="zope.app.interfaces.services.pagefolder.IPageFolder"
-        permission="zope.ManageServices" 
-        class="zope.app.browser.container.contents.JustContents"
-        attribute="index" 
-        />
+  <page 
+      name="index.html" 
+      for="zope.app.interfaces.services.pagefolder.IPageFolder"
+      permission="zope.ManageServices" 
+      class="zope.app.browser.container.contents.JustContents"
+      attribute="index" />
 
   <page name="contents.html"
         for="zope.app.interfaces.services.pagefolder.IPageFolder"
         permission="zope.ManageServices" 
         class="zope.app.browser.container.contents.Contents"
-        menu="zmi_views"
-        title="Contents"
-        attribute="contents"
-        />
+        menu="zmi_views" title="Contents"
+        attribute="contents" />
 
   <editform
         name="DefaultRegistration.html"
@@ -28,8 +22,7 @@
         schema="zope.app.interfaces.services.pagefolder.IPageFolderInfo"
         menu="zmi_views" title="Default Registration"
         permission="zope.ManageServices"
-        class=".pagefolder.PageFolderDefaultConfiguration"
-        />
+        class=".pagefolder.PageFolderDefaultConfiguration" />
 
   
   <!-- Override the add action with a link to add a template -->
@@ -38,8 +31,7 @@
      for="zope.app.interfaces.services.pagefolder.IPageFolder"
      title="Add"
      action="contents.html?type_name=zope.app.services.zpt.template"
-     permission="zope.ManageServices"
-     />
+     permission="zope.ManageServices" />
 
   <menuItem
      menu="add_component"


=== Zope3/src/zope/app/browser/services/role.py 1.2 => 1.3 ===
--- Zope3/src/zope/app/browser/services/role.py:1.2	Wed Dec 25 09:12:36 2002
+++ Zope3/src/zope/app/browser/services/role.py	Thu Aug  7 13:41:03 2003
@@ -1,11 +1,25 @@
-from zope.publisher.browser import BrowserView
-from zope.app.services.role import Role
-from zope.app.services.role import ILocalRoleService
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+""" Define view component for service manager contents.
 
+$Id$
+"""
+from zope.app.browser.container.contents import Contents
+from zope.app.services.role import Role, ILocalRoleService
 
-class Add(BrowserView):
+class Add:
     "Provide a user interface for adding a contact"
-
     __used_for__ = ILocalRoleService
 
     def action(self, id, title, description):
@@ -15,13 +29,6 @@
         self.request.response.redirect('.')
 
 
-
-""" Define view component for service manager contents.
-
-$Id$
-"""
-
-from zope.app.browser.container.contents import Contents
-
 class Contents(Contents):
+    # XXX: What the heck is that? I guess another dead chicken.
     pass


=== Zope3/src/zope/app/browser/services/service.py 1.33 => 1.34 ===
--- Zope3/src/zope/app/browser/services/service.py:1.33	Sat Jun 21 17:45:03 2003
+++ Zope3/src/zope/app/browser/services/service.py	Thu Aug  7 13:41:03 2003
@@ -18,6 +18,7 @@
 from zope.app import zapi
 from zope.app.browser.container.adding import Adding
 from zope.app.browser.container.contents import Contents
+from zope.app.i18n import ZopeMessageIDFactory as _
 from zope.app.interfaces.container import IZopeContainer
 from zope.app.interfaces.services.registration import ActiveStatus
 from zope.app.interfaces.services.registration import RegisteredStatus
@@ -184,9 +185,11 @@
                 obj.status = ActiveStatus
                 done.append(name)
         if done:
-            return "Activated: " + ", ".join(done)
+            s = _("Activated: ${activated_services}")
+            s.mapping = {'activated_services': ", ".join(done)}
+            return s
         else:
-            return "All of the checked services were already active"
+            return _("All of the checked services were already active")
 
     def _deactivate(self, todo):
         done = []
@@ -197,9 +200,11 @@
                 obj.status = RegisteredStatus
                 done.append(name)
         if done:
-            return "Deactivated: " + ", ".join(done)
+            s = _("Deactivated: ${deactivated_services}")
+            s.mapping = {'deactivated_services': ", ".join(done)}
+            return s
         else:
-            return "None of the checked services were active"
+            return _("None of the checked services were active")
 
     def _delete(self, todo):
         errors = []
@@ -210,9 +215,10 @@
                 errors.append(name)
                 continue
         if errors:
-            return ("Can't delete active service%s: %s; "
-                    "use the Deactivate button to deactivate" %
-                    (len(errors) != 1 and "s" or "", ", ".join(errors)))
+            s = _("Can't delete active service(s): ${service_names}; "
+                  "use the Deactivate button to deactivate")
+            s.mapping = {'service_names': ", ".join(errors)}
+            return s
 
         # 1) Delete the registrations
         services = {}
@@ -245,7 +251,9 @@
             container = zapi.getAdapter(parent, IZopeContainer)
             del container[name]
 
-        return "Deleted: %s" % ", ".join(todo)
+        s = _("Deleted: ${service_names}")
+        s.mapping = {'service_names': ", ".join(todo)}
+        return s
 
     def listConfiguredServices(self):
         names = list(self.context.listRegistrationNames())
@@ -325,19 +333,20 @@
         sm = zapi.getServiceManager(self.context)
         registry = sm.queryRegistrations(self.request.get('type'))
         if not registry:
-            return "Invalid service type specified"
+            return _("Invalid service type specified")
         old_active = registry.active()
         if active == "None":
             new_active = None
         else:
             new_active = zapi.traverse(sm, active)
         if old_active == new_active:
-            return "No change"
+            return _("No change")
 
         if new_active is None:
             registry.activate(None)
-            return "Service deactivated"
+            return _("Service deactivated")
         else:
             new_active.status = ActiveStatus
-            return active + " activated"
-
+            s = "${active_services} activated"
+            s.mapping = {'active_services': active}
+            return s


=== Zope3/src/zope/app/browser/services/serviceactivation.pt 1.9 => 1.10 ===
--- Zope3/src/zope/app/browser/services/serviceactivation.pt:1.9	Wed Jun 25 18:14:26 2003
+++ Zope3/src/zope/app/browser/services/serviceactivation.pt	Thu Aug  7 13:41:03 2003
@@ -3,18 +3,15 @@
 <tal:block
     metal:fill-slot="headers"
     tal:define="global pagetip string:
-
     To activate a particular service implementation,
     check its radio button and click Update.
-
-    "
-    />
-
+    "/>
 
 <div metal:fill-slot="body">
 
-  <h2>Registrations for service
-    <i tal:content="request/type|default">No service type specified</i>
+  <h2 i18n:translate="">Registrations for service
+    <i tal:content="request/type|default" i18n:name="service_type"
+       i18n:translate="">No service type specified</i>
   </h2>
 
   <p tal:content="view/update">Message from update() goes here</p>
@@ -24,9 +21,10 @@
     <table tal:define="registry view/listRegistry">
 
       <thead>
-        <tr> <td></td> 
-             <th align="left">Service</th> 
-             <th align="left">Registration</th>
+        <tr> 
+          <td></td> 
+          <th align="left" i18n:translate="">Service</th> 
+          <th align="left" i18n:translate="">Registration</th>
         </tr>
       </thead>
 
@@ -53,7 +51,8 @@
 
     <input type="hidden" name="type" value="Events"
            tal:attributes="value request/type|nothing" />
-    <input type="submit" value="Submit" />
+    <input type="submit" value="Submit" 
+           i18n:attributes="value submit-button" />
 
   </form>
 


=== Zope3/src/zope/app/browser/services/services.pt 1.12 => 1.13 ===
--- Zope3/src/zope/app/browser/services/services.pt:1.12	Sat Jul 12 23:20:04 2003
+++ Zope3/src/zope/app/browser/services/services.pt	Thu Aug  7 13:41:03 2003
@@ -1,74 +1,78 @@
 <html metal:use-macro="views/standard_macros/page">
-
-<tal:block metal:fill-slot="headers" />
-
+<body>
 <div metal:fill-slot="body">
 
-  <h2>
+  <h2 i18n:translate="">
     Services registered in this service manager
   </h2>
 
   <div tal:define="message view/update;
                    registries view/listConfiguredServices">
 
-      <div class="message" tal:condition="message">
-         <span tal:replace="message">view/update message here</span>
-         <br /><br /><i><a href="">(click to clear message)</a></i>
-      </div>
-
-      <p tal:condition="not:registries">No services are registered.</p>
-
-      <div tal:condition="registries">
-        <p>Unless a service is disabled, the service name
-           links to the active service.  The (change registration)
-           link allows activating a different implementation or
-           disabling the service altogether.
-        </p>
-
-        <form method="POST" action="services.html">
-
-          <table>
-            <tr tal:repeat="reg registries">
-              <td><input type="checkbox" name="selected:list"
-                         tal:attributes="value reg/name" /></td>
-              <td>
-                <a href="(link to the active service)"
-                   tal:condition="reg/url"
-                   tal:attributes= "href reg/url"
-                   tal:content="reg/name">
-                  Foobar (the service type)
-                </a>
-                <span tal:condition="not:reg/url">
-                  <span tal:content="reg/name" />
-                (disabled)</span>
-              </td>
-              <td>
-                <a href="xxx"
-                   tal:attributes=
-                   "href string:@@serviceActivation.html?type=${reg/name}"
-                   >
-                  (change registration)
-                </a>
-              </td>
-            </tr>
-          </table>
-
-          <input type="submit" name="Activate" value="Activate" />
-          <input type="submit" name="Deactivate" value="Deactivate" />
-          &nbsp;
-          <input type="submit" name="Delete" value="Delete" />
-          &nbsp;
-          <input type="submit" name="Refresh" value="Refresh" />
+    <div class="message" tal:condition="message">
+       <span tal:replace="message">view/update message here</span>
+       <br /><br />
+       <i><a href="" i18n:translate="">(click to clear message)</a></i>
+    </div>
+    
+    <p tal:condition="not:registries" i18n:translate="">
+      No services are registered.
+    </p>
+    
+    <div tal:condition="registries">
+      <p i18n:translate="">
+         Unless a service is disabled, the service name
+         links to the active service.  The (change registration)
+         link allows activating a different implementation or
+         disabling the service altogether.
+      </p>
+    
+      <form method="POST" action="services.html">
+    
+        <table>
+          <tr tal:repeat="reg registries">
+            <td><input type="checkbox" name="selected:list"
+                       tal:attributes="value reg/name" /></td>
+            <td>
+              <a href="(link to the active service)"
+                 tal:condition="reg/url"
+                 tal:attributes= "href reg/url"
+                 tal:content="reg/name">
+                Foobar (the service type)
+              </a>
+              <span tal:condition="not:reg/url">
+                <span tal:content="reg/name" />(disabled)</span>
+            </td>
+            <td>
+              <a href="xxx"
+                 tal:attributes=
+                 "href string:@@serviceActivation.html?type=${reg/name}"
+                 i18n:translate="">
+                (change registration)
+              </a>
+            </td>
+          </tr>
+        </table>
+
+        <input type="submit" name="Activate" value="Activate" 
+               i18n:attributes="value activate-button"/>
+        <input type="submit" name="Deactivate" value="Deactivate"
+               i18n:attributes="value deactivate-button"/>
+        &nbsp;
+        <input type="submit" name="Delete" value="Delete"
+               i18n:attributes="value delete-button"/>
+        &nbsp;
+        <input type="submit" name="Refresh" value="Refresh"
+               i18n:attributes="value refresh-button"/>
 
-        </form>
+      </form>
 
-        <p><a href="default/AddService">Add a service to this service
-           manager</a></p>
-
-      </div>
+      <p><a href="default/AddService" i18n:translate="">
+        Add a service to this service manager</a></p>
 
+    </div>
   </div>
 
 </div>
-
+</body>
 </html>


=== Zope3/src/zope/app/browser/services/subscription_control.pt 1.1 => 1.2 ===
--- Zope3/src/zope/app/browser/services/subscription_control.pt:1.1	Fri Jul 11 01:50:30 2003
+++ Zope3/src/zope/app/browser/services/subscription_control.pt	Thu Aug  7 13:41:03 2003
@@ -1,46 +1,45 @@
 <html metal:use-macro="views/standard_macros/page">
+<head>
+  <title metal:fill-slot="title" i18n:translate="">
+    Registration "Service" Control Page
+  </title>
+</head>
 
-  <head>
-    <title>Registration "Service" Control Page</title>
-  </head>
+<body>
+<div metal:fill-slot="body">
 
-  <body>
-
-  <div metal:fill-slot="body">
-
-    <h1>Subscription control</h1>
+    <h1 i18n:translate="">Subscription control</h1>
 
+    <!-- XXX: Too much logic for a simple template! -->
     <span tal:condition="request/callSubscribe|nothing" tal:omit-tag="">
-        <span tal:define="dummy context/subscribe" tal:omit-tag=""/>
-        Successfully subscribed.
+      <span tal:define="dummy context/subscribe" tal:omit-tag=""/>
+      <span i18n:translate="">Successfully subscribed.</span>
     </span>
     <span tal:condition="request/callUnsubscribe|nothing" tal:omit-tag="">
-        <span tal:define="dummy context/unsubscribe" tal:omit-tag=""/>
-        Successfully unsubscribed.
+      <span tal:define="dummy context/unsubscribe" tal:omit-tag=""/>
+      <span i18n:translate="">Successfully unsubscribed.</span>
     </span>
     <span tal:condition="request/callRegisterExisting|nothing" tal:omit-tag="">
-        <span tal:define="dummy context/registerExisting" tal:omit-tag=""/>
-        Registration done.
+      <span tal:define="dummy context/registerExisting" tal:omit-tag=""/>
+      <span i18n:translate="">Registration done.</span>
     </span>
 
     <form action="" method="post">
        <span tal:condition="context/isSubscribed" tal:omit-tag="">
-           Subscription state: ON
-           <input type="submit" value="Unsubscribe" name="callUnsubscribe" />
+         <span i18n:translate="">Subscription state: ON</span>
+         <input type="submit" value="Unsubscribe" name="callUnsubscribe" />
        </span>
        <span tal:condition="not:context/isSubscribed" tal:omit-tag="">
-           Subscription state: OFF
-           <input type="submit" value="Subscribe" name="callSubscribe" />
+         <span i18n:translate="">Subscription state: OFF</span>
+         <input type="submit" value="Subscribe" name="callSubscribe" />
        </span>
     </form>
 
     <form action="" method="post">
         <input type="submit" value="Register Existing Objects"
-               name="callRegisterExisting" />
+               name="callRegisterExisting" i18n:attributes="value"/>
     </form>
 
-  </div>
-
-  </body>
-
+</div>
+</body>
 </html>


=== Zope3/src/zope/app/browser/services/view.py 1.21 => 1.22 ===
--- Zope3/src/zope/app/browser/services/view.py:1.21	Sat Jun 21 17:50:15 2003
+++ Zope3/src/zope/app/browser/services/view.py	Thu Aug  7 13:41:03 2003
@@ -15,45 +15,47 @@
 
 $Id$
 """
-__metaclass__ = type
-
 import md5
 
-from zope.interface import Interface
-from zope.schema import TextLine, BytesLine
-from zope.component.interfaces import IPresentation
-from zope.component import getAdapter, getServiceManager, getView
-from zope.app.context import ContextWrapper
-from zope.publisher.browser import BrowserView
 
 from zope.app.component.interfacefield import InterfaceField
+from zope.app.context import ContextWrapper
 from zope.app.form.utility import setUpWidgets
+from zope.app.i18n import ZopeMessageIDFactory as _
 from zope.app.interfaces.container import IZopeContainer
 from zope.app.interfaces.services.registration import ActiveStatus
 from zope.app.interfaces.services.registration import RegisteredStatus
 from zope.app.interfaces.services.registration import UnregisteredStatus
 from zope.app.traversing import getPath, getParent, getName
+from zope.component import getAdapter, getServiceManager, getView
+from zope.component.interfaces import IPresentation
+from zope.interface import Interface
+from zope.schema import TextLine, BytesLine
+
+__metaclass__ = type
+
 
 class IViewSearch(Interface):
 
-    forInterface = InterfaceField(title=u"For interface",
-                                  required=False,
-                                  )
-    presentationType = InterfaceField(title=u"Presentation interface",
-                                      required=False,
-                                      basetype=IPresentation
-                                      )
-
-    viewName = TextLine(title=u'View name',
-                        required=False,
-                        )
-
-    layer = BytesLine(title=u'Layer',
-                      required=False,
-                      )
+    forInterface = InterfaceField(
+        title=u"For interface",
+        required=False)
 
+    presentationType = InterfaceField(
+        title=u"Presentation interface",
+        required=False,
+        basetype=IPresentation)
 
-class _SharedBase(BrowserView):
+    viewName = TextLine(
+        title=u'View name',
+        required=False)
+
+    layer = BytesLine(
+        title=u'Layer',
+        required=False)
+
+
+class _SharedBase:
 
     def _getRegistryFromKey(self, key):
         values = key.split(":")
@@ -124,9 +126,11 @@
                 obj.status = ActiveStatus
                 done.append(self._getSummaryFromRegistry(registry))
         if done:
-            return "Activated: " + ", ".join(done)
+            s = _("Activated: ${activated_views}")
+            s.mapping = {'activated_views': ", ".join(done)}
+            return s
         else:
-            return "All of the checked views were already active"
+            return _("All of the checked views were already active")
 
     def _deactivate(self, todo):
         done = []
@@ -137,9 +141,11 @@
                 obj.status = RegisteredStatus
                 done.append(self._getSummaryFromRegistry(registry))
         if done:
-            return "Deactivated: " + ", ".join(done)
+            s = _("Deactivated: ${deactivated_views}")
+            s.mapping = {'deactivated_views': ", ".join(done)}
+            return s
         else:
-            return "None of the checked views were active"
+            return _("None of the checked views were active")
 
     def _delete(self, todo):
         errors = []
@@ -153,9 +159,10 @@
                 continue
             registries.append(registry)
         if errors:
-            return ("Can't delete active page%s: %s; "
-                    "use the Deactivate button to deactivate" %
-                    (len(errors) != 1 and "s" or "", ", ".join(errors)))
+            s = _("Can't delete active view(s): ${view_names}; "
+                  "use the Deactivate button to deactivate")
+            s.mapping = {'view_names': ", ".join(errors)}
+            return s
 
         # Now delete the registrations
         done = []
@@ -171,7 +178,9 @@
                 container = getAdapter(parent, IZopeContainer)
                 del container[name]
 
-        return "Deleted: %s" % ", ".join(done)
+        s = _("Deleted: ${cache_names}")
+        s.mapping = {'cache_names': ", ".join(todo)}
+        return s
 
     def configInfo(self):
         """Do a search, or (by default) return all view pages."""
@@ -236,8 +245,7 @@
 
         return result
 
-class PageRegistrationView(BrowserView):
-
+class PageRegistrationView:
     """Helper class for the page edit form."""
 
     def update(self):


=== Zope3/src/zope/app/browser/services/view.zcml 1.5 => 1.6 ===
--- Zope3/src/zope/app/browser/services/view.zcml:1.5	Sun Aug  3 13:49:27 2003
+++ Zope3/src/zope/app/browser/services/view.zcml	Thu Aug  7 13:41:03 2003
@@ -1,7 +1,4 @@
-<configure
-    xmlns='http://namespaces.zope.org/browser'
-    i18n_domain='zope'
-    >
+<configure xmlns="http://namespaces.zope.org/browser">
 
 <!-- View service -->
 
@@ -11,15 +8,13 @@
       template="views.pt"
       permission="zope.ManageServices" 
       class="zope.app.browser.services.view.ViewServiceView"
-      menu="zmi_views" title="Views"
-      />
+      menu="zmi_views" title="Views" />
 
   <menuItem
       for="zope.app.interfaces.container.IAdding"
       menu="add_service"
       action="zope.app.services.ViewService"
-      title="View Service"
-      />
+      title="View Service" />
 
 <!-- View pages -->
 
@@ -28,8 +23,7 @@
       name="configureView.html"
       template="configureView.pt"
       class=".view.ConfigureView"
-      permission="zope.ManageServices"
-      />
+      permission="zope.ManageServices" />
 
   <editform
     schema="zope.app.interfaces.services.view.IPageRegistration"
@@ -37,8 +31,7 @@
     class=".view.PageRegistrationView"
     menu="zmi_views"
     label="Change page"
-    permission="zope.ManageServices"
-    />
+    permission="zope.ManageServices" />
 
   <addform
       schema="zope.app.interfaces.services.view.IPageRegistration"
@@ -49,8 +42,7 @@
       label="Register a view page"
       permission="zope.ManageServices"
       fields="forInterface viewName
-              template class_ layer permission status"
-      />
+              template class_ layer permission status" />
 
 <!-- XXX Jim says view configuration doesn't work and aren't well thought out.
      So I'm commenting it out for now.
@@ -64,8 +56,7 @@
     name="edit.html"
     menu="zmi_views"
     label="Change view"
-    permission="zope.ManageServices"
-    />
+    permission="zope.ManageServices" />
 
   <addform
       schema="zope.app.interfaces.services.view.IViewRegistration"
@@ -77,15 +68,13 @@
       label="Register a view" 
       permission="zope.ManageServices" 
       fields="forInterface viewName presentationType
-              class_ layer permission status"
-      />
+              class_ layer permission status" />
 
   <menuItem
       for="zope.app.interfaces.container.IAdding"
       menu="add_registration"
       action="ViewRegistration"
-      title="View"
-      />
+      title="View" />
 
 -->
 


=== Zope3/src/zope/app/browser/services/views.pt 1.7 => 1.8 ===
--- Zope3/src/zope/app/browser/services/views.pt:1.7	Fri Jun 27 06:56:39 2003
+++ Zope3/src/zope/app/browser/services/views.pt	Thu Aug  7 13:41:03 2003
@@ -1,57 +1,63 @@
 <html metal:use-macro="context/@@standard_macros/page">
-
+<body>
 <div metal:fill-slot="body"
-     tal:define="message view/update; configs view/configInfo"
-     >
-
-<h2>Pages registered in this views service:</h2>
-
-      <div class="message" tal:condition="message">
-         <span tal:replace="message">view/update message here</span>
-         <br /><br /><i><a href="">(click to clear message)</a></i>
-      </div>
+     tal:define="message view/update; configs view/configInfo">
 
-<p tal:condition="not:configs">None</p>
+  <h2 i18n:translate="">Pages registered in this views service:</h2>
 
-<form method="POST" action="index.html" tal:condition="configs">
+  <div class="message" tal:condition="message">
+    <span tal:replace="message">view/update message here</span>
+    <br /><br />
+    <i><a href="" i18n:translate="">(click to clear message)</a></i>
+  </div>
+
+  <p tal:condition="not:configs">None</p>
+
+  <form method="POST" action="index.html" tal:condition="configs">
+
+    <table>
+      <tbody>
+        <tr tal:repeat="config configs">
+          <td>
+            <input type="checkbox" name="selected:list"
+                   tal:attributes="value config/key" />
+            <br />
+          </td>
+          <td>
+            <a tal:condition="config/url" tal:attributes="href config/url">
+              <span tal:replace="config/summary" />
+            </a>
+            <span tal:condition="not:config/url" tal:replace="config/summary" />
+          </td>
+          <td>
+            <a href="." tal:attributes="href config/configurl"
+               i18n:translate="">
+              (change registration)</a>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+
+    <input type="submit" name="Activate" value="Activate" 
+           i18n:attributes="value activate-button"/>
+    <input type="submit" name="Deactivate" value="Deactivate"
+           i18n:attributes="value deactivate-button"/>
+    &nbsp;
+    <input type="submit" name="Delete" value="Delete"
+           i18n:attributes="value delete-button"/>
+    &nbsp;
+    <input type="submit" name="Refresh" value="Refresh"
+           i18n:attributes="value refresh-button"/>
+
+  </form>
+
+  <p>
+    <a href="../RegistrationManager/@@+/PageRegistration=" i18n:translate="">
+    Add a page to this views service</a></p>
 
-  <table>
-    <tbody>
-      <tr tal:repeat="config configs">
-        <td>
-          <input type="checkbox" name="selected:list"
-                 tal:attributes="value config/key" />
-          <br />
-        </td>
-        <td>
-          <a tal:condition="config/url" tal:attributes="href config/url">
-            <span tal:replace="config/summary" />
-          </a>
-          <span tal:condition="not:config/url" tal:replace="config/summary" />
-        </td>
-        <td>
-          <a href="." tal:attributes="href config/configurl">
-            (change registration)</a>
-        </td>
-      </tr>
-    </tbody>
-  </table>
-
-  <input type="submit" name="Activate" value="Activate" />
-  <input type="submit" name="Deactivate" value="Deactivate" />
-  &nbsp;
-  <input type="submit" name="Delete" value="Delete" />
-  &nbsp;
-  <input type="submit" name="Refresh" value="Refresh" />
+  <h3 i18n:translate="">Search filter:</h3>
 
-</form>
-
-<p><a href="../RegistrationManager/@@+/PageRegistration=">
-Add a page to this views service</a></p>
-
-<h3>Search filter:</h3>
-
-<form action="." method="GET">
+  <form action="." method="GET">
     <div class="row" 
          tal:content="structure view/forInterface_widget/row" 
          />
@@ -62,12 +68,14 @@
          />
     -->
     <div class="row">
-    <div class="controls"> 
-         <input type="submit" value="Refresh" />
-         <input type="submit" value="Search" name="SEARCH" />
-     </div>
+      <div class="controls"> 
+        <input type="submit" value="Refresh"
+               i18n:attributes="value refresh-button"/>
+        <input type="submit" value="Search" name="SEARCH"
+               i18n:attributes="value search-button"/>
+      </div>
     </div>
-</form>
+  </form>
 
 </div>
 


=== Zope3/src/zope/app/browser/services/zpt.py 1.2 => 1.3 ===
--- Zope3/src/zope/app/browser/services/zpt.py:1.2	Wed Dec 25 09:12:36 2002
+++ Zope3/src/zope/app/browser/services/zpt.py	Thu Aug  7 13:41:03 2003
@@ -11,17 +11,13 @@
 # FOR A PARTICULAR PURPOSE.
 #
 ##############################################################################
-"""XXX short summary goes here.
-
-XXX longer description goes here.
+"""ZPT View Classes
 
 $Id$
 """
-from zope.publisher.browser import BrowserView
-
 __metaclass__ = type
 
-class Source(BrowserView):
+class Source:
 
     def __call__(self):
         self.request.response.setHeader('content-type',

=== Removed File Zope3/src/zope/app/browser/services/auth.pt ===




More information about the Zope3-Checkins mailing list