[open-ils-commits] SPAM: r9844 - in trunk/Open-ILS: web/opac/locale/en-US xul/staff_client/server/locale/en-US xul/staff_client/server/patron

svn at svn.open-ils.org svn at svn.open-ils.org
Tue Jun 17 14:07:48 EDT 2008


Author: dbs
Date: 2008-06-17 14:07:45 -0400 (Tue, 17 Jun 2008)
New Revision: 9844

Added:
   trunk/Open-ILS/xul/staff_client/server/locale/en-US/patron.properties
Modified:
   trunk/Open-ILS/web/opac/locale/en-US/lang.dtd
   trunk/Open-ILS/xul/staff_client/server/patron/barcode_entry.xul
   trunk/Open-ILS/xul/staff_client/server/patron/bill_cc_info.xul
   trunk/Open-ILS/xul/staff_client/server/patron/bill_check_info.xul
   trunk/Open-ILS/xul/staff_client/server/patron/bill_details.xul
   trunk/Open-ILS/xul/staff_client/server/patron/bill_history.xul
   trunk/Open-ILS/xul/staff_client/server/patron/bill_summary_overlay.xul
   trunk/Open-ILS/xul/staff_client/server/patron/bill_wizard.xul
   trunk/Open-ILS/xul/staff_client/server/patron/bills.js
   trunk/Open-ILS/xul/staff_client/server/patron/bills.xul
   trunk/Open-ILS/xul/staff_client/server/patron/bills_overlay.xul
   trunk/Open-ILS/xul/staff_client/server/patron/display.js
   trunk/Open-ILS/xul/staff_client/server/patron/display.xul
   trunk/Open-ILS/xul/staff_client/server/patron/display_overlay.xul
   trunk/Open-ILS/xul/staff_client/server/patron/hold_notices.xul
Log:
Apply Craig Ricciuto's patch to bring i18n to a number of patron interfaces


Modified: trunk/Open-ILS/web/opac/locale/en-US/lang.dtd
===================================================================
--- trunk/Open-ILS/web/opac/locale/en-US/lang.dtd	2008-06-17 12:47:28 UTC (rev 9843)
+++ trunk/Open-ILS/web/opac/locale/en-US/lang.dtd	2008-06-17 18:07:45 UTC (rev 9844)
@@ -2047,3 +2047,129 @@
 <!ENTITY staff.cat.z3950.marc_import_overlay.accesskey "O">
 <!ENTITY staff.cat.z3950.marc_import.label "MARC Editor for Import">
 <!ENTITY staff.cat.z3950.marc_import.accesskey "I">
+<!ENTITY staff.pat.barcode_entry.retrieve_patron.label "Retrieve Patron">
+<!ENTITY staff.pat.barcode_entry.barcode.label "Barcode:">
+<!ENTITY staff.pat.barcode_entry.barcode.accesskey "B">
+<!ENTITY staff.pat.barcode_entry.submit_btn.label "Submit">
+<!ENTITY staff.pat.barcode_entry.submit_btn.accesskey "S">
+<!ENTITY staff.pat.barcode_entry.retrieving.label "Retrieving...">
+<!ENTITY staff.patron.bill_cc_info.visa.label "Visa">
+<!ENTITY staff.patron.bill_cc_info.mastercard.label "Mastercard">
+<!ENTITY staff.patron.bill_cc_info.american_express.label "American Express">
+<!ENTITY staff.patron.bill_cc_info.discover.label "Discover">
+<!ENTITY staff.patron.bill_cc_info.other.label "Other">
+<!ENTITY staff.patron.bill_cc_info.cc_number.value "CC Number">
+<!ENTITY staff.patron.bill_cc_info.month_expire.value "Expire Month">
+<!ENTITY staff.patron.bill_cc_info.year_expire.value "Expire Year">
+<!ENTITY staff.patron.bill_cc_info.approval_code.value "Approval Code">
+<!ENTITY staff.patron.bill_cc_info.note.value "Note">
+<!ENTITY staff.patron.bill_cc_info.cancel.label "Cancel">
+<!ENTITY staff.patron.bill_cc_info.cancel.accesskey "C">
+<!ENTITY staff.patron.bill_cc_info.submit.label "Submit this Info">
+<!ENTITY staff.patron.bill_cc_info.submit.accesskey "S">
+<!ENTITY staff.patron.bill_check_info.check_info.label "Check Info">
+<!ENTITY staff.patron.bill_check_info.check_number.value "Check Number">
+<!ENTITY staff.patron.bill_check_info.note.value "Note">
+<!ENTITY staff.patron.bill_check_info.cancel.label "Cancel">
+<!ENTITY staff.patron.bill_check_info.cancel.accesskey "C">
+<!ENTITY staff.patron.bill_check_info.submit.label "Submit this Info">
+<!ENTITY staff.patron.bill_check_info.submit.accesskey "S">
+<!ENTITY staff.patron.bill_details.bills.label "Bills">
+<!ENTITY staff.patron.bill_details.save_columns.label "Save Columns">
+<!ENTITY staff.patron.bill_details.copy_to_clipboard.label "Copy to Clipboard">
+<!ENTITY staff.patron.bill_details.print_export.label "Print Export">
+<!ENTITY staff.patron.bill_details.void_selection.label "Void selected billings">
+<!ENTITY staff.patron.bill_details.payments.label "Payments">
+<!ENTITY staff.patron.bill_details.show_in_catalog.label "Show in Catalog">
+<!ENTITY staff.patron.bill_details.show_in_catalog.accesskey "S">
+<!ENTITY staff.patron.bill_details.close_window.label "Close Window">
+<!ENTITY staff.patron.bill_details.close_window.accesskey "c">
+<!ENTITY staff.patron.bill_history.caption.label "Bill History">
+<!ENTITY staff.patron.bill_history.add_billing.label "Add Billing">
+<!ENTITY staff.patron.bill_history.full_details.label "Full Details">
+<!ENTITY staff.patron.bill_history.full_details.accesskey "D">
+<!ENTITY staff.patron.bill_history.show_in_catalog.label "Show in Catalog">
+<!ENTITY staff.patron.bill_history.show_in_catalog.accesskey "S">
+<!ENTITY staff.patron.bill_history.print.label "Print">
+<!ENTITY staff.patron.bill_history.print.accesskey "P">
+<!ENTITY staff.patron.bill_history.close_window.label "Close Window">
+<!ENTITY staff.patron.bill_history.close_window.accesskey "c">
+<!ENTITY staff.patron.bills_overlay.still_checked_out.label "Red Items are still Checked Out">
+<!ENTITY staff.patron.bills_overlay.uncheck_all.label "Uncheck All">
+<!ENTITY staff.patron.bills_overlay.check_all.label "Check All">
+<!ENTITY staff.patron.bills_overlay.print_bills.label "Print Bills" >
+<!ENTITY staff.patron.bills_overlay.alternate_view.label "Alternate View">
+<!ENTITY staff.patron.bills_overlay.alternate_view.accesskey "V">
+<!ENTITY staff.patron.bills_overlay.summary.label "Summary">
+<!ENTITY staff.patron.bills_overlay.net_balance.value "Net Balance">
+<!ENTITY staff.patron.bills_overlay.payment_applied.value "- Payment applied">
+<!ENTITY staff.patron.bills_overlay.new_balance.value "= New Balance">
+<!ENTITY staff.patron.bills_overlay.pay_bill.label "Pay Bill">
+<!ENTITY staff.patron.bills_overlay.payment_type.value "Payment Type">
+<!ENTITY staff.patron.bills_overlay.payment_type.accesskey "t">
+<!ENTITY staff.patron.bills_overlay.cash.label "Cash">
+<!ENTITY staff.patron.bills_overlay.check.label "Check">
+<!ENTITY staff.patron.bills_overlay.credit_card.label "Credit Card">
+<!ENTITY staff.patron.bills_overlay.word.label "Work">
+<!ENTITY staff.patron.bills_overlay.forgive.label "Forgive">
+<!ENTITY staff.patron.bills_overlay.goods.label "Goods">
+<!ENTITY staff.patron.bills_overlay.payment_received.value "Payment received">
+<!ENTITY staff.patron.bills_overlay.payment_received.accesskey "a">
+<!ENTITY staff.patron.bills_overlay.payment_applied.value "- Payment applied">
+<!ENTITY staff.patron.bills_overlay.change.value "= Change">
+<!ENTITY staff.patron.bills_overlay.patron_credit.value "or Patron Credit">
+<!ENTITY staff.patron.bills_overlay.bill_patron.label "Bill Patron">
+<!ENTITY staff.patron.bills_overlay.bill_patron.accesskey "B">
+<!ENTITY staff.patron.bills_overlay.history.label "History">
+<!ENTITY staff.patron.bills_overlay.history.accesskey "H">
+<!ENTITY staff.patron.bills_overlay.annotate_payment.label "Annotate Payment">
+<!ENTITY staff.patron.bills_overlay.convert_change_to_credit.label "Convert Change to Patron Credit">
+<!ENTITY staff.patron.bills_overlay.apply_payment.label "Apply Payment!">
+<!ENTITY staff.patron.bills_overlay.apply_payment.accesskey "P">
+<!ENTITY staff.patron.bill_summary_overlay.bill_number.value "Bill #">
+<!ENTITY staff.patron.bill_summary_overlay.total_billed.value "Total Billed">
+<!ENTITY staff.patron.bill_summary_overlay.title.value "Title">
+<!ENTITY staff.patron.bill_summary_overlay.type.value "Type">
+<!ENTITY staff.patron.bill_summary_overlay.total_paid.value "Total Paid">
+<!ENTITY staff.patron.bill_summary_overlay.checked_out.value "Checked Out">
+<!ENTITY staff.patron.bill_summary_overlay.start.value "Start">
+<!ENTITY staff.patron.bill_summary_overlay.balance_owed.value "Balance Owed">
+<!ENTITY staff.patron.bill_summary_overlay.due_date.value "Due Date">
+<!ENTITY staff.patron.bill_summary_overlay.finish.value "Finish">
+<!ENTITY staff.patron.bill_summary_overlay.renewal.value "Renewal?">
+<!ENTITY staff.patron.bill_summary_overlay.checked_in.value "Checked In">
+<!ENTITY staff.patron.bill_wizard.create_bill.label "Create Bill">
+<!ENTITY staff.patron.bill_wizard.location.value "Location">
+<!ENTITY staff.patron.bill_wizard.transaction_type.value "Transaction Type">
+<!ENTITY staff.patron.bill_wizard.grocery.label "Grocery">
+<!ENTITY staff.patron.bill_wizard.circulation.label "Circulation">
+<!ENTITY staff.patron.bill_wizard.billing_type.label "Billing Type">
+<!ENTITY staff.patron.bill_wizard.amount.value "Amount">
+<!ENTITY staff.patron.bill_wizard.note.value "Note">
+<!ENTITY staff.patron.bill_wizard.cancel.label "Cancel">
+<!ENTITY staff.patron.bill_wizard.cancel.accesskey "C">
+<!ENTITY staff.patron.bill_wizard.submit.label "Submit this Bill">
+<!ENTITY staff.patron.bill_wizard.submit.accesskey "S">
+<!ENTITY staff.patron.display_overlay.none_selected.value "No Patron Selected">
+<!ENTITY staff.patron.display_overlay.barred.value "(Barred)">
+<!ENTITY staff.patron.display_overlay.expired.value "(Expired)">
+<!ENTITY staff.patron.display_overlay.inactive.value "(In-Active)">
+<!ENTITY staff.patron.display_overlay.juvenile.value "(Juvenile)">
+<!ENTITY staff.patron.display_overlay.alert.value "(Alert)">
+<!ENTITY staff.patron.display_overlay.see_notes.value "(See Notes)">
+<!ENTITY staff.patron.display_overlay.max_bills.value "(Max Bills)">
+<!ENTITY staff.patron.display_overlay.max_overdues.value "(Max Overdues)">
+<!ENTITY staff.patron.display_overlay.has_bills.value "(Has Bills)">
+<!ENTITY staff.patron.display_overlay.has_overdues.value "(Has Overdues)">
+<!ENTITY staff.patron.display_overlay.invalid_dob.value "(Invalid DOB)">
+<!ENTITY staff.patron.display_overlay.invalid_address.value "(Invalid Address)">
+<!ENTITY staff.patron.display_overlay.exit.label "Exit">
+<!ENTITY staff.patron.display_overlay.exit.accesskey "x">
+<!ENTITY staff.patron.display_overlay.search_form.label "Search Form">
+<!ENTITY staff.patron.display_overlay.search_form.accesskey "F">
+<!ENTITY staff.patron.display_overlay.retrieve_patron.label "Retrieve Patron">
+<!ENTITY staff.patron.display_overlay.retrieve_patron.accesskey "R">
+<!ENTITY staff.patron.hold_notices.add_record_notification.label "Add Record of Notification">
+<!ENTITY staff.patron.hold_notices.add_record_notification.accesskey "A">
+<!ENTITY staff.patron.hold_notices.close_window.label "Close">
+<!ENTITY staff.patron.hold_notices.close_window.accesskey "C">

Added: trunk/Open-ILS/xul/staff_client/server/locale/en-US/patron.properties
===================================================================
--- trunk/Open-ILS/xul/staff_client/server/locale/en-US/patron.properties	                        (rev 0)
+++ trunk/Open-ILS/xul/staff_client/server/locale/en-US/patron.properties	2008-06-17 18:07:45 UTC (rev 9844)
@@ -0,0 +1,74 @@
+staff.patron.barcode_entry.user_permission_editor=User Permission Editor
+staff.patron.barcode_entry.check_out=Check Out
+staff.patron.barcode_entry.no_barcode=No barcode entered.
+staff.patron.barcode_entry.barcode_retrieval_problem=Problem retrieving %1$s.  Please report this message: \n%2$s
+staff.patron.barcode_entry.barcode_not_found=Barcode %1$s not found.
+staff.patron.barcode_entry.consent_from_patron=Does patron %1$s, %2$s from %3$s (%4$s) consent to having their personal information shared with your library?
+staff.patron.barcode_entry.patron_consent_title=Patron/Library Opt-In Confirmation
+staff.patron.barcode_entry.patron_consent_accept=Accept
+staff.patron.barcode_entry.patron_consent_deny=Deny
+staff.patron.barcode_entry.patron_consent_confirm=Check here to confirm this message
+staff.patron.barcode_entry.patron_display_error=spawning patron display
+staff.patron.barcode_entry.user_perm_display_error=spawning user perm editor
+staff.patron.bill_details.my_init.error=bill_details.xul, my_init:
+staff.patron.bill_details.handle_void.voided_billings.alert=All selected billings have already voided.
+staff.patron.bill_details.handle_void.confirm_void_billing=Are you sure you would like to void $%1$s worth of line-item billings?
+staff.patron.bill_details.handle_void.confirm_void_billing_title=Voiding Bills
+staff.patron.bill_details.handle_void.confirm_void_billing_yes=Yes
+staff.patron.bill_details.handle_void.confirm_void_billing_no=No
+staff.patron.bill_details.handle_void.confirm_void_billing_confirm_message=Check here to confirm this message
+staff.patron.bill_details.handle_void.voiding_error=Error voiding bills.
+staff.patron.bill_details.handle_void.billings_voided=Billings voided.
+staff.patron.bill_history.retrieve_mbts_for_list.close_win_try_again=Please close this window and try again.
+staff.patron.bill_history.my_init.current_bills=Current Bills
+staff.patron.bill_history.my_init.bill_history=Bill History
+staff.patron.bill_history.handle_add.message_plural=Are you sure you would like to add a billing to bills %1$s?
+staff.patron.bill_history.handle_add.message_singular=Are you sure you would like to add a billing to bill %1$s?
+staff.patron.bill_history.handle_add.title=Bill Patron
+staff.patron.bill_history.handle_add.btn_yes=Yes
+staff.patron.bill_history.handle_add.btn_no=No
+staff.patron.bill_history.handle_add.confirm_message=Check here to confirm this message
+staff.patron.bill_history.print_bills.print_error=printing bills
+staff.patron.bills.bill_payment_amount.credit_amount=Patron only has %1$s in credit.
+staff.patron.bills.bill_change_amount.greedy=Someone wanted more money than they deserved\n
+staff.patron.bills.apply_payment.nothing_applied=No payments or patron credit applied.
+staff.patron.bills.pay.annotate_payment=Please annotate this payment:
+staff.patron.bills.pay.annotate_payment.title=Annotate Payment
+staff.patron.bills.pay.refund_exceeds_desk_payment=%1$s\n\nAnother way to "zero" this transaction is to use Add Billing and add a misc bill to counter the negative balance.
+staff.patron.bills.pay.payment_failed=Bill payment likely failed
+staff.patron.bills.info_box.label_value.title=Title
+staff.patron.bills.info_box.label_value.type=Type
+staff.patron.bills.info_box.label_value.last_billing=Last Billing:
+staff.patron.bills.info_box.label_value.add_billing=Add Billing
+staff.patron.bills.info_box.label_value.refund=Refund
+staff.patron.bills.info_box.label_value.void_all_billings=Void All Billings
+staff.patron.bills.void_all_billings.all_voided=All billings already voided on this bill.
+staff.patron.bills.void_all_billings.void.message=Are you sure you would like to void $%1$s worth of line-item billings?
+staff.patron.bills.void_all_billings.void.title=Voiding Bills
+staff.patron.bills.void_all_billings.void.yes=Yes
+staff.patron.bills.void_all_billings.void.no=No
+staff.patron.bills.void_all_billings.void.confirm_message=Check here to confirm this message
+staff.patron.bills.void_all_billings.error_voiding_bills=Error voiding bills.
+staff.patron.bills.void_all_billings.billings_voided=Billings voided.
+staff.patron.bill_wizard.patron_bill_finish.billing_added=Billing added.
+staff.patron.display.cmd_patron_edit.edit_search=Editor would like to search for: %1$s
+staff.patron.display.spawn_editor.editing_related_patron=Editing Related Patron
+staff.patron.display.init.retrieving=Retrieving...
+staff.patron.display.init.network_request.alert_message=Alert message: "%1$s"<br/><br/>\n
+staff.patron.display.init.network_request.inactive_card=Patron account retrieved with an INACTIVE card.<br/><br/>\n
+staff.patron.display.init.network_request.account_barred=Patron account is BARRED.<br/><br/>\n
+staff.patron.display.init.network_request.account_inactive=Patron account is INACTIVE.<br/><br/>\n
+staff.patron.display.init.network_request.accoutn_expired=Patron account is EXPIRED.<br/><br/>\n
+staff.patron.display.init.network_request.window_title=Alert
+staff.patron.display.init.network_request.window_message=Press a navigation button above (for example, Check Out) to clear this alert.
+staff.patron.display.init.network_request.dump_error_message=Not re-displaying this alert message: %1$s
+staff.patron.display.init.network_request.error_showing_alert=Error showing patron alert and holds availability.
+staff.patron.hold_notices.tooltiptext=ID: %1$s Hold ID: %2$s Notifying Staff ID: %3$s
+staff.patron.hold_notices.new_notification_record=New Notification Record
+staff.patron.hold_notices.method=Method
+staff.patron.hold_notices.note=Note
+staff.patron.hold_notices.cancel=Cancel
+staff.patron.hold_notices.cancel_accesskey=C
+staff.patron.hold_notices.add_notif_record=Add Notification Record
+staff.patron.hold_notices.add_notif_record_accesskey=A
+staff.patron.hold_notices.new_notification.not_created=The notification was not likely created.

Modified: trunk/Open-ILS/xul/staff_client/server/patron/barcode_entry.xul
===================================================================
--- trunk/Open-ILS/xul/staff_client/server/patron/barcode_entry.xul	2008-06-17 12:47:28 UTC (rev 9843)
+++ trunk/Open-ILS/xul/staff_client/server/patron/barcode_entry.xul	2008-06-17 18:07:45 UTC (rev 9844)
@@ -11,7 +11,7 @@
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
 <!-- LOCALIZATION -->
 <!DOCTYPE window PUBLIC "" ""[
-	<!--#include virtual="/opac/locale/en-US/lang.dtd"-->
+	<!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
 ]>
 
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
@@ -30,10 +30,12 @@
 	<script type="text/javascript" src="/xul/server/main/JSAN.js"/>
 	<script>
 	<![CDATA[
+		function $(id) { return document.getElementById(id); }
+		
 		function my_init() {
 			try {
 				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
-		                if (typeof JSAN == 'undefined') { throw( "The JSAN library object is missing."); }
+		    if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
 				JSAN.errorLevel = "die"; // none, warn, or die
 				JSAN.addRepository('/xul/server/');
 				JSAN.use('util.error'); g.error = new util.error();
@@ -59,9 +61,9 @@
 	
 				if (typeof window.xulG == 'object' && typeof window.xulG.set_tab_name == 'function') {
                     if (xul_param('perm_editor')) {
-					    try { window.xulG.set_tab_name('User Permission Editor'); } catch(E) { alert(E); }
+					    try { window.xulG.set_tab_name($(patronStrings).getString('staff.patron.barcode_entry.user_permission_editor')); } catch(E) { alert(E); }
                     } else {
-    					try { window.xulG.set_tab_name('Check Out'); } catch(E) { alert(E); }
+    					try { window.xulG.set_tab_name($(patronStrings).getString('staff.patron.barcode_entry.check_out')); } catch(E) { alert(E); }
                     }
 				}
 
@@ -73,6 +75,7 @@
 			} catch(E) {
 				var err_msg = "!! This software has encountered an error.  Please tell your friendly " +
 					"system administrator or software developer the following:\n" + E + '\n';
+				var err_msg = $("commonStrings").getFormattedString('common.exception', ['patron/barcode_entry.xul', E]);
 				try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
 				alert(err_msg);
 			}
@@ -87,7 +90,7 @@
 
 				barcode = String( barcode ).replace( /\s+/g, '' );
 
-				if (!barcode) { sound.bad(); add_msg('No barcode entered.'); tb.select(); tb.focus(); return; }
+				if (!barcode) { sound.bad(); add_msg($(patronStrings).getString('staff.patron.barcode_entry.no_barcode')); tb.select(); tb.focus(); return; }
 
 				JSAN.use('util.network'); var net = new util.network();
 
@@ -100,39 +103,42 @@
 						var robj = req.getResultObject();
 						if (typeof robj.ilsevent != 'undefined') {
 							sound.bad();
-							add_msg('Problem retrieving ' + barcode + '.  Please report this message: \n' + js2JSON(robj));
+							add_msg($(patronStrings).getFormattedString('staff.patron.barcode_entry.barcode_retrieval_problem', [barcode, js2JSON(robj)]));
 							return;
 						} else if (robj == 0) {
 							sound.bad(); 
-							add_msg('Barcode ' + barcode + ' not found.');
+							add_msg($(patronStrings).getFormattedString('staff.patron.barcode_entry.barcode_not_found', [barcode]));
 							return;
 						}
 
-                        if (g.data.user_org_unit_opt_in_enabled) {
-                            var r = net.simple_request('USER_ORG_UNIT_OPT_IN_CHECK',[ ses(), robj ]);
-                            if (typeof r.ilsevent != 'undefined') {
-                                throw(r);
-                            } else {
+						if (g.data.user_org_unit_opt_in_enabled) {
+							var r = net.simple_request('USER_ORG_UNIT_OPT_IN_CHECK',[ ses(), robj ]);
+							if (typeof r.ilsevent != 'undefined') {
+								throw(r);
+							} else {
+
+								if (r == 0) {
+
+									JSAN.use('patron.util');
+									var parts = patron.util.retrieve_name_via_id( ses(), robj );
     
-                                if (r == 0) {
-                                
-                                    JSAN.use('patron.util');
-                                    var parts = patron.util.retrieve_name_via_id( ses(), robj );
+									if (0 != g.error.yns_alert(
+											$(patronStrings).getFormattedString('staff.patron.barcode_entry.consent_from_patron',
+												[parts[0], parts[1] + (parts[2] ? ' ' + parts[2] : ''), g.data.hash.aou[ parts[3] ].name(), g.data.hash.aou[ parts[3] ].shortname()]),
+											$(patronStrings).getString('staff.patron.barcode_entry.patron_consent_title'),
+											$(patronStrings).getString('staff.patron.barcode_entry.patron_consent_accept'),
+											$(patronStrings).getString('staff.patron.barcode_entry.patron_consent_deny'), null,
+											$(patronStrings).getString('staff.patron.barcode_entry.patron_consent_confirm')
+										)
+									) {
+										tb.select(); tb.focus();
+										return;
+									} else {
+										var c = net.simple_request('USER_ORG_UNIT_OPT_IN_CREATE',[ ses(), robj ]);
+										if (typeof c.ilsevent != 'undefined') throw(r);
+									}
+								}
     
-                                    if (0 != g.error.yns_alert(
-                                        'Does patron ' + parts[0] + ', ' + parts[1] + (parts[2] ? ' ' + parts[2] : '') + ' from ' + g.data.hash.aou[ parts[3] ].name() + ' (' + g.data.hash.aou[ parts[3] ].shortname() + ') consent to having their personal information shared with your library?',
-                                        'Patron/Library Opt-In Confirmation',
-                                        'Accept', 'Deny', null, 'Check here to confirm this message'
-                                        )
-                                    ) {
-                                        tb.select(); tb.focus();
-                                        return;
-                                    } else {
-                                        var c = net.simple_request('USER_ORG_UNIT_OPT_IN_CREATE',[ ses(), robj ]);
-                                        if (typeof c.ilsevent != 'undefined') throw(r);
-                                    }
-                                }
-    
     						    sound.good();
     						    spawn(barcode);
                             }
@@ -169,7 +175,7 @@
 					location.href = loc + '?barcode=' + window.escape(barcode);
 				}
 			} catch(E) {
-				g.error.standard_unexpected_error_alert('spawning patron display',E);
+				g.error.standard_unexpected_error_alert($(patronStrings).getString('staff.patron.barcode_entry.patron_display_error'),E);
 			}
 		}
 
@@ -183,7 +189,7 @@
 					location.href = loc;
 				}
 			} catch(E) {
-				g.error.standard_unexpected_error_alert('spawning user perm editor',E);
+				g.error.standard_unexpected_error_alert($(patronStrings).getString('staff.patron.barcode_entry.user_perm_display_error'),E);
 			}
 		}
 
@@ -191,16 +197,19 @@
 		function default_focus() { try { setTimeout( function() { document.getElementById('barcode_tb').focus(); }, 0); } catch(E) {} }
 	]]>
 	</script>
+	
+	<messagecatalog id="commonStrings" src="/xul/server/locale/<!--#echo var='locale'-->/common.properties" />
+	<messagecatalog id="patronStrings" src="/xul/server/locale/<!--#echo var='locale'-->/patron.properties" />
 
 	<vbox flex="1" class="my_overflow">
 		<groupbox orient="vertical" flex="1">
-			<caption label="Retrieve Patron" />
+			<caption label="&staff.pat.barcode_entry.retrieve_patron.label;" />
 			<hbox>
-				<label value="Barcode:" accesskey="B" control="barcode_tb"/>
+				<label value="&staff.pat.barcode_entry.barcode.label;" accesskey="&staff.pat.barcode_entry.barcode.accesskey;" control="barcode_tb"/>
 				<textbox id="barcode_tb" />
-				<button label="Submit" accesskey="S" oncommand="submit();"/>
+				<button label="&staff.pat.barcode_entry.submit_btn.label;" accesskey="&staff.pat.barcode_entry.submit_btn.accesskey;" oncommand="submit();"/>
 			</hbox>
-			<label value="Retrieving..." style="color: green" id="progress" hidden="true"/>
+			<label value="&staff.pat.barcode_entry.retrieving.label;" style="color: green" id="progress" hidden="true"/>
 			<vbox id="status">
 			</vbox>
 		</groupbox>

Modified: trunk/Open-ILS/xul/staff_client/server/patron/bill_cc_info.xul
===================================================================
--- trunk/Open-ILS/xul/staff_client/server/patron/bill_cc_info.xul	2008-06-17 12:47:28 UTC (rev 9843)
+++ trunk/Open-ILS/xul/staff_client/server/patron/bill_cc_info.xul	2008-06-17 18:07:45 UTC (rev 9844)
@@ -12,7 +12,7 @@
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
 <!-- LOCALIZATION -->
 <!DOCTYPE window PUBLIC "" ""[
-	<!--#include virtual="/opac/locale/en-US/lang.dtd"-->
+	<!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
 ]>
 
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
@@ -33,10 +33,11 @@
 
 	<script>
 	<![CDATA[
+		function $(id) { return document.getElementById(id); }
 
 		function info_init() {
 			netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
-	                if (typeof JSAN == 'undefined') { throw( "The JSAN library object is missing."); }
+			if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
 			JSAN.errorLevel = "die"; // none, warn, or die
 			JSAN.addRepository('/xul/server/');
 			JSAN.use('util.error'); g.error = new util.error();
@@ -60,6 +61,8 @@
 	]]>
 	</script>
 
+	<messagecatalog id="catStrings" src="/xul/server/locale/<!--#echo var='locale'-->/patron.properties" />
+	<messagecatalog id="commonStrings" src="/xul/server/locale/<!--#echo var='locale'-->/common.properties" />
 
 	<groupbox>
 		<caption label="Credit Card Info"/>
@@ -70,40 +73,40 @@
 					<label value="CC Type"/>
 					<menulist id="cc_type" oncommand="g.payment_blob.cc_type = this.value;">
 						<menupopup>
-							<menuitem label="Visa" value="Visa"/>
-							<menuitem label="Mastercard" value="Mastercard"/>
-							<menuitem label="American Express" value="American Express"/>
-							<menuitem label="Discover" value="Discover"/>
-							<menuitem label="Other" value="Other"/>
+							<menuitem label="&staff.patron.bill_cc_info.visa.label;" value="Visa"/>
+							<menuitem label="&staff.patron.bill_cc_info.mastercard.label;" value="Mastercard"/>
+							<menuitem label="&staff.patron.bill_cc_info.american_express.label;" value="American Express"/>
+							<menuitem label="&staff.patron.bill_cc_info.discover.label;" value="Discover"/>
+							<menuitem label="&staff.patron.bill_cc_info.other.label;" value="Other"/>
 						</menupopup>
 					</menulist>
 				</row>
 				<row>
-					<label value="CC Number"/>
+					<label value="&staff.patron.bill_cc_info.cc_number.value;"/>
 					<textbox id="cc_number" onchange="g.payment_blob.cc_number = event.target.value"/>
 				</row>
 				<row>
-					<label value="Expire Month"/>
+					<label value="&staff.patron.bill_cc_info.month_expire.value;"/>
 					<textbox id="expire_month" onchange="g.payment_blob.expire_month = event.target.value"/>
 				</row>
 				<row>
-					<label value="Expire Year"/>
+					<label value="&staff.patron.bill_cc_info.year_expire.value;"/>
 					<textbox id="expire_year" onchange="g.payment_blob.expire_year = event.target.value"/>
 				</row>
 				<row>
-					<label value="Approval Code"/>
+					<label value="&staff.patron.bill_cc_info.approval_code.value;"/>
 					<textbox id="approval_code" onchange="g.payment_blob.approval_code = event.target.value"/>
 				</row>
 				<row>
-					<label value="Note"/>
+					<label value="&staff.patron.bill_cc_info.note.value;"/>
 					<textbox id="note" onchange="g.payment_blob.note = event.target.value" multiline="true"/>
 				</row>
 			</rows>
 		</grid>
 		<hbox>
 			<spacer flex="1"/>
-			<button label="Cancel" oncommand="window.close()" accesskey="C"/>
-			<button label="Submit this Info" oncommand="info_finish(); window.close();" accesskey="S"/>
+			<button label="&staff.patron.bill_cc_info.cancel.label;" oncommand="window.close()" accesskey="&staff.patron.bill_cc_info.cancel.accesskey;"/>
+			<button label="&staff.patron.bill_cc_info.submit.label;" oncommand="info_finish(); window.close();" accesskey="&staff.patron.bill_cc_info.submit.accesskey;"/>
 		</hbox>
 	</groupbox>
 

Modified: trunk/Open-ILS/xul/staff_client/server/patron/bill_check_info.xul
===================================================================
--- trunk/Open-ILS/xul/staff_client/server/patron/bill_check_info.xul	2008-06-17 12:47:28 UTC (rev 9843)
+++ trunk/Open-ILS/xul/staff_client/server/patron/bill_check_info.xul	2008-06-17 18:07:45 UTC (rev 9844)
@@ -12,7 +12,7 @@
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
 <!-- LOCALIZATION -->
 <!DOCTYPE window PUBLIC "" ""[
-	<!--#include virtual="/opac/locale/en-US/lang.dtd"-->
+	<!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
 ]>
 
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
@@ -33,10 +33,11 @@
 
 	<script>
 	<![CDATA[
+		function $(id) { return document.getElementById(id); }
 
 		function info_init() {
 			netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
-	                if (typeof JSAN == 'undefined') { throw( "The JSAN library object is missing."); }
+			if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
 			JSAN.errorLevel = "die"; // none, warn, or die
 			JSAN.addRepository('/xul/server/');
 			JSAN.use('util.error'); g.error = new util.error();
@@ -60,26 +61,28 @@
 	]]>
 	</script>
 
+	<messagecatalog id="catStrings" src="/xul/server/locale/<!--#echo var='locale'-->/patron.properties" />
+	<messagecatalog id="commonStrings" src="/xul/server/locale/<!--#echo var='locale'-->/common.properties" />
 
 	<groupbox>
-		<caption label="Check Info"/>
+		<caption label="&staff.patron.bill_check_info.check_info.label;"/>
 		<grid>
 			<columns> <column flex="0" /> <column flex="0" /> </columns>
 			<rows>
 				<row>
-					<label value="Check Number"/>
+					<label value="&staff.patron.bill_check_info.check_number.value;"/>
 					<textbox id="check_number" onchange="g.payment_blob.check_number = event.target.value"/>
 				</row>
 				<row>
-					<label value="Note"/>
+					<label value="&staff.patron.bill_check_info.note.value;"/>
 					<textbox id="note" onchange="g.payment_blob.note = event.target.value" multiline="true"/>
 				</row>
 			</rows>
 		</grid>
 		<hbox>
 			<spacer flex="1"/>
-			<button label="Cancel" oncommand="window.close()" accesskey="C"/>
-			<button label="Submit this Info" oncommand="info_finish(); window.close();" accesskey="S"/>
+			<button label="&staff.patron.bill_check_info.cancel.label;" oncommand="window.close()" accesskey="&staff.patron.bill_check_info.cancel.accesskey;"/>
+			<button label="&staff.patron.bill_check_info.submit.label;" oncommand="info_finish(); window.close();" accesskey="&staff.patron.bill_check_info.submit.accesskey;"/>
 		</hbox>
 	</groupbox>
 

Modified: trunk/Open-ILS/xul/staff_client/server/patron/bill_details.xul
===================================================================
--- trunk/Open-ILS/xul/staff_client/server/patron/bill_details.xul	2008-06-17 12:47:28 UTC (rev 9843)
+++ trunk/Open-ILS/xul/staff_client/server/patron/bill_details.xul	2008-06-17 18:07:45 UTC (rev 9844)
@@ -13,7 +13,7 @@
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
 <!-- LOCALIZATION -->
 <!DOCTYPE window PUBLIC "" ""[
-	<!--#include virtual="/opac/locale/en-US/lang.dtd"-->
+	<!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
 ]>
 
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
@@ -222,7 +222,7 @@
 		function my_init() {
 			try {
 				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
-		                if (typeof JSAN == 'undefined') { throw( "The JSAN library object is missing."); }
+				if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
 				JSAN.errorLevel = "die"; // none, warn, or die
 				JSAN.addRepository('/xul/server/');
 
@@ -254,7 +254,7 @@
 				);
 
 			} catch(E) {
-				try { g.error.standard_unexpected_error_alert('bill_details.xul, my_init:',E); } catch(F) { alert(E); }
+				try { g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.bill_details.my_init.error'),E); } catch(F) { alert(E); }
 			}
 		}
 
@@ -263,20 +263,24 @@
 				var mb_list = util.functional.map_list(g.bill_list_selection, function(o){return g.mb_list[o];}); 
 				mb_list = util.functional.filter_list( mb_list, function(o) { return ! get_bool( o.voided() ) });
 
-				if (mb_list.length == 0) { alert('All selected billings have already voided.'); return; }
+				if (mb_list.length == 0) { alert($("patronStrings").getString('staff.patron.bill_details.handle_void.voided_billings.alert')); return; }
 
 				var sum = 0;
 				for (var i = 0; i < mb_list.length; i++) sum += util.money.dollars_float_to_cents_integer( mb_list[i].amount() );
 				sum = util.money.cents_as_dollars( sum );
 
-				var msg = 'Are you sure you would like to void $' + sum + ' worth of line-item billings?';
-				var r = g.error.yns_alert(msg,'Voiding Bills','Yes','No',null,'Check here to confirm this message');
+				var msg = $("patronStrings").getFormattedString('staff.patron.bill_details.handle_void.confirm_void_billing', sum);
+				var r = g.error.yns_alert(msg,
+					$("patronStrings").getString('staff.patron.bill_details.handle_void.confirm_void_billing_title'),
+					$("patronStrings").getString('staff.patron.bill_details.handle_void.confirm_void_billing_yes'),
+					$("patronStrings").getString('staff.patron.bill_details.handle_void.confirm_void_billing_no'),null,
+					$("patronStrings").getString('staff.patron.bill_details.handle_void.confirm_void_billing_confirm_message'));
 				if (r == 0) {
 					var robj = g.network.simple_request('FM_MB_VOID',[ses()].concat(util.functional.map_list(mb_list,function(o){return o.id();})));
 					if (robj.ilsevent) {
 						switch(Number(robj.ilsevent)) {
 							default: 
-								g.error.standard_unexpected_error_alert('Error voiding bills.',robj); 
+								g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.bill_details.handle_void.voiding_error'),robj); 
 								retrieve_mbts();
 								g.bill_list.clear();
 								retrieve_mb();
@@ -291,7 +295,7 @@
 							g.data.voided_billings.push( mb_list[i] );
 					}
 					g.data.stash('voided_billings');
-					alert('Billings voided.');
+					alert($("patronStrings").getString('staff.patron.bill_details.handle_void.billings_voided'));
 					retrieve_mbts();
 					g.bill_list.clear();
 					retrieve_mb();
@@ -306,7 +310,8 @@
 	]]>
 	</script>
 
-    <messagecatalog id="commonStrings" src="/xul/server/locale/<!--#echo var='locale'-->/common.properties"/>
+	<messagecatalog id="commonStrings" src="/xul/server/locale/<!--#echo var='locale'-->/common.properties"/>
+	<messagecatalog id="patronStrings" src="/xul/server/locale/<!--#echo var='locale'-->/patron.properties"/>
 
 	<vbox flex="1" class="my_overflow">
 		<label id="patron_name" class="patronNameLarge"/>
@@ -320,34 +325,34 @@
 		<splitter><grippy/></splitter>
 
 			<groupbox orient="vertical" flex="2">
-				<caption label="Bills" style="color: red"/>
+				<caption label="&staff.patron.bill_details.bills.label;" style="color: red"/>
 				<tree id="bill_tree" flex="1" enableColumnDrag="true"/>
 				<hbox>
-					<button label="Save Columns" oncommand="g.bill_list.save_columns();"/>
-					<button label="Copy to Clipboard" oncommand="g.bill_list.clipboard();"/>
-					<button label="Print Export" oncommand="try { g.bill_list.on_all_fleshed = function() { JSAN.use('util.print'); var p = new util.print(); p.simple( g.bill_list.dump_csv(), { 'content_type' : 'text/plain' } ); setTimeout( function() { g.bill_list.on_all_fleshed = null; }, 0); }; g.bill_list.full_retrieve(); } catch(E) { alert(E); }"/>
+					<button label="&staff.patron.bill_details.save_columns.label;" oncommand="g.bill_list.save_columns();"/>
+					<button label="&staff.patron.bill_details.copy_to_clipboard.label;" oncommand="g.bill_list.clipboard();"/>
+					<button label="&staff.patron.bill_details.print_export.label;" oncommand="try { g.bill_list.on_all_fleshed = function() { JSAN.use('util.print'); var p = new util.print(); p.simple( g.bill_list.dump_csv(), { 'content_type' : 'text/plain' } ); setTimeout( function() { g.bill_list.on_all_fleshed = null; }, 0); }; g.bill_list.full_retrieve(); } catch(E) { alert(E); }"/>
 					<spacer flex="1"/>
-					<button id="void" label="Void selected billings" disabled="true"/>
+					<button id="void" label="&staff.patron.bill_details.void_selection.label;" disabled="true"/>
 				</hbox>
 			</groupbox>
 
 			<splitter><grippy/></splitter>
 
 			<groupbox orient="vertical" flex="2">
-				<caption label="Payments" style="color: green"/>
+				<caption label="&staff.patron.bill_details.payments.label;" style="color: green"/>
 				<tree id="payment_tree" flex="1" enableColumnDrag="true"/>
 				<hbox>
-					<button label="Save Columns" oncommand="g.payment_list.save_columns();"/>
-					<button label="Copy to Clipboard" oncommand="g.payment_list.clipboard();"/>
-					<button label="Print Export" oncommand="try { g.payment_list.on_all_fleshed = function() { JSAN.use('util.print'); var p = new util.print(); p.simple( g.payment_list.dump_csv(), { 'content_type' : 'text/plain' } ); setTimeout( function() { g.payment_list.on_all_fleshed = null; }, 0); }; g.payment_list.full_retrieve(); } catch(E) { alert(E); }"/>
+					<button label="&staff.patron.bill_details.save_columns.label;" oncommand="g.payment_list.save_columns();"/>
+					<button label="&staff.patron.bill_details.copy_to_clipboard.label;" oncommand="g.payment_list.clipboard();"/>
+					<button label="&staff.patron.bill_details.print_export.label;" oncommand="try { g.payment_list.on_all_fleshed = function() { JSAN.use('util.print'); var p = new util.print(); p.simple( g.payment_list.dump_csv(), { 'content_type' : 'text/plain' } ); setTimeout( function() { g.payment_list.on_all_fleshed = null; }, 0); }; g.payment_list.full_retrieve(); } catch(E) { alert(E); }"/>
 					<spacer flex="1"/>
 				</hbox>
 			</groupbox>
 
 		<hbox>
-			<button id="opac" label="Show in Catalog" accesskey="S" hidden="true"/>
+			<button id="opac" label="&staff.patron.bill_details.show_in_catalog.label;" accesskey="&staff.patron.bill_details.show_in_catalog.accesskey;" hidden="true"/>
 			<spacer flex="1"/>
-			<button label="Close Window" oncommand="window.close()" accesskey="c"/>
+			<button label="&staff.patron.bill_details.close_window.label;" oncommand="window.close()" accesskey="&staff.patron.bill_details.close_window.accesskey;"/>
 		</hbox>
 	</vbox>
 

Modified: trunk/Open-ILS/xul/staff_client/server/patron/bill_history.xul
===================================================================
--- trunk/Open-ILS/xul/staff_client/server/patron/bill_history.xul	2008-06-17 12:47:28 UTC (rev 9843)
+++ trunk/Open-ILS/xul/staff_client/server/patron/bill_history.xul	2008-06-17 18:07:45 UTC (rev 9844)
@@ -13,7 +13,7 @@
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
 <!-- LOCALIZATION -->
 <!DOCTYPE window PUBLIC "" ""[
-	<!--#include virtual="/opac/locale/en-US/lang.dtd"-->
+	<!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
 ]>
 
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
@@ -62,11 +62,11 @@
 			g.mbts_ids = g.network.simple_request(method,[ses(),g.patron_id]);
 			if (g.mbts_ids.ilsevent) {
 				switch(Number(g.mbts_ids.ilsevent)) {
-					case -1: g.error.standard_network_error_alert('Please close this window and try again.'); break;
-					default: g.error.standard_unexpected_error_alert('Please close this window and try again.',g.mbts_ids); break;
+					case -1: g.error.standard_network_error_alert($("patronStrings").getString('staff.patron.bill_history.retrieve_mbts_for_list.close_win_try_again')); break;
+					default: g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.bill_history.retrieve_mbts_for_list.close_win_try_again'),g.mbts_ids); break;
 				}
 			} else if (g.mbts_ids == null) {
-				g.error.standard_unexpected_error_alert('Please close this window and try again.',null);
+				g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.bill_history.retrieve_mbts_for_list.close_win_try_again'),null);
 			} else {
 				//g.mbts_ids.reverse();
 				var funcs = [];
@@ -233,7 +233,7 @@
 		function my_init() {
 			try {
 				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
-		                if (typeof JSAN == 'undefined') { throw( "The JSAN library object is missing."); }
+			    if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
 				JSAN.errorLevel = "die"; // none, warn, or die
 				JSAN.addRepository('/xul/server/');
 
@@ -266,24 +266,31 @@
 				);
 
 				if (xul_param('current')) {
-					$('caption').setAttribute('label','Current Bills');
+					$('caption').setAttribute('label',$("patronStrings").getString('staff.patron.bill_history.my_init.current_bills'));
 					document.title = 'Current Bills';
 				} else {
-					$('caption').setAttribute('label','Bill History');
+					$('caption').setAttribute('label',$("patronStrings").getString('staff.patron.bill_history.my_init.bill_history'));
 					document.title = 'Bill History';
 				}
 
 			} catch(E) {
-				var err_msg = "!! This software has encountered an error.  Please tell your friendly " +
-					"system administrator or software developer the following:\nbill_history.xul\n" + E + '\n';
+				var err_msg = $("commonStrings").getFormattedString('common.exception', ['patron/bill_history.xul', E]);
 				try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
 				alert(err_msg);
 			}
 		}
 
 		function handle_add() {
-			var msg = 'Are you sure you would like to add a billing to bill' + ( g.bill_list_selection.length > 1 ? 's ' : ' ') + g.bill_list_selection + '?';
-			var r = g.error.yns_alert(msg,'Bill Patron','Yes','No',null,'Check here to confirm this message');
+			if(g.bill_list_selection.length > 1)
+				var msg = $("patronStrings").getFormattedString('staff.patron.bill_history.handle_add.message_plural', [g.bill_list_selection]);
+			else
+				var msg = $("patronStrings").getFormattedString('staff.patron.bill_history.handle_add.message_singular', [g.bill_list_selection]);
+				
+			var r = g.error.yns_alert(msg,
+				$("patronStrings").getString('staff.patron.bill_history.handle_add.title'),
+				$("patronStrings").getString('staff.patron.bill_history.handle_add.btn_yes'),
+				$("patronStrings").getString('staff.patron.bill_history.handle_add.btn_no'),null,
+				$("patronStrings").getString('staff.patron.bill_history.handle_add.confirm_message'));
 			if (r == 0) {
 				JSAN.use('util.window');
 				var win = new util.window();
@@ -331,14 +338,15 @@
                 };
 				g.bill_list.print(params);
 			} catch(E) {
-				g.error.standard_unexpected_error_alert('printing bills', E);
+				g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.bill_history.print_bills.print_error'), E);
 			}
 		}
 
 	]]>
 	</script>
 
-    <messagecatalog id="commonStrings" src="/xul/server/locale/<!--#echo var='locale'-->/common.properties"/>
+	<messagecatalog id="commonStrings" src="/xul/server/locale/<!--#echo var='locale'-->/common.properties"/>
+	<messagecatalog id="patronStrings" src="/xul/server/locale/<!--#echo var='locale'-->/patron.properties"/>
 
 	<vbox flex="1" class="my_overflow">
         <vbox id="v1" persist="height" flex="1">
@@ -356,20 +364,20 @@
 
         <vbox id="v3" persist="height" flex="3">
             <groupbox orient="vertical" flex="1">
-                <caption id="caption" label="Bill History"/>
+                <caption id="caption" label="&staff.patron.bill_history.caption.label;"/>
                 <tree id="bill_tree" flex="1" enableColumnDrag="true" seltype="single"/>
                 <hbox>
                     <spacer flex="1"/>
-                    <button id="add" label="Add Billing" disabled="true"/>
-                    <button id="details" label="Full Details" disabled="true" accesskey="D"/>
+                    <button id="add" label="&staff.patron.bill_history.add_billing.label;" disabled="true"/>
+                    <button id="details" label="&staff.patron.bill_history.full_details.label;" disabled="true" accesskey="&staff.patron.bill_history.full_details.accesskey;"/>
                 </hbox>
             </groupbox>
 
             <hbox flex="0">
-                <button id="opac" label="Show in Catalog" accesskey="S" hidden="true" oncommand="alert('Not Yet Implemented');"/>
-                <button id="print" label="Print" accesskey="P" hidden="false" oncommand="print_bills();"/>
+                <button id="opac" label="&staff.patron.bill_history.show_in_catalog.label;" accesskey="&staff.patron.bill_history.show_in_catalog.accesskey;" hidden="true" oncommand="alert('Not Yet Implemented');"/>
+                <button id="print" label="&staff.patron.bill_history.print.label;" accesskey="&staff.patron.bill_history.print.accesskey;" hidden="false" oncommand="print_bills();"/>
                 <spacer flex="1"/>
-                <button label="Close Window" oncommand="window.close()" accesskey="c"/>
+                <button label="&staff.patron.bill_history.close_window.label;" oncommand="window.close()" accesskey="&staff.patron.bill_history.close_window.accesskey;"/>
             </hbox>
         </vbox>
 	</vbox>

Modified: trunk/Open-ILS/xul/staff_client/server/patron/bill_summary_overlay.xul
===================================================================
--- trunk/Open-ILS/xul/staff_client/server/patron/bill_summary_overlay.xul	2008-06-17 12:47:28 UTC (rev 9843)
+++ trunk/Open-ILS/xul/staff_client/server/patron/bill_summary_overlay.xul	2008-06-17 18:07:45 UTC (rev 9844)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <!DOCTYPE overlay PUBLIC "" ""[
-	<!--#include virtual="/opac/locale/en-US/lang.dtd"-->
+	<!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
 ]>
 <overlay id="bills_overlay" 
 	xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
@@ -21,35 +21,35 @@
 					</columns>
 					<rows>
 						<row>
-							<label class="header" value="Bill #"/>
+							<label class="header" value="&staff.patron.bill_summary_overlay.bill_number.value;"/>
 							<label id="mbts_id" />
-							<label class="header" value="Total Billed"/>
+							<label class="header" value="&staff.patron.bill_summary_overlay.total_billed.value;"/>
 							<label id="mbts_total_owed" />
-							<label class="header" id="title_label" value="Title" hidden="true"/>
+							<label class="header" id="title_label" value="&staff.patron.bill_summary_overlay.title.value;" hidden="true"/>
 							<description id="title"/>
 						</row>
 						<row>
-							<label class="header" value="Type"/>
+							<label class="header" value="&staff.patron.bill_summary_overlay.type.value;"/>
 							<label id="mbts_xact_type"/>
-							<label class="header" value="Total Paid"/>
+							<label class="header" value="&staff.patron.bill_summary_overlay.total_paid.value;"/>
 							<label id="mbts_total_paid" />
-							<label class="header" id="checked_out_label" value="Checked Out" hidden="true"/>
+							<label class="header" id="checked_out_label" value="&staff.patron.bill_summary_overlay.checked_out.value;" hidden="true"/>
 							<label id="checked_out"/>
 						</row>
 						<row>
-							<label class="header" value="Start"/>
+							<label class="header" value="&staff.patron.bill_summary_overlay.start.value;"/>
 							<label id="mbts_xact_start"/>
-							<label class="header" value="Balance Owed"/>
+							<label class="header" value="&staff.patron.bill_summary_overlay.balance_owed.value;"/>
 							<label id="mbts_balance_owed" />
-							<label class="header" id="due_label" value="Due Date" hidden="true"/>
+							<label class="header" id="due_label" value="&staff.patron.bill_summary_overlay.due_date.value;" hidden="true"/>
 							<label id="due"/>
 						</row>
 						<row>
-							<label class="header" value="Finish"/>
+							<label class="header" value="&staff.patron.bill_summary_overlay.finish.value;"/>
 							<label id="mbts_xact_finish"/>
-							<label class="header" value="Renewal?"/>
+							<label class="header" value="&staff.patron.bill_summary_overlay.renewal.value;"/>
 							<label id="renewal"/>
-							<label class="header" id="checked_in_label" value="Checked In" hidden="true"/>
+							<label class="header" id="checked_in_label" value="&staff.patron.bill_summary_overlay.checked_in.value;" hidden="true"/>
 							<label id="checked_in"/>
 						</row>
 					</rows>

Modified: trunk/Open-ILS/xul/staff_client/server/patron/bill_wizard.xul
===================================================================
--- trunk/Open-ILS/xul/staff_client/server/patron/bill_wizard.xul	2008-06-17 12:47:28 UTC (rev 9843)
+++ trunk/Open-ILS/xul/staff_client/server/patron/bill_wizard.xul	2008-06-17 18:07:45 UTC (rev 9844)
@@ -12,7 +12,7 @@
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
 <!-- LOCALIZATION -->
 <!DOCTYPE window PUBLIC "" ""[
-	<!--#include virtual="/opac/locale/en-US/lang.dtd"-->
+	<!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
 ]>
 
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
@@ -123,7 +123,7 @@
 		function patron_bill_init() {
 			try {
 				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
-		                if (typeof JSAN == 'undefined') { throw( "The JSAN library object is missing."); }
+				if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
 				JSAN.errorLevel = "die"; // none, warn, or die
 				JSAN.addRepository('/xul/server/');
 				JSAN.use('util.error'); g.error = new util.error();
@@ -158,9 +158,7 @@
 				}
 
 			} catch(E) {
-				var err_msg = "!! This software has encountered an error.  Please tell your friendly " +
-					"system administrator or software developer the following:\n" 
-					+ 'patron/bill_wizard.xul\n' + E + '\n';
+				var err_msg = $("commonStrings").getFormattedString('common.exception', ['patron/bill_wizard.xul', E]);
 				try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
 				alert(err_msg);
 			}
@@ -196,7 +194,7 @@
 						[ ses(), billing ]
 					);
 					if (typeof mb_id.ilsevent != 'undefined') throw(mb_id);
-					alert('Billing added.');
+					alert($('patronStrings').getString('staff.patron.bill_wizard.patron_bill_finish.billing_added'));
 				} else {
 					throw(xact_id);
 				}
@@ -207,6 +205,9 @@
 
 	]]>
 	</script>
+	
+	<messagecatalog id="commonStrings" src="/xul/server/locale/<!--#echo var='locale'-->/common.properties" />
+	<messagecatalog id="patronStrings" src="/xul/server/locale/<!--#echo var='locale'-->/patron.properties"/>
 
 	<vbox flex="1">
 
@@ -215,31 +216,31 @@
 			<groupbox orient="vertical" flex="1" id="summary" hidden="true"/>
 
 			<groupbox flex="1">
-				<caption label="Create Bill"/>
+				<caption label="&staff.patron.bill_wizard.create_bill.label;"/>
 				<grid>
 					<columns> <column flex="0" /> <column flex="0" /> </columns>
 					<rows id="page1_rows">
-						<row><label value="Location"/><textbox id="billing_location" disabled="true" /></row>
-						<row><label value="Transaction Type"/>
+						<row><label value="&staff.patron.bill_wizard.location.value;"/><textbox id="billing_location" disabled="true" /></row>
+						<row><label value="&staff.patron.bill_wizard.transaction_type.value;"/>
 							<menulist id="xact_type">
 								<menupopup>
-									<menuitem label="Grocery" value="grocery" selected="true"/>
-									<menuitem label="Circulation" value="circulation" disabled="true"/>
+									<menuitem label="&staff.patron.bill_wizard.grocery.label;" value="grocery" selected="true"/>
+									<menuitem label="&staff.patron.bill_wizard.circulation.label;" value="circulation" disabled="true"/>
 								</menupopup>
 							</menulist>
 						</row>
-						<row><label value="Billing Type"/>
+						<row><label value="&staff.patron.bill_wizard.billing_type.label;"/>
 							<hbox id="menu_placeholder"/>
 						</row>
-						<row><label value="Amount"/><textbox id="bill_amount" /></row>
-						<row><label value="Note"/><textbox id="bill_note" multiline="true" rows="5" /></row>
+						<row><label value="&staff.patron.bill_wizard.amount.value;"/><textbox id="bill_amount" /></row>
+						<row><label value="&staff.patron.bill_wizard.note.value;"/><textbox id="bill_note" multiline="true" rows="5" /></row>
 					</rows>
 				</grid>
 				<spacer flex="1"/>
 				<hbox>
 					<spacer flex="1"/>
-					<button label="Cancel" oncommand="window.close()" accesskey="C"/>
-					<button label="Submit this Bill" oncommand="patron_bill_finish(); window.close();" accesskey="S"/>
+					<button label="&staff.patron.bill_wizard.cancel.label;" oncommand="window.close()" accesskey="&staff.patron.bill_wizard.cancel.accesskey;"/>
+					<button label="&staff.patron.bill_wizard.submit.label;" oncommand="patron_bill_finish(); window.close();" accesskey="&staff.patron.bill_wizard.submit.accesskey;"/>
 				</hbox>
 			</groupbox>
 	</vbox>

Modified: trunk/Open-ILS/xul/staff_client/server/patron/bills.js
===================================================================
--- trunk/Open-ILS/xul/staff_client/server/patron/bills.js	2008-06-17 12:47:28 UTC (rev 9843)
+++ trunk/Open-ILS/xul/staff_client/server/patron/bills.js	2008-06-17 18:07:45 UTC (rev 9844)
@@ -1,5 +1,7 @@
 dump('entering patron.bills.js\n');
 
+function $(id) { return document.getElementById(id); }
+
 if (typeof patron == 'undefined') patron = {};
 patron.bills = function (params) {
 
@@ -103,7 +105,7 @@
 					var bo = obj.bills[i].transaction.balance_owed();
 					total_owed += util.money.dollars_float_to_cents_integer( bo );
 					var id = obj.bills[i].transaction.id();
-					obj.current_payments.push( { 'mobts_id' : id, 'balance_owed' : bo, 'checkbox' : cb, 'textbox' : tb, } );
+					obj.current_payments.push( { 'mobts_id' : id, 'balance_owed' : bo, 'checkbox' : cb, 'textbox' : tb } );
 				}
 				obj.controller.view.bill_total_owed.value = util.money.cents_as_dollars( total_owed );
 				obj.controller.view.bill_total_owed.setAttribute('value',obj.controller.view.bill_total_owed.value);
@@ -149,7 +151,7 @@
 									'render' : 'obj.payment_box()'
 								}
 						],
-						'map_row_to_column' : obj.gen_map_row_to_column(),
+						'map_row_to_column' : obj.gen_map_row_to_column()
 					}
 				);
 
@@ -159,7 +161,7 @@
 						'control_map' : {
 							'cmd_broken' : [
 								['command'],
-								function() { alert('Not Yet Implemented'); }
+								function() { alert($("commonStrings").getString('common.unimplemented')); }
 							],
 							'cmd_bill_wizard' : [
 								['command'],
@@ -219,7 +221,7 @@
 											{
 												'current' : 1,
 												'patron_id' : obj.patron_id,
-												'refresh' : function() { obj.refresh(); },
+												'refresh' : function() { obj.refresh(); }
 											}
 										);
 									} catch(E) {
@@ -313,7 +315,7 @@
 												var proposed = util.money.dollars_float_to_cents_integer(ev.target.value);
 												var available = util.money.dollars_float_to_cents_integer(au_obj.credit_forward_balance());
 												if (proposed > available) {
-													alert('Patron only has ' + au_obj.credit_forward_balance() + ' in credit.');
+													alert($("patronStrings").getFormattedString('staff.patron.bills.bill_payment_amount.credit_amount', [au_obj.credit_forward_balance()]));
 													ev.target.value = util.money.cents_as_dollars( available );
 													ev.target.setAttribute('value',ev.target.value);
 												}
@@ -341,7 +343,7 @@
 											obj.update_payment_applied();
 											var real_change = util.money.dollars_float_to_cents_integer( tb.value );
 											if ( proposed_change > real_change ) {
-												obj.error.sdump('D_ERROR','Someone wanted more money than they deserved\n');
+												obj.error.sdump('D_ERROR',$("patronStrings").getString('staff.patron.bills.bill_change_amount.greedy'));
 												proposed_change = real_change;
 											} else if ( real_change > proposed_change ) {
 												proposed_credit = real_change - proposed_change;
@@ -365,7 +367,7 @@
 							'bill_new_balance' : [
 								['render'],
 								function(e) { return function() {}; }
-							],
+							]
 						}
 					}
 				);
@@ -510,7 +512,7 @@
 					}
 				}
                 if ( payment_blob.payments.length == 0 && payment_blob.patron_credit == '0.00' ) {
-                    alert('No payments or patron credit applied.');
+                    alert($("patronStrings").getString('staff.patron.bills.apply_payment.nothing_applied'));
                     return;
                 }
 				if ( obj.pay( payment_blob ) ) {
@@ -539,11 +541,11 @@
 										'last_billing_type' : obj.bill_map[ o[0] ].transaction.last_billing_type(),
 										'last_billing_note' : obj.bill_map[ o[0] ].transaction.last_billing_note(),
 										'title' : typeof obj.bill_map[ o[0] ].title != 'undefined' ? obj.bill_map[ o[0] ].title : '', 
-										'barcode' : typeof obj.bill_map[ o[0] ].barcode != 'undefined' ? obj.bill_map[ o[0] ].barcode : '', 
+										'barcode' : typeof obj.bill_map[ o[0] ].barcode != 'undefined' ? obj.bill_map[ o[0] ].barcode : ''
 									};
 								}
 							),
-							'data' : obj.previous_summary,
+							'data' : obj.previous_summary
 						};
 						obj.error.sdump('D_DEBUG',js2JSON(params));
 						if (document.getElementById('auto_print').checked) params.no_prompt = true;
@@ -563,7 +565,7 @@
 		try {
             var x = document.getElementById('annotate_payment');
             if (x && x.checked && (! payment_blob.note)) {
-                payment_blob.note = window.prompt('Please annotate this payment:','','Annotate Payment');
+                payment_blob.note = window.prompt($("patronStrings").getString('staff.patron.bills.pay.annotate_payment'),'', $("patronStrings").getString('staff.patron.bills.pay.annotate_payment.title'));
             }
 			obj.previous_summary = {
 				original_balance : obj.controller.view.bill_total_owed.value,
@@ -574,7 +576,7 @@
 				credit_given : obj.controller.view.bill_credit_amount.value,
 				new_balance : obj.controller.view.bill_new_balance.value,
 				payment_type : obj.controller.view.payment_type.getAttribute('label'),
-				note : payment_blob.note,
+				note : payment_blob.note
 			}
 			var robj = obj.network.request(
 				api.BILL_PAY.app,	
@@ -585,12 +587,12 @@
 			if (typeof robj.ilsevent != 'undefined') {
 				switch(Number(robj.ilsevent)) {
 					case 0 /* SUCCESS */ : return true; break;
-					case 1226 /* REFUND_EXCEEDS_DESK_PAYMENTS */ : alert(robj.desc + '\n\nAnother way to "zero" this transaction is to use Add Billing and add a misc bill to counter the negative balance.'); return false; break;
+					case 1226 /* REFUND_EXCEEDS_DESK_PAYMENTS */ : alert($("patronStrings").getFormattedString('staff.patron.bills.pay.refund_exceeds_desk_payment', [robj.desc])); return false; break;
 					default: throw(robj); break;
 				}
 			}
 		} catch(E) {
-			obj.error.standard_unexpected_error_alert('Bill payment likely failed',E);
+			obj.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.bills.pay.payment_failed'),E);
 			return false;
 		}
 	},
@@ -642,7 +644,7 @@
 				obj.update_payment_applied();
 				var real_change = util.money.dollars_float_to_cents_integer( tb.value );
 				if ( proposed_change > real_change ) {
-					obj.error.sdump('D_ERROR','Someone wanted more money than they deserved\n');
+					obj.error.sdump('D_ERROR',$("patronStrings").getString('staff.patron.bills.bill_change_amount.greedy'));
 					proposed_change = real_change;
 				} else if ( real_change > proposed_change ) {
 					proposed_credit = real_change - proposed_change;
@@ -703,7 +705,7 @@
                         var id = o.transaction.id();
                         var hash = {
                             'title' : typeof obj.bill_map[ id ].title != 'undefined' ? obj.bill_map[ id ].title : '', 
-                            'barcode' : typeof obj.bill_map[ id ].barcode != 'undefined' ? obj.bill_map[ id ].barcode : '', 
+                            'barcode' : typeof obj.bill_map[ id ].barcode != 'undefined' ? obj.bill_map[ id ].barcode : ''
                         };
                         for (var i = 0; i < columns.length; i++) {
                             var v = columns[i].render( { 'mbts' : o.transaction } );
@@ -913,7 +915,8 @@
 							);
 						break;
 						default:
-								xt_label.setAttribute( 'value', my.mvr ? 'Title' : 'Type' );
+								xt_label.setAttribute( 'value',
+									my.mvr ? $("patronStrings").getString('staff.patron.bills.info_box.label_value.title') : $("patronStrings").getString('staff.patron.bills.info_box.label_value.type') );
 								xt_value.appendChild( document.createTextNode( my.mvr ? my.mvr.title() : my.mobts.xact_type() ) );
 						break;
 					}
@@ -924,7 +927,7 @@
 
 						var lb_label = document.createElement('label');
 							last_billing.appendChild( lb_label );
-							lb_label.setAttribute( 'value', 'Last Billing:' );
+							lb_label.setAttribute( 'value', $("patronStrings").getString('staff.patron.bills.info_box.label_value.last_billing') );
 
 						var lb_value = document.createElement('label');
 							last_billing.appendChild( lb_value );
@@ -971,7 +974,7 @@
 								);
 							var btn2 = document.createElement('button');
 								btn_box.appendChild( btn2 );
-								btn2.setAttribute( 'label', 'Add Billing' );
+								btn2.setAttribute( 'label', $("patronStrings").getString('staff.patron.bills.info_box.label_value.add_billing') );
 								btn2.setAttribute( 'mobts_id', my.mobts.id() );	
 								btn2.addEventListener(
 									'command',
@@ -996,7 +999,7 @@
 				if (my.mobts.balance_owed() < 0) {
 					var btn3 = document.createElement('button');
 					btn_box.appendChild( btn3 );
-					btn3.setAttribute( 'label', 'Refund' );
+					btn3.setAttribute( 'label', $("patronStrings").getString('staff.patron.bills.info_box.label_value.refund') );
 					btn3.setAttribute( 'mobts_id', my.mobts.id() );	
 					btn3.addEventListener(
 						'command',
@@ -1011,7 +1014,7 @@
 
 				var btn4 = document.createElement('button');
 				btn_box.appendChild( btn4 );
-				btn4.setAttribute( 'label', 'Void All Billings' );
+				btn4.setAttribute( 'label', $("patronStrings").getString('staff.patron.bills.info_box.label_value.void_all_billings') );
 				btn4.setAttribute( 'mobts_id', my.mobts.id() );
 				btn4.addEventListener(
 					'command',
@@ -1049,20 +1052,24 @@
 
 			mb_list = util.functional.filter_list( mb_list, function(o) { return ! get_bool( o.voided() ) });
 
-			if (mb_list.length == 0) { alert('All billings already voided on this bill.'); return; }
+			if (mb_list.length == 0) { alert($("patronStrings").getString('staff.patron.bills.void_all_billings.all_voided')); return; }
 
 			var sum = 0;
 			for (var i = 0; i < mb_list.length; i++) sum += util.money.dollars_float_to_cents_integer( mb_list[i].amount() );
 			sum = util.money.cents_as_dollars( sum );
 
-			var msg = 'Are you sure you would like to void $' + sum + ' worth of line-item billings?';
-			var r = obj.error.yns_alert(msg,'Voiding Bills','Yes','No',null,'Check here to confirm this message');
+			var msg = $("patronStrings").getFormattedString('staff.patron.bills.void_all_billings.void.message', [sum]);
+			var r = obj.error.yns_alert(msg,
+				$("patronStrings").getString('staff.patron.bills.void_all_billings.void.title'),
+				$("patronStrings").getString('staff.patron.bills.void_all_billings.void.yes'),
+				$("patronStrings").getString('staff.patron.bills.void_all_billings.void.no'), null,
+				$("patronStrings").getString('staff.patron.bills.void_all_billings.void.confirm_message'));
 			if (r == 0) {
 				var robj = obj.network.simple_request('FM_MB_VOID',[ses()].concat(util.functional.map_list(mb_list,function(o){return o.id();})));
 				if (robj.ilsevent) {
 					switch(Number(robj.ilsevent)) {
 						default: 
-							obj.error.standard_unexpected_error_alert('Error voiding bills.',robj); 
+							obj.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.bills.void_all_billings.error_voiding_bills'),robj); 
 							obj.refresh(); return; 
 						break;
 					}
@@ -1073,7 +1080,7 @@
 						obj.data.voided_billings.push( mb_list[i] );
 				}
 				obj.data.stash('voided_billings');
-				alert('Billings voided.');
+				alert($("patronStrings").getString('staff.patron.bills.void_all_billings.billings_voided'));
 				obj.refresh();
 			}
 		} catch(E) {

Modified: trunk/Open-ILS/xul/staff_client/server/patron/bills.xul
===================================================================
--- trunk/Open-ILS/xul/staff_client/server/patron/bills.xul	2008-06-17 12:47:28 UTC (rev 9843)
+++ trunk/Open-ILS/xul/staff_client/server/patron/bills.xul	2008-06-17 18:07:45 UTC (rev 9844)
@@ -12,7 +12,7 @@
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
 <!-- LOCALIZATION -->
 <!DOCTYPE window PUBLIC "" ""[
-	<!--#include virtual="/opac/locale/en-US/lang.dtd"-->
+	<!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
 ]>
 
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
@@ -32,10 +32,12 @@
 	<script type="text/javascript" src="/xul/server/main/JSAN.js"/>
 	<script>
 	<![CDATA[
+		function $(id) { return document.getElementById(id); }
+		
 		function my_init() {
 			try {
 				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
-		                if (typeof JSAN == 'undefined') { throw( "The JSAN library object is missing."); }
+				if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
 				JSAN.errorLevel = "die"; // none, warn, or die
 				JSAN.addRepository('/xul/server/');
 				JSAN.use('util.error'); g.error = new util.error();
@@ -52,8 +54,7 @@
 				document.getElementById('bill_payment_amount').focus();
 	
 			} catch(E) {
-				var err_msg = "!! This software has encountered an error.  Please tell your friendly " +
-					"system administrator or software developer the following:\n" + E + '\n';
+				var err_msg = $("commonStrings").getFormattedString('common.exception', ['patron/bills.xul', E]);
 				try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
 				alert(err_msg);
 			}
@@ -79,9 +80,10 @@
 		<command id="cmd_print_bills" />
 		<command id="cmd_alternate_view" />
 	</commandset>
+	
+	<messagecatalog id="commonStrings" src="/xul/server/locale/<!--#echo var='locale'-->/common.properties"/>
+	<messagecatalog id="patronStrings" src="/xul/server/locale/<!--#echo var='locale'-->/patron.properties"/>
 
-    <messagecatalog id="commonStrings" src="/xul/server/locale/<!--#echo var='locale'-->/common.properties"/>
-
 	<box id="bills_main" />
 
 </window>

Modified: trunk/Open-ILS/xul/staff_client/server/patron/bills_overlay.xul
===================================================================
--- trunk/Open-ILS/xul/staff_client/server/patron/bills_overlay.xul	2008-06-17 12:47:28 UTC (rev 9843)
+++ trunk/Open-ILS/xul/staff_client/server/patron/bills_overlay.xul	2008-06-17 18:07:45 UTC (rev 9844)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <!DOCTYPE overlay PUBLIC "" ""[
-	<!--#include virtual="/opac/locale/en-US/lang.dtd"-->
+	<!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
 ]>
 <overlay id="bills_overlay" 
 	xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
@@ -16,37 +16,37 @@
 		<label style="font-weight: bold;" value="Un-Selected:"/><label id="unselected_balance"/>
 		<label style="font-weight: bold;" value="Voided:"/><label id="voided_balance"/>
 		<spacer flex="1"/>
-		<label id="circulating_hint" hidden="true" style="background: red; color: white" value="Red Items are still Checked Out"/>
+		<label id="circulating_hint" hidden="true" style="background: red; color: white" value="&staff.patron.bills_overlay.still_checked_out.label;"/>
 	</hbox>
 	<listbox id="bill_list" flex="1"/>
 	<hbox>
-		<button command="cmd_uncheck_all" label="Uncheck All"/>
-		<button command="cmd_check_all" label="Check All"/>
+		<button command="cmd_uncheck_all" label="&staff.patron.bills_overlay.uncheck_all.label;"/>
+		<button command="cmd_check_all" label="&staff.patron.bills_overlay.check_all.label;"/>
 		<spacer flex="1"/>
-		<button command="cmd_print_bills" label="Print Bills" />
-		<button command="cmd_alternate_view" label="Alternate View" accesskey="V"/>
+		<button command="cmd_print_bills" label="&staff.patron.bills_overlay.print_bills.label;"/>
+		<button command="cmd_alternate_view" label="&staff.patron.bills_overlay.alternate_view.label;" accesskey="&staff.patron.bills_overlay.alternate_view.accesskey;"/>
 	</hbox>
 </box>
 
 <vbox id="bills_top_ui">
 	<hbox>
 		<groupbox>
-			<caption label="Summary"/>
+			<caption label="&staff.patron.bills_overlay.summary.label;"/>
 			<grid>
 				<columns><column /><column /></columns>                                 
 				<rows>
 					<row>
-						<label value="Net Balance" />
+						<label value="&staff.patron.bills_overlay.net_balance.value;"/>
 	
 						<textbox id="bill_total_owed" value="" readonly="true" />
 					</row>
 					<row>
-						<label value="- Payment applied" />
+						<label value="&staff.patron.bills_overlay.payment_applied.value;"/>
 			
 						<textbox id="bill_payment_applied" readonly="true"/>
 					</row>
 					<row>
-						<label value="= New Balance" 
+						<label value="&staff.patron.bills_overlay.new_balance.value;" 
 							style="font-family: bold" />
 	
 						<textbox id="bill_new_balance" readonly="true"/>
@@ -56,47 +56,47 @@
 		</groupbox>
 		<spacer flex="2"/>
 		<groupbox>
-			<caption label="Pay Bill"/>
+			<caption label="&staff.patron.bills_overlay.pay_bill.label;"/>
 			<grid>
 				<columns><column /><column /></columns>                                 
 				<rows>
 					<row>
-						<label value="Payment Type" 
-							accesskey="t" control="payment_type" />
+						<label value="&staff.patron.bills_overlay.payment_type.value;" 
+							accesskey="&staff.patron.bills_overlay.payment_type.accesskey;" control="payment_type" />
 						<menulist id="payment_type">
 							<menupopup id="payment_type_menupopup">
-								<menuitem id="payment_type_menuitem1" label="Cash" value="cash_payment"/>
-								<menuitem id="payment_type_menuitem2" label="Check" value="check_payment"/>
-								<menuitem id="payment_type_menuitem3" label="Credit Card" value="credit_card_payment"/>
+								<menuitem id="payment_type_menuitem1" label="&staff.patron.bills_overlay.cash.label;" value="cash_payment"/>
+								<menuitem id="payment_type_menuitem2" label="&staff.patron.bills_overlay.check.label;" value="check_payment"/>
+								<menuitem id="payment_type_menuitem3" label="&staff.patron.bills_overlay.credit_card.label;" value="credit_card_payment"/>
 								<!--
 								<menuitem id="payment_type_menuitem4" label="Patron Credit" value="credit_payment" />
 								-->
-								<menuitem id="payment_type_menuitem5" label="Work" value="work_payment"/>
-								<menuitem id="payment_type_menuitem6" label="Forgive" value="forgive_payment"/>
-								<menuitem id="payment_type_menuitem7" label="Goods" value="goods_payment"/>
+								<menuitem id="payment_type_menuitem5" label="&staff.patron.bills_overlay.word.label;" value="work_payment"/>
+								<menuitem id="payment_type_menuitem6" label="&staff.patron.bills_overlay.forgive.label;" value="forgive_payment"/>
+								<menuitem id="payment_type_menuitem7" label="&staff.patron.bills_overlay.goods.label;" value="goods_payment"/>
 							</menupopup>
 						</menulist>
 					</row>
 					<row>
-						<label value="Payment received" style="font-weight: bold"
-							accesskey="a" control="bill_payment_amount" />
+						<label value="&staff.patron.bills_overlay.payment_received.value;" style="font-weight: bold"
+							accesskey="&staff.patron.bills_overlay.payment_received.accesskey;" control="bill_payment_amount" />
 			
 						<textbox id="bill_payment_amount" style="border: solid thick black"/>
 					</row>
 					<row>
-						<label value="- Payment applied" />
+						<label value="&staff.patron.bills_overlay.payment_applied.value;"/>
 			
 						<textbox id="bpato" observes="bill_payment_applied" />
 					</row>
 					<row>
-						<label value="= Change" control="bill_change_amount" style="font-weight: bold" />
+						<label value="&staff.patron.bills_overlay.change.value;" control="bill_change_amount" style="font-weight: bold" />
 	
 						<hbox>
 							<textbox id="bill_change_amount" readonly="true"/>
 						</hbox>
 					</row>
 					<row class="hide_patron_credit" hidden="true">
-						<label value="or Patron Credit" 
+						<label value="&staff.patron.bills_overlay.patron_credit.value;" 
 							style="font-family: bold" />
 	
 						<textbox id="bill_credit_amount" readonly="true"/>
@@ -106,13 +106,13 @@
 		</groupbox>
 	</hbox>
 	<hbox>
-		<button id="bill_wizard" label="Bill Patron" accesskey="B" command="cmd_bill_wizard"/>
-		<button id="bill_history" label="History" accesskey="H" command="cmd_bill_history"/>
+		<button id="bill_wizard" label="&staff.patron.bills_overlay.bill_patron.label;" accesskey="&staff.patron.bills_overlay.bill_patron.accesskey;" command="cmd_bill_wizard"/>
+		<button id="bill_history" label="&staff.patron.bills_overlay.history.label;" accesskey="&staff.patron.bills_overlay.history.accesskey;" command="cmd_bill_history"/>
 		<spacer flex="2"/>
-		<checkbox id="annotate_payment" label="Annotate Payment" persist="checked" checked="false" />
+		<checkbox id="annotate_payment" label="&staff.patron.bills_overlay.annotate_payment.label;" persist="checked" checked="false" />
 		<checkbox id="auto_print" label="Auto-Print" persist="checked" checked="true" />
-		<button class="hide_patron_credit" hidden="true" disabled="true" id="change_to_credit" label="Convert Change to Patron Credit" command="cmd_change_to_credit"/>
-		<button id="bill_apply_payment" label="Apply Payment!" accesskey="P" command="cmd_bill_apply_payment"/>
+		<button class="hide_patron_credit" hidden="true" disabled="true" id="change_to_credit" label="&staff.patron.bills_overlay.convert_change_to_credit.label;" command="cmd_change_to_credit"/>
+		<button id="bill_apply_payment" label="&staff.patron.bills_overlay.apply_payment.label;" accesskey="&staff.patron.bills_overlay.apply_payment.accesskey;" command="cmd_bill_apply_payment"/>
 	</hbox>
 	<label value=" "/>
 </vbox>

Modified: trunk/Open-ILS/xul/staff_client/server/patron/display.js
===================================================================
--- trunk/Open-ILS/xul/staff_client/server/patron/display.js	2008-06-17 12:47:28 UTC (rev 9843)
+++ trunk/Open-ILS/xul/staff_client/server/patron/display.js	2008-06-17 18:07:45 UTC (rev 9844)
@@ -1,5 +1,7 @@
 dump('entering patron/display.js\n');
 
+function $(id) { return document.getElementById(id); }
+
 if (typeof patron == 'undefined') patron = {};
 patron.display = function (params) {
 
@@ -57,7 +59,7 @@
 								{
 									'row' : {
 										'my' : {
-											'circ_id' : checkout.circ.id(),
+											'circ_id' : checkout.circ.id()
 										}
 									}
 								}
@@ -76,7 +78,7 @@
 				control_map : {
 					'cmd_broken' : [
 						['command'],
-						function() { alert('Not Yet Implemented'); }
+						function() { alert($("commonStrings").getString('common.unimplemented')); }
 					],
 					'cmd_patron_retrieve' : [
 						['command'],
@@ -163,7 +165,7 @@
 										obj.bill_window.g.bills.refresh(true);
 									},
 									'url_prefix' : xulG.url_prefix,
-									'new_tab' : xulG.new_tab,
+									'new_tab' : xulG.new_tab
 								}
 							);
 							netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
@@ -176,7 +178,7 @@
 								obj.reset_nav_styling('cmd_patron_edit');
 
 								function spawn_search(s) {
-									obj.error.sdump('D_TRACE', 'Editor would like to search for: ' + js2JSON(s) ); 
+									obj.error.sdump('D_TRACE', $("commonStrings").getFormattedString('staff.patron.display.cmd_patron_edit.edit_search', [js2JSON(s)]) ); 
 									obj.data.stash_retrieve();
 									var loc = xulG.url_prefix(urls.XUL_PATRON_DISPLAY);
 									//loc += '?doit=1&query=' + window.escape(js2JSON(s));
@@ -197,13 +199,13 @@
 										{ 
 											'url' : url,
 											'show_print_button' : true , 
-											'tab_name' : 'Editing Related Patron' ,
+											'tab_name' : $("patronStrings").getString('staff.patron.display.spawn_editor.editing_related_patron'),
 											'passthru_content_params' : {
 												'spawn_search' : spawn_search,
 												'spawn_editor' : spawn_editor,
 												'url_prefix' : xulG.url_prefix,
 												'new_tab' : xulG.new_tab,
-												'params' : p,
+												'params' : p
 											}
 										}
 									);
@@ -223,7 +225,7 @@
 										'params' : {
 											'ses' : ses(),
 											'usr' : obj.patron.id(),
-										},
+										}
 										'on_save' : function(p) {
 											try {
 												if (obj.barcode) obj.barcode = p.card().barcode();
@@ -237,7 +239,7 @@
 										'spawn_search' : spawn_search,
 										'spawn_editor' : spawn_editor,
 										'url_prefix' : xulG.url_prefix,
-										'new_tab' : xulG.new_tab,
+										'new_tab' : xulG.new_tab
 									}
 								}
 							);
@@ -253,7 +255,7 @@
 								{
 									'patron_id' : obj.patron.id(),
 									'url_prefix' : xulG.url_prefix,
-									'new_tab' : xulG.new_tab,
+									'new_tab' : xulG.new_tab
 								}
 							);
 						}
@@ -281,7 +283,7 @@
 										obj.refresh_all();
 									},
 									'url_prefix' : xulG.url_prefix,
-									'new_tab' : xulG.new_tab,
+									'new_tab' : xulG.new_tab
 								}
 							);
 						}
@@ -330,7 +332,7 @@
 						function(e) {
 							return function() {}
 						}
-					],
+					]
 				}
 			}
 		);
@@ -355,7 +357,7 @@
 			obj.controller.view.cmd_patron_bills.setAttribute('disabled','true');
 			obj.controller.view.cmd_patron_edit.setAttribute('disabled','true');
 			obj.controller.view.cmd_patron_info.setAttribute('disabled','true');
-			obj.controller.view.patron_name.setAttribute('value','Retrieving...');
+			obj.controller.view.patron_name.setAttribute('value', $("patronStrings").getString('staff.patron.display.init.retrieving'));
 			document.documentElement.setAttribute('class','');
 			var frame = obj.left_deck.set_iframe(
 				urls.XUL_PATRON_SUMMARY,
@@ -397,23 +399,24 @@
 							function(req) {
 								try {
 									var msg = ''; obj.stop_checkouts = false;
-									if (patron.alert_message()) msg += 'Alert message: "' + patron.alert_message() + '"<br/><br/>\n';
+									if (patron.alert_message())
+										msg += $("patronStrings").getFormattedString('staff.patron.display.init.network_request.alert_message', [patron.alert_message()]);
 									//alert('obj.barcode = ' + obj.barcode);
 									if (obj.barcode) {
 										if (patron.cards()) for (var i = 0; i < patron.cards().length; i++) {
 											//alert('card #'+i+' == ' + js2JSON(patron.cards()[i]));
 											if ( (patron.cards()[i].barcode()==obj.barcode) && ( ! get_bool(patron.cards()[i].active()) ) ) {
-												msg += 'Patron account retrieved with an INACTIVE card.<br/><br/>\n';
+												msg += $("patronStrings").getString('staff.patron.display.init.network_request.inactive_card');
 												obj.stop_checkouts = true;
 											}
 										}
 									}
 									if (get_bool(patron.barred())) {
-										msg += 'Patron account is BARRED.<br/><br/>\n';
+										msg += $("patronStrings").getString('staff.patron.display.init.network_request.account_barred');
 										obj.stop_checkouts = true;
 									}
 									if (!get_bool(patron.active())) {
-										msg += 'Patron account is INACTIVE.<br/><br/>\n';
+										msg += $("patronStrings").getString('staff.patron.display.init.network_request.account_inactive');
 										obj.stop_checkouts = true;
 									}
 									if (patron.expire_date()) {
@@ -428,7 +431,7 @@
 										expire = expire.getTime()/1000
 
 										if (expire < now) {
-											msg += 'Patron account is EXPIRED.<br/><br/>\n';
+											msg += $("patronStrings").getString('staff.patron.display.init.network_request.accoutn_expired');
 										obj.stop_checkouts = true;
 										}
 									}
@@ -438,11 +441,13 @@
 										if (msg != obj.old_msg) {
 											//obj.error.yns_alert(msg,'Alert Message','OK',null,null,'Check here to confirm this message.');
 											document.documentElement.firstChild.focus();
-											var data_url = window.escape("<img src='" + xulG.url_prefix('/xul/server/skin/media/images/stop_sign.png') + "'/>" + '<h1>Alert</h1><blockquote><p>' + msg + '</p>\r\n\r\n<pre>Press a navigation button above (e.g. Check Out) to clear this alert.</pre></blockquote>');
+											var data_url = window.escape("<img src='" + xulG.url_prefix('/xul/server/skin/media/images/stop_sign.png') + "'/>" + '<h1>'
+												+ $("patronStrings").getString('staff.patron.display.init.network_request.window_title') + '</h1><blockquote><p>' + msg + '</p>\r\n\r\n<pre>'
+												+ $("patronStrings").getString('staff.patron.display.init.network_request.window_message') + '</pre></blockquote>');
 											obj.right_deck.set_iframe('data:text/html,'+data_url,{},{});
 											obj.old_msg = msg;
 										} else {
-											obj.error.sdump('D_TRACE','Not re-displaying this alert message: ' + msg);
+											obj.error.sdump('D_TRACE',$("patronStrings").getFormattedString('staff.patron.display.init.network_request.dump_error_message', [msg]));
 										}
 									}
 									if (obj.stop_checkouts && obj.checkout_window) {
@@ -454,7 +459,7 @@
 										}, 1000);
 									}
 								} catch(E) {
-									obj.error.standard_unexpected_error_alert('Error showing patron alert and holds availability.',E);
+									obj.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.display.init.network_request.error_showing_alert'),E);
 								}
 							}
 						);
@@ -518,7 +523,7 @@
 								obj.controller.view.cmd_patron_retrieve.setAttribute('disabled','false');
 								obj.controller.view.cmd_search_form.setAttribute('disabled','false');
 								obj.retrieve_ids = list;
-								obj.controller.view.patron_name.setAttribute('value','Retrieving...');
+								obj.controller.view.patron_name.setAttribute('value',$("patronStrings").getString('staff.patron.display.init.retrieving'));
 								document.documentElement.setAttribute('class','');
 								setTimeout(
 									function() {
@@ -589,9 +594,7 @@
 	
 	'refresh_all' : function() {
 		var obj = this;
-		obj.controller.view.patron_name.setAttribute(
-			'value','Retrieving...'
-		);
+		obj.controller.view.patron_name.setAttribute('value', $("patronStrings").getString('staff.patron.display.init.retrieving'));
 		document.documentElement.setAttribute('class','');
 		try { obj.summary_window.refresh(); } catch(E) { obj.error.sdump('D_ERROR', E + '\n'); }
 		try { obj.refresh_deck(); } catch(E) { obj.error.sdump('D_ERROR', E + '\n'); }

Modified: trunk/Open-ILS/xul/staff_client/server/patron/display.xul
===================================================================
--- trunk/Open-ILS/xul/staff_client/server/patron/display.xul	2008-06-17 12:47:28 UTC (rev 9843)
+++ trunk/Open-ILS/xul/staff_client/server/patron/display.xul	2008-06-17 18:07:45 UTC (rev 9844)
@@ -12,7 +12,7 @@
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
 <!-- LOCALIZATION -->
 <!DOCTYPE window PUBLIC "" ""[
-	<!--#include virtual="/opac/locale/en-US/lang.dtd"-->
+	<!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
 ]>
 
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
@@ -34,10 +34,12 @@
 	<script type="text/javascript" src="/xul/server/main/JSAN.js"/>
 	<script>
 	<![CDATA[
+		function $(id) { return document.getElementById(id); }
+	
 		function my_init() {
 			try {
 				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
-		                if (typeof JSAN == 'undefined') { throw( "The JSAN library object is missing."); }
+				if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
 				JSAN.errorLevel = "die"; // none, warn, or die
 				JSAN.addRepository('/xul/server/');
 				JSAN.use('util.error'); g.error = new util.error();
@@ -54,9 +56,7 @@
 			//document.documentElement.style.setProperty('font-size-adjust','1','important');
 
 			} catch(E) {
-				var err_msg = "!! This software has encountered an error.  Please tell your friendly " +
-					"system administrator or software developer the following:\n" 
-					+ 'patron/display.xul\n' + E + '\n';
+				var err_msg = $("commonStrings").getFormattedString('common.exception', ['patron/display.xul', E]);
 				try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
 				alert(err_msg);
 			}
@@ -86,6 +86,9 @@
 	]]>
 	</script>
 
+	<messagecatalog id="patronStrings" src="/xul/server/locale/<!--#echo var='locale'-->/patron.properties"/>
+	<messagecatalog id="commonStrings" src="/xul/server/locale/<!--#echo var='locale'-->/common.properties" />
+
 	<commandset id="patron_display_cmds">
 		<command id="cmd_patron_refresh" />
 		<command id="cmd_patron_checkout" />

Modified: trunk/Open-ILS/xul/staff_client/server/patron/display_overlay.xul
===================================================================
--- trunk/Open-ILS/xul/staff_client/server/patron/display_overlay.xul	2008-06-17 12:47:28 UTC (rev 9843)
+++ trunk/Open-ILS/xul/staff_client/server/patron/display_overlay.xul	2008-06-17 18:07:45 UTC (rev 9844)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <!DOCTYPE overlay PUBLIC "" ""[
-	<!--#include virtual="/opac/locale/en-US/lang.dtd"-->
+	<!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
 ]>
 <overlay id="patron_display_overlay" 
 	xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
@@ -13,23 +13,23 @@
 <vbox id="pdm2" flex="1">
 	<hbox id="pdm2hb1">
 		<hbox>
-			<label id="patron_name" class="patronNameLarge" tooltiptext="&staff.patron_display.name.label;" value="No Patron Selected" flex="1"/>
+			<label id="patron_name" class="patronNameLarge" tooltiptext="&staff.patron_display.name.label;" value="&staff.patron.display_overlay.none_selected.value;" flex="1"/>
 		</hbox>
 		<deck id="PatronNavBar" flex="1" class="my_overflow" />
 	</hbox>
 	<hbox id="pdm2hb1a">
-		<label class="hideme barred_indicator" value="(Barred)"/>
-		<label class="hideme expired_indicator" value="(Expired)"/>
-		<label class="hideme inactive_indicator" value="(In-Active)"/>
-		<label class="hideme juvenile_indicator" value="(Juvenile)"/>
-		<label class="hideme alert_indicator" value="(Alert)"/>
-		<label class="hideme note_indicator" value="(See Notes)"/>
-		<label class="hideme max_bills_indicator" value="(Max Bills)"/>
-		<label class="hideme max_overdues_indicator" value="(Max Overdues)"/>
-		<label class="hideme bills_indicator" value="(Has Bills)"/>
-		<label class="hideme overdues_indicator" value="(Has Overdues)"/>
-		<label class="hideme invalid_dob_indicator" value="(Invalid DOB)"/>
-		<label class="hideme invalid_address_indicator" value="(Invalid Address)"/>
+		<label class="hideme barred_indicator" value="&staff.patron.display_overlay.barred.value;"/>
+		<label class="hideme expired_indicator" value="&staff.patron.display_overlay.expired.value;"/>
+		<label class="hideme inactive_indicator" value="&staff.patron.display_overlay.inactive.value;"/>
+		<label class="hideme juvenile_indicator" value="&staff.patron.display_overlay.juvenile.value;"/>
+		<label class="hideme alert_indicator" value="&staff.patron.display_overlay.alert.value;"/>
+		<label class="hideme note_indicator" value="&staff.patron.display_overlay.see_notes.value;"/>
+		<label class="hideme max_bills_indicator" value="&staff.patron.display_overlay.max_bills.value;"/>
+		<label class="hideme max_overdues_indicator" value="&staff.patron.display_overlay.max_overdues.value;"/>
+		<label class="hideme bills_indicator" value="&staff.patron.display_overlay.has_bills.value;"/>
+		<label class="hideme overdues_indicator" value="&staff.patron.display_overlay.has_overdues.value;"/>
+		<label class="hideme invalid_dob_indicator" value="&staff.patron.display_overlay.invalid_dob.value;"/>
+		<label class="hideme invalid_address_indicator" value="&staff.patron.display_overlay.invalid_address.value;"/>
 	</hbox>
 	<hbox id="PatronNotNavBar" flex="1" class="my_bg">
 		<vbox id="pdm3" flex="1" persist="width">
@@ -75,13 +75,13 @@
 	<button id="PatronNavBar_info" command="cmd_patron_info" class="nav"
 		label="&staff.patron_navbar.info;" accesskey="&staff.patron_navbar.info.accesskey;"/>
 	<button id="PatronNavBar_exit" command="cmd_patron_exit" class="nav"
-		label="Exit" accesskey="x"/>
+		label="&staff.patron.display_overlay.exit.label;" accesskey="&staff.patron.display_overlay.exit.accesskey;"/>
 </hbox>
 
 <hbox id="PatronNavBar0">
 	<spacer flex="1"/>
-	<button id="pnb1b0" label="Search Form" accesskey="F" command="cmd_search_form"/>
-	<button id="pnb1b1" label="Retrieve Patron" accesskey="R" command="cmd_patron_retrieve"/>
+	<button id="pnb1b0" label="&staff.patron.display_overlay.search_form.label;" accesskey="&staff.patron.display_overlay.search_form.accesskey;" command="cmd_search_form"/>
+	<button id="pnb1b1" label="&staff.patron.display_overlay.retrieve_patron.label;" accesskey="&staff.patron.display_overlay.retrieve_patron.accesskey;" command="cmd_patron_retrieve"/>
 </hbox>
 
 </overlay>

Modified: trunk/Open-ILS/xul/staff_client/server/patron/hold_notices.xul
===================================================================
--- trunk/Open-ILS/xul/staff_client/server/patron/hold_notices.xul	2008-06-17 12:47:28 UTC (rev 9843)
+++ trunk/Open-ILS/xul/staff_client/server/patron/hold_notices.xul	2008-06-17 18:07:45 UTC (rev 9844)
@@ -12,7 +12,7 @@
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
 <!-- LOCALIZATION -->
 <!DOCTYPE window PUBLIC "" ""[
-	<!--#include virtual="/opac/locale/en-US/lang.dtd"-->
+	<!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
 ]>
 
 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
@@ -37,7 +37,7 @@
 		function my_init() {
 			try {
 				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
-                if (typeof JSAN == 'undefined') { throw( "The JSAN library object is missing."); }
+				if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
 				JSAN.errorLevel = "die"; // none, warn, or die
 				JSAN.addRepository('/xul/server/');
 
@@ -173,7 +173,7 @@
 				/* template */
 				var node = $('notification_template').cloneNode(true); np.appendChild(node); node.hidden = false;
 				util.widgets.apply(node,'name','notify_time',
-					function(n){n.setAttribute("tooltiptext","ID: " + g.notifications[i].id() + " Hold ID: " + g.notifications[i].hold() + " Notifying Staff ID: " + g.notifications[i].notify_staff());}
+					function(n){n.setAttribute("tooltiptext", $("patronStrings").getFormattedString('staff.patron.hold_notices.tooltiptext',[g.notifications[i].id(), g.notifications[i].hold(), g.notifications[i].notify_staff()]));
 				);
 				apply(node,'method',g.notifications[i].method ? g.notifications[i].method() : '');
 				apply(node,'note',g.notifications[i].note() ? g.notifications[i].note() : '');
@@ -186,11 +186,13 @@
 			try {
 				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalBrowserWrite");
 				var xml = '<groupbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1">';
-				xml += '<caption label="New Notification Record"/><grid flex="1"><columns><column/><column flex="1"/></columns><rows>';
-				xml += '<row><label value="Method"/><textbox id="method" name="fancy_data"/></row>';
-				xml += '<row><label value="Note"/><textbox multiline="true" id="note" name="fancy_data"/></row>';
-				xml += '<row><spacer/><hbox><button label="Cancel" name="fancy_cancel" accesskey="C"/>';
-				xml += '<button label="Add Notification Record" accesskey="A" name="fancy_submit"/></hbox></row></rows></grid></groupbox>';
+				xml += '<caption label="' + $("patronStrings").getString('staff.patron.hold_notices.new_notification_record') + '"/><grid flex="1"><columns><column/><column flex="1"/></columns><rows>';
+				xml += '<row><label value="' + $("patronStrings").getString('staff.patron.hold_notices.method') + '"/><textbox id="method" name="fancy_data"/></row>';
+				xml += '<row><label value="' + $("patronStrings").getString('staff.patron.hold_notices.note') + '"/><textbox multiline="true" id="note" name="fancy_data"/></row>';
+				xml += '<row><spacer/><hbox><button label="' + $("patronStrings").getString('staff.patron.hold_notices.cancel') + '" name="fancy_cancel"';
+				xml += 'accesskey="' + $("patronStrings").getString('staff.patron.hold_notices.cancel_accesskey') + '"/>';
+				xml += '<button label="' + $("patronStrings").getString('staff.patron.hold_notices.add_notif_record') + '";'
+				xml += 'accesskey="' + $("patronStrings").getString('staff.patron.hold_notices.add_notif_record_accesskey') + '" name="fancy_submit"/></hbox></row></rows></grid></groupbox>';
 				//g.data.init({'via':'stash'});
 				//g.data.temp_notification_xml = xml; g.data.stash('temp_notification_xml');
 				JSAN.use('util.window'); var win = new util.window();
@@ -200,7 +202,7 @@
 					//+ '&focus=' + window.escape('method')
 					//+ '&title=' + window.escape('Add Notification Record'),
 					'fancy_prompt', 'chrome,resizable,modal,width=700,height=500',
-					{ 'xml' : xml, 'focus' : 'method', 'title' : 'Add Notification Record' }
+					{ 'xml' : xml, 'focus' : 'method', 'title' : $("patronStrings").getString('staff.patron.hold_notices.add_notif_record') }
 				);
 				if (fancy_prompt_data.fancy_status == 'complete') {
 					var notification = new ahn();
@@ -212,7 +214,7 @@
 					setTimeout(function(){refresh();},0);
 				}
 			} catch(E) {
-				g.error.standard_unexpected_error_alert('The notification was not likely created.',E);
+				g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.hold_notices.new_notification.not_created'),E);
 				setTimeout(function(){refresh();},0);
 			}
 		}
@@ -220,7 +222,9 @@
 	]]>
 	</script>
 
-    <messagecatalog id="circStrings" src="/xul/server/locale/<!--#echo var='locale' -->/circ.properties"/>
+	<messagecatalog id="circStrings" src="/xul/server/locale/<!--#echo var='locale' -->/circ.properties"/>
+	<messagecatalog id="patronStrings" src="/xul/server/locale/<!--#echo var='locale'-->/patron.properties"/>
+	<messagecatalog id="commonStrings" src="/xul/server/locale/<!--#echo var='locale'-->/common.properties" />	
 
 	<stack hidden="true" id="notification_template" flex="1">
 		<groupbox flex="1" style="background-color: black;"/>
@@ -246,9 +250,9 @@
             <tree id="holds_list" flex="1" enableColumnDrag="true" style=""/>
         </vbox>
         <hbox>
-            <button label="Add Record of Notification" accesskey="A" oncommand="new_notification()"/>
+            <button label="&staff.patron.hold_notices.add_record_notification.label;" accesskey="&staff.patron.hold_notices.add_record_notification.accesskey;" oncommand="new_notification()"/>
             <spacer flex="1"/>
-            <button label="Close" accesskey="C" oncommand="window.close()"/>
+            <button label="&staff.patron.hold_notices.close_window.label;" accesskey="&staff.patron.hold_notices.close_window.accesskey;" oncommand="window.close()"/>
         </hbox>
 	</vbox>
 



More information about the open-ils-commits mailing list